]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/xforms/FormBibtex.C
Change glob() API to accept a dir parameter.
[lyx.git] / src / frontends / xforms / FormBibtex.C
index 71416187e1356669392e783a7089bb184adb3c63..3703e07f82708cf34b7ec67ba64724e708ce2668 100644 (file)
 #include "xformsBC.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::string;
 
+namespace lyx {
+
+using support::ChangeExtension;
+using support::compare;
+using support::contains;
+using support::FileFilterList;
+using support::getStringFromVector;
+using support::getVectorFromString;
+using support::OnlyFilename;
+using support::prefixIs;
+using support::split;
+
+namespace frontend {
+
 
 typedef FormController<ControlBibtex, FormView<FD_bibtex> > base_class;
 
@@ -66,6 +69,7 @@ void FormBibtex::build()
        bcview().addReadOnly(dialog_->button_rescan);
        bcview().addReadOnly(dialog_->input_style);
        bcview().addReadOnly(dialog_->check_bibtotoc);
+       bcview().addReadOnly(dialog_->choice_btprint);
 
        // trigger an input event for cut&paste with middle mouse button.
        setPrehandler(dialog_->input_database);
@@ -78,6 +82,11 @@ void FormBibtex::build()
        fl_set_browser_dblclick_callback(dialog_->browser_styles,
                                         C_FormDialogView_InputCB, 2);
 
+       fl_addto_choice(dialog_->choice_btprint,
+                       _(" all cited references "
+                         "| all uncited references "
+                         "| all references ").c_str());
+
        // set up the tooltips
        string str = _("The database you want to cite from. Insert it "
                       "without the default extension \".bib\". Use comma "
@@ -107,6 +116,9 @@ void FormBibtex::build()
                "the styles which are in directories where TeX finds them "
                "are listed!");
        tooltips().init(dialog_->button_rescan, str);
+
+       str = _("The bibliography section contains...");
+       tooltips().init(dialog_->choice_btprint, str);
 }
 
 
@@ -115,11 +127,7 @@ 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"),
-                                           filter);
+               string out_name = controller().browseBib("");
                if (!out_name.empty()) {
                        // add the database to any existing ones
                        if (!in_name.empty())
@@ -130,10 +138,7 @@ 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);
-               FileFilterList const
-                       filter(_("*.bst| BibTeX Styles (*.bst)"));
-               string const style = controller()
-                       .browse(in_name, _("Select BibTeX-Style"), filter);
+               string const style = controller().browseBst(in_name);
                if (!style.empty()) {
                        fl_set_input(dialog_->input_style, style.c_str());
                }
@@ -177,8 +182,10 @@ void FormBibtex::update()
        string bibtotoc = "bibtotoc";
        string bibstyle = controller().params().getOptions();
 
+       bool const bibtopic = controller().usingBibtopic();
        bool const bibtotoc_exists = prefixIs(bibstyle, bibtotoc);
-       fl_set_button(dialog_->check_bibtotoc, bibtotoc_exists);
+       fl_set_button(dialog_->check_bibtotoc, bibtotoc_exists && !bibtopic);
+       setEnabled(dialog_->check_bibtotoc, !bibtopic);
        if (bibtotoc_exists) {
                if (contains(bibstyle, ',')) { // bibstyle exists?
                        bibstyle = split(bibstyle, bibtotoc, ',');
@@ -188,6 +195,16 @@ void FormBibtex::update()
        }
        fl_set_input(dialog_->input_style, bibstyle.c_str());
 
+       string btprint = controller().params().getSecOptions();
+       int btp = 1;
+       if (btprint == "btPrintNotCited")
+               btp = 2;
+       else if (btprint == "btPrintAll")
+               btp = 3;
+
+       fl_set_choice(dialog_->choice_btprint, btp);
+       setEnabled(dialog_->choice_btprint, bibtopic);
+
        vector<string> styles;
        controller().getBibStyles(styles);
 
@@ -205,7 +222,7 @@ string const unique_and_no_extensions(string const & str_in)
             it != dbase.end(); ++it) {
                *it = ChangeExtension(*it, string());
        }
-       lyx::eliminate_duplicates(dbase);
+       eliminate_duplicates(dbase);
        return getStringFromVector(dbase);
 }
 
@@ -219,6 +236,7 @@ void FormBibtex::apply()
                // no database -> no bibtex-command and no options!
                controller().params().setContents("");
                controller().params().setOptions("");
+               controller().params().setSecOptions("");
                return;
        }
 
@@ -238,7 +256,34 @@ void FormBibtex::apply()
                controller().params().setOptions(bibtotoc + ',' + bibstyle);
 
        } else {
-               // At least one of addtotoc and bibstyle is empty. No harm to output both!
+               // At least one of addtotoc and bibstyle is empty.
+               // No harm to output both!
                controller().params().setOptions(bibtotoc + bibstyle);
        }
+
+       // bibtopic allows three kinds of sections:
+       // 1. sections that include all cited references of the database(s)
+       // 2. sec. that include all uncited references of the database(s)
+       // 3. sec. that include all references of the database(s), cited or not
+       if (controller().usingBibtopic()){
+               int btp = fl_get_choice(dialog_->choice_btprint);
+               switch (btp) {
+               case 1:
+                       controller().params().setSecOptions("btPrintCited");
+                       break;
+               case 2:
+                       controller().params().setSecOptions("btPrintNotCited");
+                       break;
+               case 3:
+                       controller().params().setSecOptions("btPrintAll");
+                       break;
+               }
+       }
+
+       else
+               controller().params().setSecOptions("");
+
 }
+
+} // namespace frontend
+} // namespace lyx