From 496289fd3566c2bcbb229b1cb7280fc6eeadf9e7 Mon Sep 17 00:00:00 2001 From: Matthias Melcher Date: Sat, 26 Aug 2023 17:58:10 +0200 Subject: [PATCH] FLUID: simplifies filename handling --- fluid/Fd_Snap_Action.cxx | 13 +++++-------- fluid/Fd_Snap_Action.h | 8 +++++--- fluid/alignment_panel.cxx | 21 ++++----------------- fluid/alignment_panel.fl | 26 +++++++------------------- fluid/fluid.cxx | 8 ++------ 5 files changed, 23 insertions(+), 53 deletions(-) diff --git a/fluid/Fd_Snap_Action.cxx b/fluid/Fd_Snap_Action.cxx index 401ae856f..c1ac3982b 100644 --- a/fluid/Fd_Snap_Action.cxx +++ b/fluid/Fd_Snap_Action.cxx @@ -587,8 +587,7 @@ Fd_Layout_List::Fd_Layout_List() list_capacity_(2), list_is_static_(true), current_suite_(0), - current_preset_(0), - filename_(NULL) + current_preset_(0) { fl_add_symbol("fd_beaker", fd_beaker, 1); fl_add_symbol("fd_user", fd_user, 1); @@ -611,7 +610,6 @@ Fd_Layout_List::~Fd_Layout_List() { } ::free(list_); } - if (filename_) ::free(filename_); } /** @@ -651,9 +649,9 @@ void Fd_Layout_List::update_menu_labels() { /** Load all user layouts from the FLUID user preferences. */ -int Fd_Layout_List::load(const char *filename) { +int Fd_Layout_List::load(const Fl_String &filename) { remove_all(FD_STORE_FILE); - Fl_Preferences prefs(filename, "layout.fluid.fltk.org", NULL); + Fl_Preferences prefs(filename.c_str(), "layout.fluid.fltk.org", NULL); read(prefs, FD_STORE_FILE); return 0; } @@ -661,10 +659,9 @@ int Fd_Layout_List::load(const char *filename) { /** Save all user layouts to the FLUID user preferences. */ -int Fd_Layout_List::save(const char *filename) { +int Fd_Layout_List::save(const Fl_String &filename) { assert(this); - assert(filename); - Fl_Preferences prefs(filename, "layout.fluid.fltk.org", NULL); + Fl_Preferences prefs(filename.c_str(), "layout.fluid.fltk.org", NULL); prefs.clear(); write(prefs, FD_STORE_FILE); return 0; diff --git a/fluid/Fd_Snap_Action.h b/fluid/Fd_Snap_Action.h index e0c99b273..1355332a9 100644 --- a/fluid/Fd_Snap_Action.h +++ b/fluid/Fd_Snap_Action.h @@ -19,6 +19,8 @@ #include "Fl_Window_Type.h" +#include + struct Fl_Menu_Item; extern Fl_Menu_Item main_layout_submenu_[]; @@ -126,7 +128,7 @@ public: bool list_is_static_; int current_suite_; int current_preset_; - char *filename_; + Fl_String filename_; public: Fd_Layout_List(); ~Fd_Layout_List(); @@ -142,8 +144,8 @@ public: void rename(const char *name); void capacity(int); - int load(const char *filename); - int save(const char *filename); + int load(const Fl_String &filename); + int save(const Fl_String &filename); void write(Fl_Preferences &prefs, int storage); void read(Fl_Preferences &prefs, int storage); void write(Fd_Project_Writer*); diff --git a/fluid/alignment_panel.cxx b/fluid/alignment_panel.cxx index fa01f5e7e..81cd96b29 100644 --- a/fluid/alignment_panel.cxx +++ b/fluid/alignment_panel.cxx @@ -482,26 +482,13 @@ static void cb_w_layout_menu_save(Fl_Menu_*, void*) { fnfc.type(Fl_Native_File_Chooser::BROWSE_SAVE_FILE); fnfc.options(Fl_Native_File_Chooser::SAVEAS_CONFIRM | Fl_Native_File_Chooser::USE_FILTER_EXT); fnfc.filter("FLUID Layouts\t*.fll\n"); - if (g_layout_list.filename_) { - char *fn = fl_strdup(g_layout_list.filename_); - char *name = (char*)fl_filename_name(fn); - if (name > fn) { - name[-1] = 0; - fnfc.directory(fn); - fnfc.preset_file(name); - } else if (name) { - fnfc.preset_file(name); - } else { - fnfc.preset_file(""); - } - ::free(fn); - } + Fl_String filename = g_layout_list.filename_; + fnfc.directory(fl_filename_path(filename).c_str()); + fnfc.preset_file(fl_filename_name(filename).c_str()); if (fnfc.show() != 0) return; const char *new_filename = fnfc.filename(); if (!new_filename) return; - if (g_layout_list.filename_) - ::free(g_layout_list.filename_); - g_layout_list.filename_ = fl_strdup(new_filename); + g_layout_list.filename_ = new_filename; g_layout_list.save(new_filename); } diff --git a/fluid/alignment_panel.fl b/fluid/alignment_panel.fl index c7eea9bd7..1ff9d2c99 100644 --- a/fluid/alignment_panel.fl +++ b/fluid/alignment_panel.fl @@ -116,7 +116,7 @@ Function {make_settings_window()} {open xywh {10 10 320 530} selection_color 12 labelsize 11 labelcolor 255 } { Fl_Group {} { - label General open + label General open selected image {icons/general_64.png} compress_image 1 xywh {10 60 320 480} labelsize 11 code0 {o->image()->scale(36, 24);} } { @@ -372,7 +372,7 @@ g_layout_list.update_dialogs();} w_layout_menu_delete->activate(); } w_layout_menu_storage[suite.storage_]->setonly(); -}} +}} open xywh {296 78 24 24} } { MenuItem w_layout_menu_rename { @@ -440,25 +440,13 @@ g_layout_list.update_dialogs();} fnfc.type(Fl_Native_File_Chooser::BROWSE_SAVE_FILE); fnfc.options(Fl_Native_File_Chooser::SAVEAS_CONFIRM | Fl_Native_File_Chooser::USE_FILTER_EXT); fnfc.filter("FLUID Layouts\\t*.fll\\n"); - if (g_layout_list.filename_) { - char *fn = fl_strdup(g_layout_list.filename_); - char *name = (char*)fl_filename_name(g_layout_list.filename_); - if (name > fn) { - name[-1] = 0; - fnfc.directory(fn); - fnfc.preset_file(name); - ::free(fn); - } else if (name) { - fnfc.preset_file(name); - ::free(fn); - } - } + Fl_String filename = g_layout_list.filename_; + fnfc.directory(fl_filename_path(filename).c_str()); + fnfc.preset_file(fl_filename_name(filename).c_str()); if (fnfc.show() != 0) return; const char *new_filename = fnfc.filename(); if (!new_filename) return; - if (g_layout_list.filename_) - ::free(g_layout_list.filename_); - g_layout_list.filename_ = fl_strdup(new_filename); + g_layout_list.filename_ = new_filename; g_layout_list.save(new_filename);} xywh {0 0 31 20} divider code0 {\#include } @@ -988,7 +976,7 @@ Function {make_shell_window()} {open } { Fl_Button {} { label Clear - callback {shell_run_terminal->clear();} selected + callback {shell_run_terminal->clear();} xywh {10 395 94 25} } Fl_Box {} { diff --git a/fluid/fluid.cxx b/fluid/fluid.cxx index 21ce8093a..aa1f5c1e4 100644 --- a/fluid/fluid.cxx +++ b/fluid/fluid.cxx @@ -1040,9 +1040,7 @@ int write_code_files() { char cname[FL_PATH_MAX+1]; char hname[FL_PATH_MAX+1]; g_project.basename = fl_filename_name(filename); - g_project.basename.resize(FL_PATH_MAX); - fl_filename_setext(g_project.basename.data(), FL_PATH_MAX, ""); - g_project.basename.resize(g_project.basename.strlen()); + g_project.basename = fl_filename_setext(g_project.basename, ""); if (g_project.code_file_name[0] == '.' && strchr(g_project.code_file_name.c_str(), '/') == NULL) { strlcpy(cname, fl_filename_name(filename), FL_PATH_MAX); fl_filename_setext(cname, FL_PATH_MAX, g_project.code_file_name.c_str()); @@ -1962,9 +1960,7 @@ void update_sourceview_cb(Fl_Button*, void*) sv_strings->scroll(top, 0); } else if (sv_source->visible_r() || sv_header->visible_r()) { g_project.basename = fl_filename_name(sv_source_filename); - g_project.basename.resize(FL_PATH_MAX); - fl_filename_setext(g_project.basename.data(), FL_PATH_MAX, ""); - g_project.basename.resize(g_project.basename.strlen()); + g_project.basename = fl_filename_setext(g_project.basename, ""); Fl_String code_file_name_bak = g_project.code_file_name; g_project.code_file_name = sv_source_filename; Fl_String header_file_name_bak = g_project.header_file_name;