Subversion Repositories OpenInventory

Rev

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

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

//ïðîâåðêà

void MainWindow::getDatabaseData(){
int list_count;
ui->treeWidget_2->clear();
if (rootItems.isEmpty()) return;



list_count = rootItems.count();

for (int i=0; i < list_count; i++){

    buildTree(rootItems.at(i));

}

}

void MainWindow::buildTree(QTreeWidgetItem * model_item){




QString model_name;
QString rootClassID;
QString rootClassInctance;
QFont font;

QTreeWidgetItem * item;
model_name = model_item->text(0);
if (model_item->checkState(0) == false) return;

//ui->treeWidget_2->clear();
//font.setWeight(20);
font.setItalic(true);
item = new QTreeWidgetItem (ui->treeWidget_2);
item->setFont(0, font);
item->setText(0, model_name);
item->setTextColor(0, Qt::darkGreen);
root_items_list << item; // çàíîñèì â ñïèñîê êîðíåâûõ èòåìîâ

if (!(model_item->childCount() > 0)) return;

rootClassID = model_item->child(0)->text(1);
rootClassInctance = getClassInctance(rootClassID);


if (model_item->child(0)->checkState(0)) // åñëè â ìîäåëè êîðíåâîé êëàññ âûáðàí äëÿ îòîáðàæåíèÿ (ñòîèò ãàëî÷êà), òî
    {
     /////   QTreeWidgetItem * item_tmp;
   /////     item_tmp = new QTreeWidgetItem(item);                  // â äåðåâå, îòîáðàæàþùåì îáúåêòû êëàññîâ, ñîçäàåì íîâûé óçåë
   /////     item_tmp->setText(0, model_item->child(0)->text(0));    // ñ íàçâàíèåì êëàññà

        //showClassObjects(item_tmp, model_item->child(0));  // è âûâîäèì âñå îáúåêòû äàííîãî êëàññà

        ///// showObjects(item_tmp, model_item->child(0), tr(""));
    showObjects(item, model_item->child(0), tr(""));
    }


/*****************************************************/


}


// ïîëó÷àåì èìÿ òàáëèöû - õðàíèëèùà îáúåêòîâ êëàññà
QString MainWindow::getClassInctance(QString class_id){
    QSqlQuery q;
    QString sql_str;
    QString result;
    QString classInctance;
    int field_inctance;
    bool ok;
    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());          // Òåêñò ñîîáùåíèÿ.
                                                                            return result;
                     }
    field_inctance = q.record().indexOf(tr("TableWhithInstance"));
    while(q.next()){

                  classInctance = q.value(field_inctance).toString();
                  result.append(classInctance);
                  }

  return result;

}

void MainWindow::showClassObjects(QTreeWidgetItem * parent_item, QTreeWidgetItem * model_item){
    QString classID; // èäåíòèôèêàòîð êëàññà
    QString inctance; // èìÿ òàáëèöû, õðàíèëèùà
    QSqlQuery q;
    QString sql_str;
    QString str_tmp;
    bool ok;
    int field_ID;
    int i;
    QIcon icon;
    classID = model_item->text(1);
    inctance = getClassInctance(classID);
    icon = model_item->icon(0);
    sql_str = tr("select * "
                 " from "       //íàõîäèì âñå îáúåêòû êëàññà â òàáëèöå - õðàíèëèùå îáúåêòîâ êëàññà
                 );
    sql_str.append(inctance);
    q.prepare(sql_str);

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

    field_ID = q.record().indexOf(tr("ID"));


    while(q.next()){
                  if (q.record().count() > 1)
                  {
                    QString value_tmp;
                    QString ID_tmp;
                    QTreeWidgetItem * itm;
                    ID_tmp = q.value(field_ID).toString(); // îïðåäåëÿåì èäåíòèôèêàòîð îáúåêòà
                    value_tmp = q.value(1).toString(); // îïðåäåëÿåì èìÿ îáúåêòà (äîëæíî õðàíèòüñÿ â ïåðâîì ïîëå)
                    itm = new QTreeWidgetItem(parent_item); // äîáàâëÿåì â äåðåâî óçåë, ñîîòâåòñòâóþùèé îáúåêòó
                    itm->setText(0, value_tmp);

                    itm->setIcon(0, icon);

                    for (int i; i < model_item->childCount(); i++) // ïðîâåðÿåì, åñòü ëè ó êëàññà äî÷åðíèå êëàññû
                    {
                        QTreeWidgetItem * model_item_tmp;           // åñëè åñòü
                        model_item_tmp = model_item->child(i);      // îòîáðàæàåì îáúåêòû äî÷åðíèõ êëàññîâ
                        MainWindow::showObjectChildrens(ID_tmp, itm, model_item_tmp);

                    }
                  }

             }

   
    i++;
}



