/* Demo Recorder for MAEMO 5 * Copyright (C) 2010 Dru Moore * 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 }*/ } }