Initial commit master
authorDru Moore <usr@dru-id.co.uk>
Thu, 18 Nov 2010 00:01:44 +0000 (00:01 +0000)
committerDru Moore <usr@dru-id.co.uk>
Thu, 18 Nov 2010 00:01:44 +0000 (00:01 +0000)
new file:   AUTHORS
new file:   COPYING
new file:   INSTALL
new file:   MAINTAINERS
new file:   Makefile
new file:   NEWS
new file:   README
new file:   THANKS
new file:   configure
new file:   configure.mk
new file:   libfill.so
new file:   marina.mk
new file:   minver
new file:   misc/fillmore.desktop
new file:   misc/fillmore.xml
new file:   misc/lombard.desktop
new file:   misc/lombard.xml
new file:   resources/dot.png
new file:   resources/fillmore.glade
new file:   resources/fillmore.rc
new file:   resources/fillmore.svg
new file:   resources/fillmore_icon.png
new file:   resources/lombard.svg
new file:   resources/lombard_icon.png
new file:   resources/max_speaker.png
new file:   resources/min_speaker.png
new file:   src/fillmore/FillmoreClassFactory.vala
new file:   src/fillmore/Makefile
new file:   src/fillmore/ProjectProperties.vala
new file:   src/fillmore/VolumeAndPanPopUp.vala
new file:   src/fillmore/audio_project.vala
new file:   src/fillmore/fillmore.vala
new file:   src/fillmore/fillmore/.stamp
new file:   src/fillmore/fillmore/FillmoreClassFactory.c
new file:   src/fillmore/fillmore/FillmoreClassFactory.o
new file:   src/fillmore/fillmore/ProjectProperties.c
new file:   src/fillmore/fillmore/ProjectProperties.o
new file:   src/fillmore/fillmore/VolumeAndPanPopUp.c
new file:   src/fillmore/fillmore/VolumeAndPanPopUp.o
new file:   src/fillmore/fillmore/audio_project.c
new file:   src/fillmore/fillmore/audio_project.o
new file:   src/fillmore/fillmore/fillmore.c
new file:   src/fillmore/fillmore/fillmore.o
new file:   src/fillmore/fillmore/header_area.c
new file:   src/fillmore/fillmore/header_area.o
new file:   src/fillmore/fillmore/trackinformation.c
new file:   src/fillmore/fillmore/trackinformation.o
new file:   src/fillmore/header_area.vala
new file:   src/fillmore/sources.mk
new file:   src/fillmore/trackinformation.vala
new file:   src/lombard/Makefile
new file:   src/lombard/lombard.vala
new file:   src/lombard/lombard/.stamp
new file:   src/lombard/lombard/lombard.c
new file:   src/lombard/lombard/lombard.o
new file:   src/lombard/lombard/video_project.c
new file:   src/lombard/lombard/video_project.o
new file:   src/lombard/sources.mk
new file:   src/lombard/video_project.vala
new file:   src/marina/AppDirs.vala
new file:   src/marina/AudioMeter.vala
new file:   src/marina/ClassFactory.vala
new file:   src/marina/ClipLibraryView.vala
new file:   src/marina/DialogUtils.vala
new file:   src/marina/Logging.vala
new file:   src/marina/Makefile
new file:   src/marina/MediaEngine.vala
new file:   src/marina/MultiFileProgress.vala
new file:   src/marina/ProjectLoader.vala
new file:   src/marina/Ruler.vala
new file:   src/marina/StatusBar.vala
new file:   src/marina/TimeSystem.vala
new file:   src/marina/TrackView.vala
new file:   src/marina/TransportDelegate.vala
new file:   src/marina/UndoManager.vala
new file:   src/marina/clip.vala
new file:   src/marina/command.vala
new file:   src/marina/import.vala
new file:   src/marina/libmarina.a
new file:   src/marina/marina.h
new file:   src/marina/marina/.stamp
new file:   src/marina/marina/AppDirs.c
new file:   src/marina/marina/AppDirs.o
new file:   src/marina/marina/AudioMeter.c
new file:   src/marina/marina/AudioMeter.o
new file:   src/marina/marina/ClassFactory.c
new file:   src/marina/marina/ClassFactory.o
new file:   src/marina/marina/ClipLibraryView.c
new file:   src/marina/marina/ClipLibraryView.o
new file:   src/marina/marina/DialogUtils.c
new file:   src/marina/marina/DialogUtils.o
new file:   src/marina/marina/Logging.c
new file:   src/marina/marina/Logging.o
new file:   src/marina/marina/MediaEngine.c
new file:   src/marina/marina/MediaEngine.o
new file:   src/marina/marina/MultiFileProgress.c
new file:   src/marina/marina/MultiFileProgress.o
new file:   src/marina/marina/ProjectLoader.c
new file:   src/marina/marina/ProjectLoader.o
new file:   src/marina/marina/Ruler.c
new file:   src/marina/marina/Ruler.o
new file:   src/marina/marina/StatusBar.c
new file:   src/marina/marina/StatusBar.o
new file:   src/marina/marina/TimeSystem.c
new file:   src/marina/marina/TimeSystem.o
new file:   src/marina/marina/TrackView.c
new file:   src/marina/marina/TrackView.o
new file:   src/marina/marina/TransportDelegate.c
new file:   src/marina/marina/TransportDelegate.o
new file:   src/marina/marina/UndoManager.c
new file:   src/marina/marina/UndoManager.o
new file:   src/marina/marina/clip.c
new file:   src/marina/marina/clip.o
new file:   src/marina/marina/command.c
new file:   src/marina/marina/command.o
new file:   src/marina/marina/import.c
new file:   src/marina/marina/import.o
new file:   src/marina/marina/marina.vapi
new file:   src/marina/marina/project.c
new file:   src/marina/marina/project.o
new file:   src/marina/marina/singledecodebin.c
new file:   src/marina/marina/singledecodebin.o
new file:   src/marina/marina/thumbnailsink.c
new file:   src/marina/marina/thumbnailsink.o
new file:   src/marina/marina/timeline.c
new file:   src/marina/marina/timeline.o
new file:   src/marina/marina/track.c
new file:   src/marina/marina/track.o
new file:   src/marina/marina/ui_clip.c
new file:   src/marina/marina/ui_clip.o
new file:   src/marina/marina/util.c
new file:   src/marina/marina/util.o
new file:   src/marina/marina/video_track.c
new file:   src/marina/marina/video_track.o
new file:   src/marina/project.vala
new file:   src/marina/singledecodebin.vala
new file:   src/marina/sources.mk
new file:   src/marina/thumbnailsink.vala
new file:   src/marina/timeline.vala
new file:   src/marina/track.vala
new file:   src/marina/ui_clip.vala
new file:   src/marina/util.vala
new file:   src/marina/video_track.vala
new file:   src/test/Makefile
new file:   src/test/debug/.stamp
new file:   src/test/debug/Logging.c
new file:   src/test/debug/Logging.o
new file:   src/test/debug/ProjectLoader.c
new file:   src/test/debug/ProjectLoader.o
new file:   src/test/debug/ProjectLoading.c
new file:   src/test/debug/ProjectLoading.o
new file:   src/test/debug/test.c
new file:   src/test/debug/test.o
new file:   src/test/debug/util.c
new file:   src/test/debug/util.o
new file:   src/test/marina/ProjectLoading.vala
new file:   src/test/sources.mk
new file:   src/test/test.vala
new file:   www/index.html

