Skip to content
Merged

Dev #213

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
6 changes: 3 additions & 3 deletions dev.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,16 @@ build-backend = "setuptools.build_meta"

[project]
name = "je_editor_dev"
version = "1.0.2"
version = "1.0.4"
authors = [
{ name = "JE-Chen", email = "jechenmailman@gmail.com" },
]
description = "JEditor is basic but powerful editor include GPT"
requires-python = ">=3.10"
license-files = ["LICENSE"]
dependencies = [
"PySide6==6.10.2", "qt-material", "yapf", "frontengine", "pycodestyle", "jedi",
"qtconsole", "langchain_openai==1.1.0", "langchain==1.1.2", "pydantic", "watchdog", "ruff", "gitpython"
"PySide6==6.11.0", "qt-material", "yapf", "frontengine", "pycodestyle", "jedi",
"qtconsole", "langchain_openai==1.1.12", "langchain==1.2.13", "pydantic", "watchdog", "ruff", "gitpython"
]
classifiers = [
"Programming Language :: Python :: 3.10",
Expand Down
6 changes: 3 additions & 3 deletions dev_requirements.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
PySide6==6.10.0
langchain_openai==1.0.2
langchain==1.0.3
PySide6==6.11.0
langchain_openai==1.1.12
langchain==1.2.13
ruff
sphinx
twine
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
from je_editor.pyside_ui.main_ui.console_widget.console_gui import ConsoleWidget
from je_editor.pyside_ui.main_ui.dock.destroy_dock import DestroyDock
from je_editor.pyside_ui.main_ui.editor.editor_widget_dock import FullEditorWidget
from je_editor.pyside_ui.main_ui.ipython_widget.rich_jupyter import IpythonWidget
from je_editor.pyside_ui.main_ui.ipython_widget.ipython_console import IpythonWidget
from je_editor.utils.file.open.open_file import read_file # 檔案讀取工具 / File reading utility
from je_editor.utils.logging.loggin_instance import jeditor_logger # 日誌紀錄器 / Logger
from je_editor.utils.multi_language.multi_language_wrapper import language_wrapper # 多語系支援 / Multi-language wrapper
Expand Down
86 changes: 86 additions & 0 deletions je_editor/pyside_ui/main_ui/menu/tab_menu/build_tab_git_menu.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
from __future__ import annotations

from typing import TYPE_CHECKING

from PySide6.QtGui import QAction

from je_editor.pyside_ui.git_ui.code_diff_compare.code_diff_viewer_widget import DiffViewerWidget

from je_editor.pyside_ui.git_ui.git_client.git_branch_tree_widget import GitTreeViewGUI

from je_editor.pyside_ui.git_ui.git_client.git_client_gui import GitGui

from je_editor.utils.logging.loggin_instance import jeditor_logger

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_tab_git_menu(ui_we_want_to_set: EditorMain) -> None:
ui_we_want_to_set.tab_menu.git_menu = ui_we_want_to_set.tab_menu.addMenu(
language_wrapper.language_word_dict.get("tab_menu_git_submenu_label")
)
# === Git Client 分頁 ===
# === Git Client Tab ===
ui_we_want_to_set.tab_menu.git_menu.add_git_client_ui_action = QAction(
language_wrapper.language_word_dict.get("tab_menu_git_client_tab_name"))
ui_we_want_to_set.tab_menu.git_menu.add_git_client_ui_action.triggered.connect(
lambda: add_git_client_tab(ui_we_want_to_set)
)
ui_we_want_to_set.tab_menu.git_menu.addAction(ui_we_want_to_set.tab_menu.git_menu.add_git_client_ui_action)

# === Git Branch Tree 分頁 ===
# === Git Branch Tree Tab ===
ui_we_want_to_set.tab_menu.git_menu.add_git_branch_view_ui_action = QAction(
language_wrapper.language_word_dict.get("tab_menu_git_branch_tree_view_tab_name"))
ui_we_want_to_set.tab_menu.git_menu.add_git_branch_view_ui_action.triggered.connect(
lambda: add_git_tree_view_tab(ui_we_want_to_set)
)
ui_we_want_to_set.tab_menu.git_menu.addAction(ui_we_want_to_set.tab_menu.git_menu.add_git_branch_view_ui_action)

# === Code Diff Viewer 分頁 ===
# === Code Diff Viewer Tab ===
ui_we_want_to_set.tab_menu.git_menu.add_code_diff_viewer_ui_action = QAction(
language_wrapper.language_word_dict.get("tab_code_diff_viewer_tab_name"))
ui_we_want_to_set.tab_menu.git_menu.add_code_diff_viewer_ui_action.triggered.connect(
lambda: add_code_diff_compare_tab(ui_we_want_to_set)
)
ui_we_want_to_set.tab_menu.git_menu.addAction(ui_we_want_to_set.tab_menu.git_menu.add_code_diff_viewer_ui_action)

def add_git_client_tab(ui_we_want_to_set: EditorMain):
# 紀錄日誌:新增 Git Client 分頁
# Log: add a Git Client tab
jeditor_logger.info(f"build_tab_menu.py add git client tab ui_we_want_to_set: {ui_we_want_to_set}")
# 在主編輯器中新增 Git 客戶端分頁
# Add a Git client tab
ui_we_want_to_set.tab_widget.addTab(
GitGui(), # 建立 Git GUI 元件 / Create Git GUI widget
f"{language_wrapper.language_word_dict.get('tab_menu_git_client_tab_name')} "
f"{ui_we_want_to_set.tab_widget.count()}"
)


def add_git_tree_view_tab(ui_we_want_to_set: EditorMain):
# 紀錄日誌:新增 Git Branch Tree 分頁
# Log: add a Git Branch Tree tab
jeditor_logger.info(f"build_tab_menu.py add git tree view tab ui_we_want_to_set: {ui_we_want_to_set}")
# 在主編輯器中新增 Git 分支樹狀圖分頁
# Add a Git branch tree view tab
ui_we_want_to_set.tab_widget.addTab(
GitTreeViewGUI(), # 建立 Git Tree View 元件 / Create Git Tree View widget
f"{language_wrapper.language_word_dict.get('tab_menu_git_branch_tree_view_tab_name')} "
f"{ui_we_want_to_set.tab_widget.count()}"
)

def add_code_diff_compare_tab(ui_we_want_to_set: EditorMain):
# 紀錄日誌:新增 Code Diff Compare 分頁
# Log: add a Code Diff Compare tab
jeditor_logger.info(f"build_tab_menu.py add code diff compare tab ui_we_want_to_set: {ui_we_want_to_set}")
# 在主編輯器中新增程式碼差異比較分頁
# Add a code diff comparison tab
ui_we_want_to_set.tab_widget.addTab(
DiffViewerWidget(), # 建立程式碼比對元件 / Create Code Diff Viewer widget
f"{language_wrapper.language_word_dict.get('tab_code_diff_viewer_tab_name')} "
f"{ui_we_want_to_set.tab_widget.count()}"
)
183 changes: 6 additions & 177 deletions je_editor/pyside_ui/main_ui/menu/tab_menu/build_tab_menu.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,46 +2,23 @@

from typing import TYPE_CHECKING

from frontengine import FrontEngineMainUI
from PySide6.QtWidgets import QMenu

from je_editor.pyside_ui.browser.main_browser_widget import MainBrowserWidget
from je_editor.pyside_ui.code.variable_inspector.inspector_gui import VariableInspector
# 匯入各種 UI 元件 (編輯器、瀏覽器、Git、變數檢查器、聊天、控制台、IPython、程式碼比對)
# Import various UI components (editor, browser, Git, variable inspector, chat, console, IPython, code diff)
from je_editor.pyside_ui.git_ui.code_diff_compare.code_diff_viewer_widget import DiffViewerWidget
from je_editor.pyside_ui.git_ui.git_client.git_branch_tree_widget import GitTreeViewGUI
from je_editor.pyside_ui.git_ui.git_client.git_client_gui import GitGui
from je_editor.pyside_ui.main_ui.ai_widget.chat_ui import ChatUI
from je_editor.pyside_ui.main_ui.console_widget.console_gui import ConsoleWidget
from je_editor.pyside_ui.main_ui.editor.editor_widget import EditorWidget
from je_editor.pyside_ui.main_ui.ipython_widget.rich_jupyter import IpythonWidget
from je_editor.pyside_ui.main_ui.menu.tab_menu.build_tab_git_menu import set_tab_git_menu
from je_editor.pyside_ui.main_ui.menu.tab_menu.build_tab_tools_menu import set_tab_tools_menu
from je_editor.utils.logging.loggin_instance import jeditor_logger

# 啟用未來的註解功能,允許在型別提示中使用字串形式的前向參照
# Enable future annotations, allowing forward references in type hints
# TYPE_CHECKING 用於避免在型別檢查時引入不必要的模組
# TYPE_CHECKING is used to avoid unnecessary imports during type checking
# 匯入 FrontEngine 主 UI
# Import the FrontEngine main UI
# 匯入日誌工具,用於記錄操作
# Import logger for recording operations

if TYPE_CHECKING:
from je_editor.pyside_ui.main_ui.main_editor import EditorMain
# 僅在型別檢查時匯入 EditorMain,避免循環依賴
# Import EditorMain only for type checking to avoid circular imports

from PySide6.QtGui import QAction
# 匯入 QAction,用於建立選單動作
# Import QAction for creating menu actions

from je_editor.utils.multi_language.multi_language_wrapper import language_wrapper


# 匯入多語言包裝器,用於支援多語系 UI
# Import language wrapper for multilingual UI support


def set_tab_menu(ui_we_want_to_set: EditorMain) -> None:
"""
設定主編輯器的分頁選單
Expand All @@ -51,7 +28,7 @@ def set_tab_menu(ui_we_want_to_set: EditorMain) -> None:

# 建立 Tab 選單 (主容器)
# Create the Tab menu (main container)
ui_we_want_to_set.tab_menu = ui_we_want_to_set.menu.addMenu(
ui_we_want_to_set.tab_menu: QMenu = ui_we_want_to_set.menu.addMenu(
language_wrapper.language_word_dict.get("tab_menu_label")
)

Expand All @@ -64,15 +41,6 @@ def set_tab_menu(ui_we_want_to_set: EditorMain) -> None:
)
ui_we_want_to_set.tab_menu.addAction(ui_we_want_to_set.tab_menu.add_editor_action)

# === Front Engine 分頁 ===
# === Front Engine Tab ===
ui_we_want_to_set.tab_menu.add_frontengine_action = QAction(
language_wrapper.language_word_dict.get("tab_menu_add_frontengine_label"))
ui_we_want_to_set.tab_menu.add_frontengine_action.triggered.connect(
lambda: add_frontengine_tab(ui_we_want_to_set)
)
ui_we_want_to_set.tab_menu.addAction(ui_we_want_to_set.tab_menu.add_frontengine_action)

# === Web 瀏覽器分頁 ===
# === Web Browser Tab ===
ui_we_want_to_set.tab_menu.add_web_action = QAction(
Expand All @@ -82,51 +50,6 @@ def set_tab_menu(ui_we_want_to_set: EditorMain) -> None:
)
ui_we_want_to_set.tab_menu.addAction(ui_we_want_to_set.tab_menu.add_web_action)

# === IPython 分頁 ===
# === IPython Tab ===
ui_we_want_to_set.tab_menu.add_ipython_action = QAction(
language_wrapper.language_word_dict.get("tab_menu_ipython_tab_name"))
ui_we_want_to_set.tab_menu.add_ipython_action.triggered.connect(
lambda: add_ipython_tab(ui_we_want_to_set)
)
ui_we_want_to_set.tab_menu.addAction(ui_we_want_to_set.tab_menu.add_ipython_action)

# === Chat UI 分頁 ===
# === Chat UI Tab ===
ui_we_want_to_set.tab_menu.add_chat_ui_action = QAction(
language_wrapper.language_word_dict.get("tab_menu_chat_ui_tab_name"))
ui_we_want_to_set.tab_menu.add_chat_ui_action.triggered.connect(
lambda: add_chat_ui_tab(ui_we_want_to_set)
)
ui_we_want_to_set.tab_menu.addAction(ui_we_want_to_set.tab_menu.add_chat_ui_action)

# === Git Client 分頁 ===
# === Git Client Tab ===
ui_we_want_to_set.tab_menu.add_git_client_ui_action = QAction(
language_wrapper.language_word_dict.get("tab_menu_git_client_tab_name"))
ui_we_want_to_set.tab_menu.add_git_client_ui_action.triggered.connect(
lambda: add_git_client_tab(ui_we_want_to_set)
)
ui_we_want_to_set.tab_menu.addAction(ui_we_want_to_set.tab_menu.add_git_client_ui_action)

# === Git Branch Tree 分頁 ===
# === Git Branch Tree Tab ===
ui_we_want_to_set.tab_menu.add_git_branch_view_ui_action = QAction(
language_wrapper.language_word_dict.get("tab_menu_git_branch_tree_view_tab_name"))
ui_we_want_to_set.tab_menu.add_git_branch_view_ui_action.triggered.connect(
lambda: add_git_tree_view_tab(ui_we_want_to_set)
)
ui_we_want_to_set.tab_menu.addAction(ui_we_want_to_set.tab_menu.add_git_branch_view_ui_action)

# === Variable Inspector 分頁 ===
# === Variable Inspector Tab ===
ui_we_want_to_set.tab_menu.add_variable_inspector_ui_action = QAction(
language_wrapper.language_word_dict.get("tab_menu_variable_inspector_tab_name"))
ui_we_want_to_set.tab_menu.add_variable_inspector_ui_action.triggered.connect(
lambda: add_variable_inspector_tab(ui_we_want_to_set)
)
ui_we_want_to_set.tab_menu.addAction(ui_we_want_to_set.tab_menu.add_variable_inspector_ui_action)

# === Console 分頁 ===
# === Console Tab ===
ui_we_want_to_set.tab_menu.add_console_widget_ui_action = QAction(
Expand All @@ -136,14 +59,8 @@ def set_tab_menu(ui_we_want_to_set: EditorMain) -> None:
)
ui_we_want_to_set.tab_menu.addAction(ui_we_want_to_set.tab_menu.add_console_widget_ui_action)

# === Code Diff Viewer 分頁 ===
# === Code Diff Viewer Tab ===
ui_we_want_to_set.tab_menu.add_code_diff_viewer_ui_action = QAction(
language_wrapper.language_word_dict.get("tab_code_diff_viewer_tab_name"))
ui_we_want_to_set.tab_menu.add_code_diff_viewer_ui_action.triggered.connect(
lambda: add_code_diff_compare_tab(ui_we_want_to_set)
)
ui_we_want_to_set.tab_menu.addAction(ui_we_want_to_set.tab_menu.add_code_diff_viewer_ui_action)
set_tab_tools_menu(ui_we_want_to_set=ui_we_want_to_set)
set_tab_git_menu(ui_we_want_to_set=ui_we_want_to_set)


# === 以下為各分頁新增函式 ===
Expand All @@ -161,16 +78,6 @@ def add_editor_tab(ui_we_want_to_set: EditorMain):
return widget


def add_frontengine_tab(ui_we_want_to_set: EditorMain):
# 新增 FrontEngine 分頁
# Add FrontEngine tab
jeditor_logger.info(f"build_tab_menu.py add frontengine tab ui_we_want_to_set: {ui_we_want_to_set}")
ui_we_want_to_set.tab_widget.addTab(
FrontEngineMainUI(show_system_tray_ray=False, redirect_output=False),
f"{language_wrapper.language_word_dict.get('tab_menu_frontengine_tab_name')} "
f"{ui_we_want_to_set.tab_widget.count()}")


def add_web_tab(ui_we_want_to_set: EditorMain):
# 紀錄日誌:新增 Web 分頁
# Log: add a Web tab
Expand All @@ -184,71 +91,6 @@ def add_web_tab(ui_we_want_to_set: EditorMain):
)


def add_ipython_tab(ui_we_want_to_set: EditorMain):
# 紀錄日誌:新增 IPython 分頁
# Log: add an IPython tab
jeditor_logger.info(f"build_tab_menu.py add ipython tab ui_we_want_to_set: {ui_we_want_to_set}")
# 在主編輯器中新增 IPython 互動式分頁
# Add an IPython interactive tab
ui_we_want_to_set.tab_widget.addTab(
IpythonWidget(ui_we_want_to_set), # 建立 IPython 元件 / Create IPython widget
f"{language_wrapper.language_word_dict.get('tab_menu_ipython_tab_name')} "
f"{ui_we_want_to_set.tab_widget.count()}"
)


def add_chat_ui_tab(ui_we_want_to_set: EditorMain):
# 紀錄日誌:新增 Chat UI 分頁
# Log: add a Chat UI tab
jeditor_logger.info(f"build_tab_menu.py add chat_ui tab ui_we_want_to_set: {ui_we_want_to_set}")
# 在主編輯器中新增聊天分頁
# Add a chat tab into the main editor
ui_we_want_to_set.tab_widget.addTab(
ChatUI(ui_we_want_to_set), # 建立聊天元件 / Create Chat UI widget
f"{language_wrapper.language_word_dict.get('tab_menu_chat_ui_tab_name')} "
f"{ui_we_want_to_set.tab_widget.count()}"
)


def add_git_client_tab(ui_we_want_to_set: EditorMain):
# 紀錄日誌:新增 Git Client 分頁
# Log: add a Git Client tab
jeditor_logger.info(f"build_tab_menu.py add git client tab ui_we_want_to_set: {ui_we_want_to_set}")
# 在主編輯器中新增 Git 客戶端分頁
# Add a Git client tab
ui_we_want_to_set.tab_widget.addTab(
GitGui(), # 建立 Git GUI 元件 / Create Git GUI widget
f"{language_wrapper.language_word_dict.get('tab_menu_git_client_tab_name')} "
f"{ui_we_want_to_set.tab_widget.count()}"
)


def add_git_tree_view_tab(ui_we_want_to_set: EditorMain):
# 紀錄日誌:新增 Git Branch Tree 分頁
# Log: add a Git Branch Tree tab
jeditor_logger.info(f"build_tab_menu.py add git tree view tab ui_we_want_to_set: {ui_we_want_to_set}")
# 在主編輯器中新增 Git 分支樹狀圖分頁
# Add a Git branch tree view tab
ui_we_want_to_set.tab_widget.addTab(
GitTreeViewGUI(), # 建立 Git Tree View 元件 / Create Git Tree View widget
f"{language_wrapper.language_word_dict.get('tab_menu_git_branch_tree_view_tab_name')} "
f"{ui_we_want_to_set.tab_widget.count()}"
)


def add_variable_inspector_tab(ui_we_want_to_set: EditorMain):
# 紀錄日誌:新增 Variable Inspector 分頁
# Log: add a Variable Inspector tab
jeditor_logger.info(f"build_tab_menu.py add variable inspector tab ui_we_want_to_set: {ui_we_want_to_set}")
# 在主編輯器中新增變數檢查器分頁
# Add a variable inspector tab
ui_we_want_to_set.tab_widget.addTab(
VariableInspector(), # 建立變數檢查器元件 / Create Variable Inspector widget
f"{language_wrapper.language_word_dict.get('tab_menu_variable_inspector_tab_name')} "
f"{ui_we_want_to_set.tab_widget.count()}"
)


def add_console_widget_tab(ui_we_want_to_set: EditorMain):
# 紀錄日誌:新增 Console 分頁
# Log: add a Console tab
Expand All @@ -260,16 +102,3 @@ def add_console_widget_tab(ui_we_want_to_set: EditorMain):
f"{language_wrapper.language_word_dict.get('tab_menu_console_widget_tab_name')} "
f"{ui_we_want_to_set.tab_widget.count()}"
)


def add_code_diff_compare_tab(ui_we_want_to_set: EditorMain):
# 紀錄日誌:新增 Code Diff Compare 分頁
# Log: add a Code Diff Compare tab
jeditor_logger.info(f"build_tab_menu.py add code diff compare tab ui_we_want_to_set: {ui_we_want_to_set}")
# 在主編輯器中新增程式碼差異比較分頁
# Add a code diff comparison tab
ui_we_want_to_set.tab_widget.addTab(
DiffViewerWidget(), # 建立程式碼比對元件 / Create Code Diff Viewer widget
f"{language_wrapper.language_word_dict.get('tab_code_diff_viewer_tab_name')} "
f"{ui_we_want_to_set.tab_widget.count()}"
)
Loading
Loading