Хранилища Subversion OpenInventory

Редакция

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

Редакция 114 Редакция 116
1
#include "mainwindow.h"
1
#include "mainwindow.h"
2
#include "ui_mainwindow.h"
2
#include "ui_mainwindow.h"
3
3
4
MainWindow::MainWindow(QWidget *parent) :
4
MainWindow::MainWindow(QWidget *parent) :
5
    QMainWindow(parent),
5
    QMainWindow(parent),
6
    ui(new Ui::MainWindow)
6
    ui(new Ui::MainWindow)
7
{
7
{
8
    ui->setupUi(this);
8
    ui->setupUi(this);
9
   // connect( ui->comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(on_currentIndexChanged(int)));
9
   // connect( ui->comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(on_currentIndexChanged(int)));
10
10
11
   MainWindow::readModel();
11
   MainWindow::readModel();
12
12
13
   //QString model_str;
13
   //QString model_str;
14
   MainWindow::creatModelString();
14
   MainWindow::creatModelString();
15
   int i;
15
   int i;
16
   i++;
16
   i++;
17
    QFile file_tmp("./temp.txt");
17
    QFile file_tmp("./temp.txt");
18
    bool ok;
18
    bool ok;
19
    ok = file_tmp.open(QIODevice::ReadWrite | QIODevice::Text);
19
    ok = file_tmp.open(QIODevice::ReadWrite | QIODevice::Text);
20
    QTextStream out(&file_tmp);
20
    QTextStream out(&file_tmp);
21
    out << MainWindow::modelString;
21
    out << MainWindow::modelString;
22
    file_tmp.close();
22
    file_tmp.close();
23
23
24
    ui->treeWidget->setAlternatingRowColors(true);
24
    ui->treeWidget->setAlternatingRowColors(true);
25
    ui->treeWidget_2->setAlternatingRowColors(true);
25
    ui->treeWidget_2->setAlternatingRowColors(true);
26
    MainWindow::openDataBase();
26
    MainWindow::openDataBase();
27
    MainWindow::buildPreviewModel(tr("Ìîÿ ìîäåëü"), tr("7"));
27
    MainWindow::buildPreviewModel(tr("Ìîÿ ìîäåëü"), tr("46"));
28
    MainWindow::initComboBox();
28
    MainWindow::initComboBox();
29
    getDatabaseData();
29
    getDatabaseData();
30
-
 
-
 
30
    sql_mogel = new QSqlTableModel();
31
31
32
}
32
}
33
33
34
MainWindow::~MainWindow()
34
MainWindow::~MainWindow()
35
{
35
{
36
    delete ui;
36
    delete ui;
37
}
37
}
38
38
39
void MainWindow::changeEvent(QEvent *e)
39
void MainWindow::changeEvent(QEvent *e)
40
{
40
{
41
    QMainWindow::changeEvent(e);
41
    QMainWindow::changeEvent(e);
42
    switch (e->type()) {
42
    switch (e->type()) {
43
    case QEvent::LanguageChange:
43
    case QEvent::LanguageChange:
44
        ui->retranslateUi(this);
44
        ui->retranslateUi(this);
45
        break;
45
        break;
46
    default:
46
    default:
47
        break;
47
        break;
48
    }
48
    }
49
}
49
}
50
50
51
51
52
bool MainWindow::readModel(){
52
bool MainWindow::readModel(){
53
    bool result;
53
    bool result;
54
    QString model_str;
54
    QString model_str;
55
    QFile file(":/model.txt");
55
    QFile file(":/model.txt");
56
56
57
   rootItem1 = new  QTreeWidgetItem(ui->treeWidget);
57
   rootItem1 = new  QTreeWidgetItem(ui->treeWidget);
58
    rootItem1->setText(0, tr("Óðîâåíü 1"));
58
    rootItem1->setText(0, tr("Óðîâåíü 1"));
59
   // rootItem2 = new  QTreeWidgetItem(rootItem1);
59
   // rootItem2 = new  QTreeWidgetItem(rootItem1);
60
   // rootItem2->setText(0, tr("óðîâåíü 2"));
60
   // rootItem2->setText(0, tr("óðîâåíü 2"));
61
    rootItem1->setCheckState(0,Qt::Checked);
61
    rootItem1->setCheckState(0,Qt::Checked);
62
   // rootItem2->setCheckState(0,Qt::Checked);
62
   // rootItem2->setCheckState(0,Qt::Checked);
63
63
64
64
65
65
66
    result = file.open(QIODevice::ReadOnly);
66
    result = file.open(QIODevice::ReadOnly);
67
    if (result) {
67
    if (result) {
68
                     model_str = QString(tr(file.readAll()));
68
                     model_str = QString(tr(file.readAll()));
69
                }
69
                }
70
70
71
    setupModelData(model_str.split(QString("\n")), rootItem1);
71
    setupModelData(model_str.split(QString("\n")), rootItem1);
72
72
73
73
74
    return result;
74
    return result;
75
75
76
}
76
}
77
77
78
78
79
void MainWindow::setupModelData(const QStringList &lines, QTreeWidgetItem *parent)
79
void MainWindow::setupModelData(const QStringList &lines, QTreeWidgetItem *parent)
80
{
80
{
81
    QList<QTreeWidgetItem*> parents;
81
    QList<QTreeWidgetItem*> parents;
82
    QList<int> indentations;
82
    QList<int> indentations;
83
    parents << parent;
83
    parents << parent;
84
    indentations << 0;
84
    indentations << 0;
85
85
86
    int number = 0;
86
    int number = 0;
87
87
88
    while (number < lines.count()) {
88
    while (number < lines.count()) {
89
        int position = 0;
89
        int position = 0;
90
        while (position < lines[number].length()) {
90
        while (position < lines[number].length()) {
91
            if (lines[number].mid(position, 1) != " ")
91
            if (lines[number].mid(position, 1) != " ")
92
                break;
92
                break;
93
            position++;
93
            position++;
94
        }
94
        }
95
95
96
        QString lineData = lines[number].mid(position).trimmed();
96
        QString lineData = lines[number].mid(position).trimmed();
97
97
98
        if (!lineData.isEmpty()) {
98
        if (!lineData.isEmpty()) {
99
            // Read the column data from the rest of the line.
99
            // Read the column data from the rest of the line.
100
            QStringList columnStrings = lineData.split("\t", QString::SkipEmptyParts);
100
            QStringList columnStrings = lineData.split("\t", QString::SkipEmptyParts);
101
            QList<QVariant> columnData;
101
            QList<QVariant> columnData;
102
            for (int column = 0; column < columnStrings.count(); ++column)
102
            for (int column = 0; column < columnStrings.count(); ++column)
103
                columnData << columnStrings[column];
103
                columnData << columnStrings[column];
104
104
105
            if (position > indentations.last()) {
105
            if (position > indentations.last()) {
106
                // The last child of the current parent is now the new parent
106
                // The last child of the current parent is now the new parent
107
                // unless the current parent has no children.
107
                // unless the current parent has no children.
108
108
109
                if (parents.last()->childCount() > 0) {
109
                if (parents.last()->childCount() > 0) {
110
                    parents << parents.last()->child(parents.last()->childCount()-1);
110
                    parents << parents.last()->child(parents.last()->childCount()-1);
111
                    indentations << position;
111
                    indentations << position;
112
                }
112
                }
113
            } else {
113
            } else {
114
                while (position < indentations.last() && parents.count() > 0) {
114
                while (position < indentations.last() && parents.count() > 0) {
115
                    parents.pop_back();
115
                    parents.pop_back();
116
                    indentations.pop_back();
116
                    indentations.pop_back();
117
                }
117
                }
118
            }
118
            }
119
119
120
            // Append a new item to the current parent's list of children.
120
            // Append a new item to the current parent's list of children.
121
          // // //  parents.last()->appendChild(new QTreeWidgetItem(columnData, parents.last()));
121
          // // //  parents.last()->appendChild(new QTreeWidgetItem(columnData, parents.last()));
122
            QTreeWidgetItem* itm_tmp;
122
            QTreeWidgetItem* itm_tmp;
123
            itm_tmp = new QTreeWidgetItem( parents.last());
123
            itm_tmp = new QTreeWidgetItem( parents.last());
124
124
125
            itm_tmp->setText(0, QString(columnData.at(0).toString()));
125
            itm_tmp->setText(0, QString(columnData.at(0).toString()));
126
            if (columnData.at(1).toString() == "true") {
126
            if (columnData.at(1).toString() == "true") {
127
                                                            itm_tmp->setCheckState(0,Qt::Checked);
127
                                                            itm_tmp->setCheckState(0,Qt::Checked);
128
                                                        }
128
                                                        }
129
            else itm_tmp->setCheckState(0,Qt::Unchecked);
129
            else itm_tmp->setCheckState(0,Qt::Unchecked);
130
            itm_tmp->setText(1, QString(columnData.at(2).toString()));
130
            itm_tmp->setText(1, QString(columnData.at(2).toString()));
131
            itm_tmp->setText(2, QVariant(number).toString()); // íîìåð ñòðîêè â ôàéëå-ìîäåëè îòîáðàæåíèÿ
131
            itm_tmp->setText(2, QVariant(number).toString()); // íîìåð ñòðîêè â ôàéëå-ìîäåëè îòîáðàæåíèÿ
132
            itm_tmp->setText(3, QVariant(indentations.size()).toString());
132
            itm_tmp->setText(3, QVariant(indentations.size()).toString());
133
        }
133
        }
134
134
135
        number++;
135
        number++;
136
    }
136
    }
137
}
137
}
138
138
139
139
140
/*
140
/*
141
void MainWindow::openBase()
141
void MainWindow::openBase()
142
{
142
{
143

143

144
        db = QSqlDatabase::addDatabase("QMYSQL");
144
        db = QSqlDatabase::addDatabase("QMYSQL");
145
        pdb = &db;
145
        pdb = &db;
146
        raportFrm.pdb = &db;
146
        raportFrm.pdb = &db;
147

147

148
        pdb->setHostName(hostName);
148
        pdb->setHostName(hostName);
149
        pdb->setDatabaseName(baseName);
149
        pdb->setDatabaseName(baseName);
150
        pdb->setUserName(userName);
150
        pdb->setUserName(userName);
151
        pdb->setPassword(password);
151
        pdb->setPassword(password);
152
        bool ok = pdb->open();
152
        bool ok = pdb->open();
153
        if (!ok) {
153
        if (!ok) {
154
                                QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
154
                                QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
155
                                                                                this,                      // Ðîäèòåëüñêèé âèäæåò.
155
                                                                                this,                      // Ðîäèòåëüñêèé âèäæåò.
156
                                                                                QObject::tr("Database Error"),   // Çàãîëîâîê.
156
                                                                                QObject::tr("Database Error"),   // Çàãîëîâîê.
157
                                                                                pdb->lastError().text());          // Òåêñò ñîîáùåíèÿ.
157
                                                                                pdb->lastError().text());          // Òåêñò ñîîáùåíèÿ.
158
                         }
158
                         }
159
        if (ok)
159
        if (ok)
160
        {lineEdit-> insert(tr("Áàçà óñïåøíî îòêðûòà"));
160
        {lineEdit-> insert(tr("Áàçà óñïåøíî îòêðûòà"));
161
        }
161
        }
162
        else {lineEdit-> insert(tr("Áàçà íåäîñòóïíà. Êîä îøèáêè: "));
162
        else {lineEdit-> insert(tr("Áàçà íåäîñòóïíà. Êîä îøèáêè: "));
163
                  lineEdit-> insert(pdb->lastError().text());
163
                  lineEdit-> insert(pdb->lastError().text());
164
                 }
164
                 }
165

165

166

166

167

167

168
        model = new QSqlTableModel(this);
168
        model = new QSqlTableModel(this);
169
        model->setTable(tableName);
169
        model->setTable(tableName);
170

170

171
        model->setEditStrategy(QSqlTableModel::OnManualSubmit);
171
        model->setEditStrategy(QSqlTableModel::OnManualSubmit);
172
        model->setSort(0, Qt::AscendingOrder);
172
        model->setSort(0, Qt::AscendingOrder);
173

173

174
        model->select();
174
        model->select();
175

175

176

176

177
        QSqlField field(tr("age"), QVariant::Int);
177
        QSqlField field(tr("age"), QVariant::Int);
178
        field.setValue(QString(tr("123")));
178
        field.setValue(QString(tr("123")));
179

179

180
        bool okey;
180
        bool okey;
181
        int index;
181
        int index;
182
        QSqlRecord record;
182
        QSqlRecord record;
183

183

184

184

185
        tableView->setModel(model);
185
        tableView->setModel(model);
186
        view.setModel(model);
186
        view.setModel(model);
187

187

188

188

189
        tableView->setAlternatingRowColors(true);
189
        tableView->setAlternatingRowColors(true);
190
        view.setAlternatingRowColors(true);
190
        view.setAlternatingRowColors(true);
191

191

192
        tableView->resizeColumnsToContents();
192
        tableView->resizeColumnsToContents();
193

193

194

194

195
        view.resizeColumnsToContents();
195
        view.resizeColumnsToContents();
196

196

197
        tableView->show();
197
        tableView->show();
198

198

199

199

200

200

201
        initTreeWidget();
201
        initTreeWidget();
202
}
202
}
203
*/
203
*/
204
204
205
205
206
void MainWindow::creatModelString(){
206
void MainWindow::creatModelString(){
207
207
208
    MainWindow::modelString.clear(); // î÷èùàåì ñòðîêó ìîäåëè
208
    MainWindow::modelString.clear(); // î÷èùàåì ñòðîêó ìîäåëè
209
 //   for (int i =0; i < rootItem1->childCount(); ++i )
209
 //   for (int i =0; i < rootItem1->childCount(); ++i )
210
210
211
    {MainWindow::addChildsString(rootItem1, 0);}
211
    {MainWindow::addChildsString(rootItem1, 0);}
212
212
213
    int root_item_child_count;
213
    int root_item_child_count;
214
    int i;
214
    int i;
215
    root_item_child_count = rootItem1->childCount();
215
    root_item_child_count = rootItem1->childCount();
216
    i++;
216
    i++;
217
217
218
}
218
}
219
219
220
220
221
void MainWindow::addChildsString(QTreeWidgetItem *parentItem, int level){
221
void MainWindow::addChildsString(QTreeWidgetItem *parentItem, int level){
222
    int child_count;
222
    int child_count;
223
    child_count = parentItem->childCount();
223
    child_count = parentItem->childCount();
224
    for (int i=0; i < child_count; ++i){
224
    for (int i=0; i < child_count; ++i){
225
        for (int m=0; m < level; ++m){
225
        for (int m=0; m < level; ++m){
226
        modelString.append(tr("    ")); // ÷åòûðå ïðîáåëà - ïðèçíàê òîãî, ÷òî ýòî íîâûé óðîâåíü âëîæåíèÿ
226
        modelString.append(tr("    ")); // ÷åòûðå ïðîáåëà - ïðèçíàê òîãî, ÷òî ýòî íîâûé óðîâåíü âëîæåíèÿ
227
    }
227
    }
228
        modelString.append(parentItem->child(i)->text(0)); // â ïåðâîé êîëîíêå - èìÿ êëàññà
228
        modelString.append(parentItem->child(i)->text(0)); // â ïåðâîé êîëîíêå - èìÿ êëàññà
229
        modelString.append(tr("\t\t\t\t")); // ÷åòûðå òàáóëÿöèè - ïðèçíàê íîâîãî ñòîëáöà
229
        modelString.append(tr("\t\t\t\t")); // ÷åòûðå òàáóëÿöèè - ïðèçíàê íîâîãî ñòîëáöà
230
        if (parentItem->child(i)->checkState(0) ==  Qt::Checked) {modelString.append(tr("true"));} // åñëè ãàëî÷êà ñòîèò, çàíîñèì "true", ýëåìåíòû êëàññà â ïðåäñòàâëåíèè îòîáðàæàòüñÿ áóäóò
230
        if (parentItem->child(i)->checkState(0) ==  Qt::Checked) {modelString.append(tr("true"));} // åñëè ãàëî÷êà ñòîèò, çàíîñèì "true", ýëåìåíòû êëàññà â ïðåäñòàâëåíèè îòîáðàæàòüñÿ áóäóò
231
            else {modelString.append(tr("false"));} // åñëè êëàññ íå âûáðàí - çàíîñèì "false", ýëåìåíòû êëàññà â ïðåäñòàâëåíèè îòîáðàæàòüñÿ íå áóäóò
231
            else {modelString.append(tr("false"));} // åñëè êëàññ íå âûáðàí - çàíîñèì "false", ýëåìåíòû êëàññà â ïðåäñòàâëåíèè îòîáðàæàòüñÿ íå áóäóò
232
        modelString.append(tr("\t\t\t\t")); // ÷åòûðå òàáóëÿöèè - ïðèçíàê íîâîãî ñòîëáöà
232
        modelString.append(tr("\t\t\t\t")); // ÷åòûðå òàáóëÿöèè - ïðèçíàê íîâîãî ñòîëáöà
233
        modelString.append(parentItem->child(i)->text(1)); // âî âòîðîé êîëîíêå - ID êëàññà
233
        modelString.append(parentItem->child(i)->text(1)); // âî âòîðîé êîëîíêå - ID êëàññà
234
         modelString.append(tr("\n")); // êîíåö ñòðîêè
234
         modelString.append(tr("\n")); // êîíåö ñòðîêè
235
        if (parentItem->child(i)->childCount() > 0) { MainWindow::addChildsString(parentItem->child(i), level+1);}
235
        if (parentItem->child(i)->childCount() > 0) { MainWindow::addChildsString(parentItem->child(i), level+1);}
236
236
237
    }
237
    }
238
int i;
238
int i;
239
i++;
239
i++;
240
}
240
}
241
241
242
242
243
bool MainWindow::openDataBase(){
243
bool MainWindow::openDataBase(){
244
    QString errorString;
244
    QString errorString;
245
    sql = QSqlDatabase::addDatabase("QMYSQL");
245
    sql = QSqlDatabase::addDatabase("QMYSQL");
246
    sql.setDatabaseName(tr("an_db"));
246
    sql.setDatabaseName(tr("an_db"));
247
    sql.setHostName(tr("localhost"));
247
    sql.setHostName(tr("localhost"));
248
    sql.setUserName(tr("an"));
248
    sql.setUserName(tr("an"));
249
    sql.setPassword(tr("393939"));
249
    sql.setPassword(tr("393939"));
250
250
251
    bool ok;
251
    bool ok;
252
    ok = sql.open();
252
    ok = sql.open();
253
253
254
    /*
254
    /*
255
    if (!ok) {
255
    if (!ok) {
256
                                QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
256
                                QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
257
                                                                                this,                      // Ðîäèòåëüñêèé âèäæåò.
257
                                                                                this,                      // Ðîäèòåëüñêèé âèäæåò.
258
                                                                                QObject::tr("Database Error"),   // Çàãîëîâîê.
258
                                                                                QObject::tr("Database Error"),   // Çàãîëîâîê.
259
                                                                                sql.lastError().text() );         // Òåêñò ñîîáùåíèÿ.
259
                                                                                sql.lastError().text() );         // Òåêñò ñîîáùåíèÿ.
260

260

261

261

262
                            }
262
                            }
263

263

264
*/
264
*/
265
    if (!ok) {
265
    if (!ok) {
266
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
266
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
267
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
267
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
268
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
268
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
269
                                                                            sql.lastError().text());          // Òåêñò ñîîáùåíèÿ.
269
                                                                            sql.lastError().text());          // Òåêñò ñîîáùåíèÿ.
270
                     }
270
                     }
