source: mmcs/genericFunctions.cpp @ e62517a

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

Migrado el proyecto a la versión 5 de Qt, agregado primer boceto del PDF

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