started a hackish implementation of settings dialog for real values
[simple-launcher] / simple-launcher.cc
index 2211736..5fe3aae 100644 (file)
 #include "sla-list.h"
 #include "launchable-item.h"
 #include "settings-dialog.h"
+#include "gconf-wrapper.h"
 
 #define SL_APPLET_DBUS_NAME  "simple-launcher"
 #define SL_APPLET_VERSION    "0.0"
-#define SL_APPLET_ICON_SIZE  48
 
 #define SL_APPLET_GCONF_PATH  "/apps/simple-launcher"
 
 class SimpleLauncherApplet {
 public:
-  SimpleLauncherApplet();
+  SimpleLauncherApplet(const GConfKey&);
  ~SimpleLauncherApplet();
 
   bool doInit(void *state_data, int *state_size);
@@ -80,8 +80,10 @@ private:
 
   LauncherItems myItems;
 
-  bool myTransparent;
+  GConfBooleanOption myTransparent;
   // bool myShowInfobanner; // FIXME: to implement
+  GConfIntegerOption myIconSize;
+  GConfIntegerOption myCanvasSize;
 
   static char *ourDirs[];
 };
@@ -89,7 +91,9 @@ private:
 // Hildon home applet interface functions
 
 void *hildon_home_applet_lib_initialize(void *state_data, int *state_size, GtkWidget **widget) {
-  SimpleLauncherApplet *applet = new SimpleLauncherApplet();
+  GConfKey baseKey(SL_APPLET_GCONF_PATH);
+
+  SimpleLauncherApplet *applet = new SimpleLauncherApplet(baseKey);
 
   if (applet != NULL) {
     if (applet->doInit(state_data, state_size)) {
@@ -133,7 +137,7 @@ char *SimpleLauncherApplet::ourDirs[] = {
 };
 
 // SimpleLauncherApplet::SimpleLauncherApplet() : myMainSettings(myClient.getKey(SL_APPLET_GCONF_PATH)), myContext(NULL), myWidget(NULL), myParent(NULL) {
-SimpleLauncherApplet::SimpleLauncherApplet() : myContext(NULL), myWidget(NULL), myParent(NULL), myTransparent(false) {
+SimpleLauncherApplet::SimpleLauncherApplet(const GConfKey& base) : myContext(NULL), myWidget(NULL), myParent(NULL), myTransparent(base, "transparent", true), myIconSize(base, "icon_size", 48), myCanvasSize(base, "canvas_size", 1) {
 }
 
 bool SimpleLauncherApplet::doInit(void *state_data, int *state_size) {
@@ -271,9 +275,14 @@ void SimpleLauncherApplet::updateWidget() {
       gtk_widget_set_events(button, GDK_BUTTON_PRESS_MASK);
       g_signal_connect(button, "button-press-event", G_CALLBACK(_button_pressed), this);
 
-      gtk_event_box_set_visible_window(GTK_EVENT_BOX(button), !myTransparent);
+      gtk_event_box_set_visible_window(GTK_EVENT_BOX(button), !myTransparent.value());
+      gtk_container_set_border_width(GTK_CONTAINER(button), myCanvasSize.value());
 
-      gtk_container_add(GTK_CONTAINER(button), gtk_image_new_from_pixbuf(item->getIcon(SL_APPLET_ICON_SIZE)));
+      {
+        GdkPixbuf *pixbuf = item->getIcon(myIconSize.value());
+        gtk_container_add(GTK_CONTAINER(button), gtk_image_new_from_pixbuf(pixbuf));
+        g_object_unref(G_OBJECT(pixbuf));
+      }
 
       gtk_object_set_user_data(GTK_OBJECT(button), item);
 
@@ -287,10 +296,12 @@ void SimpleLauncherApplet::updateWidget() {
 
   g_object_unref(G_OBJECT(group));
 
+  int totalSize = myIconSize.value()+2*myCanvasSize.value();
+
   if (button_no == 0) {
-    gtk_widget_set_size_request(myWidget, SL_APPLET_ICON_SIZE, SL_APPLET_ICON_SIZE);
+    gtk_widget_set_size_request(myWidget, totalSize, totalSize);
   } else {
-    gtk_widget_set_size_request(myWidget, button_no*SL_APPLET_ICON_SIZE, SL_APPLET_ICON_SIZE);
+    gtk_widget_set_size_request(myWidget, button_no*totalSize, totalSize);
   }
 
   gtk_widget_show_all(myWidget);
@@ -343,11 +354,14 @@ void SimpleLauncherApplet::runDialog() {
 
   LauncherItems newItems = myItems;
 
-  SettingsDialog dialog(myParent, SL_APPLET_ICON_SIZE, newItems);
+  // TODO: make it nicer... this code is ugly :(
+  SettingsDialog dialog(myParent, newItems, myTransparent, myIconSize, myCanvasSize);
 
   switch (dialog.run()) {
     case GTK_RESPONSE_OK:
       myItems = newItems;
+      dialog.updateValues();  // FIXME: hackish :( make it better
+
       saveConfig();   // save it immediately!
       updateWidget();
       break;