text: //
  // "$Id: Fl_File_Chooser.cxx 10358 2014-10-05 11:56:06Z AlbrechtS $"
  //
  // Fl_File_Chooser dialog for the Fast Light Tool Kit (FLTK).
  //
  // Copyright 1998-2014 by Bill Spitzak and others.
  //
  // This library is free software. Distribution and use rights are outlined in
  // the file "COPYING" which should have been included with this file.  If this
  // file is missing or damaged, see the license at:
  //
  //     http://www.fltk.org/COPYING.php
  //
  // Please report all bugs and problems on the following page:
  //
  //     http://www.fltk.org/str.php
  //
  // ========================================================================
  //  DO NOT EDIT FL/Fl_File_Chooser.H and src/Fl_File_Chooser.cxx !!!
  // ========================================================================
  //  Please use fluid to change src/Fl_File_Chooser.fl interactively
  //  and then use fluid to "write code" or edit and use fluid -c .
  // ========================================================================
  //
  
  // generated by Fast Light User Interface Designer (fluid) version 1.0303
  
  #include "../FL/Fl_File_Chooser.H"
  #include <FL/fl_draw.H>
  
  void Fl_File_Chooser::cb_window_i(Fl_Double_Window*, void*) {
    fileName->value("");
  fileList->deselect();
  Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
  window->hide();
  }
  void Fl_File_Chooser::cb_window(Fl_Double_Window* o, void* v) {
    ((Fl_File_Chooser*)(o->user_data()))->cb_window_i(o,v);
  }
  
  void Fl_File_Chooser::cb_showChoice_i(Fl_Choice*, void*) {
    showChoiceCB();
  }
  void Fl_File_Chooser::cb_showChoice(Fl_Choice* o, void* v) {
    ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_showChoice_i(o,v);
  }
  
  void Fl_File_Chooser::cb_favoritesButton_i(Fl_Menu_Button*, void*) {
    favoritesButtonCB();
  }
  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);
  }
  
  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()->parent()->user_data()))->cb_newButton_i(o,v);
  }
  
  #include <FL/Fl_Bitmap.H>
  static const unsigned char idata_new[] =
  {0,0,120,0,132,0,2,1,1,254,1,128,49,128,49,128,253,128,253,128,49,128,49,
  128,1,128,1,128,255,255,0,0};
  static Fl_Bitmap image_new(idata_new, 16, 16);
  
  void Fl_File_Chooser::cb__i(Fl_Tile*, void*) {
    update_preview();
  }
  void Fl_File_Chooser::cb_(Fl_Tile* o, void* v) {
    ((Fl_File_Chooser*)(o->parent()->user_data()))->cb__i(o,v);
  }
  
  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()->parent()->user_data()))->cb_fileList_i(o,v);
  }
  
  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);
  }
  
  void Fl_File_Chooser::cb_showHiddenButton_i(Fl_Check_Button*, void*) {
    showHidden(showHiddenButton->value());
  }
  void Fl_File_Chooser::cb_showHiddenButton(Fl_Check_Button* o, void* v) {
    ((Fl_File_Chooser*)(o->parent()->parent()->parent()->user_data()))->cb_showHiddenButton_i(o,v);
  }
  
  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()->parent()->user_data()))->cb_fileName_i(o,v);
  }
  
  void Fl_File_Chooser::cb_okButton_i(Fl_Return_Button*, void*) {
    window->hide();
  
  // Do any callback that is registered...
  if (callback_)
    (*callback_)(this, data_);
  }
  void Fl_File_Chooser::cb_okButton(Fl_Return_Button* o, void* v) {
    ((Fl_File_Chooser*)(o->parent()->parent()->parent()->user_data()))->cb_okButton_i(o,v);
  }
  
  void Fl_File_Chooser::cb_cancelButton_i(Fl_Button*, void*) {
    fileName->value("");
  fileList->deselect();
  Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
  window->hide();
  }
  void Fl_File_Chooser::cb_cancelButton(Fl_Button* o, void* v) {
    ((Fl_File_Chooser*)(o->parent()->parent()->parent()->user_data()))->cb_cancelButton_i(o,v);
  }
  
  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);
  }
  
  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()->parent()->user_data()))->cb_favUpButton_i(o,v);
  }
  
  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()->parent()->user_data()))->cb_favDeleteButton_i(o,v);
  }
  
  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()->parent()->user_data()))->cb_favDownButton_i(o,v);
  }
  
  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()->parent()->user_data()))->cb_favCancelButton_i(o,v);
  }
  
  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()->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_Group *prev_current = Fl_Group::current();
    { window = new Fl_Double_Window(490, 380, "Choose File");
      window->callback((Fl_Callback*)cb_window, (void*)(this));
      { Fl_Group* o = new Fl_Group(10, 10, 470, 25);
        { showChoice = new Fl_Choice(65, 10, 215, 25, "Show:");
          showChoice->down_box(FL_BORDER_BOX);
          showChoice->labelfont(1);
          showChoice->callback((Fl_Callback*)cb_showChoice);
          Fl_Group::current()->resizable(showChoice);
          showChoice->label(show_label);
        } // Fl_Choice* showChoice
        { favoritesButton = new Fl_Menu_Button(290, 10, 155, 25, "Favorites");
          favoritesButton->down_box(FL_BORDER_BOX);
          favoritesButton->callback((Fl_Callback*)cb_favoritesButton);
          favoritesButton->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
          favoritesButton->label(favorites_label);
        } // Fl_Menu_Button* favoritesButton
        { Fl_Button* o = newButton = new Fl_Button(455, 10, 25, 25);
          newButton->image(image_new);
          newButton->labelsize(8);
          newButton->callback((Fl_Callback*)cb_newButton);
          o->tooltip(new_directory_tooltip);
        } // Fl_Button* newButton
        o->end();
      } // Fl_Group* o
      { Fl_Tile* o = new Fl_Tile(10, 45, 470, 225);
        o->callback((Fl_Callback*)cb_);
        { fileList = new Fl_File_Browser(10, 45, 295, 225);
          fileList->type(2);
          fileList->callback((Fl_Callback*)cb_fileList);
          fileList->window()->hotspot(fileList);
        } // Fl_File_Browser* fileList
        { previewBox = new Fl_Box(305, 45, 175, 225, "?");
          previewBox->box(FL_DOWN_BOX);
          previewBox->labelsize(100);
          previewBox->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE));
        } // Fl_Box* previewBox
        o->end();
        Fl_Group::current()->resizable(o);
      } // Fl_Tile* o
      { Fl_Group* o = new Fl_Group(10, 275, 470, 95);
        { Fl_Group* o = new Fl_Group(10, 275, 470, 20);
          { previewButton = new Fl_Check_Button(10, 275, 73, 20, "Preview");
            previewButton->shortcut(0x80070);
            previewButton->down_box(FL_DOWN_BOX);
            previewButton->value(1);
            previewButton->callback((Fl_Callback*)cb_previewButton);
            previewButton->label(preview_label);
          } // Fl_Check_Button* previewButton
          { showHiddenButton = new Fl_Check_Button(115, 275, 165, 20, "Show hidden files");
            showHiddenButton->down_box(FL_DOWN_BOX);
            showHiddenButton->callback((Fl_Callback*)cb_showHiddenButton);
            showHiddenButton->label(hidden_label);
          } // Fl_Check_Button* showHiddenButton
          { Fl_Box* o = new Fl_Box(115, 275, 365, 20);
            Fl_Group::current()->resizable(o);
          } // Fl_Box* o
          o->end();
        } // Fl_Group* o
        { fileName = new Fl_File_Input(115, 300, 365, 35);
          fileName->labelfont(1);
          fileName->callback((Fl_Callback*)cb_fileName);
          fileName->when(FL_WHEN_ENTER_KEY);
          Fl_Group::current()->resizable(fileName);
          fileName->when(FL_WHEN_CHANGED | FL_WHEN_ENTER_KEY_ALWAYS);
        } // Fl_File_Input* fileName
        { Fl_Box* o = new Fl_Box(10, 310, 105, 25, "Filename:");
          o->labelfont(1);
          o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE));
          o->label(filename_label);
        } // Fl_Box* o
        { Fl_Group* o = new Fl_Group(10, 345, 470, 25);
          { okButton = new Fl_Return_Button(313, 345, 85, 25, "OK");
            okButton->callback((Fl_Callback*)cb_okButton);
            okButton->label(fl_ok);
          } // Fl_Return_Button* okButton
          { Fl_Button* o = cancelButton = new Fl_Button(408, 345, 72, 25, "Cancel");
            cancelButton->callback((Fl_Callback*)cb_cancelButton);
            o->label(fl_cancel);
          } // Fl_Button* cancelButton
          { Fl_Box* o = new Fl_Box(10, 345, 30, 25);
            Fl_Group::current()->resizable(o);
          } // Fl_Box* o
          o->end();
        } // Fl_Group* o
        o->end();
      } // Fl_Group* o
      if (title) window->label(title);
      window->set_modal();
      window->end();
    } // Fl_Double_Window* window
    { favWindow = new Fl_Double_Window(355, 150, "Manage Favorites");
      favWindow->user_data((void*)(this));
      { favList = new Fl_File_Browser(10, 10, 300, 95);
        favList->type(2);
        favList->callback((Fl_Callback*)cb_favList);
        Fl_Group::current()->resizable(favList);
      } // Fl_File_Browser* favList
      { Fl_Group* o = new Fl_Group(320, 10, 25, 95);
        { favUpButton = new Fl_Button(320, 10, 25, 25, "@8>");
          favUpButton->callback((Fl_Callback*)cb_favUpButton);
        } // Fl_Button* favUpButton
        { favDeleteButton = new Fl_Button(320, 45, 25, 25, "X");
          favDeleteButton->labelfont(1);
          favDeleteButton->callback((Fl_Callback*)cb_favDeleteButton);
          Fl_Group::current()->resizable(favDeleteButton);
        } // Fl_Button* favDeleteButton
        { favDownButton = new Fl_Button(320, 80, 25, 25, "@2>");
          favDownButton->callback((Fl_Callback*)cb_favDownButton);
        } // Fl_Button* favDownButton
        o->end();
      } // Fl_Group* o
      { Fl_Group* o = new Fl_Group(10, 113, 335, 29);
        { favCancelButton = new Fl_Button(273, 115, 72, 25, "Cancel");
          favCancelButton->callback((Fl_Callback*)cb_favCancelButton);
          favCancelButton->label(fl_cancel);
        } // Fl_Button* favCancelButton
        { favOkButton = new Fl_Return_Button(181, 115, 79, 25, "Save");
          favOkButton->callback((Fl_Callback*)cb_favOkButton);
          favOkButton->label(save_label);
        } // Fl_Return_Button* favOkButton
        { Fl_Box* o = new Fl_Box(10, 115, 161, 25);
          Fl_Group::current()->resizable(o);
        } // Fl_Box* o
        o->end();
      } // Fl_Group* o
      favWindow->label(manage_favorites_label);
      favWindow->set_modal();
      favWindow->size_range(181, 150);
      favWindow->end();
    } // Fl_Double_Window* favWindow
    callback_ = 0;
    data_ = 0;
    directory_[0] = 0;
    window->size_range(window->w(), window->h(), Fl::w(), Fl::h());
    type(t);
    filter(p);
    update_favorites();
    value(d);
    type(t);
    int e;
    prefs_.get("preview", e, 1);
    preview(e);
    Fl_Group::current(prev_current);
    ext_group=(Fl_Widget*)0;
  }
  
  Fl_File_Chooser::~Fl_File_Chooser() {
    Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
    if(ext_group)window->remove(ext_group);
    delete window;
    delete favWindow;
  }
  
  void Fl_File_Chooser::callback(void (*cb)(Fl_File_Chooser *, void *), void *d ) {
    callback_ = cb;
    data_     = d;
  }
  
  void Fl_File_Chooser::color(Fl_Color c) {
    fileList->color(c);
  }
  
  Fl_Color Fl_File_Chooser::color() {
    return (fileList->color());
  }
  
  char * Fl_File_Chooser::directory() {
    return directory_;
  }
  
  const char * Fl_File_Chooser::filter() {
    return (fileList->filter());
  }
  
  int Fl_File_Chooser::filter_value() {
    return showChoice->value();
  }
  
  void Fl_File_Chooser::filter_value(int f) {
    showChoice->value(f);
    showChoiceCB();
  }
  
  void Fl_File_Chooser::hide() {
    window->hide();
  }
  
  void Fl_File_Chooser::iconsize(uchar s) {
    fileList->iconsize(s);
  }
  
  uchar Fl_File_Chooser::iconsize() {
    return (fileList->iconsize());
  }
  
  void Fl_File_Chooser::label(const char *l) {
    window->label(l);
  }
  
  const char * Fl_File_Chooser::label() {
    return (window->label());
  }
  
  void Fl_File_Chooser::ok_label(const char *l) {
    okButton->label(l);
    int w=0, h=0;
    okButton->measure_label(w, h);
    okButton->resize(cancelButton->x() - 50 - w, cancelButton->y(),
                     w + 40, 25);
    okButton->parent()->init_sizes();
  }
  
  const char * Fl_File_Chooser::ok_label() {
    return (okButton->label());
  }
  
  int Fl_File_Chooser::shown() {
    return window->shown();
  }
  
  void Fl_File_Chooser::textcolor(Fl_Color c) {
    fileList->textcolor(c);
  }
  
  Fl_Color Fl_File_Chooser::textcolor() {
    return (fileList->textcolor());
  }
  
  void Fl_File_Chooser::textfont(Fl_Font f) {
    fileList->textfont(f);
  }
  
  Fl_Font Fl_File_Chooser::textfont() {
    return (fileList->textfont());
  }
  
  void Fl_File_Chooser::textsize(Fl_Fontsize s) {
    fileList->textsize(s);
  }
  
  Fl_Fontsize Fl_File_Chooser::textsize() {
    return (fileList->textsize());
  }
  
  void Fl_File_Chooser::type(int t) {
    type_ = t;
    if (t & MULTI)
      fileList->type(FL_MULTI_BROWSER);
    else
      fileList->type(FL_HOLD_BROWSER);
    if (t & CREATE)
      newButton->activate();
    else
      newButton->deactivate();
    if (t & DIRECTORY)
      fileList->filetype(Fl_File_Browser::DIRECTORIES);
    else
      fileList->filetype(Fl_File_Browser::FILES);
  }
  
  int Fl_File_Chooser::type() {
    return (type_);
  }
  
  void * Fl_File_Chooser::user_data() const {
    return (data_);
  }
  
  void Fl_File_Chooser::user_data(void *d) {
    data_ = d;
  }
  
  int Fl_File_Chooser::visible() {
    return window->visible();
  }
  
  Fl_Widget* Fl_File_Chooser::add_extra(Fl_Widget* gr) {
    Fl_Widget* ret=ext_group;
    if (gr==ext_group) {
      return ret;
    }
    if (ext_group) {
      int sh=ext_group->h()+4;
      Fl_Widget* svres=window->resizable();
      window->resizable(NULL);
      window->size(window->w(),window->h()-sh);
      window->remove(ext_group);
      ext_group=NULL;
      window->resizable(svres);
    }
    if (gr) {
      int nh=window->h()+gr->h()+4;
      Fl_Widget* svres=window->resizable();
      window->resizable(NULL);
      window->size(window->w(),nh);
      gr->position(2,okButton->y()+okButton->h()+2);
      window->add(gr);
      ext_group=gr;
      window->resizable(svres);
    }
    return ret;
  }
  
  //
  // End of "$Id: Fl_File_Chooser.cxx 10358 2014-10-05 11:56:06Z AlbrechtS $".
  //
  