ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/cf.schmorp.de/dclient/src/backend/ndk/menu.cpp
Revision: 1.4
Committed: Sun Oct 24 20:31:51 2010 UTC (16 years ago) by sf-pippijn
Branch: MAIN
CVS Tags: HEAD
Changes since 1.3: +2 -2 lines
Log Message:
use EV and plain sockets instead of asio

File Contents

# Content
1 #include <ndk/menu.hh>
2 #include <ndk/application.hh>
3
4 using ndk::menu;
5
6 menu::item::item (char const *name, char const *description)
7 : item_ (new_item ("name", "description"))
8 {
9 }
10
11 menu::item::item ()
12 : item_ (nullptr)
13 {
14 }
15
16 menu::item::item (item &&other)
17 : item_ (other.item_)
18 {
19 other.item_ = nullptr;
20 }
21
22 menu::item &
23 menu::item::operator = (item &&rhs)
24 {
25 item_ = rhs.item_;
26 rhs.item_ = nullptr;
27 return *this;
28 }
29
30 menu::item::~item ()
31 {
32 if (item_)
33 free_item (item_);
34 }
35
36
37 menu::menu (panel *parent)
38 : panel (parent)
39 , menu_ (nullptr, free_menu)
40 {
41 #if 0
42 events ()->on_keyboard (slot (&menu::at_keyboard, this));
43
44 add_item ("name1", "description1");
45 add_item ("name2", "description2");
46 add_item ("name3", "description3");
47 items_.emplace_back ();
48
49 menu_.reset (new_menu ((ITEM **)&items_[0]));
50 int rows, columns;
51 scale_menu (menu_.get (), &rows, &columns);
52 resize (columns, rows);
53 move (130, 10);
54 set_menu_sub (menu_.get (), win ());
55
56 visualize ();
57 #endif
58 }
59
60 menu::~menu ()
61 {
62 }
63
64 void
65 menu::add_item (char const *name, char const *description)
66 {
67 menu_ = nullptr;
68 items_.emplace_back (name, description);
69 }
70
71 void
72 menu::draw ()
73 {
74 panel::draw ();
75
76 if (!menu_)
77 return;
78
79 unpost_menu (menu_.get ());
80 post_menu (menu_.get ());
81 }
82
83 ndk::event::result
84 menu::at_keyboard (keyboard const &ev)
85 {
86 event::result res;
87
88 switch (ev.code ())
89 {
90 case key::up:
91 menu_driver (menu_.get (), REQ_UP_ITEM);
92 res = event::accepted;
93 break;
94
95 case key::down:
96 menu_driver (menu_.get (), REQ_DOWN_ITEM);
97 res = event::accepted;
98 break;
99
100 default:
101 res = event::ignored;
102 break;
103 }
104
105 doupdate ();
106 //visualize ();
107 //if (res == event::accepted)
108 //refresh ();
109
110 return res;
111 }