gcc-4.3.0 fixes
[forms.git] / F / F_Menu.H
blobd23c1017e6b5f94ce57260227d523984dd10d35c
2  /*
3   *   Copyright (C) 2007, Harbour, All rights reserved.
4   */
6 #ifndef _F_MENU_H_
7 #define _F_MENU_H_
9 #include <F_Text_Display.H>
10 #include <F_Window.H>
11 #include <F_Menu_Item.H>
12 #include <F_Group.H>
14 namespace F {
16 class F_Menu : public F_Widget {
18   F_Group <F_Menu_Item *> items;
19   const F_Menu_Item *value_;
20   // int type; // F_HORIZONTAL/F_VERTICAL
21   F_Button_State_t state_;
23   void draw();
24   void draw_label();
25   bool handle(F_Event_t &ev);
27  public:
29   F_Menu(coord_t x, coord_t y, dim_t w, dim_t h,
30       const char *label = 0) : F_Widget(x, y, w + 1, h + 1, label) {
31         hide();
32         state_ = F_BUTTON_NORMAL;
33         can_be_focused(true);
34       }
35   ~F_Menu() { clear(); }
36   int size() { return items.size(); }
37   // delete items
38   void clear() {
39     for (int i = 0; i < size(); i++)
40       delete items[i];
41  }
42   int add(const char *l, F_Callback *cb = 0, void *d = 0) {
43     F_Menu_Item *mi = new F_Menu_Item(l, cb, d);
44     items.push_back(mi, items.size());
45     // resize widget
46     resize(w(), h() + 1);
47     return items.size() - 1;
48  }
49   void remove(int);
50   void mode(int i, int flags) { items[i]->flags = flags; }
51   const F_Menu_Item *value() const { return value_; }
52   int value(int i) { return items[i]->value(); }
53   void set(int i) { return items[i]->set(); }
54   const char *text() const { return value_ ? value_->text() : 0; }
55   const char *text(int i) { return items[i]->text(); }
56   void callback(int i, F_Callback *cb, void *d = 0) {
57     items[i]->callback(cb, d);
58   }
59    friend class F_Menu_Button;
60  };
63 #endif