Скачиваний:
133
Добавлен:
01.05.2014
Размер:
33.59 Кб
Скачать
#include "interface.h"
#include <QtGui>
#include <QTableWidget>
#include <QGridLayout>
#include <QPushButton>
#include "..\classes\man.h"
#include "..\classes\commodity.h"
#include "..\classes\shop.h"
#include "..\classes\comm_base.h"
#include "..\classes\saler_base.h"
#include "..\classes\shop_base.h"

gwMainForm::gwMainForm(QApplication &app) : QMainWindow() {
    //init help units
    launchDialog=1;
    QWidget *w=new QWidget(this);
    MainLayout = new QGridLayout(w);
    setCentralWidget(w);
    Tabs = new QTabWidget(this);
    Tabs->setTabPosition(QTabWidget::North);
    MainLayout->addWidget(Tabs);
    shop=new Shop;
    p=&app;
    openDialog = new QFileDialog(w);
    mess = new QMessageBox(w);
//Create Information Tab
    ShopTab = new QWidget(this);
    Tabs->addTab(ShopTab,tr("Full Infromation"));
    ShopLayout = new QGridLayout(ShopTab);
    directorBox = new QGroupBox(ShopTab); directorBox->setTitle("Shop Information");
    directorLayout = new QGridLayout(directorBox);
    //init labels
    sFirstNameLabel = new QLabel("First Name ",directorBox);
    sIndividualTaxNumberLabel = new QLabel("Individual Tax Number",directorBox);
    sLastNameLabel = new QLabel("Last Name",directorBox);
    sPensionCertificateLabel = new QLabel("Pension Certificate",directorBox);
    sRegistrationCertificateLabel = new QLabel("Registration Certificate",directorBox);
    sTelephoneLabel = new QLabel("Telephone",directorBox);
    sAddressLabel = new QLabel("Address",directorBox);
    sSpecializationLabel = new QLabel("Specialization",directorBox);
    salersPathLabel = new QLabel("Salers Database Path",ShopTab);
    goodsPathLabel = new QLabel("Goods Database Path",ShopTab);
    sFirstNameEdit = new QLineEdit(directorBox);
    sLastNameEdit = new QLineEdit(directorBox);
    sRegistrationCertificateEdit = new QLineEdit(directorBox); sRegistrationCertificateEdit->setInputMask("9999 999999 from 99.99.9999 \\by 999-999");
    sPensionCertificateEdit = new QLineEdit(directorBox);
    sIndividualTaxNumberEdit = new QLineEdit(directorBox); sIndividualTaxNumberEdit->setInputMask("9999 9999 9999 9999");
    sAddressEdit = new QLineEdit(directorBox);
    sTelephoneEdit = new QLineEdit(directorBox); sTelephoneEdit->setInputMask("+7(999)999-9999;_");
    sSpecializationEdit = new QLineEdit(directorBox);
    saveContactButton = new QPushButton("Save contact sheet",ShopTab);
    salersPathEdit = new QLineEdit(ShopTab);
    browseSalersPathButton = new QPushButton("Browse",ShopTab);
    goodsPathEdit = new QLineEdit(ShopTab);
    browseGoodsPathButton = new QPushButton("Browse",ShopTab);
    loadAllButton = new QPushButton("Load ALL",ShopTab);
    saveAllButton = new QPushButton("Save ALL",ShopTab);
    //init topology
    ShopLayout->addWidget(directorBox,0,0,1,4);
    ShopLayout->addWidget(salersPathLabel,1,0,1,1);
    ShopLayout->addWidget(goodsPathLabel,2,0,1,1);
    ShopLayout->addWidget(salersPathEdit,1,1,1,1);
    ShopLayout->addWidget(goodsPathEdit,2,1,1,1);
    ShopLayout->addWidget(salersPathEdit,1,2,1,1);
    ShopLayout->addWidget(goodsPathEdit,2,2,1,1);
    ShopLayout->addWidget(browseSalersPathButton,1,3,1,1);
    ShopLayout->addWidget(browseGoodsPathButton,2,3,1,1);
    ShopLayout->addWidget(loadAllButton,3,0,1,2);
    ShopLayout->addWidget(saveAllButton,3,1,1,2);
    directorLayout->addWidget(sFirstNameLabel,0,0,1,1);
    directorLayout->addWidget(sLastNameLabel,1,0,1,1);
    directorLayout->addWidget(sRegistrationCertificateLabel,2,0,1,1);
    directorLayout->addWidget(sPensionCertificateLabel,3,0,1,1);
    directorLayout->addWidget(sIndividualTaxNumberLabel,4,0,1,1);
    directorLayout->addWidget(sAddressLabel,5,0,1,1);
    directorLayout->addWidget(sTelephoneLabel,6,0,1,1);
    directorLayout->addWidget(sSpecializationLabel,7,0,1,1);
    directorLayout->addWidget(sFirstNameEdit,0,1,1,1);
    directorLayout->addWidget(sLastNameEdit,1,1,1,1);
    directorLayout->addWidget(sRegistrationCertificateEdit,2,1,1,1);
    directorLayout->addWidget(sPensionCertificateEdit,3,1,1,1);
    directorLayout->addWidget(sIndividualTaxNumberEdit,4,1,1,1);
    directorLayout->addWidget(sAddressEdit,5,1,1,1);
    directorLayout->addWidget(sTelephoneEdit,6,1,1,1);
    directorLayout->addWidget(sSpecializationEdit,7,1,1,1);
    directorLayout->addWidget(saveContactButton,8,0,1,1);
//Create Goods Tab
    GoodsTab = new QWidget(this);
    Tabs->addTab(GoodsTab,tr("Goods"));
    GoodsLayout = new QGridLayout(GoodsTab);
    //init table
    GoodsTable = new QTableWidget(0,5,GoodsTab);
    //init labels
    codeLabel = new QLabel("Code :",GoodsTab);
    titleLabel = new QLabel("Title :",GoodsTab);
    supplierLabel = new QLabel("Supplier :",GoodsTab);
    priceLabel = new QLabel("Price :", GoodsTab);
    countLabel = new QLabel("Count :", GoodsTab);
    codeEdit = new QLineEdit(GoodsTab); codeEdit->setInputMask("999999 99");
    titleEdit = new QLineEdit(GoodsTab);
    supplierEdit = new QLineEdit(GoodsTab);
    priceEdit = new QLineEdit(GoodsTab); priceEdit->setInputMask("0000000000.00$");
    countEdit = new QLineEdit(GoodsTab); countEdit->setInputMask("000000");
    addGoodButton = new QPushButton("Add",GoodsTab);
    delGoodButton = new QPushButton("Delete",GoodsTab);
    //init topology
    GoodsLayout->addWidget(GoodsTable,0,0,4,6);
    GoodsLayout->addWidget(codeLabel    ,4,0,1,1);
    GoodsLayout->addWidget(titleLabel   ,5,0,1,1);
    GoodsLayout->addWidget(supplierLabel,6,0,1,1);
    GoodsLayout->addWidget(priceLabel   ,7,0,1,1);
    GoodsLayout->addWidget(countLabel   ,8,0,1,1);
    
    GoodsLayout->addWidget(codeEdit     ,4,1,1,1);
    GoodsLayout->addWidget(titleEdit    ,5,1,1,1);
    GoodsLayout->addWidget(supplierEdit ,6,1,1,1);
    GoodsLayout->addWidget(priceEdit    ,7,1,1,1);
    GoodsLayout->addWidget(countEdit    ,8,1,1,1);
    
    GoodsLayout->addWidget(addGoodButton,4,2,2,4);
    GoodsLayout->addWidget(delGoodButton,6,2,2,4);
    //init Titles of Goods Table
    QStringList TableTitles;
    TableTitles<< "code" <<"title" << "supplier" << "price" << "count";
    GoodsTable->setHorizontalHeaderLabels(TableTitles);
//Create Salers Tab
    SalersTab = new QWidget(this);
    Tabs->addTab(SalersTab,tr("Salers"));    
    SalersLayout = new QGridLayout(SalersTab);
    //init Table
    SalersTable = new QTableWidget(0,6,SalersTab);
     //init labels
    firstNameLabel = new QLabel("First Name :",SalersTab);
    individualTaxNumberLabel = new QLabel("Individual Taxnumber :",SalersTab);
    lastNameLabel = new QLabel("Last Name :",SalersTab);
    pensionCertificateLabel = new QLabel("Pension Certificate :", SalersTab);
    registrationCertificateLabel = new QLabel("Registration Certificate :", SalersTab);
    telephoneLabel = new QLabel("Telephone :", SalersTab);
    //init edits
    firstNameEdit = new QLineEdit(SalersTab);
    lastNameEdit = new QLineEdit(SalersTab);
    registrationCertificateEdit = new QLineEdit(SalersTab);
    pensionCertificateEdit = new QLineEdit(SalersTab);
    individualTaxNumberEdit = new QLineEdit(SalersTab);
    telephoneEdit = new QLineEdit(SalersTab);
    //init buttons
    addSalerButton = new QPushButton("Add", SalersTab);
	delSalerButton = new QPushButton("Delete",SalersTab);
    //init topology
    SalersLayout->addWidget(SalersTable,0,0,4,6);
    SalersLayout->addWidget(firstNameLabel              ,4,0,1,1);
    SalersLayout->addWidget(lastNameLabel               ,5,0,1,1);
    SalersLayout->addWidget(registrationCertificateLabel,6,0,1,1); registrationCertificateEdit->setInputMask("9999 999999 from 99.99.9999 \\by 999-999");
    SalersLayout->addWidget(pensionCertificateLabel     ,7,0,1,1);
    SalersLayout->addWidget(individualTaxNumberLabel    ,8,0,1,1); individualTaxNumberEdit->setInputMask("9999 9999 9999 9999");
    SalersLayout->addWidget(telephoneLabel              ,9,0,1,1); telephoneEdit->setInputMask("+7(999)999-9999;_");
    SalersLayout->addWidget(firstNameEdit               ,4,1,1,1);
    SalersLayout->addWidget(lastNameEdit                ,5,1,1,1);
    SalersLayout->addWidget(registrationCertificateEdit ,6,1,1,1);
    SalersLayout->addWidget(pensionCertificateEdit      ,7,1,1,1);
    SalersLayout->addWidget(individualTaxNumberEdit     ,8,1,1,1);
    SalersLayout->addWidget(telephoneEdit               ,9,1,1,1);
    SalersLayout->addWidget(addSalerButton,8,2,3,3);
	SalersLayout->addWidget(delSalerButton,4,2,1,3);
    //init Titles of Salers Table
    TableTitles.clear();
    TableTitles << "firstName" << "lastName" << "registrationCertificate" << "individualTaxNumber" << "pensionCertificate" << "telephone";
    SalersTable->setHorizontalHeaderLabels(TableTitles);
//Create Return Tab
    ReturnTab = new QWidget(w);
    Tabs->addTab(ReturnTab,tr("Returns"));
    ReturnLayout = new QGridLayout(ReturnTab);
    ReturnTable = new QTableWidget(0,5,ReturnTab);
    makeReturn = new QPushButton("Make",ReturnTab);
    saveReturn = new QPushButton("Save",ReturnTab);
    ReturnLayout->addWidget(ReturnTable,0,0,8,2);
    ReturnLayout->addWidget(makeReturn,9,0);
    ReturnLayout->addWidget(saveReturn,9,1);
    TableTitles.clear();
    TableTitles<< "code" <<"title" << "supplier" << "price" << "count";
    ReturnTable->setHorizontalHeaderLabels(TableTitles);
//init MainWindow
    setWindowTitle("OOC Application (QT edition) v0.9.3 with Classes v0.9.5");
//connecting signals and slots
    //connect(this,SIGNAL(close()),this,SLOT(~gwMainForm()));
    //adding Buttons
    connect(addGoodButton,SIGNAL(clicked()),this,SLOT(addGood()));
    connect(addSalerButton,SIGNAL(clicked()),this,SLOT(addSaler()));
    //deleting Buttons
    connect(delGoodButton,SIGNAL(clicked()),this,SLOT(delCurGood()));
    connect(delSalerButton,SIGNAL(clicked()),this,SLOT(delCurSaler()));
    connect(GoodsTable,SIGNAL(cellChanged(int,int)),this,SLOT(editedItemGood(int,int)));
    connect(SalersTable,SIGNAL(cellChanged(int,int)),this,SLOT(editedItemSaler(int,int)));
    //returning Buttons
    connect(makeReturn,SIGNAL(clicked()),this,SLOT(doMakeReturn()));
    connect(saveReturn,SIGNAL(clicked()),this,SLOT(doSaveReturn()));
    //Information buttons
    connect(saveAllButton,SIGNAL(clicked()),this,SLOT(saveAll()));
    connect(loadAllButton,SIGNAL(clicked()),this,SLOT(loadAll()));
    connect(saveContactButton,SIGNAL(clicked()),this,SLOT(saveContact()));
    connect(browseGoodsPathButton,SIGNAL(clicked()),this,SLOT(browseGoodsPath()));
    connect(browseSalersPathButton,SIGNAL(clicked()),this,SLOT(browseSalersPath()));
//testing izvrats
    createActions();
    initMenus();
}

