* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
- * \author Angus Leeming
+ * \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.
*/
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
#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 "debug.h"
-#include "support/LAssert.h"
-#include "support/lstrings.h"
#include "support/filetools.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::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"))
{}
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);
fl_set_input_return(dialog_->input_database, FL_RETURN_CHANGED);
fl_set_input_return(dialog_->input_style, FL_RETURN_CHANGED);
+ // callback for double click in browser
+ fl_set_browser_dblclick_callback(dialog_->browser_styles,
+ C_FormDialogView_InputCB, 2);
+
// set up the tooltips
string str = _("The database you want to cite from. Insert it "
"without the default extension \".bib\". Use comma "
"of Contents");
tooltips().init(dialog_->check_bibtotoc, str);
- str = _("Choose a BibTeX style from the list.");
+ 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 "
"are listed!");
}
-ButtonPolicy::SMInput FormBibtex::input(FL_OBJECT * ob, long)
+ButtonPolicy::SMInput FormBibtex::input(FL_OBJECT * ob, long ob_value)
{
if (ob == dialog_->button_database_browse) {
// When browsing, take the first file only
fl_set_input(dialog_->input_style, style.c_str());
}
- } else if (ob == dialog_->browser_styles) {
+ } else if (ob == dialog_->browser_styles && ob_value == 2) {
+ // double clicked in styles browser
string const style = getString(dialog_->browser_styles);
if (style.empty()) {
return ButtonPolicy::SMI_NOOP;
fl_set_input(dialog_->input_style,
ChangeExtension(style, "").c_str());
}
+ // reset the browser so that the following
+ // single-click callback doesn't do anything
+ fl_deselect_browser(dialog_->browser_styles);
} 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 ...
}
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 {
string const bibtotoc = addtotoc ? "bibtotoc" : "";
if (addtotoc && !bibstyle.empty()) {
// Both bibtotoc and style.
- controller().params().setOptions(bibtotoc + "," + bibstyle);
+ controller().params().setOptions(bibtotoc + ',' + bibstyle);
} else {
// At least one of addtotoc and bibstyle is empty. No harm to output both!