Хранилища Subversion OpenInventory

Редакция

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

Редакция 227 Редакция 228
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
/*
9
/*
10
    QPalette p = this->palette();
10
    QPalette p = this->palette();
11
    p.setBrush(this->backgroundRole(), QBrush(QColor(255,255,255,128)));
11
    p.setBrush(this->backgroundRole(), QBrush(QColor(255,255,255,128)));
12
    this->setAutoFillBackground(true);
12
    this->setAutoFillBackground(true);
13
    this->setPalette(p);
13
    this->setPalette(p);
14
*/
14
*/
15
15
16
    ui->centralWidget->setLayout(ui->verticalLayout);
16
    ui->centralWidget->setLayout(ui->verticalLayout);
17
    ui->tab->setLayout(ui->horizontalLayout);
17
    ui->tab->setLayout(ui->horizontalLayout);
18
    ui->tab_2->setLayout(ui->horizontalLayout_3);
18
    ui->tab_2->setLayout(ui->horizontalLayout_3);
19
   // connect( ui->comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(on_currentIndexChanged(int)));
19
   // connect( ui->comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(on_currentIndexChanged(int)));
20
    model_is_build = false;
20
    model_is_build = false;
21
   // MainWindow::readModel();
21
   // MainWindow::readModel();
22
22
23
   //QString model_str;
23
   //QString model_str;
24
24
25
25
26
   /*
26
   /*
27
   MainWindow::creatModelString();
27
   MainWindow::creatModelString();
28
   int i;
28
   int i;
29
   i++;
29
   i++;
30
    QFile file_tmp("./temp.txt");
30
    QFile file_tmp("./temp.txt");
31
    bool ok;
31
    bool ok;
32
    ok = file_tmp.open(QIODevice::ReadWrite | QIODevice::Text);
32
    ok = file_tmp.open(QIODevice::ReadWrite | QIODevice::Text);
33
    QTextStream out(&file_tmp);
33
    QTextStream out(&file_tmp);
34
    out << MainWindow::modelString;
34
    out << MainWindow::modelString;
35
    file_tmp.close();
35
    file_tmp.close();
36
*/
36
*/
37
37
38
38
39
39
40
40
41
    ui->treeWidget->setAlternatingRowColors(true);
41
    ui->treeWidget->setAlternatingRowColors(true);
42
    ui->treeWidget_2->setAlternatingRowColors(true);
42
    ui->treeWidget_2->setAlternatingRowColors(true);
43
43
44
    ui->treeWidget->setIconSize(QSize(30,30));
44
    ui->treeWidget->setIconSize(QSize(30,30));
45
    ui->treeWidget->setColumnWidth(0, 400);
45
    ui->treeWidget->setColumnWidth(0, 400);
46
    ui->treeWidget_2->setIconSize(QSize(128,128));
46
    ui->treeWidget_2->setIconSize(QSize(128,128));
47
47
48
    MainWindow::readSettings();
48
    MainWindow::readSettings();
49
49
50
    MainWindow::openDataBase();
50
    MainWindow::openDataBase();
51
51
52
    classesIcons = MainWindow::getClassesIcons(); // ïîëó÷èì èêîíêè äëÿ êëàññîâ
52
    classesIcons = MainWindow::getClassesIcons(); // ïîëó÷èì èêîíêè äëÿ êëàññîâ
53
53
54
    MainWindow::initComboBox();
54
    MainWindow::initComboBox();
55
55
56
//    MainWindow::buildPreviewModel(tr("Ìîÿ ìîäåëü"), tr("11"));
56
//    MainWindow::buildPreviewModel(tr("Ìîÿ ìîäåëü"), tr("11"));
57
57
58
    MainWindow::initListModelsTablle();
58
    MainWindow::initListModelsTablle();
59
59
60
    MainWindow::readModels();
60
    MainWindow::readModels();
61
61
62
 //   MainWindow::creatModelString();
62
 //   MainWindow::creatModelString();
63
    //int i;
63
    //int i;
64
    //i++;
64
    //i++;
65
65
66
    /*
66
    /*
67
    QFile file_tmp("./modelstring.txt");
67
    QFile file_tmp("./modelstring.txt");
68
     bool ok;
68
     bool ok;
69
     file_tmp.remove();
69
     file_tmp.remove();
70
     ok = file_tmp.open(QIODevice::ReadWrite | QIODevice::Text);
70
     ok = file_tmp.open(QIODevice::ReadWrite | QIODevice::Text);
71
     QTextStream out(&file_tmp);
71
     QTextStream out(&file_tmp);
72
     out.setCodec("cp1251");
72
     out.setCodec("cp1251");
73
     out << MainWindow::modelString;
73
     out << MainWindow::modelString;
74
     file_tmp.close();
74
     file_tmp.close();
75
    */
75
    */
76
76
77
77
78
    ui->treeWidget_2->hideColumn(1);
78
    ui->treeWidget_2->hideColumn(1);
79
    ui->treeWidget_2->hideColumn(2);
79
    ui->treeWidget_2->hideColumn(2);
80
    ui->treeWidget_2->hideColumn(3);
80
    ui->treeWidget_2->hideColumn(3);
81
    ui->treeWidget_2->hideColumn(4);
81
    ui->treeWidget_2->hideColumn(4);
82
82
83
83
84
    getDatabaseData();
84
    getDatabaseData();
85
    //// sql_mogel = new QSqlTableModel();
85
    //// sql_mogel = new QSqlTableModel();
86
    sql_mogel = new MyModel();
86
    sql_mogel = new MyModel();
87
87
88
    /// filter_model = new MyModel();
88
    /// filter_model = new MyModel();
89
    filter_model = new QSqlTableModel();
89
    filter_model = new QSqlTableModel();
90
    filter_model->setEditStrategy(QSqlTableModel::OnManualSubmit);
90
    filter_model->setEditStrategy(QSqlTableModel::OnManualSubmit);
91
91
92
    model_is_build = true;
92
    model_is_build = true;
93
    connect(sql_mogel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(on_sql_mogel_dataChanged(QModelIndex,QModelIndex)));
93
    connect(sql_mogel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(on_sql_mogel_dataChanged(QModelIndex,QModelIndex)));
94
    connect(model_for_ListModelsTable, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(on_model_for_ListModelsTable_dataChanged(QModelIndex,QModelIndex)));
94
    connect(model_for_ListModelsTable, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(on_model_for_ListModelsTable_dataChanged(QModelIndex,QModelIndex)));
95
    connect(filter_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(on_filter_model_dataChanged(QModelIndex,QModelIndex)));
95
    connect(filter_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(on_filter_model_dataChanged(QModelIndex,QModelIndex)));
96
96
97
97
98
    ui->pushButton_3->setEnabled(false);
98
    ui->pushButton_3->setEnabled(false);
99
    ui->pushButton_4->setEnabled(false);
99
    ui->pushButton_4->setEnabled(false);
100
100
101
101
102
    ui->pushButton_9->setEnabled(false);
102
    ui->pushButton_9->setEnabled(false);
103
    ui->pushButton_10->setEnabled(false);
103
    ui->pushButton_10->setEnabled(false);
104
    ui->pushButton_11->setEnabled(false);
104
    ui->pushButton_11->setEnabled(false);
105
    ui->pushButton_12->setEnabled(false);
105
    ui->pushButton_12->setEnabled(false);
106
106
107
   // setFrm.show();
107
   // setFrm.show();
108
108
109
    // treeForm.show();
109
    // treeForm.show();
110
110
111
    connect(ui->getsettingAct, SIGNAL(triggered()), this, SLOT(getSetting())); // âûáîð â ãëàâíîé ôîðìå â ìåíþ "Áàçà äàííûõ" ïóíêòà "Ïàðàìåòðû ñîåäèíåíèÿ"
111
    connect(ui->getsettingAct, SIGNAL(triggered()), this, SLOT(getSetting())); // âûáîð â ãëàâíîé ôîðìå â ìåíþ "Áàçà äàííûõ" ïóíêòà "Ïàðàìåòðû ñîåäèíåíèÿ"
112
    connect(setFrm.pushButton, SIGNAL(clicked()), this, SLOT(applySetting()));
112
    connect(setFrm.pushButton, SIGNAL(clicked()), this, SLOT(applySetting()));
113
113
114
 //   connect(ui->tableView_2,SIGNAL(activated(QModelIndex)),ui->tableView_2,SLOT(edit(QModelIndex)));
114
 //   connect(ui->tableView_2,SIGNAL(activated(QModelIndex)),ui->tableView_2,SLOT(edit(QModelIndex)));
115
115
116
    picture_delegate = new CPictureDelegate(this);
116
    picture_delegate = new CPictureDelegate(this);
117
    iconDelegate = new IconDelegate(this);
117
    iconDelegate = new IconDelegate(this);
118
    fileDelegate = new FileDelegate(this);
118
    fileDelegate = new FileDelegate(this);
119
119
120
 //   fileForm.show();
120
 //   fileForm.show();
121
121
-
 
122
-
 
123
    cursor = new QTextCursor(&doc);
-
 
124
    buildReport(true);
-
 
125
-
 
