Mercurial > projects > dynamin
diff dynamin/gui/button.d @ 62:60832e1eef04
Implement default buttons.
author | Jordan Miner <jminer7@gmail.com> |
---|---|
date | Sat, 08 Aug 2009 20:35:20 -0500 |
parents | ccc108b25a0a |
children | 84beb40c1665 |
line wrap: on
line diff
--- a/dynamin/gui/button.d Sat Aug 08 20:20:35 2009 -0500 +++ b/dynamin/gui/button.d Sat Aug 08 20:35:20 2009 -0500 @@ -28,6 +28,8 @@ import dynamin.all_core; import dynamin.all_gui; import dynamin.all_painting; +import dynamin.gui.control; +import dynamin.gui.events; import tango.io.Stdout; import dynamin.c.cairo; // TODO: remove @@ -49,7 +51,30 @@ */ class Button : Control { protected: + package bool _isDefault; ButtonState _state; + override void whenFocusGained(EventArgs e) { + super.whenFocusGained(e); + auto anc = findAncestor((Container c) { + return c.defaultButton !is null; + }); + if(anc) { + foreach(d; &anc.descendants) { + if(auto b = cast(Button)d) + b._isDefault = false; + } + } + _isDefault = true; + } + override void whenFocusLost(EventArgs e) { + super.whenFocusLost(e); + _isDefault = false; + auto anc = findAncestor((Container c) { + return c.defaultButton !is null; + }); + if(anc) + anc.defaultButton._isDefault = true; + } override void whenMouseDragged(MouseEventArgs e) { if(contains(e.x, e.y)) state = ButtonState.Pressed; @@ -74,14 +99,22 @@ clicked(new EventArgs); } override void whenKeyDown(KeyEventArgs e) { - if(e.key == Key.Space) + if(e.key == Key.Space) { state = ButtonState.Pressed; + e.stopped = true; + } else if(e.key == Key.Enter) { // being default is implied in keyDown + scope e2 = new EventArgs; + clicked(e2); + e.stopped = true; + } } override void whenKeyUp(KeyEventArgs e) { if(e.key == Key.Space) { if(state != ButtonState.Pressed) return; state = ButtonState.Normal; - clicked(new EventArgs); + scope e2 = new EventArgs; + clicked(e2); + e.stopped = true; } } override void whenPainting(PaintingEventArgs e) { @@ -150,4 +183,9 @@ override Size bestSize() { return Theme.current.Button_bestSize(this); } ButtonState state() { return _state; } void state(ButtonState s) { _state = s; repaint(); } + /** + * Returns true if this button should be painted as being default. + * Mainly for themes. + */ + bool isDefault() { return _isDefault; } }