diff --git a/lang/zh_CN/winghex_zh_CN.ts b/lang/zh_CN/winghex_zh_CN.ts index 13778e9..6593daf 100644 --- a/lang/zh_CN/winghex_zh_CN.ts +++ b/lang/zh_CN/winghex_zh_CN.ts @@ -5096,12 +5096,12 @@ ShowTextDialog - + General 基本 - + Copy 复制 @@ -5127,38 +5127,37 @@ - - + Loading... 加载中... - + Edit 编辑 - + Find 查找 - + Goto 跳转 - + Encoding 编码 - + UpdateDefs 更新高亮定义 - + CopyToClipBoard 数据已拷贝到粘贴板 diff --git a/lang/zh_TW/winghex_zh_TW.ts b/lang/zh_TW/winghex_zh_TW.ts index 68d5360..663ddd0 100644 --- a/lang/zh_TW/winghex_zh_TW.ts +++ b/lang/zh_TW/winghex_zh_TW.ts @@ -5096,12 +5096,12 @@ ShowTextDialog - + General 基本 - + Copy 複製 @@ -5127,38 +5127,37 @@ - - + Loading... 加載中... - + Edit 編輯 - + Find 查找 - + Goto 跳轉 - + Encoding 編碼 - + UpdateDefs 更新高亮定義 - + CopyToClipBoard 數據已拷貝到粘貼板 diff --git a/mkinstaller/innoSetup/mkinnopak.py b/mkinstaller/innoSetup/mkinnopak.py index 03514e3..352d643 100644 --- a/mkinstaller/innoSetup/mkinnopak.py +++ b/mkinstaller/innoSetup/mkinnopak.py @@ -41,7 +41,7 @@ def run_command_interactive(command): def main(): parser = argparse.ArgumentParser( - prog="mkdeb.py", description="A deb installer maker for WingHexExplorer2") + prog="mkinnopak.py", description="A InnoSetup installer maker for WingHexExplorer2") parser.add_argument( "folder", help="A folder that has contained the binary build", type=str @@ -275,7 +275,7 @@ Source: {#MyAppExePath}; DestDir: "{app}"; Flags: ignoreversion iss_content += r'Root: HKCR; Subkey: "WingHexExplorer2\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#MyAppExeName},1"; Flags: noerror uninsdeletevalue; ' + '\n' iss_content += r'Root: HKCR; Subkey: "WingHexExplorer2\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#MyAppExeName}"" ""%1""" ;Flags: noerror uninsdeletevalue; ' + '\n' - iss_content += """ + iss_content += r""" [Icons] Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}" diff --git a/src/class/wingconsolehighligher.cpp b/src/class/wingconsolehighligher.cpp index 30ac9cc..7eb1646 100644 --- a/src/class/wingconsolehighligher.cpp +++ b/src/class/wingconsolehighligher.cpp @@ -1,6 +1,8 @@ #include "wingconsolehighligher.h" #include +#include +#include WingConsoleHighligher::WingConsoleHighligher(QTextDocument *document) : WingSyntaxHighlighter(document) {} @@ -18,11 +20,15 @@ void WingConsoleHighligher::applyFormat( auto off = offsetv.toInt(&b); if (b) { if (off < 0) { - // don't highlight - return; + if (off == -2) { + WingSyntaxHighlighter::applyFormat( + offset, length, KSyntaxHighlighting::Format()); + } } else { if (offset <= off) { auto div = off - offset; + WingSyntaxHighlighter::applyFormat( + offset, div, KSyntaxHighlighting::Format()); auto rest = length - div; if (rest <= 0) { return; diff --git a/src/control/editorview.cpp b/src/control/editorview.cpp index 4b008e9..e05b0ab 100644 --- a/src/control/editorview.cpp +++ b/src/control/editorview.cpp @@ -2033,6 +2033,19 @@ EditorView *EditorView::clone() { this->m_cloneChildren[this->m_cloneChildren.indexOf(ev)] = nullptr; }); + connect(ev, &EditorView::sigOnCutFile, this, &EditorView::sigOnCutFile); + connect(ev, &EditorView::sigOnCutHex, this, &EditorView::sigOnCutHex); + connect(ev, &EditorView::sigOnCopyFile, this, &EditorView::sigOnCopyFile); + connect(ev, &EditorView::sigOnCopyHex, this, &EditorView::sigOnCopyHex); + connect(ev, &EditorView::sigOnPasteFile, this, &EditorView::sigOnPasteFile); + connect(ev, &EditorView::sigOnPasteHex, this, &EditorView::sigOnPasteHex); + connect(ev, &EditorView::sigOnDelete, this, &EditorView::sigOnDelete); + connect(ev, &EditorView::sigOnFindFile, this, &EditorView::sigOnFindFile); + connect(ev, &EditorView::sigOnGoToLine, this, &EditorView::sigOnGoToLine); + connect(ev, &EditorView::sigOnFill, this, &EditorView::sigOnFill); + connect(ev, &EditorView::sigOnMetadata, this, &EditorView::sigOnMetadata); + connect(ev, &EditorView::sigOnBookMark, this, &EditorView::sigOnBookMark); + auto doc = this->m_hex->document(); ev->m_cloneParent = this; diff --git a/src/control/editorview.h b/src/control/editorview.h index 811eaa1..e382811 100644 --- a/src/control/editorview.h +++ b/src/control/editorview.h @@ -540,8 +540,6 @@ private: void connectDocSavedFlag(EditorView *editor); signals: - void sigFileSaved(QString filename, QString oldFileName); - void sigOnCutFile(); void sigOnCutHex(); void sigOnCopyFile(); diff --git a/src/control/scriptingconsole.cpp b/src/control/scriptingconsole.cpp index c2f4cf8..675e03b 100644 --- a/src/control/scriptingconsole.cpp +++ b/src/control/scriptingconsole.cpp @@ -68,7 +68,7 @@ void ScriptingConsole::handleReturnKey() { // start new block appendPlainText(QString()); - dontHighlightLastLine(); + dontHighlightLastLine(true); setMode(Output); QTextCursor textCursor = this->textCursor(); diff --git a/src/control/scriptingconsolebase.cpp b/src/control/scriptingconsolebase.cpp index 9594c72..d537785 100644 --- a/src/control/scriptingconsolebase.cpp +++ b/src/control/scriptingconsolebase.cpp @@ -20,17 +20,17 @@ ScriptingConsoleBase::ScriptingConsoleBase(QWidget *parent) void ScriptingConsoleBase::stdOut(const QString &str) { writeStdOut(str); - dontHighlightLastLine(); + dontHighlightLastLine(true); } void ScriptingConsoleBase::stdErr(const QString &str) { writeStdErr(str); - dontHighlightLastLine(); + dontHighlightLastLine(false); } void ScriptingConsoleBase::stdWarn(const QString &str) { write(str, _warnCharFmt); - dontHighlightLastLine(); + dontHighlightLastLine(false); } void ScriptingConsoleBase::newLine() { _s << Qt::endl; } @@ -65,14 +65,22 @@ void ScriptingConsoleBase::appendCommandPrompt(bool storeOnly) { dontHighlightLastOffset(commandPrompt.length()); } -void ScriptingConsoleBase::dontHighlightLastLine() { - dontHighlightLastOffset(-1); +void ScriptingConsoleBase::dontHighlightLastLine(bool followTheme) { + dontHighlightLastOffset(-1, followTheme); } -void ScriptingConsoleBase::dontHighlightLastOffset(int offset) { +void ScriptingConsoleBase::dontHighlightLastOffset(int offset, + bool followTheme) { auto blk = document()->lastBlock(); auto hl = highlighter(); - hl->setProperty(blk, "cmdoff", offset); + if (offset < 0) { + offset = -1; + } + if (offset == -1 && followTheme) { + hl->setProperty(blk, "cmdoff", -2); + } else { + hl->setProperty(blk, "cmdoff", offset); + } hl->rehighlightBlock(blk); } diff --git a/src/control/scriptingconsolebase.h b/src/control/scriptingconsolebase.h index f02a5b4..236f6be 100644 --- a/src/control/scriptingconsolebase.h +++ b/src/control/scriptingconsolebase.h @@ -26,9 +26,9 @@ public slots: void appendCommandPrompt(bool storeOnly = false); protected: - void dontHighlightLastLine(); + void dontHighlightLastLine(bool followTheme); - void dontHighlightLastOffset(int offset); + void dontHighlightLastOffset(int offset, bool followTheme = true); private: QTextStream _s; diff --git a/src/dialog/showtextdialog.cpp b/src/dialog/showtextdialog.cpp index c32c94a..ff2df4a 100644 --- a/src/dialog/showtextdialog.cpp +++ b/src/dialog/showtextdialog.cpp @@ -139,38 +139,7 @@ void ShowTextDialog::load(QHexBuffer *buffer, const QString &mime, } this->buffer = buffer->read(qsizetype(0), buffer->length()); - m_cancelButton->setVisible(true); - m_continue = true; - - auto e = Utilities::realEncodingName(enc); - auto en = QStringConverter::encodingForName(e.toUtf8()); - QTextStream ss(this->buffer); - ss.setEncoding(en.value_or(QStringConverter::Utf8)); // fallback to UTF-8 - ss.setAutoDetectUnicode(false); - auto total = this->buffer.size(); - m_edit->clear(); - m_edit->setEnabled(false); - while (m_continue && !ss.atEnd()) { - auto p = ss.readLine(); - m_edit->appendPlainText(p); - m_edit->verticalScrollBar()->setValue(0); - m_status->showMessage( - tr("Loading...") + QStringLiteral(" (") + - QString::number(100.0 * ss.pos() / total, 'g', 3) + - QStringLiteral("%)")); - qApp->processEvents(); - } - - m_cancelButton->hide(); - m_syntaxButton->setVisible(true); - m_edit->setEnabled(true); - m_continue = false; - - auto cursor = m_edit->textCursor(); - cursor.setPosition(0); - m_edit->setTextCursor(cursor); - m_status->showMessage(enc); - + setEncoding(enc); setSyntax(WingCodeEdit::syntaxRepo().definitionForMimeType(mime)); } @@ -224,9 +193,7 @@ void ShowTextDialog::on_encoding() { EncodingDialog d; if (d.exec()) { auto res = d.getResult(); - m_status->showMessage(tr("Loading...")); - m_edit->setPlainText(Utilities::decodingString(this->buffer, res)); - m_status->showMessage(res); + setEncoding(res); } } @@ -239,8 +206,43 @@ void ShowTextDialog::on_updateDefs() { downloadDialog->activateWindow(); } +void ShowTextDialog::setEncoding(const QString &enc) { + m_cancelButton->setVisible(true); + m_continue = true; + + auto e = Utilities::realEncodingName(enc); + auto en = QStringConverter::encodingForName(e.toUtf8()); + QTextStream ss(this->buffer); + ss.setEncoding(en.value_or(QStringConverter::Utf8)); // fallback to UTF-8 + ss.setAutoDetectUnicode(false); + auto total = this->buffer.size(); + m_edit->clear(); + m_edit->setEnabled(false); + while (m_continue && !ss.atEnd()) { + auto p = ss.readLine(); + m_edit->appendPlainText(p); + m_edit->verticalScrollBar()->setValue(0); + m_status->showMessage( + tr("Loading...") + QStringLiteral(" (") + + QString::number(100.0 * ss.pos() / total, 'g', 3) + + QStringLiteral("%)")); + qApp->processEvents(); + } + + m_cancelButton->hide(); + m_syntaxButton->setVisible(true); + m_edit->setEnabled(true); + m_continue = false; + + auto cursor = m_edit->textCursor(); + cursor.setPosition(0); + m_edit->setTextCursor(cursor); + m_status->showMessage(enc); +} + void ShowTextDialog::closeEvent(QCloseEvent *event) { m_continue = false; m_edit->clear(); + buffer.clear(); FramelessMainWindow::closeEvent(event); } diff --git a/src/dialog/showtextdialog.h b/src/dialog/showtextdialog.h index 3cb0e28..53767a9 100644 --- a/src/dialog/showtextdialog.h +++ b/src/dialog/showtextdialog.h @@ -121,6 +121,9 @@ private slots: void on_encoding(); void on_updateDefs(); +private: + void setEncoding(const QString &enc); + // QWidget interface protected: virtual void closeEvent(QCloseEvent *event) override;