mirror of https://gitee.com/cxasm/notepad--.git
cmake-plugin: 添加2个基于源代码构建的二级菜单支持系列插件模板
This commit is contained in:
parent
34b7f57739
commit
6249c13434
|
@ -11,6 +11,8 @@ if(USE_NOTEPAD_PLUGIN)
|
|||
add_subdirectory(template-plugins/base-plugin)
|
||||
add_subdirectory(template-plugins/base-widget-plugin)
|
||||
add_subdirectory(template-plugins/base-widget-ui-plugin)
|
||||
add_subdirectory(template-plugins/base-secondary-menu-plugin)
|
||||
add_subdirectory(template-plugins/base-secondary-menu-plugin-v1)
|
||||
endif(USE_NOTEPAD_PLUGIN_BASE)
|
||||
|
||||
# 一个简单的插件示例,但依赖于外部的 opencc 项目(基于 git)
|
||||
|
|
|
@ -0,0 +1,82 @@
|
|||
# base-secondary-menu-plugin-v1/CMakeLists.txt
|
||||
# 用于在源代码中构建一个插件的模板
|
||||
|
||||
# 如果不是在源代码中构建插件,请不要使用这个部分
|
||||
# 如果想在源代码中添加更多内置模板
|
||||
# 请替换 base-secondary-menu-plugin-v1 为你的插件名称
|
||||
# base-secondary-menu-plugin-v1 -> your plugin name
|
||||
|
||||
set(LOCAL_PLUGIN_NAME "base-secondary-menu-plugin-v1")
|
||||
|
||||
# base-secondary-menu-plugin-v1 核心构建
|
||||
# 在模块化构建中,这个部分代表着构建 base-secondary-menu-plugin-v1 插件
|
||||
# 1. 默认构建时产出的目标为 base-secondary-menu-plugin-v1
|
||||
# 2. 在此处可对 base-secondary-menu-plugin-v1 目标进行详细的构建计划
|
||||
|
||||
if(TRUE)
|
||||
# 准备构建 base-secondary-menu-plugin-v1 主程序扩展
|
||||
spark_aux_source_paths(LocalSources
|
||||
.
|
||||
)
|
||||
spark_add_library(${LOCAL_PLUGIN_NAME} SHARED ${LocalSources})
|
||||
target_include_directories(${LOCAL_PLUGIN_NAME} PRIVATE
|
||||
${PROJECT_SOURCE_DIR}/src
|
||||
${PROJECT_SOURCE_DIR}/src/cceditor
|
||||
|
||||
${PROJECT_SOURCE_DIR}/src/qscint/src
|
||||
${PROJECT_SOURCE_DIR}/src/qscint/src/Qsci
|
||||
${PROJECT_SOURCE_DIR}/src/qscint/scintilla/src
|
||||
${PROJECT_SOURCE_DIR}/src/qscint/scintilla/include
|
||||
${PROJECT_SOURCE_DIR}/src/qscint/scintilla/lexlib
|
||||
${PROJECT_SOURCE_DIR}/src/qscint/scintilla/boostregex
|
||||
)
|
||||
# target_link_libraries(${LOCAL_PLUGIN_NAME} QSci)
|
||||
target_link_QSci(${LOCAL_PLUGIN_NAME})
|
||||
if(USE_QT6)
|
||||
# target_link_qt6_Core5Compat(${LOCAL_PLUGIN_NAME}) # 兼容性: Qt6 可使用 Core5Compat 少量更改 Qt5 部分
|
||||
# target_link_qt6_PrintSupport(${LOCAL_PLUGIN_NAME})
|
||||
# target_link_qt6_XmlPatterns(${LOCAL_PLUGIN_NAME}) # Bug 初期配置时无此依赖要求
|
||||
else()
|
||||
# target_link_qt5_PrintSupport(${LOCAL_PLUGIN_NAME})
|
||||
# target_link_qt5_XmlPatterns(${LOCAL_PLUGIN_NAME})
|
||||
endif(USE_QT6)
|
||||
|
||||
# 确保生成到 Notepad-- 的相对 plugin 目录下
|
||||
set_target_properties(${LOCAL_PLUGIN_NAME}
|
||||
PROPERTIES
|
||||
RUNTIME_OUTPUT_DIRECTORY $<TARGET_FILE_DIR:${PROJECT_NAME}>/plugin
|
||||
LIBRARY_OUTPUT_DIRECTORY $<TARGET_FILE_DIR:${PROJECT_NAME}>/plugin
|
||||
ARCHIVE_OUTPUT_DIRECTORY $<TARGET_FILE_DIR:${PROJECT_NAME}>/plugin)
|
||||
|
||||
# 控制是否安装到 bin/plugin 而各种配方之下,每个位置或许都不一样(特别是 Linux)
|
||||
# install(TARGETS ${LOCAL_PLUGIN_NAME} DESTINATION bin/plugin)
|
||||
endif(TRUE)
|
||||
|
||||
|
||||
# ----------------- base-secondary-menu-plugin-v1 构建宏支持相关 ----------------- #
|
||||
|
||||
if(WIN32 AND NOTEPAD_BUILD_BY_SHARED)
|
||||
# 在 Windows 中构建时,需要关注此库的构建形式,QScintilla 应该以何种方式编译
|
||||
target_compile_definitions(${LOCAL_PLUGIN_NAME}
|
||||
PRIVATE
|
||||
NOTEPAD_PLUGIN_MANAGER
|
||||
QSCINTILLA_DLL # 目前在 Windows 中使用 QSci 库时应该采用 Q_DECL_IMPORT
|
||||
# 控制 QSCINTILLA_EXPORT 符号应为 Q_DECL_IMPORT
|
||||
)
|
||||
else()
|
||||
# 在 Windows 中构建时,需要关注此库的构建形式,QScintilla 应该以何种方式编译
|
||||
target_compile_definitions(${LOCAL_PLUGIN_NAME}
|
||||
PRIVATE
|
||||
NOTEPAD_PLUGIN_MANAGER
|
||||
# QSCINTILLA_DLL # 目前在 Windows 中使用 QSci 库时应该采用 Q_DECL_IMPORT
|
||||
# 控制 QSCINTILLA_EXPORT 符号应为 Q_DECL_IMPORT
|
||||
)
|
||||
endif(WIN32 AND NOTEPAD_BUILD_BY_SHARED)
|
||||
|
||||
if(UNIX)
|
||||
# 默认在 Unix/Linux 中仅需要定义一个内部插件宏管理器
|
||||
target_compile_definitions(${LOCAL_PLUGIN_NAME}
|
||||
PRIVATE
|
||||
NOTEPAD_PLUGIN_MANAGER
|
||||
)
|
||||
endif(UNIX)
|
|
@ -0,0 +1,56 @@
|
|||
#include "ndd_plugin_implement.h"
|
||||
|
||||
#include <qsciscintilla.h>
|
||||
#include <QMenu>
|
||||
#include <QDebug>
|
||||
|
||||
NddPluginImplement::NddPluginImplement(QWidget *parent, QsciScintilla *pEdit) : QWidget(parent)
|
||||
, currentEdit(pEdit)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
NddPluginImplement::~NddPluginImplement()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void NddPluginImplement::setMenuActions(QMenu *menu)
|
||||
{
|
||||
QAction *action1 = menu->addAction("第一项打印");
|
||||
connect(action1, &QAction::triggered, this, [](){
|
||||
// 普通的菜单项
|
||||
qDebug() << "action1";
|
||||
});
|
||||
|
||||
QAction *action2 = menu->addAction("第二项打印");
|
||||
connect(action2, &QAction::triggered, this, [](){
|
||||
// 普通的菜单项
|
||||
qDebug() << "action2";
|
||||
});
|
||||
|
||||
QAction *action3 = menu->addAction("打印默认编辑器内容(源代码项注意)");
|
||||
connect(action3, &QAction::triggered, this, [=](){
|
||||
// FAQ: 当第一次使用 currentEdit 时,使用时可能会引发错误。
|
||||
// 此时 currentEdit 可能是空的。
|
||||
if (currentEdit == nullptr) {
|
||||
qDebug() << "Warring: currentEdit == nullptr!";
|
||||
return;
|
||||
}
|
||||
qDebug() << currentEdit->text();
|
||||
});
|
||||
|
||||
QAction *action4 = menu->addAction("设置当前编辑器为默认");
|
||||
connect(action4, &QAction::triggered, this, [=](){
|
||||
// 获取当前编辑器,并作为当前默认编辑器
|
||||
currentEdit = getCurrentEditFunc();
|
||||
qDebug() << "设置完成";
|
||||
});
|
||||
|
||||
QAction *action5 = menu->addAction("打印当前编辑器内容");
|
||||
connect(action5, &QAction::triggered, this, [=](){
|
||||
// 获取当前编辑器,并直接打印编辑器内容
|
||||
QsciScintilla *edit = getCurrentEditFunc();
|
||||
qDebug() << edit->text();
|
||||
});
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
#ifndef NDD_PLUGIN_IMPLEMENT_H
|
||||
#define NDD_PLUGIN_IMPLEMENT_H
|
||||
|
||||
#include <QMainWindow>
|
||||
|
||||
class QsciScintilla;
|
||||
class NddPluginImplement : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit NddPluginImplement(QWidget *parent = nullptr, QsciScintilla *pEdit = nullptr);
|
||||
~NddPluginImplement();
|
||||
|
||||
void setMenuActions(QMenu *menu);
|
||||
void setCurrentEditFunc(std::function<QsciScintilla* ()> func) {
|
||||
getCurrentEditFunc = func;
|
||||
}
|
||||
|
||||
private:
|
||||
QsciScintilla *currentEdit;
|
||||
std::function<QsciScintilla* ()> getCurrentEditFunc;
|
||||
};
|
||||
|
||||
#endif // NDD_PLUGIN_IMPLEMENT_H
|
|
@ -0,0 +1,11 @@
|
|||
#include <qobject.h>
|
||||
#include <qstring.h>
|
||||
#include <include/pluginGl.h>
|
||||
#include <functional>
|
||||
#include <qsciscintilla.h>
|
||||
#include "ndd_plugin_implement.h"
|
||||
|
||||
|
||||
NOTEPAD_PLUGIN_METADATA_IDENTIFY_V1("base-secondary-menu-plugin-v1", "0.1", "author", "二级菜单高级插件", "");
|
||||
|
||||
NOTEPAD_PLUGIN_METADATA_IMPLEMENT_V1(NddPluginImplement, false);
|
|
@ -0,0 +1,82 @@
|
|||
# base-secondary-menu-plugin/CMakeLists.txt
|
||||
# 用于在源代码中构建一个插件的模板
|
||||
|
||||
# 如果不是在源代码中构建插件,请不要使用这个部分
|
||||
# 如果想在源代码中添加更多内置模板
|
||||
# 请替换 base-secondary-menu-plugin 为你的插件名称
|
||||
# base-secondary-menu-plugin -> your plugin name
|
||||
|
||||
set(LOCAL_PLUGIN_NAME "base-secondary-menu-plugin")
|
||||
|
||||
# base-secondary-menu-plugin 核心构建
|
||||
# 在模块化构建中,这个部分代表着构建 base-secondary-menu-plugin 插件
|
||||
# 1. 默认构建时产出的目标为 base-secondary-menu-plugin
|
||||
# 2. 在此处可对 base-secondary-menu-plugin 目标进行详细的构建计划
|
||||
|
||||
if(TRUE)
|
||||
# 准备构建 base-secondary-menu-plugin 主程序扩展
|
||||
spark_aux_source_paths(LocalSources
|
||||
.
|
||||
)
|
||||
spark_add_library(${LOCAL_PLUGIN_NAME} SHARED ${LocalSources})
|
||||
target_include_directories(${LOCAL_PLUGIN_NAME} PRIVATE
|
||||
${PROJECT_SOURCE_DIR}/src
|
||||
${PROJECT_SOURCE_DIR}/src/cceditor
|
||||
|
||||
${PROJECT_SOURCE_DIR}/src/qscint/src
|
||||
${PROJECT_SOURCE_DIR}/src/qscint/src/Qsci
|
||||
${PROJECT_SOURCE_DIR}/src/qscint/scintilla/src
|
||||
${PROJECT_SOURCE_DIR}/src/qscint/scintilla/include
|
||||
${PROJECT_SOURCE_DIR}/src/qscint/scintilla/lexlib
|
||||
${PROJECT_SOURCE_DIR}/src/qscint/scintilla/boostregex
|
||||
)
|
||||
# target_link_libraries(${LOCAL_PLUGIN_NAME} QSci)
|
||||
target_link_QSci(${LOCAL_PLUGIN_NAME})
|
||||
if(USE_QT6)
|
||||
# target_link_qt6_Core5Compat(${LOCAL_PLUGIN_NAME}) # 兼容性: Qt6 可使用 Core5Compat 少量更改 Qt5 部分
|
||||
# target_link_qt6_PrintSupport(${LOCAL_PLUGIN_NAME})
|
||||
# target_link_qt6_XmlPatterns(${LOCAL_PLUGIN_NAME}) # Bug 初期配置时无此依赖要求
|
||||
else()
|
||||
# target_link_qt5_PrintSupport(${LOCAL_PLUGIN_NAME})
|
||||
# target_link_qt5_XmlPatterns(${LOCAL_PLUGIN_NAME})
|
||||
endif(USE_QT6)
|
||||
|
||||
# 确保生成到 Notepad-- 的相对 plugin 目录下
|
||||
set_target_properties(${LOCAL_PLUGIN_NAME}
|
||||
PROPERTIES
|
||||
RUNTIME_OUTPUT_DIRECTORY $<TARGET_FILE_DIR:${PROJECT_NAME}>/plugin
|
||||
LIBRARY_OUTPUT_DIRECTORY $<TARGET_FILE_DIR:${PROJECT_NAME}>/plugin
|
||||
ARCHIVE_OUTPUT_DIRECTORY $<TARGET_FILE_DIR:${PROJECT_NAME}>/plugin)
|
||||
|
||||
# 控制是否安装到 bin/plugin 而各种配方之下,每个位置或许都不一样(特别是 Linux)
|
||||
# install(TARGETS ${LOCAL_PLUGIN_NAME} DESTINATION bin/plugin)
|
||||
endif(TRUE)
|
||||
|
||||
|
||||
# ----------------- base-secondary-menu-plugin 构建宏支持相关 ----------------- #
|
||||
|
||||
if(WIN32 AND NOTEPAD_BUILD_BY_SHARED)
|
||||
# 在 Windows 中构建时,需要关注此库的构建形式,QScintilla 应该以何种方式编译
|
||||
target_compile_definitions(${LOCAL_PLUGIN_NAME}
|
||||
PRIVATE
|
||||
NOTEPAD_PLUGIN_MANAGER
|
||||
QSCINTILLA_DLL # 目前在 Windows 中使用 QSci 库时应该采用 Q_DECL_IMPORT
|
||||
# 控制 QSCINTILLA_EXPORT 符号应为 Q_DECL_IMPORT
|
||||
)
|
||||
else()
|
||||
# 在 Windows 中构建时,需要关注此库的构建形式,QScintilla 应该以何种方式编译
|
||||
target_compile_definitions(${LOCAL_PLUGIN_NAME}
|
||||
PRIVATE
|
||||
NOTEPAD_PLUGIN_MANAGER
|
||||
# QSCINTILLA_DLL # 目前在 Windows 中使用 QSci 库时应该采用 Q_DECL_IMPORT
|
||||
# 控制 QSCINTILLA_EXPORT 符号应为 Q_DECL_IMPORT
|
||||
)
|
||||
endif(WIN32 AND NOTEPAD_BUILD_BY_SHARED)
|
||||
|
||||
if(UNIX)
|
||||
# 默认在 Unix/Linux 中仅需要定义一个内部插件宏管理器
|
||||
target_compile_definitions(${LOCAL_PLUGIN_NAME}
|
||||
PRIVATE
|
||||
NOTEPAD_PLUGIN_MANAGER
|
||||
)
|
||||
endif(UNIX)
|
|
@ -0,0 +1,6 @@
|
|||
#include "ndd_plugin_implement.h"
|
||||
|
||||
NddPluginImplement::NddPluginImplement()
|
||||
{
|
||||
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
#ifndef NDD_PLUGIN_IMPLEMENT_H
|
||||
#define NDD_PLUGIN_IMPLEMENT_H
|
||||
|
||||
#include <QMainWindow>
|
||||
|
||||
class NddPluginImplement
|
||||
{
|
||||
public:
|
||||
NddPluginImplement();
|
||||
|
||||
};
|
||||
|
||||
#endif // NDD_PLUGIN_IMPLEMENT_H
|
|
@ -0,0 +1,49 @@
|
|||
#include <qobject.h>
|
||||
#include <qstring.h>
|
||||
#include <include/pluginGl.h>
|
||||
#include <functional>
|
||||
#include <qsciscintilla.h>
|
||||
#include "ndd_plugin_implement.h"
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
bool NDD_PROC_IDENTIFY(NDD_PROC_DATA* pProcData) {
|
||||
// NOTEPAD_PLUGIN_METADATA
|
||||
// (name, version, author, comment, filepath)
|
||||
// 使用插件宏模板来完成简单的插件处理
|
||||
NOTEPAD_PLUGIN_METADATA("base-secondary-menu-plugin", "0.1", "author", "基本二级菜单插件", "");
|
||||
|
||||
pProcData->m_menuType = 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
static QWidget *s_pNotepad;
|
||||
static NDD_PROC_DATA s_pProcData;
|
||||
static std::function<QsciScintilla* ()> s_getCurEdit;
|
||||
|
||||
int NDD_PROC_MAIN(QWidget* pNotepad, const QString& strFileName, std::function<QsciScintilla* ()>getCurEdit, NDD_PROC_DATA* pProcData) {
|
||||
// NOTEPAD_PLUGIN_IMPLEMENT
|
||||
// (NddPluginImplement);
|
||||
// 使用插件宏模板来完成基本的插件内容处理
|
||||
// NddPluginImplement *imp = new NddPluginImplement();
|
||||
|
||||
if(pNotepad != nullptr) {
|
||||
s_pNotepad = pNotepad;
|
||||
} else return -1;
|
||||
|
||||
if(pProcData != nullptr) {
|
||||
s_pProcData = *pProcData;
|
||||
} else return -1;
|
||||
|
||||
if(getCurEdit != nullptr) {
|
||||
s_getCurEdit = getCurEdit;
|
||||
} else return -1;
|
||||
|
||||
QAction *action = s_pProcData.m_rootMenu->addAction("打印信息");
|
||||
action->connect(action, &QAction::triggered, [](){
|
||||
qDebug() << "打印信息";
|
||||
});
|
||||
|
||||
// 插件已成功实现
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue