cmake-plugin: 重写 base-plugin 模板

This commit is contained in:
zinface 2023-04-25 10:49:31 +08:00
parent 194793e14e
commit 893a3f69a9
3 changed files with 116 additions and 17 deletions

View File

@ -1 +1,5 @@
#define NOTEPAD_VERSION "v@PROJECT_VERSION@"
#define PLUGIN_NAME "@LOCAL_PLUGIN_NAME@"
#define PLUGIN_VERSION "@LOCAL_PLUGIN_VERSION@"

View File

@ -6,7 +6,10 @@
# base-plugin
# base-plugin -> your plugin name
set(LOCAL_PLUGIN_NAME "base-plugin")
set(LOCAL_PLUGIN_NAME "base-plugin")
set(LOCAL_PLUGIN_VERSION "0.1")
configure_file(${CMAKE_SOURCE_DIR}/cmake/modules/config.h.in plugin-config.h @ONLY)
# base-plugin
# base-plugin
@ -55,6 +58,11 @@ endif(TRUE)
# ----------------- base-plugin ----------------- #
target_compile_definitions(${LOCAL_PLUGIN_NAME}
#
PRIVATE
NOTEPAD_PLUGIN_DECLARE_PLUGIN_CONFIG)
if(WIN32 AND NOTEPAD_BUILD_BY_SHARED)
# Windows QScintilla
target_compile_definitions(${LOCAL_PLUGIN_NAME}

View File

@ -1,29 +1,116 @@
#include <qobject.h>
#include <qobject.h>
#include <qstring.h>
#include <include/pluginGl.h>
#include <functional>
#include <qsciscintilla.h>
#include "ndd_plugin_implement.h"
#include <QDebug>
// 当编译标志 NOTEPAD_PLUGIN_DECLARE_PLUGIN_CONFIG 被定义
// 将会自动 #include <plugin-config.h>,并提供几个插件相关的宏
// #define NOTEPAD_VERSION "v1.23.2"
// #define PLUGIN_NAME "opencc-demo-plugin"
// #define PLUGIN_VERSION "0.1"
// 使用可扩展宏 IDENTIFY_
NOTEPAD_PLUGIN_METADATA_IDENTIFY_ {
USE_IDENTIFY_VARIABLES
NOTEPAD_PLUGIN_METADATA("base-plugin", PLUGIN_VERSION, "author", u8"基本插件", "");
qInfo() << "[Plugin]" << "strPlugName:" << pProcData->m_strPlugName;
qInfo() << "[Plugin]" << "Version: " << pProcData->m_version;
qInfo() << "[Plugin]" << "strComment: " << pProcData->m_strComment;
qInfo() << "[Plugin]" << "Author: " << pProcData->m_auther;
qInfo() << "[Plugin]" << "strFilePath:" << pProcData->m_strFilePath;
qInfo() << "[Plugin]" << "PLUGIN_VERSION: " << PLUGIN_VERSION;
qInfo() << "[Plugin]" << "NOTEPAD_VERSION:" << QString(u8"基于 %1 编译").arg(NOTEPAD_VERSION);
// [Plugin] strPlugName: "base-plugin"
// [Plugin] Version: "0.1"
// [Plugin] strComment: "基本插件"
// [Plugin] Author: "author"
// [Plugin] strFilePath: ""
// [Plugin] PLUGIN_VERSION: 0.1
// [Plugin] NOTEPAD_VERSION: "基于 v1.23.2 编译"
bool NDD_PROC_IDENTIFY(NDD_PROC_DATA* pProcData) {
// NOTEPAD_PLUGIN_METADATA
// (name, version, author, comment, filepath)
// 使用插件宏模板来完成简单的插件处理
NOTEPAD_PLUGIN_METADATA("base-plugin", "0.1", "author", "基本插件", "");
return true;
}
// 使用可扩展宏 IMPLEMENT_ ,在 _1 中将进行二级菜单扩展的全局声明
NOTEPAD_PLUGIN_METADATA_IMPLEMENT_1 {
USE_IMPLEMENT_VARIABLES
int NDD_PROC_MAIN(QWidget* pNotepad, const QString& strFileName, std::function<QsciScintilla* ()>getCurEdit) {
// NOTEPAD_PLUGIN_IMPLEMENT
// (NddPluginImplement);
// 使用插件宏模板来完成基本的插件内容处理
NddPluginImplement *imp = new NddPluginImplement();
// 输出:从插件中能获取的所有继承的对象名称
QObject *parent = nullptr;
QString indent = "";
// 这个插件是一个窗口需要显示
// imp->show();
// 以 s_pNotepad 对象开始的父级探索
{
parent = s_pNotepad;
// if 判断
if (parent) {
qInfo() << PLUGIN_NAME << ":" << parent->objectName();
}
// base-pluginCCNotePad
// while 简写
qInfo() << "[Parent layer]";
while (parent) {
qInfo() << QString("%1%2").arg(indent).arg(parent->objectName());
parent = parent->parent();
indent = indent.append(" ");
}
// [Parent layer]
// "CCNotePad"
}
// 从 [s_]getCurEdit 开始的父级探索
{
// if 判断形式,比较复杂
// if (getCurEdit) // 从 getCurEdit 开始
// {
// if (getCurEdit()) {
// // ""
// qInfo() << PLUGIN_NAME << ":" << getCurEdit()->objectName();
// if (getCurEdit()->parent())
// { // qt_tabwidget_stackedwidget
// qInfo() << PLUGIN_NAME << ":" << getCurEdit()->parent()->objectName();
// if (getCurEdit()->parent()->parent())
// { // editTabWidget
// qInfo() << PLUGIN_NAME << ":" << getCurEdit()->parent()->parent()->objectName();
// if (getCurEdit()->parent()->parent()->parent())
// { // centralWidget
// qInfo() << PLUGIN_NAME << ":" << getCurEdit()->parent()->parent()->parent()->objectName();
// if (getCurEdit()->parent()->parent()->parent()->parent())
// { // CCNotePad
// qInfo() << PLUGIN_NAME << ":" << getCurEdit()->parent()->parent()->parent()->parent()->objectName();
// }
// }
// }
// }
// }
// }
// while 判断形式,比较简单
parent = getCurEdit();
indent = "";
qInfo() << "[Parent layer]";
// while 简写
while (parent) {
qInfo() << QString("%1%2").arg(indent).arg(parent->objectName());
parent = parent->parent();
indent = indent.append(" ");
}
// [Parent layer]
// ""
// " qt_tabwidget_stackedwidget"
// " editTabWidget"
// " centralWidget"
// " CCNotePad"
}
// 插件已成功实现
return 0;
}