stacked cycling menu works now. add a highlighted flag to otk widgets

This commit is contained in:
Dana Jansens 2003-02-08 08:13:02 +00:00
parent e72d9d90f9
commit f51f1c775f
5 changed files with 29 additions and 20 deletions

View file

@ -9,8 +9,10 @@
namespace otk {
Button::Button(Widget *parent)
: Label(parent), _default(false), _pressed(false)
: Label(parent),
_pressed(false)
{
setHighlighted(false);
setHorizontalJustify(RenderStyle::CenterJustify);
setVerticalJustify(RenderStyle::CenterJustify);
styleChanged(*RenderStyle::style(screen()));
@ -53,16 +55,9 @@ void Button::buttonReleaseHandler(const XButtonEvent &e)
release(e.button);
}
void Button::setDefault(bool d)
{
_default = d;
styleChanged(*RenderStyle::style(screen()));
refresh();
}
void Button::styleChanged(const RenderStyle &style)
{
if (_default) {
if (isHighlighted()) {
if (_pressed)
_texture = style.buttonPressFocusBackground();
else

View file

@ -12,9 +12,6 @@ public:
Button(Widget *parent);
virtual ~Button();
virtual inline bool isDefault() const { return _default; }
virtual void setDefault(bool d);
virtual inline bool isPressed() const { return _pressed; }
virtual void press(unsigned int mouse_button);
@ -26,7 +23,6 @@ public:
virtual void styleChanged(const RenderStyle &style);
private:
bool _default;
bool _pressed;
unsigned int _mouse_button;
};

View file

@ -16,7 +16,8 @@ Label::Label(Widget *parent)
: Widget(parent),
_text(""),
_justify_horz(RenderStyle::LeftTopJustify),
_justify_vert(RenderStyle::LeftTopJustify)
_justify_vert(RenderStyle::LeftTopJustify),
_highlight(true)
{
styleChanged(*RenderStyle::style(screen()));
}
@ -37,6 +38,13 @@ void Label::setVerticalJustify(RenderStyle::Justify j)
refresh();
}
void Label::setHighlighted(bool h)
{
_highlight = h;
styleChanged(*RenderStyle::style(screen()));
refresh();
}
void Label::setText(const ustring &text)
{
bool utf = text.utf8();
@ -77,8 +85,13 @@ void Label::calcDefaultSizes()
void Label::styleChanged(const RenderStyle &style)
{
_texture = style.labelFocusBackground();
_forecolor = style.textFocusColor();
if (_highlight) {
_texture = style.labelFocusBackground();
_forecolor = style.textFocusColor();
} else {
_texture = style.labelUnfocusBackground();
_forecolor = style.textUnfocusColor();
}
_font = style.labelFont();
Widget::styleChanged(style);
calcDefaultSizes();

View file

@ -20,6 +20,9 @@ public:
inline const ustring& getText(void) const { return _text; }
void setText(const ustring &text);
virtual inline bool isHighlighted() const { return _highlight; }
virtual void setHighlighted(bool h);
RenderStyle::Justify horizontalJustify() const { return _justify_horz; }
virtual void setHorizontalJustify(RenderStyle::Justify j);
RenderStyle::Justify verticalJustify() const { return _justify_vert; }
@ -53,6 +56,8 @@ private:
RenderStyle::Justify _justify_vert;
//! The drawing offset for the text
int _drawx;
//! If the widget is highlighted or not
bool _highlight;
};
}

View file

@ -112,10 +112,10 @@ class _cycledata:
w = otk.Label(self.widget)
if current and c.window() == current.window():
self.menupos = i
#w.focus() XXX
w.setHighlighted(1)
pass
else:
#w.unfocus() XXX
w.setHighlighted(0)
pass
self.menuwidgets.append(w)
@ -192,7 +192,7 @@ class _cycledata:
if not len(self.clients): return # don't both doing anything
#self.menuwidgets[self.menupos].unfocus() XXX
self.menuwidgets[self.menupos].setHighlighted(0)
if forward:
self.menupos += 1
else:
@ -200,7 +200,7 @@ class _cycledata:
# wrap around
if self.menupos < 0: self.menupos = len(self.clients) - 1
elif self.menupos >= len(self.clients): self.menupos = 0
#self.menuwidgets[self.menupos].focus() XXX
self.menuwidgets[self.menupos].setHighlighted(1)
if ACTIVATE_WHILE_CYCLING:
self.activatetarget(0) # activate, but dont deiconify/unshade/raise