Mercurial > projects > mde
comparison mde/gui/WidgetManager.d @ 168:da8d3091fdaf
More work on the context menu: now roughly usable like an ordinary context menu.
author | Diggory Hardy <diggory.hardy@gmail.com> |
---|---|
date | Mon, 29 Jun 2009 18:45:58 +0200 |
parents | 620d4ea30228 |
children | bc1cf73dc835 |
comparison
equal
deleted
inserted
replaced
167:620d4ea30228 | 168:da8d3091fdaf |
---|---|
29 | 29 |
30 import imde = mde.imde; | 30 import imde = mde.imde; |
31 import mde.content.Content; | 31 import mde.content.Content; |
32 import mde.content.ServiceContent; | 32 import mde.content.ServiceContent; |
33 debug import mde.content.miscContent; // Debug menu | 33 debug import mde.content.miscContent; // Debug menu |
34 debug import mde.content.Debug; | |
34 | 35 |
35 // Widgets to create: | 36 // Widgets to create: |
36 import mde.gui.widget.layout; | 37 import mde.gui.widget.layout; |
37 import mde.gui.widget.miscWidgets; | 38 import mde.gui.widget.miscWidgets; |
38 import mde.gui.widget.TextWidget; | 39 import mde.gui.widget.TextWidget; |
155 override void menuDone () {} | 156 override void menuDone () {} |
156 | 157 |
157 override IChildWidget getPopupWidget (wdabs cx, wdabs cy, bool closePopup) { | 158 override IChildWidget getPopupWidget (wdabs cx, wdabs cy, bool closePopup) { |
158 if (popupContext) { | 159 if (popupContext) { |
159 if (popupContext.onSelf (cx, cy)) | 160 if (popupContext.onSelf (cx, cy)) |
160 return popupContext; | 161 return popupContext.getWidget (cx, cy); |
161 if (closePopup) { | 162 if (closePopup) { |
162 if (childIPPW is null) | 163 if (childIPPW is null) |
163 menuActive = MenuPosition.INACTIVE; | 164 menuActive = MenuPosition.INACTIVE; |
164 popupContext = null; | 165 popupContext = null; |
165 requestRedraw; | 166 requestRedraw; |
332 // NOTE: Creates new widgets every time; not optimal | 333 // NOTE: Creates new widgets every time; not optimal |
333 serviceContent.setContent (contextContent); | 334 serviceContent.setContent (contextContent); |
334 popupContext = makeWidget (this, "context", contextContent); | 335 popupContext = makeWidget (this, "context", contextContent); |
335 popupContext.setup (0, 3); | 336 popupContext.setup (0, 3); |
336 positionPopup (underMouse, popupContext); | 337 positionPopup (underMouse, popupContext); |
338 menuActive = MenuPosition.ACTIVE; | |
337 requestRedraw; | 339 requestRedraw; |
338 } else { // post other button presses to clickEvent | 340 } else { // post other button presses to clickEvent |
339 int ret = underMouse.clickEvent (cast(wdabs)cx,cast(wdabs)cy,b,state); | 341 int ret = underMouse.clickEvent (cast(wdabs)cx,cast(wdabs)cy,b,state); |
340 if (ret & 1) { // keyboard input requested | 342 if (ret & 1) { // keyboard input requested |
341 keyFocus = underMouse; | 343 keyFocus = underMouse; |
382 if (child is null) return; | 384 if (child is null) return; |
383 child.setup (++setupN, 2); | 385 child.setup (++setupN, 2); |
384 child.setWidth (w, -1); | 386 child.setWidth (w, -1); |
385 child.setHeight (h, -1); | 387 child.setHeight (h, -1); |
386 child.setPosition (0,0); | 388 child.setPosition (0,0); |
389 popupContext.setup (setupN, 2); | |
390 //NOTE: does popupContext need to be re-scaled? | |
387 requestRedraw; | 391 requestRedraw; |
388 } | 392 } |
389 } | 393 } |
390 // for internal use | 394 // for internal use |
391 void updateUnderMouse (wdabs cx, wdabs cy, bool closePopup) { | 395 void updateUnderMouse (wdabs cx, wdabs cy, bool closePopup) { |
397 } | 401 } |
398 if (underMouse !is oUM) { | 402 if (underMouse !is oUM) { |
399 debug assert (oUM && underMouse, "no widget under mouse: error"); | 403 debug assert (oUM && underMouse, "no widget under mouse: error"); |
400 oUM.underMouse (false); | 404 oUM.underMouse (false); |
401 underMouse.underMouse (true); | 405 underMouse.underMouse (true); |
406 debug if (Debug.logUnderMouse()) | |
407 logger.trace ("Widget under mouse: {}", underMouse); | |
402 } | 408 } |
403 } | 409 } |
404 | 410 |
405 /// This should be overloaded to set a callback receiving keyboard input. | 411 /// This should be overloaded to set a callback receiving keyboard input. |
406 abstract void setLetterCallback(void delegate(ushort, char[])); | 412 abstract void setLetterCallback(void delegate(ushort, char[])); |