21#include <QRegularExpression>
25#include "../../backend/config/btconfig.h"
26#include "../../backend/cswordmodulesearch.h"
27#include "../../backend/drivers/cswordmoduleinfo.h"
28#include "../../util/btconnect.h"
29#include "../../util/cresmgr.h"
30#include "../btmoduleindexdialog.h"
31#include "../messagedialog.h"
46 setWindowIcon(CResMgr::searchdialog::icon());
47 setWindowTitle(tr(
"Search"));
48 setAttribute(Qt::WA_DeleteOnClose);
51 QVBoxLayout* verticalLayout =
new QVBoxLayout(
this);
52 setLayout(verticalLayout);
61 QLabel* hint =
new QLabel(tr(
"Drag any verse reference onto an open Bible window"),
this);
62 verticalLayout->addWidget(hint);
64 QHBoxLayout* horizontalLayout =
new QHBoxLayout();
66 QSpacerItem* spacerItem =
new QSpacerItem(1, 1, QSizePolicy::Expanding, QSizePolicy::Minimum);
67 horizontalLayout->addItem(spacerItem);
70 m_analyseButton->setToolTip(tr(
"Show a graphical analysis of the search result"));
82 verticalLayout->addLayout(horizontalLayout);
85 restoreGeometry(
btConfig().value<QByteArray>(GeometryKey, QByteArray()));
92 this, &CSearchDialog::close);
109 QString TestString(originalSearchText);
110 static QRegularExpression
const ReservedWords(
111 QStringLiteral(
"heading:|footnote:|morph:|strong:"));
112 if (TestString.replace(ReservedWords, QString()).simplified().isEmpty()) {
126 QList<CSwordModuleInfo*> unindexedModules;
127 for (
auto const *
const m : searchModules)
131 if (unindexedModules.size() > 0) {
133 QStringList moduleNameList;
134 for (
auto const *
const m : unindexedModules)
135 moduleNameList.append(m->name());
141 tr(
"Missing indices"),
142 QStringLiteral(
"%1<br><center>%2</center><br>%3")
143 .arg(tr(
"The following modules need to be indexed before "
144 "they can be searched in:"),
145 moduleNameList.join(QStringLiteral(
", ")),
146 tr(
"Indexing could take a long time. Click \"Yes\" to "
147 "index the modules and start the search, or \"No\" "
148 "to cancel the search.")),
149 QMessageBox::Yes | QMessageBox::No,
153 if ((result & (QMessageBox::Yes | QMessageBox::Default)) == 0x0) {
166 setCursor(Qt::WaitCursor);
179 }
catch (std::exception
const & e) {
182 msg = tr(
"<UNKNOWN EXCEPTION>");
186 tr(
"Search aborted"),
187 tr(
"An internal error occurred while executing "
188 "your search:<br/><br/>%1").arg(msg));
191 setCursor(Qt::ArrowCursor);
196 if (!searchResult.empty()) {
198 std::move(searchResult));
208 setCursor(Qt::ArrowCursor);
217 auto const haveModules = !modules.isEmpty();
228 if (haveModules && !searchText.isEmpty())
BtConfig & btConfig()
This is a shortchand for BtConfig::getInstance().
QList< CSwordModuleInfo const * > BtConstModuleList
void setValue(QString const &key, T const &value)
Sets a value for a key.
static bool indexAllModules(QList< CSwordModuleInfo * > const &modules)
void setSearchText(const QString &text)
BtConstModuleList const & modules() const
sword::ListKey searchScope()
QString searchText() const
void setModules(const BtConstModuleList &modules)
CSwordModuleSearch::SearchType searchType()
void addToHistory(const QString &text)
void setSearchResult(QString searchedText, CSwordModuleSearch::Results results)
BtSearchOptionsArea * m_searchOptionsArea
QPushButton * m_closeButton
CSearchDialog(QWidget *parent)
BtSearchResultArea * m_searchResultArea
QPushButton * m_analyseButton
QPushButton * m_manageIndexes
~CSearchDialog() override
void reset(BtConstModuleList modules, QString const &searchText)
QString prepareSearchText(QString const &orig, SearchType const searchType)
Results search(QString const &searchText, BtConstModuleList const &modules, sword::ListKey scope)
std::vector< ModuleSearchResult > Results
const QString GeometryKey
QMessageBox::StandardButton showQuestion(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton)
QMessageBox::StandardButton showWarning(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton)