From 9d95a38934c52041d5457da9e7cb6c4711eb3dd2 Mon Sep 17 00:00:00 2001 From: graffy76 Date: Sat, 29 Jun 2013 08:11:09 -0500 Subject: [PATCH 1/7] Implementing delegate for referenceables table Type column Added delegate skeleton class Added delegate creation code in ViewManager Added Display_RefRecordType enum to columnbase.hpp Changed Type column'sDisplay type to Display_RefRecordType in refidcollection.cpp modified OpenCS CMakeLists.txt to incorporate RefRecordTypeDelegate class --- apps/opencs/CMakeLists.txt | 4 +- apps/opencs/model/world/columnbase.hpp | 3 +- apps/opencs/view/doc/viewmanager.cpp | 4 ++ .../view/world/refrecordtypedelegate.cpp | 17 ++++++ .../view/world/refrecordtypedelegate.hpp | 58 +++++++++++++++++++ 5 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 apps/opencs/view/world/refrecordtypedelegate.cpp create mode 100644 apps/opencs/view/world/refrecordtypedelegate.hpp diff --git a/apps/opencs/CMakeLists.txt b/apps/opencs/CMakeLists.txt index 866c0f1f2..37d925662 100644 --- a/apps/opencs/CMakeLists.txt +++ b/apps/opencs/CMakeLists.txt @@ -61,7 +61,9 @@ opencs_units (view/world ) opencs_units_noqt (view/world - dialoguesubview subviews enumdelegate vartypedelegate scripthighlighter recordstatusdelegate + dialoguesubview subviews + enumdelegate vartypedelegate recordstatusdelegate refrecordtypedelegate + scripthighlighter ) diff --git a/apps/opencs/model/world/columnbase.hpp b/apps/opencs/model/world/columnbase.hpp index e71e633a4..280341216 100644 --- a/apps/opencs/model/world/columnbase.hpp +++ b/apps/opencs/model/world/columnbase.hpp @@ -42,7 +42,8 @@ namespace CSMWorld Display_ClothingType, Display_CreatureType, Display_WeaponType, - Display_RecordState + Display_RecordState, + Display_RefRecordType }; std::string mTitle; diff --git a/apps/opencs/view/doc/viewmanager.cpp b/apps/opencs/view/doc/viewmanager.cpp index bf9da68a0..5530b426b 100644 --- a/apps/opencs/view/doc/viewmanager.cpp +++ b/apps/opencs/view/doc/viewmanager.cpp @@ -13,6 +13,7 @@ #include "../world/enumdelegate.hpp" #include "../world/vartypedelegate.hpp" #include "../world/recordstatusdelegate.hpp" +#include "../world/refrecordtypedelegate.hpp" #include "../settings/usersettingsdialog.hpp" #include "view.hpp" @@ -122,6 +123,9 @@ CSVDoc::ViewManager::ViewManager (CSMDoc::DocumentManager& documentManager) mDelegateFactories->add (CSMWorld::ColumnBase::Display_RecordState, new CSVWorld::RecordStatusDelegateFactory() ); + mDelegateFactories->add (CSMWorld::ColumnBase::Display_RefRecordType, + new CSVWorld::RefRecordTypeDelegateFactory() ); + connect (&CSMSettings::UserSettings::instance(), SIGNAL (signalUpdateEditorSetting (const QString &, const QString &)), this, SLOT (slotUpdateEditorSetting (const QString &, const QString &))); } diff --git a/apps/opencs/view/world/refrecordtypedelegate.cpp b/apps/opencs/view/world/refrecordtypedelegate.cpp new file mode 100644 index 000000000..259b1c9b5 --- /dev/null +++ b/apps/opencs/view/world/refrecordtypedelegate.cpp @@ -0,0 +1,17 @@ +#include "refrecordtypedelegate.hpp" + +CSVWorld::RefRecordTypeDelegate::RefRecordTypeDelegate + (const std::vector > &values, QUndoStack& undoStack, QObject *parent) + : EnumDelegate (values, undoStack, parent) +{} + +CSVWorld::RefRecordTypeDelegateFactory::RefRecordTypeDelegateFactory() +{ + +} + +CSVWorld::CommandDelegate *CSVWorld::RefRecordTypeDelegateFactory::makeDelegate (QUndoStack& undoStack, + QObject *parent) const +{ + return new RefRecordTypeDelegate (mValues, undoStack, parent); +} diff --git a/apps/opencs/view/world/refrecordtypedelegate.hpp b/apps/opencs/view/world/refrecordtypedelegate.hpp new file mode 100644 index 000000000..baec2cc2e --- /dev/null +++ b/apps/opencs/view/world/refrecordtypedelegate.hpp @@ -0,0 +1,58 @@ +#ifndef REFRECORDTYPEDELEGATE_HPP +#define REFRECORDTYPEDELEGATE_HPP + +#include "enumdelegate.hpp" +#include "util.hpp" + +namespace CSVWorld +{ + class RefRecordTypeDelegate : public EnumDelegate + { + public: + RefRecordTypeDelegate (const std::vector > &mValues, QUndoStack& undoStack, QObject *parent); + }; + + class RefRecordTypeDelegateFactory : public CommandDelegateFactory + { + + std::vector > mValues; + + public: + RefRecordTypeDelegateFactory(); + + virtual CommandDelegate *makeDelegate (QUndoStack& undoStack, QObject *parent) const; + ///< The ownership of the returned CommandDelegate is transferred to the caller. + }; +} +/* + class VarTypeDelegate : public EnumDelegate + { + private: + + virtual void addCommands (QAbstractItemModel *model, + const QModelIndex& index, int type) const; + + public: + + VarTypeDelegate (const std::vector >& values, + QUndoStack& undoStack, QObject *parent); + }; + + class VarTypeDelegateFactory : public CommandDelegateFactory + { + std::vector > mValues; + + public: + + VarTypeDelegateFactory (ESM::VarType type0 = ESM::VT_Unknown, + ESM::VarType type1 = ESM::VT_Unknown, ESM::VarType type2 = ESM::VT_Unknown, + ESM::VarType type3 = ESM::VT_Unknown); + + virtual CommandDelegate *makeDelegate (QUndoStack& undoStack, QObject *parent) const; + ///< The ownership of the returned CommandDelegate is transferred to the caller. + + void add (ESM::VarType type); + }; +*/ + +#endif // REFRECORDTYPEDELEGATE_HPP From 55b115935aff153c9e6d9ceaf5e86262011308f8 Mon Sep 17 00:00:00 2001 From: graffy76 Date: Sun, 30 Jun 2013 07:43:58 -0500 Subject: [PATCH 2/7] Implemented RefRecordTypeDelegate Added accessor functions to CSMWorld::UniversalId for static const sIdArg[] --- apps/opencs/model/world/refidcollection.cpp | 2 +- apps/opencs/model/world/universalid.cpp | 25 ++++++++++++++++++- apps/opencs/model/world/universalid.hpp | 3 +++ .../view/world/refrecordtypedelegate.cpp | 12 +++++++++ 4 files changed, 40 insertions(+), 2 deletions(-) diff --git a/apps/opencs/model/world/refidcollection.cpp b/apps/opencs/model/world/refidcollection.cpp index 2bb8d07b3..b2cb48ecb 100644 --- a/apps/opencs/model/world/refidcollection.cpp +++ b/apps/opencs/model/world/refidcollection.cpp @@ -42,7 +42,7 @@ CSMWorld::RefIdCollection::RefIdCollection() mColumns.push_back (RefIdColumn ("*", ColumnBase::Display_RecordState, ColumnBase::Flag_Table | ColumnBase::Flag_Dialogue, false, false)); baseColumns.mModified = &mColumns.back(); - mColumns.push_back (RefIdColumn ("Type", ColumnBase::Display_Integer, + mColumns.push_back (RefIdColumn ("Type", ColumnBase::Display_RefRecordType, ColumnBase::Flag_Table | ColumnBase::Flag_Dialogue, false, false)); baseColumns.mType = &mColumns.back(); diff --git a/apps/opencs/model/world/universalid.cpp b/apps/opencs/model/world/universalid.cpp index bd1632e3e..dd4432241 100644 --- a/apps/opencs/model/world/universalid.cpp +++ b/apps/opencs/model/world/universalid.cpp @@ -5,6 +5,7 @@ #include #include +#include namespace { struct TypeData @@ -83,6 +84,8 @@ namespace { CSMWorld::UniversalId::Class_None, CSMWorld::UniversalId::Type_None, 0 } // end marker }; + + static const unsigned int IDARG_SIZE = sizeof (sIdArg) / sizeof (TypeData); } CSMWorld::UniversalId::UniversalId (const std::string& universalId) @@ -261,6 +264,26 @@ std::string CSMWorld::UniversalId::toString() const return stream.str(); } + +std::pair CSMWorld::UniversalId::getIdArgPair (unsigned int index) +{ + std::pair retPair; + + if ( index < IDARG_SIZE ) + { + retPair.first = sIdArg[index].mType; + retPair.second = sIdArg[index].mName; + } + + return retPair; +} + +unsigned int CSMWorld::UniversalId::getIdArgSize() +{ + return IDARG_SIZE; +} + + bool CSMWorld::operator== (const CSMWorld::UniversalId& left, const CSMWorld::UniversalId& right) { return left.isEqual (right); @@ -279,4 +302,4 @@ bool CSMWorld::operator< (const UniversalId& left, const UniversalId& right) std::ostream& CSMWorld::operator< (std::ostream& stream, const CSMWorld::UniversalId& universalId) { return stream << universalId.toString(); -} \ No newline at end of file +} diff --git a/apps/opencs/model/world/universalid.hpp b/apps/opencs/model/world/universalid.hpp index 2c4b14eaf..fb1fdff29 100644 --- a/apps/opencs/model/world/universalid.hpp +++ b/apps/opencs/model/world/universalid.hpp @@ -123,6 +123,9 @@ namespace CSMWorld std::string getTypeName() const; std::string toString() const; + + static std::pair getIdArgPair (unsigned int index); + static unsigned int getIdArgSize (); }; bool operator== (const UniversalId& left, const UniversalId& right); diff --git a/apps/opencs/view/world/refrecordtypedelegate.cpp b/apps/opencs/view/world/refrecordtypedelegate.cpp index 259b1c9b5..52277aa61 100644 --- a/apps/opencs/view/world/refrecordtypedelegate.cpp +++ b/apps/opencs/view/world/refrecordtypedelegate.cpp @@ -1,4 +1,7 @@ #include "refrecordtypedelegate.hpp" +#include "../../model/world/universalid.hpp" + +#include CSVWorld::RefRecordTypeDelegate::RefRecordTypeDelegate (const std::vector > &values, QUndoStack& undoStack, QObject *parent) @@ -7,7 +10,16 @@ CSVWorld::RefRecordTypeDelegate::RefRecordTypeDelegate CSVWorld::RefRecordTypeDelegateFactory::RefRecordTypeDelegateFactory() { + unsigned int argSize = CSMWorld::UniversalId::getIdArgSize(); + for (unsigned int i = 0; i < argSize; i++) + { + std::pair idPair = CSMWorld::UniversalId::getIdArgPair(i); + + mValues.push_back (std::pair(idPair.first, QString::fromUtf8(idPair.second))); + + qDebug() << "index: " << mValues.at(i).first << "; value: " << mValues.at(i).second; + } } CSVWorld::CommandDelegate *CSVWorld::RefRecordTypeDelegateFactory::makeDelegate (QUndoStack& undoStack, From 9f6d25046303b68e88ae45883c28416537c4775a Mon Sep 17 00:00:00 2001 From: graffy76 Date: Mon, 1 Jul 2013 07:40:47 -0500 Subject: [PATCH 3/7] QDebug reference removal --- apps/opencs/model/settings/usersettings.cpp | 1 - apps/opencs/model/world/universalid.cpp | 1 - apps/opencs/view/world/refrecordtypedelegate.cpp | 4 ---- 3 files changed, 6 deletions(-) diff --git a/apps/opencs/model/settings/usersettings.cpp b/apps/opencs/model/settings/usersettings.cpp index b73fbfdf4..d106110d0 100644 --- a/apps/opencs/model/settings/usersettings.cpp +++ b/apps/opencs/model/settings/usersettings.cpp @@ -9,7 +9,6 @@ #include #include -#include #include #include "settingcontainer.hpp" diff --git a/apps/opencs/model/world/universalid.cpp b/apps/opencs/model/world/universalid.cpp index dd4432241..c04ef89a4 100644 --- a/apps/opencs/model/world/universalid.cpp +++ b/apps/opencs/model/world/universalid.cpp @@ -5,7 +5,6 @@ #include #include -#include namespace { struct TypeData diff --git a/apps/opencs/view/world/refrecordtypedelegate.cpp b/apps/opencs/view/world/refrecordtypedelegate.cpp index 52277aa61..2bcb7ca50 100644 --- a/apps/opencs/view/world/refrecordtypedelegate.cpp +++ b/apps/opencs/view/world/refrecordtypedelegate.cpp @@ -1,8 +1,6 @@ #include "refrecordtypedelegate.hpp" #include "../../model/world/universalid.hpp" -#include - CSVWorld::RefRecordTypeDelegate::RefRecordTypeDelegate (const std::vector > &values, QUndoStack& undoStack, QObject *parent) : EnumDelegate (values, undoStack, parent) @@ -17,8 +15,6 @@ CSVWorld::RefRecordTypeDelegateFactory::RefRecordTypeDelegateFactory() std::pair idPair = CSMWorld::UniversalId::getIdArgPair(i); mValues.push_back (std::pair(idPair.first, QString::fromUtf8(idPair.second))); - - qDebug() << "index: " << mValues.at(i).first << "; value: " << mValues.at(i).second; } } From ae4e3181d9d13b32ed87b6616b036fb5258afa2d Mon Sep 17 00:00:00 2001 From: graffy76 Date: Wed, 10 Jul 2013 17:29:07 -0500 Subject: [PATCH 4/7] Fixing repo permissions commit #1 --- .../view/settings/datadisplayformatpage.cpp | 55 +++++++++ .../view/settings/datadisplayformatpage.hpp | 33 ++++++ .../opencs/view/world/datadisplaydelegate.cpp | 110 ++++++++++++++++++ .../opencs/view/world/datadisplaydelegate.hpp | 85 ++++++++++++++ apps/opencs/view/world/refidtypedelegate.cpp | 67 +++++++++++ apps/opencs/view/world/refidtypedelegate.hpp | 37 ++++++ 6 files changed, 387 insertions(+) create mode 100755 apps/opencs/view/settings/datadisplayformatpage.cpp create mode 100755 apps/opencs/view/settings/datadisplayformatpage.hpp create mode 100755 apps/opencs/view/world/datadisplaydelegate.cpp create mode 100755 apps/opencs/view/world/datadisplaydelegate.hpp create mode 100755 apps/opencs/view/world/refidtypedelegate.cpp create mode 100755 apps/opencs/view/world/refidtypedelegate.hpp diff --git a/apps/opencs/view/settings/datadisplayformatpage.cpp b/apps/opencs/view/settings/datadisplayformatpage.cpp new file mode 100755 index 000000000..29257f0c8 --- /dev/null +++ b/apps/opencs/view/settings/datadisplayformatpage.cpp @@ -0,0 +1,55 @@ +#include "datadisplayformatpage.hpp" +#include "groupblock.hpp" +#include "../../model/settings/usersettings.hpp" + +CSVSettings::DataDisplayFormatPage::DataDisplayFormatPage(QWidget* parent) : + AbstractPage("Display Format", parent) +{ + setupUi(); +} + +CSVSettings::GroupBlockDef *CSVSettings::DataDisplayFormatPage::setupDataDisplay( const QString &title) +{ + GroupBlockDef *statusBlock = new GroupBlockDef(QString(title)); + + SettingsItemDef *statusItem = new SettingsItemDef (statusBlock->title, "Icon and Text"); + *(statusItem->valueList) << QString("Icon and Text") << QString("Icon Only") << QString("Text Only"); + + WidgetDef statusWidget (Widget_RadioButton); + statusWidget.valueList = statusItem->valueList; + + statusItem->widget = statusWidget; + + statusBlock->settingItems << statusItem; + + return statusBlock; +} + + +void CSVSettings::DataDisplayFormatPage::setupUi() +{ + + mAbstractBlocks << buildBlock (setupDataDisplay ("Record Status Display")); + mAbstractBlocks << buildBlock (setupDataDisplay ("Referenceable ID Type Display")); + + foreach (AbstractBlock *block, mAbstractBlocks) + { + connect (block, SIGNAL (signalUpdateSetting (const QString &, const QString &)), + this, SIGNAL (signalUpdateEditorSetting (const QString &, const QString &)) ); + } + + connect ( this, + SIGNAL ( signalUpdateEditorSetting (const QString &, const QString &)), + &(CSMSettings::UserSettings::instance()), + SIGNAL ( signalUpdateEditorSetting (const QString &, const QString &))); + +} + +void CSVSettings::DataDisplayFormatPage::initializeWidgets (const CSMSettings::SettingMap &settings) +{ + //iterate each item in each blocks in this section + //validate the corresponding setting against the defined valuelist if any. + for (AbstractBlockList::Iterator it_block = mAbstractBlocks.begin(); + it_block != mAbstractBlocks.end(); ++it_block) + (*it_block)->updateSettings (settings); +} diff --git a/apps/opencs/view/settings/datadisplayformatpage.hpp b/apps/opencs/view/settings/datadisplayformatpage.hpp new file mode 100755 index 000000000..b785bbd23 --- /dev/null +++ b/apps/opencs/view/settings/datadisplayformatpage.hpp @@ -0,0 +1,33 @@ +#ifndef EDITORPAGE_HPP +#define EDITORPAGE_HPP + +#include "support.hpp" +#include "abstractpage.hpp" + +namespace CSVSettings +{ + class DataDisplayFormatPage : public AbstractPage + { + Q_OBJECT + + public: + explicit DataDisplayFormatPage(QWidget *parent = 0); + + void initializeWidgets (const CSMSettings::SettingMap &settings); + void setupUi(); + + private: + + /// User preference view of the record status delegate's icon / text setting + GroupBlockDef *setupDataDisplay(const QString &); + + signals: + + /// Signals up for changes to editor application-level settings + void signalUpdateEditorSetting (const QString &settingName, const QString &settingValue); + + public slots: + }; +} + +#endif // EDITORPAGE_HPP diff --git a/apps/opencs/view/world/datadisplaydelegate.cpp b/apps/opencs/view/world/datadisplaydelegate.cpp new file mode 100755 index 000000000..d838395f6 --- /dev/null +++ b/apps/opencs/view/world/datadisplaydelegate.cpp @@ -0,0 +1,110 @@ +#include "datadisplaydelegate.hpp" +#include +#include + +CSVWorld::DataDisplayDelegate::DataDisplayDelegate(const ValueList &values, + const IconList &icons, + QUndoStack &undoStack, QObject *parent) + : EnumDelegate (values, undoStack, parent), mDisplayMode (Mode_TextOnly), mIcons (icons) + , mIconSize (QSize(16, 16)), mIconLeftOffset(3), mTextLeftOffset(8) +{ + mTextAlignment.setAlignment (Qt::AlignLeft | Qt::AlignVCenter ); + + buildPixmaps(); +} + +void CSVWorld::DataDisplayDelegate::buildPixmaps () +{ + if (mPixmaps.size() > 0) + mPixmaps.clear(); + + IconList::iterator it = mIcons.begin(); + + while (it != mIcons.end()) + { + mPixmaps.push_back (std::make_pair (it->first, it->second.pixmap (mIconSize) ) ); + it++; + } +} + +void CSVWorld::DataDisplayDelegate::setIconSize(const QSize size) +{ + mIconSize = size; + buildPixmaps(); +} + +void CSVWorld::DataDisplayDelegate::setIconLeftOffset(int offset) +{ + mIconLeftOffset = offset; +} + +void CSVWorld::DataDisplayDelegate::setTextLeftOffset(int offset) +{ + mTextLeftOffset = offset; +} + +void CSVWorld::DataDisplayDelegate::paint (QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + painter->save(); + + //default to enum delegate's paint method for text-only conditions + if (mDisplayMode == Mode_TextOnly) + EnumDelegate::paint(painter, option, index); + else + { + unsigned int i = 0; + + for (; i < mValues.size(); ++i) + { + if (mValues.at(i).first == index.data().toInt()) + break; + } + + if (i < mValues.size() ) + paintIcon (painter, option, i); + } + + painter->restore(); +} + +void CSVWorld::DataDisplayDelegate::paintIcon (QPainter *painter, const QStyleOptionViewItem &option, int index) const +{ + //function-level statics + QRect iconRect = option.rect; + QRect textRect = iconRect; + + const QString &text = mValues.at(index).second; + + iconRect.setSize (mIconSize); + iconRect.translate(mIconLeftOffset, (option.rect.height() - iconRect.height())/2); + + if (mDisplayMode == Mode_IconAndText ) + { + textRect.translate (iconRect.width() + mTextLeftOffset, 0 ); + painter->drawText (textRect, text, mTextAlignment); + } + else + iconRect.translate( (option.rect.width() - iconRect.width()) / 2, 0); + + painter->drawPixmap (iconRect, mPixmaps.at(index).second); +} + +CSVWorld::DataDisplayDelegate::~DataDisplayDelegate() +{ + mIcons.clear(); + mPixmaps.clear(); +} + +void CSVWorld::DataDisplayDelegateFactory::add (int enumValue, QString enumName, QString iconFilename) +{ + mIcons.push_back (std::make_pair(enumValue, QIcon(iconFilename))); + EnumDelegateFactory::add(enumValue, enumName); + +} + +CSVWorld::CommandDelegate *CSVWorld::DataDisplayDelegateFactory::makeDelegate (QUndoStack& undoStack, + QObject *parent) const +{ + + return new DataDisplayDelegate (mValues, mIcons, undoStack, parent); +} diff --git a/apps/opencs/view/world/datadisplaydelegate.hpp b/apps/opencs/view/world/datadisplaydelegate.hpp new file mode 100755 index 000000000..d23b86631 --- /dev/null +++ b/apps/opencs/view/world/datadisplaydelegate.hpp @@ -0,0 +1,85 @@ +#ifndef DATADISPLAYDELEGATE_HPP +#define DATADISPLAYDELEGATE_HPP + +#include +#include "enumdelegate.hpp" + +namespace CSVWorld +{ + + + class DataDisplayDelegate : public EnumDelegate + { + public: + + typedef std::vector < std::pair < int, QIcon > > IconList; + typedef std::vector > ValueList; + + protected: + + enum DisplayMode + { + Mode_TextOnly, + Mode_IconOnly, + Mode_IconAndText + }; + + DisplayMode mDisplayMode; + IconList mIcons; + + private: + + std::vector > mPixmaps; + QTextOption mTextAlignment; + QSize mIconSize; + int mIconLeftOffset; + int mTextLeftOffset; + + public: + explicit DataDisplayDelegate (const ValueList & values, + const IconList & icons, + QUndoStack& undoStack, QObject *parent); + + ~DataDisplayDelegate(); + + virtual void paint (QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; + + /// pass a QSize defining height / width of icon. Default is QSize (16,16). + void setIconSize (const QSize icon); + + /// offset the horizontal position of the icon from the left edge of the cell. Default is 3 pixels. + void setIconLeftOffset (int offset); + + /// offset the horizontal position of the text from the right edge of the icon. Default is 8 pixels. + void setTextLeftOffset (int offset); + + private: + + /// custom paint function for painting the icon. Mode_IconAndText and Mode_Icon only. + void paintIcon (QPainter *painter, const QStyleOptionViewItem &option, int i) const; + + /// rebuild the list of pixmaps from the provided icons (called when icon size is changed) + void buildPixmaps(); + + }; + + class DataDisplayDelegateFactory : public EnumDelegateFactory + { + protected: + + DataDisplayDelegate::IconList mIcons; + + public: + + virtual CommandDelegate *makeDelegate (QUndoStack& undoStack, QObject *parent) const; + ///< The ownership of the returned CommandDelegate is transferred to the caller. + + protected: + + void add (int enumValue,const QString enumName, const QString iconFilename); + + }; + +} + +#endif // DATADISPLAYDELEGATE_HPP diff --git a/apps/opencs/view/world/refidtypedelegate.cpp b/apps/opencs/view/world/refidtypedelegate.cpp new file mode 100755 index 000000000..d89d2cd31 --- /dev/null +++ b/apps/opencs/view/world/refidtypedelegate.cpp @@ -0,0 +1,67 @@ +#include "refidtypedelegate.hpp" +#include "../../model/world/universalid.hpp" + +CSVWorld::RefIdTypeDelegate::RefIdTypeDelegate + (const ValueList &values, const IconList &icons, QUndoStack& undoStack, QObject *parent) + : DataDisplayDelegate (values, icons, undoStack, parent) +{} + +CSVWorld::RefIdTypeDelegateFactory::RefIdTypeDelegateFactory() +{ + UidTypeList uIdList = buildUidTypeList(); + + for (UidTypeList::const_iterator it = uIdList.begin(); it != uIdList.end(); it++) + { + int i = it->first; + DataDisplayDelegateFactory::add (i, QString::fromStdString(CSMWorld::UniversalId(it->first, "").getTypeName()), it->second); + } +} + +CSVWorld::CommandDelegate *CSVWorld::RefIdTypeDelegateFactory::makeDelegate (QUndoStack& undoStack, + QObject *parent) const +{ + return new RefIdTypeDelegate (mValues, mIcons, undoStack, parent); +} + +CSVWorld::RefIdTypeDelegateFactory::UidTypeList CSVWorld::RefIdTypeDelegateFactory::buildUidTypeList() const +{ + UidTypeList list; + + list.push_back (std::make_pair (CSMWorld::UniversalId::Type_Activator, ":./activator.png")); + list.push_back (std::make_pair (CSMWorld::UniversalId::Type_Potion, ":./potion.png")); + list.push_back (std::make_pair (CSMWorld::UniversalId::Type_Apparatus, ":./apparatus.png")); + list.push_back (std::make_pair (CSMWorld::UniversalId::Type_Armor, ":./armor.png")); + list.push_back (std::make_pair (CSMWorld::UniversalId::Type_Book, ":./book.png")); + list.push_back (std::make_pair (CSMWorld::UniversalId::Type_Clothing, ":./clothing.png")); + list.push_back (std::make_pair (CSMWorld::UniversalId::Type_Container, ":./container.png")); + list.push_back (std::make_pair (CSMWorld::UniversalId::Type_Creature, ":./creature.png")); + list.push_back (std::make_pair (CSMWorld::UniversalId::Type_Door, ":./door.png")); + list.push_back (std::make_pair (CSMWorld::UniversalId::Type_Ingredient, ":./ingredient.png")); + list.push_back (std::make_pair (CSMWorld::UniversalId::Type_CreatureLevelledList, ":./creature.png")); + list.push_back (std::make_pair (CSMWorld::UniversalId::Type_ItemLevelledList, ":./item.png")); + list.push_back (std::make_pair (CSMWorld::UniversalId::Type_Light, ":./light.png")); + list.push_back (std::make_pair (CSMWorld::UniversalId::Type_Lockpick, ":./lockpick.png")); + list.push_back (std::make_pair (CSMWorld::UniversalId::Type_Miscellaneous, ":./misc.png")); + list.push_back (std::make_pair (CSMWorld::UniversalId::Type_Npc, ":./npc.png")); + list.push_back (std::make_pair (CSMWorld::UniversalId::Type_Probe, ":./probe.png")); + list.push_back (std::make_pair (CSMWorld::UniversalId::Type_Repair, ":./repair.png")); + list.push_back (std::make_pair (CSMWorld::UniversalId::Type_Static, ":./static.png")); + list.push_back (std::make_pair (CSMWorld::UniversalId::Type_Weapon, ":./weapon.png")); + + return list; +} + +void CSVWorld::RefIdTypeDelegate::updateEditorSetting (const QString &settingName, const QString &settingValue) +{ + if (settingName == "Referenceable ID Type Display") + { + if (settingValue == "Icon and Text") + mDisplayMode = Mode_IconAndText; + + else if (settingValue == "Icon Only") + mDisplayMode = Mode_IconOnly; + + else if (settingValue == "Text Only") + mDisplayMode = Mode_TextOnly; + } +} diff --git a/apps/opencs/view/world/refidtypedelegate.hpp b/apps/opencs/view/world/refidtypedelegate.hpp new file mode 100755 index 000000000..0b6b8e079 --- /dev/null +++ b/apps/opencs/view/world/refidtypedelegate.hpp @@ -0,0 +1,37 @@ +#ifndef REFIDTYPEDELEGATE_HPP +#define REFIDTYPEDELEGATE_HPP + +#include "enumdelegate.hpp" +#include "util.hpp" +#include "../../model/world/universalid.hpp" +#include "datadisplaydelegate.hpp" + +namespace CSVWorld +{ + class RefIdTypeDelegate : public DataDisplayDelegate + { + public: + RefIdTypeDelegate (const ValueList &mValues, const IconList &icons, QUndoStack& undoStack, QObject *parent); + + void updateEditorSetting (const QString &settingName, const QString &settingValue); + + }; + + class RefIdTypeDelegateFactory : public DataDisplayDelegateFactory + { + + typedef std::vector < std::pair > UidTypeList; + + public: + RefIdTypeDelegateFactory(); + + virtual CommandDelegate *makeDelegate (QUndoStack& undoStack, QObject *parent) const; + ///< The ownership of the returned CommandDelegate is transferred to the caller. + + private: + UidTypeList buildUidTypeList () const; + + }; +} + +#endif // REFIDTYPEDELEGATE_HPP From f31e5ef851c78c4f4f41c8b17ee11d3abfc55992 Mon Sep 17 00:00:00 2001 From: graffy76 Date: Wed, 10 Jul 2013 17:30:21 -0500 Subject: [PATCH 5/7] new files (repo commit fix #2) --- files/opencs/activator.png | Bin 0 -> 2297 bytes files/opencs/apparatus.png | Bin 0 -> 1440 bytes files/opencs/armor.png | Bin 0 -> 1641 bytes files/opencs/book.png | Bin 0 -> 1336 bytes files/opencs/clothing.png | Bin 0 -> 1377 bytes files/opencs/container.png | Bin 0 -> 1526 bytes files/opencs/creature.png | Bin 0 -> 2297 bytes files/opencs/door.png | Bin 0 -> 1627 bytes files/opencs/ingredient.png | Bin 0 -> 1444 bytes files/opencs/leveled-creature.png | Bin 0 -> 2150 bytes files/opencs/leveled-item.png | Bin 0 -> 1698 bytes files/opencs/light.png | Bin 0 -> 747 bytes files/opencs/lockpick.png | Bin 0 -> 671 bytes files/opencs/miscellaneous.png | Bin 0 -> 1716 bytes files/opencs/npc.png | Bin 0 -> 2143 bytes files/opencs/potion.png | Bin 0 -> 1582 bytes files/opencs/probe.png | Bin 0 -> 587 bytes files/opencs/repair.png | Bin 0 -> 1115 bytes files/opencs/static.png | Bin 0 -> 1518 bytes files/opencs/weapon.png | Bin 0 -> 1003 bytes 20 files changed, 0 insertions(+), 0 deletions(-) create mode 100755 files/opencs/activator.png create mode 100755 files/opencs/apparatus.png create mode 100755 files/opencs/armor.png create mode 100755 files/opencs/book.png create mode 100755 files/opencs/clothing.png create mode 100755 files/opencs/container.png create mode 100755 files/opencs/creature.png create mode 100755 files/opencs/door.png create mode 100755 files/opencs/ingredient.png create mode 100755 files/opencs/leveled-creature.png create mode 100755 files/opencs/leveled-item.png create mode 100755 files/opencs/light.png create mode 100755 files/opencs/lockpick.png create mode 100755 files/opencs/miscellaneous.png create mode 100755 files/opencs/npc.png create mode 100755 files/opencs/potion.png create mode 100755 files/opencs/probe.png create mode 100755 files/opencs/repair.png create mode 100755 files/opencs/static.png create mode 100755 files/opencs/weapon.png diff --git a/files/opencs/activator.png b/files/opencs/activator.png new file mode 100755 index 0000000000000000000000000000000000000000..0446af22cf7d4238e06d7682ab5ec86127b103c8 GIT binary patch literal 2297 zcmZ{lX*ARi7sr2+b!?S2`22n@r05bxw9> z^a&3Bmx+@u2Id9;@G%8)gk@vqEIv0)41tP1iIu;TIOI)p00=$@0Fguh_{}UuE(3rc z2mq^20HB=-03u$wjn;5xgZ;jl34%$c9T+u5Fu~=8wDV!EKK$z}kN}Mw0O06FAq;FW zly$VLSNgD6cnjljqh$tyiWEP+dLoMS><*1|p{VYgzjG-~6k=+-Tw27pJha7ule}iJ zCjHo-@1Xm~92G#P9X3(>6-s7(vyD7E^(R zY|+H&S)R1roK?+@EQ}5zxj=k?*TJtLS8B4(0LhYFtdwhEGFBDkQ_??mI8^AuH!gID4Sc&3jLI6eP)tANo{PpG~ zaSm&o4Q=0&PfBZ$R67^YrGvI?xmQh7k17<5#{Iyk(x-J43&iRoQPZs6|=c~?~hpWO<)=%C!K4rHq0*w?(Z zOC7`(HWg9=q|J4gPT|rJLH50I$Zb{m>(J6qH** z;dZl6nk-)HhLtzN`6@^G<#C2L5n2$7PHJ~2W*Llvw0!=N3Xu)rCJ08YJdw$~&q&n8!U7?6S7tH0Um~iLog$FC%$~rzyzd zvfo@`qXO`LBSGVy1fHixQF0gKQWA`A32wqu($dlna2G#U{+w+3Gq%HBBl(zo13KOf z-l!a1;>{F0!(a^q%~^@37a&2P)2x5U9HHq{5;3eeD+()`F}UbtW=56ai4&d2AiepB z0wfp*>a=P(j4yAAP{>$tIkrk|l;De4)8qFz(Q@?cc)uh-_?hU{LPXkv(j{s%c6C{L zIR?AjlX|22uF3}(;Pc|wj0|D=?=wHA#-~&t4V8|3CJ3dl%myEZyjlBQ+g`Xb z;3p||IVMz>-}HQ`Lu6ZGDuU~^h_-l8o=9|iTO2|z%dF(v;cE+%hIucUFb$8ron7f$ z5~lHmP`>0ve|NWu@53V#4+Jkpka>lkP8py7A|4y%eg!h9Ua-cl?9l9-do5%mzS^bF z1C8d5eJqpnMK((!5^oJkOpf|*ZhD4Pgktlw2;QqSh?}%JPxWwN-IuMS|CB^n2h7Cp z_RnlIe0#S(-Smh4XGdaiY{)ABwbH{Mde5LDG*b*3jK=LyH9C*t;xzfVQ@FPv-tI1rlDjxq?EYBlwLw^!DnfrR@Cm1rW$W&R2uH zttxR3)!8%fUyoNlrYE|+g0B*SHCvnK(~IZ0>vcJ99R)9Pbk!=LWFw=BT^W2`26E3u z4GTb+=~JG;p}>3kGNR=`U*p);x$u7SzN{B|&UTv!R-76axHpn}NnkM0Q?fX+!N&7}ZvfUC4+I1RD7!v(^TA=g@XDUvE;$?Uv& literal 0 HcmV?d00001 diff --git a/files/opencs/apparatus.png b/files/opencs/apparatus.png new file mode 100755 index 0000000000000000000000000000000000000000..3cef537e140428563f908eeeb08214999255a7ae GIT binary patch literal 1440 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 literal 0 HcmV?d00001 diff --git a/files/opencs/book.png b/files/opencs/book.png new file mode 100755 index 0000000000000000000000000000000000000000..3afa9e8aae15c8d494e6e6e338890baffde4cec7 GIT binary patch literal 1336 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UV>C6dj$D1FjT2AFf_Cwy$!fk$L9(CXhH%*b7CIvZ#mho_5UNW|f{VYxohp%Qg@@0TuhSh&R@ z>h6yffp$jhJZ;8>0Rc%DBDj-vyAL0kab}~B(f=8lN;792m~>R9Z^e!szMCiX9GRh` z{Q3Mp-C*J7-lPx-p57A-(J`4Tmo9z&_4wZ0e0z4iOrJZypU?X|XY%(w??2l-zsG&2 z|9^GC?7J2wCK0X)2`mgONjwZf&l4CJPoF-Wtt>z9@87)2*0VBpb)|n^oq2L)-OQJ> z4Me09Ei)LEnUvX*E4@Juv-7op_j!COdIwkv_8JYQuMiK;`;OM>C;PpTzU~v zy6aC@Nq25;?yTeA-&lS=xI6v9^Xm)4Rwm}<9}SO>Yrp)oDf=Yn{NvrXKXc#U$b0b2 z|MHEy|0JeOoAzMGKUpqru2p_}j6Yo4|Lwp>^Ei2{Z?`r+?lCk-O6Y0qI1s_%(jt(o zz{$_T^q`W}X`#TM*RKP#rhZsgDaga}XMW9}%)2j+UR$*)`puo`o>BE94;&k z4o4gqB2x6$aWnBVG4wTiEoBjGj+)zR;~V$QdD*7P(bE=OPWpS|N5e)56|0yxF;)`{ z8#E4aoGj=%?AWq*ZMC(I*y(e=;ssm&zqstbZM&?32OqoA+_w2WN3zA|wqF-6^sSqB z>ek;o9-B7*s5p>gw)*?+Z?%D8QDHLgbZ!Oa950eFYKu5z*W|bU_B!1w=jv)7&z8Sr z6c8DDbMx+%F9p38|4p+|d~~svVd1`o?@Ee`H|xbR&e?n1Y(Yrc$4@FfkGAkX&fKzG z<({VQ-LR0&i;EPNvK&7Aetwprx&365nK9K(9rs;-SEzBc2swW|{7&@y&zmZX%Va&lI^x4CdTxzpo9?)$n`?@wswb45mSeLS^M<;yX(&aWOi&YkxrN{1a` zVZHw1^Sby4(o#|_%C+tJGkny1L#j{oi0qB>XbP5*`@gBnKtR2HTR^l$d3Ii)hNj`W zVykcy;ro6Ln*^8mTQRJZ$P|0&VicWn=1@5Aqq<4Qf|Lx~XUMwDi2sp%^>Jan7zf+d zL#xy;1jUB(HXm&8ah-Pf;kMgv|1v1-*t^iJ@3F|kRmOq`69Po#xU={1EHO#K zlZw3yt1qs+n^v_Y<=?d@n;v{?shGR3MN3P|DD1%b;Qdh!%$%QFL|{@)uZ=j-n?&6R{5(haC^jA$?ey_{(D*ZL8S5a2?^Gq7sb=g z6+V6Xl&k-K!l^G0878RyFuwQY?~nIK?Jx2yf4))e`4M12p<3b^QIe8al4_M)lnSI6 zj0_Bobq!2)jm$y}&8>`p$Uxh`$jZRL;}}mFiiX_$l+3hB+!`!rZ#f0jAPKS|I6tkV oJh3R1p}f3YFEcN@I61K(RWH9NefB#WDWD<-Pgg&ebxsLQ0QSUK-~a#s literal 0 HcmV?d00001 diff --git a/files/opencs/clothing.png b/files/opencs/clothing.png new file mode 100755 index 0000000000000000000000000000000000000000..88c9b6ab8b719c26e799946ccb5d7be16680574a GIT binary patch literal 1377 zcmV-n1)lneP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qQF!XYv000EgNkl6%`P1L7nMHCCES#qK*i-RU0vC-3CExWf8+FvNUAT+>peiV2ffU0feXL z-kDH>XuwRzFMfFEW_j=XJkL4Ld(H_15cWCOX9Z`4e(Qyn8+Mw6B;OJ2;wumI2l;l*+YD5AE z2>6NN5{cZZ*Ei$Ut9i`K%wu+T9$xP(-oEu>WW(trlra>Dpl@*__&0@ z^70xa2$Im%H2|yC1+&?Ku`xS_hMuFR$An|Y>LK7KTO%W)10uo^_AS{|?jBv!s3oFJ8QX-ToRj+Y}x@9zjNi61xibqO7bMq#F4u_DKZvP>%@~M&pGg(9y1JvF(UK_ zIy*=3=+OweyN&d_5gi>vXllBPjp3Vp(a}6@Sb`vVyrkp@0&-wsVG&bPbEJ6YgWx99 zpD-HTlxG*Ib&xtc0ozFNvsJ;{+lTP*;UFG77(iRwAdwlywQKi~m8nL=H&NqZlymXH z1BZPD`GuI9dk44s{{g>$zYq8B^->yoAeAVPowd!!ixr4D4@ksvLuqLR+S@xR0^aw+ z?sEN2X?Xd`%KhLiE!||s2B_5qh~o(iOO=o{1YMsu+w<}{w>zEFoZ1ZDk0BPzAxsg!Su&yjZYCv(v{jWSP+NNv4#z9BwsavcuWlE`@0o%7?z z&q1NcnXa$D3>Lho=pfym5=2GDX#KbWbs#Yz#VrzvA(JURN@Y$B%kuK&I~4v2a=&|B zhGUg$wP(SeAreVy5)*_TUMwGxkumP&1u1|4Z3vI!@pG4N(CKbd_&qS0Tx)i_KkT)& zXXvQ^+WqEDk-3{TM!a8$K31zQUAjr(e?bOxtm&$)G+eM*BWOFmc<~06RTml19`v5C zG+cFceLw_)_JY+mT)1$Zs+@x>u`4Uw@*=Ym{LY<6sH&<9oxu6?*C_mUGT`%o@)`{M z)~yayR-Ou-z`1i*Df~7vpmnLXuLbKf%*>RQ2@np$aCsR^Ax-KmS5`p(Ybb%E=2ckyFsb?5}t>h0LK?-2Ix zIf&xo11R2Ig55>?sj=+Gu3h`M(X6mw4+_|oU(AhXJ8A9MQ3RDLCv*Zd&3dx3zGrBH zVKP%kY_XU^eiTwU9wC@CRH&~iIS0s6$}j=o{&p%umeK< jKWHxq6(HFAUkLmQ{#pGRx(|VW00000NkvXXu0mjfLUWRt literal 0 HcmV?d00001 diff --git a/files/opencs/container.png b/files/opencs/container.png new file mode 100755 index 0000000000000000000000000000000000000000..2a6ed01eb9969129cbf9edd6d0f404464f97cc92 GIT binary patch literal 1526 zcmVN2bPDNB8 zb~7$DE-^4L^m3s900nYML_t(oN3ECXQ&VRY#{CoeCjbfAH?oigf(aoZ34s8CutOpd z!3YsV5RfoZN@;1`7)Gl@6e(G-$qRCsmH{i9}jldV*K4T__e157n^Lz*NDbeEFeBEE?355Pk*$| zjJd->JU{w69uL-FYQTrdoz-}_-Glr6l^E|U$GzTC+}`HKuA&r(Ijm{2cEth~J`k{} zLQnQ>z_Vj-V)89F9`zO?)Z@ZGdy6F+z4;KwZvtTD(!vA_%e$J_!siq|R) zNkeZGrpyxCpPt$t6@I-X3(Yp=Y`$7JMApU<5>WtIT&$Ol)>)J@SGKzFgx+@opFY$c zF>(UG+HAws%?=##tVW4WJY!ezN23XeC?HoW9>3Dz#M1-Kcz$}vJe(xl{a$xi+ZW)M z8m+iMKi6r|ms_1USegoxlsg{DiLe4Z>GHnw%~_Z|(T~|PyYcu?8z%b8V@6KkV*v}k zt2blRpMlX0W}Nq%vD>AFL&5J0CnBtXHR9l{ETF-v3Xz0+LOT#G+ZWruIPzEFr>pcROcsPa8DSkD6^;~{=?{ZTwmlsD zctr}zwL*%q107Dyqp6`ym>O=6nQ*ZpC-9F;btuyam zDA3`Pqs^Oy)+!k`SIDrbOp3-52?9l8)EA22cL`CKC%`%8>Tv1-|Sz8KzD%z|DL|B$hO+!WzJtyP9#sR6Bd$!K=S(Ug^hjdmFVRw?Q; zrSMxMsLK$e)+9!aQ3Rhsi0U)}ym|quQu(OR@#wS9MX8#D961|$VZs1o0d)6@>vpPf zyU&XoTMPcF?U9NMIp>FqH5hTLG3-*|{X8Z1I~CaLNWvg3+LO!!`6golPx#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qQF!XYv000PRNkl%Q(MegORbpU~%{=>`5}Z{48Pbrh{0PCTBmuXc{P>@uxXjVBg~=FMY{&iDES${ILcw8- zQs30Uta_V>_sYQMbj_x+?f_zg*`p0Q1y&|SV1+gUA8F*!@VTyvXi>vwmN-0GS%^B7 zWHK(8)xJGVi6>2^^y6A+!`(_VHtOVv<}%tV75vG*3KQ0ctOs=oS*#i1p^jGV*@ie4NYGLcs8U z)j!XOXU$IZm8YRQUxV*+)wt?NKxp9HSBH#B{Ib}AE|U^+R=}GRmRR%_8*rOEH}jLR zNhLxem$A(&0IGbIvEpaHu6EM!M=J{Ow7C?+i>&CcNG0#8al0%94Qd%FeKsaODtZTg z*&dJj=rCL>NWz0fcAQR+#sym(?#)ZbP`L@;WhdgaDH<7k_A`p*6#(_ZED63mSYyHS z7ANjioA6U*8XhdM)9@E-D$!GtjGIL|j4dl5rO$L{PQfo`s&L*Gi#tvuewt^&rL1_| zud>qcQ=}S4lf$t`BS8W;@Uo{i-Vvcq7Q(ZKhfe%lXQKn4GVgO5Fi>T}V6~ZsQ<**E z04RZ^3VHosI}-7zp_o>CMwAp)73H{f>lQeH0XSlgcK3W5z9(5uf1}P+mY2gI5zu8n zpB{tOSRqvGfPPQ$`4l1bvREPLI-jp~!w0L!Mz+o>9P-QWQg4V0~+;%me)1EC08Sk$& z;W1IVr^!%d_m%lf!L5!KpiLF_4t#f<0H4M1q2mOMN3i_cBbff}G3N2Q$453?wR>CyjH|PQ5Xk%NL4zCA8d&g zAchst@kF_ev*L?uq`UytS`B`_r@v5&OmaFUcRyC-~C zEdOl)#QCn=oo^xml)L@^tp)30Pm0I*a1Rz%mE!S(L5vPw$Ax1Z*x6Kznp_L!JItuE zr=c>_fY!QVbhdp=!;kM?ja&=SO6L~niHG=tZ;c9pk}>y;pWFXyZFu;%oZtOlj{|vn zbbPWAuYY?CXGsC>e18JJ4Bf(=D_^4L;vw8PvmZa4+>I;8KEsJn*mdUT_-`x#RInq9E7a z^jLcNEU+2y^3gp^zIcp@d)>Hp{wS)-a#3EGg;mR{(Y|gewymkh=9W5aY^uT1>OACH zQ;=`d;blImfr{Kps)*v}bGNmG5 z@-)tB8&VEs(yCrQ9_b+gjJyLM=su3Vt6!n_@)6uT--+v|_t9E-AG~X4Gqh3C7rqwJ zJ1y{xEJ?_7eQZfY+lFRZ{Uf~>=*<5Jd`X2JB?=*;SOKnCt>esae&g{19bRu*1iM~C ztAFIql|KaE-?|jKNHLBOi>ACn%?~j9-uf!FfHWcCh0%FTmM%1TkP?2lJ?k&w9?D;>IS0Fnz z0VOIjioY)>3cfc!40@iAbv!eolBlp@3jT1ZgN6^xdwVhMCEoCNb395?RLHaHr!tM& zv4YIBp?sTR$f{2m%Su&GIpQPGloW|hatWOYr?z5>ulvBv05WBvUEh!!(J;B5d%|xP z>##XRffychz?Y&+Wx;=rWCsj1Dg{2_&15rb*#4(K*aGT+PQdLji-TOXagxc!abncO zh$d5sH>3)$<%^%AD<(Yp2s`Lns T@6(>h00000NkvXXu0mjfL9Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qQF!XYv000HbNklh*`X>N0%ywp< zIcJ7hnVs2SHfBHuFfs~=2;znth*Ydw0f`!GZEaeqwM}grZ@Q(i>4izt^v`eGn5gt6{swDEIg1d$QooO--+bdF}oFu<6B8#e>!TF?@U^jgO|2`0!u? zHxI;deLRRWWhZ+4`WNk1^?mvuIYKrSz$&eT?3!m+NB#KxWFFrv4&bW`W!zmT;?8VV zf`7oyt?3kQAML`8$tdP~1o+IVXIZzdw3&zv1rVH_m$weZ8Mt49-w;q5(PT-@$Pj90&m@tVp;BI*jDey3dA^V^4$_;z_vs`}z^ zJ4)>a3`R^?=yT%Qh!%z(Yr9lVY>=zIhG&q*C;B=1-3neQC zgB-$ERic)NngRkg&AqqA+9fzmJK4Tb<*&lemwC(=?dWXNO7K%fD~@N)a2b^MWD7{S zbdRX_Wc|vJ2PM|udbY2Jll5=(+L3l@Fq^kvzF@)0yct1@s%9H%I#BfMMXLO>xjc>* zc+8Z9nmw-vUntqIyTgE8F@pp@kuxLCt3=rjP{Mt3yh{q2BTT@tq99HCs{^+YoNOof zuBcvu&t^@H37~kbCfwn?U2>rjIN3hR;3E;e1fR(m(P3}Efr3{rQo_BzFNW!y4TlT% zwX3#Sw%bS6WOD7Wi(heUc zQ)Wyi%~HHl!c}`tSB<9q_+J$tN$WA4=h5wR)d--0fe zRwVdJ#fyog347RS1U?njqU=#&z^lf-m=;q}4MJvx{3vFdOeFX+d)165j2Mp_Wmit{ z$%qDhu2%Fj5d^2dgQf-r5PXrnXvX6PX|YrjZX?^P@I4_lwzesm3#}4-BCJNB5dmqZ zRwVd^0q5FQ+pOoW!pDOu^e_SB0>Q^aszwE9M1r4V&urRiv{>X;PVlinD@qQ9Yy=h-xIl)K$N^}b?k_!YMYi~unp%DQNjY#m*J-oD1 zX|YhatiNjY;KM!z3VbtqoJt8!g8YVN`3@unwMg(&>}^LYwGz}d1mEFlLC)5UlAw^_ zBTSHA-++Jw6F~5J_N1Ol=&?TK682UkY)ZtfN_1Eih*=bf(lNInVroIy)Qpg^8G|l` z1RwS);A=<#uNDbD$DY>JY?tg$>2WB*(k}jI+EqiQdey1}SGBzgCr5nxCiyL(2PCc5 znT+Z0-v1AH#oY`q*MI<fLB|Fy2(uPY8-j)==@?s^p4NI1 Z{Q=FoG|HgC9clmo002ovPDHLkV1hYA1sebW literal 0 HcmV?d00001 diff --git a/files/opencs/ingredient.png b/files/opencs/ingredient.png new file mode 100755 index 0000000000000000000000000000000000000000..6b36d008d26b94b7c0c1f1c2d6f215f24ca08c94 GIT binary patch literal 1444 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 literal 0 HcmV?d00001 diff --git a/files/opencs/leveled-item.png b/files/opencs/leveled-item.png new file mode 100755 index 0000000000000000000000000000000000000000..7b8e68e60543867519ed7518d0061c8a21be3b60 GIT binary patch literal 1698 zcmV;T23`4yP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qQF!XYv000INNklc2^rkbttJT4A zbfl385<)_Ngb+x=5)#8=2_T>#P(VZ~;BJvBt;L0cD6$q2M5z=gRZyxFMX0qbiW&mQ zCKgaD;B=mz@64PGArO)aF21XioZs_q&wIX)0DNT0`FzzXfvdny8mJamM@RaklK*Og zB-Y^}vL=6}s5LmyeMIibYcThn7QsV{={T_f#EO%59A?&w#>9(7Yl7!Zgy6xwjAT;axBOn;FII^b<^vHsa0LJ-mC}jaRxF1gJzhDoY=) zh=8qr!sdtf&f(wJ&3HS06aNfV((viAHX5EsWk%)eqBa*!erHh$NMs6c=V4v%MNABo zVq9B{(dUI2?km7h?*;fPg*r>%77Jh+E;3B^zOMSP9^Tu27Nr-G5bW>t$BGM}val+^ z=hF{IldTXD%=zFevzrSEu%C_9dj-Koi?iZuA={O9-cq?5q+KK@TC0=dhTb_ z@W*$*!=pPVabR!Ydxeajznln@0s_@;`FrBG&P)u{P_y1a&3y}oo)j+&?`%GShc`2E z;$R2_j_ejwB9;^&7IIoH<|I%NH{s3rBfRRbr|Nv3hPO3k;c$950@ZTxcs!_;o=A-K z$F1v!z`!3gW}vO%7|QeFp^)=CmU72M1$asM4XwAn$J8isxelt%)p~egUNYR>h2Zn~ zG@Q%jg2Um!-rgQgd@fFBMuCC1)*Zp!8;4MGE)F~nYh*DIMgpjsS2zBAoQk@gh7b3Z z8AQGm+|JGpwzjr#p>K+k1NzPz_6oXq*1+GD6JNel7niC}q4sBLPWq zDlM_sf$k!c4#&)SX>Ovv=1kfNoNe<3DyZ3C3VxL;!8V0JYb0QItWrz7-ITq~H<{v` zc!QcV@WLOWO~Na4b|J`j5dn!YO6};g+9kbxp~DrPjnmhhz@x+DxKXrcS$M^nC@4I* z#wCahl?@K{RxP?%7Q%_i6lBNH-A>@^*RMxTW`tSr^6VW5@a7wrfcntreDT*MYNh5G zY_-MU#AJT0NJW632wt8}Q2Dr^=F)C@&dI3FZ#YtOl6Dd~ftQ_%gqst))u;z#636ta z;;-?%vp~O6mx416mwR#t5_kIGY{qu8;U`kmM1X!x>&K9IbkuhF^wS5q^gcHSzHZ$* ztX;bnR#sNXKB8GR@{+7@sHEKK`TM}Yiv7F=`K7rD%fgAnk;obNnl)<>9qK`w44L!A z(oW#t?o~m+Vg0n^E+7xYuJ*dhf;~nnb>U(mX(y2r`0CZGk+pxDNqFATVDPqB8{Hd> z)-g$sL}=fcc|c>dQWttVNjr&rIXH=2$g?q8#U?K%B4@h@xrE!7nxI1QnHZDazEs-t zzX?G?mk07*qoM6N<$f?F6ad;kCd literal 0 HcmV?d00001 diff --git a/files/opencs/light.png b/files/opencs/light.png new file mode 100755 index 0000000000000000000000000000000000000000..c606fcd98737296fdd6d642e343e95f50108ca58 GIT binary patch literal 747 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyacIC_6YK2V5m}KU}$JzVE6?TYIwoGP-?)y@G60U!Dss^Zy@@{=eG)|JtPgpN{?i`||&{Q~#eY{CBJ7|LwZ} zua^D)aqs`vz5gHd{(n~T_io|;`xE~Ec<}%0zW)z8{y#4Gdq4mGz3%^iU;O`e`v1e; z|Bnj(-pl)czyJULSO0%J`Tuy{zh||7AJzVUwBY}3^IumT9v^aeeWC8n#imCG?S5aj zJ-x>0?+w?#H{Ji<^!Rfp`tQS{zt8*sKgj$0v}xZ${T;K-ch0f=ddcJ5M%%L+tpD7O z{QDs9&y(iA4@>_(p8)hudYNSnkg_TX@(X5QU>38oW6=uPxhYsKaPr4D-TE2({{G#q zmwxo$-y_ogoBsaYz^qpD`*#)d^vi$$UXJ(@7Z*6~)^k4TvPuR!pec+=-tI089jvk* zKn`btM`STDW`2V(BX_y!Y@pyAPZ!4!i_>pUxk@z!NVGoW){sbOU}Rg+#K;!wwfVoP zWx#mQ{&{c%6UuqIPNT3vuaa; z;exzbyO?Ev2v^uYXk_^5D8XiTNaSeYmAHKYp$6@oi!yY9?o=&tjVMV;EJ?LWE=mPb z3`Pcq#<~Wkx<+OphUQjAKxCwCU}R-ra6eKu9z{cLeoAIqC2kGtSe8BpYLEok5S*V@ pQl40p%1~Zju9umYU7Va)kgAtols@~NjTBH3gQu&X%Q~loCIGkaSGE8E literal 0 HcmV?d00001 diff --git a/files/opencs/lockpick.png b/files/opencs/lockpick.png new file mode 100755 index 0000000000000000000000000000000000000000..d9bd27f5e9285041b3dde23ffca8dd11a5fff605 GIT binary patch literal 671 zcmV;Q0$}}#P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qQF!XYv0006GNklv}FFDe4l0qTqBEJswXKxog8kQM|hig+}dm8ybxUT>1T@Q&Ehr zCBO{tbUNyw0cy1xWHK2zWZ5G1061Q+*Qa|oMqYmD!A?dT6{PhLN=QP^&iccOWptg002ovPDHLk FV1nj+9jgEU literal 0 HcmV?d00001 diff --git a/files/opencs/miscellaneous.png b/files/opencs/miscellaneous.png new file mode 100755 index 0000000000000000000000000000000000000000..744bcd9dbce493e23cc8041f1ed71dfd4ca69304 GIT binary patch literal 1716 zcmV;l221&gP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qQF!XYv000IfNklR_dtc43K92zfs;y&>rz7(bhQmb$0ZlEo*sbnb$t*K8b=?g=!K#U zmtlU?dXS3M4`x+B%7T@+jx@Rv{8{G+^xPTt!b|f{L3r?dI9S#Rdy0O6yv$aRh{)%& zCLq*ok4Eq-C%d8l(I^K$Q~d|jRdmC_?VYgP`8A|Ew?R>MJLG1xLS{+}NQByVhLv8Wkh!^(gc#HVL005zOir5*Yhyg2(N$R%o; zR0NM`ly)~Rv5c^AkYL2?84J*>jnBU=Y4Fy3eA-du2p(cggrwL!F8!+)odA(QK`(XG zff!Rgn~?x5X?Ugma)n<;gvL!N zCr0mHe9ghz&c2ugkBiI#6>gvuGQ$|EIZC@ly_kz!EKt)jEHc;QzSGKpr{kOJ9&$Cm z-SYPYc-D#l7{RL_~ruUB3| z{oco%$rP<`2CHEnZPG_FrTI5F_)6zt5b|XV>UIRz;mIK4>zm%)J3b4*rHTO!VSxE_ z5+K&G5KP*zQL7=wttV}xm_W#sZfSx2J9;_z#?0#=!rqP=f}2#U*rt>BzHjOIB*3h< zQC+VaOxvf&57r6he|SH}dno`?rew@2s-0OR3(AKJK63SjI0 z2`*EPv|Vs<@QWwj!Yd2zfnIH+^4A}o0Czg}u}x>8P~`u?T_0QbQwq?MrmlkAD(JZO z3Vu5C+zYn{FQQg{Rxkmcp41FNft*;oT~2S;2BBf zVAMrWU zNqa^ObvuH~L>fveR5LNgGGOg>L=dFlT+WyC-iO$(kFgpfsOIDS(A?O^&3Z}JEf5Q3 z-Z@9`N?er62On zdAxlq+i(&lE$%yzv2dv{e2k5Jg3I|OK(Dc0NpDnhyf1n$7Wd95{laun;D~fz! z)HWdGRtmvw+8p*~gE3f;Zj#GQTL4PEhA`0$`+K0_@MGAsxgC<{Y=K}?EbVc)NXr@^ z@euk8=S5f&b%t#?F~bj%z1QWYEdZAh!~2R`;doUy>?^(tsq=PnTdgSP1}uoqLtsWF zH8CDIDRBZnP(0)dXi6s}6uR51QwpH2vI`FEx(^u%Rjhwwj9O`?^h79?$ll}gmbHKf zt`yG$UZC*JOyFK0VAGyx)Y_=(-4CIvyc6Og*8!g=fb^s-aHyaYcC**1{IpgMo)})k zZaI}3;}JE;re{R}yHH#^H(!EXg+HQ{Gd4>y=v1L&@4~}%Ijp^khkP{|U&IAyRHj0+ zE(Q!*8$&3JkhQ8Fa?@Km0iMWFx64IlO2j9x`|_vLc_u(A#$P7Heh!7XO|UiZ4hKig zmdSoZptR2o&SS69${`{D?Hz8mPk_Y`^6Y)~#Sx!B*d1XJ`XBxawMiN9dad;bC>OqY0Jk>APy0000< KMNUMnLSTYejw}rT literal 0 HcmV?d00001 diff --git a/files/opencs/npc.png b/files/opencs/npc.png new file mode 100755 index 0000000000000000000000000000000000000000..7a07f26dfe8bc621c3491c28ba9811ff92893b97 GIT binary patch literal 2143 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 literal 0 HcmV?d00001 diff --git a/files/opencs/probe.png b/files/opencs/probe.png new file mode 100755 index 0000000000000000000000000000000000000000..01536186dee10fc1ef7d6544af18e071ccc5d006 GIT binary patch literal 587 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 KB{z9S9QzkRt&Y3^ literal 0 HcmV?d00001 diff --git a/files/opencs/weapon.png b/files/opencs/weapon.png new file mode 100755 index 0000000000000000000000000000000000000000..3d4b534661076843ba4db3fa81c056d44e108cb2 GIT binary patch literal 1003 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qQF!XYv000A8Nklq}E{9LD_<`Uh%WGR-yV zhTGJm%Q@$~oTkTJ+;mM7O>=a?Z78!f(1y*;IXzo1&YN=%=kq+z_i}!501y|;t6IUg>05{&O4+%EIu*Yzrf|HN zJMez|CM?bMf@AU)l$WpXFUWvB028fu<4$q^BHN-43TU0rasVQNfD#svPD& zbW)A>pi>Sx?9`ynX-^=Z&$rm^cF^l|Th}fV@X68!c9Rym3}uj&k+vD=oK^t{ZZes` z>-ECS%nYcitGAl#acb18uN&cxt_Uy=(-Lgq9k>Sq;nUO8V6|GIQZCaC)q7KHN ztH7Y)1IAACPX{dtTu`ZowmbL1CnhFfY-|iF2x6;Nkq>YCw(MR zP<1C=i^;18Evo|yz;WC#GBV=bD?HqvHlhR&{Mq2(I$iLH77>Eq?&$a(4qj4RJQU9L z_UC&_V6Sk3Ao?SL?i z-~|GKJDSe@M>4fq?VOsL`Uj3`PTptG)o8nYCoU^9)2UP{owYSJ^JQYOStu0RVg*OS Z{s6hhU#DS+dwl=^002ovPDHLkV1jak%3A;c literal 0 HcmV?d00001 From bb049806dfa261769c1e71b3582551b55f1ea5a8 Mon Sep 17 00:00:00 2001 From: graffy76 Date: Wed, 10 Jul 2013 21:13:59 -0500 Subject: [PATCH 6/7] Repo permissions commit fix #2 --- apps/opencs/CMakeLists.txt | 4 +- apps/opencs/view/doc/view.cpp | 11 +- apps/opencs/view/doc/viewmanager.cpp | 12 +- .../view/settings/usersettingsdialog.cpp | 7 +- .../view/settings/usersettingsdialog.hpp | 2 - apps/opencs/view/world/enumdelegate.hpp | 5 +- .../view/world/recordstatusdelegate.cpp | 117 +++--------------- .../view/world/recordstatusdelegate.hpp | 35 ++---- apps/opencs/view/world/table.cpp | 22 +++- apps/opencs/view/world/tablesubview.cpp | 2 +- files/opencs/resources.qrc | 20 +++ 11 files changed, 89 insertions(+), 148 deletions(-) diff --git a/apps/opencs/CMakeLists.txt b/apps/opencs/CMakeLists.txt index 37d925662..d98876fad 100644 --- a/apps/opencs/CMakeLists.txt +++ b/apps/opencs/CMakeLists.txt @@ -62,7 +62,7 @@ opencs_units (view/world opencs_units_noqt (view/world dialoguesubview subviews - enumdelegate vartypedelegate recordstatusdelegate refrecordtypedelegate + enumdelegate vartypedelegate recordstatusdelegate refidtypedelegate datadisplaydelegate scripthighlighter ) @@ -80,7 +80,7 @@ opencs_units (view/settings proxyblock abstractwidget usersettingsdialog - editorpage + datadisplayformatpage windowpage ) diff --git a/apps/opencs/view/doc/view.cpp b/apps/opencs/view/doc/view.cpp index e82629ff2..937d9b341 100644 --- a/apps/opencs/view/doc/view.cpp +++ b/apps/opencs/view/doc/view.cpp @@ -264,13 +264,12 @@ void CSVDoc::View::addSubView (const CSMWorld::UniversalId& id) /// \todo add an user setting to reuse sub views (on a per document basis or on a per top level view basis) SubView *view = mSubViewFactory.makeSubView (id, *mDocument); - view->setObjectName ("subview"); mSubViewWindow.addDockWidget (Qt::TopDockWidgetArea, view); connect (view, SIGNAL (focusId (const CSMWorld::UniversalId&)), this, SLOT (addSubView (const CSMWorld::UniversalId&))); - CSMSettings::UserSettings::instance().updateSettings("Editor", "Record Status Display"); + CSMSettings::UserSettings::instance().updateSettings("Display Format"); view->show(); } @@ -392,12 +391,14 @@ void CSVDoc::View::resizeViewHeight (int height) void CSVDoc::View::updateEditorSetting (const QString &settingName, const QString &settingValue) { - if (settingName == "Record Status Display") + if ( (settingName == "Record Status Display") || (settingName == "Referenceable ID Type Display") { foreach (QObject *view, mSubViewWindow.children()) { - if (view->objectName() == "subview") - dynamic_cast(view)->updateEditorSetting (settingName, settingValue); + CSVDoc::SubView *subview = dynamic_cast(view); + + if (subview) + subview->updateEditorSetting (settingName, settingValue); } } else if (settingName == "Width") diff --git a/apps/opencs/view/doc/viewmanager.cpp b/apps/opencs/view/doc/viewmanager.cpp index 5530b426b..6d06e4248 100644 --- a/apps/opencs/view/doc/viewmanager.cpp +++ b/apps/opencs/view/doc/viewmanager.cpp @@ -13,7 +13,7 @@ #include "../world/enumdelegate.hpp" #include "../world/vartypedelegate.hpp" #include "../world/recordstatusdelegate.hpp" -#include "../world/refrecordtypedelegate.hpp" +#include "../world/refidtypedelegate.hpp" #include "../settings/usersettingsdialog.hpp" #include "view.hpp" @@ -124,7 +124,7 @@ CSVDoc::ViewManager::ViewManager (CSMDoc::DocumentManager& documentManager) new CSVWorld::RecordStatusDelegateFactory() ); mDelegateFactories->add (CSMWorld::ColumnBase::Display_RefRecordType, - new CSVWorld::RefRecordTypeDelegateFactory() ); + new CSVWorld::RefIdTypeDelegateFactory() ); connect (&CSMSettings::UserSettings::instance(), SIGNAL (signalUpdateEditorSetting (const QString &, const QString &)), this, SLOT (slotUpdateEditorSetting (const QString &, const QString &))); @@ -357,10 +357,6 @@ void CSVDoc::ViewManager::exitApplication (CSVDoc::View *view) void CSVDoc::ViewManager::slotUpdateEditorSetting (const QString &settingName, const QString &settingValue) { - if (settingName == "Record Status Display" || - settingName == "Width" || settingName == "Height") - { - foreach (CSVDoc::View *view, mViews) - view->updateEditorSetting (settingName, settingValue); - } + foreach (CSVDoc::View *view, mViews) + view->updateEditorSetting (settingName, settingValue); } diff --git a/apps/opencs/view/settings/usersettingsdialog.cpp b/apps/opencs/view/settings/usersettingsdialog.cpp index 64b9aacff..05072e45a 100644 --- a/apps/opencs/view/settings/usersettingsdialog.cpp +++ b/apps/opencs/view/settings/usersettingsdialog.cpp @@ -12,7 +12,7 @@ #include -#include "editorpage.hpp" +#include "datadisplayformatpage.hpp" #include "windowpage.hpp" #include "../../model/settings/support.hpp" @@ -86,7 +86,7 @@ void CSVSettings::UserSettingsDialog::buildPages() setDockOptions (QMainWindow::AllowNestedDocks); createPage(); - createPage(); + createPage(); } @@ -104,7 +104,8 @@ void CSVSettings::UserSettingsDialog::writeSettings() CSVSettings::AbstractPage *CSVSettings::UserSettingsDialog::getAbstractPage (int index) { - return dynamic_cast(mStackedWidget->widget(index)); + AbstractPage *page = dynamic_cast (mStackedWidget->widget (index)); + return page; } void CSVSettings::UserSettingsDialog::slotChangePage(QListWidgetItem *current, QListWidgetItem *previous) diff --git a/apps/opencs/view/settings/usersettingsdialog.hpp b/apps/opencs/view/settings/usersettingsdialog.hpp index a992dbdf8..cda08707b 100644 --- a/apps/opencs/view/settings/usersettingsdialog.hpp +++ b/apps/opencs/view/settings/usersettingsdialog.hpp @@ -9,8 +9,6 @@ #include "../../model/settings/usersettings.hpp" #include "../../model/settings/support.hpp" -#include "editorpage.hpp" - class QHBoxLayout; class AbstractWidget; class QStackedWidget; diff --git a/apps/opencs/view/world/enumdelegate.hpp b/apps/opencs/view/world/enumdelegate.hpp index 58f19ff78..b79516a09 100644 --- a/apps/opencs/view/world/enumdelegate.hpp +++ b/apps/opencs/view/world/enumdelegate.hpp @@ -14,6 +14,8 @@ namespace CSVWorld /// \brief Integer value that represents an enum and is interacted with via a combobox class EnumDelegate : public CommandDelegate { + protected: + std::vector > mValues; private: @@ -41,6 +43,7 @@ namespace CSVWorld class EnumDelegateFactory : public CommandDelegateFactory { + protected: std::vector > mValues; public: @@ -60,4 +63,4 @@ namespace CSVWorld } -#endif \ No newline at end of file +#endif diff --git a/apps/opencs/view/world/recordstatusdelegate.cpp b/apps/opencs/view/world/recordstatusdelegate.cpp index 243f509ef..7a84769bb 100644 --- a/apps/opencs/view/world/recordstatusdelegate.cpp +++ b/apps/opencs/view/world/recordstatusdelegate.cpp @@ -4,103 +4,16 @@ #include #include "../../model/settings/usersettings.hpp" -CSVWorld::RecordStatusDelegate::RecordStatusDelegate(QUndoStack &undoStack, QObject *parent) - : CommandDelegate (undoStack, parent) -{ - mModifiedIcon = new QIcon (":./modified.png"); - mAddedIcon = new QIcon (":./added.png"); - mDeletedIcon = new QIcon (":./removed.png"); - mBaseIcon = new QIcon (":./base.png"); - mIconSize = 16; - - //Offset values are most likely device-dependent. - //Need to replace with device-independent references. - mTextLeftOffset = 3; - mIconTopOffset = -3; - - mStatusDisplay = 0; //icons and text by default. Remove when implemented as a user preference - - mFont = QApplication::font(); - mFont.setPointSize(10); - - mFontMetrics = new QFontMetrics(mFont); - - mTextAlignment.setAlignment (Qt::AlignLeft | Qt::AlignVCenter ); -} - -void CSVWorld::RecordStatusDelegate::paint (QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const -{ - painter->save(); - - QString text = ""; - QIcon *icon = 0; - - switch (index.data().toInt()) - { - case 0: // State_BaseOnly - text = "Base"; - icon = mBaseIcon; - break; - - case 1: // State_Modified - text = "Modified"; - icon = mModifiedIcon; - break; - - case 2: // State_Modified_Only - text = "Added"; - icon = mAddedIcon; - break; - - case 3: // State_Deleted - - case 4: // State_Erased - text = "Deleted"; - icon = mDeletedIcon; - break; - - default: - break; - } - - QRect textRect = option.rect; - QRect iconRect = option.rect; - - //for icon-only (1), default option.rect centers icon left-to-right - //otherwise, size option.rect to fit the icon, forcing left-alignment with text - iconRect.setTop (iconRect.top() + mIconTopOffset); - iconRect.setBottom (iconRect.top() + mIconSize); - - if (mStatusDisplay == 0 && (icon) ) - { - iconRect.setRight (iconRect.left()+ mIconSize*2); - textRect.setLeft (iconRect.right() + mTextLeftOffset *1.25); - } - else - textRect.setLeft (textRect.left() + mTextLeftOffset ); - - if ( (mStatusDisplay == 0 || mStatusDisplay == 1) && (icon) ) - painter->drawPixmap(iconRect.center().x()-10,iconRect.center().y()+2, icon->pixmap(mIconSize, mIconSize)); - - // icon + text or text only, or force text if no icon exists for status - if (mStatusDisplay == 0 || mStatusDisplay == 2 || !(icon) ) - { - painter->setFont(mFont); - painter->drawText(textRect, text, mTextAlignment); - } - - painter->restore(); -} - -QSize CSVWorld::RecordStatusDelegate::sizeHint (const QStyleOptionViewItem &option, const QModelIndex &index) const -{ - return QSize(); -} +CSVWorld::RecordStatusDelegate::RecordStatusDelegate(const ValueList& values, + const IconList & icons, + QUndoStack &undoStack, QObject *parent) + : DataDisplayDelegate (values, icons, undoStack, parent) +{} CSVWorld::CommandDelegate *CSVWorld::RecordStatusDelegateFactory::makeDelegate (QUndoStack& undoStack, QObject *parent) const { - return new RecordStatusDelegate (undoStack, parent); + return new RecordStatusDelegate (mValues, mIcons, undoStack, parent); } void CSVWorld::RecordStatusDelegate::updateEditorSetting (const QString &settingName, const QString &settingValue) @@ -108,15 +21,21 @@ void CSVWorld::RecordStatusDelegate::updateEditorSetting (const QString &setting if (settingName == "Record Status Display") { if (settingValue == "Icon and Text") - mStatusDisplay = 0; + mDisplayMode = Mode_IconAndText; else if (settingValue == "Icon Only") - mStatusDisplay = 1; + mDoisplayMode = Mode_IconOnly; else if (settingValue == "Text Only") - mStatusDisplay = 2; - - else - mStatusDisplay = 0; + mDisplayMode = Mode_TextOnly; } } + +CSVWorld::RecordStatusDelegateFactory::RecordStatusDelegateFactory() +{ + DataDisplayDelegateFactory::add ( CSMWorld::RecordBase::State_BaseOnly, "Base", ":./base.png"); + DataDisplayDelegateFactory::add ( CSMWorld::RecordBase::State_Deleted, "Deleted", ":./removed.png"); + DataDisplayDelegateFactory::add ( CSMWorld::RecordBase::State_Erased, "Deleted", ":./removed.png"); + DataDisplayDelegateFactory::add ( CSMWorld::RecordBase::State_Modified, "Modified", ":./modified.png"); + DataDisplayDelegateFactory::add ( CSMWorld::RecordBase::State_ModifiedOnly, "Added", ":./added.png"); +} diff --git a/apps/opencs/view/world/recordstatusdelegate.hpp b/apps/opencs/view/world/recordstatusdelegate.hpp index b67226ad5..a0b279bbc 100644 --- a/apps/opencs/view/world/recordstatusdelegate.hpp +++ b/apps/opencs/view/world/recordstatusdelegate.hpp @@ -5,49 +5,36 @@ #include #include +#include "datadisplaydelegate.hpp" +#include "../../model/world/record.hpp" + class QIcon; class QFont; -class QFontMetrics; namespace CSVWorld { - class RecordStatusDelegate : public CommandDelegate + class RecordStatusDelegate : public DataDisplayDelegate { - QFont mFont; - QFontMetrics *mFontMetrics; - - QTextOption mTextAlignment; - - QIcon *mModifiedIcon; - QIcon *mAddedIcon; - QIcon *mDeletedIcon; - QIcon *mBaseIcon; - - int mStatusDisplay; - - int mIconSize; - int mIconTopOffset; - int mTextLeftOffset; - public: - explicit RecordStatusDelegate(QUndoStack& undoStack, QObject *parent = 0); - void paint (QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; - - QSize sizeHint (const QStyleOptionViewItem &option, const QModelIndex &index) const; + explicit RecordStatusDelegate(const ValueList& values, + const IconList& icons, + QUndoStack& undoStack, QObject *parent = 0); void updateEditorSetting (const QString &settingName, const QString &settingValue); }; - class RecordStatusDelegateFactory : public CommandDelegateFactory + class RecordStatusDelegateFactory : public DataDisplayDelegateFactory { public: + RecordStatusDelegateFactory(); + virtual CommandDelegate *makeDelegate (QUndoStack& undoStack, QObject *parent) const; ///< The ownership of the returned CommandDelegate is transferred to the caller. }; } -#endif // RECORDSTATUSDELEGATE_H +#endif // RECORDSTATUSDELEGATE_HPP diff --git a/apps/opencs/view/world/table.cpp b/apps/opencs/view/world/table.cpp index 1ec0dde09..b26eac913 100644 --- a/apps/opencs/view/world/table.cpp +++ b/apps/opencs/view/world/table.cpp @@ -13,7 +13,7 @@ #include "../../model/world/idtable.hpp" #include "../../model/world/record.hpp" #include "recordstatusdelegate.hpp" - +#include "refidtypedelegate.hpp" #include "util.hpp" void CSVWorld::Table::contextMenuEvent (QContextMenuEvent *event) @@ -209,7 +209,23 @@ void CSVWorld::Table::updateEditorSetting (const QString &settingName, const QSt { if (settingName == "Record Status Display") { - dynamic_cast(this->itemDelegateForColumn(1))->updateEditorSetting (settingName, settingValue); - emit dataChanged(mModel->index(0,1), mModel->index(mModel->rowCount()-1, 1)); + RecordStatusDelegate *rsDelegate = dynamic_cast (itemDelegateForColumn(1)); + + if (rsDelegate) + { + rsDelegate->updateEditorSetting (settingName, settingValue); + emit dataChanged(mModel->index(0,1), mModel->index(mModel->rowCount()-1, 1)); + } + } + + if (settingName == "Referenceable ID Type Display") + { + RefIdTypeDelegate *refidDelegate = dynamic_cast (itemDelegateForColumn(2)); + + if (refidDelegate) + { + refidDelegate->updateEditorSetting (settingName, settingValue); + emit dataChanged(mModel->index(0,1), mModel->index(mModel->rowCount()-1, 1)); + } } } diff --git a/apps/opencs/view/world/tablesubview.cpp b/apps/opencs/view/world/tablesubview.cpp index d139ef74b..8c86acf31 100644 --- a/apps/opencs/view/world/tablesubview.cpp +++ b/apps/opencs/view/world/tablesubview.cpp @@ -27,6 +27,6 @@ void CSVWorld::TableSubView::rowActivated (const QModelIndex& index) void CSVWorld::TableSubView::updateEditorSetting(const QString &settingName, const QString &settingValue) { - if (settingName == "Record Status Display") + if ( (settingName == "Record Status Display") || settingName == "Referenceable ID Type Display" ) mTable->updateEditorSetting(settingName, settingValue); } diff --git a/files/opencs/resources.qrc b/files/opencs/resources.qrc index 926bda064..321413763 100644 --- a/files/opencs/resources.qrc +++ b/files/opencs/resources.qrc @@ -5,5 +5,25 @@ modified.png removed.png base.png + activator.png + apparatus.png + armor.png + book.png + clothing.png + container.png + creature.png + door.png + ingredient.png + leveled-creature.png + leveled-item.png + light.png + lockpick.png + miscellaneous.png + npc.png + potion.png + probe.png + repair.png + static.png + weapon.png From 11178cc470e750120afc701f56a87406732fce0c Mon Sep 17 00:00:00 2001 From: graffy76 Date: Wed, 10 Jul 2013 21:44:25 -0500 Subject: [PATCH 7/7] Repo permissions commit fix #3 --- apps/opencs/view/doc/view.cpp | 3 ++- apps/opencs/view/settings/abstractblock.hpp | 2 +- apps/opencs/view/settings/abstractwidget.cpp | 2 +- .../view/settings/datadisplayformatpage.cpp | 2 ++ apps/opencs/view/settings/groupblock.cpp | 2 +- apps/opencs/view/settings/support.hpp | 7 +++++-- .../view/settings/usersettingsdialog.cpp | 13 ++++++------- .../view/settings/usersettingsdialog.hpp | 4 ++-- .../opencs/view/world/recordstatusdelegate.cpp | 2 +- apps/opencs/view/world/table.cpp | 18 ++++++------------ 10 files changed, 27 insertions(+), 28 deletions(-) diff --git a/apps/opencs/view/doc/view.cpp b/apps/opencs/view/doc/view.cpp index 937d9b341..3c061ca8a 100644 --- a/apps/opencs/view/doc/view.cpp +++ b/apps/opencs/view/doc/view.cpp @@ -391,10 +391,11 @@ void CSVDoc::View::resizeViewHeight (int height) void CSVDoc::View::updateEditorSetting (const QString &settingName, const QString &settingValue) { - if ( (settingName == "Record Status Display") || (settingName == "Referenceable ID Type Display") + if ( (settingName == "Record Status Display") || (settingName == "Referenceable ID Type Display") ) { foreach (QObject *view, mSubViewWindow.children()) { + // not all mSubviewWindow children are CSVDoc::Subview objects CSVDoc::SubView *subview = dynamic_cast(view); if (subview) diff --git a/apps/opencs/view/settings/abstractblock.hpp b/apps/opencs/view/settings/abstractblock.hpp index 36108d752..361339fe2 100644 --- a/apps/opencs/view/settings/abstractblock.hpp +++ b/apps/opencs/view/settings/abstractblock.hpp @@ -43,7 +43,7 @@ namespace CSVSettings protected: - /// Creates the layout which for the blocks QGroupBox + /// Creates the layout for the block's QGroupBox QLayout *createLayout (Orientation direction, bool isZeroMargin, QWidget* parent = 0); /// Creates widgets that exist as direct children of the block diff --git a/apps/opencs/view/settings/abstractwidget.cpp b/apps/opencs/view/settings/abstractwidget.cpp index 94044e267..f268d3b27 100644 --- a/apps/opencs/view/settings/abstractwidget.cpp +++ b/apps/opencs/view/settings/abstractwidget.cpp @@ -19,7 +19,7 @@ void CSVSettings::AbstractWidget::buildLabelAndWidget (QWidget *widget, WidgetDe if (!(def.caption.isEmpty() || noLabel) ) { - QLabel *label = new QLabel (def.caption, dynamic_cast(parent())); + QLabel *label = new QLabel (def.caption, &dynamic_cast( *parent())); label->setBuddy (widget); mLayout->addWidget (label); diff --git a/apps/opencs/view/settings/datadisplayformatpage.cpp b/apps/opencs/view/settings/datadisplayformatpage.cpp index 29257f0c8..cf25237f9 100755 --- a/apps/opencs/view/settings/datadisplayformatpage.cpp +++ b/apps/opencs/view/settings/datadisplayformatpage.cpp @@ -22,6 +22,8 @@ CSVSettings::GroupBlockDef *CSVSettings::DataDisplayFormatPage::setupDataDisplay statusBlock->settingItems << statusItem; + statusBlock->isZeroMargin = false; + return statusBlock; } diff --git a/apps/opencs/view/settings/groupblock.cpp b/apps/opencs/view/settings/groupblock.cpp index 85720ad41..e31e526c0 100644 --- a/apps/opencs/view/settings/groupblock.cpp +++ b/apps/opencs/view/settings/groupblock.cpp @@ -19,7 +19,7 @@ int CSVSettings::GroupBlock::build (GroupBlockDef *def) setVisible (def->isVisible); - mBox->setLayout(createLayout (def->widgetOrientation, true)); + mBox->setLayout(createLayout (def->widgetOrientation, def->isZeroMargin)); setObjectName (def->title); mBox->setTitle (def->title); diff --git a/apps/opencs/view/settings/support.hpp b/apps/opencs/view/settings/support.hpp index 1df0dac1e..5d954505c 100644 --- a/apps/opencs/view/settings/support.hpp +++ b/apps/opencs/view/settings/support.hpp @@ -168,11 +168,14 @@ namespace CSVSettings /// generic default value attribute QString defaultValue; - GroupBlockDef (): title(""), widgetOrientation (Orient_Vertical), isVisible (true), isProxy (false), defaultValue ("") + /// shows / hides margins + bool isZeroMargin; + + GroupBlockDef (): title(""), widgetOrientation (Orient_Vertical), isVisible (true), isProxy (false), defaultValue (""), isZeroMargin (true) {} GroupBlockDef (QString blockTitle) - : title (blockTitle), widgetOrientation (Orient_Vertical), isProxy (false), isVisible (true), defaultValue ("") + : title (blockTitle), widgetOrientation (Orient_Vertical), isProxy (false), isVisible (true), defaultValue (""), isZeroMargin (true) {} }; diff --git a/apps/opencs/view/settings/usersettingsdialog.cpp b/apps/opencs/view/settings/usersettingsdialog.cpp index 05072e45a..947e8cd1b 100644 --- a/apps/opencs/view/settings/usersettingsdialog.cpp +++ b/apps/opencs/view/settings/usersettingsdialog.cpp @@ -56,8 +56,8 @@ void CSVSettings::UserSettingsDialog::setWidgetStates () if (sectionSettings.find(pageName) != sectionSettings.end()) { CSMSettings::SettingMap *settings = sectionSettings.value(pageName); - AbstractPage *page = getAbstractPage (i); - page->initializeWidgets(*settings); + AbstractPage &page = getAbstractPage (i); + page.initializeWidgets(*settings); } } } @@ -96,16 +96,15 @@ void CSVSettings::UserSettingsDialog::writeSettings() for (int i = 0; i < mStackedWidget->count(); ++i) { - AbstractPage *page = getAbstractPage (i); - settings [page->objectName()] = page->getSettings(); + AbstractPage &page = getAbstractPage (i); + settings [page.objectName()] = page.getSettings(); } CSMSettings::UserSettings::instance().writeSettings(settings); } -CSVSettings::AbstractPage *CSVSettings::UserSettingsDialog::getAbstractPage (int index) +CSVSettings::AbstractPage &CSVSettings::UserSettingsDialog::getAbstractPage (int index) { - AbstractPage *page = dynamic_cast (mStackedWidget->widget (index)); - return page; + return dynamic_cast (*(mStackedWidget->widget (index))); } void CSVSettings::UserSettingsDialog::slotChangePage(QListWidgetItem *current, QListWidgetItem *previous) diff --git a/apps/opencs/view/settings/usersettingsdialog.hpp b/apps/opencs/view/settings/usersettingsdialog.hpp index cda08707b..3b3fa5b79 100644 --- a/apps/opencs/view/settings/usersettingsdialog.hpp +++ b/apps/opencs/view/settings/usersettingsdialog.hpp @@ -36,7 +36,7 @@ namespace CSVSettings { /// return the setting page by name /// performs dynamic cast to AbstractPage * - AbstractPage *getAbstractPage (int index); + AbstractPage &getAbstractPage (int index); void setWidgetStates (); void buildPages(); void writeSettings(); @@ -47,7 +47,7 @@ namespace CSVSettings { { T *page = new T(mStackedWidget); - mStackedWidget->addWidget (dynamic_cast(page)); + mStackedWidget->addWidget (&dynamic_cast(*page)); new QListWidgetItem (page->objectName(), mListWidget); diff --git a/apps/opencs/view/world/recordstatusdelegate.cpp b/apps/opencs/view/world/recordstatusdelegate.cpp index 7a84769bb..4e137e635 100644 --- a/apps/opencs/view/world/recordstatusdelegate.cpp +++ b/apps/opencs/view/world/recordstatusdelegate.cpp @@ -24,7 +24,7 @@ void CSVWorld::RecordStatusDelegate::updateEditorSetting (const QString &setting mDisplayMode = Mode_IconAndText; else if (settingValue == "Icon Only") - mDoisplayMode = Mode_IconOnly; + mDisplayMode = Mode_IconOnly; else if (settingValue == "Text Only") mDisplayMode = Mode_TextOnly; diff --git a/apps/opencs/view/world/table.cpp b/apps/opencs/view/world/table.cpp index b26eac913..f188adfaf 100644 --- a/apps/opencs/view/world/table.cpp +++ b/apps/opencs/view/world/table.cpp @@ -209,23 +209,17 @@ void CSVWorld::Table::updateEditorSetting (const QString &settingName, const QSt { if (settingName == "Record Status Display") { - RecordStatusDelegate *rsDelegate = dynamic_cast (itemDelegateForColumn(1)); + RecordStatusDelegate &rsDelegate = dynamic_cast (*itemDelegateForColumn(1)); - if (rsDelegate) - { - rsDelegate->updateEditorSetting (settingName, settingValue); - emit dataChanged(mModel->index(0,1), mModel->index(mModel->rowCount()-1, 1)); - } + rsDelegate.updateEditorSetting (settingName, settingValue); + emit dataChanged(mModel->index(0,1), mModel->index(mModel->rowCount()-1, 1)); } if (settingName == "Referenceable ID Type Display") { - RefIdTypeDelegate *refidDelegate = dynamic_cast (itemDelegateForColumn(2)); + RefIdTypeDelegate &refidDelegate = dynamic_cast (*itemDelegateForColumn(2)); - if (refidDelegate) - { - refidDelegate->updateEditorSetting (settingName, settingValue); - emit dataChanged(mModel->index(0,1), mModel->index(mModel->rowCount()-1, 1)); - } + refidDelegate.updateEditorSetting (settingName, settingValue); + emit dataChanged(mModel->index(0,1), mModel->index(mModel->rowCount()-1, 1)); } }