--- /dev/null
+Robert Powell <rob@yorba.org>
+Adam Dingle <adam@yorba.org>
+Andrew O'Mahony <andrew.omahony@att.net>
+Dru Moore <usr@dru-id.co.uk>
+
--- /dev/null
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+\f
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+\f
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+\f
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+\f
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+\f
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+\f
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+\f
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+\f
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
--- /dev/null
+
+ Fillmore Installation
+ ---------------------
+
+ To build and install Fillmore, type the following commands:
+
+ $ ./configure
+ $ make fillmore
+ $ make install-fillmore
+
+ * By default, Fillmore will install under /usr/local. The configure script
+ can customize the prefix directory. Run ./configure --help for
+ instructions and other installation options.
+
+ * You may need to execute "make install" as root (i.e. sudo make install)
+ if installing to system directories.
+
+ * If you wish to try Fillmore before installing it, you may execute it
+ directly from its build directory. Note that certain desktop integration
+ (such as being listed in an application menu) requires full installation.
+
+ Once installed, Fillmore will be available on your desktop Applications
+ menu under Sound & Video.
+
+
+ Lombard Installation
+ --------------------
+
+ To build and install Lombard, type the following commands:
+
+ $ ./configure
+ $ make lombard
+ $ make install-lombard
+
+ * By default, Lombard will install under /usr/local. The configure script
+ can customize the prefix directory. Run ./configure --help for
+ instructions and other installation options.
+
+ * You may need to execute "make install" as root (i.e. sudo make install)
+ if installing to system directories.
+
+ * If you wish to try Lombard before installing it, you may execute it
+ directly from its build directory. Note that certain desktop integration
+ (such as being listed in an application menu) requires full installation.
+
+ Once installed, Lombard will be available on your desktop Applications
+ menu under Sound & Video.
+
+ Copyright 2009-2010 Yorba Foundation
+
--- /dev/null
+Robert Powell
+email: rob@yorba.org
+
--- /dev/null
+default: all
+
+BUILD_ROOT = 1
+
+VERSION = 0.1.0
+FILLMORE = fillmore
+LOMBARD = lombard
+MEDIA_TEST = media_test
+
+SRC_PREFIX=MARINA_
+-include src/marina/sources.mk
+DIST_SRC_FILES = $(foreach src,$(MARINA_SRC_FILES), src/marina/$(src))
+
+SRC_PREFIX=LOMBARD_
+-include src/lombard/sources.mk
+DIST_SRC_FILES += $(foreach src, $(LOMBARD_SRC_FILES), src/lombard/$(src))
+
+SRC_PREFIX=FILLMORE_
+-include src/fillmore/sources.mk
+DIST_SRC_FILES += $(foreach src, $(FILLMORE_SRC_FILES), src/fillmore/$(src))
+
+SRC_PREFIX=TEST_
+-include src/test/sources.mk
+DIST_SRC_FILES += $(foreach src, $(TEST_SRC_FILES), src/test/$(src))
+
+TEXT_FILES = \
+ AUTHORS \
+ COPYING \
+ INSTALL \
+ MAINTAINERS \
+ NEWS \
+ README \
+ THANKS
+
+DIST_MAKEFILES = \
+ Makefile \
+ marina.mk \
+ src/marina/Makefile \
+ src/marina/sources.mk \
+ src/fillmore/Makefile \
+ src/fillmore/sources.mk \
+ src/lombard/Makefile \
+ src/lombard/sources.mk \
+ src/test/Makefile \
+ src/test/sources.mk
+
+DIST_NAME = media
+DIST_FILES = $(DIST_MAKEFILES) configure minver $(DIST_SRC_FILES) $(EXPANDED_VAPI_FILES) \
+ $(EXPANDED_SRC_HEADER_FILES) $(EXPANDED_RESOURCE_FILES) $(TEXT_FILES) resources/* misc/*
+
+DIST_TAR = $(DIST_NAME)-$(VERSION).tar
+DIST_TAR_BZ2 = $(DIST_TAR).bz2
+DIST_TAR_GZ = $(DIST_TAR).gz
+PACKAGE_ORIG_GZ = $(DIST_NAME)_`parsechangelog | grep Version | sed 's/.*: //'`.orig.tar.gz
+
+MARINA = marina/libmarina.a
+.PHONY: $(FILLMORE)
+.PHONY: $(LOMBARD)
+.PHONY: $(MEDIA_TEST)
+.PHONY: $(MARINA)
+
+$(MARINA):
+ export VERSION=$(VERSION); $(MAKE) --directory=src/marina
+
+$(FILLMORE): $(MARINA)
+ export PROGRAM_NAME=$(FILLMORE); $(MAKE) --directory=src/fillmore
+
+install: install-$(FILLMORE) install-$(LOMBARD)
+
+
+uninstall: uninstall-$(FILLMORE) uninstall-$(LOMBARD)
+
+
+install-$(FILLMORE): $(FILLMORE)
+ export PROGRAM_NAME=$(FILLMORE); \
+ $(MAKE) --directory=src/fillmore install; \
+
+uninstall-$(FILLMORE):
+ export PROGRAM_NAME=$(FILLMORE); \
+ $(MAKE) --directory=src/fillmore uninstall; \
+
+$(LOMBARD): $(MARINA)
+ export PROGRAM_NAME=$(LOMBARD); \
+ $(MAKE) --directory=src/lombard; \
+
+install-$(LOMBARD): $(LOMBARD)
+ export PROGRAM_NAME=$(LOMBARD); \
+ $(MAKE) --directory=src/lombard install; \
+
+uninstall-$(LOMBARD):
+ export PROGRAM_NAME=$(LOMBARD); \
+ $(MAKE) --directory=src/lombard uninstall; \
+
+$(MEDIA_TEST):
+ export PROGRAM_NAME=$(MEDIA_TEST); \
+ $(MAKE) --directory=src/test;
+
+all: $(FILLMORE) $(LOMBARD) $(MEDIA_TEST)
+
+
+clean:
+ $(MAKE) --directory=src/marina clean
+ export PROGRAM_NAME=$(FILLMORE); $(MAKE) --directory=src/fillmore clean
+ export PROGRAM_NAME=$(LOMBARD); $(MAKE) --directory=src/lombard clean
+ export PROGRAM_NAME=$(MEDIA_TEST); $(MAKE) --directory=src/test clean
+
+dist: $(DIST_FILES)
+ mkdir -p $(DIST_NAME)-$(VERSION)
+ cp --parents $(DIST_FILES) $(DIST_NAME)-$(VERSION)
+ tar --bzip2 -cvf $(DIST_TAR_BZ2) $(DIST_NAME)-$(VERSION)
+ tar --gzip -cvf $(DIST_TAR_GZ) $(DIST_NAME)-$(VERSION)
+ rm -rf $(DIST_NAME)-$(VERSION)
+
+distclean: clean
+ rm -f configure.mk
+
--- /dev/null
+Fillmore 0.1.0 -
+-----------------------------
+
+ * Initial release. Features include:
+ - Recording from an input device.
+ - Support of source audio of a number of formats.
+ - Playback from multiple tracks.
+ - Positioning audio in stereo image.
+ - Optional metronome while playing or recording.
+ - Exporting project to OggVorbis format files.
+ - Desktop integration with Applications menu.
+
+Lombard 0.1.0 -
+-----------------------------
+
+ * Initial release. Features include:
+ - Source video and audio of a number of formats.
+ - Exporting project to OggTheora format files.
+ - Desktop integration with Applications menu.
--- /dev/null
+
+ Fillmore and Lombard Audio and Video editors
+ --------------------------------------------
+
+ * Introduction
+
+ Fillmore is an audio editor designed for the GNOME desktop environment.
+ It allows you to record audio, place audio on multiple tracks, adjust
+ the position of the track in the stereo track and export your project
+ as a single stereo file.
+
+ Visit http://www.yorba.org/fillmore to read about the current state of
+ Fillmore's development and to make sure you're running the latest version.
+
+ Lombard is a video editor designed for the GNOME desktop environment.
+ It allows you to manipulate multiple video and audio clips and export
+ your project as a single video file.
+
+ * Installation & Licensing
+ Please consult the INSTALL and COPYING files for more information.
+
+ * Quick Start
+
+Fillmore
+ When you first run Fillmore, you will be presented with a window with three
+ sections: Track Header on the left, Timeline in the middle and Library on
+ on the left. The first task you will want to do is adjust the project
+ properties.
+
+ From the File menu, select Settings. This displays the Project Properties
+ dialog. If you are recording music and want a metronome, select your time
+ signature and tempo. If you do not want a metronome, deselect the checkbox
+ "During record."
+
+ Next, you will want to add audio. You can add audio to your project in two
+ different ways.
+
+ * Drag audio: Drag audio files from the file manager either to a track on
+ the timeline or into the library. You will only hear audio for clips that
+ are on a track.
+
+ * Record audio: Before launching Fillmore, plug a device for sound input
+ into your computer. In the Sound Preferences dialog, select this device
+ as the default input device. Launch Fillmore. Press the big red
+ button to record. To select which track is active for recording, select
+ the desired track by clicking in the track header area next to the track.
+ You can also click on the ruler to choose the time to start recording.
+
+ Next, may want to position the audio on the timeline. You can change the
+ duration and location of the clips by dragging the clips.
+
+ Once you have created your source material and are happy with it, you may
+ want to export your project. From the File menu, select Export.
+
+Lombard
+ When you first run Lombard, you will be presented with a window with three
+ sections: Library window on the left, Output window on the right and timeline
+ on the bottom.
+
+ First, you will want to get video and audio into the project. From the file
+ manager, drag your video or audio into the library or the timeline.
+
+ Next, you will want to position your clips. You can change the duration and
+ location of the clips by dragging the clips.
+
+ Once you have arranged your material and are happy with it, you may want
+ to export your project. From the File menu, select Export.
+
+ * Contacting Yorba
+
+ Yorba: http://www.yorba.org
+ Fillmore project page: http://www.yorba.org/fillmore
+ Fillmore documentation: http://trac.yorba.org/wiki/UsingFillmore0.1
+ Lombard project page: http://www.yorba.org/lombard
+ Lombard documentation http://www.yorba.org/wiki/UsingLombard0.1
+
+ We also encourage you to join the Fillmore and Lombard mailing lists. Send an email
+ with a subject: line of "subscribe" (no quotes) to
+ fillmore-request@lists.yorba.org
+ lombard-request@lists.yorba.org
+
+
+ Copyright 2009-2010 Yorba Foundation
+
--- /dev/null
+We'd like to thank the following contributors:
+
+Matt Jones <mattjones@workhorsy.org>
+
--- /dev/null
+#! /bin/bash
+#
+# Copyright 2009 Yorba Foundation
+#
+# This software is licensed under the GNU LGPL (version 2.1 or later).
+# See the COPYING file in this distribution.
+
+CONFIG_IN=configure.mk
+
+configure_help() {
+ printf "\nUsage:\n"
+ printf "\t./configure [OPTIONS]...\n"
+ printf "\n"
+ printf "Options:\n"
+ printf "\t-h, --help\t\tPrint this help and exit.\n"
+ printf "\t--assume-pkgs\t\tTurn off package version checking.\n"
+ printf "\t--build=DIR\t\tBuild secondary files in DIR.\n"
+ printf "\t--debug | --release\tBuild executable for debugging or release.\n"
+ printf "\t\t\t\t[--release]\n"
+ printf "\t--define=SYMBOL\t\tDefine a symbol for the Vala compiler.\n"
+ printf "\n"
+}
+
+abort() {
+ printf "%s: Invalid argument %s\n" $0 $1
+ configure_help
+ exit 1
+}
+
+while [ $# != 0 ]
+do
+ option=`echo $1 | sed 's/=.*//'`
+ if [ `echo $1 | grep '='` ]
+ then
+ value=`echo $1 | sed 's/.*=//'`
+ fi
+
+ case $option in
+ -h | --help) configure_help
+ exit 0
+ ;;
+
+ --assume-pkgs) variables="${variables}ASSUME_PKGS=1\n"
+ ;;
+
+ --build) if [ ! $value ]
+ then
+ abort $1
+ fi
+
+ variables="${variables}BUILD_DIR=$value\n"
+ variables="${variables}MARINA_VAPI=../marina/$value/marina.vapi\n"
+ ;;
+
+ --debug) variables="${variables}BUILD_RELEASE=\nBUILD_DEBUG=1\n"
+ ;;
+
+ --release) variables="${variables}BUILD_DEBUG=\nBUILD_RELEASE=1\n"
+ ;;
+
+ --define) variables="${variables}USER_VALAFLAGS+=--define=$value\n"
+ ;;
+
+
+ *) if [ ! $value ]
+ then
+ abort $1
+ fi
+
+ variables="${variables}${option}=${value}\n"
+ ;;
+ esac
+
+ shift
+done
+
+rm -f $CONFIG_IN
+if [ $variables ]
+then
+ echo -e -n $variables > $CONFIG_IN
+fi
+echo "CONFIG_IN=../../${CONFIG_IN}" >> $CONFIG_IN
+
+printf "Configured. Type 'make' to build\n"
--- /dev/null
+CONFIG_IN=../../configure.mk
--- /dev/null
+VALAC = valac
+MIN_VALAC_VERSION = 0.9.1
+# defaults that may be overridden by configure.mk
+PREFIX=/usr/local
+
+INSTALL_PROGRAM = install
+INSTALL_DATA = install -m 644
+
+ifndef MARINA_VAPI
+MARINA_VAPI = ../marina/marina/marina.vapi
+endif
+
+ifdef USE_MARINA_VAPI
+TEMP_MARINA_VAPI = $(MARINA_VAPI)
+endif
+
+VAPI_DIRS = \
+ ../../vapi
+
+HEADER_DIRS = \
+ ../../vapi
+
+EXT_PKGS = \
+ gee-1.0 \
+ gdk-x11-2.0 \
+ gstreamer-0.10 \
+ gstreamer-base-0.10 \
+ gstreamer-controller-0.10 \
+ gstreamer-interfaces-0.10 \
+ gstreamer-pbutils-0.10 \
+ gtk+-2.0 \
+ hildon-1 \
+ hildon-fm-2
+
+
+EXT_PKG_VERSIONS = \
+ gtk+-2.0 >= 2.14.0 \
+ gee-1.0 >= 0.5.0 \
+ gdk-x11-2.0 >= 2.14.7 \
+ gstreamer-0.10 >= 0.10.25 \
+ gstreamer-base-0.10 >= 0.10.25 \
+ gstreamer-controller-0.10 >= 0.10.25 \
+ gstreamer-interfaces-0.10 >= 0.10.25 \
+ gstreamer-pbutils-0.10 >= 0.10.25
+
+PKGS = $(EXT_PKGS) $(LOCAL_PKGS)
+
+EXPANDED_SRC_FILES = $(foreach src,$(SRC_FILES),./$(src))
+EXPANDED_C_FILES = $(foreach src,$(SRC_FILES),$(BUILD_DIR)/$(notdir $(src:.vala=.c)))
+EXPANDED_SAVE_TEMPS_FILES = $(foreach src,$(SRC_FILES),$(BUILD_DIR)/$(notdir $(src:.vala=.vala.c)))
+EXPANDED_OBJ_FILES = $(foreach src,$(SRC_FILES),$(BUILD_DIR)/$(notdir $(src:.vala=.o)))
+
+EXPANDED_VAPI_FILES = $(foreach vapi,$(VAPI_FILES),vapi/$(vapi))
+EXPANDED_SRC_HEADER_FILES = $(foreach header,$(SRC_HEADER_FILES),vapi/$(header))
+EXPANDED_RESOURCE_FILES = $(foreach res,$(RESOURCE_FILES),ui/$(res))
+VALA_STAMP = $(BUILD_DIR)/.stamp
+
+ifdef PROGRAM
+DEFINES = _PROGRAM_NAME='"$(PROGRAM_NAME)"'
+endif
+
+ifdef LIBRARY
+DEFINES = _VERSION='"$(VERSION)"' _PREFIX='"$(PREFIX)"'
+endif
+
+VALA_CFLAGS = `pkg-config --cflags $(EXT_PKGS)` $(foreach hdir,$(HEADER_DIRS),-I$(hdir)) \
+ $(foreach def,$(DEFINES),-D$(def))
+
+# setting CFLAGS in configure.mk overrides build type
+ifndef CFLAGS
+ifdef BUILD_DEBUG
+CFLAGS = -O0 -g -pipe -fPIC
+else
+CFLAGS = -O2 -g -pipe -fPIC
+endif
+endif
+
+VALAFLAGS = -g --enable-checking --thread $(USER_VALAFLAGS)
+
+# We touch the C file so that we have a better chance of a valid executable. Bug #1778
+$(EXPANDED_C_FILES): $(VALA_STAMP)
+ touch $@
+
+$(EXPANDED_OBJ_FILES): %.o: %.c $(CONFIG_IN) Makefile
+ $(CC) -c $(VALA_CFLAGS) $(CFLAGS) -o $@ $<
+
+install:
+ mkdir -p $(DESTDIR)$(PREFIX)/bin
+ $(INSTALL_PROGRAM) $(PROGRAM) $(DESTDIR)$(PREFIX)/bin
+ mkdir -p $(DESTDIR)$(PREFIX)/share/$(PROGRAM_NAME)/resources
+ $(INSTALL_DATA) ../../resources/* $(DESTDIR)$(PREFIX)/share/$(PROGRAM_NAME)/resources
+ mkdir -p $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps
+ $(INSTALL_DATA) ../../resources/$(PROGRAM_NAME).svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps
+ifndef DISABLE_ICON_UPDATE
+ -gtk-update-icon-cache -f -t $(DESTDIR)$(PREFIX)/share/icons/hicolor || :
+endif
+ mkdir -p $(DESTDIR)$(PREFIX)/share/applications
+ $(INSTALL_DATA) ../../misc/$(PROGRAM_NAME).desktop $(DESTDIR)$(PREFIX)/share/applications
+ifndef DISABLE_DESKTOP_UPDATE
+ -update-desktop-database || :
+endif
+ mkdir -p $(DESTDIR)$(PREFIX)/share/mime/packages
+ $(INSTALL_DATA) ../../misc/$(PROGRAM_NAME).xml $(DESTDIR)$(PREFIX)/share/mime/packages
+ -update-mime-database $(DESTDIR)$(PREFIX)/share/mime
+
+uninstall:
+ rm -f $(DESTDIR)$(PREFIX)/bin/$(PROGRAM_NAME)
+ rm -fr $(DESTDIR)$(PREFIX)/share/$(PROGRAM_NAME)
+ rm -fr $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/$(PROGRAM_NAME).svg
+ rm -f $(DESTDIR)$(PREFIX)/share/applications/$(PROGRAM_NAME).desktop
+ rm -f $(DESTDIR)$(PREFIX)/share/mime/packages/$(PROGRAM_NAME).xml
+ -update-mime-database $(DESTDIR)$(PREFIX)/share/mime
+
+$(VALA_STAMP): $(EXPANDED_SRC_FILES) $(EXPANDED_VAPI_FILES) $(EXPANDED_SRC_HEADER_FILES) Makefile \
+ $(CONFIG_IN) $(TEMP_MARINA_VAPI)
+ifndef PROGRAM
+ifndef LIBRARY
+ @echo 'You must define either PROGRAM or LIBRARY in makefile'; exit 1
+endif
+endif
+ifdef PROGRAM
+ifdef LIBRARY
+ @echo 'Both program and library are defined. This is invalid.'; exit 1
+endif
+endif
+ @ ../../minver `valac --version | awk '{print $$2}'` $(MIN_VALAC_VERSION) || ( echo '$(PROGRAM)$(LIBRARY) requires Vala compiler $(MIN_VALAC_VERSION) or greater. You are running' `valac --version` '\b.'; exit 1 )
+ifndef ASSUME_PKGS
+ifdef EXT_PKG_VERSIONS
+ pkg-config --print-errors --exists '$(EXT_PKG_VERSIONS)'
+else ifdef EXT_PKGS
+ pkg-config --print-errors --exists $(EXT_PKGS)
+endif
+endif
+ mkdir -p $(BUILD_DIR)
+ $(VALAC) $(LIBRARY_NAME) --ccode --directory=$(BUILD_DIR) --basedir=src $(VALAFLAGS) \
+ $(foreach header,$(HEADER_FILES), -H $(header)) \
+ $(foreach pkg,$(PKGS),--pkg=$(pkg)) \
+ $(foreach vapidir,$(VAPI_DIRS),--vapidir=$(vapidir)) \
+ $(foreach def,$(DEFINES),-X -D$(def)) \
+ $(foreach hdir,$(HEADER_DIRS),-X -I$(hdir)) \
+ $(VAPI_FILES) \
+ $(VALA_DEFINES) \
+ $(TEMP_MARINA_VAPI) \
+ $(EXPANDED_SRC_FILES)
+ touch $@
+
+ifdef LIBRARY
+$(LIBRARY): $(EXPANDED_OBJ_FILES) $(RESOURCES)
+ $(AR) $(ARFLAGS) $@ $?
+endif
+
+ifdef PROGRAM
+$(PROGRAM): $(EXPANDED_OBJ_FILES) $(MARINA_DEPEND)
+ $(CC) $(EXPANDED_OBJ_FILES) -lm $(CFLAGS) $(VALA_LDFLAGS) -export-dynamic -o $@
+ifdef GLADE_NAME
+ $(CC) $(EXPANDED_OBJ_FILES) -lm $(CFLAGS) $(VALA_LDFLAGS) -export-dynamic -shared -o $(GLADE_NAME)
+endif
+clean:
+ rm -f $(EXPANDED_C_FILES)
+ rm -f $(EXPANDED_SAVE_TEMPS_FILES)
+ rm -f $(EXPANDED_OBJ_FILES)
+ rm -f $(VALA_STAMP)
+ rm -rf $(PROGRAM)-$(VERSION)
+ rm -f $(PROGRAM)
+ifdef GLADE_NAME
+ rm -f $(GLADE_NAME)
+endif
+endif
+
+
+cleantemps:
+ rm -f $(EXPANDED_C_FILES)
+ rm -f $(EXPANDED_SAVE_TEMPS_FILES)
+ rm -f $(EXPANDED_OBJ_FILES)
+ rm -f $(VALA_STAMP)
+
--- /dev/null
+#! /bin/bash
+#
+# Copyright 2009-2010 Yorba Foundation
+#
+# This software is licensed under the GNU LGPL (version 2.1 or later).
+# See the COPYING file in this distribution.
+
+# vercmp <major.minor.revision> <minimum major.minor.revision>
+#
+# Returns 0 if queried version is greater than or equal to second, 1 otherwise.
+# Set VERBOSE environment variable for somewhat useful output.
+#
+# NOTE:
+# This is an ultra-naive implementation with just enough error-checking.
+
+usage() {
+ echo 'usage: vercmp <major.minor.revision> <minimum major.minor.revision>'
+}
+
+abort() {
+ usage
+ exit 1
+}
+
+verify_cardinal() {
+ while [ $# != 0 ]
+ do
+ if [ $1 ] && [ $1 -eq $1 2> /dev/null ] && [ $1 -ge 0 ]
+ then
+ :
+ else
+ abort
+ fi
+
+ shift
+ done
+}
+
+# check_range name number min-number
+check_range() {
+ if [ $2 -gt $3 ]
+ then
+ verbose $1 large enough.
+ exit 0
+ elif [ $2 -lt $3 ]
+ then
+ verbose $1 not large enough
+ exit 1
+ fi
+}
+
+verbose() {
+ if [ $VERBOSE ]
+ then
+ echo $*
+ fi
+}
+
+# Check number of arguments
+if [ $# -lt 2 ]
+then
+ abort
+fi
+
+# Parse arguments into integers
+major=`echo $1 | awk -F. '{print $1}'`
+minor=`echo $1 | awk -F. '{print $2}'`
+revision=`echo $1 | awk -F. '{print $3}'`
+
+min_major=`echo $2 | awk -F. '{print $1}'`
+min_minor=`echo $2 | awk -F. '{print $2}'`
+min_revision=`echo $2 | awk -F. '{print $3}'`
+
+# Verify they're all positive integers
+verify_cardinal "$major" "$minor" "$revision" "$min_major" "$min_minor" "$min_revision"
+
+verbose Comparing $major.$minor.$revision against $min_major.$min_minor.$min_revision
+
+# check version numbers in order of importance
+check_range "Major" $major $min_major
+check_range "Minor" $minor $min_minor
+check_range "Revision" $revision $min_revision
+
+verbose Same version.
+exit 0
+
--- /dev/null
+
+[Desktop Entry]
+Version=1.0
+Name=Fillmore Audio Editor
+GenericName=Audio Editor
+Comment=Record and edit multitrack audio
+Exec=fillmore %U
+Icon=fillmore
+MimeType=application/fillmore;text/yorba-media
+Terminal=false
+Type=Application
+Categories=AudioVideo;GNOME;GTK;
+X-GIO-NoFuse=true
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
+ <mime-type type="application/fillmore">
+ <sub-class-of type="text/yorba-media"/>
+ <icon name="fillmore" />
+ <comment>Fillmore Project File</comment>
+ <glob pattern="*.fill"/>
+ <root-XML namespaceURI="" localName="marina"/>
+ </mime-type>
+ <mime-type type="text/yorba-media">
+ <sub-class-of type="text/xml"/>
+ <comment>Yorba Media Project File</comment>
+ <root-XML namespaceURI="" localName="marina" weight="20"/>
+ </mime-type>
+</mime-info>
--- /dev/null
+
+[Desktop Entry]
+Version=1.0
+Name=Lombard Video Editor
+GenericName=Video Editor
+Comment=Create and edit movies
+Exec=lombard %U
+Icon=lombard
+MimeType=application/lombard;text/yorba-media
+Terminal=false
+Type=Application
+Categories=AudioVideo;GNOME;GTK;
+X-GIO-NoFuse=true
+
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
+ <mime-type type="application/lombard">
+ <sub-class-of type="text/yorba-media"/>
+ <icon name="lombard" />
+ <glob pattern="*.lom"/>
+ <comment>Lombard Project File</comment>
+ <root-XML namespaceURI="" localName="marina"/>
+ </mime-type>
+ <mime-type type="text/yorba-media">
+ <sub-class-of type="text/xml"/>
+ <comment>Yorba Media Project File</comment>
+ <root-XML namespaceURI="" localName="marina" weight="20"/>
+ </mime-type>
+</mime-info>
+
--- /dev/null
+<?xml version="1.0"?>
+<interface>
+ <requires lib="gtk+" version="2.14"/>
+ <!-- interface-requires vala1 0.0 -->
+ <!-- interface-naming-policy project-wide -->
+ <object class="ProjectProperties" id="projectproperties1">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Project Settings</property>
+ <property name="modal">True</property>
+ <property name="window_position">center-always</property>
+ <property name="type_hint">dialog</property>
+ <property name="skip_taskbar_hint">True</property>
+ <property name="skip_pager_hint">True</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox1">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkVBox" id="vbox1">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">General</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="table1">
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="time_signature_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Time _signature:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">timesignature_combo</property>
+ </object>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="x_padding">6</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="tempo_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Tem_po:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">tempo_scrollbar</property>
+ </object>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="x_padding">6</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkHScale" id="tempo_scrollbar">
+ <property name="width_request">160</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="adjustment">tempo_adjustment</property>
+ <property name="digits">0</property>
+ <property name="value_pos">left</property>
+ </object>
+ <packing>
+ <property name="padding">6</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="tap_button">
+ <property name="label" translatable="yes">_Tap</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ <signal name="clicked" handler="project_properties_on_tap" object="projectproperties1"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="padding">6</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="timesignature_combo">
+ <property name="visible">True</property>
+ <property name="model">timesignatures</property>
+ <property name="active">0</property>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderertext1"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Metronome</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="table2">
+ <property name="visible">True</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">2</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="VolumeSlider" id="volumeslider1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="adjustment">volume_adjustment</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="volume_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Volume:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">volumeslider1</property>
+ </object>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="x_padding">6</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="playback">
+ <property name="label" translatable="yes">During _playback</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="x_padding">6</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="record">
+ <property name="label" translatable="yes">During _record</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ <property name="x_padding">6</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area1">
+ <property name="visible">True</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="button1">
+ <property name="label">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button2">
+ <property name="label">gtk-ok</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-9">button1</action-widget>
+ <action-widget response="-10">button2</action-widget>
+ </action-widgets>
+ </object>
+ <object class="GtkAdjustment" id="tempo_adjustment">
+ <property name="value">40</property>
+ <property name="lower">30</property>
+ <property name="upper">130</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ <property name="page_size">10</property>
+ </object>
+ <object class="GtkListStore" id="timesignatures">
+ <columns>
+ <!-- column-name signatures -->
+ <column type="gchararray"/>
+ </columns>
+ <data>
+ <row>
+ <col id="0" translatable="yes">2/4</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">3/4</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">4/4</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">6/8</col>
+ </row>
+ </data>
+ </object>
+ <object class="GtkAdjustment" id="volume_adjustment">
+ <property name="upper">1</property>
+ <property name="step_increment">0.01</property>
+ <property name="page_increment">0.10000000000000001</property>
+ <property name="page_size">0.10000000000000001</property>
+ </object>
+</interface>
--- /dev/null
+/* Copyright 2009-2010 Yorba Foundation
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+
+style "pan" {
+ GtkHScrollbar::fixed-slider-length = 1
+ GtkHScrollbar::min-slider-length = 12
+ GtkHScrollbar::has-forward-stepper = 0
+ GtkHScrollbar::has-backward-stepper = 0
+ fg[SELECTED] = "tan"
+ fg[NORMAL] = "dark slate grey"
+}
+
+style "hseparator" {
+ bg[NORMAL] = "#666"
+}
+
+class "PanSlider" style "pan"
+class "VolumeSlider" style "pan"
+class "TrackSeparator" style "hseparator"
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363) -->\r
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\r
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
+ width="128px" height="128px" viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">\r
+<g>\r
+ <path fill="#9CCA3B" d="M88.777,62.724c-2.729,5.177-9.141,7.162-14.317,4.425c-5.177-2.73-7.161-9.144-4.427-14.321\r
+ c2.729-5.177,9.146-7.159,14.317-4.427C89.533,51.133,91.512,57.549,88.777,62.724z"/>\r
+ <path opacity="0.68" fill="#E32229" d="M79.574,72.917c5.37-0.068,10.537-2.99,13.219-8.076c1.761-3.326,2.151-7.013,1.375-10.419\r
+ l0.5,0.266l1.422,0.75l4.808,2.537c0,0,3.802,1.719,2.058,5.281c-1.745,3.562-7.475,11.588-7.906,14.984\r
+ c-0.438,3.391,4.203,6.881-0.698,15.303c0,0-1.933-5.006-7.229-6.808s-11.317-1.719-11.963-4.276\r
+ c-0.646-2.557,3.775-8.604,3.775-8.604l0.198-0.318L79.574,72.917z"/>\r
+ <path fill="#1188C6" d="M65.241,85.292c0,0,6.344,3.427,8.974,5.817c2.636,2.386,4.797,2.078,4.797,2.078l-1.057,5.417\r
+ c0,0-3.151,1.692-8.428-1.188c-5.275-2.87-8.229-3.797-9.494-3.109l-0.073-0.037c-0.151-1.438-2.578-3.354-7.933-6.088\r
+ c-5.349-2.729-5.734-6.287-5.734-6.287l3.886-3.927c0,0,0.958,1.953,4.417,2.786c3.458,0.828,9.869,4.12,9.869,4.12L65.241,85.292z\r
+ "/>\r
+ <g>\r
+ <defs>\r
+ <path id="SVGID_1_" d="M128.007,128h-128V0h128V128z M119.335,0h-16.714L85.98,29.031l-1.688-0.891l-5.141-2.711\r
+ c0,0-7.239-4.641-14.114-1.385c-6.88,3.25-9.516,8.924-13.536,18.938c-4.016,10.021-5.984,13.234-16.808,19.841\r
+ c-10.823,6.604-21.542,19.88-21.922,29.182c-0.386,9.312,1.208,21.609,28.125,35.995H92.48c5.25-7.375,8.428-20.167,7.891-30.511\r
+ c-0.65-12.661,0.896-16.104,6.901-25.072c5.995-8.972,9.198-14.347,8-21.86c-1.198-7.516-9.114-10.88-9.114-10.88l-5.771-3.042\r
+ L119.335,0z"/>\r
+ </defs>\r
+ <clipPath id="SVGID_2_">\r
+ <use xlink:href="#SVGID_1_" overflow="visible"/>\r
+ </clipPath>\r
+ <g clip-path="url(#SVGID_2_)">\r
+ <g>\r
+ \r
+ <image overflow="visible" width="532" height="532" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhoAAAIaCAYAAABmueQmAAAACXBIWXMAAC4jAAAuIwF4pT92AAAA
+GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAGhtJREFUeNrs3Ytu28iWQNEipaTv
+/P/P3o4tcSaYCGEqpx586eW1AMGO404spQFunSqSKQEAAAAAAAAAcLTh/Z/h4F8ZgOc0TULjDSJC
+aQDwtKnx7jHyOgfhOCpEBABfL0ZeKD6e+0D9Z1wMb/kcARARW/67J4+O5zsI98fF8NLPEwCRsc/3
+PnV0PM8B+HdgDAt+zuHlnicA7BMa5a89UXA8/gBcDoyh42cdnvZ5AcB+8TEtDI+nmXI87oAcB0Yt
+Lnq/T2gA8C6RMXV83v69B8bG/Q/I7cCIPu/9Wuk5CQ8A3iUsps6v/f31BwTH/Q7A/YGx5mMrRMQG
+AM8cGaV4KMXEVPjv+oLkjsFxn4Pv/0fGmsAYCkExFH5faADwbqExBZFRio6e8LhrcBx78K1PMWqT
+iWHhozbhaD1PAQLAPaMiVQ/+cVS0Hj0REv+dB8fGcQfZ9hSjNbn4+RgLn/cGh8gA4JljY9oQGdeF
+EVKedBwYG8ccaMuR0YqLKCzGhdGRCuEhMgB4ttioLYG04uJa+Lg0On5/fkBw7H+wXRYZQyEsxkJo
+1OKjd8IhNgB4dGQsnWBEUdH6PIqPlMpLKodMN853jIz84J9PKEqPoePrpegQGgC8amjUQiJ6/Pz9
+y69j27XyZ89/hiH72vB/x/JdY2O/0OiLjNYE49T4denrrdBwnQ0AniEwlkwz8ri4ZGFxCWJjyH5/
+yP6c6Gf5OzbW3+ztoNBYFhm1wIg+lj6vLbEs2a8hMgB4xDSjZ5IRhcZl9si/PmTRcQmi5tr8OX8e
+13eaauw10eiJjCgIToWYyB/nQmicUryM0tqvITQAeHRoRBON2hJJHhqfWXTcjoOXWWgMs1/P/85r
+MNWY//5uSyjbQyO+rXvvFKMVFufZ41QIkzG1l1FSciEvAB4fGaXAqIVGNMm4hcZnFhyfs9gYstgY
+ssC4Bj/TUPj8QaHx55LJ0sg4F8Li9vFbEBo9wbF2Y6j4AGDvqFgSGbVJRi0yfj4+ZlONz8Ib7sg1
++Pl+B8YOSyhbJxpLI6M1tTjPIuNb4ffWxEZKfZtCBQcARwRGHhlpZWR8zj5+zELj9OvX4yw2ojfb
+nwtjY/MSyvrQGIZadOSxEUVGFBc/P37PQuNbMOGIphvREsqWqQYAHBEj0TUtSksmtSnGeRYcpyA2
+ShON5bGxYQlly0SjdQv30mmpUVzcwuJ79jF/9Ew2epdPTC0AeERkpI7QqC2XfMw+fqS/T5jIQ6P1
+87S/b8MSyrrQ+PtmabWrc5amGXlEfA8e3yoTjnyyUdsUmlJ76URwAHBUYNQio7R0kgfGJYuMH8Eb
+71JkDB0/4zX42uapxtqJRnSDtGHhJCOfYPx8/PPrUYuNb4WpRnS6a8+yicAA4BGxMT/VtCc0PoNJ
+xo+O0IgmFtHPFR0jf0fGyqnG8tCIb/0eRUdtX0Y0wfgne5SmG9FUQ2gA8BVC4yMLjVtslJZN5sfA
+1o3bbj9LKUpWTTXWTDRq04xoqjGPjdJyyc+w+E/28XthujGfauRLJ6fUvkpoFBdiA4CjQ2Pr0slt
+2eRHFhrRNCP6OfJlkuhur0MhKFZPNZaFRnma0YqM0rLJPDL+M4uM0nQjWj7p3QwqNAB4ttDIJxq3
+G6PVJhrf0t9LJqfU3gBaut18KTZ2mWosnWi0phnRHVlbyyb/FGIjmmzUQqO0dJJS+awTgQHAPYOj
+5/LjrdAobQItLZWUbh9/rQTHEITSqqlGf2jUpxkptS8zHi2b/JP+XjYpxcZ8qnELlp7TW1Mq774V
+GgA8eqoRneJ6i438Al09+zJaE4zowmBj+r0/YwyCY/VUY8lEozTNSKn/4lzRskk00ciDIwqN2tpU
+bdlEaADwjKGRh0B+DY3WsS9VJhmlq46estiIlk82XYN8j7u3LrkSaB4Z0dkmP+Pif9Lf+zXy62ms
+3Z8hNAB4tdDIb9tRu2ZGKzLy28xHyyp5dPw5zViwfNIXGvGySetsk2h/xrljopF/LdoM2hMaKbkq
+KADPFRqt2MiXT/LbwJf2Y9QC49J4zKca86WT+Rkof99GvnPS0TvRiAIjBYFRu4ZG7dTW1qMVGmMj
+NEQGAM8aG/PPS5ci/yyExprIuC3D3D4/zUJmvldjSPHproumGlvvddIz0YhiI7oiaC08avszStfP
+SMlprQC8xkSjFAun2dThtDA0ajdkm0dGdEXvKDbSmqlGOzTKyyal4GjdqbV2b5Oeq4MumWbUIkNo
+APCI0FgaG627sUb/XS0y5nd/PRemGvPY2KRnotFaNumdZkTLJ7XoiCLjW4o3wpROaRUaALxiaIxB
+aJSu/FlaarndhC0/5n6k8uUhSidT3P2mamlDbLRurPa9EiTRJtChMzR6wkJ4AHBUXCwJjSnFWxRq
+U4zoIl/fZ7FxDh6lJZmhEByLzz7ZcvfW0vJJLTbmezVqE47SnVrPwZ83pPINZJZeBVRoAHDP0CjF
+RmmPROlMlWsWGNGx9FsjMlpTjVVnn+x5U7VWYJQu3nWuREUpLnpOaS3Fg5gA4GhDIzKGRmgMwVRj
+/j23uDinP6+18S0LjegYe2pExliZbux899a+m6gtPfskio8oRE4dj95phsAA4NkiZAp+PY+MKTh+
+5aExj438zfw59S2ZRG/ea0s2O4ZGeSNo2jDVyKPi1BkX8z8zv69KtGlFZADwihEynxqMWXScgtDI
+37ifgzfyrWPrWHnjnlK8T2OX0Gi9GL0TjTH1TSiWBkbPiyI4AHgmU8cxaT7VuJ15Mp96nILQaL2p
+742N2krB4gt3rd2jEZ3ZEd0qfsgiYWlwtCYYlkwAeMWpxZLwmF8WfP5x65v53r0ZpZ+/a0PoeYcX
+auk+jbEwqRgrY5zoEuetNSQTDQCeeaLRc+CeH9/m9yAZG8fRU+FN/pKNn7vs0zjv+MJFU40oFsaO
+F6T0ArSuk2GiAcArTTSmQnBEn8+PhdfKMbO0ijA2jrWtkytWnXky7jjNKMXG0IiN2uRiSO0lk1J0
+bN4pCwB3iI7aG+TaFblrx9foDfzSiUbtTf1hoVH7y2uXJl/ycUj1y60OHU9cYADwbsGROiOj5w39
+mi0JdwmNnslGq7hakdE6jTZ1hA4AvHp4lI61PW/uh9S3ktA6uaLnzf3K0BiGrS9MK0DGSpHVqkpI
+APAVAqP0JnrJRTNbb/KXXvRy8aRj7JxW9LwwvdONnt2spcAYFvxDAMA7RceaY2/PCkLPVojVxgVP
+tuegPzRCofeF6a0nYQHAVwmMYeWEY8kb/t3fuI8HvBjDguJKlReqFjEiA4CvHiKtY2bvSsL2vRiV
+7RbjwS/E0PHr1pXHWk9eeADw7mHRs4ySUt/ZoSn1rya0Vheax+DxwBelNziWvJBJVADwxaMjOs62
+vjZ0xMOSW3l0H7PHB7w4qVBUa4IDAL5KUKRCPJQCoLVUcpc38uMBL0rre5aezQIAtO/22vvmvhQs
+hxxzx52f/JYftPeCIQBA/Tia0pPsbxx3emKpUU6uewEAxwVGzyCg5/uXfM/dQqP1Ay654AgAcOwQ
+oPeY/BT3OjmqwACAdhD0XqeqFR+HbQ4dX/SFBQC2HTPvci+x0b8DAHyJ6HiI8Ss8SQB4o2B4qeOp
+iQYA8DahYaoBAEIDAHhjd3vjLzQAAKEBAOzirtsYhAYAIDQAAKEBACA0AAChAQAIDQAAoQEACA0A
+QGgAAAgNAEBoAABCAwBAaAAAQgMAEBoAAEIDABAaAIDQAAAQGgCA0AAAhAYAgNAAAIQGACA0AACE
+BgAgNAAAoQEAIDQAAKEBACA0AAChAQAIDQAAoQEACA0AQGgAAAgNAEBoAABCAwBAaAAAQgMAEBoA
+AEIDABAaAIDQAAAQGgCA0AAAhAYAgNAAAIQGACA0AACEBgAgNAAAoQEAIDQAAKEBAAgNAAChAQAI
+DQAAoQEACA0AQGgAAAgNAEBoAABCAwBAaAAAQgMAEBoAAEIDABAaAIDQAAAQGgCA0AAAhAYAgNAA
+AIQGACA0AACEBgAgNAAAoQEAIDQAAKEBAAgNAAChAQAIDQBAaAAACA0AQGgAAAgNAEBoAABCAwBA
+aAAAQgMAEBoAAEIDABAaAIDQAAAQGgCA0AAAhAYAgNAAAIQGACA0AACEBgAgNAAAoQEAIDQAAKEB
+AAgNAAChAQAIDQBAaAAACA0AQGgAAEIDAEBoAABCAwBAaAAAQgMAEBoAAEIDABAaAIDQAAAQGgCA
+0AAAhAYAgNAAAIQGACA0AACEBgAgNAAAoQEAIDQAAKEBAAgNAAChAQAIDQBAaAAACA0AQGgAAEID
+AEBoAABCAwAQGgAAQgMAEBoAAEIDABAaAIDQAAAQGgCA0AAAhAYAgNAAAIQGACA0AACEBgAgNAAA
+oQEAIDQAAKEBAAgNAAChAQAIDQBAaAAACA0AQGgAAEIDAEBoAABCAwAQGgAAQgMAEBoAgNAAABAa
+AIDQAAAQGgCA0AAAhAYAgNAAAIQGACA0AACEBgAgNAAAoQEAIDQAAKEBAAgNAAChAQAIDQBAaAAA
+CA0AQGgAAEIDAEBoAABCAwAQGgAAQgMAEBoAgNAAABAaAIDQAACEBgCA0AAAhAYAgNAAAIQGACA0
+AACEBgAgNAAAoQEAIDQAAKEBAAgNAAChAQAIDQBAaAAACA0AQGgAAEIDAEBoAABCAwAQGgAAQgMA
+EBoAgNAAABAaAIDQAACEBgCA0AAAhAYAIDS8BACA0AAAhAYAgNAAAIQGACA0AACEBgAgNAAAoQEA
+IDQAAKEBAAgNAAChAQAIDQBAaAAACA0AQGgAAEIDAEBoAABCAwAQGgAAQgMAEBoAgNAAABAaAIDQ
+AACEBgCA0AAAhAYAgNAAAIQGACA0AACEBgAgNAAAoQEAIDQAAKEBAAgNAAChAQAIDQBAaAAACA0A
+QGgAAEIDAEBoAABCAwAQGgAAQgMAEBoAgNAAABAaAIDQAACEBgCA0AAAhAYAIDQAAIQGACA0AACE
+BgAgNAAAoQEAIDQAAKEBAAgNAAChAQAIDQBAaAAACA0AQGgAAEIDAEBoAABCAwAQGgAAQgMAEBoA
+gNAAABAaAIDQAACEBgCA0AAAhAYAIDQAAIQGACA0AAChAQAgNAAAoQEAIDQAAKEBAAgNAAChAQAI
+DQBAaAAACA0AQGgAAEIDAEBoAABCAwAQGgAAQgMAEBoAgNAAABAaAIDQAACEBgCA0AAAhAYAIDQA
+AIQGACA0AAChAQAgNAAAoQEACA0AAKEBAAgNAAChAQAIDQBAaAAACA0AQGgAAEIDAEBoAABCAwAQ
+GgAAQgMAEBoAgNAAABAaAIDQAACEBgCA0AAAhAYAIDQAAIQGACA0AAChAQAgNAAAoQEACA0AAKEB
+AAgNAEBoAAAIDQBAaAAACA0AQGgAAEIDAEBoAABCAwAQGgAAQgMAEBoAgNAAABAaAIDQAACEBgCA
+0AAAhAYAcFeT0AAA3oLQAICv525TjfFdnxgA8HgmGgDAW4SGaQYAbD+WvtTx1EQDAL5GoAgNAGDX
+uJgW/P4hMTK+2YsGAF8pIqbg11PwvbWQmBq/97KhIRgA4L7H2Knjv5s6v/ehoTEtKCVTCgA45o37
+VDgu320YMB74BNeMYqLRjxgBgL7jcTSRmDoD5BDjjk+uFRc9kXFYUQHAG4TElu8tbf489A39eOcX
+YFoZJwBAORymwtemQmActvnzyNBoxcXU8TXLJABQXtoohUPpOFs7xvb8OaX46D5WH7kZtKe0aj9s
+7fd7XhgAeLfw6AmTqXEsTh3f04qS7mPweMATb52/W3vSU+fvA8BXjYzekOh5tP6czp9w2jzR6F3f
+mRpxsWSppKeiRAcAX2V6UYuBaYdH14RiqbHjifZe3KMnMlpPqqfO1vzjAMC7BEdqHDf3ioxdVhLG
+g16U6YBHLTgEBgDvGBetN969x9Br9rE3OkrH97uFxrThSfc88bRwoiE6AHi34Og91s6Pqfljqnw8
+bu/GytBYs0SSvxDXtH2iscsLAABPOs1Y88b+uiBCeiYcm40rX4S1sXENgiOqrt7gqP2cwgOAVwmM
+taeeRm/ir41H9Kb/mrZsDh2GXScarcqaOmKiFhfXzslHz1hHcADwKoFROrD3hEXpuHv59ci/1vsm
+vzRN6XbeacSzdnpReyFaY6Db3z/MfoYh+HoUIIP/vwF4UFz0HFNT4Y31tfP42hsYS1YVVjlvfKF6
+92NcO59s60UYf30cGuOcUnC0/qEB4JHhseX4egkC4xI81m5ZKE1ipr1DYz45WBoYpSc9f/K1F+Oa
+/d0pC4poqlEKEQB4holGa39GzxaE6Jj62XHMbU01Ulp2D5TFoTF1HJR7g+PS8YhelFMQGrefaaw8
+0SgyBhMNAJ58ktF7bO05nn4uiI7ei3gtcl7xggxp2QbQ2ouQP0rfO6Y/l02G2c+Rfw0AXjk0bp9f
+C2/a84+fWVAsOb727tVYbevSST7V6B3pzJ/8R/b5+dfjNHvcQiMPimn2e9HPJzwAeNVpxjWYYFyD
+Y+klO55+zB6f2edReLT2a6QtwXHe4cUqTTV6phj5i3AuhMaQhUb0c4zZpCPaEJpPZgDgEXGRUt/e
+jOiYmk8vPjoe82Nua6Kx5L5jzfjYctbJkjNMLpW4+KiExlgIjNvfeZpFxpRNPIZCVPTs0xAhAOwR
+Ez1xkR/A8+tj3ILgsyMufjRio2eq0bqsRO9z7Q6NKTg4D2ndBtDoBfr5onz79bEWGqXIOc1+xjxK
+WrEhNAB4RGjUphnRksn8ONqaXvzomG6sOe11lfPCF3AofN6KjPn+i9KLcv71cb4vI1oqif6uMcX7
+OFrBIS4AuGd0tC7MVdqX8VkIjR/B4yP4dW260dqnscnWK4P2RkY+7smnF/m+jGjjZy1qxh1iQ2gA
+cGRotPZklI6npWWTPDD+zT6WYqN0JkrtRmsprVw+WXJ669ARG6XgiM4q+VEIjDwYStOM88rQGAQG
+AA8KjiU3SLum8tma87jIH3lsfFSCoxYb17Rxf8baiUZ05kbrxTn9elKnbIIxXyo5VQIjFf78+V6O
++SQk2qshNAB49tCITqiIlk3mofHfX4/88zw6SlONnjNPeiY2u4RGPtlYUmLz2IgerTNMosi4NKYh
+S5ZPBAcARwVGb2RMhWPoJf29N2M+xcgDI59wzCca+fU3Sns0omP9Yls2g0YhcJsm3F6gsREb44LA
+mP8531L9wl5RaGw9EwUA1oTGkg2gpetm3B4/ChONeWz8txAaay/ctWqSsXai0TPVuL1At+j4DKYN
+telDSn3rVNGpsPlkpHS665KzUQBgj9DovQLoltD4N/s8Xzr5TPGG0CW3iT90j0YUGUMw1Riyqcbn
+isjYOzREBgDPFBtLQyO/TsYtIKLAyCcaHyleOrk0YmPTNGPtRCOKjBTExjWIjSGVlzRakXF7Yb7N
+HtHSyUloAPDCoRHdMK10/Yx/C498Q2ht6eSQK4JuDY3ajdXy5ZOeRwpipVR188iITo+thYZTXQG4
+Z2C0IqMWGrV7mvwoxMaPFC+f1KYZ1xSf1rp5mrE2NEp3R739gCn9uXRSioq0MDJ+vkDfZ5Exn2ic
+099LJz2nuppsAHCPSUZvaER3aL2kv+8T1rpY17+VyMinGZdUvlDXpmnGHhONUrnNg+NSmCj0nmUy
+n2R8BBONWmgsmWiIDACOjI01oVG7S2u+V6P2KF0/I9qb0ZrQ3CU0asGRv3i32Kj9GaWLlER7M86p
+fHrr1omG4ABgr8CIgqPnjJNoolG6+3l0j5PalUCjZZPDphlbQ6N2k7Vr4cBduqR460Iln4XIKG0G
+HdKy62kIDADuERxT6r9QV2mqEZ2BUrt7a+n28Pkm0OiMk4feVC0Pjqkyqej5M6Klk88gNGo3Yuud
+aLQCCAD2jI0l19C4VkIjX0aJllQ+C1OMPDJap7TuEht7LZ1EsXHtePGnSmTMLzOe35BtvjejdAny
+0nU6WksnJWIEgLTw4NtaOsnP9Lik8l7FKDiiqKhd/bN23Yylz+1uE43aZOPa8d/USm5+P5N5XLT2
+ZvQum/TEg8AAYEtwLL1ja2sJpbR347MjMOaTjNo1M55y6WRNbLQmGpcgNE4LImPJXVxFBQBHxcfS
+K4NGx8NrZcJxSfUrfkaRcT06MvacaNQ2huaxMaX20skp/blPI1omKe3LmMeFM04AeHRo9C6flCb8
+tbNRSr+O4qJ1BdDd4uKI0CgFxhDERu2GbGP2Qsxj4jP1bfwsLZmIDACeKTZqSyhLllOuqbzJ85Li
+q362ImO34Djf8UW+xcZQeaFvoTC/cElpetE6w2TpJlChAcAjpxo9SynXQlyUpiCtwDg0Mo4Ijdrd
+XXuC4zoLjfmE4pL6bjXfeyVQkQHAo2JjyZVCa8HReuT7MK6pvRfjqZdOlsbGPDim9Pct54dU3nex
+ZLlEaADwSqHRExy9X19yVsl0xItQPsAOw95/fnSwzx/RRs4oJEobPtdEhtAA4B6hsSY2omC4Nj7W
+JhitG75teLbT3SYapelG7QqiQ/rzwl/z5ZNram/wFBkAvGtspEpAXBuR8pApxj1DY/4khsLnUXRM
+WTRcd4qLoWPyAgBHRUbpQF+LjtQ57Uhp2UbP6R4vwvnOL3htuhH9fu328qVbztuPAcCrxEcrNJZE
+R3qmwGgfdIfhXn9vzz6O1uf514QGAK8YGqVYaEVHenhgFPZoPCo0WsGRGhOKoSNSRAYArxQbrVho
+bep87ATjSUOjJwiWxERrP4bQAODZQqM3Eno2cz5sieTZQ6MnOHpiwgQDgFcPj6Xx0PrvhUZndNR+
+XmeTAPAuobHm69Pjn8XrhUZvLAw7/3kAcO+oWPv90/M8s/hHOb1AaOwZCiIDgFeLjecMi06vGBoC
+AgBB8iLOX+wfQ5AAICCEhn9cAHgHo5cAABAaAIDQAAAQGgCA0AAAhAYAgNAAAO7nfwUYAOoHyrVS
+w0j+AAAAAElFTkSuQmCC" transform="matrix(0.24 0 0 0.24 0.2373 0.4126)">\r
+ </image>\r
+ <g>\r
+ <path fill="#9CCA3B" d="M121.346,115.656c0,3.239-2.625,5.864-5.865,5.864H12.538c-3.239,0-5.87-2.625-5.87-5.864V12.713\r
+ c0-3.242,2.631-5.87,5.87-5.87H115.48c3.24,0,5.865,2.627,5.865,5.87V115.656z"/>\r
+ <path fill="none" stroke="#000000" stroke-width="0.8619" d="M121.346,115.656c0,3.239-2.625,5.864-5.865,5.864H12.538\r
+ c-3.239,0-5.87-2.625-5.87-5.864V12.713c0-3.242,2.631-5.87,5.87-5.87H115.48c3.24,0,5.865,2.627,5.865,5.87V115.656z"/>\r
+ </g>\r
+ </g>\r
+ </g>\r
+ </g>\r
+</g>\r
+</svg>\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363) -->\r
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\r
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
+ width="128px" height="128px" viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">\r
+<g>\r
+ <g>\r
+ <defs>\r
+ <polyline id="SVGID_1_" points="128,128 0,128 0,0 128,0 128,128 "/>\r
+ </defs>\r
+ <clipPath id="SVGID_2_">\r
+ <use xlink:href="#SVGID_1_" overflow="visible"/>\r
+ </clipPath>\r
+ <path clip-path="url(#SVGID_2_)" fill="#E9262C" d="M81.368,74.215c-0.717,0.231-1.439,0.458-2.163,0.684s-1.452,0.453-2.184,0.68\r
+ c-0.171,0.054-0.342,0.107-0.513,0.16l0.009,0.41c-0.26-0.057-0.519-0.113-0.776-0.17c-0.306,0.096-0.611,0.191-0.917,0.286\r
+ c-0.733,0.227-1.47,0.455-2.206,0.684c-6.617,2.05-13.335,4.134-19.8,6.32c-6.664,2.255-13.073,4.628-18.857,7.202\r
+ c-5.997,2.67-11.355,5.572-15.688,8.832c-4.527,3.403-7.977,7.231-9.883,11.641L10.952,128H71.45\r
+ c0.87-0.368,1.739-0.734,2.607-1.101c0.671-0.281,1.339-0.563,2.01-0.85c0.666-0.284,1.334-0.565,2.001-0.848\r
+ c0.665-0.281,1.327-0.563,1.989-0.846s1.318-0.563,1.974-0.85L81.368,74.215"/>\r
+ <path clip-path="url(#SVGID_2_)" d="M94.016,33.925c-0.031,0.104-0.069,0.208-0.114,0.312l-0.008,1.001\r
+ c0.037,0.007,0.074,0.014,0.11,0.021L94.016,33.925 M94.119,33.279c-0.003,0.115-0.014,0.229-0.033,0.342l0.005,0.026l0.018,0.166\r
+ l0.004,0.167l-0.011,1.298c0.001,0,0.001,0,0.002,0L94.119,33.279 M94.169,0L94.169,0l-0.064,8.164\r
+ c0.046-0.073,0.086-0.146,0.118-0.22l0.008-0.975c0.017,0.041,0.033,0.08,0.077,0.244l0,0c0.007,0.038,0.016,0.079,0.025,0.24l0,0\r
+ l0,0l0,0l0,0l0,0l0.031-3.964l-0.028,3.096l-0.005-0.113l-0.02-0.115L94.28,6.245L94.239,6.13l0.028-3.656l0.041,0.108\r
+ l0.032,0.107l0.021,0.104l0.007,0.107l0.02-2.274c0-0.052-0.004-0.104-0.053-0.315C94.314,0.262,94.292,0.209,94.169,0"/>\r
+ <line clip-path="url(#SVGID_2_)" x1="94.333" y1="7.453" x2="94.333" y2="7.453"/>\r
+ <polygon clip-path="url(#SVGID_2_)" points="94.368,2.902 94.368,2.902 94.364,3.489 "/>\r
+ \r
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="0" y1="127.999" x2="1" y2="127.999" gradientTransform="matrix(0.3057 0 0 -0.3057 94.0273 59.2285)">\r
+ <stop offset="0" style="stop-color:#AFB1B4"/>\r
+ <stop offset="0.1733" style="stop-color:#C1C3C4"/>\r
+ <stop offset="0.375" style="stop-color:#D2D3D4"/>\r
+ <stop offset="0.5795" style="stop-color:#DDDEDF"/>\r
+ <stop offset="0.7866" style="stop-color:#E4E5E6"/>\r
+ <stop offset="1" style="stop-color:#E9E9EA"/>\r
+ </linearGradient>\r
+ <path clip-path="url(#SVGID_2_)" fill="url(#SVGID_3_)" d="M94.333,7.453L94.12,33.238l0,0L94.333,7.453L94.333,7.453\r
+ L94.333,7.453 M94.23,6.969l-0.008,0.975c0.071-0.162,0.108-0.325,0.11-0.49c-0.01-0.162-0.019-0.198-0.025-0.24l0,0\r
+ C94.264,7.049,94.247,7.009,94.23,6.969"/>\r
+ <path clip-path="url(#SVGID_2_)" fill="#1788C4" d="M73.023,25.864l0.133,5.147c0.111,0.013,0.223,0.026,0.334,0.039\r
+ c0.23,0.03,0.46,0.054,0.689,0.085l-0.122-5.158c-0.235-0.026-0.467-0.052-0.697-0.076C73.247,25.888,73.135,25.876,73.023,25.864\r
+ "/>\r
+ <path clip-path="url(#SVGID_2_)" fill="#1788C4" d="M94.021,33.314l-0.005,0.611c0.029-0.101,0.054-0.202,0.07-0.304l-0.025-0.14\r
+ L94.021,33.314 M94.12,33.229l-0.001,0.05c0.001-0.013,0.001-0.027,0.001-0.041V33.229 M94.104,8.164\r
+ c-0.269,0.423-0.769,0.834-1.469,1.235c-1.105,0.632-2.705,1.234-4.66,1.814c-1.989,0.584-4.342,1.145-6.909,1.685\r
+ c-2.611,0.552-5.439,1.079-8.337,1.595l0.211,8.147c0.161,0.017,0.322,0.033,0.484,0.049c0.638,0.066,1.28,0.134,1.925,0.2\r
+ l0.425,19.349c0.444-0.112,0.886-0.225,1.324-0.339l-0.183-9.249c4.345,0.552,8.74,1.163,12.979,1.873\r
+ c1.16,0.195,2.31,0.398,3.444,0.61c0.242-0.293,0.432-0.592,0.562-0.896L94.104,8.164"/>\r
+ <path clip-path="url(#SVGID_2_)" fill="#FFFFFF" d="M94.223,7.943c-0.032,0.074-0.072,0.147-0.118,0.22l-0.203,26.073\r
+ c0.045-0.103,0.083-0.207,0.114-0.312l0.005-0.611l0.04,0.167l0.025,0.14c0.02-0.113,0.03-0.227,0.033-0.342l0.001-0.05\r
+ l-0.006-0.167l-0.015-0.17l-0.032-0.176l-0.04-0.174L94.223,7.943"/>\r
+ <g clip-path="url(#SVGID_2_)">\r
+ <defs>\r
+ <path id="SVGID_4_" d="M94.333,7.453c-0.002,0.165-0.039,0.329-0.11,0.49l-0.195,24.599l0.04,0.174l0.032,0.176l0.015,0.17\r
+ l0.006,0.176l0,0L94.333,7.453L94.333,7.453"/>\r
+ </defs>\r
+ <clipPath id="SVGID_5_">\r
+ <use xlink:href="#SVGID_4_" overflow="visible"/>\r
+ </clipPath>\r
+ <g transform="matrix(1 0 0 1 7.629395e-06 3.814697e-06)" clip-path="url(#SVGID_5_)">\r
+ \r
+ <image overflow="visible" width="5" height="111" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAB1CAYAAABzs6CUAAAACXBIWXMAAC4jAAAuIwF4pT92AAAA
+GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAF9JREFUeNpiYKAUMMIY////lwdS
+Cn///Wf4/vsfw+8//0HCD1iQFCcAcQOaAQ1MhKwYVTCqYFTBqIJRBaMKRhWMKhhVMKpgVMGoglEF
+w08Bcm/xARAfQJN/wEB7ABBgAIx0EcCs/xu8AAAAAElFTkSuQmCC" transform="matrix(0.24 0 0 -0.24 93.5996 33.6802)">\r
+ </image>\r
+ </g>\r
+ </g>\r
+ <path clip-path="url(#SVGID_2_)" fill="#1788C4" d="M63.991,24.894l0.205,5.063c0.256,0.028,0.51,0.056,0.764,0.09\r
+ c0.253,0.028,0.511,0.058,0.766,0.09c0.259,0.028,0.517,0.061,0.774,0.09c0.259,0.028,0.518,0.061,0.777,0.09l-0.181-5.086\r
+ c-0.261-0.03-0.521-0.058-0.782-0.086c-0.26-0.029-0.518-0.053-0.779-0.083c-0.258-0.026-0.516-0.054-0.774-0.08\r
+ C64.504,24.95,64.247,24.924,63.991,24.894 M56.621,24.066l0.26,4.984c0.232,0.032,0.464,0.062,0.699,0.09\r
+ c0.234,0.032,0.47,0.062,0.708,0.095c0.237,0.028,0.474,0.058,0.713,0.09c0.238,0.027,0.481,0.058,0.721,0.09l-0.236-5.015\r
+ c-0.244-0.028-0.486-0.053-0.729-0.084c-0.24-0.028-0.48-0.056-0.718-0.082c-0.238-0.028-0.474-0.058-0.71-0.083\r
+ C57.092,24.122,56.857,24.094,56.621,24.066 M50.056,23.202l0.304,4.912c0.202,0.032,0.406,0.064,0.609,0.097\r
+ c0.206,0.032,0.41,0.063,0.618,0.094c0.208,0.032,0.417,0.066,0.626,0.098c0.213,0.032,0.425,0.06,0.641,0.091l-0.291-4.94\r
+ c-0.216-0.03-0.428-0.059-0.642-0.088c-0.212-0.028-0.422-0.059-0.633-0.086c-0.207-0.031-0.416-0.059-0.622-0.088\r
+ C50.46,23.263,50.256,23.233,50.056,23.202 M38.786,22.392c-0.291,0.205-0.539,0.413-0.738,0.626l0.134,1.639l0.183,0.138\r
+ l0.199,0.136l0.214,0.134l0.234,0.129L38.786,22.392 M44.558,22.261l0.343,4.834c0.164,0.036,0.328,0.068,0.492,0.104\r
+ c0.166,0.037,0.333,0.073,0.5,0.104c0.17,0.039,0.344,0.071,0.516,0.107c0.176,0.036,0.35,0.067,0.528,0.104l-0.331-4.867\r
+ c-0.181-0.03-0.354-0.062-0.532-0.094c-0.174-0.032-0.348-0.064-0.516-0.098c-0.172-0.032-0.34-0.064-0.508-0.099\r
+ C44.885,22.325,44.721,22.293,44.558,22.261 M40.774,21.322c-0.122,0.053-0.24,0.106-0.356,0.159l0.347,4.474\r
+ c0.114,0.04,0.228,0.078,0.346,0.12c0.118,0.04,0.24,0.079,0.362,0.118c0.125,0.04,0.25,0.08,0.378,0.116\r
+ c0.13,0.04,0.259,0.078,0.392,0.116l-0.36-4.787c-0.134-0.034-0.266-0.07-0.394-0.108c-0.13-0.034-0.257-0.072-0.38-0.108\r
+ C40.995,21.388,40.884,21.356,40.774,21.322 M70.767,14.835c-0.354,0.064-0.71,0.124-1.064,0.186\r
+ c-0.356,0.06-0.714,0.122-1.068,0.183c-0.356,0.066-0.714,0.125-1.071,0.188c-0.355,0.06-0.712,0.122-1.068,0.184\r
+ c-3.312,0.566-6.625,1.133-9.762,1.717c-3.183,0.592-6.19,1.199-8.834,1.833c-0.599,0.144-1.18,0.29-1.741,0.438\r
+ c2.792,0.473,6.065,0.898,9.639,1.308c3.735,0.424,7.791,0.833,11.975,1.251c0.617,0.062,1.236,0.122,1.862,0.185\r
+ c0.449,0.045,0.9,0.091,1.354,0.137L70.767,14.835"/>\r
+ <polyline clip-path="url(#SVGID_2_)" fill="#010101" points="37.443,24.424 40.067,56.092 37.443,24.424 "/>\r
+ <polyline clip-path="url(#SVGID_2_)" fill="#010101" points="40.145,57.041 40.145,57.041 40.473,61.015 40.146,57.055 \r
+ 40.145,57.041 "/>\r
+ <polygon clip-path="url(#SVGID_2_)" fill="#010101" points="37.357,23.372 37.357,23.375 37.257,22.177 "/>\r
+ <path clip-path="url(#SVGID_2_)" fill="#010101" d="M40.473,61.015l0.005,0.069l0.001,0.014L40.473,61.015 M75.194,73.144\r
+ c-0.215-0.045-0.429-0.091-0.645-0.133c-0.213-0.047-0.428-0.091-0.642-0.134c-0.212-0.044-0.427-0.089-0.641-0.132\r
+ c-0.212-0.044-0.425-0.088-0.638-0.132l-0.125-4.455c0.213,0.044,0.427,0.084,0.641,0.128c0.215,0.039,0.43,0.084,0.645,0.128\r
+ c0.217,0.04,0.433,0.082,0.646,0.123c0.218,0.044,0.434,0.087,0.65,0.132L75.194,73.144 M68.742,71.822\r
+ c-0.243-0.051-0.485-0.1-0.729-0.144c-0.24-0.049-0.48-0.101-0.721-0.15c-0.242-0.048-0.48-0.099-0.719-0.146\r
+ c-0.24-0.05-0.478-0.098-0.717-0.146l-0.176-4.403c0.239,0.047,0.479,0.092,0.719,0.139c0.242,0.049,0.48,0.098,0.725,0.144\r
+ c0.242,0.047,0.483,0.094,0.729,0.143c0.244,0.045,0.486,0.093,0.731,0.141L68.742,71.822 M61.664,70.357\r
+ c-0.226-0.049-0.45-0.094-0.675-0.143c-0.226-0.047-0.449-0.097-0.669-0.148c-0.225-0.047-0.445-0.095-0.664-0.145\r
+ c-0.221-0.05-0.439-0.097-0.658-0.145l-0.227-4.349c0.221,0.048,0.441,0.096,0.661,0.142c0.224,0.046,0.445,0.092,0.668,0.136\r
+ c0.224,0.049,0.45,0.096,0.674,0.141c0.226,0.048,0.455,0.096,0.682,0.144L61.664,70.357 M55.214,68.888\r
+ c-0.204-0.051-0.402-0.104-0.6-0.152c-0.198-0.05-0.398-0.099-0.592-0.152c-0.194-0.047-0.39-0.1-0.581-0.149\r
+ c-0.191-0.051-0.384-0.103-0.57-0.152l-0.27-4.295c0.19,0.051,0.381,0.099,0.576,0.148c0.192,0.051,0.389,0.097,0.584,0.145\r
+ c0.196,0.049,0.394,0.1,0.597,0.147c0.198,0.049,0.4,0.094,0.604,0.145L55.214,68.888 M49.642,67.339\r
+ c-0.168-0.055-0.334-0.108-0.498-0.162c-0.165-0.055-0.326-0.108-0.485-0.162c-0.164-0.055-0.322-0.108-0.478-0.164\r
+ c-0.154-0.057-0.309-0.111-0.462-0.167l-0.3-4.233c0.152,0.052,0.308,0.104,0.464,0.158c0.159,0.055,0.319,0.106,0.478,0.16\r
+ c0.163,0.051,0.327,0.104,0.49,0.154c0.167,0.055,0.335,0.104,0.503,0.156L49.642,67.339 M45.199,65.654\r
+ c-0.126-0.058-0.251-0.117-0.373-0.178c-0.121-0.057-0.241-0.117-0.358-0.177c-0.118-0.062-0.233-0.12-0.345-0.182\r
+ c-0.111-0.061-0.222-0.121-0.33-0.184l-0.324-4.176c0.108,0.06,0.218,0.119,0.332,0.179c0.112,0.058,0.228,0.115,0.347,0.174\r
+ c0.117,0.057,0.237,0.116,0.359,0.173c0.122,0.057,0.246,0.116,0.376,0.169L45.199,65.654 M42.114,63.789l-0.224-0.198\r
+ l-0.21-0.199l-0.194-0.203l-0.176-0.205l-0.336-4.111l0.179,0.197l0.196,0.197l0.208,0.195l0.225,0.189L42.114,63.789\r
+ M73.156,31.011c-0.117-0.014-0.234-0.029-0.353-0.043c-0.229-0.026-0.459-0.055-0.687-0.081\r
+ c-0.227-0.026-0.452-0.056-0.681-0.083l-0.147-5.131c0.228,0.026,0.458,0.051,0.688,0.077c0.23,0.024,0.46,0.051,0.69,0.074\r
+ c0.118,0.013,0.236,0.026,0.355,0.039c0.111,0.012,0.224,0.024,0.337,0.037c0.23,0.023,0.462,0.05,0.697,0.076l0.122,5.158\r
+ c-0.229-0.031-0.459-0.055-0.689-0.085C73.379,31.037,73.268,31.024,73.156,31.011 M67.277,30.317\r
+ c-0.26-0.029-0.519-0.062-0.777-0.09c-0.258-0.029-0.516-0.062-0.774-0.09c-0.255-0.032-0.513-0.062-0.766-0.09\r
+ c-0.254-0.034-0.508-0.062-0.764-0.09l-0.205-5.063c0.256,0.03,0.513,0.056,0.771,0.086c0.258,0.026,0.516,0.054,0.774,0.08\r
+ c0.262,0.03,0.52,0.055,0.779,0.083c0.262,0.028,0.521,0.056,0.782,0.086L67.277,30.317 M59.721,29.415\r
+ c-0.24-0.032-0.483-0.062-0.721-0.09c-0.239-0.032-0.476-0.062-0.713-0.09c-0.238-0.032-0.474-0.062-0.708-0.095\r
+ c-0.235-0.028-0.466-0.058-0.699-0.09l-0.26-4.984c0.236,0.028,0.471,0.056,0.707,0.084c0.236,0.025,0.472,0.055,0.71,0.083\r
+ c0.238,0.025,0.479,0.054,0.718,0.082c0.242,0.031,0.484,0.056,0.729,0.084L59.721,29.415 M52.854,28.494\r
+ c-0.216-0.032-0.428-0.06-0.641-0.091c-0.209-0.032-0.417-0.066-0.626-0.098c-0.208-0.03-0.412-0.062-0.618-0.094\r
+ c-0.203-0.033-0.407-0.065-0.609-0.097l-0.304-4.912c0.2,0.032,0.405,0.062,0.61,0.089c0.207,0.03,0.415,0.058,0.622,0.088\r
+ c0.21,0.028,0.42,0.058,0.633,0.086c0.214,0.029,0.426,0.058,0.642,0.088L52.854,28.494 M46.938,27.514\r
+ c-0.178-0.036-0.353-0.068-0.528-0.104c-0.172-0.036-0.346-0.068-0.516-0.107c-0.168-0.032-0.334-0.068-0.5-0.104\r
+ c-0.165-0.036-0.328-0.067-0.492-0.104l-0.343-4.834c0.163,0.032,0.327,0.063,0.493,0.095c0.168,0.035,0.336,0.066,0.508,0.099\r
+ c0.168,0.034,0.342,0.066,0.516,0.098c0.178,0.032,0.352,0.064,0.532,0.094L46.938,27.514 M40.418,21.481L40.396,21.2\r
+ c0.114,0.036,0.231,0.075,0.349,0.112c0.01,0.003,0.02,0.006,0.029,0.009c0.11,0.034,0.221,0.066,0.334,0.101\r
+ c0.123,0.036,0.25,0.074,0.38,0.108c0.128,0.038,0.26,0.074,0.394,0.108l0.36,4.787c-0.133-0.039-0.262-0.076-0.392-0.116\r
+ c-0.128-0.037-0.254-0.076-0.378-0.116c-0.122-0.039-0.244-0.078-0.362-0.118c-0.118-0.042-0.232-0.08-0.346-0.12L40.418,21.481\r
+ M38.048,23.018l-0.248-3.03l0.182,0.13l0.202,0.126l0.216,0.127l0.233,0.121l0.153,1.9l0.226,2.802l-0.234-0.129l-0.214-0.134\r
+ l-0.199-0.136l-0.183-0.138L38.048,23.018 M36.741,15.922l0.516,6.255l-0.278-3.391l0.012,0.101l0.02,0.098l0.034,0.095\r
+ l0.036,0.094l0.383,4.615l-0.04-0.104l-0.03-0.104l-0.022-0.104l-0.014-0.103l0.086,1.049l0,0\r
+ c0.071,0.847,0.966,1.593,2.517,2.267c1.585,0.683,3.842,1.291,6.596,1.843c2.804,0.566,6.112,1.079,9.731,1.571\r
+ c3.682,0.5,7.685,0.977,11.807,1.469c0.497,0.06,1,0.118,1.506,0.18c0.502,0.06,1.012,0.122,1.521,0.184\r
+ c0.51,0.06,1.022,0.123,1.537,0.186c0.516,0.062,1.032,0.124,1.55,0.188l0.853,35.312l0,0c-0.488-0.097-0.977-0.191-1.463-0.289\r
+ c-0.487-0.094-0.97-0.185-1.454-0.278c-0.479-0.093-0.961-0.187-1.438-0.28c-0.477-0.091-0.95-0.18-1.421-0.271\r
+ c-3.905-0.748-7.692-1.477-11.184-2.227c-3.436-0.735-6.58-1.497-9.253-2.327c-2.624-0.815-4.786-1.691-6.309-2.669\r
+ c-1.497-0.957-2.375-2.008-2.471-3.19l0.078,0.949l0.001,0.014l0.015,0.134l0.024,0.148l0.034,0.147l0.042,0.145l0.336,4.07\r
+ l-0.044-0.152l-0.03-0.151l-0.026-0.155l-0.017-0.143l0.206,2.46c0.102,1.255,0.976,2.373,2.455,3.39\r
+ c1.512,1.043,3.652,1.977,6.247,2.849c2.642,0.886,5.748,1.7,9.14,2.492c3.447,0.804,7.183,1.584,11.033,2.385\r
+ c0.568,0.12,1.14,0.238,1.711,0.361c0.575,0.117,1.15,0.239,1.731,0.362c0.581,0.12,1.165,0.243,1.748,0.369\r
+ c0.331,0.069,0.661,0.141,0.991,0.212c0.258,0.057,0.517,0.113,0.776,0.17l-0.009-0.41l-0.734-33.5L75.35,22.889\r
+ c-0.645-0.066-1.287-0.133-1.925-0.2c-0.162-0.016-0.323-0.033-0.484-0.049c-0.477-0.048-0.951-0.098-1.425-0.143\r
+ c-0.177-0.018-0.353-0.036-0.529-0.054c-0.453-0.046-0.904-0.092-1.354-0.137c-0.626-0.062-1.245-0.123-1.862-0.185\r
+ c-4.184-0.418-8.24-0.827-11.975-1.251c-3.573-0.41-6.847-0.834-9.639-1.308c-0.073-0.013-0.146-0.025-0.219-0.038\r
+ c-2.786-0.479-5.071-1.006-6.672-1.604C37.704,17.328,36.805,16.672,36.741,15.922"/>\r
+ <path clip-path="url(#SVGID_2_)" fill="#9BC93D" d="M37.443,24.424l2.624,31.668c0.096,1.183,0.974,2.234,2.471,3.19\r
+ c1.523,0.978,3.686,1.854,6.309,2.669c2.673,0.831,5.817,1.592,9.253,2.327c3.492,0.75,7.279,1.479,11.184,2.227\r
+ c0.471,0.091,0.944,0.18,1.421,0.271c0.478,0.094,0.96,0.188,1.438,0.28c0.484,0.094,0.967,0.185,1.454,0.278\r
+ c0.486,0.098,0.975,0.192,1.463,0.289l-0.604-25.057c-0.331,0.082-0.662,0.163-0.994,0.244l-0.274-10.624\r
+ c-0.177-0.021-0.354-0.042-0.529-0.063c-0.468-0.058-0.933-0.114-1.396-0.169l0.327,11.309c-0.339,0.083-0.677,0.162-1.015,0.24\r
+ c-0.34,0.083-0.681,0.163-1.019,0.243c-0.34,0.08-0.679,0.159-1.021,0.237c-0.34,0.083-0.678,0.163-1.019,0.239\r
+ c-3.151,0.742-6.307,1.487-9.287,2.247c-3.025,0.773-5.878,1.57-8.382,2.414c-2.543,0.856-4.737,1.763-6.395,2.75\r
+ c-1.694,1.005-2.838,2.096-3.238,3.304l-2.447-29.718C37.577,24.963,37.466,24.699,37.443,24.424"/>\r
+ <path clip-path="url(#SVGID_2_)" fill="#9BDBF1" d="M73.188,32.188l0.274,10.624c0.332-0.081,0.663-0.163,0.994-0.244\r
+ l-0.248-10.255C73.867,32.27,73.527,32.229,73.188,32.188"/>\r
+ <path clip-path="url(#SVGID_2_)" fill="#9BDBF1" d="M37.768,25.218l2.447,29.718c0.4-1.208,1.544-2.299,3.238-3.304\r
+ c1.658-0.986,3.852-1.893,6.395-2.75c2.503-0.844,5.356-1.641,8.382-2.414c2.98-0.76,6.136-1.504,9.287-2.247\r
+ c0.341-0.076,0.679-0.156,1.019-0.239c0.342-0.078,0.681-0.157,1.021-0.237c0.338-0.081,0.679-0.161,1.019-0.243\r
+ c0.338-0.078,0.676-0.157,1.015-0.24l-0.327-11.309c-0.047-0.005-0.094-0.011-0.141-0.017c-0.51-0.062-1.02-0.125-1.521-0.184\r
+ c-0.506-0.062-1.009-0.12-1.506-0.18c-4.122-0.492-8.125-0.968-11.807-1.469c-3.62-0.492-6.928-1.004-9.731-1.571\r
+ c-2.753-0.553-5.01-1.16-6.596-1.843C38.913,26.236,38.165,25.748,37.768,25.218"/>\r
+ <path clip-path="url(#SVGID_2_)" fill="#B2D57E" d="M37.443,24.424L37.443,24.424c0.023,0.275,0.133,0.539,0.324,0.794\r
+ c0.397,0.53,1.146,1.018,2.192,1.473c1.585,0.683,3.842,1.291,6.596,1.843c2.804,0.566,6.112,1.079,9.731,1.571\r
+ c3.682,0.5,7.685,0.977,11.807,1.469c0.497,0.06,1,0.118,1.506,0.18c0.502,0.06,1.012,0.122,1.521,0.184\r
+ c0.047,0.005,0.094,0.011,0.141,0.017c0.464,0.055,0.929,0.112,1.396,0.169c0.176,0.021,0.353,0.042,0.529,0.063\r
+ c0.34,0.041,0.68,0.083,1.021,0.125l0.248,10.255l0.604,25.057l0,0l-0.853-35.312c-0.518-0.064-1.034-0.126-1.55-0.188\r
+ c-0.515-0.063-1.027-0.126-1.537-0.186c-0.51-0.062-1.02-0.125-1.521-0.184c-0.506-0.062-1.009-0.12-1.506-0.18\r
+ c-4.122-0.492-8.125-0.968-11.807-1.469c-3.62-0.492-6.928-1.004-9.731-1.571c-2.753-0.553-5.01-1.16-6.596-1.843\r
+ C38.41,26.017,37.515,25.271,37.443,24.424"/>\r
+ <path clip-path="url(#SVGID_2_)" fill="#9BC93D" d="M94.004,35.259l-0.012,1.366l0.04,0.177l0.03,0.173l0.018,0.172l0.006,0.17\r
+ l0.016-2.04C94.069,35.271,94.036,35.265,94.004,35.259 M93.339,35.133c-0.235,0.283-0.52,0.562-0.851,0.834\r
+ c-1.062,0.879-2.592,1.704-4.465,2.485c-1.902,0.794-4.151,1.545-6.609,2.263c-1.382,0.405-2.829,0.798-4.315,1.183l0.519,26.234\r
+ c1.871,0.381,3.753,0.776,5.624,1.194l-0.097-9.559c5.416-1.554,10.649-3.124,15.46-4.749c4.672-1.579,8.923-3.201,12.51-4.889\r
+ c3.319-1.563,6.055-3.179,8.017-4.86c-1.606-1.725-3.791-3.2-6.4-4.473c-2.992-1.461-6.566-2.673-10.498-3.708\r
+ c-2.567-0.672-5.3-1.271-8.129-1.813l-0.034,4.12l-0.011-0.27c-0.008-0.09-0.02-0.181-0.038-0.271\r
+ c-0.014-0.094-0.039-0.183-0.062-0.277c-0.025-0.091-0.057-0.181-0.089-0.273l0.023-3.069\r
+ C93.709,35.203,93.524,35.168,93.339,35.133"/>\r
+ <path clip-path="url(#SVGID_2_)" fill="#FFFFFF" d="M93.894,35.238l-0.023,3.069c0.032,0.093,0.063,0.183,0.089,0.273\r
+ c0.022,0.094,0.048,0.183,0.062,0.277c0.019,0.09,0.03,0.181,0.038,0.271l0.011,0.27l0.034-4.12c-0.001,0-0.001,0-0.002,0\r
+ l-0.016,2.04l-0.006-0.17l-0.018-0.172l-0.03-0.173l-0.04-0.177l0.012-1.366C93.968,35.252,93.931,35.245,93.894,35.238"/>\r
+ <path clip-path="url(#SVGID_2_)" fill="#9BDBF1" d="M76.916,32.65l0.183,9.249c1.486-0.385,2.934-0.778,4.315-1.183\r
+ c2.458-0.718,4.707-1.469,6.609-2.263c1.873-0.782,3.403-1.606,4.465-2.485c0.331-0.273,0.615-0.551,0.851-0.834\r
+ c-1.135-0.212-2.284-0.415-3.444-0.61C85.656,33.812,81.261,33.202,76.916,32.65"/>\r
+ <path clip-path="url(#SVGID_2_)" fill="#9BC93D" d="M88.999,62.702c-0.318,0.1-0.639,0.198-0.96,0.295\r
+ c-0.322,0.101-0.641,0.2-0.966,0.3c-0.323,0.097-0.649,0.197-0.971,0.297c-0.326,0.097-0.652,0.197-0.98,0.295l0.04,5.874\r
+ c0.921,0.215,1.839,0.435,2.75,0.661c0.046-0.016,0.093-0.03,0.139-0.046c0.318-0.1,0.633-0.204,0.948-0.312V62.702\r
+ M98.143,59.708c-0.285,0.101-0.578,0.202-0.87,0.301c-0.29,0.099-0.585,0.199-0.877,0.298c-0.298,0.104-0.593,0.202-0.89,0.299\r
+ c-0.299,0.104-0.599,0.203-0.9,0.3l-0.068,7.284c0.297-0.104,0.595-0.21,0.886-0.314c0.297-0.104,0.59-0.21,0.884-0.313\r
+ c0.289-0.104,0.577-0.21,0.866-0.313c0.29-0.104,0.575-0.21,0.858-0.318L98.143,59.708 M119.445,56.75\r
+ c-0.16,0.182-0.328,0.363-0.503,0.544C119.117,57.113,119.285,56.932,119.445,56.75L119.445,56.75 M106.213,56.652\r
+ c-0.245,0.101-0.496,0.207-0.746,0.309c-0.251,0.101-0.508,0.204-0.765,0.304c-0.254,0.106-0.515,0.208-0.774,0.31\r
+ c-0.263,0.102-0.522,0.202-0.787,0.307l-0.17,7.137c0.261-0.108,0.521-0.217,0.778-0.322c0.258-0.104,0.514-0.212,0.768-0.32\r
+ c0.251-0.108,0.504-0.215,0.752-0.324c0.249-0.108,0.494-0.216,0.74-0.322L106.213,56.652 M112.905,53.521\r
+ c-0.196,0.104-0.395,0.207-0.6,0.315c-0.201,0.106-0.403,0.211-0.611,0.315c-0.208,0.105-0.419,0.209-0.63,0.316\r
+ c-0.213,0.104-0.43,0.209-0.646,0.313l-0.252,6.984c0.216-0.111,0.429-0.22,0.641-0.33c0.209-0.108,0.417-0.22,0.621-0.332\r
+ c0.207-0.109,0.408-0.222,0.607-0.331c0.203-0.111,0.4-0.22,0.597-0.334L112.905,53.521 M117.953,50.299\r
+ c-0.137,0.111-0.28,0.218-0.425,0.326c-0.141,0.108-0.292,0.219-0.441,0.327c-0.15,0.108-0.304,0.216-0.458,0.324\r
+ c-0.158,0.105-0.315,0.213-0.479,0.322l-0.31,6.817c0.162-0.111,0.318-0.226,0.475-0.34c0.155-0.114,0.306-0.226,0.454-0.34\r
+ c0.151-0.114,0.297-0.228,0.438-0.34c0.145-0.114,0.285-0.23,0.421-0.345L117.953,50.299"/>\r
+ <path clip-path="url(#SVGID_2_)" fill="#9BC93D" d="M119.504,94.39l-0.004,0.062L119.504,94.39L119.504,94.39 M121.832,51.849\r
+ c-0.115,1.2-0.567,2.369-1.317,3.511v0.001C121.266,54.218,121.717,53.048,121.832,51.849 M121.833,51.844\r
+ C121.833,51.844,121.833,51.844,121.833,51.844C121.833,51.844,121.833,51.844,121.833,51.844 M121.791,50.252l-0.063,1.168\r
+ c0.028-0.108,0.054-0.216,0.076-0.322c0.019-0.084,0.035-0.168,0.05-0.252c-0.005-0.074-0.01-0.148-0.017-0.223\r
+ C121.826,50.5,121.811,50.376,121.791,50.252 M120.919,47.728l-0.325,6.132c0.066-0.098,0.128-0.196,0.19-0.296l0.296-5.521\r
+ C121.028,47.938,120.975,47.833,120.919,47.728"/>\r
+ <path clip-path="url(#SVGID_2_)" fill="#010101" d="M121.853,51.58c-0.001,0.016-0.002,0.031-0.003,0.046l-1.14,20.779\r
+ L121.853,51.58"/>\r
+ <polygon clip-path="url(#SVGID_2_)" fill="#010101" points="121.934,50.121 122.17,45.877 121.934,50.125 "/>\r
+ <path clip-path="url(#SVGID_2_)" fill="#010101" d="M119.43,95.744c0,0.009-0.001,0.018-0.001,0.026l-0.076,1.394L119.43,95.744\r
+ M119.433,95.698l-0.003,0.046C119.431,95.729,119.432,95.714,119.433,95.698 M121.934,50.125l-0.006,0.097\r
+ C121.931,50.19,121.932,50.158,121.934,50.125 M94,125.345l0.055-5.91c0.273-0.133,0.543-0.269,0.812-0.401\r
+ c0.27-0.134,0.539-0.269,0.805-0.4c0.265-0.135,0.531-0.27,0.793-0.403c0.265-0.133,0.525-0.267,0.785-0.401l-0.09,5.876\r
+ c-0.259,0.136-0.517,0.272-0.777,0.414c-0.258,0.136-0.522,0.273-0.784,0.409c-0.265,0.137-0.529,0.274-0.795,0.41\r
+ S94.269,125.207,94,125.345 M101.635,121.192l0.138-5.821c0.24-0.14,0.479-0.273,0.715-0.412c0.237-0.14,0.47-0.275,0.703-0.416\r
+ c0.233-0.137,0.463-0.276,0.691-0.416c0.229-0.142,0.456-0.275,0.683-0.415l-0.171,5.784c-0.221,0.144-0.445,0.285-0.668,0.426\r
+ c-0.229,0.14-0.458,0.285-0.688,0.427c-0.229,0.14-0.462,0.284-0.696,0.422C102.106,120.913,101.873,121.056,101.635,121.192\r
+ M108.186,116.888l0.205-5.727c0.198-0.143,0.396-0.284,0.589-0.428c0.194-0.146,0.388-0.286,0.579-0.434\r
+ c0.189-0.143,0.377-0.287,0.561-0.431c0.187-0.145,0.368-0.29,0.549-0.437l-0.229,5.687c-0.178,0.147-0.356,0.297-0.541,0.445\r
+ s-0.368,0.298-0.558,0.442c-0.188,0.148-0.378,0.295-0.569,0.442C108.578,116.595,108.383,116.742,108.186,116.888\r
+ M113.393,112.402l0.256-5.623c0.148-0.148,0.298-0.297,0.443-0.447c0.142-0.148,0.283-0.301,0.422-0.45\r
+ c0.138-0.151,0.274-0.302,0.409-0.449c0.133-0.152,0.265-0.305,0.391-0.453l-0.267,5.577c-0.13,0.153-0.259,0.309-0.39,0.462\r
+ c-0.133,0.154-0.268,0.31-0.405,0.464c-0.137,0.155-0.277,0.308-0.421,0.46C113.685,112.097,113.543,112.249,113.393,112.402\r
+ M117.03,107.716l0.285-5.504c0.094-0.16,0.186-0.313,0.272-0.471c0.085-0.152,0.172-0.311,0.252-0.465\r
+ c0.082-0.156,0.16-0.313,0.235-0.473c0.076-0.155,0.148-0.314,0.219-0.469l-0.291,5.459c-0.07,0.16-0.142,0.321-0.218,0.481\r
+ c-0.073,0.164-0.153,0.321-0.232,0.483c-0.081,0.16-0.165,0.32-0.25,0.48C117.213,107.397,117.122,107.56,117.03,107.716\r
+ M85.162,69.764l-0.04-5.874c0.328-0.098,0.654-0.198,0.98-0.295c0.321-0.1,0.647-0.2,0.971-0.297\r
+ c0.325-0.1,0.644-0.199,0.966-0.3c0.321-0.097,0.642-0.195,0.96-0.295v7.364c-0.315,0.108-0.63,0.213-0.948,0.312\r
+ c-0.046,0.016-0.093,0.03-0.139,0.046c-0.27,0.089-0.54,0.177-0.811,0.266c-0.321,0.103-0.64,0.205-0.963,0.31\r
+ c-0.32,0.104-0.645,0.207-0.966,0.311L85.162,69.764 M94.537,68.19l0.068-7.284c0.302-0.098,0.602-0.196,0.9-0.3\r
+ c0.297-0.097,0.592-0.195,0.89-0.299c0.292-0.099,0.587-0.199,0.877-0.298c0.292-0.099,0.585-0.2,0.87-0.301l-0.111,7.222\r
+ c-0.283,0.108-0.568,0.214-0.858,0.318c-0.289,0.104-0.577,0.209-0.866,0.313c-0.294,0.104-0.587,0.209-0.884,0.313\r
+ C95.132,67.98,94.834,68.086,94.537,68.19 M102.971,65.019l0.17-7.137c0.265-0.104,0.524-0.205,0.787-0.307\r
+ c0.26-0.102,0.521-0.204,0.774-0.31c0.257-0.1,0.514-0.203,0.765-0.304c0.25-0.103,0.501-0.208,0.746-0.309l-0.204,7.079\r
+ c-0.246,0.106-0.491,0.213-0.74,0.322c-0.248,0.108-0.501,0.215-0.752,0.324c-0.254,0.107-0.51,0.215-0.768,0.32\r
+ C103.491,64.802,103.231,64.91,102.971,65.019 M110.166,61.766l0.252-6.984c0.217-0.104,0.434-0.21,0.646-0.313\r
+ c0.211-0.107,0.422-0.211,0.63-0.316c0.208-0.104,0.41-0.208,0.611-0.315c0.205-0.108,0.403-0.211,0.6-0.315l-0.273,6.918\r
+ c-0.196,0.114-0.394,0.223-0.597,0.334c-0.199,0.109-0.4,0.222-0.607,0.331c-0.204,0.111-0.412,0.223-0.621,0.332\r
+ C110.595,61.546,110.382,61.655,110.166,61.766 M115.84,58.416l0.31-6.817c0.164-0.108,0.321-0.217,0.479-0.322\r
+ c0.154-0.108,0.308-0.216,0.458-0.324c0.149-0.108,0.301-0.218,0.441-0.327c0.145-0.108,0.288-0.215,0.425-0.326l-0.326,6.751\r
+ c-0.136,0.114-0.276,0.23-0.421,0.345c-0.141,0.112-0.286,0.226-0.438,0.34c-0.148,0.115-0.299,0.226-0.454,0.34\r
+ C116.158,58.19,116.002,58.304,115.84,58.416 M119.759,54.964l0.343-6.639c0.098-0.112,0.191-0.221,0.287-0.333\r
+ c0.094-0.11,0.182-0.22,0.271-0.333c0.084-0.109,0.168-0.219,0.248-0.332c0.078-0.11,0.154-0.22,0.229-0.334l-0.056,1.049\r
+ l-0.296,5.521c-0.062,0.1-0.124,0.198-0.19,0.296c-0.012,0.018-0.023,0.036-0.036,0.053c-0.079,0.119-0.163,0.239-0.247,0.354\r
+ c-0.087,0.114-0.174,0.23-0.266,0.348C119.95,54.731,119.856,54.848,119.759,54.964 M122.503,39.734\r
+ c-0.1,1.833-1.196,3.596-3.102,5.301c-0.089,0.079-0.179,0.158-0.271,0.237c-1.962,1.681-4.697,3.296-8.017,4.86\r
+ c-3.587,1.688-7.838,3.31-12.51,4.889c-4.811,1.625-10.044,3.194-15.46,4.749l0.097,9.559L83.837,128h1.721l-0.031-4.605\r
+ c0.296-0.129,0.586-0.262,0.88-0.39c0.29-0.133,0.583-0.266,0.873-0.396c0.288-0.131,0.579-0.26,0.867-0.393\r
+ c0.286-0.131,0.578-0.262,0.861-0.395l0.003,5.961c-0.154,0.072-0.309,0.144-0.464,0.217h7.202\r
+ c0.572-0.304,1.138-0.609,1.697-0.916c4.129-2.263,7.897-4.61,11.095-7.084c3.114-2.407,5.667-4.925,7.476-7.586\r
+ c1.748-2.58,2.788-5.283,2.945-8.135l0.391-7.115l-0.213,3.87c-0.008,0.152-0.018,0.301-0.033,0.451\r
+ c-0.012,0.151-0.028,0.303-0.049,0.451c-0.018,0.15-0.038,0.302-0.062,0.449c-0.023,0.152-0.049,0.301-0.08,0.451l0.297-5.384\r
+ c0.027-0.143,0.055-0.292,0.079-0.438c0.021-0.145,0.043-0.289,0.062-0.438c0.021-0.145,0.033-0.292,0.049-0.437\r
+ c0.011-0.123,0.02-0.246,0.027-0.37l1.281-23.365l-1.207,21.984l-0.003,0.062c-0.144,2.634-1.135,5.135-2.813,7.53\r
+ c-1.731,2.477-4.19,4.821-7.192,7.067c-3.085,2.314-6.73,4.51-10.743,6.632c-4.111,2.174-8.592,4.261-13.234,6.307l-0.332-48.992\r
+ l0,0c5.073-1.638,9.959-3.307,14.431-5.029c4.354-1.682,8.305-3.408,11.633-5.211c3.229-1.752,5.859-3.566,7.694-5.462l0,0\r
+ c0.175-0.181,0.343-0.362,0.503-0.544c0.405-0.459,0.762-0.922,1.069-1.39c0.75-1.142,1.202-2.311,1.317-3.511\r
+ c0-0.001,0.001-0.003,0.001-0.004c0,0,0,0,0-0.001c0.008-0.082,0.014-0.165,0.019-0.247l0.001-0.019l0,0\r
+ c0,0.006-0.001,0.013-0.001,0.019l-0.002,0.029l0,0c0.001-0.015,0.002-0.03,0.003-0.046l0,0l0.075-1.358\r
+ c-0.005,0.076-0.012,0.151-0.02,0.227c-0.011,0.106-0.027,0.216-0.043,0.324c-0.004,0.024-0.008,0.049-0.012,0.073\r
+ c-0.015,0.084-0.031,0.167-0.05,0.252c-0.022,0.106-0.048,0.214-0.076,0.322l0.063-1.168l0.289-5.283\r
+ c0.029-0.103,0.055-0.204,0.075-0.306c0.023-0.102,0.044-0.202,0.06-0.307c0.02-0.101,0.032-0.202,0.045-0.303\r
+ c0.011-0.104,0.018-0.207,0.023-0.31l-0.113,2.134L122.503,39.734"/>\r
+ <path clip-path="url(#SVGID_2_)" fill="#010101" d="M83.145,59.769c-0.891,0.257-1.789,0.512-2.691,0.766\r
+ c-0.904,0.259-1.811,0.514-2.722,0.769c-0.915,0.256-1.835,0.512-2.752,0.77c-0.922,0.257-1.844,0.518-2.771,0.773\r
+ c-6.99,1.945-14.099,3.926-20.925,6.005c-7.05,2.148-13.817,4.418-19.89,6.89c-6.31,2.563-11.911,5.365-16.363,8.521\r
+ c-4.668,3.312-8.124,7.054-9.835,11.397l13.32,87.766c1.099-5.968,3.742-11.117,7.476-15.671\r
+ c3.585-4.374,8.212-8.244,13.486-11.784c5.104-3.422,10.85-6.554,16.871-9.521c5.852-2.887,11.981-5.628,18.034-8.334\r
+ c0.801-0.361,1.601-0.717,2.401-1.079c0.798-0.355,1.596-0.713,2.389-1.071c0.795-0.358,1.584-0.717,2.376-1.075\r
+ c0.784-0.355,1.565-0.716,2.347-1.076L83.145,59.769z M78.215,65.931c0.34-0.097,0.678-0.196,1.016-0.294\r
+ c0.336-0.1,0.676-0.195,1.01-0.294c0.338-0.1,0.672-0.197,1.005-0.297l0.101,7.47c-0.33,0.106-0.663,0.204-0.989,0.312\r
+ c-0.333,0.099-0.667,0.204-1.001,0.308c-0.332,0.105-0.664,0.206-0.999,0.312c-0.334,0.101-0.671,0.205-1.005,0.307l-0.153-7.524\r
+ C77.536,66.131,77.877,66.031,78.215,65.931z M67.09,69.162c0.41-0.12,0.819-0.242,1.23-0.358c0.411-0.12,0.817-0.24,1.229-0.361\r
+ c0.407-0.115,0.815-0.233,1.224-0.349l0.24,7.604c-0.401,0.123-0.806,0.249-1.208,0.37c-0.403,0.124-0.807,0.248-1.21,0.373\r
+ c-0.405,0.125-0.81,0.246-1.214,0.372c-0.406,0.126-0.812,0.25-1.217,0.376l-0.307-7.672C66.27,69.399,66.678,69.279,67.09,69.162\r
+ z M54.708,72.852c0.408-0.127,0.82-0.253,1.232-0.378c0.41-0.126,0.822-0.253,1.235-0.381c0.412-0.122,0.824-0.248,1.234-0.37\r
+ l0.414,7.765c-0.406,0.132-0.812,0.263-1.218,0.39c-0.405,0.132-0.811,0.262-1.215,0.393c-0.406,0.136-0.811,0.267-1.215,0.398\r
+ c-0.406,0.132-0.81,0.266-1.215,0.399l-0.484-7.836C53.888,73.108,54.298,72.977,54.708,72.852z M42.568,76.826\r
+ c0.392-0.139,0.789-0.272,1.187-0.413c0.394-0.138,0.792-0.274,1.193-0.409c0.4-0.134,0.798-0.27,1.202-0.406l0.593,7.938\r
+ c-0.395,0.14-0.79,0.285-1.182,0.427c-0.394,0.14-0.786,0.281-1.174,0.425c-0.392,0.146-0.781,0.289-1.17,0.433\r
+ c-0.388,0.144-0.775,0.289-1.161,0.433l-0.668-8.008C41.779,77.105,42.174,76.965,42.568,76.826z M31.172,81.226\r
+ c0.36-0.154,0.724-0.311,1.089-0.463c0.363-0.15,0.731-0.306,1.1-0.458c0.371-0.149,0.74-0.303,1.113-0.45l0.782,8.125\r
+ c-0.369,0.158-0.731,0.313-1.096,0.472c-0.362,0.156-0.725,0.317-1.081,0.477c-0.36,0.16-0.717,0.323-1.072,0.484\r
+ c-0.354,0.161-0.707,0.324-1.057,0.49l-0.854-8.208C30.452,81.537,30.81,81.381,31.172,81.226z M21.055,86.231\r
+ c0.308-0.18,0.62-0.355,0.937-0.53c0.313-0.181,0.63-0.354,0.952-0.527c0.322-0.175,0.644-0.346,0.972-0.516l0.964,8.335\r
+ c-0.319,0.181-0.638,0.362-0.953,0.543c-0.316,0.18-0.63,0.364-0.937,0.546c-0.312,0.186-0.616,0.374-0.918,0.559\r
+ c-0.304,0.186-0.604,0.377-0.901,0.565l-1.036-8.434C20.438,86.591,20.744,86.41,21.055,86.231z M12.809,92.08\r
+ c0.234-0.214,0.474-0.423,0.718-0.634c0.246-0.206,0.492-0.411,0.744-0.617c0.255-0.204,0.511-0.404,0.768-0.605l1.141,8.588\r
+ c-0.255,0.21-0.506,0.421-0.752,0.634c-0.249,0.214-0.49,0.431-0.729,0.646c-0.238,0.219-0.474,0.437-0.702,0.657\r
+ c-0.233,0.221-0.458,0.446-0.679,0.673l-1.206-8.702C12.338,92.506,12.569,92.289,12.809,92.08z M6.731,99.882\r
+ c0.124-0.267,0.256-0.523,0.392-0.784c0.136-0.255,0.282-0.511,0.43-0.764c0.148-0.252,0.301-0.502,0.46-0.748\r
+ c0.161-0.248,0.325-0.492,0.493-0.735l1.299,8.889c-0.164,0.252-0.324,0.508-0.478,0.767c-0.154,0.257-0.305,0.518-0.446,0.779\r
+ c-0.146,0.265-0.283,0.532-0.417,0.801c-0.132,0.271-0.258,0.542-0.378,0.816L6.731,99.882z M19.29,174.192\r
+ c-0.12,0.323-0.236,0.655-0.346,0.984c-0.11,0.335-0.216,0.669-0.316,1.011c-0.1,0.341-0.194,0.683-0.285,1.028l-1.032-6.869\r
+ c0.091-0.337,0.191-0.675,0.296-1.012c0.103-0.33,0.21-0.661,0.322-0.992c0.116-0.323,0.234-0.648,0.358-0.97\r
+ c0.122-0.321,0.251-0.638,0.386-0.953l0.993,6.802C19.536,173.542,19.41,173.865,19.29,174.192z M24.258,165.255\r
+ c-0.208,0.271-0.408,0.543-0.606,0.816c-0.201,0.276-0.396,0.555-0.584,0.836c-0.192,0.281-0.378,0.562-0.562,0.851l-0.927-6.707\r
+ c0.184-0.277,0.376-0.558,0.572-0.833c0.194-0.273,0.392-0.546,0.595-0.82c0.204-0.269,0.41-0.539,0.621-0.806\r
+ c0.208-0.267,0.422-0.528,0.64-0.789l0.883,6.645C24.674,164.713,24.464,164.983,24.258,165.255z M31.468,157.748\r
+ c-0.271,0.229-0.538,0.461-0.802,0.697c-0.266,0.233-0.528,0.467-0.786,0.705c-0.261,0.239-0.517,0.48-0.768,0.721l-0.808-6.565\r
+ c0.256-0.237,0.519-0.475,0.782-0.707c0.265-0.232,0.529-0.467,0.799-0.696c0.27-0.229,0.542-0.456,0.814-0.682\r
+ c0.276-0.229,0.555-0.453,0.835-0.677l0.753,6.516C32.01,157.284,31.738,157.518,31.468,157.748z M40.325,151.283\r
+ c-0.317,0.201-0.631,0.401-0.944,0.605c-0.313,0.204-0.621,0.41-0.932,0.616c-0.306,0.206-0.614,0.414-0.918,0.624l-0.67-6.442\r
+ c0.306-0.207,0.621-0.412,0.935-0.611c0.31-0.206,0.627-0.406,0.942-0.606c0.318-0.202,0.637-0.399,0.957-0.598\r
+ c0.322-0.195,0.646-0.392,0.968-0.586l0.616,6.396C40.958,150.883,40.641,151.08,40.325,151.283z M50.312,145.564\r
+ c-0.346,0.184-0.69,0.362-1.033,0.547c-0.346,0.18-0.686,0.365-1.026,0.549c-0.344,0.182-0.683,0.368-1.022,0.555l-0.528-6.336\r
+ c0.344-0.182,0.688-0.362,1.035-0.544c0.344-0.181,0.692-0.36,1.042-0.539c0.349-0.18,0.697-0.356,1.047-0.537\r
+ c0.352-0.174,0.703-0.35,1.057-0.523l0.47,6.294C51.006,145.208,50.658,145.387,50.312,145.564z M60.955,140.371\r
+ c-0.36,0.166-0.718,0.334-1.078,0.499c-0.358,0.165-0.717,0.335-1.077,0.505c-0.358,0.169-0.714,0.336-1.073,0.508l-0.386-6.234\r
+ c0.362-0.166,0.725-0.333,1.089-0.499c0.362-0.165,0.726-0.332,1.09-0.493c0.364-0.166,0.726-0.33,1.091-0.495\r
+ c0.364-0.161,0.73-0.323,1.094-0.486l0.33,6.197C61.676,140.038,61.314,140.204,60.955,140.371z M71.807,135.504\r
+ c-0.358,0.158-0.718,0.318-1.077,0.475c-0.363,0.16-0.724,0.316-1.083,0.479c-0.36,0.16-0.724,0.321-1.083,0.479l-0.247-6.145\r
+ c0.365-0.155,0.731-0.311,1.098-0.469c0.364-0.157,0.73-0.311,1.093-0.468c0.366-0.151,0.73-0.312,1.095-0.464\r
+ c0.364-0.154,0.729-0.312,1.09-0.467l0.194,6.107C72.525,135.187,72.167,135.346,71.807,135.504z M76.067,126.05\r
+ c-0.671,0.286-1.339,0.568-2.01,0.85c-6.013,2.536-12.1,5.108-17.938,7.804c-6.001,2.778-11.752,5.697-16.911,8.876\r
+ c-5.329,3.28-10.057,6.854-13.821,10.871c-3.919,4.181-6.829,8.875-8.318,14.284L8.39,110.943\r
+ c1.907-4.409,5.356-8.237,9.883-11.641c4.332-3.26,9.691-6.162,15.688-8.832c5.784-2.574,12.193-4.947,18.857-7.202\r
+ c6.465-2.187,13.183-4.271,19.8-6.32c0.736-0.229,1.473-0.457,2.206-0.684c0.734-0.228,1.467-0.458,2.197-0.687\r
+ c0.731-0.227,1.46-0.454,2.184-0.68s1.446-0.452,2.163-0.684l0.663,49.292c-0.655,0.286-1.312,0.567-1.974,0.85\r
+ s-1.324,0.564-1.989,0.846C77.401,125.484,76.733,125.766,76.067,126.05z M81.243,131.343c-0.297,0.135-0.596,0.27-0.896,0.4\r
+ c-0.296,0.131-0.596,0.265-0.894,0.397c-0.3,0.134-0.601,0.264-0.9,0.397l-0.124-6.058c0.305-0.129,0.608-0.26,0.908-0.389\r
+ c0.305-0.131,0.606-0.26,0.908-0.391c0.302-0.13,0.604-0.26,0.906-0.39c0.301-0.133,0.599-0.258,0.9-0.391l0.081,6.022\r
+ C81.837,131.078,81.541,131.212,81.243,131.343z"/>\r
+ <path clip-path="url(#SVGID_2_)" fill="#E9262C" d="M120.515,55.361c-0.308,0.467-0.664,0.93-1.069,1.389l-1.568,30.59h-0.002\r
+ c-1.485-2.941-3.787-5.408-6.662-7.507c-2.778-2.03-6.109-3.733-9.786-5.205c-3.317-1.325-6.931-2.463-10.68-3.471\r
+ c-1.82,0.618-3.679,1.23-5.562,1.839l0.332,48.992c4.643-2.046,9.123-4.133,13.234-6.307c4.013-2.122,7.658-4.317,10.743-6.632\r
+ c3.002-2.246,5.461-4.591,7.192-7.067c1.679-2.396,2.67-4.896,2.813-7.53l0.004-0.062c0.021-0.402,0.02-0.808,0.001-1.214\r
+ c-0.021-0.421-0.063-0.853-0.128-1.281c-0.065-0.432-0.154-0.862-0.265-1.296c-0.109-0.433-0.241-0.866-0.396-1.308\r
+ L120.515,55.361"/>\r
+ <path clip-path="url(#SVGID_2_)" fill="#FFF01F" d="M119.445,56.75c-0.16,0.182-0.328,0.363-0.503,0.543l0,0\r
+ c-1.835,1.896-4.466,3.71-7.694,5.462c-3.328,1.803-7.278,3.529-11.633,5.211c-2.812,1.083-5.786,2.145-8.868,3.19\r
+ c3.749,1.008,7.362,2.146,10.68,3.471c3.677,1.472,7.008,3.175,9.786,5.205c2.875,2.099,5.177,4.565,6.662,7.507h0.002\r
+ L119.445,56.75"/>\r
+ <path clip-path="url(#SVGID_2_)" fill="#FFF01F" d="M121.85,51.626c-0.004,0.073-0.01,0.146-0.017,0.218c0,0,0,0,0,0.001\r
+ c0,0.001-0.001,0.003-0.001,0.004c-0.115,1.199-0.566,2.369-1.317,3.512l-1.799,33.93c0.155,0.441,0.287,0.875,0.396,1.308\r
+ c0.11,0.434,0.199,0.864,0.265,1.296c0.064,0.429,0.107,0.86,0.128,1.281c0.019,0.406,0.02,0.812-0.001,1.214L121.85,51.626"/>\r
+ <path clip-path="url(#SVGID_2_)" fill="#EF775F" d="M118.942,57.293L118.942,57.293c-1.835,1.896-4.466,3.71-7.694,5.462\r
+ c-3.328,1.803-7.278,3.529-11.633,5.211c-4.472,1.723-9.357,3.392-14.431,5.029l0,0c1.884-0.608,3.742-1.221,5.562-1.839\r
+ c3.082-1.046,6.057-2.107,8.868-3.19c4.354-1.682,8.305-3.408,11.633-5.211C114.477,61.003,117.107,59.19,118.942,57.293\r
+ L118.942,57.293 M121.833,51.845c0,0.001-0.001,0.003-0.001,0.004C121.832,51.848,121.833,51.846,121.833,51.845 M121.852,51.597\r
+ c-0.005,0.083-0.011,0.165-0.019,0.247c0.007-0.072,0.013-0.145,0.017-0.218L121.852,51.597 M121.853,51.578l-0.001,0.019\r
+ C121.852,51.59,121.853,51.584,121.853,51.578"/>\r
+ <path clip-path="url(#SVGID_2_)" fill="#010101" d="M121.044,35.586c-1.595-2.109-4.185-3.836-7.464-5.273\r
+ c-3.149-1.381-6.962-2.507-11.17-3.454c-4.086-0.918-8.577-1.673-13.219-2.319c-4.528-0.635-9.228-1.168-13.842-1.651l1.168,53.26\r
+ c4.23,0.915,8.528,1.917,12.67,3.069c4.228,1.178,8.308,2.523,12.011,4.119c3.806,1.637,7.236,3.551,10.05,5.845\r
+ c2.917,2.377,5.197,5.185,6.557,8.565l0.029,0.071l3.246-62.187L121.044,35.586z M115.161,34.79\r
+ c0.152,0.082,0.301,0.165,0.449,0.245c0.149,0.085,0.296,0.171,0.438,0.255c0.147,0.086,0.288,0.171,0.428,0.258\r
+ c0.143,0.088,0.279,0.174,0.415,0.265l-0.264,5.891c-0.137-0.096-0.275-0.19-0.415-0.28c-0.136-0.094-0.278-0.188-0.422-0.278\r
+ c-0.141-0.089-0.285-0.18-0.434-0.268c-0.144-0.09-0.29-0.176-0.442-0.265L115.161,34.79z M110.119,32.581\r
+ c0.183,0.063,0.363,0.131,0.544,0.198c0.181,0.07,0.358,0.136,0.537,0.206c0.175,0.068,0.352,0.136,0.526,0.208\r
+ c0.174,0.068,0.348,0.143,0.519,0.214l-0.217,5.727c-0.168-0.074-0.341-0.15-0.512-0.226c-0.173-0.076-0.347-0.149-0.523-0.224\r
+ c-0.173-0.074-0.35-0.146-0.527-0.221c-0.181-0.072-0.358-0.14-0.539-0.212L110.119,32.581z M104.263,30.789\r
+ c0.205,0.058,0.41,0.108,0.616,0.165c0.204,0.056,0.407,0.11,0.607,0.167c0.204,0.056,0.402,0.109,0.603,0.167\r
+ c0.2,0.058,0.401,0.114,0.596,0.172l-0.16,5.593c-0.194-0.06-0.391-0.122-0.588-0.183c-0.198-0.062-0.398-0.124-0.599-0.184\r
+ c-0.197-0.058-0.399-0.117-0.601-0.178c-0.203-0.059-0.407-0.113-0.608-0.17L104.263,30.789z M97.809,29.336\r
+ c0.223,0.042,0.444,0.086,0.667,0.132c0.219,0.044,0.44,0.09,0.662,0.134c0.218,0.049,0.436,0.094,0.654,0.14\r
+ c0.219,0.048,0.437,0.094,0.653,0.14l-0.101,5.478c-0.216-0.051-0.429-0.103-0.646-0.151c-0.217-0.05-0.435-0.1-0.651-0.15\r
+ c-0.217-0.048-0.438-0.095-0.655-0.146c-0.219-0.046-0.438-0.094-0.659-0.14L97.809,29.336z M90.956,28.138\r
+ c0.233,0.04,0.463,0.076,0.697,0.112c0.232,0.036,0.462,0.072,0.692,0.113c0.231,0.036,0.464,0.073,0.693,0.111\r
+ s0.458,0.078,0.688,0.116l-0.04,5.379c-0.227-0.044-0.454-0.084-0.685-0.126c-0.226-0.04-0.456-0.08-0.685-0.125\r
+ c-0.227-0.038-0.456-0.078-0.688-0.12c-0.229-0.042-0.461-0.078-0.69-0.118L90.956,28.138z M84.598,27.232\r
+ c0.236,0.032,0.473,0.066,0.712,0.094c0.232,0.032,0.469,0.062,0.705,0.094c0.238,0.034,0.473,0.067,0.71,0.099l0.019,5.287\r
+ c-0.232-0.034-0.467-0.068-0.701-0.104c-0.235-0.035-0.468-0.07-0.701-0.102c-0.237-0.034-0.469-0.068-0.706-0.1\r
+ c-0.233-0.036-0.467-0.068-0.706-0.104l-0.041-5.257C84.123,27.171,84.362,27.199,84.598,27.232z M76.788,26.283\r
+ c0.236,0.026,0.47,0.052,0.706,0.081c0.234,0.028,0.47,0.054,0.705,0.08c0.235,0.028,0.472,0.056,0.708,0.087\r
+ c0.235,0.023,0.474,0.053,0.708,0.081l0.079,5.213c-0.234-0.032-0.468-0.06-0.703-0.093c-0.232-0.029-0.467-0.057-0.701-0.087\r
+ c-0.231-0.032-0.466-0.06-0.7-0.09c-0.234-0.029-0.467-0.06-0.698-0.088L76.788,26.283z M79.687,74.104\r
+ c-0.217-0.046-0.438-0.094-0.653-0.142c-0.22-0.046-0.436-0.097-0.654-0.143c-0.219-0.048-0.437-0.094-0.652-0.14l-0.089-4.496\r
+ c0.219,0.042,0.438,0.091,0.657,0.132c0.218,0.048,0.44,0.095,0.658,0.137c0.218,0.048,0.439,0.096,0.658,0.141\r
+ c0.223,0.047,0.44,0.096,0.661,0.141l0.069,4.517C80.121,74.203,79.906,74.153,79.687,74.104z M86.254,75.647\r
+ c-0.217-0.053-0.436-0.109-0.653-0.163c-0.219-0.053-0.438-0.107-0.654-0.161c-0.22-0.051-0.437-0.105-0.658-0.16l-0.033-4.549\r
+ c0.217,0.051,0.438,0.103,0.658,0.152c0.219,0.055,0.438,0.104,0.659,0.157c0.22,0.053,0.441,0.104,0.66,0.156\r
+ c0.22,0.055,0.438,0.104,0.658,0.162l0.018,4.572C86.689,75.758,86.473,75.703,86.254,75.647z M93.359,77.619\r
+ c-0.212-0.063-0.422-0.127-0.631-0.192c-0.214-0.062-0.427-0.126-0.638-0.191c-0.214-0.062-0.427-0.126-0.641-0.187\r
+ c-0.213-0.06-0.427-0.121-0.643-0.182l0.017-4.615c0.216,0.059,0.429,0.122,0.646,0.18c0.215,0.059,0.43,0.121,0.645,0.18\r
+ c0.213,0.06,0.429,0.121,0.643,0.185c0.212,0.063,0.426,0.124,0.639,0.185L93.359,77.619z M99.528,79.75\r
+ c-0.195-0.079-0.397-0.154-0.598-0.23c-0.2-0.075-0.398-0.151-0.602-0.225c-0.199-0.074-0.404-0.148-0.605-0.222\r
+ c-0.205-0.075-0.407-0.146-0.613-0.22l0.068-4.679c0.204,0.068,0.408,0.14,0.615,0.213c0.204,0.068,0.409,0.143,0.612,0.21\r
+ c0.203,0.075,0.403,0.147,0.607,0.221c0.199,0.076,0.403,0.147,0.602,0.225L99.528,79.75z M105.233,82.297\r
+ c-0.178-0.092-0.361-0.187-0.544-0.277c-0.181-0.089-0.364-0.18-0.545-0.27c-0.187-0.093-0.373-0.178-0.559-0.265\r
+ c-0.186-0.088-0.372-0.176-0.563-0.265l0.118-4.758c0.191,0.086,0.379,0.17,0.567,0.257c0.188,0.083,0.375,0.167,0.561,0.253\r
+ c0.186,0.089,0.372,0.175,0.556,0.263c0.183,0.086,0.367,0.176,0.548,0.268L105.233,82.297z M110.287,85.368\r
+ c-0.153-0.112-0.31-0.225-0.469-0.333c-0.157-0.112-0.316-0.219-0.479-0.328c-0.16-0.107-0.319-0.215-0.485-0.32\r
+ c-0.164-0.109-0.329-0.214-0.495-0.315l0.166-4.851c0.168,0.1,0.335,0.204,0.501,0.307c0.165,0.104,0.327,0.206,0.49,0.31\r
+ c0.162,0.104,0.321,0.213,0.483,0.318c0.156,0.108,0.315,0.213,0.472,0.324L110.287,85.368z M114.474,89.102\r
+ c-0.122-0.136-0.246-0.271-0.371-0.405c-0.127-0.134-0.253-0.27-0.384-0.398c-0.127-0.13-0.26-0.263-0.396-0.39\r
+ c-0.129-0.132-0.266-0.259-0.4-0.386l0.209-4.954c0.14,0.122,0.272,0.247,0.409,0.372c0.134,0.125,0.267,0.253,0.397,0.381\r
+ c0.132,0.124,0.259,0.256,0.386,0.386c0.128,0.129,0.253,0.262,0.378,0.395L114.474,89.102z M117.553,93.673\r
+ c-0.081-0.166-0.165-0.333-0.249-0.499c-0.084-0.165-0.174-0.327-0.266-0.488c-0.089-0.165-0.179-0.321-0.273-0.48\r
+ c-0.096-0.155-0.189-0.313-0.29-0.471l0.25-5.076c0.101,0.152,0.196,0.305,0.292,0.457c0.097,0.151,0.188,0.31,0.278,0.464\r
+ c0.093,0.155,0.181,0.317,0.269,0.477c0.086,0.159,0.17,0.319,0.253,0.483L117.553,93.673z M117.877,87.34\r
+ c-1.487-2.941-3.789-5.408-6.664-7.507c-2.778-2.03-6.109-3.733-9.786-5.205c-3.582-1.431-7.509-2.644-11.58-3.709\r
+ c-3.991-1.047-8.133-1.953-12.229-2.786L76.916,32.65c4.345,0.552,8.74,1.163,12.979,1.873c4.33,0.729,8.517,1.567,12.338,2.568\r
+ c3.932,1.034,7.506,2.247,10.498,3.708c3.104,1.515,5.608,3.315,7.252,5.483L117.877,87.34z M120.055,44.893\r
+ c-0.092-0.116-0.188-0.234-0.28-0.348c-0.098-0.116-0.193-0.232-0.298-0.344c-0.1-0.114-0.202-0.224-0.307-0.334\r
+ c-0.106-0.112-0.215-0.223-0.324-0.331l0.296-5.999c0.11,0.102,0.218,0.203,0.327,0.306c0.105,0.106,0.212,0.21,0.313,0.318\r
+ c0.103,0.104,0.201,0.212,0.299,0.32c0.098,0.112,0.193,0.223,0.285,0.332L120.055,44.893z"/>\r
+ <polygon clip-path="url(#SVGID_2_)" points="121.934,50.121 122.17,45.877 121.936,50.104 "/>\r
+ <path clip-path="url(#SVGID_2_)" d="M122.458,38.716c-0.049-0.343-0.133-0.681-0.252-1.025c-0.117-0.338-0.271-0.68-0.459-1.026\r
+ c-0.188-0.342-0.41-0.687-0.667-1.033l-3.246,62.187c0.22,0.553,0.405,1.098,0.559,1.642c0.156,0.546,0.284,1.086,0.378,1.62\r
+ c0.091,0.543,0.153,1.08,0.185,1.61c0.033,0.536,0.035,1.065,0.007,1.589l1.748-31.874l-1.21,22.047\r
+ c0.024-0.423,0.024-0.849,0.005-1.276c-0.021-0.421-0.063-0.853-0.128-1.281c-0.065-0.432-0.154-0.862-0.265-1.296\r
+ c-0.109-0.433-0.241-0.866-0.396-1.308l2.203-41.563c0.174,0.327,0.323,0.649,0.45,0.969c0.124,0.325,0.229,0.646,0.304,0.966\r
+ c0.079,0.322,0.136,0.643,0.164,0.96c0.028,0.32,0.035,0.637,0.016,0.954l0.083-1.474l0.001-0.016v-0.035l0.003-0.04l0.001-0.032\r
+ l0.35-6.375v0.036l-0.002,0.034l-0.001,0.034l-0.004,0.033l-0.113,2.134l0.333-6.143\r
+ C122.523,39.396,122.508,39.056,122.458,38.716z M119.441,95.504l-0.001,0.05l-0.004,0.048v0.05l-0.004,0.047l-0.293,5.336\r
+ l0.002-0.048l0.006-0.055v-0.05l0.001-0.049L119.441,95.504z M118.821,91.01c0.054,0.172,0.1,0.34,0.146,0.506\r
+ c0.045,0.17,0.089,0.339,0.129,0.504c0.039,0.168,0.075,0.333,0.108,0.499l-0.285,5.25c-0.032-0.17-0.068-0.342-0.104-0.517\r
+ c-0.041-0.173-0.081-0.345-0.126-0.517c-0.048-0.173-0.095-0.346-0.145-0.521c-0.055-0.172-0.107-0.346-0.167-0.517l0.272-5.19\r
+ C118.71,90.674,118.766,90.846,118.821,91.01z M121.627,47.79c-0.036-0.122-0.081-0.244-0.127-0.368\r
+ c-0.045-0.118-0.095-0.242-0.149-0.366c-0.052-0.12-0.108-0.242-0.169-0.366c-0.058-0.123-0.122-0.244-0.189-0.369l0.327-6.164\r
+ c0.067,0.115,0.132,0.23,0.194,0.347c0.06,0.115,0.12,0.23,0.171,0.348c0.055,0.112,0.104,0.228,0.152,0.344\r
+ c0.047,0.114,0.091,0.23,0.129,0.344L121.627,47.79z"/>\r
+ <polygon clip-path="url(#SVGID_2_)" points="121.853,51.578 121.853,51.578 120.71,72.405 "/>\r
+ <path clip-path="url(#SVGID_2_)" fill="#010101" d="M94.333,7.453l-0.067,7.958L94.333,7.453z"/>\r
+ <path clip-path="url(#SVGID_2_)" fill="#010101" d="M92.488,35.968c-1.062,0.879-2.592,1.704-4.465,2.485\r
+ c-1.902,0.794-4.151,1.545-6.609,2.263c-2.489,0.729-5.19,1.421-7.952,2.096l-0.732-28.319c2.897-0.516,5.726-1.042,8.337-1.595\r
+ c2.567-0.54,4.92-1.101,6.909-1.685c1.955-0.581,3.555-1.182,4.66-1.814c1.085-0.621,1.688-1.267,1.697-1.945l0.055-6.825\r
+ c-0.004,0.614-0.652,1.2-1.808,1.769c-1.177,0.581-2.879,1.133-4.952,1.663c-2.116,0.544-4.607,1.061-7.32,1.565\r
+ c-2.753,0.508-5.73,1-8.763,1.483l1.167,42.672c2.826-0.725,5.599-1.473,8.167-2.255c2.535-0.775,4.864-1.585,6.838-2.446\r
+ c1.945-0.846,3.542-1.741,4.649-2.693c1.084-0.938,1.694-1.931,1.703-2.988l0.196-23.987L94.12,33.238\r
+ C94.111,34.201,93.528,35.11,92.488,35.968z M93.813,3.947l0.104-0.104l0.095-0.103l0.084-0.102l0.074-0.104L94.143,7.26\r
+ l-0.075,0.111l-0.081,0.11l-0.096,0.11l-0.105,0.108L93.813,3.947z M92.189,4.954l0.206-0.098l0.198-0.098l0.188-0.1l0.176-0.098\r
+ l-0.021,3.792l-0.177,0.104l-0.187,0.108L92.378,8.67l-0.207,0.103L92.189,4.954z M89.609,5.927\r
+ c0.102-0.033,0.198-0.065,0.298-0.093c0.097-0.032,0.193-0.068,0.287-0.096c0.097-0.032,0.188-0.064,0.28-0.1\r
+ c0.092-0.028,0.184-0.06,0.273-0.096l-0.012,3.856c-0.087,0.036-0.178,0.067-0.27,0.102c-0.092,0.036-0.185,0.069-0.278,0.103\r
+ c-0.093,0.032-0.189,0.066-0.286,0.102c-0.099,0.032-0.197,0.066-0.296,0.098L89.609,5.927z M86.581,6.771\r
+ c0.122-0.028,0.244-0.06,0.365-0.091c0.121-0.032,0.24-0.063,0.357-0.094c0.117-0.032,0.235-0.06,0.354-0.092l0.006,3.908\r
+ c-0.112,0.034-0.23,0.066-0.35,0.1c-0.118,0.032-0.236,0.064-0.355,0.098c-0.12,0.032-0.242,0.064-0.364,0.096\r
+ c-0.122,0.033-0.246,0.066-0.368,0.098l-0.018-3.93C86.332,6.833,86.457,6.803,86.581,6.771z M82.563,7.679\r
+ c0.146-0.032,0.285-0.062,0.428-0.092c0.141-0.028,0.282-0.058,0.423-0.09c0.138-0.028,0.277-0.058,0.416-0.086l0.032,3.96\r
+ c-0.137,0.03-0.275,0.062-0.415,0.094c-0.138,0.032-0.276,0.064-0.418,0.094c-0.141,0.03-0.282,0.062-0.427,0.094\r
+ c-0.142,0.032-0.286,0.062-0.429,0.094L82.13,7.768C82.274,7.738,82.419,7.708,82.563,7.679z M78.017,8.553\r
+ c0.158-0.028,0.315-0.058,0.472-0.085c0.159-0.03,0.314-0.058,0.472-0.088c0.152-0.028,0.309-0.058,0.463-0.086l0.062,4.01\r
+ c-0.155,0.028-0.311,0.06-0.462,0.09c-0.154,0.032-0.312,0.06-0.469,0.089c-0.154,0.032-0.312,0.06-0.468,0.09\r
+ c-0.158,0.032-0.314,0.061-0.475,0.093L77.54,8.64C77.699,8.612,77.859,8.58,78.017,8.553z M72.705,13.558L72.6,9.488\r
+ c0.17-0.028,0.338-0.054,0.505-0.084c0.169-0.028,0.336-0.057,0.502-0.084c0.165-0.03,0.331-0.056,0.497-0.084\r
+ c0.167-0.029,0.333-0.054,0.499-0.083l0.092,4.051c-0.164,0.031-0.329,0.059-0.494,0.089c-0.163,0.028-0.329,0.06-0.496,0.09\r
+ c-0.166,0.028-0.33,0.058-0.498,0.087C73.04,13.5,72.871,13.528,72.705,13.558z M74.989,46.943\r
+ c-0.155,0.042-0.312,0.083-0.467,0.123c-0.157,0.042-0.314,0.083-0.472,0.122c-0.158,0.041-0.314,0.08-0.472,0.12l-0.098-3.645\r
+ c0.161-0.043,0.318-0.079,0.477-0.119c0.158-0.041,0.315-0.08,0.475-0.118c0.156-0.04,0.314-0.078,0.471-0.12\r
+ c0.157-0.036,0.313-0.076,0.471-0.116l0.084,3.634C75.301,46.866,75.145,46.904,74.989,46.943z M79.549,45.705\r
+ c-0.146,0.044-0.293,0.083-0.439,0.128c-0.148,0.042-0.3,0.083-0.446,0.125c-0.148,0.04-0.3,0.082-0.447,0.126l-0.066-3.614\r
+ c0.15-0.04,0.304-0.082,0.451-0.122c0.15-0.042,0.301-0.08,0.448-0.121c0.148-0.04,0.297-0.084,0.443-0.126\r
+ c0.147-0.04,0.293-0.08,0.441-0.119l0.051,3.597C79.841,45.624,79.694,45.666,79.549,45.705z M83.741,44.412\r
+ c-0.132,0.044-0.266,0.088-0.398,0.135c-0.134,0.043-0.268,0.088-0.401,0.13c-0.137,0.042-0.273,0.088-0.409,0.13l-0.039-3.578\r
+ c0.14-0.041,0.276-0.084,0.411-0.125c0.136-0.043,0.269-0.085,0.405-0.129c0.134-0.042,0.269-0.083,0.397-0.126\r
+ c0.135-0.044,0.264-0.086,0.396-0.13l0.028,3.564C84.001,44.326,83.872,44.37,83.741,44.412z M87.406,43.054\r
+ c-0.111,0.046-0.224,0.094-0.339,0.14c-0.114,0.046-0.229,0.094-0.343,0.14c-0.117,0.044-0.234,0.09-0.352,0.136l-0.016-3.538\r
+ c0.117-0.044,0.233-0.088,0.352-0.134c0.116-0.044,0.232-0.089,0.347-0.134c0.114-0.044,0.228-0.088,0.339-0.136\r
+ c0.112-0.042,0.225-0.088,0.334-0.132l0.008,3.518C87.628,42.96,87.518,43.007,87.406,43.054z M90.655,41.471l-0.257,0.148\r
+ l-0.263,0.15c-0.091,0.046-0.183,0.094-0.276,0.144c-0.092,0.05-0.185,0.096-0.277,0.144v-3.491c0.1-0.048,0.19-0.094,0.284-0.142\r
+ c0.093-0.046,0.182-0.096,0.274-0.143l0.267-0.142l0.256-0.144L90.655,41.471z M92.746,39.946l-0.166,0.156l-0.178,0.154\r
+ l-0.187,0.157l-0.195,0.154l0.016-3.448l0.195-0.148l0.191-0.151l0.174-0.148l0.172-0.153L92.746,39.946z M93.895,38.331\r
+ l-0.068,0.167l-0.08,0.162l-0.088,0.162l-0.102,0.165l0.025-3.395l0.101-0.155l0.09-0.161l0.081-0.156l0.069-0.162L93.895,38.331z\r
+ "/>\r
+ <path clip-path="url(#SVGID_2_)" fill="#010101" d="M71.545,7.107c-0.442,0.068-0.883,0.138-1.324,0.209\r
+ c-0.442,0.064-0.887,0.137-1.331,0.205c-0.444,0.07-0.889,0.138-1.333,0.207c-0.445,0.072-0.891,0.14-1.336,0.206\r
+ C62.785,8.468,59.343,9,56.095,9.544c-3.298,0.554-6.404,1.12-9.115,1.714c-2.762,0.604-5.121,1.233-6.878,1.912\r
+ c-1.793,0.691-2.962,1.431-3.281,2.243l-0.014,0.046l3.908,47.337l0.014-0.078c0.246-1.343,1.287-2.547,2.913-3.649\r
+ c1.595-1.083,3.759-2.076,6.298-3.006c2.5-0.921,5.369-1.781,8.424-2.618c3.01-0.822,6.203-1.621,9.396-2.418\r
+ c0.413-0.105,0.827-0.206,1.242-0.312c0.412-0.1,0.829-0.207,1.24-0.31c0.414-0.107,0.825-0.208,1.239-0.313\r
+ c0.409-0.106,0.82-0.21,1.23-0.314L71.545,7.107z M69.087,10.063c0.171-0.027,0.341-0.056,0.513-0.083\r
+ c0.172-0.03,0.338-0.056,0.511-0.084c0.171-0.026,0.34-0.055,0.512-0.083L70.74,13.9c-0.172,0.03-0.34,0.058-0.508,0.088\r
+ c-0.17,0.028-0.341,0.058-0.508,0.086c-0.171,0.028-0.341,0.056-0.51,0.086c-0.169,0.028-0.338,0.058-0.51,0.086l-0.131-4.101\r
+ C68.746,10.117,68.913,10.091,69.087,10.063z M63.517,10.957c0.203-0.03,0.404-0.062,0.604-0.098\r
+ c0.202-0.033,0.407-0.065,0.608-0.097c0.203-0.03,0.406-0.066,0.605-0.098l0.154,4.13c-0.203,0.035-0.4,0.066-0.601,0.102\r
+ c-0.202,0.033-0.403,0.066-0.603,0.101c-0.202,0.036-0.402,0.07-0.602,0.103c-0.2,0.036-0.4,0.071-0.601,0.104l-0.17-4.148\r
+ C63.115,11.023,63.314,10.989,63.517,10.957z M57.522,11.95c0.194-0.034,0.39-0.068,0.588-0.1c0.196-0.035,0.392-0.066,0.59-0.103\r
+ c0.199-0.032,0.396-0.064,0.594-0.098l0.196,4.179c-0.198,0.035-0.395,0.068-0.59,0.102c-0.198,0.038-0.394,0.068-0.588,0.104\r
+ c-0.196,0.036-0.39,0.072-0.585,0.108c-0.193,0.036-0.387,0.068-0.581,0.104l-0.21-4.197C57.13,12.013,57.326,11.981,57.522,11.95\r
+ z M51.82,12.974c0.185-0.036,0.367-0.072,0.551-0.105c0.183-0.036,0.368-0.07,0.552-0.103c0.186-0.033,0.373-0.07,0.558-0.105\r
+ l0.239,4.228c-0.187,0.036-0.37,0.075-0.554,0.108c-0.187,0.04-0.369,0.074-0.549,0.112c-0.184,0.034-0.364,0.071-0.546,0.107\r
+ c-0.179,0.036-0.358,0.077-0.537,0.108l-0.253-4.247C51.461,13.042,51.641,13.005,51.82,12.974z M46.678,14.052\r
+ c0.16-0.04,0.32-0.076,0.482-0.112c0.163-0.036,0.326-0.076,0.49-0.11c0.165-0.039,0.33-0.074,0.497-0.11l0.274,4.282\r
+ c-0.166,0.04-0.328,0.076-0.491,0.116s-0.326,0.076-0.486,0.116c-0.16,0.041-0.32,0.079-0.478,0.118\r
+ c-0.156,0.038-0.314,0.077-0.47,0.117l-0.291-4.306C46.362,14.125,46.52,14.087,46.678,14.052z M42.35,15.208\r
+ c0.128-0.04,0.258-0.082,0.387-0.122c0.131-0.038,0.265-0.08,0.399-0.116c0.136-0.04,0.27-0.081,0.411-0.121l0.312,4.344\r
+ c-0.138,0.044-0.272,0.084-0.406,0.126c-0.132,0.04-0.267,0.084-0.395,0.125c-0.132,0.046-0.26,0.085-0.384,0.13\r
+ c-0.128,0.039-0.252,0.081-0.376,0.123l-0.324-4.372C42.098,15.285,42.222,15.246,42.35,15.208z M39.112,16.464\r
+ c0.086-0.044,0.176-0.088,0.267-0.13c0.092-0.044,0.184-0.088,0.278-0.127c0.098-0.044,0.194-0.088,0.294-0.132l0.342,4.417\r
+ c-0.1,0.043-0.194,0.09-0.291,0.138c-0.094,0.042-0.185,0.09-0.273,0.136c-0.092,0.046-0.181,0.092-0.265,0.138l-0.25,0.14\r
+ L38.862,16.6L39.112,16.464z M37.173,18.013l0.096-0.149l0.113-0.15l0.127-0.14l0.146-0.148l0.366,4.5l-0.144,0.154l-0.126,0.154\r
+ l-0.112,0.156l-0.092,0.159L37.173,18.013z M40.913,59.196l-0.112,0.224l-0.098,0.226l-0.083,0.23l-0.33-4.01l0.082-0.22\r
+ l0.101-0.222l0.114-0.216l0.132-0.213l0.322,3.982L40.913,59.196z M42.856,57.101l-0.255,0.198l-0.243,0.199l-0.227,0.203\r
+ l-0.315-3.942l0.233-0.195l0.244-0.195l0.258-0.191c0.088-0.064,0.176-0.124,0.268-0.188l0.307,3.917\r
+ C43.034,56.969,42.942,57.037,42.856,57.101z M46.058,55.24c-0.124,0.061-0.248,0.121-0.368,0.179\r
+ c-0.12,0.058-0.24,0.12-0.358,0.179c-0.119,0.059-0.234,0.119-0.348,0.179l-0.289-3.882c0.114-0.057,0.233-0.115,0.351-0.174\r
+ c0.118-0.058,0.238-0.116,0.361-0.174c0.122-0.058,0.246-0.114,0.372-0.171c0.124-0.056,0.252-0.114,0.38-0.17l0.277,3.864\r
+ C46.309,55.126,46.182,55.184,46.058,55.24z M50.244,53.56c-0.151,0.056-0.304,0.108-0.454,0.162\r
+ c-0.149,0.054-0.3,0.108-0.446,0.16c-0.147,0.056-0.296,0.112-0.44,0.167l-0.26-3.833c0.148-0.052,0.294-0.108,0.444-0.16\r
+ c0.148-0.052,0.296-0.104,0.448-0.158c0.152-0.05,0.304-0.104,0.46-0.156c0.155-0.052,0.306-0.104,0.462-0.155l0.25,3.813\r
+ C50.55,53.456,50.396,53.505,50.244,53.56z M55.159,52.008c-0.175,0.05-0.344,0.098-0.519,0.152c-0.17,0.05-0.339,0.098-0.51,0.15\r
+ c-0.17,0.049-0.338,0.098-0.506,0.152L53.4,48.674c0.166-0.05,0.338-0.1,0.511-0.15c0.167-0.046,0.339-0.096,0.513-0.146\r
+ c0.173-0.05,0.345-0.094,0.519-0.145c0.175-0.049,0.349-0.097,0.525-0.146l0.212,3.771C55.505,51.91,55.328,51.958,55.159,52.008z\r
+ M60.553,50.543c-0.186,0.051-0.37,0.098-0.554,0.145c-0.184,0.048-0.369,0.094-0.551,0.144c-0.183,0.048-0.365,0.097-0.548,0.146\r
+ l-0.188-3.749c0.182-0.046,0.366-0.091,0.552-0.14c0.184-0.046,0.366-0.092,0.554-0.14c0.185-0.046,0.37-0.093,0.555-0.14\r
+ c0.188-0.047,0.372-0.093,0.562-0.138l0.171,3.734C60.924,50.449,60.738,50.497,60.553,50.543z M66.193,49.137\r
+ c-0.188,0.046-0.377,0.09-0.565,0.136c-0.19,0.046-0.38,0.094-0.568,0.141c-0.188,0.043-0.376,0.094-0.566,0.137l-0.155-3.706\r
+ c0.193-0.044,0.382-0.09,0.573-0.134c0.19-0.045,0.379-0.091,0.571-0.136c0.191-0.048,0.382-0.09,0.57-0.138\r
+ c0.191-0.042,0.381-0.091,0.571-0.133l0.139,3.691C66.574,49.042,66.385,49.089,66.193,49.137z M68.535,43.984\r
+ c-0.34,0.083-0.678,0.163-1.019,0.239c-3.151,0.742-6.307,1.487-9.287,2.247c-3.025,0.773-5.878,1.57-8.382,2.414\r
+ c-2.543,0.856-4.737,1.763-6.395,2.75c-1.694,1.005-2.838,2.096-3.238,3.304l-2.581-31.349c0.454-0.873,1.685-1.669,3.49-2.413\r
+ c1.765-0.726,4.088-1.402,6.775-2.049c2.644-0.634,5.651-1.24,8.834-1.833c3.136-0.584,6.45-1.151,9.762-1.717\r
+ c0.356-0.062,0.713-0.124,1.068-0.184c0.357-0.062,0.715-0.122,1.071-0.188c0.354-0.061,0.712-0.123,1.068-0.183\r
+ c0.354-0.062,0.71-0.122,1.064-0.186l0.822,28.429c-0.339,0.083-0.677,0.162-1.015,0.24c-0.34,0.083-0.681,0.163-1.019,0.243\r
+ C69.216,43.827,68.877,43.906,68.535,43.984z M71.241,47.896c-0.163,0.039-0.32,0.078-0.48,0.117\r
+ c-0.162,0.042-0.321,0.083-0.479,0.12c-0.162,0.04-0.323,0.078-0.483,0.12l-0.118-3.674c0.163-0.038,0.325-0.078,0.485-0.117\r
+ c0.16-0.038,0.321-0.075,0.484-0.114c0.159-0.04,0.32-0.078,0.481-0.116c0.16-0.042,0.322-0.078,0.484-0.116l0.104,3.66\r
+ C71.559,47.816,71.401,47.856,71.241,47.896z"/>\r
+ </g>\r
+</g>\r
+</svg>\r
--- /dev/null
+/* Copyright 2009-2010 Yorba Foundation
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+
+class TrackSeparator : Gtk.HSeparator {
+//this class is referenced in the resource file
+}
+
+class FillmoreTrackView : Gtk.VBox, TrackView {
+ TrackView track_view;
+ public FillmoreTrackView(TrackView track_view) {
+ this.track_view = track_view;
+ track_view.clip_view_added.connect(on_clip_view_added);
+
+ pack_start(track_view, true, true, 0);
+ pack_start(new TrackSeparator(), false, false, 0);
+ can_focus = false;
+ }
+
+ public void move_to_top(ClipView clip_view) {
+ track_view.move_to_top(clip_view);
+ }
+
+ public void resize() {
+ track_view.resize();
+ }
+
+ public Model.Track get_track() {
+ return track_view.get_track();
+ }
+
+ public int get_track_height() {
+ return track_view.get_track_height();
+ }
+
+ void on_clip_view_added(ClipView clip_view) {
+ clip_view_added(clip_view);
+ }
+
+ Gtk.Widget? find_child(double x, double y) {
+ return track_view.find_child(x, y);
+ }
+
+ void select_all() {
+ track_view.select_all();
+ }
+}
+
+public class FillmoreClassFactory : ClassFactory {
+ public override TrackView get_track_view(Model.Track track, TimeLine timeline) {
+ TrackView track_view = base.get_track_view(track, timeline);
+ return new FillmoreTrackView(track_view);
+ }
+}
--- /dev/null
+PROGRAM = ../../$(PROGRAM_NAME)
+GLADE_NAME = ../../libfill.so
+
+all: $(PROGRAM)
+
+USE_MARINA_VAPI=1
+-include ../../configure.mk
+
+VALA_LDFLAGS = -lmarina -L../marina
+VALA_LDFLAGS += `pkg-config --libs $(EXT_PKGS)`
+MARINA_DEPEND = ../marina/libmarina.a
+
+-include sources.mk
+
+ifndef BUILD_DIR
+BUILD_DIR=fillmore
+endif
+
+-include ../../marina.mk
+HEADER_DIRS += ../marina
+
--- /dev/null
+/* Copyright 2009-2010 Yorba Foundation
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+
+public class ProjectProperties : Gtk.Dialog {
+ const int NUMBER_OF_SAMPLES = 4;
+ const long G_USEC_PER_SEC = 1000000;
+
+ TimeVal[] tap_time = new TimeVal[NUMBER_OF_SAMPLES];
+ int tap_index = 0;
+ bool sample_full = false;
+ Gtk.Adjustment tempo_adjustment;
+ Gtk.Adjustment volume_adjustment;
+ Gtk.ComboBox timesignature_combo;
+ Gtk.ToggleButton click_during_play;
+ Gtk.ToggleButton click_during_record;
+
+ public void setup(Model.Project project, Gtk.Builder builder) {
+ tempo_adjustment = (Gtk.Adjustment) builder.get_object("tempo_adjustment");
+ volume_adjustment = (Gtk.Adjustment) builder.get_object("volume_adjustment");
+ timesignature_combo = (Gtk.ComboBox) builder.get_object("timesignature_combo");
+ click_during_play = (Gtk.ToggleButton) builder.get_object("playback");
+ click_during_record = (Gtk.ToggleButton) builder.get_object("record");
+ set_tempo(project.get_bpm());
+ set_volume(project.click_volume);
+ set_during_play(project.click_during_play);
+ set_during_record(project.click_during_record);
+ set_time_signature(project.get_time_signature());
+ }
+
+ public void set_tempo(int tempo) {
+ tempo_adjustment.set_value(tempo);
+ }
+
+ public int get_tempo() {
+ return (int) tempo_adjustment.get_value();
+ }
+
+ public void set_volume(double volume) {
+ volume_adjustment.set_value(volume);
+ }
+
+ public double get_click_volume() {
+ return volume_adjustment.get_value();
+ }
+
+ public Fraction get_time_signature() {
+ return Fraction.from_string(timesignature_combo.get_active_text());
+ }
+
+ void set_time_signature(Fraction time_signature) {
+ string sig = time_signature.to_string();
+
+ Gtk.TreeIter iter;
+ if (timesignature_combo.model.get_iter_first(out iter)) {
+ do {
+ string s;
+ timesignature_combo.model.get(iter, 0, out s, -1);
+ if (s == sig) {
+ timesignature_combo.set_active_iter(iter);
+ return;
+ }
+ } while (timesignature_combo.model.iter_next(ref iter));
+ }
+ }
+
+ void set_during_play(bool active) {
+ click_during_play.active = active;
+ }
+
+ public bool during_play() {
+ return click_during_play.active;
+ }
+
+ void set_during_record(bool active) {
+ click_during_record.active = active;
+ }
+
+ public bool during_record() {
+ return click_during_record.active;
+ }
+
+ public void on_tap() {
+ TimeVal time_val = TimeVal();
+ time_val.get_current_time();
+ tap_time[tap_index] = time_val;
+ ++tap_index;
+ if (tap_index == NUMBER_OF_SAMPLES) {
+ sample_full = true;
+ tap_index = 0;
+ }
+ calculate_bpm();
+ }
+
+ void calculate_bpm() {
+ int number_of_samples = sample_full ? NUMBER_OF_SAMPLES : tap_index;
+ if (number_of_samples < 2) {
+ return;
+ }
+
+ int start_index = sample_full ? tap_index : 0;
+
+ double delta_sum = 0;
+ for (int i = 0; i < number_of_samples - 1; ++i) {
+ int current_index = (i + start_index) % NUMBER_OF_SAMPLES;
+ int next_index = (current_index + 1) % NUMBER_OF_SAMPLES;
+ long difference =
+ (tap_time[next_index].tv_sec - tap_time[current_index].tv_sec) * G_USEC_PER_SEC +
+ tap_time[next_index].tv_usec - tap_time[current_index].tv_usec;
+
+ if (difference > 5 * G_USEC_PER_SEC) {
+ // User waited too long. Save the time and start over
+ tap_time[0] = tap_time[tap_index - 1];
+ sample_full = false;
+ tap_index = 1;
+ return;
+ }
+ delta_sum += difference;
+ }
+ double average = delta_sum/(number_of_samples - 1)/G_USEC_PER_SEC;
+ tempo_adjustment.set_value((int)(60.0/average));
+ }
+}
--- /dev/null
+/* Demo Recorder for MAEMO 5
+* Copyright (C) 2010 Dru Moore <usr@dru-id.co.uk>
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License version 2,
+* or (at your option) any later version, as published by the Free
+* Software Foundation
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details
+*
+* You should have received a copy of the GNU General Public
+* License along with this program; if not, write to the
+* Free Software Foundation, Inc.,
+* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+namespace IdWorks {
+
+public class VolumeAndPanPopUp : Hildon.Dialog {
+
+ Gtk.HScale volume_slider;
+ Gtk.HScale panorama_slider;
+
+ public signal void volume_updated(double volume);
+ public signal void panorama_updated(double panorama);
+
+ public VolumeAndPanPopUp(Gtk.Widget parent, string title) {
+ this.set_title(title);
+ this.set_parent(parent);
+
+ this.set_default_response(Gtk.ResponseType.ACCEPT);
+ this.add_button(Gtk.STOCK_CLOSE, Gtk.ResponseType.ACCEPT);
+
+ Gtk.VBox control_area = (Gtk.VBox)this.get_content_area();
+
+ Gtk.HBox volume_bar = new Gtk.HBox(false, 2);
+ Gtk.Label volume_label = new Gtk.Label("Volume");
+ volume_bar.pack_start(volume_label, false, false , 2);
+ volume_slider = new Gtk.HScale.with_range(0.0, 10.0, 0.05);
+ volume_slider.set_value_pos(Gtk.PositionType.LEFT);
+ volume_slider.value_changed.connect((s) => {volume_updated(s.get_value());});
+ volume_bar.pack_start(volume_slider, true, true , 2);
+
+ Gtk.HBox panorama_bar = new Gtk.HBox(false, 2);
+ Gtk.Label panorama_label = new Gtk.Label("Pan");
+ panorama_bar.pack_start(panorama_label, false, false , 2);
+ panorama_slider = new Gtk.HScale.with_range(-1.0, 1.0, 0.05);
+ panorama_slider.set_value_pos(Gtk.PositionType.LEFT);
+ panorama_slider.value_changed.connect((s) => {panorama_updated(s.get_value());});
+ panorama_bar.pack_start(panorama_slider, true, true , 2);
+
+ control_area.pack_start(volume_bar, true, true , 2);
+ control_area.pack_start(panorama_bar, true, true , 2);
+ this.show_all();
+ }
+
+ public void set_volume(double volume) {
+ volume_slider.set_value(volume);
+ }
+
+ public void set_panorama(double panorama) {
+ panorama_slider.set_value(panorama);
+ }
+
+}
+
+}
--- /dev/null
+/* Copyright 2009-2010 Yorba Foundation
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+
+using Logging;
+namespace Model {
+
+class RecordFetcherCompletion : FetcherCompletion {
+ Track track;
+ Project project;
+ int64 position;
+
+ public RecordFetcherCompletion(Project project, Track track, int64 position) {
+ base();
+ this.track = track;
+ this.project = project;
+ this.position = position;
+ }
+
+ public override void complete(Fetcher fetch) {
+ base.complete(fetch);
+ Clip the_clip = new Clip(fetch.clipfile, MediaType.AUDIO,
+ isolate_filename(fetch.clipfile.filename), 0, 0, fetch.clipfile.length, false);
+ project.undo_manager.start_transaction("Record");
+ track.append_at_time(the_clip, position, true);
+ project.undo_manager.end_transaction("Record");
+ }
+}
+
+class AudioProject : Project {
+ bool has_been_saved;
+
+ public AudioProject(string? filename) throws Error {
+ base(filename, false);
+ // TODO: When vala supports throwing from base, remove this check
+ if (this != null) {
+ has_been_saved = filename != null;
+ if (!has_been_saved) {
+ project_file = generate_filename();
+ }
+ media_engine.callback_pulse.connect(media_engine.on_callback_pulse);
+ media_engine.record_completed.connect(on_record_completed);
+ }
+ }
+
+ public override TimeCode get_clip_time(ClipFile f) {
+ TimeCode t = {};
+
+ t.get_from_length(f.length);
+ return t;
+ }
+
+ public override string? get_project_file() {
+ if (!has_been_saved) {
+ return null;
+ } else {
+ return base.get_project_file();
+ }
+ }
+
+ string generate_filename() {
+ Time now = Time.local(time_t());
+ string timestring = now.to_string();
+ timestring = timestring.replace(":", "_");
+ string pathname = Path.build_filename(GLib.Environment.get_home_dir(), ".fillmore",
+ timestring);
+ GLib.DirUtils.create(pathname, 0777);
+ string filename = "%s.%s".printf(timestring, "fill");
+ return Path.build_filename(pathname, filename);
+ }
+
+ public override string get_app_name() {
+ return Recorder.NAME;
+ }
+
+ public override void add_track(Track track) {
+ if (track.media_type() == MediaType.VIDEO) {
+ track.hide();
+ inactive_tracks.add(track);
+ return;
+ }
+
+ base.add_track(track);
+ }
+
+ public void record(AudioTrack track) {
+ media_engine.record(track);
+ }
+
+ public void on_record_completed() {
+ emit(this, Facility.SIGNAL_HANDLERS, Level.INFO, "on_record_completed");
+ try {
+ create_clip_fetcher(new Model.RecordFetcherCompletion(this, media_engine.record_track,
+ media_engine.record_region.start), media_engine.record_region.clipfile.filename);
+ } catch (Error e) {
+ error_occurred("Could not complete recording", e.message);
+ }
+ }
+
+ public override void load(string? filename) {
+ has_been_saved = filename != null;
+ if (!has_been_saved) {
+ project_file = generate_filename();
+ }
+ base.load(filename);
+ }
+
+ public override void save(string? filename) {
+ if (!has_been_saved && filename != null) {
+ move_audio_files(filename);
+ GLib.FileUtils.remove(project_file);
+ GLib.DirUtils.remove(Path.get_dirname(project_file));
+ }
+
+ base.save(filename);
+ has_been_saved = true;
+ }
+
+ void move_audio_files(string filename) {
+ string audio_path = get_audio_path();
+ string destination_path = Path.build_filename(Path.get_dirname(filename), "audio files");
+ GLib.DirUtils.create(destination_path, 0777);
+ GLib.Dir dir;
+ try {
+ dir = Dir.open(audio_path);
+ } catch (FileError e) {
+ return;
+ }
+
+ // First, move all of the files over, even if they aren't currently in the project
+ weak string? base_name = null;
+ do {
+ base_name = dir.read_name();
+ string destination = Path.build_filename(destination_path, base_name);
+ FileUtils.rename(Path.build_filename(audio_path, base_name), destination);
+ } while (base_name != null);
+
+ // Next, update the model so that the project file is saved properly
+ foreach (ClipFile clip_file in clipfiles) {
+ if (Path.get_dirname(clip_file.filename) == audio_path) {
+ string file_name = Path.get_basename(clip_file.filename);
+ string destination = Path.build_filename(destination_path, file_name);
+ clip_file.filename = destination;
+ }
+ }
+
+ GLib.DirUtils.remove(audio_path);
+ }
+
+}
+}
--- /dev/null
+/* Copyright 2009-2010 Yorba Foundation
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+
+using Logging;
+
+extern const string _PROGRAM_NAME;
+bool do_print_graph = false;
+int debug_level;
+
+const OptionEntry[] options = {
+ { "print-graph", 0, 0, OptionArg.NONE, &do_print_graph,
+ "Show Print Graph in help menu", null },
+ { "debug-level", 0, 0, OptionArg.INT, &debug_level,
+ "Control amount of diagnostic information",
+ "[0 (minimal),5 (maximum)]" },
+ { null }
+};
+
+class Recorder : Gtk.Window, TransportDelegate {
+ public Model.AudioProject project;
+ public TimeLine timeline;
+ View.ClickTrack click_track;
+ HeaderArea header_area;
+ ClipLibraryView library;
+ Model.TimeSystem provider;
+ Gtk.Adjustment h_adjustment;
+ Gtk.HPaned timeline_library_pane;
+ Gtk.ScrolledWindow library_scrolled;
+ Gtk.ScrolledWindow timeline_scrolled;
+ int cursor_pos = -1;
+ int64 center_time = -1;
+ bool loading;
+ const int scroll_speed = 8;
+
+ Gtk.ActionGroup main_group;
+
+ Gtk.ToggleButton play_button;
+ Gtk.ToggleButton record_button;
+ Gtk.Button addnew_button;
+ Gtk.Button rewind_button;
+ Gtk.Button forward_button;
+ Gtk.Button zoomin_button;
+ Gtk.Button zoomout_button;
+ Gtk.Button volume_button;
+
+ Hildon.PannableArea scrollwin;
+ int scrollwin_pos_y = 0;
+
+ Gtk.UIManager manager;
+ // TODO: Have a MediaExportConnector that extends MediaConnector rather than concrete type.
+ View.OggVorbisExport audio_export;
+ View.AudioOutput audio_output;
+ Gee.ArrayList<string> load_errors;
+
+ public const string NAME = "Fillmore";
+ const Gtk.ActionEntry[] entries = {
+ { "Project", null, "_Project", null, null, null },
+ { "Open", Gtk.STOCK_OPEN, "_Open...", null, "Open a project", on_project_open },
+ { "NewProject", Gtk.STOCK_NEW, "_New", null, "Create new project", on_project_new },
+ { "Save", Gtk.STOCK_SAVE, "_Save", "<Control>S", "Save project", on_project_save },
+ { "SaveAs", Gtk.STOCK_SAVE_AS, "Save _As...", "<Control><Shift>S",
+ "Save project with new name", on_project_save_as },
+ { "Export", Gtk.STOCK_JUMP_TO, "_Export...", "<Control>E", null, on_export },
+ { "Settings", Gtk.STOCK_PROPERTIES, "Se_ttings", "<Control><Alt>Return", null, on_properties },
+ { "Quit", Gtk.STOCK_QUIT, null, null, null, on_quit },
+
+ { "Edit", null, "_Edit", null, null, null },
+ { "Undo", Gtk.STOCK_UNDO, null, "<Control>Z", null, on_undo },
+ { "Cut", Gtk.STOCK_CUT, null, null, null, on_cut },
+ { "Copy", Gtk.STOCK_COPY, null, null, null, on_copy },
+ { "Paste", Gtk.STOCK_PASTE, null, null, null, on_paste },
+ { "Delete", Gtk.STOCK_DELETE, null, "Delete", null, on_delete },
+ { "SelectAll", Gtk.STOCK_SELECT_ALL, null, "<Control>A", null, on_select_all },
+ { "SplitAtPlayhead", null, "_Split at Playhead", "<Control>P", null, on_split_at_playhead },
+ { "TrimToPlayhead", null, "Trim to Play_head", "<Control>H", null, on_trim_to_playhead },
+ { "ClipProperties", Gtk.STOCK_PROPERTIES, "Properti_es", "<Alt>Return",
+ null, on_clip_properties },
+
+ { "View", null, "_View", null, null, null },
+ { "ZoomIn", Gtk.STOCK_ZOOM_IN, "Zoom _In", "<Control>plus", null, on_zoom_in },
+ { "ZoomOut", Gtk.STOCK_ZOOM_OUT, "Zoom _Out", "<Control>minus", null, on_zoom_out },
+ { "ZoomProject", null, "Fit to _Window", "<Shift>Z", null, on_zoom_to_project },
+
+ { "Track", null, "_Track", null, null, null },
+ { "NewTrack", Gtk.STOCK_ADD, "_New...", "<Control><Shift>N",
+ "Create new track", on_track_new },
+ { "Rename", null, "_Rename...", null, "Rename Track", on_track_rename },
+ { "DeleteTrack", null, "_Delete", "<Control><Shift>Delete",
+ "Delete track", on_track_remove },
+ { "MoveTrackUp", null, "Move Track Up", "<Control>Up", null, on_track_move_up },
+ { "MoveTrackDown", null, "Move Track Down", "<Control>Down", null, on_track_move_down },
+ { "ScrollTracksUp", null, "Scroll Tracks Up", "<Shift>Up", null, on_tracks_scroll_up },
+ { "ScrollTracksDown", null, "Scroll Tracks Down", "<Shift>Down", null, on_tracks_scroll_down },
+
+
+ { "Help", null, "_Help", null, null, null },
+ { "Contents", Gtk.STOCK_HELP, "_Contents", "F1",
+ "More information on Fillmore", on_help_contents},
+ { "About", Gtk.STOCK_ABOUT, null, null, null, on_about },
+ { "SaveGraph", null, "Save _Graph", null, "Save graph", on_save_graph },
+
+ { "Rewind", Gtk.STOCK_MEDIA_PREVIOUS, "Rewind", "Home", "Go to beginning", on_rewind },
+ { "End", Gtk.STOCK_MEDIA_NEXT, "End", "End", "Go to end", on_end }
+ };
+
+ const Gtk.ToggleActionEntry[] toggle_entries = {
+ { "Play", Gtk.STOCK_MEDIA_PLAY, null, "space", "Play", on_play },
+ { "Record", Gtk.STOCK_MEDIA_RECORD, null, "r", "Record", on_record },
+ { "Library", null, "_Library", "F9", null, on_view_library, false },
+ { "Snap", null, "_Snap to Clip Edges", null, null, on_snap, false }
+ };
+
+ const string ui = """
+<ui>
+ <menubar name="MenuBar">
+ <menu name="ProjectMenu" action="Project">
+ <menuitem name="New" action="NewProject"/>
+ <menuitem name="Open" action="Open"/>
+ <menuitem name="Save" action="Save"/>
+ <menuitem name="SaveAs" action="SaveAs"/>
+ <separator/>
+ <menuitem name="Export" action="Export"/>
+ <separator/>
+ <menuitem name="Property" action="Settings"/>
+ <separator/>
+ <menuitem name="Quit" action="Quit"/>
+ </menu>
+ <menu name="EditMenu" action="Edit">
+ <menuitem name="EditUndo" action="Undo"/>
+ <separator/>
+ <menuitem name="EditCut" action="Cut"/>
+ <menuitem name="EditCopy" action="Copy"/>
+ <menuitem name="EditPaste" action="Paste"/>
+ <menuitem name="EditDelete" action="Delete"/>
+ <separator/>
+ <menuitem name="EditSelectAll" action="SelectAll"/>
+ <separator/>
+ <menuitem name="ClipSplitAtPlayhead" action="SplitAtPlayhead"/>
+ <menuitem name="ClipTrimToPlayhead" action="TrimToPlayhead"/>
+ <separator/>
+ <menuitem name="ClipViewProperties" action="ClipProperties"/>
+ </menu>
+ <menu name="ViewMenu" action="View">
+ <menuitem name="ViewLibrary" action="Library"/>
+ <separator/>
+ <menuitem name="ViewZoomIn" action="ZoomIn"/>
+ <menuitem name="ViewZoomOut" action="ZoomOut"/>
+ <menuitem name="ViewZoomProject" action="ZoomProject"/>
+ <separator/>
+ <menuitem name="Snap" action="Snap"/>
+ </menu>
+ <menu name="TrackMenu" action="Track">
+ <menuitem name="TrackNew" action="NewTrack"/>
+ <menuitem name="TrackRename" action="Rename"/>
+ <menuitem name="TrackDelete" action="DeleteTrack"/>
+ <separator/>
+ <menuitem name="TrackMoveUp" action="MoveTrackUp"/>
+ <menuitem name="TrackMoveDown" action="MoveTrackDown"/>
+ <menuitem name="TrackScrollUp" action="ScrollTracksUp"/>
+ <menuitem name="TrackScrollDown" action="ScrollTracksDown"/>
+ </menu>
+ <menu name="HelpMenu" action="Help">
+ <menuitem name="HelpContents" action="Contents"/>
+ <separator/>
+ <menuitem name="HelpAbout" action="About"/>
+ <menuitem name="SaveGraph" action="SaveGraph"/>
+ </menu>
+ </menubar>
+ <popup name="ClipContextMenu">
+ <menuitem name="Cut" action="Cut"/>
+ <menuitem name="Copy" action="Copy"/>
+ <separator/>
+ <menuitem name="ClipContextProperties" action="ClipProperties"/>
+ </popup>
+ <popup name="LibraryContextMenu">
+ <menuitem name="ClipContextProperties" action="ClipProperties"/>
+ </popup>
+ <toolbar name="Toolbar">
+ <toolitem name="New" action="NewTrack"/>
+ <separator/>
+ <toolitem name="Rewind" action="Rewind"/>
+ <toolitem name="End" action="End"/>
+ <toolitem name="Play" action="Play"/>
+ <toolitem name="Record" action="Record"/>
+ </toolbar>
+ <accelerator name="Rewind" action="Rewind"/>
+ <accelerator name="End" action="End"/>
+ <accelerator name="Play" action="Play"/>
+ <accelerator name="Record" action="Record"/>
+</ui>
+""";
+
+ const DialogUtils.filter_description_struct[] filters = {
+ { "Fillmore Project Files", Model.Project.FILLMORE_FILE_EXTENSION },
+ { "Lombard Project Files", Model.Project.LOMBARD_FILE_EXTENSION }
+ };
+
+ const DialogUtils.filter_description_struct[] export_filters = {
+ { "Ogg Files", "ogg" }
+ };
+
+ public signal void finished_closing(bool project_did_close);
+
+ public Recorder(string? project_file) throws Error {
+ ClassFactory.set_transport_delegate(this);
+ GLib.DirUtils.create(get_fillmore_directory(), 0777);
+ load_errors = new Gee.ArrayList<string>();
+ try {
+ set_icon_from_file(
+ AppDirs.get_resources_dir().get_child("fillmore_icon.png").get_path());
+ } catch (GLib.Error e) {
+ warning("Could not load application icon: %s", e.message);
+ }
+
+
+ project = new Model.AudioProject(project_file);
+ project.snap_to_clip = false;
+ provider = new Model.BarBeatTimeSystem(project);
+
+ project.media_engine.callback_pulse.connect(on_callback_pulse);
+ project.media_engine.post_export.connect(on_post_export);
+ project.media_engine.position_changed.connect(on_position_changed);
+
+ project.load_error.connect(on_load_error);
+ project.name_changed.connect(on_name_changed);
+ project.undo_manager.dirty_changed.connect(on_dirty_changed);
+ project.undo_manager.undo_changed.connect(on_undo_changed);
+ project.error_occurred.connect(on_error_occurred);
+ project.playstate_changed.connect(on_playstate_changed);
+ project.track_added.connect(on_track_added);
+ project.track_removed.connect(on_track_removed);
+ project.load_complete.connect(on_load_complete);
+ project.closed.connect(on_project_close);
+
+ audio_output = new View.AudioOutput(project.media_engine.get_project_audio_caps());
+ project.media_engine.connect_output(audio_output);
+ click_track = new View.ClickTrack(project.media_engine, project);
+ set_position(Gtk.WindowPosition.CENTER);
+ title = "Fillmore";
+ set_default_size(800, 1200);
+
+ main_group = new Gtk.ActionGroup("main");
+ main_group.add_actions(entries, this);
+ main_group.add_toggle_actions(toggle_entries, this);
+
+ manager = new Gtk.UIManager();
+ manager.insert_action_group(main_group, 0);
+ try {
+ manager.add_ui_from_string(ui, -1);
+ } catch (Error e) { error("%s", e.message); }
+
+ Gtk.MenuBar menubar = (Gtk.MenuBar) get_widget(manager, "/MenuBar");
+ Gtk.Toolbar toolbar = (Gtk.Toolbar) get_widget(manager, "/Toolbar");
+ //play_button = (Gtk.ToggleToolButton) get_widget(manager, "/Toolbar/Play");
+ //record_button = (Gtk.ToggleToolButton) get_widget(manager, "/Toolbar/Record");
+ //rewind_button = (Gtk.ToolButton) get_widget(manager, "/Toolbar/Rewind");
+ //forward_button = (Gtk.ToolButton) get_widget(manager, "/Toolbar/End");
+ //addnew_button = (Gtk.ToolButton) get_widget(manager, "/Toolbar/New");
+ on_undo_changed(false);
+
+ library = new ClipLibraryView(project, provider, null, Gdk.DragAction.COPY);
+ library.selection_changed.connect(on_library_selection_changed);
+ library.drag_data_received.connect(on_drag_data_received);
+
+ timeline = new TimeLine(project, provider, Gdk.DragAction.COPY);
+ timeline.track_changed.connect(on_track_changed);
+ timeline.drag_data_received.connect(on_drag_data_received);
+ timeline.size_allocate.connect(on_timeline_size_allocate);
+ timeline.selection_changed.connect(on_timeline_selection_changed);
+
+ ClipView.context_menu = (Gtk.Menu) manager.get_widget("/ClipContextMenu");
+ ClipLibraryView.context_menu = (Gtk.Menu) manager.get_widget("/LibraryContextMenu");
+ update_menu();
+
+ library_scrolled = new Gtk.ScrolledWindow(null, null);
+ library_scrolled.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC);
+ library_scrolled.add_with_viewport(library);
+
+ Gtk.HBox hbox = new Gtk.HBox(false, 0);
+ header_area = new HeaderArea(this, provider, TimeLine.RULER_HEIGHT);
+ hbox.pack_start(header_area, false, false, 0);
+
+
+ timeline_scrolled = new Gtk.ScrolledWindow(null, null);
+ timeline_scrolled.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER);
+ timeline_scrolled.add_with_viewport(timeline);
+ hbox.pack_start(timeline_scrolled, true, true, 0);
+ h_adjustment = timeline_scrolled.get_hadjustment();
+
+
+
+ Gtk.HButtonBox buttons = new Gtk.HButtonBox();
+ addnew_button = new Gtk.Button(); //.with_label("Pl");
+ addnew_button.set_image(new Gtk.Image.from_icon_name("general_add", Gtk.IconSize.BUTTON));
+ addnew_button.clicked.connect(on_track_new);
+ buttons.add(addnew_button);
+ play_button = new Gtk.ToggleButton(); //.with_label("Pl");
+ play_button.set_image(new Gtk.Image.from_icon_name("camera_playback", Gtk.IconSize.BUTTON));
+ play_button.toggled.connect(on_play);
+ buttons.add(play_button);
+ record_button = new Gtk.ToggleButton(); //.with_label("Re");
+ record_button.set_image(new Gtk.Image.from_icon_name("camera_video_recording", Gtk.IconSize.BUTTON));
+ record_button.toggled.connect(on_record);
+ buttons.add(record_button);
+ rewind_button = new Gtk.Button(); //.with_label("Re");
+ rewind_button.set_image(new Gtk.Image.from_icon_name("pdf_viewer_first_page", Gtk.IconSize.BUTTON));
+ rewind_button.clicked.connect(on_rewind);
+ buttons.add(rewind_button);
+ forward_button = new Gtk.Button(); //.with_label("Re");
+ forward_button.set_image(new Gtk.Image.from_icon_name("pdf_viewer_last_page", Gtk.IconSize.BUTTON));
+ forward_button.clicked.connect(on_end);
+ buttons.add(forward_button);
+ zoomin_button = new Gtk.Button(); //.with_label("Re");
+ zoomin_button.set_image(new Gtk.Image.from_icon_name("pdf_zoomin", Gtk.IconSize.BUTTON));
+ zoomin_button.clicked.connect(on_zoom_in);
+ buttons.add(zoomin_button);
+ zoomout_button = new Gtk.Button(); //.with_label("Re");
+ zoomout_button.set_image(new Gtk.Image.from_icon_name("pdf_zoomout", Gtk.IconSize.BUTTON));
+ zoomout_button.clicked.connect(on_zoom_out);
+ buttons.add(zoomout_button);
+ volume_button = new Gtk.Button(); //.with_label("Re");
+ volume_button.set_image(new Gtk.Image.from_icon_name("statusarea_volumelevel4", Gtk.IconSize.BUTTON));
+ volume_button.clicked.connect(on_volume);
+ buttons.add(volume_button);
+
+
+ Gtk.VBox vbox = new Gtk.VBox(false, 0);
+ vbox.pack_start(menubar, false, false, 0);
+ //vbox.pack_start(toolbar, false, false, 0);
+ vbox.pack_start(buttons, false, false, 0);
+
+ Gtk.VBox main_view = new Gtk.VBox(false, 0);
+
+ timeline_library_pane = new Gtk.HPaned();
+ timeline_library_pane.set_position(project.library_width);
+ timeline_library_pane.add1(hbox);
+ timeline_library_pane.child1_resize = 1;
+ timeline_library_pane.add2(library_scrolled);
+ timeline_library_pane.child2_resize = 0;
+ timeline_library_pane.child1.size_allocate.connect(on_library_size_allocate);
+
+
+ main_view.pack_start(timeline_library_pane, true, true, 0);
+
+
+ scrollwin = new Hildon.PannableArea();
+ scrollwin.add_with_viewport(main_view);
+ vbox.add(scrollwin);
+
+ add(vbox);
+ // toggle the library pane off.
+ on_view_library();
+
+ Gtk.MenuItem? save_graph = (Gtk.MenuItem?)
+ get_widget(manager, "/MenuBar/HelpMenu/SaveGraph");
+
+ if (!do_print_graph && save_graph != null) {
+ save_graph.destroy();
+ }
+
+ add_accel_group(manager.get_accel_group());
+ timeline.grab_focus();
+ delete_event.connect(on_delete_event);
+ loading = true;
+ project.load(project_file);
+ if (project_file == null) {
+ default_track_set();
+ loading = false;
+ }
+ project.media_engine.pipeline.set_state(Gst.State.PAUSED);
+ }
+
+ void default_track_set() {
+ project.add_track(new Model.AudioTrack(project, get_default_track_name()));
+ project.tracks[0].set_selected(true);
+ }
+
+ static int default_track_number_compare(void *a, void *b) {
+ string* s1 = (string *) a;
+ string* s2 = (string *) b;
+ int i = -1;
+ int j = -1;
+ s1->scanf("track %d", &i);
+ s2->scanf("track %d", &j);
+ assert(i > 0);
+ assert(j > 0);
+ if (i == j) {
+ return 0;
+ } else if (i < j) {
+ return -1;
+ } else {
+ return 1;
+ }
+ }
+
+ public string get_default_track_name() {
+ List<string> default_track_names = new List<string>();
+ foreach(Model.Track track in project.tracks) {
+ if (track.display_name.has_prefix("track ")) {
+ default_track_names.append(track.display_name);
+ }
+ }
+ default_track_names.sort(default_track_number_compare);
+
+ int i = 1;
+ foreach(string s in default_track_names) {
+ string track_name = "track %d".printf(i);
+ if (s != track_name) {
+ return track_name;
+ }
+ ++i;
+ }
+ return "track %d".printf(i);
+ }
+
+ Gtk.Widget get_widget(Gtk.UIManager manager, string name) {
+ Gtk.Widget widget = manager.get_widget(name);
+ if (widget == null)
+ error("can't find widget");
+ return widget;
+ }
+
+ void on_track_move_up() {
+ int index = -1;
+ int position = 0;
+ int track_ct = project.tracks.size;
+ if (0 < track_ct) {
+ foreach(Model.Track track in project.tracks) {
+ ++index;
+ if (selected_track() == track) {
+ position = index;
+ }
+ }
+ if (0 < position) {
+ Model.AudioTrack track = selected_track() as Model.AudioTrack;
+ project.tracks.remove(track);
+ project.tracks.insert(position - 1, track);
+ }
+ }
+ }
+ void on_track_move_down() {
+ // if current track < position last
+ int index = -1;
+ int position = 0;
+ int track_ct = project.tracks.size;
+ if (0 < track_ct) {
+ foreach(Model.Track track in project.tracks) {
+ ++index;
+ if (selected_track() == track) {
+ position = index;
+ }
+ }
+ if (track_ct - 1 > position) {
+ Model.AudioTrack audio_track = selected_track() as Model.AudioTrack;
+ project.tracks.remove(audio_track);
+ project.tracks.insert(position + 1, audio_track);
+ }
+ }
+ }
+ void on_tracks_scroll_up() {
+ // if track count > 4 = Visible tracks
+ /*int track_ct = project.tracks.size;
+ if (4 < track_ct) {
+ // take bottom track and move to start
+ Model.AudioTrack track = project.tracks.get(track_ct - 1) as Model.AudioTrack;
+ project.tracks.remove(track);
+ project.tracks.insert(0, track);
+ }*/
+ scrollwin_pos_y -= scrollwin_pos_y < 4 ? 0 : 64;
+ scrollwin.scroll_to(0, scrollwin_pos_y);
+ }
+ void on_tracks_scroll_down() {
+ // if track count > 4 = visible tracks
+ /*int track_ct = project.tracks.size;
+ if (4 < track_ct) {
+ // take top track and move to end
+ Model.AudioTrack track = project.tracks.get(0) as Model.AudioTrack;
+ project.tracks.remove(track);
+ project.tracks.add(track);
+ }*/
+ scrollwin_pos_y += 64;
+ scrollwin.scroll_to(0, scrollwin_pos_y);
+ }
+
+ void set_sensitive_group(Gtk.ActionGroup group, string group_path, bool sensitive) {
+ Gtk.Action action = group.get_action(group_path);
+ action.set_sensitive(sensitive);
+ }
+
+ void on_track_changed() {
+ emit(this, Facility.SIGNAL_HANDLERS, Level.INFO, "on_track_changed");
+ update_menu();
+ }
+
+ void on_position_changed() {
+ emit(this, Facility.SIGNAL_HANDLERS, Level.INFO, "on_position_changed");
+ update_menu();
+ }
+
+ void on_track_added(Model.Track track) {
+ emit(this, Facility.SIGNAL_HANDLERS, Level.INFO, "on_track_added");
+ update_menu();
+ track.clip_added.connect(on_clip_added);
+ track.clip_removed.connect(on_clip_removed);
+ track.track_selection_changed.connect(on_track_selection_changed);
+ }
+
+ void on_track_removed(Model.Track unused) {
+ emit(this, Facility.SIGNAL_HANDLERS, Level.INFO, "on_track_removed");
+ update_menu();
+ }
+
+ void on_clip_added(Model.Clip clip) {
+ emit(this, Facility.SIGNAL_HANDLERS, Level.INFO, "on_clip_added");
+ clip.moved.connect(on_clip_moved);
+ update_menu();
+ }
+
+ void on_clip_removed(Model.Clip clip) {
+ emit(this, Facility.SIGNAL_HANDLERS, Level.INFO, "on_clip_removed");
+ clip.moved.disconnect(on_clip_moved);
+ update_menu();
+ }
+
+ void on_track_selection_changed(Model.Track track) {
+ if (track.get_is_selected()) {
+ foreach (Model.Track t in project.tracks) {
+ if (t != track) {
+ t.set_selected(false);
+ }
+ }
+ }
+ }
+
+ void on_clip_moved(Model.Clip clip) {
+ emit(this, Facility.SIGNAL_HANDLERS, Level.INFO, "on_clip_moved");
+ update_menu();
+ }
+
+ void on_drag_data_received(Gtk.Widget w, Gdk.DragContext context, int x, int y,
+ Gtk.SelectionData selection_data, uint drag_info, uint time) {
+ present();
+ }
+
+ void update_menu() {
+ bool library_selected = library.has_selection();
+ bool selected = timeline.is_clip_selected();
+ bool playhead_on_clip = project.playhead_on_clip();
+ int number_of_tracks = project.tracks.size;
+ bool is_stopped = is_stopped();
+ bool one_selected = false;
+ if (library_selected) {
+ one_selected = library.get_selected_files().size == 1;
+ } else if (selected) {
+ one_selected = timeline.selected_clips.size == 1;
+ }
+
+ // File menu
+ set_sensitive_group(main_group, "NewProject", is_stopped);
+ set_sensitive_group(main_group, "Open", is_stopped);
+ set_sensitive_group(main_group, "Save", is_stopped);
+ set_sensitive_group(main_group, "SaveAs", is_stopped);
+ set_sensitive_group(main_group, "Settings", is_stopped);
+ set_sensitive_group(main_group, "Export", project.can_export());
+ set_sensitive_group(main_group, "Quit", !project.transport_is_recording());
+
+ // Edit menu
+ set_sensitive_group(main_group, "Undo", is_stopped && project.undo_manager.can_undo);
+ set_sensitive_group(main_group, "Copy", is_stopped && selected);
+ set_sensitive_group(main_group, "Cut", is_stopped && selected);
+ set_sensitive_group(main_group, "Paste", timeline.clipboard.clips.size != 0 && is_stopped);
+ set_sensitive_group(main_group, "Delete", (selected || library_selected) && is_stopped);
+ set_sensitive_group(main_group, "SplitAtPlayhead",
+ selected && playhead_on_clip && is_stopped);
+ set_sensitive_group(main_group, "TrimToPlayhead",
+ selected && playhead_on_clip && is_stopped);
+ set_sensitive_group(main_group, "ClipProperties", one_selected);
+
+ // View menu
+ set_sensitive_group(main_group, "ZoomProject", project.get_length() != 0);
+
+ // Track menu
+ set_sensitive_group(main_group, "Rename", number_of_tracks > 0 && is_stopped);
+ set_sensitive_group(main_group, "DeleteTrack", number_of_tracks > 0 && is_stopped);
+ set_sensitive_group(main_group, "NewTrack", is_stopped);
+
+ // toolbar
+ set_sensitive_group(main_group, "Play", true);
+ set_sensitive_group(main_group, "Record", number_of_tracks > 0 && is_stopped);
+ }
+
+ public Model.Track? selected_track() {
+ foreach (Model.Track track in project.tracks) {
+ if (track.get_is_selected()) {
+ return track;
+ }
+ }
+ error("can't find selected track");
+ return null;
+ }
+
+ public void scroll_to_beginning() {
+ h_adjustment.set_value(0.0);
+ }
+
+ public void page_to_time(int64 time) {
+ double location_in_window = timeline.provider.time_to_xpos(time) - h_adjustment.get_value();
+ int window_width = timeline.parent.allocation.width;
+ if (location_in_window > 0.9 * window_width ||
+ location_in_window < 0.1 * window_width) {
+ scroll_to_time(time);
+ }
+ }
+
+ public void scroll_to_time(int64 time) {
+ int new_adjustment = timeline.provider.time_to_xpos(time);
+ int window_width = timeline.parent.allocation.width;
+ if (new_adjustment < timeline.parent.allocation.width) {
+ new_adjustment = 0;
+ } else {
+ new_adjustment = new_adjustment - window_width / 2;
+ }
+
+ int max_value = (int)(h_adjustment.upper - timeline_scrolled.allocation.width);
+ if (new_adjustment > max_value) {
+ new_adjustment = max_value;
+ }
+
+ h_adjustment.set_value(new_adjustment);
+ }
+
+ public void scroll_to_end() {
+ scroll_to_time(project.get_length());
+ }
+
+ static int sgn(int x) {
+ if (x == 0)
+ return 0;
+ return x < 0 ? -1 : 1;
+ }
+
+ public void scroll_toward_center(int xpos) {
+ if (cursor_pos == -1) {
+ cursor_pos = xpos - (int) h_adjustment.value;
+ }
+ // Move the cursor position toward the center of the window. We compute
+ // the remaining distance and move by its square root; this results in
+ // a smooth decelerating motion.
+ int page_size = (int) h_adjustment.page_size;
+ int diff = page_size / 2 - cursor_pos;
+ int d = sgn(diff) * (int) Math.sqrt(diff.abs());
+ cursor_pos += d;
+ int x = int.max(0, xpos - cursor_pos);
+ int max_value = (int)(h_adjustment.upper - timeline_scrolled.allocation.width);
+ if (x > max_value) {
+ x = max_value;
+ }
+ h_adjustment.set_value(x);
+ }
+
+ public override bool key_press_event(Gdk.EventKey event) {
+ switch (event.keyval) {
+ case KeySyms.KP_Enter:
+ case KeySyms.Return:
+ if (project.transport_is_recording()) {
+ break;
+ }
+ if ((event.state & GDK_SHIFT_ALT_CONTROL_MASK) != 0)
+ return base.key_press_event(event);
+ on_rewind();
+ break;
+ case KeySyms.Left:
+ if (project.transport_is_recording()) {
+ break;
+ }
+ if ((event.state & Gdk.ModifierType.CONTROL_MASK) != 0) {
+ project.go_previous();
+ } else {
+ project.media_engine.go(project.transport_get_position() - Gst.SECOND);
+ }
+ page_to_time(project.transport_get_position());
+ break;
+ case KeySyms.Right:
+ if (project.transport_is_recording()) {
+ break;
+ }
+ if ((event.state & Gdk.ModifierType.CONTROL_MASK) != 0) {
+ project.go_next();
+ } else {
+ project.media_engine.go(project.transport_get_position() + Gst.SECOND);
+ }
+ page_to_time(project.transport_get_position());
+ break;
+ case KeySyms.KP_Add:
+ case KeySyms.equal:
+ case KeySyms.plus:
+ on_zoom_in();
+ break;
+ case KeySyms.KP_Subtract:
+ case KeySyms.minus:
+ case KeySyms.underscore:
+ on_zoom_out();
+ break;
+ default:
+ return base.key_press_event(event);
+ }
+ return true;
+ }
+
+ // File menu
+ void on_export() {
+ string filename = null;
+ if (DialogUtils.save(this, "Export", false, export_filters, ref filename)) {
+ try {
+ new MultiFileProgress(this, 1, "Export", project.media_engine);
+ project.media_engine.disconnect_output(audio_output);
+ audio_export = new View.OggVorbisExport(View.MediaConnector.MediaTypes.Audio,
+ filename, project.media_engine.get_project_audio_export_caps());
+ project.media_engine.connect_output(audio_export);
+ project.media_engine.start_export(filename);
+ } catch (Error e) {
+ do_error_dialog("Could not export file", e.message);
+ }
+ }
+ }
+
+ void on_post_export(bool canceled) {
+ emit(this, Facility.SIGNAL_HANDLERS, Level.INFO, "on_post_export");
+ project.media_engine.disconnect_output(audio_export);
+ project.media_engine.connect_output(audio_output);
+
+ if (canceled) {
+ GLib.FileUtils.remove(audio_export.get_filename());
+ }
+
+ audio_export = null;
+ }
+
+ void on_project_new_finished_closing(bool project_did_close) {
+ emit(this, Facility.SIGNAL_HANDLERS, Level.INFO, "on_project_new_finished_closing");
+ project.closed.disconnect(on_project_close);
+ finished_closing.disconnect(on_project_new_finished_closing);
+ if (project_did_close) {
+ project.media_engine.set_play_state(PlayState.LOADING);
+ project.load(null);
+ default_track_set();
+ project.media_engine.pipeline.set_state(Gst.State.PAUSED);
+ project.undo_manager.reset();
+ }
+ }
+
+ void on_project_new() {
+ load_errors.clear();
+ project.closed.connect(on_project_close);
+ finished_closing.connect(on_project_new_finished_closing);
+ project.close();
+ }
+
+ void on_project_open_finished_closing(bool project_did_close) {
+ project.closed.disconnect(on_project_close);
+ finished_closing.disconnect(on_project_open_finished_closing);
+ if (project_did_close) {
+ GLib.SList<string> filenames;
+ if (DialogUtils.open(this, filters, false, false, out filenames)) {
+ loading = true;
+ project.load(filenames.data);
+ }
+ }
+ }
+
+ void on_project_open() {
+ load_errors.clear();
+ project.closed.connect(on_project_close);
+ finished_closing.connect(on_project_open_finished_closing);
+ project.close();
+ }
+
+ void on_project_save_as() {
+ save_dialog();
+ }
+
+ void on_project_save() {
+ do_save();
+ }
+
+ void on_save_new_file_finished_closing(bool did_close) {
+ project.closed.disconnect(on_project_close);
+ finished_closing.disconnect(on_save_new_file_finished_closing);
+ project.load(project.get_project_file());
+ }
+
+ bool do_save() {
+ if (project.get_project_file() != null) {
+ project.save(null);
+ return true;
+ }
+ else {
+ return save_dialog();
+ }
+ }
+
+ bool save_dialog() {
+ bool saving_new_file = project.get_project_file() == null;
+
+ string filename = project.get_project_file();
+ bool create_directory = project.get_project_file() == null;
+ if (DialogUtils.save(this, "Save Project", create_directory, filters, ref filename)) {
+ project.save(filename);
+ if (saving_new_file && project.get_project_file() != null) {
+ project.closed.connect(on_project_close);
+ finished_closing.connect(on_save_new_file_finished_closing);
+ project.close();
+ }
+ return true;
+ }
+ return false;
+ }
+
+ void on_properties() {
+ Gtk.Builder builder = new Gtk.Builder();
+ try {
+ builder.add_from_file(AppDirs.get_exec_dir().get_path() + "/resources/fillmore.glade");
+ //"/home/developer/Fillmore/resources/fillmore.glade");
+ //AppDirs.get_resources_dir().get_child("fillmore.glade").get_path());
+ } catch(GLib.Error e) {
+ stdout.printf("%s\n", e.message);
+ return;
+ }
+ builder.connect_signals(null);
+ ProjectProperties properties = (ProjectProperties)builder.get_object("projectproperties1");
+ properties.setup(project, builder);
+
+ int response = properties.run();
+ if (response == Gtk.ResponseType.APPLY) {
+ string description = "Set Project Properties";
+ project.undo_manager.start_transaction(description);
+ project.set_bpm(properties.get_tempo());
+ project.set_time_signature(properties.get_time_signature());
+ project.click_during_record = properties.during_record();
+ project.click_during_play = properties.during_play();
+ project.click_volume = properties.get_click_volume();
+ project.undo_manager.end_transaction(description);
+ }
+ properties.destroy();
+ }
+
+ void on_quit_finished_closing(bool project_did_close) {
+ project.closed.disconnect(on_project_close);
+ finished_closing.disconnect(on_quit_finished_closing);
+ if (project_did_close) {
+ Gtk.main_quit();
+ }
+ }
+
+ void on_quit() {
+ if (!project.transport_is_recording()) {
+ project.closed.connect(on_project_close);
+ finished_closing.connect(on_quit_finished_closing);
+ project.close();
+ }
+ }
+
+ bool on_delete_event() {
+ emit(this, Facility.SIGNAL_HANDLERS, Level.INFO, "on_delete_event");
+ on_quit();
+ return true;
+ }
+
+ void on_project_close() {
+ emit(this, Facility.SIGNAL_HANDLERS, Level.INFO, "on_project_close");
+ if (project.undo_manager.is_dirty) {
+ switch(DialogUtils.save_close_cancel(this, null, "Save changes before closing?")) {
+ case Gtk.ResponseType.ACCEPT:
+ if (!do_save()) {
+ finished_closing(false);
+ return;
+ }
+ break;
+ case Gtk.ResponseType.NO:
+ // if the user has never saved the file but quits anyway, save in .fillmore
+ if (project.get_project_file() == null) {
+ project.save(null);
+ }
+ break;
+ case Gtk.ResponseType.DELETE_EVENT: // when user presses escape.
+ case Gtk.ResponseType.CANCEL:
+ finished_closing(false);
+ return;
+ default:
+ assert(false);
+ break;
+ }
+ }
+ finished_closing(true);
+ }
+
+ // Edit menu
+ void on_cut() {
+ timeline.do_cut();
+ }
+
+ void on_copy() {
+ timeline.do_copy();
+ }
+
+ void on_paste() {
+ timeline.paste();
+ }
+
+ void on_undo() {
+ project.undo();
+ }
+
+ void on_delete() {
+ if (library.has_selection()) {
+ library.delete_selection();
+ } else {
+ timeline.delete_selection();
+ }
+ }
+
+ void on_select_all() {
+ if (library.has_selection()) {
+ library.select_all();
+ } else {
+ timeline.select_all();
+ }
+ }
+
+ public void on_split_at_playhead() {
+ project.split_at_playhead();
+ }
+
+ public void on_trim_to_playhead() {
+ project.trim_to_playhead();
+ }
+
+ public void on_clip_properties() {
+ if (library.has_selection()) {
+ Gee.ArrayList<string> files = library.get_selected_files();
+ if (files.size == 1) {
+ string file_name = files.get(0);
+ Model.ClipFile? clip_file = project.find_clipfile(file_name);
+ DialogUtils.show_clip_properties(this, null, clip_file, null);
+ }
+ } else {
+ Gee.ArrayList<ClipView> clips = timeline.selected_clips;
+ if (clips.size == 1) {
+ ClipView clip_view = clips.get(0);
+ DialogUtils.show_clip_properties(this, clip_view, null, null);
+ }
+ }
+ }
+
+ // Track menu
+
+ void on_track_new() {
+ UI.TrackInformation dialog = new UI.TrackInformation();
+ dialog.set_track_name(get_default_track_name());
+ if (track_name_dialog(dialog, null)) {
+ project.add_track(new Model.AudioTrack(project, dialog.get_track_name()));
+ }
+ dialog.destroy();
+ }
+
+ void on_track_rename() {
+ UI.TrackInformation dialog = new UI.TrackInformation();
+ Model.Track track = selected_track();
+ dialog.set_title("Rename Track");
+ dialog.set_track_name(selected_track().display_name);
+ if (track_name_dialog(dialog, track)) {
+ track.set_display_name(dialog.get_track_name());
+ }
+ dialog.destroy();
+ }
+
+ bool track_name_dialog(UI.TrackInformation dialog, Model.Track? track) {
+ Gtk.ResponseType result = Gtk.ResponseType.OK;
+ bool is_ok = true;
+ do {
+ result = (Gtk.ResponseType) dialog.run();
+ string new_name = dialog.get_track_name();
+
+ if (result == Gtk.ResponseType.OK) {
+ if (new_name == "") {
+ is_ok = false;
+ DialogUtils.error("Invalid track name.", "The track name cannot be empty.");
+ } else {
+ is_ok = !project.is_duplicate_track_name(track, new_name);
+ if (!is_ok) {
+ DialogUtils.error("Duplicate track name.",
+ "A track with this name already exists.");
+ }
+ }
+ }
+ } while (result == Gtk.ResponseType.OK && !is_ok);
+ return result == Gtk.ResponseType.OK && is_ok;
+ }
+
+ void on_track_remove() {
+ project.remove_track(selected_track());
+ }
+
+ // View menu
+ void on_zoom_in() {
+ do_zoom(0.1f);
+ }
+
+ void on_zoom_out() {
+ do_zoom(-0.1f);
+ }
+
+ void on_zoom_to_project() {
+ timeline.zoom_to_project(h_adjustment.page_size);
+ }
+
+ void on_snap() {
+ project.snap_to_clip = !project.snap_to_clip;
+ }
+
+ void on_view_library() {
+ if (timeline_library_pane.child2 == library_scrolled) {
+ timeline_library_pane.remove(library_scrolled);
+ project.library_visible = false;
+ } else {
+ timeline_library_pane.add2(library_scrolled);
+ timeline_library_pane.show_all();
+ project.library_visible = true;
+ }
+ }
+
+ void on_library_size_allocate(Gdk.Rectangle rectangle) {
+ if (!loading && timeline_library_pane.child2 == library_scrolled) {
+ project.library_width = rectangle.width;
+ }
+ }
+
+ // Help menu
+
+ void on_help_contents() {
+ try {
+ Gtk.show_uri(null, "http://trac.yorba.org/wiki/UsingFillmore0.1", 0);
+ } catch (GLib.Error e) {
+ }
+ }
+
+ void on_about() {
+ Gtk.show_about_dialog(this,
+ "version", project.get_version(),
+ "comments", "An audio editor and recorder",
+ "copyright", "Copyright 2009-2010 Yorba Foundation",
+ "website", "http://www.yorba.org",
+ "license", project.get_license(),
+ "website-label", "Visit the Yorba web site",
+ "authors", project.authors
+ );
+ }
+
+ void on_save_graph() {
+ project.print_graph(project.media_engine.pipeline, "save_graph");
+ }
+
+ // toolbar
+
+ void on_volume() {
+ /// TODO
+ }
+
+ void on_rewind() {
+ project.media_engine.go(0);
+ scroll_to_beginning();
+ }
+
+ void on_end() {
+ project.go_end();
+ scroll_to_end();
+ }
+
+ void on_play() {
+ if (project.transport_is_recording()) {
+ set_sensitive_group(main_group, "Record", true);
+ record_button.set_active(false);
+ play_button.set_active(false);
+ project.media_engine.pause();
+ } else if (play_button.get_active())
+ project.media_engine.do_play(PlayState.PLAYING);
+ else
+ project.media_engine.pause();
+ }
+
+ void on_record() {
+ if (record_button.get_active()) {
+ Model.AudioTrack audio_track = selected_track() as Model.AudioTrack;
+ int number_of_channels;
+ if (audio_track.get_num_channels(out number_of_channels)) {
+ if (number_of_channels > CHANNELS_PER_TRACK_RECORD) {
+ record_button.set_active(false);
+ on_error_occurred("Can not record onto a stereo track", null);
+ return;
+ }
+ }
+ set_sensitive_group(main_group, "Record", false);
+ set_sensitive_group(main_group, "Play", false);
+ project.record(audio_track);
+ }
+ else {
+ on_play();
+ }
+ }
+
+ void on_callback_pulse() {
+ emit(this, Facility.SIGNAL_HANDLERS, Level.INFO, "on_callback_pulse");
+ if (project.transport_is_playing()) {
+ scroll_toward_center(provider.time_to_xpos(project.media_engine.position));
+ }
+ timeline.queue_draw();
+ }
+
+ int64 get_zoom_center_time() {
+ return project.transport_get_position();
+ }
+
+ void do_zoom(float increment) {
+ center_time = get_zoom_center_time();
+ timeline.zoom(increment);
+ }
+
+ void on_timeline_size_allocate(Gdk.Rectangle rectangle) {
+ if (center_time != -1) {
+ int new_center_pixel = provider.time_to_xpos(center_time);
+ int page_size = (int)(h_adjustment.get_page_size() / 2);
+ h_adjustment.clamp_page(new_center_pixel - page_size, new_center_pixel + page_size);
+ center_time = -1;
+ }
+ }
+
+ void on_timeline_selection_changed(bool selected) {
+ emit(this, Facility.SIGNAL_HANDLERS, Level.INFO, "on_timeline_selection_changed");
+ if (selected) {
+ library.unselect_all();
+ }
+ update_menu();
+ }
+
+ public void on_library_selection_changed(bool selected) {
+ emit(this, Facility.SIGNAL_HANDLERS, Level.INFO, "on_library_selection_changed");
+ if (selected) {
+ timeline.deselect_all_clips();
+ timeline.queue_draw();
+ }
+ update_menu();
+ }
+
+ // main
+
+ /*static void main(string[] args) {
+ Hildon.gtk_init(ref args);
+ debug_level = -1;
+ OptionContext context = new OptionContext(
+ " [project file] - Record and edit multitrack audio");
+ context.add_main_entries(options, null);
+ context.add_group(Gst.init_get_option_group());
+
+ try {
+ context.parse(ref args);
+ } catch (GLib.Error arg_error) {
+ stderr.printf("%s\nRun 'fillmore --help' for a full list of available command line options.",
+ arg_error.message);
+ return;
+ }
+ Gtk.init(ref args);
+ try {
+ GLib.Environment.set_application_name("Fillmore");
+ if (debug_level > -1) {
+ set_logging_level((Logging.Level)debug_level);
+ }
+
+ AppDirs.init(args[0], _PROGRAM_NAME);
+ string rc_file = AppDirs.get_resources_dir().get_child("fillmore.rc").get_path();
+
+ Gtk.rc_parse(rc_file);
+ Gst.init(ref args);
+
+ string? project_file = null;
+ if (args.length > 1) {
+ project_file = args[1];
+ try {
+ project_file = GLib.Filename.from_uri(project_file);
+ } catch (GLib.Error e) { }
+ }
+
+ ClassFactory.set_class_factory(new FillmoreClassFactory());
+ View.MediaEngine.can_run();
+
+ Recorder recorder = new Recorder(project_file);
+ recorder.show_all();
+ Gtk.main();
+ } catch (Error e) {
+ do_error_dialog("Could not start application.",e.message);
+ }
+ }*/
+
+ public static void do_error_dialog(string major_message, string? minor_message) {
+ DialogUtils.error(major_message, minor_message);
+ }
+
+ public void on_load_error(string message) {
+ emit(this, Facility.SIGNAL_HANDLERS, Level.INFO, "on_load_error");
+ load_errors.add(message);
+ }
+
+ public void on_load_complete() {
+ emit(this, Facility.SIGNAL_HANDLERS, Level.INFO, "on_load_complete");
+ project.media_engine.pipeline.set_state(Gst.State.PAUSED);
+ timeline_library_pane.set_position(project.library_width);
+
+ Gtk.ToggleAction action = main_group.get_action("Library") as Gtk.ToggleAction;
+ if (action.get_active() != project.library_visible) {
+ action.set_active(project.library_visible);
+ }
+
+ action = main_group.get_action("Snap") as Gtk.ToggleAction;
+ if (action.get_active() != project.snap_to_clip) {
+ action.set_active(project.snap_to_clip);
+ }
+
+ if (project.library_visible) {
+ if (timeline_library_pane.child2 != library_scrolled) {
+ timeline_library_pane.add2(library_scrolled);
+ }
+ } else {
+ if (timeline_library_pane.child2 == library_scrolled) {
+ timeline_library_pane.remove(library_scrolled);
+ }
+ }
+
+ if (load_errors.size > 0) {
+ string message = "";
+ foreach (string s in load_errors) {
+ message = message + s + "\n";
+ }
+ do_error_dialog("An error occurred loading the project.", message);
+ }
+
+ loading = false;
+ }
+
+ void on_name_changed() {
+ emit(this, Facility.SIGNAL_HANDLERS, Level.INFO, "on_name_changed");
+ set_title(project.get_file_display_name());
+ }
+
+ void on_dirty_changed(bool isDirty) {
+ emit(this, Facility.SIGNAL_HANDLERS, Level.INFO, "on_dirty_changed");
+ Gtk.MenuItem? file_save = (Gtk.MenuItem?) get_widget(manager, "/MenuBar/ProjectMenu/Save");
+ assert(file_save != null);
+ file_save.set_sensitive(isDirty);
+ }
+
+ void on_undo_changed(bool can_undo) {
+ emit(this, Facility.SIGNAL_HANDLERS, Level.INFO, "on_undo_changed");
+ Gtk.MenuItem? undo = (Gtk.MenuItem?) get_widget(manager, "/MenuBar/EditMenu/EditUndo");
+ assert(undo != null);
+ //undo.set_label("_Undo " + project.undo_manager.get_undo_title());
+ set_sensitive_group(main_group, "Undo", is_stopped() && project.undo_manager.can_undo);
+ }
+
+ void on_playstate_changed(PlayState playstate) {
+ emit(this, Facility.SIGNAL_HANDLERS, Level.INFO, "on_playstate_changed");
+ if (playstate == PlayState.STOPPED) {
+ cursor_pos = -1;
+ play_button.set_active(false);
+ set_sensitive_group(main_group, "Export", project.can_export());
+ update_menu();
+ }
+ }
+
+ void on_error_occurred(string major_message, string? minor_message) {
+ emit(this, Facility.SIGNAL_HANDLERS, Level.INFO, "on_error_occurred");
+ DialogUtils.error(major_message, minor_message);
+ }
+
+ string get_fillmore_directory() {
+ return Path.build_filename(GLib.Environment.get_home_dir(), ".fillmore");
+ }
+
+ // TransportDelegate methods
+ bool is_playing() {
+ return project.transport_is_playing();
+ }
+
+ bool is_recording() {
+ return project.transport_is_recording();
+ }
+
+ bool is_stopped() {
+ return !(is_playing() || is_recording());
+ }
+}
+
+public class Fillmore : Hildon.Program {
+ construct { }
+
+ public void run(string[] args) {
+ debug_level = -1;
+ OptionContext context = new OptionContext(
+ " [project file] - Record and edit multitrack audio");
+ context.add_main_entries(options, null);
+ context.add_group(Gst.init_get_option_group());
+
+ try {
+ context.parse(ref args);
+ } catch (GLib.Error arg_error) {
+ stderr.printf("%s\nRun 'fillmore --help' for a full list of available command line options.",
+ arg_error.message);
+ return;
+ }
+ //Gtk.init(ref args);
+ try {
+ GLib.Environment.set_application_name("Fillmore");
+ if (debug_level > -1) {
+ set_logging_level((Logging.Level)debug_level);
+ }
+
+ AppDirs.init(args[0], _PROGRAM_NAME);
+ string rc_file = AppDirs.get_resources_dir().get_child("fillmore.rc").get_path();
+
+ Gtk.rc_parse(rc_file);
+ //Gst.init(ref args);
+
+ string? project_file = null;
+ if (args.length > 1) {
+ project_file = args[1];
+ try {
+ project_file = GLib.Filename.from_uri(project_file);
+ } catch (GLib.Error e) { }
+ }
+
+ ClassFactory.set_class_factory(new FillmoreClassFactory());
+ View.MediaEngine.can_run();
+
+ Recorder recorder = new Recorder(project_file);
+ recorder.show_all();
+ Gtk.main();
+ } catch (Error e) {
+ Recorder.do_error_dialog("Could not start application.",e.message);
+ }
+ }
+}
+
+public static int main(string[] args) {
+ Gtk.init(ref args);
+ Gst.init(ref args);
+ Fillmore fillmore = new Fillmore();
+ fillmore.run(args);
+ return 0;
+}
+
+static void NO_main(string[] args) {
+ Hildon.gtk_init(ref args);
+ debug_level = -1;
+ OptionContext context = new OptionContext(
+ " [project file] - Record and edit multitrack audio");
+ context.add_main_entries(options, null);
+ context.add_group(Gst.init_get_option_group());
+
+ try {
+ context.parse(ref args);
+ } catch (GLib.Error arg_error) {
+ stderr.printf("%s\nRun 'fillmore --help' for a full list of available command line options.",
+ arg_error.message);
+ return;
+ }
+ Gtk.init(ref args);
+ try {
+ GLib.Environment.set_application_name("Fillmore");
+ if (debug_level > -1) {
+ set_logging_level((Logging.Level)debug_level);
+ }
+
+ AppDirs.init(args[0], _PROGRAM_NAME);
+ string rc_file = AppDirs.get_resources_dir().get_child("fillmore.rc").get_path();
+
+ Gtk.rc_parse(rc_file);
+ Gst.init(ref args);
+
+ string? project_file = null;
+ if (args.length > 1) {
+ project_file = args[1];
+ try {
+ project_file = GLib.Filename.from_uri(project_file);
+ } catch (GLib.Error e) { }
+ }
+
+ ClassFactory.set_class_factory(new FillmoreClassFactory());
+ View.MediaEngine.can_run();
+
+ Recorder recorder = new Recorder(project_file);
+ recorder.show_all();
+ Gtk.main();
+ } catch (Error e) {
+ Recorder.do_error_dialog("Could not start application.",e.message);
+ }
+}
--- /dev/null
+/* FillmoreClassFactory.c generated by valac, the Vala compiler
+ * generated from FillmoreClassFactory.vala, do not modify */
+
+/* Copyright 2009-2010 Yorba Foundation
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gtk/gtk.h>
+#include <marina.h>
+#include <float.h>
+#include <math.h>
+
+
+#define TYPE_TRACK_SEPARATOR (track_separator_get_type ())
+#define TRACK_SEPARATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TRACK_SEPARATOR, TrackSeparator))
+#define TRACK_SEPARATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_TRACK_SEPARATOR, TrackSeparatorClass))
+#define IS_TRACK_SEPARATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TRACK_SEPARATOR))
+#define IS_TRACK_SEPARATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_TRACK_SEPARATOR))
+#define TRACK_SEPARATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_TRACK_SEPARATOR, TrackSeparatorClass))
+
+typedef struct _TrackSeparator TrackSeparator;
+typedef struct _TrackSeparatorClass TrackSeparatorClass;
+typedef struct _TrackSeparatorPrivate TrackSeparatorPrivate;
+
+#define TYPE_FILLMORE_TRACK_VIEW (fillmore_track_view_get_type ())
+#define FILLMORE_TRACK_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_FILLMORE_TRACK_VIEW, FillmoreTrackView))
+#define FILLMORE_TRACK_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_FILLMORE_TRACK_VIEW, FillmoreTrackViewClass))
+#define IS_FILLMORE_TRACK_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_FILLMORE_TRACK_VIEW))
+#define IS_FILLMORE_TRACK_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_FILLMORE_TRACK_VIEW))
+#define FILLMORE_TRACK_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_FILLMORE_TRACK_VIEW, FillmoreTrackViewClass))
+
+typedef struct _FillmoreTrackView FillmoreTrackView;
+typedef struct _FillmoreTrackViewClass FillmoreTrackViewClass;
+typedef struct _FillmoreTrackViewPrivate FillmoreTrackViewPrivate;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+
+#define TYPE_FILLMORE_CLASS_FACTORY (fillmore_class_factory_get_type ())
+#define FILLMORE_CLASS_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_FILLMORE_CLASS_FACTORY, FillmoreClassFactory))
+#define FILLMORE_CLASS_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_FILLMORE_CLASS_FACTORY, FillmoreClassFactoryClass))
+#define IS_FILLMORE_CLASS_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_FILLMORE_CLASS_FACTORY))
+#define IS_FILLMORE_CLASS_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_FILLMORE_CLASS_FACTORY))
+#define FILLMORE_CLASS_FACTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_FILLMORE_CLASS_FACTORY, FillmoreClassFactoryClass))
+
+typedef struct _FillmoreClassFactory FillmoreClassFactory;
+typedef struct _FillmoreClassFactoryClass FillmoreClassFactoryClass;
+typedef struct _FillmoreClassFactoryPrivate FillmoreClassFactoryPrivate;
+
+struct _TrackSeparator {
+ GtkHSeparator parent_instance;
+ TrackSeparatorPrivate * priv;
+};
+
+struct _TrackSeparatorClass {
+ GtkHSeparatorClass parent_class;
+};
+
+struct _FillmoreTrackView {
+ GtkVBox parent_instance;
+ FillmoreTrackViewPrivate * priv;
+};
+
+struct _FillmoreTrackViewClass {
+ GtkVBoxClass parent_class;
+};
+
+struct _FillmoreTrackViewPrivate {
+ TrackView* track_view;
+};
+
+struct _FillmoreClassFactory {
+ ClassFactory parent_instance;
+ FillmoreClassFactoryPrivate * priv;
+};
+
+struct _FillmoreClassFactoryClass {
+ ClassFactoryClass parent_class;
+};
+
+
+static gpointer track_separator_parent_class = NULL;
+static gpointer fillmore_track_view_parent_class = NULL;
+static TrackViewIface* fillmore_track_view_track_view_parent_iface = NULL;
+static gpointer fillmore_class_factory_parent_class = NULL;
+
+GType track_separator_get_type (void);
+enum {
+ TRACK_SEPARATOR_DUMMY_PROPERTY
+};
+TrackSeparator* track_separator_new (void);
+TrackSeparator* track_separator_construct (GType object_type);
+GType fillmore_track_view_get_type (void);
+#define FILLMORE_TRACK_VIEW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_FILLMORE_TRACK_VIEW, FillmoreTrackViewPrivate))
+enum {
+ FILLMORE_TRACK_VIEW_DUMMY_PROPERTY
+};
+static void fillmore_track_view_on_clip_view_added (FillmoreTrackView* self, ClipView* clip_view);
+static void _fillmore_track_view_on_clip_view_added_track_view_clip_view_added (TrackView* _sender, ClipView* clip_view, gpointer self);
+FillmoreTrackView* fillmore_track_view_new (TrackView* track_view);
+FillmoreTrackView* fillmore_track_view_construct (GType object_type, TrackView* track_view);
+static void fillmore_track_view_real_move_to_top (TrackView* base, ClipView* clip_view);
+static void fillmore_track_view_real_resize (TrackView* base);
+static ModelTrack* fillmore_track_view_real_get_track (TrackView* base);
+static gint fillmore_track_view_real_get_track_height (TrackView* base);
+static GtkWidget* fillmore_track_view_real_find_child (TrackView* base, double x, double y);
+static void fillmore_track_view_real_select_all (TrackView* base);
+static void fillmore_track_view_finalize (GObject* obj);
+GType fillmore_class_factory_get_type (void);
+enum {
+ FILLMORE_CLASS_FACTORY_DUMMY_PROPERTY
+};
+static TrackView* fillmore_class_factory_real_get_track_view (ClassFactory* base, ModelTrack* track, TimeLine* timeline);
+FillmoreClassFactory* fillmore_class_factory_new (void);
+FillmoreClassFactory* fillmore_class_factory_construct (GType object_type);
+
+
+
+#line 7 "FillmoreClassFactory.vala"
+TrackSeparator* track_separator_construct (GType object_type) {
+#line 124 "FillmoreClassFactory.c"
+ TrackSeparator * self;
+ self = g_object_newv (object_type, 0, NULL);
+ return self;
+}
+
+
+#line 7 "FillmoreClassFactory.vala"
+TrackSeparator* track_separator_new (void) {
+#line 7 "FillmoreClassFactory.vala"
+ return track_separator_construct (TYPE_TRACK_SEPARATOR);
+#line 135 "FillmoreClassFactory.c"
+}
+
+
+static void track_separator_class_init (TrackSeparatorClass * klass) {
+ track_separator_parent_class = g_type_class_peek_parent (klass);
+}
+
+
+static void track_separator_instance_init (TrackSeparator * self) {
+}
+
+
+GType track_separator_get_type (void) {
+ static volatile gsize track_separator_type_id__volatile = 0;
+ if (g_once_init_enter (&track_separator_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (TrackSeparatorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) track_separator_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (TrackSeparator), 0, (GInstanceInitFunc) track_separator_instance_init, NULL };
+ GType track_separator_type_id;
+ track_separator_type_id = g_type_register_static (GTK_TYPE_HSEPARATOR, "TrackSeparator", &g_define_type_info, 0);
+ g_once_init_leave (&track_separator_type_id__volatile, track_separator_type_id);
+ }
+ return track_separator_type_id__volatile;
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+ return self ? g_object_ref (self) : NULL;
+}
+
+
+#line 38 "FillmoreClassFactory.vala"
+static void _fillmore_track_view_on_clip_view_added_track_view_clip_view_added (TrackView* _sender, ClipView* clip_view, gpointer self) {
+#line 167 "FillmoreClassFactory.c"
+ fillmore_track_view_on_clip_view_added (self, clip_view);
+}
+
+
+#line 13 "FillmoreClassFactory.vala"
+FillmoreTrackView* fillmore_track_view_construct (GType object_type, TrackView* track_view) {
+#line 174 "FillmoreClassFactory.c"
+ FillmoreTrackView * self;
+ TrackView* _tmp0_;
+ TrackSeparator* _tmp1_;
+#line 13 "FillmoreClassFactory.vala"
+ g_return_val_if_fail (IS_TRACK_VIEW (track_view), NULL);
+#line 180 "FillmoreClassFactory.c"
+ self = g_object_newv (object_type, 0, NULL);
+#line 14 "FillmoreClassFactory.vala"
+ self->priv->track_view = (_tmp0_ = _g_object_ref0 (track_view), _g_object_unref0 (self->priv->track_view), _tmp0_);
+#line 15 "FillmoreClassFactory.vala"
+ g_signal_connect_object (track_view, "clip-view-added", (GCallback) _fillmore_track_view_on_clip_view_added_track_view_clip_view_added, self, 0);
+#line 17 "FillmoreClassFactory.vala"
+ gtk_box_pack_start (GTK_BOX (self), GTK_WIDGET (track_view), TRUE, TRUE, (guint) 0);
+#line 18 "FillmoreClassFactory.vala"
+ gtk_box_pack_start (GTK_BOX (self), GTK_WIDGET (_tmp1_ = g_object_ref_sink (track_separator_new ())), FALSE, FALSE, (guint) 0);
+#line 190 "FillmoreClassFactory.c"
+ _g_object_unref0 (_tmp1_);
+#line 19 "FillmoreClassFactory.vala"
+ g_object_set (GTK_WIDGET (self), "can-focus", FALSE, NULL);
+#line 194 "FillmoreClassFactory.c"
+ return self;
+}
+
+
+#line 13 "FillmoreClassFactory.vala"
+FillmoreTrackView* fillmore_track_view_new (TrackView* track_view) {
+#line 13 "FillmoreClassFactory.vala"
+ return fillmore_track_view_construct (TYPE_FILLMORE_TRACK_VIEW, track_view);
+#line 203 "FillmoreClassFactory.c"
+}
+
+
+#line 22 "FillmoreClassFactory.vala"
+static void fillmore_track_view_real_move_to_top (TrackView* base, ClipView* clip_view) {
+#line 209 "FillmoreClassFactory.c"
+ FillmoreTrackView * self;
+ self = FILLMORE_TRACK_VIEW (base);
+#line 22 "FillmoreClassFactory.vala"
+ g_return_if_fail (IS_CLIP_VIEW (clip_view));
+#line 23 "FillmoreClassFactory.vala"
+ track_view_move_to_top (self->priv->track_view, clip_view);
+#line 216 "FillmoreClassFactory.c"
+}
+
+
+#line 26 "FillmoreClassFactory.vala"
+static void fillmore_track_view_real_resize (TrackView* base) {
+#line 222 "FillmoreClassFactory.c"
+ FillmoreTrackView * self;
+ self = FILLMORE_TRACK_VIEW (base);
+#line 27 "FillmoreClassFactory.vala"
+ track_view_resize (self->priv->track_view);
+#line 227 "FillmoreClassFactory.c"
+}
+
+
+#line 30 "FillmoreClassFactory.vala"
+static ModelTrack* fillmore_track_view_real_get_track (TrackView* base) {
+#line 233 "FillmoreClassFactory.c"
+ FillmoreTrackView * self;
+ ModelTrack* result = NULL;
+ self = FILLMORE_TRACK_VIEW (base);
+ result = track_view_get_track (self->priv->track_view);
+#line 31 "FillmoreClassFactory.vala"
+ return result;
+#line 240 "FillmoreClassFactory.c"
+}
+
+
+#line 34 "FillmoreClassFactory.vala"
+static gint fillmore_track_view_real_get_track_height (TrackView* base) {
+#line 246 "FillmoreClassFactory.c"
+ FillmoreTrackView * self;
+ gint result = 0;
+ self = FILLMORE_TRACK_VIEW (base);
+ result = track_view_get_track_height (self->priv->track_view);
+#line 35 "FillmoreClassFactory.vala"
+ return result;
+#line 253 "FillmoreClassFactory.c"
+}
+
+
+#line 38 "FillmoreClassFactory.vala"
+static void fillmore_track_view_on_clip_view_added (FillmoreTrackView* self, ClipView* clip_view) {
+#line 38 "FillmoreClassFactory.vala"
+ g_return_if_fail (IS_FILLMORE_TRACK_VIEW (self));
+#line 38 "FillmoreClassFactory.vala"
+ g_return_if_fail (IS_CLIP_VIEW (clip_view));
+#line 39 "FillmoreClassFactory.vala"
+ g_signal_emit_by_name (TRACK_VIEW (self), "clip-view-added", clip_view);
+#line 265 "FillmoreClassFactory.c"
+}
+
+
+#line 42 "FillmoreClassFactory.vala"
+static GtkWidget* fillmore_track_view_real_find_child (TrackView* base, double x, double y) {
+#line 271 "FillmoreClassFactory.c"
+ FillmoreTrackView * self;
+ GtkWidget* result = NULL;
+ self = FILLMORE_TRACK_VIEW (base);
+ result = track_view_find_child (self->priv->track_view, x, y);
+#line 43 "FillmoreClassFactory.vala"
+ return result;
+#line 278 "FillmoreClassFactory.c"
+}
+
+
+#line 46 "FillmoreClassFactory.vala"
+static void fillmore_track_view_real_select_all (TrackView* base) {
+#line 284 "FillmoreClassFactory.c"
+ FillmoreTrackView * self;
+ self = FILLMORE_TRACK_VIEW (base);
+#line 47 "FillmoreClassFactory.vala"
+ track_view_select_all (self->priv->track_view);
+#line 289 "FillmoreClassFactory.c"
+}
+
+
+static void fillmore_track_view_class_init (FillmoreTrackViewClass * klass) {
+ fillmore_track_view_parent_class = g_type_class_peek_parent (klass);
+ g_type_class_add_private (klass, sizeof (FillmoreTrackViewPrivate));
+ G_OBJECT_CLASS (klass)->finalize = fillmore_track_view_finalize;
+}
+
+
+static void fillmore_track_view_track_view_interface_init (TrackViewIface * iface) {
+ fillmore_track_view_track_view_parent_iface = g_type_interface_peek_parent (iface);
+ iface->move_to_top = fillmore_track_view_real_move_to_top;
+ iface->resize = fillmore_track_view_real_resize;
+ iface->get_track = fillmore_track_view_real_get_track;
+ iface->get_track_height = fillmore_track_view_real_get_track_height;
+ iface->find_child = fillmore_track_view_real_find_child;
+ iface->select_all = fillmore_track_view_real_select_all;
+}
+
+
+static void fillmore_track_view_instance_init (FillmoreTrackView * self) {
+ self->priv = FILLMORE_TRACK_VIEW_GET_PRIVATE (self);
+}
+
+
+static void fillmore_track_view_finalize (GObject* obj) {
+ FillmoreTrackView * self;
+ self = FILLMORE_TRACK_VIEW (obj);
+ _g_object_unref0 (self->priv->track_view);
+ G_OBJECT_CLASS (fillmore_track_view_parent_class)->finalize (obj);
+}
+
+
+GType fillmore_track_view_get_type (void) {
+ static volatile gsize fillmore_track_view_type_id__volatile = 0;
+ if (g_once_init_enter (&fillmore_track_view_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (FillmoreTrackViewClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) fillmore_track_view_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (FillmoreTrackView), 0, (GInstanceInitFunc) fillmore_track_view_instance_init, NULL };
+ static const GInterfaceInfo track_view_info = { (GInterfaceInitFunc) fillmore_track_view_track_view_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
+ GType fillmore_track_view_type_id;
+ fillmore_track_view_type_id = g_type_register_static (GTK_TYPE_VBOX, "FillmoreTrackView", &g_define_type_info, 0);
+ g_type_add_interface_static (fillmore_track_view_type_id, TYPE_TRACK_VIEW, &track_view_info);
+ g_once_init_leave (&fillmore_track_view_type_id__volatile, fillmore_track_view_type_id);
+ }
+ return fillmore_track_view_type_id__volatile;
+}
+
+
+#line 52 "FillmoreClassFactory.vala"
+static TrackView* fillmore_class_factory_real_get_track_view (ClassFactory* base, ModelTrack* track, TimeLine* timeline) {
+#line 340 "FillmoreClassFactory.c"
+ FillmoreClassFactory * self;
+ TrackView* result = NULL;
+ TrackView* track_view;
+ self = FILLMORE_CLASS_FACTORY (base);
+#line 52 "FillmoreClassFactory.vala"
+ g_return_val_if_fail (MODEL_IS_TRACK (track), NULL);
+#line 52 "FillmoreClassFactory.vala"
+ g_return_val_if_fail (IS_TIME_LINE (timeline), NULL);
+#line 53 "FillmoreClassFactory.vala"
+ track_view = CLASS_FACTORY_CLASS (fillmore_class_factory_parent_class)->get_track_view (CLASS_FACTORY (self), track, timeline);
+#line 351 "FillmoreClassFactory.c"
+ result = TRACK_VIEW (g_object_ref_sink (fillmore_track_view_new (track_view)));
+ _g_object_unref0 (track_view);
+#line 54 "FillmoreClassFactory.vala"
+ return result;
+#line 356 "FillmoreClassFactory.c"
+}
+
+
+#line 51 "FillmoreClassFactory.vala"
+FillmoreClassFactory* fillmore_class_factory_construct (GType object_type) {
+#line 362 "FillmoreClassFactory.c"
+ FillmoreClassFactory* self;
+#line 51 "FillmoreClassFactory.vala"
+ self = (FillmoreClassFactory*) class_factory_construct (object_type);
+#line 366 "FillmoreClassFactory.c"
+ return self;
+}
+
+
+#line 51 "FillmoreClassFactory.vala"
+FillmoreClassFactory* fillmore_class_factory_new (void) {
+#line 51 "FillmoreClassFactory.vala"
+ return fillmore_class_factory_construct (TYPE_FILLMORE_CLASS_FACTORY);
+#line 375 "FillmoreClassFactory.c"
+}
+
+
+static void fillmore_class_factory_class_init (FillmoreClassFactoryClass * klass) {
+ fillmore_class_factory_parent_class = g_type_class_peek_parent (klass);
+ CLASS_FACTORY_CLASS (klass)->get_track_view = fillmore_class_factory_real_get_track_view;
+}
+
+
+static void fillmore_class_factory_instance_init (FillmoreClassFactory * self) {
+}
+
+
+GType fillmore_class_factory_get_type (void) {
+ static volatile gsize fillmore_class_factory_type_id__volatile = 0;
+ if (g_once_init_enter (&fillmore_class_factory_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (FillmoreClassFactoryClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) fillmore_class_factory_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (FillmoreClassFactory), 0, (GInstanceInitFunc) fillmore_class_factory_instance_init, NULL };
+ GType fillmore_class_factory_type_id;
+ fillmore_class_factory_type_id = g_type_register_static (TYPE_CLASS_FACTORY, "FillmoreClassFactory", &g_define_type_info, 0);
+ g_once_init_leave (&fillmore_class_factory_type_id__volatile, fillmore_class_factory_type_id);
+ }
+ return fillmore_class_factory_type_id__volatile;
+}
+
+
+
+
--- /dev/null
+/* ProjectProperties.c generated by valac, the Vala compiler
+ * generated from ProjectProperties.vala, do not modify */
+
+/* Copyright 2009-2010 Yorba Foundation
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gtk/gtk.h>
+#include <marina.h>
+#include <float.h>
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+#define TYPE_PROJECT_PROPERTIES (project_properties_get_type ())
+#define PROJECT_PROPERTIES(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_PROJECT_PROPERTIES, ProjectProperties))
+#define PROJECT_PROPERTIES_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_PROJECT_PROPERTIES, ProjectPropertiesClass))
+#define IS_PROJECT_PROPERTIES(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_PROJECT_PROPERTIES))
+#define IS_PROJECT_PROPERTIES_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_PROJECT_PROPERTIES))
+#define PROJECT_PROPERTIES_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_PROJECT_PROPERTIES, ProjectPropertiesClass))
+
+typedef struct _ProjectProperties ProjectProperties;
+typedef struct _ProjectPropertiesClass ProjectPropertiesClass;
+typedef struct _ProjectPropertiesPrivate ProjectPropertiesPrivate;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _g_free0(var) (var = (g_free (var), NULL))
+
+struct _ProjectProperties {
+ GtkDialog parent_instance;
+ ProjectPropertiesPrivate * priv;
+};
+
+struct _ProjectPropertiesClass {
+ GtkDialogClass parent_class;
+};
+
+struct _ProjectPropertiesPrivate {
+ GTimeVal* tap_time;
+ gint tap_time_length1;
+ gint _tap_time_size_;
+ gint tap_index;
+ gboolean sample_full;
+ GtkAdjustment* tempo_adjustment;
+ GtkAdjustment* volume_adjustment;
+ GtkComboBox* timesignature_combo;
+ GtkToggleButton* click_during_play;
+ GtkToggleButton* click_during_record;
+};
+
+
+static gpointer project_properties_parent_class = NULL;
+
+GType project_properties_get_type (void);
+#define PROJECT_PROPERTIES_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_PROJECT_PROPERTIES, ProjectPropertiesPrivate))
+enum {
+ PROJECT_PROPERTIES_DUMMY_PROPERTY
+};
+#define PROJECT_PROPERTIES_NUMBER_OF_SAMPLES 4
+#define PROJECT_PROPERTIES_G_USEC_PER_SEC ((glong) 1000000)
+void project_properties_set_tempo (ProjectProperties* self, gint tempo);
+void project_properties_set_volume (ProjectProperties* self, double volume);
+static void project_properties_set_during_play (ProjectProperties* self, gboolean active);
+static void project_properties_set_during_record (ProjectProperties* self, gboolean active);
+static void project_properties_set_time_signature (ProjectProperties* self, Fraction* time_signature);
+void project_properties_setup (ProjectProperties* self, ModelProject* project, GtkBuilder* builder);
+gint project_properties_get_tempo (ProjectProperties* self);
+double project_properties_get_click_volume (ProjectProperties* self);
+void project_properties_get_time_signature (ProjectProperties* self, Fraction* result);
+gboolean project_properties_during_play (ProjectProperties* self);
+gboolean project_properties_during_record (ProjectProperties* self);
+static void project_properties_calculate_bpm (ProjectProperties* self);
+void project_properties_on_tap (ProjectProperties* self);
+ProjectProperties* project_properties_new (void);
+ProjectProperties* project_properties_construct (GType object_type);
+static void project_properties_finalize (GObject* obj);
+static int _vala_strcmp0 (const char * str1, const char * str2);
+
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+ return self ? g_object_ref (self) : NULL;
+}
+
+
+#line 20 "ProjectProperties.vala"
+void project_properties_setup (ProjectProperties* self, ModelProject* project, GtkBuilder* builder) {
+#line 93 "ProjectProperties.c"
+ GtkAdjustment* _tmp0_;
+ GtkAdjustment* _tmp1_;
+ GtkComboBox* _tmp2_;
+ GtkToggleButton* _tmp3_;
+ GtkToggleButton* _tmp4_;
+ Fraction _tmp6_;
+ Fraction _tmp5_ = {0};
+#line 20 "ProjectProperties.vala"
+ g_return_if_fail (IS_PROJECT_PROPERTIES (self));
+#line 20 "ProjectProperties.vala"
+ g_return_if_fail (MODEL_IS_PROJECT (project));
+#line 20 "ProjectProperties.vala"
+ g_return_if_fail (GTK_IS_BUILDER (builder));
+#line 21 "ProjectProperties.vala"
+ self->priv->tempo_adjustment = (_tmp0_ = _g_object_ref0 (GTK_ADJUSTMENT (gtk_builder_get_object (builder, "tempo_adjustment"))), _g_object_unref0 (self->priv->tempo_adjustment), _tmp0_);
+#line 22 "ProjectProperties.vala"
+ self->priv->volume_adjustment = (_tmp1_ = _g_object_ref0 (GTK_ADJUSTMENT (gtk_builder_get_object (builder, "volume_adjustment"))), _g_object_unref0 (self->priv->volume_adjustment), _tmp1_);
+#line 23 "ProjectProperties.vala"
+ self->priv->timesignature_combo = (_tmp2_ = _g_object_ref0 (GTK_COMBO_BOX (gtk_builder_get_object (builder, "timesignature_combo"))), _g_object_unref0 (self->priv->timesignature_combo), _tmp2_);
+#line 24 "ProjectProperties.vala"
+ self->priv->click_during_play = (_tmp3_ = _g_object_ref0 (GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "playback"))), _g_object_unref0 (self->priv->click_during_play), _tmp3_);
+#line 25 "ProjectProperties.vala"
+ self->priv->click_during_record = (_tmp4_ = _g_object_ref0 (GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "record"))), _g_object_unref0 (self->priv->click_during_record), _tmp4_);
+#line 26 "ProjectProperties.vala"
+ project_properties_set_tempo (self, model_tempo_information_get_bpm (MODEL_TEMPO_INFORMATION (project)));
+#line 27 "ProjectProperties.vala"
+ project_properties_set_volume (self, project->click_volume);
+#line 28 "ProjectProperties.vala"
+ project_properties_set_during_play (self, project->click_during_play);
+#line 29 "ProjectProperties.vala"
+ project_properties_set_during_record (self, project->click_during_record);
+#line 30 "ProjectProperties.vala"
+ project_properties_set_time_signature (self, (_tmp6_ = (model_tempo_information_get_time_signature (MODEL_TEMPO_INFORMATION (project), &_tmp5_), _tmp5_), &_tmp6_));
+#line 127 "ProjectProperties.c"
+}
+
+
+#line 33 "ProjectProperties.vala"
+void project_properties_set_tempo (ProjectProperties* self, gint tempo) {
+#line 33 "ProjectProperties.vala"
+ g_return_if_fail (IS_PROJECT_PROPERTIES (self));
+#line 34 "ProjectProperties.vala"
+ gtk_adjustment_set_value (self->priv->tempo_adjustment, (double) tempo);
+#line 137 "ProjectProperties.c"
+}
+
+
+#line 37 "ProjectProperties.vala"
+gint project_properties_get_tempo (ProjectProperties* self) {
+#line 143 "ProjectProperties.c"
+ gint result = 0;
+#line 37 "ProjectProperties.vala"
+ g_return_val_if_fail (IS_PROJECT_PROPERTIES (self), 0);
+#line 147 "ProjectProperties.c"
+ result = (gint) gtk_adjustment_get_value (self->priv->tempo_adjustment);
+#line 38 "ProjectProperties.vala"
+ return result;
+#line 151 "ProjectProperties.c"
+}
+
+
+#line 41 "ProjectProperties.vala"
+void project_properties_set_volume (ProjectProperties* self, double volume) {
+#line 41 "ProjectProperties.vala"
+ g_return_if_fail (IS_PROJECT_PROPERTIES (self));
+#line 42 "ProjectProperties.vala"
+ gtk_adjustment_set_value (self->priv->volume_adjustment, volume);
+#line 161 "ProjectProperties.c"
+}
+
+
+#line 45 "ProjectProperties.vala"
+double project_properties_get_click_volume (ProjectProperties* self) {
+#line 167 "ProjectProperties.c"
+ double result = 0.0;
+#line 45 "ProjectProperties.vala"
+ g_return_val_if_fail (IS_PROJECT_PROPERTIES (self), 0.0);
+#line 171 "ProjectProperties.c"
+ result = gtk_adjustment_get_value (self->priv->volume_adjustment);
+#line 46 "ProjectProperties.vala"
+ return result;
+#line 175 "ProjectProperties.c"
+}
+
+
+#line 49 "ProjectProperties.vala"
+void project_properties_get_time_signature (ProjectProperties* self, Fraction* result) {
+#line 181 "ProjectProperties.c"
+ Fraction _tmp0_ = {0};
+#line 49 "ProjectProperties.vala"
+ g_return_if_fail (IS_PROJECT_PROPERTIES (self));
+#line 185 "ProjectProperties.c"
+ *result = (fraction_init_from_string (&_tmp0_, gtk_combo_box_get_active_text (self->priv->timesignature_combo)), _tmp0_);
+#line 50 "ProjectProperties.vala"
+ return;
+#line 189 "ProjectProperties.c"
+}
+
+
+#line 53 "ProjectProperties.vala"
+static void project_properties_set_time_signature (ProjectProperties* self, Fraction* time_signature) {
+#line 195 "ProjectProperties.c"
+ char* sig;
+ GtkTreeIter iter = {0};
+#line 53 "ProjectProperties.vala"
+ g_return_if_fail (IS_PROJECT_PROPERTIES (self));
+#line 54 "ProjectProperties.vala"
+ sig = fraction_to_string (time_signature);
+#line 57 "ProjectProperties.vala"
+ if (gtk_tree_model_get_iter_first (gtk_combo_box_get_model (self->priv->timesignature_combo), &iter)) {
+#line 204 "ProjectProperties.c"
+ {
+ gboolean _tmp0_;
+#line 58 "ProjectProperties.vala"
+ _tmp0_ = TRUE;
+#line 58 "ProjectProperties.vala"
+ while (TRUE) {
+#line 211 "ProjectProperties.c"
+ char* s;
+#line 58 "ProjectProperties.vala"
+ if (!_tmp0_) {
+#line 65 "ProjectProperties.vala"
+ if (!gtk_tree_model_iter_next (gtk_combo_box_get_model (self->priv->timesignature_combo), &iter)) {
+#line 65 "ProjectProperties.vala"
+ break;
+#line 219 "ProjectProperties.c"
+ }
+ }
+#line 58 "ProjectProperties.vala"
+ _tmp0_ = FALSE;
+#line 224 "ProjectProperties.c"
+ s = NULL;
+#line 60 "ProjectProperties.vala"
+ gtk_tree_model_get (gtk_combo_box_get_model (self->priv->timesignature_combo), &iter, 0, &s, -1, -1);
+#line 61 "ProjectProperties.vala"
+ if (_vala_strcmp0 (s, sig) == 0) {
+#line 62 "ProjectProperties.vala"
+ gtk_combo_box_set_active_iter (self->priv->timesignature_combo, &iter);
+#line 232 "ProjectProperties.c"
+ _g_free0 (s);
+ _g_free0 (sig);
+#line 63 "ProjectProperties.vala"
+ return;
+#line 237 "ProjectProperties.c"
+ }
+ _g_free0 (s);
+ }
+ }
+ }
+ _g_free0 (sig);
+}
+
+
+#line 69 "ProjectProperties.vala"
+static void project_properties_set_during_play (ProjectProperties* self, gboolean active) {
+#line 69 "ProjectProperties.vala"
+ g_return_if_fail (IS_PROJECT_PROPERTIES (self));
+#line 70 "ProjectProperties.vala"
+ gtk_toggle_button_set_active (self->priv->click_during_play, active);
+#line 253 "ProjectProperties.c"
+}
+
+
+#line 73 "ProjectProperties.vala"
+gboolean project_properties_during_play (ProjectProperties* self) {
+#line 259 "ProjectProperties.c"
+ gboolean result = FALSE;
+#line 73 "ProjectProperties.vala"
+ g_return_val_if_fail (IS_PROJECT_PROPERTIES (self), FALSE);
+#line 263 "ProjectProperties.c"
+ result = gtk_toggle_button_get_active (self->priv->click_during_play);
+#line 74 "ProjectProperties.vala"
+ return result;
+#line 267 "ProjectProperties.c"
+}
+
+
+#line 77 "ProjectProperties.vala"
+static void project_properties_set_during_record (ProjectProperties* self, gboolean active) {
+#line 77 "ProjectProperties.vala"
+ g_return_if_fail (IS_PROJECT_PROPERTIES (self));
+#line 78 "ProjectProperties.vala"
+ gtk_toggle_button_set_active (self->priv->click_during_record, active);
+#line 277 "ProjectProperties.c"
+}
+
+
+#line 81 "ProjectProperties.vala"
+gboolean project_properties_during_record (ProjectProperties* self) {
+#line 283 "ProjectProperties.c"
+ gboolean result = FALSE;
+#line 81 "ProjectProperties.vala"
+ g_return_val_if_fail (IS_PROJECT_PROPERTIES (self), FALSE);
+#line 287 "ProjectProperties.c"
+ result = gtk_toggle_button_get_active (self->priv->click_during_record);
+#line 82 "ProjectProperties.vala"
+ return result;
+#line 291 "ProjectProperties.c"
+}
+
+
+#line 85 "ProjectProperties.vala"
+void project_properties_on_tap (ProjectProperties* self) {
+#line 297 "ProjectProperties.c"
+ GTimeVal time_val = {0};
+#line 85 "ProjectProperties.vala"
+ g_return_if_fail (IS_PROJECT_PROPERTIES (self));
+#line 301 "ProjectProperties.c"
+ g_get_current_time (&time_val);
+#line 87 "ProjectProperties.vala"
+ g_get_current_time (&time_val);
+#line 88 "ProjectProperties.vala"
+ self->priv->tap_time[self->priv->tap_index] = time_val;
+#line 89 "ProjectProperties.vala"
+ self->priv->tap_index = self->priv->tap_index + 1;
+#line 90 "ProjectProperties.vala"
+ if (self->priv->tap_index == PROJECT_PROPERTIES_NUMBER_OF_SAMPLES) {
+#line 91 "ProjectProperties.vala"
+ self->priv->sample_full = TRUE;
+#line 92 "ProjectProperties.vala"
+ self->priv->tap_index = 0;
+#line 315 "ProjectProperties.c"
+ }
+#line 94 "ProjectProperties.vala"
+ project_properties_calculate_bpm (self);
+#line 319 "ProjectProperties.c"
+}
+
+
+#line 97 "ProjectProperties.vala"
+static void project_properties_calculate_bpm (ProjectProperties* self) {
+#line 325 "ProjectProperties.c"
+ gint _tmp0_ = 0;
+ gint number_of_samples;
+ gint _tmp1_ = 0;
+ gint start_index;
+ double delta_sum;
+ double average;
+#line 97 "ProjectProperties.vala"
+ g_return_if_fail (IS_PROJECT_PROPERTIES (self));
+#line 98 "ProjectProperties.vala"
+ if (self->priv->sample_full) {
+#line 98 "ProjectProperties.vala"
+ _tmp0_ = PROJECT_PROPERTIES_NUMBER_OF_SAMPLES;
+#line 338 "ProjectProperties.c"
+ } else {
+#line 98 "ProjectProperties.vala"
+ _tmp0_ = self->priv->tap_index;
+#line 342 "ProjectProperties.c"
+ }
+#line 98 "ProjectProperties.vala"
+ number_of_samples = _tmp0_;
+#line 99 "ProjectProperties.vala"
+ if (number_of_samples < 2) {
+#line 100 "ProjectProperties.vala"
+ return;
+#line 350 "ProjectProperties.c"
+ }
+#line 103 "ProjectProperties.vala"
+ if (self->priv->sample_full) {
+#line 103 "ProjectProperties.vala"
+ _tmp1_ = self->priv->tap_index;
+#line 356 "ProjectProperties.c"
+ } else {
+#line 103 "ProjectProperties.vala"
+ _tmp1_ = 0;
+#line 360 "ProjectProperties.c"
+ }
+#line 103 "ProjectProperties.vala"
+ start_index = _tmp1_;
+#line 105 "ProjectProperties.vala"
+ delta_sum = (double) 0;
+#line 366 "ProjectProperties.c"
+ {
+ gint i;
+#line 106 "ProjectProperties.vala"
+ i = 0;
+#line 371 "ProjectProperties.c"
+ {
+ gboolean _tmp2_;
+#line 106 "ProjectProperties.vala"
+ _tmp2_ = TRUE;
+#line 106 "ProjectProperties.vala"
+ while (TRUE) {
+#line 378 "ProjectProperties.c"
+ gint current_index;
+ gint next_index;
+ glong difference;
+#line 106 "ProjectProperties.vala"
+ if (!_tmp2_) {
+#line 106 "ProjectProperties.vala"
+ i = i + 1;
+#line 386 "ProjectProperties.c"
+ }
+#line 106 "ProjectProperties.vala"
+ _tmp2_ = FALSE;
+#line 106 "ProjectProperties.vala"
+ if (!(i < (number_of_samples - 1))) {
+#line 106 "ProjectProperties.vala"
+ break;
+#line 394 "ProjectProperties.c"
+ }
+#line 107 "ProjectProperties.vala"
+ current_index = (i + start_index) % PROJECT_PROPERTIES_NUMBER_OF_SAMPLES;
+#line 108 "ProjectProperties.vala"
+ next_index = (current_index + 1) % PROJECT_PROPERTIES_NUMBER_OF_SAMPLES;
+#line 110 "ProjectProperties.vala"
+ difference = (((self->priv->tap_time[next_index].tv_sec - self->priv->tap_time[current_index].tv_sec) * PROJECT_PROPERTIES_G_USEC_PER_SEC) + self->priv->tap_time[next_index].tv_usec) - self->priv->tap_time[current_index].tv_usec;
+#line 113 "ProjectProperties.vala"
+ if (difference > (5 * PROJECT_PROPERTIES_G_USEC_PER_SEC)) {
+#line 115 "ProjectProperties.vala"
+ self->priv->tap_time[0] = self->priv->tap_time[self->priv->tap_index - 1];
+#line 116 "ProjectProperties.vala"
+ self->priv->sample_full = FALSE;
+#line 117 "ProjectProperties.vala"
+ self->priv->tap_index = 1;
+#line 118 "ProjectProperties.vala"
+ return;
+#line 412 "ProjectProperties.c"
+ }
+#line 120 "ProjectProperties.vala"
+ delta_sum = delta_sum + ((double) difference);
+#line 416 "ProjectProperties.c"
+ }
+ }
+ }
+#line 122 "ProjectProperties.vala"
+ average = (delta_sum / (number_of_samples - 1)) / PROJECT_PROPERTIES_G_USEC_PER_SEC;
+#line 123 "ProjectProperties.vala"
+ gtk_adjustment_set_value (self->priv->tempo_adjustment, (double) ((gint) (60.0 / average)));
+#line 424 "ProjectProperties.c"
+}
+
+
+#line 7 "ProjectProperties.vala"
+ProjectProperties* project_properties_construct (GType object_type) {
+#line 430 "ProjectProperties.c"
+ ProjectProperties * self;
+ self = g_object_newv (object_type, 0, NULL);
+ return self;
+}
+
+
+#line 7 "ProjectProperties.vala"
+ProjectProperties* project_properties_new (void) {
+#line 7 "ProjectProperties.vala"
+ return project_properties_construct (TYPE_PROJECT_PROPERTIES);
+#line 441 "ProjectProperties.c"
+}
+
+
+static void project_properties_class_init (ProjectPropertiesClass * klass) {
+ project_properties_parent_class = g_type_class_peek_parent (klass);
+ g_type_class_add_private (klass, sizeof (ProjectPropertiesPrivate));
+ G_OBJECT_CLASS (klass)->finalize = project_properties_finalize;
+}
+
+
+static void project_properties_instance_init (ProjectProperties * self) {
+ self->priv = PROJECT_PROPERTIES_GET_PRIVATE (self);
+ self->priv->tap_time = g_new0 (GTimeVal, PROJECT_PROPERTIES_NUMBER_OF_SAMPLES);
+ self->priv->tap_time_length1 = PROJECT_PROPERTIES_NUMBER_OF_SAMPLES;
+ self->priv->_tap_time_size_ = self->priv->tap_time_length1;
+ self->priv->tap_index = 0;
+ self->priv->sample_full = FALSE;
+}
+
+
+static void project_properties_finalize (GObject* obj) {
+ ProjectProperties * self;
+ self = PROJECT_PROPERTIES (obj);
+ self->priv->tap_time = (g_free (self->priv->tap_time), NULL);
+ _g_object_unref0 (self->priv->tempo_adjustment);
+ _g_object_unref0 (self->priv->volume_adjustment);
+ _g_object_unref0 (self->priv->timesignature_combo);
+ _g_object_unref0 (self->priv->click_during_play);
+ _g_object_unref0 (self->priv->click_during_record);
+ G_OBJECT_CLASS (project_properties_parent_class)->finalize (obj);
+}
+
+
+GType project_properties_get_type (void) {
+ static volatile gsize project_properties_type_id__volatile = 0;
+ if (g_once_init_enter (&project_properties_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (ProjectPropertiesClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) project_properties_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ProjectProperties), 0, (GInstanceInitFunc) project_properties_instance_init, NULL };
+ GType project_properties_type_id;
+ project_properties_type_id = g_type_register_static (GTK_TYPE_DIALOG, "ProjectProperties", &g_define_type_info, 0);
+ g_once_init_leave (&project_properties_type_id__volatile, project_properties_type_id);
+ }
+ return project_properties_type_id__volatile;
+}
+
+
+static int _vala_strcmp0 (const char * str1, const char * str2) {
+ if (str1 == NULL) {
+ return -(str1 != str2);
+ }
+ if (str2 == NULL) {
+ return str1 != str2;
+ }
+ return strcmp (str1, str2);
+}
+
+
+
+
--- /dev/null
+/* VolumeAndPanPopUp.c generated by valac, the Vala compiler
+ * generated from VolumeAndPanPopUp.vala, do not modify */
+
+/* Demo Recorder for MAEMO 5
+* Copyright (C) 2010 Dru Moore <usr@dru-id.co.uk>
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License version 2,
+* or (at your option) any later version, as published by the Free
+* Software Foundation
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details
+*
+* You should have received a copy of the GNU General Public
+* License along with this program; if not, write to the
+* Free Software Foundation, Inc.,
+* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+
+#include <glib.h>
+#include <glib-object.h>
+#include <hildon/hildon.h>
+#include <gtk/gtk.h>
+#include <stdlib.h>
+#include <string.h>
+#include <float.h>
+#include <math.h>
+
+
+#define ID_WORKS_TYPE_VOLUME_AND_PAN_POP_UP (id_works_volume_and_pan_pop_up_get_type ())
+#define ID_WORKS_VOLUME_AND_PAN_POP_UP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ID_WORKS_TYPE_VOLUME_AND_PAN_POP_UP, IdWorksVolumeAndPanPopUp))
+#define ID_WORKS_VOLUME_AND_PAN_POP_UP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ID_WORKS_TYPE_VOLUME_AND_PAN_POP_UP, IdWorksVolumeAndPanPopUpClass))
+#define ID_WORKS_IS_VOLUME_AND_PAN_POP_UP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ID_WORKS_TYPE_VOLUME_AND_PAN_POP_UP))
+#define ID_WORKS_IS_VOLUME_AND_PAN_POP_UP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ID_WORKS_TYPE_VOLUME_AND_PAN_POP_UP))
+#define ID_WORKS_VOLUME_AND_PAN_POP_UP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ID_WORKS_TYPE_VOLUME_AND_PAN_POP_UP, IdWorksVolumeAndPanPopUpClass))
+
+typedef struct _IdWorksVolumeAndPanPopUp IdWorksVolumeAndPanPopUp;
+typedef struct _IdWorksVolumeAndPanPopUpClass IdWorksVolumeAndPanPopUpClass;
+typedef struct _IdWorksVolumeAndPanPopUpPrivate IdWorksVolumeAndPanPopUpPrivate;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+
+struct _IdWorksVolumeAndPanPopUp {
+ HildonDialog parent_instance;
+ IdWorksVolumeAndPanPopUpPrivate * priv;
+};
+
+struct _IdWorksVolumeAndPanPopUpClass {
+ HildonDialogClass parent_class;
+};
+
+struct _IdWorksVolumeAndPanPopUpPrivate {
+ GtkHScale* volume_slider;
+ GtkHScale* panorama_slider;
+};
+
+
+static gpointer id_works_volume_and_pan_pop_up_parent_class = NULL;
+
+GType id_works_volume_and_pan_pop_up_get_type (void);
+#define ID_WORKS_VOLUME_AND_PAN_POP_UP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ID_WORKS_TYPE_VOLUME_AND_PAN_POP_UP, IdWorksVolumeAndPanPopUpPrivate))
+enum {
+ ID_WORKS_VOLUME_AND_PAN_POP_UP_DUMMY_PROPERTY
+};
+static void _lambda0_ (GtkRange* s, IdWorksVolumeAndPanPopUp* self);
+static void __lambda0__gtk_range_value_changed (GtkRange* _sender, gpointer self);
+static void _lambda1_ (GtkRange* s, IdWorksVolumeAndPanPopUp* self);
+static void __lambda1__gtk_range_value_changed (GtkRange* _sender, gpointer self);
+IdWorksVolumeAndPanPopUp* id_works_volume_and_pan_pop_up_new (GtkWidget* parent, const char* title);
+IdWorksVolumeAndPanPopUp* id_works_volume_and_pan_pop_up_construct (GType object_type, GtkWidget* parent, const char* title);
+void id_works_volume_and_pan_pop_up_set_volume (IdWorksVolumeAndPanPopUp* self, double volume);
+void id_works_volume_and_pan_pop_up_set_panorama (IdWorksVolumeAndPanPopUp* self, double panorama);
+static void id_works_volume_and_pan_pop_up_finalize (GObject* obj);
+
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+ return self ? g_object_ref (self) : NULL;
+}
+
+
+#line 42 "VolumeAndPanPopUp.vala"
+static void _lambda0_ (GtkRange* s, IdWorksVolumeAndPanPopUp* self) {
+#line 42 "VolumeAndPanPopUp.vala"
+ g_return_if_fail (GTK_IS_RANGE (s));
+#line 42 "VolumeAndPanPopUp.vala"
+ g_signal_emit_by_name (self, "volume-updated", gtk_range_get_value (s));
+#line 90 "VolumeAndPanPopUp.c"
+}
+
+
+#line 42 "VolumeAndPanPopUp.vala"
+static void __lambda0__gtk_range_value_changed (GtkRange* _sender, gpointer self) {
+#line 96 "VolumeAndPanPopUp.c"
+ _lambda0_ (_sender, self);
+}
+
+
+#line 50 "VolumeAndPanPopUp.vala"
+static void _lambda1_ (GtkRange* s, IdWorksVolumeAndPanPopUp* self) {
+#line 50 "VolumeAndPanPopUp.vala"
+ g_return_if_fail (GTK_IS_RANGE (s));
+#line 50 "VolumeAndPanPopUp.vala"
+ g_signal_emit_by_name (self, "panorama-updated", gtk_range_get_value (s));
+#line 107 "VolumeAndPanPopUp.c"
+}
+
+
+#line 50 "VolumeAndPanPopUp.vala"
+static void __lambda1__gtk_range_value_changed (GtkRange* _sender, gpointer self) {
+#line 113 "VolumeAndPanPopUp.c"
+ _lambda1_ (_sender, self);
+}
+
+
+#line 28 "VolumeAndPanPopUp.vala"
+IdWorksVolumeAndPanPopUp* id_works_volume_and_pan_pop_up_construct (GType object_type, GtkWidget* parent, const char* title) {
+#line 120 "VolumeAndPanPopUp.c"
+ IdWorksVolumeAndPanPopUp * self;
+ GtkVBox* control_area;
+ GtkHBox* volume_bar;
+ GtkLabel* volume_label;
+ GtkHScale* _tmp0_;
+ GtkHBox* panorama_bar;
+ GtkLabel* panorama_label;
+ GtkHScale* _tmp1_;
+#line 28 "VolumeAndPanPopUp.vala"
+ g_return_val_if_fail (GTK_IS_WIDGET (parent), NULL);
+#line 28 "VolumeAndPanPopUp.vala"
+ g_return_val_if_fail (title != NULL, NULL);
+#line 133 "VolumeAndPanPopUp.c"
+ self = g_object_newv (object_type, 0, NULL);
+#line 29 "VolumeAndPanPopUp.vala"
+ gtk_window_set_title (GTK_WINDOW (self), title);
+#line 30 "VolumeAndPanPopUp.vala"
+ gtk_widget_set_parent (GTK_WIDGET (self), parent);
+#line 32 "VolumeAndPanPopUp.vala"
+ gtk_dialog_set_default_response (GTK_DIALOG (self), (gint) GTK_RESPONSE_ACCEPT);
+#line 33 "VolumeAndPanPopUp.vala"
+ hildon_dialog_add_button (HILDON_DIALOG (self), GTK_STOCK_CLOSE, (gint) GTK_RESPONSE_ACCEPT);
+#line 35 "VolumeAndPanPopUp.vala"
+ control_area = _g_object_ref0 (GTK_VBOX (gtk_dialog_get_content_area (GTK_DIALOG (self))));
+#line 37 "VolumeAndPanPopUp.vala"
+ volume_bar = g_object_ref_sink ((GtkHBox*) gtk_hbox_new (FALSE, 2));
+#line 38 "VolumeAndPanPopUp.vala"
+ volume_label = g_object_ref_sink ((GtkLabel*) gtk_label_new ("Volume"));
+#line 39 "VolumeAndPanPopUp.vala"
+ gtk_box_pack_start (GTK_BOX (volume_bar), GTK_WIDGET (volume_label), FALSE, FALSE, (guint) 2);
+#line 40 "VolumeAndPanPopUp.vala"
+ self->priv->volume_slider = (_tmp0_ = g_object_ref_sink ((GtkHScale*) gtk_hscale_new_with_range (0.0, 10.0, 0.05)), _g_object_unref0 (self->priv->volume_slider), _tmp0_);
+#line 41 "VolumeAndPanPopUp.vala"
+ gtk_scale_set_value_pos (GTK_SCALE (self->priv->volume_slider), GTK_POS_LEFT);
+#line 42 "VolumeAndPanPopUp.vala"
+ g_signal_connect_object (GTK_RANGE (self->priv->volume_slider), "value-changed", (GCallback) __lambda0__gtk_range_value_changed, self, 0);
+#line 43 "VolumeAndPanPopUp.vala"
+ gtk_box_pack_start (GTK_BOX (volume_bar), GTK_WIDGET (self->priv->volume_slider), TRUE, TRUE, (guint) 2);
+#line 45 "VolumeAndPanPopUp.vala"
+ panorama_bar = g_object_ref_sink ((GtkHBox*) gtk_hbox_new (FALSE, 2));
+#line 46 "VolumeAndPanPopUp.vala"
+ panorama_label = g_object_ref_sink ((GtkLabel*) gtk_label_new ("Pan"));
+#line 47 "VolumeAndPanPopUp.vala"
+ gtk_box_pack_start (GTK_BOX (panorama_bar), GTK_WIDGET (panorama_label), FALSE, FALSE, (guint) 2);
+#line 48 "VolumeAndPanPopUp.vala"
+ self->priv->panorama_slider = (_tmp1_ = g_object_ref_sink ((GtkHScale*) gtk_hscale_new_with_range (-1.0, 1.0, 0.05)), _g_object_unref0 (self->priv->panorama_slider), _tmp1_);
+#line 49 "VolumeAndPanPopUp.vala"
+ gtk_scale_set_value_pos (GTK_SCALE (self->priv->panorama_slider), GTK_POS_LEFT);
+#line 50 "VolumeAndPanPopUp.vala"
+ g_signal_connect_object (GTK_RANGE (self->priv->panorama_slider), "value-changed", (GCallback) __lambda1__gtk_range_value_changed, self, 0);
+#line 51 "VolumeAndPanPopUp.vala"
+ gtk_box_pack_start (GTK_BOX (panorama_bar), GTK_WIDGET (self->priv->panorama_slider), TRUE, TRUE, (guint) 2);
+#line 53 "VolumeAndPanPopUp.vala"
+ gtk_box_pack_start (GTK_BOX (control_area), GTK_WIDGET (volume_bar), TRUE, TRUE, (guint) 2);
+#line 54 "VolumeAndPanPopUp.vala"
+ gtk_box_pack_start (GTK_BOX (control_area), GTK_WIDGET (panorama_bar), TRUE, TRUE, (guint) 2);
+#line 55 "VolumeAndPanPopUp.vala"
+ gtk_widget_show_all (GTK_WIDGET (self));
+#line 179 "VolumeAndPanPopUp.c"
+ _g_object_unref0 (control_area);
+ _g_object_unref0 (volume_bar);
+ _g_object_unref0 (volume_label);
+ _g_object_unref0 (panorama_bar);
+ _g_object_unref0 (panorama_label);
+ return self;
+}
+
+
+#line 28 "VolumeAndPanPopUp.vala"
+IdWorksVolumeAndPanPopUp* id_works_volume_and_pan_pop_up_new (GtkWidget* parent, const char* title) {
+#line 28 "VolumeAndPanPopUp.vala"
+ return id_works_volume_and_pan_pop_up_construct (ID_WORKS_TYPE_VOLUME_AND_PAN_POP_UP, parent, title);
+#line 193 "VolumeAndPanPopUp.c"
+}
+
+
+#line 58 "VolumeAndPanPopUp.vala"
+void id_works_volume_and_pan_pop_up_set_volume (IdWorksVolumeAndPanPopUp* self, double volume) {
+#line 58 "VolumeAndPanPopUp.vala"
+ g_return_if_fail (ID_WORKS_IS_VOLUME_AND_PAN_POP_UP (self));
+#line 59 "VolumeAndPanPopUp.vala"
+ gtk_range_set_value (GTK_RANGE (self->priv->volume_slider), volume);
+#line 203 "VolumeAndPanPopUp.c"
+}
+
+
+#line 62 "VolumeAndPanPopUp.vala"
+void id_works_volume_and_pan_pop_up_set_panorama (IdWorksVolumeAndPanPopUp* self, double panorama) {
+#line 62 "VolumeAndPanPopUp.vala"
+ g_return_if_fail (ID_WORKS_IS_VOLUME_AND_PAN_POP_UP (self));
+#line 63 "VolumeAndPanPopUp.vala"
+ gtk_range_set_value (GTK_RANGE (self->priv->panorama_slider), panorama);
+#line 213 "VolumeAndPanPopUp.c"
+}
+
+
+static void id_works_volume_and_pan_pop_up_class_init (IdWorksVolumeAndPanPopUpClass * klass) {
+ id_works_volume_and_pan_pop_up_parent_class = g_type_class_peek_parent (klass);
+ g_type_class_add_private (klass, sizeof (IdWorksVolumeAndPanPopUpPrivate));
+ G_OBJECT_CLASS (klass)->finalize = id_works_volume_and_pan_pop_up_finalize;
+ g_signal_new ("volume_updated", ID_WORKS_TYPE_VOLUME_AND_PAN_POP_UP, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__DOUBLE, G_TYPE_NONE, 1, G_TYPE_DOUBLE);
+ g_signal_new ("panorama_updated", ID_WORKS_TYPE_VOLUME_AND_PAN_POP_UP, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__DOUBLE, G_TYPE_NONE, 1, G_TYPE_DOUBLE);
+}
+
+
+static void id_works_volume_and_pan_pop_up_instance_init (IdWorksVolumeAndPanPopUp * self) {
+ self->priv = ID_WORKS_VOLUME_AND_PAN_POP_UP_GET_PRIVATE (self);
+}
+
+
+static void id_works_volume_and_pan_pop_up_finalize (GObject* obj) {
+ IdWorksVolumeAndPanPopUp * self;
+ self = ID_WORKS_VOLUME_AND_PAN_POP_UP (obj);
+ _g_object_unref0 (self->priv->volume_slider);
+ _g_object_unref0 (self->priv->panorama_slider);
+ G_OBJECT_CLASS (id_works_volume_and_pan_pop_up_parent_class)->finalize (obj);
+}
+
+
+GType id_works_volume_and_pan_pop_up_get_type (void) {
+ static volatile gsize id_works_volume_and_pan_pop_up_type_id__volatile = 0;
+ if (g_once_init_enter (&id_works_volume_and_pan_pop_up_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (IdWorksVolumeAndPanPopUpClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) id_works_volume_and_pan_pop_up_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (IdWorksVolumeAndPanPopUp), 0, (GInstanceInitFunc) id_works_volume_and_pan_pop_up_instance_init, NULL };
+ GType id_works_volume_and_pan_pop_up_type_id;
+ id_works_volume_and_pan_pop_up_type_id = g_type_register_static (HILDON_TYPE_DIALOG, "IdWorksVolumeAndPanPopUp", &g_define_type_info, 0);
+ g_once_init_leave (&id_works_volume_and_pan_pop_up_type_id__volatile, id_works_volume_and_pan_pop_up_type_id);
+ }
+ return id_works_volume_and_pan_pop_up_type_id__volatile;
+}
+
+
+
+
--- /dev/null
+/* audio_project.c generated by valac, the Vala compiler
+ * generated from audio_project.vala, do not modify */
+
+/* Copyright 2009-2010 Yorba Foundation
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+#include <marina.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <gee.h>
+#include <glib/gstdio.h>
+
+
+#define MODEL_TYPE_RECORD_FETCHER_COMPLETION (model_record_fetcher_completion_get_type ())
+#define MODEL_RECORD_FETCHER_COMPLETION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_RECORD_FETCHER_COMPLETION, ModelRecordFetcherCompletion))
+#define MODEL_RECORD_FETCHER_COMPLETION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_RECORD_FETCHER_COMPLETION, ModelRecordFetcherCompletionClass))
+#define MODEL_IS_RECORD_FETCHER_COMPLETION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_RECORD_FETCHER_COMPLETION))
+#define MODEL_IS_RECORD_FETCHER_COMPLETION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_RECORD_FETCHER_COMPLETION))
+#define MODEL_RECORD_FETCHER_COMPLETION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_RECORD_FETCHER_COMPLETION, ModelRecordFetcherCompletionClass))
+
+typedef struct _ModelRecordFetcherCompletion ModelRecordFetcherCompletion;
+typedef struct _ModelRecordFetcherCompletionClass ModelRecordFetcherCompletionClass;
+typedef struct _ModelRecordFetcherCompletionPrivate ModelRecordFetcherCompletionPrivate;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _g_free0(var) (var = (g_free (var), NULL))
+
+#define MODEL_TYPE_AUDIO_PROJECT (model_audio_project_get_type ())
+#define MODEL_AUDIO_PROJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_AUDIO_PROJECT, ModelAudioProject))
+#define MODEL_AUDIO_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_AUDIO_PROJECT, ModelAudioProjectClass))
+#define MODEL_IS_AUDIO_PROJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_AUDIO_PROJECT))
+#define MODEL_IS_AUDIO_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_AUDIO_PROJECT))
+#define MODEL_AUDIO_PROJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_AUDIO_PROJECT, ModelAudioProjectClass))
+
+typedef struct _ModelAudioProject ModelAudioProject;
+typedef struct _ModelAudioProjectClass ModelAudioProjectClass;
+typedef struct _ModelAudioProjectPrivate ModelAudioProjectPrivate;
+#define _g_regex_unref0(var) ((var == NULL) ? NULL : (var = (g_regex_unref (var), NULL)))
+#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
+#define _model_fetcher_completion_unref0(var) ((var == NULL) ? NULL : (var = (model_fetcher_completion_unref (var), NULL)))
+#define _g_dir_close0(var) ((var == NULL) ? NULL : (var = (g_dir_close (var), NULL)))
+
+struct _ModelRecordFetcherCompletion {
+ ModelFetcherCompletion parent_instance;
+ ModelRecordFetcherCompletionPrivate * priv;
+};
+
+struct _ModelRecordFetcherCompletionClass {
+ ModelFetcherCompletionClass parent_class;
+};
+
+struct _ModelRecordFetcherCompletionPrivate {
+ ModelTrack* track;
+ ModelProject* project;
+ gint64 position;
+};
+
+struct _ModelAudioProject {
+ ModelProject parent_instance;
+ ModelAudioProjectPrivate * priv;
+};
+
+struct _ModelAudioProjectClass {
+ ModelProjectClass parent_class;
+};
+
+struct _ModelAudioProjectPrivate {
+ gboolean has_been_saved;
+};
+
+
+static gpointer model_record_fetcher_completion_parent_class = NULL;
+static gpointer model_audio_project_parent_class = NULL;
+
+GType model_record_fetcher_completion_get_type (void);
+#define MODEL_RECORD_FETCHER_COMPLETION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_RECORD_FETCHER_COMPLETION, ModelRecordFetcherCompletionPrivate))
+enum {
+ MODEL_RECORD_FETCHER_COMPLETION_DUMMY_PROPERTY
+};
+ModelRecordFetcherCompletion* model_record_fetcher_completion_new (ModelProject* project, ModelTrack* track, gint64 position);
+ModelRecordFetcherCompletion* model_record_fetcher_completion_construct (GType object_type, ModelProject* project, ModelTrack* track, gint64 position);
+static void model_record_fetcher_completion_real_complete (ModelFetcherCompletion* base, ModelFetcher* fetch);
+static void model_record_fetcher_completion_finalize (ModelFetcherCompletion* obj);
+GType model_audio_project_get_type (void);
+#define MODEL_AUDIO_PROJECT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_AUDIO_PROJECT, ModelAudioProjectPrivate))
+enum {
+ MODEL_AUDIO_PROJECT_DUMMY_PROPERTY
+};
+static char* model_audio_project_generate_filename (ModelAudioProject* self);
+static void _view_media_engine_on_callback_pulse_view_media_engine_callback_pulse (ViewMediaEngine* _sender, gpointer self);
+void model_audio_project_on_record_completed (ModelAudioProject* self);
+static void _model_audio_project_on_record_completed_view_media_engine_record_completed (ViewMediaEngine* _sender, gpointer self);
+ModelAudioProject* model_audio_project_new (const char* filename, GError** error);
+ModelAudioProject* model_audio_project_construct (GType object_type, const char* filename, GError** error);
+static void model_audio_project_real_get_clip_time (ModelProject* base, ModelClipFile* f, TimeCode* result);
+static char* model_audio_project_real_get_project_file (ModelProject* base);
+#define RECORDER_NAME "Fillmore"
+static char* model_audio_project_real_get_app_name (ModelProject* base);
+static void model_audio_project_real_add_track (ModelProject* base, ModelTrack* track);
+void model_audio_project_record (ModelAudioProject* self, ModelAudioTrack* track);
+static void model_audio_project_real_load (ModelProject* base, const char* filename);
+static void model_audio_project_move_audio_files (ModelAudioProject* self, const char* filename);
+static void model_audio_project_real_save (ModelProject* base, const char* filename);
+static void model_audio_project_finalize (GObject* obj);
+static int _vala_strcmp0 (const char * str1, const char * str2);
+
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+ return self ? g_object_ref (self) : NULL;
+}
+
+
+#line 15 "audio_project.vala"
+ModelRecordFetcherCompletion* model_record_fetcher_completion_construct (GType object_type, ModelProject* project, ModelTrack* track, gint64 position) {
+#line 122 "audio_project.c"
+ ModelRecordFetcherCompletion* self;
+ ModelTrack* _tmp0_;
+ ModelProject* _tmp1_;
+#line 15 "audio_project.vala"
+ g_return_val_if_fail (MODEL_IS_PROJECT (project), NULL);
+#line 15 "audio_project.vala"
+ g_return_val_if_fail (MODEL_IS_TRACK (track), NULL);
+#line 16 "audio_project.vala"
+ self = (ModelRecordFetcherCompletion*) model_fetcher_completion_construct (object_type);
+#line 17 "audio_project.vala"
+ self->priv->track = (_tmp0_ = _g_object_ref0 (track), _g_object_unref0 (self->priv->track), _tmp0_);
+#line 18 "audio_project.vala"
+ self->priv->project = (_tmp1_ = _g_object_ref0 (project), _g_object_unref0 (self->priv->project), _tmp1_);
+#line 19 "audio_project.vala"
+ self->priv->position = position;
+#line 138 "audio_project.c"
+ return self;
+}
+
+
+#line 15 "audio_project.vala"
+ModelRecordFetcherCompletion* model_record_fetcher_completion_new (ModelProject* project, ModelTrack* track, gint64 position) {
+#line 15 "audio_project.vala"
+ return model_record_fetcher_completion_construct (MODEL_TYPE_RECORD_FETCHER_COMPLETION, project, track, position);
+#line 147 "audio_project.c"
+}
+
+
+#line 22 "audio_project.vala"
+static void model_record_fetcher_completion_real_complete (ModelFetcherCompletion* base, ModelFetcher* fetch) {
+#line 153 "audio_project.c"
+ ModelRecordFetcherCompletion * self;
+ char* _tmp0_;
+ ModelClip* _tmp1_;
+ ModelClip* the_clip;
+ self = MODEL_RECORD_FETCHER_COMPLETION (base);
+#line 22 "audio_project.vala"
+ g_return_if_fail (MODEL_IS_FETCHER (fetch));
+#line 23 "audio_project.vala"
+ MODEL_FETCHER_COMPLETION_CLASS (model_record_fetcher_completion_parent_class)->complete (MODEL_FETCHER_COMPLETION (self), fetch);
+#line 24 "audio_project.vala"
+ the_clip = (_tmp1_ = model_clip_new (fetch->clipfile, MODEL_MEDIA_TYPE_AUDIO, _tmp0_ = isolate_filename (fetch->clipfile->filename), (gint64) 0, (gint64) 0, model_clip_file_get_length (fetch->clipfile), FALSE), _g_free0 (_tmp0_), _tmp1_);
+#line 26 "audio_project.vala"
+ model_undo_manager_start_transaction (self->priv->project->undo_manager, "Record");
+#line 27 "audio_project.vala"
+ model_track_append_at_time (self->priv->track, the_clip, self->priv->position, TRUE);
+#line 28 "audio_project.vala"
+ model_undo_manager_end_transaction (self->priv->project->undo_manager, "Record");
+#line 171 "audio_project.c"
+ _g_object_unref0 (the_clip);
+}
+
+
+static void model_record_fetcher_completion_class_init (ModelRecordFetcherCompletionClass * klass) {
+ model_record_fetcher_completion_parent_class = g_type_class_peek_parent (klass);
+ MODEL_FETCHER_COMPLETION_CLASS (klass)->finalize = model_record_fetcher_completion_finalize;
+ g_type_class_add_private (klass, sizeof (ModelRecordFetcherCompletionPrivate));
+ MODEL_FETCHER_COMPLETION_CLASS (klass)->complete = model_record_fetcher_completion_real_complete;
+}
+
+
+static void model_record_fetcher_completion_instance_init (ModelRecordFetcherCompletion * self) {
+ self->priv = MODEL_RECORD_FETCHER_COMPLETION_GET_PRIVATE (self);
+}
+
+
+static void model_record_fetcher_completion_finalize (ModelFetcherCompletion* obj) {
+ ModelRecordFetcherCompletion * self;
+ self = MODEL_RECORD_FETCHER_COMPLETION (obj);
+ _g_object_unref0 (self->priv->track);
+ _g_object_unref0 (self->priv->project);
+ MODEL_FETCHER_COMPLETION_CLASS (model_record_fetcher_completion_parent_class)->finalize (obj);
+}
+
+
+GType model_record_fetcher_completion_get_type (void) {
+ static volatile gsize model_record_fetcher_completion_type_id__volatile = 0;
+ if (g_once_init_enter (&model_record_fetcher_completion_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (ModelRecordFetcherCompletionClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_record_fetcher_completion_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelRecordFetcherCompletion), 0, (GInstanceInitFunc) model_record_fetcher_completion_instance_init, NULL };
+ GType model_record_fetcher_completion_type_id;
+ model_record_fetcher_completion_type_id = g_type_register_static (MODEL_TYPE_FETCHER_COMPLETION, "ModelRecordFetcherCompletion", &g_define_type_info, 0);
+ g_once_init_leave (&model_record_fetcher_completion_type_id__volatile, model_record_fetcher_completion_type_id);
+ }
+ return model_record_fetcher_completion_type_id__volatile;
+}
+
+
+#line 75 "marina.vapi"
+static void _view_media_engine_on_callback_pulse_view_media_engine_callback_pulse (ViewMediaEngine* _sender, gpointer self) {
+#line 212 "audio_project.c"
+ view_media_engine_on_callback_pulse (self);
+}
+
+
+#line 92 "audio_project.vala"
+static void _model_audio_project_on_record_completed_view_media_engine_record_completed (ViewMediaEngine* _sender, gpointer self) {
+#line 219 "audio_project.c"
+ model_audio_project_on_record_completed (self);
+}
+
+
+#line 35 "audio_project.vala"
+ModelAudioProject* model_audio_project_construct (GType object_type, const char* filename, GError** error) {
+#line 226 "audio_project.c"
+ ModelAudioProject * self;
+#line 36 "audio_project.vala"
+ self = (ModelAudioProject*) model_project_construct (object_type, filename, FALSE, error);
+#line 38 "audio_project.vala"
+ if (self != NULL) {
+#line 39 "audio_project.vala"
+ self->priv->has_been_saved = filename != NULL;
+#line 40 "audio_project.vala"
+ if (!self->priv->has_been_saved) {
+#line 236 "audio_project.c"
+ char* _tmp1_;
+ char* *_tmp0_;
+#line 41 "audio_project.vala"
+ _tmp0_ = &MODEL_PROJECT (self)->project_file;
+#line 41 "audio_project.vala"
+ (*_tmp0_) = (_tmp1_ = model_audio_project_generate_filename (self), _g_free0 ((*_tmp0_)), _tmp1_);
+#line 243 "audio_project.c"
+ }
+#line 43 "audio_project.vala"
+ g_signal_connect_object (MODEL_PROJECT (self)->media_engine, "callback-pulse", (GCallback) _view_media_engine_on_callback_pulse_view_media_engine_callback_pulse, MODEL_PROJECT (self)->media_engine, 0);
+#line 44 "audio_project.vala"
+ g_signal_connect_object (MODEL_PROJECT (self)->media_engine, "record-completed", (GCallback) _model_audio_project_on_record_completed_view_media_engine_record_completed, self, 0);
+#line 249 "audio_project.c"
+ }
+ return self;
+}
+
+
+#line 35 "audio_project.vala"
+ModelAudioProject* model_audio_project_new (const char* filename, GError** error) {
+#line 35 "audio_project.vala"
+ return model_audio_project_construct (MODEL_TYPE_AUDIO_PROJECT, filename, error);
+#line 259 "audio_project.c"
+}
+
+
+#line 48 "audio_project.vala"
+static void model_audio_project_real_get_clip_time (ModelProject* base, ModelClipFile* f, TimeCode* result) {
+#line 265 "audio_project.c"
+ ModelAudioProject * self;
+ TimeCode _tmp0_ = {0};
+ TimeCode t;
+ self = MODEL_AUDIO_PROJECT (base);
+#line 48 "audio_project.vala"
+ g_return_if_fail (MODEL_IS_CLIP_FILE (f));
+#line 49 "audio_project.vala"
+ t = (_tmp0_);
+#line 51 "audio_project.vala"
+ time_code_get_from_length (&t, model_clip_file_get_length (f));
+#line 276 "audio_project.c"
+ *result = t;
+#line 52 "audio_project.vala"
+ return;
+#line 280 "audio_project.c"
+}
+
+
+#line 55 "audio_project.vala"
+static char* model_audio_project_real_get_project_file (ModelProject* base) {
+#line 286 "audio_project.c"
+ ModelAudioProject * self;
+ char* result = NULL;
+ self = MODEL_AUDIO_PROJECT (base);
+#line 56 "audio_project.vala"
+ if (!self->priv->has_been_saved) {
+#line 292 "audio_project.c"
+ result = NULL;
+#line 57 "audio_project.vala"
+ return result;
+#line 296 "audio_project.c"
+ } else {
+ result = MODEL_PROJECT_CLASS (model_audio_project_parent_class)->get_project_file (MODEL_PROJECT (self));
+#line 59 "audio_project.vala"
+ return result;
+#line 301 "audio_project.c"
+ }
+}
+
+
+#line 2153 "glib-2.0.vapi"
+static void g_time_local (time_t time, struct tm* result) {
+#line 308 "audio_project.c"
+ struct tm _result_ = {0};
+#line 2155 "glib-2.0.vapi"
+ localtime_r (&time, &_result_);
+#line 312 "audio_project.c"
+ *result = _result_;
+#line 2156 "glib-2.0.vapi"
+ return;
+#line 316 "audio_project.c"
+}
+
+
+#line 2159 "glib-2.0.vapi"
+static char* g_time_to_string (struct tm *self) {
+#line 322 "audio_project.c"
+ char* result = NULL;
+ result = g_strdup_printf ("%04d-%02d-%02d %02d:%02d:%02d", (*self).tm_year + 1900, (*self).tm_mon + 1, (*self).tm_mday, (*self).tm_hour, (*self).tm_min, (*self).tm_sec);
+#line 2160 "glib-2.0.vapi"
+ return result;
+#line 327 "audio_project.c"
+}
+
+
+#line 1148 "glib-2.0.vapi"
+static char* string_replace (const char* self, const char* old, const char* replacement) {
+#line 333 "audio_project.c"
+ char* result = NULL;
+ GError * _inner_error_;
+#line 1148 "glib-2.0.vapi"
+ g_return_val_if_fail (self != NULL, NULL);
+#line 1148 "glib-2.0.vapi"
+ g_return_val_if_fail (old != NULL, NULL);
+#line 1148 "glib-2.0.vapi"
+ g_return_val_if_fail (replacement != NULL, NULL);
+#line 342 "audio_project.c"
+ _inner_error_ = NULL;
+ {
+ char* _tmp0_;
+ GRegex* _tmp1_;
+ GRegex* regex;
+ char* _tmp2_;
+#line 1150 "glib-2.0.vapi"
+ regex = (_tmp1_ = g_regex_new (_tmp0_ = g_regex_escape_string (old, -1), 0, 0, &_inner_error_), _g_free0 (_tmp0_), _tmp1_);
+#line 351 "audio_project.c"
+ if (_inner_error_ != NULL) {
+ if (_inner_error_->domain == G_REGEX_ERROR) {
+ goto __catch0_g_regex_error;
+ }
+ g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+ g_clear_error (&_inner_error_);
+ return NULL;
+ }
+#line 1151 "glib-2.0.vapi"
+ _tmp2_ = g_regex_replace_literal (regex, self, (gssize) (-1), 0, replacement, 0, &_inner_error_);
+#line 362 "audio_project.c"
+ if (_inner_error_ != NULL) {
+ _g_regex_unref0 (regex);
+ if (_inner_error_->domain == G_REGEX_ERROR) {
+ goto __catch0_g_regex_error;
+ }
+ _g_regex_unref0 (regex);
+ g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+ g_clear_error (&_inner_error_);
+ return NULL;
+ }
+ result = _tmp2_;
+ _g_regex_unref0 (regex);
+#line 1151 "glib-2.0.vapi"
+ return result;
+#line 377 "audio_project.c"
+ }
+ goto __finally0;
+ __catch0_g_regex_error:
+ {
+ GError * e;
+ e = _inner_error_;
+ _inner_error_ = NULL;
+ {
+#line 1153 "glib-2.0.vapi"
+ g_assert_not_reached ();
+#line 388 "audio_project.c"
+ _g_error_free0 (e);
+ }
+ }
+ __finally0:
+ if (_inner_error_ != NULL) {
+ g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+ g_clear_error (&_inner_error_);
+ return NULL;
+ }
+}
+
+
+#line 63 "audio_project.vala"
+static char* model_audio_project_generate_filename (ModelAudioProject* self) {
+#line 403 "audio_project.c"
+ char* result = NULL;
+ struct tm _tmp0_ = {0};
+ struct tm now;
+ char* timestring;
+ char* _tmp1_;
+ char* pathname;
+ char* filename;
+#line 63 "audio_project.vala"
+ g_return_val_if_fail (MODEL_IS_AUDIO_PROJECT (self), NULL);
+#line 64 "audio_project.vala"
+ now = (g_time_local (time (NULL), &_tmp0_), _tmp0_);
+#line 65 "audio_project.vala"
+ timestring = g_time_to_string (&now);
+#line 66 "audio_project.vala"
+ timestring = (_tmp1_ = string_replace (timestring, ":", "_"), _g_free0 (timestring), _tmp1_);
+#line 67 "audio_project.vala"
+ pathname = g_build_filename (g_get_home_dir (), ".fillmore", timestring, NULL);
+#line 69 "audio_project.vala"
+ g_mkdir (pathname, 0777);
+#line 70 "audio_project.vala"
+ filename = g_strdup_printf ("%s.%s", timestring, "fill");
+#line 425 "audio_project.c"
+ result = g_build_filename (pathname, filename, NULL);
+ _g_free0 (timestring);
+ _g_free0 (pathname);
+ _g_free0 (filename);
+#line 71 "audio_project.vala"
+ return result;
+#line 432 "audio_project.c"
+}
+
+
+#line 74 "audio_project.vala"
+static char* model_audio_project_real_get_app_name (ModelProject* base) {
+#line 438 "audio_project.c"
+ ModelAudioProject * self;
+ char* result = NULL;
+ self = MODEL_AUDIO_PROJECT (base);
+ result = g_strdup (RECORDER_NAME);
+#line 75 "audio_project.vala"
+ return result;
+#line 445 "audio_project.c"
+}
+
+
+#line 78 "audio_project.vala"
+static void model_audio_project_real_add_track (ModelProject* base, ModelTrack* track) {
+#line 451 "audio_project.c"
+ ModelAudioProject * self;
+ self = MODEL_AUDIO_PROJECT (base);
+#line 78 "audio_project.vala"
+ g_return_if_fail (MODEL_IS_TRACK (track));
+#line 79 "audio_project.vala"
+ if (model_track_media_type (track) == MODEL_MEDIA_TYPE_VIDEO) {
+#line 80 "audio_project.vala"
+ model_track_hide (track);
+#line 81 "audio_project.vala"
+ gee_abstract_collection_add (GEE_ABSTRACT_COLLECTION (MODEL_PROJECT (self)->inactive_tracks), track);
+#line 82 "audio_project.vala"
+ return;
+#line 464 "audio_project.c"
+ }
+#line 85 "audio_project.vala"
+ MODEL_PROJECT_CLASS (model_audio_project_parent_class)->add_track (MODEL_PROJECT (self), track);
+#line 468 "audio_project.c"
+}
+
+
+#line 88 "audio_project.vala"
+void model_audio_project_record (ModelAudioProject* self, ModelAudioTrack* track) {
+#line 88 "audio_project.vala"
+ g_return_if_fail (MODEL_IS_AUDIO_PROJECT (self));
+#line 88 "audio_project.vala"
+ g_return_if_fail (MODEL_IS_AUDIO_TRACK (track));
+#line 89 "audio_project.vala"
+ view_media_engine_record (MODEL_PROJECT (self)->media_engine, track);
+#line 480 "audio_project.c"
+}
+
+
+#line 92 "audio_project.vala"
+void model_audio_project_on_record_completed (ModelAudioProject* self) {
+#line 486 "audio_project.c"
+ GError * _inner_error_;
+#line 92 "audio_project.vala"
+ g_return_if_fail (MODEL_IS_AUDIO_PROJECT (self));
+#line 490 "audio_project.c"
+ _inner_error_ = NULL;
+#line 93 "audio_project.vala"
+ logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_record_completed");
+#line 494 "audio_project.c"
+ {
+ ModelRecordFetcherCompletion* _tmp0_;
+#line 95 "audio_project.vala"
+ model_project_create_clip_fetcher (MODEL_PROJECT (self), MODEL_FETCHER_COMPLETION (_tmp0_ = model_record_fetcher_completion_new (MODEL_PROJECT (self), MODEL_TRACK (MODEL_PROJECT (self)->media_engine->record_track), model_clip_get_start (MODEL_PROJECT (self)->media_engine->record_region))), MODEL_PROJECT (self)->media_engine->record_region->clipfile->filename, &_inner_error_);
+#line 499 "audio_project.c"
+ _model_fetcher_completion_unref0 (_tmp0_);
+ if (_inner_error_ != NULL) {
+ goto __catch1_g_error;
+ }
+ }
+ goto __finally1;
+ __catch1_g_error:
+ {
+ GError * e;
+ e = _inner_error_;
+ _inner_error_ = NULL;
+ {
+#line 98 "audio_project.vala"
+ g_signal_emit_by_name (MODEL_PROJECT (self), "error-occurred", "Could not complete recording", e->message);
+#line 514 "audio_project.c"
+ _g_error_free0 (e);
+ }
+ }
+ __finally1:
+ if (_inner_error_ != NULL) {
+ g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+ g_clear_error (&_inner_error_);
+ return;
+ }
+}
+
+
+#line 102 "audio_project.vala"
+static void model_audio_project_real_load (ModelProject* base, const char* filename) {
+#line 529 "audio_project.c"
+ ModelAudioProject * self;
+ self = MODEL_AUDIO_PROJECT (base);
+#line 103 "audio_project.vala"
+ self->priv->has_been_saved = filename != NULL;
+#line 104 "audio_project.vala"
+ if (!self->priv->has_been_saved) {
+#line 536 "audio_project.c"
+ char* _tmp1_;
+ char* *_tmp0_;
+#line 105 "audio_project.vala"
+ _tmp0_ = &MODEL_PROJECT (self)->project_file;
+#line 105 "audio_project.vala"
+ (*_tmp0_) = (_tmp1_ = model_audio_project_generate_filename (self), _g_free0 ((*_tmp0_)), _tmp1_);
+#line 543 "audio_project.c"
+ }
+#line 107 "audio_project.vala"
+ MODEL_PROJECT_CLASS (model_audio_project_parent_class)->load (MODEL_PROJECT (self), filename);
+#line 547 "audio_project.c"
+}
+
+
+#line 110 "audio_project.vala"
+static void model_audio_project_real_save (ModelProject* base, const char* filename) {
+#line 553 "audio_project.c"
+ ModelAudioProject * self;
+ gboolean _tmp0_ = FALSE;
+ self = MODEL_AUDIO_PROJECT (base);
+#line 111 "audio_project.vala"
+ if (!self->priv->has_been_saved) {
+#line 111 "audio_project.vala"
+ _tmp0_ = filename != NULL;
+#line 561 "audio_project.c"
+ } else {
+#line 111 "audio_project.vala"
+ _tmp0_ = FALSE;
+#line 565 "audio_project.c"
+ }
+#line 111 "audio_project.vala"
+ if (_tmp0_) {
+#line 569 "audio_project.c"
+ char* _tmp1_;
+#line 112 "audio_project.vala"
+ model_audio_project_move_audio_files (self, filename);
+#line 113 "audio_project.vala"
+ g_remove (MODEL_PROJECT (self)->project_file);
+#line 114 "audio_project.vala"
+ g_rmdir (_tmp1_ = g_path_get_dirname (MODEL_PROJECT (self)->project_file));
+#line 577 "audio_project.c"
+ _g_free0 (_tmp1_);
+ }
+#line 117 "audio_project.vala"
+ MODEL_PROJECT_CLASS (model_audio_project_parent_class)->save (MODEL_PROJECT (self), filename);
+#line 118 "audio_project.vala"
+ self->priv->has_been_saved = TRUE;
+#line 584 "audio_project.c"
+}
+
+
+#line 121 "audio_project.vala"
+static void model_audio_project_move_audio_files (ModelAudioProject* self, const char* filename) {
+#line 590 "audio_project.c"
+ GError * _inner_error_;
+ char* audio_path;
+ char* _tmp0_;
+ char* _tmp1_;
+ char* destination_path;
+ GDir* dir;
+ const char* base_name;
+#line 121 "audio_project.vala"
+ g_return_if_fail (MODEL_IS_AUDIO_PROJECT (self));
+#line 121 "audio_project.vala"
+ g_return_if_fail (filename != NULL);
+#line 602 "audio_project.c"
+ _inner_error_ = NULL;
+#line 122 "audio_project.vala"
+ audio_path = model_project_get_audio_path (MODEL_PROJECT (self));
+#line 123 "audio_project.vala"
+ destination_path = (_tmp1_ = g_build_filename (_tmp0_ = g_path_get_dirname (filename), "audio files", NULL), _g_free0 (_tmp0_), _tmp1_);
+#line 124 "audio_project.vala"
+ g_mkdir (destination_path, 0777);
+#line 610 "audio_project.c"
+ dir = NULL;
+ {
+ GDir* _tmp2_;
+ GDir* _tmp3_;
+#line 127 "audio_project.vala"
+ _tmp2_ = g_dir_open (audio_path, 0, &_inner_error_);
+#line 617 "audio_project.c"
+ if (_inner_error_ != NULL) {
+ if (_inner_error_->domain == G_FILE_ERROR) {
+ goto __catch2_g_file_error;
+ }
+ _g_free0 (audio_path);
+ _g_free0 (destination_path);
+ _g_dir_close0 (dir);
+ g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+ g_clear_error (&_inner_error_);
+ return;
+ }
+#line 127 "audio_project.vala"
+ dir = (_tmp3_ = _tmp2_, _g_dir_close0 (dir), _tmp3_);
+#line 631 "audio_project.c"
+ }
+ goto __finally2;
+ __catch2_g_file_error:
+ {
+ GError * e;
+ e = _inner_error_;
+ _inner_error_ = NULL;
+ {
+ _g_error_free0 (e);
+ _g_free0 (audio_path);
+ _g_free0 (destination_path);
+ _g_dir_close0 (dir);
+#line 129 "audio_project.vala"
+ return;
+#line 646 "audio_project.c"
+ }
+ }
+ __finally2:
+ if (_inner_error_ != NULL) {
+ _g_free0 (audio_path);
+ _g_free0 (destination_path);
+ _g_dir_close0 (dir);
+ g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+ g_clear_error (&_inner_error_);
+ return;
+ }
+#line 133 "audio_project.vala"
+ base_name = NULL;
+#line 660 "audio_project.c"
+ {
+ gboolean _tmp4_;
+#line 134 "audio_project.vala"
+ _tmp4_ = TRUE;
+#line 134 "audio_project.vala"
+ while (TRUE) {
+#line 667 "audio_project.c"
+ char* destination;
+ char* _tmp5_;
+#line 134 "audio_project.vala"
+ if (!_tmp4_) {
+#line 138 "audio_project.vala"
+ if (!(base_name != NULL)) {
+#line 138 "audio_project.vala"
+ break;
+#line 676 "audio_project.c"
+ }
+ }
+#line 134 "audio_project.vala"
+ _tmp4_ = FALSE;
+#line 135 "audio_project.vala"
+ base_name = g_dir_read_name (dir);
+#line 136 "audio_project.vala"
+ destination = g_build_filename (destination_path, base_name, NULL);
+#line 137 "audio_project.vala"
+ g_rename (_tmp5_ = g_build_filename (audio_path, base_name, NULL), destination);
+#line 687 "audio_project.c"
+ _g_free0 (_tmp5_);
+ _g_free0 (destination);
+ }
+ }
+ {
+ GeeIterator* _clip_file_it;
+ _clip_file_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (MODEL_PROJECT (self)->clipfiles));
+#line 141 "audio_project.vala"
+ while (TRUE) {
+#line 697 "audio_project.c"
+ ModelClipFile* clip_file;
+ char* _tmp6_;
+ gboolean _tmp7_;
+#line 141 "audio_project.vala"
+ if (!gee_iterator_next (_clip_file_it)) {
+#line 141 "audio_project.vala"
+ break;
+#line 705 "audio_project.c"
+ }
+#line 141 "audio_project.vala"
+ clip_file = (ModelClipFile*) gee_iterator_get (_clip_file_it);
+#line 142 "audio_project.vala"
+ if ((_tmp7_ = _vala_strcmp0 (_tmp6_ = g_path_get_dirname (clip_file->filename), audio_path) == 0, _g_free0 (_tmp6_), _tmp7_)) {
+#line 711 "audio_project.c"
+ char* file_name;
+ char* destination;
+ char* _tmp8_;
+#line 143 "audio_project.vala"
+ file_name = g_path_get_basename (clip_file->filename);
+#line 144 "audio_project.vala"
+ destination = g_build_filename (destination_path, file_name, NULL);
+#line 145 "audio_project.vala"
+ clip_file->filename = (_tmp8_ = g_strdup (destination), _g_free0 (clip_file->filename), _tmp8_);
+#line 721 "audio_project.c"
+ _g_free0 (file_name);
+ _g_free0 (destination);
+ }
+ _g_object_unref0 (clip_file);
+ }
+ _g_object_unref0 (_clip_file_it);
+ }
+#line 149 "audio_project.vala"
+ g_rmdir (audio_path);
+#line 731 "audio_project.c"
+ _g_free0 (audio_path);
+ _g_free0 (destination_path);
+ _g_dir_close0 (dir);
+}
+
+
+static void model_audio_project_class_init (ModelAudioProjectClass * klass) {
+ model_audio_project_parent_class = g_type_class_peek_parent (klass);
+ g_type_class_add_private (klass, sizeof (ModelAudioProjectPrivate));
+ MODEL_PROJECT_CLASS (klass)->get_clip_time = model_audio_project_real_get_clip_time;
+ MODEL_PROJECT_CLASS (klass)->get_project_file = model_audio_project_real_get_project_file;
+ MODEL_PROJECT_CLASS (klass)->get_app_name = model_audio_project_real_get_app_name;
+ MODEL_PROJECT_CLASS (klass)->add_track = model_audio_project_real_add_track;
+ MODEL_PROJECT_CLASS (klass)->load = model_audio_project_real_load;
+ MODEL_PROJECT_CLASS (klass)->save = model_audio_project_real_save;
+ G_OBJECT_CLASS (klass)->finalize = model_audio_project_finalize;
+}
+
+
+static void model_audio_project_instance_init (ModelAudioProject * self) {
+ self->priv = MODEL_AUDIO_PROJECT_GET_PRIVATE (self);
+}
+
+
+static void model_audio_project_finalize (GObject* obj) {
+ ModelAudioProject * self;
+ self = MODEL_AUDIO_PROJECT (obj);
+ G_OBJECT_CLASS (model_audio_project_parent_class)->finalize (obj);
+}
+
+
+GType model_audio_project_get_type (void) {
+ static volatile gsize model_audio_project_type_id__volatile = 0;
+ if (g_once_init_enter (&model_audio_project_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (ModelAudioProjectClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_audio_project_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelAudioProject), 0, (GInstanceInitFunc) model_audio_project_instance_init, NULL };
+ GType model_audio_project_type_id;
+ model_audio_project_type_id = g_type_register_static (MODEL_TYPE_PROJECT, "ModelAudioProject", &g_define_type_info, 0);
+ g_once_init_leave (&model_audio_project_type_id__volatile, model_audio_project_type_id);
+ }
+ return model_audio_project_type_id__volatile;
+}
+
+
+static int _vala_strcmp0 (const char * str1, const char * str2) {
+ if (str1 == NULL) {
+ return -(str1 != str2);
+ }
+ if (str2 == NULL) {
+ return str1 != str2;
+ }
+ return strcmp (str1, str2);
+}
+
+
+
+
--- /dev/null
+/* fillmore.c generated by valac, the Vala compiler
+ * generated from fillmore.vala, do not modify */
+
+/* Copyright 2009-2010 Yorba Foundation
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gtk/gtk.h>
+#include <marina.h>
+#include <hildon/hildon.h>
+#include <gee.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gio/gio.h>
+#include <gdk/gdk.h>
+#include <gst/gst.h>
+#include <stdio.h>
+#include <float.h>
+#include <math.h>
+#include <gdk/gdkkeysyms.h>
+#include <glib/gstdio.h>
+
+
+#define TYPE_RECORDER (recorder_get_type ())
+#define RECORDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_RECORDER, Recorder))
+#define RECORDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_RECORDER, RecorderClass))
+#define IS_RECORDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_RECORDER))
+#define IS_RECORDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_RECORDER))
+#define RECORDER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_RECORDER, RecorderClass))
+
+typedef struct _Recorder Recorder;
+typedef struct _RecorderClass RecorderClass;
+typedef struct _RecorderPrivate RecorderPrivate;
+
+#define MODEL_TYPE_AUDIO_PROJECT (model_audio_project_get_type ())
+#define MODEL_AUDIO_PROJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_AUDIO_PROJECT, ModelAudioProject))
+#define MODEL_AUDIO_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_AUDIO_PROJECT, ModelAudioProjectClass))
+#define MODEL_IS_AUDIO_PROJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_AUDIO_PROJECT))
+#define MODEL_IS_AUDIO_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_AUDIO_PROJECT))
+#define MODEL_AUDIO_PROJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_AUDIO_PROJECT, ModelAudioProjectClass))
+
+typedef struct _ModelAudioProject ModelAudioProject;
+typedef struct _ModelAudioProjectClass ModelAudioProjectClass;
+
+#define TYPE_HEADER_AREA (header_area_get_type ())
+#define HEADER_AREA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_HEADER_AREA, HeaderArea))
+#define HEADER_AREA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_HEADER_AREA, HeaderAreaClass))
+#define IS_HEADER_AREA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_HEADER_AREA))
+#define IS_HEADER_AREA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_HEADER_AREA))
+#define HEADER_AREA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_HEADER_AREA, HeaderAreaClass))
+
+typedef struct _HeaderArea HeaderArea;
+typedef struct _HeaderAreaClass HeaderAreaClass;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _g_free0(var) (var = (g_free (var), NULL))
+#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
+#define _gst_caps_unref0(var) ((var == NULL) ? NULL : (var = (gst_caps_unref (var), NULL)))
+#define __g_list_free_g_free0(var) ((var == NULL) ? NULL : (var = (_g_list_free_g_free (var), NULL)))
+#define __g_slist_free_g_free0(var) ((var == NULL) ? NULL : (var = (_g_slist_free_g_free (var), NULL)))
+
+#define TYPE_PROJECT_PROPERTIES (project_properties_get_type ())
+#define PROJECT_PROPERTIES(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_PROJECT_PROPERTIES, ProjectProperties))
+#define PROJECT_PROPERTIES_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_PROJECT_PROPERTIES, ProjectPropertiesClass))
+#define IS_PROJECT_PROPERTIES(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_PROJECT_PROPERTIES))
+#define IS_PROJECT_PROPERTIES_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_PROJECT_PROPERTIES))
+#define PROJECT_PROPERTIES_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_PROJECT_PROPERTIES, ProjectPropertiesClass))
+
+typedef struct _ProjectProperties ProjectProperties;
+typedef struct _ProjectPropertiesClass ProjectPropertiesClass;
+
+#define UI_TYPE_TRACK_INFORMATION (ui_track_information_get_type ())
+#define UI_TRACK_INFORMATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), UI_TYPE_TRACK_INFORMATION, UITrackInformation))
+#define UI_TRACK_INFORMATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), UI_TYPE_TRACK_INFORMATION, UITrackInformationClass))
+#define UI_IS_TRACK_INFORMATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), UI_TYPE_TRACK_INFORMATION))
+#define UI_IS_TRACK_INFORMATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), UI_TYPE_TRACK_INFORMATION))
+#define UI_TRACK_INFORMATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), UI_TYPE_TRACK_INFORMATION, UITrackInformationClass))
+
+typedef struct _UITrackInformation UITrackInformation;
+typedef struct _UITrackInformationClass UITrackInformationClass;
+
+#define TYPE_FILLMORE (fillmore_get_type ())
+#define FILLMORE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_FILLMORE, Fillmore))
+#define FILLMORE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_FILLMORE, FillmoreClass))
+#define IS_FILLMORE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_FILLMORE))
+#define IS_FILLMORE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_FILLMORE))
+#define FILLMORE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_FILLMORE, FillmoreClass))
+
+typedef struct _Fillmore Fillmore;
+typedef struct _FillmoreClass FillmoreClass;
+typedef struct _FillmorePrivate FillmorePrivate;
+#define _g_option_context_free0(var) ((var == NULL) ? NULL : (var = (g_option_context_free (var), NULL)))
+
+#define TYPE_FILLMORE_CLASS_FACTORY (fillmore_class_factory_get_type ())
+#define FILLMORE_CLASS_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_FILLMORE_CLASS_FACTORY, FillmoreClassFactory))
+#define FILLMORE_CLASS_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_FILLMORE_CLASS_FACTORY, FillmoreClassFactoryClass))
+#define IS_FILLMORE_CLASS_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_FILLMORE_CLASS_FACTORY))
+#define IS_FILLMORE_CLASS_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_FILLMORE_CLASS_FACTORY))
+#define FILLMORE_CLASS_FACTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_FILLMORE_CLASS_FACTORY, FillmoreClassFactoryClass))
+
+typedef struct _FillmoreClassFactory FillmoreClassFactory;
+typedef struct _FillmoreClassFactoryClass FillmoreClassFactoryClass;
+#define _class_factory_unref0(var) ((var == NULL) ? NULL : (var = (class_factory_unref (var), NULL)))
+
+struct _Recorder {
+ GtkWindow parent_instance;
+ RecorderPrivate * priv;
+ ModelAudioProject* project;
+ TimeLine* timeline;
+};
+
+struct _RecorderClass {
+ GtkWindowClass parent_class;
+};
+
+struct _RecorderPrivate {
+ ViewClickTrack* click_track;
+ HeaderArea* header_area;
+ ClipLibraryView* library;
+ ModelTimeSystem* provider;
+ GtkAdjustment* h_adjustment;
+ GtkHPaned* timeline_library_pane;
+ GtkScrolledWindow* library_scrolled;
+ GtkScrolledWindow* timeline_scrolled;
+ gint cursor_pos;
+ gint64 center_time;
+ gboolean loading;
+ GtkActionGroup* main_group;
+ GtkToggleButton* play_button;
+ GtkToggleButton* record_button;
+ GtkButton* addnew_button;
+ GtkButton* rewind_button;
+ GtkButton* forward_button;
+ GtkButton* zoomin_button;
+ GtkButton* zoomout_button;
+ GtkButton* volume_button;
+ HildonPannableArea* scrollwin;
+ gint scrollwin_pos_y;
+ GtkUIManager* manager;
+ ViewOggVorbisExport* audio_export;
+ ViewAudioOutput* audio_output;
+ GeeArrayList* load_errors;
+};
+
+struct _Fillmore {
+ HildonProgram parent_instance;
+ FillmorePrivate * priv;
+};
+
+struct _FillmoreClass {
+ HildonProgramClass parent_class;
+};
+
+
+extern gboolean do_print_graph;
+gboolean do_print_graph = FALSE;
+extern gint debug_level;
+gint debug_level = 0;
+static gpointer recorder_parent_class = NULL;
+static TransportDelegateIface* recorder_transport_delegate_parent_iface = NULL;
+static gpointer fillmore_parent_class = NULL;
+
+GType recorder_get_type (void);
+GType model_audio_project_get_type (void);
+GType header_area_get_type (void);
+#define RECORDER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_RECORDER, RecorderPrivate))
+enum {
+ RECORDER_DUMMY_PROPERTY
+};
+#define RECORDER_scroll_speed 8
+#define RECORDER_NAME "Fillmore"
+static void recorder_on_project_open (Recorder* self);
+static void _recorder_on_project_open_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_project_new (Recorder* self);
+static void _recorder_on_project_new_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_project_save (Recorder* self);
+static void _recorder_on_project_save_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_project_save_as (Recorder* self);
+static void _recorder_on_project_save_as_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_export (Recorder* self);
+static void _recorder_on_export_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_properties (Recorder* self);
+static void _recorder_on_properties_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_quit (Recorder* self);
+static void _recorder_on_quit_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_undo (Recorder* self);
+static void _recorder_on_undo_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_cut (Recorder* self);
+static void _recorder_on_cut_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_copy (Recorder* self);
+static void _recorder_on_copy_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_paste (Recorder* self);
+static void _recorder_on_paste_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_delete (Recorder* self);
+static void _recorder_on_delete_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_select_all (Recorder* self);
+static void _recorder_on_select_all_gtk_action_callback (GtkAction* action, gpointer self);
+void recorder_on_split_at_playhead (Recorder* self);
+static void _recorder_on_split_at_playhead_gtk_action_callback (GtkAction* action, gpointer self);
+void recorder_on_trim_to_playhead (Recorder* self);
+static void _recorder_on_trim_to_playhead_gtk_action_callback (GtkAction* action, gpointer self);
+void recorder_on_clip_properties (Recorder* self);
+static void _recorder_on_clip_properties_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_zoom_in (Recorder* self);
+static void _recorder_on_zoom_in_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_zoom_out (Recorder* self);
+static void _recorder_on_zoom_out_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_zoom_to_project (Recorder* self);
+static void _recorder_on_zoom_to_project_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_track_new (Recorder* self);
+static void _recorder_on_track_new_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_track_rename (Recorder* self);
+static void _recorder_on_track_rename_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_track_remove (Recorder* self);
+static void _recorder_on_track_remove_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_track_move_up (Recorder* self);
+static void _recorder_on_track_move_up_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_track_move_down (Recorder* self);
+static void _recorder_on_track_move_down_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_tracks_scroll_up (Recorder* self);
+static void _recorder_on_tracks_scroll_up_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_tracks_scroll_down (Recorder* self);
+static void _recorder_on_tracks_scroll_down_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_help_contents (Recorder* self);
+static void _recorder_on_help_contents_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_about (Recorder* self);
+static void _recorder_on_about_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_save_graph (Recorder* self);
+static void _recorder_on_save_graph_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_rewind (Recorder* self);
+static void _recorder_on_rewind_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_end (Recorder* self);
+static void _recorder_on_end_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_play (Recorder* self);
+static void _recorder_on_play_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_record (Recorder* self);
+static void _recorder_on_record_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_view_library (Recorder* self);
+static void _recorder_on_view_library_gtk_action_callback (GtkAction* action, gpointer self);
+static void recorder_on_snap (Recorder* self);
+static void _recorder_on_snap_gtk_action_callback (GtkAction* action, gpointer self);
+#define RECORDER_ui "\n" \
+"<ui>\n" \
+" <menubar name=\"MenuBar\">\n" \
+" <menu name=\"ProjectMenu\" action=\"Project\">\n" \
+" <menuitem name=\"New\" action=\"NewProject\"/>\n" \
+" <menuitem name=\"Open\" action=\"Open\"/>\n" \
+" <menuitem name=\"Save\" action=\"Save\"/>\n" \
+" <menuitem name=\"SaveAs\" action=\"SaveAs\"/>\n" \
+" <separator/>\n" \
+" <menuitem name=\"Export\" action=\"Export\"/>\n" \
+" <separator/>\n" \
+" <menuitem name=\"Property\" action=\"Settings\"/>\n" \
+" <separator/>\n" \
+" <menuitem name=\"Quit\" action=\"Quit\"/>\n" \
+" </menu>\n" \
+" <menu name=\"EditMenu\" action=\"Edit\">\n" \
+" <menuitem name=\"EditUndo\" action=\"Undo\"/>\n" \
+" <separator/>\n" \
+" <menuitem name=\"EditCut\" action=\"Cut\"/>\n" \
+" <menuitem name=\"EditCopy\" action=\"Copy\"/>\n" \
+" <menuitem name=\"EditPaste\" action=\"Paste\"/>\n" \
+" <menuitem name=\"EditDelete\" action=\"Delete\"/>\n" \
+" <separator/>\n" \
+" <menuitem name=\"EditSelectAll\" action=\"SelectAll\"/>\n" \
+" <separator/>\n" \
+" <menuitem name=\"ClipSplitAtPlayhead\" action=\"SplitAtPlayhead\"" \
+"/>\n" \
+" <menuitem name=\"ClipTrimToPlayhead\" action=\"TrimToPlayhead\"/" \
+">\n" \
+" <separator/>\n" \
+" <menuitem name=\"ClipViewProperties\" action=\"ClipProperties\"/" \
+">\n" \
+" </menu>\n" \
+" <menu name=\"ViewMenu\" action=\"View\">\n" \
+" <menuitem name=\"ViewLibrary\" action=\"Library\"/>\n" \
+" <separator/>\n" \
+" <menuitem name=\"ViewZoomIn\" action=\"ZoomIn\"/>\n" \
+" <menuitem name=\"ViewZoomOut\" action=\"ZoomOut\"/>\n" \
+" <menuitem name=\"ViewZoomProject\" action=\"ZoomProject\"/>\n" \
+" <separator/>\n" \
+" <menuitem name=\"Snap\" action=\"Snap\"/>\n" \
+" </menu>\n" \
+" <menu name=\"TrackMenu\" action=\"Track\">\n" \
+" <menuitem name=\"TrackNew\" action=\"NewTrack\"/>\n" \
+" <menuitem name=\"TrackRename\" action=\"Rename\"/>\n" \
+" <menuitem name=\"TrackDelete\" action=\"DeleteTrack\"/>\n" \
+" <separator/>\n" \
+" <menuitem name=\"TrackMoveUp\" action=\"MoveTrackUp\"/>\n" \
+" <menuitem name=\"TrackMoveDown\" action=\"MoveTrackDown\"/>\n" \
+" <menuitem name=\"TrackScrollUp\" action=\"ScrollTracksUp\"/>\n" \
+" <menuitem name=\"TrackScrollDown\" action=\"ScrollTracksDown\"/>" \
+"\n" \
+" </menu>\n" \
+" <menu name=\"HelpMenu\" action=\"Help\">\n" \
+" <menuitem name=\"HelpContents\" action=\"Contents\"/>\n" \
+" <separator/>\n" \
+" <menuitem name=\"HelpAbout\" action=\"About\"/>\n" \
+" <menuitem name=\"SaveGraph\" action=\"SaveGraph\"/>\n" \
+" </menu>\n" \
+" </menubar>\n" \
+" <popup name=\"ClipContextMenu\">\n" \
+" <menuitem name=\"Cut\" action=\"Cut\"/>\n" \
+" <menuitem name=\"Copy\" action=\"Copy\"/>\n" \
+" <separator/>\n" \
+" <menuitem name=\"ClipContextProperties\" action=\"ClipProperties\"" \
+"/>\n" \
+" </popup>\n" \
+" <popup name=\"LibraryContextMenu\">\n" \
+" <menuitem name=\"ClipContextProperties\" action=\"ClipProperties\"" \
+"/>\n" \
+" </popup>\n" \
+" <toolbar name=\"Toolbar\">\n" \
+" <toolitem name=\"New\" action=\"NewTrack\"/>\n" \
+" <separator/>\n" \
+" <toolitem name=\"Rewind\" action=\"Rewind\"/>\n" \
+" <toolitem name=\"End\" action=\"End\"/>\n" \
+" <toolitem name=\"Play\" action=\"Play\"/>\n" \
+" <toolitem name=\"Record\" action=\"Record\"/>\n" \
+" </toolbar>\n" \
+" <accelerator name=\"Rewind\" action=\"Rewind\"/>\n" \
+" <accelerator name=\"End\" action=\"End\"/>\n" \
+" <accelerator name=\"Play\" action=\"Play\"/>\n" \
+" <accelerator name=\"Record\" action=\"Record\"/>\n" \
+"</ui>\n"
+static char* recorder_get_fillmore_directory (Recorder* self);
+ModelAudioProject* model_audio_project_new (const char* filename, GError** error);
+ModelAudioProject* model_audio_project_construct (GType object_type, const char* filename, GError** error);
+static void recorder_on_callback_pulse (Recorder* self);
+static void _recorder_on_callback_pulse_view_media_engine_callback_pulse (ViewMediaEngine* _sender, gpointer self);
+static void recorder_on_post_export (Recorder* self, gboolean canceled);
+static void _recorder_on_post_export_view_media_engine_post_export (ViewMediaEngine* _sender, gboolean canceled, gpointer self);
+static void recorder_on_position_changed (Recorder* self);
+static void _recorder_on_position_changed_view_media_engine_position_changed (ViewMediaEngine* _sender, gint64 position, gpointer self);
+void recorder_on_load_error (Recorder* self, const char* message);
+static void _recorder_on_load_error_model_project_load_error (ModelProject* _sender, const char* _error_, gpointer self);
+static void recorder_on_name_changed (Recorder* self);
+static void _recorder_on_name_changed_model_project_name_changed (ModelProject* _sender, const char* project_file, gpointer self);
+static void recorder_on_dirty_changed (Recorder* self, gboolean isDirty);
+static void _recorder_on_dirty_changed_model_undo_manager_dirty_changed (ModelUndoManager* _sender, gboolean is_dirty, gpointer self);
+static void recorder_on_undo_changed (Recorder* self, gboolean can_undo);
+static void _recorder_on_undo_changed_model_undo_manager_undo_changed (ModelUndoManager* _sender, gboolean can_undo, gpointer self);
+static void recorder_on_error_occurred (Recorder* self, const char* major_message, const char* minor_message);
+static void _recorder_on_error_occurred_model_project_error_occurred (ModelProject* _sender, const char* major_message, const char* minor_message, gpointer self);
+static void recorder_on_playstate_changed (Recorder* self, PlayState playstate);
+static void _recorder_on_playstate_changed_model_project_playstate_changed (ModelProject* _sender, PlayState playstate, gpointer self);
+static void recorder_on_track_added (Recorder* self, ModelTrack* track);
+static void _recorder_on_track_added_model_project_track_added (ModelProject* _sender, ModelTrack* track, gpointer self);
+static void recorder_on_track_removed (Recorder* self, ModelTrack* unused);
+static void _recorder_on_track_removed_model_project_track_removed (ModelProject* _sender, ModelTrack* track, gpointer self);
+void recorder_on_load_complete (Recorder* self);
+static void _recorder_on_load_complete_model_project_load_complete (ModelProject* _sender, gpointer self);
+static void recorder_on_project_close (Recorder* self);
+static void _recorder_on_project_close_model_project_closed (ModelProject* _sender, gpointer self);
+static GtkWidget* recorder_get_widget (Recorder* self, GtkUIManager* manager, const char* name);
+void recorder_on_library_selection_changed (Recorder* self, gboolean selected);
+static void _recorder_on_library_selection_changed_clip_library_view_selection_changed (ClipLibraryView* _sender, gboolean selected, gpointer self);
+static void recorder_on_drag_data_received (Recorder* self, GtkWidget* w, GdkDragContext* context, gint x, gint y, GtkSelectionData* selection_data, guint drag_info, guint time);
+static void _recorder_on_drag_data_received_gtk_widget_drag_data_received (GtkWidget* _sender, GdkDragContext* context, gint x, gint y, GtkSelectionData* selection_data, guint info, guint time_, gpointer self);
+static void recorder_on_track_changed (Recorder* self);
+static void _recorder_on_track_changed_time_line_track_changed (TimeLine* _sender, gpointer self);
+static void recorder_on_timeline_size_allocate (Recorder* self, GdkRectangle* rectangle);
+static void _recorder_on_timeline_size_allocate_gtk_widget_size_allocate (GtkWidget* _sender, GdkRectangle* allocation, gpointer self);
+static void recorder_on_timeline_selection_changed (Recorder* self, gboolean selected);
+static void _recorder_on_timeline_selection_changed_time_line_selection_changed (TimeLine* _sender, gboolean selected, gpointer self);
+static void recorder_update_menu (Recorder* self);
+HeaderArea* header_area_new (Recorder* recorder, ModelTimeSystem* provider, gint height);
+HeaderArea* header_area_construct (GType object_type, Recorder* recorder, ModelTimeSystem* provider, gint height);
+static void _recorder_on_track_new_gtk_button_clicked (GtkButton* _sender, gpointer self);
+static void _recorder_on_play_gtk_toggle_button_toggled (GtkToggleButton* _sender, gpointer self);
+static void _recorder_on_record_gtk_toggle_button_toggled (GtkToggleButton* _sender, gpointer self);
+static void _recorder_on_rewind_gtk_button_clicked (GtkButton* _sender, gpointer self);
+static void _recorder_on_end_gtk_button_clicked (GtkButton* _sender, gpointer self);
+static void _recorder_on_zoom_in_gtk_button_clicked (GtkButton* _sender, gpointer self);
+static void _recorder_on_zoom_out_gtk_button_clicked (GtkButton* _sender, gpointer self);
+static void recorder_on_volume (Recorder* self);
+static void _recorder_on_volume_gtk_button_clicked (GtkButton* _sender, gpointer self);
+static void recorder_on_library_size_allocate (Recorder* self, GdkRectangle* rectangle);
+static void _recorder_on_library_size_allocate_gtk_widget_size_allocate (GtkWidget* _sender, GdkRectangle* allocation, gpointer self);
+static gboolean recorder_on_delete_event (Recorder* self);
+static gboolean _recorder_on_delete_event_gtk_widget_delete_event (GtkWidget* _sender, GdkEvent* event, gpointer self);
+static void recorder_default_track_set (Recorder* self);
+Recorder* recorder_new (const char* project_file, GError** error);
+Recorder* recorder_construct (GType object_type, const char* project_file, GError** error);
+char* recorder_get_default_track_name (Recorder* self);
+static gint recorder_default_track_number_compare (void* a, void* b);
+static gint _recorder_default_track_number_compare_gcompare_func (void* a, void* b);
+static void _g_list_free_g_free (GList* self);
+ModelTrack* recorder_selected_track (Recorder* self);
+static void recorder_set_sensitive_group (Recorder* self, GtkActionGroup* group, const char* group_path, gboolean sensitive);
+static void recorder_on_clip_added (Recorder* self, ModelClip* clip);
+static void _recorder_on_clip_added_model_track_clip_added (ModelTrack* _sender, ModelClip* clip, gboolean select, gpointer self);
+static void recorder_on_clip_removed (Recorder* self, ModelClip* clip);
+static void _recorder_on_clip_removed_model_track_clip_removed (ModelTrack* _sender, ModelClip* clip, gpointer self);
+static void recorder_on_track_selection_changed (Recorder* self, ModelTrack* track);
+static void _recorder_on_track_selection_changed_model_track_track_selection_changed (ModelTrack* _sender, ModelTrack* track, gpointer self);
+static void recorder_on_clip_moved (Recorder* self, ModelClip* clip);
+static void _recorder_on_clip_moved_model_clip_moved (ModelClip* _sender, ModelClip* clip, gpointer self);
+void recorder_scroll_to_beginning (Recorder* self);
+void recorder_scroll_to_time (Recorder* self, gint64 time);
+void recorder_page_to_time (Recorder* self, gint64 time);
+void recorder_scroll_to_end (Recorder* self);
+static gint recorder_sgn (gint x);
+void recorder_scroll_toward_center (Recorder* self, gint xpos);
+static gboolean recorder_real_key_press_event (GtkWidget* base, GdkEventKey* event);
+void recorder_do_error_dialog (const char* major_message, const char* minor_message);
+static void recorder_on_project_new_finished_closing (Recorder* self, gboolean project_did_close);
+static void _recorder_on_project_new_finished_closing_recorder_finished_closing (Recorder* _sender, gboolean project_did_close, gpointer self);
+static void recorder_on_project_open_finished_closing (Recorder* self, gboolean project_did_close);
+static void _recorder_on_project_open_finished_closing_recorder_finished_closing (Recorder* _sender, gboolean project_did_close, gpointer self);
+static void _g_slist_free_g_free (GSList* self);
+static gboolean recorder_save_dialog (Recorder* self);
+static gboolean recorder_do_save (Recorder* self);
+static void recorder_on_save_new_file_finished_closing (Recorder* self, gboolean did_close);
+static void _recorder_on_save_new_file_finished_closing_recorder_finished_closing (Recorder* _sender, gboolean project_did_close, gpointer self);
+GType project_properties_get_type (void);
+void project_properties_setup (ProjectProperties* self, ModelProject* project, GtkBuilder* builder);
+gint project_properties_get_tempo (ProjectProperties* self);
+void project_properties_get_time_signature (ProjectProperties* self, Fraction* result);
+gboolean project_properties_during_record (ProjectProperties* self);
+gboolean project_properties_during_play (ProjectProperties* self);
+double project_properties_get_click_volume (ProjectProperties* self);
+static void recorder_on_quit_finished_closing (Recorder* self, gboolean project_did_close);
+static void _recorder_on_quit_finished_closing_recorder_finished_closing (Recorder* _sender, gboolean project_did_close, gpointer self);
+UITrackInformation* ui_track_information_new (void);
+UITrackInformation* ui_track_information_construct (GType object_type);
+GType ui_track_information_get_type (void);
+void ui_track_information_set_track_name (UITrackInformation* self, const char* new_name);
+static gboolean recorder_track_name_dialog (Recorder* self, UITrackInformation* dialog, ModelTrack* track);
+char* ui_track_information_get_track_name (UITrackInformation* self);
+static void recorder_do_zoom (Recorder* self, float increment);
+void model_audio_project_record (ModelAudioProject* self, ModelAudioTrack* track);
+static gint64 recorder_get_zoom_center_time (Recorder* self);
+static gboolean recorder_real_is_playing (TransportDelegate* base);
+static gboolean recorder_real_is_recording (TransportDelegate* base);
+static gboolean recorder_real_is_stopped (TransportDelegate* base);
+static void recorder_finalize (GObject* obj);
+GType fillmore_get_type (void);
+enum {
+ FILLMORE_DUMMY_PROPERTY
+};
+FillmoreClassFactory* fillmore_class_factory_new (void);
+FillmoreClassFactory* fillmore_class_factory_construct (GType object_type);
+GType fillmore_class_factory_get_type (void);
+void fillmore_run (Fillmore* self, char** args, int args_length1);
+Fillmore* fillmore_new (void);
+Fillmore* fillmore_construct (GType object_type);
+static GObject * fillmore_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties);
+gint _vala_main (char** args, int args_length1);
+void NO_main (char** args, int args_length1);
+static int _vala_strcmp0 (const char * str1, const char * str2);
+
+const GOptionEntry options[3] = {{"print-graph", (gchar) 0, 0, G_OPTION_ARG_NONE, &do_print_graph, "Show Print Graph in help menu", NULL}, {"debug-level", (gchar) 0, 0, G_OPTION_ARG_INT, &debug_level, "Control amount of diagnostic information", "[0 (minimal),5 (maximum)]"}, {NULL}};
+static const GtkActionEntry RECORDER_entries[36] = {{"Project", NULL, "_Project", NULL, NULL, (GCallback) NULL}, {"Open", GTK_STOCK_OPEN, "_Open...", NULL, "Open a project", (GCallback) _recorder_on_project_open_gtk_action_callback}, {"NewProject", GTK_STOCK_NEW, "_New", NULL, "Create new project", (GCallback) _recorder_on_project_new_gtk_action_callback}, {"Save", GTK_STOCK_SAVE, "_Save", "<Control>S", "Save project", (GCallback) _recorder_on_project_save_gtk_action_callback}, {"SaveAs", GTK_STOCK_SAVE_AS, "Save _As...", "<Control><Shift>S", "Save project with new name", (GCallback) _recorder_on_project_save_as_gtk_action_callback}, {"Export", GTK_STOCK_JUMP_TO, "_Export...", "<Control>E", NULL, (GCallback) _recorder_on_export_gtk_action_callback}, {"Settings", GTK_STOCK_PROPERTIES, "Se_ttings", "<Control><Alt>Return", NULL, (GCallback) _recorder_on_properties_gtk_action_callback}, {"Quit", GTK_STOCK_QUIT, NULL, NULL, NULL, (GCallback) _recorder_on_quit_gtk_action_callback}, {"Edit", NULL, "_Edit", NULL, NULL, (GCallback) NULL}, {"Undo", GTK_STOCK_UNDO, NULL, "<Control>Z", NULL, (GCallback) _recorder_on_undo_gtk_action_callback}, {"Cut", GTK_STOCK_CUT, NULL, NULL, NULL, (GCallback) _recorder_on_cut_gtk_action_callback}, {"Copy", GTK_STOCK_COPY, NULL, NULL, NULL, (GCallback) _recorder_on_copy_gtk_action_callback}, {"Paste", GTK_STOCK_PASTE, NULL, NULL, NULL, (GCallback) _recorder_on_paste_gtk_action_callback}, {"Delete", GTK_STOCK_DELETE, NULL, "Delete", NULL, (GCallback) _recorder_on_delete_gtk_action_callback}, {"SelectAll", GTK_STOCK_SELECT_ALL, NULL, "<Control>A", NULL, (GCallback) _recorder_on_select_all_gtk_action_callback}, {"SplitAtPlayhead", NULL, "_Split at Playhead", "<Control>P", NULL, (GCallback) _recorder_on_split_at_playhead_gtk_action_callback}, {"TrimToPlayhead", NULL, "Trim to Play_head", "<Control>H", NULL, (GCallback) _recorder_on_trim_to_playhead_gtk_action_callback}, {"ClipProperties", GTK_STOCK_PROPERTIES, "Properti_es", "<Alt>Return", NULL, (GCallback) _recorder_on_clip_properties_gtk_action_callback}, {"View", NULL, "_View", NULL, NULL, (GCallback) NULL}, {"ZoomIn", GTK_STOCK_ZOOM_IN, "Zoom _In", "<Control>plus", NULL, (GCallback) _recorder_on_zoom_in_gtk_action_callback}, {"ZoomOut", GTK_STOCK_ZOOM_OUT, "Zoom _Out", "<Control>minus", NULL, (GCallback) _recorder_on_zoom_out_gtk_action_callback}, {"ZoomProject", NULL, "Fit to _Window", "<Shift>Z", NULL, (GCallback) _recorder_on_zoom_to_project_gtk_action_callback}, {"Track", NULL, "_Track", NULL, NULL, (GCallback) NULL}, {"NewTrack", GTK_STOCK_ADD, "_New...", "<Control><Shift>N", "Create new track", (GCallback) _recorder_on_track_new_gtk_action_callback}, {"Rename", NULL, "_Rename...", NULL, "Rename Track", (GCallback) _recorder_on_track_rename_gtk_action_callback}, {"DeleteTrack", NULL, "_Delete", "<Control><Shift>Delete", "Delete track", (GCallback) _recorder_on_track_remove_gtk_action_callback}, {"MoveTrackUp", NULL, "Move Track Up", "<Control>Up", NULL, (GCallback) _recorder_on_track_move_up_gtk_action_callback}, {"MoveTrackDown", NULL, "Move Track Down", "<Control>Down", NULL, (GCallback) _recorder_on_track_move_down_gtk_action_callback}, {"ScrollTracksUp", NULL, "Scroll Tracks Up", "<Shift>Up", NULL, (GCallback) _recorder_on_tracks_scroll_up_gtk_action_callback}, {"ScrollTracksDown", NULL, "Scroll Tracks Down", "<Shift>Down", NULL, (GCallback) _recorder_on_tracks_scroll_down_gtk_action_callback}, {"Help", NULL, "_Help", NULL, NULL, (GCallback) NULL}, {"Contents", GTK_STOCK_HELP, "_Contents", "F1", "More information on Fillmore", (GCallback) _recorder_on_help_contents_gtk_action_callback}, {"About", GTK_STOCK_ABOUT, NULL, NULL, NULL, (GCallback) _recorder_on_about_gtk_action_callback}, {"SaveGraph", NULL, "Save _Graph", NULL, "Save graph", (GCallback) _recorder_on_save_graph_gtk_action_callback}, {"Rewind", GTK_STOCK_MEDIA_PREVIOUS, "Rewind", "Home", "Go to beginning", (GCallback) _recorder_on_rewind_gtk_action_callback}, {"End", GTK_STOCK_MEDIA_NEXT, "End", "End", "Go to end", (GCallback) _recorder_on_end_gtk_action_callback}};
+static const GtkToggleActionEntry RECORDER_toggle_entries[4] = {{"Play", GTK_STOCK_MEDIA_PLAY, NULL, "space", "Play", (GCallback) _recorder_on_play_gtk_action_callback}, {"Record", GTK_STOCK_MEDIA_RECORD, NULL, "r", "Record", (GCallback) _recorder_on_record_gtk_action_callback}, {"Library", NULL, "_Library", "F9", NULL, (GCallback) _recorder_on_view_library_gtk_action_callback, FALSE}, {"Snap", NULL, "_Snap to Clip Edges", NULL, NULL, (GCallback) _recorder_on_snap_gtk_action_callback, FALSE}};
+static const DialogUtilsfilter_description_struct RECORDER_filters[2] = {{"Fillmore Project Files", MODEL_PROJECT_FILLMORE_FILE_EXTENSION}, {"Lombard Project Files", MODEL_PROJECT_LOMBARD_FILE_EXTENSION}};
+static const DialogUtilsfilter_description_struct RECORDER_export_filters[1] = {{"Ogg Files", "ogg"}};
+
+
+#line 774 "fillmore.vala"
+static void _recorder_on_project_open_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 383 "fillmore.c"
+ recorder_on_project_open (self);
+}
+
+
+#line 755 "fillmore.vala"
+static void _recorder_on_project_new_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 390 "fillmore.c"
+ recorder_on_project_new (self);
+}
+
+
+#line 785 "fillmore.vala"
+static void _recorder_on_project_save_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 397 "fillmore.c"
+ recorder_on_project_save (self);
+}
+
+
+#line 781 "fillmore.vala"
+static void _recorder_on_project_save_as_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 404 "fillmore.c"
+ recorder_on_project_save_as (self);
+}
+
+
+#line 714 "fillmore.vala"
+static void _recorder_on_export_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 411 "fillmore.c"
+ recorder_on_export (self);
+}
+
+
+#line 822 "fillmore.vala"
+static void _recorder_on_properties_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 418 "fillmore.c"
+ recorder_on_properties (self);
+}
+
+
+#line 858 "fillmore.vala"
+static void _recorder_on_quit_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 425 "fillmore.c"
+ recorder_on_quit (self);
+}
+
+
+#line 913 "fillmore.vala"
+static void _recorder_on_undo_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 432 "fillmore.c"
+ recorder_on_undo (self);
+}
+
+
+#line 901 "fillmore.vala"
+static void _recorder_on_cut_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 439 "fillmore.c"
+ recorder_on_cut (self);
+}
+
+
+#line 905 "fillmore.vala"
+static void _recorder_on_copy_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 446 "fillmore.c"
+ recorder_on_copy (self);
+}
+
+
+#line 909 "fillmore.vala"
+static void _recorder_on_paste_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 453 "fillmore.c"
+ recorder_on_paste (self);
+}
+
+
+#line 917 "fillmore.vala"
+static void _recorder_on_delete_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 460 "fillmore.c"
+ recorder_on_delete (self);
+}
+
+
+#line 925 "fillmore.vala"
+static void _recorder_on_select_all_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 467 "fillmore.c"
+ recorder_on_select_all (self);
+}
+
+
+#line 933 "fillmore.vala"
+static void _recorder_on_split_at_playhead_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 474 "fillmore.c"
+ recorder_on_split_at_playhead (self);
+}
+
+
+#line 937 "fillmore.vala"
+static void _recorder_on_trim_to_playhead_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 481 "fillmore.c"
+ recorder_on_trim_to_playhead (self);
+}
+
+
+#line 941 "fillmore.vala"
+static void _recorder_on_clip_properties_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 488 "fillmore.c"
+ recorder_on_clip_properties (self);
+}
+
+
+#line 1008 "fillmore.vala"
+static void _recorder_on_zoom_in_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 495 "fillmore.c"
+ recorder_on_zoom_in (self);
+}
+
+
+#line 1012 "fillmore.vala"
+static void _recorder_on_zoom_out_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 502 "fillmore.c"
+ recorder_on_zoom_out (self);
+}
+
+
+#line 1016 "fillmore.vala"
+static void _recorder_on_zoom_to_project_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 509 "fillmore.c"
+ recorder_on_zoom_to_project (self);
+}
+
+
+#line 960 "fillmore.vala"
+static void _recorder_on_track_new_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 516 "fillmore.c"
+ recorder_on_track_new (self);
+}
+
+
+#line 969 "fillmore.vala"
+static void _recorder_on_track_rename_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 523 "fillmore.c"
+ recorder_on_track_rename (self);
+}
+
+
+#line 1003 "fillmore.vala"
+static void _recorder_on_track_remove_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 530 "fillmore.c"
+ recorder_on_track_remove (self);
+}
+
+
+#line 426 "fillmore.vala"
+static void _recorder_on_track_move_up_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 537 "fillmore.c"
+ recorder_on_track_move_up (self);
+}
+
+
+#line 444 "fillmore.vala"
+static void _recorder_on_track_move_down_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 544 "fillmore.c"
+ recorder_on_track_move_down (self);
+}
+
+
+#line 463 "fillmore.vala"
+static void _recorder_on_tracks_scroll_up_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 551 "fillmore.c"
+ recorder_on_tracks_scroll_up (self);
+}
+
+
+#line 475 "fillmore.vala"
+static void _recorder_on_tracks_scroll_down_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 558 "fillmore.c"
+ recorder_on_tracks_scroll_down (self);
+}
+
+
+#line 1043 "fillmore.vala"
+static void _recorder_on_help_contents_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 565 "fillmore.c"
+ recorder_on_help_contents (self);
+}
+
+
+#line 1050 "fillmore.vala"
+static void _recorder_on_about_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 572 "fillmore.c"
+ recorder_on_about (self);
+}
+
+
+#line 1062 "fillmore.vala"
+static void _recorder_on_save_graph_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 579 "fillmore.c"
+ recorder_on_save_graph (self);
+}
+
+
+#line 1072 "fillmore.vala"
+static void _recorder_on_rewind_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 586 "fillmore.c"
+ recorder_on_rewind (self);
+}
+
+
+#line 1077 "fillmore.vala"
+static void _recorder_on_end_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 593 "fillmore.c"
+ recorder_on_end (self);
+}
+
+
+#line 1082 "fillmore.vala"
+static void _recorder_on_play_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 600 "fillmore.c"
+ recorder_on_play (self);
+}
+
+
+#line 1094 "fillmore.vala"
+static void _recorder_on_record_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 607 "fillmore.c"
+ recorder_on_record (self);
+}
+
+
+#line 1024 "fillmore.vala"
+static void _recorder_on_view_library_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 614 "fillmore.c"
+ recorder_on_view_library (self);
+}
+
+
+#line 1020 "fillmore.vala"
+static void _recorder_on_snap_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 621 "fillmore.c"
+ recorder_on_snap (self);
+}
+
+
+#line 1114 "fillmore.vala"
+static void _recorder_on_callback_pulse_view_media_engine_callback_pulse (ViewMediaEngine* _sender, gpointer self) {
+#line 628 "fillmore.c"
+ recorder_on_callback_pulse (self);
+}
+
+
+#line 730 "fillmore.vala"
+static void _recorder_on_post_export_view_media_engine_post_export (ViewMediaEngine* _sender, gboolean canceled, gpointer self) {
+#line 635 "fillmore.c"
+ recorder_on_post_export (self, canceled);
+}
+
+
+#line 498 "fillmore.vala"
+static void _recorder_on_position_changed_view_media_engine_position_changed (ViewMediaEngine* _sender, gint64 position, gpointer self) {
+#line 642 "fillmore.c"
+ recorder_on_position_changed (self);
+}
+
+
+#line 1210 "fillmore.vala"
+static void _recorder_on_load_error_model_project_load_error (ModelProject* _sender, const char* _error_, gpointer self) {
+#line 649 "fillmore.c"
+ recorder_on_load_error (self, _error_);
+}
+
+
+#line 1251 "fillmore.vala"
+static void _recorder_on_name_changed_model_project_name_changed (ModelProject* _sender, const char* project_file, gpointer self) {
+#line 656 "fillmore.c"
+ recorder_on_name_changed (self);
+}
+
+
+#line 1256 "fillmore.vala"
+static void _recorder_on_dirty_changed_model_undo_manager_dirty_changed (ModelUndoManager* _sender, gboolean is_dirty, gpointer self) {
+#line 663 "fillmore.c"
+ recorder_on_dirty_changed (self, is_dirty);
+}
+
+
+#line 1263 "fillmore.vala"
+static void _recorder_on_undo_changed_model_undo_manager_undo_changed (ModelUndoManager* _sender, gboolean can_undo, gpointer self) {
+#line 670 "fillmore.c"
+ recorder_on_undo_changed (self, can_undo);
+}
+
+
+#line 1281 "fillmore.vala"
+static void _recorder_on_error_occurred_model_project_error_occurred (ModelProject* _sender, const char* major_message, const char* minor_message, gpointer self) {
+#line 677 "fillmore.c"
+ recorder_on_error_occurred (self, major_message, minor_message);
+}
+
+
+#line 1271 "fillmore.vala"
+static void _recorder_on_playstate_changed_model_project_playstate_changed (ModelProject* _sender, PlayState playstate, gpointer self) {
+#line 684 "fillmore.c"
+ recorder_on_playstate_changed (self, playstate);
+}
+
+
+#line 503 "fillmore.vala"
+static void _recorder_on_track_added_model_project_track_added (ModelProject* _sender, ModelTrack* track, gpointer self) {
+#line 691 "fillmore.c"
+ recorder_on_track_added (self, track);
+}
+
+
+#line 511 "fillmore.vala"
+static void _recorder_on_track_removed_model_project_track_removed (ModelProject* _sender, ModelTrack* track, gpointer self) {
+#line 698 "fillmore.c"
+ recorder_on_track_removed (self, track);
+}
+
+
+#line 1215 "fillmore.vala"
+static void _recorder_on_load_complete_model_project_load_complete (ModelProject* _sender, gpointer self) {
+#line 705 "fillmore.c"
+ recorder_on_load_complete (self);
+}
+
+
+#line 872 "fillmore.vala"
+static void _recorder_on_project_close_model_project_closed (ModelProject* _sender, gpointer self) {
+#line 712 "fillmore.c"
+ recorder_on_project_close (self);
+}
+
+
+#line 1148 "fillmore.vala"
+static void _recorder_on_library_selection_changed_clip_library_view_selection_changed (ClipLibraryView* _sender, gboolean selected, gpointer self) {
+#line 719 "fillmore.c"
+ recorder_on_library_selection_changed (self, selected);
+}
+
+
+#line 543 "fillmore.vala"
+static void _recorder_on_drag_data_received_gtk_widget_drag_data_received (GtkWidget* _sender, GdkDragContext* context, gint x, gint y, GtkSelectionData* selection_data, guint info, guint time_, gpointer self) {
+#line 726 "fillmore.c"
+ recorder_on_drag_data_received (self, _sender, context, x, y, selection_data, info, time_);
+}
+
+
+#line 493 "fillmore.vala"
+static void _recorder_on_track_changed_time_line_track_changed (TimeLine* _sender, gpointer self) {
+#line 733 "fillmore.c"
+ recorder_on_track_changed (self);
+}
+
+
+#line 1131 "fillmore.vala"
+static void _recorder_on_timeline_size_allocate_gtk_widget_size_allocate (GtkWidget* _sender, GdkRectangle* allocation, gpointer self) {
+#line 740 "fillmore.c"
+ recorder_on_timeline_size_allocate (self, allocation);
+}
+
+
+#line 1140 "fillmore.vala"
+static void _recorder_on_timeline_selection_changed_time_line_selection_changed (TimeLine* _sender, gboolean selected, gpointer self) {
+#line 747 "fillmore.c"
+ recorder_on_timeline_selection_changed (self, selected);
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+ return self ? g_object_ref (self) : NULL;
+}
+
+
+#line 960 "fillmore.vala"
+static void _recorder_on_track_new_gtk_button_clicked (GtkButton* _sender, gpointer self) {
+#line 759 "fillmore.c"
+ recorder_on_track_new (self);
+}
+
+
+#line 1082 "fillmore.vala"
+static void _recorder_on_play_gtk_toggle_button_toggled (GtkToggleButton* _sender, gpointer self) {
+#line 766 "fillmore.c"
+ recorder_on_play (self);
+}
+
+
+#line 1094 "fillmore.vala"
+static void _recorder_on_record_gtk_toggle_button_toggled (GtkToggleButton* _sender, gpointer self) {
+#line 773 "fillmore.c"
+ recorder_on_record (self);
+}
+
+
+#line 1072 "fillmore.vala"
+static void _recorder_on_rewind_gtk_button_clicked (GtkButton* _sender, gpointer self) {
+#line 780 "fillmore.c"
+ recorder_on_rewind (self);
+}
+
+
+#line 1077 "fillmore.vala"
+static void _recorder_on_end_gtk_button_clicked (GtkButton* _sender, gpointer self) {
+#line 787 "fillmore.c"
+ recorder_on_end (self);
+}
+
+
+#line 1008 "fillmore.vala"
+static void _recorder_on_zoom_in_gtk_button_clicked (GtkButton* _sender, gpointer self) {
+#line 794 "fillmore.c"
+ recorder_on_zoom_in (self);
+}
+
+
+#line 1012 "fillmore.vala"
+static void _recorder_on_zoom_out_gtk_button_clicked (GtkButton* _sender, gpointer self) {
+#line 801 "fillmore.c"
+ recorder_on_zoom_out (self);
+}
+
+
+#line 1068 "fillmore.vala"
+static void _recorder_on_volume_gtk_button_clicked (GtkButton* _sender, gpointer self) {
+#line 808 "fillmore.c"
+ recorder_on_volume (self);
+}
+
+
+#line 1035 "fillmore.vala"
+static void _recorder_on_library_size_allocate_gtk_widget_size_allocate (GtkWidget* _sender, GdkRectangle* allocation, gpointer self) {
+#line 815 "fillmore.c"
+ recorder_on_library_size_allocate (self, allocation);
+}
+
+
+#line 866 "fillmore.vala"
+static gboolean _recorder_on_delete_event_gtk_widget_delete_event (GtkWidget* _sender, GdkEvent* event, gpointer self) {
+#line 822 "fillmore.c"
+ gboolean result;
+ result = recorder_on_delete_event (self);
+ return result;
+}
+
+
+#line 207 "fillmore.vala"
+Recorder* recorder_construct (GType object_type, const char* project_file, GError** error) {
+#line 831 "fillmore.c"
+ GError * _inner_error_;
+ Recorder * self;
+ char* _tmp0_;
+ GeeArrayList* _tmp1_;
+ ModelAudioProject* _tmp5_;
+ ModelAudioProject* _tmp6_;
+ ModelTimeSystem* _tmp7_;
+ GstCaps* _tmp8_;
+ ViewAudioOutput* _tmp9_;
+ ViewAudioOutput* _tmp10_;
+ ViewAudioOutput* _tmp11_;
+ ViewClickTrack* _tmp12_;
+ ViewClickTrack* _tmp13_;
+ GtkActionGroup* _tmp14_;
+ GtkUIManager* _tmp15_;
+ GtkMenuBar* menubar;
+ GtkToolbar* toolbar;
+ ClipLibraryView* _tmp16_;
+ TimeLine* _tmp17_;
+ GtkMenu* _tmp18_;
+ GtkMenu* _tmp19_;
+ GtkScrolledWindow* _tmp20_;
+ GtkHBox* hbox;
+ HeaderArea* _tmp21_;
+ GtkScrolledWindow* _tmp22_;
+ GtkAdjustment* _tmp23_;
+ GtkHButtonBox* buttons;
+ GtkButton* _tmp24_;
+ GtkImage* _tmp25_;
+ GtkToggleButton* _tmp26_;
+ GtkImage* _tmp27_;
+ GtkToggleButton* _tmp28_;
+ GtkImage* _tmp29_;
+ GtkButton* _tmp30_;
+ GtkImage* _tmp31_;
+ GtkButton* _tmp32_;
+ GtkImage* _tmp33_;
+ GtkButton* _tmp34_;
+ GtkImage* _tmp35_;
+ GtkButton* _tmp36_;
+ GtkImage* _tmp37_;
+ GtkButton* _tmp38_;
+ GtkImage* _tmp39_;
+ GtkVBox* vbox;
+ GtkVBox* main_view;
+ GtkHPaned* _tmp40_;
+ HildonPannableArea* _tmp41_;
+ GtkMenuItem* save_graph;
+ gboolean _tmp42_ = FALSE;
+ _inner_error_ = NULL;
+ self = g_object_newv (object_type, 0, NULL);
+#line 208 "fillmore.vala"
+ class_factory_set_transport_delegate (TRANSPORT_DELEGATE (self));
+#line 209 "fillmore.vala"
+ g_mkdir (_tmp0_ = recorder_get_fillmore_directory (self), 0777);
+#line 887 "fillmore.c"
+ _g_free0 (_tmp0_);
+#line 210 "fillmore.vala"
+ self->priv->load_errors = (_tmp1_ = gee_array_list_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL), _g_object_unref0 (self->priv->load_errors), _tmp1_);
+#line 891 "fillmore.c"
+ {
+ char* _tmp4_;
+ GFile* _tmp3_;
+ GFile* _tmp2_;
+#line 212 "fillmore.vala"
+ gtk_window_set_icon_from_file (GTK_WINDOW (self), _tmp4_ = g_file_get_path (_tmp3_ = g_file_get_child (_tmp2_ = app_dirs_get_resources_dir (), "fillmore_icon.png")), &_inner_error_);
+#line 898 "fillmore.c"
+ _g_free0 (_tmp4_);
+ _g_object_unref0 (_tmp3_);
+ _g_object_unref0 (_tmp2_);
+ if (_inner_error_ != NULL) {
+ goto __catch3_g_error;
+ }
+ }
+ goto __finally3;
+ __catch3_g_error:
+ {
+ GError * e;
+ e = _inner_error_;
+ _inner_error_ = NULL;
+ {
+#line 215 "fillmore.vala"
+ g_warning ("fillmore.vala:215: Could not load application icon: %s", e->message);
+#line 915 "fillmore.c"
+ _g_error_free0 (e);
+ }
+ }
+ __finally3:
+ if (_inner_error_ != NULL) {
+ g_propagate_error (error, _inner_error_);
+ g_object_unref (self);
+ return NULL;
+ }
+#line 219 "fillmore.vala"
+ _tmp5_ = model_audio_project_new (project_file, &_inner_error_);
+#line 927 "fillmore.c"
+ if (_inner_error_ != NULL) {
+ g_propagate_error (error, _inner_error_);
+ g_object_unref (self);
+ return NULL;
+ }
+#line 219 "fillmore.vala"
+ self->project = (_tmp6_ = _tmp5_, _g_object_unref0 (self->project), _tmp6_);
+#line 220 "fillmore.vala"
+ MODEL_PROJECT (self->project)->snap_to_clip = FALSE;
+#line 221 "fillmore.vala"
+ self->priv->provider = (_tmp7_ = MODEL_TIME_SYSTEM (model_bar_beat_time_system_new (MODEL_TEMPO_INFORMATION (self->project))), _g_object_unref0 (self->priv->provider), _tmp7_);
+#line 223 "fillmore.vala"
+ g_signal_connect_object (MODEL_PROJECT (self->project)->media_engine, "callback-pulse", (GCallback) _recorder_on_callback_pulse_view_media_engine_callback_pulse, self, 0);
+#line 224 "fillmore.vala"
+ g_signal_connect_object (MODEL_PROJECT (self->project)->media_engine, "post-export", (GCallback) _recorder_on_post_export_view_media_engine_post_export, self, 0);
+#line 225 "fillmore.vala"
+ g_signal_connect_object (MODEL_PROJECT (self->project)->media_engine, "position-changed", (GCallback) _recorder_on_position_changed_view_media_engine_position_changed, self, 0);
+#line 227 "fillmore.vala"
+ g_signal_connect_object (MODEL_PROJECT (self->project), "load-error", (GCallback) _recorder_on_load_error_model_project_load_error, self, 0);
+#line 228 "fillmore.vala"
+ g_signal_connect_object (MODEL_PROJECT (self->project), "name-changed", (GCallback) _recorder_on_name_changed_model_project_name_changed, self, 0);
+#line 229 "fillmore.vala"
+ g_signal_connect_object (MODEL_PROJECT (self->project)->undo_manager, "dirty-changed", (GCallback) _recorder_on_dirty_changed_model_undo_manager_dirty_changed, self, 0);
+#line 230 "fillmore.vala"
+ g_signal_connect_object (MODEL_PROJECT (self->project)->undo_manager, "undo-changed", (GCallback) _recorder_on_undo_changed_model_undo_manager_undo_changed, self, 0);
+#line 231 "fillmore.vala"
+ g_signal_connect_object (MODEL_PROJECT (self->project), "error-occurred", (GCallback) _recorder_on_error_occurred_model_project_error_occurred, self, 0);
+#line 232 "fillmore.vala"
+ g_signal_connect_object (MODEL_PROJECT (self->project), "playstate-changed", (GCallback) _recorder_on_playstate_changed_model_project_playstate_changed, self, 0);
+#line 233 "fillmore.vala"
+ g_signal_connect_object (MODEL_PROJECT (self->project), "track-added", (GCallback) _recorder_on_track_added_model_project_track_added, self, 0);
+#line 234 "fillmore.vala"
+ g_signal_connect_object (MODEL_PROJECT (self->project), "track-removed", (GCallback) _recorder_on_track_removed_model_project_track_removed, self, 0);
+#line 235 "fillmore.vala"
+ g_signal_connect_object (MODEL_PROJECT (self->project), "load-complete", (GCallback) _recorder_on_load_complete_model_project_load_complete, self, 0);
+#line 236 "fillmore.vala"
+ g_signal_connect_object (MODEL_PROJECT (self->project), "closed", (GCallback) _recorder_on_project_close_model_project_closed, self, 0);
+#line 238 "fillmore.vala"
+ _tmp10_ = (_tmp9_ = view_audio_output_new (_tmp8_ = view_media_engine_get_project_audio_caps (MODEL_PROJECT (self->project)->media_engine), &_inner_error_), _gst_caps_unref0 (_tmp8_), _tmp9_);
+#line 967 "fillmore.c"
+ if (_inner_error_ != NULL) {
+ g_propagate_error (error, _inner_error_);
+ g_object_unref (self);
+ return NULL;
+ }
+#line 238 "fillmore.vala"
+ self->priv->audio_output = (_tmp11_ = _tmp10_, _g_object_unref0 (self->priv->audio_output), _tmp11_);
+#line 239 "fillmore.vala"
+ view_media_engine_connect_output (MODEL_PROJECT (self->project)->media_engine, VIEW_MEDIA_CONNECTOR (self->priv->audio_output));
+#line 240 "fillmore.vala"
+ _tmp12_ = view_click_track_new (MODEL_PROJECT (self->project)->media_engine, MODEL_PROJECT (self->project), &_inner_error_);
+#line 979 "fillmore.c"
+ if (_inner_error_ != NULL) {
+ g_propagate_error (error, _inner_error_);
+ g_object_unref (self);
+ return NULL;
+ }
+#line 240 "fillmore.vala"
+ self->priv->click_track = (_tmp13_ = _tmp12_, _g_object_unref0 (self->priv->click_track), _tmp13_);
+#line 241 "fillmore.vala"
+ gtk_window_set_position (GTK_WINDOW (self), GTK_WIN_POS_CENTER);
+#line 242 "fillmore.vala"
+ gtk_window_set_title (GTK_WINDOW (self), "Fillmore");
+#line 243 "fillmore.vala"
+ gtk_window_set_default_size (GTK_WINDOW (self), 800, 1200);
+#line 245 "fillmore.vala"
+ self->priv->main_group = (_tmp14_ = gtk_action_group_new ("main"), _g_object_unref0 (self->priv->main_group), _tmp14_);
+#line 246 "fillmore.vala"
+ gtk_action_group_add_actions (self->priv->main_group, RECORDER_entries, G_N_ELEMENTS (RECORDER_entries), self);
+#line 247 "fillmore.vala"
+ gtk_action_group_add_toggle_actions (self->priv->main_group, RECORDER_toggle_entries, G_N_ELEMENTS (RECORDER_toggle_entries), self);
+#line 249 "fillmore.vala"
+ self->priv->manager = (_tmp15_ = gtk_ui_manager_new (), _g_object_unref0 (self->priv->manager), _tmp15_);
+#line 250 "fillmore.vala"
+ gtk_ui_manager_insert_action_group (self->priv->manager, self->priv->main_group, 0);
+#line 1003 "fillmore.c"
+ {
+#line 252 "fillmore.vala"
+ gtk_ui_manager_add_ui_from_string (self->priv->manager, RECORDER_ui, (gssize) (-1), &_inner_error_);
+#line 1007 "fillmore.c"
+ if (_inner_error_ != NULL) {
+ goto __catch4_g_error;
+ }
+ }
+ goto __finally4;
+ __catch4_g_error:
+ {
+ GError * e;
+ e = _inner_error_;
+ _inner_error_ = NULL;
+ {
+#line 253 "fillmore.vala"
+ g_error ("fillmore.vala:253: %s", e->message);
+#line 1021 "fillmore.c"
+ _g_error_free0 (e);
+ }
+ }
+ __finally4:
+ if (_inner_error_ != NULL) {
+ g_propagate_error (error, _inner_error_);
+ g_object_unref (self);
+ return NULL;
+ }
+#line 255 "fillmore.vala"
+ menubar = GTK_MENU_BAR (recorder_get_widget (self, self->priv->manager, "/MenuBar"));
+#line 256 "fillmore.vala"
+ toolbar = GTK_TOOLBAR (recorder_get_widget (self, self->priv->manager, "/Toolbar"));
+#line 262 "fillmore.vala"
+ recorder_on_undo_changed (self, FALSE);
+#line 264 "fillmore.vala"
+ self->priv->library = (_tmp16_ = g_object_ref_sink (clip_library_view_new (MODEL_PROJECT (self->project), self->priv->provider, NULL, GDK_ACTION_COPY)), _g_object_unref0 (self->priv->library), _tmp16_);
+#line 265 "fillmore.vala"
+ g_signal_connect_object (self->priv->library, "selection-changed", (GCallback) _recorder_on_library_selection_changed_clip_library_view_selection_changed, self, 0);
+#line 266 "fillmore.vala"
+ g_signal_connect_object (GTK_WIDGET (self->priv->library), "drag-data-received", (GCallback) _recorder_on_drag_data_received_gtk_widget_drag_data_received, self, 0);
+#line 268 "fillmore.vala"
+ self->timeline = (_tmp17_ = g_object_ref_sink (time_line_new (MODEL_PROJECT (self->project), self->priv->provider, GDK_ACTION_COPY)), _g_object_unref0 (self->timeline), _tmp17_);
+#line 269 "fillmore.vala"
+ g_signal_connect_object (self->timeline, "track-changed", (GCallback) _recorder_on_track_changed_time_line_track_changed, self, 0);
+#line 270 "fillmore.vala"
+ g_signal_connect_object (GTK_WIDGET (self->timeline), "drag-data-received", (GCallback) _recorder_on_drag_data_received_gtk_widget_drag_data_received, self, 0);
+#line 271 "fillmore.vala"
+ g_signal_connect_object (GTK_WIDGET (self->timeline), "size-allocate", (GCallback) _recorder_on_timeline_size_allocate_gtk_widget_size_allocate, self, 0);
+#line 272 "fillmore.vala"
+ g_signal_connect_object (self->timeline, "selection-changed", (GCallback) _recorder_on_timeline_selection_changed_time_line_selection_changed, self, 0);
+#line 274 "fillmore.vala"
+ clip_view_context_menu = (_tmp18_ = _g_object_ref0 (GTK_MENU (gtk_ui_manager_get_widget (self->priv->manager, "/ClipContextMenu"))), _g_object_unref0 (clip_view_context_menu), _tmp18_);
+#line 275 "fillmore.vala"
+ clip_library_view_context_menu = (_tmp19_ = _g_object_ref0 (GTK_MENU (gtk_ui_manager_get_widget (self->priv->manager, "/LibraryContextMenu"))), _g_object_unref0 (clip_library_view_context_menu), _tmp19_);
+#line 276 "fillmore.vala"
+ recorder_update_menu (self);
+#line 278 "fillmore.vala"
+ self->priv->library_scrolled = (_tmp20_ = g_object_ref_sink ((GtkScrolledWindow*) gtk_scrolled_window_new (NULL, NULL)), _g_object_unref0 (self->priv->library_scrolled), _tmp20_);
+#line 279 "fillmore.vala"
+ gtk_scrolled_window_set_policy (self->priv->library_scrolled, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+#line 280 "fillmore.vala"
+ gtk_scrolled_window_add_with_viewport (self->priv->library_scrolled, GTK_WIDGET (self->priv->library));
+#line 282 "fillmore.vala"
+ hbox = g_object_ref_sink ((GtkHBox*) gtk_hbox_new (FALSE, 0));
+#line 283 "fillmore.vala"
+ self->priv->header_area = (_tmp21_ = g_object_ref_sink (header_area_new (self, self->priv->provider, TIME_LINE_RULER_HEIGHT)), _g_object_unref0 (self->priv->header_area), _tmp21_);
+#line 284 "fillmore.vala"
+ gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (self->priv->header_area), FALSE, FALSE, (guint) 0);
+#line 287 "fillmore.vala"
+ self->priv->timeline_scrolled = (_tmp22_ = g_object_ref_sink ((GtkScrolledWindow*) gtk_scrolled_window_new (NULL, NULL)), _g_object_unref0 (self->priv->timeline_scrolled), _tmp22_);
+#line 288 "fillmore.vala"
+ gtk_scrolled_window_set_policy (self->priv->timeline_scrolled, GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER);
+#line 289 "fillmore.vala"
+ gtk_scrolled_window_add_with_viewport (self->priv->timeline_scrolled, GTK_WIDGET (self->timeline));
+#line 290 "fillmore.vala"
+ gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (self->priv->timeline_scrolled), TRUE, TRUE, (guint) 0);
+#line 291 "fillmore.vala"
+ self->priv->h_adjustment = (_tmp23_ = _g_object_ref0 (gtk_scrolled_window_get_hadjustment (self->priv->timeline_scrolled)), _g_object_unref0 (self->priv->h_adjustment), _tmp23_);
+#line 295 "fillmore.vala"
+ buttons = g_object_ref_sink ((GtkHButtonBox*) gtk_hbutton_box_new ());
+#line 296 "fillmore.vala"
+ self->priv->addnew_button = (_tmp24_ = g_object_ref_sink ((GtkButton*) gtk_button_new ()), _g_object_unref0 (self->priv->addnew_button), _tmp24_);
+#line 297 "fillmore.vala"
+ gtk_button_set_image (self->priv->addnew_button, GTK_WIDGET (_tmp25_ = g_object_ref_sink ((GtkImage*) gtk_image_new_from_icon_name ("general_add", GTK_ICON_SIZE_BUTTON))));
+#line 1087 "fillmore.c"
+ _g_object_unref0 (_tmp25_);
+#line 298 "fillmore.vala"
+ g_signal_connect_object (self->priv->addnew_button, "clicked", (GCallback) _recorder_on_track_new_gtk_button_clicked, self, 0);
+#line 299 "fillmore.vala"
+ gtk_container_add (GTK_CONTAINER (buttons), GTK_WIDGET (self->priv->addnew_button));
+#line 300 "fillmore.vala"
+ self->priv->play_button = (_tmp26_ = g_object_ref_sink ((GtkToggleButton*) gtk_toggle_button_new ()), _g_object_unref0 (self->priv->play_button), _tmp26_);
+#line 301 "fillmore.vala"
+ gtk_button_set_image (GTK_BUTTON (self->priv->play_button), GTK_WIDGET (_tmp27_ = g_object_ref_sink ((GtkImage*) gtk_image_new_from_icon_name ("camera_playback", GTK_ICON_SIZE_BUTTON))));
+#line 1097 "fillmore.c"
+ _g_object_unref0 (_tmp27_);
+#line 302 "fillmore.vala"
+ g_signal_connect_object (self->priv->play_button, "toggled", (GCallback) _recorder_on_play_gtk_toggle_button_toggled, self, 0);
+#line 303 "fillmore.vala"
+ gtk_container_add (GTK_CONTAINER (buttons), GTK_WIDGET (self->priv->play_button));
+#line 304 "fillmore.vala"
+ self->priv->record_button = (_tmp28_ = g_object_ref_sink ((GtkToggleButton*) gtk_toggle_button_new ()), _g_object_unref0 (self->priv->record_button), _tmp28_);
+#line 305 "fillmore.vala"
+ gtk_button_set_image (GTK_BUTTON (self->priv->record_button), GTK_WIDGET (_tmp29_ = g_object_ref_sink ((GtkImage*) gtk_image_new_from_icon_name ("camera_video_recording", GTK_ICON_SIZE_BUTTON))));
+#line 1107 "fillmore.c"
+ _g_object_unref0 (_tmp29_);
+#line 306 "fillmore.vala"
+ g_signal_connect_object (self->priv->record_button, "toggled", (GCallback) _recorder_on_record_gtk_toggle_button_toggled, self, 0);
+#line 307 "fillmore.vala"
+ gtk_container_add (GTK_CONTAINER (buttons), GTK_WIDGET (self->priv->record_button));
+#line 308 "fillmore.vala"
+ self->priv->rewind_button = (_tmp30_ = g_object_ref_sink ((GtkButton*) gtk_button_new ()), _g_object_unref0 (self->priv->rewind_button), _tmp30_);
+#line 309 "fillmore.vala"
+ gtk_button_set_image (self->priv->rewind_button, GTK_WIDGET (_tmp31_ = g_object_ref_sink ((GtkImage*) gtk_image_new_from_icon_name ("pdf_viewer_first_page", GTK_ICON_SIZE_BUTTON))));
+#line 1117 "fillmore.c"
+ _g_object_unref0 (_tmp31_);
+#line 310 "fillmore.vala"
+ g_signal_connect_object (self->priv->rewind_button, "clicked", (GCallback) _recorder_on_rewind_gtk_button_clicked, self, 0);
+#line 311 "fillmore.vala"
+ gtk_container_add (GTK_CONTAINER (buttons), GTK_WIDGET (self->priv->rewind_button));
+#line 312 "fillmore.vala"
+ self->priv->forward_button = (_tmp32_ = g_object_ref_sink ((GtkButton*) gtk_button_new ()), _g_object_unref0 (self->priv->forward_button), _tmp32_);
+#line 313 "fillmore.vala"
+ gtk_button_set_image (self->priv->forward_button, GTK_WIDGET (_tmp33_ = g_object_ref_sink ((GtkImage*) gtk_image_new_from_icon_name ("pdf_viewer_last_page", GTK_ICON_SIZE_BUTTON))));
+#line 1127 "fillmore.c"
+ _g_object_unref0 (_tmp33_);
+#line 314 "fillmore.vala"
+ g_signal_connect_object (self->priv->forward_button, "clicked", (GCallback) _recorder_on_end_gtk_button_clicked, self, 0);
+#line 315 "fillmore.vala"
+ gtk_container_add (GTK_CONTAINER (buttons), GTK_WIDGET (self->priv->forward_button));
+#line 316 "fillmore.vala"
+ self->priv->zoomin_button = (_tmp34_ = g_object_ref_sink ((GtkButton*) gtk_button_new ()), _g_object_unref0 (self->priv->zoomin_button), _tmp34_);
+#line 317 "fillmore.vala"
+ gtk_button_set_image (self->priv->zoomin_button, GTK_WIDGET (_tmp35_ = g_object_ref_sink ((GtkImage*) gtk_image_new_from_icon_name ("pdf_zoomin", GTK_ICON_SIZE_BUTTON))));
+#line 1137 "fillmore.c"
+ _g_object_unref0 (_tmp35_);
+#line 318 "fillmore.vala"
+ g_signal_connect_object (self->priv->zoomin_button, "clicked", (GCallback) _recorder_on_zoom_in_gtk_button_clicked, self, 0);
+#line 319 "fillmore.vala"
+ gtk_container_add (GTK_CONTAINER (buttons), GTK_WIDGET (self->priv->zoomin_button));
+#line 320 "fillmore.vala"
+ self->priv->zoomout_button = (_tmp36_ = g_object_ref_sink ((GtkButton*) gtk_button_new ()), _g_object_unref0 (self->priv->zoomout_button), _tmp36_);
+#line 321 "fillmore.vala"
+ gtk_button_set_image (self->priv->zoomout_button, GTK_WIDGET (_tmp37_ = g_object_ref_sink ((GtkImage*) gtk_image_new_from_icon_name ("pdf_zoomout", GTK_ICON_SIZE_BUTTON))));
+#line 1147 "fillmore.c"
+ _g_object_unref0 (_tmp37_);
+#line 322 "fillmore.vala"
+ g_signal_connect_object (self->priv->zoomout_button, "clicked", (GCallback) _recorder_on_zoom_out_gtk_button_clicked, self, 0);
+#line 323 "fillmore.vala"
+ gtk_container_add (GTK_CONTAINER (buttons), GTK_WIDGET (self->priv->zoomout_button));
+#line 324 "fillmore.vala"
+ self->priv->volume_button = (_tmp38_ = g_object_ref_sink ((GtkButton*) gtk_button_new ()), _g_object_unref0 (self->priv->volume_button), _tmp38_);
+#line 325 "fillmore.vala"
+ gtk_button_set_image (self->priv->volume_button, GTK_WIDGET (_tmp39_ = g_object_ref_sink ((GtkImage*) gtk_image_new_from_icon_name ("statusarea_volumelevel4", GTK_ICON_SIZE_BUTTON))));
+#line 1157 "fillmore.c"
+ _g_object_unref0 (_tmp39_);
+#line 326 "fillmore.vala"
+ g_signal_connect_object (self->priv->volume_button, "clicked", (GCallback) _recorder_on_volume_gtk_button_clicked, self, 0);
+#line 327 "fillmore.vala"
+ gtk_container_add (GTK_CONTAINER (buttons), GTK_WIDGET (self->priv->volume_button));
+#line 330 "fillmore.vala"
+ vbox = g_object_ref_sink ((GtkVBox*) gtk_vbox_new (FALSE, 0));
+#line 331 "fillmore.vala"
+ gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (menubar), FALSE, FALSE, (guint) 0);
+#line 333 "fillmore.vala"
+ gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (buttons), FALSE, FALSE, (guint) 0);
+#line 335 "fillmore.vala"
+ main_view = g_object_ref_sink ((GtkVBox*) gtk_vbox_new (FALSE, 0));
+#line 337 "fillmore.vala"
+ self->priv->timeline_library_pane = (_tmp40_ = g_object_ref_sink ((GtkHPaned*) gtk_hpaned_new ()), _g_object_unref0 (self->priv->timeline_library_pane), _tmp40_);
+#line 338 "fillmore.vala"
+ gtk_paned_set_position (GTK_PANED (self->priv->timeline_library_pane), MODEL_PROJECT (self->project)->library_width);
+#line 339 "fillmore.vala"
+ gtk_paned_add1 (GTK_PANED (self->priv->timeline_library_pane), GTK_WIDGET (hbox));
+#line 340 "fillmore.vala"
+ GTK_PANED (self->priv->timeline_library_pane)->child1_resize = (guint) 1;
+#line 341 "fillmore.vala"
+ gtk_paned_add2 (GTK_PANED (self->priv->timeline_library_pane), GTK_WIDGET (self->priv->library_scrolled));
+#line 342 "fillmore.vala"
+ GTK_PANED (self->priv->timeline_library_pane)->child2_resize = (guint) 0;
+#line 343 "fillmore.vala"
+ g_signal_connect_object (GTK_PANED (self->priv->timeline_library_pane)->child1, "size-allocate", (GCallback) _recorder_on_library_size_allocate_gtk_widget_size_allocate, self, 0);
+#line 346 "fillmore.vala"
+ gtk_box_pack_start (GTK_BOX (main_view), GTK_WIDGET (self->priv->timeline_library_pane), TRUE, TRUE, (guint) 0);
+#line 349 "fillmore.vala"
+ self->priv->scrollwin = (_tmp41_ = g_object_ref_sink ((HildonPannableArea*) hildon_pannable_area_new ()), _g_object_unref0 (self->priv->scrollwin), _tmp41_);
+#line 350 "fillmore.vala"
+ hildon_pannable_area_add_with_viewport (self->priv->scrollwin, GTK_WIDGET (main_view));
+#line 351 "fillmore.vala"
+ gtk_container_add (GTK_CONTAINER (vbox), GTK_WIDGET (self->priv->scrollwin));
+#line 353 "fillmore.vala"
+ gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (vbox));
+#line 355 "fillmore.vala"
+ recorder_on_view_library (self);
+#line 357 "fillmore.vala"
+ save_graph = GTK_MENU_ITEM (recorder_get_widget (self, self->priv->manager, "/MenuBar/HelpMenu/SaveGraph"));
+#line 360 "fillmore.vala"
+ if (!do_print_graph) {
+#line 360 "fillmore.vala"
+ _tmp42_ = save_graph != NULL;
+#line 1203 "fillmore.c"
+ } else {
+#line 360 "fillmore.vala"
+ _tmp42_ = FALSE;
+#line 1207 "fillmore.c"
+ }
+#line 360 "fillmore.vala"
+ if (_tmp42_) {
+#line 361 "fillmore.vala"
+ gtk_object_destroy (GTK_OBJECT (save_graph));
+#line 1213 "fillmore.c"
+ }
+#line 364 "fillmore.vala"
+ gtk_window_add_accel_group (GTK_WINDOW (self), gtk_ui_manager_get_accel_group (self->priv->manager));
+#line 365 "fillmore.vala"
+ gtk_widget_grab_focus (GTK_WIDGET (self->timeline));
+#line 366 "fillmore.vala"
+ g_signal_connect_object (GTK_WIDGET (self), "delete-event", (GCallback) _recorder_on_delete_event_gtk_widget_delete_event, self, 0);
+#line 367 "fillmore.vala"
+ self->priv->loading = TRUE;
+#line 368 "fillmore.vala"
+ model_project_load (MODEL_PROJECT (self->project), project_file);
+#line 369 "fillmore.vala"
+ if (project_file == NULL) {
+#line 370 "fillmore.vala"
+ recorder_default_track_set (self);
+#line 371 "fillmore.vala"