diff --git a/Furious/Utility/Settings.py b/Furious/Utility/Settings.py index 36e64a6..298ab6b 100644 --- a/Furious/Utility/Settings.py +++ b/Furious/Utility/Settings.py @@ -78,6 +78,8 @@ SUPPORTED_SETTINGS = ( Settings('Routing', default=BUILTIN_ROUTING[0]), # User VPN Mode Settings('VPNMode', Switch.RANGE), + # Hide editor or not + Settings('HideEditor', Switch.RANGE), # User Custom Routing object Settings('CustomRouting'), # User Configuration diff --git a/Furious/Utility/Translator.py b/Furious/Utility/Translator.py index 2f98cec..bfc5185 100644 --- a/Furious/Utility/Translator.py +++ b/Furious/Utility/Translator.py @@ -685,6 +685,11 @@ TRANSLATION = { 'ZH': '变小', 'TW': '變小', }, + 'Show/Hide Editor': { + 'ES': 'Mostrar/Ocultar Editor', + 'ZH': '显示/隐藏编辑器', + 'TW': '顯示/隱藏編輯器', + }, 'Remark': { 'ES': 'Observación', 'ZH': '别名', diff --git a/Furious/Widget/EditConfiguration.py b/Furious/Widget/EditConfiguration.py index b792e3e..ce156c7 100644 --- a/Furious/Widget/EditConfiguration.py +++ b/Furious/Widget/EditConfiguration.py @@ -516,6 +516,9 @@ class UndoAction(Action): ) def triggeredCallback(self, checked): + if self.parent().editorTab.isHidden(): + return + self.parent().plainTextEdit.undo() @@ -536,6 +539,9 @@ class RedoAction(Action): ) def triggeredCallback(self, checked): + if self.parent().editorTab.isHidden(): + return + self.parent().plainTextEdit.redo() @@ -551,6 +557,9 @@ class CutAction(Action): ) def triggeredCallback(self, checked): + if self.parent().editorTab.isHidden(): + return + self.parent().plainTextEdit.cut() @@ -566,6 +575,9 @@ class CopyAction(Action): ) def triggeredCallback(self, checked): + if self.parent().editorTab.isHidden(): + return + self.parent().plainTextEdit.copy() @@ -581,6 +593,9 @@ class PasteAction(Action): ) def triggeredCallback(self, checked): + if self.parent().editorTab.isHidden(): + return + self.parent().plainTextEdit.paste() @@ -596,6 +611,9 @@ class SelectAllTextAction(Action): ) def triggeredCallback(self, checked): + if self.parent().editorTab.isHidden(): + return + self.parent().plainTextEdit.selectAll() @@ -607,6 +625,9 @@ class IndentAction(Action): self.indentFailure = JSONErrorBox(icon=MessageBox.Icon.Critical) def triggeredCallback(self, checked): + if self.parent().editorTab.isHidden(): + return + choice = self.indentSpinBox.exec() if choice == QDialog.DialogCode.Accepted.value: @@ -682,6 +703,43 @@ class ZoomOutAction(Action): self.parent().plainTextEdit.zoomOut() +class ShowHideEditorAction(Action): + def __init__(self, **kwargs): + super().__init__( + _('Show/Hide Editor'), + icon=bootstrapIcon('layout-text-sidebar-reverse.svg'), + **kwargs, + ) + + # Reference + self.serverTab = self.parent().serverTab + self.editorTab = self.parent().editorTab + + self.setShortcut( + QtCore.QKeyCombination( + QtCore.Qt.KeyboardModifier.ControlModifier, QtCore.Qt.Key.Key_E + ) + ) + + def triggeredCallback(self, checked): + oldSize = self.serverTab.width() + + if APP().HideEditor == Switch.OFF: + self.editorTab.hide() + + APP().HideEditor = Switch.ON_ + else: + self.editorTab.show() + + APP().HideEditor = Switch.OFF + + APP().processEvents() + + newSize = self.serverTab.width() + + APP().ServerWidget.resizeHorizontalHeaderSection(oldSize, newSize) + + def useProxyServerIfPossible(manager, loggerAction): proxyServer = APP().tray.ConnectAction.httpsProxyServer @@ -1280,7 +1338,7 @@ class PingDelayWorker(Worker, QtCore.QObject, QtCore.QRunnable): if result is False or result is None: self.serverObj['delayResult'] = 'Timeout' else: - self.serverObj['delayResult'] = f'{int(result)}ms' + self.serverObj['delayResult'] = f'{round(result)}ms' self.update() @@ -1700,6 +1758,14 @@ class ServerWidget(Translatable, SupportConnectedCallback, TableWidget): return -1 + def resizeHorizontalHeaderSection(self, oldSize, newSize): + factor = newSize / oldSize + + for index in range(self.columnCount()): + self.horizontalHeader().resizeSection( + index, round(self.horizontalHeader().sectionSize(index) * factor) + ) + def flushRow(self, row, server): for column in range(self.columnCount()): oldItem = self.item(row, column) @@ -2375,6 +2441,9 @@ class EditConfigurationWidget(MainWindow): # Note: Set tab text later self.editorTab.addTab(self.serverEditorTabWidget, '') + if APP().HideEditor == Switch.ON_: + self.editorTab.hide() + self.serverWidget = ServerWidget(parent=self) # Buttons @@ -2477,6 +2546,8 @@ class EditConfigurationWidget(MainWindow): 'actions': [ ZoomInAction(parent=self), ZoomOutAction(parent=self), + Seperator(), + ShowHideEditorAction(parent=self), ], } @@ -2618,6 +2689,9 @@ class EditConfigurationWidget(MainWindow): def restoreScrollBarValue(self, index): self.serverWidget.restoreScrollBarValue(index) + def resizeHorizontalHeaderSection(self, oldSize, newSize): + self.serverWidget.resizeHorizontalHeaderSection(oldSize, newSize) + def questionSave(self): # Save current scroll bar value currentFocus = self.currentFocus