je-editor 0.0.142__py3-none-any.whl → 0.0.144__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. je_editor/__init__.py +23 -23
  2. je_editor/pyside_ui/code/{code_editor → plaintext_code_edit}/code_edit_plaintext.py +2 -2
  3. je_editor/pyside_ui/code/syntax/python_syntax.py +1 -2
  4. je_editor/pyside_ui/code/syntax/syntax_setting.py +1 -1
  5. je_editor/pyside_ui/dialog/file_dialog/open_file_dialog.py +3 -3
  6. je_editor/pyside_ui/dialog/file_dialog/save_file_dialog.py +1 -1
  7. je_editor/pyside_ui/main_ui/dock/destroy_dock.py +14 -0
  8. je_editor/pyside_ui/main_ui/editor/editor_widget.py +2 -2
  9. je_editor/pyside_ui/main_ui/editor/editor_widget_full.py +31 -0
  10. je_editor/pyside_ui/main_ui/main_editor.py +2 -3
  11. je_editor/pyside_ui/main_ui/menu/dock_menu/__init__.py +0 -0
  12. je_editor/pyside_ui/main_ui/menu/dock_menu/build_dock_menu.py +74 -0
  13. je_editor/pyside_ui/main_ui/menu/help_menu/build_help_menu.py +22 -14
  14. je_editor/pyside_ui/main_ui/menu/set_menu_bar.py +2 -0
  15. je_editor/pyside_ui/main_ui/menu/tab_menu/build_tab_menu.py +15 -0
  16. je_editor/pyside_ui/main_ui/menu/venv_menu/build_venv_menu.py +1 -1
  17. je_editor/start_editor.py +1 -1
  18. je_editor/utils/file/open/open_file.py +0 -3
  19. je_editor/utils/file/save/save_file.py +0 -1
  20. {je_editor-0.0.142.dist-info → je_editor-0.0.144.dist-info}/METADATA +1 -1
  21. {je_editor-0.0.142.dist-info → je_editor-0.0.144.dist-info}/RECORD +28 -25
  22. je_editor/pyside_ui/main_ui/main_ui_setting/ui_setting.py +0 -11
  23. /je_editor/pyside_ui/code/{code_editor → plaintext_code_edit}/__init__.py +0 -0
  24. /je_editor/pyside_ui/code/{code_result → textedit_code_result}/__init__.py +0 -0
  25. /je_editor/pyside_ui/code/{code_result → textedit_code_result}/code_record.py +0 -0
  26. /je_editor/pyside_ui/main_ui/{main_ui_setting → dock}/__init__.py +0 -0
  27. {je_editor-0.0.142.dist-info → je_editor-0.0.144.dist-info}/LICENSE +0 -0
  28. {je_editor-0.0.142.dist-info → je_editor-0.0.144.dist-info}/WHEEL +0 -0
  29. {je_editor-0.0.142.dist-info → je_editor-0.0.144.dist-info}/top_level.txt +0 -0
je_editor/__init__.py CHANGED
@@ -1,37 +1,37 @@
1
1
  # start editor
2
- from je_editor.start_editor import start_editor
2
+ # Browser
3
+ from je_editor.pyside_ui.browser.je_broser import JEBrowser
4
+ from je_editor.pyside_ui.code.code_process.code_exec import ExecManager
5
+ # Exec and shell
6
+ from je_editor.pyside_ui.code.code_process.code_exec import exec_manage
7
+ # Highlight
8
+ from je_editor.pyside_ui.code.complete_list.total_complete_list import complete_list
9
+ from je_editor.pyside_ui.code.shell_process.shell_exec import ShellManager
10
+ from je_editor.pyside_ui.code.shell_process.shell_exec import default_shell_manager
11
+ from je_editor.pyside_ui.code.syntax.python_syntax import PythonHighlighter
12
+ from je_editor.pyside_ui.code.syntax.syntax_setting import syntax_word_setting_dict, syntax_rule_setting_dict
13
+ # Color
14
+ from je_editor.pyside_ui.colors.global_color import error_color
15
+ from je_editor.pyside_ui.colors.global_color import output_color
16
+ from je_editor.pyside_ui.main_ui.editor.editor_widget import EditorWidget
17
+ from je_editor.pyside_ui.main_ui.editor.editor_widget_full import FullEditorWidget
18
+ from je_editor.pyside_ui.main_ui.main_editor import EDITOR_EXTEND_TAB
3
19
  # Editor
4
20
  from je_editor.pyside_ui.main_ui.main_editor import EditorMain
5
- from je_editor.pyside_ui.main_ui.main_editor import EDITOR_EXTEND_TAB
6
- from je_editor.pyside_ui.main_ui.editor.editor_widget import EditorWidget
21
+ from je_editor.start_editor import start_editor
22
+ from je_editor.utils.exception.exceptions import JEditorCantFindLanguageException
23
+ from je_editor.utils.exception.exceptions import JEditorContentFileException
7
24
  # Exceptions
8
25
  from je_editor.utils.exception.exceptions import JEditorException
9
26
  from je_editor.utils.exception.exceptions import JEditorExecException
27
+ from je_editor.utils.exception.exceptions import JEditorJsonException
28
+ from je_editor.utils.exception.exceptions import JEditorOpenFileException
10
29
  from je_editor.utils.exception.exceptions import JEditorRunOnShellException
11
30
  from je_editor.utils.exception.exceptions import JEditorSaveFileException
