Хранилища Subversion OpenInventory

Редакция

Редакция 159 | Редакция 187 | К новейшей редакции | Только различия | Не учитывать пробелы | Содержимое файла | Авторство | Последнее изменение | Открыть журнал | RSS

Редакция 159 Редакция 179
1
1
#include "mymodel.h"
2
2
3
3
MyModel::MyModel(QObject *parent) :
4
4
      QSqlTableModel(parent)
5
5
{
6
6
    setEditStrategy(QSqlTableModel::OnManualSubmit);
7
7
}
8
8
9
9
Qt::ItemFlags MyModel::flags(
10
10
         const QModelIndex &index) const {
11
11
Qt::ItemFlags flags = QSqlTableModel::flags(index);
12
12
-
 
13
-
 
14
-
 
15
13
16
/***********************************************
-
 
17

-
 
18
if ((index.column() != 3) && (index.column() != 0))
-
 
19
     flags |= Qt::ItemIsEditable;
-
 
20
//if (index.column() == 4)
-
 
21
//     flags |= Qt::ItemIsUserCheckable;
-
 
22
else
-
 
23
{
-
 
24
    if ((index.column() == 3) || (index.column() == 0)) flags &= ~Qt::ItemIsEditable; // çàïðåùàåì ðåäàêòèðîâàíèå òðåòüåãî ñòîëáöà
-
 
25
}
-
 
26

-
 
27
*************************************************/
-
 
28
-
 
29
 if (bolleans_list.indexOf(index.column()) != -1)
-
 
30
{
-
 
31
     flags |= Qt::ItemIsUserCheckable;         // åñëè â ñòîëáöå òèï "BOOL", äåëàåì åãî âèáèðàåìûì
-
 
32
     //flags |= Qt::ItemIsEnabled;
-
 
33
     flags &= ~Qt::ItemIsEditable;
-
 
34
 }
-
 
35
-
 
36
 return flags; // òåêóùèé ñòîëáåö
-
 
37
-
 
38
-
 
39
}
-
 
40
-
 
41
-
 
42
bool MyModel::setData(const QModelIndex &index, const QVariant &value, int role) {
-
 
43
  ////  if (index.column()==3) return false; // â òðåòüåé êîëîíêå íå äàåì ïîìåíÿòü çíà÷åíèå
-
 
44
    bool lResult = false;
-
 
45
-
 
46
    /*
-
 
47
    QString str_tmp;
-
 
48
    if (index.column()==1) {                // åñëè ìåíÿåì èìÿ êëàññà
-
 
49
        str_tmp = value.toString();         // òî ïîìåíÿåì è èìÿ òàáëèöû
-
 
50
        str_tmp.append(tr(" instance"));
-
 
51
      }
-
 
52
      */
-
 
53
/*
-
 
54
    QString str_tmp;
-
 
55
    if (index.column()==0) {                // åñëè ìåíÿåì èìÿ êëàññà
-
 
56
        str_tmp = value.toString();         // òî ïîìåíÿåì è èìÿ òàáëèöû
-
 
57
        str_tmp.append(tr("_instance"));
-
 
58
      }
-
 
59
*/
-
 
60
-
 
61
-
 
62
    // MyModel::record(index.row());
-
 
63
-
 
64
-
 
65
-
 
66
    if (bolleans_list.indexOf(index.column()) != -1) {
-
 
67
      //  QModelIndex newindex;
-
 
68
   //    QSqlRecord rec = record(index.row());
-
 
69
    //   bool chk = (value.toInt()==Qt::Checked);
-
 
70
    //               rec.setValue(index.column(),chk);
-
 
71
//        rec.setValue(index.column(), value);
-
 
72
 //       rec.setGenerated(index.column(), true);
-
 
73
-
 
74
//lResult = QSqlTableModel::setData(index, value, role);
-
 
75
-
 
76
  //      lResult = updateRowInTable(index.row(), rec);
-
 
77
   //    lResult = setRecord(index.row(),rec);  // âåðíåì ðåçóëüòàò îá óñòàíîâêå
-
 
78
-
 
79
/*
-
 
80
        QStandardItem* item = static_cast<QStandardItem*>(index.internalPointer());
-
 
81
                  Qt::CheckState state = (value.toInt() == 2) ? Qt::Checked : Qt::Unchecked;
-
 
82
                  item->setCheckState(state);
-
 
83

-
 
84
*/
-
 
85
-
 
86
-
 
87
        lResult = QSqlTableModel::setData(index, value, Qt::EditRole);
-
 
88
-
 
89
// Qt::CheckState state = (value.toInt() == 2) ? Qt::Checked : Qt::Unchecked;
-
 
90
   //     lResult = QSqlTableModel::setData(index, value.toBool(), Qt::CheckStateRole);
-
 
91
-
 
92
        //  QSqlTableModel::setItemData(index,Qt::CheckStateRole);
-
 
93
   //     lResult = QSqlTableModel::setData(index, value, role);
-
 
94
-
 
95
      //  emit MyModel::dataChanged(index, index);
-
 
96
-
 
97
         //   MyModel::updateRowInTable();
-
 
98
     //  lResult = QSqlTableModel::setData(index, value, Qt::DisplayRole);
-
 
99
       //  QSqlTableModel::setData(index, value, Qt::CheckStateRole);
-
 
100
       MyModel::submitAll();
-
 
101
  ////// //     MyModel::select();
-
 
102
       // MyModel::data(index, Qt::DisplayRole);
-
 
103
          }
-
 
104
-
 
105
else
-
 
106
    {
-
 
107
       lResult = QSqlTableModel::setData(index, value, role);
-
 
108
    }
-
 
109
-
 
110
-
 
111
  return lResult;
-
 
112
-
 
113
-
 
114
-
 
115
-
 
116
-
 
117
}
-
 