void gwMainForm::show(void) {
	QWidget::show();
}

void gwMainForm::saveBase(void){
    short launched=0;
    mess->information(this,"saveBase(void)","starts");
    if(focusWidget()==SalersTable){
        if(launchDialog){
            openDialog->setFileMode(QFileDialog::AnyFile);
            openDialog->setAcceptMode(QFileDialog::AcceptSave);
            openDialog->setWindowTitle(tr("Save Salers Base"));
            openDialog->setFilter(tr("Saler base files (*.scsv)"));
            launched=openDialog->exec();
        }
        if((launched)||(!launchDialog)){
            if(launchDialog){
                    mess->information(this,"openBase(void)","Dialog finished :: "+openDialog->selectedFiles()[0]);
                    salersBase = new SalerDatabase((char*)(const char *)(openDialog->selectedFiles()[0]).toAscii());
            } else {
                    mess->information(this,"openBase(void)","Pre-definefinished :: "+salersPathEdit->text());
                    salersBase = new SalerDatabase((char*)(const char *)(salersPathEdit->text().toAscii()));
            }
            salersBase->Launch(1);
            unsigned i;
            for(i=1;i<=shop->SalersList->GetCount();i++)
                ((*salersBase)<<((*(shop->SalersList))[i]).value).Write();
            salersBase->Commit();
            delete salersBase;
        }
        return ;
    }
    if(focusWidget()==GoodsTable){
        if(launchDialog){
            openDialog->setFileMode(QFileDialog::AnyFile);
            openDialog->setAcceptMode(QFileDialog::AcceptSave);
            openDialog->setWindowTitle(tr("Save Goods Base"));
            openDialog->setFilter(tr("Good base files (*.gcsv)"));
            launched=openDialog->exec();
        }
        if((launched)||(!launchDialog)){
            if(launchDialog){
                mess->information(this,"openBase(void)","finished :: "+openDialog->selectedFiles()[0]);
                goodsBase = new CommodityDatabase((char*)(const char *)(openDialog->selectedFiles()[0]).toAscii());
            } else {
                mess->information(this,"openBase(void)","Pre-definefinished :: "+goodsPathEdit->text());
                goodsBase = new CommodityDatabase((char*)(const char *)(goodsPathEdit->text().toAscii()));
            }
            goodsBase = new CommodityDatabase("base.gcsv");
            goodsBase->Launch(1);
            unsigned i;
            for(i=1;i<=shop->PriceList->GetCount();i++)
                ((*goodsBase)<<((*(shop->PriceList))[i]).value).Write();
            goodsBase->Commit();
            delete goodsBase;
        }
        return ;
    }
    saveAll();
}
    
