Subversion Repositories OpenInventory

Rev

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

#include "classeditor.h"
#include "ui_classeditor.h"


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

     iconFrm.show();
   


    readSettings();


    initDataBase(); // íàñòðàèâàåì è óñòàíàâëèâàåì ñîåäèíåíèå
    createMainTables(); // ñîçäàåì ñòðóêòóðó íàøåé áàçû - äâå ãëàâíûå òàáëèöû DescriptionOfClasses è ListOfClasses



/*
    field = new TableField(tr("Ñîòðóäíèêè"), this);
    field->setNotNull(true);
    field->setDefaultValue(tr("ñîòðóäíèê"));

    table = new SqlTable (tr("NewTable"), this);
    table->setName(tr("NewTable"));
    table->fields().at(0)->setNotNull(true);
    if (!(table->setPrimaryKey(tr("ID")))) {
         ui->label_3->setText(table->lastError());
    }
    else  ui->label_3->setText(table->primaryKey());
    table->append(field);

    field = new TableField(tr("Êîìïüþòåðû"), this);
    field->setNotNull(true);
    field->setDefaultValue(tr("êîìïüþòåð"));
    table->append(field);

    field = new TableField(tr("Ìîíèòîðû"), this);
    field->setNotNull(true);
    field->setDefaultValue(tr("ìîíèòîð"));
    table->append(field);

    field = new TableField(tr("Êîëè÷åñòâî (øòóê)"), this);
    field->setNotNull(true);
    field->setType(tr("INTEGER"));
    field->setDefaultValue(tr("1"));
    table->append(field);

    field = new TableField(tr("Äåíü ðîæäåíèÿ"), this);
    field->setNotNull(false);
    field->setType(tr("DATE"));
    field->setDefaultValue(tr("NULL"));
    table->append(field);

    ui->label_2->setText(table->name());
    ui->label->setText(table->fields().at(0)->sqlString());
    ui->label_4->setText(table->sqlString());
   ////// ui->lineEdit->insert(table->sqlString());

*/

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

    QTextDocument *document;
    // = ui->textEdit->document();
    QTextCursor *cursor;

    document = ui->textEdit->document();
    cursor = new QTextCursor(document);
    cursor->movePosition(QTextCursor::Start);
QTextCharFormat format(cursor->charFormat());
//format.setFontFamily("Courier");
format.setFontFamily("Arial");
//format.setFontItalic(false);

format.setFontWeight(QFont::Normal);
QTextCharFormat boldFormat = format;
boldFormat.setFontWeight(QFont::Bold);

QTextCharFormat italicFormat = format;
//format.setFontFamily("Courier");
//     format.setFontFamily("Arial");
italicFormat.setFontItalic(true);

cursor->insertText(table->sqlString(), format);

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


QString errorString;




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

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



*/





model = new QSqlTableModel(); // õðàíèëèùå îáúåêòîâ êëàññà
tableForInstance = new QTableView();
mymodel = new MyModel(this);
modelForPointers = new ModelForPointers(this); // // ìîäåëü äëÿ òàáëèöû ñ óêàçàòåëÿìè

//modelForDescription = new QSqlTableModel(this);
modelForDescription = new ModelForDescriptionTable(this);



initClassListTable();

initFieldsTable();

initPointersTable();

/////////////////model->setTable(tr("ListOfClasses"));



/////model->setEditStrategy(QSqlTableModel::OnManualSubmit);

// modelForPointers->setEditStrategy(QSqlTableModel::OnManualSubmit);






//mymodel->setEditStrategy(QSqlTableModel::OnFieldChange);



//////////////////model->setSort(0, Qt::AscendingOrder);




//       model->setFilter(tr("Èäåíòèôèêàòîð_ñèñòåìíîãî_áëîêà = '7' and Èíâåíòàðíûé_íîìåð = 'i09090909'"));
////////////////////model->select();

//tableForDescription = new QTableView();

//tableForDescription->show();




/*
ui->tableView_2->hideColumn(0);
ui->tableView_2->hideColumn(5);
ui->tableView_2->hideColumn(2);
*/







//if (mymodel->rowCount() > 0) {



