diff options
-rw-r--r-- | src/ui/listitem.cc | 52 | ||||
-rw-r--r-- | src/ui/listitem.h | 44 |
2 files changed, 96 insertions, 0 deletions
diff --git a/src/ui/listitem.cc b/src/ui/listitem.cc new file mode 100644 index 0000000..3ff108f --- /dev/null +++ b/src/ui/listitem.cc @@ -0,0 +1,52 @@ +/* + ui/listitem.cc + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 +*/ + +#include "audio/audio.h" +#include "core/application.h" +#include "ui/listitem.h" +#include "ui/paint.h" + +namespace ui { + +ListItem::ListItem(ListView *parent, const char * text) : Label(parent, text) { + set_label("listitem"); + + listitem_info = 0; +} + +ListItem::~ListItem() { +} + +void ListItem::draw_border() +{ + // FIXME glow if selected, not on_mouseover + + if (has_mouse_focus()) { + math::Color color(palette()->foreground()); + float t = core::application()->time(); + t = t - floorf(t); + if (t > 0.5) + t = 1 - t; + color.a = 0.5f + t; + paint::color(color); + paint::border(global_location(), size()); + } +} + +bool ListItem::on_keypress(const int key, const unsigned int modifier) +{ + if (key == 512 + SDL_BUTTON_LEFT) { + audio::play("ui/select"); + + emit(EventListItemClicked); + + return true; + } + + return false; +} + +} // namespace ui
\ No newline at end of file diff --git a/src/ui/listitem.h b/src/ui/listitem.h new file mode 100644 index 0000000..a107ed5 --- /dev/null +++ b/src/ui/listitem.h @@ -0,0 +1,44 @@ +/* + ui/listitem.h + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 +*/ + +#ifndef __INCLUDED_UI_LISTITEM_H__ +#define __INCLUDED_UI_LISTITEM_H__ + +#include <string> + +#include "core/info.h" +#include "ui/label.h" +#include "ui/listview.h" + +namespace ui +{ +class ListItem : public Label { +public: + ListItem(ListView *parent, const char * text); + ~ListItem(); + + inline const core::Info *info() const { + return listitem_info; + } + + inline void set_info(const core::Info *info) { + listitem_info = info; + } + +protected: + /// keypress event handler + virtual bool on_keypress(const int key, const unsigned int modifier); + + /// draw the button border + virtual void draw_border(); + +private: + const core::Info *listitem_info; +}; + +} // namespace ui + +#endif // __INCLUDED_UI_LISTITEM_H__ |