[PATCH] Implement proper Dialog factory instead of implicit link-time dependencies

Yuriy Skalko yuriy.skalko at gmail.com
Thu Dec 3 17:43:57 UTC 2020


-------------- next part --------------
From 5d787f00733e53ee943466fc6d8e8fe45f6950b6 Mon Sep 17 00:00:00 2001
From: Yuriy Skalko <yuriy.skalko at gmail.com>
Date: Thu, 3 Dec 2020 19:41:52 +0200
Subject: [PATCH] Implement proper Dialog factory instead of implicit link-time
 dependencies

---
 src/frontends/qt/DialogFactory.cpp     | 239 +++++++++++++++++++++++++
 src/frontends/qt/DialogFactory.h       |  30 ++++
 src/frontends/qt/FindAndReplace.cpp    |  11 --
 src/frontends/qt/GuiAbout.cpp          |   3 -
 src/frontends/qt/GuiBibtex.cpp         |   3 -
 src/frontends/qt/GuiChanges.cpp        |   3 -
 src/frontends/qt/GuiCharacter.cpp      |   3 -
 src/frontends/qt/GuiCitation.cpp       |   3 -
 src/frontends/qt/GuiCompare.cpp        |   2 -
 src/frontends/qt/GuiCompareHistory.cpp |   3 -
 src/frontends/qt/GuiDelimiter.cpp      |   3 -
 src/frontends/qt/GuiDocument.cpp       |   4 -
 src/frontends/qt/GuiErrorList.cpp      |   2 -
 src/frontends/qt/GuiExternal.cpp       |   3 -
 src/frontends/qt/GuiGraphics.cpp       |   3 -
 src/frontends/qt/GuiInclude.cpp        |   3 -
 src/frontends/qt/GuiIndex.cpp          |   3 -
 src/frontends/qt/GuiListings.cpp       |   3 -
 src/frontends/qt/GuiLog.cpp            |   3 -
 src/frontends/qt/GuiLyXFiles.cpp       |   2 -
 src/frontends/qt/GuiMathMatrix.cpp     |   3 -
 src/frontends/qt/GuiNote.cpp           |   3 -
 src/frontends/qt/GuiParagraph.cpp      |   6 -
 src/frontends/qt/GuiPhantom.cpp        |   3 -
 src/frontends/qt/GuiPrefs.cpp          |   3 -
 src/frontends/qt/GuiPrintindex.cpp     |   3 -
 src/frontends/qt/GuiProgressView.cpp   |   7 -
 src/frontends/qt/GuiRef.cpp            |   4 -
 src/frontends/qt/GuiSearch.cpp         |   3 -
 src/frontends/qt/GuiSendto.cpp         |   2 -
 src/frontends/qt/GuiShowFile.cpp       |   3 -
 src/frontends/qt/GuiSpellchecker.cpp   |  10 --
 src/frontends/qt/GuiSymbols.cpp        |   6 -
 src/frontends/qt/GuiTabularCreate.cpp  |   6 -
 src/frontends/qt/GuiTexinfo.cpp        |   3 -
 src/frontends/qt/GuiThesaurus.cpp      |   3 -
 src/frontends/qt/GuiToc.cpp            |   6 -
 src/frontends/qt/GuiView.cpp           | 127 +------------
 src/frontends/qt/GuiViewSource.cpp     |   6 -
 src/frontends/qt/GuiWrap.cpp           |   3 -
 src/frontends/qt/InsetParamsDialog.cpp |  66 -------
 src/frontends/qt/Makefile.am           |   4 +-
 42 files changed, 274 insertions(+), 335 deletions(-)
 create mode 100644 src/frontends/qt/DialogFactory.cpp
 create mode 100644 src/frontends/qt/DialogFactory.h

