parent
09561b470f
commit
3fc6ff1d06
|
@ -14,8 +14,8 @@ HexEditDialog::HexEditDialog(QWidget* parent) : QDialog(parent), ui(new Ui::HexE
|
|||
setModal(true); //modal window
|
||||
|
||||
//setup text fields
|
||||
ui->lineEditAscii->setEncoding(HexLineEdit::Encoding::Ascii);
|
||||
ui->lineEditUnicode->setEncoding(HexLineEdit::Encoding::Unicode);
|
||||
ui->lineEditAscii->setEncoding(QTextCodec::codecForName("System"));
|
||||
ui->lineEditUnicode->setEncoding(QTextCodec::codecForName("UTF-16"));
|
||||
|
||||
ui->chkEntireBlock->hide();
|
||||
|
||||
|
@ -35,6 +35,7 @@ HexEditDialog::HexEditDialog(QWidget* parent) : QDialog(parent), ui(new Ui::HexE
|
|||
connect(Bridge::getBridge(), SIGNAL(repaintGui()), this, SLOT(updateStyle()));
|
||||
|
||||
updateStyle();
|
||||
updateCodepage();
|
||||
}
|
||||
|
||||
HexEditDialog::~HexEditDialog()
|
||||
|
@ -58,6 +59,24 @@ void HexEditDialog::showKeepSize(bool show)
|
|||
ui->chkKeepSize->hide();
|
||||
}
|
||||
|
||||
void HexEditDialog::updateCodepage()
|
||||
{
|
||||
duint lastCodepage;
|
||||
auto allCodecs = QTextCodec::availableCodecs();
|
||||
if(!BridgeSettingGetUint("Misc", "LastCodepage", &lastCodepage) || lastCodepage >= duint(allCodecs.size()))
|
||||
return;
|
||||
ui->lineEditCodepage->setEncoding(QTextCodec::codecForName(allCodecs.at(lastCodepage)));
|
||||
ui->lineEditCodepage->setData(mHexEdit->data());
|
||||
ui->labelLastCodepage->setText(QString(allCodecs.at(lastCodepage).constData()));
|
||||
}
|
||||
|
||||
void HexEditDialog::updateCodepage(const QByteArray & name)
|
||||
{
|
||||
ui->lineEditCodepage->setEncoding(QTextCodec::codecForName(name));
|
||||
ui->lineEditCodepage->setData(mHexEdit->data());
|
||||
ui->labelLastCodepage->setText(QString(name));
|
||||
}
|
||||
|
||||
bool HexEditDialog::entireBlock()
|
||||
{
|
||||
return ui->chkEntireBlock->isChecked();
|
||||
|
@ -68,6 +87,7 @@ void HexEditDialog::updateStyle()
|
|||
QString style = QString("QLineEdit { border-style: outset; border-width: 1px; border-color: %1; color: %1; background-color: %2 }").arg(ConfigColor("HexEditTextColor").name(), ConfigColor("HexEditBackgroundColor").name());
|
||||
ui->lineEditAscii->setStyleSheet(style);
|
||||
ui->lineEditUnicode->setStyleSheet(style);
|
||||
ui->lineEditCodepage->setStyleSheet(style);
|
||||
|
||||
mHexEdit->setTextColor(ConfigColor("HexEditTextColor"));
|
||||
mHexEdit->setWildcardColor(ConfigColor("HexEditWildcardColor"));
|
||||
|
@ -80,6 +100,7 @@ void HexEditDialog::on_chkKeepSize_toggled(bool checked)
|
|||
mHexEdit->setKeepSize(checked);
|
||||
ui->lineEditAscii->setKeepSize(checked);
|
||||
ui->lineEditUnicode->setKeepSize(checked);
|
||||
ui->lineEditCodepage->setKeepSize(checked);
|
||||
}
|
||||
|
||||
void HexEditDialog::dataChangedSlot()
|
||||
|
@ -90,6 +111,7 @@ void HexEditDialog::dataChangedSlot()
|
|||
QByteArray data = mHexEdit->data();
|
||||
ui->lineEditAscii->setData(data);
|
||||
ui->lineEditUnicode->setData(data);
|
||||
ui->lineEditCodepage->setData(data);
|
||||
mDataInitialized = true;
|
||||
}
|
||||
}
|
||||
|
@ -99,6 +121,7 @@ void HexEditDialog::dataEditedSlot()
|
|||
QByteArray data = mHexEdit->data();
|
||||
ui->lineEditAscii->setData(data);
|
||||
ui->lineEditUnicode->setData(data);
|
||||
ui->lineEditCodepage->setData(data);
|
||||
}
|
||||
|
||||
void HexEditDialog::on_lineEditAscii_dataEdited()
|
||||
|
@ -106,6 +129,7 @@ void HexEditDialog::on_lineEditAscii_dataEdited()
|
|||
QByteArray data = ui->lineEditAscii->data();
|
||||
data = resizeData(data);
|
||||
ui->lineEditUnicode->setData(data);
|
||||
ui->lineEditCodepage->setData(data);
|
||||
mHexEdit->setData(data);
|
||||
}
|
||||
|
||||
|
@ -114,6 +138,16 @@ void HexEditDialog::on_lineEditUnicode_dataEdited()
|
|||
QByteArray data = ui->lineEditUnicode->data();
|
||||
data = resizeData(data);
|
||||
ui->lineEditAscii->setData(data);
|
||||
ui->lineEditCodepage->setData(data);
|
||||
mHexEdit->setData(data);
|
||||
}
|
||||
|
||||
void HexEditDialog::on_lineEditCodepage_dataEdited()
|
||||
{
|
||||
QByteArray data = ui->lineEditCodepage->data();
|
||||
data = resizeData(data);
|
||||
ui->lineEditAscii->setData(data);
|
||||
ui->lineEditUnicode->setData(data);
|
||||
mHexEdit->setData(data);
|
||||
}
|
||||
|
||||
|
@ -123,10 +157,11 @@ QByteArray HexEditDialog::resizeData(QByteArray & data)
|
|||
if(mHexEdit->keepSize())
|
||||
{
|
||||
int dataSize = mHexEdit->data().size();
|
||||
if(dataSize < data.size())
|
||||
int data_size = data.size();
|
||||
if(dataSize < data_size)
|
||||
data.resize(dataSize);
|
||||
else if(dataSize > data.size())
|
||||
data.append(QByteArray(dataSize - data.size(), 0));
|
||||
else if(dataSize > data_size)
|
||||
data.append(QByteArray(dataSize - data_size, 0));
|
||||
}
|
||||
|
||||
return data;
|
||||
|
@ -137,19 +172,5 @@ void HexEditDialog::on_btnCodepage_clicked()
|
|||
CodepageSelectionDialog codepageDialog(this);
|
||||
if(codepageDialog.exec() != QDialog::Accepted)
|
||||
return;
|
||||
auto textCodec = QTextCodec::codecForName(codepageDialog.getSelectedCodepage());
|
||||
if(!textCodec)
|
||||
return;
|
||||
LineEditDialog lineEdit(this);
|
||||
lineEdit.setWindowTitle(tr("Enter text to convert..."));
|
||||
QString oldText;
|
||||
oldText = textCodec->toUnicode(mHexEdit->data());
|
||||
for(auto & i : oldText)
|
||||
if(!i.isPrint())
|
||||
i = QChar('.');
|
||||
lineEdit.setText(oldText);
|
||||
if(lineEdit.exec() != QDialog::Accepted)
|
||||
return;
|
||||
mHexEdit->setData(resizeData(textCodec->fromUnicode(lineEdit.editText)));
|
||||
dataEditedSlot();
|
||||
updateCodepage(codepageDialog.getSelectedCodepage());
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ public:
|
|||
|
||||
void showEntireBlock(bool show);
|
||||
void showKeepSize(bool show);
|
||||
void updateCodepage();
|
||||
|
||||
bool entireBlock();
|
||||
|
||||
|
@ -31,10 +32,12 @@ private slots:
|
|||
void dataEditedSlot();
|
||||
void on_lineEditAscii_dataEdited();
|
||||
void on_lineEditUnicode_dataEdited();
|
||||
void on_lineEditCodepage_dataEdited();
|
||||
void on_btnCodepage_clicked();
|
||||
|
||||
private:
|
||||
Ui::HexEditDialog* ui;
|
||||
void updateCodepage(const QByteArray & name);
|
||||
|
||||
bool mDataInitialized;
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>381</width>
|
||||
<height>280</height>
|
||||
<height>304</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
@ -18,23 +18,10 @@
|
|||
<normaloff>:/icons/images/document-binary.png</normaloff>:/icons/images/document-binary.png</iconset>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="labelAscii">
|
||||
<property name="text">
|
||||
<string>&ASCII:</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>lineEditAscii</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="labelUnicode">
|
||||
<property name="text">
|
||||
<string>&UNICODE:</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>lineEditUnicode</cstring>
|
||||
<item row="5" column="0" colspan="4">
|
||||
<widget class="HexLineEdit" name="lineEditCodepage">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QLineEdit {border-style: outset; border-width: 1px; border-color: black}</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -54,6 +41,23 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="labelAscii">
|
||||
<property name="text">
|
||||
<string>&ASCII:</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>lineEditAscii</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="2">
|
||||
<widget class="QPushButton" name="btnOk">
|
||||
<property name="text">
|
||||
<string>&OK</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="4">
|
||||
<widget class="HexLineEdit" name="lineEditAscii">
|
||||
<property name="styleSheet">
|
||||
|
@ -70,7 +74,7 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="labelHex">
|
||||
<property name="text">
|
||||
<string>&Hex:</string>
|
||||
|
@ -80,21 +84,21 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QCheckBox" name="chkKeepSize">
|
||||
<item row="8" column="3">
|
||||
<widget class="QPushButton" name="btnCancel">
|
||||
<property name="text">
|
||||
<string>&Keep Size</string>
|
||||
<string>&Cancel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="2">
|
||||
<widget class="QPushButton" name="btnOk">
|
||||
<item row="8" column="1">
|
||||
<widget class="QCheckBox" name="chkEntireBlock">
|
||||
<property name="text">
|
||||
<string>&OK</string>
|
||||
<string>&Entire Block</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0" colspan="4">
|
||||
<item row="7" column="0" colspan="4">
|
||||
<widget class="QScrollArea" name="scrollArea">
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::NoFocus</enum>
|
||||
|
@ -111,23 +115,36 @@
|
|||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>361</width>
|
||||
<height>116</height>
|
||||
<height>100</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="QCheckBox" name="chkEntireBlock">
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="labelUnicode">
|
||||
<property name="text">
|
||||
<string>&Entire Block</string>
|
||||
<string>&UNICODE:</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>lineEditUnicode</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="3">
|
||||
<widget class="QPushButton" name="btnCancel">
|
||||
<item row="8" column="0">
|
||||
<widget class="QCheckBox" name="chkKeepSize">
|
||||
<property name="text">
|
||||
<string>&Cancel</string>
|
||||
<string>&Keep Size</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="labelLastCodepage">
|
||||
<property name="text">
|
||||
<string>Last &Codepage:</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>lineEditCodepage</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -146,7 +163,7 @@
|
|||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Codepage...</string>
|
||||
<string>Code&page...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
|
|
@ -12,9 +12,9 @@ HexLineEdit::HexLineEdit(QWidget* parent) :
|
|||
|
||||
// setup data
|
||||
mData = QByteArray();
|
||||
mEncoding = Encoding::Ascii;
|
||||
mKeepSize = false;
|
||||
mOverwriteMode = false;
|
||||
mEncoding = QTextCodec::codecForName("System");
|
||||
|
||||
//setup text fields
|
||||
QFont font("Monospace", 8, QFont::Normal, false);
|
||||
|
@ -42,21 +42,13 @@ void HexLineEdit::keyPressEvent(QKeyEvent* event)
|
|||
|
||||
if(mOverwriteMode)
|
||||
{
|
||||
if(!event->text().isEmpty() && event->text().at(0).isPrint())
|
||||
QString newText = event->text();
|
||||
if(!newText.isEmpty() && newText.at(0).isPrint())
|
||||
{
|
||||
QString keyText;
|
||||
switch(mEncoding)
|
||||
{
|
||||
case Encoding::Ascii:
|
||||
keyText = event->text().toLocal8Bit();
|
||||
break;
|
||||
case Encoding::Unicode:
|
||||
keyText = event->text();
|
||||
break;
|
||||
}
|
||||
|
||||
del();
|
||||
insert(keyText);
|
||||
for(int i = 0; i < newText.size(); i++)
|
||||
del();
|
||||
QTextCodec::ConverterState converter(QTextCodec::IgnoreHeader);
|
||||
insert(mEncoding->fromUnicode(newText.constData(), newText.size(), &converter));
|
||||
event->ignore();
|
||||
return;
|
||||
}
|
||||
|
@ -68,21 +60,9 @@ void HexLineEdit::keyPressEvent(QKeyEvent* event)
|
|||
void HexLineEdit::setData(const QByteArray & data)
|
||||
{
|
||||
QString text;
|
||||
switch(mEncoding)
|
||||
{
|
||||
case Encoding::Ascii:
|
||||
text = QString::fromLocal8Bit(data);
|
||||
break;
|
||||
text = mEncoding->toUnicode(data);
|
||||
|
||||
case Encoding::Unicode:
|
||||
text = QString::fromUtf16((const ushort*)data.constData());
|
||||
break;
|
||||
}
|
||||
for(auto & i : text)
|
||||
if(!i.isPrint())
|
||||
i = QChar(' ');
|
||||
|
||||
mData = toEncodedData(text);
|
||||
mData = data;
|
||||
setText(text);
|
||||
}
|
||||
|
||||
|
@ -91,12 +71,21 @@ QByteArray HexLineEdit::data()
|
|||
return mData;
|
||||
}
|
||||
|
||||
void HexLineEdit::setEncoding(const HexLineEdit::Encoding encoding)
|
||||
/**
|
||||
* @brief HexLineEdit::setEncoding Set the encoding of the line edit.
|
||||
* @param encoding The codec for the line edit.
|
||||
* @remarks the parameter passed in will be managed by the widget. You must use a new codec.
|
||||
*/
|
||||
void HexLineEdit::setEncoding(QTextCodec* encoding)
|
||||
{
|
||||
mEncoding = encoding;
|
||||
}
|
||||
|
||||
HexLineEdit::Encoding HexLineEdit::encoding()
|
||||
/**
|
||||
* @brief HexLineEdit::encoding Get the encoding of the line edit.
|
||||
* @return the codec instance of the line edit.
|
||||
*/
|
||||
QTextCodec* HexLineEdit::encoding()
|
||||
{
|
||||
return mEncoding;
|
||||
}
|
||||
|
@ -108,16 +97,8 @@ void HexLineEdit::setKeepSize(const bool enabled)
|
|||
{
|
||||
int dataSize = mData.size();
|
||||
int charSize;
|
||||
switch(mEncoding)
|
||||
{
|
||||
case Encoding::Ascii:
|
||||
charSize = sizeof(char);
|
||||
break;
|
||||
|
||||
case Encoding::Unicode:
|
||||
charSize = sizeof(wchar_t);
|
||||
break;
|
||||
}
|
||||
QTextCodec::ConverterState converter(QTextCodec::IgnoreHeader);
|
||||
charSize = mEncoding->fromUnicode(QString("A").constData(), 1, &converter).size(); // "A\0"
|
||||
|
||||
setMaxLength((dataSize / charSize) + (dataSize % charSize));
|
||||
}
|
||||
|
@ -152,17 +133,6 @@ void HexLineEdit::updateData(const QString & arg1)
|
|||
|
||||
QByteArray HexLineEdit::toEncodedData(const QString & text)
|
||||
{
|
||||
QByteArray data;
|
||||
switch(mEncoding)
|
||||
{
|
||||
case Encoding::Ascii:
|
||||
data = text.toLocal8Bit();
|
||||
break;
|
||||
|
||||
case Encoding::Unicode:
|
||||
data = QTextCodec::codecForName("UTF-16")->makeEncoder(QTextCodec::IgnoreHeader)->fromUnicode(text);
|
||||
break;
|
||||
}
|
||||
|
||||
return data;
|
||||
QTextCodec::ConverterState converter(QTextCodec::IgnoreHeader);
|
||||
return mEncoding->fromUnicode(text.constData(), text.size(), &converter);
|
||||
}
|
||||
|
|
|
@ -13,11 +13,6 @@ class HexLineEdit : public QLineEdit
|
|||
Q_OBJECT
|
||||
|
||||
public:
|
||||
enum class Encoding
|
||||
{
|
||||
Ascii,
|
||||
Unicode
|
||||
};
|
||||
|
||||
explicit HexLineEdit(QWidget* parent = 0);
|
||||
~HexLineEdit();
|
||||
|
@ -27,8 +22,8 @@ public:
|
|||
void setData(const QByteArray & data);
|
||||
QByteArray data();
|
||||
|
||||
void setEncoding(const Encoding encoding);
|
||||
Encoding encoding();
|
||||
void setEncoding(QTextCodec* encoding);
|
||||
QTextCodec* encoding();
|
||||
|
||||
void setKeepSize(const bool enabled);
|
||||
bool keepSize();
|
||||
|
@ -46,7 +41,7 @@ private:
|
|||
Ui::HexLineEdit* ui;
|
||||
|
||||
QByteArray mData;
|
||||
Encoding mEncoding;
|
||||
QTextCodec* mEncoding;
|
||||
bool mKeepSize;
|
||||
bool mOverwriteMode;
|
||||
|
||||
|
|
Loading…
Reference in New Issue