22
33from typing import TYPE_CHECKING
44
5- from frontengine import FrontEngineMainUI
5+ from PySide6 . QtWidgets import QMenu
66
77from je_editor .pyside_ui .browser .main_browser_widget import MainBrowserWidget
8- from je_editor .pyside_ui .code .variable_inspector .inspector_gui import VariableInspector
9- # 匯入各種 UI 元件 (編輯器、瀏覽器、Git、變數檢查器、聊天、控制台、IPython、程式碼比對)
10- # Import various UI components (editor, browser, Git, variable inspector, chat, console, IPython, code diff)
11- from je_editor .pyside_ui .git_ui .code_diff_compare .code_diff_viewer_widget import DiffViewerWidget
12- from je_editor .pyside_ui .git_ui .git_client .git_branch_tree_widget import GitTreeViewGUI
13- from je_editor .pyside_ui .git_ui .git_client .git_client_gui import GitGui
14- from je_editor .pyside_ui .main_ui .ai_widget .chat_ui import ChatUI
158from je_editor .pyside_ui .main_ui .console_widget .console_gui import ConsoleWidget
169from je_editor .pyside_ui .main_ui .editor .editor_widget import EditorWidget
17- from je_editor .pyside_ui .main_ui .ipython_widget .rich_jupyter import IpythonWidget
10+ from je_editor .pyside_ui .main_ui .menu .tab_menu .build_tab_git_menu import set_tab_git_menu
11+ from je_editor .pyside_ui .main_ui .menu .tab_menu .build_tab_tools_menu import set_tab_tools_menu
1812from je_editor .utils .logging .loggin_instance import jeditor_logger
1913
20- # 啟用未來的註解功能,允許在型別提示中使用字串形式的前向參照
21- # Enable future annotations, allowing forward references in type hints
22- # TYPE_CHECKING 用於避免在型別檢查時引入不必要的模組
23- # TYPE_CHECKING is used to avoid unnecessary imports during type checking
24- # 匯入 FrontEngine 主 UI
25- # Import the FrontEngine main UI
26- # 匯入日誌工具,用於記錄操作
27- # Import logger for recording operations
28-
2914if TYPE_CHECKING :
3015 from je_editor .pyside_ui .main_ui .main_editor import EditorMain
31- # 僅在型別檢查時匯入 EditorMain,避免循環依賴
32- # Import EditorMain only for type checking to avoid circular imports
3316
3417from PySide6 .QtGui import QAction
35- # 匯入 QAction,用於建立選單動作
36- # Import QAction for creating menu actions
3718
3819from je_editor .utils .multi_language .multi_language_wrapper import language_wrapper
3920
4021
41- # 匯入多語言包裝器,用於支援多語系 UI
42- # Import language wrapper for multilingual UI support
43-
44-
4522def set_tab_menu (ui_we_want_to_set : EditorMain ) -> None :
4623 """
4724 設定主編輯器的分頁選單
@@ -51,7 +28,7 @@ def set_tab_menu(ui_we_want_to_set: EditorMain) -> None:
5128
5229 # 建立 Tab 選單 (主容器)
5330 # Create the Tab menu (main container)
54- ui_we_want_to_set .tab_menu = ui_we_want_to_set .menu .addMenu (
31+ ui_we_want_to_set .tab_menu : QMenu = ui_we_want_to_set .menu .addMenu (
5532 language_wrapper .language_word_dict .get ("tab_menu_label" )
5633 )
5734
@@ -64,15 +41,6 @@ def set_tab_menu(ui_we_want_to_set: EditorMain) -> None:
6441 )
6542 ui_we_want_to_set .tab_menu .addAction (ui_we_want_to_set .tab_menu .add_editor_action )
6643
67- # === Front Engine 分頁 ===
68- # === Front Engine Tab ===
69- ui_we_want_to_set .tab_menu .add_frontengine_action = QAction (
70- language_wrapper .language_word_dict .get ("tab_menu_add_frontengine_label" ))
71- ui_we_want_to_set .tab_menu .add_frontengine_action .triggered .connect (
72- lambda : add_frontengine_tab (ui_we_want_to_set )
73- )
74- ui_we_want_to_set .tab_menu .addAction (ui_we_want_to_set .tab_menu .add_frontengine_action )
75-
7644 # === Web 瀏覽器分頁 ===
7745 # === Web Browser Tab ===
7846 ui_we_want_to_set .tab_menu .add_web_action = QAction (
@@ -82,51 +50,6 @@ def set_tab_menu(ui_we_want_to_set: EditorMain) -> None:
8250 )
8351 ui_we_want_to_set .tab_menu .addAction (ui_we_want_to_set .tab_menu .add_web_action )
8452
85- # === IPython 分頁 ===
86- # === IPython Tab ===
87- ui_we_want_to_set .tab_menu .add_ipython_action = QAction (
88- language_wrapper .language_word_dict .get ("tab_menu_ipython_tab_name" ))
89- ui_we_want_to_set .tab_menu .add_ipython_action .triggered .connect (
90- lambda : add_ipython_tab (ui_we_want_to_set )
91- )
92- ui_we_want_to_set .tab_menu .addAction (ui_we_want_to_set .tab_menu .add_ipython_action )
93-
94- # === Chat UI 分頁 ===
95- # === Chat UI Tab ===
96- ui_we_want_to_set .tab_menu .add_chat_ui_action = QAction (
97- language_wrapper .language_word_dict .get ("tab_menu_chat_ui_tab_name" ))
98- ui_we_want_to_set .tab_menu .add_chat_ui_action .triggered .connect (
99- lambda : add_chat_ui_tab (ui_we_want_to_set )
100- )
101- ui_we_want_to_set .tab_menu .addAction (ui_we_want_to_set .tab_menu .add_chat_ui_action )
102-
103- # === Git Client 分頁 ===
104- # === Git Client Tab ===
105- ui_we_want_to_set .tab_menu .add_git_client_ui_action = QAction (
106- language_wrapper .language_word_dict .get ("tab_menu_git_client_tab_name" ))
107- ui_we_want_to_set .tab_menu .add_git_client_ui_action .triggered .connect (
108- lambda : add_git_client_tab (ui_we_want_to_set )
109- )
110- ui_we_want_to_set .tab_menu .addAction (ui_we_want_to_set .tab_menu .add_git_client_ui_action )
111-
112- # === Git Branch Tree 分頁 ===
113- # === Git Branch Tree Tab ===
114- ui_we_want_to_set .tab_menu .add_git_branch_view_ui_action = QAction (
115- language_wrapper .language_word_dict .get ("tab_menu_git_branch_tree_view_tab_name" ))
116- ui_we_want_to_set .tab_menu .add_git_branch_view_ui_action .triggered .connect (
117- lambda : add_git_tree_view_tab (ui_we_want_to_set )
118- )
119- ui_we_want_to_set .tab_menu .addAction (ui_we_want_to_set .tab_menu .add_git_branch_view_ui_action )
120-
121- # === Variable Inspector 分頁 ===
122- # === Variable Inspector Tab ===
123- ui_we_want_to_set .tab_menu .add_variable_inspector_ui_action = QAction (
124- language_wrapper .language_word_dict .get ("tab_menu_variable_inspector_tab_name" ))
125- ui_we_want_to_set .tab_menu .add_variable_inspector_ui_action .triggered .connect (
126- lambda : add_variable_inspector_tab (ui_we_want_to_set )
127- )
128- ui_we_want_to_set .tab_menu .addAction (ui_we_want_to_set .tab_menu .add_variable_inspector_ui_action )
129-
13053 # === Console 分頁 ===
13154 # === Console Tab ===
13255 ui_we_want_to_set .tab_menu .add_console_widget_ui_action = QAction (
@@ -136,14 +59,8 @@ def set_tab_menu(ui_we_want_to_set: EditorMain) -> None:
13659 )
13760 ui_we_want_to_set .tab_menu .addAction (ui_we_want_to_set .tab_menu .add_console_widget_ui_action )
13861
139- # === Code Diff Viewer 分頁 ===
140- # === Code Diff Viewer Tab ===
141- ui_we_want_to_set .tab_menu .add_code_diff_viewer_ui_action = QAction (
142- language_wrapper .language_word_dict .get ("tab_code_diff_viewer_tab_name" ))
143- ui_we_want_to_set .tab_menu .add_code_diff_viewer_ui_action .triggered .connect (
144- lambda : add_code_diff_compare_tab (ui_we_want_to_set )
145- )
146- ui_we_want_to_set .tab_menu .addAction (ui_we_want_to_set .tab_menu .add_code_diff_viewer_ui_action )
62+ set_tab_tools_menu (ui_we_want_to_set = ui_we_want_to_set )
63+ set_tab_git_menu (ui_we_want_to_set = ui_we_want_to_set )
14764
14865
14966# === 以下為各分頁新增函式 ===
@@ -161,16 +78,6 @@ def add_editor_tab(ui_we_want_to_set: EditorMain):
16178 return widget
16279
16380
164- def add_frontengine_tab (ui_we_want_to_set : EditorMain ):
165- # 新增 FrontEngine 分頁
166- # Add FrontEngine tab
167- jeditor_logger .info (f"build_tab_menu.py add frontengine tab ui_we_want_to_set: { ui_we_want_to_set } " )
168- ui_we_want_to_set .tab_widget .addTab (
169- FrontEngineMainUI (show_system_tray_ray = False , redirect_output = False ),
170- f"{ language_wrapper .language_word_dict .get ('tab_menu_frontengine_tab_name' )} "
171- f"{ ui_we_want_to_set .tab_widget .count ()} " )
172-
173-
17481def add_web_tab (ui_we_want_to_set : EditorMain ):
17582 # 紀錄日誌:新增 Web 分頁
17683 # Log: add a Web tab
@@ -184,71 +91,6 @@ def add_web_tab(ui_we_want_to_set: EditorMain):
18491 )
18592
18693
187- def add_ipython_tab (ui_we_want_to_set : EditorMain ):
188- # 紀錄日誌:新增 IPython 分頁
189- # Log: add an IPython tab
190- jeditor_logger .info (f"build_tab_menu.py add ipython tab ui_we_want_to_set: { ui_we_want_to_set } " )
191- # 在主編輯器中新增 IPython 互動式分頁
192- # Add an IPython interactive tab
193- ui_we_want_to_set .tab_widget .addTab (
194- IpythonWidget (ui_we_want_to_set ), # 建立 IPython 元件 / Create IPython widget
195- f"{ language_wrapper .language_word_dict .get ('tab_menu_ipython_tab_name' )} "
196- f"{ ui_we_want_to_set .tab_widget .count ()} "
197- )
198-
199-
200- def add_chat_ui_tab (ui_we_want_to_set : EditorMain ):
201- # 紀錄日誌:新增 Chat UI 分頁
202- # Log: add a Chat UI tab
203- jeditor_logger .info (f"build_tab_menu.py add chat_ui tab ui_we_want_to_set: { ui_we_want_to_set } " )
204- # 在主編輯器中新增聊天分頁
205- # Add a chat tab into the main editor
206- ui_we_want_to_set .tab_widget .addTab (
207- ChatUI (ui_we_want_to_set ), # 建立聊天元件 / Create Chat UI widget
208- f"{ language_wrapper .language_word_dict .get ('tab_menu_chat_ui_tab_name' )} "
209- f"{ ui_we_want_to_set .tab_widget .count ()} "
210- )
211-
212-
213- def add_git_client_tab (ui_we_want_to_set : EditorMain ):
214- # 紀錄日誌:新增 Git Client 分頁
215- # Log: add a Git Client tab
216- jeditor_logger .info (f"build_tab_menu.py add git client tab ui_we_want_to_set: { ui_we_want_to_set } " )
217- # 在主編輯器中新增 Git 客戶端分頁
218- # Add a Git client tab
219- ui_we_want_to_set .tab_widget .addTab (
220- GitGui (), # 建立 Git GUI 元件 / Create Git GUI widget
221- f"{ language_wrapper .language_word_dict .get ('tab_menu_git_client_tab_name' )} "
222- f"{ ui_we_want_to_set .tab_widget .count ()} "
223- )
224-
225-
226- def add_git_tree_view_tab (ui_we_want_to_set : EditorMain ):
227- # 紀錄日誌:新增 Git Branch Tree 分頁
228- # Log: add a Git Branch Tree tab
229- jeditor_logger .info (f"build_tab_menu.py add git tree view tab ui_we_want_to_set: { ui_we_want_to_set } " )
230- # 在主編輯器中新增 Git 分支樹狀圖分頁
231- # Add a Git branch tree view tab
232- ui_we_want_to_set .tab_widget .addTab (
233- GitTreeViewGUI (), # 建立 Git Tree View 元件 / Create Git Tree View widget
234- f"{ language_wrapper .language_word_dict .get ('tab_menu_git_branch_tree_view_tab_name' )} "
235- f"{ ui_we_want_to_set .tab_widget .count ()} "
236- )
237-
238-
239- def add_variable_inspector_tab (ui_we_want_to_set : EditorMain ):
240- # 紀錄日誌:新增 Variable Inspector 分頁
241- # Log: add a Variable Inspector tab
242- jeditor_logger .info (f"build_tab_menu.py add variable inspector tab ui_we_want_to_set: { ui_we_want_to_set } " )
243- # 在主編輯器中新增變數檢查器分頁
244- # Add a variable inspector tab
245- ui_we_want_to_set .tab_widget .addTab (
246- VariableInspector (), # 建立變數檢查器元件 / Create Variable Inspector widget
247- f"{ language_wrapper .language_word_dict .get ('tab_menu_variable_inspector_tab_name' )} "
248- f"{ ui_we_want_to_set .tab_widget .count ()} "
249- )
250-
251-
25294def add_console_widget_tab (ui_we_want_to_set : EditorMain ):
25395 # 紀錄日誌:新增 Console 分頁
25496 # Log: add a Console tab
@@ -260,16 +102,3 @@ def add_console_widget_tab(ui_we_want_to_set: EditorMain):
260102 f"{ language_wrapper .language_word_dict .get ('tab_menu_console_widget_tab_name' )} "
261103 f"{ ui_we_want_to_set .tab_widget .count ()} "
262104 )
263-
264-
265- def add_code_diff_compare_tab (ui_we_want_to_set : EditorMain ):
266- # 紀錄日誌:新增 Code Diff Compare 分頁
267- # Log: add a Code Diff Compare tab
268- jeditor_logger .info (f"build_tab_menu.py add code diff compare tab ui_we_want_to_set: { ui_we_want_to_set } " )
269- # 在主編輯器中新增程式碼差異比較分頁
270- # Add a code diff comparison tab
271- ui_we_want_to_set .tab_widget .addTab (
272- DiffViewerWidget (), # 建立程式碼比對元件 / Create Code Diff Viewer widget
273- f"{ language_wrapper .language_word_dict .get ('tab_code_diff_viewer_tab_name' )} "
274- f"{ ui_we_want_to_set .tab_widget .count ()} "
275- )
0 commit comments