Skip to content

Commit 9e5d9db

Browse files
committed
Added history support for Find/Replace dialog
1 parent f5c7fab commit 9e5d9db

File tree

3 files changed

+94
-3
lines changed

3 files changed

+94
-3
lines changed

src/server/gui/dialogs/server_dialogfindreplace.cpp

Lines changed: 75 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,22 @@
44
#include <gui/server_ui.h>
55
#include <gui/server_windowmanager.h>
66

7+
#define MAX_FIND_COMBO_SZ 20
8+
9+
mbServerDialogFindReplace::Strings::Strings() :
10+
cachePrefix (QStringLiteral("Ui.Dialogs.FindReplace.")),
11+
findComboBox(QStringLiteral("findComboBox"))
12+
{
13+
}
14+
15+
const mbServerDialogFindReplace::Strings &mbServerDialogFindReplace::Strings::instance()
16+
{
17+
static const Strings s;
18+
return s;
19+
}
20+
721
mbServerDialogFindReplace::mbServerDialogFindReplace(QWidget *parent) :
8-
QDialog(parent),
22+
mbCoreDialogBase(Strings::instance().cachePrefix, parent),
923
ui(new Ui::mbServerDialogFindReplace)
1024
{
1125
ui->setupUi(this);
@@ -20,6 +34,40 @@ mbServerDialogFindReplace::~mbServerDialogFindReplace()
2034
delete ui;
2135
}
2236

37+
MBSETTINGS mbServerDialogFindReplace::cachedSettings() const
38+
{
39+
const Strings &ds = Strings::instance();
40+
const QString &prefix = ds.cachePrefix;
41+
42+
QStringList lsFindComboBox;
43+
for (int i = 0; i < ui->cmbFind->count(); ++i)
44+
lsFindComboBox.append(ui->cmbFind->itemText(i));
45+
MBSETTINGS m = mbCoreDialogBase::cachedSettings();
46+
m[prefix+ds.findComboBox] = lsFindComboBox;
47+
return m;
48+
}
49+
50+
void mbServerDialogFindReplace::setCachedSettings(const MBSETTINGS &settings)
51+
{
52+
mbCoreDialogBase::setCachedSettings(settings);
53+
const Strings &ds = Strings::instance();
54+
const QString &prefix = ds.cachePrefix;
55+
56+
MBSETTINGS::const_iterator it;
57+
MBSETTINGS::const_iterator end = settings.end();
58+
it = settings.find(prefix+ds.findComboBox);
59+
if (it != end)
60+
{
61+
QStringList ls = it.value().toStringList();
62+
int i = 0;
63+
Q_FOREACH(const QString &s, ls)
64+
{
65+
ui->cmbFind->insertItem(i, s);
66+
++i;
67+
}
68+
}
69+
}
70+
2371
void mbServerDialogFindReplace::execFindReplace(bool replace)
2472
{
2573
if (replace)
@@ -34,12 +82,14 @@ void mbServerDialogFindReplace::execFindReplace(bool replace)
3482

3583
void mbServerDialogFindReplace::findNext()
3684
{
85+
processFindCombo();
3786
int flags = getFindFlags();
3887
mbServer::global()->ui()->windowManager()->find(ui->cmbFind->currentText(), flags);
3988
}
4089

4190
void mbServerDialogFindReplace::findPrevious()
4291
{
92+
processFindCombo();
4393
int flags = getFindFlags();
4494
flags |= mb::FindBackward;
4595
mbServer::global()->ui()->windowManager()->find(ui->cmbFind->currentText(), flags);
@@ -57,3 +107,27 @@ int mbServerDialogFindReplace::getFindFlags()
57107
if (ui->chbMatchWord->isChecked()) flags |= mb::FindWholeWords ;
58108
return flags;
59109
}
110+
111+
void mbServerDialogFindReplace::processFindCombo()
112+
{
113+
QComboBox *cmb = ui->cmbFind;
114+
QString text = cmb->currentText();
115+
if (text.size())
116+
{
117+
if (text != cmb->itemText(0))
118+
{
119+
int i = cmb->findText(text);
120+
if (i > 0)
121+
{
122+
cmb->removeItem(i);
123+
cmb->insertItem(0, text);
124+
cmb->setCurrentText(text);
125+
}
126+
else if (i < 0)
127+
cmb->insertItem(0, text);
128+
129+
while (cmb->count() > MAX_FIND_COMBO_SZ)
130+
cmb->removeItem(MAX_FIND_COMBO_SZ);
131+
}
132+
}
133+
}

src/server/gui/dialogs/server_dialogfindreplace.h

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,36 @@
11
#ifndef SERVER_DIALOGFINDREPLACE_H
22
#define SERVER_DIALOGFINDREPLACE_H
33

4-
#include <QDialog>
4+
#include <gui/dialogs/core_dialogedit.h>
55

66
namespace Ui {
77
class mbServerDialogFindReplace;
88
}
99

1010
class mbServerWindowManager;
1111

12-
class mbServerDialogFindReplace : public QDialog
12+
class mbServerDialogFindReplace : public mbCoreDialogBase
1313
{
1414
Q_OBJECT
1515

16+
public:
17+
struct Strings : public mbCoreDialogBase::Strings
18+
{
19+
const QString cachePrefix;
20+
const QString findComboBox;
21+
22+
Strings();
23+
static const Strings &instance();
24+
};
25+
1626
public:
1727
explicit mbServerDialogFindReplace(QWidget *parent = nullptr);
1828
~mbServerDialogFindReplace();
1929

30+
public:
31+
MBSETTINGS cachedSettings() const override;
32+
void setCachedSettings(const MBSETTINGS &settings) override;
33+
2034
public:
2135
void execFindReplace(bool replace = false);
2236

@@ -27,6 +41,7 @@ public Q_SLOTS:
2741

2842
private:
2943
int getFindFlags();
44+
void processFindCombo();
3045

3146
private:
3247
Ui::mbServerDialogFindReplace *ui;

src/server/gui/dialogs/server_dialogs.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ mbServerDialogs::~mbServerDialogs()
5757
MBSETTINGS mbServerDialogs::cachedSettings() const
5858
{
5959
MBSETTINGS m = mbCoreDialogs::cachedSettings();
60+
mb::unite(m, m_findReplace->cachedSettings());
6061
mb::unite(m, m_simaction->cachedSettings());
6162
mb::unite(m, m_scriptModule->cachedSettings());
6263
return m;
@@ -65,6 +66,7 @@ MBSETTINGS mbServerDialogs::cachedSettings() const
6566
void mbServerDialogs::setCachedSettings(const MBSETTINGS &settings)
6667
{
6768
mbCoreDialogs::setCachedSettings(settings);
69+
m_findReplace->setCachedSettings(settings);
6870
m_simaction->setCachedSettings(settings);
6971
m_scriptModule->setCachedSettings(settings);
7072
}

0 commit comments

Comments
 (0)