Browse Source

Use QUndoStack: canRedoChanged() & canUndoChanged()

Kandrashin Denis 13 years ago
parent
commit
674ebb08b0
3 changed files with 22 additions and 0 deletions
  1. 12 0
      source/fb2main.cpp
  2. 2 0
      source/fb2main.hpp
  3. 8 0
      source/fb2view.cpp

+ 12 - 0
source/fb2main.cpp

@@ -464,6 +464,16 @@ void Fb2MainWindow::selectionChanged()
     statusBar()->showMessage(textEdit->status());
 }
 
+void Fb2MainWindow::canUndoChanged(bool canUndo)
+{
+    actionUndo->setEnabled(canUndo);
+}
+
+void Fb2MainWindow::canRedoChanged(bool canRedo)
+{
+    actionRedo->setEnabled(canRedo);
+}
+
 void Fb2MainWindow::undoChanged()
 {
     actionUndo->setEnabled(textEdit->UndoEnabled());
@@ -654,6 +664,8 @@ void Fb2MainWindow::viewText()
     viewTree();
 
     connect(textEdit->page()->undoStack(), SIGNAL(cleanChanged(bool)), SLOT(cleanChanged(bool)));
+    connect(textEdit->page()->undoStack(), SIGNAL(canUndoChanged(bool)), SLOT(canUndoChanged(bool)));
+    connect(textEdit->page()->undoStack(), SIGNAL(canRedoChanged(bool)), SLOT(canRedoChanged(bool)));
     connect(textEdit->page(), SIGNAL(selectionChanged()), SLOT(selectionChanged()));
 
     connect(textEdit->pageAction(QWebPage::Undo), SIGNAL(changed()), SLOT(undoChanged()));

+ 2 - 0
source/fb2main.hpp

@@ -52,6 +52,8 @@ private slots:
     void viewTree();
 
     void cleanChanged(bool clean);
+    void canUndoChanged(bool canUndo);
+    void canRedoChanged(bool canRedo);
     void status(const QString &text);
     void clipboardDataChanged();
     void selectionChanged();

+ 8 - 0
source/fb2view.cpp

@@ -11,6 +11,7 @@
 #include <QFileDialog>
 #include <QNetworkRequest>
 #include <QToolTip>
+#include <QUndoCommand>
 #include <QUndoStack>
 #include <QWebElement>
 #include <QWebInspector>
@@ -367,9 +368,16 @@ void Fb2WebView::loadFinished()
     element.select();
 }
 
+class Fb2UndoCommand : public QUndoCommand
+{
+
+};
+
 void Fb2WebView::insertTitle()
 {
+    page()->undoStack()->beginMacro("Insert title");
     static const QString javascript = FB2::read(":/js/insert_title.js");
     page()->mainFrame()->evaluateJavaScript(javascript);
+    page()->undoStack()->endMacro();
 }