diff --git a/src/frontends/qt/DialogFactory.cpp b/src/frontends/qt/DialogFactory.cpp
new file mode 100644
index 0000000000..64ba4a5589
--- /dev/null
+++ b/src/frontends/qt/DialogFactory.cpp
@@ -0,0 +1,239 @@
+/**
+ * \file DialogFactory.cpp
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author Yuriy Skalko
+ *
+ * Full author contact details are available in file CREDITS.
+ */
+
+#include <config.h>
+
+#include "DialogFactory.h"
+#include "FindAndReplace.h"
+#include "GuiAbout.h"
+#include "GuiBibitem.h"
+#include "GuiBibtex.h"
+#include "GuiBox.h"
+#include "GuiBranch.h"
+#include "GuiChanges.h"
+#include "GuiCharacter.h"
+#include "GuiCitation.h"
+#include "GuiCompare.h"
+#include "GuiCompareHistory.h"
+#include "GuiCounter.h"
+#include "GuiDelimiter.h"
+#include "GuiDocument.h"
+#include "GuiErrorList.h"
+#include "GuiERT.h"
+#include "GuiExternal.h"
+#include "FloatPlacement.h"
+#include "GuiGraphics.h"
+#include "GuiHSpace.h"
+#include "GuiHyperlink.h"
+#include "GuiInclude.h"
+#include "GuiIndex.h"
+#include "GuiInfo.h"
+#include "GuiLabel.h"
+#include "GuiLine.h"
+#include "GuiListings.h"
+#include "GuiLog.h"
+#include "GuiLyXFiles.h"
+#include "GuiMathMatrix.h"
+#include "GuiNomenclature.h"
+#include "GuiNote.h"
+#include "GuiParagraph.h"
+#include "GuiPhantom.h"
+#include "GuiPrefs.h"
+#include "GuiPrintindex.h"
+#include "GuiPrintNomencl.h"
+#include "GuiProgressView.h"
+#include "GuiRef.h"
+#include "GuiSearch.h"
+#include "GuiSendto.h"
+#include "GuiShowFile.h"
+#include "GuiSpellchecker.h"
+#include "GuiSymbols.h"
+#include "GuiTabular.h"
+#include "GuiTabularCreate.h"
+#include "GuiTexinfo.h"
+#include "GuiThesaurus.h"
+#include "GuiToc.h"
+#include "GuiViewSource.h"
+#include "GuiVSpace.h"
+#include "GuiWrap.h"
+
+#include "insets/Inset.h"
+#include "InsetParamsDialog.h"
+#include "InsetParamsWidget.h"
+
+using namespace std;
+
+namespace lyx {
+namespace frontend {
+
+
+namespace {
+
+Dialog * createDialog(GuiView & gv, InsetCode code)
+{
+	InsetParamsWidget * widget;
+	switch (code) {
+	case ERT_CODE:
+		widget = new GuiERT;
+		break;
+	case FLOAT_CODE:
+		widget = new FloatPlacement(true);
+		break;
+	case BIBITEM_CODE:
+		widget = new GuiBibitem;
+		break;
+	case BRANCH_CODE:
+		widget = new GuiBranch;
+		break;
+	case BOX_CODE:
+		widget = new GuiBox;
+		break;
+	case HYPERLINK_CODE:
+		widget = new GuiHyperlink;
+		break;
+	case COUNTER_CODE:
+		widget = new GuiCounter(gv, nullptr);
+		break;
+	case INFO_CODE:
+		widget = new GuiInfo;
+		break;
+	case LABEL_CODE:
+		widget = new GuiLabel;
+		break;
+	case LINE_CODE:
+		widget = new GuiLine;
+		break;
+	case MATH_SPACE_CODE:
+		widget = new GuiHSpace(true);
+		break;
+	case NOMENCL_CODE:
+		widget = new GuiNomenclature;
+		break;
+	case NOMENCL_PRINT_CODE:
+		widget = new GuiPrintNomencl;
+		break;
+	case SPACE_CODE:
+		widget = new GuiHSpace(false);
+		break;
+	case TABULAR_CODE:
+		widget = new GuiTabular;
+		break;
+	case VSPACE_CODE:
+		widget = new GuiVSpace;
+		break;
+	default:
+		return nullptr;
+	}
+	InsetParamsDialog * dialog = new InsetParamsDialog(gv, widget);
+	return dialog;
+}
+
+} // namespace
+
+
+Dialog * createDialog(GuiView & gv, string const & name)
+{
+	Dialog * dialog = createDialog(gv, insetCode(name));
+	if (dialog)
+		return dialog;
+
+	if (name == "aboutlyx")
+		return new GuiAbout(gv);
+	if (name == "bibtex")
+		return new GuiBibtex(gv);
+	if (name == "changes")
+		return new GuiChanges(gv);
+	if (name == "character")
+		return new GuiCharacter(gv);
+	if (name == "citation")
+		return new GuiCitation(gv);
+	if (name == "compare")
+		return new GuiCompare(gv);
+	if (name == "comparehistory")
+		return new GuiCompareHistory(gv);
+	if (name == "document")
+		return new GuiDocument(gv);
+	if (name == "errorlist")
+		return new GuiErrorList(gv);
+	if (name == "external")
+		return new GuiExternal(gv);
+	if (name == "file")
+		return new GuiShowFile(gv);
+	if (name == "findreplace")
+		return new GuiSearch(gv);
+	if (name == "findreplaceadv") {
+		FindAndReplace * gui = new FindAndReplace(gv, Qt::RightDockWidgetArea);
+#ifdef Q_OS_MAC
+		// On Mac show and floating
+		gui->setFloating(true);
+#endif
+		return gui;
+	}
+	if (name == "graphics")
+		return new GuiGraphics(gv);
+	if (name == "include")
+		return new GuiInclude(gv);
+	if (name == "index")
+		return new GuiIndex(gv);
+	if (name == "index_print")
+		return new GuiPrintindex(gv);
+	if (name == "listings")
+		return new GuiListings(gv);
+	if (name == "log")
+		return new GuiLog(gv);
+	if (name == "lyxfiles")
+		return new GuiLyXFiles(gv);
+	if (name == "mathdelimiter")
+		return new GuiDelimiter(gv);
+	if (name == "mathmatrix")
+		return new GuiMathMatrix(gv);
+	if (name == "note")
+		return new GuiNote(gv);
+	if (name == "paragraph")
+		return new GuiParagraph(gv);
+	if (name == "phantom")
+		return new GuiPhantom(gv);
+	if (name == "prefs")
+		return new GuiPreferences(gv);
+	if (name == "ref")
+		return new GuiRef(gv);
+	if (name == "sendto")
+		return new GuiSendTo(gv);
+	if (name == "spellchecker") {
+		GuiSpellchecker * gui = new GuiSpellchecker(gv, Qt::RightDockWidgetArea);
+#ifdef Q_OS_MAC
+		// On Mac show and floating
+		gui->setFloating(true);
+#endif
+		return gui;
+	}
+	if (name == "symbols")
+		return new GuiSymbols(gv);
+	if (name == "tabularcreate")
+		return new GuiTabularCreate(gv);
+	if (name == "texinfo")
+		return new GuiTexInfo(gv);
+	if (name == "thesaurus")
+		return new GuiThesaurus(gv);
+	if (name == "toc")
+		return new GuiToc(gv);
+	if (name == "view-source")
+		return new GuiViewSource(gv);
+	if (name == "wrap")
+		return new GuiWrap(gv);
+	if (name == "progress")
+		return new GuiProgressView(gv, Qt::BottomDockWidgetArea);
+
+	return nullptr;
+}
+
+
+} // namespace frontend
+} // namespace lyx
diff --git a/src/frontends/qt/DialogFactory.h b/src/frontends/qt/DialogFactory.h
new file mode 100644
index 0000000000..1342dc3c50
--- /dev/null
+++ b/src/frontends/qt/DialogFactory.h
@@ -0,0 +1,30 @@
+// -*- C++ -*-
+/**
+ * \file DialogFactory.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author Yuriy Skalko
+ *
+ * Full author contact details are available in file CREDITS.
+ */
+
+#ifndef DIALOG_FACTORY_H
+#define DIALOG_FACTORY_H
+
+#include <string>
+
+namespace lyx {
+namespace frontend {
+
+class Dialog;
+class GuiView;
+
+
+Dialog * createDialog(GuiView & gv, std::string const & name);
+
+
+} // namespace frontend
+} // namespace lyx
+
+#endif // DIALOG_FACTORY_H
diff --git a/src/frontends/qt/FindAndReplace.cpp b/src/frontends/qt/FindAndReplace.cpp
index fba092f6cc..ebc682bb7f 100644
--- a/src/frontends/qt/FindAndReplace.cpp
+++ b/src/frontends/qt/FindAndReplace.cpp
@@ -625,17 +625,6 @@ void FindAndReplaceWidget::updateGUI()
 }
 
 