126
122
}
127
}
123
128
124
MainWindow::~MainWindow()
129
MainWindow::~MainWindow()
125
{
130
{
126
    delete sql_mogel;
131
    delete sql_mogel;
127
    delete filter_model;
132
    delete filter_model;
128
    delete ui;
133
    delete ui;
129
    delete model_for_ListModelsTable;
134
    delete model_for_ListModelsTable;
130
}
135
}
131
136
132
void MainWindow::changeEvent(QEvent *e)
137
void MainWindow::changeEvent(QEvent *e)
133
{
138
{
134
    QMainWindow::changeEvent(e);
139
    QMainWindow::changeEvent(e);
135
    switch (e->type()) {
140
    switch (e->type()) {
136
    case QEvent::LanguageChange:
141
    case QEvent::LanguageChange:
137
        ui->retranslateUi(this);
142
        ui->retranslateUi(this);
138
        break;
143
        break;
139
    default:
144
    default:
140
        break;
145
        break;
141
    }
146
    }
142
}
147
}
143
148
144
149
145
bool MainWindow::readModel(){
150
bool MainWindow::readModel(){
146
    bool result;
151
    bool result;
147
    QString model_str;
152
    QString model_str;
148
    QFile file("modelstring.txt");
153
    QFile file("modelstring.txt");
149
  //  QFile file("model.txt");
154
  //  QFile file("model.txt");
150
   rootItem1 = new  QTreeWidgetItem(ui->treeWidget);
155
   rootItem1 = new  QTreeWidgetItem(ui->treeWidget);
151
    rootItem1->setText(0, tr("Óðîâåíü 1"));
156
    rootItem1->setText(0, tr("Óðîâåíü 1"));
152
   // rootItem2 = new  QTreeWidgetItem(rootItem1);
157
   // rootItem2 = new  QTreeWidgetItem(rootItem1);
153
   // rootItem2->setText(0, tr("óðîâåíü 2"));
158
   // rootItem2->setText(0, tr("óðîâåíü 2"));
154
    rootItem1->setCheckState(0,Qt::Checked);
159
    rootItem1->setCheckState(0,Qt::Checked);
155
   // rootItem2->setCheckState(0,Qt::Checked);
160
   // rootItem2->setCheckState(0,Qt::Checked);
156
161
157
162
158
163
159
    result = file.open(QIODevice::ReadOnly);
164
    result = file.open(QIODevice::ReadOnly);
160
    if (result) {
165
    if (result) {
161
                     model_str = QString(tr(file.readAll()));
166
                     model_str = QString(tr(file.readAll()));
162
                }
167
                }
163
168
164
    setupModelData(model_str.split(QString("\n")), rootItem1, -1, tr("1"));
169
    setupModelData(model_str.split(QString("\n")), rootItem1, -1, tr("1"));
165
170
166
171
167
    return result;
172
    return result;
168
173
169
}
174
}
170
175
171
176
172
void MainWindow::setupModelData(const QStringList &lines, QTreeWidgetItem *parent, int row, QString model_id)
177
void MainWindow::setupModelData(const QStringList &lines, QTreeWidgetItem *parent, int row, QString model_id)
173
{
178
{
174
    QList<QTreeWidgetItem*> parents;
179
    QList<QTreeWidgetItem*> parents;
175
    QList<int> indentations;
180
    QList<int> indentations;
176
    parents << parent;
181
    parents << parent;
177
    indentations << 0;
182
    indentations << 0;
178
183
179
    int number = 0;
184
    int number = 0;
180
185
181
    while (number < lines.count()) {
186
    while (number < lines.count()) {
182
        int position = 0;
187
        int position = 0;
183
        while (position < lines[number].length()) {
188
        while (position < lines[number].length()) {
184
            if (lines[number].mid(position, 1) != " ")
189
            if (lines[number].mid(position, 1) != " ")
185
                break;
190
                break;
186
            position++;
191
            position++;
187
        }
192
        }
188
193
189
        QString lineData = lines[number].mid(position).trimmed();
194
        QString lineData = lines[number].mid(position).trimmed();
190
195
191
        if (!lineData.isEmpty()) {
196
        if (!lineData.isEmpty()) {
192
            // Read the column data from the rest of the line.
197
            // Read the column data from the rest of the line.
193
            QStringList columnStrings = lineData.split("\t", QString::SkipEmptyParts);
198
            QStringList columnStrings = lineData.split("\t", QString::SkipEmptyParts);
194
            QList<QVariant> columnData;
199
            QList<QVariant> columnData;
195
            for (int column = 0; column < columnStrings.count(); ++column)
200
            for (int column = 0; column < columnStrings.count(); ++column)
196
                columnData << columnStrings[column];
201
                columnData << columnStrings[column];
197
202
198
            if (position > indentations.last()) {
203
            if (position > indentations.last()) {
199
                // The last child of the current parent is now the new parent
204
                // The last child of the current parent is now the new parent
200
                // unless the current parent has no children.
205
                // unless the current parent has no children.
201
206
202
                if (parents.last()->childCount() > 0) {
207
                if (parents.last()->childCount() > 0) {
203
                    parents << parents.last()->child(parents.last()->childCount()-1);
208
                    parents << parents.last()->child(parents.last()->childCount()-1);
204
                    indentations << position;
209
                    indentations << position;
205
                }
210
                }
206
            } else {
211
            } else {
207
                while (position < indentations.last() && parents.count() > 0) {
212
                while (position < indentations.last() && parents.count() > 0) {
208
                    parents.pop_back();
213
                    parents.pop_back();
209
                    indentations.pop_back();
214
                    indentations.pop_back();
210
                }
215
                }
211
            }
216
            }
212
217
213
            // Append a new item to the current parent's list of children.
218
            // Append a new item to the current parent's list of children.
214
          // // //  parents.last()->appendChild(new QTreeWidgetItem(columnData, parents.last()));
219
          // // //  parents.last()->appendChild(new QTreeWidgetItem(columnData, parents.last()));
215
            QTreeWidgetItem* itm_tmp;
220
            QTreeWidgetItem* itm_tmp;
216
            itm_tmp = new QTreeWidgetItem( parents.last());
221
            itm_tmp = new QTreeWidgetItem( parents.last());
217
        //    itm_tmp->setFlags(Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsEnabled);
222
        //    itm_tmp->setFlags(Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsEnabled);
218
223
219
/*
224
/*
220
            QLineEdit * edit_line;
225
            QLineEdit * edit_line;
221
            edit_line = new QLineEdit(this);
226
            edit_line = new QLineEdit(this);
222
            ui->treeWidget->setItemWidget(itm_tmp, 5, edit_line);
227
            ui->treeWidget->setItemWidget(itm_tmp, 5, edit_line);
223
*/
228
*/
224
//static QStandartDelegate delegate;
229
//static QStandartDelegate delegate;
225
            ui->treeWidget->setItemDelegateForColumn(5, &standart_delegate);
230
            ui->treeWidget->setItemDelegateForColumn(5, &standart_delegate);
226
231
227
232
228
            itm_tmp->setText(0, QString(columnData.at(0).toString()));
233
            itm_tmp->setText(0, QString(columnData.at(0).toString()));
229
            if (columnData.at(1).toString() == "true") {
234
            if (columnData.at(1).toString() == "true") {
230
                                                            itm_tmp->setCheckState(0,Qt::Checked);
235
                                                            itm_tmp->setCheckState(0,Qt::Checked);
231
                                                        }
236
                                                        }
232
            else itm_tmp->setCheckState(0,Qt::Unchecked);
237
            else itm_tmp->setCheckState(0,Qt::Unchecked);
233
            if (columnData.count()>2)
238
            if (columnData.count()>2)
234
            {
239
            {
235
            QString class_id;
240
            QString class_id;
236
            QString filtr_str;
241
            QString filtr_str;
237
            QPixmap pxmp;
242
            QPixmap pxmp;
238
            QIcon icon;
243
            QIcon icon;
239
            class_id = QString(columnData.at(2).toString());
244
            class_id = QString(columnData.at(2).toString());
240
            pxmp = MainWindow::classesIcons.value(class_id);
245
            pxmp = MainWindow::classesIcons.value(class_id);
241
246
242
           // itm_tmp->setText(1, QString(columnData.at(2).toString())); // id êëàññà
247
           // itm_tmp->setText(1, QString(columnData.at(2).toString())); // id êëàññà
243
            itm_tmp->setText(1, class_id); // id êëàññà
248
            itm_tmp->setText(1, class_id); // id êëàññà
244
            itm_tmp->setText(6, model_id); // id ìîäåëè
249
            itm_tmp->setText(6, model_id); // id ìîäåëè
245
            itm_tmp->setText(2, QVariant(number).toString()); // íîìåð ñòðîêè â ôàéëå-ìîäåëè îòîáðàæåíèÿ
250
            itm_tmp->setText(2, QVariant(number).toString()); // íîìåð ñòðîêè â ôàéëå-ìîäåëè îòîáðàæåíèÿ
246
            itm_tmp->setText(3, QVariant(indentations.size()).toString()); // óðîâåíü âëîæåíèÿ
251
            itm_tmp->setText(3, QVariant(indentations.size()).toString()); // óðîâåíü âëîæåíèÿ
247
            itm_tmp->setText(4, QVariant(row).toString()); // íîìåð ñòðîêè â ôàéëå
252
            itm_tmp->setText(4, QVariant(row).toString()); // íîìåð ñòðîêè â ôàéëå
248
            filtr_str = getFiltrString(model_id,class_id);
253
            filtr_str = getFiltrString(model_id,class_id);
249
            itm_tmp->setText(5,filtr_str);
254
            itm_tmp->setText(5,filtr_str);
250
255
251
            if (!pxmp.isNull())
256
            if (!pxmp.isNull())
252
                {
257
                {
253
                    icon.addPixmap(pxmp);
258
                    icon.addPixmap(pxmp);
254
                    itm_tmp->setIcon(0, icon);                  
259
                    itm_tmp->setIcon(0, icon);                  
255
                }
260
                }
256
            }
261
            }
257
        }
262
        }
258
263
259
        number++;
264
        number++;
260
    }
265
    }
261
}
266
}
262
267
263
268
264
/*
269
/*
265
void MainWindow::openBase()
270
void MainWindow::openBase()
266
{
271
{
267

272

268
        db = QSqlDatabase::addDatabase("QMYSQL");
273
        db = QSqlDatabase::addDatabase("QMYSQL");
269
        pdb = &db;
274
        pdb = &db;
270
        raportFrm.pdb = &db;
275
        raportFrm.pdb = &db;
271

276

272
        pdb->setHostName(hostName);
277
        pdb->setHostName(hostName);
273
        pdb->setDatabaseName(baseName);
278
        pdb->setDatabaseName(baseName);
274
        pdb->setUserName(userName);
279
        pdb->setUserName(userName);
275
        pdb->setPassword(password);
280
        pdb->setPassword(password);
276
        bool ok = pdb->open();
281
        bool ok = pdb->open();
277
        if (!ok) {
282
        if (!ok) {
278
                                QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
283
                                QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
279
                                                                                this,                      // Ðîäèòåëüñêèé âèäæåò.
284
                                                                                this,                      // Ðîäèòåëüñêèé âèäæåò.
280
                                                                                QObject::tr("Database Error"),   // Çàãîëîâîê.
285
                                                                                QObject::tr("Database Error"),   // Çàãîëîâîê.
281
                                                                                pdb->lastError().text());          // Òåêñò ñîîáùåíèÿ.
286
                                                                                pdb->lastError().text());          // Òåêñò ñîîáùåíèÿ.
282
                         }
287
                         }
283
        if (ok)
288
        if (ok)
284
        {lineEdit-> insert(tr("Áàçà óñïåøíî îòêðûòà"));
289
        {lineEdit-> insert(tr("Áàçà óñïåøíî îòêðûòà"));
285
        }
290
        }
286
        else {lineEdit-> insert(tr("Áàçà íåäîñòóïíà. Êîä îøèáêè: "));
291
        else {lineEdit-> insert(tr("Áàçà íåäîñòóïíà. Êîä îøèáêè: "));
287
                  lineEdit-> insert(pdb->lastError().text());
292
                  lineEdit-> insert(pdb->lastError().text());
288
                 }
293
                 }
289

294

290

295

291

296

292
        model = new QSqlTableModel(this);
297
        model = new QSqlTableModel(this);
293
        model->setTable(tableName);
298
        model->setTable(tableName);
294

299

295
        model->setEditStrategy(QSqlTableModel::OnManualSubmit);
300
        model->setEditStrategy(QSqlTableModel::OnManualSubmit);
296
        model->setSort(0, Qt::AscendingOrder);
301
        model->setSort(0, Qt::AscendingOrder);
297

302

298
        model->select();
303
        model->select();
299

304

300

305

301
        QSqlField field(tr("age"), QVariant::Int);
306
        QSqlField field(tr("age"), QVariant::Int);
302
        field.setValue(QString(tr("123")));
307
        field.setValue(QString(tr("123")));
303

308

304
        bool okey;
309
        bool okey;
305
        int index;
310
        int index;
306
        QSqlRecord record;
311
        QSqlRecord record;
307

312

308

313

309
        tableView->setModel(model);
314
        tableView->setModel(model);
310
        view.setModel(model);
315
        view.setModel(model);
311

316

312

317

313
        tableView->setAlternatingRowColors(true);
318
        tableView->setAlternatingRowColors(true);
314
        view.setAlternatingRowColors(true);
319
        view.setAlternatingRowColors(true);
315

320

316
        tableView->resizeColumnsToContents();
321
        tableView->resizeColumnsToContents();
317

322

318

323

319
        view.resizeColumnsToContents();
324
        view.resizeColumnsToContents();
320

325

321
        tableView->show();
326
        tableView->show();
322

327

323

328

324

329

325
        initTreeWidget();
330
        initTreeWidget();
326
}
331
}
327
*/
332
*/
328
333
329
334
330
QString MainWindow::creatModelString(QTreeWidgetItem* model){
335
QString MainWindow::creatModelString(QTreeWidgetItem* model){
331
336
332
    MainWindow::modelString.clear(); // î÷èùàåì ñòðîêó ìîäåëè
337
    MainWindow::modelString.clear(); // î÷èùàåì ñòðîêó ìîäåëè
333
 //   for (int i =0; i < rootItem1->childCount(); ++i )
338
 //   for (int i =0; i < rootItem1->childCount(); ++i )
334
339
335
    {MainWindow::addChildsString(model, 0);}
340
    {MainWindow::addChildsString(model, 0);}
336
341
337
    return MainWindow::modelString;
342
    return MainWindow::modelString;
338
// {MainWindow::addChildsString(ui->treeWidget, 0);}
343
// {MainWindow::addChildsString(ui->treeWidget, 0);}
339
 /*
344
 /*
340
    int root_item_child_count;
345
    int root_item_child_count;
341
    int i;
346
    int i;
342
    root_item_child_count = rootItem1->childCount();
347
    root_item_child_count = rootItem1->childCount();
343
    i++;
348
    i++;
344
*/
349
*/
345
}
350
}
346
351
347
352
348
void MainWindow::addChildsString(QTreeWidgetItem *parentItem, int level){
353
void MainWindow::addChildsString(QTreeWidgetItem *parentItem, int level){
349
    int child_count;
354
    int child_count;
350
    child_count = parentItem->childCount();
355
    child_count = parentItem->childCount();
351
    for (int i=0; i < child_count; ++i){
356
    for (int i=0; i < child_count; ++i){
352
        for (int m=0; m < level; ++m){
357
        for (int m=0; m < level; ++m){
353
        modelString.append(tr("    ")); // ÷åòûðå ïðîáåëà - ïðèçíàê òîãî, ÷òî ýòî íîâûé óðîâåíü âëîæåíèÿ
358
        modelString.append(tr("    ")); // ÷åòûðå ïðîáåëà - ïðèçíàê òîãî, ÷òî ýòî íîâûé óðîâåíü âëîæåíèÿ
354
    }
359
    }
355
        modelString.append(parentItem->child(i)->text(0)); // â ïåðâîé êîëîíêå - èìÿ êëàññà
360
        modelString.append(parentItem->child(i)->text(0)); // â ïåðâîé êîëîíêå - èìÿ êëàññà
356
        modelString.append(tr("\t\t\t\t")); // ÷åòûðå òàáóëÿöèè - ïðèçíàê íîâîãî ñòîëáöà
361
        modelString.append(tr("\t\t\t\t")); // ÷åòûðå òàáóëÿöèè - ïðèçíàê íîâîãî ñòîëáöà
357
        if (parentItem->child(i)->checkState(0) ==  Qt::Checked) {modelString.append(tr("true"));} // åñëè ãàëî÷êà ñòîèò, çàíîñèì "true", ýëåìåíòû êëàññà â ïðåäñòàâëåíèè îòîáðàæàòüñÿ áóäóò
362
        if (parentItem->child(i)->checkState(0) ==  Qt::Checked) {modelString.append(tr("true"));} // åñëè ãàëî÷êà ñòîèò, çàíîñèì "true", ýëåìåíòû êëàññà â ïðåäñòàâëåíèè îòîáðàæàòüñÿ áóäóò
358
            else {modelString.append(tr("false"));} // åñëè êëàññ íå âûáðàí - çàíîñèì "false", ýëåìåíòû êëàññà â ïðåäñòàâëåíèè îòîáðàæàòüñÿ íå áóäóò
363
            else {modelString.append(tr("false"));} // åñëè êëàññ íå âûáðàí - çàíîñèì "false", ýëåìåíòû êëàññà â ïðåäñòàâëåíèè îòîáðàæàòüñÿ íå áóäóò
359
        modelString.append(tr("\t\t\t\t")); // ÷åòûðå òàáóëÿöèè - ïðèçíàê íîâîãî ñòîëáöà
364
        modelString.append(tr("\t\t\t\t")); // ÷åòûðå òàáóëÿöèè - ïðèçíàê íîâîãî ñòîëáöà
360
        modelString.append(parentItem->child(i)->text(1)); // âî âòîðîé êîëîíêå - ID êëàññà
365
        modelString.append(parentItem->child(i)->text(1)); // âî âòîðîé êîëîíêå - ID êëàññà
361
         modelString.append(tr("\n")); // êîíåö ñòðîêè
366
         modelString.append(tr("\n")); // êîíåö ñòðîêè
362
        if (parentItem->child(i)->childCount() > 0) { MainWindow::addChildsString(parentItem->child(i), level+1);}
367
        if (parentItem->child(i)->childCount() > 0) { MainWindow::addChildsString(parentItem->child(i), level+1);}
363
368
364
    }
369
    }
365
int i;
370
int i;
366
i++;
371
i++;
367
}
372
}
368
373
369
374
370
bool MainWindow::openDataBase(){
375
bool MainWindow::openDataBase(){
371
    QString errorString;
376
    QString errorString;
372
    sql = QSqlDatabase::addDatabase("QMYSQL");
377
    sql = QSqlDatabase::addDatabase("QMYSQL");
373
//    sql.setDatabaseName(tr("an_db"));
378
//    sql.setDatabaseName(tr("an_db"));
374
379
375
    // // // sql.setDatabaseName(tr("inventory"));
380
    // // // sql.setDatabaseName(tr("inventory"));
376
381
377
    sql.setDatabaseName(baseName);
382
    sql.setDatabaseName(baseName);
378
383
379
384
380
385
381
    // // // sql.setHostName(tr("localhost"));
386
    // // // sql.setHostName(tr("localhost"));
382
387
383
    sql.setHostName(hostName);
388
    sql.setHostName(hostName);
384
389
385
390
386
    // // // sql.setUserName(tr("an"));
391
    // // // sql.setUserName(tr("an"));
387
392
388
    sql.setUserName(userName);
393
    sql.setUserName(userName);
389
394
390
395
391
396
392
   // // //  sql.setPassword(tr("393939"));
397
   // // //  sql.setPassword(tr("393939"));
393
398
394
399
395
    sql.setPassword(password);
400
    sql.setPassword(password);
396
401
397
402
398
403
399
    bool ok;
404
    bool ok;
400
    ok = sql.open();
405
    ok = sql.open();
401
406
402
    /*
407
    /*
403
    if (!ok) {
408
    if (!ok) {
404
                                QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
409
                                QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
405
                                                                                this,                      // Ðîäèòåëüñêèé âèäæåò.
410
                                                                                this,                      // Ðîäèòåëüñêèé âèäæåò.
406
                                                                                QObject::tr("Database Error"),   // Çàãîëîâîê.
411
                                                                                QObject::tr("Database Error"),   // Çàãîëîâîê.
407
                                                                                sql.lastError().text() );         // Òåêñò ñîîáùåíèÿ.
412
                                                                                sql.lastError().text() );         // Òåêñò ñîîáùåíèÿ.
408

413

409

414

410
                            }
415
                            }
411

416

412
*/
417
*/
413
    if (!ok) {
418
    if (!ok) {
414
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
419
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
415
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
420
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
416
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
421
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
417
                                                                            sql.lastError().text());          // Òåêñò ñîîáùåíèÿ.
422
                                                                            sql.lastError().text());          // Òåêñò ñîîáùåíèÿ.
418
                     }
423
                     }
