/* 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 ProjectSettingsDialog : Hildon.Dialog { Hildon.Entry name_entry; Hildon.Button directory_btn; Hildon.Button filename_btn; string root_folder; bool user_set; public string get_project_name() { return name_entry.get_text(); } public void set_project_name(string project_name) { name_entry.set_text(project_name); validate(); } public string get_project_directory() { return directory_btn.get_value(); } public void set_project_directory(string project_directory) { directory_btn.set_value(project_directory); validate(); } public string get_project_filename() { return filename_btn.get_value(); } public void set_project_filename(string project_filename) { filename_btn.set_value(project_filename); validate(); } public ProjectSettingsDialog(Gtk.Widget parent, string title) { this.user_set = false; this.set_parent(parent); this.set_title(title); this.set_default_response(Gtk.ResponseType.CANCEL); construct_interface("", "", ""); } public ProjectSettingsDialog.with_values(Gtk.Widget parent, string title, string project_name, string project_directory, string project_filename, string root_folder) { user_set = (0 < project_directory.length && 0 < project_filename.length); this.root_folder = root_folder; this.set_parent(parent); this.set_title(title); this.set_default_response(Gtk.ResponseType.CANCEL); construct_interface(project_name, project_directory, project_filename); } private void construct_interface(string name, string dir, string filename) { this.add_button(Gtk.STOCK_OK, Gtk.ResponseType.OK); Gtk.VBox control_area = (Gtk.VBox)this.get_content_area(); Gtk.HBox name_bar = new Gtk.HBox(false, 4); Gtk.Label name_label = new Gtk.Label("Name"); name_bar.pack_start(name_label, false, false, 2); name_entry = new Hildon.Entry(Hildon.SizeType.HALFSCREEN_WIDTH); name_entry.set_text(name); name_entry.set_placeholder("Project name"); name_entry.changed.connect(name_entry_changed); name_bar.pack_start(name_entry, true, true, 2); control_area.pack_start(name_bar, true, true, 4); directory_btn = new Hildon.Button.with_text(Hildon.SizeType.FINGER_HEIGHT | Hildon.SizeType.HALFSCREEN_WIDTH, Hildon.ButtonArrangement.VERTICAL, "Working folder", dir); directory_btn.set_style(Hildon.ButtonStyle.PICKER); directory_btn.set_alignment(0, 0, 1, 1); directory_btn.set_value(dir); directory_btn.clicked.connect(select_directory); control_area.pack_start(directory_btn, true, true, 4); filename_btn = new Hildon.Button.with_text(Hildon.SizeType.FINGER_HEIGHT | Hildon.SizeType.HALFSCREEN_WIDTH, Hildon.ButtonArrangement.VERTICAL, "Settings file", dir); filename_btn.set_style(Hildon.ButtonStyle.PICKER); filename_btn.set_alignment(0, 0, 1, 1); filename_btn.set_value(filename); filename_btn.clicked.connect(select_filename); control_area.pack_start(filename_btn, true, true, 4); validate(); this.show_all(); } private void name_entry_changed() { if (!user_set) { this.directory_btn.value = root_folder + "/" + get_project_name(); this.filename_btn.value = this.directory_btn.value + "/project.xml"; } validate(); } private void validate() { bool good = true; good &= (0 < get_project_name().length); good &= (0 < get_project_directory().length); good &= (0 < get_project_filename().length); this.set_response_sensitive(Gtk.ResponseType.OK, 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); file_chooser.set_safe_folder(this.root_folder); file_chooser.set_current_folder(this.root_folder); if (0 < this.directory_btn.value.length) { // if it exists? //file_chooser.set_current_folder(this.directory_btn.value); // else } Gtk.ResponseType ret = (Gtk.ResponseType) file_chooser.run(); if (Gtk.ResponseType.OK == ret) { user_set = true; this.directory_btn.value = file_chooser.get_filename(); if ("" == this.filename_btn.value) { this.filename_btn.value = this.directory_btn.value + "/project.xml"; } } file_chooser.destroy (); validate(); } private void select_filename() { // get a filename Hildon.FileChooserDialog file_chooser = new Hildon.FileChooserDialog(this, Gtk.FileChooserAction.SAVE); file_chooser.set_show_upnp(false); file_chooser.set_current_folder(this.root_folder); file_chooser.set_current_name("project.xml"); if (0 < this.filename_btn.value.length) { //file_chooser.set_filename(this.filename_btn.value); file_chooser.set_safe_folder(root_folder); /// TODO // file_chooser.set_current_folder(this.filename_btn.value); } Gtk.ResponseType ret = (Gtk.ResponseType) file_chooser.run(); if (Gtk.ResponseType.OK == ret) { user_set = true; this.filename_btn.value = file_chooser.get_filename(); } file_chooser.destroy (); validate(); } } }