Хранилища Subversion OpenInventory

Редакция

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

Редакция Автор № строки Строка
127 pingvin 1
#include "mymodel.h"
2
 
3
MyModel::MyModel(QObject *parent) :
4
      QSqlTableModel(parent)
5
{
6
    setEditStrategy(QSqlTableModel::OnManualSubmit);
187 pingvin 7
    icon_index = -1;
127 pingvin 8
}
9
 
10
Qt::ItemFlags MyModel::flags(
11
         const QModelIndex &index) const {
12
Qt::ItemFlags flags = QSqlTableModel::flags(index);
13
 
179 pingvin 14
 
15
 
16
 
127 pingvin 17
/***********************************************
18
 
19
if ((index.column() != 3) && (index.column() != 0))
20
     flags |= Qt::ItemIsEditable;
21
//if (index.column() == 4)
22
//     flags |= Qt::ItemIsUserCheckable;
23
else
24
{
25
    if ((index.column() == 3) || (index.column() == 0)) flags &= ~Qt::ItemIsEditable; //    
26
}
27
 
28
*************************************************/
29
 
158 pingvin 30
 if (bolleans_list.indexOf(index.column()) != -1)
31
{
32
     flags |= Qt::ItemIsUserCheckable;         //     "BOOL",   
159 pingvin 33
     //flags |= Qt::ItemIsEnabled;
158 pingvin 34
     flags &= ~Qt::ItemIsEditable;
35
 }
127 pingvin 36
 
158 pingvin 37
 return flags; //  
127 pingvin 38
 
158 pingvin 39
 
127 pingvin 40
}
41
 
42
 
43
bool MyModel::setData(const QModelIndex &index, const QVariant &value, int role) {
204 pingvin 44
     bool lResult = false;
45
    if (bolleans_list.indexOf(index.column()) != -1) {
127 pingvin 46
 
204 pingvin 47
        lResult = QSqlTableModel::setData(index, value, Qt::EditRole);
127 pingvin 48
 
204 pingvin 49
       MyModel::submitAll();
127 pingvin 50
 
204 pingvin 51
          }
127 pingvin 52
 
53
 
54
 
55
 
56
 
57
 
204 pingvin 58
else
59
    {
60
       lResult = QSqlTableModel::setData(index, value, role);
61
       if (lResult) {
62
           QModelIndex newindex;
63
           QSqlRecord rec = record(index.row());
127 pingvin 64
 
204 pingvin 65
           if (value.isNull()) {
66
           rec.setNull(index.column());
127 pingvin 67
 
204 pingvin 68
           }
69
           else rec.setValue(index.column(), value);
127 pingvin 70
 
204 pingvin 71
           rec.setGenerated(index.column(), true);
72
           lResult = updateRowInTable(index.row(), rec);
127 pingvin 73
 
159 pingvin 74
 
75
 
76
 
127 pingvin 77
 
78
 
204 pingvin 79
        }
80
       if (value.isNull()) {
81
                                select();
82
                                emit dataChanged(index, index);
83
                            }
127 pingvin 84
 
204 pingvin 85
   }
86
 
158 pingvin 87
  return lResult;
127 pingvin 88
 
89
 
90
 
91
 
158 pingvin 92
 
127 pingvin 93
}
94
 
95
 
96
 