void MainWindow::showObjectChildrens(QString object_ID, QTreeWidgetItem * object_item, QTreeWidgetItem * model_item){ // îòîáðàçèì îáúåêòû êëàññîâà

    QString classID; // èäåíòèôèêàòîð êëàññà

    QString inctance; // èìÿ òàáëèöû, õðàíèëèùà
    QSqlQuery q;
    QString sql_str;
    QString str_tmp;
    bool ok;
    classID = model_item->text(1);
    inctance = getClassInctance(classID);

    sql_str = tr("select * "
                 " from '"       //íàõîäèì âñå îáúåêòû êëàññà â òàáëèöå - õðàíèëèùå îáúåêòîâ êëàññà
                 );
    sql_str.append(inctance);
    sql_str.append(tr("' where "));


    q.prepare(sql_str);

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



//
void MainWindow::showObjects(QTreeWidgetItem * parent_object_item, QTreeWidgetItem * model_item, QString filtr){
    QString classID; // èäåíòèôèêàòîð êëàññà
    QString parentClassID; // èäåíòèôèêàòîð ðîäèòåëüñêîãî êëàññà
    QString pointerField; // èìÿ ïîëÿ-óêàçàòåëÿ íà ðîäèòåëüñêèé êëàññ
    QString inctance; // èìÿ òàáëèöû, õðàíèëèùà
    QString className; // èìÿ êëàññà
    QString modelID; // èäåíòèôèêàòîð ìîäåëè
    QString add_filtr; // äîïîëíèòåëüíûé ôèëüòð
    int field_ID;
    int icon_field_index;
    bool filtr_empty;
    bool ok;
    QSqlQuery q;
    QString sql_str;
    QString str_tmp;
    QTreeWidgetItem * title_item;
    QFont font;
    QIcon icon;
   // font.setWeight(40);
    font.setBold(true);
    filtr_empty = filtr.isEmpty();

    classID = model_item->text(1);
    modelID = model_item->text(6);
    add_filtr = MainWindow::getFiltrString(modelID, classID);


    icon = model_item->icon(0);

    parentClassID = model_item->parent()->text(1);

    pointerField = getPointerFieldName(parentClassID, classID);

    className = model_item->text(0);
    inctance = getClassInctance(classID);

    if  (!model_item->checkState(0)) return;

    title_item = new  QTreeWidgetItem(parent_object_item);
    title_item->setFont(0, font);
    title_item->setText(0, className);
    title_item->setText(1, tr("class"));
    title_item->setText(2, classID);
    title_item->setText(3, inctance);
    title_item->setText(4, pointerField);
    title_item->setText(5, add_filtr); // çàïîìíèì ôèëüòð äëÿ êëàññà â äåðåâå ñ äàííûìè
    title_item->setTextColor(0, Qt::darkBlue);

     title_item->setIcon(0, icon);


    sql_str = tr("select * "
                 " from "       //íàõîäèì âñå îáúåêòû êëàññà â òàáëèöå - õðàíèëèùå îáúåêòîâ êëàññà
                 );
    sql_str.append(inctance);


    if (filtr.isEmpty() && (!add_filtr.isEmpty())) // ôèëüòð ïóñòîé, äîïîëíèòåëüíûé ôèëüòð íå ïóñòîé
                            {
                                filtr.append(tr ("where "));
                                filtr.append(add_filtr);
                             }


    if (!filtr.isEmpty())   { // åñëè ôèëüòð íå ïóñòîé
                                 sql_str.append(tr(" "));
                                 sql_str.append(filtr); // äîáàâëÿåì â çàïðîñ ôèëüòð
                            }

    q.prepare(sql_str);

    ok = q.exec();
    if (!ok) {
                            QString debug_str;
                            debug_str.append(tr("ôóí showObjects(): Database Error "));
                            debug_str.append(tr(" õð: "));
                            debug_str.append(inctance);
                            debug_str.append(tr(" ô: "));
                            debug_str.append(filtr);
                            debug_str.append(q.lastError().text());
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
                                                                            QObject::tr("ôóíêöèÿ showObjects(): Database Error"),   // Çàãîëîâîê.
                                                                            debug_str
                                                                           // q.lastError().text()
                                                                             );          // Òåêñò ñîîáùåíèÿ.
                                                                            return;
                     }

    field_ID = q.record().indexOf(tr("ID"));

    icon_field_index = q.record().indexOf(tr("Icon"));
    /*
    if (q.size() <= 0) return;
    title_item = new  QTreeWidgetItem(parent_object_item);
    title_item->setFont(0, font);
    title_item->setText(0, className);
    */


    while(q.next()){
                  if (q.record().count() > 1)
                  {
                    QString value_tmp;
                    QString ID_tmp;
                    QTreeWidgetItem * itm;
                    ID_tmp = q.value(field_ID).toString(); // îïðåäåëÿåì èäåíòèôèêàòîð îáúåêòà
                    value_tmp = q.value(1).toString(); // îïðåäåëÿåì èìÿ îáúåêòà (äîëæíî õðàíèòüñÿ â ïåðâîì ïîëå)
               //     itm = new QTreeWidgetItem(parent_object_item); // äîáàâëÿåì â äåðåâî óçåë, ñîîòâåòñòâóþùèé îáúåêòó
                    itm = new QTreeWidgetItem(title_item); // äîáàâëÿåì â äåðåâî óçåë, ñîîòâåòñòâóþùèé îáúåêòó
                    itm->setText(0, value_tmp);
                    itm->setText(1, tr("object"));
                    itm->setText(2, ID_tmp);


                    if  (icon_field_index != -1){ // åñëè èìååòñÿ ïîëå ñ èêîíêàìè
                        QVariant data;
                        QByteArray bytes;
                        QPixmap pix;
                        QIcon icn;
                        QMap <QString, QPixmap> pixmap_map;
                        QList <QString> id_list;
                        QList <QPixmap> pixmap_list;
                        pixmap_map = MainWindow::getObjectsIcon(inctance);
                        if (!pixmap_map.isEmpty()) {
                            id_list = pixmap_map.keys();
                            pixmap_list =  pixmap_map.values();
                        }
                        if (id_list.indexOf(ID_tmp) != -1) {
                            pix = pixmap_list.at(id_list.indexOf(ID_tmp));
                        }
                      // data = q.record().value(icon_field_index);
                      //  bytes = q.record().value(icon_field_index).toByteArray();
                        // if (data.isValid() && (!data.isNull())) {
                     //   if (!bytes.isEmpty()){
                        // pix.loadFromData(data.toByteArray());
                        // pix.loadFromData(bytes);
                        if (pix.height() > 128) pix = pix.scaledToHeight(128);
                        icn.addPixmap(pix);
                        itm->setIcon(0, icn);
                     //  }



                    }



//                    itm->setIcon(0, icon);


                    for (int i=0; i < model_item->childCount(); i++) // ïðîâåðÿåì, åñòü ëè ó êëàññà äî÷åðíèå êëàññû
                    {
                        QTreeWidgetItem * model_item_tmp;           // åñëè åñòü
                        QString pointer_name;
                        QString filtr_tmp;
                        bool pointer_isEmpty;
                        model_item_tmp = model_item->child(i);      // îòîáðàæàåì îáúåêòû äî÷åðíèõ êëàññîâ
                        pointer_name = getPointerFieldName(classID, model_item->child(i)->text(1));
                        itm->setText(4, pointer_name);

                      //  title_item->setText(4, pointer_name);


                        pointer_isEmpty = pointer_name.isEmpty();
                        filtr_tmp = tr("where ");
                        filtr_tmp.append(tr("`"));
                        filtr_tmp.append(pointer_name);
                        filtr_tmp.append(tr("` = '"));
                        filtr_tmp.append(ID_tmp);
                         filtr_tmp.append(tr("'"));
                        showObjects(itm,  model_item_tmp, filtr_tmp);
                        //MainWindow::showObjectChildrens(ID_tmp, itm, model_item_tmp);

                    }


                }

              }




    for (int i; i < model_item->childCount(); i++) // ïðîâåðÿåì, åñòü ëè ó êëàññà äî÷åðíèå êëàññû
        {


        }

}


QString MainWindow::getPointerFieldName(QString parent_class_id, QString chield_class_id){

    QSqlQuery q;
    QString sql_str;
    QString str_tmp;
    QString field;
    QString result;
    int field_name;
    bool ok;
    sql_str = tr("select * "
                 " from `DescriptionOfClasses` where `DescriptionOfClasses`.`FieldType` = 'pointer' and  `DescriptionOfClasses`.`DefaultValue` = "       //íàõîäèì âñå îáúåêòû êëàññà â òàáëèöå - õðàíèëèùå îáúåêòîâ êëàññà
                 );

    sql_str.append(tr("'"));
    sql_str.append(parent_class_id);
    sql_str.append(tr("' "));
    sql_str.append(tr(" and  `DescriptionOfClasses`.`ClassIdentifer` = '"));
    sql_str.append(chield_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());          // Òåêñò ñîîáùåíèÿ.
                                                                            return result;
                     }
field_name =  q.record().indexOf(tr("FieldName"));
while(q.next()){
        result = q.value(field_name).toString();
    }
return result;
}



