]> git.lyx.org Git - features.git/commitdiff
patch from Angus
authorLars Gullik Bjønnes <larsbj@gullik.org>
Tue, 1 Aug 2000 17:33:32 +0000 (17:33 +0000)
committerLars Gullik Bjønnes <larsbj@gullik.org>
Tue, 1 Aug 2000 17:33:32 +0000 (17:33 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@944 a592a061-630c-0410-9148-cb99ea01b6c8

44 files changed:
ChangeLog
forms/lyx.fd
po/POTFILES.in
src/BufferView.h
src/LyXView.h
src/buffer.C
src/ext_l10n.h
src/frontends/Dialogs.h
src/frontends/xforms/Dialogs.C
src/frontends/xforms/FormCitation.C
src/frontends/xforms/FormCitation.h
src/frontends/xforms/FormCommand.C [new file with mode: 0644]
src/frontends/xforms/FormCommand.h [new file with mode: 0644]
src/frontends/xforms/FormToc.C [new file with mode: 0644]
src/frontends/xforms/FormToc.h [new file with mode: 0644]
src/frontends/xforms/FormUrl.C
src/frontends/xforms/FormUrl.h
src/frontends/xforms/forms/form_citation.fd
src/frontends/xforms/forms/form_toc.fd [new file with mode: 0644]
src/frontends/xforms/forms/form_url.fd
src/frontends/xforms/forms/makefile
src/insets/Makefile.am
src/insets/insetcite.C
src/insets/insetcite.h
src/insets/insetcommand.h
src/insets/insetloa.C [deleted file]
src/insets/insetloa.h [deleted file]
src/insets/insetlof.C [deleted file]
src/insets/insetlof.h [deleted file]
src/insets/insetlot.C [deleted file]
src/insets/insetlot.h [deleted file]
src/insets/insettoc.C
src/insets/insettoc.h
src/insets/inseturl.C
src/insets/inseturl.h
src/lyx.C
src/lyx.h
src/lyx_cb.C
src/lyx_gui.C
src/lyx_gui_misc.C
src/lyx_main.h
src/lyxfunc.C
src/support/LRegex.C
src/support/LRegex.h

index 1722ae20a5a85cccd98b6806c6ed38db80f58955..c3b2d5607cb3c3b31aab9426cdb592330a1a0e9a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,50 @@
+2000-08-01  Angus Leeming  <a.leeming@ic.ac.uk>
+
+       * 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  <larsbj@lyx.org>
+
+       * src/support/utility.hpp: tr -d '\r'
+
 2000-08-01  Juergen Vigna  <jug@sad.it>
 
        * src/insets/insettabular.h: removed initFeatures() as it's not needed.
index 22275539478ba29b57012cb7e0bb309db11ca528..8c4eb923c7cc6ff8ded9a49c612b7262d891e012 100644 (file)
@@ -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
index 84a5cee92bafbf779f68920321191881c433c123..d3c7a625efd464945f12e1da484f9fe950711c68 100644 (file)
@@ -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
index c29a3447e6c28a4e7a56e6561ef0688b9774e5c7..dd923183f0c4c80cf9ce2c62a417b76715d3b751 100644 (file)
@@ -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 {
index f4f82c6907a3e7daae7a567e5f6abbf12fee5fcd..cd5c48706ed0680e7bc81ec09abcb302f8f4fb00 100644 (file)
@@ -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);
index 5a67d1e9bb1bd483ae0bcebcf984d96bc24177bb..51d923fc03bb61f6ce779f9933d49e712e5904ed 100644 (file)
@@ -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") {
index 0307595dc0462f7be3023f65ba3ee265b5e5a997..b65be178fb95958f41f68f782b24b3c44dbbc1ed 100644 (file)
@@ -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");
index 48e825da70a77a9f3e56193045f00e1cdac7fda5..df2715107f5b7bae593e86bfc51850db08347e98 100644 (file)
@@ -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<void, InsetBibKey *> showBibkey;
        ///
-       Signal1<void, InsetCitation *> showCitation;
+       Signal1<void, InsetCommand *> showCitation;
        ///
        Signal1<void, string const &> createCitation;
        ///
-       Signal1<void, InsetUrl *> showUrl;
+       Signal1<void, InsetCommand *> showTOC;
+       ///
+       Signal1<void, string const &> createTOC;
+       ///
+       Signal1<void, InsetCommand *> showUrl;
        ///
        Signal1<void, string const &> createUrl;
        ///
index 8cb2fd407aef875d9578b2f140437e6404f5fc0b..d58f906a00a7bbc4d23a016050e1e7c0b4f4909e 100644 (file)
@@ -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
index 0443068dc71ce262215266cdff08040b5b8b841d..4762979ceff6be0c2e6ab1b62cf1bcb3e7d34d5d 100644 (file)
@@ -11,8 +11,6 @@
 
 #include <config.h>
 
-#include <algorithm>
-
 #include FORMS_H_LOCATION
 
 #ifdef __GNUG__
 
 
 #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<string> citekeys;
+static vector<string> bibkeys;
+static vector<string> 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 )
-{
-       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()
+FL_FORM * const FormCitation::form() const
 {
-       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<string> 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<FormCitation::State>( 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 );
+               // 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 {
-               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();
+                                            params.getAsString().c_str() );
        }
