// // File : helpwindow.cpp // Creation date : Tue Aug 11 2000 18:08:22 by Szymon Stefanek // // This file is part of the KVirc irc client distribution // Copyright (C) 1999-2000 Szymon Stefanek (pragma at kvirc dot net) // // This program is FREE software. You can redistribute it and/or // modify it under the m_terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your opinion) any later version. // // 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. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // #include "helpwindow.h" #include "helpwidget.h" #include "kvi_app.h" #include "kvi_iconmanager.h" #include "kvi_options.h" #include "kvi_locale.h" #include "kvi_module.h" #include "kvi_config.h" #include "kvi_styled_controls.h" #include #include #include #include #include #include #include "kvi_valuelist.h" #include "kvi_sourcesdate.h" extern Index * g_pDocIndex; extern KviPointerList * g_pHelpWindowList; extern KviPointerList * g_pHelpWidgetList; bool g_bIndexingDone = FALSE; KviHelpWindow::KviHelpWindow(KviFrame * lpFrm,const char * name) : KviWindow(KVI_WINDOW_TYPE_HELP,lpFrm,name) { if(!g_bIndexingDone) { TQString szDoclist,szDict; g_pApp->getLocalKvircDirectory(szDoclist,KviApp::Help,"help.doclist." KVI_SOURCES_DATE); g_pApp->getLocalKvircDirectory(szDict,KviApp::Help,"help.dict." KVI_SOURCES_DATE); if ( TQFileInfo( szDoclist ).exists() && TQFileInfo( szDict ).exists() ) { g_pDocIndex->readDict(); } else { #ifdef COMPILE_USE_QT4 TQProgressDialog* pProgressDialog = new TQProgressDialog( __tr2qs("Indexing help files"), __tr2qs("Cancel"), 0,100 ); #else TQProgressDialog* pProgressDialog = new TQProgressDialog( __tr2qs("Indexing help files"), __tr2qs("Cancel"), 100 ); #endif connect(g_pDocIndex,TQT_SIGNAL(indexingProgress(int)), pProgressDialog, TQT_SLOT(setProgress(int)) ); g_pDocIndex->makeIndex(); g_pDocIndex->writeDict(); g_pDocIndex->writeDocumentList(); delete pProgressDialog; } g_bIndexingDone=TRUE; } g_pHelpWindowList->append(this); m_pSplitter = new TQSplitter(Qt::Horizontal,this,"main_splitter"); m_pHelpWidget = new KviHelpWidget(m_pSplitter,lpFrm); m_pToolBar=new KviTalVBox(m_pSplitter); m_pTabWidget = new TQTabWidget(m_pToolBar); m_pIndexTab = new KviTalVBox(m_pTabWidget); m_pTabWidget->insertTab(m_pIndexTab,__tr2qs("Index")); KviTalHBox* pSearchBox = new KviTalHBox(m_pIndexTab); m_pIndexSearch = new TQLineEdit(pSearchBox); connect( m_pIndexSearch, TQT_SIGNAL( textChanged(const TQString&) ), this, TQT_SLOT( searchInIndex(const TQString&) ) ); connect( m_pIndexSearch, TQT_SIGNAL( returnPressed() ), this, TQT_SLOT( showIndexTopic() ) ); KviStyledToolButton* pBtnRefreshIndex = new KviStyledToolButton(pSearchBox); pBtnRefreshIndex->setIconSet(*g_pIconManager->getBigIcon(KVI_REFRESH_IMAGE_NAME)); connect(pBtnRefreshIndex,TQT_SIGNAL(clicked()),this,TQT_SLOT(refreshIndex())); TQToolTip::add( pBtnRefreshIndex, __tr2qs("Refresh index") ); m_pIndexListBox = new KviTalListBox(m_pIndexTab); TQStringList docList=g_pDocIndex->titlesList(); m_pIndexListBox->insertStringList(docList); connect(m_pIndexListBox,TQT_SIGNAL(selected(int)),this,TQT_SLOT(indexSelected ( int ))); m_pIndexListBox->sort(); m_pSearchTab = new KviTalVBox(m_pTabWidget); m_pTabWidget->insertTab(m_pSearchTab,__tr2qs("Search")); m_pTermsEdit = new TQLineEdit(m_pSearchTab); /* connect( m_pTermsEdit, TQT_SIGNAL( textChanged(const TQString&) ), this, TQT_SLOT( searchInIndex(const TQString&) ) );*/ connect( m_pTermsEdit, TQT_SIGNAL( returnPressed() ), this, TQT_SLOT( startSearch() ) ); m_pResultBox = new KviTalListBox(m_pSearchTab); connect(m_pResultBox,TQT_SIGNAL(selected(int)),this,TQT_SLOT(searchSelected ( int ))); KviValueList li; li.append(width()-80); li.append(80); m_pSplitter->setSizes(li); } KviHelpWindow::~KviHelpWindow() { g_pHelpWindowList->removeRef(this); } void KviHelpWindow::saveProperties(KviConfig *cfg) { KviWindow::saveProperties(cfg); cfg->writeEntry("Splitter",m_pSplitter->sizes()); } void KviHelpWindow::loadProperties(KviConfig *cfg) { KviValueList def; int w = width(); def.append((w * 82) / 100); def.append((w * 18) / 100); m_pSplitter->setSizes(cfg->readIntListEntry("Splitter",def)); KviWindow::loadProperties(cfg); } void KviHelpWindow::refreshIndex() { m_pIndexListBox->clear(); #ifdef COMPILE_USE_QT4 TQProgressDialog* pProgressDialog = new TQProgressDialog( __tr2qs("Indexing help files"), __tr2qs("Cancel"), 0,100 ); #else TQProgressDialog* pProgressDialog = new TQProgressDialog( __tr2qs("Indexing help files"), __tr2qs("Cancel"), 100 ); #endif connect(g_pDocIndex,TQT_SIGNAL(indexingProgress(int)), pProgressDialog, TQT_SLOT(setProgress(int)) ); g_pDocIndex->makeIndex(); g_pDocIndex->writeDict(); g_pDocIndex->writeDocumentList(); delete pProgressDialog; g_bIndexingDone=TRUE; TQStringList docList=g_pDocIndex->titlesList(); m_pIndexListBox->insertStringList(docList); m_pIndexListBox->sort(); } void KviHelpWindow::startSearch() { TQString str = m_pTermsEdit->text(); str = str.replace( "\'", "\"" ); str = str.replace( "`", "\"" ); TQString buf = str; str = str.replace( "-", " " ); str = str.replace( TQRegExp( "\\s[\\S]?\\s" ), " " ); m_terms = TQStringList::split( " ", str ); TQStringList termSeq; TQStringList seqWords; TQStringList::iterator it = m_terms.begin(); for ( ; it != m_terms.end(); ++it ) { (*it) = (*it).simplifyWhiteSpace(); (*it) = (*it).lower(); (*it) = (*it).replace( "\"", "" ); } if ( str.contains( '\"' ) ) { #ifdef COMPILE_USE_QT4 if ( (str.count( '\"' ))%2 == 0 ) { #else if ( (str.contains( '\"' ))%2 == 0 ) { #endif int beg = 0; int end = 0; TQString s; beg = str.find( '\"', beg ); while ( beg != -1 ) { beg++; end = str.find( '\"', beg ); s = str.mid( beg, end - beg ); s = s.lower(); s = s.simplifyWhiteSpace(); if ( s.contains( '*' ) ) { TQMessageBox::warning( this, tr( "Full Text Search" ), tr( "Using a wildcard within phrases is not allowed." ) ); return; } seqWords += TQStringList::split( ' ', s ); termSeq << s; beg = str.find( '\"', end + 1); } } else { TQMessageBox::warning( this, tr( "Full Text Search" ), tr( "The closing quotation mark is missing." ) ); return; } } #ifdef COMPILE_USE_QT4 setCursor( TQt::WaitCursor ); #else setCursor( waitCursor ); #endif m_foundDocs.clear(); m_foundDocs = g_pDocIndex->query( m_terms, termSeq, seqWords ); m_pResultBox->clear(); for ( it = m_foundDocs.begin(); it != m_foundDocs.end(); ++it ) m_pResultBox->insertItem( g_pDocIndex->getDocumentTitle( *it ) ); m_terms.clear(); bool isPhrase = FALSE; TQString s = ""; for ( int i = 0; i < (int)buf.length(); ++i ) { if ( buf[i] == '\"' ) { isPhrase = !isPhrase; s = s.simplifyWhiteSpace(); if ( !s.isEmpty() ) m_terms << s; s = ""; } else if ( buf[i] == ' ' && !isPhrase ) { s = s.simplifyWhiteSpace(); if ( !s.isEmpty() ) m_terms << s; s = ""; } else s += buf[i]; } if ( !s.isEmpty() ) m_terms << s; #ifdef COMPILE_USE_QT4 setCursor( TQt::ArrowCursor ); #else setCursor( arrowCursor ); #endif } TQTextBrowser * KviHelpWindow::textBrowser() { return m_pHelpWidget->textBrowser(); } void KviHelpWindow::showIndexTopic() { if (m_pIndexSearch->text().isEmpty()|| !m_pIndexListBox->selectedItem()) return; int i=g_pDocIndex->titlesList().findIndex(m_pIndexListBox->selectedItem()->text()); textBrowser()->setSource(g_pDocIndex->documentList()[ i ]); } void KviHelpWindow::searchInIndex( const TQString &s ) { KviTalListBoxItem *i = m_pIndexListBox->firstItem(); TQString sl = s.lower(); while ( i ) { TQString t = i->text(); if ( t.length() >= sl.length() && i->text().left(s.length()).lower() == sl ) { m_pIndexListBox->setCurrentItem( i ); m_pIndexListBox->setTopItem(m_pIndexListBox->index(i)); break; } i = i->next(); } } void KviHelpWindow::indexSelected ( int index ) { int i=g_pDocIndex->titlesList().findIndex(m_pIndexListBox->text(index)); textBrowser()->setSource(g_pDocIndex->documentList()[ i ]); } void KviHelpWindow::searchSelected ( int index ) { int i=g_pDocIndex->titlesList().findIndex(m_pResultBox->text(index)); textBrowser()->setSource(g_pDocIndex->documentList()[ i ]); } TQPixmap * KviHelpWindow::myIconPtr() { return g_pIconManager->getSmallIcon(KVI_SMALLICON_MDIHELP); } void KviHelpWindow::resizeEvent(TQResizeEvent *e) { m_pSplitter->setGeometry(0,0,width(),height()); } TQSize KviHelpWindow::sizeHint() const { return m_pHelpWidget->sizeHint(); } void KviHelpWindow::fillCaptionBuffers() { m_szPlainTextCaption = __tr2qs("Help Browser"); m_szHtmlActiveCaption = ""; m_szHtmlActiveCaption += m_szPlainTextCaption; m_szHtmlActiveCaption += ""; m_szHtmlInactiveCaption = ""; m_szHtmlInactiveCaption += m_szPlainTextCaption; m_szHtmlInactiveCaption += ""; } #include "helpwindow.moc"