Rev 202 | 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) { |
||
204 | pingvin | 44 | bool lResult = false; |
45 | if (bolleans_list.indexOf(index.column()) != -1) { |
||
127 | pingvin | 46 | |
204 | pingvin | 47 | lResult = QSqlTableModel::setData(index, value, Qt::EditRole); |
127 | pingvin | 48 | |
204 | pingvin | 49 | MyModel::submitAll(); |
127 | pingvin | 50 | |
204 | pingvin | 51 | } |
127 | pingvin | 52 | |
53 | |||
54 | |||
55 | |||
56 | |||
57 | |||
204 | pingvin | 58 | else |
59 | { |
||
60 | lResult = QSqlTableModel::setData(index, value, role); |
||
61 | if (lResult) { |
||
62 | QModelIndex newindex; |
||
63 | QSqlRecord rec = record(index.row()); |
||
127 | pingvin | 64 | |
204 | pingvin | 65 | if (value.isNull()) { |
66 | rec.setNull(index.column()); |
||
127 | pingvin | 67 | |
204 | pingvin | 68 | } |
69 | else rec.setValue(index.column(), value); |
||
127 | pingvin | 70 | |
204 | pingvin | 71 | rec.setGenerated(index.column(), true); |
72 | lResult = updateRowInTable(index.row(), rec); |
||
127 | pingvin | 73 | |
159 | pingvin | 74 | |
75 | |||
76 | |||
127 | pingvin | 77 | |
78 | |||
204 | pingvin | 79 | } |
80 | if (value.isNull()) { |
||
81 | select(); |
||
82 | emit dataChanged(index, index); |
||
83 | } |
||
127 | pingvin | 84 | |
204 | pingvin | 85 | } |
86 | |||
158 | pingvin | 87 | return lResult; |
127 | pingvin | 88 | |
89 | |||
90 | |||
91 | |||
158 | pingvin | 92 | |
127 | pingvin | 93 | } |
94 | |||
95 | |||
96 | |||
97 | QVariant MyModel::data(const QModelIndex &index, int role) const { |
||
98 | |||
158 | pingvin | 99 | QHash<int, bool> check; |
127 | pingvin | 100 | QVariant value = QSqlTableModel::data(index, role); |
128 | pingvin | 101 | QList <int> keys; |
102 | QStringList values; |
||
202 | pingvin | 103 | QList <int> files_keys; |
104 | QStringList files_values; |
||
128 | pingvin | 105 | keys = pointers_map.keys(); // |
106 | values = pointers_map.values(); // - |
||
202 | pingvin | 107 | files_keys = files_map.keys(); // , |
108 | files_values = files_map.values(); // , |
||
128 | pingvin | 109 | |
110 | switch (role) { |
||
111 | case Qt::DisplayRole: |
||
112 | { |
||
158 | pingvin | 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; |
||
128 | pingvin | 120 | index_of_list = keys.indexOf(index.column()); |
121 | |||
202 | pingvin | 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 | } |
||
128 | pingvin | 135 | else { |
129 | pingvin | 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 | } |
||
128 | pingvin | 156 | int ii; |
157 | ii++; |
||
129 | pingvin | 158 | |
159 | |||
128 | pingvin | 160 | } |
161 | return value; |
||
162 | |||
163 | } |
||
164 | // if (index.column() == 1) |
||
165 | // return value.toString().prepend(tr(" ")); |
||
166 | |||
167 | |||
158 | pingvin | 168 | case Qt::EditRole: |
169 | if (bolleans_list.indexOf(index.column()) == -1) return value; // |
||
170 | |||
171 | else { |
||
172 | return value.toInt() != 0 ? tr("") : tr(""); |
||
173 | |||
174 | } |
||
175 | ///return value; |
||
128 | pingvin | 176 | // if (index.column() == 1) |
177 | // return value.toString().prepend(tr(" ")); |
||
178 | |||
158 | pingvin | 179 | |
180 | |||
181 | |||
127 | pingvin | 182 | case Qt::TextColorRole: |
183 | if(index.column() == 1) |
||
184 | return qVariantFromValue(QColor(Qt::blue)); |
||
185 | else |
||
186 | return value; |
||
187 | case Qt::TextAlignmentRole: return value; |
||
188 | case Qt::FontRole: |
||
189 | if(index.column() == 1) { |
||
190 | QFont font = QFont("Helvetica", 16, QFont::Bold); |
||
191 | return qVariantFromValue(font); |
||
192 | }else |
||
193 | return value; |
||
194 | |||
195 | case Qt::BackgroundColorRole: { |
||
196 | int a = (index.row() % 2) ? 14 : 0; |
||
197 | if(index.column() == 2) |
||
198 | return qVariantFromValue(QColor(220,240-a,230-a)); |
||
199 | else if(index.column() == 4) |
||
200 | return qVariantFromValue(QColor(200,220-a,255-a)); |
||
201 | else |
||
202 | return value; |
||
203 | } |
||
204 | |||
205 | |||
206 | |||
158 | pingvin | 207 | case Qt::CheckStateRole: |
208 | { |
||
127 | pingvin | 209 | |
158 | pingvin | 210 | if (bolleans_list.indexOf(index.column()) == -1) return value; // |
211 | |||
212 | else |
||
213 | { |
||
214 | return (QSqlQueryModel::data(index).toInt() != 0) ? Qt::Checked : Qt::Unchecked; |
||
215 | } |
||
216 | } |
||
217 | |||
187 | pingvin | 218 | case Qt::SizeHintRole: |
219 | { |
||
127 | pingvin | 220 | |
187 | pingvin | 221 | int height = value.toSize().height(); |
222 | int widht = value.toSize().width(); |
||
223 | if(index.column() == icon_index) { |
||
224 | QVariant currentImage = QSqlTableModel::data(index, 0); |
||
225 | QByteArray bytes = currentImage.toByteArray(); |
||
226 | QPixmap pxmp; |
||
227 | |||
228 | |||
229 | if (currentImage.isValid()) { |
||
230 | pxmp.loadFromData(bytes); |
||
231 | if (height < pxmp.height()) height = pxmp.height() +10; |
||
232 | if (widht < pxmp.width()) widht = pxmp.width() +10; |
||
233 | return QVariant(QSize(widht, height)); |
||
234 | |||
235 | } |
||
236 | else return value; |
||
237 | |||
238 | } |
||
239 | |||
240 | |||
241 | |||
242 | return value; |
||
243 | } |
||
127 | pingvin | 244 | } |
245 | return value; |
||
246 | } |
||
247 | |||
248 |