#include "treeeditor.h"
#include <QAction>
#include <QContextMenuEvent>
#include <QHeaderView>
#include <QMenu>
#include <QRegularExpression>
#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 // FIXME-3 PageUp/Down not working in TreeEditor
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);
}