-Dialog * createGuiSearchAdv(GuiView & lv)
-{
-	FindAndReplace * gui = new FindAndReplace(lv, Qt::RightDockWidgetArea);
-#ifdef Q_OS_MAC
-	// On Mac show and floating
-	gui->setFloating(true);
-#endif
-	return gui;
-}
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiAbout.cpp b/src/frontends/qt/GuiAbout.cpp
index a76b087d87..35dd3bff30 100644
--- a/src/frontends/qt/GuiAbout.cpp
+++ b/src/frontends/qt/GuiAbout.cpp
@@ -355,9 +355,6 @@ void GuiAbout::on_buttonBox_rejected()
 }
 
 
-Dialog * createGuiAbout(GuiView & lv) { return new GuiAbout(lv); }
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiBibtex.cpp b/src/frontends/qt/GuiBibtex.cpp
index 8c561ccf85..66cff69bda 100644
--- a/src/frontends/qt/GuiBibtex.cpp
+++ b/src/frontends/qt/GuiBibtex.cpp
@@ -642,9 +642,6 @@ void GuiBibtex::dispatchParams()
 }
 
 
-Dialog * createGuiBibtex(GuiView & lv) { return new GuiBibtex(lv); }
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiChanges.cpp b/src/frontends/qt/GuiChanges.cpp
index e6363cd6be..c1ec25681f 100644
--- a/src/frontends/qt/GuiChanges.cpp
+++ b/src/frontends/qt/GuiChanges.cpp
@@ -125,9 +125,6 @@ void GuiChanges::rejectChange()
 }
 
 
-Dialog * createGuiChanges(GuiView & lv) { return new GuiChanges(lv); }
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiCharacter.cpp b/src/frontends/qt/GuiCharacter.cpp
index b6b672c69a..dadae88c33 100644
--- a/src/frontends/qt/GuiCharacter.cpp
+++ b/src/frontends/qt/GuiCharacter.cpp
@@ -696,9 +696,6 @@ void GuiCharacter::restoreSession()
 }
 
 
