📄 fl_widget_type.cxx
字号:
for (int n=0; n < NUM_EXTRA_CODE; n++) if (extra_code(n) && !isdeclare(extra_code(n))) varused = 1; } write_c(indent()); if (varused) write_c("{ %s* o = ", t); if (name()) write_c("%s = ", name()); if (is_window()) { // Handle special case of Fl_Group class type within a window - // output constructor using x, y, w, h... if (strcmp(t, "Fl_Group") == 0) write_c("new %s(0, 0, %d, %d", t, o->w(), o->h()); else write_c("new %s(%d, %d", t, o->w(), o->h()); // prevent type() code from being emitted: ((Fl_Widget_Type*)factory)->o->type(o->type()); } else { write_c("new %s(%d, %d, %d, %d", t, o->x(), o->y(), o->w(), o->h()); } if (!image && label() && *label()) { write_c(", "); write_cstring(label()); } write_c(");\n"); indentation += 2; if (is_window()) write_c("%sw = o;\n",indent()); if (varused) write_widget_code();}// this is split from write_code1() for Fl_Window_Type:void Fl_Widget_Type::write_widget_code() { Fl_Widget* tplate = ((Fl_Widget_Type*)factory)->o; if (o->type() != tplate->type()) write_c("%so->type(%d);\n", indent(), o->type()); if (o->box() != tplate->box()) write_c("%so->box(FL_%s);\n", indent(), boxname(o->box())); if (is_button()) { Fl_Button* b = (Fl_Button*)o; if (b->down_box()) write_c("%so->down_box(FL_%s);\n", indent(), boxname(b->down_box())); if (b->value()) write_c("%so->value(1);\n", indent()); if (b->shortcut()) write_c("%so->shortcut(0x%x);\n", indent(), b->shortcut()); } if (is_menu_button()) { Fl_Menu_* b = (Fl_Menu_*)o; if (b->down_box()) write_c("%so->down_box(FL_%s);\n", indent(), boxname(b->down_box())); } if (o->color() != tplate->color()) write_c("%so->color(%d);\n", indent(), o->color()); if (o->selection_color() != tplate->selection_color()) write_c("%so->selection_color(%d);\n", indent(), o->selection_color()); if (image) image->write_code(); else if (o->labeltype() != tplate->labeltype()) write_c("%so->labeltype(FL_%s);\n", indent(), item_name(labeltypemenu, o->labeltype())); if (o->labelfont() != tplate->labelfont()) write_c("%so->labelfont(%d);\n", indent(), o->labelfont()); if (o->labelsize() != tplate->labelsize()) write_c("%so->labelsize(%d);\n", indent(), o->labelsize()); if (o->labelcolor() != tplate->labelcolor()) write_c("%so->labelcolor(%d);\n", indent(), o->labelcolor()); if (is_valuator()) { Fl_Valuator* v = (Fl_Valuator*)o; Fl_Valuator* f = (Fl_Valuator*)(tplate); if (v->minimum()!=f->minimum()) write_c("%so->minimum(%g);\n", indent(), v->minimum()); if (v->maximum()!=f->maximum()) write_c("%so->maximum(%g);\n", indent(), v->maximum()); if (v->step()!=f->step()) write_c("%so->step(%g);\n", indent(), v->step()); if (v->value()) write_c("%so->value(%g);\n", indent(), v->value()); if (is_valuator()==2) { double x = ((Fl_Slider*)v)->slider_size(); double y = ((Fl_Slider*)f)->slider_size(); if (x != y) write_c("%so->slider_size(%g);\n", indent(), x); } } {Fl_Font ff; int fs; Fl_Color fc; if (textstuff(4,ff,fs,fc)) { Fl_Font f; int s; Fl_Color c; textstuff(0,f,s,c); if (f != ff) write_c("%so->textfont(%d);\n", indent(), f); if (s != fs) write_c("%so->textsize(%d);\n", indent(), s); if (c != fc) write_c("%so->textcolor(%d);\n",indent(), c); }} const char* ud = user_data(); if (class_name() && !parent->is_widget()) ud = "this"; if (callback()) { write_c("%so->callback((Fl_Callback*)%s", indent(), callback_name()); if (ud) write_c(", (void*)(%s));\n", ud); else write_c(");\n"); } else if (ud) { write_c("%so->user_data((void*)(%s));\n", indent(), ud); } if (o->align() != tplate->align()) { int i = o->align(); write_c("%so->align(%s", indent(), item_name(alignmenu, i & ~FL_ALIGN_INSIDE)); if (i & FL_ALIGN_INSIDE) write_c("|FL_ALIGN_INSIDE"); write_c(");\n"); } if (o->when() != tplate->when()) write_c("%so->when(%s);\n", indent(),item_name(whensymbolmenu, o->when())); if (!o->visible() && o->parent()) write_c("%so->hide();\n", indent()); if (!o->active()) write_c("%so->deactivate();\n", indent()); if (!is_group() && resizable()) write_c("%sFl_Group::current()->resizable(o);\n",indent()); if (hotspot()) write_c("%sw->hotspot(o);\n", indent());}void Fl_Widget_Type::write_extra_code() { for (int n=0; n < NUM_EXTRA_CODE; n++) if (extra_code(n) && !isdeclare(extra_code(n))) write_c("%s%s\n", indent(), extra_code(n));}void Fl_Widget_Type::write_block_close() { indentation -= 2; if (is_parent() || varused) write_c("%s}\n", indent());}void Fl_Widget_Type::write_code2() { write_extra_code(); write_block_close();}////////////////////////////////////////////////////////////////void Fl_Widget_Type::write_properties() { Fl_Type::write_properties(); write_indent(level+1); if (!public_) write_string("private"); write_string("xywh {%d %d %d %d}", o->x(), o->y(), o->w(), o->h()); Fl_Widget* tplate = ((Fl_Widget_Type*)factory)->o; if (o->type() != tplate->type()) { write_string("type"); write_word(item_name(subtypes(), o->type())); } if (o->box() != tplate->box()) { write_string("box"); write_word(boxname(o->box()));} if (is_button()) { Fl_Button* b = (Fl_Button*)o; if (b->down_box()) { write_string("down_box"); write_word(boxname(b->down_box()));} if (b->shortcut()) write_string("shortcut 0x%x", b->shortcut()); if (b->value()) write_string("value 1"); } if (is_menu_button()) { Fl_Menu_* b = (Fl_Menu_*)o; if (b->down_box()) { write_string("down_box"); write_word(boxname(b->down_box()));} } if (o->color()!=tplate->color()) write_string("color %d", o->color()); if (o->selection_color()!=tplate->selection_color()) write_string("selection_color %d", o->selection_color()); if (image) write_string("labeltype image"); else if (o->labeltype()!=tplate->labeltype()) { write_string("labeltype"); write_word(item_name(labeltypemenu, o->labeltype())); } if (o->labelfont()!=tplate->labelfont()) write_string("labelfont %d", o->labelfont()); if (o->labelsize()!=tplate->labelsize()) write_string("labelsize %d", o->labelsize()); if (o->labelcolor()!=tplate->labelcolor()) write_string("labelcolor %d", o->labelcolor()); if (o->align()!=tplate->align()) write_string("align %d", o->align()); if (o->when() != tplate->when()) write_string("when %d", o->when()); if (is_valuator()) { Fl_Valuator* v = (Fl_Valuator*)o; Fl_Valuator* f = (Fl_Valuator*)(tplate); if (v->minimum()!=f->minimum()) write_string("minimum %g",v->minimum()); if (v->maximum()!=f->maximum()) write_string("maximum %g",v->maximum()); if (v->step()!=f->step()) write_string("step %g",v->step()); if (v->value()!=0.0) write_string("value %g",v->value()); if (is_valuator()==2) { double x = ((Fl_Slider*)v)->slider_size(); double y = ((Fl_Slider*)f)->slider_size(); if (x != y) write_string("slider_size %g", x); } } {Fl_Font ff; int fs; Fl_Color fc; if (textstuff(4,ff,fs,fc)) { Fl_Font f; int s; Fl_Color c; textstuff(0,f,s,c); if (f != ff) write_string("textfont %d", f); if (s != fs) write_string("textsize %d", s); if (c != fc) write_string("textcolor %d", c); }} if (!o->visible()) write_string("hide"); if (!o->active()) write_string("deactivate"); if (resizable()) write_string("resizable"); if (hotspot()) write_string(is_menu_item() ? "divider" : "hotspot"); for (int n=0; n < NUM_EXTRA_CODE; n++) if (extra_code(n)) { write_indent(level+1); write_string("code%d",n); write_word(extra_code(n)); } if (subclass()) { write_indent(level+1); write_string("class"); write_word(subclass()); }}int pasteoffset;void Fl_Widget_Type::read_property(const char *c) { int x,y,w,h; Fl_Font f; int s; Fl_Color cc; if (!strcmp(c,"private")) { public_ = 0; } else if (!strcmp(c,"xywh")) { if (sscanf(read_word(),"%d %d %d %d",&x,&y,&w,&h) == 4) { x += pasteoffset; y += pasteoffset; o->resize(x,y,w,h); } } else if (!strcmp(c,"type")) { o->type(item_number(subtypes(), read_word())); } else if (!strcmp(c,"box")) { const char* value = read_word(); if ((x = boxnumber(value))) { if (x == ZERO_ENTRY) x = 0; o->box((Fl_Boxtype)x); } else if (sscanf(value,"%d",&x) == 1) o->box((Fl_Boxtype)x); } else if (is_button() && !strcmp(c,"down_box")) { const char* value = read_word(); if ((x = boxnumber(value))) { if (x == ZERO_ENTRY) x = 0; ((Fl_Button*)o)->down_box((Fl_Boxtype)x); } } else if (is_menu_button() && !strcmp(c,"down_box")) { const char* value = read_word(); if ((x = boxnumber(value))) { if (x == ZERO_ENTRY) x = 0; ((Fl_Menu_*)o)->down_box((Fl_Boxtype)x); } } else if (is_button() && !strcmp(c,"value")) { const char* value = read_word(); ((Fl_Button*)o)->value(atoi(value)); } else if (!strcmp(c,"color")) { int n = sscanf(read_word(),"%d %d",&x,&y); if (n == 2) { // back compatability... if (x != 47) o->color(x); o->selection_color(y); } else { o->color(x); } } else if (!strcmp(c,"selection_color")) { if (sscanf(read_word(),"%d",&x)) o->selection_color(x); } else if (!strcmp(c,"labeltype")) { c = read_word(); if (!strcmp(c,"image")) { Fluid_Image *i = Fluid_Image::find(label()); if (!i) read_error("Image file '%s' not found", label()); else setimage(i); } else { o->labeltype((Fl_Labeltype)item_number(labeltypemenu,c)); } } else if (!strcmp(c,"labelfont")) { if (sscanf(read_word(),"%d",&x) == 1) o->labelfont(x); } else if (!strcmp(c,"labelsize")) { if (sscanf(read_word(),"%d",&x) == 1) o->labelsize(x); } else if (!strcmp(c,"labelcolor")) { if (sscanf(read_word(),"%d",&x) == 1) o->labelcolor(x); } else if (!strcmp(c,"align")) { if (sscanf(read_word(),"%d",&x) == 1) o->align(x); } else if (!strcmp(c,"when")) { if (sscanf(read_word(),"%d",&x) == 1) o->when(x); } else if (!strcmp(c,"minimum") && is_valuator()) { ((Fl_Valuator*)o)->minimum(strtod(read_word(),0)); } else if (!strcmp(c,"maximum") && is_valuator()) { ((Fl_Valuator*)o)->maximum(strtod(read_word(),0)); } else if (!strcmp(c,"step") && is_valuator()) { ((Fl_Valuator*)o)->step(strtod(read_word(),0)); } else if (!strcmp(c,"value") && is_valuator()) { ((Fl_Valuator*)o)->value(strtod(read_word(),0)); } else if ((!strcmp(c,"slider_size")||!strcmp(c,"size"))&&is_valuator()==2) { ((Fl_Slider*)o)->slider_size(strtod(read_word(),0)); } else if (!strcmp(c,"textfont")) { if (sscanf(read_word(),"%d",&x) == 1) {f=(Fl_Font)x; textstuff(1,f,s,cc);} } else if (!strcmp(c,"textsize")) { if (sscanf(read_word(),"%d",&x) == 1) {s=x; textstuff(2,f,s,cc);} } else if (!strcmp(c,"textcolor")) { if (sscanf(read_word(),"%d",&x) == 1) {cc=(Fl_Color)x;textstuff(3,f,s,cc);} } else if (!strcmp(c,"hide")) { o->hide(); } else if (!strcmp(c,"deactivate")) { o->deactivate(); } else if (!strcmp(c,"resizable")) { resizable(1); } else if (!strcmp(c,"hotspot") || !strcmp(c, "divider")) { hotspot(1); } else if (!strcmp(c,"class")) { subclass(read_word()); } else if (is_button() && !strcmp(c,"shortcut")) { ((Fl_Button*)o)->shortcut(strtol(read_word(),0,0)); } else { if (!strncmp(c,"code",4)) { int n = atoi(c+4); if (n >= 0 && n <= NUM_EXTRA_CODE) { extra_code(n,read_word()); return; } } Fl_Type::read_property(c); }}Fl_Menu_Item boxmenu1[] = { // these extra ones are for looking up fdesign saved strings: {"NO_FRAME", 0,0,(void *)FL_NO_BOX}, {"ROUNDED3D_UPBOX", 0,0,(void *)_FL_ROUND_UP_BOX}, {"ROUNDED3D_DOWNBOX", 0,0,(void *)_FL_ROUND_DOWN_BOX}, {"OVAL3D_UPBOX", 0,0,(void *)_FL_ROUND_UP_BOX}, {"OVAL3D_DOWNBOX", 0,0,(void *)_FL_ROUND_DOWN_BOX}, {"0", 0,0,(void *)ZERO_ENTRY}, {"1", 0,0,(void *)FL_UP_BOX}, {"2", 0,0,(void *)FL_DOWN_BOX}, {"3", 0,0,(void *)FL_FLAT_BOX}, {"4", 0,0,(void *)FL_BORDER_BOX}, {"5", 0,0,(void *)FL_SHADOW_BOX}, {"6", 0,0,(void *)FL_FRAME_BOX}, {"7", 0,0,(void *)FL_ROUNDED_BOX}, {"8", 0,0,(void *)FL_RFLAT_BOX}, {"9", 0,0,(void *)FL_RSHADOW_BOX}, {"10", 0,0,(void *)FL_UP_FRAME}, {"11", 0,0,(void *)FL_DOWN_FRAME},{0}};extern int fdesign_flip;int lookup_symbol(const char *, int &, int numberok = 0);int Fl_Widget_Type::read_fdesign(const char* name, const char* value) { int v; if (!strcmp(name,"box")) { float x,y,w,h; if (sscanf(value,"%f %f %f %f",&x,&y,&w,&h) == 4) { if (fdesign_flip) { Fl_Type *p; for (p = parent; p && !p->is_window(); p = p->parent); if (p && p->is_widget()) y = ((Fl_Widget_Type*)p)->o->h()-(y+h); } x += pasteoffset; y += pasteoffset; o->resize(int(x),int(y),int(w),int(h)); } } else if (!strcmp(name,"label")) { label(value); if (value[0] == '@') o->labeltype(FL_SYMBOL_LABEL); } else if (!strcmp(name,"name")) { this->name(value); } else if (!strcmp(name,"callback")) { callback(value); user_data_type("long"); } else if (!strcmp(name,"argument")) { user_data(value); } else if (!strcmp(name,"shortcut")) { if (value[0]) { char buf[128]; sprintf(buf,"o->shortcut(\"%s\");",value); extra_code(0,buf); } } else if (!strcmp(name,"style")) { if (!strncmp(value,"FL_NORMAL",9)) return 1; if (!lookup_symbol(value,v,1)) return 0; o->labelfont(v); o->labeltype((Fl_Labeltype)(v>>8)); } else if (!strcmp(name,"size")) { if (!lookup_symbol(value,v,1)) return 0; o->labelsize(v); } else if (!strcmp(name,"type")) { if (!strncmp(value,"NORMAL",6)) return 1; if (lookup_symbol(value,v,1)) {o->type(v); return 1;} if (!strcmp(value+strlen(value)-5,"FRAME")) goto TRY_BOXTYPE; if (!strcmp(value+strlen(value)-3,"BOX")) goto TRY_BOXTYPE; return 0; } else if (!strcmp(name,"lcol")) { if (!lookup_symbol(value,v,1)) return 0; o->labelcolor(v); } else if (!strcmp(name,"return")) { if (!lookup_symbol(value,v,0)) return 0; o->when(v|FL_WHEN_RELEASE); } else if (!strcmp(name,"alignment")) { if (!lookup_symbol(value,v)) { // convert old numeric values: int v1 = atoi(value); if (v1 <= 0 && strcmp(value,"0")) return 0; v = 0; if (v1 >= 5) {v = FL_ALIGN_INSIDE; v1 -= 5;} switch (v1) { case 0: v += FL_ALIGN_TOP; break; case 1: v += FL_ALIGN_BOTTOM; break; case 2: v += FL_ALIGN_LEFT; break; case 3: v += FL_ALIGN_RIGHT; break; case 4: v += FL_ALIGN_CENTER; break; default: return 0; } } o->align(v); } else if (!strcmp(name,"resizebox")) { resizable(1); } else if (!strcmp(name,"colors")) { char* p = (char*)value; while (*p != ' ') {if (!*p) return 0; p++;} *p = 0; int v1; if (!lookup_symbol(value,v,1) || !lookup_symbol(p+1,v1,1)) { *p=' '; return 0;} o->color(v,v1); } else if (!strcmp(name,"resize")) { return !strcmp(value,"FL_RESIZE_ALL"); } else if (!strcmp(name,"gravity")) { return !strcmp(value,"FL_NoGravity FL_NoGravity"); } else if (!strcmp(name,"boxtype")) { TRY_BOXTYPE: int x = boxnumber(value); if (!x) {x = item_number(boxmenu1, value); if (x < 0) return 0;} if (x == ZERO_ENTRY) { x = 0; if (o->box() != ((Fl_Widget_Type*)factory)->o->box()) return 1; // kludge for frame } o->box((Fl_Boxtype)x); } else { return 0; } return 1;}//// End of "$Id: Fl_Widget_Type.cxx,v 1.1.1.1 2003/08/07 21:18:39 jasonk Exp $".//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -