fltk 1.3.0rc3
About: FLTK (Fast Light Tool Kit) is a cross-platform C++ GUI toolkit for UNIX/Linux (X11), Microsoft Windows, and MacOS X. Release candidate.
  SfR Fresh Dox: fltk-1.3.0rc3-source.tar.gz ("inofficial" and yet experimental doxygen-generated source code documentation)  

Fl_File_Chooser.cxx

Go to the documentation of this file.
00001 //
00002 // "$Id: Fl_File_Chooser.cxx 7903 2010-11-28 21:06:39Z matt $"
00003 //
00004 // Fl_File_Chooser dialog for the Fast Light Tool Kit (FLTK).
00005 //
00006 // Copyright 1998-2010 by Bill Spitzak and others.
00007 //
00008 // This library is free software; you can redistribute it and/or
00009 // modify it under the terms of the GNU Library General Public
00010 // License as published by the Free Software Foundation; either
00011 // version 2 of the License, or (at your option) any later version.
00012 //
00013 // This library is distributed in the hope that it will be useful,
00014 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00015 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00016 // Library General Public License for more details.
00017 //
00018 // You should have received a copy of the GNU Library General Public
00019 // License along with this library; if not, write to the Free Software
00020 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
00021 // USA.
00022 //
00023 // Please report all bugs and problems on the following page:
00024 //
00025 //     http://www.fltk.org/str.php
00026 //
00027 
00028 // generated by Fast Light User Interface Designer (fluid) version 1.0300
00029 
00030 #include "../FL/Fl_File_Chooser.H"
00031 #include <FL/fl_draw.H>
00032 
00033 void Fl_File_Chooser::cb_window_i(Fl_Double_Window*, void*) {
00034   fileName->value("");
00035 fileList->deselect();
00036 Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
00037 window->hide();
00038 }
00039 void Fl_File_Chooser::cb_window(Fl_Double_Window* o, void* v) {
00040   ((Fl_File_Chooser*)(o->user_data()))->cb_window_i(o,v);
00041 }
00042 
00043 void Fl_File_Chooser::cb_showChoice_i(Fl_Choice*, void*) {
00044   showChoiceCB();
00045 }
00046 void Fl_File_Chooser::cb_showChoice(Fl_Choice* o, void* v) {
00047   ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_showChoice_i(o,v);
00048 }
00049 
00050 void Fl_File_Chooser::cb_favoritesButton_i(Fl_Menu_Button*, void*) {
00051   favoritesButtonCB();
00052 }
00053 void Fl_File_Chooser::cb_favoritesButton(Fl_Menu_Button* o, void* v) {
00054   ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_favoritesButton_i(o,v);
00055 }
00056 
00057 void Fl_File_Chooser::cb_newButton_i(Fl_Button*, void*) {
00058   newdir();
00059 }
00060 void Fl_File_Chooser::cb_newButton(Fl_Button* o, void* v) {
00061   ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_newButton_i(o,v);
00062 }
00063 
00064 #include <FL/Fl_Bitmap.H>
00065 static unsigned char idata_new[] =
00066 {0,0,120,0,132,0,2,1,1,254,1,128,49,128,49,128,253,128,253,128,49,128,49,
00067 128,1,128,1,128,255,255,0,0};
00068 static Fl_Bitmap image_new(idata_new, 16, 16);
00069 
00070 void Fl_File_Chooser::cb__i(Fl_Tile*, void*) {
00071   update_preview();
00072 }
00073 void Fl_File_Chooser::cb_(Fl_Tile* o, void* v) {
00074   ((Fl_File_Chooser*)(o->parent()->user_data()))->cb__i(o,v);
00075 }
00076 
00077 void Fl_File_Chooser::cb_fileList_i(Fl_File_Browser*, void*) {
00078   fileListCB();
00079 }
00080 void Fl_File_Chooser::cb_fileList(Fl_File_Browser* o, void* v) {
00081   ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_fileList_i(o,v);
00082 }
00083 
00084 void Fl_File_Chooser::cb_previewButton_i(Fl_Check_Button*, void*) {
00085   preview(previewButton->value());
00086 }
00087 void Fl_File_Chooser::cb_previewButton(Fl_Check_Button* o, void* v) {
00088   ((Fl_File_Chooser*)(o->parent()->parent()->parent()->user_data()))->cb_previewButton_i(o,v);
00089 }
00090 
00091 void Fl_File_Chooser::cb_fileName_i(Fl_File_Input*, void*) {
00092   fileNameCB();
00093 }
00094 void Fl_File_Chooser::cb_fileName(Fl_File_Input* o, void* v) {
00095   ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_fileName_i(o,v);
00096 }
00097 
00098 void Fl_File_Chooser::cb_okButton_i(Fl_Return_Button*, void*) {
00099   window->hide();
00100 
00101 // Do any callback that is registered...
00102 if (callback_)
00103   (*callback_)(this, data_);
00104 }
00105 void Fl_File_Chooser::cb_okButton(Fl_Return_Button* o, void* v) {
00106   ((Fl_File_Chooser*)(o->parent()->parent()->parent()->user_data()))->cb_okButton_i(o,v);
00107 }
00108 
00109 void Fl_File_Chooser::cb_cancelButton_i(Fl_Button*, void*) {
00110   fileName->value("");
00111 fileList->deselect();
00112 Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
00113 window->hide();
00114 }
00115 void Fl_File_Chooser::cb_cancelButton(Fl_Button* o, void* v) {
00116   ((Fl_File_Chooser*)(o->parent()->parent()->parent()->user_data()))->cb_cancelButton_i(o,v);
00117 }
00118 
00119 void Fl_File_Chooser::cb_favList_i(Fl_File_Browser*, void*) {
00120   favoritesCB(favList);
00121 }
00122 void Fl_File_Chooser::cb_favList(Fl_File_Browser* o, void* v) {
00123   ((Fl_File_Chooser*)(o->parent()->user_data()))->cb_favList_i(o,v);
00124 }
00125 
00126 void Fl_File_Chooser::cb_favUpButton_i(Fl_Button*, void*) {
00127   favoritesCB(favUpButton);
00128 }
00129 void Fl_File_Chooser::cb_favUpButton(Fl_Button* o, void* v) {
00130   ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_favUpButton_i(o,v);
00131 }
00132 
00133 void Fl_File_Chooser::cb_favDeleteButton_i(Fl_Button*, void*) {
00134   favoritesCB(favDeleteButton);
00135 }
00136 void Fl_File_Chooser::cb_favDeleteButton(Fl_Button* o, void* v) {
00137   ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_favDeleteButton_i(o,v);
00138 }
00139 
00140 void Fl_File_Chooser::cb_favDownButton_i(Fl_Button*, void*) {
00141   favoritesCB(favDownButton);
00142 }
00143 void Fl_File_Chooser::cb_favDownButton(Fl_Button* o, void* v) {
00144   ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_favDownButton_i(o,v);
00145 }
00146 
00147 void Fl_File_Chooser::cb_favCancelButton_i(Fl_Button*, void*) {
00148   favWindow->hide();
00149 }
00150 void Fl_File_Chooser::cb_favCancelButton(Fl_Button* o, void* v) {
00151   ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_favCancelButton_i(o,v);
00152 }
00153 
00154 void Fl_File_Chooser::cb_favOkButton_i(Fl_Return_Button*, void*) {
00155   favoritesCB(favOkButton);
00156 }
00157 void Fl_File_Chooser::cb_favOkButton(Fl_Return_Button* o, void* v) {
00158   ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_favOkButton_i(o,v);
00159 }
00160 
00161 Fl_File_Chooser::Fl_File_Chooser(const char *d, const char *p, int t, const char *title) {
00162   Fl_Group *prev_current = Fl_Group::current();
00163   { window = new Fl_Double_Window(490, 380, "Choose File");
00164     window->callback((Fl_Callback*)cb_window, (void*)(this));
00165     { Fl_Group* o = new Fl_Group(10, 10, 470, 25);
00166       { showChoice = new Fl_Choice(65, 10, 215, 25, "Show:");
00167         showChoice->down_box(FL_BORDER_BOX);
00168         showChoice->labelfont(1);
00169         showChoice->callback((Fl_Callback*)cb_showChoice);
00170         Fl_Group::current()->resizable(showChoice);
00171         showChoice->label(show_label);
00172       } // Fl_Choice* showChoice
00173       { favoritesButton = new Fl_Menu_Button(290, 10, 155, 25, "Favorites");
00174         favoritesButton->down_box(FL_BORDER_BOX);
00175         favoritesButton->callback((Fl_Callback*)cb_favoritesButton);
00176         favoritesButton->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
00177         favoritesButton->label(favorites_label);
00178       } // Fl_Menu_Button* favoritesButton
00179       { Fl_Button* o = newButton = new Fl_Button(455, 10, 25, 25);
00180         newButton->image(image_new);
00181         newButton->labelsize(8);
00182         newButton->callback((Fl_Callback*)cb_newButton);
00183         o->tooltip(new_directory_tooltip);
00184       } // Fl_Button* newButton
00185       o->end();
00186     } // Fl_Group* o
00187     { Fl_Tile* o = new Fl_Tile(10, 45, 470, 225);
00188       o->callback((Fl_Callback*)cb_);
00189       { fileList = new Fl_File_Browser(10, 45, 295, 225);
00190         fileList->type(2);
00191         fileList->callback((Fl_Callback*)cb_fileList);
00192         fileList->window()->hotspot(fileList);
00193       } // Fl_File_Browser* fileList
00194       { previewBox = new Fl_Box(305, 45, 175, 225, "?");
00195         previewBox->box(FL_DOWN_BOX);
00196         previewBox->labelsize(100);
00197         previewBox->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE));
00198       } // Fl_Box* previewBox
00199       o->end();
00200       Fl_Group::current()->resizable(o);
00201     } // Fl_Tile* o
00202     { Fl_Group* o = new Fl_Group(10, 275, 470, 95);
00203       { Fl_Group* o = new Fl_Group(10, 275, 470, 20);
00204         { previewButton = new Fl_Check_Button(10, 275, 73, 20, "Preview");
00205           previewButton->shortcut(0x80070);
00206           previewButton->down_box(FL_DOWN_BOX);
00207           previewButton->value(1);
00208           previewButton->callback((Fl_Callback*)cb_previewButton);
00209           previewButton->label(preview_label);
00210         } // Fl_Check_Button* previewButton
00211         { Fl_Box* o = new Fl_Box(115, 275, 365, 20);
00212           Fl_Group::current()->resizable(o);
00213         } // Fl_Box* o
00214         o->end();
00215       } // Fl_Group* o
00216       { fileName = new Fl_File_Input(115, 300, 365, 35);
00217         fileName->labelfont(1);
00218         fileName->callback((Fl_Callback*)cb_fileName);
00219         fileName->when(FL_WHEN_ENTER_KEY);
00220         Fl_Group::current()->resizable(fileName);
00221         fileName->when(FL_WHEN_CHANGED | FL_WHEN_ENTER_KEY);
00222       } // Fl_File_Input* fileName
00223       { Fl_Box* o = new Fl_Box(10, 310, 105, 25, "Filename:");
00224         o->labelfont(1);
00225         o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE));
00226         o->label(filename_label);
00227       } // Fl_Box* o
00228       { Fl_Group* o = new Fl_Group(10, 345, 470, 25);
00229         { okButton = new Fl_Return_Button(313, 345, 85, 25, "OK");
00230           okButton->callback((Fl_Callback*)cb_okButton);
00231           okButton->label(fl_ok);
00232         } // Fl_Return_Button* okButton
00233         { Fl_Button* o = cancelButton = new Fl_Button(408, 345, 72, 25, "Cancel");
00234           cancelButton->callback((Fl_Callback*)cb_cancelButton);
00235           o->label(fl_cancel);
00236         } // Fl_Button* cancelButton
00237         { Fl_Box* o = new Fl_Box(10, 345, 30, 25);
00238           Fl_Group::current()->resizable(o);
00239         } // Fl_Box* o
00240         o->end();
00241       } // Fl_Group* o
00242       o->end();
00243     } // Fl_Group* o
00244     if (title) window->label(title);
00245     window->set_modal();
00246     window->end();
00247   } // Fl_Double_Window* window
00248   { favWindow = new Fl_Double_Window(355, 150, "Manage Favorites");
00249     favWindow->user_data((void*)(this));
00250     { favList = new Fl_File_Browser(10, 10, 300, 95);
00251       favList->type(2);
00252       favList->callback((Fl_Callback*)cb_favList);
00253       Fl_Group::current()->resizable(favList);
00254     } // Fl_File_Browser* favList
00255     { Fl_Group* o = new Fl_Group(320, 10, 25, 95);
00256       { favUpButton = new Fl_Button(320, 10, 25, 25, "@8>");
00257         favUpButton->callback((Fl_Callback*)cb_favUpButton);
00258       } // Fl_Button* favUpButton
00259       { favDeleteButton = new Fl_Button(320, 45, 25, 25, "X");
00260         favDeleteButton->labelfont(1);
00261         favDeleteButton->callback((Fl_Callback*)cb_favDeleteButton);
00262         Fl_Group::current()->resizable(favDeleteButton);
00263       } // Fl_Button* favDeleteButton
00264       { favDownButton = new Fl_Button(320, 80, 25, 25, "@2>");
00265         favDownButton->callback((Fl_Callback*)cb_favDownButton);
00266       } // Fl_Button* favDownButton
00267       o->end();
00268     } // Fl_Group* o
00269     { Fl_Group* o = new Fl_Group(10, 113, 335, 29);
00270       { favCancelButton = new Fl_Button(273, 115, 72, 25, "Cancel");
00271         favCancelButton->callback((Fl_Callback*)cb_favCancelButton);
00272         favCancelButton->label(fl_cancel);
00273       } // Fl_Button* favCancelButton
00274       { favOkButton = new Fl_Return_Button(181, 115, 79, 25, "Save");
00275         favOkButton->callback((Fl_Callback*)cb_favOkButton);
00276         favOkButton->label(save_label);
00277       } // Fl_Return_Button* favOkButton
00278       { Fl_Box* o = new Fl_Box(10, 115, 161, 25);
00279         Fl_Group::current()->resizable(o);
00280       } // Fl_Box* o
00281       o->end();
00282     } // Fl_Group* o
00283     favWindow->label(manage_favorites_label);
00284     favWindow->set_modal();
00285     favWindow->size_range(181, 150);
00286     favWindow->end();
00287   } // Fl_Double_Window* favWindow
00288   callback_ = 0;
00289 data_ = 0;
00290 directory_[0] = 0;
00291 window->size_range(window->w(), window->h(), Fl::w(), Fl::h());
00292 type(t);
00293 filter(p);
00294 update_favorites();
00295 value(d);
00296 type(t);
00297 int e;
00298 prefs_.get("preview", e, 1);
00299 preview(e);
00300 Fl_Group::current(prev_current);
00301   ext_group=(Fl_Widget*)0;
00302 }
00303 
00304 Fl_File_Chooser::~Fl_File_Chooser() {
00305   Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
00306 if(ext_group)window->remove(ext_group);
00307 delete window;
00308 delete favWindow;
00309 }
00310 
00311 void Fl_File_Chooser::callback(void (*cb)(Fl_File_Chooser *, void *), void *d ) {
00312   callback_ = cb;
00313 data_     = d;
00314 }
00315 
00316 void Fl_File_Chooser::color(Fl_Color c) {
00317   fileList->color(c);
00318 }
00319 
00320 Fl_Color Fl_File_Chooser::color() {
00321   return (fileList->color());
00322 }
00323 
00324 char * Fl_File_Chooser::directory() {
00325   return directory_;
00326 }
00327 
00328 const char * Fl_File_Chooser::filter() {
00329   return (fileList->filter());
00330 }
00331 
00332 int Fl_File_Chooser::filter_value() {
00333   return showChoice->value();
00334 }
00335 
00336 void Fl_File_Chooser::filter_value(int f) {
00337   showChoice->value(f);
00338 showChoiceCB();
00339 }
00340 
00341 void Fl_File_Chooser::hide() {
00342   window->hide();
00343 }
00344 
00345 void Fl_File_Chooser::iconsize(uchar s) {
00346   fileList->iconsize(s);
00347 }
00348 
00349 uchar Fl_File_Chooser::iconsize() {
00350   return (fileList->iconsize());
00351 }
00352 
00353 void Fl_File_Chooser::label(const char *l) {
00354   window->label(l);
00355 }
00356 
00357 const char * Fl_File_Chooser::label() {
00358   return (window->label());
00359 }
00360 
00361 void Fl_File_Chooser::ok_label(const char *l) {
00362   okButton->label(l);
00363 int w=0, h=0;
00364 okButton->measure_label(w, h);
00365 okButton->resize(cancelButton->x() - 50 - w, cancelButton->y(),
00366                  w + 40, 25);
00367 okButton->parent()->init_sizes();
00368 }
00369 
00370 const char * Fl_File_Chooser::ok_label() {
00371   return (okButton->label());
00372 }
00373 
00374 void Fl_File_Chooser::show() {
00375   window->hotspot(fileList);
00376 window->show();
00377 Fl::flush();
00378 fl_cursor(FL_CURSOR_WAIT);
00379 rescan_keep_filename();
00380 fl_cursor(FL_CURSOR_DEFAULT);
00381 fileName->take_focus();
00382 }
00383 
00384 int Fl_File_Chooser::shown() {
00385   return window->shown();
00386 }
00387 
00388 void Fl_File_Chooser::textcolor(Fl_Color c) {
00389   fileList->textcolor(c);
00390 }
00391 
00392 Fl_Color Fl_File_Chooser::textcolor() {
00393   return (fileList->textcolor());
00394 }
00395 
00396 void Fl_File_Chooser::textfont(Fl_Font f) {
00397   fileList->textfont(f);
00398 }
00399 
00400 Fl_Font Fl_File_Chooser::textfont() {
00401   return (fileList->textfont());
00402 }
00403 
00404 void Fl_File_Chooser::textsize(Fl_Fontsize s) {
00405   fileList->textsize(s);
00406 }
00407 
00408 Fl_Fontsize Fl_File_Chooser::textsize() {
00409   return (fileList->textsize());
00410 }
00411 
00412 void Fl_File_Chooser::type(int t) {
00413   type_ = t;
00414 if (t & MULTI)
00415   fileList->type(FL_MULTI_BROWSER);
00416 else
00417   fileList->type(FL_HOLD_BROWSER);
00418 if (t & CREATE)
00419   newButton->activate();
00420 else
00421   newButton->deactivate();
00422 if (t & DIRECTORY)
00423   fileList->filetype(Fl_File_Browser::DIRECTORIES);
00424 else
00425   fileList->filetype(Fl_File_Browser::FILES);
00426 }
00427 
00428 int Fl_File_Chooser::type() {
00429   return (type_);
00430 }
00431 
00432 void * Fl_File_Chooser::user_data() const {
00433   return (data_);
00434 }
00435 
00436 void Fl_File_Chooser::user_data(void *d) {
00437   data_ = d;
00438 }
00439 
00440 int Fl_File_Chooser::visible() {
00441   return window->visible();
00442 }
00443 
00444 Fl_Widget* Fl_File_Chooser::add_extra(Fl_Widget* gr) {
00445   Fl_Widget* ret=ext_group;
00446   if (gr==ext_group) {
00447     return ret;
00448       }
00449       if (ext_group) {
00450         int sh=ext_group->h()+4;
00451 Fl_Widget* svres=window->resizable();
00452 window->resizable(NULL);
00453 window->size(window->w(),window->h()-sh);
00454 window->remove(ext_group);
00455 ext_group=NULL;
00456 window->resizable(svres);
00457           }
00458           if (gr) {
00459             int nh=window->h()+gr->h()+4;
00460 Fl_Widget* svres=window->resizable();
00461 window->resizable(NULL);
00462 window->size(window->w(),nh);
00463 gr->position(2,okButton->y()+okButton->h()+2);
00464 window->add(gr);
00465 ext_group=gr;
00466 window->resizable(svres);
00467               }
00468               return ret;
00469 }
00470 
00471 //
00472 // End of "$Id: Fl_File_Chooser.cxx 7903 2010-11-28 21:06:39Z matt $".
00473 //