Permalink
Browse files

Fechamento da versão v0.2.0.

Método de compilação modificado para shared libs.

O subprojeto pgmodeler_ui foi renomeado para libpgmodeler_ui e o produto
da compilação não é mais o executável e sim uma biblioteca.

Foi criado o subprojeto main que reúne todas a bibliotecas e gera o
executável.
  • Loading branch information...
1 parent 8e070f9 commit e9ba67b609ae6a207a83fc7d82df42a08c0c6bf9 @rkhaotix rkhaotix committed Aug 31, 2012
Showing with 19,295 additions and 47 deletions.
  1. +1 −0 COMPILING.md
  2. +7 −7 PLUGINS.md
  3. +1 −1 README.md
  4. +1 −1 build/conf/pgmodeler.conf
  5. +9 −9 libconexbd/libconexbd.pro
  6. +10 −10 libobjrenderer/libobjrenderer.pro
  7. +9 −9 libparsers/libparsers.pro
  8. +10 −10 libpgmodeler/libpgmodeler.pro
  9. +166 −0 libpgmodeler_ui/libpgmodeler_ui.pro
  10. +149 −0 libpgmodeler_ui/res/resources.qrc
  11. +122 −0 libpgmodeler_ui/src/bancodadoswidget.cpp
  12. +45 −0 libpgmodeler_ui/src/bancodadoswidget.h
  13. +248 −0 libpgmodeler_ui/src/caixamensagem.cpp
  14. +74 −0 libpgmodeler_ui/src/caixamensagem.h
  15. +90 −0 libpgmodeler_ui/src/caixatextowidget.cpp
  16. +47 −0 libpgmodeler_ui/src/caixatextowidget.h
  17. +317 −0 libpgmodeler_ui/src/classeoperadoreswidget.cpp
  18. +80 −0 libpgmodeler_ui/src/classeoperadoreswidget.h
  19. +198 −0 libpgmodeler_ui/src/codigofontewidget.cpp
  20. +49 −0 libpgmodeler_ui/src/codigofontewidget.h
  21. +91 −0 libpgmodeler_ui/src/colunawidget.cpp
  22. +52 −0 libpgmodeler_ui/src/colunawidget.h
  23. +426 −0 libpgmodeler_ui/src/confaparenciawidget.cpp
  24. +88 −0 libpgmodeler_ui/src/confaparenciawidget.h
  25. +197 −0 libpgmodeler_ui/src/confbasewidget.cpp
  26. +71 −0 libpgmodeler_ui/src/confbasewidget.h
  27. +461 −0 libpgmodeler_ui/src/confconexoeswidget.cpp
  28. +77 −0 libpgmodeler_ui/src/confconexoeswidget.h
  29. +194 −0 libpgmodeler_ui/src/confgeralwidget.cpp
  30. +50 −0 libpgmodeler_ui/src/confgeralwidget.h
  31. +98 −0 libpgmodeler_ui/src/conversaocodificacaowidget.cpp
  32. +48 −0 libpgmodeler_ui/src/conversaocodificacaowidget.h
  33. +138 −0 libpgmodeler_ui/src/conversaotipowidget.cpp
  34. +53 −0 libpgmodeler_ui/src/conversaotipowidget.h
  35. +797 −0 libpgmodeler_ui/src/destaquesintaxe.cpp
  36. +185 −0 libpgmodeler_ui/src/destaquesintaxe.h
  37. +94 −0 libpgmodeler_ui/src/dominiowidget.cpp
  38. +49 −0 libpgmodeler_ui/src/dominiowidget.h
  39. +56 −0 libpgmodeler_ui/src/espacotabelawidget.cpp
  40. +46 −0 libpgmodeler_ui/src/espacotabelawidget.h
  41. +36 −0 libpgmodeler_ui/src/esquemawidget.cpp
  42. +44 −0 libpgmodeler_ui/src/esquemawidget.h
  43. +61 −0 libpgmodeler_ui/src/familiaoperadoreswidget.cpp
  44. +46 −0 libpgmodeler_ui/src/familiaoperadoreswidget.h
  45. +33 −0 libpgmodeler_ui/src/formbasico.cpp
  46. +45 −0 libpgmodeler_ui/src/formbasico.h
  47. +124 −0 libpgmodeler_ui/src/formconfiguracao.cpp
  48. +55 −0 libpgmodeler_ui/src/formconfiguracao.h
  49. +393 −0 libpgmodeler_ui/src/formexportacao.cpp
  50. +48 −0 libpgmodeler_ui/src/formexportacao.h
  51. +1,160 −0 libpgmodeler_ui/src/formprincipal.cpp
  52. +139 −0 libpgmodeler_ui/src/formprincipal.h
  53. +8 −0 libpgmodeler_ui/src/formsobre.cpp
  54. +42 −0 libpgmodeler_ui/src/formsobre.h
  55. +195 −0 libpgmodeler_ui/src/funcaoagregacaowidget.cpp
  56. +68 −0 libpgmodeler_ui/src/funcaoagregacaowidget.h
  57. +670 −0 libpgmodeler_ui/src/funcaowidget.cpp
  58. +84 −0 libpgmodeler_ui/src/funcaowidget.h
  59. +329 −0 libpgmodeler_ui/src/gatilhowidget.cpp
  60. +65 −0 libpgmodeler_ui/src/gatilhowidget.h
  61. +356 −0 libpgmodeler_ui/src/indicewidget.cpp
  62. +77 −0 libpgmodeler_ui/src/indicewidget.h
  63. +115 −0 libpgmodeler_ui/src/linguagemwidget.cpp
  64. +48 −0 libpgmodeler_ui/src/linguagemwidget.h
  65. +108 −0 libpgmodeler_ui/src/listaobjetoswidget.cpp
  66. +48 −0 libpgmodeler_ui/src/listaobjetoswidget.h
  67. +235 −0 libpgmodeler_ui/src/listaoperacoeswidget.cpp
  68. +61 −0 libpgmodeler_ui/src/listaoperacoeswidget.h
  69. +2,317 −0 libpgmodeler_ui/src/modelowidget.cpp
  70. +236 −0 libpgmodeler_ui/src/modelowidget.h
  71. +827 −0 libpgmodeler_ui/src/objetobasewidget.cpp
  72. +207 −0 libpgmodeler_ui/src/objetobasewidget.h
  73. +175 −0 libpgmodeler_ui/src/operadorwidget.cpp
  74. +50 −0 libpgmodeler_ui/src/operadorwidget.h
  75. +356 −0 libpgmodeler_ui/src/papelwidget.cpp
  76. +69 −0 libpgmodeler_ui/src/papelwidget.h
  77. +89 −0 libpgmodeler_ui/src/parametrowidget.cpp
  78. +56 −0 libpgmodeler_ui/src/parametrowidget.h
  79. +637 −0 libpgmodeler_ui/src/permissaowidget.cpp
  80. +117 −0 libpgmodeler_ui/src/permissaowidget.h
  81. +58 −0 libpgmodeler_ui/src/pgmodelerplugin.h
  82. +46 −0 libpgmodeler_ui/src/progressotarefa.cpp
  83. +52 −0 libpgmodeler_ui/src/progressotarefa.h
  84. +158 −0 libpgmodeler_ui/src/regrawidget.cpp
  85. +57 −0 libpgmodeler_ui/src/regrawidget.h
  86. +752 −0 libpgmodeler_ui/src/relacionamentowidget.cpp
  87. +81 −0 libpgmodeler_ui/src/relacionamentowidget.h
  88. +553 −0 libpgmodeler_ui/src/restricaowidget.cpp
  89. +77 −0 libpgmodeler_ui/src/restricaowidget.h
  90. +153 −0 libpgmodeler_ui/src/seletorobjetowidget.cpp
  91. +94 −0 libpgmodeler_ui/src/seletorobjetowidget.h
  92. +103 −0 libpgmodeler_ui/src/sequenciawidget.cpp
  93. +47 −0 libpgmodeler_ui/src/sequenciawidget.h
  94. +638 −0 libpgmodeler_ui/src/tabelaobjetoswidget.cpp
  95. +189 −0 libpgmodeler_ui/src/tabelaobjetoswidget.h
  96. +653 −0 libpgmodeler_ui/src/tabelawidget.cpp
  97. +82 −0 libpgmodeler_ui/src/tabelawidget.h
  98. +195 −0 libpgmodeler_ui/src/tipopgsqlwidget.cpp
  99. +70 −0 libpgmodeler_ui/src/tipopgsqlwidget.h
  100. +423 −0 libpgmodeler_ui/src/tipowidget.cpp
  101. +81 −0 libpgmodeler_ui/src/tipowidget.h