118
-
 
119
-
 
120
-
 
121
QVariant MyModel::data(const QModelIndex &index, int role) const {
-
 
122
-
 
123
     QHash<int, bool> check;
-
 
124
     QVariant value = QSqlTableModel::data(index, role);
-
 
125
     QList <int> keys;
-
 
126
     QStringList values;
-
 
127
     keys = pointers_map.keys(); // ñïèñîê ñòîëáöîâ ñ óêàçàòåëÿìè
-
 
128
     values = pointers_map.values(); // ñïèñîê òàáëèö-õðàíèëèù îáúåêòîâ ðîäèòåëüñêèõ êëàññîâ
-
 
129
-
 
130
switch (role) {
-
 
131
        case Qt::DisplayRole:
-
 
132
            {
-
 
133
                //if (check.contains(index.column()) &&  check.value(index.column()))
-
 
134
                //    return value.toInt() != 0 ? tr("Yes") : tr("No");
-
 
135
                if (bolleans_list.indexOf(index.column()) != -1)
-
 
136
                    {
-
 
137
                        return value.toInt() != 0 ? tr("Äà") : tr("Íåò"); // äëÿ êîëîíîê ñ òèïîì "BOOL"
-
 
138
                    }
-
 
139
                int index_of_list;
-
 
140
               index_of_list = keys.indexOf(index.column());
-
 
141
-
 
142
               if (index_of_list == -1) return value;
-
 
143
               else {
-
 
144
                   QString parentInctance;
-
 
145
                   QSqlQuery q;
-
 
146
                   QString sql_str;
-
 
147
                   bool ok;
-
 
148
                   parentInctance = values.at(index_of_list);
-
 
149
                   sql_str = tr("select * from `");
-
 
150
                   sql_str.append(parentInctance);
-
 
151
                   sql_str.append(tr("` "));
-
 
152
                   sql_str.append(tr("where `ID` = "));
-
 
153
                   sql_str.append(value.toString());
-
 
154
                   q.prepare(sql_str);
-
 
155
                   ok = q.exec();
-
 
156
-
 
157
                   if (ok)  {
-
 
158
                                while(q.next()){
-
 
159
                                  QString object_name = q.value(1).toString();
-
 
160
                                  if (!object_name.isEmpty()) return object_name;
-
 
161
-
 
162
                                                  }
-
 
163
                            }
-
 
164
                   int ii;
-
 
165
                   ii++;
-
 
166
-
 
167
-
 
168
               }
-
 
169
               return value;
-
 
170
-
 
171
        }
-
 
172
         //   if (index.column() == 1)
-
 
173
          //     return value.toString().prepend(tr("¹ "));
-
 
174
-
 
175
-
 
176
        case Qt::EditRole:
-
 
177
            if (bolleans_list.indexOf(index.column()) == -1)             return value; // òåêóùèé ñòîëáåö
-
 
178
-
 
179
            else {
-
 
180
               return value.toInt() != 0 ? tr("Äà") : tr("Íåò");
-
 
181
-
 
182
            }
-
 
183
            ///return value;
-
 
184
           // if (index.column() == 1)
-
 
185
           //    return value.toString().prepend(tr("¹ "));
-
 
186
-
 
187
-
 
188
-
 
189
-
 
190
        case Qt::TextColorRole:
-
 
191
            if(index.column() == 1)
-
 
192
                return qVariantFromValue(QColor(Qt::blue));
-
 
193
            else
-
 
194
              return value;
-
 
195
        case Qt::TextAlignmentRole: return value;
-
 
196
        case Qt::FontRole:
-
 
197
           if(index.column() == 1) {
-
 
198
               QFont font = QFont("Helvetica", 16, QFont::Bold);
-
 
199
              return qVariantFromValue(font);
-
 
200
           }else
-
 
201
               return value;
-
 
202
-
 
203
       case Qt::BackgroundColorRole: {
-
 
204
                int a = (index.row() % 2) ? 14 : 0;
-
 
205
                if(index.column() == 2)
-
 
206
                           return qVariantFromValue(QColor(220,240-a,230-a));
-
 
207
                        else if(index.column() == 4)
-
 
208
                            return qVariantFromValue(QColor(200,220-a,255-a));
-
 
209
                        else
-
 
210
                           return value;
-
 
211
                                    }
-
 
212
-
 
213
-
 
214
-
 
215
     case Qt::CheckStateRole:
-
 
216
         {
-
 
217
-
 
218
           if (bolleans_list.indexOf(index.column()) == -1)             return value; // òåêóùèé ñòîëáåö
-
 
219
-
 
220
           else
-
 
221
           {
-
 
222
               return (QSqlQueryModel::data(index).toInt() != 0) ? Qt::Checked : Qt::Unchecked;
-
 
223
           }
-
 
224
       }
-
 
225
-
 
226
     case Qt::SizeHintRole:return value;
-
 
227
-
 
228
       }
-
 
229
  return value;
-
 
230
}
-
 
231
-
 
232
-
 
233