forked from teamnwah/openmw-tes3coop
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
|
||||
table tablesubview scriptsubview util regionmapsubview tablebottombox creator genericcreator
|
||||
cellcreator
|
||||
)
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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,
|
||||
const CSMWorld::UniversalId& id)
|
||||
: mData (data), mUndoStack (undoStack), mListId (id), mLocked (false)
|
||||
{
|
||||
QHBoxLayout *layout = new QHBoxLayout;
|
||||
layout->setContentsMargins (0, 0, 0, 0);
|
||||
mLayout = new QHBoxLayout;
|
||||
mLayout->setContentsMargins (0, 0, 0, 0);
|
||||
|
||||
mId = new QLineEdit;
|
||||
mId->setValidator (new IdValidator (this));
|
||||
layout->addWidget (mId, 1);
|
||||
mLayout->addWidget (mId, 1);
|
||||
|
||||
mCreate = new QPushButton ("Create");
|
||||
layout->addWidget (mCreate);
|
||||
mLayout->addWidget (mCreate);
|
||||
|
||||
QPushButton *cancelButton = new QPushButton ("Cancel");
|
||||
layout->addWidget (cancelButton);
|
||||
mLayout->addWidget (cancelButton);
|
||||
|
||||
setLayout (layout);
|
||||
setLayout (mLayout);
|
||||
|
||||
connect (cancelButton, SIGNAL (clicked (bool)), this, SIGNAL (done()));
|
||||
connect (mCreate, SIGNAL (clicked (bool)), this, SLOT (create()));
|
||||
|
@ -63,7 +78,7 @@ std::string CSVWorld::GenericCreator::getErrors() const
|
|||
{
|
||||
std::string errors;
|
||||
|
||||
std::string id = mId->text().toUtf8().constData();
|
||||
std::string id = getId();
|
||||
|
||||
if (id.empty())
|
||||
{
|
||||
|
@ -87,8 +102,7 @@ void CSVWorld::GenericCreator::create()
|
|||
if (!mLocked)
|
||||
{
|
||||
mUndoStack.push (new CSMWorld::CreateCommand (
|
||||
dynamic_cast<CSMWorld::IdTable&> (*mData.getTableModel (mListId)),
|
||||
mId->text().toUtf8().constData()));
|
||||
dynamic_cast<CSMWorld::IdTable&> (*mData.getTableModel (mListId)), getId()));
|
||||
|
||||
emit done();
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
class QPushButton;
|
||||
class QLineEdit;
|
||||
class QHBoxLayout;
|
||||
|
||||
#include "creator.hpp"
|
||||
|
||||
|
@ -20,12 +21,20 @@ namespace CSVWorld
|
|||
QPushButton *mCreate;
|
||||
QLineEdit *mId;
|
||||
std::string mErrors;
|
||||
QHBoxLayout *mLayout;
|
||||
bool mLocked;
|
||||
|
||||
private:
|
||||
protected:
|
||||
|
||||
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:
|
||||
|
||||
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
|
||||
/// string is returned, there is no error.
|
||||
|
||||
|
||||
private slots:
|
||||
|
||||
void textChanged (const QString& text);
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include "scriptsubview.hpp"
|
||||
#include "regionmapsubview.hpp"
|
||||
#include "genericcreator.hpp"
|
||||
#include "cellcreator.hpp"
|
||||
|
||||
void CSVWorld::addSubViewFactories (CSVDoc::SubViewFactoryManager& manager)
|
||||
{
|
||||
|
@ -28,7 +29,6 @@ void CSVWorld::addSubViewFactories (CSVDoc::SubViewFactoryManager& manager)
|
|||
CSMWorld::UniversalId::Type_Regions,
|
||||
CSMWorld::UniversalId::Type_Birthsigns,
|
||||
CSMWorld::UniversalId::Type_Spells,
|
||||
CSMWorld::UniversalId::Type_Cells,
|
||||
CSMWorld::UniversalId::Type_Referenceables,
|
||||
CSMWorld::UniversalId::Type_References,
|
||||
|
||||
|
@ -39,6 +39,9 @@ void CSVWorld::addSubViewFactories (CSVDoc::SubViewFactoryManager& manager)
|
|||
manager.add (sTableTypes[i],
|
||||
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_RegionMap, new CSVDoc::SubViewFactory<RegionMapSubView>);
|
||||
|
|
Loading…
Reference in a new issue