]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/xforms/FormBibtex.C
Introduce LFUN_PRINT.
[lyx.git] / src / frontends / xforms / FormBibtex.C
index 973d70b0f8b1504d6cbb42a40f0d5c26ddd78ea6..71416187e1356669392e783a7089bb184adb3c63 100644 (file)
@@ -5,37 +5,47 @@
  *
  * \author Angus Leeming
  * \author John Levon
- * \author Herbert Voss
+ * \author Herbert Voß
  * \author Rob Lahaye
  *
- * Full author contact details are available in file CREDITS
+ * Full author contact details are available in file CREDITS.
  */
 
-
 #include <config.h>
-#include "xformsBC.h"
-#include "ControlBibtex.h"
+
 #include "FormBibtex.h"
+#include "ControlBibtex.h"
 #include "forms/form_bibtex.h"
+
 #include "Tooltips.h"
 #include "xforms_helpers.h"
-#include FORMS_H_LOCATION
+#include "xformsBC.h"
 
-#include "helper_funcs.h"
-#include "gettext.h"
-#include "support/lstrings.h"
 #include "support/filetools.h"
+#include "support/globbing.h"
+#include "support/lstrings.h"
 #include "support/lyxalgo.h"
 
+#include "lyx_forms.h"
+
+using lyx::support::ChangeExtension;
+using lyx::support::compare;
+using lyx::support::contains;
+using lyx::support::FileFilterList;
+using lyx::support::getStringFromVector;
+using lyx::support::getVectorFromString;
+using lyx::support::OnlyFilename;
+using lyx::support::prefixIs;
+using lyx::support::split;
 
 using std::vector;
-using std::sort;
+using std::string;
 
 
-typedef FormCB<ControlBibtex, FormDB<FD_bibtex> > base_class;
+typedef FormController<ControlBibtex, FormView<FD_bibtex> > base_class;
 
-FormBibtex::FormBibtex()
-       : base_class(_("BibTeX Database"))
+FormBibtex::FormBibtex(Dialog & parent)
+       : base_class(parent, _("BibTeX Database"))
 {}
 
 
@@ -44,18 +54,18 @@ void FormBibtex::build()
        dialog_.reset(build_bibtex(this));
 
        // Manage the ok, apply, restore and cancel/close buttons
-       bc().setOK(dialog_->button_ok);
-       bc().setApply(dialog_->button_apply);
-       bc().setCancel(dialog_->button_close);
-       bc().setRestore(dialog_->button_restore);
+       bcview().setOK(dialog_->button_ok);
+       bcview().setApply(dialog_->button_apply);
+       bcview().setCancel(dialog_->button_close);
+       bcview().setRestore(dialog_->button_restore);
 
        // disable for read-only documents
-       bc().addReadOnly(dialog_->input_database);
-       bc().addReadOnly(dialog_->button_database_browse);
-       bc().addReadOnly(dialog_->button_style_browse);
-       bc().addReadOnly(dialog_->button_rescan);
-       bc().addReadOnly(dialog_->input_style);
-       bc().addReadOnly(dialog_->check_bibtotoc);
+       bcview().addReadOnly(dialog_->input_database);
+       bcview().addReadOnly(dialog_->button_database_browse);
+       bcview().addReadOnly(dialog_->button_style_browse);
+       bcview().addReadOnly(dialog_->button_rescan);
+       bcview().addReadOnly(dialog_->input_style);
+       bcview().addReadOnly(dialog_->check_bibtotoc);
 
        // trigger an input event for cut&paste with middle mouse button.
        setPrehandler(dialog_->input_database);
@@ -66,7 +76,7 @@ void FormBibtex::build()
 
        // callback for double click in browser
        fl_set_browser_dblclick_callback(dialog_->browser_styles,
-                                        C_FormBaseInputCB, 2);
+                                        C_FormDialogView_InputCB, 2);
 
        // set up the tooltips
        string str = _("The database you want to cite from. Insert it "
@@ -87,8 +97,11 @@ void FormBibtex::build()
 
        str = _("Double click to choose a BibTeX style from the list.");
        tooltips().init(dialog_->browser_styles, str);
+
+#if FL_VERSION == 0 || (FL_REVISION == 0 && FL_FIXLEVEL == 0)
        // Work-around xforms' bug; enable tooltips for browser widgets.
        setPrehandler(dialog_->browser_styles);
+#endif
 
        str = _("Updates your TeX system for a new bibstyle list. Only "
                "the styles which are in directories where TeX finds them "
@@ -102,10 +115,11 @@ ButtonPolicy::SMInput FormBibtex::input(FL_OBJECT * ob, long ob_value)
        if (ob == dialog_->button_database_browse) {
                // When browsing, take the first file only
                string const in_name = getString(dialog_->input_database);
+               FileFilterList const
+                       filter(_("*.bib| BibTeX Databases (*.bib)"));
                string out_name =
-                       controller().Browse("",
-                               _("Select Database"),
-                               _("*.bib| BibTeX Databases (*.bib)"));
+                       controller().browse("", _("Select Database"),
+                                           filter);
                if (!out_name.empty()) {
                        // add the database to any existing ones
                        if (!in_name.empty())
@@ -116,9 +130,10 @@ ButtonPolicy::SMInput FormBibtex::input(FL_OBJECT * ob, long ob_value)
 
        } else if (ob == dialog_->button_style_browse) {
                string const in_name = getString(dialog_->input_style);
-               string const style = controller().Browse(in_name,
-                                       _("Select BibTeX-Style"),
-                                       _("*.bst| BibTeX Styles (*.bst)"));
+               FileFilterList const
+                       filter(_("*.bst| BibTeX Styles (*.bst)"));
+               string const style = controller()
+                       .browse(in_name, _("Select BibTeX-Style"), filter);
                if (!style.empty()) {
                        fl_set_input(dialog_->input_style, style.c_str());
                }
@@ -139,9 +154,10 @@ ButtonPolicy::SMInput FormBibtex::input(FL_OBJECT * ob, long ob_value)
        } else if (ob == dialog_->button_rescan) {
                fl_clear_browser(dialog_->browser_styles);
                controller().rescanBibStyles();
-               string const str =
-                       controller().getBibStyles();
-               fl_add_browser_line(dialog_->browser_styles, str.c_str());
+               vector<string> styles;
+               controller().getBibStyles(styles);
+               fl_add_browser_line(dialog_->browser_styles,
+                                   getStringFromVector(styles, "\n").c_str());
        }
 
        // with an empty database nothing makes sense ...
@@ -172,9 +188,12 @@ void FormBibtex::update()
        }
        fl_set_input(dialog_->input_style, bibstyle.c_str());
 
+       vector<string> styles;
+       controller().getBibStyles(styles);
+
        fl_clear_browser(dialog_->browser_styles);
-       string const str = controller().getBibStyles();
-       fl_add_browser_line(dialog_->browser_styles, str.c_str());
+       fl_add_browser_line(dialog_->browser_styles,
+                           getStringFromVector(styles, "\n").c_str());
 }
 
 namespace {