Selaa lähdekoodia

New class: Fb2TreeWidget

Kandrashin Denis 13 vuotta sitten
vanhempi
commit
ef7747099b
4 muutettua tiedostoa jossa 94 lisäystä ja 15 poistoa
  1. 4 10
      source/fb2main.cpp
  2. 0 1
      source/fb2main.hpp
  3. 74 3
      source/fb2tree.cpp
  4. 16 1
      source/fb2tree.hpp

+ 4 - 10
source/fb2main.cpp

@@ -48,7 +48,6 @@ void Fb2MainWindow::init()
     textEdit = NULL;
     noteEdit = NULL;
     codeEdit = NULL;
-    treeView = NULL;
     headTree = NULL;
     toolEdit = NULL;
     dockTree = NULL;
@@ -86,7 +85,6 @@ void Fb2MainWindow::logDestroyed()
 
 void Fb2MainWindow::treeDestroyed()
 {
-    treeView = NULL;
     dockTree = NULL;
 }
 
@@ -443,15 +441,13 @@ void Fb2MainWindow::openSettings()
 
 void Fb2MainWindow::createTree()
 {
-    if (treeView) return;
-    treeView = new Fb2TreeView(*textEdit, this);
-    connect(treeView, SIGNAL(destroyed()), SLOT(treeDestroyed()));
+    if (!textEdit) return;
     dockTree = new QDockWidget(tr("Contents"), this);
     dockTree->setAttribute(Qt::WA_DeleteOnClose);
     dockTree->setFeatures(QDockWidget::AllDockWidgetFeatures);
-    dockTree->setWidget(treeView);
+    dockTree->setWidget(new Fb2TreeWidget(*textEdit, this));
+    connect(dockTree, SIGNAL(destroyed()), SLOT(treeDestroyed()));
     addDockWidget(Qt::LeftDockWidgetArea, dockTree);
-    treeView->setFocus();
 }
 
 void Fb2MainWindow::selectionChanged()
@@ -767,9 +763,7 @@ void Fb2MainWindow::viewHead()
 
 void Fb2MainWindow::viewTree()
 {
-    if (centralWidget() != textEdit) return;
-    if (treeView == NULL) createTree();
-    treeView->updateTree();
+    if (dockTree) dockTree->deleteLater(); else createTree();
 }
 
 void Fb2MainWindow::clipboardDataChanged()

+ 0 - 1
source/fb2main.hpp

@@ -81,7 +81,6 @@ private:
     QTextEdit *messageEdit;
     QDockWidget *dockTree;
     Fb2CodeEdit *codeEdit;
-    Fb2TreeView *treeView;
     QString curFile;
     bool isUntitled;
 

+ 74 - 3
source/fb2tree.cpp

@@ -1,6 +1,8 @@
 #include "fb2tree.hpp"
 
 #include <QtDebug>
+#include <QAction>
+#include <QVBoxLayout>
 #include <QWebFrame>
 #include <QWebPage>
 #include <QTreeView>
@@ -232,8 +234,8 @@ Fb2TreeView::Fb2TreeView(Fb2WebView &view, QWidget *parent)
     , m_view(view)
 {
     setHeaderHidden(true);
-    connect(&m_view, SIGNAL(loadFinished(bool)), SLOT(updateTree()));
     connect(this, SIGNAL(activated(QModelIndex)), SLOT(activated(QModelIndex)));
+    connect(m_view.page(), SIGNAL(loadFinished(bool)), SLOT(updateTree()));
     connect(m_view.page(), SIGNAL(contentsChanged()), SLOT(contentsChanged()));
     connect(m_view.page(), SIGNAL(selectionChanged()), SLOT(selectionChanged()));
 
@@ -244,6 +246,8 @@ Fb2TreeView::Fb2TreeView(Fb2WebView &view, QWidget *parent)
     m_timerUpdate.setInterval(1000);
     m_timerUpdate.setSingleShot(true);
     connect(&m_timerUpdate, SIGNAL(timeout()), SLOT(updateTree()));
+
+    QMetaObject::invokeMethod(this, "updateTree", Qt::QueuedConnection);
 }
 
 void Fb2TreeView::selectionChanged()
