mirror of https://gitee.com/cxasm/notepad--.git
pluginGl: 早期计划的废除,废除 V 系列,添加 _ 可定制系列宏
This commit is contained in:
parent
b33bfa7845
commit
36e857d6e1
|
@ -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
|
||||
/***********在编译插件时提供的内容**************/
|
||||
|
|
Loading…
Reference in New Issue