-Dialog * createGuiCharacter(GuiView & lv) { return new GuiCharacter(lv); }
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiCitation.cpp b/src/frontends/qt/GuiCitation.cpp
index a263ddf2cf..1aa947eab2 100644
--- a/src/frontends/qt/GuiCitation.cpp
+++ b/src/frontends/qt/GuiCitation.cpp
@@ -1101,9 +1101,6 @@ void GuiCitation::restoreSession()
 }
 
 
-Dialog * createGuiCitation(GuiView & lv) { return new GuiCitation(lv); }
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiCompare.cpp b/src/frontends/qt/GuiCompare.cpp
index 2edc8c8cac..e48be86f22 100644
--- a/src/frontends/qt/GuiCompare.cpp
+++ b/src/frontends/qt/GuiCompare.cpp
@@ -378,8 +378,6 @@ bool GuiCompare::initialiseParams(std::string const &par)
 	return true;
 }
 
-Dialog * createGuiCompare(GuiView & lv) { return new GuiCompare(lv); }
-
 
 } // namespace frontend
 } // namespace lyx
diff --git a/src/frontends/qt/GuiCompareHistory.cpp b/src/frontends/qt/GuiCompareHistory.cpp
index 4586eabad9..fbc17b741a 100644
--- a/src/frontends/qt/GuiCompareHistory.cpp
+++ b/src/frontends/qt/GuiCompareHistory.cpp
@@ -154,9 +154,6 @@ void GuiCompareHistory::slotButtonBox(QAbstractButton * button)
 }
 
 
-Dialog * createGuiCompareHistory(GuiView & lv) { return new GuiCompareHistory(lv); }
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiDelimiter.cpp b/src/frontends/qt/GuiDelimiter.cpp
index 4e2eff7d0d..476cd20ed7 100644
--- a/src/frontends/qt/GuiDelimiter.cpp
+++ b/src/frontends/qt/GuiDelimiter.cpp
@@ -468,9 +468,6 @@ void GuiDelimiter::on_swapPB_clicked()
 }
 
 
-Dialog * createGuiDelimiter(GuiView & lv) { return new GuiDelimiter(lv); }
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiDocument.cpp b/src/frontends/qt/GuiDocument.cpp
index 4918381327..5c3d31d3f3 100644
--- a/src/frontends/qt/GuiDocument.cpp
+++ b/src/frontends/qt/GuiDocument.cpp
@@ -5207,10 +5207,6 @@ void GuiDocument::setOutputSync(bool on)
 }
 
 
-
-Dialog * createGuiDocument(GuiView & lv) { return new GuiDocument(lv); }
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiErrorList.cpp b/src/frontends/qt/GuiErrorList.cpp
index c60dbf11bf..e7dc3766f5 100644
--- a/src/frontends/qt/GuiErrorList.cpp
+++ b/src/frontends/qt/GuiErrorList.cpp
@@ -178,8 +178,6 @@ bool GuiErrorList::goTo(int item)
 }
 
 
-Dialog * createGuiErrorList(GuiView & lv) { return new GuiErrorList(lv); }
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiExternal.cpp b/src/frontends/qt/GuiExternal.cpp
index 3a4ab2c91e..55688c54e4 100644
--- a/src/frontends/qt/GuiExternal.cpp
+++ b/src/frontends/qt/GuiExternal.cpp
@@ -680,9 +680,6 @@ QString GuiExternal::browse(QString const & input,
 }
 
 
-Dialog * createGuiExternal(GuiView & lv) { return new GuiExternal(lv); }
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiGraphics.cpp b/src/frontends/qt/GuiGraphics.cpp
index 10764c19ca..7b1e348251 100644
--- a/src/frontends/qt/GuiGraphics.cpp
+++ b/src/frontends/qt/GuiGraphics.cpp
@@ -827,9 +827,6 @@ bool GuiGraphics::isFileNameValid(string const & fname) const
 }
 
 
-Dialog * createGuiGraphics(GuiView & lv) { return new GuiGraphics(lv); }
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiInclude.cpp b/src/frontends/qt/GuiInclude.cpp
index 770c2ac214..ad95b9f95d 100644
--- a/src/frontends/qt/GuiInclude.cpp
+++ b/src/frontends/qt/GuiInclude.cpp
@@ -393,9 +393,6 @@ void GuiInclude::dispatchParams()
 }
 
 
-Dialog * createGuiInclude(GuiView & lv) { return new GuiInclude(lv); }
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiIndex.cpp b/src/frontends/qt/GuiIndex.cpp
index a59ac3953f..6264d6a101 100644
--- a/src/frontends/qt/GuiIndex.cpp
+++ b/src/frontends/qt/GuiIndex.cpp
@@ -96,9 +96,6 @@ void GuiIndex::dispatchParams()
 }
 
 
-Dialog * createGuiIndex(GuiView & lv) { return new GuiIndex(lv); }
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiListings.cpp b/src/frontends/qt/GuiListings.cpp
index c957cb0b75..0b3cb24b3b 100644
--- a/src/frontends/qt/GuiListings.cpp
+++ b/src/frontends/qt/GuiListings.cpp
@@ -702,9 +702,6 @@ void GuiListings::setParams(InsetListingsParams const & params)
 }
 
 
