The attached patch is a work-in-progress in that the Qt math panel now uses the Controller-View split of the other dialogs, but I haven't tried to merge the xforms and Qt code bases together yet.
After this, I'd like to address this: void QMathDialog::delimiterClicked() { // FIXME: leak QDelimiterDialog * d = new QDelimiterDialog(form_); d->show(); } I wonder, is there any real reason why these dialogs can't be stored and invoked like any other. void QMathDialog::delimiterClicked() { form_->controller().showDialog("mathdelimiter"); } void ControlMath2::showDialog(string const & name) { kernel().dispatch(FuncRequest(LFUN_DIALOG_SHOW, name)); } -- Angus
Index: src/frontends/controllers/ControlMath2.C =================================================================== RCS file: src/frontends/controllers/ControlMath2.C diff -N src/frontends/controllers/ControlMath2.C --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/frontends/controllers/ControlMath2.C 12 Jun 2003 12:04:50 -0000 @@ -0,0 +1,65 @@ +/** + * \file ControlMath2.C + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author Angus Leeming + * + * Full author contact details are available in file CREDITS + */ + +#include <config.h> + +#include "ControlMath2.h" +#include "Kernel.h" +#include "funcrequest.h" + + +ControlMath2::ControlMath2(Dialog & dialog) + : Dialog::Controller(dialog) +{} + + +void ControlMath2::dispatchInsert(string const & name) const +{ + kernel().dispatch(FuncRequest(LFUN_INSERT_MATH, '\\' + name)); +} + + +void ControlMath2::dispatchSubscript() const +{ + kernel().dispatch(FuncRequest(LFUN_SUBSCRIPT)); +} + + +void ControlMath2::dispatchSuperscript() const +{ + kernel().dispatch(FuncRequest(LFUN_SUPERSCRIPT)); +} + + +void ControlMath2::dispatchCubeRoot() const +{ + kernel().dispatch(FuncRequest(LFUN_INSERT_MATH, "\\root")); + kernel().dispatch(FuncRequest(LFUN_SELFINSERT, "3")); + kernel().dispatch(FuncRequest(LFUN_RIGHT)); +} + + +void ControlMath2::dispatchMatrix(string const & str) const +{ + kernel().dispatch(FuncRequest(LFUN_INSERT_MATRIX, str)); +} + + +void ControlMath2::dispatchDelim(string const & str) const +{ + kernel().dispatch(FuncRequest(LFUN_MATH_DELIM, str)); +} + + +void ControlMath2::dispatchToggleDisplay() const +{ + kernel().dispatch(FuncRequest(LFUN_MATH_DISPLAY)); +} + Index: src/frontends/controllers/ControlMath2.h =================================================================== RCS file: src/frontends/controllers/ControlMath2.h diff -N src/frontends/controllers/ControlMath2.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/frontends/controllers/ControlMath2.h 12 Jun 2003 12:04:51 -0000 @@ -0,0 +1,82 @@ +// -*- C++ -*- +/** + * \file ControlMath2.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author Angus Leeming + * + * Full author contact details are available in file CREDITS + * + * ControlMath2 is a controller class for the Math Panel dialog. + */ + +#ifndef CONTROLMATH2_H +#define CONTROLMATH2_H + + +#include "Dialog.h" + + +class ControlMath2 : public Dialog::Controller { +public: + ControlMath2(Dialog &); + + virtual bool initialiseParams(string const &) { return true; } + virtual void clearParams() {} + virtual void dispatchParams() {} + virtual bool isBufferDependent() const { return true; } + + /// Insert a math symbol into the doc. + void dispatchInsert(string const & name) const; + /// Insert a subscript. + void dispatchSubscript() const; + /// Insert a superscript. + void dispatchSuperscript() const; + /// Insert a cube root + void dispatchCubeRoot() const; + /// Insert a matrix + void dispatchMatrix(string const & str) const; + /// Insert a delimiter + void dispatchDelim(string const & str) const; + /// switch between display and inline + void dispatchToggleDisplay() const; +}; + + +extern char const * function_names[]; +extern int const nr_function_names; +extern char const * latex_arrow[]; +extern int const nr_latex_arrow; +extern char const * latex_bop[]; +extern int const nr_latex_bop; +extern char const * latex_brel[]; +extern int const nr_latex_brel; +extern char const * latex_dots[]; +extern int const nr_latex_dots; +extern char const * latex_greek[]; +extern int const nr_latex_greek; +extern char const * latex_deco[]; +extern int const nr_latex_deco; +extern char const * latex_misc[]; +extern int const nr_latex_misc; +extern char const * latex_varsz[]; +extern int const nr_latex_varsz; +extern char const * latex_ams_misc[]; +extern int const nr_latex_ams_misc; +extern char const * latex_ams_arrows[]; +extern int const nr_latex_ams_arrows; +extern char const * latex_ams_rel[]; +extern int const nr_latex_ams_rel; +extern char const * latex_ams_nrel[]; +extern int const nr_latex_ams_nrel; +extern char const * latex_ams_ops[]; +extern int const nr_latex_ams_ops; + +/** + * Return the mangled XPM filename of the given + * math symbol. + */ +string const find_xpm(string const & name); + +#endif // NOT CONTROLMATH2 Index: src/frontends/controllers/Makefile.am =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/controllers/Makefile.am,v retrieving revision 1.55 diff -u -p -r1.55 Makefile.am --- src/frontends/controllers/Makefile.am 13 May 2003 21:15:47 -0000 1.55 +++ src/frontends/controllers/Makefile.am 12 Jun 2003 12:04:51 -0000 @@ -68,6 +68,8 @@ libcontrollers_la_SOURCES= \ ControlLog.h \ ControlMath.C \ ControlMath.h \ + ControlMath2.C \ + ControlMath2.h \ ControlMinipage.C \ ControlMinipage.h \ ControlParagraph.C \ Index: src/frontends/qt2/Dialogs.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/Dialogs.C,v retrieving revision 1.85 diff -u -p -r1.85 Dialogs.C --- src/frontends/qt2/Dialogs.C 4 Jun 2003 09:16:29 -0000 1.85 +++ src/frontends/qt2/Dialogs.C 12 Jun 2003 12:04:51 -0000 @@ -26,6 +26,7 @@ #include "ControlGraphics.h" #include "ControlInclude.h" #include "ControlLog.h" +#include "ControlMath2.h" #include "ControlMinipage.h" #include "ControlParagraph.h" #include "ControlRef.h" @@ -55,6 +56,7 @@ #include "QInclude.h" #include "QIndex.h" #include "QLog.h" +#include "QMath.h" #include "QMinipage.h" #include "QParagraph.h" #include "QRef.h" @@ -80,7 +82,7 @@ namespace { char const * const dialognames[] = { "about", "bibitem", "bibtex", "changes", "character", "citation", "error", "errorlist", "ert", "external", "file", -"float", "graphics", "include", "index", "label", "log", "minipage", +"float", "graphics", "include", "index", "label", "log", "math", "minipage", "paragraph", "ref", "tabular", "tabularcreate", #ifdef HAVE_LIBAIKSAURUS @@ -192,6 +194,10 @@ Dialog * Dialogs::build(string const & n dialog->setController(new ControlLog(*dialog)); dialog->setView(new QLog(*dialog)); dialog->bc().bp(new OkCancelPolicy); + } else if (name == "math") { + dialog->setController(new ControlMath2(*dialog)); + dialog->setView(new QMath(*dialog)); + dialog->bc().bp(new IgnorantPolicy); } else if (name == "minipage") { dialog->setController(new ControlMinipage(*dialog)); dialog->setView(new QMinipage(*dialog)); Index: src/frontends/qt2/Dialogs2.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/Dialogs2.C,v retrieving revision 1.36 diff -u -p -r1.36 Dialogs2.C --- src/frontends/qt2/Dialogs2.C 28 Mar 2003 02:10:23 -0000 1.36 +++ src/frontends/qt2/Dialogs2.C 12 Jun 2003 12:04:51 -0000 @@ -120,10 +120,8 @@ void Dialogs::showForks() void Dialogs::showMathPanel() { - // FIXME FIXME FIXME - extern void createMathPanel(); - - createMathPanel(); + static DialogPtr mathdialog(build("math")); + mathdialog->show(string()); } Index: src/frontends/qt2/QDelimiterDialog.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QDelimiterDialog.C,v retrieving revision 1.10 diff -u -p -r1.10 QDelimiterDialog.C --- src/frontends/qt2/QDelimiterDialog.C 13 Feb 2003 16:52:52 -0000 1.10 +++ src/frontends/qt2/QDelimiterDialog.C 12 Jun 2003 12:04:51 -0000 @@ -15,8 +15,8 @@ #include "qt_helpers.h" #include "debug.h" +#include "ControlMath2.h" #include "QMath.h" -#include "ControlMath.h" #include "QDelimiterDialog.h" #include "iconpalette.h" @@ -96,7 +96,7 @@ QDelimiterDialog::QDelimiterDialog(QMath void QDelimiterDialog::insertClicked() { - form_->insertDelim(fix_name(left_) + ' ' + fix_name(right_)); + form_->controller().dispatchDelim(fix_name(left_) + ' ' + fix_name(right_)); } Index: src/frontends/qt2/QMath.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QMath.C,v retrieving revision 1.11 diff -u -p -r1.11 QMath.C --- src/frontends/qt2/QMath.C 10 Jun 2003 14:39:44 -0000 1.11 +++ src/frontends/qt2/QMath.C 12 Jun 2003 12:04:51 -0000 @@ -11,98 +11,21 @@ #include <config.h> -#include "debug.h" - -#include "lfuns.h" -#include "funcrequest.h" -#include "LyXView.h" -#include "BufferView.h" - +#include "gettext.h" +#include "ControlMath2.h" #include "QMathDialog.h" #include "QMath.h" -#include "iconpalette.h" - -// needless to say, this can't last for long -#warning FIXME Current_view used here! -extern BufferView * current_view; - - -// FIXME temporary HACK ! -void createMathPanel() -{ - static QMath * dialog = 0; - if (!dialog) { - dialog = new QMath; - dialog->build_dialog(); - } - dialog->do_show(); -} +typedef QController<ControlMath2, QView<QMathDialog> > base_class; -QMath::QMath() -{ -} - -void QMath::do_show() -{ - dialog_->show(); -} +QMath::QMath(Dialog & parent) + : base_class(parent, _("LyX: Math Panel")) +{} void QMath::build_dialog() { - dialog_ = new QMathDialog(this); -} - - -void QMath::subscript() -{ -#warning FIXME Current_view used here! - current_view->owner()->dispatch(FuncRequest(LFUN_SUBSCRIPT)); -} - - -void QMath::superscript() -{ -#warning FIXME Current_view used here! - current_view->owner()->dispatch(FuncRequest(LFUN_SUPERSCRIPT)); -} - - -void QMath::insert(string const & name) -{ -#warning FIXME Current_view used here! - current_view->owner()->dispatch(FuncRequest(LFUN_INSERT_MATH, '\\' + name)); -} - - -void QMath::insertCubeRoot() -{ -#warning FIXME Current_view used here! - current_view->owner()->dispatch(FuncRequest(LFUN_INSERT_MATH, "\\root")); - current_view->owner()->dispatch(FuncRequest(LFUN_SELFINSERT, "3")); - current_view->owner()->dispatch(FuncRequest(LFUN_RIGHT)); -} - - -void QMath::insertMatrix(string const & str) -{ -#warning FIXME Current_view used here! - current_view->owner()->dispatch(FuncRequest(LFUN_INSERT_MATRIX, str)); -} - - -void QMath::insertDelim(string const & str) -{ -#warning FIXME Current_view used here! - current_view->owner()->dispatch(FuncRequest(LFUN_MATH_DELIM, str)); -} - - -void QMath::toggleDisplay() -{ -#warning FIXME Current_view used here! - current_view->owner()->dispatch(FuncRequest(LFUN_MATH_DISPLAY)); + dialog_.reset(new QMathDialog(this)); } Index: src/frontends/qt2/QMath.h =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QMath.h,v retrieving revision 1.10 diff -u -p -r1.10 QMath.h --- src/frontends/qt2/QMath.h 13 Feb 2003 16:52:53 -0000 1.10 +++ src/frontends/qt2/QMath.h 12 Jun 2003 12:04:51 -0000 @@ -13,50 +13,22 @@ #define QMATH_H -#include "LString.h" +#include "QDialogView.h" +class ControlMath2; class QMathDialog; -class QMath { +class QMath : public QController<ControlMath2, QView<QMathDialog> > { public: friend class QMathDialog; - QMath(); + QMath(Dialog &); - /// temporary - void do_show(); - - /// build the dialog (should be private) - virtual void build_dialog(); - - /// insert a math symbol into the doc - void insert(string const & name); - - /// insert a cube root - void insertCubeRoot(); - - /// insert a matrix - void insertMatrix(string const & str); - - /// insert delim - void insertDelim(string const & str); - - /// add a subscript - void subscript(); - - /// add a superscript - void superscript(); - - /// switch between display and inline - void toggleDisplay(); private: - /// Apply changes virtual void apply() {} - /// update virtual void update_contents() {} - - // FIXME: temp - QMathDialog * dialog_; + /// Build the dialog. + virtual void build_dialog(); }; #endif // QMATH_H Index: src/frontends/qt2/QMathDialog.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QMathDialog.C,v retrieving revision 1.26 diff -u -p -r1.26 QMathDialog.C --- src/frontends/qt2/QMathDialog.C 15 Mar 2003 17:29:34 -0000 1.26 +++ src/frontends/qt2/QMathDialog.C 12 Jun 2003 12:04:53 -0000 @@ -15,7 +15,7 @@ #include "qt_helpers.h" #include "debug.h" -#include "ControlMath.h" +#include "ControlMath2.h" #include "QMathDialog.h" #include "QMath.h" @@ -196,13 +196,13 @@ void QMathDialog::addPanel(int num) void QMathDialog::symbol_clicked(string const & str) { - form_->insert(str); + form_->controller().dispatchInsert(str); } void QMathDialog::fracClicked() { - form_->insert("frac"); + form_->controller().dispatchInsert("frac"); } @@ -229,7 +229,7 @@ void QMathDialog::expandClicked() void QMathDialog::functionSelected(const QString & str) { - form_->insert(fromqstr(str)); + form_->controller().dispatchInsert(fromqstr(str)); } @@ -243,19 +243,19 @@ void QMathDialog::matrixClicked() void QMathDialog::equationClicked() { - form_->toggleDisplay(); + form_->controller().dispatchToggleDisplay(); } void QMathDialog::subscriptClicked() { - form_->subscript(); + form_->controller().dispatchSubscript(); } void QMathDialog::superscriptClicked() { - form_->superscript(); + form_->controller().dispatchSuperscript(); } @@ -271,7 +271,7 @@ void QMathDialog::insertSpace(int id) case 6: str = "!"; break; default: return; } - form_->insert(str); + form_->controller().dispatchInsert(str); } @@ -279,13 +279,13 @@ void QMathDialog::insertRoot(int id) { switch (id) { case 1: - form_->insert("sqrt"); + form_->controller().dispatchInsert("sqrt"); break; case 2: - form_->insertCubeRoot(); + form_->controller().dispatchCubeRoot(); break; case 3: - form_->insert("root"); + form_->controller().dispatchInsert("root"); break; } } @@ -301,7 +301,7 @@ void QMathDialog::insertStyle(int id) case 4: str = "scriptscriptstyle"; break; default: return; } - form_->insert(str); + form_->controller().dispatchInsert(str); } @@ -320,5 +320,5 @@ void QMathDialog::insertFont(int id) case 9: str = "textrm"; break; default: return; } - form_->insert(str); + form_->controller().dispatchInsert(str); } Index: src/frontends/qt2/QMathMatrixDialog.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QMathMatrixDialog.C,v retrieving revision 1.7 diff -u -p -r1.7 QMathMatrixDialog.C --- src/frontends/qt2/QMathMatrixDialog.C 13 May 2003 17:01:28 -0000 1.7 +++ src/frontends/qt2/QMathMatrixDialog.C 12 Jun 2003 12:04:53 -0000 @@ -14,6 +14,7 @@ #include "support/lstrings.h" #include "Lsstream.h" +#include "ControlMath2.h" #include "QMath.h" #include "QMathMatrixDialog.h" @@ -81,7 +82,7 @@ void QMathMatrixDialog::slotOK() ostringstream os; os << nx << ' ' << ny << ' ' << c << ' ' << sh; - form_->insertMatrix(os.str().c_str()); + form_->controller().dispatchMatrix(os.str().c_str()); // close the dialog close();