[cheese/wip/gtkapplication-refactor: 1/9] Split main() and Application into separate files
- From: David King <davidk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [cheese/wip/gtkapplication-refactor: 1/9] Split main() and Application into separate files
- Date: Sun, 30 Jun 2013 09:04:54 +0000 (UTC)
commit 896ef6fcc979ce417988c1181b95f4d6148ad668
Author: David King <amigadave amigadave com>
Date: Sun Jun 30 08:51:53 2013 +0100
Split main() and Application into separate files
Makefile.am | 1 +
src/cheese-application.vala | 544 +++++++++++++++++++++++++++++++++++++++++++
src/cheese-main.vala | 541 +------------------------------------------
3 files changed, 554 insertions(+), 532 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index ad78407..90bc5dc 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -195,6 +195,7 @@ bin_PROGRAMS = cheese
# cheese-main.vala must go at the end of the Vala sources.
cheese_SOURCES = \
+ src/cheese-application.vala \
src/cheese-countdown.vala \
src/cheese-effects-manager.vala \
src/cheese-preferences.vala \
diff --git a/src/cheese-application.vala b/src/cheese-application.vala
new file mode 100644
index 0000000..6b2cc59
--- /dev/null
+++ b/src/cheese-application.vala
@@ -0,0 +1,544 @@
+/*
+ * Copyright © 2010 Yuvaraj Pandian T <yuvipanda yuvi in>
+ * Copyright © 2010 daniel g. siegel <dgsiegel gnome org>
+ * Copyright © 2008 Filippo Argiolas <filippo argiolas gmail com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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, see <http://www.gnu.org/licenses/>.
+ */
+
+using GLib;
+using Gtk;
+using Clutter;
+using Gst;
+
+public class Cheese.Application : Gtk.Application
+{
+ static bool wide;
+ static string device;
+ static bool version;
+ static bool fullscreen;
+
+ static MainWindow main_window;
+
+ private Camera camera;
+ private PreferencesDialog preferences_dialog;
+
+ private const GLib.ActionEntry action_entries[] = {
+ { "shoot", on_shoot },
+ { "mode", on_action_radio, "s", "'photo'", on_mode_change },
+ { "fullscreen", on_action_toggle, null, "false", on_fullscreen_change },
+ { "effects", on_action_toggle, null, "false", on_effects_change },
+ { "preferences", on_preferences },
+ { "help", on_help },
+ { "about", on_about },
+ { "quit", on_quit }
+ };
+
+ const OptionEntry[] options = {
+ {"wide", 'w', 0, OptionArg.NONE, ref wide, N_("Start in wide mode"),
null },
+ {"device", 'd', 0, OptionArg.FILENAME, ref device, N_("Device to use as a camera"),
N_("DEVICE")},
+ {"version", 'v', 0, OptionArg.NONE, ref version, N_("Output version information and exit"),
null },
+ {"fullscreen", 'f', 0, OptionArg.NONE, ref fullscreen, N_("Start in fullscreen mode"),
null },
+ {null}
+ };
+
+ public Application (string app_id)
+ {
+ GLib.Object (application_id: app_id);
+ }
+
+ /**
+ * Present the existing main window, or create a new one.
+ */
+ public void on_app_activate ()
+ {
+ if (get_windows () != null)
+ main_window.present ();
+ else
+ {
+ // Prefer a dark GTK+ theme, bug 660628.
+ var gtk_settings = Gtk.Settings.get_default ();
+ if (gtk_settings != null)
+ gtk_settings.gtk_application_prefer_dark_theme = true;
+
+ main_window = new Cheese.MainWindow (this);
+
+ Environment.set_variable ("PULSE_PROP_media.role", "production", true);
+
+ Environment.set_application_name (_("Cheese"));
+ Window.set_default_icon_name ("cheese");
+
+ Gtk.IconTheme.get_default ().append_search_path (GLib.Path.build_filename (Config.PACKAGE_DATADIR,
"icons"));
+
+ add_action_entries (action_entries, this);
+
+ // Create the menus.
+ var menu = new GLib.Menu ();
+ var section = new GLib.Menu ();
+ menu.append_section (null, section);
+ var item = new GLib.MenuItem (_("_Shoot"), "app.shoot");
+ item.set_attribute ("accel", "s", "space");
+ section.append_item (item);
+ section = new GLib.Menu ();
+ menu.append_section (_("Mode:"), section);
+ section.append (_("_Photo"), "app.mode::photo");
+ section.append (_("_Video"), "app.mode::video");
+ section.append (_("_Burst"), "app.mode::burst");
+ section = new GLib.Menu ();
+ menu.append_section (null, section);
+ item = new GLib.MenuItem (_("_Fullscreen"), "app.fullscreen");
+ item.set_attribute ("accel", "s", "F11");
+ section.append_item (item);
+ section = new GLib.Menu ();
+ menu.append_section (null, section);
+ section.append (_("_Effects"), "app.effects");
+ section = new GLib.Menu ();
+ menu.append_section (null, section);
+ section.append (_("P_references"), "app.preferences");
+ section = new GLib.Menu ();
+ menu.append_section (null, section);
+ item = new GLib.MenuItem (_("_Help"), "app.help");
+ item.set_attribute ("accel", "s", "F1");
+ section.append_item (item);
+ section.append (_("_About"), "app.about");
+ item = new GLib.MenuItem (_("_Quit"), "app.quit");
+ item.set_attribute ("accel", "s", "<Primary>q");
+ section.append_item (item);
+ set_app_menu (menu);
+
+ // FIXME: Read fullscreen state from GSettings.
+
+ main_window.setup_ui ();
+ main_window.start_thumbview_monitors ();
+
+ if (wide)
+ main_window.set_startup_wide_mode ();
+ if (fullscreen)
+ main_window.set_startup_fullscreen_mode ();
+
+ /* Shoot when the webcam capture button is pressed. */
+ main_window.add_events (Gdk.EventMask.KEY_PRESS_MASK
+ | Gdk.EventMask.KEY_RELEASE_MASK);
+ main_window.key_press_event.connect (on_webcam_key_pressed);
+
+ main_window.show ();
+ setup_camera (device);
+ preferences_dialog = new PreferencesDialog (camera);
+ }
+ }
+
+ /**
+ * Overridden method of GApplication, to handle the arguments locally.
+ *
+ * @param arguments the command-line arguments
+ * @param exit_status the exit status to return to the OS
+ * @return true if the arguments were successfully processed, false otherwise
+ */
+ public override bool local_command_line ([CCode (array_null_terminated = true, array_length = false)]
+ ref unowned string[] arguments,
+ out int exit_status)
+ {
+ // Try to register.
+ try
+ {
+ register();
+ }
+ catch (Error e)
+ {
+ stdout.printf ("Error: %s\n", e.message);
+ exit_status = 1;
+ return true;
+ }
+
+ // Workaround until bug 642885 is solved.
+ unowned string[] local_args = arguments;
+
+ // Check command line parameters.
+ int n_args = local_args.length;
+ if (n_args <= 1)
+ {
+ Gst.init (ref local_args);
+ activate ();
+ exit_status = 0;
+ }
+ else
+ {
+ // Set parser.
+ try
+ {
+ var context = new OptionContext (_("- Take photos and videos from your webcam"));
+ context.set_translation_domain (Config.GETTEXT_PACKAGE);
+ context.set_help_enabled (true);
+ context.add_main_entries (options, null);
+ context.add_group (Gtk.get_option_group (true));
+ context.add_group (Clutter.get_option_group ());
+ context.add_group (Gst.init_get_option_group ());
+ context.parse (ref local_args);
+ }
+ catch (OptionError e)
+ {
+ stdout.printf ("%s\n", e.message);
+ stdout.printf (_("Run '%s --help' to see a full list of available command line options.\n"),
arguments[0]);
+ exit_status = 1;
+ return true;
+ }
+
+ if (version)
+ {
+ stdout.printf ("%s %s\n", Config.PACKAGE_NAME, Config.PACKAGE_VERSION);
+ exit_status = 1;
+ return true;
+ }
+
+ //Remote instance process commands locally.
+ if (get_is_remote ())
+ {
+ stdout.printf (_("Another instance of Cheese is currently running\n"));
+ exit_status = 1;
+ return true;
+ }
+ //Primary instance.
+ else
+ {
+ Gst.init (ref local_args);
+ activate ();
+ exit_status=0;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Setup the camera listed in GSettings.
+ *
+ * @param uri the uri of the device node to setup, or null
+ */
+ public void setup_camera (string? uri)
+ {
+ var settings = new GLib.Settings ("org.gnome.Cheese");
+ string device;
+ double value;
+
+ if (uri != null && uri.length > 0)
+ {
+ device = uri;
+ }
+ else
+ {
+ device = settings.get_string ("camera");
+ }
+
+ var video_preview = main_window.get_video_preview ();
+ camera = new Camera (video_preview, device,
+ settings.get_int ("photo-x-resolution"),
+ settings.get_int ("photo-y-resolution"));
+
+ try
+ {
+ camera.setup (device);
+ }
+ catch (Error err)
+ {
+ video_preview.hide ();
+ warning ("Error: %s\n", err.message);
+ main_window.show_error (err.message);
+
+ return;
+ }
+
+ value = settings.get_double ("brightness");
+ if (value != 0.0)
+ {
+ camera.set_balance_property ("brightness", value);
+ }
+
+ value = settings.get_double ("contrast");
+ if (value != 1.0)
+ {
+ camera.set_balance_property ("contrast", value);
+ }
+
+ value = settings.get_double ("hue");
+ if (value != 0.0)
+ {
+ camera.set_balance_property ("hue", value);
+ }
+
+ value = settings.get_double ("saturation");
+ if (value != 1.0)
+ {
+ camera.set_balance_property ("saturation", value);
+ }
+
+ camera.state_flags_changed.connect (on_camera_state_flags_changed);
+ main_window.set_camera (camera);
+ camera.play ();
+ }
+
+ /**
+ * Handle the webcam take photo button being pressed.
+ *
+ * @param event the Gdk.KeyEvent
+ * @return true to stop other handlers being invoked, false to propagate
+ * the event further
+ */
+ private bool on_webcam_key_pressed (Gdk.EventKey event)
+ {
+ /* Ignore the event if any modifier keys are pressed. */
+ if (event.state != 0
+ && ((event.state & Gdk.ModifierType.CONTROL_MASK) != 0
+ || (event.state & Gdk.ModifierType.MOD1_MASK) != 0
+ || (event.state & Gdk.ModifierType.MOD3_MASK) != 0
+ || (event.state & Gdk.ModifierType.MOD4_MASK) != 0
+ || (event.state & Gdk.ModifierType.MOD5_MASK) != 0))
+ {
+ return false;
+ }
+
+ switch (event.keyval)
+ {
+ case Gdk.Key.WebCam:
+ activate_action ("shoot", null);
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Handle the camera state changing.
+ *
+ * @param new_state the new Cheese.Camera state
+ */
+ private void on_camera_state_flags_changed (Gst.State new_state)
+ {
+ switch (new_state)
+ {
+ case Gst.State.PLAYING:
+ main_window.camera_state_change_playing ();
+ break;
+ case Gst.State.NULL:
+ main_window.camera_state_change_null ();
+ break;
+ default:
+ break;
+ }
+ }
+
+ /**
+ * Update the current capture mode in the main window and preferences
+ * dialog.
+ *
+ * @param mode the mode to set
+ */
+ private void update_mode (MediaMode mode)
+ {
+ main_window.set_current_mode (mode);
+ preferences_dialog.set_current_mode (mode);
+ }
+
+ /**
+ * Handle radio actions by setting the new state.
+ *
+ * @param action the action which was triggered
+ * @param parameter the new value to set on the action
+ */
+ private void on_action_radio (SimpleAction action, Variant? parameter)
+ {
+ action.change_state (parameter);
+ }
+
+ /**
+ * Handle toggle actions by toggling the current state.
+ *
+ * @param action the action which was triggered
+ * @param parameter unused
+ */
+ private void on_action_toggle (SimpleAction action, Variant? parameter)
+ {
+ var state = action.get_state ();
+
+ // Toggle current state.
+ action.change_state (new Variant.boolean (!state.get_boolean ()));
+ }
+
+ /**
+ * Handle the shoot action being activated.
+ */
+ private void on_shoot ()
+ {
+ // Shoot.
+ main_window.shoot ();
+ }
+
+ /**
+ * Handle the fullscreen state being changed.
+ *
+ * @param action the action that emitted the signal
+ * @param value the state to switch to
+ */
+ private void on_fullscreen_change (SimpleAction action, Variant? value)
+ {
+ return_if_fail (value != null);
+
+ var state = value.get_boolean ();
+
+ main_window.set_fullscreen (state);
+
+ action.set_state (value);
+ }
+
+ /**
+ * Handle the effects state being changed.
+ *
+ * @param action the action that emitted the signal
+ * @param value the state to switch to
+ */
+ private void on_effects_change (SimpleAction action, Variant? value)
+ {
+ return_if_fail (value != null);
+
+ var state = value.get_boolean ();
+
+ var shoot = this.lookup_action ("shoot") as SimpleAction;
+
+ // The effects selector and shooting are mutually exclusive.
+ shoot.set_enabled (!state);
+
+ main_window.set_effects (state);
+
+ action.set_state (value);
+ }
+
+ /**
+ * Change the media capture mode (photo, video or burst).
+ *
+ * @param action the action that emitted the signal
+ * @param parameter the mode to switch to, or null
+ */
+ private void on_mode_change (SimpleAction action, Variant? value)
+ {
+ return_if_fail (value != null);
+
+ var state = value.get_string ();
+
+ // FIXME: Should be able to get these from the enum.
+ if (state == "photo")
+ update_mode (MediaMode.PHOTO);
+ else if (state == "video")
+ update_mode (MediaMode.VIDEO);
+ else if (state == "burst")
+ update_mode (MediaMode.BURST);
+ else
+ assert_not_reached ();
+
+ action.set_state (value);
+ }
+
+ /**
+ * Show the preferences dialog.
+ */
+ private void on_preferences ()
+ {
+ preferences_dialog.show ();
+ }
+
+ /**
+ * Show the Cheese help contents.
+ */
+ private void on_help ()
+ {
+ var screen = main_window.get_screen ();
+ try
+ {
+ Gtk.show_uri (screen, "help:cheese", Gtk.get_current_event_time ());
+ }
+ catch (Error err)
+ {
+ message ("Error opening help: %s", err.message);
+ }
+ }
+
+ /**
+ * Show the about dialog.
+ */
+ private void on_about ()
+ {
+ string[] artists = { "Andreas Nilsson <andreas andreasn se>",
+ "Josef Vybíral <josef vybiral gmail com>",
+ "Kalle Persson <kalle kallepersson se>",
+ "Lapo Calamandrei <calamandrei gmail com>",
+ "Or Dvory <gnudles nana co il>",
+ "Ulisse Perusin <ulisail yahoo it>",
+ null };
+
+ string[] authors = { "daniel g. siegel <dgsiegel gnome org>",
+ "Jaap A. Haitsma <jaap haitsma org>",
+ "Filippo Argiolas <fargiolas gnome org>",
+ "Yuvaraj Pandian T <yuvipanda yuvi in>",
+ "Luciana Fujii Pontello <luciana fujii eti br>",
+ "David King <amigadave amigadave com>",
+ "",
+ "Aidan Delaney <a j delaney brighton ac uk>",
+ "Alex \"weej\" Jones <alex weej com>",
+ "Andrea Cimitan <andrea cimitan gmail com>",
+ "Baptiste Mille-Mathias <bmm80 free fr>",
+ "Cosimo Cecchi <anarki lilik it>",
+ "Diego Escalante Urrelo <dieguito gmail com>",
+ "Felix Kaser <f kaser gmx net>",
+ "Gintautas Miliauskas <gintas akl lt>",
+ "Hans de Goede <jwrdegoede fedoraproject org>",
+ "James Liggett <jrliggett cox net>",
+ "Luca Ferretti <elle uca libero it>",
+ "Mirco \"MacSlow\" Müller <macslow bangang de>",
+ "Patryk Zawadzki <patrys pld-linux org>",
+ "Ryan Zeigler <zeiglerr gmail com>",
+ "Sebastian Keller <sebastian-keller gmx de>",
+ "Steve Magoun <steve magoun canonical com>",
+ "Thomas Perl <thp thpinfo com>",
+ "Tim Philipp Müller <tim centricular net>",
+ "Todd Eisenberger <teisenberger gmail com>",
+ "Tommi Vainikainen <thv iki fi>",
+ null };
+
+ string[] documenters = { "Joshua Henderson <joshhendo gmail com>",
+ "Jaap A. Haitsma <jaap haitsma org>",
+ "Felix Kaser <f kaser gmx net>",
+ null };
+
+ Gtk.show_about_dialog (main_window,
+ "artists", artists,
+ "authors", authors,
+ "comments", _("Take photos and videos with your webcam, with fun graphical effects"),
+ "copyright", "Copyright © 2007 - 2010 daniel g. siegel <dgsiegel gnome org>",
+ "documenters", documenters,
+ "license-type", Gtk.License.GPL_2_0,
+ "logo-icon-name", Config.PACKAGE_TARNAME,
+ "program-name", _("Cheese"),
+ "translator-credits", _("translator-credits"),
+ "website", Config.PACKAGE_URL,
+ "website-label", _("Cheese Website"),
+ "version", Config.PACKAGE_VERSION);
+ }
+
+ /**
+ * Destroy the main window, and shutdown the application, when quitting.
+ */
+ private void on_quit ()
+ {
+ main_window.destroy ();
+ }
+}
diff --git a/src/cheese-main.vala b/src/cheese-main.vala
index 51fba55..d07c3fe 100644
--- a/src/cheese-main.vala
+++ b/src/cheese-main.vala
@@ -1,7 +1,6 @@
/*
- * Copyright © 2010 Yuvaraj Pandian T <yuvipanda yuvi in>
- * Copyright © 2010 daniel g. siegel <dgsiegel gnome org>
- * Copyright © 2008 Filippo Argiolas <filippo argiolas gmail com>
+ * Cheese - Take photos and videos with your webcam, with fun graphical effects
+ * Copyright © 2013 David King <amigadave amigadave com>
*
* Licensed under the GNU General Public License Version 2
*
@@ -19,544 +18,22 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-using GLib;
-using Gtk;
-using Clutter;
-using Gst;
-
-public class Cheese.Main : Gtk.Application
+int main (string[] args)
{
- static bool wide;
- static string device;
- static bool version;
- static bool fullscreen;
-
- static MainWindow main_window;
-
- private Camera camera;
- private PreferencesDialog preferences_dialog;
-
- private const GLib.ActionEntry action_entries[] = {
- { "shoot", on_shoot },
- { "mode", on_action_radio, "s", "'photo'", on_mode_change },
- { "fullscreen", on_action_toggle, null, "false", on_fullscreen_change },
- { "effects", on_action_toggle, null, "false", on_effects_change },
- { "preferences", on_preferences },
- { "help", on_help },
- { "about", on_about },
- { "quit", on_quit }
- };
-
- const OptionEntry[] options = {
- {"wide", 'w', 0, OptionArg.NONE, ref wide, N_("Start in wide mode"),
null },
- {"device", 'd', 0, OptionArg.FILENAME, ref device, N_("Device to use as a camera"),
N_("DEVICE")},
- {"version", 'v', 0, OptionArg.NONE, ref version, N_("Output version information and exit"),
null },
- {"fullscreen", 'f', 0, OptionArg.NONE, ref fullscreen, N_("Start in fullscreen mode"),
null },
- {null}
- };
-
- public Main (string app_id, ApplicationFlags flags)
- {
- GLib.Object (application_id: app_id, flags: flags);
- }
-
- /**
- * Present the existing main window, or create a new one.
- */
- public void on_app_activate ()
- {
- if (get_windows () != null)
- main_window.present ();
- else
- {
- // Prefer a dark GTK+ theme, bug 660628.
- var gtk_settings = Gtk.Settings.get_default ();
- if (gtk_settings != null)
- gtk_settings.gtk_application_prefer_dark_theme = true;
-
- main_window = new Cheese.MainWindow (this);
-
- Environment.set_variable ("PULSE_PROP_media.role", "production", true);
-
- Environment.set_application_name (_("Cheese"));
- Window.set_default_icon_name ("cheese");
-
- Gtk.IconTheme.get_default ().append_search_path (GLib.Path.build_filename (Config.PACKAGE_DATADIR,
"icons"));
-
- add_action_entries (action_entries, this);
-
- // Create the menus.
- var menu = new GLib.Menu ();
- var section = new GLib.Menu ();
- menu.append_section (null, section);
- var item = new GLib.MenuItem (_("_Shoot"), "app.shoot");
- item.set_attribute ("accel", "s", "space");
- section.append_item (item);
- section = new GLib.Menu ();
- menu.append_section (_("Mode:"), section);
- section.append (_("_Photo"), "app.mode::photo");
- section.append (_("_Video"), "app.mode::video");
- section.append (_("_Burst"), "app.mode::burst");
- section = new GLib.Menu ();
- menu.append_section (null, section);
- item = new GLib.MenuItem (_("_Fullscreen"), "app.fullscreen");
- item.set_attribute ("accel", "s", "F11");
- section.append_item (item);
- section = new GLib.Menu ();
- menu.append_section (null, section);
- section.append (_("_Effects"), "app.effects");
- section = new GLib.Menu ();
- menu.append_section (null, section);
- section.append (_("P_references"), "app.preferences");
- section = new GLib.Menu ();
- menu.append_section (null, section);
- item = new GLib.MenuItem (_("_Help"), "app.help");
- item.set_attribute ("accel", "s", "F1");
- section.append_item (item);
- section.append (_("_About"), "app.about");
- item = new GLib.MenuItem (_("_Quit"), "app.quit");
- item.set_attribute ("accel", "s", "<Primary>q");
- section.append_item (item);
- set_app_menu (menu);
-
- // FIXME: Read fullscreen state from GSettings.
-
- main_window.setup_ui ();
- main_window.start_thumbview_monitors ();
-
- if (wide)
- main_window.set_startup_wide_mode ();
- if (fullscreen)
- main_window.set_startup_fullscreen_mode ();
-
- /* Shoot when the webcam capture button is pressed. */
- main_window.add_events (Gdk.EventMask.KEY_PRESS_MASK
- | Gdk.EventMask.KEY_RELEASE_MASK);
- main_window.key_press_event.connect (on_webcam_key_pressed);
-
- main_window.show ();
- setup_camera (device);
- preferences_dialog = new PreferencesDialog (camera);
- }
- }
-
- /**
- * Overridden method of GApplication, to handle the arguments locally.
- *
- * @param arguments the command-line arguments
- * @param exit_status the exit status to return to the OS
- * @return true if the arguments were successfully processed, false otherwise
- */
- public override bool local_command_line ([CCode (array_null_terminated = true, array_length = false)]
- ref unowned string[] arguments,
- out int exit_status)
- {
- // Try to register.
- try
- {
- register();
- }
- catch (Error e)
- {
- stdout.printf ("Error: %s\n", e.message);
- exit_status = 1;
- return true;
- }
-
- // Workaround until bug 642885 is solved.
- unowned string[] local_args = arguments;
-
- // Check command line parameters.
- int n_args = local_args.length;
- if (n_args <= 1)
- {
- Gst.init (ref local_args);
- activate ();
- exit_status = 0;
- }
- else
- {
- // Set parser.
- try
- {
- var context = new OptionContext (_("- Take photos and videos from your webcam"));
- context.set_translation_domain (Config.GETTEXT_PACKAGE);
- context.set_help_enabled (true);
- context.add_main_entries (options, null);
- context.add_group (Gtk.get_option_group (true));
- context.add_group (Clutter.get_option_group ());
- context.add_group (Gst.init_get_option_group ());
- context.parse (ref local_args);
- }
- catch (OptionError e)
- {
- stdout.printf ("%s\n", e.message);
- stdout.printf (_("Run '%s --help' to see a full list of available command line options.\n"),
arguments[0]);
- exit_status = 1;
- return true;
- }
-
- if (version)
- {
- stdout.printf ("%s %s\n", Config.PACKAGE_NAME, Config.PACKAGE_VERSION);
- exit_status = 1;
- return true;
- }
-
- //Remote instance process commands locally.
- if (get_is_remote ())
- {
- stdout.printf (_("Another instance of Cheese is currently running\n"));
- exit_status = 1;
- return true;
- }
- //Primary instance.
- else
- {
- Gst.init (ref local_args);
- activate ();
- exit_status=0;
- }
- }
- return true;
- }
-
- /**
- * Setup the camera listed in GSettings.
- *
- * @param uri the uri of the device node to setup, or null
- */
- public void setup_camera (string? uri)
- {
- var settings = new GLib.Settings ("org.gnome.Cheese");
- string device;
- double value;
-
- if (uri != null && uri.length > 0)
- {
- device = uri;
- }
- else
- {
- device = settings.get_string ("camera");
- }
-
- var video_preview = main_window.get_video_preview ();
- camera = new Camera (video_preview, device,
- settings.get_int ("photo-x-resolution"),
- settings.get_int ("photo-y-resolution"));
-
- try
- {
- camera.setup (device);
- }
- catch (Error err)
- {
- video_preview.hide ();
- warning ("Error: %s\n", err.message);
- main_window.show_error (err.message);
-
- return;
- }
-
- value = settings.get_double ("brightness");
- if (value != 0.0)
- {
- camera.set_balance_property ("brightness", value);
- }
-
- value = settings.get_double ("contrast");
- if (value != 1.0)
- {
- camera.set_balance_property ("contrast", value);
- }
-
- value = settings.get_double ("hue");
- if (value != 0.0)
- {
- camera.set_balance_property ("hue", value);
- }
-
- value = settings.get_double ("saturation");
- if (value != 1.0)
- {
- camera.set_balance_property ("saturation", value);
- }
-
- camera.state_flags_changed.connect (on_camera_state_flags_changed);
- main_window.set_camera (camera);
- camera.play ();
- }
-
- /**
- * Handle the webcam take photo button being pressed.
- *
- * @param event the Gdk.KeyEvent
- * @return true to stop other handlers being invoked, false to propagate
- * the event further
- */
- private bool on_webcam_key_pressed (Gdk.EventKey event)
- {
- /* Ignore the event if any modifier keys are pressed. */
- if (event.state != 0
- && ((event.state & Gdk.ModifierType.CONTROL_MASK) != 0
- || (event.state & Gdk.ModifierType.MOD1_MASK) != 0
- || (event.state & Gdk.ModifierType.MOD3_MASK) != 0
- || (event.state & Gdk.ModifierType.MOD4_MASK) != 0
- || (event.state & Gdk.ModifierType.MOD5_MASK) != 0))
- {
- return false;
- }
-
- switch (event.keyval)
- {
- case Gdk.Key.WebCam:
- activate_action ("shoot", null);
- return true;
- }
-
- return false;
- }
-
- /**
- * Handle the camera state changing.
- *
- * @param new_state the new Cheese.Camera state
- */
- private void on_camera_state_flags_changed (Gst.State new_state)
- {
- switch (new_state)
- {
- case Gst.State.PLAYING:
- main_window.camera_state_change_playing ();
- break;
- case Gst.State.NULL:
- main_window.camera_state_change_null ();
- break;
- default:
- break;
- }
- }
-
- /**
- * Update the current capture mode in the main window and preferences
- * dialog.
- *
- * @param mode the mode to set
- */
- private void update_mode (MediaMode mode)
- {
- main_window.set_current_mode (mode);
- preferences_dialog.set_current_mode (mode);
- }
-
- /**
- * Handle radio actions by setting the new state.
- *
- * @param action the action which was triggered
- * @param parameter the new value to set on the action
- */
- private void on_action_radio (SimpleAction action, Variant? parameter)
- {
- action.change_state (parameter);
- }
-
- /**
- * Handle toggle actions by toggling the current state.
- *
- * @param action the action which was triggered
- * @param parameter unused
- */
- private void on_action_toggle (SimpleAction action, Variant? parameter)
- {
- var state = action.get_state ();
-
- // Toggle current state.
- action.change_state (new Variant.boolean (!state.get_boolean ()));
- }
-
- /**
- * Handle the shoot action being activated.
- */
- private void on_shoot ()
- {
- // Shoot.
- main_window.shoot ();
- }
-
- /**
- * Handle the fullscreen state being changed.
- *
- * @param action the action that emitted the signal
- * @param value the state to switch to
- */
- private void on_fullscreen_change (SimpleAction action, Variant? value)
- {
- return_if_fail (value != null);
-
- var state = value.get_boolean ();
-
- main_window.set_fullscreen (state);
-
- action.set_state (value);
- }
-
- /**
- * Handle the effects state being changed.
- *
- * @param action the action that emitted the signal
- * @param value the state to switch to
- */
- private void on_effects_change (SimpleAction action, Variant? value)
- {
- return_if_fail (value != null);
-
- var state = value.get_boolean ();
-
- var shoot = this.lookup_action ("shoot") as SimpleAction;
-
- // The effects selector and shooting are mutually exclusive.
- shoot.set_enabled (!state);
-
- main_window.set_effects (state);
-
- action.set_state (value);
- }
-
- /**
- * Change the media capture mode (photo, video or burst).
- *
- * @param action the action that emitted the signal
- * @param parameter the mode to switch to, or null
- */
- private void on_mode_change (SimpleAction action, Variant? value)
- {
- return_if_fail (value != null);
-
- var state = value.get_string ();
-
- // FIXME: Should be able to get these from the enum.
- if (state == "photo")
- update_mode (MediaMode.PHOTO);
- else if (state == "video")
- update_mode (MediaMode.VIDEO);
- else if (state == "burst")
- update_mode (MediaMode.BURST);
- else
- assert_not_reached ();
-
- action.set_state (value);
- }
-
- /**
- * Show the preferences dialog.
- */
- private void on_preferences ()
- {
- preferences_dialog.show ();
- }
-
- /**
- * Show the Cheese help contents.
- */
- private void on_help ()
- {
- var screen = main_window.get_screen ();
- try
- {
- Gtk.show_uri (screen, "help:cheese", Gtk.get_current_event_time ());
- }
- catch (Error err)
- {
- message ("Error opening help: %s", err.message);
- }
- }
-
- /**
- * Show the about dialog.
- */
- private void on_about ()
- {
- string[] artists = { "Andreas Nilsson <andreas andreasn se>",
- "Josef Vybíral <josef vybiral gmail com>",
- "Kalle Persson <kalle kallepersson se>",
- "Lapo Calamandrei <calamandrei gmail com>",
- "Or Dvory <gnudles nana co il>",
- "Ulisse Perusin <ulisail yahoo it>",
- null };
-
- string[] authors = { "daniel g. siegel <dgsiegel gnome org>",
- "Jaap A. Haitsma <jaap haitsma org>",
- "Filippo Argiolas <fargiolas gnome org>",
- "Yuvaraj Pandian T <yuvipanda yuvi in>",
- "Luciana Fujii Pontello <luciana fujii eti br>",
- "David King <amigadave amigadave com>",
- "",
- "Aidan Delaney <a j delaney brighton ac uk>",
- "Alex \"weej\" Jones <alex weej com>",
- "Andrea Cimitan <andrea cimitan gmail com>",
- "Baptiste Mille-Mathias <bmm80 free fr>",
- "Cosimo Cecchi <anarki lilik it>",
- "Diego Escalante Urrelo <dieguito gmail com>",
- "Felix Kaser <f kaser gmx net>",
- "Gintautas Miliauskas <gintas akl lt>",
- "Hans de Goede <jwrdegoede fedoraproject org>",
- "James Liggett <jrliggett cox net>",
- "Luca Ferretti <elle uca libero it>",
- "Mirco \"MacSlow\" Müller <macslow bangang de>",
- "Patryk Zawadzki <patrys pld-linux org>",
- "Ryan Zeigler <zeiglerr gmail com>",
- "Sebastian Keller <sebastian-keller gmx de>",
- "Steve Magoun <steve magoun canonical com>",
- "Thomas Perl <thp thpinfo com>",
- "Tim Philipp Müller <tim centricular net>",
- "Todd Eisenberger <teisenberger gmail com>",
- "Tommi Vainikainen <thv iki fi>",
- null };
-
- string[] documenters = { "Joshua Henderson <joshhendo gmail com>",
- "Jaap A. Haitsma <jaap haitsma org>",
- "Felix Kaser <f kaser gmx net>",
- null };
-
- Gtk.show_about_dialog (main_window,
- "artists", artists,
- "authors", authors,
- "comments", _("Take photos and videos with your webcam, with fun graphical effects"),
- "copyright", "Copyright © 2007 - 2010 daniel g. siegel <dgsiegel gnome org>",
- "documenters", documenters,
- "license-type", Gtk.License.GPL_2_0,
- "logo-icon-name", Config.PACKAGE_TARNAME,
- "program-name", _("Cheese"),
- "translator-credits", _("translator-credits"),
- "website", Config.PACKAGE_URL,
- "website-label", _("Cheese Website"),
- "version", Config.PACKAGE_VERSION);
- }
-
- /**
- * Destroy the main window, and shutdown the application, when quitting.
- */
- private void on_quit ()
- {
- main_window.destroy ();
- }
-}
-
- public int main (string[] args)
- {
Intl.bindtextdomain (Config.GETTEXT_PACKAGE, Config.PACKAGE_LOCALEDIR);
Intl.bind_textdomain_codeset (Config.GETTEXT_PACKAGE, "UTF-8");
Intl.textdomain (Config.GETTEXT_PACKAGE);
if (!Cheese.gtk_init (ref args))
- return Posix.EXIT_FAILURE;
+ {
+ return Posix.EXIT_FAILURE;
+ }
- Cheese.Main app;
- app = new Cheese.Main ("org.gnome.Cheese", ApplicationFlags.FLAGS_NONE);
+ Cheese.Application app;
+ app = new Cheese.Application ("org.gnome.Cheese");
app.activate.connect (app.on_app_activate);
int status = app.run (args);
return status;
- }
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]