summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fluid/Fl_Menu_Type.cxx20
-rw-r--r--fluid/Fl_Type.h11
-rw-r--r--fluid/factory.cxx4
3 files changed, 34 insertions, 1 deletions
diff --git a/fluid/Fl_Menu_Type.cxx b/fluid/Fl_Menu_Type.cxx
index e4c09be01..448b898e6 100644
--- a/fluid/Fl_Menu_Type.cxx
+++ b/fluid/Fl_Menu_Type.cxx
@@ -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());
diff --git a/fluid/Fl_Type.h b/fluid/Fl_Type.h
index 45b881ee3..6794bef37 100644
--- a/fluid/Fl_Type.h
+++ b/fluid/Fl_Type.h
@@ -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) {
diff --git a/fluid/factory.cxx b/fluid/factory.cxx
index 2ce3065cc..92395ac20 100644
--- a/fluid/factory.cxx
+++ b/fluid/factory.cxx
@@ -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},