-
-       // 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();
-               }
-               fl_free_form(dialog_->form_citation);
-               delete dialog_;
-               dialog_ = 0;
-       }
-}
-
-
-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<FormCitation*>(form->u_vdata);
-       pre->hide();
-       return FL_CANCEL;
-}
-
-
-void FormCitation::OKCB(FL_OBJECT * ob, long)
-{
-       FormCitation * pre = static_cast<FormCitation*>(ob->form->u_vdata);
-       pre->apply();
-       pre->hide();
-}
-
-
-void FormCitation::CancelCB(FL_OBJECT * ob, long)
-{
-       FormCitation * pre = static_cast<FormCitation*>(ob->form->u_vdata);
-       pre->hide();
-}
-
-
-void FormCitation::InputCB(FL_OBJECT * ob, long data)
-{
-       FormCitation * pre = static_cast<FormCitation*>(ob->form->u_vdata);
-       pre->input( static_cast<FormCitation::State>(data) );
 }
index e68ee68b5ab305e24717a282a4a39b54e147baa6..aa8a9cbdf55ebe8f0491cdee0727dfbca4115c52 100644 (file)
 #ifndef FORMCITATION_H
 #define FORMCITATION_H
 
-#include <vector>
-
-#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<string> 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<string> citekeys;
-       ///
-       std::vector<string> bibkeys;
-       ///
-       std::vector<string> bibkeysInfo;
-       //@}
 };
 
 #endif
