summaryrefslogtreecommitdiff
path: root/src/Fl_File_Chooser.cxx
diff options
context:
space:
mode:
authorMichael R Sweet <michael.r.sweet@gmail.com>2002-06-07 15:06:32 +0000
committerMichael R Sweet <michael.r.sweet@gmail.com>2002-06-07 15:06:32 +0000
commit861ad9769b94f52e3528817c8654c572d98ce760 (patch)
tree81868ee9e2a622094a9d873949311b3fc83ffc78 /src/Fl_File_Chooser.cxx
parent5c17a15fd444acdc1c8e6bd8de2ba5669042b958 (diff)
New file chooser.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@2286 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/Fl_File_Chooser.cxx')
-rw-r--r--src/Fl_File_Chooser.cxx272
1 files changed, 183 insertions, 89 deletions
diff --git a/src/Fl_File_Chooser.cxx b/src/Fl_File_Chooser.cxx
index 31fd1b70e..f4a57c84a 100644
--- a/src/Fl_File_Chooser.cxx
+++ b/src/Fl_File_Chooser.cxx
@@ -5,79 +5,66 @@
inline void Fl_File_Chooser::cb_window_i(Fl_Window*, void*) {
fileName->value(directory_);
fileList->deselect();
+Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
window->hide();
}
void Fl_File_Chooser::cb_window(Fl_Window* o, void* v) {
((Fl_File_Chooser*)(o->user_data()))->cb_window_i(o,v);
}
-inline void Fl_File_Chooser::cb_dirMenu_i(Fl_Choice*, void*) {
- char pathname[1024];
-int i;
-
-pathname[0] = '\0';
-for (i = 1; i <= dirMenu->value(); i ++)
- strcat(pathname, dirMenu->text(i));
-directory(pathname);
+inline void Fl_File_Chooser::cb_showChoice_i(Fl_Choice*, void*) {
+ showChoiceCB();
}
-void Fl_File_Chooser::cb_dirMenu(Fl_Choice* o, void* v) {
- ((Fl_File_Chooser*)(o->parent()->user_data()))->cb_dirMenu_i(o,v);
+void Fl_File_Chooser::cb_showChoice(Fl_Choice* o, void* v) {
+ ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_showChoice_i(o,v);
}
-inline void Fl_File_Chooser::cb_upButton_i(Fl_Button*, void*) {
- up();
+inline void Fl_File_Chooser::cb_favoritesButton_i(Fl_Menu_Button*, void*) {
+ favoritesButtonCB();
}
-void Fl_File_Chooser::cb_upButton(Fl_Button* o, void* v) {
- ((Fl_File_Chooser*)(o->parent()->user_data()))->cb_upButton_i(o,v);
+void Fl_File_Chooser::cb_favoritesButton(Fl_Menu_Button* o, void* v) {
+ ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_favoritesButton_i(o,v);
}
-#include <FL/Fl_Bitmap.H>
-static unsigned char idata_up[] =
-"\0\0x\0\204\0\2\1""1\376y\200\375\200""1\200""1\200""1\200""1\200""1\200\1\
-\200\1\200\377\377\0\0";
-static Fl_Bitmap image_up(idata_up, 16, 16);
-
inline void Fl_File_Chooser::cb_newButton_i(Fl_Button*, void*) {
newdir();
}
void Fl_File_Chooser::cb_newButton(Fl_Button* o, void* v) {
- ((Fl_File_Chooser*)(o->parent()->user_data()))->cb_newButton_i(o,v);
+ ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_newButton_i(o,v);
}
+#include <FL/Fl_Bitmap.H>
static unsigned char idata_new[] =
"\0\0x\0\204\0\2\1\1\376\1\200""1\200""1\200\375\200\375\200""1\200""1\200\1\
\200\1\200\377\377\0\0";
static Fl_Bitmap image_new(idata_new, 16, 16);
-inline void Fl_File_Chooser::cb__i(Fl_Button*, void*) {
- const char *f;
-if ((f = fl_input(filter_label,
- fileList->filter())) != NULL)
-{
- fileList->filter(f);
- rescan();
-};
+inline void Fl_File_Chooser::cb__i(Fl_Tile*, void*) {
+ update_preview();
}
-void Fl_File_Chooser::cb_(Fl_Button* o, void* v) {
+void Fl_File_Chooser::cb_(Fl_Tile* o, void* v) {
((Fl_File_Chooser*)(o->parent()->user_data()))->cb__i(o,v);
}
-static unsigned char idata_allfiles[] =
-"\374?\4 \4 \4 \204!\244%\304#\364/\364/\304#\244%\204!\4 \4 \4 \374?";
-static Fl_Bitmap image_allfiles(idata_allfiles, 16, 16);
-
inline void Fl_File_Chooser::cb_fileList_i(Fl_File_Browser*, void*) {
fileListCB();
}
void Fl_File_Chooser::cb_fileList(Fl_File_Browser* o, void* v) {
- ((Fl_File_Chooser*)(o->parent()->user_data()))->cb_fileList_i(o,v);
+ ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_fileList_i(o,v);
+}
+
+inline void Fl_File_Chooser::cb_previewButton_i(Fl_Check_Button*, void*) {
+ preview(previewButton->value());
+}
+void Fl_File_Chooser::cb_previewButton(Fl_Check_Button* o, void* v) {
+ ((Fl_File_Chooser*)(o->parent()->parent()->parent()->user_data()))->cb_previewButton_i(o,v);
}
inline void Fl_File_Chooser::cb_fileName_i(Fl_File_Input*, void*) {
fileNameCB();
}
void Fl_File_Chooser::cb_fileName(Fl_File_Input* o, void* v) {
- ((Fl_File_Chooser*)(o->parent()->user_data()))->cb_fileName_i(o,v);
+ ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_fileName_i(o,v);
}
inline void Fl_File_Chooser::cb_okButton_i(Fl_Return_Button*, void*) {
@@ -88,82 +75,194 @@ if (callback_)
window->hide();
}
void Fl_File_Chooser::cb_okButton(Fl_Return_Button* o, void* v) {
- ((Fl_File_Chooser*)(o->parent()->user_data()))->cb_okButton_i(o,v);
+ ((Fl_File_Chooser*)(o->parent()->parent()->parent()->user_data()))->cb_okButton_i(o,v);
}
inline void Fl_File_Chooser::cb_Cancel_i(Fl_Button*, void*) {
fileName->value(directory_);
fileList->deselect();
+Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
window->hide();
}
void Fl_File_Chooser::cb_Cancel(Fl_Button* o, void* v) {
- ((Fl_File_Chooser*)(o->parent()->user_data()))->cb_Cancel_i(o,v);
+ ((Fl_File_Chooser*)(o->parent()->parent()->parent()->user_data()))->cb_Cancel_i(o,v);
+}
+
+inline void Fl_File_Chooser::cb_favList_i(Fl_File_Browser*, void*) {
+ favoritesCB(favList);
+}
+void Fl_File_Chooser::cb_favList(Fl_File_Browser* o, void* v) {
+ ((Fl_File_Chooser*)(o->parent()->user_data()))->cb_favList_i(o,v);
+}
+
+inline void Fl_File_Chooser::cb_favUpButton_i(Fl_Button*, void*) {
+ favoritesCB(favUpButton);
+}
+void Fl_File_Chooser::cb_favUpButton(Fl_Button* o, void* v) {
+ ((Fl_File_Chooser*)(o->parent()->user_data()))->cb_favUpButton_i(o,v);
+}
+
+inline void Fl_File_Chooser::cb_favDeleteButton_i(Fl_Button*, void*) {
+ favoritesCB(favDeleteButton);
+}
+void Fl_File_Chooser::cb_favDeleteButton(Fl_Button* o, void* v) {
+ ((Fl_File_Chooser*)(o->parent()->user_data()))->cb_favDeleteButton_i(o,v);
+}
+
+inline void Fl_File_Chooser::cb_favDownButton_i(Fl_Button*, void*) {
+ favoritesCB(favDownButton);
+}
+void Fl_File_Chooser::cb_favDownButton(Fl_Button* o, void* v) {
+ ((Fl_File_Chooser*)(o->parent()->user_data()))->cb_favDownButton_i(o,v);
+}
+
+inline void Fl_File_Chooser::cb_favCancelButton_i(Fl_Button*, void*) {
+ favWindow->hide();
+}
+void Fl_File_Chooser::cb_favCancelButton(Fl_Button* o, void* v) {
+ ((Fl_File_Chooser*)(o->parent()->user_data()))->cb_favCancelButton_i(o,v);
+}
+
+inline void Fl_File_Chooser::cb_favOkButton_i(Fl_Return_Button*, void*) {
+ favoritesCB(favOkButton);
+}
+void Fl_File_Chooser::cb_favOkButton(Fl_Return_Button* o, void* v) {
+ ((Fl_File_Chooser*)(o->parent()->user_data()))->cb_favOkButton_i(o,v);
}
Fl_File_Chooser::Fl_File_Chooser(const char *d, const char *p, int t, const char *title) {
Fl_Window* w;
- { Fl_Window* o = window = new Fl_Window(375, 325, "Pick a File");
+ { Fl_Window* o = window = new Fl_Window(490, 380, "Choose File");
w = o;
o->callback((Fl_Callback*)cb_window, (void*)(this));
- { Fl_Choice* o = dirMenu = new Fl_Choice(95, 10, 180, 25, "Directory:");
- o->tooltip("Choose a parent directory.");
- o->down_box(FL_BORDER_BOX);
- o->callback((Fl_Callback*)cb_dirMenu);
- dirMenu->label(directory_label);
+ { Fl_Group* o = new Fl_Group(65, 10, 415, 25);
+ { Fl_Choice* o = showChoice = new Fl_Choice(65, 10, 215, 25, "Show:");
+ o->down_box(FL_BORDER_BOX);
+ o->callback((Fl_Callback*)cb_showChoice);
+ Fl_Group::current()->resizable(o);
+ showChoice->label(show_label);
+ }
+ { Fl_Menu_Button* o = favoritesButton = new Fl_Menu_Button(290, 10, 155, 25, "Favorites");
+ o->down_box(FL_BORDER_BOX);
+ o->callback((Fl_Callback*)cb_favoritesButton);
+ o->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+ favoritesButton->label(favorites_label);
+ }
+ { Fl_Button* o = newButton = new Fl_Button(455, 10, 25, 25);
+ o->tooltip("Create a new directory.");
+ o->image(image_new);
+ o->labelsize(8);
+ o->callback((Fl_Callback*)cb_newButton);
+ }
+ o->end();
}
- { Fl_Button* o = upButton = new Fl_Button(280, 10, 25, 25);
- o->tooltip("Show the parent directory.");
- o->image(image_up);
- o->labelsize(8);
- o->callback((Fl_Callback*)cb_upButton);
- }
- { Fl_Button* o = newButton = new Fl_Button(310, 10, 25, 25);
- o->tooltip("Create a new directory.");
- o->image(image_new);
- o->labelsize(8);
- o->callback((Fl_Callback*)cb_newButton);
- }
- { Fl_Button* o = new Fl_Button(340, 10, 25, 25);
- o->tooltip("Change the filename filter.");
- o->image(image_allfiles);
- o->labelsize(28);
- o->labelcolor(4);
+ { Fl_Tile* o = new Fl_Tile(10, 45, 470, 225);
o->callback((Fl_Callback*)cb_);
- o->align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
+ { Fl_File_Browser* o = fileList = new Fl_File_Browser(10, 45, 295, 225);
+ o->type(2);
+ o->callback((Fl_Callback*)cb_fileList);
+ w->hotspot(o);
+ }
+ { Fl_Box* o = previewBox = new Fl_Box(305, 45, 175, 225, "?");
+ o->box(FL_DOWN_BOX);
+ o->labelsize(100);
+ o->align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE);
+ }
+ o->end();
+ Fl_Group::current()->resizable(o);
}
- { Fl_File_Browser* o = fileList = new Fl_File_Browser(10, 45, 355, 180);
+ { Fl_Group* o = new Fl_Group(0, 275, 480, 95);
+ { Fl_Group* o = new Fl_Group(10, 275, 470, 20);
+ { Fl_Check_Button* o = previewButton = new Fl_Check_Button(405, 275, 75, 20, "Preview");
+ o->down_box(FL_DOWN_BOX);
+ o->value(1);
+ o->shortcut(0x80070);
+ o->callback((Fl_Callback*)cb_previewButton);
+ previewButton->label(preview_label);
+ }
+ { Fl_Box* o = new Fl_Box(10, 275, 395, 20);
+ Fl_Group::current()->resizable(o);
+ }
+ o->end();
+ }
+ { Fl_File_Input* o = fileName = new Fl_File_Input(85, 300, 395, 35);
+ o->callback((Fl_Callback*)cb_fileName);
+ o->when(FL_WHEN_ENTER_KEY);
+ Fl_Group::current()->resizable(o);
+ fileName->when(FL_WHEN_CHANGED | FL_WHEN_ENTER_KEY_ALWAYS);
+ }
+ { Fl_Box* o = new Fl_Box(0, 310, 85, 25, "Filename:");
+ o->align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE);
+ o->label(filename_label);
+ }
+ { Fl_Group* o = new Fl_Group(10, 345, 470, 25);
+ { Fl_Return_Button* o = okButton = new Fl_Return_Button(320, 345, 75, 25, "OK");
+ o->callback((Fl_Callback*)cb_okButton);
+ okButton->label(fl_ok);
+ }
+ { Fl_Button* o = new Fl_Button(405, 345, 75, 25, "Cancel");
+ o->callback((Fl_Callback*)cb_Cancel);
+ o->label(fl_cancel);
+ }
+ { Fl_Box* o = new Fl_Box(10, 345, 300, 25);
+ Fl_Group::current()->resizable(o);
+ }
+ o->end();
+ }
+ o->end();
+ }
+ if (title) window->label(title);
+ o->set_modal();
+ o->end();
+ }
+ { Fl_Window* o = favWindow = new Fl_Window(355, 150, "Manage Favorites");
+ w = o;
+ o->user_data((void*)(this));
+ { Fl_File_Browser* o = favList = new Fl_File_Browser(10, 10, 300, 95);
o->type(2);
- o->callback((Fl_Callback*)cb_fileList);
- Fl_Group::current()->resizable(o);
- w->hotspot(o);
+ o->callback((Fl_Callback*)cb_favList);
}
- { Fl_File_Input* o = fileName = new Fl_File_Input(10, 245, 355, 35, "Filename:");
- o->callback((Fl_Callback*)cb_fileName);
- o->align(FL_ALIGN_TOP_LEFT);
- o->when(FL_WHEN_ENTER_KEY);
- fileName->when(FL_WHEN_CHANGED | FL_WHEN_ENTER_KEY_ALWAYS);
- fileName->label(filename_label);
+ { Fl_Button* o = favUpButton = new Fl_Button(320, 10, 25, 25, "@8>");
+ o->callback((Fl_Callback*)cb_favUpButton);
}
- { Fl_Return_Button* o = okButton = new Fl_Return_Button(200, 290, 75, 25, "OK");
- o->callback((Fl_Callback*)cb_okButton);
- okButton->label(fl_ok);
+ { Fl_Button* o = favDeleteButton = new Fl_Button(320, 45, 25, 25, "X");
+ o->labelfont(1);
+ o->callback((Fl_Callback*)cb_favDeleteButton);
}
- { Fl_Button* o = new Fl_Button(285, 290, 80, 25, "Cancel");
- o->callback((Fl_Callback*)cb_Cancel);
- o->label(fl_cancel);
+ { Fl_Button* o = favDownButton = new Fl_Button(320, 80, 25, 25, "@2>");
+ o->callback((Fl_Callback*)cb_favDownButton);
}
- if (title) window->label(title);
+ { Fl_Button* o = favCancelButton = new Fl_Button(270, 115, 75, 25, "Cancel");
+ o->callback((Fl_Callback*)cb_favCancelButton);
+ favCancelButton->label(fl_cancel);
+ }
+ { Fl_Return_Button* o = favOkButton = new Fl_Return_Button(185, 115, 75, 25, "OK");
+ o->callback((Fl_Callback*)cb_favOkButton);
+ favOkButton->label(fl_ok);
+ }
+ favWindow->label(manage_favorites_label);
o->set_modal();
o->end();
}
- fileList->filter(p);
-type(t);
-value(d);
-callback_ = 0;
+ callback_ = 0;
data_ = 0;
+window->size_range(window->w(), window->h(), Fl::w(), Fl::h());
+filter(p);
+update_favorites();
+value(d);
+type(t);
+int e;
+prefs_.get("preview", e, 1);
+preview(e);
+}
+
+Fl_File_Chooser::~Fl_File_Chooser() {
+ Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
+delete window;
+delete favWindow;
}
-void Fl_File_Chooser::callback(void (*cb)(Fl_File_Chooser *, void *), void *d) {
+void Fl_File_Chooser::callback(void (*cb)(Fl_File_Chooser *, void *), void *d ) {
callback_ = cb;
data_ = d;
}
@@ -180,11 +279,6 @@ char * Fl_File_Chooser::directory() {
return directory_;
}
-void Fl_File_Chooser::filter(const char *p) {
- fileList->filter(p);
-rescan();
-}
-
const char * Fl_File_Chooser::filter() {
return (fileList->filter());
}