void gwMainForm::openBase(void){
    short launched=0;
    mess->information(this,"openBase(void)","starts");
    if(focusWidget()==GoodsTable){
        if(launchDialog){
            openDialog->setFileMode(QFileDialog::ExistingFile);
            openDialog->setAcceptMode(QFileDialog::AcceptOpen);
            openDialog->setWindowTitle(tr("Open Goods Base"));
            openDialog->setFilter(tr("Good base files (*.gcsv)"));
            launched=openDialog->exec();
        }
        if((launched)||(!launchDialog)){
            if(launchDialog){
                mess->information(this,"openBase(void)","finished :: "+openDialog->selectedFiles()[0]);
                goodsBase = new CommodityDatabase((char*)(const char *)(openDialog->selectedFiles()[0]).toAscii());
            } else {
                mess->information(this,"openBase(void)","Pre-definefinished :: "+goodsPathEdit->text());
                goodsBase = new CommodityDatabase((char*)(const char *)(goodsPathEdit->text().toAscii()));
            }
            goodsBase->Launch(2);
            while(!goodsBase->Ends()){
                goodsBase->Read();
                if(!goodsBase->Ends()){
                    QString buffer;
                    buffer=goodsBase->title.ToStr();
                    titleEdit->setText(buffer);
                    buffer=goodsBase->code.ToStr();
                    codeEdit->setText(buffer);
                    buffer=goodsBase->supplier.ToStr();
                    supplierEdit->setText(buffer);
                    buffer=goodsBase->price.ToStr();
                    priceEdit->setText(buffer);
                    buffer=goodsBase->count.ToStr();
                    countEdit->setText(buffer);
                    addGood();
                }
            }
            goodsBase->Commit();
            countEdit->clear();
            codeEdit->clear();
            titleEdit->clear();
            supplierEdit->clear();
            priceEdit->clear();
            delete goodsBase;
        }
        return ;
    }
    if(focusWidget()==SalersTable){
        if(launchDialog){
            openDialog->setFileMode(QFileDialog::ExistingFile);
            openDialog->setAcceptMode(QFileDialog::AcceptOpen);
            openDialog->setWindowTitle(tr("Open Saler Base"));
            openDialog->setFilter(tr("Saler base files (*.scsv)"));
            launched=openDialog->exec();
        }
        if((launched)||(!launchDialog)){
            if(launchDialog){
                mess->information(this,"openBase(void)","Dialog finished :: "+openDialog->selectedFiles()[0]);
                salersBase = new SalerDatabase((char*)(const char *)(openDialog->selectedFiles()[0]).toAscii());
            } else {
                mess->information(this,"openBase(void)","Pre-definefinished :: "+salersPathEdit->text());
                salersBase = new SalerDatabase((char*)(const char *)(salersPathEdit->text().toAscii()));
            }
            salersBase->Launch(2);
            while(!salersBase->Ends()){
                salersBase->Read();
                if(!salersBase->Ends()){
                    QString buffer;
                    buffer=salersBase->FirstName.ToStr();
                    firstNameEdit->setText(buffer);
                    buffer=salersBase->LastName.ToStr();
                    lastNameEdit->setText(buffer);
                    buffer=salersBase->RegistrationCertificate.ToStr();
                    registrationCertificateEdit->setText(buffer);
                    buffer=salersBase->IndividualTaxNumber.ToStr();
                    individualTaxNumberEdit->setText(buffer);
                    buffer=salersBase->PensionCertificate.ToStr();
                    pensionCertificateEdit->setText(buffer);
                    buffer=salersBase->Telephone.ToStr();
                    telephoneEdit->setText(buffer);
                    addSaler();
                }
            }
            salersBase->Commit();
            delete salersBase;
            firstNameEdit->clear();
            lastNameEdit->clear();
            registrationCertificateEdit->clear();
            individualTaxNumberEdit->clear();
            pensionCertificateEdit->clear();
            telephoneEdit->clear();
        }
        return ;
    }
    loadAll();
}

