From 65923bfdbf38c428ff4d52a16b0f5839af8017a7 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 23 Oct 2021 15:15:09 +0200 Subject: [PATCH] Gui: add virtual methods undoActions()/redoActions() to MDIView to simplify code in UndoDialog/RedoDialog --- src/Gui/DlgUndoRedo.cpp | 46 ++++---------------------------- src/Gui/MDIView.cpp | 28 +++++++++++++++++++ src/Gui/MDIView.h | 6 +++++ src/Gui/TextDocumentEditorView.h | 4 +-- 4 files changed, 41 insertions(+), 43 deletions(-) diff --git a/src/Gui/DlgUndoRedo.cpp b/src/Gui/DlgUndoRedo.cpp index 2d183dcb60..536e647c31 100644 --- a/src/Gui/DlgUndoRedo.cpp +++ b/src/Gui/DlgUndoRedo.cpp @@ -29,9 +29,7 @@ #include "DlgUndoRedo.h" #include "Application.h" #include "MainWindow.h" -#include "Document.h" -#include "EditorView.h" -#include "TextDocumentEditorView.h" +#include "MDIView.h" using namespace Gui::Dialog; @@ -64,28 +62,11 @@ void UndoDialog::onFetchInfo() clear(); // Remove first all items MDIView* mdi = getMainWindow()->activeWindow(); - EditorView* editview = qobject_cast(mdi); - TextDocumentEditorView* textedit = qobject_cast(mdi); - if (editview) { - QStringList vecUndos = editview->undoActions(); + if (mdi) { + QStringList vecUndos = mdi->undoActions(); for (QStringList::Iterator i = vecUndos.begin(); i != vecUndos.end(); ++i) addAction(*i, this, SLOT(onSelected())); } - else if (textedit) { - QStringList vecUndos = textedit->undoActions(); - for (QStringList::Iterator i = vecUndos.begin(); i != vecUndos.end(); ++i) - addAction(*i, this, SLOT(onSelected())); - } - else if (mdi) { - Gui::Document* pcDoc = mdi->getGuiDocument(); - if (pcDoc) { - std::vector vecUndos = pcDoc->getUndoVector(); - for (std::vector::iterator i = vecUndos.begin(); i != vecUndos.end(); ++i) { - QString text = QCoreApplication::translate("Command", i->c_str()); - addAction(text, this, SLOT(onSelected())); - } - } - } } /** Closes the dialog and sends the message 'Undo' to the currently active MDI view. */ @@ -129,28 +110,11 @@ void RedoDialog::onFetchInfo() clear(); // Remove first all items MDIView* mdi = getMainWindow()->activeWindow(); - EditorView* editview = qobject_cast(mdi); - TextDocumentEditorView* textedit = qobject_cast(mdi); - if (editview) { - QStringList vecRedos = editview->redoActions(); + if (mdi) { + QStringList vecRedos = mdi->redoActions(); for (QStringList::Iterator i = vecRedos.begin(); i != vecRedos.end(); ++i) addAction(*i, this, SLOT(onSelected())); } - else if (textedit) { - QStringList vecRedos = textedit->redoActions(); - for (QStringList::Iterator i = vecRedos.begin(); i != vecRedos.end(); ++i) - addAction(*i, this, SLOT(onSelected())); - } - else if (mdi) { - Gui::Document* pcDoc = mdi->getGuiDocument(); - if (pcDoc) { - std::vector vecRedos = pcDoc->getRedoVector(); - for (std::vector::iterator i = vecRedos.begin(); i != vecRedos.end(); ++i) { - QString text = QCoreApplication::translate("Command", i->c_str()); - addAction(text, this, SLOT(onSelected())); - } - } - } } /** Closes the dialog and sends the message 'Redo' to the currently active MDI view. */ diff --git a/src/Gui/MDIView.cpp b/src/Gui/MDIView.cpp index c95b2dbe8f..22d2a7658f 100644 --- a/src/Gui/MDIView.cpp +++ b/src/Gui/MDIView.cpp @@ -241,6 +241,34 @@ void MDIView::printPreview() std::cerr << "Printing preview not implemented for " << this->metaObject()->className() << std::endl; } +QStringList MDIView::undoActions() const +{ + QStringList actions; + Gui::Document* doc = getGuiDocument(); + if (doc) { + std::vector vecUndos = doc->getUndoVector(); + for (std::vector::iterator i = vecUndos.begin(); i != vecUndos.end(); ++i) { + actions << QCoreApplication::translate("Command", i->c_str()); + } + } + + return actions; +} + +QStringList MDIView::redoActions() const +{ + QStringList actions; + Gui::Document* doc = getGuiDocument(); + if (doc) { + std::vector vecRedos = doc->getRedoVector(); + for (std::vector::iterator i = vecRedos.begin(); i != vecRedos.end(); ++i) { + actions << QCoreApplication::translate("Command", i->c_str()); + } + } + + return actions; +} + QSize MDIView::minimumSizeHint () const { return QSize(400, 300); diff --git a/src/Gui/MDIView.h b/src/Gui/MDIView.h index 0aadbb4ead..5a0e97431a 100644 --- a/src/Gui/MDIView.h +++ b/src/Gui/MDIView.h @@ -95,6 +95,12 @@ public: virtual void printPreview(); //@} + /** @name Undo/Redo actions */ + //@{ + virtual QStringList undoActions() const; + virtual QStringList redoActions() const; + //@} + QSize minimumSizeHint () const; /// MDI view mode enum diff --git a/src/Gui/TextDocumentEditorView.h b/src/Gui/TextDocumentEditorView.h index f53f03f7eb..193b70ec84 100644 --- a/src/Gui/TextDocumentEditorView.h +++ b/src/Gui/TextDocumentEditorView.h @@ -53,8 +53,8 @@ public: QPlainTextEdit* getEditor() const { return editor; } App::TextDocument* getTextObject() const { return textDocument; } - QStringList undoActions() const; - QStringList redoActions() const; + QStringList undoActions() const override; + QStringList redoActions() const override; protected: void showEvent(QShowEvent*) override;