From 9b5e14fb6687f280df3f31eee76fa8e8943a3cf4 Mon Sep 17 00:00:00 2001 From: Angus Leeming Date: Mon, 20 Aug 2001 13:41:06 +0000 Subject: [PATCH] Herbert's patch, part 2 git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@2557 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/frontends/xforms/ChangeLog | 6 ++ src/frontends/xforms/FormBibtex.C | 81 +++++++++++++++++++++-- src/frontends/xforms/form_bibtex.C | 18 +++-- src/frontends/xforms/form_bibtex.h | 3 + src/frontends/xforms/forms/form_bibtex.fd | 70 +++++++++++++++++--- 5 files changed, 158 insertions(+), 20 deletions(-) diff --git a/src/frontends/xforms/ChangeLog b/src/frontends/xforms/ChangeLog index 86d9de895e..7fee6fb4f3 100644 --- a/src/frontends/xforms/ChangeLog +++ b/src/frontends/xforms/ChangeLog @@ -1,3 +1,9 @@ +2001-08-20 Herbert Voss + + * 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 * FormMathsBitmap.h: use the lyx::shared_c_ptr that uses free() to diff --git a/src/frontends/xforms/FormBibtex.C b/src/frontends/xforms/FormBibtex.C index 266a5d9037..99b8640363 100644 --- a/src/frontends/xforms/FormBibtex.C +++ b/src/frontends/xforms/FormBibtex.C @@ -5,6 +5,7 @@ * * \author Angus Leeming * \author John Levon + * \author Herbert Voss */ #ifdef __GNUG__ @@ -19,6 +20,8 @@ #include "gettext.h" #include "debug.h" #include "support/lstrings.h" +#include "support/filetools.h" + typedef FormCB > base_class; @@ -38,16 +41,53 @@ void FormBibtex::build() 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; } @@ -57,13 +97,42 @@ void FormBibtex::update() { 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); + } + } } + diff --git a/src/frontends/xforms/form_bibtex.C b/src/frontends/xforms/form_bibtex.C index 68c1f44ba3..0406be916c 100644 --- a/src/frontends/xforms/form_bibtex.C +++ b/src/frontends/xforms/form_bibtex.C @@ -22,33 +22,39 @@ FD_form_bibtex * FormBibtex::build_bibtex() 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; diff --git a/src/frontends/xforms/form_bibtex.h b/src/frontends/xforms/form_bibtex.h index 8189af6e7a..4ec2b78783 100644 --- a/src/frontends/xforms/form_bibtex.h +++ b/src/frontends/xforms/form_bibtex.h @@ -19,6 +19,9 @@ struct FD_form_bibtex { 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_ */ diff --git a/src/frontends/xforms/forms/form_bibtex.fd b/src/frontends/xforms/forms/form_bibtex.fd index 65693be144..9ac6123248 100644 --- a/src/frontends/xforms/forms/form_bibtex.fd +++ b/src/frontends/xforms/forms/form_bibtex.fd @@ -8,14 +8,14 @@ Unit of measure: FL_COORD_PIXEL =============== 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 @@ -33,7 +33,7 @@ argument: -------------------- 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 @@ -51,7 +51,7 @@ argument: 0 -------------------- 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 @@ -69,7 +69,7 @@ argument: 3 -------------------- 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 @@ -87,7 +87,7 @@ argument: 2 -------------------- 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 @@ -102,5 +102,59 @@ name: style 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 -- 2.39.5