|
|
|
/*********
|
|
|
|
*
|
|
|
|
* This file is part of BibleTime's source code, http://www.bibletime.info/.
|
|
|
|
*
|
|
|
|
* Copyright 1999-2006 by the BibleTime developers.
|
|
|
|
* The BibleTime source code is licensed under the GNU General Public License version 2.0.
|
|
|
|
*
|
|
|
|
**********/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "csearchdialog.h"
|
|
|
|
#include "csearchanalysis.h"
|
|
|
|
#include "backend/cswordmodulesearch.h"
|
|
|
|
|
|
|
|
|
|
|
|
#include "backend/cswordkey.h"
|
|
|
|
#include "backend/cswordversekey.h"
|
|
|
|
|
|
|
|
#include "frontend/cbtconfig.h"
|
|
|
|
#include "frontend/cmoduleindexdialog.h"
|
|
|
|
|
|
|
|
#include "util/cresmgr.h"
|
|
|
|
#include "util/ctoolclass.h"
|
|
|
|
|
|
|
|
//TQt includes
|
|
|
|
#include <tqhbox.h>
|
|
|
|
#include <tqvbox.h>
|
|
|
|
#include <tqptrlist.h>
|
|
|
|
#include <tqpainter.h>
|
|
|
|
#include <tqlayout.h>
|
|
|
|
#include <tqmap.h>
|
|
|
|
#include <tqlineedit.h>
|
|
|
|
#include <tqtextedit.h>
|
|
|
|
#include <tqlabel.h>
|
|
|
|
#include <tqsizepolicy.h>
|
|
|
|
#include <tqpushbutton.h>
|
|
|
|
#include <tqheader.h>
|
|
|
|
#include <tqregexp.h>
|
|
|
|
#include <tqmessagebox.h>
|
|
|
|
|
|
|
|
//KDE includes
|
|
|
|
#include <tdeapplication.h>
|
|
|
|
#include <tdefiledialog.h>
|
|
|
|
#include <tdelocale.h>
|
|
|
|
#include <kiconloader.h>
|
|
|
|
|
|
|
|
namespace Search {
|
|
|
|
|
|
|
|
static CSearchDialog* m_staticDialog = 0;
|
|
|
|
|
|
|
|
void CSearchDialog::openDialog(const ListCSwordModuleInfo modules, const TQString& searchText, TQWidget* parentDialog) {
|
|
|
|
if (!m_staticDialog) {
|
|
|
|
m_staticDialog = new CSearchDialog(parentDialog);
|
|
|
|
};
|
|
|
|
m_staticDialog->reset();
|
|
|
|
|
|
|
|
if (modules.count()) {
|
|
|
|
m_staticDialog->setModules(modules);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
m_staticDialog->showModulesSelector();
|
|
|
|
}
|
|
|
|
|
|
|
|
m_staticDialog->setSearchText(searchText);
|
|
|
|
if (m_staticDialog->isHidden()) {
|
|
|
|
m_staticDialog->show();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (modules.count() && !searchText.isEmpty()) {
|
|
|
|
m_staticDialog->startSearch();
|
|
|
|
}
|
|
|
|
// moved these to after the startSearch() because
|
|
|
|
// the progress dialog caused them to loose focus.
|
|
|
|
m_staticDialog->raise();
|
|
|
|
m_staticDialog->setActiveWindow();
|
|
|
|
};
|
|
|
|
|
|
|
|
CSearchDialog* const CSearchDialog::getSearchDialog() {
|
|
|
|
Q_ASSERT(m_staticDialog);
|
|
|
|
return m_staticDialog;
|
|
|
|
};
|
|
|
|
|
|
|
|
CSearchDialog::CSearchDialog(TQWidget *parent)
|
|
|
|
: KDialogBase(Plain, i18n("Search dialog"), Close | User1, User1, parent, "CSearchDialog", false, true, i18n("Search")) {
|
|
|
|
|
|
|
|
setWFlags( getWFlags() | TQt::WStyle_MinMax );
|
|
|
|
setIcon(CResMgr::searchdialog::icon);
|
|
|
|
|
|
|
|
m_searcher.connectFinished( TQT_TQOBJECT(this), TQT_SLOT(searchFinished()));
|
|
|
|
|
|
|
|
initView();
|
|
|
|
initConnections();
|
|
|
|
}
|
|
|
|
|
|
|
|
CSearchDialog::~CSearchDialog(){
|
|
|
|
// Added code for saving last size of dialog
|
|
|
|
saveDialogSize("CSearchDialog");
|
|
|
|
}
|
|
|
|
|
|
|
|
/** Starts the search with the set modules and the set search text. */
|
|
|
|
void CSearchDialog::startSearch() {
|
|
|
|
TQString searchText(m_searchOptionsPage->searchText());
|
|
|
|
|
|
|
|
if (searchText.isEmpty()) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// check that we have the indices we need for searching
|
|
|
|
if (!m_searcher.modulesHaveIndices( modules() ) ) {
|
|
|
|
int result = TQMessageBox::question(this, i18n("Missing indices"),
|
|
|
|
i18n("One or more modules need indexing before they can be searched.\n"
|
|
|
|
"This could take a long time. Proceed with indexing?"),
|
|
|
|
TQMessageBox::Yes | TQMessageBox::Default,
|
|
|
|
TQMessageBox::No | TQMessageBox::Escape);
|
|
|
|
// In SuSE 10.0 the result is the logical or of the button type, just like it is
|
|
|
|
// inputed into the TQMessageBox.
|
|
|
|
if ( (result == (TQMessageBox::Yes | TQMessageBox::Default)) ||
|
|
|
|
(result == TQMessageBox::Yes) || (result == TQMessageBox::Default) ) {
|
|
|
|
CModuleIndexDialog* dlg = CModuleIndexDialog::getInstance();
|
|
|
|
dlg->indexUnindexedModules( modules() );
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
m_searchResultPage->reset();
|
|
|
|
|
|
|
|
// const int searchFlags = m_searchOptionsPage->searchFlags();
|
|
|
|
|
|
|
|
// const CSwordModuleSearch::scopeType scopeType = m_searchOptionsPage->scopeType();
|
|
|
|
// if (scopeType == CSwordModuleSearch::Scope_LastSearch) {
|
|
|
|
// searchFlags |= CSwordModuleSearch::useLastResult;
|
|
|
|
// }
|
|
|
|
// else if ( (scopeType == CSwordModuleSearch::Scope_Bounds)
|
|
|
|
// && strlen(m_searchOptionsPage->searchScope().getRangeText())) {
|
|
|
|
// //we need the scope flag and a valid scope!
|
|
|
|
// searchFlags |= CSwordModuleSearch::useScope;
|
|
|
|
// m_searcher.setSearchScope( m_searchOptionsPage->searchScope() );
|
|
|
|
// }
|
|
|
|
|
|
|
|
if (m_searchOptionsPage->hasSearchScope()) {
|
|
|
|
m_searcher.setSearchScope( m_searchOptionsPage->searchScope() );
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
m_searcher.resetSearchScope();
|
|
|
|
}
|
|
|
|
|
|
|
|
m_searcher.setModules( modules() );
|
|
|
|
m_searcher.setSearchedText(searchText);
|
|
|
|
// m_searcher.setSearchOptions(searchFlags);
|
|
|
|
|
|
|
|
m_searcher.startSearch();
|
|
|
|
}
|
|
|
|
|
|
|
|
/** Starts the search with the given module list and given search text. */
|
|
|
|
void CSearchDialog::startSearch( const ListCSwordModuleInfo modules, const TQString& searchText) {
|
|
|
|
m_searchResultPage->reset();
|
|
|
|
m_searchOptionsPage->reset();
|
|
|
|
setModules(modules);
|
|
|
|
setSearchText(searchText);
|
|
|
|
|
|
|
|
startSearch();
|
|
|
|
}
|
|
|
|
|
|
|
|
/** Returns the list of used modules. */
|
|
|
|
const ListCSwordModuleInfo CSearchDialog::modules() {
|
|
|
|
return m_searchOptionsPage->modules();
|
|
|
|
}
|
|
|
|
|
|
|
|
/** Sets the list of modules for the search. */
|
|
|
|
void CSearchDialog::setModules( const ListCSwordModuleInfo modules ) {
|
|
|
|
m_searchOptionsPage->setModules(modules);
|
|
|
|
resize( sizeHint() );
|
|
|
|
}
|
|
|
|
|
|
|
|
/** Returns the search text which is set currently. */
|
|
|
|
const TQString CSearchDialog::searchText() {
|
|
|
|
return m_searchOptionsPage->searchText();
|
|
|
|
}
|
|
|
|
|
|
|
|
sword::ListKey CSearchDialog::searchScope() {
|
|
|
|
return m_searchOptionsPage->searchScope();
|
|
|
|
};
|
|
|
|
|
|
|
|
/** Returns true if the search used a scope, otherwise false. */
|
|
|
|
// const CSwordModuleSearch::scopeType CSearchDialog::searchScopeType() const {
|
|
|
|
// return m_searchOptionsPage->scopeType();
|
|
|
|
// }
|
|
|
|
|
|
|
|
/** Returns true if the search used a scope, otherwise false. */
|
|
|
|
// const int CSearchDialog::searchFlags() const {
|
|
|
|
// return m_searchOptionsPage->searchFlags();
|
|
|
|
// }
|
|
|
|
|
|
|
|
/** Returns the search text which is used for the search. */
|
|
|
|
void CSearchDialog::setSearchText( const TQString searchText ) {
|
|
|
|
m_searchOptionsPage->setSearchText(searchText);
|
|
|
|
}
|
|
|
|
|
|
|
|
/** Initializes this object. */
|
|
|
|
void CSearchDialog::initView() {
|
|
|
|
setButtonTip(User1, CResMgr::searchdialog::searchButton::tooltip);
|
|
|
|
|
|
|
|
TQVBoxLayout *box = new TQVBoxLayout( plainPage(), 0, spacingHint() );
|
|
|
|
|
|
|
|
m_searchOptionsPage = new Options::CSearchOptionsPage(plainPage());
|
|
|
|
box->addWidget( m_searchOptionsPage );
|
|
|
|
|
|
|
|
m_searchResultPage = new Result::CSearchResultPage(plainPage());
|
|
|
|
box->addWidget( m_searchResultPage );
|
|
|
|
|
|
|
|
// The dialog doesn't resize properly if the minimum size of the
|
|
|
|
// plain page is lower than the minimumsize of our two widgets.
|
|
|
|
// You can resize the dialog, but it just starts covering up the
|
|
|
|
// button bar and the two widgets instead of stopping at the
|
|
|
|
// minimum size. The following code sets the minimum with some
|
|
|
|
// margin. If you know of a better way to do this, do it!
|
|
|
|
int w = m_searchOptionsPage->minimumWidth();
|
|
|
|
int h = m_searchOptionsPage->minimumHeight() +
|
|
|
|
m_searchResultPage->minimumHeight();
|
|
|
|
plainPage()->setMinimumSize(w+10, h+100);
|
|
|
|
// Added code for loading last size of dialog
|
|
|
|
setInitialSize(configDialogSize("CSearchDialog"));
|
|
|
|
}
|
|
|
|
|
|
|
|
void CSearchDialog::searchFinished() {
|
|
|
|
// tqWarning("CSearchDialog::searchFinished()");
|
|
|
|
|
|
|
|
if ( m_searcher.foundItems() ) {
|
|
|
|
m_searchResultPage->setSearchResult(modules());
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
m_searchResultPage->reset();
|
|
|
|
}
|
|
|
|
m_staticDialog->raise();
|
|
|
|
m_staticDialog->setActiveWindow();
|
|
|
|
}
|
|
|
|
|
|
|
|
void CSearchDialog::showModulesSelector() {
|
|
|
|
m_searchOptionsPage->chooseModules();
|
|
|
|
}
|
|
|
|
|
|
|
|
/** Initializes the signal slot connections */
|
|
|
|
void CSearchDialog::initConnections() {
|
|
|
|
connect(this, TQT_SIGNAL(user1Clicked()), TQT_SLOT(startSearch()));
|
|
|
|
connect(this, TQT_SIGNAL(closeClicked()), TQT_SLOT(slotDelayedDestruct()));
|
|
|
|
}
|
|
|
|
|
|
|
|
/** Resets the parts to the default. */
|
|
|
|
void CSearchDialog::reset() {
|
|
|
|
m_searchOptionsPage->reset();
|
|
|
|
m_searchResultPage->reset();
|
|
|
|
}
|
|
|
|
|
|
|
|
/** Reimplementation. */
|
|
|
|
void CSearchDialog::slotClose() {
|
|
|
|
delayedDestruct();
|
|
|
|
m_staticDialog = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
} //end of namespace Search
|
|
|
|
|
|
|
|
#include "csearchdialog.moc"
|