|
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) ![]() |
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 //