fl_widget_type.cxx
来自「SRI international 发布的OAA框架软件」· CXX 代码 · 共 1,977 行 · 第 1/5 页
CXX
1,977 行
Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
w->resize((int)i->value(), w->y(), w->w(), w->h());
}
}
}
void y_cb(Fl_Value_Input *i, void *v) {
if (v == LOAD) {
y_input = i;
if (current_widget->is_widget()) {
i->value(((Fl_Widget_Type *)current_widget)->o->y());
y_input->activate();
} else y_input->deactivate();
} else {
for (Fl_Type *o = Fl_Type::first; o; o = o->next)
if (o->selected && o->is_widget()) {
Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
w->resize(w->x(), (int)i->value(), w->w(), w->h());
}
}
}
void w_cb(Fl_Value_Input *i, void *v) {
if (v == LOAD) {
w_input = i;
if (current_widget->is_widget()) {
i->value(((Fl_Widget_Type *)current_widget)->o->w());
w_input->activate();
} else w_input->deactivate();
} else {
for (Fl_Type *o = Fl_Type::first; o; o = o->next)
if (o->selected && o->is_widget()) {
Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
w->resize(w->x(), w->y(), (int)i->value(), w->h());
}
}
}
void h_cb(Fl_Value_Input *i, void *v) {
if (v == LOAD) {
h_input = i;
if (current_widget->is_widget()) {
i->value(((Fl_Widget_Type *)current_widget)->o->h());
h_input->activate();
} else h_input->deactivate();
} else {
for (Fl_Type *o = Fl_Type::first; o; o = o->next)
if (o->selected && o->is_widget()) {
Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
w->resize(w->x(), w->y(), w->w(), (int)i->value());
}
}
}
////////////////////////////////////////////////////////////////
// turn number to string or string to number for saving to file:
// does not work for hierarchial menus!
const char *item_name(Fl_Menu_Item* m, int i) {
if (m) {
while (m->label()) {
if (m->argument() == i) return m->label();
m++;
}
}
static char buffer[20];
sprintf(buffer, "%d", i);
return buffer;
}
int item_number(Fl_Menu_Item* m, const char* i) {
if (m && i) {
if (i[0]=='F' && i[1]=='L' && i[2]=='_') i += 3;
while (m->label()) {
if (!strcmp(m->label(), i)) return int(m->argument());
m++;
}
}
return atoi(i);
}
#define ZERO_ENTRY 1000
Fl_Menu_Item boxmenu[] = {
{"NO_BOX",0,0,(void *)ZERO_ENTRY},
{"boxes",0,0,0,FL_SUBMENU},
{"UP_BOX",0,0,(void *)FL_UP_BOX},
{"DOWN_BOX",0,0,(void *)FL_DOWN_BOX},
{"FLAT_BOX",0,0,(void *)FL_FLAT_BOX},
{"BORDER_BOX",0,0,(void *)FL_BORDER_BOX},
{"THIN_UP_BOX",0,0,(void *)FL_THIN_UP_BOX},
{"THIN_DOWN_BOX",0,0,(void *)FL_THIN_DOWN_BOX},
{"ENGRAVED_BOX",0,0,(void *)FL_ENGRAVED_BOX},
{"EMBOSSED_BOX",0,0,(void *)FL_EMBOSSED_BOX},
{"ROUND_UP_BOX",0,0,(void *)FL_ROUND_UP_BOX},
{"ROUND_DOWN_BOX",0,0,(void *)FL_ROUND_DOWN_BOX},
{"DIAMOND_UP_BOX",0,0,(void *)FL_DIAMOND_UP_BOX},
{"DIAMOND_DOWN_BOX",0,0,(void *)FL_DIAMOND_DOWN_BOX},
{"SHADOW_BOX",0,0,(void *)FL_SHADOW_BOX},
{"ROUNDED_BOX",0,0,(void *)FL_ROUNDED_BOX},
{"RSHADOW_BOX",0,0,(void *)FL_RSHADOW_BOX},
{"RFLAT_BOX",0,0,(void *)FL_RFLAT_BOX},
{"OVAL_BOX",0,0,(void *)FL_OVAL_BOX},
{"OSHADOW_BOX",0,0,(void *)FL_OSHADOW_BOX},
{"OFLAT_BOX",0,0,(void *)FL_OFLAT_BOX},
{"PLASTIC_UP_BOX",0,0,(void *)FL_PLASTIC_UP_BOX},
{"PLASTIC_DOWN_BOX",0,0,(void *)FL_PLASTIC_DOWN_BOX},
{0},
{"frames",0,0,0,FL_SUBMENU},
{"UP_FRAME",0,0,(void *)FL_UP_FRAME},
{"DOWN_FRAME",0,0,(void *)FL_DOWN_FRAME},
{"THIN_UP_FRAME",0,0,(void *)FL_THIN_UP_FRAME},
{"THIN_DOWN_FRAME",0,0,(void *)FL_THIN_DOWN_FRAME},
{"ENGRAVED_FRAME",0,0,(void *)FL_ENGRAVED_FRAME},
{"EMBOSSED_FRAME",0,0,(void *)FL_EMBOSSED_FRAME},
{"BORDER_FRAME",0,0,(void *)FL_BORDER_FRAME},
{"SHADOW_FRAME",0,0,(void *)FL_SHADOW_FRAME},
{"ROUNDED_FRAME",0,0,(void *)FL_ROUNDED_FRAME},
{"OVAL_FRAME",0,0,(void *)FL_OVAL_FRAME},
{"PLASTIC_UP_FRAME",0,0,(void *)FL_PLASTIC_UP_FRAME},
{"PLASTIC_DOWN_FRAME",0,0,(void *)FL_PLASTIC_DOWN_FRAME},
{0},
{0}};
const char *boxname(int i) {
if (!i) i = ZERO_ENTRY;
for (int j = 0; j < int(sizeof(boxmenu)/sizeof(*boxmenu)); j++)
if (boxmenu[j].argument() == i) return boxmenu[j].label();
return 0;
}
int boxnumber(const char *i) {
if (i[0]=='F' && i[1]=='L' && i[2]=='_') i += 3;
for (int j = 0; j < int(sizeof(boxmenu)/sizeof(*boxmenu)); j++)
if (boxmenu[j].label() && !strcmp(boxmenu[j].label(), i)) {
return int(boxmenu[j].argument());
}
return 0;
}
void box_cb(Fl_Choice* i, void *v) {
if (v == LOAD) {
if (current_widget->is_menu_item()) {i->deactivate(); return;} else i->activate();
int n = current_widget->o->box(); if (!n) n = ZERO_ENTRY;
for (int j = 0; j < int(sizeof(boxmenu)/sizeof(*boxmenu)); j++)
if (boxmenu[j].argument() == n) {i->value(j); break;}
} else {
int m = i->value();
int n = int(boxmenu[m].argument());
if (!n) return; // should not happen
if (n == ZERO_ENTRY) n = 0;
for (Fl_Type *o = Fl_Type::first; o; o = o->next)
if (o->selected && o->is_widget()) {
Fl_Widget_Type* q = (Fl_Widget_Type*)o;
q->o->box((Fl_Boxtype)n);
q->redraw();
}
}
}
void down_box_cb(Fl_Choice* i, void *v) {
if (v == LOAD) {
int n;
if (current_widget->is_button() && !current_widget->is_menu_item())
n = ((Fl_Button*)(current_widget->o))->down_box();
else if (current_widget->is_menu_button())
n = ((Fl_Menu_*)(current_widget->o))->down_box();
else {
i->deactivate(); return;
}
i->activate();
if (!n) n = ZERO_ENTRY;
for (int j = 0; j < int(sizeof(boxmenu)/sizeof(*boxmenu)); j++)
if (boxmenu[j].argument() == n) {i->value(j); break;}
} else {
int m = i->value();
int n = int(boxmenu[m].argument());
if (!n) return; // should not happen
if (n == ZERO_ENTRY) n = 0;
for (Fl_Type *o = Fl_Type::first; o; o = o->next) if (o->selected) {
if (o->is_button() && !o->is_menu_item()) {
Fl_Widget_Type* q = (Fl_Widget_Type*)o;
((Fl_Button*)(q->o))->down_box((Fl_Boxtype)n);
if (((Fl_Button*)(q->o))->value()) q->redraw();
} else if (o->is_menu_button()) {
Fl_Widget_Type* q = (Fl_Widget_Type*)o;
((Fl_Menu_*)(q->o))->down_box((Fl_Boxtype)n);
}
}
}
}
////////////////////////////////////////////////////////////////
Fl_Menu_Item whenmenu[] = {
{"Never",0,0,(void*)ZERO_ENTRY},
{"Release",0,0,(void*)FL_WHEN_RELEASE},
{"Changed",0,0,(void*)FL_WHEN_CHANGED},
{"Enter key",0,0,(void*)FL_WHEN_ENTER_KEY},
//{"Release or Enter",0,0,(void*)(FL_WHEN_ENTER_KEY|FL_WHEN_RELEASE)},
{0}};
static Fl_Menu_Item whensymbolmenu[] = {
{"FL_WHEN_NEVER",0,0,(void*)(FL_WHEN_NEVER)},
{"FL_WHEN_CHANGED",0,0,(void*)(FL_WHEN_CHANGED)},
{"FL_WHEN_RELEASE",0,0,(void*)(FL_WHEN_RELEASE)},
{"FL_WHEN_RELEASE_ALWAYS",0,0,(void*)(FL_WHEN_RELEASE_ALWAYS)},
{"FL_WHEN_ENTER_KEY",0,0,(void*)(FL_WHEN_ENTER_KEY)},
{"FL_WHEN_ENTER_KEY_ALWAYS",0,0,(void*)(FL_WHEN_ENTER_KEY_ALWAYS)},
{0}};
void when_cb(Fl_Choice* i, void *v) {
if (v == LOAD) {
if (current_widget->is_menu_item()) {i->deactivate(); return;} else i->activate();
int n = current_widget->o->when() & (~FL_WHEN_NOT_CHANGED);
if (!n) n = ZERO_ENTRY;
for (int j = 0; j < int(sizeof(whenmenu)/sizeof(*whenmenu)); j++)
if (whenmenu[j].argument() == n) {i->value(j); break;}
} else {
int m = i->value();
int n = int(whenmenu[m].argument());
if (!n) return; // should not happen
if (n == ZERO_ENTRY) n = 0;
for (Fl_Type *o = Fl_Type::first; o; o = o->next)
if (o->selected && o->is_widget()) {
Fl_Widget_Type* q = (Fl_Widget_Type*)o;
q->o->when(n|(q->o->when()&FL_WHEN_NOT_CHANGED));
}
}
}
void when_button_cb(Fl_Light_Button* i, void *v) {
if (v == LOAD) {
if (current_widget->is_menu_item()) {i->deactivate(); return;} else i->activate();
i->value(current_widget->o->when()&FL_WHEN_NOT_CHANGED);
} else {
int n = i->value() ? FL_WHEN_NOT_CHANGED : 0;
for (Fl_Type *o = Fl_Type::first; o; o = o->next)
if (o->selected && o->is_widget()) {
Fl_Widget_Type* q = (Fl_Widget_Type*)o;
q->o->when(n|(q->o->when()&~FL_WHEN_NOT_CHANGED));
}
}
}
uchar Fl_Widget_Type::resizable() const {
if (is_window()) return ((Fl_Window*)o)->resizable() != 0;
Fl_Group* p = (Fl_Group*)o->parent();
if (p) return p->resizable() == o;
else return 0;
}
void Fl_Widget_Type::resizable(uchar v) {
if (v) {
if (resizable()) return;
if (is_window()) ((Fl_Window*)o)->resizable(o);
else {
Fl_Group* p = (Fl_Group*)o->parent();
if (p) p->resizable(o);
}
} else {
if (!resizable()) return;
if (is_window()) {
((Fl_Window*)o)->resizable(0);
} else {
Fl_Group* p = (Fl_Group*)o->parent();
if (p) p->resizable(0);
}
}
}
void resizable_cb(Fl_Light_Button* i,void* v) {
if (v == LOAD) {
if (current_widget->is_menu_item()) {i->deactivate(); return;}
if (numselected > 1) {i->deactivate(); return;}
i->activate();
i->value(current_widget->resizable());
} else {
current_widget->resizable(i->value());
}
}
void hotspot_cb(Fl_Light_Button* i,void* v) {
if (v == LOAD) {
if (numselected > 1) {i->deactivate(); return;}
if (current_widget->is_menu_item()) i->label("divider");
else i->label("hotspot");
i->activate();
i->value(current_widget->hotspot());
} else {
current_widget->hotspot(i->value());
if (current_widget->is_menu_item()) {current_widget->redraw(); return;}
if (i->value()) {
Fl_Type *p = current_widget->parent;
if (!p || !p->is_widget()) return;
while (!p->is_window()) p = p->parent;
for (Fl_Type *o = p->next; o && o->level > p->level; o = o->next) {
if (o->is_widget() && o != current_widget)
((Fl_Widget_Type*)o)->hotspot(0);
}
}
}
}
void visible_cb(Fl_Light_Button* i, void* v) {
if (v == LOAD) {
i->value(current_widget->o->visible());
if (current_widget->is_window()) i->deactivate();
else i->activate();
} else {
int n = i->value();
for (Fl_Type *o = Fl_Type::first; o; o = o->next)
if (o->selected && o->is_widget()) {
Fl_Widget_Type* q = (Fl_Widget_Type*)o;
n ? q->o->show() : q->o->hide();
q->redraw();
}
}
}
void active_cb(Fl_Light_Button* i, void* v) {
if (v == LOAD) {
i->value(current_widget->o->active());
if (current_widget->is_window()) i->deactivate();
else i->activate();
} else {
int n = i->value();
for (Fl_Type *o = Fl_Type::first; o; o = o->next)
if (o->selected && o->is_widget()) {
Fl_Widget_Type* q = (Fl_Widget_Type*)o;
n ? q->o->activate() : q->o->deactivate();
q->redraw();
}
}
}
////////////////////////////////////////////////////////////////
Fl_Menu_Item fontmenu[] = {
{"Helvetica"},
{"Helvetica bold"},
{"Helvetica italic"},
{"Helvetica bold italic"},
{"Courier"},
{"Courier bold"},
{"Courier italic"},
{"Courier bold italic"},
{"Times"},
{"Times bold"},
{"Times italic"},
{"Times bold italic"},
{"Symbol"},
{"Terminal"},
{"Terminal Bold"},
{"Zapf Dingbats"},
{0}};
void labelfont_cb(Fl_Choice* i, void *v) {
if (v == LOAD) {
int n = current_widget->o->labelfont();
if (n > 15) n = 0;
i->value(n);
} else {
int n = i->value();
for (Fl_Type *o = Fl_Type::first; o; o = o->next)
if (o->selected && o->is_widget()) {
Fl_Widget_Type* q = (Fl_Widget_Type*)o;
q->o->labelfont(n);
q->redraw();
}
}
}
void labelsize_cb(Fl_Value_Input* i, void *v) {
int n;
if (v == LOAD) {
n = current_widget->o->labelsize();
} else {
n = int(i->value());
if (n <= 0) n = FL_NORMAL_SIZE;
for (Fl_Type *o = Fl_Type::first; o; o = o->next)
if (o->selected && o->is_widget()) {
Fl_Widget_Type* q = (Fl_Widget_Type*)o;
q->o->labelsize(n);
q->redraw();
}
}
i->value(n);
}
extern const char *ui_find_image_name;
#if 0
void image_cb(Fl_Widget *a, void *) {
Fluid_Image *i = ui_find_image(current_widget->label());
if (!ui_find_image_name) return; // user hit "Cancel"
// if i is zero then user picked a non-existent file. So that the
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?