/*

currIndexOfClassesTable = mymodel->index(0, 1);


QModelIndex index_temp;



currClassID = mymodel->data(mymodel->index(0,0)).toString();
QItemSelectionModel *selectionModel = ui->tableView->selectionModel();

QModelIndex topLeft;
QModelIndex bottomRight;

     topLeft = mymodel->index(0, 0, QModelIndex());
     bottomRight = mymodel->index(0, 1, QModelIndex());

QItemSelection selection(topLeft, bottomRight);
selectionModel->select(selection, QItemSelectionModel::Select);


QString class_indx, class_instance;
QString str_fltr = tr("ClassIdentifer = ");
class_indx = mymodel->data(mymodel->index(0,0)).toString();
class_instance = mymodel->data(mymodel->index(0,3)).toString();

currInctanceTable = class_instance; //



modelForDescription->setInctance(class_instance); // ïåðåäàåì â ìîäåëü ïîëåé èìÿ òåêóùåé òàáëèöû-õðàíèëèùà
//class_instance.append(tr("_inctance"));
str_fltr.append(class_indx);
str_fltr.append(tr(" AND FieldType <> \"pointer\""));

model->setTable(class_instance);
//model->setTable(tr("memory"));
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();
tableForInstance->setModel(model);
tableForInstance->resizeColumnsToContents();
tableForInstance->setWindowTitle(class_instance);
tableForInstance->show();

modelForDescription->setFilter(str_fltr);
modelForDescription->select();
ui->tableView_2->resizeColumnsToContents();


 str_fltr = tr("ClassIdentifer = ");
 modelForPointers->setInctance(class_instance);  // ïåðåäàåì â ìîäåëü ïîëåé èìÿ òåêóùåé òàáëèöû-õðàíèëèùà
 str_fltr.append(class_indx);
 str_fltr.append(tr(" AND FieldType = \"pointer\""));
// str_fltr.append( tr(" FieldType = pointer "));



 modelForPointers->setFilter(str_fltr);
modelForPointers->select();


*/


//connect(ui->tableView, SIGNAL(clicked(const QModelIndex)), this, SLOT(on_tableView_clicked(const QModelIndex)));
connect(mymodel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(on_myModel_dataChanged(QModelIndex,QModelIndex)));
connect(modelForDescription, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(on_modelForDescription_dataChanged(QModelIndex,QModelIndex)));
//connect(ui->newClassAction, SIGNAL(triggered(bool)), this, SLOT(on_pushButton_clicked(bool)));
connect(ui->action_ID, SIGNAL(triggered(bool)), this, SLOT(on_action_ID_triggered(bool)));
connect(ui->action_showAlias, SIGNAL(triggered(bool)), this, SLOT(on_action_showAlias_triggered(bool))); // ïîêàçûâàòü ïñåâäîíèìû
connect(ui->action_showInstance, SIGNAL(triggered(bool)), this, SLOT(on_action_showInstance_triggered(bool))); // ïîêàçûâàòü õðàíèëèùà îáúåêòîâ
connect(ui->action_removeSelectedFields, SIGNAL(triggered()), this, SLOT(on_pushButton_4_clicked())); // óäàëèòü âûäåëåííûå ïîëÿ
connect(ui->action_removeAllFields, SIGNAL(triggered()), this, SLOT(on_pushButton_5_clicked())); // óäàëèòü âñå ïîëÿ
connect(ui->action_removeSelectedClasses, SIGNAL(triggered()), this, SLOT(on_pushButton_2_clicked())); // óäàëèòü âûäåëåííûå êëàññû
connect(ui->action_removeAllClasses, SIGNAL(triggered()), this, SLOT(on_action_removeAllClasses())); // óäàëèòü âñå êëàññû
connect(ui->action_newClass, SIGNAL(triggered()), this, SLOT(on_pushButton_clicked())); // äîáàâèòü íîâûé êëàññ
connect(ui->action_newField, SIGNAL(triggered()), this, SLOT(on_pushButton_3_clicked())); // äîáàâèòü íîâîå ïîëå
connect(ui->action_newPointer, SIGNAL(triggered()), this, SLOT(on_action_newPointer())); // äîáàâèòü íîâîå ïîëå äëÿ óêàçàòåëåé íà êëàññû-êîíòåéíåðû
// connect(ui->action_newPointer, SIGNAL(triggered()), this, SLOT(on_pushButton_3_clicked())); // äîáàâèòü íîâîå ïîëå äëÿ óêàçàòåëåé íà êëàññû-êîíòåéíåðû

