#ifndef CSM_WOLRD_COLUMNS_H #define CSM_WOLRD_COLUMNS_H #include "columnbase.hpp" namespace CSMWorld { template struct FloatValueColumn : public Column { FloatValueColumn() : Column ("Value", ColumnBase::Display_Float) {} virtual QVariant get (const Record& record) const { return record.get().mValue.getFloat(); } virtual void set (Record& record, const QVariant& data) { ESXRecordT record2 = record.get(); record2.mValue.setFloat (data.toFloat()); record.setModified (record2); } virtual bool isEditable() const { return true; } }; template struct StringIdColumn : public Column { StringIdColumn() : Column ("ID", ColumnBase::Display_String) {} virtual QVariant get (const Record& record) const { return record.get().mId.c_str(); } virtual bool isEditable() const { return false; } }; template struct RecordStateColumn : public Column { RecordStateColumn() : Column ("*", ColumnBase::Display_Integer) {} virtual QVariant get (const Record& record) const { if (record.mState==Record::State_Erased) return static_cast (Record::State_Deleted); return static_cast (record.mState); } virtual void set (Record& record, const QVariant& data) { record.mState = static_cast (data.toInt()); } virtual bool isEditable() const { return true; } virtual bool isUserEditable() const { return false; } }; template struct FixedRecordTypeColumn : public Column { int mType; FixedRecordTypeColumn (int type) : Column ("Record Type", ColumnBase::Display_Integer, 0), mType (type) {} virtual QVariant get (const Record& record) const { return mType; } virtual bool isEditable() const { return false; } }; /// \attention A var type column must be immediately followed by a suitable value column. template struct VarTypeColumn : public Column { VarTypeColumn (ColumnBase::Display display) : Column ("Type", display) {} virtual QVariant get (const Record& record) const { return static_cast (record.get().mValue.getType()); } virtual void set (Record& record, const QVariant& data) { ESXRecordT record2 = record.get(); record2.mValue.setType (static_cast (data.toInt())); record.setModified (record2); } virtual bool isEditable() const { return true; } }; template struct VarValueColumn : public Column { VarValueColumn() : Column ("Value", ColumnBase::Display_Var) {} virtual QVariant get (const Record& record) const { switch (record.get().mValue.getType()) { case ESM::VT_String: return record.get().mValue.getString().c_str(); break; case ESM::VT_Int: case ESM::VT_Short: case ESM::VT_Long: return record.get().mValue.getInteger(); break; case ESM::VT_Float: return record.get().mValue.getFloat(); break; default: return QVariant(); } } virtual void set (Record& record, const QVariant& data) { ESXRecordT record2 = record.get(); switch (record2.mValue.getType()) { case ESM::VT_String: record2.mValue.setString (data.toString().toUtf8().constData()); break; case ESM::VT_Int: case ESM::VT_Short: case ESM::VT_Long: record2.mValue.setInteger (data.toInt()); break; case ESM::VT_Float: record2.mValue.setFloat (data.toFloat()); break; default: break; } record.setModified (record2); } virtual bool isEditable() const { return true; } }; } #endif