00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "preferencesdialog.h"
00019 #include "stockmarketvector.h"
00020 #include "preferences.h"
00021 #include "config.h"
00022
00023
00024 #include <gtkmm/stock.h>
00025
00030 PreferencesDialog::PreferencesDialog(StockMarketVector * const stockMarketVector, Preferences * const preferences){
00031
00032 #ifdef DEBUG
00033 cout << "starting Preferences Dialog" << endl;
00034 #endif
00035 PreferencesDialog::stockMarketVector = stockMarketVector;
00036 PreferencesDialog::preferences = preferences;
00037
00038 stringStockmarket = "Stockmarket"; stringTeletext = "Teletext";
00039 stringSaveOptions = "Save Options";
00040 stringOther = "Other"; stringOnExit = "On Exit";
00041
00042 set_title("Preferences");
00043 set_border_width(5);
00044 set_resizable(false);
00045 set_modal(true);
00046
00047 vbox = manage(new Gtk::VBox(false, 0));
00048 vbox->set_spacing(5);
00049 add(*vbox);
00050
00051 hbox = manage(new Gtk::HBox(false, 0));
00052 hbox->set_spacing(5);
00053 vbox->pack_start(*hbox, Gtk::PACK_SHRINK, 0);
00054
00055 Gtk::Frame *frame = manage( new Gtk::Frame("Categories"));
00056 hbox->pack_start(*frame);
00057
00058 scrolledWindowTreeView = manage (new Gtk::ScrolledWindow());
00059 scrolledWindowTreeView->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
00060 scrolledWindowTreeView->set_size_request(150,250);
00061 scrolledWindowTreeView->set_border_width(5);
00062 scrolledWindowTreeView->add(m_TreeView);
00063 frame->add(*scrolledWindowTreeView);
00064
00065 m_refTreeModel = Gtk::TreeStore::create(m_Columns);
00066 m_TreeView.set_model(m_refTreeModel);
00067 m_TreeView.set_reorderable(false);
00068
00069 Gtk::TreeModel::Row row = *(m_refTreeModel->append());
00070 row[m_Columns.m_col_name] = stringStockmarket;
00071 Gtk::TreeModel::Row childrow = *(m_refTreeModel->append(row.children()));
00072
00073
00074 childrow[m_Columns.m_col_name] = stringTeletext;
00075
00076 row = *(m_refTreeModel->append());
00077 row[m_Columns.m_col_name] = stringSaveOptions;
00078
00079 row = *(m_refTreeModel->append());
00080 row[m_Columns.m_col_name] = stringOther;
00081 childrow = *(m_refTreeModel->append(row.children()));
00082 childrow[m_Columns.m_col_name] = stringOnExit;
00083
00084 m_TreeView.append_column("Categories", m_Columns.m_col_name);
00085 m_TreeView.set_headers_visible(false);
00086 m_TreeView.expand_all();
00087
00088
00089 Glib::RefPtr<Gtk::TreeSelection> refTreeSelection = m_TreeView.get_selection();
00090 refTreeSelection->signal_changed().connect(slot(*this, &PreferencesDialog::eventRowSelected));
00091
00092 hboxFrame = NULL;
00093
00094 hSep = manage(new Gtk::HSeparator());
00095 vbox->pack_start(*hSep, Gtk::PACK_SHRINK, 0);
00096
00097 Gtk::HButtonBox *hButtonBox;
00098 Gtk::Button *buttonHelp, *buttonFinish;
00099 hButtonBox = manage( new Gtk::HButtonBox());
00100 hButtonBox->set_spacing(5);
00101 vbox->pack_start(*hButtonBox, Gtk::PACK_SHRINK, 0);
00102 buttonHelp = manage( new Gtk::Button(Gtk::Stock::HELP));
00103
00104 hButtonBox->pack_start(*buttonHelp, Gtk::PACK_SHRINK, 0);
00105 buttonFinish = manage( new Gtk::Button(Gtk::Stock::OK));
00106 buttonFinish->signal_clicked().connect(slot(*this,&PreferencesDialog::finish));
00107 hButtonBox->pack_start(*buttonFinish, Gtk::PACK_SHRINK, 0);
00108
00109
00110 initSaveOptions();
00111
00112 show_all();
00113 }
00114
00115
00119 PreferencesDialog::~PreferencesDialog(){
00120
00121 destroySaveOptions();
00122 }
00123
00127 void PreferencesDialog::quit() {
00128 #ifdef DEBUG
00129 cout << "quiting Preferences Dialog" << endl;
00130 #endif
00131 delete this;
00132 }
00133
00137 void PreferencesDialog::finish() {
00138 quit();
00139 }
00140
00141
00142
00146 void PreferencesDialog::initSaveOptions() {
00147 autoSaveOnExitCheckButton = new Gtk::CheckButton("Autosave on Exit");
00148 autoSaveOnExitCheckButton->set_active(preferences->getAutoSaveOnExit());
00149 autoSaveOnExitCheckButton->signal_clicked().connect(slot(*this,&PreferencesDialog::eventAutoSaveOnExitCheckButton));
00150 saveDialogOnExitCheckButton = new Gtk::CheckButton("Show Save Dialog on Exit");
00151 saveDialogOnExitCheckButton->set_active(preferences->getSaveDialogOnExit());
00152 saveDialogOnExitCheckButton->signal_clicked().connect(slot(*this,&PreferencesDialog::eventSaveDialogOnExitCheckButton));
00153 }
00154
00155
00156
00160 void PreferencesDialog::destroySaveOptions() {
00161 delete autoSaveOnExitCheckButton;
00162 delete saveDialogOnExitCheckButton;
00163 }
00164
00165
00166
00170 void PreferencesDialog::eventRowSelected() {
00171 Glib::RefPtr<Gtk::TreeSelection> refTreeSelection = m_TreeView.get_selection();
00172 Gtk::TreeModel::iterator iter = refTreeSelection->get_selected();
00173 if(iter) {
00174 Gtk::TreeModel::Row row = *iter;
00175 Glib::ustring strText = row[m_Columns.m_col_name];
00176 string s = locale_from_utf8 (strText);
00177 #ifdef DEBUG
00178 cout << "selected row " << s << endl;
00179 #endif
00180 if (hboxFrame != NULL) delete hboxFrame;
00181 hboxFrame = manage(new Gtk::Frame());
00182 hboxFrame->set_size_request(250,-1);
00183 hbox->pack_start(*hboxFrame, Gtk::PACK_SHRINK, 0);
00184 vboxOptions = manage(new Gtk::VBox(false, 0));
00185 vboxOptions->set_border_width(5);
00186 vboxOptions->set_spacing(5);
00187 hboxFrame->add(*vboxOptions);
00188 if (s == stringStockmarket) {
00189 hboxFrame->set_label("Stockmarket");
00190 }
00191 if (s == stringTeletext) {
00192 hboxFrame->set_label("Teletext");
00193 }
00194 if (s == stringSaveOptions) {
00195 hboxFrame->set_label("Save Options");
00196 {
00197 Gtk::Frame *frame = manage( new Gtk::Frame("Autosave"));
00198 vboxOptions->pack_start(*frame, Gtk::PACK_SHRINK, 0);
00199 Gtk::VBox *box = manage(new Gtk::VBox(false, 0));
00200 box->set_border_width(5);
00201 box->set_spacing(5);
00202 frame->add(*box);
00203 box->pack_start(*autoSaveOnExitCheckButton, Gtk::PACK_SHRINK, 0);
00204 }
00205 {
00206 Gtk::Frame *frame = manage( new Gtk::Frame("Save Dialog on Exit"));
00207 vboxOptions->pack_start(*frame, Gtk::PACK_SHRINK, 0);
00208 Gtk::VBox *box = manage(new Gtk::VBox(false, 0));
00209 box->set_border_width(5);
00210 box->set_spacing(5);
00211 frame->add(*box);
00212 box->pack_start(*saveDialogOnExitCheckButton, Gtk::PACK_SHRINK, 0);
00213 }
00214 }
00215 if (s == stringOther) {
00216 hboxFrame->set_label("Other");
00217 }
00218 if (s == stringOnExit) {
00219 hboxFrame->set_label("On Exit");
00220 }
00221 }
00222 show_all();
00223 }
00224
00228 void PreferencesDialog::eventAutoSaveOnExitCheckButton() {
00229 bool choice = autoSaveOnExitCheckButton->get_active();
00230 preferences->setAutoSaveOnExit(choice);
00231 if (choice == true) {
00232 saveDialogOnExitCheckButton->hide();
00233 preferences->setSaveDialogOnExit(false);
00234 saveDialogOnExitCheckButton->set_active(false);
00235 } else {
00236 saveDialogOnExitCheckButton->show();
00237 }
00238 }
00239
00243 void PreferencesDialog::eventSaveDialogOnExitCheckButton() {
00244 bool choice = saveDialogOnExitCheckButton->get_active();
00245 preferences->setSaveDialogOnExit(choice);
00246 }
00247
00252 bool PreferencesDialog::on_delete_event(GdkEventAny *event) {
00253 quit();
00254 return true;
00255 }