void MainWindow::on_treeWidget_2_itemClicked ( QTreeWidgetItem * item, int column ){
QString item_type; // òèï óçëà (èìÿ êëàññà èäè îáúåêò)
QString parent_object_id;
int i;
QTreeWidgetItem * parent_item;
item_type = item->text(1);
parent_item = item->parent();

QString  class_id; // èäåíòèôèêàòîð âûáðàííîãî êëàññà
QString inctance;
QString filtr_tmp;
QMap <QString, QString> pointersList;
QStringList dateFieldList; // ñïèñîê èìåí ïîëåé ñ òèïîì "DATE"
QStringList boolFieldList; // ñïèñîê èìåí ïîëåé ñ òèïîì "BOOL"
QStringList fileFieldList; // ñïèñîê èìåí ïîëåé, â êîòîðûõ õðàíÿòñÿ ôàéëû
QString pointer_name; // ñïèñîê èìåí ïîëåé

if (item_type == tr("object") || item_type == tr("class")){

disconnect(sql_mogel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(on_sql_mogel_dataChanged(QModelIndex,QModelIndex)));

static QList<int> colomns_indexes; // ñïèñîê íîìåðîâ ñòîëáöîâ òàáëèöû ñ íåñòàíäàðòíûìè äåëåãàòàìè
static QList<int> date_colomns_indexes; // ñïèñîê íîìåðîâ ñòîëáöîâ òàáëèöû ñ äåëåãàòàìè äëÿ òèïà "DATE"
static QList <int> bool_colomns_indexes; // ñïèñîê íîìåðîâ ñòîëáöîâ òàáëèöû ñ äåëåãàòàìè äëÿ òèïà "BOOL"
static QList <int> file_colomns_indexes; // ñïèñîê íîìåðîâ ñòîëáöîâ òàáëèöû, â êîòîðûõ õðàíÿòüñÿ ôàéëû

static QList<SpinBoxDelegate *> spin_delegate_list;// ñïèñîê óêàçàòåëåé íà íåñòàíäàðòíûå äåëåãàòû
static int icon_index = -1; // èíäåêñ ñòîëáöà ñ èêîíêàìè


SpinBoxDelegate * spin_delegate_tmp;

// Ñïåðâà "î÷èñòèì" òàáëèöó îò íåñòàíäàðòíûõ äåëåãàòîâ

if (icon_index != -1) {
                            ui->tableView->setItemDelegateForColumn(icon_index, &standart_delegate); // è ïðèñâàèâàåì ñòàíäàðòíûé äåëåãàò
                            icon_index = -1;
                       }

for (i=0; i < colomns_indexes.size(); i++){ // äëÿ âñåõ ïîëåé-óêàçàòåëåé:
    ui->tableView->setItemDelegateForColumn(colomns_indexes.at(i), &standart_delegate ); // è ïðèñâàèâàåì ñòàíäàðòíûé äåëåãàò
// ui->tableView->setItemDelegateForColumn(colomns_indexes.at(i), &picture_delegate);

}
colomns_indexes.clear(); // î÷èùàåì ñïèñîê ñòîëáöîâ ñ íåñòàíäàðòíûìè äåëåãàòàìè


//  "Î÷èñòèì" òàáëèöó îò äåëåãàòîâ äëÿ õðàíåíèÿ ôàéëîâ

for (i=0; i < file_colomns_indexes.size(); i++){ // äëÿ âñåõ ïîëåé-óêàçàòåëåé:
    ui->tableView->setItemDelegateForColumn(file_colomns_indexes.at(i), &standart_delegate ); // è ïðèñâàèâàåì ñòàíäàðòíûé äåëåãàò
}
file_colomns_indexes.clear();


// "Î÷èñòèì" òàáëèöó îò äåëåãàòîâ äëÿ òèïà "DATE"
for (i=0; i < date_colomns_indexes.size(); i++){ // äëÿ âñåõ ïîëåé-óêàçàòåëåé:
    ui->tableView->setItemDelegateForColumn(date_colomns_indexes.at(i), &standart_delegate ); // è ïðèñâàèâàåì ñòàíäàðòíûé äåëåãàò
// ui->tableView->setItemDelegateForColumn(colomns_indexes.at(i), &picture_delegate);

}

date_colomns_indexes.clear();

// "Î÷èñòèì" òàáëèöó îò äåëåãàòîâ äëÿ òèïà "BOOL"
for (i=0; i < bool_colomns_indexes.size(); i++){ // äëÿ âñåõ ïîëåé-óêàçàòåëåé:
    ui->tableView->setItemDelegateForColumn(bool_colomns_indexes.at(i), &standart_delegate ); // è ïðèñâàèâàåì ñòàíäàðòíûé äåëåãàò
// ui->tableView->setItemDelegateForColumn(colomns_indexes.at(i), &picture_delegate);

}

bool_colomns_indexes.clear();
boolFieldsIndexes_global.clear();

if (item_type == tr("object"))
    {
          QString ID;
        ui->pushButton->setEnabled(false);
        ui->pushButton_2->setEnabled(false);

        class_id = parent_item->text(2);
        ID = item->text(2);
        inctance = parent_item->text(3);
        delete sql_mogel;

        sql_mogel = new MyModel();

        sql_mogel->setTable(inctance);
        // sql_mogel->setEditStrategy(QSqlTableModel::OnFieldChange);
        sql_mogel->setEditStrategy(QSqlTableModel::OnManualSubmit);

        filtr_tmp.append(tr("`"));
        filtr_tmp.append(tr("ID"));
        filtr_tmp.append(tr("`"));
        filtr_tmp.append(tr(" = '"));
        filtr_tmp.append(ID);
        filtr_tmp.append(tr("'"));

    }
if (item_type == tr("class"))
    {
        QString parent_object_id; // èäåíòèôèêàòîð ðîäèòåëüñêîãî îáúåêòà

        QString parent_class_inctance;
        QString class_filter;


        ui->pushButton->setEnabled(true);
        ui->pushButton_2->setEnabled(true);

        parent_object_id = parent_item->text(2);

        parentObject_id = parent_item->text(2);

        class_id = item->text(2);
        inctance = item->text(3);
        class_filter = item->text(5);

        pointer_name = item->text(4);
        delete sql_mogel;

        sql_mogel = new MyModel();

        //        sql_mogel = new QSqlTableModel(this);
        sql_mogel->setTable(inctance);
        // sql_mogel->setEditStrategy(QSqlTableModel::OnFieldChange);
        sql_mogel->setEditStrategy(QSqlTableModel::OnManualSubmit);

        if (!parent_object_id.isEmpty())
        {
            filtr_tmp.append(tr("`"));
            filtr_tmp.append(pointer_name);
            filtr_tmp.append(tr("`"));
            filtr_tmp.append(tr(" = '"));
            filtr_tmp.append(parent_object_id);
            filtr_tmp.append(tr("'"));


            if (!class_filter.isEmpty()) // åñëè ôèëüòð äëÿ êëàññà íå ïóñòîé
                {
                    filtr_tmp.append(tr(" and "));
                    filtr_tmp.append(class_filter); // äîáàâèì è ôèëüòð äëÿ êëàññà (êîòîðûé óêàçûâàëè â äåðåâå ìîäåëåé)

                }




        }
        else if(!class_filter.isEmpty()) // åñëè ôèëüòð äëÿ êëàññà íå ïóñòîé, à ôèëüòð ïóñòîé
            {
                 filtr_tmp.append(class_filter); // äîáàâèì è ôèëüòð äëÿ êëàññà (êîòîðûé óêàçûâàëè â äåðåâå ìîäåëåé)
            }

    }



pointersList = getPointersList(class_id); // ïîëó÷àåì ñïèñîê ïîëåé-óêàçàòåëåé
dateFieldList = getDataFieldList(class_id); // ïîëó÷àåì ñïèñîê ïîëåé c òèïîì "DATE"
boolFieldList = getBoolFieldList(class_id); // ïîëó÷àåì ñïèñîê ïîëåé c òèïîì "BOOL"
fileFieldList = getFileFieldList(class_id); // ïîëó÷àåì ñïèñîê ïîëåé, â êîòîðûõ õðàíÿòüñÿ ôàéëû

icon_index = getIconFieldIndex(inctance); //
if (icon_index != -1) ui->tableView->setItemDelegateForColumn(icon_index, iconDelegate);
sql_mogel->setIconIndex(icon_index);

QMap <int, QString> pointersToModel;




QMap <int, QString> filesFieldsToModel;
for (int i=0; i < fileFieldList.count(); i++){ // äëÿ âñåõ ïîëåé, õðàíÿùèõ ôàéëû
  //  static FileDelegate flDelegate;
   // static TimeEditDelegate dateDelegate("01.10.2010");
    QString fileFieldName; // èìÿ ïîëÿ
    int fileFieldIndex; //
    fileFieldName = fileFieldList.at(i); // îïðåäåëÿåì èìÿ ïîëÿ, õðàíÿùåãî ôàéë
    fileFieldIndex = sql_mogel->record().indexOf(fileFieldName); // îïðåäåëÿåì íîìåð ñòîëáöà â ìîäåëå
    filesFieldsToModel.insert(fileFieldIndex, fileFieldName);
    file_colomns_indexes.append(fileFieldIndex);// çàïîìíèì íîìåð ñòîëáöà ñ äåëåãàòîì äëÿ òèïà "file"
    ui->tableView->setItemDelegateForColumn(fileFieldIndex, fileDelegate);

}
sql_mogel->setFilesFields(filesFieldsToModel);// ïåðåäàåì ìîäåëè ñâÿçàííûé ñïèñîê ñ íîìåðàìè è èìåíàìè ñòîëáöîâ, õðàíÿùèõ ôàéëû




for (int i=0; i < dateFieldList.count(); i++){ // äëÿ âñåõ ïîëåé ñ òèïîì "DATA"
     static MyDEDelegate dateDelegate;
   // static TimeEditDelegate dateDelegate("01.10.2010");
    QString dateFieldName; // èìÿ ïîëÿ
    int dataFieldIndex; //
    dateFieldName = dateFieldList.at(i); // îïðåäåëÿåì èìÿ ïîëÿ ñ òèïîì "DATA"
    dataFieldIndex = sql_mogel->record().indexOf(dateFieldName); // îïðåäåëÿåì íîìåð ñòîëáöà â ìîäåëå
    date_colomns_indexes.append(dataFieldIndex);// çàïîìíèì íîìåð ñòîëáöà ñ äåëåãàòîì äëÿ òèïà "DATA"
    ui->tableView->setItemDelegateForColumn(dataFieldIndex, &dateDelegate);

}


for (int i=0; i < boolFieldList.count(); i++){ // äëÿ âñåõ ïîëåé ñ òèïîì "BOOL"
   // // // //  static MyDEDelegate dateDelegate;
   // static TimeEditDelegate dateDelegate("01.10.2010");
    QString boolFieldName; // èìÿ ïîëÿ
    int boolFieldIndex; //
    boolFieldName = boolFieldList.at(i); // îïðåäåëÿåì èìÿ ïîëÿ ñ òèïîì "BOOL"
    boolFieldIndex = sql_mogel->record().indexOf(boolFieldName); // îïðåäåëÿåì íîìåð ñòîëáöà â ìîäåëå
    bool_colomns_indexes.append(boolFieldIndex);// çàïîìíèì íîìåð ñòîëáöà ñ òèïîì "DATA"
        // ui->tableView->setItemDelegateForColumn(dataFieldIndex, &dateDelegate);

}

sql_mogel->setBooleansList(bool_colomns_indexes);
boolFieldsIndexes_global = bool_colomns_indexes;

for (int i=0; i < spin_delegate_list.count(); i++){ // óäàëÿåì íåñòàíäàðòíûå äåëåãàòû
delete spin_delegate_list.at(i);
 }

spin_delegate_list.clear(); // î÷èùàåì ñïèñîê óêàçàòåëåé íà íåñòàíäàðòíûå äåëåãàòû

QStringList pointersNames;
pointersNames = pointersList.keys(); //çäåñü ñïèñîê èìåí ïîëåé-óêàçàòåëåé íà ðîäèòåëüñêèå êëàññû





//   ui->tableView->setItemDelegateForColumn(2, picture_delegate);

// ui->tableView->setRowHeight(1, 100);





QStringList parentInctancesList = pointersList.values(); // çäåñü ñïèñîê ñîîòâåòñòâóþùèõ õðàíèëèù

for (i=0; i < pointersNames.size(); i++){ // äëÿ âñåõ ïîëåé-óêàçàòåëåé:
    QString pointerName;

    int pointerIndex;
    pointerName = pointersNames.at(i);  // îïðåäåëÿåì èìÿ ïîëÿ-óêàçàòåëÿ
    pointerIndex = sql_mogel->record().indexOf(pointerName); // îïðåäåëÿåì íîìåð ñòîëáöà â ìîäåëå
    colomns_indexes.append(pointerIndex); // çàïîìíèì íîìåð ñòîëáöà ñ íåñòàíäàðòíûì äåëåãàòîì
    spin_delegate_tmp = new SpinBoxDelegate();

    // // spinDelegate.setInctance(parentInctancesList.at(i)); // äåëåãàòó ïåðåäàåì èìÿ õðàíèëèùà îáúåêòîâ ðîäèòåëüñêîãî êëàññà
    // // spinDelegate.getItems();                             // ïðîñèì äåëåãàòà ñîñòàâèòü ñïèñîê îáúåêòîâ â õðàíèëèùå

    spin_delegate_tmp->setInctance(parentInctancesList.at(i));
    spin_delegate_tmp->getItems();

    spin_delegate_list.append(spin_delegate_tmp);

  // // ui->tableView->setItemDelegateForColumn(pointerIndex, &spinDelegate); // è ïðèñâàèâàåì åãî ñîîòâåòñòâóþùåìó ñòîëáöó íàøåé òàáëèöû

    ui->tableView->setItemDelegateForColumn(pointerIndex, spin_delegate_tmp);

    pointersToModel.insert(pointerIndex, parentInctancesList.at(i)); // ôîðìèðóåì ñïèñîê ñòîëáöîâ ñ óêàçàòåëÿìè
}

sql_mogel->setPointers(pointersToModel); // ïåðåäàåì ñïèñîê óêàçàòåëåé ìîäåëå

pointer_index = sql_mogel->record().indexOf(pointer_name); // ýòî ãëîáàëüíàÿ ïåðåìåííàÿ, íå òðîãàåì, íóæíà! :-)




sql_mogel->setFilter(filtr_tmp);
sql_mogel->setSort(1, Qt::AscendingOrder);
sql_mogel->select();



connect(sql_mogel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(on_sql_mogel_dataChanged(QModelIndex,QModelIndex)));

ui->tableView->setModel(sql_mogel);
ui->tableView->hideColumn(0);
ui->tableView->resizeColumnsToContents();
ui->tableView->resizeRowsToContents();





    }

}