419
else {
424
else {
420
425
421
        QMessageBox::information( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
426
        QMessageBox::information( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
422
                                                        this,                      // Ðîäèòåëüñêèé âèäæåò.
427
                                                        this,                      // Ðîäèòåëüñêèé âèäæåò.
423
                                                        QObject::tr("Database Connect"),   // Çàãîëîâîê.
428
                                                        QObject::tr("Database Connect"),   // Çàãîëîâîê.
424
                                                        QObject::tr("Ñîåäèíåíèå ñ áàçîé äàííûõ óñïåøíî óñòàíîâëåíî."));         // Òåêñò ñîîáùåíèÿ.
429
                                                        QObject::tr("Ñîåäèíåíèå ñ áàçîé äàííûõ óñïåøíî óñòàíîâëåíî."));         // Òåêñò ñîîáùåíèÿ.
425
430
426
431
427
432
428
433
429
434
430
    }
435
    }
431
436
432
     return ok;
437
     return ok;
433
}
438
}
434
439
435
440
436
bool MainWindow::buildPreviewModel(QString modelName, QString rootClassID){
441
bool MainWindow::buildPreviewModel(QString modelName, QString rootClassID){
437
QSqlQuery q;
442
QSqlQuery q;
438
QString sql_str;
443
QString sql_str;
439
QString field_name_str;
444
QString field_name_str;
440
QString root_class_name;
445
QString root_class_name;
441
//bool ok;
446
//bool ok;
442
//int field_name;
447
//int field_name;
443
448
444
//ui->treeWidget->clear();
449
//ui->treeWidget->clear();
445
450
446
root_class_name = MainWindow::ClassName(rootClassID); // îïðåäåëÿåì èìÿ êëàññà
451
root_class_name = MainWindow::ClassName(rootClassID); // îïðåäåëÿåì èìÿ êëàññà
447
452
448
453
449
rootItem1 = new  QTreeWidgetItem(ui->treeWidget);
454
rootItem1 = new  QTreeWidgetItem(ui->treeWidget);
450
 root_items_list << rootItem1;
455
 root_items_list << rootItem1;
451
 rootItem1->setText(0, modelName);
456
 rootItem1->setText(0, modelName);
452
457
453
 rootItem1->setCheckState(0,Qt::Checked);
458
 rootItem1->setCheckState(0,Qt::Checked);
454
 rootItems.append(rootItem1);
459
 rootItems.append(rootItem1);
455
460
456
461
457
462
458
 rootItem2 = new  QTreeWidgetItem(rootItem1);
463
 rootItem2 = new  QTreeWidgetItem(rootItem1);
459
 rootItem2->setText(0, root_class_name);
464
 rootItem2->setText(0, root_class_name);
460
 rootItem2->setText(1, rootClassID);
465
 rootItem2->setText(1, rootClassID);
461
 rootItem2->setCheckState(0,Qt::Checked);
466
 rootItem2->setCheckState(0,Qt::Checked);
462
467
463
 addChildsItems(rootItem2, -1);
468
 addChildsItems(rootItem2, -1);
464
469
465
470
466
/*
471
/*
467

472

468
sql_str = tr("select * "
473
sql_str = tr("select * "
469
             " from DescriptionOfClasses where  DescriptionOfClasses.DefaultValue = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
474
             " from DescriptionOfClasses where  DescriptionOfClasses.DefaultValue = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
470
             );
475
             );
471
sql_str.append(rootClassID);
476
sql_str.append(rootClassID);
472

477

473
sql_str.append(tr("' and DescriptionOfClasses.FieldType = 'pointer' "));
478
sql_str.append(tr("' and DescriptionOfClasses.FieldType = 'pointer' "));
474

479

475
q.prepare(sql_str);
480
q.prepare(sql_str);
476

481

477
ok = q.exec();
482
ok = q.exec();
478
if (!ok) {
483
if (!ok) {
479
                        QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
484
                        QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
480
                                                                        this,                      // Ðîäèòåëüñêèé âèäæåò.
485
                                                                        this,                      // Ðîäèòåëüñêèé âèäæåò.
481
                                                                        QObject::tr("Database Error"),   // Çàãîëîâîê.
486
                                                                        QObject::tr("Database Error"),   // Çàãîëîâîê.
482
                                                                        q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
487
                                                                        q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
483
                 }
488
                 }
484
field_name = q.record().indexOf(tr("FieldName"));
489
field_name = q.record().indexOf(tr("FieldName"));
485
while(q.next()){
490
while(q.next()){
486

491

487
                field_name_str = q.value(field_name).toString();
492
                field_name_str = q.value(field_name).toString();
488

493

489
                }
494
                }
490

495

491

496

492

497

493

498

494
*/
499
*/
495
500
496
501
497
}
502
}
498
503
499
504
500
bool MainWindow::rebuildPreviewModel(QTreeWidgetItem* root_item, QString rootClassID, int row){
505
bool MainWindow::rebuildPreviewModel(QTreeWidgetItem* root_item, QString rootClassID, int row){
501
QSqlQuery q;
506
QSqlQuery q;
502
QString sql_str;
507
QString sql_str;
503
QString field_name_str;
508
QString field_name_str;
504
QString root_class_name;
509
QString root_class_name;
505
//bool ok;
510
//bool ok;
506
//int field_name;
511
//int field_name;
507
512
508
//ui->treeWidget->clear();
513
//ui->treeWidget->clear();
509
514
510
root_class_name = MainWindow::ClassName(rootClassID); // îïðåäåëÿåì èìÿ êëàññà
515
root_class_name = MainWindow::ClassName(rootClassID); // îïðåäåëÿåì èìÿ êëàññà
511
516
512
517
513
// rootItem1 = new  QTreeWidgetItem(ui->treeWidget);
518
// rootItem1 = new  QTreeWidgetItem(ui->treeWidget);
514
// root_items_list << rootItem1;
519
// root_items_list << rootItem1;
515
// rootItem1->setText(0, modelName);
520
// rootItem1->setText(0, modelName);
516
521
517
// rootItem1->setCheckState(0,Qt::Checked);
522
// rootItem1->setCheckState(0,Qt::Checked);
518
// rootItems.append(rootItem1);
523
// rootItems.append(rootItem1);
519
524
520
// root_item->removeChild(root_item->child(0)); // î÷èùàåì ñïèñîê äî÷åðíèõ êëàññîâ
525
// root_item->removeChild(root_item->child(0)); // î÷èùàåì ñïèñîê äî÷åðíèõ êëàññîâ
521
if (root_item->childCount()==0){ // íåò êîðíåâîãî êëàññà, ñîçäàäèì åãî
526
if (root_item->childCount()==0){ // íåò êîðíåâîãî êëàññà, ñîçäàäèì åãî
522
    QTreeWidgetItem* item_tmp;
527
    QTreeWidgetItem* item_tmp;
523
    item_tmp = new QTreeWidgetItem (root_item);
528
    item_tmp = new QTreeWidgetItem (root_item);
524
    item_tmp->setText(4, QVariant(row).toString());
529
    item_tmp->setText(4, QVariant(row).toString());
525
530
526
}
531
}
527
532
528
if (root_item->childCount()==1){ // êîðíåâîé êëàññ åñòü è îí ïóñòîé, î÷èùàòü åãî íå íàäî
533
if (root_item->childCount()==1){ // êîðíåâîé êëàññ åñòü è îí ïóñòîé, î÷èùàòü åãî íå íàäî
529
root_item->child(0)->setText(0, root_class_name);
534
root_item->child(0)->setText(0, root_class_name);
530
root_item->child(0)->setText(1, rootClassID);
535
root_item->child(0)->setText(1, rootClassID);
531
root_item->child(0)->setCheckState(0,Qt::Checked);
536
root_item->child(0)->setCheckState(0,Qt::Checked);
532
root_item->setText(4, QVariant(row).toString());
537
root_item->setText(4, QVariant(row).toString());
533
538
534
}
539
}
535
540
536
541
537
542
538
//delete rootItem2;
543
//delete rootItem2;
539
544
540
545
541
// rootItem2 = new  QTreeWidgetItem(rootItem1);
546
// rootItem2 = new  QTreeWidgetItem(rootItem1);
542
547
543
548
544
549
545
// rootItem2->setText(0, root_class_name);
550
// rootItem2->setText(0, root_class_name);
546
// rootItem2->setText(1, rootClassID);
551
// rootItem2->setText(1, rootClassID);
547
// rootItem2->setCheckState(0,Qt::Checked);
552
// rootItem2->setCheckState(0,Qt::Checked);
548
553
549
int child_count = root_item->child(0)->childCount();
554
int child_count = root_item->child(0)->childCount();
550
555
551
556
552
for (int i=0; i < child_count; i++){ // åñëè êîðíåâîé êëàññ åñòü è íå ïóñòîé, î÷èùàåì åãî
557
for (int i=0; i < child_count; i++){ // åñëè êîðíåâîé êëàññ åñòü è íå ïóñòîé, î÷èùàåì åãî
553
    root_item->child(0)->removeChild(root_item->child(0)->child(0));
558
    root_item->child(0)->removeChild(root_item->child(0)->child(0));
554
}
559
}
555
560
556
child_count = root_item->child(0)->childCount();
561
child_count = root_item->child(0)->childCount();
557
addChildsItems(root_item->child(0), row);
562
addChildsItems(root_item->child(0), row);
558
/*
563
/*
559
sql_str = tr("select * "
564
sql_str = tr("select * "
560
             " from DescriptionOfClasses where  DescriptionOfClasses.DefaultValue = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
565
             " from DescriptionOfClasses where  DescriptionOfClasses.DefaultValue = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
561
             );
566
             );
562
sql_str.append(rootClassID);
567
sql_str.append(rootClassID);
563

568

564
sql_str.append(tr("' and DescriptionOfClasses.FieldType = 'pointer' "));
569
sql_str.append(tr("' and DescriptionOfClasses.FieldType = 'pointer' "));
565

570

566
q.prepare(sql_str);
571
q.prepare(sql_str);
567

572

568
ok = q.exec();
573
ok = q.exec();
569
if (!ok) {
574
if (!ok) {
570
                        QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
575
                        QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
571
                                                                        this,                      // Ðîäèòåëüñêèé âèäæåò.
576
                                                                        this,                      // Ðîäèòåëüñêèé âèäæåò.
572
                                                                        QObject::tr("Database Error"),   // Çàãîëîâîê.
577
                                                                        QObject::tr("Database Error"),   // Çàãîëîâîê.
573
                                                                        q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
578
                                                                        q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
574
                 }
579
                 }
575
field_name = q.record().indexOf(tr("FieldName"));
580
field_name = q.record().indexOf(tr("FieldName"));
576
while(q.next()){
581
while(q.next()){
577

582

578
                field_name_str = q.value(field_name).toString();
583
                field_name_str = q.value(field_name).toString();
579

584

580
                }
585
                }
581

586

582
*/
587
*/
583
588
584
589
585
}
590
}
586
591
587
592
588
593
589
594
590
QString MainWindow::ClassName(QString class_id){ //âîçâðàùàåò èìÿ êëàññà ïî åãî ID
595
QString MainWindow::ClassName(QString class_id){ //âîçâðàùàåò èìÿ êëàññà ïî åãî ID
591
    QSqlQuery q;
596
    QSqlQuery q;
592
    QString sql_str;
597
    QString sql_str;
593
    QString class_name_str;
598
    QString class_name_str;
594
    bool ok;
599
    bool ok;
595
    int field_class_name;
600
    int field_class_name;
596
601
597
    sql_str = tr("select * "
602
    sql_str = tr("select * "
598
                 " from ListOfClasses where ListOfClasses.ID = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
603
                 " from ListOfClasses where ListOfClasses.ID = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
599
                 );
604
                 );
600
605
601
    sql_str.append(class_id);
606
    sql_str.append(class_id);
602
    sql_str.append(tr("' "));
607
    sql_str.append(tr("' "));
603
608
604
    q.prepare(sql_str);
609
    q.prepare(sql_str);
605
610
606
    ok = q.exec();
611
    ok = q.exec();
607
612
608
613
609
    if (!ok) {
614
    if (!ok) {
610
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
615
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
611
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
616
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
612
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
617
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
613
                                                                            q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
618
                                                                            q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
614
                     }
619
                     }
615
620
616
    field_class_name = q.record().indexOf(tr("ClassName"));
621
    field_class_name = q.record().indexOf(tr("ClassName"));
617
    while(q.next()){
622
    while(q.next()){
618
623
619
                    class_name_str = q.value(field_class_name).toString();
624
                    class_name_str = q.value(field_class_name).toString();
620
625
621
                    }
626
                    }
622
627
623
    return class_name_str;
628
    return class_name_str;
624
629
625
}
630
}
626
631
627
void MainWindow::addChildsItems(QTreeWidgetItem *perent_class_item, int row){ // äîáîâëÿåì ê ýëåìåíòó äåðåâà â êà÷åñòâå äî÷åðíèõ ýëåìåíòîâ âñå êëàññû, äëÿ êîòîðûõ êëàññ ýëåìåíòà ÿâëÿåòñÿ êîíòåéíåðîì
632
void MainWindow::addChildsItems(QTreeWidgetItem *perent_class_item, int row){ // äîáîâëÿåì ê ýëåìåíòó äåðåâà â êà÷åñòâå äî÷åðíèõ ýëåìåíòîâ âñå êëàññû, äëÿ êîòîðûõ êëàññ ýëåìåíòà ÿâëÿåòñÿ êîíòåéíåðîì
628
QStringList chields_list;
633
QStringList chields_list;
629
QString parent_ID;
634
QString parent_ID;
630
QTreeWidgetItem *Item_tmp;
635
QTreeWidgetItem *Item_tmp;
631
parent_ID = perent_class_item->text(1);
636
parent_ID = perent_class_item->text(1);
632
int chields_count, i;
637
int chields_count, i;
633
638
634
chields_list = MainWindow::classChields(parent_ID);
639
chields_list = MainWindow::classChields(parent_ID);
635
if(chields_list.isEmpty()) return;
640
if(chields_list.isEmpty()) return;
636
chields_count = chields_list.size();
641
chields_count = chields_list.size();
637
for (int l = 0; l < chields_count; ++l){
642
for (int l = 0; l < chields_count; ++l){
638
    QString chield_class_name, chield_id;
643
    QString chield_class_name, chield_id;
639
    chield_id = chields_list.at(l);
644
    chield_id = chields_list.at(l);
640
    chield_class_name = MainWindow::ClassName(chield_id);
645
    chield_class_name = MainWindow::ClassName(chield_id);
641
    Item_tmp = new QTreeWidgetItem(perent_class_item);
646
    Item_tmp = new QTreeWidgetItem(perent_class_item);
642
    Item_tmp->setText(0, chield_class_name);
647
    Item_tmp->setText(0, chield_class_name);
643
    Item_tmp->setText(1, chield_id);
648
    Item_tmp->setText(1, chield_id);
644
    Item_tmp->setCheckState(0, Qt::Checked);
649
    Item_tmp->setCheckState(0, Qt::Checked);
645
    Item_tmp->setText(4, QVariant(row).toString());
650
    Item_tmp->setText(4, QVariant(row).toString());
646
    MainWindow::addChildsItems(Item_tmp, row);
651
    MainWindow::addChildsItems(Item_tmp, row);
647
}
652
}
648
653
649
i++;
654
i++;
650
655
651
}
656
}
652
657
653
658
654
/********************************************************
659
/********************************************************
655
* Ôóíêöèÿ âîçâðàùàåò ñïèñîê "äî÷åðíèõ" êëàññîâ
660
* Ôóíêöèÿ âîçâðàùàåò ñïèñîê "äî÷åðíèõ" êëàññîâ
656
*
661
*
657
*
662
*
658
*
663
*
659
********************************************************/
664
********************************************************/
660
665
661
QStringList MainWindow::classChields(QString class_id){
666
QStringList MainWindow::classChields(QString class_id){
662
   // QMap<QString, QString> map;
667
   // QMap<QString, QString> map;
663
   // TClass class_tmp;
668
   // TClass class_tmp;
664
   // QList <TClass> chields_class_list; // ñïèñîê äî÷åðíèõ êëàññîâ
669
   // QList <TClass> chields_class_list; // ñïèñîê äî÷åðíèõ êëàññîâ
665
    QStringList result;
670
    QStringList result;
666
    QSqlQuery q;
671
    QSqlQuery q;
667
    QString sql_str;
672
    QString sql_str;
668
    QString classIdentifer_str; // â ýòîì ïîëå ëåæèò èäåíòèôèêàòîð êëàññà-êîíòåéíåðà
673
    QString classIdentifer_str; // â ýòîì ïîëå ëåæèò èäåíòèôèêàòîð êëàññà-êîíòåéíåðà
669
    QString field_id_str;
674
    QString field_id_str;
670
    bool ok;
675
    bool ok;
671
    int field_classIdentifer;
676
    int field_classIdentifer;
672
    sql_str = tr("select * "
677
    sql_str = tr("select * "
673
                 " from DescriptionOfClasses where  DescriptionOfClasses.DefaultValue = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
678
                 " from DescriptionOfClasses where  DescriptionOfClasses.DefaultValue = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
674
                 );
679
                 );
675
    sql_str.append(class_id);
680
    sql_str.append(class_id);
676
681
677
    sql_str.append(tr("' and DescriptionOfClasses.FieldType = 'pointer' "));
682
    sql_str.append(tr("' and DescriptionOfClasses.FieldType = 'pointer' "));
678
683
679
    q.prepare(sql_str);
684
    q.prepare(sql_str);
680
685
681
    ok = q.exec();
686
    ok = q.exec();
682
    if (!ok) {
687
    if (!ok) {
683
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
688
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
684
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
689
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
685
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
690
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
686
                                                                            q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
691
                                                                            q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
687
                     }
692
                     }
688
    field_classIdentifer = q.record().indexOf(tr("ClassIdentifer"));
693
    field_classIdentifer = q.record().indexOf(tr("ClassIdentifer"));
689
      while(q.next()){
694
      while(q.next()){
690
695
691
                    classIdentifer_str = q.value(field_classIdentifer).toString();
696
                    classIdentifer_str = q.value(field_classIdentifer).toString();
692
                    result.append(classIdentifer_str);
697
                    result.append(classIdentifer_str);
693
                    }
698
                    }
694
699
695
    return result;
700
    return result;
696
701
697
  }
702
  }
