Хранилища Subversion OpenInventory

Редакция

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

Редакция 202 Редакция 204
1
1
#include "mymodel.h"
2
2
3
3
MyModel::MyModel(QObject *parent) :
4
4
      QSqlTableModel(parent)
5
5
{
6
6
    setEditStrategy(QSqlTableModel::OnManualSubmit);
7
7
    icon_index = -1;
8
8
}
9
9
10
10
Qt::ItemFlags MyModel::flags(
11
11
         const QModelIndex &index) const {
12
12
Qt::ItemFlags flags = QSqlTableModel::flags(index);
13
13
14
14
15
15
16
16
17
17
/***********************************************
18
18

19
19
if ((index.column() != 3) && (index.column() != 0))
20
20
     flags |= Qt::ItemIsEditable;
21
21
//if (index.column() == 4)
22
22
//     flags |= Qt::ItemIsUserCheckable;
23
23
else
24
24
{
25
25
    if ((index.column() == 3) || (index.column() == 0)) flags &= ~Qt::ItemIsEditable; // çàïðåùàåì ðåäàêòèðîâàíèå òðåòüåãî ñòîëáöà
26
26
}
27
27

28
28
*************************************************/
29
29
30
30
 if (bolleans_list.indexOf(index.column()) != -1)
31
31
{
32
32
     flags |= Qt::ItemIsUserCheckable;         // åñëè â ñòîëáöå òèï "BOOL", äåëàåì åãî âèáèðàåìûì
33
33
     //flags |= Qt::ItemIsEnabled;
34
34
     flags &= ~Qt::ItemIsEditable;
35
35
 }
36
36
37
37
 return flags; // òåêóùèé ñòîëáåö
38
38
39
39
40
40
}
41
41
42
42
43
43
bool MyModel::setData(const QModelIndex &index, const QVariant &value, int role) {
44
-
 
45
44
     bool lResult = false;
-
 
45
    if (bolleans_list.indexOf(index.column()) != -1) {
46
46
47
-
 
48
-
 
49
-
 
50
47
        lResult = QSqlTableModel::setData(index, value, Qt::EditRole);
51
-
 
52
-
 
53
-
 
54
-
 
55
-
 
56
-
 
57
-
 
58
-
 
59
-
 
60
-
 
61
48
-
 
49
       MyModel::submitAll();
62
50
63
51
          }
64
52
65
53
66
54
67
-
 
68
-
 
69
-
 
70
-
 
71
-
 
72
-
 
73
-
 
74
-
 
75
-
 
76
-
 
77
-
 
78
-
 
79
-
 
80
-
 
81
-
 
82
-
 
83
-
 
84
55
85
-
 
86
56
87
57
-
 
58
else
-
 
59
    {
88
60
       lResult = QSqlTableModel::setData(index, value, role);
-
 
61
       if (lResult) {
-
 
62
           QModelIndex newindex;
-
 
63
           QSqlRecord rec = record(index.row());
89
64
90
65
           if (value.isNull()) {
91
66
           rec.setNull(index.column());
92
67
93
68
           }
94
69
           else rec.setValue(index.column(), value);
95
70
-
 
71
           rec.setGenerated(index.column(), true);
96
72
           lResult = updateRowInTable(index.row(), rec);
97
73
98
-
 
99
-
 
100
-
 
101
-
 
102
-
 
103
-
 
104
-
 
105
74
106
-
 
107
-
 
108
-
 
109
-
 
110
75
111
76
-
 
77
-
 
78
-
 
79
        }
-
 
80
       if (value.isNull()) {
-
 
81
                                select();
-
 
82
                                emit dataChanged(index, index);
-
 
83
                            }
-
 
84
-
 
85
   }
-
 
86
112
87
  return lResult;
-
 
88
-
 
89
-
 
90
-
 
91
-
 
92
-
 
93
}
-
 
94
-
 
95
-
 
96
-
 
97
QVariant MyModel::data(const QModelIndex &index, int role) const {
-
 
98
-
 
99
     QHash<int, bool> check;
-
 
100
     QVariant value = QSqlTableModel::data(index, role);
-
 
101
     QList <int> keys;
-
 
102
     QStringList values;
-
 
103
     QList <int> files_keys;
-
 
104
     QStringList files_values;
-
 
105
     keys = pointers_map.keys(); // ñïèñîê ñòîëáöîâ ñ óêàçàòåëÿìè
-
 
106
     values = pointers_map.values(); // ñïèñîê òàáëèö-õðàíèëèù îáúåêòîâ ðîäèòåëüñêèõ êëàññîâ
-
 
107
     files_keys = files_map.keys(); // ñïèñîê íîìåðîâ ñòîëáöîâ, õðàíÿùèõ ôàéëû
-
 
108
     files_values = files_map.values(); // ñïèñîê èìåò ñòîëáöîâ, õðàíÿùèõ ôàéëû
-
 
109
-
 
110
switch (role) {
-
 
111
        case Qt::DisplayRole:
-
 
112
            {
-
 
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;
-
 
120
               index_of_list = keys.indexOf(index.column());
-
 
121
-
 
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
                                        }
-
 
135
               else {
-
 
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
                            }
-
 
156
                   int ii;
-
 
157
                   ii++;
-
 
158
-
 
159
-
 
160
               }
-
 
161
               return value;
-
 
162
-
 
163
        }
-
 
164
         //   if (index.column() == 1)
-
 
165
          //     return value.toString().prepend(tr("¹ "));
-
 
166
-
 
167
-
 
168
        case Qt::EditRole:
-
 
169
            if (bolleans_list.indexOf(index.column()) == -1)             return value; // òåêóùèé ñòîëáåö
-
 
170
-
 
171
            else {
-
 
172
               return value.toInt