mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-01-19 22:53:50 +00:00
added custom creator for cell records
This commit is contained in:
parent
899e18b2cf
commit
82958e6514
6 changed files with 160 additions and 11 deletions
|
@ -58,6 +58,7 @@ opencs_hdrs_noqt (view/doc
|
||||||
|
|
||||||
opencs_units (view/world
|
opencs_units (view/world
|
||||||
table tablesubview scriptsubview util regionmapsubview tablebottombox creator genericcreator
|
table tablesubview scriptsubview util regionmapsubview tablebottombox creator genericcreator
|
||||||
|
cellcreator
|
||||||
)
|
)
|
||||||
|
|
||||||
opencs_units_noqt (view/world
|
opencs_units_noqt (view/world
|
||||||
|
|
81
apps/opencs/view/world/cellcreator.cpp
Normal file
81
apps/opencs/view/world/cellcreator.cpp
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
|
||||||
|
#include "cellcreator.hpp"
|
||||||
|
|
||||||
|
#include <limits>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
|
#include <QComboBox>
|
||||||
|
#include <QSpinBox>
|
||||||
|
#include <QLabel>
|
||||||
|
|
||||||
|
std::string CSVWorld::CellCreator::getId() const
|
||||||
|
{
|
||||||
|
if (mType->currentIndex()==0)
|
||||||
|
return GenericCreator::getId();
|
||||||
|
|
||||||
|
std::ostringstream stream;
|
||||||
|
|
||||||
|
stream << "#" << mX->value() << " " << mY->value();
|
||||||
|
|
||||||
|
return stream.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
CSVWorld::CellCreator::CellCreator (CSMWorld::Data& data, QUndoStack& undoStack,
|
||||||
|
const CSMWorld::UniversalId& id)
|
||||||
|
: GenericCreator (data, undoStack, id)
|
||||||
|
{
|
||||||
|
mY = new QSpinBox (this);
|
||||||
|
mY->setVisible (false);
|
||||||
|
mY->setMinimum (std::numeric_limits<int>::min());
|
||||||
|
mY->setMaximum (std::numeric_limits<int>::max());
|
||||||
|
connect (mY, SIGNAL (valueChanged (int)), this, SLOT (valueChanged (int)));
|
||||||
|
insertAtBeginning (mY, true);
|
||||||
|
|
||||||
|
mYLabel = new QLabel ("Y", this);
|
||||||
|
mYLabel->setVisible (false);
|
||||||
|
insertAtBeginning (mYLabel, false);
|
||||||
|
|
||||||
|
mX = new QSpinBox (this);
|
||||||
|
mX->setVisible (false);
|
||||||
|
mX->setMinimum (std::numeric_limits<int>::min());
|
||||||
|
mX->setMaximum (std::numeric_limits<int>::max());
|
||||||
|
connect (mX, SIGNAL (valueChanged (int)), this, SLOT (valueChanged (int)));
|
||||||
|
insertAtBeginning (mX, true);
|
||||||
|
|
||||||
|
mXLabel = new QLabel ("X", this);
|
||||||
|
mXLabel->setVisible (false);
|
||||||
|
insertAtBeginning (mXLabel, false);
|
||||||
|
|
||||||
|
mType = new QComboBox (this);
|
||||||
|
|
||||||
|
mType->addItem ("Interior Cell");
|
||||||
|
mType->addItem ("Exterior Cell");
|
||||||
|
|
||||||
|
connect (mType, SIGNAL (currentIndexChanged (int)), this, SLOT (setType (int)));
|
||||||
|
|
||||||
|
insertAtBeginning (mType, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSVWorld::CellCreator::reset()
|
||||||
|
{
|
||||||
|
mX->setValue (0);
|
||||||
|
mY->setValue (0);
|
||||||
|
mType->setCurrentIndex (0);
|
||||||
|
GenericCreator::reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSVWorld::CellCreator::setType (int index)
|
||||||
|
{
|
||||||
|
setManualEditing (index==0);
|
||||||
|
mXLabel->setVisible (index==1);
|
||||||
|
mX->setVisible (index==1);
|
||||||
|
mYLabel->setVisible (index==1);
|
||||||
|
mY->setVisible (index==1);
|
||||||
|
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSVWorld::CellCreator::valueChanged (int index)
|
||||||
|
{
|
||||||
|
update();
|
||||||
|
}
|
40
apps/opencs/view/world/cellcreator.hpp
Normal file
40
apps/opencs/view/world/cellcreator.hpp
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
#ifndef CSV_WORLD_CELLCREATOR_H
|
||||||
|
#define CSV_WORLD_CELLCREATOR_H
|
||||||
|
|
||||||
|
class QLabel;
|
||||||
|
class QSpinBox;
|
||||||
|
class QComboBox;
|
||||||
|
|
||||||
|
#include "genericcreator.hpp"
|
||||||
|
|
||||||
|
namespace CSVWorld
|
||||||
|
{
|
||||||
|
class CellCreator : public GenericCreator
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
QComboBox *mType;
|
||||||
|
QLabel *mXLabel;
|
||||||
|
QSpinBox *mX;
|
||||||
|
QLabel *mYLabel;
|
||||||
|
QSpinBox *mY;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
virtual std::string getId() const;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
CellCreator (CSMWorld::Data& data, QUndoStack& undoStack, const CSMWorld::UniversalId& id);
|
||||||
|
|
||||||
|
virtual void reset();
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
|
||||||
|
void setType (int index);
|
||||||
|
|
||||||
|
void valueChanged (int index);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -22,24 +22,39 @@ void CSVWorld::GenericCreator::update()
|
||||||
mCreate->setEnabled (mErrors.empty() && !mLocked);
|
mCreate->setEnabled (mErrors.empty() && !mLocked);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSVWorld::GenericCreator::setManualEditing (bool enabled)
|
||||||
|
{
|
||||||
|
mId->setVisible (enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSVWorld::GenericCreator::insertAtBeginning (QWidget *widget, bool stretched)
|
||||||
|
{
|
||||||
|
mLayout->insertWidget (0, widget, stretched ? 1 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CSVWorld::GenericCreator::getId() const
|
||||||
|
{
|
||||||
|
return mId->text().toUtf8().constData();
|
||||||
|
}
|
||||||
|
|
||||||
CSVWorld::GenericCreator::GenericCreator (CSMWorld::Data& data, QUndoStack& undoStack,
|
CSVWorld::GenericCreator::GenericCreator (CSMWorld::Data& data, QUndoStack& undoStack,
|
||||||
const CSMWorld::UniversalId& id)
|
const CSMWorld::UniversalId& id)
|
||||||
: mData (data), mUndoStack (undoStack), mListId (id), mLocked (false)
|
: mData (data), mUndoStack (undoStack), mListId (id), mLocked (false)
|
||||||
{
|
{
|
||||||
QHBoxLayout *layout = new QHBoxLayout;
|
mLayout = new QHBoxLayout;
|
||||||
layout->setContentsMargins (0, 0, 0, 0);
|
mLayout->setContentsMargins (0, 0, 0, 0);
|
||||||
|
|
||||||
mId = new QLineEdit;
|
mId = new QLineEdit;
|
||||||
mId->setValidator (new IdValidator (this));
|
mId->setValidator (new IdValidator (this));
|
||||||
layout->addWidget (mId, 1);
|
mLayout->addWidget (mId, 1);
|
||||||
|
|
||||||
mCreate = new QPushButton ("Create");
|
mCreate = new QPushButton ("Create");
|
||||||
layout->addWidget (mCreate);
|
mLayout->addWidget (mCreate);
|
||||||
|
|
||||||
QPushButton *cancelButton = new QPushButton ("Cancel");
|
QPushButton *cancelButton = new QPushButton ("Cancel");
|
||||||
layout->addWidget (cancelButton);
|
mLayout->addWidget (cancelButton);
|
||||||
|
|
||||||
setLayout (layout);
|
setLayout (mLayout);
|
||||||
|
|
||||||
connect (cancelButton, SIGNAL (clicked (bool)), this, SIGNAL (done()));
|
connect (cancelButton, SIGNAL (clicked (bool)), this, SIGNAL (done()));
|
||||||
connect (mCreate, SIGNAL (clicked (bool)), this, SLOT (create()));
|
connect (mCreate, SIGNAL (clicked (bool)), this, SLOT (create()));
|
||||||
|
@ -63,7 +78,7 @@ std::string CSVWorld::GenericCreator::getErrors() const
|
||||||
{
|
{
|
||||||
std::string errors;
|
std::string errors;
|
||||||
|
|
||||||
std::string id = mId->text().toUtf8().constData();
|
std::string id = getId();
|
||||||
|
|
||||||
if (id.empty())
|
if (id.empty())
|
||||||
{
|
{
|
||||||
|
@ -87,8 +102,7 @@ void CSVWorld::GenericCreator::create()
|
||||||
if (!mLocked)
|
if (!mLocked)
|
||||||
{
|
{
|
||||||
mUndoStack.push (new CSMWorld::CreateCommand (
|
mUndoStack.push (new CSMWorld::CreateCommand (
|
||||||
dynamic_cast<CSMWorld::IdTable&> (*mData.getTableModel (mListId)),
|
dynamic_cast<CSMWorld::IdTable&> (*mData.getTableModel (mListId)), getId()));
|
||||||
mId->text().toUtf8().constData()));
|
|
||||||
|
|
||||||
emit done();
|
emit done();
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
class QPushButton;
|
class QPushButton;
|
||||||
class QLineEdit;
|
class QLineEdit;
|
||||||
|
class QHBoxLayout;
|
||||||
|
|
||||||
#include "creator.hpp"
|
#include "creator.hpp"
|
||||||
|
|
||||||
|
@ -20,12 +21,20 @@ namespace CSVWorld
|
||||||
QPushButton *mCreate;
|
QPushButton *mCreate;
|
||||||
QLineEdit *mId;
|
QLineEdit *mId;
|
||||||
std::string mErrors;
|
std::string mErrors;
|
||||||
|
QHBoxLayout *mLayout;
|
||||||
bool mLocked;
|
bool mLocked;
|
||||||
|
|
||||||
private:
|
protected:
|
||||||
|
|
||||||
void update();
|
void update();
|
||||||
|
|
||||||
|
virtual void setManualEditing (bool enabled);
|
||||||
|
///< Enable/disable manual ID editing (enabled by default).
|
||||||
|
|
||||||
|
void insertAtBeginning (QWidget *widget, bool stretched);
|
||||||
|
|
||||||
|
virtual std::string getId() const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
GenericCreator (CSMWorld::Data& data, QUndoStack& undoStack,
|
GenericCreator (CSMWorld::Data& data, QUndoStack& undoStack,
|
||||||
|
@ -39,6 +48,7 @@ namespace CSVWorld
|
||||||
///< Return formatted error descriptions for the current state of the creator. if an empty
|
///< Return formatted error descriptions for the current state of the creator. if an empty
|
||||||
/// string is returned, there is no error.
|
/// string is returned, there is no error.
|
||||||
|
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
|
||||||
void textChanged (const QString& text);
|
void textChanged (const QString& text);
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include "scriptsubview.hpp"
|
#include "scriptsubview.hpp"
|
||||||
#include "regionmapsubview.hpp"
|
#include "regionmapsubview.hpp"
|
||||||
#include "genericcreator.hpp"
|
#include "genericcreator.hpp"
|
||||||
|
#include "cellcreator.hpp"
|
||||||
|
|
||||||
void CSVWorld::addSubViewFactories (CSVDoc::SubViewFactoryManager& manager)
|
void CSVWorld::addSubViewFactories (CSVDoc::SubViewFactoryManager& manager)
|
||||||
{
|
{
|
||||||
|
@ -28,7 +29,6 @@ void CSVWorld::addSubViewFactories (CSVDoc::SubViewFactoryManager& manager)
|
||||||
CSMWorld::UniversalId::Type_Regions,
|
CSMWorld::UniversalId::Type_Regions,
|
||||||
CSMWorld::UniversalId::Type_Birthsigns,
|
CSMWorld::UniversalId::Type_Birthsigns,
|
||||||
CSMWorld::UniversalId::Type_Spells,
|
CSMWorld::UniversalId::Type_Spells,
|
||||||
CSMWorld::UniversalId::Type_Cells,
|
|
||||||
CSMWorld::UniversalId::Type_Referenceables,
|
CSMWorld::UniversalId::Type_Referenceables,
|
||||||
CSMWorld::UniversalId::Type_References,
|
CSMWorld::UniversalId::Type_References,
|
||||||
|
|
||||||
|
@ -39,6 +39,9 @@ void CSVWorld::addSubViewFactories (CSVDoc::SubViewFactoryManager& manager)
|
||||||
manager.add (sTableTypes[i],
|
manager.add (sTableTypes[i],
|
||||||
new CSVDoc::SubViewFactoryWithCreator<TableSubView, CreatorFactory<GenericCreator> >);
|
new CSVDoc::SubViewFactoryWithCreator<TableSubView, CreatorFactory<GenericCreator> >);
|
||||||
|
|
||||||
|
manager.add (CSMWorld::UniversalId::Type_Cells,
|
||||||
|
new CSVDoc::SubViewFactoryWithCreator<TableSubView, CreatorFactory<CellCreator> >);
|
||||||
|
|
||||||
manager.add (CSMWorld::UniversalId::Type_Script, new CSVDoc::SubViewFactory<ScriptSubView>);
|
manager.add (CSMWorld::UniversalId::Type_Script, new CSVDoc::SubViewFactory<ScriptSubView>);
|
||||||
|
|
||||||
manager.add (CSMWorld::UniversalId::Type_RegionMap, new CSVDoc::SubViewFactory<RegionMapSubView>);
|
manager.add (CSMWorld::UniversalId::Type_RegionMap, new CSVDoc::SubViewFactory<RegionMapSubView>);
|
||||||
|
|
Loading…
Reference in a new issue