修复Bug,增加功能

This commit is contained in:
寂静的羽夏 2022-06-18 20:27:02 +08:00
parent 520255e402
commit f19cc61370
17 changed files with 409 additions and 296 deletions

View File

@ -6,10 +6,10 @@ MetaReplaceCommand::MetaReplaceCommand(QHexMetadata *hexmeta,
QUndoCommand *parent)
: MetaCommand(hexmeta, meta, parent), m_old(oldmeta) {}
void MetaReplaceCommand::redo() {
void MetaReplaceCommand::undo() {
m_hexmeta->modifyMetadata(m_meta, m_old, true);
}
void MetaReplaceCommand::undo() {
void MetaReplaceCommand::redo() {
m_hexmeta->modifyMetadata(m_old, m_meta, true);
}

View File

@ -30,7 +30,7 @@ bool QHexDocument::setKeepSize(bool b) {
return true;
}
bool QHexDocument::isModified() { return !m_undostack.isClean(); }
bool QHexDocument::isSaved() { return m_undostack.isClean(); }
void QHexDocument::getBookMarks(QList<BookMarkStruct> &bookmarks) {
bookmarks.clear();
@ -133,10 +133,21 @@ QHexDocument::QHexDocument(QHexBuffer *buffer, bool readonly, QObject *parent)
connect(m_metadata, &QHexMetadata::metadataCleared, this,
&QHexDocument::documentChanged);
/*=======================*/
// added by wingsummer
connect(&m_undostack, &QUndoStack::canUndoChanged, this,
&QHexDocument::canUndoChanged);
connect(&m_undostack, &QUndoStack::canRedoChanged, this,
&QHexDocument::canRedoChanged);
connect(m_metadata, &QHexMetadata::canMetaRedoChanged, this,
&QHexDocument::canMetaRedoChanged);
connect(m_metadata, &QHexMetadata::canMetaUndoChanged, this,
&QHexDocument::canMetaUndoChanged);
connect(&m_undostack, &QUndoStack::cleanChanged, this,
&QHexDocument::documentSaved);
connect(m_metadata, &QHexMetadata::isSaved, this,
&QHexDocument::workspaceSaved);
/*=======================*/
}
bool QHexDocument::isEmpty() const { return m_buffer->isEmpty(); }
@ -289,8 +300,6 @@ bool QHexDocument::saveTo(QIODevice *device, bool cleanUndo) {
m_buffer->write(device);
if (cleanUndo)
m_undostack.setClean(); // added by wingsummer
emit documentSaved();
return true;
}

View File

@ -46,7 +46,7 @@ public:
bool isReadOnly();
bool isKeepSize();
bool isLocked();
bool isModified();
bool isSaved();
void addBookMark(QString comment);
BookMarkStruct bookMark(int index);
@ -109,9 +109,19 @@ public:
signals:
void documentSaved();
/*================================*/
/*================================*/
// added by wingsummer
void documentSaved(bool saved);
void workspaceSaved(bool saved);
void canMetaUndoChanged(bool canUndo);
void canMetaRedoChanged(bool canRedo);
/*================================*/
void canUndoChanged(bool canUndo);
void canRedoChanged(bool canRedo);
void documentChanged();

View File

@ -4,7 +4,13 @@
#include "commands/metaremovecommand.h"
#include "commands/metareplacecommand.h"
QHexMetadata::QHexMetadata(QObject *parent) : QObject(parent) {}
QHexMetadata::QHexMetadata(QObject *parent) : QObject(parent) {
connect(&m_undo, &QUndoStack::canUndoChanged, this,
&QHexMetadata::canMetaUndoChanged);
connect(&m_undo, &QUndoStack::canRedoChanged, this,
&QHexMetadata::canMetaRedoChanged);
connect(&m_undo, &QUndoStack::cleanChanged, this, &QHexMetadata::isSaved);
}
const QHexLineMetadata &QHexMetadata::get(quint64 line) const {
auto it = m_metadata.find(line);
@ -23,10 +29,12 @@ QList<QHexMetadataAbsoluteItem> QHexMetadata::getallMetas() {
return m_absoluteMetadata;
}
bool QHexMetadata::isMetaSaved() { return m_undo.isClean(); }
void QHexMetadata::modifyMetadata(QHexMetadataAbsoluteItem newmeta,
QHexMetadataAbsoluteItem oldmeta,
bool reundo) {
removeMetadata(oldmeta);
removeMetadata(oldmeta, true);
metadata(newmeta.begin, newmeta.end, newmeta.foreground, newmeta.background,
newmeta.comment, false);
if (!reundo)
@ -165,7 +173,7 @@ void QHexMetadata::metadata(qint64 begin, qint64 end, const QColor &fgcolor,
m_undo.push(new MetaAddCommand(this, absi));
}
m_absoluteMetadata.append(absi);
setAbsoluteMetadata(m_absoluteMetadata.back());
setAbsoluteMetadata(absi);
}
void QHexMetadata::setAbsoluteMetadata(const QHexMetadataAbsoluteItem &mai) {
@ -183,8 +191,13 @@ void QHexMetadata::setAbsoluteMetadata(const QHexMetadataAbsoluteItem &mai) {
const int lastChar = mai.end % m_lineWidth;
length = lastChar - start;
} else {
length = m_lineWidth;
// fix the bug by wingsummer
if (firstRow != lastRow)
length = m_lineWidth - start;
else
length = m_lineWidth;
}
if (length > 0) {
setMetadata(
{row, start, length, mai.foreground, mai.background, mai.comment});

View File

@ -70,6 +70,7 @@ public:
void undo();
bool canRedo();
bool canUndo();
bool isMetaSaved();
/*============================*/
@ -106,6 +107,14 @@ signals:
void metadataChanged(quint64 line);
void metadataCleared();
/*============================*/
// added by wingsummer
void canMetaUndoChanged(bool canUndo);
void canMetaRedoChanged(bool canRedo);
void isSaved(bool saved);
/*============================*/
private:
quint8 m_lineWidth;
QHash<quint64, QHexLineMetadata> m_metadata;

View File

@ -342,12 +342,11 @@ void QHexRenderer::applyMetadata(QTextCursor &textcursor, quint64 line,
return;
const QHexLineMetadata &linemetadata = metadata->get(line);
for (const QHexMetadataItem &mi : linemetadata) {
QTextCharFormat charformat;
if (mi.background.isValid())
if (mi.background.isValid() && mi.background.rgba())
charformat.setBackground(mi.background);
if (mi.foreground.isValid())
if (mi.foreground.isValid() && mi.foreground.rgba())
charformat.setForeground(mi.foreground);
if (!mi.comment.isEmpty())
charformat.setUnderlineStyle(QTextCharFormat::SingleUnderline);

View File

@ -21,9 +21,17 @@ QHexRenderer *QHexView::renderer() { return m_renderer; }
void QHexView::switchDocument(QHexDocument *document, QHexRenderer *renderer,
int vBarValue) {
if (document && renderer) {
if (m_document) {
m_document->disconnect();
m_document->cursor()->disconnect();
}
m_document = document;
m_renderer = renderer;
establishSignal(document);
this->adjustScrollBars();
this->viewport()->update();
auto vbar = this->verticalScrollBar();
@ -31,9 +39,6 @@ void QHexView::switchDocument(QHexDocument *document, QHexRenderer *renderer,
vbar->setValue(vBarValue);
m_blinktimer->start(); // let mouse blink
emit documentStatusChanged();
emit documentSwitched();
}
}
@ -43,13 +48,13 @@ bool QHexView::isLocked() { return m_document->isLocked(); }
bool QHexView::setLockedFile(bool b) {
bool res = m_document->setLockedFile(b);
emit documentStatusChanged();
emit documentLockedFile(b);
return res;
}
bool QHexView::setKeepSize(bool b) {
bool res = m_document->setKeepSize(b);
emit documentStatusChanged();
emit documentKeepSize(b);
return res;
}
@ -99,7 +104,7 @@ void QHexView::setAddressBase(quint64 base) {
m_document->setBaseAddress(base);
}
bool QHexView::isModified() { return m_document->isModified(); }
bool QHexView::isSaved() { return m_document->isSaved(); }
QFont QHexView::getHexeditorFont() {
QFont f = QFontDatabase::systemFont(QFontDatabase::FixedFont);
@ -110,6 +115,37 @@ QFont QHexView::getHexeditorFont() {
return f;
}
void QHexView::establishSignal(QHexDocument *doc) {
connect(doc, &QHexDocument::documentChanged, this, [&]() {
this->adjustScrollBars();
this->viewport()->update();
});
connect(doc->cursor(), &QHexCursor::positionChanged, this,
&QHexView::moveToSelection);
connect(doc->cursor(), &QHexCursor::insertionModeChanged, this,
&QHexView::renderCurrentLine);
connect(doc, &QHexDocument::canUndoChanged, this, &QHexView::canUndoChanged);
connect(doc, &QHexDocument::canRedoChanged, this, &QHexView::canRedoChanged);
connect(doc, &QHexDocument::canMetaRedoChanged, this,
&QHexView::canMetaRedoChanged);
connect(doc, &QHexDocument::canMetaUndoChanged, this,
&QHexView::canMetaUndoChanged);
connect(doc, &QHexDocument::documentSaved, this, &QHexView::documentSaved);
connect(doc, &QHexDocument::workspaceSaved, this, &QHexView::workspaceSaved);
emit canUndoChanged(doc->canUndo());
emit canRedoChanged(doc->canRedo());
emit canMetaRedoChanged(doc->metadata()->canRedo());
emit canMetaUndoChanged(doc->metadata()->canUndo());
emit cursorLocationChanged();
emit documentSwitched();
emit documentSaved(doc->isSaved());
emit documentKeepSize(doc->isKeepSize());
emit documentLockedFile(doc->isLocked());
emit workspaceSaved(doc->metadata()->isMetaSaved());
}
/*======================*/
QHexView::QHexView(QWidget *parent)
@ -138,6 +174,7 @@ QHexView::QHexView(QWidget *parent)
QHexDocument *QHexView::document() { return m_document; }
// modified by wingsummer
void QHexView::setDocument(QHexDocument *document) {
// modified by wingsummer
@ -147,29 +184,18 @@ void QHexView::setDocument(QHexDocument *document) {
// if (m_document)
// m_document->deleteLater();
if (m_document) {
m_document->disconnect();
m_document->cursor()->disconnect();
}
m_document = document;
m_renderer = new QHexRenderer(m_document, this->fontMetrics(), this);
connect(m_document, &QHexDocument::documentChanged, this, [&]() {
this->adjustScrollBars();
this->viewport()->update();
emit documentChanged(); // added by wingsummer
});
connect(m_document, &QHexDocument::documentSaved, this,
[&]() { emit documentStatusChanged(); }); // added by wingsummer
connect(m_document->cursor(), &QHexCursor::positionChanged, this,
&QHexView::moveToSelection);
connect(m_document->cursor(), &QHexCursor::insertionModeChanged, this,
&QHexView::renderCurrentLine);
establishSignal(m_document);
this->adjustScrollBars();
this->viewport()->update();
emit documentChanged(); // added by wingsummer
emit documentStatusChanged();
emit documentSwitched();
}
bool QHexView::event(QEvent *e) {

View File

@ -45,15 +45,22 @@ public:
quint64 addressBase();
void setAddressBase(quint64 base);
bool isModified();
bool isSaved();
void establishSignal(QHexDocument *doc);
static QFont getHexeditorFont();
signals:
void cursorLocationChanged();
void documentChanged();
void documentStatusChanged();
void documentSwitched();
void workspaceSaved(bool saved);
void canMetaUndoChanged(bool canUndo);
void canMetaRedoChanged(bool canRedo);
void canUndoChanged(bool canUndo);
void canRedoChanged(bool canRedo);
void documentSaved(bool saved);
void documentLockedFile(bool locked);
void documentKeepSize(bool keep);
/*=============================*/

View File

@ -19,6 +19,7 @@
#include <DSettingsWidgetFactory>
#include <DTitlebar>
#include <QCheckBox>
#include <QDesktopServices>
#include <QFile>
#include <QFileDialog>
#include <QFileInfo>
@ -112,6 +113,15 @@ MainWindow::MainWindow(DMainWindow *parent) {
AddToolSubMenuShortcutAction("open", tr("OpenF"), MainWindow::on_openfile,
QKeySequence::Open);
auto keyundo =
QKeySequence(Qt::KeyboardModifier::ControlModifier | Qt::Key_Z);
auto keymundo = QKeySequence(Qt::KeyboardModifier::ControlModifier |
Qt::KeyboardModifier::ShiftModifier | Qt::Key_Z);
auto keyredo =
QKeySequence(Qt::KeyboardModifier::ControlModifier | Qt::Key_Y);
auto keymredo = QKeySequence(Qt::KeyboardModifier::ControlModifier |
Qt::KeyboardModifier::ShiftModifier | Qt::Key_Y);
auto keysaveas =
QKeySequence(Qt::KeyboardModifier::ControlModifier |
Qt::KeyboardModifier::ShiftModifier | Qt::Key_S);
@ -217,10 +227,10 @@ MainWindow::MainWindow(DMainWindow *parent) {
tm->setTitle(tr("Edit"));
tm->setIcon(ICONRES("edit"));
AddToolSubMenuShortcutAction("undo", tr("Undo"), MainWindow::on_undofile,
QKeySequence::Undo);
keyundo);
AddMenuDB(ToolBoxIndex::Undo);
AddToolSubMenuShortcutAction("redo", tr("Redo"), MainWindow::on_redofile,
QKeySequence::Redo);
keyredo);
AddMenuDB(ToolBoxIndex::Redo);
tm->addSeparator();
AddToolSubMenuShortcutAction("cut", tr("Cut"), MainWindow::on_cutfile,
@ -262,6 +272,21 @@ MainWindow::MainWindow(DMainWindow *parent) {
MainWindow::on_fillzero, keyfillzero);
AddMenuDB(ToolBoxIndex::FillZero);
tm->addSeparator();
AddToolSubMenuShortcutAction("encoding", tr("Encoding"),
MainWindow::on_encoding, keyencoding);
AddMenuDB(ToolBoxIndex::Encoding);
menu->addMenu(tm);
tm = new DMenu(this);
tm->setTitle(tr("Mark"));
tm->setIcon(ICONRES("mark"));
AddToolSubMenuShortcutAction("metaundo", tr("Undo"), MainWindow::on_metaundo,
keymundo);
AddMenuDB(ToolBoxIndex::MetaUndo);
AddToolSubMenuShortcutAction("metaredo", tr("Redo"), MainWindow::on_metaredo,
keymredo);
AddMenuDB(ToolBoxIndex::MetaRedo);
tm->addSeparator();
AddToolSubMenuShortcutAction("metadata", tr("MetaData"),
MainWindow::on_metadata, keymetadata);
AddMenuDB(ToolBoxIndex::Meta);
@ -284,10 +309,6 @@ MainWindow::MainWindow(DMainWindow *parent) {
AddToolSubMenuShortcutAction("bookmarkcls", tr("ClearBookMark"),
MainWindow::on_bookmarkcls, keybookmarkcls);
AddMenuDB(ToolBoxIndex::ClsBookMark);
tm->addSeparator();
AddToolSubMenuShortcutAction("encoding", tr("Encoding"),
MainWindow::on_encoding, keyencoding);
AddMenuDB(ToolBoxIndex::Encoding);
menu->addMenu(tm);
tm = new DMenu(this);
@ -316,6 +337,7 @@ MainWindow::MainWindow(DMainWindow *parent) {
tm->setIcon(ICONRES("author"));
AddToolSubMenuAction("soft", tr("About"), MainWindow::on_about);
AddToolSubMenuAction("sponsor", tr("Sponsor"), MainWindow::on_sponsor);
AddToolSubMenuAction("wiki", tr("Wiki"), MainWindow::on_wiki);
menu->addMenu(tm);
@ -331,13 +353,6 @@ MainWindow::MainWindow(DMainWindow *parent) {
a->setEnabled(false); \
conmenutools.insert(index, a);
AddContextMenuAction("undo", tr("Undo"), MainWindow::on_undofile,
QKeySequence::Undo);
AddContextMenuDB(ToolBoxIndex::Undo);
AddContextMenuAction("redo", tr("Redo"), MainWindow::on_redofile,
QKeySequence::Redo);
AddContextMenuDB(ToolBoxIndex::Redo);
hexeditorMenu->addSeparator();
AddContextMenuAction("cut", tr("Cut"), MainWindow::on_cutfile,
QKeySequence::Cut);
AddContextMenuAction("cuthex", tr("CutHex"), MainWindow::on_cuthex,
@ -356,29 +371,11 @@ MainWindow::MainWindow(DMainWindow *parent) {
AddContextMenuAction("find", tr("Find"), MainWindow::on_findfile,
QKeySequence::Find);
AddContextMenuAction("jmp", tr("Goto"), MainWindow::on_gotoline, keygoto);
hexeditorMenu->addSeparator();
AddContextMenuAction("fill", tr("Fill"), MainWindow::on_fill, keyfill);
AddContextMenuAction("fillNop", tr("FillNop"), MainWindow::on_fillnop,
keyfillnop);
AddContextMenuAction("fillZero", tr("FillZero"), MainWindow::on_fillzero,
keyfillzero);
hexeditorMenu->addSeparator();
AddContextMenuAction("metadata", tr("MetaData"), MainWindow::on_metadata,
keymetadata);
AddContextMenuAction("metadataedit", tr("MetaDataEdit"),
MainWindow::on_metadataedit, keymetaedit);
AddContextMenuAction("metadatadel", tr("DeleteMetaData"),
MainWindow::on_metadatadel, keymetadatadel);
AddContextMenuAction("metadatacls", tr("ClearMetaData"),
MainWindow::on_metadatacls, keymetadatacls);
hexeditorMenu->addSeparator();
AddContextMenuAction("bookmark", tr("BookMark"), MainWindow::on_bookmark,
keybookmark);
AddContextMenuAction("bookmarkdel", tr("DeleteBookMark"),
MainWindow::on_bookmarkdel, keybookmarkdel);
AddContextMenuAction("bookmarkcls", tr("ClearBookMark"),
MainWindow::on_bookmarkcls, keybookmarkcls);
hexeditorMenu->addSeparator();
AddContextMenuAction("encoding", tr("Encoding"), MainWindow::on_encoding,
keyencoding);
toolbar = new DToolBar(this);
@ -478,7 +475,9 @@ MainWindow::MainWindow(DMainWindow *parent) {
AddToolBtnBegin("metadata") {
AddToolBtnBtn("metaundo", tr("Undo"), MainWindow::on_metaundo);
AddToolsDB(ToolBoxIndex::MetaUndo);
AddToolBtnBtn("metaredo", tr("Redo"), MainWindow::on_metaredo);
AddToolsDB(ToolBoxIndex::MetaRedo);
tmenu->addSeparator();
AddToolBtnBtn("metadata", tr("MetaData"), MainWindow::on_metadata);
AddToolBtnBtn("metadataedit", tr("MetaDataEdit"),
@ -580,11 +579,6 @@ MainWindow::MainWindow(DMainWindow *parent) {
AddNamedStatusLabel(lblloc, "(0,0)");
connect(hexeditor, &QHexView::cursorLocationChanged, this,
&MainWindow::on_locChanged);
connect(hexeditor, &QHexView::documentChanged, this,
&MainWindow::on_documentChanged);
connect(hexeditor, &QHexView::documentStatusChanged, this,
&MainWindow::on_documentStatusChanged);
AddStatusLabel(tr("sel:"));
l->setMinimumWidth(50);
l->setAlignment(Qt::AlignCenter);
@ -607,11 +601,12 @@ MainWindow::MainWindow(DMainWindow *parent) {
AddStausILable(infoSaved, "saved", iSaved, infoUnsaved, "unsaved", infoSaveg,
"saveg");
iSaved->setToolTip(tr("InfoSave"));
AddStausILable(infoWriteable, "writable", iReadWrite, infoReadonly,
"readonly", inforwg, "rwg");
AddStausILable(infow, "works", iw, infouw, "uworks", infowg, "worksg");
iReadWrite->setToolTip(tr("InfoReadWrite"));
AddStausILable(infow, "works", iw, infouw, "unworks", infowg, "worksg");
iw->setToolTip(tr("InfoWorks"));
infoUnLock = ICONRES("unlock");
infoLock = ICONRES("lock");
infoCanOver = ICONRES("canover");
@ -751,6 +746,28 @@ MainWindow::MainWindow(DMainWindow *parent) {
connect(gotobar, &GotoBar::pressEsc, [=] { // ToDo
});
// connect hexeditor status
connect(hexeditor, &QHexView::canUndoChanged, [=](bool b) {
toolbartools[ToolBoxIndex::Undo]->setEnabled(b);
toolmenutools[ToolBoxIndex::Undo]->setEnabled(b);
});
connect(hexeditor, &QHexView::canRedoChanged, [=](bool b) {
toolmenutools[ToolBoxIndex::Redo]->setEnabled(b);
toolmenutools[ToolBoxIndex::Redo]->setEnabled(b);
});
connect(hexeditor, &QHexView::canMetaRedoChanged,
[=](bool b) { toolbartools[ToolBoxIndex::MetaRedo]->setEnabled(b); });
connect(hexeditor, &QHexView::canMetaUndoChanged,
[=](bool b) { toolbartools[ToolBoxIndex::MetaUndo]->setEnabled(b); });
connect(hexeditor, &QHexView::documentSaved,
[=](bool b) { iSaved->setPixmap(b ? infoSaved : infoUnsaved); });
connect(hexeditor, &QHexView::documentKeepSize, this,
[=](bool b) { iOver->setIcon(b ? infoCannotOver : infoCanOver); });
connect(hexeditor, &QHexView::documentLockedFile, this,
[=](bool b) { iLocked->setIcon(b ? infoLock : infoUnLock); });
connect(hexeditor, &QHexView::workspaceSaved,
[=](bool b) { iw->setPixmap(b ? infow : infouw); });
#define ConnectShortCut(ShortCut, Slot) \
s = new QShortcut(ShortCut, this); \
connect(s, &QShortcut::activated, this, &Slot);
@ -759,8 +776,8 @@ MainWindow::MainWindow(DMainWindow *parent) {
ConnectShortCut(QKeySequence::Open, MainWindow::on_openfile);
ConnectShortCut(QKeySequence::Save, MainWindow::on_savefile);
ConnectShortCut(keysaveas, MainWindow::on_saveasfile);
ConnectShortCut(QKeySequence::Undo, MainWindow::on_undofile);
ConnectShortCut(QKeySequence::Redo, MainWindow::on_redofile);
ConnectShortCut(keyundo, MainWindow::on_undofile);
ConnectShortCut(keyredo, MainWindow::on_redofile);
ConnectShortCut(QKeySequence::Cut, MainWindow::on_cutfile);
ConnectShortCut(QKeySequence::Copy, MainWindow::on_copyfile);
ConnectShortCut(QKeySequence::Paste, MainWindow::on_pastefile);
@ -782,6 +799,8 @@ MainWindow::MainWindow(DMainWindow *parent) {
ConnectShortCut(keycuthex, MainWindow::on_cuthex);
ConnectShortCut(keycopyhex, MainWindow::on_copyhex);
ConnectShortCut(keypastehex, MainWindow::on_pastehex);
ConnectShortCut(keymredo, MainWindow::on_metaredo);
ConnectShortCut(keymundo, MainWindow::on_metaundo);
logger->logMessage(INFOLOG(tr("SettingLoading")));
@ -925,7 +944,7 @@ void MainWindow::connectShadow(HexViewShadow *shadow) {
PCHECKRETURN(hexfiles[_pcurfile].doc->isKeepSize(), true);
});
ConnectShadowLamba(HexViewShadow::isModified, [=] {
PCHECKRETURN(hexfiles[_pcurfile].doc->isModified(), false);
PCHECKRETURN(!hexfiles[_pcurfile].doc->isSaved(), false);
});
ConnectShadowLamba(HexViewShadow::isReadOnly, [=] {
PCHECKRETURN(hexfiles[_pcurfile].doc->isReadOnly(), true);
@ -1589,11 +1608,18 @@ ErrFile MainWindow::openDriver(QString driver) {
}
}
bool MainWindow::isModified(int index) {
bool MainWindow::isSavedMeta(int index) {
if (index < 0 || index >= hexfiles.count())
return false;
auto p = hexfiles.at(index);
return p.doc->isModified();
return p.doc->metadata()->isMetaSaved();
}
bool MainWindow::isSavedFile(int index) {
if (index < 0 || index >= hexfiles.count())
return false;
auto p = hexfiles.at(index);
return p.doc->isSaved();
}
ErrFile MainWindow::closeCurrentFile(bool force) {
@ -1610,7 +1636,7 @@ ErrFile MainWindow::closeFile(int index, bool force) {
if (index >= 0 && index < hexfiles.count()) {
auto p = hexfiles.at(index);
if (!force) {
if (isModified(index)) {
if (!isSavedFile(index) || !isSavedMeta(index)) {
if (_enableplugin) {
params[0].setValue(HookIndex::CloseFileEnd);
params << ErrFile::UnSaved;
@ -2002,24 +2028,6 @@ void MainWindow::on_setting_general() {
m_settings->settings->sync();
}
void MainWindow::on_documentChanged() {
CheckEnabled;
iSaved->setPixmap(isModified(_currentfile) ? infoUnsaved : infoSaved);
auto canundo = hexeditor->document()->canUndo();
auto canredo = hexeditor->document()->canRedo();
toolbartools[ToolBoxIndex::Undo]->setEnabled(canundo);
toolbartools[ToolBoxIndex::Redo]->setEnabled(canredo);
toolmenutools[ToolBoxIndex::Undo]->setEnabled(canundo);
toolmenutools[ToolBoxIndex::Redo]->setEnabled(canredo);
conmenutools[ToolBoxIndex::Undo]->setEnabled(canundo);
conmenutools[ToolBoxIndex::Redo]->setEnabled(canredo);
if (hexfiles[_currentfile].workspace.length() > 0) {
} else {
iw->setPixmap(infowg);
}
}
void MainWindow::on_savesel() {
CheckEnabled;
auto filename = QFileDialog::getSaveFileName(this, tr("ChooseSaveFile"));
@ -2037,7 +2045,7 @@ void MainWindow::on_savesel() {
}
void MainWindow::on_documentSwitched() {
CheckEnabled;
iReadWrite->setPixmap(hexeditor->isReadOnly() ? infoReadonly : infoWriteable);
QList<BookMarkStruct> bookmaps;
bookmarks->clear();
hexeditor->document()->getBookMarks(bookmaps);
@ -2050,14 +2058,6 @@ void MainWindow::on_documentSwitched() {
}
}
void MainWindow::on_documentStatusChanged() {
CheckEnabled;
iSaved->setPixmap(hexeditor->isModified() ? infoUnsaved : infoSaved);
iReadWrite->setPixmap(hexeditor->isReadOnly() ? infoReadonly : infoWriteable);
iLocked->setIcon(hexeditor->isLocked() ? infoLock : infoUnLock);
iOver->setIcon(hexeditor->isKeepSize() ? infoCannotOver : infoCanOver);
}
ErrFile MainWindow::saveFile(int index) {
if (index >= 0 && index < hexfiles.count()) {
auto f = hexfiles.at(index);
@ -2273,13 +2273,11 @@ void MainWindow::setEditModeEnabled(bool b, bool isdriver) {
enableDirverLimit(isdriver);
status->setEnabled(b);
if (b) {
on_documentChanged();
on_documentStatusChanged();
} else {
if (!b) {
iSaved->setPixmap(infoSaveg);
iReadWrite->setPixmap(inforwg);
iLocked->setIcon(infoLockg);
iw->setPixmap(infowg);
iOver->setIcon(infoOverg);
lblloc->setText("(0,0)");
lblsellen->setText("0 - 0x0");
@ -2385,6 +2383,11 @@ void MainWindow::on_exportfindresult() {
}
}
void MainWindow::on_wiki() {
QDesktopServices::openUrl(QUrl("https://code.gitlink.org.cn/wingsummer/"
"WingHexExplorer/wiki/%E7%AE%80%E4%BB%8B"));
}
void MainWindow::on_sponsor() {
SponsorDialog d;
d.exec();

View File

@ -76,6 +76,8 @@ class MainWindow : public DMainWindow {
FillZero,
Meta,
MetaEdit,
MetaRedo,
MetaUndo,
DelMeta,
ClsMeta,
BookMark,
@ -132,7 +134,8 @@ private:
ErrFile saveasFile(QString filename, int index);
ErrFile closeCurrentFile(bool force = false);
ErrFile saveCurrentFile();
bool isModified(int index);
bool isSavedFile(int index);
bool isSavedMeta(int index);
void FindFileBytes(int index, QByteArray arr, QList<int> &indices);
void FindAllBytes(QByteArray arr, QList<FindResult> &res);
void gotoFileLine(int index, quint64 offset);
@ -179,9 +182,7 @@ private:
void on_setting_plugin();
void on_gotobar(int pos, bool isline);
void on_locChanged();
void on_documentChanged();
void on_documentSwitched();
void on_documentStatusChanged();
void on_metaundo();
void on_metaredo();
void on_metadata();
@ -194,6 +195,7 @@ private:
void on_restoreLayout();
void on_about();
void on_sponsor();
void on_wiki();
void on_fillnop();
void on_fillzero();
void on_fill();

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

View File

@ -127,413 +127,435 @@
<context>
<name>MainWindow</name>
<message>
<location filename="../dialog/mainwindow.cpp" line="107"/>
<location filename="../dialog/mainwindow.cpp" line="108"/>
<source>File</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="109"/>
<location filename="../dialog/mainwindow.cpp" line="392"/>
<location filename="../dialog/mainwindow.cpp" line="110"/>
<location filename="../dialog/mainwindow.cpp" line="397"/>
<source>New</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="112"/>
<location filename="../dialog/mainwindow.cpp" line="393"/>
<location filename="../dialog/mainwindow.cpp" line="113"/>
<location filename="../dialog/mainwindow.cpp" line="398"/>
<source>OpenF</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="185"/>
<location filename="../dialog/mainwindow.cpp" line="394"/>
<location filename="../dialog/mainwindow.cpp" line="198"/>
<location filename="../dialog/mainwindow.cpp" line="399"/>
<source>OpenD</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="188"/>
<location filename="../dialog/mainwindow.cpp" line="396"/>
<location filename="../dialog/mainwindow.cpp" line="201"/>
<location filename="../dialog/mainwindow.cpp" line="401"/>
<source>Save</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="191"/>
<location filename="../dialog/mainwindow.cpp" line="398"/>
<location filename="../dialog/mainwindow.cpp" line="204"/>
<location filename="../dialog/mainwindow.cpp" line="403"/>
<source>SaveAs</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="194"/>
<location filename="../dialog/mainwindow.cpp" line="400"/>
<location filename="../dialog/mainwindow.cpp" line="207"/>
<location filename="../dialog/mainwindow.cpp" line="405"/>
<source>Export</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="197"/>
<location filename="../dialog/mainwindow.cpp" line="210"/>
<source>SaveSel</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="200"/>
<location filename="../dialog/mainwindow.cpp" line="404"/>
<location filename="../dialog/mainwindow.cpp" line="213"/>
<location filename="../dialog/mainwindow.cpp" line="409"/>
<source>OpenWorkSpace</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="202"/>
<location filename="../dialog/mainwindow.cpp" line="406"/>
<location filename="../dialog/mainwindow.cpp" line="215"/>
<location filename="../dialog/mainwindow.cpp" line="411"/>
<source>SaveWorkSpace</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="205"/>
<location filename="../dialog/mainwindow.cpp" line="409"/>
<location filename="../dialog/mainwindow.cpp" line="218"/>
<location filename="../dialog/mainwindow.cpp" line="414"/>
<source>SaveAsWorkSpace</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="209"/>
<location filename="../dialog/mainwindow.cpp" line="222"/>
<source>Exit</source>
<translation>退</translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="214"/>
<location filename="../dialog/mainwindow.cpp" line="227"/>
<source>Edit</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="216"/>
<location filename="../dialog/mainwindow.cpp" line="328"/>
<location filename="../dialog/mainwindow.cpp" line="412"/>
<location filename="../dialog/mainwindow.cpp" line="229"/>
<location filename="../dialog/mainwindow.cpp" line="283"/>
<location filename="../dialog/mainwindow.cpp" line="417"/>
<location filename="../dialog/mainwindow.cpp" line="477"/>
<source>Undo</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="219"/>
<location filename="../dialog/mainwindow.cpp" line="331"/>
<location filename="../dialog/mainwindow.cpp" line="414"/>
<location filename="../dialog/mainwindow.cpp" line="232"/>
<location filename="../dialog/mainwindow.cpp" line="286"/>
<location filename="../dialog/mainwindow.cpp" line="419"/>
<location filename="../dialog/mainwindow.cpp" line="479"/>
<source>Redo</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="223"/>
<location filename="../dialog/mainwindow.cpp" line="335"/>
<location filename="../dialog/mainwindow.cpp" line="436"/>
<location filename="../dialog/mainwindow.cpp" line="236"/>
<location filename="../dialog/mainwindow.cpp" line="356"/>
<location filename="../dialog/mainwindow.cpp" line="443"/>
<source>Cut</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="226"/>
<location filename="../dialog/mainwindow.cpp" line="337"/>
<location filename="../dialog/mainwindow.cpp" line="436"/>
<location filename="../dialog/mainwindow.cpp" line="239"/>
<location filename="../dialog/mainwindow.cpp" line="358"/>
<location filename="../dialog/mainwindow.cpp" line="444"/>
<source>CutHex</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="229"/>
<location filename="../dialog/mainwindow.cpp" line="339"/>
<location filename="../dialog/mainwindow.cpp" line="438"/>
<location filename="../dialog/mainwindow.cpp" line="242"/>
<location filename="../dialog/mainwindow.cpp" line="360"/>
<location filename="../dialog/mainwindow.cpp" line="449"/>
<source>Copy</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="232"/>
<location filename="../dialog/mainwindow.cpp" line="341"/>
<location filename="../dialog/mainwindow.cpp" line="439"/>
<location filename="../dialog/mainwindow.cpp" line="245"/>
<location filename="../dialog/mainwindow.cpp" line="362"/>
<location filename="../dialog/mainwindow.cpp" line="450"/>
<source>CopyHex</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="235"/>
<location filename="../dialog/mainwindow.cpp" line="343"/>
<location filename="../dialog/mainwindow.cpp" line="440"/>
<location filename="../dialog/mainwindow.cpp" line="248"/>
<location filename="../dialog/mainwindow.cpp" line="364"/>
<location filename="../dialog/mainwindow.cpp" line="455"/>
<source>Paste</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="238"/>
<location filename="../dialog/mainwindow.cpp" line="345"/>
<location filename="../dialog/mainwindow.cpp" line="441"/>
<location filename="../dialog/mainwindow.cpp" line="251"/>
<location filename="../dialog/mainwindow.cpp" line="366"/>
<location filename="../dialog/mainwindow.cpp" line="456"/>
<source>PasteHex</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="241"/>
<location filename="../dialog/mainwindow.cpp" line="347"/>
<location filename="../dialog/mainwindow.cpp" line="443"/>
<location filename="../dialog/mainwindow.cpp" line="254"/>
<location filename="../dialog/mainwindow.cpp" line="368"/>
<location filename="../dialog/mainwindow.cpp" line="460"/>
<source>Delete</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="245"/>
<location filename="../dialog/mainwindow.cpp" line="350"/>
<location filename="../dialog/mainwindow.cpp" line="446"/>
<location filename="../dialog/mainwindow.cpp" line="258"/>
<location filename="../dialog/mainwindow.cpp" line="371"/>
<location filename="../dialog/mainwindow.cpp" line="463"/>
<source>Find</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="248"/>
<location filename="../dialog/mainwindow.cpp" line="352"/>
<location filename="../dialog/mainwindow.cpp" line="448"/>
<location filename="../dialog/mainwindow.cpp" line="261"/>
<location filename="../dialog/mainwindow.cpp" line="373"/>
<location filename="../dialog/mainwindow.cpp" line="465"/>
<source>Goto</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="252"/>
<location filename="../dialog/mainwindow.cpp" line="354"/>
<location filename="../dialog/mainwindow.cpp" line="495"/>
<location filename="../dialog/mainwindow.cpp" line="265"/>
<location filename="../dialog/mainwindow.cpp" line="374"/>
<location filename="../dialog/mainwindow.cpp" line="470"/>
<location filename="../dialog/mainwindow.cpp" line="2303"/>
<source>Fill</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="255"/>
<location filename="../dialog/mainwindow.cpp" line="355"/>
<location filename="../dialog/mainwindow.cpp" line="495"/>
<location filename="../dialog/mainwindow.cpp" line="268"/>
<location filename="../dialog/mainwindow.cpp" line="471"/>
<source>FillNop</source>
<translation> nop</translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="258"/>
<location filename="../dialog/mainwindow.cpp" line="357"/>
<location filename="../dialog/mainwindow.cpp" line="496"/>
<location filename="../dialog/mainwindow.cpp" line="271"/>
<location filename="../dialog/mainwindow.cpp" line="472"/>
<source>FillZero</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="262"/>
<location filename="../dialog/mainwindow.cpp" line="360"/>
<location filename="../dialog/mainwindow.cpp" line="498"/>
<location filename="../dialog/mainwindow.cpp" line="290"/>
<location filename="../dialog/mainwindow.cpp" line="375"/>
<location filename="../dialog/mainwindow.cpp" line="482"/>
<source>MetaData</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="265"/>
<location filename="../dialog/mainwindow.cpp" line="362"/>
<location filename="../dialog/mainwindow.cpp" line="500"/>
<location filename="../dialog/mainwindow.cpp" line="296"/>
<location filename="../dialog/mainwindow.cpp" line="485"/>
<source>DeleteMetaData</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="268"/>
<location filename="../dialog/mainwindow.cpp" line="364"/>
<location filename="../dialog/mainwindow.cpp" line="501"/>
<location filename="../dialog/mainwindow.cpp" line="299"/>
<location filename="../dialog/mainwindow.cpp" line="487"/>
<source>ClearMetaData</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="272"/>
<location filename="../dialog/mainwindow.cpp" line="367"/>
<location filename="../dialog/mainwindow.cpp" line="503"/>
<location filename="../dialog/mainwindow.cpp" line="741"/>
<location filename="../dialog/mainwindow.cpp" line="2212"/>
<location filename="../dialog/mainwindow.cpp" line="2219"/>
<location filename="../dialog/mainwindow.cpp" line="303"/>
<location filename="../dialog/mainwindow.cpp" line="377"/>
<location filename="../dialog/mainwindow.cpp" line="493"/>
<location filename="../dialog/mainwindow.cpp" line="733"/>
<location filename="../dialog/mainwindow.cpp" line="2214"/>
<location filename="../dialog/mainwindow.cpp" line="2221"/>
<source>BookMark</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="275"/>
<location filename="../dialog/mainwindow.cpp" line="369"/>
<location filename="../dialog/mainwindow.cpp" line="504"/>
<location filename="../dialog/mainwindow.cpp" line="306"/>
<location filename="../dialog/mainwindow.cpp" line="494"/>
<source>DeleteBookMark</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="278"/>
<location filename="../dialog/mainwindow.cpp" line="371"/>
<location filename="../dialog/mainwindow.cpp" line="505"/>
<location filename="../dialog/mainwindow.cpp" line="309"/>
<location filename="../dialog/mainwindow.cpp" line="496"/>
<source>ClearBookMark</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="282"/>
<location filename="../dialog/mainwindow.cpp" line="374"/>
<location filename="../dialog/mainwindow.cpp" line="507"/>
<location filename="../dialog/mainwindow.cpp" line="275"/>
<location filename="../dialog/mainwindow.cpp" line="379"/>
<location filename="../dialog/mainwindow.cpp" line="501"/>
<source>Encoding</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="288"/>
<location filename="../dialog/mainwindow.cpp" line="315"/>
<source>Setting</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="290"/>
<location filename="../dialog/mainwindow.cpp" line="510"/>
<location filename="../dialog/mainwindow.cpp" line="317"/>
<location filename="../dialog/mainwindow.cpp" line="504"/>
<source>General</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="292"/>
<location filename="../dialog/mainwindow.cpp" line="300"/>
<location filename="../dialog/mainwindow.cpp" line="319"/>
<location filename="../dialog/mainwindow.cpp" line="327"/>
<source>Plugin</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="295"/>
<location filename="../dialog/mainwindow.cpp" line="322"/>
<source>RestoreLayout</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="302"/>
<location filename="../dialog/mainwindow.cpp" line="329"/>
<source>LoadPlugin</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="309"/>
<location filename="../dialog/mainwindow.cpp" line="336"/>
<source>Author</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="311"/>
<location filename="../dialog/mainwindow.cpp" line="511"/>
<location filename="../dialog/mainwindow.cpp" line="338"/>
<location filename="../dialog/mainwindow.cpp" line="505"/>
<source>About</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="312"/>
<location filename="../dialog/mainwindow.cpp" line="339"/>
<source>Sponsor</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="499"/>
<location filename="../dialog/mainwindow.cpp" line="293"/>
<location filename="../dialog/mainwindow.cpp" line="483"/>
<source>MetaDataEdit</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="551"/>
<location filename="../dialog/mainwindow.cpp" line="281"/>
<source>Mark</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="340"/>
<source>Wiki</source>
<translation> Wiki</translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="545"/>
<source>SetaddressBase</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="554"/>
<location filename="../dialog/mainwindow.cpp" line="548"/>
<source>addressBase</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="554"/>
<location filename="../dialog/mainwindow.cpp" line="548"/>
<source>inputAddressBase</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="562"/>
<location filename="../dialog/mainwindow.cpp" line="556"/>
<source>ErrBaseAddress</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="568"/>
<location filename="../dialog/mainwindow.cpp" line="562"/>
<source>SetColInfo</source>
<translation>/</translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="572"/>
<location filename="../dialog/mainwindow.cpp" line="566"/>
<source>SetHeaderInfo</source>
<translation>/</translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="576"/>
<location filename="../dialog/mainwindow.cpp" line="570"/>
<source>SetAsciiString</source>
<translation>/</translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="581"/>
<location filename="../dialog/mainwindow.cpp" line="575"/>
<source>loc:</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="593"/>
<location filename="../dialog/mainwindow.cpp" line="582"/>
<source>sel:</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="628"/>
<location filename="../dialog/mainwindow.cpp" line="604"/>
<source>InfoSave</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="607"/>
<source>InfoReadWrite</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="609"/>
<source>InfoWorks</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="620"/>
<source>SetLocked</source>
<translation>/</translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="632"/>
<location filename="../dialog/mainwindow.cpp" line="624"/>
<source>SetOver</source>
<translation>/</translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="637"/>
<location filename="../dialog/mainwindow.cpp" line="629"/>
<source>ErrUnLock</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="644"/>
<location filename="../dialog/mainwindow.cpp" line="636"/>
<source>ErrUnOver</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="654"/>
<location filename="../dialog/mainwindow.cpp" line="646"/>
<source>ExportFindResult</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="656"/>
<location filename="../dialog/mainwindow.cpp" line="648"/>
<source>ClearFindResult</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="666"/>
<location filename="../dialog/mainwindow.cpp" line="658"/>
<source>file</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="666"/>
<location filename="../dialog/mainwindow.cpp" line="658"/>
<source>addr</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="666"/>
<location filename="../dialog/mainwindow.cpp" line="658"/>
<source>value</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="689"/>
<location filename="../dialog/mainwindow.cpp" line="681"/>
<source>FindResult</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="696"/>
<location filename="../dialog/mainwindow.cpp" line="688"/>
<source>Log</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="706"/>
<location filename="../dialog/mainwindow.cpp" line="698"/>
<source>LoggerInitFinish</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="1720"/>
<location filename="../dialog/mainwindow.cpp" line="1731"/>
<location filename="../dialog/mainwindow.cpp" line="1743"/>
<location filename="../dialog/mainwindow.cpp" line="1754"/>
<source>CutToClipBoard</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="1723"/>
<location filename="../dialog/mainwindow.cpp" line="1734"/>
<location filename="../dialog/mainwindow.cpp" line="1746"/>
<location filename="../dialog/mainwindow.cpp" line="1757"/>
<source>UnCutToClipBoard</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="1742"/>
<location filename="../dialog/mainwindow.cpp" line="1749"/>
<location filename="../dialog/mainwindow.cpp" line="1765"/>
<location filename="../dialog/mainwindow.cpp" line="1772"/>
<source>CopyToClipBoard</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="1903"/>
<location filename="../dialog/mainwindow.cpp" line="1926"/>
<source>TooMuchFindResult</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="1909"/>
<location filename="../dialog/mainwindow.cpp" line="1932"/>
<source>FindFininishError</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="2137"/>
<location filename="../dialog/mainwindow.cpp" line="2143"/>
<source>NoMetaData</source>
<translation></translation>
</message>
@ -553,18 +575,18 @@
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="2415"/>
<location filename="../dialog/mainwindow.cpp" line="2470"/>
<location filename="../dialog/mainwindow.cpp" line="2420"/>
<location filename="../dialog/mainwindow.cpp" line="2475"/>
<source>ProjectFile (*.wingpro)</source>
<translation> (*.wingpro)</translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="2466"/>
<location filename="../dialog/mainwindow.cpp" line="2471"/>
<source>Warn</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="2466"/>
<location filename="../dialog/mainwindow.cpp" line="2471"/>
<source>PleaseSaveNewFile</source>
<translation></translation>
</message>
@ -573,42 +595,42 @@
<translation type="vanished"></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="713"/>
<location filename="../dialog/mainwindow.cpp" line="705"/>
<source>Value</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="727"/>
<location filename="../dialog/mainwindow.cpp" line="719"/>
<source>Number</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="789"/>
<location filename="../dialog/mainwindow.cpp" line="805"/>
<source>SettingLoading</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="849"/>
<location filename="../dialog/mainwindow.cpp" line="865"/>
<source>PluginLoading</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="863"/>
<location filename="../dialog/mainwindow.cpp" line="879"/>
<source>UnLoadPluginSetting</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="883"/>
<location filename="../dialog/mainwindow.cpp" line="899"/>
<source>MenuName :</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="891"/>
<location filename="../dialog/mainwindow.cpp" line="907"/>
<source>DockWidgetName :</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="1363"/>
<location filename="../dialog/mainwindow.cpp" line="1379"/>
<source>Untitled</source>
<translation></translation>
</message>
@ -627,105 +649,105 @@
<translation type="vanished"> ROOT </translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="1767"/>
<location filename="../dialog/mainwindow.cpp" line="1790"/>
<source>DriverOpenErrorTip</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="1585"/>
<location filename="../dialog/mainwindow.cpp" line="1670"/>
<location filename="../dialog/mainwindow.cpp" line="1685"/>
<location filename="../dialog/mainwindow.cpp" line="1601"/>
<location filename="../dialog/mainwindow.cpp" line="1693"/>
<location filename="../dialog/mainwindow.cpp" line="1708"/>
<source>Error</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="1585"/>
<location filename="../dialog/mainwindow.cpp" line="1601"/>
<source>NoRoot</source>
<translation> root </translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="1666"/>
<location filename="../dialog/mainwindow.cpp" line="2415"/>
<location filename="../dialog/mainwindow.cpp" line="1689"/>
<location filename="../dialog/mainwindow.cpp" line="2420"/>
<source>ChooseFile</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="1670"/>
<location filename="../dialog/mainwindow.cpp" line="1693"/>
<source>FileNotExist</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="1685"/>
<location filename="../dialog/mainwindow.cpp" line="1708"/>
<source>FilePermission</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="1696"/>
<location filename="../dialog/mainwindow.cpp" line="1789"/>
<location filename="../dialog/mainwindow.cpp" line="1719"/>
<location filename="../dialog/mainwindow.cpp" line="1812"/>
<source>Close</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="1697"/>
<location filename="../dialog/mainwindow.cpp" line="1790"/>
<location filename="../dialog/mainwindow.cpp" line="1720"/>
<location filename="../dialog/mainwindow.cpp" line="1813"/>
<source>ConfirmSave</source>
<translation></translation>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="1773"/>
<location filename="../dialog/mainwindow.cpp" line="1796"/>
<source>ChooseExportFile</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="1812"/>
<location filename="../dialog/mainwindow.cpp" line="1831"/>
<location filename="../dialog/mainwindow.cpp" line="2455"/>
<location filename="../dialog/mainwindow.cpp" line="2479"/>
<location filename="../dialog/mainwindow.cpp" line="1835"/>
<location filename="../dialog/mainwindow.cpp" line="1854"/>
<location filename="../dialog/mainwindow.cpp" line="2460"/>
<location filename="../dialog/mainwindow.cpp" line="2484"/>
<source>SaveSuccessfully</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="1815"/>
<location filename="../dialog/mainwindow.cpp" line="1834"/>
<location filename="../dialog/mainwindow.cpp" line="2420"/>
<location filename="../dialog/mainwindow.cpp" line="2458"/>
<location filename="../dialog/mainwindow.cpp" line="2482"/>
<location filename="../dialog/mainwindow.cpp" line="1838"/>
<location filename="../dialog/mainwindow.cpp" line="1857"/>
<location filename="../dialog/mainwindow.cpp" line="2425"/>
<location filename="../dialog/mainwindow.cpp" line="2463"/>
<location filename="../dialog/mainwindow.cpp" line="2487"/>
<source>SaveUnSuccessfully</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="1826"/>
<location filename="../dialog/mainwindow.cpp" line="2023"/>
<location filename="../dialog/mainwindow.cpp" line="1849"/>
<location filename="../dialog/mainwindow.cpp" line="2033"/>
<location filename="../dialog/mainwindow.cpp" line="2361"/>
<location filename="../dialog/mainwindow.cpp" line="2470"/>
<location filename="../dialog/mainwindow.cpp" line="2475"/>
<source>ChooseSaveFile</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="1906"/>
<location filename="../dialog/mainwindow.cpp" line="1929"/>
<source>FindFininish</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="2033"/>
<location filename="../dialog/mainwindow.cpp" line="2043"/>
<source>SaveSelError</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="2046"/>
<location filename="../dialog/mainwindow.cpp" line="2225"/>
<location filename="../dialog/mainwindow.cpp" line="2056"/>
<location filename="../dialog/mainwindow.cpp" line="2227"/>
<source>Addr : 0x%1</source>
<translation>0x%1</translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="2141"/>
<location filename="../dialog/mainwindow.cpp" line="2179"/>
<location filename="../dialog/mainwindow.cpp" line="2147"/>
<location filename="../dialog/mainwindow.cpp" line="2181"/>
<source>NoSelection</source>
<translation></translation>
</message>
<message>
<location filename="../dialog/mainwindow.cpp" line="2212"/>
<location filename="../dialog/mainwindow.cpp" line="2219"/>
<location filename="../dialog/mainwindow.cpp" line="2214"/>
<location filename="../dialog/mainwindow.cpp" line="2221"/>
<source>InputComment</source>
<translation></translation>
</message>

View File

@ -70,6 +70,8 @@
<file>images/unworks.png</file>
<file>images/metaredo.png</file>
<file>images/metaundo.png</file>
<file>images/mark.png</file>
<file>images/wiki.png</file>
</qresource>
<qresource prefix="/resources">
<file>settings.json</file>

View File

@ -36,3 +36,14 @@ v1.2:
14. 增加搜索方向和选区,充分发挥搜索功能
15. 增加以十六进制的形式拷贝、剪切、复制
16. 修复插件禁用时,因未禁用打开插件对话框会导致程序崩溃问题。
v1.3:
1. 工具栏简化,方便使用,菜单整改
2. 增加标记功能的恢复和撤销(注意标记的撤销和恢复和十六进制编辑的是独立的)
3. 增加标记编辑功能
4. 修复标记保存导致再次打开项目零碎标记的 Bug ,这会使得读取 v1.2.0 的工程时的标记数据丢失,不兼容
5. 简化右键菜单,删除不必要的右键
6. 增加项目保存提示
7. 修复第一行背景色标注超出的 Bug
8. 增加遗漏的人性化提示
9. 重构代码,提高效率