void gwMainForm::addSaler(void){
    Man *newM=new Man(NULL,NULL,NULL,NULL,NULL,NULL);
    shop->SalersList->Add(newM);
    unsigned currentRow=0;
    SalersTable->setRowCount((currentRow=SalersTable->rowCount())+1);
    SalersTable->setItem(currentRow,0,new QTableWidgetItem(firstNameEdit->text()));
    SalersTable->setItem(currentRow,1,new QTableWidgetItem(lastNameEdit->text()));
    SalersTable->setItem(currentRow,2,new QTableWidgetItem(registrationCertificateEdit->text()));
    SalersTable->setItem(currentRow,3,new QTableWidgetItem(individualTaxNumberEdit->text()));
    SalersTable->setItem(currentRow,4,new QTableWidgetItem(pensionCertificateEdit->text()));
    SalersTable->setItem(currentRow,5,new QTableWidgetItem(telephoneEdit->text()));
}

   
void gwMainForm::addGood(void){
    Commodity *newC = new Commodity(NULL,NULL,NULL,NULL,NULL);
    shop->PriceList->Add(newC);
    unsigned currentRow=0;
    short found=0;
    int i=0;
    QSpinBox *spinBox;
    QString number;
    if(GoodsTable->rowCount()>=0)
        for(i=0;i<GoodsTable->rowCount();i++)
            if((found|=(GoodsTable->item(i,0)->text()==codeEdit->text())))
                break;
    if(!found){
        spinBox = new QSpinBox(GoodsTable);
        spinBox->setMaximum(9999);
        GoodsTable->setRowCount((currentRow=GoodsTable->rowCount())+1);
        GoodsTable->setItem(currentRow,0,new QTableWidgetItem(codeEdit->text()));
        GoodsTable->setItem(currentRow,1,new QTableWidgetItem(titleEdit->text()));
        GoodsTable->setItem(currentRow,2,new QTableWidgetItem(supplierEdit->text()));
        GoodsTable->setItem(currentRow,3,new QTableWidgetItem(priceEdit->text()));
        GoodsTable->setCellWidget(currentRow,4,spinBox);
        number.sprintf("%d",GoodsTable->rowCount());
        //mess->information(this,"SpinEdit",number);
        spinBox->setAccessibleDescription(number);
        spinBox->setFocus();
        connect(spinBox,SIGNAL(valueChanged(QString)),this,SLOT(goodsCountEdit(const QString&)));
        spinBox->setValue(countEdit->text().toInt());
        //GoodsTable->setItem(currentRow,4,new QTableWidgetItem(countEdit->text()));
    } else {
        //record allready exsists
        spinBox=(QSpinBox*)GoodsTable->cellWidget(i,4);
        spinBox->setFocus();
        spinBox->setValue(spinBox->value()+countEdit->text().toInt());
    }
}

