pluginGl: 早期计划的废除,废除 V 系列,添加 _ 可定制系列宏

This commit is contained in:
zinface 2023-04-25 09:32:57 +08:00
parent b33bfa7845
commit 36e857d6e1
1 changed files with 112 additions and 15 deletions

View File

@ -1,4 +1,4 @@
#pragma once
#pragma once
#include <QString>
#include <QMenu>
@ -71,20 +71,73 @@ typedef void (*NDD_PROC_FOUND_CALLBACK)(NDD_PROC_DATA* pProcData, void* pUserDat
#define NOTEPAD_PLUGIN_IMPLEMENT(imp_class) \
imp_class *imp = new imp_class(pNotepad, getCurEdit()); \
//imp->setWindowFlag(Qt::Window); \
imp->show();
/*** Interface Implementation Assistant ***/
// 原始接口
#define NOTEPAD_PLUGIN_METADATA_IDENTIFY(name, version, author, comment, filepath) \
bool NDD_PROC_IDENTIFY(NDD_PROC_DATA* pProcData) { \
/** 以 _ 为起始的完整性可扩展定制宏,并计划性废除 V 系列的不可扩展的固定宏 **/
/** 明确的逻辑宏,在不同接口之间进行抽离出具有可扩展的宏设计
* 1. 使 IDENTIFY_ MPLEMENT_
* 2. 使 IDENTIFY_ MPLEMENT_1 使
* 3. 使 IDENTIFY_1 MPLEMENT_1 使
* 4. MPLEMENT_1 使 USE_IMPLEMENT_VARIABLES 使
*/
// _ 版本化,基础插件实现的
#define NOTEPAD_PLUGIN_METADATA_IDENTIFY_ \
static bool useSecondaryMenu = false; \
bool NDD_PROC_IDENTIFY(NDD_PROC_DATA* pProcData)
// _ 版本化,基础插件实现的
#define NOTEPAD_PLUGIN_METADATA_IMPLEMENT_ \
int NDD_PROC_MAIN(QWidget* pNotepad, const QString& strFileName, std::function<QsciScintilla* ()>getCurEdit, NDD_PROC_DATA* pProcData)
// _1 版本化,完整性的内容设计,支持二级菜单计划的宏
#define NOTEPAD_PLUGIN_METADATA_IDENTIFY_1 \
static bool useSecondaryMenu = true; \
bool NDD_PROC_IDENTIFY(NDD_PROC_DATA* pProcData)
// _1 版本化,完整性的内容设计,支持二级菜单计划的宏
#define NOTEPAD_PLUGIN_METADATA_IMPLEMENT_1 \
static QWidget* s_pNotepad; \
static QString s_strFileName; \
static std::function<QsciScintilla* ()> s_getCurEdit; \
static NDD_PROC_DATA s_pProcData; \
NOTEPAD_PLUGIN_METADATA_IMPLEMENT_
#define USE_IDENTIFY_VARIABLES \
pProcData->m_menuType = useSecondaryMenu; \
#define USE_IMPLEMENT_VARIABLES \
s_pNotepad = pNotepad; \
s_strFileName = strFileName; \
s_getCurEdit = getCurEdit; \
if (useSecondaryMenu) { \
if (pProcData == nullptr) { \
return -1; \
} \
s_pProcData = *pProcData; \
} \
#ifdef NOTEPAD_PLUGIN_DECLARE_PLUGIN_CONFIG
# define NOTEPAD_PLUGIN_CONFIG <plugin-config.h>
# include NOTEPAD_PLUGIN_CONFIG
#endif //NOTEPAD_PLUGIN_DECLARE_PLUGIN_CONFIG
/*************** Interface Implementation Assistant ***************/
// 早期计划的废除系列 - 至此我们无法享受到早期计划的宏方案
#ifdef NOTEPAD_PLUGIN_EARLY_DECLARE
// V0 原始接口 - 早期设计
#define NOTEPAD_PLUGIN_METADATA_IDENTIFY_V0(name, version, author, comment, filepath) \
NOTEPAD_PLUGIN_METADATA_IDENTIFY_ { \
NOTEPAD_PLUGIN_METADATA(name, version, author, comment, filepath) \
return true;\
}\
#define NOTEPAD_PLUGIN_METADATA_IMPLEMENT(imp_class, imp_show_window) \
int NDD_PROC_MAIN(QWidget* pNotepad, const QString& strFileName, std::function<QsciScintilla* ()>getCurEdit, NDD_PROC_DATA* pProcData) {\
#define NOTEPAD_PLUGIN_METADATA_IMPLEMENT_V0(imp_class, imp_show_window) \
NOTEPAD_PLUGIN_METADATA_IMPLEMENT_ {\
NOTEPAD_PLUGIN_IMPLEMENT(imp_class); \
if (imp_show_window) {\
imp->show();\
@ -92,19 +145,16 @@ typedef void (*NDD_PROC_FOUND_CALLBACK)(NDD_PROC_DATA* pProcData, void* pUserDat
return 0;\
}\
// v1 支持 Menu 的接口
// v1 在原始接口的基础上,加入了二级菜单接口 - 早期设计
#define NOTEPAD_PLUGIN_METADATA_IDENTIFY_V1(name, version, author, comment, filepath) \
bool NDD_PROC_IDENTIFY(NDD_PROC_DATA* pProcData) { \
NOTEPAD_PLUGIN_METADATA_IDENTIFY_ { \
NOTEPAD_PLUGIN_METADATA(name, version, author, comment, filepath) \
pProcData->m_menuType = 1;\
return true;\
}\
#define NOTEPAD_PLUGIN_METADATA_IMPLEMENT_V1(imp_class, imp_show_window) \
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_METADATA_IMPLEMENT_1 {\
if(pNotepad != nullptr) { \
s_pNotepad = pNotepad; \
} else return -1; \
@ -126,5 +176,52 @@ typedef void (*NDD_PROC_FOUND_CALLBACK)(NDD_PROC_DATA* pProcData, void* pUserDat
return 0;\
}\
// V2 在原始接口与二级菜单接口两者之间进行取舍 - 早期设计
#define NOTEPAD_PLUGIN_METADATA_IDENTIFY_V2(name, version, author, comment, filepath, menu) \
static bool useSecondaryMenu = menu; \
NOTEPAD_PLUGIN_METADATA_IDENTIFY_ { \
NOTEPAD_PLUGIN_METADATA(name, version, author, comment, filepath) \
if (menu) {\
pProcData->m_menuType = 1;\
}\
return true;\
}\
#define NOTEPAD_PLUGIN_METADATA_IMPLEMENT_V2(imp_class, imp_show_window) \
NOTEPAD_PLUGIN_METADATA_IMPLEMENT_1 {\
USE_IMPLEMENT_VARIABLES\
imp_class *imp = new imp_class(pNotepad, s_strFileName, s_getCurEdit, s_pProcData);\
if (useSecondaryMenu) {\
imp->setMenuActions(s_pProcData);\
}\
if (imp_show_window) {\
imp->show();\
}\
return 0;\
}\
// 时刻保持最新的宏接口 - 早期设计
/************ NOTEPAD_PLUGIN_METADATA_(IDENTIFY/IMPLEMENT) *************/
// #define NOTEPAD_PLUGIN_METADATA_IDENTIFY(name, version, author, comment, filepath) \
// NOTEPAD_PLUGIN_METADATA_IDENTIFY_ {\
// NOTEPAD_PLUGIN_METADATA(name, version, author, comment, filepath)\
// return true;\
// }\
// #define NOTEPAD_PLUGIN_METADATA_IMPLEMENT(imp_class, imp_show_window) \
// NOTEPAD_PLUGIN_METADATA_IMPLEMENT_1 {\
// USE_IMPLEMENT_VARIABLES\
// imp_class *imp = new imp_class(pNotepad, getCurEdit());\
// imp->setCurrentEditFunc(s_getCurEdit); \
// imp->setPluginFilePath(s_strFileName); \
// if (imp_show_window) {\
// imp->show();\
// }\
// return 0;\
// }\
#endif //NOTEPAD_PLUGIN_EARLY_DECLARE
#endif //NOTEPAD_PLUGIN_MANAGER
/***********在编译插件时提供的内容**************/