]> git.sven.stormbind.net Git - sven/vym.git/blobdiff - src/treeeditor.cpp
New upstream version 2.9.22
[sven/vym.git] / src / treeeditor.cpp
diff --git a/src/treeeditor.cpp b/src/treeeditor.cpp
new file mode 100644 (file)
index 0000000..155848e
--- /dev/null
@@ -0,0 +1,125 @@
+#include "treeeditor.h"
+
+#include <QAction>
+#include <QMenu>
+#include <QRegExp>
+
+#include "mainwindow.h"
+#include "vymmodel.h"
+
+extern Main *mainWindow;
+extern QString editorFocusStyle;
+
+extern QMenu *branchContextMenu;
+extern QMenu *canvasContextMenu;
+extern QMenu *floatimageContextMenu;
+
+///////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////
+TreeEditor::TreeEditor(VymModel *m)
+{
+    model = m;
+    if (model)
+        setModel(model);
+    init();
+}
+
+void TreeEditor::init()
+{
+    setSelectionMode(QAbstractItemView::ExtendedSelection);
+    header()->hide();
+
+    QAction *a;
+    // Shortcuts for navigating with cursor:
+    a = new QAction(tr("Select upper object", "Tree Editor"), this);
+    a->setShortcut(Qt::Key_Up);
+    a->setShortcutContext(Qt::WidgetShortcut);
+    addAction(a);
+    connect(a, SIGNAL(triggered()), this, SLOT(cursorUp()));
+
+    a = new QAction(tr("Select lower object", "Tree Editor"), this);
+    a->setShortcut(Qt::Key_Down);
+    a->setShortcutContext(Qt::WidgetShortcut);
+    addAction(a);
+    connect(a, SIGNAL(triggered()), this, SLOT(cursorDown()));
+
+    a = new QAction(this);
+    a->setShortcut(Qt::Key_PageUp);
+    a->setShortcutContext(Qt::WidgetShortcut);
+    addAction(a);
+    connect(a, SIGNAL(triggered()), mainWindow, SLOT(editMoveUp()));
+
+    a = new QAction(this);
+    a->setShortcut(Qt::Key_PageDown);
+    a->setShortcutContext(Qt::WidgetShortcut);
+    addAction(a);
+    connect(a, SIGNAL(triggered()), mainWindow, SLOT(editMoveDown()));
+
+    a = new QAction(this);
+    a->setShortcut(Qt::Key_Return);
+    a->setShortcutContext(Qt::WidgetShortcut);
+    addAction(a);
+    connect(a, SIGNAL(triggered()), this, SLOT(startEdit()));
+
+    // Clone actions defined in MainWindow
+    foreach (QAction *qa, mainWindow->mapEditorActions) {
+        a = new QAction(this);
+        a->setShortcut(qa->shortcut());
+        a->setShortcutContext(qa->shortcutContext());
+        connect(a, SIGNAL(triggered()), qa, SLOT(trigger()));
+        addAction(a);
+    }
+
+    setStyleSheet("QTreeView:focus {" + editorFocusStyle + "}");
+}
+
+TreeEditor::~TreeEditor()
+{
+    // qDebug()<<"Destructor TreeEditor for "<<model->getMapName();
+}
+
+QModelIndex TreeEditor::getSelectedIndex()
+{
+    QModelIndexList list = selectionModel()->selectedIndexes();
+    if (list.isEmpty())
+        return QModelIndex();
+    else
+        return list.first();
+}
+
+void TreeEditor::contextMenuEvent(QContextMenuEvent *e) {
+    if (model->getSelectedBranch())
+        branchContextMenu->popup(e->globalPos());
+    else if (model->getSelectedImage())
+        floatimageContextMenu->popup(e->globalPos());
+    else if (model->getSelectedXLink())
+        model->editXLink();
+    else
+        canvasContextMenu->exec(e->globalPos());
+
+    e->accept();
+}
+
+void TreeEditor::cursorUp()
+{
+    QModelIndex ix = getSelectedIndex();
+    ix = indexAbove(ix);
+    if (ix.isValid())
+        model->select(ix);
+}
+
+void TreeEditor::cursorDown()
+{
+    QModelIndex ix = getSelectedIndex();
+    ix = indexBelow(ix);
+    if (ix.isValid())
+        model->select(ix);
+}
+
+void TreeEditor::startEdit()
+{
+
+    QModelIndex ix = getSelectedIndex();
+    if (ix.isValid())
+        edit(ix);
+}