void gwMainForm::delCurGood(void){
    QString m;
    if(GoodsTable->currentRow()+1) {
        m="Code :"+GoodsTable->item(GoodsTable->currentRow(),0)->text()+"\n"+"Title: "+GoodsTable->item(GoodsTable->currentRow(),1)->text();
        if(mess->critical(this,"Deleting...",m,QMessageBox::Yes,QMessageBox::No)==QMessageBox::Yes){
            if(GoodsTable->currentRow()+1){
                delete (*(shop->PriceList))[GoodsTable->currentRow()+1].value;
                shop->PriceList->Del(&(*(shop->PriceList))[GoodsTable->currentRow()+1]);
                GoodsTable->removeRow(GoodsTable->currentRow());
            }
        }
    }
}
   
void gwMainForm::delCurSaler(void){
    QString m;
    if(SalersTable->currentRow()+1) {
        m="Name :"+SalersTable->item(SalersTable->currentRow(),0)->text()+"\n"+"Surname: "+SalersTable->item(SalersTable->currentRow(),1)->text();
        if(mess->critical(this,"Deleting...",m,QMessageBox::Yes,QMessageBox::No)==QMessageBox::Yes){
            delete (*(shop->SalersList))[SalersTable->currentRow()+1].value;
            shop->SalersList->Del(&(*(shop->SalersList))[SalersTable->currentRow()+1]);
            SalersTable->removeRow(SalersTable->currentRow());
            SalersTable->repaint();
        }
    }
}

