Хранилища Subversion OpenInventory

Редакция

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

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