159 files changed:
AUTHORS [new file with mode: 0644]
COPYING [new file with mode: 0644]
INSTALL [new file with mode: 0644]
MAINTAINERS [new file with mode: 0644]
Makefile [new file with mode: 0644]
NEWS [new file with mode: 0644]
README [new file with mode: 0644]
THANKS [new file with mode: 0644]
configure [new file with mode: 0755]
configure.mk [new file with mode: 0644]
libfill.so [new file with mode: 0755]
marina.mk [new file with mode: 0644]
minver [new file with mode: 0755]
misc/fillmore.desktop [new file with mode: 0644]
misc/fillmore.xml [new file with mode: 0644]
misc/lombard.desktop [new file with mode: 0644]
misc/lombard.xml [new file with mode: 0644]
resources/dot.png [new file with mode: 0644]
resources/fillmore.glade [new file with mode: 0644]
resources/fillmore.rc [new file with mode: 0644]
resources/fillmore.svg [new file with mode: 0644]
resources/fillmore_icon.png [new file with mode: 0644]
resources/lombard.svg [new file with mode: 0644]
resources/lombard_icon.png [new file with mode: 0644]
resources/max_speaker.png [new file with mode: 0644]
resources/min_speaker.png [new file with mode: 0644]
src/fillmore/FillmoreClassFactory.vala [new file with mode: 0644]
src/fillmore/Makefile [new file with mode: 0644]
src/fillmore/ProjectProperties.vala [new file with mode: 0644]
src/fillmore/VolumeAndPanPopUp.vala [new file with mode: 0644]
src/fillmore/audio_project.vala [new file with mode: 0644]
src/fillmore/fillmore.vala [new file with mode: 0644]
src/fillmore/fillmore/.stamp [new file with mode: 0644]
src/fillmore/fillmore/FillmoreClassFactory.c [new file with mode: 0644]
src/fillmore/fillmore/FillmoreClassFactory.o [new file with mode: 0644]
src/fillmore/fillmore/ProjectProperties.c [new file with mode: 0644]
src/fillmore/fillmore/ProjectProperties.o [new file with mode: 0644]
src/fillmore/fillmore/VolumeAndPanPopUp.c [new file with mode: 0644]
src/fillmore/fillmore/VolumeAndPanPopUp.o [new file with mode: 0644]
src/fillmore/fillmore/audio_project.c [new file with mode: 0644]
src/fillmore/fillmore/audio_project.o [new file with mode: 0644]
src/fillmore/fillmore/fillmore.c [new file with mode: 0644]
src/fillmore/fillmore/fillmore.o [new file with mode: 0644]
src/fillmore/fillmore/header_area.c [new file with mode: 0644]
src/fillmore/fillmore/header_area.o [new file with mode: 0644]
src/fillmore/fillmore/trackinformation.c [new file with mode: 0644]
src/fillmore/fillmore/trackinformation.o [new file with mode: 0644]
src/fillmore/header_area.vala [new file with mode: 0644]
src/fillmore/sources.mk [new file with mode: 0644]
src/fillmore/trackinformation.vala [new file with mode: 0644]
src/lombard/Makefile [new file with mode: 0644]
src/lombard/lombard.vala [new file with mode: 0644]
src/lombard/lombard/.stamp [new file with mode: 0644]
src/lombard/lombard/lombard.c [new file with mode: 0644]
src/lombard/lombard/lombard.o [new file with mode: 0644]
src/lombard/lombard/video_project.c [new file with mode: 0644]
src/lombard/lombard/video_project.o [new file with mode: 0644]
src/lombard/sources.mk [new file with mode: 0644]
src/lombard/video_project.vala [new file with mode: 0644]
src/marina/AppDirs.vala [new file with mode: 0644]
src/marina/AudioMeter.vala [new file with mode: 0644]
src/marina/ClassFactory.vala [new file with mode: 0644]
src/marina/ClipLibraryView.vala [new file with mode: 0644]
src/marina/DialogUtils.vala [new file with mode: 0644]
src/marina/Logging.vala [new file with mode: 0644]
src/marina/Makefile [new file with mode: 0644]
src/marina/MediaEngine.vala [new file with mode: 0644]
src/marina/MultiFileProgress.vala [new file with mode: 0644]
src/marina/ProjectLoader.vala [new file with mode: 0644]
src/marina/Ruler.vala [new file with mode: 0644]
src/marina/StatusBar.vala [new file with mode: 0644]
src/marina/TimeSystem.vala [new file with mode: 0644]
src/marina/TrackView.vala [new file with mode: 0644]
src/marina/TransportDelegate.vala [new file with mode: 0644]
src/marina/UndoManager.vala [new file with mode: 0644]
src/marina/clip.vala [new file with mode: 0644]
src/marina/command.vala [new file with mode: 0644]
src/marina/import.vala [new file with mode: 0644]
src/marina/libmarina.a [new file with mode: 0644]
src/marina/marina.h [new file with mode: 0644]
src/marina/marina/.stamp [new file with mode: 0644]
src/marina/marina/AppDirs.c [new file with mode: 0644]
src/marina/marina/AppDirs.o [new file with mode: 0644]
src/marina/marina/AudioMeter.c [new file with mode: 0644]
src/marina/marina/AudioMeter.o [new file with mode: 0644]
src/marina/marina/ClassFactory.c [new file with mode: 0644]
src/marina/marina/ClassFactory.o [new file with mode: 0644]
src/marina/marina/ClipLibraryView.c [new file with mode: 0644]
src/marina/marina/ClipLibraryView.o [new file with mode: 0644]
src/marina/marina/DialogUtils.c [new file with mode: 0644]
src/marina/marina/DialogUtils.o [new file with mode: 0644]
src/marina/marina/Logging.c [new file with mode: 0644]
src/marina/marina/Logging.o [new file with mode: 0644]
src/marina/marina/MediaEngine.c [new file with mode: 0644]
src/marina/marina/MediaEngine.o [new file with mode: 0644]
src/marina/marina/MultiFileProgress.c [new file with mode: 0644]
src/marina/marina/MultiFileProgress.o [new file with mode: 0644]
src/marina/marina/ProjectLoader.c [new file with mode: 0644]
src/marina/marina/ProjectLoader.o [new file with mode: 0644]
src/marina/marina/Ruler.c [new file with mode: 0644]
src/marina/marina/Ruler.o [new file with mode: 0644]
src/marina/marina/StatusBar.c [new file with mode: 0644]
src/marina/marina/StatusBar.o [new file with mode: 0644]
src/marina/marina/TimeSystem.c [new file with mode: 0644]
src/marina/marina/TimeSystem.o [new file with mode: 0644]
src/marina/marina/TrackView.c [new file with mode: 0644]
src/marina/marina/TrackView.o [new file with mode: 0644]
src/marina/marina/TransportDelegate.c [new file with mode: 0644]
src/marina/marina/TransportDelegate.o [new file with mode: 0644]
src/marina/marina/UndoManager.c [new file with mode: 0644]
src/marina/marina/UndoManager.o [new file with mode: 0644]
src/marina/marina/clip.c [new file with mode: 0644]
src/marina/marina/clip.o [new file with mode: 0644]
src/marina/marina/command.c [new file with mode: 0644]
src/marina/marina/command.o [new file with mode: 0644]
src/marina/marina/import.c [new file with mode: 0644]
src/marina/marina/import.o [new file with mode: 0644]
src/marina/marina/marina.vapi [new file with mode: 0644]
src/marina/marina/project.c [new file with mode: 0644]
src/marina/marina/project.o [new file with mode: 0644]
src/marina/marina/singledecodebin.c [new file with mode: 0644]
src/marina/marina/singledecodebin.o [new file with mode: 0644]
src/marina/marina/thumbnailsink.c [new file with mode: 0644]
src/marina/marina/thumbnailsink.o [new file with mode: 0644]
src/marina/marina/timeline.c [new file with mode: 0644]
src/marina/marina/timeline.o [new file with mode: 0644]
src/marina/marina/track.c [new file with mode: 0644]
src/marina/marina/track.o [new file with mode: 0644]
src/marina/marina/ui_clip.c [new file with mode: 0644]
src/marina/marina/ui_clip.o [new file with mode: 0644]
src/marina/marina/util.c [new file with mode: 0644]
src/marina/marina/util.o [new file with mode: 0644]
src/marina/marina/video_track.c [new file with mode: 0644]
src/marina/marina/video_track.o [new file with mode: 0644]
src/marina/project.vala [new file with mode: 0644]
src/marina/singledecodebin.vala [new file with mode: 0644]
src/marina/sources.mk [new file with mode: 0644]
src/marina/thumbnailsink.vala [new file with mode: 0644]
src/marina/timeline.vala [new file with mode: 0644]
src/marina/track.vala [new file with mode: 0644]
src/marina/ui_clip.vala [new file with mode: 0644]
src/marina/util.vala [new file with mode: 0644]
src/marina/video_track.vala [new file with mode: 0644]
src/test/Makefile [new file with mode: 0644]
src/test/debug/.stamp [new file with mode: 0644]
src/test/debug/Logging.c [new file with mode: 0644]
src/test/debug/Logging.o [new file with mode: 0644]
src/test/debug/ProjectLoader.c [new file with mode: 0644]
src/test/debug/ProjectLoader.o [new file with mode: 0644]
src/test/debug/ProjectLoading.c [new file with mode: 0644]
src/test/debug/ProjectLoading.o [new file with mode: 0644]
src/test/debug/test.c [new file with mode: 0644]
src/test/debug/test.o [new file with mode: 0644]
src/test/debug/util.c [new file with mode: 0644]
src/test/debug/util.o [new file with mode: 0644]
src/test/marina/ProjectLoading.vala [new file with mode: 0644]
src/test/sources.mk [new file with mode: 0644]
src/test/test.vala [new file with mode: 0644]
www/index.html [new file with mode: 0644]