connect(ui->action_removeSelectedPointers, SIGNAL(triggered()), this, SLOT(on_action_removeSelectedPointers())); // óäàëèòü âûäåëåííûå êëàññû
connect(modelForDescription, SIGNAL(field_changed()), this, SLOT(on_field_changed())); // â òàáëèöå ïîëåé ïðîèçîøëè èçìåíåíèÿ
connect(ClassEditor::modelForPointers, SIGNAL(field_changed()), this, SLOT(on_field_changed())); // â òàáëèöå óêàçàòåëåé ïðîèçîøëè èçìåíåíèÿ


connect(ui->getsettingAct, SIGNAL(triggered()), this, SLOT(getSetting())); // âûáîð â ãëàâíîé ôîðìå â ìåíþ "Áàçà äàííûõ" ïóíêòà "Ïàðàìåòðû ñîåäèíåíèÿ"
connect(setFrm.pushButton, SIGNAL(clicked()), this, SLOT(applySetting()));




}











ClassEditor::~ClassEditor()
{
    delete ui;
    delete model;
    delete tableForInstance;
 //    delete field;
   // delete settdialog;
}

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


/*
void  ClassEditor::addNewClass(){

    int row = model->rowCount();

    model->insertRows(row, 1);
    model->setData(model->index(row, 1), tr("New class")); // ïðèñâàèâàåì íîâîå çíà÷åíèå ïîëþ "èìÿ êëàññà"


    // model->setData(model->index(row, 1), tr("Âàñÿ Ïóïê  èí"));
    // model->setData(model->index(row, 2) , tr("Ìóõîñðà  íñê, Çàæîïèíñêèå âûñåëêè ä 1"));


    model->submitAll();

    row = model->rowCount();
    QString tmp_str;
    int i_tmp;
    i_tmp = model->data(model->index(row-1, 0)).toInt();
    tmp_str = model->data(model->index(row-1, 0)).toString(); // ãåíåðèì èìÿ òàáëèöû-õðàíèëèùà îáúåêòîâ êëàññà

    tmp_str.append(tr("_Inctance"));
    model->setData(model->index(row-1, 3), tmp_str );  // è çàíîñèì çíà÷åíèå â òàáëèöó

    model->submitAll();
    mymodel->select();


}
*/


void  ClassEditor::addNewClass_new(){

    int row = mymodel->rowCount();

    mymodel->insertRows(row, 1);
    mymodel->setData(mymodel->index(row, 1), QVariant(tr("New class")), Qt::EditRole); // ïðèñâàèâàåì íîâîå çíà÷åíèå ïîëþ "èìÿ êëàññà"


    mymodel->submitAll();
    row = mymodel->rowCount();
    QString tmp_str1, sql_str;
    int i_tmp1;
    i_tmp1 = mymodel->data(mymodel->index(row-1, 0)).toInt();
    tmp_str1 = mymodel->data(mymodel->index(row-1, 0)).toString(); // ãåíåðèì èìÿ òàáëèöû-õðàíèëèùà îáúåêòîâ êëàññà

    tmp_str1.append(tr("_Inctance"));
    SqlTable* tbl;
    tbl = new SqlTable(tmp_str1); // ñîçäàåì õðàíèëèùå îáúåêòîâ
    sql_str = tbl->sqlString();
    bool ok;

    ok = sql.createTable(tbl);

    if (!ok) {
                                QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
                                                                                this,                      // Ðîäèòåëüñêèé âèäæåò.
                                                                                QObject::tr("Database Error"),   // Çàãîëîâîê.
                                                                                sql.lasError());         // Òåêñò ñîîáùåíèÿ.
                                delete tbl;
                                mymodel->removeRow(row-1);
                                mymodel->submitAll();
                                mymodel->select();
                                ui->tableView_2->resizeRowsToContents();
                                return; // âûõîäèì íå ïðèìåíÿÿ èçìåíåíèé

                         }

    delete tbl;
    mymodel->setData(mymodel->index(row-1, 3), QVariant(tmp_str1), Qt::EditRole);  // è çàíîñèì çíà÷åíèå â òàáëèöó



    // model->setData(model->index(row, 1), tr("Âàñÿ Ïóïê  èí"));
    // model->setData(model->index(row, 2) , tr("Ìóõîñðà  íñê, Çàæîïèíñêèå âûñåëêè ä 1"));


    //mymodel->submitAll();

    //row = mymodel->rowCount();


  //mymodel->select();


}


