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 RIOMMINTERFACE_H 00019 #define RIOMMINTERFACE_H 00020 00021 #include <stdlib.h> 00022 #include <stdio.h> 00023 #include <unistd.h> 00024 #include <string> 00025 00026 #include <qapplication.h> 00027 #include <qdom.h> 00028 #include <qdragobject.h> 00029 #include <qevent.h> 00030 #include <qfileinfo.h> 00031 #include <qimage.h> 00032 #include <qlabel.h> 00033 #include <qlayout.h> 00034 #include <qlistview.h> 00035 #include <qmainwindow.h> 00036 #include <qmessagebox.h> 00037 #include <qmime.h> 00038 #include <qpixmap.h> 00039 #include <qptrstack.h> 00040 #include <qpushbutton.h> 00041 #include <qslider.h> 00042 #include <qtooltip.h> 00043 #include <qvariant.h> 00044 #include <qwhatsthis.h> 00045 #include <qhbox.h> 00046 #include <qtimer.h> 00047 00048 #include "common.h" 00049 #include "ConfigData.h" 00050 #include "RioInterface.h" 00051 #include "RioError.h" 00052 #include "RioFile.h" 00053 #include "RioMMObject.h" 00054 #include "RioMMStrings.h" 00055 #include "RioMMCodes.h" 00056 #include "RioMMKeywordsDialog.h" 00057 #include "RioMMQListViewItem.h" 00058 00059 using namespace std; 00060 00061 #include <X11/Xlib.h> 00062 #include <pthread.h> 00063 #include <errno.h> 00064 00065 #define JUMPBLOCKS 11 00066 00067 #define CLIENT_WIDTH 320 // Tamanho horizontal do cliente. 00068 #define CLIENT_HEIGHT 80 // Tamanho vertical do cliente (sem o �ndice). 00069 #define MAX_TOPICS_VIEW 15 // N�mero m�ximo de t�picos vis�veis (sem barra de 00070 // rolagem). 00071 #define MIN_TOPICS_VIEW 3 // N�mero m�nimo de t�picos vis�veis. 00072 #define TOPIC_HEIGHT 18 // Tamanho vertical de cada t�pico (varia com a 00073 // fonte?). 00074 #define TOPICS_VBORDER 25 // Tamanho vertical das bordas da QListView do 00075 // �ndice (emp�rico). 00076 #define MARGIN 10 // Tamanho das margens esquerda e direita. 00077 #define SPACING 5 // Espa�o entre os bot�es. 00078 #define ADJUST_SCROLL 15 // Constante de ajuste da barra de rolagem vertical 00079 // (emp�rico). 00080 #define MAX_MESSAGE_DOTS 4 // Quantidade maxima de pontos (reticencias) 00081 // utilizados na barra de status 00082 00083 // Definindo um tipo que � ponteiro para fun��o. 00084 typedef void *(*func_t)( void * ); 00085 00086 class RioMMInterface : public QMainWindow 00087 { 00088 Q_OBJECT 00089 00090 private: 00091 unsigned int lastJump; 00092 bool progressLatch; 00093 bool pressBar; 00094 XWindowAttributes window_attributes; 00095 QListView *topics; 00096 void updateProgressBar( int ); 00097 ConfigData *config; 00098 00099 // Nova variavel usada para indicar se devemos terminar o cliente. Esta 00100 // variavel sera true apos o recebimento do evento QEvent::User + 9, e 00101 // indicara que o programa deve ser finalizado. Isso ocorrera ao final do 00102 // evento QEvent::User + 1, quando apos ele mostrar a mensagem antes da 00103 // finalizacao. 00104 00105 bool b_finalize; 00106 00107 // Mutex para garantir o acesso exclusivo a variavel b_finalize. 00108 00109 pthread_mutex_t m_finalize; 00110 00111 00112 00113 public: 00114 QGridLayout * main_layout; 00115 QLabel* lab_block_number; 00116 QLabel* lab_percentage; 00117 QLabel* status_bar_text; 00118 QLabel* status_bar_icon; 00119 QTimer* status_bar_timer; 00120 int status_bar_dot_counter; 00121 QHBox* status_bar; 00122 QSlider* sli_progress; 00123 QPushButton* but_play; 00124 QPushButton* but_pause; 00125 QPushButton* but_stop; 00126 QPushButton* but_fast_rewind; 00127 QPushButton* but_fast_forward; 00128 QPushButton* but_info; 00129 QPushButton* but_quit; 00130 QPushButton* but_sync; 00131 00132 // Elementos da interface gr�fica usados para implementar a nova 00133 // funcionalide de busca. 00134 QPushButton* but_keywords; // Ponteiro para o bot�o usado para mostrar o 00135 // di�logo para a escolha das palavras-chave. 00136 RioMMKeywordsDialog *keywords_dialog; // Ponteiro para o di�logo para a 00137 // escolha das palavras-chave. 00138 QPushButton* but_clean; // Ponteiro para o bot�o para limpar as entradas 00139 // destacadas do �ndice (ao escolhermos uma 00140 // palavra-chave). 00141 00142 #ifdef USE_GRID 00143 // Ponteiro para caixa de mensagem que aparece e desaparece sozinha (usada 00144 // pelo cliente que se conecta aos servidores da GRID. Usada para mostrar 00145 // uma caixa com uma mensagem de espera que se fecha automaticamente ap�s o 00146 // arquivo ser copiado da GRID). 00147 QMessageBox *mb_Wait; 00148 #endif 00149 00150 CRioMMObject *p_MMObject; 00151 int totalSize; 00152 bool syncOn; 00153 int syncType; 00154 int parentID; 00155 string movieName; 00156 string moviePath; 00157 string formTitle; 00158 int slideNumber; 00159 int pos; 00160 QFileInfo fiSyncFile; 00161 int n_buttons; 00162 00163 // N�mero de entradas no �ndice (usado pela busca por assunto). Esta 00164 // vari�vel era antes local ao procedimento buildTree. 00165 int readtopics; 00166 00167 RioMMInterface( ConfigData * ); 00168 ~RioMMInterface(); 00169 void initComponents(); 00170 00171 /******************************************************************************/ 00172 /* This method is called whenever the mainwindow is closed either by a call */ 00173 /* quit or exit or when the user clicks on the close button */ 00174 /******************************************************************************/ 00175 void closeEvent( QCloseEvent * ); 00176 00177 void timerEvent( QTimerEvent * ); 00178 bool isProgressLatch(); 00179 void buildIndex( QDomDocument ); 00180 00181 // A fun��o que cria o �ndice � agora diferente, pois recebe com par�metro 00182 // um item de uma nova clase (RioMMQListViewItem devirada de QListViewItem) 00183 // criada para permitir que alteremos a cor e um dos estilos (em negrito ou 00184 // n�o) do item. 00185 /*** 00186 * A fun��o � diferente da anterior, pois recebe com par�metro o novo item 00187 * criado, que permite variar a cor e o estilo da fonte. 00188 */ 00189 int buildTree( RioMMQListViewItem*, const QDomElement&, 00190 QPtrStack<RioMMQListViewItem>* ); 00191 00192 // Fun��es usadas pela nova funcionalidade de busca. 00193 // Cria o di�logo com as palavras-chaves usadas pela busca por assunto. 00194 /*** 00195 * Fun��o usada pela busca por assunto para construir a estrutura hier�rquica 00196 * com as palavras-chaves, de acordo com que foi definido pelo arquivo .keyword. 00197 * A estrutura hier�rquica reflete a rela��o entre as diversas palavras-chave 00198 * (como ocorre, por exemplo, em um �ndice de um livro, e com os �ndices de uma 00199 * aula). 00200 * @param domTree Objeto com a estrutura hier�rquica das palavras-chave. 00201 */ 00202 void buildKeyword( QDomDocument ); 00203 00204 // Destaca algumas das entradas do �ndice (definidas pelo par�metro). 00205 /*** 00206 * Fun��o usada pela busca por assunto para descatar as entradas do �ndice 00207 * associadas a palavra-chave escolhida pelo usu�rio. 00208 * @param indexes String com os �ndices, separados por v�rgulas. Os itens do 00209 * �ndice da aula s�o numerados, de cima para baixo, a partir de zero, e a 00210 * numera��o � feita ignorando-se as identa��es dos itens. 00211 */ 00212 bool boldIndexes( QString ); 00213 00214 // Faz com que todas as entradas do �ndice voltem ao estado normal (isto �, 00215 // n�o destacadas). 00216 /*** 00217 * Fun��o usada pela busca para fazer com que todas as entradas do �ndice 00218 * voltem ao seu estado normal (isto �, sem estarem destacadas). 00219 */ 00220 void resetIndex(); 00221 00222 public slots: 00223 virtual void progressChange( int ); 00224 virtual void play(); 00225 virtual void pause(); 00226 virtual void stop(); 00227 virtual void fastForward(); 00228 virtual void fastRewind(); 00229 virtual void info(); 00230 virtual void sync(); 00231 virtual void jumpTo(); 00232 00233 // Slots usados pela nova funcionalidade de busca. 00234 // Evento disparado quando o usu�rio pressionar o bot�o Busca por assunto 00235 // para fazer uma busca por assunto. 00236 /*** 00237 * Fun��o usada pela busca por assunto para mostrar a caixa de di�logo que 00238 * permitir� ao usu�rio escolher uma palavra-chave dentre as disponibilizadas 00239 * (esta funcionalidade nem sempre estar� dispon�vel). 00240 */ 00241 virtual void keywords(); 00242 // Evento para tratar o pressionamento do bot�o Limpar, que chama a fun��o 00243 // resetIndex para fazer todas as entradas voltarem ao estado normal (n�o 00244 // destacadas). 00245 /*** 00246 * Fun��o usada pela busca, que implementa a a��o a ser tomada quando o bot�o 00247 * Limpar for pressionado pelo usu�rio (fazer com que todas as entradas do 00248 * �ndice voltem ao estado normal). 00249 */ 00250 virtual void clean(); 00251 00252 void progressHold(); 00253 void progressUnHold(); 00254 void topicSelected( QListViewItem* ); 00255 void selectBar(); 00256 void releaseBar(); 00257 void setWaitMessage(); 00258 00259 protected: 00260 virtual bool event( QEvent *e ); 00261 }; 00262 00263 #endif /* RIOMMINTERFACE_H */