From 83e8e351c39166a7c0aec6256b299ee8bdf3a375 Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Wed, 10 Mar 2010 07:04:26 +0000 Subject: [PATCH] - add watch in menu --- Common/DefaultOptions.h | 2 +- Fltk/fieldWindow.cpp | 2 +- Fltk/fileDialogs.cpp | 35 ++++++++++++++++++++++------------- Fltk/fileDialogs.h | 9 ++++++++- Fltk/menuWindow.cpp | 26 ++++++++++++++++++-------- Fltk/messageWindow.cpp | 2 +- Fltk/projectionEditor.cpp | 8 ++++---- Fltk/solverWindow.cpp | 6 +++--- 8 files changed, 58 insertions(+), 32 deletions(-) diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h index c4d4e653e7..9ebe7dd8b3 100644 --- a/Common/DefaultOptions.h +++ b/Common/DefaultOptions.h @@ -99,7 +99,7 @@ StringXString GeneralOptions_String[] = { #endif "System command to launch a web browser" }, - { F|0, "WatchFilePattern", opt_general_watch_file_pattern , "" , + { F, "WatchFilePattern", opt_general_watch_file_pattern , "" , "Pattern of files to merge as they become available"}, { 0, 0 , 0 , "" , 0 } diff --git a/Fltk/fieldWindow.cpp b/Fltk/fieldWindow.cpp index 65225863fa..56a37a9ff3 100644 --- a/Fltk/fieldWindow.cpp +++ b/Fltk/fieldWindow.cpp @@ -83,7 +83,7 @@ static void field_put_on_view_cb(Fl_Widget *w, void *data) static void field_select_file_cb(Fl_Widget *w, void *data) { Fl_Input *input = (Fl_Input*)data; - int ret = fileChooser(0, 0, "File selection", "", input->value()); + int ret = fileChooser(FILE_CHOOSER_SINGLE, "Choose", "", input->value()); if(ret){ input->value(fileChooserGetName(0).c_str()); input->set_changed(); diff --git a/Fltk/fileDialogs.cpp b/Fltk/fileDialogs.cpp index d1d62cd1ae..f29d1b2823 100644 --- a/Fltk/fileDialogs.cpp +++ b/Fltk/fileDialogs.cpp @@ -22,6 +22,7 @@ #include "GmshMessage.h" #include "GmshDefines.h" #include "FlGui.h" +#include "fileDialogs.h" #include "CreateFile.h" #include "Options.h" #include "GModel.h" @@ -75,7 +76,7 @@ static flFileChooser *fc = 0; #endif -int fileChooser(int multi, int create, const char *message, +int fileChooser(FILE_CHOOSER_TYPE type, const char *message, const char *filter, const char *fname) { static char thefilter[1024] = ""; @@ -89,12 +90,16 @@ int fileChooser(int multi, int create, const char *message, #if defined(HAVE_NATIVE_FILE_CHOOSER) if(!fc) fc = new Fl_Native_File_Chooser(); - if(multi) - fc->type(Fl_Native_File_Chooser::BROWSE_MULTI_FILE); - else if(create) - fc->type(Fl_Native_File_Chooser::BROWSE_SAVE_FILE); - else - fc->type(Fl_Native_File_Chooser::BROWSE_FILE); + switch(type){ + case FILE_CHOOSER_MULTI: + fc->type(Fl_Native_File_Chooser::BROWSE_MULTI_FILE); break; + case FILE_CHOOSER_CREATE: + fc->type(Fl_Native_File_Chooser::BROWSE_SAVE_FILE); break; + case FILE_CHOOSER_DIRECTORY: + fc->type(Fl_Native_File_Chooser::BROWSE_DIRECTORY); break; + default: + fc->type(Fl_Native_File_Chooser::BROWSE_FILE); break; + } fc->title(message); fc->filter(filter); fc->filter_value(thefilterindex); @@ -119,12 +124,16 @@ int fileChooser(int multi, int create, const char *message, fc->position(CTX::instance()->fileChooserPosition[0], CTX::instance()->fileChooserPosition[1]); } - if(multi) - fc->type(Fl_File_Chooser::MULTI); - else if(create) - fc->type(Fl_File_Chooser::CREATE); - else - fc->type(Fl_File_Chooser::SINGLE); + switch(type){ + case FILE_CHOOSER_MULTI: + fc->type(Fl_File_Chooser::MULTI); break; + case FILE_CHOOSER_CREATE: + fc->type(Fl_File_Chooser::CREATE); break; + case FILE_CHOOSER_DIRECTORY: + fc->type(Fl_File_Chooser::DIRECTORY); break; + default: + fc->type(Fl_File_Chooser::SINGLE); break; + } fc->label(message); fc->filter(thefilter); fc->filter_value(thefilterindex); diff --git a/Fltk/fileDialogs.h b/Fltk/fileDialogs.h index e1dab6f5e8..5c1b92eda9 100644 --- a/Fltk/fileDialogs.h +++ b/Fltk/fileDialogs.h @@ -8,7 +8,14 @@ #include <string> -int fileChooser(int multi, int create, const char *message, +typedef enum { + FILE_CHOOSER_SINGLE, + FILE_CHOOSER_MULTI, + FILE_CHOOSER_CREATE, + FILE_CHOOSER_DIRECTORY +} FILE_CHOOSER_TYPE; + +int fileChooser(FILE_CHOOSER_TYPE type, const char *message, const char *pat, const char *fname=NULL); std::string fileChooserGetName(int num); int fileChooserGetFilter(); diff --git a/Fltk/menuWindow.cpp b/Fltk/menuWindow.cpp index 71873fc7a3..cdb68cc71a 100644 --- a/Fltk/menuWindow.cpp +++ b/Fltk/menuWindow.cpp @@ -55,7 +55,7 @@ static void file_new_cb(Fl_Widget *w, void *data) { test: - if(fileChooser(0, 1, "New", "*")) { + if(fileChooser(FILE_CHOOSER_CREATE, "New", "*")) { std::string name = fileChooserGetName(1); if(!StatFile(name)){ if(fl_choice("File '%s' already exists.\n\nDo you want to erase it?", @@ -122,7 +122,7 @@ static const char *input_formats = static void file_open_cb(Fl_Widget *w, void *data) { int n = PView::list.size(); - if(fileChooser(0, 0, "Open", input_formats)) { + if(fileChooser(FILE_CHOOSER_SINGLE, "Open", input_formats)) { OpenProject(fileChooserGetName(1)); drawContext::global()->draw(); } @@ -133,7 +133,7 @@ static void file_open_cb(Fl_Widget *w, void *data) static void file_merge_cb(Fl_Widget *w, void *data) { int n = PView::list.size(); - int f = fileChooser(1, 0, "Merge", input_formats); + int f = fileChooser(FILE_CHOOSER_MULTI, "Merge", input_formats); if(f) { for(int i = 1; i <= f; i++) MergeFile(fileChooserGetName(i)); @@ -355,7 +355,7 @@ static void file_save_as_cb(Fl_Widget *w, void *data) } test: - if(fileChooser(0, 1, "Save As", pat)) { + if(fileChooser(FILE_CHOOSER_CREATE, "Save As", pat)) { std::string name = fileChooserGetName(1); if(CTX::instance()->confirmOverwrite) { if(!StatFile(name)) @@ -394,7 +394,8 @@ static void file_options_save_cb(Fl_Widget *w, void *data) static void file_rename_cb(Fl_Widget *w, void *data) { test: - if(fileChooser(0, 1, "Rename", "*", GModel::current()->getFileName().c_str())) { + if(fileChooser(FILE_CHOOSER_CREATE, "Rename", "*", + GModel::current()->getFileName().c_str())) { std::string name = fileChooserGetName(1); if(CTX::instance()->confirmOverwrite) { if(!StatFile(name)) @@ -417,6 +418,12 @@ void file_quit_cb(Fl_Widget *w, void *data) void file_watch_cb(Fl_Widget *w, void *data) { + if(w){ + if(fileChooser(FILE_CHOOSER_CREATE, "Watch Pattern", "*")) { + CTX::instance()->watchFilePattern = fileChooserGetName(1); + } + } + if(CTX::instance()->watchFilePattern.empty()) return; std::string pattern = FixRelativePath @@ -2154,7 +2161,8 @@ static void view_save_as(int index, const char *title, int format) PView *view = PView::list[index]; test: - if(fileChooser(0, 1, title, "*", view->getData()->getFileName().c_str())){ + if(fileChooser(FILE_CHOOSER_CREATE, title, "*", + view->getData()->getFileName().c_str())){ std::string name = fileChooserGetName(1); if(CTX::instance()->confirmOverwrite) { if(!StatFile(name)) @@ -2280,7 +2288,7 @@ static Fl_Menu_Item bar_table[] = { {"&File", 0, 0, 0, FL_SUBMENU}, {"&New...", FL_CTRL+'n', (Fl_Callback *)file_new_cb, 0}, {"&Open...", FL_CTRL+'o', (Fl_Callback *)file_open_cb, 0}, - {"Open recent", 0, 0, 0, FL_SUBMENU}, + {"Open Recent", 0, 0, 0, FL_SUBMENU}, {"History1", 0, 0, 0, FL_MENU_INVISIBLE}, {"History2", 0, 0, 0, FL_MENU_INVISIBLE}, {"History3", 0, 0, 0, FL_MENU_INVISIBLE}, @@ -2288,6 +2296,7 @@ static Fl_Menu_Item bar_table[] = { {"History5", 0, 0, 0, FL_MENU_INVISIBLE}, {0}, {"M&erge...", FL_CTRL+FL_SHIFT+'o', (Fl_Callback *)file_merge_cb, 0}, + {"Watch Pattern...", 0, (Fl_Callback *)file_watch_cb, 0}, {"&Clear", 0, (Fl_Callback *)file_clear_cb, 0, FL_MENU_DIVIDER}, {"Remote", 0, 0, 0, FL_MENU_DIVIDER | FL_SUBMENU}, {"Start...", 0, (Fl_Callback *)file_remote_cb, (void*)"start"}, @@ -2340,7 +2349,7 @@ static Fl_Menu_Item sysbar_table[] = { {"New...", FL_META+'n', (Fl_Callback *)file_new_cb, 0}, {"Open...", FL_META+'o', (Fl_Callback *)file_open_cb, 0}, /* system menu bar is not dynamic in fltk 1.1; it will be in fltk 1.3 - {"Open recent", 0, 0, 0, FL_SUBMENU}, + {"Open Recent", 0, 0, 0, FL_SUBMENU}, {"History1", 0, 0, 0, FL_MENU_INVISIBLE}, {"History2", 0, 0, 0, FL_MENU_INVISIBLE}, {"History3", 0, 0, 0, FL_MENU_INVISIBLE}, @@ -2349,6 +2358,7 @@ static Fl_Menu_Item sysbar_table[] = { {0}, */ {"Merge...", FL_META+FL_SHIFT+'o', (Fl_Callback *)file_merge_cb, 0}, + {"Watch Pattern...", 0, (Fl_Callback *)file_watch_cb, 0}, {"Clear", 0, (Fl_Callback *)file_clear_cb, 0, FL_MENU_DIVIDER}, {"Remote", 0, 0, 0, FL_MENU_DIVIDER | FL_SUBMENU}, {"Start...", 0, (Fl_Callback *)file_remote_cb, (void*)"start"}, diff --git a/Fltk/messageWindow.cpp b/Fltk/messageWindow.cpp index 33d040f751..e752817a02 100644 --- a/Fltk/messageWindow.cpp +++ b/Fltk/messageWindow.cpp @@ -52,7 +52,7 @@ static void message_clear_cb(Fl_Widget *w, void *data) static void message_save_cb(Fl_Widget *w, void *data) { test: - if(fileChooser(0, 1, "Save", "*")) { + if(fileChooser(FILE_CHOOSER_CREATE, "Save", "*")) { std::string name = fileChooserGetName(1); if(CTX::instance()->confirmOverwrite) { if(!StatFile(name)) diff --git a/Fltk/projectionEditor.cpp b/Fltk/projectionEditor.cpp index 5cd4c4a8a5..13550fe04a 100644 --- a/Fltk/projectionEditor.cpp +++ b/Fltk/projectionEditor.cpp @@ -418,7 +418,7 @@ static void proj_hide_cb(Fl_Widget *w, void *data) static void save_selection_cb(Fl_Widget *w, void *data) { projectionEditor *e = (projectionEditor*)data; - if(fileChooser(0, 1, "Save Selection", "*.{geo,msh}")){ + if(fileChooser(FILE_CHOOSER_CREATE, "Save Selection", "*.{geo,msh}")){ FILE *fp = fopen(fileChooserGetName(1).c_str(), "w"); if(!fp){ Msg::Error("Unable to open file `%s'", fileChooserGetName(1).c_str()); @@ -458,7 +458,7 @@ static void save_selection_cb(Fl_Widget *w, void *data) static void load_projection_cb(Fl_Widget *w, void *data) { projectionEditor *e = (projectionEditor*)data; - if(fileChooser(0, 0, "Load Projection", "*.pro")){ + if(fileChooser(FILE_CHOOSER_SINGLE, "Load Projection", "*.pro")){ FILE *fp = fopen(fileChooserGetName(1).c_str(), "r"); if(!fp){ Msg::Error("Unable to open file `%s'", fileChooserGetName(1).c_str()); @@ -502,7 +502,7 @@ static void save_projection_cb(Fl_Widget *w, void *data) projection *p = e->getCurrentProjection(); if(p){ FM::ProjectionSurface *ps = (FM::ProjectionSurface*)p->face->getNativePtr(); - if(fileChooser(0, 1, "Save Projection", "*.pro")){ + if(fileChooser(FILE_CHOOSER_CREATE, "Save Projection", "*.pro")){ std::string name = fileChooserGetName(1); FILE *fp = fopen(name.c_str(), "w"); if(!fp){ @@ -688,7 +688,7 @@ static void action_cb(Fl_Widget *w, void *data) delete_fourier(faces[i]); } else{ - if(fileChooser(0, 1, "Save Fourier Model", "*.fm")){ + if(fileChooser(FILE_CHOOSER_CREATE, "Save Fourier Model", "*.fm")){ FILE *fp = fopen(fileChooserGetName(1).c_str(), "w"); if(!fp){ Msg::Error("Unable to open file `%s'", fileChooserGetName(1).c_str()); diff --git a/Fltk/solverWindow.cpp b/Fltk/solverWindow.cpp index 4330149046..3341047800 100644 --- a/Fltk/solverWindow.cpp +++ b/Fltk/solverWindow.cpp @@ -339,7 +339,7 @@ static void solver_choose_executable_cb(Fl_Widget *w, void *data) pattern += ".exe"; #endif - if(fileChooser(0, 0, "Choose", pattern.c_str())){ + if(fileChooser(FILE_CHOOSER_SINGLE, "Choose", pattern.c_str())){ FlGui::instance()->solver[num]->input[2]->value(fileChooserGetName(1).c_str()); solver_ok_cb(w, data); } @@ -350,7 +350,7 @@ static void solver_file_open_cb(Fl_Widget *w, void *data) int num = (int)(long)data; std::string pattern = "*" + ConnectionManager::get(num)->inputFileExtension; - if(fileChooser(0, 0, "Choose", pattern.c_str())) { + if(fileChooser(FILE_CHOOSER_SINGLE, "Choose", pattern.c_str())) { FlGui::instance()->solver[num]->input[0]->value(fileChooserGetName(1).c_str()); solver_ok_cb(w, data); } @@ -367,7 +367,7 @@ static void solver_file_edit_cb(Fl_Widget *w, void *data) static void solver_choose_mesh_cb(Fl_Widget *w, void *data) { int num = (int)(long)data; - if(fileChooser(0, 0, "Choose", "*.msh")){ + if(fileChooser(FILE_CHOOSER_SINGLE, "Choose", "*.msh")){ FlGui::instance()->solver[num]->input[1]->value(fileChooserGetName(1).c_str()); solver_ok_cb(w, data); } -- GitLab