From cb9bcc3cc118dbbbe9f4569f4c9d15562cef8dbb Mon Sep 17 00:00:00 2001 From: Marek Kochanowicz Date: Wed, 12 Mar 2014 12:25:37 +0100 Subject: [PATCH] buttons are functional --- apps/opencs/view/world/dialoguesubview.cpp | 85 ++++++++++++++++------ apps/opencs/view/world/dialoguesubview.hpp | 19 ++++- apps/opencs/view/world/enumdelegate.cpp | 1 - 3 files changed, 81 insertions(+), 24 deletions(-) diff --git a/apps/opencs/view/world/dialoguesubview.cpp b/apps/opencs/view/world/dialoguesubview.cpp index e34d744d93..212031a017 100644 --- a/apps/opencs/view/world/dialoguesubview.cpp +++ b/apps/opencs/view/world/dialoguesubview.cpp @@ -255,21 +255,19 @@ CSVWorld::DialogueDelegateDispatcher::~DialogueDelegateDispatcher() =============================================================EditWidget===================================================== */ -CSVWorld::EditWidget::EditWidget(QWidget *parent, const CSMWorld::UniversalId& id, CSMDoc::Document& document, bool createAndDelete) : -mDispatcher(this, dynamic_cast(document.getData().getTableModel (id)), document.getUndoStack()), +CSVWorld::EditWidget::EditWidget(QWidget *parent, int row, CSMWorld::IdTable* table, QUndoStack& undoStack, bool createAndDelete) : +mDispatcher(this, table, undoStack), QScrollArea(parent), mWidgetMapper(NULL), mMainWidget(NULL), -mUndoStack(document.getUndoStack()), -mTable(dynamic_cast(document.getData().getTableModel(id))) +mUndoStack(undoStack), +mTable(table) { - remake (id); + remake (row); } -void CSVWorld::EditWidget::remake(const CSMWorld::UniversalId& id) +void CSVWorld::EditWidget::remake(int row) { - const QModelIndex indexToFocus(mTable->getModelIndex (id.getId(), 0)); - if (mMainWidget) { delete mMainWidget; @@ -300,7 +298,6 @@ void CSVWorld::EditWidget::remake(const CSMWorld::UniversalId& id) int unlocked = 0; int locked = 0; - const int focusedRow = indexToFocus.row(); const int columns = mTable->columnCount(); for (int i=0; iheaderData (i, Qt::Horizontal, CSMWorld::ColumnBase::Role_Display).toInt()); mDispatcher.makeDelegate(display); - QWidget *editor = mDispatcher.makeEditor(display, (mTable->index (focusedRow, i))); + QWidget *editor = mDispatcher.makeEditor(display, (mTable->index (row, i))); if (editor) { @@ -335,7 +332,7 @@ void CSVWorld::EditWidget::remake(const CSMWorld::UniversalId& id) } } - mWidgetMapper->setCurrentModelIndex (indexToFocus); + mWidgetMapper->setCurrentModelIndex(mTable->index(row, 0)); this->setMinimumWidth(300); this->setWidget(mMainWidget); @@ -349,25 +346,71 @@ void CSVWorld::EditWidget::remake(const CSMWorld::UniversalId& id) CSVWorld::DialogueSubView::DialogueSubView (const CSMWorld::UniversalId& id, CSMDoc::Document& document, bool createAndDelete) : - SubView (id) + SubView (id), + mEditWidget(0), + mMainLayout(NULL), + mUndoStack(document.getUndoStack()), + mTable(dynamic_cast(document.getData().getTableModel(id))), + mRow (-1) { + mRow = mTable->getModelIndex (id.getId(), 0).row(); QWidget *mainWidget = new QWidget(this); QHBoxLayout *buttonsLayout = new QHBoxLayout; - QPushButton* mPrevButton = new QPushButton(tr("Previous")); - QPushButton* mNextButton = new QPushButton(tr("Next")); - buttonsLayout->addWidget(mPrevButton); - buttonsLayout->addWidget(mNextButton); + QPushButton* prevButton = new QPushButton(tr("Previous"), mainWidget); + QPushButton* nextButton = new QPushButton(tr("Next"), mainWidget); + buttonsLayout->addWidget(prevButton); + buttonsLayout->addWidget(nextButton); + connect(nextButton, SIGNAL(clicked()), this, SLOT(nextId())); + connect(prevButton, SIGNAL(clicked()), this, SLOT(prevId())); - QVBoxLayout *mainLayout = new QVBoxLayout(mainWidget); + mMainLayout = new QVBoxLayout(mainWidget); + + mEditWidget = new EditWidget(mainWidget, mRow, mTable, mUndoStack, false); + mMainLayout->addLayout(buttonsLayout); + mMainLayout->addWidget(mEditWidget); + mEditWidget->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); - EditWidget* editWidget = new EditWidget(mainWidget, id, document, false); - mainLayout->addLayout(buttonsLayout); - mainLayout->addWidget(editWidget); - editWidget->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); setWidget(mainWidget); +} +void CSVWorld::DialogueSubView::prevId() +{ + if (mRow < 1) + { + return; + } + + int newRow = mRow - 1; + QModelIndex newIndex(mTable->index(newRow, 0)); + + if (!newIndex.isValid()) + { + return; + } + + mEditWidget->remake(newRow); + mRow = newRow; +} + +void CSVWorld::DialogueSubView::nextId() +{ + if (mRow == -1) + { + return; + } + + int newRow = mRow + 1; + QModelIndex newIndex(mTable->index(newRow, 0)); + + if (!newIndex.isValid()) + { + return; + } + + mEditWidget->remake(newRow); + mRow = newRow; } void CSVWorld::DialogueSubView::setEditLock (bool locked) diff --git a/apps/opencs/view/world/dialoguesubview.hpp b/apps/opencs/view/world/dialoguesubview.hpp index 40c658b9e4..0576c7aff7 100644 --- a/apps/opencs/view/world/dialoguesubview.hpp +++ b/apps/opencs/view/world/dialoguesubview.hpp @@ -14,6 +14,7 @@ class QDataWidgetMapper; class QSize; class QEvent; class QLabel; +class QVBoxLayout; namespace CSMWorld { @@ -130,18 +131,32 @@ namespace CSVWorld public: - EditWidget (QWidget *parent, const CSMWorld::UniversalId& id, CSMDoc::Document& document, bool createAndDelete = false); + EditWidget (QWidget *parent, int row, CSMWorld::IdTable* table, QUndoStack& undoStack, bool createAndDelete = false); - void remake(const CSMWorld::UniversalId& id); + void remake(int row); }; class DialogueSubView : public CSVDoc::SubView { + Q_OBJECT + + EditWidget* mEditWidget; + QVBoxLayout* mMainLayout; + CSMWorld::IdTable* mTable; + QUndoStack& mUndoStack; + int mRow; + public: DialogueSubView (const CSMWorld::UniversalId& id, CSMDoc::Document& document, bool createAndDelete = false); virtual void setEditLock (bool locked); + + private slots: + + void nextId(); + + void prevId(); }; } diff --git a/apps/opencs/view/world/enumdelegate.cpp b/apps/opencs/view/world/enumdelegate.cpp index 6c46232a89..377f479bff 100644 --- a/apps/opencs/view/world/enumdelegate.cpp +++ b/apps/opencs/view/world/enumdelegate.cpp @@ -9,7 +9,6 @@ #include #include "../../model/world/commands.hpp" -#include void CSVWorld::EnumDelegate::setModelDataImp (QWidget *editor, QAbstractItemModel *model, const QModelIndex& index) const