From 932c590fa5abc14de6c5f05e9ed65da31f6202a9 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Mon, 9 Nov 2009 19:25:01 +0100 Subject: [PATCH] Add settings dialog A settings dialog to change global as well as plugin specific settings. --- Makefile.am | 2 ++ po/POTFILES.in | 1 + src/movie-list-menu.vala | 9 +++++ src/settings-dialog.vala | 86 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 98 insertions(+) create mode 100644 src/settings-dialog.vala diff --git a/Makefile.am b/Makefile.am index ff47cbe..b688508 100644 --- a/Makefile.am +++ b/Makefile.am @@ -34,6 +34,7 @@ cinaest_SOURCES = \ src/movie-list-window.c \ src/plugin-interface.c \ src/plugin-registrar.c \ + src/settings-dialog.c \ src/source-dialog.c cinaest_VALASOURCES = \ @@ -47,6 +48,7 @@ cinaest_VALASOURCES = \ src/movie-list-window.vala \ src/plugin-interface.vala \ src/plugin-registrar.vala \ + src/settings-dialog.vala \ src/source-dialog.vala ${cinaest_SOURCES}: ${cinaest_VALASOURCES} diff --git a/po/POTFILES.in b/po/POTFILES.in index 23d3a0a..6e5fca9 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -1,4 +1,5 @@ src/main.vala src/movie-list-menu.vala src/movie-list-window.vala +src/settings-dialog.vala src/source-dialog.vala diff --git a/src/movie-list-menu.vala b/src/movie-list-menu.vala index 2b7713f..7069d20 100644 --- a/src/movie-list-menu.vala +++ b/src/movie-list-menu.vala @@ -62,13 +62,16 @@ public class MovieListMenu : AppMenu { // Add view menu buttons select_source = new Hildon.Button.with_text (SizeType.FINGER_HEIGHT, ButtonArrangement.VERTICAL, _("Source"), _("None")); + var settings = new Gtk.Button.with_label (_("Settings")); select_source.set_style (ButtonStyle.PICKER); // Connect signals select_source.clicked.connect (on_select_source_clicked); + settings.clicked.connect (on_settings_clicked); append (select_source); + append (settings); show_all (); } @@ -87,4 +90,10 @@ public class MovieListMenu : AppMenu { select_source.value = source.get_name (); } + + public void on_settings_clicked (Gtk.Button button) { + var dialog = new SettingsDialog (movie_list_window); + + dialog.run (); + } } diff --git a/src/settings-dialog.vala b/src/settings-dialog.vala new file mode 100644 index 0000000..d84d947 --- /dev/null +++ b/src/settings-dialog.vala @@ -0,0 +1,86 @@ +/* This file is part of Cinaest. + * + * Copyright (C) 2009 Philipp Zabel + * + * Cinaest 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 3 of the License, or + * (at your option) any later version. + * + * Cinaest 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 Cinaest. If not, see . + */ + +using Hildon; +using Gtk; + +class SettingsDialog : Gtk.Dialog { + List buttons; + Gtk.Window movie_list_window; + + public SettingsDialog (Gtk.Window window) { + movie_list_window = window; + set_transient_for (window); + } + + construct { + set_title (_("Settings")); + + VBox vbox; + if (CinaestProgram.plugins.length () > 5) { + vbox = new VBox (true, 0); + + var pannable = new PannableArea (); + pannable.add_with_viewport (vbox); + + VBox area = (VBox) get_content_area (); + area.pack_start (pannable, true, true, 0); + area.set_size_request (-1, 5*70); + } else { + vbox = (VBox) get_content_area (); + } + + buttons = new List (); + foreach (Plugin plugin in CinaestProgram.plugins) { + var button = new Gtk.Button.with_label (plugin.get_name ()); + + Hildon.gtk_widget_set_theme_size (button, SizeType.FINGER_HEIGHT); + button.set_alignment(0, 0.5f); + + vbox.pack_start (button, true, true, 0); + + button.clicked.connect (on_plugin_settings); + + buttons.append (button); + } + } + + public void on_plugin_settings (Gtk.Button button) { + int n = buttons.index (button); + + response (n); + } + + public new int run () { + int res = 0; + + show_all (); + + do { + res = base.run (); + if (res >= 0) { + var plugin = CinaestProgram.plugins.nth_data (res); + plugin.settings_dialog (movie_list_window); + } + } while (res >= 0); + + destroy (); + + return res; + } +} -- 1.7.9.5