fl_widget_type.cxx
来自「SRI international 发布的OAA框架软件」· CXX 代码 · 共 1,977 行 · 第 1/5 页
CXX
1,977 行
if (o->labelcolor() != tplate->labelcolor() || subclass())
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(1) && !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() || subclass()) {
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() || subclass())
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");
if (tooltip() && *tooltip()) {
write_string("tooltip");
write_word(tooltip());
}
if (image_name() && *image_name()) {
write_string("image");
write_word(image_name());
}
if (inactive_name() && *inactive_name()) {
write_string("deimage");
write_word(inactive_name());
}
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 (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,"tooltip")) {
tooltip(read_word());
} else if (!strcmp(c,"image")) {
image_name(read_word());
} else if (!strcmp(c,"deimage")) {
inactive_name(read_word());
} 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);
image_name(label());
label("");
} 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* propname, const char* value) {
int v;
if (!strcmp(propname,"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(propname,"label")) {
label(value);
} else if (!strcmp(propname,"name")) {
this->name(value);
} else if (!strcmp(propname,"callback")) {
callback(value); user_data_type("long");
} else if (!strcmp(propname,"argument")) {
user_data(value);
} else if (!strcmp(propname,"shortcut")) {
if (value[0]) {
char buf[128]; sprintf(buf,"o->shortcut(\"%s\");",value);
extra_code(0,buf);
}
} else if (!strcmp(propname,"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(propname,"size")) {
if (!lookup_symbol(value,v,1)) return 0;
o->labelsize(v);
} else if (!strcmp(propname,"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(propname,"lcol")) {
if (!lookup_symbol(value,v,1)) return 0;
o->labelcolor(v);
} else if (!strcmp(propname,"return")) {
if (!lookup_symbol(value,v,0)) return 0;
o->when(v|FL_WHEN_RELEASE);
} else if (!strcmp(propname,"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(propname,"resizebox")) {
resizable(1);
} else if (!strcmp(propname,"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(propname,"resize")) {
return !strcmp(value,"FL_RESIZE_ALL");
} else if (!strcmp(propname,"gravity")) {
return !strcmp(value,"FL_NoGravity FL_NoGravity");
} else if (!strcmp(propname,"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/06/03 22:25:40 agno Exp $".
//
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?