-Dialog * createGuiListings(GuiView & lv) { return new GuiListings(lv); }
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiLog.cpp b/src/frontends/qt/GuiLog.cpp
index 16979138d8..aab671a91e 100644
--- a/src/frontends/qt/GuiLog.cpp
+++ b/src/frontends/qt/GuiLog.cpp
@@ -324,9 +324,6 @@ void GuiLog::getContents(ostream & ss) const
 }
 
 
-Dialog * createGuiLog(GuiView & lv) { return new GuiLog(lv); }
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiLyXFiles.cpp b/src/frontends/qt/GuiLyXFiles.cpp
index 9e1caf9295..f14369a5a9 100644
--- a/src/frontends/qt/GuiLyXFiles.cpp
+++ b/src/frontends/qt/GuiLyXFiles.cpp
@@ -620,8 +620,6 @@ FuncCode GuiLyXFiles::getLfun() const
 	return LFUN_NOACTION;
 }
 
-Dialog * createGuiLyXFiles(GuiView & lv) { return new GuiLyXFiles(lv); }
-
 
 } // namespace frontend
 } // namespace lyx
diff --git a/src/frontends/qt/GuiMathMatrix.cpp b/src/frontends/qt/GuiMathMatrix.cpp
index 92ba6fc09c..d339e2c976 100644
--- a/src/frontends/qt/GuiMathMatrix.cpp
+++ b/src/frontends/qt/GuiMathMatrix.cpp
@@ -181,9 +181,6 @@ void GuiMathMatrix::slotClose()
 }
 
 
-Dialog * createGuiMathMatrix(GuiView & lv) { return new GuiMathMatrix(lv); }
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiNote.cpp b/src/frontends/qt/GuiNote.cpp
index a70a809dfa..59c771d55c 100644
--- a/src/frontends/qt/GuiNote.cpp
+++ b/src/frontends/qt/GuiNote.cpp
@@ -90,9 +90,6 @@ void GuiNote::dispatchParams()
 }
 
 
-Dialog * createGuiNote(GuiView & lv) { return new GuiNote(lv); }
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiParagraph.cpp b/src/frontends/qt/GuiParagraph.cpp
index 2b78fb471b..275c3c027d 100644
--- a/src/frontends/qt/GuiParagraph.cpp
+++ b/src/frontends/qt/GuiParagraph.cpp
@@ -396,12 +396,6 @@ void GuiParagraph::restoreSession()
 }
 
 
-Dialog * createGuiParagraph(GuiView & lv)
-{
-	return new GuiParagraph(lv);
-}
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiPhantom.cpp b/src/frontends/qt/GuiPhantom.cpp
index 1aff3afd3c..62fc99036c 100644
--- a/src/frontends/qt/GuiPhantom.cpp
+++ b/src/frontends/qt/GuiPhantom.cpp
@@ -89,9 +89,6 @@ void GuiPhantom::dispatchParams()
 }
 
 
-Dialog * createGuiPhantom(GuiView & lv) { return new GuiPhantom(lv); }
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiPrefs.cpp b/src/frontends/qt/GuiPrefs.cpp
index f0ccb52308..beb424f387 100644
--- a/src/frontends/qt/GuiPrefs.cpp
+++ b/src/frontends/qt/GuiPrefs.cpp
@@ -3686,9 +3686,6 @@ QString GuiPreferences::browse(QString const & file,
 }
 
 
-Dialog * createGuiPreferences(GuiView & lv) { return new GuiPreferences(lv); }
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiPrintindex.cpp b/src/frontends/qt/GuiPrintindex.cpp
index 1244c62e49..b618287ae1 100644
--- a/src/frontends/qt/GuiPrintindex.cpp
+++ b/src/frontends/qt/GuiPrintindex.cpp
@@ -131,9 +131,6 @@ void GuiPrintindex::dispatchParams()
 }
 
 
-Dialog * createGuiPrintindex(GuiView & lv) { return new GuiPrintindex(lv); }
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiProgressView.cpp b/src/frontends/qt/GuiProgressView.cpp
index 486fdaf54e..6c5f939f4b 100644
--- a/src/frontends/qt/GuiProgressView.cpp
+++ b/src/frontends/qt/GuiProgressView.cpp
@@ -265,13 +265,6 @@ void GuiProgressView::hideEvent(QHideEvent*)
 }
 
 
-Dialog * createGuiProgressView(GuiView & guiview)
-{
-	return new GuiProgressView(guiview, Qt::BottomDockWidgetArea);
-}
-
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiRef.cpp b/src/frontends/qt/GuiRef.cpp
index 5884ac4009..f16c6565a6 100644
--- a/src/frontends/qt/GuiRef.cpp
+++ b/src/frontends/qt/GuiRef.cpp
@@ -618,10 +618,6 @@ void GuiRef::dispatchParams()
 }
 
 
