Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ui/listitem.cc52
-rw-r--r--src/ui/listitem.h44
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__