From cb7923e4f81f9bb6896b5a7c7c9f31c908a5bf2a Mon Sep 17 00:00:00 2001 From: wingsummer <1326224942@qq.com> Date: Sat, 21 Sep 2024 18:39:55 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=8C=E5=96=84=E8=84=9A=E6=9C=AC?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E7=AA=97=E4=BD=93=EF=BC=9B=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E6=89=93=E5=8C=85=E8=84=9A=E6=9C=AC=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 2 +- lang/zh_CN/credits.md | 3 +- lang/zh_CN/winghex.ts | 181 +++++++++++++++------------- mkinstaller/deb/mkdeb.py | 2 +- mkinstaller/innoSetup/mkinnopak.py | 26 ++-- src/dialog/mainwindow.cpp | 1 + src/dialog/scriptingdialog.cpp | 186 ++++++++++++++++------------- src/dialog/scriptingdialog.h | 10 +- 8 files changed, 233 insertions(+), 178 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 68a998b..f99fda7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,7 @@ set(CMAKE_AUTORCC ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(PROJECT_VERSION 1.0.0~beta) +set(PROJECT_VERSION 1.0.0) find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Network Concurrent PrintSupport LinguistTools) diff --git a/lang/zh_CN/credits.md b/lang/zh_CN/credits.md index 83338a3..b5a7a9b 100644 --- a/lang/zh_CN/credits.md +++ b/lang/zh_CN/credits.md @@ -3,7 +3,8 @@   维护一个好用的工具并不是一个人能做到了,更重要的是大家共同维护,如下是对本仓库代码有贡献的同志,特此感谢: -> 吉位招租 +* oPengLuo (大大的力量) + ## 赞助鸣谢 diff --git a/lang/zh_CN/winghex.ts b/lang/zh_CN/winghex.ts index 1d4f1eb..79f225c 100644 --- a/lang/zh_CN/winghex.ts +++ b/lang/zh_CN/winghex.ts @@ -4293,354 +4293,375 @@ Do you want them to be saved? ScriptingDialog - + ScriptEditor 脚本编辑器 - + + ScriptPermissionDenied + 因权限无法打开脚本 + + + File 文件 - + Edit 编辑 - + Debugger 调试器 - + About 关于 - + Basic 基础 - + New 新建 - + OpenF 打开文件 - + RecentFiles 最近打开 - + Reload 重新加载 - - + + Save 保存 - + SaveAs 另存为 - + General 基本 - + Undo 撤销 - + Redo 恢复 - + Cut 剪切 - + Copy 复制 - + Paste 粘贴 - + Delete 删除 - + Lookup 查询 - + Find 查找 - + Replace 替换 - + Goto 跳转 - + Display 显示 - + Scale 缩放 - + ResetScale 重置缩放 - + Window 窗体 - - + + Editor 编辑器 - + Tools 工具 - + + Layout + 布局 + + + + Fullscreen + 全屏 + + + + RestoreLayout + 恢复默认布局 + + + BreakPoint 断点 - + ToggleBreakPoint 切换断点 - + AddBreakPoint 添加断点 - + Settings 设置 - + Local 本地 - + Global 全局 - + Variables 变量 - + BreakPoints 断点 - + ConsoleOutput 输出 - + StackTrace 栈跟踪 - + Watch 监视 - - - - - - + + + + + + Error 错误 - + Too much opened files 打开的文件过多,无法继续操作! - - + + ChooseFile 选择文件 - - - + + + FilePermission 因文件权限无法继续! - + ReloadSuccessfully 文件重新加载成功! - + ReloadUnSuccessfully 文件重新加载失败! - + ChooseSaveFile 请选择保存文件路径: - - + + SaveSuccessfully 保存成功! - + SaveUnSuccessfully 保存失败! - - + + CannotSave2RunScript 无法保存,故无法继续运行脚本。 - + + ScriptStillRunning 脚本仍在运行,你确定要退出吗? - + View 视图 - + Debug 调试 - + Run 运行 - + RunWithDbg 调试运行 - + Pause 暂停 - + Continue 继续 - + Stop 停止 - + Restart 重启 - + StepInto 单步步入 - + StepOver 单步步过 - + StepOut 单步跳出 - + RemoveBreakPoint 删除断点 - + Info 信息 - + Software 软件 - + Sponsor 赞助 - + Wiki 网页 Wiki - + AboutQT 关于 QT diff --git a/mkinstaller/deb/mkdeb.py b/mkinstaller/deb/mkdeb.py index ecc8cc1..046b5ba 100755 --- a/mkinstaller/deb/mkdeb.py +++ b/mkinstaller/deb/mkdeb.py @@ -89,7 +89,7 @@ def main(): package_name = "WingHexExplorer2" architecture = detect_architecture() - depends = "" + depends = r"${shlibs:Depends}, ${misc:Depends}" # start parsing build directory projectdeb = os.path.abspath(args.folder) diff --git a/mkinstaller/innoSetup/mkinnopak.py b/mkinstaller/innoSetup/mkinnopak.py index 410e947..f9c2b9a 100644 --- a/mkinstaller/innoSetup/mkinnopak.py +++ b/mkinstaller/innoSetup/mkinnopak.py @@ -45,6 +45,8 @@ def main(): "folder", help="A folder that has contained the binary build") parser.add_argument("-c", "--cc", help="where ISCC.exe locates", default="C:\Program Files (x86)\Inno Setup 6\ISCC.exe") parser.add_argument("-o", "--output", help="where to put the installer") + parser.add_argument("--build", action='store_false') + args = parser.parse_args() # checking build toolkits @@ -267,17 +269,19 @@ Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChang with codecs.open(script_src,'w', "utf-8-sig") as iss: iss.write(iss_content) - print(Fore.GREEN + ">> Copying finished, running ISCC building..." + Style.RESET_ALL) - - pak_out = "" - if args.output is None: - pak_out = exeDebPath - else: - pak_out = args.output - - ret = run_command_interactive([args.cc, f'/O{pak_out}', script_src]) - exit(ret) - + if(args.build): + print(Fore.GREEN + ">> Copying finished, running ISCC building..." + Style.RESET_ALL) + + pak_out = "" + if args.output is None: + pak_out = exeDebPath + else: + pak_out = args.output + + ret = run_command_interactive([args.cc, f'/O{pak_out}', script_src]) + exit(ret) + + exit(0) if __name__ == "__main__": main() diff --git a/src/dialog/mainwindow.cpp b/src/dialog/mainwindow.cpp index e143e8b..f633428 100644 --- a/src/dialog/mainwindow.cpp +++ b/src/dialog/mainwindow.cpp @@ -2761,6 +2761,7 @@ void MainWindow::closeEvent(QCloseEvent *event) { auto &set = SettingManager::instance(); set.setDockLayout(m_dock->saveState()); + m_scriptDialog->saveDockLayout(); set.setRecentFiles(m_recentmanager->saveRecent()); set.save(); diff --git a/src/dialog/scriptingdialog.cpp b/src/dialog/scriptingdialog.cpp index 79f7741..ec07d1a 100644 --- a/src/dialog/scriptingdialog.cpp +++ b/src/dialog/scriptingdialog.cpp @@ -51,6 +51,7 @@ ScriptingDialog::ScriptingDialog(QWidget *parent) layout->addWidget(q_check_ptr(m_ribbon)); buildUpDockSystem(cw); + _defaultLayout = m_dock->saveState(); layout->addWidget(m_dock, 1); m_status = new QStatusBar(this); @@ -92,6 +93,10 @@ ScriptingDialog::ScriptingDialog(QWidget *parent) this->setWindowIcon(ICONRES(QStringLiteral("script"))); this->setMinimumSize(800, 600); + // load saved docking layout + auto &set = SettingManager::instance(); + m_dock->restoreState(set.scriptDockLayout()); + this->setUpdatesEnabled(true); } @@ -104,6 +109,8 @@ void ScriptingDialog::initConsole() { this->updateRunDebugMode(); m_callstack->updateData({}); + m_varshow->updateData({}); + m_gvarshow->updateData({}); // clean up if (_lastCurLine.first.isEmpty() || _lastCurLine.second < 0) { @@ -134,7 +141,11 @@ void ScriptingDialog::initConsole() { Q_ASSERT(dbg); connect(dbg, &asDebugger::onAdjustBreakPointLine, this, [=](const asDebugger::BreakPoint &old, int newLineNr) { - + auto editor = QCodeEdit::managed(old.name); + if (editor) { + removeBreakPoint(editor, old.lineNbr - 1); + addBreakPoint(editor, newLineNr - 1); + } }); connect(dbg, &asDebugger::onPullVariables, this, [=](const QVector &globalvars, @@ -158,7 +169,9 @@ void ScriptingDialog::initConsole() { e->setFocus(); e->raise(); } else { - // TODO error permission + WingMessageBox::critical(this, this->windowTitle(), + tr("ScriptPermissionDenied")); + return; } } @@ -358,6 +371,14 @@ RibbonTabContent *ScriptingDialog::buildViewPage(RibbonTabContent *tab) { new QMenu(this))); } + { + auto pannel = tab->addGroup(tr("Layout")); + addPannelAction(pannel, QStringLiteral("fullscreen"), tr("Fullscreen"), + &ScriptingDialog::on_fullScreen); + addPannelAction(pannel, QStringLiteral("layout"), tr("RestoreLayout"), + &ScriptingDialog::on_restoreLayout); + } + return tab; } @@ -591,12 +612,13 @@ void ScriptingDialog::buildUpDockSystem(QWidget *container) { splitter->setSizes({height() - bottomHeight, bottomHeight}); } - buildUpStackShowDock(m_dock, ads::CenterDockWidgetArea, bottomArea); + buildUpStackShowDock(m_dock, ads::RightDockWidgetArea, bottomArea); + auto rightArea = buildUpBreakpointShowDock(m_dock, ads::RightDockWidgetArea, + m_editorViewArea); + buildUpVarShowDock(m_dock, ads::CenterDockWidgetArea, rightArea); - // TODO - buildUpBreakpointShowDock(m_dock, ads::RightDockWidgetArea); - buildUpVarShowDock(m_dock, ads::RightDockWidgetArea); - buildUpWatchDock(m_dock, ads::CenterDockWidgetArea); + // not avaliable for v1.0.0 + // buildUpWatchDock(m_dock, ads::CenterDockWidgetArea, rightArea); // set the first tab visible for (auto &item : m_dock->openedDockAreas()) { @@ -732,7 +754,7 @@ void ScriptingDialog::swapEditor(ScriptEditor *old, ScriptEditor *cur) { connect(cur, &ScriptEditor::onToggleMark, this, [=](int lineIndex) { auto editor = qobject_cast(sender()); Q_ASSERT(editor); - toggleBreakPoint(editor, lineIndex); + toggleBreakPoint(editor->editor(), lineIndex); }); connect(editor, &QEditor::copyAvailable, m_Tbtneditors.value(ToolButtonIndex::COPY_ACTION), @@ -865,18 +887,70 @@ void ScriptingDialog::startDebugScript(const QString &fileName) { updateRunDebugMode(); } -void ScriptingDialog::toggleBreakPoint(ScriptEditor *editor, int lineIndex) { +void ScriptingDialog::addBreakPoint(QEditor *editor, int lineIndex) { + Q_ASSERT(editor); + auto bpMark = m_symID.value(Symbols::BreakPoint); + auto curLine = lineIndex + 1; + + if (m_consoleout->machine()->isInDebugMode()) { + auto line = editor->document()->line(lineIndex); + auto hitCur = m_symID.value(Symbols::DbgRunHitBreakPoint); + auto curSym = m_symID.value(Symbols::DbgRunCurrentLine); + + auto dbg = m_consoleout->machine()->debugger(); + if (line.hasMark(curSym)) { + line.removeMark(curSym); + line.addMark(hitCur); + dbg->addFileBreakPoint(editor->fileName(), curLine); + } else { + if (!line.hasMark(bpMark)) { + line.addMark(bpMark); + dbg->addFileBreakPoint(editor->fileName(), curLine); + } + } + } else { + auto line = editor->document()->line(lineIndex); + if (!line.hasMark(bpMark)) { + line.addMark(bpMark); + } + } +} + +void ScriptingDialog::removeBreakPoint(QEditor *editor, int lineIndex) { + Q_ASSERT(editor); + auto bpMark = m_symID.value(Symbols::BreakPoint); + auto curLine = lineIndex + 1; + + if (m_consoleout->machine()->isInDebugMode()) { + auto line = editor->document()->line(lineIndex); + auto hitCur = m_symID.value(Symbols::DbgRunHitBreakPoint); + auto curSym = m_symID.value(Symbols::DbgRunCurrentLine); + + auto dbg = m_consoleout->machine()->debugger(); + if (line.hasMark(hitCur)) { + line.removeMark(hitCur); + line.addMark(curSym); + dbg->removeFileBreakPoint(editor->fileName(), curLine); + } else { + if (line.hasMark(bpMark)) { + line.removeMark(bpMark); + dbg->removeFileBreakPoint(editor->fileName(), curLine); + } + } + } else { + auto line = editor->document()->line(lineIndex); + if (line.hasMark(bpMark)) { + line.removeMark(bpMark); + } + } +} + +void ScriptingDialog::toggleBreakPoint(QEditor *editor, int lineIndex) { Q_ASSERT(editor); auto curLine = lineIndex + 1; -#ifdef Q_OS_WIN - if (m_consoleout->machine()->isInDebugMode() && - editor->fileName().compare(_lastCurLine.first, Qt::CaseInsensitive) == 0 -#else - if (editor->fileName() == _lastCurLine.first -#endif - && _lastCurLine.second == curLine) { - auto line = editor->editor()->document()->line(lineIndex); + if (m_consoleout->machine()->isInDebugMode()) { + auto line = editor->document()->line(lineIndex); auto bpMark = m_symID.value(Symbols::BreakPoint); auto hitCur = m_symID.value(Symbols::DbgRunHitBreakPoint); auto curSym = m_symID.value(Symbols::DbgRunCurrentLine); @@ -1108,6 +1182,12 @@ void ScriptingDialog::on_wiki() { "doc_script.html"))); } +void ScriptingDialog::on_fullScreen() { this->showFullScreen(); } + +void ScriptingDialog::on_restoreLayout() { + m_dock->restoreState(_defaultLayout); +} + void ScriptingDialog::on_runscript() { auto editor = currentEditor(); if (editor) { @@ -1164,84 +1244,24 @@ void ScriptingDialog::on_stepoverscript() { void ScriptingDialog::on_togglebreakpoint() { auto editor = currentEditor(); if (editor) { - toggleBreakPoint(editor, editor->editor()->cursor().lineNumber()); + auto e = editor->editor(); + toggleBreakPoint(e, e->cursor().lineNumber()); } } void ScriptingDialog::on_addbreakpoint() { auto editor = currentEditor(); if (editor) { - auto curLineInd = editor->editor()->cursor().lineNumber(); - auto bpMark = m_symID.value(Symbols::BreakPoint); - -#ifdef Q_OS_WIN - if (m_consoleout->machine()->isInDebugMode() && - editor->fileName().compare(_lastCurLine.first, - Qt::CaseInsensitive) == 0 -#else - if (editor->fileName() == _lastCurLine.first -#endif - && _lastCurLine.second == curLineInd + 1) { - auto line = editor->editor()->document()->line(curLineInd); - auto hitCur = m_symID.value(Symbols::DbgRunHitBreakPoint); - auto curSym = m_symID.value(Symbols::DbgRunCurrentLine); - - auto dbg = m_consoleout->machine()->debugger(); - if (line.hasMark(curSym)) { - line.removeMark(curSym); - line.addMark(hitCur); - dbg->addFileBreakPoint(editor->fileName(), curLineInd + 1); - } else { - if (!line.hasMark(bpMark)) { - line.addMark(bpMark); - dbg->addFileBreakPoint(editor->fileName(), curLineInd + 1); - } - } - } else { - auto line = editor->editor()->document()->line(curLineInd); - if (!line.hasMark(bpMark)) { - line.addMark(bpMark); - } - } + auto e = editor->editor(); + addBreakPoint(e, e->cursor().lineNumber()); } } void ScriptingDialog::on_removebreakpoint() { auto editor = currentEditor(); if (editor) { - auto curLineInd = editor->editor()->cursor().lineNumber(); - auto bpMark = m_symID.value(Symbols::BreakPoint); - -#ifdef Q_OS_WIN - if (m_consoleout->machine()->isInDebugMode() && - editor->fileName().compare(_lastCurLine.first, - Qt::CaseInsensitive) == 0 -#else - if (editor->fileName() == _lastCurLine.first -#endif - && _lastCurLine.second == curLineInd + 1) { - auto line = editor->editor()->document()->line(curLineInd); - auto hitCur = m_symID.value(Symbols::DbgRunHitBreakPoint); - auto curSym = m_symID.value(Symbols::DbgRunCurrentLine); - - auto dbg = m_consoleout->machine()->debugger(); - if (line.hasMark(hitCur)) { - line.removeMark(hitCur); - line.addMark(curSym); - dbg->removeFileBreakPoint(editor->fileName(), curLineInd + 1); - } else { - if (line.hasMark(bpMark)) { - line.removeMark(bpMark); - dbg->removeFileBreakPoint(editor->fileName(), - curLineInd + 1); - } - } - } else { - auto line = editor->editor()->document()->line(curLineInd); - if (line.hasMark(bpMark)) { - line.removeMark(bpMark); - } - } + auto e = editor->editor(); + removeBreakPoint(e, e->cursor().lineNumber()); } } diff --git a/src/dialog/scriptingdialog.h b/src/dialog/scriptingdialog.h index 9a1d259..a8b8b56 100644 --- a/src/dialog/scriptingdialog.h +++ b/src/dialog/scriptingdialog.h @@ -179,7 +179,11 @@ private: void startDebugScript(const QString &fileName); - void toggleBreakPoint(ScriptEditor *editor, int lineIndex); + void addBreakPoint(QEditor *editor, int lineIndex); + + void removeBreakPoint(QEditor *editor, int lineIndex); + + void toggleBreakPoint(QEditor *editor, int lineIndex); private slots: void on_newfile(); @@ -205,6 +209,9 @@ private slots: void on_sponsor(); void on_wiki(); + void on_fullScreen(); + void on_restoreLayout(); + void on_runscript(); void on_rundbgscript(); void on_pausescript(); @@ -226,6 +233,7 @@ private: ads::CDockManager *m_dock = nullptr; ads::CDockAreaWidget *m_editorViewArea = nullptr; QLanguageFactory *m_language = nullptr; + QByteArray _defaultLayout; ScriptEditor *m_curEditor = nullptr; QList m_editStateWidgets;