mirror of
https://github.com/fltk/fltk.git
synced 2026-03-23 15:35:11 +08:00
Fluid: user_data_
This commit is contained in:
@@ -464,8 +464,10 @@ int Menu_Item_Node::flags() {
|
||||
if (!o->active()) i |= FL_MENU_INACTIVE;
|
||||
if (!o->visible()) i |= FL_MENU_INVISIBLE;
|
||||
if (can_have_children()) {
|
||||
if (user_data() == nullptr) i |= FL_SUBMENU;
|
||||
else i |= FL_SUBMENU_POINTER;
|
||||
if (user_data().empty())
|
||||
i |= FL_SUBMENU;
|
||||
else
|
||||
i |= FL_SUBMENU_POINTER;
|
||||
}
|
||||
if (hotspot()) i |= FL_MENU_DIVIDER;
|
||||
if (menu_headline()) i |= FL_MENU_HEADLINE;
|
||||
@@ -538,8 +540,8 @@ void Menu_Item_Node::write_item(fld::io::Code_Writer& f) {
|
||||
}
|
||||
} else
|
||||
f.write_c(" 0,");
|
||||
if (user_data())
|
||||
f.write_c(" (void*)(%s),", user_data());
|
||||
if (!user_data().empty())
|
||||
f.write_c(" (void*)(%s),", user_data().c_str());
|
||||
else
|
||||
f.write_c(" 0,");
|
||||
f.write_c(" %d, (uchar)%s, %d, %d, %d", flags(),
|
||||
|
||||
@@ -512,7 +512,6 @@ Node::Node() :
|
||||
name_(nullptr),
|
||||
label_(nullptr),
|
||||
callback_(nullptr),
|
||||
user_data_(nullptr),
|
||||
comment_(nullptr),
|
||||
uid_(0),
|
||||
parent(nullptr),
|
||||
@@ -555,7 +554,6 @@ Node::~Node() {
|
||||
if (name_) free((void*)name_);
|
||||
if (label_) free((void*)label_);
|
||||
if (callback_) free((void*)callback_);
|
||||
if (user_data_) free((void*)user_data_);
|
||||
if (comment_) free((void*)comment_);
|
||||
}
|
||||
|
||||
@@ -846,7 +844,7 @@ void Node::callback(const char *n) {
|
||||
storestring(n,callback_);
|
||||
}
|
||||
|
||||
void Node::user_data(const char *n) {
|
||||
void Node::user_data(const std::string& n) {
|
||||
storestring(n, user_data_);
|
||||
}
|
||||
|
||||
@@ -936,7 +934,7 @@ void Node::write_properties(fld::io::Project_Writer &f) {
|
||||
f.write_word("label");
|
||||
f.write_word(label());
|
||||
}
|
||||
if (user_data()) {
|
||||
if (!user_data().empty()) {
|
||||
f.write_indent(level+1);
|
||||
f.write_word("user_data");
|
||||
f.write_word(user_data());
|
||||
|
||||
@@ -168,7 +168,7 @@ protected:
|
||||
it is the full callback C++ code. Can be nullptr. */
|
||||
const char *callback_;
|
||||
/** Widget user data field as C++ text. */
|
||||
const char *user_data_;
|
||||
std::string user_data_;
|
||||
/** Widget user data type as C++ text, usually `void*` or `long`. */
|
||||
std::string user_data_type_;
|
||||
/** Optional comment for every node in the graph. Visible in browser and
|
||||
@@ -234,8 +234,8 @@ public:
|
||||
void label(const char *);
|
||||
const char *callback() const {return callback_;}
|
||||
void callback(const char *);
|
||||
const char *user_data() const {return user_data_;}
|
||||
void user_data(const char *);
|
||||
std::string user_data() const { return user_data_; }
|
||||
void user_data(const std::string&);
|
||||
std::string user_data_type() const { return user_data_type_; }
|
||||
std::string user_data_type_or_voidp() const { return user_data_type_.empty() ? "void*" : user_data_type_; }
|
||||
void user_data_type(const std::string&);
|
||||
|
||||
@@ -1924,7 +1924,7 @@ void Widget_Node::write_widget_code(fld::io::Code_Writer& f) {
|
||||
if (s != fs) f.write_c("%s%s->textsize(%d);\n", f.indent(), var, s);
|
||||
if (c != fc) write_color(f, "textcolor", c);
|
||||
}}
|
||||
const char* ud = user_data();
|
||||
std::string ud = user_data();
|
||||
if (class_name(1) && !parent->is_widget()) ud = "this";
|
||||
if (callback()) {
|
||||
if (callback()[0] == '[') {
|
||||
@@ -1937,12 +1937,12 @@ void Widget_Node::write_widget_code(fld::io::Code_Writer& f) {
|
||||
} else {
|
||||
f.write_c("%s%s->callback((Fl_Callback*)%s", f.indent(), var, callback_name(f));
|
||||
}
|
||||
if (ud)
|
||||
f.write_c(", (void*)(%s));\n", ud);
|
||||
if (!ud.empty())
|
||||
f.write_c(", (void*)(%s));\n", ud.c_str());
|
||||
else
|
||||
f.write_c(");\n");
|
||||
} else if (ud) {
|
||||
f.write_c("%s%s->user_data((void*)(%s));\n", f.indent(), var, ud);
|
||||
} else if (!ud.empty()) {
|
||||
f.write_c("%s%s->user_data((void*)(%s));\n", f.indent(), var, ud.c_str());
|
||||
}
|
||||
if (o->align() != tplate->align() || !subclass().empty()) {
|
||||
int i = o->align();
|
||||
|
||||
@@ -2396,19 +2396,23 @@ Fl_Group *wp_cpp_callback=(Fl_Group *)0;
|
||||
static void cb_13(Fl_Input* o, void* v) {
|
||||
//fl ▼ ---------------------- callback -~~=~-~----==~-=~~=~-= ▼ fl//
|
||||
if (v == LOAD) {
|
||||
o->value(current_widget->user_data());
|
||||
o->value(current_widget->user_data().c_str());
|
||||
} else {
|
||||
int mod = 0;
|
||||
const char *c = o->value();
|
||||
const char *d = c_check(c);
|
||||
if (d) {fl_message("Error in user_data: %s",d); haderror = 1; return;}
|
||||
if (d) {
|
||||
fl_message("Error in user_data: %s",d);
|
||||
haderror = 1;
|
||||
return;
|
||||
}
|
||||
for (Node *n: Fluid.proj.tree.all_selected_nodes()) {
|
||||
n->user_data(c);
|
||||
mod = 1;
|
||||
}
|
||||
if (mod) Fluid.proj.set_modflag(1);
|
||||
}
|
||||
//fl ▲ ----------=~-=-~--~--=----------~-~=-~=~-~~---=-~~-~-- ▲ fl//
|
||||
//fl ▲ ----------=~-=-~--~--=-----------~=--~~~~=~-=~-~=-~==~ ▲ fl//
|
||||
}
|
||||
|
||||
static void cb_When(Fl_Menu_Button* o, void* v) {
|
||||
|
||||
@@ -519,7 +519,7 @@ Function {make_widget_panel()} {uid 9310
|
||||
} {
|
||||
Fl_Window {} {uid 30ee
|
||||
comment {Use a Double Window to avoid flickering.} open
|
||||
xywh {444 254 420 400} type Double labelsize 11 align 80 resizable hotspot
|
||||
xywh {444 253 420 400} type Double labelsize 11 align 80 resizable hotspot
|
||||
code0 {o->size_range(o->w(), o->h());} size_range {420 400 0 0} visible
|
||||
} {
|
||||
Fl_Wizard tabs_wizard {uid 647f
|
||||
@@ -1601,7 +1601,7 @@ Use 'Backspace' key to clear.} xywh {95 210 310 20} box DOWN_BOX color 7 selecti
|
||||
Fluid.proj.undo.checkpoint();
|
||||
((Fl_Window*)(current_widget->o))->border(o->value());
|
||||
Fluid.proj.set_modflag(1);
|
||||
}}
|
||||
}} selected
|
||||
tooltip {Add a border around the window.} xywh {195 235 60 20} selection_color 1 labelsize 11
|
||||
}
|
||||
Fl_Light_Button {} {uid 457d
|
||||
@@ -1784,7 +1784,7 @@ unselectable, but not grayed out} xywh {225 260 75 20} selection_color 1 labelsi
|
||||
mod = 1;
|
||||
}
|
||||
if (mod) Fluid.proj.set_modflag(1);
|
||||
}} selected
|
||||
}}
|
||||
tooltip {The tooltip text for the widget.
|
||||
Use Ctrl-J for newlines.} xywh {95 285 310 20} labelfont 1 labelsize 11 textsize 11
|
||||
}
|
||||
@@ -2506,12 +2506,16 @@ wCallback->do_callback(wCallback, v);} open
|
||||
} {
|
||||
Fl_Input {} {uid c214
|
||||
callback {if (v == LOAD) {
|
||||
o->value(current_widget->user_data());
|
||||
o->value(current_widget->user_data().c_str());
|
||||
} else {
|
||||
int mod = 0;
|
||||
const char *c = o->value();
|
||||
const char *d = c_check(c);
|
||||
if (d) {fl_message("Error in user_data: %s",d); haderror = 1; return;}
|
||||
if (d) {
|
||||
fl_message("Error in user_data: %s",d);
|
||||
haderror = 1;
|
||||
return;
|
||||
}
|
||||
for (Node *n: Fluid.proj.tree.all_selected_nodes()) {
|
||||
n->user_data(c);
|
||||
mod = 1;
|
||||
|
||||
@@ -693,7 +693,7 @@ static void deferred_mergeback_handler(void*) {
|
||||
|
||||
static int app_event_handler(int event) {
|
||||
if (event == FL_APP_ACTIVATE) {
|
||||
Fl::add_idle(deferred_mergeback_handler, nullptr);
|
||||
Fl::add_timeout(0.5, deferred_mergeback_handler, nullptr);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user