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();

Reply via email to