void ClassEditor::addNewField(){
    // QSqlRecord rec = mymodel->record(1);
     //bool ok;
     //ok = rec.isEmpty();
     //QString currientClassID;
     //currientClassID = rec.value(1).toString();
    QString Inctance_str; // èìÿ òàáëèöû-õðàíèëèùà îáúåêòîâ äëÿ âûáðàííîãî êëàññà
    QString query_str = tr("ALTER TABLE ");
    QString db_error;
    QSqlQuery q;
    int currRow = ClassEditor::currIndexOfClassesTable.row(); //
    Inctance_str = mymodel->data(mymodel->index(currRow, 3)).toString();
    query_str.append( Inctance_str);
    query_str.append(tr(" ADD COLUMN `New field` CHAR(30)"));
    bool ok = q.prepare(query_str);

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

                                                                return; // âûõîäèì íå ïðèìåíÿÿ èçìåíåíèé

                         }

    int row = modelForDescription->rowCount();
    modelForDescription->insertRows(row, 1);
    modelForDescription->onlySetData(modelForDescription->index(row, 5), QVariant(currClassID), Qt::EditRole);
    modelForDescription->onlySetData(modelForDescription->index(row, 4), QVariant(tr("NULL")), Qt::EditRole);

    modelForDescription->submitAll();

    delete model;
    delete tableForInstance;
    model = new QSqlTableModel();
    tableForInstance = new QTableView();
    model->setTable(Inctance_str);
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    tableForInstance->setModel(model);
    tableForInstance->setWindowTitle(Inctance_str);
    tableForInstance->show();
}



void ClassEditor::addNewPointer(){  //äîáîâëÿåì íîâîå ïîëå, ãäå áóäóò õðàíèòüñÿ óêàçàòåëè íà îáúåêòû êëàññà-êîíòåéíåðà
    QString Inctance_str; // èìÿ òàáëèöû-õðàíèëèùà îáúåêòîâ äëÿ âûáðàííîãî êëàññà
    QString query_str = tr("ALTER TABLE ");
    QString db_error;
    QSqlQuery q;
    int currRow = ClassEditor::currIndexOfClassesTable.row(); //
    Inctance_str = mymodel->data(mymodel->index(currRow, 3)).toString();
    query_str.append( Inctance_str);
    query_str.append(tr(" ADD COLUMN `Ñlass-container ID` CHAR(30)"));
    bool ok = q.prepare(query_str);

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

                                                                return; // âûõîäèì íå ïðèìåíÿÿ èçìåíåíèé

                         }


    int row = ClassEditor::modelForPointers->rowCount();
    modelForPointers->insertRows(row, 1);

    modelForPointers->onlySetData(modelForPointers->index(row, 1), QVariant(tr("Ñlass-container ID")), Qt::EditRole);
    modelForPointers->onlySetData(modelForPointers->index(row, 3), QVariant(tr("pointer")), Qt::EditRole);
    modelForPointers->onlySetData(modelForPointers->index(row, 5), QVariant(currClassID), Qt::EditRole);
    modelForPointers->onlySetData(modelForPointers->index(row, 4), QVariant(tr("NULL")), Qt::EditRole);


    modelForPointers->submitAll();








    /*

    str_fltr = tr("ClassIdentifer = ");
    modelForPointers->setInctance(Inctance_str);  // ïåðåäàåì â ìîäåëü ïîëåé èìÿ òåêóùåé òàáëèöû-õðàíèëèùà
    str_fltr.append(class_indx);
    str_fltr.append(tr(" AND FieldType = \"pointer\""));
   // str_fltr.append( tr(" FieldType = pointer "));



    modelForPointers->setFilter(str_fltr);
   modelForPointers->select();
   ui->tableView_3->setModel(modelForPointers);
   ui->tableView_3->resizeColumnsToContents();
*/





    // modelForPointers->select();





    ClassEditor::refreshInctance();









}