diff --git a/AUTHORS b/AUTHORS
new file mode 100644 (file)
index 0000000..82070f4
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,5 @@
+Robert Powell <rob@yorba.org>
+Adam Dingle <adam@yorba.org>
+Andrew O'Mahony <andrew.omahony@att.net>
+Dru Moore <usr@dru-id.co.uk>
+
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..3b575d1
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,465 @@
+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
+
diff --git a/INSTALL b/INSTALL
new file mode 100644 (file)
index 0000000..c6caad9
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,50 @@
+
+    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
+
diff --git a/MAINTAINERS b/MAINTAINERS
new file mode 100644 (file)
index 0000000..d86078f
--- /dev/null
@@ -0,0 +1,3 @@
+Robert Powell
+email: rob@yorba.org
+
diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..ff366b5
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,116 @@
+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
+
diff --git a/NEWS b/NEWS
new file mode 100644 (file)
index 0000000..14931a9
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,19 @@
+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.
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..1f531c9
--- /dev/null
+++ b/README
@@ -0,0 +1,84 @@
+
+    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
+
diff --git a/THANKS b/THANKS
new file mode 100644 (file)
index 0000000..ca61fe8
--- /dev/null
+++ b/THANKS
@@ -0,0 +1,4 @@
+We'd like to thank the following contributors:
+
+Matt Jones <mattjones@workhorsy.org>
+
diff --git a/configure b/configure
new file mode 100755 (executable)
index 0000000..e440cfd
--- /dev/null
+++ b/configure
@@ -0,0 +1,84 @@
+#! /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"
diff --git a/configure.mk b/configure.mk
new file mode 100644 (file)
index 0000000..086447a
--- /dev/null
@@ -0,0 +1 @@
+CONFIG_IN=../../configure.mk
diff --git a/libfill.so b/libfill.so
new file mode 100755 (executable)
index 0000000..41e5874
Binary files /dev/null and b/libfill.so differ
diff --git a/marina.mk b/marina.mk
new file mode 100644 (file)
index 0000000..1320f7d
--- /dev/null
+++ b/marina.mk
@@ -0,0 +1,176 @@
+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)
+
diff --git a/minver b/minver
new file mode 100755 (executable)
index 0000000..dac8545
--- /dev/null
+++ b/minver
@@ -0,0 +1,86 @@
+#! /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
+
diff --git a/misc/fillmore.desktop b/misc/fillmore.desktop
new file mode 100644 (file)
index 0000000..dfa8db8
--- /dev/null
@@ -0,0 +1,13 @@
+
+[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
diff --git a/misc/fillmore.xml b/misc/fillmore.xml
new file mode 100644 (file)
index 0000000..d3fc2b8
--- /dev/null
@@ -0,0 +1,15 @@
+<?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>
diff --git a/misc/lombard.desktop b/misc/lombard.desktop
new file mode 100644 (file)
index 0000000..68e0525
--- /dev/null
@@ -0,0 +1,14 @@
+
+[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
+
diff --git a/misc/lombard.xml b/misc/lombard.xml
new file mode 100644 (file)
index 0000000..030d4fc
--- /dev/null
@@ -0,0 +1,16 @@
+<?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>
+
diff --git a/resources/dot.png b/resources/dot.png
new file mode 100644 (file)
index 0000000..870fb34
Binary files /dev/null and b/resources/dot.png differ
diff --git a/resources/fillmore.glade b/resources/fillmore.glade
new file mode 100644 (file)
index 0000000..f14a832
--- /dev/null
@@ -0,0 +1,310 @@
+<?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>
diff --git a/resources/fillmore.rc b/resources/fillmore.rc
new file mode 100644 (file)
index 0000000..85d92d9
--- /dev/null
@@ -0,0 +1,22 @@
+/* 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"
diff --git a/resources/fillmore.svg b/resources/fillmore.svg
new file mode 100644 (file)
index 0000000..1a403f0
--- /dev/null
@@ -0,0 +1,162 @@
+<?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
diff --git a/resources/fillmore_icon.png b/resources/fillmore_icon.png
new file mode 100644 (file)
index 0000000..15c6d63
Binary files /dev/null and b/resources/fillmore_icon.png differ
diff --git a/resources/lombard.svg b/resources/lombard.svg
new file mode 100644 (file)
index 0000000..20bb8d6
--- /dev/null
@@ -0,0 +1,516 @@
+<?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
diff --git a/resources/lombard_icon.png b/resources/lombard_icon.png
new file mode 100644 (file)
index 0000000..6d04d3a
Binary files /dev/null and b/resources/lombard_icon.png differ
diff --git a/resources/max_speaker.png b/resources/max_speaker.png
new file mode 100644 (file)
index 0000000..7c294bc
Binary files /dev/null and b/resources/max_speaker.png differ
diff --git a/resources/min_speaker.png b/resources/min_speaker.png
new file mode 100644 (file)
index 0000000..70c4446
Binary files /dev/null and b/resources/min_speaker.png differ
diff --git a/src/fillmore/FillmoreClassFactory.vala b/src/fillmore/FillmoreClassFactory.vala
new file mode 100644 (file)
index 0000000..9fd2d07
--- /dev/null
@@ -0,0 +1,56 @@
+/* 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);
+    }
+}
diff --git a/src/fillmore/Makefile b/src/fillmore/Makefile
new file mode 100644 (file)
index 0000000..d96a73a
--- /dev/null
@@ -0,0 +1,21 @@
+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
+
diff --git a/src/fillmore/ProjectProperties.vala b/src/fillmore/ProjectProperties.vala
new file mode 100644 (file)
index 0000000..1caff22
--- /dev/null
@@ -0,0 +1,125 @@
+/* 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));
+    }
+}
diff --git a/src/fillmore/VolumeAndPanPopUp.vala b/src/fillmore/VolumeAndPanPopUp.vala
new file mode 100644 (file)
index 0000000..2d07a4e
--- /dev/null
@@ -0,0 +1,68 @@
+/*  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);
+  }
+
+}
+
+}
diff --git a/src/fillmore/audio_project.vala b/src/fillmore/audio_project.vala
new file mode 100644 (file)
index 0000000..ac567ca
--- /dev/null
@@ -0,0 +1,153 @@
+/* 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);
+    }
+
+}
+}
diff --git a/src/fillmore/fillmore.vala b/src/fillmore/fillmore.vala
new file mode 100644 (file)
index 0000000..3c38b80
--- /dev/null
@@ -0,0 +1,1407 @@
+/* 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);
+    }
+}
diff --git a/src/fillmore/fillmore/.stamp b/src/fillmore/fillmore/.stamp
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/src/fillmore/fillmore/FillmoreClassFactory.c b/src/fillmore/fillmore/FillmoreClassFactory.c
new file mode 100644 (file)
index 0000000..32a4c30
--- /dev/null
@@ -0,0 +1,401 @@
+/* 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;
+}
+
+
+
+
diff --git a/src/fillmore/fillmore/FillmoreClassFactory.o b/src/fillmore/fillmore/FillmoreClassFactory.o
new file mode 100644 (file)
index 0000000..c0d427b
Binary files /dev/null and b/src/fillmore/fillmore/FillmoreClassFactory.o differ
diff --git a/src/fillmore/fillmore/ProjectProperties.c b/src/fillmore/fillmore/ProjectProperties.c
new file mode 100644 (file)
index 0000000..3088fe0
--- /dev/null
@@ -0,0 +1,498 @@
+/* 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);
+}
+
+
+
+
diff --git a/src/fillmore/fillmore/ProjectProperties.o b/src/fillmore/fillmore/ProjectProperties.o
new file mode 100644 (file)
index 0000000..daf1cd9
Binary files /dev/null and b/src/fillmore/fillmore/ProjectProperties.o differ
diff --git a/src/fillmore/fillmore/VolumeAndPanPopUp.c b/src/fillmore/fillmore/VolumeAndPanPopUp.c
new file mode 100644 (file)
index 0000000..0d6d1b9
--- /dev/null
@@ -0,0 +1,252 @@
+/* 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;
+}
+
+
+
+
diff --git a/src/fillmore/fillmore/VolumeAndPanPopUp.o b/src/fillmore/fillmore/VolumeAndPanPopUp.o
new file mode 100644 (file)
index 0000000..34ff786
Binary files /dev/null and b/src/fillmore/fillmore/VolumeAndPanPopUp.o differ
diff --git a/src/fillmore/fillmore/audio_project.c b/src/fillmore/fillmore/audio_project.c
new file mode 100644 (file)
index 0000000..6f8dd49
--- /dev/null
@@ -0,0 +1,786 @@
+/* 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);
+}
+
+
+
+
diff --git a/src/fillmore/fillmore/audio_project.o b/src/fillmore/fillmore/audio_project.o
new file mode 100644 (file)
index 0000000..620992c
Binary files /dev/null and b/src/fillmore/fillmore/audio_project.o differ
diff --git a/src/fillmore/fillmore/fillmore.c b/src/fillmore/fillmore/fillmore.c
new file mode 100644 (file)
index 0000000..1a52adf
--- /dev/null
@@ -0,0 +1,4473 @@
+/* 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"
+      &nbs