je-editor 0.0.104__py3-none-any.whl → 0.0.228__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 (151) hide show
  1. je_editor/__init__.py +26 -21
  2. je_editor/__main__.py +1 -1
  3. je_editor/code_scan/ruff_thread.py +58 -0
  4. je_editor/code_scan/watchdog_implement.py +56 -0
  5. je_editor/code_scan/watchdog_thread.py +78 -0
  6. je_editor/git_client/commit_graph.py +77 -0
  7. je_editor/git_client/git_action.py +175 -0
  8. je_editor/git_client/git_cli.py +66 -0
  9. je_editor/pyside_ui/browser/browser_download_window.py +75 -0
  10. je_editor/pyside_ui/browser/browser_serach_lineedit.py +51 -0
  11. je_editor/pyside_ui/browser/browser_view.py +87 -0
  12. je_editor/pyside_ui/browser/browser_widget.py +103 -0
  13. je_editor/pyside_ui/browser/main_browser_widget.py +85 -0
  14. je_editor/pyside_ui/code/auto_save/auto_save_manager.py +60 -0
  15. je_editor/pyside_ui/code/auto_save/auto_save_thread.py +59 -0
  16. je_editor/pyside_ui/code/code_format/pep8_format.py +130 -0
  17. je_editor/pyside_ui/code/code_process/code_exec.py +267 -0
  18. je_editor/pyside_ui/code/plaintext_code_edit/code_edit_plaintext.py +412 -0
  19. je_editor/pyside_ui/code/running_process_manager.py +48 -0
  20. je_editor/pyside_ui/code/shell_process/shell_exec.py +236 -0
  21. je_editor/pyside_ui/code/syntax/python_syntax.py +99 -0
  22. je_editor/pyside_ui/code/syntax/syntax_setting.py +95 -0
  23. je_editor/pyside_ui/code/textedit_code_result/code_record.py +75 -0
  24. je_editor/pyside_ui/code/variable_inspector/inspector_gui.py +172 -0
  25. je_editor/pyside_ui/dialog/ai_dialog/set_ai_dialog.py +71 -0
  26. je_editor/pyside_ui/dialog/file_dialog/create_file_dialog.py +68 -0
  27. je_editor/pyside_ui/dialog/file_dialog/open_file_dialog.py +111 -0
  28. je_editor/pyside_ui/dialog/file_dialog/save_file_dialog.py +67 -0
  29. je_editor/pyside_ui/dialog/search_ui/search_error_box.py +49 -0
  30. je_editor/pyside_ui/dialog/search_ui/search_text_box.py +49 -0
  31. je_editor/pyside_ui/git_ui/code_diff_compare/code_diff_viewer_widget.py +90 -0
  32. je_editor/pyside_ui/git_ui/code_diff_compare/line_number_code_viewer.py +141 -0
  33. je_editor/pyside_ui/git_ui/code_diff_compare/multi_file_diff_viewer.py +88 -0
  34. je_editor/pyside_ui/git_ui/code_diff_compare/side_by_side_diff_widget.py +284 -0
  35. je_editor/pyside_ui/git_ui/git_client/commit_table.py +65 -0
  36. je_editor/pyside_ui/git_ui/git_client/git_branch_tree_widget.py +156 -0
  37. je_editor/pyside_ui/git_ui/git_client/git_client_gui.py +799 -0
  38. je_editor/pyside_ui/git_ui/git_client/graph_view.py +218 -0
  39. je_editor/pyside_ui/main_ui/ai_widget/ai_config.py +34 -0
  40. je_editor/pyside_ui/main_ui/ai_widget/ask_thread.py +36 -0
  41. je_editor/pyside_ui/main_ui/ai_widget/chat_ui.py +147 -0
  42. je_editor/pyside_ui/main_ui/ai_widget/langchain_interface.py +84 -0
  43. je_editor/pyside_ui/main_ui/console_widget/console_gui.py +162 -0
  44. je_editor/pyside_ui/main_ui/console_widget/qprocess_adapter.py +84 -0
  45. je_editor/pyside_ui/main_ui/dock/__init__.py +0 -0
  46. je_editor/pyside_ui/main_ui/dock/destroy_dock.py +50 -0
  47. je_editor/pyside_ui/main_ui/editor/__init__.py +0 -0
  48. je_editor/pyside_ui/main_ui/editor/editor_widget.py +301 -0
  49. je_editor/pyside_ui/main_ui/editor/editor_widget_dock.py +70 -0
  50. je_editor/pyside_ui/main_ui/editor/process_input.py +101 -0
  51. je_editor/pyside_ui/main_ui/ipython_widget/__init__.py +0 -0
  52. je_editor/pyside_ui/main_ui/ipython_widget/rich_jupyter.py +78 -0
  53. je_editor/pyside_ui/main_ui/main_editor.py +369 -0
  54. je_editor/pyside_ui/main_ui/menu/__init__.py +0 -0
  55. je_editor/pyside_ui/main_ui/menu/check_style_menu/__init__.py +0 -0
  56. je_editor/pyside_ui/main_ui/menu/check_style_menu/build_check_style_menu.py +104 -0
  57. je_editor/pyside_ui/main_ui/menu/dock_menu/__init__.py +0 -0
  58. je_editor/pyside_ui/main_ui/menu/dock_menu/build_dock_menu.py +208 -0
  59. je_editor/pyside_ui/main_ui/menu/file_menu/__init__.py +0 -0
  60. je_editor/pyside_ui/main_ui/menu/file_menu/build_file_menu.py +186 -0
  61. je_editor/pyside_ui/main_ui/menu/help_menu/__init__.py +0 -0
  62. je_editor/pyside_ui/main_ui/menu/help_menu/build_help_menu.py +100 -0
  63. je_editor/pyside_ui/main_ui/menu/language_menu/__init__.py +0 -0
  64. je_editor/pyside_ui/main_ui/menu/language_menu/build_language_server.py +89 -0
  65. je_editor/pyside_ui/main_ui/menu/python_env_menu/__init__.py +0 -0
  66. je_editor/pyside_ui/main_ui/menu/python_env_menu/build_venv_menu.py +238 -0
  67. je_editor/pyside_ui/main_ui/menu/run_menu/__init__.py +0 -0
  68. je_editor/pyside_ui/main_ui/menu/run_menu/build_run_menu.py +160 -0
  69. je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/__init__.py +0 -0
  70. je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/build_debug_menu.py +109 -0
  71. je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/build_program_menu.py +101 -0
  72. je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/build_shell_menu.py +98 -0
  73. je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/utils.py +41 -0
  74. je_editor/pyside_ui/main_ui/menu/set_menu_bar.py +63 -0
  75. je_editor/pyside_ui/main_ui/menu/style_menu/__init__.py +0 -0
  76. je_editor/pyside_ui/main_ui/menu/style_menu/build_style_menu.py +73 -0
  77. je_editor/pyside_ui/main_ui/menu/tab_menu/__init__.py +0 -0
  78. je_editor/pyside_ui/main_ui/menu/tab_menu/build_tab_menu.py +275 -0
  79. je_editor/pyside_ui/main_ui/menu/text_menu/__init__.py +0 -0
  80. je_editor/pyside_ui/main_ui/menu/text_menu/build_text_menu.py +135 -0
  81. je_editor/pyside_ui/main_ui/save_settings/__init__.py +0 -0
  82. je_editor/pyside_ui/main_ui/save_settings/setting_utils.py +33 -0
  83. je_editor/pyside_ui/main_ui/save_settings/user_color_setting_file.py +103 -0
  84. je_editor/pyside_ui/main_ui/save_settings/user_setting_file.py +58 -0
  85. je_editor/pyside_ui/main_ui/system_tray/__init__.py +0 -0
  86. je_editor/pyside_ui/main_ui/system_tray/extend_system_tray.py +90 -0
  87. je_editor/start_editor.py +32 -8
  88. je_editor/utils/encodings/python_encodings.py +100 -97
  89. je_editor/utils/exception/exception_tags.py +11 -11
  90. je_editor/utils/file/open/open_file.py +38 -22
  91. je_editor/utils/file/save/save_file.py +40 -16
  92. je_editor/utils/json/json_file.py +36 -15
  93. je_editor/utils/json_format/json_process.py +38 -2
  94. je_editor/utils/logging/__init__.py +0 -0
  95. je_editor/utils/logging/loggin_instance.py +57 -0
  96. je_editor/utils/multi_language/__init__.py +0 -0
  97. je_editor/utils/multi_language/english.py +221 -0
  98. je_editor/utils/multi_language/multi_language_wrapper.py +54 -0
  99. je_editor/utils/multi_language/traditional_chinese.py +214 -0
  100. je_editor/utils/redirect_manager/redirect_manager_class.py +67 -25
  101. je_editor/utils/venv_check/__init__.py +0 -0
  102. je_editor/utils/venv_check/check_venv.py +51 -0
  103. je_editor-0.0.228.dist-info/METADATA +99 -0
  104. je_editor-0.0.228.dist-info/RECORD +140 -0
  105. {je_editor-0.0.104.dist-info → je_editor-0.0.228.dist-info}/WHEEL +1 -1
  106. {je_editor-0.0.104.dist-info → je_editor-0.0.228.dist-info/licenses}/LICENSE +1 -1
  107. je_editor/pyside_ui/auto_save/auto_save_thread.py +0 -34
  108. je_editor/pyside_ui/code_editor/code_edit_plaintext.py +0 -143
  109. je_editor/pyside_ui/code_process/code_exec.py +0 -190
  110. je_editor/pyside_ui/code_result/code_record.py +0 -39
  111. je_editor/pyside_ui/colors/global_color.py +0 -4
  112. je_editor/pyside_ui/file_dialog/open_file_dialog.py +0 -27
  113. je_editor/pyside_ui/file_dialog/save_file_dialog.py +0 -24
  114. je_editor/pyside_ui/main_ui/editor_main_ui/main_editor.py +0 -183
  115. je_editor/pyside_ui/main_ui_setting/ui_setting.py +0 -36
  116. je_editor/pyside_ui/menu/menu_bar/check_style_menu/build_check_style_menu.py +0 -44
  117. je_editor/pyside_ui/menu/menu_bar/file_menu/build_file_menu.py +0 -30
  118. je_editor/pyside_ui/menu/menu_bar/help_menu/build_help_menu.py +0 -39
  119. je_editor/pyside_ui/menu/menu_bar/run_menu/build_run_menu.py +0 -102
  120. je_editor/pyside_ui/menu/menu_bar/set_menu_bar.py +0 -24
  121. je_editor/pyside_ui/menu/menu_bar/venv_menu/build_venv_menu.py +0 -74
  122. je_editor/pyside_ui/search_ui/search_error_box.py +0 -20
  123. je_editor/pyside_ui/search_ui/search_text_box.py +0 -20
  124. je_editor/pyside_ui/shell_process/shell_exec.py +0 -157
  125. je_editor/pyside_ui/syntax/python_syntax.py +0 -99
  126. je_editor/pyside_ui/treeview/project_treeview/set_project_treeview.py +0 -47
  127. je_editor/pyside_ui/user_setting/user_setting_file.py +0 -23
  128. je_editor-0.0.104.dist-info/METADATA +0 -84
  129. je_editor-0.0.104.dist-info/RECORD +0 -69
  130. /je_editor/{pyside_ui/auto_save → code_scan}/__init__.py +0 -0
  131. /je_editor/{pyside_ui/code_editor → git_client}/__init__.py +0 -0
  132. /je_editor/pyside_ui/{code_process → browser}/__init__.py +0 -0
  133. /je_editor/pyside_ui/{code_result → code}/__init__.py +0 -0
  134. /je_editor/pyside_ui/{colors → code/auto_save}/__init__.py +0 -0
  135. /je_editor/pyside_ui/{file_dialog → code/code_format}/__init__.py +0 -0
  136. /je_editor/pyside_ui/{main_ui/editor_main_ui → code/code_process}/__init__.py +0 -0
  137. /je_editor/pyside_ui/{main_ui_setting → code/plaintext_code_edit}/__init__.py +0 -0
  138. /je_editor/pyside_ui/{menu → code/shell_process}/__init__.py +0 -0
  139. /je_editor/pyside_ui/{menu/menu_bar → code/syntax}/__init__.py +0 -0
  140. /je_editor/pyside_ui/{menu/menu_bar/check_style_menu → code/textedit_code_result}/__init__.py +0 -0
  141. /je_editor/pyside_ui/{menu/menu_bar/file_menu → code/variable_inspector}/__init__.py +0 -0
  142. /je_editor/pyside_ui/{menu/menu_bar/help_menu → dialog}/__init__.py +0 -0
  143. /je_editor/pyside_ui/{menu/menu_bar/run_menu → dialog/ai_dialog}/__init__.py +0 -0
  144. /je_editor/pyside_ui/{menu/menu_bar/venv_menu → dialog/file_dialog}/__init__.py +0 -0
  145. /je_editor/pyside_ui/{search_ui → dialog/search_ui}/__init__.py +0 -0
  146. /je_editor/pyside_ui/{shell_process → git_ui}/__init__.py +0 -0
  147. /je_editor/pyside_ui/{syntax → git_ui/code_diff_compare}/__init__.py +0 -0
  148. /je_editor/pyside_ui/{treeview → git_ui/git_client}/__init__.py +0 -0
  149. /je_editor/pyside_ui/{treeview/project_treeview → main_ui/ai_widget}/__init__.py +0 -0
  150. /je_editor/pyside_ui/{user_setting → main_ui/console_widget}/__init__.py +0 -0
  151. {je_editor-0.0.104.dist-info → je_editor-0.0.228.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,51 @@
1
+ # 匯入自訂錯誤訊息與例外類別
2
+ # Import custom error messages and exception class
3
+
4
+ import shutil
5
+ from pathlib import Path
6
+
7
+ # 匯入自訂錯誤訊息與例外類別
8
+ # Import custom error messages and exception class
9
+ from je_editor.utils.exception.exception_tags import compiler_not_found_error
10
+ from je_editor.utils.exception.exceptions import JEditorExecException
11
+ from je_editor.utils.logging.loggin_instance import jeditor_logger
12
+
13
+
14
+ def check_and_choose_venv(venv_path: Path) -> str:
15
+ """
16
+ 功能說明 (Function Description):
17
+ 檢查虛擬環境 (venv) 路徑,並嘗試尋找可用的 Python 編譯器。
18
+ Check the virtual environment (venv) path and try to find a usable Python interpreter.
19
+
20
+ :param venv_path: 虛擬環境的路徑 / path to the virtual environment
21
+ :return: Python 編譯器的完整路徑 / full path to the Python interpreter
22
+ :raise JEditorExecException: 若找不到 Python 編譯器 / if no Python interpreter is found
23
+ """
24
+
25
+ jeditor_logger.info(f"check_venv.py check_and_choose_venv venv_path: {venv_path}")
26
+
27
+ # 如果 venv_path 是資料夾且存在
28
+ # If venv_path is a directory and exists
29
+ if venv_path.is_dir() and venv_path.exists():
30
+ # 先嘗試在該路徑下尋找 python3
31
+ # Try to find python3 in the given path
32
+ compiler_path = shutil.which("python3", path=str(venv_path))
33
+ if compiler_path:
34
+ return compiler_path
35
+
36
+ # 如果找不到 python3,再找 python
37
+ # If python3 not found, try python
38
+ compiler_path = shutil.which("python", path=str(venv_path))
39
+ if compiler_path:
40
+ return compiler_path
41
+
42
+ # 如果 venv_path 無效或都找不到,最後再嘗試系統預設的 python3 或 python
43
+ # If venv_path is invalid or no interpreter found, try system default python3 or python
44
+ compiler_path = shutil.which("python3") or shutil.which("python")
45
+
46
+ # 如果還是找不到,拋出例外
47
+ # If still not found, raise exception
48
+ if compiler_path is None:
49
+ raise JEditorExecException(compiler_not_found_error)
50
+
51
+ return compiler_path
@@ -0,0 +1,99 @@
1
+ Metadata-Version: 2.4
2
+ Name: je_editor
3
+ Version: 0.0.228
4
+ Summary: JEditor is basic but powerful editor include GPT
5
+ Author-email: JE-Chen <jechenmailman@gmail.com>
6
+ Project-URL: Homepage, https://github.com/JE-Chen/je_editor
7
+ Project-URL: Documentation, https://je-editor.readthedocs.io/en/latest/
8
+ Project-URL: Code, https://github.com/JE-Chen/je_editor
9
+ Classifier: Programming Language :: Python :: 3.10
10
+ Classifier: Development Status :: 2 - Pre-Alpha
11
+ Classifier: Environment :: Win32 (MS Windows)
12
+ Classifier: Environment :: MacOS X
13
+ Classifier: Environment :: X11 Applications
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Operating System :: OS Independent
16
+ Requires-Python: >=3.10
17
+ Description-Content-Type: text/markdown
18
+ License-File: LICENSE
19
+ Requires-Dist: PySide6==6.10.0
20
+ Requires-Dist: qt-material
21
+ Requires-Dist: yapf
22
+ Requires-Dist: frontengine
23
+ Requires-Dist: pycodestyle
24
+ Requires-Dist: jedi
25
+ Requires-Dist: qtconsole
26
+ Requires-Dist: langchain_openai==1.0.2
27
+ Requires-Dist: langchain==1.0.3
28
+ Requires-Dist: pydantic
29
+ Requires-Dist: watchdog
30
+ Requires-Dist: ruff
31
+ Requires-Dist: gitpython
32
+ Dynamic: license-file
33
+
34
+ # je_editor
35
+
36
+ ---
37
+
38
+ [![Downloads](https://static.pepy.tech/badge/je-editor)](https://pepy.tech/project/je-editor)
39
+
40
+ [![Codacy Badge](https://app.codacy.com/project/badge/Grade/825a90622a224207be4abe869775b50a)](https://www.codacy.com/gh/JE-Chen/je_editor/dashboard?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=JE-Chen/je_editor&amp;utm_campaign=Badge_Grade)
41
+
42
+ [![JE_Editor Stable Python3.9](https://github.com/Intergration-Automation-Testing/je_editor/actions/workflows/stable_python3_9.yml/badge.svg)](https://github.com/Intergration-Automation-Testing/je_editor/actions/workflows/stable_python3_9.yml)
43
+
44
+ [![JE_Editor Stable Python3.10](https://github.com/Intergration-Automation-Testing/je_editor/actions/workflows/stable_python3_10.yml/badge.svg)](https://github.com/Intergration-Automation-Testing/je_editor/actions/workflows/stable_python3_10.yml)
45
+
46
+ [![JE_Editor Stable Python3.11](https://github.com/Intergration-Automation-Testing/je_editor/actions/workflows/stable_python3_11.yml/badge.svg)](https://github.com/Intergration-Automation-Testing/je_editor/actions/workflows/stable_python3_11.yml)
47
+
48
+ ### Document
49
+
50
+ [![Documentation Status](https://readthedocs.org/projects/je-editor/badge/?version=latest)](https://je-editor.readthedocs.io/en/latest/?badge=latest)
51
+
52
+ [JEditor Doc Click Here!](https://je-editor.readthedocs.io/en/latest/)
53
+
54
+ ---
55
+
56
+
57
+ ![Editor Picture](image/JEditor.png)
58
+ > * Project Kanban https://github.com/orgs/Integration-Automation/projects/2/views/1
59
+ > * Modern Editor.
60
+ > * Old JEditor remake.
61
+ > * AutoSave, Encoding Feature.
62
+ > * Multi program and shell runner.
63
+ > * Including yapf python format checker.
64
+ > * Including reformat JSON.
65
+ > * Virtual Environment support.
66
+ > * Dark & Light mode ui support.
67
+ > * File tree support.
68
+ > * Line code.
69
+ > * Current line highlight.
70
+ > * Python code highlight.
71
+ > * Performance efficiency than old JEditor 1000%.
72
+ > * OS Independent.
73
+
74
+ * Include FrontEngine & FrontEngine GPT
75
+
76
+ ---
77
+
78
+ ## Requires
79
+
80
+ ```
81
+ python 3.9 or later
82
+ ```
83
+
84
+ ## install
85
+
86
+ ```commandline
87
+ pip install je_editor
88
+ ```
89
+
90
+ * Test on
91
+ * windows 10 ~ 11
92
+ * osx 10.5 ~ 11 big sur
93
+ * ubuntu 20.0.4
94
+ * raspberry pi 3B+
95
+
96
+ | All test in test dir
97
+
98
+ ### Architecture Diagram
99
+ ![Architecture Diagram](architecture_diagram/JEditor_Architecture.drawio.png)
@@ -0,0 +1,140 @@
1
+ je_editor/__init__.py,sha256=yIUH6MZZUrVYKo0emfnHmq4hzjTu1NygO2lbIpmYkao,2418
2
+ je_editor/__main__.py,sha256=2ymm4ESRcqP4K1YQyeaDbGhuK-0C1IausIiEOpbm6Ds,570
3
+ je_editor/start_editor.py,sha256=dxO48X6CZAsyU-MjFw3iek0CAb__lhbvtzAqV3g_3g0,1503
4
+ je_editor/code_scan/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ je_editor/code_scan/ruff_thread.py,sha256=DNM4cEZt5PBqIDtyy5GXq9BFwLhSuLu8FFBxn3_9xRE,1983
6
+ je_editor/code_scan/watchdog_implement.py,sha256=OlBIgjj3A4RnS1a2jlyqZg1Ot5mKTsr3eASZpJcerN0,2116
7
+ je_editor/code_scan/watchdog_thread.py,sha256=B_ezpxiHUjluDzcBOIOAAo5V9iORkkIvoztmv3LwxLo,2611
8
+ je_editor/git_client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ je_editor/git_client/commit_graph.py,sha256=JPCe5-JTMPpziJYI7ufXJibSVYJuLZRw37-L6IY1ve4,2721
10
+ je_editor/git_client/git_action.py,sha256=9zoPLh1PBvs8a59n9ZQqXNLIOniAXdta6LmCbDlV3Zs,6094
11
+ je_editor/git_client/git_cli.py,sha256=GAKbjsYZEhp0eUe5SeMO-Wk_E9mzpFhiz3jw4bVO0fI,2098
12
+ je_editor/pyside_ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
+ je_editor/pyside_ui/browser/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
+ je_editor/pyside_ui/browser/browser_download_window.py,sha256=8yNm4HkNfLsjXLDAlwLV-5Xd9ybGP8g-jzi7WWtoz0Y,3385
15
+ je_editor/pyside_ui/browser/browser_serach_lineedit.py,sha256=Pd6OieulMgWEGq-kk7Hqp2W3nvt45F57fb_9ZORXnBo,1877
16
+ je_editor/pyside_ui/browser/browser_view.py,sha256=K8fJM33yU_5A3BIho_A6kOFBEfu5VnmLaK6evG6p2OY,3120
17
+ je_editor/pyside_ui/browser/browser_widget.py,sha256=BMV9YleKPhHCsBPLWHoOzD2JBJzzuWITBDOrYZPjmkc,4840
18
+ je_editor/pyside_ui/browser/main_browser_widget.py,sha256=4rIdOBcuH4KVy7RNgP910l6Pa1yCCragrMKsZBnSHPs,4045
19
+ je_editor/pyside_ui/code/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
+ je_editor/pyside_ui/code/running_process_manager.py,sha256=ySJCeL50MBQnqIb9clTYa2-57QPbfqbBRUgWLP1yigg,1854
21
+ je_editor/pyside_ui/code/auto_save/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
+ je_editor/pyside_ui/code/auto_save/auto_save_manager.py,sha256=50sf4jJUxGV7E2Zx9IRTBY5j-vwa1DtfL0IhqM3tkyE,2283
23
+ je_editor/pyside_ui/code/auto_save/auto_save_thread.py,sha256=JPBB9Fqvzmn0fdrvf_7uWU0GQxAYLhtXaydrrp_-v5c,2680
24
+ je_editor/pyside_ui/code/code_format/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
+ je_editor/pyside_ui/code/code_format/pep8_format.py,sha256=2WLUgfZ_9ldZ9Tmid6InAiwf3IpV8x0KtswefghRJPs,5547
26
+ je_editor/pyside_ui/code/code_process/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
+ je_editor/pyside_ui/code/code_process/code_exec.py,sha256=pILtFug7VP8E0_keArWkKB84AzNSBKlFl1b2Qbag8rg,12738
28
+ je_editor/pyside_ui/code/plaintext_code_edit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
+ je_editor/pyside_ui/code/plaintext_code_edit/code_edit_plaintext.py,sha256=0n8mpHVikjGvgM4NDcqnEKOTKATYeM5D9_VFl9ysZno,16259
30
+ je_editor/pyside_ui/code/shell_process/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
+ je_editor/pyside_ui/code/shell_process/shell_exec.py,sha256=mB2QzeCkXap6lEk6Gso6_4K_SPn415g9JkJAH3sVaD4,12787
32
+ je_editor/pyside_ui/code/syntax/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
+ je_editor/pyside_ui/code/syntax/python_syntax.py,sha256=LhBk3QUNUIhX388fIQEEZuybIMKDXK5W07L9LW_2ZCg,4544
34
+ je_editor/pyside_ui/code/syntax/syntax_setting.py,sha256=Vf9PQRPe3esvXWEhO7lOJ_WCsQJMdZa4ugm106UN-G4,3735
35
+ je_editor/pyside_ui/code/textedit_code_result/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
+ je_editor/pyside_ui/code/textedit_code_result/code_record.py,sha256=D0a73RtoAr0XrQgoq7IxmvQdhshCJi5Ho_atG2Ev_J0,3400
37
+ je_editor/pyside_ui/code/variable_inspector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
+ je_editor/pyside_ui/code/variable_inspector/inspector_gui.py,sha256=tt-Y_rlSZDHj3cE4cdGxZVSc6rRcOxRHDb2sflLwQac,7009
39
+ je_editor/pyside_ui/dialog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
+ je_editor/pyside_ui/dialog/ai_dialog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
+ je_editor/pyside_ui/dialog/ai_dialog/set_ai_dialog.py,sha256=MoJRBA5lUH4MDTS4_js6L1xP4LflXbWX-kUTu6IcRwg,3290
42
+ je_editor/pyside_ui/dialog/file_dialog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
+ je_editor/pyside_ui/dialog/file_dialog/create_file_dialog.py,sha256=bfi1kQm1I29OScA5JAOirdlFkBu_MWpS7n2DC5u47PA,2744
44
+ je_editor/pyside_ui/dialog/file_dialog/open_file_dialog.py,sha256=8r0KQYr58-dalu0cUUBMLautQULrxz4AFcsOySw5P2E,5051
45
+ je_editor/pyside_ui/dialog/file_dialog/save_file_dialog.py,sha256=7QrPr7RbIxf1UYbaEMc2RpE_zqg4WA-zJGTpnIMz-TU,2783
46
+ je_editor/pyside_ui/dialog/search_ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
+ je_editor/pyside_ui/dialog/search_ui/search_error_box.py,sha256=3hyFbamBx9Mh6YT-pq3SlP9GUi3vX_ehrL5r4pLrNzU,1812
48
+ je_editor/pyside_ui/dialog/search_ui/search_text_box.py,sha256=DpHSPpWDHm043AXCQKtP1koKfdj-dbOmOBj2NdiH7LQ,1881
49
+ je_editor/pyside_ui/git_ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
+ je_editor/pyside_ui/git_ui/code_diff_compare/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
+ je_editor/pyside_ui/git_ui/code_diff_compare/code_diff_viewer_widget.py,sha256=GIqXdvTi29a830urelbLqG0ITyldzTya1kqPNTK0w4Q,3643
52
+ je_editor/pyside_ui/git_ui/code_diff_compare/line_number_code_viewer.py,sha256=VFC98ERf-Wj78MTD0bwAXOKtFRTjcdkndA-SiuiTI0g,5638
53
+ je_editor/pyside_ui/git_ui/code_diff_compare/multi_file_diff_viewer.py,sha256=V9SSTLpb9W_GQJBhzO-n1y0AdJn5y5vCRTnoJs7zC0o,3196
54
+ je_editor/pyside_ui/git_ui/code_diff_compare/side_by_side_diff_widget.py,sha256=6dbHCRfEwJxnzWkbSDV0MiVL6cAbn54zCdIKDqFcS6Q,11336
55
+ je_editor/pyside_ui/git_ui/git_client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
+ je_editor/pyside_ui/git_ui/git_client/commit_table.py,sha256=Xgmzvsj-awdcQ149lUCmOcVkJrEg5EwVpSsZ3q6ntGk,2553
57
+ je_editor/pyside_ui/git_ui/git_client/git_branch_tree_widget.py,sha256=hwAbljngXWOt4t6E6Om5KliwWOK_5tbsuBCjrSCXVPU,6470
58
+ je_editor/pyside_ui/git_ui/git_client/git_client_gui.py,sha256=58035pLsBLPHm0_dKE-jWLuFhw4NqhpgiexfdNP-2xo,34246
59
+ je_editor/pyside_ui/git_ui/git_client/graph_view.py,sha256=WfRGIEU9mW6EvNBbWLnE5uwS1YuRuPmRA1K-brFxSTE,7908
60
+ je_editor/pyside_ui/main_ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
+ je_editor/pyside_ui/main_ui/main_editor.py,sha256=dc1w0FFT86GZgYpGPtNlXlbMKALh7LfsXDHZuYni3VA,15899
62
+ je_editor/pyside_ui/main_ui/ai_widget/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
+ je_editor/pyside_ui/main_ui/ai_widget/ai_config.py,sha256=8DfSAbSF64GGbYd-fHn9C4Odq8lcReh8RnEfzgzDrGQ,1304
64
+ je_editor/pyside_ui/main_ui/ai_widget/ask_thread.py,sha256=LSnjKANAgVWI5AUkMP_EjFqE9DUmsDUycHZMQASteTA,1493
65
+ je_editor/pyside_ui/main_ui/ai_widget/chat_ui.py,sha256=K6I3jPwTZVHlYUydYMc3Ic_MLgBVyiCx_kAW8D_QS1Y,9027
66
+ je_editor/pyside_ui/main_ui/ai_widget/langchain_interface.py,sha256=oJRUhGqxNWkCwojDVmX_Xh1vGXDMHIIqI7b4tIqGFRw,3490
67
+ je_editor/pyside_ui/main_ui/console_widget/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
+ je_editor/pyside_ui/main_ui/console_widget/console_gui.py,sha256=EhzXKhs0N5HE7elsznlnPs7Q_dgkFu7mUwvwgbNwIBs,7429
69
+ je_editor/pyside_ui/main_ui/console_widget/qprocess_adapter.py,sha256=gmpNKAhZW5Qmh0EHoCkOGUF4e_yYVGHB6l0h0J6SnIg,4094
70
+ je_editor/pyside_ui/main_ui/dock/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
+ je_editor/pyside_ui/main_ui/dock/destroy_dock.py,sha256=wyJ8yWiSTOU8jEyH7VPPqXnwfeoXDg6-icA0MUzfGmk,1878
72
+ je_editor/pyside_ui/main_ui/editor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
+ je_editor/pyside_ui/main_ui/editor/editor_widget.py,sha256=-s8Jg8V4t3VRndncHi6PWdFgeZw-A-EWonhixeWuPEg,14035
74
+ je_editor/pyside_ui/main_ui/editor/editor_widget_dock.py,sha256=fAK-EQeRcGtCY2G8T_to6cbgUqRZPFsCM5z2oBj2C6A,3253
75
+ je_editor/pyside_ui/main_ui/editor/process_input.py,sha256=hDBGcIRsNzJyFhGS33i8Yr150yPcihjUF6tLi6bGPPE,5364
76
+ je_editor/pyside_ui/main_ui/ipython_widget/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
+ je_editor/pyside_ui/main_ui/ipython_widget/rich_jupyter.py,sha256=h5x1o_RAzN_IY8RQHANtoXHpxBt_hkhKS9tmbcQJzAw,3944
78
+ je_editor/pyside_ui/main_ui/menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
+ je_editor/pyside_ui/main_ui/menu/set_menu_bar.py,sha256=K9eJM5BV2RbYNwzR2RfmX3bmnZp3TPeriH3arTCXROQ,3139
80
+ je_editor/pyside_ui/main_ui/menu/check_style_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
+ je_editor/pyside_ui/main_ui/menu/check_style_menu/build_check_style_menu.py,sha256=9-Brr61P9wVcD3oiEEYN-wsOoguuZOZMqPcEvzPdfOk,5492
82
+ je_editor/pyside_ui/main_ui/menu/dock_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
+ je_editor/pyside_ui/main_ui/menu/dock_menu/build_dock_menu.py,sha256=_iBQ5JCDVKC7zK9dPV2DBON80sPd0XVT9n8TdZkek40,10799
84
+ je_editor/pyside_ui/main_ui/menu/file_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
+ je_editor/pyside_ui/main_ui/menu/file_menu/build_file_menu.py,sha256=Buhs5IoxgWMwzMukEsXSuxXIGL1e_-jPYipyYUfd_Lw,8876
86
+ je_editor/pyside_ui/main_ui/menu/help_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
+ je_editor/pyside_ui/main_ui/menu/help_menu/build_help_menu.py,sha256=gCYNctrkb6jzsT7G5bVnbJLt7p2r16pqrLhNLhQemlw,4161
88
+ je_editor/pyside_ui/main_ui/menu/language_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
89
+ je_editor/pyside_ui/main_ui/menu/language_menu/build_language_server.py,sha256=tkWNPwj7cAqm3g8u3tr98oXfXggQb0nJkmnZDbu6N2c,3831
90
+ je_editor/pyside_ui/main_ui/menu/python_env_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
+ je_editor/pyside_ui/main_ui/menu/python_env_menu/build_venv_menu.py,sha256=_4dHdL9Cha_2JaZIudr0VR16zzeR7dd-IkVRsmeCcSA,12299
92
+ je_editor/pyside_ui/main_ui/menu/run_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
93
+ je_editor/pyside_ui/main_ui/menu/run_menu/build_run_menu.py,sha256=ksGzh17eWrH7jighjRjwI0ENF-yTb86NMEGY3FcwM0Q,6587
94
+ je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
95
+ je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/build_debug_menu.py,sha256=DqYVSog1HdKlfHROc-Rn5ciffe_7DPkn_0LBMqJ2E5k,5142
96
+ je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/build_program_menu.py,sha256=xmMHcbqucWRyHuwKrwJPUQYMVsOJu2HscJnIyh2aD58,4863
97
+ je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/build_shell_menu.py,sha256=0mPwGbLg_K9O7H0jfWWHXcfsBMubIGkZz2aCucusKIA,4561
98
+ je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/utils.py,sha256=72Fc3oX9_cqg6qqMKMl0fXtziH1kV42jR2LsLxalGYY,1731
99
+ je_editor/pyside_ui/main_ui/menu/style_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
100
+ je_editor/pyside_ui/main_ui/menu/style_menu/build_style_menu.py,sha256=gMBo-pDI2uTiXcKjSPChaUNd1l27MriBdo5ZRzTQsLY,3229
101
+ je_editor/pyside_ui/main_ui/menu/tab_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
102
+ je_editor/pyside_ui/main_ui/menu/tab_menu/build_tab_menu.py,sha256=dEuTeWs3W1wIX8-aDyKoNT9n82LB7GVATa9V6lJd_Lw,13154
103
+ je_editor/pyside_ui/main_ui/menu/text_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
104
+ je_editor/pyside_ui/main_ui/menu/text_menu/build_text_menu.py,sha256=GkZwEpndZK3z1G70fipaC24KMH4KN7a89OX-SazRNbo,5869
105
+ je_editor/pyside_ui/main_ui/save_settings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
106
+ je_editor/pyside_ui/main_ui/save_settings/setting_utils.py,sha256=4itj8FWxkVNMa_J8IsQqY-JY36ww6rASJ0lGL3zac14,1372
107
+ je_editor/pyside_ui/main_ui/save_settings/user_color_setting_file.py,sha256=pJgyejR6nxJSBC-5eHjLkfdKr3kc2DSb9a0h227iWKU,4473
108
+ je_editor/pyside_ui/main_ui/save_settings/user_setting_file.py,sha256=zGdSjlDtDWFAYz4LxJOdPP78UGzsDH1alGSxH94GA18,2431
109
+ je_editor/pyside_ui/main_ui/system_tray/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
110
+ je_editor/pyside_ui/main_ui/system_tray/extend_system_tray.py,sha256=NMhLWEkpnbGjPwPITU0t03z5ZnNDV9cYuD7g_SLPhjc,3661
111
+ je_editor/utils/__init__.py,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
112
+ je_editor/utils/encodings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
113
+ je_editor/utils/encodings/python_encodings.py,sha256=7FZiXQOx2XrgEibwYe5fMu6tExBnhYCi0LLhUwO8NFE,6458
114
+ je_editor/utils/exception/__init__.py,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
115
+ je_editor/utils/exception/exception_tags.py,sha256=_Ev3-kyxhEh1afD7hClvuBxfDLp3L4AEudn2GrCXz8g,1106
116
+ je_editor/utils/exception/exceptions.py,sha256=4e2ivqFWgBq4L_8QgRjd79xdOAgR_tyW_hpBlQeePpw,506
117
+ je_editor/utils/file/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
118
+ je_editor/utils/file/open/__init__.py,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
119
+ je_editor/utils/file/open/open_file.py,sha256=wAFA6TZs5iL0VhBExfaJSwXfFJ26hkuHWwwZRrVf2Zo,2460
120
+ je_editor/utils/file/save/__init__.py,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
121
+ je_editor/utils/file/save/save_file.py,sha256=wq8HlW_NuBBLu7iqZburlRyx2iSWQPyOwX8vANs1WjE,2294
122
+ je_editor/utils/json/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
123
+ je_editor/utils/json/json_file.py,sha256=-rtW1JaIdL_Qkaso1tuLd3WCgz5hHUmmWqnn84yuJcg,2921
124
+ je_editor/utils/json_format/__init__.py,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
125
+ je_editor/utils/json_format/json_process.py,sha256=Gc975IBbcRF11Zxbp1iLwA56oEIIwL4D72Zx_wUHdy8,2942
126
+ je_editor/utils/logging/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
127
+ je_editor/utils/logging/loggin_instance.py,sha256=Bq2QUR7uQXmdE8J5BDU_mAu9-JA43vfWmgRDxzCLrX8,2468
128
+ je_editor/utils/multi_language/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
129
+ je_editor/utils/multi_language/english.py,sha256=DhmyXe4oa5Mpaoqzg9tOnCoA1wajPk0kWL01NORt-2M,10049
130
+ je_editor/utils/multi_language/multi_language_wrapper.py,sha256=M4l-zkDA1wGXVgFM39mhsfABnBZ5nXH9EkMEe-P0Xus,2065
131
+ je_editor/utils/multi_language/traditional_chinese.py,sha256=IaQNlAm13BuOYfnt04S9-VZ3Ixtgfq9kaKvSZGlrmDY,10105
132
+ je_editor/utils/redirect_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
133
+ je_editor/utils/redirect_manager/redirect_manager_class.py,sha256=J430b5L-qc8ILPigKBawFLQIF46km5ckGRfARTYkLVY,3869
134
+ je_editor/utils/venv_check/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
135
+ je_editor/utils/venv_check/check_venv.py,sha256=5sq4EGJA9POWcua4dq92hY-ON4laNV68URtXrJSCzHY,2177
136
+ je_editor-0.0.228.dist-info/licenses/LICENSE,sha256=KMhUHh6pnIUvmXDW-49L_Sz63bqkOlPDqsecaqKiitU,1091
137
+ je_editor-0.0.228.dist-info/METADATA,sha256=b70iUfixqXnQXTO0i2iGzPYH5hcM4JiWPrQHfZkWh_g,3487
138
+ je_editor-0.0.228.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
139
+ je_editor-0.0.228.dist-info/top_level.txt,sha256=_9YA7BgxpkmdLs-5V_UQILxClcMRgPyG1a3qaE-Bkcs,10
140
+ je_editor-0.0.228.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.40.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2021 JE-Chen
3
+ Copyright (c) 2021 ~ Now JE-Chen
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,34 +0,0 @@
1
- import time
2
- from pathlib import Path
3
- from threading import Thread
4
-
5
- from je_editor.utils.file.save.save_file import write_file
6
-
7
-
8
- class SaveThread(Thread):
9
-
10
- def __init__(self, file_to_save, text_to_write, auto_save=False):
11
- """
12
- :param file_to_save: file we want to auto save
13
- :param text_to_write: text that will be output to file
14
- :param auto_save: enable auto save or not
15
- """
16
- super().__init__()
17
- self.file = file_to_save
18
- self.path = None
19
- self.text_to_write = text_to_write
20
- self.auto_save = auto_save
21
- # set daemon
22
- self.daemon = True
23
-
24
- def run(self):
25
- # loop and save current edit file
26
- if self.file is not None:
27
- self.auto_save = True
28
- self.path = Path(self.file)
29
- while self.auto_save and self.file is not None:
30
- time.sleep(5)
31
- if self.path.exists() and self.path.is_file():
32
- write_file(self.file, self.text_to_write)
33
- else:
34
- break
@@ -1,143 +0,0 @@
1
- from PySide6 import QtGui
2
- from PySide6.QtCore import Qt, QRect
3
- from PySide6.QtGui import QPainter, QColor, QTextCharFormat, QTextFormat, QKeyEvent, QAction, QTextDocument
4
- from PySide6.QtWidgets import QPlainTextEdit, QWidget, QTextEdit
5
-
6
- from je_editor.pyside_ui.search_ui.search_text_box import SearchBox
7
- from je_editor.pyside_ui.syntax.python_syntax import PythonHighlighter
8
-
9
-
10
- class CodeEditor(QPlainTextEdit):
11
-
12
- def __init__(self):
13
- super().__init__()
14
- self.line_number = LineNumber(self)
15
- self.blockCountChanged.connect(self.update_line_number_area_width)
16
- self.updateRequest.connect(self.update_line_number_area)
17
- self.update_line_number_area_width(0)
18
- self.textChanged.connect(self.highlight_current_line)
19
- self.setTabStopDistance(
20
- QtGui.QFontMetricsF(self.font()).horizontalAdvance(' ') * 4
21
- )
22
- self.highlighter = PythonHighlighter(self.document())
23
- self.highlight_current_line()
24
- self.setLineWrapMode(self.LineWrapMode.NoWrap)
25
- # Search Text
26
- self.search_action = QAction("Search")
27
- self.search_action.setShortcut("Ctrl+f")
28
- self.search_action.triggered.connect(
29
- self.start_search_dialog
30
- )
31
- self.addAction(self.search_action)
32
-
33
- def start_search_dialog(self):
34
- self.search_box = SearchBox()
35
- self.search_box.search_back_button.clicked.connect(
36
- self.find_back_text
37
- )
38
- self.search_box.search_next_button.clicked.connect(
39
- self.find_next_text
40
- )
41
- self.search_box.show()
42
-
43
- def find_next_text(self):
44
- if self.search_box.isVisible():
45
- text = self.search_box.search_input.text()
46
- self.find(text)
47
-
48
- def find_back_text(self):
49
- if self.search_box.isVisible():
50
- text = self.search_box.search_input.text()
51
- self.find(text, QTextDocument.FindFlag.FindBackward)
52
-
53
- def line_number_paint(self, event):
54
- painter = QPainter(self.line_number)
55
- painter.fillRect(event.rect(), QColor(51, 51, 77))
56
- block = self.firstVisibleBlock()
57
- block_number = block.blockNumber()
58
- top = self.blockBoundingGeometry(block).translated(self.contentOffset()).top()
59
- bottom = top + self.blockBoundingRect(block).height()
60
- while block.isValid() and top <= event.rect().bottom():
61
- if block.isVisible() and bottom >= event.rect().top():
62
- number = str(block_number + 1)
63
- painter.setPen(QColor(179, 179, 204))
64
- painter.drawText(
65
- 0,
66
- top,
67
- self.line_number.width(),
68
- self.fontMetrics().height(),
69
- Qt.AlignmentFlag.AlignCenter,
70
- number,
71
- )
72
- block = block.next()
73
- top = bottom
74
- bottom = top + self.blockBoundingRect(block).height()
75
- block_number += 1
76
-
77
- def line_number_width(self):
78
- digits = len(str(self.blockCount()))
79
- space = 10 * digits
80
- return space
81
-
82
- def update_line_number_area_width(self, value):
83
- self.setViewportMargins(self.line_number_width(), 0, 0, 0)
84
-
85
- def resizeEvent(self, event):
86
- QPlainTextEdit.resizeEvent(self, event)
87
- cr = self.contentsRect()
88
- self.line_number.setGeometry(
89
- QRect(cr.left(), cr.top(), self.line_number_width(), cr.height()),
90
- )
91
-
92
- def update_line_number_area(self, rect, dy):
93
- if dy:
94
- self.line_number.scroll(0, dy)
95
- else:
96
- self.line_number.update(
97
- 0,
98
- rect.y(),
99
- self.line_number.width(),
100
- rect.height(),
101
- )
102
- if rect.contains(self.viewport().rect()):
103
- self.update_line_number_area_width(0)
104
-
105
- def highlight_current_line(self):
106
- selections = []
107
- if not self.isReadOnly():
108
- formats = QTextCharFormat()
109
- selection = QTextEdit.ExtraSelection()
110
- selection.format = formats
111
- color_of_the_line = QColor(92, 92, 138)
112
- selection.cursor = self.textCursor()
113
- selection.cursor.clearSelection()
114
- selections.append(selection)
115
- selection.format.setBackground(color_of_the_line)
116
- selection.format.setProperty(QTextFormat.FullWidthSelection, True)
117
- self.setExtraSelections(selections)
118
-
119
- def keyPressEvent(self, event):
120
- key_event = QKeyEvent(event)
121
- if key_event.modifiers() and Qt.Modifier.SHIFT:
122
- key = key_event.key()
123
- if key == Qt.Key.Key_Enter or key == Qt.Key.Key_Return:
124
- event.ignore()
125
- else:
126
- super().keyPressEvent(event)
127
- else:
128
- super().keyPressEvent(event)
129
- self.highlight_current_line()
130
-
131
- def mousePressEvent(self, event) -> None:
132
- super().mousePressEvent(event)
133
- self.highlight_current_line()
134
-
135
-
136
- class LineNumber(QWidget):
137
-
138
- def __init__(self, editor):
139
- QWidget.__init__(self, parent=editor)
140
- self.editor = editor
141
-
142
- def paintEvent(self, event):
143
- self.editor.line_number_paint(event)