BinEditor: Support character encodings for the text part

Change-Id: I853b5b5c4c4d523033319169e80e6f9063360c17
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Orgad Shaneh
2022-07-27 23:01:13 +03:00
committed by Orgad Shaneh
parent 24822f96ae
commit 332f35d864
6 changed files with 90 additions and 18 deletions

View File

@@ -29,11 +29,13 @@
#include "bineditorservice.h"
#include <coreplugin/icore.h>
#include <texteditor/codecchooser.h>
#include <QCoreApplication>
#include <QDir>
#include <QFile>
#include <QFileInfo>
#include <QTextCodec>
#include <QVariant>
#include <QMenu>
@@ -343,16 +345,20 @@ class BinEditor : public IEditor
public:
BinEditor(BinEditorWidget *widget)
{
using namespace TextEditor;
setWidget(widget);
m_file = new BinEditorDocument(widget);
m_addressEdit = new QLineEdit;
auto addressValidator = new QRegularExpressionValidator(QRegularExpression("[0-9a-fA-F]{1,16}"), m_addressEdit);
m_addressEdit->setValidator(addressValidator);
m_codecChooser = new CodecChooser(CodecChooser::Filter::SingleByte);
m_codecChooser->prependNone();
auto l = new QHBoxLayout;
auto w = new QWidget;
l->setContentsMargins(0, 0, 5, 0);
l->addStretch(1);
l->addWidget(m_codecChooser);
l->addWidget(m_addressEdit);
w->setLayout(l);
@@ -366,9 +372,14 @@ public:
this, &BinEditor::updateCursorPosition);
connect(m_addressEdit, &QLineEdit::editingFinished,
this, &BinEditor::jumpToAddress);
connect(m_codecChooser, &CodecChooser::codecChanged,
widget, &BinEditorWidget::setCodec);
connect(widget, &BinEditorWidget::modificationChanged,
m_file, &IDocument::changed);
updateCursorPosition(widget->cursorPosition());
const QVariant setting = ICore::settings()->value(Constants::C_ENCODING_SETTING);
if (!setting.isNull())
m_codecChooser->setAssignedCodec(QTextCodec::codecForName(setting.toByteArray()));
}
~BinEditor() override
@@ -400,6 +411,7 @@ private:
BinEditorDocument *m_file;
QToolBar *m_toolBar;
QLineEdit *m_addressEdit;
TextEditor::CodecChooser *m_codecChooser;
};
///////////////////////////////// BinEditorPluginPrivate //////////////////////////////////