1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
/****************************************************************************
**
** Copyright (C) 1992-$THISYEAR$ Trolltech AS. All rights reserved.
**
** This file is part of the $MODULE$ of the Qt Toolkit.
**
** $LICENSE$
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
****************************************************************************/
#include "finddialog.h"
#include "mainwindow.h"
#include "tabbedbrowser.h"
#include "helpwindow.h"
#include <QTextBrowser>
#include <QTextCursor>
#include <QStatusBar>
#include <QLineEdit>
#include <QDateTime>
#include <QGridLayout>
CaseSensitiveModel::CaseSensitiveModel(int rows, int columns, QObject *parent)
: QStandardItemModel(rows, columns, parent)
{}
QModelIndexList CaseSensitiveModel::match(const QModelIndex &start, int role, const QVariant &value,
int hits, Qt::MatchFlags flags) const
{
if (flags == Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap))
flags |= Qt::MatchCaseSensitive;
return QStandardItemModel::match(start, role, value, hits, flags);
}
FindDialog::FindDialog(MainWindow *parent)
: QDialog(parent)
{
contentsWidget = new QWidget(this);
ui.setupUi(contentsWidget);
ui.comboFind->setModel(new CaseSensitiveModel(0, 1, ui.comboFind));
QVBoxLayout *l = new QVBoxLayout(this);
l->setMargin(0);
l->setSpacing(0);
l->addWidget(contentsWidget);
lastBrowser = 0;
onceFound = false;
findExpr.clear();
sb = new QStatusBar(this);
l->addWidget(sb);
sb->showMessage(tr("Enter the text you want to find."));
connect(ui.findButton, SIGNAL(clicked()), this, SLOT(findButtonClicked()));
connect(ui.closeButton, SIGNAL(clicked()), this, SLOT(reject()));
}
FindDialog::~FindDialog()
{
}
void FindDialog::findButtonClicked()
{
doFind(ui.radioForward->isChecked());
}
void FindDialog::doFind(bool forward)
{
QTextBrowser *browser = static_cast<QTextBrowser*>(mainWindow()->browsers()->currentBrowser());
sb->clearMessage();
if (ui.comboFind->currentText() != findExpr || lastBrowser != browser)
onceFound = false;
findExpr = ui.comboFind->currentText();
QTextDocument::FindFlags flags = 0;
if (ui.checkCase->isChecked())
flags |= QTextDocument::FindCaseSensitively;
if (ui.checkWords->isChecked())
flags |= QTextDocument::FindWholeWords;
QTextCursor c = browser->textCursor();
if (!c.hasSelection()) {
if (forward)
c.movePosition(QTextCursor::Start);
else
c.movePosition(QTextCursor::End);
browser->setTextCursor(c);
}
QTextDocument::FindFlags options;
if (forward == false)
flags |= QTextDocument::FindBackward;
QTextCursor found = browser->document()->find(findExpr, c, flags);
if (found.isNull()) {
if (onceFound) {
if (forward)
statusMessage(tr("Search reached end of the document"));
else
statusMessage(tr("Search reached start of the document"));
} else {
statusMessage(tr( "Text not found" ));
}
} else {
browser->setTextCursor(found);
}
onceFound |= !found.isNull();
lastBrowser = browser;
}
bool FindDialog::hasFindExpression() const
{
// statusMessage(tr( "Should be obsolete" ));
}
|