void MainWindow::on_pushButton_clicked(){ // íàæàòèå êíîïêè "äîáàâèòü ñòðîêó"
     int row = sql_mogel->rowCount();
      sql_mogel->insertRows(row, 1);
      sql_mogel->setData(sql_mogel->index(row, 1), QVariant(tr("íå îïðåäåëåíî")), Qt::EditRole); // ïðèñâàèâàåì íîâîå çíà÷åíèå ïîëþ "èìÿ êëàññà"
      if (pointer_index > 0) {
                                    sql_mogel->setData(sql_mogel->index(row, pointer_index), QVariant(parentObject_id), Qt::EditRole); // ïðèñâàèâàåì íîâîå çíà÷åíèå ïîëþ "èìÿ êëàññà"
                                }
    //  sql_mogel->submitAll();

}

void MainWindow::on_pushButton_2_clicked(){ // íàæàòèå êíîïêè "Óäàëèòü âûäåëåííûå îáúåêòû"
int i;
i++;
QModelIndex model_index;
QItemSelectionModel *selectionModel = ui->tableView->selectionModel();
QModelIndexList indexes = selectionModel->selectedIndexes();
QList<int> selectedRows;
selectedRows.clear();
foreach (model_index, indexes){ // ñïèñîê âñåõ âûäåëåííûõ ñòðîê
    if (!selectedRows.contains(model_index.row()) && (model_index.column()==1))  selectedRows.append(model_index.row()); // îñòàâëÿåì â ñïèñêå òîëüêî âûáðàííûå â ïåðâîé êîëîíêå

}
qSort(selectedRows.begin(),selectedRows.end(), qGreater<int>()); // ñîðòèðóåì â îáðàòíîì ïîðÿäêå


for (int m =0; m < selectedRows.size(); ++m){

// ClassEditor::removeClass(selectedRows.at(m));

sql_mogel->removeRow(selectedRows.at(m));

}
sql_mogel->submitAll();
getDatabaseData();

}


