chendapao 7ad46f3b40
feature/add_project_document_2 (#2267)
* add macos detailed build documentation

* The second batch is modified separately

* add code flow img

* adj doc logic
2022-10-05 17:57:32 +08:00

443 lines
29 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 工程结构
## 代码结构图
![](vx_images/367553117269276.png)
## 结构解析
```
/
├── scripts 本地小脚本 更新版本所用
├── .github github CI/CD 流程编排issues 模板
├── .gitmodules github 规范的 modules 依赖文件
├── libs 引用的外部库
│ ├── QHotkey 跨平台的全局热键
│ ├── vtextedit VNote 自己开源的编辑器
│ └── libs.pro 外部库的工程索引文件
├── src VNote 源码文件夹
│ ├── core 核心源码
│ │ ├── *** 其他核心文件
│ │ ├── versioncontroller 版本管理
│ │ ├── buffer 缓存模块
│ │ ├── notebook 笔记本
│ │ ├── notebookbackend 笔记本后台
│ │ └── notebookconfigmgr 笔记本配置管理
│ ├── data VNote 工程数据
│ │ ├── core 运行所需要的默认配置
│ │ └── extra 额外的资源文件
│ ├── export 导出模块
│ ├── imagehost 图床模块
│ ├── search 搜索模块
│ ├── snippet 片段模块
│ ├── task 任务模块
│ ├── unitedentry 统一入口模块
│ ├── utils 工具模块
│ └── widgets 窗体
│ ├── *** 其他窗体文件
│ ├── dialogs 对话框
│ ├── editors 编辑器
│ └── framelessmainwindow 无边框的窗口
├── pics README所需的图片
├── main.cpp 程序主入口
├── COPYING.LESSER 开源协议
├── README.md
├── README_zh_CN.md
├── build
├── changes.md
├── tests 测试
└── vnote.pro Qt 工程文件
```
## 源码模块简单介绍
### libs
依赖的外部库,以 gitmodules 的形式管理,会将一些开源库 fork 到我们自己的仓库中,方便依赖和后续开发。主要也是担心库会莫名其妙消失。
```
[submodule "libs/vtextedit"]
path = libs/vtextedit
url = https://github.com/vnotex/vtextedit.git
[submodule "libs/QHotkey"]
path = libs/QHotkey
url = https://github.com/vnotex/QHotkey.git
```
更新方式可以使用如下命令:
```
git submodule update --init --recursive
```
### src/core
核心代码文件夹,主要包含以下 `功能性` 内容:
其他在 `src/core` 根目录下的文件
| 名称 | 解释 |
| :------------------- | :------------------------------------------------------------------------------- |
| vnotex | vnote总入口对核心的功能进行初始化等 |
| global | 全局通用枚举、内联方法 |
| buffermgr | 缓冲管理器,当前打开的笔记都会进入到缓存中,笔记打开、缓存的增删 |
| configmgr | 配置管理器,主配置、当前会话配置、核心配置、编辑器配置、窗体配置的总入口 |
| historymgr | 操作历史管理器以json的格式将历史操作数据存储到session.json中 |
| templatemgr | 模板管理器,把模板理解为一个笔记即可,获得模板基础信息、文件夹,主题,路径 |
| thememgr | 主题管理器调色、高亮、编辑、md配色、icon图标等 |
| notebookmgr | 笔记本管理器笔记本的CRUD版本控制、后端、配置、导入等 |
| mainconfig | 主配置,版本、核心配置、编辑器配置、窗体配置等入口 |
| coreconfig | 核心配置,设置中的快捷键、主题、检查更新、默认打开 |
| editorconfig | 编辑器配置设置中的编辑器、文本编辑、markdown编辑、自动保存等 |
| markdowneditorconfig | markdown编辑器配置文本、uml、graphviz、mathjax、图片、缩放、代码、链接跳转 |
| texteditorconfig | 文本编辑器配置,插入模式、光标、折叠、制表符、特殊高亮 |
| widgetconfig | 窗体配置,标题自动扩展、序号、查询和替换、 资源视图、搜索、窗体保持、窗体拆分、统一入口 |
| sessionconfig | 当前会话配置opengl当前笔记打开状态、窗体布局等 |
| clipboarddata | 剪切板数据TODO |
| externalfile | 外部文件,读取、路径、图片等 |
| file | 文件,这里主要是对图片操作 |
| historyitem | 操作历史的item记录历史的变动 |
| logger | 日志 |
| htmltemplatehelper | html模板帮助 |
| quickaccesshelper | 快速访问帮助 |
| singleinstanceguard | 窗体的单例只能打开一个vnote |
| theme | 主题的实际应用 |
文件夹 `buffer` 缓冲区,就是已经打开的笔记
| 名称 | 解释 |
| :-------------------- | :----------------------------------------------------------------------------------- |
| buffer | 缓冲区的CRUD、视图 |
| bufferprovider | 缓冲区供应者对接vnote自己的笔记的缓冲区缓冲区的虚方法TODO为什么这里要定义这些虚方法呢 |
| filebufferprovider | 文件缓冲区供应者,对接外部文件的缓存区 |
| filetypehelper | 文件类型帮助 |
| markdownbuffer | markdown缓冲区图片增删过时图片删除 |
| markdownbufferfactory | marodkwn缓冲区工厂类创建所用 |
| nodebufferprovider | 笔记缓冲区提供者 TODO 这块没太懂 |
| textbuffer | 文本缓冲区 |
| textbufferfactory | 文本缓冲区工厂类,创建所用 |
文件夹 `notebook` 笔记的索引、笔记索引的嵌入式数据库操作、标签、参数、外部文件
| 名称 | 解释 |
| :--------------------- | :-------------------------------------------------------------------------------- |
| bundlenotebook | 笔记本打包会将所有笔记和笔记本拍平后的数据结构、标签、以及对应关系读写到SQLite数据库中 |
| bundlenotebookfactory | 笔记本打包工厂类 |
| externalnode | vnote 未管理的外部节点 |
| node | 笔记 (笔记本的节点) 兼容2 |
| nodeparameters | 笔记的参数id创建时间修改时间标签附件 |
| notebook | 笔记本和回收站 |
| notebookdatabaseaccess | 笔记本和笔记的数据库读写操作 |
| notebookparameters | 笔记本的参数 |
| notebooktagmgr | 笔记本标签管理器 |
| tag | 标签 |
| vxnode | vnotex3的节点 |
| vxnodefile | vnotex3的文件 |
文件夹 `notebookbackend` 笔记后端,如存储等,尚未实现
| 名称 | 解释 |
| :-------------------------- | :-------------------------------- |
| inotebookbackend | 笔记本后端的抽象类,文件的访问和同步 |
| localnotebookbackend | 笔记本后端的本地文件系统 |
| localnotebookbackendfactory | 笔记本后端工厂类 |
文件夹 `notebookconfigmgr` 笔记索引配置管理
| 名称 | 解释 |
| :------------------------- | :-------------------------------------------------- |
| bundlenotebookconfigmgr | 笔记本配置管理器打包,获取数据库、本地文件索引信息等配置 |
| inotebookconfigmgr | 笔记本配置管理器的抽象类,配置文件的读写 |
| notebookconfig | 笔记本配置 |
| vxnodeconfig | vx节点配置 |
| vxnotebookconfigmgr | vx笔记本配置管理器 |
| vxnotebookconfigmgrfactory | vx笔记本配置管理器工厂类 |
文件夹 `versioncontroller` 笔记版本管理(未开发)
| 名称 | 解释 |
| :---------------------------- | :------------------ |
| dummyversioncontroller | 虚拟版本控制器 |
| dummyversioncontrollerfactory | 虚拟版本控制器工厂类 |
| versioncontrollerserver | 版本控制器服务 |
### src/data
资源文件夹,主要包含 `核心资源``额外资源`,因为是资源文件,所有会有对应的 `.qrc` 工程资源文件,可以理解为在打包时需要哪些资源文件:
core `核心资源`
| 名称 | 解释 |
| :------------ | :--------------------------------------------------------------------------------------------------------------- |
| icons | 默认的图标文件 |
| logo | 各尺寸的logo、启动标示图、最小化图标 |
| translations | 多语言,目前支持了中文、英文、日文,用 qt 的 languist 先制作好 ts 文件,再生成 qm 文件,其他地方使用 `tr("***")` 来调用 |
| core.qrc | 工程资源文件,可以理解为打包的时候会将哪些文件打包进去,同时在增删一些文件的时候,也需要调整这里 |
| Info.plist | TODO不知道干嘛 |
| vnote.desktop | 桌面快捷方式 |
| vnote.json | 默认配置 |
extra `额外资源`
| 名称 | 解释 |
| :------------------ | :------------------------------ |
| dicts | 语法检查的字典 |
| docs | 文档 |
| syntax-highlighting | 语法检测的规则文件 |
| tasks | 任务功能,目前内置了 git 简单操作 |
| themes | 主题 |
| web | TODO 不知道 |
### export
导出模块,目前支持 `HTML``PDF``Markdown``自定义`
| 名称 | 解释 |
| :-------------- | :--------------------------------------- |
| exportdata | 导出数据转换 |
| exporter | 导出器,将对应的数据导出生成其相应格式的文件 |
| webviewexporter | TODO 不知道干嘛 |
### imagehost
图床模块,目前是支持了 `本地``gitee``github`
| 名称 | 解释 |
| :-------------- | :------------------ |
| giteeimagehost | 码云图床 |
| githubimagehost | github图床 |
| imagehost | 图床 |
| imagehostmgr | 图床管理、增删、改名 |
| imagehostutils | 图床工具类 |
| repoimagehost | 图床解析、测试、使用 |
### search
搜索模块
| 名称 | 解释 |
| :--------------- | :-------------------------------------------------------- |
| filesearchengine | 文件搜索引擎 |
| searchdata | 搜索条件的转换,把界面上的搜索条件转换成可以进行实际搜索的条件 |
| searcher | 搜索者,干活开始搜索 |
| searchhelper | 搜索帮助,提供搜索反馈,比如无效关键词等等 |
| searchresultitem | 搜索结果,这位置列表那里显示出来的那些 |
| searchtoken | 搜索令牌、全文检索、正则匹配 |
### snippet
片段模块
| 名称 | 解释 |
| :------------- | :------------------------------- |
| dynamicsnippet | 动态片段 TODO 没懂为什么叫动态片段 |
| snippet | 片段、目前只支持了文本片段 |
| snippetmgr | 片段管理器、增删改查 |
### task
任务模块
| 名称 | 解释 |
| :-------------- | :------------------------------------------------------ |
| shellexecution | 脚本执行器,默认为 win`PowerShell`、其他为:`/bin/bash` |
| task | 任务、实现了与外部程序的交互 |
| taskmgr | 任务管理器、任务刷新、加载 |
| taskvariablemgr | 任务变量管理器 |
### unitedentry
统一入口模块
| 名称 | 解释 |
| :----------------- | :-------------- |
| entrypopup | 统一入口的弹出框 |
| entrywidgetfactory | 窗口工厂类 |
| findunitedentry | 统一入口查找 |
| helpunitedentry | 统一入口帮助 |
| iunitedentry | 统一入口的接口 |
| unitedentry | 统一入口 |
| unitedentryalias | 统一入口别名 |
| unitedentryhelper | 统一入口帮助 |
| unitedentrymgr | 统一入口管理器 |
### utils
工具模块
| 名称 | 解释 |
| :---------------- | :------------------------------------------- |
| asyncworker | 异步工作 TODO 不知道 |
| callbackpool | 回调池 |
| clipboardutils | 剪切板工具 |
| contentmediautils | 媒介内容工具、主要还是对图片的操作 |
| docsutils | 文档工具TODO 内部文档所用 |
| fileutils | 文件工具,读写文件 |
| htmlutils | html工具解析html辅助所用 |
| iconutils | icon工具icon文件获取、单色渲染 |
| imageutils | 图片工具,猜测图片格式与后缀 TODO 但是没明白 |
| pathutils | 路径工具,文件、文件夹路径管理、相对路径管理 |
| printutils | TODO什么打印呢 |
| processutils | 内部程序工具、辅助缓冲、导出、预览、搜索、绘图等 |
| urldragdroputils | Url拖拽工具TODO不知道是哪里拖拽 |
| utils | 其他工具 |
| webutils | 网页工具 |
| widgetutils | 窗体工具 |
### widget
窗体模块
| 名称 | 解释 |
| :------------------------------ | :--------------------------------------------------------------------- |
| attachmentdragdropareaindicator | TODO 不知道 |
| attachmentpopup | 附件弹出框 |
| biaction | TODO bi动作 |
| buttonpopup | 按钮弹出框 |
| combobox | 解决间距的下拉菜单 |
| consoleviewer | 控制台预览 |
| dockwidgethelper | 左侧导航坞窗体帮助 |
| dragdropareaindicator | 拖放区域指示部件 |
| editreaddiscardaction | (阅读模式、编辑模式、放弃)动作 |
| filesystemviewer | 文件系统观察者 |
| findandreplacewidget | 查找和替换窗体 |
| floatingwidget | 浮动窗体 |
| fullscreentoggleaction | 全屏切换 |
| historypanel | 历史记录面板 |
| itemproxystyle | TODO 不知道 |
| labelwithbuttonswidget | 标签按钮小部件 |
| lineedit | 行编辑部件 |
| lineeditdelegate | 行编辑部件代理 |
| lineeditwithsnippet | 行编辑与片段 |
| listwidget | 列表窗体 |
| locationinputwithbrowsebutton | TODO |
| locationlist | 位置列表 |
| mainwindow | 主窗体,窗体总入口 |
| markdownviewwindow | markdown视图 |
| messageboxhelper | 消息推送帮助 |
| navigationmode | 导航模式接口,如果一个小部件想要支持导航模式,则需要继承这个类。 |
| navigationmodemgr | 导航模式管理器 |
| notebookexplorer | 笔记本资源管理器 |
| notebookexplorersession | 笔记本资源管理器当前会话,用与重新打开后的会话恢复 |
| notebooknodeexplorer | 笔记本中的笔记资源管理器 |
| notebookselector | 笔记本选择器 |
| outlinepopup | 笔记中弹出的大纲 |
| outlineprovider | 大纲提供者 |
| outlineviewer | 大纲视图 |
| propertydefs | 定义用于QSS的属性。 |
| quickselector | TODO |
| searchinfoprovider | 搜索提供者 |
| searchpanel | 搜索面板 |
| simplesegmenthighlighter | TODO |
| snippetpanel | 片段面板 |
| statusbarhelper | 状态栏帮助 |
| styleditemdelegate | 样式代理 |
| systemtrayhelper | 系统托盘 |
| tagexplorer | 标签资源管理器 |
| tagpopup | 笔记中的标签弹出框 |
| tagviewer | 标签视图 |
| textviewwindow | 文本视图窗体 |
| titlebar | 标题栏 |
| titletoolbar | 标题工具栏 |
| toolbarhelper | 工具栏帮助 |
| toolbox | TODO |
| treeview | TODO |
| treewidget | vnotex修改后的树窗体 |
| treewidgetitem | vnotex修改后的树窗体的选项修改了默认排序 |
| viewarea | 视图区域 TODO |
| viewareasession | TODO |
| viewsplit | 视图拆分 |
| viewwindow | 视图拆分后的窗体 |
| viewwindowsession | TODO |
| viewwindowtoolbarhelper | 视图工具栏帮助 |
| webpage | TODO |
| webviewer | TODO |
| widgetsfactory | 窗体工厂类,菜单、行编辑、行编辑片段、单选框、多选框、下拉框、旋转、纯文本等 |
| windowspanel | 窗体面板 |
| windowsprovider | 窗体提供者 |
| wordcountpopup | 字数统计弹出框 |
dialogs 对话框
| 名称 | 解释 |
| :-------------------------- | :--------------------- |
| deleteconfirmdialog | 需要确认的删除项信息 |
| dialog | vnotex修改后的对话框 |
| exportdialog | 导出对话框 |
| filepropertiesdialog | 文件配置对话框 |
| folderfilesfilterwidget | 文件夹过滤窗体 |
| folderpropertiesdialog | 文件夹设置对话框 |
| imageinsertdialog | 图片插入对话框 |
| importfolderdialog | 导入文件夹对话框 |
| importfolderutils | 导入文件夹工具类 |
| importlegacynotebookdialog | 导入旧版的笔记本对话框 |
| importnotebookdialog | 导入笔记本对话框 |
| legacynotebookutils | 旧版笔记本工具类 |
| levellabelwithupbutton | TODO |
| linkinsertdialog | 链接插入对话框 |
| managenotebooksdialog | 笔记本管理对话框 |
| newfolderdialog | 新建文件夹对话框 |
| newnotebookdialog | 新建笔记本对话框 |
| newnotebookfromfolderdialog | 从文件夹新建笔记本对话框 |
| newnotedialog | 新建笔记对话框 |
| newsnippetdialog | 新建片段对话框 |
| newtagdialog | 新建标签对话框 |
| nodeinfowidget | 节点(笔记)信息窗体 |
| notebookinfowidget | 笔记本信息窗体 |
| notepropertiesdialog | 笔记属性对话框 |
| renametagdialog | 名称变更对话框 |
| scrolldialog | 滚动条对话框 |
| selectdialog | 选择对话框 |
| selectionitemwidget | 选择项窗体 |
| snippetinfowidget | 片段窗体 |
| snippetpropertiesdialog | 片段属性对话框 |
| sortdialog | 排序话框 |
| tableinsertdialog | 表格插入对话框 |
| updater | 自动更新 |
| viewtagsdialog | TODO |
editors 编辑器
| 名称 | 解释 |
| :-------------------------- | :----------------------- |
| editormarkdownvieweradapter | markdown 编辑器视图适配器 |
| graphhelper | 图帮助 |
| graphvizhelper | |
| markdowneditor | markdown编辑器 |
| markdowntable | markdown中的智能表格 |
| markdowntablehelper | markdown表格帮助 |
| markdownviewer | TODO |
| markdownvieweradapter | TODO |
| plantumlhelper | uml帮助 |
| previewhelper | 预览帮助 |
| statuswidget | 状态窗体 |
| texteditor | 纯文本编辑器 |
framelessmainwindow 无边框窗口
| 名称 | 解释 |
| :----------------------- | :-------- |
| framelessmainwindow | 主窗体 |
| framelessmainwindowlinux | 针对linux |
| framelessmainwindowwin | 针对win |