/** @file genericFunctions.cpp @brief Serie de funciones genéricas para el Sistema de Matrices de Contabilidad Social @date 01/08/2016 @author Rodrigo Boet @copyright GNU Public License versión 2 (GPLv2) */ #include /** @brief Función que permite obtener los elementos distintos en una lista @author Autor: Rodrigo Boet @date Fecha: 01/08/2016 @param Lista para en la que se definirán los elementos distintos @return elementos distintos de la lista */ int diferent_elements(QStringList my_list) { QStringList elements; foreach (QString item, my_list) { if(!elements.contains(item)) { elements.append(item); } } return elements.count(); } /** @brief Función que permite agregar un mensaje en el label cuando se selecciona la opción de componentes @date 29/07/2016 @author Rodrigo Boet @param Recibe el widget de la tabla @param Recibe la fila de la que se extraeran los datos @param Recibe el inicio de la fila de donde extraeran los datos @param Recibe el fin de la fila de donde extraeran los datos @return retorna una lista con los elementos */ QStringList get_list(QTableWidget *tw, int row, int init, int end) { QStringList elements; for(int i=init;iitem(row,i)->text()); } return elements; } /** @brief Funcion para agregar el span en los titulos de la matriz seleccionada @date 10/10/2015 @author Rodrigo Boet @param Recibe el widget de la tabla */ void titleSeleccionar(QTableWidget *tw) { QStringList CuentaFila; QStringList CuentaColumna; int fila = tw->rowCount(); int columna = tw->columnCount(); /* Se crea una lista con las veces que se repiten cuentas en filas/columnas*/ //Fila for(int i = 2;iitem(i,0)->text()); } //Columna for(int j = 2;jitem(0,j)->text()); } /* Se crea el span tomando en cuenta las veces que se repite una cuenta en las listas */ //Fila for(int i=2;iitem(i,0)->text(); if(CuentaFila.contains(accName)) { int contar = CuentaFila.count(accName); tw->setSpan(i,0,contar,1); CuentaFila.removeAll(accName); } if(CuentaFila.isEmpty()) { break; } } //Columna for(int j=2;jitem(0,j)->text(); if(CuentaColumna.contains(accName)) { int contar = CuentaColumna.count(accName); tw->setSpan(0,j,1,contar); CuentaColumna.removeAll(accName); } if(CuentaColumna.isEmpty()) { break; } } } /** @brief Funcion para generar las tablas de comparación entre matrices @date 10/10/2015 @author Rodrigo Boet @param Recibe el widget de la tabla que se modificará @param Recibe el widget de la tabla de donde se sacan los valores */ void crearTablaComparar(QTableWidget *to, QTableWidget *tw) { int count = to->rowCount(); int col = to->columnCount(); to->insertColumn(col); to->insertColumn(col); for(int i=0;iitem(i,2)->text()); item1->setTextAlignment(Qt::AlignCenter); item1->setFlags(item1->flags() ^ Qt::ItemIsEditable); QTableWidgetItem *item2 = new QTableWidgetItem(tw->item(i,3)->text()); item2->setTextAlignment(Qt::AlignCenter); item2->setFlags(item2->flags() ^ Qt::ItemIsEditable); if(i==0) { QFont font; font.setBold(true); item1->setFont(font); item2->setFont(font); } to->setItem(i,col,item1); to->setItem(i,col+1,item2); } to->resizeColumnsToContents(); to->resizeRowsToContents(); } /** @brief Funcion para agregar los estilos de la tabla de encadenamientos @date 10/10/2015 @author Rodrigo Boet @param Recibe el widget de la tabla */ void encadenamientosStyle(QTableWidgetItem *ti) { QFont font; font.setBold(true); ti->setFont(font); ti->setFlags(ti->flags() ^ Qt::ItemIsEditable); ti->setTextAlignment(Qt::AlignCenter); } /** @brief Funcion para agregar un texto en una tabla en los rangos especificados @date 10/10/2015 @author Rodrigo Boet @param Recibe el widget de la tabla donde se agregrá el texto @param Recibe desde donde se escribirá el texto @param Recibe hasta donde se escribirá el texto @param Recibe el texto */ void tableItem(QTableWidget *tw, int inicio, int fin, QString texto) { for(int i=inicio;isetFlags(itemFila->flags() ^ Qt::ItemIsEditable); QTableWidgetItem *itemColumna = new QTableWidgetItem(texto); itemColumna->setFlags(itemColumna->flags() ^ Qt::ItemIsEditable); tw->setItem(0,i,itemFila); tw->setItem(i,0,itemColumna); } } /** @brief Funcion para agregar el estilo de una celda en negrita(letra blanca) con fondo de color azul (Cuenta) @date 10/10/2015 @author Rodrigo Boet @param Recibe el widget de la tabla en la que se agregarán los estilos */ void CellStyle(QTableWidgetItem *ti) { ti->setBackgroundColor(QColor(53,140,203)); ti->setTextColor(Qt::white); QFont font; font.setBold(true); ti->setFont(font); } /** @brief Funcion para agregar el estilo de una celda con fondo de color gris (Componente) @date 10/10/2015 @author Rodrigo Boet @param Recibe el widget de la tabla en la que se agregarán los estilos */ void CellStyleComponente(QTableWidgetItem *ti) { ti->setBackgroundColor(QColor(221,227,230)); } /** @brief Funcion para agregar el estilo de una celda en negrita(letras blancas) con fondo de color gris oscuro (endogéna-exogéna) @date 10/10/2015 @author Rodrigo Boet @param Recibe el widget de la tabla en la que se agregarán los estilos */ void CellStyleExEn(QTableWidgetItem *ti) { ti->setBackgroundColor(QColor(110,110,110)); ti->setTextColor(Qt::white); QFont font; font.setBold(true); ti->setFont(font); } /** @brief Funcion que escribe en una columna o fila con la lista dada @date 10/10/2015 @author Rodrigo Boet @param Recibe la lista de donde se sacarán los valores @param Recibe el widget de la tabla @param Recibe la opción (1 para escribir en columna y 0 para la fila) */ void insertRowExogena(QList lista,QTableWidget *tw,int opcion) { for(int i=0;irowCount();i++) { QTableWidgetItem *twi =new QTableWidgetItem; twi->setText(lista[i]); twi->setFlags(twi->flags() ^ Qt::ItemIsEditable); int fin=tw->rowCount(); if(opcion==1) { tw->setItem(fin-1,i,twi); } else { tw->setItem(i,fin-1,twi); } } } /** @brief Funcion para volver la celda(0,0) no editable @date 08/07/2015 @author Rodrigo Boet @param Recibe el widget de la tabla */ void noEditColZero(QTableWidget *tw) { QTableWidgetItem *ValoraInsertar = new QTableWidgetItem; ValoraInsertar->setFlags(ValoraInsertar->flags() ^ Qt::ItemIsEditable); tw->setItem(0,0,ValoraInsertar); } /** @brief Funcion estandar para hacer algunas celdas no editables debido a que son dificiles de manipular(por motivos de colocado y borrado dinamico) @date 08/07/2015 @author Rodrigo Boet @param Recibe el widget de la tabla @param Recibe el inicio @param Recibe el fin @param Recibe la columna (por defecto 0) */ void ItemsNoEditable(QTableWidget *tw,int inicio,int fin,int col) { noEditColZero(tw); for(int i=inicio;isetFlags(ValoraInsertarFila->flags() ^ Qt::ItemIsEditable); tw->setItem(i,col,ValoraInsertarFila); QTableWidgetItem *ValoraInsertarColumna = new QTableWidgetItem; ValoraInsertarColumna->setFlags(ValoraInsertarColumna->flags() ^ Qt::ItemIsEditable); tw->setItem(col,i,ValoraInsertarColumna); } } /** @brief Función para retornar todos los componentes en una lista @date 10/10/2015 @author Rodrigo Boet @param Recibe el widget de la tabla @return retorna una lista con los elementos */ QStringList ObtenerComponentes(QTableWidget *tw) { QStringList MiLista; int contador=tw->rowCount(); for(int i=1;iitem(0,i)->text()); } return MiLista; } /** @brief Funcion que permite llenar una lista con los elementos en un intervalo dado(fila o columna) @date 10/10/2015 @author Rodrigo Boet @param Recibe la lista en la que escribirán los componenentes @param Recibe el widget de la tabla @param Recibe el valor de fila/cloumna @param Recibe la opción (1 para fila y 0 para columna) @return retorna una lista con los elementos */ QList llenarLista(QList lista,QTableWidget *tw,int valor,int opcion) { int cantidad = tw->rowCount(); for(int i=0;iitem(valor,i)->text()); } else { lista.append(tw->item(i,valor)->text()); } } return lista; } /** @brief Funcion para crear una tabla cuadrada vacía en un rango dado @date 08/07/2015 @author Rodrigo Boet @param Recibe la dimensión de la tabla @param Recibe el widget de la tabla */ void CrearTablaVacia(int contador, QTableWidget *tw) { for(int k=0;kinsertRow(k); tw->insertColumn(k); } } /** @brief Funcion para crear una tabla vacia no cuadrada, específicamente para los encadenamientos @date 08/07/2015 @author Rodrigo Boet @param Recibe la dimensión de las filas @param Recibe el widget de la tabla @param Recibe la dimensión de las columnas */ /* Funcion para crear una tabla vacia, específicamente para los encadenamientos */ void crearTablaVaciaEncadenamiento(int filas, QTableWidget *tw,int columnas) { for(int j=0;jinsertColumn(0); } for(int k=0;kinsertRow(k); } } /** @brief Funcion que permite contar los elementos en el map o diccionario @date 10/10/2015 @author Rodrigo Boet @param Recibe el diccionario (clave,valor) -> QString y QStringList Respectivamente @return retorna la cantidad de elementos */ int contarElementosMap(QMap diccionario) { int contador=0; foreach(QString key,diccionario.keys()) { contador+=diccionario[key].count(); } return contador; }