void MainWindow::on_pushButton_3_clicked(){ // íàæàòèå êíîïêè "Ïðèìåíèòü"
    int i;
    i++;
    sql_mogel->submitAll();
    getDatabaseData();
    ui->pushButton_3->setEnabled(false);
    ui->pushButton_4->setEnabled(false);
    sql_mogel->select();

}


void MainWindow::on_pushButton_4_clicked(){ // íàæàòèå êíîïêè "Ñáðîñèòü èçìåíåíèÿ"
    int i;
    i++;
    sql_mogel->select();
    ui->pushButton_3->setEnabled(false);
    ui->pushButton_4->setEnabled(false);
    ui->tableView_2->resizeRowsToContents();
    ui->tableView_2->resizeColumnsToContents();
}


void MainWindow::on_pushButton_5_clicked(){// íàæàòèå êíîïêè "Äîáàâèòü ìîäåëü "

    int i;
    i++;
    int row = model_for_ListModelsTable->rowCount();
    model_for_ListModelsTable->insertRows(row, 1);
    model_for_ListModelsTable->setData(model_for_ListModelsTable->index(row, 1), QVariant(tr("Íîâàÿ ìîäåëü")), Qt::EditRole); // ïðèñâàèâàåì íîâîå çíà÷åíèå ïîëþ "èìÿ êëàññà"
    // model_for_ListModelsTable->setData(sql_mogel->index(row, pointer_index), QVariant(parentObject_id), Qt::EditRole); // ïðèñâàèâàåì íîâîå çíà÷åíèå ïîëþ "èìÿ êëàññà"

   //  sql_mogel->submitAll();


}

void MainWindow::on_pushButton_6_clicked(){// íàæàòèå êíîïêè "Óäàëèòü ìîäåëü "

    QModelIndex model_index;
    QItemSelectionModel *selectionModel = ui->tableView_2->selectionModel();
    QModelIndexList indexes = selectionModel->selectedIndexes();
    QList<int> selectedRows;
    selectedRows.clear();
    foreach (model_index, indexes){ // ñïèñîê âñåõ âûäåëåííûõ ñòðîê
        if (!selectedRows.contains(model_index.row()) && (model_index.column()==1))  selectedRows.append(model_index.row()); // îñòàâëÿåì â ñïèñêå òîëüêî âûáðàííûå â ïåðâîé êîëîíêå

    }
    qSort(selectedRows.begin(),selectedRows.end(), qGreater<int>()); // ñîðòèðóåì â îáðàòíîì ïîðÿäêå


    for (int m =0; m < selectedRows.size(); ++m){

    // ClassEditor::removeClass(selectedRows.at(m));

    model_for_ListModelsTable->removeRow(selectedRows.at(m));

    }
    model_for_ListModelsTable->submitAll();
    ui->pushButton_7->setEnabled(true);
   // getDatabaseData();

}


void MainWindow::on_pushButton_7_clicked(){// íàæàòèå êíîïêè "Ïðèìåíèòü"
model_for_ListModelsTable->submitAll();
ui->pushButton_7->setEnabled(false);
ui->pushButton_8->setEnabled(false);
model_is_build = false;
MainWindow::readModels();
model_is_build = true;
MainWindow::getDatabaseData();
}

void MainWindow::on_pushButton_8_clicked(){// íàæàòèå êíîïêè "Îòìåíèòü" (íà âêëàäêå ìîäåëåé)
model_for_ListModelsTable->select();
ui->pushButton_7->setEnabled(false);
ui->pushButton_8->setEnabled(false);

}


 void MainWindow::on_pushButton_9_clicked()// íàæàòèå êíîïêè "Äîáàâèòü ôèëüòð" (íà âêëàäêå ìîäåëåé)
 {
    QString class_id;
    QString model_id;


    class_id = ui->treeWidget->currentItem()->text(1);
    model_id = ui->treeWidget->currentItem()->text(6);
     int row = filter_model->rowCount();
     filter_model->insertRows(row, 1);
    filter_model->setData(filter_model->index(row, 1), QVariant(model_id), Qt::EditRole); // ïðèñâàèâàåì íîâîå çíà÷åíèå ïîëþ "Model ID"
    filter_model->setData(filter_model->index(row, 2), QVariant(class_id), Qt::EditRole); // ïðèñâàèâàåì íîâîå çíà÷åíèå ïîëþ "Class ID"
    ui->pushButton_11->setEnabled(true);
    ui->pushButton_12->setEnabled(true);


 }

  void MainWindow::on_pushButton_10_clicked()// íàæàòèå êíîïêè "Óäàëèòü ôèëüòð" (íà âêëàäêå ôèëüòðîâ)
  {
      QModelIndex model_index;
      QItemSelectionModel *selectionModel = ui->tableView_3->selectionModel();
      QModelIndexList indexes = selectionModel->selectedIndexes();
      QList<int> selectedRows;
      selectedRows.clear();
      foreach (model_index, indexes){ // ñïèñîê âñåõ âûäåëåííûõ ñòðîê
          if (!selectedRows.contains(model_index.row()) /*&& (model_index.column()==1)*/)  selectedRows.append(model_index.row()); // îñòàâëÿåì â ñïèñêå òîëüêî âûáðàííûå â ïåðâîé êîëîíêå

      }
      qSort(selectedRows.begin(),selectedRows.end(), qGreater<int>()); // ñîðòèðóåì â îáðàòíîì ïîðÿäêå


      for (int m =0; m < selectedRows.size(); ++m){

      // ClassEditor::removeClass(selectedRows.at(m));

      filter_model->removeRow(selectedRows.at(m));

      }
      filter_model->submitAll();

      filter_model->sort(0,Qt::AscendingOrder);
     // getDatabaseData();
      model_is_build = false;
      MainWindow::readModels();
      model_is_build = true;
      MainWindow::getDatabaseData();

      disconnect(filter_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(on_filter_model_dataChanged(QModelIndex,QModelIndex)));
    delete filter_model;

    filter_model = new QSqlTableModel();
     filter_model->setEditStrategy(QSqlTableModel::OnManualSubmit);
   /// filter_model = new MyModel();

    connect(filter_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(on_filter_model_dataChanged(QModelIndex,QModelIndex)));




  }

  void MainWindow::on_pushButton_11_clicked()// íàæàòèå êíîïêè "Ïðèìåíèòü" (íà âêëàäêå ôèëüòðîâ)
  {
      filter_model->submitAll();
      filter_model->sort(0,Qt::AscendingOrder);
      ui->pushButton_11->setEnabled(false);
      ui->pushButton_12->setEnabled(false);

      model_is_build = false;
      MainWindow::readModels();
      model_is_build = true;
      MainWindow::getDatabaseData();
      disconnect(filter_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(on_filter_model_dataChanged(QModelIndex,QModelIndex)));
    delete filter_model;

    filter_model = new QSqlTableModel();
    filter_model->setEditStrategy(QSqlTableModel::OnManualSubmit);
   /// filter_model = new MyModel();

    connect(filter_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(on_filter_model_dataChanged(QModelIndex,QModelIndex)));



  }

  void MainWindow::on_pushButton_12_clicked()// íàæàòèå êíîïêè "Ñáðîñèòü èçìåíåíèÿ" (íà âêëàäêå ôèëüòðîâ)
  {
    ui->tableView_3->setModel(filter_model);
    filter_model->select();

    ui->pushButton_11->setEnabled(false);
    ui->pushButton_12->setEnabled(false);
  }

  void MainWindow::on_pushButton_13_clicked()// íàæàòèå êíîïêè "Ñôîðìèðîâàòü êðàòêèé îò÷åò" (íà âêëàäêå îò÷åòîâ)
  {
        buildReport(false);

  }

  void MainWindow::on_pushButton_14_clicked()// íàæàòèå êíîïêè "Ñôîðìèðîâàòü ïîëíûé îò÷åò" (íà âêëàäêå îò÷åòîâ)
  {
        buildReport(true);

  }

  void MainWindow::on_pushButton_15_clicked()// íàæàòèå êíîïêè  "Ïå÷àòü" (íà âêëàäêå îò÷åòîâ)
  {
        QPrinter printer;
        QPrintDialog *dlg = new QPrintDialog(&printer, this);
        if (dlg->exec() !=QDialog::Accepted) return;
        doc->print(&printer);

  }


  void MainWindow::on_pushButton_16_clicked()// íàæàòèå êíîïêè "Ïå÷àòü â PDF" (íà âêëàäêå îò÷åòîâ)
  {
      QString fileName = QFileDialog::getSaveFileName(this, "Export PDF", "", "PDF Files (*.pdf)");
      if(!fileName.isEmpty()){
          if (QFileInfo(fileName).suffix().isEmpty())
              fileName.append(".pdf");
          QPrinter printer(QPrinter::HighResolution);
          printer.setOutputFormat(QPrinter::PdfFormat);
          printer.setOutputFileName(fileName);
          doc->print(&printer);
      }

  }

 void MainWindow::on_pushButton_17_clicked()// íàæàòèå êíîïêè "Ýêñïîðò â OpenOffice" (íà âêëàäêå îò÷åòîâ)

 {
        QString fileName = QFileDialog::getSaveFileName(this, "Export ODT", "", "OpenOffice document (*.odt)");

      if(!fileName.isEmpty()){
        if (QFileInfo(fileName).suffix().isEmpty())
            fileName.append(".odt");
      (bool)QTextDocumentWriter(fileName).write(doc);

    }


 }


 void MainWindow::on_pushButton_18_clicked()// âûïîëíèòü wmi çàïðîñ

 {
     /*

     // QString program = tr(" wmic -U Àäìèíèñòðàòîð%Patr10t //192.168.0.135 \"select * from Win32_ComputerSystem\"");
             QString program = tr("wmic");
             QStringList arguments;

     // arguments << tr(" -U Àäìèíèñòðàòîð%Patr10t //192.168.0.135 \"select * from Win32_ComputerSystem\"");
          //   program.append(tr(" -U Àäìèíèñòðàòîð%Patr10t //192.168.0.135 \"select * from Win32_ComputerSystem\""));
             program.append(tr(" -U admin --password=samba //192.168.0.101 \"select * from "));    //Win32_Product\""));
             program.append(ui->comboBox_2->currentText());
             program.append(tr("\""));

             int i;
             i++;
             wmiProcess.start(program);
    */


     TWmiVideoCard vCard;



     vCard = MainWindow::getWmiVideoGard("192.168.0.11", tr("Àäìèíèñòðàòîð"), "!s-Leg01@Z");
    int i;
    i++;



 }


