+2001-08-20 Herbert Voss <voss@perce.de>
+
+ * FormBibtex.C:
+ * forms/form_bibtex.fd: enhanced bibtex-data gui to browse for
+ databases and styles. Added an option for "bibliography into toc"
+
2001-08-18 Lars Gullik Bjønnes <larsbj@birdstep.com>
* FormMathsBitmap.h: use the lyx::shared_c_ptr that uses free() to
*
* \author Angus Leeming
* \author John Levon
+ * \author Herbert Voss <voss@lyx.org>
*/
#ifdef __GNUG__
#include "gettext.h"
#include "debug.h"
#include "support/lstrings.h"
+#include "support/filetools.h"
+
typedef FormCB<ControlBibtex, FormDB<FD_form_bibtex> > base_class;
bc().setOK(dialog_->button_ok);
bc().setCancel(dialog_->button_cancel);
+ bc().addReadOnly(dialog_->database_browse);
bc().addReadOnly(dialog_->database);
+ bc().addReadOnly(dialog_->style_browse);
bc().addReadOnly(dialog_->style);
+ bc().addReadOnly(dialog_->radio_bibtotoc);
}
-ButtonPolicy::SMInput FormBibtex::input(FL_OBJECT *, long)
+ButtonPolicy::SMInput FormBibtex::input(FL_OBJECT * ob, long)
{
- // minimal validation
- if (!compare(fl_get_input(dialog_->database),""))
+ if (ob == dialog_->database_browse) {
+ string const in_name = fl_get_input(dialog_->database);
+ fl_freeze_form(form());
+ string out_name =
+ controller().Browse(in_name,
+ "Select Database",
+ "*.bib| BibTeX Databases (*.bib)");
+ if (suffixIs(out_name,".bib")) {
+ // to prevent names like xxxbib.bib
+ // latex needs it without suffix
+ out_name = ChangeExtension(out_name,"");
+ }
+
+ fl_set_input(dialog_->database, out_name.c_str());
+ fl_unfreeze_form(form());
+ }
+
+ if (ob == dialog_->style_browse) {
+ string const in_name = fl_get_input(dialog_->style);
+ fl_freeze_form(form());
+ string out_name =
+ controller().Browse(in_name,
+ "Select BibTeX-Style",
+ "*.bst| BibTeX Styles (*.bst)");
+ if (suffixIs(out_name,".bst")) {
+ // to prevent names like xxxbib.bib
+ // name for display only
+ out_name = OnlyFilename(ChangeExtension(out_name,""));
+ }
+
+ fl_set_input(dialog_->style, out_name.c_str());
+ fl_unfreeze_form(form());
+ }
+
+ if (!compare(fl_get_input(dialog_->database),"")) {
return ButtonPolicy::SMI_NOOP;
+ }
return ButtonPolicy::SMI_VALID;
}
{
fl_set_input(dialog_->database,
controller().params().getContents().c_str());
- fl_set_input(dialog_->style,
- controller().params().getOptions().c_str());
+ string bibtotoc = "bibtotoc";
+ string bibstyle (controller().params().getOptions().c_str());
+ if (prefixIs(bibstyle,bibtotoc)) { // bibtotoc exists?
+ fl_set_button(dialog_->radio_bibtotoc,1);
+ if (contains(bibstyle,',')) { // bibstyle exists?
+ bibstyle = split(bibstyle,bibtotoc,',');
+ } else {
+ bibstyle = "";
+ }
+
+ fl_set_input(dialog_->style,bibstyle.c_str());
+
+ } else {
+ fl_set_button(dialog_->radio_bibtotoc,0);
+ fl_set_input(dialog_->style,bibstyle.c_str());
+ }
}
void FormBibtex::apply()
{
controller().params().setContents(fl_get_input(dialog_->database));
- controller().params().setOptions(fl_get_input(dialog_->style));
+ string const bibstyle = fl_get_input(dialog_->style); // may be empty!
+
+ if ((fl_get_button(dialog_->radio_bibtotoc) > 0) &&
+ (!bibstyle.empty())) {
+ // both bibtotoc and style
+ controller().params().setOptions("bibtotoc,"+bibstyle);
+ } else {
+ if (fl_get_button(dialog_->radio_bibtotoc) > 0) {
+ // bibtotoc and no style
+ controller().params().setOptions("bibtotoc");
+ } else {
+ // only style
+ controller().params().setOptions(bibstyle);
+ }
+ }
}
+
FL_OBJECT *obj;
FD_form_bibtex *fdui = new FD_form_bibtex;
- fdui->form = fl_bgn_form(FL_NO_BOX, 220, 130);
+ fdui->form = fl_bgn_form(FL_NO_BOX, 450, 170);
fdui->form->u_vdata = this;
- obj = fl_add_box(FL_UP_BOX, 0, 0, 220, 130, "");
+ obj = fl_add_box(FL_UP_BOX, 0, 0, 450, 170, "");
{
char const * const dummy = N_("Database:|#D");
- fdui->database = obj = fl_add_input(FL_NORMAL_INPUT, 80, 10, 130, 30, idex(_(dummy)));
+ fdui->database = obj = fl_add_input(FL_NORMAL_INPUT, 90, 10, 260, 30, idex(_(dummy)));
fl_set_button_shortcut(obj, scex(_(dummy)), 1);
}
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormBaseInputCB, 0);
- fdui->button_ok = obj = fl_add_button(FL_RETURN_BUTTON, 20, 90, 90, 30, _("OK"));
+ fdui->button_ok = obj = fl_add_button(FL_RETURN_BUTTON, 250, 130, 90, 30, _("OK"));
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormBaseOKCB, 3);
{
char const * const dummy = N_("Cancel|^[");
- fdui->button_cancel = obj = fl_add_button(FL_NORMAL_BUTTON, 120, 90, 90, 30, idex(_(dummy)));
+ fdui->button_cancel = obj = fl_add_button(FL_NORMAL_BUTTON, 350, 130, 90, 30, idex(_(dummy)));
fl_set_button_shortcut(obj, scex(_(dummy)), 1);
}
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormBaseCancelCB, 2);
{
char const * const dummy = N_("Style:|#S");
- fdui->style = obj = fl_add_input(FL_NORMAL_INPUT, 80, 50, 130, 30, idex(_(dummy)));
+ fdui->style = obj = fl_add_input(FL_NORMAL_INPUT, 90, 50, 260, 30, idex(_(dummy)));
fl_set_button_shortcut(obj, scex(_(dummy)), 1);
}
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormBaseInputCB, 0);
+ fdui->database_browse = obj = fl_add_button(FL_PUSH_BUTTON, 360, 10, 80, 30, _("Browse"));
+ fl_set_button_shortcut(obj, _("B"), 1);
+ fdui->style_browse = obj = fl_add_button(FL_PUSH_BUTTON, 360, 50, 80, 30, _("Browse"));
+ fl_set_button_shortcut(obj, _("l"), 1);
+ fdui->radio_bibtotoc = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 90, 90, 30, 30, _("Add bibliography to TOC"));
+ fl_set_button_shortcut(obj, _("T"), 1);
fl_end_form();
fdui->form->fdui = fdui;
FL_OBJECT *button_ok;
FL_OBJECT *button_cancel;
FL_OBJECT *style;
+ FL_OBJECT *database_browse;
+ FL_OBJECT *style_browse;
+ FL_OBJECT *radio_bibtotoc;
};
#endif /* FD_form_bibtex_h_ */
=============== FORM ===============
Name: form_bibtex
-Width: 220
-Height: 130
-Number of Objects: 5
+Width: 450
+Height: 170
+Number of Objects: 8
--------------------
class: FL_BOX
type: UP_BOX
-box: 0 0 220 130
+box: 0 0 450 170
boxtype: FL_UP_BOX
colors: FL_COL1 FL_COL1
alignment: FL_ALIGN_CENTER
--------------------
class: FL_INPUT
type: NORMAL_INPUT
-box: 80 10 130 30
+box: 90 10 260 30
boxtype: FL_DOWN_BOX
colors: FL_COL1 FL_MCOL
alignment: FL_ALIGN_LEFT
--------------------
class: FL_BUTTON
type: RETURN_BUTTON
-box: 20 90 90 30
+box: 250 130 90 30
boxtype: FL_UP_BOX
colors: FL_COL1 FL_COL1
alignment: FL_ALIGN_CENTER
--------------------
class: FL_BUTTON
type: NORMAL_BUTTON
-box: 120 90 90 30
+box: 350 130 90 30
boxtype: FL_UP_BOX
colors: FL_COL1 FL_COL1
alignment: FL_ALIGN_CENTER
--------------------
class: FL_INPUT
type: NORMAL_INPUT
-box: 80 50 130 30
+box: 90 50 260 30
boxtype: FL_DOWN_BOX
colors: FL_COL1 FL_MCOL
alignment: FL_ALIGN_LEFT
callback: C_FormBaseInputCB
argument: 0
+--------------------
+class: FL_BUTTON
+type: PUSH_BUTTON
+box: 360 10 80 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Browse
+shortcut: B
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: database_browse
+callback:
+argument: database
+
+--------------------
+class: FL_BUTTON
+type: PUSH_BUTTON
+box: 360 50 80 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Browse
+shortcut: l
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: style_browse
+callback:
+argument:
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 90 90 30 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Add bibliography to TOC
+shortcut: T
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_bibtotoc
+callback:
+argument:
+
==============================
create_the_forms