dyntablemodel.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. #include "dyntablemodel.h"
  2. #include <QJsonObject>
  3. #include <QDebug>
  4. //TODO: save changes back to ust
  5. #define INIT(k) d = new DynTableData; d->key=k; _data.push_back(d);
  6. DynTableModel::DynTableModel()
  7. {
  8. DynTableData* d;
  9. INIT("DYN");
  10. INIT("PIT");
  11. INIT("PHO");
  12. }
  13. int DynTableModel::rowCount(const QModelIndex &parent) const
  14. {
  15. (void) parent;
  16. return _data.size();
  17. }
  18. int DynTableModel::columnCount(const QModelIndex &parent) const
  19. {
  20. (void) parent;
  21. return 2;
  22. }
  23. QVariant DynTableModel::data(const QModelIndex &index, int role) const
  24. {
  25. if(role==Qt::DisplayRole || role==Qt::EditRole)
  26. {
  27. int r = index.row();
  28. int c = index.column();
  29. if(c==0)
  30. return _data[r]->key;
  31. else
  32. return _data[r]->value;
  33. }
  34. return QVariant();
  35. }
  36. QVariant DynTableModel::headerData(int section, Qt::Orientation orientation, int role) const
  37. {
  38. //TODO -- implement header 1
  39. return QVariant();
  40. }
  41. Qt::ItemFlags DynTableModel::flags(const QModelIndex &index) const
  42. {
  43. if (index.column() == 0)
  44. {
  45. return Qt::ItemIsEnabled | Qt::ItemNeverHasChildren;
  46. }
  47. else
  48. {
  49. return Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemNeverHasChildren;
  50. }
  51. }
  52. bool DynTableModel::setData(const QModelIndex &index, const QVariant &value, int role)
  53. {
  54. int r = index.row();
  55. int c = index.column();
  56. if(c==1)
  57. {
  58. _data[r]->valueOrig = _data[r]->value;
  59. _data[r]->value = value.toString();
  60. _data[r]->updated = true;
  61. return true;
  62. }
  63. return false;
  64. }
  65. void DynTableModel::loadOne(quint64 sel1, QJsonObject o)
  66. {
  67. for(int i=0;i<_data.size();i++)
  68. {
  69. auto d = _data[i];
  70. d->value = o[d->key].toString();
  71. d->valueOrig = d->value;
  72. }
  73. _sel1 = sel1;
  74. QModelIndex topLeft;
  75. QModelIndex bottomRight;
  76. emit dataChanged(topLeft,bottomRight);
  77. }
  78. void DynTableModel::reset()
  79. {
  80. for(int i=0;i<_data.size();i++)
  81. {
  82. auto d = _data[i];
  83. d->value = "";
  84. d->updated=false;
  85. }
  86. _sel1 = -1;
  87. QModelIndex topLeft;
  88. QModelIndex bottomRight;
  89. emit dataChanged(topLeft,bottomRight);
  90. }
  91. bool DynTableModel::hasChanges(QVector<quint64> sel)
  92. {
  93. if(_sel1==-1) return false;
  94. if(sel.size()==1 && sel[0]==_sel1) return false;
  95. for(int i=0;i<_data.size();i++)
  96. {
  97. auto d = _data[i];
  98. if(d->updated)
  99. return true;
  100. }
  101. return false;
  102. }
  103. void DynTableModel::saveChanges()
  104. {
  105. qtauEvent_NoteEffect::noteEffectVector changeset;
  106. qtauEvent_NoteEffect::noteEffectData change0;
  107. change0.id = _sel1;
  108. for(int i=0;i<_data.size();i++)
  109. {
  110. auto d = _data[i];
  111. if(d->updated)
  112. change0.kv[d->key]= d->value;
  113. change0.prevKv[d->key] = d->valueOrig;
  114. }
  115. changeset.push_back(change0);
  116. emit noteEffect(new qtauEvent_NoteEffect(changeset));
  117. }