--- /dev/null
+/* Demo Recorder for MAEMO 5
+* Copyright (C) 2010 Dru Moore <usr@dru-id.co.uk>
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License version 2,
+* or (at your option) any later version, as published by the Free
+* Software Foundation
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details
+*
+* You should have received a copy of the GNU General Public
+* License along with this program; if not, write to the
+* Free Software Foundation, Inc.,
+* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+namespace IdWorks {
+
+public class FirstRunWizard : Hildon.WizardDialog {
+
+ public ApplicationSettings app_settings {public get; public set;}
+ Gtk.Notebook notebook;
+ Hildon.Button directory_btn;
+ Hildon.TouchSelector on_open_selector;
+ Hildon.TouchSelector on_close_selector;
+ Hildon.TouchSelector on_add_selector;
+ Hildon.TouchSelector on_bounce_selector;
+ Hildon.TouchSelector on_remove_selector;
+ Hildon.TouchSelector on_mixdown_selector;
+ private enum WizardPage {
+ WORKING_FOLDER = 0,
+ ON_OPEN,
+ ON_CLOSE,
+ ON_ADD,
+ ON_BOUNCE,
+ ON_REMOVE,
+ ON_MIXDOWN
+ }
+
+ public FirstRunWizard(Gtk.Window parent, string wizard_name) {
+ app_settings = new ApplicationSettings();
+ this.set_parent(parent);
+ this.wizard_name = wizard_name;
+ this.autotitle = true;
+ this.wizard_notebook = get_notebook(app_settings);
+ //Hildon.WizardDialogPageFunc func_delegate = forward_page_function;
+ this.set_forward_page_func(forward_page_function);
+ this.show_all();
+ }
+
+ private void on_open_updated(string val) {
+ this.app_settings.open_action = ApplicationSettings.OpenAction.from_label(val);
+ }
+ private void on_close_updated(string val) {
+ this.app_settings.close_action = ApplicationSettings.CloseAction.from_label(val);
+ }
+ private void on_add_updated(string val) {
+ this.app_settings.add_track_action = ApplicationSettings.AddTrackAction.from_label(val);
+ }
+ private void on_bounce_updated(string val) {
+ this.app_settings.bounce_tracks_action = ApplicationSettings.BounceTracksAction.from_label(val);
+ }
+ private void on_remove_updated(string val) {
+ this.app_settings.remove_track_action = ApplicationSettings.RemoveTrackAction.from_label(val);
+ }
+ private void on_mixdown_updated(string val) {
+ this.app_settings.mixdown_action = ApplicationSettings.MixdownAction.from_label(val);
+ }
+
+ private Gtk.Notebook get_notebook(ApplicationSettings settings) {
+ notebook = new Gtk.Notebook();
+
+ // page 1 - WORKING_FOLDER
+ Gtk.VBox page_1 = new Gtk.VBox(false, 4);
+ Gtk.Label msg_1 = new Gtk.Label("Pick a working directory, this is where all your projects will be stored.\n\nFor better performance try using an SD card.");
+ msg_1.set_line_wrap(true);
+ msg_1.set_alignment(0, 0);
+ directory_btn = new Hildon.Button.with_text(Hildon.SizeType.FINGER_HEIGHT | Hildon.SizeType.HALFSCREEN_WIDTH, Hildon.ButtonArrangement.VERTICAL, "Working folder", settings.working_directory);
+ directory_btn.set_style(Hildon.ButtonStyle.PICKER);
+ directory_btn.set_alignment(0, 0, 1, 1);
+ directory_btn.set_value(settings.working_directory);
+ directory_btn.clicked.connect(select_directory);
+ page_1.pack_start(directory_btn, false, false, 4);
+ page_1.add(msg_1);
+
+ notebook.append_page(page_1, null);
+
+ // page 2 - ON_OPEN
+ Gtk.VBox page_2 = new Gtk.VBox(false, 4);
+ Gtk.Label msg_2 = new Gtk.Label("What should happen at application start?\nIf you are unsure accept the defaults.");
+ msg_2.set_line_wrap(true);
+ msg_2.set_alignment(0, 0);
+ on_open_selector = new Hildon.TouchSelector.text();
+ on_open_selector.append_text(ApplicationSettings.OpenAction.to_label(ApplicationSettings.OpenAction.LAST_PROJECT));
+ on_open_selector.append_text(ApplicationSettings.OpenAction.to_label(ApplicationSettings.OpenAction.RECENT_PROJECTS));
+ on_open_selector.append_text(ApplicationSettings.OpenAction.to_label(ApplicationSettings.OpenAction.NEW_PROJECT));
+ on_open_selector.append_text(ApplicationSettings.OpenAction.to_label(ApplicationSettings.OpenAction.NAMED_PROJECT));
+ on_open_selector.set_active(0, (int)settings.open_action);
+ Hildon.PickerButton on_open_picker = new Hildon.PickerButton(Hildon.SizeType.FINGER_HEIGHT | Hildon.SizeType.HALFSCREEN_WIDTH, Hildon.ButtonArrangement.VERTICAL);
+ on_open_picker.set_title("Application start behaviour");
+ on_open_picker.set_selector(on_open_selector);
+ on_open_picker.set_alignment(0, 0, 1, 1);
+ on_open_picker.value_changed.connect( (s) => { on_open_updated(s.get_selector().get_current_text()); } );
+ page_2.pack_start(on_open_picker, false, false, 4);
+ page_2.add(msg_2);
+
+ notebook.append_page(page_2, null);
+
+ // page 3 - ON_CLOSE
+ Gtk.VBox page_3 = new Gtk.VBox(false, 4);
+ Gtk.Label msg_3 = new Gtk.Label("What should happen at application end?\nIf you are unsure accept the defaults.");
+ msg_3.set_line_wrap(true);
+ msg_3.set_alignment(0, 0);
+ on_close_selector = new Hildon.TouchSelector.text();
+ on_close_selector.append_text(ApplicationSettings.CloseAction.to_label(ApplicationSettings.CloseAction.AUTO_SAVE_PROJECT));
+ on_close_selector.append_text(ApplicationSettings.CloseAction.to_label(ApplicationSettings.CloseAction.PROMPT_SAVE_PROJECT));
+ on_close_selector.append_text(ApplicationSettings.CloseAction.to_label(ApplicationSettings.CloseAction.DO_NOTHING));
+ on_close_selector.set_active(0, (int)settings.close_action);
+ Hildon.PickerButton on_close_picker = new Hildon.PickerButton(Hildon.SizeType.FINGER_HEIGHT | Hildon.SizeType.HALFSCREEN_WIDTH, Hildon.ButtonArrangement.VERTICAL);
+ on_close_picker.set_title("Application end behaviour");
+ on_close_picker.set_selector(on_close_selector);
+ on_close_picker.set_alignment(0, 0, 1, 1);
+ on_close_picker.value_changed.connect( (s) => { on_close_updated(s.get_selector().get_current_text()); } );
+ page_3.pack_start(on_close_picker, false, false, 4);
+ page_3.add(msg_3);
+
+ notebook.append_page(page_3, null);
+
+ // page 4 - ON_ADD
+ Gtk.VBox page_4 = new Gtk.VBox(false, 4);
+ Gtk.Label msg_4 = new Gtk.Label("What should happen when you add a track?\nIf you are unsure accept the defaults.");
+ msg_4.set_line_wrap(true);
+ msg_4.set_alignment(0, 0);
+ on_add_selector = new Hildon.TouchSelector.text();
+ on_add_selector.append_text(ApplicationSettings.AddTrackAction.to_label(ApplicationSettings.AddTrackAction.SET_ACTIVE));
+ on_add_selector.append_text(ApplicationSettings.AddTrackAction.to_label(ApplicationSettings.AddTrackAction.SET_SOLO));
+ on_add_selector.append_text(ApplicationSettings.AddTrackAction.to_label(ApplicationSettings.AddTrackAction.SET_INACTIVE));
+ on_add_selector.append_text(ApplicationSettings.AddTrackAction.to_label(ApplicationSettings.AddTrackAction.SET_MUTE));
+ on_add_selector.set_active(0, (int)settings.add_track_action);
+ Hildon.PickerButton on_add_picker = new Hildon.PickerButton(Hildon.SizeType.FINGER_HEIGHT | Hildon.SizeType.HALFSCREEN_WIDTH, Hildon.ButtonArrangement.VERTICAL);
+ on_add_picker.set_title("Add track behaviour");
+ on_add_picker.set_selector(on_add_selector);
+ on_add_picker.set_alignment(0, 0, 1, 1);
+ on_add_picker.value_changed.connect( (s) => { on_add_updated(s.get_selector().get_current_text()); } );
+ page_4.pack_start(on_add_picker, false, false, 4);
+ page_4.add(msg_4);
+
+ notebook.append_page(page_4, null);
+
+ // page 5 - ON_BOUNCE
+ Gtk.VBox page_5 = new Gtk.VBox(false, 4);
+ Gtk.Label msg_5 = new Gtk.Label("What should happen when you bounce tracks?\nIf you are unsure accept the defaults.");
+ msg_5.set_line_wrap(true);
+ msg_5.set_alignment(0, 0);
+ on_bounce_selector = new Hildon.TouchSelector.text();
+ on_bounce_selector.append_text(ApplicationSettings.BounceTracksAction.to_label(ApplicationSettings.BounceTracksAction.SET_SOURCE_INACTIVE));
+ on_bounce_selector.append_text(ApplicationSettings.BounceTracksAction.to_label(ApplicationSettings.BounceTracksAction.SET_SOURCE_MUTE));
+ on_bounce_selector.append_text(ApplicationSettings.BounceTracksAction.to_label(ApplicationSettings.BounceTracksAction.SET_TARGET_SOLO));
+ on_bounce_selector.append_text(ApplicationSettings.BounceTracksAction.to_label(ApplicationSettings.BounceTracksAction.SET_TARGET_INACTIVE));
+ on_bounce_selector.append_text(ApplicationSettings.BounceTracksAction.to_label(ApplicationSettings.BounceTracksAction.SET_TARGET_MUTE));
+ on_bounce_selector.set_active(0, (int)settings.bounce_tracks_action);
+ Hildon.PickerButton on_bounce_picker = new Hildon.PickerButton(Hildon.SizeType.FINGER_HEIGHT | Hildon.SizeType.HALFSCREEN_WIDTH, Hildon.ButtonArrangement.VERTICAL);
+ on_bounce_picker.set_title("Bounce tracks behaviour");
+ on_bounce_picker.set_selector(on_bounce_selector);
+ on_bounce_picker.set_alignment(0, 0, 1, 1);
+ on_bounce_picker.value_changed.connect( (s) => { on_bounce_updated(s.get_selector().get_current_text()); } );
+ page_5.pack_start(on_bounce_picker, false, false, 4);
+ page_5.add(msg_5);
+
+ notebook.append_page(page_5, null);
+
+ // page 6 - ON_REMOVE
+ Gtk.VBox page_6 = new Gtk.VBox(false, 4);
+ Gtk.Label msg_6 = new Gtk.Label("What should happen when you remove a track?\nIf you are unsure accept the defaults.");
+ msg_6.set_line_wrap(true);
+ msg_6.set_alignment(0, 0);
+ on_remove_selector = new Hildon.TouchSelector.text();
+ on_remove_selector.append_text(ApplicationSettings.RemoveTrackAction.to_label(ApplicationSettings.RemoveTrackAction.PROMPT));
+ on_remove_selector.append_text(ApplicationSettings.RemoveTrackAction.to_label(ApplicationSettings.RemoveTrackAction.DELETE_FILE));
+ on_remove_selector.append_text(ApplicationSettings.RemoveTrackAction.to_label(ApplicationSettings.RemoveTrackAction.PRESERVE_FILE));
+ on_remove_selector.set_active(0, (int)settings.remove_track_action);
+ Hildon.PickerButton on_remove_picker = new Hildon.PickerButton(Hildon.SizeType.FINGER_HEIGHT | Hildon.SizeType.HALFSCREEN_WIDTH, Hildon.ButtonArrangement.VERTICAL);
+ on_remove_picker.set_title("Remove tracks behaviour");
+ on_remove_picker.set_selector(on_remove_selector);
+ on_remove_picker.set_alignment(0, 0, 1, 1);
+ on_remove_picker.value_changed.connect( (s) => { on_remove_updated(s.get_selector().get_current_text()); } );
+ page_6.pack_start(on_remove_picker, false, false, 4);
+ page_6.add(msg_6);
+
+ notebook.append_page(page_6, null);
+
+ // page 7 - ON_MIXDOWN
+ Gtk.VBox page_7 = new Gtk.VBox(false, 4);
+ Gtk.Label msg_7 = new Gtk.Label("What should happen when you mixdown your tracks?\nIf you are unsure accept the defaults.");
+ msg_7.set_line_wrap(true);
+ msg_7.set_alignment(0, 0);
+ on_mixdown_selector = new Hildon.TouchSelector.text();
+ on_mixdown_selector.append_text(ApplicationSettings.MixdownAction.to_label(ApplicationSettings.MixdownAction.NONE));
+ on_mixdown_selector.append_text(ApplicationSettings.MixdownAction.to_label(ApplicationSettings.MixdownAction.PLAY_TARGET));
+ on_mixdown_selector.set_active(0, (int)settings.mixdown_action);
+ Hildon.PickerButton on_mixdown_picker = new Hildon.PickerButton(Hildon.SizeType.FINGER_HEIGHT | Hildon.SizeType.HALFSCREEN_WIDTH, Hildon.ButtonArrangement.VERTICAL);
+ on_mixdown_picker.set_title("Mixdown behaviour");
+ on_mixdown_picker.set_selector(on_mixdown_selector);
+ on_mixdown_picker.set_alignment(0, 0, 1, 1);
+ on_mixdown_picker.value_changed.connect( (s) => { on_mixdown_updated(s.get_selector().get_current_text()); } );
+ page_7.pack_start(on_mixdown_picker, false, false, 4);
+ page_7.add(msg_7);
+
+ notebook.append_page(page_7, null);
+
+ // page 8 - Thank You
+ Gtk.VBox page_8 = new Gtk.VBox(false, 4);
+ Gtk.Label msg_8 = new Gtk.Label("That's all for now. \n\nYou can change these settings at any time from the settings menu option.\n\nEnjoy!");
+ msg_8.set_line_wrap(true);
+ msg_8.set_alignment(0, 0);
+ page_8.add(msg_8);
+
+ notebook.append_page(page_8, null);
+ notebook.show_all();
+
+ return notebook;
+ }
+
+ public bool forward_page_function(Gtk.Notebook notebook, int current_page) {
+ bool good = false;
+ // current page is page about to be left!
+ switch (current_page) {
+ case WizardPage.WORKING_FOLDER:
+ good = true;
+ break;
+ case WizardPage.ON_OPEN:
+ this.directory_btn.value = this.app_settings.working_directory;
+ good = true;
+ break;
+ case WizardPage.ON_CLOSE:
+ good = true;
+ break;
+ case WizardPage.ON_ADD:
+ good = true;
+ break;
+ case WizardPage.ON_BOUNCE:
+ good = true;
+ break;
+ case WizardPage.ON_REMOVE:
+ good = true;
+ break;
+ case WizardPage.ON_MIXDOWN:
+ good = true;
+ break;
+ default:
+ this.directory_btn.value = this.app_settings.working_directory;
+ good = true;
+ break;
+ }
+ return good;
+ }
+
+ private void select_directory() {
+ // get a filename
+ Hildon.FileChooserDialog file_chooser = new Hildon.FileChooserDialog(this, Gtk.FileChooserAction.SELECT_FOLDER);
+ file_chooser.set_show_upnp(false);
+ Gtk.ResponseType ret = (Gtk.ResponseType) file_chooser.run();
+ if (Gtk.ResponseType.OK == ret) {
+ this.directory_btn.value = file_chooser.get_filename();
+ this.app_settings.working_directory = file_chooser.get_filename();
+ }
+ file_chooser.destroy ();
+ }
+
+ /*public void destroy_notify(ApplicationSettings* data) {
+ /// TODO
+ }*/
+
+}
+
+}