comparison 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
comparison
equal deleted inserted replaced
62:6c3993f4c3eb 63:20d6327c4a75
17 interface IToolStackObserver { 17 interface IToolStackObserver {
18 void toolChanged(Tool tool); 18 void toolChanged(Tool tool);
19 } 19 }
20 20
21 final class ToolLayer : Layer, IEventHandler, IToolStack { 21 final class ToolLayer : Layer, IEventHandler, IToolStack {
22 this(in Tool[] tools, IToolStackObserver observer, in string name = "Tool") { 22 this(in Tool[] staticTools, IToolStackObserver observer, in string name = "Tool") {
23 super(name); 23 super(name);
24 _tools = tools.dup; 24 _staticTools = staticTools.dup;
25 _observer = observer; 25 _observer = observer;
26 } 26 }
27 27
28 // IToolStack overrides: 28 // IToolStack overrides:
29 29
30 void use(Tool tool) { 30 void use(Tool tool) {
31 assert(_grabbedTool is null); 31 assert(_grabbedTool is null);
32 message("using new tool: %s", tool.name); 32 message("using new tool: %s", tool.name);
33 _tools ~= tool; 33 _staticTools ~= tool;
34 _observer.toolChanged(tool); 34 _observer.toolChanged(tool);
35 } 35 }
36 36
37 // Layer overrides: 37 // Layer overrides:
38 38
52 52
53 bool handleButtonPress(scope IViewport viewport, in ButtonEvent event) { 53 bool handleButtonPress(scope IViewport viewport, in ButtonEvent event) {
54 // writefln("%s", event); 54 // writefln("%s", event);
55 55
56 if (_grabbedTool is null) { 56 if (_grabbedTool is null) {
57 foreach_reverse(ref tool; _tools) { 57 foreach_reverse(ref tool; _staticTools) {
58 if (tool.handleButtonPress(viewport, event)) { 58 if (tool.handleButtonPress(viewport, event)) {
59 _grabbedTool = &tool; 59 _grabbedTool = tool;
60 _grabbedButton = event.buttonName; 60 _grabbedButton = event.buttonName;
61 break; 61 break;
62 } 62 }
63 } 63 }
64 } 64 }
84 } 84 }
85 85
86 bool handleKeyPress(scope IViewport viewport, in KeyEvent event) { 86 bool handleKeyPress(scope IViewport viewport, in KeyEvent event) {
87 // writefln("%s", event); 87 // writefln("%s", event);
88 88
89 // FIXME not sure how these should work
90 foreach_reverse(ref tool; _staticTools) {
91 if (tool.handleKeyPress(viewport, event)) {
92 break;
93 }
94 }
95
89 return true; 96 return true;
90 } 97 }
91 98
92 bool handleKeyRelease(scope IViewport viewport, in KeyEvent event) { 99 bool handleKeyRelease(scope IViewport viewport, in KeyEvent event) {
93 // writefln("%s", event); 100 // writefln("%s", event);
101
102 // FIXME not sure how these should work
103 foreach_reverse(ref tool; _staticTools) {
104 if (tool.handleKeyRelease(viewport, event)) {
105 break;
106 }
107 }
94 108
95 return true; 109 return true;
96 } 110 }
97 111
98 bool handleMotion(scope IViewport viewport, in MotionEvent event) { 112 bool handleMotion(scope IViewport viewport, in MotionEvent event) {
99 //writefln("%s", event); 113 //writefln("%s", event);
100 114
101 if (_grabbedTool is null) { 115 if (_grabbedTool is null) {
102 foreach_reverse(ref tool; _tools) { 116 foreach_reverse(ref tool; _staticTools) {
103 if (tool.handleMotion(viewport, event)) { 117 if (tool.handleMotion(viewport, event)) {
104 break; 118 break;
105 } 119 }
106 } 120 }
107 } 121 }
114 128
115 bool handleScroll(scope IViewport viewport, in ScrollEvent event) { 129 bool handleScroll(scope IViewport viewport, in ScrollEvent event) {
116 // writefln("%s", event); 130 // writefln("%s", event);
117 131
118 if (_grabbedTool is null) { 132 if (_grabbedTool is null) {
119 foreach_reverse(ref tool; _tools) { 133 foreach_reverse(ref tool; _staticTools) {
120 if (tool.handleScroll(viewport, event)) { 134 if (tool.handleScroll(viewport, event)) {
121 break; 135 break;
122 } 136 }
123 } 137 }
124 } 138 }
128 142
129 return true; 143 return true;
130 } 144 }
131 145
132 private { 146 private {
133 Tool[] _tools; 147 Tool[] _staticTools;
134 IToolStackObserver _observer; 148 IToolStackObserver _observer;
135 149
136 Tool * _grabbedTool; 150 Tool _grabbedTool;
137 ButtonName _grabbedButton; 151 ButtonName _grabbedButton;
138 } 152 }
139 } 153 }