271
else {
271
else {
272
272
273
        QMessageBox::information( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
273
        QMessageBox::information( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
274
                                                        this,                      // Ðîäèòåëüñêèé âèäæåò.
274
                                                        this,                      // Ðîäèòåëüñêèé âèäæåò.
275
                                                        QObject::tr("Database Connect"),   // Çàãîëîâîê.
275
                                                        QObject::tr("Database Connect"),   // Çàãîëîâîê.
276
                                                        QObject::tr("Ñîåäèíåíèå ñ áàçîé äàííûõ óñïåøíî óñòàíîâëåíî."));         // Òåêñò ñîîáùåíèÿ.
276
                                                        QObject::tr("Ñîåäèíåíèå ñ áàçîé äàííûõ óñïåøíî óñòàíîâëåíî."));         // Òåêñò ñîîáùåíèÿ.
277
277
278
278
279
279
280
280
281
281
282
    }
282
    }
283
283
284
     return ok;
284
     return ok;
285
}
285
}
286
286
287
287
288
bool MainWindow::buildPreviewModel(QString modelName, QString rootClassID){
288
bool MainWindow::buildPreviewModel(QString modelName, QString rootClassID){
289
QSqlQuery q;
289
QSqlQuery q;
290
QString sql_str;
290
QString sql_str;
291
QString field_name_str;
291
QString field_name_str;
292
QString root_class_name;
292
QString root_class_name;
293
bool ok;
293
bool ok;
294
int field_name;
294
int field_name;
295
295
296
//ui->treeWidget->clear();
296
//ui->treeWidget->clear();
297
297
298
root_class_name = MainWindow::ClassName(rootClassID); // îïðåäåëÿåì èìÿ êëàññà
298
root_class_name = MainWindow::ClassName(rootClassID); // îïðåäåëÿåì èìÿ êëàññà
299
299
300
rootItem1 = new  QTreeWidgetItem(ui->treeWidget);
300
rootItem1 = new  QTreeWidgetItem(ui->treeWidget);
301
root_items_list << rootItem1;
301
root_items_list << rootItem1;
302
 rootItem1->setText(0, modelName);
302
 rootItem1->setText(0, modelName);
303
303
304
 rootItem1->setCheckState(0,Qt::Checked);
304
 rootItem1->setCheckState(0,Qt::Checked);
305
 rootItems.append(rootItem1);
305
 rootItems.append(rootItem1);
306
306
307
307
308
308
309
rootItem2 = new  QTreeWidgetItem(rootItem1);
309
rootItem2 = new  QTreeWidgetItem(rootItem1);
310
rootItem2->setText(0, root_class_name);
310
rootItem2->setText(0, root_class_name);
311
rootItem2->setText(1, rootClassID);
311
rootItem2->setText(1, rootClassID);
312
rootItem2->setCheckState(0,Qt::Checked);
312
rootItem2->setCheckState(0,Qt::Checked);
313
313
314
addChildsItems(rootItem2);
314
addChildsItems(rootItem2);
315
315
316
sql_str = tr("select * "
316
sql_str = tr("select * "
317
             " from DescriptionOfClasses where  DescriptionOfClasses.DefaultValue = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
317
             " from DescriptionOfClasses where  DescriptionOfClasses.DefaultValue = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
318
             );
318
             );
319
sql_str.append(rootClassID);
319
sql_str.append(rootClassID);
320
320
321
sql_str.append(tr("' and DescriptionOfClasses.FieldType = 'pointer' "));
321
sql_str.append(tr("' and DescriptionOfClasses.FieldType = 'pointer' "));
322
322
323
q.prepare(sql_str);
323
q.prepare(sql_str);
324
324
325
ok = q.exec();
325
ok = q.exec();
326
if (!ok) {
326
if (!ok) {
327
                        QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
327
                        QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
328
                                                                        this,                      // Ðîäèòåëüñêèé âèäæåò.
328
                                                                        this,                      // Ðîäèòåëüñêèé âèäæåò.
329
                                                                        QObject::tr("Database Error"),   // Çàãîëîâîê.
329
                                                                        QObject::tr("Database Error"),   // Çàãîëîâîê.
330
                                                                        q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
330
                                                                        q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
331
                 }
331
                 }
332
field_name = q.record().indexOf(tr("FieldName"));
332
field_name = q.record().indexOf(tr("FieldName"));
333
while(q.next()){
333
while(q.next()){
334
334
335
                field_name_str = q.value(field_name).toString();
335
                field_name_str = q.value(field_name).toString();
336
336
337
                }
337
                }
338
338
339
339
340
340
341
341
342
}
342
}
343
343
344
344
345
bool MainWindow::rebuildPreviewModel(QTreeWidgetItem* root_item, QString rootClassID){
345
bool MainWindow::rebuildPreviewModel(QTreeWidgetItem* root_item, QString rootClassID){
346
QSqlQuery q;
346
QSqlQuery q;
347
QString sql_str;
347
QString sql_str;
348
QString field_name_str;
348
QString field_name_str;
349
QString root_class_name;
349
QString root_class_name;
350
bool ok;
350
bool ok;
351
int field_name;
351
int field_name;
352
352
353
//ui->treeWidget->clear();
353
//ui->treeWidget->clear();
354
354
355
root_class_name = MainWindow::ClassName(rootClassID); // îïðåäåëÿåì èìÿ êëàññà
355
root_class_name = MainWindow::ClassName(rootClassID); // îïðåäåëÿåì èìÿ êëàññà
356
356
357
357
358
// rootItem1 = new  QTreeWidgetItem(ui->treeWidget);
358
// rootItem1 = new  QTreeWidgetItem(ui->treeWidget);
359
// root_items_list << rootItem1;
359
// root_items_list << rootItem1;
360
// rootItem1->setText(0, modelName);
360
// rootItem1->setText(0, modelName);
361
361
362
// rootItem1->setCheckState(0,Qt::Checked);
362
// rootItem1->setCheckState(0,Qt::Checked);
363
// rootItems.append(rootItem1);
363
// rootItems.append(rootItem1);
364
364
365
// root_item->removeChild(root_item->child(0)); // î÷èùàåì ñïèñîê äî÷åðíèõ êëàññîâ
365
// root_item->removeChild(root_item->child(0)); // î÷èùàåì ñïèñîê äî÷åðíèõ êëàññîâ
366
if (root_item->childCount()==1){
366
if (root_item->childCount()==1){
367
root_item->child(0)->setText(0, root_class_name);
367
root_item->child(0)->setText(0, root_class_name);
368
root_item->child(0)->setText(1, rootClassID);
368
root_item->child(0)->setText(1, rootClassID);
369
root_item->child(0)->setCheckState(0,Qt::Checked);}
369
root_item->child(0)->setCheckState(0,Qt::Checked);}
370
370
371
//delete rootItem2;
371
//delete rootItem2;
372
372
373
373
374
// rootItem2 = new  QTreeWidgetItem(rootItem1);
374
// rootItem2 = new  QTreeWidgetItem(rootItem1);
375
375
376
376
377
377
378
// rootItem2->setText(0, root_class_name);
378
// rootItem2->setText(0, root_class_name);
379
// rootItem2->setText(1, rootClassID);
379
// rootItem2->setText(1, rootClassID);
380
// rootItem2->setCheckState(0,Qt::Checked);
380
// rootItem2->setCheckState(0,Qt::Checked);
381
381
382
int child_count = root_item->child(0)->childCount();
382
int child_count = root_item->child(0)->childCount();
383
383
384
384
385
385
386
for (int i=0; i < child_count; i++){
386
for (int i=0; i < child_count; i++){
387
    root_item->child(0)->removeChild(root_item->child(0)->child(0));
387
    root_item->child(0)->removeChild(root_item->child(0)->child(0));
388
}
388
}
389
389
390
child_count = root_item->child(0)->childCount();
390
child_count = root_item->child(0)->childCount();
391
addChildsItems(root_item->child(0));
391
addChildsItems(root_item->child(0));
392
/*
392
/*
393
sql_str = tr("select * "
393
sql_str = tr("select * "
394
             " from DescriptionOfClasses where  DescriptionOfClasses.DefaultValue = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
394
             " from DescriptionOfClasses where  DescriptionOfClasses.DefaultValue = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
395
             );
395
             );
396
sql_str.append(rootClassID);
396
sql_str.append(rootClassID);
397

397

398
sql_str.append(tr("' and DescriptionOfClasses.FieldType = 'pointer' "));
398
sql_str.append(tr("' and DescriptionOfClasses.FieldType = 'pointer' "));
399

399

400
q.prepare(sql_str);
400
q.prepare(sql_str);
401

401

402
ok = q.exec();
402
ok = q.exec();
403
if (!ok) {
403
if (!ok) {
404
                        QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
404
                        QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
405
                                                                        this,                      // Ðîäèòåëüñêèé âèäæåò.
405
                                                                        this,                      // Ðîäèòåëüñêèé âèäæåò.
406
                                                                        QObject::tr("Database Error"),   // Çàãîëîâîê.
406
                                                                        QObject::tr("Database Error"),   // Çàãîëîâîê.
407
                                                                        q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
407
                                                                        q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
408
                 }
408
                 }
409
field_name = q.record().indexOf(tr("FieldName"));
409
field_name = q.record().indexOf(tr("FieldName"));
410
while(q.next()){
410
while(q.next()){
411

411

412
                field_name_str = q.value(field_name).toString();
412
                field_name_str = q.value(field_name).toString();
413

413

414
                }
414
                }
415

415

416
*/
416
*/
417
417
418
418
419
}
419
}
420
420
421
421
422
422
423
423
424
QString MainWindow::ClassName(QString class_id){ //âîçâðàùàåò èìÿ êëàññà ïî åãî ID
424
QString MainWindow::ClassName(QString class_id){ //âîçâðàùàåò èìÿ êëàññà ïî åãî ID
425
    QSqlQuery q;
425
    QSqlQuery q;
426
    QString sql_str;
426
    QString sql_str;
427
    QString class_name_str;
427
    QString class_name_str;
428
    bool ok;
428
    bool ok;
429
    int field_class_name;
429
    int field_class_name;
430
430
431
    sql_str = tr("select * "
431
    sql_str = tr("select * "
432
                 " from ListOfClasses where ListOfClasses.ID = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
432
                 " from ListOfClasses where ListOfClasses.ID = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
433
                 );
433
                 );
434
434
435
    sql_str.append(class_id);
435
    sql_str.append(class_id);
436
    sql_str.append(tr("' "));
436
    sql_str.append(tr("' "));
437
437
438
    q.prepare(sql_str);
438
    q.prepare(sql_str);
439
439
440
    ok = q.exec();
440
    ok = q.exec();
441
441
442
442
443
    if (!ok) {
443
    if (!ok) {
444
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
444
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
445
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
445
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
446
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
446
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
447
                                                                            q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
447
                                                                            q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
448
                     }
448
                     }
449
449
450
    field_class_name = q.record().indexOf(tr("ClassName"));
450
    field_class_name = q.record().indexOf(tr("ClassName"));
451
    while(q.next()){
451
    while(q.next()){
452
452
453
                    class_name_str = q.value(field_class_name).toString();
453
                    class_name_str = q.value(field_class_name).toString();
454
454
455
                    }
455
                    }
456
456
457
    return class_name_str;
457
    return class_name_str;
458
458
459
}
459
}
460
460
461
void MainWindow::addChildsItems(QTreeWidgetItem *perent_class_item){ // äîáîâëÿåì ê ýëåìåíòó äåðåâà â êà÷åñòâå äî÷åðíèõ ýëåìåíòîâ âñå êëàññû, äëÿ êîòîðûõ êëàññ ýëåìåíòà ÿâëÿåòñÿ êîíòåéíåðîì
461
void MainWindow::addChildsItems(QTreeWidgetItem *perent_class_item){ // äîáîâëÿåì ê ýëåìåíòó äåðåâà â êà÷åñòâå äî÷åðíèõ ýëåìåíòîâ âñå êëàññû, äëÿ êîòîðûõ êëàññ ýëåìåíòà ÿâëÿåòñÿ êîíòåéíåðîì
462
QStringList chields_list;
462
QStringList chields_list;
463
QString parent_ID;
463
QString parent_ID;
464
QTreeWidgetItem *Item_tmp;
464
QTreeWidgetItem *Item_tmp;
465
parent_ID = perent_class_item->text(1);
465
parent_ID = perent_class_item->text(1);
466
int chields_count, i;
466
int chields_count, i;
467
467
468
chields_list = MainWindow::classChields(parent_ID);
468
chields_list = MainWindow::classChields(parent_ID);
469
if(chields_list.isEmpty()) return;
469
if(chields_list.isEmpty()) return;
470
chields_count = chields_list.size();
470
chields_count = chields_list.size();
471
for (int l = 0; l < chields_count; ++l){
471
for (int l = 0; l < chields_count; ++l){
472
    QString chield_class_name, chield_id;
472
    QString chield_class_name, chield_id;
473
    chield_id = chields_list.at(l);
473
    chield_id = chields_list.at(l);
474
    chield_class_name = MainWindow::ClassName(chield_id);
474
    chield_class_name = MainWindow::ClassName(chield_id);
475
    Item_tmp = new QTreeWidgetItem(perent_class_item);
475
    Item_tmp = new QTreeWidgetItem(perent_class_item);
476
    Item_tmp->setText(0, chield_class_name);
476
    Item_tmp->setText(0, chield_class_name);
477
    Item_tmp->setText(1, chield_id);
477
    Item_tmp->setText(1, chield_id);
478
    Item_tmp->setCheckState(0, Qt::Checked);
478
    Item_tmp->setCheckState(0, Qt::Checked);
479
    MainWindow::addChildsItems(Item_tmp);
479
    MainWindow::addChildsItems(Item_tmp);
480
}
480
}
481
481
482
i++;
482
i++;
483
483
484
}
484
}
485
485
486
486
487
/********************************************************
487
/********************************************************
488
* Ôóíêöèÿ âîçâðàùàåò ñïèñîê "äî÷åðíèõ" êëàññîâ
488
* Ôóíêöèÿ âîçâðàùàåò ñïèñîê "äî÷åðíèõ" êëàññîâ
489
*
489
*
490
*
490
*
491
*
491
*
492
********************************************************/
492
********************************************************/
493
493
494
QStringList MainWindow::classChields(QString class_id){
494
QStringList MainWindow::classChields(QString class_id){
495
   // QMap<QString, QString> map;
495
   // QMap<QString, QString> map;
496
   // TClass class_tmp;
496
   // TClass class_tmp;
497
   // QList <TClass> chields_class_list; // ñïèñîê äî÷åðíèõ êëàññîâ
497
   // QList <TClass> chields_class_list; // ñïèñîê äî÷åðíèõ êëàññîâ
498
    QStringList result;
498
    QStringList result;
499
    QSqlQuery q;
499
    QSqlQuery q;
500
    QString sql_str;
500
    QString sql_str;
501
    QString classIdentifer_str; // â ýòîì ïîëå ëåæèò èäåíòèôèêàòîð êëàññà-êîíòåéíåðà
501
    QString classIdentifer_str; // â ýòîì ïîëå ëåæèò èäåíòèôèêàòîð êëàññà-êîíòåéíåðà
502
    QString field_id_str;
502
    QString field_id_str;
503
    bool ok;
503
    bool ok;
504
    int field_classIdentifer;
504
    int field_classIdentifer;
505
    sql_str = tr("select * "
505
    sql_str = tr("select * "
506
                 " from DescriptionOfClasses where  DescriptionOfClasses.DefaultValue = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
506
                 " from DescriptionOfClasses where  DescriptionOfClasses.DefaultValue = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
507
                 );
507
                 );
508
    sql_str.append(class_id);
508
    sql_str.append(class_id);
509
509
510
    sql_str.append(tr("' and DescriptionOfClasses.FieldType = 'pointer' "));
510
    sql_str.append(tr("' and DescriptionOfClasses.FieldType = 'pointer' "));
511
511
512
    q.prepare(sql_str);
512
    q.prepare(sql_str);
513
513
514
    ok = q.exec();
514
    ok = q.exec();
515
    if (!ok) {
515
    if (!ok) {
516
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
516
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
517
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
517
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
518
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
518
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
519
                                                                            q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
519
                                                                            q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
520
                     }
520
                     }
521
    field_classIdentifer = q.record().indexOf(tr("ClassIdentifer"));
521
    field_classIdentifer = q.record().indexOf(tr("ClassIdentifer"));
522
      while(q.next()){
522
      while(q.next()){
523
523
524
                    classIdentifer_str = q.value(field_classIdentifer).toString();
524
                    classIdentifer_str = q.value(field_classIdentifer).toString();
525
                    result.append(classIdentifer_str);
525
                    result.append(classIdentifer_str);
526
                    }
526
                    }
527
527
528
    return result;
528
    return result;
529
529
530
  }
530
  }
