diff --git a/stable.toml b/dev.toml similarity index 88% rename from stable.toml rename to dev.toml index 7d2b35a..bbb181c 100644 --- a/stable.toml +++ b/dev.toml @@ -1,12 +1,12 @@ -# Rename to build stable version -# This is stable version +# Rename to build dev version +# This is dev version [build-system] -requires = ["setuptools>=61.0"] +requires = ["setuptools"] build-backend = "setuptools.build_meta" [project] -name = "je_editor" -version = "0.0.158" +name = "je_editor_dev" +version = "0.0.167" authors = [ { name = "JE-Chen", email = "jechenmailman@gmail.com" }, ] @@ -26,7 +26,6 @@ classifiers = [ "Operating System :: OS Independent" ] - [project.urls] Homepage = "https://github.com/JE-Chen/je_editor" Documentation = "https://je-editor.readthedocs.io/en/latest/" diff --git a/je_editor/pyside_ui/browser/browser_download_window.py b/je_editor/pyside_ui/browser/browser_download_window.py index dfd097b..9c12fa3 100644 --- a/je_editor/pyside_ui/browser/browser_download_window.py +++ b/je_editor/pyside_ui/browser/browser_download_window.py @@ -1,3 +1,4 @@ +from PySide6.QtCore import Qt from PySide6.QtWebEngineCore import QWebEngineDownloadRequest from PySide6.QtWidgets import QWidget, QBoxLayout, QPlainTextEdit @@ -8,6 +9,7 @@ class BrowserDownloadWindow(QWidget): def __init__(self, download_instance: QWebEngineDownloadRequest): super().__init__() + self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose) self.box_layout = QBoxLayout(QBoxLayout.Direction.TopToBottom) self.show_download_detail_plaintext = QPlainTextEdit() self.show_download_detail_plaintext.setReadOnly(True) diff --git a/je_editor/pyside_ui/browser/browser_serach_lineedit.py b/je_editor/pyside_ui/browser/browser_serach_lineedit.py index 26a2d5f..1b33d12 100644 --- a/je_editor/pyside_ui/browser/browser_serach_lineedit.py +++ b/je_editor/pyside_ui/browser/browser_serach_lineedit.py @@ -13,6 +13,7 @@ class BrowserLineSearch(QLineEdit): def __init__(self, browser_widget: JEBrowser): super().__init__() + self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose) self.browser = browser_widget def keyPressEvent(self, event) -> None: diff --git a/je_editor/pyside_ui/browser/browser_view.py b/je_editor/pyside_ui/browser/browser_view.py index a1eb084..a9b5c93 100644 --- a/je_editor/pyside_ui/browser/browser_view.py +++ b/je_editor/pyside_ui/browser/browser_view.py @@ -1,5 +1,6 @@ from typing import List +from PySide6.QtCore import Qt from PySide6.QtWebEngineCore import QWebEngineDownloadRequest from PySide6.QtWebEngineWidgets import QWebEngineView @@ -14,6 +15,7 @@ def __init__(self, start_url: str = "https://www.google.com/"): self.download_list: List[QWebEngineDownloadRequest] = list() self.download_window_list: List[BrowserDownloadWindow] = list() self.page().profile().downloadRequested.connect(self.download_file) + self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose) def download_file(self, download_instance: QWebEngineDownloadRequest): self.download_list.append(download_instance) diff --git a/je_editor/pyside_ui/browser/browser_widget.py b/je_editor/pyside_ui/browser/browser_widget.py index c94364d..5c61ff2 100644 --- a/je_editor/pyside_ui/browser/browser_widget.py +++ b/je_editor/pyside_ui/browser/browser_widget.py @@ -1,4 +1,4 @@ -from PySide6.QtGui import QAction +from PySide6.QtGui import QAction, Qt from PySide6.QtWidgets import QWidget, QGridLayout, QPushButton, QInputDialog from je_editor.pyside_ui.browser.browser_serach_lineedit import BrowserLineSearch @@ -14,6 +14,7 @@ def __init__(self, start_url: str = "https://www.google.com/", # Browser setting self.browser = BrowserView(start_url) self.search_prefix = search_prefix + self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose) # Top bar self.back_button = QPushButton(language_wrapper.language_word_dict.get("browser_back_button")) self.back_button.clicked.connect(self.browser.back) diff --git a/je_editor/pyside_ui/code/shell_process/shell_exec.py b/je_editor/pyside_ui/code/shell_process/shell_exec.py index 0d65650..4506ec3 100644 --- a/je_editor/pyside_ui/code/shell_process/shell_exec.py +++ b/je_editor/pyside_ui/code/shell_process/shell_exec.py @@ -83,6 +83,7 @@ def exec_shell(self, shell_command: [str, list]) -> None: args=args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, + stdin=subprocess.PIPE, shell=True, ) self.still_run_shell = True diff --git a/je_editor/pyside_ui/main_ui/editor/debugger_input.py b/je_editor/pyside_ui/main_ui/editor/debugger_input.py deleted file mode 100644 index 35c248f..0000000 --- a/je_editor/pyside_ui/main_ui/editor/debugger_input.py +++ /dev/null @@ -1,37 +0,0 @@ -from __future__ import annotations - -from typing import TYPE_CHECKING - -from PySide6.QtWidgets import QWidget, QLineEdit, QBoxLayout, QPushButton, QHBoxLayout - -if TYPE_CHECKING: - from je_editor.pyside_ui.main_ui.main_editor import EditorWidget - -from je_editor.utils.multi_language.multi_language_wrapper import language_wrapper - - -class DebuggerInput(QWidget): - - def __init__(self, main_window: EditorWidget): - super().__init__() - self.main_window = main_window - self.main_window.code_difference_result.setCurrentWidget(self.main_window.debugger_result) - self.box_layout = QBoxLayout(QBoxLayout.Direction.TopToBottom) - self.command_input = QLineEdit() - self.send_command_button = QPushButton() - self.send_command_button.setText(language_wrapper.language_word_dict.get("debugger_input_send_command")) - self.send_command_button.clicked.connect(self.send_command) - self.box_h_layout = QHBoxLayout() - self.box_h_layout.addWidget(self.send_command_button) - self.box_layout.addWidget(self.command_input) - self.box_layout.addLayout(self.box_h_layout) - self.setWindowTitle(language_wrapper.language_word_dict.get("editor_debugger")) - self.setLayout(self.box_layout) - - def send_command(self): - if self.main_window.exec_python_debugger is not None: - process_stdin = self.main_window.exec_python_debugger.process.stdin - if process_stdin is not None: - process_stdin.write(self.command_input.text().encode() + b"\n") - process_stdin.flush() - diff --git a/je_editor/pyside_ui/main_ui/editor/editor_widget.py b/je_editor/pyside_ui/main_ui/editor/editor_widget.py index 7d6391f..bdb3751 100644 --- a/je_editor/pyside_ui/main_ui/editor/editor_widget.py +++ b/je_editor/pyside_ui/main_ui/editor/editor_widget.py @@ -80,7 +80,7 @@ def __init__(self, main_window: EditorMain): self.code_difference_result.addTab( self.format_check_result, language_wrapper.language_word_dict.get("editor_format_check")) self.code_difference_result.addTab( - self.debugger_result, language_wrapper.language_word_dict.get("editor_debugger")) + self.debugger_result, language_wrapper.language_word_dict.get("editor_debugger_input_title_label")) # Edit splitter self.edit_splitter.addWidget(self.code_edit_scroll_area) self.edit_splitter.addWidget(self.code_difference_result) diff --git a/je_editor/pyside_ui/main_ui/editor/editor_widget_dock.py b/je_editor/pyside_ui/main_ui/editor/editor_widget_dock.py index e25ed47..85dbf7b 100644 --- a/je_editor/pyside_ui/main_ui/editor/editor_widget_dock.py +++ b/je_editor/pyside_ui/main_ui/editor/editor_widget_dock.py @@ -1,5 +1,6 @@ from pathlib import Path +from PySide6.QtCore import Qt from PySide6.QtWidgets import QWidget, QGridLayout, QScrollArea from frontengine.utils.multi_language.language_wrapper import language_wrapper @@ -15,6 +16,8 @@ def __init__(self, current_file: str): # Init variable self.auto_save_thread = None self.current_file = current_file + # Attr + self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose) # UI self.grid_layout = QGridLayout(self) self.setWindowTitle(language_wrapper.language_word_dict.get("application_name")) diff --git a/je_editor/pyside_ui/main_ui/editor/process_input.py b/je_editor/pyside_ui/main_ui/editor/process_input.py new file mode 100644 index 0000000..393bc5d --- /dev/null +++ b/je_editor/pyside_ui/main_ui/editor/process_input.py @@ -0,0 +1,59 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING + +from PySide6.QtCore import Qt +from PySide6.QtWidgets import QWidget, QLineEdit, QBoxLayout, QPushButton, QHBoxLayout + +if TYPE_CHECKING: + from je_editor.pyside_ui.main_ui.main_editor import EditorWidget + +from je_editor.utils.multi_language.multi_language_wrapper import language_wrapper + + +class ProcessInput(QWidget): + + def __init__(self, main_window: EditorWidget, process_type: str = "debugger"): + super().__init__() + self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose) + self.main_window = main_window + self.box_layout = QBoxLayout(QBoxLayout.Direction.TopToBottom) + self.command_input = QLineEdit() + self.send_command_button = QPushButton() + self.send_command_button.setText(language_wrapper.language_word_dict.get("process_input_send_command")) + self.box_h_layout = QHBoxLayout() + self.box_h_layout.addWidget(self.send_command_button) + self.box_layout.addWidget(self.command_input) + self.box_layout.addLayout(self.box_h_layout) + if process_type == "program": + self.setWindowTitle(language_wrapper.language_word_dict.get("editor_program_input_title_label")) + self.send_command_button.clicked.connect(self.program_send_command) + elif process_type == "shell": + self.setWindowTitle(language_wrapper.language_word_dict.get("editor_shell_input_title_label")) + self.send_command_button.clicked.connect(self.shell_send_command) + else: + self.setWindowTitle(language_wrapper.language_word_dict.get("editor_debugger_input_title_label")) + self.send_command_button.clicked.connect(self.debugger_send_command) + self.main_window.code_difference_result.setCurrentWidget(self.main_window.debugger_result) + self.setLayout(self.box_layout) + + def debugger_send_command(self): + if self.main_window.exec_python_debugger is not None: + process_stdin = self.main_window.exec_python_debugger.process.stdin + if process_stdin is not None: + process_stdin.write(self.command_input.text().encode() + b"\n") + process_stdin.flush() + + def shell_send_command(self): + if self.main_window.exec_shell is not None: + process_stdin = self.main_window.exec_shell.process.stdin + if process_stdin is not None: + process_stdin.write(self.command_input.text().encode() + b"\n") + process_stdin.flush() + + def program_send_command(self): + if self.main_window.exec_program is not None: + process_stdin = self.main_window.exec_program.process.stdin + if process_stdin is not None: + process_stdin.write(self.command_input.text().encode() + b"\n") + process_stdin.flush() diff --git a/je_editor/pyside_ui/main_ui/main_editor.py b/je_editor/pyside_ui/main_ui/main_editor.py index f6a42b5..a73f0ca 100644 --- a/je_editor/pyside_ui/main_ui/main_editor.py +++ b/je_editor/pyside_ui/main_ui/main_editor.py @@ -76,6 +76,7 @@ def __init__(self, debug_mode: bool = False, show_system_tray_ray: bool = True): self.redirect_timer.setInterval(1) self.redirect_timer.start() self.setWindowTitle(language_wrapper.language_word_dict.get("application_name")) + self.setToolTip(language_wrapper.language_word_dict.get("application_name")) set_menu_bar(self) # Set Icon self.icon_path = Path(os.getcwd() + "/je_driver_icon.ico") diff --git a/je_editor/pyside_ui/main_ui/menu/run_menu/build_run_menu.py b/je_editor/pyside_ui/main_ui/menu/run_menu/build_run_menu.py index cf305aa..0e420f3 100644 --- a/je_editor/pyside_ui/main_ui/menu/run_menu/build_run_menu.py +++ b/je_editor/pyside_ui/main_ui/menu/run_menu/build_run_menu.py @@ -2,56 +2,28 @@ from typing import TYPE_CHECKING +from PySide6.QtWidgets import QMessageBox + from je_editor.pyside_ui.code.running_process_manager import run_instance_manager -from je_editor.pyside_ui.main_ui.editor.debugger_input import DebuggerInput from je_editor.pyside_ui.main_ui.editor.editor_widget import EditorWidget +from je_editor.pyside_ui.main_ui.menu.run_menu.under_run_menu.build_debug_menu import set_debug_menu +from je_editor.pyside_ui.main_ui.menu.run_menu.under_run_menu.build_program_menu import set_program_menu +from je_editor.pyside_ui.main_ui.menu.run_menu.under_run_menu.build_shell_menu import set_shell_menu if TYPE_CHECKING: from je_editor.pyside_ui.main_ui.main_editor import EditorMain from PySide6.QtGui import QAction -from PySide6.QtWidgets import QMessageBox -from je_editor.pyside_ui.code.code_process.code_exec import ExecManager -from je_editor.pyside_ui.dialog.file_dialog.save_file_dialog import choose_file_get_save_file_path -from je_editor.pyside_ui.code.shell_process.shell_exec import ShellManager from je_editor.utils.multi_language.multi_language_wrapper import language_wrapper def set_run_menu(ui_we_want_to_set: EditorMain) -> None: ui_we_want_to_set.run_menu = ui_we_want_to_set.menu.addMenu( language_wrapper.language_word_dict.get("run_menu_label")) - # Run program - ui_we_want_to_set.run_menu.run_program_action = QAction( - language_wrapper.language_word_dict.get("run_menu_run_program_label")) - ui_we_want_to_set.run_menu.run_program_action.triggered.connect( - lambda: run_program(ui_we_want_to_set) - ) - ui_we_want_to_set.run_menu.addAction(ui_we_want_to_set.run_menu.run_program_action) - # Debug menu inside run menu - ui_we_want_to_set.debug_menu = ui_we_want_to_set.run_menu.addMenu( - language_wrapper.language_word_dict.get("editor_debugger")) - # Run debugger - ui_we_want_to_set.debug_menu.run_debugger_action = QAction( - language_wrapper.language_word_dict.get("run_menu_run_debugger")) - ui_we_want_to_set.debug_menu.run_debugger_action.triggered.connect( - lambda: run_debugger(ui_we_want_to_set) - ) - ui_we_want_to_set.debug_menu.addAction(ui_we_want_to_set.debug_menu.run_debugger_action) - # Show debugger input - ui_we_want_to_set.debug_menu.show_debugger_input = QAction( - language_wrapper.language_word_dict.get("show_debugger_input")) - ui_we_want_to_set.debug_menu.show_debugger_input.triggered.connect( - lambda: show_debugger_input(ui_we_want_to_set) - ) - ui_we_want_to_set.debug_menu.addAction(ui_we_want_to_set.debug_menu.show_debugger_input) - # Run on shell - ui_we_want_to_set.run_menu.run_on_shell_action = QAction( - language_wrapper.language_word_dict.get("run_menu_run_on_shell_label")) - ui_we_want_to_set.run_menu.run_on_shell_action.triggered.connect( - lambda: shell_exec(ui_we_want_to_set) - ) + set_program_menu(ui_we_want_to_set) + set_shell_menu(ui_we_want_to_set) + set_debug_menu(ui_we_want_to_set) # Clean result - ui_we_want_to_set.run_menu.addAction(ui_we_want_to_set.run_menu.run_on_shell_action) ui_we_want_to_set.run_menu.clean_result_action = QAction( language_wrapper.language_word_dict.get("run_menu_clear_result_label")) ui_we_want_to_set.run_menu.clean_result_action.triggered.connect( @@ -91,72 +63,6 @@ def set_run_menu(ui_we_want_to_set: EditorMain) -> None: ui_we_want_to_set.run_menu.run_help_menu.addAction(ui_we_want_to_set.run_menu.run_help_menu.shell_help_action) -def please_close_current_running_messagebox(ui_we_want_to_set: EditorMain): - please_stop_current_running_program_messagebox = QMessageBox(ui_we_want_to_set) - please_stop_current_running_program_messagebox.setText( - language_wrapper.language_word_dict.get("please_stop_current_running_program") - ) - please_stop_current_running_program_messagebox.show() - - -def run_program(ui_we_want_to_set: EditorMain) -> None: - widget = ui_we_want_to_set.tab_widget.currentWidget() - if isinstance(widget, EditorWidget): - if widget.exec_program is None: - widget.python_compiler = ui_we_want_to_set.python_compiler - if choose_file_get_save_file_path(ui_we_want_to_set): - code_exec = ExecManager(widget) - code_exec.later_init() - code_exec.exec_code( - widget.current_file - ) - widget.exec_program = code_exec - else: - please_close_current_running_messagebox(ui_we_want_to_set) - - -def run_debugger(ui_we_want_to_set: EditorMain) -> None: - widget = ui_we_want_to_set.tab_widget.currentWidget() - if isinstance(widget, EditorWidget): - if widget.exec_python_debugger is None: - widget.python_compiler = ui_we_want_to_set.python_compiler - if choose_file_get_save_file_path(ui_we_want_to_set): - code_exec = ExecManager(widget) - code_exec.later_init() - code_exec.code_result = widget.debugger_result - code_exec.exec_code( - widget.current_file, exec_prefix=["-m", "pdb"] - ) - widget.exec_python_debugger = code_exec - widget.debugger_input = DebuggerInput(widget) - widget.debugger_input.show() - else: - please_close_current_running_messagebox(ui_we_want_to_set) - - -def show_debugger_input(ui_we_want_to_set: EditorMain) -> None: - widget = ui_we_want_to_set.tab_widget.currentWidget() - if isinstance(widget, EditorWidget): - widget.debugger_input = DebuggerInput(widget) - widget.debugger_input.show() - - -def shell_exec(ui_we_want_to_set: EditorMain) -> None: - widget = ui_we_want_to_set.tab_widget.currentWidget() - if isinstance(widget, EditorWidget): - if widget.exec_shell is None: - shell_command = ShellManager( - main_window=widget, - shell_encoding=ui_we_want_to_set.encoding) - shell_command.later_init() - shell_command.exec_shell( - widget.code_edit.toPlainText() - ) - widget.exec_shell = shell_command - else: - please_close_current_running_messagebox(ui_we_want_to_set) - - def stop_program(ui_we_want_to_set: EditorMain) -> None: widget = ui_we_want_to_set.tab_widget.currentWidget() if isinstance(widget, EditorWidget): diff --git a/je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/__init__.py b/je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/build_debug_menu.py b/je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/build_debug_menu.py new file mode 100644 index 0000000..833ec08 --- /dev/null +++ b/je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/build_debug_menu.py @@ -0,0 +1,61 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING + +from je_editor.pyside_ui.main_ui.editor.editor_widget import EditorWidget +from je_editor.pyside_ui.main_ui.editor.process_input import ProcessInput +from je_editor.pyside_ui.main_ui.menu.run_menu.under_run_menu.utils import please_close_current_running_messagebox + +if TYPE_CHECKING: + from je_editor.pyside_ui.main_ui.main_editor import EditorMain +from PySide6.QtGui import QAction + +from je_editor.pyside_ui.code.code_process.code_exec import ExecManager +from je_editor.pyside_ui.dialog.file_dialog.save_file_dialog import choose_file_get_save_file_path +from je_editor.utils.multi_language.multi_language_wrapper import language_wrapper + + +def set_debug_menu(ui_we_want_to_set: EditorMain) -> None: + # Debug menu inside run menu + ui_we_want_to_set.debug_menu = ui_we_want_to_set.run_menu.addMenu( + language_wrapper.language_word_dict.get("editor_debugger_input_title_label")) + # Run debugger + ui_we_want_to_set.debug_menu.run_debugger_action = QAction( + language_wrapper.language_word_dict.get("run_menu_run_debugger")) + ui_we_want_to_set.debug_menu.run_debugger_action.triggered.connect( + lambda: run_debugger(ui_we_want_to_set) + ) + ui_we_want_to_set.debug_menu.addAction(ui_we_want_to_set.debug_menu.run_debugger_action) + # Show debugger input + ui_we_want_to_set.debug_menu.show_shell_input = QAction( + language_wrapper.language_word_dict.get("show_debugger_input")) + ui_we_want_to_set.debug_menu.show_shell_input.triggered.connect( + lambda: show_debugger_input(ui_we_want_to_set) + ) + ui_we_want_to_set.debug_menu.addAction(ui_we_want_to_set.debug_menu.show_shell_input) + + +def run_debugger(ui_we_want_to_set: EditorMain) -> None: + widget = ui_we_want_to_set.tab_widget.currentWidget() + if isinstance(widget, EditorWidget): + if widget.exec_python_debugger is None: + widget.python_compiler = ui_we_want_to_set.python_compiler + if choose_file_get_save_file_path(ui_we_want_to_set): + code_exec = ExecManager(widget) + code_exec.later_init() + code_exec.code_result = widget.debugger_result + code_exec.exec_code( + widget.current_file, exec_prefix=["-m", "pdb"] + ) + widget.exec_python_debugger = code_exec + widget.debugger_input = ProcessInput(widget) + widget.debugger_input.show() + else: + please_close_current_running_messagebox(ui_we_want_to_set) + + +def show_debugger_input(ui_we_want_to_set: EditorMain) -> None: + widget = ui_we_want_to_set.tab_widget.currentWidget() + if isinstance(widget, EditorWidget): + widget.debugger_input = ProcessInput(widget, "debugger") + widget.debugger_input.show() diff --git a/je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/build_program_menu.py b/je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/build_program_menu.py new file mode 100644 index 0000000..5854642 --- /dev/null +++ b/je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/build_program_menu.py @@ -0,0 +1,57 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING + +from PySide6.QtGui import QAction + +from je_editor.pyside_ui.code.code_process.code_exec import ExecManager +from je_editor.pyside_ui.dialog.file_dialog.save_file_dialog import choose_file_get_save_file_path +from je_editor.pyside_ui.main_ui.editor.editor_widget import EditorWidget +from je_editor.pyside_ui.main_ui.editor.process_input import ProcessInput +from je_editor.pyside_ui.main_ui.menu.run_menu.under_run_menu.utils import please_close_current_running_messagebox +from je_editor.utils.multi_language.multi_language_wrapper import language_wrapper + +if TYPE_CHECKING: + from je_editor.pyside_ui.main_ui.main_editor import EditorMain + + +def set_program_menu(ui_we_want_to_set: EditorMain) -> None: + ui_we_want_to_set.run_program_menu = ui_we_want_to_set.run_menu.addMenu( + language_wrapper.language_word_dict.get("run_menu_run_program_label")) + # Run program + ui_we_want_to_set.run_program_menu.run_program_action = QAction( + language_wrapper.language_word_dict.get("run_menu_run_program_label")) + ui_we_want_to_set.run_program_menu.run_program_action.triggered.connect( + lambda: run_program(ui_we_want_to_set) + ) + ui_we_want_to_set.run_program_menu.addAction(ui_we_want_to_set.run_program_menu.run_program_action) + # Show shell input + ui_we_want_to_set.run_program_menu.show_shell_input = QAction( + language_wrapper.language_word_dict.get("show_program_input")) + ui_we_want_to_set.run_program_menu.show_shell_input.triggered.connect( + lambda: show_program_input(ui_we_want_to_set) + ) + ui_we_want_to_set.run_program_menu.addAction(ui_we_want_to_set.run_program_menu.show_shell_input) + + +def run_program(ui_we_want_to_set: EditorMain) -> None: + widget = ui_we_want_to_set.tab_widget.currentWidget() + if isinstance(widget, EditorWidget): + if widget.exec_program is None: + widget.python_compiler = ui_we_want_to_set.python_compiler + if choose_file_get_save_file_path(ui_we_want_to_set): + code_exec = ExecManager(widget) + code_exec.later_init() + code_exec.exec_code( + widget.current_file + ) + widget.exec_program = code_exec + else: + please_close_current_running_messagebox(ui_we_want_to_set) + + +def show_program_input(ui_we_want_to_set: EditorMain) -> None: + widget = ui_we_want_to_set.tab_widget.currentWidget() + if isinstance(widget, EditorWidget): + widget.program_input = ProcessInput(widget, "program") + widget.program_input.show() diff --git a/je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/build_shell_menu.py b/je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/build_shell_menu.py new file mode 100644 index 0000000..71bb1ee --- /dev/null +++ b/je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/build_shell_menu.py @@ -0,0 +1,56 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING + +from je_editor.pyside_ui.main_ui.editor.editor_widget import EditorWidget +from je_editor.pyside_ui.main_ui.editor.process_input import ProcessInput +from je_editor.pyside_ui.main_ui.menu.run_menu.under_run_menu.utils import please_close_current_running_messagebox + +if TYPE_CHECKING: + from je_editor.pyside_ui.main_ui.main_editor import EditorMain +from PySide6.QtGui import QAction + +from je_editor.pyside_ui.code.shell_process.shell_exec import ShellManager +from je_editor.utils.multi_language.multi_language_wrapper import language_wrapper + + +def set_shell_menu(ui_we_want_to_set: EditorMain) -> None: + ui_we_want_to_set.run_shell_menu = ui_we_want_to_set.run_menu.addMenu( + language_wrapper.language_word_dict.get("run_menu_run_on_shell_label")) + # Run on shell + ui_we_want_to_set.run_shell_menu.run_on_shell_action = QAction( + language_wrapper.language_word_dict.get("run_menu_run_on_shell_label")) + ui_we_want_to_set.run_shell_menu.run_on_shell_action.triggered.connect( + lambda: shell_exec(ui_we_want_to_set) + ) + ui_we_want_to_set.run_shell_menu.addAction(ui_we_want_to_set.run_shell_menu.run_on_shell_action) + # Show shell input + ui_we_want_to_set.run_shell_menu.show_shell_input = QAction( + language_wrapper.language_word_dict.get("show_shell_input")) + ui_we_want_to_set.run_shell_menu.show_shell_input.triggered.connect( + lambda: show_shell_input(ui_we_want_to_set) + ) + ui_we_want_to_set.run_shell_menu.addAction(ui_we_want_to_set.run_shell_menu.show_shell_input) + + +def shell_exec(ui_we_want_to_set: EditorMain) -> None: + widget = ui_we_want_to_set.tab_widget.currentWidget() + if isinstance(widget, EditorWidget): + if widget.exec_shell is None: + shell_command = ShellManager( + main_window=widget, + shell_encoding=ui_we_want_to_set.encoding) + shell_command.later_init() + shell_command.exec_shell( + widget.code_edit.toPlainText() + ) + widget.exec_shell = shell_command + else: + please_close_current_running_messagebox(ui_we_want_to_set) + + +def show_shell_input(ui_we_want_to_set: EditorMain) -> None: + widget = ui_we_want_to_set.tab_widget.currentWidget() + if isinstance(widget, EditorWidget): + widget.shell_input = ProcessInput(widget, "shell") + widget.shell_input.show() diff --git a/je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/utils.py b/je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/utils.py new file mode 100644 index 0000000..6ca6681 --- /dev/null +++ b/je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/utils.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING + +from PySide6.QtWidgets import QMessageBox + +from je_editor.utils.multi_language.multi_language_wrapper import language_wrapper + +if TYPE_CHECKING: + from je_editor.pyside_ui.main_ui.main_editor import EditorMain + + +def please_close_current_running_messagebox(ui_we_want_to_set: EditorMain): + please_stop_current_running_program_messagebox = QMessageBox(ui_we_want_to_set) + please_stop_current_running_program_messagebox.setText( + language_wrapper.language_word_dict.get("please_stop_current_running_program") + ) + please_stop_current_running_program_messagebox.show() diff --git a/je_editor/utils/multi_language/english.py b/je_editor/utils/multi_language/english.py index 2d0d3e6..1386c78 100644 --- a/je_editor/utils/multi_language/english.py +++ b/je_editor/utils/multi_language/english.py @@ -21,10 +21,6 @@ # Editor "editor_code_result": "Code result", "editor_format_check": "Format checker", - # Debugger and menu - "editor_debugger": "Debugger", - "show_debugger_input": "Show debugger input", - "debugger_input_send_command": "send command", # Check Code Style Menu "check_code_style_menu_label": "Check Code Style", "yapf_reformat_label": "yapf", @@ -87,6 +83,15 @@ When executing a shell command, if you encounter a decoding error, please make sure that the current encoding is consistent with the default encoding of the system shell. """, + # Debugger and menu + "editor_debugger_input_title_label": "Debugger", + "show_debugger_input": "Show debugger input", + # Shell and menu + "editor_shell_input_title_label": "Shell", + "show_shell_input": "Show shell input", + # Program and menu + "show_program_input": "Show program input", + "process_input_send_command": "send command", # Style Menu "style_menu_label": "UI Style", # Tab Menu diff --git a/je_editor/utils/multi_language/traditional_chinese.py b/je_editor/utils/multi_language/traditional_chinese.py index 236a7e7..814b740 100644 --- a/je_editor/utils/multi_language/traditional_chinese.py +++ b/je_editor/utils/multi_language/traditional_chinese.py @@ -21,10 +21,6 @@ # Editor "editor_code_result": "程式運行結果", "editor_format_check": "程式格式檢查", - # Debugger - "editor_debugger": "除錯器", - "show_debugger_input": "開啟除錯輸入", - "debugger_input_send_command": "傳送指令", # Check Code Style Menu "check_code_style_menu_label": "程式碼格式檢查器", "yapf_reformat_label": "yapf", @@ -85,6 +81,15 @@ "run_menu_shell_run_tip": """ 如果有亂碼等問題請重新選擇編碼至與系統 Shell 編碼相同 """, + # Debugger + "editor_debugger_input_title_label": "除錯器", + "show_debugger_input": "開啟除錯輸入", + # Shell and menu + "editor_shell_input_title_label": "Shell", + "show_shell_input": "開啟 Shell 輸入", + # Program and menu + "show_program_input": "開啟程式輸入", + "process_input_send_command": "傳送指令", # Style Menu "style_menu_label": "UI 風格", # Tab Menu diff --git a/pyproject.toml b/pyproject.toml index bbb181c..f425aba 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,12 +1,12 @@ -# Rename to build dev version -# This is dev version +# Rename to build stable version +# This is stable version [build-system] -requires = ["setuptools"] +requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] -name = "je_editor_dev" -version = "0.0.167" +name = "je_editor" +version = "0.0.159" authors = [ { name = "JE-Chen", email = "jechenmailman@gmail.com" }, ] @@ -26,6 +26,7 @@ classifiers = [ "Operating System :: OS Independent" ] + [project.urls] Homepage = "https://github.com/JE-Chen/je_editor" Documentation = "https://je-editor.readthedocs.io/en/latest/"