250 lines
20 KiB
C++
250 lines
20 KiB
C++
// SPDX-FileCopyrightText: 2020 - 2022 UnionTech Software Technology Co., Ltd.
|
|
//
|
|
// SPDX-License-Identifier: LGPL-3.0-or-later
|
|
|
|
#ifndef DCUSTOMERMACROWIDGET_H
|
|
#define DCUSTOMERMACROWIDGET_H
|
|
|
|
#include <QtUiPlugin/QDesignerCustomWidgetInterface>
|
|
|
|
#include <DFrame>
|
|
#include <DArrowLineDrawer>
|
|
#include <DButtonBox>
|
|
#include <DColoredProgressBar>
|
|
#include <DCrumbEdit>
|
|
#include <DDoubleSpinBox>
|
|
#include <DFileChooserEdit>
|
|
#include <DFloatingButton>
|
|
#include <DIpv4LineEdit>
|
|
#include <DKeySequenceEdit>
|
|
#include <DLabel>
|
|
#include <DLineEdit>
|
|
#include <DPageIndicator>
|
|
#include <DProgressBar>
|
|
|
|
#include <DPasswordEdit>
|
|
#include <DTabBar>
|
|
#include <DWaterProgress>
|
|
#include <DShadowLine>
|
|
#include <DTextEdit>
|
|
#include <DSearchComboBox>
|
|
#include <DSpinBox>
|
|
#include <DSegmentedHighlight>
|
|
#include <DSpinner>
|
|
#include <DToolButton>
|
|
#include <DSegmentedControl>
|
|
#include <DSuggestButton>
|
|
#include <DSwitchButton>
|
|
#include <DWarningButton>
|
|
#include <DSearchEdit>
|
|
|
|
// not added
|
|
// #include <DHorizontalLine>
|
|
// #include <DVerticalLine>
|
|
|
|
// TODO: setText problem, add in v5.6
|
|
#include <DIconButton>
|
|
|
|
DWIDGET_USE_NAMESPACE
|
|
|
|
#define IS_SAME(A, B) std::is_same<A, B>::value
|
|
|
|
#define GENERATE_CUSTOMER_WIDGET(UPPER_NAME, WIDTH, HEIGHT) \
|
|
class UPPER_NAME ## Plugin : public QObject, public QDesignerCustomWidgetInterface \
|
|
{ \
|
|
Q_OBJECT \
|
|
Q_INTERFACES(QDesignerCustomWidgetInterface) \
|
|
public: \
|
|
explicit UPPER_NAME ## Plugin(QObject *parent = nullptr) \
|
|
: QObject(parent) \
|
|
, m_initialized(false) \
|
|
{ \
|
|
} \
|
|
\
|
|
QString name() const override { \
|
|
return QStringLiteral("Dtk::Widget::" # UPPER_NAME); \
|
|
} \
|
|
\
|
|
QString group() const override { \
|
|
return QStringLiteral("Dtk Widgets"); \
|
|
} \
|
|
\
|
|
QString toolTip() const override { \
|
|
return QStringLiteral("A widgets for dtk gui components."); \
|
|
} \
|
|
\
|
|
QString whatsThis() const override { \
|
|
return toolTip(); \
|
|
} \
|
|
\
|
|
QString includeFile() const override { \
|
|
return QStringLiteral("" # UPPER_NAME); \
|
|
} \
|
|
\
|
|
QIcon icon() const override { \
|
|
return QIcon(QStringLiteral(":/images/" # UPPER_NAME) + ".png"); \
|
|
} \
|
|
\
|
|
bool isContainer() const override { \
|
|
return false; \
|
|
} \
|
|
\
|
|
UPPER_NAME *createWidget(QWidget *parent) override { \
|
|
if (IS_SAME(UPPER_NAME, DFrame)) { \
|
|
return reinterpret_cast<UPPER_NAME *>(new DFrame(parent)); \
|
|
} \
|
|
if (IS_SAME(UPPER_NAME, DLabel)) \
|
|
return reinterpret_cast<UPPER_NAME *>(new DLabel("This is DLabel.", parent)); \
|
|
if (IS_SAME(UPPER_NAME, DColoredProgressBar)) { \
|
|
DColoredProgressBar *w = new DColoredProgressBar(parent); \
|
|
w->setValue(50); \
|
|
w->setAlignment(Qt::AlignCenter); \
|
|
return reinterpret_cast<UPPER_NAME *>(w); \
|
|
} \
|
|
if (IS_SAME(UPPER_NAME, DFloatingButton)) { \
|
|
DFloatingButton *w = new DFloatingButton(parent); \
|
|
w->setIcon(QIcon::fromTheme("lock")); \
|
|
w->setFixedSize(WIDTH, HEIGHT); \
|
|
return reinterpret_cast<UPPER_NAME *>(w); \
|
|
} \
|
|
if (IS_SAME(UPPER_NAME, DButtonBox)) { \
|
|
DButtonBox *w = new DButtonBox(parent); \
|
|
w->resize(WIDTH, HEIGHT); \
|
|
w->setToolTip("ButtonBox"); \
|
|
return reinterpret_cast<UPPER_NAME *>(w); \
|
|
} \
|
|
if (IS_SAME(UPPER_NAME, DIpv4LineEdit)) { \
|
|
DIpv4LineEdit *w = new DIpv4LineEdit(parent); \
|
|
w->resize(WIDTH, HEIGHT); \
|
|
w->setText("255.255.255.255"); \
|
|
return reinterpret_cast<UPPER_NAME *>(w); \
|
|
} \
|
|
if (IS_SAME(UPPER_NAME, DKeySequenceEdit)) { \
|
|
DKeySequenceEdit *w = new DKeySequenceEdit(parent); \
|
|
w->setKeySequence(QKeySequence(Qt::CTRL + Qt::Key_A)); /* 用+号不要用逗号 */ \
|
|
return reinterpret_cast<UPPER_NAME *>(w); \
|
|
} \
|
|
if (IS_SAME(UPPER_NAME, DWaterProgress)) { \
|
|
DWaterProgress *w = new DWaterProgress(parent); \
|
|
w->setValue(50); \
|
|
w->start(); \
|
|
return reinterpret_cast<UPPER_NAME *>(w); \
|
|
} \
|
|
if (IS_SAME(UPPER_NAME, DToolButton)) { \
|
|
DToolButton *w = new DToolButton(parent); \
|
|
w->setIcon(QIcon::fromTheme("unlock")); \
|
|
return reinterpret_cast<UPPER_NAME *>(w); \
|
|
} \
|
|
if (IS_SAME(UPPER_NAME, DSpinner)) { \
|
|
DSpinner *w = new DSpinner(parent); \
|
|
w->start(); \
|
|
return reinterpret_cast<UPPER_NAME *>(w); \
|
|
} \
|
|
if (IS_SAME(UPPER_NAME, DSuggestButton)) { \
|
|
DSuggestButton *w = new DSuggestButton("suggest", parent); \
|
|
return reinterpret_cast<UPPER_NAME *>(w); \
|
|
} \
|
|
if (IS_SAME(UPPER_NAME, DWarningButton)) { \
|
|
DWarningButton *w = new DWarningButton(parent); \
|
|
w->setText("warning"); \
|
|
return reinterpret_cast<UPPER_NAME *>(w); \
|
|
} \
|
|
\
|
|
return new UPPER_NAME(parent); \
|
|
} \
|
|
\
|
|
bool isInitialized() const override { return m_initialized;} \
|
|
void initialize(QDesignerFormEditorInterface */*core*/) override { \
|
|
if (m_initialized) \
|
|
return; \
|
|
m_initialized = true; \
|
|
} \
|
|
QString domXml() const override { \
|
|
QString property; \
|
|
if (IS_SAME(UPPER_NAME, DColoredProgressBar)) { \
|
|
property = R"(<property name="value"><number>50</number></property>)"; \
|
|
} \
|
|
if (IS_SAME(UPPER_NAME, DProgressBar)) { \
|
|
property = R"(<property name="value"><number>50</number></property>)"; \
|
|
} \
|
|
if (IS_SAME(UPPER_NAME, DLineEdit)) { \
|
|
property = R"(<property name="text"><number>50</number></property>)"; \
|
|
} \
|
|
if (IS_SAME(UPPER_NAME, DIpv4LineEdit)) { \
|
|
property = R"(<property name="text"><string>255.255.255.255</string></property>)"; \
|
|
} \
|
|
if (IS_SAME(UPPER_NAME, DWaterProgress)) { \
|
|
property = R"(<property name="value"><number>50</number></property>)"; \
|
|
} \
|
|
if (IS_SAME(UPPER_NAME, DTextEdit)) { \
|
|
property = R"(<property name="text"><string>这是一个富文本编辑框</string></property>)"; \
|
|
} \
|
|
if (IS_SAME(UPPER_NAME, DSuggestButton)) { \
|
|
property = R"(<property name="text"><string>suggest</string></property>)"; \
|
|
} \
|
|
if (IS_SAME(UPPER_NAME, DWarningButton)) { \
|
|
property = R"(<property name="text"><string>warning</string></property>)"; \
|
|
} \
|
|
return QStringLiteral(" \
|
|
<ui language=\"c++\" displayname=\"" # UPPER_NAME "\"> \
|
|
<widget class=\"Dtk::Widget::" # UPPER_NAME "\" name=\"Dtk::Widget::" # UPPER_NAME "\"> \
|
|
<property name=\"geometry\"> \
|
|
<rect> \
|
|
<x>0</x> \
|
|
<y>0</y> \
|
|
<width>%1</width> \
|
|
<height>%2</height> \
|
|
</rect> \
|
|
</property> \
|
|
%3 \
|
|
</widget> \
|
|
</ui>").arg(WIDTH).arg(HEIGHT).arg(property); \
|
|
} \
|
|
\
|
|
private: \
|
|
bool m_initialized; \
|
|
char __align[7]; \
|
|
}
|
|
|
|
GENERATE_CUSTOMER_WIDGET(DFrame, 320, 240);
|
|
|
|
GENERATE_CUSTOMER_WIDGET(DArrowLineDrawer, 160, 35);
|
|
GENERATE_CUSTOMER_WIDGET(DButtonBox, 110, 35);
|
|
|
|
GENERATE_CUSTOMER_WIDGET(DCrumbEdit, 200, 92);
|
|
GENERATE_CUSTOMER_WIDGET(DTextEdit, 200, 92); // TODO: 大小固定
|
|
|
|
GENERATE_CUSTOMER_WIDGET(DFloatingButton, 40, 40);
|
|
|
|
GENERATE_CUSTOMER_WIDGET(DPageIndicator, 160, 35);
|
|
|
|
GENERATE_CUSTOMER_WIDGET(DDoubleSpinBox, 200, 40);
|
|
GENERATE_CUSTOMER_WIDGET(DSpinBox, 200, 40);
|
|
|
|
GENERATE_CUSTOMER_WIDGET(DFileChooserEdit, 200, 40);
|
|
GENERATE_CUSTOMER_WIDGET(DKeySequenceEdit, 200, 40);
|
|
GENERATE_CUSTOMER_WIDGET(DIpv4LineEdit, 210, 35);
|
|
|
|
GENERATE_CUSTOMER_WIDGET(DLabel, 200, 30);
|
|
GENERATE_CUSTOMER_WIDGET(DLineEdit, 200, 30);
|
|
|
|
GENERATE_CUSTOMER_WIDGET(DProgressBar, 200, 30);
|
|
GENERATE_CUSTOMER_WIDGET(DColoredProgressBar, 200, 30);
|
|
|
|
GENERATE_CUSTOMER_WIDGET(DPasswordEdit, 200, 40);
|
|
GENERATE_CUSTOMER_WIDGET(DTabBar, 40, 40);
|
|
GENERATE_CUSTOMER_WIDGET(DWaterProgress, 100, 100); // TODO: 大小被写死了: 100*100
|
|
GENERATE_CUSTOMER_WIDGET(DSearchComboBox, 200, 40);
|
|
GENERATE_CUSTOMER_WIDGET(DSpinner, 40, 40);
|
|
GENERATE_CUSTOMER_WIDGET(DToolButton, 40, 40);
|
|
GENERATE_CUSTOMER_WIDGET(DSuggestButton, 100, 40);
|
|
GENERATE_CUSTOMER_WIDGET(DWarningButton, 100, 40);
|
|
GENERATE_CUSTOMER_WIDGET(DSwitchButton, 75, 32);
|
|
GENERATE_CUSTOMER_WIDGET(DSearchEdit, 200, 40);
|
|
|
|
//GENERATE_CUSTOMER_WIDGET(DShadowLine, 200, 40); // 看不到效果
|
|
//GENERATE_CUSTOMER_WIDGET(DSegmentedControl, 200, 40);
|
|
//GENERATE_CUSTOMER_WIDGET(DSegmentedHighlight, 200, 40);
|
|
|
|
#endif // DCUSTOMERMACROWIDGET_H
|