void MainWindow::on_sql_mogel_dataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight ){ // èçìåíèëè ñâîéñòâà îáúåêòà èëè äîáàâèëè íîâûé îáúåêò
int i;
i++;

if (sql_mogel->iconIndex() !=-1) {
                                    ui->tableView->resizeColumnsToContents();
                                    ui->tableView->resizeRowsToContents();
                                    }

if ((topLeft == bottomRight) && (boolFieldsIndexes_global.indexOf(topLeft.column()) != -1))
{
    ui->pushButton_3->setEnabled(false);
    ui->pushButton_4->setEnabled(false);
return;
}


ui->pushButton_3->setEnabled(true);
ui->pushButton_4->setEnabled(true);

}

void MainWindow::on_model_for_ListModelsTable_dataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight ){ // èçìåíèëè ñâîéñòâà îáúåêòà èëè äîáàâèëè íîâûé îáúåêò

ui->pushButton_7->setEnabled(true);
ui->pushButton_8->setEnabled(true);
}




void MainWindow::on_filter_model_dataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight ) // èçìåíèëè ñâîéñòâà ôèëüòðà èëè äîáàâèëè íîâûé ôèëüòð

{
    ui->pushButton_11->setEnabled(true);
    ui->pushButton_12->setEnabled(true);
}





// ïîëó÷àåì ñïèñîê âñåõ ïîëåé-óêàçàòåëåé, â êà÷åñòâå êëþ÷åé ïîëó÷èì èìåíà ïîëåé-óêàçàòåëåé
// â êà÷åñòâå çíà÷åíèé ïîëó÷èì ñïèñîê òàáëèö-õðàíèëèù îáúåêòîâ ðîäèòåëüñêèõ êëàññîâ

QMap <QString, QString>  MainWindow::getPointersList(QString class_id){
    QMap <QString, QString>  result_map;
    QSqlQuery q;
    QString sql_str;
    QString str_tmp;
    QString field;
    QString result;
    int field_name, field_default_value;
    bool ok;
    sql_str = tr("select * "
                 " from `DescriptionOfClasses` where `DescriptionOfClasses`.`FieldType` = 'pointer' and  `DescriptionOfClasses`.`ClassIdentifer` = "       //íàõîäèì âñå îáúåêòû êëàññà â òàáëèöå - õðàíèëèùå îáúåêòîâ êëàññà
                 );

    sql_str.append(tr("'"));
    sql_str.append(class_id);
    sql_str.append(tr("' "));
    // sql_str.append(tr(" and  `DescriptionOfClasses`.`ClassIdentifer` = '"));
    // sql_str.append(chield_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());          // Òåêñò ñîîáùåíèÿ.
                                                                            return result_map;
                     }
field_name =  q.record().indexOf(tr("FieldName"));
field_default_value = q.record().indexOf(tr("DefaultValue"));
while(q.next()){
        QString pointerFieldName;
        QString parentClassID;
        QString parentClassInctance;

         pointerFieldName = q.value(field_name).toString();
         parentClassID = q.value(field_default_value).toString();
         parentClassInctance =  getClassInctance(parentClassID);
         result_map.insert(pointerFieldName, parentClassInctance);


    }

return result_map;
}





QStringList MainWindow::getDataFieldList(QString class_id){ // ïîëó÷àåì ñïèñîê âñåõ ïîëåé c òèïîì "Äàòà", â êà÷åñòâå êëþ÷åé ïîëó÷èì èìåíà ïîëåé
                                                            // â êà÷åñòâå çíà÷åíèé ïîëó÷èì ñïèñîê òàáëèö-õðàíèëèù îáúåêòîâ ðîäèòåëüñêèõ êëàññîâ

    QStringList  result_str;
    QSqlQuery q;
    QString sql_str;
    QString str_tmp;
    QString field;
    QString result;
    int field_name, field_default_value;
    bool ok;
    sql_str = tr("select * "
                 " from `DescriptionOfClasses` where `DescriptionOfClasses`.`FieldType` = 'DATE' and  `DescriptionOfClasses`.`ClassIdentifer` = "       //íàõîäèì âñå îáúåêòû êëàññà â òàáëèöå - õðàíèëèùå îáúåêòîâ êëàññà
                 );

    sql_str.append(tr("'"));
    sql_str.append(class_id);
    sql_str.append(tr("' "));
    // sql_str.append(tr(" and  `DescriptionOfClasses`.`ClassIdentifer` = '"));
    // sql_str.append(chield_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());          // Òåêñò ñîîáùåíèÿ.
                                                                            return result_str;
                     }
