Subversion Repositories OpenInventory

Rev

Rev 101 | Rev 103 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

   MainWindow::readModel();

   //QString model_str;
   MainWindow::creatModelString();
   int i;
   i++;
    QFile file_tmp("./temp.txt");
    bool ok;
    ok = file_tmp.open(QIODevice::ReadWrite | QIODevice::Text);
    QTextStream out(&file_tmp);
    out << MainWindow::modelString;
    file_tmp.close();

    MainWindow::openDataBase();
    MainWindow::buildPreviewModel(tr("Ìîÿ ìîäåëü"), tr("7"));
    MainWindow::getClassList();

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::changeEvent(QEvent *e)
{
    QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}


bool MainWindow::readModel(){
    bool result;
    QString model_str;
    QFile file(":/model.txt");

   rootItem1 = new  QTreeWidgetItem(ui->treeWidget);
    rootItem1->setText(0, tr("Óðîâåíü 1"));
   // rootItem2 = new  QTreeWidgetItem(rootItem1);
   // rootItem2->setText(0, tr("óðîâåíü 2"));
    rootItem1->setCheckState(0,Qt::Checked);
   // rootItem2->setCheckState(0,Qt::Checked);



    result = file.open(QIODevice::ReadOnly);
    if (result) {
                     model_str = QString(tr(file.readAll()));
                }

    setupModelData(model_str.split(QString("\n")), rootItem1);


    return result;

}


void MainWindow::setupModelData(const QStringList &lines, QTreeWidgetItem *parent)
{
    QList<QTreeWidgetItem*> parents;
    QList<int> indentations;
    parents << parent;
    indentations << 0;

    int number = 0;

    while (number < lines.count()) {
        int position = 0;
        while (position < lines[number].length()) {
            if (lines[number].mid(position, 1) != " ")
                break;
            position++;
        }

        QString lineData = lines[number].mid(position).trimmed();

        if (!lineData.isEmpty()) {
            // Read the column data from the rest of the line.
            QStringList columnStrings = lineData.split("\t", QString::SkipEmptyParts);
            QList<QVariant> columnData;
            for (int column = 0; column < columnStrings.count(); ++column)
                columnData << columnStrings[column];

            if (position > indentations.last()) {
                // The last child of the current parent is now the new parent
                // unless the current parent has no children.

                if (parents.last()->childCount() > 0) {
                    parents << parents.last()->child(parents.last()->childCount()-1);
                    indentations << position;
                }
            } else {
                while (position < indentations.last() && parents.count() > 0) {
                    parents.pop_back();
                    indentations.pop_back();
                }
            }

            // Append a new item to the current parent's list of children.
          // // //  parents.last()->appendChild(new QTreeWidgetItem(columnData, parents.last()));
            QTreeWidgetItem* itm_tmp;
            itm_tmp = new QTreeWidgetItem( parents.last());

            itm_tmp->setText(0, QString(columnData.at(0).toString()));
            if (columnData.at(1).toString() == "true") {
                                                            itm_tmp->setCheckState(0,Qt::Checked);
                                                        }
            else itm_tmp->setCheckState(0,Qt::Unchecked);
            itm_tmp->setText(1, QString(columnData.at(2).toString()));
            itm_tmp->setText(2, QVariant(number).toString()); // íîìåð ñòðîêè â ôàéëå-ìîäåëè îòîáðàæåíèÿ
            itm_tmp->setText(3, QVariant(indentations.size()).toString());
        }

        number++;
    }
}


/*
void MainWindow::openBase()
{

        db = QSqlDatabase::addDatabase("QMYSQL");
        pdb = &db;
        raportFrm.pdb = &db;

        pdb->setHostName(hostName);
        pdb->setDatabaseName(baseName);
        pdb->setUserName(userName);
        pdb->setPassword(password);
        bool ok = pdb->open();
        if (!ok) {
                                QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
                                                                                this,                      // Ðîäèòåëüñêèé âèäæåò.
                                                                                QObject::tr("Database Error"),   // Çàãîëîâîê.
                                                                                pdb->lastError().text());          // Òåêñò ñîîáùåíèÿ.
                         }
        if (ok)
        {lineEdit-> insert(tr("Áàçà óñïåøíî îòêðûòà"));
        }
        else {lineEdit-> insert(tr("Áàçà íåäîñòóïíà. Êîä îøèáêè: "));
                  lineEdit-> insert(pdb->lastError().text());
                 }



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

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

        model->select();


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

        bool okey;
        int index;
        QSqlRecord record;


        tableView->setModel(model);
        view.setModel(model);


        tableView->setAlternatingRowColors(true);
        view.setAlternatingRowColors(true);

        tableView->resizeColumnsToContents();


        view.resizeColumnsToContents();

        tableView->show();



        initTreeWidget();
}
*/



