Хранилища Subversion OpenInventory

Редакция

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

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

18

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

27

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

55
85
*/
-
 
86
56
87
57
-
 
58
else
-
 
59
    {
88
        lResult = QSqlTableModel::setData(index, value, Qt::EditRole);
60
       lResult = QSqlTableModel::setData(index, value, role);
-
 
61
       if (lResult) {
-
 
62
           QModelIndex newindex;
-
 
63
           QSqlRecord rec = record(index.row());
89
64
90
// Qt::CheckState state = (value.toInt() == 2) ? Qt::Checked : Qt::Unchecked;
65
           if (value.isNull()) {
91
   //     lResult = QSqlTableModel::setData(index, value.toBool(), Qt::CheckStateRole);
66
           rec.setNull(index.column());
92
67
93
        //  QSqlTableModel::setItemData(index,Qt::CheckStateRole);
68
           }
94
   //     lResult = QSqlTableModel::setData(index, value, role);
69
           else rec.setValue(index.column(), value);
95
70
-
 
71
           rec.setGenerated(index.column(), true);
96
      //  emit MyModel::dataChanged(index, index);
72
           lResult = updateRowInTable(index.row(), rec);
97
73
98
         //   MyModel::updateRowInTable();
-
 
99
     //  lResult = QSqlTableModel::setData(index, value, Qt::DisplayRole);
-
 
100
       //  QSqlTableModel::setData(index, value, Qt::CheckStateRole);
-
 
101
       MyModel::submitAll();
-
 
102
  ////// //     MyModel::select();
-
 
103
       // MyModel::data(index, Qt::DisplayRole);
-
 
104
          }
-
 
105
74
106
else
-
 
107
    {
-
 
108
       lResult = QSqlTableModel::setData(index, value, role);
-
 
109
    }
-
 
110
75
111
76
-
 
77
-
 
78
-
 
79
        }
-
 
80
       if (value.isNull()) {
-
 
81
                                select();
-
 
82
                                emit dataChanged(index, index);
-
 
83
                            }
-
 
84
-
 
85
   }
-
 
86
112
  return lResult;
87
  return lResult;
