Skip to content
Merged

Dev #108

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 33 additions & 18 deletions automation_ide/automation_editor_ui/editor_main/main_ui.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
from pathlib import Path
from typing import List, Dict, Type

from automation_ide.utils.logging.logger import automation_ide_logger

Check warning on line 7 in automation_ide/automation_editor_ui/editor_main/main_ui.py

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

automation_ide/automation_editor_ui/editor_main/main_ui.py#L7

'automation_ide.utils.logging.logger.automation_ide_logger' imported but unused (F401)

environ["LOCUST_SKIP_MONKEY_PATCH"] = "1"

from PySide6.QtCore import QTimer, QCoreApplication
Expand All @@ -24,33 +26,46 @@

class AutomationEditor(EditorMain):

def __init__(self, debug_mode: bool = False, show_system_tray_ray: bool = False):
super().__init__(debug_mode, show_system_tray_ray)
def __init__(self, debug_mode: bool = False, show_system_tray_ray: bool = False, extend: bool = False) -> None:
super().__init__(debug_mode, show_system_tray_ray, extend=True)

self.current_run_code_window: List[QWidget] = list()
# Project compiler if user not choose this will use which to find
self.python_compiler = None
# Delete JEditor help
if self.help_menu:
self.help_menu.deleteLater()
# System tray change
if self.show_system_tray_ray:
self.system_tray.main_window = self
self.system_tray.setToolTip(language_wrapper.language_word_dict.get("automation_editor_application_name"))

# Update language_dict
update_language_dict()

# Title
self.setWindowTitle(language_wrapper.language_word_dict.get("automation_editor_application_name"))
self.setToolTip(language_wrapper.language_word_dict.get("automation_editor_application_name"))

# Windows 系統專用:設定應用程式 ID
# Windows only: set application ID
if not extend:
self.id = language_wrapper.language_word_dict.get("automation_editor_application_name")
if sys.platform in ["win32", "cygwin", "msys"]:
from ctypes import windll
windll.shell32.SetCurrentProcessExplicitAppUserModelID(self.id)

# Icon
if not extend:
self.icon_path = Path(os.getcwd() + "/automation_ide.ico")
self.icon = QIcon(str(self.icon_path))
if not self.icon.isNull():
self.setWindowIcon(self.icon)

# Menu
add_menu_to_menubar(self)
syntax_extend_package(self)

# Tab
for widget_name, widget in EDITOR_EXTEND_TAB.items():
self.tab_widget.addTab(widget(), widget_name)
# Icon
self.icon_path = Path(os.getcwd() + "/je_driver_icon.ico")
self.icon = QIcon(str(self.icon_path))
self.system_tray = QSystemTrayIcon()
self.system_tray.setIcon(self.icon)
# Title
self.setWindowTitle(language_wrapper.language_word_dict.get("automation_editor_application_name"))