void MainWindow::creatModelString(){

    MainWindow::modelString.clear(); // î÷èùàåì ñòðîêó ìîäåëè
 //   for (int i =0; i < rootItem1->childCount(); ++i )

    {MainWindow::addChildsString(rootItem1, 0);}

    int root_item_child_count;
    int i;
    root_item_child_count = rootItem1->childCount();
    i++;

}


void MainWindow::addChildsString(QTreeWidgetItem *parentItem, int level){
    int child_count;
    child_count = parentItem->childCount();
    for (int i=0; i < child_count; ++i){
        for (int m=0; m < level; ++m){
        modelString.append(tr("    ")); // ÷åòûðå ïðîáåëà - ïðèçíàê òîãî, ÷òî ýòî íîâûé óðîâåíü âëîæåíèÿ
    }
        modelString.append(parentItem->child(i)->text(0)); // â ïåðâîé êîëîíêå - èìÿ êëàññà
        modelString.append(tr("\t\t\t\t")); // ÷åòûðå òàáóëÿöèè - ïðèçíàê íîâîãî ñòîëáöà
        if (parentItem->child(i)->checkState(0) ==  Qt::Checked) {modelString.append(tr("true"));} // åñëè ãàëî÷êà ñòîèò, çàíîñèì "true", ýëåìåíòû êëàññà â ïðåäñòàâëåíèè îòîáðàæàòüñÿ áóäóò
            else {modelString.append(tr("false"));} // åñëè êëàññ íå âûáðàí - çàíîñèì "false", ýëåìåíòû êëàññà â ïðåäñòàâëåíèè îòîáðàæàòüñÿ íå áóäóò
        modelString.append(tr("\t\t\t\t")); // ÷åòûðå òàáóëÿöèè - ïðèçíàê íîâîãî ñòîëáöà
        modelString.append(parentItem->child(i)->text(1)); // âî âòîðîé êîëîíêå - ID êëàññà
         modelString.append(tr("\n")); // êîíåö ñòðîêè
        if (parentItem->child(i)->childCount() > 0) { MainWindow::addChildsString(parentItem->child(i), level+1);}

    }
int i;
i++;
}


bool MainWindow::openDataBase(){
    QString errorString;
    sql = QSqlDatabase::addDatabase("QMYSQL");
    sql.setDatabaseName(tr("an_db"));
    sql.setHostName(tr("localhost"));
    sql.setUserName(tr("an"));
    sql.setPassword(tr("393939"));

    bool ok;
    ok = sql.open();

    /*
    if (!ok) {
                                QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
                                                                                this,                      // Ðîäèòåëüñêèé âèäæåò.
                                                                                QObject::tr("Database Error"),   // Çàãîëîâîê.
                                                                                sql.lastError().text() );         // Òåêñò ñîîáùåíèÿ.


                            }

*/

    if (!ok) {
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
                                                                            sql.lastError().text());          // Òåêñò ñîîáùåíèÿ.
                     }
else {

        QMessageBox::information( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
                                                        this,                      // Ðîäèòåëüñêèé âèäæåò.
                                                        QObject::tr("Database Connect"),   // Çàãîëîâîê.
                                                        QObject::tr("Ñîåäèíåíèå ñ áàçîé äàííûõ óñïåøíî óñòàíîâëåíî."));         // Òåêñò ñîîáùåíèÿ.





    }

     return ok;
}


bool MainWindow::buildPreviewModel(QString modelName, QString rootClassID){
QSqlQuery q;
QString sql_str;
QString field_name_str;
QString root_class_name;
bool ok;
int field_name;

//ui->treeWidget->clear();

root_class_name = MainWindow::ClassName(rootClassID); // îïðåäåëÿåì èìÿ êëàññà

rootItem1 = new  QTreeWidgetItem(ui->treeWidget);
 rootItem1->setText(0, modelName);

 rootItem1->setCheckState(0,Qt::Checked);


rootItem2 = new  QTreeWidgetItem(rootItem1);
rootItem2->setText(0, root_class_name);
rootItem2->setText(1, rootClassID);
rootItem2->setCheckState(0,Qt::Checked);

addChildsItems(rootItem2);

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

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

q.prepare(sql_str);

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

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

                }




}