-
-Dialog * createGuiRef(GuiView & lv) { return new GuiRef(lv); }
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiSearch.cpp b/src/frontends/qt/GuiSearch.cpp
index 1d209a24d0..d087beebc4 100644
--- a/src/frontends/qt/GuiSearch.cpp
+++ b/src/frontends/qt/GuiSearch.cpp
@@ -151,9 +151,6 @@ void GuiSearch::replace(docstring const & search, docstring const & replace,
 }
 
 
-Dialog * createGuiSearch(GuiView & lv) { return new GuiSearch(lv); }
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiSendto.cpp b/src/frontends/qt/GuiSendto.cpp
index b14db45304..ec40ff3dcb 100644
--- a/src/frontends/qt/GuiSendto.cpp
+++ b/src/frontends/qt/GuiSendto.cpp
@@ -152,8 +152,6 @@ void GuiSendTo::dispatchParams()
 	dispatch(FuncRequest(lfun, sdata));
 }
 
-Dialog * createGuiSendTo(GuiView & lv) { return new GuiSendTo(lv); }
-
 
 } // namespace frontend
 } // namespace lyx
diff --git a/src/frontends/qt/GuiShowFile.cpp b/src/frontends/qt/GuiShowFile.cpp
index 4126045410..526eacee43 100644
--- a/src/frontends/qt/GuiShowFile.cpp
+++ b/src/frontends/qt/GuiShowFile.cpp
@@ -64,9 +64,6 @@ void GuiShowFile::clearParams()
 }
 
 
-Dialog * createGuiShowFile(GuiView & lv) { return new GuiShowFile(lv); }
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiSpellchecker.cpp b/src/frontends/qt/GuiSpellchecker.cpp
index ec3bbf2568..7fc1155b1f 100644
--- a/src/frontends/qt/GuiSpellchecker.cpp
+++ b/src/frontends/qt/GuiSpellchecker.cpp
@@ -614,16 +614,6 @@ void GuiSpellchecker::updateView()
 }
 
 
-Dialog * createGuiSpellchecker(GuiView & lv)
-{
-	GuiSpellchecker * gui = new GuiSpellchecker(lv, Qt::RightDockWidgetArea);
-#ifdef Q_OS_MAC
-	gui->setFloating(true);
-#endif
-	return gui;
-}
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiSymbols.cpp b/src/frontends/qt/GuiSymbols.cpp
index 99d1fc0215..0e5d4ced4f 100644
--- a/src/frontends/qt/GuiSymbols.cpp
+++ b/src/frontends/qt/GuiSymbols.cpp
@@ -504,12 +504,6 @@ void GuiSymbols::dispatchParams()
 }
 
 
-Dialog * createGuiSymbols(GuiView & lv)
-{
-	return new GuiSymbols(lv);
-}
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiTabularCreate.cpp b/src/frontends/qt/GuiTabularCreate.cpp
index e0e93afad9..d9eba4871b 100644
--- a/src/frontends/qt/GuiTabularCreate.cpp
+++ b/src/frontends/qt/GuiTabularCreate.cpp
@@ -171,12 +171,6 @@ FuncCode GuiTabularCreate::getLfun() const
 }
 
 
-Dialog * createGuiTabularCreate(GuiView & lv)
-{
-	return new GuiTabularCreate(lv);
-}
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiTexinfo.cpp b/src/frontends/qt/GuiTexinfo.cpp
index d8f079f999..d2cb065d28 100644
--- a/src/frontends/qt/GuiTexinfo.cpp
+++ b/src/frontends/qt/GuiTexinfo.cpp
@@ -186,9 +186,6 @@ string GuiTexInfo::classOptions(string const & classname) const
 */
 
 
-Dialog * createGuiTexInfo(GuiView & lv) { return new GuiTexInfo(lv); }
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiThesaurus.cpp b/src/frontends/qt/GuiThesaurus.cpp
index 2e80137019..d9a6a9e28b 100644
--- a/src/frontends/qt/GuiThesaurus.cpp
+++ b/src/frontends/qt/GuiThesaurus.cpp
@@ -288,9 +288,6 @@ Thesaurus::Meanings const & GuiThesaurus::getMeanings(WordLangTuple const & wl)
 }
 
 
-Dialog * createGuiThesaurus(GuiView & lv) { return new GuiThesaurus(lv); }
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiToc.cpp b/src/frontends/qt/GuiToc.cpp
index e9ee840fd8..c10ba605ac 100644
--- a/src/frontends/qt/GuiToc.cpp
+++ b/src/frontends/qt/GuiToc.cpp
@@ -89,12 +89,6 @@ bool GuiToc::getStatus(Cursor & cur, FuncRequest const & cmd,
 }
 
 
-Dialog * createGuiToc(GuiView & lv)
-{
-	return new GuiToc(lv);
-}
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiView.cpp b/src/frontends/qt/GuiView.cpp
index 31c8f88dc7..c4a406c30e 100644
--- a/src/frontends/qt/GuiView.cpp
+++ b/src/frontends/qt/GuiView.cpp
@@ -15,6 +15,7 @@
 
 #include "GuiView.h"
 