// äîáàâëÿåì íîâûé êëàññ
void ClassEditor::on_pushButton_clicked(){
//int i;
//i++;
/////ClassEditor::addNewClass();
ClassEditor::addNewClass_new();
 mymodel->select();
 ui->tableView->resizeColumnsToContents();
 ui->tableView->resizeRowsToContents();

//ui->tableView->setModel(mymodel);

}

void ClassEditor::on_tableView_clicked(const QModelIndex & index ){
    bool indexIsValid;
    int i, row, column;
    i++;
    indexIsValid = index.isValid();
    row = index.row();
    column = index.column();
    currIndexOfClassesTable = index;
    QModelIndex index_tmp, index_instance;
    QString tmp_str, filter_str, instance_str;
   index_tmp = ui->tableView->model()->index(row, 0);
   index_instance = ui->tableView->model()->index(row, 3);
   tmp_str = ui->tableView->model()->data(index_tmp).toString();
   instance_str = ui->tableView->model()->data(index_instance).toString();
   modelForDescription->setInctance(instance_str); // ïåðåäàåì â ìîäåëü ïîëåé èìÿ òåêóùåé òàáëèöû-õðàíèëèùà
   modelForPointers->setInctance(instance_str);

   delegateForDefaultValueColomn.getItems(); //ïðîñèì äåëåãàòà îáíîâèòü ñïèñîê êëàññîâ

 //  instance_str.append(tr("_inctance"));
/*
   Inctance_model.clear();
   Inctance_model.setTable(instance_str);
    Inctance_model.select();
    tableForInstance_new.setModel(&Inctance_model);
    tableForInstance_new.show();
*/

  // model->clear();
   tableForInstance->close();
   delete model;
   delete tableForInstance;
   model = new QSqlTableModel();
   tableForInstance = new QTableView();
   model->setTable(instance_str);
   model->setEditStrategy(QSqlTableModel::OnManualSubmit);
   tableForInstance->setModel(model);

   model->select();
tableForInstance->setWindowTitle(instance_str);
tableForInstance->show();

   //   tableForInstance.setModel(model);
   tableForInstance->resizeColumnsToContents();

   currClassID = tmp_str;
  // ui->label->setText(QVariant(currIndexOfClassesTable.row()).toString());
   filter_str = tr("ClassIdentifer = ");
   filter_str.append(tmp_str);
   filter_str.append(tr(" AND FieldType <> \"pointer\""));
   modelForDescription->setFilter(filter_str);
   modelForDescription->select();
   ui->tableView_2->resizeColumnsToContents();

   filter_str = tr("ClassIdentifer = ");
   filter_str.append(tmp_str);
   filter_str.append(tr(" AND FieldType = \"pointer\""));
   modelForPointers->setFilter(filter_str);
   modelForPointers->select();
   ui->tableView_3->resizeColumnsToContents();




   i++;
}



void ClassEditor::on_pushButton_2_clicked(){ // îáðàáîò÷èê íàæàòèÿ êíîïðêè "Óäàëèòü êëàññ"
    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));



    }
 mymodel->submitAll();
    ClassEditor::modelForDescription->select();
    ui->tableView->resizeColumnsToContents();
    ui->tableView->resizeRowsToContents();
}

void ClassEditor::on_pushButton_3_clicked(){         // îáðàáîò÷èê íàæàòèÿ êíîïêè "Íîâîå ïîëå"
    int i;
    i++;
    ClassEditor::addNewField();
    ClassEditor::modelForDescription->select();
    ui->tableView_2->resizeColumnsToContents();
}


