Хранилища Subversion OpenInventory

Редакция

Редакция 179 | Редакция 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) {
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;
128
     keys = pointers_map.keys(); //    
129
     values = pointers_map.values(); //  -   
130
 
131
switch (role) {
132
        case Qt::DisplayRole:
133
            {
158 pingvin 134
                //if (check.contains(index.column()) &&  check.value(index.column()))
135
                //    return value.toInt() != 0 ? tr("Yes") : tr("No");
136
                if (bolleans_list.indexOf(index.column()) != -1)
137
                    {
138
                        return value.toInt() != 0 ? tr("") : tr(""); //     "BOOL"
139
                    }
140
                int index_of_list;
128 pingvin 141
               index_of_list = keys.indexOf(index.column());
142
 
143
               if (index_of_list == -1) return value;
144
               else {
129 pingvin 145
                   QString parentInctance;
146
                   QSqlQuery q;
147
                   QString sql_str;
148
                   bool ok;
149
                   parentInctance = values.at(index_of_list);
150
                   sql_str = tr("select * from `");
151
                   sql_str.append(parentInctance);
152
                   sql_str.append(tr("` "));
153
                   sql_str.append(tr("where `ID` = "));
154
                   sql_str.append(value.toString());
155
                   q.prepare(sql_str);
156
                   ok = q.exec();
157
 
158
                   if (ok)  {
159
                                while(q.next()){
160
                                  QString object_name = q.value(1).toString();
161
                                  if (!object_name.isEmpty()) return object_name;
162
 
163
                                                  }
164
                            }
128 pingvin 165
                   int ii;
166
                   ii++;
129 pingvin 167
 
168
 
128 pingvin 169
               }
170
               return value;
171
 
172
        }
173
         //   if (index.column() == 1)
174
          //     return value.toString().prepend(tr(" "));
175
 
176
 
158 pingvin 177
        case Qt::EditRole:
178
            if (bolleans_list.indexOf(index.column()) == -1)             return value; //  
179
 
180
            else {
181
               return value.toInt() != 0 ? tr("") : tr("");
182
 
183
            }
184
            ///return value;
128 pingvin 185
           // if (index.column() == 1)
186
           //    return value.toString().prepend(tr(" "));
187
 
158 pingvin 188
 
189
 
190
 
127 pingvin 191
        case Qt::TextColorRole:
192
            if(index.column() == 1)
193
                return qVariantFromValue(QColor(Qt::blue));
194
            else
195
              return value;
196
        case Qt::TextAlignmentRole: return value;
197
        case Qt::FontRole:
198
           if(index.column() == 1) {
199
               QFont font = QFont("Helvetica", 16, QFont::Bold);
200
              return qVariantFromValue(font);
201
           }else
202
               return value;
203
 
204
       case Qt::BackgroundColorRole: {
205
                int a = (index.row() % 2) ? 14 : 0;
206
                if(index.column() == 2)
207
                           return qVariantFromValue(QColor(220,240-a,230-a));
208
                        else if(index.column() == 4)
209
                            return qVariantFromValue(QColor(200,220-a,255-a));
210
                        else
211
                           return value;
212
                                    }
213
 
214
 
215
 
158 pingvin 216
     case Qt::CheckStateRole:
217
         {
127 pingvin 218
 
158 pingvin 219
           if (bolleans_list.indexOf(index.column()) == -1)             return value; //  
220
 
221
           else
222
           {
223
               return (QSqlQueryModel::data(index).toInt() != 0) ? Qt::Checked : Qt::Unchecked;
224
           }
225
       }
226
 
187 pingvin 227
     case Qt::SizeHintRole:
228
              {
127 pingvin 229
 
187 pingvin 230
             int height = value.toSize().height();
231
             int widht = value.toSize().width();
232
             if(index.column() == icon_index) {
233
                               QVariant currentImage = QSqlTableModel::data(index, 0);
234
                               QByteArray bytes = currentImage.toByteArray();
235
                               QPixmap pxmp;
236
 
237
 
238
                               if (currentImage.isValid()) {
239
                                    pxmp.loadFromData(bytes);
240
                                    if (height < pxmp.height()) height =  pxmp.height() +10;
241
                                    if (widht < pxmp.width()) widht = pxmp.width() +10;
242
                                    return QVariant(QSize(widht, height));
243
 
244
                                }
245
                               else return value;
246
 
247
                           }
248
 
249
 
250
 
251
                 return value;
252
               }
127 pingvin 253
       }
254
  return value;
255
}
256
 
257