void gwMainForm::editDel(void){
    QWidget *cur=focusWidget();
    if(cur==GoodsTable){
        delCurGood();
    }
    if(cur==SalersTable){
        delCurSaler();
    }
}

void gwMainForm::editAdd(void){
    QWidget *cur=focusWidget();
    if(cur==SalersTable){
        delCurSaler();
    }
    if(cur==GoodsTable){
        delCurGood();
    }
}

void gwMainForm::editedItemGood(int row,int column){
    char *w=strdup((char*)(const char *)(GoodsTable->item(row,column)->text().toAscii()));
    switch(column){
        case 0:
            (*(shop->PriceList))[row+1].value->setCode(w);
            //mess->critical(this,"Edit",(*(shop->PriceList))[row+1].value->getCode());
            //mess->information(this,"Code",p);
            break;
        case 1:
            (*(shop->PriceList))[row+1].value->setTitle(w);
            //mess->critical(this,"Edit",(*(shop->PriceList))[row+1].value->getTitle());
            break;
        case 2:
            (*(shop->PriceList))[row+1].value->setSupplier(w);
            //mess->critical(this,"Edit",(*(shop->PriceList))[row+1].value->getSupplier());
            break;
        case 3:
            (*(shop->PriceList))[row+1].value->setPrice(w);
            //mess->critical(this,"Edit",(*(shop->PriceList))[row+1].value->getPrice());
            break;
    }
    free(w);
}

void gwMainForm::editedItemSaler(int row,int column){
    switch(column){
        case 0:
            (*(shop->SalersList))[row+1].value->setFirstName((char*)(SalersTable->item(row,column)->text().toAscii().operator const char * ()));
            break;
        case 1:
            (*(shop->SalersList))[row+1].value->setLastName((char*)(SalersTable->item(row,column)->text().toAscii().operator const char * ()));
            break;
        case 2:
            (*(shop->SalersList))[row+1].value->setRegistrationCertificate((char*)(SalersTable->item(row,column)->text().toAscii().operator const char * ()));
            break;
        case 3:
            (*(shop->SalersList))[row+1].value->setIndividualTaxNumber((char*)(SalersTable->item(row,column)->text().toAscii().operator const char * ()));
            break;
        case 4:
            (*(shop->SalersList))[row+1].value->setPensionCertificate((char*)(SalersTable->item(row,column)->text().toAscii().operator const char * ()));
            break;
        case 5:
            (*(shop->SalersList))[row+1].value->setTelephone((char*)(SalersTable->item(row,column)->text().toAscii().operator const char * ()));
            break;
    }
}

void gwMainForm::goodsCountEdit(const QString& t){
    int row=GoodsTable->focusWidget()->accessibleDescription().toInt();
    char *w=strdup((char*)(t.toAscii().operator const char * ()));
    (*(shop->PriceList))[row].value->setCount(w);
    free(w);
}

void gwMainForm::doQuit(void){
    p->closeAllWindows();
}

void gwMainForm::about(void){
    mess->information(this,"About","Application for OOP \n  creator: SPbSETU.FCS&CT.CT['Gering'] \n  library: TrollTech © QT v4.1.2GPB \n  interface: gwQInterface v0.3.1 \n  classes: gwSTL v 0.9.1 \n  2006 year");
}
    
