FLUID: simplifies filename handling

This commit is contained in:
Matthias Melcher 2023-08-26 17:58:10 +02:00
parent 5da15de174
commit 496289fd35
5 changed files with 23 additions and 53 deletions

View File

@ -587,8 +587,7 @@ Fd_Layout_List::Fd_Layout_List()
list_capacity_(2), list_capacity_(2),
list_is_static_(true), list_is_static_(true),
current_suite_(0), current_suite_(0),
current_preset_(0), current_preset_(0)
filename_(NULL)
{ {
fl_add_symbol("fd_beaker", fd_beaker, 1); fl_add_symbol("fd_beaker", fd_beaker, 1);
fl_add_symbol("fd_user", fd_user, 1); fl_add_symbol("fd_user", fd_user, 1);
@ -611,7 +610,6 @@ Fd_Layout_List::~Fd_Layout_List() {
} }
::free(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. 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); 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); read(prefs, FD_STORE_FILE);
return 0; return 0;
} }
@ -661,10 +659,9 @@ int Fd_Layout_List::load(const char *filename) {
/** /**
Save all user layouts to the FLUID user preferences. 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(this);
assert(filename); Fl_Preferences prefs(filename.c_str(), "layout.fluid.fltk.org", NULL);
Fl_Preferences prefs(filename, "layout.fluid.fltk.org", NULL);
prefs.clear(); prefs.clear();
write(prefs, FD_STORE_FILE); write(prefs, FD_STORE_FILE);
return 0; return 0;

View File

@ -19,6 +19,8 @@
#include "Fl_Window_Type.h" #include "Fl_Window_Type.h"
#include <FL/Fl_String.H>
struct Fl_Menu_Item; struct Fl_Menu_Item;
extern Fl_Menu_Item main_layout_submenu_[]; extern Fl_Menu_Item main_layout_submenu_[];
@ -126,7 +128,7 @@ public:
bool list_is_static_; bool list_is_static_;
int current_suite_; int current_suite_;
int current_preset_; int current_preset_;
char *filename_; Fl_String filename_;
public: public:
Fd_Layout_List(); Fd_Layout_List();
~Fd_Layout_List(); ~Fd_Layout_List();
@ -142,8 +144,8 @@ public:
void rename(const char *name); void rename(const char *name);
void capacity(int); void capacity(int);
int load(const char *filename); int load(const Fl_String &filename);
int save(const char *filename); int save(const Fl_String &filename);
void write(Fl_Preferences &prefs, int storage); void write(Fl_Preferences &prefs, int storage);
void read(Fl_Preferences &prefs, int storage); void read(Fl_Preferences &prefs, int storage);
void write(Fd_Project_Writer*); void write(Fd_Project_Writer*);

View File

@ -482,26 +482,13 @@ static void cb_w_layout_menu_save(Fl_Menu_*, void*) {
fnfc.type(Fl_Native_File_Chooser::BROWSE_SAVE_FILE); 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.options(Fl_Native_File_Chooser::SAVEAS_CONFIRM | Fl_Native_File_Chooser::USE_FILTER_EXT);
fnfc.filter("FLUID Layouts\t*.fll\n"); fnfc.filter("FLUID Layouts\t*.fll\n");
if (g_layout_list.filename_) { Fl_String filename = g_layout_list.filename_;
char *fn = fl_strdup(g_layout_list.filename_); fnfc.directory(fl_filename_path(filename).c_str());
char *name = (char*)fl_filename_name(fn); fnfc.preset_file(fl_filename_name(filename).c_str());
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);
}
if (fnfc.show() != 0) return; if (fnfc.show() != 0) return;
const char *new_filename = fnfc.filename(); const char *new_filename = fnfc.filename();
if (!new_filename) return; if (!new_filename) return;
if (g_layout_list.filename_) g_layout_list.filename_ = new_filename;
::free(g_layout_list.filename_);
g_layout_list.filename_ = fl_strdup(new_filename);
g_layout_list.save(new_filename); g_layout_list.save(new_filename);
} }

View File

@ -116,7 +116,7 @@ Function {make_settings_window()} {open
xywh {10 10 320 530} selection_color 12 labelsize 11 labelcolor 255 xywh {10 10 320 530} selection_color 12 labelsize 11 labelcolor 255
} { } {
Fl_Group {} { Fl_Group {} {
label General open label General open selected
image {icons/general_64.png} compress_image 1 xywh {10 60 320 480} labelsize 11 image {icons/general_64.png} compress_image 1 xywh {10 60 320 480} labelsize 11
code0 {o->image()->scale(36, 24);} code0 {o->image()->scale(36, 24);}
} { } {
@ -372,7 +372,7 @@ g_layout_list.update_dialogs();}
w_layout_menu_delete->activate(); w_layout_menu_delete->activate();
} }
w_layout_menu_storage[suite.storage_]->setonly(); w_layout_menu_storage[suite.storage_]->setonly();
}} }} open
xywh {296 78 24 24} xywh {296 78 24 24}
} { } {
MenuItem w_layout_menu_rename { MenuItem w_layout_menu_rename {
@ -440,25 +440,13 @@ g_layout_list.update_dialogs();}
fnfc.type(Fl_Native_File_Chooser::BROWSE_SAVE_FILE); 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.options(Fl_Native_File_Chooser::SAVEAS_CONFIRM | Fl_Native_File_Chooser::USE_FILTER_EXT);
fnfc.filter("FLUID Layouts\\t*.fll\\n"); fnfc.filter("FLUID Layouts\\t*.fll\\n");
if (g_layout_list.filename_) { Fl_String filename = g_layout_list.filename_;
char *fn = fl_strdup(g_layout_list.filename_); fnfc.directory(fl_filename_path(filename).c_str());
char *name = (char*)fl_filename_name(g_layout_list.filename_); fnfc.preset_file(fl_filename_name(filename).c_str());
if (name > fn) {
name[-1] = 0;
fnfc.directory(fn);
fnfc.preset_file(name);
::free(fn);
} else if (name) {
fnfc.preset_file(name);
::free(fn);
}
}
if (fnfc.show() != 0) return; if (fnfc.show() != 0) return;
const char *new_filename = fnfc.filename(); const char *new_filename = fnfc.filename();
if (!new_filename) return; if (!new_filename) return;
if (g_layout_list.filename_) g_layout_list.filename_ = new_filename;
::free(g_layout_list.filename_);
g_layout_list.filename_ = fl_strdup(new_filename);
g_layout_list.save(new_filename);} g_layout_list.save(new_filename);}
xywh {0 0 31 20} divider xywh {0 0 31 20} divider
code0 {\#include <FL/Fl_Native_File_Chooser.H>} code0 {\#include <FL/Fl_Native_File_Chooser.H>}
@ -988,7 +976,7 @@ Function {make_shell_window()} {open
} { } {
Fl_Button {} { Fl_Button {} {
label Clear label Clear
callback {shell_run_terminal->clear();} selected callback {shell_run_terminal->clear();}
xywh {10 395 94 25} xywh {10 395 94 25}
} }
Fl_Box {} { Fl_Box {} {

View File

@ -1040,9 +1040,7 @@ int write_code_files() {
char cname[FL_PATH_MAX+1]; char cname[FL_PATH_MAX+1];
char hname[FL_PATH_MAX+1]; char hname[FL_PATH_MAX+1];
g_project.basename = fl_filename_name(filename); g_project.basename = fl_filename_name(filename);
g_project.basename.resize(FL_PATH_MAX); g_project.basename = fl_filename_setext(g_project.basename, "");
fl_filename_setext(g_project.basename.data(), FL_PATH_MAX, "");
g_project.basename.resize(g_project.basename.strlen());
if (g_project.code_file_name[0] == '.' && strchr(g_project.code_file_name.c_str(), '/') == NULL) { 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); strlcpy(cname, fl_filename_name(filename), FL_PATH_MAX);
fl_filename_setext(cname, FL_PATH_MAX, g_project.code_file_name.c_str()); 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); sv_strings->scroll(top, 0);
} else if (sv_source->visible_r() || sv_header->visible_r()) { } else if (sv_source->visible_r() || sv_header->visible_r()) {
g_project.basename = fl_filename_name(sv_source_filename); g_project.basename = fl_filename_name(sv_source_filename);
g_project.basename.resize(FL_PATH_MAX); g_project.basename = fl_filename_setext(g_project.basename, "");
fl_filename_setext(g_project.basename.data(), FL_PATH_MAX, "");
g_project.basename.resize(g_project.basename.strlen());
Fl_String code_file_name_bak = g_project.code_file_name; Fl_String code_file_name_bak = g_project.code_file_name;
g_project.code_file_name = sv_source_filename; g_project.code_file_name = sv_source_filename;
Fl_String header_file_name_bak = g_project.header_file_name; Fl_String header_file_name_bak = g_project.header_file_name;