698
703
699
704
700
QMap <QString, QString> MainWindow::getClassList(){ // ïîëó÷àåì ñïèñîê êëàññîâ
705
QMap <QString, QString> MainWindow::getClassList(){ // ïîëó÷àåì ñïèñîê êëàññîâ
701
QMap <QString, QString> result_map;
706
QMap <QString, QString> result_map;
702
QSqlQuery q;
707
QSqlQuery q;
703
QString sql_str;
708
QString sql_str;
704
QString class_name_str, class_id_str;
709
QString class_name_str, class_id_str;
705
710
706
int field_class_id, field_class_name;
711
int field_class_id, field_class_name;
707
bool ok;
712
bool ok;
708
sql_str = tr("select * "
713
sql_str = tr("select * "
709
             " from ListOfClasses "       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
714
             " from ListOfClasses "       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
710
             );
715
             );
711
 q.prepare(sql_str);
716
 q.prepare(sql_str);
712
 ok = q.exec();
717
 ok = q.exec();
713
 if (!ok) {
718
 if (!ok) {
714
                         QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
719
                         QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
715
                                                                         this,                      // Ðîäèòåëüñêèé âèäæåò.
720
                                                                         this,                      // Ðîäèòåëüñêèé âèäæåò.
716
                                                                         QObject::tr("Database Error"),   // Çàãîëîâîê.
721
                                                                         QObject::tr("Database Error"),   // Çàãîëîâîê.
717
                                                                         q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
722
                                                                         q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
718
                         return result_map; // åñëè îøèáêà - âîçâðàùàåì ïóñòîé ñïèñîê
723
                         return result_map; // åñëè îøèáêà - âîçâðàùàåì ïóñòîé ñïèñîê
719
                  }
724
                  }
720
field_class_id = q.record().indexOf(tr("ID"));
725
field_class_id = q.record().indexOf(tr("ID"));
721
field_class_name = q.record().indexOf(tr("ClassName"));
726
field_class_name = q.record().indexOf(tr("ClassName"));
722
727
723
while(q.next()){
728
while(q.next()){
724
729
725
                class_name_str = q.value(field_class_name).toString();
730
                class_name_str = q.value(field_class_name).toString();
726
                class_id_str = q.value(field_class_id).toString();
731
                class_id_str = q.value(field_class_id).toString();
727
                result_map[class_id_str] = class_name_str;
732
                result_map[class_id_str] = class_name_str;
728
                }
733
                }
729
 return result_map;
734
 return result_map;
730
}
735
}
731
736
732
737
733
738
734
739
735
740
736
void MainWindow::initComboBox(){
741
void MainWindow::initComboBox(){
737
742
738
743
739
    QStringList classesNameList;
744
    QStringList classesNameList;
740
    QStringList classesID_list;
745
    QStringList classesID_list;
741
    QStringList tmp_stringList;
746
    QStringList tmp_stringList;
742
747
743
748
744
749
745
    QString tmp_str;
750
    QString tmp_str;
746
751
747
    class_list_map = MainWindow::getClassList();
752
    class_list_map = MainWindow::getClassList();
748
    classesID_list = class_list_map.keys();
753
    classesID_list = class_list_map.keys();
749
    classesNameList = class_list_map.values();
754
    classesNameList = class_list_map.values();
750
    QMapIterator<QString, QString> interator(class_list_map);
755
    QMapIterator<QString, QString> interator(class_list_map);
751
//    ui->comboBox->addItems(classesID_list);
756
//    ui->comboBox->addItems(classesID_list);
752
  //  ui->comboBox->addItems(classesNameList);
757
  //  ui->comboBox->addItems(classesNameList);
753
    while (interator.hasNext()) {
758
    while (interator.hasNext()) {
754
         interator.next();
759
         interator.next();
755
         tmp_str =  interator.value();
760
         tmp_str =  interator.value();
756
         tmp_str.append(tr(" \t(ID="));
761
         tmp_str.append(tr(" \t(ID="));
757
         tmp_str.append(interator.key());
762
         tmp_str.append(interator.key());
758
         tmp_str.append(tr(")"));
763
         tmp_str.append(tr(")"));
759
         tmp_stringList << tmp_str;
764
         tmp_stringList << tmp_str;
760
765
761
     }
766
     }
762
//    int count = ui->comboBox->count();
767
//    int count = ui->comboBox->count();
763
768
764
    ui->comboBox->clear();
769
    ui->comboBox->clear();
765
    ui->comboBox->addItems(tmp_stringList);
770
    ui->comboBox->addItems(tmp_stringList);
766
771
767
772
768
}
773
}
769
774
770
775
771
void MainWindow::on_comboBox_currentIndexChanged( int index ){
776
void MainWindow::on_comboBox_currentIndexChanged( int index ){
772
QStringList classesNameList;
777
QStringList classesNameList;
773
QStringList classesID_list;
778
QStringList classesID_list;
774
QString ID_str;
779
QString ID_str;
775
if (index == -1) return;
780
if (index == -1) return;
776
if (!comboBox_slot_enable) return; // èíäåêñ ïîìåíÿëà ïðîãðàììà, îí íå áûë èçìåíåí âðó÷íóþ, âûõîäèì
781
if (!comboBox_slot_enable) return; // èíäåêñ ïîìåíÿëà ïðîãðàììà, îí íå áûë èçìåíåí âðó÷íóþ, âûõîäèì
777
int row;
782
int row;
778
783
779
classesID_list = class_list_map.keys();
784
classesID_list = class_list_map.keys();
780
classesNameList = class_list_map.values();
785
classesNameList = class_list_map.values();
781
ID_str =  classesID_list[index];
786
ID_str =  classesID_list[index];
782
ui->label->setText(ID_str);
787
ui->label->setText(ID_str);
783
if (root_items_list.indexOf(ui->treeWidget->currentItem()) != -1)
788
if (root_items_list.indexOf(ui->treeWidget->currentItem()) != -1)
784
{
789
{
785
    row = QVariant(ui->treeWidget->currentItem()->text(4)).toInt();
790
    row = QVariant(ui->treeWidget->currentItem()->text(4)).toInt();
786
    model_is_build = false; // ÷òîáû íå âûçûâàëîñü ñîáûòèå on_treeWidget_itemChanged
791
    model_is_build = false; // ÷òîáû íå âûçûâàëîñü ñîáûòèå on_treeWidget_itemChanged
787
    rebuildPreviewModel(ui->treeWidget->currentItem(), ID_str, row);
792
    rebuildPreviewModel(ui->treeWidget->currentItem(), ID_str, row);
788
    model_is_build = true; // òåïåðü ïóñòü âûçûâàåòñÿ
793
    model_is_build = true; // òåïåðü ïóñòü âûçûâàåòñÿ
789
    QString mdl_str = MainWindow::creatModelString(ui->treeWidget->currentItem()); //
794
    QString mdl_str = MainWindow::creatModelString(ui->treeWidget->currentItem()); //
790
    model_for_ListModelsTable->setData(model_for_ListModelsTable->index(row, 2), QVariant(mdl_str));
795
    model_for_ListModelsTable->setData(model_for_ListModelsTable->index(row, 2), QVariant(mdl_str));
791
}
796
}
792
    getDatabaseData();
797
    getDatabaseData();
793
798
794
799
795
}
800
}
796
801
797
void MainWindow::on_treeWidget_itemChanged ( QTreeWidgetItem * item, int column ){
802
void MainWindow::on_treeWidget_itemChanged ( QTreeWidgetItem * item, int column ){
798
    int i;
803
    int i;
799
    i++;
804
    i++;
800
    QTreeWidgetItem * item_tmp;
805
    QTreeWidgetItem * item_tmp;
801
    QString mdl_str;
806
    QString mdl_str;
802
    QString row; // íîìåð ñòðîêè â òàáëèöå ìîäåëåé, ñîîòâåòñòâóþùèé èçìåíåííîé ìîäåëå
807
    QString row; // íîìåð ñòðîêè â òàáëèöå ìîäåëåé, ñîîòâåòñòâóþùèé èçìåíåííîé ìîäåëå
803
    QList <QTreeWidgetItem *> mdl_itm_list;
808
    QList <QTreeWidgetItem *> mdl_itm_list;
804
    QList <int> rows_list;
809
    QList <int> rows_list;
805
810
806
811
807
    if ((column) == 0 && (model_is_build)) {
812
    if ((column) == 0 && (model_is_build)) {
808
    // if (!model_is_build) return; // ìîäåëü åù¸ íå ïîñòðîåíà
813
    // if (!model_is_build) return; // ìîäåëü åù¸ íå ïîñòðîåíà
809
814
810
    mdl_itm_list = models_items.values();
815
    mdl_itm_list = models_items.values();
811
    rows_list =  models_items.keys();
816
    rows_list =  models_items.keys();
812
    row= item->text(4);
817
    row= item->text(4);
813
818
814
819
815
    if ( mdl_itm_list.indexOf(item) != -1){ // èçìåí¸í êîðíåâîé èòåì (ñàìà ìîäåëü)
820
    if ( mdl_itm_list.indexOf(item) != -1){ // èçìåí¸í êîðíåâîé èòåì (ñàìà ìîäåëü)
816
        if (item->checkState(0)) model_for_ListModelsTable->setData(model_for_ListModelsTable->index(QVariant(row).toInt(), 3), QVariant(1));
821
        if (item->checkState(0)) model_for_ListModelsTable->setData(model_for_ListModelsTable->index(QVariant(row).toInt(), 3), QVariant(1));
817
        else model_for_ListModelsTable->setData(model_for_ListModelsTable->index(QVariant(row).toInt(), 3), QVariant(0));
822
        else model_for_ListModelsTable->setData(model_for_ListModelsTable->index(QVariant(row).toInt(), 3), QVariant(0));
818
        }
823
        }
819
824
820
825
821
826
822
827
823
    if (!row.isEmpty()){
828
    if (!row.isEmpty()){
824
829
825
830
826
        int row_int;
831
        int row_int;
827
    row_int = QVariant(row).toInt();
832
    row_int = QVariant(row).toInt();
828
     if (rows_list.indexOf(row_int) != -1)
833
     if (rows_list.indexOf(row_int) != -1)
829
        {
834
        {
830
            item_tmp = models_items[row_int];
835
            item_tmp = models_items[row_int];
831
            mdl_str = MainWindow::creatModelString(item_tmp);
836
            mdl_str = MainWindow::creatModelString(item_tmp);
832
            model_for_ListModelsTable->setData(model_for_ListModelsTable->index(row_int, 2), QVariant(mdl_str));
837
            model_for_ListModelsTable->setData(model_for_ListModelsTable->index(row_int, 2), QVariant(mdl_str));
833
        }
838
        }
834
839
835
840
836
    }
841
    }
837
842
838
843
839
}
844
}
840
845
841
/*
846
/*
842
    QTreeWidgetItem * item_tmp;
847
    QTreeWidgetItem * item_tmp;
843
    item_tmp = item;
848
    item_tmp = item;
844
    while (item_tmp ){
849
    while (item_tmp ){
845
        item_tmp = item_tmp->parent();
850
        item_tmp = item_tmp->parent();
846
    }
851
    }
847
  */
852
  */
848
    if ((column) == 0 && (model_is_build)) getDatabaseData();
853
    if ((column) == 0 && (model_is_build)) getDatabaseData();
849
854
850
855
851
}
856
}
852
857
853
858
854
void MainWindow::on_treeWidget_itemClicked ( QTreeWidgetItem * item, int column ){
859
void MainWindow::on_treeWidget_itemClicked ( QTreeWidgetItem * item, int column ){
855
    int i;
860
    int i;
856
    i++;
861
    i++;
857
    if (root_items_list.indexOf(item) != -1) { // Åñëè âûáðàííûé èòåì ñîäåðæèò íàçâàíèå ìîäåëè
862
    if (root_items_list.indexOf(item) != -1) { // Åñëè âûáðàííûé èòåì ñîäåðæèò íàçâàíèå ìîäåëè
858
        QStringList classesNameList;
863
        QStringList classesNameList;
859
        QStringList classesID_list;
864
        QStringList classesID_list;
860
865
861
        ui->pushButton_9->setEnabled(false);
866
        ui->pushButton_9->setEnabled(false);
862
        ui->pushButton_10->setEnabled(false);
867
        ui->pushButton_10->setEnabled(false);
863
        ui->pushButton_11->setEnabled(false);
868
        ui->pushButton_11->setEnabled(false);
864
        ui->pushButton_12->setEnabled(false);
869
        ui->pushButton_12->setEnabled(false);
865
     //   ui->tableView->reset();
870
     //   ui->tableView->reset();
866
     //   MainWindow::filtr_model->clear();
871
     //   MainWindow::filtr_model->clear();
867
          disconnect(filter_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(on_filter_model_dataChanged(QModelIndex,QModelIndex)));
872
          disconnect(filter_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(on_filter_model_dataChanged(QModelIndex,QModelIndex)));
868
        delete filter_model;
873
        delete filter_model;
869
874
870
        filter_model = new QSqlTableModel();
875
        filter_model = new QSqlTableModel();
871
       /// filter_model = new MyModel();
876
       /// filter_model = new MyModel();
872
    filter_model->setEditStrategy(QSqlTableModel::OnManualSubmit);
877
    filter_model->setEditStrategy(QSqlTableModel::OnManualSubmit);
873
878
874
        connect(filter_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(on_filter_model_dataChanged(QModelIndex,QModelIndex)));
879
        connect(filter_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(on_filter_model_dataChanged(QModelIndex,QModelIndex)));
875
        int index;
880
        int index;
876
        classesID_list = class_list_map.keys();
881
        classesID_list = class_list_map.keys();
877
        classesNameList = class_list_map.values();
882
        classesNameList = class_list_map.values();
878
        if (item->childCount()>0) index = classesID_list.indexOf(item->child(0)->text(1)); // åñëè ìîäåëü íå ïóñòàÿ, óçíàåì êîðíåâîé êëàññ
883
        if (item->childCount()>0) index = classesID_list.indexOf(item->child(0)->text(1)); // åñëè ìîäåëü íå ïóñòàÿ, óçíàåì êîðíåâîé êëàññ
879
        else { // åñëè ïóñòàÿ
884
        else { // åñëè ïóñòàÿ
880
        ui->comboBox->setEnabled(true);
885
        ui->comboBox->setEnabled(true);
881
        comboBox_slot_enable = true;
886
        comboBox_slot_enable = true;
882
        return;
887
        return;
883
888
884
        }
889
        }
885
        comboBox_slot_enable = false; // ÷òîáû ñëîò comboBox íå ìåíÿë ñòðîêó ìîäåëè
890
        comboBox_slot_enable = false; // ÷òîáû ñëîò comboBox íå ìåíÿë ñòðîêó ìîäåëè
886
        if (index != -1) ui->comboBox->setCurrentIndex(index);
891
        if (index != -1) ui->comboBox->setCurrentIndex(index);
887
        comboBox_slot_enable = true;
892
        comboBox_slot_enable = true;
888
        ui->comboBox->setEnabled(true);
893
        ui->comboBox->setEnabled(true);
889
894
890
895
891
    }
896
    }
892
  //  if ((rootItem1) == (item) ) ui->comboBox->setEnabled(true);
897
  //  if ((rootItem1) == (item) ) ui->comboBox->setEnabled(true);
893
else // âûáðàííûé èòåì ñîäåðæèò íàçâàíèå êëàññà
898
else // âûáðàííûé èòåì ñîäåðæèò íàçâàíèå êëàññà
894
    {
899
    {
895
        QString class_id;
900
        QString class_id;
896
        QString model_id;
901
        QString model_id;
897
        QString filtr_str;
902
        QString filtr_str;
898
        QString inctance;
903
        QString inctance;
899
        QStringList conditionList;
904
        QStringList conditionList;
900
        class_id = item->text(1);
905
        class_id = item->text(1);
901
        model_id = item->text(6);
906
        model_id = item->text(6);
902
        inctance = MainWindow::getClassInctance(class_id);
907
        inctance = MainWindow::getClassInctance(class_id);
903
908
904
        filtr_str = tr("`Model_ID` = ");
909
        filtr_str = tr("`Model_ID` = ");
905
        filtr_str.append(model_id);
910
        filtr_str.append(model_id);
906
        filtr_str.append(tr(" AND `Class_ID` = "));
911
        filtr_str.append(tr(" AND `Class_ID` = "));
907
        filtr_str.append(class_id);
912
        filtr_str.append(class_id);
908
       // filtr_str.append(tr("`"));
913
       // filtr_str.append(tr("`"));
909
914
910
        disconnect(filter_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(on_filter_model_dataChanged(QModelIndex,QModelIndex)));
915
        disconnect(filter_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(on_filter_model_dataChanged(QModelIndex,QModelIndex)));
911
        delete filter_model;
916
        delete filter_model;
912
  ///      filter_model = new MyModel();
917
  ///      filter_model = new MyModel();
913
918
914
        filter_model = new QSqlTableModel();
919
        filter_model = new QSqlTableModel();
915
       filter_model->setEditStrategy(QSqlTableModel::OnManualSubmit);
920
       filter_model->setEditStrategy(QSqlTableModel::OnManualSubmit);
916
921
917
        connect(filter_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(on_filter_model_dataChanged(QModelIndex,QModelIndex)));
922
        connect(filter_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(on_filter_model_dataChanged(QModelIndex,QModelIndex)));
918
        filter_model->setTable(tr("Filters"));
923
        filter_model->setTable(tr("Filters"));
919
        filter_model->setFilter(filtr_str);
924
        filter_model->setFilter(filtr_str);
920
925
921
926
922
927
923
        filter_model->select();
928
        filter_model->select();
924
929
925
        filter_model->sort(0,Qt::AscendingOrder);
930
        filter_model->sort(0,Qt::AscendingOrder);
926
931
927
        ui->tableView_3->setModel(filter_model);
932
        ui->tableView_3->setModel(filter_model);
928
933
929
934
930
        ui->tableView_3->hideColumn(0);
935
        ui->tableView_3->hideColumn(0);
931
        ui->tableView_3->hideColumn(1);
936
        ui->tableView_3->hideColumn(1);
932
        ui->tableView_3->hideColumn(2);
937
        ui->tableView_3->hideColumn(2);
933
938
934
939
935
        filterSpinDelegate.setClassID(class_id);
940
        filterSpinDelegate.setClassID(class_id);
936
        filterSpinDelegate.getItems();
941
        filterSpinDelegate.getItems();
937
        ui->tableView_3->setItemDelegateForColumn(4, &filterSpinDelegate);
942
        ui->tableView_3->setItemDelegateForColumn(4, &filterSpinDelegate);
938
943
939
       // ui->tableView_3->setItemDelegate();
944
       // ui->tableView_3->setItemDelegate();
940
        conditionList <<"" << "and" << "or" << "(" << "and (" << "or (";
945
        conditionList <<"" << "and" << "or" << "(" << "and (" << "or (";
941
        filterConditionDelegate.setItems(conditionList);
946
        filterConditionDelegate.setItems(conditionList);
942
        ui->tableView_3->setItemDelegateForColumn(3, &filterConditionDelegate);
947
        ui->tableView_3->setItemDelegateForColumn(3, &filterConditionDelegate);
943
948
944
        conditionList.clear();
949
        conditionList.clear();
945
        conditionList <<"" << "=" << "<" << ">" << "IS NULL" << "IS NOT NULL";
950
        conditionList <<"" << "=" << "<" << ">" << "IS NULL" << "IS NOT NULL";
946
        filterConditionDelegate_1.setItems(conditionList);
951
        filterConditionDelegate_1.setItems(conditionList);
947
        ui->tableView_3->setItemDelegateForColumn(5, &filterConditionDelegate_1);
952
        ui->tableView_3->setItemDelegateForColumn(5, &filterConditionDelegate_1);
948
953
949
954
950
955
951
956
952
-
 
953
-
 
-
 
957
        conditionList.clear();
-
 
958
        conditionList <<"" << ")";
-
 
959
        filterConditionDelegate_2.setItems(conditionList);
-
 
960
        ui->tableView_3->setItemDelegateForColumn(7, &filterConditionDelegate_2);
954
961
955
        ui->tableView_3->setItemDelegateForColumn(6, &filterValueDelegate);
962
        ui->tableView_3->setItemDelegateForColumn(6, &filterValueDelegate);
956
963
957
964
958
965
959
966
960
        ui->pushButton_9->setEnabled(true);
967
        ui->pushButton_9->setEnabled(true);
961
        ui->pushButton_10->setEnabled(true);
968
        ui->pushButton_10->setEnabled(true);
962
969
963
        ui->comboBox->setEnabled(false);
970
        ui->comboBox->setEnabled(false);
964
971
965
972
966
    }
973
    }
967
}
974
}
968
975
969
QMap <QString, QString> MainWindow::getFieldsList(QString class_id){ // ïîëó÷àåì ñïèñîê ïîëåé êëàññà
976
QMap <QString, QString> MainWindow::getFieldsList(QString class_id){ // ïîëó÷àåì ñïèñîê ïîëåé êëàññà
970
977
971
}
978
}
972
979
973
980
974
void MainWindow::initListModelsTablle(){
981
void MainWindow::initListModelsTablle(){
975
    model_for_ListModelsTable = new QSqlTableModel();
982
    model_for_ListModelsTable = new QSqlTableModel();
976
983
977
    model_for_ListModelsTable->setTable(tr("ListOfModels"));
984
    model_for_ListModelsTable->setTable(tr("ListOfModels"));
978
 //   model_for_ListModelsTable->setEditStrategy(QSqlTableModel::OnFieldChange);
985
 //   model_for_ListModelsTable->setEditStrategy(QSqlTableModel::OnFieldChange);
979
    model_for_ListModelsTable->setEditStrategy(QSqlTableModel::OnManualSubmit);
986
    model_for_ListModelsTable->setEditStrategy(QSqlTableModel::OnManualSubmit);
980
    ui->tableView_2->setModel(model_for_ListModelsTable);
987
    ui->tableView_2->setModel(model_for_ListModelsTable);
981
988
982
    model_for_ListModelsTable->select();
989
    model_for_ListModelsTable->select();
983
990
984
991
985
    ui->treeWidget->hideColumn(1);
992
    ui->treeWidget->hideColumn(1);
986
    ui->treeWidget->hideColumn(2);
993
    ui->treeWidget->hideColumn(2);
987
    ui->treeWidget->hideColumn(3);
994
    ui->treeWidget->hideColumn(3);
988
    ui->treeWidget->hideColumn(4);
995
    ui->treeWidget->hideColumn(4);
989
//    ui->treeWidget->hideColumn(5);
996
//    ui->treeWidget->hideColumn(5);
990
    ui->treeWidget->hideColumn(6);
997
    ui->treeWidget->hideColumn(6);
991
998
992
    ui->tableView_2->hideColumn(0);
999
    ui->tableView_2->hideColumn(0);
993
    ui->tableView_2->hideColumn(2);
1000
    ui->tableView_2->hideColumn(2);
994
    ui->tableView_2->hideColumn(3);
1001
    ui->tableView_2->hideColumn(3);
995
    ui->tableView_2->hideColumn(4);
1002
    ui->tableView_2->hideColumn(4);
996
1003
997
    ui->tableView_2->resizeColumnsToContents();
1004
    ui->tableView_2->resizeColumnsToContents();
998
    ui->tableView_2->setAlternatingRowColors(true);
1005
    ui->tableView_2->setAlternatingRowColors(true);
999
1006
1000
    ui->pushButton_7->setEnabled(false);
1007
    ui->pushButton_7->setEnabled(false);
1001
    ui->pushButton_8->setEnabled(false);
1008
    ui->pushButton_8->setEnabled(false);
1002
1009
1003
1010
1004
}
1011
}
-
 