+#include "DialogFactory.h"
 #include "DispatchResult.h"
 #include "FileDialog.h"
 #include "FontLoader.h"
@@ -4924,134 +4925,10 @@ void GuiView::updateDialogs()
 	updateLayoutList();
 }
 
-Dialog * createDialog(GuiView & lv, string const & name);
-
-// will be replaced by a proper factory...
-Dialog * createGuiAbout(GuiView & lv);
-Dialog * createGuiBibtex(GuiView & lv);
-Dialog * createGuiChanges(GuiView & lv);
-Dialog * createGuiCharacter(GuiView & lv);
-Dialog * createGuiCitation(GuiView & lv);
-Dialog * createGuiCompare(GuiView & lv);
-Dialog * createGuiCompareHistory(GuiView & lv);
-Dialog * createGuiDelimiter(GuiView & lv);
-Dialog * createGuiDocument(GuiView & lv);
-Dialog * createGuiErrorList(GuiView & lv);
-Dialog * createGuiExternal(GuiView & lv);
-Dialog * createGuiGraphics(GuiView & lv);
-Dialog * createGuiInclude(GuiView & lv);
-Dialog * createGuiIndex(GuiView & lv);
-Dialog * createGuiListings(GuiView & lv);
-Dialog * createGuiLog(GuiView & lv);
-Dialog * createGuiLyXFiles(GuiView & lv);
-Dialog * createGuiMathMatrix(GuiView & lv);
-Dialog * createGuiNote(GuiView & lv);
-Dialog * createGuiParagraph(GuiView & lv);
-Dialog * createGuiPhantom(GuiView & lv);
-Dialog * createGuiPreferences(GuiView & lv);
-Dialog * createGuiPrint(GuiView & lv);
-Dialog * createGuiPrintindex(GuiView & lv);
-Dialog * createGuiRef(GuiView & lv);
-Dialog * createGuiSearch(GuiView & lv);
-Dialog * createGuiSearchAdv(GuiView & lv);
-Dialog * createGuiSendTo(GuiView & lv);
-Dialog * createGuiShowFile(GuiView & lv);
-Dialog * createGuiSpellchecker(GuiView & lv);
-Dialog * createGuiSymbols(GuiView & lv);
-Dialog * createGuiTabularCreate(GuiView & lv);
-Dialog * createGuiTexInfo(GuiView & lv);
-Dialog * createGuiToc(GuiView & lv);
-Dialog * createGuiThesaurus(GuiView & lv);
-Dialog * createGuiViewSource(GuiView & lv);
-Dialog * createGuiWrap(GuiView & lv);
-Dialog * createGuiProgressView(GuiView & lv);
-
-
 
 Dialog * GuiView::build(string const & name)
 {
-	LASSERT(isValidName(name), return nullptr);
-
-	Dialog * dialog = createDialog(*this, name);
-	if (dialog)
-		return dialog;
-
-	if (name == "aboutlyx")
-		return createGuiAbout(*this);
-	if (name == "bibtex")
-		return createGuiBibtex(*this);
-	if (name == "changes")
-		return createGuiChanges(*this);
-	if (name == "character")
-		return createGuiCharacter(*this);
-	if (name == "citation")
-		return createGuiCitation(*this);
-	if (name == "compare")
-		return createGuiCompare(*this);
-	if (name == "comparehistory")
-		return createGuiCompareHistory(*this);
-	if (name == "document")
-		return createGuiDocument(*this);
-	if (name == "errorlist")
-		return createGuiErrorList(*this);
-	if (name == "external")
-		return createGuiExternal(*this);
-	if (name == "file")
-		return createGuiShowFile(*this);
-	if (name == "findreplace")
-		return createGuiSearch(*this);
-	if (name == "findreplaceadv")
-		return createGuiSearchAdv(*this);
-	if (name == "graphics")
-		return createGuiGraphics(*this);
-	if (name == "include")
-		return createGuiInclude(*this);
-	if (name == "index")
-		return createGuiIndex(*this);
-	if (name == "index_print")
-		return createGuiPrintindex(*this);
-	if (name == "listings")
-		return createGuiListings(*this);
-	if (name == "log")
-		return createGuiLog(*this);
-	if (name == "lyxfiles")
-		return createGuiLyXFiles(*this);
-	if (name == "mathdelimiter")
-		return createGuiDelimiter(*this);
-	if (name == "mathmatrix")
-		return createGuiMathMatrix(*this);
-	if (name == "note")
-		return createGuiNote(*this);
-	if (name == "paragraph")
-		return createGuiParagraph(*this);
-	if (name == "phantom")
-		return createGuiPhantom(*this);
-	if (name == "prefs")
-		return createGuiPreferences(*this);
-	if (name == "ref")
-		return createGuiRef(*this);
-	if (name == "sendto")
-		return createGuiSendTo(*this);
-	if (name == "spellchecker")
-		return createGuiSpellchecker(*this);
-	if (name == "symbols")
-		return createGuiSymbols(*this);
-	if (name == "tabularcreate")
-		return createGuiTabularCreate(*this);
-	if (name == "texinfo")
-		return createGuiTexInfo(*this);
-	if (name == "thesaurus")
-		return createGuiThesaurus(*this);
-	if (name == "toc")
-		return createGuiToc(*this);
-	if (name == "view-source")
-		return createGuiViewSource(*this);
-	if (name == "wrap")
-		return createGuiWrap(*this);
-	if (name == "progress")
-		return createGuiProgressView(*this);
-
-	return nullptr;
+	return createDialog(*this, name);
 }
 
 
