From d5138008d82f443d0dec5b21370bdb57cbed6f6f Mon Sep 17 00:00:00 2001 From: sfb Date: Fri, 20 Apr 2012 15:40:02 -0500 Subject: [PATCH] Changed: #1306 Added undo stack deeper (for later) and began adding form context menus proof-of-concept. --- .../georges_editor/georges_editor_form.cpp | 2 + .../georges_treeview_dialog.cpp | 53 +++++++++++++++++++ .../georges_editor/georges_treeview_dialog.h | 10 ++++ 3 files changed, 65 insertions(+) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.cpp index 3b6c629a8..0cc5b9542 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.cpp @@ -176,6 +176,7 @@ namespace Plugin if (!m_dockedWidgets.size()) { CGeorgesTreeViewDialog *dock = new CGeorgesTreeViewDialog(m_mainDock); + dock->setUndoStack(m_undoStack); m_lastActiveDock = dock; m_dockedWidgets.append(dock); @@ -197,6 +198,7 @@ namespace Plugin } } CGeorgesTreeViewDialog *dock = new CGeorgesTreeViewDialog(m_mainDock); + dock->setUndoStack(m_undoStack); m_dockedWidgets.append(dock); connect(m_dockedWidgets.last(), SIGNAL(closing()), diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.cpp index 13b0dab03..ac72cd747 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.cpp @@ -21,6 +21,7 @@ #include #include #include +#include // NeL includes #include @@ -65,6 +66,10 @@ namespace Plugin FormDelegate *formdelegate = new FormDelegate(this); m_ui.treeView->setItemDelegateForColumn(1, formdelegate); + // Set up custom context menu. + setContextMenuPolicy(Qt::CustomContextMenu); + connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showContextMenu(const QPoint&))); + connect(m_ui.treeView, SIGNAL(doubleClicked (QModelIndex)), this, SLOT(doubleClicked (QModelIndex))); connect(m_ui.checkBoxParent, SIGNAL(toggled(bool)), @@ -385,4 +390,52 @@ namespace Plugin } } + void CGeorgesTreeViewDialog::showContextMenu(const QPoint &pos) + { + QMenu contextMenu; + QPoint globalPos = this->mapToGlobal(pos); + + // Fisrt we're going to see if we've right clicked on a new item and select it. + QModelIndex &index = this->m_ui.treeView->currentIndex(); + + if(!index.isValid()) + return; + + CGeorgesFormProxyModel * mp = dynamic_cast(m_ui.treeView->model()); + CGeorgesFormModel *m = dynamic_cast(mp->sourceModel()); + QModelIndex sourceIndex = mp->mapToSource(index); + + if (m) + { + + CFormItem *item = m->getItem(sourceIndex); + + if ((item->parent() && item->parent()->data(0) == "parents") || item->data(0) == "parents") + contextMenu.addAction("Add parent..."); + else if(item->getFormElm()->isArray()) + contextMenu.addAction("Add array entry..."); + else if(item->getFormElm()->isStruct()) + contextMenu.addAction("Add element..."); + else if(item->getFormElm()->isAtom() && item->valueFrom() == NLGEORGES::UFormElm::ValueForm) + contextMenu.addAction("Revert to parent/default..."); + else if(item->getFormElm()->isAtom() && item->valueFrom() == NLGEORGES::UFormElm::ValueParentForm) + contextMenu.addAction("Override parent/default value..."); + else + contextMenu.addAction("Add element..."); + + QAction *selectedItem = contextMenu.exec(globalPos); + if(selectedItem) + { + if(selectedItem->text() == "Add parent...") + { + QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Select parent sheets...")); + if(!fileNames.isEmpty()) + { + // add some parents. + } + } + } + } + } + } /* namespace NLQT */ diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.h index 4992c9b23..8c2db3d47 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.h @@ -22,6 +22,9 @@ // Qt includes #include +#include +#include + // STL includes @@ -60,6 +63,10 @@ namespace Plugin QTabWidget* tabWidget() { return m_ui.treeViewTabWidget; } + void setUndoStack(QUndoStack *stack) { + m_undoStack = stack; + } + QString loadedForm; protected: @@ -75,6 +82,7 @@ namespace Plugin void loadFormIntoDialog(CForm *form = 0); void modifiedFile( ); void checkVisibility(bool); + void showContextMenu(const QPoint &pos); private Q_SLOTS: void doubleClicked ( const QModelIndex & index ); @@ -87,6 +95,8 @@ namespace Plugin UForm *m_form; CGeorges *m_georges; + QUndoStack *m_undoStack; + bool m_modified; }; /* CGeorgesTreeViewDialog */