1012
-
 
1013
void MainWindow::buildReport(bool advanced){
-
 
1014
-
 
1015
  //  QTreeWidgetItem * hitm;
-
 
1016
-
 
1017
  //   hitm = ui->treeWidget_2->headerItem();
-
 
1018
-
 
1019
  //   int count = root_items_list.count();
-
 
1020
-
 
1021
    //int count = ui->treeWidget_2->rootIndex();
-
 
1022
-
 
1023
    doc.clear();//î÷èùàåì äîêóìåíò
-
 
1024
-
 
1025
    int list_count;
-
 
1026
    if (rootItems.isEmpty()) return;
-
 
1027
-
 
1028
-
 
1029
-
 
1030
    list_count = rootItems.count();
-
 
1031
-
 
1032
    for (int i=0; i < list_count; i++){
-
 
1033
-
 
1034
       getReport(rootItems.at(i), advanced);
-
 
1035
-
 
1036
    }
-
 
1037
 (bool)QTextDocumentWriter("test.odt").write(&doc);
-
 
1038
}
-
 
1039
-
 
1040
-
 
1041
void MainWindow::getReport(QTreeWidgetItem * model_item, bool advanced){ // ñîçäàåò îò÷åò äëÿ êîíêðåòíîé ìîäåëè
-
 
1042
-
 
1043
-
 
1044
 //   QTextDocument doc;
-
 
1045
 //   QTextCursor cursor(&doc);
-
 
1046
    QTextCharFormat char_fmt;
-
 
1047
    bool ok;
-
 
1048
-
 
1049
    /**************
-
 
1050

-
 
1051
    //  char_fmt.setBackground(Qt::red);
-
 
1052
    cursor.insertText(tr("Ì1\n"),char_fmt);
-
 
1053
    QImage img;
-
 
1054
    ok = img.load("./hdd5.png");
-
 
1055
     doc.addResource(QTextDocument::ImageResource, QUrl("myimage"), img);
-
 
1056
     cursor.insertImage("myimage");
-
 
1057
    cursor.insertText(tr("Æåñòêèé äèñê\n"),char_fmt);
-
 
1058

-
 
1059
    (bool)QTextDocumentWriter("test.odt").write(&doc);
-
 
1060
    ***************/
-
 
1061
-
 
1062
    QString model_name;
-
 
1063
    QString rootClassID;
-
 
1064
    QString rootClassInctance;
-
 
1065
    QFont font;
-
 
1066
-
 
1067
    model_name = model_item->text(0);
-
 
1068
    if (model_item->checkState(0) == false) return; // ìîäåëü íå âûäåëåíà äëÿ îòîáðàæåíèÿ
-
 
1069
-
 
1070
-
 
1071
    if (!(model_item->childCount() > 0)) return; // ìîäåëü ïóñòà (íå ñîäåðæèò êëàññîâ)
-
 
1072
-
 
1073
    rootClassID = model_item->child(0)->text(1);
-
 
1074
    rootClassInctance = getClassInctance(rootClassID);
-
 
1075
-
 
1076
    cursor->insertText(model_name);
-
 
1077
    cursor->insertText(tr("\n"));
-
 
1078
-
 
1079
    if (model_item->child(0)->checkState(0)) // åñëè â ìîäåëè êîðíåâîé êëàññ âûáðàí äëÿ îòîáðàæåíèÿ (ñòîèò ãàëî÷êà), òî
-
 
1080
        {
-
 
1081
         /////   QTreeWidgetItem * item_tmp;
-
 
1082
       /////     item_tmp = new QTreeWidgetItem(item);                  // â äåðåâå, îòîáðàæàþùåì îáúåêòû êëàññîâ, ñîçäàåì íîâûé óçåë
-
 
1083
       /////     item_tmp->setText(0, model_item->child(0)->text(0));    // ñ íàçâàíèåì êëàññà
-
 
1084
-
 
1085
            //showClassObjects(item_tmp, model_item->child(0));  // è âûâîäèì âñå îáúåêòû äàííîãî êëàññà
-
 
1086
-
 
1087
            ///// showObjects(item_tmp, model_item->child(0), tr(""));
-
 
1088
        printChild(model_item->child(0), tr(""), advanced, 1);
-
 
1089
        }
-
 
1090
-
 
1091
-
 
1092
-
 
1093
-
 
1094
}
-
 
