OpenMW
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
refidadapterimp.hpp
Go to the documentation of this file.
1 #ifndef CSM_WOLRD_REFIDADAPTERIMP_H
2 #define CSM_WOLRD_REFIDADAPTERIMP_H
3 
4 #include <map>
5 
6 #include <QVariant>
7 
13 
14 #include "columnbase.hpp"
15 #include "record.hpp"
16 #include "refiddata.hpp"
17 #include "universalid.hpp"
18 #include "refidadapter.hpp"
19 #include "nestedtablewrapper.hpp"
20 
21 namespace CSMWorld
22 {
23  struct BaseColumns
24  {
25  const RefIdColumn *mId;
28  };
29 
32  template<typename RecordT>
34  {
37 
38  public:
39 
41 
42  virtual std::string getId (const RecordBase& record) const;
43 
44  virtual void setId (RecordBase& record, const std::string& id);
45 
46  virtual QVariant getData (const RefIdColumn *column, const RefIdData& data, int index)
47  const;
48 
49  virtual void setData (const RefIdColumn *column, RefIdData& data, int index,
50  const QVariant& value) const;
52 
53  UniversalId::Type getType() const;
54  };
55 
56  template<typename RecordT>
58  : mType (type), mBase (base)
59  {}
60 
61  template<typename RecordT>
62  void BaseRefIdAdapter<RecordT>::setId (RecordBase& record, const std::string& id)
63  {
64  (dynamic_cast<Record<RecordT>&> (record).get().mId) = id;
65  }
66 
67  template<typename RecordT>
68  std::string BaseRefIdAdapter<RecordT>::getId (const RecordBase& record) const
69  {
70  return dynamic_cast<const Record<RecordT>&> (record).get().mId;
71  }
72 
73  template<typename RecordT>
74  QVariant BaseRefIdAdapter<RecordT>::getData (const RefIdColumn *column, const RefIdData& data,
75  int index) const
76  {
77  const Record<RecordT>& record = static_cast<const Record<RecordT>&> (
78  data.getRecord (RefIdData::LocalIndex (index, mType)));
79 
80  if (column==mBase.mId)
81  return QString::fromUtf8 (record.get().mId.c_str());
82 
83  if (column==mBase.mModified)
84  {
86  return static_cast<int> (Record<RecordT>::State_Deleted);
87 
88  return static_cast<int> (record.mState);
89  }
90 
91  if (column==mBase.mType)
92  return static_cast<int> (mType);
93 
94  return QVariant();
95  }
96 
97  template<typename RecordT>
98  void BaseRefIdAdapter<RecordT>::setData (const RefIdColumn *column, RefIdData& data, int index,
99  const QVariant& value) const
100  {
101  Record<RecordT>& record = static_cast<Record<RecordT>&> (
102  data.getRecord (RefIdData::LocalIndex (index, mType)));
103 
104  if (column==mBase.mModified)
105  record.mState = static_cast<RecordBase::State> (value.toInt());
106  }
107 
108  template<typename RecordT>
110  {
111  return mType;
112  }
113 
114 
115  struct ModelColumns : public BaseColumns
116  {
118 
119  ModelColumns (const BaseColumns& base) : BaseColumns (base) {}
120  };
121 
123  template<typename RecordT>
124  class ModelRefIdAdapter : public BaseRefIdAdapter<RecordT>
125  {
127 
128  public:
129 
130  ModelRefIdAdapter (UniversalId::Type type, const ModelColumns& columns);
131 
132  virtual QVariant getData (const RefIdColumn *column, const RefIdData& data, int index)
133  const;
134 
135  virtual void setData (const RefIdColumn *column, RefIdData& data, int index,
136  const QVariant& value) const;
138  };
139 
140  template<typename RecordT>
142  : BaseRefIdAdapter<RecordT> (type, columns), mModel (columns)
143  {}
144 
145  template<typename RecordT>
146  QVariant ModelRefIdAdapter<RecordT>::getData (const RefIdColumn *column, const RefIdData& data,
147  int index) const
148  {
149  const Record<RecordT>& record = static_cast<const Record<RecordT>&> (
151 
152  if (column==mModel.mModel)
153  return QString::fromUtf8 (record.get().mModel.c_str());
154 
155  return BaseRefIdAdapter<RecordT>::getData (column, data, index);
156  }
157 
158  template<typename RecordT>
159  void ModelRefIdAdapter<RecordT>::setData (const RefIdColumn *column, RefIdData& data, int index,
160  const QVariant& value) const
161  {
162  Record<RecordT>& record = static_cast<Record<RecordT>&> (
164 
165  RecordT record2 = record.get();
166  if (column==mModel.mModel)
167  record2.mModel = value.toString().toUtf8().constData();
168  else
169  {
170  BaseRefIdAdapter<RecordT>::setData (column, data, index, value);
171  return;
172  }
173 
174  record.setModified(record2);
175  }
176 
177  struct NameColumns : public ModelColumns
178  {
181 
182  NameColumns (const ModelColumns& base) : ModelColumns (base) {}
183  };
184 
186  template<typename RecordT>
187  class NameRefIdAdapter : public ModelRefIdAdapter<RecordT>
188  {
190 
191  public:
192 
193  NameRefIdAdapter (UniversalId::Type type, const NameColumns& columns);
194 
195  virtual QVariant getData (const RefIdColumn *column, const RefIdData& data, int index)
196  const;
197 
198  virtual void setData (const RefIdColumn *column, RefIdData& data, int index,
199  const QVariant& value) const;
201  };
202 
203  template<typename RecordT>
205  : ModelRefIdAdapter<RecordT> (type, columns), mName (columns)
206  {}
207 
208  template<typename RecordT>
209  QVariant NameRefIdAdapter<RecordT>::getData (const RefIdColumn *column, const RefIdData& data,
210  int index) const
211  {
212  const Record<RecordT>& record = static_cast<const Record<RecordT>&> (
214 
215  if (column==mName.mName)
216  return QString::fromUtf8 (record.get().mName.c_str());
217 
218  if (column==mName.mScript)
219  return QString::fromUtf8 (record.get().mScript.c_str());
220 
221  return ModelRefIdAdapter<RecordT>::getData (column, data, index);
222  }
223 
224  template<typename RecordT>
225  void NameRefIdAdapter<RecordT>::setData (const RefIdColumn *column, RefIdData& data, int index,
226  const QVariant& value) const
227  {
228  Record<RecordT>& record = static_cast<Record<RecordT>&> (
230 
231  RecordT record2 = record.get();
232  if (column==mName.mName)
233  record2.mName = value.toString().toUtf8().constData();
234  else if (column==mName.mScript)
235  record2.mScript = value.toString().toUtf8().constData();
236  else
237  {
238  ModelRefIdAdapter<RecordT>::setData (column, data, index, value);
239  return;
240  }
241 
242  record.setModified(record2);
243  }
244 
246  {
250 
251  InventoryColumns (const NameColumns& base) : NameColumns (base) {}
252  };
253 
255  template<typename RecordT>
256  class InventoryRefIdAdapter : public NameRefIdAdapter<RecordT>
257  {
259 
260  public:
261 
263 
264  virtual QVariant getData (const RefIdColumn *column, const RefIdData& data, int index)
265  const;
266 
267  virtual void setData (const RefIdColumn *column, RefIdData& data, int index,
268  const QVariant& value) const;
270  };
271 
272  template<typename RecordT>
274  const InventoryColumns& columns)
275  : NameRefIdAdapter<RecordT> (type, columns), mInventory (columns)
276  {}
277 
278  template<typename RecordT>
279  QVariant InventoryRefIdAdapter<RecordT>::getData (const RefIdColumn *column, const RefIdData& data,
280  int index) const
281  {
282  const Record<RecordT>& record = static_cast<const Record<RecordT>&> (
284 
285  if (column==mInventory.mIcon)
286  return QString::fromUtf8 (record.get().mIcon.c_str());
287 
288  if (column==mInventory.mWeight)
289  return record.get().mData.mWeight;
290 
291  if (column==mInventory.mValue)
292  return record.get().mData.mValue;
293 
294  return NameRefIdAdapter<RecordT>::getData (column, data, index);
295  }
296 
297  template<typename RecordT>
298  void InventoryRefIdAdapter<RecordT>::setData (const RefIdColumn *column, RefIdData& data, int index,
299  const QVariant& value) const
300  {
301  Record<RecordT>& record = static_cast<Record<RecordT>&> (
303 
304  RecordT record2 = record.get();
305  if (column==mInventory.mIcon)
306  record2.mIcon = value.toString().toUtf8().constData();
307  else if (column==mInventory.mWeight)
308  record2.mData.mWeight = value.toFloat();
309  else if (column==mInventory.mValue)
310  record2.mData.mValue = value.toInt();
311  else
312  {
313  NameRefIdAdapter<RecordT>::setData (column, data, index, value);
314  return;
315  }
316 
317  record.setModified(record2);
318  }
319 
321  {
323 
324  PotionColumns (const InventoryColumns& columns);
325  };
326 
327  class PotionRefIdAdapter : public InventoryRefIdAdapter<ESM::Potion>
328  {
331 
332  public:
333 
334  PotionRefIdAdapter (const PotionColumns& columns, const RefIdColumn *autoCalc);
335 
336  virtual QVariant getData (const RefIdColumn *column, const RefIdData& data, int index)
337  const;
338 
339  virtual void setData (const RefIdColumn *column, RefIdData& data, int index,
340  const QVariant& value) const;
342  };
343 
345  {
347 
348  IngredientColumns (const InventoryColumns& columns);
349  };
350 
351  class IngredientRefIdAdapter : public InventoryRefIdAdapter<ESM::Ingredient>
352  {
354 
355  public:
356 
357  IngredientRefIdAdapter (const IngredientColumns& columns);
358 
359  virtual QVariant getData (const RefIdColumn *column, const RefIdData& data, int index)
360  const;
361 
362  virtual void setData (const RefIdColumn *column, RefIdData& data, int index,
363  const QVariant& value) const;
365  };
366 
368  {
370 
371  // not implemented
374 
375  public:
376 
378 
379  virtual ~IngredEffectRefIdAdapter();
380 
381  virtual void addNestedRow (const RefIdColumn *column,
382  RefIdData& data, int index, int position) const;
383 
384  virtual void removeNestedRow (const RefIdColumn *column,
385  RefIdData& data, int index, int rowToRemove) const;
386 
387  virtual void setNestedTable (const RefIdColumn* column,
388  RefIdData& data, int index, const NestedTableWrapperBase& nestedTable) const;
389 
390  virtual NestedTableWrapperBase* nestedTable (const RefIdColumn* column,
391  const RefIdData& data, int index) const;
392 
393  virtual QVariant getNestedData (const RefIdColumn *column,
394  const RefIdData& data, int index, int subRowIndex, int subColIndex) const;
395 
396  virtual void setNestedData (const RefIdColumn *column,
397  RefIdData& data, int row, const QVariant& value, int subRowIndex, int subColIndex) const;
398 
399  virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData& data) const;
400 
401  virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData& data, int index) const;
402  };
403 
405  {
408 
410  };
411 
413  template<typename RecordT>
415  {
417 
418  public:
419 
421 
422  virtual QVariant getData (const RefIdColumn *column, const RefIdData& data, int index)
423  const;
424 
425  virtual void setData (const RefIdColumn *column, RefIdData& data, int index,
426  const QVariant& value) const;
428  };
429 
430  template<typename RecordT>
432  const EnchantableColumns& columns)
433  : InventoryRefIdAdapter<RecordT> (type, columns), mEnchantable (columns)
434  {}
435 
436  template<typename RecordT>
438  int index) const
439  {
440  const Record<RecordT>& record = static_cast<const Record<RecordT>&> (
442 
443  if (column==mEnchantable.mEnchantment)
444  return QString::fromUtf8 (record.get().mEnchant.c_str());
445 
446  if (column==mEnchantable.mEnchantmentPoints)
447  return static_cast<int> (record.get().mData.mEnchant);
448 
449  return InventoryRefIdAdapter<RecordT>::getData (column, data, index);
450  }
451 
452  template<typename RecordT>
454  int index, const QVariant& value) const
455  {
456  Record<RecordT>& record = static_cast<Record<RecordT>&> (
458 
459  RecordT record2 = record.get();
460  if (column==mEnchantable.mEnchantment)
461  record2.mEnchant = value.toString().toUtf8().constData();
462  else if (column==mEnchantable.mEnchantmentPoints)
463  record2.mData.mEnchant = value.toInt();
464  else
465  {
466  InventoryRefIdAdapter<RecordT>::setData (column, data, index, value);
467  return;
468  }
469 
470  record.setModified(record2);
471  }
472 
474  {
477 
479  };
480 
482  template<typename RecordT>
483  class ToolRefIdAdapter : public InventoryRefIdAdapter<RecordT>
484  {
486 
487  public:
488 
489  ToolRefIdAdapter (UniversalId::Type type, const ToolColumns& columns);
490 
491  virtual QVariant getData (const RefIdColumn *column, const RefIdData& data, int index)
492  const;
493 
494  virtual void setData (const RefIdColumn *column, RefIdData& data, int index,
495  const QVariant& value) const;
497  };
498 
499  template<typename RecordT>
501  : InventoryRefIdAdapter<RecordT> (type, columns), mTools (columns)
502  {}
503 
504  template<typename RecordT>
505  QVariant ToolRefIdAdapter<RecordT>::getData (const RefIdColumn *column, const RefIdData& data,
506  int index) const
507  {
508  const Record<RecordT>& record = static_cast<const Record<RecordT>&> (
510 
511  if (column==mTools.mQuality)
512  return record.get().mData.mQuality;
513 
514  if (column==mTools.mUses)
515  return record.get().mData.mUses;
516 
517  return InventoryRefIdAdapter<RecordT>::getData (column, data, index);
518  }
519 
520  template<typename RecordT>
522  int index, const QVariant& value) const
523  {
524  Record<RecordT>& record = static_cast<Record<RecordT>&> (
526 
527  RecordT record2 = record.get();
528  if (column==mTools.mQuality)
529  record2.mData.mQuality = value.toFloat();
530  else if (column==mTools.mUses)
531  record2.mData.mUses = value.toInt();
532  else
533  {
534  InventoryRefIdAdapter<RecordT>::setData (column, data, index, value);
535  return;
536  }
537 
538  record.setModified(record2);
539  }
540 
541  struct ActorColumns : public NameColumns
542  {
551  std::map<const RefIdColumn *, unsigned int> mServices;
552 
553  ActorColumns (const NameColumns& base) : NameColumns (base) {}
554  };
555 
557  template<typename RecordT>
558  class ActorRefIdAdapter : public NameRefIdAdapter<RecordT>
559  {
561 
562  public:
563 
564  ActorRefIdAdapter (UniversalId::Type type, const ActorColumns& columns);
565 
566  virtual QVariant getData (const RefIdColumn *column, const RefIdData& data, int index)
567  const;
568 
569  virtual void setData (const RefIdColumn *column, RefIdData& data, int index,
570  const QVariant& value) const;
572  };
573 
574  template<typename RecordT>
576  const ActorColumns& columns)
577  : NameRefIdAdapter<RecordT> (type, columns), mActors (columns)
578  {}
579 
580  template<typename RecordT>
581  QVariant ActorRefIdAdapter<RecordT>::getData (const RefIdColumn *column, const RefIdData& data,
582  int index) const
583  {
584  const Record<RecordT>& record = static_cast<const Record<RecordT>&> (
586 
587  if (column==mActors.mHello)
588  return record.get().mAiData.mHello;
589 
590  if (column==mActors.mFlee)
591  return record.get().mAiData.mFlee;
592 
593  if (column==mActors.mFight)
594  return record.get().mAiData.mFight;
595 
596  if (column==mActors.mAlarm)
597  return record.get().mAiData.mAlarm;
598 
599  if (column==mActors.mInventory)
600  return QVariant::fromValue(ColumnBase::TableEdit_Full);
601 
602  if (column==mActors.mSpells)
603  return QVariant::fromValue(ColumnBase::TableEdit_Full);
604 
605  if (column==mActors.mDestinations)
606  return QVariant::fromValue(ColumnBase::TableEdit_Full);
607 
608  if (column==mActors.mAiPackages)
609  return QVariant::fromValue(ColumnBase::TableEdit_Full);
610 
611  std::map<const RefIdColumn *, unsigned int>::const_iterator iter =
612  mActors.mServices.find (column);
613 
614  if (iter!=mActors.mServices.end())
615  return (record.get().mAiData.mServices & iter->second)!=0;
616 
617  return NameRefIdAdapter<RecordT>::getData (column, data, index);
618  }
619 
620  template<typename RecordT>
621  void ActorRefIdAdapter<RecordT>::setData (const RefIdColumn *column, RefIdData& data, int index,
622  const QVariant& value) const
623  {
624  Record<RecordT>& record = static_cast<Record<RecordT>&> (
626 
627  RecordT record2 = record.get();
628  if (column==mActors.mHello)
629  record2.mAiData.mHello = value.toInt();
630  else if (column==mActors.mFlee)
631  record2.mAiData.mFlee = value.toInt();
632  else if (column==mActors.mFight)
633  record2.mAiData.mFight = value.toInt();
634  else if (column==mActors.mAlarm)
635  record2.mAiData.mAlarm = value.toInt();
636  else
637  {
638  typename std::map<const RefIdColumn *, unsigned int>::const_iterator iter =
639  mActors.mServices.find (column);
640  if (iter!=mActors.mServices.end())
641  {
642  if (value.toInt()!=0)
643  record2.mAiData.mServices |= iter->second;
644  else
645  record2.mAiData.mServices &= ~iter->second;
646  }
647  else
648  {
649  NameRefIdAdapter<RecordT>::setData (column, data, index, value);
650  return;
651  }
652  }
653 
654  record.setModified(record2);
655  }
656 
657  class ApparatusRefIdAdapter : public InventoryRefIdAdapter<ESM::Apparatus>
658  {
661 
662  public:
663 
664  ApparatusRefIdAdapter (const InventoryColumns& columns, const RefIdColumn *type,
665  const RefIdColumn *quality);
666 
667  virtual QVariant getData (const RefIdColumn *column, const RefIdData& data, int index)
668  const;
669 
670  virtual void setData (const RefIdColumn *column, RefIdData& data, int index,
671  const QVariant& value) const;
673  };
674 
675  class ArmorRefIdAdapter : public EnchantableRefIdAdapter<ESM::Armor>
676  {
681 
682  public:
683 
684  ArmorRefIdAdapter (const EnchantableColumns& columns, const RefIdColumn *type,
685  const RefIdColumn *health, const RefIdColumn *armor, const RefIdColumn *partRef);
686 
687  virtual QVariant getData (const RefIdColumn *column, const RefIdData& data, int index)
688  const;
689 
690  virtual void setData (const RefIdColumn *column, RefIdData& data, int index,
691  const QVariant& value) const;
693  };
694 
695  class BookRefIdAdapter : public EnchantableRefIdAdapter<ESM::Book>
696  {
700 
701  public:
702 
703  BookRefIdAdapter (const EnchantableColumns& columns, const RefIdColumn *bookType,
704  const RefIdColumn *skill, const RefIdColumn *text);
705 
706  virtual QVariant getData (const RefIdColumn *column, const RefIdData& data, int index)
707  const;
708 
709  virtual void setData (const RefIdColumn *column, RefIdData& data, int index,
710  const QVariant& value) const;
712  };
713 
714  class ClothingRefIdAdapter : public EnchantableRefIdAdapter<ESM::Clothing>
715  {
718 
719  public:
720 
722  const RefIdColumn *type, const RefIdColumn *partRef);
723 
724  virtual QVariant getData (const RefIdColumn *column, const RefIdData& data, int index)
725  const;
726 
727  virtual void setData (const RefIdColumn *column, RefIdData& data, int index,
728  const QVariant& value) const;
730  };
731 
732  class ContainerRefIdAdapter : public NameRefIdAdapter<ESM::Container>
733  {
738 
739  public:
740 
741  ContainerRefIdAdapter (const NameColumns& columns, const RefIdColumn *weight,
742  const RefIdColumn *organic, const RefIdColumn *respawn, const RefIdColumn *content);
743 
744  virtual QVariant getData (const RefIdColumn *column, const RefIdData& data, int index) const;
745 
746  virtual void setData (const RefIdColumn *column, RefIdData& data, int index,
747  const QVariant& value) const;
749  };
750 
752  {
753  std::map<const RefIdColumn *, unsigned int> mFlags;
761 
762  CreatureColumns (const ActorColumns& actorColumns);
763  };
764 
765  class CreatureRefIdAdapter : public ActorRefIdAdapter<ESM::Creature>
766  {
768 
769  public:
770 
771  CreatureRefIdAdapter (const CreatureColumns& columns);
772 
773  virtual QVariant getData (const RefIdColumn *column, const RefIdData& data, int index)
774  const;
775 
776  virtual void setData (const RefIdColumn *column, RefIdData& data, int index,
777  const QVariant& value) const;
779  };
780 
781  class DoorRefIdAdapter : public NameRefIdAdapter<ESM::Door>
782  {
785 
786  public:
787 
788  DoorRefIdAdapter (const NameColumns& columns, const RefIdColumn *openSound,
789  const RefIdColumn *closeSound);
790 
791  virtual QVariant getData (const RefIdColumn *column, const RefIdData& data, int index)
792  const;
793 
794  virtual void setData (const RefIdColumn *column, RefIdData& data, int index,
795  const QVariant& value) const;
797  };
798 
800  {
806  std::map<const RefIdColumn *, unsigned int> mFlags;
807 
808  LightColumns (const InventoryColumns& columns);
809  };
810 
811  class LightRefIdAdapter : public InventoryRefIdAdapter<ESM::Light>
812  {
814 
815  public:
816 
817  LightRefIdAdapter (const LightColumns& columns);
818 
819  virtual QVariant getData (const RefIdColumn *column, const RefIdData& data, int index)
820  const;
821 
822  virtual void setData (const RefIdColumn *column, RefIdData& data, int index,
823  const QVariant& value) const;
825  };
826 
827  class MiscRefIdAdapter : public InventoryRefIdAdapter<ESM::Miscellaneous>
828  {
830 
831  public:
832 
833  MiscRefIdAdapter (const InventoryColumns& columns, const RefIdColumn *key);
834 
835  virtual QVariant getData (const RefIdColumn *column, const RefIdData& data, int index)
836  const;
837 
838  virtual void setData (const RefIdColumn *column, RefIdData& data, int index,
839  const QVariant& value) const;
841  };
842 
843  struct NpcColumns : public ActorColumns
844  {
845  std::map<const RefIdColumn *, unsigned int> mFlags;
851  const RefIdColumn *mAttributes; // depends on npc type
852  const RefIdColumn *mSkills; // depends on npc type
853  const RefIdColumn *mMisc; // may depend on npc type, e.g. FactionID
856 
857  NpcColumns (const ActorColumns& actorColumns);
858  };
859 
860  class NpcRefIdAdapter : public ActorRefIdAdapter<ESM::NPC>
861  {
863 
864  public:
865 
866  NpcRefIdAdapter (const NpcColumns& columns);
867 
868  virtual QVariant getData (const RefIdColumn *column, const RefIdData& data, int index)
869  const;
870 
871  virtual void setData (const RefIdColumn *column, RefIdData& data, int index,
872  const QVariant& value) const;
874  };
875 
877  {
882  const RefIdColumn *mChop[2];
883  const RefIdColumn *mSlash[2];
884  const RefIdColumn *mThrust[2];
885  std::map<const RefIdColumn *, unsigned int> mFlags;
886 
887  WeaponColumns (const EnchantableColumns& columns);
888  };
889 
890  class WeaponRefIdAdapter : public EnchantableRefIdAdapter<ESM::Weapon>
891  {
893 
894  public:
895 
896  WeaponRefIdAdapter (const WeaponColumns& columns);
897 
898  virtual QVariant getData (const RefIdColumn *column, const RefIdData& data, int index)
899  const;
900 
901  virtual void setData (const RefIdColumn *column, RefIdData& data, int index,
902  const QVariant& value) const;
904  };
905 
906 
908 
910  {
911  public:
912 
914 
915  virtual void addNestedRow (const RefIdColumn *column,
916  RefIdData& data, int index, int position) const;
917 
918  virtual void removeNestedRow (const RefIdColumn *column,
919  RefIdData& data, int index, int rowToRemove) const;
920 
921  virtual void setNestedTable (const RefIdColumn* column,
922  RefIdData& data, int index, const NestedTableWrapperBase& nestedTable) const;
923 
924  virtual NestedTableWrapperBase* nestedTable (const RefIdColumn* column,
925  const RefIdData& data, int index) const;
926 
927  virtual QVariant getNestedData (const RefIdColumn *column,
928  const RefIdData& data, int index, int subRowIndex, int subColIndex) const;
929 
930  virtual void setNestedData (const RefIdColumn *column,
931  RefIdData& data, int row, const QVariant& value, int subRowIndex, int subColIndex) const;
932 
933  virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData& data) const;
934 
935  virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData& data, int index) const;
936  };
937 
939  {
940  public:
941 
943 
944  virtual void addNestedRow (const RefIdColumn *column,
945  RefIdData& data, int index, int position) const;
946 
947  virtual void removeNestedRow (const RefIdColumn *column,
948  RefIdData& data, int index, int rowToRemove) const;
949 
950  virtual void setNestedTable (const RefIdColumn* column,
951  RefIdData& data, int index, const NestedTableWrapperBase& nestedTable) const;
952 
953  virtual NestedTableWrapperBase* nestedTable (const RefIdColumn* column,
954  const RefIdData& data, int index) const;
955 
956  virtual QVariant getNestedData (const RefIdColumn *column,
957  const RefIdData& data, int index, int subRowIndex, int subColIndex) const;
958 
959  virtual void setNestedData (const RefIdColumn *column,
960  RefIdData& data, int row, const QVariant& value, int subRowIndex, int subColIndex) const;
961 
962  virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData& data) const;
963 
964  virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData& data, int index) const;
965  };
966 
968  {
971 
972  public:
973 
975  virtual ~NpcMiscRefIdAdapter();
976 
977  virtual void addNestedRow (const RefIdColumn *column,
978  RefIdData& data, int index, int position) const;
979 
980  virtual void removeNestedRow (const RefIdColumn *column,
981  RefIdData& data, int index, int rowToRemove) const;
982 
983  virtual void setNestedTable (const RefIdColumn* column,
984  RefIdData& data, int index, const NestedTableWrapperBase& nestedTable) const;
985 
986  virtual NestedTableWrapperBase* nestedTable (const RefIdColumn* column,
987  const RefIdData& data, int index) const;
988 
989  virtual QVariant getNestedData (const RefIdColumn *column,
990  const RefIdData& data, int index, int subRowIndex, int subColIndex) const;
991 
992  virtual void setNestedData (const RefIdColumn *column,
993  RefIdData& data, int row, const QVariant& value, int subRowIndex, int subColIndex) const;
994 
995  virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData& data) const;
996 
997  virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData& data, int index) const;
998  };
999 
1001  {
1002  public:
1003 
1005 
1006  virtual void addNestedRow (const RefIdColumn *column,
1007  RefIdData& data, int index, int position) const;
1008 
1009  virtual void removeNestedRow (const RefIdColumn *column,
1010  RefIdData& data, int index, int rowToRemove) const;
1011 
1012  virtual void setNestedTable (const RefIdColumn* column,
1013  RefIdData& data, int index, const NestedTableWrapperBase& nestedTable) const;
1014 
1015  virtual NestedTableWrapperBase* nestedTable (const RefIdColumn* column,
1016  const RefIdData& data, int index) const;
1017 
1018  virtual QVariant getNestedData (const RefIdColumn *column,
1019  const RefIdData& data, int index, int subRowIndex, int subColIndex) const;
1020 
1021  virtual void setNestedData (const RefIdColumn *column,
1022  RefIdData& data, int row, const QVariant& value, int subRowIndex, int subColIndex) const;
1023 
1024  virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData& data) const;
1025 
1026  virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData& data, int index) const;
1027  };
1028 
1030  {
1031  public:
1032 
1034 
1035  virtual void addNestedRow (const RefIdColumn *column,
1036  RefIdData& data, int index, int position) const;
1037 
1038  virtual void removeNestedRow (const RefIdColumn *column,
1039  RefIdData& data, int index, int rowToRemove) const;
1040 
1041  virtual void setNestedTable (const RefIdColumn* column,
1042  RefIdData& data, int index, const NestedTableWrapperBase& nestedTable) const;
1043 
1044  virtual NestedTableWrapperBase* nestedTable (const RefIdColumn* column,
1045  const RefIdData& data, int index) const;
1046 
1047  virtual QVariant getNestedData (const RefIdColumn *column,
1048  const RefIdData& data, int index, int subRowIndex, int subColIndex) const;
1049 
1050  virtual void setNestedData (const RefIdColumn *column,
1051  RefIdData& data, int row, const QVariant& value, int subRowIndex, int subColIndex) const;
1052 
1053  virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData& data) const;
1054 
1055  virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData& data, int index) const;
1056  };
1057 
1059  {
1062 
1063  public:
1064 
1066  virtual ~CreatureMiscRefIdAdapter();
1067 
1068  virtual void addNestedRow (const RefIdColumn *column,
1069  RefIdData& data, int index, int position) const;
1070 
1071  virtual void removeNestedRow (const RefIdColumn *column,
1072  RefIdData& data, int index, int rowToRemove) const;
1073 
1074  virtual void setNestedTable (const RefIdColumn* column,
1075  RefIdData& data, int index, const NestedTableWrapperBase& nestedTable) const;
1076 
1077  virtual NestedTableWrapperBase* nestedTable (const RefIdColumn* column,
1078  const RefIdData& data, int index) const;
1079 
1080  virtual QVariant getNestedData (const RefIdColumn *column,
1081  const RefIdData& data, int index, int subRowIndex, int subColIndex) const;
1082 
1083  virtual void setNestedData (const RefIdColumn *column,
1084  RefIdData& data, int row, const QVariant& value, int subRowIndex, int subColIndex) const;
1085 
1086  virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData& data) const;
1087 
1088  virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData& data, int index) const;
1089  };
1090 
1091  template<typename ESXRecordT>
1092  class EffectsListAdapter;
1093 
1094  template<typename ESXRecordT>
1096  {
1098 
1099  // not implemented
1102 
1103  public:
1104 
1106 
1108 
1109  virtual void addNestedRow (const RefIdColumn *column,
1110  RefIdData& data, int index, int position) const
1111  {
1112  Record<ESXRecordT>& record =
1113  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1114  EffectsListAdapter<ESXRecordT>::addRow(record, position);
1115  }
1116 
1117  virtual void removeNestedRow (const RefIdColumn *column,
1118  RefIdData& data, int index, int rowToRemove) const
1119  {
1120  Record<ESXRecordT>& record =
1121  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1122  EffectsListAdapter<ESXRecordT>::removeRow(record, rowToRemove);
1123  }
1124 
1125  virtual void setNestedTable (const RefIdColumn* column,
1126  RefIdData& data, int index, const NestedTableWrapperBase& nestedTable) const
1127  {
1128  Record<ESXRecordT>& record =
1129  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1130  EffectsListAdapter<ESXRecordT>::setTable(record, nestedTable);
1131  }
1132 
1134  const RefIdData& data, int index) const
1135  {
1136  const Record<ESXRecordT>& record =
1137  static_cast<const Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1139  }
1140 
1141  virtual QVariant getNestedData (const RefIdColumn *column,
1142  const RefIdData& data, int index, int subRowIndex, int subColIndex) const
1143  {
1144  const Record<ESXRecordT>& record =
1145  static_cast<const Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1146  return EffectsListAdapter<ESXRecordT>::getData(record, subRowIndex, subColIndex);
1147  }
1148 
1149  virtual void setNestedData (const RefIdColumn *column,
1150  RefIdData& data, int row, const QVariant& value, int subRowIndex, int subColIndex) const
1151  {
1152  Record<ESXRecordT>& record =
1153  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (row, mType)));
1154  EffectsListAdapter<ESXRecordT>::setData(record, value, subRowIndex, subColIndex);
1155  }
1156 
1157  virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData& data) const
1158  {
1159  const Record<ESXRecordT> record; // not used, just a dummy
1161  }
1162 
1163  virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData& data, int index) const
1164  {
1165  const Record<ESXRecordT>& record =
1166  static_cast<const Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1168  }
1169  };
1170 
1171  template <typename ESXRecordT>
1173  {
1175 
1176  // not implemented
1179 
1180  public:
1181 
1183 
1185 
1186  virtual void addNestedRow (const RefIdColumn *column,
1187  RefIdData& data, int index, int position) const
1188  {
1189  Record<ESXRecordT>& record =
1190  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1191  ESXRecordT container = record.get();
1192 
1193  std::vector<ESM::ContItem>& list = container.mInventory.mList;
1194 
1195  ESM::ContItem newRow = ESM::ContItem();
1196 
1197  if (position >= (int)list.size())
1198  list.push_back(newRow);
1199  else
1200  list.insert(list.begin()+position, newRow);
1201 
1202  record.setModified (container);
1203  }
1204 
1205  virtual void removeNestedRow (const RefIdColumn *column,
1206  RefIdData& data, int index, int rowToRemove) const
1207  {
1208  Record<ESXRecordT>& record =
1209  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1210  ESXRecordT container = record.get();
1211 
1212  std::vector<ESM::ContItem>& list = container.mInventory.mList;
1213 
1214  if (rowToRemove < 0 || rowToRemove >= static_cast<int> (list.size()))
1215  throw std::runtime_error ("index out of range");
1216 
1217  list.erase (list.begin () + rowToRemove);
1218 
1219  record.setModified (container);
1220  }
1221 
1222  virtual void setNestedTable (const RefIdColumn* column,
1223  RefIdData& data, int index, const NestedTableWrapperBase& nestedTable) const
1224  {
1225  Record<ESXRecordT>& record =
1226  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1227  ESXRecordT container = record.get();
1228 
1229  container.mInventory.mList =
1230  static_cast<const NestedTableWrapper<std::vector<typename ESM::ContItem> >&>(nestedTable).mNestedTable;
1231 
1232  record.setModified (container);
1233  }
1234 
1236  const RefIdData& data, int index) const
1237  {
1238  const Record<ESXRecordT>& record =
1239  static_cast<const Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1240 
1241  // deleted by dtor of NestedTableStoring
1242  return new NestedTableWrapper<std::vector<typename ESM::ContItem> >(record.get().mInventory.mList);
1243  }
1244 
1245  virtual QVariant getNestedData (const RefIdColumn *column,
1246  const RefIdData& data, int index, int subRowIndex, int subColIndex) const
1247  {
1248  const Record<ESXRecordT>& record =
1249  static_cast<const Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1250 
1251  const std::vector<ESM::ContItem>& list = record.get().mInventory.mList;
1252 
1253  if (subRowIndex < 0 || subRowIndex >= static_cast<int> (list.size()))
1254  throw std::runtime_error ("index out of range");
1255 
1256  const ESM::ContItem& content = list.at(subRowIndex);
1257 
1258  switch (subColIndex)
1259  {
1260  case 0: return QString::fromUtf8(content.mItem.toString().c_str());
1261  case 1: return content.mCount;
1262  default:
1263  throw std::runtime_error("Trying to access non-existing column in the nested table!");
1264  }
1265  }
1266 
1267  virtual void setNestedData (const RefIdColumn *column,
1268  RefIdData& data, int row, const QVariant& value, int subRowIndex, int subColIndex) const
1269  {
1270  Record<ESXRecordT>& record =
1271  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (row, mType)));
1272  ESXRecordT container = record.get();
1273  std::vector<ESM::ContItem>& list = container.mInventory.mList;
1274 
1275  if (subRowIndex < 0 || subRowIndex >= static_cast<int> (list.size()))
1276  throw std::runtime_error ("index out of range");
1277 
1278  switch(subColIndex)
1279  {
1280  case 0:
1281  list.at(subRowIndex).mItem.assign(std::string(value.toString().toUtf8().constData()));
1282  break;
1283 
1284  case 1:
1285  list.at(subRowIndex).mCount = value.toInt();
1286  break;
1287 
1288  default:
1289  throw std::runtime_error("Trying to access non-existing column in the nested table!");
1290  }
1291 
1292  record.setModified (container);
1293  }
1294 
1295  virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData& data) const
1296  {
1297  return 2;
1298  }
1299 
1300  virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData& data, int index) const
1301  {
1302  const Record<ESXRecordT>& record =
1303  static_cast<const Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1304 
1305  return static_cast<int>(record.get().mInventory.mList.size());
1306  }
1307  };
1308 
1309  template <typename ESXRecordT>
1311  {
1313 
1314  // not implemented
1317 
1318  public:
1319 
1321 
1323 
1324  virtual void addNestedRow (const RefIdColumn *column,
1325  RefIdData& data, int index, int position) const
1326  {
1327  Record<ESXRecordT>& record =
1328  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1329  ESXRecordT caster = record.get();
1330 
1331  std::vector<std::string>& list = caster.mSpells.mList;
1332 
1333  std::string newString;
1334 
1335  if (position >= (int)list.size())
1336  list.push_back(newString);
1337  else
1338  list.insert(list.begin()+position, newString);
1339 
1340  record.setModified (caster);
1341  }
1342 
1343  virtual void removeNestedRow (const RefIdColumn *column,
1344  RefIdData& data, int index, int rowToRemove) const
1345  {
1346  Record<ESXRecordT>& record =
1347  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1348  ESXRecordT caster = record.get();
1349 
1350  std::vector<std::string>& list = caster.mSpells.mList;
1351 
1352  if (rowToRemove < 0 || rowToRemove >= static_cast<int> (list.size()))
1353  throw std::runtime_error ("index out of range");
1354 
1355  list.erase (list.begin () + rowToRemove);
1356 
1357  record.setModified (caster);
1358  }
1359 
1360  virtual void setNestedTable (const RefIdColumn* column,
1361  RefIdData& data, int index, const NestedTableWrapperBase& nestedTable) const
1362  {
1363  Record<ESXRecordT>& record =
1364  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1365  ESXRecordT caster = record.get();
1366 
1367  caster.mSpells.mList =
1368  static_cast<const NestedTableWrapper<std::vector<typename std::string> >&>(nestedTable).mNestedTable;
1369 
1370  record.setModified (caster);
1371  }
1372 
1374  const RefIdData& data, int index) const
1375  {
1376  const Record<ESXRecordT>& record =
1377  static_cast<const Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1378 
1379  // deleted by dtor of NestedTableStoring
1380  return new NestedTableWrapper<std::vector<typename std::string> >(record.get().mSpells.mList);
1381  }
1382 
1383  virtual QVariant getNestedData (const RefIdColumn *column,
1384  const RefIdData& data, int index, int subRowIndex, int subColIndex) const
1385  {
1386  const Record<ESXRecordT>& record =
1387  static_cast<const Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1388 
1389  const std::vector<std::string>& list = record.get().mSpells.mList;
1390 
1391  if (subRowIndex < 0 || subRowIndex >= static_cast<int> (list.size()))
1392  throw std::runtime_error ("index out of range");
1393 
1394  const std::string& content = list.at(subRowIndex);
1395 
1396  if (subColIndex == 0)
1397  return QString::fromUtf8(content.c_str());
1398  else
1399  throw std::runtime_error("Trying to access non-existing column in the nested table!");
1400  }
1401 
1402  virtual void setNestedData (const RefIdColumn *column,
1403  RefIdData& data, int row, const QVariant& value, int subRowIndex, int subColIndex) const
1404  {
1405  Record<ESXRecordT>& record =
1406  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (row, mType)));
1407  ESXRecordT caster = record.get();
1408  std::vector<std::string>& list = caster.mSpells.mList;
1409 
1410  if (subRowIndex < 0 || subRowIndex >= static_cast<int> (list.size()))
1411  throw std::runtime_error ("index out of range");
1412 
1413  if (subColIndex == 0)
1414  list.at(subRowIndex) = std::string(value.toString().toUtf8());
1415  else
1416  throw std::runtime_error("Trying to access non-existing column in the nested table!");
1417 
1418  record.setModified (caster);
1419  }
1420 
1421  virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData& data) const
1422  {
1423  return 1;
1424  }
1425 
1426  virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData& data, int index) const
1427  {
1428  const Record<ESXRecordT>& record =
1429  static_cast<const Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1430 
1431  return static_cast<int>(record.get().mSpells.mList.size());
1432  }
1433  };
1434 
1435  template <typename ESXRecordT>
1437  {
1439 
1440  // not implemented
1443 
1444  public:
1445 
1447 
1449 
1450  virtual void addNestedRow (const RefIdColumn *column,
1451  RefIdData& data, int index, int position) const
1452  {
1453  Record<ESXRecordT>& record =
1454  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1455  ESXRecordT traveller = record.get();
1456 
1457  std::vector<ESM::Transport::Dest>& list = traveller.mTransport.mList;
1458 
1459  ESM::Position newPos;
1460  for (unsigned i = 0; i < 3; ++i)
1461  {
1462  newPos.pos[i] = 0;
1463  newPos.rot[i] = 0;
1464  }
1465 
1466  ESM::Transport::Dest newRow;
1467  newRow.mPos = newPos;
1468  newRow.mCellName = "";
1469 
1470  if (position >= (int)list.size())
1471  list.push_back(newRow);
1472  else
1473  list.insert(list.begin()+position, newRow);
1474 
1475  record.setModified (traveller);
1476  }
1477 
1478  virtual void removeNestedRow (const RefIdColumn *column,
1479  RefIdData& data, int index, int rowToRemove) const
1480  {
1481  Record<ESXRecordT>& record =
1482  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1483  ESXRecordT traveller = record.get();
1484 
1485  std::vector<ESM::Transport::Dest>& list = traveller.mTransport.mList;
1486 
1487  if (rowToRemove < 0 || rowToRemove >= static_cast<int> (list.size()))
1488  throw std::runtime_error ("index out of range");
1489 
1490  list.erase (list.begin () + rowToRemove);
1491 
1492  record.setModified (traveller);
1493  }
1494 
1495  virtual void setNestedTable (const RefIdColumn* column,
1496  RefIdData& data, int index, const NestedTableWrapperBase& nestedTable) const
1497  {
1498  Record<ESXRecordT>& record =
1499  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1500  ESXRecordT traveller = record.get();
1501 
1502  traveller.mTransport.mList =
1504 
1505  record.setModified (traveller);
1506  }
1507 
1509  const RefIdData& data, int index) const
1510  {
1511  const Record<ESXRecordT>& record =
1512  static_cast<const Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1513 
1514  // deleted by dtor of NestedTableStoring
1515  return new NestedTableWrapper<std::vector<typename ESM::Transport::Dest> >(record.get().mTransport.mList);
1516  }
1517 
1518  virtual QVariant getNestedData (const RefIdColumn *column,
1519  const RefIdData& data, int index, int subRowIndex, int subColIndex) const
1520  {
1521  const Record<ESXRecordT>& record =
1522  static_cast<const Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1523 
1524  const std::vector<ESM::Transport::Dest>& list = record.get().mTransport.mList;
1525 
1526  if (subRowIndex < 0 || subRowIndex >= static_cast<int> (list.size()))
1527  throw std::runtime_error ("index out of range");
1528 
1529  const ESM::Transport::Dest& content = list.at(subRowIndex);
1530 
1531  switch (subColIndex)
1532  {
1533  case 0: return QString::fromUtf8(content.mCellName.c_str());
1534  case 1: return content.mPos.pos[0];
1535  case 2: return content.mPos.pos[1];
1536  case 3: return content.mPos.pos[2];
1537  case 4: return content.mPos.rot[0];
1538  case 5: return content.mPos.rot[1];
1539  case 6: return content.mPos.rot[2];
1540  default:
1541  throw std::runtime_error("Trying to access non-existing column in the nested table!");
1542  }
1543  }
1544 
1545  virtual void setNestedData (const RefIdColumn *column,
1546  RefIdData& data, int row, const QVariant& value, int subRowIndex, int subColIndex) const
1547  {
1548  Record<ESXRecordT>& record =
1549  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (row, mType)));
1550  ESXRecordT traveller = record.get();
1551  std::vector<ESM::Transport::Dest>& list = traveller.mTransport.mList;
1552 
1553  if (subRowIndex < 0 || subRowIndex >= static_cast<int> (list.size()))
1554  throw std::runtime_error ("index out of range");
1555 
1556  switch(subColIndex)
1557  {
1558  case 0: list.at(subRowIndex).mCellName = std::string(value.toString().toUtf8().constData()); break;
1559  case 1: list.at(subRowIndex).mPos.pos[0] = value.toFloat(); break;
1560  case 2: list.at(subRowIndex).mPos.pos[1] = value.toFloat(); break;
1561  case 3: list.at(subRowIndex).mPos.pos[2] = value.toFloat(); break;
1562  case 4: list.at(subRowIndex).mPos.rot[0] = value.toFloat(); break;
1563  case 5: list.at(subRowIndex).mPos.rot[1] = value.toFloat(); break;
1564  case 6: list.at(subRowIndex).mPos.rot[2] = value.toFloat(); break;
1565  default:
1566  throw std::runtime_error("Trying to access non-existing column in the nested table!");
1567  }
1568 
1569  record.setModified (traveller);
1570  }
1571 
1572  virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData& data) const
1573  {
1574  return 7;
1575  }
1576 
1577  virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData& data, int index) const
1578  {
1579  const Record<ESXRecordT>& record =
1580  static_cast<const Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1581 
1582  return static_cast<int>(record.get().mTransport.mList.size());
1583  }
1584  };
1585 
1586  template <typename ESXRecordT>
1588  {
1590 
1591  // not implemented
1594 
1595  public:
1596 
1598 
1600 
1601  // FIXME: should check if the AI package type is already in the list and use a default
1602  // that wasn't used already (in extreme case do not add anything at all?
1603  virtual void addNestedRow (const RefIdColumn *column,
1604  RefIdData& data, int index, int position) const
1605  {
1606  Record<ESXRecordT>& record =
1607  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1608  ESXRecordT actor = record.get();
1609 
1610  std::vector<ESM::AIPackage>& list = actor.mAiPackage.mList;
1611 
1612  ESM::AIPackage newRow;
1613  newRow.mType = ESM::AI_Wander;
1614  newRow.mWander.mDistance = 0;
1615  newRow.mWander.mDuration = 0;
1616  newRow.mWander.mTimeOfDay = 0;
1617  for (int i = 0; i < 8; ++i)
1618  newRow.mWander.mIdle[i] = 0;
1619  newRow.mWander.mShouldRepeat = 0;
1620  newRow.mCellName = "";
1621 
1622  if (position >= (int)list.size())
1623  list.push_back(newRow);
1624  else
1625  list.insert(list.begin()+position, newRow);
1626 
1627  record.setModified (actor);
1628  }
1629 
1630  virtual void removeNestedRow (const RefIdColumn *column,
1631  RefIdData& data, int index, int rowToRemove) const
1632  {
1633  Record<ESXRecordT>& record =
1634  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1635  ESXRecordT actor = record.get();
1636 
1637  std::vector<ESM::AIPackage>& list = actor.mAiPackage.mList;
1638 
1639  if (rowToRemove < 0 || rowToRemove >= static_cast<int> (list.size()))
1640  throw std::runtime_error ("index out of range");
1641 
1642  list.erase (list.begin () + rowToRemove);
1643 
1644  record.setModified (actor);
1645  }
1646 
1647  virtual void setNestedTable (const RefIdColumn* column,
1648  RefIdData& data, int index, const NestedTableWrapperBase& nestedTable) const
1649  {
1650  Record<ESXRecordT>& record =
1651  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1652  ESXRecordT actor = record.get();
1653 
1654  actor.mAiPackage.mList =
1655  static_cast<const NestedTableWrapper<std::vector<typename ESM::AIPackage> >&>(nestedTable).mNestedTable;
1656 
1657  record.setModified (actor);
1658  }
1659 
1661  const RefIdData& data, int index) const
1662  {
1663  const Record<ESXRecordT>& record =
1664  static_cast<const Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1665 
1666  // deleted by dtor of NestedTableStoring
1667  return new NestedTableWrapper<std::vector<typename ESM::AIPackage> >(record.get().mAiPackage.mList);
1668  }
1669 
1670  virtual QVariant getNestedData (const RefIdColumn *column,
1671  const RefIdData& data, int index, int subRowIndex, int subColIndex) const
1672  {
1673  const Record<ESXRecordT>& record =
1674  static_cast<const Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1675 
1676  const std::vector<ESM::AIPackage>& list = record.get().mAiPackage.mList;
1677 
1678  if (subRowIndex < 0 || subRowIndex >= static_cast<int> (list.size()))
1679  throw std::runtime_error ("index out of range");
1680 
1681  const ESM::AIPackage& content = list.at(subRowIndex);
1682 
1683  switch (subColIndex)
1684  {
1685  case 0:
1686  // FIXME: should more than one AI package type be allowed? Check vanilla
1687  switch (content.mType)
1688  {
1689  case ESM::AI_Wander: return 0;
1690  case ESM::AI_Travel: return 1;
1691  case ESM::AI_Follow: return 2;
1692  case ESM::AI_Escort: return 3;
1693  case ESM::AI_Activate: return 4;
1694  case ESM::AI_CNDT:
1695  default: return QVariant();
1696  }
1697  case 1: // wander dist
1698  if (content.mType == ESM::AI_Wander)
1699  return content.mWander.mDistance;
1700  else
1701  return QVariant();
1702  case 2: // wander dur
1703  if (content.mType == ESM::AI_Wander ||
1704  content.mType == ESM::AI_Follow || content.mType == ESM::AI_Escort)
1705  return content.mWander.mDuration;
1706  else
1707  return QVariant();
1708  case 3: // wander ToD
1709  if (content.mType == ESM::AI_Wander)
1710  return content.mWander.mTimeOfDay; // FIXME: not sure of the format
1711  else
1712  return QVariant();
1713  case 4: // wander idle
1714  case 5:
1715  case 6:
1716  case 7:
1717  case 8:
1718  case 9:
1719  case 10:
1720  case 11:
1721  if (content.mType == ESM::AI_Wander)
1722  return static_cast<int>(content.mWander.mIdle[subColIndex-4]);
1723  else
1724  return QVariant();
1725  case 12: // wander repeat
1726  if (content.mType == ESM::AI_Wander)
1727  return content.mWander.mShouldRepeat != 0;
1728  else
1729  return QVariant();
1730  case 13: // activate name
1731  if (content.mType == ESM::AI_Activate)
1732  return QString(content.mActivate.mName.toString().c_str());
1733  else
1734  return QVariant();
1735  case 14: // target id
1736  if (content.mType == ESM::AI_Follow || content.mType == ESM::AI_Escort)
1737  return QString(content.mTarget.mId.toString().c_str());
1738  else
1739  return QVariant();
1740  case 15: // target cell
1741  if (content.mType == ESM::AI_Follow || content.mType == ESM::AI_Escort)
1742  return QString::fromUtf8(content.mCellName.c_str());
1743  else
1744  return QVariant();
1745  case 16:
1746  if (content.mType == ESM::AI_Travel)
1747  return content.mTravel.mX;
1748  else if (content.mType == ESM::AI_Follow || content.mType == ESM::AI_Escort)
1749  return content.mTarget.mX;
1750  else
1751  return QVariant();
1752  case 17:
1753  if (content.mType == ESM::AI_Travel)
1754  return content.mTravel.mY;
1755  else if (content.mType == ESM::AI_Follow || content.mType == ESM::AI_Escort)
1756  return content.mTarget.mY;
1757  else
1758  return QVariant();
1759  case 18:
1760  if (content.mType == ESM::AI_Travel)
1761  return content.mTravel.mZ;
1762  else if (content.mType == ESM::AI_Follow || content.mType == ESM::AI_Escort)
1763  return content.mTarget.mZ;
1764  else
1765  return QVariant();
1766  default:
1767  throw std::runtime_error("Trying to access non-existing column in the nested table!");
1768  }
1769  }
1770 
1771  virtual void setNestedData (const RefIdColumn *column,
1772  RefIdData& data, int row, const QVariant& value, int subRowIndex, int subColIndex) const
1773  {
1774  Record<ESXRecordT>& record =
1775  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (row, mType)));
1776  ESXRecordT actor = record.get();
1777  std::vector<ESM::AIPackage>& list = actor.mAiPackage.mList;
1778 
1779  if (subRowIndex < 0 || subRowIndex >= static_cast<int> (list.size()))
1780  throw std::runtime_error ("index out of range");
1781 
1782  ESM::AIPackage& content = list.at(subRowIndex);
1783 
1784  switch(subColIndex)
1785  {
1786  case 0: // ai package type
1787  switch (value.toInt())
1788  {
1789  case 0: content.mType = ESM::AI_Wander; break;
1790  case 1: content.mType = ESM::AI_Travel; break;
1791  case 2: content.mType = ESM::AI_Follow; break;
1792  case 3: content.mType = ESM::AI_Escort; break;
1793  case 4: content.mType = ESM::AI_Activate; break;
1794  default: return; // return without saving
1795  }
1796  break; // always save
1797 
1798  case 1:
1799  if (content.mType == ESM::AI_Wander)
1800  content.mWander.mDistance = static_cast<short>(value.toInt());
1801  else
1802  return; // return without saving
1803 
1804  break; // always save
1805  case 2:
1806  if (content.mType == ESM::AI_Wander ||
1807  content.mType == ESM::AI_Follow || content.mType == ESM::AI_Escort)
1808  content.mWander.mDuration = static_cast<short>(value.toInt());
1809  else
1810  return; // return without saving
1811  case 3:
1812  if (content.mType == ESM::AI_Wander)
1813  content.mWander.mTimeOfDay = static_cast<unsigned char>(value.toInt());
1814  else
1815  return; // return without saving
1816 
1817  break; // always save
1818  case 4:
1819  case 5:
1820  case 6:
1821  case 7:
1822  case 8:
1823  case 9:
1824  case 10:
1825  case 11:
1826  if (content.mType == ESM::AI_Wander)
1827  content.mWander.mIdle[subColIndex-4] = static_cast<unsigned char>(value.toInt());
1828  else
1829  return; // return without saving
1830 
1831  break; // always save
1832  case 12:
1833  if (content.mType == ESM::AI_Wander)
1834  content.mWander.mShouldRepeat = static_cast<unsigned char>(value.toInt());
1835  else
1836  return; // return without saving
1837 
1838  break; // always save
1839  case 13: // NAME32
1840  if (content.mType == ESM::AI_Activate)
1841  content.mActivate.mName.assign(value.toString().toUtf8().constData());
1842  else
1843  return; // return without saving
1844 
1845  break; // always save
1846  case 14: // NAME32
1847  if (content.mType == ESM::AI_Follow || content.mType == ESM::AI_Escort)
1848  content.mTarget.mId.assign(value.toString().toUtf8().constData());
1849  else
1850  return; // return without saving
1851 
1852  break; // always save
1853  case 15:
1854  if (content.mType == ESM::AI_Follow || content.mType == ESM::AI_Escort)
1855  content.mCellName = std::string(value.toString().toUtf8().constData());
1856  else
1857  return; // return without saving
1858 
1859  break; // always save
1860  case 16:
1861  if (content.mType == ESM::AI_Travel)
1862  content.mTravel.mZ = value.toFloat();
1863  else if (content.mType == ESM::AI_Follow || content.mType == ESM::AI_Escort)
1864  content.mTarget.mZ = value.toFloat();
1865  else
1866  return; // return without saving
1867 
1868  break; // always save
1869  case 17:
1870  if (content.mType == ESM::AI_Travel)
1871  content.mTravel.mZ = value.toFloat();
1872  else if (content.mType == ESM::AI_Follow || content.mType == ESM::AI_Escort)
1873  content.mTarget.mZ = value.toFloat();
1874  else
1875  return; // return without saving
1876 
1877  break; // always save
1878  case 18:
1879  if (content.mType == ESM::AI_Travel)
1880  content.mTravel.mZ = value.toFloat();
1881  else if (content.mType == ESM::AI_Follow || content.mType == ESM::AI_Escort)
1882  content.mTarget.mZ = value.toFloat();
1883  else
1884  return; // return without saving
1885 
1886  break; // always save
1887  default:
1888  throw std::runtime_error("Trying to access non-existing column in the nested table!");
1889  }
1890 
1891  record.setModified (actor);
1892  }
1893 
1894  virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData& data) const
1895  {
1896  return 19;
1897  }
1898 
1899  virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData& data, int index) const
1900  {
1901  const Record<ESXRecordT>& record =
1902  static_cast<const Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1903 
1904  return static_cast<int>(record.get().mAiPackage.mList.size());
1905  }
1906  };
1907 
1908 
1909  template <typename ESXRecordT>
1911  {
1913 
1914  // not implemented
1917 
1918  public:
1919 
1921 
1923 
1924  virtual void addNestedRow (const RefIdColumn *column,
1925  RefIdData& data, int index, int position) const
1926  {
1927  Record<ESXRecordT>& record =
1928  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1929  ESXRecordT apparel = record.get();
1930 
1931  std::vector<ESM::PartReference>& list = apparel.mParts.mParts;
1932 
1933  ESM::PartReference newPart;
1934  newPart.mPart = 0; // 0 == head
1935  newPart.mMale = "";
1936  newPart.mFemale = "";
1937 
1938  if (position >= (int)list.size())
1939  list.push_back(newPart);
1940  else
1941  list.insert(list.begin()+position, newPart);
1942 
1943  record.setModified (apparel);
1944  }
1945 
1946  virtual void removeNestedRow (const RefIdColumn *column,
1947  RefIdData& data, int index, int rowToRemove) const
1948  {
1949  Record<ESXRecordT>& record =
1950  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1951  ESXRecordT apparel = record.get();
1952 
1953  std::vector<ESM::PartReference>& list = apparel.mParts.mParts;
1954 
1955  if (rowToRemove < 0 || rowToRemove >= static_cast<int> (list.size()))
1956  throw std::runtime_error ("index out of range");
1957 
1958  list.erase (list.begin () + rowToRemove);
1959 
1960  record.setModified (apparel);
1961  }
1962 
1963  virtual void setNestedTable (const RefIdColumn* column,
1964  RefIdData& data, int index, const NestedTableWrapperBase& nestedTable) const
1965  {
1966  Record<ESXRecordT>& record =
1967  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1968  ESXRecordT apparel = record.get();
1969 
1970  apparel.mParts.mParts =
1972 
1973  record.setModified (apparel);
1974  }
1975 
1977  const RefIdData& data, int index) const
1978  {
1979  const Record<ESXRecordT>& record =
1980  static_cast<const Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1981 
1982  // deleted by dtor of NestedTableStoring
1983  return new NestedTableWrapper<std::vector<typename ESM::PartReference> >(record.get().mParts.mParts);
1984  }
1985 
1986  virtual QVariant getNestedData (const RefIdColumn *column,
1987  const RefIdData& data, int index, int subRowIndex, int subColIndex) const
1988  {
1989  const Record<ESXRecordT>& record =
1990  static_cast<const Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
1991 
1992  const std::vector<ESM::PartReference>& list = record.get().mParts.mParts;
1993 
1994  if (subRowIndex < 0 || subRowIndex >= static_cast<int> (list.size()))
1995  throw std::runtime_error ("index out of range");
1996 
1997  const ESM::PartReference& content = list.at(subRowIndex);
1998 
1999  switch (subColIndex)
2000  {
2001  case 0:
2002  {
2003  if (content.mPart < ESM::PRT_Count)
2004  return content.mPart;
2005  else
2006  throw std::runtime_error("Part Reference Type unexpected value");
2007  }
2008  case 1: return QString(content.mMale.c_str());
2009  case 2: return QString(content.mFemale.c_str());
2010  default:
2011  throw std::runtime_error("Trying to access non-existing column in the nested table!");
2012  }
2013  }
2014 
2015  virtual void setNestedData (const RefIdColumn *column,
2016  RefIdData& data, int row, const QVariant& value, int subRowIndex, int subColIndex) const
2017  {
2018  Record<ESXRecordT>& record =
2019  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (row, mType)));
2020  ESXRecordT apparel = record.get();
2021  std::vector<ESM::PartReference>& list = apparel.mParts.mParts;
2022 
2023  if (subRowIndex < 0 || subRowIndex >= static_cast<int> (list.size()))
2024  throw std::runtime_error ("index out of range");
2025 
2026  switch(subColIndex)
2027  {
2028  case 0: list.at(subRowIndex).mPart = static_cast<unsigned char>(value.toInt()); break;
2029  case 1: list.at(subRowIndex).mMale = value.toString().toStdString(); break;
2030  case 2: list.at(subRowIndex).mFemale = value.toString().toStdString(); break;
2031  default:
2032  throw std::runtime_error("Trying to access non-existing column in the nested table!");
2033  }
2034 
2035  record.setModified (apparel);
2036  }
2037 
2038  virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData& data) const
2039  {
2040  return 3;
2041  }
2042 
2043  virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData& data, int index) const
2044  {
2045  const Record<ESXRecordT>& record =
2046  static_cast<const Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
2047 
2048  return static_cast<int>(record.get().mParts.mParts.size());
2049  }
2050  };
2051 
2052 
2053  struct LevListColumns : public BaseColumns
2054  {
2057 
2058  LevListColumns (const BaseColumns& base) : BaseColumns (base) {}
2059  };
2060 
2061  template<typename RecordT>
2063  {
2065 
2066  public:
2067 
2069 
2070  virtual QVariant getData (const RefIdColumn *column, const RefIdData& data, int index)
2071  const;
2072 
2073  virtual void setData (const RefIdColumn *column, RefIdData& data, int index,
2074  const QVariant& value) const;
2076  };
2077 
2078  template<typename RecordT>
2080  const LevListColumns &columns)
2081  : BaseRefIdAdapter<RecordT> (type, columns), mLevList (columns)
2082  {}
2083 
2084  template<typename RecordT>
2086  int index) const
2087  {
2088  if (column==mLevList.mLevList || column == mLevList.mNestedListLevList)
2089  return QVariant::fromValue(ColumnBase::TableEdit_Full);
2090 
2091  return BaseRefIdAdapter<RecordT>::getData (column, data, index);
2092  }
2093 
2094  template<typename RecordT>
2096  const QVariant& value) const
2097  {
2098  BaseRefIdAdapter<RecordT>::setData (column, data, index, value);
2099  return;
2100  }
2101 
2102 
2103  // for non-tables
2104  template <typename ESXRecordT>
2106  {
2108 
2109  // not implemented
2112 
2113  public:
2114 
2116  :mType(type) {}
2117 
2119 
2120  virtual void addNestedRow (const RefIdColumn *column,
2121  RefIdData& data, int index, int position) const
2122  {
2123  throw std::logic_error ("cannot add a row to a fixed table");
2124  }
2125 
2126  virtual void removeNestedRow (const RefIdColumn *column,
2127  RefIdData& data, int index, int rowToRemove) const
2128  {
2129  throw std::logic_error ("cannot remove a row to a fixed table");
2130  }
2131 
2132  virtual void setNestedTable (const RefIdColumn* column,
2133  RefIdData& data, int index, const NestedTableWrapperBase& nestedTable) const
2134  {
2135  throw std::logic_error ("table operation not supported");
2136  }
2137 
2139  const RefIdData& data, int index) const
2140  {
2141  throw std::logic_error ("table operation not supported");
2142  }
2143 
2144  virtual QVariant getNestedData (const RefIdColumn *column,
2145  const RefIdData& data, int index, int subRowIndex, int subColIndex) const
2146  {
2147  const Record<ESXRecordT>& record =
2148  static_cast<const Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
2149 
2151  {
2152  switch (subColIndex)
2153  {
2154  case 0: return QVariant(); // disable the checkbox editor
2155  case 1: return record.get().mFlags & ESM::CreatureLevList::AllLevels;
2156  case 2: return static_cast<int> (record.get().mChanceNone);
2157  default:
2158  throw std::runtime_error("Trying to access non-existing column in levelled creatues!");
2159  }
2160  }
2161  else
2162  {
2163  switch (subColIndex)
2164  {
2165  case 0: return record.get().mFlags & ESM::ItemLevList::Each;
2166  case 1: return record.get().mFlags & ESM::ItemLevList::AllLevels;
2167  case 2: return static_cast<int> (record.get().mChanceNone);
2168  default:
2169  throw std::runtime_error("Trying to access non-existing column in levelled items!");
2170  }
2171  }
2172  }
2173 
2174  virtual void setNestedData (const RefIdColumn *column,
2175  RefIdData& data, int row, const QVariant& value, int subRowIndex, int subColIndex) const
2176  {
2177  Record<ESXRecordT>& record =
2178  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (row, mType)));
2179  ESXRecordT leveled = record.get();
2180 
2182  {
2183  switch(subColIndex)
2184  {
2185  case 0: return; // return without saving
2186  case 1:
2187  {
2188  if(value.toBool())
2189  {
2190  leveled.mFlags |= ESM::CreatureLevList::AllLevels;
2191  break;
2192  }
2193  else
2194  {
2195  leveled.mFlags &= ~ESM::CreatureLevList::AllLevels;
2196  break;
2197  }
2198  }
2199  case 2: leveled.mChanceNone = static_cast<unsigned char>(value.toInt()); break;
2200  default:
2201  throw std::runtime_error("Trying to set non-existing column in levelled creatures!");
2202  }
2203  }
2204  else
2205  {
2206  switch(subColIndex)
2207  {
2208  case 0:
2209  {
2210  if(value.toBool())
2211  {
2212  leveled.mFlags |= ESM::ItemLevList::Each;
2213  break;
2214  }
2215  else
2216  {
2217  leveled.mFlags &= ~ESM::ItemLevList::Each;
2218  break;
2219  }
2220  }
2221  case 1:
2222  {
2223  if(value.toBool())
2224  {
2225  leveled.mFlags |= ESM::ItemLevList::AllLevels;
2226  break;
2227  }
2228  else
2229  {
2230  leveled.mFlags &= ~ESM::ItemLevList::AllLevels;
2231  break;
2232  }
2233  }
2234  case 2: leveled.mChanceNone = static_cast<unsigned char>(value.toInt()); break;
2235  default:
2236  throw std::runtime_error("Trying to set non-existing column in levelled items!");
2237  }
2238  }
2239 
2240  record.setModified (leveled);
2241  }
2242 
2243  virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData& data) const
2244  {
2245  return 3;
2246  }
2247 
2248  virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData& data, int index) const
2249  {
2250  return 1; // fixed at size 1
2251  }
2252  };
2253 
2254  // for tables
2255  template <typename ESXRecordT>
2257  {
2259 
2260  // not implemented
2263 
2264  public:
2265 
2267 
2269 
2270  virtual void addNestedRow (const RefIdColumn *column,
2271  RefIdData& data, int index, int position) const
2272  {
2273  Record<ESXRecordT>& record =
2274  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
2275  ESXRecordT leveled = record.get();
2276 
2277  std::vector<ESM::LevelledListBase::LevelItem>& list = leveled.mList;
2278 
2280  newItem.mId = "";
2281  newItem.mLevel = 0;
2282 
2283  if (position >= (int)list.size())
2284  list.push_back(newItem);
2285  else
2286  list.insert(list.begin()+position, newItem);
2287 
2288  record.setModified (leveled);
2289  }
2290 
2291  virtual void removeNestedRow (const RefIdColumn *column,
2292  RefIdData& data, int index, int rowToRemove) const
2293  {
2294  Record<ESXRecordT>& record =
2295  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
2296  ESXRecordT leveled = record.get();
2297 
2298  std::vector<ESM::LevelledListBase::LevelItem>& list = leveled.mList;
2299 
2300  if (rowToRemove < 0 || rowToRemove >= static_cast<int> (list.size()))
2301  throw std::runtime_error ("index out of range");
2302 
2303  list.erase (list.begin () + rowToRemove);
2304 
2305  record.setModified (leveled);
2306  }
2307 
2308  virtual void setNestedTable (const RefIdColumn* column,
2309  RefIdData& data, int index, const NestedTableWrapperBase& nestedTable) const
2310  {
2311  Record<ESXRecordT>& record =
2312  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
2313  ESXRecordT leveled = record.get();
2314 
2315  leveled.mList =
2317 
2318  record.setModified (leveled);
2319  }
2320 
2322  const RefIdData& data, int index) const
2323  {
2324  const Record<ESXRecordT>& record =
2325  static_cast<const Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
2326 
2327  // deleted by dtor of NestedTableStoring
2329  }
2330 
2331  virtual QVariant getNestedData (const RefIdColumn *column,
2332  const RefIdData& data, int index, int subRowIndex, int subColIndex) const
2333  {
2334  const Record<ESXRecordT>& record =
2335  static_cast<const Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
2336 
2337  const std::vector<ESM::LevelledListBase::LevelItem>& list = record.get().mList;
2338 
2339  if (subRowIndex < 0 || subRowIndex >= static_cast<int> (list.size()))
2340  throw std::runtime_error ("index out of range");
2341 
2342  const ESM::LevelledListBase::LevelItem& content = list.at(subRowIndex);
2343 
2344  switch (subColIndex)
2345  {
2346  case 0: return QString(content.mId.c_str());
2347  case 1: return content.mLevel;
2348  default:
2349  throw std::runtime_error("Trying to access non-existing column in the nested table!");
2350  }
2351  }
2352 
2353  virtual void setNestedData (const RefIdColumn *column,
2354  RefIdData& data, int row, const QVariant& value, int subRowIndex, int subColIndex) const
2355  {
2356  Record<ESXRecordT>& record =
2357  static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (row, mType)));
2358  ESXRecordT leveled = record.get();
2359  std::vector<ESM::LevelledListBase::LevelItem>& list = leveled.mList;
2360 
2361  if (subRowIndex < 0 || subRowIndex >= static_cast<int> (list.size()))
2362  throw std::runtime_error ("index out of range");
2363 
2364  switch(subColIndex)
2365  {
2366  case 0: list.at(subRowIndex).mId = value.toString().toStdString(); break;
2367  case 1: list.at(subRowIndex).mLevel = static_cast<short>(value.toInt()); break;
2368  default:
2369  throw std::runtime_error("Trying to access non-existing column in the nested table!");
2370  }
2371 
2372  record.setModified (leveled);
2373  }
2374 
2375  virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData& data) const
2376  {
2377  return 2;
2378  }
2379 
2380  virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData& data, int index) const
2381  {
2382  const Record<ESXRecordT>& record =
2383  static_cast<const Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
2384 
2385  return static_cast<int>(record.get().mList.size());
2386  }
2387  };
2388 }
2389 
2390 #endif
virtual void setData(const RefIdColumn *column, RefIdData &data, int index, const QVariant &value) const
If the data type does not match an exception is thrown.
Definition: refidadapterimp.cpp:229
NpcMiscRefIdAdapter & operator=(const NpcMiscRefIdAdapter &)
const RefIdColumn * mType
Definition: refidadapterimp.hpp:677
Definition: aipackage.hpp:63
virtual ~NestedListLevListRefIdAdapter()
Definition: refidadapterimp.hpp:2118
virtual void setData(const RefIdColumn *column, RefIdData &data, int index, const QVariant &value) const
If the data type does not match an exception is thrown.
Definition: refidadapterimp.hpp:453
const RefIdColumn * mHealth
Definition: refidadapterimp.hpp:678
const RefIdColumn * mThrust[2]
Definition: refidadapterimp.hpp:884
const RefIdColumn * mArmor
Definition: refidadapterimp.hpp:679
ModelColumns mModel
Definition: refidadapterimp.hpp:126
Definition: nestedtablewrapper.hpp:6
Adapter for IDs with names (all but levelled lists and statics)
Definition: refidadapterimp.hpp:187
virtual void removeNestedRow(const RefIdColumn *column, RefIdData &data, int index, int rowToRemove) const
Definition: refidadapterimp.hpp:1205
InventoryRefIdAdapter(UniversalId::Type type, const InventoryColumns &columns)
Definition: refidadapterimp.hpp:273
virtual QVariant getData(const RefIdColumn *column, const RefIdData &data, int index) const
If called on the nest column, should return QVariant(true).
Definition: refidadapterimp.hpp:279
virtual void setData(const RefIdColumn *column, RefIdData &data, int index, const QVariant &value) const
If the data type does not match an exception is thrown.
Definition: refidadapterimp.cpp:584
const RefIdColumn * mPartRef
Definition: refidadapterimp.hpp:680
const RefIdColumn * mNestedListLevList
Definition: refidadapterimp.hpp:2056
virtual void removeNestedRow(const RefIdColumn *column, RefIdData &data, int index, int rowToRemove) const
Definition: refidadapterimp.cpp:1104
NestedListLevListRefIdAdapter(UniversalId::Type type)
Definition: refidadapterimp.hpp:2115
EnchantableRefIdAdapter(UniversalId::Type type, const EnchantableColumns &columns)
Definition: refidadapterimp.hpp:431
Definition: loadarmo.hpp:47
virtual QVariant getData(const RefIdColumn *column, const RefIdData &data, int index) const
If called on the nest column, should return QVariant(true).
Definition: refidadapterimp.cpp:309
std::string mId
Definition: loadlevlist.hpp:33
Definition: refidadapterimp.hpp:876
Definition: refidadapterimp.hpp:23
IngredientRefIdAdapter(const IngredientColumns &columns)
Definition: refidadapterimp.cpp:61
virtual QVariant getData(const RefIdColumn *column, const RefIdData &data, int index) const
If called on the nest column, should return QVariant(true).
Definition: refidadapterimp.cpp:767
virtual QVariant getNestedData(const RefIdColumn *column, const RefIdData &data, int index, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.hpp:2331
NestedTravelRefIdAdapter & operator=(const NestedTravelRefIdAdapter &)
const RefIdColumn * mDestinations
Definition: refidadapterimp.hpp:549
std::string mMale
Definition: loadarmo.hpp:50
virtual void setNestedTable(const RefIdColumn *column, RefIdData &data, int index, const NestedTableWrapperBase &nestedTable) const
Definition: refidadapterimp.hpp:1222
virtual QVariant getData(const RefIdColumn *column, const RefIdData &data, int index) const
If called on the nest column, should return QVariant(true).
Definition: refidadapterimp.cpp:569
virtual void setData(const RefIdColumn *column, RefIdData &data, int index, const QVariant &value) const
If the data type does not match an exception is thrown.
Definition: refidadapterimp.hpp:225
virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData &data) const
Definition: refidadapterimp.hpp:2243
CreatureAttributesRefIdAdapter()
Definition: refidadapterimp.cpp:1215
virtual ~NestedLevListRefIdAdapter()
Definition: refidadapterimp.hpp:2268
virtual ~NestedSpellRefIdAdapter()
Definition: refidadapterimp.hpp:1322
UniversalId::Type mType
Definition: refidadapterimp.hpp:1589
State mState
Definition: record.hpp:19
ModelRefIdAdapter(UniversalId::Type type, const ModelColumns &columns)
Definition: refidadapterimp.hpp:141
const RefIdColumn * mType
Definition: refidadapterimp.hpp:716
float pos[3]
Definition: defs.hpp:40
virtual QVariant getData(const RefIdColumn *column, const RefIdData &data, int index) const
If called on the nest column, should return QVariant(true).
Definition: refidadapterimp.cpp:717
virtual void addNestedRow(const RefIdColumn *column, RefIdData &data, int index, int position) const
Definition: refidadapterimp.hpp:1109
virtual void removeNestedRow(const RefIdColumn *column, RefIdData &data, int index, int rowToRemove) const
Definition: refidadapterimp.hpp:2126
virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData &data) const
Definition: refidadapterimp.hpp:1572
PotionColumns mColumns
Definition: refidadapterimp.hpp:329
const RefIdColumn * mBloodType
Definition: refidadapterimp.hpp:760
virtual void setData(const RefIdColumn *column, RefIdData &data, int index, const QVariant &value) const
If the data type does not match an exception is thrown.
Definition: refidadapterimp.cpp:659
Definition: nestedcoladapterimp.hpp:229
virtual QVariant getData(const RefIdColumn *column, const RefIdData &data, int index) const
If called on the nest column, should return QVariant(true).
Definition: refidadapterimp.cpp:469
AIWander mWander
Definition: aipackage.hpp:79
virtual NestedTableWrapperBase * nestedTable(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.cpp:116
BookRefIdAdapter(const EnchantableColumns &columns, const RefIdColumn *bookType, const RefIdColumn *skill, const RefIdColumn *text)
Definition: refidadapterimp.cpp:303
Definition: loadcont.hpp:19
const RefIdColumn * mAlarm
Definition: refidadapterimp.hpp:546
virtual void addNestedRow(const RefIdColumn *column, RefIdData &data, int index, int position) const
Definition: refidadapterimp.cpp:897
std::string mCellName
Definition: transport.hpp:22
Definition: aipackage.hpp:62
AITarget mTarget
Definition: aipackage.hpp:81
std::string mCellName
Definition: aipackage.hpp:87
const RefIdColumn * mInventory
Definition: refidadapterimp.hpp:547
Definition: refidadapterimp.hpp:351
int mCount
Definition: loadcont.hpp:21
NestedLevListRefIdAdapter(UniversalId::Type type)
Definition: refidadapterimp.hpp:2266
virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.hpp:1899
virtual std::string getId(const RecordBase &record) const
Definition: refidadapterimp.hpp:68
virtual void setData(const RefIdColumn *column, RefIdData &data, int index, const QVariant &value) const
If the data type does not match an exception is thrown.
Definition: refidadapterimp.cpp:515
const RefIdColumn * mColor
Definition: refidadapterimp.hpp:803
short mDuration
Definition: aipackage.hpp:32
virtual void addNestedRow(const RefIdColumn *column, RefIdData &data, int index, int position) const
Definition: refidadapterimp.hpp:1450
NAME32 mItem
Definition: loadcont.hpp:22
NpcColumns mColumns
Definition: refidadapterimp.hpp:862
Definition: refidadapterimp.hpp:938
EffectsRefIdAdapter(const EffectsRefIdAdapter &)
Definition: transport.hpp:19
virtual void setNestedData(const RefIdColumn *column, RefIdData &data, int row, const QVariant &value, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.cpp:1382
const RefIdColumn * mSound
Definition: refidadapterimp.hpp:804
virtual QVariant getNestedData(const RefIdColumn *column, const RefIdData &data, int index, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.hpp:2144
virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.hpp:2248
const RefIdColumn * mBloodType
Definition: refidadapterimp.hpp:854
NestedListLevListRefIdAdapter & operator=(const NestedListLevListRefIdAdapter &)
virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.cpp:1210
virtual void removeNestedRow(const RefIdColumn *column, RefIdData &data, int index, int rowToRemove) const
Definition: refidadapterimp.hpp:1478
Definition: refidadapterimp.hpp:827
virtual void setNestedData(const RefIdColumn *column, RefIdData &data, int row, const QVariant &value, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.hpp:2353
virtual QVariant getNestedData(const RefIdColumn *column, const RefIdData &data, int index, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.cpp:1363
Definition: refidadapterimp.hpp:1000
unsigned char mPart
Definition: loadarmo.hpp:49
Type
Definition: universalid.hpp:40
Adapter for IDs with models (all but levelled lists)
Definition: refidadapterimp.hpp:124
virtual void setNestedTable(const RefIdColumn *column, RefIdData &data, int index, const NestedTableWrapperBase &nestedTable) const
Definition: refidadapterimp.cpp:103
const RefIdColumn * mWeight
Definition: refidadapterimp.hpp:248
virtual void removeNestedRow(const RefIdColumn *column, RefIdData &data, int index, int rowToRemove) const
Definition: refidadapterimp.cpp:1330
const RefIdColumn * mType
Definition: refidadapterimp.hpp:659
const RefIdColumn * mScale
Definition: refidadapterimp.hpp:755
Definition: refiddata.hpp:219
virtual QVariant getData(const RefIdColumn *column, const RefIdData &data, int index) const
If called on the nest column, should return QVariant(true).
Definition: refidadapterimp.hpp:74
virtual void setNestedTable(const RefIdColumn *column, RefIdData &data, int index, const NestedTableWrapperBase &nestedTable) const
Definition: refidadapterimp.hpp:1495
virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData &data) const
Definition: refidadapterimp.cpp:1400
virtual void setData(const RefIdColumn *column, RefIdData &data, int index, const QVariant &value) const
If the data type does not match an exception is thrown.
Definition: refidadapterimp.hpp:621
NpcRefIdAdapter(const NpcColumns &columns)
Definition: refidadapterimp.cpp:763
virtual void setNestedTable(const RefIdColumn *column, RefIdData &data, int index, const NestedTableWrapperBase &nestedTable) const
Definition: refidadapterimp.cpp:1429
const RefIdColumn * mPartRef
Definition: refidadapterimp.hpp:717
int list(Bsa::BSAFile &bsa, Arguments &info)
Definition: bsatool.cpp:182
virtual void setNestedData(const RefIdColumn *column, RefIdData &data, int row, const QVariant &value, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.cpp:1062
const RefIdColumn * mScript
Definition: refidadapterimp.hpp:180
std::map< const RefIdColumn *, unsigned int > mFlags
Definition: refidadapterimp.hpp:753
virtual QVariant getNestedData(const RefIdColumn *column, const RefIdData &data, int index, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.cpp:1441
virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData &data) const
Definition: refidadapterimp.cpp:1081
virtual NestedTableWrapperBase * nestedTable(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.cpp:1030
WeaponColumns(const EnchantableColumns &columns)
Definition: refidadapterimp.cpp:1498
virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.hpp:1426
AIActivate mActivate
Definition: aipackage.hpp:82
BaseRefIdAdapter(UniversalId::Type type, const BaseColumns &base)
Definition: refidadapterimp.hpp:57
virtual void setNestedTable(const RefIdColumn *column, RefIdData &data, int index, const NestedTableWrapperBase &nestedTable) const
Definition: refidadapterimp.hpp:2132
const RefIdColumn * mKey
Definition: refidadapterimp.hpp:829
virtual QVariant getNestedData(const RefIdColumn *column, const RefIdData &data, int index, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.cpp:936
virtual NestedTableWrapperBase * nestedTable(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.cpp:1244
virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData &data) const
Definition: refidadapterimp.hpp:2375
BodyPartRefIdAdapter(const BodyPartRefIdAdapter &)
IngredEffectRefIdAdapter()
Definition: refidadapterimp.cpp:84
const RefIdColumn * mOriginal
Definition: refidadapterimp.hpp:756
Definition: refidadapterimp.hpp:1058
Definition: refidadapterimp.hpp:675
EnchantableColumns(const InventoryColumns &base)
Definition: refidadapterimp.hpp:409
virtual void addNestedRow(const RefIdColumn *column, RefIdData &data, int index, int position) const
Definition: refidadapterimp.cpp:1218
virtual void setData(const RefIdColumn *column, RefIdData &data, int index, const QVariant &value) const
If the data type does not match an exception is thrown.
Definition: refidadapterimp.cpp:729
virtual void setData(Record< ESXRecordT > &record, const QVariant &value, int subRowIndex, int subColIndex) const
Definition: nestedcoladapterimp.hpp:348
virtual QVariant getData(const RefIdColumn *column, const RefIdData &data, int index) const
If called on the nest column, should return QVariant(true).
Definition: refidadapterimp.cpp:66
virtual QVariant getData(const RefIdColumn *column, const RefIdData &data, int index) const
If called on the nest column, should return QVariant(true).
Definition: refidadapterimp.hpp:209
virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData &data) const
Definition: refidadapterimp.hpp:1157
Definition: refidadapterimp.hpp:714
virtual void removeNestedRow(const RefIdColumn *column, RefIdData &data, int index, int rowToRemove) const
Definition: refidadapterimp.cpp:1010
virtual NestedTableWrapperBase * nestedTable(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.cpp:1350
virtual void setNestedData(const RefIdColumn *column, RefIdData &data, int row, const QVariant &value, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.hpp:1149
virtual void setNestedTable(const RefIdColumn *column, RefIdData &data, int index, const NestedTableWrapperBase &nestedTable) const
Definition: refidadapterimp.cpp:909
virtual void addNestedRow(const RefIdColumn *column, RefIdData &data, int index, int position) const
Definition: refidadapterimp.cpp:1324
virtual void setNestedData(const RefIdColumn *column, RefIdData &data, int row, const QVariant &value, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.hpp:1402
virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData &data) const
Definition: refidadapterimp.cpp:1310
NestedTravelRefIdAdapter(const NestedTravelRefIdAdapter &)
virtual QVariant getData(const RefIdColumn *column, const RefIdData &data, int index) const
If called on the nest column, should return QVariant(true).
Definition: refidadapterimp.cpp:398
NestedInventoryRefIdAdapter & operator=(const NestedInventoryRefIdAdapter &)
NpcColumns(const ActorColumns &actorColumns)
Definition: refidadapterimp.cpp:749
virtual NestedTableWrapperBase * nestedTable(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.cpp:1116
virtual QVariant getData(const RefIdColumn *column, const RefIdData &data, int index) const
If called on the nest column, should return QVariant(true).
Definition: refidadapterimp.cpp:214
virtual void addNestedRow(const RefIdColumn *column, RefIdData &data, int index, int position) const
Definition: refidadapterimp.cpp:91
int mType
Definition: aipackage.hpp:74
Definition: refidadapterimp.hpp:695
ActorAiRefIdAdapter(UniversalId::Type type)
Definition: refidadapterimp.hpp:1597
const RefIdColumn * mSpells
Definition: refidadapterimp.hpp:548
const RefIdColumn * mMisc
Definition: refidadapterimp.hpp:853
NAME32 mName
Definition: aipackage.hpp:54
const RefIdColumn * mEmitterType
Definition: refidadapterimp.hpp:805
const RefIdColumn * mText
Definition: refidadapterimp.hpp:699
InventoryColumns mInventory
Definition: refidadapterimp.hpp:258
UniversalId::Type mType
Definition: refidadapterimp.hpp:369
Definition: columnbase.hpp:20
virtual ~BodyPartRefIdAdapter()
Definition: refidadapterimp.hpp:1922
virtual void setData(const RefIdColumn *column, RefIdData &data, int index, const QVariant &value) const
If the data type does not match an exception is thrown.
Definition: refidadapterimp.cpp:75
virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.cpp:1405
State
Definition: record.hpp:10
virtual void addNestedRow(const RefIdColumn *column, RefIdData &data, int index, int position) const
Definition: refidadapterimp.hpp:1924
LevListColumns mLevList
Definition: refidadapterimp.hpp:2064
virtual void setNestedData(const RefIdColumn *column, RefIdData &data, int row, const QVariant &value, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.hpp:2015
float mZ
Definition: aipackage.hpp:46
Definition: aipackage.hpp:67
Definition: refidadapter.hpp:24
const RefIdColumn * mOrganic
Definition: refidadapterimp.hpp:735
virtual void setNestedData(const RefIdColumn *column, RefIdData &data, int row, const QVariant &value, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.cpp:1162
const RefIdColumn * mIcon
Definition: refidadapterimp.hpp:247
virtual QVariant getData(const RefIdColumn *column, const RefIdData &data, int index) const
If called on the nest column, should return QVariant(true).
Definition: refidadapterimp.cpp:1505
virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData &data) const
Definition: refidadapterimp.cpp:1205
Definition: refidadapterimp.hpp:811
Definition: loadlevlist.hpp:75
Definition: refidadapterimp.hpp:1436
NpcSkillsRefIdAdapter()
Definition: refidadapterimp.cpp:1001
virtual void addNestedRow(const RefIdColumn *column, RefIdData &data, int index, int position) const
Definition: refidadapterimp.hpp:2270
virtual void setNestedTable(const RefIdColumn *column, RefIdData &data, int index, const NestedTableWrapperBase &nestedTable) const
Definition: refidadapterimp.cpp:1016
NestedSpellRefIdAdapter(const NestedSpellRefIdAdapter &)
NameColumns mName
Definition: refidadapterimp.hpp:189
UniversalId::Type mType
Definition: refidadapterimp.hpp:1097
const RecordBase & getRecord(const LocalIndex &index) const
Definition: refiddata.cpp:122
virtual QVariant getNestedData(const RefIdColumn *column, const RefIdData &data, int index, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.hpp:1670
virtual void addNestedRow(const RefIdColumn *column, RefIdData &data, int index, int position) const
Definition: refidadapterimp.hpp:1324
virtual void removeNestedRow(const RefIdColumn *column, RefIdData &data, int index, int rowToRemove) const
Definition: refidadapterimp.hpp:1630
virtual void setNestedData(const RefIdColumn *column, RefIdData &data, int row, const QVariant &value, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.hpp:1267
virtual void setNestedData(const RefIdColumn *column, RefIdData &data, int row, const QVariant &value, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.hpp:2174
Definition: aipackage.hpp:65
virtual void setNestedTable(const RefIdColumn *column, RefIdData &data, int index, const NestedTableWrapperBase &nestedTable) const
Definition: refidadapterimp.cpp:1110
NestedInventoryRefIdAdapter(const NestedInventoryRefIdAdapter &)
Definition: refidadapterimp.hpp:2256
virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData &data) const
Definition: refidadapterimp.cpp:990
const RefIdColumn * mEffects
Definition: refidadapterimp.hpp:346
CreatureColumns(const ActorColumns &actorColumns)
Definition: refidadapterimp.cpp:454
NameColumns(const ModelColumns &base)
Definition: refidadapterimp.hpp:182
virtual void removeNestedRow(const RefIdColumn *column, RefIdData &data, int index, int rowToRemove) const
Definition: refidadapterimp.hpp:1946
const RefIdColumn * mType
Definition: refidadapterimp.hpp:878
ActorRefIdAdapter(UniversalId::Type type, const ActorColumns &columns)
Definition: refidadapterimp.hpp:575
Definition: refidcollection.hpp:24
UniversalId::Type mType
Definition: refidadapterimp.hpp:2107
Adapter for IDs that can go into an inventory.
Definition: refidadapterimp.hpp:256
virtual NestedTableWrapperBase * nestedTable(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.hpp:2138
virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.cpp:1493
virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData &data) const
Definition: refidadapterimp.cpp:1488
ToolColumns(const InventoryColumns &base)
Definition: refidadapterimp.hpp:478
virtual void setData(const RefIdColumn *column, RefIdData &data, int index, const QVariant &value) const
If the data type does not match an exception is thrown.
Definition: refidadapterimp.cpp:372
UniversalId::Type mType
Definition: refidadapterimp.hpp:1438
IngredientColumns(const InventoryColumns &columns)
Definition: refidadapterimp.cpp:58
virtual void setNestedTable(const RefIdColumn *column, RefIdData &data, int index, const NestedTableWrapperBase &nestedTable) const
Definition: refidadapterimp.cpp:1336
NestedListLevListRefIdAdapter(const NestedListLevListRefIdAdapter &)
UniversalId::Type mType
Definition: refidadapterimp.hpp:35
virtual void setData(const RefIdColumn *column, RefIdData &data, int index, const QVariant &value) const
If the data type does not match an exception is thrown.
Definition: refidadapterimp.cpp:830
virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.hpp:1300
float mY
Definition: aipackage.hpp:46
virtual void removeNestedRow(const RefIdColumn *column, RefIdData &data, int index, int rowToRemove) const
Definition: refidadapterimp.hpp:1117
virtual QVariant getNestedData(const RefIdColumn *column, const RefIdData &data, int index, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.hpp:1383
NestedTravelRefIdAdapter(UniversalId::Type type)
Definition: refidadapterimp.hpp:1446
const RefIdColumn * mModified
Definition: refidadapterimp.hpp:26
ContainerRefIdAdapter(const NameColumns &columns, const RefIdColumn *weight, const RefIdColumn *organic, const RefIdColumn *respawn, const RefIdColumn *content)
Definition: refidadapterimp.cpp:392
const RefIdColumn * mChop[2]
Definition: refidadapterimp.hpp:882
Definition: refidadapterimp.hpp:473
const RefIdColumn * mEnchantmentPoints
Definition: refidadapterimp.hpp:407
MiscRefIdAdapter(const InventoryColumns &columns, const RefIdColumn *key)
Definition: refidadapterimp.cpp:713
virtual void setData(const RefIdColumn *column, RefIdData &data, int index, const QVariant &value) const
If the data type does not match an exception is thrown.
Definition: refidadapterimp.cpp:1544
Definition: refidadapterimp.hpp:541
Definition: refidadapterimp.hpp:657
const RefIdColumn * mAttributes
Definition: refidadapterimp.hpp:757
const RefIdColumn * mId
Definition: refidadapterimp.hpp:25
virtual void setData(const RefIdColumn *column, RefIdData &data, int index, const QVariant &value) const
If the data type does not match an exception is thrown.
Definition: refidadapterimp.cpp:279
UniversalId::Type getType() const
Definition: refidadapterimp.hpp:109
UniversalId::Type mType
Definition: refidadapterimp.hpp:1312
virtual NestedTableWrapperBase * nestedTable(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.hpp:1508
virtual void setId(RecordBase &record, const std::string &id)
Definition: refidadapterimp.hpp:62
DoorRefIdAdapter(const NameColumns &columns, const RefIdColumn *openSound, const RefIdColumn *closeSound)
Definition: refidadapterimp.cpp:563
CreatureMiscRefIdAdapter & operator=(const CreatureMiscRefIdAdapter &)
virtual QVariant getData(const RefIdColumn *column, const RefIdData &data, int index) const
If called on the nest column, should return QVariant(true).
Definition: refidadapterimp.cpp:258
virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.hpp:2043
std::string toString() const
Definition: esmcommon.hpp:58
const RefIdColumn * mAttributes
Definition: refidadapterimp.hpp:851
virtual QVariant getData(const RefIdColumn *column, const RefIdData &data, int index) const
If called on the nest column, should return QVariant(true).
Definition: refidadapterimp.hpp:146
const RefIdColumn * mContent
Definition: refidadapterimp.hpp:737
virtual void setData(const RefIdColumn *column, RefIdData &data, int index, const QVariant &value) const
If the data type does not match an exception is thrown.
Definition: refidadapterimp.hpp:521
virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.hpp:1163
virtual void removeNestedRow(const RefIdColumn *column, RefIdData &data, int index, int rowToRemove) const
Definition: refidadapterimp.cpp:97
LevelledListRefIdAdapter(UniversalId::Type type, const LevListColumns &columns)
Definition: refidadapterimp.hpp:2079
virtual void setNestedData(const RefIdColumn *column, RefIdData &data, int row, const QVariant &value, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.hpp:1545
virtual NestedTableWrapperBase * nestedTable(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.hpp:1976
virtual ~EffectsRefIdAdapter()
Definition: refidadapterimp.hpp:1107
virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData &data) const
Definition: refidadapterimp.hpp:1421
const RefIdColumn * mQuality
Definition: refidadapterimp.hpp:475
InventoryColumns(const NameColumns &base)
Definition: refidadapterimp.hpp:251
virtual void removeNestedRow(const RefIdColumn *column, RefIdData &data, int index, int rowToRemove) const
Definition: refidadapterimp.hpp:2291
virtual void setNestedTable(const RefIdColumn *column, RefIdData &data, int index, const NestedTableWrapperBase &nestedTable) const
Definition: refidadapterimp.hpp:1647
virtual void addNestedRow(const RefIdColumn *column, RefIdData &data, int index, int position) const
Definition: refidadapterimp.hpp:1603
Definition: refidadapterimp.hpp:2053
virtual void setTable(Record< ESXRecordT > &record, const NestedTableWrapperBase &nestedTable) const
Definition: nestedcoladapterimp.hpp:270
NpcAttributesRefIdAdapter()
Definition: refidadapterimp.cpp:894
NestedLevListRefIdAdapter & operator=(const NestedLevListRefIdAdapter &)
ToolColumns mTools
Definition: refidadapterimp.hpp:485
virtual QVariant getData(const RefIdColumn *column, const RefIdData &data, int index) const
If called on the nest column, should return QVariant(true).
Definition: refidadapterimp.cpp:357
NestedInventoryRefIdAdapter(UniversalId::Type type)
Definition: refidadapterimp.hpp:1182
Definition: refidadapterimp.hpp:781
PotionRefIdAdapter(const PotionColumns &columns, const RefIdColumn *autoCalc)
Definition: refidadapterimp.cpp:15
virtual void setNestedTable(const RefIdColumn *column, RefIdData &data, int index, const NestedTableWrapperBase &nestedTable) const
Definition: refidadapterimp.hpp:1963
virtual NestedTableWrapperBase * nestedTable(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.hpp:1235
Definition: aipackage.hpp:64
virtual ~ActorAiRefIdAdapter()
Definition: refidadapterimp.hpp:1599
virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.cpp:202
virtual ~IngredEffectRefIdAdapter()
Definition: refidadapterimp.cpp:88
Definition: loadlevlist.hpp:81
virtual void setData(const RefIdColumn *column, RefIdData &data, int index, const QVariant &value) const
If the data type does not match an exception is thrown.
Definition: refidadapterimp.cpp:420
AITravel mTravel
Definition: aipackage.hpp:80
Definition: refidadapterimp.hpp:1910
virtual QVariant getData(const RefIdColumn *column, const RefIdData &data, int index) const
If called on the nest column, should return QVariant(true).
Definition: refidadapterimp.hpp:505
const RefIdColumn * mFaction
Definition: refidadapterimp.hpp:848
virtual QVariant getData(const RefIdColumn *column, const RefIdData &data, int index) const
If called on the nest column, should return QVariant(true).
Definition: refidadapterimp.hpp:437
std::map< const RefIdColumn *, unsigned int > mServices
Definition: refidadapterimp.hpp:551
unsigned char mTimeOfDay
Definition: aipackage.hpp:33
Definition: refidadapterimp.hpp:245
const RefIdColumn * mMisc
Definition: refidadapterimp.hpp:759
Definition: refidadapterimp.hpp:732
std::map< const RefIdColumn *, unsigned int > mFlags
Definition: refidadapterimp.hpp:845
virtual ~CreatureMiscRefIdAdapter()
Definition: refidadapterimp.cpp:1414
virtual void setNestedTable(const RefIdColumn *column, RefIdData &data, int index, const NestedTableWrapperBase &nestedTable) const
Definition: refidadapterimp.hpp:1360
WeaponRefIdAdapter(const WeaponColumns &columns)
Definition: refidadapterimp.cpp:1501
virtual void addNestedRow(const RefIdColumn *column, RefIdData &data, int index, int position) const
Definition: refidadapterimp.cpp:1417
virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData &data) const
Definition: refidadapterimp.hpp:1295
const RefIdColumn * mHair
Definition: refidadapterimp.hpp:849
virtual QVariant getNestedData(const RefIdColumn *column, const RefIdData &data, int index, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.cpp:1257
const RefIdColumn * mFlee
Definition: refidadapterimp.hpp:544
const ESXRecordT & get() const
Throws an exception, if the record is deleted.
Definition: record.hpp:106
Definition: refidadapterimp.hpp:1310
Definition: aipackage.hpp:72
LightColumns mColumns
Definition: refidadapterimp.hpp:813
short mDistance
Definition: aipackage.hpp:31
ModelColumns(const BaseColumns &base)
Definition: refidadapterimp.hpp:119
virtual QVariant getNestedData(const RefIdColumn *column, const RefIdData &data, int index, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.hpp:1986
virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData &data) const
Definition: refidadapterimp.hpp:2038
const RefIdColumn * mBookType
Definition: refidadapterimp.hpp:697
const RefIdColumn * mUses
Definition: refidadapterimp.hpp:476
const RefIdColumn * mAutoCalc
Definition: refidadapterimp.hpp:330
const RefIdColumn * mHealth
Definition: refidadapterimp.hpp:879
virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.hpp:1577
Definition: refidadapterimp.hpp:115
WeaponColumns mColumns
Definition: refidadapterimp.hpp:892
const RefIdColumn * mRespawn
Definition: refidadapterimp.hpp:736
virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.cpp:995
const RefIdColumn * mGender
Definition: refidadapterimp.hpp:855
const RefIdColumn * mName
Definition: refidadapterimp.hpp:179
virtual void setNestedData(const RefIdColumn *column, RefIdData &data, int row, const QVariant &value, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.cpp:1464
const RefIdColumn * mAiPackages
Definition: refidadapterimp.hpp:550
float mX
Definition: aipackage.hpp:40
const RefIdColumn * mValue
Definition: refidadapterimp.hpp:249
virtual ~NestedTravelRefIdAdapter()
Definition: refidadapterimp.hpp:1448
CreatureMiscRefIdAdapter()
Definition: refidadapterimp.cpp:1411
const RefIdColumn * mOpenSound
Definition: refidadapterimp.hpp:783
const RefIdColumn * mSlash[2]
Definition: refidadapterimp.hpp:883
Definition: refidadapterimp.hpp:860
virtual void setData(const RefIdColumn *column, RefIdData &data, int index, const QVariant &value) const
If the data type does not match an exception is thrown.
Definition: refidadapterimp.cpp:37
std::map< const RefIdColumn *, unsigned int > mFlags
Definition: refidadapterimp.hpp:806
const RefIdColumn * mEffects
Definition: refidadapterimp.hpp:322
Definition: defs.hpp:38
const RefIdColumn * mFight
Definition: refidadapterimp.hpp:545
Definition: refidadapterimp.hpp:1029
virtual ~NestedInventoryRefIdAdapter()
Definition: refidadapterimp.hpp:1184
virtual QVariant getNestedData(const RefIdColumn *column, const RefIdData &data, int index, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.cpp:1122
virtual void setNestedData(const RefIdColumn *column, RefIdData &data, int row, const QVariant &value, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.cpp:1284
ActorColumns(const NameColumns &base)
Definition: refidadapterimp.hpp:553
BodyPartRefIdAdapter & operator=(const BodyPartRefIdAdapter &)
virtual void setData(const RefIdColumn *column, RefIdData &data, int index, const QVariant &value) const
If the data type does not match an exception is thrown.
Definition: refidadapterimp.cpp:327
LevListColumns(const BaseColumns &base)
Definition: refidadapterimp.hpp:2058
Definition: refidadapterimp.hpp:751
const RefIdColumn * mReach
Definition: refidadapterimp.hpp:881
void setModified(const ESXRecordT &modified)
Throws an exception, if the record is deleted.
Definition: record.hpp:133
const RefIdColumn * mType
Definition: refidadapterimp.hpp:27
Definition: refidadapterimp.hpp:890
ArmorRefIdAdapter(const EnchantableColumns &columns, const RefIdColumn *type, const RefIdColumn *health, const RefIdColumn *armor, const RefIdColumn *partRef)
Definition: refidadapterimp.cpp:251
NameRefIdAdapter(UniversalId::Type type, const NameColumns &columns)
Definition: refidadapterimp.hpp:204
float mX
Definition: aipackage.hpp:46
Position mPos
Definition: transport.hpp:21
Definition: refidadapterimp.hpp:327
virtual void setData(const RefIdColumn *column, RefIdData &data, int index, const QVariant &value) const
If the data type does not match an exception is thrown.
Definition: refidadapterimp.hpp:98
virtual void setNestedTable(const RefIdColumn *column, RefIdData &data, int index, const NestedTableWrapperBase &nestedTable) const
Definition: refidadapterimp.hpp:1125
Definition: record.hpp:8
const RefIdColumn * mTime
Definition: refidadapterimp.hpp:801
virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.hpp:2380
Definition: refidadapterimp.hpp:967
virtual void setNestedData(const RefIdColumn *column, RefIdData &data, int row, const QVariant &value, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.cpp:175
NpcMiscRefIdAdapter()
Definition: refidadapterimp.cpp:1092
virtual void setNestedData(const RefIdColumn *column, RefIdData &data, int row, const QVariant &value, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.cpp:963
virtual int getRowsCount(const Record< ESXRecordT > &record) const
Definition: nestedcoladapterimp.hpp:398
Definition: refidadapterimp.hpp:177
Definition: refidadapterimp.hpp:2062
virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.cpp:1086
virtual void addNestedRow(const RefIdColumn *column, RefIdData &data, int index, int position) const
Definition: refidadapterimp.hpp:2120
NestedLevListRefIdAdapter(const NestedLevListRefIdAdapter &)
short mLevel
Definition: loadlevlist.hpp:34
ApparatusRefIdAdapter(const InventoryColumns &columns, const RefIdColumn *type, const RefIdColumn *quality)
Definition: refidadapterimp.cpp:208
const RefIdColumn * mType
Definition: refidadapterimp.hpp:754
Definition: refidadapterimp.hpp:320
NAME32 mId
Definition: aipackage.hpp:48
Definition: nestedtablewrapper.hpp:16
NestedSpellRefIdAdapter(UniversalId::Type type)
Definition: refidadapterimp.hpp:1320
float rot[3]
Definition: defs.hpp:43
virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData &data) const
Definition: refidadapterimp.cpp:197
Base adapter for all refereceable record types Adapters that can handle nested tables, needs to return valid qvariant for parent columns.
Definition: refidadapterimp.hpp:33
PotionColumns(const InventoryColumns &columns)
Definition: refidadapterimp.cpp:12
float mY
Definition: aipackage.hpp:40
unsigned char mIdle[8]
Definition: aipackage.hpp:34
virtual void addNestedRow(const RefIdColumn *column, RefIdData &data, int index, int position) const
Definition: refidadapterimp.hpp:1186
virtual QVariant getNestedData(const RefIdColumn *column, const RefIdData &data, int index, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.hpp:1518
virtual void setData(const RefIdColumn *column, RefIdData &data, int index, const QVariant &value) const
If the data type does not match an exception is thrown.
Definition: refidadapterimp.hpp:2095
LightColumns(const InventoryColumns &columns)
Definition: refidadapterimp.cpp:606
const RefIdColumn * mSkill
Definition: refidadapterimp.hpp:698
Definition: aipackage.hpp:66
void assign(const std::string &value)
Definition: esmcommon.hpp:60
ActorAiRefIdAdapter(const ActorAiRefIdAdapter &)
Definition: refidadapterimp.hpp:404
virtual void removeRow(Record< ESXRecordT > &record, int rowToRemove) const
Definition: nestedcoladapterimp.hpp:256
Definition: refidadapterimp.hpp:1587
virtual void removeNestedRow(const RefIdColumn *column, RefIdData &data, int index, int rowToRemove) const
Definition: refidadapterimp.cpp:1224
virtual NestedTableWrapperBase * table(const Record< ESXRecordT > &record) const
Definition: nestedcoladapterimp.hpp:280
unsigned char mShouldRepeat
Definition: aipackage.hpp:35
Adapter for actor IDs (handles common AI functionality)
Definition: refidadapterimp.hpp:558
CreatureRefIdAdapter(const CreatureColumns &columns)
Definition: refidadapterimp.cpp:465
IngredEffectRefIdAdapter & operator=(const IngredEffectRefIdAdapter &)
BaseColumns mBase
Definition: refidadapterimp.hpp:36
Definition: loadlevlist.hpp:31
virtual void setNestedData(const RefIdColumn *column, RefIdData &data, int row, const QVariant &value, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.hpp:1771
Definition: refidadapterimp.hpp:1095
EffectsRefIdAdapter & operator=(const EffectsRefIdAdapter &)
virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.cpp:1315
const RefIdColumn * mEnchantment
Definition: refidadapterimp.hpp:406
Definition: refidadapterimp.hpp:843
const RefIdColumn * mCloseSound
Definition: refidadapterimp.hpp:784
virtual void addRow(Record< ESXRecordT > &record, int position) const
Definition: nestedcoladapterimp.hpp:234
virtual QVariant getNestedData(const RefIdColumn *column, const RefIdData &data, int index, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.hpp:1245
const RefIdColumn * mModel
Definition: refidadapterimp.hpp:117
virtual QVariant getData(const Record< ESXRecordT > &record, int subRowIndex, int subColIndex) const
Definition: nestedcoladapterimp.hpp:286
const RefIdColumn * mAttacks
Definition: refidadapterimp.hpp:758
std::string mFemale
Definition: loadarmo.hpp:50
Adapter for tools with limited uses IDs (lockpick, repair, probes)
Definition: refidadapterimp.hpp:483
CreatureAttackRefIdAdapter()
Definition: refidadapterimp.cpp:1321
virtual QVariant getData(const RefIdColumn *column, const RefIdData &data, int index) const
If called on the nest column, should return QVariant(true).
Definition: refidadapterimp.hpp:581
virtual void addNestedRow(const RefIdColumn *column, RefIdData &data, int index, int position) const
Definition: refidadapterimp.cpp:1098
virtual NestedTableWrapperBase * nestedTable(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.cpp:923
EffectsRefIdAdapter(UniversalId::Type type)
Definition: refidadapterimp.hpp:1105
Definition: refidadapter.hpp:49
Definition: loadlevlist.hpp:55
virtual NestedTableWrapperBase * nestedTable(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.hpp:1133
CreatureColumns mColumns
Definition: refidadapterimp.hpp:767
virtual NestedTableWrapperBase * nestedTable(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.cpp:1435
virtual NestedTableWrapperBase * nestedTable(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.hpp:1660
Definition: refidadapterimp.hpp:1172
ToolRefIdAdapter(UniversalId::Type type, const ToolColumns &columns)
Definition: refidadapterimp.hpp:500
Definition: refidadapterimp.hpp:799
ActorColumns mActors
Definition: refidadapterimp.hpp:560
LightRefIdAdapter(const LightColumns &columns)
Definition: refidadapterimp.cpp:609
Definition: refidadapterimp.hpp:367
virtual void removeNestedRow(const RefIdColumn *column, RefIdData &data, int index, int rowToRemove) const
Definition: refidadapterimp.hpp:1343
virtual QVariant getData(const RefIdColumn *column, const RefIdData &data, int index) const
If called on the nest column, should return QVariant(true).
Definition: refidadapterimp.cpp:21
EnchantableColumns mEnchantable
Definition: refidadapterimp.hpp:416
virtual NestedTableWrapperBase * nestedTable(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.hpp:1373
Definition: refidadapterimp.hpp:344
UniversalId::Type mType
Definition: refidadapterimp.hpp:1174
virtual void addNestedRow(const RefIdColumn *column, RefIdData &data, int index, int position) const
Definition: refidadapterimp.cpp:1004
std::pair< int, UniversalId::Type > LocalIndex
Definition: refiddata.hpp:223
BodyPartRefIdAdapter(UniversalId::Type type)
Definition: refidadapterimp.hpp:1920
const RefIdColumn * mSpeed
Definition: refidadapterimp.hpp:880
UniversalId::Type mType
Definition: refidadapterimp.hpp:1912
const RefIdColumn * mClass
Definition: refidadapterimp.hpp:847
ClothingRefIdAdapter(const EnchantableColumns &columns, const RefIdColumn *type, const RefIdColumn *partRef)
Definition: refidadapterimp.cpp:351
virtual void setData(const RefIdColumn *column, RefIdData &data, int index, const QVariant &value) const
If the data type does not match an exception is thrown.
Definition: refidadapterimp.hpp:298
virtual QVariant getNestedData(const RefIdColumn *column, const RefIdData &data, int index, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.cpp:1043
const RefIdColumn * mQuality
Definition: refidadapterimp.hpp:660
virtual void setData(const RefIdColumn *column, RefIdData &data, int index, const QVariant &value) const
If the data type does not match an exception is thrown.
Definition: refidadapterimp.hpp:159
virtual void setNestedTable(const RefIdColumn *column, RefIdData &data, int index, const NestedTableWrapperBase &nestedTable) const
Definition: refidadapterimp.hpp:2308
const RefIdColumn * mWeight
Definition: refidadapterimp.hpp:734
UniversalId::Type mType
Definition: refidadapterimp.hpp:2258
Definition: refidadapterimp.hpp:765
Definition: refidadapterimp.hpp:909
const RefIdColumn * mHead
Definition: refidadapterimp.hpp:850
ActorAiRefIdAdapter & operator=(const ActorAiRefIdAdapter &)
const RefIdColumn * mSkills
Definition: refidadapterimp.hpp:852
const RefIdColumn * mHello
Definition: refidadapterimp.hpp:543
Definition: loadarmo.hpp:43
virtual void setNestedTable(const RefIdColumn *column, RefIdData &data, int index, const NestedTableWrapperBase &nestedTable) const
Definition: refidadapterimp.cpp:1230
virtual ~NpcMiscRefIdAdapter()
Definition: refidadapterimp.cpp:1095
virtual void removeNestedRow(const RefIdColumn *column, RefIdData &data, int index, int rowToRemove) const
Definition: refidadapterimp.cpp:1423
IngredientColumns mColumns
Definition: refidadapterimp.hpp:353
Adapter for enchantable IDs.
Definition: refidadapterimp.hpp:414
virtual QVariant getNestedData(const RefIdColumn *column, const RefIdData &data, int index, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.hpp:1141
virtual QVariant getNestedData(const RefIdColumn *column, const RefIdData &data, int index, int subRowIndex, int subColIndex) const
Definition: refidadapterimp.cpp:130
virtual NestedTableWrapperBase * nestedTable(const RefIdColumn *column, const RefIdData &data, int index) const
Definition: refidadapterimp.hpp:2321
virtual int getColumnsCount(const Record< ESXRecordT > &record) const
Definition: nestedcoladapterimp.hpp:393
const RefIdColumn * mLevList
Definition: refidadapterimp.hpp:2055
NestedSpellRefIdAdapter & operator=(const NestedSpellRefIdAdapter &)
const RefIdColumn * mRadius
Definition: refidadapterimp.hpp:802
virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData &data) const
Definition: refidadapterimp.hpp:1894
Definition: refidadapterimp.hpp:2105
virtual QVariant getData(const RefIdColumn *column, const RefIdData &data, int index) const
If called on the nest column, should return QVariant(true).
Definition: refidadapterimp.cpp:613
float mZ
Definition: aipackage.hpp:40
virtual void removeNestedRow(const RefIdColumn *column, RefIdData &data, int index, int rowToRemove) const
Definition: refidadapterimp.cpp:903
std::map< const RefIdColumn *, unsigned int > mFlags
Definition: refidadapterimp.hpp:885
virtual QVariant getData(const RefIdColumn *column, const RefIdData &data, int index) const
If called on the nest column, should return QVariant(true).
Definition: refidadapterimp.hpp:2085
const RefIdColumn * mRace
Definition: refidadapterimp.hpp:846