diff doodle/dia/tool_layer.d @ 58:c63719604adb

Beginnings of creating a rectangle...
author "David Bryant <bagnose@gmail.com>"
date Mon, 09 Aug 2010 21:43:24 +0930
parents 9960c4fbd0dd
children e64baac3efb2
line wrap: on
line diff
--- a/doodle/dia/tool_layer.d	Sun Aug 08 22:01:54 2010 +0930
+++ b/doodle/dia/tool_layer.d	Mon Aug 09 21:43:24 2010 +0930
@@ -5,17 +5,33 @@
 }
 
 private {
-    import std.stdio;
     import doodle.cairo.routines;
+    import doodle.core.logging;
+}
+
+// This interface is used by the palette
+interface IToolStack {
+    void use(Tool tool);
+}
+
+interface IToolStackObserver {
+    void toolChanged(int index);
 }
 
-interface IToolStack {
-}
-
-class ToolLayer : Layer, IEventHandler, IToolStack {
-    this(in Tool[] tools, in string name) {
+final class ToolLayer : Layer, IEventHandler, IToolStack {
+    this(in Tool[] tools, IToolStackObserver observer, in string name = "Tool") {
         super(name);
         _tools = tools.dup;
+        _observer = observer;
+    }
+
+    // IToolStack overrides:
+
+    void use(Tool tool) {
+        assert(_grabbedTool is null);
+        message("using new tool: %s", tool.name);
+        _tools ~= tool;
+        //_observer.toolChanged(_tools.length - 1);
     }
 
     // Layer overrides:
@@ -34,14 +50,14 @@
 
     // EventHandler overrides:
 
-    override bool handleButtonPress(scope IViewport viewport, in ButtonEvent event) {
+    bool handleButtonPress(scope IViewport viewport, in ButtonEvent event) {
         // writefln("%s", event);
 
         if (_grabbedTool is null) {
             foreach_reverse(ref tool; _tools) {
                 if (tool.handleButtonPress(viewport, event)) {
                     _grabbedTool = &tool;
-                    _grabbedButton = event.button_name;
+                    _grabbedButton = event.buttonName;
                     break;
                 }
             }
@@ -53,13 +69,13 @@
         return true;
     }
 
-    override bool handleButtonRelease(scope IViewport viewport, in ButtonEvent event) {
+    bool handleButtonRelease(scope IViewport viewport, in ButtonEvent event) {
         // writefln("%s", event);
 
         if (_grabbedTool !is null) {
             _grabbedTool.handleButtonRelease(viewport, event);
 
-            if (_grabbedButton == event.button_name) {
+            if (_grabbedButton == event.buttonName) {
                 _grabbedTool = null;
             }
         }
@@ -67,19 +83,19 @@
         return true;
     }
 
-    override bool handleKeyPress(scope IViewport viewport, in KeyEvent event) {
+    bool handleKeyPress(scope IViewport viewport, in KeyEvent event) {
         // writefln("%s", event);
 
         return true;
     }
 
-    override bool handleKeyRelease(scope IViewport viewport, in KeyEvent event) {
+    bool handleKeyRelease(scope IViewport viewport, in KeyEvent event) {
         // writefln("%s", event);
 
         return true;
     }
 
-    override bool handleMotion(scope IViewport viewport, in MotionEvent event) {
+    bool handleMotion(scope IViewport viewport, in MotionEvent event) {
         //writefln("%s", event);
 
         if (_grabbedTool is null) {
@@ -96,7 +112,7 @@
         return true;
     }
 
-    override bool handleScroll(scope IViewport viewport, in ScrollEvent event) {
+    bool handleScroll(scope IViewport viewport, in ScrollEvent event) {
         // writefln("%s", event);
 
         if (_grabbedTool is null) {
@@ -113,19 +129,10 @@
         return true;
     }
 
-    /*
-    override void push(Tool tool) {
-    }
-
-    override void pop() {
-    }
-
-    override void replace(Tool tool) {
-    }
-    */
-
     private {
         Tool[] _tools;
+        IToolStackObserver _observer;
+
         Tool * _grabbedTool;
         ButtonName _grabbedButton;
     }