forked from qt-creator/qt-creator
BinEditor: Fix search
Added applying encoding to the search string. Added all available encodings to the CodecChooser. Fixes: QTCREATORBUG-30589 Change-Id: I44b44e51401626949203cba186cb075b54813314 Reviewed-by: Cristian Adam <cristian.adam@qt.io>
This commit is contained in:
@@ -1958,9 +1958,16 @@ public:
|
|||||||
m_incrementalWrappedState = false;
|
m_incrementalWrappedState = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void rehighlightAll()
|
||||||
|
{
|
||||||
|
findIncremental(m_lastText, m_lastFindFlags);
|
||||||
|
}
|
||||||
|
|
||||||
void highlightAll(const QString &txt, FindFlags findFlags) final
|
void highlightAll(const QString &txt, FindFlags findFlags) final
|
||||||
{
|
{
|
||||||
m_widget->highlightSearchResults(txt.toLatin1(),
|
m_lastText = txt;
|
||||||
|
m_lastFindFlags = findFlags;
|
||||||
|
m_widget->highlightSearchResults(m_codec->fromUnicode(txt),
|
||||||
Utils::textDocumentFlagsForFindFlags(findFlags));
|
Utils::textDocumentFlagsForFindFlags(findFlags));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1990,12 +1997,21 @@ public:
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setCodec(QTextCodec *codec)
|
||||||
|
{
|
||||||
|
if (codec == m_codec)
|
||||||
|
return;
|
||||||
|
m_codec = codec;
|
||||||
|
rehighlightAll();
|
||||||
|
}
|
||||||
|
|
||||||
Result findIncremental(const QString &txt, FindFlags findFlags) final
|
Result findIncremental(const QString &txt, FindFlags findFlags) final
|
||||||
{
|
{
|
||||||
QByteArray pattern = txt.toLatin1();
|
QByteArray pattern = m_codec->fromUnicode(txt);
|
||||||
if (pattern != m_lastPattern)
|
if (txt != m_lastText)
|
||||||
resetIncrementalSearch(); // Because we don't search for nibbles.
|
resetIncrementalSearch(); // Because we don't search for nibbles.
|
||||||
m_lastPattern = pattern;
|
m_lastText = txt;
|
||||||
|
m_lastFindFlags = findFlags;
|
||||||
if (m_incrementalStartPos < 0)
|
if (m_incrementalStartPos < 0)
|
||||||
m_incrementalStartPos = m_widget->selectionStart();
|
m_incrementalStartPos = m_widget->selectionStart();
|
||||||
if (m_contPos == -1)
|
if (m_contPos == -1)
|
||||||
@@ -2027,7 +2043,7 @@ public:
|
|||||||
|
|
||||||
Result findStep(const QString &txt, FindFlags findFlags) final
|
Result findStep(const QString &txt, FindFlags findFlags) final
|
||||||
{
|
{
|
||||||
QByteArray pattern = txt.toLatin1();
|
QByteArray pattern = m_codec->fromUnicode(txt);
|
||||||
bool wasReset = (m_incrementalStartPos < 0);
|
bool wasReset = (m_incrementalStartPos < 0);
|
||||||
if (m_contPos == -1) {
|
if (m_contPos == -1) {
|
||||||
m_contPos = m_widget->cursorPosition() + 1;
|
m_contPos = m_widget->cursorPosition() + 1;
|
||||||
@@ -2063,7 +2079,9 @@ private:
|
|||||||
qint64 m_incrementalStartPos = -1;
|
qint64 m_incrementalStartPos = -1;
|
||||||
qint64 m_contPos = -1; // Only valid if last result was NotYetFound.
|
qint64 m_contPos = -1; // Only valid if last result was NotYetFound.
|
||||||
bool m_incrementalWrappedState = false;
|
bool m_incrementalWrappedState = false;
|
||||||
QByteArray m_lastPattern;
|
QString m_lastText;
|
||||||
|
FindFlags m_lastFindFlags;
|
||||||
|
QTextCodec *m_codec;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -2181,10 +2199,12 @@ public:
|
|||||||
setWidget(m_widget);
|
setWidget(m_widget);
|
||||||
setDuplicateSupported(true);
|
setDuplicateSupported(true);
|
||||||
|
|
||||||
auto codecChooser = new CodecChooser(CodecChooser::Filter::SingleByte);
|
auto codecChooser = new CodecChooser(CodecChooser::Filter::All);
|
||||||
codecChooser->prependNone();
|
codecChooser->prependNone();
|
||||||
connect(codecChooser, &CodecChooser::codecChanged,
|
connect(codecChooser, &CodecChooser::codecChanged,
|
||||||
m_widget, &BinEditorWidget::setCodec);
|
m_widget, &BinEditorWidget::setCodec);
|
||||||
|
m_widget->setCodec(codecChooser->currentCodec());
|
||||||
|
|
||||||
const QVariant setting = ICore::settings()->value(C_ENCODING_SETTING);
|
const QVariant setting = ICore::settings()->value(C_ENCODING_SETTING);
|
||||||
if (!setting.isNull())
|
if (!setting.isNull())
|
||||||
codecChooser->setAssignedCodec(QTextCodec::codecForName(setting.toByteArray()));
|
codecChooser->setAssignedCodec(QTextCodec::codecForName(setting.toByteArray()));
|
||||||
@@ -2230,6 +2250,10 @@ public:
|
|||||||
|
|
||||||
auto aggregate = new Aggregation::Aggregate;
|
auto aggregate = new Aggregation::Aggregate;
|
||||||
auto binEditorFind = new BinEditorFind(m_widget);
|
auto binEditorFind = new BinEditorFind(m_widget);
|
||||||
|
connect(codecChooser, &CodecChooser::codecChanged,
|
||||||
|
binEditorFind, &BinEditorFind::setCodec);
|
||||||
|
binEditorFind->setCodec(codecChooser->currentCodec());
|
||||||
|
|
||||||
aggregate->add(binEditorFind);
|
aggregate->add(binEditorFind);
|
||||||
aggregate->add(m_widget);
|
aggregate->add(m_widget);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user