void gwMainForm::createActions(void){
    fileSaveBase = new QAction(tr("S&ave Base as..."),this);
    fileSaveBase->setShortcut(tr("Ctrl+S"));
    fileSaveBase->setStatusTip(tr("Save Goods Base to HDD, FDD && other"));
    connect(fileSaveBase, SIGNAL(triggered()),this,SLOT(saveBase()));
    
    fileOpenBase = new QAction(tr("Op&en Base"),this);
    fileOpenBase->setShortcut(tr("Ctrl+O"));
    fileOpenBase->setStatusTip(tr("Load Goods Base from HDD, FDD && other"));
    connect(fileOpenBase, SIGNAL(triggered()),this,SLOT(openBase()));
    
    fileDoQuit = new QAction(tr("&Quit"),this);
    fileDoQuit->setShortcut(tr("Ctrl+Q"));
    fileDoQuit->setStatusTip(tr("Quit Program"));
    connect(fileDoQuit, SIGNAL(triggered()),this,SLOT(doQuit()));
    
    editDeleteRecord = new QAction(tr("Delete Record"),this);
    editDeleteRecord->setShortcut(tr("Ctrl+T"));
    editDeleteRecord->setStatusTip(tr("Delete Current Record"));
    connect(editDeleteRecord, SIGNAL(triggered()),this,SLOT(editDel()));
    
    editNewRecord = new QAction(tr("Add Record"),this);
    editNewRecord->setShortcut(tr("Ctrl+D"));
    editNewRecord->setStatusTip(tr("Add new Record"));
    connect(editNewRecord, SIGNAL(triggered()),this,SLOT(editAdd()));
    
    helpAboutQt = new QAction(tr("About Trolltech QT"),this);
    helpAboutQt->setShortcut(tr("Ctrl+U"));
    helpAboutQt->setStatusTip(tr("About QT"));
    connect(helpAboutQt, SIGNAL(triggered()),p,SLOT(aboutQt()));
    
    helpAbout = new QAction(tr("About Application"),this);
    helpAbout->setShortcut(tr("F1"));
    //helpAbout->setShortcut(tr("About this Application"));
    connect(helpAbout, SIGNAL(triggered()),this,SLOT(about()));
}
    
void gwMainForm::initMenus(void) {
    fileMenu = menuBar()->addMenu(tr("&File"));
    fileMenu->addAction(fileOpenBase);
    fileMenu->addAction(fileSaveBase);
    fileMenu->addSeparator();
    fileMenu->addAction(fileDoQuit);
    
    editMenu = menuBar()->addMenu(tr("&Edit"));
    editMenu->addAction(editNewRecord);
    editMenu->addAction(editDeleteRecord);
    
    helpMenu = menuBar()->addMenu(tr("&Help"));
    helpMenu->addAction(helpAbout);
    helpMenu->addAction(helpAboutQt);
}

gwMainForm::~gwMainForm(){
    if(shop){
        delete shop;
    }
}

void gwMainForm::doMakeReturn(void){
    ReturnTable->setRowCount(0);
    QString val;
    for(int i=0;i<GoodsTable->rowCount();i++)
        if(((QSpinBox*)GoodsTable->cellWidget(i,4))->value()>0){
            ReturnTable->setRowCount(ReturnTable->rowCount()+1);
            for(int k=0;k<4;k++){
                val = GoodsTable->item(i,k)->text();
                ReturnTable->setItem(ReturnTable->rowCount()-1,k,new QTableWidgetItem(val));
                ReturnTable->item(ReturnTable->rowCount()-1,k)->setFlags(0);
            }
            val = ((QSpinBox*)GoodsTable->cellWidget(i,4))->cleanText();
            ReturnTable->setItem(ReturnTable->rowCount()-1,4,new QTableWidgetItem(val));
            ReturnTable->item(ReturnTable->rowCount()-1,4)->setFlags(0);
        }
}

void gwMainForm::doSaveReturn(void) {
    openDialog->setFileMode(QFileDialog::AnyFile);
    openDialog->setAcceptMode(QFileDialog::AcceptSave);
    openDialog->setFilter("Text Documents (*.txt)");
    QFile fl;
    QString data;
    if(openDialog->exec()){
        fl.setFileName(openDialog->selectedFiles()[0]);
        fl.open(QIODevice::WriteOnly);
        for(int i=0;i<ReturnTable->rowCount();i++){
            data="";
            for(int k=0;k<ReturnTable->columnCount();k++){
                data+=ReturnTable->item(i,k)->text();
                if(ReturnTable->columnCount()-1!=k)
                    data+=(char)9;
            }
            if(ReturnTable->rowCount()-1!=i)
                data+="\n";
            fl.write(data.toAscii());
        }
        fl.close();
    }
}

void gwMainForm::saveContact(void){
    openDialog->setFileMode(QFileDialog::AnyFile);
    openDialog->setAcceptMode(QFileDialog::AcceptSave);
    openDialog->setFilter("Text File (*.txt)");
    QFile fl;
    QString data;
    if(openDialog->exec()){
        fl.setFileName(openDialog->selectedFiles()[0]);
        fl.open(QIODevice::WriteOnly);
        data="Director:\n";
        data+="First Name";data+=(char)9;data+=sFirstNameEdit->text();data+="\n";
        data+="Last Name";data+=(char)9;data+=sLastNameEdit->text();data+="\n";
        data+="Registration Certificate";data+=(char)9;data+=sRegistrationCertificateEdit->text();data+="\n";
        data+="Pension Certificate";data+=(char)9;data+=sPensionCertificateEdit->text();data+="\n";
        data+="Individual Tax Number";data+=(char)9;data+=sIndividualTaxNumberEdit->text();data+="\n";
        data+="Shop:\n";
        data+="Address";data+=(char)9;data+=sAddressEdit->text();data+="\n";
        data+="Telephone";data+=(char)9;data+=sTelephoneEdit->text();data+="\n";
        data+="Specialization";data+=(char)9;data+=sSpecializationEdit->text();data+="\n";
        fl.write(data.toAscii());
        fl.close();
        mess->information(this,"Contact Sheet","Done");
    }
}