diff --git a/src/frontends/xforms/FormCommand.C b/src/frontends/xforms/FormCommand.C
new file mode 100644 (file)
index 0000000..e873f66
--- /dev/null
@@ -0,0 +1,151 @@
+// -*- C++ -*-
+/* This file is part of
+ * ====================================================== 
+ *
+ *           LyX, The Document Processor
+ *
+ *           Copyright 2000 The LyX Team.
+ *
+ * ======================================================
+ */
+
+#include <config.h>
+
+#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<FormCommand*>(form->u_vdata);
+       pre->hide();
+       return FL_CANCEL;
+}
+
+
+void FormCommand::ApplyCB(FL_OBJECT * ob, long)
+{
+       FormCommand * pre = static_cast<FormCommand*>(ob->form->u_vdata);
+       pre->apply();
+}
+
+
+void FormCommand::CancelCB(FL_OBJECT * ob, long)
+{
+       FormCommand * pre = static_cast<FormCommand*>(ob->form->u_vdata);
+       pre->hide();
+}
+
+
+void FormCommand::InputCB(FL_OBJECT * ob, long data )
+{
+       FormCommand * pre = static_cast<FormCommand*>(ob->form->u_vdata);
+       pre->input( data );
+}
+
+
+void FormCommand::OKCB(FL_OBJECT * ob, long)
+{
+       FormCommand * pre = static_cast<FormCommand*>(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 (file)
index 0000000..34da044
--- /dev/null
@@ -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 (file)
index 0000000..1f48863
--- /dev/null
@@ -0,0 +1,161 @@
+// -*- C++ -*-
+/* This file is part of
+ * ====================================================== 
+ *
+ *           LyX, The Document Processor
+ *
+ *           Copyright 2000 The LyX Team.
+ *
+ * ======================================================
+ */
+
+#include <config.h>
+#include <vector>
+
+#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<Buffer::TocItem> 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<vector<Buffer::TocItem> > 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<Buffer::TocItem>::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 (file)
index 0000000..f30861f
--- /dev/null
@@ -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
index 5085e68ceffd2bcac225fe9e1e10a8a4641744e8..9b4c966b824a48d0d5c633af3aea5f6b7e9ad07a 100644 (file)
 #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 )
-{
-       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 )
+FL_FORM * const FormUrl::form() const
 {
-       if( dialogIsOpen ) return;
-
-       params->setFromString( arg );
-       show();
+       if( dialog_ && dialog_->form_url )
+               return dialog_->form_url;
+       else
+               return 0;
 }
 
 
-void FormUrl::show()
+void FormUrl::update()
 {
-       if (!dialog_) {
-               build();
-               fl_set_form_atclose(dialog_->form_url,
-                                   C_FormUrlWMHideCB, 0);
-       }
+       static int ow = -1, oh;
 
-       update();  // make sure its up-to-date
+       if (ow < 0) {
+               ow = dialog_->form_url->w;
+               oh = dialog_->form_url->h;
 
-       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));
+               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 );
 
-void FormUrl::update()
-{
-       fl_set_input(dialog_->url,  params->getContents().c_str());
-       fl_set_input(dialog_->name, params->getOptions().c_str());
+       fl_set_input(dialog_->url,  params.getContents().c_str());
+       fl_set_input(dialog_->name, params.getOptions().c_str());
 
-       if ( params->getCmdName() == "url" )
+       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;
+       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_set_form_minsize(dialog_->form_url, ow, oh);
-       fl_set_form_maxsize(dialog_->form_url, 2*ow, oh);
+       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() );
-       }
-}
-
-
-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;
+                                            params.getAsString().c_str() );
        }
 }
-
-
-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<FormUrl*>(form->u_vdata);
-       pre->hide();
-       return FL_CANCEL;
-}
-
-
-void FormUrl::OKCB(FL_OBJECT * ob, long)
-{
-       FormUrl * pre = static_cast<FormUrl*>(ob->form->u_vdata);
-       pre->apply();
-       pre->hide();
-}
-
-
-void FormUrl::CancelCB(FL_OBJECT * ob, long)
-{
-       FormUrl * pre = static_cast<FormUrl*>(ob->form->u_vdata);
-       pre->hide();
-}
index c82f4f90254e78979b4e5ba2b5955aabdd7012c3..02b8a1e37205efcb4e18573a60ecb97accc6e61b 100644 (file)
 #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
index 04abb62c328152d8559537c4585a72357ae2ff8b..84a1e8d9549d9d70107068289782f6b78906e00e 100644 (file)
@@ -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 (file)
index 0000000..50f1343
--- /dev/null
@@ -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
index bf8384b52aadb3fdb78fbee6fc2fd8547c5ec6ff..c16c5b83a93c60a588ce0f0c1b6428fa6489b1df 100644 (file)
@@ -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
 
 ==============================
index 018b71d97debc27119950cd457adf98085aab2f0..50b20c6a3eb5726a062da2d92c53ee415e638d8f 100644 (file)
@@ -25,6 +25,7 @@ SRCS := form_citation.fd \
        form_print.fd \
        form_graphics.fd \
        form_tabular.fd \
+       form_toc.fd \
        form_url.fd
 
 
index c870e428822b65ec4f2f72f429d52dae74608f64..9574baa198956add64b70979ddf8e9fe4782bf59 100644 (file)
@@ -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 \
index 3b6304e41f7162f79e6b063cc6569a87affe5e6c..51d9658f4bbcf9cb2743a0703f6189c561737867 100644 (file)
@@ -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());
index 63789cf51e316303aa078938e44ccefa54d9b56d..7e7676400b216908a7584e7d81350b384ad531c1 100644 (file)
 #endif
 
 #include "insetcommand.h"
