1 | // Copyright (C) 2016 The Qt Company Ltd. |
2 | // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 |
3 | |
4 | /* TRANSLATOR FindDialog |
5 | |
6 | Choose Edit|Find from the menu bar or press Ctrl+F to pop up the |
7 | Find dialog |
8 | */ |
9 | |
10 | #include "finddialog.h" |
11 | |
12 | QT_BEGIN_NAMESPACE |
13 | |
14 | FindDialog::FindDialog(QWidget *parent) |
15 | : QDialog(parent) |
16 | { |
17 | setupUi(this); |
18 | |
19 | statusFilter->addItem(tr("All" ), -1); |
20 | statusFilter->addItem(tr("Finished" ), TranslatorMessage::Finished); |
21 | statusFilter->addItem(tr("Unfinished" ), TranslatorMessage::Unfinished); |
22 | |
23 | findNxt->setEnabled(false); |
24 | |
25 | connect(findNxt, &QAbstractButton::clicked, |
26 | this, &FindDialog::emitFindNext); |
27 | connect(useRegExp, &QCheckBox::stateChanged, |
28 | this, &FindDialog::verify); |
29 | connect(led, &QLineEdit::textChanged, |
30 | this, &FindDialog::verify); |
31 | connect(statusFilter, &QComboBox::currentIndexChanged, |
32 | this, &FindDialog::statusFilterChanged); |
33 | |
34 | led->setFocus(); |
35 | } |
36 | |
37 | void FindDialog::verify() |
38 | { |
39 | bool validRegExp = true; |
40 | if (useRegExp->isChecked() && !led->text().isEmpty()) { |
41 | m_regExp.setPattern(led->text()); |
42 | validRegExp = m_regExp.isValid(); |
43 | } |
44 | if (validRegExp && m_redText) |
45 | led->setStyleSheet(QStringLiteral("color: auto;" )); |
46 | else if (!validRegExp && !m_redText) |
47 | led->setStyleSheet(QStringLiteral("color: red;" )); |
48 | m_redText = !validRegExp; |
49 | findNxt->setEnabled(!led->text().isEmpty() && validRegExp); |
50 | } |
51 | |
52 | void FindDialog::statusFilterChanged() |
53 | { |
54 | int newStateFilter = statusFilter->currentData().toInt(); |
55 | if (newStateFilter != -1) { |
56 | if (m_lastStateFilter == -1) |
57 | m_storedSkipObsolete = skipObsolete->isChecked(); |
58 | skipObsolete->setEnabled(false); |
59 | skipObsolete->setChecked(true); |
60 | } else { |
61 | skipObsolete->setEnabled(true); |
62 | skipObsolete->setChecked(m_storedSkipObsolete); |
63 | } |
64 | m_lastStateFilter = newStateFilter; |
65 | } |
66 | |
67 | void FindDialog::emitFindNext() |
68 | { |
69 | DataModel::FindLocation where; |
70 | if (sourceText != 0) |
71 | where = |
72 | DataModel::FindLocation( |
73 | (sourceText->isChecked() ? DataModel::SourceText : 0) | |
74 | (translations->isChecked() ? DataModel::Translations : 0) | |
75 | (comments->isChecked() ? DataModel::Comments : 0)); |
76 | else |
77 | where = DataModel::Translations; |
78 | |
79 | FindOptions options((matchCase->isChecked() ? FindOption::MatchCase : 0) | |
80 | (ignoreAccelerators->isChecked() ? FindDialog::IgnoreAccelerators : 0) | |
81 | (skipObsolete->isChecked() ? FindDialog::SkipObsolete : 0) | |
82 | (useRegExp->isChecked() ? FindDialog::UseRegExp : 0)); |
83 | emit findNext(text: led->text(), where, options, statusFilter: statusFilter->currentData().toInt()); |
84 | led->selectAll(); |
85 | } |
86 | |
87 | void FindDialog::find() |
88 | { |
89 | led->setFocus(); |
90 | |
91 | show(); |
92 | activateWindow(); |
93 | raise(); |
94 | } |
95 | |
96 | QT_END_NAMESPACE |
97 | |