void ClassEditor::on_pushButton_4_clicked(){         // îáðàáîò÷èê íàæàòèÿ êíîïêè "Óäàëèòü ïîëå"
   // int i;
    QModelIndex model_index;
    QItemSelectionModel *selectionModel = ui->tableView_2->selectionModel();
    QModelIndexList indexes = selectionModel->selectedIndexes();
    //QModelIndexList indexes_fo_first_col; // èíäåêñû äëÿ ïåðâîãî ñòîëáöà (èìåíà êëàññîâ)
    //model_index = mymodel->selec;
    //modelList = ui->tableView->SelectItems;
    //i = indexes.size();
    QList<int> selectedRows;
    //indexes_fo_first_col.clear();
    /*
    foreach (model_index, indexes){ // ñïèñîê âñåõ âûäåëåííûõ ñòðîê
        if (!indexes_fo_first_col.contains(model_index) && (model_index.column()==1))  indexes_fo_first_col.append(model_index); // îñòàâëÿåì â ñïèñêå òîëüêî âûáðàííûå â ïåðâîé êîëîíêå

    }
*/

    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>()); // ñîðòèðóåì â îáðàòíîì ïîðÿäêå

    QString Inctance_str; // èìÿ òàáëèöû-õðàíèëèùà
    Inctance_str = mymodel->data(mymodel->index(ClassEditor::currIndexOfClassesTable.row(), 3)).toString();
    for (int m =0; m < selectedRows.size(); ++m){


        QString query_str;
        QString field_name_str; // èìÿ óäàëÿåìîãî ïîëÿ
        QSqlQuery q;

        query_str.clear();


        field_name_str = modelForDescription->data(modelForDescription->index(selectedRows.at(m), 1)).toString();

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

                                                                    return; // âûõîäèì íå ïðèìåíÿÿ èçìåíåíèé

                             }



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

    }
    delete model;
    delete tableForInstance;
    model = new QSqlTableModel();
    tableForInstance = new QTableView();
    model->setTable(Inctance_str);
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    tableForInstance->setModel(model);
    tableForInstance->setWindowTitle(Inctance_str);
    tableForInstance->show();
    //i = selectedRows.size();

    //if (i > 0) model_index = indexes.at(0);
}


void ClassEditor::on_action_removeSelectedPointers(){ // óäàëèòü âûäåëåííûå óêàçàòåëè
    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>()); // ñîðòèðóåì â îáðàòíîì ïîðÿäêå

    QString Inctance_str; // èìÿ òàáëèöû-õðàíèëèùà
    Inctance_str = mymodel->data(mymodel->index(ClassEditor::currIndexOfClassesTable.row(), 3)).toString();
    for (int m =0; m < selectedRows.size(); ++m){


        QString query_str;
        QString field_name_str; // èìÿ óäàëÿåìîãî ïîëÿ
        QSqlQuery q;

        query_str.clear();


        field_name_str = modelForPointers->data(modelForPointers->index(selectedRows.at(m), 1)).toString();

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

                                                                    return; // âûõîäèì íå ïðèìåíÿÿ èçìåíåíèé

                             }



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

    }


    refreshInctance();



}





void ClassEditor::on_pushButton_5_clicked(){         // îáðàáîò÷èê íàæàòèÿ êíîïêè "Óäàëèòü âñå ïîëÿ"
int row;
row = ClassEditor::modelForDescription->rowCount();
ClassEditor::modelForDescription->removeRows(0, row);
ClassEditor::modelForDescription->submitAll();
}

void ClassEditor::on_pushButton_6_clicked(){         // îáðàáîò÷èê íàæàòèÿ êíîïêè "Óäàëèòü âñå ïîëÿ"
    QString  fileName;
    QPixmap pixmap;
    fileName = QFileDialog::getOpenFileName(this,
         tr("Open Image"), "", tr("Image Files (*.png *.jpg *.bmp)"));
    pixmap.load(fileName);
    ui->label_4->setPixmap(pixmap);
    QImage currentImage = pixmap.toImage();
       QByteArray bytes;
       QBuffer buffer(&bytes);
       buffer.open(QIODevice::WriteOnly);
       currentImage.save(&buffer, "PNG");

       if (currIndexOfClassesTable.isValid()) {
                                                    bool ok;

                                                    ok = mymodel->setData(mymodel->index(currIndexOfClassesTable.row(), 5), QVariant (bytes), Qt::EditRole);
                                                    mymodel->submitAll();

                                              }


}

void ClassEditor::on_myModel_dataChanged( const QModelIndex & topLeft, const QModelIndex & bottomRight ){

int i;
i++;
ui->tableView->resizeColumnsToContents();





}

void ClassEditor::on_modelForDescription_dataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight ){
    ui->tableView_2->resizeColumnsToContents();

    /*
    QString instance_str;
    instance_str = mymodel->data(mymodel->index(ClassEditor::currIndexOfClassesTable.row(), 3)).toString();
    tableForInstance->close();
    delete model;
    delete tableForInstance;
    model = new QSqlTableModel();
    tableForInstance = new QTableView();
    model->setTable(instance_str);
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    tableForInstance->setModel(model);

    model->select();
 tableForInstance->setWindowTitle(instance_str);
 tableForInstance->show();
*/

}