97
QVariant MyModel::data(const QModelIndex &index, int role) const {
98
 
158 pingvin 99
     QHash<int, bool> check;
127 pingvin 100
     QVariant value = QSqlTableModel::data(index, role);
128 pingvin 101
     QList <int> keys;
102
     QStringList values;
202 pingvin 103
     QList <int> files_keys;
104
     QStringList files_values;
128 pingvin 105
     keys = pointers_map.keys(); //    
106
     values = pointers_map.values(); //  -   
202 pingvin 107
     files_keys = files_map.keys(); //   ,  
108
     files_values = files_map.values(); //   ,  
128 pingvin 109
 
110
switch (role) {
111
        case Qt::DisplayRole:
112
            {
158 pingvin 113
                //if (check.contains(index.column()) &&  check.value(index.column()))
114
                //    return value.toInt() != 0 ? tr("Yes") : tr("No");
115
                if (bolleans_list.indexOf(index.column()) != -1)
116
                    {
117
                        return value.toInt() != 0 ? tr("") : tr(""); //     "BOOL"
118
                    }
119
                int index_of_list;
128 pingvin 120
               index_of_list = keys.indexOf(index.column());
121
 
202 pingvin 122
               if (index_of_list == -1){ //    , ,    
123
                                            index_of_list = files_keys.indexOf(index.column());
124
                                            if (index_of_list == -1) return value; // ,    
125
                                            QString file_name;
126
                                            QByteArray data_tmp;
127
                                            data_tmp = value.toByteArray();
128
                                            if (data_tmp.isEmpty() || data_tmp.isNull()) return value;
129
                                            else {
130
                                                    QDataStream out (&data_tmp,QIODevice::ReadOnly);
131
                                                    out >> file_name;
132
                                                    return file_name;
133
                                                }
134
                                        }
128 pingvin 135
               else {
129 pingvin 136
                   QString parentInctance;
137
                   QSqlQuery q;
138
                   QString sql_str;
139
                   bool ok;
140
                   parentInctance = values.at(index_of_list);
141
                   sql_str = tr("select * from `");
142
                   sql_str.append(parentInctance);
143
                   sql_str.append(tr("` "));
144
                   sql_str.append(tr("where `ID` = "));
145
                   sql_str.append(value.toString());
146
                   q.prepare(sql_str);
147
                   ok = q.exec();
148
 
149
                   if (ok)  {
150
                                while(q.next()){
151
                                  QString object_name = q.value(1).toString();
152
                                  if (!object_name.isEmpty()) return object_name;
153
 
154
                                                  }
155
                            }
128 pingvin 156
                   int ii;
157
                   ii++;
129 pingvin 158
 
159
 
128 pingvin 160
               }
161
               return value;
162
 
163
        }
164
         //   if (index.column() == 1)
165
          //     return value.toString().prepend(tr(" "));
166
 
167
 
158 pingvin 168
        case Qt::EditRole:
169
            if (bolleans_list.indexOf(index.column()) == -1)             return value; //  
170
 
171
            else {
172
               return value.toInt() != 0 ? tr("") : tr("");
173
 
174
            }
175
            ///return value;
128 pingvin 176
           // if (index.column() == 1)
177
           //    return value.toString().prepend(tr(" "));
178
 
158 pingvin 179
 
180
 
181
 
127 pingvin 182
        case Qt::TextColorRole:
183
            if(index.column() == 1)
184
                return qVariantFromValue(QColor(Qt::blue));
185
            else
186
              return value;
187
        case Qt::TextAlignmentRole: return value;
188
        case Qt::FontRole:
189
           if(index.column() == 1) {
190
               QFont font = QFont("Helvetica", 16, QFont::Bold);
191
              return qVariantFromValue(font);
192
           }else
193
               return value;
194
 
195
       case Qt::BackgroundColorRole: {
196
                int a = (index.row() % 2) ? 14 : 0;
197
                if(index.column() == 2)
198
                           return qVariantFromValue(QColor(220,240-a,230-a));
199
                        else if(index.column() == 4)
200
                            return qVariantFromValue(QColor(200,220-a,255-a));
201
                        else
202
                           return value;
203
                                    }
204
 
205
 
206
 
158 pingvin 207
     case Qt::CheckStateRole:
208
         {
127 pingvin 209
 
158 pingvin 210
           if (bolleans_list.indexOf(index.column()) == -1)             return value; //  
211
 
212
           else
213
           {
214
               return (QSqlQueryModel::data(index).toInt() != 0) ? Qt::Checked : Qt::Unchecked;
215
           }
216
       }
217
 
187 pingvin 218
     case Qt::SizeHintRole:
219
              {
127 pingvin 220
 
187 pingvin 221
             int height = value.toSize().height();
222
             int widht = value.toSize().width();
223
             if(index.column() == icon_index) {
224
                               QVariant currentImage = QSqlTableModel::data(index, 0);
225
                               QByteArray bytes = currentImage.toByteArray();
226
                               QPixmap pxmp;
227
 
228
 
229
                               if (currentImage.isValid()) {
230
                                    pxmp.loadFromData(bytes);
231
                                    if (height < pxmp.height()) height =  pxmp.height() +10;
232
                                    if (widht < pxmp.width()) widht = pxmp.width() +10;
233
                                    return QVariant(QSize(widht, height));
234
 
235
                                }
236
                               else return value;
237
 
238
                           }
239
 
240
 
241
 
242
                 return value;
243
               }
127 pingvin 244
       }
245
  return value;
246
}
247
 
248