mirror of https://gitee.com/cxasm/notepad--.git
cmake-plugin: 在 hello-simple 示例中添加插件生成能力
This commit is contained in:
parent
ecfc9273a4
commit
1f3408c621
|
@ -30,7 +30,12 @@ if(USE_NOTEPAD_PLUGIN)
|
|||
)
|
||||
|
||||
# 一个最为简单的 framework-hello 插件
|
||||
add_framework_plugin(framework-hello-simple framework-plugins/hello-simple)
|
||||
add_framework_plugin(framework-hello-simple
|
||||
${PROJECT_SOURCE_DIR}/src/utils
|
||||
framework-plugins/hello-simple
|
||||
framework-plugins/hello-simple/view
|
||||
framework-plugins/hello-simple/template
|
||||
framework-plugins/hello-simple/buildin.qrc)
|
||||
|
||||
# 一个简单的 plantuml 预览插件
|
||||
add_framework_plugin(framework-plantuml-preview
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
<RCC>
|
||||
<qresource prefix="/">
|
||||
<file>template/plugintemplate.cpp</file>
|
||||
<file>template/plugintemplate.h</file>
|
||||
<file>template/plugintemplate.txt</file>
|
||||
</qresource>
|
||||
</RCC>
|
|
@ -1,7 +1,13 @@
|
|||
#include "hello.h"
|
||||
#include "pluginframeworkhelper.h"
|
||||
#include "view/createnewplugincodedialog.h"
|
||||
|
||||
#include <qmessagebox.h>
|
||||
#include <QFile>
|
||||
#include <QFileDialog>
|
||||
#include <QMessageBox>
|
||||
#include <QTextCodec>
|
||||
|
||||
#include <utils/pathutil.h>
|
||||
|
||||
Hello::Hello(QObject *parent)
|
||||
: QObject{parent}
|
||||
|
@ -73,6 +79,129 @@ void Hello::registerPluginActions(QMenu *rootMenu)
|
|||
QVariant editName = PluginFrameworkHelper::DoNewEdit(s_notepad, s_plugin_callback);
|
||||
QMessageBox::information(nullptr, "New Edit", editName.toString());
|
||||
});
|
||||
|
||||
rootMenu->addAction("Create New Plugin Code Template", this, [this](){
|
||||
// 1. Dialog to PluginName and ClassName
|
||||
CreateNewPluginCodeDialog dialog;
|
||||
|
||||
if (dialog.exec() == QDialog::Accepted) {
|
||||
|
||||
/** H **/
|
||||
QFile file_h("://template/plugintemplate.h");
|
||||
file_h.open(QIODevice::ReadOnly);
|
||||
QString h = file_h.readAll();
|
||||
file_h.close();
|
||||
|
||||
// ifdef/class
|
||||
h.replace("PLUGINTEMPLATE", dialog.getClassName().toUpper());
|
||||
h.replace("PluginTemplate", dialog.getClassName());
|
||||
|
||||
/** CPP **/
|
||||
QFile file_cpp("://template/plugintemplate.cpp");
|
||||
file_cpp.open(QIODevice::ReadOnly);
|
||||
QString cpp = file_cpp.readAll();
|
||||
file_cpp.close();
|
||||
|
||||
// include/class
|
||||
cpp.replace("plugintemplate", dialog.getClassName().toLower());
|
||||
cpp.replace("PluginTemplate", dialog.getClassName());
|
||||
|
||||
// 1. 处理插件名称、版本、作者、简介说明
|
||||
#if _MSC_VER
|
||||
QTextCodec *codec = QTextCodec::codecForName("GBK");
|
||||
#else
|
||||
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
|
||||
#endif
|
||||
// QTextCodec::setCodecForLocale(codec);
|
||||
|
||||
cpp.replace("//Name", dialog.getName());
|
||||
cpp.replace("//Version", dialog.getVersion());
|
||||
cpp.replace("//Author", dialog.getAuthor());
|
||||
cpp.replace("//Comment", dialog.getComment());
|
||||
|
||||
// 2. 处理插件预期触发操作
|
||||
if (dialog.getMenuType() == true) {
|
||||
cpp.replace("//Trigger", "QMessageBox::information(nullptr, \"tip\", \"This is default tip message.\");");
|
||||
cpp.replace("//Actions", "//Actions: Will never enter here.");
|
||||
} else {
|
||||
cpp.replace("MenuType::None", "MenuType::SecondaryMenu");
|
||||
cpp.replace("//Trigger", "//Trigger: Will never enter here.");
|
||||
|
||||
cpp.replace("//Actions","rootMenu->addAction(\"Default\", this, [this](){\n"
|
||||
" QMessageBox::information(nullptr, \"tip\", \"This is default tip message.\");\n"
|
||||
" });");
|
||||
}
|
||||
// 3. 解锁 NDD_DECLARE_PLUGIN 宏注释
|
||||
cpp.replace("//NDD_DECLARE_PLUGIN", "NDD_DECLARE_PLUGIN");
|
||||
|
||||
|
||||
/** CMake **/
|
||||
QFile file_txt("://template/plugintemplate.txt");
|
||||
file_txt.open(QIODevice::ReadOnly);
|
||||
QString txt = file_txt.readAll();
|
||||
file_txt.close();
|
||||
|
||||
// 1. 处理对 CMakeLists.txt 的构建解释, 目标名称
|
||||
txt.replace("plugintemplate", dialog.getClassName().toLower());
|
||||
// 2. 这是在模板中的一个路径占位,但原始内容被构建解释改变了
|
||||
QString txtPlacePath = QString("#framework-plugins/%1").arg(dialog.getClassName().toLower());
|
||||
|
||||
/** -------------------------------- */
|
||||
|
||||
// 1. 创建编辑器
|
||||
QVariant editName = PluginFrameworkHelper::DoNewEdit(s_notepad, s_plugin_callback);
|
||||
// 2. 获取刚才创建的编辑器
|
||||
QsciScintilla *curEdit = s_get_cur_edit_callback(s_notepad);
|
||||
|
||||
// 3. 将代码设置到内部,或打开对话框保存到目录
|
||||
if (dialog.getSaveType() == true) {
|
||||
curEdit->setText(h + "\n\n\n" + cpp + "\n\n\n" + txt);
|
||||
} else {
|
||||
// 获取保存目录路径
|
||||
QString existDir = QFileDialog::getExistingDirectory(nullptr, "Open Save Dir", PathUtil::execDir());
|
||||
if (existDir.isEmpty() == false) {
|
||||
QMessageBox::information(nullptr, "Note", QString("已保存到目录:\n%1").arg(existDir));
|
||||
QString header = QString("%1/%2.h").arg(existDir);
|
||||
QString source = QString("%1/%2.cpp").arg(existDir);
|
||||
|
||||
QFile fh(header.arg(dialog.getClassName().toLower()));
|
||||
QFile fcpp(source.arg(dialog.getClassName().toLower()));
|
||||
|
||||
fh.open(QIODevice::WriteOnly);
|
||||
// fh.write(h.toLocal8Bit()); // 存在乱码情况,使用 QTextStream
|
||||
QTextStream fhout(&fh);
|
||||
fhout.setCodec("utf-8");
|
||||
fhout.setGenerateByteOrderMark(true); // with Bom
|
||||
fhout << h;
|
||||
fh.close();
|
||||
|
||||
fcpp.open(QIODevice::WriteOnly);
|
||||
// fcpp.write(cpp.toLocal8Bit()); // 存在乱码情况,使用 QTextStream
|
||||
QTextStream fcppout(&fcpp);
|
||||
fcppout.setCodec("utf-8");
|
||||
fcppout.setGenerateByteOrderMark(true); // with Bom
|
||||
fcppout << cpp;
|
||||
fcpp.close();
|
||||
|
||||
// 可能逻辑: 如果存放在源代码目录树中,则处理掉路径前缀部分(替换占位)/或直接使用存储目录(替换占位)
|
||||
QString posiblePath = QString("plugin/framework-plugins");
|
||||
if (existDir.contains(posiblePath) == true) {
|
||||
int posibleIndex = existDir.indexOf("framework-plugins");
|
||||
if (posibleIndex > 0) {
|
||||
txt.replace(txtPlacePath, existDir.mid(posibleIndex));
|
||||
}
|
||||
} else {
|
||||
txt.replace(txtPlacePath, existDir);
|
||||
}
|
||||
curEdit->setText(txt);
|
||||
} else {
|
||||
QMessageBox::information(nullptr, "Note", "未选中存储目录,本次操作被忽略");
|
||||
QString content = QString("未选中存储目录,本次操作被忽略,但保留了本次内容\n\n\n") + h + "\n\n\n" + cpp;
|
||||
curEdit->setText(content);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void Hello::registerCurrentEditCallback(std::function<QsciScintilla *(QWidget *)> get_cur_edit_callback)
|
||||
|
@ -86,4 +215,4 @@ void Hello::registerPluginCallBack(std::function<bool (QWidget *, int, void *)>
|
|||
}
|
||||
|
||||
|
||||
NDD_DECLARE_PLUGIN(Hello::instance())
|
||||
NDD_DECLARE_PLUGIN(Hello::instance())
|
||||
|
|
|
@ -0,0 +1,72 @@
|
|||
#include "plugintemplate.h"
|
||||
#include "pluginframeworkhelper.h"
|
||||
|
||||
#include <QMessageBox>
|
||||
|
||||
PluginTemplate::PluginTemplate(QObject *parent)
|
||||
: QObject{parent}
|
||||
{}
|
||||
|
||||
PluginTemplate &PluginTemplate::instance()
|
||||
{
|
||||
static PluginTemplate _plugin;
|
||||
return _plugin;
|
||||
}
|
||||
|
||||
QString PluginTemplate::PluginName()
|
||||
{
|
||||
return "//Name";
|
||||
}
|
||||
|
||||
QString PluginTemplate::PluginVersion()
|
||||
{
|
||||
return "//Version";
|
||||
}
|
||||
|
||||
QString PluginTemplate::PluginAuthor()
|
||||
{
|
||||
return "//Author";
|
||||
}
|
||||
|
||||
QString PluginTemplate::PluginComment()
|
||||
{
|
||||
return "//Comment";
|
||||
}
|
||||
|
||||
IPluginFramework::MenuType PluginTemplate::PluginMenuType()
|
||||
{
|
||||
return MenuType::None;
|
||||
}
|
||||
|
||||
void PluginTemplate::registerNotepad(QWidget *notepad)
|
||||
{
|
||||
s_notepad = notepad;
|
||||
}
|
||||
|
||||
void PluginTemplate::registerStrFileName(QString str_file_name)
|
||||
{
|
||||
s_str_file_name = str_file_name;
|
||||
}
|
||||
|
||||
void PluginTemplate::PluginTrigger()
|
||||
{
|
||||
//Trigger
|
||||
}
|
||||
|
||||
void PluginTemplate::registerPluginActions(QMenu *rootMenu)
|
||||
{
|
||||
//Actions
|
||||
}
|
||||
|
||||
void PluginTemplate::registerCurrentEditCallback(std::function<QsciScintilla *(QWidget *)> get_cur_edit_callback)
|
||||
{
|
||||
s_get_cur_edit_callback = get_cur_edit_callback;
|
||||
}
|
||||
|
||||
void PluginTemplate::registerPluginCallBack(std::function<bool (QWidget *, int, void *)> plugin_callback)
|
||||
{
|
||||
s_plugin_callback = plugin_callback;
|
||||
}
|
||||
|
||||
// Plug-in implementation wrapper
|
||||
//NDD_DECLARE_PLUGIN(PluginTemplate::instance())
|
|
@ -0,0 +1,36 @@
|
|||
#ifndef PLUGINTEMPLATE_H
|
||||
#define PLUGINTEMPLATE_H
|
||||
|
||||
#include <IPluginFramework.h>
|
||||
#include <QObject>
|
||||
|
||||
class PluginTemplate : public QObject, IPluginFramework
|
||||
{
|
||||
Q_OBJECT
|
||||
explicit PluginTemplate(QObject *parent = nullptr);
|
||||
public:
|
||||
static PluginTemplate &instance();
|
||||
|
||||
|
||||
// IPluginFramework interface
|
||||
public:
|
||||
QString PluginName();
|
||||
QString PluginVersion();
|
||||
QString PluginAuthor();
|
||||
QString PluginComment();
|
||||
MenuType PluginMenuType();
|
||||
void registerNotepad(QWidget *notepad);
|
||||
void registerStrFileName(QString str_file_name);
|
||||
void PluginTrigger();
|
||||
void registerPluginActions(QMenu *rootMenu);
|
||||
void registerCurrentEditCallback(std::function<QsciScintilla *(QWidget *)> get_cur_edit_callback);
|
||||
void registerPluginCallBack(std::function<bool (QWidget *, int, void *)> plugin_callback);
|
||||
|
||||
private:
|
||||
QWidget *s_notepad;
|
||||
QString s_str_file_name;
|
||||
std::function<QsciScintilla*(QWidget*)> s_get_cur_edit_callback;
|
||||
std::function<bool(QWidget*, int, void*)> s_plugin_callback;
|
||||
};
|
||||
|
||||
#endif // PLUGINTEMPLATE_H
|
|
@ -0,0 +1,18 @@
|
|||
现在:将以下内容复制到源代码目录的 plugin/CMakeLists.txt 中。
|
||||
并在项目配置中启用该构建:framework-plugintemplate_ENABLE
|
||||
或在命令行中启用该构建:-Dframework-plugintemplate_ENABLE:BOOL=ON
|
||||
|
||||
注意:在以下 if 中,是对此目标的扩展构建,使用 if 是在确保项目中启用该构建时才进行构建。
|
||||
可以注意的是,在没有明确构建何种插件时,任何由 add_framework_plugin 添加的插件构建均不会起效。
|
||||
这样可以最大程度在默认情况下确保主程序的可构建性。
|
||||
|
||||
# 一个简单的 plugintemplate 插件
|
||||
add_framework_plugin(framework-plugintemplate
|
||||
# 这里可以进行编写包含源代码的目录、文件路径、其它需要构建的资源路径
|
||||
#framework-plugins/plugintemplate
|
||||
)
|
||||
if(framework-plugintemplate_ENABLE)
|
||||
# 这里可以进行扩展构建,
|
||||
# find_package(Qt5Svg)
|
||||
# target_link_libraries(framework-plugintemplate Qt5::Svg)
|
||||
endif(framework-plugintemplate_ENABLE)
|
|
@ -0,0 +1,53 @@
|
|||
#include "createnewplugincodedialog.h"
|
||||
#include "ui_createnewplugincodedialog.h"
|
||||
|
||||
CreateNewPluginCodeDialog::CreateNewPluginCodeDialog(QWidget *parent)
|
||||
: QDialog(parent)
|
||||
, ui(new Ui::CreateNewPluginCodeDialog)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
}
|
||||
|
||||
CreateNewPluginCodeDialog::~CreateNewPluginCodeDialog()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
QString CreateNewPluginCodeDialog::getName()
|
||||
{
|
||||
return ui->edit_name->text();
|
||||
}
|
||||
|
||||
QString CreateNewPluginCodeDialog::getClassName()
|
||||
{
|
||||
if (ui->edit_class_name->text().isEmpty()) {
|
||||
return ui->edit_name->text();
|
||||
}
|
||||
return ui->edit_class_name->text();;
|
||||
}
|
||||
|
||||
QString CreateNewPluginCodeDialog::getVersion()
|
||||
{
|
||||
return ui->edit_version->text();
|
||||
}
|
||||
|
||||
QString CreateNewPluginCodeDialog::getAuthor()
|
||||
{
|
||||
return ui->edit_author->text();
|
||||
}
|
||||
|
||||
QString CreateNewPluginCodeDialog::getComment()
|
||||
{
|
||||
QString d = ui->edit_descript->toPlainText();
|
||||
return d.replace("\\", "\\\\").replace("\"", "\\\"");
|
||||
}
|
||||
|
||||
bool CreateNewPluginCodeDialog::getMenuType()
|
||||
{
|
||||
return ui->r_none->isChecked();
|
||||
}
|
||||
|
||||
bool CreateNewPluginCodeDialog::getSaveType()
|
||||
{
|
||||
return ui->r_save_edit->isChecked();
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
#ifndef CREATENEWPLUGINCODEDIALOG_H
|
||||
#define CREATENEWPLUGINCODEDIALOG_H
|
||||
|
||||
#include <QDialog>
|
||||
|
||||
namespace Ui {
|
||||
class CreateNewPluginCodeDialog;
|
||||
}
|
||||
|
||||
class CreateNewPluginCodeDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit CreateNewPluginCodeDialog(QWidget *parent = nullptr);
|
||||
~CreateNewPluginCodeDialog();
|
||||
|
||||
QString getName();
|
||||
QString getClassName();
|
||||
QString getVersion();
|
||||
QString getAuthor();
|
||||
QString getComment();
|
||||
|
||||
bool getMenuType();
|
||||
|
||||
bool getSaveType();
|
||||
|
||||
private:
|
||||
Ui::CreateNewPluginCodeDialog *ui;
|
||||
};
|
||||
|
||||
#endif // CREATENEWPLUGINCODEDIALOG_H
|
|
@ -0,0 +1,231 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>CreateNewPluginCodeDialog</class>
|
||||
<widget class="QDialog" name="CreateNewPluginCodeDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>288</width>
|
||||
<height>335</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>插件生成对话框</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="2" column="1">
|
||||
<widget class="QLineEdit" name="edit_version">
|
||||
<property name="text">
|
||||
<string>v0.1</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QFrame" name="frame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="r_none">
|
||||
<property name="text">
|
||||
<string>None</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="r_second">
|
||||
<property name="text">
|
||||
<string>Second</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>插件版本:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="edit_name">
|
||||
<property name="text">
|
||||
<string>NextNddPlugin</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0" colspan="2">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>插件说明:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0" colspan="2">
|
||||
<widget class="QPlainTextEdit" name="edit_descript">
|
||||
<property name="plainText">
|
||||
<string>You can change the plug-in name to the appropriate name, and adjust any part that can be adjusted to make the code generation more accurate.</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QLineEdit" name="edit_author">
|
||||
<property name="text">
|
||||
<string>unknow</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>插件名称:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>插件作者:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>菜单类型:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="edit_class_name">
|
||||
<property name="placeholderText">
|
||||
<string>类名:留空同名</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QFrame" name="frame_2">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>生成类型:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="r_save_edit">
|
||||
<property name="text">
|
||||
<string>显示到编辑器</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="r_save_dir">
|
||||
<property name="text">
|
||||
<string>存储到目录</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<tabstops>
|
||||
<tabstop>edit_name</tabstop>
|
||||
<tabstop>edit_class_name</tabstop>
|
||||
<tabstop>edit_version</tabstop>
|
||||
<tabstop>edit_author</tabstop>
|
||||
<tabstop>r_none</tabstop>
|
||||
<tabstop>r_second</tabstop>
|
||||
<tabstop>edit_descript</tabstop>
|
||||
<tabstop>r_save_edit</tabstop>
|
||||
<tabstop>r_save_dir</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>CreateNewPluginCodeDialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>248</x>
|
||||
<y>254</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>157</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>CreateNewPluginCodeDialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>316</x>
|
||||
<y>260</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
Loading…
Reference in New Issue