Fl_File_Chooser.cxx 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473
  1. //
  2. // "$Id: Fl_File_Chooser.cxx 7903 2010-11-28 21:06:39Z matt $"
  3. //
  4. // Fl_File_Chooser dialog for the Fast Light Tool Kit (FLTK).
  5. //
  6. // Copyright 1998-2010 by Bill Spitzak and others.
  7. //
  8. // This library is free software; you can redistribute it and/or
  9. // modify it under the terms of the GNU Library General Public
  10. // License as published by the Free Software Foundation; either
  11. // version 2 of the License, or (at your option) any later version.
  12. //
  13. // This library is distributed in the hope that it will be useful,
  14. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  16. // Library General Public License for more details.
  17. //
  18. // You should have received a copy of the GNU Library General Public
  19. // License along with this library; if not, write to the Free Software
  20. // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  21. // USA.
  22. //
  23. // Please report all bugs and problems on the following page:
  24. //
  25. // http://www.fltk.org/str.php
  26. //
  27. // generated by Fast Light User Interface Designer (fluid) version 1.0300
  28. #include "../FL/Fl_File_Chooser.H"
  29. #include <FL/fl_draw.H>
  30. void Fl_File_Chooser::cb_window_i(Fl_Double_Window*, void*) {
  31. fileName->value("");
  32. fileList->deselect();
  33. Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
  34. window->hide();
  35. }
  36. void Fl_File_Chooser::cb_window(Fl_Double_Window* o, void* v) {
  37. ((Fl_File_Chooser*)(o->user_data()))->cb_window_i(o,v);
  38. }
  39. void Fl_File_Chooser::cb_showChoice_i(Fl_Choice*, void*) {
  40. showChoiceCB();
  41. }
  42. void Fl_File_Chooser::cb_showChoice(Fl_Choice* o, void* v) {
  43. ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_showChoice_i(o,v);
  44. }
  45. void Fl_File_Chooser::cb_favoritesButton_i(Fl_Menu_Button*, void*) {
  46. favoritesButtonCB();
  47. }
  48. void Fl_File_Chooser::cb_favoritesButton(Fl_Menu_Button* o, void* v) {
  49. ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_favoritesButton_i(o,v);
  50. }
  51. void Fl_File_Chooser::cb_newButton_i(Fl_Button*, void*) {
  52. newdir();
  53. }
  54. void Fl_File_Chooser::cb_newButton(Fl_Button* o, void* v) {
  55. ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_newButton_i(o,v);
  56. }
  57. #include <FL/Fl_Bitmap.H>
  58. static unsigned char idata_new[] =
  59. {0,0,120,0,132,0,2,1,1,254,1,128,49,128,49,128,253,128,253,128,49,128,49,
  60. 128,1,128,1,128,255,255,0,0};
  61. static Fl_Bitmap image_new(idata_new, 16, 16);
  62. void Fl_File_Chooser::cb__i(Fl_Tile*, void*) {
  63. update_preview();
  64. }
  65. void Fl_File_Chooser::cb_(Fl_Tile* o, void* v) {
  66. ((Fl_File_Chooser*)(o->parent()->user_data()))->cb__i(o,v);
  67. }
  68. void Fl_File_Chooser::cb_fileList_i(Fl_File_Browser*, void*) {
  69. fileListCB();
  70. }
  71. void Fl_File_Chooser::cb_fileList(Fl_File_Browser* o, void* v) {
  72. ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_fileList_i(o,v);
  73. }
  74. void Fl_File_Chooser::cb_previewButton_i(Fl_Check_Button*, void*) {
  75. preview(previewButton->value());
  76. }
  77. void Fl_File_Chooser::cb_previewButton(Fl_Check_Button* o, void* v) {
  78. ((Fl_File_Chooser*)(o->parent()->parent()->parent()->user_data()))->cb_previewButton_i(o,v);
  79. }
  80. void Fl_File_Chooser::cb_fileName_i(Fl_File_Input*, void*) {
  81. fileNameCB();
  82. }
  83. void Fl_File_Chooser::cb_fileName(Fl_File_Input* o, void* v) {
  84. ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_fileName_i(o,v);
  85. }
  86. void Fl_File_Chooser::cb_okButton_i(Fl_Return_Button*, void*) {
  87. window->hide();
  88. // Do any callback that is registered...
  89. if (callback_)
  90. (*callback_)(this, data_);
  91. }
  92. void Fl_File_Chooser::cb_okButton(Fl_Return_Button* o, void* v) {
  93. ((Fl_File_Chooser*)(o->parent()->parent()->parent()->user_data()))->cb_okButton_i(o,v);
  94. }
  95. void Fl_File_Chooser::cb_cancelButton_i(Fl_Button*, void*) {
  96. fileName->value("");
  97. fileList->deselect();
  98. Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
  99. window->hide();
  100. }
  101. void Fl_File_Chooser::cb_cancelButton(Fl_Button* o, void* v) {
  102. ((Fl_File_Chooser*)(o->parent()->parent()->parent()->user_data()))->cb_cancelButton_i(o,v);
  103. }
  104. void Fl_File_Chooser::cb_favList_i(Fl_File_Browser*, void*) {
  105. favoritesCB(favList);
  106. }
  107. void Fl_File_Chooser::cb_favList(Fl_File_Browser* o, void* v) {
  108. ((Fl_File_Chooser*)(o->parent()->user_data()))->cb_favList_i(o,v);
  109. }
  110. void Fl_File_Chooser::cb_favUpButton_i(Fl_Button*, void*) {
  111. favoritesCB(favUpButton);
  112. }
  113. void Fl_File_Chooser::cb_favUpButton(Fl_Button* o, void* v) {
  114. ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_favUpButton_i(o,v);
  115. }
  116. void Fl_File_Chooser::cb_favDeleteButton_i(Fl_Button*, void*) {
  117. favoritesCB(favDeleteButton);
  118. }
  119. void Fl_File_Chooser::cb_favDeleteButton(Fl_Button* o, void* v) {
  120. ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_favDeleteButton_i(o,v);
  121. }
  122. void Fl_File_Chooser::cb_favDownButton_i(Fl_Button*, void*) {
  123. favoritesCB(favDownButton);
  124. }
  125. void Fl_File_Chooser::cb_favDownButton(Fl_Button* o, void* v) {
  126. ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_favDownButton_i(o,v);
  127. }
  128. void Fl_File_Chooser::cb_favCancelButton_i(Fl_Button*, void*) {
  129. favWindow->hide();
  130. }
  131. void Fl_File_Chooser::cb_favCancelButton(Fl_Button* o, void* v) {
  132. ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_favCancelButton_i(o,v);
  133. }
  134. void Fl_File_Chooser::cb_favOkButton_i(Fl_Return_Button*, void*) {
  135. favoritesCB(favOkButton);
  136. }
  137. void Fl_File_Chooser::cb_favOkButton(Fl_Return_Button* o, void* v) {
  138. ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_favOkButton_i(o,v);
  139. }
  140. Fl_File_Chooser::Fl_File_Chooser(const char *d, const char *p, int t, const char *title) {
  141. Fl_Group *prev_current = Fl_Group::current();
  142. { window = new Fl_Double_Window(490, 380, "Choose File");
  143. window->callback((Fl_Callback*)cb_window, (void*)(this));
  144. { Fl_Group* o = new Fl_Group(10, 10, 470, 25);
  145. { showChoice = new Fl_Choice(65, 10, 215, 25, "Show:");
  146. showChoice->down_box(FL_BORDER_BOX);
  147. showChoice->labelfont(1);
  148. showChoice->callback((Fl_Callback*)cb_showChoice);
  149. Fl_Group::current()->resizable(showChoice);
  150. showChoice->label(show_label);
  151. } // Fl_Choice* showChoice
  152. { favoritesButton = new Fl_Menu_Button(290, 10, 155, 25, "Favorites");
  153. favoritesButton->down_box(FL_BORDER_BOX);
  154. favoritesButton->callback((Fl_Callback*)cb_favoritesButton);
  155. favoritesButton->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  156. favoritesButton->label(favorites_label);
  157. } // Fl_Menu_Button* favoritesButton
  158. { Fl_Button* o = newButton = new Fl_Button(455, 10, 25, 25);
  159. newButton->image(image_new);
  160. newButton->labelsize(8);
  161. newButton->callback((Fl_Callback*)cb_newButton);
  162. o->tooltip(new_directory_tooltip);
  163. } // Fl_Button* newButton
  164. o->end();
  165. } // Fl_Group* o
  166. { Fl_Tile* o = new Fl_Tile(10, 45, 470, 225);
  167. o->callback((Fl_Callback*)cb_);
  168. { fileList = new Fl_File_Browser(10, 45, 295, 225);
  169. fileList->type(2);
  170. fileList->callback((Fl_Callback*)cb_fileList);
  171. fileList->window()->hotspot(fileList);
  172. } // Fl_File_Browser* fileList
  173. { previewBox = new Fl_Box(305, 45, 175, 225, "?");
  174. previewBox->box(FL_DOWN_BOX);
  175. previewBox->labelsize(100);
  176. previewBox->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE));
  177. } // Fl_Box* previewBox
  178. o->end();
  179. Fl_Group::current()->resizable(o);
  180. } // Fl_Tile* o
  181. { Fl_Group* o = new Fl_Group(10, 275, 470, 95);
  182. { Fl_Group* o = new Fl_Group(10, 275, 470, 20);
  183. { previewButton = new Fl_Check_Button(10, 275, 73, 20, "Preview");
  184. previewButton->shortcut(0x80070);
  185. previewButton->down_box(FL_DOWN_BOX);
  186. previewButton->value(1);
  187. previewButton->callback((Fl_Callback*)cb_previewButton);
  188. previewButton->label(preview_label);
  189. } // Fl_Check_Button* previewButton
  190. { Fl_Box* o = new Fl_Box(115, 275, 365, 20);
  191. Fl_Group::current()->resizable(o);
  192. } // Fl_Box* o
  193. o->end();
  194. } // Fl_Group* o
  195. { fileName = new Fl_File_Input(115, 300, 365, 35);
  196. fileName->labelfont(1);
  197. fileName->callback((Fl_Callback*)cb_fileName);
  198. fileName->when(FL_WHEN_ENTER_KEY);
  199. Fl_Group::current()->resizable(fileName);
  200. fileName->when(FL_WHEN_CHANGED | FL_WHEN_ENTER_KEY);
  201. } // Fl_File_Input* fileName
  202. { Fl_Box* o = new Fl_Box(10, 310, 105, 25, "Filename:");
  203. o->labelfont(1);
  204. o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE));
  205. o->label(filename_label);
  206. } // Fl_Box* o
  207. { Fl_Group* o = new Fl_Group(10, 345, 470, 25);
  208. { okButton = new Fl_Return_Button(313, 345, 85, 25, "OK");
  209. okButton->callback((Fl_Callback*)cb_okButton);
  210. okButton->label(fl_ok);
  211. } // Fl_Return_Button* okButton
  212. { Fl_Button* o = cancelButton = new Fl_Button(408, 345, 72, 25, "Cancel");
  213. cancelButton->callback((Fl_Callback*)cb_cancelButton);
  214. o->label(fl_cancel);
  215. } // Fl_Button* cancelButton
  216. { Fl_Box* o = new Fl_Box(10, 345, 30, 25);
  217. Fl_Group::current()->resizable(o);
  218. } // Fl_Box* o
  219. o->end();
  220. } // Fl_Group* o
  221. o->end();
  222. } // Fl_Group* o
  223. if (title) window->label(title);
  224. window->set_modal();
  225. window->end();
  226. } // Fl_Double_Window* window
  227. { favWindow = new Fl_Double_Window(355, 150, "Manage Favorites");
  228. favWindow->user_data((void*)(this));
  229. { favList = new Fl_File_Browser(10, 10, 300, 95);
  230. favList->type(2);
  231. favList->callback((Fl_Callback*)cb_favList);
  232. Fl_Group::current()->resizable(favList);
  233. } // Fl_File_Browser* favList
  234. { Fl_Group* o = new Fl_Group(320, 10, 25, 95);
  235. { favUpButton = new Fl_Button(320, 10, 25, 25, "@8>");
  236. favUpButton->callback((Fl_Callback*)cb_favUpButton);
  237. } // Fl_Button* favUpButton
  238. { favDeleteButton = new Fl_Button(320, 45, 25, 25, "X");
  239. favDeleteButton->labelfont(1);
  240. favDeleteButton->callback((Fl_Callback*)cb_favDeleteButton);
  241. Fl_Group::current()->resizable(favDeleteButton);
  242. } // Fl_Button* favDeleteButton
  243. { favDownButton = new Fl_Button(320, 80, 25, 25, "@2>");
  244. favDownButton->callback((Fl_Callback*)cb_favDownButton);
  245. } // Fl_Button* favDownButton
  246. o->end();
  247. } // Fl_Group* o
  248. { Fl_Group* o = new Fl_Group(10, 113, 335, 29);
  249. { favCancelButton = new Fl_Button(273, 115, 72, 25, "Cancel");
  250. favCancelButton->callback((Fl_Callback*)cb_favCancelButton);
  251. favCancelButton->label(fl_cancel);
  252. } // Fl_Button* favCancelButton
  253. { favOkButton = new Fl_Return_Button(181, 115, 79, 25, "Save");
  254. favOkButton->callback((Fl_Callback*)cb_favOkButton);
  255. favOkButton->label(save_label);
  256. } // Fl_Return_Button* favOkButton
  257. { Fl_Box* o = new Fl_Box(10, 115, 161, 25);
  258. Fl_Group::current()->resizable(o);
  259. } // Fl_Box* o
  260. o->end();
  261. } // Fl_Group* o
  262. favWindow->label(manage_favorites_label);
  263. favWindow->set_modal();
  264. favWindow->size_range(181, 150);
  265. favWindow->end();
  266. } // Fl_Double_Window* favWindow
  267. callback_ = 0;
  268. data_ = 0;
  269. directory_[0] = 0;
  270. window->size_range(window->w(), window->h(), Fl::w(), Fl::h());
  271. type(t);
  272. filter(p);
  273. update_favorites();
  274. value(d);
  275. type(t);
  276. int e;
  277. prefs_.get("preview", e, 1);
  278. preview(e);
  279. Fl_Group::current(prev_current);
  280. ext_group=(Fl_Widget*)0;
  281. }
  282. Fl_File_Chooser::~Fl_File_Chooser() {
  283. Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
  284. if(ext_group)window->remove(ext_group);
  285. delete window;
  286. delete favWindow;
  287. }
  288. void Fl_File_Chooser::callback(void (*cb)(Fl_File_Chooser *, void *), void *d ) {
  289. callback_ = cb;
  290. data_ = d;
  291. }
  292. void Fl_File_Chooser::color(Fl_Color c) {
  293. fileList->color(c);
  294. }
  295. Fl_Color Fl_File_Chooser::color() {
  296. return (fileList->color());
  297. }
  298. char * Fl_File_Chooser::directory() {
  299. return directory_;
  300. }
  301. const char * Fl_File_Chooser::filter() {
  302. return (fileList->filter());
  303. }
  304. int Fl_File_Chooser::filter_value() {
  305. return showChoice->value();
  306. }
  307. void Fl_File_Chooser::filter_value(int f) {
  308. showChoice->value(f);
  309. showChoiceCB();
  310. }
  311. void Fl_File_Chooser::hide() {
  312. window->hide();
  313. }
  314. void Fl_File_Chooser::iconsize(uchar s) {
  315. fileList->iconsize(s);
  316. }
  317. uchar Fl_File_Chooser::iconsize() {
  318. return (fileList->iconsize());
  319. }
  320. void Fl_File_Chooser::label(const char *l) {
  321. window->label(l);
  322. }
  323. const char * Fl_File_Chooser::label() {
  324. return (window->label());
  325. }
  326. void Fl_File_Chooser::ok_label(const char *l) {
  327. okButton->label(l);
  328. int w=0, h=0;
  329. okButton->measure_label(w, h);
  330. okButton->resize(cancelButton->x() - 50 - w, cancelButton->y(),
  331. w + 40, 25);
  332. okButton->parent()->init_sizes();
  333. }
  334. const char * Fl_File_Chooser::ok_label() {
  335. return (okButton->label());
  336. }
  337. void Fl_File_Chooser::show() {
  338. window->hotspot(fileList);
  339. window->show();
  340. Fl::flush();
  341. fl_cursor(FL_CURSOR_WAIT);
  342. rescan_keep_filename();
  343. fl_cursor(FL_CURSOR_DEFAULT);
  344. fileName->take_focus();
  345. }
  346. int Fl_File_Chooser::shown() {
  347. return window->shown();
  348. }
  349. void Fl_File_Chooser::textcolor(Fl_Color c) {
  350. fileList->textcolor(c);
  351. }
  352. Fl_Color Fl_File_Chooser::textcolor() {
  353. return (fileList->textcolor());
  354. }
  355. void Fl_File_Chooser::textfont(Fl_Font f) {
  356. fileList->textfont(f);
  357. }
  358. Fl_Font Fl_File_Chooser::textfont() {
  359. return (fileList->textfont());
  360. }
  361. void Fl_File_Chooser::textsize(Fl_Fontsize s) {
  362. fileList->textsize(s);
  363. }
  364. Fl_Fontsize Fl_File_Chooser::textsize() {
  365. return (fileList->textsize());
  366. }
  367. void Fl_File_Chooser::type(int t) {
  368. type_ = t;
  369. if (t & MULTI)
  370. fileList->type(FL_MULTI_BROWSER);
  371. else
  372. fileList->type(FL_HOLD_BROWSER);
  373. if (t & CREATE)
  374. newButton->activate();
  375. else
  376. newButton->deactivate();
  377. if (t & DIRECTORY)
  378. fileList->filetype(Fl_File_Browser::DIRECTORIES);
  379. else
  380. fileList->filetype(Fl_File_Browser::FILES);
  381. }
  382. int Fl_File_Chooser::type() {
  383. return (type_);
  384. }
  385. void * Fl_File_Chooser::user_data() const {
  386. return (data_);
  387. }
  388. void Fl_File_Chooser::user_data(void *d) {
  389. data_ = d;
  390. }
  391. int Fl_File_Chooser::visible() {
  392. return window->visible();
  393. }
  394. Fl_Widget* Fl_File_Chooser::add_extra(Fl_Widget* gr) {
  395. Fl_Widget* ret=ext_group;
  396. if (gr==ext_group) {
  397. return ret;
  398. }
  399. if (ext_group) {
  400. int sh=ext_group->h()+4;
  401. Fl_Widget* svres=window->resizable();
  402. window->resizable(NULL);
  403. window->size(window->w(),window->h()-sh);
  404. window->remove(ext_group);
  405. ext_group=NULL;
  406. window->resizable(svres);
  407. }
  408. if (gr) {
  409. int nh=window->h()+gr->h()+4;
  410. Fl_Widget* svres=window->resizable();
  411. window->resizable(NULL);
  412. window->size(window->w(),nh);
  413. gr->position(2,okButton->y()+okButton->h()+2);
  414. window->add(gr);
  415. ext_group=gr;
  416. window->resizable(svres);
  417. }
  418. return ret;
  419. }
  420. //
  421. // End of "$Id: Fl_File_Chooser.cxx 7903 2010-11-28 21:06:39Z matt $".
  422. //