field_name =  q.record().indexOf(tr("FieldName"));
// field_default_value = q.record().indexOf(tr("DefaultValue"));
while(q.next()){
        QString DataFieldName;

         DataFieldName = q.value(field_name).toString();
         result_str.append(DataFieldName);


    }

return result_str;
}



int MainWindow::getIconFieldIndex(QString inctance){ // ïîëó÷àåì íîìåð ñòîëáöà ñ èêîíêàìè

    QSqlQuery q;
    bool ok;
    int icon_field;
    QString sql_str;
    sql_str = tr("select * from `"); //íàõîäèì âñå îáúåêòû êëàññà â òàáëèöå - õðàíèëèùå îáúåêòîâ êëàññà
    sql_str.append(inctance);
    sql_str.append(tr("`"));
    q.prepare(sql_str);

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

                                return -1;
                     }

    icon_field =  q.record().indexOf(tr("Icon"));
    return icon_field;


}


QStringList MainWindow::getFileFieldList(QString class_id){ // ïîëó÷àåì ñïèñîê âñåõ ïîëåé, â êîòîðûõ õðàíÿòüñÿ ôàéëû
QStringList  result_str;
QSqlQuery q;
QString sql_str;
bool ok;
 int field_name, field_default_value;
 sql_str = tr("select * "
              " from `DescriptionOfClasses` where `DescriptionOfClasses`.`Comment` = 'file' and  `DescriptionOfClasses`.`ClassIdentifer` = "       //íàõîäèì âñå îáúåêòû êëàññà â òàáëèöå - õðàíèëèùå îáúåêòîâ êëàññà
              );
 sql_str.append(tr("'"));
 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());          // Òåêñò ñîîáùåíèÿ.
                                                                         return result_str;
                  }

 field_name =  q.record().indexOf(tr("FieldName"));
 // field_default_value = q.record().indexOf(tr("DefaultValue"));
 while(q.next()){
         QString FileFieldName;

          FileFieldName = q.value(field_name).toString();
          result_str.append(FileFieldName);


     }

 return result_str;

}



QStringList MainWindow::getBoolFieldList(QString class_id){ // ïîëó÷àåì ñïèñîê âñåõ ïîëåé c òèïîì "bool"

    QStringList  result_str;
    QSqlQuery q;
    QString sql_str;
    QString str_tmp;
    QString field;
    QString result;
    int field_name, field_default_value;
    bool ok;
    sql_str = tr("select * "
                 " from `DescriptionOfClasses` where `DescriptionOfClasses`.`FieldType` = 'BOOL' and  `DescriptionOfClasses`.`ClassIdentifer` = "       //íàõîäèì âñå îáúåêòû êëàññà â òàáëèöå - õðàíèëèùå îáúåêòîâ êëàññà
                 );

    sql_str.append(tr("'"));
    sql_str.append(class_id);
    sql_str.append(tr("' "));
    // sql_str.append(tr(" and  `DescriptionOfClasses`.`ClassIdentifer` = '"));
    // sql_str.append(chield_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());          // Òåêñò ñîîáùåíèÿ.
                                                                            return result_str;
                     }
field_name =  q.record().indexOf(tr("FieldName"));
// field_default_value = q.record().indexOf(tr("DefaultValue"));
while(q.next()){
        QString DataFieldName;

         DataFieldName = q.value(field_name).toString();
         result_str.append(DataFieldName);


    }

return result_str;
}





// Ñ÷èòûâàåì íàñòðîéêè

void MainWindow::readSettings()
{
        QSettings settings("Trolltech", "Application Example");
        baseName = settings.value("baseName", "an_db").toString();
        userName = settings.value("userName", "an").toString();
        password = settings.value("password", "393939").toString();
        tableName = settings.value("tableName", "inventar").toString();
        hostName = settings.value("hostName", "server").toString();
//     resize(size);
//     move(pos);tableName
}


void MainWindow::writeSettings()
{
        QSettings settings("Trolltech", "Application Example");
        settings.setValue("baseName", baseName);
        settings.setValue("userName", userName);
        settings.setValue("password", password);
        settings.setValue("tableName", tableName);
        settings.setValue("hostName", hostName);
}



void MainWindow::applySetting()
{
        bool ok;
        baseName = setFrm.lineEdit->text();
        userName = setFrm.lineEdit_2->text();
        password = setFrm.lineEdit_3->text();
        // tableName = setFrm->lineEdit_4->text();
        hostName = setFrm.lineEdit_5->text();
        writeSettings();


        ok=openDataBase();
        if (!ok) return;
   // // //     ui->treeWidget->clear(); // î÷èùàåì äåðåâî ñ ìîäåëüþ

   // // //      buildPreviewModel(tr("Ìîÿ ìîäåëü"), tr("1"));

        model_is_build = false;

        class_list_map.clear(); // î÷èùàåì ñïèñîê êëàññîâ
        rootItems.clear();
        models_items.clear();

        disconnect(model_for_ListModelsTable, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(on_model_for_ListModelsTable_dataChanged(QModelIndex,QModelIndex)));
        delete model_for_ListModelsTable;

        initListModelsTablle();

        connect(model_for_ListModelsTable, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(on_model_for_ListModelsTable_dataChanged(QModelIndex,QModelIndex)));

        ui->treeWidget->clear();
        initComboBox();
 //       model_for_ListModelsTable->select();
        MainWindow::readModels();



  // // //      getDatabaseData();
        // delete setFrm;


        model_is_build = true;
        getDatabaseData();
        setFrm.close();
}


void MainWindow::getSetting()
{
        // setFrm = new settingForm;
    // // //     connect(setFrm.pushButton, SIGNAL(clicked()), this, SLOT(applySetting()));
        setFrm.lineEdit->setText(baseName);
        setFrm.lineEdit_2->setText(userName);
        setFrm.lineEdit_3->setText(password);
//      setFrm->lineEdit_4->setText(tableName);
        setFrm.lineEdit_5->setText(hostName);
        setFrm.show();



}




void MainWindow::readModels(){

    int row = model_for_ListModelsTable->rowCount();
    QList <QTreeWidgetItem*> modelsItemsList;
    QList <int> row_list;
    modelsItemsList = models_items.values();

    row_list = models_items.keys();



    rootItems.clear();
    root_items_list.clear();
    ui->treeWidget->clear();
for (int i=0; i < row; i++){
    QTreeWidgetItem * item_tmp;
    QString modelName;
    QString model_id;

    bool enabled;



    //models_items.values();
    // modelString =

    modelName = model_for_ListModelsTable->data(model_for_ListModelsTable->index(i, 1)).toString();
    model_id = model_for_ListModelsTable->data(model_for_ListModelsTable->index(i, 0)).toString();

    enabled = model_for_ListModelsTable->data(model_for_ListModelsTable->index(i, 3)).toBool();
    item_tmp = new QTreeWidgetItem(ui->treeWidget);
    item_tmp->setText(0, modelName);
    item_tmp->setText(4, QVariant(i).toString()); // çàïèøåì â 4 êîëîíêó íîìåðñòðîêè ìîäåëè â òàáëèöå ìîäåëåé
    item_tmp->setText(6, model_id);
    if (enabled) item_tmp->setCheckState(0,Qt::Checked);
    else  item_tmp->setCheckState(0,Qt::Unchecked);

    root_items_list << item_tmp;

    rootItems.append(item_tmp);

    models_items[i] =item_tmp ;


    modelString = model_for_ListModelsTable->data(model_for_ListModelsTable->index(i, 2)).toString();
    if (modelString.isEmpty()) continue;
    else setupModelData(modelString.split(QString("\n")), item_tmp, i, model_id); // ñòðîèì ìîäåëü

        }

}




