diff --git a/.flake8 b/.flake8 new file mode 100644 index 0000000000000000000000000000000000000000..fea8ec0af620f45c52d30a99edd56596298dd189 --- /dev/null +++ b/.flake8 @@ -0,0 +1,5 @@ +[flake8] +ignore = W293,E301,E271,E265,W291,E722,E302,C901,E225,E128,E122,E226,E231 +max-line-length = 160 +exclude = tests/* +max-complexity = 10 \ No newline at end of file diff --git a/.gitignore b/.gitignore index cb4f4db5756b51e1bf9b02ef68954153d47676dc..036221f64e92d970a7fca4aa1462ed4eef0bfd5c 100644 --- a/.gitignore +++ b/.gitignore @@ -79,7 +79,7 @@ __pycache__/ .env .venv env/ -venv/ +venv*/ ENV/ env.bak/ venv.bak/ diff --git a/.mailmap b/.mailmap new file mode 100644 index 0000000000000000000000000000000000000000..24ad68450d2bc24ea30eebd573c918aef4a42fe2 --- /dev/null +++ b/.mailmap @@ -0,0 +1,2 @@ +pyminer development team +lixianglong \ No newline at end of file diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000000000000000000000000000000000000..3038127235d28bccd4c82845875be3d1910f0dab --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at team@pyminer.com. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq \ No newline at end of file diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000000000000000000000000000000000000..fdf7b481617f1ec753e8768e221661d2ef3d10c6 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,42 @@ +include README.md +include LICENSE +include setup.py +include MANIFEST.in +include pytest.ini +include .mailmap +include .flake8 + +recursive-exclude tools * +exclude tools +exclude dist +exclude CONTRIBUTING.md +exclude .editorconfig + + +# Load main dir but exclude things we don't want in the distro +graft src + +# Documentation +graft docs +exclude docs/\#* +exclude docs/man/*.1.gz + +exclude .git-blame-ignore-revs + +# Examples +graft examples + +# docs subdirs we want to skip +prune docs/build +prune docs/gh-pages +prune docs/dist + +# Patterns to exclude from any directory +global-exclude *~ +global-exclude *.flc +global-exclude *.yml +global-exclude *.pyc +global-exclude *.pyo +global-exclude .dircopy.log +global-exclude .git +global-exclude .ipynb_checkpoints \ No newline at end of file diff --git a/README.md b/README.md index 5f980a862409c8a6fceb1f12cceda29e35423e85..e02dacedb16b2d9481d9e686fe13e029ca010a36 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@

- +

@@ -25,30 +25,30 @@

-

PyMiner

+

pyminer

开源、友好、跨平台的数据分析解决方案

-PyMiner 是一款基于Python的开源、跨平台数据分析环境。它以方便Python初学者为己任,在Python的知识理论和工作实践之间搭建桥梁,竭诚为初学者服务。 +pyminer 是一款基于Python的开源、跨平台数据分析环境。它以方便Python初学者为己任,在Python的知识理论和工作实践之间搭建桥梁,竭诚为初学者服务。 它开箱即用,大大减少配置解释器环境的繁琐性。不仅提供了编程运行的功能,还能够以交互式的形式进行常见的数据分析操作,减少代码编写和文档查阅的时间。 -同时,PyMiner将提供面向新手的快速入门教程,教程正由开发团队编写中。同时,我们诚挚希望与Python培训机构合作,让我们的产品帮助到更多学习Python的人。 +同时,pyminer将提供面向新手的快速入门教程,教程正由开发团队编写中。同时,我们诚挚希望与Python培训机构合作,让我们的产品帮助到更多学习Python的人。 -PyMiner通过加载各种插件实现不同的需求,开发者可以通过编写插件,将PyMiner扩展的更强大、更趁手,甚至创建一番自己的商用程序。 +pyminer通过加载各种插件实现不同的需求,开发者可以通过编写插件,将pyminer扩展的更强大、更趁手,甚至创建一番自己的商用程序。

## 🔈 声明 -PyMiner 遵循LGPL协议,是一个开放、包容的开源项目,项目中的工具方法来源也非常广泛,因此允许并鼓励任何人在遵循LGPL协议的基础上: - -1. 将PyMiner用于商业、培训等任何合法场景; -2. 复制、修改 PyMiner中的任意代码且无需声明; -3. 复制修改 PyMiner官方文档; -4. 鼓励自行写作 PyMiner 相关的书籍、博客、文档等内容(收费也可); -5. 鼓励播主、培训机构培训 PyMiner工具的任何内容(收费也可); -6. 对于商业应用的技术咨询,PyMiner团队保留服务的收费权。 +pyminer 遵循LGPL协议,是一个开放、包容的开源项目,项目中的工具方法来源也非常广泛,因此允许并鼓励任何人在遵循LGPL协议的基础上: + +1. 将pyminer用于商业、培训等任何合法场景; +2. 复制、修改 pyminer中的任意代码且无需声明; +3. 复制修改 pyminer官方文档; +4. 鼓励自行写作 pyminer 相关的书籍、博客、文档等内容(收费也可); +5. 鼓励播主、培训机构培训 pyminer工具的任何内容(收费也可); +6. 对于商业应用的技术咨询,pyminer团队保留服务的收费权。 pyminer希望成为一个伟大的开源项目,也希望得到大家的认可和赞美,仅此而已。 @@ -64,21 +64,14 @@ pyminer希望成为一个伟大的开源项目,也希望得到大家的认可 注意: -- PyMiner 的官方发行版本为Python3.8+PySide2-5.15.2。开发者可自行使用其他版本的Python解释器配置相关环境。 -- PyMiner 曾经由PyQt5开发。但考虑到官方支持以及许可证的类型,我们已经迁移到了PySide2并改变许可证为LGPL。请勿使用PyQt5安装。 +- pyminer 的官方发行版本为Python3.8+PySide2-5.15.2。开发者可自行使用其他版本的Python解释器配置相关环境。 +- pyminer 曾经由PyQt5开发。但考虑到官方支持以及许可证的类型,我们已经迁移到了PySide2并改变许可证为LGPL。请勿使用PyQt5安装。 - 当使用Python3.8配置环境时,不支持3.8.0等低版本的Python3.8解释器。当使用Python3.8时,请使用3.8.5或者更高版本的解释器。 - 如果使用出现问题,欢迎提issue。 -

-

-QQ群 - -

-

- ## 🎁 文档地址 - 项目文档:[https://gitee.com/py2cn/pyminer/wikis](https://gitee.com/py2cn/pyminer/wikis) - API文档:[http://py2cn.gitee.io/pyminer](http://py2cn.gitee.io/pyminer) @@ -122,40 +115,31 @@ pyminer希望成为一个伟大的开源项目,也希望得到大家的认可 ```bash #第一步:下载源代码 git clone https://gitee.com/py2cn/pyminer.git -#第二步:同步安装依赖包和PyMiner,如果遇到安装失败的情况需要手动安装 -python -m pip install -i https://mirrors.cloud.tencent.com/pypi/simple -r requirements.txt +#安装依赖 (如果下载太慢,请复制源码目录下的 pip.ini 文件到python安装目录下) +pip install pyminer #第三步:运行主程序 python app2.py -``` -#### Linux/Mac OS安装 - -```bash -#第一步:下载源代码 -git clone https://gitee.com/py2cn/pyminer.git -#第二步:同步安装依赖包和PyMiner,如果遇到安装失败的情况需要手动安装 -python3 -m pip install -i https://mirrors.cloud.tencent.com/pypi/simple -r requirements_linux.txt -#第三步:运行主程序 -python3 app2.py ``` + ## 开发重点(2021年4月修订) -PyMiner项目现在的开发目标是,打造初学者友好的Python编程环境,方便更多的人与Python这位踏实可靠(也有点笨呆呆)的自动化助手相知、相熟。 +pyminer项目现在的开发目标是,打造初学者友好的Python编程环境,方便更多的人与Python这位踏实可靠(也有点笨呆呆)的自动化助手相知、相熟。 -因此PyMiner的开发重点为: +因此pyminer的开发重点为: 1、计算、统计方面低代码化功能性开发。需求详见:[低代码化功能性开发](https://gitee.com/py2cn/pyminer/issues/I3HTG9?from=project-issue) -2、编写适用于Python入门的PyMiner官方教程。需求详见:[编写教程](https://gitee.com/py2cn/pyminer/issues/I3I7FW?from=project-issue) 。在教程编写方面, +2、编写适用于Python入门的pyminer官方教程。需求详见:[编写教程](https://gitee.com/py2cn/pyminer/issues/I3I7FW?from=project-issue) 。在教程编写方面, 我们深知开发团队力量有限,因此诚挚希望可以和各位开发者或培训机构合作。 -3、插件商店的开发。插件商店可以让PyMiner如虎添翼,成为数据分析界的瑞士军刀。这一部分的开发需求详见:[插件商店](https://gitee.com/py2cn/pyminer/issues/I1TWAR?from=project-issue) +3、插件商店的开发。插件商店可以让pyminer如虎添翼。这一部分的开发需求详见:[插件商店](https://gitee.com/py2cn/pyminer/issues/I1TWAR?from=project-issue) 为了减少开发负担,样式表只使用浅色样式表(Fusion),不对深色样式表做优化,且不再进行界面语言翻译工作。 界面语言直接使用中文。 ## 📱 加入我们 -作者:PyMiner Development Team +作者:pyminer Development Team 邮箱:team@py2cn.com @@ -164,31 +148,31 @@ PyMiner项目现在的开发目标是,打造初学者友好的Python编程环

-QQ群 +QQ群

## 📱 支持我们
-微信支付 -支付宝 +微信支付 +支付宝
## 🚥 许可说明 本项目遵循LGPL许可证。 -许可解释权归属 PyMiner Development Team。 +许可解释权归属 pyminer Development Team。 ## 📸 预览截图 基本界面 -![avatar](resources/screenshot/main.png) +![avatar](src/pyminer/resources/screenshot/main.png) 代码提示 -![avatar](resources/screenshot/code.png) +![avatar](src/pyminer/resources/screenshot/code.png) 绘图 -![avatar](resources/screenshot/check_data.png) +![avatar](src/pyminer/resources/screenshot/check_data.png) diff --git a/dist.py b/dist.py deleted file mode 100644 index 58f030d7a1b30ae7110995449c62986931937901..0000000000000000000000000000000000000000 --- a/dist.py +++ /dev/null @@ -1,28 +0,0 @@ -""" -这个脚本用于制作PyMiner的安装包。 -""" -import os -import shutil - -DIST_PATH = r"C:\Users\12957\Desktop\pyminer_dist\dist2" -CONDA_PATH = r"C:\Users\12957\Desktop\pyminer_dist\Miniconda3-latest-Windows-x86_64.exe" -CODE_FOLDER = os.path.join(DIST_PATH, "bin") -ADDR = "https://gitee.com/py2cn/pyminer.git" -BRANCH = "master" -PACKUP_COMPONENTS_FOLDER = r"C:\Users\12957\Desktop\pyminer_dist\PyMiner打包组件" -# os.system("start /wait "f" {CONDA_PATH} /InstallationType=JustMe /RegisterPython=0 /S /D={DIST_PATH}") -if not os.path.exists(CODE_FOLDER): - pass -else: - shutil.rmtree(CODE_FOLDER) - -# os.mkdir(CODE_FOLDER) -os.system(f"git clone {ADDR} -b {BRANCH} {CODE_FOLDER}") -for d in os.listdir(PACKUP_COMPONENTS_FOLDER): - src = os.path.join(PACKUP_COMPONENTS_FOLDER, d) - dest = os.path.join(DIST_PATH, d) - shutil.copy(src, dest) - -PYTHON_PATH = os.path.join(DIST_PATH, "python.exe") -os.system(f"{PYTHON_PATH} -m pip install -r {os.path.join(CODE_FOLDER, 'requirements.txt')} -i " - f"https://mirrors.cloud.tencent.com/pypi/simple") diff --git a/features/extensions/extensionlib/extension_lib.py b/features/extensions/extensionlib/extension_lib.py deleted file mode 100644 index 90126d73bbf9236929e8d36101e8b8fcbb14d5ec..0000000000000000000000000000000000000000 --- a/features/extensions/extensionlib/extension_lib.py +++ /dev/null @@ -1,558 +0,0 @@ -import inspect -import os -from typing import TYPE_CHECKING, Callable, Dict, List, Tuple, Optional, Any - -from PySide2.QtCore import QRect, Signal -from PySide2.QtWidgets import QWidget, QDialog - -import utils -from features.workspace.data_adapter import UniversalAdapter - -if TYPE_CHECKING: - from pmgwidgets import PMGToolBar - - -def wrapper(): - from features.extensions.extensions_manager.manager import extensions_manager - from features.workspace.data_manager import data_manager - - from features.workspace_old.datamanager.datamanager import data_manager as data_manager_old - from utils import get_main_window - from features.ui import pmwidgets - from features.extensions.extensionlib import baseext - from features.io.exceptions import PMExceptions - from pyminer_comm.base import DataDesc - - class ExtensionLib: - pm_widgets = pmwidgets - BaseInterface = baseext.BaseInterface - BaseExtension = baseext.BaseExtension - - def get_interface(self, name: str) -> BaseInterface: - """ - 获取名为`name`的插件的公共接口(由interface定义) - Args: - name: - - Returns: - - """ - return extensions_manager.get_extension(name).public_interface - - def insert_widget(self, widget, insert_mode, config=None): - """ - 在主界面上插入一个控件。 - Args: - widget: - insert_mode: - config: - - Returns: - - """ - return extensions_manager.ui_inserters[insert_mode]( - widget, config) - - def get_main_program_dir(self): - """ - 获取主程序的根目录 - Returns: - - """ - return utils.get_root_dir() - - class UI(): - @staticmethod - def widget_exists(widget_name: str) -> bool: - if widget_name in get_main_window().dock_widgets.keys(): - return True - else: - return False - - @staticmethod - def get_toolbar(toolbar_name: str) -> 'PMGToolBar': - """ - 获取工具栏 - - Args: - toolbar_name:工具栏名称 - - Returns: - - """ - tb = get_main_window().toolbars.get(toolbar_name) - - return tb - - @staticmethod - def get_toolbar_widget(toolbar_name: str, widget_name: str) -> Optional['QWidget']: - """ - 获取工具栏上的控件(按钮等) - - Args: - toolbar_name:工具栏名称 - widget_name:工具栏上的控件名称 - - Returns: - - """ - toolbar = ExtensionLib.UI.get_toolbar(toolbar_name) - if toolbar is not None: - widget = toolbar.get_control_widget(widget_name) - return widget - return None - - @staticmethod - def get_main_window_geometry() -> 'QRect': - """ - 获取主界面的尺寸 - - Returns: - - """ - return get_main_window().geometry() - - @staticmethod - def raise_dock_into_view(dock_widget_name: str) -> None: - """ - 将界面上的控件提升到可视的位置 - - Args: - dock_widget_name: - - Returns: - - """ - return get_main_window().raise_dock_into_view(dock_widget_name) - - @staticmethod - def get_default_font() -> str: - """ - 获取默认字体文件 - - Returns: Filepath of font. - - """ - app = get_main_window() - return os.path.join(app.font_dir, app.default_font) - - @staticmethod - def switch_toolbar(toolbar_name: str, switch_only: bool = True): - """ - 切换工具栏 - - Args: - toolbar_name: - switch_only: - - Returns: - - """ - app = get_main_window() - app.switch_toolbar(toolbar_name, switch_only) - - @staticmethod - def exec_dialog(dlg: QDialog): - assert isinstance(dlg, QDialog) - win = get_main_window() - dlg.setParent(win) - dlg.exec_() - - class Signal(): - @staticmethod - def get_close_signal() -> Signal: - """ - 获取关闭信号 - - Returns: - - """ - return get_main_window().close_signal - - @staticmethod - def get_window_geometry_changed_signal(): - """ - 获取窗口位置和尺寸变化的事件 - - Returns: - - """ - return get_main_window().window_geometry_changed_signal - - @staticmethod - def get_layouts_ready_signal(): - """ - 获取布局加载完毕的事件 - - Returns: - - """ - return get_main_window().layouts_ready_signal - - @staticmethod - def get_widgets_ready_signal(): - """ - 获取控件加载完毕的事件 - - Returns: - - """ - return get_main_window().widgets_ready_signal - - @staticmethod - def get_events_ready_signal(): - """ - 获取界面信号和事件绑定完毕的事件。 - - Returns: - - """ - return get_main_window().events_ready_signal - - @staticmethod - def get_settings_changed_signal() -> 'Signal': - """ - 获取设置发生变化时的事件。 - - Returns: - - """ - return get_main_window().settings_changed_signal - - class Program(): - @staticmethod - def add_settings_panel(text: str, panel_content: List[Tuple[str, str]]): - """ - 添加设置面板 - - Args: - text: - panel_content: - - Returns: - - """ - - return get_main_window().main_option_form.add_settings_panel(text, panel_content) - - @staticmethod - def show_log(level: str, module: str, content: str) -> None: - """ - 调用——PluginInterface.show_log('info','CodeEditor','新建文件') - 输出——2020-08-29 23:43:10 hzy INFO [CodeEditor]:新建文件 - Args: - level: 类型,比如‘info’ - module: 模块。比如'Jupyter' - content: 内容。自定义的字符串 - - Returns: - """ - get_main_window().slot_flush_console(level, module, content) - - @staticmethod - def get_main_program_dir(): - """ - 获取主程序路径 - - Returns: - - """ - return utils.get_root_dir() - - @staticmethod - def get_settings_item_from_file(file: str, item: str, mode: str = "user"): - """ - 从设置文件中获取设置项 - Args: - file: - item: - mode: - - Returns: - - """ - return utils.get_settings_item_from_file(file, item, mode) - - @staticmethod - def write_settings_item_to_file(file: str, item: str, value: Any): - """ - 将配置项写入设置文件中 - Args: - file: - item: - value: - - Returns: - - """ - utils.write_settings_item_to_file(file, item, value) - get_main_window().settings_changed_signal.emit() - - @staticmethod - def set_work_dir(work_dir: str) -> None: - """ - 设置当前工作路径 - - Args: - work_dir: - - Returns: - - """ - utils.write_settings_item_to_file("config.ini", "MAIN/PATH_WORKDIR", work_dir) - get_main_window().settings_changed_signal.emit() - - @staticmethod - def get_work_dir() -> str: - """ - 获取当前工作路径 - - Returns: - - """ - - dir = utils.get_settings_item_from_file("config.ini", "MAIN/PATH_WORKDIR") - if (not isinstance(dir, str)) or (not os.path.exists(dir)): - dir = os.path.join(os.path.expanduser("~"), "Desktop") - utils.write_settings_item_to_file("config.ini", "MAIN/PATH_WORKDIR", dir) - return dir - - @staticmethod - def get_theme() -> str: - """ - 获取主题 - Returns: - - """ - return utils.get_settings_item_from_file("config.ini", "MAIN/THEME") - - @staticmethod - def run_python_file(file_path: str, interpreter_path: str): - """ - 运行Python文件命令 - TODO: Write a shell console into pyminer. - - Args: - file_path: - - Returns: - - """ - raise DeprecationWarning - - @staticmethod - def get_plugin_data_path(plugins_name: str) -> str: - """ - 获取插件的数据文件路径 - Args: - plugins_name: - - Returns:str,文件夹路径。 - - """ - ext = extensions_manager.get_extension(plugins_name) - # assert ext is not None, 'Extension named %s isn\'t exist!' % plugins_name - path = os.path.join(os.path.expanduser('~'), '.pyminer', 'packages') - if not os.path.exists(path): - os.mkdir(path) - plugin_data_path = os.path.join(path, plugins_name) - if not os.path.exists(plugin_data_path): - os.mkdir(plugin_data_path) - return plugin_data_path - - @staticmethod - def show_exception_occured_panel(error: BaseException, solution: str, solution_command: str = ''): - """ - - :param error: - :param solution: - :param solution_command: - :return: - """ - PMExceptions.get_instance().emit_exception_occured_signal(error, solution, solution_command) - - class Data: - @staticmethod - def get_adapter(key: str) -> UniversalAdapter: - return data_manager[key] - - @staticmethod - def clear(): - data_manager_old.clear() - - @staticmethod - def delete_variable(var_name: str, provider: str = 'unknown'): - """ - 删除变量 - Args: - var_name: - provider: - - Returns: - - """ - data_manager_old.delete_data(var_name, provider) - - @staticmethod - def get_all_variable_names() -> List[str]: - """ - 获取所有的变量名 - - Returns: - - """ - return list(data_manager.container.keys()) - - @staticmethod - def get_all_public_variable_names() -> List[str]: - """ - 获取所有非保留的变量的名称 - - Returns: - - """ - return list(data_manager_old.get_all_public_var().keys()) - - @staticmethod - def get_all_variables() -> Dict[str, object]: - """ - 获取全部变量(包含保留类型,可能返回结果比较乱,需要审慎使用) - - Returns: - """ - return data_manager_old.get_all_var() - - @staticmethod - def get_all_public_variables() -> Dict[str, object]: - """ - 获取所有的外部可访问变量。 - - Returns: - """ - return data_manager_old.get_all_public_var() - - @staticmethod - def add_data_changed_callback(callback: Callable[[str, Any, str], None]) -> None: - """ - 添加数据改变时触发的回调函数 - - Args: - callback: - - Returns:None - """ - assert callable(callback) - assert len( - list(inspect.signature(callback).parameters.keys())) == 3, 'Function args should be 3' - data_manager_old.on_modification(callback) - - @staticmethod - def remove_data_changed_callback(callback: Callable): - if callback in data_manager_old.modification_callback_actions: - data_manager_old.modification_callback_actions.remove(callback) - print('removed callback!') - - @staticmethod - def add_data_deleted_callback(deletion_callback: Callable[[str, str], None]): - """ - 绑定的函数,要求其输入的函数参数为两个。 - - Args: - deletion_callback: - - Returns: - - """ - assert callable(deletion_callback) - assert len( - list(inspect.signature(deletion_callback).parameters.keys())) == 2, 'Function args should be 2' - data_manager_old.on_deletion(deletion_callback) - - @staticmethod - def var_exists(var_name: str): - """ - 判断var_name对应的变量是否存在 - Args: - var_name: - - Returns: - - """ - return var_name in data_manager - - @staticmethod - def set_var(varname: str, variable, provider='unknown', **info): - """ - - Args: - varname: - variable: - provider: - **info: - - Returns: - - """ - assert isinstance(variable, DataDesc), \ - 'variable name %s ,%s is not type DataDesc' % (varname, variable) - data_manager_old.set_var(varname, variable, provider) - - @staticmethod - def get_var(var_name: str) -> object: - """ - - Args: - var_name: - - Returns: - - """ - raise DeprecationWarning - # return get_var(var_name) - - @staticmethod - def get_data_desc(var_name) -> DataDesc: - desc = data_manager_old.get_var(var_name) - assert isinstance(desc, DataDesc), repr(desc) - return desc - - @staticmethod - def update_var_dic(var_dic: dict, provider: str, metadata_dic: dict = None): - """ - - Args: - var_dic: - provider: - metadata_dic: - - Returns: - - """ - raise DeprecationWarning - - @staticmethod - def get_metadata(varname: str) -> dict: - """ - - Args: - varname: - - Returns: - - """ - return data_manager_old.get_data_info(varname) - - @staticmethod - def get_all_metadata() -> dict: - """ - - Returns: - - """ - d = {k: v for k, v in data_manager_old.metadataset.items()} - return d - - return ExtensionLib() - - -extension_lib = wrapper() diff --git a/packages/code_editor/codeeditor/abstracteditor.py b/packages/code_editor/codeeditor/abstracteditor.py deleted file mode 100644 index 5b70f67918a5be12dee2a23b4f2e9d94b0c3e643..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/abstracteditor.py +++ /dev/null @@ -1,249 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -""" -编辑器 -编辑器构造参数: -{'language':'Python', -'ext_name':'.py', -'lexer':PythonLexer, -'builtin_keywords':['int','float',...], -'dynamic_keywords':['func','method',...] -} -常用功能: -1、批量缩进、批量取消缩进(语言无关) -2、整理格式(语言相关,需要对应语言进行重写) -3、在终端执行代码(语言相关:需要已知编译器或者解释器的路径。) -4、更新补全选项(语言无关) -5、复制、粘贴、剪切(语言无关) -6、批量注释、批量取消注释(未实现。注意,这部分功能比较复杂,需要该语言的注释符号) -7、查找、替换等(语言无关) -8、保存、打开(需要已知扩展名) -Created on 2020/9/7 -@author: Irony -@email: 892768447@qq.com -@file: editor -@description: Code Editor -""" - -__version__ = '0.1' - -import ast -import json -import logging -import os -import re -import time -from itertools import groupby -from typing import TYPE_CHECKING, List, Iterable, Dict, Set, Tuple, Any - -from PySide2.QtCore import QDir -from PySide2.QtWidgets import QWidget, QMessageBox - -from pmgwidgets import in_unit_test - -logger = logging.getLogger(__name__) - - -class PMAbstractEditor(QWidget): - def __init__(self, parent): - super().__init__(parent) - self.last_save_time = 0 - self.extension_lib = None - - def set_shortcut(self): - pass - - def set_lib(self, extension_lib): - pass - - def update_settings(self, settings: Dict[str, Any]): - pass - - def slot_textedit_focusedin(self, e): - pass - - def goto_line(self, line_no: int): - """ - 跳转到对应行列 - :return: - """ - pass - - def _init_lexer(self, lexer: 'QsciLexer') -> None: - """ - 初始化语法解析器 - - :return: None - """ - pass - - def _init_signals(self) -> None: - """ - 初始化信号绑定 - - :return: None - """ - pass - - def _init_actions(self) -> None: - """ - 初始化额外菜单项 - - :return: - """ - pass - - def autocomp(self): - pass - - def get_word_under_cursor(self): - pass - - def set_text(self, text: str) -> None: - """ - 设置编辑器内容 - - :type text: str - :param text: 文本内容 - :return: None - """ - pass - - def set_modified(self, modified: bool) -> None: - """ - 设置内容是否被修改 - - :param modified: 是否被修改 True or False - :type: bool - :return: None - """ - pass - - def load_file(self, path: str) -> None: - """ - 加载文件 - - :param path: 文件路径 - :type path: str - :return: None - """ - pass - - def set_encoding(self, encoding: str): - """ - 设置文本编码,仅支持 ASCII 和 UTF-8 - - :param encoding: ascii or gbk or utf-8 - :type: str - :return: - """ - - def slot_about_close(self, save_all=False) -> QMessageBox.StandardButton: - """ - 是否需要关闭以及保存 - - :param save_all: 当整个窗口关闭时增加是否全部关闭 - :return:QMessageBox.StandardButton - """ - if not self.modified(): - return QMessageBox.Discard - buttons = QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel - if save_all: - buttons |= QMessageBox.SaveAll # 保存全部 - buttons |= QMessageBox.NoToAll # 放弃所有 - ret = QMessageBox.question(self, self.tr('Save'), self.tr('Save file "{0}"?').format(self.filename()), buttons, - QMessageBox.Save) - if ret == QMessageBox.Save or ret == QMessageBox.SaveAll: - if not self.save(): - return QMessageBox.Cancel - return ret - - def slot_modification_changed(self, modified: bool) -> None: - """ - 内容被修改槽函数 - - :param modified: 是否被修改 - :type modified: bool - :return: - """ - title = self.windowTitle() - if modified: - if not title.startswith('*'): - self.setWindowTitle('*' + title) - else: - if title.startswith('*'): - self.setWindowTitle(title[1:]) - - def slot_save(self) -> None: - """ - 保存时触发的事件。 - :return: - """ - - def slot_text_changed(self) -> None: - pass - - def save(self) -> bool: - """ - 保存文件时调用的方法 - :return: - """ - - def modified(self) -> bool: - """ - 返回内容是否被修改 - - :rtype: bool - :return: 返回内容是否被修改 - """ - return self.textEdit.isModified() - - def filename(self) -> str: - """ - 返回当前文件名 - - :rtype: str - :return: 返回当前文件名 - """ - return os.path.basename(self._path) - - def path(self) -> str: - """ - 返回当前文件路径 - - :rtype: str - :return: 返回当前文件路径 - """ - return self._path - - def set_path(self, path: str) -> None: - """ - 设置文件路径 - - :param path: 设置文件路径 - :type path: str - :return: None - """ - self._path = path - - title = self.windowTitle() - new_title = os.path.basename(self._path) - if title.startswith('*'): - self.setWindowTitle('*' + new_title) - else: - self.setWindowTitle(new_title) - - def text(self, selected: bool = False) -> str: - """ - 返回编辑器选中或者全部内容 - Args: - selected: - - Returns: - - """ - return '' - - def slot_file_modified_externally(self): - return diff --git a/packages/code_editor/codeeditor/autocomplete.py b/packages/code_editor/codeeditor/autocomplete.py deleted file mode 100644 index 2d4a2eb6334bd0f6e63ac9548495cc795d28ef2a..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/autocomplete.py +++ /dev/null @@ -1,127 +0,0 @@ -# encoding=utf-8 -import sys -import time -import logging -from PySide2.QtWidgets import QApplication, QMainWindow -from PySide2.QtCore import QObject, Signal, QThread -from pmgwidgets import PMQThreadObject - -logger = logging.getLogger(__name__) - - -def jedi_init(): - """ - 初始化jedi,预加载相关模块 - :return: - """ - t0 = time.time() - import jedi - code = """ -from PyQt5.QtWidgets import * -from PyQt5.QtCore import * -from PyQt5.QtGui import * -from numpy import * -a - """ - script = jedi.Script(code) - script.complete(6, 1) - t1 = time.time() - logger.info('time elapsed for preload autocompletion modules/s:' + str(t1 - t0)) - - -class PMAutoCompWorker(QObject): - signal_autocomp_parsed = Signal(list, int, int) - - def __init__(self): - super(PMAutoCompWorker, self).__init__() - self.quit = False - self.code: str = '' - self.line: int = 0 - self.col: int = 0 - self.last_code = '' - self.last_line = '' - self.last_col = '' - self.path: str = '' - - def set_scan_task(self, code: str, line: int, col: int, path: str = ''): - self.code = code - self.line = line - self.col = col - self.path = path - - def is_changed(self) -> bool: - return not (self.code == self.last_code and self.line == self.last_line and self.col == self.last_col) - - def work(self): - """ - 工作函数. - - :return: - """ - import jedi - try: - jedi_init() - except: - pass - while 1: - if self.quit: - break - if not self.is_changed(): - QThread.msleep(50) - continue - else: - script = jedi.Script(code=self.code, path=self.path) - - try: - line, col = self.line, self.col - completions = script.complete(line + 1, col + 1, fuzzy=True) - names = [c.name for c in completions] - self.signal_autocomp_parsed.emit(names, line, col) - - except ValueError as e: - pass - except Exception: - pass - self.last_col = self.col - self.last_line = self.line - self.last_code = self.code - - def on_exit(self): - self.quit = True - - -class PMPythonAutocompleter(PMQThreadObject): - def __init__(self): - autocomp_worker = PMAutoCompWorker() - super(PMPythonAutocompleter, self).__init__(parent=None, worker=autocomp_worker) - self.signal_autocomp_parsed = self.worker.signal_autocomp_parsed - - def terminate(self): - logger.warning('client quit') - self.worker.on_exit() - - if self.thread.isRunning(): - self.thread.quit() - self.thread.wait(500) - logger.warning('Autocompleter quit!!') - - -if __name__ == '__main__': - logger.setLevel(logging.INFO) - - - class W(QMainWindow): - - def closeEvent(self, a0) -> None: - super().closeEvent(a0) - m.terminate() - - - app = QApplication(sys.argv) - # w = W() - # w.show() - logger.warning("Start print log") - m = PMPythonAutocompleter() - m.worker.set_scan_task('i', 0, 0, '') - m.signal_autocomp_parsed.connect(lambda x: print(x)) - sys.exit(app.exec_()) diff --git a/packages/code_editor/codeeditor/errors_translation/translate.py b/packages/code_editor/codeeditor/errors_translation/translate.py deleted file mode 100644 index 154e6bf36ee61bf65c5a600dfaa58bc90201f730..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/errors_translation/translate.py +++ /dev/null @@ -1,20 +0,0 @@ -import json -import os - -d = {} -with open('translations.txt', 'r',encoding='utf-8') as f: - for l in f.read().split('\n'): - if l.startswith(('E', 'W', 'C', 'F')): - try: - l1 = l.split() - id = l1[0].strip() - print(l1, l) - msg = ' '.join([x.strip() for x in l1[1:]]) - d[id] = msg - except: - pass -l.split() -print(d) -path = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'flake8_trans.json') -with open(path, 'w') as f: - json.dump(d, f, indent=4) diff --git a/packages/code_editor/codeeditor/infer.py b/packages/code_editor/codeeditor/infer.py deleted file mode 100644 index e343ca389999ae7651ad88565aa42beabb1d648c..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/infer.py +++ /dev/null @@ -1,18 +0,0 @@ -from jedi import Script -source = ''' -import keyword - -class C: - pass - -class D: - pass - -x = D() - -def f(): - pass - -for variable in [keyword, f, C, x]: - variable -''' diff --git a/packages/code_editor/codeeditor/qtpyeditor/Utilities/__init__.py b/packages/code_editor/codeeditor/qtpyeditor/Utilities/__init__.py deleted file mode 100644 index 9895a578e2ceddfa762b2b1321b9d284e0170d55..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/qtpyeditor/Utilities/__init__.py +++ /dev/null @@ -1,164 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2003 - 2020 Detlev Offenbach -# - -""" -Package implementing various functions/classes needed everywhere within eric6. -""" -import os -import re -from codecs import BOM_UTF8, BOM_UTF16, BOM_UTF32 -from .autocomp import AutoCompThread -try: - EXTSEP = os.extsep -except AttributeError: - EXTSEP = "." -codingBytes_regexps = [ - (5, re.compile(br"""coding[:=]\s*([-\w_.]+)""")), - (1, re.compile(br"""<\?xml.*\bencoding\s*=\s*['"]([-\w_.]+)['"]\?>""")), -] - - -def decode(text): - """ - Function to decode some byte text into a string. - - @param text byte text to decode (bytes) - @return tuple of decoded text and encoding (string, string) - """ - try: - if text.startswith(BOM_UTF8): - # UTF-8 with BOM - return str(text[len(BOM_UTF8):], 'utf-8'), 'utf-8-bom' - elif text.startswith(BOM_UTF16): - # UTF-16 with BOM - return str(text[len(BOM_UTF16):], 'utf-16'), 'utf-16' - elif text.startswith(BOM_UTF32): - # UTF-32 with BOM - return str(text[len(BOM_UTF32):], 'utf-32'), 'utf-32' - coding = get_codingBytes(text) - if coding: - return str(text, coding), coding - except (UnicodeError, LookupError): - pass - - # Assume UTF-8 - try: - return str(text, 'utf-8'), 'utf-8' - except (UnicodeError, LookupError): - pass - - guess = None - # Try the universal character encoding detector - try: - import chardet - guess = chardet.detect(text) - if ( - guess and - guess['confidence'] > 0.95 and - guess['encoding'] is not None - ): - codec = guess['encoding'].lower() - return str(text, codec), '{0}'.format(codec) - except (UnicodeError, LookupError): - pass - except ImportError: - pass - - # Use the guessed one even if confifence level is low - if guess and guess['encoding'] is not None: - try: - codec = guess['encoding'].lower() - return str(text, codec), '{0}'.format(codec) - except (UnicodeError, LookupError): - pass - - # Assume UTF-8 loosing information - return str(text, "utf-8", "ignore"), 'utf-8' - - -def get_codingBytes(text): - """ - Function to get the coding of a bytes text. - - @param text bytes text to inspect (bytes) - @return coding string - """ - lines = text.splitlines() - for coding in codingBytes_regexps: - coding_re = coding[1] - head = lines[:coding[0]] - for line in head: - m = coding_re.search(line) - if m: - return str(m.group(1), "ascii").lower() - return None - - -def readEncodedFile(filename): - """ - Function to read a file and decode its contents into proper text. - - @param filename name of the file to read (string) - @return tuple of decoded text and encoding (string, string) - """ - f = open(filename, "rb") - text = f.read() - f.close() - return decode(text) - - -def joinext(prefix, ext): - """ - Function to join a file extension to a path. - - The leading "." of ext is replaced by a platform specific extension - separator if necessary. - - @param prefix the basepart of the filename (string) - @param ext the extension part (string) - @return the complete filename (string) - """ - if ext[0] != ".": - ext = ".{0}".format(ext) - # require leading separator to match os.path.splitext - return prefix + EXTSEP + ext[1:] - - -def getDirs(path, excludeDirs): - """ - Function returning a list of all directories below path. - - @param path root of the tree to check - @param excludeDirs basename of directories to ignore - @return list of all directories found - """ - try: - names = os.listdir(path) - except EnvironmentError: - return [] - - dirs = [] - for name in names: - if ( - os.path.isdir(os.path.join(path, name)) and - not os.path.islink(os.path.join(path, name)) - ): - exclude = 0 - for e in excludeDirs: - if name.split(os.sep, 1)[0] == e: - exclude = 1 - break - if not exclude: - dirs.append(os.path.join(path, name)) - - for name in dirs[:]: - if not os.path.islink(name): - dirs = dirs + getDirs(name, excludeDirs) - - return dirs - - -def isWindowsPlatform(): - return os.name == 'nt' diff --git a/packages/code_editor/codeeditor/qtpyeditor/__init__.py b/packages/code_editor/codeeditor/qtpyeditor/__init__.py deleted file mode 100644 index 77d67299ad19e901a217bda0792e02c0779d56f1..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/qtpyeditor/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# -*- coding:utf-8 -*- -# @Time: 2021/1/18 8:02 -# @Author: Zhanyi Hou -# @Email: 1295752786@qq.com -# @File: __init__.py - -from .highlighters import PythonHighlighter -from .codeeditor import PMGPythonEditor diff --git a/packages/code_editor/codeeditor/qtpyeditor/codeedit/__init__.py b/packages/code_editor/codeeditor/qtpyeditor/codeedit/__init__.py deleted file mode 100644 index 09d0e2c687d95237892c96712e859232e4f7bc74..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/qtpyeditor/codeedit/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding:utf-8 -*- -# @Time: 2021/1/30 11:36 -# @Author: Zhanyi Hou -# @Email: 1295752786@qq.com -# @File: __init__.py -from .basecodeedit import PMBaseCodeEdit -from .pythonedit import PMPythonCodeEdit diff --git a/packages/code_editor/codeeditor/qtpyeditor/codeedit/pythonedit.py b/packages/code_editor/codeeditor/qtpyeditor/codeedit/pythonedit.py deleted file mode 100644 index 61a4347eadb9ca5e1a80a87d664ab1bbc0080378..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/qtpyeditor/codeedit/pythonedit.py +++ /dev/null @@ -1,222 +0,0 @@ -# -*- coding:utf-8 -*- -# @Time: 2021/1/30 11:36 -# @Author: Zhanyi Hou -# @Email: 1295752786@qq.com -# @File: pythonedit.py -import logging -import re -import time -from typing import Tuple, List, TYPE_CHECKING - -from PySide2.QtCore import QPoint, QModelIndex -from PySide2.QtGui import QTextCursor, QMouseEvent, QKeyEvent -from PySide2.QtWidgets import QLabel, QApplication - -from packages.code_editor.codeeditor.qtpyeditor.Utilities import AutoCompThread -from packages.code_editor.codeeditor.qtpyeditor.codeedit import PMBaseCodeEdit -from packages.code_editor.codeeditor.qtpyeditor.highlighters import PythonHighlighter - -logger = logging.getLogger(__name__) -logger.setLevel(logging.DEBUG) -if TYPE_CHECKING: - from jedi.api import Completion - - -class PMPythonCodeEdit(PMBaseCodeEdit): - def __init__(self, parent=None): - super(PMPythonCodeEdit, self).__init__(parent) - # self.setLineWrapMode(QPlainTextEdit.NoWrap) - # self.doc_tab_widget: 'PMGPythonEditor' = parent - # self.filename = '*' - # self.path = '' - # self.modified = True - self.highlighter = PythonHighlighter(self.document()) - self.setTabChangesFocus(False) - self.autocomp_thread = AutoCompThread() - self.autocomp_thread.trigger.connect(self.on_autocomp_signal_received) - self.autocomp_thread.start() - - self.setMouseTracking(True) - self.last_mouse_position: QPoint = None - self.last_mouse_moved = time.time() - - self.hint_widget = QLabel('', parent=self) # 提示框标签。 - self.hint_widget.setVisible(False) - self.hint_widget.setStyleSheet("background-color:#d8d8d8") - - def on_autocomp_signal_received(self, text_cursor_content: tuple, completions: List['jedi.api.Completion']): - ''' - 当收到自动补全提示信号时,执行的函数。 - :param text_cursor_content:(row,col,hint_when_completion_triggered) - :param completions: - :return: - ''' - - hint = self._get_hint() - logger.debug('hint_when_completion_triggered:{0},current_hint:{1}'.format(text_cursor_content[2], hint)) - if hint.startswith(text_cursor_content[2]): - if len(completions) == 1: - if completions[0].name == self._get_hint(): - self.hide_autocomp() - return - self.autocomp_show(completions) - else: - self.hide_autocomp() - - def hide_autocomp(self): - self.popup_hint_widget.hide_autocomp() - - def on_text_changed(self): - super(PMPythonCodeEdit, self).on_text_changed() - self._get_textcursor_pos() - cursor_pos = self.cursorRect() - self.popup_hint_widget.setGeometry( - cursor_pos.x() + 5, cursor_pos.y() + 20, - self.popup_hint_widget.sizeHint().width(), - self.popup_hint_widget.sizeHint().height()) - self._request_autocomp() - - def _insert_autocomp(self, e: QModelIndex = None): - row = self.popup_hint_widget.currentRow() - if 0 <= row < self.popup_hint_widget.count(): - complete, word_type = self.popup_hint_widget.get_complete(row) - word = self.popup_hint_widget.get_text(row) - if not word.startswith(self._get_hint()): - return - comp = word[len(self._get_hint()):] - self.insertPlainText(comp) - textcursor: QTextCursor = self.textCursor() - word = self.get_word(textcursor.blockNumber(), textcursor.columnNumber() - 1) - if word_type == 'function': - self.insertPlainText('()') - tc = self.textCursor() - tc.movePosition(QTextCursor.PreviousCharacter) - self.setTextCursor(tc) - elif word_type == 'keyword': - self.insertPlainText(' ') - self.popup_hint_widget.hide() - - def _get_nearby_text(self): - block_text = self.textCursor().block().text() - col = self.textCursor().columnNumber() - return block_text[:col] - - def _get_hint(self): - block_text = self.textCursor().block().text() - if block_text.lstrip().startswith('#'): # 在注释中 - return '' - col = self.textCursor().columnNumber() - nearby_text = block_text[:col] - hint = re.split( - '[.:;,?!\s \+ \- = \* \\ \/ \( \)\[\]\{\} ]', nearby_text)[-1] - return hint - - def _request_autocomp(self): - pos = self._get_textcursor_pos() - nearby_text = self._get_nearby_text() - hint = self._get_hint() - - if hint == '' and not nearby_text.endswith(('.', '\\\\', '/')): - self.popup_hint_widget.hide_autocomp() - return - self.autocomp_thread.text_cursor_pos = (pos[0] + 1, pos[1]) - self.autocomp_thread.text = self.toPlainText() - - def autocomp_show(self, completions: List['Completion']): - l = [] - if len(completions) != 0: - self.popup_hint_widget.set_completions(completions) - else: - self.popup_hint_widget.hide() - self.popup_hint_widget.autocomp_list = l - - def _get_textcursor_pos(self) -> Tuple[int, int]: - return self.textCursor().blockNumber(), self.textCursor().columnNumber() - - def mousePressEvent(self, a0: QMouseEvent) -> None: - # PluginInterface.show_tool_bar('code_editor_toolbar') - if self.popup_hint_widget.isVisible(): - self.popup_hint_widget.hide_autocomp() - super().mousePressEvent(a0) - - def keyPressEvent(self, event: QKeyEvent) -> None: - super().keyPressEvent(event) - - def on_back_tab(self): - cursor = self.textCursor() - if cursor.hasSelection(): - self.editUnindent() - else: - cursor = self.textCursor() - cursor.clearSelection() - cursor.movePosition(QTextCursor.StartOfBlock) - for i in range(4): - cursor.movePosition(QTextCursor.NextCharacter, QTextCursor.KeepAnchor, 1) - if not cursor.selectedText().endswith(' '): - cursor.movePosition(QTextCursor.PreviousCharacter, QTextCursor.KeepAnchor, 1) - break - cursor.removeSelectedText() - - def on_tab(self): - cursor = self.textCursor() - if cursor.hasSelection(): - self.editIndent() - return - else: - nearby_text = self._get_nearby_text() - hint = self._get_hint() - - if hint == '' and not nearby_text.endswith(('.', '\\\\', '/')): - cursor = self.textCursor() - cursor.insertText(" ") - else: - self._request_autocomp() - - def mouseMoveEvent(self, e: QMouseEvent): - """ - 鼠标移动事件 - 移动到marker上的时候,便弹出提示框。 - 编辑器的提示位置 - :param e: - :return: - """ - super(PMPythonCodeEdit, self).mouseMoveEvent(e) - cursor: QTextCursor = self.cursorForPosition(e.pos()) - - if not self.should_check_code(): - return - line, col = cursor.blockNumber(), cursor.positionInBlock() - flag = False - text = '' - if line in self.highlighter.highlight_marks: - marker_propertys = self.highlighter.highlight_marks.get(line) - for marker_property in marker_propertys: - start = marker_property[0] - if marker_property[1] == -1: - end = len(cursor.block().text()) - else: - end = start + marker_property[1] - if start <= col < end: - flag = True - text += marker_property[3] + '\n' - break - self.hint_widget.setGeometry(e.x(), e.y() + 20, - self.hint_widget.sizeHint().width(), self.hint_widget.sizeHint().height()) - - self.hint_widget.setText(text.strip()) - self.hint_widget.setVisible(flag) - e.ignore() - - def should_check_code(self) -> bool: - """ - 返回是否会对代码做insight. - :return: - """ - return len(self.toPlainText()) < 10000 * 120 - - -if __name__ == '__main__': - app = QApplication([]) - e = PMPythonCodeEdit() - e.show() - app.exec_() diff --git a/packages/code_editor/codeeditor/qtpyeditor/codeeditor/__init__.py b/packages/code_editor/codeeditor/qtpyeditor/codeeditor/__init__.py deleted file mode 100644 index 95b43fe1d1d068016d95f9580858c806ac783ed5..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/qtpyeditor/codeeditor/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# -*- coding:utf-8 -*- -# @Time: 2021/1/30 18:11 -# @Author: Zhanyi Hou -# @Email: 1295752786@qq.com -# @File: __init__.py.py - -from packages.code_editor.codeeditor.qtpyeditor.codeeditor.baseeditor import PMGBaseEditor -from packages.code_editor.codeeditor.qtpyeditor.codeeditor.pythoneditor import PMGPythonEditor \ No newline at end of file diff --git a/packages/code_editor/codeeditor/qtpyeditor/codeeditor/abstracteditor.py b/packages/code_editor/codeeditor/qtpyeditor/codeeditor/abstracteditor.py deleted file mode 100644 index 810b8735cdfb2cd937d97a7c03db90572c6919f2..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/qtpyeditor/codeeditor/abstracteditor.py +++ /dev/null @@ -1,271 +0,0 @@ -# -*- coding:utf-8 -*- -# @Time: 2021/2/6 10:29 -# @Author: Zhanyi Hou -# @Email: 1295752786@qq.com -# @File: abstracteditor.py -# !/usr/bin/env python -# -*- coding: utf-8 -*- - -""" -编辑器 -编辑器构造参数: -{'language':'Python', -'ext_name':'.py', -'lexer':PythonLexer, -'builtin_keywords':['int','float',...], -'dynamic_keywords':['func','method',...] -} -常用功能: -1、批量缩进、批量取消缩进(语言无关) -2、整理格式(语言相关,需要对应语言进行重写) -3、在终端执行代码(语言相关:需要已知编译器或者解释器的路径。) -4、更新补全选项(语言无关) -5、复制、粘贴、剪切(语言无关) -6、批量注释、批量取消注释(未实现。注意,这部分功能比较复杂,需要该语言的注释符号) -7、查找、替换等(语言无关) -8、保存、打开(需要已知扩展名) -Created on 2020/9/7 -@author: Irony -@email: 892768447@qq.com -@file: editor -@description: Code Editor -""" - -__version__ = '0.1' - -import ast -import json -import logging -import os -import re -import time -from itertools import groupby -from typing import TYPE_CHECKING, List, Iterable, Dict, Set, Tuple, Any - -from PySide2.QtCore import QDir -from PySide2.QtWidgets import QWidget, QMessageBox - -from pmgwidgets import in_unit_test - -logger = logging.getLogger(__name__) - - -class PMAbstractEditor(QWidget): - def __init__(self, parent): - super().__init__(parent) - self.last_save_time = 0 - self.extension_lib = None - - def set_shortcut(self): - pass - - def update_settings(self, settings: Dict[str, Any]): - pass - - def slot_textedit_focusedin(self, e): - pass - - def goto_line(self, line_no: int): - """ - 跳转到对应行列 - :return: - """ - pass - - def _init_lexer(self, lexer: 'QsciLexer') -> None: - """ - 初始化语法解析器 - - :return: None - """ - pass - - def _init_signals(self) -> None: - """ - 初始化信号绑定 - - :return: None - """ - pass - - def _init_actions(self) -> None: - """ - 初始化额外菜单项 - - :return: - """ - pass - - def autocomp(self): - pass - - def get_word_under_cursor(self): - pass - - def set_text(self, text: str) -> None: - """ - 设置编辑器内容 - - :type text: str - :param text: 文本内容 - :return: None - """ - pass - - def set_modified(self, modified: bool) -> None: - """ - 设置内容是否被修改 - - :param modified: 是否被修改 True or False - :type: bool - :return: None - """ - pass - - def load_file(self, path: str) -> None: - """ - 加载文件 - - :param path: 文件路径 - :type path: str - :return: None - """ - pass - - def set_encoding(self, encoding: str): - """ - 设置文本编码,仅支持 ASCII 和 UTF-8 - - :param encoding: ascii or gbk or utf-8 - :type: str - :return: - """ - - def slot_about_close(self, save_all=False) -> QMessageBox.StandardButton: - """ - 是否需要关闭以及保存 - - :param save_all: 当整个窗口关闭时增加是否全部关闭 - :return:QMessageBox.StandardButton - """ - if not self.modified(): - return QMessageBox.Discard - buttons = QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel - if save_all: - buttons |= QMessageBox.SaveAll # 保存全部 - buttons |= QMessageBox.NoToAll # 放弃所有 - ret = QMessageBox.question(self, self.tr('Save'), self.tr('Save file "{0}"?').format(self.filename()), buttons, - QMessageBox.Save) - if ret == QMessageBox.Save or ret == QMessageBox.SaveAll: - if not self.save(): - return QMessageBox.Cancel - return ret - - def slot_modification_changed(self, modified: bool) -> None: - """ - 内容被修改槽函数 - - :param modified: 是否被修改 - :type modified: bool - :return: - """ - title = self.windowTitle() - if modified: - if not title.startswith('*'): - self.setWindowTitle('*' + title) - else: - if title.startswith('*'): - self.setWindowTitle(title[1:]) - - def slot_save(self) -> None: - """ - 保存时触发的事件。 - :return: - """ - - def default_save_path(self) -> str: - """ - 获取当前默认存储为的路径 - Default directory. - :return: - """ - return '' - - def slot_text_changed(self) -> None: - pass - - def save(self) -> bool: - """ - 保存文件时调用的方法 - :return: - """ - - def modified(self) -> bool: - """ - 返回内容是否被修改 - - :rtype: bool - :return: 返回内容是否被修改 - """ - return self.textEdit.isModified() - - def filename(self) -> str: - """ - 返回当前文件名 - - :rtype: str - :return: 返回当前文件名 - """ - return os.path.basename(self._path) - - def path(self) -> str: - """ - 返回当前文件路径 - - :rtype: str - :return: 返回当前文件路径 - """ - return self._path - - def set_path(self, path: str) -> None: - """ - 设置文件路径 - - :param path: 设置文件路径 - :type path: str - :return: None - """ - self._path = path - - title = self.windowTitle() - new_title = os.path.basename(self._path) - if title.startswith('*'): - self.setWindowTitle('*' + new_title) - else: - self.setWindowTitle(new_title) - - def text(self, selected: bool = False) -> str: - """ - 返回编辑器选中或者全部内容 - Args: - selected: - - Returns: - - """ - return '' - - def slot_file_modified_externally(self): - return - - def change_color_scheme(self, color_scheme_name: str): - pass - - def slot_code_format(self): - pass - - def slot_code_run(self): - pass - - def slot_code_sel_run(self): - pass diff --git a/packages/code_editor/codeeditor/qtpyeditor/codeeditor/pythoneditor.py b/packages/code_editor/codeeditor/qtpyeditor/codeeditor/pythoneditor.py deleted file mode 100644 index 140c6f695b5198a9cb11ab1e6176b10a9ca48e4d..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/qtpyeditor/codeeditor/pythoneditor.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- coding:utf-8 -*- -# -# 代码高亮部分来源: -# https://blog.csdn.net/xiaoyangyang20/article/details/68923133 -# -# 窗口交互逻辑为本人原创,转载请注明出处! -# -# 自动补全借用了Jedi库,能够达到不错的体验。 -# 文本编辑器采用了一个QThread作为后台线程,避免补全过程发生卡顿。后台线程会延迟结果返回, -# 返回时如果光标位置未发生变化,则可以显示补全菜单,否则认为文本已经改变,就应当进行下一次补全操作。 - -# @Time: 2021/1/18 8:03 -# @Author: Zhanyi Hou -# @Email: 1295752786@qq.com -# @File: editor.py - -from PySide2.QtWidgets import QApplication, QListWidgetItem, QWidget, QHBoxLayout, QVBoxLayout, QLabel, QTextBrowser -from typing import Dict -from packages.code_editor.codeeditor.qtpyeditor.codeeditor import PMGBaseEditor -from packages.code_editor.codeeditor.qtpyeditor.codeedit import PMBaseCodeEdit, PMPythonCodeEdit - - -class PMGPythonEditor(PMGBaseEditor): - def __init__(self, parent: 'PMGPythonEditor' = None): - super().__init__(parent=parent) - edit = PMPythonCodeEdit(self) - self.set_edit(edit) - - def update_settings(self, settings: Dict[str, str]): - pass - - def open(self, path: str): - pass - - def autocomp_stop(self): - print('autocomp stopped') - self.text_edit.autocomp_thread.on_exit() - - -if __name__ == '__main__': - app = QApplication([]) - editor = PMPythonCodeEdit() - editor.show() - - editor.setPlainText("abcdefg = 123\n" * 100) - editor.highlighter.registerHighlight(5, 3, 7, editor.highlighter.DEHIGHLIGHT, 'This is an Dehighlight') - editor.highlighter.registerHighlight(3, 1, 7, editor.highlighter.WARNING, 'This is an warning') - editor.highlighter.rehighlight() - - app.exec_() diff --git a/packages/code_editor/codeeditor/qtpyeditor/highlighters/__init__.py b/packages/code_editor/codeeditor/qtpyeditor/highlighters/__init__.py deleted file mode 100644 index 84f16438f6776318ffe7b49e28b65262c725c073..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/qtpyeditor/highlighters/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# -*- coding:utf-8 -*- -# @Time: 2021/1/18 8:53 -# @Author: Zhanyi Hou -# @Email: 1295752786@qq.com -# @File: __init__.py.py -from .python import PythonHighlighter diff --git a/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/class.png b/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/class.png deleted file mode 100644 index 0043dfea1927fd9fb0c2e112a2d3e0beb0ebaf26..0000000000000000000000000000000000000000 Binary files a/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/class.png and /dev/null differ diff --git a/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/function.png b/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/function.png deleted file mode 100644 index 6315576c0a9deac88ad99d40c31afd7dc9c0dfb9..0000000000000000000000000000000000000000 Binary files a/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/function.png and /dev/null differ diff --git a/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/instance.png b/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/instance.png deleted file mode 100644 index e20ea96e35be9950b808f2150093fcc97c01dba6..0000000000000000000000000000000000000000 Binary files a/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/instance.png and /dev/null differ diff --git a/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/keyword.png b/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/keyword.png deleted file mode 100644 index 831de23d37730c2b8706fd842667c218edc4d687..0000000000000000000000000000000000000000 Binary files a/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/keyword.png and /dev/null differ diff --git a/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/module.png b/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/module.png deleted file mode 100644 index 2caa6f11b90b06e75e3bc915bb340e644376c9bd..0000000000000000000000000000000000000000 Binary files a/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/module.png and /dev/null differ diff --git a/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/param.png b/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/param.png deleted file mode 100644 index 96bd66a86f4685a80eb3e9d159c2d10732ace076..0000000000000000000000000000000000000000 Binary files a/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/param.png and /dev/null differ diff --git a/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/path.png b/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/path.png deleted file mode 100644 index e8aece230d4d03df5974e547ce42adc877ed3f2e..0000000000000000000000000000000000000000 Binary files a/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/path.png and /dev/null differ diff --git a/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/property.png b/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/property.png deleted file mode 100644 index c4a9a513b6322ea97ed633d06179a34aa03b31b4..0000000000000000000000000000000000000000 Binary files a/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/property.png and /dev/null differ diff --git a/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/statement.png b/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/statement.png deleted file mode 100644 index 8b2f1be41615c474d2045808a010b0466560d287..0000000000000000000000000000000000000000 Binary files a/packages/code_editor/codeeditor/qtpyeditor/icons/autocomp/statement.png and /dev/null differ diff --git a/packages/code_editor/codeeditor/qtpyeditor/linenumber.py b/packages/code_editor/codeeditor/qtpyeditor/linenumber.py deleted file mode 100644 index b8e9556160e250b6003108a9724e9ad9d4ad7ea3..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/qtpyeditor/linenumber.py +++ /dev/null @@ -1,147 +0,0 @@ -# -*- coding:utf-8 -*- -# @Time: 2021/1/18 18:23 -# @Author: Zhanyi Hou -# @Email: 1295752786@qq.com -# @File: linenumber.py -#!/usr/bin/python3 -# QcodeEditor.py by acbetter. -# 来源:https://stackoverflow.com/questions/40386194/create-text-area-textedit-with-line-number-in-pyqt -# -*- coding: utf-8 -*- -import os - -from PySide2.QtGui import QFontDatabase -from PySide2.QtCore import Qt, QRect, QSize -from PySide2.QtWidgets import QWidget, QPlainTextEdit, QTextEdit -from PySide2.QtGui import QColor, QPainter, QTextFormat, QFont - -import utils - - -class QLineNumberArea(QWidget): - def __init__(self, editor): - super().__init__(editor) - self.codeEditor = editor - - def sizeHint(self): - return QSize(self.editor.lineNumberAreaWidth(), 0) - - def paintEvent(self, event): - self.codeEditor.lineNumberAreaPaintEvent(event) - - -class QCodeEditor(QPlainTextEdit): - def __init__(self, parent=None): - super().__init__(parent) - - fontId = QFontDatabase.addApplicationFont( - os.path.join(utils.get_root_dir(), 'resources', 'fonts', 'SourceCodePro-Regular.ttf')) - fontFamilies = QFontDatabase.applicationFontFamilies(fontId) - - self.font = QFont() - self.font.setPointSize(15) # 设置行号的字体大小 - # font.setFamily("Microsoft YaHei UI") # 设置行号的字体 - self.font.setFamily(fontFamilies[0]) # 设置行号的字体 - self.setFont(self.font) - - self.lineNumberArea = QLineNumberArea(self) - self.blockCountChanged.connect(self.updateLineNumberAreaWidth) - self.updateRequest.connect(self.updateLineNumberArea) - self.cursorPositionChanged.connect(self.highlightCurrentLine) - self.updateLineNumberAreaWidth(0) - - def lineNumberAreaWidth(self): - digits = 1 - max_value = max(1, self.blockCount()) - while max_value >= 10: - max_value /= 10 - digits += 1 - space = 30 + self.fontMetrics().width('9') * digits - return space - - def updateLineNumberAreaWidth(self, _): - self.setViewportMargins(self.lineNumberAreaWidth(), 0, 0, 0) - - def updateLineNumberArea(self, rect, dy): - if dy: - self.lineNumberArea.scroll(0, dy) - else: - self.lineNumberArea.update(0, rect.y(), self.lineNumberArea.width(), rect.height()) - if rect.contains(self.viewport().rect()): - self.updateLineNumberAreaWidth(0) - - def resizeEvent(self, event): - super().resizeEvent(event) - cr = self.contentsRect() - self.lineNumberArea.setGeometry(QRect(cr.left(), cr.top(), self.lineNumberAreaWidth(), cr.height())) - - # def highlightCurrentLine(self): - # """ - # TODO:如何在不出现问题的情况下保证编辑器打开? - # :return: - # """ - # return - # extraSelections = [] - # if not self.isReadOnly(): - # selection = QTextEdit.ExtraSelection() - # lineColor = QColor(Qt.yellow).lighter(160) - # selection.format.setBackground(lineColor) - # selection.format.setProperty(QTextFormat.FullWidthSelection, True) - # selection.cursor = self.textCursor() - # selection.cursor.clearSelection() - # extraSelections.append(selection) - # self.setExtraSelections(extraSelections) - - def highlightCurrentLine(self): - extra_selections = [] - - if not self.isReadOnly(): - selection = QTextEdit.ExtraSelection() - - line_color = QColor(235, 252, 252) # 当前行背景色 - selection.format.setBackground(line_color) - - selection.format.setProperty(QTextFormat.FullWidthSelection, True) - - selection.cursor = self.textCursor() - selection.cursor.clearSelection() - - extra_selections.append(selection) - - self.setExtraSelections(extra_selections) - - def lineNumberAreaPaintEvent(self, event): - painter = QPainter(self.lineNumberArea) - - painter.fillRect(event.rect(), QColor(240, 240, 240)) - - block = self.firstVisibleBlock() - blockNumber = block.blockNumber() - top = self.blockBoundingGeometry(block).translated(self.contentOffset()).top() - bottom = top + self.blockBoundingRect(block).height() - - # Just to make sure I use the right font - height = self.fontMetrics().height() - while block.isValid() and (top <= event.rect().bottom()): - if block.isVisible() and (bottom >= event.rect().top()): - number = str(blockNumber + 1) - painter.setPen(Qt.black) - - self.font.setPointSize(10) - painter.setFont(self.font) - - painter.drawText(0, top, self.lineNumberArea.width(), height, Qt.AlignCenter, number) - - block = block.next() - top = bottom - bottom = top + self.blockBoundingRect(block).height() - blockNumber += 1 - - -if __name__ == '__main__': - import sys - from PySide2.QtWidgets import QApplication - - app = QApplication(sys.argv) - codeEditor = QCodeEditor() - codeEditor.show() - sys.exit(app.exec_()) \ No newline at end of file diff --git a/packages/code_editor/codeeditor/qtpyeditor/syntaxana.py b/packages/code_editor/codeeditor/qtpyeditor/syntaxana.py deleted file mode 100644 index d000b8eee4a0f3779306f23216c06c6de0a80f77..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/qtpyeditor/syntaxana.py +++ /dev/null @@ -1,267 +0,0 @@ -# -*- coding:utf-8 -*- -# @Time: 2021/1/18 8:49 -# @Author: Zhanyi Hou -# @Email: 1295752786@qq.com -# @File: syntaxana.py -# -*- coding: utf-8 -*- -''' -powered by NovalIDE -来自NovalIDE的词法分析模块 -作者:侯展意 -词法分析模块的重要组成单元、 -依靠各种正则表达式进行特征的提取。 - -''' -from typing import List, Tuple, Dict -import re - - -def getReplacingDic() -> Dict: - dic = {} - dic[','] = ',' - dic['。'] = '.' - dic[';'] = ';' - dic[':'] = ':' - dic['‘'] = '\'' - dic['’'] = '\'' - dic['“'] = '\"' - dic['”'] = '\"' - dic['【'] = '[' - dic['】'] = ']' - dic['('] = '(' - dic[')'] = ')' - return dic - - -def getIndent(s: str) -> Tuple[str, int]: - s = s.replace('\t', ' ') # tab替换成四个空格 - s = s.rstrip() - if (len(s) > 0): - for i, ch in enumerate(s): - if (ch != ' '): - return s[i:], i - return "", i + 1 - else: - return "", 0 - - -def removeComment(s: str) -> str: - pos = s.find('#') - if (pos != -1): - return s[:pos] - else: - return s - - -def getStringContent(row): - pass - - -def removeStringContent(row: str) -> str: - row = row.replace('\"', '\'') - if (row.count('\'') >= 2): - s = getAllFromRegex(regex=r'[\'](.*?)[\']', st=row) - for item in s: - row = row.replace('\'%s\'' % item, '\'\'') # 带着分号一起换掉。 - return row - else: - return row - - -def parseVarType(row: str): - getInfoFromRegex(r'[\'](.*?)[\']', row) - - -def getAllFromRegex(regex: str, st: str) -> List[str]: - foundList = re.findall(re.compile(regex, re.S), st) - - return foundList - - -def getInfoFromRegex(regex: str, st: str) -> str: # 从正则表达式中获取信息的函数。如果没有任何结果则返回0。 - foundList = re.findall(re.compile(regex, re.S), st) - item = '' - if (foundList != []): - item = foundList[0] - return item - - -def getWordsFromString(s: str) -> list: - if (s != ''): - syms = s.split(',') # 用逗号分隔开。 - for i in range(len(syms)): - syms[i] = syms[i].strip() - return syms - else: - return [] - - -def countPar(row: str) -> Tuple[int, int, int]: # 检测三类括号的数量。 - lparNum = row.count('(') - rparNum = row.count(')') - lbraceNum = row.count('{') - rbraceNum = row.count('}') - lbracketNum = row.count('[') - rbracketNum = row.count(']') - - return lparNum - rparNum, lbraceNum - rbraceNum, lbracketNum - rbracketNum # 返回左括号数量减去右括号数量。 - - -def checkPar(row: str) -> int: - a, b, c = countPar(row) - if (a == 0) & (b == 0) & (c == 0): - return 1 - else: - if (a < 0) | (b < 0) | (c < 0): - return -1 - else: - return 0 - - -def getBracketedContent(row: str) -> Tuple[str, str, str]: # 获取任何类型括号最外层内部的东西。(不是小括号!!!) - # 返回值:一个表示括号类型的量,以及一个有关括号中内容的字符串,以及括号前的内容。 - lst = [-1, -1, -1] - symList = ['(', '[', '{'] - symListCouple = [')', ']', '}'] - length = len(row) - for i in range(len(lst)): - lst[i] = row.find(symList[i]) - if (lst[i] == -1): - lst[i] = length - minVal = min(lst) - if (minVal == length): # 说明根本没括号 - return '', '', row[:minVal] # 所以返回值不仅没有括号,还没有括号中的内容(废话),只是返回括号前面的东西。 - else: - pos = lst.index(minVal) # 获取最小值的索引 - regex = r'[%s](.*)[%s]' % (symList[pos], symListCouple[pos]) - return symList[pos], getInfoFromRegex(regex=regex, st=row), row[:minVal] - - -def getFuncArgs(row: str) -> List[str]: # 获取函数的输入参数。 - - s = getInfoFromRegex(regex=r'[(](.*)[)]', st=row) - - li = getWordsFromString(s) - - if (len(li) > 0): - if (li[0] == 'self'): # 不允许函数的第一个参数名字叫self。 - li.pop(0) - for i in range(len(li)): - eqSymPos = li[i].find('=') - - if (eqSymPos != -1): # 如果eqSymPos中有一个等号 - li[i] = li[i][:eqSymPos] # 那么将等号去除 - colonSymPos = li[i].find(':') - if colonSymPos != -1: - li[i] = li[i][:colonSymPos] - - return li - - -def getFuncName(row: str) -> str: # 获取函数的名称。 - return getInfoFromRegex(regex=r'def\s(.*?)[(]', st=row) # 注意,需要匹配函数名,其中还有个空格。 - - -def getLocalVarNames(row: str) -> List[str]: # 获取局部变量的名称。 - li = getInfoFromRegex(regex=r'(.*?)[=]', st=row) # 注意,需要匹配局部变量的名称,其中还有个空格。 - - words = getWordsFromString(li) - result = [] - for w in words: # 如果是函数的方法,则不可。 - if (w.find('.') == -1): - result.append(w) - return result - - -def is_number(str_number: str) -> bool: - if (str_number.split(".")[0]).isdigit() or str_number.isdigit() or (str_number.split('-')[-1]).split(".")[ - -1].isdigit(): - return True - else: - return False - - -def getForVariables(row: str) -> List[int]: - ''' - 获取for循环中定义的变量。 - ''' - s = getInfoFromRegex(r'for(.*?)in', row) - s = s.strip() - return getWordsFromString(s) - - -def getVarType(row: str) -> str: - ''' - 获取变量的类型,比如集合,数字等等。 - ''' - bracket, content, outer = getBracketedContent(row) - li = outer.split('=') - if (len(li) >= 1): - - if (li[1].strip() == ''): # 这种情况下为直接赋值的语句, - if (bracket == '('): - return ':tuple' - elif (bracket == '['): - return ':list' - else: - st = li[1].split(',')[0] - if (is_number(st)): - return ':number' - - return '' - - -class Row(): - def __init__(self, pos: int, text: str, indent: int) -> None: - self.pos = pos - self.text = text - self.indent = indent - - def __repr__(self) -> str: - return 'row:' + repr(self.pos) + "\t indent:" + repr(self.indent) + "\t text:" + self.text + '\n' - - -def regularize(rawText: List[str]) -> List[Row]: - global kwdTuple, indexList, charStr - - f = rawText # 获取打开的文件数组,每个元素是一行。 - regularifiedText = '' - rowList = [] - currentRow = Row(0, '', 0) # 创建一个没有含义的对象,这样方便类型检查。 - inStaticFunction = False - inFunctionDefinition = False - skipLine = False - currentFuncIndent = 0 - currentIndent = 0 - funcIndent = 0 - - for i, l in enumerate(f): - l = removeStringContent(l) - l = removeComment(l) - - if (skipLine == False): - row, currentIndent = getIndent(l) # 获取当前的行名和缩进,同时修剪掉行首的空格 - currentRow = Row(i, row, currentIndent) - rowList.append(currentRow) - - else: - currentRow.text += l.strip() # 如果判断出这一行还没有结束,就不用获取当前的缩进,直接缀连即可。 - rowList.append(Row(i, '', 0)) # 这一行相应的没有任何内容 - - cp = checkPar(currentRow.text) - - if (cp == 0): # 如果括号不匹配,那么就再继续进行,直至寻找到符合要求的行为止。 - skipLine = True - if (len(currentRow.text) >= 200): # 长度超出,强行退出。 - skipLine = False - continue - elif (cp == -1): # 如果右边括号反倒更多,就跳出这种情况。 - skipLine = False - continue - else: - skipLine = False - return rowList - - -if __name__ == '__main__': - regularize(['', '', '']) diff --git a/packages/code_editor/codeeditor/qtpyeditor/translations/qt_zh_CN.qm b/packages/code_editor/codeeditor/qtpyeditor/translations/qt_zh_CN.qm deleted file mode 100644 index 765078f2772c13314b1273053fd9f747018fbb34..0000000000000000000000000000000000000000 Binary files a/packages/code_editor/codeeditor/qtpyeditor/translations/qt_zh_CN.qm and /dev/null differ diff --git a/packages/code_editor/codeeditor/qtpyeditor/translations/qt_zh_CN.ts b/packages/code_editor/codeeditor/qtpyeditor/translations/qt_zh_CN.ts deleted file mode 100644 index 9204a0315caf922ec015ccdc077296d0b16412fc..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/qtpyeditor/translations/qt_zh_CN.ts +++ /dev/null @@ -1,143 +0,0 @@ - - - - - FindDialog - - - Text to Find - 要查找的文本 - - - - Text to Replace - 要替换的文本 - - - - Wrap - 循环查找 - - - - Regex - 查找正则表达式 - - - - Case Sensitive - 大小写敏感 - - - - Whole Word - 全字匹配 - - - - Up - 向上 - - - - Down - 向下 - - - - Replace - 替换 - - - - Replace All - 全部替换 - - - - FindInPathWidget - - - Case - 大小写敏感 - - - - Whole Word - 全字匹配 - - - - Find - 查找 - - - - Find In Path - 在路径中查找 - - - - PMGBaseEditor - - - Save - 保存 - - - - Save file "{0}"? - 是否保存文件"{0}"? - - - - Save file - 保存文件 - - - - Format Code - 格式化代码 - - - - Run Code - 运行代码 - - - - Run Selected Code - 运行选中代码 - - - - Find - 查找 - - - - Find In Path - 在路径中查找 - - - - AutoComp - 自动补全 - - - - Add Breakpoint - 添加断点 - - - - Remove Breakpoint - 移除断点 - - - - View BreakPoints - 查看所有断点 - - - diff --git a/packages/code_editor/codeeditor/qtpyeditor/ui/__init__.py b/packages/code_editor/codeeditor/qtpyeditor/ui/__init__.py deleted file mode 100644 index 0110c60161a8df5b8f2981f5e2961b55456ff9d7..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/qtpyeditor/ui/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -""" -Created on 2020/9/12 -@author: Irony -@site: https://pyqt5.com , https://github.com/892768447 -@email: 892768447@qq.com -@file: __init__.py -@description: -""" - diff --git a/packages/code_editor/codeeditor/simpleeditor/__init__.py b/packages/code_editor/codeeditor/simpleeditor/__init__.py deleted file mode 100644 index cbfee26a8cbb0ac7babfe8a6287405df0b6edac9..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/simpleeditor/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# -*- coding:utf-8 -*- -# @Time: 2021/1/18 8:01 -# @Author: Zhanyi Hou -# @Email: 1295752786@qq.com -# @File: __init__.py.py diff --git a/packages/code_editor/codeeditor/syntaxana.py b/packages/code_editor/codeeditor/syntaxana.py deleted file mode 100644 index 1d35e1a5a7276d1cef7994d5028b34695268044e..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/syntaxana.py +++ /dev/null @@ -1,71 +0,0 @@ -import re - -camelCaseRegex = re.compile(r'[\w|\d]([A-Z])') # 识别驼峰命名的正则表达式 -underLineCaseRegex = re.compile(r'_(\w)') # 识别下划线命名方法的正则表达式 - - -def find_camelcase_hint(word): - sub = re.findall(camelCaseRegex, word) - s = word[0] + ''.join(sub) - return s - - -def find_underline_hint(word): - sub = re.findall(underLineCaseRegex, word) - s = word[0] + ''.join(sub) - return s - - -def ifMatchCamelCase(word='', hint=''): - """ - 匹配形如‘isValidStudentNumber’这类的驼峰命名法。 - """ - global camelCaseRegex - if len(word) >= 1: - sub = re.findall(camelCaseRegex, word) - - s = word[0] + ''.join(sub) - if s.lower().startswith(hint): - return True - return False - - -def ifMatchUnderlineCase(word='', hint=''): - """ - 匹配形如‘is_valid_student_number’这类的下划线命名法。 - """ - global underLineCaseRegex - if len(word) >= 1: - sub = re.findall(underLineCaseRegex, word) - s = word[0] + ''.join(sub) - if s.lower().startswith(hint): - return True - return False - - -def filter_words(word_list, hint): - """ - 提取下划线或者驼峰命名的字符。 - """ - result_list = [] - for word in word_list: - if word.lower().startswith(hint): - result_list.append(word) - elif ifMatchCamelCase(word, hint): - result_list.append(word) - result_list.append(hint) - elif ifMatchUnderlineCase(word, hint): - result_list.append(word) - result_list.append(hint) - else: - continue - result_list = list(set(result_list)) - for i in range(len(result_list)): - result_list[i] = result_list[i].strip() + ' ' - return result_list - - -if __name__ == '__main__': - from pmgwidgets import pmgprint - sub = re.findall(camelCaseRegex, 'CcAsDs') - pmgprint(sub) diff --git a/packages/code_editor/codeeditor/tests/get_flake8_output.py b/packages/code_editor/codeeditor/tests/get_flake8_output.py deleted file mode 100644 index 13b30bc2c278f0a3cb593822fb219b0a8c3523c6..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/tests/get_flake8_output.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -""" -Created on 2020/9/10 -@author: Irony -@site: https://pyqt.site https://github.com/PyQt5 -@email: 892768447@qq.com -@file: get_flake8_output -@description: get flake8 lint output -""" - -__Author__ = 'Irony' -__Copyright__ = 'Copyright (c) 2020' -__Version__ = 'Version 1.0' - -import io -import os -from contextlib import redirect_stdout - -from flake8.main import application - -with io.StringIO() as out, redirect_stdout(out): - app = application.Application() - app.initialize( - ['flake8', '--exit-zero', '--config', os.path.abspath('../.flake8')]) - app.run_checks([os.path.abspath('../syntaxana.py')]) - app.report() - ret = out.getvalue() -print(ret) -# report = Report(app) -# print(report.get_statistics('E')) -# print(report.get_statistics('W')) -# print(report.get_statistics('F')) diff --git a/packages/code_editor/codeeditor/tests/get_yapf_output.py b/packages/code_editor/codeeditor/tests/get_yapf_output.py deleted file mode 100644 index b5b7ba40d7d8d9157bdab1c37d8903ada185f819..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/tests/get_yapf_output.py +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -""" -Created on 2020/9/10 -@author: Irony -@email: 892768447@qq.com -@file: get_yapf_output -@description: test yapf and get output -""" - -__Author__ = 'Irony' -__Copyright__ = 'Copyright (c) 2020' -__Version__ = 'Version 1.0' - -import os - -from yapf.yapflib import py3compat -from yapf.yapflib import yapf_api - -source = open(os.path.abspath('../pythoneditor.py'), 'rb').read().decode() -source = py3compat.removeBOM(source) - -try: - reformatted_source, _ = yapf_api.FormatCode( - source, - filename='pythoneditor.py', - print_diff=True, - style_config=os.path.abspath('../.style.yapf') - ) - print(reformatted_source) -except Exception as e: - raise e diff --git a/packages/code_editor/codeeditor/tests/test_file.py b/packages/code_editor/codeeditor/tests/test_file.py deleted file mode 100644 index 55eec7dfa654e80c366aa7e46dc36b7dee68aa87..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/tests/test_file.py +++ /dev/null @@ -1,29 +0,0 @@ -import numpy as np -from numpy import * - -a = array([1, 2, 3, 4]) - - -def a(a, b, c): - if 1 in [1, 2, 3]: - a += 1 - pass - O = 0 - i = 123 - h = 123 - h = 456 - o = 0 - f = [o for o in range(5)] - print(o) - print(O, i) - pass - - -while (1): - if a > 0: - break - continue - - -def O1(): - pass diff --git a/packages/code_editor/codeeditor/tests/theme_xml_json.py b/packages/code_editor/codeeditor/tests/theme_xml_json.py deleted file mode 100644 index 6eb53b6088ca5d698a5b56c6f4f60424e367ff53..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/tests/theme_xml_json.py +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -""" -Created on 2020/10/4 -@author: Irony -@site: https://pyqt5.com , https://github.com/892768447 -@email: 892768447@qq.com -@file: theme_xml_json -@description: -""" - -# import json -# import xmltodict -# -# xml = open('../themes/Material-Dark.xml', 'rb').read().decode() -# style = xmltodict.parse(xml, encoding='utf-8') -# print(json.dumps(style, indent=4)) -# -# # 全局样式 -# for s in style['NotepadPlus']['GlobalStyles']['WidgetStyle']: -# name = s['@name'] -# fgColor = s['@fgColor'] -# bgColor = s['@bgColor'] -# print(name, fgColor, bgColor) - -from lxml import etree - -style = etree.parse('../themes/Material-Dark.xml') -# 全局样式 -for c in style.xpath('/NotepadPlus/GlobalStyles/WidgetStyle'): - print(c.get('name'), c.get('fgColor'), c.get('bgColor')) - -# 关键词高亮 -for w in style.xpath('/NotepadPlus/LexerStyles/LexerType[@name="python"]/WordsStyle'): - print(w.get('name'), w.get('fgColor'), w.get('bgColor')) diff --git a/packages/code_editor/codeeditor/themes/Material-Dark.xml b/packages/code_editor/codeeditor/themes/Material-Dark.xml deleted file mode 100644 index 2a2db6e5dd44a5bcce8a036cdd4d43a679f33215..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/themes/Material-Dark.xml +++ /dev/null @@ -1,781 +0,0 @@ - - - - - - - - @Override @SuppressWarnings @SafeVarargs @FunctionalInterface @Retention @Documented @Target @Inherited @Repeatable @Deprecated - toto titi - - - - - - - - - - - - - - - - - alignas alignof noexcept nullptr static_assert thread_local final override - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - var - - - if else for while - bool long int char - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - toto titi - - - - - - - - - - - - - - - synthesize - - - - - NSString NSObject NSView NSWindow NSArray NSNumber NSUserDefaults NSNotification NSNotificationCenter CALayer CGColorRef NSEvent NSPoint NSSize NSRect CGPoint CGSize CGRect CGFloat unichar NSSet NSDictionary NSMutableString - - - - - - - - - - - - - - - nvarchar uniqueidentifier - - ooooo - - - - - - - - - - - - - - - - - - - - - - - - - the_ID the_post have_posts wp_link_pages the_content - - - - $_POST $_GET $_SESSION - - - - - - - - - ooooo - alert appendChild arguments array blur checked childNodes className confirm dialogArguments event focus getElementById getElementsByTagName innerHTML keyCode length location null number parentNode push RegExp replace selectNodes selectSingleNode setAttribute split src srcElement test undefined value window - XmlUtil loadXmlString TopologyXmlTree NotificationArea loadXmlFile debug - bool long int char - bool long int char - - - - - - - - - - - - import - import - - - - - - - - - - import - import - - - - - - - - - - - - - - - - - if else for while - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bool long int char - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - param @projectDescription projectDescription @param - - - - - - - - - - - - - - - - endfunction endif - - - - - - - - - - - - - - - - - - - ContentScroller - - - endfunction endif - - - - - - - - - - - - - - - - ContentScroller - - - onMotionChanged onMotionFinished Tween ImagesStrip ContentScroller mx transitions easing Sprite Point MouseEvent Event BitmapData Timer TimerEvent addEventListener event x y height width - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ContentScroller - - - onMotionChanged onMotionFinished Tween ImagesStrip ContentScroller mx transitions easing Sprite Point MouseEvent Event BitmapData Timer TimerEvent addEventListener event x y height width - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - raise - - - - - - - - - - - - - - - - - raise - - - - - - - - - - - - - - - - - - - - - - - True False - - - - - - - - - - - - - - - - - - True False - - - - - - - - - - - - - - - - - - if else for while - True False - bool long int char - - - - - - - - - - - - - - - - - if else for while - bool long int char - bool long int char - - - - - - - - - - - - - - - - if else for while - bool long int char - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - if else for while - bool long int char - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - if else for while - if else for while - bool long int char - - - - - - - - - - - - - - - if else for while - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/code_editor/codeeditor/themes/Obsidian PyCs.xml b/packages/code_editor/codeeditor/themes/Obsidian PyCs.xml deleted file mode 100644 index 2d26f13cd569a0a62eb9399ad93b1b988873148c..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/themes/Obsidian PyCs.xml +++ /dev/null @@ -1,758 +0,0 @@ - - - - - - - - @Override @SuppressWarnings @SafeVarargs @FunctionalInterface @Retention @Documented @Target @Inherited @Repeatable @Deprecated - toto titi - - - - - - - - - - - - - - - - - - alignas alignof noexcept nullptr static_assert thread_local final override - - - - - - - - - - - - - - - - - - - - - - - - - var - - - if else for while - bool long int char - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - toto titi - - - - - - - - - - - - - synthesize - - - - - NSString NSObject NSView NSWindow NSArray NSNumber NSUserDefaults NSNotification NSNotificationCenter CALayer CGColorRef NSEvent NSPoint NSSize NSRect CGPoint CGSize CGRect CGFloat unichar NSSet NSDictionary NSMutableString - - - - - nvarchar uniqueidentifier - - ooooo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - static - - - - $_POST $_GET $_SESSION - - - - - - - - - - - - - - ooooo - alert appendChild arguments array blur checked childNodes className confirm dialogArguments event focus getElementById getElementsByTagName innerHTML keyCode length location null number parentNode push RegExp replace selectNodes selectSingleNode setAttribute split src srcElement test undefined value window - XmlUtil loadXmlString TopologyXmlTree NotificationArea loadXmlFile debug - bool long int char - bool long int char - - - - - - - param @projectDescription projectDescription @param - param @projectDescription projectDescription @param - - - - - - import - import - - - - - - - - - - - - - - - - import - import - - - - - - - - - - - - - - - if else for while - bool long int char - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bool long int char - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - param @projectDescription projectDescription @param - - - - - - - - - - - - - - - - - endfunction endif - - - - - - - - ContentScroller - - - endfunction endif - - - - - - - - - - - - - - - - - - ContentScroller - - - onMotionChanged onMotionFinished Tween ImagesStrip ContentScroller mx transitions easing Sprite Point MouseEvent Event BitmapData Timer TimerEvent addEventListener event x y height width - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ContentScroller - - - onMotionChanged onMotionFinished Tween ImagesStrip ContentScroller mx transitions easing Sprite Point MouseEvent Event BitmapData Timer TimerEvent addEventListener event x y height width - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - raise - - - - - - - - - - - - - - - - - - - - - - - - - True False - - - - - - - - - - - - - - - - True False - - - - - - - - - - - - - - - - - if else for while - if else for while - bool long int char - - - - - - - - - - - - - - - - - - - - - if else for while - bool long int char - bool long int char - - - - - - - - - - - - if else for while - bool long int char - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - if else for while - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - if else for while - if else for while - bool long int char - - - - - - - - - - - - - - if else for while - if else for while - bool long int char - - - - - - - - - - if else for while - bool long int char - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/code_editor/codeeditor/themes/tomorrow.xml b/packages/code_editor/codeeditor/themes/tomorrow.xml deleted file mode 100644 index b9ecf44ea152650ce85b53d9dca60157d405e748..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/themes/tomorrow.xml +++ /dev/null @@ -1,740 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - synthesize - - - - - NSString NSObject NSView NSWindow NSArray NSNumber NSUserDefaults NSNotification NSNotificationCenter CALayer CGColorRef NSEvent NSPoint NSSize NSRect CGPoint CGSize CGRect CGFloat unichar NSSet NSDictionary NSMutableString - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - if else for while - bool long int char - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/code_editor/codeeditor/themes/tomorrow_night.xml b/packages/code_editor/codeeditor/themes/tomorrow_night.xml deleted file mode 100644 index a05c9229130e4541025cb09142a806225f0b1614..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/themes/tomorrow_night.xml +++ /dev/null @@ -1,763 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - synthesize - - - - - NSString NSObject NSView NSWindow NSArray NSNumber NSUserDefaults NSNotification NSNotificationCenter CALayer CGColorRef NSEvent NSPoint NSSize NSRect CGPoint CGSize CGRect CGFloat unichar NSSet NSDictionary NSMutableString - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - if else for while - if else for while - if else for while - bool long int char - - - - - - - - - - - if else for while - bool long int char - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/code_editor/codeeditor/themes/tomorrow_night_bright.xml b/packages/code_editor/codeeditor/themes/tomorrow_night_bright.xml deleted file mode 100644 index 56fcdfe8b4ff374291193e8da08f7a67debf22e3..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/themes/tomorrow_night_bright.xml +++ /dev/null @@ -1,763 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - synthesize - - - - - NSString NSObject NSView NSWindow NSArray NSNumber NSUserDefaults NSNotification NSNotificationCenter CALayer CGColorRef NSEvent NSPoint NSSize NSRect CGPoint CGSize CGRect CGFloat unichar NSSet NSDictionary NSMutableString - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - if else for while - if else for while - if else for while - bool long int char - - - - - - - - - - - if else for while - bool long int char - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/code_editor/codeeditor/tools/DocumentationTools/APIGenerator.py b/packages/code_editor/codeeditor/tools/DocumentationTools/APIGenerator.py deleted file mode 100644 index d5df81be0ded7c31d37140c2f3ffb9d6f4b7c4aa..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/tools/DocumentationTools/APIGenerator.py +++ /dev/null @@ -1,184 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2004 - 2020 Detlev Offenbach -# - -""" -Module implementing the builtin API generator. -""" - - -class APIGenerator(object): - """ - Class implementing the builtin documentation generator. - """ - - def __init__(self, module): - """ - Constructor - - @param module The information of the parsed Python file. - """ - self.module = module - - def genAPI(self, newStyle, basePackage, includePrivate): - """ - Public method to generate the API information. - - @param newStyle flag indicating the api generation for QScintilla 1.7 - and newer (boolean) (ignored) - @param basePackage name of the base package (string) - @param includePrivate flag indicating to include - private methods/functions (boolean) - @return API information (list of strings) - """ - self.includePrivate = includePrivate - modulePath = self.module.name.split('.') - if modulePath[-1] == '__init__': - del modulePath[-1] - if basePackage: - modulePath[0] = basePackage - self.moduleName = "{0}.".format('.'.join(modulePath)) - self.api = [] - self.__addGlobalsAPI() - self.__addClassesAPI() - self.__addFunctionsAPI() - return self.api - - def genBases(self, includePrivate): - """ - Public method to generate the base classes information. - - @param includePrivate flag indicating to include private classes - (boolean) - @return base classes information (dictionary of list of strings) - """ - bases = {} - self.includePrivate = includePrivate - classNames = sorted(list(self.module.classes.keys())) - for className in classNames: - if not self.__isPrivate(self.module.classes[className]): - if className not in bases: - bases[className] = [ - b for b in self.module.classes[className].super - if b != "object"] - return bases - - def __isPrivate(self, obj): - """ - Private method to check, if an object is considered private. - - @param obj reference to the object to be checked - @return flag indicating, that object is considered private (boolean) - """ - private = obj.isPrivate() and not self.includePrivate - return private - - def __addGlobalsAPI(self): - """ - Private method to generate the api section for global variables. - """ - from QScintilla.Editor import Editor - - moduleNameStr = "{0}".format(self.moduleName) - - for globalName in sorted(self.module.globals.keys()): - if not self.__isPrivate(self.module.globals[globalName]): - if self.module.globals[globalName].isPublic(): - iconId = Editor.AttributeID - elif self.module.globals[globalName].isProtected(): - iconId = Editor.AttributeProtectedID - else: - iconId = Editor.AttributePrivateID - self.api.append("{0}{1}?{2:d}".format( - moduleNameStr, globalName, iconId)) - - def __addClassesAPI(self): - """ - Private method to generate the api section for classes. - """ - classNames = sorted(list(self.module.classes.keys())) - for className in classNames: - if not self.__isPrivate(self.module.classes[className]): - self.__addClassVariablesAPI(className) - self.__addMethodsAPI(className) - - def __addMethodsAPI(self, className): - """ - Private method to generate the api section for class methods. - - @param className name of the class containing the method (string) - """ - from QScintilla.Editor import Editor - - _class = self.module.classes[className] - methods = sorted(list(_class.methods.keys())) - if '__init__' in methods: - methods.remove('__init__') - if _class.isPublic(): - iconId = Editor.ClassID - elif _class.isProtected(): - iconId = Editor.ClassProtectedID - else: - iconId = Editor.ClassPrivateID - self.api.append( - '{0}{1}?{2:d}({3})'.format( - self.moduleName, _class.name, iconId, - ', '.join(_class.methods['__init__'].parameters[1:]))) - - classNameStr = "{0}{1}.".format(self.moduleName, className) - for method in methods: - if not self.__isPrivate(_class.methods[method]): - if _class.methods[method].isPublic(): - iconId = Editor.MethodID - elif _class.methods[method].isProtected(): - iconId = Editor.MethodProtectedID - else: - iconId = Editor.MethodPrivateID - self.api.append( - '{0}{1}?{2:d}({3})'.format( - classNameStr, method, iconId, - ', '.join(_class.methods[method].parameters[1:]))) - - def __addClassVariablesAPI(self, className): - """ - Private method to generate class api section for class variables. - - @param className name of the class containing the class variables - (string) - """ - from QScintilla.Editor import Editor - - _class = self.module.classes[className] - classNameStr = "{0}{1}.".format(self.moduleName, className) - for variable in sorted(_class.globals.keys()): - if not self.__isPrivate(_class.globals[variable]): - if _class.globals[variable].isPublic(): - iconId = Editor.AttributeID - elif _class.globals[variable].isProtected(): - iconId = Editor.AttributeProtectedID - else: - iconId = Editor.AttributePrivateID - self.api.append('{0}{1}?{2:d}'.format( - classNameStr, variable, iconId)) - - def __addFunctionsAPI(self): - """ - Private method to generate the api section for functions. - """ - from QScintilla.Editor import Editor - - funcNames = sorted(list(self.module.functions.keys())) - for funcName in funcNames: - if not self.__isPrivate(self.module.functions[funcName]): - if self.module.functions[funcName].isPublic(): - iconId = Editor.MethodID - elif self.module.functions[funcName].isProtected(): - iconId = Editor.MethodProtectedID - else: - iconId = Editor.MethodPrivateID - self.api.append( - '{0}{1}?{2:d}({3})'.format( - self.moduleName, self.module.functions[funcName].name, - iconId, - ', '.join(self.module.functions[funcName].parameters))) diff --git a/packages/code_editor/codeeditor/tools/DocumentationTools/__init__.py b/packages/code_editor/codeeditor/tools/DocumentationTools/__init__.py deleted file mode 100644 index 96549b060dd6c2b396c762a81694eaf5c9a3b67a..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/tools/DocumentationTools/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2003 - 2020 Detlev Offenbach -# - -""" -Package implementing the source code documentation tools. -""" - -supportedExtensionsDictForApis = { - "Python3": [".py", ".pyw", ".py3", ".pyw3"], - "Ruby": [".rb"] -} diff --git a/packages/code_editor/codeeditor/tools/QScintilla/Editor.py b/packages/code_editor/codeeditor/tools/QScintilla/Editor.py deleted file mode 100644 index a2a8f6e7aa62b100f7d0cf5e06c91dc7a70e8c10..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/tools/QScintilla/Editor.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2002 - 2020 Detlev Offenbach -# - -""" -Module implementing the editor component of the eric6 IDE. -""" - - -class Editor: - # Autocompletion icon definitions - ClassID = 1 - ClassProtectedID = 2 - ClassPrivateID = 3 - MethodID = 4 - MethodProtectedID = 5 - MethodPrivateID = 6 - AttributeID = 7 - AttributeProtectedID = 8 - AttributePrivateID = 9 - EnumID = 10 - KeywordsID = 11 - ModuleID = 12 - - FromDocumentID = 99 - - TemplateImageID = 100 diff --git a/packages/code_editor/codeeditor/tools/QScintilla/__init__.py b/packages/code_editor/codeeditor/tools/QScintilla/__init__.py deleted file mode 100644 index 4d195b47a54a2ad8cc829df42cae34cbe8287040..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/tools/QScintilla/__init__.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2002 - 2020 Detlev Offenbach -# - -""" -Package implementing the editor and shell components of the eric6 IDE. - -The editor component of the eric6 IDE is based on the Qt port -of the Scintilla editor widget. It supports syntax highlighting, code -folding, has an interface to the integrated debugger and can be -configured to the most possible degree. - -The shell component is derived from the editor component and is the visible -component of the interactive language shell. It interacts with the debug -client through the debug server. -""" diff --git a/packages/code_editor/codeeditor/tools/Utilities/ModuleParser.py b/packages/code_editor/codeeditor/tools/Utilities/ModuleParser.py deleted file mode 100644 index 074db5b0c429ea6197ecfbbb33f8775d7df708d7..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/tools/Utilities/ModuleParser.py +++ /dev/null @@ -1,1699 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2003 - 2020 Detlev Offenbach -# - -""" -Parse a Python module file. - -BUGS (from pyclbr.py) -
    -
  • Code that doesn't pass tabnanny or python -t will confuse it, unless - you set the module TABWIDTH variable (default 8) to the correct tab width - for the file.
  • -
-""" - -import os -import re -import sys -from functools import reduce - -import Utilities -import importlib.machinery - -__all__ = ["Module", "Class", "Function", "Attribute", "RbModule", - "readModule", "getTypeFromTypeName"] - -TABWIDTH = 4 - -SEARCH_ERROR = 0 -PY_SOURCE = 1 -PTL_SOURCE = 128 -RB_SOURCE = 129 - -SUPPORTED_TYPES = [PY_SOURCE, PTL_SOURCE, RB_SOURCE] -TYPE_MAPPING = { - "Python": PY_SOURCE, - "Python3": PY_SOURCE, - "MicroPython": PY_SOURCE, - "Ruby": RB_SOURCE, -} - - -def getTypeFromTypeName(name): - """ - Module function to determine the module type given the module type name. - - @param name module type name (string) - @return module type or -1 for failure (integer) - """ - if name in TYPE_MAPPING: - return TYPE_MAPPING[name] - else: - return -1 - - -_py_getnext = re.compile( - r""" - (?P - \# .*? $ # ignore everything in comments - ) - -| (?P - \""" (?P - [^"\\]* (?: - (?: \\. | "(?!"") ) - [^"\\]* - )* - ) - \""" - - | """ (?P - [^'\\]* (?: - (?: \\. | '(?!'') ) - [^'\\]* - )* - ) - """ - - | " [^"\\\n]* (?: \\. [^"\\\n]*)* " - - | ' [^'\\\n]* (?: \\. [^'\\\n]*)* ' - - | \#\#\# (?P - [^#\\]* (?: - (?: \\. | \#(?!\#\#) ) - [^#\\]* - )* - ) - \#\#\# - ) - -| (?P - (?<= :) \s* - [ru]? \""" (?P - [^"\\]* (?: - (?: \\. | "(?!"") ) - [^"\\]* - )* - ) - \""" - - | (?<= :) \s* - [ru]? """ (?P - [^'\\]* (?: - (?: \\. | '(?!'') ) - [^'\\]* - )* - ) - """ - - | (?<= :) \s* - \#\#\# (?P - [^#\\]* (?: - (?: \\. | \#(?!\#\#) ) - [^#\\]* - )* - ) - \#\#\# - ) - -| (?P - ^ - (?P [ \t]* ) - (?P @classmethod | @staticmethod ) - ) - -| (?P - (^ [ \t]* @ (?: PyQt[45] \. )? (?: QtCore \. )? - (?: pyqtSignature | pyqtSlot ) - [ \t]* \( - (?P [^)]* ) - \) \s* - )? - ^ - (?P [ \t]* ) - (?: async [ \t]+ )? def [ \t]+ - (?P \w+ ) - (?: [ \t]* \[ (?: plain | html ) \] )? - [ \t]* \( - (?P (?: [^)] | \)[ \t]*,? )*? ) - \) [ \t]* - (?P (?: -> [ \t]* [^:]+ )? ) - [ \t]* : - ) - -| (?P - ^ - (?P [ \t]* ) - class [ \t]+ - (?P \w+ ) - [ \t]* - (?P \( [^)]* \) )? - [ \t]* : - ) - -| (?P - ^ - (?P [ \t]* ) - self [ \t]* \. [ \t]* - (?P \w+ ) - [ \t]* = - ) - -| (?P - ^ - (?P [ \t]* ) - (?P \w+ ) - [ \t]* = [ \t]* (?P (?:pyqtSignal)? ) - ) - -| (?P
- ^ - if \s+ __name__ \s* == \s* [^:]+ : $ - ) - -| (?P - ^ [ \t]* (?: import | from [ \t]+ \. [ \t]+ import ) [ \t]+ - (?P (?: [^#;\\\n]* (?: \\\n )* )* ) - ) - -| (?P - ^ [ \t]* from [ \t]+ - (?P - \.* \w+ - (?: - [ \t]* \. [ \t]* \w+ - )* - ) - [ \t]+ - import [ \t]+ - (?P - (?: \( \s* .*? \s* \) ) - | - (?: [^#;\\\n]* (?: \\\n )* )* ) - ) - -| (?P - ^ - (?P [ \t]* ) - (?: (?: if | elif ) [ \t]+ [^:]* | else [ \t]* ) : - (?= \s* (?: async [ \t]+ )? def) - )""", - re.VERBOSE | re.DOTALL | re.MULTILINE).search - -_rb_getnext = re.compile( - r""" - (?P - =begin [ \t]+ edoc (?P .*? ) =end - ) - -| (?P - =begin .*? =end - - | <<-? (?P [a-zA-Z0-9_]+? ) [ \t]* .*? (?P=HereMarker1) - - | <<-? ['"] (?P .*? ) ['"] [ \t]* .*? (?P=HereMarker2) - - | " [^"\\\n]* (?: \\. [^"\\\n]*)* " - - | ' [^'\\\n]* (?: \\. [^'\\\n]*)* ' - ) - -| (?P - ^ - [ \t]* \#+ .*? $ - ) - -| (?P - ^ - (?P [ \t]* ) - def [ \t]+ - (?: - (?P [a-zA-Z0-9_]+ (?: \. | :: ) - [a-zA-Z_] [a-zA-Z0-9_?!=]* ) - | - (?P [a-zA-Z_] [a-zA-Z0-9_?!=]* ) - | - (?P [^( \t]{1,3} ) - ) - [ \t]* - (?: - \( (?P (?: [^)] | \)[ \t]*,? )*? ) \) - )? - [ \t]* - ) - -| (?P - ^ - (?P [ \t]* ) - class - (?: - [ \t]+ - (?P [A-Z] [a-zA-Z0-9_]* ) - [ \t]* - (?P < [ \t]* [A-Z] [a-zA-Z0-9_]* )? - | - [ \t]* << [ \t]* - (?P [a-zA-Z_] [a-zA-Z0-9_]* ) - ) - [ \t]* - ) - -| (?P - \( - [ \t]* - class - .*? - end - [ \t]* - \) - ) - -| (?P - ^ - (?P [ \t]* ) - module [ \t]+ - (?P [A-Z] [a-zA-Z0-9_]* ) - [ \t]* - ) - -| (?P - ^ - (?P [ \t]* ) - (?: - (?P private | public | protected ) [^_] - | - (?P - private_class_method | public_class_method ) - ) - \(? - [ \t]* - (?P (?: : [a-zA-Z0-9_]+ , \s* )* - (?: : [a-zA-Z0-9_]+ )+ )? - [ \t]* - \)? - ) - -| (?P - ^ - (?P [ \t]* ) - (?P (?: @ | @@ | [A-Z]) [a-zA-Z0-9_]* ) - [ \t]* = - ) - -| (?P - ^ - (?P [ \t]* ) - attr - (?P (?: _accessor | _reader | _writer ) )? - \(? - [ \t]* - (?P (?: : [a-zA-Z0-9_]+ , \s* )* - (?: : [a-zA-Z0-9_]+ | true | false )+ ) - [ \t]* - \)? - ) - -| (?P - ^ - [ \t]* - (?: if | unless | case | while | until | for | begin ) \b [^_] - | - [ \t]* do [ \t]* (?: \| .*? \| )? [ \t]* $ - ) - -| (?P - \b (?: if ) \b [^_] .*? $ - | - \b (?: if ) \b [^_] .*? end [ \t]* $ - ) - -| (?P - [ \t]* - (?: - end [ \t]* $ - | - end \b [^_] - ) - )""", - re.VERBOSE | re.DOTALL | re.MULTILINE).search - -_hashsub = re.compile(r"""^([ \t]*)#[ \t]?""", re.MULTILINE).sub - -_commentsub = re.compile(r"""#[^\n]*\n|#[^\n]*$""").sub - -_modules = {} # cache of modules we've seen - - -class VisibilityBase(object): - """ - Class implementing the visibility aspect of all objects. - """ - - def isPrivate(self): - """ - Public method to check, if the visibility is Private. - - @return flag indicating Private visibility (boolean) - """ - return self.visibility == 0 - - def isProtected(self): - """ - Public method to check, if the visibility is Protected. - - @return flag indicating Protected visibility (boolean) - """ - return self.visibility == 1 - - def isPublic(self): - """ - Public method to check, if the visibility is Public. - - @return flag indicating Public visibility (boolean) - """ - return self.visibility == 2 - - def setPrivate(self): - """ - Public method to set the visibility to Private. - """ - self.visibility = 0 - - def setProtected(self): - """ - Public method to set the visibility to Protected. - """ - self.visibility = 1 - - def setPublic(self): - """ - Public method to set the visibility to Public. - """ - self.visibility = 2 - - -class Module(object): - """ - Class to represent a Python module. - """ - - def __init__(self, name, file=None, moduleType=None): - """ - Constructor - - @param name name of this module (string) - @param file filename of file containing this module (string) - @param moduleType type of this module - """ - self.name = name - self.file = file - self.modules = {} - self.modules_counts = {} - self.classes = {} - self.classes_counts = {} - self.functions = {} - self.functions_counts = {} - self.description = "" - self.globals = {} - self.imports = [] - self.from_imports = {} - self.package = '.'.join(name.split('.')[:-1]) - self.type = moduleType - if moduleType in [PY_SOURCE, PTL_SOURCE]: - self._getnext = _py_getnext - elif moduleType == RB_SOURCE: - self._getnext = _rb_getnext - else: - self._getnext = None - - def addClass(self, name, _class): - """ - Public method to add information about a class. - - @param name name of class to be added (string) - @param _class Class object to be added - """ - if name in self.classes: - self.classes_counts[name] += 1 - name = "{0}_{1:d}".format(name, self.classes_counts[name]) - else: - self.classes_counts[name] = 0 - self.classes[name] = _class - - def addModule(self, name, module): - """ - Public method to add information about a Ruby module. - - @param name name of module to be added (string) - @param module Module object to be added - """ - if name in self.modules: - self.modules_counts[name] += 1 - name = "{0}_{1:d}".format(name, self.modules_counts[name]) - else: - self.modules_counts[name] = 0 - self.modules[name] = module - - def addFunction(self, name, function): - """ - Public method to add information about a function. - - @param name name of function to be added (string) - @param function Function object to be added - """ - if name in self.functions: - self.functions_counts[name] += 1 - name = "{0}_{1:d}".format(name, self.functions_counts[name]) - else: - self.functions_counts[name] = 0 - self.functions[name] = function - - def addGlobal(self, name, attr): - """ - Public method to add information about global variables. - - @param name name of the global to add (string) - @param attr Attribute object to be added - """ - if name not in self.globals: - self.globals[name] = attr - else: - self.globals[name].addAssignment(attr.lineno) - - def addDescription(self, description): - """ - Public method to store the modules docstring. - - @param description the docstring to be stored (string) - """ - self.description = description - - def scan(self, src): - """ - Public method to scan the source text and retrieve the relevant - information. - - @param src the source text to be scanned (string) - """ - if self.type in [PY_SOURCE, PTL_SOURCE]: - self.__py_scan(src) - elif self.type == RB_SOURCE: - self.__rb_scan(src) - - def __py_setVisibility(self, objectRef): - """ - Private method to set the visibility of an object. - - @param objectRef reference to the object (Attribute, Class or Function) - """ - if objectRef.name.startswith('__'): - objectRef.setPrivate() - elif objectRef.name.startswith('_'): - objectRef.setProtected() - else: - objectRef.setPublic() - - def __py_scan(self, src): - """ - Private method to scan the source text of a Python module and retrieve - the relevant information. - - @param src the source text to be scanned (string) - """ - lineno, last_lineno_pos = 1, 0 - lastGlobalEntry = None - classstack = [] # stack of (class, indent) pairs - conditionalsstack = [] # stack of indents of conditional defines - deltastack = [] - deltaindent = 0 - deltaindentcalculated = 0 - i = 0 - modulelevel = True - cur_obj = self - modifierType = Function.General - modifierIndent = -1 - while True: - m = self._getnext(src, i) - if not m: - break - start, i = m.span() - - if m.start("MethodModifier") >= 0: - modifierIndent = _indent(m.group("MethodModifierIndent")) - modifierType = m.group("MethodModifierType") - - elif m.start("Method") >= 0: - # found a method definition or function - thisindent = _indent(m.group("MethodIndent")) - meth_name = m.group("MethodName") - meth_sig = m.group("MethodSignature") - meth_sig = meth_sig.replace('\\\n', '') - meth_ret = m.group("MethodReturnAnnotation") - meth_ret = meth_ret.replace('\\\n', '') - if m.group("MethodPyQtSignature") is not None: - meth_pyqtSig = ( - m.group("MethodPyQtSignature") - .replace('\\\n', '') - .split('result')[0] - .split('name')[0] - .strip("\"', \t") - ) - else: - meth_pyqtSig = None - lineno = lineno + src.count('\n', last_lineno_pos, start) - last_lineno_pos = start - if modifierType and modifierIndent == thisindent: - if modifierType == "@staticmethod": - modifier = Function.Static - elif modifierType == "@classmethod": - modifier = Function.Class - else: - modifier = Function.General - else: - modifier = Function.General - # modify indentation level for conditional defines - if conditionalsstack: - if thisindent > conditionalsstack[-1]: - if not deltaindentcalculated: - deltastack.append( - thisindent - conditionalsstack[-1]) - deltaindent = reduce( - lambda x, y: x + y, deltastack) - deltaindentcalculated = 1 - thisindent -= deltaindent - else: - while ( - conditionalsstack and - conditionalsstack[-1] >= thisindent - ): - del conditionalsstack[-1] - if deltastack: - del deltastack[-1] - deltaindentcalculated = 0 - # close all classes indented at least as much - while classstack and classstack[-1][1] >= thisindent: - if ( - classstack[-1][0] is not None and - isinstance(classstack[-1][0], (Class, Function)) - ): - # record the end line of this class or function - classstack[-1][0].setEndLine(lineno - 1) - del classstack[-1] - if classstack: - csi = -1 - while csi >= -len(classstack): - # nested defs are added to the class - cur_class = classstack[csi][0] - csi -= 1 - if cur_class is None: - continue - - if isinstance(cur_class, Class): - # it's a class method - f = Function( - None, meth_name, None, lineno, - meth_sig, meth_pyqtSig, modifierType=modifier, - annotation=meth_ret) - self.__py_setVisibility(f) - cur_class.addMethod(meth_name, f) - break - else: - # it's a nested function of a module function - f = Function( - self.name, meth_name, self.file, lineno, - meth_sig, meth_pyqtSig, modifierType=modifier, - annotation=meth_ret) - self.__py_setVisibility(f) - self.addFunction(meth_name, f) - else: - # it's a module function - f = Function(self.name, meth_name, self.file, lineno, - meth_sig, meth_pyqtSig, modifierType=modifier, - annotation=meth_ret) - self.__py_setVisibility(f) - self.addFunction(meth_name, f) - if not classstack: - if lastGlobalEntry: - lastGlobalEntry.setEndLine(lineno - 1) - lastGlobalEntry = f - if cur_obj and isinstance(cur_obj, Function): - cur_obj.setEndLine(lineno - 1) - cur_obj = f - classstack.append((None, thisindent)) # Marker for nested fns - - # reset the modifier settings - modifierType = Function.General - modifierIndent = -1 - - elif m.start("Docstring") >= 0: - contents = m.group("DocstringContents3") - if contents is not None: - contents = _hashsub(r"\1", contents) - else: - if self.file.lower().endswith('.ptl'): - contents = "" - else: - contents = ( - m.group("DocstringContents1") or - m.group("DocstringContents2") - ) - if cur_obj: - cur_obj.addDescription(contents) - - elif m.start("String") >= 0: - if ( - modulelevel and ( - src[start - len('\r\n'):start] == '\r\n' or - src[start - len('\n'):start] == '\n' or - src[start - len('\r'):start] == '\r' - ) - ): - contents = m.group("StringContents3") - if contents is not None: - contents = _hashsub(r"\1", contents) - else: - if self.file.lower().endswith('.ptl'): - contents = "" - else: - contents = ( - m.group("StringContents1") or - m.group("StringContents2") - ) - if cur_obj: - cur_obj.addDescription(contents) - - elif m.start("Class") >= 0: - # we found a class definition - thisindent = _indent(m.group("ClassIndent")) - lineno = lineno + src.count('\n', last_lineno_pos, start) - last_lineno_pos = start - # close all classes indented at least as much - while classstack and classstack[-1][1] >= thisindent: - if ( - classstack[-1][0] is not None and - isinstance(classstack[-1][0], (Class, Function)) - ): - # record the end line of this class or function - classstack[-1][0].setEndLine(lineno - 1) - del classstack[-1] - class_name = m.group("ClassName") - inherit = m.group("ClassSupers") - if inherit: - # the class inherits from other classes - inherit = inherit[1:-1].strip() - inherit = _commentsub('', inherit) - names = [] - for n in inherit.split(','): - n = n.strip() - if n: - if n in self.classes: - # we know this super class - n = self.classes[n].name - else: - c = n.split('.') - if len(c) > 1: - # super class is of the - # form module.class: - # look in module for class - m = c[-2] - c = c[-1] - if m in _modules: - m = _modules[m] - n = m.name - names.append(n) - inherit = names - # remember this class - cur_class = Class(self.name, class_name, inherit, - self.file, lineno) - self.__py_setVisibility(cur_class) - cur_obj = cur_class - # add nested classes to the module - self.addClass(class_name, cur_class) - if not classstack: - if lastGlobalEntry: - lastGlobalEntry.setEndLine(lineno - 1) - lastGlobalEntry = cur_class - classstack.append((cur_class, thisindent)) - - elif m.start("Attribute") >= 0: - lineno = lineno + src.count('\n', last_lineno_pos, start) - last_lineno_pos = start - index = -1 - while index >= -len(classstack): - if classstack[index][0] is not None: - attrName = m.group("AttributeName") - attr = Attribute( - self.name, attrName, self.file, lineno) - self.__py_setVisibility(attr) - classstack[index][0].addAttribute(attrName, attr) - break - else: - index -= 1 - - elif m.start("Main") >= 0: - # 'main' part of the script, reset class stack - lineno = lineno + src.count('\n', last_lineno_pos, start) - last_lineno_pos = start - classstack = [] - - elif m.start("Variable") >= 0: - thisindent = _indent(m.group("VariableIndent")) - variable_name = m.group("VariableName") - isSignal = m.group("VariableSignal") != "" - lineno = lineno + src.count('\n', last_lineno_pos, start) - last_lineno_pos = start - if thisindent == 0: - # global variable - attr = Attribute( - self.name, variable_name, self.file, lineno, - isSignal=isSignal) - self.__py_setVisibility(attr) - self.addGlobal(variable_name, attr) - if lastGlobalEntry: - lastGlobalEntry.setEndLine(lineno - 1) - lastGlobalEntry = None - else: - index = -1 - while index >= -len(classstack): - if classstack[index][1] >= thisindent: - index -= 1 - else: - if ( - classstack[index][0] is not None and - isinstance(classstack[index][0], Class) - ): - attr = Attribute( - self.name, variable_name, self.file, - lineno, isSignal=isSignal) - self.__py_setVisibility(attr) - classstack[index][0].addGlobal( - variable_name, attr) - break - - elif m.start("Import") >= 0: - ## import module - names = [n.strip() for n in - "".join(m.group("ImportList").splitlines()) - .replace("\\", "").split(',')] - self.imports.extend( - [name for name in names - if name not in self.imports]) - - elif m.start("ImportFrom") >= 0: - ## from module import stuff - mod = m.group("ImportFromPath") - namesLines = (m.group("ImportFromList") - .replace("(", "").replace(")", "") - .replace("\\", "") - .strip().splitlines()) - namesLines = [line.split("#")[0].strip() - for line in namesLines] - names = [n.strip() for n in - "".join(namesLines) - .split(',')] - if mod not in self.from_imports: - self.from_imports[mod] = [] - self.from_imports[mod].extend( - [name for name in names - if name not in self.from_imports[mod]]) - - elif m.start("ConditionalDefine") >= 0: - # a conditional function/method definition - thisindent = _indent(m.group("ConditionalDefineIndent")) - while ( - conditionalsstack and - conditionalsstack[-1] >= thisindent - ): - del conditionalsstack[-1] - if deltastack: - del deltastack[-1] - conditionalsstack.append(thisindent) - deltaindentcalculated = 0 - - elif m.start("Comment") >= 0: - if modulelevel: - continue - - modulelevel = False - - def __rb_scan(self, src): - """ - Private method to scan the source text of a Python module and retrieve - the relevant information. - - @param src the source text to be scanned (string) - """ - lineno, last_lineno_pos = 1, 0 - classstack = [] # stack of (class, indent) pairs - acstack = [] # stack of (access control, indent) pairs - indent = 0 - i = 0 - cur_obj = self - lastGlobalEntry = None - while True: - m = self._getnext(src, i) - if not m: - break - start, i = m.span() - - if m.start("Method") >= 0: - # found a method definition or function - thisindent = indent - indent += 1 - meth_name = ( - m.group("MethodName") or - m.group("MethodName2") or - m.group("MethodName3") - ) - meth_sig = m.group("MethodSignature") - meth_sig = meth_sig and meth_sig.replace('\\\n', '') or '' - lineno = lineno + src.count('\n', last_lineno_pos, start) - last_lineno_pos = start - if meth_name.startswith('self.'): - meth_name = meth_name[5:] - elif meth_name.startswith('self::'): - meth_name = meth_name[6:] - # close all classes/modules indented at least as much - while classstack and classstack[-1][1] >= thisindent: - if ( - classstack[-1][0] is not None and - isinstance(classstack[-1][0], - (Class, Function, RbModule)) - ): - # record the end line of this class, function or module - classstack[-1][0].setEndLine(lineno - 1) - del classstack[-1] - while acstack and acstack[-1][1] >= thisindent: - del acstack[-1] - if classstack: - csi = -1 - while csi >= -len(classstack): - # nested defs are added to the class - cur_class = classstack[csi][0] - csi -= 1 - if cur_class is None: - continue - - if ( - isinstance(cur_class, Class) or - isinstance(cur_class, RbModule) - ): - # it's a class/module method - f = Function(None, meth_name, - None, lineno, meth_sig) - cur_class.addMethod(meth_name, f) - break - else: - # it's a nested function of a module function - f = Function( - self.name, meth_name, self.file, lineno, meth_sig) - self.addFunction(meth_name, f) - # set access control - if acstack: - accesscontrol = acstack[-1][0] - if accesscontrol == "private": - f.setPrivate() - elif accesscontrol == "protected": - f.setProtected() - elif accesscontrol == "public": - f.setPublic() - else: - # it's a function - f = Function( - self.name, meth_name, self.file, lineno, meth_sig) - self.addFunction(meth_name, f) - if not classstack: - if lastGlobalEntry: - lastGlobalEntry.setEndLine(lineno - 1) - lastGlobalEntry = f - if cur_obj and isinstance(cur_obj, Function): - cur_obj.setEndLine(lineno - 1) - cur_obj = f - classstack.append((None, thisindent)) # Marker for nested fns - - elif m.start("Docstring") >= 0: - contents = m.group("DocstringContents") - if contents is not None: - contents = _hashsub(r"\1", contents) - if cur_obj: - cur_obj.addDescription(contents) - - elif m.start("String") >= 0: - pass - - elif m.start("Comment") >= 0: - pass - - elif m.start("ClassIgnored") >= 0: - pass - - elif m.start("Class") >= 0: - # we found a class definition - thisindent = indent - indent += 1 - lineno = lineno + src.count('\n', last_lineno_pos, start) - last_lineno_pos = start - # close all classes/modules indented at least as much - while classstack and classstack[-1][1] >= thisindent: - if ( - classstack[-1][0] is not None and - isinstance(classstack[-1][0], - (Class, Function, RbModule)) - ): - # record the end line of this class, function or module - classstack[-1][0].setEndLine(lineno - 1) - del classstack[-1] - class_name = m.group("ClassName") or m.group("ClassName2") - inherit = m.group("ClassSupers") - if inherit: - # the class inherits from other classes - inherit = inherit[1:].strip() - inherit = [_commentsub('', inherit)] - # remember this class - cur_class = Class(self.name, class_name, inherit, - self.file, lineno) - # add nested classes to the file - if classstack and isinstance(classstack[-1][0], RbModule): - parent_obj = classstack[-1][0] - else: - parent_obj = self - if class_name in parent_obj.classes: - cur_class = parent_obj.classes[class_name] - elif ( - classstack and - isinstance(classstack[-1][0], Class) and - class_name == "self" - ): - cur_class = classstack[-1][0] - else: - parent_obj.addClass(class_name, cur_class) - if not classstack: - if lastGlobalEntry: - lastGlobalEntry.setEndLine(lineno - 1) - lastGlobalEntry = cur_class - cur_obj = cur_class - classstack.append((cur_class, thisindent)) - while acstack and acstack[-1][1] >= thisindent: - del acstack[-1] - acstack.append(["public", thisindent]) - # default access control is 'public' - - elif m.start("Module") >= 0: - # we found a module definition - thisindent = indent - indent += 1 - lineno = lineno + src.count('\n', last_lineno_pos, start) - last_lineno_pos = start - # close all classes/modules indented at least as much - while classstack and classstack[-1][1] >= thisindent: - if ( - classstack[-1][0] is not None and - isinstance(classstack[-1][0], - (Class, Function, RbModule)) - ): - # record the end line of this class, function or module - classstack[-1][0].setEndLine(lineno - 1) - del classstack[-1] - module_name = m.group("ModuleName") - # remember this class - cur_class = RbModule(self.name, module_name, - self.file, lineno) - # add nested Ruby modules to the file - if module_name in self.modules: - cur_class = self.modules[module_name] - else: - self.addModule(module_name, cur_class) - if not classstack: - if lastGlobalEntry: - lastGlobalEntry.setEndLine(lineno - 1) - lastGlobalEntry = cur_class - cur_obj = cur_class - classstack.append((cur_class, thisindent)) - while acstack and acstack[-1][1] >= thisindent: - del acstack[-1] - acstack.append(["public", thisindent]) - # default access control is 'public' - - elif m.start("AccessControl") >= 0: - aclist = m.group("AccessControlList") - if aclist is None: - index = -1 - while index >= -len(acstack): - if acstack[index][1] < indent: - actype = ( - m.group("AccessControlType") or - m.group("AccessControlType2").split('_')[0] - ) - acstack[index][0] = actype.lower() - break - else: - index -= 1 - else: - index = -1 - while index >= -len(classstack): - if ( - classstack[index][0] is not None and - not isinstance(classstack[index][0], Function) and - not classstack[index][1] >= indent - ): - parent = classstack[index][0] - actype = ( - m.group("AccessControlType") or - m.group("AccessControlType2").split('_')[0] - ) - actype = actype.lower() - for name in aclist.split(","): - # get rid of leading ':' - name = name.strip()[1:] - acmeth = parent.getMethod(name) - if acmeth is None: - continue - if actype == "private": - acmeth.setPrivate() - elif actype == "protected": - acmeth.setProtected() - elif actype == "public": - acmeth.setPublic() - break - else: - index -= 1 - - elif m.start("Attribute") >= 0: - lineno = lineno + src.count('\n', last_lineno_pos, start) - last_lineno_pos = start - index = -1 - while index >= -len(classstack): - if ( - classstack[index][0] is not None and - not isinstance(classstack[index][0], Function) and - not classstack[index][1] >= indent - ): - attrName = m.group("AttributeName") - attr = Attribute( - self.name, attrName, self.file, lineno) - if attrName.startswith("@@") or attrName[0].isupper(): - classstack[index][0].addGlobal(attrName, attr) - else: - classstack[index][0].addAttribute(attrName, attr) - break - else: - index -= 1 - else: - attrName = m.group("AttributeName") - if attrName[0] != "@": - attr = Attribute( - self.name, attrName, self.file, lineno) - self.addGlobal(attrName, attr) - if lastGlobalEntry: - lastGlobalEntry.setEndLine(lineno - 1) - lastGlobalEntry = None - - elif m.start("Attr") >= 0: - lineno = lineno + src.count('\n', last_lineno_pos, start) - last_lineno_pos = start - index = -1 - while index >= -len(classstack): - if ( - classstack[index][0] is not None and - not isinstance(classstack[index][0], Function) and - not classstack[index][1] >= indent - ): - parent = classstack[index][0] - if m.group("AttrType") is None: - nv = m.group("AttrList").split(",") - if not nv: - break - # get rid of leading ':' - name = nv[0].strip()[1:] - attr = ( - parent.getAttribute("@" + name) or - parent.getAttribute("@@" + name) or - Attribute( - self.name, "@" + name, self.file, lineno) - ) - if len(nv) == 1 or nv[1].strip() == "false": - attr.setProtected() - elif nv[1].strip() == "true": - attr.setPublic() - parent.addAttribute(attr.name, attr) - else: - access = m.group("AttrType") - for name in m.group("AttrList").split(","): - # get rid of leading ':' - name = name.strip()[1:] - attr = ( - parent.getAttribute("@" + name) or - parent.getAttribute("@@" + name) or - Attribute( - self.name, "@" + name, self.file, - lineno) - ) - if access == "_accessor": - attr.setPublic() - elif ( - access == "_reader" or - access == "_writer" - ): - if attr.isPrivate(): - attr.setProtected() - elif attr.isProtected(): - attr.setPublic() - parent.addAttribute(attr.name, attr) - break - else: - index -= 1 - - elif m.start("Begin") >= 0: - # a begin of a block we are not interested in - indent += 1 - - elif m.start("End") >= 0: - # an end of a block - indent -= 1 - if indent < 0: - # no negative indent allowed - if classstack: - # it's a class/module method - indent = classstack[-1][1] - else: - indent = 0 - - elif m.start("BeginEnd") >= 0: - pass - - def createHierarchy(self): - """ - Public method to build the inheritance hierarchy for all classes of - this module. - - @return A dictionary with inheritance hierarchies. - """ - hierarchy = {} - for cls in list(list(self.classes.keys())): - self.assembleHierarchy(cls, self.classes, [cls], hierarchy) - for mod in list(list(self.modules.keys())): - self.assembleHierarchy(mod, self.modules, [mod], hierarchy) - return hierarchy - - def assembleHierarchy(self, name, classes, path, result): - """ - Public method to assemble the inheritance hierarchy. - - This method will traverse the class hierarchy, from a given class - and build up a nested dictionary of super-classes. The result is - intended to be inverted, i.e. the highest level are the super classes. - - This code is borrowed from Boa Constructor. - - @param name name of class to assemble hierarchy (string) - @param classes A dictionary of classes to look in. - @param path - @param result The resultant hierarchy - """ - rv = {} - if name in classes: - for cls in classes[name].super: - if cls not in classes: - rv[cls] = {} - exhausted = path + [cls] - exhausted.reverse() - self.addPathToHierarchy( - exhausted, result, self.addPathToHierarchy) - else: - rv[cls] = self.assembleHierarchy( - cls, classes, path + [cls], result) - - if len(rv) == 0: - exhausted = path - exhausted.reverse() - self.addPathToHierarchy(exhausted, result, self.addPathToHierarchy) - - def addPathToHierarchy(self, path, result, fn): - """ - Public method to put the exhausted path into the result dictionary. - - @param path the exhausted path of classes - @param result the result dictionary - @param fn function to call for classe that are already part of the - result dictionary - """ - if path[0] in list(list(result.keys())): - if len(path) > 1: - fn(path[1:], result[path[0]], fn) - else: - for part in path: - result[part] = {} - result = result[part] - - def getName(self): - """ - Public method to retrieve the modules name. - - @return module name (string) - """ - return self.name - - def getFileName(self): - """ - Public method to retrieve the modules filename. - - @return module filename (string) - """ - return self.file - - def getType(self): - """ - Public method to get the type of the module's source. - - @return type of the modules's source (string) - """ - if self.type in [PY_SOURCE, PTL_SOURCE]: - moduleType = "Python3" - elif self.type == RB_SOURCE: - moduleType = "Ruby" - else: - moduleType = "" - return moduleType - - -class Class(VisibilityBase): - """ - Class to represent a Python class. - """ - - def __init__(self, module, name, superClasses, file, lineno): - """ - Constructor - - @param module name of module containing this class (string) - @param name name of the class (string) - @param superClasses list of classnames this class is inherited from - (list of strings) - @param file name of file containing this class (string) - @param lineno linenumber of the class definition (integer) - """ - self.module = module - self.name = name - if superClasses is None: - superClasses = [] - self.super = superClasses - self.methods = {} - self.attributes = {} - self.globals = {} - self.file = file - self.lineno = lineno - self.endlineno = -1 # marker for "not set" - self.description = "" - self.setPublic() - - def addMethod(self, name, function): - """ - Public method to add information about a method. - - @param name name of method to be added (string) - @param function Function object to be added - """ - self.methods[name] = function - - def getMethod(self, name): - """ - Public method to retrieve a method by name. - - @param name name of the method (string) - @return the named method or None - """ - try: - return self.methods[name] - except KeyError: - return None - - def addAttribute(self, name, attr): - """ - Public method to add information about attributes. - - @param name name of the attribute to add (string) - @param attr Attribute object to be added - """ - if name not in self.attributes: - self.attributes[name] = attr - else: - self.attributes[name].addAssignment(attr.lineno) - - def getAttribute(self, name): - """ - Public method to retrieve an attribute by name. - - @param name name of the attribute (string) - @return the named attribute or None - """ - try: - return self.attributes[name] - except KeyError: - return None - - def addGlobal(self, name, attr): - """ - Public method to add information about global (class) variables. - - @param name name of the global to add (string) - @param attr Attribute object to be added - """ - if name not in self.globals: - self.globals[name] = attr - else: - self.globals[name].addAssignment(attr.lineno) - - def addDescription(self, description): - """ - Public method to store the class docstring. - - @param description the docstring to be stored (string) - """ - self.description = description - - def setEndLine(self, endLineNo): - """ - Public method to record the number of the last line of a class. - - @param endLineNo number of the last line (integer) - """ - self.endlineno = endLineNo - - -class RbModule(Class): - """ - Class to represent a Ruby module. - """ - - def __init__(self, module, name, file, lineno): - """ - Constructor - - @param module name of module containing this class (string) - @param name name of the class (string) - @param file name of file containing this class (string) - @param lineno linenumber of the class definition (integer) - """ - Class.__init__(self, module, name, None, file, lineno) - self.classes = {} - - def addClass(self, name, _class): - """ - Public method to add information about a class. - - @param name name of class to be added (string) - @param _class Class object to be added - """ - self.classes[name] = _class - - -class Function(VisibilityBase): - """ - Class to represent a Python function or method. - """ - General = 0 - Static = 1 - Class = 2 - - def __init__(self, module, name, file, lineno, signature='', - pyqtSignature=None, modifierType=General, annotation=""): - """ - Constructor - - @param module name of module containing this function (string) - @param name name of the function (string) - @param file name of file containing this function (string) - @param lineno linenumber of the function definition (integer) - @param signature the functions call signature (string) - @param pyqtSignature the functions PyQt signature (string) - @param modifierType type of the function - @param annotation return annotation - """ - self.module = module - self.name = name - self.file = file - self.lineno = lineno - self.endlineno = -1 # marker for "not set" - signature = _commentsub('', signature) - self.parameters = [e.strip() for e in signature.split(',')] - self.description = "" - self.pyqtSignature = pyqtSignature - self.modifier = modifierType - self.annotation = annotation - self.setPublic() - - def addDescription(self, description): - """ - Public method to store the functions docstring. - - @param description the docstring to be stored (string) - """ - self.description = description - - def setEndLine(self, endLineNo): - """ - Public method to record the number of the last line of a class. - - @param endLineNo number of the last line (integer) - """ - self.endlineno = endLineNo - - -class Attribute(VisibilityBase): - """ - Class to represent a Python function or method. - """ - - def __init__(self, module, name, file, lineno, isSignal=False): - """ - Constructor - - @param module name of module containing this function (string) - @param name name of the function (string) - @param file name of file containing this function (string) - @param lineno linenumber of the first attribute assignment (integer) - @keyparam isSignal flag indicating a signal definition (boolean) - """ - self.module = module - self.name = name - self.file = file - self.lineno = lineno - self.isSignal = isSignal - self.setPublic() - self.linenos = [lineno] - - def addAssignment(self, lineno): - """ - Public method to add another assignment line number. - - @param lineno linenumber of the additional attribute assignment - (integer) - """ - if lineno not in self.linenos: - self.linenos.append(lineno) - - -def readModule(module, path=None, inpackage=False, basename="", - extensions=None, caching=True, ignoreBuiltinModules=False): - """ - Function to read a module file and parse it. - - The module is searched in path and sys.path, read and parsed. - If the module was parsed before, the information is taken - from a cache in order to speed up processing. - - @param module name of the module to be parsed (string) - @param path search path for the module (list of strings) - @param inpackage flag indicating that module is inside a - package (boolean) - @param basename a path basename that is deleted from the filename of - the module file to be read (string) - @param extensions list of extensions, which should be considered valid - source file extensions (list of strings) - @param caching flag indicating that the parsed module should be - cached (boolean) - @param ignoreBuiltinModules flag indicating to ignore the builtin modules - (boolean) - @return reference to a Module object containing the parsed - module information (Module) - """ - global _modules - - if extensions is None: - _extensions = ['.py', '.pyw', '.ptl', '.rb'] - else: - _extensions = extensions[:] - try: - _extensions.remove('.py') - except ValueError: - pass - - modname = module - - if os.path.exists(module): - path = [os.path.dirname(module)] - if module.lower().endswith(".py"): - module = module[:-3] - if ( - os.path.exists(os.path.join(path[0], "__init__.py")) or - os.path.exists(os.path.join(path[0], "__init__.rb")) or - inpackage - ): - if basename: - module = module.replace(basename, "") - if os.path.isabs(module): - modname = os.path.splitdrive(module)[1][len(os.sep):] - else: - modname = module - modname = modname.replace(os.sep, '.') - inpackage = 1 - else: - modname = os.path.basename(module) - for ext in _extensions: - if modname.lower().endswith(ext): - modname = modname[:-len(ext)] - break - module = os.path.basename(module) - - if caching and modname in _modules: - # we've seen this module before... - return _modules[modname] - - if not ignoreBuiltinModules and module in sys.builtin_module_names: - # this is a built-in module - mod = Module(modname, None, None) - if caching: - _modules[modname] = mod - return mod - - # search the path for the module - path = [] if path is None else path[:] - f = None - if inpackage: - try: - f, file, (suff, mode, moduleType) = find_module( - module, path, _extensions) - except ImportError: - f = None - if f is None: - fullpath = path[:] + sys.path[:] - f, file, (suff, mode, moduleType) = find_module( - module, fullpath, _extensions) - if f: - f.close() - if moduleType not in SUPPORTED_TYPES: - # not supported source, can't do anything with this module - _modules[modname] = Module(modname, None, None) - return _modules[modname] - - mod = Module(modname, file, moduleType) - try: - src = Utilities.readEncodedFile(file)[0] - mod.scan(src) - except (UnicodeError, IOError): - pass - if caching: - _modules[modname] = mod - return mod - - -def _indent(ws): - """ - Protected function to determine the indent width of a whitespace string. - - @param ws The whitespace string to be cheked. (string) - @return Length of the whitespace string after tab expansion. - """ - return len(ws.expandtabs(TABWIDTH)) - - -def find_module(name, path, extensions): - """ - Module function to extend the Python module finding mechanism. - - This function searches for files in the given path. If the filename - doesn't have an extension or an extension of .py, the normal search - implemented in the imp module is used. For all other supported files - only path is searched. - - @param name filename or modulename to search for (string) - @param path search path (list of strings) - @param extensions list of extensions, which should be considered valid - source file extensions (list of strings) - @return tuple of the open file, pathname and description. Description - is a tuple of file suffix, file mode and file type) - @exception ImportError The file or module wasn't found. - """ - for ext in extensions: - if name.lower().endswith(ext): - for p in path: # only search in path - if os.path.exists(os.path.join(p, name)): - pathname = os.path.join(p, name) - if ext == '.ptl': - # Quixote page template - return (open(pathname), pathname, - ('.ptl', 'r', PTL_SOURCE)) - elif ext == '.rb': - # Ruby source file - return (open(pathname), pathname, - ('.rb', 'r', RB_SOURCE)) - else: - return (open(pathname), pathname, - (ext, 'r', PY_SOURCE)) - raise ImportError - - # standard Python module file - if name.lower().endswith('.py'): - name = name[:-3] - - spec = importlib.machinery.PathFinder.find_spec(name, path) - if spec is None: - raise ImportError - if isinstance(spec.loader, importlib.machinery.SourceFileLoader): - ext = os.path.splitext(spec.origin)[-1] - return (open(spec.origin), spec.origin, (ext, 'r', PY_SOURCE)) - - raise ImportError - - -def resetParsedModules(): - """ - Module function to reset the list of modules already parsed. - """ - _modules.clear() - - -def resetParsedModule(module, basename=""): - """ - Module function to clear one module from the list of parsed modules. - - @param module Name of the module to be parsed (string) - @param basename a path basename. This basename is deleted from - the filename of the module file to be cleared. (string) - """ - modname = module - - if os.path.exists(module): - path = [os.path.dirname(module)] - if module.lower().endswith(".py"): - module = module[:-3] - if os.path.exists(os.path.join(path[0], "__init__.py")): - if basename: - module = module.replace(basename, "") - modname = module.replace(os.sep, '.') - else: - modname = os.path.basename(module) - if ( - modname.lower().endswith(".ptl") or - modname.lower().endswith(".pyw") - ): - modname = modname[:-4] - elif modname.lower().endswith(".rb"): - modname = modname[:-3] - module = os.path.basename(module) - - if modname in _modules: - del _modules[modname] diff --git a/packages/code_editor/codeeditor/tools/__init__.py b/packages/code_editor/codeeditor/tools/__init__.py deleted file mode 100644 index 3a1213c88f7fa04e9e42c33b37762c034851c146..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/tools/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - diff --git a/packages/code_editor/codeeditor/tools/eric6_api.py b/packages/code_editor/codeeditor/tools/eric6_api.py deleted file mode 100644 index 246187aa60003912f8ef548f6478431dec233eb2..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/tools/eric6_api.py +++ /dev/null @@ -1,324 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -# Copyright (c) 2003 - 2020 Detlev Offenbach -# - -""" -Eric6 API Generator. - -This is the main Python script of the API generator. It is -this script that gets called via the API generation interface. -This script can be used via the commandline as well. -""" - -import DocumentationTools -import Utilities -from DocumentationTools.APIGenerator import APIGenerator -import Utilities.ModuleParser -import fnmatch -import glob -import os -import sys - -sys.path.insert(1, os.path.dirname(__file__)) - - -# make ThirdParty package available as a packages repository -sys.path.insert(2, os.path.join(os.path.dirname(__file__), - "ThirdParty", "EditorConfig")) - - -Version = '20.8 (rev. 27cfb65c7324)' - - -def usage(): - """ - Function to print some usage information. - - It prints a reference of all commandline parameters that may - be used and ends the application. - """ - print("eric6_api") - print() - print("Copyright (c) 2004 - 2020 Detlev Offenbach" - " .") - print() - print("Usage:") - print() - print(" eric6_api [options] files...") - print() - print("where files can be either python modules, package") - print("directories or ordinary directories.") - print() - print("Options:") - print() - print(" -b name or --base=name") - print(" Use the given name as the name of the base package.") - print(" -e eol-type or --eol=eol-type") - print(" Use the given eol type to terminate lines.") - print(" Valid values are 'cr', 'lf' and 'crlf'.") - print(" --exclude-file=pattern") - print(" Specify a filename pattern of files to be excluded.") - print(" This option may be repeated multiple times.") - print(" -h or --help") - print(" Show this help and exit.") - print(" -i or --ignore") - print(" Ignore the set of builtin modules") - print(" -l language or --language=language") - print(" Generate an API file for the given programming language.") - print(" Supported programming languages are:") - for lang in sorted( - DocumentationTools.supportedExtensionsDictForApis.keys()): - print(" * {0}".format(lang)) - print(" The default is 'Python3'.") - print(" This option may be repeated multiple times.") - print(" -o filename or --output=filename") - print(" Write the API information to the named file." - " A '%L' placeholder") # __IGNORE_WARNING_M601__ - print(" is replaced by the language of the API file" - " (see --language).") - print(" -p or --private") - print(" Include private methods and functions.") - print(" -R, -r or --recursive") - print(" Perform a recursive search for source files.") - print(" -t ext or --extension=ext") - print(" Add the given extension to the list of file extensions.") - print(" This option may be given multiple times.") - print(" -V or --version") - print(" Show version information and exit.") - print(" -x directory or --exclude=directory") - print(" Specify a directory basename to be excluded.") - print(" This option may be repeated multiple times.") - sys.exit(1) - - -def version(): - """ - Function to show the version information. - """ - print( - """eric6_api {0}\n""" - """\n""" - """Eric6 API generator.\n""" - """\n""" - """Copyright (c) 2004 - 2020 Detlev Offenbach""" - """ \n""" - """This is free software; see the LICENSE.GPL3 for copying""" - """ conditions.\n""" - """There is NO warranty; not even for MERCHANTABILITY or FITNESS""" - """ FOR A\n""" - """PARTICULAR PURPOSE.""".format(Version)) - sys.exit(1) - - -def main(): - """ - Main entries point into the application. - """ - global supportedExtensions - - import getopt - - try: - opts, args = getopt.getopt( - sys.argv[1:], "b:e:hil:o:pRrt:Vx:", - ["base=", "eol=", "exclude=", "exclude-file=", "extension=", - "help", "ignore", "language=", "output=", "private", "recursive", - "version", ]) - except getopt.error: - usage() - - excludeDirs = [".svn", ".hg", ".git", ".ropeproject", ".eric6project", - "dist", "build", "doc", "docs"] - excludePatterns = [] - outputFileName = "" - recursive = False - basePackage = "" - includePrivate = False - progLanguages = [] - extensions = [] - newline = None - ignoreBuiltinModules = False - - for k, v in opts: - if k in ["-o", "--output"]: - outputFileName = v - elif k in ["-R", "-r", "--recursive"]: - recursive = True - elif k in ["-x", "--exclude"]: - excludeDirs.append(v) - elif k == "--exclude-file": - excludePatterns.append(v) - elif k in ["-h", "--help"]: - usage() - elif k in ["-i", "--ignore"]: - ignoreBuiltinModules = True - elif k in ["-V", "--version"]: - version() - elif k in ["-t", "--extension"]: - if not v.startswith("."): - v = ".{0}".format(v) - extensions.append(v) - elif k in ["-b", "--base"]: - basePackage = v - elif k in ["-p", "--private"]: - includePrivate = True - elif k in ["-l", "--language"]: - if v not in progLanguages: - if v not in DocumentationTools.supportedExtensionsDictForApis: - sys.stderr.write( - "Wrong language given: {0}. Aborting\n".format(v)) - sys.exit(1) - else: - progLanguages.append(v) - elif k in ["-e", "--eol"]: - if v.lower() == "cr": - newline = '\r' - elif v.lower() == "lf": - newline = '\n' - elif v.lower() == "crlf": - newline = '\r\n' - - if not args: - usage() - - if outputFileName == "": - sys.stderr.write("No output file given. Aborting\n") - sys.exit(1) - - if len(progLanguages) == 0: - progLanguages = ["Python3"] - - for progLanguage in sorted(progLanguages): - basename = "" - apis = [] - basesDict = {} - - supportedExtensions = ( - DocumentationTools.supportedExtensionsDictForApis[progLanguage] - ) - supportedExtensions.extend(extensions) - if "%L" in outputFileName: - outputFile = outputFileName.replace("%L", progLanguage) - else: - if len(progLanguages) == 1: - outputFile = outputFileName - else: - root, ext = os.path.splitext(outputFileName) - outputFile = "{0}-{1}{2}".format(root, progLanguage.lower(), - ext) - basesFile = os.path.splitext(outputFile)[0] + '.bas' - - for arg in args: - if os.path.isdir(arg): - if os.path.exists(os.path.join( - arg, Utilities.joinext("__init__", ".py"))): - basename = os.path.dirname(arg) - if arg == '.': - sys.stderr.write("The directory '.' is a package.\n") - sys.stderr.write( - "Please repeat the call giving its real name.\n") - sys.stderr.write("Ignoring the directory.\n") - continue - else: - basename = arg - if basename: - basename = "{0}{1}".format(basename, os.sep) - - if recursive and not os.path.islink(arg): - names = [arg] + Utilities.getDirs(arg, excludeDirs) - else: - names = [arg] - else: - basename = "" - names = [arg] - - for filename in sorted(names): - inpackage = False - if os.path.isdir(filename): - files = [] - for ext in supportedExtensions: - files.extend(glob.glob(os.path.join( - filename, Utilities.joinext("*", ext)))) - initFile = os.path.join( - filename, Utilities.joinext("__init__", ext)) - if initFile in files: - inpackage = True - files.remove(initFile) - files.insert(0, initFile) - elif progLanguage != "Python3": - # assume package - inpackage = True - else: - if ( - Utilities.isWindowsPlatform() and - glob.has_magic(filename) - ): - files = glob.glob(filename) - else: - files = [filename] - - for file in files: - skipIt = False - for pattern in excludePatterns: - if fnmatch.fnmatch(os.path.basename(file), pattern): - skipIt = True - break - if skipIt: - continue - - try: - module = Utilities.ModuleParser.readModule( - file, - basename=basename, inpackage=inpackage, - ignoreBuiltinModules=ignoreBuiltinModules) - apiGenerator = APIGenerator(module) - api = apiGenerator.genAPI(True, basePackage, - includePrivate) - bases = apiGenerator.genBases(includePrivate) - except IOError as v: - sys.stderr.write("{0} error: {1}\n".format(file, v[1])) - continue - except ImportError as v: - sys.stderr.write("{0} error: {1}\n".format(file, v)) - continue - - for apiEntry in api: - if apiEntry not in apis: - apis.append(apiEntry) - for basesEntry in bases: - if bases[basesEntry]: - basesDict[basesEntry] = bases[basesEntry][:] - sys.stdout.write("-- {0} -- {1} ok\n".format( - progLanguage, file)) - - outdir = os.path.dirname(outputFile) - if outdir and not os.path.exists(outdir): - os.makedirs(outdir) - try: - out = open(outputFile, "w", encoding="utf-8", newline=newline) - out.write("\n".join(sorted(apis)) + "\n") - out.close() - except IOError as v: - sys.stderr.write("{0} error: {1}\n".format(outputFile, v[1])) - sys.exit(3) - # try: - # out = open(basesFile, "w", encoding="utf-8", newline=newline) - # for baseEntry in sorted(basesDict.keys()): - # out.write("{0} {1}\n".format( - # baseEntry, " ".join(sorted(basesDict[baseEntry])))) - # out.close() - # except IOError as v: - # sys.stderr.write("{0} error: {1}\n".format(basesFile, v[1])) - # sys.exit(3) - - sys.stdout.write('\nDone.\n') - sys.exit(0) - - -if __name__ == '__main__': - main() - -# -# eflag: noqa = M801 diff --git a/packages/code_editor/codeeditor/ui/formeditor.py b/packages/code_editor/codeeditor/ui/formeditor.py deleted file mode 100644 index 4c5f4343f5cf115164c210d63038e45b77f9c9a2..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/ui/formeditor.py +++ /dev/null @@ -1,84 +0,0 @@ -# -*- coding: utf-8 -*- - -################################################################################ -## Form generated from reading UI file 'formeditor.ui' -## -## Created by: Qt User Interface Compiler version 5.15.2 -## -## WARNING! All changes made in this file will be lost when recompiling UI file! -################################################################################ - -from PySide2.QtCore import * -from PySide2.QtGui import * -from PySide2.QtWidgets import * - -from pmgwidgets import PMGQsciWidget - - -class Ui_FormEditor(object): - def setupUi(self, FormEditor): - if not FormEditor.objectName(): - FormEditor.setObjectName(u"FormEditor") - FormEditor.resize(800, 600) - self.gridLayout = QGridLayout(FormEditor) - self.gridLayout.setObjectName(u"gridLayout") - self.gridLayout.setHorizontalSpacing(20) - self.gridLayout.setVerticalSpacing(3) - self.gridLayout.setContentsMargins(0, 0, 0, 3) - self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) - - self.gridLayout.addItem(self.horizontalSpacer, 1, 0, 1, 1) - - self.label_status_length = QLabel(FormEditor) - self.label_status_length.setObjectName(u"label_status_length") - - self.gridLayout.addWidget(self.label_status_length, 1, 1, 1, 1) - - self.label_status_encoding = QLabel(FormEditor) - self.label_status_encoding.setObjectName(u"label_status_encoding") - - self.gridLayout.addWidget(self.label_status_encoding, 1, 5, 1, 1) - - self.label_status_sel = QLabel(FormEditor) - self.label_status_sel.setObjectName(u"label_status_sel") - - self.gridLayout.addWidget(self.label_status_sel, 1, 3, 1, 1) - - self.label_status_ln_col = QLabel(FormEditor) - self.label_status_ln_col.setObjectName(u"label_status_ln_col") - - self.gridLayout.addWidget(self.label_status_ln_col, 1, 2, 1, 1) - - self.label_status_eol = QLabel(FormEditor) - self.label_status_eol.setObjectName(u"label_status_eol") - - self.gridLayout.addWidget(self.label_status_eol, 1, 4, 1, 1) - - self.textEdit = PMGQsciWidget(FormEditor) - self.textEdit.setObjectName(u"textEdit") - self.textEdit.setFrameShape(QFrame.NoFrame) - - self.gridLayout.addWidget(self.textEdit, 0, 0, 1, 7) - - self.gridLayout.setRowStretch(0, 1) - - self.retranslateUi(FormEditor) - - QMetaObject.connectSlotsByName(FormEditor) - # setupUi - - def retranslateUi(self, FormEditor): - FormEditor.setWindowTitle(QCoreApplication.translate("FormEditor", u"Form", None)) - self.label_status_length.setText(QCoreApplication.translate("FormEditor", u"Length:{0} Lines:{1}", None)) - self.label_status_encoding.setText(QCoreApplication.translate("FormEditor", u"UTF-8", None)) - self.label_status_sel.setText(QCoreApplication.translate("FormEditor", u"Sel:{0} | {1}", None)) - self.label_status_ln_col.setText(QCoreApplication.translate("FormEditor", u"Ln:{0} Col:{1}", None)) - self.label_status_eol.setText(QCoreApplication.translate("FormEditor", u"Unix(LF)", None)) -#if QT_CONFIG(tooltip) - self.textEdit.setToolTip("") -#endif // QT_CONFIG(tooltip) -#if QT_CONFIG(whatsthis) - self.textEdit.setWhatsThis("") -#endif // QT_CONFIG(whatsthis) - # retranslateUi - diff --git a/packages/code_editor/codeeditor/ui/gotoline.py b/packages/code_editor/codeeditor/ui/gotoline.py deleted file mode 100644 index f923484146987bee695306e095fb88deac0b56b3..0000000000000000000000000000000000000000 --- a/packages/code_editor/codeeditor/ui/gotoline.py +++ /dev/null @@ -1,60 +0,0 @@ -# -*- coding: utf-8 -*- - -################################################################################ -## Form generated from reading UI file 'gotoline.ui' -## -## Created by: Qt User Interface Compiler version 5.15.2 -## -## WARNING! All changes made in this file will be lost when recompiling UI file! -################################################################################ - -from PySide2.QtCore import * -from PySide2.QtGui import * -from PySide2.QtWidgets import * - - -class Ui_DialogGoto(object): - def setupUi(self, DialogGoto): - if not DialogGoto.objectName(): - DialogGoto.setObjectName(u"DialogGoto") - DialogGoto.resize(300, 94) - self.gridLayout = QGridLayout(DialogGoto) - self.gridLayout.setObjectName(u"gridLayout") - self.gridLayout.setContentsMargins(-1, 18, -1, -1) - self.lineEdit = QLineEdit(DialogGoto) - self.lineEdit.setObjectName(u"lineEdit") - - self.gridLayout.addWidget(self.lineEdit, 0, 1, 1, 1) - - self.label = QLabel(DialogGoto) - self.label.setObjectName(u"label") - font = QFont() - font.setBold(True) - font.setWeight(75) - self.label.setFont(font) - - self.gridLayout.addWidget(self.label, 0, 0, 1, 1) - - self.buttonBox = QDialogButtonBox(DialogGoto) - self.buttonBox.setObjectName(u"buttonBox") - self.buttonBox.setOrientation(Qt.Horizontal) - self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Ok) - - self.gridLayout.addWidget(self.buttonBox, 2, 0, 1, 2) - - self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) - - self.gridLayout.addItem(self.verticalSpacer, 1, 1, 1, 1) - - - self.retranslateUi(DialogGoto) - self.buttonBox.rejected.connect(DialogGoto.reject) - - QMetaObject.connectSlotsByName(DialogGoto) - # setupUi - - def retranslateUi(self, DialogGoto): - DialogGoto.setWindowTitle(QCoreApplication.translate("DialogGoto", u"Go to Line/Column", None)) - self.label.setText(QCoreApplication.translate("DialogGoto", u"[Line] [:column]:", None)) - # retranslateUi - diff --git a/packages/code_editor/icons/breakpoint.svg b/packages/code_editor/icons/breakpoint.svg deleted file mode 100644 index dab9197a79db3caaeb07234f6b8895a6380557ff..0000000000000000000000000000000000000000 --- a/packages/code_editor/icons/breakpoint.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/code_editor/icons/copy.svg b/packages/code_editor/icons/copy.svg deleted file mode 100644 index aee10173c824751800de0e18a0aa7ec0f54d2a62..0000000000000000000000000000000000000000 --- a/packages/code_editor/icons/copy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/code_editor/icons/debug.svg b/packages/code_editor/icons/debug.svg deleted file mode 100644 index 2968957d0b8d2b39b545eb146de0411714936f28..0000000000000000000000000000000000000000 --- a/packages/code_editor/icons/debug.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/code_editor/icons/format.svg b/packages/code_editor/icons/format.svg deleted file mode 100644 index 949e870f166cd024e0d88dee16ed934261349dc7..0000000000000000000000000000000000000000 --- a/packages/code_editor/icons/format.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/code_editor/icons/help.svg b/packages/code_editor/icons/help.svg deleted file mode 100644 index a4b4513e5aaf3e4f65021d85ab1dc07dbe5fc483..0000000000000000000000000000000000000000 --- a/packages/code_editor/icons/help.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/code_editor/icons/python.svg b/packages/code_editor/icons/python.svg deleted file mode 100644 index 1e64a0d2fa8b8ed980c36747d1aa51f8fff388d3..0000000000000000000000000000000000000000 --- a/packages/code_editor/icons/python.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/code_editor/icons/run.svg b/packages/code_editor/icons/run.svg deleted file mode 100644 index 1435801209865dd33ec273be328cb643754fab66..0000000000000000000000000000000000000000 --- a/packages/code_editor/icons/run.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/code_editor/icons/save.svg b/packages/code_editor/icons/save.svg deleted file mode 100644 index e81f6b5bc0bfddfc68c828d5cbf6adccd12f952d..0000000000000000000000000000000000000000 --- a/packages/code_editor/icons/save.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/code_editor/icons/spate.svg b/packages/code_editor/icons/spate.svg deleted file mode 100644 index 1b675a075a8317344c87e3add4a2d0ca184f3622..0000000000000000000000000000000000000000 --- a/packages/code_editor/icons/spate.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/code_editor/translations/qt_zh_CN.qm b/packages/code_editor/translations/qt_zh_CN.qm deleted file mode 100644 index 9c2a84bec977655d28e061a6a60479065c3bfd3b..0000000000000000000000000000000000000000 Binary files a/packages/code_editor/translations/qt_zh_CN.qm and /dev/null differ diff --git a/packages/code_editor/translations/qt_zh_CN.ts b/packages/code_editor/translations/qt_zh_CN.ts deleted file mode 100644 index dd08a401a3cd248b9bb0649bd18e706de30e98ba..0000000000000000000000000000000000000000 --- a/packages/code_editor/translations/qt_zh_CN.ts +++ /dev/null @@ -1,459 +0,0 @@ - - - - - DialogGoto - - - Go to Line/Column - 前往行/列 - - - - [Line] [:column]: - [行] [:列]: - - - - FindDialog - - - Text to Find - 要查找的文本 - - - - Text to Replace - 替换为 - - - - Wrap - 循环查找 - - - - Regex - 匹配正则表达式 - - - - Case Sensitive - 大小写敏感 - - - - Whole Word - 匹配整个文字 - - - - Up - 向上 - - - - Down - 向下 - - - - Replace - 替换 - - - - Replace All - 替换全部 - - - - FindInPathWidget - - - Case - 大小写敏感 - - - - Whole Word - 匹配整个文字 - - - - Find - 查找 - - - - Find In Path - 在路径中查找 - - - - FormEditor - - - Length:{0} Lines:{1} - 长度:{0} 行{1} - - - - UTF-8 - UTF-8 - - - - Sel:{0} | {1} - 选中区域:{0} | {1} - - - - Ln:{0} Col:{1} - 行:{0} 列:{1} - - - - Unix(LF) - Unix(LF) - - - - Form - - - - - PMAbstractEditor - - - Save - 保存 - - - - Save file "{0}"? - 是否保存文件 "{0}"? - - - - PMBaseEditor - - - Ln:{0} Col:{1} - 行:{0} 列:{1} - - - - Ln:1 Col:1 - 行:1 列:1 - - - - Length:0 Lines:1 - 长度:0 行数:1 - - - - Sel:0 | 0 - 选中:0|0 - - - - Format Code - 格式化代码 - - - - Run Code - 运行代码 - - - - Run Selected Code - 运行选中代码 - - - - Save - 保存 - - - - Find/Replace - 查找/替换 - - - - Find In Path - 在路径中查找 - - - - AutoComp - 自动补全 - - - - Add Breakpoint - 添加断点 - - - - Remove Breakpoint - 移除断点 - - - - View BreakPoints - 查看断点 - - - - Save file "{0}"? - 是否保存文件“{0}”? - - - - Length:{0} Lines:{1} - 长度:{0} 行{1} - - - - Save file - 保存文件 - - - - Sel:{0} | {1} - 选中区域:{0} | {1} - - - - File Modified - 文件已经更改 - - - - PMCPPEditor - - - Function Help - 获取函数帮助 - - - - PMCodeEditTabWidget - - - Open File - 打开文件 - - - - Run: %s - 运行:%s - - - - Run Python Code inside %s - 运行 %s 中的代码 - - - - Script - 脚本 - - - - Editor - 编辑器 - - - - Builtin (3.8.5) - 内置解释器(3.8.5) - - - - Warning - 警告 - - - - This Editor does not support instant boot. - 当前编辑器不支持快速启动脚本的运行。 - - - - Builtin (%s) - 内置(%s) - - - - Find In Path - 在路径中查找 - - - - PMCythonEditor - - - Compile to Library - 编译为运行库 - - - - Analyse Profile - 生成代码分析报告 - - - - PMDebugConsoleTabWidget - - - Terminate - 终止 - - - - Process is running, Would you like to terminate this process? - 进程正在运行,是否要终止此进程? - - - - Debugger - 调试器 - - - - PMEditorToolbar - - - New Script - 新建脚本 - - - - Open Script - 打开脚本 - - - - Save - 保存 - - - - Find/Replace - 查找/替换 - - - - Toggle Comment - 切换注释 - - - - Goto Line - 跳转到行 - - - - Indent - 增加缩进 - - - - Dedent - 减少缩进 - - - - IPython - IPython运行 - - - - Separately - 独立运行 - - - - Terminal - 终端中运行 - - - - Editor - 编辑器 - - - - Instant Boot - 快速运行 - - - - Run script with common module preloaded to shorten interpterter startup-time. - 以预加载模块的方式运行当前脚本,从而大大缩减代码冷启动时间。 - - - - PMMarkdownEditor - - - Save - 保存 - - - - Save file "{0}"? - 是否保存文件 "{0}"? - - - - PMPythonEditor - - - Function Help - 获取函数帮助 - - - - Help In Console - 控制台中获取帮助 - - - - Go to Definition - 跳转到定义 - - - - Help - 获取帮助 - - - - Cannot get name. -Maybe There is: -1、Syntax error in your code. -2、No word under text cursor. - 无法获取名称。 -可能有以下错误: -1、代码中有语法错误 -2、指针下没有文字。 - - - - Error - 错误 - - - - Running Current Script Cell (Line %d to %d). - 运行当前的脚本单元(%d行到%d行)。 - - - diff --git a/packages/pm_calc/package.json b/packages/pm_calc/package.json deleted file mode 100644 index e232b79651906eaddab36e9731aa0233f1e9ea1f..0000000000000000000000000000000000000000 --- a/packages/pm_calc/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name":"pm_calc", - "display_name":"计算", - "version":"0.1.0", - "description":"内置计算的菜单", - "icon":"ipython_console.jpg", - "interface":{ - "file":"main.py", - "interface":"CalcInterface" - }, - "widgets":[ - { - "file":"main.py", - "widget":"PMCalcToolBar", - "position":"new_toolbar", - "config":{ - "message": "no", - "name": "pm_calc", - "text": "数据" - } - } - ], - "requirements":[ - "workspace_inspector" - ] -} \ No newline at end of file diff --git a/pip.ini b/pip.ini new file mode 100644 index 0000000000000000000000000000000000000000..a55c2edecb631a6e43db18453a589b995f6c7be5 --- /dev/null +++ b/pip.ini @@ -0,0 +1,7 @@ +[global] + +index-url=http://mirrors.aliyun.com/pypi/simple/ + +[install] + +trusted-host=mirrors.aliyun.com \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000000000000000000000000000000000000..b5a3c468d9e85e7fa7469c3a90d47b48ab93e54a --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,6 @@ +[build-system] +requires = [ + "setuptools>=42", + "wheel" +] +build-backend = "setuptools.build_meta" \ No newline at end of file diff --git a/pytest.ini b/pytest.ini index de19c9f0b7133138e09e72785b1c56cefae528ee..76ef723a07e69c2aee003926c8e50bff130643c3 100644 --- a/pytest.ini +++ b/pytest.ini @@ -1,2 +1,2 @@ [pytest] -testpaths = tests \ No newline at end of file +addopts = --durations=10 \ No newline at end of file diff --git a/core/evaluation/__init__.py b/setup.cfg similarity index 100% rename from core/evaluation/__init__.py rename to setup.cfg diff --git a/setup.py b/setup.py new file mode 100644 index 0000000000000000000000000000000000000000..c9e27d3f2c2d226b9eed5d5287f7d259414bb730 --- /dev/null +++ b/setup.py @@ -0,0 +1,113 @@ +import setuptools + +#----------------------------------------------------------------------------- +# Copyright (c) 2020-2021, pyminer development team. + +# The full license is in the file LICENSE, distributed with this software. +#----------------------------------------------------------------------------- + + +NAME = 'pyminer' +VERSION = '2.1.1' +DESCRIPTION = 'pyminer, a component-based data mining framework.' +AUTHOR = 'pyminer development team' +AUTHOR_EMAIL = 'team@pyminer.com' +HOMEPAGE = 'www.pyminer.com' +URL = 'https://gitee.com/py2cn/pyminer' +BUG_TRACKER = 'https://gitee.com/py2cn/pyminer/issues' + + +with open("README.md", "r", encoding="utf-8") as fh: + long_description = fh.read() + +setuptools.setup( + name=NAME, + version=VERSION, + author=AUTHOR, + author_email=AUTHOR_EMAIL, + description=DESCRIPTION, + long_description=long_description, + long_description_content_type="text/markdown", + url=URL, + project_urls={ + "Bug Tracker": BUG_TRACKER, + }, + classifiers=[ + "Programming Language :: Python :: 3", + "License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)", + "Operating System :: POSIX", + "Operating System :: Microsoft :: Windows", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + "Topic :: Scientific/Engineering :: Visualization", + "Intended Audience :: Science/Research", + "Intended Audience :: Education", + ], + package_dir={"": "src"}, + packages=setuptools.find_packages(where="src"), + python_requires=">=3.7", + include_package_data=True, + install_requires=[ + 'numpy', + 'pandas', + 'scipy', + 'scikit-learn', + 'seaborn', + 'matplotlib', + 'pyside2', + 'openpyxl', + 'xlrd', + 'sqlalchemy', + 'jedi', + 'json-rpc', + 'qtconsole', + 'certifi', + 'cycler', + 'et-xmlfile', + 'helpdev', + 'jdcal', + 'joblib', + 'kiwisolver', + 'Pillow', + 'pymysql', + 'pyparsing', + 'pyreadstat', + 'python-dateutil', + 'pytz', + 'six', + 'threadpoolctl', + 'pywin32', + 'Werkzeug', + 'requests', + 'tornado', + 'matgen', + 'yapf', + 'configparser', + 'send2trash', + 'sympy', + 'lxml', + 'cloudpickle', + 'ghp-import', + 'pyqtgraph', + 'watchdog', + 'python-docs-theme', + 'waitress', + 'sshtunnel', + 'flask', + 'markdown', + 'flake8', + 'psycopg2', + 'networkx', + 'flask-cors', + 'notebook', + 'sliceable-generator', + 'fsspec', + 'cx_Oracle', + 'pyminer_comm', + 'ipyparams', + 'pathspec', + 'codegen', + 'chardet', + 'parso', + 'QDarkStyle', + ], +) \ No newline at end of file diff --git a/src/pyminer/.gitignore b/src/pyminer/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..036221f64e92d970a7fca4aa1462ed4eef0bfd5c --- /dev/null +++ b/src/pyminer/.gitignore @@ -0,0 +1,99 @@ +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/ +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/modules.xml +# .idea/*.iml +# .idea/modules + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +.metadata/ +pyminer.nov + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + + +# Environments +.env +.venv +env/ +venv*/ +ENV/ +env.bak/ +venv.bak/ + +.vscode/ +features/extensions/packages/code_editor/customized/settings.json +*.pptx + +test.py + +layout.ini + +log +*.pmcache +settings.cfg + +*.log \ No newline at end of file diff --git a/src/pyminer/__init__.py b/src/pyminer/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..a9fd518b8428f7434938e3dfef0d1518c1e4e081 --- /dev/null +++ b/src/pyminer/__init__.py @@ -0,0 +1,262 @@ +import os +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt + +version = '2.1.1' + +def get_version(): + """ + View the current version + """ + ver = version + return ver + +# 导入基本数学变量和函数 +from math import ( + ceil, + copysign, + fabs, + factorial, + floor, + fmod, + frexp, + fsum, + gcd, + isclose, + isfinite, + isinf, + isnan, + + ldexp, + modf, + + + trunc, + exp, + expm1, + log, + log1p, + log2, + log10, + pow, + sqrt, + acos, + asin, + atan, + atan2, + cos, + hypot, + sin, + tan, + degrees, + radians, + acosh, + asinh, + atanh, + cosh, + sinh, + tanh, + erf, + erfc, + gamma, + lgamma, + pi as PI, + e as E, + tau, + inf, + nan +) + +# 导入numpy 统计函数 +from numpy import ( + sum, + mean, + average, + std, + var, + min, + max, + median, + eye, + diag, + linspace, + maximum, + diag, + fft, + unique, + sort, + squeeze, + cov, + corrcoef as corr +) + +# 导入numpy 随机数 +from numpy.random import ( + rand, + randn, + randint, + random_integers, + random_sample, + random, + ranf, + sample, + choice, + seed +) + +# 导入scipy相关模块 +from scipy.interpolate import ( + interp1d) + +from scipy.io import ( + loadmat, + loadmat as read_matlab, + savemat) + +# from .pyminer_algorithms.linear_algebra import * + +# 导入数据读取相关模块 +from pandas import ( + DataFrame, + DataFrame as dataframe, +) +from pandas.io.api import ( + # excel + ExcelFile, + ExcelWriter, + read_excel, + # parsers + read_csv, + read_fwf, + read_table, + # pickle + read_pickle, + to_pickle, + # pytables + HDFStore, + read_hdf, + # sql + read_sql, + read_sql_query, + read_sql_table, + # misc + read_clipboard, + read_parquet, + read_orc, + read_feather, + read_gbq, + read_html, + read_json, + read_stata, + read_sas, + read_spss, +) + + +# 导入模型相关模块 +# from sklearn.model_selection import train_test_split # 将数据分为测试集和训练集 + +# 分类 Classification +# from sklearn import SomeClassifier +# from sklearn.linear_model import SomeClassifier +# from sklearn.ensemble import SomeClassifier + +# 回归 Regression +# from sklearn import SomeRegressor +# from sklearn.linear_model import SomeRegressor +# from sklearn.ensemble import SomeRegressor + +# 聚类 Clustering +# from sklearn.cluster import SomeModel + +# 降维 Dimensionality Reduction +# from sklearn.decomposition import SomeModel + +# 模型选择 Model Selection +# from sklearn.model_selection import SomeModel + + +# 预处理 Preprocessing +# from sklearn.preprocessing import SomeModel + +# from sklearn.linear_model import LinearRegression # 引入线性回归模型 +# from sklearn.model_selection import cross_val_score # 交叉验证 +# from sklearn.neighbors import KNeighborsClassifier + + +def plot(x, y) -> None: + """ + 提供类似MATLAB的方式进行绘图 + + 参数 + ---------- + x : np.array + y : np.array + """ + plt.plot(x, y) + plt.show() + + + +def size(x) -> np.array: + """ + 获取矩阵的行数和列数 + + 参数 + ---------- + x : np.array + """ + if type(x) is np.ndarray: + return x.shape + else: + try: + return np.array(x).shape + except: + return "data type is not support" + + +import numpy as np + + +def magic(n) -> np.array: + """ + 用于产生魔方矩阵,它的每行、列以及对角线的数之和相等。该和的值为1+2+3+.....+n^2的和再除以n,n必须为大于或等于3的整数。 + + 参数 + ---------- + x : int + """ + n = int(n) + if n < 3: + raise ValueError("Size must be at least 3") + if n % 2 == 1: + p = np.arange(1, n + 1) + return n * np.mod(p[:, None] + p - (n + 3) // 2, n) + np.mod(p[:, None] + 2 * p - 2, n) + 1 + elif n % 4 == 0: + J = np.mod(np.arange(1, n + 1), 4) // 2 + K = J[:, None] == J + M = np.arange(1, n * n + 1, n)[:, None] + np.arange(n) + M[K] = n * n + 1 - M[K] + else: + p = n // 2 + M = magic(p) + M = np.block([[M, M + 2 * p * p], [M + 3 * p * p, M + p * p]]) + i = np.arange(p) + k = (n - 2) // 4 + j = np.concatenate((np.arange(k), np.arange(n - k + 1, n))) + M[np.ix_(np.concatenate((i, i + p)), j)] = M[np.ix_(np.concatenate((i + p, i)), j)] + M[np.ix_([k, k + p], [0, k])] = M[np.ix_([k + p, k], [0, k])] + return M + + +def mode(x, y) -> int: + """ + 返回x/y的余数 + + 参数 + ---------- + x : int + y : int + """ + return x % y diff --git a/__latest.json b/src/pyminer/__latest.json similarity index 100% rename from __latest.json rename to src/pyminer/__latest.json diff --git a/app2.py b/src/pyminer/app2.py similarity index 92% rename from app2.py rename to src/pyminer/app2.py index 902f4197cc8d59ceaca0321bd648f6a4a6427314..bb3d125845a9406568aa3699d106fc12a3743303 100644 --- a/app2.py +++ b/src/pyminer/app2.py @@ -59,7 +59,7 @@ os.environ['QT_API'] = 'pyside2' os.environ['PYQTGRAPH_QT_LIB'] = 'PySide2' os.environ['FORCE_QT_API'] = "1" -from typing import List, Callable, Tuple, ClassVar +from typing import List, Callable, Tuple, ClassVar, Optional from PySide2.QtCore import Signal, QTimer, Qt, QCoreApplication from PySide2.QtGui import QCloseEvent, QTextCursor, QResizeEvent, QMoveEvent, QFont, QIcon, QPixmap from PySide2.QtWidgets import QApplication, QMessageBox, QSplashScreen, QStatusBar, QDialog, QVBoxLayout, QProgressBar @@ -107,7 +107,8 @@ def updateSplashMsg(ext_load_status: dict): def try_hide_terminal(): - if not '-d' in sys.argv: + # TODO 上面有一个地方判断的入参为 ``debug`` ,和这里的 ``d`` 应该是一样的吧? + if '-d' not in sys.argv: if platform.system().lower() == 'windows': whnd = ctypes.windll.kernel32.GetConsoleWindow() if whnd != 0: @@ -128,14 +129,21 @@ class MainWindow(BaseMainWindow): settings_changed_signal = Signal() @classmethod - def __new__(cls, *args): + def __new__(cls, *args, **kwargs): if not hasattr(cls, 'instance'): - instance = super().__new__(cls) + instance = super().__new__(cls, *args, **kwargs) cls.instance = instance return cls.instance - def __init__(self, parent=None): + def __init__(self, parent=None, extensions: Optional[List[str]] = None): + """主程序 + + Args: + parent: 父窗口,由于是主程序,始终是None + extensions: 如果指定,则仅加载指定的插件,否则加载全部插件 + """ super().__init__(parent) + self.extension_names = extensions # 需要加载的插件名称 # settings = Settings() t00 = time.time() self.main_option_form = base.OptionForm() @@ -175,7 +183,11 @@ class MainWindow(BaseMainWindow): # 加载插件 self.extensions_manager = extensions_manager - self.extensions_manager.load_from_extension_folder(updateSplashMsg) + if self.extension_names is None: + self.extensions_manager.load_from_extension_folder(updateSplashMsg) + else: + for name in self.extension_names: + self.extensions_manager.load(name) self.ext_manager_widget = PMPageExt(self) dw = self.add_widget_on_dock( @@ -225,11 +237,7 @@ class MainWindow(BaseMainWindow): self.window_geometry_changed_signal.emit() def start_pmlocalserver(self): - """ - 启动本地flask服务器pmlocalserver - Returns:None - - """ + """启动本地flask服务器pmlocalserver""" server.server_thread.start() def clear_workspace(self): @@ -429,7 +437,8 @@ class MainWindow(BaseMainWindow): utils.open_url("http://www.pyminer.com") def main_markdown_display(self): - print("TODO 添加markdown编辑器代码") + pass + # TODO 添加markdown编辑器代码 def main_new_script_display(self): from features.extensions.extensionlib.extension_lib import extension_lib @@ -476,7 +485,18 @@ class MainWindow(BaseMainWindow): console.append(html) -def main(test_function: Callable[[MainWindow], None] = None): +def main( + test_function: Callable[[MainWindow], None] = None, + extensions: Optional[List[str]] = None, + show_welcome=True, +): + """启动主程序 + + Args: + test_function: 测试函数 + extensions: 需要加载的插件名 + show_welcome: 是否显示欢迎屏 + """ global t0 PMExceptions.get_instance().signal_exception_occured.connect(on_exception) @@ -504,7 +524,7 @@ def main(test_function: Callable[[MainWindow], None] = None): load_translator(app) # 启动主程序 - window = MainWindow() + window = MainWindow(extensions=extensions) t1 = time.time() @@ -513,8 +533,9 @@ def main(test_function: Callable[[MainWindow], None] = None): if test_function is None: # 展示快速启动窗口。只有在设置为True的情况下才显示起始页。 - if utils.get_settings_item_from_file("config.ini", "MAIN/SHOW_START_PAGE"): - window.first_form_display() + if show_welcome: + if utils.get_settings_item_from_file("config.ini", "MAIN/SHOW_START_PAGE"): + window.first_form_display() else: test_function(window) logging.info('boot time elapsed:%f s' % (t1 - t0)) diff --git a/check_dependency.py b/src/pyminer/check_dependency.py similarity index 90% rename from check_dependency.py rename to src/pyminer/check_dependency.py index 6544eae96f24a8daf69bfca874aaa7032e09923b..833df7a49db786cf5218d73917e96b6bf86e2374 100644 --- a/check_dependency.py +++ b/src/pyminer/check_dependency.py @@ -223,19 +223,22 @@ def reinstall_requirements_with_gui(): text = tk.Text(root) text.pack() - class A(): - def read(self): - return - - def write(self, ch: str): - text.insert("end", ch) - return - - a = A() + def gui_print(line: str, end='\n'): + text.insert('end', f'{line}{end}') + text.see('end') def th_f(): + try: + import chardet + except: + gui_print('chardet not found, installing ...') + with subprocess.Popen(f'{sys.executable} -m pip install chardet', stdout=subprocess.PIPE) as p: + p.stdout.read() + gui_print('chardet installed') + import chardet + if platform.system().lower() == "windows": - req_name = 'requirements_dev.txt' + req_name = 'requirements.txt' elif platform.system().lower().startswith("linux"): req_name = 'requirements_linux.txt' elif platform.system().lower().startswith("darwin"): @@ -243,24 +246,14 @@ def reinstall_requirements_with_gui(): else: raise SystemError('Platform not supported!') req_path = os.path.join(os.path.dirname(__file__), req_name) - with open(req_path, 'r') as f: - requirements = [line.strip() for line in f.readlines()] - print(requirements) - - for i, req in enumerate(requirements): - req = req.strip() - if req == "": - continue - text.insert("end", f"正在安装{i + 1}/{len(requirements)}:%s\n" % req) - if req.find('>') != -1 or req.find('<') != -1 or req.find('=') != -1: - ret = os.system( - f'{sys.executable} -m pip install {req} -i https://mirrors.cloud.tencent.com/pypi/simple') - else: - ret = os.system( - f'{sys.executable} -m pip install --upgrade {req} -i https://mirrors.cloud.tencent.com/pypi/simple') - - text.insert("end", "已安装:%s\n" % req) - text.see("end") + mirror = 'https://mirrors.cloud.tencent.com/pypi/simple' + cmd = f'{sys.executable} -m pip install -i {mirror} -r {req_path}' + + with subprocess.Popen(cmd, stdout=subprocess.PIPE) as p: + for line in p.stdout: + encoding = chardet.detect(line)['encoding'] + line = line.decode(encoding) + gui_print(line, end='') root.destroy() th = threading.Thread(target=th_f) diff --git a/config.ini b/src/pyminer/config.ini similarity index 100% rename from config.ini rename to src/pyminer/config.ini diff --git a/configuration/config.ini b/src/pyminer/configuration/config.ini similarity index 100% rename from configuration/config.ini rename to src/pyminer/configuration/config.ini diff --git a/configuration/default_settings.json b/src/pyminer/configuration/default_settings.json similarity index 100% rename from configuration/default_settings.json rename to src/pyminer/configuration/default_settings.json diff --git a/configuration/extensions.json b/src/pyminer/configuration/extensions.json similarity index 100% rename from configuration/extensions.json rename to src/pyminer/configuration/extensions.json diff --git a/configuration/settings.json b/src/pyminer/configuration/settings.json similarity index 100% rename from configuration/settings.json rename to src/pyminer/configuration/settings.json diff --git a/core/__init__.py b/src/pyminer/core/__init__.py similarity index 100% rename from core/__init__.py rename to src/pyminer/core/__init__.py diff --git a/core/algorithms/__init__.py b/src/pyminer/core/algorithms/__init__.py similarity index 100% rename from core/algorithms/__init__.py rename to src/pyminer/core/algorithms/__init__.py diff --git a/core/algorithms/calculation/__init__.py b/src/pyminer/core/algorithms/calculation/__init__.py similarity index 100% rename from core/algorithms/calculation/__init__.py rename to src/pyminer/core/algorithms/calculation/__init__.py diff --git a/core/algorithms/calculation/digits.py b/src/pyminer/core/algorithms/calculation/digits.py similarity index 98% rename from core/algorithms/calculation/digits.py rename to src/pyminer/core/algorithms/calculation/digits.py index fb0273fb9642a36a81e69b3665abb334311b6eb5..b459e3342dfbd092c895eb8b8542c5be50a36d1f 100644 --- a/core/algorithms/calculation/digits.py +++ b/src/pyminer/core/algorithms/calculation/digits.py @@ -59,5 +59,4 @@ def ConvertToFloat(floatingPoint): mantissa = floatingPointString[floatingPointString.find('1') + 1:] # 获得尾数 mantissa = mantissa[:23] + '0' * (23 - len(mantissa)) floatingPointString = '0b' + sign + exponet + mantissa - print(floatingPointString) return hex(int(floatingPointString, 2)) diff --git a/core/algorithms/index.rst b/src/pyminer/core/algorithms/index.rst similarity index 100% rename from core/algorithms/index.rst rename to src/pyminer/core/algorithms/index.rst diff --git a/core/algorithms/linear_algebra/__init__.py b/src/pyminer/core/algorithms/linear_algebra/__init__.py similarity index 100% rename from core/algorithms/linear_algebra/__init__.py rename to src/pyminer/core/algorithms/linear_algebra/__init__.py diff --git a/core/algorithms/linear_algebra/_utils.py b/src/pyminer/core/algorithms/linear_algebra/_utils.py similarity index 100% rename from core/algorithms/linear_algebra/_utils.py rename to src/pyminer/core/algorithms/linear_algebra/_utils.py diff --git a/core/algorithms/linear_algebra/array.py b/src/pyminer/core/algorithms/linear_algebra/array.py similarity index 100% rename from core/algorithms/linear_algebra/array.py rename to src/pyminer/core/algorithms/linear_algebra/array.py diff --git a/core/algorithms/linear_algebra/assets/code_hint.png b/src/pyminer/core/algorithms/linear_algebra/assets/code_hint.png similarity index 100% rename from core/algorithms/linear_algebra/assets/code_hint.png rename to src/pyminer/core/algorithms/linear_algebra/assets/code_hint.png diff --git a/core/algorithms/linear_algebra/assets/configure_test_utils.png b/src/pyminer/core/algorithms/linear_algebra/assets/configure_test_utils.png similarity index 100% rename from core/algorithms/linear_algebra/assets/configure_test_utils.png rename to src/pyminer/core/algorithms/linear_algebra/assets/configure_test_utils.png diff --git a/core/algorithms/linear_algebra/assets/define_function_framework.png b/src/pyminer/core/algorithms/linear_algebra/assets/define_function_framework.png similarity index 100% rename from core/algorithms/linear_algebra/assets/define_function_framework.png rename to src/pyminer/core/algorithms/linear_algebra/assets/define_function_framework.png diff --git a/core/algorithms/linear_algebra/assets/demand_change_file_change.png b/src/pyminer/core/algorithms/linear_algebra/assets/demand_change_file_change.png similarity index 100% rename from core/algorithms/linear_algebra/assets/demand_change_file_change.png rename to src/pyminer/core/algorithms/linear_algebra/assets/demand_change_file_change.png diff --git a/core/algorithms/linear_algebra/assets/finish.png b/src/pyminer/core/algorithms/linear_algebra/assets/finish.png similarity index 100% rename from core/algorithms/linear_algebra/assets/finish.png rename to src/pyminer/core/algorithms/linear_algebra/assets/finish.png diff --git a/core/algorithms/linear_algebra/assets/fix_testcase.png b/src/pyminer/core/algorithms/linear_algebra/assets/fix_testcase.png similarity index 100% rename from core/algorithms/linear_algebra/assets/fix_testcase.png rename to src/pyminer/core/algorithms/linear_algebra/assets/fix_testcase.png diff --git a/core/algorithms/linear_algebra/assets/function_explanation.png b/src/pyminer/core/algorithms/linear_algebra/assets/function_explanation.png similarity index 100% rename from core/algorithms/linear_algebra/assets/function_explanation.png rename to src/pyminer/core/algorithms/linear_algebra/assets/function_explanation.png diff --git a/core/algorithms/linear_algebra/assets/function_explanation_file_change b/src/pyminer/core/algorithms/linear_algebra/assets/function_explanation_file_change similarity index 100% rename from core/algorithms/linear_algebra/assets/function_explanation_file_change rename to src/pyminer/core/algorithms/linear_algebra/assets/function_explanation_file_change diff --git a/core/algorithms/linear_algebra/assets/function_file_change.png b/src/pyminer/core/algorithms/linear_algebra/assets/function_file_change.png similarity index 100% rename from core/algorithms/linear_algebra/assets/function_file_change.png rename to src/pyminer/core/algorithms/linear_algebra/assets/function_file_change.png diff --git a/core/algorithms/linear_algebra/assets/function_workspace.png b/src/pyminer/core/algorithms/linear_algebra/assets/function_workspace.png similarity index 100% rename from core/algorithms/linear_algebra/assets/function_workspace.png rename to src/pyminer/core/algorithms/linear_algebra/assets/function_workspace.png diff --git a/core/algorithms/linear_algebra/assets/help_doc.png b/src/pyminer/core/algorithms/linear_algebra/assets/help_doc.png similarity index 100% rename from core/algorithms/linear_algebra/assets/help_doc.png rename to src/pyminer/core/algorithms/linear_algebra/assets/help_doc.png diff --git a/core/algorithms/linear_algebra/assets/import_in_global.png b/src/pyminer/core/algorithms/linear_algebra/assets/import_in_global.png similarity index 100% rename from core/algorithms/linear_algebra/assets/import_in_global.png rename to src/pyminer/core/algorithms/linear_algebra/assets/import_in_global.png diff --git a/core/algorithms/linear_algebra/assets/import_in_sub_pkg.png b/src/pyminer/core/algorithms/linear_algebra/assets/import_in_sub_pkg.png similarity index 100% rename from core/algorithms/linear_algebra/assets/import_in_sub_pkg.png rename to src/pyminer/core/algorithms/linear_algebra/assets/import_in_sub_pkg.png diff --git a/core/algorithms/linear_algebra/assets/run_in_pm.png b/src/pyminer/core/algorithms/linear_algebra/assets/run_in_pm.png similarity index 100% rename from core/algorithms/linear_algebra/assets/run_in_pm.png rename to src/pyminer/core/algorithms/linear_algebra/assets/run_in_pm.png diff --git a/core/algorithms/linear_algebra/assets/run_test.png b/src/pyminer/core/algorithms/linear_algebra/assets/run_test.png similarity index 100% rename from core/algorithms/linear_algebra/assets/run_test.png rename to src/pyminer/core/algorithms/linear_algebra/assets/run_test.png diff --git a/core/algorithms/linear_algebra/assets/test_error.png b/src/pyminer/core/algorithms/linear_algebra/assets/test_error.png similarity index 100% rename from core/algorithms/linear_algebra/assets/test_error.png rename to src/pyminer/core/algorithms/linear_algebra/assets/test_error.png diff --git a/core/algorithms/linear_algebra/assets/test_pass.png b/src/pyminer/core/algorithms/linear_algebra/assets/test_pass.png similarity index 100% rename from core/algorithms/linear_algebra/assets/test_pass.png rename to src/pyminer/core/algorithms/linear_algebra/assets/test_pass.png diff --git a/core/algorithms/linear_algebra/assets/testcase_file_change.png b/src/pyminer/core/algorithms/linear_algebra/assets/testcase_file_change.png similarity index 100% rename from core/algorithms/linear_algebra/assets/testcase_file_change.png rename to src/pyminer/core/algorithms/linear_algebra/assets/testcase_file_change.png diff --git a/core/algorithms/linear_algebra/assets/write_doc.png b/src/pyminer/core/algorithms/linear_algebra/assets/write_doc.png similarity index 100% rename from core/algorithms/linear_algebra/assets/write_doc.png rename to src/pyminer/core/algorithms/linear_algebra/assets/write_doc.png diff --git a/core/algorithms/linear_algebra/assets/write_doc_file_change.png b/src/pyminer/core/algorithms/linear_algebra/assets/write_doc_file_change.png similarity index 100% rename from core/algorithms/linear_algebra/assets/write_doc_file_change.png rename to src/pyminer/core/algorithms/linear_algebra/assets/write_doc_file_change.png diff --git a/core/algorithms/linear_algebra/assets/write_function_file_change.png b/src/pyminer/core/algorithms/linear_algebra/assets/write_function_file_change.png similarity index 100% rename from core/algorithms/linear_algebra/assets/write_function_file_change.png rename to src/pyminer/core/algorithms/linear_algebra/assets/write_function_file_change.png diff --git a/core/algorithms/linear_algebra/exceptions.py b/src/pyminer/core/algorithms/linear_algebra/exceptions.py similarity index 100% rename from core/algorithms/linear_algebra/exceptions.py rename to src/pyminer/core/algorithms/linear_algebra/exceptions.py diff --git a/core/algorithms/linear_algebra/linear_space.py b/src/pyminer/core/algorithms/linear_algebra/linear_space.py similarity index 100% rename from core/algorithms/linear_algebra/linear_space.py rename to src/pyminer/core/algorithms/linear_algebra/linear_space.py diff --git a/core/algorithms/linear_algebra/matrix_cross.py b/src/pyminer/core/algorithms/linear_algebra/matrix_cross.py similarity index 100% rename from core/algorithms/linear_algebra/matrix_cross.py rename to src/pyminer/core/algorithms/linear_algebra/matrix_cross.py diff --git a/core/algorithms/linear_algebra/matrix_determinant.py b/src/pyminer/core/algorithms/linear_algebra/matrix_determinant.py similarity index 100% rename from core/algorithms/linear_algebra/matrix_determinant.py rename to src/pyminer/core/algorithms/linear_algebra/matrix_determinant.py diff --git a/core/algorithms/linear_algebra/matrix_diagonal.py b/src/pyminer/core/algorithms/linear_algebra/matrix_diagonal.py similarity index 100% rename from core/algorithms/linear_algebra/matrix_diagonal.py rename to src/pyminer/core/algorithms/linear_algebra/matrix_diagonal.py diff --git a/core/algorithms/linear_algebra/matrix_divide.py b/src/pyminer/core/algorithms/linear_algebra/matrix_divide.py similarity index 100% rename from core/algorithms/linear_algebra/matrix_divide.py rename to src/pyminer/core/algorithms/linear_algebra/matrix_divide.py diff --git a/core/algorithms/linear_algebra/matrix_dot.py b/src/pyminer/core/algorithms/linear_algebra/matrix_dot.py similarity index 100% rename from core/algorithms/linear_algebra/matrix_dot.py rename to src/pyminer/core/algorithms/linear_algebra/matrix_dot.py diff --git a/core/algorithms/linear_algebra/matrix_eigenvalue.py b/src/pyminer/core/algorithms/linear_algebra/matrix_eigenvalue.py similarity index 100% rename from core/algorithms/linear_algebra/matrix_eigenvalue.py rename to src/pyminer/core/algorithms/linear_algebra/matrix_eigenvalue.py diff --git a/core/algorithms/linear_algebra/matrix_inverse.py b/src/pyminer/core/algorithms/linear_algebra/matrix_inverse.py similarity index 100% rename from core/algorithms/linear_algebra/matrix_inverse.py rename to src/pyminer/core/algorithms/linear_algebra/matrix_inverse.py diff --git a/core/algorithms/linear_algebra/matrix_multiply.py b/src/pyminer/core/algorithms/linear_algebra/matrix_multiply.py similarity index 100% rename from core/algorithms/linear_algebra/matrix_multiply.py rename to src/pyminer/core/algorithms/linear_algebra/matrix_multiply.py diff --git a/core/algorithms/linear_algebra/matrix_transpose.py b/src/pyminer/core/algorithms/linear_algebra/matrix_transpose.py similarity index 100% rename from core/algorithms/linear_algebra/matrix_transpose.py rename to src/pyminer/core/algorithms/linear_algebra/matrix_transpose.py diff --git a/core/algorithms/linear_algebra/ones.py b/src/pyminer/core/algorithms/linear_algebra/ones.py similarity index 100% rename from core/algorithms/linear_algebra/ones.py rename to src/pyminer/core/algorithms/linear_algebra/ones.py diff --git a/core/algorithms/linear_algebra/reshape.py b/src/pyminer/core/algorithms/linear_algebra/reshape.py similarity index 100% rename from core/algorithms/linear_algebra/reshape.py rename to src/pyminer/core/algorithms/linear_algebra/reshape.py diff --git a/core/algorithms/linear_algebra/shape.py b/src/pyminer/core/algorithms/linear_algebra/shape.py similarity index 100% rename from core/algorithms/linear_algebra/shape.py rename to src/pyminer/core/algorithms/linear_algebra/shape.py diff --git a/core/algorithms/linear_algebra/zeros.py b/src/pyminer/core/algorithms/linear_algebra/zeros.py similarity index 100% rename from core/algorithms/linear_algebra/zeros.py rename to src/pyminer/core/algorithms/linear_algebra/zeros.py diff --git "a/core/algorithms/linear_algebra/\345\274\200\345\217\221\346\265\201\347\250\213.md" "b/src/pyminer/core/algorithms/linear_algebra/\345\274\200\345\217\221\346\265\201\347\250\213.md" similarity index 100% rename from "core/algorithms/linear_algebra/\345\274\200\345\217\221\346\265\201\347\250\213.md" rename to "src/pyminer/core/algorithms/linear_algebra/\345\274\200\345\217\221\346\265\201\347\250\213.md" diff --git a/core/algorithms/plotting/__init__.py b/src/pyminer/core/algorithms/plotting/__init__.py similarity index 100% rename from core/algorithms/plotting/__init__.py rename to src/pyminer/core/algorithms/plotting/__init__.py diff --git a/core/algorithms/plotting/graph.py b/src/pyminer/core/algorithms/plotting/graph.py similarity index 100% rename from core/algorithms/plotting/graph.py rename to src/pyminer/core/algorithms/plotting/graph.py diff --git a/core/algorithms/plotting/graph_configs.py b/src/pyminer/core/algorithms/plotting/graph_configs.py similarity index 100% rename from core/algorithms/plotting/graph_configs.py rename to src/pyminer/core/algorithms/plotting/graph_configs.py diff --git a/core/algorithms/pyminer_util/__init__.py b/src/pyminer/core/algorithms/pyminer_util/__init__.py similarity index 100% rename from core/algorithms/pyminer_util/__init__.py rename to src/pyminer/core/algorithms/pyminer_util/__init__.py diff --git a/core/algorithms/pyminer_util/communication.py b/src/pyminer/core/algorithms/pyminer_util/communication.py similarity index 100% rename from core/algorithms/pyminer_util/communication.py rename to src/pyminer/core/algorithms/pyminer_util/communication.py diff --git a/core/algorithms/statistics/__init__.py b/src/pyminer/core/algorithms/statistics/__init__.py similarity index 100% rename from core/algorithms/statistics/__init__.py rename to src/pyminer/core/algorithms/statistics/__init__.py diff --git a/core/evaluation/woe/__init__.py b/src/pyminer/core/evaluation/__init__.py similarity index 100% rename from core/evaluation/woe/__init__.py rename to src/pyminer/core/evaluation/__init__.py diff --git a/core/evaluation/woe/GridSearch.py b/src/pyminer/core/evaluation/woe/GridSearch.py similarity index 100% rename from core/evaluation/woe/GridSearch.py rename to src/pyminer/core/evaluation/woe/GridSearch.py diff --git a/core/modelling/__init__.py b/src/pyminer/core/evaluation/woe/__init__.py similarity index 100% rename from core/modelling/__init__.py rename to src/pyminer/core/evaluation/woe/__init__.py diff --git a/core/evaluation/woe/config.py b/src/pyminer/core/evaluation/woe/config.py similarity index 100% rename from core/evaluation/woe/config.py rename to src/pyminer/core/evaluation/woe/config.py diff --git a/core/evaluation/woe/eval.py b/src/pyminer/core/evaluation/woe/eval.py similarity index 100% rename from core/evaluation/woe/eval.py rename to src/pyminer/core/evaluation/woe/eval.py diff --git a/core/evaluation/woe/feature_process.py b/src/pyminer/core/evaluation/woe/feature_process.py similarity index 100% rename from core/evaluation/woe/feature_process.py rename to src/pyminer/core/evaluation/woe/feature_process.py diff --git a/core/evaluation/woe/ftrl.py b/src/pyminer/core/evaluation/woe/ftrl.py similarity index 100% rename from core/evaluation/woe/ftrl.py rename to src/pyminer/core/evaluation/woe/ftrl.py diff --git a/core/evaluation/woe/tests/HereWeGo.py b/src/pyminer/core/evaluation/woe/tests/HereWeGo.py similarity index 100% rename from core/evaluation/woe/tests/HereWeGo.py rename to src/pyminer/core/evaluation/woe/tests/HereWeGo.py diff --git a/core/evaluation/woe/tests/README.rst b/src/pyminer/core/evaluation/woe/tests/README.rst similarity index 100% rename from core/evaluation/woe/tests/README.rst rename to src/pyminer/core/evaluation/woe/tests/README.rst diff --git a/core/evaluation/woe/tests/UCI_Credit_Card.csv b/src/pyminer/core/evaluation/woe/tests/UCI_Credit_Card.csv similarity index 100% rename from core/evaluation/woe/tests/UCI_Credit_Card.csv rename to src/pyminer/core/evaluation/woe/tests/UCI_Credit_Card.csv diff --git a/core/evaluation/woe/tests/config.csv b/src/pyminer/core/evaluation/woe/tests/config.csv similarity index 100% rename from core/evaluation/woe/tests/config.csv rename to src/pyminer/core/evaluation/woe/tests/config.csv diff --git a/core/io/postgresql/psycopg2/__init__.py b/src/pyminer/core/io/postgresql/psycopg2/__init__.py similarity index 100% rename from core/io/postgresql/psycopg2/__init__.py rename to src/pyminer/core/io/postgresql/psycopg2/__init__.py diff --git a/core/io/postgresql/psycopg2/_ipaddress.py b/src/pyminer/core/io/postgresql/psycopg2/_ipaddress.py similarity index 100% rename from core/io/postgresql/psycopg2/_ipaddress.py rename to src/pyminer/core/io/postgresql/psycopg2/_ipaddress.py diff --git a/core/io/postgresql/psycopg2/_json.py b/src/pyminer/core/io/postgresql/psycopg2/_json.py similarity index 98% rename from core/io/postgresql/psycopg2/_json.py rename to src/pyminer/core/io/postgresql/psycopg2/_json.py index eac37972dc5d6de805d62292fed7ba61e35d08c3..660a7c48e99996b2c9141ee7afe366ef10d9145e 100644 --- a/core/io/postgresql/psycopg2/_json.py +++ b/src/pyminer/core/io/postgresql/psycopg2/_json.py @@ -36,6 +36,8 @@ from psycopg2.compat import PY2 # oids from PostgreSQL 9.2 +import packages.code_editor.utils.utils + JSON_OID = 114 JSONARRAY_OID = 199 @@ -88,7 +90,7 @@ class Json(object): else: def __str__(self): # getquoted is binary in Py3 - return self.getquoted().decode('ascii', 'replace') + return packages.code_editor.utils.utils.decode('ascii', 'replace') def register_json(conn_or_curs=None, globally=False, loads=None, diff --git a/core/io/postgresql/psycopg2/_lru_cache.py b/src/pyminer/core/io/postgresql/psycopg2/_lru_cache.py similarity index 100% rename from core/io/postgresql/psycopg2/_lru_cache.py rename to src/pyminer/core/io/postgresql/psycopg2/_lru_cache.py diff --git a/core/io/postgresql/psycopg2/_range.py b/src/pyminer/core/io/postgresql/psycopg2/_range.py similarity index 98% rename from core/io/postgresql/psycopg2/_range.py rename to src/pyminer/core/io/postgresql/psycopg2/_range.py index b668fb63213c8ab75b230d69938ae84c337a69f2..e0c76ca8d77dc8f50761df8f14a2b3a856ef2f4d 100644 --- a/core/io/postgresql/psycopg2/_range.py +++ b/src/pyminer/core/io/postgresql/psycopg2/_range.py @@ -32,6 +32,8 @@ from psycopg2.extensions import ISQLQuote, adapt, register_adapter from psycopg2.extensions import new_type, new_array_type, register_type from psycopg2.compat import string_types +import packages.code_editor.utils.utils + class Range(object): """Python representation for a PostgreSQL |range|_ type. @@ -495,12 +497,12 @@ class NumberRangeAdapter(RangeAdapter): # quoted (they are numbers). Also, I'm lazy and not preparing the # adapter because I assume encoding doesn't matter for these # objects. - lower = adapt(r.lower).getquoted().decode('ascii') + lower = packages.code_editor.utils.utils.decode('ascii') else: lower = '' if not r.upper_inf: - upper = adapt(r.upper).getquoted().decode('ascii') + upper = packages.code_editor.utils.utils.decode('ascii') else: upper = '' diff --git a/core/io/postgresql/psycopg2/compat.py b/src/pyminer/core/io/postgresql/psycopg2/compat.py similarity index 100% rename from core/io/postgresql/psycopg2/compat.py rename to src/pyminer/core/io/postgresql/psycopg2/compat.py diff --git a/core/io/postgresql/psycopg2/errorcodes.py b/src/pyminer/core/io/postgresql/psycopg2/errorcodes.py similarity index 100% rename from core/io/postgresql/psycopg2/errorcodes.py rename to src/pyminer/core/io/postgresql/psycopg2/errorcodes.py diff --git a/core/io/postgresql/psycopg2/errors.py b/src/pyminer/core/io/postgresql/psycopg2/errors.py similarity index 100% rename from core/io/postgresql/psycopg2/errors.py rename to src/pyminer/core/io/postgresql/psycopg2/errors.py diff --git a/core/io/postgresql/psycopg2/extensions.py b/src/pyminer/core/io/postgresql/psycopg2/extensions.py similarity index 100% rename from core/io/postgresql/psycopg2/extensions.py rename to src/pyminer/core/io/postgresql/psycopg2/extensions.py diff --git a/core/io/postgresql/psycopg2/extras.py b/src/pyminer/core/io/postgresql/psycopg2/extras.py similarity index 99% rename from core/io/postgresql/psycopg2/extras.py rename to src/pyminer/core/io/postgresql/psycopg2/extras.py index 135a3fb7b5091b826b1010a8eb928e03f129b048..ad73e788ebe0c2fc1da27bed1594339b42a85c94 100644 --- a/core/io/postgresql/psycopg2/extras.py +++ b/src/pyminer/core/io/postgresql/psycopg2/extras.py @@ -35,6 +35,8 @@ import logging as _logging import psycopg2 from psycopg2 import extensions as _ext + +import packages.code_editor.utils.utils from .extensions import cursor as _cursor from .extensions import connection as _connection from .extensions import adapt as _A, quote_ident @@ -906,7 +908,7 @@ class HstoreAdapter(object): if s is None: return None - s = s.decode(_ext.encodings[cur.connection.encoding]) + s = packages.code_editor.utils.utils.decode(_ext.encodings[cur.connection.encoding]) return self.parse(s, cur) @classmethod diff --git a/core/io/postgresql/psycopg2/pool.py b/src/pyminer/core/io/postgresql/psycopg2/pool.py similarity index 100% rename from core/io/postgresql/psycopg2/pool.py rename to src/pyminer/core/io/postgresql/psycopg2/pool.py diff --git a/core/io/postgresql/psycopg2/sql.py b/src/pyminer/core/io/postgresql/psycopg2/sql.py similarity index 100% rename from core/io/postgresql/psycopg2/sql.py rename to src/pyminer/core/io/postgresql/psycopg2/sql.py diff --git a/core/io/postgresql/psycopg2/tz.py b/src/pyminer/core/io/postgresql/psycopg2/tz.py similarity index 100% rename from core/io/postgresql/psycopg2/tz.py rename to src/pyminer/core/io/postgresql/psycopg2/tz.py diff --git a/core/preprocess/__init__.py b/src/pyminer/core/modelling/__init__.py similarity index 100% rename from core/preprocess/__init__.py rename to src/pyminer/core/modelling/__init__.py diff --git a/core/modelling/regression/__init__.py b/src/pyminer/core/modelling/regression/__init__.py similarity index 100% rename from core/modelling/regression/__init__.py rename to src/pyminer/core/modelling/regression/__init__.py diff --git a/core/modelling/regression/base_regression.py b/src/pyminer/core/modelling/regression/base_regression.py similarity index 100% rename from core/modelling/regression/base_regression.py rename to src/pyminer/core/modelling/regression/base_regression.py diff --git a/core/modelling/regression/knn.py b/src/pyminer/core/modelling/regression/knn.py similarity index 100% rename from core/modelling/regression/knn.py rename to src/pyminer/core/modelling/regression/knn.py diff --git a/core/modelling/regression/linear.py b/src/pyminer/core/modelling/regression/linear.py similarity index 100% rename from core/modelling/regression/linear.py rename to src/pyminer/core/modelling/regression/linear.py diff --git a/core/modelling/regression/linear_bfgs.py b/src/pyminer/core/modelling/regression/linear_bfgs.py similarity index 100% rename from core/modelling/regression/linear_bfgs.py rename to src/pyminer/core/modelling/regression/linear_bfgs.py diff --git a/core/modelling/regression/mean.py b/src/pyminer/core/modelling/regression/mean.py similarity index 100% rename from core/modelling/regression/mean.py rename to src/pyminer/core/modelling/regression/mean.py diff --git a/core/modelling/regression/neural_network.py b/src/pyminer/core/modelling/regression/neural_network.py similarity index 100% rename from core/modelling/regression/neural_network.py rename to src/pyminer/core/modelling/regression/neural_network.py diff --git a/core/modelling/regression/random_forest.py b/src/pyminer/core/modelling/regression/random_forest.py similarity index 100% rename from core/modelling/regression/random_forest.py rename to src/pyminer/core/modelling/regression/random_forest.py diff --git a/core/modelling/regression/simple_random_forest.py b/src/pyminer/core/modelling/regression/simple_random_forest.py similarity index 100% rename from core/modelling/regression/simple_random_forest.py rename to src/pyminer/core/modelling/regression/simple_random_forest.py diff --git a/core/modelling/regression/svm.py b/src/pyminer/core/modelling/regression/svm.py similarity index 100% rename from core/modelling/regression/svm.py rename to src/pyminer/core/modelling/regression/svm.py diff --git a/core/modelling/regression/tree.py b/src/pyminer/core/modelling/regression/tree.py similarity index 100% rename from core/modelling/regression/tree.py rename to src/pyminer/core/modelling/regression/tree.py diff --git a/features/__init__.py b/src/pyminer/core/preprocess/__init__.py similarity index 100% rename from features/__init__.py rename to src/pyminer/core/preprocess/__init__.py diff --git a/src/pyminer/dist.py b/src/pyminer/dist.py new file mode 100644 index 0000000000000000000000000000000000000000..14c67b357e6309b1dc782201129eddfb42b99aef --- /dev/null +++ b/src/pyminer/dist.py @@ -0,0 +1,34 @@ +""" +这个脚本用于制作PyMiner的安装包。 +""" +import os +import shutil + + +def make_pyminer_installer(): + DIST_PATH = r"C:\Users\12957\Desktop\pyminer_dist\dist2" + CONDA_PATH = r"C:\Users\12957\Desktop\pyminer_dist\Miniconda3-latest-Windows-x86_64.exe" + CODE_FOLDER = os.path.join(DIST_PATH, "bin") + ADDR = "https://gitee.com/py2cn/pyminer.git" + BRANCH = "master" + PACKUP_COMPONENTS_FOLDER = r"C:\Users\12957\Desktop\pyminer_dist\PyMiner打包组件" + # os.system("start /wait "f" {CONDA_PATH} /InstallationType=JustMe /RegisterPython=0 /S /D={DIST_PATH}") + if not os.path.exists(CODE_FOLDER): + pass + else: + shutil.rmtree(CODE_FOLDER) + + # os.mkdir(CODE_FOLDER) + os.system(f"git clone {ADDR} -b {BRANCH} {CODE_FOLDER}") + for d in os.listdir(PACKUP_COMPONENTS_FOLDER): + src = os.path.join(PACKUP_COMPONENTS_FOLDER, d) + dest = os.path.join(DIST_PATH, d) + shutil.copy(src, dest) + + PYTHON_PATH = os.path.join(DIST_PATH, "python.exe") + os.system(f"{PYTHON_PATH} -m pip install -r {os.path.join(CODE_FOLDER, 'requirements.txt')} -i " + f"https://mirrors.cloud.tencent.com/pypi/simple") + + +if __name__ == '__main__': + make_pyminer_installer() diff --git a/features/README.md b/src/pyminer/features/README.md similarity index 100% rename from features/README.md rename to src/pyminer/features/README.md diff --git a/features/auth/__init__.py b/src/pyminer/features/__init__.py similarity index 100% rename from features/auth/__init__.py rename to src/pyminer/features/__init__.py diff --git a/features/extensions/__init__.py b/src/pyminer/features/auth/__init__.py similarity index 100% rename from features/extensions/__init__.py rename to src/pyminer/features/auth/__init__.py diff --git a/features/auth/authlocalserver.py b/src/pyminer/features/auth/authlocalserver.py similarity index 100% rename from features/auth/authlocalserver.py rename to src/pyminer/features/auth/authlocalserver.py diff --git a/features/auth/authmanager.py b/src/pyminer/features/auth/authmanager.py similarity index 100% rename from features/auth/authmanager.py rename to src/pyminer/features/auth/authmanager.py diff --git a/features/auth/templates/login.html b/src/pyminer/features/auth/templates/login.html similarity index 100% rename from features/auth/templates/login.html rename to src/pyminer/features/auth/templates/login.html diff --git a/features/auth/templates/register.html b/src/pyminer/features/auth/templates/register.html similarity index 100% rename from features/auth/templates/register.html rename to src/pyminer/features/auth/templates/register.html diff --git a/features/extensions/extensions_manager/__init__.py b/src/pyminer/features/extensions/__init__.py similarity index 100% rename from features/extensions/extensions_manager/__init__.py rename to src/pyminer/features/extensions/__init__.py diff --git a/features/extensions/extensionlib/__init__.py b/src/pyminer/features/extensions/extensionlib/__init__.py similarity index 100% rename from features/extensions/extensionlib/__init__.py rename to src/pyminer/features/extensions/extensionlib/__init__.py diff --git a/features/extensions/extensionlib/baseext.py b/src/pyminer/features/extensions/extensionlib/baseext.py similarity index 89% rename from features/extensions/extensionlib/baseext.py rename to src/pyminer/features/extensions/extensionlib/baseext.py index 0e3c1bbd5fad74b029dd7af164d788057fa976b7..8b3f359844ff09fe4116e49f98b1fb2b53c28a21 100644 --- a/features/extensions/extensionlib/baseext.py +++ b/src/pyminer/features/extensions/extensionlib/baseext.py @@ -1,17 +1,17 @@ -from typing import Dict, TYPE_CHECKING import logging - -logger = logging.getLogger(__name__) +from typing import Dict, TYPE_CHECKING if TYPE_CHECKING: from PySide2.QtWidgets import QWidget - from features.extensions.extensionlib import extension_lib + from features.extensions.extensionlib.extension_lib import ExtensionLib + +logger = logging.getLogger(__name__) -class BaseExtension(): +class BaseExtension: widget_classes: Dict[str, 'QWidget'] = None widgets: Dict[str, 'QWidget'] = None - extension_lib: 'extension_lib' = None + extension_lib: 'ExtensionLib' = None public_interface: 'BaseInterface' = None settings: Dict[str, object] = None interface: 'BaseInterface' @@ -56,6 +56,6 @@ class BaseExtension(): pass -class BaseInterface(): +class BaseInterface: def _set_extension(self, extension): self.extension = extension diff --git a/src/pyminer/features/extensions/extensionlib/extension_lib.py b/src/pyminer/features/extensions/extensionlib/extension_lib.py new file mode 100644 index 0000000000000000000000000000000000000000..15663e751baa430cd0a955c6509734ce19d4e9a7 --- /dev/null +++ b/src/pyminer/features/extensions/extensionlib/extension_lib.py @@ -0,0 +1,553 @@ +import inspect +import os +from typing import TYPE_CHECKING, Callable, Dict, List, Tuple, Optional, Any + +from PySide2.QtCore import QRect, Signal +from PySide2.QtWidgets import QWidget, QDialog + +import utils +from features.extensions.extensionlib import baseext +from features.extensions.extensions_manager.manager import extensions_manager +from features.io.exceptions import PMExceptions +from features.ui import pmwidgets +from features.workspace.data_adapter import UniversalAdapter +from features.workspace.data_manager import data_manager +from features.workspace_old.datamanager.datamanager import data_manager as data_manager_old +from pyminer_comm.base import DataDesc +from utils import get_main_window + +if TYPE_CHECKING: + from pmgwidgets import PMGToolBar + + +class ExtensionLib: + pm_widgets = pmwidgets + BaseInterface = baseext.BaseInterface + BaseExtension = baseext.BaseExtension + + @staticmethod + def get_interface(name: str) -> BaseInterface: + """获取名为 ``name`` 的插件的公共接口(由interface定义) + + Args: + name: 插件名称 + """ + return extensions_manager.get_extension(name).public_interface + + @staticmethod + def insert_widget(widget, insert_mode, config=None): + """ + 在主界面上插入一个控件。 + Args: + widget: + insert_mode: + config: + + Returns: + + """ + return extensions_manager.ui_inserters[insert_mode]( + widget, config) + + @staticmethod + def get_main_program_dir(): + """ + 获取主程序的根目录 + Returns: + + """ + return utils.get_root_dir() + + class UI: + @staticmethod + def widget_exists(widget_name: str) -> bool: + if widget_name in get_main_window().dock_widgets.keys(): + return True + else: + return False + + @staticmethod + def get_toolbar(toolbar_name: str) -> 'PMGToolBar': + """ + 获取工具栏 + + Args: + toolbar_name:工具栏名称 + + Returns: + + """ + tb = get_main_window().toolbars.get(toolbar_name) + + return tb + + @staticmethod + def get_toolbar_widget(toolbar_name: str, widget_name: str) -> Optional['QWidget']: + """ + 获取工具栏上的控件(按钮等) + + Args: + toolbar_name:工具栏名称 + widget_name:工具栏上的控件名称 + + Returns: + + """ + toolbar = ExtensionLib.UI.get_toolbar(toolbar_name) + if toolbar is not None: + widget = toolbar.get_control_widget(widget_name) + return widget + return None + + @staticmethod + def get_main_window_geometry() -> 'QRect': + """ + 获取主界面的尺寸 + + Returns: + + """ + return get_main_window().geometry() + + @staticmethod + def raise_dock_into_view(dock_widget_name: str) -> None: + """ + 将界面上的控件提升到可视的位置 + + Args: + dock_widget_name: + + Returns: + + """ + return get_main_window().raise_dock_into_view(dock_widget_name) + + @staticmethod + def get_default_font() -> str: + """ + 获取默认字体文件 + + Returns: Filepath of font. + + """ + app = get_main_window() + return os.path.join(app.font_dir, app.default_font) + + @staticmethod + def switch_toolbar(toolbar_name: str, switch_only: bool = True): + """ + 切换工具栏 + + Args: + toolbar_name: + switch_only: + + Returns: + + """ + app = get_main_window() + app.switch_toolbar(toolbar_name, switch_only) + + @staticmethod + def exec_dialog(dlg: QDialog): + assert isinstance(dlg, QDialog) + win = get_main_window() + dlg.setParent(win) + dlg.exec_() + + class Signal: + @staticmethod + def get_close_signal() -> Signal: + """ + 获取关闭信号 + + Returns: + + """ + return get_main_window().close_signal + + @staticmethod + def get_window_geometry_changed_signal(): + """ + 获取窗口位置和尺寸变化的事件 + + Returns: + + """ + return get_main_window().window_geometry_changed_signal + + @staticmethod + def get_layouts_ready_signal(): + """ + 获取布局加载完毕的事件 + + Returns: + + """ + return get_main_window().layouts_ready_signal + + @staticmethod + def get_widgets_ready_signal(): + """ + 获取控件加载完毕的事件 + + Returns: + + """ + return get_main_window().widgets_ready_signal + + @staticmethod + def get_events_ready_signal(): + """ + 获取界面信号和事件绑定完毕的事件。 + + Returns: + + """ + return get_main_window().events_ready_signal + + @staticmethod + def get_settings_changed_signal() -> 'Signal': + """ + 获取设置发生变化时的事件。 + + Returns: + + """ + return get_main_window().settings_changed_signal + + class Program: + @staticmethod + def add_settings_panel(text: str, panel_content: List[Tuple[str, str]]): + """ + 添加设置面板 + + Args: + text: + panel_content: + + Returns: + + """ + + return get_main_window().main_option_form.add_settings_panel(text, panel_content) + + @staticmethod + def show_log(level: str, module: str, content: str) -> None: + """ + 调用——PluginInterface.show_log('info','CodeEditor','新建文件') + 输出——2020-08-29 23:43:10 hzy INFO [CodeEditor]:新建文件 + Args: + level: 类型,比如‘info’ + module: 模块。比如'Jupyter' + content: 内容。自定义的字符串 + + Returns: + """ + get_main_window().slot_flush_console(level, module, content) + + @staticmethod + def get_main_program_dir(): + """ + 获取主程序路径 + + Returns: + + """ + return utils.get_root_dir() + + @staticmethod + def get_settings_item_from_file(file: str, item: str, mode: str = "user"): + """ + 从设置文件中获取设置项 + Args: + file: + item: + mode: + + Returns: + + """ + return utils.get_settings_item_from_file(file, item, mode) + + @staticmethod + def write_settings_item_to_file(file: str, item: str, value: Any): + """ + 将配置项写入设置文件中 + Args: + file: + item: + value: + + Returns: + + """ + utils.write_settings_item_to_file(file, item, value) + get_main_window().settings_changed_signal.emit() + + @staticmethod + def set_work_dir(work_dir: str) -> None: + """ + 设置当前工作路径 + + Args: + work_dir: + + Returns: + + """ + utils.write_settings_item_to_file("config.ini", "MAIN/PATH_WORKDIR", work_dir) + get_main_window().settings_changed_signal.emit() + + @staticmethod + def get_work_dir() -> str: + """ + 获取当前工作路径 + + Returns: + + """ + + dir = utils.get_settings_item_from_file("config.ini", "MAIN/PATH_WORKDIR") + if (not isinstance(dir, str)) or (not os.path.exists(dir)): + dir = os.path.join(os.path.expanduser("~"), "Desktop") + utils.write_settings_item_to_file("config.ini", "MAIN/PATH_WORKDIR", dir) + return dir + + @staticmethod + def get_theme() -> str: + """ + 获取主题 + Returns: + + """ + return utils.get_settings_item_from_file("config.ini", "MAIN/THEME") + + @staticmethod + def run_python_file(file_path: str, interpreter_path: str): + """ + 运行Python文件命令 + TODO: Write a shell console into pyminer. + + Args: + file_path: + + Returns: + + """ + raise DeprecationWarning + + @staticmethod + def get_plugin_data_path(plugins_name: str) -> str: + """ + 获取插件的数据文件路径 + Args: + plugins_name: + + Returns:str,文件夹路径。 + + """ + ext = extensions_manager.get_extension(plugins_name) + # assert ext is not None, 'Extension named %s isn\'t exist!' % plugins_name + path = os.path.join(os.path.expanduser('~'), '.pyminer', 'packages') + if not os.path.exists(path): + os.mkdir(path) + plugin_data_path = os.path.join(path, plugins_name) + if not os.path.exists(plugin_data_path): + os.mkdir(plugin_data_path) + return plugin_data_path + + @staticmethod + def show_exception_occured_panel(error: BaseException, solution: str, solution_command: str = ''): + """ + + :param error: + :param solution: + :param solution_command: + :return: + """ + PMExceptions.get_instance().emit_exception_occured_signal(error, solution, solution_command) + + class Data: + @staticmethod + def get_adapter(key: str) -> UniversalAdapter: + return data_manager[key] + + @staticmethod + def clear(): + data_manager_old.clear() + + @staticmethod + def delete_variable(var_name: str, provider: str = 'unknown'): + """ + 删除变量 + Args: + var_name: + provider: + + Returns: + + """ + data_manager_old.delete_data(var_name, provider) + + @staticmethod + def get_all_variable_names() -> List[str]: + """ + 获取所有的变量名 + + Returns: + + """ + return list(data_manager.container.keys()) + + @staticmethod + def get_all_public_variable_names() -> List[str]: + """ + 获取所有非保留的变量的名称 + + Returns: + + """ + return list(data_manager_old.get_all_public_var().keys()) + + @staticmethod + def get_all_variables() -> Dict[str, object]: + """ + 获取全部变量(包含保留类型,可能返回结果比较乱,需要审慎使用) + + Returns: + """ + return data_manager_old.get_all_var() + + @staticmethod + def get_all_public_variables() -> Dict[str, object]: + """ + 获取所有的外部可访问变量。 + + Returns: + """ + return data_manager_old.get_all_public_var() + + @staticmethod + def add_data_changed_callback(callback: Callable[[str, Any, str], None]) -> None: + """ + 添加数据改变时触发的回调函数 + + Args: + callback: + + Returns:None + """ + assert callable(callback) + assert len( + list(inspect.signature(callback).parameters.keys())) == 3, 'Function args should be 3' + data_manager_old.on_modification(callback) + + @staticmethod + def remove_data_changed_callback(callback: Callable): + if callback in data_manager_old.modification_callback_actions: + data_manager_old.modification_callback_actions.remove(callback) + print('removed callback!') + + @staticmethod + def add_data_deleted_callback(deletion_callback: Callable[[str, str], None]): + """ + 绑定的函数,要求其输入的函数参数为两个。 + + Args: + deletion_callback: + + Returns: + + """ + assert callable(deletion_callback) + assert len( + list(inspect.signature(deletion_callback).parameters.keys())) == 2, 'Function args should be 2' + data_manager_old.on_deletion(deletion_callback) + + @staticmethod + def var_exists(var_name: str): + """ + 判断var_name对应的变量是否存在 + Args: + var_name: + + Returns: + + """ + return var_name in data_manager + + @staticmethod + def set_var(varname: str, variable, provider='unknown', **info): + """ + + Args: + varname: + variable: + provider: + **info: + + Returns: + + """ + assert isinstance(variable, DataDesc), \ + 'variable name %s ,%s is not type DataDesc' % (varname, variable) + data_manager_old.set_var(varname, variable, provider) + + @staticmethod + def get_var(var_name: str) -> object: + """ + + Args: + var_name: + + Returns: + + """ + raise DeprecationWarning + # return get_var(var_name) + + @staticmethod + def get_data_desc(var_name) -> DataDesc: + desc = data_manager_old.get_var(var_name) + assert isinstance(desc, DataDesc), repr(desc) + return desc + + @staticmethod + def update_var_dic(var_dic: dict, provider: str, metadata_dic: dict = None): + """ + + Args: + var_dic: + provider: + metadata_dic: + + Returns: + + """ + raise DeprecationWarning + + @staticmethod + def get_metadata(varname: str) -> dict: + """ + + Args: + varname: + + Returns: + + """ + return data_manager_old.get_data_info(varname) + + @staticmethod + def get_all_metadata() -> dict: + """ + + Returns: + + """ + d = {k: v for k, v in data_manager_old.metadataset.items()} + return d + + +extension_lib = ExtensionLib() diff --git a/features/extensions/extensionlib/extensionlib.md b/src/pyminer/features/extensions/extensionlib/extensionlib.md similarity index 100% rename from features/extensions/extensionlib/extensionlib.md rename to src/pyminer/features/extensions/extensionlib/extensionlib.md diff --git a/features/extensions/extensionlib/readme.md b/src/pyminer/features/extensions/extensionlib/readme.md similarity index 100% rename from features/extensions/extensionlib/readme.md rename to src/pyminer/features/extensions/extensionlib/readme.md diff --git a/features/extensions/extensions_manager/ExtensionLoader.py b/src/pyminer/features/extensions/extensions_manager/ExtensionLoader.py similarity index 96% rename from features/extensions/extensions_manager/ExtensionLoader.py rename to src/pyminer/features/extensions/extensions_manager/ExtensionLoader.py index 59b7fab5cee5f8751ae7672997373caaa322f8aa..d7c9aa5089dc42f3e2066d12c74c72f08424cdc7 100644 --- a/features/extensions/extensions_manager/ExtensionLoader.py +++ b/src/pyminer/features/extensions/extensions_manager/ExtensionLoader.py @@ -1,21 +1,17 @@ -from features.io.exceptions import pyminer_exc_mgr - -import os -import sys import importlib import json -from collections import namedtuple -import copy -import traceback import logging +import os +import sys +from collections import namedtuple import utils +from features.io.exceptions import pyminer_exc_mgr logger = logging.getLogger('extensionmanager.extensionloader') # from features.extensions.extensions_manager import log - Info = namedtuple('Info', ['icon', 'name', @@ -38,7 +34,7 @@ class ExtensionLoader: self.import_path = os.path.join(utils.get_root_dir(), 'packages') sys.path.append(self.import_path) # 将模块导入路径设置为扩展文件夹,这样可以直接导入入口文件 self.extension_lib_path = os.path.join( - utils.get_root_dir(),'pyminer2', 'extensions', 'extensionlib') + utils.get_root_dir(), 'pyminer2', 'extensions', 'extensionlib') sys.path.append(self.extension_lib_path) def load(self, file, ui_inserters): @@ -54,7 +50,7 @@ class ExtensionLoader: 'group', '未知类型/未知分组').split('/') self.path = os.path.join( - utils.get_root_dir(),'packages', + utils.get_root_dir(), 'packages', self.name) # 扩展文件夹路径 main_config = self.package.get( @@ -159,7 +155,7 @@ class ExtensionLoader: module_path = f'{package_name}.{module_name}' module = None module = importlib.import_module(module_path) - + except Exception as e: logger.error(e, exc_info=True) module = None @@ -168,6 +164,7 @@ class ExtensionLoader: def load_class(self, file, class_name): path = os.path.join(self.path, file) + # TODO 这里的设置将导致奇怪的错误,即模块不再为单例模式,而这是Python中的一个重要特性 module = self.import_module(path) if module: if hasattr(module, class_name): diff --git a/features/extensions/extensions_manager/README.md b/src/pyminer/features/extensions/extensions_manager/README.md similarity index 100% rename from features/extensions/extensions_manager/README.md rename to src/pyminer/features/extensions/extensions_manager/README.md diff --git a/features/extensions/extensions_manager/UIInserter.py b/src/pyminer/features/extensions/extensions_manager/UIInserter.py similarity index 100% rename from features/extensions/extensions_manager/UIInserter.py rename to src/pyminer/features/extensions/extensions_manager/UIInserter.py diff --git a/features/interpretermanager/__init__.py b/src/pyminer/features/extensions/extensions_manager/__init__.py similarity index 100% rename from features/interpretermanager/__init__.py rename to src/pyminer/features/extensions/extensions_manager/__init__.py diff --git a/features/extensions/extensions_manager/log.py b/src/pyminer/features/extensions/extensions_manager/log.py similarity index 100% rename from features/extensions/extensions_manager/log.py rename to src/pyminer/features/extensions/extensions_manager/log.py diff --git a/features/extensions/extensions_manager/manager.py b/src/pyminer/features/extensions/extensions_manager/manager.py similarity index 96% rename from features/extensions/extensions_manager/manager.py rename to src/pyminer/features/extensions/extensions_manager/manager.py index 24c2e8bbb134c9956ccadaadfeaa92ee6798914a..14fb3bf117f13e28beebdb2c2ad341284dd4a21d 100644 --- a/features/extensions/extensions_manager/manager.py +++ b/src/pyminer/features/extensions/extensions_manager/manager.py @@ -1,17 +1,17 @@ -from features.extensions.extensions_manager.UIInserter import ui_inserters -from features.extensions.extensions_manager.ExtensionLoader import ExtensionLoader -from .vermanager import VersionsManager, Module +import importlib +import json +import json.decoder +import logging import os import shutil import sys import time -import json -import json.decoder import zipfile -import importlib -import traceback -import logging + import utils +from features.extensions.extensions_manager.ExtensionLoader import ExtensionLoader +from features.extensions.extensions_manager.UIInserter import ui_inserters +from .vermanager import VersionsManager logger = logging.getLogger('extensionmanager') logger.setLevel(logging.DEBUG) @@ -27,7 +27,7 @@ class ExtensionsManager: self.ui_inserters = ui_inserters self.id_ = 0 # 扩展id,动态分配的 self.setting_path = os.path.join( - utils.get_root_dir(), 'configuration','extensions.json') # 扩展配置文件位置 + utils.get_root_dir(), 'configuration', 'extensions.json') # 扩展配置文件位置 if not os.path.exists(self.setting_path): raise FileNotFoundError(self.setting_path) try: @@ -103,8 +103,7 @@ class ExtensionsManager: if callable(callback): callback(ext_load_status) t1 = time.time() - logger.info('boot time elapsed for %s : %f s' % - (str(package), t1 - t0)) + logger.info(f'boot time elapsed for {str(package)} : {t1 - t0:f} s') def get_extension(self, name): """通过名称获取扩展""" diff --git a/features/extensions/extensions_manager/readme.drawio b/src/pyminer/features/extensions/extensions_manager/readme.drawio similarity index 100% rename from features/extensions/extensions_manager/readme.drawio rename to src/pyminer/features/extensions/extensions_manager/readme.drawio diff --git a/features/extensions/extensions_manager/vermanager/__init__.py b/src/pyminer/features/extensions/extensions_manager/vermanager/__init__.py similarity index 100% rename from features/extensions/extensions_manager/vermanager/__init__.py rename to src/pyminer/features/extensions/extensions_manager/vermanager/__init__.py diff --git a/features/extensions/extensions_manager/vermanager/vermanager.py b/src/pyminer/features/extensions/extensions_manager/vermanager/vermanager.py similarity index 100% rename from features/extensions/extensions_manager/vermanager/vermanager.py rename to src/pyminer/features/extensions/extensions_manager/vermanager/vermanager.py diff --git a/features/extensions/index.rst b/src/pyminer/features/extensions/index.rst similarity index 100% rename from features/extensions/index.rst rename to src/pyminer/features/extensions/index.rst diff --git a/features/feedback.py b/src/pyminer/features/feedback.py similarity index 100% rename from features/feedback.py rename to src/pyminer/features/feedback.py diff --git a/features/index.rst b/src/pyminer/features/index.rst similarity index 100% rename from features/index.rst rename to src/pyminer/features/index.rst diff --git a/features/io/__init__.py b/src/pyminer/features/interpretermanager/__init__.py similarity index 100% rename from features/io/__init__.py rename to src/pyminer/features/interpretermanager/__init__.py diff --git a/features/interpretermanager/interpretermanager.py b/src/pyminer/features/interpretermanager/interpretermanager.py similarity index 100% rename from features/interpretermanager/interpretermanager.py rename to src/pyminer/features/interpretermanager/interpretermanager.py diff --git a/features/interpretermanager/packagemanager.py b/src/pyminer/features/interpretermanager/packagemanager.py similarity index 100% rename from features/interpretermanager/packagemanager.py rename to src/pyminer/features/interpretermanager/packagemanager.py diff --git a/features/pluginsmanager/__init__.py b/src/pyminer/features/io/__init__.py similarity index 100% rename from features/pluginsmanager/__init__.py rename to src/pyminer/features/io/__init__.py diff --git a/features/io/database.py b/src/pyminer/features/io/database.py similarity index 100% rename from features/io/database.py rename to src/pyminer/features/io/database.py diff --git a/features/io/dbConn.py b/src/pyminer/features/io/dbConn.py similarity index 100% rename from features/io/dbConn.py rename to src/pyminer/features/io/dbConn.py diff --git a/features/io/dbConnectAccount.pkl b/src/pyminer/features/io/dbConnectAccount.pkl similarity index 100% rename from features/io/dbConnectAccount.pkl rename to src/pyminer/features/io/dbConnectAccount.pkl diff --git a/features/io/encoding.py b/src/pyminer/features/io/encoding.py similarity index 100% rename from features/io/encoding.py rename to src/pyminer/features/io/encoding.py diff --git a/features/io/exceptions.py b/src/pyminer/features/io/exceptions.py similarity index 100% rename from features/io/exceptions.py rename to src/pyminer/features/io/exceptions.py diff --git a/features/io/settings.py b/src/pyminer/features/io/settings.py similarity index 100% rename from features/io/settings.py rename to src/pyminer/features/io/settings.py diff --git a/features/main_window/base.py b/src/pyminer/features/main_window/base.py similarity index 100% rename from features/main_window/base.py rename to src/pyminer/features/main_window/base.py diff --git a/features/util/openprocess.py b/src/pyminer/features/openprocess.py similarity index 93% rename from features/util/openprocess.py rename to src/pyminer/features/openprocess.py index d6054765f820f706a6c7c8a727c9b1e838585984..1d4cc8dfda70ce5337c4df17265b947e4f599f56 100644 --- a/features/util/openprocess.py +++ b/src/pyminer/features/openprocess.py @@ -7,6 +7,8 @@ import time import chardet from typing import List +import packages.code_editor.utils.utils + class PMProcess(): def __init__(self, args: List[str]): @@ -50,7 +52,7 @@ class PMProcess(): encoding = 'utf-8' else: encoding = chardet.detect(line)['encoding'] - queue.put(str(type) + line.decode(encoding)) + queue.put(str(type) + packages.code_editor.utils.utils.decode(encoding)) print(line) stream.close() @@ -72,7 +74,7 @@ class PMProcess(): encoding = 'utf-8' else: encoding = chardet.detect(line)['encoding'] - queue.put(str(type) + line.decode(encoding)) + queue.put(str(type) + packages.code_editor.utils.utils.decode(encoding)) stream.close() def consoleLoop(self): # 封装后的内容。 diff --git a/features/project/template/PySide2Template/__init__.py b/src/pyminer/features/pluginsmanager/__init__.py similarity index 100% rename from features/project/template/PySide2Template/__init__.py rename to src/pyminer/features/pluginsmanager/__init__.py diff --git a/features/pluginsmanager/pluginsmanager.py b/src/pyminer/features/pluginsmanager/pluginsmanager.py similarity index 100% rename from features/pluginsmanager/pluginsmanager.py rename to src/pyminer/features/pluginsmanager/pluginsmanager.py diff --git a/features/project/template/Basic-Template.py b/src/pyminer/features/project/template/Basic-Template.py similarity index 100% rename from features/project/template/Basic-Template.py rename to src/pyminer/features/project/template/Basic-Template.py diff --git a/features/project/template/Empty-Template.py b/src/pyminer/features/project/template/Empty-Template.py similarity index 100% rename from features/project/template/Empty-Template.py rename to src/pyminer/features/project/template/Empty-Template.py diff --git a/features/project/template/Plot-Template.py b/src/pyminer/features/project/template/Plot-Template.py similarity index 100% rename from features/project/template/Plot-Template.py rename to src/pyminer/features/project/template/Plot-Template.py diff --git a/features/project/template/PyQt-Template.py b/src/pyminer/features/project/template/PyQt-Template.py similarity index 100% rename from features/project/template/PyQt-Template.py rename to src/pyminer/features/project/template/PyQt-Template.py diff --git a/features/project/template/PySide2Template/PySide2_Template.py b/src/pyminer/features/project/template/PySide2Template/PySide2_Template.py similarity index 100% rename from features/project/template/PySide2Template/PySide2_Template.py rename to src/pyminer/features/project/template/PySide2Template/PySide2_Template.py diff --git a/features/project/template/PySide2Template/PySide2_Template.ui b/src/pyminer/features/project/template/PySide2Template/PySide2_Template.ui similarity index 100% rename from features/project/template/PySide2Template/PySide2_Template.ui rename to src/pyminer/features/project/template/PySide2Template/PySide2_Template.ui diff --git a/features/project/template/__init__.py b/src/pyminer/features/project/template/PySide2Template/__init__.py similarity index 100% rename from features/project/template/__init__.py rename to src/pyminer/features/project/template/PySide2Template/__init__.py diff --git a/features/project/template/PySide2Template/main.py b/src/pyminer/features/project/template/PySide2Template/main.py similarity index 100% rename from features/project/template/PySide2Template/main.py rename to src/pyminer/features/project/template/PySide2Template/main.py diff --git a/features/ui/__init__.py b/src/pyminer/features/project/template/__init__.py similarity index 100% rename from features/ui/__init__.py rename to src/pyminer/features/project/template/__init__.py diff --git a/features/settings.py b/src/pyminer/features/settings.py similarity index 100% rename from features/settings.py rename to src/pyminer/features/settings.py diff --git a/features/ui/common/__init__.py b/src/pyminer/features/ui/__init__.py similarity index 100% rename from features/ui/common/__init__.py rename to src/pyminer/features/ui/__init__.py diff --git a/features/ui/pm_marketplace/__init__.py b/src/pyminer/features/ui/common/__init__.py similarity index 100% rename from features/ui/pm_marketplace/__init__.py rename to src/pyminer/features/ui/common/__init__.py diff --git a/features/ui/common/debug_process_with_pyqt.py b/src/pyminer/features/ui/common/debug_process_with_pyqt.py similarity index 99% rename from features/ui/common/debug_process_with_pyqt.py rename to src/pyminer/features/ui/common/debug_process_with_pyqt.py index 7ae052ea4078af4ac188d670f7cc9dffe9ef222d..a2e54a5c5eaecb6355b6669162b6d28f5a9f4f54 100644 --- a/features/ui/common/debug_process_with_pyqt.py +++ b/src/pyminer/features/ui/common/debug_process_with_pyqt.py @@ -18,7 +18,7 @@ from pmgwidgets import PMGJsonTree logger = logging.getLogger(__name__) if TYPE_CHECKING: from features.openprocess import PMProcess - from packages.code_editor.codeeditor.tabwidget import PMCodeEditTabWidget + from packages.code_editor.widgets.tab_widget import PMCodeEditTabWidget else: from features.openprocess import PMProcess diff --git a/features/ui/common/open_process_with_pyqt.py b/src/pyminer/features/ui/common/open_process_with_pyqt.py similarity index 100% rename from features/ui/common/open_process_with_pyqt.py rename to src/pyminer/features/ui/common/open_process_with_pyqt.py diff --git a/features/ui/common/openprocess.py b/src/pyminer/features/ui/common/openprocess.py similarity index 96% rename from features/ui/common/openprocess.py rename to src/pyminer/features/ui/common/openprocess.py index ddbc2f52bbeb0fb9c0eba222778913b3c02a9db5..00872fdab7a06a02a0764c62dfb2dadf85b37590 100644 --- a/features/ui/common/openprocess.py +++ b/src/pyminer/features/ui/common/openprocess.py @@ -7,6 +7,8 @@ import time import chardet from typing import List +import packages.code_editor.utils.utils + class PMProcess(): def __init__(self, args: List[str]): @@ -35,7 +37,7 @@ class PMProcess(): for line in iter(stream.readline, b''): if self.terminate: break encoding = chardet.detect(line)['encoding'] - queue.put(str(type) + line.decode(encoding)) + queue.put(str(type) + packages.code_editor.utils.utils.decode(encoding)) stream.close() def consoleLoop(self): # 封装后的内容。 diff --git a/features/ui/common/platformutil.py b/src/pyminer/features/ui/common/platformutil.py similarity index 100% rename from features/ui/common/platformutil.py rename to src/pyminer/features/ui/common/platformutil.py diff --git a/features/ui/common/pmlocale.py b/src/pyminer/features/ui/common/pmlocale.py similarity index 100% rename from features/ui/common/pmlocale.py rename to src/pyminer/features/ui/common/pmlocale.py diff --git a/features/ui/common/test_open_app.py b/src/pyminer/features/ui/common/test_open_app.py similarity index 100% rename from features/ui/common/test_open_app.py rename to src/pyminer/features/ui/common/test_open_app.py diff --git a/features/ui/main.py b/src/pyminer/features/ui/main.py similarity index 100% rename from features/ui/main.py rename to src/pyminer/features/ui/main.py diff --git a/features/util/__init__.py b/src/pyminer/features/ui/pm_marketplace/__init__.py similarity index 100% rename from features/util/__init__.py rename to src/pyminer/features/ui/pm_marketplace/__init__.py diff --git a/features/ui/pm_marketplace/install.py b/src/pyminer/features/ui/pm_marketplace/install.py similarity index 100% rename from features/ui/pm_marketplace/install.py rename to src/pyminer/features/ui/pm_marketplace/install.py diff --git a/features/ui/pm_marketplace/install.ui b/src/pyminer/features/ui/pm_marketplace/install.ui similarity index 100% rename from features/ui/pm_marketplace/install.ui rename to src/pyminer/features/ui/pm_marketplace/install.ui diff --git a/features/ui/pm_marketplace/main.py b/src/pyminer/features/ui/pm_marketplace/main.py similarity index 100% rename from features/ui/pm_marketplace/main.py rename to src/pyminer/features/ui/pm_marketplace/main.py diff --git a/features/ui/pm_marketplace/main.ui b/src/pyminer/features/ui/pm_marketplace/main.ui similarity index 100% rename from features/ui/pm_marketplace/main.ui rename to src/pyminer/features/ui/pm_marketplace/main.ui diff --git a/features/ui/pm_marketplace/package_manager_main.py b/src/pyminer/features/ui/pm_marketplace/package_manager_main.py similarity index 100% rename from features/ui/pm_marketplace/package_manager_main.py rename to src/pyminer/features/ui/pm_marketplace/package_manager_main.py diff --git a/features/ui/pm_marketplace/package_manager_main.ui b/src/pyminer/features/ui/pm_marketplace/package_manager_main.ui similarity index 100% rename from features/ui/pm_marketplace/package_manager_main.ui rename to src/pyminer/features/ui/pm_marketplace/package_manager_main.ui diff --git a/features/ui/pm_marketplace/uninstall.py b/src/pyminer/features/ui/pm_marketplace/uninstall.py similarity index 100% rename from features/ui/pm_marketplace/uninstall.py rename to src/pyminer/features/ui/pm_marketplace/uninstall.py diff --git a/features/ui/pm_marketplace/uninstall.ui b/src/pyminer/features/ui/pm_marketplace/uninstall.ui similarity index 100% rename from features/ui/pm_marketplace/uninstall.ui rename to src/pyminer/features/ui/pm_marketplace/uninstall.ui diff --git a/features/ui/pmwidgets/__init__.py b/src/pyminer/features/ui/pmwidgets/__init__.py similarity index 100% rename from features/ui/pmwidgets/__init__.py rename to src/pyminer/features/ui/pmwidgets/__init__.py diff --git a/features/ui/pmwidgets/dockwidget.py b/src/pyminer/features/ui/pmwidgets/dockwidget.py similarity index 75% rename from features/ui/pmwidgets/dockwidget.py rename to src/pyminer/features/ui/pmwidgets/dockwidget.py index 2ebaf7dc72bb15928e5ce6cb658f27c6fec65e44..052ffdf191767f267ee20c82ac4be5e712dec27f 100644 --- a/features/ui/pmwidgets/dockwidget.py +++ b/src/pyminer/features/ui/pmwidgets/dockwidget.py @@ -15,3 +15,7 @@ class PMDockWidget(PMGDockWidget): self.hide() event.accept() main_window.refresh_view_configs() + + def bind_events(self): + """绑定该控件的所有事件,会在主程序加载结束后自动执行,不需要在__init__里面手动执行""" + pass diff --git a/features/ui/pmwidgets/pmmainwindow.py b/src/pyminer/features/ui/pmwidgets/pmmainwindow.py similarity index 98% rename from features/ui/pmwidgets/pmmainwindow.py rename to src/pyminer/features/ui/pmwidgets/pmmainwindow.py index f74385011a4f01ee39ee5adf2e8e15e1e2fe2b15..431baa7cd5391d3b8c26740c16b544618cfc6ba4 100644 --- a/features/ui/pmwidgets/pmmainwindow.py +++ b/src/pyminer/features/ui/pmwidgets/pmmainwindow.py @@ -39,12 +39,17 @@ class BaseMainWindow(QMainWindow): dialog_classes: Dict[str, 'QDialog'] = {} toolbars: Dict[str, QToolBar] = {} _current_toolbar_name: str = '' # 当前的窗口标题栏选项卡 - dock_widgets: Dict[str, 'PMDockWidget'] = {} + __dock_widgets: Dict[str, 'PMDockWidget'] dock_places = {'left': Qt.LeftDockWidgetArea, 'right': Qt.RightDockWidgetArea, 'top': Qt.TopDockWidgetArea, 'bottom': Qt.BottomDockWidgetArea} + @property + def dock_widgets(self): + return self.__dock_widgets + def __init__(self, parent=None): super().__init__(parent) + self.__dock_widgets = {} self.setContextMenuPolicy(Qt.NoContextMenu) # 隐藏主界面的菜单栏。 def set_dock_titlebar_visible(self, show: bool): diff --git a/features/ui/pmwidgets/toplevel.py b/src/pyminer/features/ui/pmwidgets/toplevel.py similarity index 100% rename from features/ui/pmwidgets/toplevel.py rename to src/pyminer/features/ui/pmwidgets/toplevel.py diff --git a/features/ui/ui_aboutme.py b/src/pyminer/features/ui/ui_aboutme.py similarity index 100% rename from features/ui/ui_aboutme.py rename to src/pyminer/features/ui/ui_aboutme.py diff --git a/features/ui/ui_aboutme.ui b/src/pyminer/features/ui/ui_aboutme.ui similarity index 100% rename from features/ui/ui_aboutme.ui rename to src/pyminer/features/ui/ui_aboutme.ui diff --git a/features/ui/ui_appstore.py b/src/pyminer/features/ui/ui_appstore.py similarity index 100% rename from features/ui/ui_appstore.py rename to src/pyminer/features/ui/ui_appstore.py diff --git a/features/ui/ui_appstore.ui b/src/pyminer/features/ui/ui_appstore.ui similarity index 100% rename from features/ui/ui_appstore.ui rename to src/pyminer/features/ui/ui_appstore.ui diff --git a/features/ui/ui_check_update.py b/src/pyminer/features/ui/ui_check_update.py similarity index 100% rename from features/ui/ui_check_update.py rename to src/pyminer/features/ui/ui_check_update.py diff --git a/features/ui/ui_check_update.ui b/src/pyminer/features/ui/ui_check_update.ui similarity index 100% rename from features/ui/ui_check_update.ui rename to src/pyminer/features/ui/ui_check_update.ui diff --git a/features/ui/ui_data_normal.py b/src/pyminer/features/ui/ui_data_normal.py similarity index 100% rename from features/ui/ui_data_normal.py rename to src/pyminer/features/ui/ui_data_normal.py diff --git a/features/ui/ui_data_normal.ui b/src/pyminer/features/ui/ui_data_normal.ui similarity index 100% rename from features/ui/ui_data_normal.ui rename to src/pyminer/features/ui/ui_data_normal.ui diff --git a/features/ui/ui_first_form.py b/src/pyminer/features/ui/ui_first_form.py similarity index 100% rename from features/ui/ui_first_form.py rename to src/pyminer/features/ui/ui_first_form.py diff --git a/features/ui/ui_first_form.ui b/src/pyminer/features/ui/ui_first_form.ui similarity index 100% rename from features/ui/ui_first_form.ui rename to src/pyminer/features/ui/ui_first_form.ui diff --git a/features/ui/ui_login.py b/src/pyminer/features/ui/ui_login.py similarity index 100% rename from features/ui/ui_login.py rename to src/pyminer/features/ui/ui_login.py diff --git a/features/ui/ui_login.ui b/src/pyminer/features/ui/ui_login.ui similarity index 100% rename from features/ui/ui_login.ui rename to src/pyminer/features/ui/ui_login.ui diff --git a/features/ui/ui_logined.py b/src/pyminer/features/ui/ui_logined.py similarity index 100% rename from features/ui/ui_logined.py rename to src/pyminer/features/ui/ui_logined.py diff --git a/features/ui/ui_logined.ui b/src/pyminer/features/ui/ui_logined.ui similarity index 100% rename from features/ui/ui_logined.ui rename to src/pyminer/features/ui/ui_logined.ui diff --git a/features/ui/ui_option.py b/src/pyminer/features/ui/ui_option.py similarity index 100% rename from features/ui/ui_option.py rename to src/pyminer/features/ui/ui_option.py diff --git a/features/ui/ui_option.ui b/src/pyminer/features/ui/ui_option.ui similarity index 100% rename from features/ui/ui_option.ui rename to src/pyminer/features/ui/ui_option.ui diff --git a/features/ui/ui_preferences.py b/src/pyminer/features/ui/ui_preferences.py similarity index 100% rename from features/ui/ui_preferences.py rename to src/pyminer/features/ui/ui_preferences.py diff --git a/features/ui/ui_preferences.ui b/src/pyminer/features/ui/ui_preferences.ui similarity index 100% rename from features/ui/ui_preferences.ui rename to src/pyminer/features/ui/ui_preferences.ui diff --git a/features/ui/ui_project_wizard.py b/src/pyminer/features/ui/ui_project_wizard.py similarity index 100% rename from features/ui/ui_project_wizard.py rename to src/pyminer/features/ui/ui_project_wizard.py diff --git a/features/ui/ui_project_wizard.ui b/src/pyminer/features/ui/ui_project_wizard.ui similarity index 100% rename from features/ui/ui_project_wizard.ui rename to src/pyminer/features/ui/ui_project_wizard.ui diff --git a/features/ui/ui_workspace_launcher.py b/src/pyminer/features/ui/ui_workspace_launcher.py similarity index 100% rename from features/ui/ui_workspace_launcher.py rename to src/pyminer/features/ui/ui_workspace_launcher.py diff --git a/features/ui/ui_workspace_launcher.ui b/src/pyminer/features/ui/ui_workspace_launcher.ui similarity index 100% rename from features/ui/ui_workspace_launcher.ui rename to src/pyminer/features/ui/ui_workspace_launcher.ui diff --git a/features/ui/widgets/README.md b/src/pyminer/features/ui/widgets/README.md similarity index 100% rename from features/ui/widgets/README.md rename to src/pyminer/features/ui/widgets/README.md diff --git a/features/ui/widgets/__init__.py b/src/pyminer/features/ui/widgets/__init__.py similarity index 100% rename from features/ui/widgets/__init__.py rename to src/pyminer/features/ui/widgets/__init__.py diff --git a/features/ui/widgets/controlpanel.py b/src/pyminer/features/ui/widgets/controlpanel.py similarity index 100% rename from features/ui/widgets/controlpanel.py rename to src/pyminer/features/ui/widgets/controlpanel.py diff --git a/features/ui/widgets/notificationwidget.py b/src/pyminer/features/ui/widgets/notificationwidget.py similarity index 100% rename from features/ui/widgets/notificationwidget.py rename to src/pyminer/features/ui/widgets/notificationwidget.py diff --git a/features/ui/widgets/reportwidget.py b/src/pyminer/features/ui/widgets/reportwidget.py similarity index 100% rename from features/ui/widgets/reportwidget.py rename to src/pyminer/features/ui/widgets/reportwidget.py diff --git a/features/ui/widgets/resources.py b/src/pyminer/features/ui/widgets/resources.py similarity index 100% rename from features/ui/widgets/resources.py rename to src/pyminer/features/ui/widgets/resources.py diff --git a/features/workspace/__init__.py b/src/pyminer/features/util/__init__.py similarity index 100% rename from features/workspace/__init__.py rename to src/pyminer/features/util/__init__.py diff --git a/features/util/check_update_ui.py b/src/pyminer/features/util/check_update_ui.py similarity index 100% rename from features/util/check_update_ui.py rename to src/pyminer/features/util/check_update_ui.py diff --git a/features/util/check_update_ui.ui b/src/pyminer/features/util/check_update_ui.ui similarity index 100% rename from features/util/check_update_ui.ui rename to src/pyminer/features/util/check_update_ui.ui diff --git a/features/util/make_update.py b/src/pyminer/features/util/make_update.py similarity index 100% rename from features/util/make_update.py rename to src/pyminer/features/util/make_update.py diff --git a/features/openprocess.py b/src/pyminer/features/util/openprocess.py similarity index 93% rename from features/openprocess.py rename to src/pyminer/features/util/openprocess.py index d6054765f820f706a6c7c8a727c9b1e838585984..1d4cc8dfda70ce5337c4df17265b947e4f599f56 100644 --- a/features/openprocess.py +++ b/src/pyminer/features/util/openprocess.py @@ -7,6 +7,8 @@ import time import chardet from typing import List +import packages.code_editor.utils.utils + class PMProcess(): def __init__(self, args: List[str]): @@ -50,7 +52,7 @@ class PMProcess(): encoding = 'utf-8' else: encoding = chardet.detect(line)['encoding'] - queue.put(str(type) + line.decode(encoding)) + queue.put(str(type) + packages.code_editor.utils.utils.decode(encoding)) print(line) stream.close() @@ -72,7 +74,7 @@ class PMProcess(): encoding = 'utf-8' else: encoding = chardet.detect(line)['encoding'] - queue.put(str(type) + line.decode(encoding)) + queue.put(str(type) + packages.code_editor.utils.utils.decode(encoding)) stream.close() def consoleLoop(self): # 封装后的内容。 diff --git a/features/util/update.py b/src/pyminer/features/util/update.py similarity index 100% rename from features/util/update.py rename to src/pyminer/features/util/update.py diff --git a/features/workspace/data/__init__.py b/src/pyminer/features/workspace/__init__.py similarity index 100% rename from features/workspace/data/__init__.py rename to src/pyminer/features/workspace/__init__.py diff --git a/features/workspace/blinker/__init__.py b/src/pyminer/features/workspace/blinker/__init__.py similarity index 100% rename from features/workspace/blinker/__init__.py rename to src/pyminer/features/workspace/blinker/__init__.py diff --git a/features/workspace/blinker/_saferef.py b/src/pyminer/features/workspace/blinker/_saferef.py similarity index 100% rename from features/workspace/blinker/_saferef.py rename to src/pyminer/features/workspace/blinker/_saferef.py diff --git a/features/workspace/blinker/_utilities.py b/src/pyminer/features/workspace/blinker/_utilities.py similarity index 100% rename from features/workspace/blinker/_utilities.py rename to src/pyminer/features/workspace/blinker/_utilities.py diff --git a/features/workspace/blinker/base.py b/src/pyminer/features/workspace/blinker/base.py similarity index 100% rename from features/workspace/blinker/base.py rename to src/pyminer/features/workspace/blinker/base.py diff --git a/features/workspace_old/__init__.py b/src/pyminer/features/workspace/data/__init__.py similarity index 100% rename from features/workspace_old/__init__.py rename to src/pyminer/features/workspace/data/__init__.py diff --git a/features/workspace/data_adapter/__init__.py b/src/pyminer/features/workspace/data_adapter/__init__.py similarity index 100% rename from features/workspace/data_adapter/__init__.py rename to src/pyminer/features/workspace/data_adapter/__init__.py diff --git a/features/workspace/data_adapter/array.py b/src/pyminer/features/workspace/data_adapter/array.py similarity index 100% rename from features/workspace/data_adapter/array.py rename to src/pyminer/features/workspace/data_adapter/array.py diff --git a/features/workspace/data_adapter/base.py b/src/pyminer/features/workspace/data_adapter/base.py similarity index 100% rename from features/workspace/data_adapter/base.py rename to src/pyminer/features/workspace/data_adapter/base.py diff --git a/features/workspace/data_adapter/data_frame.py b/src/pyminer/features/workspace/data_adapter/data_frame.py similarity index 100% rename from features/workspace/data_adapter/data_frame.py rename to src/pyminer/features/workspace/data_adapter/data_frame.py diff --git a/features/workspace/data_adapter/detector.py b/src/pyminer/features/workspace/data_adapter/detector.py similarity index 100% rename from features/workspace/data_adapter/detector.py rename to src/pyminer/features/workspace/data_adapter/detector.py diff --git a/features/workspace/data_adapter/index.rst b/src/pyminer/features/workspace/data_adapter/index.rst similarity index 100% rename from features/workspace/data_adapter/index.rst rename to src/pyminer/features/workspace/data_adapter/index.rst diff --git a/features/workspace/data_adapter/universal.py b/src/pyminer/features/workspace/data_adapter/universal.py similarity index 100% rename from features/workspace/data_adapter/universal.py rename to src/pyminer/features/workspace/data_adapter/universal.py diff --git a/features/workspace/data_manager.py b/src/pyminer/features/workspace/data_manager.py similarity index 100% rename from features/workspace/data_manager.py rename to src/pyminer/features/workspace/data_manager.py diff --git a/features/workspace/index.rst b/src/pyminer/features/workspace/index.rst similarity index 100% rename from features/workspace/index.rst rename to src/pyminer/features/workspace/index.rst diff --git a/features/workspace/signals.py b/src/pyminer/features/workspace/signals.py similarity index 100% rename from features/workspace/signals.py rename to src/pyminer/features/workspace/signals.py diff --git a/features/workspace/signals.rst b/src/pyminer/features/workspace/signals.rst similarity index 100% rename from features/workspace/signals.rst rename to src/pyminer/features/workspace/signals.rst diff --git a/features/workspace_old/datamanager/__init__.py b/src/pyminer/features/workspace_old/__init__.py similarity index 100% rename from features/workspace_old/datamanager/__init__.py rename to src/pyminer/features/workspace_old/__init__.py diff --git a/packages/advanced_drawings_toolbar/__init__.py b/src/pyminer/features/workspace_old/datamanager/__init__.py similarity index 100% rename from packages/advanced_drawings_toolbar/__init__.py rename to src/pyminer/features/workspace_old/datamanager/__init__.py diff --git a/features/workspace_old/datamanager/converter.py b/src/pyminer/features/workspace_old/datamanager/converter.py similarity index 100% rename from features/workspace_old/datamanager/converter.py rename to src/pyminer/features/workspace_old/datamanager/converter.py diff --git a/features/workspace_old/datamanager/datamanager.py b/src/pyminer/features/workspace_old/datamanager/datamanager.py similarity index 100% rename from features/workspace_old/datamanager/datamanager.py rename to src/pyminer/features/workspace_old/datamanager/datamanager.py diff --git a/features/workspace_old/datamanager/dataset.py b/src/pyminer/features/workspace_old/datamanager/dataset.py similarity index 100% rename from features/workspace_old/datamanager/dataset.py rename to src/pyminer/features/workspace_old/datamanager/dataset.py diff --git a/features/workspace_old/datamanager/exceptions.py b/src/pyminer/features/workspace_old/datamanager/exceptions.py similarity index 100% rename from features/workspace_old/datamanager/exceptions.py rename to src/pyminer/features/workspace_old/datamanager/exceptions.py diff --git a/features/workspace_old/datamanager/historyset.py b/src/pyminer/features/workspace_old/datamanager/historyset.py similarity index 100% rename from features/workspace_old/datamanager/historyset.py rename to src/pyminer/features/workspace_old/datamanager/historyset.py diff --git a/features/workspace_old/datamanager/metadataset.py b/src/pyminer/features/workspace_old/datamanager/metadataset.py similarity index 100% rename from features/workspace_old/datamanager/metadataset.py rename to src/pyminer/features/workspace_old/datamanager/metadataset.py diff --git a/features/workspace_old/datamanager/recyclebin.py b/src/pyminer/features/workspace_old/datamanager/recyclebin.py similarity index 100% rename from features/workspace_old/datamanager/recyclebin.py rename to src/pyminer/features/workspace_old/datamanager/recyclebin.py diff --git a/features/workspace_old/datamanager/variable.py b/src/pyminer/features/workspace_old/datamanager/variable.py similarity index 100% rename from features/workspace_old/datamanager/variable.py rename to src/pyminer/features/workspace_old/datamanager/variable.py diff --git a/features/workspace_old/datamanager/varset.py b/src/pyminer/features/workspace_old/datamanager/varset.py similarity index 100% rename from features/workspace_old/datamanager/varset.py rename to src/pyminer/features/workspace_old/datamanager/varset.py diff --git a/features/workspace_old/history.md b/src/pyminer/features/workspace_old/history.md similarity index 100% rename from features/workspace_old/history.md rename to src/pyminer/features/workspace_old/history.md diff --git a/features/workspace_old/index.rst b/src/pyminer/features/workspace_old/index.rst similarity index 100% rename from features/workspace_old/index.rst rename to src/pyminer/features/workspace_old/index.rst diff --git a/languages/en.ts b/src/pyminer/languages/en.ts similarity index 100% rename from languages/en.ts rename to src/pyminer/languages/en.ts diff --git a/languages/en/en.ts b/src/pyminer/languages/en/en.ts similarity index 100% rename from languages/en/en.ts rename to src/pyminer/languages/en/en.ts diff --git a/languages/zh_CN/pmgwidgets_qt_zh_CN.qm b/src/pyminer/languages/zh_CN/pmgwidgets_qt_zh_CN.qm similarity index 100% rename from languages/zh_CN/pmgwidgets_qt_zh_CN.qm rename to src/pyminer/languages/zh_CN/pmgwidgets_qt_zh_CN.qm diff --git a/languages/zh_CN/pmgwidgets_qt_zh_CN.ts b/src/pyminer/languages/zh_CN/pmgwidgets_qt_zh_CN.ts similarity index 100% rename from languages/zh_CN/pmgwidgets_qt_zh_CN.ts rename to src/pyminer/languages/zh_CN/pmgwidgets_qt_zh_CN.ts diff --git a/languages/zh_CN/pmtoolbox_qt_zh_CN.ts b/src/pyminer/languages/zh_CN/pmtoolbox_qt_zh_CN.ts similarity index 100% rename from languages/zh_CN/pmtoolbox_qt_zh_CN.ts rename to src/pyminer/languages/zh_CN/pmtoolbox_qt_zh_CN.ts diff --git a/languages/zh_CN/qt_zh_CN.ts b/src/pyminer/languages/zh_CN/qt_zh_CN.ts similarity index 100% rename from languages/zh_CN/qt_zh_CN.ts rename to src/pyminer/languages/zh_CN/qt_zh_CN.ts diff --git a/languages/zh_CN/zh_CN.qm b/src/pyminer/languages/zh_CN/zh_CN.qm similarity index 100% rename from languages/zh_CN/zh_CN.qm rename to src/pyminer/languages/zh_CN/zh_CN.qm diff --git a/languages/zh_CN/zh_CN.ts b/src/pyminer/languages/zh_CN/zh_CN.ts similarity index 100% rename from languages/zh_CN/zh_CN.ts rename to src/pyminer/languages/zh_CN/zh_CN.ts diff --git a/languages/zh_CN/zh_CN.ts.bak b/src/pyminer/languages/zh_CN/zh_CN.ts.bak similarity index 100% rename from languages/zh_CN/zh_CN.ts.bak rename to src/pyminer/languages/zh_CN/zh_CN.ts.bak diff --git a/languages/zh_TW/zh_TW.ts b/src/pyminer/languages/zh_TW/zh_TW.ts similarity index 100% rename from languages/zh_TW/zh_TW.ts rename to src/pyminer/languages/zh_TW/zh_TW.ts diff --git a/load_modules.py b/src/pyminer/load_modules.py similarity index 100% rename from load_modules.py rename to src/pyminer/load_modules.py diff --git a/packages/__init__.py b/src/pyminer/packages/__init__.py similarity index 100% rename from packages/__init__.py rename to src/pyminer/packages/__init__.py diff --git a/packages/applications_toolbar/apps/flowchart/plugin_nodes/__init__.py b/src/pyminer/packages/advanced_drawings_toolbar/__init__.py similarity index 100% rename from packages/applications_toolbar/apps/flowchart/plugin_nodes/__init__.py rename to src/pyminer/packages/advanced_drawings_toolbar/__init__.py diff --git a/packages/advanced_drawings_toolbar/group_chart.py b/src/pyminer/packages/advanced_drawings_toolbar/group_chart.py similarity index 100% rename from packages/advanced_drawings_toolbar/group_chart.py rename to src/pyminer/packages/advanced_drawings_toolbar/group_chart.py diff --git a/packages/advanced_drawings_toolbar/ipython_console.jpg b/src/pyminer/packages/advanced_drawings_toolbar/ipython_console.jpg similarity index 100% rename from packages/advanced_drawings_toolbar/ipython_console.jpg rename to src/pyminer/packages/advanced_drawings_toolbar/ipython_console.jpg diff --git a/packages/advanced_drawings_toolbar/main.py b/src/pyminer/packages/advanced_drawings_toolbar/main.py similarity index 100% rename from packages/advanced_drawings_toolbar/main.py rename to src/pyminer/packages/advanced_drawings_toolbar/main.py diff --git a/packages/advanced_drawings_toolbar/map_var.json b/src/pyminer/packages/advanced_drawings_toolbar/map_var.json similarity index 100% rename from packages/advanced_drawings_toolbar/map_var.json rename to src/pyminer/packages/advanced_drawings_toolbar/map_var.json diff --git a/packages/advanced_drawings_toolbar/map_var.py b/src/pyminer/packages/advanced_drawings_toolbar/map_var.py similarity index 100% rename from packages/advanced_drawings_toolbar/map_var.py rename to src/pyminer/packages/advanced_drawings_toolbar/map_var.py diff --git a/packages/advanced_drawings_toolbar/package.json b/src/pyminer/packages/advanced_drawings_toolbar/package.json similarity index 100% rename from packages/advanced_drawings_toolbar/package.json rename to src/pyminer/packages/advanced_drawings_toolbar/package.json diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/01-beijing.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/01-beijing.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/01-beijing.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/01-beijing.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/02-shanghai.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/02-shanghai.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/02-shanghai.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/02-shanghai.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/03-tianjin.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/03-tianjin.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/03-tianjin.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/03-tianjin.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/04-chongqing.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/04-chongqing.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/04-chongqing.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/04-chongqing.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/05-heilongjiang.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/05-heilongjiang.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/05-heilongjiang.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/05-heilongjiang.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/06-neimeng.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/06-neimeng.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/06-neimeng.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/06-neimeng.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/07-xinjiang.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/07-xinjiang.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/07-xinjiang.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/07-xinjiang.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/08-jilin.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/08-jilin.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/08-jilin.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/08-jilin.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/09-gansu.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/09-gansu.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/09-gansu.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/09-gansu.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/10-liaoning.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/10-liaoning.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/10-liaoning.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/10-liaoning.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/11-hebei.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/11-hebei.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/11-hebei.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/11-hebei.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/12-shanxi.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/12-shanxi.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/12-shanxi.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/12-shanxi.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/13-shan3xi.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/13-shan3xi.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/13-shan3xi.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/13-shan3xi.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/14-ningxia.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/14-ningxia.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/14-ningxia.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/14-ningxia.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/15-qinghai.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/15-qinghai.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/15-qinghai.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/15-qinghai.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/16-shandong.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/16-shandong.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/16-shandong.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/16-shandong.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/17-henan.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/17-henan.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/17-henan.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/17-henan.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/18-xizang.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/18-xizang.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/18-xizang.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/18-xizang.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/19-jiangsu.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/19-jiangsu.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/19-jiangsu.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/19-jiangsu.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/20-anhui.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/20-anhui.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/20-anhui.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/20-anhui.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/21-sichuan.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/21-sichuan.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/21-sichuan.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/21-sichuan.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/22-hubei.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/22-hubei.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/22-hubei.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/22-hubei.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/23-zhejiang.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/23-zhejiang.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/23-zhejiang.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/23-zhejiang.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/24-jiangxi.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/24-jiangxi.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/24-jiangxi.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/24-jiangxi.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/25-hunan.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/25-hunan.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/25-hunan.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/25-hunan.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/26-guizhou.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/26-guizhou.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/26-guizhou.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/26-guizhou.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/27-yunnan.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/27-yunnan.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/27-yunnan.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/27-yunnan.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/28-fujian.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/28-fujian.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/28-fujian.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/28-fujian.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/29-guangxi.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/29-guangxi.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/29-guangxi.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/29-guangxi.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/30-guangdong.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/30-guangdong.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/30-guangdong.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/30-guangdong.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/31-taiwan.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/31-taiwan.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/31-taiwan.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/31-taiwan.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/32-xianggang.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/32-xianggang.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/32-xianggang.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/32-xianggang.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/33-aomen.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/33-aomen.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/33-aomen.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/33-aomen.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/34-hainan.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/34-hainan.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/34-hainan.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/34-hainan.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/all/39-jiuduan.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/39-jiuduan.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/all/39-jiuduan.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/all/39-jiuduan.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/small/30-guangdong.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/small/30-guangdong.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/small/30-guangdong.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/small/30-guangdong.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/small/31-taiwan.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/small/31-taiwan.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/small/31-taiwan.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/small/31-taiwan.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/small/32-xianggang.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/small/32-xianggang.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/small/32-xianggang.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/small/32-xianggang.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/small/33-aomen.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/small/33-aomen.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/small/33-aomen.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/small/33-aomen.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/small/34-hainan.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/small/34-hainan.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/small/34-hainan.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/small/34-hainan.npy diff --git a/packages/advanced_drawings_toolbar/pmmap/china/small/39-jiuduan.npy b/src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/small/39-jiuduan.npy similarity index 100% rename from packages/advanced_drawings_toolbar/pmmap/china/small/39-jiuduan.npy rename to src/pyminer/packages/advanced_drawings_toolbar/pmmap/china/small/39-jiuduan.npy diff --git a/packages/advanced_drawings_toolbar/radar_chart.py b/src/pyminer/packages/advanced_drawings_toolbar/radar_chart.py similarity index 100% rename from packages/advanced_drawings_toolbar/radar_chart.py rename to src/pyminer/packages/advanced_drawings_toolbar/radar_chart.py diff --git a/packages/advanced_drawings_toolbar/source/down.svg b/src/pyminer/packages/advanced_drawings_toolbar/source/down.svg similarity index 100% rename from packages/advanced_drawings_toolbar/source/down.svg rename to src/pyminer/packages/advanced_drawings_toolbar/source/down.svg diff --git a/packages/advanced_drawings_toolbar/source/plot.svg b/src/pyminer/packages/advanced_drawings_toolbar/source/plot.svg similarity index 100% rename from packages/advanced_drawings_toolbar/source/plot.svg rename to src/pyminer/packages/advanced_drawings_toolbar/source/plot.svg diff --git "a/packages/advanced_drawings_toolbar/source/\345\234\260\345\233\276.png" "b/src/pyminer/packages/advanced_drawings_toolbar/source/\345\234\260\345\233\276.png" similarity index 100% rename from "packages/advanced_drawings_toolbar/source/\345\234\260\345\233\276.png" rename to "src/pyminer/packages/advanced_drawings_toolbar/source/\345\234\260\345\233\276.png" diff --git "a/packages/advanced_drawings_toolbar/source/\346\212\230\347\272\277\345\233\276.png" "b/src/pyminer/packages/advanced_drawings_toolbar/source/\346\212\230\347\272\277\345\233\276.png" similarity index 100% rename from "packages/advanced_drawings_toolbar/source/\346\212\230\347\272\277\345\233\276.png" rename to "src/pyminer/packages/advanced_drawings_toolbar/source/\346\212\230\347\272\277\345\233\276.png" diff --git "a/packages/advanced_drawings_toolbar/source/\346\225\243\347\202\271\345\233\276.png" "b/src/pyminer/packages/advanced_drawings_toolbar/source/\346\225\243\347\202\271\345\233\276.png" similarity index 100% rename from "packages/advanced_drawings_toolbar/source/\346\225\243\347\202\271\345\233\276.png" rename to "src/pyminer/packages/advanced_drawings_toolbar/source/\346\225\243\347\202\271\345\233\276.png" diff --git "a/packages/advanced_drawings_toolbar/source/\346\235\241\345\275\242\345\233\276.png" "b/src/pyminer/packages/advanced_drawings_toolbar/source/\346\235\241\345\275\242\345\233\276.png" similarity index 100% rename from "packages/advanced_drawings_toolbar/source/\346\235\241\345\275\242\345\233\276.png" rename to "src/pyminer/packages/advanced_drawings_toolbar/source/\346\235\241\345\275\242\345\233\276.png" diff --git "a/packages/advanced_drawings_toolbar/source/\346\237\261\345\275\242\345\233\276.png" "b/src/pyminer/packages/advanced_drawings_toolbar/source/\346\237\261\345\275\242\345\233\276.png" similarity index 100% rename from "packages/advanced_drawings_toolbar/source/\346\237\261\345\275\242\345\233\276.png" rename to "src/pyminer/packages/advanced_drawings_toolbar/source/\346\237\261\345\275\242\345\233\276.png" diff --git "a/packages/advanced_drawings_toolbar/source/\346\260\224\346\263\241\345\233\276.png" "b/src/pyminer/packages/advanced_drawings_toolbar/source/\346\260\224\346\263\241\345\233\276.png" similarity index 100% rename from "packages/advanced_drawings_toolbar/source/\346\260\224\346\263\241\345\233\276.png" rename to "src/pyminer/packages/advanced_drawings_toolbar/source/\346\260\224\346\263\241\345\233\276.png" diff --git "a/packages/advanced_drawings_toolbar/source/\347\203\255\345\212\233\345\233\276.png" "b/src/pyminer/packages/advanced_drawings_toolbar/source/\347\203\255\345\212\233\345\233\276.png" similarity index 100% rename from "packages/advanced_drawings_toolbar/source/\347\203\255\345\212\233\345\233\276.png" rename to "src/pyminer/packages/advanced_drawings_toolbar/source/\347\203\255\345\212\233\345\233\276.png" diff --git "a/packages/advanced_drawings_toolbar/source/\347\233\264\346\226\271\345\233\276.png" "b/src/pyminer/packages/advanced_drawings_toolbar/source/\347\233\264\346\226\271\345\233\276.png" similarity index 100% rename from "packages/advanced_drawings_toolbar/source/\347\233\264\346\226\271\345\233\276.png" rename to "src/pyminer/packages/advanced_drawings_toolbar/source/\347\233\264\346\226\271\345\233\276.png" diff --git "a/packages/advanced_drawings_toolbar/source/\347\256\261\347\272\277\345\233\276.png" "b/src/pyminer/packages/advanced_drawings_toolbar/source/\347\256\261\347\272\277\345\233\276.png" similarity index 100% rename from "packages/advanced_drawings_toolbar/source/\347\256\261\347\272\277\345\233\276.png" rename to "src/pyminer/packages/advanced_drawings_toolbar/source/\347\256\261\347\272\277\345\233\276.png" diff --git "a/packages/advanced_drawings_toolbar/source/\347\273\204\345\220\210\345\233\276.png" "b/src/pyminer/packages/advanced_drawings_toolbar/source/\347\273\204\345\220\210\345\233\276.png" similarity index 100% rename from "packages/advanced_drawings_toolbar/source/\347\273\204\345\220\210\345\233\276.png" rename to "src/pyminer/packages/advanced_drawings_toolbar/source/\347\273\204\345\220\210\345\233\276.png" diff --git "a/packages/advanced_drawings_toolbar/source/\351\233\267\350\276\276\345\233\276.png" "b/src/pyminer/packages/advanced_drawings_toolbar/source/\351\233\267\350\276\276\345\233\276.png" similarity index 100% rename from "packages/advanced_drawings_toolbar/source/\351\233\267\350\276\276\345\233\276.png" rename to "src/pyminer/packages/advanced_drawings_toolbar/source/\351\233\267\350\276\276\345\233\276.png" diff --git "a/packages/advanced_drawings_toolbar/source/\351\235\242\347\247\257\345\233\276.png" "b/src/pyminer/packages/advanced_drawings_toolbar/source/\351\235\242\347\247\257\345\233\276.png" similarity index 100% rename from "packages/advanced_drawings_toolbar/source/\351\235\242\347\247\257\345\233\276.png" rename to "src/pyminer/packages/advanced_drawings_toolbar/source/\351\235\242\347\247\257\345\233\276.png" diff --git "a/packages/advanced_drawings_toolbar/source/\351\245\274\345\233\276.png" "b/src/pyminer/packages/advanced_drawings_toolbar/source/\351\245\274\345\233\276.png" similarity index 100% rename from "packages/advanced_drawings_toolbar/source/\351\245\274\345\233\276.png" rename to "src/pyminer/packages/advanced_drawings_toolbar/source/\351\245\274\345\233\276.png" diff --git a/packages/advanced_drawings_toolbar/translations/qt_zh_CN.qm b/src/pyminer/packages/advanced_drawings_toolbar/translations/qt_zh_CN.qm similarity index 100% rename from packages/advanced_drawings_toolbar/translations/qt_zh_CN.qm rename to src/pyminer/packages/advanced_drawings_toolbar/translations/qt_zh_CN.qm diff --git a/packages/advanced_drawings_toolbar/translations/qt_zh_CN.ts b/src/pyminer/packages/advanced_drawings_toolbar/translations/qt_zh_CN.ts similarity index 100% rename from packages/advanced_drawings_toolbar/translations/qt_zh_CN.ts rename to src/pyminer/packages/advanced_drawings_toolbar/translations/qt_zh_CN.ts diff --git a/packages/applications_toolbar/README.md b/src/pyminer/packages/applications_toolbar/README.md similarity index 100% rename from packages/applications_toolbar/README.md rename to src/pyminer/packages/applications_toolbar/README.md diff --git a/packages/applications_toolbar/applications_toolbar.py b/src/pyminer/packages/applications_toolbar/applications_toolbar.py similarity index 100% rename from packages/applications_toolbar/applications_toolbar.py rename to src/pyminer/packages/applications_toolbar/applications_toolbar.py diff --git a/packages/applications_toolbar/apps/cftool/GUI_QT.py b/src/pyminer/packages/applications_toolbar/apps/cftool/GUI_QT.py similarity index 100% rename from packages/applications_toolbar/apps/cftool/GUI_QT.py rename to src/pyminer/packages/applications_toolbar/apps/cftool/GUI_QT.py diff --git a/packages/applications_toolbar/apps/cftool/README.md b/src/pyminer/packages/applications_toolbar/apps/cftool/README.md similarity index 100% rename from packages/applications_toolbar/apps/cftool/README.md rename to src/pyminer/packages/applications_toolbar/apps/cftool/README.md diff --git a/packages/applications_toolbar/apps/cftool/algorithm.py b/src/pyminer/packages/applications_toolbar/apps/cftool/algorithm.py similarity index 100% rename from packages/applications_toolbar/apps/cftool/algorithm.py rename to src/pyminer/packages/applications_toolbar/apps/cftool/algorithm.py diff --git a/packages/applications_toolbar/apps/cftool/main.py b/src/pyminer/packages/applications_toolbar/apps/cftool/main.py similarity index 100% rename from packages/applications_toolbar/apps/cftool/main.py rename to src/pyminer/packages/applications_toolbar/apps/cftool/main.py diff --git a/packages/applications_toolbar/apps/cftool/package.json b/src/pyminer/packages/applications_toolbar/apps/cftool/package.json similarity index 100% rename from packages/applications_toolbar/apps/cftool/package.json rename to src/pyminer/packages/applications_toolbar/apps/cftool/package.json diff --git a/packages/applications_toolbar/apps/cftool/python.jpg b/src/pyminer/packages/applications_toolbar/apps/cftool/python.jpg similarity index 100% rename from packages/applications_toolbar/apps/cftool/python.jpg rename to src/pyminer/packages/applications_toolbar/apps/cftool/python.jpg diff --git a/packages/applications_toolbar/apps/cftool/regexvalidifyer.py b/src/pyminer/packages/applications_toolbar/apps/cftool/regexvalidifyer.py similarity index 100% rename from packages/applications_toolbar/apps/cftool/regexvalidifyer.py rename to src/pyminer/packages/applications_toolbar/apps/cftool/regexvalidifyer.py diff --git a/packages/applications_toolbar/apps/cftool/src/cftool.png b/src/pyminer/packages/applications_toolbar/apps/cftool/src/cftool.png similarity index 100% rename from packages/applications_toolbar/apps/cftool/src/cftool.png rename to src/pyminer/packages/applications_toolbar/apps/cftool/src/cftool.png diff --git "a/packages/applications_toolbar/apps/cftool/src/\346\233\262\347\272\277\346\213\237\345\220\210.png" "b/src/pyminer/packages/applications_toolbar/apps/cftool/src/\346\233\262\347\272\277\346\213\237\345\220\210.png" similarity index 100% rename from "packages/applications_toolbar/apps/cftool/src/\346\233\262\347\272\277\346\213\237\345\220\210.png" rename to "src/pyminer/packages/applications_toolbar/apps/cftool/src/\346\233\262\347\272\277\346\213\237\345\220\210.png" diff --git a/packages/applications_toolbar/apps/cftool/test1.py b/src/pyminer/packages/applications_toolbar/apps/cftool/test1.py similarity index 100% rename from packages/applications_toolbar/apps/cftool/test1.py rename to src/pyminer/packages/applications_toolbar/apps/cftool/test1.py diff --git a/packages/applications_toolbar/apps/cftool/test_file.py b/src/pyminer/packages/applications_toolbar/apps/cftool/test_file.py similarity index 100% rename from packages/applications_toolbar/apps/cftool/test_file.py rename to src/pyminer/packages/applications_toolbar/apps/cftool/test_file.py diff --git a/packages/applications_toolbar/apps/demo_app/README.md b/src/pyminer/packages/applications_toolbar/apps/demo_app/README.md similarity index 100% rename from packages/applications_toolbar/apps/demo_app/README.md rename to src/pyminer/packages/applications_toolbar/apps/demo_app/README.md diff --git a/packages/applications_toolbar/apps/demo_app/default.png b/src/pyminer/packages/applications_toolbar/apps/demo_app/default.png similarity index 100% rename from packages/applications_toolbar/apps/demo_app/default.png rename to src/pyminer/packages/applications_toolbar/apps/demo_app/default.png diff --git a/packages/applications_toolbar/apps/demo_app/demo_app.py b/src/pyminer/packages/applications_toolbar/apps/demo_app/demo_app.py similarity index 100% rename from packages/applications_toolbar/apps/demo_app/demo_app.py rename to src/pyminer/packages/applications_toolbar/apps/demo_app/demo_app.py diff --git a/packages/applications_toolbar/apps/demo_app/main.py b/src/pyminer/packages/applications_toolbar/apps/demo_app/main.py similarity index 100% rename from packages/applications_toolbar/apps/demo_app/main.py rename to src/pyminer/packages/applications_toolbar/apps/demo_app/main.py diff --git a/packages/applications_toolbar/apps/demo_app/package.json b/src/pyminer/packages/applications_toolbar/apps/demo_app/package.json similarity index 100% rename from packages/applications_toolbar/apps/demo_app/package.json rename to src/pyminer/packages/applications_toolbar/apps/demo_app/package.json diff --git a/packages/applications_toolbar/apps/demo_app/settings.json b/src/pyminer/packages/applications_toolbar/apps/demo_app/settings.json similarity index 100% rename from packages/applications_toolbar/apps/demo_app/settings.json rename to src/pyminer/packages/applications_toolbar/apps/demo_app/settings.json diff --git a/packages/applications_toolbar/apps/flowchart/README.md b/src/pyminer/packages/applications_toolbar/apps/flowchart/README.md similarity index 100% rename from packages/applications_toolbar/apps/flowchart/README.md rename to src/pyminer/packages/applications_toolbar/apps/flowchart/README.md diff --git a/packages/applications_toolbar/apps/flowchart/examples/drop_duplicated.pmfc b/src/pyminer/packages/applications_toolbar/apps/flowchart/examples/drop_duplicated.pmfc similarity index 100% rename from packages/applications_toolbar/apps/flowchart/examples/drop_duplicated.pmfc rename to src/pyminer/packages/applications_toolbar/apps/flowchart/examples/drop_duplicated.pmfc diff --git a/packages/applications_toolbar/apps/flowchart/examples/read_all_csv_files.pmfc b/src/pyminer/packages/applications_toolbar/apps/flowchart/examples/read_all_csv_files.pmfc similarity index 100% rename from packages/applications_toolbar/apps/flowchart/examples/read_all_csv_files.pmfc rename to src/pyminer/packages/applications_toolbar/apps/flowchart/examples/read_all_csv_files.pmfc diff --git a/packages/applications_toolbar/apps/flowchart/flowchart.png b/src/pyminer/packages/applications_toolbar/apps/flowchart/flowchart.png similarity index 100% rename from packages/applications_toolbar/apps/flowchart/flowchart.png rename to src/pyminer/packages/applications_toolbar/apps/flowchart/flowchart.png diff --git a/packages/applications_toolbar/apps/flowchart/main.py b/src/pyminer/packages/applications_toolbar/apps/flowchart/main.py similarity index 100% rename from packages/applications_toolbar/apps/flowchart/main.py rename to src/pyminer/packages/applications_toolbar/apps/flowchart/main.py diff --git a/packages/applications_toolbar/apps/flowchart/package.json b/src/pyminer/packages/applications_toolbar/apps/flowchart/package.json similarity index 100% rename from packages/applications_toolbar/apps/flowchart/package.json rename to src/pyminer/packages/applications_toolbar/apps/flowchart/package.json diff --git a/packages/document_server/__init__.py b/src/pyminer/packages/applications_toolbar/apps/flowchart/plugin_nodes/__init__.py similarity index 100% rename from packages/document_server/__init__.py rename to src/pyminer/packages/applications_toolbar/apps/flowchart/plugin_nodes/__init__.py diff --git a/packages/applications_toolbar/apps/flowchart/plugin_nodes/nodes.py b/src/pyminer/packages/applications_toolbar/apps/flowchart/plugin_nodes/nodes.py similarity index 100% rename from packages/applications_toolbar/apps/flowchart/plugin_nodes/nodes.py rename to src/pyminer/packages/applications_toolbar/apps/flowchart/plugin_nodes/nodes.py diff --git a/packages/applications_toolbar/apps/flowchart/python.jpg b/src/pyminer/packages/applications_toolbar/apps/flowchart/python.jpg similarity index 100% rename from packages/applications_toolbar/apps/flowchart/python.jpg rename to src/pyminer/packages/applications_toolbar/apps/flowchart/python.jpg diff --git a/packages/applications_toolbar/apps/flowchart/resources/flowchartwindow.jpg b/src/pyminer/packages/applications_toolbar/apps/flowchart/resources/flowchartwindow.jpg similarity index 100% rename from packages/applications_toolbar/apps/flowchart/resources/flowchartwindow.jpg rename to src/pyminer/packages/applications_toolbar/apps/flowchart/resources/flowchartwindow.jpg diff --git a/packages/applications_toolbar/apps/flowchart/resources/nodeports.jpg b/src/pyminer/packages/applications_toolbar/apps/flowchart/resources/nodeports.jpg similarity index 100% rename from packages/applications_toolbar/apps/flowchart/resources/nodeports.jpg rename to src/pyminer/packages/applications_toolbar/apps/flowchart/resources/nodeports.jpg diff --git a/packages/applications_toolbar/apps/flowchart/test_files/test_drop_duplicated.csv b/src/pyminer/packages/applications_toolbar/apps/flowchart/test_files/test_drop_duplicated.csv similarity index 100% rename from packages/applications_toolbar/apps/flowchart/test_files/test_drop_duplicated.csv rename to src/pyminer/packages/applications_toolbar/apps/flowchart/test_files/test_drop_duplicated.csv diff --git a/packages/applications_toolbar/apps/ligralpy/.gitignore b/src/pyminer/packages/applications_toolbar/apps/ligralpy/.gitignore similarity index 100% rename from packages/applications_toolbar/apps/ligralpy/.gitignore rename to src/pyminer/packages/applications_toolbar/apps/ligralpy/.gitignore diff --git a/packages/applications_toolbar/apps/ligralpy/Data.csv b/src/pyminer/packages/applications_toolbar/apps/ligralpy/Data.csv similarity index 100% rename from packages/applications_toolbar/apps/ligralpy/Data.csv rename to src/pyminer/packages/applications_toolbar/apps/ligralpy/Data.csv diff --git a/packages/applications_toolbar/apps/ligralpy/README.md b/src/pyminer/packages/applications_toolbar/apps/ligralpy/README.md similarity index 100% rename from packages/applications_toolbar/apps/ligralpy/README.md rename to src/pyminer/packages/applications_toolbar/apps/ligralpy/README.md diff --git a/packages/applications_toolbar/apps/ligralpy/chart_server.py b/src/pyminer/packages/applications_toolbar/apps/ligralpy/chart_server.py similarity index 100% rename from packages/applications_toolbar/apps/ligralpy/chart_server.py rename to src/pyminer/packages/applications_toolbar/apps/ligralpy/chart_server.py diff --git a/packages/applications_toolbar/apps/ligralpy/examples/flowchart_stat_demo.json b/src/pyminer/packages/applications_toolbar/apps/ligralpy/examples/flowchart_stat_demo.json similarity index 100% rename from packages/applications_toolbar/apps/ligralpy/examples/flowchart_stat_demo.json rename to src/pyminer/packages/applications_toolbar/apps/ligralpy/examples/flowchart_stat_demo.json diff --git a/packages/applications_toolbar/apps/ligralpy/examples/second_ordered.lig.json b/src/pyminer/packages/applications_toolbar/apps/ligralpy/examples/second_ordered.lig.json similarity index 100% rename from packages/applications_toolbar/apps/ligralpy/examples/second_ordered.lig.json rename to src/pyminer/packages/applications_toolbar/apps/ligralpy/examples/second_ordered.lig.json diff --git a/packages/applications_toolbar/apps/ligralpy/flowchart.png b/src/pyminer/packages/applications_toolbar/apps/ligralpy/flowchart.png similarity index 100% rename from packages/applications_toolbar/apps/ligralpy/flowchart.png rename to src/pyminer/packages/applications_toolbar/apps/ligralpy/flowchart.png diff --git a/packages/applications_toolbar/apps/ligralpy/img.png b/src/pyminer/packages/applications_toolbar/apps/ligralpy/img.png similarity index 100% rename from packages/applications_toolbar/apps/ligralpy/img.png rename to src/pyminer/packages/applications_toolbar/apps/ligralpy/img.png diff --git a/packages/applications_toolbar/apps/ligralpy/main.py b/src/pyminer/packages/applications_toolbar/apps/ligralpy/main.py similarity index 100% rename from packages/applications_toolbar/apps/ligralpy/main.py rename to src/pyminer/packages/applications_toolbar/apps/ligralpy/main.py diff --git a/packages/applications_toolbar/apps/ligralpy/nodes/__init__.py b/src/pyminer/packages/applications_toolbar/apps/ligralpy/nodes/__init__.py similarity index 100% rename from packages/applications_toolbar/apps/ligralpy/nodes/__init__.py rename to src/pyminer/packages/applications_toolbar/apps/ligralpy/nodes/__init__.py diff --git a/packages/applications_toolbar/apps/ligralpy/nodes/nodes.py b/src/pyminer/packages/applications_toolbar/apps/ligralpy/nodes/nodes.py similarity index 100% rename from packages/applications_toolbar/apps/ligralpy/nodes/nodes.py rename to src/pyminer/packages/applications_toolbar/apps/ligralpy/nodes/nodes.py diff --git a/packages/applications_toolbar/apps/ligralpy/nodes/simulation.py b/src/pyminer/packages/applications_toolbar/apps/ligralpy/nodes/simulation.py similarity index 100% rename from packages/applications_toolbar/apps/ligralpy/nodes/simulation.py rename to src/pyminer/packages/applications_toolbar/apps/ligralpy/nodes/simulation.py diff --git a/packages/applications_toolbar/apps/ligralpy/nodes/tools/gen_classes.py b/src/pyminer/packages/applications_toolbar/apps/ligralpy/nodes/tools/gen_classes.py similarity index 100% rename from packages/applications_toolbar/apps/ligralpy/nodes/tools/gen_classes.py rename to src/pyminer/packages/applications_toolbar/apps/ligralpy/nodes/tools/gen_classes.py diff --git a/packages/applications_toolbar/apps/ligralpy/package.json b/src/pyminer/packages/applications_toolbar/apps/ligralpy/package.json similarity index 100% rename from packages/applications_toolbar/apps/ligralpy/package.json rename to src/pyminer/packages/applications_toolbar/apps/ligralpy/package.json diff --git a/packages/applications_toolbar/apps/ligralpy/python.jpg b/src/pyminer/packages/applications_toolbar/apps/ligralpy/python.jpg similarity index 100% rename from packages/applications_toolbar/apps/ligralpy/python.jpg rename to src/pyminer/packages/applications_toolbar/apps/ligralpy/python.jpg diff --git a/packages/applications_toolbar/apps/ligralpy/resources/flowchartwindow.jpg b/src/pyminer/packages/applications_toolbar/apps/ligralpy/resources/flowchartwindow.jpg similarity index 100% rename from packages/applications_toolbar/apps/ligralpy/resources/flowchartwindow.jpg rename to src/pyminer/packages/applications_toolbar/apps/ligralpy/resources/flowchartwindow.jpg diff --git a/packages/applications_toolbar/apps/ligralpy/resources/nodeports.jpg b/src/pyminer/packages/applications_toolbar/apps/ligralpy/resources/nodeports.jpg similarity index 100% rename from packages/applications_toolbar/apps/ligralpy/resources/nodeports.jpg rename to src/pyminer/packages/applications_toolbar/apps/ligralpy/resources/nodeports.jpg diff --git a/packages/applications_toolbar/dev_tools.py b/src/pyminer/packages/applications_toolbar/dev_tools.py similarity index 100% rename from packages/applications_toolbar/dev_tools.py rename to src/pyminer/packages/applications_toolbar/dev_tools.py diff --git a/packages/applications_toolbar/ipyinterface.py b/src/pyminer/packages/applications_toolbar/ipyinterface.py similarity index 100% rename from packages/applications_toolbar/ipyinterface.py rename to src/pyminer/packages/applications_toolbar/ipyinterface.py diff --git a/packages/applications_toolbar/ipython_console.jpg b/src/pyminer/packages/applications_toolbar/ipython_console.jpg similarity index 100% rename from packages/applications_toolbar/ipython_console.jpg rename to src/pyminer/packages/applications_toolbar/ipython_console.jpg diff --git a/packages/applications_toolbar/main.py b/src/pyminer/packages/applications_toolbar/main.py similarity index 100% rename from packages/applications_toolbar/main.py rename to src/pyminer/packages/applications_toolbar/main.py diff --git a/packages/applications_toolbar/manage_apps.py b/src/pyminer/packages/applications_toolbar/manage_apps.py similarity index 100% rename from packages/applications_toolbar/manage_apps.py rename to src/pyminer/packages/applications_toolbar/manage_apps.py diff --git a/packages/applications_toolbar/package.json b/src/pyminer/packages/applications_toolbar/package.json similarity index 100% rename from packages/applications_toolbar/package.json rename to src/pyminer/packages/applications_toolbar/package.json diff --git a/packages/applications_toolbar/process_monitor.py b/src/pyminer/packages/applications_toolbar/process_monitor.py similarity index 100% rename from packages/applications_toolbar/process_monitor.py rename to src/pyminer/packages/applications_toolbar/process_monitor.py diff --git a/packages/applications_toolbar/settings_apps.json b/src/pyminer/packages/applications_toolbar/settings_apps.json similarity index 100% rename from packages/applications_toolbar/settings_apps.json rename to src/pyminer/packages/applications_toolbar/settings_apps.json diff --git a/packages/applications_toolbar/source/app_main.py b/src/pyminer/packages/applications_toolbar/source/app_main.py similarity index 100% rename from packages/applications_toolbar/source/app_main.py rename to src/pyminer/packages/applications_toolbar/source/app_main.py diff --git a/packages/applications_toolbar/source/appstore.svg b/src/pyminer/packages/applications_toolbar/source/appstore.svg similarity index 100% rename from packages/applications_toolbar/source/appstore.svg rename to src/pyminer/packages/applications_toolbar/source/appstore.svg diff --git a/packages/applications_toolbar/source/background.png b/src/pyminer/packages/applications_toolbar/source/background.png similarity index 100% rename from packages/applications_toolbar/source/background.png rename to src/pyminer/packages/applications_toolbar/source/background.png diff --git a/packages/applications_toolbar/source/default.png b/src/pyminer/packages/applications_toolbar/source/default.png similarity index 100% rename from packages/applications_toolbar/source/default.png rename to src/pyminer/packages/applications_toolbar/source/default.png diff --git a/packages/applications_toolbar/source/down.svg b/src/pyminer/packages/applications_toolbar/source/down.svg similarity index 100% rename from packages/applications_toolbar/source/down.svg rename to src/pyminer/packages/applications_toolbar/source/down.svg diff --git a/packages/applications_toolbar/source/install.svg b/src/pyminer/packages/applications_toolbar/source/install.svg similarity index 100% rename from packages/applications_toolbar/source/install.svg rename to src/pyminer/packages/applications_toolbar/source/install.svg diff --git a/packages/applications_toolbar/source/lightening.png b/src/pyminer/packages/applications_toolbar/source/lightening.png similarity index 100% rename from packages/applications_toolbar/source/lightening.png rename to src/pyminer/packages/applications_toolbar/source/lightening.png diff --git a/packages/applications_toolbar/source/main.py b/src/pyminer/packages/applications_toolbar/source/main.py similarity index 100% rename from packages/applications_toolbar/source/main.py rename to src/pyminer/packages/applications_toolbar/source/main.py diff --git a/packages/applications_toolbar/source/package.svg b/src/pyminer/packages/applications_toolbar/source/package.svg similarity index 100% rename from packages/applications_toolbar/source/package.svg rename to src/pyminer/packages/applications_toolbar/source/package.svg diff --git a/packages/applications_toolbar/source/qt-logo.png b/src/pyminer/packages/applications_toolbar/source/qt-logo.png similarity index 100% rename from packages/applications_toolbar/source/qt-logo.png rename to src/pyminer/packages/applications_toolbar/source/qt-logo.png diff --git a/packages/applications_toolbar/source/run.png b/src/pyminer/packages/applications_toolbar/source/run.png similarity index 100% rename from packages/applications_toolbar/source/run.png rename to src/pyminer/packages/applications_toolbar/source/run.png diff --git a/packages/applications_toolbar/source/run.py b/src/pyminer/packages/applications_toolbar/source/run.py similarity index 100% rename from packages/applications_toolbar/source/run.py rename to src/pyminer/packages/applications_toolbar/source/run.py diff --git a/packages/applications_toolbar/source/settings.png b/src/pyminer/packages/applications_toolbar/source/settings.png similarity index 100% rename from packages/applications_toolbar/source/settings.png rename to src/pyminer/packages/applications_toolbar/source/settings.png diff --git a/packages/applications_toolbar/translations/qt_zh_CN.qm b/src/pyminer/packages/applications_toolbar/translations/qt_zh_CN.qm similarity index 100% rename from packages/applications_toolbar/translations/qt_zh_CN.qm rename to src/pyminer/packages/applications_toolbar/translations/qt_zh_CN.qm diff --git a/packages/applications_toolbar/translations/qt_zh_CN.ts b/src/pyminer/packages/applications_toolbar/translations/qt_zh_CN.ts similarity index 100% rename from packages/applications_toolbar/translations/qt_zh_CN.ts rename to src/pyminer/packages/applications_toolbar/translations/qt_zh_CN.ts diff --git a/packages/applications_toolbar/ui/app_designer.py b/src/pyminer/packages/applications_toolbar/ui/app_designer.py similarity index 100% rename from packages/applications_toolbar/ui/app_designer.py rename to src/pyminer/packages/applications_toolbar/ui/app_designer.py diff --git a/packages/applications_toolbar/ui/app_designer.ui b/src/pyminer/packages/applications_toolbar/ui/app_designer.ui similarity index 100% rename from packages/applications_toolbar/ui/app_designer.ui rename to src/pyminer/packages/applications_toolbar/ui/app_designer.ui diff --git a/packages/code_editor/README.md b/src/pyminer/packages/code_editor/README.md similarity index 100% rename from packages/code_editor/README.md rename to src/pyminer/packages/code_editor/README.md diff --git a/packages/drawings_toolbar/__init__.py b/src/pyminer/packages/code_editor/__init__.py similarity index 100% rename from packages/drawings_toolbar/__init__.py rename to src/pyminer/packages/code_editor/__init__.py diff --git a/packages/code_editor/codeeditor/config/.flake8 b/src/pyminer/packages/code_editor/assets/.flake8 similarity index 100% rename from packages/code_editor/codeeditor/config/.flake8 rename to src/pyminer/packages/code_editor/assets/.flake8 diff --git a/packages/code_editor/codeeditor/config/.style.yapf b/src/pyminer/packages/code_editor/assets/.style.yapf similarity index 100% rename from packages/code_editor/codeeditor/config/.style.yapf rename to src/pyminer/packages/code_editor/assets/.style.yapf diff --git a/packages/code_editor/codeeditor/config/.style.yapf.zh b/src/pyminer/packages/code_editor/assets/.style.yapf.zh similarity index 100% rename from packages/code_editor/codeeditor/config/.style.yapf.zh rename to src/pyminer/packages/code_editor/assets/.style.yapf.zh diff --git a/packages/code_editor/codeeditor/flake8_trans.json b/src/pyminer/packages/code_editor/assets/flake8_trans.json similarity index 100% rename from packages/code_editor/codeeditor/flake8_trans.json rename to src/pyminer/packages/code_editor/assets/flake8_trans.json diff --git a/packages/code_editor/codeeditor/simpleeditor/lexer b/src/pyminer/packages/code_editor/assets/icons/autocomp/class.png similarity index 100% rename from packages/code_editor/codeeditor/simpleeditor/lexer rename to src/pyminer/packages/code_editor/assets/icons/autocomp/class.png diff --git a/packages/dataio/settings.json b/src/pyminer/packages/code_editor/assets/icons/autocomp/function.png similarity index 100% rename from packages/dataio/settings.json rename to src/pyminer/packages/code_editor/assets/icons/autocomp/function.png diff --git a/packages/embedded_browser/__init__.py b/src/pyminer/packages/code_editor/assets/icons/autocomp/instance.png similarity index 100% rename from packages/embedded_browser/__init__.py rename to src/pyminer/packages/code_editor/assets/icons/autocomp/instance.png diff --git a/packages/extension_demo/__init__.py b/src/pyminer/packages/code_editor/assets/icons/autocomp/keyword.png similarity index 100% rename from packages/extension_demo/__init__.py rename to src/pyminer/packages/code_editor/assets/icons/autocomp/keyword.png diff --git a/packages/file_tree/__init__.py b/src/pyminer/packages/code_editor/assets/icons/autocomp/module.png similarity index 100% rename from packages/file_tree/__init__.py rename to src/pyminer/packages/code_editor/assets/icons/autocomp/module.png diff --git a/packages/graph_agg/__init__.py b/src/pyminer/packages/code_editor/assets/icons/autocomp/param.png similarity index 100% rename from packages/graph_agg/__init__.py rename to src/pyminer/packages/code_editor/assets/icons/autocomp/param.png diff --git a/packages/ipython_console/__init__.py b/src/pyminer/packages/code_editor/assets/icons/autocomp/path.png similarity index 100% rename from packages/ipython_console/__init__.py rename to src/pyminer/packages/code_editor/assets/icons/autocomp/path.png diff --git a/packages/jupyter_notebook_support/__init__.py b/src/pyminer/packages/code_editor/assets/icons/autocomp/property.png similarity index 100% rename from packages/jupyter_notebook_support/__init__.py rename to src/pyminer/packages/code_editor/assets/icons/autocomp/property.png diff --git a/packages/pm_calc/__init__.py b/src/pyminer/packages/code_editor/assets/icons/autocomp/statement.png similarity index 100% rename from packages/pm_calc/__init__.py rename to src/pyminer/packages/code_editor/assets/icons/autocomp/statement.png diff --git a/packages/code_editor/codeeditor/qtpyeditor/icons/breakpoint.svg b/src/pyminer/packages/code_editor/assets/icons/breakpoint.svg similarity index 100% rename from packages/code_editor/codeeditor/qtpyeditor/icons/breakpoint.svg rename to src/pyminer/packages/code_editor/assets/icons/breakpoint.svg diff --git a/packages/code_editor/codeeditor/qtpyeditor/icons/copy.svg b/src/pyminer/packages/code_editor/assets/icons/copy.svg similarity index 100% rename from packages/code_editor/codeeditor/qtpyeditor/icons/copy.svg rename to src/pyminer/packages/code_editor/assets/icons/copy.svg diff --git a/packages/code_editor/codeeditor/qtpyeditor/icons/debug.svg b/src/pyminer/packages/code_editor/assets/icons/debug.svg similarity index 100% rename from packages/code_editor/codeeditor/qtpyeditor/icons/debug.svg rename to src/pyminer/packages/code_editor/assets/icons/debug.svg diff --git a/packages/code_editor/codeeditor/qtpyeditor/icons/format.svg b/src/pyminer/packages/code_editor/assets/icons/format.svg similarity index 100% rename from packages/code_editor/codeeditor/qtpyeditor/icons/format.svg rename to src/pyminer/packages/code_editor/assets/icons/format.svg diff --git a/packages/code_editor/codeeditor/qtpyeditor/icons/help.svg b/src/pyminer/packages/code_editor/assets/icons/help.svg similarity index 100% rename from packages/code_editor/codeeditor/qtpyeditor/icons/help.svg rename to src/pyminer/packages/code_editor/assets/icons/help.svg diff --git a/packages/code_editor/source/lightening.png b/src/pyminer/packages/code_editor/assets/icons/lightening.png similarity index 100% rename from packages/code_editor/source/lightening.png rename to src/pyminer/packages/code_editor/assets/icons/lightening.png diff --git a/packages/code_editor/codeeditor/qtpyeditor/icons/python.svg b/src/pyminer/packages/code_editor/assets/icons/python.svg similarity index 100% rename from packages/code_editor/codeeditor/qtpyeditor/icons/python.svg rename to src/pyminer/packages/code_editor/assets/icons/python.svg diff --git a/packages/code_editor/codeeditor/qtpyeditor/icons/run.svg b/src/pyminer/packages/code_editor/assets/icons/run.svg similarity index 100% rename from packages/code_editor/codeeditor/qtpyeditor/icons/run.svg rename to src/pyminer/packages/code_editor/assets/icons/run.svg diff --git a/packages/code_editor/codeeditor/qtpyeditor/icons/save.svg b/src/pyminer/packages/code_editor/assets/icons/save.svg similarity index 100% rename from packages/code_editor/codeeditor/qtpyeditor/icons/save.svg rename to src/pyminer/packages/code_editor/assets/icons/save.svg diff --git a/packages/code_editor/codeeditor/qtpyeditor/icons/spate.svg b/src/pyminer/packages/code_editor/assets/icons/spate.svg similarity index 100% rename from packages/code_editor/codeeditor/qtpyeditor/icons/spate.svg rename to src/pyminer/packages/code_editor/assets/icons/spate.svg diff --git a/packages/pmagg/langs/zh_CN_pmagg_ui.qm b/src/pyminer/packages/code_editor/assets/languages/en.qm similarity index 100% rename from packages/pmagg/langs/zh_CN_pmagg_ui.qm rename to src/pyminer/packages/code_editor/assets/languages/en.qm diff --git a/src/pyminer/packages/code_editor/assets/languages/en.ts b/src/pyminer/packages/code_editor/assets/languages/en.ts new file mode 100644 index 0000000000000000000000000000000000000000..8c10755ad3ba9ce9f1d36602f1896b8bada78ea5 --- /dev/null +++ b/src/pyminer/packages/code_editor/assets/languages/en.ts @@ -0,0 +1,438 @@ + + + + BaseHandler + + + run code + + + + + run selected code + + + + + CodeEditorBaseObject + + + Not Implemented Error + + + + + {} is not implemented + + + + + FindInPathWidget + + + Case + + + + + Whole Word + + + + + Find + + + + + Find In Path + + + + + line + + + + + PMBaseCodeEdit + + + Format Code + + + + + Run Code + + + + + Run Selected Code + + + + + Save Code + + + + + Find Code + + + + + Replace + + + + + Find In Path + + + + + AutoComp + + + + + Goto Line + + + + + Goto Definition + + + + + Function Help + + + + + Help in Console + + + + + Add Breakpoint + + + + + Remove Breakpoint + + + + + View BreakPoints + + + + + Running {} + + + + + Undo + + + + + Redo + + + + + Cut + + + + + Copy + + + + + Paste + + + + + Delete + + + + + Select All + + + + + PMBaseEditor + + + Save + + + + + Save file "{0}"? + + + + + Save file + + + + + instant boot + + + + + PMCodeEditTabWidget + + + Warning + + + + + Editor does not support file: +%s + + + + + Open File + + + + + Run: %s + + + + + Run Python Code inside %s + + + + + Script + + + + + Builtin (3.8.5) + + + + + Builtin (%s) + + + + + Editor + + + + + Find In Path + + + + + PMDebugConsoleTabWidget + + + Debugger + + + + + Terminate + + + + + Process is running, Would you like to terminate this process? + + + + + PMEditorToolbar + + + New Script + + + + + Open Script + + + + + Save + + + + + Find + + + + + Toggle Comment + + + + + Goto Line + + + + + Indent + + + + + Dedent + + + + + IPython + + + + + Separately + + + + + Terminal + + + + + Instant Boot + + + + + Run script with common module preloaded to shorten interpterter startup-time. + + + + + Editor + + + + + PMFindDialog + + + Text to Find + + + + + Text to Replace + + + + + Wrap + + + + + Regex + + + + + Case Sensitive + + + + + Whole Word + + + + + Up + + + + + Down + + + + + Replace + + + + + Replace All + + + + + PMGotoLineDialog + + + Input Value Error + + + + + Cannot convert '%s' to integer. + + + + + Line Number {line} out of range! + + + + + PMPythonEditor + + + Help + + + + + Cannot get name. +Maybe There is: +1、Syntax error in your code. +2、No word under text cursor. + + + + + PythonHandler + + + Run code + + + + diff --git a/src/pyminer/packages/code_editor/assets/languages/zh_CN.qm b/src/pyminer/packages/code_editor/assets/languages/zh_CN.qm new file mode 100644 index 0000000000000000000000000000000000000000..c506b20fd6c3789b11039ce042b42ca3627a79e8 Binary files /dev/null and b/src/pyminer/packages/code_editor/assets/languages/zh_CN.qm differ diff --git a/src/pyminer/packages/code_editor/assets/languages/zh_CN.ts b/src/pyminer/packages/code_editor/assets/languages/zh_CN.ts new file mode 100644 index 0000000000000000000000000000000000000000..2e1644f776813febe99b86185203aa9f44bcd681 --- /dev/null +++ b/src/pyminer/packages/code_editor/assets/languages/zh_CN.ts @@ -0,0 +1,548 @@ + + + + BaseHandler + + + run code + 运行代码 + + + + run selected code + 运行选中的代码 + + + + CodeEditorBaseObject + + + Not Implemented Error + 功能未实现 + + + + {} is not implemented + 该编辑器不支持{} + + + + FindInPathWidget + + + Case + 匹配大小写 + + + + Whole Word + 全词匹配 + + + + Find + 查找 + + + + Find In Path + 在路径中查找 + + + + line + 行号 + + + + PMBaseCodeEdit + + + Format Code + 代码格式化 + + + + Run Code + 运行代码 + + + + Run Selected Code + 运行选中的代码 + + + + Save Code + 保存代码 + + + + Find Code + 查找代码 + + + + Replace + 替换 + + + + Find In Path + 在路径中查找 + + + + AutoComp + 自动补全 + + + + Goto Line + 跳转到行 + + + + Goto Definition + 转到定义 + + + + Function Help + 函数帮助 + + + + Help in Console + 在控制台中显示帮助 + + + + Add Breakpoint + 添加断点 + + + + Remove Breakpoint + 移除断点 + + + + View BreakPoints + 查看所有断点 + + + + Running {} + 运行{} + + + + Undo + 撤销 + + + + Redo + 重做 + + + + Cut + 剪切 + + + + Copy + 复制 + + + + Paste + 粘贴 + + + + Delete + 删除 + + + + Select All + 全选 + + + + PMBaseEditor + + + Format Code + 代码格式化 + + + + Run Code + 运行代码 + + + + Run Selected Code + 运行选中的代码 + + + + Save Code + 保存代码 + + + + Find Code + 查找代码 + + + + Replace + 替换 + + + + Find In Path + 在路径中查找 + + + + AutoComp + 自动补全 + + + + Goto Line + 跳转到行 + + + + Add Breakpoint + 添加断点 + + + + Remove Breakpoint + 移除断点 + + + + View BreakPoints + 查看所有断点 + + + + Save + 保存 + + + + Save file "{0}"? + 保存文件“{0}”? + + + + Save file + 保存文件 + + + + instant boot + 快速启动 + + + + PMCodeEditTabWidget + + + Warning + 警告 + + + + Editor does not support file: +%s + 编辑器不支持的文件类型: +%s + + + + Open File + 打开文件 + + + + Run: %s + 运行:%s + + + + Run Python Code inside %s + 在%s中运行Python代码 + + + + Script + 脚本 + + + + Builtin (3.8.5) + 内置(3.8.5) + + + + This Editor does not support instant boot. + 本编辑器不支持立即启动。 + + + + Builtin (%s) + 内置(%s) + + + + Editor + 编辑器 + + + + Find In Path + 在路径中查找 + + + + PMDebugConsoleTabWidget + + + Debugger + 调试器 + + + + Terminate + 中止 + + + + Process is running, Would you like to terminate this process? + 进程正在运行,是否想要结束进程? + + + + PMEditorToolbar + + + New Script + 新脚本 + + + + Open Script + 打开脚本 + + + + Save + 保存 + + + + Find + 查找 + + + + Toggle Comment + 切换注释 + + + + Goto Line + 跳转到行 + + + + Indent + 缩进 + + + + Dedent + 撤销缩进 + + + + IPython + IPython + + + + Separately + 分割 + + + + Terminal + 终端 + + + + Instant Boot + 立即启动 + + + + Run script with common module preloaded to shorten interpterter startup-time. + 使用通用预加载模块来运行脚本以加快启动速度。 + + + + Editor + 编辑器 + + + + PMFindDialog + + + Text to Find + 要查找的文本 + + + + Text to Replace + 要替换的文本 + + + + Wrap + Wrap + + + + Regex + 正则 + + + + Case Sensitive + 匹配大小写 + + + + Whole Word + 全词 + + + + Up + 向上 + + + + Down + 向下 + + + + Replace + 替换 + + + + Replace All + 替换所有 + + + + PMGotoLineDialog + + + Input Value Error + 入参错误 + + + + Cannot convert '%s' to integer. + 无法将“%s”转化为整数。 + + + + Line Number {line} out of range! + 行号{line}超出范围! + + + + PMPythonEditor + + + Go to Definition + 转到定义 + + + + Help + 帮助 + + + + Function Help + 函数帮助 + + + + Help In Console + 在控制台中显示帮助 + + + + Cannot get name. +Maybe There is: +1、Syntax error in your code. +2、No word under text cursor. + 无法获取名称。 +可能出现的问题: +1、语法错误; +2、光标下没有文本。 + + + + Error + 错误 + + + + Cannot get name. +Maybe There is: +1、Syntax error in your code. +2、No word under text cursor. + 无法获取名称。 +可能的问题: +1、代码中存在语法错误; +2、游标下没有单词。 + + + + Cannot get name. +Maybe There is: +1、Syntax error in your code. +2、No word under text cursor. + 无法获取名称。可能的问题: +1、代码中存在语法错误; +2、光标下没有单词。 + + + + PythonHandler + + + Run code + 运行代码 + + + diff --git a/src/pyminer/packages/code_editor/assets/languages/zh_TW.qm b/src/pyminer/packages/code_editor/assets/languages/zh_TW.qm new file mode 100644 index 0000000000000000000000000000000000000000..be651eede2edc9cb0da5c140b31664afee169fa8 --- /dev/null +++ b/src/pyminer/packages/code_editor/assets/languages/zh_TW.qm @@ -0,0 +1 @@ + + + + BaseHandler + + + run code + + + + + run selected code + + + + + CodeEditorBaseObject + + + Not Implemented Error + + + + + {} is not implemented + + + + + FindInPathWidget + + + Case + + + + + Whole Word + + + + + Find + + + + + Find In Path + + + + + line + + + + + PMBaseCodeEdit + + + Format Code + + + + + Run Code + + + + + Run Selected Code + + + + + Save Code + + + + + Find Code + + + + + Replace + + + + + Find In Path + + + + + AutoComp + + + + + Goto Line + + + + + Goto Definition + + + + + Function Help + + + + + Help in Console + + + + + Add Breakpoint + + + + + Remove Breakpoint + + + + + View BreakPoints + + + + + Running {} + + + + + Undo + + + + + Redo + + + + + Cut + + + + + Copy + + + + + Paste + + + + + Delete + + + + + Select All + + + + + PMBaseEditor + + + Save + + + + + Save file "{0}"? + + + + + Save file + + + + + instant boot + + + + + PMCodeEditTabWidget + + + Warning + + + + + Editor does not support file: +%s + + + + + Open File + + + + + Run: %s + + + + + Run Python Code inside %s + + + + + Script + + + + + Builtin (3.8.5) + + + + + Builtin (%s) + + + + + Editor + + + + + Find In Path + + + + + PMDebugConsoleTabWidget + + + Debugger + + + + + Terminate + + + + + Process is running, Would you like to terminate this process? + + + + + PMEditorToolbar + + + New Script + + + + + Open Script + + + + + Save + + + + + Find + + + + + Toggle Comment + + + + + Goto Line + + + + + Indent + + + + + Dedent + + + + + IPython + + + + + Separately + + + + + Terminal + + + + + Instant Boot + + + + + Run script with common module preloaded to shorten interpterter startup-time. + + + + + Editor + + + + + PMFindDialog + + + Text to Find + + + + + Text to Replace + + + + + Wrap + + + + + Regex + + + + + Case Sensitive + + + + + Whole Word + + + + + Up + + + + + Down + + + + + Replace + + + + + Replace All + + + + + PMGotoLineDialog + + + Input Value Error + + + + + Cannot convert '%s' to integer. + + + + + Line Number {line} out of range! + + + + + PMPythonEditor + + + Help + + + + + Cannot get name. +Maybe There is: +1、Syntax error in your code. +2、No word under text cursor. + + + + + PythonHandler + + + Run code + + + + diff --git a/packages/pm_helpLinkEngine/__init__.py b/src/pyminer/packages/code_editor/code_handlers/__init__.py similarity index 100% rename from packages/pm_helpLinkEngine/__init__.py rename to src/pyminer/packages/code_editor/code_handlers/__init__.py diff --git a/src/pyminer/packages/code_editor/code_handlers/base_handler.py b/src/pyminer/packages/code_editor/code_handlers/base_handler.py new file mode 100644 index 0000000000000000000000000000000000000000..6de71f2d399f93af5ae766ff407f276f5bc1fa7b --- /dev/null +++ b/src/pyminer/packages/code_editor/code_handlers/base_handler.py @@ -0,0 +1,90 @@ +from functools import cached_property +from typing import Tuple, Type, List, Optional + +from packages.code_editor.utils.base_object import CodeEditorBaseObject + + +class BaseAnalyzer(CodeEditorBaseObject): + """ + 在每次进行代码分析的时候都创建一遍这个对象。 + 这个对象的好处是所有的属性计算都是惰性的,按需计算,降低性能损耗。 + """ + + def __init__(self, code: str, cursor: int, selection_range: Optional[Tuple[int, int]] = None): + self.code: str = code + self.cursor: int = cursor + self.selection_range: Tuple[int, int] = selection_range if selection_range is not None else (cursor, cursor) + + @cached_property + def has_selection(self): + return self.selection_range[0] != self.selection_range[1] + + @cached_property + def lines(self) -> List[str]: + return self.code.split('\n') + + @cached_property + def lines_with_end(self): + return [f'{line}\n' for line in self.lines] + + @cached_property + def current_line_index(self) -> int: + """行的位置,用于进行索引,从0开始""" + return self.code[:self.cursor].count('\n') + + @cached_property + def current_line_number(self) -> int: + """行号,用于进行显示,从1开始""" + return self.current_line_index + 1 + + @cached_property + def selected_code(self): + """获取选中的代码或者当前行的代码""" + if self.has_selection: + return self.code[self.selection_range[0]:self.selection_range[1]] + else: + return self.lines[self.current_line_index] + + +class BaseHandler(CodeEditorBaseObject): + """ + 代码的执行、格式化、分析等所有工作都应写在这个类及其子类下。 + + 这里相当于是界面的后端,所有的对代码的操作都应该放在这里。 + """ + analyzer_class: Type[BaseAnalyzer] = BaseAnalyzer + analyzer: BaseAnalyzer = None + + def __init__(self, path='Untitled'): + self.path = path + + def feed(self, code: str, position: int, selection_range: Tuple[int, int]): + """输入代码,以用于分析等操作 + + 这个更新的方式为增量更新,仅当参数与上一次的参数不一致时,才创建新的analyzer对象。 + + Args: + code: 代码,应该是plainText + position: 游标的位置,是一个整数,而不是行列号 + selection_range: 选区的位置,是一对整数,表示起止位置,而不是行列号 + """ + if (a := self.analyzer) is not None: + if (code, position, selection_range) == (a.code, a.cursor, a.selection_range): + return + self.analyzer = self.analyzer_class(code, position, selection_range) + + def run_code(self, code: str, hint: str = 'run code'): + """运行一段代码 + + Args: + code: 代码 + hint: 代码的标题 + """ + self._not_implemented_error(self.tr('run code')) + + def run_selected_code(self): + """运行选中的代码""" + self._not_implemented_error(self.tr('run selected code')) + + def format_code(self) -> analyzer_class: + return self.analyzer diff --git a/src/pyminer/packages/code_editor/code_handlers/python_handler.py b/src/pyminer/packages/code_editor/code_handlers/python_handler.py new file mode 100644 index 0000000000000000000000000000000000000000..d48d022efb99309aed7edfea8c7c43f6cc64b9df --- /dev/null +++ b/src/pyminer/packages/code_editor/code_handlers/python_handler.py @@ -0,0 +1,27 @@ +import logging + +from yapf.yapflib import yapf_api + +from packages.code_editor.code_handlers.base_handler import BaseHandler + +logger = logging.getLogger(__name__) + + +class PythonHandler(BaseHandler): + def run_code(self, code: str, hint: str = ''): + if hint == '': + hint = self.tr('Run code') + self.interfaces.ipython_console.run_command(command=code, hint_text=hint, hidden=False) + + def run_selected_code(self): + code = self.analyzer.selected_code + self.interfaces.ipython_console.run_command(command=code, hint_text=code, hidden=False) + + def format_code(self): + try: + code, _ = yapf_api.FormatCode( + self.analyzer.code, style_config=str(self.settings.assets_dir / '.style.yapf')) + except Exception as e: + logger.exception(e) + code = self.analyzer.code + return self.analyzer_class(code, self.analyzer.cursor, self.analyzer.selection_range) diff --git a/packages/code_editor/main.py b/src/pyminer/packages/code_editor/main.py similarity index 68% rename from packages/code_editor/main.py rename to src/pyminer/packages/code_editor/main.py index d5e1fb5fc46ffa090b7d412400671c233dec7dc6..d6033185c6ffcc9e45650844a98b7b3bb68431db 100644 --- a/packages/code_editor/main.py +++ b/src/pyminer/packages/code_editor/main.py @@ -1,44 +1,39 @@ +import logging import os -import sys -from typing import Dict, Union +from typing import Dict, Union, TYPE_CHECKING -from PySide2.QtCore import QLocale, QTranslator -from PySide2.QtWidgets import QApplication +from .utils.base_object import CodeEditorBaseObject -app = QApplication.instance() -trans_editor_tb = QTranslator() -app.trans_editor_tb = trans_editor_tb -trans_editor_tb.load(os.path.join(os.path.dirname(__file__), 'translations', 'qt_%s.qm' % QLocale.system().name())) -app.installTranslator(trans_editor_tb) - -sys.path.append(os.path.dirname(__file__)) +if TYPE_CHECKING: + pass from features.extensions.extensionlib import BaseInterface, BaseExtension -from .codeeditor.tabwidget import PMCodeEditTabWidget -from .debugger import PMDebugConsoleTabWidget -from .toolbar import PMEditorToolbar +from .widgets.tab_widget import PMCodeEditTabWidget +from .widgets.debugger import PMDebugConsoleTabWidget +from .widgets.toolbar import PMEditorToolbar from pmgwidgets import PMGPanel, load_json, dump_json -_PMEditorToolbar = PMEditorToolbar # 这一行的目的是防止导入被编辑器自动优化。 +__prevent_from_ide_optimization = PMEditorToolbar # 这一行的目的是防止导入被编辑器自动优化。 +logger = logging.getLogger('code_editor') + +class Extension(CodeEditorBaseObject, BaseExtension): + editor_widget: 'PMCodeEditTabWidget' + debuggers_widget: 'PMDebugConsoleTabWidget' -class Extension(BaseExtension): def __init__(self): super(Extension, self).__init__() - self.settings: Dict[str, Union[int, str]] = {} - self.editor_widget: 'PMCodeEditTabWidget' = None def on_loading(self): self.load_settings() def on_load(self): self.widgets["PMCodeEditTabWidget"].set_extension_lib(self.extension_lib) - self.editor_widget: 'PMCodeEditTabWidget' = self.widgets["PMCodeEditTabWidget"] - + self.editor_widget = self.widgets["PMCodeEditTabWidget"] self.interface.editor_tab_widget = self.editor_widget self.editor_widget.settings = self.settings - self.debuggers_widget: 'PMDebugConsoleTabWidget' = self.widgets['PMDebugConsoleTabWidget'] + self.debuggers_widget = self.widgets['PMDebugConsoleTabWidget'] self.debuggers_widget.signal_goto_file.connect(self.on_gotoline_requested) self.debuggers_widget.extension_lib = self.extension_lib self.editor_widget.set_debug_widget(self.debuggers_widget) @@ -77,27 +72,23 @@ class Extension(BaseExtension): self.editor_widget.set_color_scheme('light') else: self.editor_widget.set_color_scheme('dark') - print(work_dir) + logger.debug(f'Working directory: {work_dir}') self.editor_widget.on_work_dir_changed(work_dir) def bind_event(self): - - self.extension_lib.get_interface('file_tree').add_open_file_callback('.py', self.new_script) - self.extension_lib.get_interface('file_tree').add_open_file_callback('.c', self.new_script) - self.extension_lib.get_interface('file_tree').add_open_file_callback('.cpp', self.new_script) - self.extension_lib.get_interface('file_tree').add_open_file_callback('.h', self.new_script) - self.extension_lib.get_interface('file_tree').add_open_file_callback('.pyx', self.new_script) - self.extension_lib.get_interface('file_tree').add_open_file_callback('.md', self.new_script) + extensions = ('.py', '.c', '.cpp', '.h', '.pyx', '.md') + [self.interfaces.file_tree.add_open_file_callback(ext, self.new_script) for ext in extensions] def load_settings(self): - settings = {'encoding_declaration_text': '# coding = utf-8', - 'check_syntax_background': True, - 'smart_autocomp_on': True, - 'font_size': 12, - 'wrap': True, - 'key_comment': 'Ctrl+/', - 'key_format': 'Ctrl+Alt+L' - } + settings = { + 'encoding_declaration_text': '# coding = utf-8', + 'check_syntax_background': True, + 'smart_autocomp_on': True, + 'font_size': 12, + 'wrap': True, + 'key_comment': 'Ctrl+/', + 'key_format': 'Ctrl+Alt+L' + } config_folder = self.extension_lib.Program.get_plugin_data_path('code_editor') config_path = os.path.join(config_folder, 'settings.json') try: @@ -108,10 +99,7 @@ class Extension(BaseExtension): self.settings = settings def add_settings_panel(self): - """ - 向主界面的设置面板插入一个设置页面,并且按照设置数据来更新设置。 - :return: - """ + """向主界面的设置面板插入一个设置页面,并且按照设置数据来更新设置。""" settings = self.settings new_settings = [ @@ -150,8 +138,7 @@ class Extension(BaseExtension): class Interface(BaseInterface): - def __init__(self): - self.editor_tab_widget: 'PMCodeEditTabWidget' = None + editor_tab_widget: 'PMCodeEditTabWidget' def open_script(self, path: str): self.editor_tab_widget.slot_new_script(path) diff --git a/packages/code_editor/package.json b/src/pyminer/packages/code_editor/package.json similarity index 100% rename from packages/code_editor/package.json rename to src/pyminer/packages/code_editor/package.json diff --git a/packages/code_editor/python.jpg b/src/pyminer/packages/code_editor/python.jpg similarity index 100% rename from packages/code_editor/python.jpg rename to src/pyminer/packages/code_editor/python.jpg diff --git a/packages/pm_modelling/__init__.py b/src/pyminer/packages/code_editor/scripts/__init__.py similarity index 100% rename from packages/pm_modelling/__init__.py rename to src/pyminer/packages/code_editor/scripts/__init__.py diff --git a/packages/pm_preprocess/__init__.py b/src/pyminer/packages/code_editor/scripts/flake8_error_msg_translator/__init__.py similarity index 100% rename from packages/pm_preprocess/__init__.py rename to src/pyminer/packages/code_editor/scripts/flake8_error_msg_translator/__init__.py diff --git a/src/pyminer/packages/code_editor/scripts/flake8_error_msg_translator/translate.py b/src/pyminer/packages/code_editor/scripts/flake8_error_msg_translator/translate.py new file mode 100644 index 0000000000000000000000000000000000000000..b3270e65378a5d7f6efabfcf82383629a1c7a687 --- /dev/null +++ b/src/pyminer/packages/code_editor/scripts/flake8_error_msg_translator/translate.py @@ -0,0 +1,30 @@ +""" +将translations.txt转换为flake8_trans.json,以供PyMiner使用。 +""" + +import json +import re +from pathlib import Path +from pprint import pprint + + +def main(): + data = {} + src = Path(__file__).parent.absolute() / 'translations.txt' + dst = Path(__file__).parent.parent.parent.absolute() / 'assets' / 'flake8_trans.json' + with open(src, 'r', encoding='utf-8') as file: + lines = file.readlines() + lines = [line.replace('\n', '') for line in lines] + lines = [line for line in lines if line.startswith(('E', 'W', 'C', 'F'))] + lines = [list(line.strip().split(maxsplit=1)) for line in lines] + lines = [[word.strip() for word in words] for words in lines if len(words) >= 1] + [words.append('') for words in lines if len(words) == 1] + lines = [(id, re.sub(' +', ' ', message)) for id, message in lines] + [data.__setitem__(id, message) for id, message in lines] + pprint(data) + with open(dst, 'w') as file: + json.dump(data, file, indent=4) + + +if __name__ == '__main__': + main() diff --git a/packages/code_editor/codeeditor/errors_translation/translations.txt b/src/pyminer/packages/code_editor/scripts/flake8_error_msg_translator/translations.txt similarity index 100% rename from packages/code_editor/codeeditor/errors_translation/translations.txt rename to src/pyminer/packages/code_editor/scripts/flake8_error_msg_translator/translations.txt diff --git a/src/pyminer/packages/code_editor/scripts/translation/README.md b/src/pyminer/packages/code_editor/scripts/translation/README.md new file mode 100644 index 0000000000000000000000000000000000000000..d77c261f6786789cd165dd69312dcd1509de433e --- /dev/null +++ b/src/pyminer/packages/code_editor/scripts/translation/README.md @@ -0,0 +1,13 @@ +# 代码编辑器的国际化翻译 + +出于开发时的简洁性,使用英文进行开发,而后需要译回中文。 + +翻译生成工具只有一个脚本,其主要工作流程如下: + +1. 运行`translate.py`,增量生成各个语言的ts文件,以用于翻译; +1. 使用Qt语言家进行翻译,翻译结果直接保存在生成的ts文件内; +1. 执行`translate.py`,将翻译文件生成可以用Qt读取的文件。 + +这个脚本同时执行了两项功能,即创建ts文件,再将ts文件转换为qm文件。 因为这两个步骤对性能的要求都不高,因此没有进行分别处理。 + +这个脚本仅在Windows下进行过测试,其他平台麻烦其他人协助测试。 \ No newline at end of file diff --git a/src/pyminer/packages/code_editor/scripts/translation/code_editor.pro b/src/pyminer/packages/code_editor/scripts/translation/code_editor.pro new file mode 100644 index 0000000000000000000000000000000000000000..58e09bbc725dbdc0b553ae40c081287260119cc4 --- /dev/null +++ b/src/pyminer/packages/code_editor/scripts/translation/code_editor.pro @@ -0,0 +1,51 @@ +SOURCES = ..\..\main.py\ + ..\..\settings.py\ + ..\..\__init__.py\ + ..\..\code_handlers\base_handler.py\ + ..\..\code_handlers\python_handler.py\ + ..\..\code_handlers\__init__.py\ + ..\..\utils\base_object.py\ + ..\..\utils\font_config.py\ + ..\..\utils\operation.py\ + ..\..\utils\utils.py\ + ..\..\utils\__init__.py\ + ..\..\utils\auto_complete_thread\base_auto_complete.py\ + ..\..\utils\auto_complete_thread\python_auto_complete.py\ + ..\..\utils\auto_complete_thread\__init__.py\ + ..\..\utils\code_checker\base_code_checker.py\ + ..\..\utils\code_checker\__init__.py\ + ..\..\utils\grammar_analyzer\get_indent.py\ + ..\..\utils\grammar_analyzer\grammar_analyzer.py\ + ..\..\utils\grammar_analyzer\__init__.py\ + ..\..\utils\highlighter\base_highlighter.py\ + ..\..\utils\highlighter\python_highlighter.py\ + ..\..\utils\highlighter\__init__.py\ + ..\..\widgets\debugger.py\ + ..\..\widgets\tab_widget.py\ + ..\..\widgets\toolbar.py\ + ..\..\widgets\__init__.py\ + ..\..\widgets\auto_complete_dropdown\base_auto_complete_dropdown.py\ + ..\..\widgets\auto_complete_dropdown\__init__.py\ + ..\..\widgets\dialogs\find_dialog.py\ + ..\..\widgets\dialogs\goto_line_dialog.py\ + ..\..\widgets\dialogs\__init__.py\ + ..\..\widgets\editors\base_editor.py\ + ..\..\widgets\editors\markdown_editor.py\ + ..\..\widgets\editors\python_editor.py\ + ..\..\widgets\editors\__init__.py\ + ..\..\widgets\text_edit\base_text_edit.py\ + ..\..\widgets\text_edit\line_number_area.py\ + ..\..\widgets\text_edit\python_text_edit.py\ + ..\..\widgets\text_edit\__init__.py\ + ..\..\widgets\ui\findinpath.py\ + ..\..\widgets\ui\formeditor.py\ + ..\..\widgets\ui\gotoline.py\ + ..\..\widgets\ui\ui_formeditor.py\ + ..\..\widgets\ui\ui_gotoline.py\ + ..\..\widgets\ui\__init__.py +TRANSLATIONS = ..\..\assets\languages\en.ts \ + ..\..\assets\languages\zh_CN.ts \ + ..\..\assets\languages\zh_TW.ts + +CODECFORTR = UTF-8 +CODECFORSRC = UTF-8 \ No newline at end of file diff --git a/src/pyminer/packages/code_editor/scripts/translation/code_editor.pro_t b/src/pyminer/packages/code_editor/scripts/translation/code_editor.pro_t new file mode 100644 index 0000000000000000000000000000000000000000..f65f1d8ea3703286c8eed56551b99e5efebafb84 --- /dev/null +++ b/src/pyminer/packages/code_editor/scripts/translation/code_editor.pro_t @@ -0,0 +1,7 @@ +SOURCES = {{ python_files }} +TRANSLATIONS = ..\..\assets\languages\en.ts \ + ..\..\assets\languages\zh_CN.ts \ + ..\..\assets\languages\zh_TW.ts + +CODECFORTR = UTF-8 +CODECFORSRC = UTF-8 \ No newline at end of file diff --git a/src/pyminer/packages/code_editor/scripts/translation/translate.py b/src/pyminer/packages/code_editor/scripts/translation/translate.py new file mode 100644 index 0000000000000000000000000000000000000000..57591bb07061d7eb38006c7bddd82ec19614c8fa --- /dev/null +++ b/src/pyminer/packages/code_editor/scripts/translation/translate.py @@ -0,0 +1,56 @@ +import os +import sys +from pathlib import Path + +import PySide2 +import jinja2 + +sys.path.insert(1, str(Path(__file__).absolute().parent.parent.parent.parent.parent)) + +from utils.dev.system import system + + +def get_python_files(): + base_path = Path(__file__).parent.parent.parent.absolute() + python_files = [] + for root, sub_dirs, files in os.walk(base_path): + root = Path(root) + if any(p in root.parts for p in ('__pycache__', 'assets', 'scripts')): + continue + for file in files: + file = root / file + if file.suffix != '.py': + continue + file = os.path.join('..', '..', file.relative_to(base_path)) + python_files.append(file) + return python_files + + +def main(): + # 生成pro文件 + # TODO 由于目前没有ui文件,因此没有考虑ui文件 + template = Path(__file__).absolute().parent / 'code_editor.pro_t' + with open(template, 'r', encoding='utf-8') as f: + template_content = f.read() + python_files = get_python_files() + python_files = '\\\n '.join(python_files) + pro_content = jinja2.Template(template_content).render(python_files=python_files) + pro = Path(__file__).absolute().parent / 'code_editor.pro' + with open(pro, 'w', encoding='utf-8') as f: + f.write(pro_content) + + # 使用lupdate生成ts文件 + exe = Path(PySide2.__file__).parent / 'pyside2-lupdate.exe' + system(exe, pro) + + # 将ts文件转换为qm文件 + base_path = Path(__file__).absolute().parent.parent.parent + exe = Path(PySide2.__file__).parent / 'lrelease.exe' + ts_dir = base_path / 'assets' / 'languages' + for file in ts_dir.glob('*.ts'): + output = file.parent / f'{file.stem}.qm' + system(exe, f'{file}', '-qm', output) + + +if __name__ == '__main__': + main() diff --git a/src/pyminer/packages/code_editor/settings.py b/src/pyminer/packages/code_editor/settings.py new file mode 100644 index 0000000000000000000000000000000000000000..2b9820fb04b28b86e65f39a41f53c85bcd83e798 --- /dev/null +++ b/src/pyminer/packages/code_editor/settings.py @@ -0,0 +1,17 @@ +""" +定义该插件下的一些常用变量及配置项,包括资源文件夹位置等内容。 +""" + +from pathlib import Path + +from PySide2.QtGui import QIcon + + +class Settings: + base_dir = Path(__file__).parent.absolute() + assets_dir = base_dir / 'assets' + icons_dir = assets_dir / 'icons' + translations_dir = assets_dir / 'translations' + + def get_icon(self, name: str) -> QIcon: + return QIcon(str(self.icons_dir / name)) diff --git a/packages/pm_statistics/__init__.py b/src/pyminer/packages/code_editor/utils/__init__.py similarity index 100% rename from packages/pm_statistics/__init__.py rename to src/pyminer/packages/code_editor/utils/__init__.py diff --git a/packages/pmagg/__init__.py b/src/pyminer/packages/code_editor/utils/auto_complete_thread/__init__.py similarity index 100% rename from packages/pmagg/__init__.py rename to src/pyminer/packages/code_editor/utils/auto_complete_thread/__init__.py diff --git a/packages/code_editor/codeeditor/qtpyeditor/Utilities/autocomp.py b/src/pyminer/packages/code_editor/utils/auto_complete_thread/base_auto_complete.py similarity index 89% rename from packages/code_editor/codeeditor/qtpyeditor/Utilities/autocomp.py rename to src/pyminer/packages/code_editor/utils/auto_complete_thread/base_auto_complete.py index 19459e431ae102c677fbd4b96122f1e576b9527f..f14a2cc4a8e7bb660e0f48f99b9d48255f4d1ec2 100644 --- a/packages/code_editor/codeeditor/qtpyeditor/Utilities/autocomp.py +++ b/src/pyminer/packages/code_editor/utils/auto_complete_thread/base_auto_complete.py @@ -1,25 +1,21 @@ -# -*- coding:utf-8 -*- -# @Time: 2021/1/30 11:40 -# @Author: Zhanyi Hou -# @Email: 1295752786@qq.com -# @File: autocomp.py +import logging import re import time -import logging + from PySide2.QtCore import QThread, Signal logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) -class AutoCompThread(QThread): - ''' +class BaseAutoCompleteThread(QThread): + """ 当一段时间没有补全需求之后,后台自动补全线程会进入休眠模式。下一次补全请求则会唤醒该后台线程。 - ''' + """ trigger = Signal(tuple, list) def __init__(self): - super(AutoCompThread, self).__init__() + super(BaseAutoCompleteThread, self).__init__() self.text = '' self.text_cursor_pos = (0, 1) self.activated = True @@ -33,7 +29,7 @@ class AutoCompThread(QThread): except ImportError: print('Jedi not installed.install jedi for better auto-completion!') return - while (1): + while 1: if self.stop_flag: return diff --git a/src/pyminer/packages/code_editor/utils/auto_complete_thread/python_auto_complete.py b/src/pyminer/packages/code_editor/utils/auto_complete_thread/python_auto_complete.py new file mode 100644 index 0000000000000000000000000000000000000000..d5e899b5a0c19934c3d7349f1a8682015cae8555 --- /dev/null +++ b/src/pyminer/packages/code_editor/utils/auto_complete_thread/python_auto_complete.py @@ -0,0 +1,70 @@ +import logging +import re +import time + +from PySide2.QtCore import Signal + +from packages.code_editor.utils.auto_complete_thread.base_auto_complete import BaseAutoCompleteThread + +logger = logging.getLogger(__name__) +logger.setLevel(logging.DEBUG) + + +class PythonAutoCompleteThread(BaseAutoCompleteThread): + """ + 当一段时间没有补全需求之后,后台自动补全线程会进入休眠模式。下一次补全请求则会唤醒该后台线程。 + """ + trigger = Signal(tuple, list) + + def __init__(self): + super(PythonAutoCompleteThread, self).__init__() + self.text = '' + self.text_cursor_pos = (0, 1) + self.activated = True + self.stop_flag = False + + def run(self): + text = '' + last_complete_time = time.time() + try: + import jedi + except ImportError: + print('Jedi not installed.install jedi for better auto-completion!') + return + while 1: + if self.stop_flag: + return + + if self.text == text: + if time.time() - last_complete_time >= 30: + self.activated = False + time.sleep(0.02 if self.activated else 0.1) + continue + + try: + row_text = self.text.splitlines()[self.text_cursor_pos[0] - 1] + hint = re.split( + '[.:;,?!\s \+ \- = \* \\ \/ \( \)\[\]\{\} ]', row_text)[-1] + content = ( + self.text_cursor_pos[0], self.text_cursor_pos[1], hint + ) + logger.debug('Text of current row:%s' % content[2]) + script = jedi.Script(self.text) + l = script.complete(*self.text_cursor_pos) + + except: + import traceback + traceback.print_exc() + l = [] + self.trigger.emit(content, l) + last_complete_time = time.time() + + self.activated = True + text = self.text + + def on_exit(self): + self.stop_flag = True + self.exit(0) + if self.isRunning(): + self.quit() + self.wait(500) diff --git a/src/pyminer/packages/code_editor/utils/base_object.py b/src/pyminer/packages/code_editor/utils/base_object.py new file mode 100644 index 0000000000000000000000000000000000000000..ba577dcf9c8a3218bdb9f88481662982f3dbed27 --- /dev/null +++ b/src/pyminer/packages/code_editor/utils/base_object.py @@ -0,0 +1,82 @@ +from functools import cached_property +from pathlib import Path +from typing import Optional, Callable, TYPE_CHECKING + +from PySide2.QtCore import QTranslator, QLocale +from PySide2.QtWidgets import QMessageBox + +from features.extensions.extensionlib import extension_lib +from ..settings import Settings + +if TYPE_CHECKING: + from features.extensions.extensionlib.extension_lib import ExtensionLib + from ...ipython_console.main import ConsoleInterface + from ...applications_toolbar.main import ApplicationsInterface + from ...embedded_browser.main import Interface as EmbeddedBrowserInterface + from ...file_tree.main import Interface as FileTreeInterface + + +def _get_translator() -> Optional[QTranslator]: + result = QTranslator() + language = QLocale.system().name() + file = Path(__file__).parent.parent / 'assets' / 'languages' / f'{language}.qm' + if file.exists(): + result.load(str(file)) + return result + else: + return None + + +class CodeEditorBaseObject: + # 由于插件内为独立的模块加载,其命名空间不共享,因此暂时只能采用这种方式实现全局的extension_lib读取 + extension_lib: 'ExtensionLib' = extension_lib + settings = Settings() + + __translator = _get_translator() + + @cached_property + def tr(self) -> Callable[[str], str]: + """使用属性的方式返回一个运行时生成的函数。 + + 这个函数可以实现自动判断Context以查找对应的翻译。 + 这个函数旨在解决的问题是,PySide2默认情况下采用静态编码的方式生成翻译,而后Python在运行时由于继承,类名不再是self.tr所在的类名, + 因此translator无法找到相对应的翻译。 + + 使用cached property以实现MRO查找等性能的节省。 + """ + klass_names = [klass.__name__ for klass in self.__class__.mro()] + if self.__translator is None: + return lambda source: source + else: + translate: Callable[[str, str], str] = self.__translator.translate + + def wrapper(source: str): + translations = [translate(klass, source) for klass in klass_names] + translations = [t for t in translations if t] + return translations[0] if translations else source + + return wrapper + + def _not_implemented_error(self, name): + title = self.tr('Not Implemented Error') + message = self.tr('{} is not implemented').format(name) + QMessageBox.critical(None, title, message) + + class __Interfaces: + @cached_property + def ipython_console(self) -> 'ConsoleInterface': + return CodeEditorBaseObject.extension_lib.get_interface('ipython_console') + + @cached_property + def application_toolbar(self) -> 'ApplicationsInterface': + return CodeEditorBaseObject.extension_lib.get_interface('applications_toolbar') + + @cached_property + def embedded_browser(self) -> 'EmbeddedBrowserInterface': + return CodeEditorBaseObject.extension_lib.get_interface('embedded_browser') + + @cached_property + def file_tree(self) -> 'FileTreeInterface': + return CodeEditorBaseObject.extension_lib.get_interface('file_tree') + + interfaces: __Interfaces = __Interfaces() diff --git a/packages/pmagg/ui/__init__.py b/src/pyminer/packages/code_editor/utils/code_checker/__init__.py similarity index 100% rename from packages/pmagg/ui/__init__.py rename to src/pyminer/packages/code_editor/utils/code_checker/__init__.py diff --git a/src/pyminer/packages/code_editor/utils/code_checker/base_code_checker.py b/src/pyminer/packages/code_editor/utils/code_checker/base_code_checker.py new file mode 100644 index 0000000000000000000000000000000000000000..f6f37f5fe82ceed65077069070b16fcdc21a0512 --- /dev/null +++ b/src/pyminer/packages/code_editor/utils/code_checker/base_code_checker.py @@ -0,0 +1,84 @@ +import logging +import re +from contextlib import redirect_stdout +from io import StringIO +from queue import Queue +from typing import List, Tuple + +from PySide2.QtCore import QObject, Signal, QThread, QTemporaryFile, SignalInstance +from flake8.main.application import Application + +from ..base_object import CodeEditorBaseObject + +logger = logging.getLogger(__name__) + + +class CodeCheckWorker(CodeEditorBaseObject, QObject): + """代码检查""" + checked: SignalInstance = Signal(object, list) + + def __init__(self, *args, **kwargs): + super(CodeCheckWorker, self).__init__(*args, **kwargs) + self._queue = Queue() + self._running = True + self.background_checking = True + + def add(self, widget: 'QsciScintilla', code: str): + """添加需要检测的对象 + + Args: + widget: 目标编辑器 + code: 目标编辑器代码 + """ + self._queue.put_nowait((widget, code)) + while self._queue.qsize() > 3: + self._queue.get(False, 0) + + def stop(self): + """通知线程需要退出,等待线程自行退出""" + self._running = False + + def run(self): + """代码检测工作函数""" + while 1: + if not self._running: + logger.info('code checker quit') + break + if not self.background_checking: + QThread.msleep(500) + continue + if self._queue.qsize() == 0: + QThread.msleep(500) + continue + try: + widget, code = self._queue.get(False, 0.5) + # 创建临时文件 + file = QTemporaryFile(self) + file.setAutoRemove(True) + if file.open(): + with open(file.fileName(), 'wb') as fp: + fp.write(code.encode()) + file.close() + # 使用flake8检测代码 + with StringIO() as out, redirect_stdout(out): + app = Application() + app.initialize(['flake8', '--exit-zero', '--config', self.settings.assets_dir / '.flake8']) + app.run_checks([file.fileName()]) + app.report() + results = out.getvalue().split('\n') + new_results: List[Tuple[int, int, str, str]] = [] + for ret in results: + if re.search(r'\d+:\d+:[EFW]\d+:.*?', ret): + split_list = ret.split(':') + line_no = int(split_list[0]) + column = int(split_list[1]) + error_code = split_list[2] + error_type = split_list[3] + new_results.append((line_no, column, error_code, error_type)) + # results = [ret for ret in results if re.search(r'\d+:\d+:[EFW]\d+:.*?', ret)] + + self.checked.emit(widget, new_results) # 如果为空,也应该这样做。将空列表传入可以清空所有的标记。 + file.deleteLater() + del file + except Exception as e: + logger.warning(str(e)) diff --git a/src/pyminer/packages/code_editor/utils/font_config.py b/src/pyminer/packages/code_editor/utils/font_config.py new file mode 100644 index 0000000000000000000000000000000000000000..9e5d649b050ceac16daf06eb7d0f01f3cd50c253 --- /dev/null +++ b/src/pyminer/packages/code_editor/utils/font_config.py @@ -0,0 +1,52 @@ +from typing import Dict + +from PySide2.QtCore import Qt +from PySide2.QtGui import QFont + + +class FontConfig: + def __init__(self): + """ + color是16位标准的。 + bold有以下几种选择。 + QFont::Thin 0 0 + QFont::ExtraLight 12 12 + QFont::Light 25 25 + QFont::Normal 50 50 + QFont::Medium 57 57 + QFont::DemiBold 63 63 + QFont::Bold 75 75 + QFont::ExtraBold 81 81 + QFont::Black + """ + self.font_size = 15 + self.settings = {'normal': {'color': Qt.black, 'bold': QFont.Normal}, + 'keyword': {'color': Qt.darkBlue, 'bold': QFont.ExtraBold}, + 'builtin': {'color': Qt.darkRed, 'bold': QFont.Normal}, + 'constant': {'color': Qt.darkGreen, 'bold': QFont.Normal}, + 'decorator': {'color': Qt.darkBlue, 'bold': QFont.Normal}, + 'comment': {'color': Qt.darkGreen, 'bold': QFont.Normal}, + 'string': {'color': Qt.darkYellow, 'bold': QFont.Normal}, + 'number': {'color': Qt.darkMagenta, 'bold': QFont.Normal}, + 'error': {'color': Qt.darkRed, 'bold': QFont.Normal}, + 'pyqt': {'color': Qt.darkCyan, 'bold': QFont.Normal} + } + # self.load_color_scheme(color_scheme_intellij) + + def load_color_scheme(self, scheme: Dict[str, str]): + for name in scheme: + assert name in self.settings.keys() + self.set_font_color(name, scheme[name]) + + def set_font_color(self, font_name: str, font_color: str): + assert font_name in self.settings.keys() + self.settings[font_name]['color'] = font_color + + def get_font_color(self, font_name: str): + return self.settings[font_name]['color'] + + def get_font_bold(self, font_name: str): + return self.settings[font_name]['bold'] + + def get_font_size(self) -> int: + return self.font_size diff --git a/packages/qt_vditor/__init__.py b/src/pyminer/packages/code_editor/utils/grammar_analyzer/__init__.py similarity index 100% rename from packages/qt_vditor/__init__.py rename to src/pyminer/packages/code_editor/utils/grammar_analyzer/__init__.py diff --git a/src/pyminer/packages/code_editor/utils/grammar_analyzer/get_indent.py b/src/pyminer/packages/code_editor/utils/grammar_analyzer/get_indent.py new file mode 100644 index 0000000000000000000000000000000000000000..db0fa577d7ecd452e48b3a0172ebd21adc717d99 --- /dev/null +++ b/src/pyminer/packages/code_editor/utils/grammar_analyzer/get_indent.py @@ -0,0 +1,13 @@ +from typing import Tuple + + +def get_indent(s: str) -> Tuple[str, int]: + s = s.replace('\t', ' ') # tab替换成四个空格 + s = s.rstrip() + if len(s) > 0: + for i, ch in enumerate(s): + if ch != ' ': + return s[i:], i + return "", i + 1 + else: + return "", 0 diff --git a/src/pyminer/packages/code_editor/utils/grammar_analyzer/grammar_analyzer.py b/src/pyminer/packages/code_editor/utils/grammar_analyzer/grammar_analyzer.py new file mode 100644 index 0000000000000000000000000000000000000000..3e3802646c04194062e6c29184028af7ad987f6c --- /dev/null +++ b/src/pyminer/packages/code_editor/utils/grammar_analyzer/grammar_analyzer.py @@ -0,0 +1,66 @@ +from typing import Tuple, List, Union + +import parso +from parso.tree import Leaf, Node + + +class GrammarAnalyzer: + def __init__(self): + """ + 代码静态分析工具,用于识别括号匹配等内容 + """ + self.__code = '' + self.__parsed_node_cache = None + + def feed(self, code: str) -> None: + """使用当前编辑器里面的代码替换之前分析器中的代码 + + Args: + code: 当前编辑器中的代码 + """ + self.__code = code + self.__parsed_node_cache = None + + @property + def __parsed_node(self) -> Node: + """使用parso进行解析后的代码""" + if self.__parsed_node_cache is None: + self.__parsed_node_cache = parso.parse(self.__code) + return self.__parsed_node_cache + + def _convert_position_to_row_col(self, position: int) -> Tuple[int, int]: + left_part = self.__code[:position] + row = left_part.count('\n') + 1 + col = position - left_part.rfind('\n') - 1 + return row, col + + __PAIRS = {'(': ')', '[': ']', '{': '}'} + + def is_not_matched(self, position: Union[Tuple[int, int], int], left='('): + """是否需要添加另一个配对项 + + 对于如下代码:``print(a, b, c#)`` ,在光标位于#处时,按下右括号键,是不需要再添加一个括号的。 + 本方法即是为了解决这个问题,识别是否需要添加额外的括号。 + + Args: + position: 匹配位置 + left: 配对的左侧一项 + + Returns: + bool, 是否需要添加 + """ + if isinstance(position, int): + position = self._convert_position_to_row_col(position) + position: Tuple[int, int] + right = self.__PAIRS[left] + leaf: Leaf = self.__parsed_node.get_leaf_for_position(position) + node: Node = leaf.parent + child: Node + leaves: List[Node] = [leaf] + while node is not None: + # print(node.children) + leaves.extend([child for child in node.children if child is not leaf and child.type == 'operator']) + node, leaf = node.parent, leaf.parent + characters: List[str] = [leaf.get_code().strip() for leaf in leaves] + # print(characters, characters.count(left), characters.count(right)) + return characters.count(left) - characters.count(right) > 0 diff --git a/packages/setting_manager/__init__.py b/src/pyminer/packages/code_editor/utils/highlighter/__init__.py similarity index 100% rename from packages/setting_manager/__init__.py rename to src/pyminer/packages/code_editor/utils/highlighter/__init__.py diff --git a/src/pyminer/packages/code_editor/utils/highlighter/base_highlighter.py b/src/pyminer/packages/code_editor/utils/highlighter/base_highlighter.py new file mode 100644 index 0000000000000000000000000000000000000000..636229fc9111691e586db06dc3faa9d4ecd60d21 --- /dev/null +++ b/src/pyminer/packages/code_editor/utils/highlighter/base_highlighter.py @@ -0,0 +1,11 @@ +from PySide2.QtGui import QSyntaxHighlighter, QColor + + +class BaseHighlighter(QSyntaxHighlighter): + ERROR = 1 + WARNING = 2 + HINT = 3 + DEHIGHLIGHT = 4 + + HIGHLIGHT_COLOR = {ERROR: QColor(255, 65, 65, 200), WARNING: QColor(255, 255, 65, 100), + HINT: QColor(155, 155, 155, 100), DEHIGHLIGHT: QColor(155, 155, 155, 100)} diff --git a/packages/code_editor/codeeditor/qtpyeditor/highlighters/python.py b/src/pyminer/packages/code_editor/utils/highlighter/python_highlighter.py similarity index 74% rename from packages/code_editor/codeeditor/qtpyeditor/highlighters/python.py rename to src/pyminer/packages/code_editor/utils/highlighter/python_highlighter.py index ba91ee8c15c4e6ea5214e3663680c1e48e78fb03..9bd5e512012f0b6f339688caa95b06f8f744097d 100644 --- a/packages/code_editor/codeeditor/qtpyeditor/highlighters/python.py +++ b/src/pyminer/packages/code_editor/utils/highlighter/python_highlighter.py @@ -1,77 +1,17 @@ -# -*- coding:utf-8 -*- -# @Time: 2021/1/18 8:53 -# @Author: Zhanyi Hou -# @Email: 1295752786@qq.com -# @File: python.py import builtins +import logging import sys import time -from typing import Dict, Tuple, List, Set +from typing import Dict, List, Set from PySide2.QtCore import QRegExp, Qt +from PySide2.QtGui import QTextCharFormat, QBrush, QColor, QCursor, QSyntaxHighlighter from PySide2.QtWidgets import QApplication -from PySide2.QtGui import QSyntaxHighlighter, QTextCharFormat, QColor, QFont, QCursor, QBrush, QTextBlock -color_scheme_intellij = {'keyword': '#101e96'} -color_scheme_dark = {'keyword': '#b7602f'} +from ...utils.font_config import FontConfig +from ...utils.highlighter.base_highlighter import BaseHighlighter - -class FontConfig(): - def __init__(self): - """ - color是16位标准的。 - bold有以下几种选择。 - QFont::Thin 0 0 - QFont::ExtraLight 12 12 - QFont::Light 25 25 - QFont::Normal 50 50 - QFont::Medium 57 57 - QFont::DemiBold 63 63 - QFont::Bold 75 75 - QFont::ExtraBold 81 81 - QFont::Black - """ - self.font_size = 15 - self.settings = {'normal': {'color': Qt.black, 'bold': QFont.Normal}, - 'keyword': {'color': Qt.darkBlue, 'bold': QFont.ExtraBold}, - 'builtin': {'color': Qt.darkRed, 'bold': QFont.Normal}, - 'constant': {'color': Qt.darkGreen, 'bold': QFont.Normal}, - 'decorator': {'color': Qt.darkBlue, 'bold': QFont.Normal}, - 'comment': {'color': Qt.darkGreen, 'bold': QFont.Normal}, - 'string': {'color': Qt.darkYellow, 'bold': QFont.Normal}, - 'number': {'color': Qt.darkMagenta, 'bold': QFont.Normal}, - 'error': {'color': Qt.darkRed, 'bold': QFont.Normal}, - 'pyqt': {'color': Qt.darkCyan, 'bold': QFont.Normal} - } - # self.load_color_scheme(color_scheme_intellij) - - def load_color_scheme(self, scheme: Dict[str, str]): - for name in scheme: - assert name in self.settings.keys() - self.set_font_color(name, scheme[name]) - - def set_font_color(self, font_name: str, font_color: str): - assert font_name in self.settings.keys() - self.settings[font_name]['color'] = font_color - - def get_font_color(self, font_name: str): - return self.settings[font_name]['color'] - - def get_font_bold(self, font_name: str): - return self.settings[font_name]['bold'] - - def get_font_size(self) -> int: - return self.font_size - - -class BaseHighlighter(QSyntaxHighlighter): - ERROR = 1 - WARNING = 2 - HINT = 3 - DEHIGHLIGHT = 4 - - HIGHLIGHT_COLOR = {ERROR: QColor(255, 65, 65, 200), WARNING: QColor(255, 255, 65, 100), - HINT: QColor(155, 155, 155, 100), DEHIGHLIGHT: QColor(155, 155, 155, 100)} +logger = logging.getLogger(__name__) class PythonHighlighter(BaseHighlighter): @@ -93,10 +33,10 @@ class PythonHighlighter(BaseHighlighter): self._rehighlight_hint = True self._rehighlight_syntax = True self.KEYWORDS = ["and", "as", "assert", 'async', 'await', "break", "class", - "continue", "def", "del", "elif", "else", "except", - "exec", "finally", "for", "from", "global", "if", - "import", "in", "is", "lambda", "not", "or", "pass", - "raise", "return", "try", "while", "with", "yield"] + "continue", "def", "del", "elif", "else", "except", + "exec", "finally", "for", "from", "global", "if", + "import", "in", "is", "lambda", "not", "or", "pass", + "raise", "return", "try", "while", "with", "yield"] BUILTINS = list(builtins.__dict__.keys()) CONSTANTS = ["False", "True", "None", "NotImplemented", "Ellipsis"] @@ -250,7 +190,7 @@ class PythonHighlighter(BaseHighlighter): QSyntaxHighlighter.rehighlight(self) QApplication.restoreOverrideCursor() t1 = time.time() - print(t1 - t0, 'time.time,elapsed for rendering code', self.counter) + logger.debug(t1 - t0, 'time.time,elapsed for rendering code', self.counter) def registerHighlight(self, line_no: int, start: int, length: int, marker: int, hint: str): """ diff --git a/src/pyminer/packages/code_editor/utils/operation.py b/src/pyminer/packages/code_editor/utils/operation.py new file mode 100644 index 0000000000000000000000000000000000000000..1dd3cddc64db1c172604dea04bfa21f07017aa8b --- /dev/null +++ b/src/pyminer/packages/code_editor/utils/operation.py @@ -0,0 +1,64 @@ +from typing import Callable, List + +from PySide2.QtCore import Qt +from PySide2.QtGui import QIcon, QKeySequence +from PySide2.QtWidgets import QWidget, QAction, QShortcut + +from packages.code_editor.utils.base_object import CodeEditorBaseObject + + +class Operation(CodeEditorBaseObject): + def __init__(self, widget: QWidget, name: str, label: str, slot: Callable = None, + conditions: List[Callable[[], bool]] = None, + key: str = None, icon_name: str = None): + """绑定一个快捷键操作。 + + 这个操作可以在widget环境下直接访问,也可以添加到QMenu中。 + + Args: + widget: 需要绑定事件的小部件,似乎text_edit可以用而QWidget不行,具体没有详查 + name: 快捷键的名称,用于后面显示在设置项中,可以根据这个Name来设置并查找快捷键 + label: 显示在界面中的标签 + slot: 回调事件,如不定义回调事件,则在Menu中永远显示为不可用状态 + conditions: 根据这些条件判断是否可以调用,是一个函数的列表,每个函数都应返回一个布尔值,指示是否可用 + key: 快捷键,QSequence的参数 + icon_name: 在code_editor/assets/icons下面查找的路径 + """ + super(Operation, self).__init__() + self.widget: QWidget = widget + self.__conditions = conditions + self.name: str = name + + has_slot = slot is not None + + # 设置Action的图标 + if icon_name is None: + # 用于进行缓存,以免每次都要重新创建一个action对象 + self.__action: QAction = QAction(label, widget) + else: + icon = QIcon(self.settings.get_icon(icon_name)) + self.__action: QAction = QAction(icon, label, widget) + # noinspection PyUnresolvedReferences + has_slot and self.__action.triggered.connect(slot) + + # 设置QAction和QShortcut快捷键 + if key is not None: + qt_sequence: QKeySequence = QKeySequence(key) + self.__action.setShortcut(qt_sequence) + # noinspection PyArgumentList + has_slot and QShortcut(key, widget, context=Qt.WidgetShortcut).activated.connect(slot) + + # 如果没有定义回调事件,则直接设置这个控件为不可用状态,不过仍然显示在菜单中 + if not has_slot: + self.__action.setEnabled(False) + self.__conditions = None + + @property + def action(self) -> QAction: + """获取action对象用于创建menu,并根据当前是否可用,判断是否显示为可用状态 + + 这里采用实时计算属性来实现,因为在每次打开右键菜单时都需要判断其是否可用。 + """ + assert self.__conditions is None or len(self.__conditions) >= 1 + self.__conditions is not None and self.__action.setEnabled(all(c() for c in self.__conditions)) + return self.__action diff --git a/packages/code_editor/codeeditor/tools/Utilities/__init__.py b/src/pyminer/packages/code_editor/utils/utils.py similarity index 95% rename from packages/code_editor/codeeditor/tools/Utilities/__init__.py rename to src/pyminer/packages/code_editor/utils/utils.py index 61130c1e880724ed998ab4b0a4eb8be3e756a4e0..af4e5942ceb3705cc36b549bde9bb297ab77ab27 100644 --- a/packages/code_editor/codeeditor/tools/Utilities/__init__.py +++ b/src/pyminer/packages/code_editor/utils/utils.py @@ -1,11 +1,3 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2003 - 2020 Detlev Offenbach -# - -""" -Package implementing various functions/classes needed everywhere within eric6. -""" import os import re from codecs import BOM_UTF8, BOM_UTF16, BOM_UTF32 @@ -14,6 +6,7 @@ try: EXTSEP = os.extsep except AttributeError: EXTSEP = "." + codingBytes_regexps = [ (5, re.compile(br"""coding[:=]\s*([-\w_.]+)""")), (1, re.compile(br"""<\?xml.*\bencoding\s*=\s*['"]([-\w_.]+)['"]\?>""")), diff --git a/packages/socket_server/__init__.py b/src/pyminer/packages/code_editor/widgets/__init__.py similarity index 100% rename from packages/socket_server/__init__.py rename to src/pyminer/packages/code_editor/widgets/__init__.py diff --git a/packages/workspace_inspector/__init__.py b/src/pyminer/packages/code_editor/widgets/auto_complete_dropdown/__init__.py similarity index 100% rename from packages/workspace_inspector/__init__.py rename to src/pyminer/packages/code_editor/widgets/auto_complete_dropdown/__init__.py diff --git a/src/pyminer/packages/code_editor/widgets/auto_complete_dropdown/base_auto_complete_dropdown.py b/src/pyminer/packages/code_editor/widgets/auto_complete_dropdown/base_auto_complete_dropdown.py new file mode 100644 index 0000000000000000000000000000000000000000..a20c7fb2e2b01871b5f62fc9774f4f01c422ea75 --- /dev/null +++ b/src/pyminer/packages/code_editor/widgets/auto_complete_dropdown/base_auto_complete_dropdown.py @@ -0,0 +1,133 @@ +import logging +import os +import time +from functools import cached_property +from typing import List, Tuple, TYPE_CHECKING, Callable, Dict + +from PySide2.QtCore import Qt +from PySide2.QtGui import QIcon, QPixmap, QKeyEvent +from PySide2.QtWidgets import QTableWidget, QHeaderView, QTableWidgetItem + +from ...utils.base_object import CodeEditorBaseObject + +if TYPE_CHECKING: + from jedi.api.classes import Completion as CompletionResult + from ..text_edit.base_text_edit import PMBaseCodeEdit + +logger = logging.getLogger('code_editor.auto_complete_dropdown.base') +logger.setLevel(logging.DEBUG) + + +class BaseAutoCompleteDropdownWidget(CodeEditorBaseObject, QTableWidget): + ROLE_NAME = 15 + ROLE_TYPE = 16 + ROLE_COMPLETE = 17 + ROLE_COMPLETION = 18 + + # 为原生PySide2的类型添加类型提示 + parent: 'Callable[[], PMBaseCodeEdit]' + verticalHeader: 'Callable[[], QHeaderView]' + + def __init__(self, parent: 'PMBaseCodeEdit' = None): + super().__init__(parent) + self.verticalHeader().setDefaultSectionSize(20) + self.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) + self.horizontalHeader().hide() + self.setStyleSheet("AutoCompList{selection-background-color: #999999;}") + self.verticalHeader().setMinimumWidth(20) + # self.horizontalHeader().setMinimumWidth(300) + # self.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) + + @cached_property + def icons(self) -> Dict[str, QIcon]: + icons = {} + icon_folder = self.settings.icons_dir / 'autocomp' + for icon_file_name in os.listdir(icon_folder): + icon_abso_path = icon_folder / icon_file_name + icon1 = QIcon() # create_icon(icon_abso_path) + icon1.addPixmap(QPixmap(str(icon_abso_path)), QIcon.Normal, QIcon.Off) + logger.debug(f'loading icon {icon_file_name}') + icons[icon_file_name[:-4]] = icon1 + return icons + + def hide_autocomp(self): + """隐藏自动补全菜单并且主界面设置焦点。""" + self.hide() + self.parent().setFocus() + + def count(self): + return self.rowCount() + + def keyPressEvent(self, event: QKeyEvent) -> None: + parent = self.parent() + if self.isVisible(): + if event.key() == Qt.Key_Return or event.key() == Qt.Key_Tab: + parent._insert_autocomp() + parent.setFocus() + event.accept() + return + elif event.key() == Qt.Key_Escape: + self.hide() + parent.setFocus() + return + elif event.key() == Qt.Key_Up or event.key() == Qt.Key_Down: + super().keyPressEvent(event) + event.accept() + return + elif event.key() == Qt.Key_Left or event.key() == Qt.Key_Right: + self.hide_autocomp() + elif event.key() == Qt.Key_Control or event.key() == Qt.Key_Alt: # 按下Ctrl键时,不关闭界面,因为可能存在快捷键。 + pass + else: + if (Qt.Key_0 <= event.key() <= Qt.Key_9) and ( + event.modifiers() == Qt.ControlModifier or event.modifiers() == Qt.AltModifier): + index = event.key() - Qt.Key_0 + if 0 <= index < self.count(): + self.setCurrentItem(self.item(index, 0)) + parent._insert_autocomp() + parent.setFocus() + self.hide() + event.accept() + return + self.hide_autocomp() + event.ignore() + return + super().keyPressEvent(event) + event.ignore() + + def set_completions(self, completions: List['CompletionResult']): + """module, class, instance, function, param, path, keyword, property and statement.""" + t0 = time.time() + self.setRowCount(0) + self.setRowCount(len(completions)) + self.setColumnCount(1) + labels = [] + for i, completion in enumerate(completions): + item = QTableWidgetItem(completion.name) + item.setData(BaseAutoCompleteDropdownWidget.ROLE_NAME, completion.name) + + item.setData(BaseAutoCompleteDropdownWidget.ROLE_COMPLETION, completion) + item.setText(completion.name) + if i < 30: # 当条目数太多的时候,不能添加图标,否则速度会非常慢 + icon = self.icons.get(completion.type) + if icon is not None: + item.setIcon(icon) + + self.setItem(i, 0, item) + if 0 <= i <= 9: + labels.append(str(i)) + else: + labels.append('') + self.setVerticalHeaderLabels(labels) + self.show() + self.setFocus() + self.setCurrentItem(self.item(0, 0)) + t1 = time.time() + logger.info(f'completion time:{t1 - t0},completion list length:{len(completions)}') + + def get_complete(self, row: int) -> Tuple[str, str]: + return self.item(row, 0).data(BaseAutoCompleteDropdownWidget.ROLE_COMPLETION).complete, self.item(row, 0).data( + BaseAutoCompleteDropdownWidget.ROLE_COMPLETION).type + + def get_text(self, row: int) -> str: + return self.item(row, 0).text() diff --git a/packages/code_editor/debugger.py b/src/pyminer/packages/code_editor/widgets/debugger.py similarity index 100% rename from packages/code_editor/debugger.py rename to src/pyminer/packages/code_editor/widgets/debugger.py diff --git a/pmgwidgets/display/browser/__init__.py b/src/pyminer/packages/code_editor/widgets/dialogs/__init__.py similarity index 100% rename from pmgwidgets/display/browser/__init__.py rename to src/pyminer/packages/code_editor/widgets/dialogs/__init__.py diff --git a/packages/code_editor/codeeditor/qtpyeditor/find_gotoline.py b/src/pyminer/packages/code_editor/widgets/dialogs/find_dialog.py similarity index 46% rename from packages/code_editor/codeeditor/qtpyeditor/find_gotoline.py rename to src/pyminer/packages/code_editor/widgets/dialogs/find_dialog.py index 617dd3245098577940484b820aa4c5bd789a4139..79685eb4febe23c7c74f36e0513e428a1b75f209 100644 --- a/packages/code_editor/codeeditor/qtpyeditor/find_gotoline.py +++ b/src/pyminer/packages/code_editor/widgets/dialogs/find_dialog.py @@ -1,24 +1,29 @@ -# -*- coding:utf-8 -*- -# @Time: 2021/1/20 8:23 -# @Author: Zhanyi Hou -# @Email: 1295752786@qq.com -# @File: find_gotoline.py +from typing import Callable, TYPE_CHECKING + from PySide2.QtWidgets import QDialog, QVBoxLayout, QPushButton, QHBoxLayout + from pmgwidgets import PMGPanel +if TYPE_CHECKING: + from ...widgets.text_edit.base_text_edit import PMBaseCodeEdit + from ..editors.base_editor import PMBaseEditor + -class FindDialog(QDialog): - def __init__(self, parent=None, text_edit: 'PMCodeEditor' = None): - super(FindDialog, self).__init__(parent) - self.text_editor = text_edit - self.qsci_text_edit: 'QsciScintilla' = text_edit.textEdit - views = [('line_ctrl', 'text_to_find', self.tr('Text to Find'), ''), - ('line_ctrl', 'text_to_replace', self.tr('Text to Replace'), ''), - ('check_ctrl', 'wrap', self.tr('Wrap'), True), - ('check_ctrl', 'regex', self.tr('Regex'), False), - ('check_ctrl', 'case_sensitive', self.tr('Case Sensitive'), True), - ('check_ctrl', 'whole_word', self.tr('Whole Word'), True), - ] +class PMFindDialog(QDialog): + tr: Callable[[str], str] + + def __init__(self, parent: 'PMBaseEditor' = None): + super(PMFindDialog, self).__init__(parent) + self.text_editor = parent + self.text_edit: 'PMBaseCodeEdit' = parent.text_edit + views = [ + ('line_ctrl', 'text_to_find', self.tr('Text to Find'), ''), + ('line_ctrl', 'text_to_replace', self.tr('Text to Replace'), ''), + ('check_ctrl', 'wrap', self.tr('Wrap'), True), + ('check_ctrl', 'regex', self.tr('Regex'), False), + ('check_ctrl', 'case_sensitive', self.tr('Case Sensitive'), True), + ('check_ctrl', 'whole_word', self.tr('Whole Word'), True), + ] self.settings_panel = PMGPanel(parent=self, views=views) self.setLayout(QVBoxLayout()) self.layout().addWidget(self.settings_panel) @@ -43,6 +48,7 @@ class FindDialog(QDialog): def search_up(self): settings = self.settings_panel.get_value() self.text_editor.search_word(forward=True, **settings) + pass def search_down(self): @@ -51,65 +57,41 @@ class FindDialog(QDialog): 这似乎是QSciScintilla的bug. """ settings = self.settings_panel.get_value() - line, index = self.text_editor.textEdit.getSelection()[:2] - self.text_editor.search_word(forward=False, **settings, line=line, index=index) + self.text_editor.search_word(forward=False, **settings) pass def replace_current(self): text: str = self.settings_panel.widgets_dic['text_to_replace'].get_value() - if self.qsci_text_edit.hasSelectedText(): - self.qsci_text_edit.replace(text) + if self.text_edit.is_text_selected: + self.text_edit.replace_selection(text) + self.search_up() def replace_all(self): settings = self.settings_panel.get_value() text_to_replace = self.settings_panel.widgets_dic['text_to_replace'].get_value() - while (1): + while 1: b = self.text_editor.search_word(forward=True, **settings) if b: - self.qsci_text_edit.replace(text_to_replace) + self.text_edit.replace_selection(text_to_replace) + else: break def show(self) -> None: super().show() - if self.qsci_text_edit.hasSelectedText(): - self.settings_panel.set_value({'text_to_find': self.qsci_text_edit.selectedText()}) + if self.text_edit.selected_code != '': + self.settings_panel.set_value({'text_to_find': self.text_edit.selected_code}) + + def show_replace_actions(self, replace_on: bool = False): + self.settings_panel.get_ctrl('text_to_replace').setVisible(replace_on) + self.button_replace.setVisible(replace_on) + self.button_replace_all.setVisible(replace_on) def closeEvent(self, a0: 'QCloseEvent') -> None: - sel = self.qsci_text_edit.getCursorPosition() - self.qsci_text_edit.setSelection(sel[0], sel[1], sel[0], sel[1]) + pass + # sel = self.text_edit.getCursorPosition() + # self.text_edit.setSelection(sel[0], sel[1], sel[0], sel[1]) def close(self) -> bool: return False - -# class GotoLineDialog(QDialog, Ui_DialogGoto): -# """跳转指定行""" -# -# def __init__(self, editor: 'PMCodeEditor', *args, **kwargs): -# super(GotoLineDialog, self).__init__(*args, **kwargs) -# self.setupUi(self) -# self.editor = editor -# self.buttonBox.accepted.connect(self.slot_accepted) -# line, column = editor.getCursorPosition() -# self.lineEdit.setText('%s:%s' % (line + 1, column + 1)) -# self.lineEdit.setFocus() -# self.lineEdit.selectAll() -# -# def slot_accepted(self): -# """ -# 跳转到对应行列 -# :return: -# """ -# text = re.findall(r'^\d+$|^\d+:\d+$', self.lineEdit.text().strip()) -# if not text: -# return -# text = text[0] -# if text.find(':') == -1: -# text += ':0' -# try: -# line, column = text.split(':') -# self.editor.setCursorPosition(max(0, int(line) - 1), max(0, int(column) - 1)) -# self.accept() -# except Exception as e: -# logger.warning(str(e)) diff --git a/src/pyminer/packages/code_editor/widgets/dialogs/goto_line_dialog.py b/src/pyminer/packages/code_editor/widgets/dialogs/goto_line_dialog.py new file mode 100644 index 0000000000000000000000000000000000000000..e7960016b29b8d93a11fba8a9460455aca2482ce --- /dev/null +++ b/src/pyminer/packages/code_editor/widgets/dialogs/goto_line_dialog.py @@ -0,0 +1,53 @@ +from typing import Callable + +from PySide2.QtWidgets import QDialog, QMessageBox + +from ..ui.gotoline import Ui_DialogGoto + + +class PMGotoLineDialog(QDialog, Ui_DialogGoto): + tr: Callable[[str], str] + + def __init__(self, parent=None): + super(PMGotoLineDialog, self).__init__(parent) + self.current_line = -1 + self.max_row_count = 0 + self.setupUi(self) + self.buttonBox.accepted.connect(self.run_goto) + self.buttonBox.rejected.connect(self.reject) + + def set_max_row_count(self, length: int): + """ + 设置最大可跳转的行数 + :param length: + :return: + """ + self.max_row_count = length + + def set_current_line(self, line: int): + """ + line:从0开始 + :param line: + :return: + """ + self.current_line = line + self.lineEdit.setText(str(line + 1)) + + def run_goto(self): + """ + 跳转到行 + :return: + """ + text = self.lineEdit.text() + if not text.isdecimal(): + QMessageBox.warning(self, self.tr('Input Value Error'), self.tr('Cannot convert \'%s\' to integer.') % text) + return + line = int(text) + if not 0 <= line < self.max_row_count: + QMessageBox.warning(self, self.tr('Input Value Error'), + self.tr('Line Number {line} out of range!').format(line=line)) + return + self.accept() + + def get_line(self) -> int: + return int(self.lineEdit.text()) diff --git a/pmgwidgets/display/dynamicgraph/__init__.py b/src/pyminer/packages/code_editor/widgets/editors/__init__.py similarity index 100% rename from pmgwidgets/display/dynamicgraph/__init__.py rename to src/pyminer/packages/code_editor/widgets/editors/__init__.py diff --git a/packages/code_editor/codeeditor/qtpyeditor/codeeditor/baseeditor.py b/src/pyminer/packages/code_editor/widgets/editors/base_editor.py similarity index 32% rename from packages/code_editor/codeeditor/qtpyeditor/codeeditor/baseeditor.py rename to src/pyminer/packages/code_editor/widgets/editors/base_editor.py index bbf58f66ef1d2cdb85d19456e604dc01ead3e6ac..4f3ef1d4384963436bdad7278dbe5560c40bb16f 100644 --- a/packages/code_editor/codeeditor/qtpyeditor/codeeditor/baseeditor.py +++ b/src/pyminer/packages/code_editor/widgets/editors/base_editor.py @@ -1,9 +1,4 @@ -# -*- coding:utf-8 -*- -# @Time: 2021/1/18 9:23 -# @Author: Zhanyi Hou -# @Email: 1295752786@qq.com -# @File: baseeditor.py -# !/usr/bin/env python +#!/usr/bin/env python # -*- coding: utf-8 -*- """ @@ -31,252 +26,102 @@ Created on 2020/9/7 @description: Code Editor """ -__version__ = '0.1' - -import ast -import json import logging import os -import re import time -from itertools import groupby -from typing import TYPE_CHECKING, List, Iterable, Dict, Set, Tuple, Any -from PySide2.QtGui import QIcon, QKeySequence, QTextDocument, QTextCursor, QTextBlock, QDropEvent -from PySide2.QtCore import QDir, QCoreApplication, Qt, QPoint, Signal, QTranslator, QLocale, QUrl -from PySide2.QtWidgets import QWidget, QMessageBox, QFileDialog, QAction, QShortcut, QDialog, QVBoxLayout, QPushButton, \ - QHBoxLayout, QApplication, QLabel +from typing import Dict, Callable, TYPE_CHECKING, Type -from pmgwidgets import in_unit_test -from pmgwidgets.widgets.composited import PMGPanel -from packages.code_editor.codeeditor.qtpyeditor.ui.gotoline import Ui_DialogGoto -from packages.code_editor.codeeditor.qtpyeditor.codeeditor.abstracteditor import PMAbstractEditor +from PySide2.QtCore import SignalInstance, Signal, QDir +from PySide2.QtGui import QTextDocument, QTextCursor +from PySide2.QtWidgets import QWidget, QMessageBox, QLabel, QVBoxLayout, QFileDialog -if TYPE_CHECKING: - from packages.code_editor.codeeditor.qtpyeditor.codeedit import PMBaseCodeEdit +from features.extensions.extensionlib.extension_lib import ExtensionLib +from ..dialogs.find_dialog import PMFindDialog +from ..dialogs.goto_line_dialog import PMGotoLineDialog +from ..text_edit.base_text_edit import PMBaseCodeEdit +from ...utils.base_object import CodeEditorBaseObject +from ...utils.utils import decode logger = logging.getLogger(__name__) -class GotoLineDialog(QDialog, Ui_DialogGoto): - def __init__(self, parent=None): - super(GotoLineDialog, self).__init__(parent) - self.current_line = -1 - self.max_row_count = 0 - self.setupUi(self) - self.buttonBox.accepted.connect(self.run_goto) - self.buttonBox.rejected.connect(self.reject) - - def set_max_row_count(self, length: int): - """ - 设置最大可跳转的行数 - :param length: - :return: - """ - self.max_row_count = length - - def set_current_line(self, line: int): - """ - line:从0开始 - :param line: - :return: - """ - self.current_line = line - self.lineEdit.setText(str(line + 1)) - - def run_goto(self): - """ - 跳转到行 - :return: - """ - text = self.lineEdit.text() - if not text.isdecimal(): - QMessageBox.warning(self, self.tr('Input Value Error'), self.tr('Cannot convert \'%s\' to integer.') % text) - return - line = int(text) - if not 0 <= line < self.max_row_count: - QMessageBox.warning(self, self.tr('Input Value Error'), - self.tr('Line Number {line} out of range!').format(line=line)) - return - self.accept() - - def get_line(self) -> int: - return int(self.lineEdit.text()) - - -class FindDialog(QDialog): - def __init__(self, parent=None, text_editor: 'PMGBaseEditor' = None): - super(FindDialog, self).__init__(parent) - self.text_editor = text_editor - self.text_edit: 'PMBaseCodeEdit' = text_editor.text_edit - views = [('line_ctrl', 'text_to_find', self.tr('Text to Find'), ''), - ('line_ctrl', 'text_to_replace', self.tr('Text to Replace'), ''), - ('check_ctrl', 'wrap', self.tr('Wrap'), True), - ('check_ctrl', 'regex', self.tr('Regex'), False), - ('check_ctrl', 'case_sensitive', self.tr('Case Sensitive'), True), - ('check_ctrl', 'whole_word', self.tr('Whole Word'), True), - ] - self.settings_panel = PMGPanel(parent=self, views=views) - self.setLayout(QVBoxLayout()) - self.layout().addWidget(self.settings_panel) - self.button_up = QPushButton(self.tr('Up')) - self.button_down = QPushButton(self.tr('Down')) - self.button_replace = QPushButton(self.tr('Replace')) - self.button_replace_all = QPushButton(self.tr('Replace All')) - - self.button_up.clicked.connect(self.search_up) - self.button_down.clicked.connect(self.search_down) - self.button_replace.clicked.connect(self.replace_current) - self.button_replace_all.clicked.connect(self.replace_all) - - self.button_bar = QHBoxLayout() - self.button_bar.addWidget(self.button_up) - self.button_bar.addWidget(self.button_down) - self.button_bar.addWidget(self.button_replace) - self.button_bar.addWidget(self.button_replace_all) - self.button_bar.setContentsMargins(0, 0, 0, 0) - self.layout().addLayout(self.button_bar) - - def search_up(self): - settings = self.settings_panel.get_value() - self.text_editor.search_word(forward=True, **settings) - - pass - - def search_down(self): - """ - 反方向查找。注意,简单的设置qsci的forward=False是不够的,还需要对位置进行处理。 - 这似乎是QSciScintilla的bug. - """ - settings = self.settings_panel.get_value() - self.text_editor.search_word(forward=False, **settings) - - pass - - def replace_current(self): - text: str = self.settings_panel.widgets_dic['text_to_replace'].get_value() - if self.text_edit.hasSelectedText(): - self.text_edit.replace(text) - self.search_up() - - def replace_all(self): - settings = self.settings_panel.get_value() - text_to_replace = self.settings_panel.widgets_dic['text_to_replace'].get_value() - while (1): - b = self.text_editor.search_word(forward=True, **settings) - if b: - self.text_edit.replace(text_to_replace) - - else: - break - - def show(self) -> None: - super().show() - if self.text_edit.getSelectedText() != '': - self.settings_panel.set_value({'text_to_find': self.text_edit.getSelectedText()}) - - def show_replace_actions(self, replace_on: bool = False): - self.settings_panel.get_ctrl('text_to_replace').setVisible(replace_on) - self.button_replace.setVisible(replace_on) - self.button_replace_all.setVisible(replace_on) - - def closeEvent(self, a0: 'QCloseEvent') -> None: - pass - # sel = self.text_edit.getCursorPosition() - # self.text_edit.setSelection(sel[0], sel[1], sel[0], sel[1]) +class PMBaseEditor(CodeEditorBaseObject, QWidget): + """ + 这个类仅作为布局管理一些辅助内容,例如显示行号、列号等内容。 + 所有实际的代码操作都应写在TextEdit里面。 + """ - def close(self) -> bool: - return False + # 用于子类继承时的配置项 + text_edit_class: Type['PMBaseCodeEdit'] = None # 定义实际的代码编辑区对象 + text_edit: 'PMBaseCodeEdit' + signal_focused_in: SignalInstance # 编辑器获得焦点,是TextEdit的相关信号的直接引用 + signal_new_requested: SignalInstance = Signal(str, int) # 文件路径;文件的打开模式(目前都是0) + signal_save_requested: SignalInstance = Signal() + signal_request_find_in_path: SignalInstance = Signal(str) -class PMGBaseEditor(PMAbstractEditor): - signal_focused_in: Signal = None - signal_new_requested: Signal = Signal(str, int) # 文件路径;文件的打开模式(目前都是0) - signal_save_requested: Signal = Signal() - signal_request_find_in_path: Signal = Signal(str) + # 子控件的类型提示 + find_dialog: 'PMFindDialog' + goto_line_dialog: 'PMGotoLineDialog' + find_dialog: 'PMFindDialog' + extension_lib: 'ExtensionLib' - def __init__(self, parent): - app = QApplication.instance() - trans_editor_tb = QTranslator() - app.trans_editor_tb = trans_editor_tb - trans_editor_tb.load( - os.path.join(os.path.dirname(__file__), 'translations', 'qt_%s.qm' % QLocale.system().name())) - app.installTranslator(trans_editor_tb) + # 为PySide2内置函数添加代码提示 + if TYPE_CHECKING: + layout: Callable[[], QVBoxLayout] + def __init__(self, parent=None): super().__init__(parent) - self.find_dialog: 'FindDialog' = None - self.goto_line_dialog: 'GotoLineDialog' = None - self.last_save_time = 0 - self._path = '' - self._modified = False - self.text_edit: 'PMBaseCodeEdit' = None - self._extension_names: List[str] = [] # 该编辑器支持的文件名 - self._indicator_dict: Dict[str, str] = {} - self.line_number_area = QWidget() - self.line_number_area.setMaximumHeight(60) - self.line_number_area.setMinimumHeight(20) - self.status_label = QLabel() - line_number_area_layout = QHBoxLayout() - line_number_area_layout.addWidget(self.status_label) - line_number_area_layout.setContentsMargins(0, 0, 0, 0) - self.line_number_area.setLayout(line_number_area_layout) - self.modified_status_label = QLabel() - self.modified_status_label.setText('') - line_number_area_layout.addWidget(self.modified_status_label) - - def set_edit(self, edit: 'PMBaseCodeEdit'): - self.text_edit = edit + # 设置布局 + layout = QVBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + self.setLayout(layout) + + # 设置实际的代码编辑区 + assert self.text_edit_class is not None + self.text_edit: 'PMBaseCodeEdit' = self.text_edit_class(self) self.signal_focused_in = self.text_edit.signal_focused_in self.text_edit.signal_save.connect(self.save) self.text_edit.signal_text_modified.connect(lambda: self.slot_modification_changed(True)) + + # 代码发生变化后,改变代码行号的显示 self.text_edit.cursorPositionChanged.connect(self.show_cursor_pos) + self.text_edit.signal_file_dropped.connect(lambda name: self.signal_new_requested.emit(name, 0)) - self.find_dialog = FindDialog(parent=self, text_editor=self) - self.goto_line_dialog = GotoLineDialog(parent=self) - layout = QVBoxLayout() - layout.setContentsMargins(0, 0, 0, 0) - self.setLayout(layout) self.layout().addWidget(self.text_edit) - self.layout().addWidget(self.status_label) - def layout(self) -> QVBoxLayout: - return super(PMGBaseEditor, self).layout() + # 设置底部状态栏 + self.status_bar = QLabel() + self.layout().addWidget(self.status_bar) - def show_cursor_pos(self): - row = self.text_edit.textCursor().block().blockNumber() - col = self.text_edit.textCursor().columnNumber() - self.status_label.setText( - '行:{row},列:{col}'.format(row=row + 1, col=col + 1)) + # 设置各个对话框 + self.find_dialog = PMFindDialog(parent=self) + self.goto_line_dialog = PMGotoLineDialog(parent=self) - def set_shortcut(self): - pass + self.last_save_time = 0 + self._indicator_dict: Dict[str, str] = {} - def update_settings(self, settings: Dict[str, Any]): - pass + @property + def _path(self): + return self.text_edit.path - def slot_text_edit_focusedin(self, e): - pass + @_path.setter + def _path(self, value): + self.text_edit.path = value + + def set_lib(self, extension_lib): + self.extension_lib = extension_lib + + def show_cursor_pos(self): + row, col = self.text_edit.cursor_position + self.status_bar.setText(f'行:{row + 1},列:{col + 1}') def goto_line(self, line_no: int): - """ - 跳转到对应行列 - :return: - """ - doc: QTextDocument = self.text_edit.document() - lines = doc.blockCount() - assert 1 <= line_no <= lines - pos = doc.findBlockByLineNumber(line_no - 1).position() - text_cursor: QTextCursor = self.text_edit.textCursor() - text_cursor.setPosition(pos) - self.text_edit.setTextCursor(text_cursor) - - def _init_lexer(self, lexer: 'QsciLexer') -> None: - """ - 初始化语法解析器 + """跳转到对应行列 - :return: None - """ - pass + TODO 这个函数应当是属于text_edit的功能""" + self.text_edit.go_to_line(line_no) def search_word(self, text_to_find: str, wrap: bool, regex: bool, case_sensitive: bool, whole_word: bool, forward: bool, index=-1, line=-1, **kwargs) -> bool: @@ -293,8 +138,7 @@ class PMGBaseEditor(PMAbstractEditor): find_flags = QTextDocument.FindFlags # print(find_flags) ret = self.text_edit.find(text_to_find, options=find_flags) - cursor_pos = self.text_edit.getCursorPosition() - print(ret, wrap) + cursor_pos = self.text_edit.get_cursor_position() if wrap and (not ret): cursor = self.text_edit.textCursor() cursor.clearSelection() @@ -313,10 +157,7 @@ class PMGBaseEditor(PMAbstractEditor): self.text_edit.setTextCursor(cursor) return ret - def autocomp(self): - pass - - def get_word_under_cursor(self): + def auto_completion(self): pass def set_text(self, text: str) -> None: @@ -337,26 +178,21 @@ class PMGBaseEditor(PMAbstractEditor): :type: bool :return: None """ - self._modified = modified self.text_edit.modified = modified self.slot_modification_changed(modified) def load_file(self, path: str) -> None: - """ - 加载文件 + """加载文件 - :param path: 文件路径 - :type path: str - :return: None + Args: + path: str, 需要打开的文件路径 """ - from packages.code_editor.codeeditor.qtpyeditor.Utilities import decode self._path = '' try: # 读取文件内容并加载 with open(path, 'rb') as fp: text = fp.read() text, coding = decode(text) - self.set_encoding(coding) self.set_text(text) self.set_modified(False) self.text_edit.set_eol_status() @@ -370,15 +206,6 @@ class PMGBaseEditor(PMAbstractEditor): self.last_save_time = time.time() self.set_modified(False) - def set_encoding(self, encoding: str): - """ - 设置文本编码,仅支持 ASCII 和 UTF-8 - - :param encoding: ascii or gbk or utf-8 - :type: str - :return: - """ - def slot_about_close(self, save_all=False) -> QMessageBox.StandardButton: """ 是否需要关闭以及保存 @@ -386,17 +213,13 @@ class PMGBaseEditor(PMAbstractEditor): :param save_all: 当整个窗口关闭时增加是否全部关闭 :return:QMessageBox.StandardButton """ - # QCoreApplication.translate = QCoreApplication.translate - if not self._modified: + if not self.is_modified: return QMessageBox.Discard - buttons = QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel if save_all: buttons |= QMessageBox.SaveAll # 保存全部 buttons |= QMessageBox.NoToAll # 放弃所有 - ret = QMessageBox.question(self, QCoreApplication.translate('PMGBaseEditor', 'Save'), - QCoreApplication.translate('PMGBaseEditor', 'Save file "{0}"?').format( - self.filename()), buttons, + ret = QMessageBox.question(self, self.tr('Save'), self.tr('Save file "{0}"?').format(self.filename()), buttons, QMessageBox.Save) if ret == QMessageBox.Save or ret == QMessageBox.SaveAll: if not self.save(): @@ -427,33 +250,23 @@ class PMGBaseEditor(PMAbstractEditor): self.save() self.set_modified(False) - def slot_text_changed(self) -> None: - pass - - def is_temp_file(self) -> bool: - """ - 返回文件是否为临时文件 - :return: - """ - tmp_path = QDir.tempPath().replace('\\', '/') - if self._path.replace('\\', '/').startswith(tmp_path): - return True - else: - return False + @property + def default_save_directory(self): + """默认的存储路径""" + return self.extension_lib.Program.get_work_dir() def save(self) -> bool: + """保存文件时调用的方法 + + If the file is not saved yet, the qfiledialog will open save dialog at default_dir,generated by get_default_dir + method. """ - The method call when saving files. - If the file is not saved yet, the qfiledialog will open save dialog at default_dir,generated by get_default_dir method. - :return: - """ - QCoreApplication.translate = QCoreApplication.translate path = self._path.replace(os.sep, '/') - default_dir = self.default_save_path() + default_dir = self.default_save_directory if path.startswith(QDir.tempPath().replace(os.sep, '/')): assert os.path.exists(default_dir) or default_dir == '' # 弹出对话框要求选择真实路径保存 - path, ext = QFileDialog.getSaveFileName(self, QCoreApplication.translate("PMGBaseEditor", 'Save file'), + path, ext = QFileDialog.getSaveFileName(self, self.tr('Save file'), default_dir, filter='*.py') @@ -475,6 +288,10 @@ class PMGBaseEditor(PMAbstractEditor): logger.warning(str(e)) return False + @property + def is_modified(self): + return self.text_edit.modified + def modified(self) -> bool: """ 返回内容是否被修改 @@ -482,24 +299,25 @@ class PMGBaseEditor(PMAbstractEditor): :rtype: bool :return: 返回内容是否被修改 """ - return self._modified + return self.is_modified - def filename(self) -> str: + def is_temp_file(self) -> bool: """ - 返回当前文件名 - - :rtype: str - :return: 返回当前文件名 + 返回文件是否为临时文件 + :return: """ + tmp_path = QDir.tempPath().replace('\\', '/') + if self._path.replace('\\', '/').startswith(tmp_path): + return True + else: + return False + + def filename(self) -> str: + """返回当前文件名""" return os.path.basename(self._path) def path(self) -> str: - """ - 返回当前文件路径 - - :rtype: str - :return: 返回当前文件路径 - """ + """返回当前文件路径""" return self._path def set_path(self, path: str) -> None: @@ -520,190 +338,33 @@ class PMGBaseEditor(PMAbstractEditor): self.setWindowTitle(new_title) def text(self, selected: bool = False) -> str: - """ - 返回编辑器选中或者全部内容 + """返回编辑器选中或者全部内容。 + Args: - selected: + selected: True则返回选中的内容,False则返回全部内容 Returns: - + str, 选中的或全部的代码 """ - if not selected: - return self.text_edit.toPlainText() + if selected: + return self.text_edit.selected_code else: - pass + return self.text_edit.code def slot_file_modified_externally(self): - return - - def _init_actions(self) -> None: - """ - 初始化额外菜单项 - - :return: - """ - # QCoreApplication.translate = QCoreApplication.translate - self.icon_path = os.path.dirname(os.path.dirname(__file__)) # 图标文件路径 - self._action_format = QAction(QIcon(os.path.join(self.icon_path, 'icons/format.svg')), - QCoreApplication.translate("PMGBaseEditor", 'Format Code'), - self.text_edit) - self._action_run_code = QAction(QIcon(os.path.join(self.icon_path, 'icons/run.svg')), - QCoreApplication.translate("PMGBaseEditor", 'Run Code'), - self.text_edit) - self._action_run_sel_code = QAction(QIcon(os.path.join(self.icon_path, 'icons/python.svg')), - QCoreApplication.translate("PMGBaseEditor", 'Run Selected Code'), - self.text_edit) - self._action_save = QAction(QIcon(os.path.join(self.icon_path, 'icons/save.svg')), - QCoreApplication.translate("PMGBaseEditor", 'Save'), - self.text_edit) - self._action_find = QAction(QCoreApplication.translate("PMGBaseEditor", 'Find'), self.text_edit) - self._action_replace = QAction(QCoreApplication.translate("PMGBaseEditor", 'Replace'), self.text_edit) - - self._action_find_in_path = QAction(QCoreApplication.translate('PMGBaseEditor', 'Find In Path'), self.text_edit) - self._action_autocomp = QAction(QCoreApplication.translate("PMGBaseEditor", 'AutoComp'), self.text_edit) - - # 设置快捷键 - self._shortcut_format = QShortcut(QKeySequence('Ctrl+Alt+F'), self.text_edit, context=Qt.WidgetShortcut) - self._action_format.setShortcut(QKeySequence('Ctrl+Alt+F')) - - self._shortcut_autocomp = QShortcut(QKeySequence('Ctrl+P'), self.text_edit, context=Qt.WidgetShortcut) - self._action_autocomp.setShortcut(QKeySequence("Ctrl+P")) - - self._shortcut_run = QShortcut(QKeySequence('Ctrl+R'), self.text_edit, context=Qt.WidgetShortcut) - self._action_run_code.setShortcut(QKeySequence('Ctrl+R')) - - self._shortcut_run_sel = QShortcut(QKeySequence('F9'), self.text_edit, context=Qt.WidgetShortcut) - self._action_run_sel_code.setShortcut(QKeySequence('F9')) - - self._action_save.setShortcut(QKeySequence('Ctrl+S')) - self._shortcut_save = QShortcut(QKeySequence('Ctrl+S'), self.text_edit, context=Qt.WidgetShortcut) - - self._action_find.setShortcut(QKeySequence('Ctrl+F')) - self._shortcut_find = QShortcut(QKeySequence('Ctrl+F'), self.text_edit, context=Qt.WidgetShortcut) - - self._action_replace.setShortcut(QKeySequence('Ctrl+H')) - self._shortcut_replace = QShortcut(QKeySequence('Ctrl+H'), self.text_edit, context=Qt.WidgetShortcut) - - self._action_find_in_path.setShortcut(QKeySequence('Ctrl+Shift+F')) - self._shortcut_find_in_path = QShortcut(QKeySequence('Ctrl+Shift+F'), self.text_edit, context=Qt.WidgetShortcut) - - self._shortcut_goto = QShortcut(QKeySequence('Ctrl+G'), self.text_edit, context=Qt.WidgetShortcut) - - self._action_add_breakpoint = QAction(QIcon(os.path.join(self.icon_path, 'icons/breakpoint.svg')), - QCoreApplication.translate("PMGBaseEditor", 'Add Breakpoint'), - self.text_edit) - self._action_remove_breakpoint = QAction(QCoreApplication.translate("PMGBaseEditor", 'Remove Breakpoint'), - self.text_edit) - - self._action_view_breakpoints = QAction(QCoreApplication.translate("PMGBaseEditor", 'View BreakPoints'), - self.text_edit) - - def _init_signals(self): - """ - 初始化信号绑定 - - :return: None - """ - - # 绑定获得焦点信号 - self.text_edit.signal_focused_in.connect(self.slot_text_edit_focusedin) - # 绑定光标变化信号 - self.text_edit.cursorPositionChanged.connect(self.slot_cursor_position_changed) - # 绑定内容改变信号 - self.text_edit.textChanged.connect(self.slot_text_changed) - # 绑定选中变化信号 - self.text_edit.selectionChanged.connect(self.slot_selection_changed) - # 绑定是否被修改信号 - # self.text_edit.signal_modification)_Changed.connect(self.slot_modification_changed) - # 绑定右键菜单信号 - self.text_edit.customContextMenuRequested.connect(self.slot_custom_context_menu_requested) - # 绑定快捷键信号 - self._action_format.triggered.connect(self.slot_code_format) - self._shortcut_format.activated.connect(self.slot_code_format) - self._action_run_code.triggered.connect(self.slot_code_run) - self._shortcut_run.activated.connect(self.slot_code_run) - self._action_run_sel_code.triggered.connect(self.slot_code_sel_run) - self._shortcut_run_sel.activated.connect(self.slot_code_sel_run) - - self._shortcut_save.activated.connect(self.slot_save) - self._action_save.triggered.connect(self.slot_save) - - self._action_find.triggered.connect(self.slot_find) - self._action_replace.triggered.connect(self.slot_replace) - - self._shortcut_find.activated.connect(self.slot_find) - self._shortcut_replace.activated.connect(self.slot_replace) - - self._action_find_in_path.triggered.connect(self.slot_find_in_path) - self._shortcut_find_in_path.activated.connect(self.slot_find_in_path) - - self._action_autocomp.triggered.connect(self.autocomp) - self._shortcut_autocomp.activated.connect(self.autocomp) - - self._shortcut_goto.activated.connect(self.slot_goto_line) - - # self._action_add_breakpoint.triggered.connect(self.slot_add_breakpoint_triggered) - # self._action_remove_breakpoint.triggered.connect(self.slot_remove_breakpoint_triggered) - - # self._action_view_breakpoints.triggered.connect(self.view_break_points) - - def slot_cursor_position_changed(self): - pass - - def slot_selection_changed(self) -> None: - """ - 选中内容变化槽函数 - - :return: None - """ - - def create_context_menu(self) -> 'QMenu': - """ - 创建上下文菜单。 - :return: - """ - menu = self.text_edit.createStandardContextMenu() - - # 遍历本身已有的菜单项做翻译处理 - # 前提是要加载了Qt自带的翻译文件 - for action in menu.actions(): - action.setText(QCoreApplication.translate('QTextControl', action.text())) - # 添加额外菜单 - menu.addSeparator() - menu.addAction(self._action_format) - menu.addAction(self._action_run_code) - menu.addAction(self._action_run_sel_code) - menu.addAction(self._action_save) - menu.addAction(self._action_find) - menu.addAction(self._action_replace) - menu.addAction(self._action_find_in_path) - menu.addAction(self._action_add_breakpoint) - menu.addAction(self._action_remove_breakpoint) - menu.addAction(self._action_view_breakpoints) - # menu.addAction(self) - return menu - - def slot_custom_context_menu_requested(self, pos: QPoint) -> None: - """ - 右键菜单修改 + self.last_save_time = time.time() - :param pos: - :type pos: QPoint - :return: None - """ - menu = self.create_context_menu() - # 根据条件决定菜单是否可用 - enabled = len(self.text().strip()) > 0 - self._action_format.setEnabled(enabled) - self._action_run_code.setEnabled(enabled) - # self._action_run_sel_code.setEnabled(self.textEdit.hasSelectedText()) - self._action_run_sel_code.setEnabled(enabled) - menu.exec_(self.text_edit.mapToGlobal(pos)) - del menu + def change_color_scheme(self, color_scheme_name: str): + if color_scheme_name == 'dark': + self.text_edit.load_color_scheme({'keyword': '#b7602f'}) + elif color_scheme_name == 'light': + self.text_edit.load_color_scheme({'keyword': '#101e96'}) + else: + raise ValueError('unrecognized input color scheme name %s' % color_scheme_name) def slot_find_in_path(self): - sel = self.text_edit.getSelectedText() - self.signal_request_find_in_path.emit(sel) + selected_text = self.text_edit.selected_code + self.signal_request_find_in_path.emit(selected_text) def slot_find(self): self.find_dialog.show_replace_actions(replace_on=False) @@ -718,7 +379,7 @@ class PMGBaseEditor(PMAbstractEditor): self.goto_line_dialog.set_max_row_count(self.text_edit.blockCount()) ret = self.goto_line_dialog.exec_() if ret: - self.goto_line(self.goto_line_dialog.get_line()) + self.text_edit.go_to_line(self.goto_line_dialog.get_line()) def set_indicators(self, msg, clear=True): """ @@ -727,10 +388,6 @@ class PMGBaseEditor(PMAbstractEditor): """ pass - def change_color_scheme(self, color_scheme_name: str): - if color_scheme_name == 'dark': - self.text_edit.load_color_scheme({'keyword': '#b7602f'}) - elif color_scheme_name == 'light': - self.text_edit.load_color_scheme({'keyword': '#101e96'}) - else: - raise ValueError('unrecognized input color scheme name %s' % color_scheme_name) + def instant_boot(self): + """快速启动,暂不理解其作用""" + self._not_implemented_error(self.tr('instant boot')) diff --git a/packages/code_editor/codeeditor/markdowneditor.py b/src/pyminer/packages/code_editor/widgets/editors/markdown_editor.py similarity index 35% rename from packages/code_editor/codeeditor/markdowneditor.py rename to src/pyminer/packages/code_editor/widgets/editors/markdown_editor.py index bacfa24bc72a671c979422dd6a0fbcb709266a0b..794904ef2c336b7513ed41b5a067d767225fbf67 100644 --- a/packages/code_editor/codeeditor/markdowneditor.py +++ b/src/pyminer/packages/code_editor/widgets/editors/markdown_editor.py @@ -1,67 +1,27 @@ -import os -import time import re +import time + from PySide2.QtWidgets import QHBoxLayout, QMessageBox -from PySide2.QtGui import QKeyEvent, QFocusEvent, QMouseEvent -from PySide2.QtCore import Qt from packages.qt_vditor.client import Window -from packages.code_editor.codeeditor.abstracteditor import PMAbstractEditor +from .base_editor import PMBaseEditor -from pmgwidgets import in_unit_test - -class PMMarkdownEditor(PMAbstractEditor): +class PMMarkdownEditor(PMBaseEditor): def __init__(self, parent=None): super(PMMarkdownEditor, self).__init__(parent=parent) + # TODO 不应该直接引用qt_vditor,而是应该走interface self.textEdit = Window(url='http://127.0.0.1:5000/qt_vditor') self._path = '' self.setLayout(QHBoxLayout()) self.layout().setContentsMargins(0, 0, 0, 0) self.layout().addWidget(self.textEdit) - def set_lib(self, extension_lib): - """ - 获取extension_lib插件扩展库 - Args: - extension_lib: - - Returns: - - """ - self.extension_lib = extension_lib - def load_file(self, path: str): - """ - 加载文件 - Args: - path: - - Returns: - - """ + """加载文件""" self._path = path self.textEdit.load_file(path) - def update_settings(self, settings): - """ - 加载编辑器的设置 - Args: - settings: - - Returns: - - """ - pass - - def filename(self): - """ - 获取当前文件名 - Returns: - - """ - return os.path.basename(self._path) - def modified(self) -> bool: """ 获取当前文件是否被修改 @@ -70,42 +30,10 @@ class PMMarkdownEditor(PMAbstractEditor): """ return False - def slot_about_close(self, save_all=False): - """ - 当点击右上角叉号时触发的方法,如果检测到未保存的更改,会阻止关闭并弹出窗口让用户确认保存。 - Args: - save_all: - - Returns: - - """ - - if not self.modified(): - return QMessageBox.Discard - buttons = QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel - if save_all: - buttons |= QMessageBox.SaveAll # 保存全部 - buttons |= QMessageBox.NoToAll # 放弃所有 - ret = QMessageBox.question(self, self.tr('Save'), self.tr('Save file "{0}"?').format(self.filename()), buttons, - QMessageBox.Save) - if ret == QMessageBox.Save or ret == QMessageBox.SaveAll: - if not self.save(): - return QMessageBox.Cancel - return ret - def slot_save(self) -> None: self.textEdit.save_file() self.last_save_time = time.time() - def slot_file_modified_externally(self): - self.last_save_time = time.time() - - def keyPressEvent(self, a0: QKeyEvent) -> None: - super().keyPressEvent(a0) - if a0.key() == Qt.Key_S and a0.modifiers() == Qt.ControlModifier: - self.slot_save() - print(a0) - def get_code(self) -> str: with open(self._path, 'r', encoding='utf8') as f: text = f.read() @@ -115,7 +43,3 @@ class PMMarkdownEditor(PMAbstractEditor): return '' else: return code_blocks[0] - - def mousePressEvent(self, a0: QMouseEvent) -> None: - print('mouse pressed') - super(PMMarkdownEditor, self).mousePressEvent(a0) diff --git a/packages/code_editor/codeeditor/pythoneditor.py b/src/pyminer/packages/code_editor/widgets/editors/python_editor.py similarity index 60% rename from packages/code_editor/codeeditor/pythoneditor.py rename to src/pyminer/packages/code_editor/widgets/editors/python_editor.py index 3fcf3e6dc798311457c9a6b4a89bbdd5f086feb9..e64bd59b0b797a11f527cc593e9b94e488ae3a76 100644 --- a/packages/code_editor/codeeditor/pythoneditor.py +++ b/src/pyminer/packages/code_editor/widgets/editors/python_editor.py @@ -11,106 +11,76 @@ Created on 2020/9/7 输入if __name__=='__main__':可以触发运行全部代码的功能。 按照PyMiner控件协议,输入# mkval后面接pmgwidgets控件表达式,可以触发控件编辑按钮。 """ +# -*- coding:utf-8 -*- +# +# 代码高亮部分来源: +# https://blog.csdn.net/xiaoyangyang20/article/details/68923133 +# +# 窗口交互逻辑为本人原创,转载请注明出处! +# +# 自动补全借用了Jedi库,能够达到不错的体验。 +# 文本编辑器采用了一个QThread作为后台线程,避免补全过程发生卡顿。后台线程会延迟结果返回, +# 返回时如果光标位置未发生变化,则可以显示补全菜单,否则认为文本已经改变,就应当进行下一次补全操作。 + +# @Time: 2021/1/18 8:03 +# @Author: Zhanyi Hou +# @Email: 1295752786@qq.com +# @File: editor.py import ast import json import logging import os import re -from typing import List, Tuple, Optional +from functools import cached_property +from pathlib import Path +from typing import List, Tuple, Optional, TYPE_CHECKING, Callable -from PySide2.QtCore import QDir, Qt, Signal -from PySide2.QtGui import QCloseEvent, QKeySequence -from PySide2.QtWidgets import QMessageBox, QMenu, QAction, QShortcut -from yapf.yapflib import py3compat, yapf_api +from PySide2.QtCore import SignalInstance, Signal, QDir +from PySide2.QtGui import QCloseEvent +from PySide2.QtWidgets import QMessageBox -# from .baseeditor import PMBaseEditor, PMAPI -from packages.code_editor.codeeditor.qtpyeditor import PMGPythonEditor, PythonHighlighter +from pmgwidgets import in_unit_test, PMGOneShotThreadRunner, run_python_file_in_terminal, parse_simplified_pmgjson, \ + PMGPanelDialog +from .base_editor import PMBaseEditor +from ..text_edit.python_text_edit import PMPythonCodeEdit +from ...utils.highlighter.python_highlighter import PythonHighlighter -with open(os.path.join(os.path.dirname(__file__), 'flake8_trans.json'), 'rb') as f: # 打开flake8提示信息的文件翻译。 - flake8_translations = json.load(f) -show_as_errors = {'E999'} -show_as_warnings = set() -show_as_infos = {'F841', 'F401', 'F403', 'F405', 'E303'} # 分别是变量导入未使用、定义未使用、使用*导入以及无法推断可能由*导入的类型。 logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) -from pmgwidgets import in_unit_test, PMGPanelDialog, parse_simplified_pmgjson, \ - run_python_file_in_terminal, PMGOneShotThreadRunner -class PMPythonEditor(PMGPythonEditor): +class PMPythonEditor(PMBaseEditor): """ 自定义编辑器控件 """ - signal_goto_definition = Signal(str, int, int) + signal_goto_definition: SignalInstance = Signal(str, int, int) + + SHOW_AS_ERROR = {'E999'} + SHOW_AS_WARNING = set() + SHOW_AS_INFO = {'F841', 'F401', 'F403', 'F405', 'E303'} # 分别是变量导入未使用、定义未使用、使用*导入以及无法推断可能由*导入的类型。 + help_runner: 'PMGOneShotThreadRunner' + + text_edit_class = PMPythonCodeEdit + if TYPE_CHECKING: + tr: Callable[[str], str] def __init__(self, parent=None): super(PMPythonEditor, self).__init__(parent) # , comment_string='# ') self.browser_id = None - self._extension_names.append('.py') self._parent = parent - # self._init_editor() - # self._init_lexer(QsciLexerPython(self.text_edit)) - # self._init_apis() - # 编辑器主题 - # self.slot_set_theme(self._theme) - self.extension_lib = None self.last_hint = '' - self.help_runner: 'PMGOneShotThreadRunner' = None - self.prepare_actions() - - # self.marker_update_timer = QTimer() - # self.marker_update_timer.start(1000) - # self.marker_update_timer.timeout.connect(self.set_marker_for_run) - - # self.completer = PMPythonAutocompleter() - # self.completer.signal_autocomp_parsed.connect(self.set_api) - - def prepare_actions(self): - self._init_actions() - self._init_signals() - - def set_lib(self, lib): - self.extension_lib = lib - - def _init_actions(self) -> None: - """ - 初始化事件 - :return: - """ - super(PMPythonEditor, self)._init_actions() - self._action_help = QAction(self.tr('Function Help'), self.text_edit) - self._shortcut_help = QShortcut(QKeySequence('F1'), self.text_edit, context=Qt.WidgetShortcut) - self._action_help.setShortcut(QKeySequence('F1')) - - self._action_help_in_console = QAction(self.tr('Help In Console'), self.text_edit) - self._shortcut_help_in_console = QShortcut(QKeySequence('F2'), self.text_edit, context=Qt.WidgetShortcut) - self._action_help_in_console.setShortcut(QKeySequence('F2')) - - self._action_goto_definition = QAction(self.tr('Go to Definition'), self.text_edit) - self._shortcut_goto_definition = QShortcut(QKeySequence('Ctrl+B'), self.text_edit, context=Qt.WidgetShortcut) - self._action_goto_definition.setShortcut(QKeySequence('Ctrl+B')) - - self._action_help_in_console.setVisible(False) - self._action_add_breakpoint.setVisible(False) - self._action_remove_breakpoint.setVisible(False) - - def _init_signals(self) -> None: - """ - 初始化信号绑定 - 无需super,因为基类已经初始化过了。 - :return: None - """ - super(PMPythonEditor, self)._init_signals() - self._shortcut_help.activated.connect(self.get_help) - self._action_help.triggered.connect(self.get_help) + def stop_auto_complete_thread(self): + logger.info('autocomp stopped') + self.text_edit.auto_complete_thread.on_exit() - self._shortcut_help_in_console.activated.connect(self.get_help_in_console) - self._action_help_in_console.triggered.connect(self.get_help_in_console) - - self._shortcut_goto_definition.activated.connect(self.slot_goto_definition) - self._action_goto_definition.triggered.connect(self.slot_goto_definition) + @cached_property + def flake8_translations(self): + """Flake8的翻译内容""" + with open(Path(__file__).parent.parent.parent.absolute() / 'assets' / 'flake8_trans.json', 'rb') as f: + result = json.load(f) + return result def set_indicators(self, msgs: List[Tuple[int, int, str, str]], clear=True): """ @@ -146,7 +116,7 @@ class PMPythonEditor(PMGPythonEditor): self.text_edit.rehighlight() def get_message(self, msgid: str, msg: str, var_names_in_workspace: set) -> str: - """ + """获取报错信息 Args: msgid: error type such as 'F821' @@ -161,20 +131,20 @@ class PMPythonEditor(PMGPythonEditor): if msgid == 'F821' and len(matches) == 1 and matches[0].strip( '\'') in var_names_in_workspace: # 排除工作空间中已经定义的变量! return '' - message = flake8_translations.get(msgid) + message = self.flake8_translations.get(msgid) if message is not None: try: if len(matches) == 1: try: return message % matches[0] except TypeError: - return message + '(%s)' % matches[0] + return f'{message}({matches[0]})' else: return message % matches except: import traceback traceback.print_exc() - return message + '(%s)' % matches + return f'{message}({matches})' else: return msg except: @@ -207,11 +177,11 @@ class PMPythonEditor(PMGPythonEditor): :param n_type: :return: """ - if n_type == 'E999': + if n_type in self.SHOW_AS_ERROR: return PythonHighlighter.ERROR - elif n_type in show_as_infos: + elif n_type in self.SHOW_AS_INFO: return PythonHighlighter.HINT - elif n_type in show_as_warnings: + elif n_type in self.SHOW_AS_WARNING: return PythonHighlighter.WARNING if n_type.startswith('E'): @@ -245,33 +215,18 @@ class PMPythonEditor(PMGPythonEditor): return cell_text, cell_lines def get_help_in_console(self): - """ - 在console中获取帮助 - :return: - """ + """在console中获取帮助""" def show_help(help_namelist): if len(help_namelist) > 0: full_name: str = help_namelist[0].full_name - self.extension_lib.get_interface('ipython_console').run_command('help(\'%s\')' % full_name, - hidden=False) + self.interfaces.ipython_console.run_command(f'help(\'{full_name}\')', hidden=False) else: return if self.help_runner is None or self.help_runner.is_running() == False: self.help_runner = PMGOneShotThreadRunner(callback=show_help) - def get_hint(self): - pos = self.text_edit.getCursorPosition() - text = self.text(pos[0]) - try: - line = text[:pos[1] + 1] - except Exception as e: - logger.debug(e) - line = '' - hint: str = re.split(r'[;,:\./ \\!&\|\*\+\s\(\)\{\}\[\]]', line)[-1].strip() - return hint - def get_help_namelist(self) -> List: """ 获取函数的帮助 @@ -314,10 +269,9 @@ class PMPythonEditor(PMGPythonEditor): if not in_unit_test(): path = 'https://cn.bing.com/search?q=%s' % full_name if self.browser_id is None: - self.browser_id = self.extension_lib.get_interface('embedded_browser').open_url(url=path, - side='right') + self.browser_id = self.interfaces.embedded_browser.open_url(url=path, side='right') else: - self.browser_id = self.extension_lib.get_interface('embedded_browser').open_url( + self.browser_id = self.interfaces.embedded_browser.open_url( url=path, browser_id=self.browser_id, side='right') else: @@ -327,20 +281,8 @@ class PMPythonEditor(PMGPythonEditor): self.help_runner = PMGOneShotThreadRunner(self.get_help_namelist) self.help_runner.signal_finished.connect(on_namelist_received) - def slot_about_close(self, save_all=False) -> QMessageBox.StandardButton: - """ - 是否需要关闭以及保存 - - :param save_all: 当整个窗口关闭时增加是否全部关闭 - :return:QMessageBox.StandardButton - """ - return super(PMPythonEditor, self).slot_about_close(save_all) - def slot_goto_definition(self): - """ - 获取函数的definition - :return: - """ + """转到函数的定义""" jedi_name_list = self.get_help_namelist() if len(jedi_name_list) > 0: # full_name: str = jedi_name_list[0].full_name @@ -351,76 +293,12 @@ class PMPythonEditor(PMGPythonEditor): line, column = jedi_name_list[0].line, 0 path = jedi_name_list[0].module_path self.signal_goto_definition.emit(path, line, column) - logger.debug('{0},{1},{2},{3}'.format(jedi_name_list, path, line, column)) - - def slot_code_format(self): - """ - 格式化代码 - 注意,格式化之前需要保存光标的位置,格式化之后再将光标设置回当前的位置。 - :return: - """ - text = self.text().strip() - first_line = self.text_edit.textCursor().blockNumber() - if not text: - return - text = py3compat.removeBOM(text) - try: - reformatted_source, _ = yapf_api.FormatCode( - text, - filename=self.filename(), - # print_diff=True, - style_config=os.path.join(os.path.dirname(__file__), 'config', '.style.yapf') - ) - self.set_text(reformatted_source) - self.goto_line(first_line + 1) # 跳转回开始时的行 - # self.text_edit.goToLine(first_line) - except Exception as e: - logger.warning(str(e)) - lines = re.findall(r'line (\d+)\)', str(e)) - row = -1 - if lines: - # 跳转到指定行 - row = int(lines[0]) - row = row - 1 if row else 0 - col = self.text_edit.lineLength(row) - self.text_edit.setCursorPosition(row, col - 1) - # 标记波浪线 - self.text_edit.fillIndicatorRange(row, 0, row, col, self._indicator_error2) - QMessageBox.critical(self, self.tr('Error'), str(e)) - if row > -1: - # 清除被标记波浪线 - self.text_edit.clearIndicatorRange(row, 0, row, col, self._indicator_error2) - - def slot_code_sel_run(self): - """ - 运行选中代码 - - :return: - """ - text = self.text(True).strip() - if not text: - text = self.current_line_text().strip() - - self._parent.slot_run_sel(text) - - def slot_code_run(self): - """ - 运行代码 - - :return: - """ - logger.warning('run code') - text = self.text().strip() - if not text: - return - - self._parent.slot_run_script(text) + logger.debug(f'{jedi_name_list},{path},{line},{column}') def slot_run_in_terminal(self): - """ - 在终端中运行代码 + """在终端中运行代码 + 调用程序的进程管理接口。 - :return: """ text = self.text().strip() if not text: @@ -435,14 +313,10 @@ class PMPythonEditor(PMGPythonEditor): return self._parent.slot_run_script(text, self.tr( - 'Running Current Script Cell (Line %d to %d).' % (start_line + 1, start_line + lines + 1))) + f'Running Current Script Cell (Line {start_line + 1} to {start_line + lines + 1}).')) def slot_edit_widget_show(self, line): - """ - 处理显示设置控件的事件。 - :param line: - :return: - """ + """处理显示设置控件的事件。""" def get_indent(line: str): for i, s in enumerate(line): @@ -470,8 +344,8 @@ class PMPythonEditor(PMGPythonEditor): break line_text_list = self.text().split('\n') line_text_list[line] = line_text - first_visible_line = self.text_edit.firstVisibleLine() - cursor_pos = self.text_edit.getCursorPosition() + first_visible_line = self.text_edit.first_visible_line_number + cursor_pos = self.text_edit.get_cursor_position() text = '\n'.join(line_text_list) self.set_text(text) self.set_marker_for_run() @@ -485,14 +359,6 @@ class PMPythonEditor(PMGPythonEditor): traceback.print_exc() pass - def create_context_menu(self) -> 'QMenu': - print('create_context_menu') - menu = super().create_context_menu() - menu.addAction(self._action_help) - menu.addAction(self._action_help_in_console) - menu.addAction(self._action_goto_definition) - return menu - def check_mkval_expr(self, code: str) -> Optional[Tuple[str, object, List[object]]]: """ 判断一行是否满足mkval的需求。 @@ -533,10 +399,7 @@ class PMPythonEditor(PMGPythonEditor): # self.completer.worker.set_scan_task(code=self.text_edit.text(), line=pos[0], col=pos[1], path=path) def closeEvent(self, event: QCloseEvent) -> None: - self.autocomp_stop() - - def deleteLater(self) -> None: - super(PMPythonEditor, self).deleteLater() + self.stop_auto_complete_thread() - def default_save_path(self) -> str: - return self.extension_lib.Program.get_work_dir() + def instant_boot(self): + self.interfaces.application_toolbar.create_instant_boot_python_file_process(self.path()) diff --git a/packages/code_editor/codeeditor/tabwidget.py b/src/pyminer/packages/code_editor/widgets/tab_widget.py similarity index 55% rename from packages/code_editor/codeeditor/tabwidget.py rename to src/pyminer/packages/code_editor/widgets/tab_widget.py index fa0bbcc75b2371666da449048c9bfd1041b17c74..6ed28988b8b0e1b5963d8eb552ff3e6b0167df0e 100644 --- a/packages/code_editor/codeeditor/tabwidget.py +++ b/src/pyminer/packages/code_editor/widgets/tab_widget.py @@ -1,169 +1,49 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -""" -Created on 2020/9/7 -@author: Irony -@email: 892768447@qq.com -@file: widget -@description: Code Editor TabWidget - -协作者&维护者(Co-Author and supporter): -Zhanyi Hou -1295752786@qq.com - -注释为中文。若需要英文版翻译可将注释复制到翻译软件中。我们已经确认所有的注释都可以被翻译软件正确译为英文。 -All Comments are in Simplified Chinese.If you need English version, you can get the translation -via translation websites such as youdao or google. We had made sure that all comments can be correctly -translated into English by those websites. - -""" - -__version__ = '0.1' - -import sys -import cgitb import logging import os -import re +import sys import time -from contextlib import redirect_stdout -from io import StringIO -from queue import Queue -from typing import List -from typing import TYPE_CHECKING, Dict, Union, Tuple, Optional, Any +from typing import Dict, Optional, Tuple, Any, Union, Callable, TYPE_CHECKING, Iterator -from PySide2.QtCore import QDir, QObject, Signal, QThread, QTemporaryFile, QTimer +from PySide2.QtCore import QTimer, QThread, QDir from PySide2.QtGui import QCloseEvent -from PySide2.QtWidgets import QTabWidget, QFileDialog, QMessageBox, QApplication, QSizePolicy, QWidget, QComboBox -# TODO to remove (use extensionlib) -from flake8.main.application import Application +from PySide2.QtWidgets import QTabWidget, QSizePolicy, QMessageBox, QFileDialog, QComboBox, QWidget import pmgwidgets -from packages.code_editor.codeeditor.qtpyeditor import PythonHighlighter -from pmgwidgets import PMDockObject, in_unit_test, PMGFileSystemWatchdog, UndoManager - -if TYPE_CHECKING or in_unit_test(): - from packages.code_editor.codeeditor.pythoneditor import PMPythonEditor - # from packages.code_editor.codeeditor.baseeditor import PMBaseEditor - # from packages.code_editor.codeeditor.cppeditor import PMCPPEditor - # from packages.code_editor.codeeditor.cythoneditor import PMCythonEditor - from packages.code_editor.codeeditor.markdowneditor import PMMarkdownEditor - - from packages.code_editor.debugger import PMDebugConsoleTabWidget - # from packages.code_editor.codeeditor.ui.findinpath import FindInPathWidget -else: - # from codeeditor.baseeditor import PMBaseEditor - from codeeditor.pythoneditor import PMPythonEditor - # from codeeditor.cppeditor import PMCPPEditor - # from codeeditor.cythoneditor import PMCythonEditor - from codeeditor.markdowneditor import PMMarkdownEditor - -EDITOR_TYPE = Optional[Union['PMBaseEditor', 'PMCythonEditor', 'PMPythonEditor', 'PMCPPEditor', 'PMMarkdownEditor']] +from pmgwidgets import PMDockObject, UndoManager, PMGFileSystemWatchdog, in_unit_test +from .editors.python_editor import PMPythonEditor +from .ui.findinpath import FindInPathWidget +from ..utils.base_object import CodeEditorBaseObject +from ..utils.code_checker.base_code_checker import CodeCheckWorker +from ..utils.highlighter.python_highlighter import PythonHighlighter + +if TYPE_CHECKING: + from features.extensions.extensionlib.extension_lib import ExtensionLib + from .editors.base_editor import PMBaseEditor + from .editors.markdown_editor import PMMarkdownEditor + + EDITOR_TYPE = Optional[Union[PMBaseEditor, PMPythonEditor, PMMarkdownEditor, QWidget]] logger = logging.getLogger(__name__) -class CodeCheckWorker(QObject): - """ - 代码检查 - """ - checked = Signal(object, list) - - def __init__(self, *args, **kwargs): - super(CodeCheckWorker, self).__init__(*args, **kwargs) - self._queue = Queue() - self._running = True - self.background_checking = True - - def add(self, widget: 'QsciScintilla', code: str): - """ - 添加需要检测的对象 - Args: - widget: 目标编辑器 - code: 目标编辑器代码 - - Returns: - - """ - self._queue.put_nowait((widget, code)) - while self._queue.qsize() > 3: - self._queue.get(False, 0) - - def stop(self): - """ - 停止线程标志 - """ - self._running = False - - def run(self): - """ - 代码检测工作函数 - Returns: - - """ - while 1: - if not self._running: - logger.info('code checker quit') - break - if not self.background_checking: - QThread.msleep(500) - continue - if self._queue.qsize() == 0: - QThread.msleep(500) - continue - try: - widget, code = self._queue.get(False, 0.5) - # 创建临时文件 - file = QTemporaryFile(self) - file.setAutoRemove(True) - if file.open(): - with open(file.fileName(), 'wb') as fp: - fp.write(code.encode()) - file.close() - # 使用flake8检测代码 - results = [] - with StringIO() as out, redirect_stdout(out): - app = Application() - app.initialize( - ['flake8', '--exit-zero', '--config', - os.path.join(os.path.dirname(__file__), 'config', '.flake8')]) - app.run_checks([file.fileName()]) - app.report() - results = out.getvalue().split('\n') - print(results) - new_results: List[Tuple[int, int, str, str]] = [] - for ret in results: - if re.search(r'\d+:\d+:[EFW]\d+:.*?', ret): - split_list = ret.split(':') - line_no = int(split_list[0]) - column = int(split_list[1]) - error_code = split_list[2] - error_type = split_list[3] - new_results.append((line_no, column, error_code, error_type)) - # results = [ret for ret in results if re.search(r'\d+:\d+:[EFW]\d+:.*?', ret)] - - self.checked.emit(widget, new_results) # 如果为空,也应该这样做。将空列表传入可以清空所有的标记。 - file.deleteLater() - del file - except Exception as e: - logger.warning(str(e)) - - -class PMCodeEditTabWidget(QTabWidget, PMDockObject): +class PMCodeEditTabWidget(CodeEditorBaseObject, QTabWidget, PMDockObject): """ 多标签页编辑器控件 """ - extension_lib = None + extension_lib: 'ExtensionLib' = None + watchdog: Optional['PMGFileSystemWatchdog'] = None + + if TYPE_CHECKING: + widget: Callable[[int], EDITOR_TYPE] + currentWidget: Callable[[], EDITOR_TYPE] def __init__(self, *args, **kwargs): super(PMCodeEditTabWidget, self).__init__(*args, **kwargs) - # 设置其尺寸政策为x,y轴均膨胀。 + # 设置其尺寸策略为x,y轴均膨胀。 self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.setMinimumWidth(200) self._color_scheme = 'light' self._index = 0 self._current_executable = sys.executable # 设置当前可执行文件的路径。 - self._keywords = [] self._old_code = '' self._thread_check = None self._worker_check = None @@ -173,7 +53,6 @@ class PMCodeEditTabWidget(QTabWidget, PMDockObject): self.settings: Dict[str, object] = {} self.debug_widget: Optional['PMDebugConsoleTabWidget'] = None - self.watchdog: Optional['PMGFileSystemWatchdog'] = None self.cursor_pos_manager = UndoManager(stack_size=30) @@ -183,20 +62,12 @@ class PMCodeEditTabWidget(QTabWidget, PMDockObject): self.extension_lib.Data.add_data_deleted_callback(lambda name, provider: self.slot_check_code(True)) def setup_ui(self) -> None: - """ - `setup_ui`方法继承于PMDockObject,将被插件管理器直接调用。 - Returns: - - """ - # 文档模式 - self.setDocumentMode(True) - # 标签页可关闭 - self.setTabsClosable(True) - # 标签页可移动 - self.setMovable(True) + """将被插件管理器直接调用,不需要手动调用""" + self.setDocumentMode(True) # 文档模式 + self.setTabsClosable(True) # 标签页可关闭 + self.setMovable(True) # 标签页可移动 self._init_signals() - # 创建默认空白页 - self.slot_new_script() + self.slot_new_script() # 创建默认空白页 # 初始化后台检测代码线程 self._timer_check = QTimer(self) @@ -212,37 +83,26 @@ class PMCodeEditTabWidget(QTabWidget, PMDockObject): self._timer_check.start(2000) def on_work_dir_changed(self, path: str) -> None: - """ - 处理工作路径改变时候的信号 - Deal with signal when work dir changed + """处理工作路径改变时候的信号 - Args: - path: new work directory - - Returns:None + TODO 存在问题,watchdog的检测情况不够准鹕,有几种情况需要特殊考虑: + 文件在工作空间下的移动需要在工作空间文件夹下进行检测; + 外部的文件需要仅对该文件进行监测 + Args: + path: 新的工作路径 """ last_path = '' if self.watchdog is not None: last_path = self.watchdog.path if os.path.normcase(last_path) != os.path.normcase(path): - if self.watchdog is not None: - self.watchdog.observer.stop() - self.watchdog.deleteLater() + self.watchdog is not None and self.watchdog.stop() self.watchdog = PMGFileSystemWatchdog(path) self.watchdog.signal_file_modified.connect(self.on_file_modified) self.watchdog.signal_file_moved.connect(self.signal_file_moved) def signal_file_moved(self, path1, path2): - """ - 文件被移动(或者重命名)时触发的事件。 - Args: - path1: - path2: - - Returns: - - """ + """文件被移动(或者重命名)时触发的事件。""" for i in range(self.count()): editor = self.widget(i) if os.path.normcase(path1) == os.path.normcase(editor._path): @@ -270,78 +130,43 @@ class PMCodeEditTabWidget(QTabWidget, PMDockObject): If the `on_file_Modified` method is called within 1 second of the internal timestamp `last_save_time` of the editor, this event is ignored (because it is highly likely to have been issued by the editor). Since the watchdog can send multiple signals to the same file change operation, this function can be called to the same file multiple times in a short period of time (at the millisecond level), so each time the event is called, last_save_time is refreshed to prevent it Problems with multiple calls in a short period of time occur. - - Args: - path: - - Returns: - """ - logger.warning('file modified:' + path + ' at time:' + str(time.time())) + logger.warning(f'file modified:{path} at time:{str(time.time())}') editor = self.get_editor_tab_by_path(path) if editor is not None: if time.time() - editor.last_save_time > 1: editor.slot_file_modified_externally() - def get_editor_tab_by_path(self, path) -> EDITOR_TYPE: - """ - 通过路径获取编辑器。如果没有打开,则返回None - Args: - path: - - Returns: + def get_editor_tab_by_path(self, path) -> 'EDITOR_TYPE': + """通过路径获取编辑器。如果没有打开,则返回None""" + path = os.path.normcase(path) + editors = [w for w in self.all_editors if os.path.normcase(w.path()) == path] + return editors[0] if editors else None - """ - for i in range(self.count()): - w = self.widget(i) - if os.path.normcase(w.path()) == os.path.normcase(path): - return w - return None + @property + def current_editor(self): + return self.currentWidget() - def keywords(self) -> list: - """ - 返回自定义的关键词 - Returns: + @property + def current_text_edit(self): + return self.current_editor.text_edit - """ - return self._keywords + @property + def all_editors(self) -> Iterator['EDITOR_TYPE']: + yield from (self.widget(i) for i in range(self.count())) - def set_keywords(self, keywords: list): - """ - 增加额外的关键词 + @property + def all_other_editors(self): + current = self.current_editor + yield from (e for e in self.all_editors if e is not current) - :param keywords: 关键词列表 - :type: list - :return: - """ - if not isinstance(keywords, (tuple, list)): - return - self._keywords = list(keywords) - - def get_current_editor(self) -> Optional['PMPythonEditor']: + def get_current_editor(self) -> 'EDITOR_TYPE': """ get current editor Returns: """ - try: - return self.currentWidget() - except Exception as e: - logger.warning(str(e)) - return None - - def get_current_edit(self) -> Optional['QsciScintilla']: - """ - 返回当前qscintilla texteditor对象 - - Returns: Current Editor(QScintilla) - - """ - try: - return self.currentWidget().textEdit - except Exception as e: - logger.warning(str(e)) - return None + return self.current_editor def get_current_text(self, selected: bool = False) -> str: """ @@ -433,8 +258,6 @@ class PMCodeEditTabWidget(QTabWidget, PMDockObject): QMessageBox.warning(self, self.tr('Warning'), self.tr('Editor does not support file:\n%s') % path) logger.warning('Editor Cannot open path:%s!!' % path) - if self.settings is not None: - widget.update_settings(self.settings) widget.set_lib(self.extension_lib) widget.load_file(path) widget.windowTitleChanged.connect(self.slot_set_tab_text) @@ -452,7 +275,6 @@ class PMCodeEditTabWidget(QTabWidget, PMDockObject): if hasattr(widget, 'signal_request_find_in_path'): widget.signal_request_find_in_path.connect(self.slot_find_in_path) - pass self.addTab(widget, widget.filename()) self.setCurrentWidget(widget) if not pmgwidgets.in_unit_test(): # 如果不在单元测试,则切换工具条。 @@ -476,7 +298,7 @@ class PMCodeEditTabWidget(QTabWidget, PMDockObject): last_pos_result: Tuple[str, int, int] = self.cursor_pos_manager.undo() self._last_cursorpos_requested_time = time.time() if last_pos_result is not None: - if last_pos_result[1] == self.currentWidget().textEdit.getCursorPosition()[0]: + if last_pos_result[1] == self.currentWidget().textEdit.get_cursor_position()[0]: last_pos_result = self.cursor_pos_manager.undo() if last_pos_result is None: return @@ -491,7 +313,7 @@ class PMCodeEditTabWidget(QTabWidget, PMDockObject): next_pos_result: Tuple[str, int, int] = self.cursor_pos_manager.redo() self._last_cursorpos_requested_time = time.time() if next_pos_result is not None: - if next_pos_result[1] == self.currentWidget().textEdit.getCursorPosition()[0]: + if next_pos_result[1] == self.currentWidget().textEdit.get_cursor_position()[0]: next_pos_result = self.cursor_pos_manager.redo() if next_pos_result is None: return @@ -517,11 +339,7 @@ class PMCodeEditTabWidget(QTabWidget, PMDockObject): current_widget.goto_line(line_no) def slot_open_script(self): - """ - 弹出对话框选择文件 - - :return: - """ + """弹出对话框,打开选中的文件""" path, _ = QFileDialog.getOpenFileName(self, self.tr('Open File'), self.extension_lib.Program.get_work_dir(), filter='*.py') if not path or not os.path.exists(path): @@ -529,86 +347,12 @@ class PMCodeEditTabWidget(QTabWidget, PMDockObject): self.slot_new_script(path) - def slot_search_for_file(self): - """ - 搜索文件内容 - - :return: - """ - - def slot_clipboard(self): - """ - 剪贴板操作 - - :return: - """ - - def slot_print(self): - """ - 打印预览以及打印 - - :return: - """ - - def slot_search(self): - """ - 文本查找 - - :return: - """ - self.currentWidget().slot_find() - - def slot_replace(self): - """ - 文本替换 - - :return: - """ - def slot_goto_file(self, path: str, row: int, col: int): - """ - goto file - :return - """ - t0 = time.time() self.slot_new_script(path) - current_widget = self.currentWidget() - current_widget.goto_line(row) - logger.warning('goto file %s ,line %d' % (path, row)) - t1 = time.time() - print('time elapsed:', t1 - t0) - - def slot_goto(self): - """ - 跳转到指定行 - - :return: - """ - self.currentWidget().slot_goto_line() - - def slot_indent(self): - """ - 批量缩进 - (实际上连接的是同一个函数) - :return: - """ - self.get_current_editor().text_edit.on_tab() - - def slot_unindent(self): - """ - 取消缩进 - - :return: - """ - self.get_current_editor().text_edit.on_back_tab() + self.current_text_edit.go_to_line(row) def slot_check_code(self, force_update=False): - """ - 代码检查 - - :return: - """ - + """代码检查""" if not self._thread_check: return widget = self.currentWidget() @@ -632,9 +376,6 @@ class PMCodeEditTabWidget(QTabWidget, PMDockObject): """ widget.set_indicators(msgs, True) - def slot_toggle_comment(self): - self.get_current_editor().text_edit.comment() - def slot_run_script(self, code: str = '', hint: str = ''): """ 执行文件 @@ -649,31 +390,20 @@ class PMCodeEditTabWidget(QTabWidget, PMDockObject): code = code.strip() if hint == '': - hint = self.tr( - 'Run: %s') % self.get_current_filename() + hint = self.tr('Run: %s') % self.get_current_filename() elif isinstance(self.currentWidget(), PMMarkdownEditor): code = self.currentWidget().get_code() code = code.strip() if hint == '': - hint = self.tr( - 'Run Python Code inside %s') % self.get_current_filename() + hint = self.tr('Run Python Code inside %s') % self.get_current_filename() else: return if not code: return if not in_unit_test(): - self.extension_lib.get_interface('ipython_console').run_command(command=code, hint_text=hint, hidden=False) + self.interfaces.ipython_console.run_command(command=code, hint_text=hint, hidden=False) else: - logger.info('In Unit test at method \'slot_run_script\'.code is :\n%s,\nhint is :%s' % (code, hint)) - - def slot_run_sel(self, sel_text): - """ - 运行选中代码片段或光标所在行 - :param sel_text: - :return: - """ - self.extension_lib.get_interface('ipython_console').run_command(command=sel_text, hint_text=sel_text, - hidden=False) + logger.info("In Unit test at method 'slot_run_script'.code is :\n%s,\nhint is :%s" % (code, hint)) def slot_tab_close_request(self, index: int): """ @@ -683,45 +413,25 @@ class PMCodeEditTabWidget(QTabWidget, PMDockObject): :type index: int :return: """ - widget = self.widget(index) - if not widget: + editor = self.widget(index) + if not editor: return - if self.count() == 1 and not widget._modified() and not widget.text(): + if self.count() == 1 and not editor.is_modified and not editor.text(): # 不关闭 return - if widget.slot_about_close() == QMessageBox.Cancel: + if editor.slot_about_close() == QMessageBox.Cancel: return self.removeTab(index) - widget.close() - widget.deleteLater() + editor.close() + editor.deleteLater() if self.count() == 0: self._index = 0 self.slot_new_script() - def slot_run_in_terminal(self): - """ - 在终端中运行 - :return: - """ - editor: 'PMPythonEditor' = self.currentWidget() - editor.slot_run_in_terminal() - def slot_run_isolated(self): editor: 'PMPythonEditor' = self.currentWidget() path = editor.path() - self.extension_lib.get_interface('applications_toolbar').create_python_file_process(path, - self._current_executable) - - def run_sys_command(self): - pass - - def slot_save_current_script(self): - """ - 保存当前脚本 - Returns: - - """ - self.currentWidget().slot_save() + self.interfaces.application_toolbar.create_python_file_process(path, self._current_executable) def _init_signals(self): # 标签页关闭信号 @@ -763,65 +473,27 @@ class PMCodeEditTabWidget(QTabWidget, PMDockObject): self.update_interpreter_selections(combo_box) self.extension_lib.UI.get_toolbar_widget('code_editor_toolbar', 'combobox_interpreter') - # # 保存脚本 - self.extension_lib.UI.get_toolbar_widget('code_editor_toolbar', 'button_save').clicked.connect( - self.slot_save_current_script) - # 查找内容&替换 - self.extension_lib.UI.get_toolbar_widget('code_editor_toolbar', 'button_search').clicked.connect( - self.slot_search) - # 跳转到行 - self.extension_lib.UI.get_toolbar_widget('code_editor_toolbar', 'button_goto').clicked.connect( - self.slot_goto) - # 批量注释 - self.extension_lib.UI.get_toolbar_widget('code_editor_toolbar', 'button_comment').clicked.connect( - self.slot_toggle_comment) - # 取消注释 - # self.extension_lib.UI.get_toolbar_widget('code_editor_toolbar', 'button_uncomment').clicked.connect( - # self.slot_toggle_comment) - # 增加缩进 - self.extension_lib.UI.get_toolbar_widget('code_editor_toolbar', 'button_indent').clicked.connect( - self.slot_indent) - # 减少缩进 - self.extension_lib.UI.get_toolbar_widget('code_editor_toolbar', 'button_unindent').clicked.connect( - self.slot_unindent) - # 运行代码 - self.extension_lib.UI.get_toolbar_widget('code_editor_toolbar', 'button_run_script').clicked.connect( - self.slot_run_script) - - self.extension_lib.UI.get_toolbar_widget('code_editor_toolbar', 'button_run_isolated').clicked.connect( - self.slot_run_isolated) - - self.extension_lib.UI.get_toolbar_widget('code_editor_toolbar', - 'button_run_in_terminal').clicked.connect( - self.slot_run_in_terminal) - - self.extension_lib.UI.get_toolbar_widget('code_editor_toolbar', 'button_instant_boot').clicked.connect( - self.slot_instant_boot) - # self.extension_lib.UI.get_toolbar_widget('code_editor_toolbar', 'button_debug').clicked.connect( - # self.slot_debug) + for widget_name, callback in ( + ('button_save', lambda: self.currentWidget().slot_save()), + ('button_search', lambda: self.currentWidget().slot_find()), + ('button_goto', lambda: self.currentWidget().slot_goto_line()), + ('button_comment', lambda: self.current_text_edit.comment()), + ('button_indent', lambda: self.current_text_edit.on_tab()), + ('button_unindent', lambda: self.current_text_edit.on_back_tab()), + ('button_run_script', self.slot_run_script), + ('button_run_isolated', self.slot_run_isolated), + ('button_run_in_terminal', lambda: self.current_editor.slot_run_in_terminal()), + ('button_instant_boot', lambda: self.current_editor.instant_boot()), + ): + self.extension_lib.UI.get_toolbar_widget('code_editor_toolbar', widget_name) \ + .clicked.connect(callback) except Exception as e: import traceback traceback.print_exc() logger.warning(str(e)) - def slot_instant_boot(self): - """ - 快速启动 - Returns: - - """ - if isinstance(self.get_current_editor(), PMPythonEditor): - path = self.get_current_editor().path() - self.extension_lib.get_interface('applications_toolbar').create_instant_boot_python_file_process(path) - else: - QMessageBox.warning(self, self.tr('Warning'), self.tr('This Editor does not support instant boot.')) - def update_interpreter_selections(self, combo: QComboBox): - """ - 刷新所有解释器状态 - Returns: - - """ + """刷新所有解释器状态""" interpreters = self.extension_lib.Program.get_settings_item_from_file("config.ini", 'RUN/EXTERNAL_INTERPRETERS') combo.clear() combo.addItem(self.tr('Builtin (%s)' % sys.version.split()[0])) @@ -829,69 +501,49 @@ class PMCodeEditTabWidget(QTabWidget, PMDockObject): combo.addItem(interpreter['name'] + ' (%s)' % interpreter['version']) def change_current_interpreter(self, interpreter_index: int): - """ - 切换当前解释器 - Returns: - - """ + """切换当前解释器""" if interpreter_index == -1: return elif interpreter_index == 0: self._current_executable = sys.executable else: self._current_executable = \ - self.extension_lib.Program.get_settings_item_from_file("config.ini", 'RUN/EXTERNAL_INTERPRETERS')[interpreter_index - 1]['path'] + self.extension_lib.Program.get_settings_item_from_file("config.ini", 'RUN/EXTERNAL_INTERPRETERS')[ + interpreter_index - 1]['path'] def on_tab_switched(self, index: int) -> None: - for i in range(self.count()): - if i != index: - w: 'PMBaseEditor' = self.widget(i) - if hasattr(w, 'find_dialog') and w.find_dialog is not None: - w.find_dialog.hide() + current = self.widget(index) + for editor in self.all_editors: + if editor is not current and hasattr(editor, 'find_dialog') and editor.find_dialog is not None: + editor.find_dialog.hide() def set_background_syntax_checking(self, checking: bool): self._worker_check.background_checking = checking - def set_smart_autocomp_stat(self, smart_autocomp_on: bool): - for i in range(self.count()): - # if i != index: - w: 'PMBaseEditor' = self.widget(i) - w.set_smart_autocomp_stat(smart_autocomp_on) - def update_settings(self, settings: Dict[str, Any]): self.settings = settings self.set_background_syntax_checking(settings['check_syntax_background']) - for i in range(self.count()): - w: 'PMBaseEditor' = self.widget(i) - w.update_settings(settings) def closeEvent(self, event: QCloseEvent) -> None: if self._thread_check and self._thread_check.isRunning(): self._worker_check.stop() self._thread_check.quit() self._thread_check.wait(500) - for i in range(self.count()): - self.widget(i).close() # TODO:这里结构不行! - widgets = [self.widget(i) for i in range(self.count()) if self.widget(i).modified()] - print(widgets) - if not widgets: - return + [editor.close() for editor in self.all_editors] + # TODO:这里结构不行! + widgets = [widget for widget in self.all_editors if widget.is_modified] save_all = False for widget in widgets: - if save_all: - # 保存全部则直接进入保存文件流程 + if save_all: # 保存全部则直接进入保存文件流程 widget.slot_save() - continue - - ret = widget.slot_about_close(True) - - save_all = ret == QMessageBox.SaveAll + else: + save_all = widget.slot_about_close(True) == QMessageBox.SaveAll def get_all_breakpoints(self, language='python') -> str: if language == 'python': breakpoints_str = '' for i in range(self.count()): - editor: PMBaseEditor = self.widget(i) + editor = self.widget(i) if editor.path().endswith('.py'): path = editor.path() break_points = editor.get_all_breakpoints() @@ -900,12 +552,6 @@ class PMCodeEditTabWidget(QTabWidget, PMDockObject): logger.warning('break_points are:' + str(break_points)) return breakpoints_str - def currentWidget(self) -> Union[EDITOR_TYPE, QWidget]: - return super(PMCodeEditTabWidget, self).currentWidget() - - def widget(self, index) -> Union[EDITOR_TYPE, QWidget]: - return super(PMCodeEditTabWidget, self).widget(index) - def set_debug_widget(self, debug_widget): self.debug_widget = debug_widget @@ -920,7 +566,6 @@ class PMCodeEditTabWidget(QTabWidget, PMDockObject): return self.tr('Editor') def slot_find_in_path(self, word: str): - from packages.code_editor.codeeditor.qtpyeditor.ui.findinpath import FindInPathWidget path = self.extension_lib.Program.get_work_dir() if not self.extension_lib.UI.widget_exists('find_in_path'): w: FindInPathWidget = self.extension_lib.insert_widget( @@ -952,31 +597,3 @@ class PMCodeEditTabWidget(QTabWidget, PMDockObject): # for editor_index in range(self.count()): # self.widget(editor_index).change_color_scheme(scheme) - - -if __name__ == '__main__': - - - cgitb.enable(format='text') - logging.basicConfig(level=logging.INFO) - - app = QApplication(sys.argv) - # app.setStyleSheet(""" - # PMBaseEditor { - # qproperty-theme: "Material-Dark"; - # } - # """) - - w = PMCodeEditTabWidget() - w.show() - w.set_color_scheme('dark') - w.setMinimumWidth(800) - w.setMinimumHeight(600) - w.setup_ui() - code_editor_root_directory = os.path.dirname(__file__) - w.slot_new_script(r'C:/Users/12957/documents/developing/Python/pyminer_workdir/app_designer.py') - w.currentWidget().goto_line(5) - # w.on_work_dir_changed(r'') - # w.slot_new_script(r'') - # w.on_work_dir_changed('') - sys.exit(app.exec_()) diff --git a/pmgwidgets/display/dynamicgraph/base/__init__.py b/src/pyminer/packages/code_editor/widgets/text_edit/__init__.py similarity index 100% rename from pmgwidgets/display/dynamicgraph/base/__init__.py rename to src/pyminer/packages/code_editor/widgets/text_edit/__init__.py diff --git a/packages/code_editor/codeeditor/qtpyeditor/codeedit/basecodeedit.py b/src/pyminer/packages/code_editor/widgets/text_edit/base_text_edit.py similarity index 30% rename from packages/code_editor/codeeditor/qtpyeditor/codeedit/basecodeedit.py rename to src/pyminer/packages/code_editor/widgets/text_edit/base_text_edit.py index f477177bbafb9db2e3291a426e52046643201768..9451721b3611656794d5303b88e5dc5f39696fa3 100644 --- a/packages/code_editor/codeeditor/qtpyeditor/codeedit/basecodeedit.py +++ b/src/pyminer/packages/code_editor/widgets/text_edit/base_text_edit.py @@ -1,272 +1,402 @@ -# -*- coding:utf-8 -*- -# @Time: 2021/1/18 9:26 -# @Author: Zhanyi Hou -# @Email: 1295752786@qq.com -# @File: basecodeedit.py +import contextlib import logging import os import re import time +from functools import cached_property from itertools import groupby from queue import Queue - -from PySide2.QtGui import QDropEvent, QPixmap - -from PySide2.QtWidgets import QAction -from PySide2.QtCore import QRegExp, Qt, QModelIndex, Signal, QThread, QCoreApplication, QTimer, QUrl, QSize -from PySide2.QtWidgets import QApplication, QFileDialog, QTextEdit, QTabWidget, \ - QMessageBox, QListWidget, QListWidgetItem, QWidget, QHBoxLayout, QVBoxLayout, QLabel, QPlainTextEdit, QShortcut, \ - QTableWidget, QTableWidgetItem, QHeaderView -from PySide2.QtGui import QTextCursor, QKeyEvent, QMouseEvent, QIcon, QKeySequence, QFocusEvent, QColor, QTextFormat, \ - QPainter, QTextDocument, QTextBlock -from typing import List, Tuple, Dict, TYPE_CHECKING - -from packages.code_editor.codeeditor.qtpyeditor.highlighters.python import PythonHighlighter -from packages.code_editor.codeeditor.qtpyeditor.syntaxana import getIndent -from packages.code_editor.codeeditor.qtpyeditor.linenumber import QCodeEditor - -# from pmgwidgets import create_icon +from typing import Callable, Tuple, Dict, List, TYPE_CHECKING, Type, Any + +from PySide2.QtCore import SignalInstance, Signal, Qt, QTimer, QModelIndex, QUrl, QRect, QPoint +from PySide2.QtGui import QFocusEvent, QTextCursor, QMouseEvent, QKeyEvent, QDragEnterEvent, QDropEvent, QPainter, \ + QColor, QTextFormat, QFontDatabase, QFont, QTextDocument +from PySide2.QtWidgets import QPlainTextEdit, QWidget, QApplication, QTextEdit, QLabel, QMenu, QAction +from jedi.api.classes import Completion as CompletionResult + +import utils +from .line_number_area import QLineNumberArea +from ..auto_complete_dropdown.base_auto_complete_dropdown import BaseAutoCompleteDropdownWidget +from ...code_handlers.base_handler import BaseAnalyzer, BaseHandler +from ...utils.base_object import CodeEditorBaseObject +from ...utils.grammar_analyzer.get_indent import get_indent +from ...utils.grammar_analyzer.grammar_analyzer import GrammarAnalyzer +from ...utils.highlighter.python_highlighter import PythonHighlighter +from ...utils.operation import Operation if TYPE_CHECKING: - from jedi.api import Completion + from ...utils.highlighter.base_highlighter import BaseHighlighter + from ..editors.python_editor import PMPythonEditor + from ...utils.auto_complete_thread.base_auto_complete import BaseAutoCompleteThread + from ..editors.base_editor import PMBaseEditor logger = logging.getLogger(__name__) -logging.basicConfig(level=logging.DEBUG) logger.setLevel(logging.DEBUG) -def create_icons(): - icons = {} - icon_folder = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'icons', 'autocomp') - for icon_file_name in os.listdir(icon_folder): - icon_abso_path = os.path.join(icon_folder, icon_file_name) - icon1 = QIcon() # create_icon(icon_abso_path) - icon1.addPixmap(QPixmap(icon_abso_path), QIcon.Normal, QIcon.Off) - # print(icon1) - logging.debug('loading {0}'.format(icon_file_name)) - icons[icon_file_name[:-4]] = icon1 - - return icons - - -class AutoCompList(QTableWidget): - # {'module':} # , class, instance, function, param, path, keyword, property and statement.'} - ROLE_NAME = 15 - ROLE_TYPE = 16 - ROLE_COMPLETE = 17 - ROLE_COMPLETION = 18 - - def __init__(self, parent: 'PMBaseCodeEdit' = None): - super().__init__(parent) - self._parent: 'PMBaseCodeEdit' = parent - self.last_show_time = 0 - self.icons = create_icons() - self.verticalHeader().setDefaultSectionSize(20) - self.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) - self.horizontalHeader().hide() - self.setStyleSheet("AutoCompList{selection-background-color: #999999;}"); - self.verticalHeader().setMinimumWidth(20) - # self.horizontalHeader().setMinimumWidth(300) - # self.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) - - - def verticalHeader(self) -> QHeaderView: - return super(AutoCompList, self).verticalHeader() - - def show(self) -> None: - self.last_show_time = time.time() - super().show() +class PMBaseCodeEdit(CodeEditorBaseObject, QPlainTextEdit): + """ + 所有与代码相关的编辑功能都应该定义在这里,包括排版、高亮等功能。 + """ + # 各个子类的配置项 + highlighter_class: 'Type[BaseHighlighter]' = None # 语法高亮类 + auto_complete_thread_class: 'Type[BaseAutoCompleteThread]' = None # 自动补全类 - def hide_autocomp(self): - """ - 隐藏自动补全菜单并且主界面设置焦点。 - :return: - """ - self.hide() - self._parent.setFocus() - - def count(self): - return self.rowCount() - - def keyPressEvent(self, e: QKeyEvent) -> None: - if self.isVisible(): - if e.key() == Qt.Key_Return or e.key() == Qt.Key_Tab: - self._parent._insert_autocomp() - self._parent.setFocus() - e.accept() - print('return!') - return - elif e.key() == Qt.Key_Escape: - self.hide() - self._parent.setFocus() - return - elif e.key() == Qt.Key_Up or e.key() == Qt.Key_Down: - super().keyPressEvent(e) - e.accept() - return - elif e.key() == Qt.Key_Left or e.key() == Qt.Key_Right: - self.hide_autocomp() - elif e.key() == Qt.Key_Control or e.key() == Qt.Key_Alt: # 按下Ctrl键时,不关闭界面,因为可能存在快捷键。 - pass - else: - if (Qt.Key_0 <= e.key() <= Qt.Key_9) and ( - e.modifiers() == Qt.ControlModifier or e.modifiers() == Qt.AltModifier): - index = e.key() - Qt.Key_0 - if 0 <= index < self.count(): - self.setCurrentItem(self.item(index, 0)) - self._parent._insert_autocomp() - self._parent.setFocus() - self.hide() - e.accept() - return - self.hide_autocomp() - e.ignore() - return - super().keyPressEvent(e) - e.ignore() + highlighter: 'BaseHighlighter' = None + auto_complete_thread: 'BaseAutoCompleteThread' = None - def set_completions(self, completions: List['Completion']): - """ - module, class, instance, function, param, path, keyword, property and statement. - :param completions: - :return: - """ - t0 = time.time() - self.setRowCount(0) - self.items_list = [] - self.setRowCount(len(completions)) - self.setColumnCount(1) - labels = [] - for i, completion in enumerate(completions): - item = QTableWidgetItem(completion.name) - item.setData(AutoCompList.ROLE_NAME, completion.name) - - item.setData(AutoCompList.ROLE_COMPLETION, completion) - item.setText(completion.name) - if i < 30: # 当条目数太多的时候,不能添加图标,否则速度会非常慢 - icon = self.icons.get(completion.type) - if icon is not None: - item.setIcon(icon) - - self.setItem(i, 0, item) - if 0 <= i <= 9: - labels.append(str(i)) - else: - labels.append('') - self.setVerticalHeaderLabels(labels) - self.show() - self.setFocus() - self.setCurrentItem(self.item(0, 0)) - t1 = time.time() - logger.info('completion time:{0},completion list length:{1}'.format(t1 - t0, len(completions))) + handler_class: 'Type[BaseHandler]' = BaseHandler # 代码核心操作类 + handler: 'BaseHandler' = None - def get_complete(self, row: int) -> Tuple[str, str]: - return self.item(row, 0).data(AutoCompList.ROLE_COMPLETION).complete, self.item(row, 0).data( - AutoCompList.ROLE_COMPLETION).type + # cursorPositionChanged = Signal() + signal_save: SignalInstance = Signal() # 触发保存的事件,具体的保存操作交由给editor控件进行操作 + signal_focused_in: SignalInstance = Signal(QFocusEvent) # 使用click代替focus,因为focus in信号触发过于频繁 + signal_idle: SignalInstance = Signal() # 编辑器闲置,目前没有触发,也没有调用 + signal_text_modified: SignalInstance = Signal() # 当编辑器内的文本发生改变时,触发这个信号 + signal_file_dropped: SignalInstance = Signal(str) # 当一个文件被拖进这里时触发 - def get_text(self, row: int) -> str: - return self.item(row, 0).text() + if TYPE_CHECKING: + # PySide2的内置事件 + textChanged: SignalInstance # 文本发生改变 + blockCountChanged: SignalInstance # 行号发生改变 + updateRequest: SignalInstance # 当文本文档需要更新指定的矩形时触发 + # 获取光标 + textCursor: Callable[[], QTextCursor] -class PMBaseCodeEdit(QCodeEditor): - # cursorPositionChanged = Signal() - signal_save = Signal() - signal_focused_in = Signal( - QFocusEvent) # Signal Focused in . But as it was too often triggered, I use click event instead. - signal_idle = Signal() - signal_text_modified = Signal() # If status changed from unmodified to modified, this signal emits. - signal_file_dropped = Signal(str) + parent: Callable[[], PMBaseEditor] + + # 其他类型提示 + doc_tab_widget: 'PMPythonEditor' + highlighter: 'PythonHighlighter' + + # 定义一系列的更新事件,不过只定义了这一个,提供了接口,其他的可以照例添加 UPDATE_CODE_HIGHLIGHT = 1 def __init__(self, parent=None): super(PMBaseCodeEdit, self).__init__(parent) + if self.highlighter_class is not None: + self.highlighter = self.highlighter_class(self.document()) + if self.auto_complete_thread_class is not None: + self.auto_complete_thread = self.auto_complete_thread_class() + self.auto_complete_thread.trigger.connect(self.on_autocomp_signal_received) + self.auto_complete_thread.start() + self.handler = self.handler_class() + + self.setTabChangesFocus(False) # 不允许Tab切换焦点,因Tab有更重要的切换缩进的作用 + self.setMouseTracking(True) # 启用鼠标跟踪,这允许在鼠标滑过该控件时捕捉到事件 + self.last_mouse_moved: float = time.time() # 最后一次鼠标事件时间 + + # 代码提示控件,使用一个Label作为代码提示 + self.hint_widget = QLabel('', parent=self) + self.hint_widget.setVisible(False) + self.hint_widget.setStyleSheet("background-color:#d8d8d8;padding:4px") + + fontId = QFontDatabase.addApplicationFont( + os.path.join(utils.get_root_dir(), 'resources', 'fonts', 'SourceCodePro-Regular.ttf')) + font_families = QFontDatabase.applicationFontFamilies(fontId) + + self.font = QFont() + self.font.setPointSize(15) # 设置行号的字体大小 + # font.setFamily("Microsoft YaHei UI") # 设置行号的字体 + self.font.setFamily(font_families[0]) # 设置行号的字体 + self.setFont(self.font) + + self.line_number_area = QLineNumberArea(self) + self.cursorPositionChanged.connect(self.highlightCurrentLine) + self.update_line_number_area_width(0) + self._last_operation: float = 0.0 # 记录上次操作的时间 self.update_request_queue = Queue() self.setLineWrapMode(QPlainTextEdit.NoWrap) - self.doc_tab_widget: 'PMGPythonEditor' = parent - self.filename = '*' - self.path = '' + self.doc_tab_widget = parent self.modified = False self._last_text = '' - self.highlighter: 'PythonHighlighter' = None self.text_modified_signal_allowed = True self.setTabChangesFocus(False) - self.textChanged.connect(self.on_text_changed) - - self.popup_hint_widget = AutoCompList(self) - self.popup_hint_widget.doubleClicked.connect(self._insert_autocomp) - self.popup_hint_widget.hide() + # 设置代码提示的弹出框 + self.autocompletion_dropdown = BaseAutoCompleteDropdownWidget(self) + self.autocompletion_dropdown.hide() self.setContextMenuPolicy(Qt.CustomContextMenu) + + # 用于更新界面的定时器,start的参数为毫秒 self.ui_update_timer = QTimer() self.ui_update_timer.start(300) + # 绑定各个信号 + self.__bind_signals() + self.__create_operations() + + @property + def path(self): + return self.handler.path + + @path.setter + def path(self, value): + self.handler.path = value + + # noinspection PyUnresolvedReferences + def __bind_signals(self): + # 定时触发的事件 self.ui_update_timer.timeout.connect(self.update_ui) + # 行号相关的信号 + # 文本滚动后,同步更新行号 + self.updateRequest.connect(self.line_number_area.slot_update) + self.updateRequest.connect(self.update_line_number_area_width) + # 行数发生变化后,更新行号区域的宽度 + # TODO 行号区域应当通过设置Layout来自动控制,而现在是手动绘制在Editor里面的,需要进行调整 + self.blockCountChanged.connect(self.update_line_number_area_width) + + # 文本更新后触发的事件 + self.textChanged.connect(self.on_text_changed) + # 文本发生改变后,保存当前时间 self.textChanged.connect(self.update_last_operation_time) + # 在代码提示框里面双击后,将自动补全的内容添加至代码 + self.autocompletion_dropdown.doubleClicked.connect(self._insert_autocomp) + + # 绑定右键菜单信号 + self.customContextMenuRequested.connect(self.slot_custom_context_menu_requested) + + self.textChanged.connect(self.update_handler_code) + self.selectionChanged.connect(self.update_handler_code) + + def __create_operations(self): + """创建操作,绑定快捷键,生成菜单项。""" + + def text_exists(): + """判断是否有文本,如果有文本才允许使用自动排版等功能""" + return len(self.code) > 0 + + def always_false(): + return False + + # 如果没有定义父对象,则直接返回,因为目前这个体系之下,大量的操作定义在了父对象中,导致单元测试跑不起来 + if not self.parent(): + return + + # TODO 将这些操作全部迁移至这个类下 + # 这里代码比较紧凑,以节省行数 + self.__menu_operations = [Operation( # 格式化代码 + widget=self, name='format code', label=self.tr('Format Code'), key='Ctrl+Alt+F', icon_name='format.svg', + slot=lambda: self.update_from_analyzer(self.handler.format_code()), + conditions=[text_exists], + ), Operation( # 运行代码 + widget=self, name='run code', label=self.tr('Run Code'), key='Ctrl+R', icon_name='run.svg', + # TODO 这里的path应该是本对象的属性,而非父对象的属性 + slot=lambda: self.handler.run_code(self.code, self.tr('Running {}').format(self.parent()._path)), + conditions=[text_exists], + ), Operation( # 运行选中代码 + widget=self, name='run code', label=self.tr('Run Selected Code'), key='F9', icon_name='python.svg', + slot=self.handler.run_selected_code, + conditions=[text_exists], + ), Operation( # 保存代码 + widget=self, name='save code', label=self.tr('Save Code'), key='Ctrl+S', icon_name='save.svg', + slot=self.parent().slot_save, + ), Operation( # 查找代码 + widget=self, name='find code', label=self.tr('Find Code'), key='Ctrl+F', + slot=self.parent().slot_find, + ), Operation( # 替换代码 + widget=self, name='replace code', label=self.tr('Replace'), key='Ctrl+H', + slot=self.parent().slot_replace, + ), Operation( # 在路径中查找,暂不理解这个功能的含义 + widget=self, name='find in path', label=self.tr('Find In Path'), key='Ctrl+Shift+F', + slot=self.parent().slot_find_in_path, + ), Operation( # 自动补全功能是每隔一段时间自动显示的,使用快捷键可以立刻显示 + widget=self, name='auto completion', label=self.tr('AutoComp'), key='Ctrl+P', + slot=self.parent().auto_completion, + ), Operation( # 跳转到行 + widget=self, name='goto line', label=self.tr('Goto Line'), key='Ctrl+G', + slot=self.parent().slot_goto_line, + ), Operation( + widget=self, name='goto definition', label=self.tr('Goto Definition'), key='Ctrl+B', + slot=self.parent().slot_goto_definition, + ), Operation( # 函数帮助 + widget=self, name='function help', label=self.tr('Function Help'), key='F1', + slot=self.slot_function_help, + ), Operation( + widget=self, name='help in console', label=self.tr('Help in Console'), key='F2', + slot=self.slot_help_in_console, + conditions=[always_false], + ), Operation( # 添加断点 + widget=self, name='add breakpoint', label=self.tr('Add Breakpoint'), icon_name='breakpoint.svg', + ), Operation( # 移除断点 + widget=self, name='remove breakpoint', label=self.tr('Remove Breakpoint'), + ), Operation( # 查看所有断点 + widget=self, name='view breakpoints', label=self.tr('View BreakPoints'), + )] + + def __only_for_qt_linguist_translation_and_never_need_to_be_called(self): + self.tr('Undo'), self.tr('Redo'), self.tr('Cut'), self.tr('Copy'), self.tr('Copy'), self.tr('Paste') + self.tr('Delete'), self.tr('Select All') + + def createStandardContextMenu(self) -> QMenu: + menu = super().createStandardContextMenu() + # 翻译原有的菜单项 + actions: List[QAction] = menu.actions() + for action in actions: + text = action.text() + first, second = text.split('\t') if '\t' in text else (text, '') + action.setText(f"{self.tr(first.replace('&', ''))}\t{second}") + # 添加额外菜单 + menu.addSeparator(), [menu.addAction(operation.action) for operation in self.__menu_operations] + return menu + + def slot_custom_context_menu_requested(self, pos: QPoint): + """打开右键菜单""" + self.createStandardContextMenu().exec_(self.mapToGlobal(pos)) + + @property + def line_number_area_width(self): + return 30 + self.fontMetrics().width('9') * len(str(max(1, self.blockCount()))) + + def update_line_number_area_width(self, *_): + self.setViewportMargins(self.line_number_area_width, 0, 0, 0) + + @property + def first_visible_line_number(self) -> int: + return self.firstVisibleBlock().blockNumber() + + @property + def current_line_number(self) -> int: + return self.textCursor().blockNumber() + + def lineNumberAreaPaintEvent(self, event): + painter = QPainter(self.line_number_area) + + painter.fillRect(event.rect(), QColor(240, 240, 240)) + + block = self.firstVisibleBlock() + blockNumber = block.blockNumber() + top = self.blockBoundingGeometry(block).translated(self.contentOffset()).top() + bottom = top + self.blockBoundingRect(block).height() + + # Just to make sure I use the right font + height = self.fontMetrics().height() + while block.isValid() and (top <= event.rect().bottom()): + if block.isVisible() and (bottom >= event.rect().top()): + number = str(blockNumber + 1) + painter.setPen(Qt.black) + + self.font.setPointSize(10) + painter.setFont(self.font) + + painter.drawText(0, top, self.line_number_area.width(), height, Qt.AlignCenter, number) + + block = block.next() + top = bottom + bottom = top + self.blockBoundingRect(block).height() + blockNumber += 1 + + def resizeEvent(self, event): + super().resizeEvent(event) + cr = self.contentsRect() + self.line_number_area.setGeometry(QRect(cr.left(), cr.top(), self.line_number_area_width, cr.height())) + + def highlightCurrentLine(self): + extra_selections = [] + + if not self.isReadOnly(): + selection = QTextEdit.ExtraSelection() + + line_color = QColor(235, 252, 252) # 当前行背景色 + selection.format.setBackground(line_color) + + selection.format.setProperty(QTextFormat.FullWidthSelection, True) + + selection.cursor = self.textCursor() + selection.cursor.clearSelection() + + extra_selections.append(selection) + + self.setExtraSelections(extra_selections) def update_last_operation_time(self): - """ - 更新上一次操作的时间 - :return: - """ + """更新上一次操作的时间""" self._last_operation = time.time() def update_ui(self): if not self.isVisible(): return - if time.time() - self._last_operation > 0.5: - if self.update_request_queue.qsize() > 0: - - action: int = self.update_request_queue.get() - if action == self.UPDATE_CODE_HIGHLIGHT: - self.text_modified_signal_allowed = False - focus_widget: QWidget = QApplication.focusWidget() - self.highlighter.rehighlight() - self.text_modified_signal_allowed = True - if focus_widget is not None: - focus_widget.setFocus() - - def on_autocomp_signal_received(self, text_cursor_pos: tuple, completions: List['jedi.api.classes.Completion']): - ''' - 当收到自动补全提示信号时,执行的函数。 - :param text_cursor_pos: - :param completions: - :return: - ''' - current_cursor_pos = self._get_textcursor_pos() - if current_cursor_pos[0] + 1 == text_cursor_pos[0] and current_cursor_pos[1] == text_cursor_pos[1]: + if self._last_operation <= 0.5: + return + if self.update_request_queue.empty(): + return + action: int = self.update_request_queue.get() + if action == self.UPDATE_CODE_HIGHLIGHT: + self.text_modified_signal_allowed = False + focus_widget: QWidget = QApplication.focusWidget() + self.highlighter.rehighlight() + self.text_modified_signal_allowed = True + focus_widget is not None and focus_widget.setFocus() + + def on_autocomp_signal_received(self, text_cursor_pos: tuple, completions: 'List[CompletionResult]'): + """当收到自动补全提示信号时,执行的函数。 + + 为了避免自动补全对性能的影响,采用一个独立的线程进行自动补全。自动补全的过程如下: + 1. 提交自动补全请求; + 2. 自动补全线程进行补全; + 3. 本控件接收自动补全的结果,判断是否仍在之前的位置,如仍在,则补全。 + """ + position = self.cursor_position + if position[0] + 1 == text_cursor_pos[0] and position[1] == text_cursor_pos[1]: if len(completions) == 1: if completions[0].name == self._get_hint(): self.hide_autocomp() return - self.autocomp_show(completions) else: self.hide_autocomp() def hide_autocomp(self): - self.popup_hint_widget.hide_autocomp() + self.autocompletion_dropdown.hide_autocomp() + + def update_handler_code(self): + cursor = self.textCursor() + self.handler.feed(self.code, cursor.position(), (cursor.selectionStart(), cursor.selectionEnd())) + + def update_from_analyzer(self, analyzer: 'BaseAnalyzer'): + self.code = analyzer.code + cursor = self.textCursor() + cursor.setPosition(analyzer.cursor) + self.setTextCursor(cursor) def on_text_changed(self): - """ - 文字发生改变时的方法 - :return: - """ - if self.modified == True: - pass - else: + """文字发生改变时的方法""" + if not self.modified: if self.toPlainText() != self._last_text: self.modified = True if self.text_modified_signal_allowed: self.signal_text_modified.emit() - else: - pass self._last_text = self.toPlainText() - def _insert_autocomp(self, e: QModelIndex = None): - raise NotImplementedError + # 代码提示 + cursor_pos = self.cursorRect() + self.autocompletion_dropdown.setGeometry( + cursor_pos.x() + 5, cursor_pos.y() + 20, + self.autocompletion_dropdown.sizeHint().width(), + self.autocompletion_dropdown.sizeHint().height()) + self._request_autocomp() + + def _insert_autocomp(self, event: QModelIndex = None): + row = self.autocompletion_dropdown.currentRow() + if 0 <= row < self.autocompletion_dropdown.count(): + complete, word_type = self.autocompletion_dropdown.get_complete(row) + word = self.autocompletion_dropdown.get_text(row) + if not word.startswith(self._get_hint()): + return + comp = word[len(self._get_hint()):] + self.insertPlainText(comp) + if word_type == 'function': + self.insertPlainText('()') + tc = self.textCursor() + tc.movePosition(QTextCursor.PreviousCharacter) + self.setTextCursor(tc) + elif word_type == 'keyword': + self.insertPlainText(' ') + self.autocompletion_dropdown.hide() def _get_nearby_text(self): block_text = self.textCursor().block().text() @@ -279,88 +409,137 @@ class PMBaseCodeEdit(QCodeEditor): return '' col = self.textCursor().columnNumber() nearby_text = block_text[:col] - hint = re.split( - '[.:;,?!\s \+ \- = \* \\ \/ \( \)\[\]\{\} ]', nearby_text)[-1] + hint = re.split('[.:;,?!\s \+ \- = \* \\ \/ \( \)\[\]\{\} ]', nearby_text)[-1] return hint def _request_autocomp(self): - pos = self._get_textcursor_pos() + position = self.cursor_position nearby_text = self._get_nearby_text() hint = self._get_hint() if hint == '' and not nearby_text.endswith(('.', '\\\\', '/')): - self.popup_hint_widget.hide_autocomp() + self.autocompletion_dropdown.hide_autocomp() return - self.autocomp_thread.text_cursor_pos = (pos[0] + 1, pos[1]) - self.autocomp_thread.text = self.toPlainText() + self.auto_complete_thread.text_cursor_pos = (position[0] + 1, position[1]) + self.auto_complete_thread.text = self.toPlainText() - def autocomp_show(self, completions: list): - raise NotImplementedError - - def _get_textcursor_pos(self) -> Tuple[int, int]: + @property + def cursor_position(self) -> Tuple[int, int]: return self.textCursor().blockNumber(), self.textCursor().columnNumber() - def mousePressEvent(self, a0: QMouseEvent) -> None: - if self.popup_hint_widget.isVisible(): - self.popup_hint_widget.hide_autocomp() + def mousePressEvent(self, event: QMouseEvent) -> None: + if self.autocompletion_dropdown.isVisible(): + self.autocompletion_dropdown.hide_autocomp() self.signal_focused_in.emit(None) - super().mousePressEvent(a0) + super().mousePressEvent(event) + + @cached_property + def key_press_mapping(self) -> Dict[Tuple[Any, Any], Callable[[QKeyEvent], None]]: + """将按键分配给各个函数的映射。 + + 键支持以下多种情况: + + 1. str(event.text()), 例如:'(', '?' + 2. int(event.key()), 例如:Qt.Key_Backspace + 3. (int(event.key()), int(event.modifiers())),例如:(Qt.Key_Slash, Qt.ControlModifier) + + 值就是回调函数。 + """ + mapping = { + Qt.Key_Tab: self.on_tab, + Qt.Key_Backtab: self.on_back_tab, + (Qt.Key_Backtab, Qt.ShiftModifier): self.on_back_tab, # 经测试,只有这个可以表示Shift+Tab,不过另两个也可保留 + (Qt.Key_Tab, Qt.ShiftModifier): self.on_back_tab, + # TODO 迁移至Operation体系 + # 这个就比较适合使用Operation来处理,因为可以显示在右键菜单中,而定义在key中就没有了这个优势。 + (Qt.Key_Slash, Qt.ControlModifier): self.comment, + Qt.Key_Return: self.on_return_pressed, + Qt.Key_Backspace: self.on_backspace, + # 左括号、右括号分别采用同一个回调进行处理 + '(': self.on_left_parenthesis, '[': self.on_left_parenthesis, '{': self.on_left_parenthesis, + ')': self.on_right_parenthesis, ']': self.on_right_parenthesis, '}': self.on_right_parenthesis, + } + return mapping def keyPressEvent(self, event: QKeyEvent) -> None: - k = event.key() - if k == Qt.Key_Tab: - self.on_tab() - return - elif k == Qt.Key_Backtab: - self.on_back_tab() - return - elif k == Qt.Key_S and event.modifiers() == Qt.ControlModifier: - self.save() - return - elif k == Qt.Key_Slash and event.modifiers() == Qt.ControlModifier: - self.comment() - elif k == Qt.Key_Return: - if not self.textCursor().atBlockEnd(): - pass - else: - self.on_return_pressed() - event.accept() - return - elif k == Qt.Key_Backspace: - self.on_backspace(event) - event.accept() - return - elif k == Qt.Key_ParenLeft: - cursor = self.textCursor() - cursor.beginEditBlock() - cursor.insertText('()') - cursor.movePosition(QTextCursor.PreviousCharacter, QTextCursor.MoveAnchor, 1) - cursor.endEditBlock() - self.setTextCursor(cursor) - event.accept() - return - elif k == Qt.Key_BracketLeft: - cursor = self.textCursor() - cursor.beginEditBlock() - cursor.insertText('[]') - cursor.movePosition(QTextCursor.PreviousCharacter, QTextCursor.MoveAnchor, 1) - cursor.endEditBlock() - self.setTextCursor(cursor) - event.accept() - return - elif k == Qt.Key_BraceLeft: - cursor = self.textCursor() - cursor.beginEditBlock() - cursor.insertText('{}') - cursor.movePosition(QTextCursor.PreviousCharacter, QTextCursor.MoveAnchor, 1) - cursor.endEditBlock() - self.setTextCursor(cursor) + """处理按键事件 + + TODO 将按键处理逻辑写成一个独立的教程,然后在这边加引用 + + 按键处理的基本逻辑是,一个按键仅使用一个处理程序进行处理。 + 即,如果在按键映射中找到了相应的按键的处理函数,则用该函数进行处理,而如果没有找到,则使用super进行处理。 + + 每个按键的处理函数都应使用如下的格式进行定义: + + def on_key_tab_pressed(self, event: QKeyEvent) -> None: + do_some_thing() + event.accept() # 中止事件的传递,不调用的话事件将传交给父组件再次处理 + + 按键处理函数不需要返回值。 + + 每个按键的处理函数都需要自行判断是否需要调用event.accept(),以提供足够的灵活性。 + + 按键处理函数与默认的super().keyPressEvent()是互斥的。 + 如果仍需要使用默认的keyPressEvent进行处理,则可以在自定义的按键处理函数中进行如下调用: - event.accept() - return super().keyPressEvent(event) - def on_backspace(self, key_backspace_event: QKeyEvent): + 按键处理有两种方式:可以通过Operation进行定义,在BaseEditor中有描述,也可以在keyPressEvent内进行定义。 + 具体的性能没有进行过查证,不过直观上看,使用keyPressEvent在性能上会存在优势。 + + """ + self.update_handler_code() + # TODO 按键处理逻辑仍存在bug,应当分为字符映射和键盘映射两种情况进行处理 + # 即分别通过event.text()和event.key()+event.modifier()进行处理 + text, key, modifiers = event.text(), event.key(), int(event.modifiers()) + no_modifier = modifiers == Qt.NoModifier + if no_modifier and (callback := self.key_press_mapping.get(text, None)) is not None: + callback(event) + elif no_modifier and (callback := self.key_press_mapping.get(key, None)) is not None: + callback(event) + elif (callback := self.key_press_mapping.get((key, modifiers), None)) is not None: + callback(event) + else: + super().keyPressEvent(event) + self.update_handler_code() + + def on_left_parenthesis(self, event: QKeyEvent): + cursor = self.textCursor() + cursor.beginEditBlock() + string = {Qt.Key_ParenLeft: '()', Qt.Key_BracketLeft: '[]', Qt.Key_BraceLeft: '{}'}[event.key()] + cursor.insertText(string) + cursor.movePosition(QTextCursor.PreviousCharacter, QTextCursor.MoveAnchor, 1) + cursor.endEditBlock() + self.setTextCursor(cursor) + event.accept() + + @property + def code(self): + return self.toPlainText() + + @code.setter + def code(self, value: str): + self.setPlainText(value) + + def on_right_parenthesis(self, event: QKeyEvent): + left, right = { + Qt.Key_ParenRight: ('(', ')'), + Qt.Key_BracketRight: ('[', ']'), + Qt.Key_BraceRight: ('{', '}'), + }[event.key()] + code = self.code + with self.editing_block_cursor() as cursor: + position = cursor.position() + analyzer = GrammarAnalyzer() + analyzer.feed(code) + length = len(code) + if position == length or analyzer.is_not_matched(position, left) or code[position] != right: + cursor.insertText(right) + else: + cursor.movePosition(QTextCursor.NextCharacter, QTextCursor.MoveAnchor, 1) + event.accept() + + def on_backspace(self, event: QKeyEvent): cursor: QTextCursor = self.textCursor() cursor.beginEditBlock() previous_text = cursor.block().text()[:cursor.positionInBlock()] @@ -377,26 +556,34 @@ class PMBaseCodeEdit(QCodeEditor): else: cursor.deletePreviousChar() cursor.endEditBlock() + event.accept() - def on_return_pressed(self): - ''' - 按回车换行的方法 - :return: - ''' + @contextlib.contextmanager + def editing_block_cursor(self): cursor = self.textCursor() cursor.beginEditBlock() - text = cursor.block().text() - text, indent = getIndent(text) - - if text.endswith(':'): + yield cursor + cursor.endEditBlock() + self.setTextCursor(cursor) - cursor.insertText('\n' + ' ' * (indent + 4)) - else: + def on_return_pressed(self, event: QKeyEvent): + """按回车换行的方法 - cursor.insertText('\n' + ' ' * indent) - cursor.endEditBlock() + TODO 使用parso进行解析并更新 + """ + if not self.textCursor().atBlockEnd(): + super().keyPressEvent(event) + return + with self.editing_block_cursor() as cursor: + text = cursor.block().text() + text, indent = get_indent(text) + if text.endswith(':'): + cursor.insertText('\n' + ' ' * (indent + 4)) + else: + cursor.insertText('\n' + ' ' * indent) + event.accept() - def comment(self): + def comment(self, _: QKeyEvent = None): cursor = self.textCursor() cursor.beginEditBlock() if cursor.hasSelection(): @@ -410,7 +597,6 @@ class PMBaseCodeEdit(QCodeEditor): cursor.setPosition(start) cursor.movePosition(QTextCursor.StartOfLine) - start_line = cursor.blockNumber() start = cursor.position() # 将光标移动到行首,获取行首的位置 cursor.setPosition(end) # 将光标设置到末尾 @@ -421,7 +607,7 @@ class PMBaseCodeEdit(QCodeEditor): current_line = cursor.blockNumber() last_line = current_line while current_line <= end_line: - line_text, indent = getIndent(cursor.block().text()) + line_text, indent = get_indent(cursor.block().text()) if line_text.startswith('#'): cursor.movePosition( QTextCursor.NextCharacter, QTextCursor.MoveAnchor, indent) @@ -438,7 +624,7 @@ class PMBaseCodeEdit(QCodeEditor): cursor.movePosition(QTextCursor.StartOfLine) else: cursor.movePosition(QTextCursor.StartOfLine) - line_text, indent = getIndent(cursor.block().text()) + line_text, indent = get_indent(cursor.block().text()) if line_text.startswith('#'): cursor.movePosition(QTextCursor.NextCharacter, QTextCursor.MoveAnchor, indent) @@ -449,48 +635,40 @@ class PMBaseCodeEdit(QCodeEditor): cursor.endEditBlock() - def on_back_tab(self): + def on_back_tab(self, _: QKeyEvent = None): cursor = self.textCursor() if cursor.hasSelection(): - self.editUnindent() - + self.edit_unindent() else: cursor = self.textCursor() cursor.clearSelection() - cursor.movePosition(QTextCursor.StartOfBlock) - for i in range(4): - cursor.movePosition(QTextCursor.NextCharacter, - QTextCursor.KeepAnchor, 1) + cursor.movePosition(QTextCursor.NextCharacter, QTextCursor.KeepAnchor, 1) if not cursor.selectedText().endswith(' '): - cursor.movePosition(QTextCursor.PreviousCharacter, - QTextCursor.KeepAnchor, 1) + cursor.movePosition(QTextCursor.PreviousCharacter, QTextCursor.KeepAnchor, 1) break - # print('cursor.selected',cursor.selectedText()) cursor.removeSelectedText() - def on_tab(self): - cursor = self.textCursor() - if cursor.hasSelection(): - self.editIndent() - return - else: - nearby_text = self._get_nearby_text() - hint = self._get_hint() - - if hint == '' and not nearby_text.endswith(('.', '\\\\', '/')): - cursor = self.textCursor() - cursor.insertText(" ") + def on_tab(self, _: QKeyEvent = None): + with self.editing_block_cursor() as cursor: + if cursor.hasSelection(): + self.edit_indent() else: - self._request_autocomp() + nearby_text = self._get_nearby_text() + hint = self._get_hint() + + if hint == '' and not nearby_text.endswith(('.', '\\\\', '/')): + cursor = self.textCursor() + cursor.insertText(" ") + else: + self._request_autocomp() - def editIndent(self): + def edit_indent(self): cursor = self.textCursor() cursor.beginEditBlock() if cursor.hasSelection(): start = pos = cursor.anchor() - start_line = self.document().findBlock(start) end = cursor.position() if start > end: @@ -516,12 +694,11 @@ class PMBaseCodeEdit(QCodeEditor): if lastPos == pos: break cursor.setPosition(start) - cursor.movePosition(QTextCursor.NextCharacter, - QTextCursor.KeepAnchor, end - start) + cursor.movePosition(QTextCursor.NextCharacter, QTextCursor.KeepAnchor, end - start) cursor.endEditBlock() return True - def editUnindent(self): + def edit_unindent(self): cursor = self.textCursor() cursor.beginEditBlock() if cursor.hasSelection(): @@ -538,8 +715,7 @@ class PMBaseCodeEdit(QCodeEditor): cursor.movePosition(QTextCursor.StartOfLine) end = cursor.position() while pos >= start: - cursor.movePosition(QTextCursor.NextCharacter, - QTextCursor.KeepAnchor, 4) + cursor.movePosition(QTextCursor.NextCharacter, QTextCursor.KeepAnchor, 4) if cursor.selectedText() == " ": cursor.removeSelectedText() cursor.movePosition(QTextCursor.Up) @@ -549,91 +725,86 @@ class PMBaseCodeEdit(QCodeEditor): if pos == lastpos: break cursor.setPosition(start) - cursor.movePosition(QTextCursor.NextCharacter, - QTextCursor.KeepAnchor, end - start) + cursor.movePosition(QTextCursor.NextCharacter, QTextCursor.KeepAnchor, end - start) cursor.endEditBlock() def save(self): self.signal_save.emit() - def isModified(self): + def is_modified(self): return self.modified - def firstVisibleLine(self) -> int: - return self.firstVisibleBlock().blockNumber() - - def currentLine(self) -> int: - return self.textCursor().blockNumber() - - def goToLine(self, line: int): - tc = self.textCursor() - pos = self.document().findBlockByNumber(line - 1).position() - tc.setPosition(pos, QTextCursor.MoveAnchor) - # self.setTextCursor(tc) - - def getSelectedText(self) -> str: - if self.textCursor().hasSelection(): - return self.textCursor().selectedText() - else: - return '' + @property + def is_modified_prop(self): + return self.modified - def getSelectedRows(self) -> Tuple[int, int]: - """ - 返回选中的行号范围 - :return: - """ + def go_to_line(self, line: int): + doc: QTextDocument = self.document() + lines = doc.blockCount() + assert 1 <= line <= lines + pos = doc.findBlockByLineNumber(line - 1).position() + text_cursor: QTextCursor = self.textCursor() + text_cursor.setPosition(pos) + self.setTextCursor(text_cursor) + + @property + def selected_code(self): + """获取光标选中的代码,或当前行""" + return self.handler.analyzer.selected_code + + @property + def current_line_code(self): + """当前行的代码,包括尾换行符""" + lines = self.code.splitlines(keepends=True) + row = self.textCursor().blockNumber() + return '' if row >= len(lines) else lines[row] + + def get_selected_row_numbers(self) -> Tuple[int, int]: + """返回选中的行号范围""" start = self.textCursor().selectionStart() end = self.textCursor().selectionEnd() start_block_id = self.document().findBlock(start).blockNumber() end_block_id = self.document().findBlock(end).blockNumber() - - return (start_block_id, end_block_id) + return start_block_id, end_block_id def set_eol_status(self): - """ - 根据文件内容中的换行符设置底部状态 - - :return: - """ + """根据文件内容中的换行符设置底部状态""" eols = re.findall(r'\r\n|\r|\n', self.toPlainText()) if not eols: - print('\\n') # self.label_status_eol.setText('Unix(LF)') # self.textEdit.setEolMode(QsciScintilla.EolUnix) # \n换行 return grouped = [(len(list(group)), key) for key, group in groupby(sorted(eols))] eol = sorted(grouped, reverse=True)[0][1] if eol == '\r\n': - print('\\r\\n') + return # self.label_status_eol.setText('Windows(CR LF)') # self.textEdit.setEolMode(QsciScintilla.EolWindows) # \r\n换行 # return QsciScintilla.EolWindows if eol == '\r': - print('\\r') # self.label_status_eol.setText('Mac(CR)') # self.textEdit.setEolMode(QsciScintilla.EolMac) # \r换行 return # self.label_status_eol.setText('Unix(LF)') # self.textEdit.setEolMode(QsciScintilla.EolUnix) # \n换行 - def load_color_scheme(self, scheme: Dict[str, str]): + @staticmethod + def load_color_scheme(scheme: Dict[str, str]): PythonHighlighter.font_cfg.load_color_scheme(scheme) - def getCursorPosition(self) -> int: + def get_cursor_position(self) -> int: # QTextCursor.position() return self.textCursor().position() - def setSelection(self): + def set_selection(self): raise NotImplementedError - text_cursor: QTextCursor = self.textCursor() - text_cursor.clearSelection() - # text_cursor.setPosition() - def hasSelectedText(self): + @property + def is_text_selected(self): return self.textCursor().hasSelection() - def replace(self, replacement: str): + def replace_selection(self, replacement: str): cursor: QTextCursor = self.textCursor() cursor.removeSelectedText() cursor.insertText(replacement) @@ -641,12 +812,9 @@ class PMBaseCodeEdit(QCodeEditor): self.setTextCursor(cursor) def get_word(self, row=-1, col=0) -> str: - """ - 获取某个行列位置下的文本.若row=-1则获取光标之下的文本 - :return: - """ + """获取某个行列位置下的文本.若row=-1则获取光标之下的文本""" if row == -1: - line_no = self.currentLine() + line_no = self.current_line_number text_cursor: QTextCursor = self.textCursor() col = text_cursor.positionInBlock() else: @@ -674,10 +842,8 @@ class PMBaseCodeEdit(QCodeEditor): break word = text[col_forward:col_backward + 1].strip(seps_set) return word - except: - import traceback - traceback.print_exc() - return '' + except Exception as exception: + logger.exception(exception) def register_highlight(self, line: int, start: int, length: int, marker: int, hint: str): """ @@ -692,57 +858,69 @@ class PMBaseCodeEdit(QCodeEditor): self.highlighter.registerHighlight(line, start, length, marker, hint) def clear_highlight(self): - """ - 清除高亮 - :return: - """ + """清除高亮""" self.highlighter.highlight_marks = {} def rehighlight(self): self.update_request_queue.put(self.UPDATE_CODE_HIGHLIGHT) - def textCursor(self) -> QTextCursor: - return super(PMBaseCodeEdit, self).textCursor() - - def dragEnterEvent(self, QDragEnterEvent): # 3 - print('Drag Enter') - if QDragEnterEvent.mimeData().hasText(): - QDragEnterEvent.acceptProposedAction() - print() - - def dragMoveEvent(self, QDragMoveEvent): # 4 - # print('Drag Move') - pass - - def dragLeaveEvent(self, QDragLeaveEvent): # 5 - # print('Drag Leave') - pass + def dragEnterEvent(self, event: QDragEnterEvent): # 3 + if event.mimeData().hasText(): + event.acceptProposedAction() def dropEvent(self, drop_event: QDropEvent): # 6 - url: QUrl = None - urls = drop_event.mimeData().urls() + urls: List[QUrl] = drop_event.mimeData().urls() for url in urls: try: file = url.toLocalFile() self.signal_file_dropped.emit(file) - except: - import traceback - traceback.print_exc() + except Exception as exception: + logger.exception(exception) + def autocomp_show(self, completions: List['CompletionResult']): + result = [] + if len(completions) != 0: + self.autocompletion_dropdown.set_completions(completions) + else: + self.autocompletion_dropdown.hide() + self.autocompletion_dropdown.autocomp_list = result -if __name__ == '__main__': - app = QApplication([]) - e = AutoCompList() - e.show() + def mouseMoveEvent(self, event: QMouseEvent): + """ + 鼠标移动事件 + 移动到marker上的时候,便弹出提示框。 + 编辑器的提示位置。 + """ + super().mouseMoveEvent(event) + cursor: QTextCursor = self.cursorForPosition(event.pos()) + # 如果代码量过大,则跳过 + if not len(self.toPlainText()) < 10000 * 120: + return + line, col = cursor.blockNumber(), cursor.positionInBlock() + flag = False + text = '' + if line in self.highlighter.highlight_marks: + marker_propertys = self.highlighter.highlight_marks.get(line) + for marker_property in marker_propertys: + start = marker_property[0] + if marker_property[1] == -1: + end = len(cursor.block().text()) + else: + end = start + marker_property[1] + if start <= col < end: + flag = True + text += marker_property[3] + '\n' + break + self.hint_widget.setGeometry(event.x(), event.y() + 20, + self.hint_widget.sizeHint().width(), self.hint_widget.sizeHint().height()) - class A(): - pass + self.hint_widget.setText(text.strip()) + self.hint_widget.setVisible(flag) + event.ignore() + def slot_function_help(self): + return self.parent().get_help() - c = A() - c.name = 'aaaaa' - c.type = 'module' - c.complete = 'aaa' - e.set_completions([c, c, c, c]) - app.exec_() + def slot_help_in_console(self): + return self.parent().get_help_in_console() diff --git a/src/pyminer/packages/code_editor/widgets/text_edit/line_number_area.py b/src/pyminer/packages/code_editor/widgets/text_edit/line_number_area.py new file mode 100644 index 0000000000000000000000000000000000000000..ca1997ab70cb7d71af6b65c4843d581c998026bb --- /dev/null +++ b/src/pyminer/packages/code_editor/widgets/text_edit/line_number_area.py @@ -0,0 +1,28 @@ +from typing import TYPE_CHECKING + +from PySide2.QtGui import QPaintEvent +from PySide2.QtWidgets import QWidget + +if TYPE_CHECKING: + from packages.code_editor.widgets.text_edit.base_text_edit import PMBaseCodeEdit + + +class QLineNumberArea(QWidget): + """ + 处理编辑器的行号区域相关的一些内容 + """ + if TYPE_CHECKING: + codeEditor: PMBaseCodeEdit + + def __init__(self, editor): + super().__init__(editor) + self.codeEditor = editor + + def paintEvent(self, event: QPaintEvent): + self.codeEditor.lineNumberAreaPaintEvent(event) + + def slot_update(self, rect, dy): + if dy: + self.scroll(0, dy) + else: + self.update(0, rect.y(), self.width(), rect.height()) diff --git a/src/pyminer/packages/code_editor/widgets/text_edit/python_text_edit.py b/src/pyminer/packages/code_editor/widgets/text_edit/python_text_edit.py new file mode 100644 index 0000000000000000000000000000000000000000..5a19c68d6e439c474d969cda748a5d00e859c065 --- /dev/null +++ b/src/pyminer/packages/code_editor/widgets/text_edit/python_text_edit.py @@ -0,0 +1,39 @@ +import logging +from typing import List + +from PySide2.QtCore import QPoint +from jedi.api.classes import Completion as CompletionResult + +from .base_text_edit import PMBaseCodeEdit +from ...code_handlers.python_handler import PythonHandler +from ...utils.auto_complete_thread.python_auto_complete import PythonAutoCompleteThread +from ...utils.highlighter.python_highlighter import PythonHighlighter + +logger = logging.getLogger(__name__) +logger.setLevel(logging.DEBUG) + + +class PMPythonCodeEdit(PMBaseCodeEdit): + last_mouse_position: QPoint + + auto_complete_thread_class = PythonAutoCompleteThread + highlighter_class = PythonHighlighter + handler_class = PythonHandler + + def on_autocomp_signal_received(self, text_cursor_content: tuple, completions: List[CompletionResult]): + """ + 当收到自动补全提示信号时,执行的函数。 + :param text_cursor_content: (row,col,hint_when_completion_triggered) + :param completions: + :return: + """ + + hint = self._get_hint() + if hint.startswith(text_cursor_content[2]): + if len(completions) == 1: + if completions[0].name == self._get_hint(): + self.hide_autocomp() + return + self.autocomp_show(completions) + else: + self.hide_autocomp() diff --git a/packages/code_editor/toolbar.py b/src/pyminer/packages/code_editor/widgets/toolbar.py similarity index 93% rename from packages/code_editor/toolbar.py rename to src/pyminer/packages/code_editor/widgets/toolbar.py index 9bd7196e2f8d2757e0e2c4d02b5d0595c7ad0137..dca769002f2203c5ef9c3f47a7af4f00b7e1d893 100644 --- a/packages/code_editor/toolbar.py +++ b/src/pyminer/packages/code_editor/widgets/toolbar.py @@ -1,9 +1,8 @@ -import os - from pmgwidgets import create_icon, PMGToolBar, QComboBox +from ..utils.base_object import CodeEditorBaseObject -class PMEditorToolbar(PMGToolBar): +class PMEditorToolbar(CodeEditorBaseObject, PMGToolBar): def __init__(self): super(PMEditorToolbar, self).__init__() @@ -45,7 +44,7 @@ class PMEditorToolbar(PMGToolBar): self.add_tool_button('button_instant_boot', self.tr('Instant Boot'), self.tr('Run script with common module preloaded to shorten interpterter startup-time.'), - create_icon(os.path.join(os.path.dirname(__file__), 'source', 'lightening.png'))) + create_icon(str(self.settings.icons_dir / 'lightening.png'))) # self.add_tool_button('button_debug', self.tr('Debug'), # create_icon(':/color/theme/default/icons/debug.svg')) interpreter_sel_widget = self.add_widget('combobox_interpreter', QComboBox()) diff --git a/packages/code_editor/codeeditor/__init__.py b/src/pyminer/packages/code_editor/widgets/ui/__init__.py similarity index 100% rename from packages/code_editor/codeeditor/__init__.py rename to src/pyminer/packages/code_editor/widgets/ui/__init__.py diff --git a/packages/code_editor/codeeditor/qtpyeditor/ui/findinpath.py b/src/pyminer/packages/code_editor/widgets/ui/findinpath.py similarity index 100% rename from packages/code_editor/codeeditor/qtpyeditor/ui/findinpath.py rename to src/pyminer/packages/code_editor/widgets/ui/findinpath.py diff --git a/packages/code_editor/codeeditor/qtpyeditor/ui/formeditor.py b/src/pyminer/packages/code_editor/widgets/ui/formeditor.py similarity index 100% rename from packages/code_editor/codeeditor/qtpyeditor/ui/formeditor.py rename to src/pyminer/packages/code_editor/widgets/ui/formeditor.py diff --git a/packages/code_editor/codeeditor/qtpyeditor/ui/gotoline.py b/src/pyminer/packages/code_editor/widgets/ui/gotoline.py similarity index 100% rename from packages/code_editor/codeeditor/qtpyeditor/ui/gotoline.py rename to src/pyminer/packages/code_editor/widgets/ui/gotoline.py diff --git a/packages/code_editor/codeeditor/qtpyeditor/ui/ui_formeditor.py b/src/pyminer/packages/code_editor/widgets/ui/ui_formeditor.py similarity index 100% rename from packages/code_editor/codeeditor/qtpyeditor/ui/ui_formeditor.py rename to src/pyminer/packages/code_editor/widgets/ui/ui_formeditor.py diff --git a/packages/code_editor/codeeditor/qtpyeditor/ui/ui_gotoline.py b/src/pyminer/packages/code_editor/widgets/ui/ui_gotoline.py similarity index 100% rename from packages/code_editor/codeeditor/qtpyeditor/ui/ui_gotoline.py rename to src/pyminer/packages/code_editor/widgets/ui/ui_gotoline.py diff --git a/packages/dataio/README.md b/src/pyminer/packages/dataio/README.md similarity index 100% rename from packages/dataio/README.md rename to src/pyminer/packages/dataio/README.md diff --git a/packages/dataio/accountutil.py b/src/pyminer/packages/dataio/accountutil.py similarity index 100% rename from packages/dataio/accountutil.py rename to src/pyminer/packages/dataio/accountutil.py diff --git a/packages/dataio/dataImportModel.py b/src/pyminer/packages/dataio/dataImportModel.py similarity index 100% rename from packages/dataio/dataImportModel.py rename to src/pyminer/packages/dataio/dataImportModel.py diff --git a/packages/dataio/dataUI/__init__.py b/src/pyminer/packages/dataio/dataUI/__init__.py similarity index 100% rename from packages/dataio/dataUI/__init__.py rename to src/pyminer/packages/dataio/dataUI/__init__.py diff --git a/packages/dataio/dataUI/data_import_csv.py b/src/pyminer/packages/dataio/dataUI/data_import_csv.py similarity index 100% rename from packages/dataio/dataUI/data_import_csv.py rename to src/pyminer/packages/dataio/dataUI/data_import_csv.py diff --git a/packages/dataio/dataUI/data_import_csv.ui b/src/pyminer/packages/dataio/dataUI/data_import_csv.ui similarity index 100% rename from packages/dataio/dataUI/data_import_csv.ui rename to src/pyminer/packages/dataio/dataUI/data_import_csv.ui diff --git a/packages/dataio/dataUI/data_import_excel.py b/src/pyminer/packages/dataio/dataUI/data_import_excel.py similarity index 100% rename from packages/dataio/dataUI/data_import_excel.py rename to src/pyminer/packages/dataio/dataUI/data_import_excel.py diff --git a/packages/dataio/dataUI/data_import_excel.ui b/src/pyminer/packages/dataio/dataUI/data_import_excel.ui similarity index 100% rename from packages/dataio/dataUI/data_import_excel.ui rename to src/pyminer/packages/dataio/dataUI/data_import_excel.ui diff --git a/packages/dataio/dataUI/data_import_matlab.py b/src/pyminer/packages/dataio/dataUI/data_import_matlab.py similarity index 100% rename from packages/dataio/dataUI/data_import_matlab.py rename to src/pyminer/packages/dataio/dataUI/data_import_matlab.py diff --git a/packages/dataio/dataUI/data_import_matlab.ui b/src/pyminer/packages/dataio/dataUI/data_import_matlab.ui similarity index 100% rename from packages/dataio/dataUI/data_import_matlab.ui rename to src/pyminer/packages/dataio/dataUI/data_import_matlab.ui diff --git a/packages/dataio/dataUI/data_import_model.py b/src/pyminer/packages/dataio/dataUI/data_import_model.py similarity index 100% rename from packages/dataio/dataUI/data_import_model.py rename to src/pyminer/packages/dataio/dataUI/data_import_model.py diff --git a/packages/dataio/dataUI/data_import_model.ui b/src/pyminer/packages/dataio/dataUI/data_import_model.ui similarity index 100% rename from packages/dataio/dataUI/data_import_model.ui rename to src/pyminer/packages/dataio/dataUI/data_import_model.ui diff --git a/packages/dataio/dataUI/data_import_mysql.py b/src/pyminer/packages/dataio/dataUI/data_import_mysql.py similarity index 100% rename from packages/dataio/dataUI/data_import_mysql.py rename to src/pyminer/packages/dataio/dataUI/data_import_mysql.py diff --git a/packages/dataio/dataUI/data_import_mysql.ui b/src/pyminer/packages/dataio/dataUI/data_import_mysql.ui similarity index 100% rename from packages/dataio/dataUI/data_import_mysql.ui rename to src/pyminer/packages/dataio/dataUI/data_import_mysql.ui diff --git a/packages/dataio/dataUI/data_import_oracle.py b/src/pyminer/packages/dataio/dataUI/data_import_oracle.py similarity index 100% rename from packages/dataio/dataUI/data_import_oracle.py rename to src/pyminer/packages/dataio/dataUI/data_import_oracle.py diff --git a/packages/dataio/dataUI/data_import_oracle.ui b/src/pyminer/packages/dataio/dataUI/data_import_oracle.ui similarity index 100% rename from packages/dataio/dataUI/data_import_oracle.ui rename to src/pyminer/packages/dataio/dataUI/data_import_oracle.ui diff --git a/packages/dataio/dataUI/data_import_postgresql.py b/src/pyminer/packages/dataio/dataUI/data_import_postgresql.py similarity index 100% rename from packages/dataio/dataUI/data_import_postgresql.py rename to src/pyminer/packages/dataio/dataUI/data_import_postgresql.py diff --git a/packages/dataio/dataUI/data_import_postgresql.ui b/src/pyminer/packages/dataio/dataUI/data_import_postgresql.ui similarity index 100% rename from packages/dataio/dataUI/data_import_postgresql.ui rename to src/pyminer/packages/dataio/dataUI/data_import_postgresql.ui diff --git a/packages/dataio/dataUI/data_import_sas.py b/src/pyminer/packages/dataio/dataUI/data_import_sas.py similarity index 100% rename from packages/dataio/dataUI/data_import_sas.py rename to src/pyminer/packages/dataio/dataUI/data_import_sas.py diff --git a/packages/dataio/dataUI/data_import_sas.ui b/src/pyminer/packages/dataio/dataUI/data_import_sas.ui similarity index 100% rename from packages/dataio/dataUI/data_import_sas.ui rename to src/pyminer/packages/dataio/dataUI/data_import_sas.ui diff --git a/packages/dataio/dataUI/data_import_spss.py b/src/pyminer/packages/dataio/dataUI/data_import_spss.py similarity index 100% rename from packages/dataio/dataUI/data_import_spss.py rename to src/pyminer/packages/dataio/dataUI/data_import_spss.py diff --git a/packages/dataio/dataUI/data_import_spss.ui b/src/pyminer/packages/dataio/dataUI/data_import_spss.ui similarity index 100% rename from packages/dataio/dataUI/data_import_spss.ui rename to src/pyminer/packages/dataio/dataUI/data_import_spss.ui diff --git a/packages/dataio/dataUI/data_import_stata.py b/src/pyminer/packages/dataio/dataUI/data_import_stata.py similarity index 100% rename from packages/dataio/dataUI/data_import_stata.py rename to src/pyminer/packages/dataio/dataUI/data_import_stata.py diff --git a/packages/dataio/dataUI/data_import_stata.ui b/src/pyminer/packages/dataio/dataUI/data_import_stata.ui similarity index 100% rename from packages/dataio/dataUI/data_import_stata.ui rename to src/pyminer/packages/dataio/dataUI/data_import_stata.ui diff --git a/packages/dataio/dataUI/data_import_text.py b/src/pyminer/packages/dataio/dataUI/data_import_text.py similarity index 100% rename from packages/dataio/dataUI/data_import_text.py rename to src/pyminer/packages/dataio/dataUI/data_import_text.py diff --git a/packages/dataio/dataUI/data_import_text.ui b/src/pyminer/packages/dataio/dataUI/data_import_text.ui similarity index 100% rename from packages/dataio/dataUI/data_import_text.ui rename to src/pyminer/packages/dataio/dataUI/data_import_text.ui diff --git a/packages/dataio/dataUI/display.png b/src/pyminer/packages/dataio/dataUI/display.png similarity index 100% rename from packages/dataio/dataUI/display.png rename to src/pyminer/packages/dataio/dataUI/display.png diff --git a/packages/dataio/dataUI/hide.png b/src/pyminer/packages/dataio/dataUI/hide.png similarity index 100% rename from packages/dataio/dataUI/hide.png rename to src/pyminer/packages/dataio/dataUI/hide.png diff --git a/packages/dataio/dataUI/password.py b/src/pyminer/packages/dataio/dataUI/password.py similarity index 100% rename from packages/dataio/dataUI/password.py rename to src/pyminer/packages/dataio/dataUI/password.py diff --git a/packages/dataio/database_sample.py b/src/pyminer/packages/dataio/database_sample.py similarity index 100% rename from packages/dataio/database_sample.py rename to src/pyminer/packages/dataio/database_sample.py diff --git a/packages/dataio/dbimport.py b/src/pyminer/packages/dataio/dbimport.py similarity index 100% rename from packages/dataio/dbimport.py rename to src/pyminer/packages/dataio/dbimport.py diff --git a/packages/dataio/dbindexing.py b/src/pyminer/packages/dataio/dbindexing.py similarity index 100% rename from packages/dataio/dbindexing.py rename to src/pyminer/packages/dataio/dbindexing.py diff --git a/packages/dataio/export.py b/src/pyminer/packages/dataio/export.py similarity index 100% rename from packages/dataio/export.py rename to src/pyminer/packages/dataio/export.py diff --git a/packages/dataio/exportutils.py b/src/pyminer/packages/dataio/exportutils.py similarity index 100% rename from packages/dataio/exportutils.py rename to src/pyminer/packages/dataio/exportutils.py diff --git a/packages/dataio/importutils.py b/src/pyminer/packages/dataio/importutils.py similarity index 100% rename from packages/dataio/importutils.py rename to src/pyminer/packages/dataio/importutils.py diff --git a/packages/dataio/main.py b/src/pyminer/packages/dataio/main.py similarity index 100% rename from packages/dataio/main.py rename to src/pyminer/packages/dataio/main.py diff --git a/packages/dataio/package.json b/src/pyminer/packages/dataio/package.json similarity index 100% rename from packages/dataio/package.json rename to src/pyminer/packages/dataio/package.json diff --git a/packages/dataio/python.jpg b/src/pyminer/packages/dataio/python.jpg similarity index 100% rename from packages/dataio/python.jpg rename to src/pyminer/packages/dataio/python.jpg diff --git a/packages/dataio/sample.py b/src/pyminer/packages/dataio/sample.py similarity index 99% rename from packages/dataio/sample.py rename to src/pyminer/packages/dataio/sample.py index 4f207de6d1a9cc5bbf011b6f564d583620a2f942..8af5aed28a75ebb7d2bcdde886be99dab1929ca9 100644 --- a/packages/dataio/sample.py +++ b/src/pyminer/packages/dataio/sample.py @@ -18,9 +18,6 @@ from pyminer_comm import set_var, run_command # 导入matlab加载模块 # 定义日志输出格式 -logging.basicConfig(format="%(asctime)s %(name)s:%(levelname)s:%(message)s", datefmt="%Y-%m-%d %H:%M:%S", - level=logging.INFO) - logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) diff --git a/packages/setting_manager/settings.json b/src/pyminer/packages/dataio/settings.json similarity index 100% rename from packages/setting_manager/settings.json rename to src/pyminer/packages/dataio/settings.json diff --git a/pmgwidgets/display/dynamicgraph/mplplots/__init__.py b/src/pyminer/packages/document_server/__init__.py similarity index 100% rename from pmgwidgets/display/dynamicgraph/mplplots/__init__.py rename to src/pyminer/packages/document_server/__init__.py diff --git a/packages/document_server/docserver/__init__.py b/src/pyminer/packages/document_server/docserver/__init__.py similarity index 100% rename from packages/document_server/docserver/__init__.py rename to src/pyminer/packages/document_server/docserver/__init__.py diff --git a/packages/document_server/docserver/renderer.py b/src/pyminer/packages/document_server/docserver/renderer.py similarity index 100% rename from packages/document_server/docserver/renderer.py rename to src/pyminer/packages/document_server/docserver/renderer.py diff --git a/packages/document_server/docserver/server.py b/src/pyminer/packages/document_server/docserver/server.py similarity index 100% rename from packages/document_server/docserver/server.py rename to src/pyminer/packages/document_server/docserver/server.py diff --git a/packages/document_server/docserver/static/css/main.css b/src/pyminer/packages/document_server/docserver/static/css/main.css similarity index 100% rename from packages/document_server/docserver/static/css/main.css rename to src/pyminer/packages/document_server/docserver/static/css/main.css diff --git a/packages/document_server/docserver/static/css/main.css.map b/src/pyminer/packages/document_server/docserver/static/css/main.css.map similarity index 100% rename from packages/document_server/docserver/static/css/main.css.map rename to src/pyminer/packages/document_server/docserver/static/css/main.css.map diff --git a/packages/document_server/docserver/static/css/main.sass b/src/pyminer/packages/document_server/docserver/static/css/main.sass similarity index 100% rename from packages/document_server/docserver/static/css/main.sass rename to src/pyminer/packages/document_server/docserver/static/css/main.sass diff --git a/packages/document_server/docserver/static/js/main.js b/src/pyminer/packages/document_server/docserver/static/js/main.js similarity index 100% rename from packages/document_server/docserver/static/js/main.js rename to src/pyminer/packages/document_server/docserver/static/js/main.js diff --git a/packages/document_server/docserver/static/mathjax/tex-mml-svg.js b/src/pyminer/packages/document_server/docserver/static/mathjax/tex-mml-svg.js similarity index 100% rename from packages/document_server/docserver/static/mathjax/tex-mml-svg.js rename to src/pyminer/packages/document_server/docserver/static/mathjax/tex-mml-svg.js diff --git a/packages/document_server/docserver/templates/content.html b/src/pyminer/packages/document_server/docserver/templates/content.html similarity index 100% rename from packages/document_server/docserver/templates/content.html rename to src/pyminer/packages/document_server/docserver/templates/content.html diff --git a/packages/document_server/extension_demo.jpg b/src/pyminer/packages/document_server/extension_demo.jpg similarity index 100% rename from packages/document_server/extension_demo.jpg rename to src/pyminer/packages/document_server/extension_demo.jpg diff --git a/packages/document_server/index.rst b/src/pyminer/packages/document_server/index.rst similarity index 100% rename from packages/document_server/index.rst rename to src/pyminer/packages/document_server/index.rst diff --git a/packages/document_server/main.py b/src/pyminer/packages/document_server/main.py similarity index 100% rename from packages/document_server/main.py rename to src/pyminer/packages/document_server/main.py diff --git a/packages/document_server/package.json b/src/pyminer/packages/document_server/package.json similarity index 100% rename from packages/document_server/package.json rename to src/pyminer/packages/document_server/package.json diff --git a/packages/document_server/settings.json b/src/pyminer/packages/document_server/settings.json similarity index 100% rename from packages/document_server/settings.json rename to src/pyminer/packages/document_server/settings.json diff --git a/packages/document_server/translations/qt_zh_CN.ts b/src/pyminer/packages/document_server/translations/qt_zh_CN.ts similarity index 100% rename from packages/document_server/translations/qt_zh_CN.ts rename to src/pyminer/packages/document_server/translations/qt_zh_CN.ts diff --git a/packages/document_server/translations/zh_CN.ts b/src/pyminer/packages/document_server/translations/zh_CN.ts similarity index 100% rename from packages/document_server/translations/zh_CN.ts rename to src/pyminer/packages/document_server/translations/zh_CN.ts diff --git a/pmgwidgets/display/dynamicgraph/pgplots/__init__.py b/src/pyminer/packages/drawings_toolbar/__init__.py similarity index 100% rename from pmgwidgets/display/dynamicgraph/pgplots/__init__.py rename to src/pyminer/packages/drawings_toolbar/__init__.py diff --git a/packages/drawings_toolbar/fastui/__init__.py b/src/pyminer/packages/drawings_toolbar/fastui/__init__.py similarity index 100% rename from packages/drawings_toolbar/fastui/__init__.py rename to src/pyminer/packages/drawings_toolbar/fastui/__init__.py diff --git a/packages/drawings_toolbar/fastui/base.py b/src/pyminer/packages/drawings_toolbar/fastui/base.py similarity index 100% rename from packages/drawings_toolbar/fastui/base.py rename to src/pyminer/packages/drawings_toolbar/fastui/base.py diff --git a/packages/drawings_toolbar/fastui/draw_boxplot.py b/src/pyminer/packages/drawings_toolbar/fastui/draw_boxplot.py similarity index 100% rename from packages/drawings_toolbar/fastui/draw_boxplot.py rename to src/pyminer/packages/drawings_toolbar/fastui/draw_boxplot.py diff --git a/packages/drawings_toolbar/fastui/draw_hist.py b/src/pyminer/packages/drawings_toolbar/fastui/draw_hist.py similarity index 100% rename from packages/drawings_toolbar/fastui/draw_hist.py rename to src/pyminer/packages/drawings_toolbar/fastui/draw_hist.py diff --git a/packages/drawings_toolbar/fastui/functions.py b/src/pyminer/packages/drawings_toolbar/fastui/functions.py similarity index 100% rename from packages/drawings_toolbar/fastui/functions.py rename to src/pyminer/packages/drawings_toolbar/fastui/functions.py diff --git a/packages/drawings_toolbar/fastui/helps/boxplot.md b/src/pyminer/packages/drawings_toolbar/fastui/helps/boxplot.md similarity index 100% rename from packages/drawings_toolbar/fastui/helps/boxplot.md rename to src/pyminer/packages/drawings_toolbar/fastui/helps/boxplot.md diff --git a/packages/drawings_toolbar/fastui/helps/markers.md b/src/pyminer/packages/drawings_toolbar/fastui/helps/markers.md similarity index 100% rename from packages/drawings_toolbar/fastui/helps/markers.md rename to src/pyminer/packages/drawings_toolbar/fastui/helps/markers.md diff --git a/packages/drawings_toolbar/fastui/helps/plot.md b/src/pyminer/packages/drawings_toolbar/fastui/helps/plot.md similarity index 100% rename from packages/drawings_toolbar/fastui/helps/plot.md rename to src/pyminer/packages/drawings_toolbar/fastui/helps/plot.md diff --git a/packages/drawings_toolbar/fastui/plot.py b/src/pyminer/packages/drawings_toolbar/fastui/plot.py similarity index 100% rename from packages/drawings_toolbar/fastui/plot.py rename to src/pyminer/packages/drawings_toolbar/fastui/plot.py diff --git a/packages/drawings_toolbar/group_chart.py b/src/pyminer/packages/drawings_toolbar/group_chart.py similarity index 100% rename from packages/drawings_toolbar/group_chart.py rename to src/pyminer/packages/drawings_toolbar/group_chart.py diff --git a/packages/drawings_toolbar/ipython_console.jpg b/src/pyminer/packages/drawings_toolbar/ipython_console.jpg similarity index 100% rename from packages/drawings_toolbar/ipython_console.jpg rename to src/pyminer/packages/drawings_toolbar/ipython_console.jpg diff --git a/packages/drawings_toolbar/main.py b/src/pyminer/packages/drawings_toolbar/main.py similarity index 100% rename from packages/drawings_toolbar/main.py rename to src/pyminer/packages/drawings_toolbar/main.py diff --git a/packages/drawings_toolbar/map_var.json b/src/pyminer/packages/drawings_toolbar/map_var.json similarity index 100% rename from packages/drawings_toolbar/map_var.json rename to src/pyminer/packages/drawings_toolbar/map_var.json diff --git a/packages/drawings_toolbar/map_var.py b/src/pyminer/packages/drawings_toolbar/map_var.py similarity index 100% rename from packages/drawings_toolbar/map_var.py rename to src/pyminer/packages/drawings_toolbar/map_var.py diff --git a/packages/drawings_toolbar/package.json b/src/pyminer/packages/drawings_toolbar/package.json similarity index 100% rename from packages/drawings_toolbar/package.json rename to src/pyminer/packages/drawings_toolbar/package.json diff --git a/packages/drawings_toolbar/pmmap/china/all/01-beijing.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/01-beijing.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/01-beijing.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/01-beijing.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/02-shanghai.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/02-shanghai.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/02-shanghai.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/02-shanghai.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/03-tianjin.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/03-tianjin.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/03-tianjin.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/03-tianjin.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/04-chongqing.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/04-chongqing.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/04-chongqing.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/04-chongqing.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/05-heilongjiang.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/05-heilongjiang.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/05-heilongjiang.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/05-heilongjiang.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/06-neimeng.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/06-neimeng.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/06-neimeng.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/06-neimeng.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/07-xinjiang.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/07-xinjiang.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/07-xinjiang.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/07-xinjiang.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/08-jilin.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/08-jilin.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/08-jilin.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/08-jilin.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/09-gansu.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/09-gansu.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/09-gansu.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/09-gansu.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/10-liaoning.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/10-liaoning.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/10-liaoning.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/10-liaoning.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/11-hebei.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/11-hebei.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/11-hebei.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/11-hebei.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/12-shanxi.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/12-shanxi.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/12-shanxi.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/12-shanxi.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/13-shan3xi.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/13-shan3xi.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/13-shan3xi.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/13-shan3xi.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/14-ningxia.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/14-ningxia.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/14-ningxia.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/14-ningxia.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/15-qinghai.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/15-qinghai.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/15-qinghai.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/15-qinghai.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/16-shandong.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/16-shandong.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/16-shandong.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/16-shandong.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/17-henan.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/17-henan.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/17-henan.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/17-henan.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/18-xizang.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/18-xizang.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/18-xizang.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/18-xizang.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/19-jiangsu.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/19-jiangsu.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/19-jiangsu.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/19-jiangsu.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/20-anhui.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/20-anhui.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/20-anhui.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/20-anhui.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/21-sichuan.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/21-sichuan.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/21-sichuan.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/21-sichuan.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/22-hubei.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/22-hubei.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/22-hubei.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/22-hubei.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/23-zhejiang.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/23-zhejiang.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/23-zhejiang.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/23-zhejiang.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/24-jiangxi.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/24-jiangxi.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/24-jiangxi.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/24-jiangxi.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/25-hunan.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/25-hunan.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/25-hunan.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/25-hunan.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/26-guizhou.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/26-guizhou.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/26-guizhou.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/26-guizhou.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/27-yunnan.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/27-yunnan.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/27-yunnan.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/27-yunnan.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/28-fujian.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/28-fujian.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/28-fujian.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/28-fujian.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/29-guangxi.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/29-guangxi.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/29-guangxi.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/29-guangxi.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/30-guangdong.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/30-guangdong.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/30-guangdong.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/30-guangdong.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/31-taiwan.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/31-taiwan.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/31-taiwan.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/31-taiwan.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/32-xianggang.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/32-xianggang.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/32-xianggang.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/32-xianggang.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/33-aomen.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/33-aomen.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/33-aomen.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/33-aomen.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/34-hainan.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/34-hainan.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/34-hainan.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/34-hainan.npy diff --git a/packages/drawings_toolbar/pmmap/china/all/39-jiuduan.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/all/39-jiuduan.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/all/39-jiuduan.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/all/39-jiuduan.npy diff --git a/packages/drawings_toolbar/pmmap/china/small/30-guangdong.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/small/30-guangdong.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/small/30-guangdong.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/small/30-guangdong.npy diff --git a/packages/drawings_toolbar/pmmap/china/small/31-taiwan.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/small/31-taiwan.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/small/31-taiwan.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/small/31-taiwan.npy diff --git a/packages/drawings_toolbar/pmmap/china/small/32-xianggang.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/small/32-xianggang.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/small/32-xianggang.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/small/32-xianggang.npy diff --git a/packages/drawings_toolbar/pmmap/china/small/33-aomen.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/small/33-aomen.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/small/33-aomen.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/small/33-aomen.npy diff --git a/packages/drawings_toolbar/pmmap/china/small/34-hainan.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/small/34-hainan.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/small/34-hainan.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/small/34-hainan.npy diff --git a/packages/drawings_toolbar/pmmap/china/small/39-jiuduan.npy b/src/pyminer/packages/drawings_toolbar/pmmap/china/small/39-jiuduan.npy similarity index 100% rename from packages/drawings_toolbar/pmmap/china/small/39-jiuduan.npy rename to src/pyminer/packages/drawings_toolbar/pmmap/china/small/39-jiuduan.npy diff --git a/packages/drawings_toolbar/radar_chart.py b/src/pyminer/packages/drawings_toolbar/radar_chart.py similarity index 100% rename from packages/drawings_toolbar/radar_chart.py rename to src/pyminer/packages/drawings_toolbar/radar_chart.py diff --git a/packages/drawings_toolbar/source/down.svg b/src/pyminer/packages/drawings_toolbar/source/down.svg similarity index 100% rename from packages/drawings_toolbar/source/down.svg rename to src/pyminer/packages/drawings_toolbar/source/down.svg diff --git a/packages/drawings_toolbar/source/erase.png b/src/pyminer/packages/drawings_toolbar/source/erase.png similarity index 100% rename from packages/drawings_toolbar/source/erase.png rename to src/pyminer/packages/drawings_toolbar/source/erase.png diff --git a/packages/drawings_toolbar/source/grid.png b/src/pyminer/packages/drawings_toolbar/source/grid.png similarity index 100% rename from packages/drawings_toolbar/source/grid.png rename to src/pyminer/packages/drawings_toolbar/source/grid.png diff --git a/packages/drawings_toolbar/source/label.png b/src/pyminer/packages/drawings_toolbar/source/label.png similarity index 100% rename from packages/drawings_toolbar/source/label.png rename to src/pyminer/packages/drawings_toolbar/source/label.png diff --git a/packages/drawings_toolbar/source/monitor.png b/src/pyminer/packages/drawings_toolbar/source/monitor.png similarity index 100% rename from packages/drawings_toolbar/source/monitor.png rename to src/pyminer/packages/drawings_toolbar/source/monitor.png diff --git a/packages/drawings_toolbar/source/plot.svg b/src/pyminer/packages/drawings_toolbar/source/plot.svg similarity index 100% rename from packages/drawings_toolbar/source/plot.svg rename to src/pyminer/packages/drawings_toolbar/source/plot.svg diff --git a/packages/drawings_toolbar/source/split.png b/src/pyminer/packages/drawings_toolbar/source/split.png similarity index 100% rename from packages/drawings_toolbar/source/split.png rename to src/pyminer/packages/drawings_toolbar/source/split.png diff --git a/packages/drawings_toolbar/source/ticks.png b/src/pyminer/packages/drawings_toolbar/source/ticks.png similarity index 100% rename from packages/drawings_toolbar/source/ticks.png rename to src/pyminer/packages/drawings_toolbar/source/ticks.png diff --git "a/packages/drawings_toolbar/source/\345\234\260\345\233\276.png" "b/src/pyminer/packages/drawings_toolbar/source/\345\234\260\345\233\276.png" similarity index 100% rename from "packages/drawings_toolbar/source/\345\234\260\345\233\276.png" rename to "src/pyminer/packages/drawings_toolbar/source/\345\234\260\345\233\276.png" diff --git "a/packages/drawings_toolbar/source/\346\212\230\347\272\277\345\233\276.png" "b/src/pyminer/packages/drawings_toolbar/source/\346\212\230\347\272\277\345\233\276.png" similarity index 100% rename from "packages/drawings_toolbar/source/\346\212\230\347\272\277\345\233\276.png" rename to "src/pyminer/packages/drawings_toolbar/source/\346\212\230\347\272\277\345\233\276.png" diff --git "a/packages/drawings_toolbar/source/\346\225\243\347\202\271\345\233\276.png" "b/src/pyminer/packages/drawings_toolbar/source/\346\225\243\347\202\271\345\233\276.png" similarity index 100% rename from "packages/drawings_toolbar/source/\346\225\243\347\202\271\345\233\276.png" rename to "src/pyminer/packages/drawings_toolbar/source/\346\225\243\347\202\271\345\233\276.png" diff --git "a/packages/drawings_toolbar/source/\346\235\241\345\275\242\345\233\276.png" "b/src/pyminer/packages/drawings_toolbar/source/\346\235\241\345\275\242\345\233\276.png" similarity index 100% rename from "packages/drawings_toolbar/source/\346\235\241\345\275\242\345\233\276.png" rename to "src/pyminer/packages/drawings_toolbar/source/\346\235\241\345\275\242\345\233\276.png" diff --git "a/packages/drawings_toolbar/source/\346\237\261\345\275\242\345\233\276.png" "b/src/pyminer/packages/drawings_toolbar/source/\346\237\261\345\275\242\345\233\276.png" similarity index 100% rename from "packages/drawings_toolbar/source/\346\237\261\345\275\242\345\233\276.png" rename to "src/pyminer/packages/drawings_toolbar/source/\346\237\261\345\275\242\345\233\276.png" diff --git "a/packages/drawings_toolbar/source/\346\260\224\346\263\241\345\233\276.png" "b/src/pyminer/packages/drawings_toolbar/source/\346\260\224\346\263\241\345\233\276.png" similarity index 100% rename from "packages/drawings_toolbar/source/\346\260\224\346\263\241\345\233\276.png" rename to "src/pyminer/packages/drawings_toolbar/source/\346\260\224\346\263\241\345\233\276.png" diff --git "a/packages/drawings_toolbar/source/\347\203\255\345\212\233\345\233\276.png" "b/src/pyminer/packages/drawings_toolbar/source/\347\203\255\345\212\233\345\233\276.png" similarity index 100% rename from "packages/drawings_toolbar/source/\347\203\255\345\212\233\345\233\276.png" rename to "src/pyminer/packages/drawings_toolbar/source/\347\203\255\345\212\233\345\233\276.png" diff --git "a/packages/drawings_toolbar/source/\347\233\264\346\226\271\345\233\276.png" "b/src/pyminer/packages/drawings_toolbar/source/\347\233\264\346\226\271\345\233\276.png" similarity index 100% rename from "packages/drawings_toolbar/source/\347\233\264\346\226\271\345\233\276.png" rename to "src/pyminer/packages/drawings_toolbar/source/\347\233\264\346\226\271\345\233\276.png" diff --git "a/packages/drawings_toolbar/source/\347\256\261\347\272\277\345\233\276.png" "b/src/pyminer/packages/drawings_toolbar/source/\347\256\261\347\272\277\345\233\276.png" similarity index 100% rename from "packages/drawings_toolbar/source/\347\256\261\347\272\277\345\233\276.png" rename to "src/pyminer/packages/drawings_toolbar/source/\347\256\261\347\272\277\345\233\276.png" diff --git "a/packages/drawings_toolbar/source/\347\273\204\345\220\210\345\233\276.png" "b/src/pyminer/packages/drawings_toolbar/source/\347\273\204\345\220\210\345\233\276.png" similarity index 100% rename from "packages/drawings_toolbar/source/\347\273\204\345\220\210\345\233\276.png" rename to "src/pyminer/packages/drawings_toolbar/source/\347\273\204\345\220\210\345\233\276.png" diff --git "a/packages/drawings_toolbar/source/\351\233\267\350\276\276\345\233\276.png" "b/src/pyminer/packages/drawings_toolbar/source/\351\233\267\350\276\276\345\233\276.png" similarity index 100% rename from "packages/drawings_toolbar/source/\351\233\267\350\276\276\345\233\276.png" rename to "src/pyminer/packages/drawings_toolbar/source/\351\233\267\350\276\276\345\233\276.png" diff --git "a/packages/drawings_toolbar/source/\351\235\242\347\247\257\345\233\276.png" "b/src/pyminer/packages/drawings_toolbar/source/\351\235\242\347\247\257\345\233\276.png" similarity index 100% rename from "packages/drawings_toolbar/source/\351\235\242\347\247\257\345\233\276.png" rename to "src/pyminer/packages/drawings_toolbar/source/\351\235\242\347\247\257\345\233\276.png" diff --git "a/packages/drawings_toolbar/source/\351\245\274\345\233\276.png" "b/src/pyminer/packages/drawings_toolbar/source/\351\245\274\345\233\276.png" similarity index 100% rename from "packages/drawings_toolbar/source/\351\245\274\345\233\276.png" rename to "src/pyminer/packages/drawings_toolbar/source/\351\245\274\345\233\276.png" diff --git a/packages/drawings_toolbar/translations/qt_zh_CN.qm b/src/pyminer/packages/drawings_toolbar/translations/qt_zh_CN.qm similarity index 100% rename from packages/drawings_toolbar/translations/qt_zh_CN.qm rename to src/pyminer/packages/drawings_toolbar/translations/qt_zh_CN.qm diff --git a/packages/drawings_toolbar/translations/qt_zh_CN.ts b/src/pyminer/packages/drawings_toolbar/translations/qt_zh_CN.ts similarity index 100% rename from packages/drawings_toolbar/translations/qt_zh_CN.ts rename to src/pyminer/packages/drawings_toolbar/translations/qt_zh_CN.ts diff --git a/pmgwidgets/display/matplotlib/__init__.py b/src/pyminer/packages/embedded_browser/__init__.py similarity index 100% rename from pmgwidgets/display/matplotlib/__init__.py rename to src/pyminer/packages/embedded_browser/__init__.py diff --git a/packages/embedded_browser/extension_demo.jpg b/src/pyminer/packages/embedded_browser/extension_demo.jpg similarity index 100% rename from packages/embedded_browser/extension_demo.jpg rename to src/pyminer/packages/embedded_browser/extension_demo.jpg diff --git a/packages/embedded_browser/index.rst b/src/pyminer/packages/embedded_browser/index.rst similarity index 100% rename from packages/embedded_browser/index.rst rename to src/pyminer/packages/embedded_browser/index.rst diff --git a/packages/embedded_browser/main.py b/src/pyminer/packages/embedded_browser/main.py similarity index 100% rename from packages/embedded_browser/main.py rename to src/pyminer/packages/embedded_browser/main.py diff --git a/packages/embedded_browser/package.json b/src/pyminer/packages/embedded_browser/package.json similarity index 100% rename from packages/embedded_browser/package.json rename to src/pyminer/packages/embedded_browser/package.json diff --git a/packages/embedded_browser/settings.json b/src/pyminer/packages/embedded_browser/settings.json similarity index 100% rename from packages/embedded_browser/settings.json rename to src/pyminer/packages/embedded_browser/settings.json diff --git a/packages/embedded_browser/translations/qt_zh_CN.ts b/src/pyminer/packages/embedded_browser/translations/qt_zh_CN.ts similarity index 100% rename from packages/embedded_browser/translations/qt_zh_CN.ts rename to src/pyminer/packages/embedded_browser/translations/qt_zh_CN.ts diff --git a/packages/embedded_browser/translations/zh_CN.ts b/src/pyminer/packages/embedded_browser/translations/zh_CN.ts similarity index 100% rename from packages/embedded_browser/translations/zh_CN.ts rename to src/pyminer/packages/embedded_browser/translations/zh_CN.ts diff --git a/packages/embedded_browser/webbrowser.py b/src/pyminer/packages/embedded_browser/webbrowser.py similarity index 100% rename from packages/embedded_browser/webbrowser.py rename to src/pyminer/packages/embedded_browser/webbrowser.py diff --git a/pmgwidgets/display/matplotlib/pyqtgraph/__init__.py b/src/pyminer/packages/extension_demo/__init__.py similarity index 100% rename from pmgwidgets/display/matplotlib/pyqtgraph/__init__.py rename to src/pyminer/packages/extension_demo/__init__.py diff --git a/packages/extension_demo/extension_demo.jpg b/src/pyminer/packages/extension_demo/extension_demo.jpg similarity index 100% rename from packages/extension_demo/extension_demo.jpg rename to src/pyminer/packages/extension_demo/extension_demo.jpg diff --git a/packages/extension_demo/main.py b/src/pyminer/packages/extension_demo/main.py similarity index 100% rename from packages/extension_demo/main.py rename to src/pyminer/packages/extension_demo/main.py diff --git a/packages/extension_demo/package.json b/src/pyminer/packages/extension_demo/package.json similarity index 100% rename from packages/extension_demo/package.json rename to src/pyminer/packages/extension_demo/package.json diff --git a/packages/extension_demo/settings.json b/src/pyminer/packages/extension_demo/settings.json similarity index 100% rename from packages/extension_demo/settings.json rename to src/pyminer/packages/extension_demo/settings.json diff --git a/packages/extension_demo/translations/qt_zh_CN.ts b/src/pyminer/packages/extension_demo/translations/qt_zh_CN.ts similarity index 100% rename from packages/extension_demo/translations/qt_zh_CN.ts rename to src/pyminer/packages/extension_demo/translations/qt_zh_CN.ts diff --git a/packages/extension_demo/translations/zh_CN.ts b/src/pyminer/packages/extension_demo/translations/zh_CN.ts similarity index 100% rename from packages/extension_demo/translations/zh_CN.ts rename to src/pyminer/packages/extension_demo/translations/zh_CN.ts diff --git a/pmgwidgets/display/vtk/__init__.py b/src/pyminer/packages/file_tree/__init__.py similarity index 100% rename from pmgwidgets/display/vtk/__init__.py rename to src/pyminer/packages/file_tree/__init__.py diff --git a/packages/file_tree/extension_demo.jpg b/src/pyminer/packages/file_tree/extension_demo.jpg similarity index 100% rename from packages/file_tree/extension_demo.jpg rename to src/pyminer/packages/file_tree/extension_demo.jpg diff --git a/packages/file_tree/file_tree.py b/src/pyminer/packages/file_tree/file_tree.py similarity index 98% rename from packages/file_tree/file_tree.py rename to src/pyminer/packages/file_tree/file_tree.py index d9f7e6edaa603b1ec130d8ab74d7cabb7270d2ff..9b37739d10f09236221627089fb3d9196a82f055 100644 --- a/packages/file_tree/file_tree.py +++ b/src/pyminer/packages/file_tree/file_tree.py @@ -1,10 +1,12 @@ import os import platform from typing import Dict, Callable, List -from PySide2.QtCore import Qt, QModelIndex, QMimeData, QUrl -from PySide2.QtGui import QPixmap, QIcon, QCloseEvent, QKeyEvent + +from PySide2.QtCore import Qt, QModelIndex +from PySide2.QtGui import QPixmap, QIcon, QCloseEvent from PySide2.QtWidgets import QVBoxLayout, QWidget, QFileDialog, QPushButton, QHBoxLayout, QLineEdit, QToolButton, \ QApplication, QMessageBox + from pmgwidgets import PMGFilesTreeview, PMDockObject, in_unit_test, UndoManager @@ -259,11 +261,8 @@ class PMFilesTree(QWidget, PMDockObject): if __name__ == '__main__': import sys import cgitb - import logging cgitb.enable(format='text') - logging.basicConfig(level=logging.INFO) - app = QApplication(sys.argv) w = PMFilesTree() diff --git a/packages/file_tree/main.py b/src/pyminer/packages/file_tree/main.py similarity index 100% rename from packages/file_tree/main.py rename to src/pyminer/packages/file_tree/main.py diff --git a/packages/file_tree/package.json b/src/pyminer/packages/file_tree/package.json similarity index 100% rename from packages/file_tree/package.json rename to src/pyminer/packages/file_tree/package.json diff --git a/packages/file_tree/settings.json b/src/pyminer/packages/file_tree/settings.json similarity index 100% rename from packages/file_tree/settings.json rename to src/pyminer/packages/file_tree/settings.json diff --git a/packages/file_tree/src/up.svg b/src/pyminer/packages/file_tree/src/up.svg similarity index 100% rename from packages/file_tree/src/up.svg rename to src/pyminer/packages/file_tree/src/up.svg diff --git a/packages/file_tree/translations/qt_zh_CN.qm b/src/pyminer/packages/file_tree/translations/qt_zh_CN.qm similarity index 100% rename from packages/file_tree/translations/qt_zh_CN.qm rename to src/pyminer/packages/file_tree/translations/qt_zh_CN.qm diff --git a/packages/file_tree/translations/qt_zh_CN.ts b/src/pyminer/packages/file_tree/translations/qt_zh_CN.ts similarity index 100% rename from packages/file_tree/translations/qt_zh_CN.ts rename to src/pyminer/packages/file_tree/translations/qt_zh_CN.ts diff --git a/pmgwidgets/examples/__init__.py b/src/pyminer/packages/graph_agg/__init__.py similarity index 100% rename from pmgwidgets/examples/__init__.py rename to src/pyminer/packages/graph_agg/__init__.py diff --git a/packages/graph_agg/extension_demo.jpg b/src/pyminer/packages/graph_agg/extension_demo.jpg similarity index 100% rename from packages/graph_agg/extension_demo.jpg rename to src/pyminer/packages/graph_agg/extension_demo.jpg diff --git a/packages/graph_agg/graph_agg.py b/src/pyminer/packages/graph_agg/graph_agg.py similarity index 100% rename from packages/graph_agg/graph_agg.py rename to src/pyminer/packages/graph_agg/graph_agg.py diff --git a/packages/graph_agg/graph_agg_ui.py b/src/pyminer/packages/graph_agg/graph_agg_ui.py similarity index 100% rename from packages/graph_agg/graph_agg_ui.py rename to src/pyminer/packages/graph_agg/graph_agg_ui.py diff --git a/packages/graph_agg/graph_agg_ui.ui b/src/pyminer/packages/graph_agg/graph_agg_ui.ui similarity index 100% rename from packages/graph_agg/graph_agg_ui.ui rename to src/pyminer/packages/graph_agg/graph_agg_ui.ui diff --git a/packages/graph_agg/main.py b/src/pyminer/packages/graph_agg/main.py similarity index 100% rename from packages/graph_agg/main.py rename to src/pyminer/packages/graph_agg/main.py diff --git a/packages/graph_agg/package.json b/src/pyminer/packages/graph_agg/package.json similarity index 100% rename from packages/graph_agg/package.json rename to src/pyminer/packages/graph_agg/package.json diff --git a/packages/index.rst b/src/pyminer/packages/index.rst similarity index 100% rename from packages/index.rst rename to src/pyminer/packages/index.rst diff --git a/packages/ipython_console/README.md b/src/pyminer/packages/ipython_console/README.md similarity index 100% rename from packages/ipython_console/README.md rename to src/pyminer/packages/ipython_console/README.md diff --git a/pmgwidgets/examples/utilities/__init__.py b/src/pyminer/packages/ipython_console/__init__.py similarity index 100% rename from pmgwidgets/examples/utilities/__init__.py rename to src/pyminer/packages/ipython_console/__init__.py diff --git a/packages/ipython_console/commandparser.py b/src/pyminer/packages/ipython_console/commandparser.py similarity index 100% rename from packages/ipython_console/commandparser.py rename to src/pyminer/packages/ipython_console/commandparser.py diff --git a/packages/ipython_console/index.rst b/src/pyminer/packages/ipython_console/index.rst similarity index 100% rename from packages/ipython_console/index.rst rename to src/pyminer/packages/ipython_console/index.rst diff --git a/packages/ipython_console/initialize.py b/src/pyminer/packages/ipython_console/initialize.py similarity index 100% rename from packages/ipython_console/initialize.py rename to src/pyminer/packages/ipython_console/initialize.py diff --git a/packages/ipython_console/ipython_console.jpg b/src/pyminer/packages/ipython_console/ipython_console.jpg similarity index 100% rename from packages/ipython_console/ipython_console.jpg rename to src/pyminer/packages/ipython_console/ipython_console.jpg diff --git a/packages/ipython_console/ipythonqtconsole.py b/src/pyminer/packages/ipython_console/ipythonqtconsole.py similarity index 100% rename from packages/ipython_console/ipythonqtconsole.py rename to src/pyminer/packages/ipython_console/ipythonqtconsole.py diff --git a/packages/ipython_console/main.py b/src/pyminer/packages/ipython_console/main.py similarity index 100% rename from packages/ipython_console/main.py rename to src/pyminer/packages/ipython_console/main.py diff --git a/packages/ipython_console/package.json b/src/pyminer/packages/ipython_console/package.json similarity index 100% rename from packages/ipython_console/package.json rename to src/pyminer/packages/ipython_console/package.json diff --git a/packages/ipython_console/requirements_ipython_node.txt b/src/pyminer/packages/ipython_console/requirements_ipython_node.txt similarity index 100% rename from packages/ipython_console/requirements_ipython_node.txt rename to src/pyminer/packages/ipython_console/requirements_ipython_node.txt diff --git a/packages/ipython_console/translations/qt_zh_CN.qm b/src/pyminer/packages/ipython_console/translations/qt_zh_CN.qm similarity index 100% rename from packages/ipython_console/translations/qt_zh_CN.qm rename to src/pyminer/packages/ipython_console/translations/qt_zh_CN.qm diff --git a/packages/ipython_console/translations/qt_zh_CN.ts b/src/pyminer/packages/ipython_console/translations/qt_zh_CN.ts similarity index 100% rename from packages/ipython_console/translations/qt_zh_CN.ts rename to src/pyminer/packages/ipython_console/translations/qt_zh_CN.ts diff --git a/pmgwidgets/flowchart/nodes/__init__.py b/src/pyminer/packages/jupyter_notebook_support/__init__.py similarity index 100% rename from pmgwidgets/flowchart/nodes/__init__.py rename to src/pyminer/packages/jupyter_notebook_support/__init__.py diff --git a/packages/jupyter_notebook_support/client.py b/src/pyminer/packages/jupyter_notebook_support/client.py similarity index 100% rename from packages/jupyter_notebook_support/client.py rename to src/pyminer/packages/jupyter_notebook_support/client.py diff --git a/packages/jupyter_notebook_support/extension_demo.jpg b/src/pyminer/packages/jupyter_notebook_support/extension_demo.jpg similarity index 100% rename from packages/jupyter_notebook_support/extension_demo.jpg rename to src/pyminer/packages/jupyter_notebook_support/extension_demo.jpg diff --git a/packages/jupyter_notebook_support/ipython_data_show.py b/src/pyminer/packages/jupyter_notebook_support/ipython_data_show.py similarity index 100% rename from packages/jupyter_notebook_support/ipython_data_show.py rename to src/pyminer/packages/jupyter_notebook_support/ipython_data_show.py diff --git a/packages/jupyter_notebook_support/main.py b/src/pyminer/packages/jupyter_notebook_support/main.py similarity index 100% rename from packages/jupyter_notebook_support/main.py rename to src/pyminer/packages/jupyter_notebook_support/main.py diff --git a/packages/jupyter_notebook_support/package.json b/src/pyminer/packages/jupyter_notebook_support/package.json similarity index 100% rename from packages/jupyter_notebook_support/package.json rename to src/pyminer/packages/jupyter_notebook_support/package.json diff --git a/packages/jupyter_notebook_support/route.py b/src/pyminer/packages/jupyter_notebook_support/route.py similarity index 100% rename from packages/jupyter_notebook_support/route.py rename to src/pyminer/packages/jupyter_notebook_support/route.py diff --git a/packages/jupyter_notebook_support/scripts/pyminer_ipython_node.py b/src/pyminer/packages/jupyter_notebook_support/scripts/pyminer_ipython_node.py similarity index 95% rename from packages/jupyter_notebook_support/scripts/pyminer_ipython_node.py rename to src/pyminer/packages/jupyter_notebook_support/scripts/pyminer_ipython_node.py index a1e03fab6053a35ac1c7f7552847720055b5a184..1f20d9dc1586c229957576444b7492dabc650e7e 100644 --- a/packages/jupyter_notebook_support/scripts/pyminer_ipython_node.py +++ b/src/pyminer/packages/jupyter_notebook_support/scripts/pyminer_ipython_node.py @@ -14,10 +14,6 @@ import sys, os import typing from IPython.core.magic import register_line_magic, register_cell_magic, register_line_cell_magic -# logging.basicConfig(format="%(asctime)s %(name)s:%(levelname)s:%(message)s", -# datefmt="%Y-%m-%d %H:%M:%S", -# level=logging.INFO, -# filename=r"c:\users\12957\Desktop\123.txt") __logger = logging.getLogger() __logger.info("Env variable-- IPYTHON_AS_PYMINER_NODE: %s" % os.environ.get('IPYTHON_AS_PYMINER_NODE')) if (os.environ.get('IPYTHON_AS_PYMINER_NODE') is not None) and (int(os.environ.get('IPYTHON_AS_PYMINER_NODE')) >= 1): diff --git a/packages/jupyter_notebook_support/tests/.ipynb_checkpoints/Untitled-checkpoint.ipynb b/src/pyminer/packages/jupyter_notebook_support/tests/.ipynb_checkpoints/Untitled-checkpoint.ipynb similarity index 100% rename from packages/jupyter_notebook_support/tests/.ipynb_checkpoints/Untitled-checkpoint.ipynb rename to src/pyminer/packages/jupyter_notebook_support/tests/.ipynb_checkpoints/Untitled-checkpoint.ipynb diff --git a/packages/jupyter_notebook_support/tests/Untitled.ipynb b/src/pyminer/packages/jupyter_notebook_support/tests/Untitled.ipynb similarity index 100% rename from packages/jupyter_notebook_support/tests/Untitled.ipynb rename to src/pyminer/packages/jupyter_notebook_support/tests/Untitled.ipynb diff --git a/packages/jupyter_notebook_support/tests/exec_api_test.py b/src/pyminer/packages/jupyter_notebook_support/tests/exec_api_test.py similarity index 100% rename from packages/jupyter_notebook_support/tests/exec_api_test.py rename to src/pyminer/packages/jupyter_notebook_support/tests/exec_api_test.py diff --git a/packages/jupyter_notebook_support/tests/find_free_port.py b/src/pyminer/packages/jupyter_notebook_support/tests/find_free_port.py similarity index 100% rename from packages/jupyter_notebook_support/tests/find_free_port.py rename to src/pyminer/packages/jupyter_notebook_support/tests/find_free_port.py diff --git a/packages/jupyter_notebook_support/tests/find_kernel_spec.py b/src/pyminer/packages/jupyter_notebook_support/tests/find_kernel_spec.py similarity index 100% rename from packages/jupyter_notebook_support/tests/find_kernel_spec.py rename to src/pyminer/packages/jupyter_notebook_support/tests/find_kernel_spec.py diff --git a/packages/jupyter_notebook_support/tests/jupyter_client_test.py b/src/pyminer/packages/jupyter_notebook_support/tests/jupyter_client_test.py similarity index 100% rename from packages/jupyter_notebook_support/tests/jupyter_client_test.py rename to src/pyminer/packages/jupyter_notebook_support/tests/jupyter_client_test.py diff --git a/packages/jupyter_notebook_support/tests/list_running_jupyter_servers.py b/src/pyminer/packages/jupyter_notebook_support/tests/list_running_jupyter_servers.py similarity index 100% rename from packages/jupyter_notebook_support/tests/list_running_jupyter_servers.py rename to src/pyminer/packages/jupyter_notebook_support/tests/list_running_jupyter_servers.py diff --git a/packages/jupyter_notebook_support/tests/test.json b/src/pyminer/packages/jupyter_notebook_support/tests/test.json similarity index 100% rename from packages/jupyter_notebook_support/tests/test.json rename to src/pyminer/packages/jupyter_notebook_support/tests/test.json diff --git a/packages/jupyter_notebook_support/translations/qt_zh_CN.qm b/src/pyminer/packages/jupyter_notebook_support/translations/qt_zh_CN.qm similarity index 100% rename from packages/jupyter_notebook_support/translations/qt_zh_CN.qm rename to src/pyminer/packages/jupyter_notebook_support/translations/qt_zh_CN.qm diff --git a/packages/jupyter_notebook_support/translations/qt_zh_CN.ts b/src/pyminer/packages/jupyter_notebook_support/translations/qt_zh_CN.ts similarity index 100% rename from packages/jupyter_notebook_support/translations/qt_zh_CN.ts rename to src/pyminer/packages/jupyter_notebook_support/translations/qt_zh_CN.ts diff --git a/pmgwidgets/flowchart/tests/__init__.py b/src/pyminer/packages/pm_calc/__init__.py similarity index 100% rename from pmgwidgets/flowchart/tests/__init__.py rename to src/pyminer/packages/pm_calc/__init__.py diff --git a/packages/pm_calc/fastui/__init__.py b/src/pyminer/packages/pm_calc/fastui/__init__.py similarity index 100% rename from packages/pm_calc/fastui/__init__.py rename to src/pyminer/packages/pm_calc/fastui/__init__.py diff --git a/packages/pm_calc/fastui/base.py b/src/pyminer/packages/pm_calc/fastui/base.py similarity index 100% rename from packages/pm_calc/fastui/base.py rename to src/pyminer/packages/pm_calc/fastui/base.py diff --git a/packages/pm_calc/fastui/create_random_variable.py b/src/pyminer/packages/pm_calc/fastui/create_random_variable.py similarity index 100% rename from packages/pm_calc/fastui/create_random_variable.py rename to src/pyminer/packages/pm_calc/fastui/create_random_variable.py diff --git a/packages/pm_calc/fastui/create_tensor.py b/src/pyminer/packages/pm_calc/fastui/create_tensor.py similarity index 100% rename from packages/pm_calc/fastui/create_tensor.py rename to src/pyminer/packages/pm_calc/fastui/create_tensor.py diff --git a/packages/pm_calc/fastui/create_vector.py b/src/pyminer/packages/pm_calc/fastui/create_vector.py similarity index 100% rename from packages/pm_calc/fastui/create_vector.py rename to src/pyminer/packages/pm_calc/fastui/create_vector.py diff --git a/packages/pm_calc/fastui/dblquad.py b/src/pyminer/packages/pm_calc/fastui/dblquad.py similarity index 100% rename from packages/pm_calc/fastui/dblquad.py rename to src/pyminer/packages/pm_calc/fastui/dblquad.py diff --git a/packages/pm_calc/fastui/equation_solve.py b/src/pyminer/packages/pm_calc/fastui/equation_solve.py similarity index 100% rename from packages/pm_calc/fastui/equation_solve.py rename to src/pyminer/packages/pm_calc/fastui/equation_solve.py diff --git a/packages/pm_calc/fastui/helps/numerical_integration.md b/src/pyminer/packages/pm_calc/fastui/helps/numerical_integration.md similarity index 100% rename from packages/pm_calc/fastui/helps/numerical_integration.md rename to src/pyminer/packages/pm_calc/fastui/helps/numerical_integration.md diff --git a/packages/pm_calc/fastui/helps/reshape_tensor.md b/src/pyminer/packages/pm_calc/fastui/helps/reshape_tensor.md similarity index 100% rename from packages/pm_calc/fastui/helps/reshape_tensor.md rename to src/pyminer/packages/pm_calc/fastui/helps/reshape_tensor.md diff --git a/packages/pm_calc/fastui/matrix_calc.py b/src/pyminer/packages/pm_calc/fastui/matrix_calc.py similarity index 100% rename from packages/pm_calc/fastui/matrix_calc.py rename to src/pyminer/packages/pm_calc/fastui/matrix_calc.py diff --git a/packages/pm_calc/fastui/matrix_inv.py b/src/pyminer/packages/pm_calc/fastui/matrix_inv.py similarity index 100% rename from packages/pm_calc/fastui/matrix_inv.py rename to src/pyminer/packages/pm_calc/fastui/matrix_inv.py diff --git a/packages/pm_calc/fastui/matrix_numbers.py b/src/pyminer/packages/pm_calc/fastui/matrix_numbers.py similarity index 100% rename from packages/pm_calc/fastui/matrix_numbers.py rename to src/pyminer/packages/pm_calc/fastui/matrix_numbers.py diff --git a/packages/pm_calc/fastui/numerical_integration.py b/src/pyminer/packages/pm_calc/fastui/numerical_integration.py similarity index 100% rename from packages/pm_calc/fastui/numerical_integration.py rename to src/pyminer/packages/pm_calc/fastui/numerical_integration.py diff --git a/packages/pm_calc/fastui/reshape_tensor.py b/src/pyminer/packages/pm_calc/fastui/reshape_tensor.py similarity index 100% rename from packages/pm_calc/fastui/reshape_tensor.py rename to src/pyminer/packages/pm_calc/fastui/reshape_tensor.py diff --git a/packages/pm_calc/icons/create.png b/src/pyminer/packages/pm_calc/icons/create.png similarity index 100% rename from packages/pm_calc/icons/create.png rename to src/pyminer/packages/pm_calc/icons/create.png diff --git a/packages/pm_calc/icons/eigen.png b/src/pyminer/packages/pm_calc/icons/eigen.png similarity index 100% rename from packages/pm_calc/icons/eigen.png rename to src/pyminer/packages/pm_calc/icons/eigen.png diff --git a/packages/pm_calc/icons/equation_solve.png b/src/pyminer/packages/pm_calc/icons/equation_solve.png similarity index 100% rename from packages/pm_calc/icons/equation_solve.png rename to src/pyminer/packages/pm_calc/icons/equation_solve.png diff --git a/packages/pm_calc/icons/flip.png b/src/pyminer/packages/pm_calc/icons/flip.png similarity index 100% rename from packages/pm_calc/icons/flip.png rename to src/pyminer/packages/pm_calc/icons/flip.png diff --git a/packages/pm_calc/icons/integrate.png b/src/pyminer/packages/pm_calc/icons/integrate.png similarity index 100% rename from packages/pm_calc/icons/integrate.png rename to src/pyminer/packages/pm_calc/icons/integrate.png diff --git a/packages/pm_calc/icons/matrix.png b/src/pyminer/packages/pm_calc/icons/matrix.png similarity index 100% rename from packages/pm_calc/icons/matrix.png rename to src/pyminer/packages/pm_calc/icons/matrix.png diff --git a/packages/pm_calc/icons/matrix_calc.png b/src/pyminer/packages/pm_calc/icons/matrix_calc.png similarity index 100% rename from packages/pm_calc/icons/matrix_calc.png rename to src/pyminer/packages/pm_calc/icons/matrix_calc.png diff --git a/packages/pm_calc/icons/reshape.png b/src/pyminer/packages/pm_calc/icons/reshape.png similarity index 100% rename from packages/pm_calc/icons/reshape.png rename to src/pyminer/packages/pm_calc/icons/reshape.png diff --git a/packages/pm_calc/icons/rvs.png b/src/pyminer/packages/pm_calc/icons/rvs.png similarity index 100% rename from packages/pm_calc/icons/rvs.png rename to src/pyminer/packages/pm_calc/icons/rvs.png diff --git a/packages/pm_calc/ipython_console.jpg b/src/pyminer/packages/pm_calc/ipython_console.jpg similarity index 100% rename from packages/pm_calc/ipython_console.jpg rename to src/pyminer/packages/pm_calc/ipython_console.jpg diff --git a/packages/pm_calc/main.py b/src/pyminer/packages/pm_calc/main.py similarity index 100% rename from packages/pm_calc/main.py rename to src/pyminer/packages/pm_calc/main.py diff --git a/src/pyminer/packages/pm_calc/package.json b/src/pyminer/packages/pm_calc/package.json new file mode 100644 index 0000000000000000000000000000000000000000..61e8bb7891a27a7c27ba1a59db3820f0e20bc31b --- /dev/null +++ b/src/pyminer/packages/pm_calc/package.json @@ -0,0 +1,27 @@ +{ + "name": "pm_calc", + "display_name": "计算", + "version": "0.1.0", + "description": "内置计算的菜单", + "icon": "ipython_console.jpg", + "interface": { + "file": "main.py", + "interface": "CalcInterface" + }, + "widgets": [ + { + "file": "main.py", + "widget": "PMCalcToolBar", + "position": "new_toolbar", + "config": { + "message": "no", + "name": "pm_calc", + "text": "数据" + } + } + ], + "requirements": [ + "workspace_inspector", + "applications_toolbar" + ] +} \ No newline at end of file diff --git a/packages/pm_preprocess/preprocess.py b/src/pyminer/packages/pm_calc/preprocess.py similarity index 99% rename from packages/pm_preprocess/preprocess.py rename to src/pyminer/packages/pm_calc/preprocess.py index abdb9e44d4f0228b5414c2a600b017f217c1122b..5a39a1ebcb0c654437b8682d430868859267a09c 100644 --- a/packages/pm_preprocess/preprocess.py +++ b/src/pyminer/packages/pm_calc/preprocess.py @@ -1,40 +1,36 @@ -import os import sys -import logging import datetime +import logging +import sys import webbrowser + import numpy as np import pandas as pd -from pandas.api.types import is_numeric_dtype +# # 导入Qt模块 +from PySide2.QtCore import Qt, Signal +from PySide2.QtWidgets import QWidget, QMessageBox, \ + QFileDialog, QDesktopWidget, QDialog, QTableWidgetItem, QInputDialog, QAbstractItemView, QLineEdit, \ + QApplication from pandas.api.types import is_float_dtype +from pandas.api.types import is_numeric_dtype from pandas.api.types import is_string_dtype -# # 导入Qt模块 -from PySide2.QtCore import QSize, Qt, Signal -from PySide2.QtGui import QPixmap -from PySide2.QtWidgets import QHBoxLayout, QWidget, QSpacerItem, QToolButton, QSizePolicy, QWizard, QMessageBox, \ - QFileDialog, QFrame, QDesktopWidget, QDialog, QTableWidgetItem, QInputDialog, QAbstractItemView, QLineEdit, \ - QApplication -# 导入数据相关操作模块 -from packages.pm_preprocess.ui.data_role import Ui_Form as DataRole_Ui_Form # 数据角色 -from packages.pm_preprocess.ui.data_info import Ui_Form as DataInfo_Ui_Form # 数据信息 from packages.pm_preprocess.ui.data_column_desc import Ui_Form as Columns_desc_Ui_Form # 数据列描述 -from packages.pm_preprocess.ui.data_delete_row import Ui_Form as DataDeleteRow_Ui_Form # 数据删除行 +from packages.pm_preprocess.ui.data_column_encode import Ui_Form as DataColumnEncode_Ui_Form +from packages.pm_preprocess.ui.data_column_name import Ui_Form as DataColumnName_Ui_Form from packages.pm_preprocess.ui.data_delete_column import Ui_Form as DataDeleteColumn_Ui_Form -from packages.pm_preprocess.ui.data_merge_vertical import Ui_Form as DataMergeVertical_Ui_Form +from packages.pm_preprocess.ui.data_delete_row import Ui_Form as DataDeleteRow_Ui_Form # 数据删除行 +from packages.pm_preprocess.ui.data_info import Ui_Form as DataInfo_Ui_Form # 数据信息 from packages.pm_preprocess.ui.data_merge_horizontal import Ui_Form as DataMergeHorizontal_Ui_Form -from packages.pm_preprocess.ui.data_partition import Ui_Form as DataPartition_Ui_Form +from packages.pm_preprocess.ui.data_merge_vertical import Ui_Form as DataMergeVertical_Ui_Form from packages.pm_preprocess.ui.data_new_column import Ui_Form as DataNewColumn_Ui_Form -from packages.pm_preprocess.ui.data_sort import Ui_Form as DataSort_Ui_Form -from packages.pm_preprocess.ui.data_transpose import Ui_Form as DataTranspose_Ui_Form +from packages.pm_preprocess.ui.data_partition import Ui_Form as DataPartition_Ui_Form +# 导入数据相关操作模块 +from packages.pm_preprocess.ui.data_role import Ui_Form as DataRole_Ui_Form # 数据角色 from packages.pm_preprocess.ui.data_sample import Ui_Form as DataSample_Ui_Form +from packages.pm_preprocess.ui.data_sort import Ui_Form as DataSort_Ui_Form from packages.pm_preprocess.ui.data_standard import Ui_Form as DataStandard_Ui_Form -from packages.pm_preprocess.ui.data_column_encode import Ui_Form as DataColumnEncode_Ui_Form -from packages.pm_preprocess.ui.data_column_name import Ui_Form as DataColumnName_Ui_Form - -# 定义日志输出格式 -logging.basicConfig(format="%(asctime)s %(name)s:%(levelname)s:%(message)s", datefmt="%Y-%m-%d %H:%M:%S", - level=logging.INFO) +from packages.pm_preprocess.ui.data_transpose import Ui_Form as DataTranspose_Ui_Form class DataInfoForm(QDialog, DataInfo_Ui_Form): @@ -1087,9 +1083,6 @@ class DataNewColumnForm(QWidget, DataNewColumn_Ui_Form): self.move(int((screen.width() - size.width()) / 2), int((screen.height() - size.height()) / 2)) - - - class DataSortForm(QWidget, DataSort_Ui_Form): """ 打开"从sas导入"窗口 diff --git a/packages/pm_calc/translations/qt_zh_CN.qm b/src/pyminer/packages/pm_calc/translations/qt_zh_CN.qm similarity index 100% rename from packages/pm_calc/translations/qt_zh_CN.qm rename to src/pyminer/packages/pm_calc/translations/qt_zh_CN.qm diff --git a/packages/pm_calc/translations/qt_zh_CN.ts b/src/pyminer/packages/pm_calc/translations/qt_zh_CN.ts similarity index 100% rename from packages/pm_calc/translations/qt_zh_CN.ts rename to src/pyminer/packages/pm_calc/translations/qt_zh_CN.ts diff --git a/pmgwidgets/utilities/platform/test/__init__.py b/src/pyminer/packages/pm_helpLinkEngine/__init__.py similarity index 100% rename from pmgwidgets/utilities/platform/test/__init__.py rename to src/pyminer/packages/pm_helpLinkEngine/__init__.py diff --git a/packages/pm_helpLinkEngine/helpLinkEngine.py b/src/pyminer/packages/pm_helpLinkEngine/helpLinkEngine.py similarity index 100% rename from packages/pm_helpLinkEngine/helpLinkEngine.py rename to src/pyminer/packages/pm_helpLinkEngine/helpLinkEngine.py diff --git a/packages/pm_marketplace/Icon.ico b/src/pyminer/packages/pm_marketplace/Icon.ico similarity index 100% rename from packages/pm_marketplace/Icon.ico rename to src/pyminer/packages/pm_marketplace/Icon.ico diff --git a/packages/pm_marketplace/__init__.py b/src/pyminer/packages/pm_marketplace/__init__.py similarity index 100% rename from packages/pm_marketplace/__init__.py rename to src/pyminer/packages/pm_marketplace/__init__.py diff --git a/packages/pm_marketplace/env_manager.py b/src/pyminer/packages/pm_marketplace/env_manager.py similarity index 100% rename from packages/pm_marketplace/env_manager.py rename to src/pyminer/packages/pm_marketplace/env_manager.py diff --git a/packages/pm_marketplace/env_manager.ui b/src/pyminer/packages/pm_marketplace/env_manager.ui similarity index 100% rename from packages/pm_marketplace/env_manager.ui rename to src/pyminer/packages/pm_marketplace/env_manager.ui diff --git a/packages/pm_marketplace/package_install.py b/src/pyminer/packages/pm_marketplace/package_install.py similarity index 100% rename from packages/pm_marketplace/package_install.py rename to src/pyminer/packages/pm_marketplace/package_install.py diff --git a/packages/pm_marketplace/package_install.ui b/src/pyminer/packages/pm_marketplace/package_install.ui similarity index 100% rename from packages/pm_marketplace/package_install.ui rename to src/pyminer/packages/pm_marketplace/package_install.ui diff --git a/packages/pm_marketplace/package_manager.py b/src/pyminer/packages/pm_marketplace/package_manager.py similarity index 100% rename from packages/pm_marketplace/package_manager.py rename to src/pyminer/packages/pm_marketplace/package_manager.py diff --git a/packages/pm_marketplace/package_remove.py b/src/pyminer/packages/pm_marketplace/package_remove.py similarity index 100% rename from packages/pm_marketplace/package_remove.py rename to src/pyminer/packages/pm_marketplace/package_remove.py diff --git a/packages/pm_marketplace/package_remove.ui b/src/pyminer/packages/pm_marketplace/package_remove.ui similarity index 100% rename from packages/pm_marketplace/package_remove.ui rename to src/pyminer/packages/pm_marketplace/package_remove.ui diff --git a/packages/pm_marketplace/package_setting.py b/src/pyminer/packages/pm_marketplace/package_setting.py similarity index 100% rename from packages/pm_marketplace/package_setting.py rename to src/pyminer/packages/pm_marketplace/package_setting.py diff --git a/packages/pm_marketplace/package_setting.ui b/src/pyminer/packages/pm_marketplace/package_setting.ui similarity index 100% rename from packages/pm_marketplace/package_setting.ui rename to src/pyminer/packages/pm_marketplace/package_setting.ui diff --git a/packages/pm_marketplace/package_update.py b/src/pyminer/packages/pm_marketplace/package_update.py similarity index 100% rename from packages/pm_marketplace/package_update.py rename to src/pyminer/packages/pm_marketplace/package_update.py diff --git a/packages/pm_marketplace/package_update.ui b/src/pyminer/packages/pm_marketplace/package_update.ui similarity index 100% rename from packages/pm_marketplace/package_update.ui rename to src/pyminer/packages/pm_marketplace/package_update.ui diff --git a/packages/pm_marketplace/pm_marketplace.py b/src/pyminer/packages/pm_marketplace/pm_marketplace.py similarity index 100% rename from packages/pm_marketplace/pm_marketplace.py rename to src/pyminer/packages/pm_marketplace/pm_marketplace.py diff --git a/packages/pm_marketplace/pm_marketplace.ui b/src/pyminer/packages/pm_marketplace/pm_marketplace.ui similarity index 100% rename from packages/pm_marketplace/pm_marketplace.ui rename to src/pyminer/packages/pm_marketplace/pm_marketplace.ui diff --git a/packages/pm_marketplace/pth_modifier.py b/src/pyminer/packages/pm_marketplace/pth_modifier.py similarity index 100% rename from packages/pm_marketplace/pth_modifier.py rename to src/pyminer/packages/pm_marketplace/pth_modifier.py diff --git a/pmgwidgets/widgets/basic/images/__init__.py b/src/pyminer/packages/pm_modelling/__init__.py similarity index 100% rename from pmgwidgets/widgets/basic/images/__init__.py rename to src/pyminer/packages/pm_modelling/__init__.py diff --git a/packages/pm_modelling/default.png b/src/pyminer/packages/pm_modelling/default.png similarity index 100% rename from packages/pm_modelling/default.png rename to src/pyminer/packages/pm_modelling/default.png diff --git a/packages/pm_modelling/main.py b/src/pyminer/packages/pm_modelling/main.py similarity index 100% rename from packages/pm_modelling/main.py rename to src/pyminer/packages/pm_modelling/main.py diff --git a/packages/pm_modelling/package.json b/src/pyminer/packages/pm_modelling/package.json similarity index 100% rename from packages/pm_modelling/package.json rename to src/pyminer/packages/pm_modelling/package.json diff --git a/packages/pm_modelling/settings.json b/src/pyminer/packages/pm_modelling/settings.json similarity index 100% rename from packages/pm_modelling/settings.json rename to src/pyminer/packages/pm_modelling/settings.json diff --git a/packages/pm_modelling/source/down.svg b/src/pyminer/packages/pm_modelling/source/down.svg similarity index 100% rename from packages/pm_modelling/source/down.svg rename to src/pyminer/packages/pm_modelling/source/down.svg diff --git a/packages/pm_modelling/source/plot.svg b/src/pyminer/packages/pm_modelling/source/plot.svg similarity index 100% rename from packages/pm_modelling/source/plot.svg rename to src/pyminer/packages/pm_modelling/source/plot.svg diff --git "a/packages/pm_modelling/source/\345\234\260\345\233\276.png" "b/src/pyminer/packages/pm_modelling/source/\345\234\260\345\233\276.png" similarity index 100% rename from "packages/pm_modelling/source/\345\234\260\345\233\276.png" rename to "src/pyminer/packages/pm_modelling/source/\345\234\260\345\233\276.png" diff --git "a/packages/pm_modelling/source/\346\212\230\347\272\277\345\233\276.png" "b/src/pyminer/packages/pm_modelling/source/\346\212\230\347\272\277\345\233\276.png" similarity index 100% rename from "packages/pm_modelling/source/\346\212\230\347\272\277\345\233\276.png" rename to "src/pyminer/packages/pm_modelling/source/\346\212\230\347\272\277\345\233\276.png" diff --git "a/packages/pm_modelling/source/\346\225\243\347\202\271\345\233\276.png" "b/src/pyminer/packages/pm_modelling/source/\346\225\243\347\202\271\345\233\276.png" similarity index 100% rename from "packages/pm_modelling/source/\346\225\243\347\202\271\345\233\276.png" rename to "src/pyminer/packages/pm_modelling/source/\346\225\243\347\202\271\345\233\276.png" diff --git "a/packages/pm_modelling/source/\346\235\241\345\275\242\345\233\276.png" "b/src/pyminer/packages/pm_modelling/source/\346\235\241\345\275\242\345\233\276.png" similarity index 100% rename from "packages/pm_modelling/source/\346\235\241\345\275\242\345\233\276.png" rename to "src/pyminer/packages/pm_modelling/source/\346\235\241\345\275\242\345\233\276.png" diff --git "a/packages/pm_modelling/source/\346\237\261\345\275\242\345\233\276.png" "b/src/pyminer/packages/pm_modelling/source/\346\237\261\345\275\242\345\233\276.png" similarity index 100% rename from "packages/pm_modelling/source/\346\237\261\345\275\242\345\233\276.png" rename to "src/pyminer/packages/pm_modelling/source/\346\237\261\345\275\242\345\233\276.png" diff --git "a/packages/pm_modelling/source/\346\260\224\346\263\241\345\233\276.png" "b/src/pyminer/packages/pm_modelling/source/\346\260\224\346\263\241\345\233\276.png" similarity index 100% rename from "packages/pm_modelling/source/\346\260\224\346\263\241\345\233\276.png" rename to "src/pyminer/packages/pm_modelling/source/\346\260\224\346\263\241\345\233\276.png" diff --git "a/packages/pm_modelling/source/\347\203\255\345\212\233\345\233\276.png" "b/src/pyminer/packages/pm_modelling/source/\347\203\255\345\212\233\345\233\276.png" similarity index 100% rename from "packages/pm_modelling/source/\347\203\255\345\212\233\345\233\276.png" rename to "src/pyminer/packages/pm_modelling/source/\347\203\255\345\212\233\345\233\276.png" diff --git "a/packages/pm_modelling/source/\347\233\264\346\226\271\345\233\276.png" "b/src/pyminer/packages/pm_modelling/source/\347\233\264\346\226\271\345\233\276.png" similarity index 100% rename from "packages/pm_modelling/source/\347\233\264\346\226\271\345\233\276.png" rename to "src/pyminer/packages/pm_modelling/source/\347\233\264\346\226\271\345\233\276.png" diff --git "a/packages/pm_modelling/source/\347\256\261\347\272\277\345\233\276.png" "b/src/pyminer/packages/pm_modelling/source/\347\256\261\347\272\277\345\233\276.png" similarity index 100% rename from "packages/pm_modelling/source/\347\256\261\347\272\277\345\233\276.png" rename to "src/pyminer/packages/pm_modelling/source/\347\256\261\347\272\277\345\233\276.png" diff --git "a/packages/pm_modelling/source/\347\273\204\345\220\210\345\233\276.png" "b/src/pyminer/packages/pm_modelling/source/\347\273\204\345\220\210\345\233\276.png" similarity index 100% rename from "packages/pm_modelling/source/\347\273\204\345\220\210\345\233\276.png" rename to "src/pyminer/packages/pm_modelling/source/\347\273\204\345\220\210\345\233\276.png" diff --git "a/packages/pm_modelling/source/\351\233\267\350\276\276\345\233\276.png" "b/src/pyminer/packages/pm_modelling/source/\351\233\267\350\276\276\345\233\276.png" similarity index 100% rename from "packages/pm_modelling/source/\351\233\267\350\276\276\345\233\276.png" rename to "src/pyminer/packages/pm_modelling/source/\351\233\267\350\276\276\345\233\276.png" diff --git "a/packages/pm_modelling/source/\351\235\242\347\247\257\345\233\276.png" "b/src/pyminer/packages/pm_modelling/source/\351\235\242\347\247\257\345\233\276.png" similarity index 100% rename from "packages/pm_modelling/source/\351\235\242\347\247\257\345\233\276.png" rename to "src/pyminer/packages/pm_modelling/source/\351\235\242\347\247\257\345\233\276.png" diff --git "a/packages/pm_modelling/source/\351\245\274\345\233\276.png" "b/src/pyminer/packages/pm_modelling/source/\351\245\274\345\233\276.png" similarity index 100% rename from "packages/pm_modelling/source/\351\245\274\345\233\276.png" rename to "src/pyminer/packages/pm_modelling/source/\351\245\274\345\233\276.png" diff --git a/packages/pm_modelling/translations/qt_zh_CN.qm b/src/pyminer/packages/pm_modelling/translations/qt_zh_CN.qm similarity index 100% rename from packages/pm_modelling/translations/qt_zh_CN.qm rename to src/pyminer/packages/pm_modelling/translations/qt_zh_CN.qm diff --git a/packages/pm_modelling/translations/qt_zh_CN.ts b/src/pyminer/packages/pm_modelling/translations/qt_zh_CN.ts similarity index 100% rename from packages/pm_modelling/translations/qt_zh_CN.ts rename to src/pyminer/packages/pm_modelling/translations/qt_zh_CN.ts diff --git a/pmgwidgets/widgets/basic/lists/__init__.py b/src/pyminer/packages/pm_preprocess/__init__.py similarity index 100% rename from pmgwidgets/widgets/basic/lists/__init__.py rename to src/pyminer/packages/pm_preprocess/__init__.py diff --git a/packages/pm_preprocess/base.py b/src/pyminer/packages/pm_preprocess/base.py similarity index 100% rename from packages/pm_preprocess/base.py rename to src/pyminer/packages/pm_preprocess/base.py diff --git a/packages/pm_preprocess/data_filter.py b/src/pyminer/packages/pm_preprocess/data_filter.py similarity index 100% rename from packages/pm_preprocess/data_filter.py rename to src/pyminer/packages/pm_preprocess/data_filter.py diff --git a/packages/pm_preprocess/datafilter.py b/src/pyminer/packages/pm_preprocess/datafilter.py similarity index 100% rename from packages/pm_preprocess/datafilter.py rename to src/pyminer/packages/pm_preprocess/datafilter.py diff --git a/packages/pm_preprocess/datamissingvalue.py b/src/pyminer/packages/pm_preprocess/datamissingvalue.py similarity index 100% rename from packages/pm_preprocess/datamissingvalue.py rename to src/pyminer/packages/pm_preprocess/datamissingvalue.py diff --git a/packages/pm_preprocess/datareplace.py b/src/pyminer/packages/pm_preprocess/datareplace.py similarity index 100% rename from packages/pm_preprocess/datareplace.py rename to src/pyminer/packages/pm_preprocess/datareplace.py diff --git a/packages/pm_preprocess/fastui/__init__.py b/src/pyminer/packages/pm_preprocess/fastui/__init__.py similarity index 100% rename from packages/pm_preprocess/fastui/__init__.py rename to src/pyminer/packages/pm_preprocess/fastui/__init__.py diff --git a/packages/pm_preprocess/fastui/base.py b/src/pyminer/packages/pm_preprocess/fastui/base.py similarity index 100% rename from packages/pm_preprocess/fastui/base.py rename to src/pyminer/packages/pm_preprocess/fastui/base.py diff --git a/packages/pm_preprocess/fastui/datamerge.py b/src/pyminer/packages/pm_preprocess/fastui/datamerge.py similarity index 100% rename from packages/pm_preprocess/fastui/datamerge.py rename to src/pyminer/packages/pm_preprocess/fastui/datamerge.py diff --git a/packages/pm_preprocess/fastui/dropna.py b/src/pyminer/packages/pm_preprocess/fastui/dropna.py similarity index 100% rename from packages/pm_preprocess/fastui/dropna.py rename to src/pyminer/packages/pm_preprocess/fastui/dropna.py diff --git a/packages/pm_preprocess/fastui/fillna.py b/src/pyminer/packages/pm_preprocess/fastui/fillna.py similarity index 100% rename from packages/pm_preprocess/fastui/fillna.py rename to src/pyminer/packages/pm_preprocess/fastui/fillna.py diff --git a/packages/pm_preprocess/fastui/pivot.py b/src/pyminer/packages/pm_preprocess/fastui/pivot.py similarity index 100% rename from packages/pm_preprocess/fastui/pivot.py rename to src/pyminer/packages/pm_preprocess/fastui/pivot.py diff --git a/packages/pm_preprocess/fastui/templates/dropna.json b/src/pyminer/packages/pm_preprocess/fastui/templates/dropna.json similarity index 100% rename from packages/pm_preprocess/fastui/templates/dropna.json rename to src/pyminer/packages/pm_preprocess/fastui/templates/dropna.json diff --git a/packages/pm_preprocess/fastui/templates/dropna.py b/src/pyminer/packages/pm_preprocess/fastui/templates/dropna.py similarity index 100% rename from packages/pm_preprocess/fastui/templates/dropna.py rename to src/pyminer/packages/pm_preprocess/fastui/templates/dropna.py diff --git a/packages/pm_preprocess/fastui/templates/template.py b/src/pyminer/packages/pm_preprocess/fastui/templates/template.py similarity index 100% rename from packages/pm_preprocess/fastui/templates/template.py rename to src/pyminer/packages/pm_preprocess/fastui/templates/template.py diff --git a/packages/pm_preprocess/fastui/transpose.py b/src/pyminer/packages/pm_preprocess/fastui/transpose.py similarity index 100% rename from packages/pm_preprocess/fastui/transpose.py rename to src/pyminer/packages/pm_preprocess/fastui/transpose.py diff --git a/packages/pm_preprocess/ipython_console.jpg b/src/pyminer/packages/pm_preprocess/ipython_console.jpg similarity index 100% rename from packages/pm_preprocess/ipython_console.jpg rename to src/pyminer/packages/pm_preprocess/ipython_console.jpg diff --git a/packages/pm_preprocess/main.py b/src/pyminer/packages/pm_preprocess/main.py similarity index 100% rename from packages/pm_preprocess/main.py rename to src/pyminer/packages/pm_preprocess/main.py diff --git a/packages/pm_preprocess/package.json b/src/pyminer/packages/pm_preprocess/package.json similarity index 100% rename from packages/pm_preprocess/package.json rename to src/pyminer/packages/pm_preprocess/package.json diff --git a/packages/pm_calc/preprocess.py b/src/pyminer/packages/pm_preprocess/preprocess.py similarity index 99% rename from packages/pm_calc/preprocess.py rename to src/pyminer/packages/pm_preprocess/preprocess.py index abdb9e44d4f0228b5414c2a600b017f217c1122b..ef1a21aedd685fcd423d3ed3bd5afe6e02015600 100644 --- a/packages/pm_calc/preprocess.py +++ b/src/pyminer/packages/pm_preprocess/preprocess.py @@ -32,10 +32,6 @@ from packages.pm_preprocess.ui.data_standard import Ui_Form as DataStandard_Ui_F from packages.pm_preprocess.ui.data_column_encode import Ui_Form as DataColumnEncode_Ui_Form from packages.pm_preprocess.ui.data_column_name import Ui_Form as DataColumnName_Ui_Form -# 定义日志输出格式 -logging.basicConfig(format="%(asctime)s %(name)s:%(levelname)s:%(message)s", datefmt="%Y-%m-%d %H:%M:%S", - level=logging.INFO) - class DataInfoForm(QDialog, DataInfo_Ui_Form): """ @@ -1087,9 +1083,6 @@ class DataNewColumnForm(QWidget, DataNewColumn_Ui_Form): self.move(int((screen.width() - size.width()) / 2), int((screen.height() - size.height()) / 2)) - - - class DataSortForm(QWidget, DataSort_Ui_Form): """ 打开"从sas导入"窗口 diff --git a/packages/pm_preprocess/translations/qt_zh_CN.qm b/src/pyminer/packages/pm_preprocess/translations/qt_zh_CN.qm similarity index 100% rename from packages/pm_preprocess/translations/qt_zh_CN.qm rename to src/pyminer/packages/pm_preprocess/translations/qt_zh_CN.qm diff --git a/packages/pm_preprocess/translations/qt_zh_CN.ts b/src/pyminer/packages/pm_preprocess/translations/qt_zh_CN.ts similarity index 100% rename from packages/pm_preprocess/translations/qt_zh_CN.ts rename to src/pyminer/packages/pm_preprocess/translations/qt_zh_CN.ts diff --git a/packages/pm_preprocess/ui/data_column_desc.py b/src/pyminer/packages/pm_preprocess/ui/data_column_desc.py similarity index 100% rename from packages/pm_preprocess/ui/data_column_desc.py rename to src/pyminer/packages/pm_preprocess/ui/data_column_desc.py diff --git a/packages/pm_preprocess/ui/data_column_desc.ui b/src/pyminer/packages/pm_preprocess/ui/data_column_desc.ui similarity index 100% rename from packages/pm_preprocess/ui/data_column_desc.ui rename to src/pyminer/packages/pm_preprocess/ui/data_column_desc.ui diff --git a/packages/pm_preprocess/ui/data_column_encode.py b/src/pyminer/packages/pm_preprocess/ui/data_column_encode.py similarity index 100% rename from packages/pm_preprocess/ui/data_column_encode.py rename to src/pyminer/packages/pm_preprocess/ui/data_column_encode.py diff --git a/packages/pm_preprocess/ui/data_column_encode.ui b/src/pyminer/packages/pm_preprocess/ui/data_column_encode.ui similarity index 100% rename from packages/pm_preprocess/ui/data_column_encode.ui rename to src/pyminer/packages/pm_preprocess/ui/data_column_encode.ui diff --git a/packages/pm_preprocess/ui/data_column_name.py b/src/pyminer/packages/pm_preprocess/ui/data_column_name.py similarity index 100% rename from packages/pm_preprocess/ui/data_column_name.py rename to src/pyminer/packages/pm_preprocess/ui/data_column_name.py diff --git a/packages/pm_preprocess/ui/data_column_name.ui b/src/pyminer/packages/pm_preprocess/ui/data_column_name.ui similarity index 100% rename from packages/pm_preprocess/ui/data_column_name.ui rename to src/pyminer/packages/pm_preprocess/ui/data_column_name.ui diff --git a/packages/pm_preprocess/ui/data_delete_column.py b/src/pyminer/packages/pm_preprocess/ui/data_delete_column.py similarity index 100% rename from packages/pm_preprocess/ui/data_delete_column.py rename to src/pyminer/packages/pm_preprocess/ui/data_delete_column.py diff --git a/packages/pm_preprocess/ui/data_delete_column.ui b/src/pyminer/packages/pm_preprocess/ui/data_delete_column.ui similarity index 100% rename from packages/pm_preprocess/ui/data_delete_column.ui rename to src/pyminer/packages/pm_preprocess/ui/data_delete_column.ui diff --git a/packages/pm_preprocess/ui/data_delete_row.py b/src/pyminer/packages/pm_preprocess/ui/data_delete_row.py similarity index 100% rename from packages/pm_preprocess/ui/data_delete_row.py rename to src/pyminer/packages/pm_preprocess/ui/data_delete_row.py diff --git a/packages/pm_preprocess/ui/data_delete_row.ui b/src/pyminer/packages/pm_preprocess/ui/data_delete_row.ui similarity index 100% rename from packages/pm_preprocess/ui/data_delete_row.ui rename to src/pyminer/packages/pm_preprocess/ui/data_delete_row.ui diff --git a/packages/pm_preprocess/ui/data_filter.py b/src/pyminer/packages/pm_preprocess/ui/data_filter.py similarity index 100% rename from packages/pm_preprocess/ui/data_filter.py rename to src/pyminer/packages/pm_preprocess/ui/data_filter.py diff --git a/packages/pm_preprocess/ui/data_filter.ui b/src/pyminer/packages/pm_preprocess/ui/data_filter.ui similarity index 100% rename from packages/pm_preprocess/ui/data_filter.ui rename to src/pyminer/packages/pm_preprocess/ui/data_filter.ui diff --git a/packages/pm_preprocess/ui/data_import_database.py b/src/pyminer/packages/pm_preprocess/ui/data_import_database.py similarity index 100% rename from packages/pm_preprocess/ui/data_import_database.py rename to src/pyminer/packages/pm_preprocess/ui/data_import_database.py diff --git a/packages/pm_preprocess/ui/data_import_database.ui b/src/pyminer/packages/pm_preprocess/ui/data_import_database.ui similarity index 100% rename from packages/pm_preprocess/ui/data_import_database.ui rename to src/pyminer/packages/pm_preprocess/ui/data_import_database.ui diff --git a/packages/pm_preprocess/ui/data_import_excel.py b/src/pyminer/packages/pm_preprocess/ui/data_import_excel.py similarity index 100% rename from packages/pm_preprocess/ui/data_import_excel.py rename to src/pyminer/packages/pm_preprocess/ui/data_import_excel.py diff --git a/packages/pm_preprocess/ui/data_import_excel.ui b/src/pyminer/packages/pm_preprocess/ui/data_import_excel.ui similarity index 100% rename from packages/pm_preprocess/ui/data_import_excel.ui rename to src/pyminer/packages/pm_preprocess/ui/data_import_excel.ui diff --git a/packages/pm_preprocess/ui/data_import_sas.py b/src/pyminer/packages/pm_preprocess/ui/data_import_sas.py similarity index 100% rename from packages/pm_preprocess/ui/data_import_sas.py rename to src/pyminer/packages/pm_preprocess/ui/data_import_sas.py diff --git a/packages/pm_preprocess/ui/data_import_sas.ui b/src/pyminer/packages/pm_preprocess/ui/data_import_sas.ui similarity index 100% rename from packages/pm_preprocess/ui/data_import_sas.ui rename to src/pyminer/packages/pm_preprocess/ui/data_import_sas.ui diff --git a/packages/pm_preprocess/ui/data_import_spss.py b/src/pyminer/packages/pm_preprocess/ui/data_import_spss.py similarity index 100% rename from packages/pm_preprocess/ui/data_import_spss.py rename to src/pyminer/packages/pm_preprocess/ui/data_import_spss.py diff --git a/packages/pm_preprocess/ui/data_import_spss.ui b/src/pyminer/packages/pm_preprocess/ui/data_import_spss.ui similarity index 100% rename from packages/pm_preprocess/ui/data_import_spss.ui rename to src/pyminer/packages/pm_preprocess/ui/data_import_spss.ui diff --git a/packages/pm_preprocess/ui/data_import_text.py b/src/pyminer/packages/pm_preprocess/ui/data_import_text.py similarity index 100% rename from packages/pm_preprocess/ui/data_import_text.py rename to src/pyminer/packages/pm_preprocess/ui/data_import_text.py diff --git a/packages/pm_preprocess/ui/data_import_text.ui b/src/pyminer/packages/pm_preprocess/ui/data_import_text.ui similarity index 100% rename from packages/pm_preprocess/ui/data_import_text.ui rename to src/pyminer/packages/pm_preprocess/ui/data_import_text.ui diff --git a/packages/pm_preprocess/ui/data_info.py b/src/pyminer/packages/pm_preprocess/ui/data_info.py similarity index 100% rename from packages/pm_preprocess/ui/data_info.py rename to src/pyminer/packages/pm_preprocess/ui/data_info.py diff --git a/packages/pm_preprocess/ui/data_info.ui b/src/pyminer/packages/pm_preprocess/ui/data_info.ui similarity index 100% rename from packages/pm_preprocess/ui/data_info.ui rename to src/pyminer/packages/pm_preprocess/ui/data_info.ui diff --git a/packages/pm_preprocess/ui/data_merge.py b/src/pyminer/packages/pm_preprocess/ui/data_merge.py similarity index 100% rename from packages/pm_preprocess/ui/data_merge.py rename to src/pyminer/packages/pm_preprocess/ui/data_merge.py diff --git a/packages/pm_preprocess/ui/data_merge.ui b/src/pyminer/packages/pm_preprocess/ui/data_merge.ui similarity index 100% rename from packages/pm_preprocess/ui/data_merge.ui rename to src/pyminer/packages/pm_preprocess/ui/data_merge.ui diff --git a/packages/pm_preprocess/ui/data_merge_horizontal.py b/src/pyminer/packages/pm_preprocess/ui/data_merge_horizontal.py similarity index 100% rename from packages/pm_preprocess/ui/data_merge_horizontal.py rename to src/pyminer/packages/pm_preprocess/ui/data_merge_horizontal.py diff --git a/packages/pm_preprocess/ui/data_merge_horizontal.ui b/src/pyminer/packages/pm_preprocess/ui/data_merge_horizontal.ui similarity index 100% rename from packages/pm_preprocess/ui/data_merge_horizontal.ui rename to src/pyminer/packages/pm_preprocess/ui/data_merge_horizontal.ui diff --git a/packages/pm_preprocess/ui/data_merge_vertical.py b/src/pyminer/packages/pm_preprocess/ui/data_merge_vertical.py similarity index 100% rename from packages/pm_preprocess/ui/data_merge_vertical.py rename to src/pyminer/packages/pm_preprocess/ui/data_merge_vertical.py diff --git a/packages/pm_preprocess/ui/data_merge_vertical.ui b/src/pyminer/packages/pm_preprocess/ui/data_merge_vertical.ui similarity index 100% rename from packages/pm_preprocess/ui/data_merge_vertical.ui rename to src/pyminer/packages/pm_preprocess/ui/data_merge_vertical.ui diff --git a/packages/pm_preprocess/ui/data_missing_value.py b/src/pyminer/packages/pm_preprocess/ui/data_missing_value.py similarity index 100% rename from packages/pm_preprocess/ui/data_missing_value.py rename to src/pyminer/packages/pm_preprocess/ui/data_missing_value.py diff --git a/packages/pm_preprocess/ui/data_missing_value.ui b/src/pyminer/packages/pm_preprocess/ui/data_missing_value.ui similarity index 100% rename from packages/pm_preprocess/ui/data_missing_value.ui rename to src/pyminer/packages/pm_preprocess/ui/data_missing_value.ui diff --git a/packages/pm_preprocess/ui/data_new_column.py b/src/pyminer/packages/pm_preprocess/ui/data_new_column.py similarity index 100% rename from packages/pm_preprocess/ui/data_new_column.py rename to src/pyminer/packages/pm_preprocess/ui/data_new_column.py diff --git a/packages/pm_preprocess/ui/data_new_column.ui b/src/pyminer/packages/pm_preprocess/ui/data_new_column.ui similarity index 100% rename from packages/pm_preprocess/ui/data_new_column.ui rename to src/pyminer/packages/pm_preprocess/ui/data_new_column.ui diff --git a/packages/pm_preprocess/ui/data_partition.py b/src/pyminer/packages/pm_preprocess/ui/data_partition.py similarity index 100% rename from packages/pm_preprocess/ui/data_partition.py rename to src/pyminer/packages/pm_preprocess/ui/data_partition.py diff --git a/packages/pm_preprocess/ui/data_partition.ui b/src/pyminer/packages/pm_preprocess/ui/data_partition.ui similarity index 100% rename from packages/pm_preprocess/ui/data_partition.ui rename to src/pyminer/packages/pm_preprocess/ui/data_partition.ui diff --git a/packages/pm_preprocess/ui/data_repace.py b/src/pyminer/packages/pm_preprocess/ui/data_repace.py similarity index 100% rename from packages/pm_preprocess/ui/data_repace.py rename to src/pyminer/packages/pm_preprocess/ui/data_repace.py diff --git a/packages/pm_preprocess/ui/data_repace.ui b/src/pyminer/packages/pm_preprocess/ui/data_repace.ui similarity index 100% rename from packages/pm_preprocess/ui/data_repace.ui rename to src/pyminer/packages/pm_preprocess/ui/data_repace.ui diff --git a/packages/pm_preprocess/ui/data_role.py b/src/pyminer/packages/pm_preprocess/ui/data_role.py similarity index 100% rename from packages/pm_preprocess/ui/data_role.py rename to src/pyminer/packages/pm_preprocess/ui/data_role.py diff --git a/packages/pm_preprocess/ui/data_role.ui b/src/pyminer/packages/pm_preprocess/ui/data_role.ui similarity index 100% rename from packages/pm_preprocess/ui/data_role.ui rename to src/pyminer/packages/pm_preprocess/ui/data_role.ui diff --git a/packages/pm_preprocess/ui/data_role_edit.py b/src/pyminer/packages/pm_preprocess/ui/data_role_edit.py similarity index 100% rename from packages/pm_preprocess/ui/data_role_edit.py rename to src/pyminer/packages/pm_preprocess/ui/data_role_edit.py diff --git a/packages/pm_preprocess/ui/data_role_edit.ui b/src/pyminer/packages/pm_preprocess/ui/data_role_edit.ui similarity index 100% rename from packages/pm_preprocess/ui/data_role_edit.ui rename to src/pyminer/packages/pm_preprocess/ui/data_role_edit.ui diff --git a/packages/pm_preprocess/ui/data_row_filter.py b/src/pyminer/packages/pm_preprocess/ui/data_row_filter.py similarity index 100% rename from packages/pm_preprocess/ui/data_row_filter.py rename to src/pyminer/packages/pm_preprocess/ui/data_row_filter.py diff --git a/packages/pm_preprocess/ui/data_row_filter.ui b/src/pyminer/packages/pm_preprocess/ui/data_row_filter.ui similarity index 100% rename from packages/pm_preprocess/ui/data_row_filter.ui rename to src/pyminer/packages/pm_preprocess/ui/data_row_filter.ui diff --git a/packages/pm_preprocess/ui/data_sample.py b/src/pyminer/packages/pm_preprocess/ui/data_sample.py similarity index 100% rename from packages/pm_preprocess/ui/data_sample.py rename to src/pyminer/packages/pm_preprocess/ui/data_sample.py diff --git a/packages/pm_preprocess/ui/data_sample.ui b/src/pyminer/packages/pm_preprocess/ui/data_sample.ui similarity index 100% rename from packages/pm_preprocess/ui/data_sample.ui rename to src/pyminer/packages/pm_preprocess/ui/data_sample.ui diff --git a/packages/pm_preprocess/ui/data_sort.py b/src/pyminer/packages/pm_preprocess/ui/data_sort.py similarity index 100% rename from packages/pm_preprocess/ui/data_sort.py rename to src/pyminer/packages/pm_preprocess/ui/data_sort.py diff --git a/packages/pm_preprocess/ui/data_sort.ui b/src/pyminer/packages/pm_preprocess/ui/data_sort.ui similarity index 100% rename from packages/pm_preprocess/ui/data_sort.ui rename to src/pyminer/packages/pm_preprocess/ui/data_sort.ui diff --git a/packages/pm_preprocess/ui/data_standard.py b/src/pyminer/packages/pm_preprocess/ui/data_standard.py similarity index 100% rename from packages/pm_preprocess/ui/data_standard.py rename to src/pyminer/packages/pm_preprocess/ui/data_standard.py diff --git a/packages/pm_preprocess/ui/data_standard.ui b/src/pyminer/packages/pm_preprocess/ui/data_standard.ui similarity index 100% rename from packages/pm_preprocess/ui/data_standard.ui rename to src/pyminer/packages/pm_preprocess/ui/data_standard.ui diff --git a/packages/pm_preprocess/ui/data_transpose.py b/src/pyminer/packages/pm_preprocess/ui/data_transpose.py similarity index 100% rename from packages/pm_preprocess/ui/data_transpose.py rename to src/pyminer/packages/pm_preprocess/ui/data_transpose.py diff --git a/packages/pm_preprocess/ui/data_transpose.ui b/src/pyminer/packages/pm_preprocess/ui/data_transpose.ui similarity index 100% rename from packages/pm_preprocess/ui/data_transpose.ui rename to src/pyminer/packages/pm_preprocess/ui/data_transpose.ui diff --git a/pmgwidgets/widgets/basic/plots/bars/__init__.py b/src/pyminer/packages/pm_statistics/__init__.py similarity index 100% rename from pmgwidgets/widgets/basic/plots/bars/__init__.py rename to src/pyminer/packages/pm_statistics/__init__.py diff --git a/packages/pm_statistics/default.png b/src/pyminer/packages/pm_statistics/default.png similarity index 100% rename from packages/pm_statistics/default.png rename to src/pyminer/packages/pm_statistics/default.png diff --git a/packages/pm_statistics/describe.py b/src/pyminer/packages/pm_statistics/describe.py similarity index 100% rename from packages/pm_statistics/describe.py rename to src/pyminer/packages/pm_statistics/describe.py diff --git a/packages/pm_statistics/main.py b/src/pyminer/packages/pm_statistics/main.py similarity index 100% rename from packages/pm_statistics/main.py rename to src/pyminer/packages/pm_statistics/main.py diff --git a/packages/pm_statistics/package.json b/src/pyminer/packages/pm_statistics/package.json similarity index 100% rename from packages/pm_statistics/package.json rename to src/pyminer/packages/pm_statistics/package.json diff --git a/packages/pm_statistics/settings.json b/src/pyminer/packages/pm_statistics/settings.json similarity index 100% rename from packages/pm_statistics/settings.json rename to src/pyminer/packages/pm_statistics/settings.json diff --git a/packages/pm_statistics/source/add.svg b/src/pyminer/packages/pm_statistics/source/add.svg similarity index 100% rename from packages/pm_statistics/source/add.svg rename to src/pyminer/packages/pm_statistics/source/add.svg diff --git a/packages/pm_statistics/source/collect.svg b/src/pyminer/packages/pm_statistics/source/collect.svg similarity index 100% rename from packages/pm_statistics/source/collect.svg rename to src/pyminer/packages/pm_statistics/source/collect.svg diff --git a/packages/pm_statistics/source/comment.svg b/src/pyminer/packages/pm_statistics/source/comment.svg similarity index 100% rename from packages/pm_statistics/source/comment.svg rename to src/pyminer/packages/pm_statistics/source/comment.svg diff --git a/packages/pm_statistics/source/descending.svg b/src/pyminer/packages/pm_statistics/source/descending.svg similarity index 100% rename from packages/pm_statistics/source/descending.svg rename to src/pyminer/packages/pm_statistics/source/descending.svg diff --git a/packages/pm_statistics/source/down.svg b/src/pyminer/packages/pm_statistics/source/down.svg similarity index 100% rename from packages/pm_statistics/source/down.svg rename to src/pyminer/packages/pm_statistics/source/down.svg diff --git a/packages/pm_statistics/source/history.svg b/src/pyminer/packages/pm_statistics/source/history.svg similarity index 100% rename from packages/pm_statistics/source/history.svg rename to src/pyminer/packages/pm_statistics/source/history.svg diff --git a/packages/pm_statistics/source/left(1).svg b/src/pyminer/packages/pm_statistics/source/left(1).svg similarity index 100% rename from packages/pm_statistics/source/left(1).svg rename to src/pyminer/packages/pm_statistics/source/left(1).svg diff --git a/packages/pm_statistics/source/left.svg b/src/pyminer/packages/pm_statistics/source/left.svg similarity index 100% rename from packages/pm_statistics/source/left.svg rename to src/pyminer/packages/pm_statistics/source/left.svg diff --git a/packages/pm_statistics/source/like(1).svg b/src/pyminer/packages/pm_statistics/source/like(1).svg similarity index 100% rename from packages/pm_statistics/source/like(1).svg rename to src/pyminer/packages/pm_statistics/source/like(1).svg diff --git a/packages/pm_statistics/source/like.svg b/src/pyminer/packages/pm_statistics/source/like.svg similarity index 100% rename from packages/pm_statistics/source/like.svg rename to src/pyminer/packages/pm_statistics/source/like.svg diff --git a/packages/pm_statistics/source/offline.svg b/src/pyminer/packages/pm_statistics/source/offline.svg similarity index 100% rename from packages/pm_statistics/source/offline.svg rename to src/pyminer/packages/pm_statistics/source/offline.svg diff --git a/packages/pm_statistics/source/print.svg b/src/pyminer/packages/pm_statistics/source/print.svg similarity index 100% rename from packages/pm_statistics/source/print.svg rename to src/pyminer/packages/pm_statistics/source/print.svg diff --git a/packages/pm_statistics/source/reduce.svg b/src/pyminer/packages/pm_statistics/source/reduce.svg similarity index 100% rename from packages/pm_statistics/source/reduce.svg rename to src/pyminer/packages/pm_statistics/source/reduce.svg diff --git a/packages/pm_statistics/source/replace.svg b/src/pyminer/packages/pm_statistics/source/replace.svg similarity index 100% rename from packages/pm_statistics/source/replace.svg rename to src/pyminer/packages/pm_statistics/source/replace.svg diff --git a/packages/pm_statistics/source/right(1).svg b/src/pyminer/packages/pm_statistics/source/right(1).svg similarity index 100% rename from packages/pm_statistics/source/right(1).svg rename to src/pyminer/packages/pm_statistics/source/right(1).svg diff --git a/packages/pm_statistics/source/right.svg b/src/pyminer/packages/pm_statistics/source/right.svg similarity index 100% rename from packages/pm_statistics/source/right.svg rename to src/pyminer/packages/pm_statistics/source/right.svg diff --git a/packages/pm_statistics/source/up.svg b/src/pyminer/packages/pm_statistics/source/up.svg similarity index 100% rename from packages/pm_statistics/source/up.svg rename to src/pyminer/packages/pm_statistics/source/up.svg diff --git a/packages/pm_statistics/source/user.svg b/src/pyminer/packages/pm_statistics/source/user.svg similarity index 100% rename from packages/pm_statistics/source/user.svg rename to src/pyminer/packages/pm_statistics/source/user.svg diff --git a/packages/pm_statistics/source/view.svg b/src/pyminer/packages/pm_statistics/source/view.svg similarity index 100% rename from packages/pm_statistics/source/view.svg rename to src/pyminer/packages/pm_statistics/source/view.svg diff --git a/packages/pm_statistics/stat_desc.py b/src/pyminer/packages/pm_statistics/stat_desc.py similarity index 100% rename from packages/pm_statistics/stat_desc.py rename to src/pyminer/packages/pm_statistics/stat_desc.py diff --git a/packages/pm_statistics/translations/qt_zh_CN.qm b/src/pyminer/packages/pm_statistics/translations/qt_zh_CN.qm similarity index 100% rename from packages/pm_statistics/translations/qt_zh_CN.qm rename to src/pyminer/packages/pm_statistics/translations/qt_zh_CN.qm diff --git a/packages/pm_statistics/translations/qt_zh_CN.ts b/src/pyminer/packages/pm_statistics/translations/qt_zh_CN.ts similarity index 100% rename from packages/pm_statistics/translations/qt_zh_CN.ts rename to src/pyminer/packages/pm_statistics/translations/qt_zh_CN.ts diff --git a/packages/pm_statistics/ui/stat_base.py b/src/pyminer/packages/pm_statistics/ui/stat_base.py similarity index 100% rename from packages/pm_statistics/ui/stat_base.py rename to src/pyminer/packages/pm_statistics/ui/stat_base.py diff --git a/packages/pm_statistics/ui/stat_base.ui b/src/pyminer/packages/pm_statistics/ui/stat_base.ui similarity index 100% rename from packages/pm_statistics/ui/stat_base.ui rename to src/pyminer/packages/pm_statistics/ui/stat_base.ui diff --git a/packages/pm_statistics/ui/stats.qrc b/src/pyminer/packages/pm_statistics/ui/stats.qrc similarity index 100% rename from packages/pm_statistics/ui/stats.qrc rename to src/pyminer/packages/pm_statistics/ui/stats.qrc diff --git a/packages/pm_statistics/ui/stats_rc.py b/src/pyminer/packages/pm_statistics/ui/stats_rc.py similarity index 100% rename from packages/pm_statistics/ui/stats_rc.py rename to src/pyminer/packages/pm_statistics/ui/stats_rc.py diff --git a/packages/pmagg/LICENSE b/src/pyminer/packages/pmagg/LICENSE similarity index 100% rename from packages/pmagg/LICENSE rename to src/pyminer/packages/pmagg/LICENSE diff --git a/packages/pmagg/PMAgg.py b/src/pyminer/packages/pmagg/PMAgg.py similarity index 100% rename from packages/pmagg/PMAgg.py rename to src/pyminer/packages/pmagg/PMAgg.py diff --git a/packages/pmagg/Readme_CN.md b/src/pyminer/packages/pmagg/Readme_CN.md similarity index 100% rename from packages/pmagg/Readme_CN.md rename to src/pyminer/packages/pmagg/Readme_CN.md diff --git a/pmgwidgets/widgets/basic/plots/scatters/__init__.py b/src/pyminer/packages/pmagg/__init__.py similarity index 100% rename from pmgwidgets/widgets/basic/plots/scatters/__init__.py rename to src/pyminer/packages/pmagg/__init__.py diff --git a/packages/pmagg/extension_demo.jpg b/src/pyminer/packages/pmagg/extension_demo.jpg similarity index 100% rename from packages/pmagg/extension_demo.jpg rename to src/pyminer/packages/pmagg/extension_demo.jpg diff --git a/packages/pmagg/icons/Icon.ico b/src/pyminer/packages/pmagg/icons/Icon.ico similarity index 100% rename from packages/pmagg/icons/Icon.ico rename to src/pyminer/packages/pmagg/icons/Icon.ico diff --git a/packages/pmagg/icons/X_axis.png b/src/pyminer/packages/pmagg/icons/X_axis.png similarity index 100% rename from packages/pmagg/icons/X_axis.png rename to src/pyminer/packages/pmagg/icons/X_axis.png diff --git a/packages/pmagg/icons/Y_axis.png b/src/pyminer/packages/pmagg/icons/Y_axis.png similarity index 100% rename from packages/pmagg/icons/Y_axis.png rename to src/pyminer/packages/pmagg/icons/Y_axis.png diff --git a/packages/pmagg/icons/Z_axis.png b/src/pyminer/packages/pmagg/icons/Z_axis.png similarity index 100% rename from packages/pmagg/icons/Z_axis.png rename to src/pyminer/packages/pmagg/icons/Z_axis.png diff --git a/packages/pmagg/icons/annotation.png b/src/pyminer/packages/pmagg/icons/annotation.png similarity index 100% rename from packages/pmagg/icons/annotation.png rename to src/pyminer/packages/pmagg/icons/annotation.png diff --git a/packages/pmagg/icons/arrow.png b/src/pyminer/packages/pmagg/icons/arrow.png similarity index 100% rename from packages/pmagg/icons/arrow.png rename to src/pyminer/packages/pmagg/icons/arrow.png diff --git a/packages/pmagg/icons/axis.png b/src/pyminer/packages/pmagg/icons/axis.png similarity index 100% rename from packages/pmagg/icons/axis.png rename to src/pyminer/packages/pmagg/icons/axis.png diff --git a/packages/pmagg/icons/back.png b/src/pyminer/packages/pmagg/icons/back.png similarity index 100% rename from packages/pmagg/icons/back.png rename to src/pyminer/packages/pmagg/icons/back.png diff --git a/packages/pmagg/icons/colorbar.png b/src/pyminer/packages/pmagg/icons/colorbar.png similarity index 100% rename from packages/pmagg/icons/colorbar.png rename to src/pyminer/packages/pmagg/icons/colorbar.png diff --git a/packages/pmagg/icons/figure.png b/src/pyminer/packages/pmagg/icons/figure.png similarity index 100% rename from packages/pmagg/icons/figure.png rename to src/pyminer/packages/pmagg/icons/figure.png diff --git a/packages/pmagg/icons/front.png b/src/pyminer/packages/pmagg/icons/front.png similarity index 100% rename from packages/pmagg/icons/front.png rename to src/pyminer/packages/pmagg/icons/front.png diff --git a/packages/pmagg/icons/grid.png b/src/pyminer/packages/pmagg/icons/grid.png similarity index 100% rename from packages/pmagg/icons/grid.png rename to src/pyminer/packages/pmagg/icons/grid.png diff --git a/packages/pmagg/icons/home.png b/src/pyminer/packages/pmagg/icons/home.png similarity index 100% rename from packages/pmagg/icons/home.png rename to src/pyminer/packages/pmagg/icons/home.png diff --git a/packages/pmagg/icons/image.png b/src/pyminer/packages/pmagg/icons/image.png similarity index 100% rename from packages/pmagg/icons/image.png rename to src/pyminer/packages/pmagg/icons/image.png diff --git a/packages/pmagg/icons/layout.png b/src/pyminer/packages/pmagg/icons/layout.png similarity index 100% rename from packages/pmagg/icons/layout.png rename to src/pyminer/packages/pmagg/icons/layout.png diff --git a/packages/pmagg/icons/legend.png b/src/pyminer/packages/pmagg/icons/legend.png similarity index 100% rename from packages/pmagg/icons/legend.png rename to src/pyminer/packages/pmagg/icons/legend.png diff --git a/packages/pmagg/icons/line.png b/src/pyminer/packages/pmagg/icons/line.png similarity index 100% rename from packages/pmagg/icons/line.png rename to src/pyminer/packages/pmagg/icons/line.png diff --git a/packages/pmagg/icons/oval.png b/src/pyminer/packages/pmagg/icons/oval.png similarity index 100% rename from packages/pmagg/icons/oval.png rename to src/pyminer/packages/pmagg/icons/oval.png diff --git a/packages/pmagg/icons/pan.png b/src/pyminer/packages/pmagg/icons/pan.png similarity index 100% rename from packages/pmagg/icons/pan.png rename to src/pyminer/packages/pmagg/icons/pan.png diff --git a/packages/pmagg/icons/point.png b/src/pyminer/packages/pmagg/icons/point.png similarity index 100% rename from packages/pmagg/icons/point.png rename to src/pyminer/packages/pmagg/icons/point.png diff --git a/packages/pmagg/icons/polygon.png b/src/pyminer/packages/pmagg/icons/polygon.png similarity index 100% rename from packages/pmagg/icons/polygon.png rename to src/pyminer/packages/pmagg/icons/polygon.png diff --git a/packages/pmagg/icons/rect.png b/src/pyminer/packages/pmagg/icons/rect.png similarity index 100% rename from packages/pmagg/icons/rect.png rename to src/pyminer/packages/pmagg/icons/rect.png diff --git a/packages/pmagg/icons/rotate.png b/src/pyminer/packages/pmagg/icons/rotate.png similarity index 100% rename from packages/pmagg/icons/rotate.png rename to src/pyminer/packages/pmagg/icons/rotate.png diff --git a/packages/pmagg/icons/save.png b/src/pyminer/packages/pmagg/icons/save.png similarity index 100% rename from packages/pmagg/icons/save.png rename to src/pyminer/packages/pmagg/icons/save.png diff --git a/packages/pmagg/icons/setting.png b/src/pyminer/packages/pmagg/icons/setting.png similarity index 100% rename from packages/pmagg/icons/setting.png rename to src/pyminer/packages/pmagg/icons/setting.png diff --git a/packages/pmagg/icons/space.png b/src/pyminer/packages/pmagg/icons/space.png similarity index 100% rename from packages/pmagg/icons/space.png rename to src/pyminer/packages/pmagg/icons/space.png diff --git a/packages/pmagg/icons/style.png b/src/pyminer/packages/pmagg/icons/style.png similarity index 100% rename from packages/pmagg/icons/style.png rename to src/pyminer/packages/pmagg/icons/style.png diff --git a/packages/pmagg/icons/text.png b/src/pyminer/packages/pmagg/icons/text.png similarity index 100% rename from packages/pmagg/icons/text.png rename to src/pyminer/packages/pmagg/icons/text.png diff --git a/packages/pmagg/icons/zoom.png b/src/pyminer/packages/pmagg/icons/zoom.png similarity index 100% rename from packages/pmagg/icons/zoom.png rename to src/pyminer/packages/pmagg/icons/zoom.png diff --git a/packages/pmagg/langs/en_axes_control.qm b/src/pyminer/packages/pmagg/langs/en_axes_control.qm similarity index 100% rename from packages/pmagg/langs/en_axes_control.qm rename to src/pyminer/packages/pmagg/langs/en_axes_control.qm diff --git a/packages/pmagg/langs/en_axes_control.ts b/src/pyminer/packages/pmagg/langs/en_axes_control.ts similarity index 100% rename from packages/pmagg/langs/en_axes_control.ts rename to src/pyminer/packages/pmagg/langs/en_axes_control.ts diff --git a/packages/pmagg/langs/en_pmagg_ui.qm b/src/pyminer/packages/pmagg/langs/en_pmagg_ui.qm similarity index 100% rename from packages/pmagg/langs/en_pmagg_ui.qm rename to src/pyminer/packages/pmagg/langs/en_pmagg_ui.qm diff --git a/packages/pmagg/langs/en_pmagg_ui.ts b/src/pyminer/packages/pmagg/langs/en_pmagg_ui.ts similarity index 100% rename from packages/pmagg/langs/en_pmagg_ui.ts rename to src/pyminer/packages/pmagg/langs/en_pmagg_ui.ts diff --git a/packages/pmagg/langs/zh_CN_axes_control.qm b/src/pyminer/packages/pmagg/langs/zh_CN_axes_control.qm similarity index 100% rename from packages/pmagg/langs/zh_CN_axes_control.qm rename to src/pyminer/packages/pmagg/langs/zh_CN_axes_control.qm diff --git a/packages/pmagg/langs/zh_CN_axes_control.ts b/src/pyminer/packages/pmagg/langs/zh_CN_axes_control.ts similarity index 100% rename from packages/pmagg/langs/zh_CN_axes_control.ts rename to src/pyminer/packages/pmagg/langs/zh_CN_axes_control.ts diff --git a/src/pyminer/packages/pmagg/langs/zh_CN_pmagg_ui.qm b/src/pyminer/packages/pmagg/langs/zh_CN_pmagg_ui.qm new file mode 100644 index 0000000000000000000000000000000000000000..be651eede2edc9cb0da5c140b31664afee169fa8 --- /dev/null +++ b/src/pyminer/packages/pmagg/langs/zh_CN_pmagg_ui.qm @@ -0,0 +1 @@ + List[bytes]: diff --git a/pmgwidgets/utilities/network/server.py b/src/pyminer/pmgwidgets/utilities/network/server.py similarity index 97% rename from pmgwidgets/utilities/network/server.py rename to src/pyminer/pmgwidgets/utilities/network/server.py index d6ebf377aa6c2e854a4be9e04ad7b8f3b651795b..f69a0dc0e1196a7721abb277131890492b07594f 100644 --- a/pmgwidgets/utilities/network/server.py +++ b/src/pyminer/pmgwidgets/utilities/network/server.py @@ -5,14 +5,14 @@ """ import json -import time +import logging import socket import sys -import logging +import time from typing import List, Tuple, Dict, Union -from PySide2.QtWidgets import QApplication from PySide2.QtCore import QObject, QThread, QTimer +from PySide2.QtWidgets import QApplication from .util import receive, strip_byte_end @@ -93,8 +93,7 @@ class LoopWork(QObject): t0 = time.time() self.handle_packet(sock, b) t1 = time.time() - logger.info( - "Message handled!\nThe message was:%s" % (message) + '\nTime elapsed %f s\n' % (t1 - t0)) + logger.info(f"Message handled!\nThe message was:{message}\nTime elapsed {t1 - t0:f} s\n") except: import traceback diff --git a/pmgwidgets/utilities/network/util.py b/src/pyminer/pmgwidgets/utilities/network/util.py similarity index 97% rename from pmgwidgets/utilities/network/util.py rename to src/pyminer/pmgwidgets/utilities/network/util.py index bf1e8ab0fd0b361068140d6e2728b7d930feebde..7c9fface370a526d6482c121e26de4a91fc9fa74 100644 --- a/pmgwidgets/utilities/network/util.py +++ b/src/pyminer/pmgwidgets/utilities/network/util.py @@ -89,7 +89,7 @@ def timeit(func): def wrapper(*args, **kwargs): t0 = time.time() r = func(*args, **kwargs) - print('time_elapsed', time.time() - t0) + logger.debug('time_elapsed', time.time() - t0) return r return wrapper diff --git a/pmgwidgets/utilities/platform/__init__.py b/src/pyminer/pmgwidgets/utilities/platform/__init__.py similarity index 100% rename from pmgwidgets/utilities/platform/__init__.py rename to src/pyminer/pmgwidgets/utilities/platform/__init__.py diff --git a/pmgwidgets/utilities/platform/commandutils.py b/src/pyminer/pmgwidgets/utilities/platform/commandutils.py similarity index 100% rename from pmgwidgets/utilities/platform/commandutils.py rename to src/pyminer/pmgwidgets/utilities/platform/commandutils.py diff --git a/pmgwidgets/utilities/platform/filemanager.py b/src/pyminer/pmgwidgets/utilities/platform/filemanager.py similarity index 100% rename from pmgwidgets/utilities/platform/filemanager.py rename to src/pyminer/pmgwidgets/utilities/platform/filemanager.py diff --git a/pmgwidgets/utilities/platform/filesyswatchdog.py b/src/pyminer/pmgwidgets/utilities/platform/filesyswatchdog.py similarity index 43% rename from pmgwidgets/utilities/platform/filesyswatchdog.py rename to src/pyminer/pmgwidgets/utilities/platform/filesyswatchdog.py index 65d0e687c4c5905de8080291b2b50774cde157bb..58835757bdbfd27ec1b8b6f66776c1bcb9465b15 100644 --- a/pmgwidgets/utilities/platform/filesyswatchdog.py +++ b/src/pyminer/pmgwidgets/utilities/platform/filesyswatchdog.py @@ -5,26 +5,21 @@ https://stackoverflow.com/questions/35874217/watchdog-pythons-library-how-to-send-signal-when-a-file-is-modified 源代码为PyQt4,本人整理、移植到qtpy。(Originally code was in PyQt4 and I transplanted to PySide2.) """ -import os -from PySide2.QtCore import Signal, QThread -from PySide2.QtWidgets import QMainWindow, QApplication, QLabel +from PySide2.QtCore import Signal, QThread, SignalInstance from watchdog.events import FileSystemEventHandler, FileModifiedEvent, FileMovedEvent, \ FileCreatedEvent, FileDeletedEvent from watchdog.observers import Observer class MyEventHandler(FileSystemEventHandler, QThread): - signal_file_modified = Signal(str) - signal_file_created = Signal(str) - signal_file_deleted = Signal(str) - signal_file_moved = Signal(str, str) - - def __init__(self): - super(MyEventHandler, self).__init__() + signal_file_modified: SignalInstance = Signal(str) + signal_file_created: SignalInstance = Signal(str) + signal_file_deleted: SignalInstance = Signal(str) + signal_file_moved: SignalInstance = Signal(str, str) # 仅当在本文件夹内才会触发,如果移动到了其他文件夹则触发删除信号 def on_deleted(self, event: FileDeletedEvent): - self.signal_file_modified.emit(event.src_path) + self.signal_file_deleted.emit(event.src_path) def on_modified(self, event: FileModifiedEvent): self.signal_file_modified.emit(event.src_path) @@ -37,46 +32,26 @@ class MyEventHandler(FileSystemEventHandler, QThread): class PMGFileSystemWatchdog(QThread): + """ + Watch Dog 的一切操作都是在path这个文件夹下完成的,其余位置的文件变更并不会被监测到。 + 因此,如果将一个文件移动出这个文件夹,触发的并不是“修改”信号,而是触发“删除”信号。 + + # TODO 目前仅支持监控一整个文件夹,需要添加监控单一文件的方法 + """ + def __init__(self, path): super(PMGFileSystemWatchdog, self).__init__() self.path = path self.observer = Observer() self.event_handler = MyEventHandler() - self.signal_file_modified: Signal = self.event_handler.signal_file_modified - self.signal_file_created: Signal = self.event_handler.signal_file_created - self.signal_file_deleted: Signal = self.event_handler.signal_file_deleted - self.signal_file_moved: Signal = self.event_handler.signal_file_moved + self.signal_file_modified: SignalInstance = self.event_handler.signal_file_modified + self.signal_file_created: SignalInstance = self.event_handler.signal_file_created + self.signal_file_deleted: SignalInstance = self.event_handler.signal_file_deleted + self.signal_file_moved: SignalInstance = self.event_handler.signal_file_moved self.observer.schedule(self.event_handler, self.path, recursive=True) self.observer.start() - # self.event_handler.signal_file_modified.connect(self.on_modified) - - def run(self): - pass - - # def on_modified(self, event): - # print('modified!', event) - # self.emit(QtCore.SIGNAL("fileModified1")) - - -if __name__ == '__main__': - class MainWindow(QMainWindow): - def __init__(self): - super(MainWindow, self).__init__() - d = os.path.dirname(__file__) - path = os.path.join(d, 'test') # 对其下的test文件夹进行看门狗监控 - self.label = QLabel('aaaa') - self.fileWatcher = PMGFileSystemWatchdog(path) - # self.fileWatcher.start() - self.setCentralWidget(self.label) - self.fileWatcher.event_handler.signal_file_modified.connect(self.fileModified) - self.show() - - def fileModified(self, text: str): - self.label.setText(text) - - app = QApplication([]) - window = MainWindow() - window.show() - app.exec_() + def stop(self): + self.observer.stop() + self.deleteLater() diff --git a/pmgwidgets/utilities/platform/fileutils.py b/src/pyminer/pmgwidgets/utilities/platform/fileutils.py similarity index 99% rename from pmgwidgets/utilities/platform/fileutils.py rename to src/pyminer/pmgwidgets/utilities/platform/fileutils.py index f681e9dd412e92818792d333d97f6bc50315e29d..777d70a1d4177d5fbb404b63d8e914508869e32e 100644 --- a/pmgwidgets/utilities/platform/fileutils.py +++ b/src/pyminer/pmgwidgets/utilities/platform/fileutils.py @@ -56,7 +56,7 @@ def create_file_if_not_exist(abso_file_path: str, default_content: bytes = b''): # assert os.path.isfile(abso_file_path), 'Path \'%s\' is not a file!' % abso_file_path if os.path.isfile(abso_file_path): return - while (1): + while 1: parent_path = os.path.dirname(path) if not os.path.exists(parent_path): dir_stack.append(parent_path) diff --git a/pmgwidgets/utilities/platform/openprocess.py b/src/pyminer/pmgwidgets/utilities/platform/openprocess.py similarity index 92% rename from pmgwidgets/utilities/platform/openprocess.py rename to src/pyminer/pmgwidgets/utilities/platform/openprocess.py index fc073355adcf4c6333471b990bb820f7b67cf4f9..abb634e9f52839071af42f727ed1dd912a280f2f 100644 --- a/pmgwidgets/utilities/platform/openprocess.py +++ b/src/pyminer/pmgwidgets/utilities/platform/openprocess.py @@ -5,6 +5,9 @@ import time import chardet from typing import List +import packages.code_editor.utils.utils + + class PMGProcess(): def __init__(self, args: List[str]): self.terminate = False @@ -34,7 +37,7 @@ class PMGProcess(): if self.terminate: break encoding = chardet.detect(line)['encoding'] - queue.put(str(type) + line.decode(encoding)) + queue.put(str(type) + packages.code_editor.utils.utils.decode(encoding)) stream.close() def console_loop(self): # 封装后的内容。 diff --git a/pmgwidgets/utilities/platform/pmdebug.py b/src/pyminer/pmgwidgets/utilities/platform/pmdebug.py similarity index 100% rename from pmgwidgets/utilities/platform/pmdebug.py rename to src/pyminer/pmgwidgets/utilities/platform/pmdebug.py diff --git a/static/js/element-ui/lib/theme-chalk/infinite-scroll.css b/src/pyminer/pmgwidgets/utilities/platform/test/__init__.py similarity index 100% rename from static/js/element-ui/lib/theme-chalk/infinite-scroll.css rename to src/pyminer/pmgwidgets/utilities/platform/test/__init__.py diff --git a/pmgwidgets/utilities/platform/test/python_file_test.py b/src/pyminer/pmgwidgets/utilities/platform/test/python_file_test.py similarity index 100% rename from pmgwidgets/utilities/platform/test/python_file_test.py rename to src/pyminer/pmgwidgets/utilities/platform/test/python_file_test.py diff --git a/pmgwidgets/utilities/platform/translation.py b/src/pyminer/pmgwidgets/utilities/platform/translation.py similarity index 100% rename from pmgwidgets/utilities/platform/translation.py rename to src/pyminer/pmgwidgets/utilities/platform/translation.py diff --git a/pmgwidgets/utilities/source/__init__.py b/src/pyminer/pmgwidgets/utilities/source/__init__.py similarity index 100% rename from pmgwidgets/utilities/source/__init__.py rename to src/pyminer/pmgwidgets/utilities/source/__init__.py diff --git a/pmgwidgets/utilities/source/colorutils.py b/src/pyminer/pmgwidgets/utilities/source/colorutils.py similarity index 100% rename from pmgwidgets/utilities/source/colorutils.py rename to src/pyminer/pmgwidgets/utilities/source/colorutils.py diff --git a/pmgwidgets/utilities/source/graphicsitemutils.py b/src/pyminer/pmgwidgets/utilities/source/graphicsitemutils.py similarity index 100% rename from pmgwidgets/utilities/source/graphicsitemutils.py rename to src/pyminer/pmgwidgets/utilities/source/graphicsitemutils.py diff --git a/pmgwidgets/utilities/source/iconutils.py b/src/pyminer/pmgwidgets/utilities/source/iconutils.py similarity index 55% rename from pmgwidgets/utilities/source/iconutils.py rename to src/pyminer/pmgwidgets/utilities/source/iconutils.py index 2d4aca90c405ed16fb9d1e3e3c1374560a8c520b..226acb2b3c8f4bf69c4b87d1a2bb3d33496d1d7d 100644 --- a/pmgwidgets/utilities/source/iconutils.py +++ b/src/pyminer/pmgwidgets/utilities/source/iconutils.py @@ -1,3 +1,5 @@ +from typing import Tuple + from PySide2.QtGui import QIcon, QPixmap @@ -7,10 +9,8 @@ def create_icon(icon_path: str = ":/pyqt/source/images/New.png"): return icon -def colorTup2Str(self, value: tuple) -> str: - if value is None: - return None - strcolor = '#' +def color_rgb_to_str(value: Tuple[int, ...]) -> str: + result = '#' for i in value: - strcolor += hex(int(i))[-2:].replace('x', '0') - return strcolor + result += hex(int(i))[-2:].replace('x', '0') + return result diff --git a/pmgwidgets/utilities/source/translation.py b/src/pyminer/pmgwidgets/utilities/source/translation.py similarity index 100% rename from pmgwidgets/utilities/source/translation.py rename to src/pyminer/pmgwidgets/utilities/source/translation.py diff --git a/pmgwidgets/utilities/uilogics/__init__.py b/src/pyminer/pmgwidgets/utilities/uilogics/__init__.py similarity index 100% rename from pmgwidgets/utilities/uilogics/__init__.py rename to src/pyminer/pmgwidgets/utilities/uilogics/__init__.py diff --git a/pmgwidgets/utilities/uilogics/codechecking.py b/src/pyminer/pmgwidgets/utilities/uilogics/codechecking.py similarity index 100% rename from pmgwidgets/utilities/uilogics/codechecking.py rename to src/pyminer/pmgwidgets/utilities/uilogics/codechecking.py diff --git a/pmgwidgets/utilities/uilogics/drags.py b/src/pyminer/pmgwidgets/utilities/uilogics/drags.py similarity index 100% rename from pmgwidgets/utilities/uilogics/drags.py rename to src/pyminer/pmgwidgets/utilities/uilogics/drags.py diff --git a/pmgwidgets/utilities/uilogics/tasks/__init__.py b/src/pyminer/pmgwidgets/utilities/uilogics/tasks/__init__.py similarity index 100% rename from pmgwidgets/utilities/uilogics/tasks/__init__.py rename to src/pyminer/pmgwidgets/utilities/uilogics/tasks/__init__.py diff --git a/pmgwidgets/utilities/uilogics/tasks/loop_background.py b/src/pyminer/pmgwidgets/utilities/uilogics/tasks/loop_background.py similarity index 100% rename from pmgwidgets/utilities/uilogics/tasks/loop_background.py rename to src/pyminer/pmgwidgets/utilities/uilogics/tasks/loop_background.py diff --git a/pmgwidgets/utilities/uilogics/tasks/minimal_thread.py b/src/pyminer/pmgwidgets/utilities/uilogics/tasks/minimal_thread.py similarity index 100% rename from pmgwidgets/utilities/uilogics/tasks/minimal_thread.py rename to src/pyminer/pmgwidgets/utilities/uilogics/tasks/minimal_thread.py diff --git a/pmgwidgets/utilities/uilogics/tasks/one_shot_background.py b/src/pyminer/pmgwidgets/utilities/uilogics/tasks/one_shot_background.py similarity index 100% rename from pmgwidgets/utilities/uilogics/tasks/one_shot_background.py rename to src/pyminer/pmgwidgets/utilities/uilogics/tasks/one_shot_background.py diff --git a/pmgwidgets/utilities/uilogics/tasks/threads.py b/src/pyminer/pmgwidgets/utilities/uilogics/tasks/threads.py similarity index 100% rename from pmgwidgets/utilities/uilogics/tasks/threads.py rename to src/pyminer/pmgwidgets/utilities/uilogics/tasks/threads.py diff --git a/pmgwidgets/utilities/uilogics/uidisplay.py b/src/pyminer/pmgwidgets/utilities/uilogics/uidisplay.py similarity index 100% rename from pmgwidgets/utilities/uilogics/uidisplay.py rename to src/pyminer/pmgwidgets/utilities/uilogics/uidisplay.py diff --git a/pmgwidgets/utilities/uilogics/undomanager.py b/src/pyminer/pmgwidgets/utilities/uilogics/undomanager.py similarity index 59% rename from pmgwidgets/utilities/uilogics/undomanager.py rename to src/pyminer/pmgwidgets/utilities/uilogics/undomanager.py index c71d1af565478a6453af283b140cad67250f6a47..b336a95ece6bf26a951ad7187d1a91fa6840130b 100644 --- a/pmgwidgets/utilities/uilogics/undomanager.py +++ b/src/pyminer/pmgwidgets/utilities/uilogics/undomanager.py @@ -6,20 +6,7 @@ from typing import Any -class Stack(): - def __init__(self, stack_size: int = 10): - self.pointer: int = 0 - self.content = [] - self.stack_size = stack_size - - def push(self, obj): - self.content.append(obj) - - def pop(self): - self.content.pop() - - -class UndoManager(): +class UndoManager: """ 用于撤销和重做的管理类 """ @@ -29,7 +16,7 @@ class UndoManager(): self.content = [] self.stack_size = stack_size - def push(self, obj:Any): + def push(self, obj: Any): """ 压栈时指向栈顶,这里就是撤销时候的逻辑。 :param obj: @@ -68,7 +55,7 @@ class UndoManager(): else: return None - def last_value(self)->Any: + def last_value(self) -> Any: try: return self.content[self.pointer] except: @@ -76,29 +63,3 @@ class UndoManager(): def __len__(self): return len(self.content) - - -if __name__ == '__main__': - manager = UndoManager() - manager.push('a') - manager.push('ab') - manager.push('abc') - manager.push('ab') - manager.push('abd') - manager.push('abde') - manager.push('abdef') - manager.push('abdefg') - print(manager.content, manager.pointer, len(manager)) - print(manager.undo(), manager.pointer, len(manager)) - print(manager.undo(), manager.pointer, len(manager)) - manager.push('abdefgh') - manager.push('abdefghi') - manager.push('abdefghij') - manager.push('abdefghijk') - manager.push('abdefghijkl') - manager.push('abdefghijklm') - print(manager.content) - print(manager.undo()) - print(manager.undo()) - print(manager.redo()) - print(manager.redo()) diff --git a/pmgwidgets/utilities/uilogics/windowutils.py b/src/pyminer/pmgwidgets/utilities/uilogics/windowutils.py similarity index 100% rename from pmgwidgets/utilities/uilogics/windowutils.py rename to src/pyminer/pmgwidgets/utilities/uilogics/windowutils.py diff --git a/pmgwidgets/widgets/__init__.py b/src/pyminer/pmgwidgets/widgets/__init__.py similarity index 100% rename from pmgwidgets/widgets/__init__.py rename to src/pyminer/pmgwidgets/widgets/__init__.py diff --git a/pmgwidgets/widgets/basic/__init__.py b/src/pyminer/pmgwidgets/widgets/basic/__init__.py similarity index 100% rename from pmgwidgets/widgets/basic/__init__.py rename to src/pyminer/pmgwidgets/widgets/basic/__init__.py diff --git a/pmgwidgets/widgets/basic/browsers/__init__.py b/src/pyminer/pmgwidgets/widgets/basic/browsers/__init__.py similarity index 100% rename from pmgwidgets/widgets/basic/browsers/__init__.py rename to src/pyminer/pmgwidgets/widgets/basic/browsers/__init__.py diff --git a/pmgwidgets/widgets/basic/browsers/browser.py b/src/pyminer/pmgwidgets/widgets/basic/browsers/browser.py similarity index 100% rename from pmgwidgets/widgets/basic/browsers/browser.py rename to src/pyminer/pmgwidgets/widgets/basic/browsers/browser.py diff --git a/pmgwidgets/widgets/basic/browsers/translations/qt_zh_CN.ts b/src/pyminer/pmgwidgets/widgets/basic/browsers/translations/qt_zh_CN.ts similarity index 100% rename from pmgwidgets/widgets/basic/browsers/translations/qt_zh_CN.ts rename to src/pyminer/pmgwidgets/widgets/basic/browsers/translations/qt_zh_CN.ts diff --git a/pmgwidgets/widgets/basic/buttons/__init__.py b/src/pyminer/pmgwidgets/widgets/basic/buttons/__init__.py similarity index 100% rename from pmgwidgets/widgets/basic/buttons/__init__.py rename to src/pyminer/pmgwidgets/widgets/basic/buttons/__init__.py diff --git a/pmgwidgets/widgets/basic/buttons/button/__init__.py b/src/pyminer/pmgwidgets/widgets/basic/buttons/button/__init__.py similarity index 100% rename from pmgwidgets/widgets/basic/buttons/button/__init__.py rename to src/pyminer/pmgwidgets/widgets/basic/buttons/button/__init__.py diff --git a/pmgwidgets/widgets/basic/buttons/button/toolbutton.py b/src/pyminer/pmgwidgets/widgets/basic/buttons/button/toolbutton.py similarity index 100% rename from pmgwidgets/widgets/basic/buttons/button/toolbutton.py rename to src/pyminer/pmgwidgets/widgets/basic/buttons/button/toolbutton.py diff --git a/pmgwidgets/widgets/basic/buttons/buttonpane/__init__.py b/src/pyminer/pmgwidgets/widgets/basic/buttons/buttonpane/__init__.py similarity index 100% rename from pmgwidgets/widgets/basic/buttons/buttonpane/__init__.py rename to src/pyminer/pmgwidgets/widgets/basic/buttons/buttonpane/__init__.py diff --git a/pmgwidgets/widgets/basic/buttons/buttonpane/pushbuttonpane.py b/src/pyminer/pmgwidgets/widgets/basic/buttons/buttonpane/pushbuttonpane.py similarity index 100% rename from pmgwidgets/widgets/basic/buttons/buttonpane/pushbuttonpane.py rename to src/pyminer/pmgwidgets/widgets/basic/buttons/buttonpane/pushbuttonpane.py diff --git a/pmgwidgets/widgets/basic/buttons/translations/qt_zh_CN.ts b/src/pyminer/pmgwidgets/widgets/basic/buttons/translations/qt_zh_CN.ts similarity index 100% rename from pmgwidgets/widgets/basic/buttons/translations/qt_zh_CN.ts rename to src/pyminer/pmgwidgets/widgets/basic/buttons/translations/qt_zh_CN.ts diff --git a/pmgwidgets/widgets/basic/containers/PMTab.py b/src/pyminer/pmgwidgets/widgets/basic/containers/PMTab.py similarity index 100% rename from pmgwidgets/widgets/basic/containers/PMTab.py rename to src/pyminer/pmgwidgets/widgets/basic/containers/PMTab.py diff --git a/pmgwidgets/widgets/basic/containers/__init__.py b/src/pyminer/pmgwidgets/widgets/basic/containers/__init__.py similarity index 100% rename from pmgwidgets/widgets/basic/containers/__init__.py rename to src/pyminer/pmgwidgets/widgets/basic/containers/__init__.py diff --git a/pmgwidgets/widgets/basic/containers/flowarea.py b/src/pyminer/pmgwidgets/widgets/basic/containers/flowarea.py similarity index 100% rename from pmgwidgets/widgets/basic/containers/flowarea.py rename to src/pyminer/pmgwidgets/widgets/basic/containers/flowarea.py diff --git a/pmgwidgets/widgets/basic/containers/flowlayout.py b/src/pyminer/pmgwidgets/widgets/basic/containers/flowlayout.py similarity index 100% rename from pmgwidgets/widgets/basic/containers/flowlayout.py rename to src/pyminer/pmgwidgets/widgets/basic/containers/flowlayout.py diff --git a/pmgwidgets/widgets/basic/containers/pmdockwidget.py b/src/pyminer/pmgwidgets/widgets/basic/containers/pmdockwidget.py similarity index 100% rename from pmgwidgets/widgets/basic/containers/pmdockwidget.py rename to src/pyminer/pmgwidgets/widgets/basic/containers/pmdockwidget.py diff --git a/pmgwidgets/widgets/basic/containers/pmscrollarea.py b/src/pyminer/pmgwidgets/widgets/basic/containers/pmscrollarea.py similarity index 100% rename from pmgwidgets/widgets/basic/containers/pmscrollarea.py rename to src/pyminer/pmgwidgets/widgets/basic/containers/pmscrollarea.py diff --git a/pmgwidgets/widgets/basic/containers/pmtoolbox.py b/src/pyminer/pmgwidgets/widgets/basic/containers/pmtoolbox.py similarity index 100% rename from pmgwidgets/widgets/basic/containers/pmtoolbox.py rename to src/pyminer/pmgwidgets/widgets/basic/containers/pmtoolbox.py diff --git a/pmgwidgets/widgets/basic/containers/translations/qt_zh_CN.ts b/src/pyminer/pmgwidgets/widgets/basic/containers/translations/qt_zh_CN.ts similarity index 100% rename from pmgwidgets/widgets/basic/containers/translations/qt_zh_CN.ts rename to src/pyminer/pmgwidgets/widgets/basic/containers/translations/qt_zh_CN.ts diff --git a/pmgwidgets/widgets/basic/dialogs/__init__.py b/src/pyminer/pmgwidgets/widgets/basic/dialogs/__init__.py similarity index 100% rename from pmgwidgets/widgets/basic/dialogs/__init__.py rename to src/pyminer/pmgwidgets/widgets/basic/dialogs/__init__.py diff --git a/pmgwidgets/widgets/basic/dialogs/textdialog.py b/src/pyminer/pmgwidgets/widgets/basic/dialogs/textdialog.py similarity index 100% rename from pmgwidgets/widgets/basic/dialogs/textdialog.py rename to src/pyminer/pmgwidgets/widgets/basic/dialogs/textdialog.py diff --git a/static/js/element-ui/lib/theme-chalk/infiniteScroll.css b/src/pyminer/pmgwidgets/widgets/basic/images/__init__.py similarity index 100% rename from static/js/element-ui/lib/theme-chalk/infiniteScroll.css rename to src/pyminer/pmgwidgets/widgets/basic/images/__init__.py diff --git a/pmgwidgets/widgets/basic/images/imageview.py b/src/pyminer/pmgwidgets/widgets/basic/images/imageview.py similarity index 100% rename from pmgwidgets/widgets/basic/images/imageview.py rename to src/pyminer/pmgwidgets/widgets/basic/images/imageview.py diff --git a/pmgwidgets/widgets/basic/images/imageviewitem.py b/src/pyminer/pmgwidgets/widgets/basic/images/imageviewitem.py similarity index 100% rename from pmgwidgets/widgets/basic/images/imageviewitem.py rename to src/pyminer/pmgwidgets/widgets/basic/images/imageviewitem.py diff --git a/pmgwidgets/widgets/basic/labels/__init__.py b/src/pyminer/pmgwidgets/widgets/basic/labels/__init__.py similarity index 100% rename from pmgwidgets/widgets/basic/labels/__init__.py rename to src/pyminer/pmgwidgets/widgets/basic/labels/__init__.py diff --git a/pmgwidgets/widgets/basic/labels/scrolllabel.py b/src/pyminer/pmgwidgets/widgets/basic/labels/scrolllabel.py similarity index 100% rename from pmgwidgets/widgets/basic/labels/scrolllabel.py rename to src/pyminer/pmgwidgets/widgets/basic/labels/scrolllabel.py diff --git a/pmgwidgets/widgets/basic/labels/translations/qt_zh_CN.ts b/src/pyminer/pmgwidgets/widgets/basic/labels/translations/qt_zh_CN.ts similarity index 100% rename from pmgwidgets/widgets/basic/labels/translations/qt_zh_CN.ts rename to src/pyminer/pmgwidgets/widgets/basic/labels/translations/qt_zh_CN.ts diff --git a/static/js/element-ui/lib/theme-chalk/menu-item-group.css b/src/pyminer/pmgwidgets/widgets/basic/lists/__init__.py similarity index 100% rename from static/js/element-ui/lib/theme-chalk/menu-item-group.css rename to src/pyminer/pmgwidgets/widgets/basic/lists/__init__.py diff --git a/pmgwidgets/widgets/basic/lists/combobasic.py b/src/pyminer/pmgwidgets/widgets/basic/lists/combobasic.py similarity index 100% rename from pmgwidgets/widgets/basic/lists/combobasic.py rename to src/pyminer/pmgwidgets/widgets/basic/lists/combobasic.py diff --git a/pmgwidgets/widgets/basic/lists/translations/qt_zh_CN.ts b/src/pyminer/pmgwidgets/widgets/basic/lists/translations/qt_zh_CN.ts similarity index 100% rename from pmgwidgets/widgets/basic/lists/translations/qt_zh_CN.ts rename to src/pyminer/pmgwidgets/widgets/basic/lists/translations/qt_zh_CN.ts diff --git a/pmgwidgets/widgets/basic/others/ConsoleHistoryDialog.py b/src/pyminer/pmgwidgets/widgets/basic/others/ConsoleHistoryDialog.py similarity index 100% rename from pmgwidgets/widgets/basic/others/ConsoleHistoryDialog.py rename to src/pyminer/pmgwidgets/widgets/basic/others/ConsoleHistoryDialog.py diff --git a/pmgwidgets/widgets/basic/others/ConsoleHistoryDialog.ui b/src/pyminer/pmgwidgets/widgets/basic/others/ConsoleHistoryDialog.ui similarity index 100% rename from pmgwidgets/widgets/basic/others/ConsoleHistoryDialog.ui rename to src/pyminer/pmgwidgets/widgets/basic/others/ConsoleHistoryDialog.ui diff --git a/pmgwidgets/widgets/basic/others/Ui_ConsoleHistoryDialog.py b/src/pyminer/pmgwidgets/widgets/basic/others/Ui_ConsoleHistoryDialog.py similarity index 100% rename from pmgwidgets/widgets/basic/others/Ui_ConsoleHistoryDialog.py rename to src/pyminer/pmgwidgets/widgets/basic/others/Ui_ConsoleHistoryDialog.py diff --git a/pmgwidgets/widgets/basic/others/__init__.py b/src/pyminer/pmgwidgets/widgets/basic/others/__init__.py similarity index 100% rename from pmgwidgets/widgets/basic/others/__init__.py rename to src/pyminer/pmgwidgets/widgets/basic/others/__init__.py diff --git a/pmgwidgets/widgets/basic/others/console.py b/src/pyminer/pmgwidgets/widgets/basic/others/console.py similarity index 99% rename from pmgwidgets/widgets/basic/others/console.py rename to src/pyminer/pmgwidgets/widgets/basic/others/console.py index 591f5e908683aadd7407b4d60942c49119787636..15d074ac454cf8a97b918f1ea9ab5f697296a836 100644 --- a/pmgwidgets/widgets/basic/others/console.py +++ b/src/pyminer/pmgwidgets/widgets/basic/others/console.py @@ -8,10 +8,10 @@ Created on 2020/8/24 @file: console.py @description: Console Widget """ +import json import logging import os import sys -import json from typing import Tuple, Dict, Callable from PySide2.QtCore import QObject, Signal, QThread, QWaitCondition, QMutex, QPoint, QCoreApplication, QTranslator, \ @@ -22,6 +22,7 @@ from qtconsole import styles from qtconsole.manager import QtKernelManager from qtconsole.rich_jupyter_widget import RichJupyterWidget from qtconsole.styles import default_light_syntax_style, default_light_style_sheet + from features.io import settings default_dark_style_template = styles.default_template + """\ @@ -32,7 +33,6 @@ default_dark_style_sheet = default_dark_style_template % dict( bgcolor='#19232d', fgcolor='white', select="#ccc") default_dark_syntax_style = 'monokai' # 'default' -logging.basicConfig(stream=sys.stderr) logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) @@ -359,8 +359,8 @@ class PMGIpythonConsole(RichJupyterWidget): with open(self.history_path, 'w') as f: json.dump(history, f) + if __name__ == '__main__': - import sys import cgitb cgitb.enable(format='text') diff --git a/pmgwidgets/widgets/basic/others/gauge.py b/src/pyminer/pmgwidgets/widgets/basic/others/gauge.py similarity index 100% rename from pmgwidgets/widgets/basic/others/gauge.py rename to src/pyminer/pmgwidgets/widgets/basic/others/gauge.py diff --git a/pmgwidgets/widgets/basic/others/instantbootconsole.py b/src/pyminer/pmgwidgets/widgets/basic/others/instantbootconsole.py similarity index 100% rename from pmgwidgets/widgets/basic/others/instantbootconsole.py rename to src/pyminer/pmgwidgets/widgets/basic/others/instantbootconsole.py diff --git a/pmgwidgets/widgets/basic/others/processconsole.py b/src/pyminer/pmgwidgets/widgets/basic/others/processconsole.py similarity index 100% rename from pmgwidgets/widgets/basic/others/processconsole.py rename to src/pyminer/pmgwidgets/widgets/basic/others/processconsole.py diff --git a/pmgwidgets/widgets/basic/others/source/clear.png b/src/pyminer/pmgwidgets/widgets/basic/others/source/clear.png similarity index 100% rename from pmgwidgets/widgets/basic/others/source/clear.png rename to src/pyminer/pmgwidgets/widgets/basic/others/source/clear.png diff --git a/pmgwidgets/widgets/basic/others/source/run.png b/src/pyminer/pmgwidgets/widgets/basic/others/source/run.png similarity index 100% rename from pmgwidgets/widgets/basic/others/source/run.png rename to src/pyminer/pmgwidgets/widgets/basic/others/source/run.png diff --git a/pmgwidgets/widgets/basic/others/source/stop.png b/src/pyminer/pmgwidgets/widgets/basic/others/source/stop.png similarity index 100% rename from pmgwidgets/widgets/basic/others/source/stop.png rename to src/pyminer/pmgwidgets/widgets/basic/others/source/stop.png diff --git a/pmgwidgets/widgets/basic/others/translations/qt_zh_CN.ts b/src/pyminer/pmgwidgets/widgets/basic/others/translations/qt_zh_CN.ts similarity index 100% rename from pmgwidgets/widgets/basic/others/translations/qt_zh_CN.ts rename to src/pyminer/pmgwidgets/widgets/basic/others/translations/qt_zh_CN.ts diff --git a/pmgwidgets/widgets/basic/plots/__init__.py b/src/pyminer/pmgwidgets/widgets/basic/plots/__init__.py similarity index 100% rename from pmgwidgets/widgets/basic/plots/__init__.py rename to src/pyminer/pmgwidgets/widgets/basic/plots/__init__.py diff --git a/static/js/element-ui/lib/theme-chalk/menu-item.css b/src/pyminer/pmgwidgets/widgets/basic/plots/bars/__init__.py similarity index 100% rename from static/js/element-ui/lib/theme-chalk/menu-item.css rename to src/pyminer/pmgwidgets/widgets/basic/plots/bars/__init__.py diff --git a/pmgwidgets/widgets/basic/plots/bars/histogram.py b/src/pyminer/pmgwidgets/widgets/basic/plots/bars/histogram.py similarity index 100% rename from pmgwidgets/widgets/basic/plots/bars/histogram.py rename to src/pyminer/pmgwidgets/widgets/basic/plots/bars/histogram.py diff --git a/pmgwidgets/widgets/basic/plots/lines/__init__.py b/src/pyminer/pmgwidgets/widgets/basic/plots/lines/__init__.py similarity index 100% rename from pmgwidgets/widgets/basic/plots/lines/__init__.py rename to src/pyminer/pmgwidgets/widgets/basic/plots/lines/__init__.py diff --git a/pmgwidgets/widgets/basic/plots/lines/timeseries.py b/src/pyminer/pmgwidgets/widgets/basic/plots/lines/timeseries.py similarity index 100% rename from pmgwidgets/widgets/basic/plots/lines/timeseries.py rename to src/pyminer/pmgwidgets/widgets/basic/plots/lines/timeseries.py diff --git a/pmgwidgets/widgets/basic/plots/matplotlib/__init__.py b/src/pyminer/pmgwidgets/widgets/basic/plots/matplotlib/__init__.py similarity index 100% rename from pmgwidgets/widgets/basic/plots/matplotlib/__init__.py rename to src/pyminer/pmgwidgets/widgets/basic/plots/matplotlib/__init__.py diff --git a/pmgwidgets/widgets/basic/plots/matplotlib/base/__init__.py b/src/pyminer/pmgwidgets/widgets/basic/plots/matplotlib/base/__init__.py similarity index 100% rename from pmgwidgets/widgets/basic/plots/matplotlib/base/__init__.py rename to src/pyminer/pmgwidgets/widgets/basic/plots/matplotlib/base/__init__.py diff --git a/pmgwidgets/widgets/basic/plots/matplotlib/base/pmaggplot.py b/src/pyminer/pmgwidgets/widgets/basic/plots/matplotlib/base/pmaggplot.py similarity index 100% rename from pmgwidgets/widgets/basic/plots/matplotlib/base/pmaggplot.py rename to src/pyminer/pmgwidgets/widgets/basic/plots/matplotlib/base/pmaggplot.py diff --git a/pmgwidgets/widgets/basic/plots/matplotlib/base/qt5aggplot.py b/src/pyminer/pmgwidgets/widgets/basic/plots/matplotlib/base/qt5aggplot.py similarity index 100% rename from pmgwidgets/widgets/basic/plots/matplotlib/base/qt5aggplot.py rename to src/pyminer/pmgwidgets/widgets/basic/plots/matplotlib/base/qt5aggplot.py diff --git a/pmgwidgets/widgets/basic/plots/pyqtgraph/__init__.py b/src/pyminer/pmgwidgets/widgets/basic/plots/pyqtgraph/__init__.py similarity index 100% rename from pmgwidgets/widgets/basic/plots/pyqtgraph/__init__.py rename to src/pyminer/pmgwidgets/widgets/basic/plots/pyqtgraph/__init__.py diff --git a/pmgwidgets/widgets/basic/plots/pyqtgraph/base/__init__.py b/src/pyminer/pmgwidgets/widgets/basic/plots/pyqtgraph/base/__init__.py similarity index 100% rename from pmgwidgets/widgets/basic/plots/pyqtgraph/base/__init__.py rename to src/pyminer/pmgwidgets/widgets/basic/plots/pyqtgraph/base/__init__.py diff --git a/pmgwidgets/widgets/basic/plots/pyqtgraph/base/pgplot.py b/src/pyminer/pmgwidgets/widgets/basic/plots/pyqtgraph/base/pgplot.py similarity index 100% rename from pmgwidgets/widgets/basic/plots/pyqtgraph/base/pgplot.py rename to src/pyminer/pmgwidgets/widgets/basic/plots/pyqtgraph/base/pgplot.py diff --git a/static/js/element-ui/lib/theme-chalk/submenu.css b/src/pyminer/pmgwidgets/widgets/basic/plots/scatters/__init__.py similarity index 100% rename from static/js/element-ui/lib/theme-chalk/submenu.css rename to src/pyminer/pmgwidgets/widgets/basic/plots/scatters/__init__.py diff --git a/pmgwidgets/widgets/basic/plots/scatters/scatters.py b/src/pyminer/pmgwidgets/widgets/basic/plots/scatters/scatters.py similarity index 100% rename from pmgwidgets/widgets/basic/plots/scatters/scatters.py rename to src/pyminer/pmgwidgets/widgets/basic/plots/scatters/scatters.py diff --git a/pmgwidgets/widgets/basic/plots/translations/qt_zh_CN.ts b/src/pyminer/pmgwidgets/widgets/basic/plots/translations/qt_zh_CN.ts similarity index 100% rename from pmgwidgets/widgets/basic/plots/translations/qt_zh_CN.ts rename to src/pyminer/pmgwidgets/widgets/basic/plots/translations/qt_zh_CN.ts diff --git a/static/js/element-ui/lib/theme-chalk/tab-pane.css b/src/pyminer/pmgwidgets/widgets/basic/quick/__init__.py similarity index 100% rename from static/js/element-ui/lib/theme-chalk/tab-pane.css rename to src/pyminer/pmgwidgets/widgets/basic/quick/__init__.py diff --git a/pmgwidgets/widgets/basic/quick/demo1.py b/src/pyminer/pmgwidgets/widgets/basic/quick/demo1.py similarity index 100% rename from pmgwidgets/widgets/basic/quick/demo1.py rename to src/pyminer/pmgwidgets/widgets/basic/quick/demo1.py diff --git a/pmgwidgets/widgets/basic/tables/__init__.py b/src/pyminer/pmgwidgets/widgets/basic/tables/__init__.py similarity index 100% rename from pmgwidgets/widgets/basic/tables/__init__.py rename to src/pyminer/pmgwidgets/widgets/basic/tables/__init__.py diff --git a/pmgwidgets/widgets/basic/tables/help/help.md b/src/pyminer/pmgwidgets/widgets/basic/tables/help/help.md similarity index 100% rename from pmgwidgets/widgets/basic/tables/help/help.md rename to src/pyminer/pmgwidgets/widgets/basic/tables/help/help.md diff --git a/pmgwidgets/widgets/basic/tables/tableviews.py b/src/pyminer/pmgwidgets/widgets/basic/tables/tableviews.py similarity index 100% rename from pmgwidgets/widgets/basic/tables/tableviews.py rename to src/pyminer/pmgwidgets/widgets/basic/tables/tableviews.py diff --git a/pmgwidgets/widgets/basic/tables/tablewidgets.py b/src/pyminer/pmgwidgets/widgets/basic/tables/tablewidgets.py similarity index 100% rename from pmgwidgets/widgets/basic/tables/tablewidgets.py rename to src/pyminer/pmgwidgets/widgets/basic/tables/tablewidgets.py diff --git a/pmgwidgets/widgets/basic/tables/translations/qt_zh_CN.ts b/src/pyminer/pmgwidgets/widgets/basic/tables/translations/qt_zh_CN.ts similarity index 100% rename from pmgwidgets/widgets/basic/tables/translations/qt_zh_CN.ts rename to src/pyminer/pmgwidgets/widgets/basic/tables/translations/qt_zh_CN.ts diff --git a/pmgwidgets/widgets/basic/texts/__init__.py b/src/pyminer/pmgwidgets/widgets/basic/texts/__init__.py similarity index 100% rename from pmgwidgets/widgets/basic/texts/__init__.py rename to src/pyminer/pmgwidgets/widgets/basic/texts/__init__.py diff --git a/pmgwidgets/widgets/basic/texts/statusreport/__init__.py b/src/pyminer/pmgwidgets/widgets/basic/texts/statusreport/__init__.py similarity index 100% rename from pmgwidgets/widgets/basic/texts/statusreport/__init__.py rename to src/pyminer/pmgwidgets/widgets/basic/texts/statusreport/__init__.py diff --git a/pmgwidgets/widgets/basic/texts/statusreport/errroreport.py b/src/pyminer/pmgwidgets/widgets/basic/texts/statusreport/errroreport.py similarity index 100% rename from pmgwidgets/widgets/basic/texts/statusreport/errroreport.py rename to src/pyminer/pmgwidgets/widgets/basic/texts/statusreport/errroreport.py diff --git a/utils/io/file_import.py b/src/pyminer/pmgwidgets/widgets/basic/texts/webeditors/__init__.py similarity index 100% rename from utils/io/file_import.py rename to src/pyminer/pmgwidgets/widgets/basic/texts/webeditors/__init__.py diff --git a/pmgwidgets/widgets/basic/texts/webeditors/editor.py b/src/pyminer/pmgwidgets/widgets/basic/texts/webeditors/editor.py similarity index 100% rename from pmgwidgets/widgets/basic/texts/webeditors/editor.py rename to src/pyminer/pmgwidgets/widgets/basic/texts/webeditors/editor.py diff --git a/pmgwidgets/widgets/basic/trees/__init__.py b/src/pyminer/pmgwidgets/widgets/basic/trees/__init__.py similarity index 100% rename from pmgwidgets/widgets/basic/trees/__init__.py rename to src/pyminer/pmgwidgets/widgets/basic/trees/__init__.py diff --git a/pmgwidgets/widgets/basic/trees/filetree.py b/src/pyminer/pmgwidgets/widgets/basic/trees/filetree.py similarity index 100% rename from pmgwidgets/widgets/basic/trees/filetree.py rename to src/pyminer/pmgwidgets/widgets/basic/trees/filetree.py diff --git a/pmgwidgets/widgets/basic/trees/jsontree.py b/src/pyminer/pmgwidgets/widgets/basic/trees/jsontree.py similarity index 100% rename from pmgwidgets/widgets/basic/trees/jsontree.py rename to src/pyminer/pmgwidgets/widgets/basic/trees/jsontree.py diff --git a/pmgwidgets/widgets/basic/trees/translations/qt_zh_CN.ts b/src/pyminer/pmgwidgets/widgets/basic/trees/translations/qt_zh_CN.ts similarity index 100% rename from pmgwidgets/widgets/basic/trees/translations/qt_zh_CN.ts rename to src/pyminer/pmgwidgets/widgets/basic/trees/translations/qt_zh_CN.ts diff --git a/pmgwidgets/widgets/basic/trees/treecheck.py b/src/pyminer/pmgwidgets/widgets/basic/trees/treecheck.py similarity index 100% rename from pmgwidgets/widgets/basic/trees/treecheck.py rename to src/pyminer/pmgwidgets/widgets/basic/trees/treecheck.py diff --git a/pmgwidgets/widgets/basic/trees/varattrtree.py b/src/pyminer/pmgwidgets/widgets/basic/trees/varattrtree.py similarity index 100% rename from pmgwidgets/widgets/basic/trees/varattrtree.py rename to src/pyminer/pmgwidgets/widgets/basic/trees/varattrtree.py diff --git a/pmgwidgets/widgets/composited/__init__.py b/src/pyminer/pmgwidgets/widgets/composited/__init__.py similarity index 100% rename from pmgwidgets/widgets/composited/__init__.py rename to src/pyminer/pmgwidgets/widgets/composited/__init__.py diff --git a/pmgwidgets/widgets/composited/buttonpanel.py b/src/pyminer/pmgwidgets/widgets/composited/buttonpanel.py similarity index 100% rename from pmgwidgets/widgets/composited/buttonpanel.py rename to src/pyminer/pmgwidgets/widgets/composited/buttonpanel.py diff --git a/pmgwidgets/widgets/composited/fastui.py b/src/pyminer/pmgwidgets/widgets/composited/fastui.py similarity index 100% rename from pmgwidgets/widgets/composited/fastui.py rename to src/pyminer/pmgwidgets/widgets/composited/fastui.py diff --git a/pmgwidgets/widgets/composited/generalpanel.py b/src/pyminer/pmgwidgets/widgets/composited/generalpanel.py similarity index 100% rename from pmgwidgets/widgets/composited/generalpanel.py rename to src/pyminer/pmgwidgets/widgets/composited/generalpanel.py diff --git a/pmgwidgets/widgets/extended/__init__.py b/src/pyminer/pmgwidgets/widgets/extended/__init__.py similarity index 100% rename from pmgwidgets/widgets/extended/__init__.py rename to src/pyminer/pmgwidgets/widgets/extended/__init__.py diff --git a/pmgwidgets/widgets/extended/base/__init__.py b/src/pyminer/pmgwidgets/widgets/extended/base/__init__.py similarity index 100% rename from pmgwidgets/widgets/extended/base/__init__.py rename to src/pyminer/pmgwidgets/widgets/extended/base/__init__.py diff --git a/pmgwidgets/widgets/extended/base/baseextendedwidget.py b/src/pyminer/pmgwidgets/widgets/extended/base/baseextendedwidget.py similarity index 100% rename from pmgwidgets/widgets/extended/base/baseextendedwidget.py rename to src/pyminer/pmgwidgets/widgets/extended/base/baseextendedwidget.py diff --git a/pmgwidgets/widgets/extended/checkbuttons/__init__.py b/src/pyminer/pmgwidgets/widgets/extended/checkbuttons/__init__.py similarity index 100% rename from pmgwidgets/widgets/extended/checkbuttons/__init__.py rename to src/pyminer/pmgwidgets/widgets/extended/checkbuttons/__init__.py diff --git a/pmgwidgets/widgets/extended/checkbuttons/check.py b/src/pyminer/pmgwidgets/widgets/extended/checkbuttons/check.py similarity index 100% rename from pmgwidgets/widgets/extended/checkbuttons/check.py rename to src/pyminer/pmgwidgets/widgets/extended/checkbuttons/check.py diff --git a/pmgwidgets/widgets/extended/comboboxes/__init__.py b/src/pyminer/pmgwidgets/widgets/extended/comboboxes/__init__.py similarity index 100% rename from pmgwidgets/widgets/extended/comboboxes/__init__.py rename to src/pyminer/pmgwidgets/widgets/extended/comboboxes/__init__.py diff --git a/pmgwidgets/widgets/extended/comboboxes/combo.py b/src/pyminer/pmgwidgets/widgets/extended/comboboxes/combo.py similarity index 100% rename from pmgwidgets/widgets/extended/comboboxes/combo.py rename to src/pyminer/pmgwidgets/widgets/extended/comboboxes/combo.py diff --git a/pmgwidgets/widgets/extended/comboboxes/variables_combo.py b/src/pyminer/pmgwidgets/widgets/extended/comboboxes/variables_combo.py similarity index 100% rename from pmgwidgets/widgets/extended/comboboxes/variables_combo.py rename to src/pyminer/pmgwidgets/widgets/extended/comboboxes/variables_combo.py diff --git a/pmgwidgets/widgets/extended/entries/__init__.py b/src/pyminer/pmgwidgets/widgets/extended/entries/__init__.py similarity index 100% rename from pmgwidgets/widgets/extended/entries/__init__.py rename to src/pyminer/pmgwidgets/widgets/extended/entries/__init__.py diff --git a/pmgwidgets/widgets/extended/entries/baseentryctrl.py b/src/pyminer/pmgwidgets/widgets/extended/entries/baseentryctrl.py similarity index 100% rename from pmgwidgets/widgets/extended/entries/baseentryctrl.py rename to src/pyminer/pmgwidgets/widgets/extended/entries/baseentryctrl.py diff --git a/pmgwidgets/widgets/extended/entries/colorctrl.py b/src/pyminer/pmgwidgets/widgets/extended/entries/colorctrl.py similarity index 100% rename from pmgwidgets/widgets/extended/entries/colorctrl.py rename to src/pyminer/pmgwidgets/widgets/extended/entries/colorctrl.py diff --git a/pmgwidgets/widgets/extended/entries/evalctrl.py b/src/pyminer/pmgwidgets/widgets/extended/entries/evalctrl.py similarity index 100% rename from pmgwidgets/widgets/extended/entries/evalctrl.py rename to src/pyminer/pmgwidgets/widgets/extended/entries/evalctrl.py diff --git a/pmgwidgets/widgets/extended/entries/filectrl.py b/src/pyminer/pmgwidgets/widgets/extended/entries/filectrl.py similarity index 100% rename from pmgwidgets/widgets/extended/entries/filectrl.py rename to src/pyminer/pmgwidgets/widgets/extended/entries/filectrl.py diff --git a/pmgwidgets/widgets/extended/entries/folderctrl.py b/src/pyminer/pmgwidgets/widgets/extended/entries/folderctrl.py similarity index 100% rename from pmgwidgets/widgets/extended/entries/folderctrl.py rename to src/pyminer/pmgwidgets/widgets/extended/entries/folderctrl.py diff --git a/pmgwidgets/widgets/extended/entries/funcctrl.py b/src/pyminer/pmgwidgets/widgets/extended/entries/funcctrl.py similarity index 100% rename from pmgwidgets/widgets/extended/entries/funcctrl.py rename to src/pyminer/pmgwidgets/widgets/extended/entries/funcctrl.py diff --git a/pmgwidgets/widgets/extended/entries/keymappingctrl.py b/src/pyminer/pmgwidgets/widgets/extended/entries/keymappingctrl.py similarity index 100% rename from pmgwidgets/widgets/extended/entries/keymappingctrl.py rename to src/pyminer/pmgwidgets/widgets/extended/entries/keymappingctrl.py diff --git a/pmgwidgets/widgets/extended/entries/linectrl.py b/src/pyminer/pmgwidgets/widgets/extended/entries/linectrl.py similarity index 100% rename from pmgwidgets/widgets/extended/entries/linectrl.py rename to src/pyminer/pmgwidgets/widgets/extended/entries/linectrl.py diff --git a/pmgwidgets/widgets/extended/entries/numctrl.py b/src/pyminer/pmgwidgets/widgets/extended/entries/numctrl.py similarity index 100% rename from pmgwidgets/widgets/extended/entries/numctrl.py rename to src/pyminer/pmgwidgets/widgets/extended/entries/numctrl.py diff --git a/pmgwidgets/widgets/extended/entries/passwordctrl.py b/src/pyminer/pmgwidgets/widgets/extended/entries/passwordctrl.py similarity index 100% rename from pmgwidgets/widgets/extended/entries/passwordctrl.py rename to src/pyminer/pmgwidgets/widgets/extended/entries/passwordctrl.py diff --git a/pmgwidgets/widgets/extended/labels/__init__.py b/src/pyminer/pmgwidgets/widgets/extended/labels/__init__.py similarity index 100% rename from pmgwidgets/widgets/extended/labels/__init__.py rename to src/pyminer/pmgwidgets/widgets/extended/labels/__init__.py diff --git a/pmgwidgets/widgets/extended/labels/label.py b/src/pyminer/pmgwidgets/widgets/extended/labels/label.py similarity index 100% rename from pmgwidgets/widgets/extended/labels/label.py rename to src/pyminer/pmgwidgets/widgets/extended/labels/label.py diff --git a/pmgwidgets/widgets/extended/lists/__init__.py b/src/pyminer/pmgwidgets/widgets/extended/lists/__init__.py similarity index 100% rename from pmgwidgets/widgets/extended/lists/__init__.py rename to src/pyminer/pmgwidgets/widgets/extended/lists/__init__.py diff --git a/pmgwidgets/widgets/extended/lists/listwgt.py b/src/pyminer/pmgwidgets/widgets/extended/lists/listwgt.py similarity index 100% rename from pmgwidgets/widgets/extended/lists/listwgt.py rename to src/pyminer/pmgwidgets/widgets/extended/lists/listwgt.py diff --git a/pmgwidgets/widgets/extended/others/__init__.py b/src/pyminer/pmgwidgets/widgets/extended/others/__init__.py similarity index 100% rename from pmgwidgets/widgets/extended/others/__init__.py rename to src/pyminer/pmgwidgets/widgets/extended/others/__init__.py diff --git a/src/pyminer/pmgwidgets/widgets/extended/others/monitors/__init__.py b/src/pyminer/pmgwidgets/widgets/extended/others/monitors/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pmgwidgets/widgets/extended/others/multitypeparaminput.py b/src/pyminer/pmgwidgets/widgets/extended/others/multitypeparaminput.py similarity index 100% rename from pmgwidgets/widgets/extended/others/multitypeparaminput.py rename to src/pyminer/pmgwidgets/widgets/extended/others/multitypeparaminput.py diff --git a/pmgwidgets/widgets/extended/plots/__init__.py b/src/pyminer/pmgwidgets/widgets/extended/plots/__init__.py similarity index 100% rename from pmgwidgets/widgets/extended/plots/__init__.py rename to src/pyminer/pmgwidgets/widgets/extended/plots/__init__.py diff --git a/pmgwidgets/widgets/extended/plots/lines/__init__.py b/src/pyminer/pmgwidgets/widgets/extended/plots/lines/__init__.py similarity index 100% rename from pmgwidgets/widgets/extended/plots/lines/__init__.py rename to src/pyminer/pmgwidgets/widgets/extended/plots/lines/__init__.py diff --git a/pmgwidgets/widgets/extended/plots/lines/timeseries.py b/src/pyminer/pmgwidgets/widgets/extended/plots/lines/timeseries.py similarity index 100% rename from pmgwidgets/widgets/extended/plots/lines/timeseries.py rename to src/pyminer/pmgwidgets/widgets/extended/plots/lines/timeseries.py diff --git a/src/pyminer/pmgwidgets/widgets/extended/radiobuttons/__init__.py b/src/pyminer/pmgwidgets/widgets/extended/radiobuttons/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pmgwidgets/widgets/extended/radiobuttons/radiobuttonctrl.py b/src/pyminer/pmgwidgets/widgets/extended/radiobuttons/radiobuttonctrl.py similarity index 100% rename from pmgwidgets/widgets/extended/radiobuttons/radiobuttonctrl.py rename to src/pyminer/pmgwidgets/widgets/extended/radiobuttons/radiobuttonctrl.py diff --git a/pmgwidgets/widgets/extended/spins/__init__.py b/src/pyminer/pmgwidgets/widgets/extended/spins/__init__.py similarity index 100% rename from pmgwidgets/widgets/extended/spins/__init__.py rename to src/pyminer/pmgwidgets/widgets/extended/spins/__init__.py diff --git a/pmgwidgets/widgets/extended/spins/datetime.py b/src/pyminer/pmgwidgets/widgets/extended/spins/datetime.py similarity index 100% rename from pmgwidgets/widgets/extended/spins/datetime.py rename to src/pyminer/pmgwidgets/widgets/extended/spins/datetime.py diff --git a/pmgwidgets/widgets/extended/spins/numberspin.py b/src/pyminer/pmgwidgets/widgets/extended/spins/numberspin.py similarity index 100% rename from pmgwidgets/widgets/extended/spins/numberspin.py rename to src/pyminer/pmgwidgets/widgets/extended/spins/numberspin.py diff --git a/pmgwidgets/widgets/extended/tables/__init__.py b/src/pyminer/pmgwidgets/widgets/extended/tables/__init__.py similarity index 100% rename from pmgwidgets/widgets/extended/tables/__init__.py rename to src/pyminer/pmgwidgets/widgets/extended/tables/__init__.py diff --git a/pmgwidgets/widgets/extended/tables/rulesctrl.py b/src/pyminer/pmgwidgets/widgets/extended/tables/rulesctrl.py similarity index 100% rename from pmgwidgets/widgets/extended/tables/rulesctrl.py rename to src/pyminer/pmgwidgets/widgets/extended/tables/rulesctrl.py diff --git a/pmgwidgets/widgets/extended/tables/tableshow.py b/src/pyminer/pmgwidgets/widgets/extended/tables/tableshow.py similarity index 100% rename from pmgwidgets/widgets/extended/tables/tableshow.py rename to src/pyminer/pmgwidgets/widgets/extended/tables/tableshow.py diff --git a/pmgwidgets/widgets/extended/texts/__init__.py b/src/pyminer/pmgwidgets/widgets/extended/texts/__init__.py similarity index 100% rename from pmgwidgets/widgets/extended/texts/__init__.py rename to src/pyminer/pmgwidgets/widgets/extended/texts/__init__.py diff --git a/src/pyminer/pmgwidgets/widgets/extended/texts/htmlshow.py b/src/pyminer/pmgwidgets/widgets/extended/texts/htmlshow.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/pyminer/pmgwidgets/widgets/extended/texts/markdownshow.py b/src/pyminer/pmgwidgets/widgets/extended/texts/markdownshow.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/pyminer/pmgwidgets/widgets/extended/trees/__init__.py b/src/pyminer/pmgwidgets/widgets/extended/trees/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pmlocalserver/readme.md b/src/pyminer/pmlocalserver/readme.md similarity index 100% rename from pmlocalserver/readme.md rename to src/pyminer/pmlocalserver/readme.md diff --git a/pmlocalserver/server.py b/src/pyminer/pmlocalserver/server.py similarity index 97% rename from pmlocalserver/server.py rename to src/pyminer/pmlocalserver/server.py index 745325d7dc6f4aecde3bd60b6d987d2883f7dd47..876e0f65a1c3a67a28ce4fd7ba85df336b866664 100644 --- a/pmlocalserver/server.py +++ b/src/pyminer/pmlocalserver/server.py @@ -1,11 +1,9 @@ import threading +from multiprocessing import shared_memory from flask import Flask from flask_cors import CORS -import threading -from multiprocessing import shared_memory - server = Flask(__name__, static_folder='static', static_url_path='/static') CORS(server, supports_credentials=True) # 解决跨域 diff --git a/pyminer.pro b/src/pyminer/pyminer.pro similarity index 100% rename from pyminer.pro rename to src/pyminer/pyminer.pro diff --git a/pyminer.py b/src/pyminer/pyminer.py similarity index 100% rename from pyminer.py rename to src/pyminer/pyminer.py diff --git a/pyminer_comm/__init__.py b/src/pyminer/pyminer_comm/__init__.py similarity index 55% rename from pyminer_comm/__init__.py rename to src/pyminer/pyminer_comm/__init__.py index 5b0fd311c464d9f93b8a3739a14fdda8e43f743e..a611c6a401be4bb1e301433fdbb23ba14ca87770 100644 --- a/pyminer_comm/__init__.py +++ b/src/pyminer/pyminer_comm/__init__.py @@ -3,7 +3,13 @@ # @Author: Zhanyi Hou # @Email: 1295752786@qq.com # @File: __init__.py.py +import logging -from pyminer_comm.pyminer_client import * from pyminer_comm.data_client import * +from pyminer_comm.pyminer_client import * +logging.basicConfig( + format="%(asctime)-15s %(name)-40s %(levelname)-8s %(message)s", + datefmt="%Y-%m-%d %H:%M:%S", + level=logging.INFO, +) diff --git a/pyminer_comm/base/__init__.py b/src/pyminer/pyminer_comm/base/__init__.py similarity index 100% rename from pyminer_comm/base/__init__.py rename to src/pyminer/pyminer_comm/base/__init__.py diff --git a/pyminer_comm/base/datadesc.py b/src/pyminer/pyminer_comm/base/datadesc.py similarity index 100% rename from pyminer_comm/base/datadesc.py rename to src/pyminer/pyminer_comm/base/datadesc.py diff --git a/pyminer_comm/base/encode_decode.py b/src/pyminer/pyminer_comm/base/encode_decode.py similarity index 100% rename from pyminer_comm/base/encode_decode.py rename to src/pyminer/pyminer_comm/base/encode_decode.py diff --git a/pyminer_comm/base/network.py b/src/pyminer/pyminer_comm/base/network.py similarity index 87% rename from pyminer_comm/base/network.py rename to src/pyminer/pyminer_comm/base/network.py index e92d1cf0c351b32d60c47dae57192f5bd144c205..a5e5ddf68bea828dce6fbb990d76d13832742104 100644 --- a/pyminer_comm/base/network.py +++ b/src/pyminer/pyminer_comm/base/network.py @@ -3,11 +3,12 @@ # @Author: Zhanyi Hou # @Email: 1295752786@qq.com # @File: base.py -import socket import logging +import socket logger = logging.getLogger(__name__) -logger.setLevel(logging.DEBUG) +# 由于这个文件里的内容会在ipython中进行调用,因此使用WARNING级别以降低在ipython里面的输出 +logger.setLevel(logging.WARNING) def get(method: str, msg: str, port=52346, _timeout: int = None, **kwargs) -> bytes: diff --git a/pyminer_comm/base/sys_utils.py b/src/pyminer/pyminer_comm/base/sys_utils.py similarity index 100% rename from pyminer_comm/base/sys_utils.py rename to src/pyminer/pyminer_comm/base/sys_utils.py diff --git a/pyminer_comm/data_client/__init__.py b/src/pyminer/pyminer_comm/data_client/__init__.py similarity index 100% rename from pyminer_comm/data_client/__init__.py rename to src/pyminer/pyminer_comm/data_client/__init__.py diff --git a/pyminer_comm/data_client/data_client.py b/src/pyminer/pyminer_comm/data_client/data_client.py similarity index 100% rename from pyminer_comm/data_client/data_client.py rename to src/pyminer/pyminer_comm/data_client/data_client.py diff --git a/pyminer_comm/data_client/unittest_data_client.py b/src/pyminer/pyminer_comm/data_client/unittest_data_client.py similarity index 100% rename from pyminer_comm/data_client/unittest_data_client.py rename to src/pyminer/pyminer_comm/data_client/unittest_data_client.py diff --git a/pyminer_comm/pyminer_client/__init__.py b/src/pyminer/pyminer_comm/pyminer_client/__init__.py similarity index 100% rename from pyminer_comm/pyminer_client/__init__.py rename to src/pyminer/pyminer_comm/pyminer_client/__init__.py diff --git a/pyminer_comm/pyminer_client/pm_client.py b/src/pyminer/pyminer_comm/pyminer_client/pm_client.py similarity index 100% rename from pyminer_comm/pyminer_client/pm_client.py rename to src/pyminer/pyminer_comm/pyminer_client/pm_client.py diff --git a/src/pyminer/pyminer_comm/readme.md b/src/pyminer/pyminer_comm/readme.md new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/pyminer_comm/tests/test_communication.py b/src/pyminer/pyminer_comm/tests/test_communication.py similarity index 100% rename from pyminer_comm/tests/test_communication.py rename to src/pyminer/pyminer_comm/tests/test_communication.py diff --git a/src/pyminer/pytest.ini b/src/pyminer/pytest.ini new file mode 100644 index 0000000000000000000000000000000000000000..de19c9f0b7133138e09e72785b1c56cefae528ee --- /dev/null +++ b/src/pyminer/pytest.ini @@ -0,0 +1,2 @@ +[pytest] +testpaths = tests \ No newline at end of file diff --git a/requirements.txt b/src/pyminer/requirements.txt similarity index 98% rename from requirements.txt rename to src/pyminer/requirements.txt index 45dd7f3790da85cc71eaf037ff5fb6c641db9c19..078381d7a90031cf388153ee66ae697d7f2b3ade 100644 --- a/requirements.txt +++ b/src/pyminer/requirements.txt @@ -58,5 +58,5 @@ pyminer_comm>=0.7.1 ipyparams pathspec codegen - - +chardet +parso \ No newline at end of file diff --git a/requirements_dev.txt b/src/pyminer/requirements_dev.txt similarity index 87% rename from requirements_dev.txt rename to src/pyminer/requirements_dev.txt index 417dc8a6ba6c9d71d2b5da697400973d5765f879..f1f2bf039b58ad772849a8d6a084e6a91c201dab 100644 --- a/requirements_dev.txt +++ b/src/pyminer/requirements_dev.txt @@ -5,3 +5,5 @@ recommonmark flake8 pytest numpydoc +pytest-qt +jinja2 \ No newline at end of file diff --git a/requirements_linux.txt b/src/pyminer/requirements_linux.txt similarity index 100% rename from requirements_linux.txt rename to src/pyminer/requirements_linux.txt diff --git a/requirements_mac.txt b/src/pyminer/requirements_mac.txt similarity index 100% rename from requirements_mac.txt rename to src/pyminer/requirements_mac.txt diff --git a/resources/fonts/Cascadia.ttf b/src/pyminer/resources/fonts/Cascadia.ttf similarity index 100% rename from resources/fonts/Cascadia.ttf rename to src/pyminer/resources/fonts/Cascadia.ttf diff --git a/resources/fonts/CascadiaMono.ttf b/src/pyminer/resources/fonts/CascadiaMono.ttf similarity index 100% rename from resources/fonts/CascadiaMono.ttf rename to src/pyminer/resources/fonts/CascadiaMono.ttf diff --git a/resources/fonts/Deng.ttf b/src/pyminer/resources/fonts/Deng.ttf similarity index 100% rename from resources/fonts/Deng.ttf rename to src/pyminer/resources/fonts/Deng.ttf diff --git a/resources/fonts/Dengb.ttf b/src/pyminer/resources/fonts/Dengb.ttf similarity index 100% rename from resources/fonts/Dengb.ttf rename to src/pyminer/resources/fonts/Dengb.ttf diff --git a/resources/fonts/Dengl.ttf b/src/pyminer/resources/fonts/Dengl.ttf similarity index 100% rename from resources/fonts/Dengl.ttf rename to src/pyminer/resources/fonts/Dengl.ttf diff --git a/resources/fonts/SourceCodePro-Bold.ttf b/src/pyminer/resources/fonts/SourceCodePro-Bold.ttf similarity index 100% rename from resources/fonts/SourceCodePro-Bold.ttf rename to src/pyminer/resources/fonts/SourceCodePro-Bold.ttf diff --git a/resources/fonts/SourceCodePro-BoldIt.ttf b/src/pyminer/resources/fonts/SourceCodePro-BoldIt.ttf similarity index 100% rename from resources/fonts/SourceCodePro-BoldIt.ttf rename to src/pyminer/resources/fonts/SourceCodePro-BoldIt.ttf diff --git a/resources/fonts/SourceCodePro-It.ttf b/src/pyminer/resources/fonts/SourceCodePro-It.ttf similarity index 100% rename from resources/fonts/SourceCodePro-It.ttf rename to src/pyminer/resources/fonts/SourceCodePro-It.ttf diff --git a/resources/fonts/SourceCodePro-Regular.ttf b/src/pyminer/resources/fonts/SourceCodePro-Regular.ttf similarity index 100% rename from resources/fonts/SourceCodePro-Regular.ttf rename to src/pyminer/resources/fonts/SourceCodePro-Regular.ttf diff --git a/resources/icons/logo.ico b/src/pyminer/resources/icons/logo.ico similarity index 100% rename from resources/icons/logo.ico rename to src/pyminer/resources/icons/logo.ico diff --git a/resources/icons/logo.png b/src/pyminer/resources/icons/logo.png similarity index 100% rename from resources/icons/logo.png rename to src/pyminer/resources/icons/logo.png diff --git "a/resources/images/PyMiner\346\241\206\346\236\266\350\257\264\346\230\216.jpg" "b/src/pyminer/resources/images/PyMiner\346\241\206\346\236\266\350\257\264\346\230\216.jpg" similarity index 100% rename from "resources/images/PyMiner\346\241\206\346\236\266\350\257\264\346\230\216.jpg" rename to "src/pyminer/resources/images/PyMiner\346\241\206\346\236\266\350\257\264\346\230\216.jpg" diff --git a/resources/images/bg.png b/src/pyminer/resources/images/bg.png similarity index 100% rename from resources/images/bg.png rename to src/pyminer/resources/images/bg.png diff --git a/resources/images/left.bmp b/src/pyminer/resources/images/left.bmp similarity index 100% rename from resources/images/left.bmp rename to src/pyminer/resources/images/left.bmp diff --git a/resources/images/splash.jpg b/src/pyminer/resources/images/splash.jpg similarity index 100% rename from resources/images/splash.jpg rename to src/pyminer/resources/images/splash.jpg diff --git a/resources/images/splash_v2.png b/src/pyminer/resources/images/splash_v2.png similarity index 100% rename from resources/images/splash_v2.png rename to src/pyminer/resources/images/splash_v2.png diff --git a/resources/images/weixin.png b/src/pyminer/resources/images/weixin.png similarity index 100% rename from resources/images/weixin.png rename to src/pyminer/resources/images/weixin.png diff --git a/resources/images/xmind.png b/src/pyminer/resources/images/xmind.png similarity index 100% rename from resources/images/xmind.png rename to src/pyminer/resources/images/xmind.png diff --git a/resources/images/zhifubao.png b/src/pyminer/resources/images/zhifubao.png similarity index 100% rename from resources/images/zhifubao.png rename to src/pyminer/resources/images/zhifubao.png diff --git a/resources/pyqtsource.qrc b/src/pyminer/resources/pyqtsource.qrc similarity index 100% rename from resources/pyqtsource.qrc rename to src/pyminer/resources/pyqtsource.qrc diff --git a/resources/pyqtsource_rc.py b/src/pyminer/resources/pyqtsource_rc.py similarity index 100% rename from resources/pyqtsource_rc.py rename to src/pyminer/resources/pyqtsource_rc.py diff --git a/resources/qss/Fusion.qss b/src/pyminer/resources/qss/Fusion.qss similarity index 100% rename from resources/qss/Fusion.qss rename to src/pyminer/resources/qss/Fusion.qss diff --git a/resources/qss/Qdarkstyle.qss b/src/pyminer/resources/qss/Qdarkstyle.qss similarity index 100% rename from resources/qss/Qdarkstyle.qss rename to src/pyminer/resources/qss/Qdarkstyle.qss diff --git a/resources/qss/Windows.qss b/src/pyminer/resources/qss/Windows.qss similarity index 100% rename from resources/qss/Windows.qss rename to src/pyminer/resources/qss/Windows.qss diff --git a/resources/qss/index.rst b/src/pyminer/resources/qss/index.rst similarity index 100% rename from resources/qss/index.rst rename to src/pyminer/resources/qss/index.rst diff --git a/resources/qss/standard.ini b/src/pyminer/resources/qss/standard.ini similarity index 100% rename from resources/qss/standard.ini rename to src/pyminer/resources/qss/standard.ini diff --git a/resources/qss/standard.qss b/src/pyminer/resources/qss/standard.qss similarity index 100% rename from resources/qss/standard.qss rename to src/pyminer/resources/qss/standard.qss diff --git a/resources/qss/windowsvista.qss b/src/pyminer/resources/qss/windowsvista.qss similarity index 100% rename from resources/qss/windowsvista.qss rename to src/pyminer/resources/qss/windowsvista.qss diff --git a/resources/screenshot/check_data.png b/src/pyminer/resources/screenshot/check_data.png similarity index 100% rename from resources/screenshot/check_data.png rename to src/pyminer/resources/screenshot/check_data.png diff --git a/resources/screenshot/code.png b/src/pyminer/resources/screenshot/code.png similarity index 100% rename from resources/screenshot/code.png rename to src/pyminer/resources/screenshot/code.png diff --git a/resources/screenshot/group.jpg b/src/pyminer/resources/screenshot/group.jpg similarity index 100% rename from resources/screenshot/group.jpg rename to src/pyminer/resources/screenshot/group.jpg diff --git a/resources/screenshot/main.png b/src/pyminer/resources/screenshot/main.png similarity index 100% rename from resources/screenshot/main.png rename to src/pyminer/resources/screenshot/main.png diff --git a/resources/theme/default/icons/3d.svg b/src/pyminer/resources/theme/default/icons/3d.svg similarity index 100% rename from resources/theme/default/icons/3d.svg rename to src/pyminer/resources/theme/default/icons/3d.svg diff --git a/resources/theme/default/icons/Classification.svg b/src/pyminer/resources/theme/default/icons/Classification.svg similarity index 100% rename from resources/theme/default/icons/Classification.svg rename to src/pyminer/resources/theme/default/icons/Classification.svg diff --git a/resources/theme/default/icons/Clustering.svg b/src/pyminer/resources/theme/default/icons/Clustering.svg similarity index 100% rename from resources/theme/default/icons/Clustering.svg rename to src/pyminer/resources/theme/default/icons/Clustering.svg diff --git a/resources/theme/default/icons/E-matlab.svg b/src/pyminer/resources/theme/default/icons/E-matlab.svg similarity index 100% rename from resources/theme/default/icons/E-matlab.svg rename to src/pyminer/resources/theme/default/icons/E-matlab.svg diff --git a/resources/theme/default/icons/ExcelFile.png b/src/pyminer/resources/theme/default/icons/ExcelFile.png similarity index 100% rename from resources/theme/default/icons/ExcelFile.png rename to src/pyminer/resources/theme/default/icons/ExcelFile.png diff --git a/resources/theme/default/icons/GeneratingAdministrativeRegion.svg b/src/pyminer/resources/theme/default/icons/GeneratingAdministrativeRegion.svg similarity index 100% rename from resources/theme/default/icons/GeneratingAdministrativeRegion.svg rename to src/pyminer/resources/theme/default/icons/GeneratingAdministrativeRegion.svg diff --git a/resources/theme/default/icons/JoinMapTable.svg b/src/pyminer/resources/theme/default/icons/JoinMapTable.svg similarity index 100% rename from resources/theme/default/icons/JoinMapTable.svg rename to src/pyminer/resources/theme/default/icons/JoinMapTable.svg diff --git a/resources/theme/default/icons/Jupyter.svg b/src/pyminer/resources/theme/default/icons/Jupyter.svg similarity index 100% rename from resources/theme/default/icons/Jupyter.svg rename to src/pyminer/resources/theme/default/icons/Jupyter.svg diff --git a/resources/theme/default/icons/LandSurveyAutoNumber.svg b/src/pyminer/resources/theme/default/icons/LandSurveyAutoNumber.svg similarity index 100% rename from resources/theme/default/icons/LandSurveyAutoNumber.svg rename to src/pyminer/resources/theme/default/icons/LandSurveyAutoNumber.svg diff --git a/resources/theme/default/icons/MaintainRegionDic.svg b/src/pyminer/resources/theme/default/icons/MaintainRegionDic.svg similarity index 100% rename from resources/theme/default/icons/MaintainRegionDic.svg rename to src/pyminer/resources/theme/default/icons/MaintainRegionDic.svg diff --git a/resources/theme/default/icons/Mouse.svg b/src/pyminer/resources/theme/default/icons/Mouse.svg similarity index 100% rename from resources/theme/default/icons/Mouse.svg rename to src/pyminer/resources/theme/default/icons/Mouse.svg diff --git a/resources/theme/default/icons/MySQL.svg b/src/pyminer/resources/theme/default/icons/MySQL.svg similarity index 100% rename from resources/theme/default/icons/MySQL.svg rename to src/pyminer/resources/theme/default/icons/MySQL.svg diff --git a/resources/theme/default/icons/New post.svg b/src/pyminer/resources/theme/default/icons/New post.svg similarity index 100% rename from resources/theme/default/icons/New post.svg rename to src/pyminer/resources/theme/default/icons/New post.svg diff --git a/resources/theme/default/icons/R.svg b/src/pyminer/resources/theme/default/icons/R.svg similarity index 100% rename from resources/theme/default/icons/R.svg rename to src/pyminer/resources/theme/default/icons/R.svg diff --git a/resources/theme/default/icons/action.svg b/src/pyminer/resources/theme/default/icons/action.svg similarity index 100% rename from resources/theme/default/icons/action.svg rename to src/pyminer/resources/theme/default/icons/action.svg diff --git a/resources/theme/default/icons/addFeature.svg b/src/pyminer/resources/theme/default/icons/addFeature.svg similarity index 100% rename from resources/theme/default/icons/addFeature.svg rename to src/pyminer/resources/theme/default/icons/addFeature.svg diff --git a/resources/theme/default/icons/add_col.svg b/src/pyminer/resources/theme/default/icons/add_col.svg similarity index 100% rename from resources/theme/default/icons/add_col.svg rename to src/pyminer/resources/theme/default/icons/add_col.svg diff --git a/resources/theme/default/icons/add_row.svg b/src/pyminer/resources/theme/default/icons/add_row.svg similarity index 100% rename from resources/theme/default/icons/add_row.svg rename to src/pyminer/resources/theme/default/icons/add_row.svg diff --git a/resources/theme/default/icons/addannotation.svg b/src/pyminer/resources/theme/default/icons/addannotation.svg similarity index 100% rename from resources/theme/default/icons/addannotation.svg rename to src/pyminer/resources/theme/default/icons/addannotation.svg diff --git a/resources/theme/default/icons/added.png b/src/pyminer/resources/theme/default/icons/added.png similarity index 100% rename from resources/theme/default/icons/added.png rename to src/pyminer/resources/theme/default/icons/added.png diff --git a/resources/theme/default/icons/addnode.svg b/src/pyminer/resources/theme/default/icons/addnode.svg similarity index 100% rename from resources/theme/default/icons/addnode.svg rename to src/pyminer/resources/theme/default/icons/addnode.svg diff --git a/resources/theme/default/icons/addpath.svg b/src/pyminer/resources/theme/default/icons/addpath.svg similarity index 100% rename from resources/theme/default/icons/addpath.svg rename to src/pyminer/resources/theme/default/icons/addpath.svg diff --git a/resources/theme/default/icons/align_bottom.svg b/src/pyminer/resources/theme/default/icons/align_bottom.svg similarity index 100% rename from resources/theme/default/icons/align_bottom.svg rename to src/pyminer/resources/theme/default/icons/align_bottom.svg diff --git a/resources/theme/default/icons/align_horCenter.svg b/src/pyminer/resources/theme/default/icons/align_horCenter.svg similarity index 100% rename from resources/theme/default/icons/align_horCenter.svg rename to src/pyminer/resources/theme/default/icons/align_horCenter.svg diff --git a/resources/theme/default/icons/align_left.svg b/src/pyminer/resources/theme/default/icons/align_left.svg similarity index 100% rename from resources/theme/default/icons/align_left.svg rename to src/pyminer/resources/theme/default/icons/align_left.svg diff --git a/resources/theme/default/icons/align_right.svg b/src/pyminer/resources/theme/default/icons/align_right.svg similarity index 100% rename from resources/theme/default/icons/align_right.svg rename to src/pyminer/resources/theme/default/icons/align_right.svg diff --git a/resources/theme/default/icons/align_top.svg b/src/pyminer/resources/theme/default/icons/align_top.svg similarity index 100% rename from resources/theme/default/icons/align_top.svg rename to src/pyminer/resources/theme/default/icons/align_top.svg diff --git a/resources/theme/default/icons/align_verCenter.svg b/src/pyminer/resources/theme/default/icons/align_verCenter.svg similarity index 100% rename from resources/theme/default/icons/align_verCenter.svg rename to src/pyminer/resources/theme/default/icons/align_verCenter.svg diff --git a/resources/theme/default/icons/allowedit.svg b/src/pyminer/resources/theme/default/icons/allowedit.svg similarity index 100% rename from resources/theme/default/icons/allowedit.svg rename to src/pyminer/resources/theme/default/icons/allowedit.svg diff --git a/resources/theme/default/icons/allowedit_layer.svg b/src/pyminer/resources/theme/default/icons/allowedit_layer.svg similarity index 100% rename from resources/theme/default/icons/allowedit_layer.svg rename to src/pyminer/resources/theme/default/icons/allowedit_layer.svg diff --git a/resources/theme/default/icons/allowsearch.svg b/src/pyminer/resources/theme/default/icons/allowsearch.svg similarity index 100% rename from resources/theme/default/icons/allowsearch.svg rename to src/pyminer/resources/theme/default/icons/allowsearch.svg diff --git a/resources/theme/default/icons/allowsearch_layer.svg b/src/pyminer/resources/theme/default/icons/allowsearch_layer.svg similarity index 100% rename from resources/theme/default/icons/allowsearch_layer.svg rename to src/pyminer/resources/theme/default/icons/allowsearch_layer.svg diff --git a/resources/theme/default/icons/allowselect.svg b/src/pyminer/resources/theme/default/icons/allowselect.svg similarity index 100% rename from resources/theme/default/icons/allowselect.svg rename to src/pyminer/resources/theme/default/icons/allowselect.svg diff --git a/resources/theme/default/icons/allowselect_layer.svg b/src/pyminer/resources/theme/default/icons/allowselect_layer.svg similarity index 100% rename from resources/theme/default/icons/allowselect_layer.svg rename to src/pyminer/resources/theme/default/icons/allowselect_layer.svg diff --git a/resources/theme/default/icons/allrecords.svg b/src/pyminer/resources/theme/default/icons/allrecords.svg similarity index 100% rename from resources/theme/default/icons/allrecords.svg rename to src/pyminer/resources/theme/default/icons/allrecords.svg diff --git a/resources/theme/default/icons/annotation.svg b/src/pyminer/resources/theme/default/icons/annotation.svg similarity index 100% rename from resources/theme/default/icons/annotation.svg rename to src/pyminer/resources/theme/default/icons/annotation.svg diff --git a/resources/theme/default/icons/annotation_no.svg b/src/pyminer/resources/theme/default/icons/annotation_no.svg similarity index 100% rename from resources/theme/default/icons/annotation_no.svg rename to src/pyminer/resources/theme/default/icons/annotation_no.svg diff --git a/resources/theme/default/icons/anova.svg b/src/pyminer/resources/theme/default/icons/anova.svg similarity index 100% rename from resources/theme/default/icons/anova.svg rename to src/pyminer/resources/theme/default/icons/anova.svg diff --git a/resources/theme/default/icons/app_down.svg b/src/pyminer/resources/theme/default/icons/app_down.svg similarity index 100% rename from resources/theme/default/icons/app_down.svg rename to src/pyminer/resources/theme/default/icons/app_down.svg diff --git a/resources/theme/default/icons/appstore.svg b/src/pyminer/resources/theme/default/icons/appstore.svg similarity index 100% rename from resources/theme/default/icons/appstore.svg rename to src/pyminer/resources/theme/default/icons/appstore.svg diff --git a/resources/theme/default/icons/attributerender.svg b/src/pyminer/resources/theme/default/icons/attributerender.svg similarity index 100% rename from resources/theme/default/icons/attributerender.svg rename to src/pyminer/resources/theme/default/icons/attributerender.svg diff --git a/resources/theme/default/icons/attributes.png b/src/pyminer/resources/theme/default/icons/attributes.png similarity index 100% rename from resources/theme/default/icons/attributes.png rename to src/pyminer/resources/theme/default/icons/attributes.png diff --git a/resources/theme/default/icons/basicStatistic.svg b/src/pyminer/resources/theme/default/icons/basicStatistic.svg similarity index 100% rename from resources/theme/default/icons/basicStatistic.svg rename to src/pyminer/resources/theme/default/icons/basicStatistic.svg diff --git a/resources/theme/default/icons/beginfly.svg b/src/pyminer/resources/theme/default/icons/beginfly.svg similarity index 100% rename from resources/theme/default/icons/beginfly.svg rename to src/pyminer/resources/theme/default/icons/beginfly.svg diff --git a/resources/theme/default/icons/bottom.svg b/src/pyminer/resources/theme/default/icons/bottom.svg similarity index 100% rename from resources/theme/default/icons/bottom.svg rename to src/pyminer/resources/theme/default/icons/bottom.svg diff --git a/resources/theme/default/icons/camera.svg b/src/pyminer/resources/theme/default/icons/camera.svg similarity index 100% rename from resources/theme/default/icons/camera.svg rename to src/pyminer/resources/theme/default/icons/camera.svg diff --git a/resources/theme/default/icons/canshu.svg b/src/pyminer/resources/theme/default/icons/canshu.svg similarity index 100% rename from resources/theme/default/icons/canshu.svg rename to src/pyminer/resources/theme/default/icons/canshu.svg diff --git a/resources/theme/default/icons/catalogAttributeTablePageFirst.svg b/src/pyminer/resources/theme/default/icons/catalogAttributeTablePageFirst.svg similarity index 100% rename from resources/theme/default/icons/catalogAttributeTablePageFirst.svg rename to src/pyminer/resources/theme/default/icons/catalogAttributeTablePageFirst.svg diff --git a/resources/theme/default/icons/catalogAttributeTablePageLast.svg b/src/pyminer/resources/theme/default/icons/catalogAttributeTablePageLast.svg similarity index 100% rename from resources/theme/default/icons/catalogAttributeTablePageLast.svg rename to src/pyminer/resources/theme/default/icons/catalogAttributeTablePageLast.svg diff --git a/resources/theme/default/icons/catalogAttributeTablePageNext.svg b/src/pyminer/resources/theme/default/icons/catalogAttributeTablePageNext.svg similarity index 100% rename from resources/theme/default/icons/catalogAttributeTablePageNext.svg rename to src/pyminer/resources/theme/default/icons/catalogAttributeTablePageNext.svg diff --git a/resources/theme/default/icons/catalogAttributeTablePagePrevious.svg b/src/pyminer/resources/theme/default/icons/catalogAttributeTablePagePrevious.svg similarity index 100% rename from resources/theme/default/icons/catalogAttributeTablePagePrevious.svg rename to src/pyminer/resources/theme/default/icons/catalogAttributeTablePagePrevious.svg diff --git a/resources/theme/default/icons/catchline.svg b/src/pyminer/resources/theme/default/icons/catchline.svg similarity index 100% rename from resources/theme/default/icons/catchline.svg rename to src/pyminer/resources/theme/default/icons/catchline.svg diff --git a/resources/theme/default/icons/catchpoint.svg b/src/pyminer/resources/theme/default/icons/catchpoint.svg similarity index 100% rename from resources/theme/default/icons/catchpoint.svg rename to src/pyminer/resources/theme/default/icons/catchpoint.svg diff --git a/resources/theme/default/icons/centerpointlinkage.svg b/src/pyminer/resources/theme/default/icons/centerpointlinkage.svg similarity index 100% rename from resources/theme/default/icons/centerpointlinkage.svg rename to src/pyminer/resources/theme/default/icons/centerpointlinkage.svg diff --git a/resources/theme/default/icons/changeAttribute.svg b/src/pyminer/resources/theme/default/icons/changeAttribute.svg similarity index 100% rename from resources/theme/default/icons/changeAttribute.svg rename to src/pyminer/resources/theme/default/icons/changeAttribute.svg diff --git a/resources/theme/default/icons/changeFeature.svg b/src/pyminer/resources/theme/default/icons/changeFeature.svg similarity index 100% rename from resources/theme/default/icons/changeFeature.svg rename to src/pyminer/resources/theme/default/icons/changeFeature.svg diff --git a/resources/theme/default/icons/changeGeometry.svg b/src/pyminer/resources/theme/default/icons/changeGeometry.svg similarity index 100% rename from resources/theme/default/icons/changeGeometry.svg rename to src/pyminer/resources/theme/default/icons/changeGeometry.svg diff --git a/resources/theme/default/icons/chartStatistic.svg b/src/pyminer/resources/theme/default/icons/chartStatistic.svg similarity index 100% rename from resources/theme/default/icons/chartStatistic.svg rename to src/pyminer/resources/theme/default/icons/chartStatistic.svg diff --git a/resources/theme/default/icons/check_update.svg b/src/pyminer/resources/theme/default/icons/check_update.svg similarity index 100% rename from resources/theme/default/icons/check_update.svg rename to src/pyminer/resources/theme/default/icons/check_update.svg diff --git a/resources/theme/default/icons/clear.svg b/src/pyminer/resources/theme/default/icons/clear.svg similarity index 100% rename from resources/theme/default/icons/clear.svg rename to src/pyminer/resources/theme/default/icons/clear.svg diff --git a/resources/theme/default/icons/close.png b/src/pyminer/resources/theme/default/icons/close.png similarity index 100% rename from resources/theme/default/icons/close.png rename to src/pyminer/resources/theme/default/icons/close.png diff --git a/resources/theme/default/icons/close_white.png b/src/pyminer/resources/theme/default/icons/close_white.png similarity index 100% rename from resources/theme/default/icons/close_white.png rename to src/pyminer/resources/theme/default/icons/close_white.png diff --git a/resources/theme/default/icons/cmd.svg b/src/pyminer/resources/theme/default/icons/cmd.svg similarity index 100% rename from resources/theme/default/icons/cmd.svg rename to src/pyminer/resources/theme/default/icons/cmd.svg diff --git a/resources/theme/default/icons/column.svg b/src/pyminer/resources/theme/default/icons/column.svg similarity index 100% rename from resources/theme/default/icons/column.svg rename to src/pyminer/resources/theme/default/icons/column.svg diff --git a/resources/theme/default/icons/column_2.svg b/src/pyminer/resources/theme/default/icons/column_2.svg similarity index 100% rename from resources/theme/default/icons/column_2.svg rename to src/pyminer/resources/theme/default/icons/column_2.svg diff --git a/resources/theme/default/icons/community.svg b/src/pyminer/resources/theme/default/icons/community.svg similarity index 100% rename from resources/theme/default/icons/community.svg rename to src/pyminer/resources/theme/default/icons/community.svg diff --git a/resources/theme/default/icons/compare.svg b/src/pyminer/resources/theme/default/icons/compare.svg similarity index 100% rename from resources/theme/default/icons/compare.svg rename to src/pyminer/resources/theme/default/icons/compare.svg diff --git a/resources/theme/default/icons/conflict.svg b/src/pyminer/resources/theme/default/icons/conflict.svg similarity index 100% rename from resources/theme/default/icons/conflict.svg rename to src/pyminer/resources/theme/default/icons/conflict.svg diff --git a/resources/theme/default/icons/conflicted.png b/src/pyminer/resources/theme/default/icons/conflicted.png similarity index 100% rename from resources/theme/default/icons/conflicted.png rename to src/pyminer/resources/theme/default/icons/conflicted.png diff --git a/resources/theme/default/icons/continuefly.svg b/src/pyminer/resources/theme/default/icons/continuefly.svg similarity index 100% rename from resources/theme/default/icons/continuefly.svg rename to src/pyminer/resources/theme/default/icons/continuefly.svg diff --git a/resources/theme/default/icons/copy.svg b/src/pyminer/resources/theme/default/icons/copy.svg similarity index 100% rename from resources/theme/default/icons/copy.svg rename to src/pyminer/resources/theme/default/icons/copy.svg diff --git a/resources/theme/default/icons/copyElement.svg b/src/pyminer/resources/theme/default/icons/copyElement.svg similarity index 100% rename from resources/theme/default/icons/copyElement.svg rename to src/pyminer/resources/theme/default/icons/copyElement.svg diff --git a/resources/theme/default/icons/csv.svg b/src/pyminer/resources/theme/default/icons/csv.svg similarity index 100% rename from resources/theme/default/icons/csv.svg rename to src/pyminer/resources/theme/default/icons/csv.svg diff --git a/resources/theme/default/icons/csv_gray.svg b/src/pyminer/resources/theme/default/icons/csv_gray.svg similarity index 100% rename from resources/theme/default/icons/csv_gray.svg rename to src/pyminer/resources/theme/default/icons/csv_gray.svg diff --git a/resources/theme/default/icons/currentindex.png b/src/pyminer/resources/theme/default/icons/currentindex.png similarity index 100% rename from resources/theme/default/icons/currentindex.png rename to src/pyminer/resources/theme/default/icons/currentindex.png diff --git a/resources/theme/default/icons/dataSourceConfig.svg b/src/pyminer/resources/theme/default/icons/dataSourceConfig.svg similarity index 100% rename from resources/theme/default/icons/dataSourceConfig.svg rename to src/pyminer/resources/theme/default/icons/dataSourceConfig.svg diff --git a/resources/theme/default/icons/data_desc.svg b/src/pyminer/resources/theme/default/icons/data_desc.svg similarity index 100% rename from resources/theme/default/icons/data_desc.svg rename to src/pyminer/resources/theme/default/icons/data_desc.svg diff --git a/resources/theme/default/icons/data_desc_2.svg b/src/pyminer/resources/theme/default/icons/data_desc_2.svg similarity index 100% rename from resources/theme/default/icons/data_desc_2.svg rename to src/pyminer/resources/theme/default/icons/data_desc_2.svg diff --git a/resources/theme/default/icons/data_info.svg b/src/pyminer/resources/theme/default/icons/data_info.svg similarity index 100% rename from resources/theme/default/icons/data_info.svg rename to src/pyminer/resources/theme/default/icons/data_info.svg diff --git a/resources/theme/default/icons/data_join.svg b/src/pyminer/resources/theme/default/icons/data_join.svg similarity index 100% rename from resources/theme/default/icons/data_join.svg rename to src/pyminer/resources/theme/default/icons/data_join.svg diff --git a/resources/theme/default/icons/data_missing.svg b/src/pyminer/resources/theme/default/icons/data_missing.svg similarity index 100% rename from resources/theme/default/icons/data_missing.svg rename to src/pyminer/resources/theme/default/icons/data_missing.svg diff --git a/resources/theme/default/icons/data_partition.svg b/src/pyminer/resources/theme/default/icons/data_partition.svg similarity index 100% rename from resources/theme/default/icons/data_partition.svg rename to src/pyminer/resources/theme/default/icons/data_partition.svg diff --git a/resources/theme/default/icons/data_role.svg b/src/pyminer/resources/theme/default/icons/data_role.svg similarity index 100% rename from resources/theme/default/icons/data_role.svg rename to src/pyminer/resources/theme/default/icons/data_role.svg diff --git a/resources/theme/default/icons/database_config.svg b/src/pyminer/resources/theme/default/icons/database_config.svg similarity index 100% rename from resources/theme/default/icons/database_config.svg rename to src/pyminer/resources/theme/default/icons/database_config.svg diff --git a/resources/theme/default/icons/dataspecification.svg b/src/pyminer/resources/theme/default/icons/dataspecification.svg similarity index 100% rename from resources/theme/default/icons/dataspecification.svg rename to src/pyminer/resources/theme/default/icons/dataspecification.svg diff --git a/resources/theme/default/icons/debug.svg b/src/pyminer/resources/theme/default/icons/debug.svg similarity index 100% rename from resources/theme/default/icons/debug.svg rename to src/pyminer/resources/theme/default/icons/debug.svg diff --git a/resources/theme/default/icons/debug_red.svg b/src/pyminer/resources/theme/default/icons/debug_red.svg similarity index 100% rename from resources/theme/default/icons/debug_red.svg rename to src/pyminer/resources/theme/default/icons/debug_red.svg diff --git a/resources/theme/default/icons/deleteFeature.svg b/src/pyminer/resources/theme/default/icons/deleteFeature.svg similarity index 100% rename from resources/theme/default/icons/deleteFeature.svg rename to src/pyminer/resources/theme/default/icons/deleteFeature.svg diff --git a/resources/theme/default/icons/delete_col.svg b/src/pyminer/resources/theme/default/icons/delete_col.svg similarity index 100% rename from resources/theme/default/icons/delete_col.svg rename to src/pyminer/resources/theme/default/icons/delete_col.svg diff --git a/resources/theme/default/icons/delete_row.svg b/src/pyminer/resources/theme/default/icons/delete_row.svg similarity index 100% rename from resources/theme/default/icons/delete_row.svg rename to src/pyminer/resources/theme/default/icons/delete_row.svg diff --git a/resources/theme/default/icons/deleted.png b/src/pyminer/resources/theme/default/icons/deleted.png similarity index 100% rename from resources/theme/default/icons/deleted.png rename to src/pyminer/resources/theme/default/icons/deleted.png diff --git a/resources/theme/default/icons/deletedata.svg b/src/pyminer/resources/theme/default/icons/deletedata.svg similarity index 100% rename from resources/theme/default/icons/deletedata.svg rename to src/pyminer/resources/theme/default/icons/deletedata.svg diff --git a/resources/theme/default/icons/dependencies.svg b/src/pyminer/resources/theme/default/icons/dependencies.svg similarity index 100% rename from resources/theme/default/icons/dependencies.svg rename to src/pyminer/resources/theme/default/icons/dependencies.svg diff --git a/resources/theme/default/icons/diagram.svg b/src/pyminer/resources/theme/default/icons/diagram.svg similarity index 100% rename from resources/theme/default/icons/diagram.svg rename to src/pyminer/resources/theme/default/icons/diagram.svg diff --git a/resources/theme/default/icons/disallowedit.svg b/src/pyminer/resources/theme/default/icons/disallowedit.svg similarity index 100% rename from resources/theme/default/icons/disallowedit.svg rename to src/pyminer/resources/theme/default/icons/disallowedit.svg diff --git a/resources/theme/default/icons/disallowsearch.svg b/src/pyminer/resources/theme/default/icons/disallowsearch.svg similarity index 100% rename from resources/theme/default/icons/disallowsearch.svg rename to src/pyminer/resources/theme/default/icons/disallowsearch.svg diff --git a/resources/theme/default/icons/disallowselect.svg b/src/pyminer/resources/theme/default/icons/disallowselect.svg similarity index 100% rename from resources/theme/default/icons/disallowselect.svg rename to src/pyminer/resources/theme/default/icons/disallowselect.svg diff --git a/resources/theme/default/icons/display.svg b/src/pyminer/resources/theme/default/icons/display.svg similarity index 100% rename from resources/theme/default/icons/display.svg rename to src/pyminer/resources/theme/default/icons/display.svg diff --git a/resources/theme/default/icons/distribution.svg b/src/pyminer/resources/theme/default/icons/distribution.svg similarity index 100% rename from resources/theme/default/icons/distribution.svg rename to src/pyminer/resources/theme/default/icons/distribution.svg diff --git a/resources/theme/default/icons/donate.svg b/src/pyminer/resources/theme/default/icons/donate.svg similarity index 100% rename from resources/theme/default/icons/donate.svg rename to src/pyminer/resources/theme/default/icons/donate.svg diff --git a/resources/theme/default/icons/down.png b/src/pyminer/resources/theme/default/icons/down.png similarity index 100% rename from resources/theme/default/icons/down.png rename to src/pyminer/resources/theme/default/icons/down.png diff --git a/resources/theme/default/icons/downWard.svg b/src/pyminer/resources/theme/default/icons/downWard.svg similarity index 100% rename from resources/theme/default/icons/downWard.svg rename to src/pyminer/resources/theme/default/icons/downWard.svg diff --git a/resources/theme/default/icons/drawline3d.svg b/src/pyminer/resources/theme/default/icons/drawline3d.svg similarity index 100% rename from resources/theme/default/icons/drawline3d.svg rename to src/pyminer/resources/theme/default/icons/drawline3d.svg diff --git a/resources/theme/default/icons/drawpoint3d.svg b/src/pyminer/resources/theme/default/icons/drawpoint3d.svg similarity index 100% rename from resources/theme/default/icons/drawpoint3d.svg rename to src/pyminer/resources/theme/default/icons/drawpoint3d.svg diff --git a/resources/theme/default/icons/drawpolygon.svg b/src/pyminer/resources/theme/default/icons/drawpolygon.svg similarity index 100% rename from resources/theme/default/icons/drawpolygon.svg rename to src/pyminer/resources/theme/default/icons/drawpolygon.svg diff --git a/resources/theme/default/icons/drawpolygon3d.svg b/src/pyminer/resources/theme/default/icons/drawpolygon3d.svg similarity index 100% rename from resources/theme/default/icons/drawpolygon3d.svg rename to src/pyminer/resources/theme/default/icons/drawpolygon3d.svg diff --git a/resources/theme/default/icons/duoyuan.svg b/src/pyminer/resources/theme/default/icons/duoyuan.svg similarity index 100% rename from resources/theme/default/icons/duoyuan.svg rename to src/pyminer/resources/theme/default/icons/duoyuan.svg diff --git a/resources/theme/default/icons/earth3d.svg b/src/pyminer/resources/theme/default/icons/earth3d.svg similarity index 100% rename from resources/theme/default/icons/earth3d.svg rename to src/pyminer/resources/theme/default/icons/earth3d.svg diff --git a/resources/theme/default/icons/editConfig.svg b/src/pyminer/resources/theme/default/icons/editConfig.svg similarity index 100% rename from resources/theme/default/icons/editConfig.svg rename to src/pyminer/resources/theme/default/icons/editConfig.svg diff --git a/resources/theme/default/icons/editannotation.svg b/src/pyminer/resources/theme/default/icons/editannotation.svg similarity index 100% rename from resources/theme/default/icons/editannotation.svg rename to src/pyminer/resources/theme/default/icons/editannotation.svg diff --git a/resources/theme/default/icons/editmetadata.svg b/src/pyminer/resources/theme/default/icons/editmetadata.svg similarity index 100% rename from resources/theme/default/icons/editmetadata.svg rename to src/pyminer/resources/theme/default/icons/editmetadata.svg diff --git a/resources/theme/default/icons/endadding.svg b/src/pyminer/resources/theme/default/icons/endadding.svg similarity index 100% rename from resources/theme/default/icons/endadding.svg rename to src/pyminer/resources/theme/default/icons/endadding.svg diff --git a/resources/theme/default/icons/endfly.svg b/src/pyminer/resources/theme/default/icons/endfly.svg similarity index 100% rename from resources/theme/default/icons/endfly.svg rename to src/pyminer/resources/theme/default/icons/endfly.svg diff --git a/resources/theme/default/icons/errorInfo.svg b/src/pyminer/resources/theme/default/icons/errorInfo.svg similarity index 100% rename from resources/theme/default/icons/errorInfo.svg rename to src/pyminer/resources/theme/default/icons/errorInfo.svg diff --git a/resources/theme/default/icons/excel(1).svg b/src/pyminer/resources/theme/default/icons/excel(1).svg similarity index 100% rename from resources/theme/default/icons/excel(1).svg rename to src/pyminer/resources/theme/default/icons/excel(1).svg diff --git a/resources/theme/default/icons/excel.svg b/src/pyminer/resources/theme/default/icons/excel.svg similarity index 100% rename from resources/theme/default/icons/excel.svg rename to src/pyminer/resources/theme/default/icons/excel.svg diff --git a/resources/theme/default/icons/excel_gray.svg b/src/pyminer/resources/theme/default/icons/excel_gray.svg similarity index 100% rename from resources/theme/default/icons/excel_gray.svg rename to src/pyminer/resources/theme/default/icons/excel_gray.svg diff --git a/resources/theme/default/icons/expendDown.svg b/src/pyminer/resources/theme/default/icons/expendDown.svg similarity index 100% rename from resources/theme/default/icons/expendDown.svg rename to src/pyminer/resources/theme/default/icons/expendDown.svg diff --git a/resources/theme/default/icons/expire.svg b/src/pyminer/resources/theme/default/icons/expire.svg similarity index 100% rename from resources/theme/default/icons/expire.svg rename to src/pyminer/resources/theme/default/icons/expire.svg diff --git a/resources/theme/default/icons/fastCollect.svg b/src/pyminer/resources/theme/default/icons/fastCollect.svg similarity index 100% rename from resources/theme/default/icons/fastCollect.svg rename to src/pyminer/resources/theme/default/icons/fastCollect.svg diff --git a/resources/theme/default/icons/favorites.svg b/src/pyminer/resources/theme/default/icons/favorites.svg similarity index 100% rename from resources/theme/default/icons/favorites.svg rename to src/pyminer/resources/theme/default/icons/favorites.svg diff --git a/resources/theme/default/icons/feedback.svg b/src/pyminer/resources/theme/default/icons/feedback.svg similarity index 100% rename from resources/theme/default/icons/feedback.svg rename to src/pyminer/resources/theme/default/icons/feedback.svg diff --git a/resources/theme/default/icons/field.svg b/src/pyminer/resources/theme/default/icons/field.svg similarity index 100% rename from resources/theme/default/icons/field.svg rename to src/pyminer/resources/theme/default/icons/field.svg diff --git a/resources/theme/default/icons/file.svg b/src/pyminer/resources/theme/default/icons/file.svg similarity index 100% rename from resources/theme/default/icons/file.svg rename to src/pyminer/resources/theme/default/icons/file.svg diff --git a/resources/theme/default/icons/file_gray.svg b/src/pyminer/resources/theme/default/icons/file_gray.svg similarity index 100% rename from resources/theme/default/icons/file_gray.svg rename to src/pyminer/resources/theme/default/icons/file_gray.svg diff --git a/resources/theme/default/icons/filter.svg b/src/pyminer/resources/theme/default/icons/filter.svg similarity index 100% rename from resources/theme/default/icons/filter.svg rename to src/pyminer/resources/theme/default/icons/filter.svg diff --git a/resources/theme/default/icons/final.png b/src/pyminer/resources/theme/default/icons/final.png similarity index 100% rename from resources/theme/default/icons/final.png rename to src/pyminer/resources/theme/default/icons/final.png diff --git a/resources/theme/default/icons/find_replace.svg b/src/pyminer/resources/theme/default/icons/find_replace.svg similarity index 100% rename from resources/theme/default/icons/find_replace.svg rename to src/pyminer/resources/theme/default/icons/find_replace.svg diff --git a/resources/theme/default/icons/first.png b/src/pyminer/resources/theme/default/icons/first.png similarity index 100% rename from resources/theme/default/icons/first.png rename to src/pyminer/resources/theme/default/icons/first.png diff --git a/resources/theme/default/icons/flight.svg b/src/pyminer/resources/theme/default/icons/flight.svg similarity index 100% rename from resources/theme/default/icons/flight.svg rename to src/pyminer/resources/theme/default/icons/flight.svg diff --git a/resources/theme/default/icons/float.png b/src/pyminer/resources/theme/default/icons/float.png similarity index 100% rename from resources/theme/default/icons/float.png rename to src/pyminer/resources/theme/default/icons/float.png diff --git a/resources/theme/default/icons/float_white.png b/src/pyminer/resources/theme/default/icons/float_white.png similarity index 100% rename from resources/theme/default/icons/float_white.png rename to src/pyminer/resources/theme/default/icons/float_white.png diff --git a/resources/theme/default/icons/fly.svg b/src/pyminer/resources/theme/default/icons/fly.svg similarity index 100% rename from resources/theme/default/icons/fly.svg rename to src/pyminer/resources/theme/default/icons/fly.svg diff --git a/resources/theme/default/icons/flyaround.svg b/src/pyminer/resources/theme/default/icons/flyaround.svg similarity index 100% rename from resources/theme/default/icons/flyaround.svg rename to src/pyminer/resources/theme/default/icons/flyaround.svg diff --git a/resources/theme/default/icons/folder.svg b/src/pyminer/resources/theme/default/icons/folder.svg similarity index 100% rename from resources/theme/default/icons/folder.svg rename to src/pyminer/resources/theme/default/icons/folder.svg diff --git a/resources/theme/default/icons/folder_yellow.svg b/src/pyminer/resources/theme/default/icons/folder_yellow.svg similarity index 100% rename from resources/theme/default/icons/folder_yellow.svg rename to src/pyminer/resources/theme/default/icons/folder_yellow.svg diff --git a/resources/theme/default/icons/foundrecords.svg b/src/pyminer/resources/theme/default/icons/foundrecords.svg similarity index 100% rename from resources/theme/default/icons/foundrecords.svg rename to src/pyminer/resources/theme/default/icons/foundrecords.svg diff --git a/resources/theme/default/icons/general.svg b/src/pyminer/resources/theme/default/icons/general.svg similarity index 100% rename from resources/theme/default/icons/general.svg rename to src/pyminer/resources/theme/default/icons/general.svg diff --git a/resources/theme/default/icons/generalConfig.svg b/src/pyminer/resources/theme/default/icons/generalConfig.svg similarity index 100% rename from resources/theme/default/icons/generalConfig.svg rename to src/pyminer/resources/theme/default/icons/generalConfig.svg diff --git a/resources/theme/default/icons/geodbms.ico b/src/pyminer/resources/theme/default/icons/geodbms.ico similarity index 100% rename from resources/theme/default/icons/geodbms.ico rename to src/pyminer/resources/theme/default/icons/geodbms.ico diff --git a/resources/theme/default/icons/geomap.ico b/src/pyminer/resources/theme/default/icons/geomap.ico similarity index 100% rename from resources/theme/default/icons/geomap.ico rename to src/pyminer/resources/theme/default/icons/geomap.ico diff --git a/resources/theme/default/icons/gotoview.svg b/src/pyminer/resources/theme/default/icons/gotoview.svg similarity index 100% rename from resources/theme/default/icons/gotoview.svg rename to src/pyminer/resources/theme/default/icons/gotoview.svg diff --git a/resources/theme/default/icons/help.svg b/src/pyminer/resources/theme/default/icons/help.svg similarity index 100% rename from resources/theme/default/icons/help.svg rename to src/pyminer/resources/theme/default/icons/help.svg diff --git a/resources/theme/default/icons/help_doc.svg b/src/pyminer/resources/theme/default/icons/help_doc.svg similarity index 100% rename from resources/theme/default/icons/help_doc.svg rename to src/pyminer/resources/theme/default/icons/help_doc.svg diff --git a/resources/theme/default/icons/histogram.png b/src/pyminer/resources/theme/default/icons/histogram.png similarity index 100% rename from resources/theme/default/icons/histogram.png rename to src/pyminer/resources/theme/default/icons/histogram.png diff --git a/resources/theme/default/icons/home_site.svg b/src/pyminer/resources/theme/default/icons/home_site.svg similarity index 100% rename from resources/theme/default/icons/home_site.svg rename to src/pyminer/resources/theme/default/icons/home_site.svg diff --git a/resources/theme/default/icons/html.ico b/src/pyminer/resources/theme/default/icons/html.ico similarity index 100% rename from resources/theme/default/icons/html.ico rename to src/pyminer/resources/theme/default/icons/html.ico diff --git a/resources/theme/default/icons/html.svg b/src/pyminer/resources/theme/default/icons/html.svg similarity index 100% rename from resources/theme/default/icons/html.svg rename to src/pyminer/resources/theme/default/icons/html.svg diff --git a/resources/theme/default/icons/import.svg b/src/pyminer/resources/theme/default/icons/import.svg similarity index 100% rename from resources/theme/default/icons/import.svg rename to src/pyminer/resources/theme/default/icons/import.svg diff --git a/resources/theme/default/icons/importConfig.svg b/src/pyminer/resources/theme/default/icons/importConfig.svg similarity index 100% rename from resources/theme/default/icons/importConfig.svg rename to src/pyminer/resources/theme/default/icons/importConfig.svg diff --git a/resources/theme/default/icons/import_database.svg b/src/pyminer/resources/theme/default/icons/import_database.svg similarity index 100% rename from resources/theme/default/icons/import_database.svg rename to src/pyminer/resources/theme/default/icons/import_database.svg diff --git a/resources/theme/default/icons/indent_left.svg b/src/pyminer/resources/theme/default/icons/indent_left.svg similarity index 100% rename from resources/theme/default/icons/indent_left.svg rename to src/pyminer/resources/theme/default/icons/indent_left.svg diff --git a/resources/theme/default/icons/indent_right.svg b/src/pyminer/resources/theme/default/icons/indent_right.svg similarity index 100% rename from resources/theme/default/icons/indent_right.svg rename to src/pyminer/resources/theme/default/icons/indent_right.svg diff --git a/resources/theme/default/icons/index.svg b/src/pyminer/resources/theme/default/icons/index.svg similarity index 100% rename from resources/theme/default/icons/index.svg rename to src/pyminer/resources/theme/default/icons/index.svg diff --git a/resources/theme/default/icons/info.svg b/src/pyminer/resources/theme/default/icons/info.svg similarity index 100% rename from resources/theme/default/icons/info.svg rename to src/pyminer/resources/theme/default/icons/info.svg diff --git a/resources/theme/default/icons/install.svg b/src/pyminer/resources/theme/default/icons/install.svg similarity index 100% rename from resources/theme/default/icons/install.svg rename to src/pyminer/resources/theme/default/icons/install.svg diff --git a/resources/theme/default/icons/invisibleMap.svg b/src/pyminer/resources/theme/default/icons/invisibleMap.svg similarity index 100% rename from resources/theme/default/icons/invisibleMap.svg rename to src/pyminer/resources/theme/default/icons/invisibleMap.svg diff --git a/resources/theme/default/icons/javascript.ico b/src/pyminer/resources/theme/default/icons/javascript.ico similarity index 100% rename from resources/theme/default/icons/javascript.ico rename to src/pyminer/resources/theme/default/icons/javascript.ico diff --git a/resources/theme/default/icons/jiashe.svg b/src/pyminer/resources/theme/default/icons/jiashe.svg similarity index 100% rename from resources/theme/default/icons/jiashe.svg rename to src/pyminer/resources/theme/default/icons/jiashe.svg diff --git a/resources/theme/default/icons/join.png b/src/pyminer/resources/theme/default/icons/join.png similarity index 100% rename from resources/theme/default/icons/join.png rename to src/pyminer/resources/theme/default/icons/join.png diff --git a/resources/theme/default/icons/jump_line.svg b/src/pyminer/resources/theme/default/icons/jump_line.svg similarity index 100% rename from resources/theme/default/icons/jump_line.svg rename to src/pyminer/resources/theme/default/icons/jump_line.svg diff --git a/resources/theme/default/icons/jupyter.ico b/src/pyminer/resources/theme/default/icons/jupyter.ico similarity index 100% rename from resources/theme/default/icons/jupyter.ico rename to src/pyminer/resources/theme/default/icons/jupyter.ico diff --git a/resources/theme/default/icons/lab.svg b/src/pyminer/resources/theme/default/icons/lab.svg similarity index 100% rename from resources/theme/default/icons/lab.svg rename to src/pyminer/resources/theme/default/icons/lab.svg diff --git a/resources/theme/default/icons/labelingMultiple.svg b/src/pyminer/resources/theme/default/icons/labelingMultiple.svg similarity index 100% rename from resources/theme/default/icons/labelingMultiple.svg rename to src/pyminer/resources/theme/default/icons/labelingMultiple.svg diff --git a/resources/theme/default/icons/labelingNone.svg b/src/pyminer/resources/theme/default/icons/labelingNone.svg similarity index 100% rename from resources/theme/default/icons/labelingNone.svg rename to src/pyminer/resources/theme/default/icons/labelingNone.svg diff --git a/resources/theme/default/icons/labelingSingle.svg b/src/pyminer/resources/theme/default/icons/labelingSingle.svg similarity index 100% rename from resources/theme/default/icons/labelingSingle.svg rename to src/pyminer/resources/theme/default/icons/labelingSingle.svg diff --git a/resources/theme/default/icons/labels.svg b/src/pyminer/resources/theme/default/icons/labels.svg similarity index 100% rename from resources/theme/default/icons/labels.svg rename to src/pyminer/resources/theme/default/icons/labels.svg diff --git a/resources/theme/default/icons/layerBrush.svg b/src/pyminer/resources/theme/default/icons/layerBrush.svg similarity index 100% rename from resources/theme/default/icons/layerBrush.svg rename to src/pyminer/resources/theme/default/icons/layerBrush.svg diff --git a/resources/theme/default/icons/layerConfig.svg b/src/pyminer/resources/theme/default/icons/layerConfig.svg similarity index 100% rename from resources/theme/default/icons/layerConfig.svg rename to src/pyminer/resources/theme/default/icons/layerConfig.svg diff --git a/resources/theme/default/icons/legend.svg b/src/pyminer/resources/theme/default/icons/legend.svg similarity index 100% rename from resources/theme/default/icons/legend.svg rename to src/pyminer/resources/theme/default/icons/legend.svg diff --git a/resources/theme/default/icons/lockorthoview.svg b/src/pyminer/resources/theme/default/icons/lockorthoview.svg similarity index 100% rename from resources/theme/default/icons/lockorthoview.svg rename to src/pyminer/resources/theme/default/icons/lockorthoview.svg diff --git a/resources/theme/default/icons/lockview.svg b/src/pyminer/resources/theme/default/icons/lockview.svg similarity index 100% rename from resources/theme/default/icons/lockview.svg rename to src/pyminer/resources/theme/default/icons/lockview.svg diff --git a/resources/theme/default/icons/lost.png b/src/pyminer/resources/theme/default/icons/lost.png similarity index 100% rename from resources/theme/default/icons/lost.png rename to src/pyminer/resources/theme/default/icons/lost.png diff --git a/resources/theme/default/icons/mActionAbout.png b/src/pyminer/resources/theme/default/icons/mActionAbout.png similarity index 100% rename from resources/theme/default/icons/mActionAbout.png rename to src/pyminer/resources/theme/default/icons/mActionAbout.png diff --git a/resources/theme/default/icons/mActionAbout.svg b/src/pyminer/resources/theme/default/icons/mActionAbout.svg similarity index 100% rename from resources/theme/default/icons/mActionAbout.svg rename to src/pyminer/resources/theme/default/icons/mActionAbout.svg diff --git a/resources/theme/default/icons/mActionActiveStyle.svg b/src/pyminer/resources/theme/default/icons/mActionActiveStyle.svg similarity index 100% rename from resources/theme/default/icons/mActionActiveStyle.svg rename to src/pyminer/resources/theme/default/icons/mActionActiveStyle.svg diff --git a/resources/theme/default/icons/mActionAdd.svg b/src/pyminer/resources/theme/default/icons/mActionAdd.svg similarity index 100% rename from resources/theme/default/icons/mActionAdd.svg rename to src/pyminer/resources/theme/default/icons/mActionAdd.svg diff --git a/resources/theme/default/icons/mActionAddArrow.png b/src/pyminer/resources/theme/default/icons/mActionAddArrow.png similarity index 100% rename from resources/theme/default/icons/mActionAddArrow.png rename to src/pyminer/resources/theme/default/icons/mActionAddArrow.png diff --git a/resources/theme/default/icons/mActionAddArrow.svg b/src/pyminer/resources/theme/default/icons/mActionAddArrow.svg similarity index 100% rename from resources/theme/default/icons/mActionAddArrow.svg rename to src/pyminer/resources/theme/default/icons/mActionAddArrow.svg diff --git a/resources/theme/default/icons/mActionAddBasicCircle.svg b/src/pyminer/resources/theme/default/icons/mActionAddBasicCircle.svg similarity index 100% rename from resources/theme/default/icons/mActionAddBasicCircle.svg rename to src/pyminer/resources/theme/default/icons/mActionAddBasicCircle.svg diff --git a/resources/theme/default/icons/mActionAddBasicRectangle.svg b/src/pyminer/resources/theme/default/icons/mActionAddBasicRectangle.svg similarity index 100% rename from resources/theme/default/icons/mActionAddBasicRectangle.svg rename to src/pyminer/resources/theme/default/icons/mActionAddBasicRectangle.svg diff --git a/resources/theme/default/icons/mActionAddClassification.svg b/src/pyminer/resources/theme/default/icons/mActionAddClassification.svg similarity index 100% rename from resources/theme/default/icons/mActionAddClassification.svg rename to src/pyminer/resources/theme/default/icons/mActionAddClassification.svg diff --git a/resources/theme/default/icons/mActionAddClassificationCode.svg b/src/pyminer/resources/theme/default/icons/mActionAddClassificationCode.svg similarity index 100% rename from resources/theme/default/icons/mActionAddClassificationCode.svg rename to src/pyminer/resources/theme/default/icons/mActionAddClassificationCode.svg diff --git a/resources/theme/default/icons/mActionAddCustom.svg b/src/pyminer/resources/theme/default/icons/mActionAddCustom.svg similarity index 100% rename from resources/theme/default/icons/mActionAddCustom.svg rename to src/pyminer/resources/theme/default/icons/mActionAddCustom.svg diff --git a/resources/theme/default/icons/mActionAddDataSet.svg b/src/pyminer/resources/theme/default/icons/mActionAddDataSet.svg similarity index 100% rename from resources/theme/default/icons/mActionAddDataSet.svg rename to src/pyminer/resources/theme/default/icons/mActionAddDataSet.svg diff --git a/resources/theme/default/icons/mActionAddDataTable.svg b/src/pyminer/resources/theme/default/icons/mActionAddDataTable.svg similarity index 100% rename from resources/theme/default/icons/mActionAddDataTable.svg rename to src/pyminer/resources/theme/default/icons/mActionAddDataTable.svg diff --git a/resources/theme/default/icons/mActionAddDicItem.svg b/src/pyminer/resources/theme/default/icons/mActionAddDicItem.svg similarity index 100% rename from resources/theme/default/icons/mActionAddDicItem.svg rename to src/pyminer/resources/theme/default/icons/mActionAddDicItem.svg diff --git a/resources/theme/default/icons/mActionAddDirectory.svg b/src/pyminer/resources/theme/default/icons/mActionAddDirectory.svg similarity index 100% rename from resources/theme/default/icons/mActionAddDirectory.svg rename to src/pyminer/resources/theme/default/icons/mActionAddDirectory.svg diff --git a/resources/theme/default/icons/mActionAddEnumRange.svg b/src/pyminer/resources/theme/default/icons/mActionAddEnumRange.svg similarity index 100% rename from resources/theme/default/icons/mActionAddEnumRange.svg rename to src/pyminer/resources/theme/default/icons/mActionAddEnumRange.svg diff --git a/resources/theme/default/icons/mActionAddGroup.svg b/src/pyminer/resources/theme/default/icons/mActionAddGroup.svg similarity index 100% rename from resources/theme/default/icons/mActionAddGroup.svg rename to src/pyminer/resources/theme/default/icons/mActionAddGroup.svg diff --git a/resources/theme/default/icons/mActionAddImage.png b/src/pyminer/resources/theme/default/icons/mActionAddImage.png similarity index 100% rename from resources/theme/default/icons/mActionAddImage.png rename to src/pyminer/resources/theme/default/icons/mActionAddImage.png diff --git a/resources/theme/default/icons/mActionAddImage.svg b/src/pyminer/resources/theme/default/icons/mActionAddImage.svg similarity index 100% rename from resources/theme/default/icons/mActionAddImage.svg rename to src/pyminer/resources/theme/default/icons/mActionAddImage.svg diff --git a/resources/theme/default/icons/mActionAddLayer.svg b/src/pyminer/resources/theme/default/icons/mActionAddLayer.svg similarity index 100% rename from resources/theme/default/icons/mActionAddLayer.svg rename to src/pyminer/resources/theme/default/icons/mActionAddLayer.svg diff --git a/resources/theme/default/icons/mActionAddLegend.png b/src/pyminer/resources/theme/default/icons/mActionAddLegend.png similarity index 100% rename from resources/theme/default/icons/mActionAddLegend.png rename to src/pyminer/resources/theme/default/icons/mActionAddLegend.png diff --git a/resources/theme/default/icons/mActionAddLegend.svg b/src/pyminer/resources/theme/default/icons/mActionAddLegend.svg similarity index 100% rename from resources/theme/default/icons/mActionAddLegend.svg rename to src/pyminer/resources/theme/default/icons/mActionAddLegend.svg diff --git a/resources/theme/default/icons/mActionAddMultiPoint.svg b/src/pyminer/resources/theme/default/icons/mActionAddMultiPoint.svg similarity index 100% rename from resources/theme/default/icons/mActionAddMultiPoint.svg rename to src/pyminer/resources/theme/default/icons/mActionAddMultiPoint.svg diff --git a/resources/theme/default/icons/mActionAddPoint.svg b/src/pyminer/resources/theme/default/icons/mActionAddPoint.svg similarity index 100% rename from resources/theme/default/icons/mActionAddPoint.svg rename to src/pyminer/resources/theme/default/icons/mActionAddPoint.svg diff --git a/resources/theme/default/icons/mActionAddPolygon.svg b/src/pyminer/resources/theme/default/icons/mActionAddPolygon.svg similarity index 100% rename from resources/theme/default/icons/mActionAddPolygon.svg rename to src/pyminer/resources/theme/default/icons/mActionAddPolygon.svg diff --git a/resources/theme/default/icons/mActionAddPolyline.svg b/src/pyminer/resources/theme/default/icons/mActionAddPolyline.svg similarity index 100% rename from resources/theme/default/icons/mActionAddPolyline.svg rename to src/pyminer/resources/theme/default/icons/mActionAddPolyline.svg diff --git a/resources/theme/default/icons/mActionAddRangeRange.svg b/src/pyminer/resources/theme/default/icons/mActionAddRangeRange.svg similarity index 100% rename from resources/theme/default/icons/mActionAddRangeRange.svg rename to src/pyminer/resources/theme/default/icons/mActionAddRangeRange.svg diff --git a/resources/theme/default/icons/mActionAddResourceWizard.svg b/src/pyminer/resources/theme/default/icons/mActionAddResourceWizard.svg similarity index 100% rename from resources/theme/default/icons/mActionAddResourceWizard.svg rename to src/pyminer/resources/theme/default/icons/mActionAddResourceWizard.svg diff --git a/resources/theme/default/icons/mActionAddScaleBar.svg b/src/pyminer/resources/theme/default/icons/mActionAddScaleBar.svg similarity index 100% rename from resources/theme/default/icons/mActionAddScaleBar.svg rename to src/pyminer/resources/theme/default/icons/mActionAddScaleBar.svg diff --git a/resources/theme/default/icons/mActionAddSchemeData.svg b/src/pyminer/resources/theme/default/icons/mActionAddSchemeData.svg similarity index 100% rename from resources/theme/default/icons/mActionAddSchemeData.svg rename to src/pyminer/resources/theme/default/icons/mActionAddSchemeData.svg diff --git a/resources/theme/default/icons/mActionAddStyle.svg b/src/pyminer/resources/theme/default/icons/mActionAddStyle.svg similarity index 100% rename from resources/theme/default/icons/mActionAddStyle.svg rename to src/pyminer/resources/theme/default/icons/mActionAddStyle.svg diff --git a/resources/theme/default/icons/mActionAddText.svg b/src/pyminer/resources/theme/default/icons/mActionAddText.svg similarity index 100% rename from resources/theme/default/icons/mActionAddText.svg rename to src/pyminer/resources/theme/default/icons/mActionAddText.svg diff --git a/resources/theme/default/icons/mActionAddToCanvas.svg b/src/pyminer/resources/theme/default/icons/mActionAddToCanvas.svg similarity index 100% rename from resources/theme/default/icons/mActionAddToCanvas.svg rename to src/pyminer/resources/theme/default/icons/mActionAddToCanvas.svg diff --git a/resources/theme/default/icons/mActionAddVertexTool.svg b/src/pyminer/resources/theme/default/icons/mActionAddVertexTool.svg similarity index 100% rename from resources/theme/default/icons/mActionAddVertexTool.svg rename to src/pyminer/resources/theme/default/icons/mActionAddVertexTool.svg diff --git a/resources/theme/default/icons/mActionAdjustLayers.svg b/src/pyminer/resources/theme/default/icons/mActionAdjustLayers.svg similarity index 100% rename from resources/theme/default/icons/mActionAdjustLayers.svg rename to src/pyminer/resources/theme/default/icons/mActionAdjustLayers.svg diff --git a/resources/theme/default/icons/mActionAggregateNode.svg b/src/pyminer/resources/theme/default/icons/mActionAggregateNode.svg similarity index 100% rename from resources/theme/default/icons/mActionAggregateNode.svg rename to src/pyminer/resources/theme/default/icons/mActionAggregateNode.svg diff --git a/resources/theme/default/icons/mActionAligningToLine.svg b/src/pyminer/resources/theme/default/icons/mActionAligningToLine.svg similarity index 100% rename from resources/theme/default/icons/mActionAligningToLine.svg rename to src/pyminer/resources/theme/default/icons/mActionAligningToLine.svg diff --git a/resources/theme/default/icons/mActionAllEdits.svg b/src/pyminer/resources/theme/default/icons/mActionAllEdits.svg similarity index 100% rename from resources/theme/default/icons/mActionAllEdits.svg rename to src/pyminer/resources/theme/default/icons/mActionAllEdits.svg diff --git a/resources/theme/default/icons/mActionAnnotationImport.svg b/src/pyminer/resources/theme/default/icons/mActionAnnotationImport.svg similarity index 100% rename from resources/theme/default/icons/mActionAnnotationImport.svg rename to src/pyminer/resources/theme/default/icons/mActionAnnotationImport.svg diff --git a/resources/theme/default/icons/mActionAnyDLAnalyze.svg b/src/pyminer/resources/theme/default/icons/mActionAnyDLAnalyze.svg similarity index 100% rename from resources/theme/default/icons/mActionAnyDLAnalyze.svg rename to src/pyminer/resources/theme/default/icons/mActionAnyDLAnalyze.svg diff --git a/resources/theme/default/icons/mActionAttributeBatchTool.svg b/src/pyminer/resources/theme/default/icons/mActionAttributeBatchTool.svg similarity index 100% rename from resources/theme/default/icons/mActionAttributeBatchTool.svg rename to src/pyminer/resources/theme/default/icons/mActionAttributeBatchTool.svg diff --git a/resources/theme/default/icons/mActionAttributeBrush.svg b/src/pyminer/resources/theme/default/icons/mActionAttributeBrush.svg similarity index 100% rename from resources/theme/default/icons/mActionAttributeBrush.svg rename to src/pyminer/resources/theme/default/icons/mActionAttributeBrush.svg diff --git a/resources/theme/default/icons/mActionAttributeIndexManager.svg b/src/pyminer/resources/theme/default/icons/mActionAttributeIndexManager.svg similarity index 100% rename from resources/theme/default/icons/mActionAttributeIndexManager.svg rename to src/pyminer/resources/theme/default/icons/mActionAttributeIndexManager.svg diff --git a/resources/theme/default/icons/mActionAttributeSelect.svg b/src/pyminer/resources/theme/default/icons/mActionAttributeSelect.svg similarity index 100% rename from resources/theme/default/icons/mActionAttributeSelect.svg rename to src/pyminer/resources/theme/default/icons/mActionAttributeSelect.svg diff --git a/resources/theme/default/icons/mActionAutoChange.svg b/src/pyminer/resources/theme/default/icons/mActionAutoChange.svg similarity index 100% rename from resources/theme/default/icons/mActionAutoChange.svg rename to src/pyminer/resources/theme/default/icons/mActionAutoChange.svg diff --git a/resources/theme/default/icons/mActionAutoCutPolygon.svg b/src/pyminer/resources/theme/default/icons/mActionAutoCutPolygon.svg similarity index 100% rename from resources/theme/default/icons/mActionAutoCutPolygon.svg rename to src/pyminer/resources/theme/default/icons/mActionAutoCutPolygon.svg diff --git a/resources/theme/default/icons/mActionAutoParallelPolygon.svg b/src/pyminer/resources/theme/default/icons/mActionAutoParallelPolygon.svg similarity index 100% rename from resources/theme/default/icons/mActionAutoParallelPolygon.svg rename to src/pyminer/resources/theme/default/icons/mActionAutoParallelPolygon.svg diff --git a/resources/theme/default/icons/mActionAutoParallelPolyline.svg b/src/pyminer/resources/theme/default/icons/mActionAutoParallelPolyline.svg similarity index 100% rename from resources/theme/default/icons/mActionAutoParallelPolyline.svg rename to src/pyminer/resources/theme/default/icons/mActionAutoParallelPolyline.svg diff --git a/resources/theme/default/icons/mActionAutoProjection.svg b/src/pyminer/resources/theme/default/icons/mActionAutoProjection.svg similarity index 100% rename from resources/theme/default/icons/mActionAutoProjection.svg rename to src/pyminer/resources/theme/default/icons/mActionAutoProjection.svg diff --git a/resources/theme/default/icons/mActionAutomaticClosure.svg b/src/pyminer/resources/theme/default/icons/mActionAutomaticClosure.svg similarity index 100% rename from resources/theme/default/icons/mActionAutomaticClosure.svg rename to src/pyminer/resources/theme/default/icons/mActionAutomaticClosure.svg diff --git a/resources/theme/default/icons/mActionBackLastLevel.png b/src/pyminer/resources/theme/default/icons/mActionBackLastLevel.png similarity index 100% rename from resources/theme/default/icons/mActionBackLastLevel.png rename to src/pyminer/resources/theme/default/icons/mActionBackLastLevel.png diff --git a/resources/theme/default/icons/mActionBackupDatabase.svg b/src/pyminer/resources/theme/default/icons/mActionBackupDatabase.svg similarity index 100% rename from resources/theme/default/icons/mActionBackupDatabase.svg rename to src/pyminer/resources/theme/default/icons/mActionBackupDatabase.svg diff --git a/resources/theme/default/icons/mActionBorderPolygon.svg b/src/pyminer/resources/theme/default/icons/mActionBorderPolygon.svg similarity index 100% rename from resources/theme/default/icons/mActionBorderPolygon.svg rename to src/pyminer/resources/theme/default/icons/mActionBorderPolygon.svg diff --git a/resources/theme/default/icons/mActionBreakBySinglePoint.svg b/src/pyminer/resources/theme/default/icons/mActionBreakBySinglePoint.svg similarity index 100% rename from resources/theme/default/icons/mActionBreakBySinglePoint.svg rename to src/pyminer/resources/theme/default/icons/mActionBreakBySinglePoint.svg diff --git a/resources/theme/default/icons/mActionBreakByTwoPoints.svg b/src/pyminer/resources/theme/default/icons/mActionBreakByTwoPoints.svg similarity index 100% rename from resources/theme/default/icons/mActionBreakByTwoPoints.svg rename to src/pyminer/resources/theme/default/icons/mActionBreakByTwoPoints.svg diff --git a/resources/theme/default/icons/mActionBreakIntersectantPolyline.svg b/src/pyminer/resources/theme/default/icons/mActionBreakIntersectantPolyline.svg similarity index 100% rename from resources/theme/default/icons/mActionBreakIntersectantPolyline.svg rename to src/pyminer/resources/theme/default/icons/mActionBreakIntersectantPolyline.svg diff --git a/resources/theme/default/icons/mActionBreakWeld.svg b/src/pyminer/resources/theme/default/icons/mActionBreakWeld.svg similarity index 100% rename from resources/theme/default/icons/mActionBreakWeld.svg rename to src/pyminer/resources/theme/default/icons/mActionBreakWeld.svg diff --git a/resources/theme/default/icons/mActionBrush.svg b/src/pyminer/resources/theme/default/icons/mActionBrush.svg similarity index 100% rename from resources/theme/default/icons/mActionBrush.svg rename to src/pyminer/resources/theme/default/icons/mActionBrush.svg diff --git a/resources/theme/default/icons/mActionBufferAnalysis.svg b/src/pyminer/resources/theme/default/icons/mActionBufferAnalysis.svg similarity index 100% rename from resources/theme/default/icons/mActionBufferAnalysis.svg rename to src/pyminer/resources/theme/default/icons/mActionBufferAnalysis.svg diff --git a/resources/theme/default/icons/mActionCalculateField.svg b/src/pyminer/resources/theme/default/icons/mActionCalculateField.svg similarity index 100% rename from resources/theme/default/icons/mActionCalculateField.svg rename to src/pyminer/resources/theme/default/icons/mActionCalculateField.svg diff --git a/resources/theme/default/icons/mActionCatalogManager.svg b/src/pyminer/resources/theme/default/icons/mActionCatalogManager.svg similarity index 100% rename from resources/theme/default/icons/mActionCatalogManager.svg rename to src/pyminer/resources/theme/default/icons/mActionCatalogManager.svg diff --git a/resources/theme/default/icons/mActionChangePolylineByExitline.svg b/src/pyminer/resources/theme/default/icons/mActionChangePolylineByExitline.svg similarity index 100% rename from resources/theme/default/icons/mActionChangePolylineByExitline.svg rename to src/pyminer/resources/theme/default/icons/mActionChangePolylineByExitline.svg diff --git a/resources/theme/default/icons/mActionCheckAll.svg b/src/pyminer/resources/theme/default/icons/mActionCheckAll.svg similarity index 100% rename from resources/theme/default/icons/mActionCheckAll.svg rename to src/pyminer/resources/theme/default/icons/mActionCheckAll.svg diff --git a/resources/theme/default/icons/mActionCheckAndMaintain.svg b/src/pyminer/resources/theme/default/icons/mActionCheckAndMaintain.svg similarity index 100% rename from resources/theme/default/icons/mActionCheckAndMaintain.svg rename to src/pyminer/resources/theme/default/icons/mActionCheckAndMaintain.svg diff --git a/resources/theme/default/icons/mActionCheckNode.svg b/src/pyminer/resources/theme/default/icons/mActionCheckNode.svg similarity index 100% rename from resources/theme/default/icons/mActionCheckNode.svg rename to src/pyminer/resources/theme/default/icons/mActionCheckNode.svg diff --git a/resources/theme/default/icons/mActionCheckResult.svg b/src/pyminer/resources/theme/default/icons/mActionCheckResult.svg similarity index 100% rename from resources/theme/default/icons/mActionCheckResult.svg rename to src/pyminer/resources/theme/default/icons/mActionCheckResult.svg diff --git a/resources/theme/default/icons/mActionCircularStringCurvePoint.svg b/src/pyminer/resources/theme/default/icons/mActionCircularStringCurvePoint.svg similarity index 100% rename from resources/theme/default/icons/mActionCircularStringCurvePoint.svg rename to src/pyminer/resources/theme/default/icons/mActionCircularStringCurvePoint.svg diff --git a/resources/theme/default/icons/mActionClassification.svg b/src/pyminer/resources/theme/default/icons/mActionClassification.svg similarity index 100% rename from resources/theme/default/icons/mActionClassification.svg rename to src/pyminer/resources/theme/default/icons/mActionClassification.svg diff --git a/resources/theme/default/icons/mActionClearEdit.svg b/src/pyminer/resources/theme/default/icons/mActionClearEdit.svg similarity index 100% rename from resources/theme/default/icons/mActionClearEdit.svg rename to src/pyminer/resources/theme/default/icons/mActionClearEdit.svg diff --git a/resources/theme/default/icons/mActionClearLayer.svg b/src/pyminer/resources/theme/default/icons/mActionClearLayer.svg similarity index 100% rename from resources/theme/default/icons/mActionClearLayer.svg rename to src/pyminer/resources/theme/default/icons/mActionClearLayer.svg diff --git a/resources/theme/default/icons/mActionClearSelect.svg b/src/pyminer/resources/theme/default/icons/mActionClearSelect.svg similarity index 100% rename from resources/theme/default/icons/mActionClearSelect.svg rename to src/pyminer/resources/theme/default/icons/mActionClearSelect.svg diff --git a/resources/theme/default/icons/mActionClose.svg b/src/pyminer/resources/theme/default/icons/mActionClose.svg similarity index 100% rename from resources/theme/default/icons/mActionClose.svg rename to src/pyminer/resources/theme/default/icons/mActionClose.svg diff --git a/resources/theme/default/icons/mActionCollapse.svg b/src/pyminer/resources/theme/default/icons/mActionCollapse.svg similarity index 100% rename from resources/theme/default/icons/mActionCollapse.svg rename to src/pyminer/resources/theme/default/icons/mActionCollapse.svg diff --git a/resources/theme/default/icons/mActionCollapseTree.svg b/src/pyminer/resources/theme/default/icons/mActionCollapseTree.svg similarity index 100% rename from resources/theme/default/icons/mActionCollapseTree.svg rename to src/pyminer/resources/theme/default/icons/mActionCollapseTree.svg diff --git a/resources/theme/default/icons/mActionCommit.svg b/src/pyminer/resources/theme/default/icons/mActionCommit.svg similarity index 100% rename from resources/theme/default/icons/mActionCommit.svg rename to src/pyminer/resources/theme/default/icons/mActionCommit.svg diff --git a/resources/theme/default/icons/mActionCommonNode.svg b/src/pyminer/resources/theme/default/icons/mActionCommonNode.svg similarity index 100% rename from resources/theme/default/icons/mActionCommonNode.svg rename to src/pyminer/resources/theme/default/icons/mActionCommonNode.svg diff --git a/resources/theme/default/icons/mActionComposeExport.svg b/src/pyminer/resources/theme/default/icons/mActionComposeExport.svg similarity index 100% rename from resources/theme/default/icons/mActionComposeExport.svg rename to src/pyminer/resources/theme/default/icons/mActionComposeExport.svg diff --git a/resources/theme/default/icons/mActionConfigProperties.svg b/src/pyminer/resources/theme/default/icons/mActionConfigProperties.svg similarity index 100% rename from resources/theme/default/icons/mActionConfigProperties.svg rename to src/pyminer/resources/theme/default/icons/mActionConfigProperties.svg diff --git a/resources/theme/default/icons/mActionConnectToFolder.png b/src/pyminer/resources/theme/default/icons/mActionConnectToFolder.png similarity index 100% rename from resources/theme/default/icons/mActionConnectToFolder.png rename to src/pyminer/resources/theme/default/icons/mActionConnectToFolder.png diff --git a/resources/theme/default/icons/mActionCopyMapImage.svg b/src/pyminer/resources/theme/default/icons/mActionCopyMapImage.svg similarity index 100% rename from resources/theme/default/icons/mActionCopyMapImage.svg rename to src/pyminer/resources/theme/default/icons/mActionCopyMapImage.svg diff --git a/resources/theme/default/icons/mActionCreateDbConnection.png b/src/pyminer/resources/theme/default/icons/mActionCreateDbConnection.png similarity index 100% rename from resources/theme/default/icons/mActionCreateDbConnection.png rename to src/pyminer/resources/theme/default/icons/mActionCreateDbConnection.png diff --git a/resources/theme/default/icons/mActionCreateInterNode.svg b/src/pyminer/resources/theme/default/icons/mActionCreateInterNode.svg similarity index 100% rename from resources/theme/default/icons/mActionCreateInterNode.svg rename to src/pyminer/resources/theme/default/icons/mActionCreateInterNode.svg diff --git a/resources/theme/default/icons/mActionCreatePolygonBySnap.svg b/src/pyminer/resources/theme/default/icons/mActionCreatePolygonBySnap.svg similarity index 100% rename from resources/theme/default/icons/mActionCreatePolygonBySnap.svg rename to src/pyminer/resources/theme/default/icons/mActionCreatePolygonBySnap.svg diff --git a/resources/theme/default/icons/mActionCreatePolylineBySnap.svg b/src/pyminer/resources/theme/default/icons/mActionCreatePolylineBySnap.svg similarity index 100% rename from resources/theme/default/icons/mActionCreatePolylineBySnap.svg rename to src/pyminer/resources/theme/default/icons/mActionCreatePolylineBySnap.svg diff --git a/resources/theme/default/icons/mActionCreateProject.svg b/src/pyminer/resources/theme/default/icons/mActionCreateProject.svg similarity index 100% rename from resources/theme/default/icons/mActionCreateProject.svg rename to src/pyminer/resources/theme/default/icons/mActionCreateProject.svg diff --git a/resources/theme/default/icons/mActionCreateSpatialIndex.svg b/src/pyminer/resources/theme/default/icons/mActionCreateSpatialIndex.svg similarity index 100% rename from resources/theme/default/icons/mActionCreateSpatialIndex.svg rename to src/pyminer/resources/theme/default/icons/mActionCreateSpatialIndex.svg diff --git a/resources/theme/default/icons/mActionCurrentTask.svg b/src/pyminer/resources/theme/default/icons/mActionCurrentTask.svg similarity index 100% rename from resources/theme/default/icons/mActionCurrentTask.svg rename to src/pyminer/resources/theme/default/icons/mActionCurrentTask.svg diff --git a/resources/theme/default/icons/mActionCustom.svg b/src/pyminer/resources/theme/default/icons/mActionCustom.svg similarity index 100% rename from resources/theme/default/icons/mActionCustom.svg rename to src/pyminer/resources/theme/default/icons/mActionCustom.svg diff --git a/resources/theme/default/icons/mActionDataComparisons.svg b/src/pyminer/resources/theme/default/icons/mActionDataComparisons.svg similarity index 100% rename from resources/theme/default/icons/mActionDataComparisons.svg rename to src/pyminer/resources/theme/default/icons/mActionDataComparisons.svg diff --git a/resources/theme/default/icons/mActionDataExport.svg b/src/pyminer/resources/theme/default/icons/mActionDataExport.svg similarity index 100% rename from resources/theme/default/icons/mActionDataExport.svg rename to src/pyminer/resources/theme/default/icons/mActionDataExport.svg diff --git a/resources/theme/default/icons/mActionDataSource.svg b/src/pyminer/resources/theme/default/icons/mActionDataSource.svg similarity index 100% rename from resources/theme/default/icons/mActionDataSource.svg rename to src/pyminer/resources/theme/default/icons/mActionDataSource.svg diff --git a/resources/theme/default/icons/mActionDataSourceManager.svg b/src/pyminer/resources/theme/default/icons/mActionDataSourceManager.svg similarity index 100% rename from resources/theme/default/icons/mActionDataSourceManager.svg rename to src/pyminer/resources/theme/default/icons/mActionDataSourceManager.svg diff --git a/resources/theme/default/icons/mActionDatabase.svg b/src/pyminer/resources/theme/default/icons/mActionDatabase.svg similarity index 100% rename from resources/theme/default/icons/mActionDatabase.svg rename to src/pyminer/resources/theme/default/icons/mActionDatabase.svg diff --git a/resources/theme/default/icons/mActionDataset.svg b/src/pyminer/resources/theme/default/icons/mActionDataset.svg similarity index 100% rename from resources/theme/default/icons/mActionDataset.svg rename to src/pyminer/resources/theme/default/icons/mActionDataset.svg diff --git a/resources/theme/default/icons/mActionDeleteAttribute.svg b/src/pyminer/resources/theme/default/icons/mActionDeleteAttribute.svg similarity index 100% rename from resources/theme/default/icons/mActionDeleteAttribute.svg rename to src/pyminer/resources/theme/default/icons/mActionDeleteAttribute.svg diff --git a/resources/theme/default/icons/mActionDeleteBookmark.svg b/src/pyminer/resources/theme/default/icons/mActionDeleteBookmark.svg similarity index 100% rename from resources/theme/default/icons/mActionDeleteBookmark.svg rename to src/pyminer/resources/theme/default/icons/mActionDeleteBookmark.svg diff --git a/resources/theme/default/icons/mActionDeleteClassification.svg b/src/pyminer/resources/theme/default/icons/mActionDeleteClassification.svg similarity index 100% rename from resources/theme/default/icons/mActionDeleteClassification.svg rename to src/pyminer/resources/theme/default/icons/mActionDeleteClassification.svg diff --git a/resources/theme/default/icons/mActionDeleteClassificationCode.svg b/src/pyminer/resources/theme/default/icons/mActionDeleteClassificationCode.svg similarity index 100% rename from resources/theme/default/icons/mActionDeleteClassificationCode.svg rename to src/pyminer/resources/theme/default/icons/mActionDeleteClassificationCode.svg diff --git a/resources/theme/default/icons/mActionDeleteCustom.svg b/src/pyminer/resources/theme/default/icons/mActionDeleteCustom.svg similarity index 100% rename from resources/theme/default/icons/mActionDeleteCustom.svg rename to src/pyminer/resources/theme/default/icons/mActionDeleteCustom.svg diff --git a/resources/theme/default/icons/mActionDeleteDataSet.svg b/src/pyminer/resources/theme/default/icons/mActionDeleteDataSet.svg similarity index 100% rename from resources/theme/default/icons/mActionDeleteDataSet.svg rename to src/pyminer/resources/theme/default/icons/mActionDeleteDataSet.svg diff --git a/resources/theme/default/icons/mActionDeleteDataSpecification.svg b/src/pyminer/resources/theme/default/icons/mActionDeleteDataSpecification.svg similarity index 100% rename from resources/theme/default/icons/mActionDeleteDataSpecification.svg rename to src/pyminer/resources/theme/default/icons/mActionDeleteDataSpecification.svg diff --git a/resources/theme/default/icons/mActionDeleteDataTable.svg b/src/pyminer/resources/theme/default/icons/mActionDeleteDataTable.svg similarity index 100% rename from resources/theme/default/icons/mActionDeleteDataTable.svg rename to src/pyminer/resources/theme/default/icons/mActionDeleteDataTable.svg diff --git a/resources/theme/default/icons/mActionDeleteDicItem.svg b/src/pyminer/resources/theme/default/icons/mActionDeleteDicItem.svg similarity index 100% rename from resources/theme/default/icons/mActionDeleteDicItem.svg rename to src/pyminer/resources/theme/default/icons/mActionDeleteDicItem.svg diff --git a/resources/theme/default/icons/mActionDeleteLayer.svg b/src/pyminer/resources/theme/default/icons/mActionDeleteLayer.svg similarity index 100% rename from resources/theme/default/icons/mActionDeleteLayer.svg rename to src/pyminer/resources/theme/default/icons/mActionDeleteLayer.svg diff --git a/resources/theme/default/icons/mActionDeleteLink.svg b/src/pyminer/resources/theme/default/icons/mActionDeleteLink.svg similarity index 100% rename from resources/theme/default/icons/mActionDeleteLink.svg rename to src/pyminer/resources/theme/default/icons/mActionDeleteLink.svg diff --git a/resources/theme/default/icons/mActionDeleteRange.svg b/src/pyminer/resources/theme/default/icons/mActionDeleteRange.svg similarity index 100% rename from resources/theme/default/icons/mActionDeleteRange.svg rename to src/pyminer/resources/theme/default/icons/mActionDeleteRange.svg diff --git a/resources/theme/default/icons/mActionDeleteRevision.svg b/src/pyminer/resources/theme/default/icons/mActionDeleteRevision.svg similarity index 100% rename from resources/theme/default/icons/mActionDeleteRevision.svg rename to src/pyminer/resources/theme/default/icons/mActionDeleteRevision.svg diff --git a/resources/theme/default/icons/mActionDeleteSelected.svg b/src/pyminer/resources/theme/default/icons/mActionDeleteSelected.svg similarity index 100% rename from resources/theme/default/icons/mActionDeleteSelected.svg rename to src/pyminer/resources/theme/default/icons/mActionDeleteSelected.svg diff --git a/resources/theme/default/icons/mActionDeleteStyle.svg b/src/pyminer/resources/theme/default/icons/mActionDeleteStyle.svg similarity index 100% rename from resources/theme/default/icons/mActionDeleteStyle.svg rename to src/pyminer/resources/theme/default/icons/mActionDeleteStyle.svg diff --git a/resources/theme/default/icons/mActionDeselectAll.svg b/src/pyminer/resources/theme/default/icons/mActionDeselectAll.svg similarity index 100% rename from resources/theme/default/icons/mActionDeselectAll.svg rename to src/pyminer/resources/theme/default/icons/mActionDeselectAll.svg diff --git a/resources/theme/default/icons/mActionDiagramStatistic.svg b/src/pyminer/resources/theme/default/icons/mActionDiagramStatistic.svg similarity index 100% rename from resources/theme/default/icons/mActionDiagramStatistic.svg rename to src/pyminer/resources/theme/default/icons/mActionDiagramStatistic.svg diff --git a/resources/theme/default/icons/mActionDicManage.svg b/src/pyminer/resources/theme/default/icons/mActionDicManage.svg similarity index 100% rename from resources/theme/default/icons/mActionDicManage.svg rename to src/pyminer/resources/theme/default/icons/mActionDicManage.svg diff --git a/resources/theme/default/icons/mActionDictionary.svg b/src/pyminer/resources/theme/default/icons/mActionDictionary.svg similarity index 100% rename from resources/theme/default/icons/mActionDictionary.svg rename to src/pyminer/resources/theme/default/icons/mActionDictionary.svg diff --git a/resources/theme/default/icons/mActionDictionaryManager.svg b/src/pyminer/resources/theme/default/icons/mActionDictionaryManager.svg similarity index 100% rename from resources/theme/default/icons/mActionDictionaryManager.svg rename to src/pyminer/resources/theme/default/icons/mActionDictionaryManager.svg diff --git a/resources/theme/default/icons/mActionDirectImport.svg b/src/pyminer/resources/theme/default/icons/mActionDirectImport.svg similarity index 100% rename from resources/theme/default/icons/mActionDirectImport.svg rename to src/pyminer/resources/theme/default/icons/mActionDirectImport.svg diff --git a/resources/theme/default/icons/mActionDirectory.svg b/src/pyminer/resources/theme/default/icons/mActionDirectory.svg similarity index 100% rename from resources/theme/default/icons/mActionDirectory.svg rename to src/pyminer/resources/theme/default/icons/mActionDirectory.svg diff --git a/resources/theme/default/icons/mActionDisperseLegends.svg b/src/pyminer/resources/theme/default/icons/mActionDisperseLegends.svg similarity index 100% rename from resources/theme/default/icons/mActionDisperseLegends.svg rename to src/pyminer/resources/theme/default/icons/mActionDisperseLegends.svg diff --git a/resources/theme/default/icons/mActionDownloadData.svg b/src/pyminer/resources/theme/default/icons/mActionDownloadData.svg similarity index 100% rename from resources/theme/default/icons/mActionDownloadData.svg rename to src/pyminer/resources/theme/default/icons/mActionDownloadData.svg diff --git a/resources/theme/default/icons/mActionDraw.svg b/src/pyminer/resources/theme/default/icons/mActionDraw.svg similarity index 100% rename from resources/theme/default/icons/mActionDraw.svg rename to src/pyminer/resources/theme/default/icons/mActionDraw.svg diff --git a/resources/theme/default/icons/mActionDrawAnnotation.svg b/src/pyminer/resources/theme/default/icons/mActionDrawAnnotation.svg similarity index 100% rename from resources/theme/default/icons/mActionDrawAnnotation.svg rename to src/pyminer/resources/theme/default/icons/mActionDrawAnnotation.svg diff --git a/resources/theme/default/icons/mActionDropSpatialIndex.svg b/src/pyminer/resources/theme/default/icons/mActionDropSpatialIndex.svg similarity index 100% rename from resources/theme/default/icons/mActionDropSpatialIndex.svg rename to src/pyminer/resources/theme/default/icons/mActionDropSpatialIndex.svg diff --git a/resources/theme/default/icons/mActionEdgeTool.svg b/src/pyminer/resources/theme/default/icons/mActionEdgeTool.svg similarity index 100% rename from resources/theme/default/icons/mActionEdgeTool.svg rename to src/pyminer/resources/theme/default/icons/mActionEdgeTool.svg diff --git a/resources/theme/default/icons/mActionEditConnection.svg b/src/pyminer/resources/theme/default/icons/mActionEditConnection.svg similarity index 100% rename from resources/theme/default/icons/mActionEditConnection.svg rename to src/pyminer/resources/theme/default/icons/mActionEditConnection.svg diff --git a/resources/theme/default/icons/mActionEditCopy.svg b/src/pyminer/resources/theme/default/icons/mActionEditCopy.svg similarity index 100% rename from resources/theme/default/icons/mActionEditCopy.svg rename to src/pyminer/resources/theme/default/icons/mActionEditCopy.svg diff --git a/resources/theme/default/icons/mActionEditCut.svg b/src/pyminer/resources/theme/default/icons/mActionEditCut.svg similarity index 100% rename from resources/theme/default/icons/mActionEditCut.svg rename to src/pyminer/resources/theme/default/icons/mActionEditCut.svg diff --git a/resources/theme/default/icons/mActionEditPaste.svg b/src/pyminer/resources/theme/default/icons/mActionEditPaste.svg similarity index 100% rename from resources/theme/default/icons/mActionEditPaste.svg rename to src/pyminer/resources/theme/default/icons/mActionEditPaste.svg diff --git a/resources/theme/default/icons/mActionEditPolyline.svg b/src/pyminer/resources/theme/default/icons/mActionEditPolyline.svg similarity index 100% rename from resources/theme/default/icons/mActionEditPolyline.svg rename to src/pyminer/resources/theme/default/icons/mActionEditPolyline.svg diff --git a/resources/theme/default/icons/mActionEditSelect.svg b/src/pyminer/resources/theme/default/icons/mActionEditSelect.svg similarity index 100% rename from resources/theme/default/icons/mActionEditSelect.svg rename to src/pyminer/resources/theme/default/icons/mActionEditSelect.svg diff --git a/resources/theme/default/icons/mActionElementAlignment.svg b/src/pyminer/resources/theme/default/icons/mActionElementAlignment.svg similarity index 100% rename from resources/theme/default/icons/mActionElementAlignment.svg rename to src/pyminer/resources/theme/default/icons/mActionElementAlignment.svg diff --git a/resources/theme/default/icons/mActionElementOrder.svg b/src/pyminer/resources/theme/default/icons/mActionElementOrder.svg similarity index 100% rename from resources/theme/default/icons/mActionElementOrder.svg rename to src/pyminer/resources/theme/default/icons/mActionElementOrder.svg diff --git a/resources/theme/default/icons/mActionEmpty.svg b/src/pyminer/resources/theme/default/icons/mActionEmpty.svg similarity index 100% rename from resources/theme/default/icons/mActionEmpty.svg rename to src/pyminer/resources/theme/default/icons/mActionEmpty.svg diff --git a/resources/theme/default/icons/mActionExpandAll.svg b/src/pyminer/resources/theme/default/icons/mActionExpandAll.svg similarity index 100% rename from resources/theme/default/icons/mActionExpandAll.svg rename to src/pyminer/resources/theme/default/icons/mActionExpandAll.svg diff --git a/resources/theme/default/icons/mActionExpandTree.svg b/src/pyminer/resources/theme/default/icons/mActionExpandTree.svg similarity index 100% rename from resources/theme/default/icons/mActionExpandTree.svg rename to src/pyminer/resources/theme/default/icons/mActionExpandTree.svg diff --git a/resources/theme/default/icons/mActionExport.svg b/src/pyminer/resources/theme/default/icons/mActionExport.svg similarity index 100% rename from resources/theme/default/icons/mActionExport.svg rename to src/pyminer/resources/theme/default/icons/mActionExport.svg diff --git a/resources/theme/default/icons/mActionExportFont.svg b/src/pyminer/resources/theme/default/icons/mActionExportFont.svg similarity index 100% rename from resources/theme/default/icons/mActionExportFont.svg rename to src/pyminer/resources/theme/default/icons/mActionExportFont.svg diff --git a/resources/theme/default/icons/mActionExportGeometry.svg b/src/pyminer/resources/theme/default/icons/mActionExportGeometry.svg similarity index 100% rename from resources/theme/default/icons/mActionExportGeometry.svg rename to src/pyminer/resources/theme/default/icons/mActionExportGeometry.svg diff --git a/resources/theme/default/icons/mActionExportPDF.svg b/src/pyminer/resources/theme/default/icons/mActionExportPDF.svg similarity index 100% rename from resources/theme/default/icons/mActionExportPDF.svg rename to src/pyminer/resources/theme/default/icons/mActionExportPDF.svg diff --git a/resources/theme/default/icons/mActionExportStyle.svg b/src/pyminer/resources/theme/default/icons/mActionExportStyle.svg similarity index 100% rename from resources/theme/default/icons/mActionExportStyle.svg rename to src/pyminer/resources/theme/default/icons/mActionExportStyle.svg diff --git a/resources/theme/default/icons/mActionExtensionIntersect.svg b/src/pyminer/resources/theme/default/icons/mActionExtensionIntersect.svg similarity index 100% rename from resources/theme/default/icons/mActionExtensionIntersect.svg rename to src/pyminer/resources/theme/default/icons/mActionExtensionIntersect.svg diff --git a/resources/theme/default/icons/mActionExtensionPolyline.svg b/src/pyminer/resources/theme/default/icons/mActionExtensionPolyline.svg similarity index 100% rename from resources/theme/default/icons/mActionExtensionPolyline.svg rename to src/pyminer/resources/theme/default/icons/mActionExtensionPolyline.svg diff --git a/resources/theme/default/icons/mActionExtractFeatures.svg b/src/pyminer/resources/theme/default/icons/mActionExtractFeatures.svg similarity index 100% rename from resources/theme/default/icons/mActionExtractFeatures.svg rename to src/pyminer/resources/theme/default/icons/mActionExtractFeatures.svg diff --git a/resources/theme/default/icons/mActionFastScan.svg b/src/pyminer/resources/theme/default/icons/mActionFastScan.svg similarity index 100% rename from resources/theme/default/icons/mActionFastScan.svg rename to src/pyminer/resources/theme/default/icons/mActionFastScan.svg diff --git a/resources/theme/default/icons/mActionFeatureClass.svg b/src/pyminer/resources/theme/default/icons/mActionFeatureClass.svg similarity index 100% rename from resources/theme/default/icons/mActionFeatureClass.svg rename to src/pyminer/resources/theme/default/icons/mActionFeatureClass.svg diff --git a/resources/theme/default/icons/mActionFeatureImport.svg b/src/pyminer/resources/theme/default/icons/mActionFeatureImport.svg similarity index 100% rename from resources/theme/default/icons/mActionFeatureImport.svg rename to src/pyminer/resources/theme/default/icons/mActionFeatureImport.svg diff --git a/resources/theme/default/icons/mActionFieldAssignment.svg b/src/pyminer/resources/theme/default/icons/mActionFieldAssignment.svg similarity index 100% rename from resources/theme/default/icons/mActionFieldAssignment.svg rename to src/pyminer/resources/theme/default/icons/mActionFieldAssignment.svg diff --git a/resources/theme/default/icons/mActionFileExit.svg b/src/pyminer/resources/theme/default/icons/mActionFileExit.svg similarity index 100% rename from resources/theme/default/icons/mActionFileExit.svg rename to src/pyminer/resources/theme/default/icons/mActionFileExit.svg diff --git a/resources/theme/default/icons/mActionFileNew.svg b/src/pyminer/resources/theme/default/icons/mActionFileNew.svg similarity index 100% rename from resources/theme/default/icons/mActionFileNew.svg rename to src/pyminer/resources/theme/default/icons/mActionFileNew.svg diff --git a/resources/theme/default/icons/mActionFileOpen.svg b/src/pyminer/resources/theme/default/icons/mActionFileOpen.svg similarity index 100% rename from resources/theme/default/icons/mActionFileOpen.svg rename to src/pyminer/resources/theme/default/icons/mActionFileOpen.svg diff --git a/resources/theme/default/icons/mActionFileOpen_small.svg b/src/pyminer/resources/theme/default/icons/mActionFileOpen_small.svg similarity index 100% rename from resources/theme/default/icons/mActionFileOpen_small.svg rename to src/pyminer/resources/theme/default/icons/mActionFileOpen_small.svg diff --git a/resources/theme/default/icons/mActionFileSave.svg b/src/pyminer/resources/theme/default/icons/mActionFileSave.svg similarity index 100% rename from resources/theme/default/icons/mActionFileSave.svg rename to src/pyminer/resources/theme/default/icons/mActionFileSave.svg diff --git a/resources/theme/default/icons/mActionFileSaveAs.svg b/src/pyminer/resources/theme/default/icons/mActionFileSaveAs.svg similarity index 100% rename from resources/theme/default/icons/mActionFileSaveAs.svg rename to src/pyminer/resources/theme/default/icons/mActionFileSaveAs.svg diff --git a/resources/theme/default/icons/mActionFillHoll.svg b/src/pyminer/resources/theme/default/icons/mActionFillHoll.svg similarity index 100% rename from resources/theme/default/icons/mActionFillHoll.svg rename to src/pyminer/resources/theme/default/icons/mActionFillHoll.svg diff --git a/resources/theme/default/icons/mActionFilter2.svg b/src/pyminer/resources/theme/default/icons/mActionFilter2.svg similarity index 100% rename from resources/theme/default/icons/mActionFilter2.svg rename to src/pyminer/resources/theme/default/icons/mActionFilter2.svg diff --git a/resources/theme/default/icons/mActionFlash.svg b/src/pyminer/resources/theme/default/icons/mActionFlash.svg similarity index 100% rename from resources/theme/default/icons/mActionFlash.svg rename to src/pyminer/resources/theme/default/icons/mActionFlash.svg diff --git a/resources/theme/default/icons/mActionFoldAll.svg b/src/pyminer/resources/theme/default/icons/mActionFoldAll.svg similarity index 100% rename from resources/theme/default/icons/mActionFoldAll.svg rename to src/pyminer/resources/theme/default/icons/mActionFoldAll.svg diff --git a/resources/theme/default/icons/mActionFolder.svg b/src/pyminer/resources/theme/default/icons/mActionFolder.svg similarity index 100% rename from resources/theme/default/icons/mActionFolder.svg rename to src/pyminer/resources/theme/default/icons/mActionFolder.svg diff --git a/resources/theme/default/icons/mActionFormView.svg b/src/pyminer/resources/theme/default/icons/mActionFormView.svg similarity index 100% rename from resources/theme/default/icons/mActionFormView.svg rename to src/pyminer/resources/theme/default/icons/mActionFormView.svg diff --git a/resources/theme/default/icons/mActionFull.svg b/src/pyminer/resources/theme/default/icons/mActionFull.svg similarity index 100% rename from resources/theme/default/icons/mActionFull.svg rename to src/pyminer/resources/theme/default/icons/mActionFull.svg diff --git a/resources/theme/default/icons/mActionGJB50000FFT.svg b/src/pyminer/resources/theme/default/icons/mActionGJB50000FFT.svg similarity index 100% rename from resources/theme/default/icons/mActionGJB50000FFT.svg rename to src/pyminer/resources/theme/default/icons/mActionGJB50000FFT.svg diff --git a/resources/theme/default/icons/mActionGoto.svg b/src/pyminer/resources/theme/default/icons/mActionGoto.svg similarity index 100% rename from resources/theme/default/icons/mActionGoto.svg rename to src/pyminer/resources/theme/default/icons/mActionGoto.svg diff --git a/resources/theme/default/icons/mActionGrid.svg b/src/pyminer/resources/theme/default/icons/mActionGrid.svg similarity index 100% rename from resources/theme/default/icons/mActionGrid.svg rename to src/pyminer/resources/theme/default/icons/mActionGrid.svg diff --git a/resources/theme/default/icons/mActionGridCheck.svg b/src/pyminer/resources/theme/default/icons/mActionGridCheck.svg similarity index 100% rename from resources/theme/default/icons/mActionGridCheck.svg rename to src/pyminer/resources/theme/default/icons/mActionGridCheck.svg diff --git a/resources/theme/default/icons/mActionGroup.svg b/src/pyminer/resources/theme/default/icons/mActionGroup.svg similarity index 100% rename from resources/theme/default/icons/mActionGroup.svg rename to src/pyminer/resources/theme/default/icons/mActionGroup.svg diff --git a/resources/theme/default/icons/mActionGroupLayer.svg b/src/pyminer/resources/theme/default/icons/mActionGroupLayer.svg similarity index 100% rename from resources/theme/default/icons/mActionGroupLayer.svg rename to src/pyminer/resources/theme/default/icons/mActionGroupLayer.svg diff --git a/resources/theme/default/icons/mActionGroupLine.svg b/src/pyminer/resources/theme/default/icons/mActionGroupLine.svg similarity index 100% rename from resources/theme/default/icons/mActionGroupLine.svg rename to src/pyminer/resources/theme/default/icons/mActionGroupLine.svg diff --git a/resources/theme/default/icons/mActionHelpContents.svg b/src/pyminer/resources/theme/default/icons/mActionHelpContents.svg similarity index 100% rename from resources/theme/default/icons/mActionHelpContents.svg rename to src/pyminer/resources/theme/default/icons/mActionHelpContents.svg diff --git a/resources/theme/default/icons/mActionHideAllLayers.svg b/src/pyminer/resources/theme/default/icons/mActionHideAllLayers.svg similarity index 100% rename from resources/theme/default/icons/mActionHideAllLayers.svg rename to src/pyminer/resources/theme/default/icons/mActionHideAllLayers.svg diff --git a/resources/theme/default/icons/mActionHideResults.svg b/src/pyminer/resources/theme/default/icons/mActionHideResults.svg similarity index 100% rename from resources/theme/default/icons/mActionHideResults.svg rename to src/pyminer/resources/theme/default/icons/mActionHideResults.svg diff --git a/resources/theme/default/icons/mActionHideSelectedLayers.svg b/src/pyminer/resources/theme/default/icons/mActionHideSelectedLayers.svg similarity index 100% rename from resources/theme/default/icons/mActionHideSelectedLayers.svg rename to src/pyminer/resources/theme/default/icons/mActionHideSelectedLayers.svg diff --git a/resources/theme/default/icons/mActionHidenFromBrowser.svg b/src/pyminer/resources/theme/default/icons/mActionHidenFromBrowser.svg similarity index 100% rename from resources/theme/default/icons/mActionHidenFromBrowser.svg rename to src/pyminer/resources/theme/default/icons/mActionHidenFromBrowser.svg diff --git a/resources/theme/default/icons/mActionIdentify.svg b/src/pyminer/resources/theme/default/icons/mActionIdentify.svg similarity index 100% rename from resources/theme/default/icons/mActionIdentify.svg rename to src/pyminer/resources/theme/default/icons/mActionIdentify.svg diff --git a/resources/theme/default/icons/mActionImport.svg b/src/pyminer/resources/theme/default/icons/mActionImport.svg similarity index 100% rename from resources/theme/default/icons/mActionImport.svg rename to src/pyminer/resources/theme/default/icons/mActionImport.svg diff --git a/resources/theme/default/icons/mActionImportGeometry.svg b/src/pyminer/resources/theme/default/icons/mActionImportGeometry.svg similarity index 100% rename from resources/theme/default/icons/mActionImportGeometry.svg rename to src/pyminer/resources/theme/default/icons/mActionImportGeometry.svg diff --git a/resources/theme/default/icons/mActionInspect.svg b/src/pyminer/resources/theme/default/icons/mActionInspect.svg similarity index 100% rename from resources/theme/default/icons/mActionInspect.svg rename to src/pyminer/resources/theme/default/icons/mActionInspect.svg diff --git a/resources/theme/default/icons/mActionInverseCheck.svg b/src/pyminer/resources/theme/default/icons/mActionInverseCheck.svg similarity index 100% rename from resources/theme/default/icons/mActionInverseCheck.svg rename to src/pyminer/resources/theme/default/icons/mActionInverseCheck.svg diff --git a/resources/theme/default/icons/mActionInvertSelect.svg b/src/pyminer/resources/theme/default/icons/mActionInvertSelect.svg similarity index 100% rename from resources/theme/default/icons/mActionInvertSelect.svg rename to src/pyminer/resources/theme/default/icons/mActionInvertSelect.svg diff --git a/resources/theme/default/icons/mActionInvertSelectedLayers.svg b/src/pyminer/resources/theme/default/icons/mActionInvertSelectedLayers.svg similarity index 100% rename from resources/theme/default/icons/mActionInvertSelectedLayers.svg rename to src/pyminer/resources/theme/default/icons/mActionInvertSelectedLayers.svg diff --git a/resources/theme/default/icons/mActionInvertSelection.svg b/src/pyminer/resources/theme/default/icons/mActionInvertSelection.svg similarity index 100% rename from resources/theme/default/icons/mActionInvertSelection.svg rename to src/pyminer/resources/theme/default/icons/mActionInvertSelection.svg diff --git a/resources/theme/default/icons/mActionLabelManager.svg b/src/pyminer/resources/theme/default/icons/mActionLabelManager.svg similarity index 100% rename from resources/theme/default/icons/mActionLabelManager.svg rename to src/pyminer/resources/theme/default/icons/mActionLabelManager.svg diff --git a/resources/theme/default/icons/mActionLayer.svg b/src/pyminer/resources/theme/default/icons/mActionLayer.svg similarity index 100% rename from resources/theme/default/icons/mActionLayer.svg rename to src/pyminer/resources/theme/default/icons/mActionLayer.svg diff --git a/resources/theme/default/icons/mActionLayerClassification.svg b/src/pyminer/resources/theme/default/icons/mActionLayerClassification.svg similarity index 100% rename from resources/theme/default/icons/mActionLayerClassification.svg rename to src/pyminer/resources/theme/default/icons/mActionLayerClassification.svg diff --git a/resources/theme/default/icons/mActionLayerManager.svg b/src/pyminer/resources/theme/default/icons/mActionLayerManager.svg similarity index 100% rename from resources/theme/default/icons/mActionLayerManager.svg rename to src/pyminer/resources/theme/default/icons/mActionLayerManager.svg diff --git a/resources/theme/default/icons/mActionLayerSaveAs.svg b/src/pyminer/resources/theme/default/icons/mActionLayerSaveAs.svg similarity index 100% rename from resources/theme/default/icons/mActionLayerSaveAs.svg rename to src/pyminer/resources/theme/default/icons/mActionLayerSaveAs.svg diff --git a/resources/theme/default/icons/mActionLayerSaveAsFile.svg b/src/pyminer/resources/theme/default/icons/mActionLayerSaveAsFile.svg similarity index 100% rename from resources/theme/default/icons/mActionLayerSaveAsFile.svg rename to src/pyminer/resources/theme/default/icons/mActionLayerSaveAsFile.svg diff --git a/resources/theme/default/icons/mActionLayerTreeView.svg b/src/pyminer/resources/theme/default/icons/mActionLayerTreeView.svg similarity index 100% rename from resources/theme/default/icons/mActionLayerTreeView.svg rename to src/pyminer/resources/theme/default/icons/mActionLayerTreeView.svg diff --git a/resources/theme/default/icons/mActionLayersOverview.svg b/src/pyminer/resources/theme/default/icons/mActionLayersOverview.svg similarity index 100% rename from resources/theme/default/icons/mActionLayersOverview.svg rename to src/pyminer/resources/theme/default/icons/mActionLayersOverview.svg diff --git a/resources/theme/default/icons/mActionLayout.svg b/src/pyminer/resources/theme/default/icons/mActionLayout.svg similarity index 100% rename from resources/theme/default/icons/mActionLayout.svg rename to src/pyminer/resources/theme/default/icons/mActionLayout.svg diff --git a/resources/theme/default/icons/mActionLayoutManager.svg b/src/pyminer/resources/theme/default/icons/mActionLayoutManager.svg similarity index 100% rename from resources/theme/default/icons/mActionLayoutManager.svg rename to src/pyminer/resources/theme/default/icons/mActionLayoutManager.svg diff --git a/resources/theme/default/icons/mActionLoadData.svg b/src/pyminer/resources/theme/default/icons/mActionLoadData.svg similarity index 100% rename from resources/theme/default/icons/mActionLoadData.svg rename to src/pyminer/resources/theme/default/icons/mActionLoadData.svg diff --git a/resources/theme/default/icons/mActionLoadLayerFile.svg b/src/pyminer/resources/theme/default/icons/mActionLoadLayerFile.svg similarity index 100% rename from resources/theme/default/icons/mActionLoadLayerFile.svg rename to src/pyminer/resources/theme/default/icons/mActionLoadLayerFile.svg diff --git a/resources/theme/default/icons/mActionLoadProjects.svg b/src/pyminer/resources/theme/default/icons/mActionLoadProjects.svg similarity index 100% rename from resources/theme/default/icons/mActionLoadProjects.svg rename to src/pyminer/resources/theme/default/icons/mActionLoadProjects.svg diff --git a/resources/theme/default/icons/mActionLoadRevision.svg b/src/pyminer/resources/theme/default/icons/mActionLoadRevision.svg similarity index 100% rename from resources/theme/default/icons/mActionLoadRevision.svg rename to src/pyminer/resources/theme/default/icons/mActionLoadRevision.svg diff --git a/resources/theme/default/icons/mActionLocate.svg b/src/pyminer/resources/theme/default/icons/mActionLocate.svg similarity index 100% rename from resources/theme/default/icons/mActionLocate.svg rename to src/pyminer/resources/theme/default/icons/mActionLocate.svg diff --git a/resources/theme/default/icons/mActionLock.svg b/src/pyminer/resources/theme/default/icons/mActionLock.svg similarity index 100% rename from resources/theme/default/icons/mActionLock.svg rename to src/pyminer/resources/theme/default/icons/mActionLock.svg diff --git a/resources/theme/default/icons/mActionLog.svg b/src/pyminer/resources/theme/default/icons/mActionLog.svg similarity index 100% rename from resources/theme/default/icons/mActionLog.svg rename to src/pyminer/resources/theme/default/icons/mActionLog.svg diff --git a/resources/theme/default/icons/mActionMaintain.svg b/src/pyminer/resources/theme/default/icons/mActionMaintain.svg similarity index 100% rename from resources/theme/default/icons/mActionMaintain.svg rename to src/pyminer/resources/theme/default/icons/mActionMaintain.svg diff --git a/resources/theme/default/icons/mActionMaintainBSM.svg b/src/pyminer/resources/theme/default/icons/mActionMaintainBSM.svg similarity index 100% rename from resources/theme/default/icons/mActionMaintainBSM.svg rename to src/pyminer/resources/theme/default/icons/mActionMaintainBSM.svg diff --git a/resources/theme/default/icons/mActionMapStyleManage.svg b/src/pyminer/resources/theme/default/icons/mActionMapStyleManage.svg similarity index 100% rename from resources/theme/default/icons/mActionMapStyleManage.svg rename to src/pyminer/resources/theme/default/icons/mActionMapStyleManage.svg diff --git a/resources/theme/default/icons/mActionMapsheetManage.svg b/src/pyminer/resources/theme/default/icons/mActionMapsheetManage.svg similarity index 100% rename from resources/theme/default/icons/mActionMapsheetManage.svg rename to src/pyminer/resources/theme/default/icons/mActionMapsheetManage.svg diff --git a/resources/theme/default/icons/mActionMapsheetNode.svg b/src/pyminer/resources/theme/default/icons/mActionMapsheetNode.svg similarity index 100% rename from resources/theme/default/icons/mActionMapsheetNode.svg rename to src/pyminer/resources/theme/default/icons/mActionMapsheetNode.svg diff --git a/resources/theme/default/icons/mActionMeasure.svg b/src/pyminer/resources/theme/default/icons/mActionMeasure.svg similarity index 100% rename from resources/theme/default/icons/mActionMeasure.svg rename to src/pyminer/resources/theme/default/icons/mActionMeasure.svg diff --git a/resources/theme/default/icons/mActionMeasureAngle.svg b/src/pyminer/resources/theme/default/icons/mActionMeasureAngle.svg similarity index 100% rename from resources/theme/default/icons/mActionMeasureAngle.svg rename to src/pyminer/resources/theme/default/icons/mActionMeasureAngle.svg diff --git a/resources/theme/default/icons/mActionMeasureArea.svg b/src/pyminer/resources/theme/default/icons/mActionMeasureArea.svg similarity index 100% rename from resources/theme/default/icons/mActionMeasureArea.svg rename to src/pyminer/resources/theme/default/icons/mActionMeasureArea.svg diff --git a/resources/theme/default/icons/mActionMergeFeatures.svg b/src/pyminer/resources/theme/default/icons/mActionMergeFeatures.svg similarity index 100% rename from resources/theme/default/icons/mActionMergeFeatures.svg rename to src/pyminer/resources/theme/default/icons/mActionMergeFeatures.svg diff --git a/resources/theme/default/icons/mActionMiddleLine.svg b/src/pyminer/resources/theme/default/icons/mActionMiddleLine.svg similarity index 100% rename from resources/theme/default/icons/mActionMiddleLine.svg rename to src/pyminer/resources/theme/default/icons/mActionMiddleLine.svg diff --git a/resources/theme/default/icons/mActionMirrorTool.svg b/src/pyminer/resources/theme/default/icons/mActionMirrorTool.svg similarity index 100% rename from resources/theme/default/icons/mActionMirrorTool.svg rename to src/pyminer/resources/theme/default/icons/mActionMirrorTool.svg diff --git a/resources/theme/default/icons/mActionModifyElements.svg b/src/pyminer/resources/theme/default/icons/mActionModifyElements.svg similarity index 100% rename from resources/theme/default/icons/mActionModifyElements.svg rename to src/pyminer/resources/theme/default/icons/mActionModifyElements.svg diff --git a/resources/theme/default/icons/mActionMosaic.svg b/src/pyminer/resources/theme/default/icons/mActionMosaic.svg similarity index 100% rename from resources/theme/default/icons/mActionMosaic.svg rename to src/pyminer/resources/theme/default/icons/mActionMosaic.svg diff --git a/resources/theme/default/icons/mActionMoveDown.svg b/src/pyminer/resources/theme/default/icons/mActionMoveDown.svg similarity index 100% rename from resources/theme/default/icons/mActionMoveDown.svg rename to src/pyminer/resources/theme/default/icons/mActionMoveDown.svg diff --git a/resources/theme/default/icons/mActionMoveElementBottom.svg b/src/pyminer/resources/theme/default/icons/mActionMoveElementBottom.svg similarity index 100% rename from resources/theme/default/icons/mActionMoveElementBottom.svg rename to src/pyminer/resources/theme/default/icons/mActionMoveElementBottom.svg diff --git a/resources/theme/default/icons/mActionMoveElementDown.svg b/src/pyminer/resources/theme/default/icons/mActionMoveElementDown.svg similarity index 100% rename from resources/theme/default/icons/mActionMoveElementDown.svg rename to src/pyminer/resources/theme/default/icons/mActionMoveElementDown.svg diff --git a/resources/theme/default/icons/mActionMoveElementTop.svg b/src/pyminer/resources/theme/default/icons/mActionMoveElementTop.svg similarity index 100% rename from resources/theme/default/icons/mActionMoveElementTop.svg rename to src/pyminer/resources/theme/default/icons/mActionMoveElementTop.svg diff --git a/resources/theme/default/icons/mActionMoveElementUp.svg b/src/pyminer/resources/theme/default/icons/mActionMoveElementUp.svg similarity index 100% rename from resources/theme/default/icons/mActionMoveElementUp.svg rename to src/pyminer/resources/theme/default/icons/mActionMoveElementUp.svg diff --git a/resources/theme/default/icons/mActionMoveFeature.svg b/src/pyminer/resources/theme/default/icons/mActionMoveFeature.svg similarity index 100% rename from resources/theme/default/icons/mActionMoveFeature.svg rename to src/pyminer/resources/theme/default/icons/mActionMoveFeature.svg diff --git a/resources/theme/default/icons/mActionMoveUp.svg b/src/pyminer/resources/theme/default/icons/mActionMoveUp.svg similarity index 100% rename from resources/theme/default/icons/mActionMoveUp.svg rename to src/pyminer/resources/theme/default/icons/mActionMoveUp.svg diff --git a/resources/theme/default/icons/mActionMoveVertexTool.svg b/src/pyminer/resources/theme/default/icons/mActionMoveVertexTool.svg similarity index 100% rename from resources/theme/default/icons/mActionMoveVertexTool.svg rename to src/pyminer/resources/theme/default/icons/mActionMoveVertexTool.svg diff --git a/resources/theme/default/icons/mActionMultiEdit.svg b/src/pyminer/resources/theme/default/icons/mActionMultiEdit.svg similarity index 100% rename from resources/theme/default/icons/mActionMultiEdit.svg rename to src/pyminer/resources/theme/default/icons/mActionMultiEdit.svg diff --git a/resources/theme/default/icons/mActionNetworkStorage.svg b/src/pyminer/resources/theme/default/icons/mActionNetworkStorage.svg similarity index 100% rename from resources/theme/default/icons/mActionNetworkStorage.svg rename to src/pyminer/resources/theme/default/icons/mActionNetworkStorage.svg diff --git a/resources/theme/default/icons/mActionNew.svg b/src/pyminer/resources/theme/default/icons/mActionNew.svg similarity index 100% rename from resources/theme/default/icons/mActionNew.svg rename to src/pyminer/resources/theme/default/icons/mActionNew.svg diff --git a/resources/theme/default/icons/mActionNewAttribute.svg b/src/pyminer/resources/theme/default/icons/mActionNewAttribute.svg similarity index 100% rename from resources/theme/default/icons/mActionNewAttribute.svg rename to src/pyminer/resources/theme/default/icons/mActionNewAttribute.svg diff --git a/resources/theme/default/icons/mActionNewBookmark.svg b/src/pyminer/resources/theme/default/icons/mActionNewBookmark.svg similarity index 100% rename from resources/theme/default/icons/mActionNewBookmark.svg rename to src/pyminer/resources/theme/default/icons/mActionNewBookmark.svg diff --git a/resources/theme/default/icons/mActionNewConn.svg b/src/pyminer/resources/theme/default/icons/mActionNewConn.svg similarity index 100% rename from resources/theme/default/icons/mActionNewConn.svg rename to src/pyminer/resources/theme/default/icons/mActionNewConn.svg diff --git a/resources/theme/default/icons/mActionNewDataSpecification.svg b/src/pyminer/resources/theme/default/icons/mActionNewDataSpecification.svg similarity index 100% rename from resources/theme/default/icons/mActionNewDataSpecification.svg rename to src/pyminer/resources/theme/default/icons/mActionNewDataSpecification.svg diff --git a/resources/theme/default/icons/mActionNewFileGdb.svg b/src/pyminer/resources/theme/default/icons/mActionNewFileGdb.svg similarity index 100% rename from resources/theme/default/icons/mActionNewFileGdb.svg rename to src/pyminer/resources/theme/default/icons/mActionNewFileGdb.svg diff --git a/resources/theme/default/icons/mActionNewFolder.svg b/src/pyminer/resources/theme/default/icons/mActionNewFolder.svg similarity index 100% rename from resources/theme/default/icons/mActionNewFolder.svg rename to src/pyminer/resources/theme/default/icons/mActionNewFolder.svg diff --git a/resources/theme/default/icons/mActionNewMapElement.svg b/src/pyminer/resources/theme/default/icons/mActionNewMapElement.svg similarity index 100% rename from resources/theme/default/icons/mActionNewMapElement.svg rename to src/pyminer/resources/theme/default/icons/mActionNewMapElement.svg diff --git a/resources/theme/default/icons/mActionNewPKG.svg b/src/pyminer/resources/theme/default/icons/mActionNewPKG.svg similarity index 100% rename from resources/theme/default/icons/mActionNewPKG.svg rename to src/pyminer/resources/theme/default/icons/mActionNewPKG.svg diff --git a/resources/theme/default/icons/mActionNewSchemeData.svg b/src/pyminer/resources/theme/default/icons/mActionNewSchemeData.svg similarity index 100% rename from resources/theme/default/icons/mActionNewSchemeData.svg rename to src/pyminer/resources/theme/default/icons/mActionNewSchemeData.svg diff --git a/resources/theme/default/icons/mActionNewTableRow.svg b/src/pyminer/resources/theme/default/icons/mActionNewTableRow.svg similarity index 100% rename from resources/theme/default/icons/mActionNewTableRow.svg rename to src/pyminer/resources/theme/default/icons/mActionNewTableRow.svg diff --git a/resources/theme/default/icons/mActionNewTask.svg b/src/pyminer/resources/theme/default/icons/mActionNewTask.svg similarity index 100% rename from resources/theme/default/icons/mActionNewTask.svg rename to src/pyminer/resources/theme/default/icons/mActionNewTask.svg diff --git a/resources/theme/default/icons/mActionNewTileClass.svg b/src/pyminer/resources/theme/default/icons/mActionNewTileClass.svg similarity index 100% rename from resources/theme/default/icons/mActionNewTileClass.svg rename to src/pyminer/resources/theme/default/icons/mActionNewTileClass.svg diff --git a/resources/theme/default/icons/mActionNodeDiluting.svg b/src/pyminer/resources/theme/default/icons/mActionNodeDiluting.svg similarity index 100% rename from resources/theme/default/icons/mActionNodeDiluting.svg rename to src/pyminer/resources/theme/default/icons/mActionNodeDiluting.svg diff --git a/resources/theme/default/icons/mActionOpenData.svg b/src/pyminer/resources/theme/default/icons/mActionOpenData.svg similarity index 100% rename from resources/theme/default/icons/mActionOpenData.svg rename to src/pyminer/resources/theme/default/icons/mActionOpenData.svg diff --git a/resources/theme/default/icons/mActionOpenDirectory.svg b/src/pyminer/resources/theme/default/icons/mActionOpenDirectory.svg similarity index 100% rename from resources/theme/default/icons/mActionOpenDirectory.svg rename to src/pyminer/resources/theme/default/icons/mActionOpenDirectory.svg diff --git a/resources/theme/default/icons/mActionOpenJS.svg b/src/pyminer/resources/theme/default/icons/mActionOpenJS.svg similarity index 100% rename from resources/theme/default/icons/mActionOpenJS.svg rename to src/pyminer/resources/theme/default/icons/mActionOpenJS.svg diff --git a/resources/theme/default/icons/mActionOpenLayout.svg b/src/pyminer/resources/theme/default/icons/mActionOpenLayout.svg similarity index 100% rename from resources/theme/default/icons/mActionOpenLayout.svg rename to src/pyminer/resources/theme/default/icons/mActionOpenLayout.svg diff --git a/resources/theme/default/icons/mActionOpenScheme.svg b/src/pyminer/resources/theme/default/icons/mActionOpenScheme.svg similarity index 100% rename from resources/theme/default/icons/mActionOpenScheme.svg rename to src/pyminer/resources/theme/default/icons/mActionOpenScheme.svg diff --git a/resources/theme/default/icons/mActionOpenTable.svg b/src/pyminer/resources/theme/default/icons/mActionOpenTable.svg similarity index 100% rename from resources/theme/default/icons/mActionOpenTable.svg rename to src/pyminer/resources/theme/default/icons/mActionOpenTable.svg diff --git a/resources/theme/default/icons/mActionOptions.svg b/src/pyminer/resources/theme/default/icons/mActionOptions.svg similarity index 100% rename from resources/theme/default/icons/mActionOptions.svg rename to src/pyminer/resources/theme/default/icons/mActionOptions.svg diff --git a/resources/theme/default/icons/mActionOraganizationManager.svg b/src/pyminer/resources/theme/default/icons/mActionOraganizationManager.svg similarity index 100% rename from resources/theme/default/icons/mActionOraganizationManager.svg rename to src/pyminer/resources/theme/default/icons/mActionOraganizationManager.svg diff --git a/resources/theme/default/icons/mActionOverView.svg b/src/pyminer/resources/theme/default/icons/mActionOverView.svg similarity index 100% rename from resources/theme/default/icons/mActionOverView.svg rename to src/pyminer/resources/theme/default/icons/mActionOverView.svg diff --git a/resources/theme/default/icons/mActionPan.svg b/src/pyminer/resources/theme/default/icons/mActionPan.svg similarity index 100% rename from resources/theme/default/icons/mActionPan.svg rename to src/pyminer/resources/theme/default/icons/mActionPan.svg diff --git a/resources/theme/default/icons/mActionPanToSelected.svg b/src/pyminer/resources/theme/default/icons/mActionPanToSelected.svg similarity index 100% rename from resources/theme/default/icons/mActionPanToSelected.svg rename to src/pyminer/resources/theme/default/icons/mActionPanToSelected.svg diff --git a/resources/theme/default/icons/mActionParamSetting.svg b/src/pyminer/resources/theme/default/icons/mActionParamSetting.svg similarity index 100% rename from resources/theme/default/icons/mActionParamSetting.svg rename to src/pyminer/resources/theme/default/icons/mActionParamSetting.svg diff --git a/resources/theme/default/icons/mActionPolygonIncise.svg b/src/pyminer/resources/theme/default/icons/mActionPolygonIncise.svg similarity index 100% rename from resources/theme/default/icons/mActionPolygonIncise.svg rename to src/pyminer/resources/theme/default/icons/mActionPolygonIncise.svg diff --git a/resources/theme/default/icons/mActionPolygonInterattraction.svg b/src/pyminer/resources/theme/default/icons/mActionPolygonInterattraction.svg similarity index 100% rename from resources/theme/default/icons/mActionPolygonInterattraction.svg rename to src/pyminer/resources/theme/default/icons/mActionPolygonInterattraction.svg diff --git a/resources/theme/default/icons/mActionPolygonOverlay.svg b/src/pyminer/resources/theme/default/icons/mActionPolygonOverlay.svg similarity index 100% rename from resources/theme/default/icons/mActionPolygonOverlay.svg rename to src/pyminer/resources/theme/default/icons/mActionPolygonOverlay.svg diff --git a/resources/theme/default/icons/mActionPolygonToPolyline.svg b/src/pyminer/resources/theme/default/icons/mActionPolygonToPolyline.svg similarity index 100% rename from resources/theme/default/icons/mActionPolygonToPolyline.svg rename to src/pyminer/resources/theme/default/icons/mActionPolygonToPolyline.svg diff --git a/resources/theme/default/icons/mActionPolylineToPolygon.svg b/src/pyminer/resources/theme/default/icons/mActionPolylineToPolygon.svg similarity index 100% rename from resources/theme/default/icons/mActionPolylineToPolygon.svg rename to src/pyminer/resources/theme/default/icons/mActionPolylineToPolygon.svg diff --git a/resources/theme/default/icons/mActionPreprocessingScheme.svg b/src/pyminer/resources/theme/default/icons/mActionPreprocessingScheme.svg similarity index 100% rename from resources/theme/default/icons/mActionPreprocessingScheme.svg rename to src/pyminer/resources/theme/default/icons/mActionPreprocessingScheme.svg diff --git a/resources/theme/default/icons/mActionPreprovessingTB.svg b/src/pyminer/resources/theme/default/icons/mActionPreprovessingTB.svg similarity index 100% rename from resources/theme/default/icons/mActionPreprovessingTB.svg rename to src/pyminer/resources/theme/default/icons/mActionPreprovessingTB.svg diff --git a/resources/theme/default/icons/mActionPrint.svg b/src/pyminer/resources/theme/default/icons/mActionPrint.svg similarity index 100% rename from resources/theme/default/icons/mActionPrint.svg rename to src/pyminer/resources/theme/default/icons/mActionPrint.svg diff --git a/resources/theme/default/icons/mActionPrivilegeManager.svg b/src/pyminer/resources/theme/default/icons/mActionPrivilegeManager.svg similarity index 100% rename from resources/theme/default/icons/mActionPrivilegeManager.svg rename to src/pyminer/resources/theme/default/icons/mActionPrivilegeManager.svg diff --git a/resources/theme/default/icons/mActionProperties.svg b/src/pyminer/resources/theme/default/icons/mActionProperties.svg similarity index 100% rename from resources/theme/default/icons/mActionProperties.svg rename to src/pyminer/resources/theme/default/icons/mActionProperties.svg diff --git a/resources/theme/default/icons/mActionPropertiesWidget.svg b/src/pyminer/resources/theme/default/icons/mActionPropertiesWidget.svg similarity index 100% rename from resources/theme/default/icons/mActionPropertiesWidget.svg rename to src/pyminer/resources/theme/default/icons/mActionPropertiesWidget.svg diff --git a/resources/theme/default/icons/mActionProperty.svg b/src/pyminer/resources/theme/default/icons/mActionProperty.svg similarity index 100% rename from resources/theme/default/icons/mActionProperty.svg rename to src/pyminer/resources/theme/default/icons/mActionProperty.svg diff --git a/resources/theme/default/icons/mActionQgsAddView.svg b/src/pyminer/resources/theme/default/icons/mActionQgsAddView.svg similarity index 100% rename from resources/theme/default/icons/mActionQgsAddView.svg rename to src/pyminer/resources/theme/default/icons/mActionQgsAddView.svg diff --git a/resources/theme/default/icons/mActionQueryByLine.svg b/src/pyminer/resources/theme/default/icons/mActionQueryByLine.svg similarity index 100% rename from resources/theme/default/icons/mActionQueryByLine.svg rename to src/pyminer/resources/theme/default/icons/mActionQueryByLine.svg diff --git a/resources/theme/default/icons/mActionQueryByPoint.svg b/src/pyminer/resources/theme/default/icons/mActionQueryByPoint.svg similarity index 100% rename from resources/theme/default/icons/mActionQueryByPoint.svg rename to src/pyminer/resources/theme/default/icons/mActionQueryByPoint.svg diff --git a/resources/theme/default/icons/mActionQueryByPolygon.svg b/src/pyminer/resources/theme/default/icons/mActionQueryByPolygon.svg similarity index 100% rename from resources/theme/default/icons/mActionQueryByPolygon.svg rename to src/pyminer/resources/theme/default/icons/mActionQueryByPolygon.svg diff --git a/resources/theme/default/icons/mActionQueryRoot.svg b/src/pyminer/resources/theme/default/icons/mActionQueryRoot.svg similarity index 100% rename from resources/theme/default/icons/mActionQueryRoot.svg rename to src/pyminer/resources/theme/default/icons/mActionQueryRoot.svg diff --git a/resources/theme/default/icons/mActionRasterImport.svg b/src/pyminer/resources/theme/default/icons/mActionRasterImport.svg similarity index 100% rename from resources/theme/default/icons/mActionRasterImport.svg rename to src/pyminer/resources/theme/default/icons/mActionRasterImport.svg diff --git a/resources/theme/default/icons/mActionReName.svg b/src/pyminer/resources/theme/default/icons/mActionReName.svg similarity index 100% rename from resources/theme/default/icons/mActionReName.svg rename to src/pyminer/resources/theme/default/icons/mActionReName.svg diff --git a/resources/theme/default/icons/mActionRedo.svg b/src/pyminer/resources/theme/default/icons/mActionRedo.svg similarity index 100% rename from resources/theme/default/icons/mActionRedo.svg rename to src/pyminer/resources/theme/default/icons/mActionRedo.svg diff --git a/resources/theme/default/icons/mActionRefresh.svg b/src/pyminer/resources/theme/default/icons/mActionRefresh.svg similarity index 100% rename from resources/theme/default/icons/mActionRefresh.svg rename to src/pyminer/resources/theme/default/icons/mActionRefresh.svg diff --git a/resources/theme/default/icons/mActionRegionExport.svg b/src/pyminer/resources/theme/default/icons/mActionRegionExport.svg similarity index 100% rename from resources/theme/default/icons/mActionRegionExport.svg rename to src/pyminer/resources/theme/default/icons/mActionRegionExport.svg diff --git a/resources/theme/default/icons/mActionRegionImport.svg b/src/pyminer/resources/theme/default/icons/mActionRegionImport.svg similarity index 100% rename from resources/theme/default/icons/mActionRegionImport.svg rename to src/pyminer/resources/theme/default/icons/mActionRegionImport.svg diff --git a/resources/theme/default/icons/mActionReload.svg b/src/pyminer/resources/theme/default/icons/mActionReload.svg similarity index 100% rename from resources/theme/default/icons/mActionReload.svg rename to src/pyminer/resources/theme/default/icons/mActionReload.svg diff --git a/resources/theme/default/icons/mActionRemove.svg b/src/pyminer/resources/theme/default/icons/mActionRemove.svg similarity index 100% rename from resources/theme/default/icons/mActionRemove.svg rename to src/pyminer/resources/theme/default/icons/mActionRemove.svg diff --git a/resources/theme/default/icons/mActionRemoveAllLayer.svg b/src/pyminer/resources/theme/default/icons/mActionRemoveAllLayer.svg similarity index 100% rename from resources/theme/default/icons/mActionRemoveAllLayer.svg rename to src/pyminer/resources/theme/default/icons/mActionRemoveAllLayer.svg diff --git a/resources/theme/default/icons/mActionRemoveLayer.svg b/src/pyminer/resources/theme/default/icons/mActionRemoveLayer.svg similarity index 100% rename from resources/theme/default/icons/mActionRemoveLayer.svg rename to src/pyminer/resources/theme/default/icons/mActionRemoveLayer.svg diff --git a/resources/theme/default/icons/mActionRemoveRepeatData.svg b/src/pyminer/resources/theme/default/icons/mActionRemoveRepeatData.svg similarity index 100% rename from resources/theme/default/icons/mActionRemoveRepeatData.svg rename to src/pyminer/resources/theme/default/icons/mActionRemoveRepeatData.svg diff --git a/resources/theme/default/icons/mActionRemoveRepeatedPoints.svg b/src/pyminer/resources/theme/default/icons/mActionRemoveRepeatedPoints.svg similarity index 100% rename from resources/theme/default/icons/mActionRemoveRepeatedPoints.svg rename to src/pyminer/resources/theme/default/icons/mActionRemoveRepeatedPoints.svg diff --git a/resources/theme/default/icons/mActionRemoveSchemeData.svg b/src/pyminer/resources/theme/default/icons/mActionRemoveSchemeData.svg similarity index 100% rename from resources/theme/default/icons/mActionRemoveSchemeData.svg rename to src/pyminer/resources/theme/default/icons/mActionRemoveSchemeData.svg diff --git a/resources/theme/default/icons/mActionRemoveVertexTool.svg b/src/pyminer/resources/theme/default/icons/mActionRemoveVertexTool.svg similarity index 100% rename from resources/theme/default/icons/mActionRemoveVertexTool.svg rename to src/pyminer/resources/theme/default/icons/mActionRemoveVertexTool.svg diff --git a/resources/theme/default/icons/mActionReset.svg b/src/pyminer/resources/theme/default/icons/mActionReset.svg similarity index 100% rename from resources/theme/default/icons/mActionReset.svg rename to src/pyminer/resources/theme/default/icons/mActionReset.svg diff --git a/resources/theme/default/icons/mActionResetDirPath.svg b/src/pyminer/resources/theme/default/icons/mActionResetDirPath.svg similarity index 100% rename from resources/theme/default/icons/mActionResetDirPath.svg rename to src/pyminer/resources/theme/default/icons/mActionResetDirPath.svg diff --git a/resources/theme/default/icons/mActionResolveSharePointError.svg b/src/pyminer/resources/theme/default/icons/mActionResolveSharePointError.svg similarity index 100% rename from resources/theme/default/icons/mActionResolveSharePointError.svg rename to src/pyminer/resources/theme/default/icons/mActionResolveSharePointError.svg diff --git a/resources/theme/default/icons/mActionResultExport.svg b/src/pyminer/resources/theme/default/icons/mActionResultExport.svg similarity index 100% rename from resources/theme/default/icons/mActionResultExport.svg rename to src/pyminer/resources/theme/default/icons/mActionResultExport.svg diff --git a/resources/theme/default/icons/mActionResultPreprocessing.svg b/src/pyminer/resources/theme/default/icons/mActionResultPreprocessing.svg similarity index 100% rename from resources/theme/default/icons/mActionResultPreprocessing.svg rename to src/pyminer/resources/theme/default/icons/mActionResultPreprocessing.svg diff --git a/resources/theme/default/icons/mActionReversePolyline.svg b/src/pyminer/resources/theme/default/icons/mActionReversePolyline.svg similarity index 100% rename from resources/theme/default/icons/mActionReversePolyline.svg rename to src/pyminer/resources/theme/default/icons/mActionReversePolyline.svg diff --git a/resources/theme/default/icons/mActionRevertToRevision.svg b/src/pyminer/resources/theme/default/icons/mActionRevertToRevision.svg similarity index 100% rename from resources/theme/default/icons/mActionRevertToRevision.svg rename to src/pyminer/resources/theme/default/icons/mActionRevertToRevision.svg diff --git a/resources/theme/default/icons/mActionRightAngle.svg b/src/pyminer/resources/theme/default/icons/mActionRightAngle.svg similarity index 100% rename from resources/theme/default/icons/mActionRightAngle.svg rename to src/pyminer/resources/theme/default/icons/mActionRightAngle.svg diff --git a/resources/theme/default/icons/mActionRotateFeature.svg b/src/pyminer/resources/theme/default/icons/mActionRotateFeature.svg similarity index 100% rename from resources/theme/default/icons/mActionRotateFeature.svg rename to src/pyminer/resources/theme/default/icons/mActionRotateFeature.svg diff --git a/resources/theme/default/icons/mActionRuleManage.svg b/src/pyminer/resources/theme/default/icons/mActionRuleManage.svg similarity index 100% rename from resources/theme/default/icons/mActionRuleManage.svg rename to src/pyminer/resources/theme/default/icons/mActionRuleManage.svg diff --git a/resources/theme/default/icons/mActionSaveAllEdits.svg b/src/pyminer/resources/theme/default/icons/mActionSaveAllEdits.svg similarity index 100% rename from resources/theme/default/icons/mActionSaveAllEdits.svg rename to src/pyminer/resources/theme/default/icons/mActionSaveAllEdits.svg diff --git a/resources/theme/default/icons/mActionSaveAsScheme.svg b/src/pyminer/resources/theme/default/icons/mActionSaveAsScheme.svg similarity index 100% rename from resources/theme/default/icons/mActionSaveAsScheme.svg rename to src/pyminer/resources/theme/default/icons/mActionSaveAsScheme.svg diff --git a/resources/theme/default/icons/mActionSaveEdits.svg b/src/pyminer/resources/theme/default/icons/mActionSaveEdits.svg similarity index 100% rename from resources/theme/default/icons/mActionSaveEdits.svg rename to src/pyminer/resources/theme/default/icons/mActionSaveEdits.svg diff --git a/resources/theme/default/icons/mActionSaveLayout.svg b/src/pyminer/resources/theme/default/icons/mActionSaveLayout.svg similarity index 100% rename from resources/theme/default/icons/mActionSaveLayout.svg rename to src/pyminer/resources/theme/default/icons/mActionSaveLayout.svg diff --git a/resources/theme/default/icons/mActionSaveScheme.svg b/src/pyminer/resources/theme/default/icons/mActionSaveScheme.svg similarity index 100% rename from resources/theme/default/icons/mActionSaveScheme.svg rename to src/pyminer/resources/theme/default/icons/mActionSaveScheme.svg diff --git a/resources/theme/default/icons/mActionScaleBar.svg b/src/pyminer/resources/theme/default/icons/mActionScaleBar.svg similarity index 100% rename from resources/theme/default/icons/mActionScaleBar.svg rename to src/pyminer/resources/theme/default/icons/mActionScaleBar.svg diff --git a/resources/theme/default/icons/mActionScaleNode.svg b/src/pyminer/resources/theme/default/icons/mActionScaleNode.svg similarity index 100% rename from resources/theme/default/icons/mActionScaleNode.svg rename to src/pyminer/resources/theme/default/icons/mActionScaleNode.svg diff --git a/resources/theme/default/icons/mActionSchemeBatch.svg b/src/pyminer/resources/theme/default/icons/mActionSchemeBatch.svg similarity index 100% rename from resources/theme/default/icons/mActionSchemeBatch.svg rename to src/pyminer/resources/theme/default/icons/mActionSchemeBatch.svg diff --git a/resources/theme/default/icons/mActionSchemeFilter.svg b/src/pyminer/resources/theme/default/icons/mActionSchemeFilter.svg similarity index 100% rename from resources/theme/default/icons/mActionSchemeFilter.svg rename to src/pyminer/resources/theme/default/icons/mActionSchemeFilter.svg diff --git a/resources/theme/default/icons/mActionSchemeFit.svg b/src/pyminer/resources/theme/default/icons/mActionSchemeFit.svg similarity index 100% rename from resources/theme/default/icons/mActionSchemeFit.svg rename to src/pyminer/resources/theme/default/icons/mActionSchemeFit.svg diff --git a/resources/theme/default/icons/mActionSchemeManage.svg b/src/pyminer/resources/theme/default/icons/mActionSchemeManage.svg similarity index 100% rename from resources/theme/default/icons/mActionSchemeManage.svg rename to src/pyminer/resources/theme/default/icons/mActionSchemeManage.svg diff --git a/resources/theme/default/icons/mActionSchemeNoFit.svg b/src/pyminer/resources/theme/default/icons/mActionSchemeNoFit.svg similarity index 100% rename from resources/theme/default/icons/mActionSchemeNoFit.svg rename to src/pyminer/resources/theme/default/icons/mActionSchemeNoFit.svg diff --git a/resources/theme/default/icons/mActionSchemeShow.svg b/src/pyminer/resources/theme/default/icons/mActionSchemeShow.svg similarity index 100% rename from resources/theme/default/icons/mActionSchemeShow.svg rename to src/pyminer/resources/theme/default/icons/mActionSchemeShow.svg diff --git a/resources/theme/default/icons/mActionSchemeSourceManage.svg b/src/pyminer/resources/theme/default/icons/mActionSchemeSourceManage.svg similarity index 100% rename from resources/theme/default/icons/mActionSchemeSourceManage.svg rename to src/pyminer/resources/theme/default/icons/mActionSchemeSourceManage.svg diff --git a/resources/theme/default/icons/mActionSchemeTargetRoot.svg b/src/pyminer/resources/theme/default/icons/mActionSchemeTargetRoot.svg similarity index 100% rename from resources/theme/default/icons/mActionSchemeTargetRoot.svg rename to src/pyminer/resources/theme/default/icons/mActionSchemeTargetRoot.svg diff --git a/resources/theme/default/icons/mActionSearch.svg b/src/pyminer/resources/theme/default/icons/mActionSearch.svg similarity index 100% rename from resources/theme/default/icons/mActionSearch.svg rename to src/pyminer/resources/theme/default/icons/mActionSearch.svg diff --git a/resources/theme/default/icons/mActionSelect.svg b/src/pyminer/resources/theme/default/icons/mActionSelect.svg similarity index 100% rename from resources/theme/default/icons/mActionSelect.svg rename to src/pyminer/resources/theme/default/icons/mActionSelect.svg diff --git a/resources/theme/default/icons/mActionSelectAll.svg b/src/pyminer/resources/theme/default/icons/mActionSelectAll.svg similarity index 100% rename from resources/theme/default/icons/mActionSelectAll.svg rename to src/pyminer/resources/theme/default/icons/mActionSelectAll.svg diff --git a/resources/theme/default/icons/mActionSelectAllLayers.svg b/src/pyminer/resources/theme/default/icons/mActionSelectAllLayers.svg similarity index 100% rename from resources/theme/default/icons/mActionSelectAllLayers.svg rename to src/pyminer/resources/theme/default/icons/mActionSelectAllLayers.svg diff --git a/resources/theme/default/icons/mActionSelectPolygon.svg b/src/pyminer/resources/theme/default/icons/mActionSelectPolygon.svg similarity index 100% rename from resources/theme/default/icons/mActionSelectPolygon.svg rename to src/pyminer/resources/theme/default/icons/mActionSelectPolygon.svg diff --git a/resources/theme/default/icons/mActionSelectRadius.svg b/src/pyminer/resources/theme/default/icons/mActionSelectRadius.svg similarity index 100% rename from resources/theme/default/icons/mActionSelectRadius.svg rename to src/pyminer/resources/theme/default/icons/mActionSelectRadius.svg diff --git a/resources/theme/default/icons/mActionSeparateFeatures.svg b/src/pyminer/resources/theme/default/icons/mActionSeparateFeatures.svg similarity index 100% rename from resources/theme/default/icons/mActionSeparateFeatures.svg rename to src/pyminer/resources/theme/default/icons/mActionSeparateFeatures.svg diff --git a/resources/theme/default/icons/mActionSeparateLayer.svg b/src/pyminer/resources/theme/default/icons/mActionSeparateLayer.svg similarity index 100% rename from resources/theme/default/icons/mActionSeparateLayer.svg rename to src/pyminer/resources/theme/default/icons/mActionSeparateLayer.svg diff --git a/resources/theme/default/icons/mActionServer.svg b/src/pyminer/resources/theme/default/icons/mActionServer.svg similarity index 100% rename from resources/theme/default/icons/mActionServer.svg rename to src/pyminer/resources/theme/default/icons/mActionServer.svg diff --git a/resources/theme/default/icons/mActionSetBottom.svg b/src/pyminer/resources/theme/default/icons/mActionSetBottom.svg similarity index 100% rename from resources/theme/default/icons/mActionSetBottom.svg rename to src/pyminer/resources/theme/default/icons/mActionSetBottom.svg diff --git a/resources/theme/default/icons/mActionSetClipEnv.svg b/src/pyminer/resources/theme/default/icons/mActionSetClipEnv.svg similarity index 100% rename from resources/theme/default/icons/mActionSetClipEnv.svg rename to src/pyminer/resources/theme/default/icons/mActionSetClipEnv.svg diff --git a/resources/theme/default/icons/mActionSetClipPolygon.svg b/src/pyminer/resources/theme/default/icons/mActionSetClipPolygon.svg similarity index 100% rename from resources/theme/default/icons/mActionSetClipPolygon.svg rename to src/pyminer/resources/theme/default/icons/mActionSetClipPolygon.svg diff --git a/resources/theme/default/icons/mActionSetDataSource.svg b/src/pyminer/resources/theme/default/icons/mActionSetDataSource.svg similarity index 100% rename from resources/theme/default/icons/mActionSetDataSource.svg rename to src/pyminer/resources/theme/default/icons/mActionSetDataSource.svg diff --git a/resources/theme/default/icons/mActionSetNoClip.svg b/src/pyminer/resources/theme/default/icons/mActionSetNoClip.svg similarity index 100% rename from resources/theme/default/icons/mActionSetNoClip.svg rename to src/pyminer/resources/theme/default/icons/mActionSetNoClip.svg diff --git a/resources/theme/default/icons/mActionSetNull.svg b/src/pyminer/resources/theme/default/icons/mActionSetNull.svg similarity index 100% rename from resources/theme/default/icons/mActionSetNull.svg rename to src/pyminer/resources/theme/default/icons/mActionSetNull.svg diff --git a/resources/theme/default/icons/mActionSetSpatialReference.svg b/src/pyminer/resources/theme/default/icons/mActionSetSpatialReference.svg similarity index 100% rename from resources/theme/default/icons/mActionSetSpatialReference.svg rename to src/pyminer/resources/theme/default/icons/mActionSetSpatialReference.svg diff --git a/resources/theme/default/icons/mActionSetTop.svg b/src/pyminer/resources/theme/default/icons/mActionSetTop.svg similarity index 100% rename from resources/theme/default/icons/mActionSetTop.svg rename to src/pyminer/resources/theme/default/icons/mActionSetTop.svg diff --git a/resources/theme/default/icons/mActionSetting.svg b/src/pyminer/resources/theme/default/icons/mActionSetting.svg similarity index 100% rename from resources/theme/default/icons/mActionSetting.svg rename to src/pyminer/resources/theme/default/icons/mActionSetting.svg diff --git a/resources/theme/default/icons/mActionSettings.svg b/src/pyminer/resources/theme/default/icons/mActionSettings.svg similarity index 100% rename from resources/theme/default/icons/mActionSettings.svg rename to src/pyminer/resources/theme/default/icons/mActionSettings.svg diff --git a/resources/theme/default/icons/mActionSharing.svg b/src/pyminer/resources/theme/default/icons/mActionSharing.svg similarity index 100% rename from resources/theme/default/icons/mActionSharing.svg rename to src/pyminer/resources/theme/default/icons/mActionSharing.svg diff --git a/resources/theme/default/icons/mActionSharingExport.svg b/src/pyminer/resources/theme/default/icons/mActionSharingExport.svg similarity index 100% rename from resources/theme/default/icons/mActionSharingExport.svg rename to src/pyminer/resources/theme/default/icons/mActionSharingExport.svg diff --git a/resources/theme/default/icons/mActionSharingImport.svg b/src/pyminer/resources/theme/default/icons/mActionSharingImport.svg similarity index 100% rename from resources/theme/default/icons/mActionSharingImport.svg rename to src/pyminer/resources/theme/default/icons/mActionSharingImport.svg diff --git a/resources/theme/default/icons/mActionShowAllHide.svg b/src/pyminer/resources/theme/default/icons/mActionShowAllHide.svg similarity index 100% rename from resources/theme/default/icons/mActionShowAllHide.svg rename to src/pyminer/resources/theme/default/icons/mActionShowAllHide.svg diff --git a/resources/theme/default/icons/mActionShowAllLayers.svg b/src/pyminer/resources/theme/default/icons/mActionShowAllLayers.svg similarity index 100% rename from resources/theme/default/icons/mActionShowAllLayers.svg rename to src/pyminer/resources/theme/default/icons/mActionShowAllLayers.svg diff --git a/resources/theme/default/icons/mActionShowBookmarks.svg b/src/pyminer/resources/theme/default/icons/mActionShowBookmarks.svg similarity index 100% rename from resources/theme/default/icons/mActionShowBookmarks.svg rename to src/pyminer/resources/theme/default/icons/mActionShowBookmarks.svg diff --git a/resources/theme/default/icons/mActionShowFilter.svg b/src/pyminer/resources/theme/default/icons/mActionShowFilter.svg similarity index 100% rename from resources/theme/default/icons/mActionShowFilter.svg rename to src/pyminer/resources/theme/default/icons/mActionShowFilter.svg diff --git a/resources/theme/default/icons/mActionShowGridTool.svg b/src/pyminer/resources/theme/default/icons/mActionShowGridTool.svg similarity index 100% rename from resources/theme/default/icons/mActionShowGridTool.svg rename to src/pyminer/resources/theme/default/icons/mActionShowGridTool.svg diff --git a/resources/theme/default/icons/mActionShowLayersSet.svg b/src/pyminer/resources/theme/default/icons/mActionShowLayersSet.svg similarity index 100% rename from resources/theme/default/icons/mActionShowLayersSet.svg rename to src/pyminer/resources/theme/default/icons/mActionShowLayersSet.svg diff --git a/resources/theme/default/icons/mActionShowPluginManager.svg b/src/pyminer/resources/theme/default/icons/mActionShowPluginManager.svg similarity index 100% rename from resources/theme/default/icons/mActionShowPluginManager.svg rename to src/pyminer/resources/theme/default/icons/mActionShowPluginManager.svg diff --git a/resources/theme/default/icons/mActionShowResults.svg b/src/pyminer/resources/theme/default/icons/mActionShowResults.svg similarity index 100% rename from resources/theme/default/icons/mActionShowResults.svg rename to src/pyminer/resources/theme/default/icons/mActionShowResults.svg diff --git a/resources/theme/default/icons/mActionShowSelectedLayers.svg b/src/pyminer/resources/theme/default/icons/mActionShowSelectedLayers.svg similarity index 100% rename from resources/theme/default/icons/mActionShowSelectedLayers.svg rename to src/pyminer/resources/theme/default/icons/mActionShowSelectedLayers.svg diff --git a/resources/theme/default/icons/mActionSimplify.svg b/src/pyminer/resources/theme/default/icons/mActionSimplify.svg similarity index 100% rename from resources/theme/default/icons/mActionSimplify.svg rename to src/pyminer/resources/theme/default/icons/mActionSimplify.svg diff --git a/resources/theme/default/icons/mActionSmoothTool.svg b/src/pyminer/resources/theme/default/icons/mActionSmoothTool.svg similarity index 100% rename from resources/theme/default/icons/mActionSmoothTool.svg rename to src/pyminer/resources/theme/default/icons/mActionSmoothTool.svg diff --git a/resources/theme/default/icons/mActionSpatial.svg b/src/pyminer/resources/theme/default/icons/mActionSpatial.svg similarity index 100% rename from resources/theme/default/icons/mActionSpatial.svg rename to src/pyminer/resources/theme/default/icons/mActionSpatial.svg diff --git a/resources/theme/default/icons/mActionSpecialAttributeBrush.svg b/src/pyminer/resources/theme/default/icons/mActionSpecialAttributeBrush.svg similarity index 100% rename from resources/theme/default/icons/mActionSpecialAttributeBrush.svg rename to src/pyminer/resources/theme/default/icons/mActionSpecialAttributeBrush.svg diff --git a/resources/theme/default/icons/mActionSplitByPolyLine.svg b/src/pyminer/resources/theme/default/icons/mActionSplitByPolyLine.svg similarity index 100% rename from resources/theme/default/icons/mActionSplitByPolyLine.svg rename to src/pyminer/resources/theme/default/icons/mActionSplitByPolyLine.svg diff --git a/resources/theme/default/icons/mActionSplitByPolygon.svg b/src/pyminer/resources/theme/default/icons/mActionSplitByPolygon.svg similarity index 100% rename from resources/theme/default/icons/mActionSplitByPolygon.svg rename to src/pyminer/resources/theme/default/icons/mActionSplitByPolygon.svg diff --git a/resources/theme/default/icons/mActionSplitBySelect.svg b/src/pyminer/resources/theme/default/icons/mActionSplitBySelect.svg similarity index 100% rename from resources/theme/default/icons/mActionSplitBySelect.svg rename to src/pyminer/resources/theme/default/icons/mActionSplitBySelect.svg diff --git a/resources/theme/default/icons/mActionSplitFeatures.svg b/src/pyminer/resources/theme/default/icons/mActionSplitFeatures.svg similarity index 100% rename from resources/theme/default/icons/mActionSplitFeatures.svg rename to src/pyminer/resources/theme/default/icons/mActionSplitFeatures.svg diff --git a/resources/theme/default/icons/mActionSql.svg b/src/pyminer/resources/theme/default/icons/mActionSql.svg similarity index 100% rename from resources/theme/default/icons/mActionSql.svg rename to src/pyminer/resources/theme/default/icons/mActionSql.svg diff --git a/resources/theme/default/icons/mActionStartCheck.svg b/src/pyminer/resources/theme/default/icons/mActionStartCheck.svg similarity index 100% rename from resources/theme/default/icons/mActionStartCheck.svg rename to src/pyminer/resources/theme/default/icons/mActionStartCheck.svg diff --git a/resources/theme/default/icons/mActionStartImport.svg b/src/pyminer/resources/theme/default/icons/mActionStartImport.svg similarity index 100% rename from resources/theme/default/icons/mActionStartImport.svg rename to src/pyminer/resources/theme/default/icons/mActionStartImport.svg diff --git a/resources/theme/default/icons/mActionStreamline.svg b/src/pyminer/resources/theme/default/icons/mActionStreamline.svg similarity index 100% rename from resources/theme/default/icons/mActionStreamline.svg rename to src/pyminer/resources/theme/default/icons/mActionStreamline.svg diff --git a/resources/theme/default/icons/mActionStyleView.svg b/src/pyminer/resources/theme/default/icons/mActionStyleView.svg similarity index 100% rename from resources/theme/default/icons/mActionStyleView.svg rename to src/pyminer/resources/theme/default/icons/mActionStyleView.svg diff --git a/resources/theme/default/icons/mActionSum.svg b/src/pyminer/resources/theme/default/icons/mActionSum.svg similarity index 100% rename from resources/theme/default/icons/mActionSum.svg rename to src/pyminer/resources/theme/default/icons/mActionSum.svg diff --git a/resources/theme/default/icons/mActionSwipe.svg b/src/pyminer/resources/theme/default/icons/mActionSwipe.svg similarity index 100% rename from resources/theme/default/icons/mActionSwipe.svg rename to src/pyminer/resources/theme/default/icons/mActionSwipe.svg diff --git a/resources/theme/default/icons/mActionSysSwitch.svg b/src/pyminer/resources/theme/default/icons/mActionSysSwitch.svg similarity index 100% rename from resources/theme/default/icons/mActionSysSwitch.svg rename to src/pyminer/resources/theme/default/icons/mActionSysSwitch.svg diff --git a/resources/theme/default/icons/mActionTableImport.svg b/src/pyminer/resources/theme/default/icons/mActionTableImport.svg similarity index 100% rename from resources/theme/default/icons/mActionTableImport.svg rename to src/pyminer/resources/theme/default/icons/mActionTableImport.svg diff --git a/resources/theme/default/icons/mActionTaskManage.svg b/src/pyminer/resources/theme/default/icons/mActionTaskManage.svg similarity index 100% rename from resources/theme/default/icons/mActionTaskManage.svg rename to src/pyminer/resources/theme/default/icons/mActionTaskManage.svg diff --git a/resources/theme/default/icons/mActionTeamConfig.svg b/src/pyminer/resources/theme/default/icons/mActionTeamConfig.svg similarity index 100% rename from resources/theme/default/icons/mActionTeamConfig.svg rename to src/pyminer/resources/theme/default/icons/mActionTeamConfig.svg diff --git a/resources/theme/default/icons/mActionTeamEdit.svg b/src/pyminer/resources/theme/default/icons/mActionTeamEdit.svg similarity index 100% rename from resources/theme/default/icons/mActionTeamEdit.svg rename to src/pyminer/resources/theme/default/icons/mActionTeamEdit.svg diff --git a/resources/theme/default/icons/mActionTeamProjectInfoStatistic.svg b/src/pyminer/resources/theme/default/icons/mActionTeamProjectInfoStatistic.svg similarity index 100% rename from resources/theme/default/icons/mActionTeamProjectInfoStatistic.svg rename to src/pyminer/resources/theme/default/icons/mActionTeamProjectInfoStatistic.svg diff --git a/resources/theme/default/icons/mActionTeamRevisionSlider.svg b/src/pyminer/resources/theme/default/icons/mActionTeamRevisionSlider.svg similarity index 100% rename from resources/theme/default/icons/mActionTeamRevisionSlider.svg rename to src/pyminer/resources/theme/default/icons/mActionTeamRevisionSlider.svg diff --git a/resources/theme/default/icons/mActionTeamServer.svg b/src/pyminer/resources/theme/default/icons/mActionTeamServer.svg similarity index 100% rename from resources/theme/default/icons/mActionTeamServer.svg rename to src/pyminer/resources/theme/default/icons/mActionTeamServer.svg diff --git a/resources/theme/default/icons/mActionTeamTimingAcquireLog.svg b/src/pyminer/resources/theme/default/icons/mActionTeamTimingAcquireLog.svg similarity index 100% rename from resources/theme/default/icons/mActionTeamTimingAcquireLog.svg rename to src/pyminer/resources/theme/default/icons/mActionTeamTimingAcquireLog.svg diff --git a/resources/theme/default/icons/mActionTeamTool.svg b/src/pyminer/resources/theme/default/icons/mActionTeamTool.svg similarity index 100% rename from resources/theme/default/icons/mActionTeamTool.svg rename to src/pyminer/resources/theme/default/icons/mActionTeamTool.svg diff --git a/resources/theme/default/icons/mActionTemplate.svg b/src/pyminer/resources/theme/default/icons/mActionTemplate.svg similarity index 100% rename from resources/theme/default/icons/mActionTemplate.svg rename to src/pyminer/resources/theme/default/icons/mActionTemplate.svg diff --git a/resources/theme/default/icons/mActionTemplateCompose.svg b/src/pyminer/resources/theme/default/icons/mActionTemplateCompose.svg similarity index 100% rename from resources/theme/default/icons/mActionTemplateCompose.svg rename to src/pyminer/resources/theme/default/icons/mActionTemplateCompose.svg diff --git a/resources/theme/default/icons/mActionTemporaryLayer.svg b/src/pyminer/resources/theme/default/icons/mActionTemporaryLayer.svg similarity index 100% rename from resources/theme/default/icons/mActionTemporaryLayer.svg rename to src/pyminer/resources/theme/default/icons/mActionTemporaryLayer.svg diff --git a/resources/theme/default/icons/mActionThematicAttributes.svg b/src/pyminer/resources/theme/default/icons/mActionThematicAttributes.svg similarity index 100% rename from resources/theme/default/icons/mActionThematicAttributes.svg rename to src/pyminer/resources/theme/default/icons/mActionThematicAttributes.svg diff --git a/resources/theme/default/icons/mActionTileImport.svg b/src/pyminer/resources/theme/default/icons/mActionTileImport.svg similarity index 100% rename from resources/theme/default/icons/mActionTileImport.svg rename to src/pyminer/resources/theme/default/icons/mActionTileImport.svg diff --git a/resources/theme/default/icons/mActionTiling.svg b/src/pyminer/resources/theme/default/icons/mActionTiling.svg similarity index 100% rename from resources/theme/default/icons/mActionTiling.svg rename to src/pyminer/resources/theme/default/icons/mActionTiling.svg diff --git a/resources/theme/default/icons/mActionTimeSlider.svg b/src/pyminer/resources/theme/default/icons/mActionTimeSlider.svg similarity index 100% rename from resources/theme/default/icons/mActionTimeSlider.svg rename to src/pyminer/resources/theme/default/icons/mActionTimeSlider.svg diff --git a/resources/theme/default/icons/mActionTimingAcquire.svg b/src/pyminer/resources/theme/default/icons/mActionTimingAcquire.svg similarity index 100% rename from resources/theme/default/icons/mActionTimingAcquire.svg rename to src/pyminer/resources/theme/default/icons/mActionTimingAcquire.svg diff --git a/resources/theme/default/icons/mActionTimingAcquireSetting.svg b/src/pyminer/resources/theme/default/icons/mActionTimingAcquireSetting.svg similarity index 100% rename from resources/theme/default/icons/mActionTimingAcquireSetting.svg rename to src/pyminer/resources/theme/default/icons/mActionTimingAcquireSetting.svg diff --git a/resources/theme/default/icons/mActionToggleEditing.svg b/src/pyminer/resources/theme/default/icons/mActionToggleEditing.svg similarity index 100% rename from resources/theme/default/icons/mActionToggleEditing.svg rename to src/pyminer/resources/theme/default/icons/mActionToggleEditing.svg diff --git a/resources/theme/default/icons/mActionToolBox.svg b/src/pyminer/resources/theme/default/icons/mActionToolBox.svg similarity index 100% rename from resources/theme/default/icons/mActionToolBox.svg rename to src/pyminer/resources/theme/default/icons/mActionToolBox.svg diff --git a/resources/theme/default/icons/mActionTrim.svg b/src/pyminer/resources/theme/default/icons/mActionTrim.svg similarity index 100% rename from resources/theme/default/icons/mActionTrim.svg rename to src/pyminer/resources/theme/default/icons/mActionTrim.svg diff --git a/resources/theme/default/icons/mActionUndo.svg b/src/pyminer/resources/theme/default/icons/mActionUndo.svg similarity index 100% rename from resources/theme/default/icons/mActionUndo.svg rename to src/pyminer/resources/theme/default/icons/mActionUndo.svg diff --git a/resources/theme/default/icons/mActionUngroup.svg b/src/pyminer/resources/theme/default/icons/mActionUngroup.svg similarity index 100% rename from resources/theme/default/icons/mActionUngroup.svg rename to src/pyminer/resources/theme/default/icons/mActionUngroup.svg diff --git a/resources/theme/default/icons/mActionUp.svg b/src/pyminer/resources/theme/default/icons/mActionUp.svg similarity index 100% rename from resources/theme/default/icons/mActionUp.svg rename to src/pyminer/resources/theme/default/icons/mActionUp.svg diff --git a/resources/theme/default/icons/mActionUpdate.svg b/src/pyminer/resources/theme/default/icons/mActionUpdate.svg similarity index 100% rename from resources/theme/default/icons/mActionUpdate.svg rename to src/pyminer/resources/theme/default/icons/mActionUpdate.svg diff --git a/resources/theme/default/icons/mActionUpdateRecords.svg b/src/pyminer/resources/theme/default/icons/mActionUpdateRecords.svg similarity index 100% rename from resources/theme/default/icons/mActionUpdateRecords.svg rename to src/pyminer/resources/theme/default/icons/mActionUpdateRecords.svg diff --git a/resources/theme/default/icons/mActionUpdateToRevision.svg b/src/pyminer/resources/theme/default/icons/mActionUpdateToRevision.svg similarity index 100% rename from resources/theme/default/icons/mActionUpdateToRevision.svg rename to src/pyminer/resources/theme/default/icons/mActionUpdateToRevision.svg diff --git a/resources/theme/default/icons/mActionUploadData.svg b/src/pyminer/resources/theme/default/icons/mActionUploadData.svg similarity index 100% rename from resources/theme/default/icons/mActionUploadData.svg rename to src/pyminer/resources/theme/default/icons/mActionUploadData.svg diff --git a/resources/theme/default/icons/mActionUserRoleManager.svg b/src/pyminer/resources/theme/default/icons/mActionUserRoleManager.svg similarity index 100% rename from resources/theme/default/icons/mActionUserRoleManager.svg rename to src/pyminer/resources/theme/default/icons/mActionUserRoleManager.svg diff --git a/resources/theme/default/icons/mActionVTSPreview.svg b/src/pyminer/resources/theme/default/icons/mActionVTSPreview.svg similarity index 100% rename from resources/theme/default/icons/mActionVTSPreview.svg rename to src/pyminer/resources/theme/default/icons/mActionVTSPreview.svg diff --git a/resources/theme/default/icons/mActionVertexTool.svg b/src/pyminer/resources/theme/default/icons/mActionVertexTool.svg similarity index 100% rename from resources/theme/default/icons/mActionVertexTool.svg rename to src/pyminer/resources/theme/default/icons/mActionVertexTool.svg diff --git a/resources/theme/default/icons/mActionWeldPolyline.svg b/src/pyminer/resources/theme/default/icons/mActionWeldPolyline.svg similarity index 100% rename from resources/theme/default/icons/mActionWeldPolyline.svg rename to src/pyminer/resources/theme/default/icons/mActionWeldPolyline.svg diff --git a/resources/theme/default/icons/mActionYearChangeNavigation.svg b/src/pyminer/resources/theme/default/icons/mActionYearChangeNavigation.svg similarity index 100% rename from resources/theme/default/icons/mActionYearChangeNavigation.svg rename to src/pyminer/resources/theme/default/icons/mActionYearChangeNavigation.svg diff --git a/resources/theme/default/icons/mActionYearChangeRegression.svg b/src/pyminer/resources/theme/default/icons/mActionYearChangeRegression.svg similarity index 100% rename from resources/theme/default/icons/mActionYearChangeRegression.svg rename to src/pyminer/resources/theme/default/icons/mActionYearChangeRegression.svg diff --git a/resources/theme/default/icons/mActionZoomFullExtent.svg b/src/pyminer/resources/theme/default/icons/mActionZoomFullExtent.svg similarity index 100% rename from resources/theme/default/icons/mActionZoomFullExtent.svg rename to src/pyminer/resources/theme/default/icons/mActionZoomFullExtent.svg diff --git a/resources/theme/default/icons/mActionZoomIn.svg b/src/pyminer/resources/theme/default/icons/mActionZoomIn.svg similarity index 100% rename from resources/theme/default/icons/mActionZoomIn.svg rename to src/pyminer/resources/theme/default/icons/mActionZoomIn.svg diff --git a/resources/theme/default/icons/mActionZoomInCenter.svg b/src/pyminer/resources/theme/default/icons/mActionZoomInCenter.svg similarity index 100% rename from resources/theme/default/icons/mActionZoomInCenter.svg rename to src/pyminer/resources/theme/default/icons/mActionZoomInCenter.svg diff --git a/resources/theme/default/icons/mActionZoomLast.svg b/src/pyminer/resources/theme/default/icons/mActionZoomLast.svg similarity index 100% rename from resources/theme/default/icons/mActionZoomLast.svg rename to src/pyminer/resources/theme/default/icons/mActionZoomLast.svg diff --git a/resources/theme/default/icons/mActionZoomNext.svg b/src/pyminer/resources/theme/default/icons/mActionZoomNext.svg similarity index 100% rename from resources/theme/default/icons/mActionZoomNext.svg rename to src/pyminer/resources/theme/default/icons/mActionZoomNext.svg diff --git a/resources/theme/default/icons/mActionZoomOut.svg b/src/pyminer/resources/theme/default/icons/mActionZoomOut.svg similarity index 100% rename from resources/theme/default/icons/mActionZoomOut.svg rename to src/pyminer/resources/theme/default/icons/mActionZoomOut.svg diff --git a/resources/theme/default/icons/mActionZoomOutCenter.svg b/src/pyminer/resources/theme/default/icons/mActionZoomOutCenter.svg similarity index 100% rename from resources/theme/default/icons/mActionZoomOutCenter.svg rename to src/pyminer/resources/theme/default/icons/mActionZoomOutCenter.svg diff --git a/resources/theme/default/icons/mActionZoomToBookmark.svg b/src/pyminer/resources/theme/default/icons/mActionZoomToBookmark.svg similarity index 100% rename from resources/theme/default/icons/mActionZoomToBookmark.svg rename to src/pyminer/resources/theme/default/icons/mActionZoomToBookmark.svg diff --git a/resources/theme/default/icons/mActionZoomToLayer.svg b/src/pyminer/resources/theme/default/icons/mActionZoomToLayer.svg similarity index 100% rename from resources/theme/default/icons/mActionZoomToLayer.svg rename to src/pyminer/resources/theme/default/icons/mActionZoomToLayer.svg diff --git a/resources/theme/default/icons/mActionZoomToSelected.svg b/src/pyminer/resources/theme/default/icons/mActionZoomToSelected.svg similarity index 100% rename from resources/theme/default/icons/mActionZoomToSelected.svg rename to src/pyminer/resources/theme/default/icons/mActionZoomToSelected.svg diff --git a/resources/theme/default/icons/mActionbatcgSetUniqueCode.svg b/src/pyminer/resources/theme/default/icons/mActionbatcgSetUniqueCode.svg similarity index 100% rename from resources/theme/default/icons/mActionbatcgSetUniqueCode.svg rename to src/pyminer/resources/theme/default/icons/mActionbatcgSetUniqueCode.svg diff --git a/resources/theme/default/icons/mActionlinkage.svg b/src/pyminer/resources/theme/default/icons/mActionlinkage.svg similarity index 100% rename from resources/theme/default/icons/mActionlinkage.svg rename to src/pyminer/resources/theme/default/icons/mActionlinkage.svg diff --git a/resources/theme/default/icons/mAutoChangePolygon.svg b/src/pyminer/resources/theme/default/icons/mAutoChangePolygon.svg similarity index 100% rename from resources/theme/default/icons/mAutoChangePolygon.svg rename to src/pyminer/resources/theme/default/icons/mAutoChangePolygon.svg diff --git a/resources/theme/default/icons/mAutoCompletePolygon.svg b/src/pyminer/resources/theme/default/icons/mAutoCompletePolygon.svg similarity index 100% rename from resources/theme/default/icons/mAutoCompletePolygon.svg rename to src/pyminer/resources/theme/default/icons/mAutoCompletePolygon.svg diff --git a/resources/theme/default/icons/mComposeSchemeManage.svg b/src/pyminer/resources/theme/default/icons/mComposeSchemeManage.svg similarity index 100% rename from resources/theme/default/icons/mComposeSchemeManage.svg rename to src/pyminer/resources/theme/default/icons/mComposeSchemeManage.svg diff --git a/resources/theme/default/icons/mDataExportSchemeManage.svg b/src/pyminer/resources/theme/default/icons/mDataExportSchemeManage.svg similarity index 100% rename from resources/theme/default/icons/mDataExportSchemeManage.svg rename to src/pyminer/resources/theme/default/icons/mDataExportSchemeManage.svg diff --git a/resources/theme/default/icons/mDataImportSchemeManage.svg b/src/pyminer/resources/theme/default/icons/mDataImportSchemeManage.svg similarity index 100% rename from resources/theme/default/icons/mDataImportSchemeManage.svg rename to src/pyminer/resources/theme/default/icons/mDataImportSchemeManage.svg diff --git a/resources/theme/default/icons/mDataTransSchemeManage.svg b/src/pyminer/resources/theme/default/icons/mDataTransSchemeManage.svg similarity index 100% rename from resources/theme/default/icons/mDataTransSchemeManage.svg rename to src/pyminer/resources/theme/default/icons/mDataTransSchemeManage.svg diff --git a/resources/theme/default/icons/mGeneratingDLJX.svg b/src/pyminer/resources/theme/default/icons/mGeneratingDLJX.svg similarity index 100% rename from resources/theme/default/icons/mGeneratingDLJX.svg rename to src/pyminer/resources/theme/default/icons/mGeneratingDLJX.svg diff --git a/resources/theme/default/icons/mGeoPackage.svg b/src/pyminer/resources/theme/default/icons/mGeoPackage.svg similarity index 100% rename from resources/theme/default/icons/mGeoPackage.svg rename to src/pyminer/resources/theme/default/icons/mGeoPackage.svg diff --git a/resources/theme/default/icons/mIconAddDBServer.svg b/src/pyminer/resources/theme/default/icons/mIconAddDBServer.svg similarity index 100% rename from resources/theme/default/icons/mIconAddDBServer.svg rename to src/pyminer/resources/theme/default/icons/mIconAddDBServer.svg diff --git a/resources/theme/default/icons/mIconAddServer.svg b/src/pyminer/resources/theme/default/icons/mIconAddServer.svg similarity index 100% rename from resources/theme/default/icons/mIconAddServer.svg rename to src/pyminer/resources/theme/default/icons/mIconAddServer.svg diff --git a/resources/theme/default/icons/mIconAfs.svg b/src/pyminer/resources/theme/default/icons/mIconAfs.svg similarity index 100% rename from resources/theme/default/icons/mIconAfs.svg rename to src/pyminer/resources/theme/default/icons/mIconAfs.svg diff --git a/resources/theme/default/icons/mIconAms.svg b/src/pyminer/resources/theme/default/icons/mIconAms.svg similarity index 100% rename from resources/theme/default/icons/mIconAms.svg rename to src/pyminer/resources/theme/default/icons/mIconAms.svg diff --git a/resources/theme/default/icons/mIconAnalyseFlow.svg b/src/pyminer/resources/theme/default/icons/mIconAnalyseFlow.svg similarity index 100% rename from resources/theme/default/icons/mIconAnalyseFlow.svg rename to src/pyminer/resources/theme/default/icons/mIconAnalyseFlow.svg diff --git a/resources/theme/default/icons/mIconAnnotationLayer.svg b/src/pyminer/resources/theme/default/icons/mIconAnnotationLayer.svg similarity index 100% rename from resources/theme/default/icons/mIconAnnotationLayer.svg rename to src/pyminer/resources/theme/default/icons/mIconAnnotationLayer.svg diff --git a/resources/theme/default/icons/mIconAnnotationMLayer.svg b/src/pyminer/resources/theme/default/icons/mIconAnnotationMLayer.svg similarity index 100% rename from resources/theme/default/icons/mIconAnnotationMLayer.svg rename to src/pyminer/resources/theme/default/icons/mIconAnnotationMLayer.svg diff --git a/resources/theme/default/icons/mIconApplication.svg b/src/pyminer/resources/theme/default/icons/mIconApplication.svg similarity index 100% rename from resources/theme/default/icons/mIconApplication.svg rename to src/pyminer/resources/theme/default/icons/mIconApplication.svg diff --git a/resources/theme/default/icons/mIconApply.svg b/src/pyminer/resources/theme/default/icons/mIconApply.svg similarity index 100% rename from resources/theme/default/icons/mIconApply.svg rename to src/pyminer/resources/theme/default/icons/mIconApply.svg diff --git a/resources/theme/default/icons/mIconAttirbuteAssign.svg b/src/pyminer/resources/theme/default/icons/mIconAttirbuteAssign.svg similarity index 100% rename from resources/theme/default/icons/mIconAttirbuteAssign.svg rename to src/pyminer/resources/theme/default/icons/mIconAttirbuteAssign.svg diff --git a/resources/theme/default/icons/mIconAttributeTable.svg b/src/pyminer/resources/theme/default/icons/mIconAttributeTable.svg similarity index 100% rename from resources/theme/default/icons/mIconAttributeTable.svg rename to src/pyminer/resources/theme/default/icons/mIconAttributeTable.svg diff --git a/resources/theme/default/icons/mIconAuxiliaryStorage.svg b/src/pyminer/resources/theme/default/icons/mIconAuxiliaryStorage.svg similarity index 100% rename from resources/theme/default/icons/mIconAuxiliaryStorage.svg rename to src/pyminer/resources/theme/default/icons/mIconAuxiliaryStorage.svg diff --git a/resources/theme/default/icons/mIconCad.svg b/src/pyminer/resources/theme/default/icons/mIconCad.svg similarity index 100% rename from resources/theme/default/icons/mIconCad.svg rename to src/pyminer/resources/theme/default/icons/mIconCad.svg diff --git a/resources/theme/default/icons/mIconCalEllipsoid.svg b/src/pyminer/resources/theme/default/icons/mIconCalEllipsoid.svg similarity index 100% rename from resources/theme/default/icons/mIconCalEllipsoid.svg rename to src/pyminer/resources/theme/default/icons/mIconCalEllipsoid.svg diff --git a/resources/theme/default/icons/mIconCatalogResource.svg b/src/pyminer/resources/theme/default/icons/mIconCatalogResource.svg similarity index 100% rename from resources/theme/default/icons/mIconCatalogResource.svg rename to src/pyminer/resources/theme/default/icons/mIconCatalogResource.svg diff --git a/resources/theme/default/icons/mIconCatalogRoot.svg b/src/pyminer/resources/theme/default/icons/mIconCatalogRoot.svg similarity index 100% rename from resources/theme/default/icons/mIconCatalogRoot.svg rename to src/pyminer/resources/theme/default/icons/mIconCatalogRoot.svg diff --git a/resources/theme/default/icons/mIconChange.svg b/src/pyminer/resources/theme/default/icons/mIconChange.svg similarity index 100% rename from resources/theme/default/icons/mIconChange.svg rename to src/pyminer/resources/theme/default/icons/mIconChange.svg diff --git a/resources/theme/default/icons/mIconCheckLayer.svg b/src/pyminer/resources/theme/default/icons/mIconCheckLayer.svg similarity index 100% rename from resources/theme/default/icons/mIconCheckLayer.svg rename to src/pyminer/resources/theme/default/icons/mIconCheckLayer.svg diff --git a/resources/theme/default/icons/mIconClearText.svg b/src/pyminer/resources/theme/default/icons/mIconClearText.svg similarity index 100% rename from resources/theme/default/icons/mIconClearText.svg rename to src/pyminer/resources/theme/default/icons/mIconClearText.svg diff --git a/resources/theme/default/icons/mIconClearTextHover.svg b/src/pyminer/resources/theme/default/icons/mIconClearTextHover.svg similarity index 100% rename from resources/theme/default/icons/mIconClearTextHover.svg rename to src/pyminer/resources/theme/default/icons/mIconClearTextHover.svg diff --git a/resources/theme/default/icons/mIconClose.svg b/src/pyminer/resources/theme/default/icons/mIconClose.svg similarity index 100% rename from resources/theme/default/icons/mIconClose.svg rename to src/pyminer/resources/theme/default/icons/mIconClose.svg diff --git a/resources/theme/default/icons/mIconCode.svg b/src/pyminer/resources/theme/default/icons/mIconCode.svg similarity index 100% rename from resources/theme/default/icons/mIconCode.svg rename to src/pyminer/resources/theme/default/icons/mIconCode.svg diff --git a/resources/theme/default/icons/mIconCodeSpecifiation.svg b/src/pyminer/resources/theme/default/icons/mIconCodeSpecifiation.svg similarity index 100% rename from resources/theme/default/icons/mIconCodeSpecifiation.svg rename to src/pyminer/resources/theme/default/icons/mIconCodeSpecifiation.svg diff --git a/resources/theme/default/icons/mIconCodingScheme.svg b/src/pyminer/resources/theme/default/icons/mIconCodingScheme.svg similarity index 100% rename from resources/theme/default/icons/mIconCodingScheme.svg rename to src/pyminer/resources/theme/default/icons/mIconCodingScheme.svg diff --git a/resources/theme/default/icons/mIconCodingSchemeRoot.svg b/src/pyminer/resources/theme/default/icons/mIconCodingSchemeRoot.svg similarity index 100% rename from resources/theme/default/icons/mIconCodingSchemeRoot.svg rename to src/pyminer/resources/theme/default/icons/mIconCodingSchemeRoot.svg diff --git a/resources/theme/default/icons/mIconCompoundLayer.svg b/src/pyminer/resources/theme/default/icons/mIconCompoundLayer.svg similarity index 100% rename from resources/theme/default/icons/mIconCompoundLayer.svg rename to src/pyminer/resources/theme/default/icons/mIconCompoundLayer.svg diff --git a/resources/theme/default/icons/mIconConnect.png b/src/pyminer/resources/theme/default/icons/mIconConnect.png similarity index 100% rename from resources/theme/default/icons/mIconConnect.png rename to src/pyminer/resources/theme/default/icons/mIconConnect.png diff --git a/resources/theme/default/icons/mIconCritical.svg b/src/pyminer/resources/theme/default/icons/mIconCritical.svg similarity index 100% rename from resources/theme/default/icons/mIconCritical.svg rename to src/pyminer/resources/theme/default/icons/mIconCritical.svg diff --git a/resources/theme/default/icons/mIconDaMeng.svg b/src/pyminer/resources/theme/default/icons/mIconDaMeng.svg similarity index 100% rename from resources/theme/default/icons/mIconDaMeng.svg rename to src/pyminer/resources/theme/default/icons/mIconDaMeng.svg diff --git a/resources/theme/default/icons/mIconDataSet.svg b/src/pyminer/resources/theme/default/icons/mIconDataSet.svg similarity index 100% rename from resources/theme/default/icons/mIconDataSet.svg rename to src/pyminer/resources/theme/default/icons/mIconDataSet.svg diff --git a/resources/theme/default/icons/mIconDataStructure.svg b/src/pyminer/resources/theme/default/icons/mIconDataStructure.svg similarity index 100% rename from resources/theme/default/icons/mIconDataStructure.svg rename to src/pyminer/resources/theme/default/icons/mIconDataStructure.svg diff --git a/resources/theme/default/icons/mIconDbSchema.png b/src/pyminer/resources/theme/default/icons/mIconDbSchema.png similarity index 100% rename from resources/theme/default/icons/mIconDbSchema.png rename to src/pyminer/resources/theme/default/icons/mIconDbSchema.png diff --git a/resources/theme/default/icons/mIconDelete.svg b/src/pyminer/resources/theme/default/icons/mIconDelete.svg similarity index 100% rename from resources/theme/default/icons/mIconDelete.svg rename to src/pyminer/resources/theme/default/icons/mIconDelete.svg diff --git a/resources/theme/default/icons/mIconDeselected.svg b/src/pyminer/resources/theme/default/icons/mIconDeselected.svg similarity index 100% rename from resources/theme/default/icons/mIconDeselected.svg rename to src/pyminer/resources/theme/default/icons/mIconDeselected.svg diff --git a/resources/theme/default/icons/mIconDicItem.svg b/src/pyminer/resources/theme/default/icons/mIconDicItem.svg similarity index 100% rename from resources/theme/default/icons/mIconDicItem.svg rename to src/pyminer/resources/theme/default/icons/mIconDicItem.svg diff --git a/resources/theme/default/icons/mIconEditableEdits.svg b/src/pyminer/resources/theme/default/icons/mIconEditableEdits.svg similarity index 100% rename from resources/theme/default/icons/mIconEditableEdits.svg rename to src/pyminer/resources/theme/default/icons/mIconEditableEdits.svg diff --git a/resources/theme/default/icons/mIconError.svg b/src/pyminer/resources/theme/default/icons/mIconError.svg similarity index 100% rename from resources/theme/default/icons/mIconError.svg rename to src/pyminer/resources/theme/default/icons/mIconError.svg diff --git a/resources/theme/default/icons/mIconExportCatalogDataNode.svg b/src/pyminer/resources/theme/default/icons/mIconExportCatalogDataNode.svg similarity index 100% rename from resources/theme/default/icons/mIconExportCatalogDataNode.svg rename to src/pyminer/resources/theme/default/icons/mIconExportCatalogDataNode.svg diff --git a/resources/theme/default/icons/mIconExportCatalogFileNode.svg b/src/pyminer/resources/theme/default/icons/mIconExportCatalogFileNode.svg similarity index 100% rename from resources/theme/default/icons/mIconExportCatalogFileNode.svg rename to src/pyminer/resources/theme/default/icons/mIconExportCatalogFileNode.svg diff --git a/resources/theme/default/icons/mIconExportCatalogRootNode.svg b/src/pyminer/resources/theme/default/icons/mIconExportCatalogRootNode.svg similarity index 100% rename from resources/theme/default/icons/mIconExportCatalogRootNode.svg rename to src/pyminer/resources/theme/default/icons/mIconExportCatalogRootNode.svg diff --git a/resources/theme/default/icons/mIconExportSchemeNode.svg b/src/pyminer/resources/theme/default/icons/mIconExportSchemeNode.svg similarity index 100% rename from resources/theme/default/icons/mIconExportSchemeNode.svg rename to src/pyminer/resources/theme/default/icons/mIconExportSchemeNode.svg diff --git a/resources/theme/default/icons/mIconExportSchemeRootNode.svg b/src/pyminer/resources/theme/default/icons/mIconExportSchemeRootNode.svg similarity index 100% rename from resources/theme/default/icons/mIconExportSchemeRootNode.svg rename to src/pyminer/resources/theme/default/icons/mIconExportSchemeRootNode.svg diff --git a/resources/theme/default/icons/mIconExpression.svg b/src/pyminer/resources/theme/default/icons/mIconExpression.svg similarity index 100% rename from resources/theme/default/icons/mIconExpression.svg rename to src/pyminer/resources/theme/default/icons/mIconExpression.svg diff --git a/resources/theme/default/icons/mIconExpressionSelect.svg b/src/pyminer/resources/theme/default/icons/mIconExpressionSelect.svg similarity index 100% rename from resources/theme/default/icons/mIconExpressionSelect.svg rename to src/pyminer/resources/theme/default/icons/mIconExpressionSelect.svg diff --git a/resources/theme/default/icons/mIconExternApplication.svg b/src/pyminer/resources/theme/default/icons/mIconExternApplication.svg similarity index 100% rename from resources/theme/default/icons/mIconExternApplication.svg rename to src/pyminer/resources/theme/default/icons/mIconExternApplication.svg diff --git a/resources/theme/default/icons/mIconFcs.svg b/src/pyminer/resources/theme/default/icons/mIconFcs.svg similarity index 100% rename from resources/theme/default/icons/mIconFcs.svg rename to src/pyminer/resources/theme/default/icons/mIconFcs.svg diff --git a/resources/theme/default/icons/mIconFifthLevel.svg b/src/pyminer/resources/theme/default/icons/mIconFifthLevel.svg similarity index 100% rename from resources/theme/default/icons/mIconFifthLevel.svg rename to src/pyminer/resources/theme/default/icons/mIconFifthLevel.svg diff --git a/resources/theme/default/icons/mIconFile.svg b/src/pyminer/resources/theme/default/icons/mIconFile.svg similarity index 100% rename from resources/theme/default/icons/mIconFile.svg rename to src/pyminer/resources/theme/default/icons/mIconFile.svg diff --git a/resources/theme/default/icons/mIconFirstLevel.svg b/src/pyminer/resources/theme/default/icons/mIconFirstLevel.svg similarity index 100% rename from resources/theme/default/icons/mIconFirstLevel.svg rename to src/pyminer/resources/theme/default/icons/mIconFirstLevel.svg diff --git a/resources/theme/default/icons/mIconFolder.svg b/src/pyminer/resources/theme/default/icons/mIconFolder.svg similarity index 100% rename from resources/theme/default/icons/mIconFolder.svg rename to src/pyminer/resources/theme/default/icons/mIconFolder.svg diff --git a/resources/theme/default/icons/mIconFolderCatalog.svg b/src/pyminer/resources/theme/default/icons/mIconFolderCatalog.svg similarity index 100% rename from resources/theme/default/icons/mIconFolderCatalog.svg rename to src/pyminer/resources/theme/default/icons/mIconFolderCatalog.svg diff --git a/resources/theme/default/icons/mIconFourthLevel.svg b/src/pyminer/resources/theme/default/icons/mIconFourthLevel.svg similarity index 100% rename from resources/theme/default/icons/mIconFourthLevel.svg rename to src/pyminer/resources/theme/default/icons/mIconFourthLevel.svg diff --git a/resources/theme/default/icons/mIconFtp.svg b/src/pyminer/resources/theme/default/icons/mIconFtp.svg similarity index 100% rename from resources/theme/default/icons/mIconFtp.svg rename to src/pyminer/resources/theme/default/icons/mIconFtp.svg diff --git a/resources/theme/default/icons/mIconFtpConnection.svg b/src/pyminer/resources/theme/default/icons/mIconFtpConnection.svg similarity index 100% rename from resources/theme/default/icons/mIconFtpConnection.svg rename to src/pyminer/resources/theme/default/icons/mIconFtpConnection.svg diff --git a/resources/theme/default/icons/mIconFtpFile.svg b/src/pyminer/resources/theme/default/icons/mIconFtpFile.svg similarity index 100% rename from resources/theme/default/icons/mIconFtpFile.svg rename to src/pyminer/resources/theme/default/icons/mIconFtpFile.svg diff --git a/resources/theme/default/icons/mIconGBase.svg b/src/pyminer/resources/theme/default/icons/mIconGBase.svg similarity index 100% rename from resources/theme/default/icons/mIconGBase.svg rename to src/pyminer/resources/theme/default/icons/mIconGBase.svg diff --git a/resources/theme/default/icons/mIconGdb.svg b/src/pyminer/resources/theme/default/icons/mIconGdb.svg similarity index 100% rename from resources/theme/default/icons/mIconGdb.svg rename to src/pyminer/resources/theme/default/icons/mIconGdb.svg diff --git a/resources/theme/default/icons/mIconGeoMap.svg b/src/pyminer/resources/theme/default/icons/mIconGeoMap.svg similarity index 100% rename from resources/theme/default/icons/mIconGeoMap.svg rename to src/pyminer/resources/theme/default/icons/mIconGeoMap.svg diff --git a/resources/theme/default/icons/mIconGeoModel.svg b/src/pyminer/resources/theme/default/icons/mIconGeoModel.svg similarity index 100% rename from resources/theme/default/icons/mIconGeoModel.svg rename to src/pyminer/resources/theme/default/icons/mIconGeoModel.svg diff --git a/resources/theme/default/icons/mIconImage.svg b/src/pyminer/resources/theme/default/icons/mIconImage.svg similarity index 100% rename from resources/theme/default/icons/mIconImage.svg rename to src/pyminer/resources/theme/default/icons/mIconImage.svg diff --git a/resources/theme/default/icons/mIconInfo.svg b/src/pyminer/resources/theme/default/icons/mIconInfo.svg similarity index 100% rename from resources/theme/default/icons/mIconInfo.svg rename to src/pyminer/resources/theme/default/icons/mIconInfo.svg diff --git a/resources/theme/default/icons/mIconInnerLayer.svg b/src/pyminer/resources/theme/default/icons/mIconInnerLayer.svg similarity index 100% rename from resources/theme/default/icons/mIconInnerLayer.svg rename to src/pyminer/resources/theme/default/icons/mIconInnerLayer.svg diff --git a/resources/theme/default/icons/mIconKingBase.svg b/src/pyminer/resources/theme/default/icons/mIconKingBase.svg similarity index 100% rename from resources/theme/default/icons/mIconKingBase.svg rename to src/pyminer/resources/theme/default/icons/mIconKingBase.svg diff --git a/resources/theme/default/icons/mIconLayer.png b/src/pyminer/resources/theme/default/icons/mIconLayer.png similarity index 100% rename from resources/theme/default/icons/mIconLayer.png rename to src/pyminer/resources/theme/default/icons/mIconLayer.png diff --git a/resources/theme/default/icons/mIconLayer.svg b/src/pyminer/resources/theme/default/icons/mIconLayer.svg similarity index 100% rename from resources/theme/default/icons/mIconLayer.svg rename to src/pyminer/resources/theme/default/icons/mIconLayer.svg diff --git a/resources/theme/default/icons/mIconLayoutTemplate.svg b/src/pyminer/resources/theme/default/icons/mIconLayoutTemplate.svg similarity index 100% rename from resources/theme/default/icons/mIconLayoutTemplate.svg rename to src/pyminer/resources/theme/default/icons/mIconLayoutTemplate.svg diff --git a/resources/theme/default/icons/mIconLayoutTemplateRoot.svg b/src/pyminer/resources/theme/default/icons/mIconLayoutTemplateRoot.svg similarity index 100% rename from resources/theme/default/icons/mIconLayoutTemplateRoot.svg rename to src/pyminer/resources/theme/default/icons/mIconLayoutTemplateRoot.svg diff --git a/resources/theme/default/icons/mIconLineLayer.svg b/src/pyminer/resources/theme/default/icons/mIconLineLayer.svg similarity index 100% rename from resources/theme/default/icons/mIconLineLayer.svg rename to src/pyminer/resources/theme/default/icons/mIconLineLayer.svg diff --git a/resources/theme/default/icons/mIconLineMLayer.svg b/src/pyminer/resources/theme/default/icons/mIconLineMLayer.svg similarity index 100% rename from resources/theme/default/icons/mIconLineMLayer.svg rename to src/pyminer/resources/theme/default/icons/mIconLineMLayer.svg diff --git a/resources/theme/default/icons/mIconLoading.gif b/src/pyminer/resources/theme/default/icons/mIconLoading.gif similarity index 100% rename from resources/theme/default/icons/mIconLoading.gif rename to src/pyminer/resources/theme/default/icons/mIconLoading.gif diff --git a/resources/theme/default/icons/mIconLocalServer.svg b/src/pyminer/resources/theme/default/icons/mIconLocalServer.svg similarity index 100% rename from resources/theme/default/icons/mIconLocalServer.svg rename to src/pyminer/resources/theme/default/icons/mIconLocalServer.svg diff --git a/resources/theme/default/icons/mIconMapFile.svg b/src/pyminer/resources/theme/default/icons/mIconMapFile.svg similarity index 100% rename from resources/theme/default/icons/mIconMapFile.svg rename to src/pyminer/resources/theme/default/icons/mIconMapFile.svg diff --git a/resources/theme/default/icons/mIconMapStyle.svg b/src/pyminer/resources/theme/default/icons/mIconMapStyle.svg similarity index 100% rename from resources/theme/default/icons/mIconMapStyle.svg rename to src/pyminer/resources/theme/default/icons/mIconMapStyle.svg diff --git a/resources/theme/default/icons/mIconMixCatalog.svg b/src/pyminer/resources/theme/default/icons/mIconMixCatalog.svg similarity index 100% rename from resources/theme/default/icons/mIconMixCatalog.svg rename to src/pyminer/resources/theme/default/icons/mIconMixCatalog.svg diff --git a/resources/theme/default/icons/mIconModelLayer.svg b/src/pyminer/resources/theme/default/icons/mIconModelLayer.svg similarity index 100% rename from resources/theme/default/icons/mIconModelLayer.svg rename to src/pyminer/resources/theme/default/icons/mIconModelLayer.svg diff --git a/resources/theme/default/icons/mIconModifyServer.svg b/src/pyminer/resources/theme/default/icons/mIconModifyServer.svg similarity index 100% rename from resources/theme/default/icons/mIconModifyServer.svg rename to src/pyminer/resources/theme/default/icons/mIconModifyServer.svg diff --git a/resources/theme/default/icons/mIconMySQL.svg b/src/pyminer/resources/theme/default/icons/mIconMySQL.svg similarity index 100% rename from resources/theme/default/icons/mIconMySQL.svg rename to src/pyminer/resources/theme/default/icons/mIconMySQL.svg diff --git a/resources/theme/default/icons/mIconNewGroup.svg b/src/pyminer/resources/theme/default/icons/mIconNewGroup.svg similarity index 100% rename from resources/theme/default/icons/mIconNewGroup.svg rename to src/pyminer/resources/theme/default/icons/mIconNewGroup.svg diff --git a/resources/theme/default/icons/mIconNow.svg b/src/pyminer/resources/theme/default/icons/mIconNow.svg similarity index 100% rename from resources/theme/default/icons/mIconNow.svg rename to src/pyminer/resources/theme/default/icons/mIconNow.svg diff --git a/resources/theme/default/icons/mIconOffice.png b/src/pyminer/resources/theme/default/icons/mIconOffice.png similarity index 100% rename from resources/theme/default/icons/mIconOffice.png rename to src/pyminer/resources/theme/default/icons/mIconOffice.png diff --git a/resources/theme/default/icons/mIconOracleSpatial.svg b/src/pyminer/resources/theme/default/icons/mIconOracleSpatial.svg similarity index 100% rename from resources/theme/default/icons/mIconOracleSpatial.svg rename to src/pyminer/resources/theme/default/icons/mIconOracleSpatial.svg diff --git a/resources/theme/default/icons/mIconOutsideLayer.svg b/src/pyminer/resources/theme/default/icons/mIconOutsideLayer.svg similarity index 100% rename from resources/theme/default/icons/mIconOutsideLayer.svg rename to src/pyminer/resources/theme/default/icons/mIconOutsideLayer.svg diff --git a/resources/theme/default/icons/mIconOws.svg b/src/pyminer/resources/theme/default/icons/mIconOws.svg similarity index 100% rename from resources/theme/default/icons/mIconOws.svg rename to src/pyminer/resources/theme/default/icons/mIconOws.svg diff --git a/resources/theme/default/icons/mIconPg.svg b/src/pyminer/resources/theme/default/icons/mIconPg.svg similarity index 100% rename from resources/theme/default/icons/mIconPg.svg rename to src/pyminer/resources/theme/default/icons/mIconPg.svg diff --git a/resources/theme/default/icons/mIconPhysicalTable.svg b/src/pyminer/resources/theme/default/icons/mIconPhysicalTable.svg similarity index 100% rename from resources/theme/default/icons/mIconPhysicalTable.svg rename to src/pyminer/resources/theme/default/icons/mIconPhysicalTable.svg diff --git a/resources/theme/default/icons/mIconPhysicalTenseTable.svg b/src/pyminer/resources/theme/default/icons/mIconPhysicalTenseTable.svg similarity index 100% rename from resources/theme/default/icons/mIconPhysicalTenseTable.svg rename to src/pyminer/resources/theme/default/icons/mIconPhysicalTenseTable.svg diff --git a/resources/theme/default/icons/mIconPointLayer.svg b/src/pyminer/resources/theme/default/icons/mIconPointLayer.svg similarity index 100% rename from resources/theme/default/icons/mIconPointLayer.svg rename to src/pyminer/resources/theme/default/icons/mIconPointLayer.svg diff --git a/resources/theme/default/icons/mIconPointMLayer.svg b/src/pyminer/resources/theme/default/icons/mIconPointMLayer.svg similarity index 100% rename from resources/theme/default/icons/mIconPointMLayer.svg rename to src/pyminer/resources/theme/default/icons/mIconPointMLayer.svg diff --git a/resources/theme/default/icons/mIconPolygonLayer.svg b/src/pyminer/resources/theme/default/icons/mIconPolygonLayer.svg similarity index 100% rename from resources/theme/default/icons/mIconPolygonLayer.svg rename to src/pyminer/resources/theme/default/icons/mIconPolygonLayer.svg diff --git a/resources/theme/default/icons/mIconPolygonMLayer.svg b/src/pyminer/resources/theme/default/icons/mIconPolygonMLayer.svg similarity index 100% rename from resources/theme/default/icons/mIconPolygonMLayer.svg rename to src/pyminer/resources/theme/default/icons/mIconPolygonMLayer.svg diff --git a/resources/theme/default/icons/mIconPostgis.svg b/src/pyminer/resources/theme/default/icons/mIconPostgis.svg similarity index 100% rename from resources/theme/default/icons/mIconPostgis.svg rename to src/pyminer/resources/theme/default/icons/mIconPostgis.svg diff --git a/resources/theme/default/icons/mIconProjectionEnabled.svg b/src/pyminer/resources/theme/default/icons/mIconProjectionEnabled.svg similarity index 100% rename from resources/theme/default/icons/mIconProjectionEnabled.svg rename to src/pyminer/resources/theme/default/icons/mIconProjectionEnabled.svg diff --git a/resources/theme/default/icons/mIconProperties.svg b/src/pyminer/resources/theme/default/icons/mIconProperties.svg similarity index 100% rename from resources/theme/default/icons/mIconProperties.svg rename to src/pyminer/resources/theme/default/icons/mIconProperties.svg diff --git a/resources/theme/default/icons/mIconRaster.svg b/src/pyminer/resources/theme/default/icons/mIconRaster.svg similarity index 100% rename from resources/theme/default/icons/mIconRaster.svg rename to src/pyminer/resources/theme/default/icons/mIconRaster.svg diff --git a/resources/theme/default/icons/mIconRasterGroup.svg b/src/pyminer/resources/theme/default/icons/mIconRasterGroup.svg similarity index 100% rename from resources/theme/default/icons/mIconRasterGroup.svg rename to src/pyminer/resources/theme/default/icons/mIconRasterGroup.svg diff --git a/resources/theme/default/icons/mIconRasterLayer.svg b/src/pyminer/resources/theme/default/icons/mIconRasterLayer.svg similarity index 100% rename from resources/theme/default/icons/mIconRasterLayer.svg rename to src/pyminer/resources/theme/default/icons/mIconRasterLayer.svg diff --git a/resources/theme/default/icons/mIconRegionItemNode.svg b/src/pyminer/resources/theme/default/icons/mIconRegionItemNode.svg similarity index 100% rename from resources/theme/default/icons/mIconRegionItemNode.svg rename to src/pyminer/resources/theme/default/icons/mIconRegionItemNode.svg diff --git a/resources/theme/default/icons/mIconRegionNode.svg b/src/pyminer/resources/theme/default/icons/mIconRegionNode.svg similarity index 100% rename from resources/theme/default/icons/mIconRegionNode.svg rename to src/pyminer/resources/theme/default/icons/mIconRegionNode.svg diff --git a/resources/theme/default/icons/mIconRegionRoot.svg b/src/pyminer/resources/theme/default/icons/mIconRegionRoot.svg similarity index 100% rename from resources/theme/default/icons/mIconRegionRoot.svg rename to src/pyminer/resources/theme/default/icons/mIconRegionRoot.svg diff --git a/resources/theme/default/icons/mIconRegionRootNode.svg b/src/pyminer/resources/theme/default/icons/mIconRegionRootNode.svg similarity index 100% rename from resources/theme/default/icons/mIconRegionRootNode.svg rename to src/pyminer/resources/theme/default/icons/mIconRegionRootNode.svg diff --git a/resources/theme/default/icons/mIconRegionTree.svg b/src/pyminer/resources/theme/default/icons/mIconRegionTree.svg similarity index 100% rename from resources/theme/default/icons/mIconRegionTree.svg rename to src/pyminer/resources/theme/default/icons/mIconRegionTree.svg diff --git a/resources/theme/default/icons/mIconReload.svg b/src/pyminer/resources/theme/default/icons/mIconReload.svg similarity index 100% rename from resources/theme/default/icons/mIconReload.svg rename to src/pyminer/resources/theme/default/icons/mIconReload.svg diff --git a/resources/theme/default/icons/mIconRemoveServer.svg b/src/pyminer/resources/theme/default/icons/mIconRemoveServer.svg similarity index 100% rename from resources/theme/default/icons/mIconRemoveServer.svg rename to src/pyminer/resources/theme/default/icons/mIconRemoveServer.svg diff --git a/resources/theme/default/icons/mIconReportWizard.svg b/src/pyminer/resources/theme/default/icons/mIconReportWizard.svg similarity index 100% rename from resources/theme/default/icons/mIconReportWizard.svg rename to src/pyminer/resources/theme/default/icons/mIconReportWizard.svg diff --git a/resources/theme/default/icons/mIconReserveSelection.svg b/src/pyminer/resources/theme/default/icons/mIconReserveSelection.svg similarity index 100% rename from resources/theme/default/icons/mIconReserveSelection.svg rename to src/pyminer/resources/theme/default/icons/mIconReserveSelection.svg diff --git a/resources/theme/default/icons/mIconResourceCatalog.svg b/src/pyminer/resources/theme/default/icons/mIconResourceCatalog.svg similarity index 100% rename from resources/theme/default/icons/mIconResourceCatalog.svg rename to src/pyminer/resources/theme/default/icons/mIconResourceCatalog.svg diff --git a/resources/theme/default/icons/mIconRule.svg b/src/pyminer/resources/theme/default/icons/mIconRule.svg similarity index 100% rename from resources/theme/default/icons/mIconRule.svg rename to src/pyminer/resources/theme/default/icons/mIconRule.svg diff --git a/resources/theme/default/icons/mIconRuleGroup.svg b/src/pyminer/resources/theme/default/icons/mIconRuleGroup.svg similarity index 100% rename from resources/theme/default/icons/mIconRuleGroup.svg rename to src/pyminer/resources/theme/default/icons/mIconRuleGroup.svg diff --git a/resources/theme/default/icons/mIconRuleRoot.svg b/src/pyminer/resources/theme/default/icons/mIconRuleRoot.svg similarity index 100% rename from resources/theme/default/icons/mIconRuleRoot.svg rename to src/pyminer/resources/theme/default/icons/mIconRuleRoot.svg diff --git a/resources/theme/default/icons/mIconSave.svg b/src/pyminer/resources/theme/default/icons/mIconSave.svg similarity index 100% rename from resources/theme/default/icons/mIconSave.svg rename to src/pyminer/resources/theme/default/icons/mIconSave.svg diff --git a/resources/theme/default/icons/mIconSaveAs.svg b/src/pyminer/resources/theme/default/icons/mIconSaveAs.svg similarity index 100% rename from resources/theme/default/icons/mIconSaveAs.svg rename to src/pyminer/resources/theme/default/icons/mIconSaveAs.svg diff --git a/resources/theme/default/icons/mIconSecondLevel.svg b/src/pyminer/resources/theme/default/icons/mIconSecondLevel.svg similarity index 100% rename from resources/theme/default/icons/mIconSecondLevel.svg rename to src/pyminer/resources/theme/default/icons/mIconSecondLevel.svg diff --git a/resources/theme/default/icons/mIconSelectAll.svg b/src/pyminer/resources/theme/default/icons/mIconSelectAll.svg similarity index 100% rename from resources/theme/default/icons/mIconSelectAll.svg rename to src/pyminer/resources/theme/default/icons/mIconSelectAll.svg diff --git a/resources/theme/default/icons/mIconSelectNone.svg b/src/pyminer/resources/theme/default/icons/mIconSelectNone.svg similarity index 100% rename from resources/theme/default/icons/mIconSelectNone.svg rename to src/pyminer/resources/theme/default/icons/mIconSelectNone.svg diff --git a/resources/theme/default/icons/mIconSelectServer.svg b/src/pyminer/resources/theme/default/icons/mIconSelectServer.svg similarity index 100% rename from resources/theme/default/icons/mIconSelectServer.svg rename to src/pyminer/resources/theme/default/icons/mIconSelectServer.svg diff --git a/resources/theme/default/icons/mIconServer.svg b/src/pyminer/resources/theme/default/icons/mIconServer.svg similarity index 100% rename from resources/theme/default/icons/mIconServer.svg rename to src/pyminer/resources/theme/default/icons/mIconServer.svg diff --git a/resources/theme/default/icons/mIconServerManager.svg b/src/pyminer/resources/theme/default/icons/mIconServerManager.svg similarity index 100% rename from resources/theme/default/icons/mIconServerManager.svg rename to src/pyminer/resources/theme/default/icons/mIconServerManager.svg diff --git a/resources/theme/default/icons/mIconSetColor.svg b/src/pyminer/resources/theme/default/icons/mIconSetColor.svg similarity index 100% rename from resources/theme/default/icons/mIconSetColor.svg rename to src/pyminer/resources/theme/default/icons/mIconSetColor.svg diff --git a/resources/theme/default/icons/mIconShowStyle.svg b/src/pyminer/resources/theme/default/icons/mIconShowStyle.svg similarity index 100% rename from resources/theme/default/icons/mIconShowStyle.svg rename to src/pyminer/resources/theme/default/icons/mIconShowStyle.svg diff --git a/resources/theme/default/icons/mIconShp.svg b/src/pyminer/resources/theme/default/icons/mIconShp.svg similarity index 100% rename from resources/theme/default/icons/mIconShp.svg rename to src/pyminer/resources/theme/default/icons/mIconShp.svg diff --git a/resources/theme/default/icons/mIconSixthLevel.svg b/src/pyminer/resources/theme/default/icons/mIconSixthLevel.svg similarity index 100% rename from resources/theme/default/icons/mIconSixthLevel.svg rename to src/pyminer/resources/theme/default/icons/mIconSixthLevel.svg diff --git a/resources/theme/default/icons/mIconSnapping.svg b/src/pyminer/resources/theme/default/icons/mIconSnapping.svg similarity index 100% rename from resources/theme/default/icons/mIconSnapping.svg rename to src/pyminer/resources/theme/default/icons/mIconSnapping.svg diff --git a/resources/theme/default/icons/mIconSqlite.svg b/src/pyminer/resources/theme/default/icons/mIconSqlite.svg similarity index 100% rename from resources/theme/default/icons/mIconSqlite.svg rename to src/pyminer/resources/theme/default/icons/mIconSqlite.svg diff --git a/resources/theme/default/icons/mIconSuccess.svg b/src/pyminer/resources/theme/default/icons/mIconSuccess.svg similarity index 100% rename from resources/theme/default/icons/mIconSuccess.svg rename to src/pyminer/resources/theme/default/icons/mIconSuccess.svg diff --git a/resources/theme/default/icons/mIconSystem.svg b/src/pyminer/resources/theme/default/icons/mIconSystem.svg similarity index 100% rename from resources/theme/default/icons/mIconSystem.svg rename to src/pyminer/resources/theme/default/icons/mIconSystem.svg diff --git a/resources/theme/default/icons/mIconTable.svg b/src/pyminer/resources/theme/default/icons/mIconTable.svg similarity index 100% rename from resources/theme/default/icons/mIconTable.svg rename to src/pyminer/resources/theme/default/icons/mIconTable.svg diff --git a/resources/theme/default/icons/mIconTableLayer.svg b/src/pyminer/resources/theme/default/icons/mIconTableLayer.svg similarity index 100% rename from resources/theme/default/icons/mIconTableLayer.svg rename to src/pyminer/resources/theme/default/icons/mIconTableLayer.svg diff --git a/resources/theme/default/icons/mIconTableMLayer.svg b/src/pyminer/resources/theme/default/icons/mIconTableMLayer.svg similarity index 100% rename from resources/theme/default/icons/mIconTableMLayer.svg rename to src/pyminer/resources/theme/default/icons/mIconTableMLayer.svg diff --git a/resources/theme/default/icons/mIconTense.svg b/src/pyminer/resources/theme/default/icons/mIconTense.svg similarity index 100% rename from resources/theme/default/icons/mIconTense.svg rename to src/pyminer/resources/theme/default/icons/mIconTense.svg diff --git a/resources/theme/default/icons/mIconThirdLevel.svg b/src/pyminer/resources/theme/default/icons/mIconThirdLevel.svg similarity index 100% rename from resources/theme/default/icons/mIconThirdLevel.svg rename to src/pyminer/resources/theme/default/icons/mIconThirdLevel.svg diff --git a/resources/theme/default/icons/mIconTile.svg b/src/pyminer/resources/theme/default/icons/mIconTile.svg similarity index 100% rename from resources/theme/default/icons/mIconTile.svg rename to src/pyminer/resources/theme/default/icons/mIconTile.svg diff --git a/resources/theme/default/icons/mIconTileLayer.svg b/src/pyminer/resources/theme/default/icons/mIconTileLayer.svg similarity index 100% rename from resources/theme/default/icons/mIconTileLayer.svg rename to src/pyminer/resources/theme/default/icons/mIconTileLayer.svg diff --git a/resources/theme/default/icons/mIconTimerContinue.svg b/src/pyminer/resources/theme/default/icons/mIconTimerContinue.svg similarity index 100% rename from resources/theme/default/icons/mIconTimerContinue.svg rename to src/pyminer/resources/theme/default/icons/mIconTimerContinue.svg diff --git a/resources/theme/default/icons/mIconTimerPause.svg b/src/pyminer/resources/theme/default/icons/mIconTimerPause.svg similarity index 100% rename from resources/theme/default/icons/mIconTimerPause.svg rename to src/pyminer/resources/theme/default/icons/mIconTimerPause.svg diff --git a/resources/theme/default/icons/mIconTxt.svg b/src/pyminer/resources/theme/default/icons/mIconTxt.svg similarity index 100% rename from resources/theme/default/icons/mIconTxt.svg rename to src/pyminer/resources/theme/default/icons/mIconTxt.svg diff --git a/resources/theme/default/icons/mIconType.svg b/src/pyminer/resources/theme/default/icons/mIconType.svg similarity index 100% rename from resources/theme/default/icons/mIconType.svg rename to src/pyminer/resources/theme/default/icons/mIconType.svg diff --git a/resources/theme/default/icons/mIconVCT.svg b/src/pyminer/resources/theme/default/icons/mIconVCT.svg similarity index 100% rename from resources/theme/default/icons/mIconVCT.svg rename to src/pyminer/resources/theme/default/icons/mIconVCT.svg diff --git a/resources/theme/default/icons/mIconValueRangDic.svg b/src/pyminer/resources/theme/default/icons/mIconValueRangDic.svg similarity index 100% rename from resources/theme/default/icons/mIconValueRangDic.svg rename to src/pyminer/resources/theme/default/icons/mIconValueRangDic.svg diff --git a/resources/theme/default/icons/mIconValueRange.svg b/src/pyminer/resources/theme/default/icons/mIconValueRange.svg similarity index 100% rename from resources/theme/default/icons/mIconValueRange.svg rename to src/pyminer/resources/theme/default/icons/mIconValueRange.svg diff --git a/resources/theme/default/icons/mIconValueRangeRange.svg b/src/pyminer/resources/theme/default/icons/mIconValueRangeRange.svg similarity index 100% rename from resources/theme/default/icons/mIconValueRangeRange.svg rename to src/pyminer/resources/theme/default/icons/mIconValueRangeRange.svg diff --git a/resources/theme/default/icons/mIconWarning.svg b/src/pyminer/resources/theme/default/icons/mIconWarning.svg similarity index 100% rename from resources/theme/default/icons/mIconWarning.svg rename to src/pyminer/resources/theme/default/icons/mIconWarning.svg diff --git a/resources/theme/default/icons/mIconWcs.svg b/src/pyminer/resources/theme/default/icons/mIconWcs.svg similarity index 100% rename from resources/theme/default/icons/mIconWcs.svg rename to src/pyminer/resources/theme/default/icons/mIconWcs.svg diff --git a/resources/theme/default/icons/mIconWfs.svg b/src/pyminer/resources/theme/default/icons/mIconWfs.svg similarity index 100% rename from resources/theme/default/icons/mIconWfs.svg rename to src/pyminer/resources/theme/default/icons/mIconWfs.svg diff --git a/resources/theme/default/icons/mIconWms.svg b/src/pyminer/resources/theme/default/icons/mIconWms.svg similarity index 100% rename from resources/theme/default/icons/mIconWms.svg rename to src/pyminer/resources/theme/default/icons/mIconWms.svg diff --git a/resources/theme/default/icons/mIconWmts.svg b/src/pyminer/resources/theme/default/icons/mIconWmts.svg similarity index 100% rename from resources/theme/default/icons/mIconWmts.svg rename to src/pyminer/resources/theme/default/icons/mIconWmts.svg diff --git a/resources/theme/default/icons/mIconXYZTile.svg b/src/pyminer/resources/theme/default/icons/mIconXYZTile.svg similarity index 100% rename from resources/theme/default/icons/mIconXYZTile.svg rename to src/pyminer/resources/theme/default/icons/mIconXYZTile.svg diff --git a/resources/theme/default/icons/mIconYearChangeDataInittail.svg b/src/pyminer/resources/theme/default/icons/mIconYearChangeDataInittail.svg similarity index 100% rename from resources/theme/default/icons/mIconYearChangeDataInittail.svg rename to src/pyminer/resources/theme/default/icons/mIconYearChangeDataInittail.svg diff --git a/resources/theme/default/icons/mLayerSaveAs.svg b/src/pyminer/resources/theme/default/icons/mLayerSaveAs.svg similarity index 100% rename from resources/theme/default/icons/mLayerSaveAs.svg rename to src/pyminer/resources/theme/default/icons/mLayerSaveAs.svg diff --git a/resources/theme/default/icons/mPolygonDifference.svg b/src/pyminer/resources/theme/default/icons/mPolygonDifference.svg similarity index 100% rename from resources/theme/default/icons/mPolygonDifference.svg rename to src/pyminer/resources/theme/default/icons/mPolygonDifference.svg diff --git a/resources/theme/default/icons/mPolygonIntersection.svg b/src/pyminer/resources/theme/default/icons/mPolygonIntersection.svg similarity index 100% rename from resources/theme/default/icons/mPolygonIntersection.svg rename to src/pyminer/resources/theme/default/icons/mPolygonIntersection.svg diff --git a/resources/theme/default/icons/mPubLayerRoot.svg b/src/pyminer/resources/theme/default/icons/mPubLayerRoot.svg similarity index 100% rename from resources/theme/default/icons/mPubLayerRoot.svg rename to src/pyminer/resources/theme/default/icons/mPubLayerRoot.svg diff --git a/resources/theme/default/icons/mPubLayerSet.svg b/src/pyminer/resources/theme/default/icons/mPubLayerSet.svg similarity index 100% rename from resources/theme/default/icons/mPubLayerSet.svg rename to src/pyminer/resources/theme/default/icons/mPubLayerSet.svg diff --git a/resources/theme/default/icons/mPubLayerSimple.svg b/src/pyminer/resources/theme/default/icons/mPubLayerSimple.svg similarity index 100% rename from resources/theme/default/icons/mPubLayerSimple.svg rename to src/pyminer/resources/theme/default/icons/mPubLayerSimple.svg diff --git a/resources/theme/default/icons/mPyramidManage.svg b/src/pyminer/resources/theme/default/icons/mPyramidManage.svg similarity index 100% rename from resources/theme/default/icons/mPyramidManage.svg rename to src/pyminer/resources/theme/default/icons/mPyramidManage.svg diff --git a/resources/theme/default/icons/mRefreshErrorStatus.svg b/src/pyminer/resources/theme/default/icons/mRefreshErrorStatus.svg similarity index 100% rename from resources/theme/default/icons/mRefreshErrorStatus.svg rename to src/pyminer/resources/theme/default/icons/mRefreshErrorStatus.svg diff --git a/resources/theme/default/icons/mReportExport.svg b/src/pyminer/resources/theme/default/icons/mReportExport.svg similarity index 100% rename from resources/theme/default/icons/mReportExport.svg rename to src/pyminer/resources/theme/default/icons/mReportExport.svg diff --git a/resources/theme/default/icons/mReportSetting.svg b/src/pyminer/resources/theme/default/icons/mReportSetting.svg similarity index 100% rename from resources/theme/default/icons/mReportSetting.svg rename to src/pyminer/resources/theme/default/icons/mReportSetting.svg diff --git a/resources/theme/default/icons/mSourceFields.svg b/src/pyminer/resources/theme/default/icons/mSourceFields.svg similarity index 100% rename from resources/theme/default/icons/mSourceFields.svg rename to src/pyminer/resources/theme/default/icons/mSourceFields.svg diff --git a/resources/theme/default/icons/mStartCheckProcess.svg b/src/pyminer/resources/theme/default/icons/mStartCheckProcess.svg similarity index 100% rename from resources/theme/default/icons/mStartCheckProcess.svg rename to src/pyminer/resources/theme/default/icons/mStartCheckProcess.svg diff --git a/resources/theme/default/icons/mactionaddordergroup.svg b/src/pyminer/resources/theme/default/icons/mactionaddordergroup.svg similarity index 100% rename from resources/theme/default/icons/mactionaddordergroup.svg rename to src/pyminer/resources/theme/default/icons/mactionaddordergroup.svg diff --git a/resources/theme/default/icons/mapConfig.png b/src/pyminer/resources/theme/default/icons/mapConfig.png similarity index 100% rename from resources/theme/default/icons/mapConfig.png rename to src/pyminer/resources/theme/default/icons/mapConfig.png diff --git a/resources/theme/default/icons/mapConfig.svg b/src/pyminer/resources/theme/default/icons/mapConfig.svg similarity index 100% rename from resources/theme/default/icons/mapConfig.svg rename to src/pyminer/resources/theme/default/icons/mapConfig.svg diff --git a/resources/theme/default/icons/markdown.svg b/src/pyminer/resources/theme/default/icons/markdown.svg similarity index 100% rename from resources/theme/default/icons/markdown.svg rename to src/pyminer/resources/theme/default/icons/markdown.svg diff --git a/resources/theme/default/icons/matlab.svg b/src/pyminer/resources/theme/default/icons/matlab.svg similarity index 100% rename from resources/theme/default/icons/matlab.svg rename to src/pyminer/resources/theme/default/icons/matlab.svg diff --git a/resources/theme/default/icons/measureConfig.svg b/src/pyminer/resources/theme/default/icons/measureConfig.svg similarity index 100% rename from resources/theme/default/icons/measureConfig.svg rename to src/pyminer/resources/theme/default/icons/measureConfig.svg diff --git a/resources/theme/default/icons/merge_h.svg b/src/pyminer/resources/theme/default/icons/merge_h.svg similarity index 100% rename from resources/theme/default/icons/merge_h.svg rename to src/pyminer/resources/theme/default/icons/merge_h.svg diff --git a/resources/theme/default/icons/merge_v.svg b/src/pyminer/resources/theme/default/icons/merge_v.svg similarity index 100% rename from resources/theme/default/icons/merge_v.svg rename to src/pyminer/resources/theme/default/icons/merge_v.svg diff --git a/resources/theme/default/icons/metadata.svg b/src/pyminer/resources/theme/default/icons/metadata.svg similarity index 100% rename from resources/theme/default/icons/metadata.svg rename to src/pyminer/resources/theme/default/icons/metadata.svg diff --git a/resources/theme/default/icons/missing_value.svg b/src/pyminer/resources/theme/default/icons/missing_value.svg similarity index 100% rename from resources/theme/default/icons/missing_value.svg rename to src/pyminer/resources/theme/default/icons/missing_value.svg diff --git a/resources/theme/default/icons/model_selection.svg b/src/pyminer/resources/theme/default/icons/model_selection.svg similarity index 100% rename from resources/theme/default/icons/model_selection.svg rename to src/pyminer/resources/theme/default/icons/model_selection.svg diff --git a/resources/theme/default/icons/modified.png b/src/pyminer/resources/theme/default/icons/modified.png similarity index 100% rename from resources/theme/default/icons/modified.png rename to src/pyminer/resources/theme/default/icons/modified.png diff --git a/resources/theme/default/icons/multieditChangedValues.svg b/src/pyminer/resources/theme/default/icons/multieditChangedValues.svg similarity index 100% rename from resources/theme/default/icons/multieditChangedValues.svg rename to src/pyminer/resources/theme/default/icons/multieditChangedValues.svg diff --git a/resources/theme/default/icons/multieditMixedValues.svg b/src/pyminer/resources/theme/default/icons/multieditMixedValues.svg similarity index 100% rename from resources/theme/default/icons/multieditMixedValues.svg rename to src/pyminer/resources/theme/default/icons/multieditMixedValues.svg diff --git a/resources/theme/default/icons/multieditSameValues.svg b/src/pyminer/resources/theme/default/icons/multieditSameValues.svg similarity index 100% rename from resources/theme/default/icons/multieditSameValues.svg rename to src/pyminer/resources/theme/default/icons/multieditSameValues.svg diff --git a/resources/theme/default/icons/mvectorlayercache.svg b/src/pyminer/resources/theme/default/icons/mvectorlayercache.svg similarity index 100% rename from resources/theme/default/icons/mvectorlayercache.svg rename to src/pyminer/resources/theme/default/icons/mvectorlayercache.svg diff --git a/resources/theme/default/icons/nActionBasicStatistic.svg b/src/pyminer/resources/theme/default/icons/nActionBasicStatistic.svg similarity index 100% rename from resources/theme/default/icons/nActionBasicStatistic.svg rename to src/pyminer/resources/theme/default/icons/nActionBasicStatistic.svg diff --git a/resources/theme/default/icons/net.svg b/src/pyminer/resources/theme/default/icons/net.svg similarity index 100% rename from resources/theme/default/icons/net.svg rename to src/pyminer/resources/theme/default/icons/net.svg diff --git a/resources/theme/default/icons/new.svg b/src/pyminer/resources/theme/default/icons/new.svg similarity index 100% rename from resources/theme/default/icons/new.svg rename to src/pyminer/resources/theme/default/icons/new.svg diff --git a/resources/theme/default/icons/new_project.svg b/src/pyminer/resources/theme/default/icons/new_project.svg similarity index 100% rename from resources/theme/default/icons/new_project.svg rename to src/pyminer/resources/theme/default/icons/new_project.svg diff --git a/resources/theme/default/icons/newvectorfile.svg b/src/pyminer/resources/theme/default/icons/newvectorfile.svg similarity index 100% rename from resources/theme/default/icons/newvectorfile.svg rename to src/pyminer/resources/theme/default/icons/newvectorfile.svg diff --git a/resources/theme/default/icons/next.png b/src/pyminer/resources/theme/default/icons/next.png similarity index 100% rename from resources/theme/default/icons/next.png rename to src/pyminer/resources/theme/default/icons/next.png diff --git a/resources/theme/default/icons/nextConflict.svg b/src/pyminer/resources/theme/default/icons/nextConflict.svg similarity index 100% rename from resources/theme/default/icons/nextConflict.svg rename to src/pyminer/resources/theme/default/icons/nextConflict.svg diff --git a/resources/theme/default/icons/non_versioned.png b/src/pyminer/resources/theme/default/icons/non_versioned.png similarity index 100% rename from resources/theme/default/icons/non_versioned.png rename to src/pyminer/resources/theme/default/icons/non_versioned.png diff --git a/resources/theme/default/icons/normal.png b/src/pyminer/resources/theme/default/icons/normal.png similarity index 100% rename from resources/theme/default/icons/normal.png rename to src/pyminer/resources/theme/default/icons/normal.png diff --git a/resources/theme/default/icons/numpy.svg b/src/pyminer/resources/theme/default/icons/numpy.svg similarity index 100% rename from resources/theme/default/icons/numpy.svg rename to src/pyminer/resources/theme/default/icons/numpy.svg diff --git a/resources/theme/default/icons/open.svg b/src/pyminer/resources/theme/default/icons/open.svg similarity index 100% rename from resources/theme/default/icons/open.svg rename to src/pyminer/resources/theme/default/icons/open.svg diff --git a/resources/theme/default/icons/open_folder.svg b/src/pyminer/resources/theme/default/icons/open_folder.svg similarity index 100% rename from resources/theme/default/icons/open_folder.svg rename to src/pyminer/resources/theme/default/icons/open_folder.svg diff --git a/resources/theme/default/icons/oracle.svg b/src/pyminer/resources/theme/default/icons/oracle.svg similarity index 100% rename from resources/theme/default/icons/oracle.svg rename to src/pyminer/resources/theme/default/icons/oracle.svg diff --git a/resources/theme/default/icons/orderlayergroup.svg b/src/pyminer/resources/theme/default/icons/orderlayergroup.svg similarity index 100% rename from resources/theme/default/icons/orderlayergroup.svg rename to src/pyminer/resources/theme/default/icons/orderlayergroup.svg diff --git a/resources/theme/default/icons/overlay.png b/src/pyminer/resources/theme/default/icons/overlay.png similarity index 100% rename from resources/theme/default/icons/overlay.png rename to src/pyminer/resources/theme/default/icons/overlay.png diff --git a/resources/theme/default/icons/package.svg b/src/pyminer/resources/theme/default/icons/package.svg similarity index 100% rename from resources/theme/default/icons/package.svg rename to src/pyminer/resources/theme/default/icons/package.svg diff --git a/resources/theme/default/icons/pagesetup.svg b/src/pyminer/resources/theme/default/icons/pagesetup.svg similarity index 100% rename from resources/theme/default/icons/pagesetup.svg rename to src/pyminer/resources/theme/default/icons/pagesetup.svg diff --git a/resources/theme/default/icons/paste.svg b/src/pyminer/resources/theme/default/icons/paste.svg similarity index 100% rename from resources/theme/default/icons/paste.svg rename to src/pyminer/resources/theme/default/icons/paste.svg diff --git a/resources/theme/default/icons/pasteElement.svg b/src/pyminer/resources/theme/default/icons/pasteElement.svg similarity index 100% rename from resources/theme/default/icons/pasteElement.svg rename to src/pyminer/resources/theme/default/icons/pasteElement.svg diff --git a/resources/theme/default/icons/pausefly.svg b/src/pyminer/resources/theme/default/icons/pausefly.svg similarity index 100% rename from resources/theme/default/icons/pausefly.svg rename to src/pyminer/resources/theme/default/icons/pausefly.svg diff --git a/resources/theme/default/icons/plugin-installed.svg b/src/pyminer/resources/theme/default/icons/plugin-installed.svg similarity index 100% rename from resources/theme/default/icons/plugin-installed.svg rename to src/pyminer/resources/theme/default/icons/plugin-installed.svg diff --git a/resources/theme/default/icons/plugin.svg b/src/pyminer/resources/theme/default/icons/plugin.svg similarity index 100% rename from resources/theme/default/icons/plugin.svg rename to src/pyminer/resources/theme/default/icons/plugin.svg diff --git a/resources/theme/default/icons/plugins.svg b/src/pyminer/resources/theme/default/icons/plugins.svg similarity index 100% rename from resources/theme/default/icons/plugins.svg rename to src/pyminer/resources/theme/default/icons/plugins.svg diff --git a/resources/theme/default/icons/postgresql.svg b/src/pyminer/resources/theme/default/icons/postgresql.svg similarity index 100% rename from resources/theme/default/icons/postgresql.svg rename to src/pyminer/resources/theme/default/icons/postgresql.svg diff --git a/resources/theme/default/icons/previous.png b/src/pyminer/resources/theme/default/icons/previous.png similarity index 100% rename from resources/theme/default/icons/previous.png rename to src/pyminer/resources/theme/default/icons/previous.png diff --git a/resources/theme/default/icons/previousConflict.svg b/src/pyminer/resources/theme/default/icons/previousConflict.svg similarity index 100% rename from resources/theme/default/icons/previousConflict.svg rename to src/pyminer/resources/theme/default/icons/previousConflict.svg diff --git a/resources/theme/default/icons/print.svg b/src/pyminer/resources/theme/default/icons/print.svg similarity index 100% rename from resources/theme/default/icons/print.svg rename to src/pyminer/resources/theme/default/icons/print.svg diff --git a/resources/theme/default/icons/processingAlgorithm.svg b/src/pyminer/resources/theme/default/icons/processingAlgorithm.svg similarity index 100% rename from resources/theme/default/icons/processingAlgorithm.svg rename to src/pyminer/resources/theme/default/icons/processingAlgorithm.svg diff --git a/resources/theme/default/icons/project.svg b/src/pyminer/resources/theme/default/icons/project.svg similarity index 100% rename from resources/theme/default/icons/project.svg rename to src/pyminer/resources/theme/default/icons/project.svg diff --git a/resources/theme/default/icons/projectDataTree.svg b/src/pyminer/resources/theme/default/icons/projectDataTree.svg similarity index 100% rename from resources/theme/default/icons/projectDataTree.svg rename to src/pyminer/resources/theme/default/icons/projectDataTree.svg diff --git a/resources/theme/default/icons/providerQGeomap.svg b/src/pyminer/resources/theme/default/icons/providerQGeomap.svg similarity index 100% rename from resources/theme/default/icons/providerQGeomap.svg rename to src/pyminer/resources/theme/default/icons/providerQGeomap.svg diff --git a/resources/theme/default/icons/pypi.svg b/src/pyminer/resources/theme/default/icons/pypi.svg similarity index 100% rename from resources/theme/default/icons/pypi.svg rename to src/pyminer/resources/theme/default/icons/pypi.svg diff --git a/resources/theme/default/icons/pypi_color.svg b/src/pyminer/resources/theme/default/icons/pypi_color.svg similarity index 100% rename from resources/theme/default/icons/pypi_color.svg rename to src/pyminer/resources/theme/default/icons/pypi_color.svg diff --git a/resources/theme/default/icons/pyramids.png b/src/pyminer/resources/theme/default/icons/pyramids.png similarity index 100% rename from resources/theme/default/icons/pyramids.png rename to src/pyminer/resources/theme/default/icons/pyramids.png diff --git a/resources/theme/default/icons/python.svg b/src/pyminer/resources/theme/default/icons/python.svg similarity index 100% rename from resources/theme/default/icons/python.svg rename to src/pyminer/resources/theme/default/icons/python.svg diff --git a/resources/theme/default/icons/python_gray.svg b/src/pyminer/resources/theme/default/icons/python_gray.svg similarity index 100% rename from resources/theme/default/icons/python_gray.svg rename to src/pyminer/resources/theme/default/icons/python_gray.svg diff --git a/resources/theme/default/icons/qgeodataspecificationmanagertool.ico b/src/pyminer/resources/theme/default/icons/qgeodataspecificationmanagertool.ico similarity index 100% rename from resources/theme/default/icons/qgeodataspecificationmanagertool.ico rename to src/pyminer/resources/theme/default/icons/qgeodataspecificationmanagertool.ico diff --git a/resources/theme/default/icons/reduce.svg b/src/pyminer/resources/theme/default/icons/reduce.svg similarity index 100% rename from resources/theme/default/icons/reduce.svg rename to src/pyminer/resources/theme/default/icons/reduce.svg diff --git a/resources/theme/default/icons/regression.svg b/src/pyminer/resources/theme/default/icons/regression.svg similarity index 100% rename from resources/theme/default/icons/regression.svg rename to src/pyminer/resources/theme/default/icons/regression.svg diff --git a/resources/theme/default/icons/remove.svg b/src/pyminer/resources/theme/default/icons/remove.svg similarity index 100% rename from resources/theme/default/icons/remove.svg rename to src/pyminer/resources/theme/default/icons/remove.svg diff --git a/resources/theme/default/icons/removeElement.svg b/src/pyminer/resources/theme/default/icons/removeElement.svg similarity index 100% rename from resources/theme/default/icons/removeElement.svg rename to src/pyminer/resources/theme/default/icons/removeElement.svg diff --git a/resources/theme/default/icons/rendering.svg b/src/pyminer/resources/theme/default/icons/rendering.svg similarity index 100% rename from resources/theme/default/icons/rendering.svg rename to src/pyminer/resources/theme/default/icons/rendering.svg diff --git a/resources/theme/default/icons/replace.svg b/src/pyminer/resources/theme/default/icons/replace.svg similarity index 100% rename from resources/theme/default/icons/replace.svg rename to src/pyminer/resources/theme/default/icons/replace.svg diff --git a/resources/theme/default/icons/resolved.svg b/src/pyminer/resources/theme/default/icons/resolved.svg similarity index 100% rename from resources/theme/default/icons/resolved.svg rename to src/pyminer/resources/theme/default/icons/resolved.svg diff --git a/resources/theme/default/icons/ribbonMaximize.png b/src/pyminer/resources/theme/default/icons/ribbonMaximize.png similarity index 100% rename from resources/theme/default/icons/ribbonMaximize.png rename to src/pyminer/resources/theme/default/icons/ribbonMaximize.png diff --git a/resources/theme/default/icons/ribbonMinimize.png b/src/pyminer/resources/theme/default/icons/ribbonMinimize.png similarity index 100% rename from resources/theme/default/icons/ribbonMinimize.png rename to src/pyminer/resources/theme/default/icons/ribbonMinimize.png diff --git a/resources/theme/default/icons/right.svg b/src/pyminer/resources/theme/default/icons/right.svg similarity index 100% rename from resources/theme/default/icons/right.svg rename to src/pyminer/resources/theme/default/icons/right.svg diff --git a/resources/theme/default/icons/roaming.svg b/src/pyminer/resources/theme/default/icons/roaming.svg similarity index 100% rename from resources/theme/default/icons/roaming.svg rename to src/pyminer/resources/theme/default/icons/roaming.svg diff --git a/resources/theme/default/icons/rubberBandConfig.svg b/src/pyminer/resources/theme/default/icons/rubberBandConfig.svg similarity index 100% rename from resources/theme/default/icons/rubberBandConfig.svg rename to src/pyminer/resources/theme/default/icons/rubberBandConfig.svg diff --git a/resources/theme/default/icons/run.svg b/src/pyminer/resources/theme/default/icons/run.svg similarity index 100% rename from resources/theme/default/icons/run.svg rename to src/pyminer/resources/theme/default/icons/run.svg diff --git a/resources/theme/default/icons/sample.svg b/src/pyminer/resources/theme/default/icons/sample.svg similarity index 100% rename from resources/theme/default/icons/sample.svg rename to src/pyminer/resources/theme/default/icons/sample.svg diff --git a/resources/theme/default/icons/sas.ico b/src/pyminer/resources/theme/default/icons/sas.ico similarity index 100% rename from resources/theme/default/icons/sas.ico rename to src/pyminer/resources/theme/default/icons/sas.ico diff --git a/resources/theme/default/icons/save.svg b/src/pyminer/resources/theme/default/icons/save.svg similarity index 100% rename from resources/theme/default/icons/save.svg rename to src/pyminer/resources/theme/default/icons/save.svg diff --git a/resources/theme/default/icons/save_layout.svg b/src/pyminer/resources/theme/default/icons/save_layout.svg similarity index 100% rename from resources/theme/default/icons/save_layout.svg rename to src/pyminer/resources/theme/default/icons/save_layout.svg diff --git a/resources/theme/default/icons/scale.svg b/src/pyminer/resources/theme/default/icons/scale.svg similarity index 100% rename from resources/theme/default/icons/scale.svg rename to src/pyminer/resources/theme/default/icons/scale.svg diff --git a/resources/theme/default/icons/scaleAdd.svg b/src/pyminer/resources/theme/default/icons/scaleAdd.svg similarity index 100% rename from resources/theme/default/icons/scaleAdd.svg rename to src/pyminer/resources/theme/default/icons/scaleAdd.svg diff --git a/resources/theme/default/icons/scaleClear.svg b/src/pyminer/resources/theme/default/icons/scaleClear.svg similarity index 100% rename from resources/theme/default/icons/scaleClear.svg rename to src/pyminer/resources/theme/default/icons/scaleClear.svg diff --git a/resources/theme/default/icons/scaleRemove.svg b/src/pyminer/resources/theme/default/icons/scaleRemove.svg similarity index 100% rename from resources/theme/default/icons/scaleRemove.svg rename to src/pyminer/resources/theme/default/icons/scaleRemove.svg diff --git a/resources/theme/default/icons/scaleReset.svg b/src/pyminer/resources/theme/default/icons/scaleReset.svg similarity index 100% rename from resources/theme/default/icons/scaleReset.svg rename to src/pyminer/resources/theme/default/icons/scaleReset.svg diff --git a/resources/theme/default/icons/scalebartext.svg b/src/pyminer/resources/theme/default/icons/scalebartext.svg similarity index 100% rename from resources/theme/default/icons/scalebartext.svg rename to src/pyminer/resources/theme/default/icons/scalebartext.svg diff --git a/resources/theme/default/icons/scorecard.svg b/src/pyminer/resources/theme/default/icons/scorecard.svg similarity index 100% rename from resources/theme/default/icons/scorecard.svg rename to src/pyminer/resources/theme/default/icons/scorecard.svg diff --git a/resources/theme/default/icons/script.svg b/src/pyminer/resources/theme/default/icons/script.svg similarity index 100% rename from resources/theme/default/icons/script.svg rename to src/pyminer/resources/theme/default/icons/script.svg diff --git a/resources/theme/default/icons/search.svg b/src/pyminer/resources/theme/default/icons/search.svg similarity index 100% rename from resources/theme/default/icons/search.svg rename to src/pyminer/resources/theme/default/icons/search.svg diff --git a/resources/theme/default/icons/section.svg b/src/pyminer/resources/theme/default/icons/section.svg similarity index 100% rename from resources/theme/default/icons/section.svg rename to src/pyminer/resources/theme/default/icons/section.svg diff --git a/resources/theme/default/icons/selectedrecords.svg b/src/pyminer/resources/theme/default/icons/selectedrecords.svg similarity index 100% rename from resources/theme/default/icons/selectedrecords.svg rename to src/pyminer/resources/theme/default/icons/selectedrecords.svg diff --git a/resources/theme/default/icons/setExtent.svg b/src/pyminer/resources/theme/default/icons/setExtent.svg similarity index 100% rename from resources/theme/default/icons/setExtent.svg rename to src/pyminer/resources/theme/default/icons/setExtent.svg diff --git a/resources/theme/default/icons/setting.svg b/src/pyminer/resources/theme/default/icons/setting.svg similarity index 100% rename from resources/theme/default/icons/setting.svg rename to src/pyminer/resources/theme/default/icons/setting.svg diff --git a/resources/theme/default/icons/shengcunfenxi.svg b/src/pyminer/resources/theme/default/icons/shengcunfenxi.svg similarity index 100% rename from resources/theme/default/icons/shengcunfenxi.svg rename to src/pyminer/resources/theme/default/icons/shengcunfenxi.svg diff --git a/resources/theme/default/icons/shortcutsConfig.svg b/src/pyminer/resources/theme/default/icons/shortcutsConfig.svg similarity index 100% rename from resources/theme/default/icons/shortcutsConfig.svg rename to src/pyminer/resources/theme/default/icons/shortcutsConfig.svg diff --git a/resources/theme/default/icons/simplearrow.svg b/src/pyminer/resources/theme/default/icons/simplearrow.svg similarity index 100% rename from resources/theme/default/icons/simplearrow.svg rename to src/pyminer/resources/theme/default/icons/simplearrow.svg diff --git a/resources/theme/default/icons/situationpoint.svg b/src/pyminer/resources/theme/default/icons/situationpoint.svg similarity index 100% rename from resources/theme/default/icons/situationpoint.svg rename to src/pyminer/resources/theme/default/icons/situationpoint.svg diff --git a/resources/theme/default/icons/skip_line.svg b/src/pyminer/resources/theme/default/icons/skip_line.svg similarity index 100% rename from resources/theme/default/icons/skip_line.svg rename to src/pyminer/resources/theme/default/icons/skip_line.svg diff --git a/resources/theme/default/icons/slider_close.svg b/src/pyminer/resources/theme/default/icons/slider_close.svg similarity index 100% rename from resources/theme/default/icons/slider_close.svg rename to src/pyminer/resources/theme/default/icons/slider_close.svg diff --git a/resources/theme/default/icons/slider_lasttime.svg b/src/pyminer/resources/theme/default/icons/slider_lasttime.svg similarity index 100% rename from resources/theme/default/icons/slider_lasttime.svg rename to src/pyminer/resources/theme/default/icons/slider_lasttime.svg diff --git a/resources/theme/default/icons/slider_lastversion.svg b/src/pyminer/resources/theme/default/icons/slider_lastversion.svg similarity index 100% rename from resources/theme/default/icons/slider_lastversion.svg rename to src/pyminer/resources/theme/default/icons/slider_lastversion.svg diff --git a/resources/theme/default/icons/slider_nexttime.svg b/src/pyminer/resources/theme/default/icons/slider_nexttime.svg similarity index 100% rename from resources/theme/default/icons/slider_nexttime.svg rename to src/pyminer/resources/theme/default/icons/slider_nexttime.svg diff --git a/resources/theme/default/icons/slider_nextversion.svg b/src/pyminer/resources/theme/default/icons/slider_nextversion.svg similarity index 100% rename from resources/theme/default/icons/slider_nextversion.svg rename to src/pyminer/resources/theme/default/icons/slider_nextversion.svg diff --git a/resources/theme/default/icons/slider_zoomin.svg b/src/pyminer/resources/theme/default/icons/slider_zoomin.svg similarity index 100% rename from resources/theme/default/icons/slider_zoomin.svg rename to src/pyminer/resources/theme/default/icons/slider_zoomin.svg diff --git a/resources/theme/default/icons/slider_zoomout.svg b/src/pyminer/resources/theme/default/icons/slider_zoomout.svg similarity index 100% rename from resources/theme/default/icons/slider_zoomout.svg rename to src/pyminer/resources/theme/default/icons/slider_zoomout.svg diff --git a/resources/theme/default/icons/sloperuler.svg b/src/pyminer/resources/theme/default/icons/sloperuler.svg similarity index 100% rename from resources/theme/default/icons/sloperuler.svg rename to src/pyminer/resources/theme/default/icons/sloperuler.svg diff --git a/resources/theme/default/icons/spss.svg b/src/pyminer/resources/theme/default/icons/spss.svg similarity index 100% rename from resources/theme/default/icons/spss.svg rename to src/pyminer/resources/theme/default/icons/spss.svg diff --git a/resources/theme/default/icons/sql.svg b/src/pyminer/resources/theme/default/icons/sql.svg similarity index 100% rename from resources/theme/default/icons/sql.svg rename to src/pyminer/resources/theme/default/icons/sql.svg diff --git a/resources/theme/default/icons/stata.svg b/src/pyminer/resources/theme/default/icons/stata.svg similarity index 100% rename from resources/theme/default/icons/stata.svg rename to src/pyminer/resources/theme/default/icons/stata.svg diff --git a/resources/theme/default/icons/sun.svg b/src/pyminer/resources/theme/default/icons/sun.svg similarity index 100% rename from resources/theme/default/icons/sun.svg rename to src/pyminer/resources/theme/default/icons/sun.svg diff --git a/resources/theme/default/icons/symbology.svg b/src/pyminer/resources/theme/default/icons/symbology.svg similarity index 100% rename from resources/theme/default/icons/symbology.svg rename to src/pyminer/resources/theme/default/icons/symbology.svg diff --git a/resources/theme/default/icons/symbolreorder.svg b/src/pyminer/resources/theme/default/icons/symbolreorder.svg similarity index 100% rename from resources/theme/default/icons/symbolreorder.svg rename to src/pyminer/resources/theme/default/icons/symbolreorder.svg diff --git a/resources/theme/default/icons/system.svg b/src/pyminer/resources/theme/default/icons/system.svg similarity index 100% rename from resources/theme/default/icons/system.svg rename to src/pyminer/resources/theme/default/icons/system.svg diff --git a/resources/theme/default/icons/table.svg b/src/pyminer/resources/theme/default/icons/table.svg similarity index 100% rename from resources/theme/default/icons/table.svg rename to src/pyminer/resources/theme/default/icons/table.svg diff --git a/resources/theme/default/icons/tablegroup.svg b/src/pyminer/resources/theme/default/icons/tablegroup.svg similarity index 100% rename from resources/theme/default/icons/tablegroup.svg rename to src/pyminer/resources/theme/default/icons/tablegroup.svg diff --git a/resources/theme/default/icons/task.svg b/src/pyminer/resources/theme/default/icons/task.svg similarity index 100% rename from resources/theme/default/icons/task.svg rename to src/pyminer/resources/theme/default/icons/task.svg diff --git a/resources/theme/default/icons/teamEditProject.svg b/src/pyminer/resources/theme/default/icons/teamEditProject.svg similarity index 100% rename from resources/theme/default/icons/teamEditProject.svg rename to src/pyminer/resources/theme/default/icons/teamEditProject.svg diff --git a/resources/theme/default/icons/terrain.svg b/src/pyminer/resources/theme/default/icons/terrain.svg similarity index 100% rename from resources/theme/default/icons/terrain.svg rename to src/pyminer/resources/theme/default/icons/terrain.svg diff --git a/resources/theme/default/icons/threenorth.svg b/src/pyminer/resources/theme/default/icons/threenorth.svg similarity index 100% rename from resources/theme/default/icons/threenorth.svg rename to src/pyminer/resources/theme/default/icons/threenorth.svg diff --git a/resources/theme/default/icons/time_series.svg b/src/pyminer/resources/theme/default/icons/time_series.svg similarity index 100% rename from resources/theme/default/icons/time_series.svg rename to src/pyminer/resources/theme/default/icons/time_series.svg diff --git a/resources/theme/default/icons/top.svg b/src/pyminer/resources/theme/default/icons/top.svg similarity index 100% rename from resources/theme/default/icons/top.svg rename to src/pyminer/resources/theme/default/icons/top.svg diff --git a/resources/theme/default/icons/topologyConfig.svg b/src/pyminer/resources/theme/default/icons/topologyConfig.svg similarity index 100% rename from resources/theme/default/icons/topologyConfig.svg rename to src/pyminer/resources/theme/default/icons/topologyConfig.svg diff --git a/resources/theme/default/icons/transformed.svg b/src/pyminer/resources/theme/default/icons/transformed.svg similarity index 100% rename from resources/theme/default/icons/transformed.svg rename to src/pyminer/resources/theme/default/icons/transformed.svg diff --git a/resources/theme/default/icons/transparency.png b/src/pyminer/resources/theme/default/icons/transparency.png similarity index 100% rename from resources/theme/default/icons/transparency.png rename to src/pyminer/resources/theme/default/icons/transparency.png diff --git a/resources/theme/default/icons/transposition.svg b/src/pyminer/resources/theme/default/icons/transposition.svg similarity index 100% rename from resources/theme/default/icons/transposition.svg rename to src/pyminer/resources/theme/default/icons/transposition.svg diff --git a/resources/theme/default/icons/tree.svg b/src/pyminer/resources/theme/default/icons/tree.svg similarity index 100% rename from resources/theme/default/icons/tree.svg rename to src/pyminer/resources/theme/default/icons/tree.svg diff --git a/resources/theme/default/icons/txt.svg b/src/pyminer/resources/theme/default/icons/txt.svg similarity index 100% rename from resources/theme/default/icons/txt.svg rename to src/pyminer/resources/theme/default/icons/txt.svg diff --git a/resources/theme/default/icons/undo.svg b/src/pyminer/resources/theme/default/icons/undo.svg similarity index 100% rename from resources/theme/default/icons/undo.svg rename to src/pyminer/resources/theme/default/icons/undo.svg diff --git a/resources/theme/default/icons/upWard.svg b/src/pyminer/resources/theme/default/icons/upWard.svg similarity index 100% rename from resources/theme/default/icons/upWard.svg rename to src/pyminer/resources/theme/default/icons/upWard.svg diff --git a/resources/theme/default/icons/uploaddata.svg b/src/pyminer/resources/theme/default/icons/uploaddata.svg similarity index 100% rename from resources/theme/default/icons/uploaddata.svg rename to src/pyminer/resources/theme/default/icons/uploaddata.svg diff --git a/resources/theme/default/icons/useLeftAll.svg b/src/pyminer/resources/theme/default/icons/useLeftAll.svg similarity index 100% rename from resources/theme/default/icons/useLeftAll.svg rename to src/pyminer/resources/theme/default/icons/useLeftAll.svg diff --git a/resources/theme/default/icons/useLeftSelected.svg b/src/pyminer/resources/theme/default/icons/useLeftSelected.svg similarity index 100% rename from resources/theme/default/icons/useLeftSelected.svg rename to src/pyminer/resources/theme/default/icons/useLeftSelected.svg diff --git a/resources/theme/default/icons/useRightAll.svg b/src/pyminer/resources/theme/default/icons/useRightAll.svg similarity index 100% rename from resources/theme/default/icons/useRightAll.svg rename to src/pyminer/resources/theme/default/icons/useRightAll.svg diff --git a/resources/theme/default/icons/useRightSelected.svg b/src/pyminer/resources/theme/default/icons/useRightSelected.svg similarity index 100% rename from resources/theme/default/icons/useRightSelected.svg rename to src/pyminer/resources/theme/default/icons/useRightSelected.svg diff --git a/resources/theme/default/icons/var.svg b/src/pyminer/resources/theme/default/icons/var.svg similarity index 100% rename from resources/theme/default/icons/var.svg rename to src/pyminer/resources/theme/default/icons/var.svg diff --git a/resources/theme/default/icons/var_open.svg b/src/pyminer/resources/theme/default/icons/var_open.svg similarity index 100% rename from resources/theme/default/icons/var_open.svg rename to src/pyminer/resources/theme/default/icons/var_open.svg diff --git a/resources/theme/default/icons/vectorTileStyle.svg b/src/pyminer/resources/theme/default/icons/vectorTileStyle.svg similarity index 100% rename from resources/theme/default/icons/vectorTileStyle.svg rename to src/pyminer/resources/theme/default/icons/vectorTileStyle.svg diff --git a/resources/theme/default/icons/view_var.svg b/src/pyminer/resources/theme/default/icons/view_var.svg similarity index 100% rename from resources/theme/default/icons/view_var.svg rename to src/pyminer/resources/theme/default/icons/view_var.svg diff --git a/resources/theme/default/icons/visibleMap.svg b/src/pyminer/resources/theme/default/icons/visibleMap.svg similarity index 100% rename from resources/theme/default/icons/visibleMap.svg rename to src/pyminer/resources/theme/default/icons/visibleMap.svg diff --git a/resources/theme/default/icons/walking.svg b/src/pyminer/resources/theme/default/icons/walking.svg similarity index 100% rename from resources/theme/default/icons/walking.svg rename to src/pyminer/resources/theme/default/icons/walking.svg diff --git a/resources/theme/default/icons/website.svg b/src/pyminer/resources/theme/default/icons/website.svg similarity index 100% rename from resources/theme/default/icons/website.svg rename to src/pyminer/resources/theme/default/icons/website.svg diff --git a/resources/theme/default/icons/windowicon.ico b/src/pyminer/resources/theme/default/icons/windowicon.ico similarity index 100% rename from resources/theme/default/icons/windowicon.ico rename to src/pyminer/resources/theme/default/icons/windowicon.ico diff --git a/resources/theme/default/images/SwipeDown.svg b/src/pyminer/resources/theme/default/images/SwipeDown.svg similarity index 100% rename from resources/theme/default/images/SwipeDown.svg rename to src/pyminer/resources/theme/default/images/SwipeDown.svg diff --git a/resources/theme/default/images/SwipeLeft.svg b/src/pyminer/resources/theme/default/images/SwipeLeft.svg similarity index 100% rename from resources/theme/default/images/SwipeLeft.svg rename to src/pyminer/resources/theme/default/images/SwipeLeft.svg diff --git a/resources/theme/default/images/SwipeLeftRight.svg b/src/pyminer/resources/theme/default/images/SwipeLeftRight.svg similarity index 100% rename from resources/theme/default/images/SwipeLeftRight.svg rename to src/pyminer/resources/theme/default/images/SwipeLeftRight.svg diff --git a/resources/theme/default/images/SwipeRight.svg b/src/pyminer/resources/theme/default/images/SwipeRight.svg similarity index 100% rename from resources/theme/default/images/SwipeRight.svg rename to src/pyminer/resources/theme/default/images/SwipeRight.svg diff --git a/resources/theme/default/images/SwipeUp.svg b/src/pyminer/resources/theme/default/images/SwipeUp.svg similarity index 100% rename from resources/theme/default/images/SwipeUp.svg rename to src/pyminer/resources/theme/default/images/SwipeUp.svg diff --git a/resources/theme/default/images/SwipeUpDown.svg b/src/pyminer/resources/theme/default/images/SwipeUpDown.svg similarity index 100% rename from resources/theme/default/images/SwipeUpDown.svg rename to src/pyminer/resources/theme/default/images/SwipeUpDown.svg diff --git a/resources/theme/default/images/addNode.svg b/src/pyminer/resources/theme/default/images/addNode.svg similarity index 100% rename from resources/theme/default/images/addNode.svg rename to src/pyminer/resources/theme/default/images/addNode.svg diff --git a/resources/theme/default/images/attributeBrush.svg b/src/pyminer/resources/theme/default/images/attributeBrush.svg similarity index 100% rename from resources/theme/default/images/attributeBrush.svg rename to src/pyminer/resources/theme/default/images/attributeBrush.svg diff --git a/resources/theme/default/images/background.png b/src/pyminer/resources/theme/default/images/background.png similarity index 100% rename from resources/theme/default/images/background.png rename to src/pyminer/resources/theme/default/images/background.png diff --git a/resources/theme/default/images/breakByOnePoint.svg b/src/pyminer/resources/theme/default/images/breakByOnePoint.svg similarity index 100% rename from resources/theme/default/images/breakByOnePoint.svg rename to src/pyminer/resources/theme/default/images/breakByOnePoint.svg diff --git a/resources/theme/default/images/breakByTwoPoints.svg b/src/pyminer/resources/theme/default/images/breakByTwoPoints.svg similarity index 100% rename from resources/theme/default/images/breakByTwoPoints.svg rename to src/pyminer/resources/theme/default/images/breakByTwoPoints.svg diff --git a/resources/theme/default/images/copyFeature.svg b/src/pyminer/resources/theme/default/images/copyFeature.svg similarity index 100% rename from resources/theme/default/images/copyFeature.svg rename to src/pyminer/resources/theme/default/images/copyFeature.svg diff --git a/resources/theme/default/images/cursor_leftbottom.svg b/src/pyminer/resources/theme/default/images/cursor_leftbottom.svg similarity index 100% rename from resources/theme/default/images/cursor_leftbottom.svg rename to src/pyminer/resources/theme/default/images/cursor_leftbottom.svg diff --git a/resources/theme/default/images/cursor_leftright.svg b/src/pyminer/resources/theme/default/images/cursor_leftright.svg similarity index 100% rename from resources/theme/default/images/cursor_leftright.svg rename to src/pyminer/resources/theme/default/images/cursor_leftright.svg diff --git a/resources/theme/default/images/cursor_lefttop.svg b/src/pyminer/resources/theme/default/images/cursor_lefttop.svg similarity index 100% rename from resources/theme/default/images/cursor_lefttop.svg rename to src/pyminer/resources/theme/default/images/cursor_lefttop.svg diff --git a/resources/theme/default/images/cursor_move.svg b/src/pyminer/resources/theme/default/images/cursor_move.svg similarity index 100% rename from resources/theme/default/images/cursor_move.svg rename to src/pyminer/resources/theme/default/images/cursor_move.svg diff --git a/resources/theme/default/images/cursor_topbottom.svg b/src/pyminer/resources/theme/default/images/cursor_topbottom.svg similarity index 100% rename from resources/theme/default/images/cursor_topbottom.svg rename to src/pyminer/resources/theme/default/images/cursor_topbottom.svg diff --git a/resources/theme/default/images/deleteNode.svg b/src/pyminer/resources/theme/default/images/deleteNode.svg similarity index 100% rename from resources/theme/default/images/deleteNode.svg rename to src/pyminer/resources/theme/default/images/deleteNode.svg diff --git a/resources/theme/default/images/editDraw.svg b/src/pyminer/resources/theme/default/images/editDraw.svg similarity index 100% rename from resources/theme/default/images/editDraw.svg rename to src/pyminer/resources/theme/default/images/editDraw.svg diff --git a/resources/theme/default/images/editSelect.svg b/src/pyminer/resources/theme/default/images/editSelect.svg similarity index 100% rename from resources/theme/default/images/editSelect.svg rename to src/pyminer/resources/theme/default/images/editSelect.svg diff --git a/resources/theme/default/images/error.png b/src/pyminer/resources/theme/default/images/error.png similarity index 100% rename from resources/theme/default/images/error.png rename to src/pyminer/resources/theme/default/images/error.png diff --git a/resources/theme/default/images/extensionPolyline.svg b/src/pyminer/resources/theme/default/images/extensionPolyline.svg similarity index 100% rename from resources/theme/default/images/extensionPolyline.svg rename to src/pyminer/resources/theme/default/images/extensionPolyline.svg diff --git a/resources/theme/default/images/identify.svg b/src/pyminer/resources/theme/default/images/identify.svg similarity index 100% rename from resources/theme/default/images/identify.svg rename to src/pyminer/resources/theme/default/images/identify.svg diff --git a/resources/theme/default/images/information.png b/src/pyminer/resources/theme/default/images/information.png similarity index 100% rename from resources/theme/default/images/information.png rename to src/pyminer/resources/theme/default/images/information.png diff --git a/resources/theme/default/images/mCapturePoint.svg b/src/pyminer/resources/theme/default/images/mCapturePoint.svg similarity index 100% rename from resources/theme/default/images/mCapturePoint.svg rename to src/pyminer/resources/theme/default/images/mCapturePoint.svg diff --git a/resources/theme/default/images/mIconDeselected.svg b/src/pyminer/resources/theme/default/images/mIconDeselected.svg similarity index 100% rename from resources/theme/default/images/mIconDeselected.svg rename to src/pyminer/resources/theme/default/images/mIconDeselected.svg diff --git a/resources/theme/default/images/mIconSelected.svg b/src/pyminer/resources/theme/default/images/mIconSelected.svg similarity index 100% rename from resources/theme/default/images/mIconSelected.svg rename to src/pyminer/resources/theme/default/images/mIconSelected.svg diff --git a/resources/theme/default/images/mPageLayoutPan.svg b/src/pyminer/resources/theme/default/images/mPageLayoutPan.svg similarity index 100% rename from resources/theme/default/images/mPageLayoutPan.svg rename to src/pyminer/resources/theme/default/images/mPageLayoutPan.svg diff --git a/resources/theme/default/images/mPageLayoutZoomIn.svg b/src/pyminer/resources/theme/default/images/mPageLayoutZoomIn.svg similarity index 100% rename from resources/theme/default/images/mPageLayoutZoomIn.svg rename to src/pyminer/resources/theme/default/images/mPageLayoutZoomIn.svg diff --git a/resources/theme/default/images/mPageLayoutZoomOut.svg b/src/pyminer/resources/theme/default/images/mPageLayoutZoomOut.svg similarity index 100% rename from resources/theme/default/images/mPageLayoutZoomOut.svg rename to src/pyminer/resources/theme/default/images/mPageLayoutZoomOut.svg diff --git a/resources/theme/default/images/mPanClose.svg b/src/pyminer/resources/theme/default/images/mPanClose.svg similarity index 100% rename from resources/theme/default/images/mPanClose.svg rename to src/pyminer/resources/theme/default/images/mPanClose.svg diff --git a/resources/theme/default/images/measure.svg b/src/pyminer/resources/theme/default/images/measure.svg similarity index 100% rename from resources/theme/default/images/measure.svg rename to src/pyminer/resources/theme/default/images/measure.svg diff --git a/resources/theme/default/images/move.svg b/src/pyminer/resources/theme/default/images/move.svg similarity index 100% rename from resources/theme/default/images/move.svg rename to src/pyminer/resources/theme/default/images/move.svg diff --git a/resources/theme/default/images/moveFeature.svg b/src/pyminer/resources/theme/default/images/moveFeature.svg similarity index 100% rename from resources/theme/default/images/moveFeature.svg rename to src/pyminer/resources/theme/default/images/moveFeature.svg diff --git a/resources/theme/default/images/moveNode.svg b/src/pyminer/resources/theme/default/images/moveNode.svg similarity index 100% rename from resources/theme/default/images/moveNode.svg rename to src/pyminer/resources/theme/default/images/moveNode.svg diff --git a/resources/theme/default/images/overlayUpdates.png b/src/pyminer/resources/theme/default/images/overlayUpdates.png similarity index 100% rename from resources/theme/default/images/overlayUpdates.png rename to src/pyminer/resources/theme/default/images/overlayUpdates.png diff --git a/resources/theme/default/images/pan.svg b/src/pyminer/resources/theme/default/images/pan.svg similarity index 100% rename from resources/theme/default/images/pan.svg rename to src/pyminer/resources/theme/default/images/pan.svg diff --git a/resources/theme/default/images/pyramidfirst.png b/src/pyminer/resources/theme/default/images/pyramidfirst.png similarity index 100% rename from resources/theme/default/images/pyramidfirst.png rename to src/pyminer/resources/theme/default/images/pyramidfirst.png diff --git a/resources/theme/default/images/pyramidfourth.png b/src/pyminer/resources/theme/default/images/pyramidfourth.png similarity index 100% rename from resources/theme/default/images/pyramidfourth.png rename to src/pyminer/resources/theme/default/images/pyramidfourth.png diff --git a/resources/theme/default/images/pyramidsecond.png b/src/pyminer/resources/theme/default/images/pyramidsecond.png similarity index 100% rename from resources/theme/default/images/pyramidsecond.png rename to src/pyminer/resources/theme/default/images/pyramidsecond.png diff --git a/resources/theme/default/images/pyramidthird.png b/src/pyminer/resources/theme/default/images/pyramidthird.png similarity index 100% rename from resources/theme/default/images/pyramidthird.png rename to src/pyminer/resources/theme/default/images/pyramidthird.png diff --git a/resources/theme/default/images/rotateFeature.svg b/src/pyminer/resources/theme/default/images/rotateFeature.svg similarity index 100% rename from resources/theme/default/images/rotateFeature.svg rename to src/pyminer/resources/theme/default/images/rotateFeature.svg diff --git a/resources/theme/default/images/select.svg b/src/pyminer/resources/theme/default/images/select.svg similarity index 100% rename from resources/theme/default/images/select.svg rename to src/pyminer/resources/theme/default/images/select.svg diff --git a/resources/theme/default/images/selectbypolygon.svg b/src/pyminer/resources/theme/default/images/selectbypolygon.svg similarity index 100% rename from resources/theme/default/images/selectbypolygon.svg rename to src/pyminer/resources/theme/default/images/selectbypolygon.svg diff --git a/resources/theme/default/images/selectbyradius.svg b/src/pyminer/resources/theme/default/images/selectbyradius.svg similarity index 100% rename from resources/theme/default/images/selectbyradius.svg rename to src/pyminer/resources/theme/default/images/selectbyradius.svg diff --git a/resources/theme/default/images/splitBySelect.svg b/src/pyminer/resources/theme/default/images/splitBySelect.svg similarity index 100% rename from resources/theme/default/images/splitBySelect.svg rename to src/pyminer/resources/theme/default/images/splitBySelect.svg diff --git a/resources/theme/default/images/systemabout.png b/src/pyminer/resources/theme/default/images/systemabout.png similarity index 100% rename from resources/theme/default/images/systemabout.png rename to src/pyminer/resources/theme/default/images/systemabout.png diff --git a/resources/theme/default/images/thematicAttributes.svg b/src/pyminer/resources/theme/default/images/thematicAttributes.svg similarity index 100% rename from resources/theme/default/images/thematicAttributes.svg rename to src/pyminer/resources/theme/default/images/thematicAttributes.svg diff --git a/resources/theme/default/images/warning.png b/src/pyminer/resources/theme/default/images/warning.png similarity index 100% rename from resources/theme/default/images/warning.png rename to src/pyminer/resources/theme/default/images/warning.png diff --git a/resources/theme/default/images/zoomin.svg b/src/pyminer/resources/theme/default/images/zoomin.svg similarity index 100% rename from resources/theme/default/images/zoomin.svg rename to src/pyminer/resources/theme/default/images/zoomin.svg diff --git a/resources/theme/default/images/zoomout.svg b/src/pyminer/resources/theme/default/images/zoomout.svg similarity index 100% rename from resources/theme/default/images/zoomout.svg rename to src/pyminer/resources/theme/default/images/zoomout.svg diff --git a/run_before_commit.py b/src/pyminer/run_before_commit.py similarity index 100% rename from run_before_commit.py rename to src/pyminer/run_before_commit.py diff --git a/static/README.md b/src/pyminer/static/README.md similarity index 100% rename from static/README.md rename to src/pyminer/static/README.md diff --git a/static/css/iview.min.css b/src/pyminer/static/css/iview.min.css similarity index 100% rename from static/css/iview.min.css rename to src/pyminer/static/css/iview.min.css diff --git a/static/js/echarts.min.js b/src/pyminer/static/js/echarts.min.js similarity index 100% rename from static/js/echarts.min.js rename to src/pyminer/static/js/echarts.min.js diff --git a/static/js/element-ui/CHANGELOG.en-US.md b/src/pyminer/static/js/element-ui/CHANGELOG.en-US.md similarity index 100% rename from static/js/element-ui/CHANGELOG.en-US.md rename to src/pyminer/static/js/element-ui/CHANGELOG.en-US.md diff --git a/static/js/element-ui/CHANGELOG.es.md b/src/pyminer/static/js/element-ui/CHANGELOG.es.md similarity index 100% rename from static/js/element-ui/CHANGELOG.es.md rename to src/pyminer/static/js/element-ui/CHANGELOG.es.md diff --git a/static/js/element-ui/CHANGELOG.fr-FR.md b/src/pyminer/static/js/element-ui/CHANGELOG.fr-FR.md similarity index 100% rename from static/js/element-ui/CHANGELOG.fr-FR.md rename to src/pyminer/static/js/element-ui/CHANGELOG.fr-FR.md diff --git a/static/js/element-ui/CHANGELOG.zh-CN.md b/src/pyminer/static/js/element-ui/CHANGELOG.zh-CN.md similarity index 100% rename from static/js/element-ui/CHANGELOG.zh-CN.md rename to src/pyminer/static/js/element-ui/CHANGELOG.zh-CN.md diff --git a/static/js/element-ui/README.md b/src/pyminer/static/js/element-ui/README.md similarity index 100% rename from static/js/element-ui/README.md rename to src/pyminer/static/js/element-ui/README.md diff --git a/static/js/element-ui/lib/alert.js b/src/pyminer/static/js/element-ui/lib/alert.js similarity index 100% rename from static/js/element-ui/lib/alert.js rename to src/pyminer/static/js/element-ui/lib/alert.js diff --git a/static/js/element-ui/lib/aside.js b/src/pyminer/static/js/element-ui/lib/aside.js similarity index 100% rename from static/js/element-ui/lib/aside.js rename to src/pyminer/static/js/element-ui/lib/aside.js diff --git a/static/js/element-ui/lib/autocomplete.js b/src/pyminer/static/js/element-ui/lib/autocomplete.js similarity index 100% rename from static/js/element-ui/lib/autocomplete.js rename to src/pyminer/static/js/element-ui/lib/autocomplete.js diff --git a/static/js/element-ui/lib/avatar.js b/src/pyminer/static/js/element-ui/lib/avatar.js similarity index 100% rename from static/js/element-ui/lib/avatar.js rename to src/pyminer/static/js/element-ui/lib/avatar.js diff --git a/static/js/element-ui/lib/backtop.js b/src/pyminer/static/js/element-ui/lib/backtop.js similarity index 100% rename from static/js/element-ui/lib/backtop.js rename to src/pyminer/static/js/element-ui/lib/backtop.js diff --git a/static/js/element-ui/lib/badge.js b/src/pyminer/static/js/element-ui/lib/badge.js similarity index 100% rename from static/js/element-ui/lib/badge.js rename to src/pyminer/static/js/element-ui/lib/badge.js diff --git a/static/js/element-ui/lib/breadcrumb-item.js b/src/pyminer/static/js/element-ui/lib/breadcrumb-item.js similarity index 100% rename from static/js/element-ui/lib/breadcrumb-item.js rename to src/pyminer/static/js/element-ui/lib/breadcrumb-item.js diff --git a/static/js/element-ui/lib/breadcrumb.js b/src/pyminer/static/js/element-ui/lib/breadcrumb.js similarity index 100% rename from static/js/element-ui/lib/breadcrumb.js rename to src/pyminer/static/js/element-ui/lib/breadcrumb.js diff --git a/static/js/element-ui/lib/button-group.js b/src/pyminer/static/js/element-ui/lib/button-group.js similarity index 100% rename from static/js/element-ui/lib/button-group.js rename to src/pyminer/static/js/element-ui/lib/button-group.js diff --git a/static/js/element-ui/lib/button.js b/src/pyminer/static/js/element-ui/lib/button.js similarity index 100% rename from static/js/element-ui/lib/button.js rename to src/pyminer/static/js/element-ui/lib/button.js diff --git a/static/js/element-ui/lib/calendar.js b/src/pyminer/static/js/element-ui/lib/calendar.js similarity index 100% rename from static/js/element-ui/lib/calendar.js rename to src/pyminer/static/js/element-ui/lib/calendar.js diff --git a/static/js/element-ui/lib/card.js b/src/pyminer/static/js/element-ui/lib/card.js similarity index 100% rename from static/js/element-ui/lib/card.js rename to src/pyminer/static/js/element-ui/lib/card.js diff --git a/static/js/element-ui/lib/carousel-item.js b/src/pyminer/static/js/element-ui/lib/carousel-item.js similarity index 100% rename from static/js/element-ui/lib/carousel-item.js rename to src/pyminer/static/js/element-ui/lib/carousel-item.js diff --git a/static/js/element-ui/lib/carousel.js b/src/pyminer/static/js/element-ui/lib/carousel.js similarity index 100% rename from static/js/element-ui/lib/carousel.js rename to src/pyminer/static/js/element-ui/lib/carousel.js diff --git a/static/js/element-ui/lib/cascader-panel.js b/src/pyminer/static/js/element-ui/lib/cascader-panel.js similarity index 100% rename from static/js/element-ui/lib/cascader-panel.js rename to src/pyminer/static/js/element-ui/lib/cascader-panel.js diff --git a/static/js/element-ui/lib/cascader.js b/src/pyminer/static/js/element-ui/lib/cascader.js similarity index 100% rename from static/js/element-ui/lib/cascader.js rename to src/pyminer/static/js/element-ui/lib/cascader.js diff --git a/static/js/element-ui/lib/checkbox-button.js b/src/pyminer/static/js/element-ui/lib/checkbox-button.js similarity index 100% rename from static/js/element-ui/lib/checkbox-button.js rename to src/pyminer/static/js/element-ui/lib/checkbox-button.js diff --git a/static/js/element-ui/lib/checkbox-group.js b/src/pyminer/static/js/element-ui/lib/checkbox-group.js similarity index 100% rename from static/js/element-ui/lib/checkbox-group.js rename to src/pyminer/static/js/element-ui/lib/checkbox-group.js diff --git a/static/js/element-ui/lib/checkbox.js b/src/pyminer/static/js/element-ui/lib/checkbox.js similarity index 100% rename from static/js/element-ui/lib/checkbox.js rename to src/pyminer/static/js/element-ui/lib/checkbox.js diff --git a/static/js/element-ui/lib/col.js b/src/pyminer/static/js/element-ui/lib/col.js similarity index 100% rename from static/js/element-ui/lib/col.js rename to src/pyminer/static/js/element-ui/lib/col.js diff --git a/static/js/element-ui/lib/collapse-item.js b/src/pyminer/static/js/element-ui/lib/collapse-item.js similarity index 100% rename from static/js/element-ui/lib/collapse-item.js rename to src/pyminer/static/js/element-ui/lib/collapse-item.js diff --git a/static/js/element-ui/lib/collapse.js b/src/pyminer/static/js/element-ui/lib/collapse.js similarity index 100% rename from static/js/element-ui/lib/collapse.js rename to src/pyminer/static/js/element-ui/lib/collapse.js diff --git a/static/js/element-ui/lib/color-picker.js b/src/pyminer/static/js/element-ui/lib/color-picker.js similarity index 100% rename from static/js/element-ui/lib/color-picker.js rename to src/pyminer/static/js/element-ui/lib/color-picker.js diff --git a/static/js/element-ui/lib/container.js b/src/pyminer/static/js/element-ui/lib/container.js similarity index 100% rename from static/js/element-ui/lib/container.js rename to src/pyminer/static/js/element-ui/lib/container.js diff --git a/static/js/element-ui/lib/date-picker.js b/src/pyminer/static/js/element-ui/lib/date-picker.js similarity index 100% rename from static/js/element-ui/lib/date-picker.js rename to src/pyminer/static/js/element-ui/lib/date-picker.js diff --git a/static/js/element-ui/lib/dialog.js b/src/pyminer/static/js/element-ui/lib/dialog.js similarity index 100% rename from static/js/element-ui/lib/dialog.js rename to src/pyminer/static/js/element-ui/lib/dialog.js diff --git a/static/js/element-ui/lib/directives/mousewheel.js b/src/pyminer/static/js/element-ui/lib/directives/mousewheel.js similarity index 100% rename from static/js/element-ui/lib/directives/mousewheel.js rename to src/pyminer/static/js/element-ui/lib/directives/mousewheel.js diff --git a/static/js/element-ui/lib/directives/repeat-click.js b/src/pyminer/static/js/element-ui/lib/directives/repeat-click.js similarity index 100% rename from static/js/element-ui/lib/directives/repeat-click.js rename to src/pyminer/static/js/element-ui/lib/directives/repeat-click.js diff --git a/static/js/element-ui/lib/divider.js b/src/pyminer/static/js/element-ui/lib/divider.js similarity index 100% rename from static/js/element-ui/lib/divider.js rename to src/pyminer/static/js/element-ui/lib/divider.js diff --git a/static/js/element-ui/lib/drawer.js b/src/pyminer/static/js/element-ui/lib/drawer.js similarity index 100% rename from static/js/element-ui/lib/drawer.js rename to src/pyminer/static/js/element-ui/lib/drawer.js diff --git a/static/js/element-ui/lib/dropdown-item.js b/src/pyminer/static/js/element-ui/lib/dropdown-item.js similarity index 100% rename from static/js/element-ui/lib/dropdown-item.js rename to src/pyminer/static/js/element-ui/lib/dropdown-item.js diff --git a/static/js/element-ui/lib/dropdown-menu.js b/src/pyminer/static/js/element-ui/lib/dropdown-menu.js similarity index 100% rename from static/js/element-ui/lib/dropdown-menu.js rename to src/pyminer/static/js/element-ui/lib/dropdown-menu.js diff --git a/static/js/element-ui/lib/dropdown.js b/src/pyminer/static/js/element-ui/lib/dropdown.js similarity index 100% rename from static/js/element-ui/lib/dropdown.js rename to src/pyminer/static/js/element-ui/lib/dropdown.js diff --git a/static/js/element-ui/lib/element-ui.common.js b/src/pyminer/static/js/element-ui/lib/element-ui.common.js similarity index 100% rename from static/js/element-ui/lib/element-ui.common.js rename to src/pyminer/static/js/element-ui/lib/element-ui.common.js diff --git a/static/js/element-ui/lib/footer.js b/src/pyminer/static/js/element-ui/lib/footer.js similarity index 100% rename from static/js/element-ui/lib/footer.js rename to src/pyminer/static/js/element-ui/lib/footer.js diff --git a/static/js/element-ui/lib/form-item.js b/src/pyminer/static/js/element-ui/lib/form-item.js similarity index 100% rename from static/js/element-ui/lib/form-item.js rename to src/pyminer/static/js/element-ui/lib/form-item.js diff --git a/static/js/element-ui/lib/form.js b/src/pyminer/static/js/element-ui/lib/form.js similarity index 100% rename from static/js/element-ui/lib/form.js rename to src/pyminer/static/js/element-ui/lib/form.js diff --git a/static/js/element-ui/lib/header.js b/src/pyminer/static/js/element-ui/lib/header.js similarity index 100% rename from static/js/element-ui/lib/header.js rename to src/pyminer/static/js/element-ui/lib/header.js diff --git a/static/js/element-ui/lib/icon.js b/src/pyminer/static/js/element-ui/lib/icon.js similarity index 100% rename from static/js/element-ui/lib/icon.js rename to src/pyminer/static/js/element-ui/lib/icon.js diff --git a/static/js/element-ui/lib/image.js b/src/pyminer/static/js/element-ui/lib/image.js similarity index 100% rename from static/js/element-ui/lib/image.js rename to src/pyminer/static/js/element-ui/lib/image.js diff --git a/static/js/element-ui/lib/index.js b/src/pyminer/static/js/element-ui/lib/index.js similarity index 100% rename from static/js/element-ui/lib/index.js rename to src/pyminer/static/js/element-ui/lib/index.js diff --git a/static/js/element-ui/lib/infinite-scroll.js b/src/pyminer/static/js/element-ui/lib/infinite-scroll.js similarity index 100% rename from static/js/element-ui/lib/infinite-scroll.js rename to src/pyminer/static/js/element-ui/lib/infinite-scroll.js diff --git a/static/js/element-ui/lib/input-number.js b/src/pyminer/static/js/element-ui/lib/input-number.js similarity index 100% rename from static/js/element-ui/lib/input-number.js rename to src/pyminer/static/js/element-ui/lib/input-number.js diff --git a/static/js/element-ui/lib/input.js b/src/pyminer/static/js/element-ui/lib/input.js similarity index 100% rename from static/js/element-ui/lib/input.js rename to src/pyminer/static/js/element-ui/lib/input.js diff --git a/static/js/element-ui/lib/link.js b/src/pyminer/static/js/element-ui/lib/link.js similarity index 100% rename from static/js/element-ui/lib/link.js rename to src/pyminer/static/js/element-ui/lib/link.js diff --git a/static/js/element-ui/lib/loading.js b/src/pyminer/static/js/element-ui/lib/loading.js similarity index 100% rename from static/js/element-ui/lib/loading.js rename to src/pyminer/static/js/element-ui/lib/loading.js diff --git a/static/js/element-ui/lib/locale/format.js b/src/pyminer/static/js/element-ui/lib/locale/format.js similarity index 100% rename from static/js/element-ui/lib/locale/format.js rename to src/pyminer/static/js/element-ui/lib/locale/format.js diff --git a/static/js/element-ui/lib/locale/index.js b/src/pyminer/static/js/element-ui/lib/locale/index.js similarity index 100% rename from static/js/element-ui/lib/locale/index.js rename to src/pyminer/static/js/element-ui/lib/locale/index.js diff --git a/static/js/element-ui/lib/locale/lang/af-ZA.js b/src/pyminer/static/js/element-ui/lib/locale/lang/af-ZA.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/af-ZA.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/af-ZA.js diff --git a/static/js/element-ui/lib/locale/lang/ar.js b/src/pyminer/static/js/element-ui/lib/locale/lang/ar.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/ar.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/ar.js diff --git a/static/js/element-ui/lib/locale/lang/bg.js b/src/pyminer/static/js/element-ui/lib/locale/lang/bg.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/bg.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/bg.js diff --git a/static/js/element-ui/lib/locale/lang/ca.js b/src/pyminer/static/js/element-ui/lib/locale/lang/ca.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/ca.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/ca.js diff --git a/static/js/element-ui/lib/locale/lang/cs-CZ.js b/src/pyminer/static/js/element-ui/lib/locale/lang/cs-CZ.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/cs-CZ.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/cs-CZ.js diff --git a/static/js/element-ui/lib/locale/lang/da.js b/src/pyminer/static/js/element-ui/lib/locale/lang/da.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/da.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/da.js diff --git a/static/js/element-ui/lib/locale/lang/de.js b/src/pyminer/static/js/element-ui/lib/locale/lang/de.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/de.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/de.js diff --git a/static/js/element-ui/lib/locale/lang/ee.js b/src/pyminer/static/js/element-ui/lib/locale/lang/ee.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/ee.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/ee.js diff --git a/static/js/element-ui/lib/locale/lang/el.js b/src/pyminer/static/js/element-ui/lib/locale/lang/el.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/el.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/el.js diff --git a/static/js/element-ui/lib/locale/lang/en.js b/src/pyminer/static/js/element-ui/lib/locale/lang/en.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/en.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/en.js diff --git a/static/js/element-ui/lib/locale/lang/eo.js b/src/pyminer/static/js/element-ui/lib/locale/lang/eo.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/eo.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/eo.js diff --git a/static/js/element-ui/lib/locale/lang/es.js b/src/pyminer/static/js/element-ui/lib/locale/lang/es.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/es.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/es.js diff --git a/static/js/element-ui/lib/locale/lang/eu.js b/src/pyminer/static/js/element-ui/lib/locale/lang/eu.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/eu.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/eu.js diff --git a/static/js/element-ui/lib/locale/lang/fa.js b/src/pyminer/static/js/element-ui/lib/locale/lang/fa.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/fa.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/fa.js diff --git a/static/js/element-ui/lib/locale/lang/fi.js b/src/pyminer/static/js/element-ui/lib/locale/lang/fi.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/fi.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/fi.js diff --git a/static/js/element-ui/lib/locale/lang/fr.js b/src/pyminer/static/js/element-ui/lib/locale/lang/fr.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/fr.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/fr.js diff --git a/static/js/element-ui/lib/locale/lang/he.js b/src/pyminer/static/js/element-ui/lib/locale/lang/he.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/he.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/he.js diff --git a/static/js/element-ui/lib/locale/lang/hr.js b/src/pyminer/static/js/element-ui/lib/locale/lang/hr.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/hr.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/hr.js diff --git a/static/js/element-ui/lib/locale/lang/hu.js b/src/pyminer/static/js/element-ui/lib/locale/lang/hu.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/hu.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/hu.js diff --git a/static/js/element-ui/lib/locale/lang/hy-AM.js b/src/pyminer/static/js/element-ui/lib/locale/lang/hy-AM.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/hy-AM.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/hy-AM.js diff --git a/static/js/element-ui/lib/locale/lang/id.js b/src/pyminer/static/js/element-ui/lib/locale/lang/id.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/id.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/id.js diff --git a/static/js/element-ui/lib/locale/lang/it.js b/src/pyminer/static/js/element-ui/lib/locale/lang/it.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/it.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/it.js diff --git a/static/js/element-ui/lib/locale/lang/ja.js b/src/pyminer/static/js/element-ui/lib/locale/lang/ja.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/ja.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/ja.js diff --git a/static/js/element-ui/lib/locale/lang/kg.js b/src/pyminer/static/js/element-ui/lib/locale/lang/kg.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/kg.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/kg.js diff --git a/static/js/element-ui/lib/locale/lang/km.js b/src/pyminer/static/js/element-ui/lib/locale/lang/km.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/km.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/km.js diff --git a/static/js/element-ui/lib/locale/lang/ko.js b/src/pyminer/static/js/element-ui/lib/locale/lang/ko.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/ko.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/ko.js diff --git a/static/js/element-ui/lib/locale/lang/ku.js b/src/pyminer/static/js/element-ui/lib/locale/lang/ku.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/ku.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/ku.js diff --git a/static/js/element-ui/lib/locale/lang/kz.js b/src/pyminer/static/js/element-ui/lib/locale/lang/kz.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/kz.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/kz.js diff --git a/static/js/element-ui/lib/locale/lang/lt.js b/src/pyminer/static/js/element-ui/lib/locale/lang/lt.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/lt.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/lt.js diff --git a/static/js/element-ui/lib/locale/lang/lv.js b/src/pyminer/static/js/element-ui/lib/locale/lang/lv.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/lv.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/lv.js diff --git a/static/js/element-ui/lib/locale/lang/mn.js b/src/pyminer/static/js/element-ui/lib/locale/lang/mn.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/mn.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/mn.js diff --git a/static/js/element-ui/lib/locale/lang/nb-NO.js b/src/pyminer/static/js/element-ui/lib/locale/lang/nb-NO.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/nb-NO.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/nb-NO.js diff --git a/static/js/element-ui/lib/locale/lang/nl.js b/src/pyminer/static/js/element-ui/lib/locale/lang/nl.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/nl.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/nl.js diff --git a/static/js/element-ui/lib/locale/lang/pl.js b/src/pyminer/static/js/element-ui/lib/locale/lang/pl.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/pl.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/pl.js diff --git a/static/js/element-ui/lib/locale/lang/pt-br.js b/src/pyminer/static/js/element-ui/lib/locale/lang/pt-br.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/pt-br.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/pt-br.js diff --git a/static/js/element-ui/lib/locale/lang/pt.js b/src/pyminer/static/js/element-ui/lib/locale/lang/pt.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/pt.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/pt.js diff --git a/static/js/element-ui/lib/locale/lang/ro.js b/src/pyminer/static/js/element-ui/lib/locale/lang/ro.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/ro.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/ro.js diff --git a/static/js/element-ui/lib/locale/lang/ru-RU.js b/src/pyminer/static/js/element-ui/lib/locale/lang/ru-RU.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/ru-RU.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/ru-RU.js diff --git a/static/js/element-ui/lib/locale/lang/sk.js b/src/pyminer/static/js/element-ui/lib/locale/lang/sk.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/sk.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/sk.js diff --git a/static/js/element-ui/lib/locale/lang/sl.js b/src/pyminer/static/js/element-ui/lib/locale/lang/sl.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/sl.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/sl.js diff --git a/static/js/element-ui/lib/locale/lang/sr.js b/src/pyminer/static/js/element-ui/lib/locale/lang/sr.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/sr.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/sr.js diff --git a/static/js/element-ui/lib/locale/lang/sv-SE.js b/src/pyminer/static/js/element-ui/lib/locale/lang/sv-SE.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/sv-SE.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/sv-SE.js diff --git a/static/js/element-ui/lib/locale/lang/ta.js b/src/pyminer/static/js/element-ui/lib/locale/lang/ta.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/ta.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/ta.js diff --git a/static/js/element-ui/lib/locale/lang/th.js b/src/pyminer/static/js/element-ui/lib/locale/lang/th.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/th.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/th.js diff --git a/static/js/element-ui/lib/locale/lang/tk.js b/src/pyminer/static/js/element-ui/lib/locale/lang/tk.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/tk.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/tk.js diff --git a/static/js/element-ui/lib/locale/lang/tr-TR.js b/src/pyminer/static/js/element-ui/lib/locale/lang/tr-TR.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/tr-TR.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/tr-TR.js diff --git a/static/js/element-ui/lib/locale/lang/ua.js b/src/pyminer/static/js/element-ui/lib/locale/lang/ua.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/ua.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/ua.js diff --git a/static/js/element-ui/lib/locale/lang/ug-CN.js b/src/pyminer/static/js/element-ui/lib/locale/lang/ug-CN.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/ug-CN.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/ug-CN.js diff --git a/static/js/element-ui/lib/locale/lang/uz-UZ.js b/src/pyminer/static/js/element-ui/lib/locale/lang/uz-UZ.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/uz-UZ.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/uz-UZ.js diff --git a/static/js/element-ui/lib/locale/lang/vi.js b/src/pyminer/static/js/element-ui/lib/locale/lang/vi.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/vi.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/vi.js diff --git a/static/js/element-ui/lib/locale/lang/zh-CN.js b/src/pyminer/static/js/element-ui/lib/locale/lang/zh-CN.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/zh-CN.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/zh-CN.js diff --git a/static/js/element-ui/lib/locale/lang/zh-TW.js b/src/pyminer/static/js/element-ui/lib/locale/lang/zh-TW.js similarity index 100% rename from static/js/element-ui/lib/locale/lang/zh-TW.js rename to src/pyminer/static/js/element-ui/lib/locale/lang/zh-TW.js diff --git a/static/js/element-ui/lib/main.js b/src/pyminer/static/js/element-ui/lib/main.js similarity index 100% rename from static/js/element-ui/lib/main.js rename to src/pyminer/static/js/element-ui/lib/main.js diff --git a/static/js/element-ui/lib/menu-item-group.js b/src/pyminer/static/js/element-ui/lib/menu-item-group.js similarity index 100% rename from static/js/element-ui/lib/menu-item-group.js rename to src/pyminer/static/js/element-ui/lib/menu-item-group.js diff --git a/static/js/element-ui/lib/menu-item.js b/src/pyminer/static/js/element-ui/lib/menu-item.js similarity index 100% rename from static/js/element-ui/lib/menu-item.js rename to src/pyminer/static/js/element-ui/lib/menu-item.js diff --git a/static/js/element-ui/lib/menu.js b/src/pyminer/static/js/element-ui/lib/menu.js similarity index 100% rename from static/js/element-ui/lib/menu.js rename to src/pyminer/static/js/element-ui/lib/menu.js diff --git a/static/js/element-ui/lib/message-box.js b/src/pyminer/static/js/element-ui/lib/message-box.js similarity index 100% rename from static/js/element-ui/lib/message-box.js rename to src/pyminer/static/js/element-ui/lib/message-box.js diff --git a/static/js/element-ui/lib/message.js b/src/pyminer/static/js/element-ui/lib/message.js similarity index 100% rename from static/js/element-ui/lib/message.js rename to src/pyminer/static/js/element-ui/lib/message.js diff --git a/static/js/element-ui/lib/mixins/emitter.js b/src/pyminer/static/js/element-ui/lib/mixins/emitter.js similarity index 100% rename from static/js/element-ui/lib/mixins/emitter.js rename to src/pyminer/static/js/element-ui/lib/mixins/emitter.js diff --git a/static/js/element-ui/lib/mixins/focus.js b/src/pyminer/static/js/element-ui/lib/mixins/focus.js similarity index 100% rename from static/js/element-ui/lib/mixins/focus.js rename to src/pyminer/static/js/element-ui/lib/mixins/focus.js diff --git a/static/js/element-ui/lib/mixins/locale.js b/src/pyminer/static/js/element-ui/lib/mixins/locale.js similarity index 100% rename from static/js/element-ui/lib/mixins/locale.js rename to src/pyminer/static/js/element-ui/lib/mixins/locale.js diff --git a/static/js/element-ui/lib/mixins/migrating.js b/src/pyminer/static/js/element-ui/lib/mixins/migrating.js similarity index 100% rename from static/js/element-ui/lib/mixins/migrating.js rename to src/pyminer/static/js/element-ui/lib/mixins/migrating.js diff --git a/static/js/element-ui/lib/notification.js b/src/pyminer/static/js/element-ui/lib/notification.js similarity index 100% rename from static/js/element-ui/lib/notification.js rename to src/pyminer/static/js/element-ui/lib/notification.js diff --git a/static/js/element-ui/lib/option-group.js b/src/pyminer/static/js/element-ui/lib/option-group.js similarity index 100% rename from static/js/element-ui/lib/option-group.js rename to src/pyminer/static/js/element-ui/lib/option-group.js diff --git a/static/js/element-ui/lib/option.js b/src/pyminer/static/js/element-ui/lib/option.js similarity index 100% rename from static/js/element-ui/lib/option.js rename to src/pyminer/static/js/element-ui/lib/option.js diff --git a/static/js/element-ui/lib/page-header.js b/src/pyminer/static/js/element-ui/lib/page-header.js similarity index 100% rename from static/js/element-ui/lib/page-header.js rename to src/pyminer/static/js/element-ui/lib/page-header.js diff --git a/static/js/element-ui/lib/pagination.js b/src/pyminer/static/js/element-ui/lib/pagination.js similarity index 100% rename from static/js/element-ui/lib/pagination.js rename to src/pyminer/static/js/element-ui/lib/pagination.js diff --git a/static/js/element-ui/lib/popconfirm.js b/src/pyminer/static/js/element-ui/lib/popconfirm.js similarity index 100% rename from static/js/element-ui/lib/popconfirm.js rename to src/pyminer/static/js/element-ui/lib/popconfirm.js diff --git a/static/js/element-ui/lib/popover.js b/src/pyminer/static/js/element-ui/lib/popover.js similarity index 100% rename from static/js/element-ui/lib/popover.js rename to src/pyminer/static/js/element-ui/lib/popover.js diff --git a/static/js/element-ui/lib/progress.js b/src/pyminer/static/js/element-ui/lib/progress.js similarity index 100% rename from static/js/element-ui/lib/progress.js rename to src/pyminer/static/js/element-ui/lib/progress.js diff --git a/static/js/element-ui/lib/radio-button.js b/src/pyminer/static/js/element-ui/lib/radio-button.js similarity index 100% rename from static/js/element-ui/lib/radio-button.js rename to src/pyminer/static/js/element-ui/lib/radio-button.js diff --git a/static/js/element-ui/lib/radio-group.js b/src/pyminer/static/js/element-ui/lib/radio-group.js similarity index 100% rename from static/js/element-ui/lib/radio-group.js rename to src/pyminer/static/js/element-ui/lib/radio-group.js diff --git a/static/js/element-ui/lib/radio.js b/src/pyminer/static/js/element-ui/lib/radio.js similarity index 100% rename from static/js/element-ui/lib/radio.js rename to src/pyminer/static/js/element-ui/lib/radio.js diff --git a/static/js/element-ui/lib/rate.js b/src/pyminer/static/js/element-ui/lib/rate.js similarity index 100% rename from static/js/element-ui/lib/rate.js rename to src/pyminer/static/js/element-ui/lib/rate.js diff --git a/static/js/element-ui/lib/row.js b/src/pyminer/static/js/element-ui/lib/row.js similarity index 100% rename from static/js/element-ui/lib/row.js rename to src/pyminer/static/js/element-ui/lib/row.js diff --git a/static/js/element-ui/lib/scrollbar.js b/src/pyminer/static/js/element-ui/lib/scrollbar.js similarity index 100% rename from static/js/element-ui/lib/scrollbar.js rename to src/pyminer/static/js/element-ui/lib/scrollbar.js diff --git a/static/js/element-ui/lib/select.js b/src/pyminer/static/js/element-ui/lib/select.js similarity index 100% rename from static/js/element-ui/lib/select.js rename to src/pyminer/static/js/element-ui/lib/select.js diff --git a/static/js/element-ui/lib/slider.js b/src/pyminer/static/js/element-ui/lib/slider.js similarity index 100% rename from static/js/element-ui/lib/slider.js rename to src/pyminer/static/js/element-ui/lib/slider.js diff --git a/static/js/element-ui/lib/spinner.js b/src/pyminer/static/js/element-ui/lib/spinner.js similarity index 100% rename from static/js/element-ui/lib/spinner.js rename to src/pyminer/static/js/element-ui/lib/spinner.js diff --git a/static/js/element-ui/lib/step.js b/src/pyminer/static/js/element-ui/lib/step.js similarity index 100% rename from static/js/element-ui/lib/step.js rename to src/pyminer/static/js/element-ui/lib/step.js diff --git a/static/js/element-ui/lib/steps.js b/src/pyminer/static/js/element-ui/lib/steps.js similarity index 100% rename from static/js/element-ui/lib/steps.js rename to src/pyminer/static/js/element-ui/lib/steps.js diff --git a/static/js/element-ui/lib/submenu.js b/src/pyminer/static/js/element-ui/lib/submenu.js similarity index 100% rename from static/js/element-ui/lib/submenu.js rename to src/pyminer/static/js/element-ui/lib/submenu.js diff --git a/static/js/element-ui/lib/switch.js b/src/pyminer/static/js/element-ui/lib/switch.js similarity index 100% rename from static/js/element-ui/lib/switch.js rename to src/pyminer/static/js/element-ui/lib/switch.js diff --git a/static/js/element-ui/lib/tab-pane.js b/src/pyminer/static/js/element-ui/lib/tab-pane.js similarity index 100% rename from static/js/element-ui/lib/tab-pane.js rename to src/pyminer/static/js/element-ui/lib/tab-pane.js diff --git a/static/js/element-ui/lib/table-column.js b/src/pyminer/static/js/element-ui/lib/table-column.js similarity index 100% rename from static/js/element-ui/lib/table-column.js rename to src/pyminer/static/js/element-ui/lib/table-column.js diff --git a/static/js/element-ui/lib/table.js b/src/pyminer/static/js/element-ui/lib/table.js similarity index 100% rename from static/js/element-ui/lib/table.js rename to src/pyminer/static/js/element-ui/lib/table.js diff --git a/static/js/element-ui/lib/tabs.js b/src/pyminer/static/js/element-ui/lib/tabs.js similarity index 100% rename from static/js/element-ui/lib/tabs.js rename to src/pyminer/static/js/element-ui/lib/tabs.js diff --git a/static/js/element-ui/lib/tag.js b/src/pyminer/static/js/element-ui/lib/tag.js similarity index 100% rename from static/js/element-ui/lib/tag.js rename to src/pyminer/static/js/element-ui/lib/tag.js diff --git a/static/js/element-ui/lib/theme-chalk/alert.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/alert.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/alert.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/alert.css diff --git a/static/js/element-ui/lib/theme-chalk/aside.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/aside.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/aside.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/aside.css diff --git a/static/js/element-ui/lib/theme-chalk/autocomplete.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/autocomplete.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/autocomplete.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/autocomplete.css diff --git a/static/js/element-ui/lib/theme-chalk/avatar.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/avatar.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/avatar.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/avatar.css diff --git a/static/js/element-ui/lib/theme-chalk/backtop.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/backtop.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/backtop.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/backtop.css diff --git a/static/js/element-ui/lib/theme-chalk/badge.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/badge.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/badge.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/badge.css diff --git a/static/js/element-ui/lib/theme-chalk/base.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/base.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/base.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/base.css diff --git a/src/pyminer/static/js/element-ui/lib/theme-chalk/breadcrumb-item.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/breadcrumb-item.css new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/static/js/element-ui/lib/theme-chalk/breadcrumb.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/breadcrumb.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/breadcrumb.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/breadcrumb.css diff --git a/src/pyminer/static/js/element-ui/lib/theme-chalk/button-group.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/button-group.css new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/static/js/element-ui/lib/theme-chalk/button.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/button.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/button.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/button.css diff --git a/static/js/element-ui/lib/theme-chalk/calendar.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/calendar.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/calendar.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/calendar.css diff --git a/static/js/element-ui/lib/theme-chalk/card.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/card.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/card.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/card.css diff --git a/static/js/element-ui/lib/theme-chalk/carousel-item.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/carousel-item.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/carousel-item.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/carousel-item.css diff --git a/static/js/element-ui/lib/theme-chalk/carousel.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/carousel.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/carousel.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/carousel.css diff --git a/static/js/element-ui/lib/theme-chalk/cascader-panel.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/cascader-panel.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/cascader-panel.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/cascader-panel.css diff --git a/static/js/element-ui/lib/theme-chalk/cascader.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/cascader.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/cascader.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/cascader.css diff --git a/src/pyminer/static/js/element-ui/lib/theme-chalk/checkbox-button.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/checkbox-button.css new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/pyminer/static/js/element-ui/lib/theme-chalk/checkbox-group.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/checkbox-group.css new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/static/js/element-ui/lib/theme-chalk/checkbox.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/checkbox.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/checkbox.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/checkbox.css diff --git a/static/js/element-ui/lib/theme-chalk/col.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/col.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/col.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/col.css diff --git a/src/pyminer/static/js/element-ui/lib/theme-chalk/collapse-item.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/collapse-item.css new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/static/js/element-ui/lib/theme-chalk/collapse.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/collapse.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/collapse.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/collapse.css diff --git a/static/js/element-ui/lib/theme-chalk/color-picker.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/color-picker.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/color-picker.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/color-picker.css diff --git a/static/js/element-ui/lib/theme-chalk/container.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/container.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/container.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/container.css diff --git a/static/js/element-ui/lib/theme-chalk/date-picker.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/date-picker.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/date-picker.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/date-picker.css diff --git a/static/js/element-ui/lib/theme-chalk/dialog.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/dialog.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/dialog.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/dialog.css diff --git a/static/js/element-ui/lib/theme-chalk/display.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/display.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/display.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/display.css diff --git a/static/js/element-ui/lib/theme-chalk/divider.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/divider.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/divider.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/divider.css diff --git a/static/js/element-ui/lib/theme-chalk/drawer.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/drawer.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/drawer.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/drawer.css diff --git a/src/pyminer/static/js/element-ui/lib/theme-chalk/dropdown-item.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/dropdown-item.css new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/pyminer/static/js/element-ui/lib/theme-chalk/dropdown-menu.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/dropdown-menu.css new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/static/js/element-ui/lib/theme-chalk/dropdown.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/dropdown.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/dropdown.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/dropdown.css diff --git a/static/js/element-ui/lib/theme-chalk/fonts/element-icons.ttf b/src/pyminer/static/js/element-ui/lib/theme-chalk/fonts/element-icons.ttf similarity index 100% rename from static/js/element-ui/lib/theme-chalk/fonts/element-icons.ttf rename to src/pyminer/static/js/element-ui/lib/theme-chalk/fonts/element-icons.ttf diff --git a/static/js/element-ui/lib/theme-chalk/fonts/element-icons.woff b/src/pyminer/static/js/element-ui/lib/theme-chalk/fonts/element-icons.woff similarity index 100% rename from static/js/element-ui/lib/theme-chalk/fonts/element-icons.woff rename to src/pyminer/static/js/element-ui/lib/theme-chalk/fonts/element-icons.woff diff --git a/static/js/element-ui/lib/theme-chalk/footer.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/footer.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/footer.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/footer.css diff --git a/src/pyminer/static/js/element-ui/lib/theme-chalk/form-item.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/form-item.css new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/static/js/element-ui/lib/theme-chalk/form.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/form.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/form.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/form.css diff --git a/static/js/element-ui/lib/theme-chalk/header.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/header.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/header.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/header.css diff --git a/static/js/element-ui/lib/theme-chalk/icon.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/icon.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/icon.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/icon.css diff --git a/static/js/element-ui/lib/theme-chalk/image.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/image.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/image.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/image.css diff --git a/static/js/element-ui/lib/theme-chalk/index.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/index.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/index.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/index.css diff --git a/src/pyminer/static/js/element-ui/lib/theme-chalk/infinite-scroll.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/infinite-scroll.css new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/pyminer/static/js/element-ui/lib/theme-chalk/infiniteScroll.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/infiniteScroll.css new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/static/js/element-ui/lib/theme-chalk/input-number.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/input-number.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/input-number.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/input-number.css diff --git a/static/js/element-ui/lib/theme-chalk/input.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/input.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/input.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/input.css diff --git a/static/js/element-ui/lib/theme-chalk/link.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/link.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/link.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/link.css diff --git a/static/js/element-ui/lib/theme-chalk/loading.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/loading.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/loading.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/loading.css diff --git a/static/js/element-ui/lib/theme-chalk/main.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/main.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/main.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/main.css diff --git a/src/pyminer/static/js/element-ui/lib/theme-chalk/menu-item-group.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/menu-item-group.css new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/pyminer/static/js/element-ui/lib/theme-chalk/menu-item.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/menu-item.css new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/static/js/element-ui/lib/theme-chalk/menu.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/menu.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/menu.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/menu.css diff --git a/static/js/element-ui/lib/theme-chalk/message-box.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/message-box.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/message-box.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/message-box.css diff --git a/static/js/element-ui/lib/theme-chalk/message.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/message.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/message.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/message.css diff --git a/static/js/element-ui/lib/theme-chalk/notification.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/notification.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/notification.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/notification.css diff --git a/static/js/element-ui/lib/theme-chalk/option-group.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/option-group.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/option-group.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/option-group.css diff --git a/static/js/element-ui/lib/theme-chalk/option.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/option.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/option.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/option.css diff --git a/static/js/element-ui/lib/theme-chalk/page-header.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/page-header.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/page-header.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/page-header.css diff --git a/static/js/element-ui/lib/theme-chalk/pagination.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/pagination.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/pagination.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/pagination.css diff --git a/static/js/element-ui/lib/theme-chalk/popconfirm.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/popconfirm.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/popconfirm.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/popconfirm.css diff --git a/static/js/element-ui/lib/theme-chalk/popover.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/popover.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/popover.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/popover.css diff --git a/static/js/element-ui/lib/theme-chalk/popper.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/popper.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/popper.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/popper.css diff --git a/static/js/element-ui/lib/theme-chalk/progress.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/progress.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/progress.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/progress.css diff --git a/static/js/element-ui/lib/theme-chalk/radio-button.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/radio-button.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/radio-button.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/radio-button.css diff --git a/static/js/element-ui/lib/theme-chalk/radio-group.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/radio-group.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/radio-group.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/radio-group.css diff --git a/static/js/element-ui/lib/theme-chalk/radio.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/radio.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/radio.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/radio.css diff --git a/static/js/element-ui/lib/theme-chalk/rate.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/rate.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/rate.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/rate.css diff --git a/static/js/element-ui/lib/theme-chalk/reset.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/reset.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/reset.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/reset.css diff --git a/static/js/element-ui/lib/theme-chalk/row.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/row.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/row.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/row.css diff --git a/static/js/element-ui/lib/theme-chalk/scrollbar.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/scrollbar.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/scrollbar.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/scrollbar.css diff --git a/static/js/element-ui/lib/theme-chalk/select-dropdown.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/select-dropdown.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/select-dropdown.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/select-dropdown.css diff --git a/static/js/element-ui/lib/theme-chalk/select.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/select.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/select.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/select.css diff --git a/static/js/element-ui/lib/theme-chalk/slider.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/slider.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/slider.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/slider.css diff --git a/static/js/element-ui/lib/theme-chalk/spinner.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/spinner.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/spinner.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/spinner.css diff --git a/static/js/element-ui/lib/theme-chalk/step.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/step.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/step.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/step.css diff --git a/static/js/element-ui/lib/theme-chalk/steps.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/steps.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/steps.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/steps.css diff --git a/src/pyminer/static/js/element-ui/lib/theme-chalk/submenu.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/submenu.css new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/static/js/element-ui/lib/theme-chalk/switch.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/switch.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/switch.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/switch.css diff --git a/src/pyminer/static/js/element-ui/lib/theme-chalk/tab-pane.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/tab-pane.css new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/static/js/element-ui/lib/theme-chalk/table-column.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/table-column.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/table-column.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/table-column.css diff --git a/static/js/element-ui/lib/theme-chalk/table.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/table.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/table.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/table.css diff --git a/static/js/element-ui/lib/theme-chalk/tabs.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/tabs.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/tabs.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/tabs.css diff --git a/static/js/element-ui/lib/theme-chalk/tag.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/tag.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/tag.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/tag.css diff --git a/static/js/element-ui/lib/theme-chalk/time-picker.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/time-picker.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/time-picker.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/time-picker.css diff --git a/static/js/element-ui/lib/theme-chalk/time-select.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/time-select.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/time-select.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/time-select.css diff --git a/static/js/element-ui/lib/theme-chalk/timeline-item.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/timeline-item.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/timeline-item.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/timeline-item.css diff --git a/static/js/element-ui/lib/theme-chalk/timeline.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/timeline.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/timeline.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/timeline.css diff --git a/static/js/element-ui/lib/theme-chalk/tooltip.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/tooltip.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/tooltip.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/tooltip.css diff --git a/static/js/element-ui/lib/theme-chalk/transfer.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/transfer.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/transfer.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/transfer.css diff --git a/static/js/element-ui/lib/theme-chalk/tree.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/tree.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/tree.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/tree.css diff --git a/static/js/element-ui/lib/theme-chalk/upload.css b/src/pyminer/static/js/element-ui/lib/theme-chalk/upload.css similarity index 100% rename from static/js/element-ui/lib/theme-chalk/upload.css rename to src/pyminer/static/js/element-ui/lib/theme-chalk/upload.css diff --git a/static/js/element-ui/lib/time-picker.js b/src/pyminer/static/js/element-ui/lib/time-picker.js similarity index 100% rename from static/js/element-ui/lib/time-picker.js rename to src/pyminer/static/js/element-ui/lib/time-picker.js diff --git a/static/js/element-ui/lib/time-select.js b/src/pyminer/static/js/element-ui/lib/time-select.js similarity index 100% rename from static/js/element-ui/lib/time-select.js rename to src/pyminer/static/js/element-ui/lib/time-select.js diff --git a/static/js/element-ui/lib/timeline-item.js b/src/pyminer/static/js/element-ui/lib/timeline-item.js similarity index 100% rename from static/js/element-ui/lib/timeline-item.js rename to src/pyminer/static/js/element-ui/lib/timeline-item.js diff --git a/static/js/element-ui/lib/timeline.js b/src/pyminer/static/js/element-ui/lib/timeline.js similarity index 100% rename from static/js/element-ui/lib/timeline.js rename to src/pyminer/static/js/element-ui/lib/timeline.js diff --git a/static/js/element-ui/lib/tooltip.js b/src/pyminer/static/js/element-ui/lib/tooltip.js similarity index 100% rename from static/js/element-ui/lib/tooltip.js rename to src/pyminer/static/js/element-ui/lib/tooltip.js diff --git a/static/js/element-ui/lib/transfer.js b/src/pyminer/static/js/element-ui/lib/transfer.js similarity index 100% rename from static/js/element-ui/lib/transfer.js rename to src/pyminer/static/js/element-ui/lib/transfer.js diff --git a/static/js/element-ui/lib/transitions/collapse-transition.js b/src/pyminer/static/js/element-ui/lib/transitions/collapse-transition.js similarity index 100% rename from static/js/element-ui/lib/transitions/collapse-transition.js rename to src/pyminer/static/js/element-ui/lib/transitions/collapse-transition.js diff --git a/static/js/element-ui/lib/tree.js b/src/pyminer/static/js/element-ui/lib/tree.js similarity index 100% rename from static/js/element-ui/lib/tree.js rename to src/pyminer/static/js/element-ui/lib/tree.js diff --git a/static/js/element-ui/lib/umd/locale/af-ZA.js b/src/pyminer/static/js/element-ui/lib/umd/locale/af-ZA.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/af-ZA.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/af-ZA.js diff --git a/static/js/element-ui/lib/umd/locale/ar.js b/src/pyminer/static/js/element-ui/lib/umd/locale/ar.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/ar.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/ar.js diff --git a/static/js/element-ui/lib/umd/locale/bg.js b/src/pyminer/static/js/element-ui/lib/umd/locale/bg.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/bg.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/bg.js diff --git a/static/js/element-ui/lib/umd/locale/ca.js b/src/pyminer/static/js/element-ui/lib/umd/locale/ca.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/ca.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/ca.js diff --git a/static/js/element-ui/lib/umd/locale/cs-CZ.js b/src/pyminer/static/js/element-ui/lib/umd/locale/cs-CZ.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/cs-CZ.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/cs-CZ.js diff --git a/static/js/element-ui/lib/umd/locale/da.js b/src/pyminer/static/js/element-ui/lib/umd/locale/da.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/da.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/da.js diff --git a/static/js/element-ui/lib/umd/locale/de.js b/src/pyminer/static/js/element-ui/lib/umd/locale/de.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/de.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/de.js diff --git a/static/js/element-ui/lib/umd/locale/ee.js b/src/pyminer/static/js/element-ui/lib/umd/locale/ee.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/ee.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/ee.js diff --git a/static/js/element-ui/lib/umd/locale/el.js b/src/pyminer/static/js/element-ui/lib/umd/locale/el.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/el.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/el.js diff --git a/static/js/element-ui/lib/umd/locale/en.js b/src/pyminer/static/js/element-ui/lib/umd/locale/en.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/en.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/en.js diff --git a/static/js/element-ui/lib/umd/locale/eo.js b/src/pyminer/static/js/element-ui/lib/umd/locale/eo.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/eo.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/eo.js diff --git a/static/js/element-ui/lib/umd/locale/es.js b/src/pyminer/static/js/element-ui/lib/umd/locale/es.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/es.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/es.js diff --git a/static/js/element-ui/lib/umd/locale/eu.js b/src/pyminer/static/js/element-ui/lib/umd/locale/eu.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/eu.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/eu.js diff --git a/static/js/element-ui/lib/umd/locale/fa.js b/src/pyminer/static/js/element-ui/lib/umd/locale/fa.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/fa.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/fa.js diff --git a/static/js/element-ui/lib/umd/locale/fi.js b/src/pyminer/static/js/element-ui/lib/umd/locale/fi.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/fi.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/fi.js diff --git a/static/js/element-ui/lib/umd/locale/fr.js b/src/pyminer/static/js/element-ui/lib/umd/locale/fr.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/fr.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/fr.js diff --git a/static/js/element-ui/lib/umd/locale/he.js b/src/pyminer/static/js/element-ui/lib/umd/locale/he.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/he.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/he.js diff --git a/static/js/element-ui/lib/umd/locale/hr.js b/src/pyminer/static/js/element-ui/lib/umd/locale/hr.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/hr.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/hr.js diff --git a/static/js/element-ui/lib/umd/locale/hu.js b/src/pyminer/static/js/element-ui/lib/umd/locale/hu.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/hu.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/hu.js diff --git a/static/js/element-ui/lib/umd/locale/hy-AM.js b/src/pyminer/static/js/element-ui/lib/umd/locale/hy-AM.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/hy-AM.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/hy-AM.js diff --git a/static/js/element-ui/lib/umd/locale/id.js b/src/pyminer/static/js/element-ui/lib/umd/locale/id.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/id.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/id.js diff --git a/static/js/element-ui/lib/umd/locale/it.js b/src/pyminer/static/js/element-ui/lib/umd/locale/it.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/it.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/it.js diff --git a/static/js/element-ui/lib/umd/locale/ja.js b/src/pyminer/static/js/element-ui/lib/umd/locale/ja.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/ja.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/ja.js diff --git a/static/js/element-ui/lib/umd/locale/kg.js b/src/pyminer/static/js/element-ui/lib/umd/locale/kg.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/kg.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/kg.js diff --git a/static/js/element-ui/lib/umd/locale/km.js b/src/pyminer/static/js/element-ui/lib/umd/locale/km.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/km.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/km.js diff --git a/static/js/element-ui/lib/umd/locale/ko.js b/src/pyminer/static/js/element-ui/lib/umd/locale/ko.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/ko.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/ko.js diff --git a/static/js/element-ui/lib/umd/locale/ku.js b/src/pyminer/static/js/element-ui/lib/umd/locale/ku.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/ku.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/ku.js diff --git a/static/js/element-ui/lib/umd/locale/kz.js b/src/pyminer/static/js/element-ui/lib/umd/locale/kz.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/kz.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/kz.js diff --git a/static/js/element-ui/lib/umd/locale/lt.js b/src/pyminer/static/js/element-ui/lib/umd/locale/lt.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/lt.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/lt.js diff --git a/static/js/element-ui/lib/umd/locale/lv.js b/src/pyminer/static/js/element-ui/lib/umd/locale/lv.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/lv.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/lv.js diff --git a/static/js/element-ui/lib/umd/locale/mn.js b/src/pyminer/static/js/element-ui/lib/umd/locale/mn.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/mn.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/mn.js diff --git a/static/js/element-ui/lib/umd/locale/nb-NO.js b/src/pyminer/static/js/element-ui/lib/umd/locale/nb-NO.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/nb-NO.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/nb-NO.js diff --git a/static/js/element-ui/lib/umd/locale/nl.js b/src/pyminer/static/js/element-ui/lib/umd/locale/nl.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/nl.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/nl.js diff --git a/static/js/element-ui/lib/umd/locale/pl.js b/src/pyminer/static/js/element-ui/lib/umd/locale/pl.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/pl.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/pl.js diff --git a/static/js/element-ui/lib/umd/locale/pt-br.js b/src/pyminer/static/js/element-ui/lib/umd/locale/pt-br.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/pt-br.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/pt-br.js diff --git a/static/js/element-ui/lib/umd/locale/pt.js b/src/pyminer/static/js/element-ui/lib/umd/locale/pt.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/pt.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/pt.js diff --git a/static/js/element-ui/lib/umd/locale/ro.js b/src/pyminer/static/js/element-ui/lib/umd/locale/ro.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/ro.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/ro.js diff --git a/static/js/element-ui/lib/umd/locale/ru-RU.js b/src/pyminer/static/js/element-ui/lib/umd/locale/ru-RU.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/ru-RU.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/ru-RU.js diff --git a/static/js/element-ui/lib/umd/locale/sk.js b/src/pyminer/static/js/element-ui/lib/umd/locale/sk.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/sk.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/sk.js diff --git a/static/js/element-ui/lib/umd/locale/sl.js b/src/pyminer/static/js/element-ui/lib/umd/locale/sl.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/sl.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/sl.js diff --git a/static/js/element-ui/lib/umd/locale/sr.js b/src/pyminer/static/js/element-ui/lib/umd/locale/sr.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/sr.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/sr.js diff --git a/static/js/element-ui/lib/umd/locale/sv-SE.js b/src/pyminer/static/js/element-ui/lib/umd/locale/sv-SE.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/sv-SE.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/sv-SE.js diff --git a/static/js/element-ui/lib/umd/locale/ta.js b/src/pyminer/static/js/element-ui/lib/umd/locale/ta.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/ta.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/ta.js diff --git a/static/js/element-ui/lib/umd/locale/th.js b/src/pyminer/static/js/element-ui/lib/umd/locale/th.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/th.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/th.js diff --git a/static/js/element-ui/lib/umd/locale/tk.js b/src/pyminer/static/js/element-ui/lib/umd/locale/tk.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/tk.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/tk.js diff --git a/static/js/element-ui/lib/umd/locale/tr-TR.js b/src/pyminer/static/js/element-ui/lib/umd/locale/tr-TR.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/tr-TR.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/tr-TR.js diff --git a/static/js/element-ui/lib/umd/locale/ua.js b/src/pyminer/static/js/element-ui/lib/umd/locale/ua.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/ua.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/ua.js diff --git a/static/js/element-ui/lib/umd/locale/ug-CN.js b/src/pyminer/static/js/element-ui/lib/umd/locale/ug-CN.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/ug-CN.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/ug-CN.js diff --git a/static/js/element-ui/lib/umd/locale/uz-UZ.js b/src/pyminer/static/js/element-ui/lib/umd/locale/uz-UZ.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/uz-UZ.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/uz-UZ.js diff --git a/static/js/element-ui/lib/umd/locale/vi.js b/src/pyminer/static/js/element-ui/lib/umd/locale/vi.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/vi.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/vi.js diff --git a/static/js/element-ui/lib/umd/locale/zh-CN.js b/src/pyminer/static/js/element-ui/lib/umd/locale/zh-CN.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/zh-CN.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/zh-CN.js diff --git a/static/js/element-ui/lib/umd/locale/zh-TW.js b/src/pyminer/static/js/element-ui/lib/umd/locale/zh-TW.js similarity index 100% rename from static/js/element-ui/lib/umd/locale/zh-TW.js rename to src/pyminer/static/js/element-ui/lib/umd/locale/zh-TW.js diff --git a/static/js/element-ui/lib/upload.js b/src/pyminer/static/js/element-ui/lib/upload.js similarity index 100% rename from static/js/element-ui/lib/upload.js rename to src/pyminer/static/js/element-ui/lib/upload.js diff --git a/static/js/element-ui/lib/utils/after-leave.js b/src/pyminer/static/js/element-ui/lib/utils/after-leave.js similarity index 100% rename from static/js/element-ui/lib/utils/after-leave.js rename to src/pyminer/static/js/element-ui/lib/utils/after-leave.js diff --git a/static/js/element-ui/lib/utils/aria-dialog.js b/src/pyminer/static/js/element-ui/lib/utils/aria-dialog.js similarity index 100% rename from static/js/element-ui/lib/utils/aria-dialog.js rename to src/pyminer/static/js/element-ui/lib/utils/aria-dialog.js diff --git a/static/js/element-ui/lib/utils/aria-utils.js b/src/pyminer/static/js/element-ui/lib/utils/aria-utils.js similarity index 100% rename from static/js/element-ui/lib/utils/aria-utils.js rename to src/pyminer/static/js/element-ui/lib/utils/aria-utils.js diff --git a/static/js/element-ui/lib/utils/clickoutside.js b/src/pyminer/static/js/element-ui/lib/utils/clickoutside.js similarity index 100% rename from static/js/element-ui/lib/utils/clickoutside.js rename to src/pyminer/static/js/element-ui/lib/utils/clickoutside.js diff --git a/static/js/element-ui/lib/utils/date-util.js b/src/pyminer/static/js/element-ui/lib/utils/date-util.js similarity index 100% rename from static/js/element-ui/lib/utils/date-util.js rename to src/pyminer/static/js/element-ui/lib/utils/date-util.js diff --git a/static/js/element-ui/lib/utils/date.js b/src/pyminer/static/js/element-ui/lib/utils/date.js similarity index 100% rename from static/js/element-ui/lib/utils/date.js rename to src/pyminer/static/js/element-ui/lib/utils/date.js diff --git a/static/js/element-ui/lib/utils/dom.js b/src/pyminer/static/js/element-ui/lib/utils/dom.js similarity index 100% rename from static/js/element-ui/lib/utils/dom.js rename to src/pyminer/static/js/element-ui/lib/utils/dom.js diff --git a/static/js/element-ui/lib/utils/menu/aria-menubar.js b/src/pyminer/static/js/element-ui/lib/utils/menu/aria-menubar.js similarity index 100% rename from static/js/element-ui/lib/utils/menu/aria-menubar.js rename to src/pyminer/static/js/element-ui/lib/utils/menu/aria-menubar.js diff --git a/static/js/element-ui/lib/utils/menu/aria-menuitem.js b/src/pyminer/static/js/element-ui/lib/utils/menu/aria-menuitem.js similarity index 100% rename from static/js/element-ui/lib/utils/menu/aria-menuitem.js rename to src/pyminer/static/js/element-ui/lib/utils/menu/aria-menuitem.js diff --git a/static/js/element-ui/lib/utils/menu/aria-submenu.js b/src/pyminer/static/js/element-ui/lib/utils/menu/aria-submenu.js similarity index 100% rename from static/js/element-ui/lib/utils/menu/aria-submenu.js rename to src/pyminer/static/js/element-ui/lib/utils/menu/aria-submenu.js diff --git a/static/js/element-ui/lib/utils/merge.js b/src/pyminer/static/js/element-ui/lib/utils/merge.js similarity index 100% rename from static/js/element-ui/lib/utils/merge.js rename to src/pyminer/static/js/element-ui/lib/utils/merge.js diff --git a/static/js/element-ui/lib/utils/popper.js b/src/pyminer/static/js/element-ui/lib/utils/popper.js similarity index 100% rename from static/js/element-ui/lib/utils/popper.js rename to src/pyminer/static/js/element-ui/lib/utils/popper.js diff --git a/static/js/element-ui/lib/utils/popup/index.js b/src/pyminer/static/js/element-ui/lib/utils/popup/index.js similarity index 100% rename from static/js/element-ui/lib/utils/popup/index.js rename to src/pyminer/static/js/element-ui/lib/utils/popup/index.js diff --git a/static/js/element-ui/lib/utils/popup/popup-manager.js b/src/pyminer/static/js/element-ui/lib/utils/popup/popup-manager.js similarity index 100% rename from static/js/element-ui/lib/utils/popup/popup-manager.js rename to src/pyminer/static/js/element-ui/lib/utils/popup/popup-manager.js diff --git a/static/js/element-ui/lib/utils/resize-event.js b/src/pyminer/static/js/element-ui/lib/utils/resize-event.js similarity index 100% rename from static/js/element-ui/lib/utils/resize-event.js rename to src/pyminer/static/js/element-ui/lib/utils/resize-event.js diff --git a/static/js/element-ui/lib/utils/scroll-into-view.js b/src/pyminer/static/js/element-ui/lib/utils/scroll-into-view.js similarity index 100% rename from static/js/element-ui/lib/utils/scroll-into-view.js rename to src/pyminer/static/js/element-ui/lib/utils/scroll-into-view.js diff --git a/static/js/element-ui/lib/utils/scrollbar-width.js b/src/pyminer/static/js/element-ui/lib/utils/scrollbar-width.js similarity index 100% rename from static/js/element-ui/lib/utils/scrollbar-width.js rename to src/pyminer/static/js/element-ui/lib/utils/scrollbar-width.js diff --git a/static/js/element-ui/lib/utils/shared.js b/src/pyminer/static/js/element-ui/lib/utils/shared.js similarity index 100% rename from static/js/element-ui/lib/utils/shared.js rename to src/pyminer/static/js/element-ui/lib/utils/shared.js diff --git a/static/js/element-ui/lib/utils/types.js b/src/pyminer/static/js/element-ui/lib/utils/types.js similarity index 100% rename from static/js/element-ui/lib/utils/types.js rename to src/pyminer/static/js/element-ui/lib/utils/types.js diff --git a/static/js/element-ui/lib/utils/util.js b/src/pyminer/static/js/element-ui/lib/utils/util.js similarity index 100% rename from static/js/element-ui/lib/utils/util.js rename to src/pyminer/static/js/element-ui/lib/utils/util.js diff --git a/static/js/element-ui/lib/utils/vdom.js b/src/pyminer/static/js/element-ui/lib/utils/vdom.js similarity index 100% rename from static/js/element-ui/lib/utils/vdom.js rename to src/pyminer/static/js/element-ui/lib/utils/vdom.js diff --git a/static/js/element-ui/lib/utils/vue-popper.js b/src/pyminer/static/js/element-ui/lib/utils/vue-popper.js similarity index 100% rename from static/js/element-ui/lib/utils/vue-popper.js rename to src/pyminer/static/js/element-ui/lib/utils/vue-popper.js diff --git a/static/js/element-ui/package.json b/src/pyminer/static/js/element-ui/package.json similarity index 100% rename from static/js/element-ui/package.json rename to src/pyminer/static/js/element-ui/package.json diff --git a/static/js/form-create.min.js b/src/pyminer/static/js/form-create.min.js similarity index 100% rename from static/js/form-create.min.js rename to src/pyminer/static/js/form-create.min.js diff --git a/static/js/iview.min.js b/src/pyminer/static/js/iview.min.js similarity index 100% rename from static/js/iview.min.js rename to src/pyminer/static/js/iview.min.js diff --git a/static/js/jquery-3.5.1.min.js b/src/pyminer/static/js/jquery-3.5.1.min.js similarity index 100% rename from static/js/jquery-3.5.1.min.js rename to src/pyminer/static/js/jquery-3.5.1.min.js diff --git a/static/js/vue.min.js b/src/pyminer/static/js/vue.min.js similarity index 100% rename from static/js/vue.min.js rename to src/pyminer/static/js/vue.min.js diff --git a/static/tutorials_page.html b/src/pyminer/static/tutorials_page.html similarity index 100% rename from static/tutorials_page.html rename to src/pyminer/static/tutorials_page.html diff --git a/update_translation.py b/src/pyminer/update_translation.py similarity index 100% rename from update_translation.py rename to src/pyminer/update_translation.py diff --git a/utils/__init__.py b/src/pyminer/utils/__init__.py similarity index 97% rename from utils/__init__.py rename to src/pyminer/utils/__init__.py index e70f3f750d54d570c6e0ec2f83899d1d0346d38b..e565842a138c14906a24c2fbd9532c3551eb9b73 100644 --- a/utils/__init__.py +++ b/src/pyminer/utils/__init__.py @@ -54,11 +54,12 @@ def get_application() -> "QApplication": return _application -def get_main_window() -> Optional["app2.MainWindow"]: +def get_main_window() -> "app2.MainWindow": """ 获取主窗口或者主控件。 Returns: """ + assert _main_window is not None return _main_window diff --git a/utils/debug/__init__.py b/src/pyminer/utils/debug/__init__.py similarity index 100% rename from utils/debug/__init__.py rename to src/pyminer/utils/debug/__init__.py diff --git a/utils/debug/debuggerprocess.py b/src/pyminer/utils/debug/debuggerprocess.py similarity index 95% rename from utils/debug/debuggerprocess.py rename to src/pyminer/utils/debug/debuggerprocess.py index 44b987bd6446c8b60de25cddbcef23129e2821d4..8a8761f913a453dea4aeb8af31f494bd2a86558b 100644 --- a/utils/debug/debuggerprocess.py +++ b/src/pyminer/utils/debug/debuggerprocess.py @@ -6,6 +6,8 @@ import time import chardet from typing import List +import packages.code_editor.utils.utils + class PMProcess(): def __init__(self, args: List[str]): @@ -35,7 +37,7 @@ class PMProcess(): for line in iter(stream.readline, b''): if self.terminate: break encoding = chardet.detect(line)['encoding'] - queue.put(str(type) + line.decode(encoding)) + queue.put(str(type) + packages.code_editor.utils.utils.decode(encoding)) stream.close() def consoleLoop(self): # 封装后的内容。 diff --git a/utils/debug/pdbtest.py b/src/pyminer/utils/debug/pdbtest.py similarity index 100% rename from utils/debug/pdbtest.py rename to src/pyminer/utils/debug/pdbtest.py diff --git a/utils/debug/pmdebug.py b/src/pyminer/utils/debug/pmdebug.py similarity index 100% rename from utils/debug/pmdebug.py rename to src/pyminer/utils/debug/pmdebug.py diff --git a/utils/debug/test2.py b/src/pyminer/utils/debug/test2.py similarity index 100% rename from utils/debug/test2.py rename to src/pyminer/utils/debug/test2.py diff --git a/src/pyminer/utils/dev/__init__.py b/src/pyminer/utils/dev/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..8f507ff9163e5be322f2db41689554682fc91d4c --- /dev/null +++ b/src/pyminer/utils/dev/__init__.py @@ -0,0 +1,3 @@ +""" +用于存储开发时用到的一些工具 +""" diff --git a/src/pyminer/utils/dev/system.py b/src/pyminer/utils/dev/system.py new file mode 100644 index 0000000000000000000000000000000000000000..9f866a558483c12a6a8d49acf3ab653be428b3a6 --- /dev/null +++ b/src/pyminer/utils/dev/system.py @@ -0,0 +1,18 @@ +import subprocess +from pathlib import Path +from typing import Union + +import chardet + + +def system(*args: Union[str, Path]): + args = [str(arg) for arg in args] + result = subprocess.run(args=args, capture_output=True) + if stdout := result.stdout: + print('Out: ') + stdout = stdout.decode(chardet.detect(result.stdout)['encoding']) + print(stdout) + if stderr := result.stderr: + print('Error: ') + stderr = stderr.decode(chardet.detect(result.stderr)['encoding']) + print(stderr) diff --git a/utils/doc/__init__.py b/src/pyminer/utils/doc/__init__.py similarity index 100% rename from utils/doc/__init__.py rename to src/pyminer/utils/doc/__init__.py diff --git a/utils/doc/doc_guide/choose_position.md b/src/pyminer/utils/doc/doc_guide/choose_position.md similarity index 100% rename from utils/doc/doc_guide/choose_position.md rename to src/pyminer/utils/doc/doc_guide/choose_position.md diff --git a/utils/doc/doc_guide/compile.md b/src/pyminer/utils/doc/doc_guide/compile.md similarity index 100% rename from utils/doc/doc_guide/compile.md rename to src/pyminer/utils/doc/doc_guide/compile.md diff --git a/utils/doc/doc_guide/index.rst b/src/pyminer/utils/doc/doc_guide/index.rst similarity index 100% rename from utils/doc/doc_guide/index.rst rename to src/pyminer/utils/doc/doc_guide/index.rst diff --git a/utils/doc/doc_guide/md_guide.rst b/src/pyminer/utils/doc/doc_guide/md_guide.rst similarity index 100% rename from utils/doc/doc_guide/md_guide.rst rename to src/pyminer/utils/doc/doc_guide/md_guide.rst diff --git a/utils/doc/doc_guide/rst_guide.rst b/src/pyminer/utils/doc/doc_guide/rst_guide.rst similarity index 100% rename from utils/doc/doc_guide/rst_guide.rst rename to src/pyminer/utils/doc/doc_guide/rst_guide.rst diff --git a/utils/doc/doc_guide/use_chevereto.rst b/src/pyminer/utils/doc/doc_guide/use_chevereto.rst similarity index 100% rename from utils/doc/doc_guide/use_chevereto.rst rename to src/pyminer/utils/doc/doc_guide/use_chevereto.rst diff --git a/utils/doc/file_tree.py b/src/pyminer/utils/doc/file_tree.py similarity index 100% rename from utils/doc/file_tree.py rename to src/pyminer/utils/doc/file_tree.py diff --git a/utils/doc/index.rst b/src/pyminer/utils/doc/index.rst similarity index 100% rename from utils/doc/index.rst rename to src/pyminer/utils/doc/index.rst diff --git a/utils/doc/rst_generator.py b/src/pyminer/utils/doc/rst_generator.py similarity index 100% rename from utils/doc/rst_generator.py rename to src/pyminer/utils/doc/rst_generator.py diff --git a/utils/doc/template/module.rst_t b/src/pyminer/utils/doc/template/module.rst_t similarity index 100% rename from utils/doc/template/module.rst_t rename to src/pyminer/utils/doc/template/module.rst_t diff --git a/utils/doc/template/package.rst_t b/src/pyminer/utils/doc/template/package.rst_t similarity index 100% rename from utils/doc/template/package.rst_t rename to src/pyminer/utils/doc/template/package.rst_t diff --git a/utils/doc/template/toc.rst_t b/src/pyminer/utils/doc/template/toc.rst_t similarity index 100% rename from utils/doc/template/toc.rst_t rename to src/pyminer/utils/doc/template/toc.rst_t diff --git "a/utils/doc_figures/\345\270\225\347\264\257\346\211\230\345\233\276.jpg" "b/src/pyminer/utils/doc_figures/\345\270\225\347\264\257\346\211\230\345\233\276.jpg" similarity index 100% rename from "utils/doc_figures/\345\270\225\347\264\257\346\211\230\345\233\276.jpg" rename to "src/pyminer/utils/doc_figures/\345\270\225\347\264\257\346\211\230\345\233\276.jpg" diff --git "a/utils/doc_figures/\345\272\224\347\224\250\345\267\245\345\205\267\346\240\217.png" "b/src/pyminer/utils/doc_figures/\345\272\224\347\224\250\345\267\245\345\205\267\346\240\217.png" similarity index 100% rename from "utils/doc_figures/\345\272\224\347\224\250\345\267\245\345\205\267\346\240\217.png" rename to "src/pyminer/utils/doc_figures/\345\272\224\347\224\250\345\267\245\345\205\267\346\240\217.png" diff --git "a/utils/doc_figures/\345\274\202\345\270\270\345\200\274\346\243\200\346\265\213" "b/src/pyminer/utils/doc_figures/\345\274\202\345\270\270\345\200\274\346\243\200\346\265\213" similarity index 100% rename from "utils/doc_figures/\345\274\202\345\270\270\345\200\274\346\243\200\346\265\213" rename to "src/pyminer/utils/doc_figures/\345\274\202\345\270\270\345\200\274\346\243\200\346\265\213" diff --git "a/utils/doc_figures/\346\240\207\345\207\206\347\247\221\345\255\246\350\256\241\347\256\227app\347\225\214\351\235\242\345\216\237\345\236\213.png" "b/src/pyminer/utils/doc_figures/\346\240\207\345\207\206\347\247\221\345\255\246\350\256\241\347\256\227app\347\225\214\351\235\242\345\216\237\345\236\213.png" similarity index 100% rename from "utils/doc_figures/\346\240\207\345\207\206\347\247\221\345\255\246\350\256\241\347\256\227app\347\225\214\351\235\242\345\216\237\345\236\213.png" rename to "src/pyminer/utils/doc_figures/\346\240\207\345\207\206\347\247\221\345\255\246\350\256\241\347\256\227app\347\225\214\351\235\242\345\216\237\345\236\213.png" diff --git "a/utils/doc_figures/\351\241\271\347\233\256\347\273\204\346\210\220\347\273\223\346\236\204.png" "b/src/pyminer/utils/doc_figures/\351\241\271\347\233\256\347\273\204\346\210\220\347\273\223\346\236\204.png" similarity index 100% rename from "utils/doc_figures/\351\241\271\347\233\256\347\273\204\346\210\220\347\273\223\346\236\204.png" rename to "src/pyminer/utils/doc_figures/\351\241\271\347\233\256\347\273\204\346\210\220\347\273\223\346\236\204.png" diff --git a/utils/environ.py b/src/pyminer/utils/environ.py similarity index 100% rename from utils/environ.py rename to src/pyminer/utils/environ.py diff --git a/utils/http_client.py b/src/pyminer/utils/http_client.py similarity index 100% rename from utils/http_client.py rename to src/pyminer/utils/http_client.py diff --git a/utils/io/__init__.py b/src/pyminer/utils/io/__init__.py similarity index 100% rename from utils/io/__init__.py rename to src/pyminer/utils/io/__init__.py diff --git a/utils/io/dbconnect/__init__.py b/src/pyminer/utils/io/dbconnect/__init__.py similarity index 100% rename from utils/io/dbconnect/__init__.py rename to src/pyminer/utils/io/dbconnect/__init__.py diff --git a/utils/io/dbconnect/dbBaseTool.py b/src/pyminer/utils/io/dbconnect/dbBaseTool.py similarity index 100% rename from utils/io/dbconnect/dbBaseTool.py rename to src/pyminer/utils/io/dbconnect/dbBaseTool.py diff --git a/utils/io/dbconnect/dbConnectAccount.pkl b/src/pyminer/utils/io/dbconnect/dbConnectAccount.pkl similarity index 100% rename from utils/io/dbconnect/dbConnectAccount.pkl rename to src/pyminer/utils/io/dbconnect/dbConnectAccount.pkl diff --git a/utils/io/dbconnect/dbutils.py b/src/pyminer/utils/io/dbconnect/dbutils.py similarity index 100% rename from utils/io/dbconnect/dbutils.py rename to src/pyminer/utils/io/dbconnect/dbutils.py diff --git a/utils/io/dbconnect/test_dbBaseTool_add_connection.py b/src/pyminer/utils/io/dbconnect/test_dbBaseTool_add_connection.py similarity index 100% rename from utils/io/dbconnect/test_dbBaseTool_add_connection.py rename to src/pyminer/utils/io/dbconnect/test_dbBaseTool_add_connection.py diff --git a/utils/io/dbconnect/test_dbBaseTool_query.py b/src/pyminer/utils/io/dbconnect/test_dbBaseTool_query.py similarity index 100% rename from utils/io/dbconnect/test_dbBaseTool_query.py rename to src/pyminer/utils/io/dbconnect/test_dbBaseTool_query.py diff --git a/src/pyminer/utils/io/file_import.py b/src/pyminer/utils/io/file_import.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/utils/io/fileutil/.gitignore b/src/pyminer/utils/io/fileutil/.gitignore similarity index 100% rename from utils/io/fileutil/.gitignore rename to src/pyminer/utils/io/fileutil/.gitignore diff --git a/utils/io/fileutil/__init__.py b/src/pyminer/utils/io/fileutil/__init__.py similarity index 100% rename from utils/io/fileutil/__init__.py rename to src/pyminer/utils/io/fileutil/__init__.py diff --git a/utils/io/fileutil/compressutils.py b/src/pyminer/utils/io/fileutil/compressutils.py similarity index 100% rename from utils/io/fileutil/compressutils.py rename to src/pyminer/utils/io/fileutil/compressutils.py diff --git a/utils/io/fileutil/encoding.py b/src/pyminer/utils/io/fileutil/encoding.py similarity index 100% rename from utils/io/fileutil/encoding.py rename to src/pyminer/utils/io/fileutil/encoding.py diff --git a/utils/io/fileutil/search_in_path.py b/src/pyminer/utils/io/fileutil/search_in_path.py similarity index 100% rename from utils/io/fileutil/search_in_path.py rename to src/pyminer/utils/io/fileutil/search_in_path.py diff --git a/utils/io/fileutil/source/encoding/test_ascii.csv b/src/pyminer/utils/io/fileutil/source/encoding/test_ascii.csv similarity index 100% rename from utils/io/fileutil/source/encoding/test_ascii.csv rename to src/pyminer/utils/io/fileutil/source/encoding/test_ascii.csv diff --git a/utils/io/fileutil/source/encoding/test_gb2312.csv b/src/pyminer/utils/io/fileutil/source/encoding/test_gb2312.csv similarity index 100% rename from utils/io/fileutil/source/encoding/test_gb2312.csv rename to src/pyminer/utils/io/fileutil/source/encoding/test_gb2312.csv diff --git a/utils/io/fileutil/source/encoding/test_gbk.csv b/src/pyminer/utils/io/fileutil/source/encoding/test_gbk.csv similarity index 100% rename from utils/io/fileutil/source/encoding/test_gbk.csv rename to src/pyminer/utils/io/fileutil/source/encoding/test_gbk.csv diff --git a/utils/io/fileutil/source/encoding/test_utf8.csv b/src/pyminer/utils/io/fileutil/source/encoding/test_utf8.csv similarity index 100% rename from utils/io/fileutil/source/encoding/test_utf8.csv rename to src/pyminer/utils/io/fileutil/source/encoding/test_utf8.csv diff --git a/utils/io/fileutil/test/test_word_in_line.py b/src/pyminer/utils/io/fileutil/test/test_word_in_line.py similarity index 100% rename from utils/io/fileutil/test/test_word_in_line.py rename to src/pyminer/utils/io/fileutil/test/test_word_in_line.py diff --git a/utils/io/fileutil/variableutils.py b/src/pyminer/utils/io/fileutil/variableutils.py similarity index 100% rename from utils/io/fileutil/variableutils.py rename to src/pyminer/utils/io/fileutil/variableutils.py diff --git a/utils/io/piputil.py b/src/pyminer/utils/io/piputil.py similarity index 100% rename from utils/io/piputil.py rename to src/pyminer/utils/io/piputil.py diff --git a/src/pyminer/utils/io/pmserial/__init__.py b/src/pyminer/utils/io/pmserial/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/utils/io/pmserial/pmqtreadserial.py b/src/pyminer/utils/io/pmserial/pmqtreadserial.py similarity index 96% rename from utils/io/pmserial/pmqtreadserial.py rename to src/pyminer/utils/io/pmserial/pmqtreadserial.py index 642c7f68a85554663ee4d6d9fbf963d6e3774ada..a7a8ad59cfdc9543f6fde90ce36ac119d4ca0923 100644 --- a/utils/io/pmserial/pmqtreadserial.py +++ b/src/pyminer/utils/io/pmserial/pmqtreadserial.py @@ -6,6 +6,8 @@ import sys import time from PySide2.QtWidgets import QApplication, QMainWindow, QTextEdit from PySide2.QtCore import QObject, QThread, Signal + +import packages.code_editor.utils.utils from pmgwidgets import PMQThreadObject, QTextCursor from utils.io.pmserial.readserial import get_all_serial_names @@ -47,7 +49,7 @@ class PMGSerialWorker(QObject): chars = com.readline(com.inWaiting()) print(chars) try: - chars = chars.decode(self.coding) + chars = packages.code_editor.utils.utils.decode(self.coding) except UnicodeDecodeError: continue if self.splitter != '': diff --git a/utils/io/pmserial/readserial.py b/src/pyminer/utils/io/pmserial/readserial.py similarity index 86% rename from utils/io/pmserial/readserial.py rename to src/pyminer/utils/io/pmserial/readserial.py index e3469a2cc0a983bbde19e59cbfce97ad78c0a5dc..8fc717fca3bab694fa20327b3698113074c3e401 100644 --- a/utils/io/pmserial/readserial.py +++ b/src/pyminer/utils/io/pmserial/readserial.py @@ -4,6 +4,8 @@ import time from collections import deque import threading +import packages.code_editor.utils.utils + def get_all_serial_names(): import serial.tools.list_ports @@ -20,7 +22,7 @@ if __name__ == '__main__': recv_queue = deque() while True: end_time = time.time() - s += com.readline(com.inWaiting()).decode('ascii') + s += packages.code_editor.utils.utils.decode('ascii') l = s.split('\n') if len(l) > 1: recv_queue.extend(l[:len(l) - 1]) diff --git a/utils/path.py b/src/pyminer/utils/path.py similarity index 100% rename from utils/path.py rename to src/pyminer/utils/path.py diff --git a/utils/platform.py b/src/pyminer/utils/platform.py similarity index 100% rename from utils/platform.py rename to src/pyminer/utils/platform.py diff --git a/utils/settings/__init__.py b/src/pyminer/utils/settings/__init__.py similarity index 100% rename from utils/settings/__init__.py rename to src/pyminer/utils/settings/__init__.py diff --git a/utils/settings/settings.py b/src/pyminer/utils/settings/settings.py similarity index 100% rename from utils/settings/settings.py rename to src/pyminer/utils/settings/settings.py diff --git a/utils/ui/__init__.py b/src/pyminer/utils/ui/__init__.py similarity index 100% rename from utils/ui/__init__.py rename to src/pyminer/utils/ui/__init__.py diff --git a/src/pyminer/utils/ui/app/__init__.py b/src/pyminer/utils/ui/app/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/utils/ui/app/pmbasicapp.py b/src/pyminer/utils/ui/app/pmbasicapp.py similarity index 100% rename from utils/ui/app/pmbasicapp.py rename to src/pyminer/utils/ui/app/pmbasicapp.py diff --git a/utils/ui/app/test/basicapp_abnormal.py b/src/pyminer/utils/ui/app/test/basicapp_abnormal.py similarity index 100% rename from utils/ui/app/test/basicapp_abnormal.py rename to src/pyminer/utils/ui/app/test/basicapp_abnormal.py diff --git a/utils/ui/app/test/basicapp_pareto.py b/src/pyminer/utils/ui/app/test/basicapp_pareto.py similarity index 100% rename from utils/ui/app/test/basicapp_pareto.py rename to src/pyminer/utils/ui/app/test/basicapp_pareto.py diff --git a/utils/ui/src/balance.png b/src/pyminer/utils/ui/src/balance.png similarity index 100% rename from utils/ui/src/balance.png rename to src/pyminer/utils/ui/src/balance.png diff --git a/utils/ui/src/chemestry.png b/src/pyminer/utils/ui/src/chemestry.png similarity index 100% rename from utils/ui/src/chemestry.png rename to src/pyminer/utils/ui/src/chemestry.png diff --git a/utils/ui/src/electricity.png b/src/pyminer/utils/ui/src/electricity.png similarity index 100% rename from utils/ui/src/electricity.png rename to src/pyminer/utils/ui/src/electricity.png diff --git a/utils/ui/src/engineering machinery.png b/src/pyminer/utils/ui/src/engineering machinery.png similarity index 100% rename from utils/ui/src/engineering machinery.png rename to src/pyminer/utils/ui/src/engineering machinery.png diff --git a/utils/ui/src/fracture.png b/src/pyminer/utils/ui/src/fracture.png similarity index 100% rename from utils/ui/src/fracture.png rename to src/pyminer/utils/ui/src/fracture.png diff --git a/utils/ui/src/function.png b/src/pyminer/utils/ui/src/function.png similarity index 100% rename from utils/ui/src/function.png rename to src/pyminer/utils/ui/src/function.png diff --git a/utils/ui/src/gauge.png b/src/pyminer/utils/ui/src/gauge.png similarity index 100% rename from utils/ui/src/gauge.png rename to src/pyminer/utils/ui/src/gauge.png diff --git a/utils/ui/src/histogram.png b/src/pyminer/utils/ui/src/histogram.png similarity index 100% rename from utils/ui/src/histogram.png rename to src/pyminer/utils/ui/src/histogram.png diff --git "a/utils/ui/src/ic_common_\347\224\237\347\211\251&\350\207\252\347\204\266.png" "b/src/pyminer/utils/ui/src/ic_common_\347\224\237\347\211\251&\350\207\252\347\204\266.png" similarity index 100% rename from "utils/ui/src/ic_common_\347\224\237\347\211\251&\350\207\252\347\204\266.png" rename to "src/pyminer/utils/ui/src/ic_common_\347\224\237\347\211\251&\350\207\252\347\204\266.png" diff --git a/utils/ui/src/loadwave.png b/src/pyminer/utils/ui/src/loadwave.png similarity index 100% rename from utils/ui/src/loadwave.png rename to src/pyminer/utils/ui/src/loadwave.png diff --git a/utils/ui/src/log.png b/src/pyminer/utils/ui/src/log.png similarity index 100% rename from utils/ui/src/log.png rename to src/pyminer/utils/ui/src/log.png diff --git a/utils/ui/src/math_1.png b/src/pyminer/utils/ui/src/math_1.png similarity index 100% rename from utils/ui/src/math_1.png rename to src/pyminer/utils/ui/src/math_1.png diff --git a/utils/ui/src/math_2.png b/src/pyminer/utils/ui/src/math_2.png similarity index 100% rename from utils/ui/src/math_2.png rename to src/pyminer/utils/ui/src/math_2.png diff --git a/utils/ui/src/math_3.png b/src/pyminer/utils/ui/src/math_3.png similarity index 100% rename from utils/ui/src/math_3.png rename to src/pyminer/utils/ui/src/math_3.png diff --git a/utils/ui/src/mechanics.png b/src/pyminer/utils/ui/src/mechanics.png similarity index 100% rename from utils/ui/src/mechanics.png rename to src/pyminer/utils/ui/src/mechanics.png diff --git a/utils/ui/src/money.png b/src/pyminer/utils/ui/src/money.png similarity index 100% rename from utils/ui/src/money.png rename to src/pyminer/utils/ui/src/money.png diff --git a/utils/ui/src/motor.png b/src/pyminer/utils/ui/src/motor.png similarity index 100% rename from utils/ui/src/motor.png rename to src/pyminer/utils/ui/src/motor.png diff --git a/utils/ui/src/motor_2.png b/src/pyminer/utils/ui/src/motor_2.png similarity index 100% rename from utils/ui/src/motor_2.png rename to src/pyminer/utils/ui/src/motor_2.png diff --git a/utils/ui/src/normal_distribution.png b/src/pyminer/utils/ui/src/normal_distribution.png similarity index 100% rename from utils/ui/src/normal_distribution.png rename to src/pyminer/utils/ui/src/normal_distribution.png diff --git a/utils/ui/src/physics.png b/src/pyminer/utils/ui/src/physics.png similarity index 100% rename from utils/ui/src/physics.png rename to src/pyminer/utils/ui/src/physics.png diff --git a/utils/ui/src/physics_2.png b/src/pyminer/utils/ui/src/physics_2.png similarity index 100% rename from utils/ui/src/physics_2.png rename to src/pyminer/utils/ui/src/physics_2.png diff --git a/utils/ui/src/plot_1.png b/src/pyminer/utils/ui/src/plot_1.png similarity index 100% rename from utils/ui/src/plot_1.png rename to src/pyminer/utils/ui/src/plot_1.png diff --git a/utils/ui/src/plot_2.png b/src/pyminer/utils/ui/src/plot_2.png similarity index 100% rename from utils/ui/src/plot_2.png rename to src/pyminer/utils/ui/src/plot_2.png diff --git a/utils/ui/src/plot_3.png b/src/pyminer/utils/ui/src/plot_3.png similarity index 100% rename from utils/ui/src/plot_3.png rename to src/pyminer/utils/ui/src/plot_3.png diff --git a/utils/ui/src/plot_4.png b/src/pyminer/utils/ui/src/plot_4.png similarity index 100% rename from utils/ui/src/plot_4.png rename to src/pyminer/utils/ui/src/plot_4.png diff --git a/utils/ui/src/roboarm.png b/src/pyminer/utils/ui/src/roboarm.png similarity index 100% rename from utils/ui/src/roboarm.png rename to src/pyminer/utils/ui/src/roboarm.png diff --git a/utils/ui/src/run.png b/src/pyminer/utils/ui/src/run.png similarity index 100% rename from utils/ui/src/run.png rename to src/pyminer/utils/ui/src/run.png diff --git a/utils/ui/src/run_cell.png b/src/pyminer/utils/ui/src/run_cell.png similarity index 100% rename from utils/ui/src/run_cell.png rename to src/pyminer/utils/ui/src/run_cell.png diff --git a/utils/ui/src/settings_1.png b/src/pyminer/utils/ui/src/settings_1.png similarity index 100% rename from utils/ui/src/settings_1.png rename to src/pyminer/utils/ui/src/settings_1.png diff --git a/utils/ui/src/settings_2.png b/src/pyminer/utils/ui/src/settings_2.png similarity index 100% rename from utils/ui/src/settings_2.png rename to src/pyminer/utils/ui/src/settings_2.png diff --git a/utils/ui/src/settings_3.png b/src/pyminer/utils/ui/src/settings_3.png similarity index 100% rename from utils/ui/src/settings_3.png rename to src/pyminer/utils/ui/src/settings_3.png diff --git a/utils/ui/src/sinsidual.png b/src/pyminer/utils/ui/src/sinsidual.png similarity index 100% rename from utils/ui/src/sinsidual.png rename to src/pyminer/utils/ui/src/sinsidual.png diff --git a/utils/ui/src/statistics.png b/src/pyminer/utils/ui/src/statistics.png similarity index 100% rename from utils/ui/src/statistics.png rename to src/pyminer/utils/ui/src/statistics.png diff --git a/utils/ui/src/statistics_2.png b/src/pyminer/utils/ui/src/statistics_2.png similarity index 100% rename from utils/ui/src/statistics_2.png rename to src/pyminer/utils/ui/src/statistics_2.png diff --git a/utils/ui/src/statistics_3.png b/src/pyminer/utils/ui/src/statistics_3.png similarity index 100% rename from utils/ui/src/statistics_3.png rename to src/pyminer/utils/ui/src/statistics_3.png diff --git a/utils/ui/src/viberation.png b/src/pyminer/utils/ui/src/viberation.png similarity index 100% rename from utils/ui/src/viberation.png rename to src/pyminer/utils/ui/src/viberation.png diff --git a/utils/ui/src/wave.png b/src/pyminer/utils/ui/src/wave.png similarity index 100% rename from utils/ui/src/wave.png rename to src/pyminer/utils/ui/src/wave.png diff --git a/utils/ui/src/wave_2.png b/src/pyminer/utils/ui/src/wave_2.png similarity index 100% rename from utils/ui/src/wave_2.png rename to src/pyminer/utils/ui/src/wave_2.png diff --git a/utils/ui/src/wave_history.png b/src/pyminer/utils/ui/src/wave_history.png similarity index 100% rename from utils/ui/src/wave_history.png rename to src/pyminer/utils/ui/src/wave_history.png diff --git "a/utils/ui/src/\345\210\206\345\255\220\347\224\237\347\211\251\345\255\246\345\271\263\345\217\260-\347\201\260.png" "b/src/pyminer/utils/ui/src/\345\210\206\345\255\220\347\224\237\347\211\251\345\255\246\345\271\263\345\217\260-\347\201\260.png" similarity index 100% rename from "utils/ui/src/\345\210\206\345\255\220\347\224\237\347\211\251\345\255\246\345\271\263\345\217\260-\347\201\260.png" rename to "src/pyminer/utils/ui/src/\345\210\206\345\255\220\347\224\237\347\211\251\345\255\246\345\271\263\345\217\260-\347\201\260.png" diff --git "a/utils/ui/src/\347\224\237\345\221\275\345\201\245\345\272\267\344\272\247\344\270\232_2\347\224\237\347\211\251\345\214\273\350\215\257.png" "b/src/pyminer/utils/ui/src/\347\224\237\345\221\275\345\201\245\345\272\267\344\272\247\344\270\232_2\347\224\237\347\211\251\345\214\273\350\215\257.png" similarity index 100% rename from "utils/ui/src/\347\224\237\345\221\275\345\201\245\345\272\267\344\272\247\344\270\232_2\347\224\237\347\211\251\345\214\273\350\215\257.png" rename to "src/pyminer/utils/ui/src/\347\224\237\345\221\275\345\201\245\345\272\267\344\272\247\344\270\232_2\347\224\237\347\211\251\345\214\273\350\215\257.png" diff --git "a/utils/ui/src/\347\224\237\347\211\251 (1).png" "b/src/pyminer/utils/ui/src/\347\224\237\347\211\251 (1).png" similarity index 100% rename from "utils/ui/src/\347\224\237\347\211\251 (1).png" rename to "src/pyminer/utils/ui/src/\347\224\237\347\211\251 (1).png" diff --git "a/utils/ui/src/\347\224\237\347\211\251 (2).png" "b/src/pyminer/utils/ui/src/\347\224\237\347\211\251 (2).png" similarity index 100% rename from "utils/ui/src/\347\224\237\347\211\251 (2).png" rename to "src/pyminer/utils/ui/src/\347\224\237\347\211\251 (2).png" diff --git "a/utils/ui/src/\347\224\237\347\211\251 (3).png" "b/src/pyminer/utils/ui/src/\347\224\237\347\211\251 (3).png" similarity index 100% rename from "utils/ui/src/\347\224\237\347\211\251 (3).png" rename to "src/pyminer/utils/ui/src/\347\224\237\347\211\251 (3).png" diff --git "a/utils/ui/src/\347\224\237\347\211\251 (4).png" "b/src/pyminer/utils/ui/src/\347\224\237\347\211\251 (4).png" similarity index 100% rename from "utils/ui/src/\347\224\237\347\211\251 (4).png" rename to "src/pyminer/utils/ui/src/\347\224\237\347\211\251 (4).png" diff --git "a/utils/ui/src/\347\224\237\347\211\251.png" "b/src/pyminer/utils/ui/src/\347\224\237\347\211\251.png" similarity index 100% rename from "utils/ui/src/\347\224\237\347\211\251.png" rename to "src/pyminer/utils/ui/src/\347\224\237\347\211\251.png" diff --git "a/utils/ui/src/\347\224\237\347\211\251\350\257\206\345\210\253 (1).png" "b/src/pyminer/utils/ui/src/\347\224\237\347\211\251\350\257\206\345\210\253 (1).png" similarity index 100% rename from "utils/ui/src/\347\224\237\347\211\251\350\257\206\345\210\253 (1).png" rename to "src/pyminer/utils/ui/src/\347\224\237\347\211\251\350\257\206\345\210\253 (1).png" diff --git "a/utils/ui/src/\347\224\237\347\211\251\350\257\206\345\210\253.png" "b/src/pyminer/utils/ui/src/\347\224\237\347\211\251\350\257\206\345\210\253.png" similarity index 100% rename from "utils/ui/src/\347\224\237\347\211\251\350\257\206\345\210\253.png" rename to "src/pyminer/utils/ui/src/\347\224\237\347\211\251\350\257\206\345\210\253.png" diff --git a/utils/ui/translation.py b/src/pyminer/utils/ui/translation.py similarity index 100% rename from utils/ui/translation.py rename to src/pyminer/utils/ui/translation.py diff --git a/utils/ui/uiutil/__init__.py b/src/pyminer/utils/ui/uiutil/__init__.py similarity index 100% rename from utils/ui/uiutil/__init__.py rename to src/pyminer/utils/ui/uiutil/__init__.py diff --git a/utils/ui/uiutil/datashowutil.py b/src/pyminer/utils/ui/uiutil/datashowutil.py similarity index 100% rename from utils/ui/uiutil/datashowutil.py rename to src/pyminer/utils/ui/uiutil/datashowutil.py diff --git a/utils/ui/uiutil/formatting/__init__.py b/src/pyminer/utils/ui/uiutil/formatting/__init__.py similarity index 100% rename from utils/ui/uiutil/formatting/__init__.py rename to src/pyminer/utils/ui/uiutil/formatting/__init__.py diff --git a/utils/ui/uiutil/formatting/textformat.py b/src/pyminer/utils/ui/uiutil/formatting/textformat.py similarity index 100% rename from utils/ui/uiutil/formatting/textformat.py rename to src/pyminer/utils/ui/uiutil/formatting/textformat.py diff --git a/utils/ui/uiutil/workspaceutil.py b/src/pyminer/utils/ui/uiutil/workspaceutil.py similarity index 100% rename from utils/ui/uiutil/workspaceutil.py rename to src/pyminer/utils/ui/uiutil/workspaceutil.py diff --git a/utils/ui/variableselect.py b/src/pyminer/utils/ui/variableselect.py similarity index 100% rename from utils/ui/variableselect.py rename to src/pyminer/utils/ui/variableselect.py diff --git a/widgets/frame_less_window.py b/src/pyminer/widgets/frame_less_window.py similarity index 100% rename from widgets/frame_less_window.py rename to src/pyminer/widgets/frame_less_window.py diff --git "a/\345\274\200\345\217\221\346\214\207\345\215\227.md" "b/src/pyminer/\345\274\200\345\217\221\346\214\207\345\215\227.md" similarity index 100% rename from "\345\274\200\345\217\221\346\214\207\345\215\227.md" rename to "src/pyminer/\345\274\200\345\217\221\346\214\207\345\215\227.md" diff --git "a/\345\274\200\345\217\221\350\277\233\345\272\246.url" "b/src/pyminer/\345\274\200\345\217\221\350\277\233\345\272\246.url" similarity index 100% rename from "\345\274\200\345\217\221\350\277\233\345\272\246.url" rename to "src/pyminer/\345\274\200\345\217\221\350\277\233\345\272\246.url" diff --git a/tests/test_code_editor/__init__.py b/tests/test_code_editor/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tests/test_code_editor/run_main.py b/tests/test_code_editor/run_main.py new file mode 100644 index 0000000000000000000000000000000000000000..dce1ce118e7c2d0c08e4a12dbc4446bb6a1d5cef --- /dev/null +++ b/tests/test_code_editor/run_main.py @@ -0,0 +1,4 @@ +from app2 import main + +if __name__ == '__main__': + main(extensions=['code_editor'], show_welcome=False) diff --git a/tests/test_code_editor/test_grammer/__init__.py b/tests/test_code_editor/test_grammer/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tests/test_code_editor/test_grammer/test_python/__init__.py b/tests/test_code_editor/test_grammer/test_python/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tests/test_code_editor/test_grammer/test_python/test_bracket.py b/tests/test_code_editor/test_grammer/test_python/test_bracket.py new file mode 100644 index 0000000000000000000000000000000000000000..1230e7b0b57d6b72a4438c84116cd61577b6da83 --- /dev/null +++ b/tests/test_code_editor/test_grammer/test_python/test_bracket.py @@ -0,0 +1,91 @@ +from unittest import TestCase + +from packages.code_editor.utils.grammar_analyzer.grammar_analyzer import GrammarAnalyzer + +func_def_1 = """ +def add(x, y): + return x + y +print(add(3, 5) +""" + + +def test_convert_position_to_row_col(): + """ + PyQt得到的position是一个整数,需要将其进行转化,方可被parso识别。 + """ + analyzer = GrammarAnalyzer() + analyzer.feed(func_def_1) + assert analyzer._convert_position_to_row_col(22) == (3, 6) + assert analyzer._convert_position_to_row_col(46) == (4, 13) + assert analyzer._convert_position_to_row_col(47) == (4, 14) + + +class TestBracket(TestCase): + """ + 测试JEDI的括号识别功能 + """ + + def setUp(self) -> None: + self.analyzer = GrammarAnalyzer() + + def test_normal(self): + self.analyzer.feed(func_def_1) + assert self.analyzer.is_not_matched((4, 15)) + assert self.analyzer.is_not_matched((4, 14)) + assert self.analyzer.is_not_matched(47) + + def test_line_1(self): + line_1 = """print(a, b, c)""" + self.analyzer.feed(line_1) + assert not self.analyzer.is_not_matched((1, 13)) + + def test_line_2(self): + line_2 = """print(a, b, c""" + self.analyzer.feed(line_2) + assert self.analyzer.is_not_matched((1, 13)) + + def test_line_3(self): + # 这个用例有问题,parso无法识别,暂不处理 + line_3 = """[][]""" + self.analyzer.feed(line_3) + # assert not self.analyzer.is_not_matched((1, 3), left='[') + + def test_line_4(self): + line_4 = """[][""" + self.analyzer.feed(line_4) + assert self.analyzer.is_not_matched((1, 3), left='[') + + def test_code_5(self): + code = """ +a = [[1, 2, 3], [5, 6, 7]] +b = a[1][2] +""" + self.analyzer.feed(code) + assert not self.analyzer.is_not_matched((3, 8), left='[') + + def test_code_6(self): + code = """ +a = [[1, 2, 3], [5, 6, 7]] +b = a[1[2] +""" + self.analyzer.feed(code) + assert self.analyzer.is_not_matched((3, 8), left='[') + + def test_code_7(self): + code = """ +print(1, 2, +abc(), +""" + self.analyzer.feed(code) + assert self.analyzer.is_not_matched((3, 6)) + + def test_code_8(self): + code = """ +a = [1, 2, [ +3, 4, 5, [ +6, 7, [8, 9], +], +10, +""" + self.analyzer.feed(code) + assert self.analyzer.is_not_matched((6, 2), left='[') diff --git a/tests/test_code_editor/test_gui/__init__.py b/tests/test_code_editor/test_gui/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tests/test_code_editor/test_gui/test_python_code_edit.py b/tests/test_code_editor/test_gui/test_python_code_edit.py new file mode 100644 index 0000000000000000000000000000000000000000..b30825d4cf01d3cddb156f7786727966de51caed --- /dev/null +++ b/tests/test_code_editor/test_gui/test_python_code_edit.py @@ -0,0 +1,26 @@ +from PySide2.QtCore import Qt + +from packages.code_editor.widgets.text_edit.python_text_edit import PMPythonCodeEdit + + +def test_get_selected_text(qtbot): + window = PMPythonCodeEdit() + qtbot.addWidget(window) + window.show() + qtbot.waitForWindowShown(window) + qtbot.wait(100) + qtbot.keyClicks(window, 'a = 123') + qtbot.keySequence(window, 'Ctrl+A') + assert window.selected_code == 'a = 123' + qtbot.keyClick(window, Qt.Key_Right) + qtbot.keyClick(window, Qt.Key_Return) + qtbot.keyClicks(window, 'print(123)') + qtbot.keyClick(window, Qt.Key_Return) + qtbot.keySequence(window, 'Shift+Up') + assert window.selected_code == 'print(123)\n' + qtbot.keyClick(window, Qt.Key_Right) + qtbot.keyClick(window, Qt.Key_Right) + qtbot.keyClick(window, Qt.Key_Right) + assert window.selected_code == '' + qtbot.keyClick(window, Qt.Key_Up) + assert window.selected_code == 'print(123)' diff --git a/tests/test_code_editor/test_gui/test_python_edit.py b/tests/test_code_editor/test_gui/test_python_edit.py new file mode 100644 index 0000000000000000000000000000000000000000..a2783b2d37612019a13df2e2c5f51af51803640d --- /dev/null +++ b/tests/test_code_editor/test_gui/test_python_edit.py @@ -0,0 +1,10 @@ +from packages.code_editor.widgets.text_edit.python_text_edit import PMPythonCodeEdit + + +def test_myapp(qtbot): + window = PMPythonCodeEdit() + qtbot.addWidget(window) + window.show() + qtbot.waitForWindowShown(window) + qtbot.keyClicks(window, 'a=123') + assert window.code == 'a=123' diff --git a/tests/test_code_editor/test_gui/test_python_editor.py b/tests/test_code_editor/test_gui/test_python_editor.py new file mode 100644 index 0000000000000000000000000000000000000000..b5e8d5489858cbab4178ade226e97357eef248f9 --- /dev/null +++ b/tests/test_code_editor/test_gui/test_python_editor.py @@ -0,0 +1,60 @@ +from PySide2.QtCore import Qt + +from packages.code_editor.widgets.editors.python_editor import PMPythonEditor + + +def test_format_code(qtbot): + window = PMPythonEditor() + qtbot.addWidget(window) + window.show() + qtbot.waitForWindowShown(window) + qtbot.wait(100) + qtbot.keyClicks(window.text_edit, 'a = 123') + qtbot.keySequence(window.text_edit, 'Ctrl+Alt+F') + assert window.text() == 'a = 123\n' + + +def test_auto_completion(qtbot): + window = PMPythonEditor() + qtbot.addWidget(window) + window.show() + qtbot.waitForWindowShown(window) + qtbot.keyClicks(window.text_edit, 'import num') + qtbot.wait(1000) + # TODO 这里的按键事件为何是传递到dropdown而非text_edit + qtbot.keyClick(window.text_edit.autocompletion_dropdown, Qt.Key_Return) + qtbot.wait(1000) + assert window.text() == 'import numbers' + + +def test_format_when_editing(qtbot): + """回车后会自动调整格式""" + window = PMPythonEditor() + qtbot.addWidget(window) + window.show() + qtbot.waitForWindowShown(window) + qtbot.wait(100) + qtbot.keyClicks(window.text_edit, 'def a():') + qtbot.keyClick(window.text_edit, Qt.Key_Return) + qtbot.keyClicks(window.text_edit, 'print(123)') + assert window.text_edit.code == 'def a():\n print(123)' + + +def test_comment(qtbot): + """注释功能和反注释功能""" + window = PMPythonEditor() + qtbot.addWidget(window) + window.show() + qtbot.waitForWindowShown(window) + qtbot.wait(100) + window.text_edit.setPlainText('def a():\n print(123)\n') + qtbot.keySequence(window.text_edit, 'Ctrl+A') + qtbot.keySequence(window.text_edit, 'Ctrl+/') + assert window.text_edit.code == '#def a():\n# print(123)\n#' + qtbot.keySequence(window.text_edit, 'Ctrl+/') + assert window.text_edit.code == 'def a():\n print(123)\n' + qtbot.keyClick(window.text_edit, Qt.Key_Left) + qtbot.keySequence(window.text_edit, 'Ctrl+/') + assert window.text_edit.code == '#def a():\n print(123)\n' + qtbot.keySequence(window.text_edit, 'Ctrl+/') + assert window.text_edit.code == 'def a():\n print(123)\n' diff --git a/tests/test_code_editor/test_handler/__init__.py b/tests/test_code_editor/test_handler/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tests/test_code_editor/test_handler/test_base_handler.py b/tests/test_code_editor/test_handler/test_base_handler.py new file mode 100644 index 0000000000000000000000000000000000000000..32d38e7cdaadb8b6addbb6d5101afe5447c31a73 --- /dev/null +++ b/tests/test_code_editor/test_handler/test_base_handler.py @@ -0,0 +1,27 @@ +from packages.code_editor.code_handlers.base_handler import BaseAnalyzer + +code = ''' +a = 1 +b = 2 +c = 3 +print(a, b, c) +''' + + +# 2的结尾是位置12,3的前面是位置13 + + +def test_current_line_number(): + analyzer = BaseAnalyzer(code, 12) + assert analyzer.current_line_index == 2 + analyzer = BaseAnalyzer(code, 13) + assert analyzer.current_line_index == 3 + + +def test_selection(): + analyzer = BaseAnalyzer(code, 12, (12, 12)) + assert not analyzer.has_selection + assert analyzer.selected_code == 'b = 2' + analyzer = BaseAnalyzer(code, 12, (12, 17)) + assert analyzer.has_selection + assert analyzer.selected_code == '\nc = ' diff --git a/tests/test_jupyter_notebook_support/__init__.py b/tests/test_jupyter_notebook_support/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tests/test_jupyter_notebook_support/run_jupyter_notebook_support.py b/tests/test_jupyter_notebook_support/run_jupyter_notebook_support.py new file mode 100644 index 0000000000000000000000000000000000000000..50ec664335f149a4db41412ea030253c97ee7789 --- /dev/null +++ b/tests/test_jupyter_notebook_support/run_jupyter_notebook_support.py @@ -0,0 +1,4 @@ +from app2 import main + +if __name__ == '__main__': + main(extensions=['embedded_browser', 'code_editor'], show_welcome=False) diff --git a/tests/test_pmgwidgets/__init__.py b/tests/test_pmgwidgets/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tests/test_pmgwidgets/test_utilities/__init__.py b/tests/test_pmgwidgets/test_utilities/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tests/test_pmgwidgets/test_utilities/test_undomanager.py b/tests/test_pmgwidgets/test_utilities/test_undomanager.py new file mode 100644 index 0000000000000000000000000000000000000000..ac06d8767e3e55f8569610cc8bb1474887877048 --- /dev/null +++ b/tests/test_pmgwidgets/test_utilities/test_undomanager.py @@ -0,0 +1,62 @@ +from pmgwidgets import UndoManager + + +def test_push(): + manager = UndoManager() + manager.push('a') + manager.push('ab') + manager.push('abc') + manager.push('ab') + manager.push('abd') + manager.push('abde') + manager.push('abdef') + manager.push('abdefg') + assert manager.content == ['a', 'ab', 'abc', 'ab', 'abd', 'abde', 'abdef', 'abdefg'] + assert manager.pointer == 7 + assert len(manager) == 8 + + +def test_undo(): + manager = UndoManager() + manager.push('a') + manager.push('ab') + manager.push('abc') + manager.push('ab') + assert manager.content == ['a', 'ab', 'abc', 'ab'] + assert manager.pointer == 3 + assert len(manager) == 4 + assert manager.undo() == 'ab' + assert manager.pointer == 2 + # 撤销后不会改变长度 + assert len(manager) == 4 + + +def test_redo(): + manager = UndoManager() + manager.push('a') + manager.push('ab') + manager.push('abc') + manager.push('ab') + assert manager.content == ['a', 'ab', 'abc', 'ab'] + assert manager.undo() == 'ab' + assert manager.undo() == 'abc' + assert manager.redo() == 'abc' + assert manager.redo() == 'ab' + + +def test_last_value(): + manager = UndoManager() + manager.push('a') + manager.push('ab') + manager.push('abc') + manager.push('ab') + assert manager.content == ['a', 'ab', 'abc', 'ab'] + assert manager.last_value() == 'ab' + assert manager.undo() == 'ab' + assert manager.last_value() == 'abc' + assert manager.undo() == 'abc' + assert manager.last_value() == 'ab' + assert manager.redo() == 'abc' + assert manager.last_value() == 'abc' + assert manager.redo() == 'ab' + assert manager.last_value() == 'ab'