-#include <sigc++/signal_system.h>
-
-#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<void> hide;
 };
 
 #endif // INSET_CITE_H
index e287d7929ffe1839e6fe58db4c97c7c3e69c0a11..81f58781c57d70720cd4724aba66387786f9e99d 100644 (file)
 #endif
 
 #include "insetbutton.h"
+#include <sigc++/signal_system.h>
+
+#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<void> hide;
 private:
        ///
        InsetCommandParams p_;
diff --git a/src/insets/insetloa.C b/src/insets/insetloa.C
deleted file mode 100644 (file)
index 65215ad..0000000
+++ /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 <config.h>
-
-#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 (file)
index f16bbfc..0000000
+++ /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 (file)
index 12705e0..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <config.h>
-
-#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 (file)
index 10836c8..0000000
+++ /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 (file)
index f4a1e3b..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <config.h>
-
-#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 (file)
index 6ef73b4..0000000
+++ /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
index 1c633ff0a7257f58777d80caa84f1ee17cae42f0..f74b85ff8e869d6c5d5e258b6139e13080db4149 100644 (file)
@@ -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 << "<toc>";
+       if( getCmdName() == "tableofcontents" )
+               os << "<toc>";
        return 0;
 }
 
 
 int InsetTOC::DocBook(Buffer const *, ostream & os) const
 {
-       os << "<toc></toc>";
+       if( getCmdName() == "tableofcontents" )
+               os << "<toc></toc>";
        return 0;
 }
index c96c6266a191d6e2bbd4842d1bf3824f2b9361eb..cf0de54519bb71dc09fe13124324d3edfd981a29 100644 (file)
 
 #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
index eb4b4cf250d69e4672a273f77d600e549a14ef0d..a63a7ef4124146fef3f0c4d98d1bc52198498313 100644 (file)
@@ -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 );
index e76161e78057e5e8e9222b186301574e74eae5c2..30a7b2c49bbd5342569f9b47817fb4b0672a7aec 100644 (file)
 #endif
 
 #include "insetcommand.h"
-#include <sigc++/signal_system.h>
 
 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<void> hide;
 };
 
 #endif
index 4e1bacb461324171917a227009d13d9e1f943b0e..acad35fe100b77cd10f652c4b1f3376c500dd2c2 100644 (file)
--- 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;
index 3d3f2aae8d48758dc2ca37eb85169a144b90546c..2d0f56c86d78c5b8b7b2896fcc2e54629e8aa3fc 100644 (file)
--- 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;
index 4f47c56621a9b923f805aaa315a6a97c16341458..ed3430bea4aa5815fe6ba3dd989540fa509ef483 100644 (file)
@@ -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<Buffer::TocItem> 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<vector<Buffer::TocItem> > 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<Buffer::TocItem>::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)
 {
index e33d6a5f37b855912ea314e5164f5287a5a4c757..da1dbdd3b5dbc63a29ad8a9194f69b9de3eac9bb 100644 (file)
@@ -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);
index 9b849b6c5eb763b844e3598698606d1533ad7183..fd6cfd211948cc767c6522e64482c7d43f3ecc78 100644 (file)
@@ -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);
        }
index ef58c2bcf1ea1e7813871ae8f9e7783e56349700..c68c87185db0a8f09006adfd826bfff6ca8f3351 100644 (file)
@@ -22,6 +22,7 @@
 #include <csignal>
 
 #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 */
        //@{
index a35294065bba3271e257293f8bc5f7926a26ff8e..34112ce3b5b3a9d0028456faba9bf0089d9b4acf 100644 (file)
@@ -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_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;
                    
index 1babf22127d05f10c34ca5c56d3c190345f04a5d..aaec005645506a4e287287ab61d159637c00ecbf 100644 (file)
@@ -1,7 +1,3 @@
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
 #include <config.h>
 
 #include <sys/types.h>
@@ -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();
 }
index 3ca19d409ab29da5d5b5b5eee4c759c3e8ede3f7..ae1d41b4489b2f5f619770bda2350ccdbc0c51a8 100644 (file)
@@ -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;