mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-03-25 16:43:33 +00:00
added InfoCreator
This commit is contained in:
parent
c545b3682a
commit
0745a86039
@ -60,7 +60,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 referenceablecreator referencecreator scenesubview scenetoolbar scenetool
|
cellcreator referenceablecreator referencecreator scenesubview scenetoolbar scenetool
|
||||||
scenetoolmode
|
scenetoolmode infocreator
|
||||||
)
|
)
|
||||||
|
|
||||||
opencs_units_noqt (view/world
|
opencs_units_noqt (view/world
|
||||||
|
79
apps/opencs/view/world/infocreator.cpp
Normal file
79
apps/opencs/view/world/infocreator.cpp
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
|
||||||
|
#include "infocreator.hpp"
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
|
#include <QLabel>
|
||||||
|
#include <QLineEdit>
|
||||||
|
#include <QUuid>
|
||||||
|
|
||||||
|
#include "../../model/world/data.hpp"
|
||||||
|
#include "../../model/world/commands.hpp"
|
||||||
|
#include "../../model/world/columns.hpp"
|
||||||
|
#include "../../model/world/idtable.hpp"
|
||||||
|
|
||||||
|
std::string CSVWorld::InfoCreator::getId() const
|
||||||
|
{
|
||||||
|
std::string id = mTopic->text().toUtf8().constData();
|
||||||
|
|
||||||
|
std::string unique = QUuid::createUuid().toByteArray().data();
|
||||||
|
|
||||||
|
unique.erase (std::remove (unique.begin(), unique.end(), '-'), unique.end());
|
||||||
|
|
||||||
|
unique = unique.substr (1, unique.size()-2);
|
||||||
|
|
||||||
|
return id + '#' + unique;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSVWorld::InfoCreator::configureCreateCommand (CSMWorld::CreateCommand& command) const
|
||||||
|
{
|
||||||
|
int index =
|
||||||
|
dynamic_cast<CSMWorld::IdTable&> (*getData().getTableModel (getCollectionId())).
|
||||||
|
findColumnIndex (
|
||||||
|
getCollectionId().getType()==CSMWorld::UniversalId::Type_TopicInfos ?
|
||||||
|
CSMWorld::Columns::ColumnId_Topic : CSMWorld::Columns::ColumnId_Journal);
|
||||||
|
|
||||||
|
command.addValue (index, mTopic->text());
|
||||||
|
}
|
||||||
|
|
||||||
|
CSVWorld::InfoCreator::InfoCreator (CSMWorld::Data& data, QUndoStack& undoStack,
|
||||||
|
const CSMWorld::UniversalId& id)
|
||||||
|
: GenericCreator (data, undoStack, id)
|
||||||
|
{
|
||||||
|
QLabel *label = new QLabel ("Topic", this);
|
||||||
|
insertBeforeButtons (label, false);
|
||||||
|
|
||||||
|
mTopic = new QLineEdit (this);
|
||||||
|
insertBeforeButtons (mTopic, true);
|
||||||
|
|
||||||
|
setManualEditing (false);
|
||||||
|
|
||||||
|
connect (mTopic, SIGNAL (textChanged (const QString&)), this, SLOT (topicChanged()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSVWorld::InfoCreator::reset()
|
||||||
|
{
|
||||||
|
mTopic->setText ("");
|
||||||
|
GenericCreator::reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CSVWorld::InfoCreator::getErrors() const
|
||||||
|
{
|
||||||
|
// We ignore errors from GenericCreator here, because they can never happen in an InfoCreator.
|
||||||
|
std::string errors;
|
||||||
|
|
||||||
|
std::string topic = mTopic->text().toUtf8().constData();
|
||||||
|
|
||||||
|
if ((getCollectionId().getType()==CSMWorld::UniversalId::Type_TopicInfos ?
|
||||||
|
getData().getTopics() : getData().getJournals()).searchId (topic)==-1)
|
||||||
|
{
|
||||||
|
errors += "Invalid Topic ID";
|
||||||
|
}
|
||||||
|
|
||||||
|
return errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSVWorld::InfoCreator::topicChanged()
|
||||||
|
{
|
||||||
|
update();
|
||||||
|
}
|
42
apps/opencs/view/world/infocreator.hpp
Normal file
42
apps/opencs/view/world/infocreator.hpp
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
#ifndef CSV_WORLD_INFOCREATOR_H
|
||||||
|
#define CSV_WORLD_INFOCREATOR_H
|
||||||
|
|
||||||
|
#include "genericcreator.hpp"
|
||||||
|
|
||||||
|
class QLineEdit;
|
||||||
|
|
||||||
|
namespace CSMWorld
|
||||||
|
{
|
||||||
|
class InfoCollection;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace CSVWorld
|
||||||
|
{
|
||||||
|
class InfoCreator : public GenericCreator
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
QLineEdit *mTopic;
|
||||||
|
|
||||||
|
virtual std::string getId() const;
|
||||||
|
|
||||||
|
virtual void configureCreateCommand (CSMWorld::CreateCommand& command) const;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
InfoCreator (CSMWorld::Data& data, QUndoStack& undoStack,
|
||||||
|
const CSMWorld::UniversalId& id);
|
||||||
|
|
||||||
|
virtual void reset();
|
||||||
|
|
||||||
|
virtual std::string getErrors() const;
|
||||||
|
///< Return formatted error descriptions for the current state of the creator. if an empty
|
||||||
|
/// string is returned, there is no error.
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
|
||||||
|
void topicChanged();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -15,6 +15,7 @@
|
|||||||
#include "referencecreator.hpp"
|
#include "referencecreator.hpp"
|
||||||
#include "scenesubview.hpp"
|
#include "scenesubview.hpp"
|
||||||
#include "dialoguecreator.hpp"
|
#include "dialoguecreator.hpp"
|
||||||
|
#include "infocreator.hpp"
|
||||||
|
|
||||||
void CSVWorld::addSubViewFactories (CSVDoc::SubViewFactoryManager& manager)
|
void CSVWorld::addSubViewFactories (CSVDoc::SubViewFactoryManager& manager)
|
||||||
{
|
{
|
||||||
@ -61,10 +62,10 @@ void CSVWorld::addSubViewFactories (CSVDoc::SubViewFactoryManager& manager)
|
|||||||
new CSVDoc::SubViewFactoryWithCreator<TableSubView, JournalCreatorFactory>);
|
new CSVDoc::SubViewFactoryWithCreator<TableSubView, JournalCreatorFactory>);
|
||||||
|
|
||||||
manager.add (CSMWorld::UniversalId::Type_TopicInfos,
|
manager.add (CSMWorld::UniversalId::Type_TopicInfos,
|
||||||
new CSVDoc::SubViewFactoryWithCreator<TableSubView, CreatorFactory<GenericCreator> > (false));
|
new CSVDoc::SubViewFactoryWithCreator<TableSubView, CreatorFactory<InfoCreator> > (false));
|
||||||
|
|
||||||
manager.add (CSMWorld::UniversalId::Type_JournalInfos,
|
manager.add (CSMWorld::UniversalId::Type_JournalInfos,
|
||||||
new CSVDoc::SubViewFactoryWithCreator<TableSubView, CreatorFactory<GenericCreator> > (false));
|
new CSVDoc::SubViewFactoryWithCreator<TableSubView, CreatorFactory<InfoCreator> > (false));
|
||||||
|
|
||||||
// Subviews for editing/viewing individual records
|
// Subviews for editing/viewing individual records
|
||||||
manager.add (CSMWorld::UniversalId::Type_Script, new CSVDoc::SubViewFactory<ScriptSubView>);
|
manager.add (CSMWorld::UniversalId::Type_Script, new CSVDoc::SubViewFactory<ScriptSubView>);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user