diff options
| author | maxim nikonov <maxim.nikonov@hqo.co> | 2026-02-06 02:33:41 +0500 |
|---|---|---|
| committer | maxim nikonov <maxim.nikonov@hqo.co> | 2026-02-06 02:33:41 +0500 |
| commit | 43e0a37906afabb0b3b091b8d3eac9a910cae50c (patch) | |
| tree | d2a037c2bf0dc395fddb08e32ebfcf2795503b7c /fluid/nodes/Widget_Node.cxx | |
| parent | 4ce4967c33d56e4b56d85d11fe0e0be91e159f5d (diff) | |
wip
Diffstat (limited to 'fluid/nodes/Widget_Node.cxx')
| -rw-r--r-- | fluid/nodes/Widget_Node.cxx | 617 |
1 files changed, 331 insertions, 286 deletions
diff --git a/fluid/nodes/Widget_Node.cxx b/fluid/nodes/Widget_Node.cxx index 929a88bf9..6f5a6a0fb 100644 --- a/fluid/nodes/Widget_Node.cxx +++ b/fluid/nodes/Widget_Node.cxx @@ -38,6 +38,7 @@ #include <FL/Fl_Spinner.H> #include <FL/Fl_Window.H> #include <FL/Fl_Flex.H> +#include <FL/filename.H> #include "../src/flstring.h" #include <stdio.h> @@ -70,16 +71,16 @@ int Widget_Node::is_public() const { return public_; } -std::string subclassname(Node* l) { +const char* subclassname(Node* l) { if (l->is_a(FLD_NODE_TYPE_Menu_Bar)) { - Menu_Bar_Node* mb = static_cast<Menu_Bar_Node*>(l); + Menu_Bar_Node* mb = (Menu_Bar_Node*)l; if (mb->is_sys_menu_bar()) return mb->sys_menubar_name(); } if (l->is_widget()) { Widget_Node* p = (Widget_Node*)l; - std::string c = p->subclass(); - if (!c.empty()) + const char* c = p->subclass(); + if (c && c[0]) return c; if (l->is_class()) return "Fl_Group"; @@ -118,7 +119,7 @@ Node* Widget_Node::make(Strategy strategy) { } if (!pp || !pp->is_true_widget() || !anchor->is_true_widget()) { fl_message("Please select a group widget or window"); - return nullptr; + return 0; } Widget_Node* p = (Widget_Node*)pp; @@ -170,7 +171,7 @@ Node* Widget_Node::make(Strategy strategy) { // Construct the Fl_Widget: t->o = widget(X,Y,W,H); if (strategy.source() == Strategy::FROM_FILE) - t->o->label(nullptr); + t->o->label(0); else if (t->o->label()) t->label(t->o->label()); // allow editing t->o->user_data((void*)t); @@ -199,7 +200,7 @@ void Widget_Node::setimage(Image_Asset* i) { o->image()->scale(iw, ih, 0, 1); } } else { - o->image(nullptr); + o->image(0); //scale_image_w_ = scale_image_h_ = 0; } redraw(); @@ -221,7 +222,7 @@ void Widget_Node::setinactive(Image_Asset* i) { o->deimage()->scale(iw, ih, 0, 1); } } else { - o->deimage(nullptr); + o->deimage(0); //scale_deimage_w_ = scale_deimage_h_ = 0; } redraw(); @@ -232,6 +233,32 @@ void Widget_Node::setlabel(const char* n) { redraw(); } +Widget_Node::Widget_Node() { + int i; + for (i = 0; i < NUM_EXTRA_CODE; i++) + extra_code_[i] = 0; + subclass_ = 0; + tooltip_ = 0; + image_name_ = 0; + inactive_name_ = 0; + hotspot_ = 0; + menu_headline_ = 0; + override_visible_ = 0; + live_widget = 0; + o = 0; + public_ = 1; + bind_image_ = 0; + compress_image_ = 1; + scale_image_w_ = 0; + scale_image_h_ = 0; + image = 0; + bind_deimage_ = 0; + compress_deimage_ = 1; + scale_deimage_w_ = 0; + scale_deimage_h_ = 0; + inactive = 0; +} + Widget_Node::~Widget_Node() { if (o) { Fl_Window* win = o->window(); @@ -243,34 +270,47 @@ Widget_Node::~Widget_Node() { image->dec_ref(); if (inactive) inactive->dec_ref(); + int i; + for (i = 0; i < NUM_EXTRA_CODE; i++) + if (extra_code_[i]) free(extra_code_[i]); + if (subclass_) free(subclass_); + if (tooltip_) free(tooltip_); + if (image_name_) free(image_name_); + if (inactive_name_) free(inactive_name_); } -void Widget_Node::extra_code(int m, const std::string& n) { - storestring(n, extra_code_[m]); +void Widget_Node::extra_code(int m, const char *n) { + if (extra_code_[m]) free(extra_code_[m]); + extra_code_[m] = (n && n[0]) ? fl_strdup(n) : 0; } -void Widget_Node::subclass(const std::string& n) { - if (storestring(n, subclass_) && visible) +void Widget_Node::subclass(const char *n) { + if (subclass_) free(subclass_); + subclass_ = (n && n[0]) ? fl_strdup(n) : 0; + if (visible) redraw_browser(); } -void Widget_Node::tooltip(const std::string& text) { - storestring(text, tooltip_); - if (text.empty()) { - o->tooltip(nullptr); +void Widget_Node::tooltip(const char *text) { + if (tooltip_) free(tooltip_); + tooltip_ = (text && text[0]) ? fl_strdup(text) : 0; + if (!text || !text[0]) { + o->tooltip(0); } else { - o->copy_tooltip(text.c_str()); + o->copy_tooltip(text); } } -void Widget_Node::image_name(const std::string& name) { - setimage(Image_Asset::find(name.c_str())); - storestring(name, image_name_); +void Widget_Node::image_name(const char *name) { + setimage(Image_Asset::find(name)); + if (image_name_) free(image_name_); + image_name_ = (name && name[0]) ? fl_strdup(name) : 0; } -void Widget_Node::inactive_name(const std::string& name) { - setinactive(Image_Asset::find(name.c_str())); - storestring(name, inactive_name_); +void Widget_Node::inactive_name(const char *name) { + setinactive(Image_Asset::find(name)); + if (inactive_name_) free(inactive_name_); + inactive_name_ = (name && name[0]) ? fl_strdup(name) : 0; } void Widget_Node::redraw() { @@ -282,7 +322,7 @@ void Widget_Node::redraw() { } while (t && t->is_a(FLD_NODE_TYPE_Menu_Item)); // kludge to cause build_menu to be called again: if (t) - t->add_child(nullptr, nullptr); + t->add_child(0, 0); } else { while (t->parent && t->parent->is_widget()) t = t->parent; @@ -293,7 +333,7 @@ void Widget_Node::redraw() { // the recursive part sorts all children, returns pointer to next: Node* sort(Node* parent) { Node* f; - Node* n = nullptr; + Node* n = 0; for (f = parent ? parent->next : Fluid.proj.tree.first; ; f = n) { if (!f || (parent && f->level <= parent->level)) break; @@ -322,7 +362,7 @@ Node* sort(Node* parent) { //////////////////////////////////////////////////////////////// // The control panels! -Fl_Window* the_panel = nullptr; +Fl_Window* the_panel = 0; // All the callbacks use the argument to indicate whether to load or store. // This avoids the need for pointers to all the widgets, and keeps the @@ -331,8 +371,8 @@ Fl_Window* the_panel = nullptr; // with any actual useful values for the argument. I also use this to // initialized parts of the widget that are nyi by fluid. -Node* current_node = nullptr; -Widget_Node* current_widget = nullptr; // one of the selected ones +Node* current_node = 0; +Widget_Node* current_widget = 0; // one of the selected ones void* const LOAD = (void *)"LOAD"; // "magic" pointer to indicate that we need to load values into the dialog int numselected = 0; // number selected int haderror = 0; @@ -569,7 +609,7 @@ fld::widget::Formula_Input_Vars widget_vars[] = { { "cy", vars_cy_cb }, { "cw", vars_cw_cb }, { "ch", vars_ch_cb }, - { nullptr } + { 0 } }; //////////////////////////////////////////////////////////////// @@ -608,86 +648,86 @@ int item_number(Fl_Menu_Item* m, const char* i) { #define ZERO_ENTRY 1000 Fl_Menu_Item boxmenu[] = { - {"NO_BOX",0,nullptr,(void *)ZERO_ENTRY}, - {"boxes",0,nullptr,nullptr,FL_SUBMENU}, - {"UP_BOX",0,nullptr,(void *)FL_UP_BOX}, - {"DOWN_BOX",0,nullptr,(void *)FL_DOWN_BOX}, - {"FLAT_BOX",0,nullptr,(void *)FL_FLAT_BOX}, - {"BORDER_BOX",0,nullptr,(void *)FL_BORDER_BOX}, - {"THIN_UP_BOX",0,nullptr,(void *)FL_THIN_UP_BOX}, - {"THIN_DOWN_BOX",0,nullptr,(void *)FL_THIN_DOWN_BOX}, - {"ENGRAVED_BOX",0,nullptr,(void *)FL_ENGRAVED_BOX}, - {"EMBOSSED_BOX",0,nullptr,(void *)FL_EMBOSSED_BOX}, - {"ROUND_UP_BOX",0,nullptr,(void *)FL_ROUND_UP_BOX}, - {"ROUND_DOWN_BOX",0,nullptr,(void *)FL_ROUND_DOWN_BOX}, - {"DIAMOND_UP_BOX",0,nullptr,(void *)FL_DIAMOND_UP_BOX}, - {"DIAMOND_DOWN_BOX",0,nullptr,(void *)FL_DIAMOND_DOWN_BOX}, - {"SHADOW_BOX",0,nullptr,(void *)FL_SHADOW_BOX}, - {"ROUNDED_BOX",0,nullptr,(void *)FL_ROUNDED_BOX}, - {"RSHADOW_BOX",0,nullptr,(void *)FL_RSHADOW_BOX}, - {"RFLAT_BOX",0,nullptr,(void *)FL_RFLAT_BOX}, - {"OVAL_BOX",0,nullptr,(void *)FL_OVAL_BOX}, - {"OSHADOW_BOX",0,nullptr,(void *)FL_OSHADOW_BOX}, - {"OFLAT_BOX",0,nullptr,(void *)FL_OFLAT_BOX}, - {"PLASTIC_UP_BOX",0,nullptr,(void *)FL_PLASTIC_UP_BOX}, - {"PLASTIC_DOWN_BOX",0,nullptr,(void *)FL_PLASTIC_DOWN_BOX}, - {"PLASTIC_THIN_UP_BOX",0,nullptr,(void *)FL_PLASTIC_THIN_UP_BOX}, - {"PLASTIC_THIN_DOWN_BOX",0,nullptr,(void *)FL_PLASTIC_THIN_DOWN_BOX}, - {"PLASTIC_ROUND_UP_BOX",0,nullptr,(void *)FL_PLASTIC_ROUND_UP_BOX}, - {"PLASTIC_ROUND_DOWN_BOX",0,nullptr,(void *)FL_PLASTIC_ROUND_DOWN_BOX}, - {"GTK_UP_BOX",0,nullptr,(void *)FL_GTK_UP_BOX}, - {"GTK_DOWN_BOX",0,nullptr,(void *)FL_GTK_DOWN_BOX}, - {"GTK_THIN_UP_BOX",0,nullptr,(void *)FL_GTK_THIN_UP_BOX}, - {"GTK_THIN_DOWN_BOX",0,nullptr,(void *)FL_GTK_THIN_DOWN_BOX}, - {"GTK_ROUND_UP_BOX",0,nullptr,(void *)FL_GTK_ROUND_UP_BOX}, - {"GTK_ROUND_DOWN_BOX",0,nullptr,(void *)FL_GTK_ROUND_DOWN_BOX}, - {"GLEAM_UP_BOX",0,nullptr,(void *)FL_GLEAM_UP_BOX}, - {"GLEAM_DOWN_BOX",0,nullptr,(void *)FL_GLEAM_DOWN_BOX}, - {"GLEAM_THIN_UP_BOX",0,nullptr,(void *)FL_GLEAM_THIN_UP_BOX}, - {"GLEAM_THIN_DOWN_BOX",0,nullptr,(void *)FL_GLEAM_THIN_DOWN_BOX}, - {"GLEAM_ROUND_UP_BOX",0,nullptr,(void *)FL_GLEAM_ROUND_UP_BOX}, - {"GLEAM_ROUND_DOWN_BOX",0,nullptr,(void *)FL_GLEAM_ROUND_DOWN_BOX}, - {"OXY_UP_BOX",0,nullptr,(void *)FL_OXY_UP_BOX}, - {"OXY_DOWN_BOX",0,nullptr,(void *)FL_OXY_DOWN_BOX}, - {"OXY_THIN_UP_BOX",0,nullptr,(void *)FL_OXY_THIN_UP_BOX}, - {"OXY_THIN_DOWN_BOX",0,nullptr,(void *)FL_OXY_THIN_DOWN_BOX}, - {"OXY_ROUND_UP_BOX",0,nullptr,(void *)FL_OXY_ROUND_UP_BOX}, - {"OXY_ROUND_DOWN_BOX",0,nullptr,(void *)FL_OXY_ROUND_DOWN_BOX}, - {"OXY_BUTTON_UP_BOX",0,nullptr,(void *)FL_OXY_BUTTON_UP_BOX}, - {"OXY_BUTTON_DOWN_BOX",0,nullptr,(void *)FL_OXY_BUTTON_DOWN_BOX}, - {nullptr}, - {"frames",0,nullptr,nullptr,FL_SUBMENU}, - {"UP_FRAME",0,nullptr,(void *)FL_UP_FRAME}, - {"DOWN_FRAME",0,nullptr,(void *)FL_DOWN_FRAME}, - {"THIN_UP_FRAME",0,nullptr,(void *)FL_THIN_UP_FRAME}, - {"THIN_DOWN_FRAME",0,nullptr,(void *)FL_THIN_DOWN_FRAME}, - {"ENGRAVED_FRAME",0,nullptr,(void *)FL_ENGRAVED_FRAME}, - {"EMBOSSED_FRAME",0,nullptr,(void *)FL_EMBOSSED_FRAME}, - {"BORDER_FRAME",0,nullptr,(void *)FL_BORDER_FRAME}, - {"SHADOW_FRAME",0,nullptr,(void *)FL_SHADOW_FRAME}, - {"ROUNDED_FRAME",0,nullptr,(void *)FL_ROUNDED_FRAME}, - {"OVAL_FRAME",0,nullptr,(void *)FL_OVAL_FRAME}, - {"PLASTIC_UP_FRAME",0,nullptr,(void *)FL_PLASTIC_UP_FRAME}, - {"PLASTIC_DOWN_FRAME",0,nullptr,(void *)FL_PLASTIC_DOWN_FRAME}, - {"GTK_UP_FRAME",0,nullptr,(void *)FL_GTK_UP_FRAME}, - {"GTK_DOWN_FRAME",0,nullptr,(void *)FL_GTK_DOWN_FRAME}, - {"GTK_THIN_UP_FRAME",0,nullptr,(void *)FL_GTK_THIN_UP_FRAME}, - {"GTK_THIN_DOWN_FRAME",0,nullptr,(void *)FL_GTK_THIN_DOWN_FRAME}, - {"GLEAM_UP_FRAME",0,nullptr,(void *)FL_GLEAM_UP_FRAME}, - {"GLEAM_DOWN_FRAME",0,nullptr,(void *)FL_GLEAM_DOWN_FRAME}, - {"OXY_UP_FRAME",0,nullptr,(void *)FL_OXY_UP_FRAME}, - {"OXY_DOWN_FRAME",0,nullptr,(void *)FL_OXY_DOWN_FRAME}, - {"OXY_THIN_UP_FRAME",0,nullptr,(void *)FL_OXY_THIN_UP_FRAME}, - {"OXY_THIN_DOWN_FRAME",0,nullptr,(void *)FL_OXY_THIN_DOWN_FRAME}, - {nullptr}, - {nullptr}}; + {"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}, + {"PLASTIC_THIN_UP_BOX",0,0,(void *)FL_PLASTIC_THIN_UP_BOX}, + {"PLASTIC_THIN_DOWN_BOX",0,0,(void *)FL_PLASTIC_THIN_DOWN_BOX}, + {"PLASTIC_ROUND_UP_BOX",0,0,(void *)FL_PLASTIC_ROUND_UP_BOX}, + {"PLASTIC_ROUND_DOWN_BOX",0,0,(void *)FL_PLASTIC_ROUND_DOWN_BOX}, + {"GTK_UP_BOX",0,0,(void *)FL_GTK_UP_BOX}, + {"GTK_DOWN_BOX",0,0,(void *)FL_GTK_DOWN_BOX}, + {"GTK_THIN_UP_BOX",0,0,(void *)FL_GTK_THIN_UP_BOX}, + {"GTK_THIN_DOWN_BOX",0,0,(void *)FL_GTK_THIN_DOWN_BOX}, + {"GTK_ROUND_UP_BOX",0,0,(void *)FL_GTK_ROUND_UP_BOX}, + {"GTK_ROUND_DOWN_BOX",0,0,(void *)FL_GTK_ROUND_DOWN_BOX}, + {"GLEAM_UP_BOX",0,0,(void *)FL_GLEAM_UP_BOX}, + {"GLEAM_DOWN_BOX",0,0,(void *)FL_GLEAM_DOWN_BOX}, + {"GLEAM_THIN_UP_BOX",0,0,(void *)FL_GLEAM_THIN_UP_BOX}, + {"GLEAM_THIN_DOWN_BOX",0,0,(void *)FL_GLEAM_THIN_DOWN_BOX}, + {"GLEAM_ROUND_UP_BOX",0,0,(void *)FL_GLEAM_ROUND_UP_BOX}, + {"GLEAM_ROUND_DOWN_BOX",0,0,(void *)FL_GLEAM_ROUND_DOWN_BOX}, + {"OXY_UP_BOX",0,0,(void *)FL_OXY_UP_BOX}, + {"OXY_DOWN_BOX",0,0,(void *)FL_OXY_DOWN_BOX}, + {"OXY_THIN_UP_BOX",0,0,(void *)FL_OXY_THIN_UP_BOX}, + {"OXY_THIN_DOWN_BOX",0,0,(void *)FL_OXY_THIN_DOWN_BOX}, + {"OXY_ROUND_UP_BOX",0,0,(void *)FL_OXY_ROUND_UP_BOX}, + {"OXY_ROUND_DOWN_BOX",0,0,(void *)FL_OXY_ROUND_DOWN_BOX}, + {"OXY_BUTTON_UP_BOX",0,0,(void *)FL_OXY_BUTTON_UP_BOX}, + {"OXY_BUTTON_DOWN_BOX",0,0,(void *)FL_OXY_BUTTON_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}, + {"GTK_UP_FRAME",0,0,(void *)FL_GTK_UP_FRAME}, + {"GTK_DOWN_FRAME",0,0,(void *)FL_GTK_DOWN_FRAME}, + {"GTK_THIN_UP_FRAME",0,0,(void *)FL_GTK_THIN_UP_FRAME}, + {"GTK_THIN_DOWN_FRAME",0,0,(void *)FL_GTK_THIN_DOWN_FRAME}, + {"GLEAM_UP_FRAME",0,0,(void *)FL_GLEAM_UP_FRAME}, + {"GLEAM_DOWN_FRAME",0,0,(void *)FL_GLEAM_DOWN_FRAME}, + {"OXY_UP_FRAME",0,0,(void *)FL_OXY_UP_FRAME}, + {"OXY_DOWN_FRAME",0,0,(void *)FL_OXY_DOWN_FRAME}, + {"OXY_THIN_UP_FRAME",0,0,(void *)FL_OXY_THIN_UP_FRAME}, + {"OXY_THIN_DOWN_FRAME",0,0,(void *)FL_OXY_THIN_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 nullptr; + return 0; } int boxnumber(const char* i) { @@ -707,37 +747,37 @@ int boxnumber(const char* i) { Fl_Menu_Item whenmenu[] = { // set individual bits - {"FL_WHEN_CHANGED",0,nullptr,(void*)FL_WHEN_CHANGED, FL_MENU_TOGGLE}, - {"FL_WHEN_NOT_CHANGED",0,nullptr,(void*)FL_WHEN_NOT_CHANGED, FL_MENU_TOGGLE}, - {"FL_WHEN_RELEASE",0,nullptr,(void*)FL_WHEN_RELEASE, FL_MENU_TOGGLE}, - {"FL_WHEN_ENTER_KEY",0,nullptr,(void*)FL_WHEN_ENTER_KEY, FL_MENU_TOGGLE}, - {"FL_WHEN_CLOSED",0,nullptr,(void*)FL_WHEN_CLOSED, FL_MENU_TOGGLE|FL_MENU_DIVIDER}, + {"FL_WHEN_CHANGED",0,0,(void*)FL_WHEN_CHANGED, FL_MENU_TOGGLE}, + {"FL_WHEN_NOT_CHANGED",0,0,(void*)FL_WHEN_NOT_CHANGED, FL_MENU_TOGGLE}, + {"FL_WHEN_RELEASE",0,0,(void*)FL_WHEN_RELEASE, FL_MENU_TOGGLE}, + {"FL_WHEN_ENTER_KEY",0,0,(void*)FL_WHEN_ENTER_KEY, FL_MENU_TOGGLE}, + {"FL_WHEN_CLOSED",0,0,(void*)FL_WHEN_CLOSED, FL_MENU_TOGGLE|FL_MENU_DIVIDER}, // set bit combinations - {"FL_WHEN_NEVER",0,nullptr,(void*)FL_WHEN_NEVER}, - {"FL_WHEN_RELEASE_ALWAYS",0,nullptr,(void*)FL_WHEN_RELEASE_ALWAYS}, - {"FL_WHEN_ENTER_KEY_ALWAYS",0,nullptr,(void*)FL_WHEN_ENTER_KEY_ALWAYS}, - {"FL_WHEN_ENTER_KEY_CHANGED",0,nullptr,(void*)FL_WHEN_ENTER_KEY_CHANGED}, - {nullptr}}; + {"FL_WHEN_NEVER",0,0,(void*)FL_WHEN_NEVER}, + {"FL_WHEN_RELEASE_ALWAYS",0,0,(void*)FL_WHEN_RELEASE_ALWAYS}, + {"FL_WHEN_ENTER_KEY_ALWAYS",0,0,(void*)FL_WHEN_ENTER_KEY_ALWAYS}, + {"FL_WHEN_ENTER_KEY_CHANGED",0,0,(void*)FL_WHEN_ENTER_KEY_CHANGED}, + {0}}; static Fl_Menu_Item whensymbolmenu[] = { - /* 0 */ {"FL_WHEN_NEVER",0,nullptr,(void*)FL_WHEN_NEVER}, - /* 1 */ {"FL_WHEN_CHANGED",0,nullptr,(void*)FL_WHEN_CHANGED}, - /* 2 */ {"FL_WHEN_NOT_CHANGED",0,nullptr,(void*)FL_WHEN_NOT_CHANGED}, - /* 3 */ {"FL_WHEN_CHANGED | FL_WHEN_NOT_CHANGED",0,nullptr,(void*)(FL_WHEN_CHANGED|FL_WHEN_NOT_CHANGED)}, - /* 4 */ {"FL_WHEN_RELEASE",0,nullptr,(void*)FL_WHEN_RELEASE}, - /* 5 */ {"FL_WHEN_CHANGED | FL_WHEN_RELEASE",0,nullptr,(void*)(FL_WHEN_CHANGED|FL_WHEN_RELEASE)}, - /* 6 */ {"FL_WHEN_RELEASE_ALWAYS",0,nullptr,(void*)FL_WHEN_RELEASE_ALWAYS}, - /* 7 */ {"FL_WHEN_CHANGED | FL_WHEN_RELEASE_ALWAYS",0,nullptr,(void*)(FL_WHEN_CHANGED|FL_WHEN_RELEASE_ALWAYS)}, - /* 8 */ {"FL_WHEN_ENTER_KEY",0,nullptr,(void*)FL_WHEN_ENTER_KEY}, - /* 9 */ {"FL_WHEN_CHANGED | FL_WHEN_ENTER_KEY",0,nullptr,(void*)(FL_WHEN_CHANGED|FL_WHEN_ENTER_KEY)}, - /* 10 */ {"FL_WHEN_ENTER_KEY_ALWAYS",0,nullptr,(void*)FL_WHEN_ENTER_KEY_ALWAYS}, - /* 11 */ {"FL_WHEN_ENTER_KEY_CHANGED",0,nullptr,(void*)FL_WHEN_ENTER_KEY_CHANGED}, - /* 12 */ {"FL_WHEN_RELEASE | FL_WHEN_ENTER_KEY",0,nullptr,(void*)(FL_WHEN_RELEASE|FL_WHEN_ENTER_KEY)}, - /* 13 */ {"FL_WHEN_RELEASE | FL_WHEN_CHANGED | FL_WHEN_ENTER_KEY",0,nullptr,(void*)(FL_WHEN_RELEASE|FL_WHEN_CHANGED|FL_WHEN_ENTER_KEY)}, - /* 14 */ {"FL_WHEN_RELEASE | FL_WHEN_ENTER_KEY_ALWAYS",0,nullptr,(void*)(FL_WHEN_RELEASE|FL_WHEN_ENTER_KEY_ALWAYS)}, - /* 15 */ {"FL_WHEN_RELEASE | FL_WHEN_ENTER_KEY_CHANGED",0,nullptr,(void*)(FL_WHEN_RELEASE|FL_WHEN_ENTER_KEY_CHANGED)}, - {nullptr} + /* 0 */ {"FL_WHEN_NEVER",0,0,(void*)FL_WHEN_NEVER}, + /* 1 */ {"FL_WHEN_CHANGED",0,0,(void*)FL_WHEN_CHANGED}, + /* 2 */ {"FL_WHEN_NOT_CHANGED",0,0,(void*)FL_WHEN_NOT_CHANGED}, + /* 3 */ {"FL_WHEN_CHANGED | FL_WHEN_NOT_CHANGED",0,0,(void*)(FL_WHEN_CHANGED|FL_WHEN_NOT_CHANGED)}, + /* 4 */ {"FL_WHEN_RELEASE",0,0,(void*)FL_WHEN_RELEASE}, + /* 5 */ {"FL_WHEN_CHANGED | FL_WHEN_RELEASE",0,0,(void*)(FL_WHEN_CHANGED|FL_WHEN_RELEASE)}, + /* 6 */ {"FL_WHEN_RELEASE_ALWAYS",0,0,(void*)FL_WHEN_RELEASE_ALWAYS}, + /* 7 */ {"FL_WHEN_CHANGED | FL_WHEN_RELEASE_ALWAYS",0,0,(void*)(FL_WHEN_CHANGED|FL_WHEN_RELEASE_ALWAYS)}, + /* 8 */ {"FL_WHEN_ENTER_KEY",0,0,(void*)FL_WHEN_ENTER_KEY}, + /* 9 */ {"FL_WHEN_CHANGED | FL_WHEN_ENTER_KEY",0,0,(void*)(FL_WHEN_CHANGED|FL_WHEN_ENTER_KEY)}, + /* 10 */ {"FL_WHEN_ENTER_KEY_ALWAYS",0,0,(void*)FL_WHEN_ENTER_KEY_ALWAYS}, + /* 11 */ {"FL_WHEN_ENTER_KEY_CHANGED",0,0,(void*)FL_WHEN_ENTER_KEY_CHANGED}, + /* 12 */ {"FL_WHEN_RELEASE | FL_WHEN_ENTER_KEY",0,0,(void*)(FL_WHEN_RELEASE|FL_WHEN_ENTER_KEY)}, + /* 13 */ {"FL_WHEN_RELEASE | FL_WHEN_CHANGED | FL_WHEN_ENTER_KEY",0,0,(void*)(FL_WHEN_RELEASE|FL_WHEN_CHANGED|FL_WHEN_ENTER_KEY)}, + /* 14 */ {"FL_WHEN_RELEASE | FL_WHEN_ENTER_KEY_ALWAYS",0,0,(void*)(FL_WHEN_RELEASE|FL_WHEN_ENTER_KEY_ALWAYS)}, + /* 15 */ {"FL_WHEN_RELEASE | FL_WHEN_ENTER_KEY_CHANGED",0,0,(void*)(FL_WHEN_RELEASE|FL_WHEN_ENTER_KEY_CHANGED)}, + {0} }; // Return a text string representing the Fl_When value n @@ -765,7 +805,7 @@ void set_whenmenu(int n) { uchar Widget_Node::resizable() const { if (is_a(FLD_NODE_TYPE_Window)) - return ((Fl_Window*)o)->resizable() != nullptr; + return ((Fl_Window*)o)->resizable() != 0; Fl_Group* p = (Fl_Group*)o->parent(); if (p) return p->resizable() == o; @@ -787,10 +827,10 @@ void Widget_Node::resizable(uchar v) { if (!resizable()) return; if (is_a(FLD_NODE_TYPE_Window)) { - ((Fl_Window*)o)->resizable(nullptr); + ((Fl_Window*)o)->resizable(0); } else { Fl_Group* p = (Fl_Group*)o->parent(); - if (p) p->resizable(nullptr); + if (p) p->resizable(0); } } } @@ -816,11 +856,11 @@ Fl_Menu_Item fontmenu[] = { {"Terminal"}, {"Terminal Bold"}, {"Zapf Dingbats"}, - {nullptr} + {0} }; Fl_Menu_Item fontmenu_w_default[] = { - {"<default>", 0, nullptr, nullptr, FL_MENU_DIVIDER}, + {"<default>", 0, 0, 0, FL_MENU_DIVIDER}, {"Helvetica"}, {"Helvetica bold"}, {"Helvetica italic"}, @@ -837,7 +877,7 @@ Fl_Menu_Item fontmenu_w_default[] = { {"Terminal"}, {"Terminal Bold"}, {"Zapf Dingbats"}, - {nullptr} + {0} }; @@ -845,12 +885,12 @@ Fl_Menu_Item fontmenu_w_default[] = { extern const char* ui_find_image_name; Fl_Menu_Item labeltypemenu[] = { - {"NORMAL_LABEL",0,nullptr,(void*)nullptr}, - {"SHADOW_LABEL",0,nullptr,(void*)FL_SHADOW_LABEL}, - {"ENGRAVED_LABEL",0,nullptr,(void*)FL_ENGRAVED_LABEL}, - {"EMBOSSED_LABEL",0,nullptr,(void*)FL_EMBOSSED_LABEL}, - {"NO_LABEL",0,nullptr,(void*)(FL_NO_LABEL)}, - {nullptr}}; + {"NORMAL_LABEL",0,0,(void*)0}, + {"SHADOW_LABEL",0,0,(void*)FL_SHADOW_LABEL}, + {"ENGRAVED_LABEL",0,0,(void*)FL_ENGRAVED_LABEL}, + {"EMBOSSED_LABEL",0,0,(void*)FL_EMBOSSED_LABEL}, + {"NO_LABEL",0,0,(void*)(FL_NO_LABEL)}, + {0}}; void labeltype_cb(Fl_Choice* i, void* v) { if (v == LOAD) { @@ -884,21 +924,21 @@ void labeltype_cb(Fl_Choice* i, void* v) { //////////////////////////////////////////////////////////////// Fl_Menu_Item colormenu[] = { - { "Foreground Color", 0, nullptr, (void*)(fl_intptr_t)FL_FOREGROUND_COLOR, 0, 0, FL_HELVETICA, 11}, - { "Background Color", 0, nullptr, (void*)(fl_intptr_t)FL_BACKGROUND_COLOR, 0, 0, FL_HELVETICA, 11}, - { "Background Color 2", 0, nullptr, (void*)(fl_intptr_t)FL_BACKGROUND2_COLOR, 0, 0, FL_HELVETICA, 11}, - { "Selection Color", 0, nullptr, (void*)(fl_intptr_t)FL_SELECTION_COLOR, 0, 0, FL_HELVETICA, 11}, - { "Inactive Color", 0, nullptr, (void*)(fl_intptr_t)FL_INACTIVE_COLOR, FL_MENU_DIVIDER, 0, FL_HELVETICA, 11}, - { "Black", 0, nullptr, (void*)(fl_intptr_t)FL_BLACK, 0, 0, FL_HELVETICA, 11}, - { "White", 0, nullptr, (void*)(fl_intptr_t)FL_WHITE, FL_MENU_DIVIDER, 0, FL_HELVETICA, 11}, - { "Gray 0", 0, nullptr, (void*)(fl_intptr_t)FL_GRAY0, 0, 0, FL_HELVETICA, 11}, - { "Dark 3", 0, nullptr, (void*)(fl_intptr_t)FL_DARK3, 0, 0, FL_HELVETICA, 11}, - { "Dark 2", 0, nullptr, (void*)(fl_intptr_t)FL_DARK2, 0, 0, FL_HELVETICA, 11}, - { "Dark 1", 0, nullptr, (void*)(fl_intptr_t)FL_DARK1, 0, 0, FL_HELVETICA, 11}, - { "Light 1", 0, nullptr, (void*)(fl_intptr_t)FL_LIGHT1, 0, 0, FL_HELVETICA, 11}, - { "Light 2", 0, nullptr, (void*)(fl_intptr_t)FL_LIGHT2, 0, 0, FL_HELVETICA, 11}, - { "Light 3", 0, nullptr, (void*)(fl_intptr_t)FL_LIGHT3, 0, 0, FL_HELVETICA, 11}, - { nullptr } + { "Foreground Color", 0, 0, (void*)(fl_intptr_t)FL_FOREGROUND_COLOR, 0, 0, FL_HELVETICA, 11}, + { "Background Color", 0, 0, (void*)(fl_intptr_t)FL_BACKGROUND_COLOR, 0, 0, FL_HELVETICA, 11}, + { "Background Color 2", 0, 0, (void*)(fl_intptr_t)FL_BACKGROUND2_COLOR, 0, 0, FL_HELVETICA, 11}, + { "Selection Color", 0, 0, (void*)(fl_intptr_t)FL_SELECTION_COLOR, 0, 0, FL_HELVETICA, 11}, + { "Inactive Color", 0, 0, (void*)(fl_intptr_t)FL_INACTIVE_COLOR, FL_MENU_DIVIDER, 0, FL_HELVETICA, 11}, + { "Black", 0, 0, (void*)(fl_intptr_t)FL_BLACK, 0, 0, FL_HELVETICA, 11}, + { "White", 0, 0, (void*)(fl_intptr_t)FL_WHITE, FL_MENU_DIVIDER, 0, FL_HELVETICA, 11}, + { "Gray 0", 0, 0, (void*)(fl_intptr_t)FL_GRAY0, 0, 0, FL_HELVETICA, 11}, + { "Dark 3", 0, 0, (void*)(fl_intptr_t)FL_DARK3, 0, 0, FL_HELVETICA, 11}, + { "Dark 2", 0, 0, (void*)(fl_intptr_t)FL_DARK2, 0, 0, FL_HELVETICA, 11}, + { "Dark 1", 0, 0, (void*)(fl_intptr_t)FL_DARK1, 0, 0, FL_HELVETICA, 11}, + { "Light 1", 0, 0, (void*)(fl_intptr_t)FL_LIGHT1, 0, 0, FL_HELVETICA, 11}, + { "Light 2", 0, 0, (void*)(fl_intptr_t)FL_LIGHT2, 0, 0, FL_HELVETICA, 11}, + { "Light 3", 0, 0, (void*)(fl_intptr_t)FL_LIGHT3, 0, 0, FL_HELVETICA, 11}, + { 0 } }; void color_common(Fl_Color c) { @@ -956,24 +996,24 @@ static Fl_Button* relative(Fl_Widget* o, int i) { } static Fl_Menu_Item alignmenu[] = { - {"FL_ALIGN_CENTER",0,nullptr,(void*)(fl_intptr_t)(FL_ALIGN_CENTER)}, - {"FL_ALIGN_TOP",0,nullptr,(void*)(fl_intptr_t)(FL_ALIGN_TOP)}, - {"FL_ALIGN_BOTTOM",0,nullptr,(void*)(fl_intptr_t)(FL_ALIGN_BOTTOM)}, - {"FL_ALIGN_LEFT",0,nullptr,(void*)(fl_intptr_t)(FL_ALIGN_LEFT)}, - {"FL_ALIGN_RIGHT",0,nullptr,(void*)(fl_intptr_t)(FL_ALIGN_RIGHT)}, - {"FL_ALIGN_INSIDE",0,nullptr,(void*)(fl_intptr_t)(FL_ALIGN_INSIDE)}, - {"FL_ALIGN_CLIP",0,nullptr,(void*)(fl_intptr_t)(FL_ALIGN_CLIP)}, - {"FL_ALIGN_WRAP",0,nullptr,(void*)(fl_intptr_t)(FL_ALIGN_WRAP)}, - {"FL_ALIGN_TEXT_OVER_IMAGE",0,nullptr,(void*)(fl_intptr_t)(FL_ALIGN_TEXT_OVER_IMAGE)}, - {"FL_ALIGN_TOP_LEFT",0,nullptr,(void*)(fl_intptr_t)(FL_ALIGN_TOP_LEFT)}, - {"FL_ALIGN_TOP_RIGHT",0,nullptr,(void*)(fl_intptr_t)(FL_ALIGN_TOP_RIGHT)}, - {"FL_ALIGN_BOTTOM_LEFT",0,nullptr,(void*)(fl_intptr_t)(FL_ALIGN_BOTTOM_LEFT)}, - {"FL_ALIGN_BOTTOM_RIGHT",0,nullptr,(void*)(fl_intptr_t)(FL_ALIGN_BOTTOM_RIGHT)}, - {"FL_ALIGN_LEFT_TOP",0,nullptr,(void*)(fl_intptr_t)(FL_ALIGN_LEFT_TOP)}, - {"FL_ALIGN_RIGHT_TOP",0,nullptr,(void*)(fl_intptr_t)(FL_ALIGN_RIGHT_TOP)}, - {"FL_ALIGN_LEFT_BOTTOM",0,nullptr,(void*)(fl_intptr_t)(FL_ALIGN_LEFT_BOTTOM)}, - {"FL_ALIGN_RIGHT_BOTTOM",0,nullptr,(void*)(fl_intptr_t)(FL_ALIGN_RIGHT_BOTTOM)}, - {nullptr} + {"FL_ALIGN_CENTER",0,0,(void*)(fl_intptr_t)(FL_ALIGN_CENTER)}, + {"FL_ALIGN_TOP",0,0,(void*)(fl_intptr_t)(FL_ALIGN_TOP)}, + {"FL_ALIGN_BOTTOM",0,0,(void*)(fl_intptr_t)(FL_ALIGN_BOTTOM)}, + {"FL_ALIGN_LEFT",0,0,(void*)(fl_intptr_t)(FL_ALIGN_LEFT)}, + {"FL_ALIGN_RIGHT",0,0,(void*)(fl_intptr_t)(FL_ALIGN_RIGHT)}, + {"FL_ALIGN_INSIDE",0,0,(void*)(fl_intptr_t)(FL_ALIGN_INSIDE)}, + {"FL_ALIGN_CLIP",0,0,(void*)(fl_intptr_t)(FL_ALIGN_CLIP)}, + {"FL_ALIGN_WRAP",0,0,(void*)(fl_intptr_t)(FL_ALIGN_WRAP)}, + {"FL_ALIGN_TEXT_OVER_IMAGE",0,0,(void*)(fl_intptr_t)(FL_ALIGN_TEXT_OVER_IMAGE)}, + {"FL_ALIGN_TOP_LEFT",0,0,(void*)(fl_intptr_t)(FL_ALIGN_TOP_LEFT)}, + {"FL_ALIGN_TOP_RIGHT",0,0,(void*)(fl_intptr_t)(FL_ALIGN_TOP_RIGHT)}, + {"FL_ALIGN_BOTTOM_LEFT",0,0,(void*)(fl_intptr_t)(FL_ALIGN_BOTTOM_LEFT)}, + {"FL_ALIGN_BOTTOM_RIGHT",0,0,(void*)(fl_intptr_t)(FL_ALIGN_BOTTOM_RIGHT)}, + {"FL_ALIGN_LEFT_TOP",0,0,(void*)(fl_intptr_t)(FL_ALIGN_LEFT_TOP)}, + {"FL_ALIGN_RIGHT_TOP",0,0,(void*)(fl_intptr_t)(FL_ALIGN_RIGHT_TOP)}, + {"FL_ALIGN_LEFT_BOTTOM",0,0,(void*)(fl_intptr_t)(FL_ALIGN_LEFT_BOTTOM)}, + {"FL_ALIGN_RIGHT_BOTTOM",0,0,(void*)(fl_intptr_t)(FL_ALIGN_RIGHT_BOTTOM)}, + {0} }; void align_cb(Fl_Button* i, void* v) { @@ -1197,7 +1237,7 @@ void position_group_cb(Fl_Group* g, void* v) { // subtypes: -Fl_Menu_Item* Widget_Node::subtypes() { return nullptr; } +Fl_Menu_Item* Widget_Node::subtypes() { return 0; } //////////////////////////////////////////////////////////////// @@ -1241,9 +1281,9 @@ void leave_live_mode_cb(Fl_Widget*, void*); void live_mode_cb(Fl_Button* o, void *) { /// \todo live mode should end gracefully when the application quits /// or when the user closes the live widget - static Node* live_type = nullptr; - static Fl_Widget* live_widget = nullptr; - static Fl_Window* live_window = nullptr; + static Node* live_type = 0; + static Fl_Widget* live_widget = 0; + static Fl_Window* live_window = 0; if (!current_widget) { o->value(0); @@ -1257,11 +1297,11 @@ void live_mode_cb(Fl_Button* o, void *) { } if (o->value()) { if (numselected == 1) { - Fl_Group::current(nullptr); + Fl_Group::current(0); live_widget = current_widget->enter_live_mode(1); if (live_widget) { live_type = current_widget; - Fl_Group::current(nullptr); + Fl_Group::current(0); int w = live_widget->w(); int h = live_widget->h(); live_window = new Fl_Double_Window(w+20, h+55, "Fluid Live Resize"); @@ -1301,9 +1341,9 @@ void live_mode_cb(Fl_Button* o, void *) { live_window->hide(); Fl::delete_widget(live_window); } - live_type = nullptr; - live_widget = nullptr; - live_window = nullptr; + live_type = 0; + live_widget = 0; + live_window = 0; } } @@ -1313,7 +1353,7 @@ void load_panel() { // find all the Fl_Widget subclasses currently selected: numselected = 0; - current_widget = nullptr; + current_widget = 0; if (Fluid.proj.tree.current) { if (Fluid.proj.tree.current->is_a(FLD_NODE_TYPE_Data)) { current_node = Fluid.proj.tree.current; @@ -1348,7 +1388,7 @@ void load_panel() { tabs_wizard->value(func_tabs); numselected = 1; } else { - current_node = nullptr; + current_node = 0; if (Fluid.proj.tree.current->is_widget()) current_widget=(Widget_Node*)Fluid.proj.tree.current; for (Node* o = Fluid.proj.tree.first; o; o = o->next) { @@ -1429,10 +1469,10 @@ extern void update_codeview_position(); void selection_changed(Node* p) { // store all changes to the current selected objects: if (p && the_panel && the_panel->visible()) { - set_cb(nullptr,nullptr); + set_cb(0,0); // if there was an error, we try to leave the selected set unchanged: if (haderror) { - Node* q = nullptr; + Node* q = 0; for (Node* o = Fluid.proj.tree.first; o; o = o->next) { o->new_selected = o->selected; if (!q && o->selected) q = o; @@ -1444,7 +1484,7 @@ void selection_changed(Node* p) { } } // update the selected flags to new set: - Node* q = nullptr; + Node* q = 0; for (Node* o = Fluid.proj.tree.first; o; o = o->next) { o->selected = o->new_selected; if (!q && o->selected) q = o; @@ -1474,11 +1514,11 @@ int is_name(const char* c) { // number or a field or function. Return name() if not an array entry. const char* array_name(Widget_Node* o) { const char* c = o->name(); - if (!c) return nullptr; + if (!c) return 0; const char* d; for (d = c; *d != '['; d++) { if (!*d) return c; - if (ispunct(*d) && *d!='_') return nullptr; + if (ispunct(*d) && *d!='_') return 0; } int num = atoi(d+1); int sawthis = 0; @@ -1492,7 +1532,7 @@ const char* array_name(Widget_Node* o) { if (!e) continue; if (strncmp(c,e,d-c)) continue; int n1 = atoi(e+(d-c)+1); - if (n1 > num || (n1==num && sawthis)) return nullptr; + if (n1 > num || (n1==num && sawthis)) return 0; } static char buffer[128]; // MRS: we want strncpy() here... @@ -1512,14 +1552,17 @@ int isdeclare(const char* c) { } void Widget_Node::write_static(fld::io::Code_Writer& f) { - std::string t = subclassname(this); - if (subclass().empty() || (is_class() && (t.compare(0, 3, "Fl_")==0))) { + const char* t = subclassname(this); + const char* sc = subclass(); + if (!sc || !sc[0] || (is_class() && strncmp(t, "Fl_", 3)==0)) { f.write_h_once("#include <FL/Fl.H>"); - f.write_h_once("#include <FL/%s.H>", t.c_str()); + f.write_h_once("#include <FL/%s.H>", t); } - for (int n=0; n < NUM_EXTRA_CODE; n++) { - if (!extra_code(n).empty() && isdeclare(extra_code(n).c_str())) - f.write_h_once("%s", extra_code(n).c_str()); + int n; + for (n=0; n < NUM_EXTRA_CODE; n++) { + const char* ec = extra_code(n); + if (ec && ec[0] && isdeclare(ec)) + f.write_h_once("%s", ec); } if (callback() && is_name(callback())) { int write_extern_declaration = 1; @@ -1528,11 +1571,11 @@ void Widget_Node::write_static(fld::io::Code_Writer& f) { if (has_function("static void", buf)) write_extern_declaration = 0; } else { - if (has_toplevel_function(nullptr, buf)) + if (has_toplevel_function(0, buf)) write_extern_declaration = 0; } if (write_extern_declaration) - f.write_h_once("extern void %s(%s*, %s);", callback(), t.c_str(), + f.write_h_once("extern void %s(%s*, %s);", callback(), t, user_data_type() ? user_data_type() : "void*"); } const char* k = class_name(1); @@ -1540,9 +1583,9 @@ void Widget_Node::write_static(fld::io::Code_Writer& f) { if (c && !k && !is_class()) { f.write_c("\n"); if (!public_) f.write_c("static "); - else f.write_h("extern %s *%s;\n", t.c_str(), c); - if (strchr(c, '[') == nullptr) f.write_c("%s *%s=(%s *)0;\n", t.c_str(), c, t.c_str()); - else f.write_c("%s *%s={(%s *)0};\n", t.c_str(), c, t.c_str()); + else f.write_h("extern %s *%s;\n", t, c); + if (strchr(c, '[') == 0) f.write_c("%s *%s=(%s *)0;\n", t, c, t); + else f.write_c("%s *%s={(%s *)0};\n", t, c, t); } if (callback() && !is_name(callback()) && (callback()[0] != '[')) { // see if 'o' or 'v' used, to prevent unused argument warnings: @@ -1557,9 +1600,9 @@ void Widget_Node::write_static(fld::io::Code_Writer& f) { } const char* cn = callback_name(f); if (k) { - f.write_c("\nvoid %s::%s_i(%s*", k, cn, t.c_str()); + f.write_c("\nvoid %s::%s_i(%s*", k, cn, t); } else { - f.write_c("\nstatic void %s(%s*", cn, t.c_str()); + f.write_c("\nstatic void %s(%s*", cn, t); } if (use_o) f.write_c(" o"); const char* ut = user_data_type() ? user_data_type() : "void*"; @@ -1580,9 +1623,9 @@ void Widget_Node::write_static(fld::io::Code_Writer& f) { f.tag(FLD_MERGEBACK_TAG_WIDGET_CALLBACK, FLD_MERGEBACK_TAG_GENERIC, get_uid()); f.write_c("}\n"); if (k) { - f.write_c("void %s::%s(%s* o, %s v) {\n", k, cn, t.c_str(), ut); + f.write_c("void %s::%s(%s* o, %s v) {\n", k, cn, t, ut); f.write_c("%s((%s*)(o", f.indent(1), k); - Node* q = nullptr; + Node* q = 0; for (Node* p = parent; p && p->is_widget(); q = p, p = p->parent) f.write_c("->parent()"); if (!q || !q->is_a(FLD_NODE_TYPE_Widget_Class)) @@ -1601,20 +1644,20 @@ void Widget_Node::write_static(fld::io::Code_Writer& f) { } void Widget_Node::write_code1(fld::io::Code_Writer& f) { - std::string t = subclassname(this); + const char* t = subclassname(this); const char* c = array_name(this); if (c) { if (class_name(1)) { f.write_public(public_); - f.write_h("%s%s *%s;\n", f.indent(1), t.c_str(), c); + f.write_h("%s%s *%s;\n", f.indent(1), t, c); } } if (class_name(1) && callback() && !is_name(callback())) { const char* cn = callback_name(f); const char* ut = user_data_type() ? user_data_type() : "void*"; f.write_public(0); - f.write_h("%sinline void %s_i(%s*, %s);\n", f.indent(1), cn, t.c_str(), ut); - f.write_h("%sstatic void %s(%s*, %s);\n", f.indent(1), cn, t.c_str(), ut); + f.write_h("%sinline void %s_i(%s*, %s);\n", f.indent(1), cn, t, ut); + f.write_h("%sstatic void %s(%s*, %s);\n", f.indent(1), cn, t, ut); } // figure out if local variable will be used (prevent compiler warnings): int wused = !name() && is_a(FLD_NODE_TYPE_Window); @@ -1633,15 +1676,16 @@ void Widget_Node::write_code1(fld::io::Code_Writer& f) { } if (!f.varused) { - for (int n=0; n < NUM_EXTRA_CODE; n++) - if (!extra_code(n).empty() && !isdeclare(extra_code(n).c_str())) + int n; + for (n=0; n < NUM_EXTRA_CODE; n++) { + const char* ec = extra_code(n); + if (ec && ec[0] && !isdeclare(ec)) { int instring = 0; int inname = 0; int incomment = 0; int incppcomment = 0; - std::string code = extra_code(n); - for (ptr = code.c_str(); *ptr; ptr ++) { + for (ptr = ec; *ptr; ptr ++) { if (instring) { if (*ptr == '\\') ptr++; else if (*ptr == '\"') instring = 0; @@ -1673,27 +1717,28 @@ void Widget_Node::write_code1(fld::io::Code_Writer& f) { } } } + } } f.write_c("%s{ ", f.indent()); write_comment_inline_c(f); - if (f.varused) f.write_c("%s* o = ", t.c_str()); + if (f.varused) f.write_c("%s* o = ", t); if (name()) f.write_c("%s = ", name()); if (is_a(FLD_NODE_TYPE_Window)) { // Handle special case where user is faking a Fl_Group type as a window, // there is no 2-argument constructor in that case: - if (t.find("Window")==t.npos) - f.write_c("new %s(0, 0, %d, %d", t.c_str(), o->w(), o->h()); + if (strstr(t, "Window") == 0) + f.write_c("new %s(0, 0, %d, %d", t, o->w(), o->h()); else - f.write_c("new %s(%d, %d", t.c_str(), o->w(), o->h()); + f.write_c("new %s(%d, %d", t, o->w(), o->h()); } else if (is_a(FLD_NODE_TYPE_Menu_Bar) && ((Menu_Bar_Node*)this)->is_sys_menu_bar() && is_in_class()) { f.write_c("(%s*)new %s(%d, %d, %d, %d", - t.c_str(), ((Menu_Bar_Node*)this)->sys_menubar_proxy_name(), + t, ((Menu_Bar_Node*)this)->sys_menubar_proxy_name(), o->x(), o->y(), o->w(), o->h()); } else { - f.write_c("new %s(%d, %d, %d, %d", t.c_str(), o->x(), o->y(), o->w(), o->h()); + f.write_c("new %s(%d, %d, %d, %d", t, o->x(), o->y(), o->w(), o->h()); } if (label() && *label()) { f.write_c(", "); @@ -1727,7 +1772,7 @@ void Widget_Node::write_code1(fld::io::Code_Writer& f) { } void Widget_Node::write_color(fld::io::Code_Writer& f, const char* field, Fl_Color color) { - const char* color_name = nullptr; + const char* color_name = 0; switch (color) { case FL_FOREGROUND_COLOR: color_name = "FL_FOREGROUND_COLOR"; break; case FL_BACKGROUND2_COLOR: color_name = "FL_BACKGROUND2_COLOR"; break; @@ -1769,15 +1814,15 @@ void Widget_Node::write_widget_code(fld::io::Code_Writer& f) { Fl_Widget* tplate = ((Widget_Node*)factory)->o; const char* var = is_class() ? "this" : name() ? name() : "o"; - if (!tooltip().empty()) { + if (tooltip() && tooltip()[0]) { f.write_c("%s%s->tooltip(",f.indent(), var); switch (Fluid.proj.i18n.type) { case FLD_I18N_TYPE_NONE : /* None */ - f.write_cstring(tooltip().c_str()); + f.write_cstring(tooltip()); break; case FLD_I18N_TYPE_GNU : /* GNU gettext */ f.write_c("%s(", Fluid.proj.i18n.gnu_function.c_str()); - f.write_cstring(tooltip().c_str()); + f.write_cstring(tooltip()); f.write_c(")"); break; case FLD_I18N_TYPE_POSIX : /* POSIX catgets */ @@ -1785,7 +1830,7 @@ void Widget_Node::write_widget_code(fld::io::Code_Writer& f) { Fluid.proj.i18n.posix_file.empty() ? "_catalog" : Fluid.proj.i18n.posix_file.c_str(), Fluid.proj.i18n.posix_set.c_str(), msgnum() + 1); - f.write_cstring(tooltip().c_str()); + f.write_cstring(tooltip()); f.write_c(")"); break; } @@ -1796,7 +1841,7 @@ void Widget_Node::write_widget_code(fld::io::Code_Writer& f) { f.write_c("%s%s->type(%d);\n", f.indent(), var, ((Fl_Spinner*)o)->type()); else if (o->type() != tplate->type() && !is_a(FLD_NODE_TYPE_Window)) f.write_c("%s%s->type(%d);\n", f.indent(), var, o->type()); - if (o->box() != tplate->box() || !subclass().empty()) + if (o->box() != tplate->box() || subclass() && subclass()[0]) f.write_c("%s%s->box(FL_%s);\n", f.indent(), var, boxname(o->box())); // write shortcut command if needed @@ -1838,9 +1883,9 @@ void Widget_Node::write_widget_code(fld::io::Code_Writer& f) { if (b->down_box()) f.write_c("%s%s->down_box(FL_%s);\n", f.indent(), var, boxname(b->down_box())); } - if (o->color() != tplate->color() || !subclass().empty()) + if (o->color() != tplate->color() || subclass() && subclass()[0]) write_color(f, "color", o->color()); - if (o->selection_color() != tplate->selection_color() || !subclass().empty()) + if (o->selection_color() != tplate->selection_color() || subclass() && subclass()[0]) write_color(f, "selection_color", o->selection_color()); if (image) { image->write_code(f, bind_image_, var); @@ -1870,14 +1915,14 @@ void Widget_Node::write_widget_code(fld::io::Code_Writer& f) { f.write_c("%s->deimage()->data_h(), 0, 1);\n", var); } } - if (o->labeltype() != tplate->labeltype() || !subclass().empty()) + if (o->labeltype() != tplate->labeltype() || subclass() && subclass()[0]) f.write_c("%s%s->labeltype(FL_%s);\n", f.indent(), var, item_name(labeltypemenu, o->labeltype())); - if (o->labelfont() != tplate->labelfont() || !subclass().empty()) + if (o->labelfont() != tplate->labelfont() || subclass() && subclass()[0]) f.write_c("%s%s->labelfont(%d);\n", f.indent(), var, o->labelfont()); - if (o->labelsize() != tplate->labelsize() || !subclass().empty()) + if (o->labelsize() != tplate->labelsize() || subclass() && subclass()[0]) f.write_c("%s%s->labelsize(%d);\n", f.indent(), var, o->labelsize()); - if (o->labelcolor() != tplate->labelcolor() || !subclass().empty()) + if (o->labelcolor() != tplate->labelcolor() || subclass() && subclass()[0]) write_color(f, "labelcolor", o->labelcolor()); if (o->horizontal_label_margin() != tplate->horizontal_label_margin()) f.write_c("%s%s->horizontal_label_margin(%d);\n", f.indent(), var, o->horizontal_label_margin()); @@ -1946,7 +1991,7 @@ void Widget_Node::write_widget_code(fld::io::Code_Writer& f) { } else if (ud) { f.write_c("%s%s->user_data((void*)(%s));\n", f.indent(), var, ud); } - if (o->align() != tplate->align() || !subclass().empty()) { + if (o->align() != tplate->align() || subclass() && subclass()[0]) { int i = o->align(); f.write_c("%s%s->align(Fl_Align(%s", f.indent(), var, item_name(alignmenu, i & ~FL_ALIGN_INSIDE)); @@ -1954,7 +1999,7 @@ void Widget_Node::write_widget_code(fld::io::Code_Writer& f) { f.write_c("));\n"); } Fl_When ww = o->when(); - if (ww != tplate->when() || !subclass().empty()) + if (ww != tplate->when() || subclass() && subclass()[0]) f.write_c("%s%s->when(%s);\n", f.indent(), var, when_symbol_name(ww)); if (!o->visible() && o->parent()) f.write_c("%s%s->hide();\n", f.indent(), var); @@ -1974,13 +2019,13 @@ void Widget_Node::write_widget_code(fld::io::Code_Writer& f) { void Widget_Node::write_extra_code(fld::io::Code_Writer& f) { for (int n=0; n < NUM_EXTRA_CODE; n++) - if (!extra_code(n).empty() && !isdeclare(extra_code(n).c_str())) - f.write_c("%s%s\n", f.indent(), extra_code(n).c_str()); + if (extra_code(n) && extra_code(n)[0] && !isdeclare(extra_code(n))) + f.write_c("%s%s\n", f.indent(), extra_code(n)); } void Widget_Node::write_block_close(fld::io::Code_Writer& f) { f.indentation--; - f.write_c("%s} // %s* %s\n", f.indent(), subclassname(this).c_str(), + f.write_c("%s} // %s* %s\n", f.indent(), subclassname(this), name() ? name() : "o"); } @@ -1999,11 +2044,11 @@ void Widget_Node::write_properties(fld::io::Project_Writer &f) { case 1: break; case 2: f.write_string("protected"); break; } - if (!tooltip().empty()) { + if (tooltip() && tooltip()[0]) { f.write_string("tooltip"); f.write_word(tooltip()); } - if (!image_name().empty()) { + if (image_name() && image_name()[0]) { if (scale_image_w_ || scale_image_h_) f.write_string("scale_image {%d %d}", scale_image_w_, scale_image_h_); f.write_string("image"); @@ -2011,7 +2056,7 @@ void Widget_Node::write_properties(fld::io::Project_Writer &f) { f.write_string("compress_image %d", compress_image_); } if (bind_image_) f.write_string("bind_image 1"); - if (!inactive_name().empty()) { + if (inactive_name() && inactive_name()[0]) { if (scale_deimage_w_ || scale_deimage_h_) f.write_string("scale_deimage {%d %d}", scale_deimage_w_, scale_deimage_h_); f.write_string("deimage"); @@ -2113,12 +2158,12 @@ void Widget_Node::write_properties(fld::io::Project_Writer &f) { if (resizable()) f.write_string("resizable"); if (hotspot()) f.write_string(is_a(FLD_NODE_TYPE_Menu_Item) ? "divider" : "hotspot"); if (menu_headline()) f.write_string("headline"); - for (int n=0; n < NUM_EXTRA_CODE; n++) if (!extra_code(n).empty()) { + for (int n=0; n < NUM_EXTRA_CODE; n++) if (extra_code(n) && extra_code(n)[0]) { f.write_indent(level+1); f.write_string("code%d",n); - f.write_word(extra_code(n).c_str()); + f.write_word(extra_code(n)); } - if (!subclass().empty()) { + if (subclass() && subclass()[0]) { f.write_indent(level+1); f.write_string("class"); f.write_word(subclass()); @@ -2153,11 +2198,11 @@ void Widget_Node::read_property(fld::io::Project_Reader &f, const char* c) { image_name(f.read_word()); // starting in 2023, `image` is always followed by `compress_image` // the code below is for compatibility with older .fl files - std::string ext = fl_filename_ext_str(image_name()); - if ( (ext != ".jpg") - && (ext != ".png") - && (ext != ".svg") - && (ext != ".svgz")) + const char *ext = fl_filename_ext(image_name()); + if ( (strcmp(ext, ".jpg") != 0) + && (strcmp(ext, ".png") != 0) + && (strcmp(ext, ".svg") != 0) + && (strcmp(ext, ".svgz") != 0)) compress_image_ = 0; // if it is neither of those, default to uncompressed } else if (!strcmp(c,"bind_image")) { bind_image_ = (int)atol(f.read_word()); @@ -2172,11 +2217,11 @@ void Widget_Node::read_property(fld::io::Project_Reader &f, const char* c) { inactive_name(f.read_word()); // starting in 2023, `deimage` is always followed by `compress_deimage` // the code below is for compatibility with older .fl files - std::string ext = fl_filename_ext_str(inactive_name()); - if ( (ext != ".jpg") - && (ext != ".png") - && (ext != ".svg") - && (ext != ".svgz")) + const char *ext = fl_filename_ext(inactive_name()); + if ( (strcmp(ext, ".jpg") != 0) + && (strcmp(ext, ".png") != 0) + && (strcmp(ext, ".svg") != 0) + && (strcmp(ext, ".svgz") != 0)) compress_deimage_ = 0; // if it is neither of those, default to uncompressed } else if (!strcmp(c,"bind_deimage")) { bind_deimage_ = (int)atol(f.read_word()); @@ -2258,19 +2303,19 @@ void Widget_Node::read_property(fld::io::Project_Reader &f, const char* c) { } else if (!strcmp(c,"when")) { if (sscanf(f.read_word(),"%d",&x) == 1) o->when(x); } else if (!strcmp(c,"minimum")) { - if (is_a(FLD_NODE_TYPE_Valuator_)) ((Fl_Valuator*)o)->minimum(strtod(f.read_word(),nullptr)); - if (is_a(FLD_NODE_TYPE_Spinner)) ((Fl_Spinner*)o)->minimum(strtod(f.read_word(),nullptr)); + if (is_a(FLD_NODE_TYPE_Valuator_)) ((Fl_Valuator*)o)->minimum(strtod(f.read_word(),0)); + if (is_a(FLD_NODE_TYPE_Spinner)) ((Fl_Spinner*)o)->minimum(strtod(f.read_word(),0)); } else if (!strcmp(c,"maximum")) { - if (is_a(FLD_NODE_TYPE_Valuator_)) ((Fl_Valuator*)o)->maximum(strtod(f.read_word(),nullptr)); - if (is_a(FLD_NODE_TYPE_Spinner)) ((Fl_Spinner*)o)->maximum(strtod(f.read_word(),nullptr)); + if (is_a(FLD_NODE_TYPE_Valuator_)) ((Fl_Valuator*)o)->maximum(strtod(f.read_word(),0)); + if (is_a(FLD_NODE_TYPE_Spinner)) ((Fl_Spinner*)o)->maximum(strtod(f.read_word(),0)); } else if (!strcmp(c,"step")) { - if (is_a(FLD_NODE_TYPE_Valuator_)) ((Fl_Valuator*)o)->step(strtod(f.read_word(),nullptr)); - if (is_a(FLD_NODE_TYPE_Spinner)) ((Fl_Spinner*)o)->step(strtod(f.read_word(),nullptr)); + if (is_a(FLD_NODE_TYPE_Valuator_)) ((Fl_Valuator*)o)->step(strtod(f.read_word(),0)); + if (is_a(FLD_NODE_TYPE_Spinner)) ((Fl_Spinner*)o)->step(strtod(f.read_word(),0)); } else if (!strcmp(c,"value")) { - if (is_a(FLD_NODE_TYPE_Valuator_)) ((Fl_Valuator*)o)->value(strtod(f.read_word(),nullptr)); - if (is_a(FLD_NODE_TYPE_Spinner)) ((Fl_Spinner*)o)->value(strtod(f.read_word(),nullptr)); + if (is_a(FLD_NODE_TYPE_Valuator_)) ((Fl_Valuator*)o)->value(strtod(f.read_word(),0)); + if (is_a(FLD_NODE_TYPE_Spinner)) ((Fl_Spinner*)o)->value(strtod(f.read_word(),0)); } else if ( (!strcmp(c,"slider_size") || !strcmp(c,"size")) && is_a(FLD_NODE_TYPE_Slider)) { - ((Fl_Slider*)o)->slider_size(strtod(f.read_word(),nullptr)); + ((Fl_Slider*)o)->slider_size(strtod(f.read_word(),0)); } else if (!strcmp(c,"textfont")) { if (sscanf(f.read_word(),"%d",&x) == 1) {ft=(Fl_Font)x; textstuff(1,ft,s,cc);} } else if (!strcmp(c,"textsize")) { @@ -2290,7 +2335,7 @@ void Widget_Node::read_property(fld::io::Project_Reader &f, const char* c) { } else if (!strcmp(c,"class")) { subclass(f.read_word()); } else if (!strcmp(c,"shortcut")) { - int shortcut = (int)strtol(f.read_word(),nullptr,0); + int shortcut = (int)strtol(f.read_word(),0,0); if (is_button()) ((Fl_Button*)o)->shortcut(shortcut); else if (is_a(FLD_NODE_TYPE_Input)) ((Fl_Input_*)o)->shortcut(shortcut); else if (is_a(FLD_NODE_TYPE_Value_Input)) ((Fl_Value_Input*)o)->shortcut(shortcut); @@ -2312,24 +2357,24 @@ void Widget_Node::read_property(fld::io::Project_Reader &f, const char* c) { Fl_Menu_Item boxmenu1[] = { // these extra ones are for looking up fdesign saved strings: - {"NO_FRAME", 0,nullptr,(void *)FL_NO_BOX}, - {"ROUNDED3D_UPBOX", 0,nullptr,(void *)FL_ROUND_UP_BOX}, - {"ROUNDED3D_DOWNBOX", 0,nullptr,(void *)FL_ROUND_DOWN_BOX}, - {"OVAL3D_UPBOX", 0,nullptr,(void *)FL_ROUND_UP_BOX}, - {"OVAL3D_DOWNBOX", 0,nullptr,(void *)FL_ROUND_DOWN_BOX}, - {"0", 0,nullptr,(void *)ZERO_ENTRY}, - {"1", 0,nullptr,(void *)FL_UP_BOX}, - {"2", 0,nullptr,(void *)FL_DOWN_BOX}, - {"3", 0,nullptr,(void *)FL_FLAT_BOX}, - {"4", 0,nullptr,(void *)FL_BORDER_BOX}, - {"5", 0,nullptr,(void *)FL_SHADOW_BOX}, - {"6", 0,nullptr,(void *)FL_FRAME_BOX}, - {"7", 0,nullptr,(void *)FL_ROUNDED_BOX}, - {"8", 0,nullptr,(void *)FL_RFLAT_BOX}, - {"9", 0,nullptr,(void *)FL_RSHADOW_BOX}, - {"10", 0,nullptr,(void *)FL_UP_FRAME}, - {"11", 0,nullptr,(void *)FL_DOWN_FRAME}, - {nullptr}}; + {"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}}; int lookup_symbol(const char *, int &, int numberok = 0); @@ -2425,7 +2470,7 @@ int Widget_Node::read_fdesign(const char* propname, const char* value) { } void leave_live_mode_cb(Fl_Widget*, void*) { - live_mode_cb(nullptr, nullptr); + live_mode_cb(0, 0); } Fl_Widget* Widget_Node::enter_live_mode(int) { @@ -2472,10 +2517,10 @@ void Widget_Node::copy_properties() { // copy all attributes common to all widget types Fl_Widget* w = live_widget; w->label(o->label()); - if (tooltip().empty()) - w->tooltip(nullptr); + if ((!tooltip() || !tooltip()[0])) + w->tooltip(0); else - w->copy_tooltip(tooltip().c_str()); + w->copy_tooltip(tooltip()); w->type(o->type()); w->box(o->box()); w->color(o->color()); |
