00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include <qmessagebox.h>
00019 #include "RioMMKeywordsDialog.h"
00020 #include "images/keyword.xpm"
00021
00022 RioMMKeywordsDialog::RioMMKeywordsDialog( QWidget *parent, const char *name,
00023 WFlags f )
00024 : QDialog( parent, name, true, f )
00025 {
00026 }
00027
00028 void RioMMKeywordsDialog::buildKeywords( QDomDocument domTree )
00029 {
00030 int readkeywords = 0;
00031
00032
00033 keywords->addColumn( "Palavras-chave", 1 );
00034 keywords->addColumn( "Index_Indices", 1 );
00035 keywords->setSorting( -1 );
00036
00037
00038 keywords->setEnabled( true );
00039
00040
00041 QDomElement root = domTree.documentElement();
00042 QDomNode node;
00043
00044
00045 QPtrStack<QListViewItem> stack;
00046 stack.setAutoDelete( false );
00047 stack.clear();
00048 readkeywords = buildKeywordsTree( 0, root, &stack );
00049 stack.clear();
00050
00051 int tmp = ( readkeywords < MAX_KEYWORD_VIEW )? 0:1;
00052
00053 keywords->setColumnWidth( 0, width() - 2*SPACING - tmp *
00054 keywords->verticalScrollBar()->sizeHint().width()
00055 - ADJUST_SCROLL );
00056
00057
00058 if( readkeywords < 3 )
00059 readkeywords = 3;
00060
00061
00062 if( readkeywords < MAX_KEYWORD_VIEW )
00063 setFixedSize( DIALOG_WIDTH, DIALOG_HEIGHT + KEYWORDS_VBORDER +
00064 KEYWORDS_HEIGHT*readkeywords );
00065 else
00066 setFixedSize( DIALOG_WIDTH, DIALOG_HEIGHT + KEYWORDS_VBORDER +
00067 KEYWORDS_HEIGHT*MAX_KEYWORD_VIEW );
00068
00069 keywords->setHScrollBarMode( QScrollView::Auto );
00070 keywords->show();
00071
00072 }
00073
00074 int RioMMKeywordsDialog::buildKeywordsTree( QListViewItem *parentItem,
00075 const QDomElement &parentElement,
00076 QPtrStack<QListViewItem> *stack )
00077 {
00078 QListViewItem *thisItem = 0;
00079 QListViewItem *previousItem;
00080 QDomNode node = parentElement.firstChild();
00081 QString name;
00082 int readkeywords=0;
00083 int recreadkeywords=0;
00084
00085 while( !node.isNull() )
00086 {
00087
00088 if( node.isElement() && ( node.nodeName() == "main_title" ) )
00089 setCaption( node.toElement().text() +
00090 "- selecione uma palavra-chave" );
00091 else if( node.isElement() && ( node.nodeName() == "name" ) )
00092 {
00093 name = node.toElement().text();
00094 readkeywords++;
00095
00096
00097 node = node.nextSibling();
00098
00099 if( stack->isEmpty() )
00100 previousItem = parentItem;
00101 else
00102 previousItem = stack->top();
00103
00104
00105 if( parentItem == 0 )
00106 thisItem = new QListViewItem( keywords, previousItem );
00107 else
00108 thisItem = new QListViewItem( parentItem, previousItem );
00109
00110 thisItem->setPixmap( 0, QPixmap( (const char **) keyword ) );
00111 thisItem->setOpen( TRUE );
00112 thisItem->setText( 0, name );
00113 thisItem->setText( 1,
00114 node.toElement().text().simplifyWhiteSpace() );
00115 stack->push( thisItem );
00116 }
00117
00118 else if( node.isElement() && ( node.nodeName() == "keyword_item" ) )
00119 recreadkeywords += buildKeywordsTree( thisItem, node.toElement(),
00120 stack );
00121
00122 node = node.nextSibling();
00123 }
00124
00125
00126 while( stack->top() != thisItem )
00127 stack->pop();
00128
00129 return readkeywords + recreadkeywords;
00130 }
00131
00132 void RioMMKeywordsDialog::Initialize( QDomDocument domTree )
00133 {
00134
00135
00136 main_layout = new QGridLayout( this, 2, 2, MARGIN, SPACING,
00137 "main_layout" );
00138
00139
00140 keywords = new QListView( this );
00141
00142 setFixedWidth( DIALOG_WIDTH );
00143 setFixedHeight( DIALOG_HEIGHT );
00144
00145 main_layout->addMultiCellWidget( keywords, 0, 0, 0, 1 );
00146
00147
00148
00149
00150
00151 but_Ok = new QPushButton( "Ok", this );
00152 main_layout->addWidget( but_Ok, 1, 0 );
00153 but_Cancel = new QPushButton ( "Cancel", this );
00154 main_layout->addWidget( but_Cancel, 1, 1 );
00155 setCaption( "Selececione uma palavra-chave" );
00156
00157 setTabOrder( keywords, but_Ok );
00158 setTabOrder( but_Ok, but_Cancel );
00159
00160 connect( but_Ok, SIGNAL( clicked() ), this, SLOT( processKeyword() ) );
00161 connect( but_Cancel, SIGNAL( clicked() ), this, SLOT( reject() ) );
00162
00163 buildKeywords( domTree );
00164 }
00165
00166
00167 QString RioMMKeywordsDialog::indexPositions()
00168 {
00169 QListViewItem *item;
00170 item = keywords->selectedItem();
00171
00172 if( item != 0 )
00173 return item->text( 1 );
00174 else
00175 return QString( "nenhum item foi selecionado" );
00176
00177 }
00178
00179 void RioMMKeywordsDialog::processKeyword()
00180 {
00181
00182 if( keywords->selectedItem() == 0 )
00183 QMessageBox::critical( this, "Erro", "Selecione uma palavra-chave" );
00184 else
00185 accept();
00186
00187 }
00188