diff --git a/ChangeLog b/ChangeLog index 1722ae20a5..c3b2d5607c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,50 @@ +2000-08-01 Angus Leeming + + * src/insets/insetcommand.h (hide): new SigC::Signal0 + (d-tor) new virtual destructor emits hide signal + + * src/insets/insetcite.[Ch] (hide, d-tor, EditMessage): removed + * src/insets/inseturl.[Ch] (hide, d-tor): ditto + + * src/insets/insettoc.[Ch]: one inset now deals with TOC, LOA, + LOF and LOT. Inset is now GUI-independent + + * src/insets/insetloa.[Ch]: redundant + * src/insets/insetlof.[Ch]: ditto + * src/insets/insetlot.[Ch]: ditto + + * src/frontends/xforms/forms/form_url.fd: tweaked! + * src/frontends/xforms/forms/form_citation.fd: ditto + + * src/frontends/xforms/FormCommand.[Ch]: new base class to those + dialogs dealing with InsetCommand insets + + * src/frontends/xforms/FormCitation.[Ch]: now makes use of + FormCommand base class + * src/frontends/xforms/FormUrl.[Ch]: ditto + + * src/frontends/xforms/forms/form_toc.fd: Xforms implementation + of the TOC dialog + * src/frontends/xforms/FormToc.[Ch]: ditto + + * src/frontends/Dialogs.h (showCitation, showTOC, showUrl): all + passed a generic InsetCommand pointer + * src/frontends/xforms/Dialogs.C (c-tor): create instance of FormToc + + * src/lyxfunc.C (Dispatch) : modified to accomodate new FormToc class + and modified InsetTOC class + * src/buffer.C: ditto + + * forms/lyx.fd: strip out old FD_form_toc code + * src/lyx_gui_misc.C: ditto + * src/lyx_gui.C: ditto + * src/lyx_cb.C: ditto + * src/lyx.[Ch]: ditto + +2000-08-01 Lars Gullik Bjønnes + + * src/support/utility.hpp: tr -d '\r' + 2000-08-01 Juergen Vigna * src/insets/insettabular.h: removed initFeatures() as it's not needed. diff --git a/forms/lyx.fd b/forms/lyx.fd index 2227553947..8c4eb923c7 100644 --- a/forms/lyx.fd +++ b/forms/lyx.fd @@ -3,7 +3,7 @@ Magic: 13000 Internal Form Definition File (do not change) -Number of forms: 6 +Number of forms: 5 Unit of measure: FL_COORD_PIXEL =============== FORM =============== @@ -402,102 +402,6 @@ name: callback: ScreenCancelCB argument: 0 -=============== FORM =============== -Name: form_toc -Width: 420 -Height: 340 -Number of Objects: 5 - --------------------- -class: FL_BOX -type: UP_BOX -box: 0 0 420 340 -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: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: -callback: -argument: - --------------------- -class: FL_BROWSER -type: HOLD_BROWSER -box: 10 10 400 280 -boxtype: FL_DOWN_BOX -colors: FL_COL1 FL_YELLOW -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_DEFAULT_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NorthWest FL_SouthEast -name: browser_toc -callback: TocSelectCB -argument: 0 - --------------------- -class: FL_BUTTON -type: RETURN_BUTTON -box: 310 300 100 30 -boxtype: FL_UP_BOX -colors: FL_COL1 FL_COL1 -alignment: FL_ALIGN_CENTER -style: FL_NORMAL_STYLE -size: FL_NORMAL_SIZE -lcol: FL_BLACK -label: Close -shortcut: ^M -resize: FL_RESIZE_NONE -gravity: FL_SouthEast FL_SouthEast -name: -callback: TocCancelCB -argument: 0 - --------------------- -class: FL_BUTTON -type: NORMAL_BUTTON -box: 200 300 100 30 -boxtype: FL_UP_BOX -colors: FL_COL1 FL_COL1 -alignment: FL_ALIGN_CENTER -style: FL_NORMAL_STYLE -size: FL_NORMAL_SIZE -lcol: FL_BLACK -label: Update|Uu#u -shortcut: -resize: FL_RESIZE_NONE -gravity: FL_SouthEast FL_SouthEast -name: -callback: TocUpdateCB -argument: 0 - --------------------- -class: FL_CHOICE -type: NORMAL_CHOICE -box: 60 300 130 30 -boxtype: FL_FRAME_BOX -colors: FL_COL1 FL_BLACK -alignment: FL_ALIGN_LEFT -style: FL_NORMAL_STYLE -size: FL_DEFAULT_SIZE -lcol: FL_BLACK -label: Type|Tt#t -shortcut: -resize: FL_RESIZE_NONE -gravity: FL_SouthEast FL_SouthEast -name: toctype -callback: TocUpdateCB -argument: 0 - =============== FORM =============== Name: form_ref Width: 590 diff --git a/po/POTFILES.in b/po/POTFILES.in index 84a5cee92b..d3c7a625ef 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -38,6 +38,7 @@ src/frontends/xforms/FormPrint.C src/frontends/xforms/form_print.C src/frontends/xforms/FormTabular.C src/frontends/xforms/form_tabular.C +src/frontends/xforms/FormToc.C src/frontends/xforms/FormUrl.C src/frontends/xforms/form_url.C src/frontends/xforms/Menubar_pimpl.C @@ -57,9 +58,6 @@ src/insets/insetindex.C src/insets/insetinfo.C src/insets/insetlabel.C src/insets/insetlist.C -src/insets/insetloa.C -src/insets/insetlof.C -src/insets/insetlot.C src/insets/insetmarginal.C src/insets/insetminipage.C src/insets/insetparent.C diff --git a/src/BufferView.h b/src/BufferView.h index c29a3447e6..dd923183f0 100644 --- a/src/BufferView.h +++ b/src/BufferView.h @@ -18,6 +18,7 @@ #include FORMS_H_LOCATION #include "undo.h" +#include "support/utility.hpp" class LyXView; class LyXText; @@ -27,7 +28,7 @@ class LyXScreen; class WorkArea; /// -class BufferView { +class BufferView : public noncopyable { public: /// enum UpdateCodes { diff --git a/src/LyXView.h b/src/LyXView.h index f4f82c6907..cd5c48706e 100644 --- a/src/LyXView.h +++ b/src/LyXView.h @@ -19,6 +19,7 @@ #include FORMS_H_LOCATION #include "Timeout.h" +#include "support/utility.hpp" // uncomment this line to try out the new menus #define NEW_MENUBAR 1 @@ -47,7 +48,7 @@ using SigC::Object; view is supposed (at least IMHO) to be another class, that shows its output in one or more LyXView's. */ -class LyXView : public Object { +class LyXView : public Object, public noncopyable { public: /// constructor LyXView(int w, int h); diff --git a/src/buffer.C b/src/buffer.C index 5a67d1e9bb..51d923fc03 100644 --- a/src/buffer.C +++ b/src/buffer.C @@ -56,9 +56,6 @@ #include "insets/insetindex.h" #include "insets/insetinclude.h" #include "insets/insettoc.h" -#include "insets/insetlof.h" -#include "insets/insetlot.h" -#include "insets/insetloa.h" #include "insets/insetparent.h" #include "insets/insetspecialchar.h" #include "insets/figinset.h" @@ -981,14 +978,11 @@ Buffer::parseSingleLyXformat2Token(LyXLex & lex, LyXParagraph *& par, if (!inscmd.getOptions().empty() || !inscmd.getContents().empty()) { inset = new InsetRef(inscmd, this); } - } else if (inscmd.getCmdName() == "tableofcontents") { - inset = new InsetTOC(this); - } else if (inscmd.getCmdName() == "listoffigures") { - inset = new InsetLOF(this); - } else if (inscmd.getCmdName() == "listofalgorithms") { - inset = new InsetLOA(this); - } else if (inscmd.getCmdName() == "listoftables") { - inset = new InsetLOT(this); + } else if (inscmd.getCmdName() == "tableofcontents" + || inscmd.getCmdName() == "listofalgorithms" + || inscmd.getCmdName() == "listoffigures" + || inscmd.getCmdName() == "listoftables") { + inset = new InsetTOC(inscmd.params()); } else if (inscmd.getCmdName() == "printindex") { inset = new InsetPrintIndex(this); } else if (inscmd.getCmdName() == "lyxparent") { @@ -1216,14 +1210,11 @@ void Buffer::readInset(LyXLex & lex, LyXParagraph *& par, || !inscmd.getContents().empty()) { inset = new InsetRef(inscmd, this); } - } else if (inscmd.getCmdName() == "tableofcontents") { - inset = new InsetTOC(this); - } else if (inscmd.getCmdName() == "listoffigures") { - inset = new InsetLOF(this); - } else if (inscmd.getCmdName() == "listofalgorithms") { - inset = new InsetLOA(this); - } else if (inscmd.getCmdName() == "listoftables") { - inset = new InsetLOT(this); + } else if (inscmd.getCmdName() == "tableofcontents" + || inscmd.getCmdName() == "listofalgorithms" + || inscmd.getCmdName() == "listoffigures" + || inscmd.getCmdName() == "listoftables") { + inset = new InsetTOC(inscmd.params()); } else if (inscmd.getCmdName() == "printindex") { inset = new InsetPrintIndex(this); } else if (inscmd.getCmdName() == "lyxparent") { diff --git a/src/ext_l10n.h b/src/ext_l10n.h index 0307595dc0..b65be178fb 100644 --- a/src/ext_l10n.h +++ b/src/ext_l10n.h @@ -59,6 +59,21 @@ _("Table of Contents|b"); _("Version control"); _("View LaTeX log file|w"); _("Paste primary selection"); +_("Multicolumn|M"); +_("Line Top|T"); +_("Line Bottom|B"); +_("Line Left|L"); +_("Line Right|R"); +_("Align Left|e"); +_("Align Center|C"); +_("Align Right|i"); +_("V.Align Top|o"); +_("V.Align Center|n"); +_("V.Align Bottom|v"); +_("Append Row|A"); +_("Append Column|u"); +_("Delete Row|w"); +_("Delete Column|D"); _("as Lines|L"); _("as Paragraphs|g"); _("Register|R"); @@ -72,6 +87,7 @@ _("Paragraph...|P"); _("Paper...|a"); _("Document...|D"); _("Table...|T"); +_("Tabular...|a"); _("Quotes...|Q"); _("Emphasize Style|E"); _("Noun Style|N"); diff --git a/src/frontends/Dialogs.h b/src/frontends/Dialogs.h index 48e825da70..df2715107f 100644 --- a/src/frontends/Dialogs.h +++ b/src/frontends/Dialogs.h @@ -32,12 +32,11 @@ class LyXView; class InsetGraphics; class InsetBibKey; class InsetBibtex; -class InsetCitation; class InsetInclude; class InsetIndex; class InsetInfo; class InsetTabular; -class InsetUrl; +class InsetCommand; using std::vector; @@ -114,11 +113,15 @@ public: /// Signal1 showBibkey; /// - Signal1 showCitation; + Signal1 showCitation; /// Signal1 createCitation; /// - Signal1 showUrl; + Signal1 showTOC; + /// + Signal1 createTOC; + /// + Signal1 showUrl; /// Signal1 createUrl; /// diff --git a/src/frontends/xforms/Dialogs.C b/src/frontends/xforms/Dialogs.C index 8cb2fd407a..d58f906a00 100644 --- a/src/frontends/xforms/Dialogs.C +++ b/src/frontends/xforms/Dialogs.C @@ -8,6 +8,7 @@ #include "FormCitation.h" #include "FormPrint.h" #include "FormTabular.h" +#include "FormToc.h" #include "FormUrl.h" #ifdef __GNUG__ @@ -23,6 +24,7 @@ Dialogs::Dialogs(LyXView * lv) dialogs_.push_back(new FormCitation(lv, this)); dialogs_.push_back(new FormPrint(lv, this)); dialogs_.push_back(new FormTabular(lv, this)); + dialogs_.push_back(new FormToc(lv, this)); dialogs_.push_back(new FormUrl(lv, this)); // reduce the number of connections needed in diff --git a/src/frontends/xforms/FormCitation.C b/src/frontends/xforms/FormCitation.C index 0443068dc7..4762979cef 100644 --- a/src/frontends/xforms/FormCitation.C +++ b/src/frontends/xforms/FormCitation.C @@ -11,8 +11,6 @@ #include -#include - #include FORMS_H_LOCATION #ifdef __GNUG__ @@ -21,15 +19,12 @@ #include "gettext.h" -#include "BufferView.h" #include "Dialogs.h" #include "FormCitation.h" #include "LyXView.h" #include "buffer.h" #include "form_citation.h" #include "lyxfunc.h" -#include "xform_macros.h" -#include "insets/insetcite.h" #include "support/filetools.h" using std::vector; @@ -38,14 +33,12 @@ using std::max; using std::min; using std::find; -C_RETURNCB(FormCitation, WMHideCB) -C_GENERICCB(FormCitation, OKCB) -C_GENERICCB(FormCitation, CancelCB) -C_GENERICCB(FormCitation, InputCB) +static vector citekeys; +static vector bibkeys; +static vector bibkeysInfo; FormCitation::FormCitation(LyXView * lv, Dialogs * d) - : dialog_(0), lv_(lv), d_(d), u_(0), h_(0), ih_(0), - inset_(0), dialogIsOpen(false) + : FormCommand(lv, d, _("Citation")) { // let the dialog be shown // These are permanent connections so we won't bother @@ -58,6 +51,7 @@ FormCitation::FormCitation(LyXView * lv, Dialogs * d) FormCitation::~FormCitation() { free(); + delete dialog_; } @@ -67,60 +61,12 @@ void FormCitation::build() } -void FormCitation::showInset( InsetCitation * inset ) +FL_FORM * const FormCitation::form() const { - if( dialogIsOpen || inset == 0 ) return; - - inset_ = inset; - ih_ = inset_->hide.connect(slot(this, &FormCitation::hide)); - - textAfter = inset->getOptions(); - updateCitekeys(inset->getContents()); - show(); -} - - -void FormCitation::createInset( string const & arg ) -{ - if( dialogIsOpen ) return; - - string keys; - if (contains(arg, "|")) { - keys = token(arg, '|', 0); - textAfter = token(arg, '|', 1); - } else { - keys = arg; - textAfter.erase(); - } - - updateCitekeys(keys); - show(); -} - - -void FormCitation::show() -{ - if (!dialog_) { - build(); - fl_set_form_atclose(dialog_->form_citation, - C_FormCitationWMHideCB, 0); - } - - update(); // make sure its up-to-date - - dialogIsOpen = true; - if (dialog_->form_citation->visible) { - fl_raise_form(dialog_->form_citation); - } else { - fl_show_form(dialog_->form_citation, - FL_PLACE_MOUSE | FL_FREE_SIZE, - FL_TRANSIENT, - _("Citation")); - u_ = d_->updateBufferDependent. - connect(slot(this, &FormCitation::update)); - h_ = d_->hideBufferDependent. - connect(slot(this, &FormCitation::hide)); - } + if( dialog_ && dialog_->form_citation ) + return dialog_->form_citation; + else + return 0; } @@ -136,12 +82,19 @@ void FormCitation::update() bibkeys.push_back(blist[i].first); bibkeysInfo.push_back(blist[i].second); } - blist.clear(); + citekeys.clear(); + string tmp, keys( params.getContents() ); + keys = frontStrip( split(keys, tmp, ',') ); + while( !tmp.empty() ) { + citekeys.push_back( tmp ); + keys = frontStrip( split(keys, tmp, ',') ); + } + fl_freeze_form( dialog_->form_citation ); - updateBrowser( dialog_->bibBrsr, bibkeys ); + updateBrowser( dialog_->bibBrsr, bibkeys ); updateBrowser( dialog_->citeBrsr, citekeys ); fl_clear_browser( dialog_->infoBrsr ); @@ -159,26 +112,12 @@ void FormCitation::update() bool bibPresent = ( bibkeys.size() > 0 ); setSize( size, bibPresent ); - fl_set_input( dialog_->textAftr, textAfter.c_str() ); + fl_set_input( dialog_->textAftr, params.getOptions().c_str() ); fl_unfreeze_form( dialog_->form_citation ); } -void FormCitation::updateCitekeys( string const & keysIn ) -{ - citekeys.clear(); - - string tmp; - string keys = keysIn; - keys = frontStrip( split(keys, tmp, ',') ); - while( !tmp.empty() ) { - citekeys.push_back( tmp ); - keys = frontStrip( split(keys, tmp, ',') ); - } -} - - void FormCitation::updateBrowser( FL_OBJECT * browser, vector const & keys ) const { @@ -253,60 +192,63 @@ void FormCitation::setCiteButtons( State status ) const } -void FormCitation::setSize( int brsrHeight, bool bibPresent ) const +void FormCitation::setSize( int hbrsr, bool bibPresent ) const { - int const infoHeight = 110; - int const otherHeight = 140; - brsrHeight = max( brsrHeight, 175 ); - int formHeight = brsrHeight + otherHeight; + int const hinfo = dialog_->infoBrsr->h; + int const hother = 140; + hbrsr = max( hbrsr, 175 ); + int wform = dialog_->form_citation->w; + int hform = hbrsr + hother; - if( bibPresent ) formHeight += infoHeight + 30; - fl_set_form_size( dialog_->form_citation, 430, formHeight ); + if( bibPresent ) hform += hinfo + 30; + fl_set_form_size( dialog_->form_citation, wform, hform ); // No resizing is alowed in the y-direction - fl_set_form_minsize( dialog_->form_citation, 430, formHeight ); - fl_set_form_maxsize( dialog_->form_citation, 1000, formHeight ); + fl_set_form_minsize( dialog_->form_citation, wform, hform ); + fl_set_form_maxsize( dialog_->form_citation, 3*wform, hform ); - int ypos = 0; - fl_set_object_geometry( dialog_->box, 0, ypos, 430, formHeight ); - ypos += 30; - fl_set_object_geometry( dialog_->citeBrsr, 10, ypos, 180, brsrHeight ); - fl_set_object_geometry( dialog_->bibBrsr, 240, ypos, 180, brsrHeight ); + int y = 0; + fl_set_object_geometry( dialog_->box, 0, y, wform, hform ); + y += 30; + fl_set_object_geometry( dialog_->citeBrsr, 10, y, 180, hbrsr ); + fl_set_object_geometry( dialog_->bibBrsr, 240, y, 180, hbrsr ); - fl_set_object_position( dialog_->addBtn, 200, ypos ); - ypos += 35; - fl_set_object_position( dialog_->delBtn, 200, ypos ); - ypos += 35; - fl_set_object_position( dialog_->upBtn, 200, ypos ); - ypos += 35; - fl_set_object_position( dialog_->downBtn, 200, ypos ); + fl_set_object_position( dialog_->addBtn, 200, y ); + y += 5 + dialog_->addBtn->h; + fl_set_object_position( dialog_->delBtn, 200, y ); + y += 5 + dialog_->delBtn->h; + fl_set_object_position( dialog_->upBtn, 200, y ); + y += 5 + dialog_->upBtn->h; + fl_set_object_position( dialog_->downBtn, 200, y ); - ypos = brsrHeight+30; // base of Citation/Bibliography browsers + y = dialog_->bibBrsr->y + dialog_->bibBrsr->h; // awaiting natbib support fl_hide_object( dialog_->style ); if( bibPresent ) { - ypos += 30; - fl_set_object_position( dialog_->infoBrsr, 10, ypos ); + y += 30; + fl_set_object_position( dialog_->infoBrsr, 10, y ); fl_show_object( dialog_->infoBrsr ); - ypos += infoHeight; + y += hinfo; } else fl_hide_object( dialog_->infoBrsr ); - ypos += 20; + y += 20; // awaiting natbib support fl_hide_object( dialog_->textBefore ); - fl_set_object_position( dialog_->textAftr, 100, ypos ); - fl_set_object_position( dialog_->ok, 230, ypos+50 ); - fl_set_object_position( dialog_->cancel, 330, ypos+50 ); + fl_set_object_position( dialog_->textAftr, 100, y ); + fl_set_object_position( dialog_->ok, 230, y+50 ); + fl_set_object_position( dialog_->cancel, 330, y+50 ); } -void FormCitation::input( State cb ) +void FormCitation::input( long data ) { + State cb = static_cast( data ); + switch( cb ) { case BIBBRSR: { @@ -459,81 +401,20 @@ void FormCitation::apply() contents += citekeys[i]; } - textAfter = fl_get_input(dialog_->textAftr); + params.setContents( contents ); + params.setOptions( fl_get_input(dialog_->textAftr) ); if( inset_ != 0 ) { - inset_->setContents( contents ); - inset_->setOptions( textAfter ); - lv_->view()->updateInset( inset_, true ); - } else { - InsetCommandParams p( "cite", contents, textAfter ); - lv_->getLyXFunc()->Dispatch( LFUN_INSERT_CITATION, - p.getAsString().c_str() ); - } -} - - -void FormCitation::hide() -{ - if (dialog_ - && dialog_->form_citation - && dialog_->form_citation->visible) { - fl_hide_form(dialog_->form_citation); - u_.disconnect(); - h_.disconnect(); - } - - // free up the dialog for another inset - inset_ = 0; - ih_.disconnect(); - dialogIsOpen = false; -} - - -void FormCitation::free() -{ - // we don't need to delete u and h here because - // hide() does that after disconnecting. - if (dialog_) { - if (dialog_->form_citation - && dialog_->form_citation->visible) { - hide(); + // Only update if contents have changed + if( params.getCmdName() != inset_->getCmdName() || + params.getContents() != inset_->getContents() || + params.getOptions() != inset_->getOptions() ) { + inset_->setParams( params ); + lv_->view()->updateInset( inset_, true ); } - fl_free_form(dialog_->form_citation); - delete dialog_; - dialog_ = 0; + } else { + lv_->getLyXFunc()->Dispatch( LFUN_INSERT_CITATION, + params.getAsString().c_str() ); } } - - -int FormCitation::WMHideCB(FL_FORM * form, void *) -{ - // Ensure that the signals (u and h) are disconnected even if the - // window manager is used to close the dialog. - FormCitation * pre = static_cast(form->u_vdata); - pre->hide(); - return FL_CANCEL; -} - - -void FormCitation::OKCB(FL_OBJECT * ob, long) -{ - FormCitation * pre = static_cast(ob->form->u_vdata); - pre->apply(); - pre->hide(); -} - - -void FormCitation::CancelCB(FL_OBJECT * ob, long) -{ - FormCitation * pre = static_cast(ob->form->u_vdata); - pre->hide(); -} - - -void FormCitation::InputCB(FL_OBJECT * ob, long data) -{ - FormCitation * pre = static_cast(ob->form->u_vdata); - pre->input( static_cast(data) ); -} diff --git a/src/frontends/xforms/FormCitation.h b/src/frontends/xforms/FormCitation.h index e68ee68b5a..aa8a9cbdf5 100644 --- a/src/frontends/xforms/FormCitation.h +++ b/src/frontends/xforms/FormCitation.h @@ -12,25 +12,16 @@ #ifndef FORMCITATION_H #define FORMCITATION_H -#include - -#include "DialogBase.h" -#include "LString.h" -#include "support/utility.hpp" - #ifdef __GNUG__ #pragma interface #endif -class Dialogs; -// same arguement as in Dialogs.h s/LyX/UI/ -class LyXView; -class InsetCitation; +#include "FormCommand.h" struct FD_form_citation; /** This class provides an XForms implementation of the FormCitation Dialog. */ -class FormCitation : public DialogBase, public noncopyable { +class FormCitation : public FormCommand, public noncopyable { public: /// enum State { @@ -51,39 +42,18 @@ public: ~FormCitation(); //@} - /**@name Real per-instance Callback Methods */ - //@{ - static int WMHideCB(FL_FORM *, void *); - static void OKCB(FL_OBJECT *, long); - static void CancelCB(FL_OBJECT *, long); - static void InputCB(FL_OBJECT *, long); - //@} - private: /**@name Slot Methods */ //@{ - /// Create the dialog if necessary, update it and display it. - void createInset( string const & ); - /// - void showInset( InsetCitation * ); - /// - void show(); - /// Hide the dialog. - void hide(); - /// - void update(); - //@} - - /**@name Dialog internal methods */ - //@{ + virtual void update(); /// Apply from dialog - void apply(); + virtual void apply(); /// Filter the inputs - void input( State ); + virtual void input( long ); /// Build the dialog - void build(); + virtual void build(); /// - void updateCitekeys( string const & ); + virtual FL_FORM * const form() const; /// void updateBrowser( FL_OBJECT *, std::vector const & ) const; /// @@ -94,42 +64,10 @@ private: void setSize( int, bool ) const; /// FD_form_citation * build_citation(); - /// Explicitly free the dialog. - void free(); //@} - /**@name Private Data */ - //@{ /// Real GUI implementation. FD_form_citation * dialog_; - /** Which LyXFunc do we use? - We could modify Dialogs to have a visible LyXFunc* instead and - save a couple of bytes per dialog. - */ - LyXView * lv_; - /** Which Dialogs do we belong to? - Used so we can get at the signals we have to connect to. - */ - Dialogs * d_; - /// Update connection. - Connection u_; - /// Hide connection. - Connection h_; - /// inset::hide connection. - Connection ih_; - /// - InsetCitation * inset_; - /// - bool dialogIsOpen; - /// - string textAfter; - /// - std::vector citekeys; - /// - std::vector bibkeys; - /// - std::vector bibkeysInfo; - //@} }; #endif diff --git a/src/frontends/xforms/FormCommand.C b/src/frontends/xforms/FormCommand.C new file mode 100644 index 0000000000..e873f66d43 --- /dev/null +++ b/src/frontends/xforms/FormCommand.C @@ -0,0 +1,151 @@ +// -*- C++ -*- +/* This file is part of + * ====================================================== + * + * LyX, The Document Processor + * + * Copyright 2000 The LyX Team. + * + * ====================================================== + */ + +#include + +#include FORMS_H_LOCATION + +#ifdef __GNUG__ +#pragma implementation +#endif + + +#include "Dialogs.h" +#include "FormCommand.h" +#include "xform_macros.h" + +C_RETURNCB(FormCommand, WMHideCB) +C_GENERICCB(FormCommand, ApplyCB) +C_GENERICCB(FormCommand, CancelCB) +C_GENERICCB(FormCommand, InputCB) +C_GENERICCB(FormCommand, OKCB) + +FormCommand::FormCommand(LyXView * lv, Dialogs * d, string const & t) + : lv_(lv), d_(d), u_(0), h_(0), ih_(0), + inset_(0), dialogIsOpen(false), title(t) +{} + + +void FormCommand::showInset( InsetCommand * const inset ) +{ + if( dialogIsOpen || inset == 0 ) return; + + inset_ = inset; + ih_ = inset_->hide.connect(slot(this, &FormCommand::hide)); + + params = inset->params(); + show(); +} + + +void FormCommand::createInset( string const & arg ) +{ + if( dialogIsOpen ) return; + + params.setFromString( arg ); + show(); +} + + +void FormCommand::show() +{ + if (!form()) { + build(); + fl_set_form_atclose(form(), + C_FormCommandWMHideCB, 0); + } + + fl_freeze_form( form() ); + update(); // make sure its up-to-date + fl_unfreeze_form( form() ); + + dialogIsOpen = true; + if (form()->visible) { + fl_raise_form(form()); + } else { + fl_show_form(form(), + FL_PLACE_MOUSE | FL_FREE_SIZE, + FL_TRANSIENT, + title.c_str()); + u_ = d_->updateBufferDependent. + connect(slot(this, &FormCommand::update)); + h_ = d_->hideBufferDependent. + connect(slot(this, &FormCommand::hide)); + } +} + + +void FormCommand::free() +{ + // we don't need to delete u and h here because + // hide() does that after disconnecting. + if( form() ) { + if( form()->visible) + hide(); + fl_free_form(form()); + } +} + + +void FormCommand::hide() +{ + if (form() && form()->visible) { + fl_hide_form(form()); + u_.disconnect(); + h_.disconnect(); + } + + // free up the dialog for another inset + inset_ = 0; + ih_.disconnect(); + dialogIsOpen = false; +} + + +int FormCommand::WMHideCB(FL_FORM * form, void *) +{ + // Ensure that the signals (u and h) are disconnected even if the + // window manager is used to close the dialog. + FormCommand * pre = static_cast(form->u_vdata); + pre->hide(); + return FL_CANCEL; +} + + +void FormCommand::ApplyCB(FL_OBJECT * ob, long) +{ + FormCommand * pre = static_cast(ob->form->u_vdata); + pre->apply(); +} + + +void FormCommand::CancelCB(FL_OBJECT * ob, long) +{ + FormCommand * pre = static_cast(ob->form->u_vdata); + pre->hide(); +} + + +void FormCommand::InputCB(FL_OBJECT * ob, long data ) +{ + FormCommand * pre = static_cast(ob->form->u_vdata); + pre->input( data ); +} + + +void FormCommand::OKCB(FL_OBJECT * ob, long) +{ + FormCommand * pre = static_cast(ob->form->u_vdata); + pre->apply(); + pre->hide(); +} + + diff --git a/src/frontends/xforms/FormCommand.h b/src/frontends/xforms/FormCommand.h new file mode 100644 index 0000000000..34da044836 --- /dev/null +++ b/src/frontends/xforms/FormCommand.h @@ -0,0 +1,97 @@ +// -*- C++ -*- +/* This file is part of + * ====================================================== + * + * LyX, The Document Processor + * + * Copyright 2000 The LyX Team. + * + * ====================================================== + */ + +#ifndef FORMCOMMAND_H +#define FORMCOMMAND_H + +#include "DialogBase.h" +#include "LString.h" +#include "support/utility.hpp" +#include "insets/insetcommand.h" + +class Dialogs; +class LyXView; + +#ifdef __GNUG__ +#pragma interface +#endif + +/** This class is an XForms GUI base class to insets derived from + InsetCommand + */ +class FormCommand : public DialogBase, public noncopyable { +public: + /// Constructor + FormCommand(LyXView *, Dialogs *, string const & ); + + /**@name Real per-instance Callback Methods */ + //@{ + static int WMHideCB(FL_FORM *, void *); + static void OKCB(FL_OBJECT *, long); + static void ApplyCB(FL_OBJECT *, long); + static void CancelCB(FL_OBJECT *, long); + static void InputCB(FL_OBJECT *, long); + //@} + +protected: + /**@name Slot Methods */ + //@{ + /// Create the dialog if necessary, update it and display it. + void createInset( string const & ); + /// + void showInset( InsetCommand * const ); + /// + void show(); + /// Hide the dialog. + void hide(); + /// Explicitly free the dialog. + void free(); + /// + virtual void input( long ) = 0; + /// + virtual void update() = 0; + /// Apply from dialog + virtual void apply() = 0; + /// Build the dialog + virtual void build() = 0; + /// + virtual FL_FORM * const form() const = 0; + //@} + + /**@name Private Data */ + //@{ + /** Which LyXFunc do we use? + We could modify Dialogs to have a visible LyXFunc* instead and + save a couple of bytes per dialog. + */ + LyXView * lv_; + /** Which Dialogs do we belong to? + Used so we can get at the signals we have to connect to. + */ + Dialogs * d_; + /// Update connection. + Connection u_; + /// Hide connection. + Connection h_; + /// inset::hide connection. + Connection ih_; + /// + InsetCommand * inset_; + /// + bool dialogIsOpen; + /// + InsetCommandParams params; + /// + string title; + //@} +}; + +#endif diff --git a/src/frontends/xforms/FormToc.C b/src/frontends/xforms/FormToc.C new file mode 100644 index 0000000000..1f48863a35 --- /dev/null +++ b/src/frontends/xforms/FormToc.C @@ -0,0 +1,161 @@ +// -*- C++ -*- +/* This file is part of + * ====================================================== + * + * LyX, The Document Processor + * + * Copyright 2000 The LyX Team. + * + * ====================================================== + */ + +#include +#include + +#include FORMS_H_LOCATION + +#ifdef __GNUG__ +#pragma implementation +#endif + + +#include "gettext.h" +#include "Dialogs.h" +#include "FormToc.h" +#include "LyXView.h" +#include "buffer.h" +#include "form_toc.h" +#include "lyxtext.h" + +static vector toclist; + +FormToc::FormToc(LyXView * lv, Dialogs * d) + : FormCommand(lv, d, _("Table of Contents")) +{ + // let the dialog be shown + // These are permanent connections so we won't bother + // storing a copy because we won't be disconnecting. + d->showTOC.connect(slot(this, &FormToc::showInset)); + d->createTOC.connect(slot(this, &FormToc::createInset)); +} + + +FormToc::~FormToc() +{ + free(); + delete dialog_; +} + + +void FormToc::build() +{ + dialog_ = build_toc(); + fl_addto_choice(dialog_->type, + _(" TOC | LOF | LOT | LOA ")); +} + + +FL_FORM * const FormToc::form() const +{ + if( dialog_ && dialog_->form_toc ) + return dialog_->form_toc; + else + return 0; +} + + +void FormToc::update() +{ + static int ow = -1, oh; + + if (ow < 0) { + ow = form()->w; + oh = form()->h; + + fl_set_form_minsize(form(), ow, oh); + fl_set_form_maxsize(form(), 2*ow, oh); + } + + Buffer::TocType type; + + if( params.getCmdName() == "tableofcontents" ) + type = Buffer::TOC_TOC; + + else if( params.getCmdName() == "listofalgorithms" ) + type = Buffer::TOC_LOA; + + else if( params.getCmdName() == "listoffigures" ) + type = Buffer::TOC_LOF; + + else + type = Buffer::TOC_LOT; + + fl_set_choice( dialog_->type, type+1 ); + + updateToc(); +} + + +void FormToc::updateToc() +{ + if (!lv_->view()->available()) { + toclist.clear(); + fl_clear_browser( dialog_->browser ); + fl_add_browser_line( dialog_->browser, _("*** No Document ***")); + return; + } + + vector > tmp = + lv_->view()->buffer()->getTocList(); + int type = fl_get_choice( dialog_->type ) - 1; + + // Check if all elements are the same. + if (toclist.size() == tmp[type].size()) { + unsigned int i = 0; + for (; i < toclist.size(); ++i) { + if (toclist[i] != tmp[type][i]) + break; + } + if (i >= toclist.size()) return; + } + + // List has changed. Update browser + toclist = tmp[type]; + + static Buffer * buffer = 0; + int topline = 0; + int line = 0; + if (buffer == lv_->view()->buffer()) { + topline = fl_get_browser_topline( dialog_->browser ); + line = fl_get_browser( dialog_->browser ); + } else + buffer = lv_->view()->buffer(); + + fl_clear_browser( dialog_->browser ); + + for (vector::const_iterator it = toclist.begin(); + it != toclist.end(); ++it) + fl_add_browser_line( dialog_->browser, + (string(4*(*it).depth,' ')+(*it).str).c_str()); + + fl_set_browser_topline( dialog_->browser, topline ); + fl_select_browser_line( dialog_->browser, line ); +} + + +void FormToc::apply() +{ + if (!lv_->view()->available()) + return; + + updateToc(); + + unsigned int choice = fl_get_browser( dialog_->browser ); + if (0 < choice && choice - 1 < toclist.size()) { + lv_->view()->beforeChange(); + lv_->view()->text->SetCursor( lv_->view(), toclist[choice-1].par, 0 ); + lv_->view()->text->sel_cursor = + lv_->view()->text->cursor; + lv_->view()->update(BufferView::SELECT|BufferView::FITCUR); + } +} diff --git a/src/frontends/xforms/FormToc.h b/src/frontends/xforms/FormToc.h new file mode 100644 index 0000000000..f30861f908 --- /dev/null +++ b/src/frontends/xforms/FormToc.h @@ -0,0 +1,56 @@ +// -*- C++ -*- +/* This file is part of + * ====================================================== + * + * LyX, The Document Processor + * + * Copyright 2000 The LyX Team. + * + * ====================================================== + */ + +#ifndef FORMTOC_H +#define FORMTOC_H + +#ifdef __GNUG__ +#pragma interface +#endif + +#include "FormCommand.h" +struct FD_form_toc; + +/** This class provides an XForms implementation of the FormToc Dialog. + */ +class FormToc : public FormCommand, public noncopyable { +public: + /**@name Constructors and Destructors */ + //@{ + /// + FormToc(LyXView *, Dialogs *); + /// + ~FormToc(); + +private: + /**@name Slot Methods */ + //@{ + /// + virtual void update(); + /// Apply from dialog + virtual void apply(); + /// + virtual void input( long ) {}; + /// Build the dialog + virtual void build(); + /// + virtual FL_FORM * const form() const; + /// + void updateToc(); + /// + FD_form_toc * build_toc(); + //@} + + /// Real GUI implementation. + FD_form_toc * dialog_; +}; + +#endif diff --git a/src/frontends/xforms/FormUrl.C b/src/frontends/xforms/FormUrl.C index 5085e68cef..9b4c966b82 100644 --- a/src/frontends/xforms/FormUrl.C +++ b/src/frontends/xforms/FormUrl.C @@ -31,27 +31,21 @@ #include "insets/inseturl.h" #include "support/filetools.h" -C_RETURNCB(FormUrl, WMHideCB) -C_GENERICCB(FormUrl, OKCB) -C_GENERICCB(FormUrl, CancelCB) - FormUrl::FormUrl(LyXView * lv, Dialogs * d) - : dialog_(0), lv_(lv), d_(d), u_(0), h_(0), ih_(0), - inset_(0), dialogIsOpen(false) + : FormCommand(lv, d, _("Url")) { // let the dialog be shown // These are permanent connections so we won't bother // storing a copy because we won't be disconnecting. d->showUrl.connect(slot(this, &FormUrl::showInset)); d->createUrl.connect(slot(this, &FormUrl::createInset)); - params = new InsetCommandParams(); } FormUrl::~FormUrl() { free(); - delete params; + delete dialog_; } @@ -61,72 +55,52 @@ void FormUrl::build() } -void FormUrl::showInset( InsetUrl * inset ) +FL_FORM * const FormUrl::form() const { - if( dialogIsOpen || inset == 0 ) return; - - inset_ = inset; - ih_ = inset_->hide.connect(slot(this, &FormUrl::hide)); - - (*params) = inset->params(); - show(); -} - - -void FormUrl::createInset( string const & arg ) -{ - if( dialogIsOpen ) return; - - params->setFromString( arg ); - show(); -} - - -void FormUrl::show() -{ - if (!dialog_) { - build(); - fl_set_form_atclose(dialog_->form_url, - C_FormUrlWMHideCB, 0); - } - - update(); // make sure its up-to-date - - dialogIsOpen = true; - if (dialog_->form_url->visible) { - fl_raise_form(dialog_->form_url); - } else { - fl_show_form(dialog_->form_url, - FL_PLACE_MOUSE | FL_FREE_SIZE, - FL_TRANSIENT, - _("Url")); - u_ = d_->updateBufferDependent. - connect(slot(this, &FormUrl::update)); - h_ = d_->hideBufferDependent. - connect(slot(this, &FormUrl::hide)); - } + if( dialog_ && dialog_->form_url ) + return dialog_->form_url; + else + return 0; } void FormUrl::update() { - fl_set_input(dialog_->url, params->getContents().c_str()); - fl_set_input(dialog_->name, params->getOptions().c_str()); - - if ( params->getCmdName() == "url" ) - fl_set_button(dialog_->radio_html, 0); - else - fl_set_button(dialog_->radio_html, 1); - static int ow = -1, oh; if (ow < 0) { ow = dialog_->form_url->w; oh = dialog_->form_url->h; + + fl_set_form_minsize(dialog_->form_url, ow, oh); + fl_set_form_maxsize(dialog_->form_url, 2*ow, oh); } - fl_set_form_minsize(dialog_->form_url, ow, oh); - fl_set_form_maxsize(dialog_->form_url, 2*ow, oh); + fl_freeze_form( dialog_->form_url ); + + fl_set_input(dialog_->url, params.getContents().c_str()); + fl_set_input(dialog_->name, params.getOptions().c_str()); + + if ( params.getCmdName() == "url" ) + fl_set_button(dialog_->radio_html, 0); + else + fl_set_button(dialog_->radio_html, 1); + + if( lv_->buffer()->isReadonly() ) { + fl_deactivate_object( dialog_->url ); + fl_deactivate_object( dialog_->name ); + fl_deactivate_object( dialog_->radio_html ); + fl_deactivate_object( dialog_->ok ); + fl_set_object_lcol( dialog_->ok, FL_INACTIVE ); + } else { + fl_activate_object( dialog_->url ); + fl_activate_object( dialog_->name ); + fl_activate_object( dialog_->radio_html ); + fl_activate_object( dialog_->ok ); + fl_set_object_lcol( dialog_->ok, FL_BLACK ); + } + + fl_unfreeze_form( dialog_->form_url ); } @@ -134,78 +108,25 @@ void FormUrl::apply() { if( lv_->buffer()->isReadonly() ) return; - params->setContents( fl_get_input(dialog_->url) ); - params->setOptions( fl_get_input(dialog_->name) ); + params.setContents( fl_get_input(dialog_->url) ); + params.setOptions( fl_get_input(dialog_->name) ); if (fl_get_button(dialog_->radio_html)) - params->setCmdName("htmlurl"); + params.setCmdName("htmlurl"); else - params->setCmdName("url"); + params.setCmdName("url"); if( inset_ != 0 ) { - inset_->setParams( *params ); - lv_->view()->updateInset( inset_, true ); + // Only update if contents have changed + if( params.getCmdName() != inset_->getCmdName() || + params.getContents() != inset_->getContents() || + params.getOptions() != inset_->getOptions() ) { + inset_->setParams( params ); + lv_->view()->updateInset( inset_, true ); + } } else { lv_->getLyXFunc()->Dispatch( LFUN_INSERT_URL, - params->getAsString().c_str() ); + params.getAsString().c_str() ); } } - - -void FormUrl::hide() -{ - if (dialog_ - && dialog_->form_url - && dialog_->form_url->visible) { - fl_hide_form(dialog_->form_url); - u_.disconnect(); - h_.disconnect(); - } - - // free up the dialog for another inset - inset_ = 0; - ih_.disconnect(); - dialogIsOpen = false; -} - - -void FormUrl::free() -{ - // we don't need to delete u and h here because - // hide() does that after disconnecting. - if (dialog_) { - if (dialog_->form_url - && dialog_->form_url->visible) { - hide(); - } - fl_free_form(dialog_->form_url); - delete dialog_; - dialog_ = 0; - } -} - - -int FormUrl::WMHideCB(FL_FORM * form, void *) -{ - // Ensure that the signals (u and h) are disconnected even if the - // window manager is used to close the dialog. - FormUrl * pre = static_cast(form->u_vdata); - pre->hide(); - return FL_CANCEL; -} - - -void FormUrl::OKCB(FL_OBJECT * ob, long) -{ - FormUrl * pre = static_cast(ob->form->u_vdata); - pre->apply(); - pre->hide(); -} - - -void FormUrl::CancelCB(FL_OBJECT * ob, long) -{ - FormUrl * pre = static_cast(ob->form->u_vdata); - pre->hide(); -} diff --git a/src/frontends/xforms/FormUrl.h b/src/frontends/xforms/FormUrl.h index c82f4f9025..02b8a1e372 100644 --- a/src/frontends/xforms/FormUrl.h +++ b/src/frontends/xforms/FormUrl.h @@ -12,24 +12,16 @@ #ifndef FORMURL_H #define FORMURL_H -#include "DialogBase.h" -#include "LString.h" - -#include "support/utility.hpp" - -class Dialogs; -class LyXView; -class InsetCommandParams; -class InsetUrl; -struct FD_form_url; - #ifdef __GNUG__ #pragma interface #endif +#include "FormCommand.h" +struct FD_form_url; + /** This class provides an XForms implementation of the FormUrl Dialog. */ -class FormUrl : public DialogBase, public noncopyable { +class FormUrl : public FormCommand, public noncopyable { public: /**@name Constructors and Destructors */ //@{ @@ -39,66 +31,25 @@ public: ~FormUrl(); //@} - /**@name Real per-instance Callback Methods */ - //@{ - static int WMHideCB(FL_FORM *, void *); - static void OKCB(FL_OBJECT *, long); - static void CancelCB(FL_OBJECT *, long); - //@} - private: /**@name Slot Methods */ //@{ - /// Create the dialog if necessary, update it and display it. - void createInset( string const & ); - /// - void showInset( InsetUrl * ); - /// - void show(); - /// Hide the dialog. - void hide(); /// - void update(); - //@} - - /**@name Dialog internal methods */ - //@{ + virtual void update(); /// Apply from dialog void apply(); + /// + virtual void input( long ) {}; /// Build the dialog void build(); /// + virtual FL_FORM * const form() const; + /// FD_form_url * build_url(); - /// Explicitly free the dialog. - void free(); //@} - /**@name Private Data */ - //@{ /// Real GUI implementation. FD_form_url * dialog_; - /** Which LyXFunc do we use? - We could modify Dialogs to have a visible LyXFunc* instead and - save a couple of bytes per dialog. - */ - LyXView * lv_; - /** Which Dialogs do we belong to? - Used so we can get at the signals we have to connect to. - */ - Dialogs * d_; - /// Update connection. - Connection u_; - /// Hide connection. - Connection h_; - /// inset::hide connection. - Connection ih_; - /// - InsetUrl * inset_; - /// - bool dialogIsOpen; - /// - InsetCommandParams * params; - //@} }; #endif diff --git a/src/frontends/xforms/forms/form_citation.fd b/src/frontends/xforms/forms/form_citation.fd index 04abb62c32..84a1e8d954 100644 --- a/src/frontends/xforms/forms/form_citation.fd +++ b/src/frontends/xforms/forms/form_citation.fd @@ -8,14 +8,14 @@ Unit of measure: FL_COORD_PIXEL =============== FORM =============== Name: form_citation -Width: 450 -Height: 780 +Width: 430 +Height: 770 Number of Objects: 13 -------------------- class: FL_BOX type: UP_BOX -box: 0 0 430 780 +box: 0 0 430 770 boxtype: FL_UP_BOX colors: FL_COL1 FL_COL1 alignment: FL_ALIGN_CENTER @@ -45,7 +45,7 @@ shortcut: resize: FL_RESIZE_X gravity: FL_NoGravity FL_NoGravity name: citeBrsr -callback: C_FormCitationInputCB +callback: C_FormCommandInputCB argument: CITEBRSR -------------------- @@ -63,7 +63,7 @@ shortcut: resize: FL_RESIZE_X gravity: FL_NoGravity FL_NoGravity name: bibBrsr -callback: C_FormCitationInputCB +callback: C_FormCommandInputCB argument: BIBBRSR -------------------- @@ -81,7 +81,7 @@ shortcut: resize: FL_RESIZE_NONE gravity: FL_NoGravity FL_NoGravity name: addBtn -callback: C_FormCitationInputCB +callback: C_FormCommandInputCB argument: ADD -------------------- @@ -99,7 +99,7 @@ shortcut: resize: FL_RESIZE_NONE gravity: FL_NoGravity FL_NoGravity name: delBtn -callback: C_FormCitationInputCB +callback: C_FormCommandInputCB argument: DELETE -------------------- @@ -117,7 +117,7 @@ shortcut: resize: FL_RESIZE_NONE gravity: FL_NoGravity FL_NoGravity name: upBtn -callback: C_FormCitationInputCB +callback: C_FormCommandInputCB argument: UP -------------------- @@ -135,13 +135,13 @@ shortcut: resize: FL_RESIZE_NONE gravity: FL_NoGravity FL_NoGravity name: downBtn -callback: C_FormCitationInputCB +callback: C_FormCommandInputCB argument: DOWN -------------------- class: FL_BROWSER type: NORMAL_BROWSER -box: 10 440 430 110 +box: 10 440 410 110 boxtype: FL_DOWN_BOX colors: FL_COL1 FL_YELLOW alignment: FL_ALIGN_TOP_LEFT @@ -225,7 +225,7 @@ shortcut: ^M resize: FL_RESIZE_ALL gravity: FL_SouthEast FL_SouthEast name: ok -callback: C_FormCitationOKCB +callback: C_FormCommandOKCB argument: 0 -------------------- @@ -243,7 +243,7 @@ shortcut: ^[ resize: FL_RESIZE_ALL gravity: FL_SouthEast FL_SouthEast name: cancel -callback: C_FormCitationCancelCB +callback: C_FormCommandCancelCB argument: 0 ============================== diff --git a/src/frontends/xforms/forms/form_toc.fd b/src/frontends/xforms/forms/form_toc.fd new file mode 100644 index 0000000000..50f1343f94 --- /dev/null +++ b/src/frontends/xforms/forms/form_toc.fd @@ -0,0 +1,106 @@ +Magic: 13000 + +Internal Form Definition File + (do not change) + +Number of forms: 1 +Unit of measure: FL_COORD_PIXEL + +=============== FORM =============== +Name: form_toc +Width: 420 +Height: 340 +Number of Objects: 5 + +-------------------- +class: FL_BOX +type: UP_BOX +box: 0 0 420 340 +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: +shortcut: +resize: FL_RESIZE_ALL +gravity: FL_NoGravity FL_NoGravity +name: +callback: +argument: + +-------------------- +class: FL_BROWSER +type: HOLD_BROWSER +box: 10 10 400 280 +boxtype: FL_DOWN_BOX +colors: FL_COL1 FL_YELLOW +alignment: FL_ALIGN_BOTTOM +style: FL_NORMAL_STYLE +size: FL_DEFAULT_SIZE +lcol: FL_BLACK +label: +shortcut: +resize: FL_RESIZE_ALL +gravity: FL_NorthWest FL_SouthEast +name: browser +callback: C_FormCommandApplyCB +argument: 0 + +-------------------- +class: FL_BUTTON +type: RETURN_BUTTON +box: 310 300 100 30 +boxtype: FL_UP_BOX +colors: FL_COL1 FL_COL1 +alignment: FL_ALIGN_CENTER +style: FL_NORMAL_STYLE +size: FL_NORMAL_SIZE +lcol: FL_BLACK +label: Close +shortcut: ^M +resize: FL_RESIZE_NONE +gravity: FL_SouthEast FL_SouthEast +name: +callback: C_FormCommandCancelCB +argument: 0 + +-------------------- +class: FL_BUTTON +type: NORMAL_BUTTON +box: 200 300 100 30 +boxtype: FL_UP_BOX +colors: FL_COL1 FL_COL1 +alignment: FL_ALIGN_CENTER +style: FL_NORMAL_STYLE +size: FL_NORMAL_SIZE +lcol: FL_BLACK +label: Update +shortcut: Update|#U#u +resize: FL_RESIZE_NONE +gravity: FL_SouthEast FL_SouthEast +name: +callback: C_FormCommandApplyCB +argument: 0 + +-------------------- +class: FL_CHOICE +type: NORMAL_CHOICE +box: 60 300 130 30 +boxtype: FL_FRAME_BOX +colors: FL_COL1 FL_BLACK +alignment: FL_ALIGN_LEFT +style: FL_NORMAL_STYLE +size: FL_DEFAULT_SIZE +lcol: FL_BLACK +label: Type +shortcut: Type|#T#t +resize: FL_RESIZE_NONE +gravity: FL_SouthEast FL_SouthEast +name: type +callback: C_FormCommandApplyCB +argument: 0 + +============================== +create_the_forms diff --git a/src/frontends/xforms/forms/form_url.fd b/src/frontends/xforms/forms/form_url.fd index bf8384b52a..c16c5b83a9 100644 --- a/src/frontends/xforms/forms/form_url.fd +++ b/src/frontends/xforms/forms/form_url.fd @@ -99,7 +99,7 @@ shortcut: ^[ resize: FL_RESIZE_NONE gravity: FL_SouthEast FL_SouthEast name: cancel -callback: C_FormUrlCancelCB +callback: C_FormCommandCancelCB argument: 0 -------------------- @@ -117,7 +117,7 @@ shortcut: ^M resize: FL_RESIZE_ALL gravity: FL_SouthEast FL_SouthEast name: ok -callback: C_FormUrlOKCB +callback: C_FormCommandOKCB argument: 0 ============================== diff --git a/src/frontends/xforms/forms/makefile b/src/frontends/xforms/forms/makefile index 018b71d97d..50b20c6a3e 100644 --- a/src/frontends/xforms/forms/makefile +++ b/src/frontends/xforms/forms/makefile @@ -25,6 +25,7 @@ SRCS := form_citation.fd \ form_print.fd \ form_graphics.fd \ form_tabular.fd \ + form_toc.fd \ form_url.fd diff --git a/src/insets/Makefile.am b/src/insets/Makefile.am index c870e42882..9574baa198 100644 --- a/src/insets/Makefile.am +++ b/src/insets/Makefile.am @@ -55,12 +55,6 @@ libinsets_la_SOURCES = \ insetlatexaccent.h \ insetlist.C \ insetlist.h \ - insetloa.C \ - insetloa.h \ - insetlof.C \ - insetlof.h \ - insetlot.C \ - insetlot.h \ insetmarginal.h \ insetmarginal.C \ insetminipage.C \ diff --git a/src/insets/insetcite.C b/src/insets/insetcite.C index 3b6304e41f..51d9658f4b 100644 --- a/src/insets/insetcite.C +++ b/src/insets/insetcite.C @@ -15,8 +15,8 @@ #endif #include "insetcite.h" -#include "LyXView.h" #include "BufferView.h" +#include "LyXView.h" #include "frontends/Dialogs.h" #include "support/lstrings.h" @@ -24,11 +24,6 @@ InsetCitation::InsetCitation(InsetCommandParams const & p) : InsetCommand(p) {} -InsetCitation::~InsetCitation() -{ - hide(); -} - string InsetCitation::getScreenLabel() const { string keys(getContents()); diff --git a/src/insets/insetcite.h b/src/insets/insetcite.h index 63789cf51e..7e7676400b 100644 --- a/src/insets/insetcite.h +++ b/src/insets/insetcite.h @@ -16,11 +16,6 @@ #endif #include "insetcommand.h" -#include - -#ifdef SIGC_CXX_NAMESPACES -using SigC::Signal0; -#endif /** Used to insert citations */ @@ -30,8 +25,6 @@ public: explicit InsetCitation(InsetCommandParams const &); /// - ~InsetCitation(); - /// Inset * Clone() const { return new InsetCitation(params()); } /// string getScreenLabel() const; @@ -39,8 +32,6 @@ public: EDITABLE Editable() const { return IS_EDITABLE; } /// void Edit(BufferView *, int, int, unsigned int); - /// - Signal0 hide; }; #endif // INSET_CITE_H diff --git a/src/insets/insetcommand.h b/src/insets/insetcommand.h index e287d7929f..81f58781c5 100644 --- a/src/insets/insetcommand.h +++ b/src/insets/insetcommand.h @@ -17,6 +17,11 @@ #endif #include "insetbutton.h" +#include + +#ifdef SIGC_CXX_NAMESPACES +using SigC::Signal0; +#endif // Created by Alejandro 970222 /** Used to insert a LaTeX command automatically @@ -73,6 +78,8 @@ public: explicit InsetCommand(InsetCommandParams const &); /// + virtual ~InsetCommand() { hide(); }; + /// void Write(Buffer const *, std::ostream &) const; /// Parse the command. @@ -121,6 +128,8 @@ public: InsetCommandParams const & params() const { return p_; } /// void setParams(InsetCommandParams const &); + /// + Signal0 hide; private: /// InsetCommandParams p_; diff --git a/src/insets/insetloa.C b/src/insets/insetloa.C deleted file mode 100644 index 65215ad2ab..0000000000 --- a/src/insets/insetloa.C +++ /dev/null @@ -1,42 +0,0 @@ -// -*- C++ -*- -/* This file is part of* - * ====================================================== - * - * LyX, The Document Processor - * - * Copyright 1995 Matthias Ettrich - * Copyright 1996-2000 The LyX Team. - * - * ====================================================== */ - -// Created by Bernhard 970908 - -#include - -#ifdef __GNUG__ -#pragma implementation -#endif - -#include "gettext.h" -#include "insetloa.h" -#include "LaTeXFeatures.h" -#include "BufferView.h" -#include "LyXView.h" -#include "lyxfunc.h" -#include "commandtags.h" - -void InsetLOA::Validate(LaTeXFeatures & features) const -{ - features.algorithm = true; -} - - -string InsetLOA::getScreenLabel() const -{ - return _("List of Algorithms"); -} - -void InsetLOA::Edit(BufferView * bv, int, int, unsigned int) -{ - bv->owner()->getLyXFunc()->Dispatch(LFUN_LOAVIEW); -} diff --git a/src/insets/insetloa.h b/src/insets/insetloa.h deleted file mode 100644 index f16bbfcc48..0000000000 --- a/src/insets/insetloa.h +++ /dev/null @@ -1,53 +0,0 @@ -// -*- C++ -*- -/* This file is part of* - * ====================================================== - * - * LyX, The Document Processor - * - * Copyright 1995 Matthias Ettrich - * Copyright 1996-2000 the LyX Team. - * - * ====================================================== */ - -#ifndef INSET_LOA_H -#define INSET_LOA_H - -#ifdef __GNUG__ -#pragma interface -#endif - -#include "insetcommand.h" - -class Buffer; - -/** Used to insert table of algorithms - */ -class InsetLOA : public InsetCommand { -public: - /// - InsetLOA() : InsetCommand("listofalgorithms") {} - /// - explicit - InsetLOA(Buffer * b) : InsetCommand("listofalgorithms"), owner(b) {} - /// - void Validate(LaTeXFeatures & features) const; - /// - Inset * Clone() const { return new InsetLOA(owner); } - /// - string getScreenLabel() const; - /// - void Edit(BufferView * bv, int, int, unsigned int); - /// - EDITABLE Editable() const { - return IS_EDITABLE; // not yet - } - /// - bool display() const { return true; } - /// - Inset::Code LyxCode() const { return Inset::LOA_CODE; } -private: - /// - Buffer * owner; -}; - -#endif diff --git a/src/insets/insetlof.C b/src/insets/insetlof.C deleted file mode 100644 index 12705e0f85..0000000000 --- a/src/insets/insetlof.C +++ /dev/null @@ -1,22 +0,0 @@ -#include - -#ifdef __GNUG__ -#pragma implementation -#endif - -#include "gettext.h" -#include "insetlof.h" -#include "BufferView.h" -#include "LyXView.h" -#include "lyxfunc.h" -#include "commandtags.h" - -string InsetLOF::getScreenLabel() const -{ - return _("List of Figures"); -} - -void InsetLOF::Edit(BufferView * bv, int, int, unsigned int) -{ - bv->owner()->getLyXFunc()->Dispatch(LFUN_LOFVIEW); -} diff --git a/src/insets/insetlof.h b/src/insets/insetlof.h deleted file mode 100644 index 10836c8bc1..0000000000 --- a/src/insets/insetlof.h +++ /dev/null @@ -1,52 +0,0 @@ -// -*- C++ -*- -/* This file is part of* - * ====================================================== - * - * LyX, The Document Processor - * - * Copyright 1995 Matthias Ettrich - * Copyright 1996-2000 the LyX Team. - * - * ====================================================== */ - -#ifndef INSET_LOF_H -#define INSET_LOF_H - -#include "insetcommand.h" - -// Created by Lgb 970527 - -#ifdef __GNUG__ -#pragma interface -#endif - -class Buffer; - -/** Used to insert table of contents - */ -class InsetLOF : public InsetCommand { -public: - /// - InsetLOF() : InsetCommand("listoffigures") {} - /// - explicit - InsetLOF(Buffer * b) : InsetCommand("listoffigures"), owner(b) {} - /// - Inset * Clone() const { return new InsetLOF(owner); } - /// - string getScreenLabel() const; - /// - void Edit(BufferView * bv, int, int, unsigned int); - /// - EDITABLE Editable() const { - return IS_EDITABLE; // Finally! - } - /// - bool display() const { return true; } - /// - Inset::Code LyxCode() const { return Inset::LOF_CODE; } -private: - /// - Buffer * owner; -}; -#endif diff --git a/src/insets/insetlot.C b/src/insets/insetlot.C deleted file mode 100644 index f4a1e3b045..0000000000 --- a/src/insets/insetlot.C +++ /dev/null @@ -1,23 +0,0 @@ -#include - -#ifdef __GNUG__ -#pragma implementation -#endif - -#include "gettext.h" -#include "insetlot.h" -#include "BufferView.h" -#include "LyXView.h" -#include "lyxfunc.h" -#include "commandtags.h" - - -string InsetLOT::getScreenLabel() const -{ - return _("List of Tables"); -} - -void InsetLOT::Edit(BufferView * bv, int, int, unsigned int) -{ - bv->owner()->getLyXFunc()->Dispatch(LFUN_LOTVIEW); -} diff --git a/src/insets/insetlot.h b/src/insets/insetlot.h deleted file mode 100644 index 6ef73b4a94..0000000000 --- a/src/insets/insetlot.h +++ /dev/null @@ -1,53 +0,0 @@ -// -*- C++ -*- -/* This file is part of* - * ====================================================== - * - * LyX, The Document Processor - * - * Copyright 1995 Matthias Ettrich - * Copyright 1996-2000 LyX Team - * - * ====================================================== */ - -#ifndef INSET_LOT_H -#define INSET_LOT_H - -#ifdef __GNUG__ -#pragma interface -#endif - -#include "insetcommand.h" - -// Created by Lgb 970527 - -class Buffer; - -/** Used to insert table of contents - */ -class InsetLOT : public InsetCommand { -public: - /// - InsetLOT() : InsetCommand("listoftables") {} - /// - explicit - InsetLOT(Buffer * b) : InsetCommand("listoftables"), owner(b) {} - /// - Inset * Clone() const { return new InsetLOT(owner); } - /// - string getScreenLabel() const; - /// - void Edit(BufferView * bv, int, int, unsigned int); - /// - EDITABLE Editable() const { - return IS_EDITABLE; // not yet - } - /// - bool display() const { return true; } - /// - Inset::Code LyxCode() const { return Inset::LOT_CODE; } -private: - /// - Buffer * owner; -}; - -#endif diff --git a/src/insets/insettoc.C b/src/insets/insettoc.C index 1c633ff0a7..f74b85ff8e 100644 --- a/src/insets/insettoc.C +++ b/src/insets/insettoc.C @@ -6,35 +6,59 @@ #include "gettext.h" #include "insettoc.h" -#include "commandtags.h" -#include "debug.h" -#include "lyxfunc.h" -#include "LyXView.h" #include "BufferView.h" +#include "LyXView.h" +#include "frontends/Dialogs.h" +#include "debug.h" using std::ostream; string InsetTOC::getScreenLabel() const { - return _("Table of Contents"); + string cmdname( getCmdName() ); + if( cmdname == "tableofcontents" ) + return _("Table of Contents"); + else if( cmdname == "listofalgorithms" ) + return _("List of Algorithms"); + else if( cmdname == "listoffigures" ) + return _("List of Figures"); + else + return _("List of Tables"); +} + + +Inset::Code InsetTOC::LyxCode() const +{ + string cmdname( getCmdName() ); + if( cmdname == "tableofcontents" ) + return Inset::TOC_CODE; + else if( cmdname == "listofalgorithms" ) + return Inset::LOA_CODE; + else if( cmdname == "listoffigures" ) + return Inset::LOF_CODE; + else + return Inset::LOT_CODE; } void InsetTOC::Edit(BufferView * bv, int, int, unsigned int) { - bv->owner()->getLyXFunc()->Dispatch(LFUN_TOCVIEW); + bv->owner()->getDialogs()->showTOC( this ); } + int InsetTOC::Linuxdoc(Buffer const *, ostream & os) const { - os << ""; + if( getCmdName() == "tableofcontents" ) + os << ""; return 0; } int InsetTOC::DocBook(Buffer const *, ostream & os) const { - os << ""; + if( getCmdName() == "tableofcontents" ) + os << ""; return 0; } diff --git a/src/insets/insettoc.h b/src/insets/insettoc.h index c96c6266a1..cf0de54519 100644 --- a/src/insets/insettoc.h +++ b/src/insets/insettoc.h @@ -18,38 +18,28 @@ #include "insetcommand.h" -class Buffer; - /** Used to insert table of contents */ class InsetTOC : public InsetCommand { public: /// - InsetTOC() : InsetCommand("tableofcontents") {} + InsetTOC(InsetCommandParams const & p) : InsetCommand(p) {} /// - explicit - InsetTOC(Buffer * b) : InsetCommand("tableofcontents"), owner(b) {} - /// - Inset * Clone() const { return new InsetTOC(owner); } + Inset * Clone() const { return new InsetTOC(params()); } /// string getScreenLabel() const; - /// On edit, we open the TOC pop-up + /// void Edit(BufferView * bv, int, int, unsigned int); /// - EDITABLE Editable() const { - return IS_EDITABLE; - } + EDITABLE Editable() const { return IS_EDITABLE; } /// bool display() const { return true; } /// - Inset::Code LyxCode() const { return Inset::TOC_CODE; } + Inset::Code LyxCode() const; /// int Linuxdoc(Buffer const *, std::ostream &) const; /// int DocBook(Buffer const *, std::ostream &) const; -private: - /// - Buffer * owner; }; #endif diff --git a/src/insets/inseturl.C b/src/insets/inseturl.C index eb4b4cf250..a63a7ef412 100644 --- a/src/insets/inseturl.C +++ b/src/insets/inseturl.C @@ -19,18 +19,6 @@ InsetUrl::InsetUrl(InsetCommandParams const & p) {} -InsetUrl::~InsetUrl() -{ - hide(); -} - - -char const * InsetUrl::EditMessage() const -{ - return _("Opened Url"); -} - - void InsetUrl::Edit(BufferView * bv, int, int, unsigned int) { bv->owner()->getDialogs()->showUrl( this ); diff --git a/src/insets/inseturl.h b/src/insets/inseturl.h index e76161e780..30a7b2c49b 100644 --- a/src/insets/inseturl.h +++ b/src/insets/inseturl.h @@ -16,14 +16,9 @@ #endif #include "insetcommand.h" -#include struct LaTeXFeatures; -#ifdef SIGC_CXX_NAMESPACES -using SigC::Signal0; -#endif - /** The url inset */ class InsetUrl : public InsetCommand { @@ -31,8 +26,6 @@ public: /// explicit InsetUrl(InsetCommandParams const &); - /// - ~InsetUrl(); /// Inset * Clone() const { return new InsetUrl(params()); } /// @@ -44,8 +37,6 @@ public: /// EDITABLE Editable() const { return IS_EDITABLE; } /// - char const * EditMessage() const; - /// void Edit(BufferView *, int, int, unsigned int); /// bool display() const { return false; } @@ -58,8 +49,6 @@ public: int Linuxdoc(Buffer const *, std::ostream &) const; /// int DocBook(Buffer const *, std::ostream &) const; - /// - Signal0 hide; }; #endif diff --git a/src/lyx.C b/src/lyx.C index 4e1bacb461..acad35fe10 100644 --- a/src/lyx.C +++ b/src/lyx.C @@ -112,36 +112,6 @@ FD_form_screen *create_form_form_screen(void) } /*---------------------------------------*/ -FD_form_toc *create_form_form_toc(void) -{ - FL_OBJECT *obj; - FD_form_toc *fdui = (FD_form_toc *) fl_calloc(1, sizeof(FD_form_toc)); - - fdui->form_toc = fl_bgn_form(FL_NO_BOX, 420, 340); - obj = fl_add_box(FL_UP_BOX, 0, 0, 420, 340, ""); - fdui->browser_toc = obj = fl_add_browser(FL_HOLD_BROWSER, 10, 10, 400, 280, ""); - fl_set_object_gravity(obj, FL_NorthWest, FL_SouthEast); - fl_set_object_callback(obj, TocSelectCB, 0); - obj = fl_add_button(FL_RETURN_BUTTON, 310, 300, 100, 30, _("Close")); - fl_set_object_lsize(obj, FL_NORMAL_SIZE); - fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast); - fl_set_object_callback(obj, TocCancelCB, 0); - obj = fl_add_button(FL_NORMAL_BUTTON, 200, 300, 100, 30, idex(_("Update|Uu#u")));fl_set_button_shortcut(obj, scex(_("Update|Uu#u")), 1); - fl_set_object_lsize(obj, FL_NORMAL_SIZE); - fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast); - fl_set_object_callback(obj, TocUpdateCB, 0); - fdui->toctype = obj = fl_add_choice(FL_NORMAL_CHOICE, 60, 300, 130, 30, idex(_("Type|Tt#t")));fl_set_button_shortcut(obj, scex(_("Type|Tt#t")), 1); - fl_set_object_boxtype(obj, FL_FRAME_BOX); - fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast); - fl_set_object_callback(obj, TocUpdateCB, 0); - fl_end_form(); - - //fdui->form_toc->fdui = fdui; - - return fdui; -} -/*---------------------------------------*/ - FD_form_ref *create_form_form_ref(void) { FL_OBJECT *obj; diff --git a/src/lyx.h b/src/lyx.h index 3d3f2aae8d..2d0f56c86d 100644 --- a/src/lyx.h +++ b/src/lyx.h @@ -1,4 +1,4 @@ -/** Header file generated with fdesign on Mon Jun 19 12:55:08 2000.**/ +/** Header file generated with fdesign on Mon Jul 31 11:17:12 2000.**/ #ifndef FD_form_title_h_ #define FD_form_title_h_ @@ -14,10 +14,6 @@ extern "C" void ScreenOKCB(FL_OBJECT *, long); extern "C" void ScreenApplyCB(FL_OBJECT *, long); extern "C" void ScreenCancelCB(FL_OBJECT *, long); -extern "C" void TocSelectCB(FL_OBJECT *, long); -extern "C" void TocCancelCB(FL_OBJECT *, long); -extern "C" void TocUpdateCB(FL_OBJECT *, long); - extern "C" void RefUpdateCB(FL_OBJECT *, long); extern "C" void RefHideCB(FL_OBJECT *, long); extern "C" void RefSelectCB(FL_OBJECT *, long); @@ -65,16 +61,6 @@ typedef struct { } FD_form_screen; extern FD_form_screen * create_form_form_screen(void); -typedef struct { - FL_FORM *form_toc; - void *vdata; - char *cdata; - long ldata; - FL_OBJECT *browser_toc; - FL_OBJECT *toctype; -} FD_form_toc; - -extern FD_form_toc * create_form_form_toc(void); typedef struct { FL_FORM *form_ref; void *vdata; diff --git a/src/lyx_cb.C b/src/lyx_cb.C index 4f47c56621..ed3430bea4 100644 --- a/src/lyx_cb.C +++ b/src/lyx_cb.C @@ -71,7 +71,6 @@ extern FD_form_preamble * fd_form_preamble; extern FD_form_table * fd_form_table; extern FD_form_figure * fd_form_figure; extern FD_form_screen * fd_form_screen; -extern FD_form_toc * fd_form_toc; extern FD_form_ref * fd_form_ref; extern FD_form_bullet * fd_form_bullet; @@ -1134,26 +1133,6 @@ void InsertAsciiFile(BufferView * bv, string const & f, bool asParagraph) } -void MenuShowTableOfContents() -{ - static int ow = -1, oh; - - TocUpdateCB(0, 0); - if (fd_form_toc->form_toc->visible) { - fl_raise_form(fd_form_toc->form_toc); - } else { - fl_show_form(fd_form_toc->form_toc, - FL_PLACE_MOUSE | FL_FREE_SIZE, FL_FULLBORDER, - _("Table Of Contents")); - if (ow < 0) { - ow = fd_form_toc->form_toc->w; - oh = fd_form_toc->form_toc->h; - } - fl_set_form_minsize(fd_form_toc->form_toc, ow, oh); - } -} - - void MenuInsertLabel(char const * arg) { string label = arg; @@ -2919,92 +2898,6 @@ void Reconfigure(BufferView * bv) } -// -// Table of Contents -// - -static vector toclist; - - -extern "C" void TocSelectCB(FL_OBJECT * ob, long) -{ - if (!current_view->available()) - return; - - TocUpdateCB(0, 0); - unsigned int choice = fl_get_browser(ob); - if (0 < choice && choice - 1 < toclist.size()) { - current_view->beforeChange(); - current_view->text->SetCursor(current_view, toclist[choice-1].par, 0); - current_view->text->sel_cursor = - current_view->text->cursor; - current_view->update(BufferView::SELECT|BufferView::FITCUR); - } else { - WriteAlert(_("Error"), - _("Couldn't find this label"), - _("in current document.")); - } -} - - -extern "C" void TocCancelCB(FL_OBJECT *, long) -{ - fl_hide_form(fd_form_toc->form_toc); -} - - -extern "C" -void TocUpdateCB(FL_OBJECT *, long) -{ - if (!current_view->available()) { - toclist.clear(); - fl_clear_browser(fd_form_toc->browser_toc); - fl_add_browser_line(fd_form_toc->browser_toc, - _("*** No Document ***")); - return; - } - - vector > tmp = - current_view->buffer()->getTocList(); - int type = fl_get_choice(fd_form_toc->toctype)-1; - //if (toclist == tmp[type]) - // return; - if (toclist.size() == tmp[type].size()) { - // Check if all elements are the same. - unsigned int i = 0; - for (; i < toclist.size(); ++i) { - if (toclist[i] != tmp[type][i]) - break; - } - if (i >= toclist.size()) return; - } - - toclist = tmp[type]; - - static Buffer * buffer = 0; - int topline = 0; - int line = 0; - if (buffer == current_view->buffer()) { - topline = fl_get_browser_topline(fd_form_toc->browser_toc); - line = fl_get_browser(fd_form_toc->browser_toc); - } else - buffer = current_view->buffer(); - - fl_clear_browser(fd_form_toc->browser_toc); - fl_hide_object(fd_form_toc->browser_toc); - - for (vector::const_iterator it = toclist.begin(); - it != toclist.end(); ++it) - fl_add_browser_line(fd_form_toc->browser_toc, - (string(4*(*it).depth,' ')+ - (*it).str).c_str()); - - fl_set_browser_topline(fd_form_toc->browser_toc, topline); - fl_select_browser_line(fd_form_toc->browser_toc, line); - fl_show_object(fd_form_toc->browser_toc); -} - - /* callbacks for form form_ref */ extern "C" void RefSelectCB(FL_OBJECT *, long data) { diff --git a/src/lyx_gui.C b/src/lyx_gui.C index e33d6a5f37..da1dbdd3b5 100644 --- a/src/lyx_gui.C +++ b/src/lyx_gui.C @@ -64,7 +64,6 @@ FD_form_table * fd_form_table; FD_form_sendto * fd_form_sendto; FD_form_figure * fd_form_figure; FD_form_screen * fd_form_screen; -FD_form_toc * fd_form_toc; FD_form_ref * fd_form_ref; FD_LaTeXLog * fd_latex_log; // from log_form.h Combox * combo_language; @@ -532,12 +531,6 @@ void LyXGUI::create_forms() fl_set_form_atclose(fd_form_screen->form_screen, CancelCloseBoxCB, 0); - // the toc form - fd_form_toc = create_form_form_toc(); - fl_addto_choice(fd_form_toc->toctype, - _(" TOC | LOF | LOT | LOA ")); - fl_set_form_atclose(fd_form_toc->form_toc, CancelCloseBoxCB, 0); - // the ref form fd_form_ref = create_form_form_ref(); fl_set_form_atclose(fd_form_ref->form_ref, CancelCloseBoxCB, 0); diff --git a/src/lyx_gui_misc.C b/src/lyx_gui_misc.C index 9b849b6c5e..fd6cfd2119 100644 --- a/src/lyx_gui_misc.C +++ b/src/lyx_gui_misc.C @@ -54,7 +54,6 @@ extern FD_form_preamble * fd_form_preamble; extern FD_form_table * fd_form_table; extern FD_form_sendto * fd_form_sendto; extern FD_form_figure * fd_form_figure; -extern FD_form_toc * fd_form_toc; extern FD_form_ref * fd_form_ref; extern FD_form_paragraph_extra * fd_form_paragraph_extra; extern FD_LaTeXLog * fd_latex_log; @@ -69,7 +68,6 @@ extern FD_bibitem_form * bibitem_form; extern FD_include * form; extern FD_index_form * index_form; -extern void TocUpdateCB(); extern void HideFiguresPopups(); // Prevents LyX from being killed when the close box is pressed in a popup. @@ -120,9 +118,6 @@ void CloseAllBufferRelatedDialogs() if (fd_form_figure->form_figure->visible) { fl_hide_form(fd_form_figure->form_figure); } - if (fd_form_toc->form_toc->visible) { - fl_hide_form(fd_form_toc->form_toc); - } if (fd_form_ref->form_ref->visible) { fl_hide_form(fd_form_ref->form_ref); } @@ -221,9 +216,6 @@ void updateAllVisibleBufferRelatedDialogs() updateBulletForm(); } } - if (fd_form_toc->browser_toc->visible) { - TocUpdateCB(0, 0); - } if (fd_latex_log->LaTeXLog->visible) { LatexLogUpdate(0,0); } diff --git a/src/lyx_main.h b/src/lyx_main.h index ef58c2bcf1..c68c87185d 100644 --- a/src/lyx_main.h +++ b/src/lyx_main.h @@ -22,6 +22,7 @@ #include #include "LString.h" +#include "support/utility.hpp" class LyXGUI; class LyXRC; @@ -40,7 +41,7 @@ extern LastFiles * lastfiles; /* we should hopefully be able to move this /** This is the main LyX object it encapsulates most of the other objects. */ -class LyX { +class LyX : public noncopyable { public: /**@name Constructors and Deconstructors */ //@{ @@ -56,22 +57,12 @@ public: LyXGUI * lyxGUI; // should be only one of this //@} private: - /**@name Constructors and Deconstructors */ - //@{ - /// not allowed - LyX(const LyX &) {} // not allowed - /// not allowed - LyX() {} // not allowed - //@} - /**@name Private variables */ //@{ /// does this user start lyx for the first time? bool first_start; /// string batch_command; - /// - // struct sigaction act_; // seems to be unused //@} /**@name Private Members */ //@{ diff --git a/src/lyxfunc.C b/src/lyxfunc.C index a35294065b..34112ce3b5 100644 --- a/src/lyxfunc.C +++ b/src/lyxfunc.C @@ -43,9 +43,6 @@ using std::istringstream; #include "insets/inseturl.h" #include "insets/insetlatexaccent.h" #include "insets/insettoc.h" -#include "insets/insetlof.h" -#include "insets/insetloa.h" -#include "insets/insetlot.h" #include "insets/insetref.h" #include "insets/insetparent.h" #include "insets/insetindex.h" @@ -107,7 +104,6 @@ extern bool math_insert_greek(char); extern BufferList bufferlist; extern LyXServer * lyxserver; extern int greek_kb_flag; -extern FD_form_toc * fd_form_toc; extern bool selection_possible; extern kb_keymap * toplevel_keymap; @@ -888,60 +884,40 @@ string LyXFunc::Dispatch(int ac, case LFUN_LOTVIEW: case LFUN_LOAVIEW: { - Buffer::TocType type = Buffer::TOC_TOC; - if (action == LFUN_LOFVIEW) - type = Buffer::TOC_LOF; - else if (action == LFUN_LOTVIEW) - type = Buffer::TOC_LOT; - else if (action == LFUN_LOAVIEW) - type = Buffer::TOC_LOA; - fl_set_choice(fd_form_toc->toctype,type + 1); - TocUpdateCB(0, 0); - if (fd_form_toc->form_toc->visible) { - fl_raise_form(fd_form_toc->form_toc); - } else { - static int ow = -1, oh; - fl_show_form(fd_form_toc->form_toc, - FL_PLACE_MOUSE | - FL_FREE_SIZE, FL_FULLBORDER, - _("Table of Contents")); - if (ow < 0) { - ow = fd_form_toc->form_toc->w; - oh = fd_form_toc->form_toc->h; - } - fl_set_form_minsize(fd_form_toc->form_toc, ow, oh); - } + InsetCommandParams p; + + if( action == LFUN_TOCVIEW ) + p.setCmdName( "tableofcontents" ); + else if( action == LFUN_LOAVIEW ) + p.setCmdName( "listofalgorithms" ); + else if( action == LFUN_LOFVIEW ) + p.setCmdName( "listoffigures" ); + else + p.setCmdName( "listoftables" ); + + owner->getDialogs()->createTOC( p.getAsString() ); break; } - case LFUN_TOC_INSERT: - { - Inset * new_inset = new InsetTOC(owner->buffer()); - if (!owner->view()->insertInset(new_inset, "Standard", true)) - delete new_inset; - break; - } - - case LFUN_LOF_INSERT: - { - Inset * new_inset = new InsetLOF(owner->buffer()); - if (!owner->view()->insertInset(new_inset, "Standard", true)) - delete new_inset; - break; - } - - case LFUN_LOA_INSERT: - { - Inset * new_inset = new InsetLOA(owner->buffer()); - if (!owner->view()->insertInset(new_inset, "Standard", true)) - delete new_inset; - break; - } + case LFUN_TOC_INSERT: + case LFUN_LOA_INSERT: + case LFUN_LOF_INSERT: case LFUN_LOT_INSERT: { - Inset * new_inset = new InsetLOT(owner->buffer()); - if (!owner->view()->insertInset(new_inset, "Standard", true)) - delete new_inset; + InsetCommandParams p; + + if( action == LFUN_TOC_INSERT ) + p.setCmdName( "tableofcontents" ); + else if( action == LFUN_LOA_INSERT ) + p.setCmdName( "listofalgorithms" ); + else if( action == LFUN_LOF_INSERT ) + p.setCmdName( "listoffigures" ); + else + p.setCmdName( "listoftables" ); + + Inset * inset = new InsetTOC( p ); + if( !owner->view()->insertInset( inset, "Standard", true ) ) + delete inset; break; } @@ -2564,7 +2540,18 @@ string LyXFunc::Dispatch(int ac, case LFUN_CREATE_CITATION: { - owner->getDialogs()->createCitation( argument ); + // Should do this "at source" + InsetCommandParams p; + p.setCmdName( "cite" ); + + if (contains(argument, "|")) { + p.setContents( token(argument, '|', 0) ); + p.setOptions( token(argument, '|', 1) ); + } else { + p.setContents( argument ); + } + + owner->getDialogs()->createCitation( p.getAsString() ); } break; diff --git a/src/support/LRegex.C b/src/support/LRegex.C index 1babf22127..aaec005645 100644 --- a/src/support/LRegex.C +++ b/src/support/LRegex.C @@ -1,7 +1,3 @@ -#ifdef __GNUG__ -#pragma implementation -#endif - #include #include @@ -12,6 +8,10 @@ #include "lyxregex.h" #endif +#ifdef __GNUG__ +#pragma implementation +#endif + #include "LRegex.h" using std::make_pair; @@ -55,7 +55,7 @@ struct LRegex::Impl { } /// - LRegex::MatchPair first_match(string const & str) const + LRegex::MatchPair const first_match(string const & str) const { regmatch_t tmp; regexec(preg, str.c_str(), 1, &tmp, 0); @@ -67,7 +67,7 @@ struct LRegex::Impl { } /// - string getError() const + string const getError() const { size_t nr = regerror(error_code, preg, 0, 0); char * tmp = new char[nr]; @@ -134,13 +134,13 @@ bool LRegex::exact_match(string const & str) const } -LRegex::MatchPair LRegex::first_match(string const & str) const +LRegex::MatchPair const LRegex::first_match(string const & str) const { return impl->first_match(str); } -string LRegex::getError() const +string const LRegex::getError() const { return impl->getError(); } diff --git a/src/support/LRegex.h b/src/support/LRegex.h index 3ca19d409a..ae1d41b448 100644 --- a/src/support/LRegex.h +++ b/src/support/LRegex.h @@ -38,10 +38,10 @@ public: bool exact_match(string const & str) const; /// - MatchPair first_match(string const & str) const; + MatchPair const first_match(string const & str) const; /// - string getError() const; + string const getError() const; /// int getErrorCode() const;