QString MainWindow::ClassName(QString class_id){ //âîçâðàùàåò èìÿ êëàññà ïî åãî ID
    QSqlQuery q;
    QString sql_str;
    QString class_name_str;
    bool ok;
    int field_class_name;

    sql_str = tr("select * "
                 " from ListOfClasses where ListOfClasses.ID = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
                 );

    sql_str.append(class_id);
    sql_str.append(tr("' "));

    q.prepare(sql_str);

    ok = q.exec();


    if (!ok) {
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
                                                                            q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
                     }

    field_class_name = q.record().indexOf(tr("ClassName"));
    while(q.next()){

                    class_name_str = q.value(field_class_name).toString();

                    }

    return class_name_str;

}

void MainWindow::addChildsItems(QTreeWidgetItem *perent_class_item){ // äîáîâëÿåì ê ýëåìåíòó äåðåâà â êà÷åñòâå äî÷åðíèõ ýëåìåíòîâ âñå êëàññû, äëÿ êîòîðûõ êëàññ ýëåìåíòà ÿâëÿåòñÿ êîíòåéíåðîì
QStringList chields_list;
QString parent_ID;
QTreeWidgetItem *Item_tmp;
parent_ID = perent_class_item->text(1);
int chields_count, i;

chields_list = MainWindow::classChields(parent_ID);
if(chields_list.isEmpty()) return;
chields_count = chields_list.size();
for (int l = 0; l < chields_count; ++l){
    QString chield_class_name, chield_id;
    chield_id = chields_list.at(l);
    chield_class_name = MainWindow::ClassName(chield_id);
    Item_tmp = new QTreeWidgetItem(perent_class_item);
    Item_tmp->setText(0, chield_class_name);
    Item_tmp->setText(1, chield_id);
    Item_tmp->setCheckState(0, Qt::Checked);
    MainWindow::addChildsItems(Item_tmp);
}

i++;

}


/********************************************************
* Ôóíêöèÿ âîçâðàùàåò ñïèñîê "äî÷åðíèõ" êëàññîâ
*
*
*
********************************************************/


QStringList MainWindow::classChields(QString class_id){
   // QMap<QString, QString> map;
   // TClass class_tmp;
   // QList <TClass> chields_class_list; // ñïèñîê äî÷åðíèõ êëàññîâ
    QStringList result;
    QSqlQuery q;
    QString sql_str;
    QString classIdentifer_str; // â ýòîì ïîëå ëåæèò èäåíòèôèêàòîð êëàññà-êîíòåéíåðà
    QString field_id_str;
    bool ok;
    int field_classIdentifer;
    sql_str = tr("select * "
                 " from DescriptionOfClasses where  DescriptionOfClasses.DefaultValue = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
                 );
    sql_str.append(class_id);

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

    q.prepare(sql_str);

    ok = q.exec();
    if (!ok) {
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
                                                                            q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
                     }
    field_classIdentifer = q.record().indexOf(tr("ClassIdentifer"));
      while(q.next()){

                    classIdentifer_str = q.value(field_classIdentifer).toString();
                    result.append(classIdentifer_str);
                    }

    return result;

  }


QMap <QString, QString> MainWindow::getClassList(){ // ïîëó÷àåì ñïèñîê êëàññîâ
QMap <QString, QString> result_map;
QSqlQuery q;
QString sql_str;
int field_class_id, field_class_name;
bool ok;
sql_str = tr("select * "
             " from ListOfClasses "       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
             );
 q.prepare(sql_str);
 ok = q.exec();
 if (!ok) {
                         QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
                                                                         this,                      // Ðîäèòåëüñêèé âèäæåò.
                                                                         QObject::tr("Database Error"),   // Çàãîëîâîê.
                                                                         q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
                         return result_map; // åñëè îøèáêà - âîçâðàùàåì ïóñòîé ñïèñîê
                  }
field_class_id = q.record().indexOf(tr("ID"));
field_class_name = q.record().indexOf(tr("ClassName"));


 return result_map;
}