void gwMainForm::loadAll(void){
    ShopDatabase *shopDB;
    openDialog->setFileMode(QFileDialog::ExistingFile);
    openDialog->setAcceptMode(QFileDialog::AcceptOpen);
    openDialog->setFilter("Shop Base (*.mcsv)");
    if(openDialog->exec()){
        shopDB = new ShopDatabase((char*)(const char*)openDialog->selectedFiles()[0].toAscii());
        shopDB->Launch(2);
        shopDB->Read();
        shopDB->Commit();
        sFirstNameEdit->setText(shopDB->FirstName.ToStr());
        sLastNameEdit->setText(shopDB->LastName.ToStr());
        sRegistrationCertificateEdit->setText(shopDB->RegistrationCertificate.ToStr());
        sPensionCertificateEdit->setText(shopDB->PensionCertificate.ToStr());
        sIndividualTaxNumberEdit->setText(shopDB->IndividualTaxNumber.ToStr());
        sAddressEdit->setText(shopDB->Address.ToStr());
        sTelephoneEdit->setText(shopDB->Telephone.ToStr());
        sSpecializationEdit->setText(shopDB->Specialization.ToStr());
        salersPathEdit->setText(shopDB->SalersPath.ToStr());
        goodsPathEdit->setText(shopDB->GoodsPath.ToStr());
        delete shopDB;
        launchDialog=0;
        GoodsTable->setFocus();
        openBase();
        SalersTable->setFocus();
        openBase();
        mess->information(this,"Loaded","Done");
        launchDialog=1;
    }
}

void gwMainForm::saveAll(void){
    ShopDatabase *shopDB;
    openDialog->setFileMode(QFileDialog::AnyFile);
    openDialog->setAcceptMode(QFileDialog::AcceptSave);
    openDialog->setFilter("Shop Base (*.mcsv)");
    if(openDialog->exec()){
        shopDB = new ShopDatabase((char*)(const char*)openDialog->selectedFiles()[0].toAscii());
        shopDB->Launch(1);
        shopDB->FirstName=(char*)(const char *)sFirstNameEdit->text().toAscii();
        shopDB->LastName=(char*)(const char *)sLastNameEdit->text().toAscii();
        shopDB->RegistrationCertificate=(char*)(const char *)sRegistrationCertificateEdit->text().toAscii();
        shopDB->PensionCertificate=(char*)(const char *)sPensionCertificateEdit->text().toAscii();
        shopDB->IndividualTaxNumber=(char*)(const char *)sIndividualTaxNumberEdit->text().toAscii();
        shopDB->Telephone=(char*)(const char *)sTelephoneEdit->text().toAscii();
        shopDB->Address=(char*)(const char *)sAddressEdit->text().toAscii();
        shopDB->Specialization=(char*)(const char *)sSpecializationEdit->text().toAscii();
        shopDB->SalersPath=(char*)(const char *)salersPathEdit->text().toAscii();
        shopDB->GoodsPath=(char*)(const char *)goodsPathEdit->text().toAscii();
        shopDB->Write();
        shopDB->Commit();
        delete shopDB;
        launchDialog=0;
        GoodsTable->setFocus();
        saveBase();
        SalersTable->setFocus();
        saveBase();
        mess->information(this,"Saved","Done");
        launchDialog=1;
    }
}

void gwMainForm::browseGoodsPath(void){
    openDialog->setFileMode(QFileDialog::AnyFile);
    openDialog->setAcceptMode(QFileDialog::AcceptOpen);
    openDialog->setWindowTitle(tr("Open Goods Base"));
    openDialog->setFilter(tr("Good base files (*.gcsv)"));
    if(openDialog->exec()){
        goodsPathEdit->setText(openDialog->selectedFiles()[0]);
    }
}

void gwMainForm::browseSalersPath(void){
    openDialog->setFileMode(QFileDialog::AnyFile);
    openDialog->setAcceptMode(QFileDialog::AcceptOpen);
    openDialog->setWindowTitle(tr("Open Salers Base"));
    openDialog->setFilter(tr("Saler base files (*.scsv)"));
    if(openDialog->exec()){
        salersPathEdit->setText(openDialog->selectedFiles()[0]);
    }
}
Соседние файлы в папке qt