diff doodle/main/prog/doodler.d @ 60:e64baac3efb2

Attempt at a templatised palette
author David Bryant <bagnose@gmail.com>
date Tue, 10 Aug 2010 22:55:54 +0930
parents c63719604adb
children 08ffc44fc21a
line wrap: on
line diff
--- a/doodle/main/prog/doodler.d	Mon Aug 09 21:50:16 2010 +0930
+++ b/doodle/main/prog/doodler.d	Tue Aug 10 22:55:54 2010 +0930
@@ -12,7 +12,7 @@
     import doodle.fig.tools;
 
     import doodle.gtk.canvas;
-    import doodle.gtk.palette;
+    import doodle.gtk.palette2;
 
     import gtk.Main;
     import gtk.MainWindow;
@@ -27,15 +27,9 @@
         auto window = new MainWindow("Doodle");
         auto vbox = new VBox(false, 0);
 
-        auto palette = new Palette;
+        auto palette = new Palette2!Tool;
         _palette = palette;
-        IPalette.Item[] items = [
-        { "select.svg",    "Select",    "Select and modify elements", &paletteCallback },
-        { "rectangle.svg", "Rectangle", "Create rectangle",           &paletteCallback },
-        { "ellipse.svg",   "Ellipse",   "Create ellipse",             &paletteCallback },
-        { "polyline.svg",  "Polyline",  "Create polyline",            &paletteCallback }
-        ];
-        _palette.configure(items);
+
         vbox.packStart(palette, false, false, 0);
 
         Tool[] tools;
@@ -45,11 +39,11 @@
         auto toolLayer = new ToolLayer(tools, this);
         _toolStack = toolLayer;
 
+        auto gridLayer = new GridLayer;
+
         auto diagramLayer = new DiagramLayer;
         _diagram = diagramLayer;
 
-        auto gridLayer = new GridLayer;
-
         Layer[] layers;
         layers ~= new PageLayer;
         layers ~= gridLayer;
@@ -57,40 +51,33 @@
         auto canvas = new Canvas(layers, toolLayer, gridLayer, 120.0);
 
         vbox.packStart(canvas, true, true, 0);
+
+        Palette2!Tool.Item[] items = [
+        { "select.svg",    "Select",    "Select and modify elements", new SelectTool },
+        { "rectangle.svg", "Rectangle", "Create rectangle", new CreateRectangleTool(_diagram) },
+        { "ellipse.svg",   "Ellipse",   "Create ellipse", new CreateRectangleTool(_diagram) },
+        { "polyline.svg",  "Polyline",  "Create polyline", new CreateRectangleTool(_diagram) }
+        ];
+
+        palette.configure(items, &paletteCallback);
         window.add(vbox);
         window.setDefaultSize(640, 580);
         window.showAll();
         Main.run();
     }
 
-    void toolChanged(int index) {      // FIXME dmd bug? have to make this public
-        message("Tool changed %s", index);
-        _palette.activate(index);
+    void toolChanged(Tool tool) {
+        message("Tool changed %s", tool.name);
+        _palette.activate(tool);
     }
 
     private {
         IToolStack _toolStack;
-        IPalette _palette;
+        Palette2!Tool _palette;     // FIXME refer to the interface?
         IDiagram _diagram;
 
-        void paletteCallback(int index) {
-            switch (index) {
-            case 0:
-                // Select
-                break;
-            case 1:
-                // Rectangle
-                _toolStack.use(new CreateRectangleTool(_diagram));
-                break;
-            case 2:
-                // Ellipse
-                break;
-            case 3:
-                // Polyline
-                break;
-            default:
-                assert(0);
-            }
+        void paletteCallback(Tool tool) {
+            _toolStack.use(tool);
         }
 
     }