QMap <QString, QPixmap> MainWindow::getClassesIcons(){ // ïîëó÷àåì ñïèñîê èêîíîê äëÿ êëàññîâ
                                            // â êà÷åñòâå êëþ÷à ïîëó÷èì ID êëàññà, à â êà÷åñòâå çíà÷åíèé - èçîáðàæåíèÿ èêîíîê

QMap <QString, QPixmap> result_map;
QSqlQuery q;
QString sql_str;
QString str_tmp;
QString field;
QString result;
int field_id, field_icon;
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_id =  q.record().indexOf(tr("ID"));
field_icon = q.record().indexOf(tr("Icon"));
while(q.next()){
    QString classID;
    QByteArray loadimage = q.value(field_icon).toByteArray();
    classID = q.value(field_id).toString();
    if( !loadimage.isEmpty() )
          {
              QPixmap pixmap;
              pixmap.loadFromData(loadimage);
              result_map.insert(classID, pixmap);

          }
    else continue;



    }

return result_map;


}




QMap <QString, QPixmap>  MainWindow::getObjectsIcon(QString inctance){ // ïîëó÷àåì ñïèñîê èêîíîê äëÿ îáúåêòîâ
                                                          // â êà÷åñòâå êëþ÷à ïîëó÷èì ID îáúåêòà, à â êà÷åñòâå çíà÷åíèé - èçîáðàæåíèÿ èêîíîê
QMap <QString, QPixmap> result_map;
QSqlQuery q;
QString sql_str;
QString str_tmp;
int field_id, field_icon;
bool ok;
sql_str = tr("select `ID`, `Icon` "
             " from `"       //íàõîäèì âñå îáúåêòû êëàññà â òàáëèöå - õðàíèëèùå îáúåêòîâ êëàññà
             );
sql_str.append(inctance);
sql_str.append(tr("`"));

q.prepare(sql_str);

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

field_id =  q.record().indexOf(tr("ID"));
field_icon = q.record().indexOf(tr("Icon"));

while(q.next()){
    QString objectID;
    QByteArray loadimage = q.value(field_icon).toByteArray();
    objectID = q.value(field_id).toString();
    if( !loadimage.isEmpty() )
          {
              QPixmap pixmap;
              pixmap.loadFromData(loadimage);
              result_map.insert(objectID, pixmap);

          }
    else continue;



    }
return result_map;
}




QString  MainWindow::getFiltrString(QString model_id, QString class_id){ // ïîëó÷àåì ñòðîêó-ôèëüòð äëÿ äàííîãî êëàññà äàííîé ìîäåëè

    QSqlQuery q;
    QString sql_str;
    QString result_str;
    sql_str = tr("select * from `Filters` where `Filters`.`Model_ID` = '");
    sql_str.append(model_id);
    sql_str.append(tr("' and `Filters`.`Class_ID` = '"));
    sql_str.append(class_id);
    sql_str.append(tr("' order by `Filters`.`ID`"));
    bool ok;
    ok = q.prepare(sql_str);
    ok = q.exec();

    if (!ok) {
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
                                                                            q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
                                                                            return result_str;
             }
    result_str.clear();
    while(q.next()){
        QString Condition, FieldName, ConditionalSymbol, ValueForComparison, PostCondition;
        Condition = q.record().value(3).toString();
        FieldName =  q.record().value(4).toString();
        ConditionalSymbol = q.record().value(5).toString();
        ValueForComparison = q.record().value(6).toString();
        PostCondition = q.record().value(7).toString();


        result_str.append(Condition);
        result_str.append(tr(" `"));
        result_str.append(FieldName);
        result_str.append(tr("`"));
        result_str.append(ConditionalSymbol);

        if  (!ValueForComparison.isEmpty())       {
                result_str.append(tr("'"));
                result_str.append(ValueForComparison);
                result_str.append(tr("' "));
            }
        result_str.append(PostCondition);


    }


    return result_str;

}


void MainWindow::initWmiTree() {

QSqlQuery q;
QString sqlStr;
QString classID;
QString inctance;
int field_id;
bool ok;
int field_ip, field_user_name, field_password;


sqlStr = tr("select * from `ListOfClasses` where `ListOfClasses`.`ClassName` = 'WmiHost'");
ok = q.prepare(sqlStr);
ok = q.exec();
if (!ok){
                              QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
                                                    this,                      // Ðîäèòåëüñêèé âèäæåò.
                                                    QObject::tr("Database Error"),   // Çàãîëîâîê.
                                                    q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
                                                    return;
         }

field_id = q.record().indexOf(tr("ID"));
if (field_id == -1) return;
else  while  (q.next()){
            classID = q.value(field_id).asString();

        }

inctance = MainWindow::getClassInctance(classID);
if(inctance.isEmpty()) return;
sqlStr = tr("select * from `");
sqlStr.append(inctance);
sqlStr.append(tr("`"));
ok = q.prepare(sqlStr);
ok = q.exec();
if (!ok){
                              QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
                                                    this,                      // Ðîäèòåëüñêèé âèäæåò.
                                                    QObject::tr("Database Error"),   // Çàãîëîâîê.
                                                    q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
                                                    return;
         }



field_id = q.record().indexOf(tr("ID"));
field_ip = q.record().indexOf(tr("IP"));
field_user_name =  q.record().indexOf(tr("Ëîãèí"));
field_password = q.record().indexOf(tr("Ïàðîëü"));

while  (q.next()){
QString ID_str, IP_str, user_name_str, password_str;
QTreeWidgetItem * itm_tmp;
IP_str = q.value(field_ip).asString();
user_name_str = q.value(field_user_name).asString();
password_str = q.value(field_password).asString();

itm_tmp = new QTreeWidgetItem(ui->treeWidget_3);
itm_tmp->setText(0, IP_str);
itm_tmp->setCheckState(0, Qt::Checked );





TWmiVideoCard vCard;



vCard = MainWindow::getWmiVideoGard(IP_str, user_name_str, password_str);

if (!vCard.name.isEmpty()) {
    QTreeWidgetItem * itm_video;
    QTreeWidgetItem * itm_video_ram;
    QTreeWidgetItem * itm_video_model;
    QTreeWidgetItem * itm_video_manufacturer;
    QString tmp_str;
    tmp_str = tr("Âèäåîêàðòà: ");
    tmp_str.append(vCard.name);
    itm_video = new QTreeWidgetItem(itm_tmp);
    itm_video->setText(0, tmp_str);

    tmp_str = tr("Ïðîèçâîäèòåëü: ");
    tmp_str.append(vCard.manufacturer);

    itm_video_manufacturer = new QTreeWidgetItem(itm_video);
    itm_video_manufacturer->setText(0, tmp_str);

    itm_video_ram = new QTreeWidgetItem(itm_video);

    tmp_str = tr("Ìîäåëü: ");
    tmp_str.append(vCard.model);
    itm_video_model =  new QTreeWidgetItem(itm_video);
    itm_video_model->setText(0, tmp_str);



    tmp_str = tr("Âèäåîïàìÿòü (Ìá): ");
    tmp_str.append(QVariant(vCard.video_ram /1048576).asString());

    itm_video_ram->setText(0,  tmp_str);



                            }



int i;
i++;

}




}