113
88
114
89
115
90
116
91
117
92
118
}
93
}
119
94
120
95
121
96
122
QVariant MyModel::data(const QModelIndex &index, int role) const {
97
QVariant MyModel::data(const QModelIndex &index, int role) const {
123
98
124
     QHash<int, bool> check;
99
     QHash<int, bool> check;
125
     QVariant value = QSqlTableModel::data(index, role);
100
     QVariant value = QSqlTableModel::data(index, role);
126
     QList <int> keys;
101
     QList <int> keys;
127
     QStringList values;
102
     QStringList values;
128
     QList <int> files_keys;
103
     QList <int> files_keys;
129
     QStringList files_values;
104
     QStringList files_values;
130
     keys = pointers_map.keys(); // ñïèñîê ñòîëáöîâ ñ óêàçàòåëÿìè
105
     keys = pointers_map.keys(); // ñïèñîê ñòîëáöîâ ñ óêàçàòåëÿìè
131
     values = pointers_map.values(); // ñïèñîê òàáëèö-õðàíèëèù îáúåêòîâ ðîäèòåëüñêèõ êëàññîâ
106
     values = pointers_map.values(); // ñïèñîê òàáëèö-õðàíèëèù îáúåêòîâ ðîäèòåëüñêèõ êëàññîâ
132
     files_keys = files_map.keys(); // ñïèñîê íîìåðîâ ñòîëáöîâ, õðàíÿùèõ ôàéëû
107
     files_keys = files_map.keys(); // ñïèñîê íîìåðîâ ñòîëáöîâ, õðàíÿùèõ ôàéëû
133
     files_values = files_map.values(); // ñïèñîê èìåò ñòîëáöîâ, õðàíÿùèõ ôàéëû
108
     files_values = files_map.values(); // ñïèñîê èìåò ñòîëáöîâ, õðàíÿùèõ ôàéëû
134
109
135
switch (role) {
110
switch (role) {
136
        case Qt::DisplayRole:
111
        case Qt::DisplayRole:
137
            {
112
            {
138
                //if (check.contains(index.column()) &&  check.value(index.column()))
113
                //if (check.contains(index.column()) &&  check.value(index.column()))
139
                //    return value.toInt() != 0 ? tr("Yes") : tr("No");
114
                //    return value.toInt() != 0 ? tr("Yes") : tr("No");
140
                if (bolleans_list.indexOf(index.column()) != -1)
115
                if (bolleans_list.indexOf(index.column()) != -1)
141
                    {
116
                    {
142
                        return value.toInt() != 0 ? tr("Äà") : tr("Íåò"); // äëÿ êîëîíîê ñ òèïîì "BOOL"
117
                        return value.toInt() != 0 ? tr("Äà") : tr("Íåò"); // äëÿ êîëîíîê ñ òèïîì "BOOL"
143
                    }
118
                    }
144
                int index_of_list;
119
                int index_of_list;
145
               index_of_list = keys.indexOf(index.column());
120
               index_of_list = keys.indexOf(index.column());
146
121
147
               if (index_of_list == -1){ // ñòîëáåö íå ÿâëÿåòñÿ óêàçàòåëåì, ïðîâåðèì, ìîæåò îí õðàíèò ôàéë
122
               if (index_of_list == -1){ // ñòîëáåö íå ÿâëÿåòñÿ óêàçàòåëåì, ïðîâåðèì, ìîæåò îí õðàíèò ôàéë
148
                                            index_of_list = files_keys.indexOf(index.column());
123
                                            index_of_list = files_keys.indexOf(index.column());
149
                                            if (index_of_list == -1) return value; // íåò, ñòîëáåö íå õðàíèò ôàéë
124
                                            if (index_of_list == -1) return value; // íåò, ñòîëáåö íå õðàíèò ôàéë
150
                                            QString file_name;
125
                                            QString file_name;
151
                                            QByteArray data_tmp;
126
                                            QByteArray data_tmp;
152
                                            data_tmp = value.toByteArray();
127
                                            data_tmp = value.toByteArray();
153
                                            if (data_tmp.isEmpty() || data_tmp.isNull()) return value;
128
                                            if (data_tmp.isEmpty() || data_tmp.isNull()) return value;
154
                                            else {
129
                                            else {
155
                                                    QDataStream out (&data_tmp,QIODevice::ReadOnly);
130
                                                    QDataStream out (&data_tmp,QIODevice::ReadOnly);
156
                                                    out >> file_name;
131
                                                    out >> file_name;
157
                                                    return file_name;
132
                                                    return file_name;
158
                                                }
133
                                                }
159
                                        }
134
                                        }
160
               else {
135
               else {
161
                   QString parentInctance;
136
                   QString parentInctance;
162
                   QSqlQuery q;
137
                   QSqlQuery q;
163
                   QString sql_str;
138
                   QString sql_str;
164
                   bool ok;
139
                   bool ok;
165
                   parentInctance = values.at(index_of_list);
140
                   parentInctance = values.at(index_of_list);
166
                   sql_str = tr("select * from `");
141
                   sql_str = tr("select * from `");
167
                   sql_str.append(parentInctance);
142
                   sql_str.append(parentInctance);
168
                   sql_str.append(tr("` "));
143
                   sql_str.append(tr("` "));
169
                   sql_str.append(tr("where `ID` = "));
144
                   sql_str.append(tr("where `ID` = "));
170
                   sql_str.append(value.toString());
145
                   sql_str.append(value.toString());
171
                   q.prepare(sql_str);
146
                   q.prepare(sql_str);
172
                   ok = q.exec();
147
                   ok = q.exec();
173
148
174
                   if (ok)  {
149
                   if (ok)  {
175
                                while(q.next()){
150
                                while(q.next()){
176
                                  QString object_name = q.value(1).toString();
151
                                  QString object_name = q.value(1).toString();
177
                                  if (!object_name.isEmpty()) return object_name;
152
                                  if (!object_name.isEmpty()) return object_name;
178
153
179
                                                  }
154
                                                  }
180
                            }
155
                            }
181
                   int ii;
156
                   int ii;
182
                   ii++;
157
                   ii++;
183
158
184
159
185
               }
160
               }
186
               return value;
161
               return value;
187
162
188
        }
163
        }
189
         //   if (index.column() == 1)
164
         //   if (index.column() == 1)
190
          //     return value.toString().prepend(tr("¹ "));
165
          //     return value.toString().prepend(tr("¹ "));
191
166
192
167
193
        case Qt::EditRole:
168
        case Qt::EditRole:
194
            if (bolleans_list.indexOf(index.column()) == -1)             return value; // òåêóùèé ñòîëáåö
169
            if (bolleans_list.indexOf(index.column()) == -1)             return value; // òåêóùèé ñòîëáåö
195
170
196
            else {
171
            else {
197
               return value.toInt() != 0 ? tr("Äà") : tr("Íåò");
172
               return value.toInt() != 0 ? tr("Äà") : tr("Íåò");
198
173
199
            }
174
            }
200
            ///return value;
175
            ///return value;
201
           // if (index.column() == 1)
176
           // if (index.column() == 1)
202
           //    return value.toString().prepend(tr("¹ "));
177
           //    return value.toString().prepend(tr("¹ "));
203
178
204
179
205
180
206
181
207
        case Qt::TextColorRole:
182
        case Qt::TextColorRole:
208
            if(index.column() == 1)
183
            if(index.column() == 1)
209
                return qVariantFromValue(QColor(Qt::blue));
184
                return qVariantFromValue(QColor(Qt::blue));
210
            else
185
            else
211
              return value;
186
              return value;
212
        case Qt::TextAlignmentRole: return value;
187
        case Qt::TextAlignmentRole: return value;
213
        case Qt::FontRole:
188
        case Qt::FontRole:
214
           if(index.column() == 1) {
189
           if(index.column() == 1) {
215
               QFont font = QFont("Helvetica", 16, QFont::Bold);
190
               QFont font = QFont("Helvetica", 16, QFont::Bold);
216
              return qVariantFromValue(font);
191
              return qVariantFromValue(font);
217
           }else
192
           }else
218
               return value;
193
               return value;
219
194
220
       case Qt::BackgroundColorRole: {
195
       case Qt::BackgroundColorRole: {
221
                int a = (index.row() % 2) ? 14 : 0;
196
                int a = (index.row() % 2) ? 14 : 0;
222
                if(index.column() == 2)
197
                if(index.column() == 2)
223
                           return qVariantFromValue(QColor(220,240-a,230-a));
198
                           return qVariantFromValue(QColor(220,240-a,230-a));
224
                        else if(index.column() == 4)
199
                        else if(index.column() == 4)
225
                            return qVariantFromValue(QColor(200,220-a,255-a));
200
                            return qVariantFromValue(QColor(200,220-a,255-a));
226
                        else
201
                        else
227
                           return value;
202
                           return value;
228
                                    }
203
                                    }
229
204
230
205
231
206
232
     case Qt::CheckStateRole:
207
     case Qt::CheckStateRole:
233
         {
208
         {
234
209
235
           if (bolleans_list.indexOf(index.column()) == -1)             return value; // òåêóùèé ñòîëáåö
210
           if (bolleans_list.indexOf(index.column()) == -1)             return value; // òåêóùèé ñòîëáåö
236
211
237
           else
212
           else
238
           {
213
           {
239
               return (QSqlQueryModel::data(index).toInt() != 0) ? Qt::Checked : Qt::Unchecked;
214
               return (QSqlQueryModel::data(index).toInt() != 0) ? Qt::Checked : Qt::Unchecked;
240
           }
215
           }
241
       }
216
       }
242
217
243
     case Qt::SizeHintRole:
218
     case Qt::SizeHintRole:
244
              {
219
              {
245
220
246
             int height = value.toSize().height();
221
             int height = value.toSize().height();
247
             int widht = value.toSize().width();
222
             int widht = value.toSize().width();
248
             if(index.column() == icon_index) {
223
             if(index.column() == icon_index) {
249
                               QVariant currentImage = QSqlTableModel::data(index, 0);
224
                               QVariant currentImage = QSqlTableModel::data(index, 0);
250
                               QByteArray bytes = currentImage.toByteArray();
225
                               QByteArray bytes = currentImage.toByteArray();
251
                               QPixmap pxmp;
226
                               QPixmap pxmp;
252
227
253
228
254
                               if (currentImage.isValid()) {
229
                               if (currentImage.isValid()) {
255
                                    pxmp.loadFromData(bytes);
230
                                    pxmp.loadFromData(bytes);
256
                                    if (height < pxmp.height()) height =  pxmp.height() +10;
231
                                    if (height < pxmp.height()) height =  pxmp.height() +10;
257
                                    if (widht < pxmp.width()) widht = pxmp.width() +10;
232
                                    if (widht < pxmp.width()) widht = pxmp.width() +10;
258
                                    return QVariant(QSize(widht, height));
233
                                    return QVariant(QSize(widht, height));
259
234
260
                                }
235
                                }
261
                               else return value;
236
                               else return value;
262
237
263
                           }
238
                           }
264
239
265
240
266
241
267
                 return value;
242
                 return value;
268
               }
243
               }
269
       }
244
       }
270
  return value;
245
  return value;
271
}
246
}
272
247
273
248
274
 
249