1095
-
 
1096
void MainWindow::printChild(QTreeWidgetItem * model_item, QString filtr, bool advanced, int pos){//â ðàïîðò äîáàâëÿåì äî÷åðíèå êëàññû
-
 
1097
    QString classID; // èäåíòèôèêàòîð êëàññà
-
 
1098
    QString parentClassID; // èäåíòèôèêàòîð ðîäèòåëüñêîãî êëàññà
-
 
1099
    QString pointerField; // èìÿ ïîëÿ-óêàçàòåëÿ íà ðîäèòåëüñêèé êëàññ
-
 
1100
    QString inctance; // èìÿ òàáëèöû, õðàíèëèùà
-
 
1101
    QString className; // èìÿ êëàññà
-
 
1102
    QString modelID; // èäåíòèôèêàòîð ìîäåëè
-
 
1103
    QString add_filtr; // äîïîëíèòåëüíûé ôèëüòð
-
 
1104
    int field_ID;
-
 
1105
    int icon_field_index;
-
 
1106
    bool filtr_empty;
-
 
1107
    bool ok;
-
 
1108
    QSqlQuery q;
-
 
1109
    QString sql_str;
-
 
1110
    QString str_tmp;
-
 
1111
    QTreeWidgetItem * title_item;
-
 
1112
    QFont font;
-
 
1113
    QIcon icon;
-
 
1114
-
 
1115
    font.setBold(true);
-
 
1116
    filtr_empty = filtr.isEmpty();
-
 
1117
-
 
1118
    classID = model_item->text(1);
-
 
1119
    modelID = model_item->text(6);
-
 
1120
    add_filtr = MainWindow::getFiltrString(modelID, classID);
-
 
1121
-
 
1122
-
 
1123
    icon = model_item->icon(0);
-
 
1124
-
 
1125
    parentClassID = model_item->parent()->text(1);
-
 
1126
-
 
1127
    pointerField = getPointerFieldName(parentClassID, classID);
-
 
1128
-
 
1129
    className = model_item->text(0);
-
 
1130
    inctance = getClassInctance(classID);
-
 
1131
-
 
1132
    if  (!model_item->checkState(0)) return;
-
 
1133
-
 
1134
-
 
1135
    cursor->insertText(className);
-
 
1136
    cursor->insertText(tr("\n"));
-
 
1137
-
 
1138
    sql_str = tr("select * "
-
 
1139
                 " from "       //íàõîäèì âñå îáúåêòû êëàññà â òàáëèöå - õðàíèëèùå îáúåêòîâ êëàññà
-
 
1140
                 );
-
 
1141
    sql_str.append(inctance);
-
 
1142
-
 
1143
-
 
1144
    if (filtr.isEmpty() && (!add_filtr.isEmpty())) // ôèëüòð ïóñòîé, äîïîëíèòåëüíûé ôèëüòð íå ïóñòîé
-
 
1145
                            {
-
 
1146
                                filtr.append(tr ("where "));
-
 
1147
                                filtr.append(add_filtr);
-
 
1148
                             }
-
 
1149
-
 
1150
-
 
1151
    if (!filtr.isEmpty())   { // åñëè ôèëüòð íå ïóñòîé
-
 
1152
                                 sql_str.append(tr(" "));
-
 
1153
                                 sql_str.append(filtr); // äîáàâëÿåì â çàïðîñ ôèëüòð
-
 
1154
                            }
-
 
1155
-
 
1156
    q.prepare(sql_str);
-
 
1157
-
 
1158
    ok = q.exec();
-
 
1159
-
 
1160
    if (!ok) {
-
 
1161
                            QString debug_str;
-
 
1162
                            debug_str.append(tr("ôóí showObjects(): Database Error "));
-
 
1163
                            debug_str.append(tr(" õð: "));
-
 
1164
                            debug_str.append(inctance);
-
 
1165
                            debug_str.append(tr(" ô: "));
-
 
1166
                            debug_str.append(filtr);
-
 
1167
                            debug_str.append(q.lastError().text());
-
 
1168
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
-
 
1169
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
-
 
1170
                                                                            QObject::tr("ôóíêöèÿ showObjects(): Database Error"),   // Çàãîëîâîê.
-
 
1171
                                                                            debug_str
-
 
1172
                                                                           // q.lastError().text()
-
 
1173
                                                                             );          // Òåêñò ñîîáùåíèÿ.
-
 
1174
                                                                            return;
-
 
1175
                     }
