mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-04-01 16:06:43 +00:00
factored out table widget from globals sub view
This commit is contained in:
parent
fd55c0cae2
commit
8dd76b49af
7 changed files with 147 additions and 125 deletions
|
@ -9,7 +9,7 @@ set (OPENCS_SRC
|
||||||
|
|
||||||
view/doc/viewmanager.cpp view/doc/view.cpp view/doc/operations.cpp view/doc/operation.cpp
|
view/doc/viewmanager.cpp view/doc/view.cpp view/doc/operations.cpp view/doc/operation.cpp
|
||||||
|
|
||||||
view/world/subview.cpp view/world/globals.cpp
|
view/world/subview.cpp view/world/table.cpp view/world/globals.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
set (OPENCS_HDR
|
set (OPENCS_HDR
|
||||||
|
@ -23,7 +23,7 @@ set (OPENCS_HDR
|
||||||
view/doc/viewmanager.hpp view/doc/view.hpp view/doc/operations.hpp view/doc/operation.hpp
|
view/doc/viewmanager.hpp view/doc/view.hpp view/doc/operations.hpp view/doc/operation.hpp
|
||||||
model/world/commands.hpp
|
model/world/commands.hpp
|
||||||
|
|
||||||
view/world/subview.hpp view/world/globals.hpp
|
view/world/subview.hpp view/world/table.hpp view/world/globals.hpp
|
||||||
)
|
)
|
||||||
|
|
||||||
set (OPENCS_US
|
set (OPENCS_US
|
||||||
|
|
|
@ -46,12 +46,6 @@ void CSVDoc::View::setupEditMenu()
|
||||||
mRedo= mDocument->getUndoStack().createRedoAction (this, tr("&Redo"));
|
mRedo= mDocument->getUndoStack().createRedoAction (this, tr("&Redo"));
|
||||||
mRedo->setShortcuts (QKeySequence::Redo);
|
mRedo->setShortcuts (QKeySequence::Redo);
|
||||||
edit->addAction (mRedo);
|
edit->addAction (mRedo);
|
||||||
|
|
||||||
// test
|
|
||||||
QAction *test = new QAction (tr ("&Test Command"), this);
|
|
||||||
connect (test, SIGNAL (triggered()), this, SLOT (test()));
|
|
||||||
edit->addAction (test);
|
|
||||||
mEditingActions.push_back (test);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSVDoc::View::setupViewMenu()
|
void CSVDoc::View::setupViewMenu()
|
||||||
|
@ -203,11 +197,6 @@ void CSVDoc::View::newView()
|
||||||
mViewManager.addView (mDocument);
|
mViewManager.addView (mDocument);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSVDoc::View::test()
|
|
||||||
{
|
|
||||||
mDocument->getUndoStack().push (new QUndoCommand());
|
|
||||||
}
|
|
||||||
|
|
||||||
void CSVDoc::View::save()
|
void CSVDoc::View::save()
|
||||||
{
|
{
|
||||||
mDocument->save();
|
mDocument->save();
|
||||||
|
|
|
@ -93,8 +93,6 @@ namespace CSVDoc
|
||||||
|
|
||||||
void newView();
|
void newView();
|
||||||
|
|
||||||
void test();
|
|
||||||
|
|
||||||
void save();
|
void save();
|
||||||
|
|
||||||
void verify();
|
void verify();
|
||||||
|
|
|
@ -1,83 +1,12 @@
|
||||||
|
|
||||||
#include "globals.hpp"
|
#include "globals.hpp"
|
||||||
|
|
||||||
#include <QTableView>
|
#include "table.hpp"
|
||||||
#include <QHeaderView>
|
|
||||||
#include <QSortFilterProxyModel>
|
|
||||||
#include <QUndoStack>
|
|
||||||
|
|
||||||
#include "../../model/world/data.hpp"
|
|
||||||
|
|
||||||
#include "../../model/world/commands.hpp"
|
|
||||||
|
|
||||||
CSVWorld::NastyTableModelHack::NastyTableModelHack (QAbstractItemModel& model)
|
|
||||||
: mModel (model)
|
|
||||||
{}
|
|
||||||
|
|
||||||
int CSVWorld::NastyTableModelHack::rowCount (const QModelIndex & parent) const
|
|
||||||
{
|
|
||||||
return mModel.rowCount (parent);
|
|
||||||
}
|
|
||||||
|
|
||||||
int CSVWorld::NastyTableModelHack::columnCount (const QModelIndex & parent) const
|
|
||||||
{
|
|
||||||
return mModel.columnCount (parent);
|
|
||||||
}
|
|
||||||
|
|
||||||
QVariant CSVWorld::NastyTableModelHack::data (const QModelIndex & index, int role) const
|
|
||||||
{
|
|
||||||
return mModel.data (index, role);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CSVWorld::NastyTableModelHack::setData ( const QModelIndex &index, const QVariant &value, int role)
|
|
||||||
{
|
|
||||||
mData = value;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
QVariant CSVWorld::NastyTableModelHack::getData() const
|
|
||||||
{
|
|
||||||
return mData;
|
|
||||||
}
|
|
||||||
|
|
||||||
CSVWorld::CommandDelegate::CommandDelegate (QUndoStack& undoStack, QObject *parent)
|
|
||||||
: QStyledItemDelegate (parent), mUndoStack (undoStack)
|
|
||||||
{}
|
|
||||||
|
|
||||||
void CSVWorld::CommandDelegate::setModelData (QWidget *editor, QAbstractItemModel *model,
|
|
||||||
const QModelIndex& index) const
|
|
||||||
{
|
|
||||||
NastyTableModelHack hack (*model);
|
|
||||||
QStyledItemDelegate::setModelData (editor, &hack, index);
|
|
||||||
mUndoStack.push (new CSMWorld::ModifyCommand (*model, index, hack.getData()));
|
|
||||||
}
|
|
||||||
|
|
||||||
CSVWorld::Globals::Globals (const CSMWorld::UniversalId& id, CSMWorld::Data& data, QUndoStack& undoStack)
|
CSVWorld::Globals::Globals (const CSMWorld::UniversalId& id, CSMWorld::Data& data, QUndoStack& undoStack)
|
||||||
: SubView (id)
|
: SubView (id)
|
||||||
{
|
{
|
||||||
QTableView *table = new QTableView();
|
QTableView *table = new Table (id, data, undoStack);
|
||||||
|
|
||||||
setWidget (table);
|
setWidget (table);
|
||||||
|
|
||||||
QAbstractTableModel *model = data.getTableModel (id);
|
|
||||||
|
|
||||||
int columns = model->columnCount();
|
|
||||||
|
|
||||||
for (int i=0; i<columns; ++i)
|
|
||||||
{
|
|
||||||
CommandDelegate *delegate = new CommandDelegate (undoStack, table);
|
|
||||||
table->setItemDelegateForColumn (i, delegate);
|
|
||||||
}
|
|
||||||
|
|
||||||
QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel (this);
|
|
||||||
proxyModel->setSourceModel (model);
|
|
||||||
|
|
||||||
table->setModel (proxyModel);
|
|
||||||
table->horizontalHeader()->setResizeMode (QHeaderView::Interactive);
|
|
||||||
table->verticalHeader()->hide();
|
|
||||||
table->setSortingEnabled (true);
|
|
||||||
table->setSelectionBehavior (QAbstractItemView::SelectRows);
|
|
||||||
table->setSelectionMode (QAbstractItemView::ExtendedSelection);
|
|
||||||
|
|
||||||
/// \todo make initial layout fill the whole width of the table
|
|
||||||
}
|
}
|
|
@ -3,47 +3,10 @@
|
||||||
|
|
||||||
#include "subview.hpp"
|
#include "subview.hpp"
|
||||||
|
|
||||||
#include <QStyledItemDelegate>
|
|
||||||
|
|
||||||
class QUndoStack;
|
class QUndoStack;
|
||||||
|
|
||||||
namespace CSVWorld
|
namespace CSVWorld
|
||||||
{
|
{
|
||||||
///< \brief Getting the data out of an editor widget
|
|
||||||
///
|
|
||||||
/// Really, Qt? Really?
|
|
||||||
class NastyTableModelHack : public QAbstractTableModel
|
|
||||||
{
|
|
||||||
QAbstractItemModel& mModel;
|
|
||||||
QVariant mData;
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
NastyTableModelHack (QAbstractItemModel& model);
|
|
||||||
|
|
||||||
int rowCount (const QModelIndex & parent = QModelIndex()) const;
|
|
||||||
|
|
||||||
int columnCount (const QModelIndex & parent = QModelIndex()) const;
|
|
||||||
|
|
||||||
QVariant data (const QModelIndex & index, int role = Qt::DisplayRole) const;
|
|
||||||
|
|
||||||
bool setData (const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
|
|
||||||
|
|
||||||
QVariant getData() const;
|
|
||||||
};
|
|
||||||
|
|
||||||
///< \brief Use commands instead of manipulating the model directly
|
|
||||||
class CommandDelegate : public QStyledItemDelegate
|
|
||||||
{
|
|
||||||
QUndoStack& mUndoStack;
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
CommandDelegate (QUndoStack& undoStack, QObject *parent);
|
|
||||||
|
|
||||||
void setModelData (QWidget *editor, QAbstractItemModel *model, const QModelIndex& index) const;
|
|
||||||
};
|
|
||||||
|
|
||||||
class Globals : public SubView
|
class Globals : public SubView
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
118
apps/opencs/view/world/table.cpp
Normal file
118
apps/opencs/view/world/table.cpp
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
|
||||||
|
#include "table.hpp"
|
||||||
|
|
||||||
|
#include <QStyledItemDelegate>
|
||||||
|
#include <QHeaderView>
|
||||||
|
#include <QSortFilterProxyModel>
|
||||||
|
#include <QUndoStack>
|
||||||
|
|
||||||
|
#include "../../model/world/data.hpp"
|
||||||
|
|
||||||
|
#include "../../model/world/commands.hpp"
|
||||||
|
|
||||||
|
namespace CSVWorld
|
||||||
|
{
|
||||||
|
///< \brief Getting the data out of an editor widget
|
||||||
|
///
|
||||||
|
/// Really, Qt? Really?
|
||||||
|
class NastyTableModelHack : public QAbstractTableModel
|
||||||
|
{
|
||||||
|
QAbstractItemModel& mModel;
|
||||||
|
QVariant mData;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
NastyTableModelHack (QAbstractItemModel& model);
|
||||||
|
|
||||||
|
int rowCount (const QModelIndex & parent = QModelIndex()) const;
|
||||||
|
|
||||||
|
int columnCount (const QModelIndex & parent = QModelIndex()) const;
|
||||||
|
|
||||||
|
QVariant data (const QModelIndex & index, int role = Qt::DisplayRole) const;
|
||||||
|
|
||||||
|
bool setData (const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
|
||||||
|
|
||||||
|
QVariant getData() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
///< \brief Use commands instead of manipulating the model directly
|
||||||
|
class CommandDelegate : public QStyledItemDelegate
|
||||||
|
{
|
||||||
|
QUndoStack& mUndoStack;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
CommandDelegate (QUndoStack& undoStack, QObject *parent);
|
||||||
|
|
||||||
|
void setModelData (QWidget *editor, QAbstractItemModel *model, const QModelIndex& index) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
CSVWorld::NastyTableModelHack::NastyTableModelHack (QAbstractItemModel& model)
|
||||||
|
: mModel (model)
|
||||||
|
{}
|
||||||
|
|
||||||
|
int CSVWorld::NastyTableModelHack::rowCount (const QModelIndex & parent) const
|
||||||
|
{
|
||||||
|
return mModel.rowCount (parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
int CSVWorld::NastyTableModelHack::columnCount (const QModelIndex & parent) const
|
||||||
|
{
|
||||||
|
return mModel.columnCount (parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant CSVWorld::NastyTableModelHack::data (const QModelIndex & index, int role) const
|
||||||
|
{
|
||||||
|
return mModel.data (index, role);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CSVWorld::NastyTableModelHack::setData ( const QModelIndex &index, const QVariant &value, int role)
|
||||||
|
{
|
||||||
|
mData = value;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant CSVWorld::NastyTableModelHack::getData() const
|
||||||
|
{
|
||||||
|
return mData;
|
||||||
|
}
|
||||||
|
|
||||||
|
CSVWorld::CommandDelegate::CommandDelegate (QUndoStack& undoStack, QObject *parent)
|
||||||
|
: QStyledItemDelegate (parent), mUndoStack (undoStack)
|
||||||
|
{}
|
||||||
|
|
||||||
|
void CSVWorld::CommandDelegate::setModelData (QWidget *editor, QAbstractItemModel *model,
|
||||||
|
const QModelIndex& index) const
|
||||||
|
{
|
||||||
|
NastyTableModelHack hack (*model);
|
||||||
|
QStyledItemDelegate::setModelData (editor, &hack, index);
|
||||||
|
mUndoStack.push (new CSMWorld::ModifyCommand (*model, index, hack.getData()));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CSVWorld::Table::Table (const CSMWorld::UniversalId& id, CSMWorld::Data& data, QUndoStack& undoStack)
|
||||||
|
{
|
||||||
|
QAbstractTableModel *model = data.getTableModel (id);
|
||||||
|
|
||||||
|
int columns = model->columnCount();
|
||||||
|
|
||||||
|
for (int i=0; i<columns; ++i)
|
||||||
|
{
|
||||||
|
CommandDelegate *delegate = new CommandDelegate (undoStack, this);
|
||||||
|
setItemDelegateForColumn (i, delegate);
|
||||||
|
}
|
||||||
|
|
||||||
|
QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel (this);
|
||||||
|
proxyModel->setSourceModel (model);
|
||||||
|
|
||||||
|
setModel (proxyModel);
|
||||||
|
horizontalHeader()->setResizeMode (QHeaderView::Interactive);
|
||||||
|
verticalHeader()->hide();
|
||||||
|
setSortingEnabled (true);
|
||||||
|
setSelectionBehavior (QAbstractItemView::SelectRows);
|
||||||
|
setSelectionMode (QAbstractItemView::ExtendedSelection);
|
||||||
|
|
||||||
|
/// \todo make initial layout fill the whole width of the table
|
||||||
|
}
|
25
apps/opencs/view/world/table.hpp
Normal file
25
apps/opencs/view/world/table.hpp
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
#ifndef CSV_WORLD_TABLE_H
|
||||||
|
#define CSV_WORLD_TABLE_H
|
||||||
|
|
||||||
|
#include <QTableView>
|
||||||
|
|
||||||
|
class QUndoStack;
|
||||||
|
|
||||||
|
namespace CSMWorld
|
||||||
|
{
|
||||||
|
class Data;
|
||||||
|
class UniversalId;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace CSVWorld
|
||||||
|
{
|
||||||
|
///< Table widget
|
||||||
|
class Table : public QTableView
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
Table (const CSMWorld::UniversalId& id, CSMWorld::Data& data, QUndoStack& undoStack);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in a new issue