if debug_mode:
close_timer = QTimer(self)
close_timer.setInterval(10000)
Expand All @@ -76,14 +91,14 @@
Start editor instance
:return: None
"""
new_editor = QCoreApplication.instance()
if new_editor is None:
new_editor = QApplication(sys.argv)
new_ide = QCoreApplication.instance()
if new_ide is None:
new_ide = QApplication(sys.argv)
window = AutomationEditor(debug_mode=debug_mode, **kwargs)
apply_stylesheet(new_editor, theme="dark_amber.xml")
apply_stylesheet(new_ide, theme="dark_amber.xml")
window.showMaximized()
try:
window.startup_setting()
except Exception as error:
print(repr(error))
sys.exit(new_editor.exec())
sys.exit(new_ide.exec())
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,39 @@ def update_english_word_dict():
"ai_code_review_gui_message_error": "Error",
"ai_code_review_gui_status_accepted": "[Accepted]",
"ai_code_review_gui_status_rejected": "[Rejected]",
"ai_code_review_gui_status_save_failed": "Save failed"
"ai_code_review_gui_status_save_failed": "Save failed",
# Prompt Editor
"prompt_editor_window_title": "Prompt Editor",
"prompt_editor_groupbox_edit_file_content": "Edit File Content",
"prompt_editor_button_create_file": "Create File",
"prompt_editor_button_save_file": "Save",
"prompt_editor_button_reload_file": "Reload",
"prompt_editor_msgbox_info_title": "Info",
"prompt_editor_msgbox_success_title": "Success",
"prompt_editor_msgbox_error_title": "Error",
"prompt_editor_msgbox_file_exists": "File {filename} already exists, no need to create",
"prompt_editor_msgbox_file_created": "File {filename} has been created",
"prompt_editor_msgbox_file_saved": "File {filename} saved",
"prompt_editor_msgbox_no_file_selected": "No file selected",
"prompt_editor_file_not_exist": "(File {filename} does not exist)",
# Extend Menu
"extend_tools_menu_tools_menu": "Tools",
"extend_tools_menu_tools_ssh_menu": "SSH",
"extend_tools_menu_tools_ai_menu": "AI",
"extend_tools_menu_ssh_client_tab_action": "SSH Client Tab",
"extend_tools_menu_ssh_client_tab_label": "SSH Client",
"extend_tools_menu_ai_code_review_tab_action": "AI Code-Review Tab",
"extend_tools_menu_ai_code_review_tab_label": "AI Code-Review",
"extend_tools_menu_prompt_editor_tab_action": "Prompt Editor",
"extend_tools_menu_prompt_editor_tab_label": "Prompt Editor",
"extend_tools_menu_dock_ssh_menu": "SSH",
"extend_tools_menu_dock_ai_menu": "AI",
"extend_tools_menu_ssh_client_dock_action": "SSH Client Dock",
"extend_tools_menu_ai_code_review_dock_action": "AI Code-Review Dock",
"extend_tools_menu_prompt_editor_dock_action": "Prompt Editor Dock",
"extend_tools_menu_ssh_client_dock_title": "SSH Client",
"extend_tools_menu_ai_code_review_dock_title": "AI Code-Review",
"extend_tools_menu_prompt_editor_dock_title": "PromptEditor",

}
)
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,39 @@ def update_traditional_chinese_word_dict():
"ai_code_review_gui_message_error": "錯誤",
"ai_code_review_gui_status_accepted": "[已接受]",
"ai_code_review_gui_status_rejected": "[已拒絕]",
"ai_code_review_gui_status_save_failed": "儲存失敗"
"ai_code_review_gui_status_save_failed": "儲存失敗",
# Prompt Editor
"prompt_editor_window_title": "提示編輯器",
"prompt_editor_groupbox_edit_file_content": "編輯檔案內容",
"prompt_editor_button_create_file": "建立檔案",
"prompt_editor_button_save_file": "儲存",
"prompt_editor_button_reload_file": "重新載入",
"prompt_editor_msgbox_info_title": "資訊",
"prompt_editor_msgbox_success_title": "成功",
"prompt_editor_msgbox_error_title": "錯誤",
"prompt_editor_msgbox_file_exists": "檔案 {filename} 已存在,無需建立",
"prompt_editor_msgbox_file_created": "檔案 {filename} 已建立",
"prompt_editor_msgbox_file_saved": "檔案 {filename} 已儲存",
"prompt_editor_msgbox_no_file_selected": "尚未選擇檔案",
"prompt_editor_file_not_exist": "(檔案 {filename} 不存在)",
# Extend Menu
"extend_tools_menu_tools_menu": "工具",
"extend_tools_menu_tools_ssh_menu": "SSH",
"extend_tools_menu_tools_ai_menu": "AI",
"extend_tools_menu_ssh_client_tab_action": "SSH 用戶端分頁",
"extend_tools_menu_ssh_client_tab_label": "SSH 用戶端",
"extend_tools_menu_ai_code_review_tab_action": "AI 程式碼審查分頁",
"extend_tools_menu_ai_code_review_tab_label": "AI 程式碼審查",
"extend_tools_menu_prompt_editor_tab_action": "提示詞編輯器",
"extend_tools_menu_prompt_editor_tab_label": "提示詞編輯器",
"extend_tools_menu_dock_ssh_menu": "SSH",
"extend_tools_menu_dock_ai_menu": "AI",
"extend_tools_menu_ssh_client_dock_action": "SSH 用戶端停駐窗格",
"extend_tools_menu_ai_code_review_dock_action": "AI 程式碼審查停駐窗格",
"extend_tools_menu_prompt_editor_dock_action": "提示詞編輯器停駐窗格",
"extend_tools_menu_ssh_client_dock_title": "SSH 用戶端",
"extend_tools_menu_ai_code_review_dock_title": "AI 程式碼審查",
"extend_tools_menu_prompt_editor_dock_title": "提示詞編輯器",

}
)
80 changes: 65 additions & 15 deletions automation_ide/automation_editor_ui/menu/tools/tools_menu.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,56 +3,97 @@
from typing import TYPE_CHECKING

from PySide6.QtGui import QAction, Qt
from je_editor import language_wrapper
from je_editor.pyside_ui.main_ui.dock.destroy_dock import DestroyDock
from je_editor.utils.logging.loggin_instance import jeditor_logger

from automation_ide.automation_editor_ui.connect_gui.ssh.ssh_main_widget import SSHMainWidget
from automation_ide.automation_editor_ui.connect_gui.url.ai_code_review_gui import AICodeReviewClient
from automation_ide.automation_editor_ui.prompt_edit_gui.main_prompt_edit_widget import PromptEditor

if TYPE_CHECKING:
from automation_ide.automation_editor_ui.editor_main.main_ui import AutomationEditor


def build_tools_menu(ui_we_want_to_set: AutomationEditor):
# Menus
ui_we_want_to_set.tools_menu = ui_we_want_to_set.menu.addMenu("Tools")
ui_we_want_to_set.tools_ssh_menu = ui_we_want_to_set.tools_menu.addMenu("SSH")
ui_we_want_to_set.tools_ai_menu = ui_we_want_to_set.tools_menu.addMenu("AI")
ui_we_want_to_set.tools_menu = ui_we_want_to_set.menu.addMenu(language_wrapper.language_word_dict.get(
"extend_tools_menu_tools_menu"
))
ui_we_want_to_set.tools_ssh_menu = ui_we_want_to_set.tools_menu.addMenu(language_wrapper.language_word_dict.get(
"extend_tools_menu_tools_ssh_menu"
))
ui_we_want_to_set.tools_ai_menu = ui_we_want_to_set.tools_menu.addMenu(language_wrapper.language_word_dict.get(
"extend_tools_menu_tools_ai_menu"
))

ui_we_want_to_set.tools_ssh_client_tab_action = QAction("SSH Client Tab")
ui_we_want_to_set.tools_ssh_client_tab_action = QAction(language_wrapper.language_word_dict.get(
"extend_tools_menu_ssh_client_tab_action"
))
ui_we_want_to_set.tools_ssh_client_tab_action.triggered.connect(lambda: ui_we_want_to_set.tab_widget.addTab(
SSHMainWidget(), "SSH Client"
SSHMainWidget(), language_wrapper.language_word_dict.get("extend_tools_menu_ssh_client_tab_label")
))
ui_we_want_to_set.tools_ssh_menu.addAction(ui_we_want_to_set.tools_ssh_client_tab_action)

ui_we_want_to_set.tools_ai_code_review_action = QAction("AI Code-Review Tab")
ui_we_want_to_set.tools_ai_code_review_action = QAction(language_wrapper.language_word_dict.get(
"extend_tools_menu_ai_code_review_tab_action"
))
ui_we_want_to_set.tools_ai_code_review_action.triggered.connect(lambda: ui_we_want_to_set.tab_widget.addTab(
AICodeReviewClient(), "AI Code-Review"
AICodeReviewClient(), language_wrapper.language_word_dict.get(
"extend_tools_menu_ai_code_review_tab_label"
)
))
ui_we_want_to_set.tools_ai_menu.addAction(ui_we_want_to_set.tools_ai_code_review_action)

ui_we_want_to_set.tools_ai_prompt_editor_action = QAction(language_wrapper.language_word_dict.get(
"extend_tools_menu_prompt_editor_tab_action"
))
ui_we_want_to_set.tools_ai_prompt_editor_action.triggered.connect(lambda: ui_we_want_to_set.tab_widget.addTab(
PromptEditor(), language_wrapper.language_word_dict.get(
"extend_tools_menu_prompt_editor_tab_label"
)
))
ui_we_want_to_set.tools_ai_menu.addAction(ui_we_want_to_set.tools_ai_prompt_editor_action)


def extend_dock_menu(ui_we_want_to_set: AutomationEditor):
# Sub menu
ui_we_want_to_set.dock_ssh_menu = ui_we_want_to_set.dock_menu.addMenu(
"SSH"
language_wrapper.language_word_dict.get("extend_tools_menu_dock_ssh_menu")
)
ui_we_want_to_set.dock_ai_menu = ui_we_want_to_set.dock_menu.addMenu(
"AI"
language_wrapper.language_word_dict.get("extend_tools_menu_dock_ai_menu")
)
# SSH
ui_we_want_to_set.tools_ssh_client_dock_action = QAction("SSH Client Dock")
ui_we_want_to_set.tools_ssh_client_dock_action = QAction(
language_wrapper.language_word_dict.get("extend_tools_menu_ssh_client_dock_action")
)
ui_we_want_to_set.tools_ssh_client_dock_action.triggered.connect(
lambda: add_dock(ui_we_want_to_set, "SSH")
lambda: add_dock(ui_we_want_to_set, language_wrapper.language_word_dict.get(
"extend_tools_menu_dock_ssh_menu"
))
)
ui_we_want_to_set.dock_ssh_menu.addAction(ui_we_want_to_set.tools_ssh_client_dock_action)
# AI
ui_we_want_to_set.tools_ai_code_review_dock_action = QAction("AI Code-Review Dock")
ui_we_want_to_set.tools_ai_code_review_dock_action = QAction(language_wrapper.language_word_dict.get(
"extend_tools_menu_ai_code_review_dock_action"
))
ui_we_want_to_set.tools_ai_code_review_dock_action.triggered.connect(
lambda: add_dock(ui_we_want_to_set, "AICodeReview")
lambda: add_dock(ui_we_want_to_set, language_wrapper.language_word_dict.get(
"extend_tools_menu_prompt_editor_dock_action"
))
)
ui_we_want_to_set.dock_ai_menu.addAction(ui_we_want_to_set.tools_ai_code_review_dock_action)

ui_we_want_to_set.tools_prompt_editor_dock_action = QAction(language_wrapper.language_word_dict.get(
"extend_tools_menu_prompt_editor_dock_action"))
ui_we_want_to_set.tools_prompt_editor_dock_action.triggered.connect(
lambda: add_dock(ui_we_want_to_set, language_wrapper.language_word_dict.get(
"extend_tools_menu_prompt_editor_dock_action"
))
)
ui_we_want_to_set.dock_ai_menu.addAction(ui_we_want_to_set.tools_prompt_editor_dock_action)

def add_dock(ui_we_want_to_set: AutomationEditor, widget_type: str = None):
jeditor_logger.info("build_dock_menu.py add_dock_widget "
f"ui_we_want_to_set: {ui_we_want_to_set} "
Expand All @@ -63,11 +104,20 @@ def add_dock(ui_we_want_to_set: AutomationEditor, widget_type: str = None):
dock_widget = DestroyDock()

if widget_type == "SSH":
dock_widget.setWindowTitle("SSH Client")
dock_widget.setWindowTitle(language_wrapper.language_word_dict.get(
"extend_tools_menu_ssh_client_dock_title"
))
dock_widget.setWidget(SSHMainWidget())
elif widget_type == "AICodeReview":
dock_widget.setWindowTitle("AI Code-Review")
dock_widget.setWindowTitle(language_wrapper.language_word_dict.get(
"extend_tools_menu_ai_code_review_dock_title"
))
dock_widget.setWidget(AICodeReviewClient())
elif widget_type == "PromptEditor":
dock_widget.setWindowTitle(language_wrapper.language_word_dict.get(
"extend_tools_menu_prompt_editor_dock_title"
))
dock_widget.setWidget(PromptEditor())

# 如果成功建立了 widget,將其加到主視窗右側 Dock 區域
# If widget is created, add it to the right dock area of the main window
Expand Down
Loading