void ClassEditor::on_action_ID_triggered(bool is_checked){          // îáðàáàòûâàåì âûáîð â ìåíþ "Ïîêàçûâàòü ID"
if (is_checked) ui->tableView->showColumn(0);
else ui->tableView->hideColumn(0);
ui->tableView->resizeColumnsToContents();
}

void ClassEditor::on_action_showAlias_triggered(bool is_checked){     // îáðàáàòûâàåì âûáîð â ìåíþ "Ïîêàçûâàòü ïñåâäîíèì"
    if (is_checked) ui->tableView->showColumn(2);
    else ui->tableView->hideColumn(2);
    ui->tableView->resizeColumnsToContents();
}

void ClassEditor::on_action_showInstance_triggered(bool is_checked){ // îáðàáàòûâàåì âûáîð â ìåíþ "Ïîêàçûâàòü õðàíèëèùà îáúåêòîâ"
    if (is_checked) ui->tableView->showColumn(3);
    else ui->tableView->hideColumn(3);
    ui->tableView->resizeColumnsToContents();
}



void ClassEditor::on_action_removeAllClasses(){ // îáðàáàòûâàåì âûáîð â ìåíþ "Óäàëèòü âñå êëàññû"
    int row;
    row = ClassEditor::mymodel->rowCount();
    for (int m=0; m < row; ++m){
    ClassEditor::removeClass(0);
    //ClassEditor::mymodel->removeRows(0, row);
}
    ClassEditor::mymodel->submitAll();
    ClassEditor::modelForDescription->select();
}

void ClassEditor::removeClass(int class_row){ // ôóíêöèÿ óäàëÿåò êëàññ, íàõîäÿùèéñÿ â ñòðîêå ñ íîìåðîì class_row
    QModelIndex index_tmp;
    QString tmp_str, filter_str;
   index_tmp = ui->tableView->model()->index(class_row, 0);
   tmp_str = ui->tableView->model()->data(index_tmp).toString();
   currClassID = tmp_str;
  // ui->label->setText(QVariant(currIndexOfClassesTable.row()).toString());
   filter_str = tr("ClassIdentifer = ");
   filter_str.append(tmp_str);
   modelForDescription->setFilter(filter_str); // îáíîâëÿåì òàáëèöó ïîëåé
    ClassEditor::on_pushButton_5_clicked(); // ñíà÷àëà óäàëèì âñå ïîëÿ êëàññà
     mymodel->removeRow(class_row); // òåïåðü óäàëÿåì ñàì êëàññ
     mymodel->submitAll(); // ôèêñèðóåì èçìåíåíèÿ
   ui->tableView->resizeColumnsToContents();
   ui->tableView_2->resizeColumnsToContents();

}


void ClassEditor::on_field_changed(){ // ïîìåíÿëîñü èìÿ ïîëÿ
    ClassEditor::refreshInctance();
}




void ClassEditor::refreshInctance(){ // îáíîâèì ìîäåëü òàáëèöû-õðàíèëèùà

    QString Inctance_str; // èìÿ òàáëèöû-õðàíèëèùà
    Inctance_str = mymodel->data(mymodel->index(ClassEditor::currIndexOfClassesTable.row(), 3)).toString();
    delete model;
    delete tableForInstance;
    model = new QSqlTableModel();
    tableForInstance = new QTableView();
    model->setTable(Inctance_str);
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    model->select();
    tableForInstance->setModel(model);
    tableForInstance->setWindowTitle(Inctance_str);
    tableForInstance->resizeRowsToContents();
    tableForInstance->show();

}




void ClassEditor::on_action_newPointer(){ // äîáàâëÿåì íîâîå ïîëå äëÿ óêàçàòåëåé íà îáúåêòû êëàññà-êîíòåéíåðà
    ClassEditor::addNewPointer();
    ClassEditor::modelForPointers->select();
    ui->tableView_3->resizeColumnsToContents();

}


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

