Changeset aa628c3 in mmcs for mainwindow.C


Ignore:
Timestamp:
Aug 11, 2015, 5:05:40 PM (9 years ago)
Author:
rboet <rboet@…>
Branches:
master, matrices
Children:
8daa049, 04999c9
Parents:
1523c34
Message:

Modificacion de pestaña endogena-exogena, ct horizontal y vertical, color en columnas de totales

File:
1 edited

Legend:

Unmodified
Added
Removed
  • mainwindow.C

    rbd5e45b raa628c3  
    106106{
    107107    QMessageBox msBox(QMessageBox::Question,"Alerta","¿Desea Salir?", QMessageBox::Yes | QMessageBox::No,this);
    108     msBox.setButtonText(QMessageBox::Yes,"Si");
     108    msBox.setButtonText(QMessageBox::Yes,"&Si");
    109109    if(msBox.exec()==QMessageBox::No)
    110110    {
     
    196196    EndoExo.addAction(&actionVariableExogena);
    197197
    198     actionAn.setText("Coeficientes &Horizontales");
    199     actionAn.setDisabled(true);
    200     EndoExo.addAction(&actionAn);
    201 
    202198    actionLa.setText("Multiplicadores de &Leontief");
    203199    actionLa.setDisabled(true);
     
    216212MainWindow::MainWindow()
    217213    : actionLoadMatrix(this), actionExportMatrix(this), actionQuit(this),actionCH(this), actionCV(this),
    218       actionVariableExogena(this),actionAn(this),actionLa(this),actionEncadenamiento(this), formLoadMatrix(0)
     214      actionVariableExogena(this),actionLa(this),actionEncadenamiento(this), formLoadMatrix(0)
    219215{
    220216    tabWidget = new QTabWidget;
     
    360356
    361357
     358void MainWindow::slotCoeficienteVertical()
     359{
     360    actionCV.setDisabled(true);
     361    tabWidget->addTab(new QWidget,"CT_Vertical");
     362    QTableWidget *tw = findChild<QTableWidget *>("TablaPrincipal");
     363
     364    /*      Se eliminan la fila y columna (0,0) para los calculos*/
     365    insertremoveRowCol(tw,0,false);
     366
     367    QTableWidget *CT_VerticalTW = new QTableWidget;
     368    int count=tw->rowCount();
     369    CrearTablaVacia(count,CT_VerticalTW);//Se crea una tabla vacia
     370    /* ****     Se coloca como no editable la celda(0,0)    ***** */
     371    noEditColZero(CT_VerticalTW);
     372    /*****      Se llena la tabla vacia con los valores de la tabla principal ****/
     373
     374    CalcularAn(tw,CT_VerticalTW,new QTableWidget,count,false);//Funcion para calcular el Coeficiente Tecnico Horizontal (An)
     375
     376    /*      Se agrega la columna y fila (0,0) y se insertan los titulos de las cuentas      */
     377    insertremoveRowCol(tw,0,true);
     378    insertremoveRowCol(CT_VerticalTW,0,true);
     379    setAccountTitle(tw);
     380    setAccountTitle(CT_VerticalTW);
     381
     382    int indice=ObtenerIndice("CT_Vertical");//Se obtiene el indice de la pestaña
     383    QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
     384    layoutCentralWidget->addWidget(CT_VerticalTW);
     385    QWidget *widget = tabWidget->widget(indice);
     386    widget->setLayout(layoutCentralWidget);//Se añade el widget y layout a la pestaña creada
     387
     388}
     389
    362390void MainWindow::slotCoeficienteHorizontal()
    363391{
     
    369397    insertremoveRowCol(tw,0,false);
    370398
     399    int count=tw->rowCount();
    371400    QTableWidget *CT_HorizontalTW = new QTableWidget;
    372     int count=tw->rowCount();
    373     CrearTablaVacia(count,CT_HorizontalTW);//Se crea una tabla vacia
     401    CrearTablaVacia(count,CT_HorizontalTW); //Se Crea la tabla vacia
    374402    /* ****     Se coloca como no editable la celda(0,0)    ***** */
    375403    noEditColZero(CT_HorizontalTW);
    376     /*****      Se llena la tabla vacia con los valores de la tabla principal ****/
    377 
    378     CalcularAn(tw,CT_HorizontalTW,new QTableWidget,count,false);//Funcion para calcular el Coeficiente Tecnico Horizontal (An)
    379 
    380     /*      Se agrega la columna y fila (0,0) y se insertan los titulos de las cuentas      */
    381     insertremoveRowCol(tw,0,true);
    382     insertremoveRowCol(CT_HorizontalTW,0,true);
    383     setAccountTitle(tw);
    384     setAccountTitle(CT_HorizontalTW);
    385 
    386     int indice=ObtenerIndice("CT_Horizontal");//Se obtiene el indice de la pestaña
    387     QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
    388     layoutCentralWidget->addWidget(CT_HorizontalTW);
    389     QWidget *widget = tabWidget->widget(indice);
    390     widget->setLayout(layoutCentralWidget);//Se añade el widget y layout a la pestaña creada
    391 
    392 }
    393 
    394 void MainWindow::slotCoeficienteVertical()
    395 {
    396     actionCV.setDisabled(true);
    397     tabWidget->addTab(new QWidget,"CT_Vertical");
    398     QTableWidget *tw = findChild<QTableWidget *>("TablaPrincipal");
    399 
    400     /*      Se eliminan la fila y columna (0,0) para los calculos*/
    401     insertremoveRowCol(tw,0,false);
    402 
    403     int count=tw->rowCount();
    404     QTableWidget *CT_VerticalTW = new QTableWidget;
    405     CrearTablaVacia(count,CT_VerticalTW); //Se Crea la tabla vacia
    406     /* ****     Se coloca como no editable la celda(0,0)    ***** */
    407     noEditColZero(CT_VerticalTW);
    408404    /*****      Se llena la tabla vacia con los valores de la tabla principal ****/
    409405    for(int i=0;i<count-1;i++)
     
    429425                value = Separador(ValoraInsertar,false);
    430426                ValoraInsertar->setText(value);
    431                 CT_VerticalTW->setItem(i,j,ValoraInsertar);
     427                CT_HorizontalTW->setItem(i,j,ValoraInsertar);
    432428            }
    433429            /****           En este else se llenan las celdas con fila y columna 0, es decir las que tienen nombre *****/
     
    437433                QTableWidgetItem *ValoraInsertar = new QTableWidgetItem(value);
    438434                ValoraInsertar->setFlags(ValoraInsertar->flags() ^ Qt::ItemIsEditable);
    439                 CT_VerticalTW->setItem(j,i,ValoraInsertar);
     435                CT_HorizontalTW->setItem(j,i,ValoraInsertar);
    440436            }
    441437
     
    444440    /*      Se agrega la columna y fila (0,0) y se insertan los titulos de las cuentas      */
    445441    insertremoveRowCol(tw,0,true);
    446     insertremoveRowCol(CT_VerticalTW,0,true);
     442    insertremoveRowCol(CT_HorizontalTW,0,true);
    447443    setAccountTitle(tw);
    448     setAccountTitle(CT_VerticalTW);
    449 
    450     int indice=ObtenerIndice("CT_Vertical");//Se obtiene el indice de la pestaña
     444    setAccountTitle(CT_HorizontalTW);
     445
     446    int indice=ObtenerIndice("CT_Horizontal");//Se obtiene el indice de la pestaña
    451447    QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
    452     layoutCentralWidget->addWidget(CT_VerticalTW);
     448    layoutCentralWidget->addWidget(CT_HorizontalTW);
    453449    QWidget *widget = tabWidget->widget(indice);
    454450    widget->setLayout(layoutCentralWidget);//Se añade el widget y layout a la pestaña creada
     
    464460    QMessageBox msBox(QMessageBox::Question,"Deshacer","¿Desea deshacer todos los cambios?",
    465461                      QMessageBox::Yes | QMessageBox::No,this);
    466     msBox.setButtonText(QMessageBox::Yes,"Si");
     462    msBox.setButtonText(QMessageBox::Yes,"&Si");
    467463    msBox.setDefaultButton(QMessageBox::Yes);
    468464    if(msBox.exec()==QMessageBox::Yes)
     
    585581                for(int i=inicio;i<fin+1;i++)
    586582                {
    587                     QString item=tablaEE->item(0,i)->text();
     583                    QString item=tablaEE->item(0,i-2)->text();
    588584                    if(item==key2)
    589585                    {
    590586                        QList<QString> fila;
    591                         fila=llenarLista(fila,tablaEE,i,1);
    592                         tablaEE->removeRow(i);
     587                        fila=llenarLista(fila,tablaEE,i-2,1);
     588                        tablaEE->removeRow(i-2);
    593589                        tablaEE->insertRow(tablaEE->rowCount());
    594590                        insertRowExogena(fila,tablaEE,1);
     
    596592
    597593                        QList<QString> columna;
    598                         columna=llenarLista(columna,tablaEE,i,0);
    599                         tablaEE->removeColumn(i);
     594                        columna=llenarLista(columna,tablaEE,i-2,0);
     595                        tablaEE->removeColumn(i-2);
    600596                        tablaEE->insertColumn(tablaEE->columnCount());
    601597                        insertRowExogena(columna,tablaEE,0);
     
    624620
    625621        //Se crea la nueva pestaña
    626         tabWidget->addTab(new QWidget,"Endogena-Exogena");
    627         int indice=ObtenerIndice("Endogena-Exogena");//Se obtiene el indice de la pestaña
     622        tabWidget->addTab(new QWidget,"Tipo de Variable");
     623        int indice=ObtenerIndice("Tipo de Variable");//Se obtiene el indice de la pestaña
    628624        QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
    629625        layoutCentralWidget->addWidget(tablaEE);
     
    631627        widget->setLayout(layoutCentralWidget);//Se añade el widget y layout a la pestaña creada
    632628        formVariablesExogenas->close();
    633         connect(&actionAn,SIGNAL(triggered()),this,SLOT(slotAn()));
    634         actionAn.setEnabled(true);
     629        //Se activa la opcion de los multiplicadores de leontief
     630        connect(&actionLa,SIGNAL(triggered()),this,SLOT(slotLa()));
     631        actionLa.setEnabled(true);
    635632
    636633        /*                  Se crea la pestaña endogena-endogena            */
     
    695692        widget->setLayout(layoutCentralWidget);//Se añade el widget y layout a la pestaña creada
    696693        formVariablesExogenas->close();
    697         connect(&actionAn,SIGNAL(triggered()),this,SLOT(slotAn()));
    698         actionAn.setEnabled(true);
    699694
    700695        /*                  Se crea la pestaña endogena-endogena            */
     
    716711}
    717712
    718 /***        Slot para calcular el coeficiente tecnico horizontal de la matriz endogena/exogena      ***/
    719 void MainWindow::slotAn()
    720 {
    721     actionAn.setDisabled(true);
     713/***        Slot para calcular el coeficiente tecnico vertical de la matriz endogena/exogena      ***/
     714void MainWindow::EndogenaAn()
     715{
    722716    tabWidget->addTab(new QWidget,"An");
    723717    QTableWidget *tw = findChild<QTableWidget *>("MatrizEndogenaEndogena");
     
    753747
    754748    crearMatrizEndogena(tablaAn);
    755     connect(&actionLa,SIGNAL(triggered()),this,SLOT(slotLa()));
    756     actionLa.setEnabled(true);
    757749}
    758750
    759751void MainWindow::slotLa()
    760752{
     753    EndogenaAn();
    761754    QTableWidget *tw = findChild<QTableWidget *>("MatrizAn");
    762755    double matrizIdentidad[200][200];
     
    909902    QMessageBox msBox(QMessageBox::Question,"Agregar cuenta","¿Está seguro que agregar la cuenta?",
    910903                      QMessageBox::Yes | QMessageBox::No,this);
    911     msBox.setButtonText(QMessageBox::Yes,"Si");
     904    msBox.setButtonText(QMessageBox::Yes,"&Si");
    912905    msBox.setDefaultButton(QMessageBox::Yes);
    913906    if(msBox.exec()==QMessageBox::Yes)
     
    1001994    QMessageBox msBox(QMessageBox::Question,"Finalizar Carga","¿Está seguro que desea finalizar?",
    1002995                      QMessageBox::Yes | QMessageBox::No,this);
    1003     msBox.setButtonText(QMessageBox::Yes,"Si");
     996    msBox.setButtonText(QMessageBox::Yes,"&Si");
    1004997    msBox.setDefaultButton(QMessageBox::Yes);
    1005998    if(msBox.exec()==QMessageBox::Yes)
     
    10611054    tableWidget->insertRow(filas);
    10621055    tableWidget->insertColumn(columnas);
     1056    QTableWidgetItem *ColumnaTotal = new QTableWidgetItem;
     1057    ColumnaTotal->setText("Total en Columna");
     1058    CellStyle(ColumnaTotal);//Estilo de la Celda
     1059    ColumnaTotal->setFlags(ColumnaTotal->flags() ^ Qt::ItemIsEditable);
    10631060    QTableWidgetItem *FilaTotal = new QTableWidgetItem;
    10641061    FilaTotal->setText("Total en Fila");
     1062    CellStyle(FilaTotal);//Estilo de la Celda
    10651063    FilaTotal->setFlags(FilaTotal->flags() ^ Qt::ItemIsEditable);
    1066     QTableWidgetItem *ColumnaTotal = new QTableWidgetItem;
    1067     ColumnaTotal->setText("Total en Columna");
    1068     ColumnaTotal->setFlags(ColumnaTotal->flags() ^ Qt::ItemIsEditable);
    1069     tableWidget->setItem(columnas,inicio-1,FilaTotal);
    1070     tableWidget->setItem(inicio-1,filas,ColumnaTotal);
     1064    tableWidget->setItem(columnas,inicio-1,ColumnaTotal);
     1065    tableWidget->setItem(inicio-1,filas,FilaTotal);
    10711066    for(int i=inicio;i<filas;i++)
    10721067    {
     
    10871082        Valor1->setText(value1);
    10881083        Valor1->setFlags(Valor1->flags() ^ Qt::ItemIsEditable);
     1084        CellStyle(Valor1);//Estilo de la Celda
    10891085        QTableWidgetItem *Valor2 = new QTableWidgetItem;
    10901086        Valor2->setText(QString::number(SumaColumna,'f',2));
     
    10921088        Valor2->setText(value2);
    10931089        Valor2->setFlags(Valor2->flags() ^ Qt::ItemIsEditable);
     1090        CellStyle(Valor2);//Estilo de la Celda
    10941091        tableWidget->setItem(filas,i,Valor1);//Inserta en Filas
    10951092        tableWidget->setItem(i,filas,Valor2);//Inserta en Columnas
    10961093    }
    1097 
     1094    /*          Se coloca como no editable la última celda      */
     1095    QTableWidgetItem *Valor = new QTableWidgetItem;
     1096    Valor->setFlags(Valor->flags() ^ Qt::ItemIsEditable);
     1097    tableWidget->setItem(filas,columnas,Valor);
    10981098}
    10991099
     
    11021102    QMessageBox msBox(QMessageBox::Question,"Restaurar Celdas","¿Desea Restaurar el titulo de todas las celdas?",
    11031103                      QMessageBox::Yes | QMessageBox::No,this);
    1104     msBox.setButtonText(QMessageBox::Yes,"Si");
     1104    msBox.setButtonText(QMessageBox::Yes,"&Si");
    11051105    msBox.setDefaultButton(QMessageBox::Yes);
    11061106    if(msBox.exec()==QMessageBox::Yes)
     
    11161116    QMessageBox msBox(QMessageBox::Question,"Modificar Cuenta","¿Desea Modificar la Cuenta Actual?",
    11171117                      QMessageBox::Yes | QMessageBox::No,this);
    1118     msBox.setButtonText(QMessageBox::Yes,"Si");
     1118    msBox.setButtonText(QMessageBox::Yes,"&Si");
    11191119    msBox.setDefaultButton(QMessageBox::Yes);
    11201120    if(msBox.exec()==QMessageBox::Yes)
     
    13821382QList<QString> MainWindow::llenarLista(QList<QString> lista,QTableWidget *tw,int valor,int opcion)
    13831383{
    1384     for(int i=0;i<tw->rowCount();i++)
     1384    int cantidad = tw->rowCount();
     1385    for(int i=0;i<cantidad;i++)
    13851386    {
    13861387        if(opcion==1)
     
    14331434    if(elementos<12)
    14341435    {
    1435         CuentaEndogenaColumna->setText("Cuentas \nExogenas");
     1436        CuentaEndogenaColumna->setText("Cuentas \nEndogenas");
    14361437    }
    14371438    else
     
    16051606         }
    16061607    }
    1607 
    1608     mat inverse = inv(A);
    1609 
    1610     QTableWidget *tablaLa = new QTableWidget;
    1611     tablaLa->setObjectName("MatrizLa");
    1612     CrearTablaVacia(cantidad,tablaLa);
    1613     for(int i=0;i<cantidad-1;i++)
    1614     {
    1615         for(int j=0;j<cantidad-1;j++)
    1616         {
    1617             double value = inverse.at(i,j);
    1618             qDebug()<<"double "<<value;
    1619             QTableWidgetItem *ValoraInsertar = new QTableWidgetItem(QString::number(value,'f',2));
    1620             ValoraInsertar->setFlags(ValoraInsertar->flags() ^ Qt::ItemIsEditable);
    1621             tablaLa->setItem(i,j,ValoraInsertar);
    1622 
    1623          }
    1624     }
    1625     tabWidget->addTab(new QWidget,"La");
    1626     int indice=ObtenerIndice("La");//Se obtiene el indice de la pestaña
    1627     QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
    1628     layoutCentralWidget->addWidget(tablaLa);
    1629     QWidget *widget = tabWidget->widget(indice);
    1630     widget->setLayout(layoutCentralWidget);//Se añade el widget y layout a la pestaña creada
     1608    double determinant = det(A);
     1609    if(determinant==0)
     1610    {
     1611        QMessageBox::critical(this,"Alerta","El determinante es Nulo");
     1612    }
     1613    else
     1614    {
     1615        mat inverse = inv(A);
     1616        QTableWidget *tablaMa = new QTableWidget;
     1617        tablaMa->setObjectName("MatrizMa");
     1618        CrearTablaVacia(cantidad,tablaMa);
     1619        for(int i=0;i<cantidad-1;i++)
     1620        {
     1621            for(int j=0;j<cantidad-1;j++)
     1622            {
     1623                double value = inverse.at(i,j);
     1624                qDebug()<<"double "<<value;
     1625                QTableWidgetItem *ValoraInsertar = new QTableWidgetItem(QString::number(value,'f',2));
     1626                ValoraInsertar->setFlags(ValoraInsertar->flags() ^ Qt::ItemIsEditable);
     1627                tablaMa->setItem(i,j,ValoraInsertar);
     1628
     1629             }
     1630        }
     1631        tabWidget->addTab(new QWidget,"Ma");
     1632        int indice=ObtenerIndice("Ma");//Se obtiene el indice de la pestaña
     1633        QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
     1634        layoutCentralWidget->addWidget(tablaMa);
     1635        QWidget *widget = tabWidget->widget(indice);
     1636        widget->setLayout(layoutCentralWidget);//Se añade el widget y layout a la pestaña creada
     1637
     1638        actionLa.setDisabled(true);
     1639    }
     1640
    16311641
    16321642
     
    16831693void MainWindow::setAccountTitle(QTableWidget *tw)
    16841694{
     1695    int myinicio=99;
    16851696    for(int i=0;i<numAccounts;i++)
    16861697    {
     
    16921703        int fin=SBEnd->value();
    16931704        QString nombreCuenta=le->text();
     1705
     1706        if(myinicio>inicio)
     1707        {
     1708            myinicio=inicio;
     1709        }
    16941710
    16951711
     
    17061722        tw->setSpan(0,inicio-1,1,espacio);
    17071723    }
     1724    ItemsNoEditable(tw,1,myinicio-1);
    17081725}
    17091726
     
    17151732        tw->insertRow(rowcol);
    17161733        tw->insertColumn(rowcol);
     1734        ItemsNoEditable(tw,tw->rowCount()-1,tw->rowCount());
    17171735    }
    17181736    else//de lo contrario se remueve
     
    17831801
    17841802}
     1803
     1804/* Funcion estandar para hacer algunas celdas no editables debido a que son dificiles de manipular(por motivos de colocado y borrado dinamico)*/
     1805void MainWindow::ItemsNoEditable(QTableWidget *tw,int inicio,int fin)
     1806{
     1807    noEditColZero(tw);
     1808    for(int i=inicio;i<fin;i++)
     1809    {
     1810        QTableWidgetItem *ValoraInsertarFila = new QTableWidgetItem;
     1811        ValoraInsertarFila->setFlags(ValoraInsertarFila->flags() ^ Qt::ItemIsEditable);
     1812        tw->setItem(i,0,ValoraInsertarFila);
     1813        QTableWidgetItem *ValoraInsertarColumna = new QTableWidgetItem;
     1814        ValoraInsertarColumna->setFlags(ValoraInsertarColumna->flags() ^ Qt::ItemIsEditable);
     1815        tw->setItem(0,i,ValoraInsertarColumna);
     1816
     1817    }
     1818}
     1819
     1820/*          Funcion para agregar el estilo de una celda en negrita con fondo de color azul        */
     1821void MainWindow::CellStyle(QTableWidgetItem *ti)
     1822{
     1823    ti->setBackgroundColor(QColor(53,140,203));
     1824    ti->setTextColor(Qt::white);
     1825    QFont font;
     1826    font.setBold(true);
     1827    ti->setFont(font);
     1828}
Note: See TracChangeset for help on using the changeset viewer.