ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/cf.schmorp.de/dclient/src/backend/ndk/menu.cpp
Revision: 1.1
Committed: Sun Oct 17 08:15:09 2010 UTC (16 years ago) by sf-pippijn
Branch: MAIN
Log Message:
initial import

File Contents

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