STR 3460: Fluid menu item types

Added pulldown menus to create radio style and checkbox style
menu items without going through the Class menu.
This commit is contained in:
Matthias Melcher 2019-01-14 01:14:40 +01:00
parent b71601fe7c
commit 6a61772c80
3 changed files with 34 additions and 1 deletions

View File

@ -49,6 +49,7 @@ extern const char* i18n_file;
extern const char* i18n_set;
static char submenuflag;
static uchar menuitemtype = 0;
void Fl_Input_Choice_Type::build_menu() {
Fl_Input_Choice* w = (Fl_Input_Choice*)o;
@ -117,12 +118,27 @@ Fl_Type *Fl_Menu_Item_Type::make() {
Fl_Menu_Item_Type* t = submenuflag ? new Fl_Submenu_Type() : new Fl_Menu_Item_Type();
t->o = new Fl_Button(0,0,100,20);
t->o->type(menuitemtype);
t->factory = this;
t->add(p);
if (!reading_file) t->label(submenuflag ? "submenu" : "item");
return t;
}
Fl_Type *Fl_Checkbox_Menu_Item_Type::make() {
menuitemtype = FL_MENU_TOGGLE;
Fl_Type* t = Fl_Menu_Item_Type::make();
menuitemtype = 0;
return t;
}
Fl_Type *Fl_Radio_Menu_Item_Type::make() {
menuitemtype = FL_MENU_RADIO;
Fl_Type* t = Fl_Menu_Item_Type::make();
menuitemtype = 0;
return t;
}
Fl_Type *Fl_Submenu_Type::make() {
submenuflag = 1;
Fl_Type* t = Fl_Menu_Item_Type::make();
@ -131,6 +147,8 @@ Fl_Type *Fl_Submenu_Type::make() {
}
Fl_Menu_Item_Type Fl_Menu_Item_type;
Fl_Checkbox_Menu_Item_Type Fl_Checkbox_Menu_Item_type;
Fl_Radio_Menu_Item_Type Fl_Radio_Menu_Item_type;
Fl_Submenu_Type Fl_Submenu_type;
////////////////////////////////////////////////////////////////
@ -424,7 +442,7 @@ void Fl_Menu_Type::build_menu() {
}
m->shortcut(((Fl_Button*)(i->o))->shortcut());
m->callback(0,(void*)i);
m->flags = i->flags();
m->flags = i->flags() | i->o->type();
m->labelfont(i->o->labelfont());
m->labelsize(i->o->labelsize());
m->labelcolor(i->o->labelcolor());

View File

@ -690,6 +690,16 @@ public:
int pixmapID() { return 16; }
};
class Fl_Radio_Menu_Item_Type : public Fl_Menu_Item_Type {
public:
Fl_Type* make();
};
class Fl_Checkbox_Menu_Item_Type : public Fl_Menu_Item_Type {
public:
Fl_Type* make();
};
class Fl_Submenu_Type : public Fl_Menu_Item_Type {
public:
Fl_Menu_Item* subtypes() {return 0;}
@ -707,6 +717,7 @@ public:
};
#include <FL/Fl_Menu_.H>
class Fl_Menu_Type : public Fl_Widget_Type {
int textstuff(int w, Fl_Font& f, int& s, Fl_Color& c) {

View File

@ -926,6 +926,8 @@ extern class Fl_Choice_Type Fl_Choice_type;
extern class Fl_Menu_Bar_Type Fl_Menu_Bar_type;
extern class Fl_Menu_Button_Type Fl_Menu_Button_type;
extern class Fl_Menu_Item_Type Fl_Menu_Item_type;
extern class Fl_Checkbox_Menu_Item_Type Fl_Checkbox_Menu_Item_type;
extern class Fl_Radio_Menu_Item_Type Fl_Radio_Menu_Item_type;
extern class Fl_Submenu_Type Fl_Submenu_type;
extern class Fl_Wizard_Type Fl_Wizard_type;
@ -1029,6 +1031,8 @@ Fl_Menu_Item New_Menu[] = {
{0,0,cb,(void*)&Fl_Input_Choice_type},
{0,0,cb, (void*)&Fl_Submenu_type},
{0,0,cb, (void*)&Fl_Menu_Item_type},
{"Checkbox Menu Item",0,cb, (void*)&Fl_Checkbox_Menu_Item_type},
{"Radio Menu Item",0,cb, (void*)&Fl_Radio_Menu_Item_type},
{0},
{"Browsers",0,0,0,FL_SUBMENU},
{0,0,cb,(void*)&Fl_Browser_type},