@@ -289,11 +293,78 @@ void Fb2TreeView::updateTree()
     selectTree();
 }
 
+void Fb2TreeView::insertNode()
+{
+}
+
+void Fb2TreeView::deleteNode()
+{
+}
+
+void Fb2TreeView::moveUp()
+{
+}
+
+void Fb2TreeView::moveDown()
+{
+}
+
+void Fb2TreeView::moveLeft()
+{
+}
+
+void Fb2TreeView::moveRight()
+{
+}
+
 //---------------------------------------------------------------------------
 //  Fb2TreeWidget
 //---------------------------------------------------------------------------
 
-Fb2TreeWidget::Fb2TreeWidget(QWidget* parent = 0, Qt::WindowFlags f = 0)
-    : QWidget(parent, f)
+Fb2TreeWidget::Fb2TreeWidget(Fb2WebView &view, QWidget* parent)
+    : QWidget(parent)
 {
+    QAction * act;
+
+    QVBoxLayout * layout = new QVBoxLayout(this);
+    layout->setSpacing(0);
+    layout->setContentsMargins(0, 0, 0, 0);
+    layout->setObjectName(QString::fromUtf8("verticalLayout"));
+
+    m_tree = new Fb2TreeView(view, this);
+    m_tree->setContextMenuPolicy(Qt::ActionsContextMenu);
+    layout->addWidget(m_tree);
+
+    m_tool = new QToolBar(this);
+    layout->addWidget(m_tool);
+
+    act = new QAction(FB2::icon("list-add"), tr("&Insert"), this);
+    connect(act, SIGNAL(triggered()), m_tree, SLOT(insertNode()));
+    m_tool->addAction(act);
+
+    act = new QAction(FB2::icon("list-remove"), tr("&Delete"), this);
+    connect(act, SIGNAL(triggered()), m_tree, SLOT(deleteNode()));
+    m_tool->addAction(act);
+
+    m_tool->addSeparator();
+
+    act = new QAction(FB2::icon("go-up"), tr("&Up"), this);
+    connect(act, SIGNAL(triggered()), m_tree, SLOT(moveUp()));
+    m_tree->actions().append(act);
+    m_tool->addAction(act);
+
+    act = new QAction(FB2::icon("go-down"), tr("&Down"), this);
+    connect(act, SIGNAL(triggered()), m_tree, SLOT(moveDown()));
+    m_tree->actions().append(act);
+    m_tool->addAction(act);
+
+    act = new QAction(FB2::icon("go-previous"), tr("&Left"), this);
+    connect(act, SIGNAL(triggered()), m_tree, SLOT(moveLeft()));
+    m_tree->actions().append(act);
+    m_tool->addAction(act);
+
+    act = new QAction(FB2::icon("go-next"), tr("&Right"), this);
+    connect(act, SIGNAL(triggered()), m_tree, SLOT(moveRight()));
+    m_tree->actions().append(act);
+    m_tool->addAction(act);
 }

+ 16 - 1
source/fb2tree.hpp

@@ -4,6 +4,7 @@
 #include <QAbstractItemModel>
 #include <QTreeView>
 #include <QTimer>
+#include <QToolBar>
 #include <QWebElement>
 
 class Fb2WebView;
@@ -108,6 +109,14 @@ private slots:
     void selectionChanged();
     void selectTree();
 
+    void insertNode();
+    void deleteNode();
+
+    void moveUp();
+    void moveDown();
+    void moveLeft();
+    void moveRight();
+
 private:
     Fb2WebView & m_view;
     QTimer m_timerSelect;
@@ -116,8 +125,14 @@ private:
 
 class Fb2TreeWidget : public QWidget
 {
+    Q_OBJECT
+
 public:
-    explicit Fb2TreeWidget(QWidget* parent = 0, Qt::WindowFlags f = 0);
+    explicit Fb2TreeWidget(Fb2WebView &view, QWidget* parent = 0);
+
+protected:
+    QToolBar * m_tool;
+    Fb2TreeView * m_tree;
 };
 
 #endif // FB2TREE_H