From 09fa1f3a986b0ddf15e1c3669b3545fedf613e8e Mon Sep 17 00:00:00 2001 From: Marius Nita Date: Wed, 13 Nov 2002 10:19:28 +0000 Subject: [PATCH] initial commit of focus widget --- otk/focuswidget.cc | 66 ++++++++++++++++++++++++++++++++++++++++++++++ otk/focuswidget.hh | 39 +++++++++++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 otk/focuswidget.cc create mode 100644 otk/focuswidget.hh diff --git a/otk/focuswidget.cc b/otk/focuswidget.cc new file mode 100644 index 00000000..22dd8757 --- /dev/null +++ b/otk/focuswidget.cc @@ -0,0 +1,66 @@ +#include "focuswidget.hh" + +namespace otk { + +OtkFocusWidget::OtkFocusWidget(OtkWidget *parent, Direction direction) + : OtkWidget(parent, direction), _unfocus_texture(0), _focused(true) +{ + _focus_texture = parent->getTexture(); +} + +OtkFocusWidget::OtkFocusWidget(Style *style, Direction direction, + Cursor cursor, int bevel_width) + : OtkWidget(style, direction, cursor, bevel_width), + _unfocus_texture(0), _focused(true) +{ +} + +void OtkFocusWidget::focus(void) +{ + if (_focused) + return; + + assert(_focus_texture); + OtkWidget::setTexture(_focus_texture); + OtkWidget::update(); + + OtkWidget::OtkWidgetList children = OtkWidget::getChildren(); + + OtkWidget::OtkWidgetList::iterator it = children.begin(), + end = children.end(); + + OtkFocusWidget *tmp = 0; + for (; it != end; ++it) { + tmp = dynamic_cast(*it); + if (tmp) tmp->focus(); + } +} + +void OtkFocusWidget::unfocus(void) +{ + if (! _focused) + return; + + assert(_unfocus_texture); + OtkWidget::setTexture(_unfocus_texture); + OtkWidget::update(); + + OtkWidget::OtkWidgetList children = OtkWidget::getChildren(); + + OtkWidget::OtkWidgetList::iterator it = children.begin(), + end = children.end(); + + OtkFocusWidget *tmp = 0; + for (; it != end; ++it) { + tmp = dynamic_cast(*it); + if (tmp) tmp->unfocus(); + } +} + +void OtkFocusWidget::setTexture(BTexture *texture) +{ + OtkWidget::setTexture(texture); + _focus_texture = texture; +} + +} diff --git a/otk/focuswidget.hh b/otk/focuswidget.hh new file mode 100644 index 00000000..8397734d --- /dev/null +++ b/otk/focuswidget.hh @@ -0,0 +1,39 @@ +#ifndef __focuswidget_hh +#define __focuswidget_hh + +#include "widget.hh" + +namespace otk { + +class OtkFocusWidget : public OtkWidget { + +public: + + OtkFocusWidget(OtkWidget *parent, Direction = Horizontal); + OtkFocusWidget(Style *style, Direction direction = Horizontal, + Cursor cursor = 0, int bevel_width = 1); + + virtual void focus(void); + virtual void unfocus(void); + + void setTexture(BTexture *texture); + + inline void setUnfocusTexture(BTexture *texture) + { _unfocus_texture = texture; } + inline BTexture *getUnfocusTexture(void) const + { return _unfocus_texture; } + + inline bool isFocused(void) const { return _focused; } + inline bool isUnfocused(void) const { return !_focused; } + +private: + + BTexture *_unfocus_texture; + BTexture *_focus_texture; + + bool _focused; +}; + +} + +#endif // __focuswidget_hh -- 2.44.0