dde-control-center
Deepin Control Center
载入中...
搜索中...
未找到
itemmodule.h
1//SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
2//
3//SPDX-License-Identifier: GPL-3.0-or-later
4#ifndef ITEMMODULE_H
5#define ITEMMODULE_H
6#include "interface/moduleobject.h"
7
8namespace DCC_NAMESPACE {
9class ItemModulePrivate;
11{
12 Q_OBJECT
13public:
14 explicit ItemModule(QObject *parent = nullptr);
15 ItemModule(const QString &name, const QString &displayName, bool isTitle = true);
16
17 template<typename FunT>
18 ItemModule(const QString &name, const QString &displayName, FunT callback, bool leftVisible = true)
19 : ItemModule(name, displayName, false)
20 {
21 setLeftVisible(leftVisible);
22 setRightWidget(callback);
23 }
24
25 template<class classT, class WidgetT>
26 ItemModule(const QString &name, const QString &displayName, classT *receiver, WidgetT *(classT::*callback)(ModuleObject *), bool leftVisible = true)
27 : ItemModule(name, displayName, false)
28 {
29 setLeftVisible(leftVisible);
30 setRightWidget(receiver, callback);
31 }
32
33 template<class classT, class WidgetT>
34 ItemModule(const QString &name, const QString &displayName, classT *receiver, WidgetT *(classT::*callback)(), bool leftVisible = true)
35 : ItemModule(name, displayName, false)
36 {
37 setLeftVisible(leftVisible);
38 setRightWidget(receiver, callback);
39 }
40
41 ~ItemModule() override;
42
43 void setTitleItem(bool isTitle);
44 void setBackground(bool has);
45 void setWordWrap(bool on);
46 bool wordWrap() const;
47 void setLeftVisible(bool visible);
48 bool clickable() const;
49 void setClickable(const bool clickable);
50
51 template<typename FunT>
52 void setRightWidget(FunT callback)
53 {
54 auto fun = [](FunT callback, ModuleObject *module) {
55 return (callback)(module);
56 };
57 setCallback(std::bind(fun, callback, this));
58 }
59
60 template<class classT, class WidgetT>
61 void setRightWidget(classT *receiver, WidgetT *(classT::*callback)(ModuleObject *))
62 {
63 auto fun = [](classT *receiver, WidgetT *(classT::*callback)(ModuleObject *), ModuleObject *module) {
64 return (receiver->*callback)(module);
65 };
66 setCallback(std::bind(fun, receiver, callback, this));
67 }
68
69 template<class classT, class WidgetT>
70 void setRightWidget(classT *receiver, WidgetT *(classT::*callback)())
71 {
72 auto fun = [](classT *receiver, WidgetT *(classT::*callback)()) {
73 return (receiver->*callback)();
74 };
75 setCallback(std::bind(fun, receiver, callback));
76 }
77
78 QWidget *page() override;
79 inline DCC_MODULE_TYPE getClassID() const override { return ITEM; }
80
81Q_SIGNALS:
82 void clicked(QWidget *widget);
83
84private:
85 void setCallback(std::function<QWidget *()> callback);
86
87 DCC_DECLARE_PRIVATE(ItemModule)
88};
89}
90#endif // ITEMMODULE_H
Definition itemmodule.h:11
QWidget * page() override
每次被调均需new新的QWidget
ModuleObject作为规范每个Module的接口,每个Module必须提供其基本的信息
Definition moduleobject.h:66