Mercurial > otakunoraifu
diff window/menuitem.h @ 0:223b71206888
Initial import
author | thib |
---|---|
date | Fri, 01 Aug 2008 16:32:45 +0000 |
parents | |
children | 5ae5533b3a9a |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/window/menuitem.h @@ -0,0 +1,64 @@ +#ifndef __MENUITEM_H__ +#define __MENUITEM_H__ + +#include"widget.h" + +#define MenuItem WidMenuItem +#define MenuRadioButton WidMenuRadioButton +#define MenuScale WidMenuScale + +// 必要なもの: +// +// ラベル:surfaceも貼れた方がよいが、まあいいや +// ラベル位置:ボタンの上、もしくは右 +// 右の場合:右中央へjustify するので、ラベル全体の幅と右マージンが必要 +// 上の場合:左下へjustify するので、左マージンと下マージンが必要 + +// 内容:x,y個数を指定、その中で中央割り当て + +// ラベル位置情報:上なら左下にjustify, 右なら右中央にjustify +// なので、下へのマージンと上へのマージン、 +// ラベル+四角ボタン(チェックボックス) +// ボタンが押されるとdeactivateされる +// +// ラジオボタン +// テキストボタンの集合体。x,y の個数を指定 +// スケール + +struct MenuItem : PicWidget { + int x_size, y_size; + int menu_width, menu_height; + int lb_width, lb_right, lb_left, lb_bottom; + PicWidget* label; + int* value_ptr; + std::vector<PicWidget*> item; + typedef std::vector<PicWidget*>::iterator iterator; + MenuItem(PicContainer* parent, const Rect& r_orig, int x_size, int y_size, int* value_ptr); + void SetLabelLeft(PicWidget* lb, const Rect& min_rect, const Rect& min_margin); + void SetLabelTop(PicWidget* lb, const Rect& left_margin, const Rect& bottom_margin); + void pack(void); + void activate(void); + void deactivate(void); + // callback + typedef void (*SetFunc)(void* pointer, MenuItem* widget); + SetFunc set_func; + void* set_pointer; + void SetValue(int new_value); + virtual void SetValueImpl(int new_value) {}; +}; + +struct RadioButton : MenuItem { + Event::Container& container; + PicContainer* parent; + int text_size; + Rect button_rect; + int buttons; + Color fore_color, pressed_color, back_color; + RadioButton(Event::Container& container, PicContainer* parent, const Rect& r_orig, int x_size, int y_size, int* value_ptr, const Rect& button_r, int text_size, const Color& fore, const Color& pressed, const Color& back); + void Add(const char* s, bool is_center = true); + void Add(const char* s, const Color& fore, const Color& pressed, const Color& back, bool is_center = true); + static void PressCallback(void* pointer, Button* from); + void SetValueImpl(int new_value); +}; + +#endif /* __MENUITEM_H__ */