preparation for new hildon (desktop and widgets) support
[simple-launcher] / settings-dialog.cc
index 3af780e..9589413 100644 (file)
 // this program; if not, write to the Free Software Foundation, Inc., 51
 // Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
-#include <gtk/gtkvbox.h>
-#include <gtk/gtkhbox.h>
-#include <gtk/gtksizegroup.h>
 #include <gtk/gtknotebook.h>
 #include <gtk/gtklabel.h>
 
 #include "settings-dialog.h"
+#include "settings-page-entries.h"
+#include "settings-page-items.h"
 
 #define SL_APPLET_SETTINGS_ICON_SIZE  26
 
-// FIXME: UGLY!!!!
-
-inline void addPage(GtkNotebook *notebook, const std::string& name, GtkWidget *widget) {
-  GtkWidget *label = gtk_label_new(name.c_str());
-
-  gtk_notebook_append_page(notebook, widget, label);
-}
-
-inline GtkWidget *packItTogether(GtkSizeGroup *group, const std::string& name, GtkWidget *content) {
-  GtkWidget *box = gtk_hbox_new(false, 0);
-  GtkWidget *label = gtk_label_new(name.c_str());
+SettingsDialog::SettingsDialog(GtkWindow *parent, LauncherItems& items, GConfBooleanOption& transparent, GConfIntegerOption& icon_size):
+  myTransparent(transparent, "Transparent background:"),
+  myIconSize(icon_size, "Icon Size:") {
+  myDialog = GTK_DIALOG(gtk_dialog_new_with_buttons("Launcher Settings", parent, (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT), "OK", GTK_RESPONSE_OK, "Cancel", GTK_RESPONSE_CANCEL, NULL));
 
-  gtk_size_group_add_widget(group, label);
-  gtk_box_pack_start(GTK_BOX(box), label, true, true, 0);
-  gtk_box_pack_start(GTK_BOX(box), content, true, true, 0);
+  myNotebook = GTK_NOTEBOOK(gtk_notebook_new());
 
-  return box;
-}
+  gtk_container_add(GTK_CONTAINER(myDialog->vbox), GTK_WIDGET(myNotebook));
 
-inline GtkWidget *createUIPage() {
-  GtkSizeGroup *group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
-  GtkWidget *vbox = gtk_vbox_new(true, 0);
+  SettingsPageWithEntries *uiPage = new SettingsPageWithEntries();
+  uiPage->addEntry(&myTransparent);
+  uiPage->addEntry(&myIconSize);
 
-  // packItTogether(group, "Button Size:", <small/big>);
-  // packItTogether(group, "Transparent background:", [ ]);
-  // packItTogether(group, "Show Infobanner:", [ ]);
+  SettingsPageWithItems *itemsPage = new SettingsPageWithItems(SL_APPLET_SETTINGS_ICON_SIZE, items);
 
-  g_object_unref(G_OBJECT(group));
+  addPage("UI", uiPage);
+  addPage("Items", itemsPage);
 
-  return vbox;
+  gtk_widget_set_size_request(GTK_WIDGET(myDialog), 540, 324);
 }
 
-SettingsDialog::SettingsDialog(GtkWindow *parent, LauncherItems& items) : myList(SL_APPLET_SETTINGS_ICON_SIZE, items) {
-  myDialog = GTK_DIALOG(gtk_dialog_new_with_buttons("Launcher Settings", parent, (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT), "OK", GTK_RESPONSE_OK, "Cancel", GTK_RESPONSE_CANCEL, NULL));
+SettingsDialog::~SettingsDialog() {
+  for (std::vector<SettingsPage *>::iterator it = myPages.begin(); it != myPages.end() ; ++it) {
+    delete *it;
+  }
 
-  GtkNotebook *notebook = GTK_NOTEBOOK(gtk_notebook_new());
+  myPages.resize(0);
 
-  gtk_container_add(GTK_CONTAINER(myDialog->vbox), GTK_WIDGET(notebook));
+  gtk_widget_destroy(GTK_WIDGET(myDialog));
+}
 
-  // addPage(notebook, "UI", createUIPage());
-  addPage(notebook, "Items", myList.getWidget());
+void SettingsDialog::addPage(const std::string& name, SettingsPage *page) {
+  myPages.push_back(page);
 
-  gtk_widget_set_size_request(GTK_WIDGET(myDialog), 540, 257);
-}
+  GtkWidget *label = gtk_label_new(name.c_str());
 
-SettingsDialog::~SettingsDialog() {
-  gtk_widget_destroy(GTK_WIDGET(myDialog));
+  gtk_notebook_append_page(myNotebook, page->getWidget(), label);
 }
 
 gint SettingsDialog::run() {
   gtk_widget_show_all(GTK_WIDGET(myDialog));
+  gtk_notebook_set_current_page(myNotebook, 0);
 
   return gtk_dialog_run(myDialog);
 }
 
+void SettingsDialog::updateValues() {
+  myTransparent.updateValue();
+  myIconSize.updateValue();
+}
+
 // vim:ts=2:sw=2:et