531
531
532
532
533
QMap <QString, QString> MainWindow::getClassList(){ // ïîëó÷àåì ñïèñîê êëàññîâ
533
QMap <QString, QString> MainWindow::getClassList(){ // ïîëó÷àåì ñïèñîê êëàññîâ
534
QMap <QString, QString> result_map;
534
QMap <QString, QString> result_map;
535
QSqlQuery q;
535
QSqlQuery q;
536
QString sql_str;
536
QString sql_str;
537
QString class_name_str, class_id_str;
537
QString class_name_str, class_id_str;
538
538
539
int field_class_id, field_class_name;
539
int field_class_id, field_class_name;
540
bool ok;
540
bool ok;
541
sql_str = tr("select * "
541
sql_str = tr("select * "
542
             " from ListOfClasses "       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
542
             " from ListOfClasses "       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
543
             );
543
             );
544
 q.prepare(sql_str);
544
 q.prepare(sql_str);
545
 ok = q.exec();
545
 ok = q.exec();
546
 if (!ok) {
546
 if (!ok) {
547
                         QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
547
                         QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
548
                                                                         this,                      // Ðîäèòåëüñêèé âèäæåò.
548
                                                                         this,                      // Ðîäèòåëüñêèé âèäæåò.
549
                                                                         QObject::tr("Database Error"),   // Çàãîëîâîê.
549
                                                                         QObject::tr("Database Error"),   // Çàãîëîâîê.
550
                                                                         q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
550
                                                                         q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
551
                         return result_map; // åñëè îøèáêà - âîçâðàùàåì ïóñòîé ñïèñîê
551
                         return result_map; // åñëè îøèáêà - âîçâðàùàåì ïóñòîé ñïèñîê
552
                  }
552
                  }
553
field_class_id = q.record().indexOf(tr("ID"));
553
field_class_id = q.record().indexOf(tr("ID"));
554
field_class_name = q.record().indexOf(tr("ClassName"));
554
field_class_name = q.record().indexOf(tr("ClassName"));
555
555
556
while(q.next()){
556
while(q.next()){
557
557
558
                class_name_str = q.value(field_class_name).toString();
558
                class_name_str = q.value(field_class_name).toString();
559
                class_id_str = q.value(field_class_id).toString();
559
                class_id_str = q.value(field_class_id).toString();
560
                result_map[class_id_str] = class_name_str;
560
                result_map[class_id_str] = class_name_str;
561
                }
561
                }
562
 return result_map;
562
 return result_map;
563
}
563
}
564
564
565
565
566
566
567
567
568
568
569
void MainWindow::initComboBox(){
569
void MainWindow::initComboBox(){
570
570
571
571
572
    QStringList classesNameList;
572
    QStringList classesNameList;
573
    QStringList classesID_list;
573
    QStringList classesID_list;
574
    QStringList tmp_stringList;
574
    QStringList tmp_stringList;
575
575
576
576
577
577
578
    QString tmp_str;
578
    QString tmp_str;
579
579
580
    class_list_map = MainWindow::getClassList();
580
    class_list_map = MainWindow::getClassList();
581
    classesID_list = class_list_map.keys();
581
    classesID_list = class_list_map.keys();
582
    classesNameList = class_list_map.values();
582
    classesNameList = class_list_map.values();
583
    QMapIterator<QString, QString> interator(class_list_map);
583
    QMapIterator<QString, QString> interator(class_list_map);
584
//    ui->comboBox->addItems(classesID_list);
584
//    ui->comboBox->addItems(classesID_list);
585
  //  ui->comboBox->addItems(classesNameList);
585
  //  ui->comboBox->addItems(classesNameList);
586
    while (interator.hasNext()) {
586
    while (interator.hasNext()) {
587
         interator.next();
587
         interator.next();
588
         tmp_str =  interator.value();
588
         tmp_str =  interator.value();
589
         tmp_str.append(tr(" \t(ID="));
589
         tmp_str.append(tr(" \t(ID="));
590
         tmp_str.append(interator.key());
590
         tmp_str.append(interator.key());
591
         tmp_str.append(tr(")"));
591
         tmp_str.append(tr(")"));
592
         tmp_stringList << tmp_str;
592
         tmp_stringList << tmp_str;
593
593
594
     }
594
     }
595
    ui->comboBox->addItems(tmp_stringList);
595
    ui->comboBox->addItems(tmp_stringList);
596
596
597
597
598
}
598
}
599
599
600
600
601
void MainWindow::on_comboBox_currentIndexChanged( int index ){
601
void MainWindow::on_comboBox_currentIndexChanged( int index ){
602
QStringList classesNameList;
602
QStringList classesNameList;
603
QStringList classesID_list;
603
QStringList classesID_list;
604
QString ID_str;
604
QString ID_str;
605
classesID_list = class_list_map.keys();
605
classesID_list = class_list_map.keys();
606
classesNameList = class_list_map.values();
606
classesNameList = class_list_map.values();
607
ID_str =  classesID_list[index];
607
ID_str =  classesID_list[index];
608
ui->label->setText(ID_str);
608
ui->label->setText(ID_str);
609
if (root_items_list.indexOf(ui->treeWidget->currentItem()) != -1) rebuildPreviewModel(ui->treeWidget->currentItem(), ID_str);
609
if (root_items_list.indexOf(ui->treeWidget->currentItem()) != -1) rebuildPreviewModel(ui->treeWidget->currentItem(), ID_str);
610
610
611
611
612
}
612
}
613
613
614
void MainWindow::on_treeWidget_itemChanged ( QTreeWidgetItem * item, int column ){
614
void MainWindow::on_treeWidget_itemChanged ( QTreeWidgetItem * item, int column ){
615
    int i;
615
    int i;
616
    i++;
616
    i++;
617
617
618
}
618
}
619
619
620
620
621
void MainWindow::on_treeWidget_itemClicked ( QTreeWidgetItem * item, int column ){
621
void MainWindow::on_treeWidget_itemClicked ( QTreeWidgetItem * item, int column ){
622
    int i;
622
    int i;
623
    i++;
623
    i++;
624
    if (root_items_list.indexOf(item) != -1) {
624
    if (root_items_list.indexOf(item) != -1) {
625
        QStringList classesNameList;
625
        QStringList classesNameList;
626
        QStringList classesID_list;
626
        QStringList classesID_list;
627
627
628
        int index;
628
        int index;
629
        classesID_list = class_list_map.keys();
629
        classesID_list = class_list_map.keys();
630
        classesNameList = class_list_map.values();
630
        classesNameList = class_list_map.values();
631
        index = classesID_list.indexOf(item->child(0)->text(1));
631
        index = classesID_list.indexOf(item->child(0)->text(1));
632
        ui->comboBox->setCurrentIndex(index);
632
        ui->comboBox->setCurrentIndex(index);
633
633
634
        ui->comboBox->setEnabled(true);
634
        ui->comboBox->setEnabled(true);
635
635
636
636
637
    }
637
    }
638
  //  if ((rootItem1) == (item) ) ui->comboBox->setEnabled(true);
638
  //  if ((rootItem1) == (item) ) ui->comboBox->setEnabled(true);
639
else ( ui->comboBox->setEnabled(false));
639
else ( ui->comboBox->setEnabled(false));
640
}
640
}
641
641
642
642
643
 
643