-
 
1176
-
 
1177
    field_ID = q.record().indexOf(tr("ID"));
-
 
1178
-
 
1179
    icon_field_index = q.record().indexOf(tr("Icon"));
-
 
1180
-
 
1181
-
 
1182
-
 
1183
-
 
1184
    while(q.next()){
-
 
1185
                  if (q.record().count() > 1)
-
 
1186
                  {
-
 
1187
                    QString value_tmp;
-
 
1188
                    QString ID_tmp;
-
 
1189
                    QString space;
-
 
1190
-
 
1191
                    // // // //                QTreeWidgetItem * itm;
-
 
1192
                    ID_tmp = q.value(field_ID).toString(); // îïðåäåëÿåì èäåíòèôèêàòîð îáúåêòà
-
 
1193
                    value_tmp = q.value(1).toString(); // îïðåäåëÿåì èìÿ îáúåêòà (äîëæíî õðàíèòüñÿ â ïåðâîì ïîëå)
-
 
1194
               //     itm = new QTreeWidgetItem(parent_object_item); // äîáàâëÿåì â äåðåâî óçåë, ñîîòâåòñòâóþùèé îáúåêòó
-
 
1195
-
 
1196
-
 
1197
-
 
1198
-
 
1199
                    /***************************
-
 
1200
                    itm = new QTreeWidgetItem(title_item); // äîáàâëÿåì â äåðåâî óçåë, ñîîòâåòñòâóþùèé îáúåêòó
-
 
1201
                    itm->setText(0, value_tmp);
-
 
1202
                    itm->setText(1, tr("object"));
-
 
1203
                    itm->setText(2, ID_tmp);
-
 
1204
                    ******************************/
-
 
1205
-
 
1206
                    if  (icon_field_index != -1){ // åñëè èìååòñÿ ïîëå ñ èêîíêàìè
-
 
1207
-
 
1208
                        QVariant data;
-
 
1209
                        QByteArray bytes;
-
 
1210
                        QPixmap pix;
-
 
1211
                        QIcon icn;
-
 
1212
                        QMap <QString, QPixmap> pixmap_map;
-
 
1213
                        QList <QString> id_list;
-
 
1214
                        QList <QPixmap> pixmap_list;
-
 
1215
                        pixmap_map = MainWindow::getObjectsIcon(inctance);
-
 
1216
                        if (!pixmap_map.isEmpty()) {
-
 
1217
                            id_list = pixmap_map.keys();
-
 
1218
                            pixmap_list =  pixmap_map.values();
-
 
1219
                        }
-
 
1220
                        if (id_list.indexOf(ID_tmp) != -1) {
-
 
1221
                            pix = pixmap_list.at(id_list.indexOf(ID_tmp));
-
 
1222
                        }
-
 
1223
                      // data = q.record().value(icon_field_index);
-
 
1224
                      //  bytes = q.record().value(icon_field_index).toByteArray();
-
 
1225
                        // if (data.isValid() && (!data.isNull())) {
-
 
1226
                     //   if (!bytes.isEmpty()){
-
 
1227
                        // pix.loadFromData(data.toByteArray());
-
 
1228
                        // pix.loadFromData(bytes);
-
 
1229
-
 
1230
-
 
1231
                    if(!pix.isNull())    {
-
 
1232
                            if (pix.height() > 128) pix = pix.scaledToHeight(128);
-
 
1233
                            QString fname = value_tmp;
-
 
1234
                            fname.append(tr(".png"));
-
 
1235
-
 
1236
-
 
1237
                            pix.toImage().save(fname);
-
 
1238
                            doc.addResource(QTextDocument::ImageResource, QUrl(fname), pix.toImage());
-
 
1239
-
 
1240
                        // for(int i=0; i<pos; i++){ cursor->insertText( tr(" "));}// äîáàâëÿåì ïðîáåëû
-
 
1241
-
 
1242
-
 
1243
                            for(int i=0; i<pos; i++){ cursor->insertText( tr("\t"));}// äîáàâëÿåì ïðîáåëû
-
 
1244
                            cursor->insertImage(fname);
-
 
1245
                          //  cursor->insertText(tr("\n"));
-
 
1246
-
 
1247
                        }
-
 
1248
-
 
1249
-
 
1250
-
 
1251
-
 
1252
                        // // // icn.addPixmap(pix);
-
 
1253
                        // // // itm->setIcon(0, icn);
-
 
1254
                     //  }
-
 
1255
-
 
1256
-
 
1257
-
 
1258
                    }
-
 
1259
-
 
1260
                    for(int i=0; i<pos; i++){ cursor->insertText( tr("\t"));}// äîáàâëÿåì ïðîáåëû
-
 
1261
-
 
1262
                    cursor->insertText( value_tmp);
-
 
1263
                    cursor->insertText( tr("\n"));
-
 
1264
-
 
1265
//                    itm->setIcon(0, icon);
-
 
1266
-
 
1267
-
 
1268
                    for (int i=0; i < model_item->childCount(); i++) // ïðîâåðÿåì, åñòü ëè ó êëàññà äî÷åðíèå êëàññû
-
 
1269
                    {
-
 
1270
                        QTreeWidgetItem * model_item_tmp;           // åñëè åñòü
-
 
1271
                        QString pointer_name;
-
 
1272
                        QString filtr_tmp;
-
 
1273
                        bool pointer_isEmpty;
-
 
1274
                        model_item_tmp = model_item->child(i);      // îòîáðàæàåì îáúåêòû äî÷åðíèõ êëàññîâ
-
 
1275
                        pointer_name = getPointerFieldName(classID, model_item->child(i)->text(1));
-
 
1276
                        // // // // itm->setText(4, pointer_name);
-
 
1277
-
 
1278
                      //  title_item->setText(4, pointer_name);
-
 
1279
-
 
1280
-
 
1281
                        pointer_isEmpty = pointer_name.isEmpty();
-
 
1282
                        filtr_tmp = tr("where ");
-
 
1283
                        filtr_tmp.append(tr("`"));
-
 
1284
                        filtr_tmp.append(pointer_name);
-
 
1285
                        filtr_tmp.append(tr("` = '"));
-
 
1286
                        filtr_tmp.append(ID_tmp);
-
 
1287
                         filtr_tmp.append(tr("'"));
-
 
1288
                        // // // // showObjects(itm,  model_item_tmp, filtr_tmp);
-
 
1289
                        //MainWindow::showObjectChildrens(ID_tmp, itm, model_item_tmp);
-
 
1290
-
 
1291
                    }
-
 
1292
-
 
1293
-
 
1294
                }
-
 
1295
-
 
1296
              }
-
 
1297
-
 
1298
-
 
1299
-
 
1300
-
 
1301
-
 
1302
-
 
1303
-
 
1304
-
 
1305
-
 
1306
-
 
1307
}
-
 
1308
-
 
1309
1005
 
1310