12
- from je_editor.utils.exception.exceptions import JEditorOpenFileException
13
- from je_editor.utils.exception.exceptions import JEditorContentFileException
14
- from je_editor.utils.exception.exceptions import JEditorCantFindLanguageException
15
- from je_editor.utils.exception.exceptions import JEditorJsonException
16
- # Color
17
- from je_editor.pyside_ui.colors.global_color import error_color
18
- from je_editor.pyside_ui.colors.global_color import output_color
19
- # Exec and shell
20
- from je_editor.pyside_ui.code.code_process.code_exec import exec_manage
21
- from je_editor.pyside_ui.code.code_process.code_exec import ExecManager
22
- from je_editor.pyside_ui.code.shell_process.shell_exec import default_shell_manager
23
- from je_editor.pyside_ui.code.shell_process.shell_exec import ShellManager
24
- # Browser
25
- from je_editor.pyside_ui.browser.je_broser import JEBrowser
26
- # Highlight
27
- from je_editor.pyside_ui.code.complete_list.total_complete_list import complete_list
28
- from je_editor.pyside_ui.code.syntax.python_syntax import PythonHighlighter
29
- from je_editor.pyside_ui.code.syntax.syntax_setting import syntax_word_setting_dict, syntax_rule_setting_dict
30
-
31
31
 
