Subversion Repositories OpenInventory

Rev

Rev 187 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
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) {
44
  ////  if (index.column()==3) return false; //       
45
    bool lResult = false;
46
 
47
    /*
48
    QString str_tmp;
49
    if (index.column()==1) {                //    
50
        str_tmp = value.toString();         //     
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
 
62
 
158 pingvin 63
    // MyModel::record(index.row());
127 pingvin 64
 
65
 
66
 
158 pingvin 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);
127 pingvin 74
 
158 pingvin 75
//lResult = QSqlTableModel::setData(index, value, role);
127 pingvin 76
 
158 pingvin 77
  //      lResult = updateRowInTable(index.row(), rec);
78
   //    lResult = setRecord(index.row(),rec);  //    
127 pingvin 79
 
159 pingvin 80
/*
158 pingvin 81
        QStandardItem* item = static_cast<QStandardItem*>(index.internalPointer());
82
                  Qt::CheckState state = (value.toInt() == 2) ? Qt::Checked : Qt::Unchecked;
83
                  item->setCheckState(state);
127 pingvin 84
 
158 pingvin 85
*/
127 pingvin 86
 
87
 
158 pingvin 88
        lResult = QSqlTableModel::setData(index, value, Qt::EditRole);
127 pingvin 89
 
159 pingvin 90
// Qt::CheckState state = (value.toInt() == 2) ? Qt::Checked : Qt::Unchecked;
91
   //     lResult = QSqlTableModel::setData(index, value.toBool(), Qt::CheckStateRole);
92
 
93
        //  QSqlTableModel::setItemData(index,Qt::CheckStateRole);
94
   //     lResult = QSqlTableModel::setData(index, value, role);
95
 
96
      //  emit MyModel::dataChanged(index, index);
97
 
98
         //   MyModel::updateRowInTable();
158 pingvin 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
          }
127 pingvin 105
 
158 pingvin 106
else
107
    {
108
       lResult = QSqlTableModel::setData(index, value, role);
109
    }
127 pingvin 110
 
111
 
158 pingvin 112
  return lResult;
127 pingvin 113
 
114
 
115
 
116
 
158 pingvin 117
 
127 pingvin 118
}
119
 
120
 
121
 
122
QVariant MyModel::data(const QModelIndex &index, int role) const {
123
 
158 pingvin 124
     QHash<int, bool> check;
127 pingvin 125
     QVariant value = QSqlTableModel::data(index, role);
128 pingvin 126
     QList <int> keys;
127
     QStringList values;
202 pingvin 128
     QList <int> files_keys;
129
     QStringList files_values;
128 pingvin 130
     keys = pointers_map.keys(); //    
131
     values = pointers_map.values(); //  -   
202 pingvin 132
     files_keys = files_map.keys(); //   ,  
133
     files_values = files_map.values(); //   ,  
128 pingvin 134
 
135
switch (role) {
136
        case Qt::DisplayRole:
137
            {
158 pingvin 138
                //if (check.contains(index.column()) &&  check.value(index.column()))
139
                //    return value.toInt() != 0 ? tr("Yes") : tr("No");
140
                if (bolleans_list.indexOf(index.column()) != -1)
141
                    {
142
                        return value.toInt() != 0 ? tr("") : tr(""); //     "BOOL"
143
                    }
144
                int index_of_list;
128 pingvin 145
               index_of_list = keys.indexOf(index.column());
146
 
202 pingvin 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;
154
                                            else {
155
                                                    QDataStream out (&data_tmp,QIODevice::ReadOnly);
156
                                                    out >> file_name;
157
                                                    return file_name;
158
                                                }
159
                                        }
128 pingvin 160
               else {
129 pingvin 161
                   QString parentInctance;
162
                   QSqlQuery q;
163
                   QString sql_str;
164
                   bool ok;
165
                   parentInctance = values.at(index_of_list);
166
                   sql_str = tr("select * from `");
167
                   sql_str.append(parentInctance);
168
                   sql_str.append(tr("` "));
169
                   sql_str.append(tr("where `ID` = "));
170
                   sql_str.append(value.toString());
171
                   q.prepare(sql_str);
172
                   ok = q.exec();
173
 
174
                   if (ok)  {
175
                                while(q.next()){
176
                                  QString object_name = q.value(1).toString();
177
                                  if (!object_name.isEmpty()) return object_name;
178
 
179
                                                  }
180
                            }
128 pingvin 181
                   int ii;
182
                   ii++;
129 pingvin 183
 
184
 
128 pingvin 185
               }
186
               return value;
187
 
188
        }
189
         //   if (index.column() == 1)
190
          //     return value.toString().prepend(tr(" "));
191
 
192
 
158 pingvin 193
        case Qt::EditRole:
194
            if (bolleans_list.indexOf(index.column()) == -1)             return value; //  
195
 
196
            else {
197
               return value.toInt() != 0 ? tr("") : tr("");
198
 
199
            }
200
            ///return value;
128 pingvin 201
           // if (index.column() == 1)
202
           //    return value.toString().prepend(tr(" "));
203
 
158 pingvin 204
 
205
 
206
 
127 pingvin 207
        case Qt::TextColorRole:
208
            if(index.column() == 1)
209
                return qVariantFromValue(QColor(Qt::blue));
210
            else
211
              return value;
212
        case Qt::TextAlignmentRole: return value;
213
        case Qt::FontRole:
214
           if(index.column() == 1) {
215
               QFont font = QFont("Helvetica", 16, QFont::Bold);
216
              return qVariantFromValue(font);
217
           }else
218
               return value;
219
 
220
       case Qt::BackgroundColorRole: {
221
                int a = (index.row() % 2) ? 14 : 0;
222
                if(index.column() == 2)
223
                           return qVariantFromValue(QColor(220,240-a,230-a));
224
                        else if(index.column() == 4)
225
                            return qVariantFromValue(QColor(200,220-a,255-a));
226
                        else
227
                           return value;
228
                                    }
229
 
230
 
231
 
158 pingvin 232
     case Qt::CheckStateRole:
233
         {
127 pingvin 234
 
158 pingvin 235
           if (bolleans_list.indexOf(index.column()) == -1)             return value; //  
236
 
237
           else
238
           {
239
               return (QSqlQueryModel::data(index).toInt() != 0) ? Qt::Checked : Qt::Unchecked;
240
           }
241
       }
242
 
187 pingvin 243
     case Qt::SizeHintRole:
244
              {
127 pingvin 245
 
187 pingvin 246
             int height = value.toSize().height();
247
             int widht = value.toSize().width();
248
             if(index.column() == icon_index) {
249
                               QVariant currentImage = QSqlTableModel::data(index, 0);
250
                               QByteArray bytes = currentImage.toByteArray();
251
                               QPixmap pxmp;
252
 
253
 
254
                               if (currentImage.isValid()) {
255
                                    pxmp.loadFromData(bytes);
256
                                    if (height < pxmp.height()) height =  pxmp.height() +10;
257
                                    if (widht < pxmp.width()) widht = pxmp.width() +10;
258
                                    return QVariant(QSize(widht, height));
259
 
260
                                }
261
                               else return value;
262
 
263
                           }
264
 
265
 
266
 
267
                 return value;
268
               }
127 pingvin 269
       }
270
  return value;
271
}
272
 
273