Sorry, we could not display the entire diff because it was too big.
View
1 COMPILING.md
@@ -10,6 +10,7 @@ Compiling Requirements
* Qt 4.7.x library or above (qt.nokia.com)
* LibXML2 library (www.xmlsoft.org)
* libpq library (www.postgresql.org)
+* pgModeler source (github.com/pgmodeler/pgmodeler/tags)
Compiling
----------
View
14 PLUGINS.md
@@ -1,16 +1,16 @@
PostgreSQL Database Modeler - pgModeler
---------------------------------------
-This document describes a simple way how to create third party plugins on pgModeler. ATTENTION: Any plugin must be compiled using the most current source of pgModeler.
+This document describes a simple way to create third party plugins on pgModeler. ATTENTION: Any plugin must be compiled using the most current source and libs of pgModeler.
Basic Rules
-----------
To be used as a plugin your class must:
-1) Inherit the class "PgModelerPlugin"
-2) Use the macro Q_INTERFACES in its declaration.
-3) Overloadthe methods PgModelerPlugin::obterRotuloPlugin(void) and PgModelerPlugin::executarPlugin(ModeloWidget *model)
+* Inherit the class "PgModelerPlugin"
+* Use the macro Q_INTERFACES in its declaration.
+* Overloadthe methods PgModelerPlugin::obterRotuloPlugin(void) and PgModelerPlugin::executarPlugin(ModeloWidget *model)
Plugin directory structure
--------------------------
@@ -23,8 +23,8 @@ The plugins in pgModeler must be within the "plugins" folder in its own director
+---(lib)*(pluginA.)(so|dylib|dll) (library)
+---pluginA.png (icon)
-* Library: is the shared object that represents the plugin. The prefix (lib) and suffix (so|dylib|dll) are plataform dependent.
-* Icon: It is a PNG image that represents the plugin on the plugins toolbar.
+* Library: it is the shared object that represents the plugin. The prefix (lib) and suffix (so|dylib|dll) are plataform dependent.
+* Icon: it is a PNG image that represents the plugin on the plugins toolbar.
The dummy plugin
----------------
@@ -36,4 +36,4 @@ Advanced plugins
To create advanced plugins you need to study the source code of pgModeler (particularly the headers). The code is well documented but in Portuguese. If you want to create a plugin and have questions please contact me via e-mail.
-In the near future all the code will be cataloged and online documentation in English will be available to developers (help wanted!).
+In the near future all the code will be cataloged and online documentation in English will be available to developers (help wanted!).
View
2 README.md
@@ -18,7 +18,7 @@ For details about compilation and installation process see [COMPILING.md](https:
Warning
-------
-Although this is first stable version of pgModeler it is recommended NOT EXPORT the models created directly to production environments. Not all possible code generation were tested in this way, is its your own risk export the models into environments that are not intended for testing. The project's author is not responsible for any possible loss of data due the inappropriate use of this tool.
+Although this is a major upgrade version of pgModeler it is recommended NOT EXPORT the models created directly to production environments. Not all possible code generation were tested in this way, is its your own risk export the models into environments that are not intended for testing. The project's author is not responsible for any possible loss of data due the inappropriate use of this tool.
Change History
--------------
View
2 build/conf/pgmodeler.conf
@@ -9,7 +9,7 @@
-->
<pgmodeler>
<configuration op-list-size="500"
- grid-size="20"
+ grid-size="20"
autosave-interval="10"
paper-type="4"
paper-orientation="landscape"
View
18 libconexbd/libconexbd.pro
@@ -1,13 +1,13 @@
-#include(../pgmodeler.pro)
+include(../pgmodeler.pro)
-#CONFIG += qt warn_on uitools uic4
-#QT = core gui qt3support
-#TEMPLATE = lib
-#TARGET = conexbd
-#DESTDIR = ../build/lib
-#DEPENDPATH = ". src obj"
-#OBJECTS_DIR = obj
-#LIBS += $$DESTDIR/$$LIBUTIL
+CONFIG += qt warn_on uitools uic4
+QT = core gui qt3support
+TEMPLATE = lib
+TARGET = conexbd
+DESTDIR = ../build/lib
+DEPENDPATH = ". src obj"
+OBJECTS_DIR = obj
+LIBS += $$DESTDIR/$$LIBUTIL
HEADERS += $$PWD/src/conexaobd.h \
$$PWD/src/resultado.h
View
20 libobjrenderer/libobjrenderer.pro
@@ -1,15 +1,15 @@
-#include(../pgmodeler.pro)
+include(../pgmodeler.pro)
-#CONFIG += qt warn_on uitools uic4
-#QT = core gui qt3support
-#TEMPLATE = lib
-#TARGET = objrenderer
-#DESTDIR = ../build/lib
-#DEPENDPATH = ". src obj"
-#OBJECTS_DIR = obj
+CONFIG += qt warn_on uitools uic4
+QT = core gui qt3support
+TEMPLATE = lib
+TARGET = objrenderer
+DESTDIR = ../build/lib
+DEPENDPATH = ". src obj"
+OBJECTS_DIR = obj
-#LIBS += $$DESTDIR/$$LIBUTIL \
-# $$DESTDIR/$$LIBPGMODELER
+LIBS += $$DESTDIR/$$LIBUTIL \
+ $$DESTDIR/$$LIBPGMODELER
HEADERS += $$PWD/src/objetografico.h \
$$PWD/src/ogcaixatexto.h \
View
18 libparsers/libparsers.pro
@@ -1,14 +1,14 @@
-#include(../pgmodeler.pro)
+include(../pgmodeler.pro)
-#CONFIG += qt warn_on uitools uic4
-#QT = core gui qt3support
-#TEMPLATE = lib
-#TARGET = parsers
-#DESTDIR = ../build/lib
-#DEPENDPATH = ". src obj"
-#OBJECTS_DIR = obj
+CONFIG += qt warn_on uitools uic4
+QT = core gui qt3support
+TEMPLATE = lib
+TARGET = parsers
+DESTDIR = ../build/lib
+DEPENDPATH = ". src obj"
+OBJECTS_DIR = obj
-#LIBS += $$DESTDIR/$$LIBUTIL
+LIBS += $$DESTDIR/$$LIBUTIL
HEADERS += $$PWD/src/parseresquema.h \
$$PWD/src/parserxml.h
View
20 libpgmodeler/libpgmodeler.pro
@@ -1,15 +1,15 @@
-#include(../pgmodeler.pro)
+include(../pgmodeler.pro)
-#CONFIG += qt warn_on uitools uic4
-#QT = core gui qt3support
-#TEMPLATE = lib
-#TARGET = pgmodeler
-#DESTDIR = ../build/lib
-#DEPENDPATH = ". src obj"
-#OBJECTS_DIR = obj
+CONFIG += qt warn_on uitools uic4
+QT = core gui qt3support
+TEMPLATE = lib
+TARGET = pgmodeler
+DESTDIR = ../build/lib
+DEPENDPATH = ". src obj"
+OBJECTS_DIR = obj
-#LIBS += $$DESTDIR/$$LIBUTIL \
-# $$DESTDIR/$$LIBPARSERS
+LIBS += $$DESTDIR/$$LIBUTIL \
+ $$DESTDIR/$$LIBPARSERS
HEADERS += $$PWD/src/caixatexto.h \
$$PWD/src/conversaotipo.h \
View
166 libpgmodeler_ui/libpgmodeler_ui.pro
@@ -0,0 +1,166 @@
+include(../pgmodeler.pro)
+
+CONFIG += qt warn_on uitools uic4
+QT = core gui qt3support
+TEMPLATE = lib
+TARGET = pgmodeler_ui
+
+TRANSLATIONS = ../lang/pgmodeler.en_US.ts
+
+DEPENDPATH = ". res src ui moc obj"
+MOC_DIR = moc
+OBJECTS_DIR = obj
+UI_DIR = src
+DESTDIR = ../build/lib
+CODECFORTR = UTF-8
+RESOURCES += res/resources.qrc
+
+QMAKE_POST_LINK+= "cp res/icones/pgsqlModeler48x48.png ../build/pgmodeler.png"
+QMAKE_DISTCLEAN+= "../build/pgmodeler.png"
+
+LIBS = $$DESTDIR/$$LIBUTIL \
+ $$DESTDIR/$$LIBPARSERS \
+ $$DESTDIR/$$LIBCONEXBD \
+ $$DESTDIR/$$LIBOBJRENDERER \
+ $$DESTDIR/$$LIBPGMODELER
+
+SOURCES += src/formprincipal.cpp \
+ src/modelowidget.cpp \
+ src/formsobre.cpp \
+ src/caixamensagem.cpp \
+ src/caixatextowidget.cpp \
+ src/objetobasewidget.cpp \
+ src/listaoperacoeswidget.cpp \
+ src/visaoobjetoswidget.cpp \
+ src/formbasico.cpp \
+ src/codigofontewidget.cpp \
+ src/destaquesintaxe.cpp \
+ src/bancodadoswidget.cpp \
+ src/esquemawidget.cpp \
+ src/tabelaobjetoswidget.cpp \
+ src/papelwidget.cpp \
+ src/permissaowidget.cpp \
+ src/espacotabelawidget.cpp \
+ src/linguagemwidget.cpp \
+ src/seletorobjetowidget.cpp \
+ src/funcaowidget.cpp \
+ src/tipopgsqlwidget.cpp \
+ src/parametrowidget.cpp \
+ src/conversaotipowidget.cpp \
+ src/conversaocodificacaowidget.cpp \
+ src/dominiowidget.cpp \
+ src/funcaoagregacaowidget.cpp \
+ src/sequenciawidget.cpp \
+ src/operadorwidget.cpp \
+ src/familiaoperadoreswidget.cpp \
+ src/classeoperadoreswidget.cpp \
+ src/tipowidget.cpp \
+ src/visaowidget.cpp \
+ src/colunawidget.cpp \
+ src/restricaowidget.cpp \
+ src/regrawidget.cpp \
+ src/gatilhowidget.cpp \
+ src/indicewidget.cpp \
+ src/relacionamentowidget.cpp \
+ src/tabelawidget.cpp \
+ src/progressotarefa.cpp \
+ src/listaobjetoswidget.cpp \
+ src/confgeralwidget.cpp \
+ src/confaparenciawidget.cpp \
+ src/confconexoeswidget.cpp \
+ src/formconfiguracao.cpp \
+ src/confbasewidget.cpp \
+ src/formexportacao.cpp
+
+HEADERS += src/formprincipal.h \
+ src/modelowidget.h \
+ src/formsobre.h \
+ src/caixamensagem.h \
+ src/objetobasewidget.h \
+ src/caixatextowidget.h \
+ src/listaoperacoeswidget.h \
+ src/visaoobjetoswidget.h \
+ src/formbasico.h \
+ src/codigofontewidget.h \
+ src/destaquesintaxe.h \
+ src/bancodadoswidget.h \
+ src/esquemawidget.h \
+ src/tabelaobjetoswidget.h \
+ src/papelwidget.h \
+ src/permissaowidget.h \
+ src/espacotabelawidget.h \
+ src/linguagemwidget.h \
+ src/seletorobjetowidget.h \
+ src/funcaowidget.h \
+ src/tipopgsqlwidget.h \
+ src/parametrowidget.h \
+ src/conversaotipowidget.h \
+ src/conversaocodificacaowidget.h \
+ src/dominiowidget.h \
+ src/funcaoagregacaowidget.h \
+ src/sequenciawidget.h \
+ src/operadorwidget.h \
+ src/familiaoperadoreswidget.h \
+ src/classeoperadoreswidget.h \
+ src/tipowidget.h \
+ src/visaowidget.h \
+ src/colunawidget.h \
+ src/restricaowidget.h \
+ src/regrawidget.h \
+ src/gatilhowidget.h \
+ src/indicewidget.h \
+ src/relacionamentowidget.h \
+ src/tabelawidget.h \
+ src/progressotarefa.h \
+ src/listaobjetoswidget.h \
+ src/confgeralwidget.h \
+ src/formconfiguracao.h \
+ src/confconexoeswidget.h \
+ src/confaparenciawidget.h \
+ src/confbasewidget.h \
+ src/formexportacao.h \
+ src/pgmodelerplugin.h
+
+FORMS += ui/formprincipal.ui \
+ ui/formsobre.ui \
+ ui/caixatextowidget.ui \
+ ui/caixamensagem.ui \
+ ui/listaoperacoeswidget.ui \
+ ui/visaoobjetoswidget.ui \
+ ui/formbasico.ui \
+ ui/codigofontewidget.ui \
+ ui/bancodadoswidget.ui \
+ ui/objetobasewidget.ui \
+ ui/tabelaobjetoswidget.ui \
+ ui/papelwidget.ui \
+ ui/permissaowidget.ui \
+ ui/espacotabelawidget.ui \
+ ui/linguagemwidget.ui \
+ ui/seletorobjetowidget.ui \
+ ui/funcaowidget.ui \
+ ui/tipopgsqlwidget.ui \
+ ui/parametrowidget.ui \
+ ui/conversaotipowidget.ui \
+ ui/conversaocodificacaowidget.ui \
+ ui/dominiowidget.ui \
+ ui/funcaoagregacaowidget.ui \
+ ui/sequenciawidget.ui \
+ ui/operadorwidget.ui \
+ ui/familiaoperadoreswidget.ui \
+ ui/classeoperadoreswidget.ui \
+ ui/tipowidget.ui \
+ ui/visaowidget.ui \
+ ui/colunawidget.ui \
+ ui/restricaowidget.ui \
+ ui/regrawidget.ui \
+ ui/gatilhowidget.ui \
+ ui/indicewidget.ui \
+ ui/relacionamentowidget.ui \
+ ui/tabelawidget.ui \
+ ui/progressotarefa.ui \
+ ui/listaobjetoswidget.ui \
+ ui/formexportacao.ui \
+ ui/formconfiguracao.ui \
+ ui/confgeralwidget.ui \
+ ui/confaparenciawidget.ui \
+ ui/confconexoeswidget.ui
View
149 libpgmodeler_ui/res/resources.qrc
@@ -0,0 +1,149 @@
+<RCC>
+ <qresource prefix="/icones">
+ <file>icones/convrelnn.png</file>
+ <file>icones/seltodos.png</file>
+ <file>icones/movimentado.png</file>
+ <file>icones/abrir.png</file>
+ <file>icones/parameter.png</file>
+ <file>icones/uid.png</file>
+ <file>icones/database.png</file>
+ <file>icones/grant.png</file>
+ <file>icones/validade.png</file>
+ <file>icones/editar.png</file>
+ <file>icones/moverultimo.png</file>
+ <file>icones/moverprimeiro.png</file>
+ <file>icones/movercima.png</file>
+ <file>icones/moverbaixo.png</file>
+ <file>icones/bloqtodosobjetos.png</file>
+ <file>icones/desbloqtodosobjetos.png</file>
+ <file>icones/limpartexto.png</file>
+ <file>icones/relationshipusr.png</file>
+ <file>icones/codigosql.png</file>
+ <file>icones/codigoxml.png</file>
+ <file>icones/bloqobjeto.png</file>
+ <file>icones/desbloqobjeto.png</file>
+ <file>icones/relationshipgen.png</file>
+ <file>icones/relationshipdep.png</file>
+ <file>icones/cast.png</file>
+ <file>icones/adicionar.png</file>
+ <file>icones/aggregate.png</file>
+ <file>icones/aggregate_grp.png</file>
+ <file>icones/anterior.png</file>
+ <file>icones/aparencia.png</file>
+ <file>icones/atualizar.png</file>
+ <file>icones/baixo.png</file>
+ <file>icones/buscar.png</file>
+ <file>icones/cast_grp.png</file>
+ <file>icones/cima.png</file>
+ <file>icones/codigofonte.png</file>
+ <file>icones/colar.png</file>
+ <file>icones/column.png</file>
+ <file>icones/column_grp.png</file>
+ <file>icones/conexaobd.png</file>
+ <file>icones/config.png</file>
+ <file>icones/confirmar.png</file>
+ <file>icones/constraint.png</file>
+ <file>icones/constraint_ck.png</file>
+ <file>icones/constraint_fk.png</file>
+ <file>icones/constraint_grp.png</file>
+ <file>icones/constraint_pk.png</file>
+ <file>icones/constraint_uq.png</file>
+ <file>icones/consttrigger.png</file>
+ <file>icones/consttrigger_grp.png</file>
+ <file>icones/conversion.png</file>
+ <file>icones/conversion_grp.png</file>
+ <file>icones/copiar.png</file>
+ <file>icones/cores.png</file>
+ <file>icones/criado.png</file>
+ <file>icones/desfazer.png</file>
+ <file>icones/domain.png</file>
+ <file>icones/domain_grp.png</file>
+ <file>icones/excluir.png</file>
+ <file>icones/exportar.png</file>
+ <file>icones/fechar1.png</file>
+ <file>icones/fechar.png</file>
+ <file>icones/funcao.png</file>
+ <file>icones/function.png</file>
+ <file>icones/function_grp.png</file>
+ <file>icones/grade.png</file>
+ <file>icones/imprimir.png</file>
+ <file>icones/index.png</file>
+ <file>icones/index_grp.png</file>
+ <file>icones/language.png</file>
+ <file>icones/language_grp.png</file>
+ <file>icones/modificado.png</file>
+ <file>icones/msgbox_alerta.png</file>
+ <file>icones/msgbox_erro.png</file>
+ <file>icones/msgbox_info.png</file>
+ <file>icones/msgbox_quest.png</file>
+ <file>icones/novo.png</file>
+ <file>icones/opclass.png</file>
+ <file>icones/opclass_grp.png</file>
+ <file>icones/operator.png</file>
+ <file>icones/operator_grp.png</file>
+ <file>icones/opfamily.png</file>
+ <file>icones/opfamily_grp.png</file>
+ <file>icones/pgsqlModeler48x48.png</file>
+ <file>icones/proximo.png</file>
+ <file>icones/recortar.png</file>
+ <file>icones/refazer.png</file>
+ <file>icones/relationship1n.png</file>
+ <file>icones/relationship11.png</file>
+ <file>icones/relationship.png</file>
+ <file>icones/relationship_grp.png</file>
+ <file>icones/relationshipnn.png</file>
+ <file>icones/relationshiptv.png</file>
+ <file>icones/relationshiptv_grp.png</file>
+ <file>icones/remover.png</file>
+ <file>icones/removido.png</file>
+ <file>icones/restaurarobjeto.png</file>
+ <file>icones/role.png</file>
+ <file>icones/role_grp.png</file>
+ <file>icones/rule.png</file>
+ <file>icones/rule_grp.png</file>
+ <file>icones/sair.png</file>
+ <file>icones/salvar.png</file>
+ <file>icones/salvar_como.png</file>
+ <file>icones/schema.png</file>
+ <file>icones/schema_grp.png</file>
+ <file>icones/selecionar.png</file>
+ <file>icones/selmovobjeto.png</file>
+ <file>icones/sequence.png</file>
+ <file>icones/sequence_grp.png</file>
+ <file>icones/table.png</file>
+ <file>icones/table_grp.png</file>
+ <file>icones/tablespace.png</file>
+ <file>icones/tablespace_grp.png</file>
+ <file>icones/textbox.png</file>
+ <file>icones/textbox_grp.png</file>
+ <file>icones/trigger.png</file>
+ <file>icones/trigger_grp.png</file>
+ <file>icones/usertype.png</file>
+ <file>icones/usertype_grp.png</file>
+ <file>icones/view.png</file>
+ <file>icones/view_grp.png</file>
+ <file>icones/visaoarvore.png</file>
+ <file>icones/visaogeral.png</file>
+ <file>icones/visaolista.png</file>
+ <file>icones/zoom_mais.png</file>
+ <file>icones/zoom_menos.png</file>
+ <file>icones/zoom_normal.png</file>
+ <file>icones/alinhargrade.png</file>
+ <file>icones/depsrefs.png</file>
+ <file>icones/novoobjeto.png</file>
+ <file>icones/telacheia.png</file>
+ <file>icones/exibirlimpag.png</file>
+ <file>icones/padroes.png</file>
+ </qresource>
+ <qresource prefix="/imagens">
+ <file>imagens/pgsqldbm_logo_grande.png</file>
+ <file>imagens/barra_logo_meio_cinza.png</file>
+ <file>imagens/barra_logo_topo.png</file>
+ <file>imagens/barra_logo_base.png</file>
+ <file>imagens/model2sql.png</file>
+ <file>imagens/model2sgdb.png</file>
+ <file>imagens/twitter.png</file>
+ <file>imagens/facebook.png</file>
+ <file>imagens/github.png</file>
+ </qresource>
+</RCC>
View
122 libpgmodeler_ui/src/bancodadoswidget.cpp
@@ -0,0 +1,122 @@
+#include "bancodadoswidget.h"
+//***********************************************************
+BancoDadosWidget::BancoDadosWidget(QWidget *parent): ObjetoBaseWidget(parent, OBJETO_BANCO_DADOS)
+{
+ map<QString, vector<QWidget *> > mapa_campos;
+ QFrame *frame=NULL;
+ QLocale loc;
+ QStringList lista_loc, codificacoes;
+ unsigned i,i1;
+
+ Ui_BancoDadosWidget::setupUi(this);
+
+ connect(janela_pai->aplicar_ok_btn,SIGNAL(clicked(bool)), this, SLOT(aplicarConfiguracao(void)));
+ configurarLayouFormulario(bancodados_grid, OBJETO_BANCO_DADOS);
+
+ //Define os campos exclusivos para cada versão
+ mapa_campos[gerarIntervaloVersoes(APOS_VERSAO, ParserEsquema::VERSAO_PGSQL_83)].push_back(limconexao_lbl);
+ mapa_campos[gerarIntervaloVersoes(APOS_VERSAO, ParserEsquema::VERSAO_PGSQL_84)].push_back(lccollate_lbl);
+ mapa_campos[gerarIntervaloVersoes(APOS_VERSAO, ParserEsquema::VERSAO_PGSQL_84)].push_back(lcctype_lbl);
+
+ //Gera o frame de alerta
+ frame=gerarFrameAlertaVersao(mapa_campos);
+ bancodados_grid->addWidget(frame, bancodados_grid->count()+1, 0, 1, 0);
+ frame->setParent(this);
+
+ //Define as alturas mínimas e máxima do formulário
+ janela_pai->setMinimumWidth(530);
+ janela_pai->setMinimumHeight(420);
+ janela_pai->setMaximumHeight(420);
+
+ //Obtém os nomes das codificações e as insere no combo de codificação
+ TipoCodificacao::obterTipos(codificacoes);
+ codificacao_cmb->addItems(codificacoes);
+
+ //Obtém todas as localizações padrão e as armazena em uma lista de QString
+ for(i=QLocale::C; i <= QLocale::Chewa; i++)
+ {
+ for(i1=QLocale::Afghanistan; i1 <= QLocale::Zimbabwe; i1++)
+ {
+ loc=QLocale(static_cast<QLocale::Language>(i),static_cast<QLocale::Country>(i1));
+ lista_loc.append(loc.name());
+ }
+ }
+
+ //Remove as localizações duplicadas
+ lista_loc.removeDuplicates();
+ //Ordena as localizações
+ lista_loc.sort();
+
+ //Insere as localizações nos combos
+ lccollate_cmb->addItem(trUtf8("Padrão"));
+ lcctype_cmb->addItem(trUtf8("Padrão"));
+ lccollate_cmb->addItems(lista_loc);
+ lcctype_cmb->addItems(lista_loc);
+}
+//----------------------------------------------------------
+void BancoDadosWidget::definirAtributos(ModeloBD *modelo)
+{
+ if(modelo)
+ {
+ int idx;
+
+ //Configura os atributos de limite de conexão, banco modelo e autor
+ limconexao_sb->setValue(modelo->obterLimiteConexao());
+ bdmodelo_edt->setText(QString::fromUtf8(modelo->obterBDModelo()));
+ autor_edt->setText(QString::fromUtf8(modelo->obterAutor()));
+
+ //Configura o combo de codificação com a codificação atual
+ idx=codificacao_cmb->findText(~modelo->obterCodificacao());
+ if(idx < 0) idx=0;
+ codificacao_cmb->setCurrentIndex(idx);
+
+ //Configura as localizações LC_COLLATE E LC_CTYPE de acordo com a conf. atual
+ idx=lccollate_cmb->findText(modelo->obterLocalizacao(LC_COLLATE));
+ if(idx < 0) idx=0;
+ lccollate_cmb->setCurrentIndex(idx);
+
+ idx=lcctype_cmb->findText(modelo->obterLocalizacao(LC_CTYPE));
+ if(idx < 0) idx=0;
+ lcctype_cmb->setCurrentIndex(idx);
+
+ //Define os atributos do formulários e da janela pai
+ ObjetoBaseWidget::definirAtributos(modelo, NULL, modelo);
+ }
+}
+//----------------------------------------------------------
+void BancoDadosWidget::aplicarConfiguracao(void)
+{
+ try
+ {
+ //Aplica as configurações básicas do objeto
+ ObjetoBaseWidget::aplicarConfiguracao();
+
+ //Define o autor do modelo
+ modelo->definirAutor(autor_edt->text().toUtf8());
+
+ /* Define a condificação do modelo de acordo com a selecionada no formulário
+ caso a codifição 'Padrão' seja selecionada o modelo usará a codificação padrão
+ do SGBD em que for executado o script sql gerado */
+ modelo->definirCodificacao(TipoCodificacao(codificacao_cmb->currentText()));
+
+ /* Define as localização LC_COLLATE e LC_CTYPE do modelo de acordo com a selecionada
+ no formulário caso a localização 'Padrão' seja selecionada o modelo usará a localização
+ padrão do SGBD em que for executado o script sql gerado */
+ if(lccollate_cmb->currentIndex() > 0)
+ modelo->definirLocalizacao(LC_COLLATE, lccollate_cmb->currentText());
+ else
+ modelo->definirLocalizacao(LC_COLLATE, "");
+
+ if(lcctype_cmb->currentIndex() > 0)
+ modelo->definirLocalizacao(LC_CTYPE, lcctype_cmb->currentText());
+ else
+ modelo->definirLocalizacao(LC_CTYPE, "");
+
+ finalizarConfiguracao();
+ }
+ catch(Excecao &e)
+ {
+ throw Excecao(e.obterMensagemErro(),e.obterTipoErro(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e);
+ }
+}
+//***********************************************************
View
45 libpgmodeler_ui/src/bancodadoswidget.h
@@ -0,0 +1,45 @@
+/*
+# Projeto: Modelador de Banco de Dados PostgreSQL (pgModeler)
+# Sub-projeto: Biblioteca libpgsqldbm_ui
+# Classe: BancoDadosWidget
+# Descrição: Definição da classe que implementa o formulário de
+# edição dos atributos do banco de dados.
+#
+# Copyleft 2006-2012 - Raphael Araujo e Silva <rkhaotix@gmail.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License
+
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+#ifndef BANCODADOS_WIDGET_H
+#define BANCODADOS_WIDGET_H
+
+#include "ui_bancodadoswidget.h"
+#include "objetobasewidget.h"
+//***********************************************************
+class BancoDadosWidget: public ObjetoBaseWidget, public Ui::BancoDadosWidget {
+ Q_OBJECT
+
+ private:
+
+ public:
+ BancoDadosWidget(QWidget * parent = 0);
+ void definirAtributos(ModeloBD *modelo);
+
+ private slots:
+
+ public slots:
+ void aplicarConfiguracao(void);
+};
+//***********************************************************
+#endif
View
248 libpgmodeler_ui/src/caixamensagem.cpp
@@ -0,0 +1,248 @@
+#include "caixamensagem.h"
+//***********************************************************
+CaixaMensagem::CaixaMensagem(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f)
+{
+ setupUi(this);
+ cancelada=false;
+ connect(sim_ok_btn,SIGNAL(clicked()),this,SLOT(clickSimOK()));
+ connect(nao_btn,SIGNAL(clicked()),this,SLOT(clickNaoCancelar()));
+ connect(cancelar_btn,SIGNAL(clicked()),this,SLOT(clickNaoCancelar()));
+ connect(exibir_exec_tb,SIGNAL(clicked()),this,SLOT(exibirListaExecoes()));
+ exibir_exec_tb->setVisible(false);
+}
+//----------------------------------------------------------
+void CaixaMensagem::clickSimOK(void)
+{
+ excecoes_trw->clear();
+ accept();
+}
+//----------------------------------------------------------
+void CaixaMensagem::clickNaoCancelar(void)
+{
+ excecoes_trw->clear();
+
+ if((sender()==nao_btn && !cancelar_btn->isVisible()) ||
+ (sender()==cancelar_btn && !nao_btn->isVisible()))
+ reject();
+ else if(sender()==nao_btn && cancelar_btn->isVisible())
+ reject();
+ else if(sender()==cancelar_btn && nao_btn->isVisible())
+ {
+ cancelada=true;
+ reject();
+ }
+}
+//----------------------------------------------------------
+bool CaixaMensagem::caixaCanceleda(void)
+{
+ return(cancelada);
+}
+//----------------------------------------------------------
+void CaixaMensagem::exibirListaExecoes(void)
+{
+ /* Caso o botao de exibiçao da lista de excecoes esteja ativado,
+ alterna o icone do mesmo indicando que a lista pode ser ocultada
+ e alem disso exibe a lista de exceçoes */
+ if(exibir_exec_tb->isChecked())
+ {
+ exibir_exec_tb->setIcon(QPixmap(QString::fromUtf8(":/icones/icones/desfazer.png")));
+ grupo_objs_wgt->setCurrentIndex(1);
+ }
+ /* Caso nao esteja marcado o botao de exibiçao da lista de exceçoes
+ alterna o icone do mesmo indicando que a lista pode ser exibida e alem
+ disso exibe o label de mensagem de erro */
+ else
+ {
+ exibir_exec_tb->setIcon(QPixmap(QString::fromUtf8(":/icones/icones/refazer.png")));
+ grupo_objs_wgt->setCurrentIndex(0);
+ }
+}
+//----------------------------------------------------------
+void CaixaMensagem::show(Excecao e, const QString &msg, unsigned tipo_ico)
+{
+ deque<Excecao> lista;
+ deque<Excecao>::reverse_iterator itr,itr_end;
+ QTreeWidgetItem *item=NULL,*item1=NULL,*item2=NULL;
+ QLabel *label=NULL;
+ int idx=0;
+ Excecao *ex=NULL;
+ QString str_aux, titulo;
+ QFont fonte=this->font();
+
+ //Obtém a lista de erros contida na exceção passada
+ e.obterListaExcecoes(lista);
+
+ /* Varre a lista de erros obtidas em ordem reversa mostrando
+ de onde partiu cada em sua ordem correta */
+ itr=lista.rbegin();
+ itr_end=lista.rend();
+ fonte.setPointSize(8);
+
+ while(itr!=itr_end)
+ {
+ ex=&(*itr);
+
+ /* Configura o item da lista responsável pela exibiação da função ou
+ método onde foi gerado o erro */
+ item=new QTreeWidgetItem;
+ str_aux=QString("[%1] - %2")
+ .arg(idx)
+ .arg(ex->obterLocal());
+ item->setIcon(0,QPixmap(QString::fromUtf8(":/icones/icones/funcao.png")));
+ excecoes_trw->insertTopLevelItem(0,item);
+ label=new QLabel;
+ label->setFont(fonte);
+ label->setWordWrap(true);
+ label->setText(str_aux);
+ excecoes_trw->setItemWidget(item, 0, label);
+
+ /* Configura o item da lista responsável pela exibição do nome de arquivo
+ onde foi gerado o erro */
+ item1=new QTreeWidgetItem(item);
+ item1->setIcon(0,QPixmap(QString::fromUtf8(":/icones/icones/codigofonte.png")));
+ item1->setText(0,ex->obterArquivo() + " (" + ex->obterLinha() + ")");
+
+ //Configura o item o qual denota o código interno do erro
+ item2=new QTreeWidgetItem(item);
+ item2->setIcon(0,QPixmap(QString::fromUtf8(":/icones/icones/msgbox_alerta.png")));
+ item2->setText(0,Excecao::obterNomeErro(ex->obterTipoErro()) +
+ " (" + QString("%1").arg(ex->obterTipoErro()) + ")");
+
+ //Configura o item da lista o qual exibe a mensagem de erro da exceção
+ item1=new QTreeWidgetItem(item);
+ item1->setIcon(0,QPixmap(":/icones/icones/msgbox_erro.png"));
+ label=new QLabel;
+ label->setWordWrap(true);
+ label->setFont(fonte);
+ label->setStyleSheet("color: #ff0000;");
+ excecoes_trw->setItemWidget(item1, 0, label);
+ label->setText(QString::fromUtf8(ex->obterMensagemErro()));
+
+ if(!ex->obterInfoAdicional().isEmpty())
+ {
+ //Configura o item da lista o qual exibe a mensagem de erro da exceção
+ item1=new QTreeWidgetItem(item);
+ item1->setIcon(0,QPixmap(QString::fromUtf8(":/icones/icones/msgbox_info.png")));
+ label=new QLabel;
+ label->setWordWrap(true);
+ label->setFont(fonte);
+ label->setStyleSheet("color: #000080;");
+ excecoes_trw->setItemWidget(item1, 0, label);
+ label->setText(QString::fromUtf8(ex->obterInfoAdicional()));
+ }
+
+ itr++;
+ idx++;
+ }
+
+ switch(tipo_ico)
+ {
+ case ICONE_ERRO:
+ titulo=trUtf8("Erro");
+ break;
+
+ case ICONE_ALERTA:
+ titulo=trUtf8("Alerta");
+ break;
+
+ case ICONE_INFO:
+ titulo=trUtf8("Informação");
+ break;
+
+ default:
+ titulo="";
+ break;
+ }
+
+ /* Configura a caixa de mensagem com apenas o botão OK e com o ícone
+ de erro crítico */
+ if(msg.isEmpty())
+ str_aux=QString::fromUtf8(e.obterMensagemErro());
+ else
+ str_aux=msg;
+
+ this->show(titulo,str_aux,tipo_ico,BOTAO_OK);
+}
+//----------------------------------------------------------
+void CaixaMensagem::show(const QString &titulo, const QString &texto, unsigned icone, unsigned botoes)
+{
+ QString nome_icone;
+
+ //Configurando os botões para cada tipo de opção
+ switch(botoes)
+ {
+ case BOTAO_SIM_NAO:
+ nao_btn->setText(trUtf8("&Não"));
+ sim_ok_btn->setText(trUtf8("&Sim"));
+ break;
+
+ case BOTAO_OK_CANCELAR:
+ cancelar_btn->setText(trUtf8("&Cancelar"));
+ sim_ok_btn->setText(trUtf8("&Ok"));
+ break;
+
+ case BOTAO_SIM_NAO_CANCELAR:
+ cancelar_btn->setText(trUtf8("&Cancelar"));
+ nao_btn->setText(trUtf8("&Não"));
+ sim_ok_btn->setText(trUtf8("&Sim"));
+ break;
+
+ default:
+ case BOTAO_OK:
+ sim_ok_btn->setText(trUtf8("&Ok"));
+ break;
+ }
+
+ nao_btn->setVisible(botoes==BOTAO_SIM_NAO || botoes==BOTAO_SIM_NAO_CANCELAR);
+ cancelar_btn->setVisible(botoes==BOTAO_OK_CANCELAR || botoes==BOTAO_SIM_NAO_CANCELAR);
+
+ //Configurando o ícone da caixa de mensagem
+ switch(icone)
+ {
+ case ICONE_ERRO:
+ nome_icone="msgbox_erro.png";
+ break;
+
+ case ICONE_INFO:
+ nome_icone="msgbox_info.png";
+ break;
+
+ case ICONE_ALERTA:
+ nome_icone="msgbox_alerta.png";
+ break;
+
+ case ICONE_CONFIRM:
+ nome_icone="msgbox_quest.png";
+ break;
+
+ default:
+ nome_icone="";
+ break;
+ }
+
+ cancelada=false;
+
+ //Carrega o ícone da caixa de mensagem
+ if(nome_icone!="")
+ icone_lb->setPixmap(QPixmap((":/icones/icones/" + nome_icone)));
+
+ //Configura o texto da mensagem traduzindo-a automaticamente
+ texto_lb->setText(texto);
+
+ /* Redimensiona a caixa de mensagem para seu tamanho mínimo toda vez que
+ mesma é exibida */
+ this->resize(this->minimumWidth(),this->minimumHeight());
+
+ //Configura o título da caixa de mensagem
+ this->setWindowTitle("pgModeler - " + titulo);
+
+ /* Por padrão exibe o label de mensagem, o botão de exibição
+ da lista de erros é escondido */
+ this->grupo_objs_wgt->setCurrentIndex(0);
+ this->exibir_exec_tb->setChecked(false);
+ this->exibir_exec_tb->setVisible((excecoes_trw->topLevelItemCount() > 0));
+ exibirListaExecoes();
+
+ QDialog::exec();
+}
+//***********************************************************
View
74 libpgmodeler_ui/src/caixamensagem.h
@@ -0,0 +1,74 @@
+/*
+# Projeto: Modelador de Banco de Dados PostgreSQL (pgModeler)
+# Sub-projeto: Biblioteca libpgsqldbm_ui
+# Classe: CaixaMensagem
+# Descrição: Definição da classe usada para exibição de caixas
+# de mensagens personalizadas, como exibição de pilha
+# de exceções geradas no software, icones indicativos
+# de erros, alertas, informações , etc.
+#
+# Copyleft 2006-2012 - Raphael Araujo e Silva <rkhaotix@gmail.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License
+
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+#ifndef CAIXA_MENSAGEM_H
+#define CAIXA_MENSAGEM_H
+
+#include "ui_caixamensagem.h"
+#include "excecao.h"
+//***********************************************************
+class CaixaMensagem: public QDialog, public Ui::CaixaMensagem {
+ private:
+ Q_OBJECT
+ bool cancelada;
+
+ public:
+ //Constantes usadas para definir o ícone da mensagem
+ static const unsigned SEM_ICONE=10,
+ ICONE_ERRO=11,
+ ICONE_INFO=12,
+ ICONE_ALERTA=13,
+ ICONE_CONFIRM=14;
+
+ //Constantes usadas para configurar quais botões são visíveis
+ static const unsigned BOTAO_SIM_NAO=0,
+ BOTAO_OK_CANCELAR=1,
+ BOTAO_OK=2,
+ BOTAO_SIM_NAO_CANCELAR=3;
+
+ CaixaMensagem(QWidget * parent = 0, Qt::WindowFlags f = 0);
+ ~CaixaMensagem(void){}
+
+ //Método padrão de exibição da mensagem, necessário configurar icone, texto, titulo e botões
+ void show(const QString &titulo, const QString &texto, unsigned icone=SEM_ICONE,
+ unsigned botoes=BOTAO_OK);
+
+ /* Exibe a caixa de mensagem configurando-a com as mensagens de uma Exceção, por padrão
+ é exibida uma caixa com icone de erro e um botão ok além disso a árvore de
+ exceções é exibida. Os parâmetros 'msg' e 'tipo_ico' são usados para personalizar a exibição
+ da mensagem de erro da exceção. Se usado o parametro 'msg' a mensagem da exceção é sobrepostas
+ estando disponível apenas na pilha de erros. */
+ void show(Excecao e, const QString &msg="", unsigned tipo_ico=ICONE_ERRO);
+
+ //Retorna se o usuário marcou a opção de cancela na caixa
+ bool caixaCanceleda(void);
+
+private slots:
+ void clickSimOK(void);
+ void clickNaoCancelar(void);
+ void exibirListaExecoes(void);
+};
+//***********************************************************
+#endif
View
90 libpgmodeler_ui/src/caixatextowidget.cpp
@@ -0,0 +1,90 @@
+#include "caixatextowidget.h"
+//***********************************************************
+CaixaTextoWidget::CaixaTextoWidget(QWidget *parent): ObjetoBaseWidget(parent, OBJETO_CAIXA_TEXTO)
+{
+ Ui_CaixaTextoWidget::setupUi(this);
+ configurarLayouFormulario(caixatexto_grid, OBJETO_CAIXA_TEXTO);
+ connect(janela_pai->aplicar_ok_btn,SIGNAL(clicked(bool)), this, SLOT(aplicarConfiguracao(void)));
+ connect(sel_cor_tb, SIGNAL(clicked(void)), this, SLOT(selecionarCorTexto(void)));
+ janela_pai->definirBotoes(CaixaMensagem::BOTAO_OK_CANCELAR);
+ janela_pai->setMinimumSize(500,250);
+}
+//----------------------------------------------------------
+void CaixaTextoWidget::hideEvent(QHideEvent *evento)
+{
+ QPalette palette;
+
+ //Limpa as caixas de texto
+ texto_txt->clear();
+ negrito_chk->setChecked(false);
+ italico_chk->setChecked(false);
+
+ palette.setColor(QPalette::Button, QColor(0,0,0));
+ sel_cor_tb->setPalette(palette);
+
+ //Executa o método que trata o evento de esconder da classe superior
+ ObjetoBaseWidget::hideEvent(evento);
+}
+//----------------------------------------------------------
+void CaixaTextoWidget::definirAtributos(ModeloBD *modelo, ListaOperacoes *lista_op, CaixaTexto *caixa_texto, float px_objeto, float py_objeto)
+{
+ /* Caso a caixa de texto esteja alocada, preenche o formulário
+ com os valores deste objeto */
+ if(caixa_texto)
+ {
+ QPalette palette;
+ palette.setColor(QPalette::Button, caixa_texto->obterCorTexto());
+ sel_cor_tb->setPalette(palette);
+
+ texto_txt->setPlainText(QString::fromUtf8(caixa_texto->obterComentario()));
+ negrito_chk->setChecked(caixa_texto->obterAtributoTexto(CaixaTexto::TEXTO_NEGRITO));
+ italico_chk->setChecked(caixa_texto->obterAtributoTexto(CaixaTexto::TEXTO_ITALICO));
+ }
+
+ //Define os atributos do formulários e da janela pai
+ ObjetoBaseWidget::definirAtributos(modelo, lista_op, caixa_texto, NULL, px_objeto, py_objeto);
+}
+//----------------------------------------------------------
+void CaixaTextoWidget::selecionarCorTexto(void)
+{
+ QColorDialog cor_dlg;
+ QPalette palette;
+
+ cor_dlg.setWindowTitle(trUtf8("Selecionar cor de texto"));
+ cor_dlg.exec();
+
+ if(cor_dlg.result()==QDialog::Accepted)
+ {
+ palette.setColor(QPalette::Button, cor_dlg.selectedColor());
+ sel_cor_tb->setPalette(palette);
+ }
+}
+//----------------------------------------------------------
+void CaixaTextoWidget::aplicarConfiguracao(void)
+{
+ try
+ {
+ CaixaTexto *caixa=NULL;
+
+ iniciarConfiguracao<CaixaTexto>();
+
+ caixa=dynamic_cast<CaixaTexto *>(this->objeto);
+ //caixa->definirPosicaoObjeto(QPointF(this->px_objeto, this->py_objeto));
+ caixa->definirComentario(texto_txt->toPlainText());
+ caixa->definirAtributoTexto(CaixaTexto::TEXTO_ITALICO, italico_chk->isChecked());
+ caixa->definirAtributoTexto(CaixaTexto::TEXTO_NEGRITO, negrito_chk->isChecked());
+ caixa->definirCorTexto(sel_cor_tb->palette().color(QPalette::Button));
+
+ ObjetoBaseWidget::aplicarConfiguracao();
+ finalizarConfiguracao();
+ }
+ catch(Excecao &e)
+ {
+ /* Cancela a configuração o objeto removendo a ultima operação adicionada
+ referente ao objeto editado/criado e desaloca o objeto
+ caso o mesmo seja novo */
+ cancelarConfiguracao();
+ throw Excecao(e.obterMensagemErro(),e.obterTipoErro(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e);
+ }
+}
+//***********************************************************
View
47 libpgmodeler_ui/src/caixatextowidget.h
@@ -0,0 +1,47 @@
+/*
+# Projeto: Modelador de Banco de Dados PostgreSQL (pgModeler)
+# Sub-projeto: Biblioteca libpgsqldbm_ui
+# Classe: CaixaTextoWidget
+# Descrição: Definição da classe que implementa o formulário de criação e
+# edição de caixa de texto no modelo de banco de dados.
+#
+# Copyleft 2006-2012 - Raphael Araujo e Silva <rkhaotix@gmail.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License
+
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+#ifndef CAIXATEXTO_WIDGET_H
+#define CAIXATEXTO_WIDGET_H
+
+#include "ui_caixatextowidget.h"
+#include "objetobasewidget.h"
+//***********************************************************
+class CaixaTextoWidget: public ObjetoBaseWidget, public Ui::CaixaTextoWidget {
+ Q_OBJECT
+
+ private:
+
+ public:
+ CaixaTextoWidget(QWidget * parent = 0);
+ void hideEvent(QHideEvent *evento);
+ void definirAtributos(ModeloBD *modelo, ListaOperacoes *lista_op, CaixaTexto *caixa_texto=NULL, float px_objeto=NAN, float py_objeto=NAN);
+
+ private slots:
+ void selecionarCorTexto(void);
+
+ public slots:
+ void aplicarConfiguracao(void);
+};
+//***********************************************************
+#endif
View
317 libpgmodeler_ui/src/classeoperadoreswidget.cpp
@@ -0,0 +1,317 @@
+#include "classeoperadoreswidget.h"
+//***********************************************************
+ClasseOperadoresWidget::ClasseOperadoresWidget(QWidget *parent): ObjetoBaseWidget(parent, OBJETO_CLASSE_OPER)
+{
+ try
+ {
+ QStringList tipos;
+ QGridLayout *grid=NULL;
+
+ Ui_ClasseOperadoresWidget::setupUi(this);
+
+ sel_familiaop=NULL;
+ sel_operador=NULL;
+ sel_funcao=NULL;
+ tipo_dado=NULL;
+ tipo_armazenamento=NULL;
+ tab_elementos=NULL;
+
+ sel_familiaop=new SeletorObjetoWidget(OBJETO_FAMILIA_OPER, false, this);
+ sel_operador=new SeletorObjetoWidget(OBJETO_OPERADOR, true, this);
+ sel_funcao=new SeletorObjetoWidget(OBJETO_FUNCAO, true, this);
+ tipo_dado=new TipoPgSQLWidget(this);
+ tipo_armazenamento=new TipoPgSQLWidget(this, trUtf8("Tipo de Armazenamento"));
+ tab_elementos=new TabelaObjetosWidget(TabelaObjetosWidget::TODOS_BOTOES, true, this);
+
+ /* A tabela de elementos é constituída de 4 colunas:
+ Nome do objeto, tipo, nº de suporte/estratégia e rechecagem. */
+ tab_elementos->definirNumColunas(4);
+ tab_elementos->definirRotuloCabecalho(trUtf8("Objeto"),0);
+ tab_elementos->definirIconeCabecalho(QPixmap(":/icones/icones/table.png"),0);
+
+ tab_elementos->definirRotuloCabecalho(trUtf8("Tipo"),1);
+ tab_elementos->definirIconeCabecalho(QPixmap(":/icones/icones/usertype.png"),1);
+
+ tab_elementos->definirRotuloCabecalho(trUtf8("Suporte/Estratégia"),2);
+ tab_elementos->definirRotuloCabecalho(trUtf8("Rechecar"),3);
+
+ //Configurando a disposição dos campos no layout
+ grid=new QGridLayout;
+ grid->setContentsMargins(0,0,0,0);
+ grid->addWidget(classepadrao_lbl,0,2,1,1);
+ grid->addWidget(classepadrao_chk,0,3,1,1);
+ grid->addWidget(tipo_index_lbl,0,0,1,1);
+ grid->addWidget(tipo_index_cmb,0,1,1,1);
+ grid->addWidget(familia_lbl,2,0,1,1);
+ grid->addWidget(sel_familiaop,2,1,1,4);
+ grid->addWidget(tipo_dado,4,0,1,5);
+ grid->addWidget(elementos_grp,5,0,1,5);
+ this->setLayout(grid);
+ configurarLayouFormulario(grid, OBJETO_CLASSE_OPER);
+
+ grid=dynamic_cast<QGridLayout *>(elementos_grp->layout());
+ grid->addWidget(sel_funcao, 1,1,1,4);
+ grid->addWidget(sel_operador, 2,1,1,4);
+ grid->addWidget(tipo_armazenamento, 5,0,1,5);
+ grid->addWidget(tab_elementos, 6,0,1,4);
+
+ connect(janela_pai->aplicar_ok_btn,SIGNAL(clicked(bool)), this, SLOT(aplicarConfiguracao(void)));
+ connect(tipo_elem_cmb, SIGNAL(currentIndexChanged(int)), this, SLOT(selecionarTipoElemento(int)));
+
+ //Conectando os sinais emitidos pela tabela de elementos ao slots de manipulação de elementos
+ connect(tab_elementos, SIGNAL(s_linhaAdicionada(int)), this, SLOT(manipularElemento(int)));
+ connect(tab_elementos, SIGNAL(s_linhaAtualizada(int)), this, SLOT(manipularElemento(int)));
+ connect(tab_elementos, SIGNAL(s_linhaEditada(int)), this, SLOT(editarElemento(int)));
+
+ janela_pai->setMinimumSize(540, 590);
+ selecionarTipoElemento(0);
+
+ //Configura o combobox do formulário listando todos os tipos de indexação do PostgreSQL
+ TipoIndexacao::obterTipos(tipos);
+ tipo_index_cmb->addItems(tipos);
+ }
+ catch(Excecao &e)
+ {
+ //Redireciona o erro
+ throw Excecao(e.obterMensagemErro(),e.obterTipoErro(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e);
+ }
+}
+//----------------------------------------------------------
+void ClasseOperadoresWidget::hideEvent(QHideEvent *evento)
+{
+ //Retorna os widgets aos valores padrão
+ sel_funcao->removerObjetoSelecionado();
+ sel_operador->removerObjetoSelecionado();
+ num_suporte_sb->setValue(1);
+ rechecar_chk->setChecked(false);
+ tab_elementos->removerLinhas();
+ selecionarTipoElemento(0);
+
+ //Executa o método que trata o evento de esconder da classe superior
+ ObjetoBaseWidget::hideEvent(evento);
+}
+//----------------------------------------------------------
+void ClasseOperadoresWidget::selecionarTipoElemento(int tipo)
+{
+ unsigned tipo_sel=static_cast<unsigned>(tipo);
+
+ //Exibe os campos do elemento conforme o tipo selecionado
+
+ //Campos exclusivos para o tipo FUNÇÃO
+ funcao_lbl->setVisible(tipo_sel==ElemClasseOperadores::ELEM_FUNCAO);
+ sel_funcao->setVisible(tipo_sel==ElemClasseOperadores::ELEM_FUNCAO);
+
+ //Campos exclusivos para o tipo OPERADOR
+ operador_lbl->setVisible(tipo_sel==ElemClasseOperadores::ELEM_OPERADOR);
+ sel_operador->setVisible(tipo_sel==ElemClasseOperadores::ELEM_OPERADOR);
+ rechecar_chk->setVisible(tipo_sel==ElemClasseOperadores::ELEM_OPERADOR);
+
+ //Campos exclusivos para o tipo ARMAZENAMENTO
+ tipo_armazenamento->setVisible(tipo_sel==ElemClasseOperadores::ELEM_ARMAZENAMENTO);
+
+ //Campos comuns aos tipos FUNÇÃO e OPERADOR
+ num_suporte_lbl->setVisible(tipo_sel!=ElemClasseOperadores::ELEM_ARMAZENAMENTO);
+ num_suporte_sb->setVisible(tipo_sel!=ElemClasseOperadores::ELEM_ARMAZENAMENTO);
+}
+//----------------------------------------------------------
+void ClasseOperadoresWidget::editarElemento(int idx_linha)
+{
+ ElemClasseOperadores elem;
+
+ //Obtém o elemento da linha selecionada na tabela
+ elem=tab_elementos->obterDadoLinha(idx_linha).value<ElemClasseOperadores>();
+
+ //Preenche o formulário com atributos do elemento
+ tipo_elem_cmb->setCurrentIndex(elem.obterTipoElemento());
+ sel_funcao->definirObjeto(elem.obterFuncao());
+ sel_operador->definirObjeto(elem.obterOperador());
+ rechecar_chk->setChecked(elem.rechecarElemento());
+ num_suporte_sb->setValue(elem.obterNumEstrategia());
+ tipo_armazenamento->definirAtributos(elem.obterTipoArmazenamento(),this->modelo);
+}
+//----------------------------------------------------------
+void ClasseOperadoresWidget::exibirDadosElemento(ElemClasseOperadores elem, int idx_linha)
+{
+ unsigned tipo_elem;
+
+ //Obtém o tipo do elemento
+ tipo_elem=elem.obterTipoElemento();
+
+ /* Para o tipo FUNÇÃO são exibidas na coluna 0 e 1, respectivamente,
+ a assinatura da função e o tipo do objeto (função) */
+ if(tipo_elem==ElemClasseOperadores::ELEM_FUNCAO)
+ {
+ tab_elementos->definirTextoCelula(QString::fromUtf8(elem.obterFuncao()->obterAssinatura()), idx_linha, 0);
+ tab_elementos->definirTextoCelula(QString::fromUtf8(elem.obterFuncao()->obterNomeTipoObjeto()), idx_linha, 1);
+ }
+ /* Para o tipo OPERADOR são exibidas na coluna 0 e 1, respectivamente,
+ a assinatura do operador e o tipo do objeto (operador) */
+ else if(tipo_elem==ElemClasseOperadores::ELEM_OPERADOR)
+ {
+ tab_elementos->definirTextoCelula(QString::fromUtf8(elem.obterOperador()->obterAssinatura()), idx_linha, 0);
+ tab_elementos->definirTextoCelula(QString::fromUtf8(elem.obterOperador()->obterNomeTipoObjeto()), idx_linha, 1);
+ }
+ /* Para o tipo ARMAZENAMENTO são exibidas na coluna 0 e 1, respectivamente,
+ a nome completo do tipo e o tipo do objeto (tipo) */
+ else
+ {
+ tab_elementos->definirTextoCelula(*elem.obterTipoArmazenamento(), idx_linha, 0);
+ tab_elementos->definirTextoCelula(QString::fromUtf8(ObjetoBase::obterNomeTipoObjeto(OBJETO_TIPO)), idx_linha, 1);
+ }
+
+ /* Para os tipos FUNÇÃO e OPERADOR é na coluna 2
+ o número de suporte/estratégia da função ou operador */
+ if(tipo_elem!=ElemClasseOperadores::ELEM_ARMAZENAMENTO)
+ tab_elementos->definirTextoCelula(QString("%1").arg(elem.obterNumEstrategia()), idx_linha, 2);
+ /* Para o tipo ARMAZENAMENTO este campo não é preenchido pois não aplica
+ esta categoria de elemento */
+ else
+ tab_elementos->definirTextoCelula("-", idx_linha, 2);
+
+ /* Para o tipo OPERADOR na coluna 3 é exibido se o operador
+ necessita ser rechecado ou não */
+ if(tipo_elem==ElemClasseOperadores::ELEM_OPERADOR)
+ {
+ if(elem.rechecarElemento())
+ tab_elementos->definirTextoCelula(trUtf8("Sim"), idx_linha, 3);
+ else
+ tab_elementos->definirTextoCelula(trUtf8("Não"), idx_linha, 3);
+ }
+ /* Para os tipos FUNÇÃO e ARMAZENAMENTO este campo não é preenchido
+ pois não aplica esta categorias de elementos */
+ else
+ tab_elementos->definirTextoCelula("-", idx_linha, 3);
+
+ //Define o dado da linha como sendo o elemento fornecido no parâmetro.
+ tab_elementos->definirDadoLinha(QVariant::fromValue<ElemClasseOperadores>(elem), idx_linha);
+}
+//----------------------------------------------------------
+void ClasseOperadoresWidget::manipularElemento(int idx_linha)
+{
+ ElemClasseOperadores elem;
+ unsigned tipo_elem;
+
+ //Obtém o tipo do elemento
+ tipo_elem=tipo_elem_cmb->currentIndex();
+
+ try
+ {
+ /* Caso seja do tipo FUNÇÃO, atribui a função selecionado no widget seletor de função
+ e também o valor configurado como suporte no formulário */
+ if(tipo_elem==ElemClasseOperadores::ELEM_FUNCAO)
+ elem.definirFuncao(dynamic_cast<Funcao *>(sel_funcao->obterObjeto()), num_suporte_sb->value());
+ /* Caso seja do tipo OPERADOR, atribui o operador selecionado no widget seletor de operador,
+ o valor configurado como suporte no formulário e o estado do checkbox de rechecagem */
+ else if(tipo_elem==ElemClasseOperadores::ELEM_OPERADOR)
+ elem.definirOperador(dynamic_cast<Operador *>(sel_operador->obterObjeto()), num_suporte_sb->value(), rechecar_chk->isChecked());
+ //Caso seja do tipo ARMAZENAMENTO, atribui o tipo configurado no widget de configuração de tipo
+ else
+ elem.definirArmazenamento(tipo_armazenamento->obterTipoPgSQL());
+
+ //Exibe o elemento configurado na tabela
+ exibirDadosElemento(elem, idx_linha);
+
+ //Reinicia o formulário de configuração de elementos
+ sel_funcao->removerObjetoSelecionado();
+ sel_operador->removerObjetoSelecionado();
+ num_suporte_sb->setValue(1);
+ rechecar_chk->setChecked(false);
+ tab_elementos->limparSelecao();
+ }
+ catch(Excecao &e)
+ {
+ /* Em caso de erro e caso a linha atual da tabela esteja sem dados (algum campo sem texto)
+ indica que a operação de inserção de um elemento é que gerou a exceção e para tanto
+ a linha recém adicionada precisa ser removida */
+ if(tab_elementos->obterTextoCelula(idx_linha, 0).isEmpty())
+ tab_elementos->removerLinha(idx_linha);
+
+ throw Excecao(e.obterMensagemErro(),e.obterTipoErro(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e);
+ }
+}
+//----------------------------------------------------------
+void ClasseOperadoresWidget::definirAtributos(ModeloBD *modelo, ListaOperacoes *lista_op, ClasseOperadores *classe_op)
+{
+ TipoPgSQL tipo;
+ unsigned i, qtd;
+
+ //Define os atributos do formulários e da janela pai
+ ObjetoBaseWidget::definirAtributos(modelo, lista_op, classe_op);
+
+ //Configura o modelo de objetos de referência dos widgets
+ sel_familiaop->definirModelo(modelo);
+ sel_funcao->definirModelo(modelo);
+ sel_operador->definirModelo(modelo);
+ tipo_armazenamento->definirAtributos(tipo, modelo);
+
+ //Caso a classe de operadores passada esteja alcada
+ if(classe_op)
+ {
+ //Obtém o tipo de dado que a classe opera
+ tipo=classe_op->obterTipoDado();
+
+ //Exibe no formulário a família de operadores usada pela classe
+ sel_familiaop->definirObjeto(classe_op->obterFamilia());
+
+ //Marca no formulário se a classe é considerada padrão
+ classepadrao_chk->setChecked(classe_op->classePadrao());
+
+ //Marca no combobox o tipo de indexão usada pela classe
+ tipo_index_cmb->setCurrentIndex(tipo_index_cmb->findText(~(classe_op->obterTipoIndexacao())));
+
+ //Exibe na tabela os elementos configuradas para a classe de operadores
+ tab_elementos->blockSignals(true);
+ qtd=classe_op->obterNumElemClasseOperadores();
+ for(i=0; i < qtd; i++)
+ {
+ tab_elementos->adicionarLinha();
+ exibirDadosElemento(classe_op->obterElementoClasse(i), i);
+ }
+ tab_elementos->blockSignals(false);
+ tab_elementos->limparSelecao();
+ }
+
+ //Exibe no widget de tipos pgsql, o tipo de dados que a classe opera
+ tipo_dado->definirAtributos(tipo, modelo);
+}
+//----------------------------------------------------------
+void ClasseOperadoresWidget::aplicarConfiguracao(void)
+{
+ try
+ {
+ ClasseOperadores *classe_op=NULL;
+ unsigned i, qtd;
+
+ iniciarConfiguracao<ClasseOperadores>();
+
+ //Obtém a referência à classe de objetos que está sendo manipulada
+ classe_op=dynamic_cast<ClasseOperadores *>(this->objeto);
+
+ //Atribui os valores configurados no formulário à classe de operadores
+ classe_op->definirPadrao(classe_op->classePadrao());
+ classe_op->definirFamilia(dynamic_cast<FamiliaOperadores *>(sel_familiaop->obterObjeto()));
+ classe_op->definirTipoIndexacao(TipoIndexacao(tipo_index_cmb->currentText()));
+ classe_op->definirTipoDado(tipo_dado->obterTipoPgSQL());
+
+ /* Remove todos os elementos da classe de operadores e em seguida
+ insere aqueles configurados na tabela à classe */
+ classe_op->removerElementosClasse();
+ qtd=tab_elementos->obterNumLinhas();
+
+ for(i=0; i < qtd; i++)
+ classe_op->adicionarElementoClasse(tab_elementos->obterDadoLinha(i).value<ElemClasseOperadores>());
+
+ //Aplica e finaliza a configuração da classe de operadores
+ ObjetoBaseWidget::aplicarConfiguracao();
+ finalizarConfiguracao();
+ }
+ catch(Excecao &e)
+ {
+ /* Cancela a configuração o objeto removendo a ultima operação adicionada
+ referente ao objeto editado/criado e desaloca o objeto
+ caso o mesmo seja novo */
+ cancelarConfiguracao();
+ throw Excecao(e.obterMensagemErro(),e.obterTipoErro(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e);
+ }
+}
+//***********************************************************
View
80 libpgmodeler_ui/src/classeoperadoreswidget.h
@@ -0,0 +1,80 @@
+/*
+# Projeto: Modelador de Banco de Dados PostgreSQL (pgModeler)
+# Sub-projeto: Biblioteca libpgsqldbm_ui
+# Classe: FamiliaOperadoresWidget
+# Descrição: Definição da classe que implementa o formulário de
+# edição dos atributos de classe de operadores.
+#
+# Copyleft 2006-2012 - Raphael Araújo e Silva <rkhaotix@gmail.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License
+
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+#ifndef CLASSEOPERADORES_WIDGET_H
+#define CLASSEOPERADORES_WIDGET_H
+
+#include "objetobasewidget.h"
+#include "ui_classeoperadoreswidget.h"
+#include "tipopgsqlwidget.h"
+#include "tabelaobjetoswidget.h"
+
+/* Declarando a classe ElemClasseOperadores como metatype para que esta
+ possa ser usada em conjunto com a classe QVariant (vide documentação
+ da classe QVariant e QMetaType). Esta declaração é uma macro específica
+ do Qt e está sendo usada para facilitar o uso com o formulário de edição
+ de classes de operadores.*/
+#include <QMetaType>
+Q_DECLARE_METATYPE(ElemClasseOperadores)
+//***********************************************************
+class ClasseOperadoresWidget: public ObjetoBaseWidget, public Ui::ClasseOperadoresWidget {
+ Q_OBJECT
+
+ private:
+ SeletorObjetoWidget *sel_familiaop,
+ *sel_funcao,
+ *sel_operador;
+
+ TipoPgSQLWidget *tipo_dado,
+ *tipo_armazenamento;
+
+ //Tabela de objetos que armazena os elementos de classe de operadores
+ TabelaObjetosWidget *tab_elementos;
+
+ public:
+ ClasseOperadoresWidget(QWidget * parent = 0);
+ void definirAtributos(ModeloBD *modelo, ListaOperacoes *lista_op, ClasseOperadores *classe_op);
+
+ private slots:
+ void hideEvent(QHideEvent *);
+
+ /* Métodos que muda a visualização do formulário de configuração de elementos
+ conforme o tipo de elemento selecionado no combobox 'tipo_elem_cmb' */
+ void selecionarTipoElemento(int tipo);
+
+ //Exibe as informações de um dado elemento na tabela de elementos na linha especificada
+ void exibirDadosElemento(ElemClasseOperadores elem, int idx_linha);
+
+ /* Configura uma instância da classe ElemClasseOperadores com os dados fornecidos no formulário
+ adicionalmente o elemento configurado é exibido na linha especificada da tabela de elementos */
+ void manipularElemento(int idx_linha);
+
+ /* Preenche o formulário de elemento com os dados do elemento selecionado na tabela para
+ permitir uma posterior atualização dos atributos */
+ void editarElemento(int idx_linha);
+
+ public slots:
+ void aplicarConfiguracao(void);
+};
+//***********************************************************
+#endif
View
198 libpgmodeler_ui/src/codigofontewidget.cpp
@@ -0,0 +1,198 @@
+#include "codigofontewidget.h"
+#include "progressotarefa.h"
+extern ProgressoTarefa *prog_tarefa;
+//***********************************************************
+CodigoFonteWidget::CodigoFonteWidget(QWidget *parent): ObjetoBaseWidget(parent)
+{
+ try
+ {
+ vector<QString> versoes;
+ QFont fonte;
+
+ Ui_CodigoFonteWidget::setupUi(this);
+ configurarLayouFormulario(codigofonte_grid, OBJETO_BASE);
+ comentario_lbl->setText(trUtf8("Tipo:"));
+
+ destaque_sql=NULL;
+ destaque_xml=NULL;
+
+ fonte=nome_edt->font();
+ fonte.setItalic(true);
+ comentario_edt->setFont(fonte);
+ comentario_edt->setReadOnly(true);
+ nome_edt->setFont(fonte);
+ nome_edt->setReadOnly(true);
+
+ //Obtém as versões disponíveis de esquemas SQL
+ ParserEsquema::obterVersoesPgSQL(versoes);
+
+ //Preenche o combobox de versões
+ versoes_cmb->addItems(QStringList(QList<QString>::fromVector(QVector<QString>::fromStdVector(versoes))));
+
+ //Define os atributos do formulários e da janela pai
+ janela_pai->setWindowTitle(trUtf8("Visualização de Código-Fonte"));
+ janela_pai->definirBotoes(CaixaMensagem::BOTAO_OK);
+ janela_pai->setMinimumSize(550, 450);
+
+ //Conecta o botão ok do formulário pai com o método de fechamento do formulário
+ connect(janela_pai->aplicar_ok_btn, SIGNAL(clicked(bool)), janela_pai, SLOT(close(void)));
+
+ /* Conecta o sinal de mudança de itens no combo box com a geração da sql do objeto.
+ Isso permite que a SQL seja gerada para a versão apropriada, toda vez que o
+ usuário mudar um item no combobox */
+ connect(versoes_cmb, SIGNAL(currentIndexChanged(int)), this, SLOT(gerarCodigoFonteObjeto(int)));
+ connect(codigofonte_twg, SIGNAL(currentChanged(int)), this, SLOT(definirAbaCodigoFonte(int)));
+
+ destaque_sql=new DestaqueSintaxe(codigosql_txt, false);
+ destaque_xml=new DestaqueSintaxe(codigoxml_txt, false);
+ }
+ catch(Excecao &e)
+ {
+ //Redireciona o erro
+ throw Excecao(e.obterMensagemErro(),e.obterTipoErro(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e);
+ }
+}
+//----------------------------------------------------------
+void CodigoFonteWidget::hideEvent(QHideEvent *evento)
+{
+ versoes_cmb->blockSignals(true);
+ codigofonte_twg->blockSignals(true);
+ versoes_cmb->setCurrentIndex(0);
+ codigofonte_twg->setCurrentIndex(0);
+ versoes_cmb->blockSignals(false);
+ codigofonte_twg->blockSignals(false);
+
+ //Limpa a caixa de texto de código fonte
+ codigosql_txt->clear();
+ codigoxml_txt->clear();
+ ObjetoBaseWidget::hideEvent(evento);
+}
+//----------------------------------------------------------
+void CodigoFonteWidget::definirAbaCodigoFonte(int)
+{
+ QString icone_codigo;
+ bool campos_ativos=false;
+ QPixmap icone;
+ TipoObjetoBase tipo_obj=objeto->obterTipoObjeto();
+
+ //Caso a aba código SQL esteja visível configura o icone de código SQL
+ if(codigofonte_twg->currentIndex()==0)
+ icone_codigo="codigosql.png";
+ else
+ //Caso contrário configura o ícone de código XML
+ icone_codigo="codigoxml.png";
+
+ /* Os campos de seleção de versão e seus respectivos labels
+ devem estar ativados quando a aba de código SQL está ativa
+ ou quando o tipo de objeto seja um dos muitos os quais
+ possuem definição SQL, caso contrário os campos citados
+ aparecerão desabilitados no formulário */
+ campos_ativos=(codigofonte_twg->currentIndex()==0 &&
+ (tipo_obj!=OBJETO_RELACAO_BASE && tipo_obj!=OBJETO_CAIXA_TEXTO));
+
+ //Configura o ícone de tipo de código fonte a ser exibido
+ icone=QPixmap(QString(":/icones/icones/") + icone_codigo);
+ iconecodigo_lbl->setPixmap(icone);
+
+ //Ativa/desativa os campos de acordo com a aba visível
+ versoes_cmb->setEnabled(campos_ativos);
+ pgsql_lbl->setEnabled(campos_ativos);
+ versao_lbl->setEnabled(campos_ativos);
+}
+//----------------------------------------------------------
+void CodigoFonteWidget::gerarCodigoFonteObjeto(int)
+{
+ TipoObjetoBase tipo_obj;
+
+ try
+ {
+ //Limpa os campos antes de preenche-los com o código fonte do objeto
+ codigosql_txt->clear();
+ codigoxml_txt->clear();
+
+ //Obtém o código SQL do objeto caso o mesmo não seja um relacionamento ou caixa de texto
+ tipo_obj=objeto->obterTipoObjeto();
+ if(tipo_obj!=OBJETO_RELACAO_BASE && tipo_obj!=OBJETO_CAIXA_TEXTO)
+ {
+ if(tipo_obj==OBJETO_BANCO_DADOS)
+ {
+ prog_tarefa->setWindowTitle(trUtf8("Gerando código-fonte..."));
+ connect(this->modelo, SIGNAL(s_objetoCarregado(int,QString,unsigned)),
+ prog_tarefa, SLOT(executarProgesso(int,QString,unsigned)));
+ }
+
+ ParserEsquema::definirVersaoPgSQL(versoes_cmb->currentText());
+ codigosql_txt->setPlainText(QString::fromUtf8(ModeloBD::validarDefinicaoObjeto(objeto, ParserEsquema::DEFINICAO_SQL)));
+ }
+
+ //Caso o objeto não possua uma definição SQL exibe o texto avisando o fato
+ if(codigosql_txt->toPlainText()=="")
+ codigosql_txt->setPlainText(trUtf8("-- Código SQL não disponível para este tipo de objeto. --"));
+
+ //Configura a caixa de código fonte XML com o código XML do objeto
+ codigoxml_txt->setPlainText(QString::fromUtf8(ModeloBD::validarDefinicaoObjeto(objeto, ParserEsquema::DEFINICAO_XML)));
+
+ //Configura a aba e os ícones de acordo com a que está em foco
+ definirAbaCodigoFonte();
+
+ prog_tarefa->close();
+ disconnect(this->modelo, NULL, prog_tarefa, NULL);
+ }
+ catch(Excecao &e)
+ {
+ prog_tarefa->close();
+ disconnect(this->modelo, NULL, prog_tarefa, NULL);
+ //Redireciona o erro
+ throw Excecao(e.obterMensagemErro(),e.obterTipoErro(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e);
+ }
+}
+//----------------------------------------------------------
+void CodigoFonteWidget::definirAtributos(ModeloBD *modelo, ObjetoBase *objeto)
+{
+ /* Caso o objeto esteja alocado, preenche o formulário
+ com o codigo SQL que o define em banco de dados */
+ if(objeto)
+ {
+ QPixmap icone_obj;
+
+ try
+ {
+ //Executa a configuração específica do widget
+ ObjetoBaseWidget::definirAtributos(modelo, NULL, objeto);
+ this->janela_pai->aplicar_ok_btn->setEnabled(true);
+ this->obj_protegido_frm->setVisible(false);
+
+ //Configura o icone do objeto a ser exibido
+ icone_obj=QPixmap(QString(":/icones/icones/") +
+ ObjetoBase::obterNomeEsquemaObjeto(objeto->obterTipoObjeto()) + QString(".png"));
+ iconeobj_lbl->setPixmap(icone_obj);
+
+ //Preenche os campos do formulario com os atributos do objeto
+ comentario_edt->setText(QString::fromUtf8(objeto->obterNomeTipoObjeto()));
+
+ if(!destaque_sql->configuracaoCarregada())
+ {
+ destaque_sql->carregarConfiguracao(AtributosGlobais::DIR_CONFIGURACOES +
+ AtributosGlobais::SEP_DIRETORIO +
+ AtributosGlobais::CONF_DESTAQUE_SQL +
+ AtributosGlobais::EXT_CONFIGURACAO);
+ }
+
+ if(!destaque_xml->configuracaoCarregada())
+ {
+ destaque_xml->carregarConfiguracao(AtributosGlobais::DIR_CONFIGURACOES +
+ AtributosGlobais::SEP_DIRETORIO +
+ AtributosGlobais::CONF_DESTAQUE_XML +
+ AtributosGlobais::EXT_CONFIGURACAO);
+ }
+
+ gerarCodigoFonteObjeto();
+ }
+ catch(Excecao &e)
+ {
+ //Redireciona o erro
+ throw Excecao(e.obterMensagemErro(),e.obterTipoErro(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e);
+ }
+ }
+}
+//***********************************************************
View
49 libpgmodeler_ui/src/codigofontewidget.h
@@ -0,0 +1,49 @@
+/*
+# Projeto: Modelador de Banco de Dados PostgreSQL (pgModeler)
+# Sub-projeto: Biblioteca libpgsqldbm_ui
+# Classe: CodigoFonteWidget
+# Descrição: Definição da classe que implementa o formulário de visualização
+# do código SQL/XML de um dado objeto.
+#
+# Copyleft 2006-2012 - Raphael Araujo e Silva <rkhaotix@gmail.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License
+
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+#ifndef CODIGOFONTE_WIDGET_H
+#define CODIGOFONTE_WIDGET_H
+
+#include "ui_codigofontewidget.h"
+#include "objetobasewidget.h"
+//***********************************************************
+class CodigoFonteWidget: public ObjetoBaseWidget, public Ui::CodigoFonteWidget {
+ Q_OBJECT
+ private:
+ DestaqueSintaxe *destaque_sql,
+ *destaque_xml;
+
+ void aplicarConfiguracao(void){}
+
+ public:
+ CodigoFonteWidget(QWidget * parent = 0);
+ void hideEvent(QHideEvent *evento);
+ void definirAtributos(ModeloBD *modelo, ObjetoBase *objeto=NULL);
+
+ private slots:
+ void gerarCodigoFonteObjeto(int=0);
+ void definirAbaCodigoFonte(int=0);
+};
+//***********************************************************
+#endif
+
View
91 libpgmodeler_ui/src/colunawidget.cpp
@@ -0,0 +1,91 @@
+#include "colunawidget.h"
+//***********************************************************
+ColunaWidget::ColunaWidget(QWidget *parent): ObjetoBaseWidget(parent, OBJETO_COLUNA)
+{
+ try
+ {
+ Ui_ColunaWidget::setupUi(this);
+
+ //Cria um destacador de sintaxe no campo de expressão de checagem do domínio
+ dest_valor_padrao=NULL;
+ dest_valor_padrao=new DestaqueSintaxe(valor_padrao_txt, false);
+ dest_valor_padrao->carregarConfiguracao(AtributosGlobais::DIR_CONFIGURACOES +
+ AtributosGlobais::SEP_DIRETORIO +
+ AtributosGlobais::CONF_DESTAQUE_SQL +
+ AtributosGlobais::EXT_CONFIGURACAO);
+
+ tipo_col=NULL;
+ tipo_col=new TipoPgSQLWidget(this);
+ coluna_grid->addWidget(tipo_col,3,0,1,0);
+
+ configurarLayouFormulario(coluna_grid, OBJETO_COLUNA);
+ connect(janela_pai->aplicar_ok_btn,SIGNAL(clicked(bool)), this, SLOT(aplicarConfiguracao(void)));
+
+ janela_pai->setMinimumSize(530, 380);
+ janela_pai->setMaximumHeight(380);
+ }
+ catch(Excecao &e)
+ {
+ //Redireciona o erro
+ throw Excecao(e.obterMensagemErro(),e.obterTipoErro(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e);
+ }
+}
+//----------------------------------------------------------
+void ColunaWidget::hideEvent(QHideEvent *evento)
+{
+ valor_padrao_txt->clear();
+ nao_nulo_chk->setChecked(false);
+ ObjetoBaseWidget::hideEvent(evento);
+}
+//----------------------------------------------------------
+void ColunaWidget::definirAtributos(ModeloBD *modelo, ObjetoBase *objeto_pai, ListaOperacoes *lista_op, Coluna *coluna)
+{
+ TipoPgSQL tipo;
+
+ if(!objeto_pai)
+ throw Excecao(ERR_PGMODELER_ATROBJNAOALOC,__PRETTY_FUNCTION__,__FILE__,__LINE__);
+
+ //Define os atributos do formulários e da janela pai
+ ObjetoBaseWidget::definirAtributos(modelo, lista_op, coluna, objeto_pai);
+
+ if(coluna)
+ {
+ tipo=coluna->obterTipo();
+ nao_nulo_chk->setChecked(coluna->naoNulo());
+ valor_padrao_txt->setPlainText(QString::fromUtf8(coluna->obterValorPadrao()));
+ }
+
+ //Marca o tipo do domínio no widget de tipos pgsql
+ tipo_col->definirAtributos(tipo, modelo);
+}
+//----------------------------------------------------------
+void ColunaWidget::aplicarConfiguracao(void)
+{
+ try
+ {
+ Coluna *coluna=NULL;
+
+ iniciarConfiguracao<Coluna>();
+
+ //Obtém a referência à coluna que está sendo criada/editada
+ coluna=dynamic_cast<Coluna *>(this->objeto);
+
+ //Atribui os dados do formulário à coluna
+ coluna->definirNaoNulo(nao_nulo_chk->isChecked());
+ coluna->definirValorPadrao(valor_padrao_txt->toPlainText());
+ coluna->definirTipo(tipo_col->obterTipoPgSQL());
+
+ ObjetoBaseWidget::aplicarConfiguracao();
+
+ finalizarConfiguracao();
+ }
+ catch(Excecao &e)
+ {
+ /* Cancela a configuração o objeto removendo a ultima operação adicionada
+ referente ao objeto editado/criado e desaloca o objeto
+ caso o mesmo seja novo */
+ cancelarConfiguracao();
+ throw Excecao(e.obterMensagemErro(),e.obterTipoErro(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e);
+ }
+}
+//***********************************************************
View
52 libpgmodeler_ui/src/colunawidget.h
@@ -0,0 +1,52 @@
+/*
+# Projeto: Modelador de Banco de Dados PostgreSQL (pgModeler)
+# Sub-projeto: Biblioteca libpgsqldbm_ui
+# Classe: ColunaWidget
+# Descrição: Definição da classe que implementa o formulário de
+# edição dos atributos de colunas.
+#
+# Copyleft 2006-2012 - Raphael Araujo e Silva <rkhaotix@gmail.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License
+
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+#ifndef COLUNA_WIDGET_H
+#define COLUNA_WIDGET_H
+
+#include "objetobasewidget.h"
+#include "ui_colunawidget.h"
+#include "tipopgsqlwidget.h"
+//***********************************************************
+class ColunaWidget: public ObjetoBaseWidget, public Ui::ColunaWidget {
+ Q_OBJECT
+
+ private:
+ //Destacador de sintaxe para o campo de valor padrão da coluna
+ DestaqueSintaxe *dest_valor_padrao;
+
+ //Seletor de tipo da coluna
+ TipoPgSQLWidget *tipo_col;
+
+ public:
+ ColunaWidget(QWidget * parent = 0);
+ void definirAtributos(ModeloBD *modelo, ObjetoBase *objeto_pai, ListaOperacoes *lista_op, Coluna *coluna);
+
+ private slots:
+ void hideEvent(QHideEvent *);
+
+ public slots:
+ void aplicarConfiguracao(void);
+};
+//***********************************************************
+#endif
View
426 libpgmodeler_ui/src/confaparenciawidget.cpp
@@ -0,0 +1,426 @@
+#include "confaparenciawidget.h"
+//***********************************************************
+ConfAparenciaWidget::ConfAparenciaWidget(QWidget * parent) : QWidget(parent)
+{
+ setupUi(this);
+
+ //Armazena cada id de elemento no arquivo de configuração
+ QString ids_confs[]={
+ AtributosParsers::GLOBAL, AtributosParsers::RESTRICOES, AtributosParsers::SELECAO_OBJETO,
+ AtributosParsers::INFO_POSICAO, AtributosParsers::INFO_POSICAO,
+ AtributosParsers::TIPO_OBJETO, AtributosParsers::ARCO_CADEADO, AtributosParsers::CORPO_CADEADO,
+ AtributosParsers::NOME_ESQUEMA_TABELA, AtributosParsers::NOME_TABELA, AtributosParsers::CORPO_TABELA,
+ AtributosParsers::CORPO_EXT_TABELA, AtributosParsers::TITULO_TABELA, ObjetoBase::obterNomeEsquemaObjeto(OBJETO_REGRA),
+ ObjetoBase::obterNomeEsquemaObjeto(OBJETO_REGRA), ObjetoBase::obterNomeEsquemaObjeto(OBJETO_INDICE),
+ ObjetoBase::obterNomeEsquemaObjeto(OBJETO_INDICE), ObjetoBase::obterNomeEsquemaObjeto(OBJETO_GATILHO),
+ ObjetoBase::obterNomeEsquemaObjeto(OBJETO_GATILHO), AtributosParsers::NOME_ESQUEMA_VISAO, AtributosParsers::NOME_VISAO,
+ AtributosParsers::CORPO_VISAO, AtributosParsers::TITULO_VISAO, AtributosParsers::ALIAS,
+ AtributosParsers::COLUNA_REF, AtributosParsers::TABELA_REF, AtributosParsers::REFERENCIA,
+ ObjetoBase::obterNomeEsquemaObjeto(OBJETO_CAIXA_TEXTO), AtributosParsers::COLUNA, AtributosParsers::COLUNA,
+ AtributosParsers::COLUNA_HERDADA, AtributosParsers::COLUNA_PROTEGIDA, AtributosParsers::COLUNA_PK,
+ AtributosParsers::COLUNA_PK, AtributosParsers::COLUNA_FK, AtributosParsers::COLUNA_FK,
+ AtributosParsers::COLUNA_UQ, AtributosParsers::COLUNA_UQ, AtributosParsers::COLUNA_NN,
+ AtributosParsers::COLUNA_NN, AtributosParsers::RELACIONAMENTO, AtributosParsers::ROTULO,
+ AtributosParsers::ROTULO, AtributosParsers::ATRIBUTO, AtributosParsers::ATRIBUTO };
+ int i, qtd=elemento_cmb->count(),
+ //Este vetor armazena os índices dos elementos os quais referem-se a configuraçao de cor de objetos
+ vet_ids_aux[]={ 2, 4, 6, 7, 10, 11, 12, 14, 16, 18, 21, 22,
+ 26, 27, 29, 33, 35, 37, 39, 40, 42, 44 };
+ vector<int> ids_confs_obj(vet_ids_aux, vet_ids_aux + sizeof(vet_ids_aux) / sizeof(int));
+
+ //Aloca o vetor de itens de configuração e atribui cada id de configuração aos elementos
+ itens_conf.resize(qtd);
+ for(i=0; i < qtd; i++)
+ {
+ itens_conf[i].id_conf=ids_confs[i];
+ itens_conf[i].conf_obj=(std::find(ids_confs_obj.begin(), ids_confs_obj.end(), i)!=ids_confs_obj.end());
+ }
+
+ modelo=new ModeloBD;
+ cena=new CenaObjetos;
+ cena->setSceneRect(QRectF(0,0,500,500));
+
+ //Aloca o viewport com algumas opções de otimização na renderização
+ viewp=new QGraphicsView(cena);
+ viewp->setEnabled(false);
+ viewp->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ viewp->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ viewp->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+
+ //Ativa o antialiasing de fonte e objetos
+ viewp->setRenderHint(QPainter::Antialiasing);
+ viewp->setRenderHint(QPainter::TextAntialiasing);
+ viewp->setRenderHint(QPainter::SmoothPixmapTransform);
+
+ //Força a cena a ser desenhada da esquerda para a direita e de cima para baixo
+ viewp->setAlignment(Qt::AlignLeft | Qt::AlignTop);
+
+ //Otimizações: Cache do background (grade) e atualização mínima do viewport
+ viewp->setViewportUpdateMode(QGraphicsView::SmartViewportUpdate);
+ viewp->centerOn(0,0);
+
+ confaparencia_grid->addWidget(viewp, confaparencia_grid->count()-1, 0, 1, 5);
+
+ connect(elemento_cmb, SIGNAL(currentIndexChanged(int)), this, SLOT(habilitarElemConfiguracao(void)));
+ connect(cor1_tb, SIGNAL(clicked(void)), this, SLOT(aplicarCorElemento(void)));
+ connect(cor2_tb, SIGNAL(clicked(void)), this, SLOT(aplicarCorElemento(void)));
+ connect(cor3_tb, SIGNAL(clicked(void)), this, SLOT(aplicarCorElemento(void)));
+
+ connect(fonte_cmb, SIGNAL(currentFontChanged(QFont)), this, SLOT(aplicarEstiloFonte(void)));
+ connect(tam_fonte_spb, SIGNAL(valueChanged(double)), this, SLOT(aplicarEstiloFonte(void)));
+ connect(negrito_chk, SIGNAL(toggled(bool)), this, SLOT(aplicarEstiloFonte(void)));
+ connect(sublinhado_chk, SIGNAL(toggled(bool)), this, SLOT(aplicarEstiloFonte(void)));
+ connect(italico_chk, SIGNAL(toggled(bool)), this, SLOT(aplicarEstiloFonte(void)));
+}
+//-----------------------------------------------------------
+ConfAparenciaWidget::~ConfAparenciaWidget(void)
+{
+ delete(viewp);
+ delete(cena);
+ delete(modelo);
+}
+//-----------------------------------------------------------
+void ConfAparenciaWidget::criarObjetosExemplo(void)
+{
+ try
+ {
+ OGRelacionamento *rel=NULL;
+ OGCaixaTexto *caixa=NULL;
+ OGTabela *tab=NULL;
+ OGVisao *visao=NULL;
+ unsigned qtd, i;
+
+ //Caso não existam objetos no modelo faz o carregamento do arquivo
+ if(modelo->obterNumObjetos()==0)
+ {
+ modelo->carregarModelo(AtributosGlobais::DIR_CONFIGURACOES +
+ AtributosGlobais::SEP_DIRETORIO +
+ AtributosGlobais::MODELO_EXEMPLO);
+
+ qtd=modelo->obterNumObjetos(OBJETO_TABELA);
+ for(i=0; i < qtd; i++)
+ {
+ tab=new OGTabela(modelo->obterTabela(i));
+ tab->setSelected(i==1);
+ cena->addItem(tab);
+ }
+
+ qtd=modelo->obterNumObjetos(OBJETO_VISAO);
+ for(i=0; i < qtd; i++)
+ {
+ visao=new OGVisao(modelo->obterVisao(i));
+ cena->addItem(visao);
+ }
+
+ qtd=modelo->obterNumObjetos(OBJETO_RELACAO);
+ for(i=0; i < qtd; i++)
+ {
+ rel=new OGRelacionamento(modelo->obterRelacionamento(i, OBJETO_RELACAO));
+ cena->addItem(rel);
+ }
+
+ qtd=modelo->obterNumObjetos(OBJETO_RELACAO_BASE);
+ for(i=0; i < qtd; i++)
+ {
+ rel=new OGRelacionamento(modelo->obterRelacionamento(i, OBJETO_RELACAO_BASE));
+ cena->addItem(rel);
+ }
+
+ qtd=modelo->obterNumObjetos(OBJETO_CAIXA_TEXTO);
+ for(i=0; i < qtd; i++)
+ {
+ caixa=new OGCaixaTexto(modelo->obterCaixaTexto(i));
+ caixa->setSelected(i==0);
+ cena->addItem(caixa);
+ }
+ }
+ }
+ catch(Excecao &e)
+ {
+ throw Excecao(e.obterMensagemErro(),e.obterTipoErro(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e);
+ }
+}
+//-----------------------------------------------------------
+void ConfAparenciaWidget::carregarConfiguracao(void)
+{
+ try
+ {
+ int i, qtd=itens_conf.size();
+
+ //Carrega o arquivo de estilo de objetos
+ ObjetoGrafico::carregarEstiloObjetos();
+
+ //Cria os objetos de exemplo
+ this->criarObjetosExemplo();
+
+ //Obtém cada estilo carregado do arquivo e os atribui ao itens de configuração
+ for(i=0; i < qtd; i++)
+ {
+ //Caso o item de configuração atual refere-se a cores de um objeto
+ if(itens_conf[i].conf_obj)
+ {
+ //Obtém o estilo de preenchimento e da borda e os armazena no item atual
+ ObjetoGrafico::obterEstiloPreenchimento(itens_conf[i].id_conf,
+ itens_conf[i].cores[0], itens_conf[i].cores[1]);
+ itens_conf[i].cores[2]=ObjetoGrafico::obterEstiloBorda(itens_conf[i].id_conf).color();
+ }
+ else
+ //Caso o item atual seja um elemento de configuração de fonte, obtém o estilo de fonte respectivo
+ itens_conf[i].fmt_fonte=ObjetoGrafico::obterEstiloFonte(itens_conf[i].id_conf);
+ }
+
+ //Inicializa o formulário de configuração de aparência
+ this->habilitarElemConfiguracao();
+
+ //Marca no combo de fontes, a fonte global
+ fonte_cmb->setCurrentFont(ObjetoGrafico::obterEstiloFonte(AtributosParsers::GLOBAL).font());
+
+ //Define todos os objetos do modelo de exemplo como modificados, forçando seu redesenho
+ modelo->definirObjetosModificados();
+ cena->update();
+ }
+ catch(Excecao &e)
+ {
+ throw Excecao(e.obterMensagemErro(),e.obterTipoErro(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e);
+ }
+}
+//-----------------------------------------------------------
+void ConfAparenciaWidget::salvarConfiguracao(void)
+{
+ try
+ {
+ map<QString, QString> atribs;
+ vector<ItemConfAparencia>::iterator itr, itr_end;
+ ItemConfAparencia item;
+ QString id_atrib;
+ QFont fonte;
+
+ itr=itens_conf.begin();
+ itr_end=itens_conf.end();
+
+ while(itr!=itr_end)
+ {
+ item=(*itr);
+ itr++;
+
+ //Caso o item atual refere-se a um elemento de cor de objeto
+ if(item.conf_obj)
+ {
+ //Cria um atributo o qual armazena a cor de preenchimento
+ id_atrib=item.id_conf + QString("-color");
+ if(item.cores[0]==item.cores[1])
+ atribs[id_atrib]=item.cores[0].name();
+ else
+ atribs[id_atrib]=item.cores[0].name() + QString(",") + item.cores[1].name();
+
+ //Cria um atributo o qual armazena a cor da borda
+ id_atrib=item.id_conf + QString("-bcolor");
+ atribs[id_atrib]=item.cores[2].name();
+ }
+ /* Caso o item atual seja um elemento de fonte do objeto porém não seja o
+ elemento de configuração global de fonte */
+ else if(item.id_conf!=AtributosParsers::GLOBAL && !item.conf_obj)
+ {
+ //Obtém a fonte do item
+ fonte=item.fmt_fonte.font();
+
+ //Cria um atributo que armazena a cor da fonte
+ id_atrib=item.id_conf + QString("-fcolor");
+ atribs[id_atrib]=item.fmt_fonte.foreground().color().name();
+
+ //Cria um atributo que armazena se a fonte está em itálico, negrito e sublinhado
+ id_atrib=item.id_conf + QString("-") + AtributosParsers::ITALICO;
+ atribs[id_atrib]=(fonte.italic() ? AtributosParsers::VERDADEIRO : AtributosParsers::FALSO);
+
+ id_atrib=item.id_conf + QString("-") + AtributosParsers::NEGRITO;
+ atribs[id_atrib]=(fonte.bold() ? AtributosParsers::VERDADEIRO : AtributosParsers::FALSO);
+
+ id_atrib=item.id_conf + QString("-") + AtributosParsers::SUBLINHADO;
+ atribs[id_atrib]=(fonte.underline() ? AtributosParsers::VERDADEIRO : AtributosParsers::FALSO);
+ }
+ //Caso o item atual seja o elemento global de fonte
+ else
+ {
+ //Cria dois atributos que armazenam o nome e o tamanho da fonte global do modelo
+ atribs["font-name"]=QFontInfo(item.fmt_fonte.font()).family();
+ atribs["font-size"]=QString("%1").arg(item.fmt_fonte.font().pointSizeF());
+ }
+ }
+
+ //Especifica aos parâmetros de configuração de estilo de objetos os atributos configurados acima
+ params_config[AtributosGlobais::CONF_ESTILO_OBJETOS]=atribs;
+
+ //Salva a configuração em arquivo
+ ConfBaseWidget::salvarConfiguracao(AtributosGlobais::CONF_ESTILO_OBJETOS);
+ }
+ catch(Excecao &e)
+ {
+ throw Excecao(e.obterMensagemErro(),e.obterTipoErro(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e);
+ }
+}
+//-----------------------------------------------------------
+void ConfAparenciaWidget::habilitarElemConfiguracao(void)
+{
+ QPalette pal;
+ int idx=elemento_cmb->currentIndex();
+
+ //Widgets que ficam habilitados somente quando o elemento global de fonte está selecionado
+ fonte_cmb->setEnabled(idx==0);
+ fonte_lbl->setEnabled(idx==0);
+ tam_fonte_spb->setEnabled(idx==0);
+ unidade_lbl->setEnabled(idx==0);
+
+ /* Widgets que ficam habilitados somente quando o elemento atual não é o global e o
+ mesmo também não é elemento de cor de objetos */
+ sublinhado_chk->setEnabled(idx!=0 && !itens_conf[idx].conf_obj);
+ negrito_chk->setEnabled(idx!=0 && !itens_conf[idx].conf_obj);
+ italico_chk->setEnabled(idx!=0 && !itens_conf[idx].conf_obj