diff doodle/dia/tool_layer.d @ 63:20d6327c4a75

Event progress. Got key press/release working and panning via keyboard.
author daveb
date Thu, 12 Aug 2010 16:35:24 +0930
parents e64baac3efb2
children eb5436b47d13
line wrap: on
line diff
--- a/doodle/dia/tool_layer.d	Thu Aug 12 11:48:55 2010 +0930
+++ b/doodle/dia/tool_layer.d	Thu Aug 12 16:35:24 2010 +0930
@@ -19,9 +19,9 @@
 }
 
 final class ToolLayer : Layer, IEventHandler, IToolStack {
-    this(in Tool[] tools, IToolStackObserver observer, in string name = "Tool") {
+    this(in Tool[] staticTools, IToolStackObserver observer, in string name = "Tool") {
         super(name);
-        _tools = tools.dup;
+        _staticTools = staticTools.dup;
         _observer = observer;
     }
 
@@ -30,7 +30,7 @@
     void use(Tool tool) {
         assert(_grabbedTool is null);
         message("using new tool: %s", tool.name);
-        _tools ~= tool;
+        _staticTools ~= tool;
         _observer.toolChanged(tool);
     }
 
@@ -54,9 +54,9 @@
         // writefln("%s", event);
 
         if (_grabbedTool is null) {
-            foreach_reverse(ref tool; _tools) {
+            foreach_reverse(ref tool; _staticTools) {
                 if (tool.handleButtonPress(viewport, event)) {
-                    _grabbedTool = &tool;
+                    _grabbedTool = tool;
                     _grabbedButton = event.buttonName;
                     break;
                 }
@@ -86,12 +86,26 @@
     bool handleKeyPress(scope IViewport viewport, in KeyEvent event) {
         // writefln("%s", event);
 
+        // FIXME not sure how these should work
+        foreach_reverse(ref tool; _staticTools) {
+            if (tool.handleKeyPress(viewport, event)) {
+                break;
+            }
+        }
+
         return true;
     }
 
     bool handleKeyRelease(scope IViewport viewport, in KeyEvent event) {
         // writefln("%s", event);
 
+        // FIXME not sure how these should work
+        foreach_reverse(ref tool; _staticTools) {
+            if (tool.handleKeyRelease(viewport, event)) {
+                break;
+            }
+        }
+
         return true;
     }
 
@@ -99,7 +113,7 @@
         //writefln("%s", event);
 
         if (_grabbedTool is null) {
-            foreach_reverse(ref tool; _tools) {
+            foreach_reverse(ref tool; _staticTools) {
                 if (tool.handleMotion(viewport, event)) {
                     break;
                 }
@@ -116,7 +130,7 @@
         // writefln("%s", event);
 
         if (_grabbedTool is null) {
-            foreach_reverse(ref tool; _tools) {
+            foreach_reverse(ref tool; _staticTools) {
                 if (tool.handleScroll(viewport, event)) {
                     break;
                 }
@@ -130,10 +144,10 @@
     }
 
     private {
-        Tool[] _tools;
+        Tool[] _staticTools;
         IToolStackObserver _observer;
 
-        Tool * _grabbedTool;
+        Tool _grabbedTool;
         ButtonName _grabbedButton;
     }
 }