void ClassEditor::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 ClassEditor::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 ClassEditor::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();

        sql.close(); // ðàçðûâàåì ñîåäèíåíèå ñ áàçîé

        sql.setDatabaseName(baseName);
        // sql.setDatabaseName(tr("inventory"));

        // sql.setHostName(tr("localhost"));
        sql.setHostName(hostName);

        // sql.setUserName(tr("an"));

        sql.setUserName(userName);

        // sql.setPassword(tr("393939"));

        sql.setPassword(password);

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

                             }
        else {

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





        }


        mymodel->select();
        model->select();
        modelForDescription->select();

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

   // // //      buildPreviewModel(tr("Ìîÿ ìîäåëü"), tr("1"));
   ////////////     class_list_map.clear(); // î÷èùàåì ñïèñîê êëàññîâ
   ////////////     initComboBox();
  // // //      getDatabaseData();
        // delete setFrm;
        setFrm.close();
}

void ClassEditor::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 ClassEditor::initDataBase(){ // íàñòðîéêà ïàðàìåòðîâ ñîåäèíåíèÿ è óñòàíîâêà ñîåäèíåíèÿ

    sql.setDatabaseName(baseName);
    sql.setHostName(hostName);
    sql.setUserName(userName);
    sql.setPassword(password);

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

                         }
    else {

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





    }

}


void ClassEditor::createMainTables(){// ñîçäàåì ñòðóêòóðó áàçû äàííûõ - òàáëèöû DescriptionOfClasses è ListOfClasses

    bool ok;
    ok = sql.createListOfClassesTable();

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

                         }
    else {

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




    ok = sql.createDescriptionOfClassesTable();

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

                         }
    else {

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


ok = sql.createListModelsTable();

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

                     }
    else {

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




}

void ClassEditor::initClassListTable(){ // íàñòðàèâàåì òàáëèöó äëÿ îòîáðàæåíèÿ ñïèñêà ñóùåñòâóþùèõ êëàññîâ

    mymodel->setTable(tr("ListOfClasses"));
    mymodel->setSort(0, Qt::AscendingOrder);
    mymodel->select();
    mymodel->setHeaderData(1, Qt::Horizontal, tr("Èìÿ êëàññà"));
    mymodel->setHeaderData(2, Qt::Horizontal, tr("Ïñåâäîíèì êëàññà"));
    mymodel->setHeaderData(4, Qt::Horizontal, tr("Êîìåíòàðèé"));
    mymodel->setHeaderData(5, Qt::Horizontal, tr("Èêîíêà"));
    ui->tableView->setModel(mymodel);
    ui->tableView->setAlternatingRowColors(true);
    ui->tableView->resizeColumnsToContents();
    ui->tableView->resizeRowsToContents();
    ui->tableView->hideColumn(0);
    ui->tableView->hideColumn(3);
    ui->tableView->hideColumn(2);
    CPictureDelegate *pictureDelegate;
    pictureDelegate = new CPictureDelegate(this);
    pictureDelegate->setTableView(ui->tableView);
    ui->tableView->setItemDelegateForColumn(5, pictureDelegate);

    /*
    for (int i=0; i < mymodel->rowCount(); i++){
    ui->tableView->setRowHeight(i, 100);
    }
*/


}


void ClassEditor::initFieldsTable(){ // íàñòðàèâàåì òàáëèöó äëÿ îòîáðàæåíèÿ ñïèñêà ïîëåé ñóùåñòâóþùèõ êëàññîâ

    modelForDescription->setTable(tr("DescriptionOfClasses"));
    modelForDescription->setSort(0, Qt::AscendingOrder);
    modelForDescription->setEditStrategy(QSqlTableModel::OnFieldChange);
    ui->tableView_2->setModel(modelForDescription);
    ui->tableView_2->setAlternatingRowColors(true);
    ui->tableView_2->resizeColumnsToContents();
    ui->tableView_2->setItemDelegateForColumn(3, &classTableDelegate);
}

void ClassEditor::initPointersTable(){ // íàñòðàèâàåì òàáëèöó äëÿ îòîáðàæåíèÿ ñïèñêà ïîëåé-óêàçàòåëåé êëàññà

    modelForPointers->setTable(tr("DescriptionOfClasses"));
    modelForPointers->setSort(0, Qt::AscendingOrder);
    modelForPointers->setEditStrategy(QSqlTableModel::OnFieldChange);
    ui->tableView_3->setModel(modelForPointers);
    delegateForDefaultValueColomn.getItems();
    ui->tableView_3->setItemDelegateForColumn(4, &delegateForDefaultValueColomn);

  //  ui->tableView_3->resizeColumnsToContents();

}