32
32
  __all__ = [
33
33
  "start_editor", "EditorMain", "EDITOR_EXTEND_TAB",
34
- "JEditorException", "JEditorExecException",
34
+ "JEditorException", "JEditorExecException", "FullEditorWidget",
35
35
  "JEditorRunOnShellException", "JEditorSaveFileException", "syntax_rule_setting_dict",
36
36
  "JEditorOpenFileException", "JEditorContentFileException", "syntax_word_setting_dict",
37
37
  "JEditorCantFindLanguageException", "JEditorJsonException", "PythonHighlighter",
@@ -6,8 +6,8 @@ from PySide6.QtGui import QPainter, QColor, QTextCharFormat, QTextFormat, QKeyEv
6
6
  from PySide6.QtWidgets import QPlainTextEdit, QWidget, QTextEdit, QCompleter
7
7
 
8
8
  from je_editor.pyside_ui.code.complete_list.total_complete_list import complete_list
9
- from je_editor.pyside_ui.dialog.search_ui.search_text_box import SearchBox
10
9
  from je_editor.pyside_ui.code.syntax.python_syntax import PythonHighlighter
10
+ from je_editor.pyside_ui.dialog.search_ui.search_text_box import SearchBox
11
11
 
12
12
 
13
13
  class CodeEditor(QPlainTextEdit):
@@ -131,7 +131,7 @@ class CodeEditor(QPlainTextEdit):
131
131
 
132
132
  def line_number_paint(self, event) -> None:
133
133
  painter = QPainter(self.line_number)
134
- painter.fillRect(event.rect(), QColor(51, 51, 77))
134
+ painter.fillRect(event.rect(), Qt.GlobalColor.gray)
135
135
  block = self.firstVisibleBlock()
136
136
  block_number = block.blockNumber()
137
137
  top = self.blockBoundingGeometry(block).translated(self.contentOffset()).top()
@@ -17,7 +17,7 @@ class PythonHighlighter(QSyntaxHighlighter):
17
17
  text_char_format = QTextCharFormat()
18
18
  text_char_format.setForeground(color)
19
19
  for word in rule_variable_dict.get("words"):
20
- pattern = QRegularExpression(rf"{word}")
20
+ pattern = QRegularExpression(rf"\b{word}\b")
21
21
  self.highlight_rules.append((pattern, text_char_format))
22
22
 
23
23
  for rule_variable_dict in syntax_rule_setting_dict.values():
@@ -34,4 +34,3 @@ class PythonHighlighter(QSyntaxHighlighter):
34
34
  while match_iterator.hasNext():
35
35
  match = match_iterator.next()
36
36
  self.setFormat(match.capturedStart(), match.capturedLength(), pattern_format)
37
-
@@ -9,7 +9,7 @@ syntax_rule_setting_dict: dict = {
9
9
  },
10
10
  "comment_rule": {
11
11
  "rules": (r"#[^\n]*",),
12
- "color": QColor(179, 204, 204)
12
+ "color": QColor(0, 230, 0)
13
13
  },
14
14
  "string_rule": {
15
15
  "rules": (
@@ -1,10 +1,10 @@
1
1
  from __future__ import annotations
2
2
 
3
+ from pathlib import Path
3
4
  from typing import TYPE_CHECKING
4
5
 
5
6
  if TYPE_CHECKING:
6
7
  from je_editor.pyside_ui.main_ui.main_editor import EditorMain
7
- import os
8
8
 
9
9
  from PySide6.QtWidgets import QFileDialog
10
10
 
@@ -20,10 +20,10 @@ def choose_file_get_open_file_path(parent_qt_instance: EditorMain) -> None:
20
20
  :return: None
21
21
  """
22
22
  widget = parent_qt_instance.tab_widget.currentWidget()
23
- if type(widget) is EditorWidget:
23
+ if isinstance(widget, EditorWidget):
24
24
  file_path = QFileDialog().getOpenFileName(
25
25
  parent=parent_qt_instance,
26
- dir=os.getcwd()
26
+ dir=str(Path.cwd())
27
27
  )[0]
28
28
  if file_path is not None and file_path != "":
29
29
  widget.current_file = file_path
@@ -18,7 +18,7 @@ def choose_file_get_save_file_path(parent_qt_instance: EditorMain) -> bool:
18
18
  :return: save code edit content to file
19
19
  """
20
20
  widget = parent_qt_instance.tab_widget.currentWidget()
21
- if type(widget) is EditorWidget:
21
+ if isinstance(widget, EditorWidget):
22
22
  file_path = QFileDialog().getSaveFileName(
23
23
  parent=parent_qt_instance,
24
24
  dir=os.getcwd()
@@ -0,0 +1,14 @@
1
+ from PySide6.QtCore import Qt
2
+ from PySide6.QtWidgets import QDockWidget
3
+
4
+
5
+ class DestroyDock(QDockWidget):
6
+
7
+ def __init__(self):
8
+ super().__init__()
9
+ self.setAllowedAreas(Qt.DockWidgetArea.AllDockWidgetAreas)
10
+ self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
11
+
12
+ def closeEvent(self, event) -> None:
13
+ self.widget().closeEvent(event)
14
+ super().closeEvent(event)
@@ -6,8 +6,8 @@ from PySide6.QtCore import Qt, QFileInfo, QDir
6
6
  from PySide6.QtWidgets import QWidget, QGridLayout, QSplitter, QScrollArea, QFileSystemModel, QTreeView
7
7
 
8
8
  from je_editor.pyside_ui.code.auto_save.auto_save_thread import SaveThread
9
- from je_editor.pyside_ui.code.code_editor.code_edit_plaintext import CodeEditor
10
- from je_editor.pyside_ui.code.code_result.code_record import CodeRecord
9
+ from je_editor.pyside_ui.code.plaintext_code_edit.code_edit_plaintext import CodeEditor
10
+ from je_editor.pyside_ui.code.textedit_code_result.code_record import CodeRecord
11
11
  from je_editor.pyside_ui.main_ui.save_user_setting.user_setting_file import user_setting_dict, \
12
12
  write_user_setting
13
13
  from je_editor.utils.file.open.open_file import read_file
@@ -0,0 +1,31 @@
1
+ from pathlib import Path
2
+
3
+ from PySide6.QtWidgets import QWidget, QGridLayout, QScrollArea
4
+
5
+ from je_editor.pyside_ui.code.plaintext_code_edit.code_edit_plaintext import CodeEditor
6
+ from je_editor.utils.file.save.save_file import write_file
7
+
8
+
9
+ class FullEditorWidget(QWidget):
10
+
11
+ def __init__(self, current_file: str):
12
+ super().__init__()
13
+ # Init variable
14
+ self.auto_save_thread = None
15
+ self.current_file = current_file
16
+ # UI
17
+ self.grid_layout = QGridLayout(self)
18
+ self.setWindowTitle("JEditor")
19
+ # code edit and code result plaintext
20
+ self.code_edit = CodeEditor()
21
+ self.code_edit_scroll_area = QScrollArea()
22
+ self.code_edit_scroll_area.setWidgetResizable(True)
23
+ self.code_edit_scroll_area.setViewportMargins(0, 0, 0, 0)
24
+ self.code_edit_scroll_area.setWidget(self.code_edit)
25
+ self.grid_layout.addWidget(self.code_edit_scroll_area, 0, 0)
26
+
27
+ def closeEvent(self, event) -> None:
28
+ path = Path(self.current_file)
29
+ if path.exists() and path.is_file():
30
+ write_file(self.current_file, self.code_edit.toPlainText())
31
+ super().closeEvent(event)
@@ -8,20 +8,19 @@ from PySide6.QtCore import QTimer
8
8
  from PySide6.QtGui import QFontDatabase, QAction, QIcon
9
9
  from PySide6.QtWidgets import QMainWindow, QWidget, QTabWidget
10
10
  from frontengine import FrontEngineMainUI
11
+ from frontengine import RedirectManager
11
12
  from qt_material import QtStyleTools
12
13
 
13
14
  from je_editor.pyside_ui.browser.je_broser import JEBrowser
14
15
  from je_editor.pyside_ui.code.shell_process.shell_exec import default_shell_manager
15
16
  from je_editor.pyside_ui.colors.global_color import error_color, output_color
16
17
  from je_editor.pyside_ui.main_ui.editor.editor_widget import EditorWidget
17
- from je_editor.pyside_ui.main_ui.main_ui_setting.ui_setting import set_ui
18
18
  from je_editor.pyside_ui.main_ui.menu.set_menu_bar import set_menu_bar
19
19
  from je_editor.pyside_ui.main_ui.save_user_setting.user_setting_file import user_setting_dict, read_user_setting
20
20
  from je_editor.pyside_ui.main_ui.system_tray.extend_system_tray import ExtendSystemTray
21
21
  from je_editor.utils.encodings.python_encodings import python_encodings_list
22
22
  from je_editor.utils.file.open.open_file import read_file
23
23
  from je_editor.utils.redirect_manager.redirect_manager_class import redirect_manager_instance
24
- from frontengine import RedirectManager
25
24
 
26
25
  EDITOR_EXTEND_TAB: Dict[str, Type[QWidget]] = {}
27
26
 
@@ -64,7 +63,7 @@ class EditorMain(QMainWindow, QtStyleTools):
64
63
  self.redirect_timer = QTimer(self)
65
64
  self.redirect_timer.setInterval(1)
66
65
  self.redirect_timer.start()
67
- set_ui(self)
66
+ self.setWindowTitle("JEditor")
68
67
  set_menu_bar(self)
69
68
  # Set font and font size menu
70
69
  self.add_font_menu()
File without changes
@@ -0,0 +1,74 @@
1
+ from __future__ import annotations
2
+
3
+ from pathlib import Path
4
+ from typing import TYPE_CHECKING
5
+
6
+ from PySide6.QtCore import Qt
7
+ from PySide6.QtGui import QAction
8
+ from PySide6.QtWidgets import QFileDialog
9
+ from frontengine import FrontEngineMainUI
10
+
11
+ from je_editor.pyside_ui.browser.je_broser import JEBrowser
12
+ from je_editor.pyside_ui.main_ui.dock.destroy_dock import DestroyDock
13
+ from je_editor.pyside_ui.main_ui.editor.editor_widget_full import FullEditorWidget
14
+ from je_editor.utils.file.open.open_file import read_file
15
+
16
+ if TYPE_CHECKING:
17
+ from je_editor.pyside_ui.main_ui.main_editor import EditorMain
18
+
19
+
20
+ def set_dock_menu(ui_we_want_to_set: EditorMain) -> None:
21
+ # Browser
22
+ ui_we_want_to_set.dock_menu = ui_we_want_to_set.menu.addMenu("Dock")
23
+ ui_we_want_to_set.dock_menu.new_dock_browser_action = QAction("New Dock Browser")
24
+ ui_we_want_to_set.dock_menu.new_dock_browser_action.triggered.connect(
25
+ lambda: add_dock_widget(ui_we_want_to_set)
26
+ )
27
+ ui_we_want_to_set.dock_menu.addAction(ui_we_want_to_set.dock_menu.new_dock_browser_action)
28
+ # Stackoverflow
29
+ ui_we_want_to_set.dock_menu.new_dock_stackoverflow_action = QAction("New Dock Stackoverflow")
30
+ ui_we_want_to_set.dock_menu.new_dock_stackoverflow_action.triggered.connect(
31
+ lambda: add_dock_widget(ui_we_want_to_set, "stackoverflow")
32
+ )
33
+ ui_we_want_to_set.dock_menu.addAction(ui_we_want_to_set.dock_menu.new_dock_stackoverflow_action)
34
+ # Editor
35
+ ui_we_want_to_set.dock_menu.new_tab_dock_editor_action = QAction("New Dock Editor")
36
+ ui_we_want_to_set.dock_menu.new_tab_dock_editor_action.triggered.connect(
37
+ lambda: add_dock_widget(ui_we_want_to_set, "editor")
38
+ )
39
+ ui_we_want_to_set.dock_menu.addAction(ui_we_want_to_set.dock_menu.new_tab_dock_editor_action)
40
+ # FrontEngine
41
+ ui_we_want_to_set.dock_menu.new_frontengine = QAction("New Dock FrontEngine")
42
+ ui_we_want_to_set.dock_menu.new_frontengine.triggered.connect(
43
+ lambda: add_dock_widget(ui_we_want_to_set, "frontengine")
44
+ )
45
+ ui_we_want_to_set.dock_menu.addAction(ui_we_want_to_set.dock_menu.new_frontengine)
46
+
47
+
48
+ def add_dock_widget(ui_we_want_to_set: EditorMain, widget_type: str = None):
49
+ # Dock widget
50
+ dock_widget = DestroyDock()
51
+ if widget_type == "stackoverflow":
52
+ dock_widget.setWindowTitle("stackoverflow")
53
+ dock_widget.setWidget(JEBrowser(
54
+ start_url="https://stackoverflow.com/", search_prefix="https://stackoverflow.com/search?q="))
55
+ elif widget_type == "editor":
56
+ file_path = QFileDialog().getOpenFileName(
57
+ parent=ui_we_want_to_set,
58
+ dir=str(Path.cwd())
59
+ )[0]
60
+ if file_path is not None and file_path != "":
61
+ widget = FullEditorWidget(current_file=file_path)
62
+ file_content = read_file(file_path)[1]
63
+ widget.code_edit.setPlainText(
64
+ file_content
65
+ )
66
+ dock_widget.setWindowTitle("editor")
67
+ dock_widget.setWidget(widget)
68
+ elif widget_type == "frontengine":
69
+ dock_widget.setWindowTitle("frontengine")
70
+ dock_widget.setWidget(FrontEngineMainUI())
71
+ else:
72
+ dock_widget.setWindowTitle("browser")
73
+ dock_widget.setWidget(JEBrowser())
74
+ ui_we_want_to_set.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, dock_widget)
@@ -2,9 +2,10 @@ from __future__ import annotations
2
2
 
3
3
  from typing import TYPE_CHECKING
4
4
 
5
+ from je_editor.pyside_ui.browser.je_broser import JEBrowser
6
+
5
7
  if TYPE_CHECKING:
6
8
  from je_editor.pyside_ui.main_ui.main_editor import EditorMain
7
- import webbrowser
8
9
 
9
10
  from PySide6.QtGui import QAction
10
11
  from PySide6.QtWidgets import QMessageBox
@@ -12,27 +13,34 @@ from PySide6.QtWidgets import QMessageBox
12
13
 
13
14
  def set_help_menu(ui_we_want_to_set: EditorMain) -> None:
14
15
  ui_we_want_to_set.help_menu = ui_we_want_to_set.menu.addMenu("Help")
15
- ui_we_want_to_set.help_menu .help_github_action = QAction("GitHub")
16
- ui_we_want_to_set.help_menu .help_github_action.triggered.connect(
17
- lambda: open_web_browser("https://github.com/Integrated-Testing-Environment/je_editor")
16
+ ui_we_want_to_set.help_menu.help_github_action = QAction("GitHub")
17
+ ui_we_want_to_set.help_menu.help_github_action.triggered.connect(
18
+ lambda: open_web_browser(
19
+ ui_we_want_to_set,
20
+ "https://github.com/Integrated-Testing-Environment/je_editor", "GitHub")
18
21
  )
19
- ui_we_want_to_set.help_menu.addAction(ui_we_want_to_set.help_menu .help_github_action)
22
+ ui_we_want_to_set.help_menu.addAction(ui_we_want_to_set.help_menu.help_github_action)
20
23
 
21
- ui_we_want_to_set.help_menu .help_doc_action = QAction("Doc")
22
- ui_we_want_to_set.help_menu .help_doc_action.triggered.connect(
23
- lambda: open_web_browser("https://je-editor.readthedocs.io/en/latest/")
24
+ ui_we_want_to_set.help_menu.help_doc_action = QAction("Doc")
25
+ ui_we_want_to_set.help_menu.help_doc_action.triggered.connect(
26
+ lambda: open_web_browser(
27
+ ui_we_want_to_set,
28
+ "https://je-editor.readthedocs.io/en/latest/", "Doc")
24
29
  )
25
- ui_we_want_to_set.help_menu.addAction(ui_we_want_to_set.help_menu .help_doc_action)
30
+ ui_we_want_to_set.help_menu.addAction(ui_we_want_to_set.help_menu.help_doc_action)
26
31
 
27
- ui_we_want_to_set.help_menu .help_about_action = QAction("About")
28
- ui_we_want_to_set.help_menu .help_about_action.triggered.connect(
32
+ ui_we_want_to_set.help_menu.help_about_action = QAction("About")
33
+ ui_we_want_to_set.help_menu.help_about_action.triggered.connect(
29
34
  show_about
30
35
  )
31
36
  ui_we_want_to_set.help_menu.addAction(ui_we_want_to_set.help_menu.help_about_action)
32
37
 
33
38
 
34
- def open_web_browser(url: str):
35
- webbrowser.open(url=url)
39
+ def open_web_browser(ui_we_want_to_set: EditorMain, url: str, tab_name: str):
40
+ ui_we_want_to_set.tab_widget.addTab(
41
+ JEBrowser(start_url=url),
42
+ f"{tab_name}{ui_we_want_to_set.tab_widget.count()}"
43
+ )
36
44
 
37
45
 
38
46
  def show_about():
@@ -40,7 +48,7 @@ def show_about():
40
48
  message_box.setText(
41
49
  """
42
50
  JEditor
43
- Create by JE-Chen
51
+ Create by JE-Chen 2020 ~ Now
44
52
  """
45
53
  )
46
54
  message_box.exec()
@@ -2,6 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from typing import TYPE_CHECKING
4
4
 
5
+ from je_editor.pyside_ui.main_ui.menu.dock_menu.build_dock_menu import set_dock_menu
5
6
  from je_editor.pyside_ui.main_ui.menu.tab_menu.build_tab_menu import set_tab_menu
6
7
 
7
8
  if TYPE_CHECKING:
@@ -25,4 +26,5 @@ def set_menu_bar(ui_we_want_to_set: EditorMain) -> None:
25
26
  set_help_menu(ui_we_want_to_set)
26
27
  set_venv_menu(ui_we_want_to_set)
27
28
  set_tab_menu(ui_we_want_to_set)
29
+ set_dock_menu(ui_we_want_to_set)
28
30
  ui_we_want_to_set.setMenuBar(ui_we_want_to_set.menu)
@@ -13,22 +13,31 @@ from PySide6.QtGui import QAction
13
13
 
14
14
 
15
15
  def set_tab_menu(ui_we_want_to_set: EditorMain) -> None:
16
+ # Editor
16
17
  ui_we_want_to_set.tab_menu = ui_we_want_to_set.menu.addMenu("Tab")
17
18
  ui_we_want_to_set.tab_menu.add_editor_action = QAction("Add Editor Tab")
18
19
  ui_we_want_to_set.tab_menu.add_editor_action.triggered.connect(
19
20
  lambda: add_editor_tab(ui_we_want_to_set)
20
21
  )
22
+ # Front Engine
21
23
  ui_we_want_to_set.tab_menu.addAction(ui_we_want_to_set.tab_menu.add_editor_action)
22
24
  ui_we_want_to_set.tab_menu.add_frontengine_action = QAction("Add FrontEngine Tab")
23
25
  ui_we_want_to_set.tab_menu.add_frontengine_action.triggered.connect(
24
26
  lambda: add_frontengine_tab(ui_we_want_to_set)
25
27
  )
28
+ # Web
26
29
  ui_we_want_to_set.tab_menu.addAction(ui_we_want_to_set.tab_menu.add_frontengine_action)
27
30
  ui_we_want_to_set.tab_menu.add_web_action = QAction("Add WEB Tab")
28
31
  ui_we_want_to_set.tab_menu.add_web_action.triggered.connect(
29
32
  lambda: add_web_tab(ui_we_want_to_set)
30
33
  )
31
34
  ui_we_want_to_set.tab_menu.addAction(ui_we_want_to_set.tab_menu.add_web_action)
35
+ # Stackoverflow
36
+ ui_we_want_to_set.tab_menu.add_stackoverflow_action = QAction("Add Stackoverflow Tab")
37
+ ui_we_want_to_set.tab_menu.add_stackoverflow_action.triggered.connect(
38
+ lambda: add_stackoverflow(ui_we_want_to_set)
39
+ )
40
+ ui_we_want_to_set.tab_menu.addAction(ui_we_want_to_set.tab_menu.add_stackoverflow_action)
32
41
 
33
42
 
34
43
  def add_editor_tab(ui_we_want_to_set: EditorMain):
@@ -44,3 +53,9 @@ def add_frontengine_tab(ui_we_want_to_set: EditorMain):
44
53
  def add_web_tab(ui_we_want_to_set: EditorMain):
45
54
  ui_we_want_to_set.tab_widget.addTab(
46
55
  JEBrowser(), f"Web Browser {ui_we_want_to_set.tab_widget.count()}")
56
+
57
+
58
+ def add_stackoverflow(ui_we_want_to_set: EditorMain):
59
+ ui_we_want_to_set.tab_widget.addTab(
60
+ JEBrowser(start_url="https://stackoverflow.com/", search_prefix="https://stackoverflow.com/search?q="),
61
+ f"Stackoverflow {ui_we_want_to_set.tab_widget.count()}")
@@ -124,4 +124,4 @@ def pip_install_package(ui_we_want_to_set: EditorMain) -> None:
124
124
  pip_install_shell.later_init()
125
125
  pip_install_shell.exec_shell(
126
126
  [f"{pip_install_shell.compiler_path}", "-m", "pip", "install", f"{package_text}"]
127
- )
127
+ )
je_editor/start_editor.py CHANGED
@@ -6,7 +6,7 @@ from qt_material import apply_stylesheet
6
6
  from je_editor.pyside_ui.main_ui.main_editor import EditorMain
7
7
 
8
8
 
9
- def start_editor(debug_mode: bool = False,) -> None:
9
+ def start_editor(debug_mode: bool = False, ) -> None:
10
10
  new_editor = QApplication(sys.argv)
11
11
  window = EditorMain(debug_mode)
12
12
  apply_stylesheet(new_editor, theme='dark_amber.xml')
@@ -31,6 +31,3 @@ def read_file(file_path: str) -> typing.List[typing.Union[str, str]]:
31
31
  raise JEditorOpenFileException
32
32
  finally:
33
33
  lock.release()
34
-
35
-
36
-
@@ -25,4 +25,3 @@ def write_file(file_path: str, content: str) -> None:
25
25
  raise JEditorSaveFileException
26
26
  finally:
27
27
  lock.release()
28
-
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: je-editor
3
- Version: 0.0.142
3
+ Version: 0.0.144
4
4
  Summary: JEditor is basic but powerful editor include GPT
5
5
  Author-email: JE-Chen <jechenmailman@gmail.com>
6
6
  License: MIT
@@ -1,55 +1,58 @@
1
- je_editor/__init__.py,sha256=x2LhUXv_q8rj8FRj_iCuYOQqQ6CSVt4b0I1WiTrkENo,2271
1
+ je_editor/__init__.py,sha256=MRYb2B_58aMbHFS1a7rl5hvnIo6ep4ZfqyZIbkm0Y38,2373
2
2
  je_editor/__main__.py,sha256=tv19PbVG_8bg4HhRWINNYL_Zu6VtkJR00U_0v56GsK8,598
3
- je_editor/start_editor.py,sha256=ea-GYBfJZLvQRMTzL5m5sL10LTrAehKb7pI6fpF82uw,525
3
+ je_editor/start_editor.py,sha256=0vm9fMVtmS_2jXN9etLwzlRbYQwVNa3NbOz8W0bhTS4,526
4
4
  je_editor/pyside_ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  je_editor/pyside_ui/browser/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  je_editor/pyside_ui/browser/je_broser.py,sha256=Py2ndQdk6y4HG6WDWU0hgSp-NkpT3ldS45IJwfPsuI8,2118
7
7
  je_editor/pyside_ui/code/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  je_editor/pyside_ui/code/auto_save/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
9
  je_editor/pyside_ui/code/auto_save/auto_save_thread.py,sha256=fta94JKI9siw4zNSTo_JVydDmKa5Y4Tn4AIoqOhUPS8,1159
10
- je_editor/pyside_ui/code/code_editor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- je_editor/pyside_ui/code/code_editor/code_edit_plaintext.py,sha256=XEp5molPQp3Wa0pm0rNdsEjRdLgRreuYrQi6c5xhbTU,9851
12
10
  je_editor/pyside_ui/code/code_process/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
11
  je_editor/pyside_ui/code/code_process/code_exec.py,sha256=tnh7hufKotGasBMlDhiaMUc1PNyCLgmaj5bqR3y8uk0,7919
14
- je_editor/pyside_ui/code/code_result/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
- je_editor/pyside_ui/code/code_result/code_record.py,sha256=PLFK4NoEu_cehIWknUOZGVfq1JXV71klL2p-0plUSiY,1476
16
12
  je_editor/pyside_ui/code/complete_list/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
13
  je_editor/pyside_ui/code/complete_list/total_complete_list.py,sha256=u5Bop4WGv2WPQg2m5BJps5jIKTOTW6o7HvU2Dl4BhLE,1110
14
+ je_editor/pyside_ui/code/plaintext_code_edit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
+ je_editor/pyside_ui/code/plaintext_code_edit/code_edit_plaintext.py,sha256=4PGpmns2_4Cf9u2ZY3HW0ZQ9yapP-7GYOebVIQxftIk,9852
18
16
  je_editor/pyside_ui/code/shell_process/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
17
  je_editor/pyside_ui/code/shell_process/shell_exec.py,sha256=4DyHzsGqAJyF-BuUPa04CjRWehw4zyW8dSAYHzTX8ao,7155
20
18
  je_editor/pyside_ui/code/syntax/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
- je_editor/pyside_ui/code/syntax/python_syntax.py,sha256=FB8QzbVFFOnpOYXHPjWYnYWEjydFZNT-gAFM7K50Eyo,1609
22
- je_editor/pyside_ui/code/syntax/syntax_setting.py,sha256=ZRjzitQoisFNwxzGIPdh-NcQ1ufKTAieIUmWrnbcmu4,2247
19
+ je_editor/pyside_ui/code/syntax/python_syntax.py,sha256=4xsm6z0hEkh8fZ_I72eXBfkgV9hQ6FjSwJNVeYMfiEg,1611
20
+ je_editor/pyside_ui/code/syntax/syntax_setting.py,sha256=SNnOW6ioJgLF_JAVNw9yNaEKChgbFSsLkXTt-hVI8DA,2243
21
+ je_editor/pyside_ui/code/textedit_code_result/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
+ je_editor/pyside_ui/code/textedit_code_result/code_record.py,sha256=PLFK4NoEu_cehIWknUOZGVfq1JXV71klL2p-0plUSiY,1476
23
23
  je_editor/pyside_ui/colors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
24
  je_editor/pyside_ui/colors/global_color.py,sha256=So7yrBceSWeurhmE5ezcOxan7aNTrMs5U8Vya6vNrr8,155
25
25
  je_editor/pyside_ui/dialog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
26
  je_editor/pyside_ui/dialog/file_dialog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
27
  je_editor/pyside_ui/dialog/file_dialog/create_file_dialog.py,sha256=-zTqhs0PWOYEDMwzI4GsxWEXeTdPbfLONX2gMZz_26s,1240
28
- je_editor/pyside_ui/dialog/file_dialog/open_file_dialog.py,sha256=pI1i9SWnHW3rsBWO7N9xDVGdoq4PS-dVN7onLAjGxaI,1495
29
- je_editor/pyside_ui/dialog/file_dialog/save_file_dialog.py,sha256=5HzdvJNPNEObei5-0ouUuK9mfXeZgEq3P4WlVBUR6L8,1466
28
+ je_editor/pyside_ui/dialog/file_dialog/open_file_dialog.py,sha256=_MePCPN5cly_HVj_Fvq6hmP5wbL29bo7-G92ZjPFGoU,1518
29
+ je_editor/pyside_ui/dialog/file_dialog/save_file_dialog.py,sha256=-rUva0Bvo6C_i4hsZc2A2ela362z11oykjIGuYhgchw,1470
30
30
  je_editor/pyside_ui/dialog/search_ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
31
  je_editor/pyside_ui/dialog/search_ui/search_error_box.py,sha256=ost5tDwCJp6izbJNDb4jPJrrOpoNAuDkhpROW9R02NQ,865
32
32
  je_editor/pyside_ui/dialog/search_ui/search_text_box.py,sha256=DRtJ3QHu-QzvGwIRLebzCgpVV17apNB2-4Q3tsBwnSM,857
33
33
  je_editor/pyside_ui/main_ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
- je_editor/pyside_ui/main_ui/main_editor.py,sha256=6l8oxUbjE_FJMYkvzdN16GFIKgz4kSa4hplbS8rKPM4,10913
34
+ je_editor/pyside_ui/main_ui/main_editor.py,sha256=FLeMXibq9mdgX9VwmDIDMFFY37p1Sz4XgLkDKuWg0Ro,10856
35
+ je_editor/pyside_ui/main_ui/dock/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
+ je_editor/pyside_ui/main_ui/dock/destroy_dock.py,sha256=nyXCE-wAKN1kuOOs-ClQIH8NU0fXlJKbjOZWuDojvhw,418
35
37
  je_editor/pyside_ui/main_ui/editor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
- je_editor/pyside_ui/main_ui/editor/editor_widget.py,sha256=Cg20GsMYkaUpC59PcmpCDzfbyP2VV1vPmAVem9URLD8,4474
37
- je_editor/pyside_ui/main_ui/main_ui_setting/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
- je_editor/pyside_ui/main_ui/main_ui_setting/ui_setting.py,sha256=6uUHHImkasyr-6-XKLL4kiWlUoA-_PvCyXURohPiCAY,279
38
+ je_editor/pyside_ui/main_ui/editor/editor_widget.py,sha256=8UluGyZtBnY36SedXuucr46mFmMG-gfayixud6t402M,4491
39
+ je_editor/pyside_ui/main_ui/editor/editor_widget_full.py,sha256=4Btmz8R5Nc0kKR7Bk3ZX3XG1vy3x-khx-afpLRa9tGA,1197
39
40
  je_editor/pyside_ui/main_ui/menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
- je_editor/pyside_ui/main_ui/menu/set_menu_bar.py,sha256=mZ4FhbDJwTgwXU2tDZ0w9LNGqwEsokLwdVsrTqMTXrY,1208
41
+ je_editor/pyside_ui/main_ui/menu/set_menu_bar.py,sha256=ksV5WNKdv2bmZWvPqUkKWYshsl-dPy3IZ0i-o59P3Ww,1332
41
42
  je_editor/pyside_ui/main_ui/menu/check_style_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
43
  je_editor/pyside_ui/main_ui/menu/check_style_menu/build_check_style_menu.py,sha256=GXaN7wWrL8UUQYZgXUyPQeoyAsLnKEc1YC58x_-GVmo,2239
44
+ je_editor/pyside_ui/main_ui/menu/dock_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
+ je_editor/pyside_ui/main_ui/menu/dock_menu/build_dock_menu.py,sha256=mzgmQX3iiBLyTAoAo_FMkVNu9kUNa5rHBmMFMIAeWJ8,3385
43
46
  je_editor/pyside_ui/main_ui/menu/file_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
47
  je_editor/pyside_ui/main_ui/menu/file_menu/build_file_menu.py,sha256=HPNz764mhzodlWJL9OQf4xy0y0QdT8RdbFSMQxBFl4E,2005
45
48
  je_editor/pyside_ui/main_ui/menu/help_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
- je_editor/pyside_ui/main_ui/menu/help_menu/build_help_menu.py,sha256=iNwQQZT7SfDt-LnSXkgTo1TNtEvUdmpoWk-wSPGR-L0,1548
49
+ je_editor/pyside_ui/main_ui/menu/help_menu/build_help_menu.py,sha256=OBNa9K_gQ5OESje6MgtRfC9IwJqiRChFQO2LgcO63P4,1865
47
50
  je_editor/pyside_ui/main_ui/menu/run_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
51
  je_editor/pyside_ui/main_ui/menu/run_menu/build_run_menu.py,sha256=_eO_Mxv22yRiBwBISlPsbdg1-PGCI3sOvQw5z0nxPdQ,4932
49
52
  je_editor/pyside_ui/main_ui/menu/tab_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
- je_editor/pyside_ui/main_ui/menu/tab_menu/build_tab_menu.py,sha256=CU4CjzpciROXsYQ4cIrBjvpRtngsqnJNnXB2dXme6zs,1961
53
+ je_editor/pyside_ui/main_ui/menu/tab_menu/build_tab_menu.py,sha256=ti4ATejgjfcHf9bmTWMW4KZb0EjWMxZXWuMS9Ylk2rI,2631
51
54
  je_editor/pyside_ui/main_ui/menu/venv_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
- je_editor/pyside_ui/main_ui/menu/venv_menu/build_venv_menu.py,sha256=n5zUlqHkWBfKkyd7cxYOLUlSUNao_HtuBjUsgenVspI,5225
55
+ je_editor/pyside_ui/main_ui/menu/venv_menu/build_venv_menu.py,sha256=-kboawnD8T4Wh2RUfWsP6hWdv-jnKJge3757_1fvXw0,5227
53
56
  je_editor/pyside_ui/main_ui/save_user_setting/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
57
  je_editor/pyside_ui/main_ui/save_user_setting/user_setting_file.py,sha256=yLEnSbZfU4tn_LuBYvCJ4UW86ec-GnNM17ZE8zy7Mbw,680
55
58
  je_editor/pyside_ui/main_ui/system_tray/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -62,9 +65,9 @@ je_editor/utils/exception/exception_tags.py,sha256=js-3dZgCo_EteNRCAv2DE-dU9_Byv
62
65
  je_editor/utils/exception/exceptions.py,sha256=4e2ivqFWgBq4L_8QgRjd79xdOAgR_tyW_hpBlQeePpw,506
63
66
  je_editor/utils/file/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
67
  je_editor/utils/file/open/__init__.py,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
65
- je_editor/utils/file/open/open_file.py,sha256=jLDWBdBtoneAXDXZ6UbFYoCepUki1JWjVOcCvxyHgZA,1056
68
+ je_editor/utils/file/open/open_file.py,sha256=AHYPLjjJnnGbYvtK3_xC0UOtTO1tQT7X5gjcfYx8AyY,1050
66
69
  je_editor/utils/file/save/__init__.py,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
67
- je_editor/utils/file/save/save_file.py,sha256=QiwHOgRCj6T6lO2NuPvOVdReiImoasdq_x89VMWqw0M,762
70
+ je_editor/utils/file/save/save_file.py,sha256=NQk6iuf0uG27RgA7tb1fRARbW1sU9kLmwVwIWIRfhQM,760
68
71
  je_editor/utils/json/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
72
  je_editor/utils/json/json_file.py,sha256=pr_4K_xjz7nKG1Yd-2dhwLZzxXCeE4C7n52NgATm_5c,1370
70
73
  je_editor/utils/json_format/__init__.py,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
@@ -73,8 +76,8 @@ je_editor/utils/redirect_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRk
73
76
  je_editor/utils/redirect_manager/redirect_manager_class.py,sha256=izziweWPARG9TjvZWNgRYMnZblfHLkSyAaEW4ku9SuE,2057
74
77
  je_editor/utils/venv_check/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
78
  je_editor/utils/venv_check/check_venv.py,sha256=3HjMwqJzqY8Ir6auniyZMlL0h0TAvP3nZkOI-bR4_jA,798
76
- je_editor-0.0.142.dist-info/LICENSE,sha256=YcSMBs2sED35BtlErMkfIDye9Oo-3SYmUJiZJOpa34g,1085
77
- je_editor-0.0.142.dist-info/METADATA,sha256=cbO8gyZMGwuoH-AfxQduFoSymF15x_1cO_mhLIQ9PRA,3223
78
- je_editor-0.0.142.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
79
- je_editor-0.0.142.dist-info/top_level.txt,sha256=_9YA7BgxpkmdLs-5V_UQILxClcMRgPyG1a3qaE-Bkcs,10
80
- je_editor-0.0.142.dist-info/RECORD,,
79
+ je_editor-0.0.144.dist-info/LICENSE,sha256=YcSMBs2sED35BtlErMkfIDye9Oo-3SYmUJiZJOpa34g,1085
80
+ je_editor-0.0.144.dist-info/METADATA,sha256=eDJGswXOrxR5fBHVz2vXVI5H1MXK7a7t2SivFyMg5fs,3223
81
+ je_editor-0.0.144.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
82
+ je_editor-0.0.144.dist-info/top_level.txt,sha256=_9YA7BgxpkmdLs-5V_UQILxClcMRgPyG1a3qaE-Bkcs,10
83
+ je_editor-0.0.144.dist-info/RECORD,,
@@ -1,11 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from typing import TYPE_CHECKING
4
-
5
- if TYPE_CHECKING:
6
- from je_editor.pyside_ui.main_ui.main_editor import EditorMain
7
-
8
-
9
- def set_ui(ui_we_want_to_set: EditorMain):
10
- # set qt window
11
- ui_we_want_to_set.setWindowTitle("JEditor")