Хранилища Subversion OpenInventory

Редакция

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

Редакция 187 Редакция 202
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; // â òðåòüåé êîëîíêå íå äàåì ïîìåíÿòü çíà÷åíèå
44
  ////  if (index.column()==3) return false; // â òðåòüåé êîëîíêå íå äàåì ïîìåíÿòü çíà÷åíèå
45
    bool lResult = false;
45
    bool lResult = false;
46
46
47
    /*
47
    /*
48
    QString str_tmp;
48
    QString str_tmp;
49
    if (index.column()==1) {                // åñëè ìåíÿåì èìÿ êëàññà
49
    if (index.column()==1) {                // åñëè ìåíÿåì èìÿ êëàññà
50
        str_tmp = value.toString();         // òî ïîìåíÿåì è èìÿ òàáëèöû
50
        str_tmp = value.toString();         // òî ïîìåíÿåì è èìÿ òàáëèöû
51
        str_tmp.append(tr(" instance"));
51
        str_tmp.append(tr(" instance"));
52
      }
52
      }
53
      */
53
      */
54
/*
54
/*
55
    QString str_tmp;
55
    QString str_tmp;
56
    if (index.column()==0) {                // åñëè ìåíÿåì èìÿ êëàññà
56
    if (index.column()==0) {                // åñëè ìåíÿåì èìÿ êëàññà
57
        str_tmp = value.toString();         // òî ïîìåíÿåì è èìÿ òàáëèöû
57
        str_tmp = value.toString();         // òî ïîìåíÿåì è èìÿ òàáëèöû
58
        str_tmp.append(tr("_instance"));
58
        str_tmp.append(tr("_instance"));
59
      }
59
      }
60
*/
60
*/
61
61
62
62
63
    // MyModel::record(index.row());
63
    // MyModel::record(index.row());
64
64
65
65
66
66
67
    if (bolleans_list.indexOf(index.column()) != -1) {
67
    if (bolleans_list.indexOf(index.column()) != -1) {
68
      //  QModelIndex newindex;
68
      //  QModelIndex newindex;
69
   //    QSqlRecord rec = record(index.row());
69
   //    QSqlRecord rec = record(index.row());
70
    //   bool chk = (value.toInt()==Qt::Checked);
70
    //   bool chk = (value.toInt()==Qt::Checked);
71
    //               rec.setValue(index.column(),chk);
71
    //               rec.setValue(index.column(),chk);
72
//        rec.setValue(index.column(), value);
72
//        rec.setValue(index.column(), value);
73
 //       rec.setGenerated(index.column(), true);
73
 //       rec.setGenerated(index.column(), true);
74
74
75
//lResult = QSqlTableModel::setData(index, value, role);
75
//lResult = QSqlTableModel::setData(index, value, role);
76
76
77
  //      lResult = updateRowInTable(index.row(), rec);
77
  //      lResult = updateRowInTable(index.row(), rec);
78
   //    lResult = setRecord(index.row(),rec);  // âåðíåì ðåçóëüòàò îá óñòàíîâêå
78
   //    lResult = setRecord(index.row(),rec);  // âåðíåì ðåçóëüòàò îá óñòàíîâêå
79
79
80
/*
80
/*
81
        QStandardItem* item = static_cast<QStandardItem*>(index.internalPointer());
81
        QStandardItem* item = static_cast<QStandardItem*>(index.internalPointer());
82
                  Qt::CheckState state = (value.toInt() == 2) ? Qt::Checked : Qt::Unchecked;
82
                  Qt::CheckState state = (value.toInt() == 2) ? Qt::Checked : Qt::Unchecked;
83
                  item->setCheckState(state);
83
                  item->setCheckState(state);
84

84

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