source: mmcs/genericFunctions.cpp @ dfabbb4

Last change on this file since dfabbb4 was dfabbb4, checked in by rudmanmrrod <rudman22@…>, 8 years ago

Agregada librería para los reportes, modificados los encadenamientos para funcionar por CW(en An) y Rassmusen(Ma)

  • Property mode set to 100644
File size: 12.5 KB
Line 
1/**
2    @file genericFunctions.cpp
3    @brief Serie de funciones genéricas para el Sistema de Matrices de Contabilidad Social
4    @date 01/08/2016
5    @author Rodrigo Boet
6    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
7*/
8#include <genericFunctions.h>
9
10
11/**
12    @brief Función que permite obtener los elementos distintos en una lista
13    @author Autor: Rodrigo Boet
14    @date Fecha: 01/08/2016
15    @param <my_list> Lista para en la que se definirán los elementos distintos
16    @return elementos distintos de la lista
17*/
18int diferent_elements(QStringList my_list)
19{
20    QStringList elements;
21    foreach (QString item, my_list) {
22        if(!elements.contains(item))
23        {
24            elements.append(item);
25        }
26    }
27    return elements.count();
28}
29
30/**
31    @brief Función que permite agregar un mensaje en el label cuando se selecciona la opción de componentes
32    @date 29/07/2016
33    @author Rodrigo Boet
34    @param <tw> Recibe el widget de la tabla
35    @param <row> Recibe la fila de la que se extraeran los datos
36    @param <init> Recibe el inicio de la fila de donde extraeran los datos
37    @param <end> Recibe el fin de la fila de donde extraeran los datos
38    @return <elements> retorna una lista con los elementos
39*/
40QStringList get_list(QTableWidget *tw, int row, int init, int end)
41{
42    QStringList elements;
43    for(int i=init;i<end;i++)
44    {
45        elements.append(tw->item(row,i)->text());
46    }
47    return elements;
48}
49
50/**
51   @brief Funcion para agregar el span en los titulos de la matriz seleccionada
52   @date 10/10/2015
53   @author Rodrigo Boet
54   @param <tw> Recibe el widget de la tabla
55*/
56void titleSeleccionar(QTableWidget *tw)
57{
58    QStringList CuentaFila;
59    QStringList CuentaColumna;
60    int fila = tw->rowCount();
61    int columna = tw->columnCount();
62    /*      Se crea una lista con las veces que se repiten cuentas en filas/columnas*/
63    //Fila
64    for(int i = 2;i<fila;i++)
65    {
66        CuentaFila.append(tw->item(i,0)->text());
67    }
68    //Columna
69    for(int j = 2;j<columna;j++)
70    {
71        CuentaColumna.append(tw->item(0,j)->text());
72    }
73    /*      Se crea el span tomando en cuenta las veces que se repite una cuenta en las listas      */
74    //Fila
75    for(int i=2;i<fila-1;i++)
76    {
77        QString accName=tw->item(i,0)->text();
78        if(CuentaFila.contains(accName))
79        {
80            int contar = CuentaFila.count(accName);
81            tw->setSpan(i,0,contar,1);
82            CuentaFila.removeAll(accName);
83        }
84        if(CuentaFila.isEmpty())
85        {
86            break;
87        }
88    }
89    //Columna
90    for(int j=2;j<columna-1;j++)
91    {
92        QString accName=tw->item(0,j)->text();
93        if(CuentaColumna.contains(accName))
94        {
95            int contar = CuentaColumna.count(accName);
96            tw->setSpan(0,j,1,contar);
97            CuentaColumna.removeAll(accName);
98        }
99        if(CuentaColumna.isEmpty())
100        {
101            break;
102        }
103    }
104}
105
106/**
107   @brief Funcion para generar las tablas de comparación entre matrices
108   @date 10/10/2015
109   @author Rodrigo Boet
110   @param <tw> Recibe el widget de la tabla que se modificará
111   @param <tw> Recibe el widget de la tabla de donde se sacan los valores
112*/
113void crearTablaComparar(QTableWidget *to, QTableWidget *tw)
114{
115    int count = to->rowCount();
116    int col = to->columnCount();
117    to->insertColumn(col);
118    to->insertColumn(col);
119    for(int i=0;i<count;i++)
120    {
121        QTableWidgetItem *item1 = new QTableWidgetItem(tw->item(i,2)->text());
122        item1->setTextAlignment(Qt::AlignCenter);
123        item1->setFlags(item1->flags() ^ Qt::ItemIsEditable);
124        QTableWidgetItem *item2 = new QTableWidgetItem(tw->item(i,3)->text());
125        item2->setTextAlignment(Qt::AlignCenter);
126        item2->setFlags(item2->flags() ^ Qt::ItemIsEditable);
127        if(i==0)
128        {
129            QFont font;
130            font.setBold(true);
131            item1->setFont(font);
132            item2->setFont(font);
133        }
134        to->setItem(i,col,item1);
135        to->setItem(i,col+1,item2);
136    }
137    to->resizeColumnsToContents();
138    to->resizeRowsToContents();
139}
140
141/**
142   @brief Funcion para agregar los estilos de la tabla de encadenamientos
143   @date 10/10/2015
144   @author Rodrigo Boet
145   @param <tw> Recibe el widget de la tabla
146*/
147void encadenamientosStyle(QTableWidgetItem *ti)
148{
149    QFont font;
150    font.setBold(true);
151    ti->setFont(font);
152    ti->setFlags(ti->flags() ^ Qt::ItemIsEditable);
153    ti->setTextAlignment(Qt::AlignCenter);
154}
155
156/**
157   @brief Funcion para agregar un texto en una tabla en los rangos especificados
158   @date 10/10/2015
159   @author Rodrigo Boet
160   @param <tw> Recibe el widget de la tabla donde se agregrá el texto
161   @param <inicio> Recibe desde donde se escribirá el texto
162   @param <fin> Recibe hasta donde se escribirá el texto
163   @param <texto> Recibe el texto
164*/
165void tableItem(QTableWidget *tw, int inicio, int fin, QString texto)
166{
167    for(int i=inicio;i<fin;i++)
168    {
169        QTableWidgetItem *itemFila = new QTableWidgetItem(texto);
170        itemFila->setFlags(itemFila->flags() ^ Qt::ItemIsEditable);
171        QTableWidgetItem *itemColumna = new QTableWidgetItem(texto);
172        itemColumna->setFlags(itemColumna->flags() ^ Qt::ItemIsEditable);
173        tw->setItem(0,i,itemFila);
174        tw->setItem(i,0,itemColumna);
175    }
176}
177
178/**
179   @brief Funcion para agregar el estilo de una celda en negrita(letra blanca) con fondo de color azul (Cuenta)
180   @date 10/10/2015
181   @author Rodrigo Boet
182   @param <tw> Recibe el widget de la tabla en la que se agregarán los estilos
183*/
184void CellStyle(QTableWidgetItem *ti)
185{
186    ti->setBackgroundColor(QColor(53,140,203));
187    ti->setTextColor(Qt::white);
188    QFont font;
189    font.setBold(true);
190    ti->setFont(font);
191}
192
193/**
194   @brief Funcion para agregar el estilo de una celda con fondo de color gris (Componente)
195   @date 10/10/2015
196   @author Rodrigo Boet
197   @param <tw> Recibe el widget de la tabla en la que se agregarán los estilos
198*/
199void CellStyleComponente(QTableWidgetItem *ti)
200{
201    ti->setBackgroundColor(QColor(221,227,230));
202}
203
204/**
205   @brief Funcion para agregar el estilo de una celda en negrita(letras blancas) con fondo de color gris oscuro (endogéna-exogéna)
206   @date 10/10/2015
207   @author Rodrigo Boet
208   @param <tw> Recibe el widget de la tabla en la que se agregarán los estilos
209*/
210void CellStyleExEn(QTableWidgetItem *ti)
211{
212    ti->setBackgroundColor(QColor(110,110,110));
213    ti->setTextColor(Qt::white);
214    QFont font;
215    font.setBold(true);
216    ti->setFont(font);
217}
218
219/**
220   @brief Funcion que escribe en una columna o fila con la lista dada
221   @date 10/10/2015
222   @author Rodrigo Boet
223   @param <lista> Recibe la lista de donde se sacarán los valores
224   @param <tw> Recibe el widget de la tabla
225   @param <opcion> Recibe la opción (1 para escribir en columna y 0 para la fila)
226*/
227void insertRowExogena(QList<QString> lista,QTableWidget *tw,int opcion)
228{
229    for(int i=0;i<tw->rowCount();i++)
230    {
231        QTableWidgetItem *twi =new QTableWidgetItem;
232        twi->setText(lista[i]);
233        twi->setFlags(twi->flags() ^ Qt::ItemIsEditable);
234        int fin=tw->rowCount();
235        if(opcion==1)
236        {
237            tw->setItem(fin-1,i,twi);
238        }
239        else
240        {
241            tw->setItem(i,fin-1,twi);
242        }
243    }
244}
245
246/**
247   @brief Funcion para volver la celda(0,0) no editable
248   @date 08/07/2015
249   @author Rodrigo Boet
250   @param <tw> Recibe el widget de la tabla
251*/
252void noEditColZero(QTableWidget *tw)
253{
254    QTableWidgetItem *ValoraInsertar = new QTableWidgetItem;
255    ValoraInsertar->setFlags(ValoraInsertar->flags() ^ Qt::ItemIsEditable);
256    tw->setItem(0,0,ValoraInsertar);
257}
258
259/**
260   @brief Funcion estandar para hacer algunas celdas no editables debido a que son dificiles de manipular(por motivos de colocado y borrado dinamico)
261   @date 08/07/2015
262   @author Rodrigo Boet
263   @param <tw> Recibe el widget de la tabla
264   @param <inicio> Recibe el inicio
265   @param <fin> Recibe el fin
266   @param <opcion> Recibe la columna (por defecto 0)
267*/
268void ItemsNoEditable(QTableWidget *tw,int inicio,int fin,int col)
269{
270    noEditColZero(tw);
271    for(int i=inicio;i<fin;i++)
272    {
273        QTableWidgetItem *ValoraInsertarFila = new QTableWidgetItem;
274        ValoraInsertarFila->setFlags(ValoraInsertarFila->flags() ^ Qt::ItemIsEditable);
275        tw->setItem(i,col,ValoraInsertarFila);
276        QTableWidgetItem *ValoraInsertarColumna = new QTableWidgetItem;
277        ValoraInsertarColumna->setFlags(ValoraInsertarColumna->flags() ^ Qt::ItemIsEditable);
278        tw->setItem(col,i,ValoraInsertarColumna);
279
280    }
281}
282
283/**
284    @brief Función para retornar todos los componentes en una lista
285    @date 10/10/2015
286    @author Rodrigo Boet
287    @param <tw> Recibe el widget de la tabla
288    @return <elements> retorna una lista con los elementos
289*/
290QStringList ObtenerComponentes(QTableWidget *tw)
291{
292    QStringList MiLista;
293    int contador=tw->rowCount();
294    for(int i=1;i<contador-1;i++)
295    {
296        MiLista.append(tw->item(0,i)->text());
297    }
298    return MiLista;
299}
300
301
302/**
303    @brief Funcion que permite llenar una lista con los elementos en un intervalo dado(fila o columna)
304    @date 10/10/2015
305    @author Rodrigo Boet
306    @param <lista> Recibe la lista en la que escribirán los componenentes
307    @param <tw> Recibe el widget de la tabla
308    @param <valor> Recibe el valor de fila/cloumna
309    @param <opcion> Recibe la opción (1 para fila y 0 para columna)
310    @return <elements> retorna una lista con los elementos
311*/
312QList<QString> llenarLista(QList<QString> lista,QTableWidget *tw,int valor,int opcion)
313{
314    int cantidad = tw->rowCount();
315    for(int i=0;i<cantidad;i++)
316    {
317        if(opcion==1)
318        {
319            lista.append(tw->item(valor,i)->text());
320        }
321        else
322        {
323            lista.append(tw->item(i,valor)->text());
324        }
325    }
326    return lista;
327}
328
329/**
330    @brief Funcion para crear una tabla cuadrada vacía en un rango dado
331    @date 08/07/2015
332    @author Rodrigo Boet
333    @param <contador> Recibe la dimensión de la tabla
334    @param <tw> Recibe el widget de la tabla
335*/
336void CrearTablaVacia(int contador, QTableWidget *tw)
337{
338    for(int k=0;k<contador-1;k++)
339    {
340        tw->insertRow(k);
341        tw->insertColumn(k);
342    }
343}
344
345/**
346    @brief Funcion para crear una tabla vacia no cuadrada, específicamente para los encadenamientos
347    @date 08/07/2015
348    @author Rodrigo Boet
349    @param <filas> Recibe la dimensión de las filas
350    @param <tw> Recibe el widget de la tabla
351    @param <columnas> Recibe la dimensión de las columnas
352*/
353/*          Funcion para crear una tabla vacia, específicamente para los encadenamientos        */
354void crearTablaVaciaEncadenamiento(int filas, QTableWidget *tw,int columnas)
355{
356    for(int j=0;j<columnas;j++)
357    {
358        tw->insertColumn(0);
359    }
360    for(int k=0;k<filas;k++)
361    {
362        tw->insertRow(k);
363    }
364}
365
366/**
367    @brief Funcion que permite contar los elementos en el map o diccionario
368    @date 10/10/2015
369    @author Rodrigo Boet
370    @param <diccionario> Recibe el diccionario (clave,valor) -> QString y QStringList Respectivamente
371    @return <contador> retorna la cantidad de elementos
372*/
373int contarElementosMap(QMap<QString,QStringList> diccionario)
374{
375    int contador=0;
376    foreach(QString key,diccionario.keys())
377    {
378        contador+=diccionario[key].count();
379    }
380    return contador;
381}
382
383/**
384    @brief Funcion que sumar todos los elementos de un vector
385    @date 08/09/2016
386    @author Rodrigo Boet
387    @param <valor> Recibe un vector de tipo <double>
388    @return <suma> retorna la suma de los elementos
389*/
390double sumElements(QVector<double> valor)
391{
392    int cantidad = valor.count();
393    double suma = 0;
394    for(int i=0;i<cantidad;i++)
395    {
396        suma+= valor.at(i);
397    }
398    return suma;
399}
400
401/**
402   @brief Funcion que permite
403   @date 08/09/2016
404   @author Rodrigo Boet
405   @param <tw> Recibe el widget de la tabla
406   @param <inicio> Recibe el inicio
407   @param <fin> Recibe el fin
408   @param <item> Recibe el indice de la fila/columna
409   @param <fila> Recibe un booleano (True si es fila, de lo contrario es una columna)
410*/
411void RowColNoEditable(QTableWidget *tw,int inicio,int fin,int item, bool fila)
412{
413    for(int i=inicio;i<=fin;i++)
414    {
415        if(fila)
416        {
417            QTableWidgetItem *ValoraInsertarFila = new QTableWidgetItem;
418            ValoraInsertarFila->setFlags(ValoraInsertarFila->flags() ^ Qt::ItemIsEditable);
419            tw->setItem(item,i,ValoraInsertarFila);
420        }
421        else
422        {
423            QTableWidgetItem *ValoraInsertarColumna = new QTableWidgetItem;
424            ValoraInsertarColumna->setFlags(ValoraInsertarColumna->flags() ^ Qt::ItemIsEditable);
425            tw->setItem(i,item,ValoraInsertarColumna);
426        }
427
428    }
429}
430
Note: See TracBrowser for help on using the repository browser.