diff doodle/gtk/palette.d @ 54:30ecedfe2ce2

Partial palette support
author "David Bryant <bagnose@gmail.com>"
date Sun, 08 Aug 2010 21:07:47 +0930
parents 4dadc3c03b7e
children 4922e746dd76
line wrap: on
line diff
--- a/doodle/gtk/palette.d	Fri Aug 06 09:38:36 2010 +0930
+++ b/doodle/gtk/palette.d	Sun Aug 08 21:07:47 2010 +0930
@@ -6,11 +6,12 @@
 }
 
 private {
+    import doodle.core.logging;
     import gtk.ToolButton;
+    import gtk.RadioToolButton;
+    import gtk.Image;
     import glib.ListSG;
     import std.stdio;
-    import gtk.RadioToolButton;
-    import gtk.Image;
 }
 
 class Palette : Toolbar, IPalette {
@@ -21,41 +22,41 @@
         setTooltips(true);
     }
 
-    //void set(
+    override void configure(in Item[] items) {
+        _items = items.dup;
+        ListSG group;
 
-    int add(in string iconPath, in string tooltipText, void delegate(int) dg) {
-        auto button = new RadioToolButton(_group);
-        auto image = new Image(iconBase ~ "/" ~ iconPath);
-        button.setLabelWidget(image);
-        int * i = new int;
-        *i = _delegates.length;
-        _delegates[*i] = dg;
-        button.objectGSetDataFull(indexStr, cast(gpointer)i);
-        button.addOnClicked(&onClicked);
-        insert(button);
-        return *i;
+        foreach(index, item; _items) {
+            auto button = new RadioToolButton(group);
+            if (index == 0) group = button.getGroup;
+            auto image = new Image(_iconBase ~ "/" ~ item.iconPath);
+            button.setLabelWidget(image);
+            button.setTooltipText(item.tooltipText);
+
+            int * i = new int;
+            *i = index;
+            button.objectGSetDataFull(_indexStr, cast(gpointer)i);
+            button.addOnClicked(&onClicked);
+
+            insert(button);
+        }
     }
 
-    void remove(in int id) {
-    }
-
-    void activate(in int id) {
+    override void activate(in int index) {
+        warning("Not yet implemented");
     }
 
     private {
-        immutable iconBase = "/home/daveb/source/d/doodle/source/doodle/gtk/data";
-        immutable indexStr = "index";
-        ListSG _group;
-        void delegate(int) _delegates[int];
+        immutable _iconBase = "/home/daveb/source/d/doodle/doodle/gtk/data";
+        immutable _indexStr = "index";
+        Item[] _items;
 
-        void onClicked(ToolButton tool_button) {
-            int * i = cast(int *)tool_button.getData(indexStr);
-            _delegates[*i](*i);
+        void onClicked(ToolButton toolButton) {
+            RadioToolButton button = cast(RadioToolButton)toolButton;
+            if (button.getActive) {
+                int * i = cast(int *)button.getData(_indexStr);
+                _items[*i].callback(*i);
+            }
         }
-
-        /*
-        ToolButton find(int index) {
-        }
-        */
     }
 }