Subversion Repositories OpenInventory

Rev

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