diff --git a/src/frontends/qt/GuiViewSource.cpp b/src/frontends/qt/GuiViewSource.cpp
index 1a7a36cdd1..d26a55cccb 100644
--- a/src/frontends/qt/GuiViewSource.cpp
+++ b/src/frontends/qt/GuiViewSource.cpp
@@ -474,12 +474,6 @@ void GuiViewSource::restoreSession()
 }
 
 
-Dialog * createGuiViewSource(GuiView & lv)
-{
-	return new GuiViewSource(lv);
-}
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/GuiWrap.cpp b/src/frontends/qt/GuiWrap.cpp
index e22be0898c..0f66cf0758 100644
--- a/src/frontends/qt/GuiWrap.cpp
+++ b/src/frontends/qt/GuiWrap.cpp
@@ -206,9 +206,6 @@ void GuiWrap::dispatchParams()
 }
 
 
-Dialog * createGuiWrap(GuiView & lv) { return new GuiWrap(lv); }
-
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/InsetParamsDialog.cpp b/src/frontends/qt/InsetParamsDialog.cpp
index 3bccd2235e..ebac60b721 100644
--- a/src/frontends/qt/InsetParamsDialog.cpp
+++ b/src/frontends/qt/InsetParamsDialog.cpp
@@ -259,72 +259,6 @@ void InsetParamsDialog::updateView()
 	buttonBox->button(QDialogButtonBox::Ok)->setDefault(true);
 }
 
-
-Dialog * createDialog(GuiView & lv, InsetCode code)
-{
-	InsetParamsWidget * widget;
-	switch (code) {
-	case ERT_CODE:
-		widget = new GuiERT;
-		break;
-	case FLOAT_CODE:
-		widget = new FloatPlacement(true);
-		break;
-	case BIBITEM_CODE:
-		widget = new GuiBibitem;
-		break;
-	case BRANCH_CODE:
-		widget = new GuiBranch;
-		break;
-	case BOX_CODE:
-		widget = new GuiBox;
-		break;
-	case HYPERLINK_CODE:
-		widget = new GuiHyperlink;
-		break;
-	case COUNTER_CODE:
-		widget = new GuiCounter(lv, nullptr);
-		break;
-	case INFO_CODE:
-		widget = new GuiInfo;
-		break;
-	case LABEL_CODE:
-		widget = new GuiLabel;
-		break;
-	case LINE_CODE:
-		widget = new GuiLine;
-		break;
-	case MATH_SPACE_CODE:
-		widget = new GuiHSpace(true);
-		break;
-	case NOMENCL_CODE:
-		widget = new GuiNomenclature;
-		break;
-	case NOMENCL_PRINT_CODE:
-		widget = new GuiPrintNomencl;
-		break;
-	case SPACE_CODE:
-		widget = new GuiHSpace(false);
-		break;
-	case TABULAR_CODE:
-		widget = new GuiTabular;
-		break;
-	case VSPACE_CODE:
-		widget = new GuiVSpace;
-		break;
-	default:
-		return nullptr;
-	}
-	InsetParamsDialog * dialog = new InsetParamsDialog(lv, widget);
-	return dialog;
-}
-
-
-Dialog * createDialog(GuiView & lv, string const & name)
-{
-	return createDialog(lv, insetCode(name));
-}
-
 } // namespace frontend
 } // namespace lyx
 
diff --git a/src/frontends/qt/Makefile.am b/src/frontends/qt/Makefile.am
index e01f8ddba8..2a497af887 100644
--- a/src/frontends/qt/Makefile.am
+++ b/src/frontends/qt/Makefile.am
@@ -43,7 +43,7 @@ SOURCEFILES = \
 	ButtonPolicy.cpp \
 	ButtonPolicy.h \
 	Dialog.cpp \
-	Dialog.h \
+	DialogFactory.cpp \
 	Action.cpp \
 	BulletsModule.cpp \
 	ButtonController.cpp \
@@ -171,6 +171,8 @@ MOCHEADER = \
 	BulletsModule.h \
 	CategorizedCombo.h \
 	CustomizedWidgets.h \
+	Dialog.h \
+	DialogFactory.h \
 	DialogView.h \
 	DockView.h \
 	EmptyTable.h \
-- 
2.28.0.windows.1



More information about the lyx-devel mailing list