00001 /* 00002 * Copyright (C) 2009, Edmundo Albuquerque de Souza e Silva. 00003 * 00004 * This file may be distributed under the terms of the Q Public License 00005 * as defined by Trolltech AS of Norway and appearing in the file 00006 * LICENSE.QPL included in the packaging of this file. 00007 * 00008 * THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING 00009 * THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR 00010 * PURPOSE. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, 00011 * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING 00012 * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, 00013 * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION 00014 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 00015 * 00016 */ 00017 00018 #ifndef __RIOMMKEYWORDSDIALOG_H__ 00019 #define __RIOMMKEYWORDSDIALOG_H__ 00020 00021 #include <qdialog.h> 00022 #include <qpushbutton.h> 00023 #include <qlistview.h> 00024 #include <qstring.h> 00025 #include <qdom.h> 00026 #include <qptrstack.h> 00027 #include <qlayout.h> 00028 00029 #define DIALOG_WIDTH 320 // Tamanho horizontal da caixa de di�logo. 00030 #define DIALOG_HEIGHT 80 // Tamanho vertical da caixa de di�logo. 00031 #define MAX_KEYWORD_VIEW 15 // N�mero m�ximo de palavras-chave vis�veis (sem 00032 // a barra de rolagem). 00033 #define MIN_KEYWORD_VIEW 3 // N�mero m�nimo de palavras-chave vis�veis. 00034 #define KEYWORDS_HEIGHT 18 // Tamanho vertical de cada palavra-chave (varia 00035 // com a fonte?). 00036 #define KEYWORDS_VBORDER 25 // Tamanho vertical das bordas da QListView da 00037 // palavras-chave (emp�rico). 00038 #define MARGIN 10 // Tamanho das margens esquerda e direita. 00039 #define SPACING 5 // Espa�o entre os bot�es do di�logo. 00040 #define ADJUST_SCROLL 15 // Constante de ajuste da barra de rolagem vertical 00041 // (emp�rico). 00042 00043 class RioMMKeywordsDialog : public QDialog 00044 { 00045 Q_OBJECT 00046 00047 private: 00048 QGridLayout *main_layout; // Ponteiro para o objeto com o layout do 00049 // di�logo (para organizar os seus elementos 00050 // gr�ficos). 00051 QListView *keywords; // Ponteiro para um objeto do tipo QListView com 00052 // a estrutura hier�rquica com as palavras-chave. 00053 QPushButton *but_Ok; // Ponteiro para o bot�o usado para confirmar a 00054 // escolha de uma palavra-chave. 00055 QPushButton *but_Cancel; // Ponteiro para o bot�o para fechar o di�logo 00056 // sem escolher uma palavra-chave. 00057 00058 // As fun��es s�o descritas no arquivo RioMMKeywordsDialog.cpp. 00059 /*** 00060 * Fun��o buildKeywords: constr�i uma lista com a estrutura hier�rquica das 00061 * palavras-chave (dentro do objeto keywords da classe QListView do Qt, que 00062 * permite mostrar listas organizadas em uma estrutura hier�rquica). Usa a 00063 * fun��o buildKeywordsTree para construir recursivamente a estrutura 00064 * hier�rquica, a partir da raiz dela. Tamb�m inicializa os atributos do objeto 00065 * keywords (dentre eles, os que definem a apar�ncia do objeto no di�logo). 00066 * Obs: esta fun��o � baseada na fun��o buildIndex da classe CRioMMInterface. 00067 * @param domTree Ponteiro para o objeto com a estrutura hier�rquica das 00068 * palavras-chave. 00069 */ 00070 void buildKeywords( QDomDocument domTree ); 00071 00072 /*** 00073 * Fun��o buildKeywordsTree: constr�i uma lista com a estrutura hier�rquica das 00074 * palavras-chave (dentro de um objeto QListViewItem do Qt, que permite mostrar 00075 * listas organizadas em uma estrutura hier�rquica), a partir de uma posi��o na 00076 * estrutura hier�rquica (isto �, uma sub-hierarquia da hierarquia). 00077 * Obs: esta fun��o � baseada na fun��o buildTree da classe CRioMMInterface. 00078 * @param parentItem Ponteiro para o item onde a posi��o na estrutura 00079 * hier�rquica ser� aninhada. 00080 * @param parentElement Ponteiro para a posi��o na estrutura hier�rquica. 00081 * @param stack Ponteiro para a pilha usada para auxiliar a constru�� da 00082 * estrutura hier�rquica (cont�m os elementos criados em uma chamada recursiva). 00083 * @return N�mero de elementos criados. 00084 */ 00085 int buildKeywordsTree( QListViewItem *parentItem, 00086 const QDomElement &parentElement, 00087 QPtrStack<QListViewItem> *stack ); 00088 00089 public: 00090 // As fun��es s�o descritas no arquivo RioMMKeywordsDialog.cpp. 00091 /*** 00092 * Construtor RioMMKeywordsDialog: constr�i o objeto RioMMKeywordsDialog, com 00093 * a caixa de di�logo que mostra as palavras-chave organizadas em uma estrutura 00094 * hier�rquica (de acordo com o arquivo .keyword), e permite que o usu�rio 00095 * escolha uma palavra-chave. 00096 * @param parent Ponteiro par o pai da janela no ambiente gr�fico. 00097 * @param name Nome interno do Qt para o di�logo. 00098 * @param f flags Usadas para definir o estilo e o comportamento do di�logo. 00099 */ 00100 RioMMKeywordsDialog( QWidget *parent = 0, const char *name = 0, 00101 WFlags f = 0 ); 00102 00103 /*** 00104 * Fun��o indexPositions: retorna os �ndices associados a uma palavra-chave 00105 * escolhida pelo usu�rio. 00106 * @return Objeto QString com os �ndices associados � palavra-chave se uma 00107 * palavra-chave foi escolhida, ou um objeto com uma QString padr�o se nenhuma 00108 * palavra-chave foi selecionada (a string "nenhum item foi selecionado"). 00109 */ 00110 QString indexPositions(); 00111 00112 /*** 00113 * Fun��o Initialize: inicializa as vari�veis da classe e cria os elementos e o 00114 * layout da interface gr�fica com a caixa de di�logo que permite aos usuarios 00115 * escolherem as palavras-chave. 00116 * @param domTree Ponteiro para o objeto com as palavras-chaves organizadas em 00117 * uma estrutura hier�rquica. 00118 */ 00119 void Initialize( QDomDocument domTree ); 00120 00121 private slots: 00122 // As fun��es s�o descritas no arquivo RioMMKeywordsDialog.cpp. 00123 /*** 00124 * Funcao processKeyword: funcao para tratar do evento do pressionamento do 00125 * botao Ok, usado quando o usuario decidiu escolher uma das palavras-chave. 00126 * Se nenhuma palavra foi selecionada, uma mensagem de erro e gerada e, em caso 00127 * contrario, a funcao accept() da classe QDialog e chamada para tratar do 00128 * evento de fechamento de um dialogo com sucesso (o usuario pressionou o 00129 * botao Ok ao inves do botao Cancel). 00130 */ 00131 void processKeyword(); 00132 }; 00133 #endif