Codebase list dtkwidget / e518484
New upstream version 5.2.0 Arun Kumar Pariyar 3 years ago
837 changed file(s) with 23265 addition(s) and 21973 deletion(s). Raw diff Collapse all Expand all
0 include:
1 - remote: 'https://gitlab.deepin.io/dev-tools/letmeci/raw/master/gitlab-ci/dde.yml'
2 variables:
3 CPPCHECK: "true"
4 CODESPELL: "true"
5
0 dtkwidget (5.0.0) unstable; urgency=medium
1
2 * Release 5.0.0
3
4 -- Deepin Packages Builder <packages@deepin.com> Tue, 03 Sep 2019 10:50:03 +0800
5
06 dtkwidget (2.0.7.2) unstable; urgency=medium
17
28 * Release 2.0.7.2
77 libmtdev-dev, qtbase5-private-dev, libegl1-mesa-dev, libudev-dev,
88 libfontconfig1-dev, libfreetype6-dev, libglib2.0-dev, libxrender-dev,
99 libdtkcore-dev, libgsettings-qt-dev, librsvg2-dev, libdframeworkdbus-dev (>> 1.0.0),
10 libqt5svg5-dev, libxi-dev
10 libqt5svg5-dev, libxi-dev, libdtkgui-dev
1111 Standards-Version: 3.9.8
1212
13 Package: libdtkwidget2
13 Package: libdtkwidget5
1414 Architecture: any
1515 Depends: ${shlibs:Depends}, ${misc:Depends}, libdframeworkdbus2
1616 Multi-Arch: same
1919 .
2020 This package contains the shared libraries.
2121
22 Package: libdtkwidget-bin
22 Package: libdtkwidget5-bin
2323 Architecture: any
2424 Depends: ${shlibs:Depends}, ${misc:Depends},
25 libdtkwidget2( =${binary:Version}),
25 libdtkwidget5( =${binary:Version}),
2626 qtmultimedia5-dev, libqt5x11extras5-dev, libdtkcore-dev, libqt5svg5-dev
2727 Description: Deepin graphical user interface library utilities
2828 DtkWidget is Deepin graphical user interface for deepin desktop development.
3333 Package: libdtkwidget-dev
3434 Architecture: any
3535 Depends: ${shlibs:Depends}, ${misc:Depends},
36 libdtkwidget2( =${binary:Version}),
37 qtmultimedia5-dev, libqt5x11extras5-dev, libdtkcore-dev, libqt5svg5-dev
36 libdtkwidget5( =${binary:Version}),
37 qtmultimedia5-dev, libqt5x11extras5-dev, libdtkcore-dev, libqt5svg5-dev,
38 libdtkgui-dev
3839 Description: Deepin graphical user interface library
3940 DtkWidget is Deepin graphical user interface for deepin desktop development.
4041 .
+0
-1
debian/libdtkwidget-bin.install less more
0 usr/lib/*/*/DWidget/bin/*
0 usr/lib/*/lib*.so
0 usr/lib/*/libdtkwidget.so
11 usr/include
22 usr/lib/*/pkgconfig/*.pc
33 usr/lib/*/cmake/*/*.cmake
+0
-2
debian/libdtkwidget2.install less more
0 usr/lib/*/lib*.so.*
1 usr/share/*/DWidget/translations/*
+0
-4625
debian/libdtkwidget2.symbols less more
0 # SymbolsHelper-Confirmed: 2.0.11 amd64
1 libdtkwidget.so.2 libdtkwidget2 #MINVER#
2 _Z20qInitResources_iconsv@Base 2.0.11
3 _Z23qCleanupResources_iconsv@Base 2.0.11
4 (optional=templinst)_Z27qRegisterNormalizedMetaTypeI5QListI12QPainterPathEEiRK10QByteArrayPT_N9QtPrivate21MetaTypeDefinedHelperIS6_Xaasr12QMetaTypeId2IS6_E7DefinedntsrSB_9IsBuiltInEE11DefinedTypeE@Base 2.0.11
5 (optional=templinst)_Z27qRegisterNormalizedMetaTypeI5QListI5QIconEEiRK10QByteArrayPT_N9QtPrivate21MetaTypeDefinedHelperIS6_Xaasr12QMetaTypeId2IS6_E7DefinedntsrSB_9IsBuiltInEE11DefinedTypeE@Base 2.0.11
6 (optional=templinst)_Z27qRegisterNormalizedMetaTypeI5QListI7QRegExpEEiRK10QByteArrayPT_N9QtPrivate21MetaTypeDefinedHelperIS6_Xaasr12QMetaTypeId2IS6_E7DefinedntsrSB_9IsBuiltInEE11DefinedTypeE@Base 2.0.11
7 (optional=templinst)_Z27qRegisterNormalizedMetaTypeI5QListIP7QWidgetEEiRK10QByteArrayPT_N9QtPrivate21MetaTypeDefinedHelperIS7_Xaasr12QMetaTypeId2IS7_E7DefinedntsrSC_9IsBuiltInEE11DefinedTypeE@Base 2.0.11
8 (optional=templinst)_Z27qRegisterNormalizedMetaTypeI5QListIPN3Dtk6Widget15DSimpleListItemEEEiRK10QByteArrayPT_N9QtPrivate21MetaTypeDefinedHelperIS9_Xaasr12QMetaTypeId2IS9_E7DefinedntsrSE_9IsBuiltInEE11DefinedTypeE@Base 2.0.11
9 (optional=templinst)_Z27qRegisterNormalizedMetaTypeI5QListIbEEiRK10QByteArrayPT_N9QtPrivate21MetaTypeDefinedHelperIS5_Xaasr12QMetaTypeId2IS5_E7DefinedntsrSA_9IsBuiltInEE11DefinedTypeE@Base 2.0.11
10 (optional=templinst)_Z27qRegisterNormalizedMetaTypeI7QVectorIjEEiRK10QByteArrayPT_N9QtPrivate21MetaTypeDefinedHelperIS5_Xaasr12QMetaTypeId2IS5_E7DefinedntsrSA_9IsBuiltInEE11DefinedTypeE@Base 2.0.11
11 _Z29qInitResources_dui_theme_darkv@Base 2.0.11
12 _Z30qInitResources_dui_theme_lightv@Base 2.0.11
13 _Z32qCleanupResources_dui_theme_darkv@Base 2.0.11
14 _Z33qCleanupResources_dui_theme_lightv@Base 2.0.11
15 _ZGVZN9QtPrivate19ValueTypeIsMetaTypeI5QListI12QPainterPathELb1EE17registerConverterEiE1f@Base 2.0.11
16 _ZGVZN9QtPrivate19ValueTypeIsMetaTypeI5QListI5QIconELb1EE17registerConverterEiE1f@Base 2.0.11
17 _ZGVZN9QtPrivate19ValueTypeIsMetaTypeI5QListI7QRegExpELb1EE17registerConverterEiE1f@Base 2.0.11
18 _ZGVZN9QtPrivate19ValueTypeIsMetaTypeI5QListIP7QWidgetELb1EE17registerConverterEiE1f@Base 2.0.11
19 _ZGVZN9QtPrivate19ValueTypeIsMetaTypeI5QListIPN3Dtk6Widget15DSimpleListItemEELb1EE17registerConverterEiE1f@Base 2.0.11
20 _ZGVZN9QtPrivate19ValueTypeIsMetaTypeI5QListIbELb1EE17registerConverterEiE1f@Base 2.0.11
21 _ZGVZN9QtPrivate19ValueTypeIsMetaTypeI7QVectorIjELb1EE17registerConverterEiE1f@Base 2.0.11
22 _ZN10QByteArrayD1Ev@Base 2.0.11
23 _ZN10QByteArrayD2Ev@Base 2.0.11
24 (optional=templinst)_ZN10QMultiHashIP7QWidgetPKN3Dtk6Widget17DBlurEffectWidgetEED1Ev@Base 2.0.11
25 (optional=templinst)_ZN10QMultiHashIP7QWidgetPKN3Dtk6Widget17DBlurEffectWidgetEED2Ev@Base 2.0.11
26 _ZN11ButtonGroup10setButtonsERK11QStringList@Base 2.0.11
27 _ZN11ButtonGroup11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
28 _ZN11ButtonGroup11qt_metacastEPKc@Base 2.0.11
29 _ZN11ButtonGroup13buttonCheckedEi@Base 2.0.11
30 _ZN11ButtonGroup16setCheckedButtonEi@Base 2.0.11
31 _ZN11ButtonGroup16staticMetaObjectE@Base 2.0.11
32 _ZN11ButtonGroupC1EP7QWidget@Base 2.0.11
33 _ZN11ButtonGroupC2EP7QWidget@Base 2.0.11
34 _ZN11ButtonGroupD0Ev@Base 2.0.11
35 _ZN11ButtonGroupD1Ev@Base 2.0.11
36 _ZN11ButtonGroupD2Ev@Base 2.0.11
37 _ZN11DDBusCallerD1Ev@Base 2.0.11
38 _ZN11DDBusCallerD2Ev@Base 2.0.11
39 _ZN11QStringListD1Ev@Base 2.0.11
40 _ZN11QStringListD2Ev@Base 2.0.11
41 _ZN12ContentTitle11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
42 _ZN12ContentTitle11qt_metacastEPKc@Base 2.0.11
43 _ZN12ContentTitle16staticMetaObjectE@Base 2.0.11
44 _ZN12ContentTitle8setTitleERK7QString@Base 2.0.11
45 _ZN12ContentTitleC1EP7QWidget@Base 2.0.11
46 _ZN12ContentTitleC2EP7QWidget@Base 2.0.11
47 _ZN12ContentTitleD0Ev@Base 2.0.11
48 _ZN12ContentTitleD1Ev@Base 2.0.11
49 _ZN12ContentTitleD2Ev@Base 2.0.11
50 _ZN12DThemeHelper10themeToQssE7QString@Base 2.0.11
51 _ZN12DThemeHelper11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
52 _ZN12DThemeHelper11qt_metacastEPKc@Base 2.0.11
53 _ZN12DThemeHelper16staticMetaObjectE@Base 2.0.11
54 _ZN12DThemeHelper17trimThemeContentsE7QString@Base 2.0.11
55 _ZN12DThemeHelperC1EP7QObject@Base 2.0.11
56 _ZN12DThemeHelperC2EP7QObject@Base 2.0.11
57 _ZN12DThemeHelperD0Ev@Base 2.0.11
58 _ZN12DThemeHelperD1Ev@Base 2.0.11
59 _ZN12DThemeHelperD2Ev@Base 2.0.11
60 (optional=templinst)_ZN12QWeakPointerI7QObjectED1Ev@Base 2.0.11
61 (optional=templinst)_ZN12QWeakPointerI7QObjectED2Ev@Base 2.0.11
62 (optional=templinst)_ZN12QtConcurrent15RunFunctionTaskIbE3runEv@Base 2.0.11
63 (optional=templinst)_ZN12QtConcurrent15RunFunctionTaskIvE3runEv@Base 2.0.11
64 (optional=templinst)_ZN12QtConcurrent19RunFunctionTaskBaseIbE3runEv@Base 2.0.11
65 (optional=templinst)_ZN12QtConcurrent19RunFunctionTaskBaseIvE3runEv@Base 2.0.11
66 (optional=templinst)_ZN12QtConcurrent32StoredMemberFunctionPointerCall0Ib16QSystemSemaphoreE10runFunctorEv@Base 2.0.11
67 (optional=templinst)_ZN12QtConcurrent32StoredMemberFunctionPointerCall0Ib16QSystemSemaphoreED0Ev@Base 2.0.11
68 (optional=templinst)_ZN12QtConcurrent32StoredMemberFunctionPointerCall0Ib16QSystemSemaphoreED1Ev@Base 2.0.11
69 (optional=templinst)_ZN12QtConcurrent32StoredMemberFunctionPointerCall0Ib16QSystemSemaphoreED2Ev@Base 2.0.11
70 _ZN12ShortcutEdit10paintEventEP11QPaintEvent@Base 2.0.11
71 _ZN12ShortcutEdit11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
72 _ZN12ShortcutEdit11qt_metacastEPKc@Base 2.0.11
73 _ZN12ShortcutEdit11setShortCutE6QFlagsIN2Qt16KeyboardModifierEENS1_3KeyE@Base 2.0.11
74 _ZN12ShortcutEdit11setShortCutERK7QString@Base 2.0.11
75 _ZN12ShortcutEdit12focusInEventEP11QFocusEvent@Base 2.0.11
76 _ZN12ShortcutEdit13focusOutEventEP11QFocusEvent@Base 2.0.11
77 _ZN12ShortcutEdit13keyPressEventEP9QKeyEvent@Base 2.0.11
78 _ZN12ShortcutEdit15shortcutChangedE6QFlagsIN2Qt16KeyboardModifierEENS1_3KeyE@Base 2.0.11
79 _ZN12ShortcutEdit16staticMetaObjectE@Base 2.0.11
80 _ZN12ShortcutEdit21mouseDoubleClickEventEP11QMouseEvent@Base 2.0.11
81 _ZN12ShortcutEdit21notifyShortcutChangedE6QFlagsIN2Qt16KeyboardModifierEENS1_3KeyE@Base 2.0.11
82 _ZN12ShortcutEdit21shortcutStringChangedERK7QString@Base 2.0.11
83 _ZN12ShortcutEditC1EP7QWidget@Base 2.0.11
84 _ZN12ShortcutEditC2EP7QWidget@Base 2.0.11
85 _ZN12ShortcutEditD0Ev@Base 2.0.11
86 _ZN12ShortcutEditD1Ev@Base 2.0.11
87 _ZN12ShortcutEditD2Ev@Base 2.0.11
88 _ZN13DBusInterface11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
89 _ZN13DBusInterface11qt_metacastEPKc@Base 2.0.11
90 _ZN13DBusInterface12NameAcquiredERK7QString@Base 2.0.11
91 _ZN13DBusInterface16NameOwnerChangedERK7QStringS2_S2_@Base 2.0.11
92 _ZN13DBusInterface16staticMetaObjectE@Base 2.0.11
93 _ZN13DBusInterface8NameLostERK7QString@Base 2.0.11
94 _ZN13DBusInterfaceC1ERK7QStringS2_RK15QDBusConnectionP7QObject@Base 2.0.11
95 _ZN13DBusInterfaceC2ERK7QStringS2_RK15QDBusConnectionP7QObject@Base 2.0.11
96 _ZN13DBusInterfaceD0Ev@Base 2.0.11
97 _ZN13DBusInterfaceD1Ev@Base 2.0.11
98 _ZN13DBusInterfaceD2Ev@Base 2.0.11
99 _ZN13DMPRISMonitor11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
100 _ZN13DMPRISMonitor11qt_metacastEPKc@Base 2.0.11
101 _ZN13DMPRISMonitor16staticMetaObjectE@Base 2.0.11
102 _ZN13DMPRISMonitor18onNameOwnerChangedERK7QStringS2_S2_@Base 2.0.11
103 _ZN13DMPRISMonitor4initEv@Base 2.0.11
104 _ZN13DMPRISMonitorC1EP7QObject@Base 2.0.11
105 _ZN13DMPRISMonitorC2EP7QObject@Base 2.0.11
106 _ZN13DMPRISMonitorD0Ev@Base 2.0.11
107 _ZN13DMPRISMonitorD1Ev@Base 2.0.11
108 _ZN13DMPRISMonitorD2Ev@Base 2.0.11
109 _ZN14QTabBarPrivate3TabD1Ev@Base 2.0.11
110 _ZN14QTabBarPrivate3TabD2Ev@Base 2.0.11
111 _ZN15QStyleOptionTabD1Ev@Base 2.0.11
112 _ZN15QStyleOptionTabD2Ev@Base 2.0.11
113 (optional=templinst)_ZN16QFutureInterfaceIbED0Ev@Base 2.0.11
114 (optional=templinst)_ZN16QFutureInterfaceIbED1Ev@Base 2.0.11
115 (optional=templinst)_ZN16QFutureInterfaceIbED2Ev@Base 2.0.11
116 (optional=templinst)_ZN16QFutureInterfaceIvED0Ev@Base 2.0.11
117 (optional=templinst)_ZN16QFutureInterfaceIvED1Ev@Base 2.0.11
118 (optional=templinst)_ZN16QFutureInterfaceIvED2Ev@Base 2.0.11
119 (optional=templinst)_ZN17QtMetaTypePrivate13IteratorOwnerIPKjE5equalEPKPvS6_@Base 2.0.11
120 (optional=templinst)_ZN17QtMetaTypePrivate13IteratorOwnerIPKjE6assignEPPvPKS4_@Base 2.0.11
121 (optional=templinst)_ZN17QtMetaTypePrivate13IteratorOwnerIPKjE7advanceEPPvi@Base 2.0.11
122 (optional=templinst)_ZN17QtMetaTypePrivate13IteratorOwnerIPKjE7destroyEPPv@Base 2.0.11
123 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN4QMapI7QString8QVariantE14const_iteratorEE5equalEPKPvS9_@Base 2.0.11
124 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN4QMapI7QString8QVariantE14const_iteratorEE6assignEPPvPKS7_@Base 2.0.11
125 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN4QMapI7QString8QVariantE14const_iteratorEE7destroyEPPv@Base 2.0.11
126 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QHashI7QString8QVariantE14const_iteratorEE5equalEPKPvS9_@Base 2.0.11
127 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QHashI7QString8QVariantE14const_iteratorEE6assignEPPvPKS7_@Base 2.0.11
128 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QHashI7QString8QVariantE14const_iteratorEE7destroyEPPv@Base 2.0.11
129 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListI12QPainterPathE14const_iteratorEE5equalEPKPvS8_@Base 2.0.11
130 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListI12QPainterPathE14const_iteratorEE6assignEPPvPKS6_@Base 2.0.11
131 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListI12QPainterPathE14const_iteratorEE7advanceEPPvi@Base 2.0.11
132 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListI12QPainterPathE14const_iteratorEE7destroyEPPv@Base 2.0.11
133 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListI5QIconE14const_iteratorEE5equalEPKPvS8_@Base 2.0.11
134 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListI5QIconE14const_iteratorEE6assignEPPvPKS6_@Base 2.0.11
135 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListI5QIconE14const_iteratorEE7advanceEPPvi@Base 2.0.11
136 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListI5QIconE14const_iteratorEE7destroyEPPv@Base 2.0.11
137 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListI7QRegExpE14const_iteratorEE5equalEPKPvS8_@Base 2.0.11
138 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListI7QRegExpE14const_iteratorEE6assignEPPvPKS6_@Base 2.0.11
139 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListI7QRegExpE14const_iteratorEE7advanceEPPvi@Base 2.0.11
140 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListI7QRegExpE14const_iteratorEE7destroyEPPv@Base 2.0.11
141 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListIP7QWidgetE14const_iteratorEE5equalEPKPvS9_@Base 2.0.11
142 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListIP7QWidgetE14const_iteratorEE6assignEPPvPKS7_@Base 2.0.11
143 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListIP7QWidgetE14const_iteratorEE7advanceEPPvi@Base 2.0.11
144 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListIP7QWidgetE14const_iteratorEE7destroyEPPv@Base 2.0.11
145 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListIPN3Dtk6Widget15DSimpleListItemEE14const_iteratorEE5equalEPKPvSB_@Base 2.0.11
146 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListIPN3Dtk6Widget15DSimpleListItemEE14const_iteratorEE6assignEPPvPKS9_@Base 2.0.11
147 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListIPN3Dtk6Widget15DSimpleListItemEE14const_iteratorEE7advanceEPPvi@Base 2.0.11
148 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListIPN3Dtk6Widget15DSimpleListItemEE14const_iteratorEE7destroyEPPv@Base 2.0.11
149 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListIbE14const_iteratorEE5equalEPKPvS7_@Base 2.0.11
150 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListIbE14const_iteratorEE6assignEPPvPKS5_@Base 2.0.11
151 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListIbE14const_iteratorEE7advanceEPPvi@Base 2.0.11
152 (optional=templinst)_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListIbE14const_iteratorEE7destroyEPPv@Base 2.0.11
153 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI12QDBusMessageLb1EE8DestructEPv@Base 2.0.11
154 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI12QDBusMessageLb1EE9ConstructEPvPKv@Base 2.0.11
155 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI12QPainterPathLb1EE8DestructEPv@Base 2.0.11
156 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI12QPainterPathLb1EE9ConstructEPvPKv@Base 2.0.11
157 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI13QDBusArgumentLb1EE8DestructEPv@Base 2.0.11
158 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI13QDBusArgumentLb1EE9ConstructEPvPKv@Base 2.0.11
159 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI15QDBusObjectPathLb1EE8DestructEPv@Base 2.0.11
160 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI15QDBusObjectPathLb1EE9ConstructEPvPKv@Base 2.0.11
161 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI5QListI12QPainterPathELb1EE8DestructEPv@Base 2.0.11
162 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI5QListI12QPainterPathELb1EE9ConstructEPvPKv@Base 2.0.11
163 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI5QListI5QIconELb1EE8DestructEPv@Base 2.0.11
164 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI5QListI5QIconELb1EE9ConstructEPvPKv@Base 2.0.11
165 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI5QListI7QRegExpELb1EE8DestructEPv@Base 2.0.11
166 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI5QListI7QRegExpELb1EE9ConstructEPvPKv@Base 2.0.11
167 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI5QListIP7QWidgetELb1EE8DestructEPv@Base 2.0.11
168 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI5QListIP7QWidgetELb1EE9ConstructEPvPKv@Base 2.0.11
169 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI5QListIPN3Dtk6Widget15DSimpleListItemEELb1EE8DestructEPv@Base 2.0.11
170 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI5QListIPN3Dtk6Widget15DSimpleListItemEELb1EE9ConstructEPvPKv@Base 2.0.11
171 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI5QListIbELb1EE8DestructEPv@Base 2.0.11
172 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI5QListIbELb1EE9ConstructEPvPKv@Base 2.0.11
173 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI6QFlagsIN2Qt16KeyboardModifierEELb1EE8DestructEPv@Base 2.0.11
174 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI6QFlagsIN2Qt16KeyboardModifierEELb1EE9ConstructEPvPKv@Base 2.0.11
175 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI7QVectorIjELb1EE8DestructEPv@Base 2.0.11
176 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI7QVectorIjELb1EE9ConstructEPvPKv@Base 2.0.11
177 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI8QMarginsLb1EE8DestructEPv@Base 2.0.11
178 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI8QMarginsLb1EE9ConstructEPvPKv@Base 2.0.11
179 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIN18QAbstractAnimation5StateELb1EE8DestructEPv@Base 2.0.11
180 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIN18QAbstractAnimation5StateELb1EE9ConstructEPvPKv@Base 2.0.11
181 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIN2Qt10DropActionELb1EE8DestructEPv@Base 2.0.11
182 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIN2Qt10DropActionELb1EE9ConstructEPvPKv@Base 2.0.11
183 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIN2Qt3KeyELb1EE8DestructEPv@Base 2.0.11
184 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIN2Qt3KeyELb1EE9ConstructEPvPKv@Base 2.0.11
185 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperINS_23QSequentialIterableImplELb1EE8DestructEPv@Base 2.0.11
186 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperINS_23QSequentialIterableImplELb1EE9ConstructEPvPKv@Base 2.0.11
187 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperINS_24QAssociativeIterableImplELb1EE8DestructEPv@Base 2.0.11
188 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperINS_24QAssociativeIterableImplELb1EE9ConstructEPvPKv@Base 2.0.11
189 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIP7QWidgetLb1EE8DestructEPv@Base 2.0.11
190 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIP7QWidgetLb1EE9ConstructEPvPKv@Base 2.0.11
191 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIP7QWindowLb1EE8DestructEPv@Base 2.0.11
192 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIP7QWindowLb1EE9ConstructEPvPKv@Base 2.0.11
193 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIPN3Dtk4Core9DSettingsELb1EE8DestructEPv@Base 2.0.11
194 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIPN3Dtk4Core9DSettingsELb1EE9ConstructEPvPKv@Base 2.0.11
195 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIPN3Dtk6Widget12DAnchorsBaseELb1EE8DestructEPv@Base 2.0.11
196 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIPN3Dtk6Widget12DAnchorsBaseELb1EE9ConstructEPvPKv@Base 2.0.11
197 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIPN3Dtk6Widget15DSimpleListItemELb1EE8DestructEPv@Base 2.0.11
198 (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIPN3Dtk6Widget15DSimpleListItemELb1EE9ConstructEPvPKv@Base 2.0.11
199 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl13moveToEndImplI5QListI12QPainterPathEEEvPKvPPv@Base 2.0.11
200 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl13moveToEndImplI5QListI5QIconEEEvPKvPPv@Base 2.0.11
201 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl13moveToEndImplI5QListI7QRegExpEEEvPKvPPv@Base 2.0.11
202 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl13moveToEndImplI5QListIP7QWidgetEEEvPKvPPv@Base 2.0.11
203 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl13moveToEndImplI5QListIPN3Dtk6Widget15DSimpleListItemEEEEvPKvPPv@Base 2.0.11
204 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl13moveToEndImplI5QListIbEEEvPKvPPv@Base 2.0.11
205 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl13moveToEndImplI7QVectorIjEEEvPKvPPv@Base 2.0.11
206 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl15moveToBeginImplI5QListI12QPainterPathEEEvPKvPPv@Base 2.0.11
207 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl15moveToBeginImplI5QListI5QIconEEEvPKvPPv@Base 2.0.11
208 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl15moveToBeginImplI5QListI7QRegExpEEEvPKvPPv@Base 2.0.11
209 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl15moveToBeginImplI5QListIP7QWidgetEEEvPKvPPv@Base 2.0.11
210 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl15moveToBeginImplI5QListIPN3Dtk6Widget15DSimpleListItemEEEEvPKvPPv@Base 2.0.11
211 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl15moveToBeginImplI5QListIbEEEvPKvPPv@Base 2.0.11
212 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl15moveToBeginImplI7QVectorIjEEEvPKvPPv@Base 2.0.11
213 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl6atImplI5QListI12QPainterPathEEEPKvS6_i@Base 2.0.11
214 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl6atImplI5QListI5QIconEEEPKvS6_i@Base 2.0.11
215 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl6atImplI5QListI7QRegExpEEEPKvS6_i@Base 2.0.11
216 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl6atImplI5QListIP7QWidgetEEEPKvS7_i@Base 2.0.11
217 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl6atImplI5QListIPN3Dtk6Widget15DSimpleListItemEEEEPKvS9_i@Base 2.0.11
218 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl6atImplI5QListIbEEEPKvS5_i@Base 2.0.11
219 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl6atImplI7QVectorIjEEEPKvS5_i@Base 2.0.11
220 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl7getImplI5QListI12QPainterPathEEENS_11VariantDataEPKPvij@Base 2.0.11
221 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl7getImplI5QListI5QIconEEENS_11VariantDataEPKPvij@Base 2.0.11
222 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl7getImplI5QListI7QRegExpEEENS_11VariantDataEPKPvij@Base 2.0.11
223 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl7getImplI5QListIP7QWidgetEEENS_11VariantDataEPKPvij@Base 2.0.11
224 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl7getImplI5QListIPN3Dtk6Widget15DSimpleListItemEEEENS_11VariantDataEPKPvij@Base 2.0.11
225 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl7getImplI5QListIbEEENS_11VariantDataEPKPvij@Base 2.0.11
226 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl7getImplI7QVectorIjEEENS_11VariantDataEPKPvij@Base 2.0.11
227 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl8sizeImplI5QListI12QPainterPathEEEiPKv@Base 2.0.11
228 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl8sizeImplI5QListI5QIconEEEiPKv@Base 2.0.11
229 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl8sizeImplI5QListI7QRegExpEEEiPKv@Base 2.0.11
230 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl8sizeImplI5QListIP7QWidgetEEEiPKv@Base 2.0.11
231 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl8sizeImplI5QListIPN3Dtk6Widget15DSimpleListItemEEEEiPKv@Base 2.0.11
232 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl8sizeImplI5QListIbEEEiPKv@Base 2.0.11
233 (optional=templinst)_ZN17QtMetaTypePrivate23QSequentialIterableImpl8sizeImplI7QVectorIjEEEiPKv@Base 2.0.11
234 (optional=templinst)_ZN17QtMetaTypePrivate24QAssociativeIterableImpl10getKeyImplI4QMapI7QString8QVariantEEENS_11VariantDataEPKPvij@Base 2.0.11
235 (optional=templinst)_ZN17QtMetaTypePrivate24QAssociativeIterableImpl10getKeyImplI5QHashI7QString8QVariantEEENS_11VariantDataEPKPvij@Base 2.0.11
236 (optional=templinst)_ZN17QtMetaTypePrivate24QAssociativeIterableImpl11advanceImplI4QMapI7QString8QVariantEEEvPPvi@Base 2.0.11
237 (optional=templinst)_ZN17QtMetaTypePrivate24QAssociativeIterableImpl11advanceImplI5QHashI7QString8QVariantEEEvPPvi@Base 2.0.11
238 (optional=templinst)_ZN17QtMetaTypePrivate24QAssociativeIterableImpl12getValueImplI4QMapI7QString8QVariantEEENS_11VariantDataEPKPvij@Base 2.0.11
239 (optional=templinst)_ZN17QtMetaTypePrivate24QAssociativeIterableImpl12getValueImplI5QHashI7QString8QVariantEEENS_11VariantDataEPKPvij@Base 2.0.11
240 (optional=templinst)_ZN17QtMetaTypePrivate24QAssociativeIterableImpl7endImplI4QMapI7QString8QVariantEEEvPKvPPv@Base 2.0.11
241 (optional=templinst)_ZN17QtMetaTypePrivate24QAssociativeIterableImpl7endImplI5QHashI7QString8QVariantEEEvPKvPPv@Base 2.0.11
242 (optional=templinst)_ZN17QtMetaTypePrivate24QAssociativeIterableImpl8findImplI4QMapI7QString8QVariantEEEvPKvS7_PPv@Base 2.0.11
243 (optional=templinst)_ZN17QtMetaTypePrivate24QAssociativeIterableImpl8findImplI5QHashI7QString8QVariantEEEvPKvS7_PPv@Base 2.0.11
244 (optional=templinst)_ZN17QtMetaTypePrivate24QAssociativeIterableImpl8sizeImplI4QMapI7QString8QVariantEEEiPKv@Base 2.0.11
245 (optional=templinst)_ZN17QtMetaTypePrivate24QAssociativeIterableImpl8sizeImplI5QHashI7QString8QVariantEEEiPKv@Base 2.0.11
246 (optional=templinst)_ZN17QtMetaTypePrivate24QAssociativeIterableImpl9beginImplI4QMapI7QString8QVariantEEEvPKvPPv@Base 2.0.11
247 (optional=templinst)_ZN17QtMetaTypePrivate24QAssociativeIterableImpl9beginImplI5QHashI7QString8QVariantEEEvPKvPPv@Base 2.0.11
248 _ZN18NavigationDelegate11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
249 _ZN18NavigationDelegate11qt_metacastEPKc@Base 2.0.11
250 _ZN18NavigationDelegate16staticMetaObjectE@Base 2.0.11
251 _ZN18NavigationDelegateC1EP7QWidget@Base 2.0.11
252 _ZN18NavigationDelegateC2EP7QWidget@Base 2.0.11
253 _ZN18NavigationDelegateD0Ev@Base 2.0.11
254 _ZN18NavigationDelegateD1Ev@Base 2.0.11
255 _ZN18NavigationDelegateD2Ev@Base 2.0.11
256 _ZN18QStyleOptionButtonD1Ev@Base 2.0.11
257 _ZN18QStyleOptionButtonD2Ev@Base 2.0.11
258 (optional=templinst)_ZN21QScopedPointerDeleterIN3Dtk6Widget14ContentPrivateEE7cleanupEPS2_@Base 2.0.11
259 _ZN22QStyleOptionToolButtonD1Ev@Base 2.0.11
260 _ZN22QStyleOptionToolButtonD2Ev@Base 2.0.11
261 _ZN26StartupNotificationMonitor10appStartupE7QString@Base 2.0.11
262 _ZN26StartupNotificationMonitor11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
263 _ZN26StartupNotificationMonitor11qt_metacastEPKc@Base 2.0.11
264 _ZN26StartupNotificationMonitor16staticMetaObjectE@Base 2.0.11
265 _ZN26StartupNotificationMonitor17nativeEventFilterERK10QByteArrayPvPl@Base 2.0.11
266 _ZN26StartupNotificationMonitor19appStartupCompletedE7QString@Base 2.0.11
267 _ZN26StartupNotificationMonitor8instanceEv@Base 2.0.11
268 _ZN26StartupNotificationMonitorC1Ev@Base 2.0.11
269 _ZN26StartupNotificationMonitorC2Ev@Base 2.0.11
270 _ZN26StartupNotificationMonitorD0Ev@Base 2.0.11
271 _ZN26StartupNotificationMonitorD1Ev@Base 2.0.11
272 _ZN26StartupNotificationMonitorD2Ev@Base 2.0.11
273 (optional=templinst)_ZN28QExplicitlySharedDataPointerI11QSharedDataED1Ev@Base 2.0.11
274 (optional=templinst)_ZN28QExplicitlySharedDataPointerI11QSharedDataED2Ev@Base 2.0.11
275 _ZN29StartupNotificationMonitorSubD0Ev@Base 2.0.11
276 _ZN29StartupNotificationMonitorSubD1Ev@Base 2.0.11
277 _ZN29StartupNotificationMonitorSubD2Ev@Base 2.0.11
278 _ZN3Dtk6Widget10DBoxWidget10updateSizeERK5QSize@Base 2.0.11
279 _ZN3Dtk6Widget10DBoxWidget11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
280 _ZN3Dtk6Widget10DBoxWidget11qt_metacastEPKc@Base 2.0.11
281 _ZN3Dtk6Widget10DBoxWidget11sizeChangedE5QSize@Base 2.0.11
282 _ZN3Dtk6Widget10DBoxWidget12setDirectionEN10QBoxLayout9DirectionE@Base 2.0.11
283 _ZN3Dtk6Widget10DBoxWidget16directionChangedEN10QBoxLayout9DirectionE@Base 2.0.11
284 _ZN3Dtk6Widget10DBoxWidget16staticMetaObjectE@Base 2.0.11
285 _ZN3Dtk6Widget10DBoxWidget5eventEP6QEvent@Base 2.0.11
286 _ZN3Dtk6Widget10DBoxWidget9addWidgetEP7QWidget@Base 2.0.11
287 _ZN3Dtk6Widget10DBoxWidgetC1EN10QBoxLayout9DirectionEP7QWidget@Base 2.0.11
288 _ZN3Dtk6Widget10DBoxWidgetC2EN10QBoxLayout9DirectionEP7QWidget@Base 2.0.11
289 _ZN3Dtk6Widget10DBoxWidgetD0Ev@Base 2.0.11
290 _ZN3Dtk6Widget10DBoxWidgetD1Ev@Base 2.0.11
291 _ZN3Dtk6Widget10DBoxWidgetD2Ev@Base 2.0.11
292 _ZN3Dtk6Widget10DCrumbEdit10crumbAddedERK7QString@Base 2.0.11
293 _ZN3Dtk6Widget10DCrumbEdit10paintEventEP11QPaintEvent@Base 2.0.11
294 _ZN3Dtk6Widget10DCrumbEdit11appendCrumbERK7QString@Base 2.0.11
295 _ZN3Dtk6Widget10DCrumbEdit11appendCrumbERKNS0_16DCrumbTextFormatE@Base 2.0.11
296 _ZN3Dtk6Widget10DCrumbEdit11insertCrumbERK7QStringi@Base 2.0.11
297 _ZN3Dtk6Widget10DCrumbEdit11insertCrumbERKNS0_16DCrumbTextFormatEi@Base 2.0.11
298 _ZN3Dtk6Widget10DCrumbEdit11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
299 _ZN3Dtk6Widget10DCrumbEdit11qt_metacastEPKc@Base 2.0.11
300 _ZN3Dtk6Widget10DCrumbEdit11setSplitterERK7QString@Base 2.0.11
301 _ZN3Dtk6Widget10DCrumbEdit12crumbRemovedERK7QString@Base 2.0.11
302 _ZN3Dtk6Widget10DCrumbEdit13focusOutEventEP11QFocusEvent@Base 2.0.11
303 _ZN3Dtk6Widget10DCrumbEdit13keyPressEventEP9QKeyEvent@Base 2.0.11
304 _ZN3Dtk6Widget10DCrumbEdit14setCrumbRadiusEi@Base 2.0.11
305 _ZN3Dtk6Widget10DCrumbEdit16crumbListChangedEv@Base 2.0.11
306 _ZN3Dtk6Widget10DCrumbEdit16setCrumbReadOnlyEb@Base 2.0.11
307 _ZN3Dtk6Widget10DCrumbEdit16staticMetaObjectE@Base 2.0.11
308 _ZN3Dtk6Widget10DCrumbEdit18insertFromMimeDataEPK9QMimeData@Base 2.0.11
309 _ZN3Dtk6Widget10DCrumbEdit21mouseDoubleClickEventEP11QMouseEvent@Base 2.0.11
310 _ZN3Dtk6Widget10DCrumbEdit21setDualClickMakeCrumbEb@Base 2.0.11
311 _ZN3Dtk6Widget10DCrumbEditC1EP7QWidget@Base 2.0.11
312 _ZN3Dtk6Widget10DCrumbEditC2EP7QWidget@Base 2.0.11
313 _ZN3Dtk6Widget10DCrumbEditD0Ev@Base 2.0.11
314 _ZN3Dtk6Widget10DCrumbEditD1Ev@Base 2.0.11
315 _ZN3Dtk6Widget10DCrumbEditD2Ev@Base 2.0.11
316 _ZN3Dtk6Widget10DScrollBar10enterEventEP6QEvent@Base 2.0.11
317 _ZN3Dtk6Widget10DScrollBar10leaveEventEP6QEvent@Base 2.0.11
318 _ZN3Dtk6Widget10DScrollBar10paintEventEP11QPaintEvent@Base 2.0.11
319 _ZN3Dtk6Widget10DScrollBar11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
320 _ZN3Dtk6Widget10DScrollBar11qt_metacastEPKc@Base 2.0.11
321 _ZN3Dtk6Widget10DScrollBar11setAutoHideEb@Base 2.0.11
322 _ZN3Dtk6Widget10DScrollBar15autoHideChangedEb@Base 2.0.11
323 _ZN3Dtk6Widget10DScrollBar16staticMetaObjectE@Base 2.0.11
324 _ZN3Dtk6Widget10DScrollBarC1EP7QWidget@Base 2.0.11
325 _ZN3Dtk6Widget10DScrollBarC2EP7QWidget@Base 2.0.11
326 _ZN3Dtk6Widget10DScrollBarD0Ev@Base 2.0.11
327 _ZN3Dtk6Widget10DScrollBarD1Ev@Base 2.0.11
328 _ZN3Dtk6Widget10DScrollBarD2Ev@Base 2.0.11
329 _ZN3Dtk6Widget10LoadSlider10paintEventEP11QPaintEvent@Base 2.0.11
330 _ZN3Dtk6Widget10LoadSlider18setLoadSliderColorERK6QColor@Base 2.0.11
331 _ZN3Dtk6Widget10LoadSliderC1EP7QWidget@Base 2.0.11
332 _ZN3Dtk6Widget10LoadSliderC2EP7QWidget@Base 2.0.11
333 _ZN3Dtk6Widget10LoadSliderD0Ev@Base 2.0.11
334 _ZN3Dtk6Widget10LoadSliderD1Ev@Base 2.0.11
335 _ZN3Dtk6Widget10LoadSliderD2Ev@Base 2.0.11
336 _ZN3Dtk6Widget10Navigation11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
337 _ZN3Dtk6Widget10Navigation11qt_metacastEPKc@Base 2.0.11
338 _ZN3Dtk6Widget10Navigation13onSelectGroupERK7QString@Base 2.0.11
339 _ZN3Dtk6Widget10Navigation13selectedGroupERK7QString@Base 2.0.11
340 _ZN3Dtk6Widget10Navigation14updateSettingsERK10QByteArray8QPointerINS_4Core9DSettingsEE@Base 2.0.11
341 _ZN3Dtk6Widget10Navigation16staticMetaObjectE@Base 2.0.11
342 _ZN3Dtk6Widget10NavigationC1EP7QWidget@Base 2.0.11
343 _ZN3Dtk6Widget10NavigationC2EP7QWidget@Base 2.0.11
344 _ZN3Dtk6Widget10NavigationD0Ev@Base 2.0.11
345 _ZN3Dtk6Widget10NavigationD1Ev@Base 2.0.11
346 _ZN3Dtk6Widget10NavigationD2Ev@Base 2.0.11
347 _ZN3Dtk6Widget10dropShadowERK7QPixmapdRK6QColor@Base 2.0.11
348 _ZN3Dtk6Widget11DBaseButton11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
349 _ZN3Dtk6Widget11DBaseButton11qt_metacastEPKc@Base 2.0.11
350 _ZN3Dtk6Widget11DBaseButton15initInsideFrameEv@Base 2.0.11
351 _ZN3Dtk6Widget11DBaseButton16staticMetaObjectE@Base 2.0.11
352 _ZN3Dtk6Widget11DBaseButtonC1EP7QWidget@Base 2.0.11
353 _ZN3Dtk6Widget11DBaseButtonC1ERK5QIconRK7QStringP7QWidget@Base 2.0.11
354 _ZN3Dtk6Widget11DBaseButtonC1ERK7QStringP7QWidget@Base 2.0.11
355 _ZN3Dtk6Widget11DBaseButtonC2EP7QWidget@Base 2.0.11
356 _ZN3Dtk6Widget11DBaseButtonC2ERK5QIconRK7QStringP7QWidget@Base 2.0.11
357 _ZN3Dtk6Widget11DBaseButtonC2ERK7QStringP7QWidget@Base 2.0.11
358 _ZN3Dtk6Widget11DBaseButtonD0Ev@Base 2.0.11
359 _ZN3Dtk6Widget11DBaseButtonD1Ev@Base 2.0.11
360 _ZN3Dtk6Widget11DBaseButtonD2Ev@Base 2.0.11
361 _ZN3Dtk6Widget11DBaseExpand10setContentEP7QWidget6QFlagsIN2Qt13AlignmentFlagEE@Base 2.0.11
362 _ZN3Dtk6Widget11DBaseExpand11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
363 _ZN3Dtk6Widget11DBaseExpand11qt_metacastEPKc@Base 2.0.11
364 _ZN3Dtk6Widget11DBaseExpand11resizeEventEP12QResizeEvent@Base 2.0.11
365 _ZN3Dtk6Widget11DBaseExpand11sizeChangedE5QSize@Base 2.0.11
366 _ZN3Dtk6Widget11DBaseExpand12expandChangeEb@Base 2.0.11
367 _ZN3Dtk6Widget11DBaseExpand15setHeaderHeightEi@Base 2.0.11
368 _ZN3Dtk6Widget11DBaseExpand16staticMetaObjectE@Base 2.0.11
369 _ZN3Dtk6Widget11DBaseExpand19setSeparatorVisibleEb@Base 2.0.11
370 _ZN3Dtk6Widget11DBaseExpand20setAnimationDurationEi@Base 2.0.11
371 _ZN3Dtk6Widget11DBaseExpand23setAnimationEasingCurveE12QEasingCurve@Base 2.0.11
372 _ZN3Dtk6Widget11DBaseExpand27setExpandedSeparatorVisibleEb@Base 2.0.11
373 _ZN3Dtk6Widget11DBaseExpand9setExpandEb@Base 2.0.11
374 _ZN3Dtk6Widget11DBaseExpand9setHeaderEP7QWidget@Base 2.0.11
375 _ZN3Dtk6Widget11DBaseExpandC1EP7QWidget@Base 2.0.11
376 _ZN3Dtk6Widget11DBaseExpandC2EP7QWidget@Base 2.0.11
377 _ZN3Dtk6Widget11DBaseExpandD0Ev@Base 2.0.11
378 _ZN3Dtk6Widget11DBaseExpandD1Ev@Base 2.0.11
379 _ZN3Dtk6Widget11DBaseExpandD2Ev@Base 2.0.11
380 _ZN3Dtk6Widget11DButtonList10addButtonsERK11QStringList@Base 2.0.11
381 _ZN3Dtk6Widget11DButtonList11initConnectEv@Base 2.0.11
382 _ZN3Dtk6Widget11DButtonList11initMarginsEiii@Base 2.0.11
383 _ZN3Dtk6Widget11DButtonList11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
384 _ZN3Dtk6Widget11DButtonList11qt_metacastEPKc@Base 2.0.11
385 _ZN3Dtk6Widget11DButtonList11setItemSizeE5QSize@Base 2.0.11
386 _ZN3Dtk6Widget11DButtonList11setItemSizeEii@Base 2.0.11
387 _ZN3Dtk6Widget11DButtonList12setItemWidthEi@Base 2.0.11
388 _ZN3Dtk6Widget11DButtonList13buttonCheckedE7QString@Base 2.0.11
389 _ZN3Dtk6Widget11DButtonList13setItemHeightEi@Base 2.0.11
390 _ZN3Dtk6Widget11DButtonList16getButtonByIndexEi@Base 2.0.11
391 _ZN3Dtk6Widget11DButtonList16setButtonCheckedEi@Base 2.0.11
392 _ZN3Dtk6Widget11DButtonList16staticMetaObjectE@Base 2.0.11
393 _ZN3Dtk6Widget11DButtonList17buttonMouseLeavedE7QString@Base 2.0.11
394 _ZN3Dtk6Widget11DButtonList18buttonMouseEnteredE7QString@Base 2.0.11
395 _ZN3Dtk6Widget11DButtonList18checkButtonByIndexEi@Base 2.0.11
396 _ZN3Dtk6Widget11DButtonList25buttonCheckedIndexChangedEi@Base 2.0.11
397 _ZN3Dtk6Widget11DButtonList5clearEv@Base 2.0.11
398 _ZN3Dtk6Widget11DButtonList9addButtonERK7QString@Base 2.0.11
399 _ZN3Dtk6Widget11DButtonList9addButtonERK7QStringi@Base 2.0.11
400 _ZN3Dtk6Widget11DButtonListC1EP7QWidget@Base 2.0.11
401 _ZN3Dtk6Widget11DButtonListC2EP7QWidget@Base 2.0.11
402 _ZN3Dtk6Widget11DButtonListD0Ev@Base 2.0.11
403 _ZN3Dtk6Widget11DButtonListD1Ev@Base 2.0.11
404 _ZN3Dtk6Widget11DButtonListD2Ev@Base 2.0.11
405 _ZN3Dtk6Widget11DFileDialog10setVisibleEb@Base 2.0.11
406 _ZN3Dtk6Widget11DFileDialog11addComboBoxERK7QStringRK11QStringList@Base 2.0.11
407 _ZN3Dtk6Widget11DFileDialog11addComboBoxERK7QStringRKNS1_16DComboBoxOptionsE@Base 2.0.11
408 _ZN3Dtk6Widget11DFileDialog11addLineEditERK7QString@Base 2.0.11
409 _ZN3Dtk6Widget11DFileDialog11addLineEditERK7QStringRKNS1_16DLineEditOptionsE@Base 2.0.11
410 _ZN3Dtk6Widget11DFileDialog11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
411 _ZN3Dtk6Widget11DFileDialog11qt_metacastEPKc@Base 2.0.11
412 _ZN3Dtk6Widget11DFileDialog16staticMetaObjectE@Base 2.0.11
413 _ZN3Dtk6Widget11DFileDialogC1EP7QWidget6QFlagsIN2Qt10WindowTypeEE@Base 2.0.11
414 _ZN3Dtk6Widget11DFileDialogC1EP7QWidgetRK7QStringS6_S6_@Base 2.0.11
415 _ZN3Dtk6Widget11DFileDialogC2EP7QWidget6QFlagsIN2Qt10WindowTypeEE@Base 2.0.11
416 _ZN3Dtk6Widget11DFileDialogC2EP7QWidgetRK7QStringS6_S6_@Base 2.0.11
417 _ZN3Dtk6Widget11DFileDialogD0Ev@Base 2.0.11
418 _ZN3Dtk6Widget11DFileDialogD1Ev@Base 2.0.11
419 _ZN3Dtk6Widget11DFileDialogD2Ev@Base 2.0.11
420 _ZN3Dtk6Widget11DFlowLayout10addSpacingEi@Base 2.0.11
421 _ZN3Dtk6Widget11DFlowLayout10addStretchEi@Base 2.0.11
422 _ZN3Dtk6Widget11DFlowLayout10insertItemEiP11QLayoutItem@Base 2.0.11
423 _ZN3Dtk6Widget11DFlowLayout10setSpacingEi@Base 2.0.11
424 _ZN3Dtk6Widget11DFlowLayout11flowChangedEN9QListView4FlowE@Base 2.0.11
425 _ZN3Dtk6Widget11DFlowLayout11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
426 _ZN3Dtk6Widget11DFlowLayout11qt_metacastEPKc@Base 2.0.11
427 _ZN3Dtk6Widget11DFlowLayout11setGeometryERK5QRect@Base 2.0.11
428 _ZN3Dtk6Widget11DFlowLayout12countChangedEi@Base 2.0.11
429 _ZN3Dtk6Widget11DFlowLayout12insertLayoutEiP7QLayout@Base 2.0.11
430 _ZN3Dtk6Widget11DFlowLayout12insertWidgetEiP7QWidget@Base 2.0.11
431 _ZN3Dtk6Widget11DFlowLayout13addSpacerItemEP11QSpacerItem@Base 2.0.11
432 _ZN3Dtk6Widget11DFlowLayout13insertSpacingEii@Base 2.0.11
433 _ZN3Dtk6Widget11DFlowLayout13insertStretchEii@Base 2.0.11
434 _ZN3Dtk6Widget11DFlowLayout16insertSpacerItemEiP11QSpacerItem@Base 2.0.11
435 _ZN3Dtk6Widget11DFlowLayout16staticMetaObjectE@Base 2.0.11
436 _ZN3Dtk6Widget11DFlowLayout18setVerticalSpacingEi@Base 2.0.11
437 _ZN3Dtk6Widget11DFlowLayout20setHorizontalSpacingEi@Base 2.0.11
438 _ZN3Dtk6Widget11DFlowLayout22verticalSpacingChangedEi@Base 2.0.11
439 _ZN3Dtk6Widget11DFlowLayout24horizontalSpacingChangedEi@Base 2.0.11
440 _ZN3Dtk6Widget11DFlowLayout6takeAtEi@Base 2.0.11
441 _ZN3Dtk6Widget11DFlowLayout7addItemEP11QLayoutItem@Base 2.0.11
442 _ZN3Dtk6Widget11DFlowLayout7setFlowEN9QListView4FlowE@Base 2.0.11
443 _ZN3Dtk6Widget11DFlowLayoutC1EP7QWidget@Base 2.0.11
444 _ZN3Dtk6Widget11DFlowLayoutC1Ev@Base 2.0.11
445 _ZN3Dtk6Widget11DFlowLayoutC2EP7QWidget@Base 2.0.11
446 _ZN3Dtk6Widget11DFlowLayoutC2Ev@Base 2.0.11
447 _ZN3Dtk6Widget11DFlowLayoutD0Ev@Base 2.0.11
448 _ZN3Dtk6Widget11DFlowLayoutD1Ev@Base 2.0.11
449 _ZN3Dtk6Widget11DFlowLayoutD2Ev@Base 2.0.11
450 _ZN3Dtk6Widget11DHBoxWidget11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
451 _ZN3Dtk6Widget11DHBoxWidget11qt_metacastEPKc@Base 2.0.11
452 _ZN3Dtk6Widget11DHBoxWidget16staticMetaObjectE@Base 2.0.11
453 _ZN3Dtk6Widget11DHBoxWidgetC1EP7QWidget@Base 2.0.11
454 _ZN3Dtk6Widget11DHBoxWidgetC2EP7QWidget@Base 2.0.11
455 _ZN3Dtk6Widget11DHBoxWidgetD0Ev@Base 2.0.11
456 _ZN3Dtk6Widget11DHBoxWidgetD1Ev@Base 2.0.11
457 _ZN3Dtk6Widget11DHBoxWidgetD2Ev@Base 2.0.11
458 _ZN3Dtk6Widget11DHeaderLine10setContentEP7QWidget@Base 2.0.11
459 _ZN3Dtk6Widget11DHeaderLine11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
460 _ZN3Dtk6Widget11DHeaderLine11qt_metacastEPKc@Base 2.0.11
461 _ZN3Dtk6Widget11DHeaderLine16staticMetaObjectE@Base 2.0.11
462 _ZN3Dtk6Widget11DHeaderLine8setTitleERK7QString@Base 2.0.11
463 _ZN3Dtk6Widget11DHeaderLineC1EP7QWidget@Base 2.0.11
464 _ZN3Dtk6Widget11DHeaderLineC2EP7QWidget@Base 2.0.11
465 _ZN3Dtk6Widget11DHeaderLineD0Ev@Base 2.0.11
466 _ZN3Dtk6Widget11DHeaderLineD1Ev@Base 2.0.11
467 _ZN3Dtk6Widget11DHeaderLineD2Ev@Base 2.0.11
468 _ZN3Dtk6Widget11DIconButton10enterEventEP6QEvent@Base 2.0.11
469 _ZN3Dtk6Widget11DIconButton10leaveEventEP6QEvent@Base 2.0.11
470 _ZN3Dtk6Widget11DIconButton11initConnectEv@Base 2.0.11
471 _ZN3Dtk6Widget11DIconButton11mouseLeavedE7QString@Base 2.0.11
472 _ZN3Dtk6Widget11DIconButton11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
473 _ZN3Dtk6Widget11DIconButton11qt_metacastEPKc@Base 2.0.11
474 _ZN3Dtk6Widget11DIconButton11resizeEventEP12QResizeEvent@Base 2.0.11
475 _ZN3Dtk6Widget11DIconButton11updateStyleEv@Base 2.0.11
476 _ZN3Dtk6Widget11DIconButton12mouseEnteredE7QString@Base 2.0.11
477 _ZN3Dtk6Widget11DIconButton12setIconLabelERK7QString@Base 2.0.11
478 _ZN3Dtk6Widget11DIconButton13hideIconLabelEv@Base 2.0.11
479 _ZN3Dtk6Widget11DIconButton13initIconLabelEv@Base 2.0.11
480 _ZN3Dtk6Widget11DIconButton16staticMetaObjectE@Base 2.0.11
481 _ZN3Dtk6Widget11DIconButton17setIconLeftMarginEi@Base 2.0.11
482 _ZN3Dtk6Widget11DIconButtonC1ERK7QStringS4_P7QWidget@Base 2.0.11
483 _ZN3Dtk6Widget11DIconButtonC2ERK7QStringS4_P7QWidget@Base 2.0.11
484 _ZN3Dtk6Widget11DIconButtonD0Ev@Base 2.0.11
485 _ZN3Dtk6Widget11DIconButtonD1Ev@Base 2.0.11
486 _ZN3Dtk6Widget11DIconButtonD2Ev@Base 2.0.11
487 _ZN3Dtk6Widget11DLinkButton11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
488 _ZN3Dtk6Widget11DLinkButton11qt_metacastEPKc@Base 2.0.11
489 _ZN3Dtk6Widget11DLinkButton16staticMetaObjectE@Base 2.0.11
490 _ZN3Dtk6Widget11DLinkButtonC1ERK7QStringP7QWidget@Base 2.0.11
491 _ZN3Dtk6Widget11DLinkButtonC2ERK7QStringP7QWidget@Base 2.0.11
492 _ZN3Dtk6Widget11DLinkButtonD0Ev@Base 2.0.11
493 _ZN3Dtk6Widget11DLinkButtonD1Ev@Base 2.0.11
494 _ZN3Dtk6Widget11DLinkButtonD2Ev@Base 2.0.11
495 _ZN3Dtk6Widget11DListWidget10addWidgetsERK5QListIP7QWidgetE6QFlagsIN2Qt13AlignmentFlagEE@Base 2.0.11
496 _ZN3Dtk6Widget11DListWidget10hideWidgetEi@Base 2.0.11
497 _ZN3Dtk6Widget11DListWidget10setCheckedEib@Base 2.0.11
498 _ZN3Dtk6Widget11DListWidget10setSpacingEi@Base 2.0.11
499 _ZN3Dtk6Widget11DListWidget10showWidgetEi@Base 2.0.11
500 _ZN3Dtk6Widget11DListWidget10updateSizeEv@Base 2.0.11
501 _ZN3Dtk6Widget11DListWidget11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
502 _ZN3Dtk6Widget11DListWidget11qt_metacastEPKc@Base 2.0.11
503 _ZN3Dtk6Widget11DListWidget11setItemSizeEii@Base 2.0.11
504 _ZN3Dtk6Widget11DListWidget12countChangedEi@Base 2.0.11
505 _ZN3Dtk6Widget11DListWidget12insertWidgetEiP7QWidget6QFlagsIN2Qt13AlignmentFlagEE@Base 2.0.11
506 _ZN3Dtk6Widget11DListWidget12removeWidgetEib@Base 2.0.11
507 _ZN3Dtk6Widget11DListWidget12setCheckModeENS1_9CheckModeE@Base 2.0.11
508 _ZN3Dtk6Widget11DListWidget12setCheckableEb@Base 2.0.11
509 _ZN3Dtk6Widget11DListWidget12setDirectionEN10QBoxLayout9DirectionE@Base 2.0.11
510 _ZN3Dtk6Widget11DListWidget13insertWidgetsEiRK5QListIP7QWidgetE6QFlagsIN2Qt13AlignmentFlagEE@Base 2.0.11
511 _ZN3Dtk6Widget11DListWidget13setToggleableEb@Base 2.0.11
512 _ZN3Dtk6Widget11DListWidget14checkedChangedEib@Base 2.0.11
513 _ZN3Dtk6Widget11DListWidget15setVisibleCountEi@Base 2.0.11
514 _ZN3Dtk6Widget11DListWidget16checkableChangedEb@Base 2.0.11
515 _ZN3Dtk6Widget11DListWidget16staticMetaObjectE@Base 2.0.11
516 _ZN3Dtk6Widget11DListWidget17mouseReleaseEventEP11QMouseEvent@Base 2.0.11
517 _ZN3Dtk6Widget11DListWidget17toggleableChangedEb@Base 2.0.11
518 _ZN3Dtk6Widget11DListWidget18setContentsMarginsERK8QMargins@Base 2.0.11
519 _ZN3Dtk6Widget11DListWidget18setContentsMarginsEiiii@Base 2.0.11
520 _ZN3Dtk6Widget11DListWidget19firstCheckedChangedEi@Base 2.0.11
521 _ZN3Dtk6Widget11DListWidget19visibleCountChangedEi@Base 2.0.11
522 _ZN3Dtk6Widget11DListWidget23setEnableVerticalScrollEb@Base 2.0.11
523 _ZN3Dtk6Widget11DListWidget25setEnableHorizontalScrollEb@Base 2.0.11
524 _ZN3Dtk6Widget11DListWidget27enableVerticalScrollChangedEb@Base 2.0.11
525 _ZN3Dtk6Widget11DListWidget29enableHorizontalScrollChangedEb@Base 2.0.11
526 _ZN3Dtk6Widget11DListWidget5clearEb@Base 2.0.11
527 _ZN3Dtk6Widget11DListWidget7clickedEi@Base 2.0.11
528 _ZN3Dtk6Widget11DListWidget7indexOfEPK7QWidget@Base 2.0.11
529 _ZN3Dtk6Widget11DListWidget9addWidgetEP7QWidget6QFlagsIN2Qt13AlignmentFlagEE@Base 2.0.11
530 _ZN3Dtk6Widget11DListWidgetC1EN10QBoxLayout9DirectionENS1_9CheckModeEP7QWidget@Base 2.0.11
531 _ZN3Dtk6Widget11DListWidgetC1ENS1_9CheckModeEP7QWidget@Base 2.0.11
532 _ZN3Dtk6Widget11DListWidgetC1ERNS0_18DListWidgetPrivateEP7QWidget@Base 2.0.11
533 _ZN3Dtk6Widget11DListWidgetC2EN10QBoxLayout9DirectionENS1_9CheckModeEP7QWidget@Base 2.0.11
534 _ZN3Dtk6Widget11DListWidgetC2ENS1_9CheckModeEP7QWidget@Base 2.0.11
535 _ZN3Dtk6Widget11DListWidgetC2ERNS0_18DListWidgetPrivateEP7QWidget@Base 2.0.11
536 _ZN3Dtk6Widget11DListWidgetD0Ev@Base 2.0.11
537 _ZN3Dtk6Widget11DListWidgetD1Ev@Base 2.0.11
538 _ZN3Dtk6Widget11DListWidgetD2Ev@Base 2.0.11
539 _ZN3Dtk6Widget11DMainWindow11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
540 _ZN3Dtk6Widget11DMainWindow11qt_metacastEPKc@Base 2.0.11
541 _ZN3Dtk6Widget11DMainWindow11setClipPathERK12QPainterPath@Base 2.0.11
542 _ZN3Dtk6Widget11DMainWindow12setFrameMaskERK7QRegion@Base 2.0.11
543 _ZN3Dtk6Widget11DMainWindow14setBorderColorERK6QColor@Base 2.0.11
544 _ZN3Dtk6Widget11DMainWindow14setBorderWidthEi@Base 2.0.11
545 _ZN3Dtk6Widget11DMainWindow14setShadowColorERK6QColor@Base 2.0.11
546 _ZN3Dtk6Widget11DMainWindow15clipPathChangedEv@Base 2.0.11
547 _ZN3Dtk6Widget11DMainWindow15setShadowOffsetERK6QPoint@Base 2.0.11
548 _ZN3Dtk6Widget11DMainWindow15setShadowRadiusEi@Base 2.0.11
549 _ZN3Dtk6Widget11DMainWindow15setWindowRadiusEi@Base 2.0.11
550 _ZN3Dtk6Widget11DMainWindow16frameMaskChangedEv@Base 2.0.11
551 _ZN3Dtk6Widget11DMainWindow16staticMetaObjectE@Base 2.0.11
552 _ZN3Dtk6Widget11DMainWindow18borderColorChangedEv@Base 2.0.11
553 _ZN3Dtk6Widget11DMainWindow18borderWidthChangedEv@Base 2.0.11
554 _ZN3Dtk6Widget11DMainWindow18shadowColorChangedEv@Base 2.0.11
555 _ZN3Dtk6Widget11DMainWindow19frameMarginsChangedEv@Base 2.0.11
556 _ZN3Dtk6Widget11DMainWindow19setEnableBlurWindowEb@Base 2.0.11
557 _ZN3Dtk6Widget11DMainWindow19setEnableSystemMoveEb@Base 2.0.11
558 _ZN3Dtk6Widget11DMainWindow19shadowOffsetChangedEv@Base 2.0.11
559 _ZN3Dtk6Widget11DMainWindow19shadowRadiusChangedEv@Base 2.0.11
560 _ZN3Dtk6Widget11DMainWindow19windowRadiusChangedEv@Base 2.0.11
561 _ZN3Dtk6Widget11DMainWindow21setEnableSystemResizeEb@Base 2.0.11
562 _ZN3Dtk6Widget11DMainWindow23enableBlurWindowChangedEv@Base 2.0.11
563 _ZN3Dtk6Widget11DMainWindow23enableSystemMoveChangedEv@Base 2.0.11
564 _ZN3Dtk6Widget11DMainWindow24setTranslucentBackgroundEb@Base 2.0.11
565 _ZN3Dtk6Widget11DMainWindow25enableSystemResizeChangedEv@Base 2.0.11
566 _ZN3Dtk6Widget11DMainWindow26setAutoInputMaskByClipPathEb@Base 2.0.11
567 _ZN3Dtk6Widget11DMainWindow28translucentBackgroundChangedEv@Base 2.0.11
568 _ZN3Dtk6Widget11DMainWindow30autoInputMaskByClipPathChangedEv@Base 2.0.11
569 _ZN3Dtk6Widget11DMainWindowC1EP7QWidget@Base 2.0.11
570 _ZN3Dtk6Widget11DMainWindowC1ERNS0_18DMainWindowPrivateEP7QWidget@Base 2.0.11
571 _ZN3Dtk6Widget11DMainWindowC2EP7QWidget@Base 2.0.11
572 _ZN3Dtk6Widget11DMainWindowC2ERNS0_18DMainWindowPrivateEP7QWidget@Base 2.0.11
573 _ZN3Dtk6Widget11DMainWindowD0Ev@Base 2.0.11
574 _ZN3Dtk6Widget11DMainWindowD1Ev@Base 2.0.11
575 _ZN3Dtk6Widget11DMainWindowD2Ev@Base 2.0.11
576 _ZN3Dtk6Widget11DOptionList11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
577 _ZN3Dtk6Widget11DOptionList11qt_metacastEPKc@Base 2.0.11
578 _ZN3Dtk6Widget11DOptionList12insertOptionEiPNS0_7DOptionE@Base 2.0.11
579 _ZN3Dtk6Widget11DOptionList16staticMetaObjectE@Base 2.0.11
580 _ZN3Dtk6Widget11DOptionList18setCurrentSelectedERK7QString@Base 2.0.11
581 _ZN3Dtk6Widget11DOptionList18setCurrentSelectedEi@Base 2.0.11
582 _ZN3Dtk6Widget11DOptionList9addOptionEPNS0_7DOptionE@Base 2.0.11
583 _ZN3Dtk6Widget11DOptionListC1EP7QWidget@Base 2.0.11
584 _ZN3Dtk6Widget11DOptionListC2EP7QWidget@Base 2.0.11
585 _ZN3Dtk6Widget11DOptionListD0Ev@Base 2.0.11
586 _ZN3Dtk6Widget11DOptionListD1Ev@Base 2.0.11
587 _ZN3Dtk6Widget11DOptionListD2Ev@Base 2.0.11
588 _ZN3Dtk6Widget11DPushButton10enterEventEP6QEvent@Base 2.0.11
589 _ZN3Dtk6Widget11DPushButton10leaveEventEP6QEvent@Base 2.0.11
590 _ZN3Dtk6Widget11DPushButton11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
591 _ZN3Dtk6Widget11DPushButton11qt_metacastEPKc@Base 2.0.11
592 _ZN3Dtk6Widget11DPushButton12setHoverIconERK5QIcon@Base 2.0.11
593 _ZN3Dtk6Widget11DPushButton12setHoverIconERK7QString@Base 2.0.11
594 _ZN3Dtk6Widget11DPushButton12setPressIconERK5QIcon@Base 2.0.11
595 _ZN3Dtk6Widget11DPushButton12setPressIconERK7QString@Base 2.0.11
596 _ZN3Dtk6Widget11DPushButton13setNormalIconERK5QIcon@Base 2.0.11
597 _ZN3Dtk6Widget11DPushButton13setNormalIconERK7QString@Base 2.0.11
598 _ZN3Dtk6Widget11DPushButton15mousePressEventEP11QMouseEvent@Base 2.0.11
599 _ZN3Dtk6Widget11DPushButton16staticMetaObjectE@Base 2.0.11
600 _ZN3Dtk6Widget11DPushButtonC1EP7QWidget@Base 2.0.11
601 _ZN3Dtk6Widget11DPushButtonC1ERK7QStringS4_S4_P7QWidget@Base 2.0.11
602 _ZN3Dtk6Widget11DPushButtonC2EP7QWidget@Base 2.0.11
603 _ZN3Dtk6Widget11DPushButtonC2ERK7QStringS4_S4_P7QWidget@Base 2.0.11
604 _ZN3Dtk6Widget11DPushButtonD0Ev@Base 2.0.11
605 _ZN3Dtk6Widget11DPushButtonD1Ev@Base 2.0.11
606 _ZN3Dtk6Widget11DPushButtonD2Ev@Base 2.0.11
607 _ZN3Dtk6Widget11DScrollArea11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
608 _ZN3Dtk6Widget11DScrollArea11qt_metacastEPKc@Base 2.0.11
609 _ZN3Dtk6Widget11DScrollArea13hideScrollBarEP10QScrollBar@Base 2.0.11
610 _ZN3Dtk6Widget11DScrollArea13showScrollBarEP10QScrollBar@Base 2.0.11
611 _ZN3Dtk6Widget11DScrollArea16staticMetaObjectE@Base 2.0.11
612 _ZN3Dtk6Widget11DScrollArea20setAutoHideScrollBarEb@Base 2.0.11
613 _ZN3Dtk6Widget11DScrollArea24autoHideScrollBarChangedEb@Base 2.0.11
614 _ZN3Dtk6Widget11DScrollAreaC1EP7QWidget@Base 2.0.11
615 _ZN3Dtk6Widget11DScrollAreaC1ERNS0_18DScrollAreaPrivateEP7QWidget@Base 2.0.11
616 _ZN3Dtk6Widget11DScrollAreaC2EP7QWidget@Base 2.0.11
617 _ZN3Dtk6Widget11DScrollAreaC2ERNS0_18DScrollAreaPrivateEP7QWidget@Base 2.0.11
618 _ZN3Dtk6Widget11DScrollAreaD0Ev@Base 2.0.11
619 _ZN3Dtk6Widget11DScrollAreaD1Ev@Base 2.0.11
620 _ZN3Dtk6Widget11DScrollAreaD2Ev@Base 2.0.11
621 _ZN3Dtk6Widget11DSearchEdit10toEditModeEv@Base 2.0.11
622 _ZN3Dtk6Widget11DSearchEdit11eventFilterEP7QObjectP6QEvent@Base 2.0.11
623 _ZN3Dtk6Widget11DSearchEdit11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
624 _ZN3Dtk6Widget11DSearchEdit11qt_metacastEPKc@Base 2.0.11
625 _ZN3Dtk6Widget11DSearchEdit11resizeEventEP12QResizeEvent@Base 2.0.11
626 _ZN3Dtk6Widget11DSearchEdit11textChangedEv@Base 2.0.11
627 _ZN3Dtk6Widget11DSearchEdit13returnPressedEv@Base 2.0.11
628 _ZN3Dtk6Widget11DSearchEdit15editingFinishedEv@Base 2.0.11
629 _ZN3Dtk6Widget11DSearchEdit15initInsideFrameEv@Base 2.0.11
630 _ZN3Dtk6Widget11DSearchEdit15mousePressEventEP11QMouseEvent@Base 2.0.11
631 _ZN3Dtk6Widget11DSearchEdit16staticMetaObjectE@Base 2.0.11
632 _ZN3Dtk6Widget11DSearchEdit17mouseReleaseEventEP11QMouseEvent@Base 2.0.11
633 _ZN3Dtk6Widget11DSearchEdit5clearEv@Base 2.0.11
634 _ZN3Dtk6Widget11DSearchEdit5eventEP6QEvent@Base 2.0.11
635 _ZN3Dtk6Widget11DSearchEdit7focusInEv@Base 2.0.11
636 _ZN3Dtk6Widget11DSearchEdit8focusOutEv@Base 2.0.11
637 _ZN3Dtk6Widget11DSearchEditC1EP7QWidget@Base 2.0.11
638 _ZN3Dtk6Widget11DSearchEditC2EP7QWidget@Base 2.0.11
639 _ZN3Dtk6Widget11DSearchEditD0Ev@Base 2.0.11
640 _ZN3Dtk6Widget11DSearchEditD1Ev@Base 2.0.11
641 _ZN3Dtk6Widget11DSearchEditD2Ev@Base 2.0.11
642 _ZN3Dtk6Widget11DTextButton11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
643 _ZN3Dtk6Widget11DTextButton11qt_metacastEPKc@Base 2.0.11
644 _ZN3Dtk6Widget11DTextButton16staticMetaObjectE@Base 2.0.11
645 _ZN3Dtk6Widget11DTextButtonC1ERK7QStringP7QWidget@Base 2.0.11
646 _ZN3Dtk6Widget11DTextButtonC2ERK7QStringP7QWidget@Base 2.0.11
647 _ZN3Dtk6Widget11DTextButtonD0Ev@Base 2.0.11
648 _ZN3Dtk6Widget11DTextButtonD1Ev@Base 2.0.11
649 _ZN3Dtk6Widget11DTextButtonD2Ev@Base 2.0.11
650 _ZN3Dtk6Widget11DTickEffect11eventFilterEP7QObjectP6QEvent@Base 2.0.11
651 _ZN3Dtk6Widget11DTickEffect11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
652 _ZN3Dtk6Widget11DTickEffect11qt_metacastEPKc@Base 2.0.11
653 _ZN3Dtk6Widget11DTickEffect11setDurationEi@Base 2.0.11
654 _ZN3Dtk6Widget11DTickEffect12setDirectionENS1_9DirectionE@Base 2.0.11
655 _ZN3Dtk6Widget11DTickEffect12stateChangedEv@Base 2.0.11
656 _ZN3Dtk6Widget11DTickEffect16staticMetaObjectE@Base 2.0.11
657 _ZN3Dtk6Widget11DTickEffect17setFixedPixelMoveEi@Base 2.0.11
658 _ZN3Dtk6Widget11DTickEffect4drawEP8QPainter@Base 2.0.11
659 _ZN3Dtk6Widget11DTickEffect4playEv@Base 2.0.11
660 _ZN3Dtk6Widget11DTickEffect4stopEv@Base 2.0.11
661 _ZN3Dtk6Widget11DTickEffect5pauseEv@Base 2.0.11
662 _ZN3Dtk6Widget11DTickEffect6resumeEv@Base 2.0.11
663 _ZN3Dtk6Widget11DTickEffect8finishedEv@Base 2.0.11
664 _ZN3Dtk6Widget11DTickEffectC1EP7QWidgetS3_@Base 2.0.11
665 _ZN3Dtk6Widget11DTickEffectC2EP7QWidgetS3_@Base 2.0.11
666 _ZN3Dtk6Widget11DTickEffectD0Ev@Base 2.0.11
667 _ZN3Dtk6Widget11DTickEffectD1Ev@Base 2.0.11
668 _ZN3Dtk6Widget11DTickEffectD2Ev@Base 2.0.11
669 _ZN3Dtk6Widget11DVBoxWidget11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
670 _ZN3Dtk6Widget11DVBoxWidget11qt_metacastEPKc@Base 2.0.11
671 _ZN3Dtk6Widget11DVBoxWidget16staticMetaObjectE@Base 2.0.11
672 _ZN3Dtk6Widget11DVBoxWidgetC1EP7QWidget@Base 2.0.11
673 _ZN3Dtk6Widget11DVBoxWidgetC2EP7QWidget@Base 2.0.11
674 _ZN3Dtk6Widget11DVBoxWidgetD0Ev@Base 2.0.11
675 _ZN3Dtk6Widget11DVBoxWidgetD1Ev@Base 2.0.11
676 _ZN3Dtk6Widget11DVBoxWidgetD2Ev@Base 2.0.11
677 _ZN3Dtk6Widget12DAboutDialog10setLicenseERK7QString@Base 2.0.11
678 _ZN3Dtk6Widget12DAboutDialog10setVersionERK7QString@Base 2.0.11
679 _ZN3Dtk6Widget12DAboutDialog11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
680 _ZN3Dtk6Widget12DAboutDialog11qt_metacastEPKc@Base 2.0.11
681 _ZN3Dtk6Widget12DAboutDialog13keyPressEventEP9QKeyEvent@Base 2.0.11
682 _ZN3Dtk6Widget12DAboutDialog14setCompanyLogoERK7QPixmap@Base 2.0.11
683 _ZN3Dtk6Widget12DAboutDialog14setDescriptionERK7QString@Base 2.0.11
684 _ZN3Dtk6Widget12DAboutDialog14setProductIconERK5QIcon@Base 2.0.11
685 _ZN3Dtk6Widget12DAboutDialog14setProductNameERK7QString@Base 2.0.11
686 _ZN3Dtk6Widget12DAboutDialog14setWebsiteLinkERK7QString@Base 2.0.11
687 _ZN3Dtk6Widget12DAboutDialog14setWebsiteNameERK7QString@Base 2.0.11
688 _ZN3Dtk6Widget12DAboutDialog14setWindowTitleERK7QString@Base 2.0.11
689 _ZN3Dtk6Widget12DAboutDialog16staticMetaObjectE@Base 2.0.11
690 _ZN3Dtk6Widget12DAboutDialog22setAcknowledgementLinkERK7QString@Base 2.0.11
691 _ZN3Dtk6Widget12DAboutDialog25setAcknowledgementVisibleEb@Base 2.0.11
692 _ZN3Dtk6Widget12DAboutDialog9showEventEP10QShowEvent@Base 2.0.11
693 _ZN3Dtk6Widget12DAboutDialogC1EP7QWidget@Base 2.0.11
694 _ZN3Dtk6Widget12DAboutDialogC2EP7QWidget@Base 2.0.11
695 _ZN3Dtk6Widget12DAboutDialogD0Ev@Base 2.0.11
696 _ZN3Dtk6Widget12DAboutDialogD1Ev@Base 2.0.11
697 _ZN3Dtk6Widget12DAboutDialogD2Ev@Base 2.0.11
698 _ZN3Dtk6Widget12DAnchorsBase10moveBottomEi@Base 2.0.11
699 _ZN3Dtk6Widget12DAnchorsBase10moveCenterERK6QPoint@Base 2.0.11
700 _ZN3Dtk6Widget12DAnchorsBase10setEnabledEb@Base 2.0.11
701 _ZN3Dtk6Widget12DAnchorsBase10setMarginsEi@Base 2.0.11
702 _ZN3Dtk6Widget12DAnchorsBase10topChangedEPKNS0_11DAnchorInfoE@Base 2.0.11
703 _ZN3Dtk6Widget12DAnchorsBase10updateFillEv@Base 2.0.11
704 _ZN3Dtk6Widget12DAnchorsBase11fillChangedEP7QWidget@Base 2.0.11
705 _ZN3Dtk6Widget12DAnchorsBase11leftChangedEPKNS0_11DAnchorInfoE@Base 2.0.11
706 _ZN3Dtk6Widget12DAnchorsBase11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
707 _ZN3Dtk6Widget12DAnchorsBase11qt_metacastEPKc@Base 2.0.11
708 _ZN3Dtk6Widget12DAnchorsBase11setCenterInEP7QWidget@Base 2.0.11
709 _ZN3Dtk6Widget12DAnchorsBase11setCenterInEPS1_@Base 2.0.11
710 _ZN3Dtk6Widget12DAnchorsBase12clearAnchorsEPK7QWidget@Base 2.0.11
711 _ZN3Dtk6Widget12DAnchorsBase12rightChangedEPKNS0_11DAnchorInfoE@Base 2.0.11
712 _ZN3Dtk6Widget12DAnchorsBase12setTopMarginEi@Base 2.0.11
713 _ZN3Dtk6Widget12DAnchorsBase13bottomChangedEPKNS0_11DAnchorInfoE@Base 2.0.11
714 _ZN3Dtk6Widget12DAnchorsBase13setLeftMarginEi@Base 2.0.11
715 _ZN3Dtk6Widget12DAnchorsBase14enabledChangedEb@Base 2.0.11
716 _ZN3Dtk6Widget12DAnchorsBase14marginsChangedEi@Base 2.0.11
717 _ZN3Dtk6Widget12DAnchorsBase14setRightMarginEi@Base 2.0.11
718 _ZN3Dtk6Widget12DAnchorsBase14updateCenterInEv@Base 2.0.11
719 _ZN3Dtk6Widget12DAnchorsBase14updateVerticalEv@Base 2.0.11
720 _ZN3Dtk6Widget12DAnchorsBase15centerInChangedEP7QWidget@Base 2.0.11
721 _ZN3Dtk6Widget12DAnchorsBase15setBottomMarginEi@Base 2.0.11
722 _ZN3Dtk6Widget12DAnchorsBase16staticMetaObjectE@Base 2.0.11
723 _ZN3Dtk6Widget12DAnchorsBase16topMarginChangedEi@Base 2.0.11
724 _ZN3Dtk6Widget12DAnchorsBase16updateHorizontalEv@Base 2.0.11
725 _ZN3Dtk6Widget12DAnchorsBase17leftMarginChangedEi@Base 2.0.11
726 _ZN3Dtk6Widget12DAnchorsBase17setVerticalCenterEPKNS0_11DAnchorInfoE@Base 2.0.11
727 _ZN3Dtk6Widget12DAnchorsBase17setVerticalCenterEiN2Qt11AnchorPointE@Base 2.0.11
728 _ZN3Dtk6Widget12DAnchorsBase18moveVerticalCenterEi@Base 2.0.11
729 _ZN3Dtk6Widget12DAnchorsBase18rightMarginChangedEi@Base 2.0.11
730 _ZN3Dtk6Widget12DAnchorsBase19bottomMarginChangedEi@Base 2.0.11
731 _ZN3Dtk6Widget12DAnchorsBase19setHorizontalCenterEPKNS0_11DAnchorInfoE@Base 2.0.11
732 _ZN3Dtk6Widget12DAnchorsBase19setHorizontalCenterEiN2Qt11AnchorPointE@Base 2.0.11
733 _ZN3Dtk6Widget12DAnchorsBase20moveHorizontalCenterEi@Base 2.0.11
734 _ZN3Dtk6Widget12DAnchorsBase20setAlignWhenCenteredEb@Base 2.0.11
735 _ZN3Dtk6Widget12DAnchorsBase21getAnchorBaseByWidgetEPK7QWidget@Base 2.0.11
736 _ZN3Dtk6Widget12DAnchorsBase21verticalCenterChangedEPKNS0_11DAnchorInfoE@Base 2.0.11
737 _ZN3Dtk6Widget12DAnchorsBase23horizontalCenterChangedEPKNS0_11DAnchorInfoE@Base 2.0.11
738 _ZN3Dtk6Widget12DAnchorsBase23setVerticalCenterOffsetEi@Base 2.0.11
739 _ZN3Dtk6Widget12DAnchorsBase24alignWhenCenteredChangedEb@Base 2.0.11
740 _ZN3Dtk6Widget12DAnchorsBase25setHorizontalCenterOffsetEi@Base 2.0.11
741 _ZN3Dtk6Widget12DAnchorsBase27verticalCenterOffsetChangedEi@Base 2.0.11
742 _ZN3Dtk6Widget12DAnchorsBase29horizontalCenterOffsetChangedEi@Base 2.0.11
743 _ZN3Dtk6Widget12DAnchorsBase4initEP7QWidget@Base 2.0.11
744 _ZN3Dtk6Widget12DAnchorsBase6setTopEPKNS0_11DAnchorInfoE@Base 2.0.11
745 _ZN3Dtk6Widget12DAnchorsBase6setTopEiN2Qt11AnchorPointE@Base 2.0.11
746 _ZN3Dtk6Widget12DAnchorsBase7moveTopEi@Base 2.0.11
747 _ZN3Dtk6Widget12DAnchorsBase7setFillEP7QWidget@Base 2.0.11
748 _ZN3Dtk6Widget12DAnchorsBase7setFillEPS1_@Base 2.0.11
749 _ZN3Dtk6Widget12DAnchorsBase7setLeftEPKNS0_11DAnchorInfoE@Base 2.0.11
750 _ZN3Dtk6Widget12DAnchorsBase7setLeftEiN2Qt11AnchorPointE@Base 2.0.11
751 _ZN3Dtk6Widget12DAnchorsBase8moveLeftEi@Base 2.0.11
752 _ZN3Dtk6Widget12DAnchorsBase8setRightEPKNS0_11DAnchorInfoE@Base 2.0.11
753 _ZN3Dtk6Widget12DAnchorsBase8setRightEiN2Qt11AnchorPointE@Base 2.0.11
754 _ZN3Dtk6Widget12DAnchorsBase9moveRightEi@Base 2.0.11
755 _ZN3Dtk6Widget12DAnchorsBase9setAnchorEP7QWidgetRKN2Qt11AnchorPointES3_S7_@Base 2.0.11
756 _ZN3Dtk6Widget12DAnchorsBase9setAnchorERKN2Qt11AnchorPointEP7QWidgetS5_@Base 2.0.11
757 _ZN3Dtk6Widget12DAnchorsBase9setBottomEPKNS0_11DAnchorInfoE@Base 2.0.11
758 _ZN3Dtk6Widget12DAnchorsBase9setBottomEiN2Qt11AnchorPointE@Base 2.0.11
759 _ZN3Dtk6Widget12DAnchorsBaseC1EP7QWidget@Base 2.0.11
760 _ZN3Dtk6Widget12DAnchorsBaseC1EP7QWidgetb@Base 2.0.11
761 _ZN3Dtk6Widget12DAnchorsBaseC2EP7QWidget@Base 2.0.11
762 _ZN3Dtk6Widget12DAnchorsBaseC2EP7QWidgetb@Base 2.0.11
763 _ZN3Dtk6Widget12DAnchorsBaseD0Ev@Base 2.0.11
764 _ZN3Dtk6Widget12DAnchorsBaseD1Ev@Base 2.0.11
765 _ZN3Dtk6Widget12DAnchorsBaseD2Ev@Base 2.0.11
766 _ZN3Dtk6Widget12DAnchorsRect17setVerticalCenterEdN2Qt11AnchorPointE@Base 2.0.11
767 _ZN3Dtk6Widget12DAnchorsRect19setHorizontalCenterEdN2Qt11AnchorPointE@Base 2.0.11
768 _ZN3Dtk6Widget12DAnchorsRect6setTopEiN2Qt11AnchorPointE@Base 2.0.11
769 _ZN3Dtk6Widget12DAnchorsRect7setLeftEiN2Qt11AnchorPointE@Base 2.0.11
770 _ZN3Dtk6Widget12DAnchorsRect8setRightEiN2Qt11AnchorPointE@Base 2.0.11
771 _ZN3Dtk6Widget12DAnchorsRect9setBottomEiN2Qt11AnchorPointE@Base 2.0.11
772 _ZN3Dtk6Widget12DApplication11aboutDialogEv@Base 2.0.11
773 _ZN3Dtk6Widget12DApplication11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
774 _ZN3Dtk6Widget12DApplication11qt_metacastEPKc@Base 2.0.11
775 _ZN3Dtk6Widget12DApplication14isDXcbPlatformEv@Base 2.0.11
776 _ZN3Dtk6Widget12DApplication14loadDXcbPluginEv@Base 2.0.11
777 _ZN3Dtk6Widget12DApplication14loadTranslatorE5QListI7QLocaleE@Base 2.0.11
778 _ZN3Dtk6Widget12DApplication14setAboutDialogEPNS0_12DAboutDialogE@Base 2.0.11
779 _ZN3Dtk6Widget12DApplication14setOOMScoreAdjEi@Base 2.0.11
780 _ZN3Dtk6Widget12DApplication14setProductIconERK5QIcon@Base 2.0.11
781 _ZN3Dtk6Widget12DApplication14setProductNameERK7QString@Base 2.0.11
782 _ZN3Dtk6Widget12DApplication15buildDtkVersionEv@Base 2.0.11
783 _ZN3Dtk6Widget12DApplication16handleHelpActionEv@Base 2.0.11
784 _ZN3Dtk6Widget12DApplication16handleQuitActionEv@Base 2.0.11
785 _ZN3Dtk6Widget12DApplication16iconThemeChangedEv@Base 2.0.11
786 _ZN3Dtk6Widget12DApplication16staticMetaObjectE@Base 2.0.11
787 _ZN3Dtk6Widget12DApplication17handleAboutActionEv@Base 2.0.11
788 _ZN3Dtk6Widget12DApplication17runtimeDtkVersionEv@Base 2.0.11
789 _ZN3Dtk6Widget12DApplication17setSingleInstanceERK7QString@Base 2.0.11
790 _ZN3Dtk6Widget12DApplication17setSingleInstanceERK7QStringNS1_11SingleScopeE@Base 2.0.11
791 _ZN3Dtk6Widget12DApplication18newInstanceStartedEv@Base 2.0.11
792 _ZN3Dtk6Widget12DApplication18registerDDESessionEv@Base 2.0.11
793 _ZN3Dtk6Widget12DApplication18setVisibleMenuIconEb@Base 2.0.11
794 _ZN3Dtk6Widget12DApplication21setApplicationLicenseERK7QString@Base 2.0.11
795 _ZN3Dtk6Widget12DApplication22setApplicationHomePageERK7QString@Base 2.0.11
796 _ZN3Dtk6Widget12DApplication23customQtThemeConfigPathERK7QString@Base 2.0.11
797 _ZN3Dtk6Widget12DApplication25setApplicationDescriptionERK7QString@Base 2.0.11
798 _ZN3Dtk6Widget12DApplication26setVisibleMenuShortcutTextEb@Base 2.0.11
799 _ZN3Dtk6Widget12DApplication27customizedQtThemeConfigPathEv@Base 2.0.11
800 _ZN3Dtk6Widget12DApplication28setVisibleMenuCheckboxWidgetEb@Base 2.0.11
801 _ZN3Dtk6Widget12DApplication29screenDevicePixelRatioChangedEP7QScreen@Base 2.0.11
802 _ZN3Dtk6Widget12DApplication33customQtThemeConfigPathByUserHomeERK7QString@Base 2.0.11
803 _ZN3Dtk6Widget12DApplication33setApplicationAcknowledgementPageERK7QString@Base 2.0.11
804 _ZN3Dtk6Widget12DApplication36setApplicationAcknowledgementVisibleEb@Base 2.0.11
805 _ZN3Dtk6Widget12DApplication6notifyEP7QObjectP6QEvent@Base 2.0.11
806 _ZN3Dtk6Widget12DApplication8setThemeERK7QString@Base 2.0.11
807 _ZN3Dtk6Widget12DApplicationC1ERiPPc@Base 2.0.11
808 _ZN3Dtk6Widget12DApplicationC2ERiPPc@Base 2.0.11
809 _ZN3Dtk6Widget12DApplicationD0Ev@Base 2.0.11
810 _ZN3Dtk6Widget12DApplicationD1Ev@Base 2.0.11
811 _ZN3Dtk6Widget12DApplicationD2Ev@Base 2.0.11
812 _ZN3Dtk6Widget12DArrowButton10enterEventEP6QEvent@Base 2.0.11
813 _ZN3Dtk6Widget12DArrowButton10leaveEventEP6QEvent@Base 2.0.11
814 _ZN3Dtk6Widget12DArrowButton10mouseEnterEv@Base 2.0.11
815 _ZN3Dtk6Widget12DArrowButton10mouseLeaveEv@Base 2.0.11
816 _ZN3Dtk6Widget12DArrowButton10mousePressEv@Base 2.0.11
817 _ZN3Dtk6Widget12DArrowButton11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
818 _ZN3Dtk6Widget12DArrowButton11qt_metacastEPKc@Base 2.0.11
819 _ZN3Dtk6Widget12DArrowButton12mouseReleaseEv@Base 2.0.11
820 _ZN3Dtk6Widget12DArrowButton14setButtonStateENS1_16ArrowButtonStateE@Base 2.0.11
821 _ZN3Dtk6Widget12DArrowButton15initButtonStateEv@Base 2.0.11
822 _ZN3Dtk6Widget12DArrowButton15mousePressEventEP11QMouseEvent@Base 2.0.11
823 _ZN3Dtk6Widget12DArrowButton15updateIconStateENS1_16ArrowButtonStateE@Base 2.0.11
824 _ZN3Dtk6Widget12DArrowButton16staticMetaObjectE@Base 2.0.11
825 _ZN3Dtk6Widget12DArrowButton17mouseReleaseEventEP11QMouseEvent@Base 2.0.11
826 _ZN3Dtk6Widget12DArrowButton17setArrowDirectionENS1_14ArrowDirectionE@Base 2.0.11
827 _ZN3Dtk6Widget12DArrowButton19updateIconDirectionENS1_14ArrowDirectionE@Base 2.0.11
828 _ZN3Dtk6Widget12DArrowButtonC1EP7QWidget@Base 2.0.11
829 _ZN3Dtk6Widget12DArrowButtonC2EP7QWidget@Base 2.0.11
830 _ZN3Dtk6Widget12DArrowButtonD0Ev@Base 2.0.11
831 _ZN3Dtk6Widget12DArrowButtonD1Ev@Base 2.0.11
832 _ZN3Dtk6Widget12DArrowButtonD2Ev@Base 2.0.11
833 _ZN3Dtk6Widget12DExpandGroup11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
834 _ZN3Dtk6Widget12DExpandGroup11qt_metacastEPKc@Base 2.0.11
835 _ZN3Dtk6Widget12DExpandGroup12removeExpandEPNS0_11DBaseExpandE@Base 2.0.11
836 _ZN3Dtk6Widget12DExpandGroup15onExpandChangedEb@Base 2.0.11
837 _ZN3Dtk6Widget12DExpandGroup16staticMetaObjectE@Base 2.0.11
838 _ZN3Dtk6Widget12DExpandGroup5setIdEPNS0_11DBaseExpandEi@Base 2.0.11
839 _ZN3Dtk6Widget12DExpandGroup9addExpandEPNS0_11DBaseExpandEi@Base 2.0.11
840 _ZN3Dtk6Widget12DExpandGroupC1EP7QObject@Base 2.0.11
841 _ZN3Dtk6Widget12DExpandGroupC2EP7QObject@Base 2.0.11
842 _ZN3Dtk6Widget12DExpandGroupD0Ev@Base 2.0.11
843 _ZN3Dtk6Widget12DExpandGroupD1Ev@Base 2.0.11
844 _ZN3Dtk6Widget12DExpandGroupD2Ev@Base 2.0.11
845 _ZN3Dtk6Widget12DHiDPIHelper12loadNxPixmapERK7QString@Base 2.0.11
846 _ZN3Dtk6Widget12DImageButton10enterEventEP6QEvent@Base 2.0.11
847 _ZN3Dtk6Widget12DImageButton10leaveEventEP6QEvent@Base 2.0.11
848 _ZN3Dtk6Widget12DImageButton10setCheckedEb@Base 2.0.11
849 _ZN3Dtk6Widget12DImageButton10setEnabledEb@Base 2.0.11
850 _ZN3Dtk6Widget12DImageButton11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
851 _ZN3Dtk6Widget12DImageButton11qt_metacastEPKc@Base 2.0.11
852 _ZN3Dtk6Widget12DImageButton11setDisabledEb@Base 2.0.11
853 _ZN3Dtk6Widget12DImageButton11setHoverPicERK7QString@Base 2.0.11
854 _ZN3Dtk6Widget12DImageButton11setPressPicERK7QString@Base 2.0.11
855 _ZN3Dtk6Widget12DImageButton12setCheckableEb@Base 2.0.11
856 _ZN3Dtk6Widget12DImageButton12setNormalPicERK7QString@Base 2.0.11
857 _ZN3Dtk6Widget12DImageButton12stateChangedEv@Base 2.0.11
858 _ZN3Dtk6Widget12DImageButton13setCheckedPicERK7QString@Base 2.0.11
859 _ZN3Dtk6Widget12DImageButton14checkedChangedEb@Base 2.0.11
860 _ZN3Dtk6Widget12DImageButton14mouseMoveEventEP11QMouseEvent@Base 2.0.11
861 _ZN3Dtk6Widget12DImageButton14setDisabledPicERK7QString@Base 2.0.11
862 _ZN3Dtk6Widget12DImageButton15mousePressEventEP11QMouseEvent@Base 2.0.11
863 _ZN3Dtk6Widget12DImageButton16staticMetaObjectE@Base 2.0.11
864 _ZN3Dtk6Widget12DImageButton17mouseReleaseEventEP11QMouseEvent@Base 2.0.11
865 _ZN3Dtk6Widget12DImageButton7clickedEv@Base 2.0.11
866 _ZN3Dtk6Widget12DImageButton8setStateENS1_5StateE@Base 2.0.11
867 _ZN3Dtk6Widget12DImageButtonC1EP7QWidget@Base 2.0.11
868 _ZN3Dtk6Widget12DImageButtonC1ERK7QStringS4_S4_P7QWidget@Base 2.0.11
869 _ZN3Dtk6Widget12DImageButtonC1ERK7QStringS4_S4_S4_P7QWidget@Base 2.0.11
870 _ZN3Dtk6Widget12DImageButtonC1ERNS0_19DImageButtonPrivateEP7QWidget@Base 2.0.11
871 _ZN3Dtk6Widget12DImageButtonC2EP7QWidget@Base 2.0.11
872 _ZN3Dtk6Widget12DImageButtonC2ERK7QStringS4_S4_P7QWidget@Base 2.0.11
873 _ZN3Dtk6Widget12DImageButtonC2ERK7QStringS4_S4_S4_P7QWidget@Base 2.0.11
874 _ZN3Dtk6Widget12DImageButtonC2ERNS0_19DImageButtonPrivateEP7QWidget@Base 2.0.11
875 _ZN3Dtk6Widget12DImageButtonD0Ev@Base 2.0.11
876 _ZN3Dtk6Widget12DImageButtonD1Ev@Base 2.0.11
877 _ZN3Dtk6Widget12DImageButtonD2Ev@Base 2.0.11
878 _ZN3Dtk6Widget12DInputDialog10setIntStepEi@Base 2.0.11
879 _ZN3Dtk6Widget12DInputDialog11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
880 _ZN3Dtk6Widget12DInputDialog11qt_metacastEPKc@Base 2.0.11
881 _ZN3Dtk6Widget12DInputDialog11setIntRangeEii@Base 2.0.11
882 _ZN3Dtk6Widget12DInputDialog11setIntValueEi@Base 2.0.11
883 _ZN3Dtk6Widget12DInputDialog12setInputModeENS1_9InputModeE@Base 2.0.11
884 _ZN3Dtk6Widget12DInputDialog12setTextAlertEb@Base 2.0.11
885 _ZN3Dtk6Widget12DInputDialog12setTextValueERK7QString@Base 2.0.11
886 _ZN3Dtk6Widget12DInputDialog13setIntMaximumEi@Base 2.0.11
887 _ZN3Dtk6Widget12DInputDialog13setIntMinimumEi@Base 2.0.11
888 _ZN3Dtk6Widget12DInputDialog14setDoubleRangeEdd@Base 2.0.11
889 _ZN3Dtk6Widget12DInputDialog14setDoubleValueEd@Base 2.0.11
890 _ZN3Dtk6Widget12DInputDialog15intValueChangedEi@Base 2.0.11
891 _ZN3Dtk6Widget12DInputDialog15okButtonClickedEv@Base 2.0.11
892 _ZN3Dtk6Widget12DInputDialog15setOkButtonTextERK7QString@Base 2.0.11
893 _ZN3Dtk6Widget12DInputDialog15setTextEchoModeEN9QLineEdit8EchoModeE@Base 2.0.11
894 _ZN3Dtk6Widget12DInputDialog16intValueSelectedEi@Base 2.0.11
895 _ZN3Dtk6Widget12DInputDialog16setComboBoxItemsERK11QStringList@Base 2.0.11
896 _ZN3Dtk6Widget12DInputDialog16setDoubleMaximumEd@Base 2.0.11
897 _ZN3Dtk6Widget12DInputDialog16setDoubleMinimumEd@Base 2.0.11
898 _ZN3Dtk6Widget12DInputDialog16staticMetaObjectE@Base 2.0.11
899 _ZN3Dtk6Widget12DInputDialog16textAlertChangedEb@Base 2.0.11
900 _ZN3Dtk6Widget12DInputDialog16textValueChangedERK7QString@Base 2.0.11
901 _ZN3Dtk6Widget12DInputDialog17setDoubleDecimalsEi@Base 2.0.11
902 _ZN3Dtk6Widget12DInputDialog17textValueSelectedERK7QString@Base 2.0.11
903 _ZN3Dtk6Widget12DInputDialog18doubleValueChangedEd@Base 2.0.11
904 _ZN3Dtk6Widget12DInputDialog18setOkButtonEnabledEb@Base 2.0.11
905 _ZN3Dtk6Widget12DInputDialog19cancelButtonClickedEv@Base 2.0.11
906 _ZN3Dtk6Widget12DInputDialog19doubleValueSelectedEd@Base 2.0.11
907 _ZN3Dtk6Widget12DInputDialog19setCancelButtonTextERK7QString@Base 2.0.11
908 _ZN3Dtk6Widget12DInputDialog19setComboBoxEditableEb@Base 2.0.11
909 _ZN3Dtk6Widget12DInputDialog23setComboBoxCurrentIndexEi@Base 2.0.11
910 _ZN3Dtk6Widget12DInputDialog27comboBoxCurrentIndexChangedEi@Base 2.0.11
911 _ZN3Dtk6Widget12DInputDialog6getIntEP7QWidgetRK7QStringS6_iiiiPb6QFlagsIN2Qt10WindowTypeEE@Base 2.0.11
912 _ZN3Dtk6Widget12DInputDialog7getItemEP7QWidgetRK7QStringS6_RK11QStringListibPb6QFlagsIN2Qt10WindowTypeEESB_INSC_15InputMethodHintEE@Base 2.0.11
913 _ZN3Dtk6Widget12DInputDialog7getTextEP7QWidgetRK7QStringS6_N9QLineEdit8EchoModeES6_Pb6QFlagsIN2Qt10WindowTypeEESA_INSB_15InputMethodHintEE@Base 2.0.11
914 _ZN3Dtk6Widget12DInputDialog9getDoubleEP7QWidgetRK7QStringS6_dddiPb6QFlagsIN2Qt10WindowTypeEE@Base 2.0.11
915 _ZN3Dtk6Widget12DInputDialog9showEventEP10QShowEvent@Base 2.0.11
916 _ZN3Dtk6Widget12DInputDialogC1EP7QWidget@Base 2.0.11
917 _ZN3Dtk6Widget12DInputDialogC2EP7QWidget@Base 2.0.11
918 _ZN3Dtk6Widget12DInputDialogD0Ev@Base 2.0.11
919 _ZN3Dtk6Widget12DInputDialogD1Ev@Base 2.0.11
920 _ZN3Dtk6Widget12DInputDialogD2Ev@Base 2.0.11
921 _ZN3Dtk6Widget12DStackWidget10pushWidgetEP7QWidgetb@Base 2.0.11
922 _ZN3Dtk6Widget12DStackWidget11busyChangedEb@Base 2.0.11
923 _ZN3Dtk6Widget12DStackWidget11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
924 _ZN3Dtk6Widget12DStackWidget11qt_metacastEPKc@Base 2.0.11
925 _ZN3Dtk6Widget12DStackWidget12depthChangedEi@Base 2.0.11
926 _ZN3Dtk6Widget12DStackWidget12insertWidgetEiP7QWidgetb@Base 2.0.11
927 _ZN3Dtk6Widget12DStackWidget13setTransitionEPNS0_30DAbstractStackWidgetTransitionE@Base 2.0.11
928 _ZN3Dtk6Widget12DStackWidget15setCurrentIndexEiNS0_30DAbstractStackWidgetTransition14TransitionTypeEb@Base 2.0.11
929 _ZN3Dtk6Widget12DStackWidget16setAnimationTypeEN12QEasingCurve4TypeE@Base 2.0.11
930 _ZN3Dtk6Widget12DStackWidget16setCurrentWidgetEP7QWidgetNS0_30DAbstractStackWidgetTransition14TransitionTypeEb@Base 2.0.11
931 _ZN3Dtk6Widget12DStackWidget16staticMetaObjectE@Base 2.0.11
932 _ZN3Dtk6Widget12DStackWidget18widgetDepthChangedEP7QWidgeti@Base 2.0.11
933 _ZN3Dtk6Widget12DStackWidget19currentIndexChangedEi@Base 2.0.11
934 _ZN3Dtk6Widget12DStackWidget20currentWidgetChangedEP7QWidget@Base 2.0.11
935 _ZN3Dtk6Widget12DStackWidget20setAnimationDurationEi@Base 2.0.11
936 _ZN3Dtk6Widget12DStackWidget20switchWidgetFinishedEv@Base 2.0.11
937 _ZN3Dtk6Widget12DStackWidget5clearEv@Base 2.0.11
938 _ZN3Dtk6Widget12DStackWidget9popWidgetEP7QWidgetbib@Base 2.0.11
939 _ZN3Dtk6Widget12DStackWidgetC1EP7QWidget@Base 2.0.11
940 _ZN3Dtk6Widget12DStackWidgetC1ERNS0_19DStackWidgetPrivateEP7QWidget@Base 2.0.11
941 _ZN3Dtk6Widget12DStackWidgetC2EP7QWidget@Base 2.0.11
942 _ZN3Dtk6Widget12DStackWidgetC2ERNS0_19DStackWidgetPrivateEP7QWidget@Base 2.0.11
943 _ZN3Dtk6Widget12DStackWidgetD0Ev@Base 2.0.11
944 _ZN3Dtk6Widget12DStackWidgetD1Ev@Base 2.0.11
945 _ZN3Dtk6Widget12DStackWidgetD2Ev@Base 2.0.11
946 _ZN3Dtk6Widget12DStyleOption4initEP7QWidget@Base 2.0.11
947 _ZN3Dtk6Widget12DSvgRenderer10setViewBoxERK5QRect@Base 2.0.11
948 _ZN3Dtk6Widget12DSvgRenderer10setViewBoxERK6QRectF@Base 2.0.11
949 _ZN3Dtk6Widget12DSvgRenderer4loadERK10QByteArray@Base 2.0.11
950 _ZN3Dtk6Widget12DSvgRenderer4loadERK7QString@Base 2.0.11
951 _ZN3Dtk6Widget12DSvgRenderer6renderEP8QPainter@Base 2.0.11
952 _ZN3Dtk6Widget12DSvgRenderer6renderEP8QPainterRK6QRectF@Base 2.0.11
953 _ZN3Dtk6Widget12DSvgRenderer6renderEP8QPainterRK7QStringRK6QRectF@Base 2.0.11
954 _ZN3Dtk6Widget12DSvgRendererC1EP7QObject@Base 2.0.11
955 _ZN3Dtk6Widget12DSvgRendererC1ERK10QByteArrayP7QObject@Base 2.0.11
956 _ZN3Dtk6Widget12DSvgRendererC1ERK7QStringP7QObject@Base 2.0.11
957 _ZN3Dtk6Widget12DSvgRendererC2EP7QObject@Base 2.0.11
958 _ZN3Dtk6Widget12DSvgRendererC2ERK10QByteArrayP7QObject@Base 2.0.11
959 _ZN3Dtk6Widget12DSvgRendererC2ERK7QStringP7QObject@Base 2.0.11
960 _ZN3Dtk6Widget12DSvgRendererD0Ev@Base 2.0.11
961 _ZN3Dtk6Widget12DSvgRendererD1Ev@Base 2.0.11
962 _ZN3Dtk6Widget12DSvgRendererD2Ev@Base 2.0.11
963 _ZN3Dtk6Widget12DVideoWidget10hueChangedEi@Base 2.0.11
964 _ZN3Dtk6Widget12DVideoWidget10paintEventEP11QPaintEvent@Base 2.0.11
965 _ZN3Dtk6Widget12DVideoWidget11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
966 _ZN3Dtk6Widget12DVideoWidget11qt_metacastEPKc@Base 2.0.11
967 _ZN3Dtk6Widget12DVideoWidget11setContrastEi@Base 2.0.11
968 _ZN3Dtk6Widget12DVideoWidget12roundChangedEb@Base 2.0.11
969 _ZN3Dtk6Widget12DVideoWidget12scaleChangedEd@Base 2.0.11
970 _ZN3Dtk6Widget12DVideoWidget13setBrightnessEi@Base 2.0.11
971 _ZN3Dtk6Widget12DVideoWidget13setSaturationEi@Base 2.0.11
972 _ZN3Dtk6Widget12DVideoWidget15contrastChangedEi@Base 2.0.11
973 _ZN3Dtk6Widget12DVideoWidget16staticMetaObjectE@Base 2.0.11
974 _ZN3Dtk6Widget12DVideoWidget17brightnessChangedEi@Base 2.0.11
975 _ZN3Dtk6Widget12DVideoWidget17saturationChangedEi@Base 2.0.11
976 _ZN3Dtk6Widget12DVideoWidget18setAspectRatioModeEN2Qt15AspectRatioModeE@Base 2.0.11
977 _ZN3Dtk6Widget12DVideoWidget19setMirroredVerticalEb@Base 2.0.11
978 _ZN3Dtk6Widget12DVideoWidget21setMirroredHorizontalEb@Base 2.0.11
979 _ZN3Dtk6Widget12DVideoWidget23mirroredVerticalChangedEb@Base 2.0.11
980 _ZN3Dtk6Widget12DVideoWidget24setSourceVideoPixelRatioEd@Base 2.0.11
981 _ZN3Dtk6Widget12DVideoWidget25mirroredHorizontalChangedEb@Base 2.0.11
982 _ZN3Dtk6Widget12DVideoWidget5paintERK11QVideoFrame@Base 2.0.11
983 _ZN3Dtk6Widget12DVideoWidget6setHueEi@Base 2.0.11
984 _ZN3Dtk6Widget12DVideoWidget7captureEv@Base 2.0.11
985 _ZN3Dtk6Widget12DVideoWidget8setRoundEb@Base 2.0.11
986 _ZN3Dtk6Widget12DVideoWidget8setScaleEd@Base 2.0.11
987 _ZN3Dtk6Widget12DVideoWidget9setSourceEP12QMediaPlayer@Base 2.0.11
988 _ZN3Dtk6Widget12DVideoWidget9setSourceEP7QCamera@Base 2.0.11
989 _ZN3Dtk6Widget12DVideoWidgetC1EP7QWidget@Base 2.0.11
990 _ZN3Dtk6Widget12DVideoWidgetC2EP7QWidget@Base 2.0.11
991 _ZN3Dtk6Widget12DVideoWidgetD0Ev@Base 2.0.11
992 _ZN3Dtk6Widget12DVideoWidgetD1Ev@Base 2.0.11
993 _ZN3Dtk6Widget12DVideoWidgetD2Ev@Base 2.0.11
994 _ZN3Dtk6Widget12DialogButton11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
995 _ZN3Dtk6Widget12DialogButton11qt_metacastEPKc@Base 2.0.11
996 _ZN3Dtk6Widget12DialogButton13setButtonTypeEi@Base 2.0.11
997 _ZN3Dtk6Widget12DialogButton16staticMetaObjectE@Base 2.0.11
998 _ZN3Dtk6Widget12DialogButton17buttonTypeChangedEi@Base 2.0.11
999 _ZN3Dtk6Widget12DialogButtonC1ERK7QStringP7QWidget@Base 2.0.11
1000 _ZN3Dtk6Widget12DialogButtonC2ERK7QStringP7QWidget@Base 2.0.11
1001 _ZN3Dtk6Widget12DialogButtonD0Ev@Base 2.0.11
1002 _ZN3Dtk6Widget12DialogButtonD1Ev@Base 2.0.11
1003 _ZN3Dtk6Widget12DialogButtonD2Ev@Base 2.0.11
1004 _ZN3Dtk6Widget12moveToCenterEP7QWidget@Base 2.0.11
1005 _ZN3Dtk6Widget13ContentLoader11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1006 _ZN3Dtk6Widget13ContentLoader11qt_metacastEPKc@Base 2.0.11
1007 _ZN3Dtk6Widget13ContentLoader16staticMetaObjectE@Base 2.0.11
1008 _ZN3Dtk6Widget13ContentLoaderD0Ev@Base 2.0.11
1009 _ZN3Dtk6Widget13ContentLoaderD1Ev@Base 2.0.11
1010 _ZN3Dtk6Widget13ContentLoaderD2Ev@Base 2.0.11
1011 _ZN3Dtk6Widget13DIpv4LineEdit11eventFilterEP7QObjectP6QEvent@Base 2.0.11
1012 _ZN3Dtk6Widget13DIpv4LineEdit11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1013 _ZN3Dtk6Widget13DIpv4LineEdit11qt_metacastEPKc@Base 2.0.11
1014 _ZN3Dtk6Widget13DIpv4LineEdit11setReadOnlyEb@Base 2.0.11
1015 _ZN3Dtk6Widget13DIpv4LineEdit12setSelectionEii@Base 2.0.11
1016 _ZN3Dtk6Widget13DIpv4LineEdit16staticMetaObjectE@Base 2.0.11
1017 _ZN3Dtk6Widget13DIpv4LineEdit17setCursorPositionEi@Base 2.0.11
1018 _ZN3Dtk6Widget13DIpv4LineEdit9selectAllEv@Base 2.0.11
1019 _ZN3Dtk6Widget13DIpv4LineEditC1EP7QWidget@Base 2.0.11
1020 _ZN3Dtk6Widget13DIpv4LineEditC2EP7QWidget@Base 2.0.11
1021 _ZN3Dtk6Widget13DIpv4LineEditD0Ev@Base 2.0.11
1022 _ZN3Dtk6Widget13DIpv4LineEditD1Ev@Base 2.0.11
1023 _ZN3Dtk6Widget13DIpv4LineEditD2Ev@Base 2.0.11
1024 _ZN3Dtk6Widget13DMPRISControl11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1025 _ZN3Dtk6Widget13DMPRISControl11qt_metacastEPKc@Base 2.0.11
1026 _ZN3Dtk6Widget13DMPRISControl14setPictureSizeERK5QSize@Base 2.0.11
1027 _ZN3Dtk6Widget13DMPRISControl16staticMetaObjectE@Base 2.0.11
1028 _ZN3Dtk6Widget13DMPRISControl17setPictureVisibleEb@Base 2.0.11
1029 _ZN3Dtk6Widget13DMPRISControlC1EP7QWidget@Base 2.0.11
1030 _ZN3Dtk6Widget13DMPRISControlC2EP7QWidget@Base 2.0.11
1031 _ZN3Dtk6Widget13DMPRISControlD0Ev@Base 2.0.11
1032 _ZN3Dtk6Widget13DMPRISControlD1Ev@Base 2.0.11
1033 _ZN3Dtk6Widget13DMPRISControlD2Ev@Base 2.0.11
1034 _ZN3Dtk6Widget13DPasswordEdit11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1035 _ZN3Dtk6Widget13DPasswordEdit11qt_metacastEPKc@Base 2.0.11
1036 _ZN3Dtk6Widget13DPasswordEdit11setEchoModeEN9QLineEdit8EchoModeE@Base 2.0.11
1037 _ZN3Dtk6Widget13DPasswordEdit15echoModeChangedEb@Base 2.0.11
1038 _ZN3Dtk6Widget13DPasswordEdit16staticMetaObjectE@Base 2.0.11
1039 _ZN3Dtk6Widget13DPasswordEditC1EP7QWidget@Base 2.0.11
1040 _ZN3Dtk6Widget13DPasswordEditC2EP7QWidget@Base 2.0.11
1041 _ZN3Dtk6Widget13DPasswordEditD0Ev@Base 2.0.11
1042 _ZN3Dtk6Widget13DPasswordEditD1Ev@Base 2.0.11
1043 _ZN3Dtk6Widget13DPasswordEditD2Ev@Base 2.0.11
1044 _ZN3Dtk6Widget13DShortcutEdit10toEchoModeEv@Base 2.0.11
1045 _ZN3Dtk6Widget13DShortcutEdit11DefaultTipsE@Base 2.0.11
1046 _ZN3Dtk6Widget13DShortcutEdit11eventFilterEP7QObjectP6QEvent@Base 2.0.11
1047 _ZN3Dtk6Widget13DShortcutEdit11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1048 _ZN3Dtk6Widget13DShortcutEdit11qt_metacastEPKc@Base 2.0.11
1049 _ZN3Dtk6Widget13DShortcutEdit13setKeyMappingERK4QMapI7QStringS3_E@Base 2.0.11
1050 _ZN3Dtk6Widget13DShortcutEdit14setShortcutKeyERK7QString@Base 2.0.11
1051 _ZN3Dtk6Widget13DShortcutEdit16clearShortcutKeyEv@Base 2.0.11
1052 _ZN3Dtk6Widget13DShortcutEdit16shortcutKeyPressEP9QKeyEvent@Base 2.0.11
1053 _ZN3Dtk6Widget13DShortcutEdit16staticMetaObjectE@Base 2.0.11
1054 _ZN3Dtk6Widget13DShortcutEdit18invalidShortcutKeyERK7QString@Base 2.0.11
1055 _ZN3Dtk6Widget13DShortcutEdit18isValidShortcutKeyERK7QString@Base 2.0.11
1056 _ZN3Dtk6Widget13DShortcutEdit19convertShortcutKeysERK7QString@Base 2.0.11
1057 _ZN3Dtk6Widget13DShortcutEdit19shortcutKeysChangedERK7QString@Base 2.0.11
1058 _ZN3Dtk6Widget13DShortcutEdit20shortcutKeysFinishedERK7QString@Base 2.0.11
1059 _ZN3Dtk6Widget13DShortcutEdit24setBlockShortcutKeysListERK5QListI7QRegExpE@Base 2.0.11
1060 _ZN3Dtk6Widget13DShortcutEditC1EP7QWidget@Base 2.0.11
1061 _ZN3Dtk6Widget13DShortcutEditC2EP7QWidget@Base 2.0.11
1062 _ZN3Dtk6Widget13DShortcutEditD0Ev@Base 2.0.11
1063 _ZN3Dtk6Widget13DShortcutEditD1Ev@Base 2.0.11
1064 _ZN3Dtk6Widget13DShortcutEditD2Ev@Base 2.0.11
1065 _ZN3Dtk6Widget13DSwitchButton10paintEventEP11QPaintEvent@Base 2.0.11
1066 _ZN3Dtk6Widget13DSwitchButton10setCheckedEb@Base 2.0.11
1067 _ZN3Dtk6Widget13DSwitchButton11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1068 _ZN3Dtk6Widget13DSwitchButton11qt_metacastEPKc@Base 2.0.11
1069 _ZN3Dtk6Widget13DSwitchButton14checkedChangedEb@Base 2.0.11
1070 _ZN3Dtk6Widget13DSwitchButton15mousePressEventEP11QMouseEvent@Base 2.0.11
1071 _ZN3Dtk6Widget13DSwitchButton16staticMetaObjectE@Base 2.0.11
1072 _ZN3Dtk6Widget13DSwitchButton20setEnabledBackgroundE6QColor@Base 2.0.11
1073 _ZN3Dtk6Widget13DSwitchButton21setDisabledBackgroundE6QColor@Base 2.0.11
1074 _ZN3Dtk6Widget13DSwitchButtonC1EP7QWidget@Base 2.0.11
1075 _ZN3Dtk6Widget13DSwitchButtonC2EP7QWidget@Base 2.0.11
1076 _ZN3Dtk6Widget13DSwitchButtonD0Ev@Base 2.0.11
1077 _ZN3Dtk6Widget13DSwitchButtonD1Ev@Base 2.0.11
1078 _ZN3Dtk6Widget13DSwitchButtonD2Ev@Base 2.0.11
1079 _ZN3Dtk6Widget13DThemeManager11eventFilterEP7QObjectP6QEvent@Base 2.0.11
1080 _ZN3Dtk6Widget13DThemeManager11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1081 _ZN3Dtk6Widget13DThemeManager11qt_metacastEPKc@Base 2.0.11
1082 _ZN3Dtk6Widget13DThemeManager12themeChangedE7QString@Base 2.0.11
1083 _ZN3Dtk6Widget13DThemeManager14registerWidgetEP7QWidget11QStringList@Base 2.0.11
1084 _ZN3Dtk6Widget13DThemeManager14registerWidgetEP7QWidgetRK7QStringRK11QStringList@Base 2.0.11
1085 _ZN3Dtk6Widget13DThemeManager16staticMetaObjectE@Base 2.0.11
1086 _ZN3Dtk6Widget13DThemeManager18widgetThemeChangedEP7QWidget7QString@Base 2.0.11
1087 _ZN3Dtk6Widget13DThemeManager26updateThemeOnParentChangedEP7QWidget@Base 2.0.11
1088 _ZN3Dtk6Widget13DThemeManager8instanceEv@Base 2.0.11
1089 _ZN3Dtk6Widget13DThemeManager8setThemeE7QString@Base 2.0.11
1090 _ZN3Dtk6Widget13DThemeManager8setThemeEP7QWidget7QString@Base 2.0.11
1091 _ZN3Dtk6Widget13DThemeManager9updateQssEv@Base 2.0.11
1092 _ZN3Dtk6Widget13DThemeManagerC1Ev@Base 2.0.11
1093 _ZN3Dtk6Widget13DThemeManagerC2Ev@Base 2.0.11
1094 _ZN3Dtk6Widget13DThemeManagerD0Ev@Base 2.0.11
1095 _ZN3Dtk6Widget13DThemeManagerD1Ev@Base 2.0.11
1096 _ZN3Dtk6Widget13DThemeManagerD2Ev@Base 2.0.11
1097 _ZN3Dtk6Widget13DToastPrivate6initUIEv@Base 2.0.11
1098 _ZN3Dtk6Widget13DToastPrivateC1EPNS0_6DToastE@Base 2.0.11
1099 _ZN3Dtk6Widget13DToastPrivateC2EPNS0_6DToastE@Base 2.0.11
1100 _ZN3Dtk6Widget13DToastPrivateD0Ev@Base 2.0.11
1101 _ZN3Dtk6Widget13DToastPrivateD1Ev@Base 2.0.11
1102 _ZN3Dtk6Widget13DToastPrivateD2Ev@Base 2.0.11
1103 _ZN3Dtk6Widget13DTrashManager10cleanTrashEv@Base 2.0.11
1104 _ZN3Dtk6Widget13DTrashManager11moveToTrashERK7QStringb@Base 2.0.11
1105 _ZN3Dtk6Widget13DTrashManager8instanceEv@Base 2.0.11
1106 _ZN3Dtk6Widget13DTrashManagerC1Ev@Base 2.0.11
1107 _ZN3Dtk6Widget13DTrashManagerC2Ev@Base 2.0.11
1108 _ZN3Dtk6Widget13DTrashManagerD0Ev@Base 2.0.11
1109 _ZN3Dtk6Widget13DTrashManagerD1Ev@Base 2.0.11
1110 _ZN3Dtk6Widget13DTrashManagerD2Ev@Base 2.0.11
1111 _ZN3Dtk6Widget13select_eventsEP9_XDisplay@Base 2.0.11
1112 _ZN3Dtk6Widget14DDialogPrivate10updateSizeEv@Base 2.0.11
1113 _ZN3Dtk6Widget14DDialogPrivate16getContentLayoutEv@Base 2.0.11
1114 _ZN3Dtk6Widget14DDialogPrivate18_q_onButtonClickedEv@Base 2.0.11
1115 _ZN3Dtk6Widget14DDialogPrivate25_q_defaultButtonTriggeredEv@Base 2.0.11
1116 _ZN3Dtk6Widget14DDialogPrivate4initEv@Base 2.0.11
1117 _ZN3Dtk6Widget14DDialogPrivateC1EPNS0_7DDialogE@Base 2.0.11
1118 _ZN3Dtk6Widget14DDialogPrivateC2EPNS0_7DDialogE@Base 2.0.11
1119 _ZN3Dtk6Widget14DDialogPrivateD0Ev@Base 2.0.11
1120 _ZN3Dtk6Widget14DDialogPrivateD1Ev@Base 2.0.11
1121 _ZN3Dtk6Widget14DDialogPrivateD2Ev@Base 2.0.11
1122 _ZN3Dtk6Widget14DDoubleSpinBox11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1123 _ZN3Dtk6Widget14DDoubleSpinBox11qt_metacastEPKc@Base 2.0.11
1124 _ZN3Dtk6Widget14DDoubleSpinBox11resizeEventEP12QResizeEvent@Base 2.0.11
1125 _ZN3Dtk6Widget14DDoubleSpinBox12alertChangedEb@Base 2.0.11
1126 _ZN3Dtk6Widget14DDoubleSpinBox15setDefaultValueEd@Base 2.0.11
1127 _ZN3Dtk6Widget14DDoubleSpinBox16staticMetaObjectE@Base 2.0.11
1128 _ZN3Dtk6Widget14DDoubleSpinBox19defaultValueChangedEd@Base 2.0.11
1129 _ZN3Dtk6Widget14DDoubleSpinBox8setAlertEb@Base 2.0.11
1130 _ZN3Dtk6Widget14DDoubleSpinBoxC1EP7QWidget@Base 2.0.11
1131 _ZN3Dtk6Widget14DDoubleSpinBoxC2EP7QWidget@Base 2.0.11
1132 _ZN3Dtk6Widget14DDoubleSpinBoxD0Ev@Base 2.0.11
1133 _ZN3Dtk6Widget14DDoubleSpinBoxD1Ev@Base 2.0.11
1134 _ZN3Dtk6Widget14DDoubleSpinBoxD2Ev@Base 2.0.11
1135 _ZN3Dtk6Widget14DForeignWindow10pidChangedEv@Base 2.0.11
1136 _ZN3Dtk6Widget14DForeignWindow11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1137 _ZN3Dtk6Widget14DForeignWindow11qt_metacastEPKc@Base 2.0.11
1138 _ZN3Dtk6Widget14DForeignWindow14wmClassChangedEv@Base 2.0.11
1139 _ZN3Dtk6Widget14DForeignWindow16staticMetaObjectE@Base 2.0.11
1140 _ZN3Dtk6Widget14DForeignWindow5eventEP6QEvent@Base 2.0.11
1141 _ZN3Dtk6Widget14DForeignWindowC1EP7QWindow@Base 2.0.11
1142 _ZN3Dtk6Widget14DForeignWindowC2EP7QWindow@Base 2.0.11
1143 _ZN3Dtk6Widget14DForeignWindowD0Ev@Base 2.0.11
1144 _ZN3Dtk6Widget14DForeignWindowD1Ev@Base 2.0.11
1145 _ZN3Dtk6Widget14DForeignWindowD2Ev@Base 2.0.11
1146 _ZN3Dtk6Widget14DOptionPrivate10setCheckedEb@Base 2.0.11
1147 _ZN3Dtk6Widget14DOptionPrivate11sizeChangedEP12QResizeEvent@Base 2.0.11
1148 _ZN3Dtk6Widget14DOptionPrivate14setCheckedIconERK7QString@Base 2.0.11
1149 _ZN3Dtk6Widget14DOptionPrivate4initEv@Base 2.0.11
1150 _ZN3Dtk6Widget14DOptionPrivate7setIconERK7QPixmap@Base 2.0.11
1151 _ZN3Dtk6Widget14DOptionPrivate7setIconERK7QString@Base 2.0.11
1152 _ZN3Dtk6Widget14DOptionPrivateC1EPNS0_7DOptionE@Base 2.0.11
1153 _ZN3Dtk6Widget14DOptionPrivateC2EPNS0_7DOptionE@Base 2.0.11
1154 _ZN3Dtk6Widget14DOptionPrivateD0Ev@Base 2.0.11
1155 _ZN3Dtk6Widget14DOptionPrivateD1Ev@Base 2.0.11
1156 _ZN3Dtk6Widget14DOptionPrivateD2Ev@Base 2.0.11
1157 _ZN3Dtk6Widget14DPageIndicator10paintEventEP11QPaintEvent@Base 2.0.11
1158 _ZN3Dtk6Widget14DPageIndicator11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1159 _ZN3Dtk6Widget14DPageIndicator11qt_metacastEPKc@Base 2.0.11
1160 _ZN3Dtk6Widget14DPageIndicator12previousPageEv@Base 2.0.11
1161 _ZN3Dtk6Widget14DPageIndicator12setPageCountEi@Base 2.0.11
1162 _ZN3Dtk6Widget14DPageIndicator13setPointColorE6QColor@Base 2.0.11
1163 _ZN3Dtk6Widget14DPageIndicator14setCurrentPageEi@Base 2.0.11
1164 _ZN3Dtk6Widget14DPageIndicator14setPointRadiusEi@Base 2.0.11
1165 _ZN3Dtk6Widget14DPageIndicator16setPointDistanceEi@Base 2.0.11
1166 _ZN3Dtk6Widget14DPageIndicator16staticMetaObjectE@Base 2.0.11
1167 _ZN3Dtk6Widget14DPageIndicator22setSecondaryPointColorE6QColor@Base 2.0.11
1168 _ZN3Dtk6Widget14DPageIndicator23setSecondaryPointRadiusEi@Base 2.0.11
1169 _ZN3Dtk6Widget14DPageIndicator8nextPageEv@Base 2.0.11
1170 _ZN3Dtk6Widget14DPageIndicatorC1EP7QWidget@Base 2.0.11
1171 _ZN3Dtk6Widget14DPageIndicatorC2EP7QWidget@Base 2.0.11
1172 _ZN3Dtk6Widget14DPageIndicatorD0Ev@Base 2.0.11
1173 _ZN3Dtk6Widget14DPageIndicatorD1Ev@Base 2.0.11
1174 _ZN3Dtk6Widget14DPageIndicatorD2Ev@Base 2.0.11
1175 _ZN3Dtk6Widget14DRegionMonitor11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1176 _ZN3Dtk6Widget14DRegionMonitor11qt_metacastEPKc@Base 2.0.11
1177 _ZN3Dtk6Widget14DRegionMonitor14registerRegionEv@Base 2.0.11
1178 _ZN3Dtk6Widget14DRegionMonitor16setWatchedRegionERK7QRegion@Base 2.0.11
1179 _ZN3Dtk6Widget14DRegionMonitor16staticMetaObjectE@Base 2.0.11
1180 _ZN3Dtk6Widget14DRegionMonitor16unregisterRegionEv@Base 2.0.11
1181 _ZN3Dtk6Widget14DRegionMonitor17setCoordinateTypeENS1_14CoordinateTypeE@Base 2.0.11
1182 _ZN3Dtk6Widget14DRegionMonitorC1EP7QObject@Base 2.0.11
1183 _ZN3Dtk6Widget14DRegionMonitorC2EP7QObject@Base 2.0.11
1184 _ZN3Dtk6Widget14DRegionMonitorD0Ev@Base 2.0.11
1185 _ZN3Dtk6Widget14DRegionMonitorD1Ev@Base 2.0.11
1186 _ZN3Dtk6Widget14DRegionMonitorD2Ev@Base 2.0.11
1187 _ZN3Dtk6Widget14DSliderPrivate16getScalePositionEi@Base 2.0.11
1188 _ZN3Dtk6Widget14DSuggestButton10paintEventEP11QPaintEvent@Base 2.0.11
1189 _ZN3Dtk6Widget14DSuggestButton11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1190 _ZN3Dtk6Widget14DSuggestButton11qt_metacastEPKc@Base 2.0.11
1191 _ZN3Dtk6Widget14DSuggestButton16staticMetaObjectE@Base 2.0.11
1192 _ZN3Dtk6Widget14DSuggestButtonC1EP7QWidget@Base 2.0.11
1193 _ZN3Dtk6Widget14DSuggestButtonC1ERK7QStringP7QWidget@Base 2.0.11
1194 _ZN3Dtk6Widget14DSuggestButtonC2EP7QWidget@Base 2.0.11
1195 _ZN3Dtk6Widget14DSuggestButtonC2ERK7QStringP7QWidget@Base 2.0.11
1196 _ZN3Dtk6Widget14DSuggestButtonD0Ev@Base 2.0.11
1197 _ZN3Dtk6Widget14DSuggestButtonD1Ev@Base 2.0.11
1198 _ZN3Dtk6Widget14DSuggestButtonD2Ev@Base 2.0.11
1199 _ZN3Dtk6Widget14DTabBarPrivate10FullWidget10paintEventEP11QPaintEvent@Base 2.0.11
1200 _ZN3Dtk6Widget14DTabBarPrivate10FullWidgetD0Ev@Base 2.0.11
1201 _ZN3Dtk6Widget14DTabBarPrivate10FullWidgetD1Ev@Base 2.0.11
1202 _ZN3Dtk6Widget14DTabBarPrivate10FullWidgetD2Ev@Base 2.0.11
1203 _ZN3Dtk6Widget14DTabBarPrivate10paintEventEP11QPaintEvent@Base 2.0.11
1204 _ZN3Dtk6Widget14DTabBarPrivate10tabRemovedEi@Base 2.0.11
1205 _ZN3Dtk6Widget14DTabBarPrivate11eventFilterEP7QObjectP6QEvent@Base 2.0.11
1206 _ZN3Dtk6Widget14DTabBarPrivate11makeVisibleEi@Base 2.0.11
1207 _ZN3Dtk6Widget14DTabBarPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1208 _ZN3Dtk6Widget14DTabBarPrivate11qt_metacastEPKc@Base 2.0.11
1209 _ZN3Dtk6Widget14DTabBarPrivate11tabInsertedEi@Base 2.0.11
1210 _ZN3Dtk6Widget14DTabBarPrivate13dragMoveEventEP14QDragMoveEvent@Base 2.0.11
1211 _ZN3Dtk6Widget14DTabBarPrivate13layoutWidgetsEi@Base 2.0.11
1212 _ZN3Dtk6Widget14DTabBarPrivate13startTabFlashEv@Base 2.0.11
1213 _ZN3Dtk6Widget14DTabBarPrivate14autoScrollTabsERK6QPoint@Base 2.0.11
1214 _ZN3Dtk6Widget14DTabBarPrivate14dragEnterEventEP15QDragEnterEvent@Base 2.0.11
1215 _ZN3Dtk6Widget14DTabBarPrivate14dragLeaveEventEP15QDragLeaveEvent@Base 2.0.11
1216 _ZN3Dtk6Widget14DTabBarPrivate14mouseMoveEventEP11QMouseEvent@Base 2.0.11
1217 _ZN3Dtk6Widget14DTabBarPrivate15TabBarAnimation11updateStateEN18QAbstractAnimation5StateES4_@Base 2.0.11
1218 _ZN3Dtk6Widget14DTabBarPrivate15TabBarAnimation18updateCurrentValueERK8QVariant@Base 2.0.11
1219 _ZN3Dtk6Widget14DTabBarPrivate15TabBarAnimationD0Ev@Base 2.0.11
1220 _ZN3Dtk6Widget14DTabBarPrivate15TabBarAnimationD1Ev@Base 2.0.11
1221 _ZN3Dtk6Widget14DTabBarPrivate15TabBarAnimationD2Ev@Base 2.0.11
1222 _ZN3Dtk6Widget14DTabBarPrivate15moveTabFinishedEi@Base 2.0.11
1223 _ZN3Dtk6Widget14DTabBarPrivate15setupMovableTabEv@Base 2.0.11
1224 _ZN3Dtk6Widget14DTabBarPrivate15tabLayoutChangeEv@Base 2.0.11
1225 _ZN3Dtk6Widget14DTabBarPrivate16setupDragableTabEv@Base 2.0.11
1226 _ZN3Dtk6Widget14DTabBarPrivate16staticMetaObjectE@Base 2.0.11
1227 _ZN3Dtk6Widget14DTabBarPrivate17mouseReleaseEventEP11QMouseEvent@Base 2.0.11
1228 _ZN3Dtk6Widget14DTabBarPrivate18stopAutoScrollTabsEv@Base 2.0.11
1229 _ZN3Dtk6Widget14DTabBarPrivate19setDragingFromOtherEb@Base 2.0.11
1230 _ZN3Dtk6Widget14DTabBarPrivate23tabInsertIndexFromMouseE6QPoint@Base 2.0.11
1231 _ZN3Dtk6Widget14DTabBarPrivate24updateMoveingTabPositionERK6QPoint@Base 2.0.11
1232 _ZN3Dtk6Widget14DTabBarPrivate25ensureScrollTabsAnimationEv@Base 2.0.11
1233 _ZN3Dtk6Widget14DTabBarPrivate5slideEii@Base 2.0.11
1234 _ZN3Dtk6Widget14DTabBarPrivate8stopMoveEv@Base 2.0.11
1235 _ZN3Dtk6Widget14DTabBarPrivate9dropEventEP10QDropEvent@Base 2.0.11
1236 _ZN3Dtk6Widget14DTabBarPrivate9layoutTabEi@Base 2.0.11
1237 _ZN3Dtk6Widget14DTabBarPrivate9showEventEP10QShowEvent@Base 2.0.11
1238 _ZN3Dtk6Widget14DTabBarPrivate9startDragEi@Base 2.0.11
1239 _ZN3Dtk6Widget14DTabBarPrivate9startMoveEi@Base 2.0.11
1240 _ZN3Dtk6Widget14DTabBarPrivateC1EPNS0_7DTabBarE@Base 2.0.11
1241 _ZN3Dtk6Widget14DTabBarPrivateC2EPNS0_7DTabBarE@Base 2.0.11
1242 _ZN3Dtk6Widget14DTabBarPrivateD0Ev@Base 2.0.11
1243 _ZN3Dtk6Widget14DTabBarPrivateD1Ev@Base 2.0.11
1244 _ZN3Dtk6Widget14DTabBarPrivateD2Ev@Base 2.0.11
1245 _ZN3Dtk6Widget14DTrashManager_D0Ev@Base 2.0.11
1246 _ZN3Dtk6Widget14DTrashManager_D1Ev@Base 2.0.11
1247 _ZN3Dtk6Widget14DTrashManager_D2Ev@Base 2.0.11
1248 _ZN3Dtk6Widget14DWaterProgress10paintEventEP11QPaintEvent@Base 2.0.11
1249 _ZN3Dtk6Widget14DWaterProgress11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1250 _ZN3Dtk6Widget14DWaterProgress11qt_metacastEPKc@Base 2.0.11
1251 _ZN3Dtk6Widget14DWaterProgress12valueChangedEv@Base 2.0.11
1252 _ZN3Dtk6Widget14DWaterProgress14setTextVisibleEb@Base 2.0.11
1253 _ZN3Dtk6Widget14DWaterProgress16staticMetaObjectE@Base 2.0.11
1254 _ZN3Dtk6Widget14DWaterProgress4stopEv@Base 2.0.11
1255 _ZN3Dtk6Widget14DWaterProgress5startEv@Base 2.0.11
1256 _ZN3Dtk6Widget14DWaterProgress8setValueEi@Base 2.0.11
1257 _ZN3Dtk6Widget14DWaterProgressC1EP7QWidget@Base 2.0.11
1258 _ZN3Dtk6Widget14DWaterProgressC2EP7QWidget@Base 2.0.11
1259 _ZN3Dtk6Widget14DWaterProgressD0Ev@Base 2.0.11
1260 _ZN3Dtk6Widget14DWaterProgressD1Ev@Base 2.0.11
1261 _ZN3Dtk6Widget14DWaterProgressD2Ev@Base 2.0.11
1262 _ZN3Dtk6Widget14xinput_versionEP9_XDisplay@Base 2.0.11
1263 _ZN3Dtk6Widget15ArrowButtonIcon11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1264 _ZN3Dtk6Widget15ArrowButtonIcon11qt_metacastEPKc@Base 2.0.11
1265 _ZN3Dtk6Widget15ArrowButtonIcon14setButtonStateEi@Base 2.0.11
1266 _ZN3Dtk6Widget15ArrowButtonIcon16staticMetaObjectE@Base 2.0.11
1267 _ZN3Dtk6Widget15ArrowButtonIcon17setArrowDirectionEi@Base 2.0.11
1268 _ZN3Dtk6Widget15ArrowButtonIconC1EP7QWidget@Base 2.0.11
1269 _ZN3Dtk6Widget15ArrowButtonIconC2EP7QWidget@Base 2.0.11
1270 _ZN3Dtk6Widget15ArrowButtonIconD0Ev@Base 2.0.11
1271 _ZN3Dtk6Widget15ArrowButtonIconD1Ev@Base 2.0.11
1272 _ZN3Dtk6Widget15ArrowButtonIconD2Ev@Base 2.0.11
1273 _ZN3Dtk6Widget15ArrowHeaderLine10mousePressEv@Base 2.0.11
1274 _ZN3Dtk6Widget15ArrowHeaderLine11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1275 _ZN3Dtk6Widget15ArrowHeaderLine11qt_metacastEPKc@Base 2.0.11
1276 _ZN3Dtk6Widget15ArrowHeaderLine15mousePressEventEP11QMouseEvent@Base 2.0.11
1277 _ZN3Dtk6Widget15ArrowHeaderLine16staticMetaObjectE@Base 2.0.11
1278 _ZN3Dtk6Widget15ArrowHeaderLine21reverseArrowDirectionEv@Base 2.0.11
1279 _ZN3Dtk6Widget15ArrowHeaderLine9setExpandEb@Base 2.0.11
1280 _ZN3Dtk6Widget15ArrowHeaderLineC1EP7QWidget@Base 2.0.11
1281 _ZN3Dtk6Widget15ArrowHeaderLineC2EP7QWidget@Base 2.0.11
1282 _ZN3Dtk6Widget15ArrowHeaderLineD0Ev@Base 2.0.11
1283 _ZN3Dtk6Widget15ArrowHeaderLineD1Ev@Base 2.0.11
1284 _ZN3Dtk6Widget15ArrowHeaderLineD2Ev@Base 2.0.11
1285 _ZN3Dtk6Widget15DAbstractDialog10paintEventEP11QPaintEvent@Base 2.0.11
1286 _ZN3Dtk6Widget15DAbstractDialog11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1287 _ZN3Dtk6Widget15DAbstractDialog11qt_metacastEPKc@Base 2.0.11
1288 _ZN3Dtk6Widget15DAbstractDialog11resizeEventEP12QResizeEvent@Base 2.0.11
1289 _ZN3Dtk6Widget15DAbstractDialog11setGeometryERK5QRect@Base 2.0.11
1290 _ZN3Dtk6Widget15DAbstractDialog11sizeChangedE5QSize@Base 2.0.11
1291 _ZN3Dtk6Widget15DAbstractDialog12moveToCenterEv@Base 2.0.11
1292 _ZN3Dtk6Widget15DAbstractDialog14mouseMoveEventEP11QMouseEvent@Base 2.0.11
1293 _ZN3Dtk6Widget15DAbstractDialog14moveToTopRightEv@Base 2.0.11
1294 _ZN3Dtk6Widget15DAbstractDialog14setBorderColorE6QColor@Base 2.0.11
1295 _ZN3Dtk6Widget15DAbstractDialog15mousePressEventEP11QMouseEvent@Base 2.0.11
1296 _ZN3Dtk6Widget15DAbstractDialog16staticMetaObjectE@Base 2.0.11
1297 _ZN3Dtk6Widget15DAbstractDialog17mouseReleaseEventEP11QMouseEvent@Base 2.0.11
1298 _ZN3Dtk6Widget15DAbstractDialog18moveToCenterByRectERK5QRect@Base 2.0.11
1299 _ZN3Dtk6Widget15DAbstractDialog18setBackgroundColorE6QColor@Base 2.0.11
1300 _ZN3Dtk6Widget15DAbstractDialog18setDisplayPositionENS1_15DisplayPositionE@Base 2.0.11
1301 _ZN3Dtk6Widget15DAbstractDialog20moveToTopRightByRectERK5QRect@Base 2.0.11
1302 _ZN3Dtk6Widget15DAbstractDialog4moveERK6QPoint@Base 2.0.11
1303 _ZN3Dtk6Widget15DAbstractDialog9showEventEP10QShowEvent@Base 2.0.11
1304 _ZN3Dtk6Widget15DAbstractDialogC1EP7QWidget@Base 2.0.11
1305 _ZN3Dtk6Widget15DAbstractDialogC1ERNS0_22DAbstractDialogPrivateEP7QWidget@Base 2.0.11
1306 _ZN3Dtk6Widget15DAbstractDialogC2EP7QWidget@Base 2.0.11
1307 _ZN3Dtk6Widget15DAbstractDialogC2ERNS0_22DAbstractDialogPrivateEP7QWidget@Base 2.0.11
1308 _ZN3Dtk6Widget15DAbstractDialogD0Ev@Base 2.0.11
1309 _ZN3Dtk6Widget15DAbstractDialogD1Ev@Base 2.0.11
1310 _ZN3Dtk6Widget15DAbstractDialogD2Ev@Base 2.0.11
1311 _ZN3Dtk6Widget15DArrowRectangle10paintEventEP11QPaintEvent@Base 2.0.11
1312 _ZN3Dtk6Widget15DArrowRectangle10setContentEP7QWidget@Base 2.0.11
1313 _ZN3Dtk6Widget15DArrowRectangle11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1314 _ZN3Dtk6Widget15DArrowRectangle11qt_metacastEPKc@Base 2.0.11
1315 _ZN3Dtk6Widget15DArrowRectangle11resizeEventEP12QResizeEvent@Base 2.0.11
1316 _ZN3Dtk6Widget15DArrowRectangle12getFixedSizeEv@Base 2.0.11
1317 _ZN3Dtk6Widget15DArrowRectangle13setArrowWidthEi@Base 2.0.11
1318 _ZN3Dtk6Widget15DArrowRectangle14setArrowHeightEi@Base 2.0.11
1319 _ZN3Dtk6Widget15DArrowRectangle14setBorderColorERK6QColor@Base 2.0.11
1320 _ZN3Dtk6Widget15DArrowRectangle14setBorderWidthEi@Base 2.0.11
1321 _ZN3Dtk6Widget15DArrowRectangle16setShadowXOffsetERKd@Base 2.0.11
1322 _ZN3Dtk6Widget15DArrowRectangle16setShadowYOffsetERKd@Base 2.0.11
1323 _ZN3Dtk6Widget15DArrowRectangle16staticMetaObjectE@Base 2.0.11
1324 _ZN3Dtk6Widget15DArrowRectangle17resizeWithContentEv@Base 2.0.11
1325 _ZN3Dtk6Widget15DArrowRectangle17setArrowDirectionENS1_14ArrowDirectionE@Base 2.0.11
1326 _ZN3Dtk6Widget15DArrowRectangle18setBackgroundColorENS0_17DBlurEffectWidget13MaskColorTypeE@Base 2.0.11
1327 _ZN3Dtk6Widget15DArrowRectangle18setBackgroundColorERK6QColor@Base 2.0.11
1328 _ZN3Dtk6Widget15DArrowRectangle19setShadowBlurRadiusERKd@Base 2.0.11
1329 _ZN3Dtk6Widget15DArrowRectangle4moveEii@Base 2.0.11
1330 _ZN3Dtk6Widget15DArrowRectangle4showEii@Base 2.0.11
1331 _ZN3Dtk6Widget15DArrowRectangle5eventEP6QEvent@Base 2.0.11
1332 _ZN3Dtk6Widget15DArrowRectangle8setWidthEi@Base 2.0.11
1333 _ZN3Dtk6Widget15DArrowRectangle9setArrowXEi@Base 2.0.11
1334 _ZN3Dtk6Widget15DArrowRectangle9setArrowYEi@Base 2.0.11
1335 _ZN3Dtk6Widget15DArrowRectangle9setHeightEi@Base 2.0.11
1336 _ZN3Dtk6Widget15DArrowRectangle9setMarginEi@Base 2.0.11
1337 _ZN3Dtk6Widget15DArrowRectangle9setRadiusEi@Base 2.0.11
1338 _ZN3Dtk6Widget15DArrowRectangleC1ENS1_14ArrowDirectionENS1_9FloatModeEP7QWidget@Base 2.0.11
1339 _ZN3Dtk6Widget15DArrowRectangleC1ENS1_14ArrowDirectionEP7QWidget@Base 2.0.11
1340 _ZN3Dtk6Widget15DArrowRectangleC2ENS1_14ArrowDirectionENS1_9FloatModeEP7QWidget@Base 2.0.11
1341 _ZN3Dtk6Widget15DArrowRectangleC2ENS1_14ArrowDirectionEP7QWidget@Base 2.0.11
1342 _ZN3Dtk6Widget15DArrowRectangleD0Ev@Base 2.0.11
1343 _ZN3Dtk6Widget15DArrowRectangleD1Ev@Base 2.0.11
1344 _ZN3Dtk6Widget15DArrowRectangleD2Ev@Base 2.0.11
1345 _ZN3Dtk6Widget15DCircleProgress10enterEventEP6QEvent@Base 2.0.11
1346 _ZN3Dtk6Widget15DCircleProgress10leaveEventEP6QEvent@Base 2.0.11
1347 _ZN3Dtk6Widget15DCircleProgress10paintEventEP11QPaintEvent@Base 2.0.11
1348 _ZN3Dtk6Widget15DCircleProgress11bottomLabelEv@Base 2.0.11
1349 _ZN3Dtk6Widget15DCircleProgress11mouseLeavedEv@Base 2.0.11
1350 _ZN3Dtk6Widget15DCircleProgress11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1351 _ZN3Dtk6Widget15DCircleProgress11qt_metacastEPKc@Base 2.0.11
1352 _ZN3Dtk6Widget15DCircleProgress12mouseEnteredEv@Base 2.0.11
1353 _ZN3Dtk6Widget15DCircleProgress12setLineWidthEi@Base 2.0.11
1354 _ZN3Dtk6Widget15DCircleProgress13setChunkColorERK6QColor@Base 2.0.11
1355 _ZN3Dtk6Widget15DCircleProgress16staticMetaObjectE@Base 2.0.11
1356 _ZN3Dtk6Widget15DCircleProgress17mouseReleaseEventEP11QMouseEvent@Base 2.0.11
1357 _ZN3Dtk6Widget15DCircleProgress18setBackgroundColorERK6QColor@Base 2.0.11
1358 _ZN3Dtk6Widget15DCircleProgress7clickedEv@Base 2.0.11
1359 _ZN3Dtk6Widget15DCircleProgress7setTextERK7QString@Base 2.0.11
1360 _ZN3Dtk6Widget15DCircleProgress8setValueEi@Base 2.0.11
1361 _ZN3Dtk6Widget15DCircleProgress8topLabelEv@Base 2.0.11
1362 _ZN3Dtk6Widget15DCircleProgressC1EP7QWidget@Base 2.0.11
1363 _ZN3Dtk6Widget15DCircleProgressC2EP7QWidget@Base 2.0.11
1364 _ZN3Dtk6Widget15DCircleProgressD0Ev@Base 2.0.11
1365 _ZN3Dtk6Widget15DCircleProgressD1Ev@Base 2.0.11
1366 _ZN3Dtk6Widget15DCircleProgressD2Ev@Base 2.0.11
1367 _ZN3Dtk6Widget15DEnhancedWidget10setEnabledEb@Base 2.0.11
1368 _ZN3Dtk6Widget15DEnhancedWidget11eventFilterEP7QObjectP6QEvent@Base 2.0.11
1369 _ZN3Dtk6Widget15DEnhancedWidget11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1370 _ZN3Dtk6Widget15DEnhancedWidget11qt_metacastEPKc@Base 2.0.11
1371 _ZN3Dtk6Widget15DEnhancedWidget11sizeChangedERK5QSize@Base 2.0.11
1372 _ZN3Dtk6Widget15DEnhancedWidget12widthChangedEi@Base 2.0.11
1373 _ZN3Dtk6Widget15DEnhancedWidget13heightChangedEi@Base 2.0.11
1374 _ZN3Dtk6Widget15DEnhancedWidget13targetChangedEP7QWidget@Base 2.0.11
1375 _ZN3Dtk6Widget15DEnhancedWidget14enabledChangedEb@Base 2.0.11
1376 _ZN3Dtk6Widget15DEnhancedWidget15positionChangedERK6QPoint@Base 2.0.11
1377 _ZN3Dtk6Widget15DEnhancedWidget16staticMetaObjectE@Base 2.0.11
1378 _ZN3Dtk6Widget15DEnhancedWidget6showedEv@Base 2.0.11
1379 _ZN3Dtk6Widget15DEnhancedWidget8xChangedEi@Base 2.0.11
1380 _ZN3Dtk6Widget15DEnhancedWidget8yChangedEi@Base 2.0.11
1381 _ZN3Dtk6Widget15DEnhancedWidget9setTargetEP7QWidget@Base 2.0.11
1382 _ZN3Dtk6Widget15DEnhancedWidgetC1EP7QWidgetP7QObject@Base 2.0.11
1383 _ZN3Dtk6Widget15DEnhancedWidgetC1EPNS0_22DEnhancedWidgetPrivateEP7QWidgetP7QObject@Base 2.0.11
1384 _ZN3Dtk6Widget15DEnhancedWidgetC2EP7QWidgetP7QObject@Base 2.0.11
1385 _ZN3Dtk6Widget15DEnhancedWidgetC2EPNS0_22DEnhancedWidgetPrivateEP7QWidgetP7QObject@Base 2.0.11
1386 _ZN3Dtk6Widget15DEnhancedWidgetD0Ev@Base 2.0.11
1387 _ZN3Dtk6Widget15DEnhancedWidgetD1Ev@Base 2.0.11
1388 _ZN3Dtk6Widget15DEnhancedWidgetD2Ev@Base 2.0.11
1389 _ZN3Dtk6Widget15DSettingsDialog11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1390 _ZN3Dtk6Widget15DSettingsDialog11qt_metacastEPKc@Base 2.0.11
1391 _ZN3Dtk6Widget15DSettingsDialog14updateSettingsEPNS_4Core9DSettingsE@Base 2.0.11
1392 _ZN3Dtk6Widget15DSettingsDialog14updateSettingsERK10QByteArrayPNS_4Core9DSettingsE@Base 2.0.11
1393 _ZN3Dtk6Widget15DSettingsDialog16staticMetaObjectE@Base 2.0.11
1394 _ZN3Dtk6Widget15DSettingsDialogC1EP7QWidget@Base 2.0.11
1395 _ZN3Dtk6Widget15DSettingsDialogC2EP7QWidget@Base 2.0.11
1396 _ZN3Dtk6Widget15DSettingsDialogD0Ev@Base 2.0.11
1397 _ZN3Dtk6Widget15DSettingsDialogD1Ev@Base 2.0.11
1398 _ZN3Dtk6Widget15DSettingsDialogD2Ev@Base 2.0.11
1399 _ZN3Dtk6Widget15DSimpleListItem11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1400 _ZN3Dtk6Widget15DSimpleListItem11qt_metacastEPKc@Base 2.0.11
1401 _ZN3Dtk6Widget15DSimpleListItem16staticMetaObjectE@Base 2.0.11
1402 _ZN3Dtk6Widget15DSimpleListItemC1Ev@Base 2.0.11
1403 _ZN3Dtk6Widget15DSimpleListItemC2Ev@Base 2.0.11
1404 _ZN3Dtk6Widget15DSimpleListView10clearItemsEv@Base 2.0.11
1405 _ZN3Dtk6Widget15DSimpleListView10leaveEventEP6QEvent@Base 2.0.11
1406 _ZN3Dtk6Widget15DSimpleListView10paintEventEP11QPaintEvent@Base 2.0.11
1407 _ZN3Dtk6Widget15DSimpleListView10removeItemEPNS0_15DSimpleListItemE@Base 2.0.11
1408 _ZN3Dtk6Widget15DSimpleListView10wheelEventEP11QWheelEvent@Base 2.0.11
1409 _ZN3Dtk6Widget15DSimpleListView11eventFilterEP7QObjectP6QEvent@Base 2.0.11
1410 _ZN3Dtk6Widget15DSimpleListView11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1411 _ZN3Dtk6Widget15DSimpleListView11qt_metacastEPKc@Base 2.0.11
1412 _ZN3Dtk6Widget15DSimpleListView12refreshItemsE5QListIPNS0_15DSimpleListItemEE@Base 2.0.11
1413 _ZN3Dtk6Widget15DSimpleListView12scrollPageUpEv@Base 2.0.11
1414 _ZN3Dtk6Widget15DSimpleListView12setRowHeightEi@Base 2.0.11
1415 _ZN3Dtk6Widget15DSimpleListView13addSelectionsE5QListIPNS0_15DSimpleListItemEEb@Base 2.0.11
1416 _ZN3Dtk6Widget15DSimpleListView13getScrollbarYEv@Base 2.0.11
1417 _ZN3Dtk6Widget15DSimpleListView13getSelectionsEv@Base 2.0.11
1418 _ZN3Dtk6Widget15DSimpleListView13hideScrollbarEv@Base 2.0.11
1419 _ZN3Dtk6Widget15DSimpleListView13keyPressEventEP9QKeyEvent@Base 2.0.11
1420 _ZN3Dtk6Widget15DSimpleListView13setClipRadiusEi@Base 2.0.11
1421 _ZN3Dtk6Widget15DSimpleListView14mouseMoveEventEP11QMouseEvent@Base 2.0.11
1422 _ZN3Dtk6Widget15DSimpleListView14paintScrollbarEP8QPainter@Base 2.0.11
1423 _ZN3Dtk6Widget15DSimpleListView14scrollPageDownEv@Base 2.0.11
1424 _ZN3Dtk6Widget15DSimpleListView14selectAllItemsEv@Base 2.0.11
1425 _ZN3Dtk6Widget15DSimpleListView14selectLastItemEv@Base 2.0.11
1426 _ZN3Dtk6Widget15DSimpleListView14selectNextItemEv@Base 2.0.11
1427 _ZN3Dtk6Widget15DSimpleListView14selectPrevItemEv@Base 2.0.11
1428 _ZN3Dtk6Widget15DSimpleListView15changeHoverItemE6QPointPNS0_15DSimpleListItemEi@Base 2.0.11
1429 _ZN3Dtk6Widget15DSimpleListView15clearSelectionsEb@Base 2.0.11
1430 _ZN3Dtk6Widget15DSimpleListView15ctrlScrollToEndEv@Base 2.0.11
1431 _ZN3Dtk6Widget15DSimpleListView15getRenderWidthsEv@Base 2.0.11
1432 _ZN3Dtk6Widget15DSimpleListView15mousePressEventEP11QMouseEvent@Base 2.0.11
1433 _ZN3Dtk6Widget15DSimpleListView15rightClickItemsE6QPoint5QListIPNS0_15DSimpleListItemEE@Base 2.0.11
1434 _ZN3Dtk6Widget15DSimpleListView15selectFirstItemEv@Base 2.0.11
1435 _ZN3Dtk6Widget15DSimpleListView15setSingleSelectEb@Base 2.0.11
1436 _ZN3Dtk6Widget15DSimpleListView16ctrlScrollPageUpEv@Base 2.0.11
1437 _ZN3Dtk6Widget15DSimpleListView16ctrlScrollToHomeEv@Base 2.0.11
1438 _ZN3Dtk6Widget15DSimpleListView16shiftSelectToEndEv@Base 2.0.11
1439 _ZN3Dtk6Widget15DSimpleListView16staticMetaObjectE@Base 2.0.11
1440 _ZN3Dtk6Widget15DSimpleListView17mouseHoverChangedEPNS0_15DSimpleListItemES3_i6QPoint@Base 2.0.11
1441 _ZN3Dtk6Widget15DSimpleListView17mousePressChangedEPNS0_15DSimpleListItemEi6QPoint@Base 2.0.11
1442 _ZN3Dtk6Widget15DSimpleListView17mouseReleaseEventEP11QMouseEvent@Base 2.0.11
1443 _ZN3Dtk6Widget15DSimpleListView17shiftSelectPageUpEv@Base 2.0.11
1444 _ZN3Dtk6Widget15DSimpleListView17shiftSelectToHomeEv@Base 2.0.11
1445 _ZN3Dtk6Widget15DSimpleListView17shiftSelectToNextEv@Base 2.0.11
1446 _ZN3Dtk6Widget15DSimpleListView17shiftSelectToPrevEv@Base 2.0.11
1447 _ZN3Dtk6Widget15DSimpleListView18adjustRenderOffsetEi@Base 2.0.11
1448 _ZN3Dtk6Widget15DSimpleListView18ctrlScrollPageDownEv@Base 2.0.11
1449 _ZN3Dtk6Widget15DSimpleListView18getScrollbarHeightEv@Base 2.0.11
1450 _ZN3Dtk6Widget15DSimpleListView18isMouseAtTitleAreaEi@Base 2.0.11
1451 _ZN3Dtk6Widget15DSimpleListView18setColumnHideFlagsE5QListIbEi@Base 2.0.11
1452 _ZN3Dtk6Widget15DSimpleListView18setColumnTitleInfoE5QListI7QStringES2_IiEi@Base 2.0.11
1453 _ZN3Dtk6Widget15DSimpleListView18setSearchAlgorithmEPFbPKNS0_15DSimpleListItemE7QStringE@Base 2.0.11
1454 _ZN3Dtk6Widget15DSimpleListView19changeColumnVisibleEib5QListIbE@Base 2.0.11
1455 _ZN3Dtk6Widget15DSimpleListView19changeSortingStatusEib@Base 2.0.11
1456 _ZN3Dtk6Widget15DSimpleListView19getScrollAreaHeightEv@Base 2.0.11
1457 _ZN3Dtk6Widget15DSimpleListView19isMouseAtScrollAreaEi@Base 2.0.11
1458 _ZN3Dtk6Widget15DSimpleListView19mouseReleaseChangedEPNS0_15DSimpleListItemEi6QPoint@Base 2.0.11
1459 _ZN3Dtk6Widget15DSimpleListView19shiftSelectPageDownEv@Base 2.0.11
1460 _ZN3Dtk6Widget15DSimpleListView21getBottomRenderOffsetEv@Base 2.0.11
1461 _ZN3Dtk6Widget15DSimpleListView23startScrollbarHideTimerEv@Base 2.0.11
1462 _ZN3Dtk6Widget15DSimpleListView24keepSelectWhenClickBlankEb@Base 2.0.11
1463 _ZN3Dtk6Widget15DSimpleListView24selectNextItemWithOffsetEi@Base 2.0.11
1464 _ZN3Dtk6Widget15DSimpleListView24selectPrevItemWithOffsetEi@Base 2.0.11
1465 _ZN3Dtk6Widget15DSimpleListView25shiftSelectItemsWithBoundEii@Base 2.0.11
1466 _ZN3Dtk6Widget15DSimpleListView26setColumnSortingAlgorithmsEP5QListIPFbPKNS0_15DSimpleListItemES5_bEEib@Base 2.0.11
1467 _ZN3Dtk6Widget15DSimpleListView29shiftSelectNextItemWithOffsetEi@Base 2.0.11
1468 _ZN3Dtk6Widget15DSimpleListView29shiftSelectPrevItemWithOffsetEi@Base 2.0.11
1469 _ZN3Dtk6Widget15DSimpleListView6searchE7QString@Base 2.0.11
1470 _ZN3Dtk6Widget15DSimpleListView8addItemsE5QListIPNS0_15DSimpleListItemEE@Base 2.0.11
1471 _ZN3Dtk6Widget15DSimpleListView8setFrameEb6QColord@Base 2.0.11
1472 _ZN3Dtk6Widget15DSimpleListViewC1EP7QWidget@Base 2.0.11
1473 _ZN3Dtk6Widget15DSimpleListViewC2EP7QWidget@Base 2.0.11
1474 _ZN3Dtk6Widget15DSimpleListViewD0Ev@Base 2.0.11
1475 _ZN3Dtk6Widget15DSimpleListViewD1Ev@Base 2.0.11
1476 _ZN3Dtk6Widget15DSimpleListViewD2Ev@Base 2.0.11
1477 _ZN3Dtk6Widget15DSpinBoxPrivate20_q_resizeInsideFrameERK5QSize@Base 2.0.11
1478 _ZN3Dtk6Widget15DSpinBoxPrivate4initEv@Base 2.0.11
1479 _ZN3Dtk6Widget15DSpinBoxPrivateC1EPNS0_8DSpinBoxE@Base 2.0.11
1480 _ZN3Dtk6Widget15DSpinBoxPrivateC2EPNS0_8DSpinBoxE@Base 2.0.11
1481 _ZN3Dtk6Widget15DSpinBoxPrivateD0Ev@Base 2.0.11
1482 _ZN3Dtk6Widget15DSpinBoxPrivateD1Ev@Base 2.0.11
1483 _ZN3Dtk6Widget15DSpinBoxPrivateD2Ev@Base 2.0.11
1484 _ZN3Dtk6Widget15DSpinnerPrivate31createDefaultIndicatorColorListE6QColor@Base 2.0.11
1485 _ZN3Dtk6Widget15DSpinnerPrivateC1EPNS0_8DSpinnerE@Base 2.0.11
1486 _ZN3Dtk6Widget15DSpinnerPrivateC2EPNS0_8DSpinnerE@Base 2.0.11
1487 _ZN3Dtk6Widget15DSpinnerPrivateD0Ev@Base 2.0.11
1488 _ZN3Dtk6Widget15DSpinnerPrivateD1Ev@Base 2.0.11
1489 _ZN3Dtk6Widget15DSpinnerPrivateD2Ev@Base 2.0.11
1490 _ZN3Dtk6Widget15DtkBuildVersion5valueE@Base 2.0.11
1491 _ZN3Dtk6Widget15EnvReplaceGuardC1Ei@Base 2.0.11
1492 _ZN3Dtk6Widget15EnvReplaceGuardC2Ei@Base 2.0.11
1493 _ZN3Dtk6Widget15EnvReplaceGuardD1Ev@Base 2.0.11
1494 _ZN3Dtk6Widget15EnvReplaceGuardD2Ev@Base 2.0.11
1495 _ZN3Dtk6Widget15FilterMouseMove11eventFilterEP7QObjectP6QEvent@Base 2.0.11
1496 _ZN3Dtk6Widget15FilterMouseMove11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1497 _ZN3Dtk6Widget15FilterMouseMove11qt_metacastEPKc@Base 2.0.11
1498 _ZN3Dtk6Widget15FilterMouseMove16staticMetaObjectE@Base 2.0.11
1499 _ZN3Dtk6Widget15FilterMouseMoveC1EP7QObject@Base 2.0.11
1500 _ZN3Dtk6Widget15FilterMouseMoveC2EP7QObject@Base 2.0.11
1501 _ZN3Dtk6Widget15FilterMouseMoveD0Ev@Base 2.0.11
1502 _ZN3Dtk6Widget15FilterMouseMoveD1Ev@Base 2.0.11
1503 _ZN3Dtk6Widget15FilterMouseMoveD2Ev@Base 2.0.11
1504 _ZN3Dtk6Widget16DArrowLineExpand10headerLineEv@Base 2.0.11
1505 _ZN3Dtk6Widget16DArrowLineExpand11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1506 _ZN3Dtk6Widget16DArrowLineExpand11qt_metacastEPKc@Base 2.0.11
1507 _ZN3Dtk6Widget16DArrowLineExpand11resizeEventEP12QResizeEvent@Base 2.0.11
1508 _ZN3Dtk6Widget16DArrowLineExpand16staticMetaObjectE@Base 2.0.11
1509 _ZN3Dtk6Widget16DArrowLineExpand8setTitleERK7QString@Base 2.0.11
1510 _ZN3Dtk6Widget16DArrowLineExpand9setExpandEb@Base 2.0.11
1511 _ZN3Dtk6Widget16DArrowLineExpand9setHeaderEP7QWidget@Base 2.0.11
1512 _ZN3Dtk6Widget16DArrowLineExpandC1EP7QWidget@Base 2.0.11
1513 _ZN3Dtk6Widget16DArrowLineExpandC2EP7QWidget@Base 2.0.11
1514 _ZN3Dtk6Widget16DArrowLineExpandD0Ev@Base 2.0.11
1515 _ZN3Dtk6Widget16DArrowLineExpandD1Ev@Base 2.0.11
1516 _ZN3Dtk6Widget16DArrowLineExpandD2Ev@Base 2.0.11
1517 _ZN3Dtk6Widget16DCrumbTextFormat11setTagColorERK6QColor@Base 2.0.11
1518 _ZN3Dtk6Widget16DCrumbTextFormat12setTextColorERK6QColor@Base 2.0.11
1519 _ZN3Dtk6Widget16DCrumbTextFormat13setBackgroundERK6QBrush@Base 2.0.11
1520 _ZN3Dtk6Widget16DCrumbTextFormat19setBackgroundRadiusEi@Base 2.0.11
1521 _ZN3Dtk6Widget16DCrumbTextFormat7setTextERK7QString@Base 2.0.11
1522 _ZN3Dtk6Widget16DCrumbTextFormatC1ERK11QTextFormat@Base 2.0.11
1523 _ZN3Dtk6Widget16DCrumbTextFormatC1Ei@Base 2.0.11
1524 _ZN3Dtk6Widget16DCrumbTextFormatC1Ev@Base 2.0.11
1525 _ZN3Dtk6Widget16DCrumbTextFormatC2ERK11QTextFormat@Base 2.0.11
1526 _ZN3Dtk6Widget16DCrumbTextFormatC2Ei@Base 2.0.11
1527 _ZN3Dtk6Widget16DCrumbTextFormatC2Ev@Base 2.0.11
1528 _ZN3Dtk6Widget16DDesktopServices10showFolderE4QUrlRK7QString@Base 2.0.11
1529 _ZN3Dtk6Widget16DDesktopServices10showFolderE7QStringRKS2_@Base 2.0.11
1530 _ZN3Dtk6Widget16DDesktopServices11showFoldersE5QListI4QUrlERK7QString@Base 2.0.11
1531 _ZN3Dtk6Widget16DDesktopServices11showFoldersE5QListI7QStringERKS3_@Base 2.0.11
1532 _ZN3Dtk6Widget16DDesktopServices12errorMessageEv@Base 2.0.11
1533 _ZN3Dtk6Widget16DDesktopServices12showFileItemE4QUrlRK7QString@Base 2.0.11
1534 _ZN3Dtk6Widget16DDesktopServices12showFileItemE7QStringRKS2_@Base 2.0.11
1535 _ZN3Dtk6Widget16DDesktopServices13showFileItemsE5QListI4QUrlERK7QString@Base 2.0.11
1536 _ZN3Dtk6Widget16DDesktopServices13showFileItemsE5QListI7QStringERKS3_@Base 2.0.11
1537 _ZN3Dtk6Widget16DDesktopServices19getNameByEffectTypeERKNS1_17SystemSoundEffectE@Base 2.0.11
1538 _ZN3Dtk6Widget16DDesktopServices21playSystemSoundEffectERK7QString@Base 2.0.11
1539 _ZN3Dtk6Widget16DDesktopServices21playSystemSoundEffectERKNS1_17SystemSoundEffectE@Base 2.0.11
1540 _ZN3Dtk6Widget16DDesktopServices21showFileItemPropertieE4QUrlRK7QString@Base 2.0.11
1541 _ZN3Dtk6Widget16DDesktopServices21showFileItemPropertieE7QStringRKS2_@Base 2.0.11
1542 _ZN3Dtk6Widget16DDesktopServices22showFileItemPropertiesE5QListI4QUrlERK7QString@Base 2.0.11
1543 _ZN3Dtk6Widget16DDesktopServices22showFileItemPropertiesE5QListI7QStringERKS3_@Base 2.0.11
1544 _ZN3Dtk6Widget16DDesktopServices24previewSystemSoundEffectERK7QString@Base 2.0.11
1545 _ZN3Dtk6Widget16DDesktopServices24previewSystemSoundEffectERKNS1_17SystemSoundEffectE@Base 2.0.11
1546 _ZN3Dtk6Widget16DDesktopServices5trashE4QUrl@Base 2.0.11
1547 _ZN3Dtk6Widget16DDesktopServices5trashE5QListI4QUrlE@Base 2.0.11
1548 _ZN3Dtk6Widget16DDesktopServices5trashE5QListI7QStringE@Base 2.0.11
1549 _ZN3Dtk6Widget16DDesktopServices5trashE7QString@Base 2.0.11
1550 _ZN3Dtk6Widget16DFileChooserEdit11fileChoosedERK7QString@Base 2.0.11
1551 _ZN3Dtk6Widget16DFileChooserEdit11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1552 _ZN3Dtk6Widget16DFileChooserEdit11qt_metacastEPKc@Base 2.0.11
1553 _ZN3Dtk6Widget16DFileChooserEdit11setFileModeEN11QFileDialog8FileModeE@Base 2.0.11
1554 _ZN3Dtk6Widget16DFileChooserEdit12dialogClosedEi@Base 2.0.11
1555 _ZN3Dtk6Widget16DFileChooserEdit12dialogOpenedEv@Base 2.0.11
1556 _ZN3Dtk6Widget16DFileChooserEdit14setNameFiltersERK11QStringList@Base 2.0.11
1557 _ZN3Dtk6Widget16DFileChooserEdit16staticMetaObjectE@Base 2.0.11
1558 _ZN3Dtk6Widget16DFileChooserEdit24setDialogDisplayPositionENS1_21DialogDisplayPositionE@Base 2.0.11
1559 _ZN3Dtk6Widget16DFileChooserEditC1EP7QWidget@Base 2.0.11
1560 _ZN3Dtk6Widget16DFileChooserEditC2EP7QWidget@Base 2.0.11
1561 _ZN3Dtk6Widget16DFileChooserEditD0Ev@Base 2.0.11
1562 _ZN3Dtk6Widget16DFileChooserEditD1Ev@Base 2.0.11
1563 _ZN3Dtk6Widget16DFileChooserEditD2Ev@Base 2.0.11
1564 _ZN3Dtk6Widget16DKeyboardMonitor11isNumlockOnEv@Base 2.0.11
1565 _ZN3Dtk6Widget16DKeyboardMonitor11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1566 _ZN3Dtk6Widget16DKeyboardMonitor11qt_metacastEPKc@Base 2.0.11
1567 _ZN3Dtk6Widget16DKeyboardMonitor12isCapslockOnEv@Base 2.0.11
1568 _ZN3Dtk6Widget16DKeyboardMonitor16setNumlockStatusERKb@Base 2.0.11
1569 _ZN3Dtk6Widget16DKeyboardMonitor16staticMetaObjectE@Base 2.0.11
1570 _ZN3Dtk6Widget16DKeyboardMonitor20numlockStatusChangedEb@Base 2.0.11
1571 _ZN3Dtk6Widget16DKeyboardMonitor21capslockStatusChangedEb@Base 2.0.11
1572 _ZN3Dtk6Widget16DKeyboardMonitor3runEv@Base 2.0.11
1573 _ZN3Dtk6Widget16DKeyboardMonitor6listenEP9_XDisplay@Base 2.0.11
1574 _ZN3Dtk6Widget16DKeyboardMonitor8instanceEv@Base 2.0.11
1575 _ZN3Dtk6Widget16DKeyboardMonitorC1Ev@Base 2.0.11
1576 _ZN3Dtk6Widget16DKeyboardMonitorC2Ev@Base 2.0.11
1577 _ZN3Dtk6Widget16DKeyboardMonitorD0Ev@Base 2.0.11
1578 _ZN3Dtk6Widget16DKeyboardMonitorD1Ev@Base 2.0.11
1579 _ZN3Dtk6Widget16DKeyboardMonitorD2Ev@Base 2.0.11
1580 _ZN3Dtk6Widget16DLineEditPrivate4initEv@Base 2.0.11
1581 _ZN3Dtk6Widget16DLineEditPrivateC1EPNS0_9DLineEditE@Base 2.0.11
1582 _ZN3Dtk6Widget16DLineEditPrivateC2EPNS0_9DLineEditE@Base 2.0.11
1583 _ZN3Dtk6Widget16DLineEditPrivateD0Ev@Base 2.0.11
1584 _ZN3Dtk6Widget16DLineEditPrivateD1Ev@Base 2.0.11
1585 _ZN3Dtk6Widget16DLineEditPrivateD2Ev@Base 2.0.11
1586 _ZN3Dtk6Widget16DListViewPrivate20onOrientationChangedEv@Base 2.0.11
1587 _ZN3Dtk6Widget16DListViewPrivate4initEv@Base 2.0.11
1588 _ZN3Dtk6Widget16DListViewPrivateC1EPNS0_9DListViewE@Base 2.0.11
1589 _ZN3Dtk6Widget16DListViewPrivateC2EPNS0_9DListViewE@Base 2.0.11
1590 _ZN3Dtk6Widget16DListViewPrivateD0Ev@Base 2.0.11
1591 _ZN3Dtk6Widget16DListViewPrivateD1Ev@Base 2.0.11
1592 _ZN3Dtk6Widget16DListViewPrivateD2Ev@Base 2.0.11
1593 _ZN3Dtk6Widget16DTabBarAddButton10paintEventEP11QPaintEvent@Base 2.0.11
1594 _ZN3Dtk6Widget16DTabBarAddButtonD0Ev@Base 2.0.11
1595 _ZN3Dtk6Widget16DTabBarAddButtonD1Ev@Base 2.0.11
1596 _ZN3Dtk6Widget16DTabBarAddButtonD2Ev@Base 2.0.11
1597 _ZN3Dtk6Widget16DTextEditPrivate4initEv@Base 2.0.11
1598 _ZN3Dtk6Widget16DTextEditPrivateC1EPNS0_9DTextEditE@Base 2.0.11
1599 _ZN3Dtk6Widget16DTextEditPrivateC2EPNS0_9DTextEditE@Base 2.0.11
1600 _ZN3Dtk6Widget16DTextEditPrivateD0Ev@Base 2.0.11
1601 _ZN3Dtk6Widget16DTextEditPrivateD1Ev@Base 2.0.11
1602 _ZN3Dtk6Widget16DTextEditPrivateD2Ev@Base 2.0.11
1603 _ZN3Dtk6Widget16DTitlebarPrivate12targetWindowEv@Base 2.0.11
1604 _ZN3Dtk6Widget16DTitlebarPrivate16_q_showMinimizedEv@Base 2.0.11
1605 _ZN3Dtk6Widget16DTitlebarPrivate16hideOnFullscreenEv@Base 2.0.11
1606 _ZN3Dtk6Widget16DTitlebarPrivate16showOnFullscreenEv@Base 2.0.11
1607 _ZN3Dtk6Widget16DTitlebarPrivate16updateFullscreenEv@Base 2.0.11
1608 _ZN3Dtk6Widget16DTitlebarPrivate17updateButtonsFuncEv@Base 2.0.11
1609 _ZN3Dtk6Widget16DTitlebarPrivate18updateButtonsStateE6QFlagsIN2Qt10WindowTypeEE@Base 2.0.11
1610 _ZN3Dtk6Widget16DTitlebarPrivate20_q_toggleWindowStateEv@Base 2.0.11
1611 _ZN3Dtk6Widget16DTitlebarPrivate21isVisableOnFullscreenEv@Base 2.0.11
1612 _ZN3Dtk6Widget16DTitlebarPrivate22_q_addDefaultMenuItemsEv@Base 2.0.11
1613 _ZN3Dtk6Widget16DTitlebarPrivate22_q_helpActionTriggeredEv@Base 2.0.11
1614 _ZN3Dtk6Widget16DTitlebarPrivate22_q_quitActionTriggeredEv@Base 2.0.11
1615 _ZN3Dtk6Widget16DTitlebarPrivate23_q_aboutActionTriggeredEv@Base 2.0.11
1616 _ZN3Dtk6Widget16DTitlebarPrivate26handleParentWindowIdChangeEv@Base 2.0.11
1617 _ZN3Dtk6Widget16DTitlebarPrivate29handleParentWindowStateChangeEv@Base 2.0.11
1618 _ZN3Dtk6Widget16DTitlebarPrivate31_q_onTopWindowMotifHintsChangedEj@Base 2.0.11
1619 _ZN3Dtk6Widget16DTitlebarPrivate4initEv@Base 2.0.11
1620 _ZN3Dtk6Widget16DTitlebarPrivateC1EPNS0_9DTitlebarE@Base 2.0.11
1621 _ZN3Dtk6Widget16DTitlebarPrivateC2EPNS0_9DTitlebarE@Base 2.0.11
1622 _ZN3Dtk6Widget16DTitlebarPrivateD0Ev@Base 2.0.11
1623 _ZN3Dtk6Widget16DTitlebarPrivateD1Ev@Base 2.0.11
1624 _ZN3Dtk6Widget16DTitlebarPrivateD2Ev@Base 2.0.11
1625 _ZN3Dtk6Widget16DWindowMaxButton11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1626 _ZN3Dtk6Widget16DWindowMaxButton11qt_metacastEPKc@Base 2.0.11
1627 _ZN3Dtk6Widget16DWindowMaxButton12setMaximizedEb@Base 2.0.11
1628 _ZN3Dtk6Widget16DWindowMaxButton16maximizedChangedEb@Base 2.0.11
1629 _ZN3Dtk6Widget16DWindowMaxButton16staticMetaObjectE@Base 2.0.11
1630 _ZN3Dtk6Widget16DWindowMaxButtonC1EP7QWidget@Base 2.0.11
1631 _ZN3Dtk6Widget16DWindowMaxButtonC2EP7QWidget@Base 2.0.11
1632 _ZN3Dtk6Widget16DWindowMaxButtonD0Ev@Base 2.0.11
1633 _ZN3Dtk6Widget16DWindowMaxButtonD1Ev@Base 2.0.11
1634 _ZN3Dtk6Widget16DWindowMaxButtonD2Ev@Base 2.0.11
1635 _ZN3Dtk6Widget16DWindowMinButton11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1636 _ZN3Dtk6Widget16DWindowMinButton11qt_metacastEPKc@Base 2.0.11
1637 _ZN3Dtk6Widget16DWindowMinButton16staticMetaObjectE@Base 2.0.11
1638 _ZN3Dtk6Widget16DWindowMinButtonC1EP7QWidget@Base 2.0.11
1639 _ZN3Dtk6Widget16DWindowMinButtonC2EP7QWidget@Base 2.0.11
1640 _ZN3Dtk6Widget16DWindowMinButtonD0Ev@Base 2.0.11
1641 _ZN3Dtk6Widget16DWindowMinButtonD1Ev@Base 2.0.11
1642 _ZN3Dtk6Widget16DWindowMinButtonD2Ev@Base 2.0.11
1643 _ZN3Dtk6Widget16VideoFormatProxy11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1644 _ZN3Dtk6Widget16VideoFormatProxy11qt_metacastEPKc@Base 2.0.11
1645 _ZN3Dtk6Widget16VideoFormatProxy16staticMetaObjectE@Base 2.0.11
1646 _ZN3Dtk6Widget16VideoFormatProxy19currentFrameChangedEv@Base 2.0.11
1647 _ZN3Dtk6Widget16VideoFormatProxy7presentERK11QVideoFrame@Base 2.0.11
1648 _ZN3Dtk6Widget16VideoFormatProxyC1EP7QObject@Base 2.0.11
1649 _ZN3Dtk6Widget16VideoFormatProxyC2EP7QObject@Base 2.0.11
1650 _ZN3Dtk6Widget16VideoFormatProxyD0Ev@Base 2.0.11
1651 _ZN3Dtk6Widget16VideoFormatProxyD1Ev@Base 2.0.11
1652 _ZN3Dtk6Widget16VideoFormatProxyD2Ev@Base 2.0.11
1653 _ZN3Dtk6Widget17DBlurEffectWidget10paintEventEP11QPaintEvent@Base 2.0.11
1654 _ZN3Dtk6Widget17DBlurEffectWidget11changeEventEP6QEvent@Base 2.0.11
1655 _ZN3Dtk6Widget17DBlurEffectWidget11modeChangedENS1_8BlurModeE@Base 2.0.11
1656 _ZN3Dtk6Widget17DBlurEffectWidget11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1657 _ZN3Dtk6Widget17DBlurEffectWidget11qt_metacastEPKc@Base 2.0.11
1658 _ZN3Dtk6Widget17DBlurEffectWidget11resizeEventEP12QResizeEvent@Base 2.0.11
1659 _ZN3Dtk6Widget17DBlurEffectWidget11setMaskPathERK12QPainterPath@Base 2.0.11
1660 _ZN3Dtk6Widget17DBlurEffectWidget12setBlendModeENS1_9BlendModeE@Base 2.0.11
1661 _ZN3Dtk6Widget17DBlurEffectWidget12setMaskAlphaEh@Base 2.0.11
1662 _ZN3Dtk6Widget17DBlurEffectWidget12setMaskColorE6QColor@Base 2.0.11
1663 _ZN3Dtk6Widget17DBlurEffectWidget12setMaskColorENS1_13MaskColorTypeE@Base 2.0.11
1664 _ZN3Dtk6Widget17DBlurEffectWidget13radiusChangedEi@Base 2.0.11
1665 _ZN3Dtk6Widget17DBlurEffectWidget16blendModeChangedENS1_9BlendModeE@Base 2.0.11
1666 _ZN3Dtk6Widget17DBlurEffectWidget16maskAlphaChangedEh@Base 2.0.11
1667 _ZN3Dtk6Widget17DBlurEffectWidget16maskColorChangedE6QColor@Base 2.0.11
1668 _ZN3Dtk6Widget17DBlurEffectWidget16staticMetaObjectE@Base 2.0.11
1669 _ZN3Dtk6Widget17DBlurEffectWidget18setBlurRectXRadiusEi@Base 2.0.11
1670 _ZN3Dtk6Widget17DBlurEffectWidget18setBlurRectYRadiusEi@Base 2.0.11
1671 _ZN3Dtk6Widget17DBlurEffectWidget22blurRectXRadiusChangedEi@Base 2.0.11
1672 _ZN3Dtk6Widget17DBlurEffectWidget22blurRectYRadiusChangedEi@Base 2.0.11
1673 _ZN3Dtk6Widget17DBlurEffectWidget7setModeENS1_8BlurModeE@Base 2.0.11
1674 _ZN3Dtk6Widget17DBlurEffectWidget9hideEventEP10QHideEvent@Base 2.0.11
1675 _ZN3Dtk6Widget17DBlurEffectWidget9moveEventEP10QMoveEvent@Base 2.0.11
1676 _ZN3Dtk6Widget17DBlurEffectWidget9setRadiusEi@Base 2.0.11
1677 _ZN3Dtk6Widget17DBlurEffectWidget9showEventEP10QShowEvent@Base 2.0.11
1678 _ZN3Dtk6Widget17DBlurEffectWidgetC1EP7QWidget@Base 2.0.11
1679 _ZN3Dtk6Widget17DBlurEffectWidgetC1ERNS0_24DBlurEffectWidgetPrivateEP7QWidget@Base 2.0.11
1680 _ZN3Dtk6Widget17DBlurEffectWidgetC2EP7QWidget@Base 2.0.11
1681 _ZN3Dtk6Widget17DBlurEffectWidgetC2ERNS0_24DBlurEffectWidgetPrivateEP7QWidget@Base 2.0.11
1682 _ZN3Dtk6Widget17DBlurEffectWidgetD0Ev@Base 2.0.11
1683 _ZN3Dtk6Widget17DBlurEffectWidgetD1Ev@Base 2.0.11
1684 _ZN3Dtk6Widget17DBlurEffectWidgetD2Ev@Base 2.0.11
1685 _ZN3Dtk6Widget17DBorderlessWidget10adjustSizeEv@Base 2.0.11
1686 _ZN3Dtk6Widget17DBorderlessWidget10closeEventEP11QCloseEvent@Base 2.0.11
1687 _ZN3Dtk6Widget17DBorderlessWidget10enterEventEP6QEvent@Base 2.0.11
1688 _ZN3Dtk6Widget17DBorderlessWidget10leaveEventEP6QEvent@Base 2.0.11
1689 _ZN3Dtk6Widget17DBorderlessWidget10moveWindowEN2Qt11MouseButtonE@Base 2.0.11
1690 _ZN3Dtk6Widget17DBorderlessWidget10paintEventEP11QPaintEvent@Base 2.0.11
1691 _ZN3Dtk6Widget17DBorderlessWidget10showNormalEv@Base 2.0.11
1692 _ZN3Dtk6Widget17DBorderlessWidget11changeEventEP6QEvent@Base 2.0.11
1693 _ZN3Dtk6Widget17DBorderlessWidget11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1694 _ZN3Dtk6Widget17DBorderlessWidget11qt_metacastEPKc@Base 2.0.11
1695 _ZN3Dtk6Widget17DBorderlessWidget11resizeEventEP12QResizeEvent@Base 2.0.11
1696 _ZN3Dtk6Widget17DBorderlessWidget11windowFlagsEv@Base 2.0.11
1697 _ZN3Dtk6Widget17DBorderlessWidget12removeLayoutEv@Base 2.0.11
1698 _ZN3Dtk6Widget17DBorderlessWidget12setFixedSizeERK5QSize@Base 2.0.11
1699 _ZN3Dtk6Widget17DBorderlessWidget12setFixedSizeEii@Base 2.0.11
1700 _ZN3Dtk6Widget17DBorderlessWidget12setTitleIconERK7QPixmap@Base 2.0.11
1701 _ZN3Dtk6Widget17DBorderlessWidget13optionClickedEv@Base 2.0.11
1702 _ZN3Dtk6Widget17DBorderlessWidget13setFixedWidthEi@Base 2.0.11
1703 _ZN3Dtk6Widget17DBorderlessWidget13showMaximizedEv@Base 2.0.11
1704 _ZN3Dtk6Widget17DBorderlessWidget13showMinimizedEv@Base 2.0.11
1705 _ZN3Dtk6Widget17DBorderlessWidget14mouseMoveEventEP11QMouseEvent@Base 2.0.11
1706 _ZN3Dtk6Widget17DBorderlessWidget14setShadowColorE6QColor@Base 2.0.11
1707 _ZN3Dtk6Widget17DBorderlessWidget14setShadowWidthEi@Base 2.0.11
1708 _ZN3Dtk6Widget17DBorderlessWidget14setWindowFlagsE6QFlagsIN2Qt10WindowTypeEE@Base 2.0.11
1709 _ZN3Dtk6Widget17DBorderlessWidget14showFullScreenEv@Base 2.0.11
1710 _ZN3Dtk6Widget17DBorderlessWidget15decorationFlagsEv@Base 2.0.11
1711 _ZN3Dtk6Widget17DBorderlessWidget15mousePressEventEP11QMouseEvent@Base 2.0.11
1712 _ZN3Dtk6Widget17DBorderlessWidget15setShadowOffsetE6QPoint@Base 2.0.11
1713 _ZN3Dtk6Widget17DBorderlessWidget15setTitlebarMenuEP5QMenu@Base 2.0.11
1714 _ZN3Dtk6Widget17DBorderlessWidget16drawShadowPixmapEv@Base 2.0.11
1715 _ZN3Dtk6Widget17DBorderlessWidget16staticMetaObjectE@Base 2.0.11
1716 _ZN3Dtk6Widget17DBorderlessWidget17mouseReleaseEventEP11QMouseEvent@Base 2.0.11
1717 _ZN3Dtk6Widget17DBorderlessWidget17setTitlebarWidgetEP7QWidgetN2Qt13AlignmentFlagEb@Base 2.0.11
1718 _ZN3Dtk6Widget17DBorderlessWidget17setTitlebarWidgetEP7QWidgetb@Base 2.0.11
1719 _ZN3Dtk6Widget17DBorderlessWidget18setBackgroundColorE6QColor@Base 2.0.11
1720 _ZN3Dtk6Widget17DBorderlessWidget18setBackgroundImageERK7QPixmap@Base 2.0.11
1721 _ZN3Dtk6Widget17DBorderlessWidget18setContentsMarginsERK8QMargins@Base 2.0.11
1722 _ZN3Dtk6Widget17DBorderlessWidget18setContentsMarginsEiiii@Base 2.0.11
1723 _ZN3Dtk6Widget17DBorderlessWidget18setDecorationFlagsE6QFlagsINS1_14DecorationFlagEE@Base 2.0.11
1724 _ZN3Dtk6Widget17DBorderlessWidget18shadowColorChangedE6QColor@Base 2.0.11
1725 _ZN3Dtk6Widget17DBorderlessWidget19shadowOffsetChangedE6QPoint@Base 2.0.11
1726 _ZN3Dtk6Widget17DBorderlessWidget21toggleMaximizedWindowEv@Base 2.0.11
1727 _ZN3Dtk6Widget17DBorderlessWidget22backgroundColorChangedE6QColor@Base 2.0.11
1728 _ZN3Dtk6Widget17DBorderlessWidget22setTitlebarFixedHeightEi@Base 2.0.11
1729 _ZN3Dtk6Widget17DBorderlessWidget4moveERK6QPoint@Base 2.0.11
1730 _ZN3Dtk6Widget17DBorderlessWidget4moveEii@Base 2.0.11
1731 _ZN3Dtk6Widget17DBorderlessWidget6resizeERK5QSize@Base 2.0.11
1732 _ZN3Dtk6Widget17DBorderlessWidget6resizeEii@Base 2.0.11
1733 _ZN3Dtk6Widget17DBorderlessWidget8setTitleERK7QString@Base 2.0.11
1734 _ZN3Dtk6Widget17DBorderlessWidget9setBorderEi@Base 2.0.11
1735 _ZN3Dtk6Widget17DBorderlessWidget9setLayoutEP7QLayout@Base 2.0.11
1736 _ZN3Dtk6Widget17DBorderlessWidget9setRadiusEi@Base 2.0.11
1737 _ZN3Dtk6Widget17DBorderlessWidget9showEventEP10QShowEvent@Base 2.0.11
1738 _ZN3Dtk6Widget17DBorderlessWidgetC1EP7QWidget@Base 2.0.11
1739 _ZN3Dtk6Widget17DBorderlessWidgetC1ERNS0_24DBorderlessWidgetPrivateEP7QWidget@Base 2.0.11
1740 _ZN3Dtk6Widget17DBorderlessWidgetC2EP7QWidget@Base 2.0.11
1741 _ZN3Dtk6Widget17DBorderlessWidgetC2ERNS0_24DBorderlessWidgetPrivateEP7QWidget@Base 2.0.11
1742 _ZN3Dtk6Widget17DBorderlessWidgetD0Ev@Base 2.0.11
1743 _ZN3Dtk6Widget17DBorderlessWidgetD1Ev@Base 2.0.11
1744 _ZN3Dtk6Widget17DBorderlessWidgetD2Ev@Base 2.0.11
1745 _ZN3Dtk6Widget17DBorderlessWindow11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1746 _ZN3Dtk6Widget17DBorderlessWindow11qt_metacastEPKc@Base 2.0.11
1747 _ZN3Dtk6Widget17DBorderlessWindow16setContentLayoutEP7QLayout@Base 2.0.11
1748 _ZN3Dtk6Widget17DBorderlessWindow16setContentWidgetEP7QWidget@Base 2.0.11
1749 _ZN3Dtk6Widget17DBorderlessWindow16staticMetaObjectE@Base 2.0.11
1750 _ZN3Dtk6Widget17DBorderlessWindow9setParentEP7QWidget@Base 2.0.11
1751 _ZN3Dtk6Widget17DBorderlessWindowC1EP7QWidget@Base 2.0.11
1752 _ZN3Dtk6Widget17DBorderlessWindowC2EP7QWidget@Base 2.0.11
1753 _ZN3Dtk6Widget17DBorderlessWindowD0Ev@Base 2.0.11
1754 _ZN3Dtk6Widget17DBorderlessWindowD1Ev@Base 2.0.11
1755 _ZN3Dtk6Widget17DBorderlessWindowD2Ev@Base 2.0.11
1756 _ZN3Dtk6Widget17DBoxWidgetPrivate4initEv@Base 2.0.11
1757 _ZN3Dtk6Widget17DBoxWidgetPrivateC1EPNS0_10DBoxWidgetE@Base 2.0.11
1758 _ZN3Dtk6Widget17DBoxWidgetPrivateC2EPNS0_10DBoxWidgetE@Base 2.0.11
1759 _ZN3Dtk6Widget17DBoxWidgetPrivateD0Ev@Base 2.0.11
1760 _ZN3Dtk6Widget17DBoxWidgetPrivateD1Ev@Base 2.0.11
1761 _ZN3Dtk6Widget17DBoxWidgetPrivateD2Ev@Base 2.0.11
1762 _ZN3Dtk6Widget17DClipEffectWidget10paintEventEP11QPaintEvent@Base 2.0.11
1763 _ZN3Dtk6Widget17DClipEffectWidget10setMarginsE8QMargins@Base 2.0.11
1764 _ZN3Dtk6Widget17DClipEffectWidget11eventFilterEP7QObjectP6QEvent@Base 2.0.11
1765 _ZN3Dtk6Widget17DClipEffectWidget11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1766 _ZN3Dtk6Widget17DClipEffectWidget11qt_metacastEPKc@Base 2.0.11
1767 _ZN3Dtk6Widget17DClipEffectWidget11resizeEventEP12QResizeEvent@Base 2.0.11
1768 _ZN3Dtk6Widget17DClipEffectWidget11setClipPathERK12QPainterPath@Base 2.0.11
1769 _ZN3Dtk6Widget17DClipEffectWidget14marginsChangedE8QMargins@Base 2.0.11
1770 _ZN3Dtk6Widget17DClipEffectWidget15clipPathChangedE12QPainterPath@Base 2.0.11
1771 _ZN3Dtk6Widget17DClipEffectWidget16staticMetaObjectE@Base 2.0.11
1772 _ZN3Dtk6Widget17DClipEffectWidget9hideEventEP10QHideEvent@Base 2.0.11
1773 _ZN3Dtk6Widget17DClipEffectWidget9showEventEP10QShowEvent@Base 2.0.11
1774 _ZN3Dtk6Widget17DClipEffectWidgetC1EP7QWidget@Base 2.0.11
1775 _ZN3Dtk6Widget17DClipEffectWidgetC2EP7QWidget@Base 2.0.11
1776 _ZN3Dtk6Widget17DClipEffectWidgetD0Ev@Base 2.0.11
1777 _ZN3Dtk6Widget17DClipEffectWidgetD1Ev@Base 2.0.11
1778 _ZN3Dtk6Widget17DClipEffectWidgetD2Ev@Base 2.0.11
1779 _ZN3Dtk6Widget17DCrumbEditPrivate16_q_onTextChangedEv@Base 2.0.11
1780 _ZN3Dtk6Widget17DCrumbEditPrivate9makeCrumbEv@Base 2.0.11
1781 _ZN3Dtk6Widget17DCrumbEditPrivateD0Ev@Base 2.0.11
1782 _ZN3Dtk6Widget17DCrumbEditPrivateD1Ev@Base 2.0.11
1783 _ZN3Dtk6Widget17DCrumbEditPrivateD2Ev@Base 2.0.11
1784 _ZN3Dtk6Widget17DFileIconProvider14globalProviderEv@Base 2.0.11
1785 _ZN3Dtk6Widget17DFileIconProviderC1Ev@Base 2.0.11
1786 _ZN3Dtk6Widget17DFileIconProviderC2Ev@Base 2.0.11
1787 _ZN3Dtk6Widget17DFileIconProviderD0Ev@Base 2.0.11
1788 _ZN3Dtk6Widget17DFileIconProviderD1Ev@Base 2.0.11
1789 _ZN3Dtk6Widget17DFileIconProviderD2Ev@Base 2.0.11
1790 _ZN3Dtk6Widget17DLoadingIndicator10setLoadingEb@Base 2.0.11
1791 _ZN3Dtk6Widget17DLoadingIndicator11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1792 _ZN3Dtk6Widget17DLoadingIndicator11qt_metacastEPKc@Base 2.0.11
1793 _ZN3Dtk6Widget17DLoadingIndicator11resizeEventEP12QResizeEvent@Base 2.0.11
1794 _ZN3Dtk6Widget17DLoadingIndicator12setDirectionENS1_17RotationDirectionE@Base 2.0.11
1795 _ZN3Dtk6Widget17DLoadingIndicator13rotateChangedEd@Base 2.0.11
1796 _ZN3Dtk6Widget17DLoadingIndicator14setAniDurationEi@Base 2.0.11
1797 _ZN3Dtk6Widget17DLoadingIndicator14setImageSourceERK7QPixmap@Base 2.0.11
1798 _ZN3Dtk6Widget17DLoadingIndicator15setWidgetSourceEP7QWidget@Base 2.0.11
1799 _ZN3Dtk6Widget17DLoadingIndicator16directionChangedENS1_17RotationDirectionE@Base 2.0.11
1800 _ZN3Dtk6Widget17DLoadingIndicator16setAniEasingTypeEN12QEasingCurve4TypeE@Base 2.0.11
1801 _ZN3Dtk6Widget17DLoadingIndicator16staticMetaObjectE@Base 2.0.11
1802 _ZN3Dtk6Widget17DLoadingIndicator17setAniEasingCurveERK12QEasingCurve@Base 2.0.11
1803 _ZN3Dtk6Widget17DLoadingIndicator18setBackgroundColorERK6QColor@Base 2.0.11
1804 _ZN3Dtk6Widget17DLoadingIndicator4stopEv@Base 2.0.11
1805 _ZN3Dtk6Widget17DLoadingIndicator5startEv@Base 2.0.11
1806 _ZN3Dtk6Widget17DLoadingIndicator9setRotateE8QVariant@Base 2.0.11
1807 _ZN3Dtk6Widget17DLoadingIndicator9setSmoothEb@Base 2.0.11
1808 _ZN3Dtk6Widget17DLoadingIndicatorC1EP7QWidget@Base 2.0.11
1809 _ZN3Dtk6Widget17DLoadingIndicatorC2EP7QWidget@Base 2.0.11
1810 _ZN3Dtk6Widget17DLoadingIndicatorD0Ev@Base 2.0.11
1811 _ZN3Dtk6Widget17DLoadingIndicatorD1Ev@Base 2.0.11
1812 _ZN3Dtk6Widget17DLoadingIndicatorD2Ev@Base 2.0.11
1813 _ZN3Dtk6Widget17DMovableTabWidget10paintEventEP11QPaintEvent@Base 2.0.11
1814 _ZN3Dtk6Widget17DMovableTabWidget9setPixmapERK7QPixmap@Base 2.0.11
1815 _ZN3Dtk6Widget17DMovableTabWidgetC1EP7QWidget@Base 2.0.11
1816 _ZN3Dtk6Widget17DMovableTabWidgetC2EP7QWidget@Base 2.0.11
1817 _ZN3Dtk6Widget17DMovableTabWidgetD0Ev@Base 2.0.11
1818 _ZN3Dtk6Widget17DMovableTabWidgetD1Ev@Base 2.0.11
1819 _ZN3Dtk6Widget17DMovableTabWidgetD2Ev@Base 2.0.11
1820 _ZN3Dtk6Widget17DScrollBarPrivate10setOpacityEd@Base 2.0.11
1821 _ZN3Dtk6Widget17DScrollBarPrivate16_q_updateOpacityEv@Base 2.0.11
1822 _ZN3Dtk6Widget17DScrollBarPrivate4initEv@Base 2.0.11
1823 _ZN3Dtk6Widget17DScrollBarPrivate9_q_hiddenEv@Base 2.0.11
1824 _ZN3Dtk6Widget17DScrollBarPrivateC1EPNS0_10DScrollBarE@Base 2.0.11
1825 _ZN3Dtk6Widget17DScrollBarPrivateC2EPNS0_10DScrollBarE@Base 2.0.11
1826 _ZN3Dtk6Widget17DScrollBarPrivateD0Ev@Base 2.0.11
1827 _ZN3Dtk6Widget17DScrollBarPrivateD1Ev@Base 2.0.11
1828 _ZN3Dtk6Widget17DScrollBarPrivateD2Ev@Base 2.0.11
1829 _ZN3Dtk6Widget17DSegmentedControl11eventFilterEP7QObjectP6QEvent@Base 2.0.11
1830 _ZN3Dtk6Widget17DSegmentedControl11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1831 _ZN3Dtk6Widget17DSegmentedControl11qt_metacastEPKc@Base 2.0.11
1832 _ZN3Dtk6Widget17DSegmentedControl11resizeEventEP12QResizeEvent@Base 2.0.11
1833 _ZN3Dtk6Widget17DSegmentedControl12addSegmentedERK11QStringList@Base 2.0.11
1834 _ZN3Dtk6Widget17DSegmentedControl12addSegmentedERK5QIconRK7QString@Base 2.0.11
1835 _ZN3Dtk6Widget17DSegmentedControl12addSegmentedERK5QListI5QIconERK11QStringList@Base 2.0.11
1836 _ZN3Dtk6Widget17DSegmentedControl12addSegmentedERK7QString@Base 2.0.11
1837 _ZN3Dtk6Widget17DSegmentedControl13buttonClickedEv@Base 2.0.11
1838 _ZN3Dtk6Widget17DSegmentedControl14currentChangedEi@Base 2.0.11
1839 _ZN3Dtk6Widget17DSegmentedControl15insertSegmentedEiRK5QIconRK7QString@Base 2.0.11
1840 _ZN3Dtk6Widget17DSegmentedControl15insertSegmentedEiRK7QString@Base 2.0.11
1841 _ZN3Dtk6Widget17DSegmentedControl15removeSegmentedEi@Base 2.0.11
1842 _ZN3Dtk6Widget17DSegmentedControl15setCurrentIndexEi@Base 2.0.11
1843 _ZN3Dtk6Widget17DSegmentedControl16setAnimationTypeEN12QEasingCurve4TypeE@Base 2.0.11
1844 _ZN3Dtk6Widget17DSegmentedControl16staticMetaObjectE@Base 2.0.11
1845 _ZN3Dtk6Widget17DSegmentedControl19currentTitleChangedE7QString@Base 2.0.11
1846 _ZN3Dtk6Widget17DSegmentedControl20setAnimationDurationEi@Base 2.0.11
1847 _ZN3Dtk6Widget17DSegmentedControl22setCurrentIndexByTitleERK7QString@Base 2.0.11
1848 _ZN3Dtk6Widget17DSegmentedControl23updateHighlightGeometryEb@Base 2.0.11
1849 _ZN3Dtk6Widget17DSegmentedControl24animationDurationChangedEi@Base 2.0.11
1850 _ZN3Dtk6Widget17DSegmentedControl5clearEv@Base 2.0.11
1851 _ZN3Dtk6Widget17DSegmentedControl7setIconEiRK5QIcon@Base 2.0.11
1852 _ZN3Dtk6Widget17DSegmentedControl7setTextEiRK7QString@Base 2.0.11
1853 _ZN3Dtk6Widget17DSegmentedControlC1EP7QWidget@Base 2.0.11
1854 _ZN3Dtk6Widget17DSegmentedControlC2EP7QWidget@Base 2.0.11
1855 _ZN3Dtk6Widget17DSegmentedControlD0Ev@Base 2.0.11
1856 _ZN3Dtk6Widget17DSegmentedControlD1Ev@Base 2.0.11
1857 _ZN3Dtk6Widget17DSegmentedControlD2Ev@Base 2.0.11
1858 _ZN3Dtk6Widget17DSwitchHeaderLine11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1859 _ZN3Dtk6Widget17DSwitchHeaderLine11qt_metacastEPKc@Base 2.0.11
1860 _ZN3Dtk6Widget17DSwitchHeaderLine14checkedChangedEb@Base 2.0.11
1861 _ZN3Dtk6Widget17DSwitchHeaderLine15mousePressEventEP11QMouseEvent@Base 2.0.11
1862 _ZN3Dtk6Widget17DSwitchHeaderLine16staticMetaObjectE@Base 2.0.11
1863 _ZN3Dtk6Widget17DSwitchHeaderLine9setExpandEb@Base 2.0.11
1864 _ZN3Dtk6Widget17DSwitchHeaderLineC1EP7QWidget@Base 2.0.11
1865 _ZN3Dtk6Widget17DSwitchHeaderLineC2EP7QWidget@Base 2.0.11
1866 _ZN3Dtk6Widget17DSwitchHeaderLineD0Ev@Base 2.0.11
1867 _ZN3Dtk6Widget17DSwitchHeaderLineD1Ev@Base 2.0.11
1868 _ZN3Dtk6Widget17DSwitchHeaderLineD2Ev@Base 2.0.11
1869 _ZN3Dtk6Widget17DSwitchLineExpand11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1870 _ZN3Dtk6Widget17DSwitchLineExpand11qt_metacastEPKc@Base 2.0.11
1871 _ZN3Dtk6Widget17DSwitchLineExpand11resizeEventEP12QResizeEvent@Base 2.0.11
1872 _ZN3Dtk6Widget17DSwitchLineExpand16staticMetaObjectE@Base 2.0.11
1873 _ZN3Dtk6Widget17DSwitchLineExpand6headerEv@Base 2.0.11
1874 _ZN3Dtk6Widget17DSwitchLineExpand8setTitleERK7QString@Base 2.0.11
1875 _ZN3Dtk6Widget17DSwitchLineExpand9setExpandEb@Base 2.0.11
1876 _ZN3Dtk6Widget17DSwitchLineExpand9setHeaderEP7QWidget@Base 2.0.11
1877 _ZN3Dtk6Widget17DSwitchLineExpandC1EP7QWidget@Base 2.0.11
1878 _ZN3Dtk6Widget17DSwitchLineExpandC2EP7QWidget@Base 2.0.11
1879 _ZN3Dtk6Widget17DSwitchLineExpandD0Ev@Base 2.0.11
1880 _ZN3Dtk6Widget17DSwitchLineExpandD1Ev@Base 2.0.11
1881 _ZN3Dtk6Widget17DSwitchLineExpandD2Ev@Base 2.0.11
1882 _ZN3Dtk6Widget17DVariantListModel10insertRowsEiiRK11QModelIndex@Base 2.0.11
1883 _ZN3Dtk6Widget17DVariantListModel10removeRowsEiiRK11QModelIndex@Base 2.0.11
1884 _ZN3Dtk6Widget17DVariantListModel7setDataERK11QModelIndexRK8QVarianti@Base 2.0.11
1885 _ZN3Dtk6Widget17DVariantListModelC1EP7QObject@Base 2.0.11
1886 _ZN3Dtk6Widget17DVariantListModelC2EP7QObject@Base 2.0.11
1887 _ZN3Dtk6Widget17DVariantListModelD0Ev@Base 2.0.11
1888 _ZN3Dtk6Widget17DVariantListModelD1Ev@Base 2.0.11
1889 _ZN3Dtk6Widget17DVariantListModelD2Ev@Base 2.0.11
1890 _ZN3Dtk6Widget18DFlowLayoutPrivateC1EPNS0_11DFlowLayoutE@Base 2.0.11
1891 _ZN3Dtk6Widget18DFlowLayoutPrivateC2EPNS0_11DFlowLayoutE@Base 2.0.11
1892 _ZN3Dtk6Widget18DFlowLayoutPrivateD0Ev@Base 2.0.11
1893 _ZN3Dtk6Widget18DFlowLayoutPrivateD1Ev@Base 2.0.11
1894 _ZN3Dtk6Widget18DFlowLayoutPrivateD2Ev@Base 2.0.11
1895 _ZN3Dtk6Widget18DListWidgetPrivate4initEv@Base 2.0.11
1896 _ZN3Dtk6Widget18DListWidgetPrivateC1EPNS0_11DListWidgetE@Base 2.0.11
1897 _ZN3Dtk6Widget18DListWidgetPrivateC2EPNS0_11DListWidgetE@Base 2.0.11
1898 _ZN3Dtk6Widget18DListWidgetPrivateD0Ev@Base 2.0.11
1899 _ZN3Dtk6Widget18DListWidgetPrivateD1Ev@Base 2.0.11
1900 _ZN3Dtk6Widget18DListWidgetPrivateD2Ev@Base 2.0.11
1901 _ZN3Dtk6Widget18DMainWindowPrivate4initEv@Base 2.0.11
1902 _ZN3Dtk6Widget18DMainWindowPrivateC1EPNS0_11DMainWindowE@Base 2.0.11
1903 _ZN3Dtk6Widget18DMainWindowPrivateC2EPNS0_11DMainWindowE@Base 2.0.11
1904 _ZN3Dtk6Widget18DMainWindowPrivateD0Ev@Base 2.0.11
1905 _ZN3Dtk6Widget18DMainWindowPrivateD1Ev@Base 2.0.11
1906 _ZN3Dtk6Widget18DMainWindowPrivateD2Ev@Base 2.0.11
1907 _ZN3Dtk6Widget18DOptionListPrivate12insertOptionEiPNS0_7DOptionE@Base 2.0.11
1908 _ZN3Dtk6Widget18DOptionListPrivate18setCurrentSelectedERK7QString@Base 2.0.11
1909 _ZN3Dtk6Widget18DOptionListPrivate18setCurrentSelectedEi@Base 2.0.11
1910 _ZN3Dtk6Widget18DOptionListPrivate21_q_currentItemChangedEP15QListWidgetItemS3_@Base 2.0.11
1911 _ZN3Dtk6Widget18DOptionListPrivate4initEv@Base 2.0.11
1912 _ZN3Dtk6Widget18DOptionListPrivate9addOptionEPNS0_7DOptionE@Base 2.0.11
1913 _ZN3Dtk6Widget18DOptionListPrivateC1EPNS0_11DOptionListE@Base 2.0.11
1914 _ZN3Dtk6Widget18DOptionListPrivateC2EPNS0_11DOptionListE@Base 2.0.11
1915 _ZN3Dtk6Widget18DOptionListPrivateD0Ev@Base 2.0.11
1916 _ZN3Dtk6Widget18DOptionListPrivateD1Ev@Base 2.0.11
1917 _ZN3Dtk6Widget18DOptionListPrivateD2Ev@Base 2.0.11
1918 _ZN3Dtk6Widget18DPushButtonPrivateC1EPNS0_11DPushButtonE@Base 2.0.11
1919 _ZN3Dtk6Widget18DPushButtonPrivateC2EPNS0_11DPushButtonE@Base 2.0.11
1920 _ZN3Dtk6Widget18DPushButtonPrivateD0Ev@Base 2.0.11
1921 _ZN3Dtk6Widget18DPushButtonPrivateD1Ev@Base 2.0.11
1922 _ZN3Dtk6Widget18DPushButtonPrivateD2Ev@Base 2.0.11
1923 _ZN3Dtk6Widget18DScrollAreaPrivate4initEv@Base 2.0.11
1924 _ZN3Dtk6Widget18DScrollAreaPrivateC1EPNS0_11DScrollAreaE@Base 2.0.11
1925 _ZN3Dtk6Widget18DScrollAreaPrivateC2EPNS0_11DScrollAreaE@Base 2.0.11
1926 _ZN3Dtk6Widget18DScrollAreaPrivateD0Ev@Base 2.0.11
1927 _ZN3Dtk6Widget18DScrollAreaPrivateD1Ev@Base 2.0.11
1928 _ZN3Dtk6Widget18DScrollAreaPrivateD2Ev@Base 2.0.11
1929 _ZN3Dtk6Widget18DSeparatorVertical11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1930 _ZN3Dtk6Widget18DSeparatorVertical11qt_metacastEPKc@Base 2.0.11
1931 _ZN3Dtk6Widget18DSeparatorVertical16staticMetaObjectE@Base 2.0.11
1932 _ZN3Dtk6Widget18DSeparatorVerticalC1EP7QWidget@Base 2.0.11
1933 _ZN3Dtk6Widget18DSeparatorVerticalC2EP7QWidget@Base 2.0.11
1934 _ZN3Dtk6Widget18DSeparatorVerticalD0Ev@Base 2.0.11
1935 _ZN3Dtk6Widget18DSeparatorVerticalD1Ev@Base 2.0.11
1936 _ZN3Dtk6Widget18DSeparatorVerticalD2Ev@Base 2.0.11
1937 _ZN3Dtk6Widget18DShortcutEditLabel10enterEventEP6QEvent@Base 2.0.11
1938 _ZN3Dtk6Widget18DShortcutEditLabel10leaveEventEP6QEvent@Base 2.0.11
1939 _ZN3Dtk6Widget18DShortcutEditLabel11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1940 _ZN3Dtk6Widget18DShortcutEditLabel11qt_metacastEPKc@Base 2.0.11
1941 _ZN3Dtk6Widget18DShortcutEditLabel12setEchoStateENS1_9EchoStateE@Base 2.0.11
1942 _ZN3Dtk6Widget18DShortcutEditLabel16staticMetaObjectE@Base 2.0.11
1943 _ZN3Dtk6Widget18DShortcutEditLabel18colorSettingChangeEv@Base 2.0.11
1944 _ZN3Dtk6Widget18DShortcutEditLabelC1EP7QWidget@Base 2.0.11
1945 _ZN3Dtk6Widget18DShortcutEditLabelC2EP7QWidget@Base 2.0.11
1946 _ZN3Dtk6Widget18DShortcutEditLabelD0Ev@Base 2.0.11
1947 _ZN3Dtk6Widget18DShortcutEditLabelD1Ev@Base 2.0.11
1948 _ZN3Dtk6Widget18DShortcutEditLabelD2Ev@Base 2.0.11
1949 _ZN3Dtk6Widget18DSpinBox_getButtonERK7QString@Base 2.0.11
1950 _ZN3Dtk6Widget18DThumbnailProvider11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1951 _ZN3Dtk6Widget18DThumbnailProvider11qt_metacastEPKc@Base 2.0.11
1952 _ZN3Dtk6Widget18DThumbnailProvider12setSizeLimitERK9QMimeTypex@Base 2.0.11
1953 _ZN3Dtk6Widget18DThumbnailProvider15createThumbnailERK9QFileInfoNS1_4SizeE@Base 2.0.11
1954 _ZN3Dtk6Widget18DThumbnailProvider16staticMetaObjectE@Base 2.0.11
1955 _ZN3Dtk6Widget18DThumbnailProvider19setDefaultSizeLimitEx@Base 2.0.11
1956 _ZN3Dtk6Widget18DThumbnailProvider20appendToProduceQueueERK9QFileInfoNS1_4SizeESt8functionIFvRK7QStringEE@Base 2.0.11
1957 _ZN3Dtk6Widget18DThumbnailProvider20removeInProduceQueueERK9QFileInfoNS1_4SizeE@Base 2.0.11
1958 _ZN3Dtk6Widget18DThumbnailProvider3runEv@Base 2.0.11
1959 _ZN3Dtk6Widget18DThumbnailProvider8instanceEv@Base 2.0.11
1960 _ZN3Dtk6Widget18DThumbnailProviderC1EP7QObject@Base 2.0.11
1961 _ZN3Dtk6Widget18DThumbnailProviderC2EP7QObject@Base 2.0.11
1962 _ZN3Dtk6Widget18DThumbnailProviderD0Ev@Base 2.0.11
1963 _ZN3Dtk6Widget18DThumbnailProviderD1Ev@Base 2.0.11
1964 _ZN3Dtk6Widget18DThumbnailProviderD2Ev@Base 2.0.11
1965 _ZN3Dtk6Widget18DTickEffectPrivate13initDirectionEv@Base 2.0.11
1966 _ZN3Dtk6Widget18DTickEffectPrivate4initEv@Base 2.0.11
1967 _ZN3Dtk6Widget18DTickEffectPrivateC1EPNS0_11DTickEffectE@Base 2.0.11
1968 _ZN3Dtk6Widget18DTickEffectPrivateC2EPNS0_11DTickEffectE@Base 2.0.11
1969 _ZN3Dtk6Widget18DTickEffectPrivateD0Ev@Base 2.0.11
1970 _ZN3Dtk6Widget18DTickEffectPrivateD1Ev@Base 2.0.11
1971 _ZN3Dtk6Widget18DTickEffectPrivateD2Ev@Base 2.0.11
1972 _ZN3Dtk6Widget18DWindowCloseButton11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
1973 _ZN3Dtk6Widget18DWindowCloseButton11qt_metacastEPKc@Base 2.0.11
1974 _ZN3Dtk6Widget18DWindowCloseButton16staticMetaObjectE@Base 2.0.11
1975 _ZN3Dtk6Widget18DWindowCloseButtonC1EP7QWidget@Base 2.0.11
1976 _ZN3Dtk6Widget18DWindowCloseButtonC2EP7QWidget@Base 2.0.11
1977 _ZN3Dtk6Widget18DWindowCloseButtonD0Ev@Base 2.0.11
1978 _ZN3Dtk6Widget18DWindowCloseButtonD1Ev@Base 2.0.11
1979 _ZN3Dtk6Widget18DWindowCloseButtonD2Ev@Base 2.0.11
1980 _ZN3Dtk6Widget18DWindowGroupLeader12removeWindowEP7QWidget@Base 2.0.11
1981 _ZN3Dtk6Widget18DWindowGroupLeader12removeWindowEP7QWindow@Base 2.0.11
1982 _ZN3Dtk6Widget18DWindowGroupLeader9addWindowEP7QWidget@Base 2.0.11
1983 _ZN3Dtk6Widget18DWindowGroupLeader9addWindowEP7QWindow@Base 2.0.11
1984 _ZN3Dtk6Widget18DWindowGroupLeaderC1Ej@Base 2.0.11
1985 _ZN3Dtk6Widget18DWindowGroupLeaderC2Ej@Base 2.0.11
1986 _ZN3Dtk6Widget18DWindowGroupLeaderD1Ev@Base 2.0.11
1987 _ZN3Dtk6Widget18DWindowGroupLeaderD2Ev@Base 2.0.11
1988 _ZN3Dtk6Widget19DAboutDialogPrivate10loadPixmapERK7QString@Base 2.0.11
1989 _ZN3Dtk6Widget19DAboutDialogPrivate15initWebsiteInfoEv@Base 2.0.11
1990 _ZN3Dtk6Widget19DAboutDialogPrivate18_q_onLinkActivatedERK7QString@Base 2.0.11
1991 _ZN3Dtk6Widget19DAboutDialogPrivate18updateWebsiteLabelEv@Base 2.0.11
1992 _ZN3Dtk6Widget19DAboutDialogPrivate19websiteLinkTemplateE@Base 2.0.11
1993 _ZN3Dtk6Widget19DAboutDialogPrivate26updateAcknowledgementLabelEv@Base 2.0.11
1994 _ZN3Dtk6Widget19DAboutDialogPrivate4initEv@Base 2.0.11
1995 _ZN3Dtk6Widget19DAboutDialogPrivateC1EPNS0_12DAboutDialogE@Base 2.0.11
1996 _ZN3Dtk6Widget19DAboutDialogPrivateC2EPNS0_12DAboutDialogE@Base 2.0.11
1997 _ZN3Dtk6Widget19DAboutDialogPrivateD0Ev@Base 2.0.11
1998 _ZN3Dtk6Widget19DAboutDialogPrivateD1Ev@Base 2.0.11
1999 _ZN3Dtk6Widget19DAboutDialogPrivateD2Ev@Base 2.0.11
2000 _ZN3Dtk6Widget19DAnchorsBasePrivate14getValueByInfoEPKNS0_11DAnchorInfoE@Base 2.0.11
2001 _ZN3Dtk6Widget19DAnchorsBasePrivate14setValueByInfoEdPKNS0_11DAnchorInfoE@Base 2.0.11
2002 _ZN3Dtk6Widget19DAnchorsBasePrivate20getTargetValueByInfoEPKNS0_11DAnchorInfoE@Base 2.0.11
2003 _ZN3Dtk6Widget19DAnchorsBasePrivate9widgetMapE@Base 2.0.11
2004 _ZN3Dtk6Widget19DApplicationPrivate14loadTranslatorE5QListINS_4Core8DPathBufEERK7QStringS2_I7QLocaleE@Base 2.0.11
2005 _ZN3Dtk6Widget19DApplicationPrivate17loadDtkTranslatorE5QListI7QLocaleE@Base 2.0.11
2006 _ZN3Dtk6Widget19DApplicationPrivate18isUserManualExistsEv@Base 2.0.11
2007 _ZN3Dtk6Widget19DApplicationPrivate23setSingleInstanceByDbusERK7QString@Base 2.0.11
2008 _ZN3Dtk6Widget19DApplicationPrivate28setSingleInstanceBySemaphoreERK7QString@Base 2.0.11
2009 _ZN3Dtk6Widget19DApplicationPrivate8setThemeERK7QString@Base 2.0.11
2010 _ZN3Dtk6Widget19DApplicationPrivateC1EPNS0_12DApplicationE@Base 2.0.11
2011 _ZN3Dtk6Widget19DApplicationPrivateC2EPNS0_12DApplicationE@Base 2.0.11
2012 _ZN3Dtk6Widget19DApplicationPrivateD0Ev@Base 2.0.11
2013 _ZN3Dtk6Widget19DApplicationPrivateD1Ev@Base 2.0.11
2014 _ZN3Dtk6Widget19DApplicationPrivateD2Ev@Base 2.0.11
2015 _ZN3Dtk6Widget19DGraphicsClipEffect10setMarginsERK8QMargins@Base 2.0.11
2016 _ZN3Dtk6Widget19DGraphicsClipEffect11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
2017 _ZN3Dtk6Widget19DGraphicsClipEffect11qt_metacastEPKc@Base 2.0.11
2018 _ZN3Dtk6Widget19DGraphicsClipEffect11setClipPathERK12QPainterPath@Base 2.0.11
2019 _ZN3Dtk6Widget19DGraphicsClipEffect14marginsChangedE8QMargins@Base 2.0.11
2020 _ZN3Dtk6Widget19DGraphicsClipEffect15clipPathChangedE12QPainterPath@Base 2.0.11
2021 _ZN3Dtk6Widget19DGraphicsClipEffect16staticMetaObjectE@Base 2.0.11
2022 _ZN3Dtk6Widget19DGraphicsClipEffect4drawEP8QPainter@Base 2.0.11
2023 _ZN3Dtk6Widget19DGraphicsClipEffectC1EP7QObject@Base 2.0.11
2024 _ZN3Dtk6Widget19DGraphicsClipEffectC2EP7QObject@Base 2.0.11
2025 _ZN3Dtk6Widget19DGraphicsClipEffectD0Ev@Base 2.0.11
2026 _ZN3Dtk6Widget19DGraphicsClipEffectD1Ev@Base 2.0.11
2027 _ZN3Dtk6Widget19DGraphicsClipEffectD2Ev@Base 2.0.11
2028 _ZN3Dtk6Widget19DGraphicsGlowEffect11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
2029 _ZN3Dtk6Widget19DGraphicsGlowEffect11qt_metacastEPKc@Base 2.0.11
2030 _ZN3Dtk6Widget19DGraphicsGlowEffect16staticMetaObjectE@Base 2.0.11
2031 _ZN3Dtk6Widget19DGraphicsGlowEffect4drawEP8QPainter@Base 2.0.11
2032 _ZN3Dtk6Widget19DGraphicsGlowEffectC1EP7QObject@Base 2.0.11
2033 _ZN3Dtk6Widget19DGraphicsGlowEffectC2EP7QObject@Base 2.0.11
2034 _ZN3Dtk6Widget19DGraphicsGlowEffectD0Ev@Base 2.0.11
2035 _ZN3Dtk6Widget19DGraphicsGlowEffectD1Ev@Base 2.0.11
2036 _ZN3Dtk6Widget19DGraphicsGlowEffectD2Ev@Base 2.0.11
2037 _ZN3Dtk6Widget19DImageButtonPrivate10loadPixmapERK7QString@Base 2.0.11
2038 _ZN3Dtk6Widget19DImageButtonPrivate10updateIconEv@Base 2.0.11
2039 _ZN3Dtk6Widget19DImageButtonPrivate8setStateENS0_12DImageButton5StateE@Base 2.0.11
2040 _ZN3Dtk6Widget19DImageButtonPrivateC1EPNS0_12DImageButtonE@Base 2.0.11
2041 _ZN3Dtk6Widget19DImageButtonPrivateC2EPNS0_12DImageButtonE@Base 2.0.11
2042 _ZN3Dtk6Widget19DImageButtonPrivateD0Ev@Base 2.0.11
2043 _ZN3Dtk6Widget19DImageButtonPrivateD1Ev@Base 2.0.11
2044 _ZN3Dtk6Widget19DImageButtonPrivateD2Ev@Base 2.0.11
2045 _ZN3Dtk6Widget19DInputDialogPrivate4initEv@Base 2.0.11
2046 _ZN3Dtk6Widget19DInputDialogPrivateC1EPNS0_12DInputDialogE@Base 2.0.11
2047 _ZN3Dtk6Widget19DInputDialogPrivateC2EPNS0_12DInputDialogE@Base 2.0.11
2048 _ZN3Dtk6Widget19DInputDialogPrivateD0Ev@Base 2.0.11
2049 _ZN3Dtk6Widget19DInputDialogPrivateD1Ev@Base 2.0.11
2050 _ZN3Dtk6Widget19DInputDialogPrivateD2Ev@Base 2.0.11
2051 _ZN3Dtk6Widget19DPasswdEditAnimated11eventFilterEP7QObjectP6QEvent@Base 2.0.11
2052 _ZN3Dtk6Widget19DPasswdEditAnimated11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
2053 _ZN3Dtk6Widget19DPasswdEditAnimated11qt_metacastEPKc@Base 2.0.11
2054 _ZN3Dtk6Widget19DPasswdEditAnimated11setEchoModeEN9QLineEdit8EchoModeE@Base 2.0.11
2055 _ZN3Dtk6Widget19DPasswdEditAnimated12alertChangedEb@Base 2.0.11
2056 _ZN3Dtk6Widget19DPasswdEditAnimated13setSubmitIconERK7QStringS4_S4_@Base 2.0.11
2057 _ZN3Dtk6Widget19DPasswdEditAnimated14invalidMessageEv@Base 2.0.11
2058 _ZN3Dtk6Widget19DPasswdEditAnimated16editFocusChangedEb@Base 2.0.11
2059 _ZN3Dtk6Widget19DPasswdEditAnimated16loadingAnimationEv@Base 2.0.11
2060 _ZN3Dtk6Widget19DPasswdEditAnimated16staticMetaObjectE@Base 2.0.11
2061 _ZN3Dtk6Widget19DPasswdEditAnimated17setLoadAnimEnableEb@Base 2.0.11
2062 _ZN3Dtk6Widget19DPasswdEditAnimated18loadingEffectColorEv@Base 2.0.11
2063 _ZN3Dtk6Widget19DPasswdEditAnimated18setEyeButtonEnableEb@Base 2.0.11
2064 _ZN3Dtk6Widget19DPasswdEditAnimated19updateAlertPositionEv@Base 2.0.11
2065 _ZN3Dtk6Widget19DPasswdEditAnimated21keyboardButtonClickedEv@Base 2.0.11
2066 _ZN3Dtk6Widget19DPasswdEditAnimated21setLoadingEffectColorERK6QColor@Base 2.0.11
2067 _ZN3Dtk6Widget19DPasswdEditAnimated21setSubmitButtonEnableEb@Base 2.0.11
2068 _ZN3Dtk6Widget19DPasswdEditAnimated23setKeyboardButtonEnableEb@Base 2.0.11
2069 _ZN3Dtk6Widget19DPasswdEditAnimated26setCapslockIndicatorEnableEb@Base 2.0.11
2070 _ZN3Dtk6Widget19DPasswdEditAnimated5abortEv@Base 2.0.11
2071 _ZN3Dtk6Widget19DPasswdEditAnimated5alertEv@Base 2.0.11
2072 _ZN3Dtk6Widget19DPasswdEditAnimated6submitERK7QString@Base 2.0.11
2073 _ZN3Dtk6Widget19DPasswdEditAnimated8lineEditEv@Base 2.0.11
2074 _ZN3Dtk6Widget19DPasswdEditAnimated9abortAuthEv@Base 2.0.11
2075 _ZN3Dtk6Widget19DPasswdEditAnimated9hideAlertEv@Base 2.0.11
2076 _ZN3Dtk6Widget19DPasswdEditAnimated9hideEventEP10QHideEvent@Base 2.0.11
2077 _ZN3Dtk6Widget19DPasswdEditAnimated9showAlertERK7QString@Base 2.0.11
2078 _ZN3Dtk6Widget19DPasswdEditAnimated9showEventEP10QShowEvent@Base 2.0.11
2079 _ZN3Dtk6Widget19DPasswdEditAnimatedC1EP7QWidget@Base 2.0.11
2080 _ZN3Dtk6Widget19DPasswdEditAnimatedC2EP7QWidget@Base 2.0.11
2081 _ZN3Dtk6Widget19DPasswdEditAnimatedD0Ev@Base 2.0.11
2082 _ZN3Dtk6Widget19DPasswdEditAnimatedD1Ev@Base 2.0.11
2083 _ZN3Dtk6Widget19DPasswdEditAnimatedD2Ev@Base 2.0.11
2084 _ZN3Dtk6Widget19DSegmentedHighlight11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
2085 _ZN3Dtk6Widget19DSegmentedHighlight11qt_metacastEPKc@Base 2.0.11
2086 _ZN3Dtk6Widget19DSegmentedHighlight16staticMetaObjectE@Base 2.0.11
2087 _ZN3Dtk6Widget19DSegmentedHighlightC1EP7QWidget@Base 2.0.11
2088 _ZN3Dtk6Widget19DSegmentedHighlightC2EP7QWidget@Base 2.0.11
2089 _ZN3Dtk6Widget19DSegmentedHighlightD0Ev@Base 2.0.11
2090 _ZN3Dtk6Widget19DSegmentedHighlightD1Ev@Base 2.0.11
2091 _ZN3Dtk6Widget19DSegmentedHighlightD2Ev@Base 2.0.11
2092 _ZN3Dtk6Widget19DStackWidgetPrivate15setCurrentIndexEi@Base 2.0.11
2093 _ZN3Dtk6Widget19DStackWidgetPrivate4initEv@Base 2.0.11
2094 _ZN3Dtk6Widget19DStackWidgetPrivateC1EPNS0_12DStackWidgetE@Base 2.0.11
2095 _ZN3Dtk6Widget19DStackWidgetPrivateC2EPNS0_12DStackWidgetE@Base 2.0.11
2096 _ZN3Dtk6Widget19DStackWidgetPrivateD0Ev@Base 2.0.11
2097 _ZN3Dtk6Widget19DStackWidgetPrivateD1Ev@Base 2.0.11
2098 _ZN3Dtk6Widget19DStackWidgetPrivateD2Ev@Base 2.0.11
2099 _ZN3Dtk6Widget19DSvgRendererPrivateC1EPNS_4Core7DObjectE@Base 2.0.11
2100 _ZN3Dtk6Widget19DSvgRendererPrivateC2EPNS_4Core7DObjectE@Base 2.0.11
2101 _ZN3Dtk6Widget19DSvgRendererPrivateD0Ev@Base 2.0.11
2102 _ZN3Dtk6Widget19DSvgRendererPrivateD1Ev@Base 2.0.11
2103 _ZN3Dtk6Widget19DSvgRendererPrivateD2Ev@Base 2.0.11
2104 _ZN3Dtk6Widget19DVideoWidgetPrivateC1EPNS0_12DVideoWidgetE@Base 2.0.11
2105 _ZN3Dtk6Widget19DVideoWidgetPrivateC2EPNS0_12DVideoWidgetE@Base 2.0.11
2106 _ZN3Dtk6Widget19DVideoWidgetPrivateD0Ev@Base 2.0.11
2107 _ZN3Dtk6Widget19DVideoWidgetPrivateD1Ev@Base 2.0.11
2108 _ZN3Dtk6Widget19DVideoWidgetPrivateD2Ev@Base 2.0.11
2109 _ZN3Dtk6Widget19DWindowOptionButton11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
2110 _ZN3Dtk6Widget19DWindowOptionButton11qt_metacastEPKc@Base 2.0.11
2111 _ZN3Dtk6Widget19DWindowOptionButton16staticMetaObjectE@Base 2.0.11
2112 _ZN3Dtk6Widget19DWindowOptionButtonC1EP7QWidget@Base 2.0.11
2113 _ZN3Dtk6Widget19DWindowOptionButtonC2EP7QWidget@Base 2.0.11
2114 _ZN3Dtk6Widget19DWindowOptionButtonD0Ev@Base 2.0.11
2115 _ZN3Dtk6Widget19DWindowOptionButtonD1Ev@Base 2.0.11
2116 _ZN3Dtk6Widget19DWindowOptionButtonD2Ev@Base 2.0.11
2117 _ZN3Dtk6Widget20CrumbObjectInterface10drawObjectEP8QPainterRK6QRectFP13QTextDocumentiRK11QTextFormat@Base 2.0.11
2118 _ZN3Dtk6Widget20CrumbObjectInterface11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
2119 _ZN3Dtk6Widget20CrumbObjectInterface11qt_metacastEPKc@Base 2.0.11
2120 _ZN3Dtk6Widget20CrumbObjectInterface13intrinsicSizeEP13QTextDocumentiRK11QTextFormat@Base 2.0.11
2121 _ZN3Dtk6Widget20CrumbObjectInterface16staticMetaObjectE@Base 2.0.11
2122 _ZN3Dtk6Widget20CrumbObjectInterfaceD0Ev@Base 2.0.11
2123 _ZN3Dtk6Widget20CrumbObjectInterfaceD1Ev@Base 2.0.11
2124 _ZN3Dtk6Widget20CrumbObjectInterfaceD2Ev@Base 2.0.11
2125 _ZN3Dtk6Widget20DIpv4LineEditPrivate20_q_setIpLineEditTextERK7QString@Base 2.0.11
2126 _ZN3Dtk6Widget20DIpv4LineEditPrivate21_q_updateLineEditTextEv@Base 2.0.11
2127 _ZN3Dtk6Widget20DIpv4LineEditPrivate4initEv@Base 2.0.11
2128 _ZN3Dtk6Widget20DIpv4LineEditPrivate7getEditEv@Base 2.0.11
2129 _ZN3Dtk6Widget20DIpv4LineEditPrivate8getLabelEv@Base 2.0.11
2130 _ZN3Dtk6Widget20DIpv4LineEditPrivate8setFocusEb@Base 2.0.11
2131 _ZN3Dtk6Widget20DIpv4LineEditPrivateC1EPNS0_13DIpv4LineEditE@Base 2.0.11
2132 _ZN3Dtk6Widget20DIpv4LineEditPrivateC2EPNS0_13DIpv4LineEditE@Base 2.0.11
2133 _ZN3Dtk6Widget20DIpv4LineEditPrivateD0Ev@Base 2.0.11
2134 _ZN3Dtk6Widget20DIpv4LineEditPrivateD1Ev@Base 2.0.11
2135 _ZN3Dtk6Widget20DIpv4LineEditPrivateD2Ev@Base 2.0.11
2136 _ZN3Dtk6Widget20DMPRISControlPrivate16_q_loadMPRISPathERK7QString@Base 2.0.11
2137 _ZN3Dtk6Widget20DMPRISControlPrivate16_q_onNextClickedEv@Base 2.0.11
2138 _ZN3Dtk6Widget20DMPRISControlPrivate16_q_onPlayClickedEv@Base 2.0.11
2139 _ZN3Dtk6Widget20DMPRISControlPrivate16_q_onPrevClickedEv@Base 2.0.11
2140 _ZN3Dtk6Widget20DMPRISControlPrivate17_q_onPauseClickedEv@Base 2.0.11
2141 _ZN3Dtk6Widget20DMPRISControlPrivate18_q_removeMPRISPathERK7QString@Base 2.0.11
2142 _ZN3Dtk6Widget20DMPRISControlPrivate20_q_onMetaDataChangedEv@Base 2.0.11
2143 _ZN3Dtk6Widget20DMPRISControlPrivate22_q_onCanControlChangedEb@Base 2.0.11
2144 _ZN3Dtk6Widget20DMPRISControlPrivate26_q_onPlaybackStatusChangedEv@Base 2.0.11
2145 _ZN3Dtk6Widget20DMPRISControlPrivate4initEv@Base 2.0.11
2146 _ZN3Dtk6Widget20DMPRISControlPrivateC1EPNS0_13DMPRISControlE@Base 2.0.11
2147 _ZN3Dtk6Widget20DMPRISControlPrivateC2EPNS0_13DMPRISControlE@Base 2.0.11
2148 _ZN3Dtk6Widget20DMPRISControlPrivateD0Ev@Base 2.0.11
2149 _ZN3Dtk6Widget20DMPRISControlPrivateD1Ev@Base 2.0.11
2150 _ZN3Dtk6Widget20DMPRISControlPrivateD2Ev@Base 2.0.11
2151 _ZN3Dtk6Widget20DPasswordEditPrivate17_q_toggleEchoModeEv@Base 2.0.11
2152 _ZN3Dtk6Widget20DPasswordEditPrivate4initEv@Base 2.0.11
2153 _ZN3Dtk6Widget20DPasswordEditPrivateC1EPNS0_13DPasswordEditE@Base 2.0.11
2154 _ZN3Dtk6Widget20DPasswordEditPrivateC2EPNS0_13DPasswordEditE@Base 2.0.11
2155 _ZN3Dtk6Widget20DPasswordEditPrivateD0Ev@Base 2.0.11
2156 _ZN3Dtk6Widget20DPasswordEditPrivateD1Ev@Base 2.0.11
2157 _ZN3Dtk6Widget20DPasswordEditPrivateD2Ev@Base 2.0.11
2158 _ZN3Dtk6Widget20DPictureSequenceView11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
2159 _ZN3Dtk6Widget20DPictureSequenceView11qt_metacastEPKc@Base 2.0.11
2160 _ZN3Dtk6Widget20DPictureSequenceView13setSingleShotEb@Base 2.0.11
2161 _ZN3Dtk6Widget20DPictureSequenceView16staticMetaObjectE@Base 2.0.11
2162 _ZN3Dtk6Widget20DPictureSequenceView18setPictureSequenceERK11QStringListb@Base 2.0.11
2163 _ZN3Dtk6Widget20DPictureSequenceView18setPictureSequenceERK5QListI7QPixmapEb@Base 2.0.11
2164 _ZN3Dtk6Widget20DPictureSequenceView18setPictureSequenceERK7QStringRK5QPairIiiEib@Base 2.0.11
2165 _ZN3Dtk6Widget20DPictureSequenceView4playEv@Base 2.0.11
2166 _ZN3Dtk6Widget20DPictureSequenceView4stopEv@Base 2.0.11
2167 _ZN3Dtk6Widget20DPictureSequenceView5pauseEv@Base 2.0.11
2168 _ZN3Dtk6Widget20DPictureSequenceView8setSpeedEi@Base 2.0.11
2169 _ZN3Dtk6Widget20DPictureSequenceViewC1EP7QWidget@Base 2.0.11
2170 _ZN3Dtk6Widget20DPictureSequenceViewC2EP7QWidget@Base 2.0.11
2171 _ZN3Dtk6Widget20DPictureSequenceViewD0Ev@Base 2.0.11
2172 _ZN3Dtk6Widget20DPictureSequenceViewD1Ev@Base 2.0.11
2173 _ZN3Dtk6Widget20DPictureSequenceViewD2Ev@Base 2.0.11
2174 _ZN3Dtk6Widget20DSeparatorHorizontal11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
2175 _ZN3Dtk6Widget20DSeparatorHorizontal11qt_metacastEPKc@Base 2.0.11
2176 _ZN3Dtk6Widget20DSeparatorHorizontal16staticMetaObjectE@Base 2.0.11
2177 _ZN3Dtk6Widget20DSeparatorHorizontalC1EP7QWidget@Base 2.0.11
2178 _ZN3Dtk6Widget20DSeparatorHorizontalC2EP7QWidget@Base 2.0.11
2179 _ZN3Dtk6Widget20DSeparatorHorizontalD0Ev@Base 2.0.11
2180 _ZN3Dtk6Widget20DSeparatorHorizontalD1Ev@Base 2.0.11
2181 _ZN3Dtk6Widget20DSeparatorHorizontalD2Ev@Base 2.0.11
2182 _ZN3Dtk6Widget20DStyleOptionLineEdit4initEP7QWidget@Base 2.0.11
2183 _ZN3Dtk6Widget20DSwitchButtonPrivate4initEv@Base 2.0.11
2184 _ZN3Dtk6Widget20DSwitchButtonPrivateC1EPNS0_13DSwitchButtonE@Base 2.0.11
2185 _ZN3Dtk6Widget20DSwitchButtonPrivateC2EPNS0_13DSwitchButtonE@Base 2.0.11
2186 _ZN3Dtk6Widget20DSwitchButtonPrivateD0Ev@Base 2.0.11
2187 _ZN3Dtk6Widget20DSwitchButtonPrivateD1Ev@Base 2.0.11
2188 _ZN3Dtk6Widget20DSwitchButtonPrivateD2Ev@Base 2.0.11
2189 _ZN3Dtk6Widget20DThemeManagerPrivate14registerWidgetEP7QWidgetRK7QStringRK11QStringList@Base 2.0.11
2190 _ZN3Dtk6Widget20DThemeManagerPrivateD0Ev@Base 2.0.11
2191 _ZN3Dtk6Widget20DThemeManagerPrivateD1Ev@Base 2.0.11
2192 _ZN3Dtk6Widget20DThemeManagerPrivateD2Ev@Base 2.0.11
2193 _ZN3Dtk6Widget20DTrashManagerPrivate15removeFileOrDirERK7QString@Base 2.0.11
2194 _ZN3Dtk6Widget20DTrashManagerPrivate18removeFromIteratorER12QDirIterator@Base 2.0.11
2195 _ZN3Dtk6Widget20DTrashManagerPrivateD0Ev@Base 2.0.11
2196 _ZN3Dtk6Widget20DTrashManagerPrivateD1Ev@Base 2.0.11
2197 _ZN3Dtk6Widget20DTrashManagerPrivateD2Ev@Base 2.0.11
2198 _ZN3Dtk6Widget20DWindowManagerHelper11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
2199 _ZN3Dtk6Widget20DWindowManagerHelper11qt_metacastEPKc@Base 2.0.11
2200 _ZN3Dtk6Widget20DWindowManagerHelper16staticMetaObjectE@Base 2.0.11
2201 _ZN3Dtk6Widget20DWindowManagerHelper17getMotifFunctionsEPK7QWindow@Base 2.0.11
2202 _ZN3Dtk6Widget20DWindowManagerHelper17setMotifFunctionsEPK7QWindow6QFlagsINS1_13MotifFunctionEE@Base 2.0.11
2203 _ZN3Dtk6Widget20DWindowManagerHelper17setMotifFunctionsEPK7QWindow6QFlagsINS1_13MotifFunctionEEb@Base 2.0.11
2204 _ZN3Dtk6Widget20DWindowManagerHelper17windowListChangedEv@Base 2.0.11
2205 _ZN3Dtk6Widget20DWindowManagerHelper19getMotifDecorationsEPK7QWindow@Base 2.0.11
2206 _ZN3Dtk6Widget20DWindowManagerHelper19hasCompositeChangedEv@Base 2.0.11
2207 _ZN3Dtk6Widget20DWindowManagerHelper19setMotifDecorationsEPK7QWindow6QFlagsINS1_15MotifDecorationEE@Base 2.0.11
2208 _ZN3Dtk6Widget20DWindowManagerHelper19setMotifDecorationsEPK7QWindow6QFlagsINS1_15MotifDecorationEEb@Base 2.0.11
2209 _ZN3Dtk6Widget20DWindowManagerHelper20hasBlurWindowChangedEv@Base 2.0.11
2210 _ZN3Dtk6Widget20DWindowManagerHelper20windowManagerChangedEv@Base 2.0.11
2211 _ZN3Dtk6Widget20DWindowManagerHelper21popupSystemWindowMenuEPK7QWindow@Base 2.0.11
2212 _ZN3Dtk6Widget20DWindowManagerHelper25windowMotifWMHintsChangedEj@Base 2.0.11
2213 _ZN3Dtk6Widget20DWindowManagerHelper8instanceEv@Base 2.0.11
2214 _ZN3Dtk6Widget20DWindowManagerHelperC1EP7QObject@Base 2.0.11
2215 _ZN3Dtk6Widget20DWindowManagerHelperC2EP7QObject@Base 2.0.11
2216 _ZN3Dtk6Widget20DWindowManagerHelperD0Ev@Base 2.0.11
2217 _ZN3Dtk6Widget20DWindowManagerHelperD1Ev@Base 2.0.11
2218 _ZN3Dtk6Widget20DWindowManagerHelperD2Ev@Base 2.0.11
2219 _ZN3Dtk6Widget21DDoubleSpinBoxPrivate20_q_resizeInsideFrameERK5QSize@Base 2.0.11
2220 _ZN3Dtk6Widget21DDoubleSpinBoxPrivate4initEv@Base 2.0.11
2221 _ZN3Dtk6Widget21DDoubleSpinBoxPrivateC1EPNS0_14DDoubleSpinBoxE@Base 2.0.11
2222 _ZN3Dtk6Widget21DDoubleSpinBoxPrivateC2EPNS0_14DDoubleSpinBoxE@Base 2.0.11
2223 _ZN3Dtk6Widget21DDoubleSpinBoxPrivateD0Ev@Base 2.0.11
2224 _ZN3Dtk6Widget21DDoubleSpinBoxPrivateD1Ev@Base 2.0.11
2225 _ZN3Dtk6Widget21DDoubleSpinBoxPrivateD2Ev@Base 2.0.11
2226 _ZN3Dtk6Widget21DForeignWindowPrivateD0Ev@Base 2.0.11
2227 _ZN3Dtk6Widget21DForeignWindowPrivateD1Ev@Base 2.0.11
2228 _ZN3Dtk6Widget21DForeignWindowPrivateD2Ev@Base 2.0.11
2229 _ZN3Dtk6Widget21DPageIndicatorPrivate12previousPageEv@Base 2.0.11
2230 _ZN3Dtk6Widget21DPageIndicatorPrivate12setPageCountEi@Base 2.0.11
2231 _ZN3Dtk6Widget21DPageIndicatorPrivate14setCurrentPageEi@Base 2.0.11
2232 _ZN3Dtk6Widget21DPageIndicatorPrivate8nextPageEv@Base 2.0.11
2233 _ZN3Dtk6Widget21DPageIndicatorPrivateC1EPNS0_14DPageIndicatorE@Base 2.0.11
2234 _ZN3Dtk6Widget21DPageIndicatorPrivateC2EPNS0_14DPageIndicatorE@Base 2.0.11
2235 _ZN3Dtk6Widget21DPageIndicatorPrivateD0Ev@Base 2.0.11
2236 _ZN3Dtk6Widget21DPageIndicatorPrivateD1Ev@Base 2.0.11
2237 _ZN3Dtk6Widget21DPageIndicatorPrivateD2Ev@Base 2.0.11
2238 _ZN3Dtk6Widget21DPlatformWindowHandle11eventFilterEP7QObjectP6QEvent@Base 2.0.11
2239 _ZN3Dtk6Widget21DPlatformWindowHandle11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
2240 _ZN3Dtk6Widget21DPlatformWindowHandle11qt_metacastEPKc@Base 2.0.11
2241 _ZN3Dtk6Widget21DPlatformWindowHandle11setClipPathERK12QPainterPath@Base 2.0.11
2242 _ZN3Dtk6Widget21DPlatformWindowHandle12setFrameMaskERK7QRegion@Base 2.0.11
2243 _ZN3Dtk6Widget21DPlatformWindowHandle13isEnabledDXcbEPK7QWidget@Base 2.0.11
2244 _ZN3Dtk6Widget21DPlatformWindowHandle13isEnabledDXcbEPK7QWindow@Base 2.0.11
2245 _ZN3Dtk6Widget21DPlatformWindowHandle13pluginVersionEv@Base 2.0.11
2246 _ZN3Dtk6Widget21DPlatformWindowHandle14setBorderColorERK6QColor@Base 2.0.11
2247 _ZN3Dtk6Widget21DPlatformWindowHandle14setBorderWidthEi@Base 2.0.11
2248 _ZN3Dtk6Widget21DPlatformWindowHandle14setShadowColorERK6QColor@Base 2.0.11
2249 _ZN3Dtk6Widget21DPlatformWindowHandle15clipPathChangedEv@Base 2.0.11
2250 _ZN3Dtk6Widget21DPlatformWindowHandle15setShadowOffsetERK6QPoint@Base 2.0.11
2251 _ZN3Dtk6Widget21DPlatformWindowHandle15setShadowRadiusEi@Base 2.0.11
2252 _ZN3Dtk6Widget21DPlatformWindowHandle15setWindowRadiusEi@Base 2.0.11
2253 _ZN3Dtk6Widget21DPlatformWindowHandle16frameMaskChangedEv@Base 2.0.11
2254 _ZN3Dtk6Widget21DPlatformWindowHandle16staticMetaObjectE@Base 2.0.11
2255 _ZN3Dtk6Widget21DPlatformWindowHandle18borderColorChangedEv@Base 2.0.11
2256 _ZN3Dtk6Widget21DPlatformWindowHandle18borderWidthChangedEv@Base 2.0.11
2257 _ZN3Dtk6Widget21DPlatformWindowHandle18shadowColorChangedEv@Base 2.0.11
2258 _ZN3Dtk6Widget21DPlatformWindowHandle19enableDXcbForWindowEP7QWidget@Base 2.0.11
2259 _ZN3Dtk6Widget21DPlatformWindowHandle19enableDXcbForWindowEP7QWidgetb@Base 2.0.11
2260 _ZN3Dtk6Widget21DPlatformWindowHandle19enableDXcbForWindowEP7QWindow@Base 2.0.11
2261 _ZN3Dtk6Widget21DPlatformWindowHandle19enableDXcbForWindowEP7QWindowb@Base 2.0.11
2262 _ZN3Dtk6Widget21DPlatformWindowHandle19frameMarginsChangedEv@Base 2.0.11
2263 _ZN3Dtk6Widget21DPlatformWindowHandle19setEnableBlurWindowEb@Base 2.0.11
2264 _ZN3Dtk6Widget21DPlatformWindowHandle19setEnableSystemMoveEb@Base 2.0.11
2265 _ZN3Dtk6Widget21DPlatformWindowHandle19shadowOffsetChangedEv@Base 2.0.11
2266 _ZN3Dtk6Widget21DPlatformWindowHandle19shadowRadiusChangedEv@Base 2.0.11
2267 _ZN3Dtk6Widget21DPlatformWindowHandle19windowRadiusChangedEv@Base 2.0.11
2268 _ZN3Dtk6Widget21DPlatformWindowHandle21setEnableSystemResizeEb@Base 2.0.11
2269 _ZN3Dtk6Widget21DPlatformWindowHandle21setWindowBlurAreaByWMEP7QWidgetRK5QListI12QPainterPathE@Base 2.0.11
2270 _ZN3Dtk6Widget21DPlatformWindowHandle21setWindowBlurAreaByWMEP7QWidgetRK7QVectorINS1_10WMBlurAreaEE@Base 2.0.11
2271 _ZN3Dtk6Widget21DPlatformWindowHandle21setWindowBlurAreaByWMEP7QWindowRK5QListI12QPainterPathE@Base 2.0.11
2272 _ZN3Dtk6Widget21DPlatformWindowHandle21setWindowBlurAreaByWMEP7QWindowRK7QVectorINS1_10WMBlurAreaEE@Base 2.0.11
2273 _ZN3Dtk6Widget21DPlatformWindowHandle21setWindowBlurAreaByWMERK5QListI12QPainterPathE@Base 2.0.11
2274 _ZN3Dtk6Widget21DPlatformWindowHandle21setWindowBlurAreaByWMERK7QVectorINS1_10WMBlurAreaEE@Base 2.0.11
2275 _ZN3Dtk6Widget21DPlatformWindowHandle23enableBlurWindowChangedEv@Base 2.0.11
2276 _ZN3Dtk6Widget21DPlatformWindowHandle23enableSystemMoveChangedEv@Base 2.0.11
2277 _ZN3Dtk6Widget21DPlatformWindowHandle24setTranslucentBackgroundEb@Base 2.0.11
2278 _ZN3Dtk6Widget21DPlatformWindowHandle25enableSystemResizeChangedEv@Base 2.0.11
2279 _ZN3Dtk6Widget21DPlatformWindowHandle26setAutoInputMaskByClipPathEb@Base 2.0.11
2280 _ZN3Dtk6Widget21DPlatformWindowHandle27connectHasBlurWindowChangedEP7QObjectSt8functionIFvvEE@Base 2.0.11
2281 _ZN3Dtk6Widget21DPlatformWindowHandle28translucentBackgroundChangedEv@Base 2.0.11
2282 _ZN3Dtk6Widget21DPlatformWindowHandle30autoInputMaskByClipPathChangedEv@Base 2.0.11
2283 _ZN3Dtk6Widget21DPlatformWindowHandle30setDisableWindowOverrideCursorEP7QWindowb@Base 2.0.11
2284 _ZN3Dtk6Widget21DPlatformWindowHandle33connectWindowManagerChangedSignalEP7QObjectSt8functionIFvvEE@Base 2.0.11
2285 _ZN3Dtk6Widget21DPlatformWindowHandleC1EP7QWidgetP7QObject@Base 2.0.11
2286 _ZN3Dtk6Widget21DPlatformWindowHandleC1EP7QWindowP7QObject@Base 2.0.11
2287 _ZN3Dtk6Widget21DPlatformWindowHandleC2EP7QWidgetP7QObject@Base 2.0.11
2288 _ZN3Dtk6Widget21DPlatformWindowHandleC2EP7QWindowP7QObject@Base 2.0.11
2289 _ZN3Dtk6Widget21DPlatformWindowHandleD0Ev@Base 2.0.11
2290 _ZN3Dtk6Widget21DPlatformWindowHandleD1Ev@Base 2.0.11
2291 _ZN3Dtk6Widget21DPlatformWindowHandleD2Ev@Base 2.0.11
2292 _ZN3Dtk6Widget21DRegionMonitorPrivate11_q_KeyPressERK7QStringiiS4_@Base 2.0.11
2293 _ZN3Dtk6Widget21DRegionMonitorPrivate13_q_CursorMoveEiiRK7QString@Base 2.0.11
2294 _ZN3Dtk6Widget21DRegionMonitorPrivate13_q_KeyReleaseERK7QStringiiS4_@Base 2.0.11
2295 _ZN3Dtk6Widget21DRegionMonitorPrivate14_q_ButtonPressEiiiRK7QString@Base 2.0.11
2296 _ZN3Dtk6Widget21DRegionMonitorPrivate16_q_ButtonReleaseEiiiRK7QString@Base 2.0.11
2297 _ZN3Dtk6Widget21DRegionMonitorPrivate21registerMonitorRegionEv@Base 2.0.11
2298 _ZN3Dtk6Widget21DRegionMonitorPrivate23unregisterMonitorRegionEv@Base 2.0.11
2299 _ZN3Dtk6Widget21DRegionMonitorPrivate4initEv@Base 2.0.11
2300 _ZN3Dtk6Widget21DRegionMonitorPrivateC1EPNS0_14DRegionMonitorE@Base 2.0.11
2301 _ZN3Dtk6Widget21DRegionMonitorPrivateC2EPNS0_14DRegionMonitorE@Base 2.0.11
2302 _ZN3Dtk6Widget21DRegionMonitorPrivateD0Ev@Base 2.0.11
2303 _ZN3Dtk6Widget21DRegionMonitorPrivateD1Ev@Base 2.0.11
2304 _ZN3Dtk6Widget21DRegionMonitorPrivateD2Ev@Base 2.0.11
2305 _ZN3Dtk6Widget21DWaterProgressPrivate12resizePixmapE5QSize@Base 2.0.11
2306 _ZN3Dtk6Widget21DWaterProgressPrivate5paintEP8QPainter@Base 2.0.11
2307 _ZN3Dtk6Widget21DWaterProgressPrivate6initUIEv@Base 2.0.11
2308 _ZN3Dtk6Widget21DWaterProgressPrivate8setValueEi@Base 2.0.11
2309 _ZN3Dtk6Widget21DWaterProgressPrivateD0Ev@Base 2.0.11
2310 _ZN3Dtk6Widget21DWaterProgressPrivateD1Ev@Base 2.0.11
2311 _ZN3Dtk6Widget21DWaterProgressPrivateD2Ev@Base 2.0.11
2312 _ZN3Dtk6Widget21DWindowManagerHelper_D0Ev@Base 2.0.11
2313 _ZN3Dtk6Widget21DWindowManagerHelper_D1Ev@Base 2.0.11
2314 _ZN3Dtk6Widget21DWindowManagerHelper_D2Ev@Base 2.0.11
2315 _ZN3Dtk6Widget21createUnsupportHandleEP7QObject@Base 2.0.11
2316 _ZN3Dtk6Widget22DAbstractDialogPrivate4initEv@Base 2.0.11
2317 _ZN3Dtk6Widget22DAbstractDialogPrivateC1EPNS0_15DAbstractDialogE@Base 2.0.11
2318 _ZN3Dtk6Widget22DAbstractDialogPrivateC2EPNS0_15DAbstractDialogE@Base 2.0.11
2319 _ZN3Dtk6Widget22DAbstractDialogPrivateD0Ev@Base 2.0.11
2320 _ZN3Dtk6Widget22DAbstractDialogPrivateD1Ev@Base 2.0.11
2321 _ZN3Dtk6Widget22DAbstractDialogPrivateD2Ev@Base 2.0.11
2322 _ZN3Dtk6Widget22DArrowRectanglePrivate10paintEventEP11QPaintEvent@Base 2.0.11
2323 _ZN3Dtk6Widget22DArrowRectanglePrivate10setContentEP7QWidget@Base 2.0.11
2324 _ZN3Dtk6Widget22DArrowRectanglePrivate11resizeEventEP12QResizeEvent@Base 2.0.11
2325 _ZN3Dtk6Widget22DArrowRectanglePrivate12verticalMoveEii@Base 2.0.11
2326 _ZN3Dtk6Widget22DArrowRectanglePrivate13radiusEnabledEv@Base 2.0.11
2327 _ZN3Dtk6Widget22DArrowRectanglePrivate14horizontalMoveEii@Base 2.0.11
2328 _ZN3Dtk6Widget22DArrowRectanglePrivate14updateClipPathEv@Base 2.0.11
2329 _ZN3Dtk6Widget22DArrowRectanglePrivate16getTopCornerPathEv@Base 2.0.11
2330 _ZN3Dtk6Widget22DArrowRectanglePrivate17currentScreenRectEii@Base 2.0.11
2331 _ZN3Dtk6Widget22DArrowRectanglePrivate17getLeftCornerPathEv@Base 2.0.11
2332 _ZN3Dtk6Widget22DArrowRectanglePrivate17resizeWithContentEv@Base 2.0.11
2333 _ZN3Dtk6Widget22DArrowRectanglePrivate18getRightCornerPathEv@Base 2.0.11
2334 _ZN3Dtk6Widget22DArrowRectanglePrivate19getBottomCornerPathEv@Base 2.0.11
2335 _ZN3Dtk6Widget22DArrowRectanglePrivate4initENS0_15DArrowRectangle9FloatModeE@Base 2.0.11
2336 _ZN3Dtk6Widget22DArrowRectanglePrivate4showEii@Base 2.0.11
2337 _ZN3Dtk6Widget22DArrowRectanglePrivateC1ENS0_15DArrowRectangle14ArrowDirectionEPS2_@Base 2.0.11
2338 _ZN3Dtk6Widget22DArrowRectanglePrivateC2ENS0_15DArrowRectangle14ArrowDirectionEPS2_@Base 2.0.11
2339 _ZN3Dtk6Widget22DArrowRectanglePrivateD0Ev@Base 2.0.11
2340 _ZN3Dtk6Widget22DArrowRectanglePrivateD1Ev@Base 2.0.11
2341 _ZN3Dtk6Widget22DArrowRectanglePrivateD2Ev@Base 2.0.11
2342 _ZN3Dtk6Widget22DCircleProgressPrivate5paintEP8QPainter@Base 2.0.11
2343 _ZN3Dtk6Widget22DCircleProgressPrivateC1EPNS0_15DCircleProgressE@Base 2.0.11
2344 _ZN3Dtk6Widget22DCircleProgressPrivateC2EPNS0_15DCircleProgressE@Base 2.0.11
2345 _ZN3Dtk6Widget22DCircleProgressPrivateD0Ev@Base 2.0.11
2346 _ZN3Dtk6Widget22DCircleProgressPrivateD1Ev@Base 2.0.11
2347 _ZN3Dtk6Widget22DCircleProgressPrivateD2Ev@Base 2.0.11
2348 _ZN3Dtk6Widget22DSettingsWidgetFactory11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
2349 _ZN3Dtk6Widget22DSettingsWidgetFactory11qt_metacastEPKc@Base 2.0.11
2350 _ZN3Dtk6Widget22DSettingsWidgetFactory12createWidgetE8QPointerINS_4Core15DSettingsOptionEE@Base 2.0.11
2351 _ZN3Dtk6Widget22DSettingsWidgetFactory12createWidgetERK10QByteArray8QPointerINS_4Core15DSettingsOptionEE@Base 2.0.11
2352 _ZN3Dtk6Widget22DSettingsWidgetFactory14registerWidgetERK7QStringSt8functionIFP7QWidgetP7QObjectEE@Base 2.0.11
2353 _ZN3Dtk6Widget22DSettingsWidgetFactory16staticMetaObjectE@Base 2.0.11
2354 _ZN3Dtk6Widget22DSettingsWidgetFactory20createTwoColumWidgetEPNS_4Core15DSettingsOptionEP7QWidget@Base 2.0.11
2355 _ZN3Dtk6Widget22DSettingsWidgetFactory20createTwoColumWidgetERK10QByteArrayPNS_4Core15DSettingsOptionEP7QWidget@Base 2.0.11
2356 _ZN3Dtk6Widget22DSettingsWidgetFactoryC1EP7QObject@Base 2.0.11
2357 _ZN3Dtk6Widget22DSettingsWidgetFactoryC2EP7QObject@Base 2.0.11
2358 _ZN3Dtk6Widget22DSettingsWidgetFactoryD0Ev@Base 2.0.11
2359 _ZN3Dtk6Widget22DSettingsWidgetFactoryD1Ev@Base 2.0.11
2360 _ZN3Dtk6Widget22DSettingsWidgetFactoryD2Ev@Base 2.0.11
2361 _ZN3Dtk6Widget22DSimpleListViewPrivate14getSearchItemsE5QListIPNS0_15DSimpleListItemEE@Base 2.0.11
2362 _ZN3Dtk6Widget22DSimpleListViewPrivate17sortItemsByColumnEib@Base 2.0.11
2363 _ZN3Dtk6Widget22DSimpleListViewPrivate18getTopRenderOffsetEv@Base 2.0.11
2364 _ZN3Dtk6Widget22DSimpleListViewPrivate19getItemsTotalHeightEv@Base 2.0.11
2365 _ZN3Dtk6Widget22DSimpleListViewPrivateD0Ev@Base 2.0.11
2366 _ZN3Dtk6Widget22DSimpleListViewPrivateD1Ev@Base 2.0.11
2367 _ZN3Dtk6Widget22DSimpleListViewPrivateD2Ev@Base 2.0.11
2368 _ZN3Dtk6Widget23DFileChooserEditPrivate24_q_showFileChooserDialogEv@Base 2.0.11
2369 _ZN3Dtk6Widget23DFileChooserEditPrivate4initEv@Base 2.0.11
2370 _ZN3Dtk6Widget23DFileChooserEditPrivateC1EPNS0_16DFileChooserEditE@Base 2.0.11
2371 _ZN3Dtk6Widget23DFileChooserEditPrivateC2EPNS0_16DFileChooserEditE@Base 2.0.11
2372 _ZN3Dtk6Widget23DFileChooserEditPrivateD0Ev@Base 2.0.11
2373 _ZN3Dtk6Widget23DFileChooserEditPrivateD1Ev@Base 2.0.11
2374 _ZN3Dtk6Widget23DFileChooserEditPrivateD2Ev@Base 2.0.11
2375 _ZN3Dtk6Widget23DWindowMaxButtonPrivateD0Ev@Base 2.0.11
2376 _ZN3Dtk6Widget23DWindowMaxButtonPrivateD1Ev@Base 2.0.11
2377 _ZN3Dtk6Widget23DWindowMaxButtonPrivateD2Ev@Base 2.0.11
2378 _ZN3Dtk6Widget24DBlurEffectWidgetPrivate12setMaskAlphaEh@Base 2.0.11
2379 _ZN3Dtk6Widget24DBlurEffectWidgetPrivate12setMaskColorERK6QColor@Base 2.0.11
2380 _ZN3Dtk6Widget24DBlurEffectWidgetPrivate20blurEffectWidgetHashE@Base 2.0.11
2381 _ZN3Dtk6Widget24DBlurEffectWidgetPrivate20updateWindowBlurAreaEP7QWidget@Base 2.0.11
2382 _ZN3Dtk6Widget24DBlurEffectWidgetPrivate20updateWindowBlurAreaEv@Base 2.0.11
2383 _ZN3Dtk6Widget24DBlurEffectWidgetPrivate22windowOfBlurEffectHashE@Base 2.0.11
2384 _ZN3Dtk6Widget24DBlurEffectWidgetPrivate25addToBlurEffectWidgetHashEv@Base 2.0.11
2385 _ZN3Dtk6Widget24DBlurEffectWidgetPrivate30removeFromBlurEffectWidgetHashEv@Base 2.0.11
2386 _ZN3Dtk6Widget24DBlurEffectWidgetPrivateC1EPNS0_17DBlurEffectWidgetE@Base 2.0.11
2387 _ZN3Dtk6Widget24DBlurEffectWidgetPrivateC2EPNS0_17DBlurEffectWidgetE@Base 2.0.11
2388 _ZN3Dtk6Widget24DBlurEffectWidgetPrivateD0Ev@Base 2.0.11
2389 _ZN3Dtk6Widget24DBlurEffectWidgetPrivateD1Ev@Base 2.0.11
2390 _ZN3Dtk6Widget24DBlurEffectWidgetPrivateD2Ev@Base 2.0.11
2391 _ZN3Dtk6Widget24DBorderlessWidgetPrivate21updateContentsMarginsEv@Base 2.0.11
2392 _ZN3Dtk6Widget24DBorderlessWidgetPrivate4initEv@Base 2.0.11
2393 _ZN3Dtk6Widget24DBorderlessWidgetPrivateC1EPNS0_17DBorderlessWidgetE@Base 2.0.11
2394 _ZN3Dtk6Widget24DBorderlessWidgetPrivateC2EPNS0_17DBorderlessWidgetE@Base 2.0.11
2395 _ZN3Dtk6Widget24DBorderlessWidgetPrivateD0Ev@Base 2.0.11
2396 _ZN3Dtk6Widget24DBorderlessWidgetPrivateD1Ev@Base 2.0.11
2397 _ZN3Dtk6Widget24DBorderlessWidgetPrivateD2Ev@Base 2.0.11
2398 _ZN3Dtk6Widget24DBorderlessWindowPrivate4initEv@Base 2.0.11
2399 _ZN3Dtk6Widget24DBorderlessWindowPrivateC1EPNS0_17DBorderlessWindowE@Base 2.0.11
2400 _ZN3Dtk6Widget24DBorderlessWindowPrivateC2EPNS0_17DBorderlessWindowE@Base 2.0.11
2401 _ZN3Dtk6Widget24DBorderlessWindowPrivateD0Ev@Base 2.0.11
2402 _ZN3Dtk6Widget24DBorderlessWindowPrivateD1Ev@Base 2.0.11
2403 _ZN3Dtk6Widget24DBorderlessWindowPrivateD2Ev@Base 2.0.11
2404 _ZN3Dtk6Widget24DClipEffectWidgetPrivateC1EPNS0_17DClipEffectWidgetE@Base 2.0.11
2405 _ZN3Dtk6Widget24DClipEffectWidgetPrivateC2EPNS0_17DClipEffectWidgetE@Base 2.0.11
2406 _ZN3Dtk6Widget24DClipEffectWidgetPrivateD0Ev@Base 2.0.11
2407 _ZN3Dtk6Widget24DClipEffectWidgetPrivateD1Ev@Base 2.0.11
2408 _ZN3Dtk6Widget24DClipEffectWidgetPrivateD2Ev@Base 2.0.11
2409 _ZN3Dtk6Widget24DFileIconProviderPrivate4initEv@Base 2.0.11
2410 _ZN3Dtk6Widget24DFileIconProviderPrivateC1EPNS0_17DFileIconProviderE@Base 2.0.11
2411 _ZN3Dtk6Widget24DFileIconProviderPrivateC2EPNS0_17DFileIconProviderE@Base 2.0.11
2412 _ZN3Dtk6Widget24DFileIconProviderPrivateD0Ev@Base 2.0.11
2413 _ZN3Dtk6Widget24DFileIconProviderPrivateD1Ev@Base 2.0.11
2414 _ZN3Dtk6Widget24DFileIconProviderPrivateD2Ev@Base 2.0.11
2415 _ZN3Dtk6Widget24DLoadingIndicatorPrivate14setLoadingItemEP13QGraphicsItem@Base 2.0.11
2416 _ZN3Dtk6Widget24DLoadingIndicatorPrivate4initEv@Base 2.0.11
2417 _ZN3Dtk6Widget24DLoadingIndicatorPrivateC1EPNS0_17DLoadingIndicatorE@Base 2.0.11
2418 _ZN3Dtk6Widget24DLoadingIndicatorPrivateC2EPNS0_17DLoadingIndicatorE@Base 2.0.11
2419 _ZN3Dtk6Widget24DLoadingIndicatorPrivateD0Ev@Base 2.0.11
2420 _ZN3Dtk6Widget24DLoadingIndicatorPrivateD1Ev@Base 2.0.11
2421 _ZN3Dtk6Widget24DLoadingIndicatorPrivateD2Ev@Base 2.0.11
2422 _ZN3Dtk6Widget24DSegmentedControlPrivateD0Ev@Base 2.0.11
2423 _ZN3Dtk6Widget24DSegmentedControlPrivateD1Ev@Base 2.0.11
2424 _ZN3Dtk6Widget24DSegmentedControlPrivateD2Ev@Base 2.0.11
2425 _ZN3Dtk6Widget24createSliderOptionHandleEP7QObject@Base 2.0.11
2426 _ZN3Dtk6Widget25DStyleOptionSuggestButton4initEP7QWidget@Base 2.0.11
2427 _ZN3Dtk6Widget25DThumbnailProviderPrivate11ProduceInfoD1Ev@Base 2.0.11
2428 _ZN3Dtk6Widget25DThumbnailProviderPrivate11ProduceInfoD2Ev@Base 2.0.11
2429 _ZN3Dtk6Widget25DThumbnailProviderPrivate20hasThumbnailMimeHashE@Base 2.0.11
2430 _ZN3Dtk6Widget25DThumbnailProviderPrivate4initEv@Base 2.0.11
2431 _ZN3Dtk6Widget25DThumbnailProviderPrivateC1EPNS0_18DThumbnailProviderE@Base 2.0.11
2432 _ZN3Dtk6Widget25DThumbnailProviderPrivateC2EPNS0_18DThumbnailProviderE@Base 2.0.11
2433 _ZN3Dtk6Widget25DThumbnailProviderPrivateD0Ev@Base 2.0.11
2434 _ZN3Dtk6Widget25DThumbnailProviderPrivateD1Ev@Base 2.0.11
2435 _ZN3Dtk6Widget25DThumbnailProviderPrivateD2Ev@Base 2.0.11
2436 _ZN3Dtk6Widget25DWindowGroupLeaderPrivate17ensureGroupLeaderEv@Base 2.0.11
2437 _ZN3Dtk6Widget25DWindowGroupLeaderPrivate20setWindowGroupLeaderEjj@Base 2.0.11
2438 _ZN3Dtk6Widget26DGraphicsClipEffectPrivateC1EPNS0_19DGraphicsClipEffectE@Base 2.0.11
2439 _ZN3Dtk6Widget26DGraphicsClipEffectPrivateC2EPNS0_19DGraphicsClipEffectE@Base 2.0.11
2440 _ZN3Dtk6Widget26DGraphicsClipEffectPrivateD0Ev@Base 2.0.11
2441 _ZN3Dtk6Widget26DGraphicsClipEffectPrivateD1Ev@Base 2.0.11
2442 _ZN3Dtk6Widget26DGraphicsClipEffectPrivateD2Ev@Base 2.0.11
2443 _ZN3Dtk6Widget26DPasswdEditAnimatedPrivate12_q_inputDoneEv@Base 2.0.11
2444 _ZN3Dtk6Widget26DPasswdEditAnimatedPrivate17_q_hideLoadSliderEv@Base 2.0.11
2445 _ZN3Dtk6Widget26DPasswdEditAnimatedPrivate17_q_showLoadSliderEv@Base 2.0.11
2446 _ZN3Dtk6Widget26DPasswdEditAnimatedPrivate21_q_onEyeButtonClickedEv@Base 2.0.11
2447 _ZN3Dtk6Widget26DPasswdEditAnimatedPrivate21_q_resetCapslockStateEv@Base 2.0.11
2448 _ZN3Dtk6Widget26DPasswdEditAnimatedPrivate26_q_onKeyboardButtonClickedEv@Base 2.0.11
2449 _ZN3Dtk6Widget26DPasswdEditAnimatedPrivate4initEv@Base 2.0.11
2450 _ZN3Dtk6Widget26DPasswdEditAnimatedPrivateC1EPNS0_19DPasswdEditAnimatedE@Base 2.0.11
2451 _ZN3Dtk6Widget26DPasswdEditAnimatedPrivateC2EPNS0_19DPasswdEditAnimatedE@Base 2.0.11
2452 _ZN3Dtk6Widget26DPasswdEditAnimatedPrivateD0Ev@Base 2.0.11
2453 _ZN3Dtk6Widget26DPasswdEditAnimatedPrivateD1Ev@Base 2.0.11
2454 _ZN3Dtk6Widget26DPasswdEditAnimatedPrivateD2Ev@Base 2.0.11
2455 _ZN3Dtk6Widget26DThemeManagerStaticPrivateD0Ev@Base 2.0.11
2456 _ZN3Dtk6Widget26DThemeManagerStaticPrivateD1Ev@Base 2.0.11
2457 _ZN3Dtk6Widget26DThemeManagerStaticPrivateD2Ev@Base 2.0.11
2458 _ZN3Dtk6Widget26createCheckboxOptionHandleEP7QObject@Base 2.0.11
2459 _ZN3Dtk6Widget26createComboBoxOptionHandleEP7QObject@Base 2.0.11
2460 _ZN3Dtk6Widget26createLineEditOptionHandleEP7QObject@Base 2.0.11
2461 _ZN3Dtk6Widget27DPictureSequenceViewPrivate10loadPixmapERK7QString@Base 2.0.11
2462 _ZN3Dtk6Widget27DPictureSequenceViewPrivate17_q_refreshPictureEv@Base 2.0.11
2463 _ZN3Dtk6Widget27DPictureSequenceViewPrivate4initEv@Base 2.0.11
2464 _ZN3Dtk6Widget27DPictureSequenceViewPrivate4playEv@Base 2.0.11
2465 _ZN3Dtk6Widget27DPictureSequenceViewPrivateC1EPNS0_20DPictureSequenceViewE@Base 2.0.11
2466 _ZN3Dtk6Widget27DPictureSequenceViewPrivateC2EPNS0_20DPictureSequenceViewE@Base 2.0.11
2467 _ZN3Dtk6Widget27DPictureSequenceViewPrivateD0Ev@Base 2.0.11
2468 _ZN3Dtk6Widget27DPictureSequenceViewPrivateD1Ev@Base 2.0.11
2469 _ZN3Dtk6Widget27DPictureSequenceViewPrivateD2Ev@Base 2.0.11
2470 _ZN3Dtk6Widget27DSlideStackWidgetTransition11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
2471 _ZN3Dtk6Widget27DSlideStackWidgetTransition11qt_metacastEPKc@Base 2.0.11
2472 _ZN3Dtk6Widget27DSlideStackWidgetTransition13updateVariantERK8QVariant@Base 2.0.11
2473 _ZN3Dtk6Widget27DSlideStackWidgetTransition15beginTransitionERKNS0_30DAbstractStackWidgetTransition14TransitionInfoE@Base 2.0.11
2474 _ZN3Dtk6Widget27DSlideStackWidgetTransition16staticMetaObjectE@Base 2.0.11
2475 _ZN3Dtk6Widget27DSlideStackWidgetTransitionC1EP7QObject@Base 2.0.11
2476 _ZN3Dtk6Widget27DSlideStackWidgetTransitionC2EP7QObject@Base 2.0.11
2477 _ZN3Dtk6Widget27DSlideStackWidgetTransitionD0Ev@Base 2.0.11
2478 _ZN3Dtk6Widget27DSlideStackWidgetTransitionD1Ev@Base 2.0.11
2479 _ZN3Dtk6Widget27DSlideStackWidgetTransitionD2Ev@Base 2.0.11
2480 _ZN3Dtk6Widget27DWindowManagerHelperPrivateD0Ev@Base 2.0.11
2481 _ZN3Dtk6Widget27DWindowManagerHelperPrivateD1Ev@Base 2.0.11
2482 _ZN3Dtk6Widget27DWindowManagerHelperPrivateD2Ev@Base 2.0.11
2483 _ZN3Dtk6Widget28createRadioGroupOptionHandleEP7QObject@Base 2.0.11
2484 _ZN3Dtk6Widget28createSpinButtonOptionHandleEP7QObject@Base 2.0.11
2485 _ZN3Dtk6Widget29DFileThumbnailProviderPrivateD0Ev@Base 2.0.11
2486 _ZN3Dtk6Widget29DFileThumbnailProviderPrivateD1Ev@Base 2.0.11
2487 _ZN3Dtk6Widget29DFileThumbnailProviderPrivateD2Ev@Base 2.0.11
2488 _ZN3Dtk6Widget29createButtonGroupOptionHandleEP7QObject@Base 2.0.11
2489 _ZN3Dtk6Widget30DAbstractStackWidgetTransition15beginTransitionERKNS1_14TransitionInfoE@Base 2.0.11
2490 _ZN3Dtk6Widget30DAbstractStackWidgetTransitionC1EP7QObject@Base 2.0.11
2491 _ZN3Dtk6Widget30DAbstractStackWidgetTransitionC1ERNS0_37DAbstractStackWidgetTransitionPrivateEP7QObject@Base 2.0.11
2492 _ZN3Dtk6Widget30DAbstractStackWidgetTransitionC2EP7QObject@Base 2.0.11
2493 _ZN3Dtk6Widget30DAbstractStackWidgetTransitionC2ERNS0_37DAbstractStackWidgetTransitionPrivateEP7QObject@Base 2.0.11
2494 _ZN3Dtk6Widget30createShortcutEditOptionHandleEP7QObject@Base 2.0.11
2495 _ZN3Dtk6Widget37DAbstractStackWidgetTransitionPrivate4initEv@Base 2.0.11
2496 _ZN3Dtk6Widget37DAbstractStackWidgetTransitionPrivateC1EPNS0_30DAbstractStackWidgetTransitionE@Base 2.0.11
2497 _ZN3Dtk6Widget37DAbstractStackWidgetTransitionPrivateC2EPNS0_30DAbstractStackWidgetTransitionE@Base 2.0.11
2498 _ZN3Dtk6Widget37DAbstractStackWidgetTransitionPrivateD0Ev@Base 2.0.11
2499 _ZN3Dtk6Widget37DAbstractStackWidgetTransitionPrivateD1Ev@Base 2.0.11
2500 _ZN3Dtk6Widget37DAbstractStackWidgetTransitionPrivateD2Ev@Base 2.0.11
2501 _ZN3Dtk6Widget6DLabel11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
2502 _ZN3Dtk6Widget6DLabel11qt_metacastEPKc@Base 2.0.11
2503 _ZN3Dtk6Widget6DLabel16staticMetaObjectE@Base 2.0.11
2504 _ZN3Dtk6Widget6DLabelC1EP7QWidget6QFlagsIN2Qt10WindowTypeEE@Base 2.0.11
2505 _ZN3Dtk6Widget6DLabelC1ERK7QStringP7QWidget6QFlagsIN2Qt10WindowTypeEE@Base 2.0.11
2506 _ZN3Dtk6Widget6DLabelC2EP7QWidget6QFlagsIN2Qt10WindowTypeEE@Base 2.0.11
2507 _ZN3Dtk6Widget6DLabelC2ERK7QStringP7QWidget6QFlagsIN2Qt10WindowTypeEE@Base 2.0.11
2508 _ZN3Dtk6Widget6DLabelD0Ev@Base 2.0.11
2509 _ZN3Dtk6Widget6DLabelD1Ev@Base 2.0.11
2510 _ZN3Dtk6Widget6DLabelD2Ev@Base 2.0.11
2511 _ZN3Dtk6Widget6DToast10setOpacityEd@Base 2.0.11
2512 _ZN3Dtk6Widget6DToast11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
2513 _ZN3Dtk6Widget6DToast11qt_metacastEPKc@Base 2.0.11
2514 _ZN3Dtk6Widget6DToast11setDurationEi@Base 2.0.11
2515 _ZN3Dtk6Widget6DToast14visibleChangedEb@Base 2.0.11
2516 _ZN3Dtk6Widget6DToast16staticMetaObjectE@Base 2.0.11
2517 _ZN3Dtk6Widget6DToast3popEv@Base 2.0.11
2518 _ZN3Dtk6Widget6DToast4packEv@Base 2.0.11
2519 _ZN3Dtk6Widget6DToast7setIconE5QIcon5QSize@Base 2.0.11
2520 _ZN3Dtk6Widget6DToast7setIconE7QString@Base 2.0.11
2521 _ZN3Dtk6Widget6DToast7setTextE7QString@Base 2.0.11
2522 _ZN3Dtk6Widget6DToast9hideEventEP10QHideEvent@Base 2.0.11
2523 _ZN3Dtk6Widget6DToast9showEventEP10QShowEvent@Base 2.0.11
2524 _ZN3Dtk6Widget6DToastC1EP7QWidget@Base 2.0.11
2525 _ZN3Dtk6Widget6DToastC2EP7QWidget@Base 2.0.11
2526 _ZN3Dtk6Widget6DToastD0Ev@Base 2.0.11
2527 _ZN3Dtk6Widget6DToastD1Ev@Base 2.0.11
2528 _ZN3Dtk6Widget6DToastD2Ev@Base 2.0.11
2529 _ZN3Dtk6Widget6XUtils10MoveWindowEPK7QWidgetN2Qt11MouseButtonE@Base 2.0.11
2530 _ZN3Dtk6Widget6XUtils12SetStayOnTopEPK7QWidgetb@Base 2.0.11
2531 _ZN3Dtk6Widget6XUtils13DisableResizeEPK7QWidget@Base 2.0.11
2532 _ZN3Dtk6Widget6XUtils13GetCornerEdgeEPK7QWidgetiiRK8QMarginsi@Base 2.0.11
2533 _ZN3Dtk6Widget6XUtils13IsCornerEdgetEPK7QWidgetiiRK8QMarginsi@Base 2.0.11
2534 _ZN3Dtk6Widget6XUtils13StartResizingEPK7QWidgetRK6QPointRKNS1_10CornerEdgeE@Base 2.0.11
2535 _ZN3Dtk6Widget6XUtils14SetCursorShapeEPK7QWidgeti@Base 2.0.11
2536 _ZN3Dtk6Widget6XUtils16CancelMoveWindowEPK7QWidgetN2Qt11MouseButtonE@Base 2.0.11
2537 _ZN3Dtk6Widget6XUtils16MoveResizeWindowEPK7QWidgetN2Qt11MouseButtonEiiRK8QMarginsi@Base 2.0.11
2538 _ZN3Dtk6Widget6XUtils16ResetCursorShapeEPK7QWidget@Base 2.0.11
2539 _ZN3Dtk6Widget6XUtils16SetWindowExtentsEPK7QWidgetRK8QMarginsi@Base 2.0.11
2540 _ZN3Dtk6Widget6XUtils16SetWindowExtentsEjRK5QRectRK8QMarginsi@Base 2.0.11
2541 _ZN3Dtk6Widget6XUtils16ShowNormalWindowEPK7QWidget@Base 2.0.11
2542 _ZN3Dtk6Widget6XUtils16SkipTaskbarPagerEPK7QWidget@Base 2.0.11
2543 _ZN3Dtk6Widget6XUtils17UpdateCursorShapeEPK7QWidgetiiRK8QMarginsi@Base 2.0.11
2544 _ZN3Dtk6Widget6XUtils18PropagateSizeHintsEPK7QWidget@Base 2.0.11
2545 _ZN3Dtk6Widget6XUtils19SetMouseTransparentEPK7QWidgetb@Base 2.0.11
2546 _ZN3Dtk6Widget6XUtils19ShowMaximizedWindowEPK7QWidget@Base 2.0.11
2547 _ZN3Dtk6Widget6XUtils19ShowMinimizedWindowEPK7QWidgetb@Base 2.0.11
2548 _ZN3Dtk6Widget6XUtils20ShowFullscreenWindowEPK7QWidgetb@Base 2.0.11
2549 _ZN3Dtk6Widget6XUtils21SendMoveResizeMessageEPK7QWidgetN2Qt11MouseButtonEi@Base 2.0.11
2550 _ZN3Dtk6Widget6XUtils21ToggleMaximizedWindowEPK7QWidget@Base 2.0.11
2551 _ZN3Dtk6Widget6XUtils26ChangeWindowMaximizedStateEPK7QWidgeti@Base 2.0.11
2552 _ZN3Dtk6Widget7Content11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
2553 _ZN3Dtk6Widget7Content11qt_metacastEPKc@Base 2.0.11
2554 _ZN3Dtk6Widget7Content13scrollToGroupERK7QString@Base 2.0.11
2555 _ZN3Dtk6Widget7Content14mouseMoveEventEP11QMouseEvent@Base 2.0.11
2556 _ZN3Dtk6Widget7Content14updateSettingsERK10QByteArray8QPointerINS_4Core9DSettingsEE@Base 2.0.11
2557 _ZN3Dtk6Widget7Content15onScrollToGroupERK7QString@Base 2.0.11
2558 _ZN3Dtk6Widget7Content16staticMetaObjectE@Base 2.0.11
2559 _ZN3Dtk6Widget7ContentC1EP7QWidget@Base 2.0.11
2560 _ZN3Dtk6Widget7ContentC2EP7QWidget@Base 2.0.11
2561 _ZN3Dtk6Widget7ContentD0Ev@Base 2.0.11
2562 _ZN3Dtk6Widget7ContentD1Ev@Base 2.0.11
2563 _ZN3Dtk6Widget7ContentD2Ev@Base 2.0.11
2564 _ZN3Dtk6Widget7DDialog10addButtonsERK11QStringList@Base 2.0.11
2565 _ZN3Dtk6Widget7DDialog10addContentEP7QWidget6QFlagsIN2Qt13AlignmentFlagEE@Base 2.0.11
2566 _ZN3Dtk6Widget7DDialog10addSpacingEi@Base 2.0.11
2567 _ZN3Dtk6Widget7DDialog10childEventEP11QChildEvent@Base 2.0.11
2568 _ZN3Dtk6Widget7DDialog10closeEventEP11QCloseEvent@Base 2.0.11
2569 _ZN3Dtk6Widget7DDialog10setMessageERK7QString@Base 2.0.11
2570 _ZN3Dtk6Widget7DDialog10setSpacingEi@Base 2.0.11
2571 _ZN3Dtk6Widget7DDialog11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
2572 _ZN3Dtk6Widget7DDialog11qt_metacastEPKc@Base 2.0.11
2573 _ZN3Dtk6Widget7DDialog11resizeEventEP12QResizeEvent@Base 2.0.11
2574 _ZN3Dtk6Widget7DDialog11sizeChangedE5QSize@Base 2.0.11
2575 _ZN3Dtk6Widget7DDialog12aboutToCloseEv@Base 2.0.11
2576 _ZN3Dtk6Widget7DDialog12clearButtonsEv@Base 2.0.11
2577 _ZN3Dtk6Widget7DDialog12clearSpacingEv@Base 2.0.11
2578 _ZN3Dtk6Widget7DDialog12insertButtonEiP15QAbstractButtonb@Base 2.0.11
2579 _ZN3Dtk6Widget7DDialog12insertButtonEiRK7QStringbNS1_10ButtonTypeE@Base 2.0.11
2580 _ZN3Dtk6Widget7DDialog12removeButtonEP15QAbstractButton@Base 2.0.11
2581 _ZN3Dtk6Widget7DDialog12removeButtonEi@Base 2.0.11
2582 _ZN3Dtk6Widget7DDialog12titleChangedE7QString@Base 2.0.11
2583 _ZN3Dtk6Widget7DDialog13buttonClickedEiRK7QString@Base 2.0.11
2584 _ZN3Dtk6Widget7DDialog13clearContentsEb@Base 2.0.11
2585 _ZN3Dtk6Widget7DDialog13insertButtonsEiRK11QStringList@Base 2.0.11
2586 _ZN3Dtk6Widget7DDialog13insertContentEiP7QWidget6QFlagsIN2Qt13AlignmentFlagEE@Base 2.0.11
2587 _ZN3Dtk6Widget7DDialog13insertSpacingEii@Base 2.0.11
2588 _ZN3Dtk6Widget7DDialog13removeContentEP7QWidgetb@Base 2.0.11
2589 _ZN3Dtk6Widget7DDialog13setButtonIconEiRK5QIcon@Base 2.0.11
2590 _ZN3Dtk6Widget7DDialog13setButtonTextEiRK7QString@Base 2.0.11
2591 _ZN3Dtk6Widget7DDialog13setIconPixmapERK7QPixmap@Base 2.0.11
2592 _ZN3Dtk6Widget7DDialog13setTextFormatEN2Qt10TextFormatE@Base 2.0.11
2593 _ZN3Dtk6Widget7DDialog14messageChangedE7QString@Base 2.0.11
2594 _ZN3Dtk6Widget7DDialog14visibleChangedEb@Base 2.0.11
2595 _ZN3Dtk6Widget7DDialog16setDefaultButtonEP15QAbstractButton@Base 2.0.11
2596 _ZN3Dtk6Widget7DDialog16setDefaultButtonERK7QString@Base 2.0.11
2597 _ZN3Dtk6Widget7DDialog16setDefaultButtonEi@Base 2.0.11
2598 _ZN3Dtk6Widget7DDialog16staticMetaObjectE@Base 2.0.11
2599 _ZN3Dtk6Widget7DDialog17textFormatChangedEN2Qt10TextFormatE@Base 2.0.11
2600 _ZN3Dtk6Widget7DDialog18removeButtonByTextERK7QString@Base 2.0.11
2601 _ZN3Dtk6Widget7DDialog23setOnButtonClickedCloseEb@Base 2.0.11
2602 _ZN3Dtk6Widget7DDialog31setContentLayoutContentsMarginsERK8QMargins@Base 2.0.11
2603 _ZN3Dtk6Widget7DDialog4execEv@Base 2.0.11
2604 _ZN3Dtk6Widget7DDialog6closedEv@Base 2.0.11
2605 _ZN3Dtk6Widget7DDialog7setIconERK5QIcon@Base 2.0.11
2606 _ZN3Dtk6Widget7DDialog7setIconERK5QIconRK5QSize@Base 2.0.11
2607 _ZN3Dtk6Widget7DDialog8setTitleERK7QString@Base 2.0.11
2608 _ZN3Dtk6Widget7DDialog9addButtonERK7QStringbNS1_10ButtonTypeE@Base 2.0.11
2609 _ZN3Dtk6Widget7DDialog9hideEventEP10QHideEvent@Base 2.0.11
2610 _ZN3Dtk6Widget7DDialog9showEventEP10QShowEvent@Base 2.0.11
2611 _ZN3Dtk6Widget7DDialogC1EP7QWidget@Base 2.0.11
2612 _ZN3Dtk6Widget7DDialogC1ERK7QStringS4_P7QWidget@Base 2.0.11
2613 _ZN3Dtk6Widget7DDialogC1ERNS0_14DDialogPrivateEP7QWidget@Base 2.0.11
2614 _ZN3Dtk6Widget7DDialogC2EP7QWidget@Base 2.0.11
2615 _ZN3Dtk6Widget7DDialogC2ERK7QStringS4_P7QWidget@Base 2.0.11
2616 _ZN3Dtk6Widget7DDialogC2ERNS0_14DDialogPrivateEP7QWidget@Base 2.0.11
2617 _ZN3Dtk6Widget7DDialogD0Ev@Base 2.0.11
2618 _ZN3Dtk6Widget7DDialogD1Ev@Base 2.0.11
2619 _ZN3Dtk6Widget7DDialogD2Ev@Base 2.0.11
2620 _ZN3Dtk6Widget7DOption10setCheckedEb@Base 2.0.11
2621 _ZN3Dtk6Widget7DOption11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
2622 _ZN3Dtk6Widget7DOption11qt_metacastEPKc@Base 2.0.11
2623 _ZN3Dtk6Widget7DOption11resizeEventEP12QResizeEvent@Base 2.0.11
2624 _ZN3Dtk6Widget7DOption14setCheckedIconERK7QString@Base 2.0.11
2625 _ZN3Dtk6Widget7DOption16staticMetaObjectE@Base 2.0.11
2626 _ZN3Dtk6Widget7DOption6layoutEv@Base 2.0.11
2627 _ZN3Dtk6Widget7DOption7setIconERK7QPixmap@Base 2.0.11
2628 _ZN3Dtk6Widget7DOption7setIconERK7QString@Base 2.0.11
2629 _ZN3Dtk6Widget7DOption7setNameERK7QString@Base 2.0.11
2630 _ZN3Dtk6Widget7DOption8setValueERK7QString@Base 2.0.11
2631 _ZN3Dtk6Widget7DOptionC1EP7QWidget@Base 2.0.11
2632 _ZN3Dtk6Widget7DOptionC2EP7QWidget@Base 2.0.11
2633 _ZN3Dtk6Widget7DOptionD0Ev@Base 2.0.11
2634 _ZN3Dtk6Widget7DOptionD1Ev@Base 2.0.11
2635 _ZN3Dtk6Widget7DOptionD2Ev@Base 2.0.11
2636 _ZN3Dtk6Widget7DSlider10paintEventEP11QPaintEvent@Base 2.0.11
2637 _ZN3Dtk6Widget7DSlider10setLeftTipERK7QString@Base 2.0.11
2638 _ZN3Dtk6Widget7DSlider11hoverTimoutEv@Base 2.0.11
2639 _ZN3Dtk6Widget7DSlider11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
2640 _ZN3Dtk6Widget7DSlider11qt_metacastEPKc@Base 2.0.11
2641 _ZN3Dtk6Widget7DSlider11removeScaleEi@Base 2.0.11
2642 _ZN3Dtk6Widget7DSlider11setRightTipERK7QString@Base 2.0.11
2643 _ZN3Dtk6Widget7DSlider11setTipColorERK6QColor@Base 2.0.11
2644 _ZN3Dtk6Widget7DSlider13setHandleTypeENS1_10HandleTypeE@Base 2.0.11
2645 _ZN3Dtk6Widget7DSlider13setScaleColorERK6QColor@Base 2.0.11
2646 _ZN3Dtk6Widget7DSlider14mouseMoveEventEP11QMouseEvent@Base 2.0.11
2647 _ZN3Dtk6Widget7DSlider15mousePressEventEP11QMouseEvent@Base 2.0.11
2648 _ZN3Dtk6Widget7DSlider16staticMetaObjectE@Base 2.0.11
2649 _ZN3Dtk6Widget7DSlider17mouseReleaseEventEP11QMouseEvent@Base 2.0.11
2650 _ZN3Dtk6Widget7DSlider17setHoverShowValueEb@Base 2.0.11
2651 _ZN3Dtk6Widget7DSlider18setHoverValueColorE6QColor@Base 2.0.11
2652 _ZN3Dtk6Widget7DSlider25setHoverShowValueIntervalEi@Base 2.0.11
2653 _ZN3Dtk6Widget7DSlider4initEv@Base 2.0.11
2654 _ZN3Dtk6Widget7DSlider8addScaleEi@Base 2.0.11
2655 _ZN3Dtk6Widget7DSliderC1EN2Qt11OrientationEP7QWidget@Base 2.0.11
2656 _ZN3Dtk6Widget7DSliderC1EP7QWidget@Base 2.0.11
2657 _ZN3Dtk6Widget7DSliderC1ERNS0_14DSliderPrivateE@Base 2.0.11
2658 _ZN3Dtk6Widget7DSliderC2EN2Qt11OrientationEP7QWidget@Base 2.0.11
2659 _ZN3Dtk6Widget7DSliderC2EP7QWidget@Base 2.0.11
2660 _ZN3Dtk6Widget7DSliderC2ERNS0_14DSliderPrivateE@Base 2.0.11
2661 _ZN3Dtk6Widget7DSliderD0Ev@Base 2.0.11
2662 _ZN3Dtk6Widget7DSliderD1Ev@Base 2.0.11
2663 _ZN3Dtk6Widget7DSliderD2Ev@Base 2.0.11
2664 _ZN3Dtk6Widget7DTabBar10setMovableEb@Base 2.0.11
2665 _ZN3Dtk6Widget7DTabBar10setTabDataEiRK8QVariant@Base 2.0.11
2666 _ZN3Dtk6Widget7DTabBar10setTabIconEiRK5QIcon@Base 2.0.11
2667 _ZN3Dtk6Widget7DTabBar10setTabTextEiRK7QString@Base 2.0.11
2668 _ZN3Dtk6Widget7DTabBar10tabRemovedEi@Base 2.0.11
2669 _ZN3Dtk6Widget7DTabBar11dragStartedEv@Base 2.0.11
2670 _ZN3Dtk6Widget7DTabBar11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
2671 _ZN3Dtk6Widget7DTabBar11qt_metacastEPKc@Base 2.0.11
2672 _ZN3Dtk6Widget7DTabBar11resizeEventEP12QResizeEvent@Base 2.0.11
2673 _ZN3Dtk6Widget7DTabBar11setAutoHideEb@Base 2.0.11
2674 _ZN3Dtk6Widget7DTabBar11setDragableEb@Base 2.0.11
2675 _ZN3Dtk6Widget7DTabBar11setDrawBaseEb@Base 2.0.11
2676 _ZN3Dtk6Widget7DTabBar11setIconSizeERK5QSize@Base 2.0.11
2677 _ZN3Dtk6Widget7DTabBar11tabInsertedEi@Base 2.0.11
2678 _ZN3Dtk6Widget7DTabBar12setElideModeEN2Qt13TextElideModeE@Base 2.0.11
2679 _ZN3Dtk6Widget7DTabBar12setExpandingEb@Base 2.0.11
2680 _ZN3Dtk6Widget7DTabBar12setMaskColorE6QColor@Base 2.0.11
2681 _ZN3Dtk6Widget7DTabBar12setTabButtonEiN7QTabBar14ButtonPositionEP7QWidget@Base 2.0.11
2682 _ZN3Dtk6Widget7DTabBar12tabIsRemovedEi@Base 2.0.11
2683 _ZN3Dtk6Widget7DTabBar13dragMoveEventEP14QDragMoveEvent@Base 2.0.11
2684 _ZN3Dtk6Widget7DTabBar13setFlashColorE6QColor@Base 2.0.11
2685 _ZN3Dtk6Widget7DTabBar13setTabEnabledEib@Base 2.0.11
2686 _ZN3Dtk6Widget7DTabBar13setTabToolTipEiRK7QString@Base 2.0.11
2687 _ZN3Dtk6Widget7DTabBar13startTabFlashEi@Base 2.0.11
2688 _ZN3Dtk6Widget7DTabBar13tabBarClickedEi@Base 2.0.11
2689 _ZN3Dtk6Widget7DTabBar13tabIsInsertedEi@Base 2.0.11
2690 _ZN3Dtk6Widget7DTabBar14currentChangedEi@Base 2.0.11
2691 _ZN3Dtk6Widget7DTabBar14dragEnterEventEP15QDragEnterEvent@Base 2.0.11
2692 _ZN3Dtk6Widget7DTabBar14dragLeaveEventEP15QDragLeaveEvent@Base 2.0.11
2693 _ZN3Dtk6Widget7DTabBar15setCurrentIndexEi@Base 2.0.11
2694 _ZN3Dtk6Widget7DTabBar15setDocumentModeEb@Base 2.0.11
2695 _ZN3Dtk6Widget7DTabBar15setTabWhatsThisEiRK7QString@Base 2.0.11
2696 _ZN3Dtk6Widget7DTabBar15setTabsClosableEb@Base 2.0.11
2697 _ZN3Dtk6Widget7DTabBar15tabAddRequestedEv@Base 2.0.11
2698 _ZN3Dtk6Widget7DTabBar15tabLayoutChangeEv@Base 2.0.11
2699 _ZN3Dtk6Widget7DTabBar16staticMetaObjectE@Base 2.0.11
2700 _ZN3Dtk6Widget7DTabBar17dragActionChangedEN2Qt10DropActionE@Base 2.0.11
2701 _ZN3Dtk6Widget7DTabBar17setTabMaximumSizeEiRK5QSize@Base 2.0.11
2702 _ZN3Dtk6Widget7DTabBar17setTabMinimumSizeEiRK5QSize@Base 2.0.11
2703 _ZN3Dtk6Widget7DTabBar17tabCloseRequestedEi@Base 2.0.11
2704 _ZN3Dtk6Widget7DTabBar18insertFromMimeDataEiPK9QMimeData@Base 2.0.11
2705 _ZN3Dtk6Widget7DTabBar19setVisibleAddButtonEb@Base 2.0.11
2706 _ZN3Dtk6Widget7DTabBar19tabBarDoubleClickedEi@Base 2.0.11
2707 _ZN3Dtk6Widget7DTabBar19tabReleaseRequestedEi@Base 2.0.11
2708 _ZN3Dtk6Widget7DTabBar20setStartDragDistanceEi@Base 2.0.11
2709 _ZN3Dtk6Widget7DTabBar20setUsesScrollButtonsEb@Base 2.0.11
2710 _ZN3Dtk6Widget7DTabBar22setChangeCurrentOnDragEb@Base 2.0.11
2711 _ZN3Dtk6Widget7DTabBar28setSelectionBehaviorOnRemoveEN7QTabBar17SelectionBehaviorE@Base 2.0.11
2712 _ZN3Dtk6Widget7DTabBar29insertFromMimeDataOnDragEnterEiPK9QMimeData@Base 2.0.11
2713 _ZN3Dtk6Widget7DTabBar6addTabERK5QIconRK7QString@Base 2.0.11
2714 _ZN3Dtk6Widget7DTabBar6addTabERK7QString@Base 2.0.11
2715 _ZN3Dtk6Widget7DTabBar6d_funcEv@Base 2.0.11
2716 _ZN3Dtk6Widget7DTabBar7dragEndEN2Qt10DropActionE@Base 2.0.11
2717 _ZN3Dtk6Widget7DTabBar7moveTabEii@Base 2.0.11
2718 _ZN3Dtk6Widget7DTabBar8setShapeEN7QTabBar5ShapeE@Base 2.0.11
2719 _ZN3Dtk6Widget7DTabBar8stopDragEN2Qt10DropActionE@Base 2.0.11
2720 _ZN3Dtk6Widget7DTabBar8tabMovedEii@Base 2.0.11
2721 _ZN3Dtk6Widget7DTabBar9dropEventEP10QDropEvent@Base 2.0.11
2722 _ZN3Dtk6Widget7DTabBar9insertTabEiRK5QIconRK7QString@Base 2.0.11
2723 _ZN3Dtk6Widget7DTabBar9insertTabEiRK7QString@Base 2.0.11
2724 _ZN3Dtk6Widget7DTabBar9removeTabEi@Base 2.0.11
2725 _ZN3Dtk6Widget7DTabBar9startDragEi@Base 2.0.11
2726 _ZN3Dtk6Widget7DTabBar9tabDropedEiN2Qt10DropActionEP7QObject@Base 2.0.11
2727 _ZN3Dtk6Widget7DTabBarC1EP7QWidget@Base 2.0.11
2728 _ZN3Dtk6Widget7DTabBarC2EP7QWidget@Base 2.0.11
2729 _ZN3Dtk6Widget7DTabBarD0Ev@Base 2.0.11
2730 _ZN3Dtk6Widget7DTabBarD1Ev@Base 2.0.11
2731 _ZN3Dtk6Widget7DTabBarD2Ev@Base 2.0.11
2732 _ZN3Dtk6Widget8DSpinBox11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
2733 _ZN3Dtk6Widget8DSpinBox11qt_metacastEPKc@Base 2.0.11
2734 _ZN3Dtk6Widget8DSpinBox11resizeEventEP12QResizeEvent@Base 2.0.11
2735 _ZN3Dtk6Widget8DSpinBox12alertChangedEb@Base 2.0.11
2736 _ZN3Dtk6Widget8DSpinBox15setDefaultValueEi@Base 2.0.11
2737 _ZN3Dtk6Widget8DSpinBox16staticMetaObjectE@Base 2.0.11
2738 _ZN3Dtk6Widget8DSpinBox19defaultValueChangedEi@Base 2.0.11
2739 _ZN3Dtk6Widget8DSpinBox8setAlertEb@Base 2.0.11
2740 _ZN3Dtk6Widget8DSpinBoxC1EP7QWidget@Base 2.0.11
2741 _ZN3Dtk6Widget8DSpinBoxC2EP7QWidget@Base 2.0.11
2742 _ZN3Dtk6Widget8DSpinBoxD0Ev@Base 2.0.11
2743 _ZN3Dtk6Widget8DSpinBoxD1Ev@Base 2.0.11
2744 _ZN3Dtk6Widget8DSpinBoxD2Ev@Base 2.0.11
2745 _ZN3Dtk6Widget8DSpinner10paintEventEP11QPaintEvent@Base 2.0.11
2746 _ZN3Dtk6Widget8DSpinner11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
2747 _ZN3Dtk6Widget8DSpinner11qt_metacastEPKc@Base 2.0.11
2748 _ZN3Dtk6Widget8DSpinner16staticMetaObjectE@Base 2.0.11
2749 _ZN3Dtk6Widget8DSpinner18setBackgroundColorE6QColor@Base 2.0.11
2750 _ZN3Dtk6Widget8DSpinner4stopEv@Base 2.0.11
2751 _ZN3Dtk6Widget8DSpinner5startEv@Base 2.0.11
2752 _ZN3Dtk6Widget8DSpinnerC1EP7QWidget@Base 2.0.11
2753 _ZN3Dtk6Widget8DSpinnerC2EP7QWidget@Base 2.0.11
2754 _ZN3Dtk6Widget8DSpinnerD0Ev@Base 2.0.11
2755 _ZN3Dtk6Widget8DSpinnerD1Ev@Base 2.0.11
2756 _ZN3Dtk6Widget8DSpinnerD2Ev@Base 2.0.11
2757 _ZN3Dtk6Widget9DBaseLine10leftLayoutEv@Base 2.0.11
2758 _ZN3Dtk6Widget9DBaseLine11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
2759 _ZN3Dtk6Widget9DBaseLine11qt_metacastEPKc@Base 2.0.11
2760 _ZN3Dtk6Widget9DBaseLine11rightLayoutEv@Base 2.0.11
2761 _ZN3Dtk6Widget9DBaseLine13setLeftMarginEi@Base 2.0.11
2762 _ZN3Dtk6Widget9DBaseLine14setLeftContentEP7QWidget@Base 2.0.11
2763 _ZN3Dtk6Widget9DBaseLine14setRightMarginEi@Base 2.0.11
2764 _ZN3Dtk6Widget9DBaseLine15setRightContentEP7QWidget@Base 2.0.11
2765 _ZN3Dtk6Widget9DBaseLine16staticMetaObjectE@Base 2.0.11
2766 _ZN3Dtk6Widget9DBaseLineC1EP7QWidget@Base 2.0.11
2767 _ZN3Dtk6Widget9DBaseLineC2EP7QWidget@Base 2.0.11
2768 _ZN3Dtk6Widget9DBaseLineD0Ev@Base 2.0.11
2769 _ZN3Dtk6Widget9DBaseLineD1Ev@Base 2.0.11
2770 _ZN3Dtk6Widget9DBaseLineD2Ev@Base 2.0.11
2771 _ZN3Dtk6Widget9DLineEdit11eventFilterEP7QObjectP6QEvent@Base 2.0.11
2772 _ZN3Dtk6Widget9DLineEdit11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
2773 _ZN3Dtk6Widget9DLineEdit11qt_metacastEPKc@Base 2.0.11
2774 _ZN3Dtk6Widget9DLineEdit11resizeEventEP12QResizeEvent@Base 2.0.11
2775 _ZN3Dtk6Widget9DLineEdit12focusInEventEP11QFocusEvent@Base 2.0.11
2776 _ZN3Dtk6Widget9DLineEdit12setHoverIconERK7QString@Base 2.0.11
2777 _ZN3Dtk6Widget9DLineEdit12setPressIconERK7QString@Base 2.0.11
2778 _ZN3Dtk6Widget9DLineEdit13focusOutEventEP11QFocusEvent@Base 2.0.11
2779 _ZN3Dtk6Widget9DLineEdit13setNormalIconERK7QString@Base 2.0.11
2780 _ZN3Dtk6Widget9DLineEdit14setIconVisibleEb@Base 2.0.11
2781 _ZN3Dtk6Widget9DLineEdit16hideAlertMessageEv@Base 2.0.11
2782 _ZN3Dtk6Widget9DLineEdit16showAlertMessageERK7QStringi@Base 2.0.11
2783 _ZN3Dtk6Widget9DLineEdit16staticMetaObjectE@Base 2.0.11
2784 _ZN3Dtk6Widget9DLineEdit8setAlertEb@Base 2.0.11
2785 _ZN3Dtk6Widget9DLineEditC1EP7QWidget@Base 2.0.11
2786 _ZN3Dtk6Widget9DLineEditC1ERNS0_16DLineEditPrivateEP7QWidget@Base 2.0.11
2787 _ZN3Dtk6Widget9DLineEditC2EP7QWidget@Base 2.0.11
2788 _ZN3Dtk6Widget9DLineEditC2ERNS0_16DLineEditPrivateEP7QWidget@Base 2.0.11
2789 _ZN3Dtk6Widget9DLineEditD0Ev@Base 2.0.11
2790 _ZN3Dtk6Widget9DLineEditD1Ev@Base 2.0.11
2791 _ZN3Dtk6Widget9DLineEditD2Ev@Base 2.0.11
2792 _ZN3Dtk6Widget9DListView10insertItemEiRK8QVariant@Base 2.0.11
2793 _ZN3Dtk6Widget9DListView10removeItemEi@Base 2.0.11
2794 _ZN3Dtk6Widget9DListView11insertItemsEiRK5QListI8QVariantE@Base 2.0.11
2795 _ZN3Dtk6Widget9DListView11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
2796 _ZN3Dtk6Widget9DListView11qt_metacastEPKc@Base 2.0.11
2797 _ZN3Dtk6Widget9DListView11removeItemsEii@Base 2.0.11
2798 _ZN3Dtk6Widget9DListView11resizeEventEP12QResizeEvent@Base 2.0.11
2799 _ZN3Dtk6Widget9DListView11setWrappingEb@Base 2.0.11
2800 _ZN3Dtk6Widget9DListView11triggerEditERK11QModelIndex@Base 2.0.11
2801 _ZN3Dtk6Widget9DListView14currentChangedERK11QModelIndex@Base 2.0.11
2802 _ZN3Dtk6Widget9DListView14currentChangedERK11QModelIndexS4_@Base 2.0.11
2803 _ZN3Dtk6Widget9DListView14setOrientationEN9QListView4FlowEb@Base 2.0.11
2804 _ZN3Dtk6Widget9DListView15addFooterWidgetEP7QWidget@Base 2.0.11
2805 _ZN3Dtk6Widget9DListView15addHeaderWidgetEP7QWidget@Base 2.0.11
2806 _ZN3Dtk6Widget9DListView15rowCountChangedEv@Base 2.0.11
2807 _ZN3Dtk6Widget9DListView16staticMetaObjectE@Base 2.0.11
2808 _ZN3Dtk6Widget9DListView16takeFooterWidgetEi@Base 2.0.11
2809 _ZN3Dtk6Widget9DListView16takeHeaderWidgetEi@Base 2.0.11
2810 _ZN3Dtk6Widget9DListView18orientationChangedEN2Qt11OrientationE@Base 2.0.11
2811 _ZN3Dtk6Widget9DListView18removeFooterWidgetEi@Base 2.0.11
2812 _ZN3Dtk6Widget9DListView18removeHeaderWidgetEi@Base 2.0.11
2813 _ZN3Dtk6Widget9DListView4editERK11QModelIndex@Base 2.0.11
2814 _ZN3Dtk6Widget9DListView4editERK11QModelIndexN17QAbstractItemView11EditTriggerEP6QEvent@Base 2.0.11
2815 _ZN3Dtk6Widget9DListView7addItemERK8QVariant@Base 2.0.11
2816 _ZN3Dtk6Widget9DListView7setFlowEN9QListView4FlowE@Base 2.0.11
2817 _ZN3Dtk6Widget9DListView8addItemsERK5QListI8QVariantE@Base 2.0.11
2818 _ZN3Dtk6Widget9DListView8setModelEP18QAbstractItemModel@Base 2.0.11
2819 _ZN3Dtk6Widget9DListViewC1EP7QWidget@Base 2.0.11
2820 _ZN3Dtk6Widget9DListViewC2EP7QWidget@Base 2.0.11
2821 _ZN3Dtk6Widget9DListViewD0Ev@Base 2.0.11
2822 _ZN3Dtk6Widget9DListViewD1Ev@Base 2.0.11
2823 _ZN3Dtk6Widget9DListViewD2Ev@Base 2.0.11
2824 _ZN3Dtk6Widget9DTextEdit11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
2825 _ZN3Dtk6Widget9DTextEdit11qt_metacastEPKc@Base 2.0.11
2826 _ZN3Dtk6Widget9DTextEdit11resizeEventEP12QResizeEvent@Base 2.0.11
2827 _ZN3Dtk6Widget9DTextEdit16staticMetaObjectE@Base 2.0.11
2828 _ZN3Dtk6Widget9DTextEditC1EP7QWidget@Base 2.0.11
2829 _ZN3Dtk6Widget9DTextEditC2EP7QWidget@Base 2.0.11
2830 _ZN3Dtk6Widget9DTextEditD0Ev@Base 2.0.11
2831 _ZN3Dtk6Widget9DTextEditD1Ev@Base 2.0.11
2832 _ZN3Dtk6Widget9DTextEditD2Ev@Base 2.0.11
2833 _ZN3Dtk6Widget9DTitlebar10setVisibleEb@Base 2.0.11
2834 _ZN3Dtk6Widget9DTitlebar11eventFilterEP7QObjectP6QEvent@Base 2.0.11
2835 _ZN3Dtk6Widget9DTitlebar11mouseMovingEN2Qt11MouseButtonE@Base 2.0.11
2836 _ZN3Dtk6Widget9DTitlebar11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
2837 _ZN3Dtk6Widget9DTitlebar11qt_metacastEPKc@Base 2.0.11
2838 _ZN3Dtk6Widget9DTitlebar11resizeEventEP12QResizeEvent@Base 2.0.11
2839 _ZN3Dtk6Widget9DTitlebar12mousePressedE6QFlagsIN2Qt11MouseButtonEE@Base 2.0.11
2840 _ZN3Dtk6Widget9DTitlebar12setEmbedModeEb@Base 2.0.11
2841 _ZN3Dtk6Widget9DTitlebar13doubleClickedEv@Base 2.0.11
2842 _ZN3Dtk6Widget9DTitlebar13optionClickedEv@Base 2.0.11
2843 _ZN3Dtk6Widget9DTitlebar14mouseMoveEventEP11QMouseEvent@Base 2.0.11
2844 _ZN3Dtk6Widget9DTitlebar14setFixedHeightEi@Base 2.0.11
2845 _ZN3Dtk6Widget9DTitlebar15mousePressEventEP11QMouseEvent@Base 2.0.11
2846 _ZN3Dtk6Widget9DTitlebar15setCustomWidgetEP7QWidgetN2Qt13AlignmentFlagEb@Base 2.0.11
2847 _ZN3Dtk6Widget9DTitlebar15setCustomWidgetEP7QWidgetb@Base 2.0.11
2848 _ZN3Dtk6Widget9DTitlebar15setDisableFlagsE6QFlagsIN2Qt10WindowTypeEE@Base 2.0.11
2849 _ZN3Dtk6Widget9DTitlebar16staticMetaObjectE@Base 2.0.11
2850 _ZN3Dtk6Widget9DTitlebar17mouseReleaseEventEP11QMouseEvent@Base 2.0.11
2851 _ZN3Dtk6Widget9DTitlebar17toggleWindowStateEv@Base 2.0.11
2852 _ZN3Dtk6Widget9DTitlebar19setSeparatorVisibleEb@Base 2.0.11
2853 _ZN3Dtk6Widget9DTitlebar21mouseDoubleClickEventEP11QMouseEvent@Base 2.0.11
2854 _ZN3Dtk6Widget9DTitlebar23setAutoHideOnFullscreenEb@Base 2.0.11
2855 _ZN3Dtk6Widget9DTitlebar24setBackgroundTransparentEb@Base 2.0.11
2856 _ZN3Dtk6Widget9DTitlebar6resizeERK5QSize@Base 2.0.11
2857 _ZN3Dtk6Widget9DTitlebar6resizeEii@Base 2.0.11
2858 _ZN3Dtk6Widget9DTitlebar7setIconERK5QIcon@Base 2.0.11
2859 _ZN3Dtk6Widget9DTitlebar7setMenuEP5QMenu@Base 2.0.11
2860 _ZN3Dtk6Widget9DTitlebar8setTitleERK7QString@Base 2.0.11
2861 _ZN3Dtk6Widget9DTitlebar8showMenuEv@Base 2.0.11
2862 _ZN3Dtk6Widget9DTitlebar9showEventEP10QShowEvent@Base 2.0.11
2863 _ZN3Dtk6Widget9DTitlebarC1EP7QWidget@Base 2.0.11
2864 _ZN3Dtk6Widget9DTitlebarC2EP7QWidget@Base 2.0.11
2865 _ZN3Dtk6Widget9DTitlebarD0Ev@Base 2.0.11
2866 _ZN3Dtk6Widget9DTitlebarD1Ev@Base 2.0.11
2867 _ZN3Dtk6Widget9DTitlebarD2Ev@Base 2.0.11
2868 (optional=templinst)_ZN4QMapI7QString8QVariantE13detach_helperEv@Base 2.0.11
2869 (optional=templinst)_ZN4QMapI7QString8QVariantED1Ev@Base 2.0.11
2870 (optional=templinst)_ZN4QMapI7QString8QVariantED2Ev@Base 2.0.11
2871 (optional=templinst)_ZN4QMapI7QStringN3Dtk6Widget16DCrumbTextFormatEE13detach_helperEv@Base 2.0.11
2872 (optional=templinst)_ZN4QMapI7QStringN3Dtk6Widget16DCrumbTextFormatEED1Ev@Base 2.0.11
2873 (optional=templinst)_ZN4QMapI7QStringN3Dtk6Widget16DCrumbTextFormatEED2Ev@Base 2.0.11
2874 (optional=templinst)_ZN4QMapI7QStringS0_E13detach_helperEv@Base 2.0.11
2875 (optional=templinst)_ZN4QMapI7QStringS0_ED1Ev@Base 2.0.11
2876 (optional=templinst)_ZN4QMapI7QStringS0_ED2Ev@Base 2.0.11
2877 (optional=templinst)_ZN4QMapI7QStringSt8functionIFP7QWidgetP7QObjectEEE6insertERKS0_RKS7_@Base 2.0.11
2878 (optional=templinst)_ZN4QMapI7QStringSt8functionIFP7QWidgetP7QObjectEEED1Ev@Base 2.0.11
2879 (optional=templinst)_ZN4QMapI7QStringSt8functionIFP7QWidgetP7QObjectEEED2Ev@Base 2.0.11
2880 (optional=templinst)_ZN4QMapIP7QWidgetS_I7QStringS2_EE13detach_helperEv@Base 2.0.11
2881 (optional=templinst)_ZN4QMapIPK7QWidgetPN3Dtk6Widget12DAnchorsBaseEE13detach_helperEv@Base 2.0.11
2882 (optional=templinst)_ZN4QMapIPK7QWidgetPN3Dtk6Widget12DAnchorsBaseEE6removeERKS2_@Base 2.0.11
2883 (optional=templinst)_ZN4QMapIPK7QWidgetPN3Dtk6Widget12DAnchorsBaseEED1Ev@Base 2.0.11
2884 (optional=templinst)_ZN4QMapIPK7QWidgetPN3Dtk6Widget12DAnchorsBaseEED2Ev@Base 2.0.11
2885 (optional=templinst)_ZN4QMapIPK7QWidgetbE13detach_helperEv@Base 2.0.11
2886 (optional=templinst)_ZN4QMapIi7QStringE13detach_helperEv@Base 2.0.11
2887 (optional=templinst)_ZN4QMapIi7QStringED1Ev@Base 2.0.11
2888 (optional=templinst)_ZN4QMapIi7QStringED2Ev@Base 2.0.11
2889 (optional=templinst)_ZN4QMapIiPN3Dtk6Widget11DBaseExpandEE13detach_helperEv@Base 2.0.11
2890 (optional=templinst)_ZN4QMapIiPN3Dtk6Widget11DBaseExpandEE6removeERKi@Base 2.0.11
2891 (optional=templinst)_ZN4QSetI7QStringED1Ev@Base 2.0.11
2892 (optional=templinst)_ZN4QSetI7QStringED2Ev@Base 2.0.11
2893 (optional=templinst)_ZN5QHashI5QPairI7QStringN3Dtk6Widget18DThumbnailProvider4SizeEE15QHashDummyValueE11deleteNode2EPN9QHashData4NodeE@Base 2.0.11
2894 (optional=templinst)_ZN5QHashI5QPairI7QStringN3Dtk6Widget18DThumbnailProvider4SizeEE15QHashDummyValueE13detach_helperEv@Base 2.0.11
2895 (optional=templinst)_ZN5QHashI5QPairI7QStringN3Dtk6Widget18DThumbnailProvider4SizeEE15QHashDummyValueE13duplicateNodeEPN9QHashData4NodeEPv@Base 2.0.11
2896 (optional=templinst)_ZN5QHashI5QPairI7QStringN3Dtk6Widget18DThumbnailProvider4SizeEE15QHashDummyValueE6removeERKS6_@Base 2.0.11
2897 (optional=templinst)_ZN5QHashI7QString15QHashDummyValueE11deleteNode2EPN9QHashData4NodeE@Base 2.0.11
2898 (optional=templinst)_ZN5QHashI7QString15QHashDummyValueE13detach_helperEv@Base 2.0.11
2899 (optional=templinst)_ZN5QHashI7QString15QHashDummyValueE13duplicateNodeEPN9QHashData4NodeEPv@Base 2.0.11
2900 (optional=templinst)_ZN5QHashI9QMimeTypexE11deleteNode2EPN9QHashData4NodeE@Base 2.0.11
2901 (optional=templinst)_ZN5QHashI9QMimeTypexE13duplicateNodeEPN9QHashData4NodeEPv@Base 2.0.11
2902 (optional=templinst)_ZN5QHashIP7QWidgetPKN3Dtk6Widget17DBlurEffectWidgetEE11deleteNode2EPN9QHashData4NodeE@Base 2.0.11
2903 (optional=templinst)_ZN5QHashIP7QWidgetPKN3Dtk6Widget17DBlurEffectWidgetEE13detach_helperEv@Base 2.0.11
2904 (optional=templinst)_ZN5QHashIP7QWidgetPKN3Dtk6Widget17DBlurEffectWidgetEE13duplicateNodeEPN9QHashData4NodeEPv@Base 2.0.11
2905 (optional=templinst)_ZN5QHashIP7QWidgetPKN3Dtk6Widget17DBlurEffectWidgetEE5eraseENS7_14const_iteratorE@Base 2.0.11
2906 (optional=templinst)_ZN5QHashIPKN3Dtk6Widget17DBlurEffectWidgetEP7QWidgetE11deleteNode2EPN9QHashData4NodeE@Base 2.0.11
2907 (optional=templinst)_ZN5QHashIPKN3Dtk6Widget17DBlurEffectWidgetEP7QWidgetE13detach_helperEv@Base 2.0.11
2908 (optional=templinst)_ZN5QHashIPKN3Dtk6Widget17DBlurEffectWidgetEP7QWidgetE13duplicateNodeEPN9QHashData4NodeEPv@Base 2.0.11
2909 (optional=templinst)_ZN5QHashIPKN3Dtk6Widget17DBlurEffectWidgetEP7QWidgetED1Ev@Base 2.0.11
2910 (optional=templinst)_ZN5QHashIPKN3Dtk6Widget17DBlurEffectWidgetEP7QWidgetED2Ev@Base 2.0.11
2911 (optional=templinst)_ZN5QListI10QByteArrayED1Ev@Base 2.0.11
2912 (optional=templinst)_ZN5QListI10QByteArrayED2Ev@Base 2.0.11
2913 (optional=templinst)_ZN5QListI12QPainterPathE13detach_helperEi@Base 2.0.11
2914 (optional=templinst)_ZN5QListI12QPainterPathE18detach_helper_growEii@Base 2.0.11
2915 (optional=templinst)_ZN5QListI12QPainterPathE6appendERKS0_@Base 2.0.11
2916 (optional=templinst)_ZN5QListI12QPainterPathEC1ERKS1_@Base 2.0.11
2917 (optional=templinst)_ZN5QListI12QPainterPathEC2ERKS1_@Base 2.0.11
2918 (optional=templinst)_ZN5QListI12QPainterPathED1Ev@Base 2.0.11
2919 (optional=templinst)_ZN5QListI12QPainterPathED2Ev@Base 2.0.11
2920 (optional=templinst)_ZN5QListI4QUrlE13detach_helperEi@Base 2.0.11
2921 (optional=templinst)_ZN5QListI4QUrlE18detach_helper_growEii@Base 2.0.11
2922 (optional=templinst)_ZN5QListI4QUrlE6appendERKS0_@Base 2.0.11
2923 (optional=templinst)_ZN5QListI4QUrlEC1ERKS1_@Base 2.0.11
2924 (optional=templinst)_ZN5QListI4QUrlEC2ERKS1_@Base 2.0.11
2925 (optional=templinst)_ZN5QListI4QUrlED1Ev@Base 2.0.11
2926 (optional=templinst)_ZN5QListI4QUrlED2Ev@Base 2.0.11
2927 (optional=templinst)_ZN5QListI5QIconEC1ERKS1_@Base 2.0.11
2928 (optional=templinst)_ZN5QListI5QIconEC2ERKS1_@Base 2.0.11
2929 (optional=templinst)_ZN5QListI5QSizeE13detach_helperEi@Base 2.0.11
2930 (optional=templinst)_ZN5QListI5QSizeE18detach_helper_growEii@Base 2.0.11
2931 (optional=templinst)_ZN5QListI5QSizeED1Ev@Base 2.0.11
2932 (optional=templinst)_ZN5QListI5QSizeED2Ev@Base 2.0.11
2933 (optional=templinst)_ZN5QListI6QColorE18detach_helper_growEii@Base 2.0.11
2934 (optional=templinst)_ZN5QListI6QColorE6appendERKS0_@Base 2.0.11
2935 (optional=templinst)_ZN5QListI6QColorEC1ERKS1_@Base 2.0.11
2936 (optional=templinst)_ZN5QListI6QColorEC2ERKS1_@Base 2.0.11
2937 (optional=templinst)_ZN5QListI6QColorED1Ev@Base 2.0.11
2938 (optional=templinst)_ZN5QListI6QColorED2Ev@Base 2.0.11
2939 (optional=templinst)_ZN5QListI7QLocaleE13detach_helperEi@Base 2.0.11
2940 (optional=templinst)_ZN5QListI7QLocaleEC1ERKS1_@Base 2.0.11
2941 (optional=templinst)_ZN5QListI7QLocaleEC2ERKS1_@Base 2.0.11
2942 (optional=templinst)_ZN5QListI7QLocaleED1Ev@Base 2.0.11
2943 (optional=templinst)_ZN5QListI7QLocaleED2Ev@Base 2.0.11
2944 (optional=templinst)_ZN5QListI7QPixmapE18detach_helper_growEii@Base 2.0.11
2945 (optional=templinst)_ZN5QListI7QPixmapE6appendERKS0_@Base 2.0.11
2946 (optional=templinst)_ZN5QListI7QPixmapED1Ev@Base 2.0.11
2947 (optional=templinst)_ZN5QListI7QPixmapED2Ev@Base 2.0.11
2948 (optional=templinst)_ZN5QListI7QRegExpE13detach_helperEi@Base 2.0.11
2949 (optional=templinst)_ZN5QListI7QRegExpE18detach_helper_growEii@Base 2.0.11
2950 (optional=templinst)_ZN5QListI7QRegExpE6appendERKS0_@Base 2.0.11
2951 (optional=templinst)_ZN5QListI7QRegExpEC1ERKS1_@Base 2.0.11
2952 (optional=templinst)_ZN5QListI7QRegExpEC2ERKS1_@Base 2.0.11
2953 (optional=templinst)_ZN5QListI7QRegExpED1Ev@Base 2.0.11
2954 (optional=templinst)_ZN5QListI7QRegExpED2Ev@Base 2.0.11
2955 (optional=templinst)_ZN5QListI7QStringE13detach_helperEi@Base 2.0.11
2956 (optional=templinst)_ZN5QListI7QStringE18detach_helper_growEii@Base 2.0.11
2957 (optional=templinst)_ZN5QListI7QStringE5clearEv@Base 2.0.11
2958 (optional=templinst)_ZN5QListI7QStringE6appendERKS0_@Base 2.0.11
2959 (optional=templinst)_ZN5QListI7QStringE7reserveEi@Base 2.0.11
2960 (optional=templinst)_ZN5QListI7QStringE9removeAllERKS0_@Base 2.0.11
2961 (optional=templinst)_ZN5QListI7QStringE9removeOneERKS0_@Base 2.0.11
2962 (optional=templinst)_ZN5QListI7QStringEC1ERKS1_@Base 2.0.11
2963 (optional=templinst)_ZN5QListI7QStringEC2ERKS1_@Base 2.0.11
2964 (optional=templinst)_ZN5QListI7QStringED1Ev@Base 2.0.11
2965 (optional=templinst)_ZN5QListI7QStringED2Ev@Base 2.0.11
2966 (optional=templinst)_ZN5QListI7QStringEpLERKS1_@Base 2.0.11
2967 (optional=templinst)_ZN5QListI8QPointerI7QWindowEE13detach_helperEi@Base 2.0.11
2968 (optional=templinst)_ZN5QListI8QPointerI7QWindowEE18detach_helper_growEii@Base 2.0.11
2969 (optional=templinst)_ZN5QListI8QPointerI7QWindowEE6appendERKS2_@Base 2.0.11
2970 (optional=templinst)_ZN5QListI8QPointerI7QWindowEED1Ev@Base 2.0.11
2971 (optional=templinst)_ZN5QListI8QPointerI7QWindowEED2Ev@Base 2.0.11
2972 (optional=templinst)_ZN5QListI8QPointerIN3Dtk4Core14DSettingsGroupEEE13detach_helperEi@Base 2.0.11
2973 (optional=templinst)_ZN5QListI8QPointerIN3Dtk4Core14DSettingsGroupEEED1Ev@Base 2.0.11
2974 (optional=templinst)_ZN5QListI8QPointerIN3Dtk4Core14DSettingsGroupEEED2Ev@Base 2.0.11
2975 (optional=templinst)_ZN5QListI8QPointerIN3Dtk4Core15DSettingsOptionEEE13detach_helperEi@Base 2.0.11
2976 (optional=templinst)_ZN5QListI8QPointerIN3Dtk4Core15DSettingsOptionEEED1Ev@Base 2.0.11
2977 (optional=templinst)_ZN5QListI8QPointerIN3Dtk4Core15DSettingsOptionEEED2Ev@Base 2.0.11
2978 (optional=templinst)_ZN5QListI8QVariantE13detach_helperEi@Base 2.0.11
2979 (optional=templinst)_ZN5QListI8QVariantE18detach_helper_growEii@Base 2.0.11
2980 (optional=templinst)_ZN5QListI8QVariantE6appendERKS0_@Base 2.0.11
2981 (optional=templinst)_ZN5QListI8QVariantEC1ERKS1_@Base 2.0.11
2982 (optional=templinst)_ZN5QListI8QVariantEC2ERKS1_@Base 2.0.11
2983 (optional=templinst)_ZN5QListI8QVariantED1Ev@Base 2.0.11
2984 (optional=templinst)_ZN5QListI8QVariantED2Ev@Base 2.0.11
2985 (optional=templinst)_ZN5QListIN11QVideoFrame11PixelFormatEE18detach_helper_growEii@Base 2.0.11
2986 (optional=templinst)_ZN5QListIN11QVideoFrame11PixelFormatEE6appendERKS1_@Base 2.0.11
2987 (optional=templinst)_ZN5QListIN11QVideoFrame11PixelFormatEEC1ERKS2_@Base 2.0.11
2988 (optional=templinst)_ZN5QListIN11QVideoFrame11PixelFormatEEC2ERKS2_@Base 2.0.11
2989 (optional=templinst)_ZN5QListIN11QVideoFrame11PixelFormatEED1Ev@Base 2.0.11
2990 (optional=templinst)_ZN5QListIN11QVideoFrame11PixelFormatEED2Ev@Base 2.0.11
2991 (optional=templinst)_ZN5QListIN14QTabBarPrivate3TabEE13detach_helperEi@Base 2.0.11
2992 (optional=templinst)_ZN5QListIN3Dtk4Core8DPathBufEE13detach_helperEi@Base 2.0.11
2993 (optional=templinst)_ZN5QListIN3Dtk4Core8DPathBufEE18detach_helper_growEii@Base 2.0.11
2994 (optional=templinst)_ZN5QListIN3Dtk4Core8DPathBufEE6appendERKS2_@Base 2.0.11
2995 (optional=templinst)_ZN5QListIN3Dtk4Core8DPathBufEEC1ERKS3_@Base 2.0.11
2996 (optional=templinst)_ZN5QListIN3Dtk4Core8DPathBufEEC2ERKS3_@Base 2.0.11
2997 (optional=templinst)_ZN5QListIN3Dtk4Core8DPathBufEED1Ev@Base 2.0.11
2998 (optional=templinst)_ZN5QListIN3Dtk4Core8DPathBufEED2Ev@Base 2.0.11
2999 (optional=templinst)_ZN5QListIN3Dtk6Widget16DCrumbTextFormatEE18detach_helper_growEii@Base 2.0.11
3000 (optional=templinst)_ZN5QListIN3Dtk6Widget16DCrumbTextFormatEE6appendERKS2_@Base 2.0.11
3001 (optional=templinst)_ZN5QListIN3Dtk6Widget16DCrumbTextFormatEED1Ev@Base 2.0.11
3002 (optional=templinst)_ZN5QListIN3Dtk6Widget16DCrumbTextFormatEED2Ev@Base 2.0.11
3003 (optional=templinst)_ZN5QListIN3Dtk6Widget25DThumbnailProviderPrivate11ProduceInfoEE13detach_helperEi@Base 2.0.11
3004 (optional=templinst)_ZN5QListIN3Dtk6Widget25DThumbnailProviderPrivate11ProduceInfoEE18detach_helper_growEii@Base 2.0.11
3005 (optional=templinst)_ZN5QListIN3Dtk6Widget25DThumbnailProviderPrivate11ProduceInfoEE6appendERKS3_@Base 2.0.11
3006 (optional=templinst)_ZN5QListIN3Dtk6Widget25DThumbnailProviderPrivate11ProduceInfoEED1Ev@Base 2.0.11
3007 (optional=templinst)_ZN5QListIN3Dtk6Widget25DThumbnailProviderPrivate11ProduceInfoEED2Ev@Base 2.0.11
3008 (optional=templinst)_ZN5QListIN3Dtk6Widget3PopEE13detach_helperEi@Base 2.0.11
3009 (optional=templinst)_ZN5QListIN3Dtk6Widget3PopEE18detach_helper_growEii@Base 2.0.11
3010 (optional=templinst)_ZN5QListIN3Dtk6Widget3PopEE6appendERKS2_@Base 2.0.11
3011 (optional=templinst)_ZN5QListIN3Dtk6Widget3PopEED1Ev@Base 2.0.11
3012 (optional=templinst)_ZN5QListIN3Dtk6Widget3PopEED2Ev@Base 2.0.11
3013 (optional=templinst)_ZN5QListIP11QLayoutItemE18detach_helper_growEii@Base 2.0.11
3014 (optional=templinst)_ZN5QListIP11QLayoutItemED1Ev@Base 2.0.11
3015 (optional=templinst)_ZN5QListIP11QLayoutItemED2Ev@Base 2.0.11
3016 (optional=templinst)_ZN5QListIP11QToolButtonE18detach_helper_growEii@Base 2.0.11
3017 (optional=templinst)_ZN5QListIP11QToolButtonED1Ev@Base 2.0.11
3018 (optional=templinst)_ZN5QListIP11QToolButtonED2Ev@Base 2.0.11
3019 (optional=templinst)_ZN5QListIP12QRadioButtonE18detach_helper_growEii@Base 2.0.11
3020 (optional=templinst)_ZN5QListIP12QRadioButtonEC1ERKS2_@Base 2.0.11
3021 (optional=templinst)_ZN5QListIP12QRadioButtonEC2ERKS2_@Base 2.0.11
3022 (optional=templinst)_ZN5QListIP12QRadioButtonED1Ev@Base 2.0.11
3023 (optional=templinst)_ZN5QListIP12QRadioButtonED2Ev@Base 2.0.11
3024 (optional=templinst)_ZN5QListIP13QGraphicsItemE13detach_helperEi@Base 2.0.11
3025 (optional=templinst)_ZN5QListIP13QGraphicsItemED1Ev@Base 2.0.11
3026 (optional=templinst)_ZN5QListIP13QGraphicsItemED2Ev@Base 2.0.11
3027 (optional=templinst)_ZN5QListIP13QStandardItemE18detach_helper_growEii@Base 2.0.11
3028 (optional=templinst)_ZN5QListIP13QStandardItemED1Ev@Base 2.0.11
3029 (optional=templinst)_ZN5QListIP13QStandardItemED2Ev@Base 2.0.11
3030 (optional=templinst)_ZN5QListIP15QAbstractButtonE13detach_helperEi@Base 2.0.11
3031 (optional=templinst)_ZN5QListIP15QAbstractButtonE18detach_helper_growEii@Base 2.0.11
3032 (optional=templinst)_ZN5QListIP15QAbstractButtonE6appendERKS1_@Base 2.0.11
3033 (optional=templinst)_ZN5QListIP15QAbstractButtonED1Ev@Base 2.0.11
3034 (optional=templinst)_ZN5QListIP15QAbstractButtonED2Ev@Base 2.0.11
3035 (optional=templinst)_ZN5QListIP19QGraphicsPixmapItemE13detach_helperEi@Base 2.0.11
3036 (optional=templinst)_ZN5QListIP19QGraphicsPixmapItemE18detach_helper_growEii@Base 2.0.11
3037 (optional=templinst)_ZN5QListIP19QGraphicsPixmapItemED1Ev@Base 2.0.11
3038 (optional=templinst)_ZN5QListIP19QGraphicsPixmapItemED2Ev@Base 2.0.11
3039 (optional=templinst)_ZN5QListIP7QScreenE13detach_helperEi@Base 2.0.11
3040 (optional=templinst)_ZN5QListIP7QScreenED1Ev@Base 2.0.11
3041 (optional=templinst)_ZN5QListIP7QScreenED2Ev@Base 2.0.11
3042 (optional=templinst)_ZN5QListIP7QWidgetE13detach_helperEi@Base 2.0.11
3043 (optional=templinst)_ZN5QListIP7QWidgetE18detach_helper_growEii@Base 2.0.11
3044 (optional=templinst)_ZN5QListIP7QWidgetE5clearEv@Base 2.0.11
3045 (optional=templinst)_ZN5QListIP7QWidgetE6appendERKS1_@Base 2.0.11
3046 (optional=templinst)_ZN5QListIP7QWidgetE9removeOneERKS1_@Base 2.0.11
3047 (optional=templinst)_ZN5QListIP7QWidgetEC1ERKS2_@Base 2.0.11
3048 (optional=templinst)_ZN5QListIP7QWidgetEC2ERKS2_@Base 2.0.11
3049 (optional=templinst)_ZN5QListIP7QWidgetED1Ev@Base 2.0.11
3050 (optional=templinst)_ZN5QListIP7QWidgetED2Ev@Base 2.0.11
3051 (optional=templinst)_ZN5QListIP7QWindowE13detach_helperEi@Base 2.0.11
3052 (optional=templinst)_ZN5QListIP7QWindowED1Ev@Base 2.0.11
3053 (optional=templinst)_ZN5QListIP7QWindowED2Ev@Base 2.0.11
3054 (optional=templinst)_ZN5QListIP9QLineEditE13detach_helperEi@Base 2.0.11
3055 (optional=templinst)_ZN5QListIP9QLineEditE18detach_helper_growEii@Base 2.0.11
3056 (optional=templinst)_ZN5QListIP9QLineEditE6appendERKS1_@Base 2.0.11
3057 (optional=templinst)_ZN5QListIP9QLineEditE6detachEv@Base 2.0.11
3058 (optional=templinst)_ZN5QListIP9QLineEditED1Ev@Base 2.0.11
3059 (optional=templinst)_ZN5QListIP9QLineEditED2Ev@Base 2.0.11
3060 (optional=templinst)_ZN5QListIPKN3Dtk6Widget17DBlurEffectWidgetEE18detach_helper_growEii@Base 2.0.11
3061 (optional=templinst)_ZN5QListIPKN3Dtk6Widget17DBlurEffectWidgetEED1Ev@Base 2.0.11
3062 (optional=templinst)_ZN5QListIPKN3Dtk6Widget17DBlurEffectWidgetEED2Ev@Base 2.0.11
3063 (optional=templinst)_ZN5QListIPN3Dtk6Widget11DBaseExpandEE18detach_helper_growEii@Base 2.0.11
3064 (optional=templinst)_ZN5QListIPN3Dtk6Widget11DBaseExpandEED1Ev@Base 2.0.11
3065 (optional=templinst)_ZN5QListIPN3Dtk6Widget11DBaseExpandEED2Ev@Base 2.0.11
3066 (optional=templinst)_ZN5QListIPN3Dtk6Widget14DForeignWindowEE13detach_helperEi@Base 2.0.11
3067 (optional=templinst)_ZN5QListIPN3Dtk6Widget14DForeignWindowEE18detach_helper_growEii@Base 2.0.11
3068 (optional=templinst)_ZN5QListIPN3Dtk6Widget14DForeignWindowEE6appendERKS3_@Base 2.0.11
3069 (optional=templinst)_ZN5QListIPN3Dtk6Widget14DForeignWindowEEC1ERKS4_@Base 2.0.11
3070 (optional=templinst)_ZN5QListIPN3Dtk6Widget14DForeignWindowEEC2ERKS4_@Base 2.0.11
3071 (optional=templinst)_ZN5QListIPN3Dtk6Widget14DForeignWindowEED1Ev@Base 2.0.11
3072 (optional=templinst)_ZN5QListIPN3Dtk6Widget14DForeignWindowEED2Ev@Base 2.0.11
3073 (optional=templinst)_ZN5QListIPN3Dtk6Widget15DSimpleListItemEE13detach_helperEi@Base 2.0.11
3074 (optional=templinst)_ZN5QListIPN3Dtk6Widget15DSimpleListItemEE18detach_helper_growEii@Base 2.0.11
3075 (optional=templinst)_ZN5QListIPN3Dtk6Widget15DSimpleListItemEE5clearEv@Base 2.0.11
3076 (optional=templinst)_ZN5QListIPN3Dtk6Widget15DSimpleListItemEE6appendERKS3_@Base 2.0.11
3077 (optional=templinst)_ZN5QListIPN3Dtk6Widget15DSimpleListItemEE9removeOneERKS3_@Base 2.0.11
3078 (optional=templinst)_ZN5QListIPN3Dtk6Widget15DSimpleListItemEEC1ERKS4_@Base 2.0.11
3079 (optional=templinst)_ZN5QListIPN3Dtk6Widget15DSimpleListItemEEC2ERKS4_@Base 2.0.11
3080 (optional=templinst)_ZN5QListIPN3Dtk6Widget15DSimpleListItemEED1Ev@Base 2.0.11
3081 (optional=templinst)_ZN5QListIPN3Dtk6Widget15DSimpleListItemEED2Ev@Base 2.0.11
3082 (optional=templinst)_ZN5QListIPN3Dtk6Widget15DSimpleListItemEEpLERKS4_@Base 2.0.11
3083 (optional=templinst)_ZN5QListIPN3Dtk6Widget7DOptionEE18detach_helper_growEii@Base 2.0.11
3084 (optional=templinst)_ZN5QListIPN3Dtk6Widget7DOptionEED1Ev@Base 2.0.11
3085 (optional=templinst)_ZN5QListIPN3Dtk6Widget7DOptionEED2Ev@Base 2.0.11
3086 (optional=templinst)_ZN5QListIS_I6QColorEE18detach_helper_growEii@Base 2.0.11
3087 (optional=templinst)_ZN5QListIS_I6QColorEE6appendERKS1_@Base 2.0.11
3088 (optional=templinst)_ZN5QListIbE13detach_helperEi@Base 2.0.11
3089 (optional=templinst)_ZN5QListIbE18detach_helper_growEii@Base 2.0.11
3090 (optional=templinst)_ZN5QListIbE6appendERKb@Base 2.0.11
3091 (optional=templinst)_ZN5QListIbEC1ERKS0_@Base 2.0.11
3092 (optional=templinst)_ZN5QListIbEC2ERKS0_@Base 2.0.11
3093 (optional=templinst)_ZN5QListIbED1Ev@Base 2.0.11
3094 (optional=templinst)_ZN5QListIbED2Ev@Base 2.0.11
3095 (optional=templinst)_ZN5QListIiE13detach_helperEi@Base 2.0.11
3096 (optional=templinst)_ZN5QListIiE18detach_helper_growEii@Base 2.0.11
3097 (optional=templinst)_ZN5QListIiE6appendERKi@Base 2.0.11
3098 (optional=templinst)_ZN5QListIiE9removeOneERKi@Base 2.0.11
3099 (optional=templinst)_ZN5QListIiED1Ev@Base 2.0.11
3100 (optional=templinst)_ZN5QListIiED2Ev@Base 2.0.11
3101 _ZN7QStringC1EPKc@Base 2.0.11
3102 _ZN7QStringC2EPKc@Base 2.0.11
3103 _ZN7QStringD1Ev@Base 2.0.11
3104 _ZN7QStringD2Ev@Base 2.0.11
3105 _ZN7QStringaSEPKc@Base 2.0.11
3106 (optional=templinst)_ZN7QVectorI5QRectE11reallocDataEii6QFlagsIN10QArrayData16AllocationOptionEE@Base 2.0.11
3107 (optional=templinst)_ZN7QVectorIN3Dtk6Widget21DPlatformWindowHandle10WMBlurAreaEE11reallocDataEii6QFlagsIN10QArrayData16AllocationOptionEE@Base 2.0.11
3108 (optional=templinst)_ZN7QVectorIN3Dtk6Widget21DPlatformWindowHandle10WMBlurAreaEE6appendEOS3_@Base 2.0.11
3109 (optional=templinst)_ZN7QVectorIN3Dtk6Widget21DPlatformWindowHandle10WMBlurAreaEE6appendERKS3_@Base 2.0.11
3110 (optional=templinst)_ZN7QVectorIiE11reallocDataEii6QFlagsIN10QArrayData16AllocationOptionEE@Base 2.0.11
3111 (optional=templinst)_ZN7QVectorIjE11reallocDataEii6QFlagsIN10QArrayData16AllocationOptionEE@Base 2.0.11
3112 _ZN7QWidget8setFocusEv@Base 2.0.11
3113 _ZN8ComboBox10wheelEventEP11QWheelEvent@Base 2.0.11
3114 _ZN8ComboBox11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
3115 _ZN8ComboBox11qt_metacastEPKc@Base 2.0.11
3116 _ZN8ComboBox16staticMetaObjectE@Base 2.0.11
3117 _ZN8ComboBoxC1EP7QWidget@Base 2.0.11
3118 _ZN8ComboBoxC2EP7QWidget@Base 2.0.11
3119 _ZN8ComboBoxD0Ev@Base 2.0.11
3120 _ZN8ComboBoxD1Ev@Base 2.0.11
3121 _ZN8ComboBoxD2Ev@Base 2.0.11
3122 (optional=templinst)_ZN8QMapDataI7QStringP7QWidgetE7destroyEv@Base 2.0.11
3123 (optional=templinst)_ZN8QMapDataIi7QStringE7destroyEv@Base 2.0.11
3124 (optional=templinst)_ZN8QMapNodeI7QString8QVariantE14destroySubTreeEv@Base 2.0.11
3125 (optional=templinst)_ZN8QMapNodeI7QStringN3Dtk6Widget16DCrumbTextFormatEE14destroySubTreeEv@Base 2.0.11
3126 (optional=templinst)_ZN8QMapNodeI7QStringP7QWidgetE14destroySubTreeEv@Base 2.0.11
3127 (optional=templinst)_ZN8QMapNodeI7QStringS0_E14destroySubTreeEv@Base 2.0.11
3128 (optional=templinst)_ZN8QMapNodeI7QStringSt8functionIFP7QWidgetP7QObjectEEE14destroySubTreeEv@Base 2.0.11
3129 (optional=templinst)_ZN8QMapNodeIi7QStringE14destroySubTreeEv@Base 2.0.11
3130 _ZN9DBusMPRIS11RateChangedEd@Base 2.0.11
3131 _ZN9DBusMPRIS11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.11
3132 _ZN9DBusMPRIS11qt_metacastEPKc@Base 2.0.11
3133 _ZN9DBusMPRIS13VolumeChangedEd@Base 2.0.11
3134 _ZN9DBusMPRIS14CanPlayChangedEb@Base 2.0.11
3135 _ZN9DBusMPRIS14CanSeekChangedEb@Base 2.0.11
3136 _ZN9DBusMPRIS14ShuffleChangedEb@Base 2.0.11
3137 _ZN9DBusMPRIS15CanPauseChangedEb@Base 2.0.11
3138 _ZN9DBusMPRIS15MetadataChangedERK4QMapI7QString8QVariantE@Base 2.0.11
3139 _ZN9DBusMPRIS15PositionChangedEx@Base 2.0.11
3140 _ZN9DBusMPRIS16CanGoNextChangedEb@Base 2.0.11
3141 _ZN9DBusMPRIS16staticMetaObjectE@Base 2.0.11
3142 _ZN9DBusMPRIS17CanControlChangedEb@Base 2.0.11
3143 _ZN9DBusMPRIS17LoopStatusChangedERK7QString@Base 2.0.11
3144 _ZN9DBusMPRIS18MaximumRateChangedEd@Base 2.0.11
3145 _ZN9DBusMPRIS18MinimumRateChangedEd@Base 2.0.11
3146 _ZN9DBusMPRIS20CanGoPreviousChangedEb@Base 2.0.11
3147 _ZN9DBusMPRIS21PlaybackStatusChangedERK7QString@Base 2.0.11
3148 _ZN9DBusMPRIS6SeekedEx@Base 2.0.11
3149 _ZN9DBusMPRISC1ERK7QStringS2_RK15QDBusConnectionP7QObject@Base 2.0.11
3150 _ZN9DBusMPRISC2ERK7QStringS2_RK15QDBusConnectionP7QObject@Base 2.0.11
3151 _ZN9DBusMPRISD0Ev@Base 2.0.11
3152 _ZN9DBusMPRISD1Ev@Base 2.0.11
3153 _ZN9DBusMPRISD2Ev@Base 2.0.11
3154 (optional=templinst)_ZN9QtPrivate11QSlotObjectIM13DMPRISMonitorFvRK7QStringS4_S4_ENS_4ListIJS4_S4_S4_EEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3155 (optional=templinst)_ZN9QtPrivate11QSlotObjectIM15QAbstractButtonFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3156 (optional=templinst)_ZN9QtPrivate11QSlotObjectIM15QGraphicsEffectFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3157 (optional=templinst)_ZN9QtPrivate11QSlotObjectIM16QAbstractSpinBoxFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3158 (optional=templinst)_ZN9QtPrivate11QSlotObjectIM7QWidgetFbvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3159 (optional=templinst)_ZN9QtPrivate11QSlotObjectIM7QWidgetFvRK5QSizeENS_4ListIJS4_EEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3160 (optional=templinst)_ZN9QtPrivate11QSlotObjectIM7QWidgetFvbENS_4ListIJbEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3161 (optional=templinst)_ZN9QtPrivate11QSlotObjectIM7QWidgetFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3162 (optional=templinst)_ZN9QtPrivate11QSlotObjectIM9QLineEditFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3163 (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3Dtk6Widget11DListWidgetEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3164 (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3Dtk6Widget11DMainWindowEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3165 (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3Dtk6Widget11DSearchEditEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3166 (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3Dtk6Widget11DTickEffectEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3167 (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3Dtk6Widget12DExpandGroupEFvbENS_4ListIJbEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3168 (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3Dtk6Widget12DInputDialogEFvRK7QStringENS_4ListIJS6_EEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3169 (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3Dtk6Widget12DInputDialogEFvbENS_4ListIJbEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3170 (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3Dtk6Widget12DVideoWidgetEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3171 (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3Dtk6Widget15ArrowHeaderLineEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3172 (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3Dtk6Widget15DArrowRectangleEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3173 (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3Dtk6Widget17DBorderlessWidgetEFvN2Qt11MouseButtonEENS_4ListIJS5_EEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3174 (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3Dtk6Widget17DBorderlessWidgetEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3175 (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3Dtk6Widget17DSegmentedControlEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3176 (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3Dtk6Widget17DSwitchHeaderLineEFvbENS_4ListIJbEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3177 (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3Dtk6Widget30DAbstractStackWidgetTransitionEFvRK8QVariantENS_4ListIJS6_EEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3178 (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3Dtk6Widget7ContentEFvRK7QStringENS_4ListIJS6_EEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3179 (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3Dtk6Widget7DSliderEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3180 (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3Dtk6Widget7DTabBarEFvN2Qt10DropActionEENS_4ListIJS5_EEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3181 (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3Dtk6Widget7DTabBarEFviENS_4ListIJiEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3182 (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3Dtk6Widget7DTabBarEFviiENS_4ListIJiiEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3183 (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3Dtk6Widget7DTabBarEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3184 (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3Dtk6Widget9DLineEditEKFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3185 (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3Dtk6Widget9DListViewEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3186 (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3Dtk6Widget9DTitlebarEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3187 (optional=templinst)_ZN9QtPrivate16ConverterFunctorI5QListI12QPainterPathEN17QtMetaTypePrivate23QSequentialIterableImplENS4_33QSequentialIterableConvertFunctorIS3_EEE7convertEPKNS_25AbstractConverterFunctionEPKvPv@Base 2.0.11
3188 (optional=templinst)_ZN9QtPrivate16ConverterFunctorI5QListI12QPainterPathEN17QtMetaTypePrivate23QSequentialIterableImplENS4_33QSequentialIterableConvertFunctorIS3_EEED1Ev@Base 2.0.11
3189 (optional=templinst)_ZN9QtPrivate16ConverterFunctorI5QListI12QPainterPathEN17QtMetaTypePrivate23QSequentialIterableImplENS4_33QSequentialIterableConvertFunctorIS3_EEED2Ev@Base 2.0.11
3190 (optional=templinst)_ZN9QtPrivate16ConverterFunctorI5QListI5QIconEN17QtMetaTypePrivate23QSequentialIterableImplENS4_33QSequentialIterableConvertFunctorIS3_EEE7convertEPKNS_25AbstractConverterFunctionEPKvPv@Base 2.0.11
3191 (optional=templinst)_ZN9QtPrivate16ConverterFunctorI5QListI5QIconEN17QtMetaTypePrivate23QSequentialIterableImplENS4_33QSequentialIterableConvertFunctorIS3_EEED1Ev@Base 2.0.11
3192 (optional=templinst)_ZN9QtPrivate16ConverterFunctorI5QListI5QIconEN17QtMetaTypePrivate23QSequentialIterableImplENS4_33QSequentialIterableConvertFunctorIS3_EEED2Ev@Base 2.0.11
3193 (optional=templinst)_ZN9QtPrivate16ConverterFunctorI5QListI7QRegExpEN17QtMetaTypePrivate23QSequentialIterableImplENS4_33QSequentialIterableConvertFunctorIS3_EEE7convertEPKNS_25AbstractConverterFunctionEPKvPv@Base 2.0.11
3194 (optional=templinst)_ZN9QtPrivate16ConverterFunctorI5QListI7QRegExpEN17QtMetaTypePrivate23QSequentialIterableImplENS4_33QSequentialIterableConvertFunctorIS3_EEED1Ev@Base 2.0.11
3195 (optional=templinst)_ZN9QtPrivate16ConverterFunctorI5QListI7QRegExpEN17QtMetaTypePrivate23QSequentialIterableImplENS4_33QSequentialIterableConvertFunctorIS3_EEED2Ev@Base 2.0.11
3196 (optional=templinst)_ZN9QtPrivate16ConverterFunctorI5QListIP7QWidgetEN17QtMetaTypePrivate23QSequentialIterableImplENS5_33QSequentialIterableConvertFunctorIS4_EEE7convertEPKNS_25AbstractConverterFunctionEPKvPv@Base 2.0.11
3197 (optional=templinst)_ZN9QtPrivate16ConverterFunctorI5QListIP7QWidgetEN17QtMetaTypePrivate23QSequentialIterableImplENS5_33QSequentialIterableConvertFunctorIS4_EEED1Ev@Base 2.0.11
3198 (optional=templinst)_ZN9QtPrivate16ConverterFunctorI5QListIP7QWidgetEN17QtMetaTypePrivate23QSequentialIterableImplENS5_33QSequentialIterableConvertFunctorIS4_EEED2Ev@Base 2.0.11
3199 (optional=templinst)_ZN9QtPrivate16ConverterFunctorI5QListIPN3Dtk6Widget15DSimpleListItemEEN17QtMetaTypePrivate23QSequentialIterableImplENS7_33QSequentialIterableConvertFunctorIS6_EEE7convertEPKNS_25AbstractConverterFunctionEPKvPv@Base 2.0.11
3200 (optional=templinst)_ZN9QtPrivate16ConverterFunctorI5QListIPN3Dtk6Widget15DSimpleListItemEEN17QtMetaTypePrivate23QSequentialIterableImplENS7_33QSequentialIterableConvertFunctorIS6_EEED1Ev@Base 2.0.11
3201 (optional=templinst)_ZN9QtPrivate16ConverterFunctorI5QListIPN3Dtk6Widget15DSimpleListItemEEN17QtMetaTypePrivate23QSequentialIterableImplENS7_33QSequentialIterableConvertFunctorIS6_EEED2Ev@Base 2.0.11
3202 (optional=templinst)_ZN9QtPrivate16ConverterFunctorI5QListIbEN17QtMetaTypePrivate23QSequentialIterableImplENS3_33QSequentialIterableConvertFunctorIS2_EEE7convertEPKNS_25AbstractConverterFunctionEPKvPv@Base 2.0.11
3203 (optional=templinst)_ZN9QtPrivate16ConverterFunctorI5QListIbEN17QtMetaTypePrivate23QSequentialIterableImplENS3_33QSequentialIterableConvertFunctorIS2_EEED1Ev@Base 2.0.11
3204 (optional=templinst)_ZN9QtPrivate16ConverterFunctorI5QListIbEN17QtMetaTypePrivate23QSequentialIterableImplENS3_33QSequentialIterableConvertFunctorIS2_EEED2Ev@Base 2.0.11
3205 (optional=templinst)_ZN9QtPrivate16ConverterFunctorI7QVectorIjEN17QtMetaTypePrivate23QSequentialIterableImplENS3_33QSequentialIterableConvertFunctorIS2_EEE7convertEPKNS_25AbstractConverterFunctionEPKvPv@Base 2.0.11
3206 (optional=templinst)_ZN9QtPrivate16ConverterFunctorI7QVectorIjEN17QtMetaTypePrivate23QSequentialIterableImplENS3_33QSequentialIterableConvertFunctorIS2_EEED1Ev@Base 2.0.11
3207 (optional=templinst)_ZN9QtPrivate16ConverterFunctorI7QVectorIjEN17QtMetaTypePrivate23QSequentialIterableImplENS3_33QSequentialIterableConvertFunctorIS2_EEED2Ev@Base 2.0.11
3208 (optional=templinst)_ZN9QtPrivate18QFunctorSlotObjectISt8functionIFvvEELi0ENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3209 (optional=templinst)_ZN9QtPrivate18QFunctorSlotObjectIZN3Dtk6Widget14DTabBarPrivateC4EPNS2_7DTabBarEEUliiE_Li2ENS_4ListIJiiEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3210 (optional=templinst)_ZN9QtPrivate18QFunctorSlotObjectIZN3Dtk6Widget20DThemeManagerPrivate14registerWidgetEP7QWidgetRK7QStringRK11QStringListEUlS5_S6_E1_Li2ENS_4ListIJS5_S6_EEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3211 (optional=templinst)_ZN9QtPrivate18QFunctorSlotObjectIZN3Dtk6Widget20DThemeManagerPrivate14registerWidgetEP7QWidgetRK7QStringRK11QStringListEUlS6_E0_Li1ENS_4ListIJS6_EEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3212 (optional=templinst)_ZN9QtPrivate18QFunctorSlotObjectIZN3Dtk6Widget20DThemeManagerPrivate14registerWidgetEP7QWidgetRK7QStringRK11QStringListEUlvE2_Li0ENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.11
3213 (optional=templinst)_ZN9QtPrivate28QVariantValueHelperInterfaceI4QMapI7QString8QVariantEE6invokeERKS3_@Base 2.0.11
3214 _ZN9QtPrivate8RefCount3refEv@Base 2.0.11
3215 _ZNK11ButtonGroup10metaObjectEv@Base 2.0.11
3216 _ZNK12ContentTitle10metaObjectEv@Base 2.0.11
3217 _ZNK12DThemeHelper10metaObjectEv@Base 2.0.11
3218 _ZNK12ShortcutEdit10metaObjectEv@Base 2.0.11
3219 _ZNK13DBusInterface10metaObjectEv@Base 2.0.11
3220 _ZNK13DMPRISMonitor10metaObjectEv@Base 2.0.11
3221 _ZNK13DMPRISMonitor13mprisAcquiredERK7QString@Base 2.0.11
3222 _ZNK13DMPRISMonitor9mprisLostERK7QString@Base 2.0.11
3223 _ZNK18NavigationDelegate10metaObjectEv@Base 2.0.11
3224 _ZNK18NavigationDelegate12createEditorEP7QWidgetRK20QStyleOptionViewItemRK11QModelIndex@Base 2.0.11
3225 _ZNK18NavigationDelegate12setModelDataEP7QWidgetP18QAbstractItemModelRK11QModelIndex@Base 2.0.11
3226 _ZNK18NavigationDelegate13setEditorDataEP7QWidgetRK11QModelIndex@Base 2.0.11
3227 _ZNK18NavigationDelegate15initStyleOptionEP20QStyleOptionViewItemRK11QModelIndex@Base 2.0.11
3228 _ZNK18NavigationDelegate5paintEP8QPainterRK20QStyleOptionViewItemRK11QModelIndex@Base 2.0.11
3229 _ZNK18NavigationDelegate8sizeHintERK20QStyleOptionViewItemRK11QModelIndex@Base 2.0.11
3230 _ZNK19ShortcutEditPrivate10stringSizeERK7QString@Base 2.0.11
3231 _ZNK19ShortcutEditPrivate12drawTextRectERK5QRectRK7QStringR8QPainter@Base 2.0.11
3232 _ZNK26StartupNotificationMonitor10metaObjectEv@Base 2.0.11
3233 _ZNK3Dtk6Widget10DBoxWidget10metaObjectEv@Base 2.0.11
3234 _ZNK3Dtk6Widget10DBoxWidget6layoutEv@Base 2.0.11
3235 _ZNK3Dtk6Widget10DBoxWidget8sizeHintEv@Base 2.0.11
3236 _ZNK3Dtk6Widget10DBoxWidget9directionEv@Base 2.0.11
3237 _ZNK3Dtk6Widget10DCrumbEdit10metaObjectEv@Base 2.0.11
3238 _ZNK3Dtk6Widget10DCrumbEdit11crumbRadiusEv@Base 2.0.11
3239 _ZNK3Dtk6Widget10DCrumbEdit12containCrumbERK7QString@Base 2.0.11
3240 _ZNK3Dtk6Widget10DCrumbEdit13crumbReadOnlyEv@Base 2.0.11
3241 _ZNK3Dtk6Widget10DCrumbEdit14makeTextFormatENS1_9CrumbTypeE@Base 2.0.11
3242 _ZNK3Dtk6Widget10DCrumbEdit14makeTextFormatEv@Base 2.0.11
3243 _ZNK3Dtk6Widget10DCrumbEdit15crumbTextFormatERK7QString@Base 2.0.11
3244 _ZNK3Dtk6Widget10DCrumbEdit18dualClickMakeCrumbEv@Base 2.0.11
3245 _ZNK3Dtk6Widget10DCrumbEdit21canInsertFromMimeDataEPK9QMimeData@Base 2.0.11
3246 _ZNK3Dtk6Widget10DCrumbEdit27createMimeDataFromSelectionEv@Base 2.0.11
3247 _ZNK3Dtk6Widget10DCrumbEdit8splitterEv@Base 2.0.11
3248 _ZNK3Dtk6Widget10DCrumbEdit9crumbListEv@Base 2.0.11
3249 _ZNK3Dtk6Widget10DScrollBar10metaObjectEv@Base 2.0.11
3250 _ZNK3Dtk6Widget10DScrollBar8autoHideEv@Base 2.0.11
3251 _ZNK3Dtk6Widget10LoadSlider15loadSliderColorEv@Base 2.0.11
3252 _ZNK3Dtk6Widget10Navigation10metaObjectEv@Base 2.0.11
3253 _ZNK3Dtk6Widget11DBaseButton10metaObjectEv@Base 2.0.11
3254 _ZNK3Dtk6Widget11DBaseExpand10metaObjectEv@Base 2.0.11
3255 _ZNK3Dtk6Widget11DBaseExpand6expandEv@Base 2.0.11
3256 _ZNK3Dtk6Widget11DButtonList10metaObjectEv@Base 2.0.11
3257 _ZNK3Dtk6Widget11DFileDialog10metaObjectEv@Base 2.0.11
3258 _ZNK3Dtk6Widget11DFileDialog16getComboBoxValueERK7QString@Base 2.0.11
3259 _ZNK3Dtk6Widget11DFileDialog16getLineEditValueERK7QString@Base 2.0.11
3260 _ZNK3Dtk6Widget11DFlowLayout10metaObjectEv@Base 2.0.11
3261 _ZNK3Dtk6Widget11DFlowLayout11minimumSizeEv@Base 2.0.11
3262 _ZNK3Dtk6Widget11DFlowLayout14heightForWidthEi@Base 2.0.11
3263 _ZNK3Dtk6Widget11DFlowLayout15sizeHintChangedE5QSize@Base 2.0.11
3264 _ZNK3Dtk6Widget11DFlowLayout15verticalSpacingEv@Base 2.0.11
3265 _ZNK3Dtk6Widget11DFlowLayout17hasHeightForWidthEv@Base 2.0.11
3266 _ZNK3Dtk6Widget11DFlowLayout17horizontalSpacingEv@Base 2.0.11
3267 _ZNK3Dtk6Widget11DFlowLayout19expandingDirectionsEv@Base 2.0.11
3268 _ZNK3Dtk6Widget11DFlowLayout4flowEv@Base 2.0.11
3269 _ZNK3Dtk6Widget11DFlowLayout5countEv@Base 2.0.11
3270 _ZNK3Dtk6Widget11DFlowLayout6itemAtEi@Base 2.0.11
3271 _ZNK3Dtk6Widget11DFlowLayout8sizeHintEv@Base 2.0.11
3272 _ZNK3Dtk6Widget11DHBoxWidget10metaObjectEv@Base 2.0.11
3273 _ZNK3Dtk6Widget11DHeaderLine10metaObjectEv@Base 2.0.11
3274 _ZNK3Dtk6Widget11DHeaderLine5titleEv@Base 2.0.11
3275 _ZNK3Dtk6Widget11DIconButton10metaObjectEv@Base 2.0.11
3276 _ZNK3Dtk6Widget11DLinkButton10metaObjectEv@Base 2.0.11
3277 _ZNK3Dtk6Widget11DListWidget10metaObjectEv@Base 2.0.11
3278 _ZNK3Dtk6Widget11DListWidget10toggleableEv@Base 2.0.11
3279 _ZNK3Dtk6Widget11DListWidget10widgetListEv@Base 2.0.11
3280 _ZNK3Dtk6Widget11DListWidget11checkedListEv@Base 2.0.11
3281 _ZNK3Dtk6Widget11DListWidget12contentsRectEv@Base 2.0.11
3282 _ZNK3Dtk6Widget11DListWidget12firstCheckedEv@Base 2.0.11
3283 _ZNK3Dtk6Widget11DListWidget12visibleCountEv@Base 2.0.11
3284 _ZNK3Dtk6Widget11DListWidget15contentsMarginsEv@Base 2.0.11
3285 _ZNK3Dtk6Widget11DListWidget18getContentsMarginsEPiS2_S2_S2_@Base 2.0.11
3286 _ZNK3Dtk6Widget11DListWidget20enableVerticalScrollEv@Base 2.0.11
3287 _ZNK3Dtk6Widget11DListWidget22enableHorizontalScrollEv@Base 2.0.11
3288 _ZNK3Dtk6Widget11DListWidget5countEv@Base 2.0.11
3289 _ZNK3Dtk6Widget11DListWidget7spacingEv@Base 2.0.11
3290 _ZNK3Dtk6Widget11DListWidget8itemSizeEv@Base 2.0.11
3291 _ZNK3Dtk6Widget11DListWidget8sizeHintEv@Base 2.0.11
3292 _ZNK3Dtk6Widget11DListWidget9checkModeEv@Base 2.0.11
3293 _ZNK3Dtk6Widget11DListWidget9checkableEv@Base 2.0.11
3294 _ZNK3Dtk6Widget11DListWidget9directionEv@Base 2.0.11
3295 _ZNK3Dtk6Widget11DListWidget9getWidgetEi@Base 2.0.11
3296 _ZNK3Dtk6Widget11DListWidget9isCheckedEi@Base 2.0.11
3297 _ZNK3Dtk6Widget11DMainWindow10metaObjectEv@Base 2.0.11
3298 _ZNK3Dtk6Widget11DMainWindow11borderColorEv@Base 2.0.11
3299 _ZNK3Dtk6Widget11DMainWindow11borderWidthEv@Base 2.0.11
3300 _ZNK3Dtk6Widget11DMainWindow11shadowColorEv@Base 2.0.11
3301 _ZNK3Dtk6Widget11DMainWindow12frameMarginsEv@Base 2.0.11
3302 _ZNK3Dtk6Widget11DMainWindow12isDXcbWindowEv@Base 2.0.11
3303 _ZNK3Dtk6Widget11DMainWindow12shadowOffsetEv@Base 2.0.11
3304 _ZNK3Dtk6Widget11DMainWindow12shadowRadiusEv@Base 2.0.11
3305 _ZNK3Dtk6Widget11DMainWindow12windowRadiusEv@Base 2.0.11
3306 _ZNK3Dtk6Widget11DMainWindow16enableBlurWindowEv@Base 2.0.11
3307 _ZNK3Dtk6Widget11DMainWindow16enableSystemMoveEv@Base 2.0.11
3308 _ZNK3Dtk6Widget11DMainWindow18enableSystemResizeEv@Base 2.0.11
3309 _ZNK3Dtk6Widget11DMainWindow21translucentBackgroundEv@Base 2.0.11
3310 _ZNK3Dtk6Widget11DMainWindow23autoInputMaskByClipPathEv@Base 2.0.11
3311 _ZNK3Dtk6Widget11DMainWindow8clipPathEv@Base 2.0.11
3312 _ZNK3Dtk6Widget11DMainWindow8titlebarEv@Base 2.0.11
3313 _ZNK3Dtk6Widget11DMainWindow9frameMaskEv@Base 2.0.11
3314 _ZNK3Dtk6Widget11DOptionList10metaObjectEv@Base 2.0.11
3315 _ZNK3Dtk6Widget11DPushButton10metaObjectEv@Base 2.0.11
3316 _ZNK3Dtk6Widget11DPushButton10normalIconEv@Base 2.0.11
3317 _ZNK3Dtk6Widget11DPushButton9hoverIconEv@Base 2.0.11
3318 _ZNK3Dtk6Widget11DPushButton9pressIconEv@Base 2.0.11
3319 _ZNK3Dtk6Widget11DScrollArea10metaObjectEv@Base 2.0.11
3320 _ZNK3Dtk6Widget11DScrollArea17autoHideScrollBarEv@Base 2.0.11
3321 _ZNK3Dtk6Widget11DSearchEdit10metaObjectEv@Base 2.0.11
3322 _ZNK3Dtk6Widget11DSearchEdit11getLineEditEv@Base 2.0.11
3323 _ZNK3Dtk6Widget11DSearchEdit15minimumSizeHintEv@Base 2.0.11
3324 _ZNK3Dtk6Widget11DSearchEdit4textEv@Base 2.0.11
3325 _ZNK3Dtk6Widget11DSearchEdit8sizeHintEv@Base 2.0.11
3326 _ZNK3Dtk6Widget11DTextButton10metaObjectEv@Base 2.0.11
3327 _ZNK3Dtk6Widget11DTickEffect10metaObjectEv@Base 2.0.11
3328 _ZNK3Dtk6Widget11DVBoxWidget10metaObjectEv@Base 2.0.11
3329 _ZNK3Dtk6Widget12DAboutDialog10metaObjectEv@Base 2.0.11
3330 _ZNK3Dtk6Widget12DAboutDialog11companyLogoEv@Base 2.0.11
3331 _ZNK3Dtk6Widget12DAboutDialog11descriptionEv@Base 2.0.11
3332 _ZNK3Dtk6Widget12DAboutDialog11productNameEv@Base 2.0.11
3333 _ZNK3Dtk6Widget12DAboutDialog11websiteLinkEv@Base 2.0.11
3334 _ZNK3Dtk6Widget12DAboutDialog11websiteNameEv@Base 2.0.11
3335 _ZNK3Dtk6Widget12DAboutDialog11windowTitleEv@Base 2.0.11
3336 _ZNK3Dtk6Widget12DAboutDialog19acknowledgementLinkEv@Base 2.0.11
3337 _ZNK3Dtk6Widget12DAboutDialog7licenseEv@Base 2.0.11
3338 _ZNK3Dtk6Widget12DAboutDialog7versionEv@Base 2.0.11
3339 _ZNK3Dtk6Widget12DAnchorsBase10leftMarginEv@Base 2.0.11
3340 _ZNK3Dtk6Widget12DAnchorsBase10metaObjectEv@Base 2.0.11
3341 _ZNK3Dtk6Widget12DAnchorsBase11errorStringEv@Base 2.0.11
3342 _ZNK3Dtk6Widget12DAnchorsBase11rightMarginEv@Base 2.0.11
3343 _ZNK3Dtk6Widget12DAnchorsBase12bottomMarginEv@Base 2.0.11
3344 _ZNK3Dtk6Widget12DAnchorsBase14enhancedWidgetEv@Base 2.0.11
3345 _ZNK3Dtk6Widget12DAnchorsBase14verticalCenterEv@Base 2.0.11
3346 _ZNK3Dtk6Widget12DAnchorsBase16horizontalCenterEv@Base 2.0.11
3347 _ZNK3Dtk6Widget12DAnchorsBase17alignWhenCenteredEv@Base 2.0.11
3348 _ZNK3Dtk6Widget12DAnchorsBase20verticalCenterOffsetEv@Base 2.0.11
3349 _ZNK3Dtk6Widget12DAnchorsBase22horizontalCenterOffsetEv@Base 2.0.11
3350 _ZNK3Dtk6Widget12DAnchorsBase3topEv@Base 2.0.11
3351 _ZNK3Dtk6Widget12DAnchorsBase4fillEv@Base 2.0.11
3352 _ZNK3Dtk6Widget12DAnchorsBase4leftEv@Base 2.0.11
3353 _ZNK3Dtk6Widget12DAnchorsBase5rightEv@Base 2.0.11
3354 _ZNK3Dtk6Widget12DAnchorsBase6bottomEv@Base 2.0.11
3355 _ZNK3Dtk6Widget12DAnchorsBase6targetEv@Base 2.0.11
3356 _ZNK3Dtk6Widget12DAnchorsBase7anchorsEv@Base 2.0.11
3357 _ZNK3Dtk6Widget12DAnchorsBase7enabledEv@Base 2.0.11
3358 _ZNK3Dtk6Widget12DAnchorsBase7marginsEv@Base 2.0.11
3359 _ZNK3Dtk6Widget12DAnchorsBase8centerInEv@Base 2.0.11
3360 _ZNK3Dtk6Widget12DAnchorsBase9errorCodeEv@Base 2.0.11
3361 _ZNK3Dtk6Widget12DAnchorsBase9isBindingEPKNS0_11DAnchorInfoE@Base 2.0.11
3362 _ZNK3Dtk6Widget12DAnchorsBase9topMarginEv@Base 2.0.11
3363 _ZNK3Dtk6Widget12DApplication10metaObjectEv@Base 2.0.11
3364 _ZNK3Dtk6Widget12DApplication11productIconEv@Base 2.0.11
3365 _ZNK3Dtk6Widget12DApplication11productNameEv@Base 2.0.11
3366 _ZNK3Dtk6Widget12DApplication15visibleMenuIconEv@Base 2.0.11
3367 _ZNK3Dtk6Widget12DApplication18applicationLicenseEv@Base 2.0.11
3368 _ZNK3Dtk6Widget12DApplication19applicationHomePageEv@Base 2.0.11
3369 _ZNK3Dtk6Widget12DApplication22applicationDescriptionEv@Base 2.0.11
3370 _ZNK3Dtk6Widget12DApplication23visibleMenuShortcutTextEv@Base 2.0.11
3371 _ZNK3Dtk6Widget12DApplication25visibleMenuCheckboxWidgetEv@Base 2.0.11
3372 _ZNK3Dtk6Widget12DApplication30applicationAcknowledgementPageEv@Base 2.0.11
3373 _ZNK3Dtk6Widget12DApplication33applicationAcknowledgementVisibleEv@Base 2.0.11
3374 _ZNK3Dtk6Widget12DApplication5themeEv@Base 2.0.11
3375 _ZNK3Dtk6Widget12DArrowButton10metaObjectEv@Base 2.0.11
3376 _ZNK3Dtk6Widget12DArrowButton11buttonStateEv@Base 2.0.11
3377 _ZNK3Dtk6Widget12DArrowButton14arrowDirectionEv@Base 2.0.11
3378 _ZNK3Dtk6Widget12DExpandGroup10metaObjectEv@Base 2.0.11
3379 _ZNK3Dtk6Widget12DExpandGroup13checkedExpandEv@Base 2.0.11
3380 _ZNK3Dtk6Widget12DExpandGroup2idEPNS0_11DBaseExpandE@Base 2.0.11
3381 _ZNK3Dtk6Widget12DExpandGroup6expandEi@Base 2.0.11
3382 _ZNK3Dtk6Widget12DExpandGroup7expandsEv@Base 2.0.11
3383 _ZNK3Dtk6Widget12DExpandGroup9checkedIdEv@Base 2.0.11
3384 _ZNK3Dtk6Widget12DImageButton10metaObjectEv@Base 2.0.11
3385 _ZNK3Dtk6Widget12DImageButton11getHoverPicEv@Base 2.0.11
3386 _ZNK3Dtk6Widget12DImageButton11getPressPicEv@Base 2.0.11
3387 _ZNK3Dtk6Widget12DImageButton11isCheckableEv@Base 2.0.11
3388 _ZNK3Dtk6Widget12DImageButton12getNormalPicEv@Base 2.0.11
3389 _ZNK3Dtk6Widget12DImageButton13getCheckedPicEv@Base 2.0.11
3390 _ZNK3Dtk6Widget12DImageButton14getDisabledPicEv@Base 2.0.11
3391 _ZNK3Dtk6Widget12DImageButton8getStateEv@Base 2.0.11
3392 _ZNK3Dtk6Widget12DImageButton9isCheckedEv@Base 2.0.11
3393 _ZNK3Dtk6Widget12DInputDialog10intMaximumEv@Base 2.0.11
3394 _ZNK3Dtk6Widget12DInputDialog10intMinimumEv@Base 2.0.11
3395 _ZNK3Dtk6Widget12DInputDialog10metaObjectEv@Base 2.0.11
3396 _ZNK3Dtk6Widget12DInputDialog11doubleValueEv@Base 2.0.11
3397 _ZNK3Dtk6Widget12DInputDialog11isTextAlertEv@Base 2.0.11
3398 _ZNK3Dtk6Widget12DInputDialog12okButtonTextEv@Base 2.0.11
3399 _ZNK3Dtk6Widget12DInputDialog12textEchoModeEv@Base 2.0.11
3400 _ZNK3Dtk6Widget12DInputDialog13comboBoxItemsEv@Base 2.0.11
3401 _ZNK3Dtk6Widget12DInputDialog13doubleMaximumEv@Base 2.0.11
3402 _ZNK3Dtk6Widget12DInputDialog13doubleMinimumEv@Base 2.0.11
3403 _ZNK3Dtk6Widget12DInputDialog14doubleDecimalsEv@Base 2.0.11
3404 _ZNK3Dtk6Widget12DInputDialog16cancelButtonTextEv@Base 2.0.11
3405 _ZNK3Dtk6Widget12DInputDialog17okButtonIsEnabledEv@Base 2.0.11
3406 _ZNK3Dtk6Widget12DInputDialog18isComboBoxEditableEv@Base 2.0.11
3407 _ZNK3Dtk6Widget12DInputDialog20comboBoxCurrentIndexEv@Base 2.0.11
3408 _ZNK3Dtk6Widget12DInputDialog7intStepEv@Base 2.0.11
3409 _ZNK3Dtk6Widget12DInputDialog8intValueEv@Base 2.0.11
3410 _ZNK3Dtk6Widget12DInputDialog9inputModeEv@Base 2.0.11
3411 _ZNK3Dtk6Widget12DInputDialog9textValueEv@Base 2.0.11
3412 _ZNK3Dtk6Widget12DStackWidget10metaObjectEv@Base 2.0.11
3413 _ZNK3Dtk6Widget12DStackWidget10transitionEv@Base 2.0.11
3414 _ZNK3Dtk6Widget12DStackWidget12currentIndexEv@Base 2.0.11
3415 _ZNK3Dtk6Widget12DStackWidget13animationTypeEv@Base 2.0.11
3416 _ZNK3Dtk6Widget12DStackWidget13currentWidgetEv@Base 2.0.11
3417 _ZNK3Dtk6Widget12DStackWidget16getWidgetByIndexEi@Base 2.0.11
3418 _ZNK3Dtk6Widget12DStackWidget17animationDurationEv@Base 2.0.11
3419 _ZNK3Dtk6Widget12DStackWidget4busyEv@Base 2.0.11
3420 _ZNK3Dtk6Widget12DStackWidget5depthEv@Base 2.0.11
3421 _ZNK3Dtk6Widget12DStackWidget7indexOfEP7QWidget@Base 2.0.11
3422 _ZNK3Dtk6Widget12DSvgRenderer11defaultSizeEv@Base 2.0.11
3423 _ZNK3Dtk6Widget12DSvgRenderer13elementExistsERK7QString@Base 2.0.11
3424 _ZNK3Dtk6Widget12DSvgRenderer15boundsOnElementERK7QString@Base 2.0.11
3425 _ZNK3Dtk6Widget12DSvgRenderer7isValidEv@Base 2.0.11
3426 _ZNK3Dtk6Widget12DSvgRenderer7toImageE5QSizeRK7QString@Base 2.0.11
3427 _ZNK3Dtk6Widget12DSvgRenderer7viewBoxEv@Base 2.0.11
3428 _ZNK3Dtk6Widget12DSvgRenderer8viewBoxFEv@Base 2.0.11
3429 _ZNK3Dtk6Widget12DVideoWidget10brightnessEv@Base 2.0.11
3430 _ZNK3Dtk6Widget12DVideoWidget10metaObjectEv@Base 2.0.11
3431 _ZNK3Dtk6Widget12DVideoWidget10saturationEv@Base 2.0.11
3432 _ZNK3Dtk6Widget12DVideoWidget12currentFrameEv@Base 2.0.11
3433 _ZNK3Dtk6Widget12DVideoWidget15aspectRatioModeEv@Base 2.0.11
3434 _ZNK3Dtk6Widget12DVideoWidget16mirroredVerticalEv@Base 2.0.11
3435 _ZNK3Dtk6Widget12DVideoWidget18mirroredHorizontalEv@Base 2.0.11
3436 _ZNK3Dtk6Widget12DVideoWidget21sourceVideoPixelRatioEv@Base 2.0.11
3437 _ZNK3Dtk6Widget12DVideoWidget3hueEv@Base 2.0.11
3438 _ZNK3Dtk6Widget12DVideoWidget5roundEv@Base 2.0.11
3439 _ZNK3Dtk6Widget12DVideoWidget5scaleEv@Base 2.0.11
3440 _ZNK3Dtk6Widget12DVideoWidget8contrastEv@Base 2.0.11
3441 _ZNK3Dtk6Widget12DialogButton10buttonTypeEv@Base 2.0.11
3442 _ZNK3Dtk6Widget12DialogButton10metaObjectEv@Base 2.0.11
3443 _ZNK3Dtk6Widget13ContentLoader10metaObjectEv@Base 2.0.11
3444 _ZNK3Dtk6Widget13DIpv4LineEdit10isReadOnlyEv@Base 2.0.11
3445 _ZNK3Dtk6Widget13DIpv4LineEdit10metaObjectEv@Base 2.0.11
3446 _ZNK3Dtk6Widget13DIpv4LineEdit11displayTextEv@Base 2.0.11
3447 _ZNK3Dtk6Widget13DIpv4LineEdit14cursorPositionEv@Base 2.0.11
3448 _ZNK3Dtk6Widget13DIpv4LineEdit18hasAcceptableInputEv@Base 2.0.11
3449 _ZNK3Dtk6Widget13DIpv4LineEdit9alignmentEv@Base 2.0.11
3450 _ZNK3Dtk6Widget13DMPRISControl10metaObjectEv@Base 2.0.11
3451 _ZNK3Dtk6Widget13DMPRISControl11mprisLostedEv@Base 2.0.11
3452 _ZNK3Dtk6Widget13DMPRISControl12mprisChangedEv@Base 2.0.11
3453 _ZNK3Dtk6Widget13DMPRISControl13mprisAcquiredEv@Base 2.0.11
3454 _ZNK3Dtk6Widget13DMPRISControl9isWorkingEv@Base 2.0.11
3455 _ZNK3Dtk6Widget13DPasswordEdit10isEchoModeEv@Base 2.0.11
3456 _ZNK3Dtk6Widget13DPasswordEdit10metaObjectEv@Base 2.0.11
3457 _ZNK3Dtk6Widget13DShortcutEdit10metaObjectEv@Base 2.0.11
3458 _ZNK3Dtk6Widget13DShortcutEdit11toInputModeEv@Base 2.0.11
3459 _ZNK3Dtk6Widget13DShortcutEdit13getKeyMappingEv@Base 2.0.11
3460 _ZNK3Dtk6Widget13DShortcutEdit14setNormalStateEv@Base 2.0.11
3461 _ZNK3Dtk6Widget13DShortcutEdit15setInValidStateEv@Base 2.0.11
3462 _ZNK3Dtk6Widget13DShortcutEdit24getBlockShortcutKeysListEv@Base 2.0.11
3463 _ZNK3Dtk6Widget13DShortcutEdit8sizeHintEv@Base 2.0.11
3464 _ZNK3Dtk6Widget13DSwitchButton10metaObjectEv@Base 2.0.11
3465 _ZNK3Dtk6Widget13DSwitchButton17enabledBackgroundEv@Base 2.0.11
3466 _ZNK3Dtk6Widget13DSwitchButton18disabledBackgroundEv@Base 2.0.11
3467 _ZNK3Dtk6Widget13DSwitchButton7checkedEv@Base 2.0.11
3468 _ZNK3Dtk6Widget13DSwitchButton8sizeHintEv@Base 2.0.11
3469 _ZNK3Dtk6Widget13DThemeManager10metaObjectEv@Base 2.0.11
3470 _ZNK3Dtk6Widget13DThemeManager15getQssForWidgetE7QStringPK7QWidget@Base 2.0.11
3471 _ZNK3Dtk6Widget13DThemeManager15getQssForWidgetE7QStringRKS2_@Base 2.0.11
3472 _ZNK3Dtk6Widget13DThemeManager15getQssForWidgetEPK7QWidget@Base 2.0.11
3473 _ZNK3Dtk6Widget13DThemeManager5themeEPK7QWidgetPPS2_@Base 2.0.11
3474 _ZNK3Dtk6Widget13DThemeManager5themeEv@Base 2.0.11
3475 _ZNK3Dtk6Widget13DTrashManager12trashIsEmptyEv@Base 2.0.11
3476 _ZNK3Dtk6Widget14DDialogPrivate11elideStringE7QStringRK12QFontMetricsi@Base 2.0.11
3477 _ZNK3Dtk6Widget14DDialogPrivate7trimTagE7QString@Base 2.0.11
3478 _ZNK3Dtk6Widget14DDialogPrivate8scanTagsE7QString@Base 2.0.11
3479 _ZNK3Dtk6Widget14DDialogPrivate9getScreenEv@Base 2.0.11
3480 _ZNK3Dtk6Widget14DDoubleSpinBox10metaObjectEv@Base 2.0.11
3481 _ZNK3Dtk6Widget14DDoubleSpinBox12defaultValueEv@Base 2.0.11
3482 _ZNK3Dtk6Widget14DDoubleSpinBox7isAlertEv@Base 2.0.11
3483 _ZNK3Dtk6Widget14DForeignWindow10metaObjectEv@Base 2.0.11
3484 _ZNK3Dtk6Widget14DForeignWindow3pidEv@Base 2.0.11
3485 _ZNK3Dtk6Widget14DForeignWindow7wmClassEv@Base 2.0.11
3486 _ZNK3Dtk6Widget14DOptionPrivate11checkedIconEv@Base 2.0.11
3487 _ZNK3Dtk6Widget14DOptionPrivate4nameEv@Base 2.0.11
3488 _ZNK3Dtk6Widget14DOptionPrivate5valueEv@Base 2.0.11
3489 _ZNK3Dtk6Widget14DOptionPrivate7checkedEv@Base 2.0.11
3490 _ZNK3Dtk6Widget14DPageIndicator10metaObjectEv@Base 2.0.11
3491 _ZNK3Dtk6Widget14DPageIndicator10pointColorEv@Base 2.0.11
3492 _ZNK3Dtk6Widget14DPageIndicator11pointRadiusEv@Base 2.0.11
3493 _ZNK3Dtk6Widget14DPageIndicator13pointDistanceEv@Base 2.0.11
3494 _ZNK3Dtk6Widget14DPageIndicator16currentPageIndexEv@Base 2.0.11
3495 _ZNK3Dtk6Widget14DPageIndicator19secondaryPointColorEv@Base 2.0.11
3496 _ZNK3Dtk6Widget14DPageIndicator20secondaryPointRadiusEv@Base 2.0.11
3497 _ZNK3Dtk6Widget14DPageIndicator9pageCountEv@Base 2.0.11
3498 _ZNK3Dtk6Widget14DRegionMonitor10cursorMoveERK6QPoint@Base 2.0.11
3499 _ZNK3Dtk6Widget14DRegionMonitor10keyReleaseERK7QString@Base 2.0.11
3500 _ZNK3Dtk6Widget14DRegionMonitor10metaObjectEv@Base 2.0.11
3501 _ZNK3Dtk6Widget14DRegionMonitor10registeredEv@Base 2.0.11
3502 _ZNK3Dtk6Widget14DRegionMonitor11buttonPressERK6QPointi@Base 2.0.11
3503 _ZNK3Dtk6Widget14DRegionMonitor13buttonReleaseERK6QPointi@Base 2.0.11
3504 _ZNK3Dtk6Widget14DRegionMonitor13watchedRegionEv@Base 2.0.11
3505 _ZNK3Dtk6Widget14DRegionMonitor14coordinateTypeEv@Base 2.0.11
3506 _ZNK3Dtk6Widget14DRegionMonitor21coordinateTypeChangedENS1_14CoordinateTypeE@Base 2.0.11
3507 _ZNK3Dtk6Widget14DRegionMonitor8keyPressERK7QString@Base 2.0.11
3508 _ZNK3Dtk6Widget14DSliderPrivate20pixelPosToRangeValueEi@Base 2.0.11
3509 _ZNK3Dtk6Widget14DSuggestButton10metaObjectEv@Base 2.0.11
3510 _ZNK3Dtk6Widget14DTabBarPrivate10metaObjectEv@Base 2.0.11
3511 _ZNK3Dtk6Widget14DTabBarPrivate11tabSizeHintEi@Base 2.0.11
3512 _ZNK3Dtk6Widget14DTabBarPrivate15initStyleOptionEP15QStyleOptionTabi@Base 2.0.11
3513 _ZNK3Dtk6Widget14DTabBarPrivate15minimumSizeHintEv@Base 2.0.11
3514 _ZNK3Dtk6Widget14DTabBarPrivate18minimumTabSizeHintEi@Base 2.0.11
3515 _ZNK3Dtk6Widget14DTabBarPrivate2ddEv@Base 2.0.11
3516 _ZNK3Dtk6Widget14DWaterProgress10metaObjectEv@Base 2.0.11
3517 _ZNK3Dtk6Widget14DWaterProgress5valueEv@Base 2.0.11
3518 _ZNK3Dtk6Widget15ArrowButtonIcon10metaObjectEv@Base 2.0.11
3519 _ZNK3Dtk6Widget15ArrowButtonIcon11buttonStateEv@Base 2.0.11
3520 _ZNK3Dtk6Widget15ArrowButtonIcon14arrowDirectionEv@Base 2.0.11
3521 _ZNK3Dtk6Widget15ArrowHeaderLine10metaObjectEv@Base 2.0.11
3522 _ZNK3Dtk6Widget15DAbstractDialog10metaObjectEv@Base 2.0.11
3523 _ZNK3Dtk6Widget15DAbstractDialog11borderColorEv@Base 2.0.11
3524 _ZNK3Dtk6Widget15DAbstractDialog15backgroundColorEv@Base 2.0.11
3525 _ZNK3Dtk6Widget15DAbstractDialog15displayPositionEv@Base 2.0.11
3526 _ZNK3Dtk6Widget15DArrowRectangle10arrowWidthEv@Base 2.0.11
3527 _ZNK3Dtk6Widget15DArrowRectangle10getContentEv@Base 2.0.11
3528 _ZNK3Dtk6Widget15DArrowRectangle10metaObjectEv@Base 2.0.11
3529 _ZNK3Dtk6Widget15DArrowRectangle11arrowHeightEv@Base 2.0.11
3530 _ZNK3Dtk6Widget15DArrowRectangle11borderColorEv@Base 2.0.11
3531 _ZNK3Dtk6Widget15DArrowRectangle11borderWidthEv@Base 2.0.11
3532 _ZNK3Dtk6Widget15DArrowRectangle13shadowXOffsetEv@Base 2.0.11
3533 _ZNK3Dtk6Widget15DArrowRectangle13shadowYOffsetEv@Base 2.0.11
3534 _ZNK3Dtk6Widget15DArrowRectangle14arrowDirectionEv@Base 2.0.11
3535 _ZNK3Dtk6Widget15DArrowRectangle15backgroundColorEv@Base 2.0.11
3536 _ZNK3Dtk6Widget15DArrowRectangle16shadowBlurRadiusEv@Base 2.0.11
3537 _ZNK3Dtk6Widget15DArrowRectangle16windowDeactivateEv@Base 2.0.11
3538 _ZNK3Dtk6Widget15DArrowRectangle6arrowXEv@Base 2.0.11
3539 _ZNK3Dtk6Widget15DArrowRectangle6arrowYEv@Base 2.0.11
3540 _ZNK3Dtk6Widget15DArrowRectangle6marginEv@Base 2.0.11
3541 _ZNK3Dtk6Widget15DArrowRectangle6radiusEv@Base 2.0.11
3542 _ZNK3Dtk6Widget15DCircleProgress10chunkColorEv@Base 2.0.11
3543 _ZNK3Dtk6Widget15DCircleProgress10metaObjectEv@Base 2.0.11
3544 _ZNK3Dtk6Widget15DCircleProgress12valueChangedEi@Base 2.0.11
3545 _ZNK3Dtk6Widget15DCircleProgress15backgroundColorEv@Base 2.0.11
3546 _ZNK3Dtk6Widget15DCircleProgress4textEv@Base 2.0.11
3547 _ZNK3Dtk6Widget15DCircleProgress5valueEv@Base 2.0.11
3548 _ZNK3Dtk6Widget15DCircleProgress9lineWidthEv@Base 2.0.11
3549 _ZNK3Dtk6Widget15DEnhancedWidget10metaObjectEv@Base 2.0.11
3550 _ZNK3Dtk6Widget15DEnhancedWidget6targetEv@Base 2.0.11
3551 _ZNK3Dtk6Widget15DEnhancedWidget7enabledEv@Base 2.0.11
3552 _ZNK3Dtk6Widget15DSettingsDialog10metaObjectEv@Base 2.0.11
3553 _ZNK3Dtk6Widget15DSettingsDialog13widgetFactoryEv@Base 2.0.11
3554 _ZNK3Dtk6Widget15DSimpleListItem10metaObjectEv@Base 2.0.11
3555 _ZNK3Dtk6Widget15DSimpleListView10metaObjectEv@Base 2.0.11
3556 _ZNK3Dtk6Widget15FilterMouseMove10metaObjectEv@Base 2.0.11
3557 _ZNK3Dtk6Widget16DArrowLineExpand10metaObjectEv@Base 2.0.11
3558 _ZNK3Dtk6Widget16DCrumbTextFormat10backgroundEv@Base 2.0.11
3559 _ZNK3Dtk6Widget16DCrumbTextFormat16backgroundRadiusEv@Base 2.0.11
3560 _ZNK3Dtk6Widget16DCrumbTextFormat4textEv@Base 2.0.11
3561 _ZNK3Dtk6Widget16DCrumbTextFormat8tagColorEv@Base 2.0.11
3562 _ZNK3Dtk6Widget16DCrumbTextFormat9textColorEv@Base 2.0.11
3563 _ZNK3Dtk6Widget16DFileChooserEdit10metaObjectEv@Base 2.0.11
3564 _ZNK3Dtk6Widget16DFileChooserEdit11nameFiltersEv@Base 2.0.11
3565 _ZNK3Dtk6Widget16DFileChooserEdit21dialogDisplayPositionEv@Base 2.0.11
3566 _ZNK3Dtk6Widget16DFileChooserEdit8fileModeEv@Base 2.0.11
3567 _ZNK3Dtk6Widget16DKeyboardMonitor10metaObjectEv@Base 2.0.11
3568 _ZNK3Dtk6Widget16DWindowMaxButton10metaObjectEv@Base 2.0.11
3569 _ZNK3Dtk6Widget16DWindowMaxButton11isMaximizedEv@Base 2.0.11
3570 _ZNK3Dtk6Widget16DWindowMinButton10metaObjectEv@Base 2.0.11
3571 _ZNK3Dtk6Widget16VideoFormatProxy10metaObjectEv@Base 2.0.11
3572 _ZNK3Dtk6Widget16VideoFormatProxy12currentFrameEv@Base 2.0.11
3573 _ZNK3Dtk6Widget16VideoFormatProxy17isFormatSupportedERK19QVideoSurfaceFormat@Base 2.0.11
3574 _ZNK3Dtk6Widget16VideoFormatProxy21supportedPixelFormatsEN20QAbstractVideoBuffer10HandleTypeE@Base 2.0.11
3575 _ZNK3Dtk6Widget17DBlurEffectWidget10metaObjectEv@Base 2.0.11
3576 _ZNK3Dtk6Widget17DBlurEffectWidget15blurRectXRadiusEv@Base 2.0.11
3577 _ZNK3Dtk6Widget17DBlurEffectWidget15blurRectYRadiusEv@Base 2.0.11
3578 _ZNK3Dtk6Widget17DBlurEffectWidget4modeEv@Base 2.0.11
3579 _ZNK3Dtk6Widget17DBlurEffectWidget6radiusEv@Base 2.0.11
3580 _ZNK3Dtk6Widget17DBlurEffectWidget9blendModeEv@Base 2.0.11
3581 _ZNK3Dtk6Widget17DBlurEffectWidget9maskAlphaEv@Base 2.0.11
3582 _ZNK3Dtk6Widget17DBlurEffectWidget9maskColorEv@Base 2.0.11
3583 _ZNK3Dtk6Widget17DBorderlessWidget10metaObjectEv@Base 2.0.11
3584 _ZNK3Dtk6Widget17DBorderlessWidget11shadowColorEv@Base 2.0.11
3585 _ZNK3Dtk6Widget17DBorderlessWidget11shadowWidthEv@Base 2.0.11
3586 _ZNK3Dtk6Widget17DBorderlessWidget12childrenRectEv@Base 2.0.11
3587 _ZNK3Dtk6Widget17DBorderlessWidget12shadowOffsetEv@Base 2.0.11
3588 _ZNK3Dtk6Widget17DBorderlessWidget12titleBarMenuEv@Base 2.0.11
3589 _ZNK3Dtk6Widget17DBorderlessWidget13frameGeometryEv@Base 2.0.11
3590 _ZNK3Dtk6Widget17DBorderlessWidget14childrenRegionEv@Base 2.0.11
3591 _ZNK3Dtk6Widget17DBorderlessWidget14normalGeometryEv@Base 2.0.11
3592 _ZNK3Dtk6Widget17DBorderlessWidget14titlebarHeightEv@Base 2.0.11
3593 _ZNK3Dtk6Widget17DBorderlessWidget15backgroundColorEv@Base 2.0.11
3594 _ZNK3Dtk6Widget17DBorderlessWidget15backgroundImageEv@Base 2.0.11
3595 _ZNK3Dtk6Widget17DBorderlessWidget15contentsMarginsEv@Base 2.0.11
3596 _ZNK3Dtk6Widget17DBorderlessWidget18getContentsMarginsEPiS2_S2_S2_@Base 2.0.11
3597 _ZNK3Dtk6Widget17DBorderlessWidget1xEv@Base 2.0.11
3598 _ZNK3Dtk6Widget17DBorderlessWidget1yEv@Base 2.0.11
3599 _ZNK3Dtk6Widget17DBorderlessWidget3posEv@Base 2.0.11
3600 _ZNK3Dtk6Widget17DBorderlessWidget4sizeEv@Base 2.0.11
3601 _ZNK3Dtk6Widget17DBorderlessWidget5widthEv@Base 2.0.11
3602 _ZNK3Dtk6Widget17DBorderlessWidget6borderEv@Base 2.0.11
3603 _ZNK3Dtk6Widget17DBorderlessWidget6heightEv@Base 2.0.11
3604 _ZNK3Dtk6Widget17DBorderlessWidget6layoutEv@Base 2.0.11
3605 _ZNK3Dtk6Widget17DBorderlessWidget6radiusEv@Base 2.0.11
3606 _ZNK3Dtk6Widget17DBorderlessWidget8geometryEv@Base 2.0.11
3607 _ZNK3Dtk6Widget17DBorderlessWidget8titlebarEv@Base 2.0.11
3608 _ZNK3Dtk6Widget17DBorderlessWidget9frameSizeEv@Base 2.0.11
3609 _ZNK3Dtk6Widget17DBorderlessWindow10metaObjectEv@Base 2.0.11
3610 _ZNK3Dtk6Widget17DBorderlessWindow12parentWidgetEv@Base 2.0.11
3611 _ZNK3Dtk6Widget17DClipEffectWidget10metaObjectEv@Base 2.0.11
3612 _ZNK3Dtk6Widget17DClipEffectWidget7marginsEv@Base 2.0.11
3613 _ZNK3Dtk6Widget17DClipEffectWidget8clipPathEv@Base 2.0.11
3614 _ZNK3Dtk6Widget17DFileIconProvider4iconERK9QFileInfo@Base 2.0.11
3615 _ZNK3Dtk6Widget17DFileIconProvider4iconERK9QFileInfoRK5QIcon@Base 2.0.11
3616 _ZNK3Dtk6Widget17DLoadingIndicator10metaObjectEv@Base 2.0.11
3617 _ZNK3Dtk6Widget17DLoadingIndicator11aniDurationEv@Base 2.0.11
3618 _ZNK3Dtk6Widget17DLoadingIndicator11imageSourceEv@Base 2.0.11
3619 _ZNK3Dtk6Widget17DLoadingIndicator12widgetSourceEv@Base 2.0.11
3620 _ZNK3Dtk6Widget17DLoadingIndicator13aniEasingTypeEv@Base 2.0.11
3621 _ZNK3Dtk6Widget17DLoadingIndicator15backgroundColorEv@Base 2.0.11
3622 _ZNK3Dtk6Widget17DLoadingIndicator6rotateEv@Base 2.0.11
3623 _ZNK3Dtk6Widget17DLoadingIndicator6smoothEv@Base 2.0.11
3624 _ZNK3Dtk6Widget17DLoadingIndicator7loadingEv@Base 2.0.11
3625 _ZNK3Dtk6Widget17DLoadingIndicator8sizeHintEv@Base 2.0.11
3626 _ZNK3Dtk6Widget17DLoadingIndicator9directionEv@Base 2.0.11
3627 _ZNK3Dtk6Widget17DSegmentedControl10metaObjectEv@Base 2.0.11
3628 _ZNK3Dtk6Widget17DSegmentedControl12currentIndexEv@Base 2.0.11
3629 _ZNK3Dtk6Widget17DSegmentedControl12indexByTitleERK7QString@Base 2.0.11
3630 _ZNK3Dtk6Widget17DSegmentedControl13animationTypeEv@Base 2.0.11
3631 _ZNK3Dtk6Widget17DSegmentedControl17animationDurationEv@Base 2.0.11
3632 _ZNK3Dtk6Widget17DSegmentedControl2atEi@Base 2.0.11
3633 _ZNK3Dtk6Widget17DSegmentedControl5countEv@Base 2.0.11
3634 _ZNK3Dtk6Widget17DSegmentedControl7getIconEi@Base 2.0.11
3635 _ZNK3Dtk6Widget17DSegmentedControl7getTextEi@Base 2.0.11
3636 _ZNK3Dtk6Widget17DSegmentedControl9highlightEv@Base 2.0.11
3637 _ZNK3Dtk6Widget17DSwitchHeaderLine10metaObjectEv@Base 2.0.11
3638 _ZNK3Dtk6Widget17DSwitchLineExpand10metaObjectEv@Base 2.0.11
3639 _ZNK3Dtk6Widget17DVariantListModel4dataERK11QModelIndexi@Base 2.0.11
3640 _ZNK3Dtk6Widget17DVariantListModel8rowCountERK11QModelIndex@Base 2.0.11
3641 _ZNK3Dtk6Widget18DFlowLayoutPrivate8doLayoutERK5QRectb@Base 2.0.11
3642 _ZNK3Dtk6Widget18DSeparatorVertical10metaObjectEv@Base 2.0.11
3643 _ZNK3Dtk6Widget18DShortcutEditLabel10metaObjectEv@Base 2.0.11
3644 _ZNK3Dtk6Widget18DThumbnailProvider10metaObjectEv@Base 2.0.11
3645 _ZNK3Dtk6Widget18DThumbnailProvider11errorStringEv@Base 2.0.11
3646 _ZNK3Dtk6Widget18DThumbnailProvider12hasThumbnailERK9QFileInfo@Base 2.0.11
3647 _ZNK3Dtk6Widget18DThumbnailProvider12hasThumbnailERK9QMimeType@Base 2.0.11
3648 _ZNK3Dtk6Widget18DThumbnailProvider16defaultSizeLimitEv@Base 2.0.11
3649 _ZNK3Dtk6Widget18DThumbnailProvider16thumbnailChangedERK7QStringS4_@Base 2.0.11
3650 _ZNK3Dtk6Widget18DThumbnailProvider17thumbnailFilePathERK9QFileInfoNS1_4SizeE@Base 2.0.11
3651 _ZNK3Dtk6Widget18DThumbnailProvider21createThumbnailFailedERK7QString@Base 2.0.11
3652 _ZNK3Dtk6Widget18DThumbnailProvider23createThumbnailFinishedERK7QStringS4_@Base 2.0.11
3653 _ZNK3Dtk6Widget18DThumbnailProvider9sizeLimitERK9QMimeType@Base 2.0.11
3654 _ZNK3Dtk6Widget18DWindowCloseButton10metaObjectEv@Base 2.0.11
3655 _ZNK3Dtk6Widget18DWindowGroupLeader13groupLeaderIdEv@Base 2.0.11
3656 _ZNK3Dtk6Widget18DWindowGroupLeader14clientLeaderIdEv@Base 2.0.11
3657 _ZNK3Dtk6Widget19DApplicationPrivate5themeEv@Base 2.0.11
3658 _ZNK3Dtk6Widget19DGraphicsClipEffect10metaObjectEv@Base 2.0.11
3659 _ZNK3Dtk6Widget19DGraphicsClipEffect7marginsEv@Base 2.0.11
3660 _ZNK3Dtk6Widget19DGraphicsClipEffect8clipPathEv@Base 2.0.11
3661 _ZNK3Dtk6Widget19DGraphicsGlowEffect10metaObjectEv@Base 2.0.11
3662 _ZNK3Dtk6Widget19DGraphicsGlowEffect15boundingRectForERK6QRectF@Base 2.0.11
3663 _ZNK3Dtk6Widget19DPasswdEditAnimated10metaObjectEv@Base 2.0.11
3664 _ZNK3Dtk6Widget19DSegmentedHighlight10metaObjectEv@Base 2.0.11
3665 _ZNK3Dtk6Widget19DSvgRendererPrivate8getImageERK5QSizeRK7QString@Base 2.0.11
3666 _ZNK3Dtk6Widget19DWindowOptionButton10metaObjectEv@Base 2.0.11
3667 _ZNK3Dtk6Widget20CrumbObjectInterface10metaObjectEv@Base 2.0.11
3668 _ZNK3Dtk6Widget20DPictureSequenceView10metaObjectEv@Base 2.0.11
3669 _ZNK3Dtk6Widget20DPictureSequenceView10singleShotEv@Base 2.0.11
3670 _ZNK3Dtk6Widget20DPictureSequenceView12speedChangedEi@Base 2.0.11
3671 _ZNK3Dtk6Widget20DPictureSequenceView5speedEv@Base 2.0.11
3672 _ZNK3Dtk6Widget20DPictureSequenceView7playEndEv@Base 2.0.11
3673 _ZNK3Dtk6Widget20DSeparatorHorizontal10metaObjectEv@Base 2.0.11
3674 _ZNK3Dtk6Widget20DThemeManagerPrivate13getQssContentERK7QString@Base 2.0.11
3675 _ZNK3Dtk6Widget20DWindowManagerHelper10metaObjectEv@Base 2.0.11
3676 _ZNK3Dtk6Widget20DWindowManagerHelper12hasCompositeEv@Base 2.0.11
3677 _ZNK3Dtk6Widget20DWindowManagerHelper13hasBlurWindowEv@Base 2.0.11
3678 _ZNK3Dtk6Widget20DWindowManagerHelper15allWindowIdListEv@Base 2.0.11
3679 _ZNK3Dtk6Widget20DWindowManagerHelper17windowManagerNameEv@Base 2.0.11
3680 _ZNK3Dtk6Widget20DWindowManagerHelper23currentWorkspaceWindowsEv@Base 2.0.11
3681 _ZNK3Dtk6Widget20DWindowManagerHelper23windowManagerNameStringEv@Base 2.0.11
3682 _ZNK3Dtk6Widget20DWindowManagerHelper28currentWorkspaceWindowIdListEv@Base 2.0.11
3683 _ZNK3Dtk6Widget21DPlatformWindowHandle10metaObjectEv@Base 2.0.11
3684 _ZNK3Dtk6Widget21DPlatformWindowHandle11borderColorEv@Base 2.0.11
3685 _ZNK3Dtk6Widget21DPlatformWindowHandle11borderWidthEv@Base 2.0.11
3686 _ZNK3Dtk6Widget21DPlatformWindowHandle11shadowColorEv@Base 2.0.11
3687 _ZNK3Dtk6Widget21DPlatformWindowHandle12frameMarginsEv@Base 2.0.11
3688 _ZNK3Dtk6Widget21DPlatformWindowHandle12realWindowIdEv@Base 2.0.11
3689 _ZNK3Dtk6Widget21DPlatformWindowHandle12shadowOffsetEv@Base 2.0.11
3690 _ZNK3Dtk6Widget21DPlatformWindowHandle12shadowRadiusEv@Base 2.0.11
3691 _ZNK3Dtk6Widget21DPlatformWindowHandle12windowRadiusEv@Base 2.0.11
3692 _ZNK3Dtk6Widget21DPlatformWindowHandle16enableBlurWindowEv@Base 2.0.11
3693 _ZNK3Dtk6Widget21DPlatformWindowHandle16enableSystemMoveEv@Base 2.0.11
3694 _ZNK3Dtk6Widget21DPlatformWindowHandle18enableSystemResizeEv@Base 2.0.11
3695 _ZNK3Dtk6Widget21DPlatformWindowHandle21translucentBackgroundEv@Base 2.0.11
3696 _ZNK3Dtk6Widget21DPlatformWindowHandle23autoInputMaskByClipPathEv@Base 2.0.11
3697 _ZNK3Dtk6Widget21DPlatformWindowHandle8clipPathEv@Base 2.0.11
3698 _ZNK3Dtk6Widget21DPlatformWindowHandle9frameMaskEv@Base 2.0.11
3699 _ZNK3Dtk6Widget21DRegionMonitorPrivate22deviceScaledCoordinateERK6QPointd@Base 2.0.11
3700 _ZNK3Dtk6Widget22DAbstractDialogPrivate17getParentGeometryEv@Base 2.0.11
3701 _ZNK3Dtk6Widget22DSettingsWidgetFactory10metaObjectEv@Base 2.0.11
3702 _ZNK3Dtk6Widget24DBlurEffectWidgetPrivate23isBehindWindowBlendModeEv@Base 2.0.11
3703 _ZNK3Dtk6Widget24DBorderlessWidgetPrivate10externSizeERK5QSize@Base 2.0.11
3704 _ZNK3Dtk6Widget24DBorderlessWidgetPrivate11externWidthEv@Base 2.0.11
3705 _ZNK3Dtk6Widget24DBorderlessWidgetPrivate13externMarginsEv@Base 2.0.11
3706 _ZNK3Dtk6Widget24DBorderlessWidgetPrivate25_q_onTitleBarMousePressedE6QFlagsIN2Qt11MouseButtonEE@Base 2.0.11
3707 _ZNK3Dtk6Widget24DFileIconProviderPrivate17getFilesystemIconERK9QFileInfo@Base 2.0.11
3708 _ZNK3Dtk6Widget24DFileIconProviderPrivate9fromThemeE7QString@Base 2.0.11
3709 _ZNK3Dtk6Widget25DThumbnailProviderPrivate14sizeToFilePathENS0_18DThumbnailProvider4SizeE@Base 2.0.11
3710 _ZNK3Dtk6Widget27DSlideStackWidgetTransition10metaObjectEv@Base 2.0.11
3711 _ZNK3Dtk6Widget30DAbstractStackWidgetTransition4infoEv@Base 2.0.11
3712 _ZNK3Dtk6Widget30DAbstractStackWidgetTransition9animationEv@Base 2.0.11
3713 _ZNK3Dtk6Widget6DLabel10metaObjectEv@Base 2.0.11
3714 _ZNK3Dtk6Widget6DToast10metaObjectEv@Base 2.0.11
3715 _ZNK3Dtk6Widget6DToast4iconEv@Base 2.0.11
3716 _ZNK3Dtk6Widget6DToast4textEv@Base 2.0.11
3717 _ZNK3Dtk6Widget6DToast7opacityEv@Base 2.0.11
3718 _ZNK3Dtk6Widget6DToast8durationEv@Base 2.0.11
3719 _ZNK3Dtk6Widget7Content10metaObjectEv@Base 2.0.11
3720 _ZNK3Dtk6Widget7Content13widgetFactoryEv@Base 2.0.11
3721 _ZNK3Dtk6Widget7DDialog10getButtonsEv@Base 2.0.11
3722 _ZNK3Dtk6Widget7DDialog10getContentEi@Base 2.0.11
3723 _ZNK3Dtk6Widget7DDialog10iconPixmapEv@Base 2.0.11
3724 _ZNK3Dtk6Widget7DDialog10metaObjectEv@Base 2.0.11
3725 _ZNK3Dtk6Widget7DDialog10textFormatEv@Base 2.0.11
3726 _ZNK3Dtk6Widget7DDialog11buttonCountEv@Base 2.0.11
3727 _ZNK3Dtk6Widget7DDialog11getContentsEv@Base 2.0.11
3728 _ZNK3Dtk6Widget7DDialog12contentCountEv@Base 2.0.11
3729 _ZNK3Dtk6Widget7DDialog20getButtonIndexByTextERK7QString@Base 2.0.11
3730 _ZNK3Dtk6Widget7DDialog20onButtonClickedCloseEv@Base 2.0.11
3731 _ZNK3Dtk6Widget7DDialog28contentLayoutContentsMarginsEv@Base 2.0.11
3732 _ZNK3Dtk6Widget7DDialog4iconEv@Base 2.0.11
3733 _ZNK3Dtk6Widget7DDialog5titleEv@Base 2.0.11
3734 _ZNK3Dtk6Widget7DDialog7messageEv@Base 2.0.11
3735 _ZNK3Dtk6Widget7DDialog9getButtonEi@Base 2.0.11
3736 _ZNK3Dtk6Widget7DOption10metaObjectEv@Base 2.0.11
3737 _ZNK3Dtk6Widget7DOption11checkedIconEv@Base 2.0.11
3738 _ZNK3Dtk6Widget7DOption11sizeChangedERK5QSize@Base 2.0.11
3739 _ZNK3Dtk6Widget7DOption14checkedChangedEb@Base 2.0.11
3740 _ZNK3Dtk6Widget7DOption18checkedIconChangedE7QString@Base 2.0.11
3741 _ZNK3Dtk6Widget7DOption4nameEv@Base 2.0.11
3742 _ZNK3Dtk6Widget7DOption5valueEv@Base 2.0.11
3743 _ZNK3Dtk6Widget7DOption7checkedEv@Base 2.0.11
3744 _ZNK3Dtk6Widget7DSlider10handleTypeEv@Base 2.0.11
3745 _ZNK3Dtk6Widget7DSlider10metaObjectEv@Base 2.0.11
3746 _ZNK3Dtk6Widget7DSlider10scaleColorEv@Base 2.0.11
3747 _ZNK3Dtk6Widget7DSlider14hoverShowValueEv@Base 2.0.11
3748 _ZNK3Dtk6Widget7DSlider15hoverValueColorEv@Base 2.0.11
3749 _ZNK3Dtk6Widget7DSlider22hoverShowValueIntervalEv@Base 2.0.11
3750 _ZNK3Dtk6Widget7DSlider7leftTipEv@Base 2.0.11
3751 _ZNK3Dtk6Widget7DSlider8rightTipEv@Base 2.0.11
3752 _ZNK3Dtk6Widget7DSlider8sizeHintEv@Base 2.0.11
3753 _ZNK3Dtk6Widget7DSlider8tipColorEv@Base 2.0.11
3754 _ZNK3Dtk6Widget7DTabBar10flashColorEv@Base 2.0.11
3755 _ZNK3Dtk6Widget7DTabBar10isDragableEv@Base 2.0.11
3756 _ZNK3Dtk6Widget7DTabBar10metaObjectEv@Base 2.0.11
3757 _ZNK3Dtk6Widget7DTabBar10tabToolTipEi@Base 2.0.11
3758 _ZNK3Dtk6Widget7DTabBar11tabSizeHintEi@Base 2.0.11
3759 _ZNK3Dtk6Widget7DTabBar12currentIndexEv@Base 2.0.11
3760 _ZNK3Dtk6Widget7DTabBar12documentModeEv@Base 2.0.11
3761 _ZNK3Dtk6Widget7DTabBar12isTabEnabledEi@Base 2.0.11
3762 _ZNK3Dtk6Widget7DTabBar12tabWhatsThisEi@Base 2.0.11
3763 _ZNK3Dtk6Widget7DTabBar12tabsClosableEv@Base 2.0.11
3764 _ZNK3Dtk6Widget7DTabBar14dragIconWindowEv@Base 2.0.11
3765 _ZNK3Dtk6Widget7DTabBar16visibleAddButtonEv@Base 2.0.11
3766 _ZNK3Dtk6Widget7DTabBar17startDragDistanceEv@Base 2.0.11
3767 _ZNK3Dtk6Widget7DTabBar17usesScrollButtonsEv@Base 2.0.11
3768 _ZNK3Dtk6Widget7DTabBar18maximumTabSizeHintEi@Base 2.0.11
3769 _ZNK3Dtk6Widget7DTabBar18minimumTabSizeHintEi@Base 2.0.11
3770 _ZNK3Dtk6Widget7DTabBar19changeCurrentOnDragEv@Base 2.0.11
3771 _ZNK3Dtk6Widget7DTabBar21canInsertFromMimeDataEiPK9QMimeData@Base 2.0.11
3772 _ZNK3Dtk6Widget7DTabBar21createMimeDataFromTabEiRK15QStyleOptionTab@Base 2.0.11
3773 _ZNK3Dtk6Widget7DTabBar23createDragPixmapFromTabEiRK15QStyleOptionTabP6QPoint@Base 2.0.11
3774 _ZNK3Dtk6Widget7DTabBar25selectionBehaviorOnRemoveEv@Base 2.0.11
3775 _ZNK3Dtk6Widget7DTabBar5countEv@Base 2.0.11
3776 _ZNK3Dtk6Widget7DTabBar5shapeEv@Base 2.0.11
3777 _ZNK3Dtk6Widget7DTabBar5tabAtERK6QPoint@Base 2.0.11
3778 _ZNK3Dtk6Widget7DTabBar6d_funcEv@Base 2.0.11
3779 _ZNK3Dtk6Widget7DTabBar7tabDataEi@Base 2.0.11
3780 _ZNK3Dtk6Widget7DTabBar7tabIconEi@Base 2.0.11
3781 _ZNK3Dtk6Widget7DTabBar7tabRectEi@Base 2.0.11
3782 _ZNK3Dtk6Widget7DTabBar7tabTextEi@Base 2.0.11
3783 _ZNK3Dtk6Widget7DTabBar8autoHideEv@Base 2.0.11
3784 _ZNK3Dtk6Widget7DTabBar8drawBaseEv@Base 2.0.11
3785 _ZNK3Dtk6Widget7DTabBar8iconSizeEv@Base 2.0.11
3786 _ZNK3Dtk6Widget7DTabBar8paintTabEP8QPainteriRK15QStyleOptionTab@Base 2.0.11
3787 _ZNK3Dtk6Widget7DTabBar9elideModeEv@Base 2.0.11
3788 _ZNK3Dtk6Widget7DTabBar9expandingEv@Base 2.0.11
3789 _ZNK3Dtk6Widget7DTabBar9isMovableEv@Base 2.0.11
3790 _ZNK3Dtk6Widget7DTabBar9maskColorEv@Base 2.0.11
3791 _ZNK3Dtk6Widget7DTabBar9tabButtonEiN7QTabBar14ButtonPositionE@Base 2.0.11
3792 _ZNK3Dtk6Widget8DSpinBox10metaObjectEv@Base 2.0.11
3793 _ZNK3Dtk6Widget8DSpinBox12defaultValueEv@Base 2.0.11
3794 _ZNK3Dtk6Widget8DSpinBox7isAlertEv@Base 2.0.11
3795 _ZNK3Dtk6Widget8DSpinBox8lineEditEv@Base 2.0.11
3796 _ZNK3Dtk6Widget8DSpinner10metaObjectEv@Base 2.0.11
3797 _ZNK3Dtk6Widget8DSpinner9isPlayingEv@Base 2.0.11
3798 _ZNK3Dtk6Widget9DBaseLine10leftMarginEv@Base 2.0.11
3799 _ZNK3Dtk6Widget9DBaseLine10metaObjectEv@Base 2.0.11
3800 _ZNK3Dtk6Widget9DBaseLine11rightMarginEv@Base 2.0.11
3801 _ZNK3Dtk6Widget9DLineEdit10metaObjectEv@Base 2.0.11
3802 _ZNK3Dtk6Widget9DLineEdit10normalIconEv@Base 2.0.11
3803 _ZNK3Dtk6Widget9DLineEdit11iconClickedEv@Base 2.0.11
3804 _ZNK3Dtk6Widget9DLineEdit11iconVisibleEv@Base 2.0.11
3805 _ZNK3Dtk6Widget9DLineEdit11sizeChangedERK5QSize@Base 2.0.11
3806 _ZNK3Dtk6Widget9DLineEdit12alertChangedEb@Base 2.0.11
3807 _ZNK3Dtk6Widget9DLineEdit12focusChangedEb@Base 2.0.11
3808 _ZNK3Dtk6Widget9DLineEdit7isAlertEv@Base 2.0.11
3809 _ZNK3Dtk6Widget9DLineEdit9hoverIconEv@Base 2.0.11
3810 _ZNK3Dtk6Widget9DLineEdit9pressIconEv@Base 2.0.11
3811 _ZNK3Dtk6Widget9DListView10metaObjectEv@Base 2.0.11
3812 _ZNK3Dtk6Widget9DListView11orientationEv@Base 2.0.11
3813 _ZNK3Dtk6Widget9DListView12isActiveRectERK5QRect@Base 2.0.11
3814 _ZNK3Dtk6Widget9DListView12isVisualRectERK5QRect@Base 2.0.11
3815 _ZNK3Dtk6Widget9DListView15getFooterWidgetEi@Base 2.0.11
3816 _ZNK3Dtk6Widget9DListView15getHeaderWidgetEi@Base 2.0.11
3817 _ZNK3Dtk6Widget9DListView5countEv@Base 2.0.11
3818 _ZNK3Dtk6Widget9DListView5stateEv@Base 2.0.11
3819 _ZNK3Dtk6Widget9DTextEdit10metaObjectEv@Base 2.0.11
3820 _ZNK3Dtk6Widget9DTitlebar10metaObjectEv@Base 2.0.11
3821 _ZNK3Dtk6Widget9DTitlebar12customWidgetEv@Base 2.0.11
3822 _ZNK3Dtk6Widget9DTitlebar12disableFlagsEv@Base 2.0.11
3823 _ZNK3Dtk6Widget9DTitlebar15buttonAreaWidthEv@Base 2.0.11
3824 _ZNK3Dtk6Widget9DTitlebar16separatorVisibleEv@Base 2.0.11
3825 _ZNK3Dtk6Widget9DTitlebar20autoHideOnFullscreenEv@Base 2.0.11
3826 _ZNK3Dtk6Widget9DTitlebar4menuEv@Base 2.0.11
3827 (optional=templinst)_ZNK4QMapI7QString8QVariantE4keysEv@Base 2.0.11
3828 (optional=templinst)_ZNK4QMapIiPN3Dtk6Widget11DBaseExpandEE4keysEv@Base 2.0.11
3829 (optional=templinst)_ZNK4QMapIiPN3Dtk6Widget11DBaseExpandEE6valuesEv@Base 2.0.11
3830 (optional=templinst)_ZNK5QHashI5QPairI7QStringN3Dtk6Widget18DThumbnailProvider4SizeEE15QHashDummyValueE8findNodeERKS6_Pj@Base 2.0.11
3831 (optional=templinst)_ZNK5QHashI5QPairI7QStringN3Dtk6Widget18DThumbnailProvider4SizeEE15QHashDummyValueE8findNodeERKS6_j@Base 2.0.11
3832 (optional=templinst)_ZNK5QListI7QStringE5valueEi@Base 2.0.11
3833 (optional=templinst)_ZNK5QListIN14QTabBarPrivate3TabEE7indexOfERKS1_i@Base 2.0.11
3834 (optional=templinst)_ZNK5QListIP15QAbstractButtonE7indexOfERKS1_i@Base 2.0.11
3835 (optional=templinst)_ZNK5QListIP7QWidgetE7indexOfERKS1_i@Base 2.0.11
3836 (optional=templinst)_ZNK5QListIP9QLineEditE7indexOfERKS1_i@Base 2.0.11
3837 (optional=templinst)_ZNK5QListIPN3Dtk6Widget11DBaseExpandEE7indexOfERKS3_i@Base 2.0.11
3838 (optional=templinst)_ZNK5QListIPN3Dtk6Widget15DSimpleListItemEE7indexOfERKS3_i@Base 2.0.11
3839 _ZNK7QWindow4sizeEv@Base 2.0.11
3840 _ZNK8ComboBox10metaObjectEv@Base 2.0.11
3841 (optional=templinst)_ZNK8QMapDataI7QString8QVariantE8findNodeERKS0_@Base 2.0.11
3842 (optional=templinst)_ZNK8QMapDataI7QStringN3Dtk6Widget16DCrumbTextFormatEE8findNodeERKS0_@Base 2.0.11
3843 (optional=templinst)_ZNK8QMapDataI7QStringP7QWidgetE8findNodeERKS0_@Base 2.0.11
3844 (optional=templinst)_ZNK8QMapDataI7QStringS0_E8findNodeERKS0_@Base 2.0.11
3845 (optional=templinst)_ZNK8QMapNodeI7QString8QVariantE4copyEP8QMapDataIS0_S1_E@Base 2.0.11
3846 (optional=templinst)_ZNK8QMapNodeI7QStringN3Dtk6Widget16DCrumbTextFormatEE4copyEP8QMapDataIS0_S3_E@Base 2.0.11
3847 (optional=templinst)_ZNK8QMapNodeI7QStringP7QWidgetE4copyEP8QMapDataIS0_S2_E@Base 2.0.11
3848 (optional=templinst)_ZNK8QMapNodeI7QStringS0_E4copyEP8QMapDataIS0_S0_E@Base 2.0.11
3849 (optional=templinst)_ZNK8QMapNodeI7QStringSt8functionIFP7QWidgetP7QObjectEEE4copyEP8QMapDataIS0_S7_E@Base 2.0.11
3850 (optional=templinst)_ZNK8QMapNodeIP15QListWidgetItemPN3Dtk6Widget7DOptionEE4copyEP8QMapDataIS1_S5_E@Base 2.0.11
3851 (optional=templinst)_ZNK8QMapNodeIP7QWidget4QMapI7QStringS3_EE4copyEP8QMapDataIS1_S4_E@Base 2.0.11
3852 (optional=templinst)_ZNK8QMapNodeIPK7QWidgetPN3Dtk6Widget12DAnchorsBaseEE4copyEP8QMapDataIS2_S6_E@Base 2.0.11
3853 (optional=templinst)_ZNK8QMapNodeIPK7QWidgetbE4copyEP8QMapDataIS2_bE@Base 2.0.11
3854 (optional=templinst)_ZNK8QMapNodeIi7QStringE4copyEP8QMapDataIiS0_E@Base 2.0.11
3855 (optional=templinst)_ZNK8QMapNodeIiPN3Dtk6Widget11DBaseExpandEE4copyEP8QMapDataIiS3_E@Base 2.0.11
3856 _ZNK9DBusMPRIS10metaObjectEv@Base 2.0.11
3857 (optional=templinst)_ZNSt14_Function_base13_Base_managerIPFP7QWidgetP7QObjectEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation@Base 2.0.11
3858 (optional=templinst)_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE10_M_releaseEv@Base 2.0.11
3859 (optional=templinst)_ZNSt17_Function_handlerIFP7QWidgetP7QObjectEPS4_E9_M_invokeERKSt9_Any_dataOS3_@Base 2.0.11
3860 (optional=templinst)_ZNSt8functionIFP7QWidgetP7QObjectEEC1ERKS5_@Base 2.0.11
3861 (optional=templinst)_ZNSt8functionIFP7QWidgetP7QObjectEEC2ERKS5_@Base 2.0.11
3862 (optional=templinst)_ZNSt8functionIFvRK7QStringEEC1ERKS4_@Base 2.0.11
3863 (optional=templinst)_ZNSt8functionIFvRK7QStringEEC2ERKS4_@Base 2.0.11
3864 (optional=templinst)_ZNSt8functionIFvvEEC1ERKS1_@Base 2.0.11
3865 (optional=templinst)_ZNSt8functionIFvvEEC2ERKS1_@Base 2.0.11
3866 (optional=templinst)_ZSt16__insertion_sortIN5QListIiE8iteratorEN9__gnu_cxx5__ops15_Iter_less_iterEEvT_S6_T0_@Base 2.0.11
3867 _ZTI11ButtonGroup@Base 2.0.11
3868 _ZTI12ContentTitle@Base 2.0.11
3869 _ZTI12DThemeHelper@Base 2.0.11
3870 _ZTI12QStyleOption@Base 2.0.11
3871 _ZTI12ShortcutEdit@Base 2.0.11
3872 _ZTI13DBusInterface@Base 2.0.11
3873 _ZTI13DMPRISMonitor@Base 2.0.11
3874 _ZTI16QFutureInterfaceIbE@Base 2.0.11
3875 _ZTI16QFutureInterfaceIvE@Base 2.0.11
3876 _ZTI18NavigationDelegate@Base 2.0.11
3877 _ZTI18QStyleOptionButton@Base 2.0.11
3878 _ZTI26StartupNotificationMonitor@Base 2.0.11
3879 _ZTI29StartupNotificationMonitorSub@Base 2.0.11
3880 _ZTI8ComboBox@Base 2.0.11
3881 _ZTI9DBusMPRIS@Base 2.0.11
3882 _ZTIFP7QWidgetP7QObjectE@Base 2.0.11
3883 _ZTIN12QtConcurrent15RunFunctionTaskIbEE@Base 2.0.11
3884 _ZTIN12QtConcurrent15RunFunctionTaskIvEE@Base 2.0.11
3885 _ZTIN12QtConcurrent19RunFunctionTaskBaseIbEE@Base 2.0.11
3886 _ZTIN12QtConcurrent19RunFunctionTaskBaseIvEE@Base 2.0.11
3887 _ZTIN12QtConcurrent32StoredMemberFunctionPointerCall0Ib16QSystemSemaphoreEE@Base 2.0.11
3888 _ZTIN3Dtk6Widget10DBoxWidgetE@Base 2.0.11
3889 _ZTIN3Dtk6Widget10DCrumbEditE@Base 2.0.11
3890 _ZTIN3Dtk6Widget10DScrollBarE@Base 2.0.11
3891 _ZTIN3Dtk6Widget10LoadSliderE@Base 2.0.11
3892 _ZTIN3Dtk6Widget10NavigationE@Base 2.0.11
3893 _ZTIN3Dtk6Widget11DBaseButtonE@Base 2.0.11
3894 _ZTIN3Dtk6Widget11DBaseExpandE@Base 2.0.11
3895 _ZTIN3Dtk6Widget11DButtonListE@Base 2.0.11
3896 _ZTIN3Dtk6Widget11DFileDialogE@Base 2.0.11
3897 _ZTIN3Dtk6Widget11DFlowLayoutE@Base 2.0.11
3898 _ZTIN3Dtk6Widget11DHBoxWidgetE@Base 2.0.11
3899 _ZTIN3Dtk6Widget11DHeaderLineE@Base 2.0.11
3900 _ZTIN3Dtk6Widget11DIconButtonE@Base 2.0.11
3901 _ZTIN3Dtk6Widget11DLinkButtonE@Base 2.0.11
3902 _ZTIN3Dtk6Widget11DListWidgetE@Base 2.0.11
3903 _ZTIN3Dtk6Widget11DMainWindowE@Base 2.0.11
3904 _ZTIN3Dtk6Widget11DOptionListE@Base 2.0.11
3905 _ZTIN3Dtk6Widget11DPushButtonE@Base 2.0.11
3906 _ZTIN3Dtk6Widget11DScrollAreaE@Base 2.0.11
3907 _ZTIN3Dtk6Widget11DSearchEditE@Base 2.0.11
3908 _ZTIN3Dtk6Widget11DTextButtonE@Base 2.0.11
3909 _ZTIN3Dtk6Widget11DTickEffectE@Base 2.0.11
3910 _ZTIN3Dtk6Widget11DVBoxWidgetE@Base 2.0.11
3911 _ZTIN3Dtk6Widget12DAboutDialogE@Base 2.0.11
3912 _ZTIN3Dtk6Widget12DAnchorsBaseE@Base 2.0.11
3913 _ZTIN3Dtk6Widget12DApplicationE@Base 2.0.11
3914 _ZTIN3Dtk6Widget12DArrowButtonE@Base 2.0.11
3915 _ZTIN3Dtk6Widget12DExpandGroupE@Base 2.0.11
3916 _ZTIN3Dtk6Widget12DImageButtonE@Base 2.0.11
3917 _ZTIN3Dtk6Widget12DInputDialogE@Base 2.0.11
3918 _ZTIN3Dtk6Widget12DStackWidgetE@Base 2.0.11
3919 _ZTIN3Dtk6Widget12DStyleOptionE@Base 2.0.11
3920 _ZTIN3Dtk6Widget12DSvgRendererE@Base 2.0.11
3921 _ZTIN3Dtk6Widget12DVideoWidgetE@Base 2.0.11
3922 _ZTIN3Dtk6Widget12DialogButtonE@Base 2.0.11
3923 _ZTIN3Dtk6Widget13ContentLoaderE@Base 2.0.11
3924 _ZTIN3Dtk6Widget13DIpv4LineEditE@Base 2.0.11
3925 _ZTIN3Dtk6Widget13DMPRISControlE@Base 2.0.11
3926 _ZTIN3Dtk6Widget13DPasswordEditE@Base 2.0.11
3927 _ZTIN3Dtk6Widget13DShortcutEditE@Base 2.0.11
3928 _ZTIN3Dtk6Widget13DSwitchButtonE@Base 2.0.11
3929 _ZTIN3Dtk6Widget13DThemeManagerE@Base 2.0.11
3930 _ZTIN3Dtk6Widget13DToastPrivateE@Base 2.0.11
3931 _ZTIN3Dtk6Widget13DTrashManagerE@Base 2.0.11
3932 _ZTIN3Dtk6Widget14DDialogPrivateE@Base 2.0.11
3933 _ZTIN3Dtk6Widget14DDoubleSpinBoxE@Base 2.0.11
3934 _ZTIN3Dtk6Widget14DForeignWindowE@Base 2.0.11
3935 _ZTIN3Dtk6Widget14DOptionPrivateE@Base 2.0.11
3936 _ZTIN3Dtk6Widget14DPageIndicatorE@Base 2.0.11
3937 _ZTIN3Dtk6Widget14DRegionMonitorE@Base 2.0.11
3938 _ZTIN3Dtk6Widget14DSuggestButtonE@Base 2.0.11
3939 _ZTIN3Dtk6Widget14DTabBarPrivate10FullWidgetE@Base 2.0.11
3940 _ZTIN3Dtk6Widget14DTabBarPrivate15TabBarAnimationE@Base 2.0.11
3941 _ZTIN3Dtk6Widget14DTabBarPrivateE@Base 2.0.11
3942 _ZTIN3Dtk6Widget14DTrashManager_E@Base 2.0.11
3943 _ZTIN3Dtk6Widget14DWaterProgressE@Base 2.0.11
3944 _ZTIN3Dtk6Widget15ArrowButtonIconE@Base 2.0.11
3945 _ZTIN3Dtk6Widget15ArrowHeaderLineE@Base 2.0.11
3946 _ZTIN3Dtk6Widget15DAbstractDialogE@Base 2.0.11
3947 _ZTIN3Dtk6Widget15DArrowRectangleE@Base 2.0.11
3948 _ZTIN3Dtk6Widget15DCircleProgressE@Base 2.0.11
3949 _ZTIN3Dtk6Widget15DEnhancedWidgetE@Base 2.0.11
3950 _ZTIN3Dtk6Widget15DSettingsDialogE@Base 2.0.11
3951 _ZTIN3Dtk6Widget15DSimpleListItemE@Base 2.0.11
3952 _ZTIN3Dtk6Widget15DSimpleListViewE@Base 2.0.11
3953 _ZTIN3Dtk6Widget15DSpinBoxPrivateE@Base 2.0.11
3954 _ZTIN3Dtk6Widget15DSpinnerPrivateE@Base 2.0.11
3955 _ZTIN3Dtk6Widget15FilterMouseMoveE@Base 2.0.11
3956 _ZTIN3Dtk6Widget16DArrowLineExpandE@Base 2.0.11
3957 _ZTIN3Dtk6Widget16DFileChooserEditE@Base 2.0.11
3958 _ZTIN3Dtk6Widget16DKeyboardMonitorE@Base 2.0.11
3959 _ZTIN3Dtk6Widget16DLineEditPrivateE@Base 2.0.11
3960 _ZTIN3Dtk6Widget16DListViewPrivateE@Base 2.0.11
3961 _ZTIN3Dtk6Widget16DTabBarAddButtonE@Base 2.0.11
3962 _ZTIN3Dtk6Widget16DTextEditPrivateE@Base 2.0.11
3963 _ZTIN3Dtk6Widget16DTitlebarPrivateE@Base 2.0.11
3964 _ZTIN3Dtk6Widget16DWindowMaxButtonE@Base 2.0.11
3965 _ZTIN3Dtk6Widget16DWindowMinButtonE@Base 2.0.11
3966 _ZTIN3Dtk6Widget16VideoFormatProxyE@Base 2.0.11
3967 _ZTIN3Dtk6Widget17DBlurEffectWidgetE@Base 2.0.11
3968 _ZTIN3Dtk6Widget17DBorderlessWidgetE@Base 2.0.11
3969 _ZTIN3Dtk6Widget17DBorderlessWindowE@Base 2.0.11
3970 _ZTIN3Dtk6Widget17DBoxWidgetPrivateE@Base 2.0.11
3971 _ZTIN3Dtk6Widget17DClipEffectWidgetE@Base 2.0.11
3972 _ZTIN3Dtk6Widget17DCrumbEditPrivateE@Base 2.0.11
3973 _ZTIN3Dtk6Widget17DFileIconProviderE@Base 2.0.11
3974 _ZTIN3Dtk6Widget17DLoadingIndicatorE@Base 2.0.11
3975 _ZTIN3Dtk6Widget17DMovableTabWidgetE@Base 2.0.11
3976 _ZTIN3Dtk6Widget17DScrollBarPrivateE@Base 2.0.11
3977 _ZTIN3Dtk6Widget17DSegmentedControlE@Base 2.0.11
3978 _ZTIN3Dtk6Widget17DSwitchHeaderLineE@Base 2.0.11
3979 _ZTIN3Dtk6Widget17DSwitchLineExpandE@Base 2.0.11
3980 _ZTIN3Dtk6Widget17DVariantListModelE@Base 2.0.11
3981 _ZTIN3Dtk6Widget18DFlowLayoutPrivateE@Base 2.0.11
3982 _ZTIN3Dtk6Widget18DListWidgetPrivateE@Base 2.0.11
3983 _ZTIN3Dtk6Widget18DMainWindowPrivateE@Base 2.0.11
3984 _ZTIN3Dtk6Widget18DOptionListPrivateE@Base 2.0.11
3985 _ZTIN3Dtk6Widget18DPushButtonPrivateE@Base 2.0.11
3986 _ZTIN3Dtk6Widget18DScrollAreaPrivateE@Base 2.0.11
3987 _ZTIN3Dtk6Widget18DSeparatorVerticalE@Base 2.0.11
3988 _ZTIN3Dtk6Widget18DShortcutEditLabelE@Base 2.0.11
3989 _ZTIN3Dtk6Widget18DThumbnailProviderE@Base 2.0.11
3990 _ZTIN3Dtk6Widget18DTickEffectPrivateE@Base 2.0.11
3991 _ZTIN3Dtk6Widget18DWindowCloseButtonE@Base 2.0.11
3992 _ZTIN3Dtk6Widget19DAboutDialogPrivateE@Base 2.0.11
3993 _ZTIN3Dtk6Widget19DApplicationPrivateE@Base 2.0.11
3994 _ZTIN3Dtk6Widget19DGraphicsClipEffectE@Base 2.0.11
3995 _ZTIN3Dtk6Widget19DGraphicsGlowEffectE@Base 2.0.11
3996 _ZTIN3Dtk6Widget19DImageButtonPrivateE@Base 2.0.11
3997 _ZTIN3Dtk6Widget19DInputDialogPrivateE@Base 2.0.11
3998 _ZTIN3Dtk6Widget19DPasswdEditAnimatedE@Base 2.0.11
3999 _ZTIN3Dtk6Widget19DSegmentedHighlightE@Base 2.0.11
4000 _ZTIN3Dtk6Widget19DStackWidgetPrivateE@Base 2.0.11
4001 _ZTIN3Dtk6Widget19DSvgRendererPrivateE@Base 2.0.11
4002 _ZTIN3Dtk6Widget19DVideoWidgetPrivateE@Base 2.0.11
4003 _ZTIN3Dtk6Widget19DWindowOptionButtonE@Base 2.0.11
4004 _ZTIN3Dtk6Widget20CrumbObjectInterfaceE@Base 2.0.11
4005 _ZTIN3Dtk6Widget20DIpv4LineEditPrivateE@Base 2.0.11
4006 _ZTIN3Dtk6Widget20DMPRISControlPrivateE@Base 2.0.11
4007 _ZTIN3Dtk6Widget20DPasswordEditPrivateE@Base 2.0.11
4008 _ZTIN3Dtk6Widget20DPictureSequenceViewE@Base 2.0.11
4009 _ZTIN3Dtk6Widget20DSeparatorHorizontalE@Base 2.0.11
4010 _ZTIN3Dtk6Widget20DStyleOptionLineEditE@Base 2.0.11
4011 _ZTIN3Dtk6Widget20DSwitchButtonPrivateE@Base 2.0.11
4012 _ZTIN3Dtk6Widget20DThemeManagerPrivateE@Base 2.0.11
4013 _ZTIN3Dtk6Widget20DTrashManagerPrivateE@Base 2.0.11
4014 _ZTIN3Dtk6Widget20DWindowManagerHelperE@Base 2.0.11
4015 _ZTIN3Dtk6Widget21DDoubleSpinBoxPrivateE@Base 2.0.11
4016 _ZTIN3Dtk6Widget21DForeignWindowPrivateE@Base 2.0.11
4017 _ZTIN3Dtk6Widget21DPageIndicatorPrivateE@Base 2.0.11
4018 _ZTIN3Dtk6Widget21DPlatformWindowHandleE@Base 2.0.11
4019 _ZTIN3Dtk6Widget21DRegionMonitorPrivateE@Base 2.0.11
4020 _ZTIN3Dtk6Widget21DWaterProgressPrivateE@Base 2.0.11
4021 _ZTIN3Dtk6Widget21DWindowManagerHelper_E@Base 2.0.11
4022 _ZTIN3Dtk6Widget22DAbstractDialogPrivateE@Base 2.0.11
4023 _ZTIN3Dtk6Widget22DArrowRectanglePrivateE@Base 2.0.11
4024 _ZTIN3Dtk6Widget22DCircleProgressPrivateE@Base 2.0.11
4025 _ZTIN3Dtk6Widget22DSettingsWidgetFactoryE@Base 2.0.11
4026 _ZTIN3Dtk6Widget22DSimpleListViewPrivateE@Base 2.0.11
4027 _ZTIN3Dtk6Widget23DFileChooserEditPrivateE@Base 2.0.11
4028 _ZTIN3Dtk6Widget23DWindowMaxButtonPrivateE@Base 2.0.11
4029 _ZTIN3Dtk6Widget24DBlurEffectWidgetPrivateE@Base 2.0.11
4030 _ZTIN3Dtk6Widget24DBorderlessWidgetPrivateE@Base 2.0.11
4031 _ZTIN3Dtk6Widget24DBorderlessWindowPrivateE@Base 2.0.11
4032 _ZTIN3Dtk6Widget24DClipEffectWidgetPrivateE@Base 2.0.11
4033 _ZTIN3Dtk6Widget24DFileIconProviderPrivateE@Base 2.0.11
4034 _ZTIN3Dtk6Widget24DLoadingIndicatorPrivateE@Base 2.0.11
4035 _ZTIN3Dtk6Widget24DSegmentedControlPrivateE@Base 2.0.11
4036 _ZTIN3Dtk6Widget25DStyleOptionSuggestButtonE@Base 2.0.11
4037 _ZTIN3Dtk6Widget25DThumbnailProviderPrivateE@Base 2.0.11
4038 _ZTIN3Dtk6Widget26DGraphicsClipEffectPrivateE@Base 2.0.11
4039 _ZTIN3Dtk6Widget26DPasswdEditAnimatedPrivateE@Base 2.0.11
4040 _ZTIN3Dtk6Widget26DThemeManagerStaticPrivateE@Base 2.0.11
4041 _ZTIN3Dtk6Widget27DPictureSequenceViewPrivateE@Base 2.0.11
4042 _ZTIN3Dtk6Widget27DSlideStackWidgetTransitionE@Base 2.0.11
4043 _ZTIN3Dtk6Widget27DWindowManagerHelperPrivateE@Base 2.0.11
4044 _ZTIN3Dtk6Widget29DFileThumbnailProviderPrivateE@Base 2.0.11
4045 _ZTIN3Dtk6Widget30DAbstractStackWidgetTransitionE@Base 2.0.11
4046 _ZTIN3Dtk6Widget37DAbstractStackWidgetTransitionPrivateE@Base 2.0.11
4047 _ZTIN3Dtk6Widget6DLabelE@Base 2.0.11
4048 _ZTIN3Dtk6Widget6DToastE@Base 2.0.11
4049 _ZTIN3Dtk6Widget7ContentE@Base 2.0.11
4050 _ZTIN3Dtk6Widget7DDialogE@Base 2.0.11
4051 _ZTIN3Dtk6Widget7DOptionE@Base 2.0.11
4052 _ZTIN3Dtk6Widget7DSliderE@Base 2.0.11
4053 _ZTIN3Dtk6Widget7DTabBarE@Base 2.0.11
4054 _ZTIN3Dtk6Widget8DSpinBoxE@Base 2.0.11
4055 _ZTIN3Dtk6Widget8DSpinnerE@Base 2.0.11
4056 _ZTIN3Dtk6Widget9DBaseLineE@Base 2.0.11
4057 _ZTIN3Dtk6Widget9DLineEditE@Base 2.0.11
4058 _ZTIN3Dtk6Widget9DListViewE@Base 2.0.11
4059 _ZTIN3Dtk6Widget9DTextEditE@Base 2.0.11
4060 _ZTIN3Dtk6Widget9DTitlebarE@Base 2.0.11
4061 _ZTIPFP7QWidgetP7QObjectE@Base 2.0.11
4062 _ZTS11ButtonGroup@Base 2.0.11
4063 _ZTS12ContentTitle@Base 2.0.11
4064 _ZTS12DThemeHelper@Base 2.0.11
4065 _ZTS12QStyleOption@Base 2.0.11
4066 _ZTS12ShortcutEdit@Base 2.0.11
4067 _ZTS13DBusInterface@Base 2.0.11
4068 _ZTS13DMPRISMonitor@Base 2.0.11
4069 _ZTS16QFutureInterfaceIbE@Base 2.0.11
4070 _ZTS16QFutureInterfaceIvE@Base 2.0.11
4071 _ZTS18NavigationDelegate@Base 2.0.11
4072 _ZTS18QStyleOptionButton@Base 2.0.11
4073 _ZTS26StartupNotificationMonitor@Base 2.0.11
4074 _ZTS29StartupNotificationMonitorSub@Base 2.0.11
4075 _ZTS8ComboBox@Base 2.0.11
4076 _ZTS9DBusMPRIS@Base 2.0.11
4077 _ZTSFP7QWidgetP7QObjectE@Base 2.0.11
4078 _ZTSN12QtConcurrent15RunFunctionTaskIbEE@Base 2.0.11
4079 _ZTSN12QtConcurrent15RunFunctionTaskIvEE@Base 2.0.11
4080 _ZTSN12QtConcurrent19RunFunctionTaskBaseIbEE@Base 2.0.11
4081 _ZTSN12QtConcurrent19RunFunctionTaskBaseIvEE@Base 2.0.11
4082 _ZTSN12QtConcurrent32StoredMemberFunctionPointerCall0Ib16QSystemSemaphoreEE@Base 2.0.11
4083 _ZTSN3Dtk6Widget10DBoxWidgetE@Base 2.0.11
4084 _ZTSN3Dtk6Widget10DCrumbEditE@Base 2.0.11
4085 _ZTSN3Dtk6Widget10DScrollBarE@Base 2.0.11
4086 _ZTSN3Dtk6Widget10LoadSliderE@Base 2.0.11
4087 _ZTSN3Dtk6Widget10NavigationE@Base 2.0.11
4088 _ZTSN3Dtk6Widget11DBaseButtonE@Base 2.0.11
4089 _ZTSN3Dtk6Widget11DBaseExpandE@Base 2.0.11
4090 _ZTSN3Dtk6Widget11DButtonListE@Base 2.0.11
4091 _ZTSN3Dtk6Widget11DFileDialogE@Base 2.0.11
4092 _ZTSN3Dtk6Widget11DFlowLayoutE@Base 2.0.11
4093 _ZTSN3Dtk6Widget11DHBoxWidgetE@Base 2.0.11
4094 _ZTSN3Dtk6Widget11DHeaderLineE@Base 2.0.11
4095 _ZTSN3Dtk6Widget11DIconButtonE@Base 2.0.11
4096 _ZTSN3Dtk6Widget11DLinkButtonE@Base 2.0.11
4097 _ZTSN3Dtk6Widget11DListWidgetE@Base 2.0.11
4098 _ZTSN3Dtk6Widget11DMainWindowE@Base 2.0.11
4099 _ZTSN3Dtk6Widget11DOptionListE@Base 2.0.11
4100 _ZTSN3Dtk6Widget11DPushButtonE@Base 2.0.11
4101 _ZTSN3Dtk6Widget11DScrollAreaE@Base 2.0.11
4102 _ZTSN3Dtk6Widget11DSearchEditE@Base 2.0.11
4103 _ZTSN3Dtk6Widget11DTextButtonE@Base 2.0.11
4104 _ZTSN3Dtk6Widget11DTickEffectE@Base 2.0.11
4105 _ZTSN3Dtk6Widget11DVBoxWidgetE@Base 2.0.11
4106 _ZTSN3Dtk6Widget12DAboutDialogE@Base 2.0.11
4107 _ZTSN3Dtk6Widget12DAnchorsBaseE@Base 2.0.11
4108 _ZTSN3Dtk6Widget12DApplicationE@Base 2.0.11
4109 _ZTSN3Dtk6Widget12DArrowButtonE@Base 2.0.11
4110 _ZTSN3Dtk6Widget12DExpandGroupE@Base 2.0.11
4111 _ZTSN3Dtk6Widget12DImageButtonE@Base 2.0.11
4112 _ZTSN3Dtk6Widget12DInputDialogE@Base 2.0.11
4113 _ZTSN3Dtk6Widget12DStackWidgetE@Base 2.0.11
4114 _ZTSN3Dtk6Widget12DStyleOptionE@Base 2.0.11
4115 _ZTSN3Dtk6Widget12DSvgRendererE@Base 2.0.11
4116 _ZTSN3Dtk6Widget12DVideoWidgetE@Base 2.0.11
4117 _ZTSN3Dtk6Widget12DialogButtonE@Base 2.0.11
4118 _ZTSN3Dtk6Widget13ContentLoaderE@Base 2.0.11
4119 _ZTSN3Dtk6Widget13DIpv4LineEditE@Base 2.0.11
4120 _ZTSN3Dtk6Widget13DMPRISControlE@Base 2.0.11
4121 _ZTSN3Dtk6Widget13DPasswordEditE@Base 2.0.11
4122 _ZTSN3Dtk6Widget13DShortcutEditE@Base 2.0.11
4123 _ZTSN3Dtk6Widget13DSwitchButtonE@Base 2.0.11
4124 _ZTSN3Dtk6Widget13DThemeManagerE@Base 2.0.11
4125 _ZTSN3Dtk6Widget13DToastPrivateE@Base 2.0.11
4126 _ZTSN3Dtk6Widget13DTrashManagerE@Base 2.0.11
4127 _ZTSN3Dtk6Widget14DDialogPrivateE@Base 2.0.11
4128 _ZTSN3Dtk6Widget14DDoubleSpinBoxE@Base 2.0.11
4129 _ZTSN3Dtk6Widget14DForeignWindowE@Base 2.0.11
4130 _ZTSN3Dtk6Widget14DOptionPrivateE@Base 2.0.11
4131 _ZTSN3Dtk6Widget14DPageIndicatorE@Base 2.0.11
4132 _ZTSN3Dtk6Widget14DRegionMonitorE@Base 2.0.11
4133 _ZTSN3Dtk6Widget14DSuggestButtonE@Base 2.0.11
4134 _ZTSN3Dtk6Widget14DTabBarPrivate10FullWidgetE@Base 2.0.11
4135 _ZTSN3Dtk6Widget14DTabBarPrivate15TabBarAnimationE@Base 2.0.11
4136 _ZTSN3Dtk6Widget14DTabBarPrivateE@Base 2.0.11
4137 _ZTSN3Dtk6Widget14DTrashManager_E@Base 2.0.11
4138 _ZTSN3Dtk6Widget14DWaterProgressE@Base 2.0.11
4139 _ZTSN3Dtk6Widget15ArrowButtonIconE@Base 2.0.11
4140 _ZTSN3Dtk6Widget15ArrowHeaderLineE@Base 2.0.11
4141 _ZTSN3Dtk6Widget15DAbstractDialogE@Base 2.0.11
4142 _ZTSN3Dtk6Widget15DArrowRectangleE@Base 2.0.11
4143 _ZTSN3Dtk6Widget15DCircleProgressE@Base 2.0.11
4144 _ZTSN3Dtk6Widget15DEnhancedWidgetE@Base 2.0.11
4145 _ZTSN3Dtk6Widget15DSettingsDialogE@Base 2.0.11
4146 _ZTSN3Dtk6Widget15DSimpleListItemE@Base 2.0.11
4147 _ZTSN3Dtk6Widget15DSimpleListViewE@Base 2.0.11
4148 _ZTSN3Dtk6Widget15DSpinBoxPrivateE@Base 2.0.11
4149 _ZTSN3Dtk6Widget15DSpinnerPrivateE@Base 2.0.11
4150 _ZTSN3Dtk6Widget15FilterMouseMoveE@Base 2.0.11
4151 _ZTSN3Dtk6Widget16DArrowLineExpandE@Base 2.0.11
4152 _ZTSN3Dtk6Widget16DFileChooserEditE@Base 2.0.11
4153 _ZTSN3Dtk6Widget16DKeyboardMonitorE@Base 2.0.11
4154 _ZTSN3Dtk6Widget16DLineEditPrivateE@Base 2.0.11
4155 _ZTSN3Dtk6Widget16DListViewPrivateE@Base 2.0.11
4156 _ZTSN3Dtk6Widget16DTabBarAddButtonE@Base 2.0.11
4157 _ZTSN3Dtk6Widget16DTextEditPrivateE@Base 2.0.11
4158 _ZTSN3Dtk6Widget16DTitlebarPrivateE@Base 2.0.11
4159 _ZTSN3Dtk6Widget16DWindowMaxButtonE@Base 2.0.11
4160 _ZTSN3Dtk6Widget16DWindowMinButtonE@Base 2.0.11
4161 _ZTSN3Dtk6Widget16VideoFormatProxyE@Base 2.0.11
4162 _ZTSN3Dtk6Widget17DBlurEffectWidgetE@Base 2.0.11
4163 _ZTSN3Dtk6Widget17DBorderlessWidgetE@Base 2.0.11
4164 _ZTSN3Dtk6Widget17DBorderlessWindowE@Base 2.0.11
4165 _ZTSN3Dtk6Widget17DBoxWidgetPrivateE@Base 2.0.11
4166 _ZTSN3Dtk6Widget17DClipEffectWidgetE@Base 2.0.11
4167 _ZTSN3Dtk6Widget17DCrumbEditPrivateE@Base 2.0.11
4168 _ZTSN3Dtk6Widget17DFileIconProviderE@Base 2.0.11
4169 _ZTSN3Dtk6Widget17DLoadingIndicatorE@Base 2.0.11
4170 _ZTSN3Dtk6Widget17DMovableTabWidgetE@Base 2.0.11
4171 _ZTSN3Dtk6Widget17DScrollBarPrivateE@Base 2.0.11
4172 _ZTSN3Dtk6Widget17DSegmentedControlE@Base 2.0.11
4173 _ZTSN3Dtk6Widget17DSwitchHeaderLineE@Base 2.0.11
4174 _ZTSN3Dtk6Widget17DSwitchLineExpandE@Base 2.0.11
4175 _ZTSN3Dtk6Widget17DVariantListModelE@Base 2.0.11
4176 _ZTSN3Dtk6Widget18DFlowLayoutPrivateE@Base 2.0.11
4177 _ZTSN3Dtk6Widget18DListWidgetPrivateE@Base 2.0.11
4178 _ZTSN3Dtk6Widget18DMainWindowPrivateE@Base 2.0.11
4179 _ZTSN3Dtk6Widget18DOptionListPrivateE@Base 2.0.11
4180 _ZTSN3Dtk6Widget18DPushButtonPrivateE@Base 2.0.11
4181 _ZTSN3Dtk6Widget18DScrollAreaPrivateE@Base 2.0.11
4182 _ZTSN3Dtk6Widget18DSeparatorVerticalE@Base 2.0.11
4183 _ZTSN3Dtk6Widget18DShortcutEditLabelE@Base 2.0.11
4184 _ZTSN3Dtk6Widget18DThumbnailProviderE@Base 2.0.11
4185 _ZTSN3Dtk6Widget18DTickEffectPrivateE@Base 2.0.11
4186 _ZTSN3Dtk6Widget18DWindowCloseButtonE@Base 2.0.11
4187 _ZTSN3Dtk6Widget19DAboutDialogPrivateE@Base 2.0.11
4188 _ZTSN3Dtk6Widget19DApplicationPrivateE@Base 2.0.11
4189 _ZTSN3Dtk6Widget19DGraphicsClipEffectE@Base 2.0.11
4190 _ZTSN3Dtk6Widget19DGraphicsGlowEffectE@Base 2.0.11
4191 _ZTSN3Dtk6Widget19DImageButtonPrivateE@Base 2.0.11
4192 _ZTSN3Dtk6Widget19DInputDialogPrivateE@Base 2.0.11
4193 _ZTSN3Dtk6Widget19DPasswdEditAnimatedE@Base 2.0.11
4194 _ZTSN3Dtk6Widget19DSegmentedHighlightE@Base 2.0.11
4195 _ZTSN3Dtk6Widget19DStackWidgetPrivateE@Base 2.0.11
4196 _ZTSN3Dtk6Widget19DSvgRendererPrivateE@Base 2.0.11
4197 _ZTSN3Dtk6Widget19DVideoWidgetPrivateE@Base 2.0.11
4198 _ZTSN3Dtk6Widget19DWindowOptionButtonE@Base 2.0.11
4199 _ZTSN3Dtk6Widget20CrumbObjectInterfaceE@Base 2.0.11
4200 _ZTSN3Dtk6Widget20DIpv4LineEditPrivateE@Base 2.0.11
4201 _ZTSN3Dtk6Widget20DMPRISControlPrivateE@Base 2.0.11
4202 _ZTSN3Dtk6Widget20DPasswordEditPrivateE@Base 2.0.11
4203 _ZTSN3Dtk6Widget20DPictureSequenceViewE@Base 2.0.11
4204 _ZTSN3Dtk6Widget20DSeparatorHorizontalE@Base 2.0.11
4205 _ZTSN3Dtk6Widget20DStyleOptionLineEditE@Base 2.0.11
4206 _ZTSN3Dtk6Widget20DSwitchButtonPrivateE@Base 2.0.11
4207 _ZTSN3Dtk6Widget20DThemeManagerPrivateE@Base 2.0.11
4208 _ZTSN3Dtk6Widget20DTrashManagerPrivateE@Base 2.0.11
4209 _ZTSN3Dtk6Widget20DWindowManagerHelperE@Base 2.0.11
4210 _ZTSN3Dtk6Widget21DDoubleSpinBoxPrivateE@Base 2.0.11
4211 _ZTSN3Dtk6Widget21DForeignWindowPrivateE@Base 2.0.11
4212 _ZTSN3Dtk6Widget21DPageIndicatorPrivateE@Base 2.0.11
4213 _ZTSN3Dtk6Widget21DPlatformWindowHandleE@Base 2.0.11
4214 _ZTSN3Dtk6Widget21DRegionMonitorPrivateE@Base 2.0.11
4215 _ZTSN3Dtk6Widget21DWaterProgressPrivateE@Base 2.0.11
4216 _ZTSN3Dtk6Widget21DWindowManagerHelper_E@Base 2.0.11
4217 _ZTSN3Dtk6Widget22DAbstractDialogPrivateE@Base 2.0.11
4218 _ZTSN3Dtk6Widget22DArrowRectanglePrivateE@Base 2.0.11
4219 _ZTSN3Dtk6Widget22DCircleProgressPrivateE@Base 2.0.11
4220 _ZTSN3Dtk6Widget22DSettingsWidgetFactoryE@Base 2.0.11
4221 _ZTSN3Dtk6Widget22DSimpleListViewPrivateE@Base 2.0.11
4222 _ZTSN3Dtk6Widget23DFileChooserEditPrivateE@Base 2.0.11
4223 _ZTSN3Dtk6Widget23DWindowMaxButtonPrivateE@Base 2.0.11
4224 _ZTSN3Dtk6Widget24DBlurEffectWidgetPrivateE@Base 2.0.11
4225 _ZTSN3Dtk6Widget24DBorderlessWidgetPrivateE@Base 2.0.11
4226 _ZTSN3Dtk6Widget24DBorderlessWindowPrivateE@Base 2.0.11
4227 _ZTSN3Dtk6Widget24DClipEffectWidgetPrivateE@Base 2.0.11
4228 _ZTSN3Dtk6Widget24DFileIconProviderPrivateE@Base 2.0.11
4229 _ZTSN3Dtk6Widget24DLoadingIndicatorPrivateE@Base 2.0.11
4230 _ZTSN3Dtk6Widget24DSegmentedControlPrivateE@Base 2.0.11
4231 _ZTSN3Dtk6Widget25DStyleOptionSuggestButtonE@Base 2.0.11
4232 _ZTSN3Dtk6Widget25DThumbnailProviderPrivateE@Base 2.0.11
4233 _ZTSN3Dtk6Widget26DGraphicsClipEffectPrivateE@Base 2.0.11
4234 _ZTSN3Dtk6Widget26DPasswdEditAnimatedPrivateE@Base 2.0.11
4235 _ZTSN3Dtk6Widget26DThemeManagerStaticPrivateE@Base 2.0.11
4236 _ZTSN3Dtk6Widget27DPictureSequenceViewPrivateE@Base 2.0.11
4237 _ZTSN3Dtk6Widget27DSlideStackWidgetTransitionE@Base 2.0.11
4238 _ZTSN3Dtk6Widget27DWindowManagerHelperPrivateE@Base 2.0.11
4239 _ZTSN3Dtk6Widget29DFileThumbnailProviderPrivateE@Base 2.0.11
4240 _ZTSN3Dtk6Widget30DAbstractStackWidgetTransitionE@Base 2.0.11
4241 _ZTSN3Dtk6Widget37DAbstractStackWidgetTransitionPrivateE@Base 2.0.11
4242 _ZTSN3Dtk6Widget6DLabelE@Base 2.0.11
4243 _ZTSN3Dtk6Widget6DToastE@Base 2.0.11
4244 _ZTSN3Dtk6Widget7ContentE@Base 2.0.11
4245 _ZTSN3Dtk6Widget7DDialogE@Base 2.0.11
4246 _ZTSN3Dtk6Widget7DOptionE@Base 2.0.11
4247 _ZTSN3Dtk6Widget7DSliderE@Base 2.0.11
4248 _ZTSN3Dtk6Widget7DTabBarE@Base 2.0.11
4249 _ZTSN3Dtk6Widget8DSpinBoxE@Base 2.0.11
4250 _ZTSN3Dtk6Widget8DSpinnerE@Base 2.0.11
4251 _ZTSN3Dtk6Widget9DBaseLineE@Base 2.0.11
4252 _ZTSN3Dtk6Widget9DLineEditE@Base 2.0.11
4253 _ZTSN3Dtk6Widget9DListViewE@Base 2.0.11
4254 _ZTSN3Dtk6Widget9DTextEditE@Base 2.0.11
4255 _ZTSN3Dtk6Widget9DTitlebarE@Base 2.0.11
4256 _ZTSPFP7QWidgetP7QObjectE@Base 2.0.11
4257 _ZTV11ButtonGroup@Base 2.0.11
4258 _ZTV12ContentTitle@Base 2.0.11
4259 _ZTV12DThemeHelper@Base 2.0.11
4260 _ZTV12ShortcutEdit@Base 2.0.11
4261 _ZTV13DBusInterface@Base 2.0.11
4262 _ZTV13DMPRISMonitor@Base 2.0.11
4263 _ZTV16QFutureInterfaceIbE@Base 2.0.11
4264 _ZTV16QFutureInterfaceIvE@Base 2.0.11
4265 _ZTV18NavigationDelegate@Base 2.0.11
4266 _ZTV26StartupNotificationMonitor@Base 2.0.11
4267 _ZTV29StartupNotificationMonitorSub@Base 2.0.11
4268 _ZTV8ComboBox@Base 2.0.11
4269 _ZTV9DBusMPRIS@Base 2.0.11
4270 _ZTVN12QtConcurrent19RunFunctionTaskBaseIbEE@Base 2.0.11
4271 _ZTVN12QtConcurrent19RunFunctionTaskBaseIvEE@Base 2.0.11
4272 _ZTVN12QtConcurrent32StoredMemberFunctionPointerCall0Ib16QSystemSemaphoreEE@Base 2.0.11
4273 _ZTVN3Dtk6Widget10DBoxWidgetE@Base 2.0.11
4274 _ZTVN3Dtk6Widget10DCrumbEditE@Base 2.0.11
4275 _ZTVN3Dtk6Widget10DScrollBarE@Base 2.0.11
4276 _ZTVN3Dtk6Widget10LoadSliderE@Base 2.0.11
4277 _ZTVN3Dtk6Widget10NavigationE@Base 2.0.11
4278 _ZTVN3Dtk6Widget11DBaseButtonE@Base 2.0.11
4279 _ZTVN3Dtk6Widget11DBaseExpandE@Base 2.0.11
4280 _ZTVN3Dtk6Widget11DButtonListE@Base 2.0.11
4281 _ZTVN3Dtk6Widget11DFileDialogE@Base 2.0.11
4282 _ZTVN3Dtk6Widget11DFlowLayoutE@Base 2.0.11
4283 _ZTVN3Dtk6Widget11DHBoxWidgetE@Base 2.0.11
4284 _ZTVN3Dtk6Widget11DHeaderLineE@Base 2.0.11
4285 _ZTVN3Dtk6Widget11DIconButtonE@Base 2.0.11
4286 _ZTVN3Dtk6Widget11DLinkButtonE@Base 2.0.11
4287 _ZTVN3Dtk6Widget11DListWidgetE@Base 2.0.11
4288 _ZTVN3Dtk6Widget11DMainWindowE@Base 2.0.11
4289 _ZTVN3Dtk6Widget11DOptionListE@Base 2.0.11
4290 _ZTVN3Dtk6Widget11DPushButtonE@Base 2.0.11
4291 _ZTVN3Dtk6Widget11DScrollAreaE@Base 2.0.11
4292 _ZTVN3Dtk6Widget11DSearchEditE@Base 2.0.11
4293 _ZTVN3Dtk6Widget11DTextButtonE@Base 2.0.11
4294 _ZTVN3Dtk6Widget11DTickEffectE@Base 2.0.11
4295 _ZTVN3Dtk6Widget11DVBoxWidgetE@Base 2.0.11
4296 _ZTVN3Dtk6Widget12DAboutDialogE@Base 2.0.11
4297 _ZTVN3Dtk6Widget12DAnchorsBaseE@Base 2.0.11
4298 _ZTVN3Dtk6Widget12DApplicationE@Base 2.0.11
4299 _ZTVN3Dtk6Widget12DArrowButtonE@Base 2.0.11
4300 _ZTVN3Dtk6Widget12DExpandGroupE@Base 2.0.11
4301 _ZTVN3Dtk6Widget12DImageButtonE@Base 2.0.11
4302 _ZTVN3Dtk6Widget12DInputDialogE@Base 2.0.11
4303 _ZTVN3Dtk6Widget12DStackWidgetE@Base 2.0.11
4304 _ZTVN3Dtk6Widget12DStyleOptionE@Base 2.0.11
4305 _ZTVN3Dtk6Widget12DSvgRendererE@Base 2.0.11
4306 _ZTVN3Dtk6Widget12DVideoWidgetE@Base 2.0.11
4307 _ZTVN3Dtk6Widget12DialogButtonE@Base 2.0.11
4308 _ZTVN3Dtk6Widget13ContentLoaderE@Base 2.0.11
4309 _ZTVN3Dtk6Widget13DIpv4LineEditE@Base 2.0.11
4310 _ZTVN3Dtk6Widget13DMPRISControlE@Base 2.0.11
4311 _ZTVN3Dtk6Widget13DPasswordEditE@Base 2.0.11
4312 _ZTVN3Dtk6Widget13DShortcutEditE@Base 2.0.11
4313 _ZTVN3Dtk6Widget13DSwitchButtonE@Base 2.0.11
4314 _ZTVN3Dtk6Widget13DThemeManagerE@Base 2.0.11
4315 _ZTVN3Dtk6Widget13DToastPrivateE@Base 2.0.11
4316 _ZTVN3Dtk6Widget13DTrashManagerE@Base 2.0.11
4317 _ZTVN3Dtk6Widget14DDialogPrivateE@Base 2.0.11
4318 _ZTVN3Dtk6Widget14DDoubleSpinBoxE@Base 2.0.11
4319 _ZTVN3Dtk6Widget14DForeignWindowE@Base 2.0.11
4320 _ZTVN3Dtk6Widget14DOptionPrivateE@Base 2.0.11
4321 _ZTVN3Dtk6Widget14DPageIndicatorE@Base 2.0.11
4322 _ZTVN3Dtk6Widget14DRegionMonitorE@Base 2.0.11
4323 _ZTVN3Dtk6Widget14DSuggestButtonE@Base 2.0.11
4324 _ZTVN3Dtk6Widget14DTabBarPrivate10FullWidgetE@Base 2.0.11
4325 _ZTVN3Dtk6Widget14DTabBarPrivate15TabBarAnimationE@Base 2.0.11
4326 _ZTVN3Dtk6Widget14DTabBarPrivateE@Base 2.0.11
4327 _ZTVN3Dtk6Widget14DTrashManager_E@Base 2.0.11
4328 _ZTVN3Dtk6Widget14DWaterProgressE@Base 2.0.11
4329 _ZTVN3Dtk6Widget15ArrowButtonIconE@Base 2.0.11
4330 _ZTVN3Dtk6Widget15ArrowHeaderLineE@Base 2.0.11
4331 _ZTVN3Dtk6Widget15DAbstractDialogE@Base 2.0.11
4332 _ZTVN3Dtk6Widget15DArrowRectangleE@Base 2.0.11
4333 _ZTVN3Dtk6Widget15DCircleProgressE@Base 2.0.11
4334 _ZTVN3Dtk6Widget15DEnhancedWidgetE@Base 2.0.11
4335 _ZTVN3Dtk6Widget15DSettingsDialogE@Base 2.0.11
4336 _ZTVN3Dtk6Widget15DSimpleListItemE@Base 2.0.11
4337 _ZTVN3Dtk6Widget15DSimpleListViewE@Base 2.0.11
4338 _ZTVN3Dtk6Widget15DSpinBoxPrivateE@Base 2.0.11
4339 _ZTVN3Dtk6Widget15DSpinnerPrivateE@Base 2.0.11
4340 _ZTVN3Dtk6Widget15FilterMouseMoveE@Base 2.0.11
4341 _ZTVN3Dtk6Widget16DArrowLineExpandE@Base 2.0.11
4342 _ZTVN3Dtk6Widget16DFileChooserEditE@Base 2.0.11
4343 _ZTVN3Dtk6Widget16DKeyboardMonitorE@Base 2.0.11
4344 _ZTVN3Dtk6Widget16DLineEditPrivateE@Base 2.0.11
4345 _ZTVN3Dtk6Widget16DListViewPrivateE@Base 2.0.11
4346 _ZTVN3Dtk6Widget16DTabBarAddButtonE@Base 2.0.11
4347 _ZTVN3Dtk6Widget16DTextEditPrivateE@Base 2.0.11
4348 _ZTVN3Dtk6Widget16DTitlebarPrivateE@Base 2.0.11
4349 _ZTVN3Dtk6Widget16DWindowMaxButtonE@Base 2.0.11
4350 _ZTVN3Dtk6Widget16DWindowMinButtonE@Base 2.0.11
4351 _ZTVN3Dtk6Widget16VideoFormatProxyE@Base 2.0.11
4352 _ZTVN3Dtk6Widget17DBlurEffectWidgetE@Base 2.0.11
4353 _ZTVN3Dtk6Widget17DBorderlessWidgetE@Base 2.0.11
4354 _ZTVN3Dtk6Widget17DBorderlessWindowE@Base 2.0.11
4355 _ZTVN3Dtk6Widget17DBoxWidgetPrivateE@Base 2.0.11
4356 _ZTVN3Dtk6Widget17DClipEffectWidgetE@Base 2.0.11
4357 _ZTVN3Dtk6Widget17DCrumbEditPrivateE@Base 2.0.11
4358 _ZTVN3Dtk6Widget17DFileIconProviderE@Base 2.0.11
4359 _ZTVN3Dtk6Widget17DLoadingIndicatorE@Base 2.0.11
4360 _ZTVN3Dtk6Widget17DMovableTabWidgetE@Base 2.0.11
4361 _ZTVN3Dtk6Widget17DScrollBarPrivateE@Base 2.0.11
4362 _ZTVN3Dtk6Widget17DSegmentedControlE@Base 2.0.11
4363 _ZTVN3Dtk6Widget17DSwitchHeaderLineE@Base 2.0.11
4364 _ZTVN3Dtk6Widget17DSwitchLineExpandE@Base 2.0.11
4365 _ZTVN3Dtk6Widget17DVariantListModelE@Base 2.0.11
4366 _ZTVN3Dtk6Widget18DFlowLayoutPrivateE@Base 2.0.11
4367 _ZTVN3Dtk6Widget18DListWidgetPrivateE@Base 2.0.11
4368 _ZTVN3Dtk6Widget18DMainWindowPrivateE@Base 2.0.11
4369 _ZTVN3Dtk6Widget18DOptionListPrivateE@Base 2.0.11
4370 _ZTVN3Dtk6Widget18DPushButtonPrivateE@Base 2.0.11
4371 _ZTVN3Dtk6Widget18DScrollAreaPrivateE@Base 2.0.11
4372 _ZTVN3Dtk6Widget18DSeparatorVerticalE@Base 2.0.11
4373 _ZTVN3Dtk6Widget18DShortcutEditLabelE@Base 2.0.11
4374 _ZTVN3Dtk6Widget18DThumbnailProviderE@Base 2.0.11
4375 _ZTVN3Dtk6Widget18DTickEffectPrivateE@Base 2.0.11
4376 _ZTVN3Dtk6Widget18DWindowCloseButtonE@Base 2.0.11
4377 _ZTVN3Dtk6Widget19DAboutDialogPrivateE@Base 2.0.11
4378 _ZTVN3Dtk6Widget19DApplicationPrivateE@Base 2.0.11
4379 _ZTVN3Dtk6Widget19DGraphicsClipEffectE@Base 2.0.11
4380 _ZTVN3Dtk6Widget19DGraphicsGlowEffectE@Base 2.0.11
4381 _ZTVN3Dtk6Widget19DImageButtonPrivateE@Base 2.0.11
4382 _ZTVN3Dtk6Widget19DInputDialogPrivateE@Base 2.0.11
4383 _ZTVN3Dtk6Widget19DPasswdEditAnimatedE@Base 2.0.11
4384 _ZTVN3Dtk6Widget19DSegmentedHighlightE@Base 2.0.11
4385 _ZTVN3Dtk6Widget19DStackWidgetPrivateE@Base 2.0.11
4386 _ZTVN3Dtk6Widget19DSvgRendererPrivateE@Base 2.0.11
4387 _ZTVN3Dtk6Widget19DVideoWidgetPrivateE@Base 2.0.11
4388 _ZTVN3Dtk6Widget19DWindowOptionButtonE@Base 2.0.11
4389 _ZTVN3Dtk6Widget20CrumbObjectInterfaceE@Base 2.0.11
4390 _ZTVN3Dtk6Widget20DIpv4LineEditPrivateE@Base 2.0.11
4391 _ZTVN3Dtk6Widget20DMPRISControlPrivateE@Base 2.0.11
4392 _ZTVN3Dtk6Widget20DPasswordEditPrivateE@Base 2.0.11
4393 _ZTVN3Dtk6Widget20DPictureSequenceViewE@Base 2.0.11
4394 _ZTVN3Dtk6Widget20DSeparatorHorizontalE@Base 2.0.11
4395 _ZTVN3Dtk6Widget20DStyleOptionLineEditE@Base 2.0.11
4396 _ZTVN3Dtk6Widget20DSwitchButtonPrivateE@Base 2.0.11
4397 _ZTVN3Dtk6Widget20DThemeManagerPrivateE@Base 2.0.11
4398 _ZTVN3Dtk6Widget20DTrashManagerPrivateE@Base 2.0.11
4399 _ZTVN3Dtk6Widget20DWindowManagerHelperE@Base 2.0.11
4400 _ZTVN3Dtk6Widget21DDoubleSpinBoxPrivateE@Base 2.0.11
4401 _ZTVN3Dtk6Widget21DForeignWindowPrivateE@Base 2.0.11
4402 _ZTVN3Dtk6Widget21DPageIndicatorPrivateE@Base 2.0.11
4403 _ZTVN3Dtk6Widget21DPlatformWindowHandleE@Base 2.0.11
4404 _ZTVN3Dtk6Widget21DRegionMonitorPrivateE@Base 2.0.11
4405 _ZTVN3Dtk6Widget21DWaterProgressPrivateE@Base 2.0.11
4406 _ZTVN3Dtk6Widget21DWindowManagerHelper_E@Base 2.0.11
4407 _ZTVN3Dtk6Widget22DAbstractDialogPrivateE@Base 2.0.11
4408 _ZTVN3Dtk6Widget22DArrowRectanglePrivateE@Base 2.0.11
4409 _ZTVN3Dtk6Widget22DCircleProgressPrivateE@Base 2.0.11
4410 _ZTVN3Dtk6Widget22DSettingsWidgetFactoryE@Base 2.0.11
4411 _ZTVN3Dtk6Widget22DSimpleListViewPrivateE@Base 2.0.11
4412 _ZTVN3Dtk6Widget23DFileChooserEditPrivateE@Base 2.0.11
4413 _ZTVN3Dtk6Widget23DWindowMaxButtonPrivateE@Base 2.0.11
4414 _ZTVN3Dtk6Widget24DBlurEffectWidgetPrivateE@Base 2.0.11
4415 _ZTVN3Dtk6Widget24DBorderlessWidgetPrivateE@Base 2.0.11
4416 _ZTVN3Dtk6Widget24DBorderlessWindowPrivateE@Base 2.0.11
4417 _ZTVN3Dtk6Widget24DClipEffectWidgetPrivateE@Base 2.0.11
4418 _ZTVN3Dtk6Widget24DFileIconProviderPrivateE@Base 2.0.11
4419 _ZTVN3Dtk6Widget24DLoadingIndicatorPrivateE@Base 2.0.11
4420 _ZTVN3Dtk6Widget24DSegmentedControlPrivateE@Base 2.0.11
4421 _ZTVN3Dtk6Widget25DStyleOptionSuggestButtonE@Base 2.0.11
4422 _ZTVN3Dtk6Widget25DThumbnailProviderPrivateE@Base 2.0.11
4423 _ZTVN3Dtk6Widget26DGraphicsClipEffectPrivateE@Base 2.0.11
4424 _ZTVN3Dtk6Widget26DPasswdEditAnimatedPrivateE@Base 2.0.11
4425 _ZTVN3Dtk6Widget26DThemeManagerStaticPrivateE@Base 2.0.11
4426 _ZTVN3Dtk6Widget27DPictureSequenceViewPrivateE@Base 2.0.11
4427 _ZTVN3Dtk6Widget27DSlideStackWidgetTransitionE@Base 2.0.11
4428 _ZTVN3Dtk6Widget27DWindowManagerHelperPrivateE@Base 2.0.11
4429 _ZTVN3Dtk6Widget29DFileThumbnailProviderPrivateE@Base 2.0.11
4430 _ZTVN3Dtk6Widget30DAbstractStackWidgetTransitionE@Base 2.0.11
4431 _ZTVN3Dtk6Widget37DAbstractStackWidgetTransitionPrivateE@Base 2.0.11
4432 _ZTVN3Dtk6Widget6DLabelE@Base 2.0.11
4433 _ZTVN3Dtk6Widget6DToastE@Base 2.0.11
4434 _ZTVN3Dtk6Widget7ContentE@Base 2.0.11
4435 _ZTVN3Dtk6Widget7DDialogE@Base 2.0.11
4436 _ZTVN3Dtk6Widget7DOptionE@Base 2.0.11
4437 _ZTVN3Dtk6Widget7DSliderE@Base 2.0.11
4438 _ZTVN3Dtk6Widget7DTabBarE@Base 2.0.11
4439 _ZTVN3Dtk6Widget8DSpinBoxE@Base 2.0.11
4440 _ZTVN3Dtk6Widget8DSpinnerE@Base 2.0.11
4441 _ZTVN3Dtk6Widget9DBaseLineE@Base 2.0.11
4442 _ZTVN3Dtk6Widget9DLineEditE@Base 2.0.11
4443 _ZTVN3Dtk6Widget9DListViewE@Base 2.0.11
4444 _ZTVN3Dtk6Widget9DTextEditE@Base 2.0.11
4445 _ZTVN3Dtk6Widget9DTitlebarE@Base 2.0.11
4446 (optional=templinst)_ZZN11QMetaTypeIdI12QDBusMessageE14qt_metatype_idEvE11metatype_id@Base 2.0.11
4447 (optional=templinst)_ZZN11QMetaTypeIdI12QPainterPathE14qt_metatype_idEvE11metatype_id@Base 2.0.11
4448 (optional=templinst)_ZZN11QMetaTypeIdI13QDBusArgumentE14qt_metatype_idEvE11metatype_id@Base 2.0.11
4449 (optional=templinst)_ZZN11QMetaTypeIdI15QDBusObjectPathE14qt_metatype_idEvE11metatype_id@Base 2.0.11
4450 (optional=templinst)_ZZN11QMetaTypeIdI5QListI12QPainterPathEE14qt_metatype_idEvE11metatype_id@Base 2.0.11
4451 (optional=templinst)_ZZN11QMetaTypeIdI5QListI5QIconEE14qt_metatype_idEvE11metatype_id@Base 2.0.11
4452 (optional=templinst)_ZZN11QMetaTypeIdI5QListI7QRegExpEE14qt_metatype_idEvE11metatype_id@Base 2.0.11
4453 (optional=templinst)_ZZN11QMetaTypeIdI5QListIP7QWidgetEE14qt_metatype_idEvE11metatype_id@Base 2.0.11
4454 (optional=templinst)_ZZN11QMetaTypeIdI5QListIPN3Dtk6Widget15DSimpleListItemEEE14qt_metatype_idEvE11metatype_id@Base 2.0.11
4455 (optional=templinst)_ZZN11QMetaTypeIdI5QListIbEE14qt_metatype_idEvE11metatype_id@Base 2.0.11
4456 (optional=templinst)_ZZN11QMetaTypeIdI7QVectorIjEE14qt_metatype_idEvE11metatype_id@Base 2.0.11
4457 (optional=templinst)_ZZN11QMetaTypeIdI8QMarginsE14qt_metatype_idEvE11metatype_id@Base 2.0.11
4458 (optional=templinst)_ZZN11QMetaTypeIdIN17QtMetaTypePrivate23QSequentialIterableImplEE14qt_metatype_idEvE11metatype_id@Base 2.0.11
4459 (optional=templinst)_ZZN11QMetaTypeIdIN17QtMetaTypePrivate24QAssociativeIterableImplEE14qt_metatype_idEvE11metatype_id@Base 2.0.11
4460 (optional=templinst)_ZZN18QMetaTypeIdQObjectIN2Qt10DropActionELi16EE14qt_metatype_idEvE11metatype_id@Base 2.0.11
4461 (optional=templinst)_ZZN18QMetaTypeIdQObjectIP7QWidgetLi8EE14qt_metatype_idEvE11metatype_id@Base 2.0.11
4462 (optional=templinst)_ZZN18QMetaTypeIdQObjectIPN3Dtk4Core9DSettingsELi8EE14qt_metatype_idEvE11metatype_id@Base 2.0.11
4463 (optional=templinst)_ZZN18QMetaTypeIdQObjectIPN3Dtk6Widget12DAnchorsBaseELi8EE14qt_metatype_idEvE11metatype_id@Base 2.0.11
4464 (optional=templinst)_ZZN18QMetaTypeIdQObjectIPN3Dtk6Widget15DSimpleListItemELi8EE14qt_metatype_idEvE11metatype_id@Base 2.0.11
4465 _ZZN3Dtk6Widget20DThemeManagerPrivate14registerWidgetEP7QWidgetRK7QStringRK11QStringListENKUlS3_S6_S6_E_clES3_S6_S6_@Base 2.0.11
4466 (optional=templinst)_ZZN9QtPrivate19ValueTypeIsMetaTypeI5QListI12QPainterPathELb1EE17registerConverterEiE1f@Base 2.0.11
4467 (optional=templinst)_ZZN9QtPrivate19ValueTypeIsMetaTypeI5QListI5QIconELb1EE17registerConverterEiE1f@Base 2.0.11
4468 (optional=templinst)_ZZN9QtPrivate19ValueTypeIsMetaTypeI5QListI7QRegExpELb1EE17registerConverterEiE1f@Base 2.0.11
4469 (optional=templinst)_ZZN9QtPrivate19ValueTypeIsMetaTypeI5QListIP7QWidgetELb1EE17registerConverterEiE1f@Base 2.0.11
4470 (optional=templinst)_ZZN9QtPrivate19ValueTypeIsMetaTypeI5QListIPN3Dtk6Widget15DSimpleListItemEELb1EE17registerConverterEiE1f@Base 2.0.11
4471 (optional=templinst)_ZZN9QtPrivate19ValueTypeIsMetaTypeI5QListIbELb1EE17registerConverterEiE1f@Base 2.0.11
4472 (optional=templinst)_ZZN9QtPrivate19ValueTypeIsMetaTypeI7QVectorIjELb1EE17registerConverterEiE1f@Base 2.0.11
4473 _ZZZN13DBusInterface11ReleaseNameERK7QStringENKUlvE_clEvE15qstring_literal@Base 2.0.11
4474 _ZZZN13DBusInterface11RemoveMatchERK7QStringENKUlvE_clEvE15qstring_literal@Base 2.0.11
4475 _ZZZN13DBusInterface11RequestNameERK7QStringjENKUlvE_clEvE15qstring_literal@Base 2.0.11
4476 _ZZZN13DBusInterface12GetNameOwnerERK7QStringENKUlvE_clEvE15qstring_literal@Base 2.0.11
4477 _ZZZN13DBusInterface12NameHasOwnerERK7QStringENKUlvE_clEvE15qstring_literal@Base 2.0.11
4478 _ZZZN13DBusInterface12ReloadConfigEvENKUlvE_clEvE15qstring_literal@Base 2.0.11
4479 _ZZZN13DBusInterface16ListQueuedOwnersERK7QStringENKUlvE_clEvE15qstring_literal@Base 2.0.11
4480 _ZZZN13DBusInterface18StartServiceByNameERK7QStringjENKUlvE_clEvE15qstring_literal@Base 2.0.11
4481 _ZZZN13DBusInterface20ListActivatableNamesEvENKUlvE_clEvE15qstring_literal@Base 2.0.11
4482 _ZZZN13DBusInterface21GetConnectionUnixUserERK7QStringENKUlvE_clEvE15qstring_literal@Base 2.0.11
4483 _ZZZN13DBusInterface22GetAdtAuditSessionDataERK7QStringENKUlvE_clEvE15qstring_literal@Base 2.0.11
4484 _ZZZN13DBusInterface26GetConnectionUnixProcessIDERK7QStringENKUlvE_clEvE15qstring_literal@Base 2.0.11
4485 _ZZZN13DBusInterface35GetConnectionSELinuxSecurityContextERK7QStringENKUlvE_clEvE15qstring_literal@Base 2.0.11
4486 _ZZZN13DBusInterface5GetIdEvENKUlvE_clEvE15qstring_literal@Base 2.0.11
4487 _ZZZN13DBusInterface5HelloEvENKUlvE_clEvE15qstring_literal@Base 2.0.11
4488 _ZZZN13DBusInterface8AddMatchERK7QStringENKUlvE_clEvE15qstring_literal@Base 2.0.11
4489 _ZZZN13DBusInterface9ListNamesEvENKUlvE_clEvE15qstring_literal@Base 2.0.11
4490 _ZZZN15__XEventMonitor12RegisterAreaEiiiiiENKUlvE_clEvE15qstring_literal@Base 2.0.11
4491 _ZZZN15__XEventMonitor14UnregisterAreaERK7QStringENKUlvE_clEvE15qstring_literal@Base 2.0.11
4492 _ZZZN15__XEventMonitor18RegisterFullScreenEvENKUlvE_clEvE15qstring_literal@Base 2.0.11
4493 _ZZZN9DBusMPRIS11SetPositionERK15QDBusObjectPathxENKUlvE_clEvE15qstring_literal@Base 2.0.11
4494 _ZZZN9DBusMPRIS4NextEvENKUlvE_clEvE15qstring_literal@Base 2.0.11
4495 _ZZZN9DBusMPRIS4PlayEvENKUlvE_clEvE15qstring_literal@Base 2.0.11
4496 _ZZZN9DBusMPRIS4SeekExENKUlvE_clEvE15qstring_literal@Base 2.0.11
4497 _ZZZN9DBusMPRIS4StopEvENKUlvE_clEvE15qstring_literal@Base 2.0.11
4498 _ZZZN9DBusMPRIS5PauseEvENKUlvE_clEvE15qstring_literal@Base 2.0.11
4499 _ZZZN9DBusMPRIS7OpenUriERK7QStringENKUlvE_clEvE15qstring_literal@Base 2.0.11
4500 _ZZZN9DBusMPRIS8PreviousEvENKUlvE_clEvE15qstring_literal@Base 2.0.11
4501 _ZZZN9DBusMPRIS9PlayPauseEvENKUlvE_clEvE15qstring_literal@Base 2.0.11
4502 _Zls6QDebugRKN3Dtk6Widget21DPlatformWindowHandle10WMBlurAreaE@Base 2.0.11
4503 (c++)"non-virtual thunk to ButtonGroup::~ButtonGroup()@Base" 2.0.11
4504 (c++)"non-virtual thunk to ComboBox::~ComboBox()@Base" 2.0.11
4505 (c++)"non-virtual thunk to ContentTitle::~ContentTitle()@Base" 2.0.11
4506 (c++)"non-virtual thunk to Dtk::Widget::ArrowButtonIcon::~ArrowButtonIcon()@Base" 2.0.11
4507 (c++)"non-virtual thunk to Dtk::Widget::ArrowHeaderLine::~ArrowHeaderLine()@Base" 2.0.11
4508 (c++)"non-virtual thunk to Dtk::Widget::Content::~Content()@Base" 2.0.11
4509 (c++)"non-virtual thunk to Dtk::Widget::ContentLoader::~ContentLoader()@Base" 2.0.11
4510 (c++)"non-virtual thunk to Dtk::Widget::CrumbObjectInterface::drawObject(QPainter*, QRectF const&, QTextDocument*, int, QTextFormat const&)@Base" 2.0.11
4511 (c++)"non-virtual thunk to Dtk::Widget::CrumbObjectInterface::intrinsicSize(QTextDocument*, int, QTextFormat const&)@Base" 2.0.11
4512 (c++)"non-virtual thunk to Dtk::Widget::CrumbObjectInterface::~CrumbObjectInterface()@Base" 2.0.11
4513 (c++)"non-virtual thunk to Dtk::Widget::DAboutDialog::~DAboutDialog()@Base" 2.0.11
4514 (c++)"non-virtual thunk to Dtk::Widget::DAbstractDialog::~DAbstractDialog()@Base" 2.0.11
4515 (c++)"non-virtual thunk to Dtk::Widget::DApplication::~DApplication()@Base" 2.0.11
4516 (c++)"non-virtual thunk to Dtk::Widget::DArrowButton::~DArrowButton()@Base" 2.0.11
4517 (c++)"non-virtual thunk to Dtk::Widget::DArrowLineExpand::~DArrowLineExpand()@Base" 2.0.11
4518 (c++)"non-virtual thunk to Dtk::Widget::DArrowRectangle::~DArrowRectangle()@Base" 2.0.11
4519 (c++)"non-virtual thunk to Dtk::Widget::DBaseButton::~DBaseButton()@Base" 2.0.11
4520 (c++)"non-virtual thunk to Dtk::Widget::DBaseExpand::~DBaseExpand()@Base" 2.0.11
4521 (c++)"non-virtual thunk to Dtk::Widget::DBaseLine::~DBaseLine()@Base" 2.0.11
4522 (c++)"non-virtual thunk to Dtk::Widget::DBlurEffectWidget::~DBlurEffectWidget()@Base" 2.0.11
4523 (c++)"non-virtual thunk to Dtk::Widget::DBorderlessWidget::~DBorderlessWidget()@Base" 2.0.11
4524 (c++)"non-virtual thunk to Dtk::Widget::DBorderlessWindow::~DBorderlessWindow()@Base" 2.0.11
4525 (c++)"non-virtual thunk to Dtk::Widget::DBoxWidget::~DBoxWidget()@Base" 2.0.11
4526 (c++)"non-virtual thunk to Dtk::Widget::DButtonList::~DButtonList()@Base" 2.0.11
4527 (c++)"non-virtual thunk to Dtk::Widget::DCircleProgress::~DCircleProgress()@Base" 2.0.11
4528 (c++)"non-virtual thunk to Dtk::Widget::DClipEffectWidget::~DClipEffectWidget()@Base" 2.0.11
4529 (c++)"non-virtual thunk to Dtk::Widget::DCrumbEdit::~DCrumbEdit()@Base" 2.0.11
4530 (c++)"non-virtual thunk to Dtk::Widget::DDialog::~DDialog()@Base" 2.0.11
4531 (c++)"non-virtual thunk to Dtk::Widget::DDoubleSpinBox::~DDoubleSpinBox()@Base" 2.0.11
4532 (c++)"non-virtual thunk to Dtk::Widget::DFileChooserEdit::~DFileChooserEdit()@Base" 2.0.11
4533 (c++)"non-virtual thunk to Dtk::Widget::DFileDialog::~DFileDialog()@Base" 2.0.11
4534 (c++)"non-virtual thunk to Dtk::Widget::DFileIconProvider::~DFileIconProvider()@Base" 2.0.11
4535 (c++)"non-virtual thunk to Dtk::Widget::DFileThumbnailProviderPrivate::~DFileThumbnailProviderPrivate()@Base" 2.0.11
4536 (c++)"non-virtual thunk to Dtk::Widget::DFlowLayout::expandingDirections() const@Base" 2.0.11
4537 (c++)"non-virtual thunk to Dtk::Widget::DFlowLayout::hasHeightForWidth() const@Base" 2.0.11
4538 (c++)"non-virtual thunk to Dtk::Widget::DFlowLayout::heightForWidth(int) const@Base" 2.0.11
4539 (c++)"non-virtual thunk to Dtk::Widget::DFlowLayout::minimumSize() const@Base" 2.0.11
4540 (c++)"non-virtual thunk to Dtk::Widget::DFlowLayout::setGeometry(QRect const&)@Base" 2.0.11
4541 (c++)"non-virtual thunk to Dtk::Widget::DFlowLayout::sizeHint() const@Base" 2.0.11
4542 (c++)"non-virtual thunk to Dtk::Widget::DFlowLayout::~DFlowLayout()@Base" 2.0.11
4543 (c++)"non-virtual thunk to Dtk::Widget::DForeignWindow::~DForeignWindow()@Base" 2.0.11
4544 (c++)"non-virtual thunk to Dtk::Widget::DGraphicsClipEffect::~DGraphicsClipEffect()@Base" 2.0.11
4545 (c++)"non-virtual thunk to Dtk::Widget::DHBoxWidget::~DHBoxWidget()@Base" 2.0.11
4546 (c++)"non-virtual thunk to Dtk::Widget::DHeaderLine::~DHeaderLine()@Base" 2.0.11
4547 (c++)"non-virtual thunk to Dtk::Widget::DIconButton::~DIconButton()@Base" 2.0.11
4548 (c++)"non-virtual thunk to Dtk::Widget::DImageButton::~DImageButton()@Base" 2.0.11
4549 (c++)"non-virtual thunk to Dtk::Widget::DInputDialog::~DInputDialog()@Base" 2.0.11
4550 (c++)"non-virtual thunk to Dtk::Widget::DIpv4LineEdit::~DIpv4LineEdit()@Base" 2.0.11
4551 (c++)"non-virtual thunk to Dtk::Widget::DLabel::~DLabel()@Base" 2.0.11
4552 (c++)"non-virtual thunk to Dtk::Widget::DLineEdit::~DLineEdit()@Base" 2.0.11
4553 (c++)"non-virtual thunk to Dtk::Widget::DLinkButton::~DLinkButton()@Base" 2.0.11
4554 (c++)"non-virtual thunk to Dtk::Widget::DListView::~DListView()@Base" 2.0.11
4555 (c++)"non-virtual thunk to Dtk::Widget::DListWidget::~DListWidget()@Base" 2.0.11
4556 (c++)"non-virtual thunk to Dtk::Widget::DLoadingIndicator::~DLoadingIndicator()@Base" 2.0.11
4557 (c++)"non-virtual thunk to Dtk::Widget::DMPRISControl::~DMPRISControl()@Base" 2.0.11
4558 (c++)"non-virtual thunk to Dtk::Widget::DMainWindow::~DMainWindow()@Base" 2.0.11
4559 (c++)"non-virtual thunk to Dtk::Widget::DMovableTabWidget::~DMovableTabWidget()@Base" 2.0.11
4560 (c++)"non-virtual thunk to Dtk::Widget::DOption::~DOption()@Base" 2.0.11
4561 (c++)"non-virtual thunk to Dtk::Widget::DOptionList::~DOptionList()@Base" 2.0.11
4562 (c++)"non-virtual thunk to Dtk::Widget::DPageIndicator::~DPageIndicator()@Base" 2.0.11
4563 (c++)"non-virtual thunk to Dtk::Widget::DPasswdEditAnimated::~DPasswdEditAnimated()@Base" 2.0.11
4564 (c++)"non-virtual thunk to Dtk::Widget::DPasswordEdit::~DPasswordEdit()@Base" 2.0.11
4565 (c++)"non-virtual thunk to Dtk::Widget::DPictureSequenceView::~DPictureSequenceView()@Base" 2.0.11
4566 (c++)"non-virtual thunk to Dtk::Widget::DPushButton::~DPushButton()@Base" 2.0.11
4567 (c++)"non-virtual thunk to Dtk::Widget::DRegionMonitor::~DRegionMonitor()@Base" 2.0.11
4568 (c++)"non-virtual thunk to Dtk::Widget::DScrollArea::~DScrollArea()@Base" 2.0.11
4569 (c++)"non-virtual thunk to Dtk::Widget::DScrollBar::~DScrollBar()@Base" 2.0.11
4570 (c++)"non-virtual thunk to Dtk::Widget::DSearchEdit::~DSearchEdit()@Base" 2.0.11
4571 (c++)"non-virtual thunk to Dtk::Widget::DSegmentedControl::~DSegmentedControl()@Base" 2.0.11
4572 (c++)"non-virtual thunk to Dtk::Widget::DSegmentedHighlight::~DSegmentedHighlight()@Base" 2.0.11
4573 (c++)"non-virtual thunk to Dtk::Widget::DSeparatorHorizontal::~DSeparatorHorizontal()@Base" 2.0.11
4574 (c++)"non-virtual thunk to Dtk::Widget::DSeparatorVertical::~DSeparatorVertical()@Base" 2.0.11
4575 (c++)"non-virtual thunk to Dtk::Widget::DSettingsDialog::~DSettingsDialog()@Base" 2.0.11
4576 (c++)"non-virtual thunk to Dtk::Widget::DShortcutEdit::~DShortcutEdit()@Base" 2.0.11
4577 (c++)"non-virtual thunk to Dtk::Widget::DShortcutEditLabel::~DShortcutEditLabel()@Base" 2.0.11
4578 (c++)"non-virtual thunk to Dtk::Widget::DSimpleListView::~DSimpleListView()@Base" 2.0.11
4579 (c++)"non-virtual thunk to Dtk::Widget::DSlideStackWidgetTransition::~DSlideStackWidgetTransition()@Base" 2.0.11
4580 (c++)"non-virtual thunk to Dtk::Widget::DSlider::~DSlider()@Base" 2.0.11
4581 (c++)"non-virtual thunk to Dtk::Widget::DSpinBox::~DSpinBox()@Base" 2.0.11
4582 (c++)"non-virtual thunk to Dtk::Widget::DSpinner::~DSpinner()@Base" 2.0.11
4583 (c++)"non-virtual thunk to Dtk::Widget::DStackWidget::~DStackWidget()@Base" 2.0.11
4584 (c++)"non-virtual thunk to Dtk::Widget::DSuggestButton::~DSuggestButton()@Base" 2.0.11
4585 (c++)"non-virtual thunk to Dtk::Widget::DSvgRenderer::~DSvgRenderer()@Base" 2.0.11
4586 (c++)"non-virtual thunk to Dtk::Widget::DSwitchButton::~DSwitchButton()@Base" 2.0.11
4587 (c++)"non-virtual thunk to Dtk::Widget::DSwitchHeaderLine::~DSwitchHeaderLine()@Base" 2.0.11
4588 (c++)"non-virtual thunk to Dtk::Widget::DSwitchLineExpand::~DSwitchLineExpand()@Base" 2.0.11
4589 (c++)"non-virtual thunk to Dtk::Widget::DTabBar::~DTabBar()@Base" 2.0.11
4590 (c++)"non-virtual thunk to Dtk::Widget::DTabBarAddButton::~DTabBarAddButton()@Base" 2.0.11
4591 (c++)"non-virtual thunk to Dtk::Widget::DTabBarPrivate::FullWidget::~FullWidget()@Base" 2.0.11
4592 (c++)"non-virtual thunk to Dtk::Widget::DTabBarPrivate::~DTabBarPrivate()@Base" 2.0.11
4593 (c++)"non-virtual thunk to Dtk::Widget::DTextButton::~DTextButton()@Base" 2.0.11
4594 (c++)"non-virtual thunk to Dtk::Widget::DTextEdit::~DTextEdit()@Base" 2.0.11
4595 (c++)"non-virtual thunk to Dtk::Widget::DThemeManager::~DThemeManager()@Base" 2.0.11
4596 (c++)"non-virtual thunk to Dtk::Widget::DThemeManagerStaticPrivate::~DThemeManagerStaticPrivate()@Base" 2.0.11
4597 (c++)"non-virtual thunk to Dtk::Widget::DThumbnailProvider::~DThumbnailProvider()@Base" 2.0.11
4598 (c++)"non-virtual thunk to Dtk::Widget::DTickEffect::~DTickEffect()@Base" 2.0.11
4599 (c++)"non-virtual thunk to Dtk::Widget::DTitlebar::~DTitlebar()@Base" 2.0.11
4600 (c++)"non-virtual thunk to Dtk::Widget::DToast::~DToast()@Base" 2.0.11
4601 (c++)"non-virtual thunk to Dtk::Widget::DTrashManager::~DTrashManager()@Base" 2.0.11
4602 (c++)"non-virtual thunk to Dtk::Widget::DTrashManager_::~DTrashManager_()@Base" 2.0.11
4603 (c++)"non-virtual thunk to Dtk::Widget::DVBoxWidget::~DVBoxWidget()@Base" 2.0.11
4604 (c++)"non-virtual thunk to Dtk::Widget::DVideoWidget::~DVideoWidget()@Base" 2.0.11
4605 (c++)"non-virtual thunk to Dtk::Widget::DWaterProgress::~DWaterProgress()@Base" 2.0.11
4606 (c++)"non-virtual thunk to Dtk::Widget::DWindowCloseButton::~DWindowCloseButton()@Base" 2.0.11
4607 (c++)"non-virtual thunk to Dtk::Widget::DWindowManagerHelper::~DWindowManagerHelper()@Base" 2.0.11
4608 (c++)"non-virtual thunk to Dtk::Widget::DWindowManagerHelper_::~DWindowManagerHelper_()@Base" 2.0.11
4609 (c++)"non-virtual thunk to Dtk::Widget::DWindowMaxButton::~DWindowMaxButton()@Base" 2.0.11
4610 (c++)"non-virtual thunk to Dtk::Widget::DWindowMinButton::~DWindowMinButton()@Base" 2.0.11
4611 (c++)"non-virtual thunk to Dtk::Widget::DWindowOptionButton::~DWindowOptionButton()@Base" 2.0.11
4612 (c++)"non-virtual thunk to Dtk::Widget::DialogButton::~DialogButton()@Base" 2.0.11
4613 (c++)"non-virtual thunk to Dtk::Widget::LoadSlider::~LoadSlider()@Base" 2.0.11
4614 (c++)"non-virtual thunk to Dtk::Widget::Navigation::~Navigation()@Base" 2.0.11
4615 (c++)"non-virtual thunk to QWindow::size() const@Base" 2.0.11
4616 (c++)"non-virtual thunk to QtConcurrent::RunFunctionTask<bool>::run()@Base" 2.0.11
4617 (c++)"non-virtual thunk to QtConcurrent::RunFunctionTask<void>::run()@Base" 2.0.11
4618 (c++)"non-virtual thunk to QtConcurrent::RunFunctionTaskBase<bool>::run()@Base" 2.0.11
4619 (c++)"non-virtual thunk to QtConcurrent::RunFunctionTaskBase<void>::run()@Base" 2.0.11
4620 (c++)"non-virtual thunk to QtConcurrent::StoredMemberFunctionPointerCall0<bool, QSystemSemaphore>::~StoredMemberFunctionPointerCall0()@Base" 2.0.11
4621 (c++)"non-virtual thunk to ShortcutEdit::~ShortcutEdit()@Base" 2.0.11
4622 (c++)"non-virtual thunk to StartupNotificationMonitor::nativeEventFilter(QByteArray const&, void*, long*)@Base" 2.0.11
4623 (c++)"non-virtual thunk to StartupNotificationMonitor::~StartupNotificationMonitor()@Base" 2.0.11
4624 (c++)"non-virtual thunk to StartupNotificationMonitorSub::~StartupNotificationMonitorSub()@Base" 2.0.11
0 usr/lib/*/*/DWidget/bin/*
0 usr/lib/*/lib*.so.*
1 usr/share/*/DWidget/translations/*
0 usr/lib/*/lib*.so.*
1 #usr/lib/*/libmsc.so
2 usr/share/*/DWidget/translations/*
0 usr/lib/*/lib*.so.*
1 #usr/lib/*/libmsc.so
2 usr/share/*/DWidget/translations/*
2121 %:
2222 dh $@ --parallel
2323
24 override_dh_auto_configure:
25 dh_auto_configure -- LIB_INSTALL_DIR=/usr/lib/$(DEB_HOST_MULTIARCH)
26 override_dh_makeshlibs:
27 dh_makeshlibs -V
24 #override_dh_auto_configure:
25 # dh_auto_configure -- LIB_INSTALL_DIR=/usr/lib/$(DEB_HOST_MULTIARCH)
26 #override_dh_makeshlibs:
27 # dh_makeshlibs -V
2828
29 ifeq ($(DEB_BUILD_ARCH), sw_64)
30 override_dh_makeshlibs:
31 dh_makeshlibs -V -- -c0
32 endif
29 #ifeq ($(DEB_BUILD_ARCH), sw_64)
30 #override_dh_makeshlibs:
31 # dh_makeshlibs -V -- -c0
32 #endif
3333
34 ifeq ($(DEB_BUILD_ARCH), mips64el)
35 override_dh_makeshlibs:
36 dh_makeshlibs -V -- -c0
37 endif
34 #ifeq ($(DEB_BUILD_ARCH), mips64el)
35 #override_dh_makeshlibs:
36 # dh_makeshlibs -V -- -c0
37 #endif
3838
Binary diff not shown
Binary diff not shown
2020
2121 #include "dcircleprogress.h"
2222 #include "dwaterprogress.h"
23 #include "dcoloredprogressbar.h"
2324 #include "dslider.h"
2425
2526 BarTab::BarTab(QWidget *parent) : QFrame(parent)
2627 {
27 setStyleSheet("background-color:gray;");
28
2928 DTK_WIDGET_NAMESPACE::DCircleProgress *circleProgess = new DTK_WIDGET_NAMESPACE::DCircleProgress(this);
3029 circleProgess->setFixedSize(100, 100);
3130
4443 sliderSize->setFixedWidth(100);
4544 sliderSize->setFixedHeight(20);
4645
46 DTK_WIDGET_NAMESPACE::DColoredProgressBar *coloredpb = new DTK_WIDGET_NAMESPACE::DColoredProgressBar(this);
47 QLinearGradient lg(0, 0.5, 1, 0.5);
48 lg.setCoordinateMode(QGradient::CoordinateMode::ObjectBoundingMode);
49
50 lg.setColorAt(0, QColor(0xFF0080FF));
51 lg.setColorAt(1, QColor(0xFF06BEFD));
52 coloredpb->addThreshold(0, lg);
53
54 lg.setColorAt(0, QColor(0xFFF8AE2C));
55 lg.setColorAt(1, QColor(0xFFF8C366));
56 coloredpb->addThreshold(70, lg);
57
58 lg.setColorAt(0, QColor(0xFFFF6170));
59 lg.setColorAt(1, QColor(0xFFFF8C99));
60 coloredpb->addThreshold(90, lg);
61
4762 auto layout = new QVBoxLayout(this);
4863 auto sliderLayout = new QHBoxLayout;
4964 sliderLayout->addWidget(slider, 0, Qt::AlignHCenter | Qt::AlignTop);
5267 auto progressLayout = new QHBoxLayout;
5368 progressLayout->addWidget(circleProgess, 0, Qt::AlignHCenter | Qt::AlignTop);
5469 progressLayout->addWidget(waterProgess, 0, Qt::AlignHCenter | Qt::AlignTop);
70 progressLayout->addWidget(coloredpb, 0, Qt::AlignHCenter | Qt::AlignTop);
5571
5672 layout->addLayout(sliderLayout);
5773 layout->addLayout(progressLayout);
5874 layout->addStretch();
5975
60 connect(slider, &DTK_WIDGET_NAMESPACE::DSlider::valueChanged, [circleProgess, waterProgess](const int value) {
76 connect(slider, &DTK_WIDGET_NAMESPACE::DSlider::valueChanged, [circleProgess, waterProgess, coloredpb](const int value) {
6177 circleProgess->setText(QString::number(value) + "%");
6278 waterProgess->setValue(value);
6379 circleProgess->setValue(value);
80 coloredpb->setValue(value);
6481 });
6582 connect(sliderSize, &DTK_WIDGET_NAMESPACE::DSlider::valueChanged, [circleProgess, waterProgess](const int value) {
6683 waterProgess->setFixedSize(value, value);
+0
-124
examples/dwidget-examples/collections/buttonlisttab.cpp less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #include "buttonlisttab.h"
18 #include "dbuttonlist.h"
19 #include "doptionlist.h"
20 #include "doption.h"
21
22 #include <QHBoxLayout>
23 #include <QListWidgetItem>
24 #include <QDebug>
25
26 DWIDGET_USE_NAMESPACE
27
28 ButtonListTab::ButtonListTab(QWidget *parent) : QFrame(parent)
29 {
30 initData();
31 initUI();
32 initConnect();
33 }
34
35 ButtonListTab::~ButtonListTab()
36 {
37
38 }
39
40 void ButtonListTab::initData() {
41 m_buttons << "Button1" << "Button2" << "Button3";
42 m_buttons << "Button4" << "Button5" << "Button6";
43 m_buttons << "Button7" << "Button8" << "Button9";
44 }
45
46 void ButtonListTab::initUI() {
47 DButtonList* buttonListGroup = new DButtonList(this);
48 buttonListGroup->addButtons(m_buttons);
49 buttonListGroup->setItemSize(200, 30);
50
51 DOptionList *optionList = new DOptionList(this);
52 for (int i = 0; i != 10; ++i)
53 {
54 DOption *option = new DOption;
55 option->setName("aaaa");
56 option->setValue("bbb");
57 option->setIcon(":/images/dark/images/delete_multi_press.png");
58
59 optionList->addOption(option);
60 }
61 optionList->setCurrentSelected(4);
62
63 DOptionList *optionList2 = new DOptionList(this);
64 for (int i = 0; i != 10; ++i)
65 {
66 DOption *option = new DOption;
67 option->setName("aaaa");
68 option->setValue("value-" + QString::number(i));
69 option->layout()->setSpacing(0);
70
71 optionList2->addOption(option);
72 }
73 optionList2->blockSignals(true);
74 optionList2->setCurrentSelected("value-3");
75 optionList2->blockSignals(false);
76
77 QHBoxLayout* layout = new QHBoxLayout;
78 layout->addWidget(buttonListGroup);
79 layout->addWidget(optionList);
80 layout->addWidget(optionList2);
81 layout->setContentsMargins(50, 50, 50, 50);
82 setLayout(layout);
83 buttonListGroup->checkButtonByIndex(2);
84 buttonListGroup->addButton("1111");
85
86 connect(buttonListGroup, SIGNAL(buttonMouseEntered(QString)),
87 this, SLOT(handleEnter(QString)));
88
89 connect(buttonListGroup, SIGNAL(buttonMouseLeaved(QString)),
90 this, SLOT(handleLeave(QString)));
91
92 buttonListGroup->clear();
93 buttonListGroup->addButtons(m_buttons);
94 buttonListGroup->checkButtonByIndex(4);
95
96 QPushButton *b1 = new QPushButton(this);
97 b1->setText("value-4");
98 b1->move(0, 0);
99
100 connect(b1, &QPushButton::clicked, [optionList2] {
101 optionList2->setCurrentSelected("value-4");
102 });
103
104 QPushButton *b2 = new QPushButton(this);
105 b2->setText("value-3");
106 b2->move(120, 0);
107
108 connect(b2, &QPushButton::clicked, [optionList2] {
109 optionList2->setCurrentSelected("value-3");
110 });
111 }
112
113 void ButtonListTab::handleEnter(QString text){
114 qDebug() << "handleEnter" << text;
115 }
116
117 void ButtonListTab::handleLeave(QString text){
118 qDebug() << "handleLeave" << text;
119 }
120
121 void ButtonListTab::initConnect(){
122
123 }
+0
-42
examples/dwidget-examples/collections/buttonlisttab.h less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #ifndef BUTTONLISTTAB_H
18 #define BUTTONLISTTAB_H
19
20 #include <QFrame>
21 class QListWidgetItem;
22
23 class ButtonListTab : public QFrame
24 {
25 Q_OBJECT
26 public:
27 explicit ButtonListTab(QWidget *parent = 0);
28 ~ButtonListTab();
29
30 void initData();
31 void initUI();
32 void initConnect();
33
34 public Q_SLOTS:
35 void handleEnter(QString text);
36 void handleLeave(QString text);
37 private:
38 QStringList m_buttons;
39 };
40
41 #endif // BUTTONLISTTAB_H
1717 #include "buttontab.h"
1818
1919 #include <QDebug>
20 #include "dbasebutton.h"
2120
2221 DWIDGET_USE_NAMESPACE
2322
4241 optionButton->move(110, 5);
4342
4443 //////////////////////////////////////////////////////////////--DTextButton
45 DTextButton *textButton = new DTextButton("Test Text", this);
46 textButton->move(5, 40);
47
48 DTextButton *textComplexButton = new DTextButton("Checked Button", this);
49 textComplexButton->setCheckable(true);
50 textComplexButton->setChecked(true);
51 textComplexButton->move(5, 75);
52
53 //////////////////////////////////////////////////////////////--DTextButton
5444
5545 DImageButton *imageButton = new DImageButton(":/images/button.png", ":/images/buttonHover.png", ":/images/buttonPress.png", this);
5646 imageButton->move(5, 100);
6656
6757 DSwitchButton *switchButton = new DSwitchButton(this);
6858 switchButton->move(85, 200);
69
70 DTK_WIDGET_NAMESPACE::DLinkButton *linkBtn = new DTK_WIDGET_NAMESPACE::DLinkButton("Link Button", this);
71 linkBtn->move(10, 125);
72
73 DTK_WIDGET_NAMESPACE::DLinkButton *linkButton = new DTK_WIDGET_NAMESPACE::DLinkButton("Link Button", this);
74 linkButton->move(10, 155);
75
76 /////////////////////////////////////////////////////////////////////////////
77 DTK_WIDGET_NAMESPACE::DBaseButton *bf = new DTK_WIDGET_NAMESPACE::DBaseButton(this);
78 bf->setFixedSize(100, 30);
79 bf->move(10, 260);
80 bf->show();
8159 }
8260
8361 void ButtonTab::buttonClickTest()
2121 #include <QLabel>
2222
2323 #include "dtkwidget_global.h"
24 #include "dtextbutton.h"
2524 #include "dimagebutton.h"
2625 #include "dheaderline.h"
2726 #include "darrowbutton.h"
3029 #include "dwindowminbutton.h"
3130 #include "dwindowclosebutton.h"
3231 #include "dwindowoptionbutton.h"
33 #include "dlinkbutton.h"
3432
3533 class ButtonTab : public QLabel
3634 {
00 QT += core gui multimedia multimediawidgets svg
11 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
2 QT += dtkcore
2 QT += dtkcore dtkgui
33 linux* {
44 CONFIG += link_pkgconfig
55 PKGCONFIG += dframeworkdbus
3838 bartab.cpp \
3939 inputtab.cpp \
4040 slidertab.cpp \
41 buttonlisttab.cpp \
4241 segmentedcontrol.cpp\
4342 indicatortab.cpp \
4443 widgetstab.cpp \
5554 bartab.h \
5655 inputtab.h \
5756 slidertab.h \
58 buttonlisttab.h \
5957 segmentedcontrol.h \
6058 indicatortab.h \
6159 widgetstab.h \
1818
1919 #include "dspinner.h"
2020 #include "dpicturesequenceview.h"
21 #include "dlinkbutton.h"
2221
2322 #include <QDebug>
2423 #include <QString>
128127 seqViewOnce->setSpeed(33);
129128 seqViewOnce->setSingleShot(true);
130129
131 DLinkButton *restart = new DLinkButton("Restart", this);
132
133130 auto seqOnceViewLayout = new QHBoxLayout;
134131 seqOnceViewLayout->addWidget(seqViewOnce);
135 seqOnceViewLayout->addWidget(restart);
136132 seqOnceViewLayout->addStretch();
137133
138134 layout->addLayout(spinnerLayout);
148144 seqView5->play();
149145 seqView6->play();
150146
151 connect(restart, &DLinkButton::clicked, [seqViewOnce] {
152 seqViewOnce->play();
153 });
154
155147 setLayout(layout);
156148 }
2020 #include "dipv4lineedit.h"
2121 #include "dspinbox.h"
2222 #include "dcrumbedit.h"
23 #include "dalertcontrol.h"
2324
25 #include <QComboBox>
2426 #include <dthememanager.h>
2527
2628 #include <QPixmap>
2729 #include <QDebug>
2830 #include <QTimer>
2931 #include <QCheckBox>
32 #include <QVariantAnimation>
33 #include <QEasingCurve>
3034
31 #ifdef Q_OS_LINUX
32 #include "dpasswdeditanimated.h"
33 #endif
3435
3536 InputTab::InputTab(QWidget *parent) : QLabel(parent)
3637 {
4445
4546 DTK_WIDGET_NAMESPACE::DPasswordEdit *pwdEdit2 = new DTK_WIDGET_NAMESPACE::DPasswordEdit(this);
4647 pwdEdit2->setText("password");
47 pwdEdit2->setEchoMode(DTK_WIDGET_NAMESPACE::DPasswordEdit::Normal);
48 pwdEdit2->setAlert(true);
48 pwdEdit2->setEchoMode(QLineEdit::Normal);
49
50 pwdEdit2->showAlertMessage("this is an alert message...");
4951 pwdEdit2->move(20, 50);
5052 connect(pwdEdit2, &DTK_WIDGET_NAMESPACE::DPasswordEdit::focusChanged, [](bool focus) {qDebug() << "focus: " << focus;});
51 connect(pwdEdit2, &DTK_WIDGET_NAMESPACE::DPasswordEdit::textChanged, [](const QString &text) {qDebug() << "text: " << text;});
53 connect(pwdEdit2, &DTK_WIDGET_NAMESPACE::DPasswordEdit::textChanged, [=](const QString &text) {
54 qDebug() << "text: " << text << pwdEdit2->alertMessageAlignment();
55 if (pwdEdit2->isAlert()) {
56 pwdEdit2->setAlertMessageAlignment(Qt::AlignLeft);
57 } else if (pwdEdit2->isEchoMode()) {
58 pwdEdit2->setAlertMessageAlignment(Qt::AlignRight);
59 } else {
60 pwdEdit2->setAlertMessageAlignment(Qt::AlignCenter);
61 }
62
63 pwdEdit2->showAlertMessage("this is an alert message..."+text, nullptr);
64 pwdEdit2->setAlert(!pwdEdit2->isAlert());
65 });
66
67 QComboBox *combo = new QComboBox(this);
68 combo->setEditable(true);
69 combo->addItem("left");
70 combo->addItem("right");
71 combo->addItem("center");
72 combo->addItem("item");
73 DTK_WIDGET_NAMESPACE::DAlertControl *ac = new DTK_WIDGET_NAMESPACE::DAlertControl(combo/*->lineEdit()*/, combo);
74 ac->setMessageAlignment(Qt::AlignRight);
75
76 combo->move(550, 150);
77 combo->setMinimumWidth(150);
78
79 QVariantAnimation *ma = new QVariantAnimation(combo);
80 connect(ma, &QVariantAnimation::valueChanged, [combo](const QVariant &value){
81 QPoint p = combo->pos();
82 p.setX(value.toInt());
83 combo->move(p);
84 });
85 ma->setDuration(6000);
86 ma->setStartValue(550);
87 ma->setEndValue(700);
88
89 connect(combo, &QComboBox::editTextChanged, [=](const QString &text){
90 //ac->showAlertMessage("this is an alert message...");
91 if (text == "left") {
92 ac->setMessageAlignment(Qt::AlignLeft);
93 } else if (text == "right") {
94 ac->setMessageAlignment(Qt::AlignRight);
95 } else if (text == "center") {
96 ac->setMessageAlignment(Qt::AlignCenter);
97 }
98
99 ac->showAlertMessage("this is an alert message..."+text, combo, 10000);
100 ac->setAlert(!ac->isAlert());
101
102 combo->move(550, 150);
103 ma->start();
104 });
105
52106
53107 DTK_WIDGET_NAMESPACE::DSearchEdit *searchEdit = new DTK_WIDGET_NAMESPACE::DSearchEdit(this);
54108 //searchEdit->setSearchIcon(":/images/button.png");
74128 lineEditAlert->setAlert(true);
75129 lineEditAlert->setFixedSize(200, 30);
76130 lineEditAlert->move(20, 230);
77 lineEditAlert->setValidator(new QRegExpValidator(QRegExp("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){0,3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)?")));
131 lineEditAlert->lineEdit()->setValidator(new QRegExpValidator(QRegExp("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){0,3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)?")));
78132
79133 DTK_WIDGET_NAMESPACE::DShortcutEdit *shortcutEdit = new DTK_WIDGET_NAMESPACE::DShortcutEdit(this);
80134 shortcutEdit->move(20, 300);
104158
105159 // searchEdit->setFocus();
106160 lineEditAlert->setFocus();
107
108 #ifdef Q_OS_LINUX
109 DTK_WIDGET_NAMESPACE::DPasswdEditAnimated *passwdEA = new DTK_WIDGET_NAMESPACE::DPasswdEditAnimated(this);
110 passwdEA->move(500, 20);
111 QCheckBox *checkButton1 = new QCheckBox("show alert", this);
112 checkButton1->setStyleSheet("color: red");
113 checkButton1->move(700, 20);
114 connect(checkButton1, &QCheckBox::clicked, [=](bool checked){
115 if (checked) passwdEA->showAlert("button clicked!!!");
116 else passwdEA->hideAlert();
117 });
118
119 QCheckBox *checkButton2 = new QCheckBox("keyboard enable", this);
120 checkButton2->setStyleSheet("color: red");
121 checkButton2->setChecked(true);
122 checkButton2->move(700, 40);
123 connect(checkButton2, &QCheckBox::clicked, [=](bool checked){
124 if (checked) passwdEA->setKeyboardButtonEnable(true);
125 else passwdEA->setKeyboardButtonEnable(false);
126 });
127
128 QCheckBox *checkButton3 = new QCheckBox("capslock enable", this);
129 checkButton3->setStyleSheet("color: red");
130 checkButton3->setChecked(true);
131 checkButton3->move(700, 60);
132 connect(checkButton3, &QCheckBox::clicked, [=](bool checked){
133 if (checked) passwdEA->setCapslockIndicatorEnable(true);
134 else passwdEA->setCapslockIndicatorEnable(false);
135 });
136
137 QCheckBox *checkButton4 = new QCheckBox("eye enable", this);
138 checkButton4->setStyleSheet("color: red");
139 checkButton4->setChecked(true);
140 checkButton4->move(700, 80);
141 connect(checkButton4, &QCheckBox::clicked, [=](bool checked){
142 if (checked) passwdEA->setEyeButtonEnable(true);
143 else passwdEA->setEyeButtonEnable(false);
144 });
145
146 QCheckBox *checkButton5 = new QCheckBox("submit enable", this);
147 checkButton5->setStyleSheet("color: red");
148 checkButton5->setChecked(true);
149 checkButton5->move(700, 100);
150 connect(checkButton5, &QCheckBox::clicked, [=](bool checked){
151 if (checked) passwdEA->setSubmitButtonEnable(true);
152 else passwdEA->setSubmitButtonEnable(false);
153 });
154
155 QCheckBox *checkButton6 = new QCheckBox("anim enable", this);
156 checkButton6->setStyleSheet("color: red");
157 checkButton6->setChecked(true);
158 checkButton6->move(700, 120);
159 connect(checkButton6, &QCheckBox::clicked, [=](bool checked){
160 if (checked) passwdEA->setLoadAnimEnable(true);
161 else passwdEA->setLoadAnimEnable(false);
162 });
163
164 QCheckBox *checkButton7 = new QCheckBox("abort auth", this);
165 checkButton7->setStyleSheet("color: red");
166 checkButton7->setChecked(true);
167 checkButton7->move(700, 140);
168 connect(checkButton7, &QCheckBox::clicked, [=](){ passwdEA->abortAuth(); });
169
170 #endif
171161 }
1717 #ifndef INPUTTAB_H
1818 #define INPUTTAB_H
1919
20 #include <QWidget>
20 #include <QLabel>
2121
2222 #include "dpasswordedit.h"
2323 #include "dsearchedit.h"
1616
1717 #include "linetab.h"
1818
19 #include <DHorizontalLine>
20 #include <DVerticalLine>
21
1922 LineTab::LineTab(QWidget *parent) : QLabel(parent)
2023 {
2124 // setStyleSheet("LineTab{background-color: #252627;}");
2225 //////////////////////////////////////////////////////////////--DSeparator
23 DSeparatorHorizontal *dsHorizontal = new DSeparatorHorizontal(this);
26 DHorizontalLine *dsHorizontal = new DHorizontalLine(this);
2427 dsHorizontal->setFixedSize(200,2);
2528 dsHorizontal->move(1,5);
26 DSeparatorVertical *dsVertical = new DSeparatorVertical(this);
29 DVerticalLine *dsVertical = new DVerticalLine(this);
2730 dsVertical->setFixedSize(2,200);
2831 dsVertical->move(10,5);
2932
4851 connect(bbb, &QPushButton::clicked, [=]{
4952 baseExpand->setExpand(!baseExpand->expand());
5053 });
51 DSeparatorHorizontal *dsHorizontal2 = new DSeparatorHorizontal(this);
54 DHorizontalLine *dsHorizontal2 = new DHorizontalLine(this);
5255 dsHorizontal2->setFixedWidth(baseExpand->width());
5356 QLabel *expandLabel = new QLabel("Expand content");
5457 expandLabel->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
2323
2424 #include "dheaderline.h"
2525 #include "dbaseline.h"
26 #include "dseparatorhorizontal.h"
27 #include "dseparatorvertical.h"
2826 #include "dbaseexpand.h"
29 #include "darrowlineexpand.h"
27 #include <DArrowLineExpand>
3028 #include "dswitchlineexpand.h"
31 #include "dexpandgroup.h"
29 #include <DExpandGroup>
3230
3331 DWIDGET_USE_NAMESPACE
3432
1515 */
1616
1717 #include "mainwindow.h"
18 #include "dlabel.h"
19 #include "dapplication.h"
20 #include "dplatformwindowhandle.h"
18
19 #include <DTitlebar>
20 #include <DApplication>
21 #include <DApplicationSettings>
22 #include <DWidgetUtil>
23 #include <DLog>
24 #include <DDialog>
2125
2226 #include <QDebug>
23 #include <DLog>
24
25 #include "util/dwidgetutil.h"
27 #include <QTextBrowser>
2628
2729 DWIDGET_USE_NAMESPACE
2830
3537 DApplication::loadDXcbPlugin();
3638
3739 DApplication a(argc, argv);
40 qDebug() << a.arguments();
41 DApplication::setAttribute(Qt::AA_UseHighDpiPixmaps, true);
3842 Dtk::Core::DLogManager::registerConsoleAppender();
3943
4044 a.loadTranslator();
41 a.setAttribute(Qt::AA_EnableHighDpiScaling, true);
42 a.setTheme("light");
4345 #ifdef Q_OS_UNIX
4446 a.setOOMScoreAdj(500);
4547 #endif
4648
47 if (!a.setSingleInstance("deepin-tool-kit-examples")) {
49 if (!DGuiApplicationHelper::setSingleInstance("deepin-tool-kit-examples")) {
4850 qDebug() << "another instance is running!!";
4951 }
5052
53 a.setApplicationName("dtk-example");
54 a.setOrganizationName("deepin");
55 DApplicationSettings as;
56 Q_UNUSED(as)
57
5158 MainWindow w;
59 // DIconButton *button = new DIconButton(&w);
60 // button->setIconSize(QSize(30, 30));
61 // button->setFlat(true);
62 // button->setIcon(QIcon::fromTheme("button_edit-clear"));
63 // w.setCentralWidget(button);
5264 w.show();
5365 Dtk::Widget::moveToCenter(&w);
5466
2222 #include <QTextCodec>
2323 #include <QDebug>
2424 #include <QTemporaryFile>
25 #include <DDialog>
2526
2627 #include "qsettingbackend.h"
2728 #include "dsettingsdialog.h"
3536 #include "segmentedcontrol.h"
3637 #include "dplatformwindowhandle.h"
3738 #include "dtitlebar.h"
39 #include <DSettingsWidgetFactory>
3840
3941 #include <DApplication>
4042
4143 #include "mainwindow.h"
42 #include "buttonlisttab.h"
4344 #include "graphicseffecttab.h"
4445 #include "simplelistviewtab.h"
4546 #include "dtoast.h"
5960 setWindowFlags(flags);
6061 setAttribute(Qt::WA_TranslucentBackground);
6162
62 DThemeManager *themeManager = DThemeManager::instance();
63
6463 initTabWidget();
6564
6665 QVBoxLayout *mainLayout = new QVBoxLayout();
6968 mainLayout->addWidget(m_mainTab);
7069
7170 QHBoxLayout *styleLayout = new QHBoxLayout();
72 QPushButton *darkButton = new QPushButton("Dark", this);
73 QPushButton *lightBUtton = new QPushButton("Light", this);
7471 QPushButton *enableButtons = new QPushButton("Enable Titlebar ", this);
7572 QPushButton *disableButtons = new QPushButton("Disable Titlebar", this);
7673 QPushButton *toggleMinMaxButtons = new QPushButton("Toggle MinMax", this);
7774 QPushButton *fullscreenButtons = new QPushButton("Fullscreen", this);
7875
79 themeManager->setTheme(lightBUtton, "light");
80
81 connect(darkButton, &QPushButton::clicked, [ = ] {
82 themeManager->setTheme("dark");
83 });
84 connect(lightBUtton, &QPushButton::clicked, [ = ] {
85 themeManager->setTheme("light");
86 });
8776 connect(enableButtons, &QPushButton::clicked, [ = ] {
8877 titlebar()->setDisableFlags(Qt::Widget);
8978 });
118107 show();
119108 });
120109
121 styleLayout->addWidget(darkButton);
122 styleLayout->addWidget(lightBUtton);
123110 styleLayout->addWidget(enableButtons);
124111 styleLayout->addWidget(disableButtons);
125112 styleLayout->addWidget(toggleMinMaxButtons);
165152 QTimer::singleShot(4000, [ = ]() {
166153 toast->pop();
167154 });
155
156 titlebar->addWidget(new DSearchEdit(titlebar));
157
158 QPushButton *pb1 = new QPushButton("button1");
159 QPushButton *pb2 = new QPushButton("button2");
160
161 QLineEdit *le = new QLineEdit("lineEdit");
162
163 titlebar->addWidget(pb1);
164 titlebar->addWidget(pb2);
165 titlebar->addWidget(le);
168166 }
169167
170168 void MainWindow::menuItemInvoked(QAction *action)
224222 encoding->setValue(0);
225223
226224 DSettingsDialog dsd(this);
225 dsd.widgetFactory()->registerWidget("custom-button", [] (QObject *obj) -> QWidget* {
226 if (DSettingsOption *option = qobject_cast<DSettingsOption*>(obj)) {
227 qDebug() << "create custom button:" << option->value();
228 QPushButton *button = new QPushButton(option->value().toString());
229 return button;
230 }
231
232 return nullptr;
233 });
227234 dsd.updateSettings(settings);
228235 dsd.exec();
229236 return;
230237 }
231238
232 QMessageBox::warning(this, "menu clieck", action->text() + ", was cliecked");
239 //QMessageBox::warning(this, "menu clieck", action->text() + ", was cliecked");
240 DDialog dlg("menu clicked", action->text() + ", was clicked");
241 dlg.addButton("ok", true, DDialog::ButtonWarning);
242 dlg.setIcon(QIcon::fromTheme("dialog-information"));
243 dlg.exec();
233244 qDebug() << "click" << action << action->isChecked();
234245 }
235246
248259 SliderTab *sliderTab = new SliderTab(this);
249260
250261 IndicatorTab *indicatorTab = new IndicatorTab(this);
251
252 ButtonListTab *buttonListGroupTab = new ButtonListTab(this);
253262
254263 Segmentedcontrol *segmentedControl = new Segmentedcontrol(this);
255264
272281 m_mainTab->addTab(inputTab, "Input");
273282 m_mainTab->addTab(sliderTab, "Slider");
274283
275 m_mainTab->addTab(buttonListGroupTab, "ButtonList");
276284 m_mainTab->addTab(segmentedControl, "Segmented Control");
277285 #ifndef DTK_NO_MULTIMEDIA
278286 m_mainTab->addTab(cameraform, "Camera View");
2929 MultiListItem *item3 = new MultiListItem("Eric Clapton", "Tears In Heaven", "4:34");
3030 MultiListItem *item4 = new MultiListItem("John Lennon", "Imagine", "3:56");
3131
32 setColumnTitleInfo({"artistName", "songName", "songLength"}, {30, 80, 30}, 30);
33 setColumnHideFlags(QList<bool>() << true << true << true, 0);
3234 items << item1;
3335 items << item2;
3436 items << item3;
33 "key": "base",
44 "name": "Basic settings",
55 "groups": [
6 {
7 "key": "custom-widgets",
8 "name": "Custom Widgets",
9
10 "options": [
11 {
12 "key": "title2",
13 "type": "title2",
14 "default": "Custom Level2 Title"
15 },
16 {
17 "key": "custom-button",
18 "type": "custom-button",
19 "default": "Custom Button"
20 },
21 {
22 "key": "switchbutton",
23 "type": "switchbutton",
24 "default": true,
25 "name": "Switch Button"
26 }
27 ]
28 },
629 {
730 "key": "theme",
831 "name": "Theme",
2222 SimpleListViewTab::SimpleListViewTab(QWidget *parent) : QWidget(parent)
2323 {
2424 QHBoxLayout *layout = new QHBoxLayout(this);
25 SingleListView *singleListView = new SingleListView();
25 //SingleListView *singleListView = new SingleListView();
2626 MultiListView *multiListView = new MultiListView();
2727
28 layout->addWidget(singleListView);
28 //layout->addWidget(singleListView);
2929 layout->addWidget(multiListView);
3030 }
3131
1616
1717 #include "dslider.h"
1818 #include "slidertab.h"
19 #include "darrowrectangle.h"
1920
2021 DWIDGET_USE_NAMESPACE
2122
2728 slider->setFixedWidth(300);
2829 slider->setFixedHeight(40);
2930 slider->move(20, 50);
30
31 DSlider *sharpSlider = new DSlider(Qt::Horizontal, this);
32 sharpSlider->setHandleType(DSlider::SharpHandler);
33 sharpSlider->setFixedWidth(300);
34 sharpSlider->setFixedHeight(40);
35 sharpSlider->move(20, 100);
36
3731 }
3832
33 void SliderTab::mousePressEvent(QMouseEvent *event)
34 {
35 auto ptr = new DArrowRectangle(DArrowRectangle::ArrowBottom, DArrowRectangle::FloatWidget, this);
36 ptr->setFixedSize(80,300);
37 ptr->show(event->x(), event->y());
38 }
2525 Q_OBJECT
2626 public:
2727 explicit SliderTab(QWidget *parent = 0);
28
29 private:
30 void mousePressEvent(QMouseEvent *event);
2831 };
2932
3033 #endif // SLIDERTAB_H
1616
1717 #include "widgetstab.h"
1818 #include "darrowrectangle.h"
19 #include "dtextedit.h"
20 #include "dlineedit.h"
1921 #ifdef Q_OS_LINUX
2022 #include "dmpriscontrol.h"
21 #include "dregionmonitor.h"
22 using Dtk::Widget::DRegionMonitor;
23 #include <DRegionMonitor>
2324 #endif
2425
26 #include <QCheckBox>
27 #include <QPushButton>
2528
26 #include <QCheckBox>
27
29 DWIDGET_USE_NAMESPACE
30 DGUI_USE_NAMESPACE
2831
2932 WidgetsTab::WidgetsTab(QWidget *parent) : QLabel(parent)
3033 {
8588
8689 connect(togglePic, SIGNAL(toggled(bool)), control, SLOT(setPictureVisible(bool)));
8790 #endif
91
92 DLineEdit *pLineEdit = new DLineEdit(this);
93 pLineEdit->move(50, 100);
94
95 DTextEdit *pTextEdit = new DTextEdit(this);
96 pTextEdit->move(50, 150);
8897 }
8998
1919
2020 #include <QLabel>
2121
22 #include "dtextbutton.h"
23
24 DWIDGET_USE_NAMESPACE
25
2622 class WidgetsTab : public QLabel
2723 {
2824 Q_OBJECT
5858 kTopLeft = 134,
5959 };
6060
61 void ChangeWindowMaximizedState(const QWidget *widget, int wm_state);
62 CornerEdge GetCornerEdge(const QWidget *widget, int x, int y, const QMargins &margins, int border_width);
63 bool UpdateCursorShape(const QWidget *widget, int x, int y, const QMargins &margins, int border_width);
64 bool IsCornerEdget(const QWidget *widget, int x, int y, const QMargins &margins, int border_width);
65 void MoveResizeWindow(const QWidget *widget, Qt::MouseButton qbutton, int x, int y, const QMargins &margins, int border_width);
61 D_DECL_DEPRECATED void ChangeWindowMaximizedState(const QWidget *widget, int wm_state);
62 D_DECL_DEPRECATED CornerEdge GetCornerEdge(const QWidget *widget, int x, int y, const QMargins &margins, int border_width);
63 D_DECL_DEPRECATED bool UpdateCursorShape(const QWidget *widget, int x, int y, const QMargins &margins, int border_width);
64 D_DECL_DEPRECATED bool IsCornerEdget(const QWidget *widget, int x, int y, const QMargins &margins, int border_width);
65 D_DECL_DEPRECATED void MoveResizeWindow(const QWidget *widget, Qt::MouseButton qbutton, int x, int y, const QMargins &margins, int border_width);
6666
67 void StartResizing(const QWidget *w, const QPoint &globalPoint, const CornerEdge &ce);
68 void SendMoveResizeMessage(const QWidget *widget, Qt::MouseButton qbutton, int action);
69 void MoveWindow(const QWidget *widget, Qt::MouseButton qbutton);
70 void CancelMoveWindow(const QWidget *widget, Qt::MouseButton qbutton);
67 D_DECL_DEPRECATED void StartResizing(const QWidget *w, const QPoint &globalPoint, const CornerEdge &ce);
68 D_DECL_DEPRECATED void SendMoveResizeMessage(const QWidget *widget, Qt::MouseButton qbutton, int action);
69 D_DECL_DEPRECATED void MoveWindow(const QWidget *widget, Qt::MouseButton qbutton);
70 D_DECL_DEPRECATED void CancelMoveWindow(const QWidget *widget, Qt::MouseButton qbutton);
7171
72 void ResetCursorShape(const QWidget *widget);
73 bool SetCursorShape(const QWidget *widget, int cursor_id);
74 void ShowFullscreenWindow(const QWidget *widget, bool is_fullscreen);
75 void ShowMaximizedWindow(const QWidget *widget);
76 void ShowMinimizedWindow(const QWidget *widget, bool minimized);
77 void ShowNormalWindow(const QWidget *widget);
78 void ToggleMaximizedWindow(const QWidget *widget);
79 void SkipTaskbarPager(const QWidget *widget);
80 void SetStayOnTop(const QWidget *widget, bool on);
81 void SetMouseTransparent(const QWidget *widget, bool on);
82 void SetWindowExtents(const QWidget *widget, const QMargins &margins, const int resizeHandlSize);
83 void SetWindowExtents(uint wid, const QRect &windowRect, const QMargins &margins, const int resizeHandleSize);
84 void PropagateSizeHints(const QWidget *w);
85 void DisableResize(const QWidget *w);
72 D_DECL_DEPRECATED void ResetCursorShape(const QWidget *widget);
73 D_DECL_DEPRECATED bool SetCursorShape(const QWidget *widget, int cursor_id);
74 D_DECL_DEPRECATED void ShowFullscreenWindow(const QWidget *widget, bool is_fullscreen);
75 D_DECL_DEPRECATED void ShowMaximizedWindow(const QWidget *widget);
76 D_DECL_DEPRECATED void ShowMinimizedWindow(const QWidget *widget, bool minimized);
77 D_DECL_DEPRECATED void ShowNormalWindow(const QWidget *widget);
78 D_DECL_DEPRECATED void ToggleMaximizedWindow(const QWidget *widget);
79 D_DECL_DEPRECATED void SkipTaskbarPager(const QWidget *widget);
80 D_DECL_DEPRECATED void SetStayOnTop(const QWidget *widget, bool on);
81 D_DECL_DEPRECATED void SetMouseTransparent(const QWidget *widget, bool on);
82 D_DECL_DEPRECATED void SetWindowExtents(const QWidget *widget, const QMargins &margins, const int resizeHandlSize);
83 D_DECL_DEPRECATED void SetWindowExtents(uint wid, const QRect &windowRect, const QMargins &margins, const int resizeHandleSize);
84 D_DECL_DEPRECATED void PropagateSizeHints(const QWidget *w);
85 D_DECL_DEPRECATED void DisableResize(const QWidget *w);
8686
8787 }
8888
22 QT += dtkcore
33
44 CONFIG += internal_module
5 CONFIG(release, debug|release):DEFINES += QT_NO_DEBUG_OUTPUT
56
6 QT += network concurrent multimedia multimediawidgets
7 QT += network concurrent multimedia multimediawidgets dtkgui
78 greaterThan(QT_MAJOR_VERSION, 4) {
89 QT += widgets widgets-private
910 # Qt >= 5.8
1819 ARCH = $$QMAKE_HOST.arch
1920 isEqual(ARCH, sw_64) | isEqual(ARCH, mips64) | isEqual(ARCH, mips32) {
2021 DEFINES += FORCE_RASTER_WIDGETS
22 }
23
24 isEmpty(DTK_NO_AI_SERVICE) {
25 DEFINES += ENABLE_AI
26 DBUS_INTERFACES += \
27 $$PWD/widgets/dbus/com.iflytek.aiservice.iat.xml\
28 $$PWD/widgets/dbus/com.iflytek.aiservice.session.xml
2129 }
2230 }
2331
0 <?xml version="1.0" encoding="utf-8"?>
1 <!DOCTYPE TS>
2 <TS version="2.1">
0 <?xml version="1.0" ?><!DOCTYPE TS><TS language="en" version="2.1">
31 <context>
42 <name>DAboutDialog</name>
53 <message>
6 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
75 <source>Acknowledgements</source>
8 <translation type="unfinished"></translation>
9 </message>
10 <message>
11 <location filename="../src/widgets/dapplication.cpp" line="712"/>
6 <translation>Acknowledgements</translation>
7 </message>
8 <message>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1210 <source>Version: %1</source>
13 <translation type="unfinished"></translation>
14 </message>
15 <message>
16 <location filename="../src/widgets/dapplication.cpp" line="716"/>
11 <translation>Version: %1</translation>
12 </message>
13 <message>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1715 <source>%1 is released under %2</source>
18 <translation type="unfinished"></translation>
16 <translation>%1 is released under %2</translation>
1917 </message>
2018 </context>
2119 <context>
2220 <name>DCrumbEdit</name>
2321 <message>
24 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2523 <source>Black</source>
26 <translation type="unfinished"></translation>
27 </message>
28 <message>
29 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
24 <translation>Black</translation>
25 </message>
26 <message>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
3028 <source>White</source>
31 <translation type="unfinished"></translation>
32 </message>
33 <message>
34 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
29 <translation>White</translation>
30 </message>
31 <message>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3533 <source>Dark Gray</source>
36 <translation type="unfinished"></translation>
37 </message>
38 <message>
39 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
34 <translation>Dark Gray</translation>
35 </message>
36 <message>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
4038 <source>Gray</source>
41 <translation type="unfinished"></translation>
42 </message>
43 <message>
44 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
39 <translation>Gray</translation>
40 </message>
41 <message>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4543 <source>Light Gray</source>
46 <translation type="unfinished"></translation>
47 </message>
48 <message>
49 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
44 <translation>Light Gray</translation>
45 </message>
46 <message>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
5048 <source>Red</source>
51 <translation type="unfinished"></translation>
52 </message>
53 <message>
54 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
49 <translation>Red</translation>
50 </message>
51 <message>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5553 <source>Green</source>
56 <translation type="unfinished"></translation>
57 </message>
58 <message>
59 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
54 <translation>Green</translation>
55 </message>
56 <message>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
6058 <source>Blue</source>
61 <translation type="unfinished"></translation>
62 </message>
63 <message>
64 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
59 <translation>Blue</translation>
60 </message>
61 <message>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6563 <source>Cyan</source>
66 <translation type="unfinished"></translation>
67 </message>
68 <message>
69 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
64 <translation>Cyan</translation>
65 </message>
66 <message>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
7068 <source>Magenta</source>
71 <translation type="unfinished"></translation>
72 </message>
73 <message>
74 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
69 <translation>Magenta</translation>
70 </message>
71 <message>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7573 <source>Yellow</source>
76 <translation type="unfinished"></translation>
77 </message>
78 <message>
79 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
74 <translation>Yellow</translation>
75 </message>
76 <message>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
8078 <source>Dark Red</source>
81 <translation type="unfinished"></translation>
82 </message>
83 <message>
84 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
79 <translation>Dark Red</translation>
80 </message>
81 <message>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8583 <source>Dark Green</source>
86 <translation type="unfinished"></translation>
87 </message>
88 <message>
89 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
84 <translation>Dark Green</translation>
85 </message>
86 <message>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
9088 <source>Dark Blue</source>
91 <translation type="unfinished"></translation>
92 </message>
93 <message>
94 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
89 <translation>Dark Blue</translation>
90 </message>
91 <message>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9593 <source>Dark Cyan</source>
96 <translation type="unfinished"></translation>
97 </message>
98 <message>
99 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
94 <translation>Dark Cyan</translation>
95 </message>
96 <message>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
10098 <source>Dark Magenta</source>
101 <translation type="unfinished"></translation>
102 </message>
103 <message>
104 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
99 <translation>Dark Magenta</translation>
100 </message>
101 <message>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
105103 <source>Dark Yellow</source>
106 <translation type="unfinished"></translation>
104 <translation>Dark Yellow</translation>
107105 </message>
108106 </context>
109107 <context>
110108 <name>DInputDialog</name>
111109 <message>
112 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
113111 <source>Cancel</source>
114 <translation type="unfinished"></translation>
115 </message>
116 <message>
117 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
112 <translation>Cancel</translation>
113 </message>
114 <message>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
118116 <source>Confirm</source>
119 <translation type="unfinished"></translation>
117 <translation>Confirm</translation>
118 </message>
119 </context>
120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation>Enter a new shortcut</translation>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation>Stop reading</translation>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation>Text to Speech</translation>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation>Translate</translation>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation>Speech To Text</translation>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation>Search</translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation>Cancel</translation>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation>Replace</translation>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</translation>
120175 </message>
121176 </context>
122177 <context>
123178 <name>DShortcutEdit</name>
124179 <message>
125 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
126181 <source>Please input a new shortcut</source>
127 <translation type="unfinished"></translation>
128 </message>
129 <message>
130 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
182 <translation>Please input a new shortcut</translation>
183 </message>
184 <message>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
131186 <source>None</source>
132 <translation type="unfinished"></translation>
187 <translation>None</translation>
188 </message>
189 </context>
190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation>Stop reading</translation>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation>Text to Speech</translation>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation>Translate</translation>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation>Speech To Text</translation>
133211 </message>
134212 </context>
135213 <context>
136214 <name>QObject</name>
137215 <message>
138 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
139217 <source>No search result</source>
140 <translation type="unfinished"></translation>
141 </message>
142 <message>
143 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
218 <translation>No search result</translation>
219 </message>
220 <message>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
144222 <source>Restore Defaults</source>
145 <translation type="unfinished"></translation>
223 <translation>Restore Defaults</translation>
146224 </message>
147225 </context>
148226 <context>
149227 <name>ShortcutEdit</name>
150228 <message>
151 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
152230 <source>Please enter a new shortcut</source>
153 <translation type="unfinished"></translation>
231 <translation>Please enter a new shortcut</translation>
154232 </message>
155233 </context>
156234 <context>
157235 <name>TitleBarMenu</name>
158236 <message>
159 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>Theme</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>Light Theme</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>Dark Theme</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>System Theme</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
160258 <source>Help</source>
161 <translation type="unfinished"></translation>
162 </message>
163 <message>
164 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
259 <translation>Help</translation>
260 </message>
261 <message>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
165263 <source>About</source>
166 <translation type="unfinished"></translation>
167 </message>
168 <message>
169 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
264 <translation>About</translation>
265 </message>
266 <message>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
170268 <source>Exit</source>
171 <translation type="unfinished"></translation>
172 </message>
173 </context>
174 </TS>
269 <translation>Exit</translation>
270 </message>
271 </context>
272 </TS>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>ምስጋና ለ ተርጓሚው ሳምሶን በለጠ በላይነህ</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>እትም: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 የ ተለቀቀው በዚህ መሰረት ነው %2</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>ጥቁር</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>ነጭ</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>ጥቁር ግራጫ</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>ግራጫ</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>ነጣ ያለ ግራጫ</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>ቀይ</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>አረንጓዴ</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>ሰማያዊ</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>ሲያን</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>ማጄንታ</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>ቢጫ</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>ጥቁር ቀይ</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>ጥቁር አረንጓዴ</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>ጥቁር ሰማያዊ</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>ጥቁር ሲያን</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>ጥቁር ማጄንታ</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>ጥቁር ቢጫ</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>መሰረዣ</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>ማረጋገጫ</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation type="unfinished"/>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation type="unfinished"/>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation type="unfinished"/>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation type="unfinished"/>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation type="unfinished"/>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation type="unfinished"/>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation type="unfinished"/>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation type="unfinished"/>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>እባክዎን አዲስ አቋራጭ ያስገቡ</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>ምንም</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation type="unfinished"/>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation type="unfinished"/>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation type="unfinished"/>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation type="unfinished"/>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>ነባር እንደ ነበር መመለሻ</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>እባክዎን አዲስ አቋራጭ ያስገቡ</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation type="unfinished"/>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation type="unfinished"/>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation type="unfinished"/>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation type="unfinished"/>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>እርዳታ</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>ስለ</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>መውጫ</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>شكر وتقدير</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>اﻹصدار : %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation> %1 أصدر تحت رخصة %2</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>أسود</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>أبيض</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>رمادي غامق</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>رمادي</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>رمادي فاتح</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>أحمر</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>أخضر</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>أزرق</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>سماوي</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>أرجواني</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>أصفر</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>أحمر غامق</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>أخضر غامق</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>أزرق غامق</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>سماوي غامق</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>أرجواني غامق</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>أصفر غامق</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>إلغاء</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>تأكيد</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation type="unfinished"/>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation type="unfinished"/>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation type="unfinished"/>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation type="unfinished"/>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation>بحث</translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation type="unfinished"/>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation type="unfinished"/>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation type="unfinished"/>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>الرجاء إدخال اختصاراّ جديداً</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>غير موجود</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation type="unfinished"/>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation type="unfinished"/>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation type="unfinished"/>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>لا توجد نتائج بحث</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>استعادة الإعدادت الإفتراضية</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>يرجى إدخال اختصار جديد</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation type="unfinished"/>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation type="unfinished"/>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation type="unfinished"/>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation type="unfinished"/>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>مساعدة</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>حول</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>خروج</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Agradecimientos</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>Versión: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 llánzase so %2</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>Prietu</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>Blancu</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>Buxu escuro</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>Buxu</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>Buxu claro</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>Bermeyu</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>Verde</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>Azul</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>Cianu</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>Maxenta</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>Mariellu</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>Bermeyu escuro</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>Verde escuro</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>Azul escuro</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
94 <translation>Cian escuro</translation>
95 </message>
96 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
94 <translation>Cianu escuro</translation>
95 </message>
96 <message>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>Maxenta escuro</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104 <translation>Mariellu escuru</translation>
104 <translation>Mariellu escuro</translation>
105105 </message>
106106 </context>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Encaboxar</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117 <translation>Confirmar</translation>
117 <translation type="unfinished"/>
118 </message>
119 </context>
120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation type="unfinished"/>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation type="unfinished"/>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation type="unfinished"/>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation type="unfinished"/>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation type="unfinished"/>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation type="unfinished"/>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation type="unfinished"/>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation type="unfinished"/>
118175 </message>
119176 </context>
120177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>Introduz un atayu nuevu</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Nada</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation type="unfinished"/>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation type="unfinished"/>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation type="unfinished"/>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>Nun hai resultaos de la gueta</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>Reafitar valores</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>Introduz un atayu nuevu</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>Estilu</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>Estilu claru</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>Estilu escuru</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>Estilu del sistema</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Ayuda</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>Tocante a</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Colar</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Təşəkkürlər</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>Versiya: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1,%2 altında buraxılır</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation type="unfinished"/>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation type="unfinished"/>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation type="unfinished"/>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation type="unfinished"/>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation type="unfinished"/>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation type="unfinished"/>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation type="unfinished"/>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation type="unfinished"/>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation type="unfinished"/>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation type="unfinished"/>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation type="unfinished"/>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation type="unfinished"/>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation type="unfinished"/>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation type="unfinished"/>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation type="unfinished"/>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation type="unfinished"/>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation type="unfinished"/>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Ləğv et</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Təsdiq edin</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation type="unfinished"/>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation type="unfinished"/>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation type="unfinished"/>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation type="unfinished"/>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation type="unfinished"/>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation type="unfinished"/>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation type="unfinished"/>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation type="unfinished"/>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>Xahiş edirik yeni bir kısayol daxil edin</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Yoxdur</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation type="unfinished"/>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation type="unfinished"/>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation type="unfinished"/>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation type="unfinished"/>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>Standartları bərpa edin</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>Xahiş edirik yeni bir kısayol daxil edin</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation type="unfinished"/>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation type="unfinished"/>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation type="unfinished"/>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation type="unfinished"/>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Kömək</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>Haqqında</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Çıxış</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Благодарности</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>Версия: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 е реализиран под %2</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>Черно</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>Бяло</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>Тъмно сиво</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>Сиво</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>Светло сиво</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>Червено</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>Зелено</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>Синьо</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>Циан</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>Пурпурен</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>Жълт</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>Тъмно червен</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>Тъмно зелен</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>Тъмно син</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>Тъмен циан</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>Тъмно пурпурно</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>Тъмно жълто</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Отказ</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Потвърждавам</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation type="unfinished"/>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation type="unfinished"/>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation type="unfinished"/>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation type="unfinished"/>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation type="unfinished"/>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation type="unfinished"/>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation type="unfinished"/>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation type="unfinished"/>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>Моля въведете нов пряк път</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Нищо</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation type="unfinished"/>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation type="unfinished"/>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation type="unfinished"/>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>Търсенето е без резултат</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>Възстановяване на настройките</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>Моля въведете нов пряк път</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation type="unfinished"/>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation type="unfinished"/>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation type="unfinished"/>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation type="unfinished"/>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Помощ</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>Относно</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Изход</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>প্রাপ্তি স্বীকার</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>ভার্সন: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 রিলিজ হয়েছে %2 এর অধীনে</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>কালো</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>সাদা</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>গাঢ় ধূসর</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>ধূসর</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>হালকা ধূসর</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>লাল</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>সবুজ</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>নীল</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>সবজে নীল</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>ম্যাজেন্টা</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>হলুদ</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>গাঢ় লাল</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>গাঢ় সবুজ</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>গাঢ় নীল</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>গাঢ় সবজে নীল</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>গাঢ় ম্যাজেন্টা</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>গাঢ় হলুদ</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>বাতিল করুন</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>নিশ্চিত করুন</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation type="unfinished"/>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation type="unfinished"/>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation type="unfinished"/>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation type="unfinished"/>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation type="unfinished"/>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation type="unfinished"/>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation type="unfinished"/>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation type="unfinished"/>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>দয়াকরে নতুন শর্টকাট চাপুন</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>কোনোটিই নয়</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation type="unfinished"/>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation type="unfinished"/>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation type="unfinished"/>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>অনুসন্ধানের কোনো ফলাফল নেই</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>পূর্বনির্ধারিত জিনিসে ফিরে যান</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>দয়াকরে নতুন শর্টকাট চাপুন</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation type="unfinished"/>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation type="unfinished"/>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation type="unfinished"/>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation type="unfinished"/>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>সাহায্য</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>সম্পর্কে</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>বের হয়ে যান</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Agraïments</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>Versió: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 està publicada d&apos;acord amb %2</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>Negre</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>Blanc</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>Gris fosc</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>Gris</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>Gris clar</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>Vermell</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>Verd</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>Blau</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>Cian</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>Magenta</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>Groc</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>Vermell fosc</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>Verd fosc</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>Blau fosc</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>Cian fosc</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>Magenta fosc</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>Groc fosc</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Cancel·la</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Confirmeu-ho</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation>Introduïu una drecera nova.</translation>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation>Atura la lectura</translation>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation>Text a veu</translation>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation>Tradueix</translation>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation>Cerca</translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation>Cancel·la</translation>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation>Reemplaça</translation>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation>Aquesta drecera té conflicte amb %1. Cliqueu a Afegeix per fer-la efectiva immediatament.</translation>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>Si us plau, introduïu una drecera nova.</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Cap</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation>Atura la lectura</translation>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation>Text a veu</translation>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation>Tradueix</translation>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>Cap resultat de la cerca</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>Restableix els valors per defecte</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>Si us plau, introduïu una drecera nova:</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>Tema</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>Tema clar</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>Tema fosc</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>Tema del sistema</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Ajuda</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>Quant a</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Surt</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Poděkování</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>Verze: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 je vydán pod %2</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>Černá</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>Bílá</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>Tmavě šedá</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>Šedá</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>Světle šedá</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>Červená</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>Zelená</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>Modrá</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>Modrozelená</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>Fialová</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>Žlutá</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>Tmavě červená</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>Tmavě zelená</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>Tmavě modrá</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>Tmavě modrozelená</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>Tmavě fialová</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>Tmavě žlutá</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Zrušit</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Potvrdit</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation>Zadejte novou zkratku</translation>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation type="unfinished"/>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation type="unfinished"/>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation type="unfinished"/>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation>Hledat</translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation>Zrušit</translation>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation>Nahradit</translation>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation>Tato klávesová zkratka se střetává s %1. Klepněte na Přidat, abyste ji okamžitě zprovoznili</translation>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>Zadejte, prosím, novou zkratku</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Žádný</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation type="unfinished"/>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation type="unfinished"/>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation type="unfinished"/>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>Žádný výsledek hledání</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>Obnovit výchozí</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>Zadejte, prosím, novou zkratku</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>Vzhled</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>Světlý vzhled</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>Tmavý vzhled</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>Systémový vzhled</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Nápověda</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>O programu</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Ukončit</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Tilkendegivelser</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>Version: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 er udgivet under %2</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>Sort</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>Hvid</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>Mørkegrå</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>Grå</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>Lysegrå</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>Rød</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>Grøn</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>Blå</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>Cyan</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>Magenta</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>Gul</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>Mørkerød</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>Mørkegrøn</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>Mørkeblå</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>Mørkecyan</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>Mørkemagenta</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>Mørkegul</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Annuller</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Bekræft</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation>Indtast en ny genvej</translation>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation type="unfinished"/>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation type="unfinished"/>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation type="unfinished"/>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation>Søg</translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation>Annuller</translation>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation>Erstat</translation>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation>Genvejen er i konflikt med %1. Klik på Tilføj for øjeblikkeligt at gøre genvejen gældende</translation>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>Input venligst en ny genvej</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Ingen</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation type="unfinished"/>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation type="unfinished"/>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation type="unfinished"/>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>Intet søgeresultat</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>Gendan standarder</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>Indtast venligst en ny genvej</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>Tema</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>Lyst tema</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>Mørkt tema</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>Systemets tema</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Hjælp</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>Om</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Afslut</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Anerkennungen</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>Version: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 wurde unter %2 veröffentlicht.</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>Schwarz</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>Weiß</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>Dunkelgrau</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>Grau</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>Hellgrau</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>Rot</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>Grün</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>Blau</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>Türkis</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>Pink</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>Gelb</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>Dunkelrot</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>Dunkelgrün</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>Dunkelblau</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>Dunkeltürkis</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>Dunkelpink</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>Dunkelgelb</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Abbrechen</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Bestätigen</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation>Geben Sie ein neues Tastenkürzel ein</translation>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation>Lesen beenden</translation>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation>Text zu Sprache</translation>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation>Übersetzen</translation>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation>Suche</translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation>Abbrechen</translation>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation>Ersetzen</translation>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation>Dieses Tastenkürzel steht in Konflikt mit %1. Klicken Sie auf &quot;Hinzufügen&quot;, damit dieses Tastenkürzel sofort wirksam wird</translation>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>Bitte geben Sie ein neues Tastenkürzel ein</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Keine</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation>Lesen beenden</translation>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation>Text zu Sprache</translation>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation>Übersetzen</translation>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>Keine Suchergebnisse</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>Standardwerte wiederherstellen</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>Bitte geben Sie ein neues Tastenkürzel ein</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>Thema</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>Helles Thema</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>Dunkles Thema</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>Systemthema</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Hilfe</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>Über</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Beenden</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>αναγνωρισμοί</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation type="unfinished"/>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation type="unfinished"/>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation type="unfinished"/>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation type="unfinished"/>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation type="unfinished"/>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation type="unfinished"/>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation type="unfinished"/>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation type="unfinished"/>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation type="unfinished"/>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation type="unfinished"/>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation type="unfinished"/>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation type="unfinished"/>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation type="unfinished"/>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation type="unfinished"/>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation type="unfinished"/>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation type="unfinished"/>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation type="unfinished"/>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation type="unfinished"/>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation type="unfinished"/>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Ακύρωση</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Επικύρωση</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation type="unfinished"/>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation type="unfinished"/>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation type="unfinished"/>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation type="unfinished"/>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation type="unfinished"/>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation type="unfinished"/>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation type="unfinished"/>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation type="unfinished"/>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>Παρακαλώ εισάγετε ένα νέο σύνδεσμο</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Κανένα</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation type="unfinished"/>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation type="unfinished"/>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation type="unfinished"/>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation type="unfinished"/>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation type="unfinished"/>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation type="unfinished"/>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation type="unfinished"/>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation type="unfinished"/>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation type="unfinished"/>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation type="unfinished"/>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Βοήθεια</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>Περί</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Έξοδος</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Agradecimientos</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>Versión %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 está lanzado bajo %2</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>Negro</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>Blanco</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>Gris oscuro</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>Gris</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>Gris claro</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>Rojo</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>Verde</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>Azul</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>Cian</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>Magenta</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>Amarillo</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>Rojo oscuro</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>Verde oscuro</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>Azul oscuro</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>Cian oscuro</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>Magenta oscuro</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>Amarillo oscuro</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Cancelar</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Confirmar</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation>Introducir un nuevo acceso directo</translation>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation>Detener lectura</translation>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation>Texto a voz</translation>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation>Traducir</translation>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation>Buscar</translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation>Cancelar</translation>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation>Reemplazar</translation>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation>Este acceso directo tiene conflicto con %1, haga clic en Añadir para que este atajo sea efectivo inmediatamente.</translation>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>Introduzca un nuevo atajo</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Nada</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation>Detener lectura</translation>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation>Texto a voz</translation>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation>Traducir</translation>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>No se encontraron resultados</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>Restaurar valores predeterminados</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>Ingrese un nuevo atajo</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>tema</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>Tema claro</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>Tema oscuro</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>Tema del sistema</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Ayuda</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>Acerca de</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Salir</translation>
170270 </message>
+0
-173
src/translations/dtkwidget_es_419.ts less more
0 <?xml version="1.0" ?><!DOCTYPE TS><TS language="es_419" version="2.1">
1 <context>
2 <name>DAboutDialog</name>
3 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
5 <source>Acknowledgements</source>
6 <translation>Agradecimientos</translation>
7 </message>
8 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
10 <source>Version: %1</source>
11 <translation>Versión %1</translation>
12 </message>
13 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
15 <source>%1 is released under %2</source>
16 <translation>%1 está lanzado bajo %2</translation>
17 </message>
18 </context>
19 <context>
20 <name>DCrumbEdit</name>
21 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
23 <source>Black</source>
24 <translation>Negro</translation>
25 </message>
26 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
28 <source>White</source>
29 <translation>Blanco</translation>
30 </message>
31 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
33 <source>Dark Gray</source>
34 <translation>Gris Oscuro</translation>
35 </message>
36 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
38 <source>Gray</source>
39 <translation>Gris</translation>
40 </message>
41 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
43 <source>Light Gray</source>
44 <translation>Gris Claro</translation>
45 </message>
46 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
48 <source>Red</source>
49 <translation>Rojo</translation>
50 </message>
51 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
53 <source>Green</source>
54 <translation>Verde</translation>
55 </message>
56 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
58 <source>Blue</source>
59 <translation>Azul</translation>
60 </message>
61 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
63 <source>Cyan</source>
64 <translation>Cyan</translation>
65 </message>
66 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
68 <source>Magenta</source>
69 <translation>Magenta</translation>
70 </message>
71 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
73 <source>Yellow</source>
74 <translation>Amarillo</translation>
75 </message>
76 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
78 <source>Dark Red</source>
79 <translation>Rojo Oscuro</translation>
80 </message>
81 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
83 <source>Dark Green</source>
84 <translation>Verde Oscuro</translation>
85 </message>
86 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
88 <source>Dark Blue</source>
89 <translation>Azul Oscuro</translation>
90 </message>
91 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
93 <source>Dark Cyan</source>
94 <translation>Cyan Oscuro</translation>
95 </message>
96 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
98 <source>Dark Magenta</source>
99 <translation>Magenta Oscuro</translation>
100 </message>
101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
103 <source>Dark Yellow</source>
104 <translation>Amarillo Oscuro</translation>
105 </message>
106 </context>
107 <context>
108 <name>DInputDialog</name>
109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
111 <source>Cancel</source>
112 <translation>Cancelar</translation>
113 </message>
114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
116 <source>Confirm</source>
117 <translation>Confirmar</translation>
118 </message>
119 </context>
120 <context>
121 <name>DShortcutEdit</name>
122 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
124 <source>Please input a new shortcut</source>
125 <translation>Introduzca un nuevo atajo</translation>
126 </message>
127 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
129 <source>None</source>
130 <translation>Nada</translation>
131 </message>
132 </context>
133 <context>
134 <name>QObject</name>
135 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
137 <source>No search result</source>
138 <translation>Ningún resultado encontrado.</translation>
139 </message>
140 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
142 <source>Restore Defaults</source>
143 <translation>Restaurar valores predeterminados</translation>
144 </message>
145 </context>
146 <context>
147 <name>ShortcutEdit</name>
148 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
150 <source>Please enter a new shortcut</source>
151 <translation>Ingrese un nuevo atajo</translation>
152 </message>
153 </context>
154 <context>
155 <name>TitleBarMenu</name>
156 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
158 <source>Help</source>
159 <translation>Ayuda</translation>
160 </message>
161 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
163 <source>About</source>
164 <translation>Acerca de</translation>
165 </message>
166 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
168 <source>Exit</source>
169 <translation>Salir</translation>
170 </message>
171 </context>
172 </TS>
0 <?xml version="1.0" ?><!DOCTYPE TS><TS language="fa" version="2.1">
1 <context>
2 <name>DAboutDialog</name>
3 <message>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
5 <source>Acknowledgements</source>
6 <translation>سپاسگزاریها</translation>
7 </message>
8 <message>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
10 <source>Version: %1</source>
11 <translation>نسخه:%1</translation>
12 </message>
13 <message>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
15 <source>%1 is released under %2</source>
16 <translation>%1 زیر %2 منتشر می شود</translation>
17 </message>
18 </context>
19 <context>
20 <name>DCrumbEdit</name>
21 <message>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
23 <source>Black</source>
24 <translation>مشکی</translation>
25 </message>
26 <message>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
28 <source>White</source>
29 <translation>سفید</translation>
30 </message>
31 <message>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
33 <source>Dark Gray</source>
34 <translation>خاکستری تیره</translation>
35 </message>
36 <message>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
38 <source>Gray</source>
39 <translation>خاکستری</translation>
40 </message>
41 <message>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
43 <source>Light Gray</source>
44 <translation>خاکستری روشن</translation>
45 </message>
46 <message>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
48 <source>Red</source>
49 <translation>قرمز</translation>
50 </message>
51 <message>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
53 <source>Green</source>
54 <translation>سبز</translation>
55 </message>
56 <message>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
58 <source>Blue</source>
59 <translation>آبی</translation>
60 </message>
61 <message>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
63 <source>Cyan</source>
64 <translation>فیروزه ای</translation>
65 </message>
66 <message>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
68 <source>Magenta</source>
69 <translation>ارغوانی</translation>
70 </message>
71 <message>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
73 <source>Yellow</source>
74 <translation>زرد</translation>
75 </message>
76 <message>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
78 <source>Dark Red</source>
79 <translation>قرمز تیره</translation>
80 </message>
81 <message>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
83 <source>Dark Green</source>
84 <translation>سبز تیره</translation>
85 </message>
86 <message>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
88 <source>Dark Blue</source>
89 <translation>آبی تیره</translation>
90 </message>
91 <message>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
93 <source>Dark Cyan</source>
94 <translation>فیروزه ای تیره</translation>
95 </message>
96 <message>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
98 <source>Dark Magenta</source>
99 <translation>ارغوانی تیره</translation>
100 </message>
101 <message>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103 <source>Dark Yellow</source>
104 <translation>زرد تیره</translation>
105 </message>
106 </context>
107 <context>
108 <name>DInputDialog</name>
109 <message>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111 <source>Cancel</source>
112 <translation>لغو</translation>
113 </message>
114 <message>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116 <source>Confirm</source>
117 <translation>تائید</translation>
118 </message>
119 </context>
120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation type="unfinished"/>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation type="unfinished"/>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation type="unfinished"/>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation type="unfinished"/>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation>جستجو</translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation type="unfinished"/>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation type="unfinished"/>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation type="unfinished"/>
175 </message>
176 </context>
177 <context>
178 <name>DShortcutEdit</name>
179 <message>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
181 <source>Please input a new shortcut</source>
182 <translation>لطفا میانبر جدید وارد کنید</translation>
183 </message>
184 <message>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
186 <source>None</source>
187 <translation>هیچ کدام</translation>
188 </message>
189 </context>
190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation type="unfinished"/>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation type="unfinished"/>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation type="unfinished"/>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
214 <name>QObject</name>
215 <message>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
217 <source>No search result</source>
218 <translation>جستجو نتیجه ایی نداشت</translation>
219 </message>
220 <message>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
222 <source>Restore Defaults</source>
223 <translation>بازیابی پیش فرض</translation>
224 </message>
225 </context>
226 <context>
227 <name>ShortcutEdit</name>
228 <message>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
230 <source>Please enter a new shortcut</source>
231 <translation>لطفا میانبر جدید وارد کنید</translation>
232 </message>
233 </context>
234 <context>
235 <name>TitleBarMenu</name>
236 <message>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>تم</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>تم روشن</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>تم تیره</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>تم سیستم</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
258 <source>Help</source>
259 <translation>راهنما</translation>
260 </message>
261 <message>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
263 <source>About</source>
264 <translation>درباره</translation>
265 </message>
266 <message>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
268 <source>Exit</source>
269 <translation>خروج</translation>
270 </message>
271 </context>
272 </TS>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Kiitokset</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>Versio: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 on julkaistu %2 -lisenssin alla</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>Musta</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>Valkoinen</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>Tummanharmaa</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>Harmaa</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>Vaaleanharmaa</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>Punainen</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>Vihreä</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>Sininen</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>Syaani</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>Purppura</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>Keltainen</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>Tummanpunainen</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>Tummanvihreä</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>Tummansininen</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>Tumma syaani</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>Tumma purppura</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>Tummankeltainen</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Peruuta</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Vahvista</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation>Tee pikakuvake</translation>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation>Lopeta lukeminen</translation>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation>Teksti puheeksi</translation>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation>Käännös</translation>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation>Etsi</translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation>Peruuta</translation>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation>Korvaa</translation>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation>Tämä pikakuvake on ristiriidassa %1 kanssa, napsauta Lisää, jotta pikakuvake tulee voimaan heti</translation>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125 <translation>Syötä uusi pikakuvake</translation>
126 </message>
127 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
182 <translation>Uusi pikakuvake</translation>
183 </message>
184 <message>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Tyhjä</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation>Lopeta lukeminen</translation>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation>Teksti puheeksi</translation>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation>Käännös</translation>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>Ei hakutuloksia</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>Palauta oletukset</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>Anna uusi pikakuvake</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>Teema</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>Vaalea</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>Tumma</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>Järjestelmän</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Apua</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>Tietoja</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Poistu</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Remerciements </translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>Version : %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 est publié sous %2</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>Noir</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>Blanc</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>Gris foncé</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>Gris</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>Gris clair</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>Rouge</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>Vert</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>Bleu</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>Cyan</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>Magenta</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>Jaune</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>Rouge foncé</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>Vert foncé</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>Bleu foncé</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>Cyan foncé</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>Magenta foncé</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>Jaune foncé</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Annuler</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Confirmer</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation>Entrer un nouveau raccourci</translation>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation type="unfinished"/>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation type="unfinished"/>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation type="unfinished"/>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation>Chercher</translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation>Annuler</translation>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation>Remplacer</translation>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation>Ce raccourci est en conflit avec %1, cliquer sur Ajouter pour que ce raccourci soit effectif immédiatement.</translation>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>Veuillez entrer un nouveau raccourci</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Aucun</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation type="unfinished"/>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation type="unfinished"/>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation type="unfinished"/>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>Aucun résultat de recherche</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>Réinitialiser</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>Veuillez entrer un nouveau raccourci</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>Thème</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>Thème clair</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>Thème sombre</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>Thème du système</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Aide</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>À propos </translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Sortir</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Recoñecementos</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>Versión: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 está liberada baixo %2</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>Negro</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>Branco</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>Gris escuro</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>Gris</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>Gris claro</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>Vermello</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>Verde</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>Azul</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>Ciano</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>Maxenta</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>Amarelo</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>Vermello escuro</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>Verde escuro</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>Azul escuro</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>Ciano escuro</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>Maxenta escuro</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>Amarelo escuro</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Cancelar</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Confirmar</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation>Inserir atallo novo</translation>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation type="unfinished"/>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation type="unfinished"/>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation type="unfinished"/>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation>Buscar</translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation>Cancelar</translation>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation>Substituír</translation>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation type="unfinished"/>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>Por favor, inserte un novo atallo</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Ningún</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation type="unfinished"/>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation type="unfinished"/>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation type="unfinished"/>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>Sen resultados</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>Restaurar predefinidos</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>Por favor, insire un novo atallo</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>Tema</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>Tema claro</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>Tema escuro</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>Tema do sistema</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Axuda</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>Sobre</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Saír</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>הוקרת תודה</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation type="unfinished"/>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation type="unfinished"/>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation type="unfinished"/>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation type="unfinished"/>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation type="unfinished"/>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation type="unfinished"/>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation type="unfinished"/>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation type="unfinished"/>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation type="unfinished"/>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation type="unfinished"/>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation type="unfinished"/>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation type="unfinished"/>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation type="unfinished"/>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation type="unfinished"/>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation type="unfinished"/>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation type="unfinished"/>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation type="unfinished"/>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation type="unfinished"/>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation type="unfinished"/>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>ביטול</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>אישור</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation type="unfinished"/>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation type="unfinished"/>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation type="unfinished"/>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation type="unfinished"/>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation type="unfinished"/>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation type="unfinished"/>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation type="unfinished"/>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation type="unfinished"/>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>נא להקליד צירוף מקשים חדש</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>ללא</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation type="unfinished"/>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation type="unfinished"/>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation type="unfinished"/>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation type="unfinished"/>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation type="unfinished"/>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation type="unfinished"/>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation type="unfinished"/>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation type="unfinished"/>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation type="unfinished"/>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation type="unfinished"/>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>עזרה</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>על אודות</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>יציאה</translation>
170270 </message>
0 <?xml version="1.0" ?><!DOCTYPE TS><TS language="hi_IN" version="2.1">
1 <context>
2 <name>DAboutDialog</name>
3 <message>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
5 <source>Acknowledgements</source>
6 <translation>आभार</translation>
7 </message>
8 <message>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
10 <source>Version: %1</source>
11 <translation>संस्करण : %1</translation>
12 </message>
13 <message>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
15 <source>%1 is released under %2</source>
16 <translation type="unfinished"/>
17 </message>
18 </context>
19 <context>
20 <name>DCrumbEdit</name>
21 <message>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
23 <source>Black</source>
24 <translation type="unfinished"/>
25 </message>
26 <message>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
28 <source>White</source>
29 <translation type="unfinished"/>
30 </message>
31 <message>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
33 <source>Dark Gray</source>
34 <translation type="unfinished"/>
35 </message>
36 <message>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
38 <source>Gray</source>
39 <translation type="unfinished"/>
40 </message>
41 <message>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
43 <source>Light Gray</source>
44 <translation type="unfinished"/>
45 </message>
46 <message>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
48 <source>Red</source>
49 <translation type="unfinished"/>
50 </message>
51 <message>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
53 <source>Green</source>
54 <translation type="unfinished"/>
55 </message>
56 <message>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
58 <source>Blue</source>
59 <translation type="unfinished"/>
60 </message>
61 <message>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
63 <source>Cyan</source>
64 <translation type="unfinished"/>
65 </message>
66 <message>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
68 <source>Magenta</source>
69 <translation type="unfinished"/>
70 </message>
71 <message>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
73 <source>Yellow</source>
74 <translation type="unfinished"/>
75 </message>
76 <message>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
78 <source>Dark Red</source>
79 <translation type="unfinished"/>
80 </message>
81 <message>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
83 <source>Dark Green</source>
84 <translation type="unfinished"/>
85 </message>
86 <message>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
88 <source>Dark Blue</source>
89 <translation type="unfinished"/>
90 </message>
91 <message>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
93 <source>Dark Cyan</source>
94 <translation type="unfinished"/>
95 </message>
96 <message>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
98 <source>Dark Magenta</source>
99 <translation type="unfinished"/>
100 </message>
101 <message>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103 <source>Dark Yellow</source>
104 <translation type="unfinished"/>
105 </message>
106 </context>
107 <context>
108 <name>DInputDialog</name>
109 <message>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111 <source>Cancel</source>
112 <translation>रद्द करें</translation>
113 </message>
114 <message>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116 <source>Confirm</source>
117 <translation>पुष्टि करें</translation>
118 </message>
119 </context>
120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation type="unfinished"/>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation type="unfinished"/>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation type="unfinished"/>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation type="unfinished"/>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation type="unfinished"/>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation type="unfinished"/>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation type="unfinished"/>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation type="unfinished"/>
175 </message>
176 </context>
177 <context>
178 <name>DShortcutEdit</name>
179 <message>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
181 <source>Please input a new shortcut</source>
182 <translation>कृपया नया इनपुट करें</translation>
183 </message>
184 <message>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
186 <source>None</source>
187 <translation type="unfinished"/>
188 </message>
189 </context>
190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation type="unfinished"/>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation type="unfinished"/>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation type="unfinished"/>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
214 <name>QObject</name>
215 <message>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
217 <source>No search result</source>
218 <translation type="unfinished"/>
219 </message>
220 <message>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
222 <source>Restore Defaults</source>
223 <translation type="unfinished"/>
224 </message>
225 </context>
226 <context>
227 <name>ShortcutEdit</name>
228 <message>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
230 <source>Please enter a new shortcut</source>
231 <translation>कृपया नया शॉर्टकट दर्ज़ करें</translation>
232 </message>
233 </context>
234 <context>
235 <name>TitleBarMenu</name>
236 <message>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation type="unfinished"/>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation type="unfinished"/>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation type="unfinished"/>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation type="unfinished"/>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
258 <source>Help</source>
259 <translation>मदद</translation>
260 </message>
261 <message>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
263 <source>About</source>
264 <translation>बारे में</translation>
265 </message>
266 <message>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
268 <source>Exit</source>
269 <translation type="unfinished"/>
270 </message>
271 </context>
272 </TS>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Priznanja</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation type="unfinished"/>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation type="unfinished"/>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation type="unfinished"/>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation type="unfinished"/>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation type="unfinished"/>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation type="unfinished"/>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation type="unfinished"/>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation type="unfinished"/>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation type="unfinished"/>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation type="unfinished"/>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation type="unfinished"/>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation type="unfinished"/>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation type="unfinished"/>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation type="unfinished"/>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation type="unfinished"/>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation type="unfinished"/>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation type="unfinished"/>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation type="unfinished"/>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation type="unfinished"/>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Odustani</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Potvrdi</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation type="unfinished"/>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation type="unfinished"/>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation type="unfinished"/>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation type="unfinished"/>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation type="unfinished"/>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation type="unfinished"/>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation type="unfinished"/>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation type="unfinished"/>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>Molimo Vas da unesete novi prečac</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Niti jedan</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation type="unfinished"/>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation type="unfinished"/>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation type="unfinished"/>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation type="unfinished"/>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation type="unfinished"/>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation type="unfinished"/>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation type="unfinished"/>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation type="unfinished"/>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation type="unfinished"/>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation type="unfinished"/>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Pomoć</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>O programu</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Izlaz</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Köszönetnyilvánítás</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>%1 verzió</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>A %1 a %2 alatti kiadás</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>Fekete</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>Fehér</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>Sötétszürke</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>Szürke</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>Világosszürke</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>Piros</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>Zöld</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>Kék</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>Cián</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>Magenta</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>Sárga</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>Vörös</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>Sötétzöld</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>Sötétkék</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>Sötét cián</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>Sötét bíbor</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>Sötét sárga</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Mégsem</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Megerősítés</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation type="unfinished"/>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation type="unfinished"/>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation type="unfinished"/>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation type="unfinished"/>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation>Keresés</translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation type="unfinished"/>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation type="unfinished"/>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation type="unfinished"/>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>Kérjük, adjon meg egy új parancsikont</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Egyik sem</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation type="unfinished"/>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation type="unfinished"/>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation type="unfinished"/>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>Nincs keresési eredmény</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>Visszaállítás alaphelyzetbe</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>Hozzon létre egy új parancsikont</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>Téma</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>Világos mód</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>Sötét mód</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>Rendszer téma</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Segítség</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>Az alkalmazásról</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Kilépés</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Ucapan terima kasih</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>Versi: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 dirilis dalam %2</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>Hitam</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>Putih</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>Abu-abu hitam</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>Abu-abu</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>Abu-abu Terang</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>Merah</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>Hijau</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>Biru</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>Cyan</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>Magenta</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>Kuning</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>Merah Gelap </translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>Hijau Gelap</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>Biru Gelap</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>Cyan Gelap</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>Magenta Gelap</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>Kuning Gelap</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Batal</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Konfirmasi</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation type="unfinished"/>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation type="unfinished"/>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation type="unfinished"/>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation type="unfinished"/>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation type="unfinished"/>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation type="unfinished"/>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation type="unfinished"/>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation type="unfinished"/>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>Silakan masukan pintasan baru</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Tidak ada</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation type="unfinished"/>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation type="unfinished"/>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation type="unfinished"/>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>Tidak ada hasil pencarian</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>Pulihkan ke baku</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>Mohon masukan sebuah jalan pintas yang baru</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation type="unfinished"/>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation type="unfinished"/>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation type="unfinished"/>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation type="unfinished"/>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Bantuan</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>Tentang</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Keluar</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Ringraziamenti</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>Versione: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 è rilasciato secondo %2</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>Nero</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>Bianco</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>Grigio scuro</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>Grigio</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>Grigio chiaro</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>Rosso</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>Verde</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>Blu</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>Ciano</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>Magenta</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>Giallo</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>Rosso scuro</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>Verde scuro</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>Blu scuro</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>Ciano scuro</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>Magenta scuro</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>Giallo scuro</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Annulla</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Conferma</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation>Inserisci una nuova scorciatoia</translation>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation>Interrompi lettura</translation>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation>Da testo ad audio</translation>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation>Traduci</translation>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation>Cerca</translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation>Annulla</translation>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation>Sostituisci</translation>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation>Questa scorciatoia è in conflitto con %1, clicca su Aggiungi per rendere predefinita questa scorciatoia</translation>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>Inserisci una nuova scorciatoia</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>No</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation>Interrompi lettura</translation>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation>Da testo ad audio</translation>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation>Traduci</translation>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>Nessun risultato</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>Ripristina valori predefiniti</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>Inserisci una nuova scorciatoia</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>Tema</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>Tema chiaro</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>Tema scuro</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>Tema di Sistema</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Aiuto</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>Info</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Esci</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>謝辞</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>バージョン: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 は %2 の下でリリースされています</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>ブラック</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>ホワイト</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>ダークグレー</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>グレー</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>ライトグレー</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>レッド</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>グリーン</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>ブルー</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>シアン</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>マゼンタ</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>イエロー</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>ダークレッド</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>ダークグリーン</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>ダークブルー</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>ダークシアン</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>ダークマゼンタ</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>ダークイエロー</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>キャンセル</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>確認</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation type="unfinished"/>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation type="unfinished"/>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation type="unfinished"/>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation type="unfinished"/>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation type="unfinished"/>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation type="unfinished"/>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation type="unfinished"/>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation type="unfinished"/>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>新しいショートカットを入力してください</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>なし</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation type="unfinished"/>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation type="unfinished"/>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation type="unfinished"/>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>検索結果が見つかりませんでした</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>デフォルトに戻す</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>新しいショートカットを入力してください</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation type="unfinished"/>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation type="unfinished"/>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation type="unfinished"/>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation type="unfinished"/>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>ヘルプ</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>このアプリケーションについて</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>終了</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
6 <translation>승인</translation>
7 </message>
8 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
6 <translation>감사의 말</translation>
7 </message>
8 <message>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>버전: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
16 <translation>%1는 %2하에 배포됩니다</translation>
16 <translation>%1은(는) %2에 따라 배포됩니다</translation>
1717 </message>
1818 </context>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>검은색</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>흰색</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>진한 회색</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>회색</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>밝은 회색</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>빨간색</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>녹색</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>파란색</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>청록색</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>자홍색</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>노란색</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>진한 빨간색</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>진한 녹색</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>진한 파란색</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>진한 청록색</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>진한 자홍색</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>진한 노란색</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>취소</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>확인</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation>새 단축키를 입력하십시오</translation>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation>읽기 중지</translation>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation>텍스트 음성 변환</translation>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation>번역하기</translation>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation>검색</translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation>취소</translation>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation>바꾸기</translation>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation>이 단축키는 %1과 충돌합니다. 추가를 클릭하여이 단축키를 즉시 적용하십시오</translation>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125 <translation>새 단축키를 입력하세요</translation>
126 </message>
127 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
182 <translation>새 단축키를 입력하십시오</translation>
183 </message>
184 <message>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>없음</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation>읽기 중지</translation>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation>텍스트 음성 변환</translation>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation>번역하기</translation>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>검색 결과 없음</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>기본값 복원</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151 <translation>새 단축키를 입력하세요</translation>
231 <translation>새 단축키를 입력하십시오</translation>
152232 </message>
153233 </context>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>테마</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>밝은 색상 테마</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>어두운 색상 테마</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>시스템 테마</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>도움말</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164 <translation>소개</translation>
165 </message>
166 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
264 <translation>프로그램 정보</translation>
265 </message>
266 <message>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>종료</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Padėkos</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>Versija: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 yra išleista pagal %2</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>Juoda</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>Balta</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>Tamsiai pilka</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>Pilka</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>Šviesiai pilka</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>Raudona</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>Žalia</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>Mėlyna</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>Žydra</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>Purpurinė</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>Geltona</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>Tamsiai raudona</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>Tamsiai žalia</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>Tamsiai mėlyna</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>Tamsiai žydra</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>Tamsiai purpurinė</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>Tamsiai geltona</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Atsisakyti</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Patvirtinti</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation>Įveskite naują trumpinį</translation>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation>Stabdyti skaitymą</translation>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation>Garsinis teksto atkūrimas</translation>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation>Išversti</translation>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation>Ieškoti</translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation>Atsisakyti</translation>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation>Pakeisti</translation>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation>Šis trumpinys konfliktuoja su %1. Spustelėkite ant mygtuko &quot;Pridėti&quot; norėdami nedelsiant įjungti trumpinį</translation>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>Įveskite naują trumpinį</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Nėra</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation>Stabdyti skaitymą</translation>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation>Garsinis teksto atkūrimas</translation>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation>Išversti</translation>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>Nėra paieškos rezultatų</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>Atkurti numatytuosius</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>Įveskite naują trumpinį</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>Tema</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>Šviesi tema</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>Tamsi tema</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>Sistemos tema</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Žinynas</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>Apie</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Išeiti</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Penghargaan</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>Versi: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 dikeluarkan bawah %2</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>Hitam</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>Putih</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>Kelabu Gelap</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>Kelabu</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>Kelabu Cerah</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>Merah</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>Hijau</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>Biru</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>Sian</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>Magenta</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>Kuning</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>Merah Gelap</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>Hijau Gelap</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>Biru Gelap</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>Sian Gelap</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>Magenta Gelap</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>Kuning Gelap</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Batal</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Sahkan</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation>Masukkan satu pintasan baharu</translation>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation>Henti membaca</translation>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation>Teks ke Pertuturan</translation>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation>Terjemah</translation>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation>Gelintar</translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation>Batal</translation>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation>Ganti</translation>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation>Pintasan ini berkonflik dengan %1, klik pada Tambah untuk menjadikan pintasan ini berkesan serta-merta</translation>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>Sila masukkan satu pintasan baharu</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Tiada</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation>Henti membaca</translation>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation>Teks ke Pertuturan</translation>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation>Terjemah</translation>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>Tiada keputusan gelintar</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>Pulih Lalai</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>Sila masukkan satu pintasan baharu</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>Tema</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>Tema Cerah</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>Tema Gelap</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>Tema Sistem</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Bantuan</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>Perihal</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Keluar</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Anerkjennelser</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>Versjon: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 er utgitt under %2</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>Svart</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>Hvit</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>Mørk Grå</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>Grå</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>Lys Grå</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>Rød</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>Grønn</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>Blå</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>Cyan</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>Magenta</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>Gul</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>Mørk Rød</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>Mørk Grønn</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>Mørk Blå</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>Mørk Cyan</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>Mørk Magenta</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>Mørk Gul</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Avbryt</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Bekreft</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation type="unfinished"/>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation type="unfinished"/>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation type="unfinished"/>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation type="unfinished"/>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation type="unfinished"/>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation type="unfinished"/>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation type="unfinished"/>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation type="unfinished"/>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>Sett inn en ny snarvei</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Ingen</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation type="unfinished"/>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation type="unfinished"/>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation type="unfinished"/>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>Søk gav ingen resultat</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>Gjenopprett Standard</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>Skriv inn en ny snarvei</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation type="unfinished"/>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation type="unfinished"/>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation type="unfinished"/>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation type="unfinished"/>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Hjelp</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>Om</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Avslutt</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>स्वीकृतिहरू</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>संस्करण:% 1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>% 1% 2 अन्तर्गत रिलीज गरिएको छ</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>कालो</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>सेतो</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>गाढा खैरो</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>खैरो</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>हल्का खैरो</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>रातो</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>हरियो</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>नीलो</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>सायन</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>म्याजेन्टा</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>पहेंलो</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>गाढा रातो</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>गाढा हरियो</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>गाढा निलो</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>गाढा सियान</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>डार्क म्याजेन्टा</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>गाढा पहेंलो</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>रद्द गर्नुहोस्</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>निश्चित गर्नुहोस्</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation type="unfinished"/>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation type="unfinished"/>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation type="unfinished"/>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation type="unfinished"/>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation type="unfinished"/>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation type="unfinished"/>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation type="unfinished"/>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation type="unfinished"/>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>कृपया नयाँ सर्टकट इनपुट गर्नुहोस्</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>कुनै पनि होइन</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation type="unfinished"/>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation type="unfinished"/>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation type="unfinished"/>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>कुनै खोजी परिणाम छैन</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>फेरी पहिलाकै अवस्था मा लैजाऊ</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>कृपया नयाँ सर्टकट प्रविष्ट गर्नुहोस्</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation type="unfinished"/>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation type="unfinished"/>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation type="unfinished"/>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation type="unfinished"/>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>मद्दत</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>बारेमा</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>बाहिर निस्कनुहोस्</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Erkenningen</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>Versie: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 is uitgebracht onder de %2</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>Zwart</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>Wit</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>Donkergrijs</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>Grijs</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>Lichtgrijs</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>Rood</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>Groen</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>Blauw</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>Groenblauw</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>Magenta</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>Geel</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>Donkerrood</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>Donkergroen</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>Donkerblauw</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>Donkergroenblauw</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>Donkermagenta</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>Donkergeel</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Annuleren</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Bevestigen</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation>Druk op een nieuwe sneltoets</translation>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation>Stoppen met voorlezen</translation>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation>Tekst-naar-spraak</translation>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation>Vertalen</translation>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation>Zoeken</translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation>Annuleren</translation>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation>Vervangen</translation>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation>Deze sneltoets is al in gebruik voor &apos;%1&apos;. Klik op &apos;Toevoegen&apos; om déze sneltoets toe te wijzen.</translation>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>Druk op een nieuwe sneltoets</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Geen</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation>Stoppen met voorlezen</translation>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation>Tekst-naar-spraak</translation>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation>Vertalen</translation>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>Geen zoekresultaten</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>Standaardwaarden herstellen</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>Druk op een nieuwe sneltoets</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>Thema</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>Licht thema</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>Donker thema</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>Systeemthema</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Hulp</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>Over</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Afsluiten</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Podziękowania</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>Wersja: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 zostało wydane w oparciu o %2</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>Czarny</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>Biały</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>Ciemnoszary</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>Szary</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>Jasnoszary</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>Czerwony</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>Zielony</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>Niebieski</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>Turkusowy</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>Purpurowy</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>Żółty</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>Ciemnoczerwony</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>Ciemnozielony</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>Ciemnoniebieski</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>Ciemnoturkusowy</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>Ciemnopurpurowy</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>Ciemnożółty</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Anuluj</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Potwierdź</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation>Wprowadź nowy skrót</translation>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation type="unfinished"/>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation type="unfinished"/>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation type="unfinished"/>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation>Szukaj</translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation>Anuluj</translation>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation>Zmień</translation>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation>Ten skrót powoduje konflikt z %1, kliknij Dodaj, aby ten skrót od razu zadziałał</translation>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>Prosimy wprowadzić nowy skrót</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Brak</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation type="unfinished"/>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation type="unfinished"/>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation type="unfinished"/>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>Brak wyników wyszukiwania</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>Przywróć domyślne</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>Prosimy wprowadzić nowy skrót</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>Motyw</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>Jasny motyw</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>Ciemny motyw</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>Motyw systemowy</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Pomoc</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>O programie</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Wyjdź</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Agradecimentos</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>Versão: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 é publicada sobre %2</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>Preto</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>Branco</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>Cinzento escuro</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>Cinzento</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>Cinzento Claro</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>Vermelho</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>Verde</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>Azul</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>Ciano</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>Magenta</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>Amarelo</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>Vermelho Escuro</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>Verde Escuro</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>Azul Escuro</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>Ciano Escuro</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>Magenta Escuro</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>Amarelo Escuro</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Cancelar</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Confirmar</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation>Introduza um novo atalho</translation>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation>Parar a leitura</translation>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation>Texto para voz</translation>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation>Traduzir</translation>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation>Pesquisar</translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation>Cancelar</translation>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation>Substituir</translation>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation>Esse atalho entra em conflito com %1, clicar em Adicionar para tornar esse atalho efetivo imediatamente</translation>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125 <translation>Por favor, crie um novo atalho</translation>
126 </message>
127 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
182 <translation>Introduza um novo atalho</translation>
183 </message>
184 <message>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Nenhum</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation>Parar a leitura</translation>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation>Texto para voz</translation>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation>Traduzir</translation>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>Nenhum resultado da pesquisa</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>Restaurar Predefinições</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151 <translation>Por favor, crie um novo atalho</translation>
231 <translation>Introduza um novo atalho</translation>
152232 </message>
153233 </context>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>Tema</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>Tema Claro</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>Tema Escuro</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>Tema do Sistema</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Ajuda</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>Sobre</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Sair</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Agradecimentos</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>Versão: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 é lançado em %2</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>Preto</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>Branco</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>Cinza Escuro</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>Cinza</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>Cinza Claro</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>Vermelho</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>Verde</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>Azul</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>Ciano</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>Magenta</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>Amarelo</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>Vermelho Escuro</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>Verde Escuro</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>Azul Escuro</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>Ciano Escuro</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>Magenta Escuro</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>Amarelo Escuro</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Cancelar</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Confirmar</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation>Digite o Novo Atalho</translation>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation>Parar de ler</translation>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation>Texto em Voz</translation>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation>Traduzir</translation>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation>Pesquisar</translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation>Cancelar</translation>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation>Substituir</translation>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation>Este atalho entra em conflito com %1. Clique em Adicionar para efetivar esse atalho</translation>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125 <translation>Por favor, insira um novo atalho</translation>
126 </message>
127 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
182 <translation>Insira o Novo Atalho</translation>
183 </message>
184 <message>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Nenhum</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation>Parar de ler</translation>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation>Texto em Voz</translation>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation>Traduzir</translation>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138 <translation>Nenhum resultado da pesquisa</translation>
139 </message>
140 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
218 <translation>Nenhum Resultado</translation>
219 </message>
220 <message>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143 <translation>Restauração padrão</translation>
223 <translation>Restaurar Padrões</translation>
144224 </message>
145225 </context>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151 <translation>Digite um novo atalho</translation>
231 <translation>Digite o Novo Atalho</translation>
152232 </message>
153233 </context>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>Tema</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>Claro</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>Escuro</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>Padrão</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Ajuda</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>Sobre</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Sair</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Выражение признательности</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>Версия: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 выпущен под %2</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>Черный</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>Белый</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>Темно-Серый</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>Серый</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>Светло-Серый</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>Красный</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>Зеленый</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>Голубой</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>Сине-Зеленый</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>Пурпурный</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>Желтый</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>Темно-Красный</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>Темно-Зеленый</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>Темно-Синий</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>Темно-Сине-Зеленый</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>Темно-Пурпурный</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>Темно-Желтый</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Отмена</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Подтвердить</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation>Введите новое сочетание клавиш</translation>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation type="unfinished"/>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation type="unfinished"/>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation type="unfinished"/>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation>Поиск</translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation>Отмена</translation>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation>Заменить</translation>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation>Этот сщчетнаие конфликтует с %1, нажмите кнопку Добавить, чтобы немедленно применить это сочетание</translation>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>Пожалуйста введите новое сочетание</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Ничего</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation type="unfinished"/>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation type="unfinished"/>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation type="unfinished"/>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>Ничего не найдено</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>Восстановить значения По-умолчанию</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>Пожалуйста введите новое сочетание</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>Тема</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>Светлая Тема</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>Темная Тема</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>Тема Системы</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Помощь</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>О программе</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Выход</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Poďakovanie</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>Verzia: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 je vydaná pod %2</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>Čierna</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>Biela</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>Tmavosivá</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>Sivá</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>Svetlosivá</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>Červená</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>Zelená</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>Modrá</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>Tyrkysová</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>Purpurová</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>Žltá</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>Tmavočervená</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>Tmavozelená</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>Tmavomodrá</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>Tmavotyrkysová</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>Tmavopurpurová</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>Tmavožltá</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Zrušiť</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Potvrdiť</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation type="unfinished"/>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation type="unfinished"/>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation type="unfinished"/>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation type="unfinished"/>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation type="unfinished"/>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation type="unfinished"/>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation type="unfinished"/>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation type="unfinished"/>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>Prosím zadajte novú skratku</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Nič</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation type="unfinished"/>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation type="unfinished"/>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation type="unfinished"/>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>Žiadny výsledok vyhľadávania</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>Obnoviť predvolené nastavenia</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>Zadajte novú skratku</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation type="unfinished"/>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation type="unfinished"/>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation type="unfinished"/>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation type="unfinished"/>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Pomoc</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>O</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Ukončiť</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Zasluge</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>Različica: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 je izdana pod %2</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>Črna</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>Bela</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>Temno siva</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>Siva</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>Svetlo siva</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>Rdeča</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>Zelena</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>Modra</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>Cian</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>Magenta</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>Rumena</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>Temno rdeča</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>Temno zelena</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>Temno modra</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>Temna cian</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>Temna magenta</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>Temno rumena</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Prekliči</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Potrdi</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation type="unfinished"/>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation type="unfinished"/>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation type="unfinished"/>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation type="unfinished"/>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation type="unfinished"/>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation type="unfinished"/>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation type="unfinished"/>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation type="unfinished"/>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>Prosim, vnesite novo bližnjico</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Nič</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation type="unfinished"/>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation type="unfinished"/>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation type="unfinished"/>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>Ni rezultatov iskanja</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>Obnovi privzeto</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>Prosim, vnesite novo bližnjico</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation type="unfinished"/>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation type="unfinished"/>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation type="unfinished"/>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation type="unfinished"/>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Pomoč</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>O tem</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Izhod</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Заслуге</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>Верзија: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 је објављен под %2</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>Црна</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>Бела</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>Тамно сива</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>Сива</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>Светло сива</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>Црвена</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>Зелена</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>Плава</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>Цијан</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>Магента</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>Жута</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>Тамно црвена</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>Тамно зелена</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>Тамно плава</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>Тамно цијан</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>Тамно магента</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>Тамно жута</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Откажи</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Потврди</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation>Унесите нову пречицу</translation>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation>Заустави читање</translation>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation>Текст у говор</translation>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation>Преведи</translation>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation>Претражи</translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation>Откажи</translation>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation>Замени</translation>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation>Ова пречица је у сукобу са %1, кликните на Додај да пречица ступи на снагу</translation>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125 <translation>Молимо унесите нову пречицу</translation>
126 </message>
127 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
182 <translation>Унесите нову пречицу</translation>
183 </message>
184 <message>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Ништа</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation>Заустави читање</translation>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation>Текст у говор</translation>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation>Преведи</translation>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>Нема резултата претраге</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>Врати Подразумевано</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151 <translation>Молимо унесите нову пречицу</translation>
231 <translation>Унесите нову пречицу</translation>
152232 </message>
153233 </context>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>Тема</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>Светла тема</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>Тамна тема</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>Системска тема</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Помоћ</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>О програму</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Изађи</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Teşekkürler</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>Sürüm: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1, %2 koşulları altında yayınlanmıştır</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>Siyah</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>Beyaz</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>Koyu Gri</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>Gri</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>Açık Gri</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>Kırmızı</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>Yeşil</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>Mavi</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>Cam Göbeği</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>Mor</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>Sarı</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>Koyu Kırmızı</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>Koyu Yeşil</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>Koyu Mavi</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>Koyu Cam Göbeği</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>Koyu Mor</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>Koyu Sarı</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>İptal</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Onayla</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation>Yeni bir kısayol gir</translation>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation>Okumayı bırak</translation>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation>Metni Sese Dönüştür</translation>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation>Çeviri</translation>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation>Ara</translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation>İptal</translation>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation>Değiştir</translation>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation>Bu kısayol %1 ile çakışıyor, bu kısayolu hemen etkin hale getirmek için Ekle&apos;yi tıkla</translation>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125 <translation>Lütfen yeni bir kısayol yazın</translation>
126 </message>
127 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
182 <translation>Lütfen yeni bir kısayol gir</translation>
183 </message>
184 <message>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Hiçbiri</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation>Okumayı bırak</translation>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation>Metni Sese Dönüştür</translation>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation>Çeviri</translation>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>Aramada herhangi bir sonuç bulunamadı</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>Varsayılanları Geri Yükle</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>Lütfen yeni bir kısayol gir</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>Tema</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>Açık Tema</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>Koyu Tema</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>Sistem Teması</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Yardım</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>Hakkında</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169 <translation>Çık</translation>
269 <translation>Çıkış</translation>
170270 </message>
171271 </context>
172272 </TS>
0 <?xml version="1.0" ?><!DOCTYPE TS><TS language="ug" version="2.1">
1 <context>
2 <name>DAboutDialog</name>
3 <message>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
5 <source>Acknowledgements</source>
6 <translation>مۇقىملاشتۇرۇش </translation>
7 </message>
8 <message>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
10 <source>Version: %1</source>
11 <translation>نەشرى : %1</translation>
12 </message>
13 <message>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
15 <source>%1 is released under %2</source>
16 <translation>%1 قۇيۇپ بېرىش ئاستىداi %2</translation>
17 </message>
18 </context>
19 <context>
20 <name>DCrumbEdit</name>
21 <message>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
23 <source>Black</source>
24 <translation>قارا رەڭ</translation>
25 </message>
26 <message>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
28 <source>White</source>
29 <translation>ئاق رەڭ</translation>
30 </message>
31 <message>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
33 <source>Dark Gray</source>
34 <translation>قېنىق كۈلرەڭ </translation>
35 </message>
36 <message>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
38 <source>Gray</source>
39 <translation>كۈلرەڭ</translation>
40 </message>
41 <message>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
43 <source>Light Gray</source>
44 <translation> سۇس كۈلرەڭ </translation>
45 </message>
46 <message>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
48 <source>Red</source>
49 <translation> قىزىل رەڭ </translation>
50 </message>
51 <message>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
53 <source>Green</source>
54 <translation> يېشىل رەڭ </translation>
55 </message>
56 <message>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
58 <source>Blue</source>
59 <translation> كۆك رەڭ </translation>
60 </message>
61 <message>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
63 <source>Cyan</source>
64 <translation> كۆك يېشىل رەڭ </translation>
65 </message>
66 <message>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
68 <source>Magenta</source>
69 <translation>ماگېن </translation>
70 </message>
71 <message>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
73 <source>Yellow</source>
74 <translation> سېرىق رەڭ </translation>
75 </message>
76 <message>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
78 <source>Dark Red</source>
79 <translation> قېنىق قىزىل رەڭ </translation>
80 </message>
81 <message>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
83 <source>Dark Green</source>
84 <translation> قېنىق يېشىل رەڭ </translation>
85 </message>
86 <message>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
88 <source>Dark Blue</source>
89 <translation> قېنىق كۆك رەڭ </translation>
90 </message>
91 <message>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
93 <source>Dark Cyan</source>
94 <translation> قېنىق كۆك يېشىل رەڭ </translation>
95 </message>
96 <message>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
98 <source>Dark Magenta</source>
99 <translation>قېنىق ماگېن </translation>
100 </message>
101 <message>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103 <source>Dark Yellow</source>
104 <translation> قېنىق سېرىق رەڭ </translation>
105 </message>
106 </context>
107 <context>
108 <name>DInputDialog</name>
109 <message>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111 <source>Cancel</source>
112 <translation> ئەمەلدىن قالدۇرۇش </translation>
113 </message>
114 <message>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116 <source>Confirm</source>
117 <translation>مۇقىملاش</translation>
118 </message>
119 </context>
120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation type="unfinished"/>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation type="unfinished"/>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation type="unfinished"/>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation type="unfinished"/>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation> ئىزدەش </translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation type="unfinished"/>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation type="unfinished"/>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation type="unfinished"/>
175 </message>
176 </context>
177 <context>
178 <name>DShortcutEdit</name>
179 <message>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
181 <source>Please input a new shortcut</source>
182 <translation>يېڭى بىر تېزلەتمە شەكلىنى كىرگۈزۈڭ</translation>
183 </message>
184 <message>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
186 <source>None</source>
187 <translation>قۇرۇق</translation>
188 </message>
189 </context>
190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation type="unfinished"/>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation type="unfinished"/>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation type="unfinished"/>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
214 <name>QObject</name>
215 <message>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
217 <source>No search result</source>
218 <translation>ئىزدەش نەتىجىسى يوق</translation>
219 </message>
220 <message>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
222 <source>Restore Defaults</source>
223 <translation>ئەسلىدىكى تەڭشەك ھالىتىگە قايتۇرۇش</translation>
224 </message>
225 </context>
226 <context>
227 <name>ShortcutEdit</name>
228 <message>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
230 <source>Please enter a new shortcut</source>
231 <translation>يېڭى بىر تېزلەتمە شەكلىنى كىرگۈزۈڭ</translation>
232 </message>
233 </context>
234 <context>
235 <name>TitleBarMenu</name>
236 <message>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>ئۇسلۇب</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>يورۇق ئۇسلۇب</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>قارا ئۇسلۇب</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>سېستىما ئۇسلۇبى</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
258 <source>Help</source>
259 <translation>ياردەم</translation>
260 </message>
261 <message>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
263 <source>About</source>
264 <translation>ھەققىدە</translation>
265 </message>
266 <message>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
268 <source>Exit</source>
269 <translation>چېكىنىش</translation>
270 </message>
271 </context>
272 </TS>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>Подяки</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>Версія: %1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 випущено за умов дотримання %2</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>Чорний</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>Білий</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>Темно сірий</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>Сірий</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>Світло сірий</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>Червоний</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>Зелений</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>Синій</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>Бірюзовий</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>Пурпурний</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>Жовтий</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>Темно-червоний</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>Темно-зелений</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>Темно-синій</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>Темно-бірюзовий</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>Темно-пурпурний</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>Темно-жовтий</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>Скасувати</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>Підтвердити</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation>Введіть новий ярлик</translation>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation>Припинити читання</translation>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation>Озвучення тексту</translation>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation>Перекласти</translation>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation>Пошук</translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation>Скасувати</translation>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation>Замінити</translation>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation>Цей ярлик конфліктує з %1, натисніть кнопку Додати, щоб негайно застосувати цей ярлик</translation>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>Будь ласка, вкажіть нове клавіатурне скорочення</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>Немає</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation>Припинити читання</translation>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation>Озвучення тексту</translation>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation>Перекласти</translation>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>Нічого не знайдено</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>Відновити значення за замовчуванням</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>Будь ласка, введіть новий ярлик</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>Тема</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>Світла тема</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>Темна тема</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>Тема системи</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>Довідка</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>Про програму</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>Вийти</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>鸣谢</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>版本:%1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1遵循%2协议发布</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>黑色</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>白色</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>深灰色</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>灰色</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>浅灰色</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>红色</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>绿色</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>蓝色</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>青色</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>洋红色</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>黄色</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>深红色</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>深绿色</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>深蓝色</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>深青色</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>深紫红色</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>深黄色</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>取消</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>确定</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation>请输入新的快捷键</translation>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation>停止朗读</translation>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation>语音朗读</translation>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation>翻译</translation>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation>语音听写</translation>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation>搜索</translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation>取消</translation>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation>替换</translation>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation>此快捷键与%1冲突,点击添加使这个快捷键立即生效</translation>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>请输入新的快捷键</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>无</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation>停止朗读</translation>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation>语音朗读</translation>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation>翻译</translation>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation>语音听写</translation>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>无搜索结果</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143 <translation>恢复默认设置</translation>
223 <translation>恢复默认</translation>
144224 </message>
145225 </context>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>请输入新的快捷键</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>主题</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>浅色</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>深色</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>跟随系统</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>帮助</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>关于</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>退出</translation>
170270 </message>
11 <context>
22 <name>DAboutDialog</name>
33 <message>
4 <location filename="../src/widgets/daboutdialog.cpp" line="191"/>
4 <location filename="../widgets/daboutdialog.cpp" line="180"/>
55 <source>Acknowledgements</source>
66 <translation>鳴謝</translation>
77 </message>
88 <message>
9 <location filename="../src/widgets/dapplication.cpp" line="712"/>
9 <location filename="../widgets/dapplication.cpp" line="1071"/>
1010 <source>Version: %1</source>
1111 <translation>版本:%1</translation>
1212 </message>
1313 <message>
14 <location filename="../src/widgets/dapplication.cpp" line="716"/>
14 <location filename="../widgets/dapplication.cpp" line="1075"/>
1515 <source>%1 is released under %2</source>
1616 <translation>%1 遵循 %2 發布</translation>
1717 </message>
1919 <context>
2020 <name>DCrumbEdit</name>
2121 <message>
22 <location filename="../src/widgets/dcrumbedit.cpp" line="530"/>
22 <location filename="../widgets/dcrumbedit.cpp" line="805"/>
2323 <source>Black</source>
2424 <translation>黑色</translation>
2525 </message>
2626 <message>
27 <location filename="../src/widgets/dcrumbedit.cpp" line="533"/>
27 <location filename="../widgets/dcrumbedit.cpp" line="808"/>
2828 <source>White</source>
2929 <translation>白色</translation>
3030 </message>
3131 <message>
32 <location filename="../src/widgets/dcrumbedit.cpp" line="536"/>
32 <location filename="../widgets/dcrumbedit.cpp" line="811"/>
3333 <source>Dark Gray</source>
3434 <translation>暗灰</translation>
3535 </message>
3636 <message>
37 <location filename="../src/widgets/dcrumbedit.cpp" line="539"/>
37 <location filename="../widgets/dcrumbedit.cpp" line="814"/>
3838 <source>Gray</source>
3939 <translation>灰色</translation>
4040 </message>
4141 <message>
42 <location filename="../src/widgets/dcrumbedit.cpp" line="542"/>
42 <location filename="../widgets/dcrumbedit.cpp" line="817"/>
4343 <source>Light Gray</source>
4444 <translation>亮灰</translation>
4545 </message>
4646 <message>
47 <location filename="../src/widgets/dcrumbedit.cpp" line="545"/>
47 <location filename="../widgets/dcrumbedit.cpp" line="820"/>
4848 <source>Red</source>
4949 <translation>紅色</translation>
5050 </message>
5151 <message>
52 <location filename="../src/widgets/dcrumbedit.cpp" line="548"/>
52 <location filename="../widgets/dcrumbedit.cpp" line="823"/>
5353 <source>Green</source>
5454 <translation>綠色</translation>
5555 </message>
5656 <message>
57 <location filename="../src/widgets/dcrumbedit.cpp" line="551"/>
57 <location filename="../widgets/dcrumbedit.cpp" line="826"/>
5858 <source>Blue</source>
5959 <translation>藍色</translation>
6060 </message>
6161 <message>
62 <location filename="../src/widgets/dcrumbedit.cpp" line="554"/>
62 <location filename="../widgets/dcrumbedit.cpp" line="829"/>
6363 <source>Cyan</source>
6464 <translation>青色</translation>
6565 </message>
6666 <message>
67 <location filename="../src/widgets/dcrumbedit.cpp" line="557"/>
67 <location filename="../widgets/dcrumbedit.cpp" line="832"/>
6868 <source>Magenta</source>
6969 <translation>洋紅</translation>
7070 </message>
7171 <message>
72 <location filename="../src/widgets/dcrumbedit.cpp" line="560"/>
72 <location filename="../widgets/dcrumbedit.cpp" line="835"/>
7373 <source>Yellow</source>
7474 <translation>黃色</translation>
7575 </message>
7676 <message>
77 <location filename="../src/widgets/dcrumbedit.cpp" line="563"/>
77 <location filename="../widgets/dcrumbedit.cpp" line="838"/>
7878 <source>Dark Red</source>
7979 <translation>暗紅</translation>
8080 </message>
8181 <message>
82 <location filename="../src/widgets/dcrumbedit.cpp" line="566"/>
82 <location filename="../widgets/dcrumbedit.cpp" line="841"/>
8383 <source>Dark Green</source>
8484 <translation>暗綠</translation>
8585 </message>
8686 <message>
87 <location filename="../src/widgets/dcrumbedit.cpp" line="569"/>
87 <location filename="../widgets/dcrumbedit.cpp" line="844"/>
8888 <source>Dark Blue</source>
8989 <translation>暗藍</translation>
9090 </message>
9191 <message>
92 <location filename="../src/widgets/dcrumbedit.cpp" line="572"/>
92 <location filename="../widgets/dcrumbedit.cpp" line="847"/>
9393 <source>Dark Cyan</source>
9494 <translation>暗青</translation>
9595 </message>
9696 <message>
97 <location filename="../src/widgets/dcrumbedit.cpp" line="575"/>
97 <location filename="../widgets/dcrumbedit.cpp" line="850"/>
9898 <source>Dark Magenta</source>
9999 <translation>暗洋紅</translation>
100100 </message>
101101 <message>
102 <location filename="../src/widgets/dcrumbedit.cpp" line="578"/>
102 <location filename="../widgets/dcrumbedit.cpp" line="853"/>
103103 <source>Dark Yellow</source>
104104 <translation>暗黃</translation>
105105 </message>
107107 <context>
108108 <name>DInputDialog</name>
109109 <message>
110 <location filename="../src/widgets/dinputdialog.cpp" line="42"/>
110 <location filename="../widgets/dinputdialog.cpp" line="42"/>
111111 <source>Cancel</source>
112112 <translation>取消</translation>
113113 </message>
114114 <message>
115 <location filename="../src/widgets/dinputdialog.cpp" line="43"/>
115 <location filename="../widgets/dinputdialog.cpp" line="43"/>
116116 <source>Confirm</source>
117117 <translation>確定</translation>
118118 </message>
119119 </context>
120120 <context>
121 <name>DKeySequenceEdit</name>
122 <message>
123 <location filename="../widgets/dkeysequenceedit.cpp" line="41"/>
124 <source>Enter a new shortcut</source>
125 <translation>請輸入新快速鍵</translation>
126 </message>
127 </context>
128 <context>
129 <name>DLineEdit</name>
130 <message>
131 <location filename="../widgets/dlineedit.cpp" line="434"/>
132 <source>Stop reading</source>
133 <translation type="unfinished"/>
134 </message>
135 <message>
136 <location filename="../widgets/dlineedit.cpp" line="436"/>
137 <source>Text to Speech</source>
138 <translation type="unfinished"/>
139 </message>
140 <message>
141 <location filename="../widgets/dlineedit.cpp" line="454"/>
142 <source>Translate</source>
143 <translation type="unfinished"/>
144 </message>
145 <message>
146 <location filename="../widgets/dlineedit.cpp" line="470"/>
147 <source>Speech To Text</source>
148 <translation type="unfinished"/>
149 </message>
150 </context>
151 <context>
152 <name>DSearchEdit</name>
153 <message>
154 <location filename="../widgets/dsearchedit.cpp" line="278"/>
155 <source>Search</source>
156 <translation>搜尋</translation>
157 </message>
158 </context>
159 <context>
160 <name>DSettingsDialog</name>
161 <message>
162 <location filename="../widgets/dsettingswidgetfactory.cpp" line="77"/>
163 <source>Cancel</source>
164 <translation>取消</translation>
165 </message>
166 <message>
167 <location filename="../widgets/dsettingswidgetfactory.cpp" line="78"/>
168 <source>Replace</source>
169 <translation>取代</translation>
170 </message>
171 <message>
172 <location filename="../widgets/dsettingswidgetfactory.cpp" line="80"/>
173 <source>This shortcut conflicts with %1, click on Add to make this shortcut effective immediately</source>
174 <translation>此快速鍵與 %1 衝突,請按下「加入」以使此快速鍵立即生效。</translation>
175 </message>
176 </context>
177 <context>
121178 <name>DShortcutEdit</name>
122179 <message>
123 <location filename="../src/widgets/dshortcutedit.cpp" line="31"/>
180 <location filename="../widgets/dshortcutedit.cpp" line="31"/>
124181 <source>Please input a new shortcut</source>
125182 <translation>請輸入新快速鍵</translation>
126183 </message>
127184 <message>
128 <location filename="../src/widgets/dshortcutedit.cpp" line="102"/>
185 <location filename="../widgets/dshortcutedit.cpp" line="102"/>
129186 <source>None</source>
130187 <translation>無</translation>
131188 </message>
132189 </context>
133190 <context>
191 <name>DTextEdit</name>
192 <message>
193 <location filename="../widgets/dtextedit.cpp" line="132"/>
194 <source>Stop reading</source>
195 <translation type="unfinished"/>
196 </message>
197 <message>
198 <location filename="../widgets/dtextedit.cpp" line="134"/>
199 <source>Text to Speech</source>
200 <translation type="unfinished"/>
201 </message>
202 <message>
203 <location filename="../widgets/dtextedit.cpp" line="152"/>
204 <source>Translate</source>
205 <translation type="unfinished"/>
206 </message>
207 <message>
208 <location filename="../widgets/dtextedit.cpp" line="168"/>
209 <source>Speech To Text</source>
210 <translation type="unfinished"/>
211 </message>
212 </context>
213 <context>
134214 <name>QObject</name>
135215 <message>
136 <location filename="../src/widgets/dsimplelistview.cpp" line="1235"/>
216 <location filename="../widgets/dsimplelistview.cpp" line="1333"/>
137217 <source>No search result</source>
138218 <translation>沒有搜尋結果</translation>
139219 </message>
140220 <message>
141 <location filename="../src/widgets/private/settings/content.cpp" line="189"/>
221 <location filename="../widgets/private/settings/content.cpp" line="284"/>
142222 <source>Restore Defaults</source>
143223 <translation>還原預設值</translation>
144224 </message>
146226 <context>
147227 <name>ShortcutEdit</name>
148228 <message>
149 <location filename="../src/widgets/private/settings/shortcutedit.cpp" line="119"/>
229 <location filename="../widgets/private/settings/shortcutedit.cpp" line="116"/>
150230 <source>Please enter a new shortcut</source>
151231 <translation>請輸入新快速鍵</translation>
152232 </message>
154234 <context>
155235 <name>TitleBarMenu</name>
156236 <message>
157 <location filename="../src/widgets/dtitlebar.cpp" line="449"/>
237 <location filename="../widgets/dtitlebar.cpp" line="488"/>
238 <source>Theme</source>
239 <translation>主題</translation>
240 </message>
241 <message>
242 <location filename="../widgets/dtitlebar.cpp" line="489"/>
243 <source>Light Theme</source>
244 <translation>亮色主題</translation>
245 </message>
246 <message>
247 <location filename="../widgets/dtitlebar.cpp" line="490"/>
248 <source>Dark Theme</source>
249 <translation>暗色主題</translation>
250 </message>
251 <message>
252 <location filename="../widgets/dtitlebar.cpp" line="491"/>
253 <source>System Theme</source>
254 <translation>系統主題</translation>
255 </message>
256 <message>
257 <location filename="../widgets/dtitlebar.cpp" line="514"/>
158258 <source>Help</source>
159259 <translation>說明</translation>
160260 </message>
161261 <message>
162 <location filename="../src/widgets/dtitlebar.cpp" line="456"/>
262 <location filename="../widgets/dtitlebar.cpp" line="521"/>
163263 <source>About</source>
164264 <translation>關於</translation>
165265 </message>
166266 <message>
167 <location filename="../src/widgets/dtitlebar.cpp" line="463"/>
267 <location filename="../widgets/dtitlebar.cpp" line="528"/>
168268 <source>Exit</source>
169269 <translation>離開</translation>
170270 </message>
+0
-1
src/util/DSvgRenderer less more
0 #include "dsvgrenderer.h"
+0
-1
src/util/DThumbnailProvider less more
0 #include "dthumbnailprovider.h"
+0
-1
src/util/DTrashManager less more
0 #include "dtrashmanager.h"
+0
-1
src/util/DWindowManagerHelper less more
0 #include "dwindowmanagerhelper.h"
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #include "dapplicationsettings.h"
21
22 #include <DGuiApplicationHelper>
23 #include <DObjectPrivate>
24
25 #ifdef Q_OS_LINUX
26 #include <QGSettings>
27 #endif
28 #include <QCoreApplication>
29
30 #define PALETTE_TYPE_KEY "paletteType"
31
32 DGUI_USE_NAMESPACE
33 DWIDGET_BEGIN_NAMESPACE
34
35 class DApplicationSettingsPrivate : public DCORE_NAMESPACE::DObjectPrivate
36 {
37 public:
38 DApplicationSettingsPrivate(DApplicationSettings *qq);
39 void init();
40 void _q_onChanged(const QString &key);
41 void _q_onPaletteTypeChanged();
42
43 #ifdef Q_OS_LINUX
44 QGSettings *genericSettings;
45 #endif
46
47 D_DECLARE_PUBLIC(DApplicationSettings)
48 };
49
50 DApplicationSettingsPrivate::DApplicationSettingsPrivate(DApplicationSettings *qq)
51 : DObjectPrivate(qq)
52 {
53
54 }
55
56 void DApplicationSettingsPrivate::init()
57 {
58 #ifdef Q_OS_LINUX
59 D_Q(DApplicationSettings);
60
61 const QString &on = qApp->organizationName();
62 const QString &name = qApp->applicationName();
63
64 if (on.isEmpty() || name.isEmpty()) {
65 qFatal("%s\n", "Must set organizationName & applicationName");
66 std::abort();
67 }
68
69 if (!QGSettings::isSchemaInstalled("com.deepin.dtk"))
70 return;
71
72 genericSettings = new QGSettings("com.deepin.dtk", QString("/dtk/%2/%3/").arg(on, name).toLocal8Bit(), q);
73 // 初始化设置
74 _q_onChanged(PALETTE_TYPE_KEY);
75
76 q->connect(genericSettings, SIGNAL(changed(const QString &)), q, SLOT(_q_onChanged(const QString &)));
77 q->connect(DGuiApplicationHelper::instance(), SIGNAL(paletteTypeChanged(ColorType)),
78 q, SLOT(_q_onPaletteTypeChanged()));
79 #endif
80 }
81
82 void DApplicationSettingsPrivate::_q_onChanged(const QString &key)
83 {
84 #ifdef Q_OS_LINUX
85 if (key != PALETTE_TYPE_KEY)
86 return;
87
88 const QString &palette_type = genericSettings->get(PALETTE_TYPE_KEY).toString();
89
90 if (palette_type == "LightType") {
91 DGuiApplicationHelper::instance()->setPaletteType(DGuiApplicationHelper::LightType);
92 } else if (palette_type == "DarkType") {
93 DGuiApplicationHelper::instance()->setPaletteType(DGuiApplicationHelper::DarkType);
94 } else if (palette_type == "UnknownType") {
95 DGuiApplicationHelper::instance()->setPaletteType(DGuiApplicationHelper::UnknownType);
96 }
97 #endif
98 }
99
100 void DApplicationSettingsPrivate::_q_onPaletteTypeChanged()
101 {
102 #ifdef Q_OS_LINUX
103 switch (DGuiApplicationHelper::instance()->paletteType()) {
104 case DGuiApplicationHelper::LightType:
105 genericSettings->set(PALETTE_TYPE_KEY, "LightType");
106 break;
107 case DGuiApplicationHelper::DarkType:
108 genericSettings->set(PALETTE_TYPE_KEY, "DarkType");
109 break;
110 default:
111 genericSettings->set(PALETTE_TYPE_KEY, "UnknownType");
112 break;
113 }
114 #endif
115 }
116
117
118 /*!
119 * \~chinese \class DApplicationSettings
120 * \~chinese \brief DApplicationSettings保存应用程序的设置
121 * \~chinese \row \li DApplicationSettings存储程序的通用性设置的信息,如当前选择的主题
122 */
123
124 /*!
125 * \~chinese \brief DApplicationSettings::DApplicationSettings构造函数
126 * \~chinese \param parent参数被发送到 QObject 构造函数
127 */
128 DApplicationSettings::DApplicationSettings(QObject *parent)
129 : QObject(parent)
130 , DObject(*new DApplicationSettingsPrivate(this))
131 {
132 d_func()->init();
133 }
134
135 DWIDGET_END_NAMESPACE
136
137 #include "moc_dapplicationsettings.cpp"
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #ifndef DAPPLICATIONSETTINGS_H
21 #define DAPPLICATIONSETTINGS_H
22
23 #include <dtkwidget_global.h>
24 #include <DObject>
25
26 DWIDGET_BEGIN_NAMESPACE
27
28 class DApplicationSettingsPrivate;
29 class DApplicationSettings : public QObject, public DCORE_NAMESPACE::DObject
30 {
31 Q_OBJECT
32 D_DECLARE_PRIVATE(DApplicationSettings)
33
34 public:
35 explicit DApplicationSettings(QObject *parent = nullptr);
36
37 private:
38 D_PRIVATE_SLOT(void _q_onChanged(const QString &))
39 D_PRIVATE_SLOT(void _q_onPaletteTypeChanged())
40 };
41
42 DWIDGET_END_NAMESPACE
43
44 #endif // DAPPLICATIONSETTINGS_H
1515 */
1616
1717 #include <DObjectPrivate>
18 #include <DGuiApplicationHelper>
1819
1920 #include "dfileiconprovider.h"
2021
9596 gnome_icon_lookup_sync = (Ptr_gnome_icon_lookup_sync)QLibrary::resolve(QLatin1String("gnomeui-2"), 0, "gnome_icon_lookup_sync");
9697 gnome_vfs_init = (Ptr_gnome_vfs_init)QLibrary::resolve(QLatin1String("gnomevfs-2"), 0, "gnome_vfs_init");
9798
98 gtk_icon_theme_get_default = (Ptr_gtk_icon_theme_get_default)QLibrary::resolve(QLatin1String("gtk-x11-2.0"), 0, "gtk_icon_theme_get_default");
99 if (DGUI_NAMESPACE::DGuiApplicationHelper::instance()->isXWindowPlatform())
100 gtk_icon_theme_get_default = (Ptr_gtk_icon_theme_get_default)QLibrary::resolve(QLatin1String("gtk-x11-2.0"), 0, "gtk_icon_theme_get_default");
99101 #endif
100102 }
101103
66
77 DWIDGET_BEGIN_NAMESPACE
88
9 /*!
10 * \~chinese \brief DRegionMonitor::DRegionMonitor 这个类已经废弃不用,请使用libdtkgui
11 * \~chinese \param parent
12 */
913 DRegionMonitor::DRegionMonitor(QObject *parent)
1014 : QObject(parent),
1115 DObject(*new DRegionMonitorPrivate(this))
88 DWIDGET_BEGIN_NAMESPACE
99
1010 class DRegionMonitorPrivate;
11 class DRegionMonitor : public QObject, public DTK_CORE_NAMESPACE::DObject
11 class D_DECL_DEPRECATED_X("Use libdtkgui") DRegionMonitor : public QObject, public DTK_CORE_NAMESPACE::DObject
1212 {
1313 Q_OBJECT
1414 D_DECLARE_PRIVATE(DRegionMonitor)
6969 return image;
7070 }
7171
72 /*!
73 * \~chinese \brief DSvgRenderer::DSvgRenderer 这个类已经废弃不用,请使用libdtkgui
74 * \~chinese \param parent
75 */
7276 DSvgRenderer::DSvgRenderer(QObject *parent)
7377 : QObject(parent)
7478 , DObject(*new DSvgRendererPrivate(this))
3030 #ifdef Q_OS_LINUX
3131 DWIDGET_BEGIN_NAMESPACE
3232 class DSvgRendererPrivate;
33 class DSvgRenderer : public QObject, public DTK_CORE_NAMESPACE::DObject
33 class D_DECL_DEPRECATED_X("Use libdtkgui") DSvgRenderer : public QObject, public DTK_CORE_NAMESPACE::DObject
3434 {
3535 Q_PROPERTY(QRectF viewBox READ viewBoxF WRITE setViewBox)
3636 public:
3232 DWIDGET_BEGIN_NAMESPACE
3333
3434 class DThumbnailProviderPrivate;
35 class DThumbnailProvider : public QThread, public DTK_CORE_NAMESPACE::DObject
35 class D_DECL_DEPRECATED_X("Use libdtkgui") DThumbnailProvider : public QThread, public DTK_CORE_NAMESPACE::DObject
3636 {
3737 Q_OBJECT
3838
2626 DWIDGET_BEGIN_NAMESPACE
2727
2828 class DTrashManagerPrivate;
29 class DTrashManager : public QObject, public DTK_CORE_NAMESPACE::DObject
29 class D_DECL_DEPRECATED_X("Use libdtkcore") DTrashManager : public QObject, public DTK_CORE_NAMESPACE::DObject
3030 {
3131 public:
3232 static DTrashManager *instance();
+0
-671
src/util/dwindowmanagerhelper.cpp less more
0 /*
1 * Copyright (C) 2017 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #include "dwindowmanagerhelper.h"
18 #include "dforeignwindow.h"
19
20 #include <DObjectPrivate>
21 #include <QGuiApplication>
22
23 #include <qpa/qplatformwindow.h>
24
25 #include <functional>
26
27 DWIDGET_BEGIN_NAMESPACE
28
29 #define DEFINE_CONST_CHAR(Name) const char _##Name[] = "_d_" #Name
30 #define MWM_FUNC_ALL (1L << 0)
31 #define MWM_DECOR_ALL (1L << 0)
32
33 // functions
34 DEFINE_CONST_CHAR(hasBlurWindow);
35 DEFINE_CONST_CHAR(hasComposite);
36 DEFINE_CONST_CHAR(hasNoTitlebar);
37 DEFINE_CONST_CHAR(windowManagerName);
38 DEFINE_CONST_CHAR(connectWindowManagerChangedSignal);
39 DEFINE_CONST_CHAR(connectHasBlurWindowChanged);
40 DEFINE_CONST_CHAR(connectHasCompositeChanged);
41 DEFINE_CONST_CHAR(connectHasNoTitlebarChanged);
42 DEFINE_CONST_CHAR(getCurrentWorkspaceWindows);
43 DEFINE_CONST_CHAR(getWindows);
44 DEFINE_CONST_CHAR(connectWindowListChanged);
45 DEFINE_CONST_CHAR(setMWMFunctions);
46 DEFINE_CONST_CHAR(getMWMFunctions);
47 DEFINE_CONST_CHAR(setMWMDecorations);
48 DEFINE_CONST_CHAR(getMWMDecorations);
49 DEFINE_CONST_CHAR(connectWindowMotifWMHintsChanged);
50 DEFINE_CONST_CHAR(popupSystemWindowMenu);
51
52 static bool connectWindowManagerChangedSignal(QObject *object, std::function<void ()> slot)
53 {
54 QFunctionPointer connectWindowManagerChangedSignal = Q_NULLPTR;
55
56 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
57 connectWindowManagerChangedSignal = qApp->platformFunction(_connectWindowManagerChangedSignal);
58 #endif
59
60 return connectWindowManagerChangedSignal && reinterpret_cast<bool(*)(QObject *object, std::function<void ()>)>(connectWindowManagerChangedSignal)(object, slot);
61 }
62
63 static bool connectHasBlurWindowChanged(QObject *object, std::function<void ()> slot)
64 {
65 QFunctionPointer connectHasBlurWindowChanged = Q_NULLPTR;
66
67 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
68 connectHasBlurWindowChanged = qApp->platformFunction(_connectHasBlurWindowChanged);
69 #endif
70
71 return connectHasBlurWindowChanged && reinterpret_cast<bool(*)(QObject *object, std::function<void ()>)>(connectHasBlurWindowChanged)(object, slot);
72 }
73
74 static bool connectHasCompositeChanged(QObject *object, std::function<void ()> slot)
75 {
76 QFunctionPointer connectHasCompositeChanged = Q_NULLPTR;
77
78 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
79 connectHasCompositeChanged = qApp->platformFunction(_connectHasCompositeChanged);
80 #endif
81
82 return connectHasCompositeChanged && reinterpret_cast<bool(*)(QObject *object, std::function<void ()>)>(connectHasCompositeChanged)(object, slot);
83 }
84
85 static bool connectHasNoTitlebarChanged(QObject *object, std::function<void ()> slot)
86 {
87 QFunctionPointer connectHasNoTitlebarChanged = Q_NULLPTR;
88
89 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
90 connectHasNoTitlebarChanged = qApp->platformFunction(_connectHasNoTitlebarChanged);
91 #endif
92
93 return connectHasNoTitlebarChanged && reinterpret_cast<bool(*)(QObject *object, std::function<void ()>)>(connectHasNoTitlebarChanged)(object, slot);
94 }
95
96 static bool connectWindowListChanged(QObject *object, std::function<void ()> slot)
97 {
98 QFunctionPointer connectWindowListChanged = Q_NULLPTR;
99
100 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
101 connectWindowListChanged = qApp->platformFunction(_connectWindowListChanged);
102 #endif
103
104 return connectWindowListChanged && reinterpret_cast<bool(*)(QObject *object, std::function<void ()>)>(connectWindowListChanged)(object, slot);
105 }
106
107 static bool connectWindowMotifWMHintsChanged(QObject *object, std::function<void (quint32)> slot)
108 {
109 QFunctionPointer connectWindowMotifWMHintsChanged = Q_NULLPTR;
110
111 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
112 connectWindowMotifWMHintsChanged = qApp->platformFunction(_connectWindowMotifWMHintsChanged);
113 #endif
114
115 return connectWindowMotifWMHintsChanged && reinterpret_cast<bool(*)(QObject *object, std::function<void (quint32)>)>(connectWindowMotifWMHintsChanged)(object, slot);
116 }
117
118 class DWindowManagerHelperPrivate : public DTK_CORE_NAMESPACE::DObjectPrivate
119 {
120 public:
121 DWindowManagerHelperPrivate(DWindowManagerHelper *qq)
122 : DObjectPrivate(qq) {}
123
124 mutable QList<DForeignWindow *> windowList;
125 };
126
127 class DWindowManagerHelper_ : public DWindowManagerHelper {};
128 Q_GLOBAL_STATIC(DWindowManagerHelper_, wmhGlobal)
129
130 /*!
131 * \~chinese \class DWindowManagerHelper
132 * \~chinese \brief 提供与窗口管理器交互的接口,同 \a DPlatformWindowHandle 依赖 dxcb 插件。
133 * \~chinese dxcb 插件抽象出所有需要和X11平台交互的接口以供上层调用,DTK 使用插件中提供的接口再
134 * \~chinese 次封装提供给应用程序使用,从设计角度讲,DTK库中不应该直接使用任何跟平台相关的接口
135 * \~chinese (如:X11、Wayland、Windows),在这样的结构支撑下,在一个新的平台上,只需要提供和
136 * \~chinese dxcb 同样的接口,DTK应用即可无缝迁移。
137 * \~chinese \sa \href{https://github.com/linuxdeepin/qt5dxcb-plugin/,dxcb插件}
138 * \~chinese \sa DApplication::loadDXcbPlugin
139 * \~chinese \sa DApplication::isDXcbPlatform
140 * \~chinese \sa DPlatformWindowHandle
141 */
142
143 /*!
144 * \~chinese \property DWindowManagerHelper::hasBlurWindow
145 * \~chinese \brief 窗口管理器是否支持窗口背景模糊特效
146 * \~chinese \note 在 dxcb 插件中目前只支持 deepin-wm 和 kwin 这两种窗管的模糊特效
147 * \~chinese \note 只读
148 */
149
150 /*!
151 * \~chinese \property DWindowManagerHelper::hasComposite
152 * \~chinese \brief 窗口管理器是否支持混成效果。如果不支持混成,则表示所有窗口的背景都不能透明,
153 * \~chinese 随之而来也不会有窗口阴影等效果,不规则窗口的边缘也会存在锯齿。
154 * \~chinese \note 只读
155 */
156
157 /*!
158 * \~chinese \property DWindowManagerHelper::hasNoTitlebar
159 * \~chinese \brief 窗口管理器是否支持隐藏窗口标题栏。如果支持,则 DPlatformWindowHandle::enableDXcbForWindow
160 * \~chinese 会优先使用此方法支持自定义窗口标题栏。
161 * \~chinese \note 只读
162 * \~chinese \sa DPlatformWindowHandle::enableNoTitlebarForWindow
163 */
164
165 /*!
166 * \~chinese \enum DWindowManagerHelper::MotifFunction
167 * \~chinese MotifFunction::MotifFunction 窗口管理器对窗口所能控制的行为
168 *
169 * \~chinese \var DWindowManagerHelper::FUNC_RESIZE DWindowManagerHelper::FUNC_RESIZE
170 * \~chinese 控制窗口大小。如果存在此标志,则窗口管理器可以改变窗口大小(如使用鼠标拖拽窗口边缘),
171 * \~chinese 否则无法通过外部行为调整窗口大小。
172 * \~chinese \code
173 * DMainWindow w;
174 *
175 * w.resize(400, 200);
176 * w.show();
177 * DWindowManagerHelper::setMotifFunctions(w.windowHandle(), DWindowManagerHelper::FUNC_RESIZE, false);
178 * \endcode
179 * \~chinese \image html disable_resize_function.gif
180 * \~chinese \note 普通窗口默认存在此标志,对于 Qt::Popup 和 Qt::BypassWindowManagerHint
181 * \~chinese 类型的窗口,不受此标志位影响
182 * \~chinese \note 设置此标志后也会影响窗口标题栏对应功能入口的状态
183 * \~chinese \note 对于使用系统标题栏的窗口,此功能和具体窗口管理器实现相关,deepin-wm 中设置
184 * \~chinese 此标志无效。
185 * \~chinese \sa DPlatformWindowHandle::enableDXcbForWindow
186 * \~chinese \sa DPlatformWindowHandle::isEnabledDXcb
187 *
188 * \~chinese \var DWindowManagerHelper::FUNC_MOVE DWindowManagerHelper::FUNC_MOVE
189 * \~chinese 控制窗口位置。如果存在此标志,则窗口管理器可以移动窗口(如使用鼠标拖动标题栏),否则
190 * \~chinese 无法通过外部行为移动窗口位置。
191 * \~chinese \code
192 * DWindowManagerHelper::setMotifFunctions(w.windowHandle(), DWindowManagerHelper::FUNC_MOVE, false);
193 * \endcode
194 * \~chinese \image html disable_move_function.gif
195 * \~chinese \var DWindowManagerHelper::FUNC_MINIMIZE DWindowManagerHelper::FUNC_MINIMIZE
196 * \~chinese 最小化窗口。如果存在此标志,则窗口可以被最小化(如点击标题栏的最小化按钮),否则无法
197 * \~chinese 通过外部行为最小化窗口。
198 * \~chinese \code
199 * DWindowManagerHelper::setMotifFunctions(w.windowHandle(), DWindowManagerHelper::FUNC_MINIMIZE, false);
200 * \endcode
201 * \~chinese \image html disable_minimize_function.gif
202 * \~chinese \note 设置此标志后也会影响窗口标题栏对应功能入口的状态
203 *
204 * \~chinese \var DWindowManagerHelper::FUNC_MAXIMIZE DWindowManagerHelper::FUNC_MAXIMIZE
205 * \~chinese 最大化窗口。如果存在此标志,则窗口可以被最大化(如点击标题栏的最大化按钮),否则无法
206 * \~chinese 通过外部行为最大化窗口。
207 * \~chinese \code
208 * DWindowManagerHelper::setMotifFunctions(w.windowHandle(), DWindowManagerHelper::FUNC_MAXIMIZE, false);
209 * \endcode
210 * \~chinese \image html disable_maximize_function.gif
211 * \~chinese \note 设置此标志后也会影响窗口标题栏对应功能入口的状态
212 *
213 * \~chinese \var DWindowManagerHelper::FUNC_CLOSE DWindowManagerHelper::FUNC_CLOSE
214 * \~chinese 关闭窗口。如果存在此标志,则窗口可以被关闭(如点击标题栏的关闭按钮或使用Alt+F4快捷键),
215 * \~chinese 否则无法通过外部行为关闭窗口。
216 * \~chinese \code
217 * DWindowManagerHelper::setMotifFunctions(w.windowHandle(), DWindowManagerHelper::FUNC_CLOSE, false);
218 * \endcode
219 * \~chinese \image html disable_close_function.gif
220 * \~chinese \note 设置此标志后也会影响窗口标题栏对应功能入口的状态
221 *
222 * \~chinese \var DWindowManagerHelper::FUNC_ALL DWindowManagerHelper::FUNC_ALL
223 * \~chinese 所有功能性行为
224 */
225
226 /*!
227 * \~chinese \enum DWindowManagerHelper::MotifDecoration
228 * \~chinese MotifFunction::MotifDecoration 窗口管理器对窗口添加的修饰。只影响窗口上对应功能
229 * \~chinese 的入口,不影响实际的功能,比如:禁用掉 FUNC_MAXIMIZE 后,还可以使用快捷键最大化窗口
230 *
231 * \~chinese \var DWindowManagerHelper::DECOR_BORDER DWindowManagerHelper::DECOR_BORDER
232 * \~chinese 窗口描边。如果存在此标志,则窗口管理器会为窗口绘制描边,否则窗口没有描边。
233 * \~chinese 否则无法通过外部行为调整窗口大小。
234 * \~chinese \note 只支持使用系统标题栏的窗口,此功能和具体窗口管理器实现相关,deepin-wm 中设置
235 * \~chinese 此标志无效。
236 *
237 * \~chinese \var DWindowManagerHelper::DECOR_RESIZEH DWindowManagerHelper::DECOR_RESIZEH
238 * \~chinese 改变窗口大小。如果存在此标志,则窗口管理器会在窗口的修饰上显示一个更改窗口大小的控件,
239 * \~chinese 否则无此控件。
240 * \~chinese \note 只支持使用系统标题栏的窗口,此功能和具体窗口管理器实现相关,deepin-wm 中设置
241 * \~chinese 此标志无效。
242 *
243 * \~chinese \var DWindowManagerHelper::DECOR_TITLE DWindowManagerHelper::DECOR_TITLE
244 * \~chinese 窗口标题。如果存在此标志,则窗口管理器会在窗口的修饰上显示窗口标题,否则不显示。
245 * \~chinese \note 只支持使用系统标题栏的窗口,此功能和具体窗口管理器实现相关,deepin-wm 中设置
246 * \~chinese 此标志无效。
247 *
248 * \~chinese \var DWindowManagerHelper::DECOR_MENU DWindowManagerHelper::DECOR_MENU
249 * \~chinese 窗口菜单。如果存在此标志,则窗口管理器会在窗口的修饰上显示一个窗口菜单控件,否则不显示。
250 * \~chinese \note 只支持使用系统标题栏的窗口,此功能和具体窗口管理器实现相关,deepin-wm 中设置
251 * \~chinese 此标志无效。
252 *
253 * \~chinese \var DWindowManagerHelper::DECOR_MINIMIZE DWindowManagerHelper::DECOR_MINIMIZE
254 * \~chinese 窗口最小化。如果存在此标志,则窗口管理器会在窗口的修饰上显示一个最小化窗口控件,否则不显示。
255 * \~chinese \note 只支持使用系统标题栏的窗口,此功能和具体窗口管理器实现相关,deepin-wm 中设置
256 * \~chinese 此标志无效。
257 * \~chinese \sa Qt::WindowMinimizeButtonHint
258 *
259 * \~chinese \var DWindowManagerHelper::DECOR_MAXIMIZE DWindowManagerHelper::DECOR_MAXIMIZE
260 * \~chinese 窗口最大化。如果存在此标志,则窗口管理器会在窗口的修饰上显示一个最大化窗口控件,否则不显示。
261 * \~chinese \note 只支持使用系统标题栏的窗口,此功能和具体窗口管理器实现相关,deepin-wm 中设置
262 * \~chinese 此标志无效。
263 * \~chinese \sa Qt::WindowMaximizeButtonHint
264 *
265 * \~chinese \var DWindowManagerHelper::DECOR_ALL DWindowManagerHelper::DECOR_ALL
266 * \~chinese 所有窗口修饰。
267 */
268
269 /*!
270 * \~chinese \enum DWindowManagerHelper::WMName
271 * \~chinese DWindowManagerHelper::WMName 窗口管理器类型
272 * \~chinese \var DWindowManagerHelper::DeepinWM DWindowManagerHelper::DeepinWM
273 * \~chinese 深度系统桌面环境窗口管理器
274 *
275 * \~chinese \var DWindowManagerHelper::DeepinWM DWindowManagerHelper::KWinWM
276 * \~chinese KDE系统桌面环境窗口管理器
277 *
278 * \~chinese \var DWindowManagerHelper::DeepinWM DWindowManagerHelper::OtherWM
279 * \~chinese 其它窗口管理器
280 */
281
282 /*!
283 * \~chinese \fn DWindowManagerHelper::windowManagerChanged
284 * \~chinese \brief 信号会在当前环境窗口管理器变化时被发送
285 * \~chinese \fn DWindowManagerHelper::hasBlurWindowChanged
286 * \~chinese \brief 信号会在 hasBlurWindow 属性的值改变时被发送
287 * \~chinese \fn DWindowManagerHelper::hasCompositeChanged
288 * \~chinese \brief 信号会在 hasComposite 属性的值改变时被发送
289 * \~chinese \fn DWindowManagerHelper::hasNoTitlebarChanged
290 * \~chinese \brief 信号会在 hasNoTitlebar 属性的值改变时被发送
291 * \~chinese \fn DWindowManagerHelper::windowListChanged
292 * \~chinese \brief 信号会在当前环境本地窗口列表变化时被发送。包含打开新窗口、关闭窗口、改变窗口的
293 * \~chinese 层叠顺序
294 * \~chinese \fn DWindowManagerHelper::windowMotifWMHintsChanged
295 * \~chinese \brief 信号会在窗口功能或修饰标志改变时被发送
296 * \~chinese \param 窗口id
297 * \~chinese \note 只对当前应用程序中的窗口有效
298 */
299
300 DWindowManagerHelper::~DWindowManagerHelper()
301 {
302 D_DC(DWindowManagerHelper);
303
304 for (QWindow *w : d->windowList) {
305 w->deleteLater();
306 }
307 }
308
309 /*!
310 * \~chinese \brief DWindowManagerHelper::instance
311 * \~chinese DWindowManagerHelper 的单例对象,使用 Q_GLOBAL_STATIC 定义,在第一次调用时实例化。
312 * \~chinese \return
313 */
314 DWindowManagerHelper *DWindowManagerHelper::instance()
315 {
316 return wmhGlobal;
317 }
318
319 /*!
320 * \~chinese \brief DWindowManagerHelper::setMotifFunctions
321 * \~chinese 设置窗口的功能性标志,会覆盖之前的设置
322 * \~chinese \param window
323 * \~chinese \param hints
324 */
325 void DWindowManagerHelper::setMotifFunctions(const QWindow *window, MotifFunctions hints)
326 {
327 QFunctionPointer setMWMFunctions = Q_NULLPTR;
328
329 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
330 setMWMFunctions = qApp->platformFunction(_setMWMFunctions);
331 #endif
332
333 if (setMWMFunctions && window->handle()) {
334 if (hints == FUNC_ALL)
335 hints = (MotifFunction)MWM_FUNC_ALL;
336
337 reinterpret_cast<void(*)(quint32, quint32)>(setMWMFunctions)(window->handle()->winId(), (quint32)hints);
338 }
339 }
340
341 /*!
342 * \~chinese \brief DWindowManagerHelper::setMotifFunctions
343 * \~chinese 设置窗口某些标志位的开启状态,不影响其它标志位
344 * \~chinese \param window
345 * \~chinese \param hints 要设置的标志位
346 * \~chinese \param on 如果值为 true 则开启标志,否则关闭
347 * \~chinese \return 返回设置后的窗口标志
348 */
349 DWindowManagerHelper::MotifFunctions DWindowManagerHelper::setMotifFunctions(const QWindow *window, MotifFunctions hints, bool on)
350 {
351 MotifFunctions old_hints = getMotifFunctions(window);
352
353 if (on)
354 hints |= old_hints;
355 else
356 hints = old_hints & ~hints;
357
358 setMotifFunctions(window, hints);
359
360 return hints;
361 }
362
363 /*!
364 * \~chinese \brief DWindowManagerHelper::getMotifFunctions
365 * \~chinese \param window
366 * \~chinese \return 返回窗口当前的功能标志
367 */
368 DWindowManagerHelper::MotifFunctions DWindowManagerHelper::getMotifFunctions(const QWindow *window)
369 {
370 QFunctionPointer getMWMFunctions = Q_NULLPTR;
371
372 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
373 getMWMFunctions = qApp->platformFunction(_getMWMFunctions);
374 #endif
375
376 if (getMWMFunctions && window->handle()) {
377 quint32 hints = reinterpret_cast<quint32(*)(quint32)>(getMWMFunctions)(window->handle()->winId());
378
379 if (!(hints & MWM_FUNC_ALL))
380 return (MotifFunctions)hints;
381 }
382
383 return FUNC_ALL;
384 }
385
386 /*!
387 * \~chinese \brief DWindowManagerHelper::setMotifDecorations
388 * \~chinese 设置窗口的修饰性标志,会覆盖之前的设置
389 * \~chinese \param window
390 * \~chinese \param hints
391 */
392 void DWindowManagerHelper::setMotifDecorations(const QWindow *window, MotifDecorations hints)
393 {
394 QFunctionPointer setMWMDecorations = Q_NULLPTR;
395
396 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
397 setMWMDecorations = qApp->platformFunction(_setMWMDecorations);
398 #endif
399
400 if (setMWMDecorations && window->handle()) {
401 if (hints == DECOR_ALL)
402 hints = (MotifDecoration)MWM_DECOR_ALL;
403
404 reinterpret_cast<void(*)(quint32, quint32)>(setMWMDecorations)(window->handle()->winId(), (quint32)hints);
405 }
406 }
407
408 /*!
409 * \~chinese \brief DWindowManagerHelper::setMotifFunctions
410 * \~chinese 设置窗口某些标志位的开启状态,不影响其它标志位
411 * \~chinese \param window
412 * \~chinese \param hints 要设置的标志位
413 * \~chinese \param on 如果值为 true 则开启标志,否则关闭
414 * \~chinese \return 返回设置后的窗口标志
415 */
416 DWindowManagerHelper::MotifDecorations DWindowManagerHelper::setMotifDecorations(const QWindow *window, MotifDecorations hints, bool on)
417 {
418 MotifDecorations old_hints = getMotifDecorations(window);
419
420 if (on)
421 hints |= old_hints;
422 else
423 hints = old_hints & ~hints;
424
425 setMotifDecorations(window, hints);
426
427 return hints;
428 }
429
430 /*!
431 * \~chinese \brief DWindowManagerHelper::getMotifFunctions
432 * \~chinese \param window
433 * \~chinese \return 返回窗口当前的修饰标志
434 */
435 DWindowManagerHelper::MotifDecorations DWindowManagerHelper::getMotifDecorations(const QWindow *window)
436 {
437 QFunctionPointer getMWMDecorations = Q_NULLPTR;
438
439 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
440 getMWMDecorations = qApp->platformFunction(_getMWMDecorations);
441 #endif
442
443 if (getMWMDecorations && window->handle()) {
444 quint32 hints = reinterpret_cast<quint32(*)(quint32)>(getMWMDecorations)(window->handle()->winId());
445
446 if (!(hints & MWM_DECOR_ALL))
447 return (MotifDecorations)hints;
448 }
449
450 return DECOR_ALL;
451 }
452
453 /*!
454 * \~chinese \brief DWindowManagerHelper::popupSystemWindowMenu
455 * \~chinese 显示窗口管理器对窗口的菜单,和有边框的窗口在标题栏上点击鼠标右键弹出的菜单内容一致。
456 * \~chinese 在 DMainWindow 的标题栏上点击鼠标右键会调用此函数打开系统菜单:
457 * \~chinese \image html window_system_menu.gif
458 * \~chinese \param window
459 */
460 void DWindowManagerHelper::popupSystemWindowMenu(const QWindow *window)
461 {
462 QFunctionPointer popupSystemWindowMenu = Q_NULLPTR;
463
464 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
465 popupSystemWindowMenu = qApp->platformFunction(_popupSystemWindowMenu);
466 #endif
467
468 if (popupSystemWindowMenu && window->handle()) {
469 reinterpret_cast<void(*)(quint32)>(popupSystemWindowMenu)(window->handle()->winId());
470 }
471 }
472
473 /*!
474 * \~chinese \brief DWindowManagerHelper::hasBlurWindow
475 * \~chinese \return 如果当前窗口管理器支持窗口背景模糊特效则返回 true,否则返回 false
476 */
477 bool DWindowManagerHelper::hasBlurWindow() const
478 {
479 QFunctionPointer wmHasBlurWindow = Q_NULLPTR;
480
481 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
482 wmHasBlurWindow = qApp->platformFunction(_hasBlurWindow);
483 #endif
484
485 return wmHasBlurWindow && reinterpret_cast<bool(*)()>(wmHasBlurWindow)();
486 }
487
488 /*!
489 * \~chinese \brief DWindowManagerHelper::hasComposite
490 * \~chinese \return 如果当前窗口管理器支持混成则返回 true,否则返回 false
491 */
492 bool DWindowManagerHelper::hasComposite() const
493 {
494 QFunctionPointer hasComposite = Q_NULLPTR;
495
496 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
497 hasComposite = qApp->platformFunction(_hasComposite);
498 #endif
499
500 return hasComposite && reinterpret_cast<bool(*)()>(hasComposite)();
501 }
502
503 /*!
504 * \~chinese \brief DWindowManagerHelper::hasNoTitlebar
505 * \~chinese \return 如果窗口管理器当前支持设置隐藏窗口标题栏则返回 true,否则返回 false
506 */
507 bool DWindowManagerHelper::hasNoTitlebar() const
508 {
509 QFunctionPointer hasNoTitlebar = Q_NULLPTR;
510
511 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
512 hasNoTitlebar = qApp->platformFunction(_hasNoTitlebar);
513 #endif
514
515 return hasNoTitlebar && reinterpret_cast<bool(*)()>(hasNoTitlebar)();
516 }
517
518 /*!
519 * \~chinese \brief DWindowManagerHelper::windowManagerNameString
520 * \~chinese \return 返回窗口管理器名称。在X11平台上,此值为窗口管理器对应窗口的 _NET_WM_NAME
521 * \~chinese 的值
522 * \~chinese \sa \href{https://specifications.freedesktop.org/wm-spec/1.3/ar01s03.html,_NET_SUPPORTING_WM_CHECK}
523 * \~chinese \sa \href{https://specifications.freedesktop.org/wm-spec/1.3/ar01s05.html,_NET_WM_NAME}
524 */
525 QString DWindowManagerHelper::windowManagerNameString() const
526 {
527 QFunctionPointer windowManagerName = Q_NULLPTR;
528
529 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
530 windowManagerName = qApp->platformFunction(_windowManagerName);
531 #endif
532
533 return windowManagerName ? reinterpret_cast<QString(*)()>(windowManagerName)() : QString();
534 }
535
536 /*!
537 * \~chinese \brief DWindowManagerHelper::windowManagerName
538 * \~chinese \return 返回当前窗口管理器类型
539 * \~chinese \sa DWindowManagerHelper::windowManagerNameString
540 */
541 DWindowManagerHelper::WMName DWindowManagerHelper::windowManagerName() const
542 {
543 const QString &wmName = windowManagerNameString();
544
545 if (wmName == QStringLiteral("Mutter(DeepinGala)")) {
546 return DeepinWM;
547 }
548
549 if (wmName == QStringLiteral("KWin")) {
550 return KWinWM;
551 }
552
553 return OtherWM;
554 }
555
556 /*!
557 * \~chinese \brief DWindowManagerHelper::allWindowIdList
558 * \~chinese \return 返回当前环境所有本地窗口的窗口id列表
559 * \~chinese \note 顺序和窗口层叠顺序相关,显示越靠下层的窗口在列表中顺序越靠前
560 * \~chinese \sa DWindowManagerHelper::currentWorkspaceWindowIdList
561 */
562 QVector<quint32> DWindowManagerHelper::allWindowIdList() const
563 {
564 QFunctionPointer wmClientList = Q_NULLPTR;
565
566 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
567 wmClientList = qApp->platformFunction(_getWindows);
568 #endif
569
570 if (!wmClientList) return QVector<quint32>();
571
572 return reinterpret_cast<QVector<quint32>(*)()>(wmClientList)();
573 }
574
575 /*!
576 * \~chinese \brief DWindowManagerHelper::currentWorkspaceWindowIdList
577 * \~chinese \return 返回当前工作区所有本地窗口的窗口id列表
578 * \~chinese \note 顺序和窗口层叠顺序相关,显示越靠下层的窗口在列表中顺序越靠前
579 * \~chinese \sa DWindowManagerHelper::allWindowIdList
580 */
581 QVector<quint32> DWindowManagerHelper::currentWorkspaceWindowIdList() const
582 {
583 QFunctionPointer wmClientList = Q_NULLPTR;
584
585 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
586 wmClientList = qApp->platformFunction(_getCurrentWorkspaceWindows);
587 #endif
588
589 if (!wmClientList) return QVector<quint32>();
590
591 return reinterpret_cast<QVector<quint32>(*)()>(wmClientList)();
592 }
593
594 /*!
595 * \~chinese \brief DWindowManagerHelper::currentWorkspaceWindowIdList
596 * \~chinese \return 返回当前工作区所有本地窗口对象列表。和 \a currentWorkspaceWindowIdList
597 * \~chinese 类似,只不过自动通过窗口id创建了 DForeignWindow 对象
598 * \~chinese \note 顺序和窗口层叠顺序相关,显示越靠下层的窗口在列表中顺序越靠前
599 * \~chinese \note 列表中对象的生命周期由 DForeignWindow 负责
600 * \~chinese \warning 此列表中不包含由当前应用创建的窗口
601 * \~chinese \sa DWindowManagerHelper::currentWorkspaceWindowIdList
602 * \~chinese \sa DForeignWindow::fromWinId
603 */
604 QList<DForeignWindow *> DWindowManagerHelper::currentWorkspaceWindows() const
605 {
606 D_DC(DWindowManagerHelper);
607
608 for (QWindow *w : d->windowList) {
609 w->deleteLater();
610 }
611
612 d->windowList.clear();
613
614 QList<WId> currentApplicationWindowList;
615 const QWindowList &list = qApp->allWindows();
616
617 currentApplicationWindowList.reserve(list.size());
618
619 for (auto window : list) {
620 if (window->property("_q_foreignWinId").isValid()) continue;
621
622 currentApplicationWindowList.append(window->winId());
623 }
624
625 QVector<quint32> wmClientList = currentWorkspaceWindowIdList();
626
627 for (WId wid : wmClientList) {
628 if (currentApplicationWindowList.contains(wid))
629 continue;
630
631 if (DForeignWindow *w = DForeignWindow::fromWinId(wid)) {
632 d->windowList << w;
633 }
634 }
635
636 return d->windowList;
637 }
638
639 /*!
640 * \~chinese \brief DWindowManagerHelper::DWindowManagerHelper
641 * \~chinese 不允许直接实例化此对象
642 * \~chinese \param parent
643 * \~chinese \sa DWindowManagerHelper::instance
644 */
645 DWindowManagerHelper::DWindowManagerHelper(QObject *parent)
646 : QObject(parent)
647 , DObject(*new DWindowManagerHelperPrivate(this))
648 {
649 connectWindowManagerChangedSignal(this, [this] {
650 Q_EMIT windowManagerChanged();
651 });
652 connectHasBlurWindowChanged(this, [this] {
653 Q_EMIT hasBlurWindowChanged();
654 });
655 connectHasCompositeChanged(this, [this] {
656 Q_EMIT hasCompositeChanged();
657 });
658 connectHasNoTitlebarChanged(this, [this] {
659 Q_EMIT hasNoTitlebarChanged();
660 });
661 connectWindowListChanged(this, [this] {
662 Q_EMIT windowListChanged();
663 });
664 connectWindowMotifWMHintsChanged(this, [this] (quint32 winId) {
665 Q_EMIT windowMotifWMHintsChanged(winId);
666 });
667 }
668
669
670 DWIDGET_END_NAMESPACE
+0
-111
src/util/dwindowmanagerhelper.h less more
0 /*
1 * Copyright (C) 2017 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #ifndef DWINDOWMANAGERHELPER_H
18 #define DWINDOWMANAGERHELPER_H
19
20 #include <QWindow>
21
22 #include <DObject>
23
24 #include "dtkwidget_global.h"
25
26 DWIDGET_BEGIN_NAMESPACE
27
28 class DForeignWindow;
29 class DWindowManagerHelperPrivate;
30 class DWindowManagerHelper : public QObject, public DTK_CORE_NAMESPACE::DObject
31 {
32 Q_OBJECT
33
34 Q_PROPERTY(bool hasBlurWindow READ hasBlurWindow NOTIFY hasBlurWindowChanged)
35 Q_PROPERTY(bool hasComposite READ hasComposite NOTIFY hasCompositeChanged)
36 Q_PROPERTY(bool hasNoTitlebar READ hasNoTitlebar NOTIFY hasNoTitlebarChanged)
37
38 public:
39 enum MotifFunction {
40 FUNC_RESIZE = (1L << 1),
41 FUNC_MOVE = (1L << 2),
42 FUNC_MINIMIZE = (1L << 3),
43 FUNC_MAXIMIZE = (1L << 4),
44 FUNC_CLOSE = (1L << 5),
45 FUNC_ALL = FUNC_RESIZE | FUNC_MOVE | FUNC_MINIMIZE | FUNC_MAXIMIZE | FUNC_CLOSE
46 };
47 Q_DECLARE_FLAGS(MotifFunctions, MotifFunction)
48
49 enum MotifDecoration {
50 DECOR_BORDER = (1L << 1),
51 DECOR_RESIZEH = (1L << 2),
52 DECOR_TITLE = (1L << 3),
53 DECOR_MENU = (1L << 4),
54 DECOR_MINIMIZE = (1L << 5),
55 DECOR_MAXIMIZE = (1L << 6),
56 DECOR_ALL = DECOR_BORDER | DECOR_RESIZEH | DECOR_TITLE | DECOR_MENU | DECOR_MINIMIZE | DECOR_MAXIMIZE
57 };
58 Q_DECLARE_FLAGS(MotifDecorations, MotifDecoration)
59
60 enum WMName {
61 OtherWM,
62 DeepinWM,
63 KWinWM
64 };
65 Q_ENUM(WMName)
66
67 ~DWindowManagerHelper();
68
69 static DWindowManagerHelper *instance();
70
71 static void setMotifFunctions(const QWindow *window, MotifFunctions hints);
72 static MotifFunctions setMotifFunctions(const QWindow *window, MotifFunctions hints, bool on);
73 static MotifFunctions getMotifFunctions(const QWindow *window);
74 static void setMotifDecorations(const QWindow *window, MotifDecorations hints);
75 static MotifDecorations setMotifDecorations(const QWindow *window, MotifDecorations hints, bool on);
76 static MotifDecorations getMotifDecorations(const QWindow *window);
77
78 static void popupSystemWindowMenu(const QWindow *window);
79
80 bool hasBlurWindow() const;
81 bool hasComposite() const;
82 bool hasNoTitlebar() const;
83 QString windowManagerNameString() const;
84 WMName windowManagerName() const;
85
86 QVector<quint32> allWindowIdList() const;
87 QVector<quint32> currentWorkspaceWindowIdList() const;
88 QList<DForeignWindow*> currentWorkspaceWindows() const;
89
90 Q_SIGNALS:
91 void windowManagerChanged();
92 void hasBlurWindowChanged();
93 void hasCompositeChanged();
94 void hasNoTitlebarChanged();
95 void windowListChanged();
96 void windowMotifWMHintsChanged(quint32 winId);
97
98 protected:
99 explicit DWindowManagerHelper(QObject *parent = 0);
100
101 private:
102 D_DECLARE_PRIVATE(DWindowManagerHelper)
103 };
104
105 DWIDGET_END_NAMESPACE
106
107 Q_DECLARE_OPERATORS_FOR_FLAGS(DTK_WIDGET_NAMESPACE::DWindowManagerHelper::MotifFunctions)
108 Q_DECLARE_OPERATORS_FOR_FLAGS(DTK_WIDGET_NAMESPACE::DWindowManagerHelper::MotifDecorations)
109
110 #endif // DWINDOWMANAGERHELPER_H
22 HEADERS += \
33 $$PWD/dfileiconprovider.h \
44 $$PWD/dthumbnailprovider.h \
5 $$PWD/dwindowmanagerhelper.h \
65 $$PWD/dwidgetutil.h \
76 $$PWD/ddesktopservices.h \
87 $$PWD/dtrashmanager.h \
98 $$PWD/dsvgrenderer.h \
10 $$PWD/dhidpihelper.h
9 $$PWD/dhidpihelper.h \
10 $$PWD/dapplicationsettings.h
1111
1212 SOURCES += \
1313 $$PWD/dfileiconprovider.cpp \
1414 $$PWD/dthumbnailprovider.cpp \
15 $$PWD/dwindowmanagerhelper.cpp \
1615 $$PWD/dwidgetutil.cpp \
17 $$PWD/dhidpihelper.cpp
16 $$PWD/dhidpihelper.cpp \
17 $$PWD/dapplicationsettings.cpp
1818
1919 linux* {
2020 CONFIG += link_pkgconfig
4646 includes.files += $$PWD/*.h \
4747 $$PWD/DWidgetUtil \
4848 $$PWD/DDesktopServices \
49 $$PWD/DTrashManager \
50 $$PWD/DThumbnailProvider \
5149 $$PWD/DFileIconProvider \
52 $$PWD/DWindowManagerHelper \
53 $$PWD/DHiDPIHelper \
54 $$PWD/DSvgRenderer
50 $$PWD/DHiDPIHelper
5551
5652 DISTFILES += \
5753 $$PWD/desktop.pri \
0 #include "dabstractdialog.h"
0 #include "dwidgetstype.h"
1 #include <QAccessibleWidget>
0 #include "dalertcontrol.h"
0 #include "dapplicationhelper.h"
0 #include "dapplicationsettings.h"
0 #include "darrowlinedrawer.h"
0 #include "darrowrectangle.h"
0 #include "dbuttonbox.h"
0 #include "dwidgetstype.h"
1 #include <QCalendarWidget>
0 #include "dwidgetstype.h"
1 #include <QCheckBox>
0 #include "dwidgetstype.h"
1 #include <QColorDialog>
0 #include "dcoloredprogressbar.h"
0 #include "dwidgetstype.h"
1 #include <QColumnView>
0 #include "dwidgetstype.h"
1 #include <QComboBox>
0 #include "dcommandlinkbutton.h"
0 #include "dwidgetstype.h"
1 #include <QDataWidgetMapper>
0 #include "dwidgetstype.h"
1 #include <QDateEdit>
0 #include "dwidgetstype.h"
1 #include <QDateTimeEdit>
0 #include "dwidgetstype.h"
1 #include <QDial>
0 #include "ddialog.h"
0 #include "dwidgetstype.h"
1 #include <QDialogButtonBox>
0 #include "ddialogclosebutton.h"
0 #include "dwidgetstype.h"
1 #include <QDockWidget>
0 #include "dspinbox.h"
0 #include "ddrawer.h"
0 #include "ddrawergroup.h"
0 #include "dwidgetstype.h"
1 #include <QErrorMessage>
0 #include "dfloatingbutton.h"
0 #include "dfloatingmessage.h"
0 #include "dfloatingwidget.h"
0 #include "dwidgetstype.h"
1 #include <QFocusFrame>
0 #include "dwidgetstype.h"
1 #include <QFontComboBox>
0 #include "dwidgetstype.h"
1 #include <DFontDialog>
+0
-1
src/widgets/DForeignWindow less more
0 #include "dforeignwindow.h"
0 #include "dframe.h"
0 #include "dwidgetstype.h"
1 #include <QGraphicsView>
0 #include "dwidgetstype.h"
1 #include <QGroupBox>
0 #include "dwidgetstype.h"
1 #include <QHeaderView>
0 #include "dframe.h"
0 #include "dwidgetstype.h"
1 #include <QHorizontalSlider>
0 #include "diconbutton.h"
0 #include "dimagebutton.h"
0 #include "dwidgetstype.h"
1 #include <QInputDialog>
0 #include "dkeysequenceedit.h"
0 #include "dwidgetstype.h"
1 #include <QLCDNumber>
0 #include "dlabel.h"
0 #include "dlistview.h"
0 #include "dwidgetstype.h"
1 #include <QListWidget>
0 #include "dwidgetstype.h"
1 #include <QMDIArea>
0 #include "dwidgetstype.h"
1 #include <QMdiArea>
0 #include "dwidgetstype.h"
1 #include <QMdiSubWindow>
0 #include "dwidgetstype.h"
01 #include <QMenu>
0 #include "dwidgetstype.h"
1 #include <QMenuBar>
0 #include "dwidgetstype.h"
1 #include <QMessageBox>
0 #include "dmessagemanager.h"
0 #include "dwidgetstype.h"
1 #include <QOpenGLWidget>
+0
-1
src/widgets/DPalette less more
0 #include "dstyleoption.h"
+0
-1
src/widgets/DPasswdEditAnimated less more
0 #include "dpasswdeditanimated.h"
0 #include "dpasswordedit.h"
0 #include "dwidgetstype.h"
1 #include <QPlainTextEdit>
0 #include "dprogressbar.h"
0 #include "dwidgetstype.h"
1 #include <QPushButton>
0 #include "dwidgetstype.h"
1 #include <QQuickWidget>
0 #include "dwidgetstype.h"
1 #include <QRadioButton>
0 #include "dwidgetstype.h"
1 #include <QRubberBand>
0 #include "dwidgetstype.h"
1 #include <QScrollArea>
0 #include "dwidgetstype.h"
1 #include <QScrollBar>
0 #include "dshadowline.h"
0 #include "dslider.h"
0 #include "dspinbox.h"
0 #include "dwidgetstype.h"
1 #include <QSplitter>
0 #include "dwidgetstype.h"
1 #include <QStackedWidget>
0 #include "dstyleditemdelegate.h"
0 #include "dwidgetstype.h"
1 #include <QStatusBar>
0 #include "dstyle.h"
0 #include "dstyle.h"
0 #include "dstyleoption.h"
0 #include "dstyleoption.h"
0 #include "dstyleoption.h"
0 #include "dstyle.h"
0 #include "dstyle.h"
0 #include "dstyleditemdelegate.h"
0 #include "dswitchbutton.h"
0 #include "dwidgetstype.h"
1 #include <QTabWidget>
0 #include "dwidgetstype.h"
1 #include <QTableView>
0 #include "dwidgetstype.h"
1 #include <QTableWidget>
0 #include "dwidgetstype.h"
1 #include <QTextBrowser>
0 #include "dtextedit.h"
0 #include "dwidgetstype.h"
1 #include <QTileRules>
0 #include "dwidgetstype.h"
1 #include <QTimeEdit>
0 #include "dtiplabel.h"
0 #include "dwidgetstype.h"
1 #include <QToolBar>
0 #include "dwidgetstype.h"
1 #include <DToolBox>
0 #include "dwidgetstype.h"
1 #include <QToolButton>
0 #include "dtooltip.h"
0 #include "dwidgetstype.h"
1 #include <QTreeView>
0 #include "dwidgetstype.h"
1 #include <QTreeWidget>
0 #include "dwidgetstype.h"
1 #include <QUndoView>
0 #include "dframe.h"
0 #include "dwidgetstype.h"
1 #include <QVerticalSlider>
0 #include "dwarningbutton.h"
0 #include "dwidgetstype.h"
1 #include <QWebView>
0 #include "dwidgetstype.h"
1 #inlcude <QWhatsThis>
0 #include "dwidgetstype.h"
1 #include <QWidget>
0 #include "dwindowclosebutton.h"
+0
-1
src/widgets/DWindowGroupLeader less more
0 #include "dwindowgroupleader.h"
0 #include "dwindowmaxbutton.h"
0 #include "dwindowminbutton.h"
0 #include "dwindowoptionbutton.h"
0 #include "dwidgetstype.h"
1 #include <QWizard>
0 #include "dwidgetstype.h"
1 #inlcude <QWizardPage>
1717 #include "daboutdialog.h"
1818 #include "private/daboutdialog_p.h"
1919
20 #include "dthememanager.h"
2120 #include <dwidgetutil.h>
21 #include <DSysInfo>
2222
2323 #include <QDesktopServices>
2424 #include <QUrl>
2929 #include <QKeyEvent>
3030 #include <QApplication>
3131 #include <QImageReader>
32 #include <QSettings>
32 #include <DSysInfo>
3333
3434 #ifdef Q_OS_UNIX
3535 #include <unistd.h>
3636 #include <pwd.h>
3737 #endif
3838
39 DCORE_USE_NAMESPACE
3940 DWIDGET_BEGIN_NAMESPACE
4041
4142 #ifdef Q_OS_UNIX
7980 {
8081 D_Q(DAboutDialog);
8182
82 initWebsiteInfo();
83 q->setMinimumWidth(360);
84
85 // overwrite default info if distribution config file existed.
86 loadDistributionInfo();
8387
8488 logoLabel = new QLabel();
8589 logoLabel->setContentsMargins(0, 0, 0, 0);
9195 versionLabel->setObjectName("VersionLabel");
9296
9397 companyLogoLabel = new QLabel();
94 companyLogoLabel->setPixmap(loadPixmap(":/images/deepin-logo.svg"));
98 companyLogoLabel->setPixmap(loadPixmap(logoPath));
9599
96100 websiteLabel = new QLabel();
97101 websiteLabel->setObjectName("WebsiteLabel");
98102 websiteLabel->setContextMenuPolicy(Qt::NoContextMenu);
99 websiteLabel->setFixedHeight(24);
100103 websiteLabel->setOpenExternalLinks(false);
101104 updateWebsiteLabel();
102105
103106 acknowledgementLabel = new QLabel();
104107 acknowledgementLabel->setObjectName("AcknowledgementLabel");
105108 acknowledgementLabel->setContextMenuPolicy(Qt::NoContextMenu);
106 acknowledgementLabel->setFixedHeight(24);
107109 acknowledgementLabel->setOpenExternalLinks(false);
108110 updateAcknowledgementLabel();
109111
143145 mainLayout->addWidget(websiteLabel);
144146 mainLayout->setAlignment(websiteLabel, Qt::AlignCenter);
145147 mainLayout->addSpacing(5);
146 mainLayout->addWidget(acknowledgementLabel);
147 mainLayout->setAlignment(acknowledgementLabel, Qt::AlignCenter);
148 // mainLayout->addWidget(acknowledgementLabel);
149 // mainLayout->setAlignment(acknowledgementLabel, Qt::AlignCenter);
148150 mainLayout->addSpacing(12);
149151 mainLayout->addWidget(descriptionLabel, Qt::AlignHCenter);
150152 mainLayout->addSpacing(7);
154156 mainContent->setLayout(mainLayout);
155157 q->addContent(mainContent);
156158
157 q->setFixedWidth(400);
158
159159 // make active
160160 q->setFocus();
161161 }
162162
163 void DAboutDialogPrivate::initWebsiteInfo()
164 {
165 #ifdef Q_OS_LINUX
166 static const QString cfgPath = "/etc/deepin-version";
167
168 bool isProfessional = false;
169 if (QFile::exists(cfgPath)) {
170 QSettings deepinVersion(cfgPath, QSettings::IniFormat);
171 isProfessional = deepinVersion.value("Release/Type").toString() == "Professional";
172 }
173
174 websiteName = isProfessional ? "www.deepin.com" : "www.deepin.org";
175 websiteLink = QString("https://www.deepin.org/original/%1/").arg(qApp->applicationName());
176 #else
177 websiteName = "www.deepin.org";
178 websiteLink = "https://www.deepin.org";
179 #endif
163 void DAboutDialogPrivate::loadDistributionInfo()
164 {
165 logoPath = DSysInfo::distributionOrgLogo(DSysInfo::Distribution, DSysInfo::Light, ":/images/deepin-logo.svg");
166 auto websiteInfo = DSysInfo::distributionOrgWebsite(DSysInfo::Distribution); // will always return a valid result.
167 websiteName = websiteInfo.first;
168 websiteLink = websiteInfo.second;
180169 }
181170
182171 void DAboutDialogPrivate::updateWebsiteLabel()
249238 DAboutDialog::DAboutDialog(QWidget *parent)
250239 : DDialog(*new DAboutDialogPrivate(this), parent)
251240 {
252 DThemeManager::registerWidget(this);
253
254241 D_D(DAboutDialog);
255242
256243 d->init();
257 d->productNameLabel->setStyleSheet(styleSheet());
258 d->versionLabel->setStyleSheet(styleSheet());
259 d->websiteLabel->setStyleSheet(styleSheet());
260 d->acknowledgementLabel->setStyleSheet(styleSheet());
261 d->descriptionLabel->setStyleSheet(styleSheet());
262 d->licenseLabel->setStyleSheet(styleSheet());
263244 }
264245
265246 /*!
439420 {
440421 D_D(DAboutDialog);
441422
442 d->logoLabel->setPixmap(icon.pixmap(QSizeF(96, 96).toSize()));
423 d->logoLabel->setPixmap(icon.pixmap(windowHandle(), QSize(96, 96)));
443424 }
444425
445426 /*!
484465 D_D(DAboutDialog);
485466
486467 d->companyLogoLabel->setPixmap(companyLogo);
487 d->companyLogoLabel->setFixedSize(companyLogo.size());
488468 }
489469
490470 /*!
537517 */
538518 void DAboutDialog::setAcknowledgementVisible(bool visible)
539519 {
540 D_D(DAboutDialog);
541 d->acknowledgementLabel->setVisible(visible);
520 Q_UNUSED(visible)
521 D_D(DAboutDialog);
522 // d->acknowledgementLabel->setVisible(visible);
542523 }
543524
544525 /*!
2323 #include <QWidget>
2424 #include <QLabel>
2525 #include <QDebug>
26 #include <QComboBox>
2627
2728 #include "danchors.h"
2829 #include "dialog_constants.h"
2930 #include "dabstractdialog.h"
3031 #include "private/dabstractdialogprivate_p.h"
31 #include "dthememanager.h"
3232 #include "dplatformwindowhandle.h"
3333 #include "dapplication.h"
3434 #include "dblureffectwidget.h"
4141
4242 }
4343
44 void DAbstractDialogPrivate::init()
44 void DAbstractDialogPrivate::init(bool blurIfPossible)
4545 {
4646 D_Q(DAbstractDialog);
4747
4848 if (qApp->isDXcbPlatform()) {
4949 handle = new DPlatformWindowHandle(q, q);
5050
51 handle->setTranslucentBackground(true);
5251 handle->setEnableSystemMove(false);
5352 handle->setEnableSystemResize(false);
5453
55 // bgBlurWidget = new DBlurEffectWidget(q);
56 // bgBlurWidget->lower();
57 // bgBlurWidget->setBlendMode(DBlurEffectWidget::BehindWindowBlend);
58 // bgBlurWidget->setVisible(DPlatformWindowHandle::hasBlurWindow());
59
60 // DPlatformWindowHandle::connectWindowManagerChangedSignal(q, [this] {
61 // bgBlurWidget->setVisible(DPlatformWindowHandle::hasBlurWindow());
62 // });
63
54 bgBlurWidget = new DBlurEffectWidget(q);
55 bgBlurWidget->lower();
56 bgBlurWidget->setBlendMode(DBlurEffectWidget::BehindWindowBlend);
57 bgBlurWidget->setFull(true);
58 bgBlurWidget->setMaskColor(DBlurEffectWidget::AutoColor);
59 bgBlurWidget->setMaskAlpha(204); // 80%
60 bgBlurWidget->setBlurEnabled(blurIfPossible);
61 q->setAttribute(Qt::WA_TranslucentBackground, blurIfPossible);
6462 } else {
6563 q->setWindowFlags(q->windowFlags() | Qt::FramelessWindowHint);
66 q->setBorderColor(QColor(0, 0, 0));
67 }
68
69 windowTitle = new QLabel(q);
70 windowTitle->setAlignment(Qt::AlignCenter);
71 DAnchorsBase::setAnchor(windowTitle, Qt::AnchorHorizontalCenter, q, Qt::AnchorHorizontalCenter);
72 q->connect(q,&QWidget::windowTitleChanged, windowTitle,[=](const QString &title){
73 windowTitle->setText(title);
74 });
75
76 q->setAttribute(Qt::WA_TranslucentBackground);
64 }
65
7766 q->resize(DIALOG::DEFAULT_WIDTH, DIALOG::DEFAULT_HEIGHT);
78 q->setMaximumWidth(480);
7967 q->setAttribute(Qt::WA_Resized, false);
8068 }
8169
184172 QDialog(parent),
185173 DObject(*new DAbstractDialogPrivate(this))
186174 {
187 DThemeManager::registerWidget(this);
188
189 d_func()->init();
190 }
191
192 /**
193 * \~english \brief DAbstractDialog::backgroundColor
194 * \~english \return the background color of the dialog.
195 *
196 * \~chinese \brief 获取对话框的背景色
197 */
198 QColor DAbstractDialog::backgroundColor() const
199 {
200 D_DC(DAbstractDialog);
201
202 return d->backgroundColor;
203 }
204
205 /**
206 * \~english \brief DAbstractDialog::borderColor
207 * \~english \return the border color of the dialog.
208 *
209 * \~chinese \brief 获取对话框的边框颜色
210 */
211 QColor DAbstractDialog::borderColor() const
212 {
213 D_DC(DAbstractDialog);
214
215 return d->borderColor;
175 d_func()->init(true);
176 }
177
178 DAbstractDialog::DAbstractDialog(bool blurIfPossible, QWidget *parent)
179 : QDialog(parent)
180 , DObject(*new DAbstractDialogPrivate(this))
181 {
182 d_func()->init(blurIfPossible);
216183 }
217184
218185 /*!
296263 {
297264 int x = rect.x() + rect.width() - width();
298265 QDialog::move(QPoint(x, 0));
299 }
300
301 /**
302 * \~english \brief DAbstractDialog::setBackgroundColor sets the background color of the dialog.
303 * \~english \param backgroundColor is the target background color.
304 *
305 * \~chinese \brief 设置对话框的背景色
306 */
307 void DAbstractDialog::setBackgroundColor(QColor backgroundColor)
308 {
309 D_D(DAbstractDialog);
310
311 d->backgroundColor = backgroundColor;
312
313 if (d->bgBlurWidget)
314 d->bgBlurWidget->setMaskColor(backgroundColor);
315
316 update();
317 }
318
319 /**
320 * \~english \brief DAbstractDialog::setBorderColor sets the border color of the dialog.
321 * \~english \param borderColor is the target border color.
322 *
323 * \~chinese \brief 设置对话框边框的颜色
324 */
325 void DAbstractDialog::setBorderColor(QColor borderColor)
326 {
327 D_D(DAbstractDialog);
328
329 d->borderColor = borderColor;
330
331 if (d->handle) {
332 d->handle->setBorderColor(d->borderColor);
333 } else {
334 update();
335 }
336266 }
337267
338268 /**
409339 {
410340 D_D(DAbstractDialog);
411341
342 QWidget *compoment = childAt(event->pos());
343 if (qobject_cast<QComboBox *>(compoment)) {
344 return;
345 }
346
412347 if (d->handle) {
413348 d->handle->setEnableSystemMove(true);
414349
424359 }
425360
426361 /*!\reimp */
427 void DAbstractDialog::paintEvent(QPaintEvent *event)
428 {
429 D_DC(DAbstractDialog);
430
431 QPainter painter(this);
432
433 if (d->handle) {
434 painter.fillRect(event->rect(), d->backgroundColor);
435 } else {
436 painter.setPen(QPen(d->borderColor, DIALOG::BORDER_SHADOW_WIDTH));
437 painter.setBrush(d->backgroundColor);
438 painter.setRenderHint(QPainter::Antialiasing, true);
439 QRectF r(DIALOG::BORDER_SHADOW_WIDTH / 2.0, DIALOG::BORDER_SHADOW_WIDTH / 2.0,
440 width() - DIALOG::BORDER_SHADOW_WIDTH, height() - DIALOG::BORDER_SHADOW_WIDTH);
441 painter.drawRoundedRect(r, DIALOG::BORDER_RADIUS, DIALOG::BORDER_RADIUS);
442 }
443
444 QDialog::paintEvent(event);
445 }
446
447 /*!\reimp */
448362 void DAbstractDialog::resizeEvent(QResizeEvent *event)
449363 {
450364 if (event->size().width() >= maximumWidth()) {
451365 bool resized = testAttribute(Qt::WA_Resized);
452
453 setFixedWidth(maximumWidth());
454366
455367 if (!resized)
456368 setAttribute(Qt::WA_Resized, false);
487399 QDialog(parent),
488400 DObject(dd)
489401 {
490 dd.init();
402 dd.init(true);
491403 }
492404
493405 DWIDGET_END_NAMESPACE
3535 {
3636 Q_OBJECT
3737
38 Q_PROPERTY(QColor backgroundColor READ backgroundColor WRITE setBackgroundColor)
39 Q_PROPERTY(QColor borderColor READ borderColor WRITE setBorderColor)
4038 Q_PROPERTY(DisplayPosition displayPosition READ displayPosition WRITE setDisplayPosition)
4139
4240 public:
5250 Q_ENUMS(DisplayPosition)
5351 Q_ENUMS(DisplayPostion)
5452
55 DAbstractDialog(QWidget *parent = 0);
53 DAbstractDialog(QWidget *parent = nullptr);
54 DAbstractDialog(bool blurIfPossible, QWidget *parent = nullptr);
5655
57 QColor backgroundColor() const;
58 QColor borderColor() const;
5956 DisplayPosition displayPosition() const;
6057
6158 void move(const QPoint &pos);
7269 void moveToCenterByRect(const QRect &rect);
7370 void moveToTopRightByRect(const QRect &rect);
7471
75 void setBackgroundColor(QColor backgroundColor);
76 void setBorderColor(QColor borderColor);
7772 void setDisplayPosition(DisplayPosition displayPosition);
7873
7974 Q_SIGNALS:
8782 void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
8883 void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
8984 void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
90 void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
9185 void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
9286 void showEvent(QShowEvent *event) override;
9387
9488 protected:
95 DAbstractDialog(DAbstractDialogPrivate &dd, QWidget *parent = 0);
89 DAbstractDialog(DAbstractDialogPrivate &dd, QWidget *parent = nullptr);
9690
9791 private:
9892 D_DECLARE_PRIVATE(DAbstractDialog)
0 /*
1 * Copyright (C) 2020 ~ 2021 Deepin Technology Co., Ltd.
2 *
3 * Author: ck <chenke@uniontech.com>
4 *
5 * Maintainer: ck <chenke@uniontech.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #include "DStyle"
22 #include "dalertcontrol.h"
23 #include "private/dalertcontrol_p.h"
24
25 #include <QTimer>
26 #include <QLayout>
27 #include <QEvent>
28
29 DWIDGET_BEGIN_NAMESPACE
30
31 DAlertControlPrivate::DAlertControlPrivate(DAlertControl *q)
32 : DObjectPrivate(q)
33 {
34 alertColor = q->defaultAlertColor();
35 }
36
37 void DAlertControlPrivate::updateTooltipPos()
38 {
39 if (!target || !target->parentWidget()) {
40 return;
41 }
42 QWidget *p = target->parentWidget();
43
44 int w = DStyle::pixelMetric(p->style(), DStyle::PM_FloatingWidgetShadowMargins) / 2;
45 QPoint point = QPoint(target->x() - w, target->y() + target->height() - w);
46 frame->move(p->mapTo(qobject_cast<QWidget *>(frame->parentWidget()), point));
47 int tipWidth= frame->parentWidget()->width() - 40;
48 tooltip->setMaximumWidth(tipWidth);
49 frame->setMinimumHeight(tooltip->heightForWidth(tipWidth) + frame->layout()->spacing() *2);
50 frame->adjustSize();
51
52 int tw = target->width();
53 int fw = frame->width();
54 int leftPending = tw - fw;
55 switch (alignment) {
56 case Qt::AlignRight:
57 point += QPoint(leftPending, 0);
58 break;
59 case Qt::AlignHCenter:
60 case Qt::AlignCenter:
61 point += QPoint(leftPending/2, 0);
62 break;
63 default:
64 return;
65 }
66
67 frame->move(p->mapTo(qobject_cast<QWidget *>(frame->parentWidget()), point));
68 }
69
70 DAlertControl::DAlertControl(QWidget *target, QObject *parent)
71 : QObject(parent)
72 , DObject(*new DAlertControlPrivate(this))
73 {
74 D_D(DAlertControl);
75 d->target = target;
76 }
77
78 DAlertControl::~DAlertControl()
79 {
80 hideAlertMessage();
81 }
82
83 /*!
84 * \~chinese \brief DAlertControl::setAlert设置是否开启警告模式
85 * \~chinese \row 警告模式,开启警告模式,target将显示警告颜色
86 * \~chinese \param isAlert是否开启警告模式
87 */
88 void DAlertControl::setAlert(bool isAlert)
89 {
90 D_D(DAlertControl);
91 if (isAlert == d->isAlert) {
92 return;
93 }
94
95 d->isAlert = isAlert;
96
97 DPalette p = d->target->palette();
98
99 if (isAlert) {
100 p.setColor(QPalette::Button, alertColor());
101 d->target->setPalette(p);
102 } else {
103 d->target->setPalette(QPalette());
104 }
105 d->target->update();
106
107 Q_EMIT alertChanged(isAlert);
108 }
109
110 /*!
111 * \~chinese \brief DAlertControl::alert返回当前是否处于警告模式
112 */
113 bool DAlertControl::isAlert() const
114 {
115 D_DC(DAlertControl);
116
117 return d->isAlert;
118 }
119
120 /*!
121 * \~chinese \brief DAlertControl::defaultAlertColor返回默认告警颜色
122 * \~chinese \row \note 默认颜色和原 DLineEdit 一致
123 */
124 QColor DAlertControl::defaultAlertColor() const
125 {
126 return QColor(241, 57, 50, qRound(0.15 * 255));
127 }
128
129 /*!
130 * \~chinese \brief DAlertControl::setAlertColor 设置告警颜色
131 * \~chinese \param c 告警颜色
132 */
133 void DAlertControl::setAlertColor(QColor c)
134 {
135 D_D(DAlertControl);
136 if (c == d->alertColor) {
137 return;
138 }
139
140 d->alertColor = c;
141 if (d->target) {
142 d->target->update();
143 }
144 }
145
146 /*!
147 * \~chinese \brief DAlertControl::alertColor 返回当前告警颜色
148 */
149 QColor DAlertControl::alertColor() const
150 {
151 D_DC(DAlertControl);
152 return d->alertColor;
153 }
154
155 /*!
156 * \~chinese \brief DAlertControl::setMessageAlignment指定对齐方式
157 * \~chinese \row 现只支持左,右,居中, 默认左对齐.
158 * \~chinese \row \note 参数为其他时,默认左对齐
159 * \~chinese \param alignment消息对齐方式
160 */
161 void DAlertControl::setMessageAlignment(Qt::Alignment alignment)
162 {
163 D_D(DAlertControl);
164 d->alignment = alignment;
165 }
166
167 /*!
168 * \~chinese \brief DAlertControl::messageAlignment 返回当前告警 tooltips 对齐方式
169 */
170 Qt::Alignment DAlertControl::messageAlignment() const
171 {
172 D_DC(DAlertControl);
173 return d->alignment;
174 }
175
176 /*!
177 * \~chinese \brief DAlertControl::showAlertMessage显示警告消息
178 * \~chinese \row 显示指定的文本消息,超过指定时间后警告消息消失.
179 * \~chinese \row \note 时间参数为-1时,警告消息将一直存在
180 * \~chinese \param text警告的文本
181 * \~chinese \param duration显示的时间长度,单位毫秒
182 * \~chinese \param parent tooltip跟随
183 */
184 void DAlertControl::showAlertMessage(const QString &text, int duration)
185 {
186 showAlertMessage(text, nullptr, duration);
187 }
188
189 /*!
190 * \~chinese \brief DAlertControl::showAlertMessage显示警告消息
191 * \~chinese \row 显示指定的文本消息,超过指定时间后警告消息消失.
192 * \~chinese \row \note 时间参数为-1时,警告消息将一直存在
193 * \~chinese \param text警告的文本
194 * \~chinese \param follow指定文本消息跟随的对象
195 * \~chinese \param duration显示的时间长度,单位毫秒
196 */
197 void DAlertControl::showAlertMessage(const QString &text, QWidget *follower, int duration)
198 {
199 D_D(DAlertControl);
200
201 if (!d->tooltip) {
202 d->tooltip = new DToolTip(text);
203 d->tooltip->setObjectName("AlertTooltip");
204 d->tooltip->setForegroundRole(DPalette::TextWarning);
205 d->tooltip->setWordWrap(true);
206
207 d->frame = new DFloatingWidget;
208 d->frame->setFramRadius(DStyle::pixelMetric(d->target->style(), DStyle::PM_FrameRadius));
209 d->frame->setBackgroundRole(QPalette::ToolTipBase);
210 d->frame->setWidget(d->tooltip);
211 }
212
213 if (follower) {
214 d->frame->setParent(follower->parentWidget());
215 d->follower = follower;
216 //installEventFilter(d->follower);
217 d->follower->installEventFilter(this);
218 } else {
219 d->frame->setParent(d->target->parentWidget());
220 d->follower = d->target;
221 d->follower->installEventFilter(this);
222 }
223
224 d->tooltip->setText(text);
225 if (d->frame->parent()) {
226 d->updateTooltipPos();
227 d->frame->show();
228 d->frame->adjustSize();
229 d->frame->raise();
230 }
231 if (duration < 0)
232 return;
233
234 QTimer::singleShot(duration, this, &DAlertControl::hideAlertMessage);
235 }
236
237 /*!
238 * \~chinese \brief DAlertControl:: hideAlertMessage隐藏警告消息框
239 */
240 void DAlertControl::hideAlertMessage()
241 {
242 Q_D(DAlertControl);
243
244 if (d->frame) {
245 d->frame->hide();
246 if (d->follower) {
247 //this->removeEventFilter(d->follower);
248 d->follower->removeEventFilter(this);
249 d->follower = nullptr;
250 }
251 }
252 }
253
254 DAlertControl::DAlertControl(DAlertControlPrivate &d, QObject *parent)
255 : QObject(parent)
256 , DObject(d)
257 {
258
259 }
260
261 bool DAlertControl::eventFilter(QObject *watched, QEvent *event)
262 {
263 Q_D(DAlertControl);
264 if (watched == d->follower && (event->type() == QEvent::Move ||
265 event->type() == QEvent::Resize)) {
266 d->updateTooltipPos();
267 }
268 return QObject::eventFilter(watched, event);
269 }
270
271 DWIDGET_END_NAMESPACE
0 /*
1 * Copyright (C) 2020 ~ 2021 Deepin Technology Co., Ltd.
2 *
3 * Author: ck <chenke@uniontech.com>
4 *
5 * Maintainer: ck <chenke@uniontech.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #ifndef DALERTCONTROL_H
22 #define DALERTCONTROL_H
23
24 #include <QObject>
25 #include <QPointer>
26
27 #include <DFloatingWidget>
28 #include <DToolTip>
29
30 DWIDGET_BEGIN_NAMESPACE
31 class DAlertControlPrivate;
32 class LIBDTKWIDGETSHARED_EXPORT DAlertControl : public QObject, public DTK_CORE_NAMESPACE::DObject
33 {
34 Q_OBJECT
35 Q_DISABLE_COPY(DAlertControl)
36 D_DECLARE_PRIVATE(DAlertControl)
37 Q_PROPERTY(bool alert READ isAlert WRITE setAlert NOTIFY alertChanged)
38 Q_PROPERTY(QColor alertColor READ alertColor WRITE setAlertColor)
39
40 public:
41 explicit DAlertControl(QWidget *target, QObject *parent = nullptr);
42 ~DAlertControl() override;
43
44 void setAlert(bool isAlert);
45 bool isAlert() const;
46 void setAlertColor(QColor c);
47 QColor alertColor() const;
48 QColor defaultAlertColor() const;
49 void setMessageAlignment(Qt::Alignment alignment);
50 Qt::Alignment messageAlignment() const;
51 void showAlertMessage(const QString &text, int duration = 3000);
52 void showAlertMessage(const QString &text, QWidget *follower, int duration = 3000);
53 void hideAlertMessage();
54
55 Q_SIGNALS:
56 void alertChanged(bool alert) const;
57
58 protected:
59 DAlertControl(DAlertControlPrivate &d, QObject *parent);
60 bool eventFilter(QObject *watched, QEvent *event) override;
61
62 };
63
64 DWIDGET_END_NAMESPACE
65 #endif // DALERTCONTROL_H
4949 #include "dthememanager.h"
5050 #include "private/dapplication_p.h"
5151 #include "daboutdialog.h"
52 #include "dmainwindow.h"
53
54 #include <DPlatformHandle>
55 #include <DGuiApplicationHelper>
5256
5357 #ifdef Q_OS_UNIX
5458 #include <QDBusError>
8286 auto cancelNotification = [this, q](const QString id) {
8387 m_monitoredStartupApps.removeAll(id);
8488 if (m_monitoredStartupApps.isEmpty()) {
85 q->setOverrideCursor(Qt::ArrowCursor);
89 q->restoreOverrideCursor();
8690 }
8791 };
8892 QObject::connect(monitor, &StartupNotificationMonitor::appStartup,
98102 QObject::connect(monitor, &StartupNotificationMonitor::appStartupCompleted,
99103 q, cancelNotification);
100104 #endif
105
106 QApplication::setStyle("chameleon");
101107 }
102108
103109 DApplicationPrivate::~DApplicationPrivate()
289295 return false;
290296 }
291297
292 void DApplicationPrivate::resetApplicationThemeType()
293 {
294 D_QC(DApplication);
295 // 在 DThemeManager 初始化期间会调用 QApplicationi::setStyle
296 // 这将导致应用程序的调色板发生变化,因此先初始化DThemeManager对象
297 // 之后再获取调色板中的背景色
298 DThemeManager *tm = DThemeManager::instance();
299
300 // tm为空说明DThemeManager对象正在被初始化
301 if (!tm) {
298 // 自动激活DMainWindow类型的窗口
299 void DApplicationPrivate::_q_onNewInstanceStarted()
300 {
301 if (!autoActivateWindows)
302302 return;
303 }
304
305 const QColor &window_background = q->palette().background().color();
306
307 // 颜色无效时不处理(窗口背景可能为图片)
308 if (!window_background.isValid()) {
309 return;
310 }
311
312 DThemeManager::ThemeType type = DThemeManager::toThemeType(window_background);
313 tm->setThemeType(type);
314 }
315
316 void DApplicationPrivate::resetWindowThemeType(QWidget *window)
317 {
318 D_QC(DApplication);
319
320 // 如果窗口未自定义调色板,则清除其“主题类型”的设置
321 if (!window->testAttribute(Qt::WA_SetPalette)) {
322 DThemeManager::instance()->setThemeType(window, DThemeManager::UnknownType);
323 return;
324 }
325
326 const QColor &window_background = window->palette().background().color();
327
328 // 颜色无效时不处理(窗口背景可能为图片)
329 if (!window_background.isValid()) {
330 return;
331 }
332
333 DThemeManager::ThemeType type = DThemeManager::toThemeType(window_background);
334 DThemeManager::instance()->setThemeType(window, type);
303
304 for (QWidget *window : qApp->topLevelWidgets()) {
305 if (qobject_cast<DMainWindow*>(window)) {
306 // 如果窗口最小化,應當先將其show出來
307 if (window->isMinimized())
308 window->showNormal();
309
310 window->activateWindow();
311 break; // 只激活找到的第一个窗口
312 }
313 }
335314 }
336315
337316 bool DApplicationPrivate::isUserManualExists()
464443 QTapAndHoldGesture::setTimeout(gsettings.get("longpress-duration").toInt() - 100);
465444 }
466445 #endif
467
468 // 初始化窗口主题类型
469 d_func()->resetApplicationThemeType();
470446 }
471447
472448
553529 */
554530 bool DApplication::setSingleInstance(const QString &key)
555531 {
556 return setSingleInstance(key, SystemScope);
532 return setSingleInstance(key, UserScope);
557533 }
558534
559535 /*!
568544 {
569545 D_D(DApplication);
570546
571 QString k = key;
572
573 #ifdef Q_OS_UNIX
574 switch (singleScope) {
575 case DApplication::UserScope:
576 k += QString("_%1").arg(getuid());
577 break;
578 default:
579 break;
580 }
581 #endif
582
583 #ifdef Q_OS_UNIX
584 if (!qEnvironmentVariableIsSet("DTK_USE_SEMAPHORE_SINGLEINSTANCE")) {
585 return d->setSingleInstanceByDbus(k);
586 }
587 #endif
588 return d->setSingleInstanceBySemaphore(k);
547 auto scope = singleScope == SystemScope ? DGuiApplicationHelper::WorldScope : DGuiApplicationHelper::UserScope;
548 connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::newProcessInstance,
549 this, &DApplication::newInstanceStarted, Qt::UniqueConnection);
550
551 return DGuiApplicationHelper::setSingleInstance(key, scope);
589552 }
590553
591554 /*!
657620 */
658621 bool DApplication::isDXcbPlatform()
659622 {
660 if (!qApp)
661 return false;
662
663 static bool _is_dxcb = qApp->platformName() == DXCB_PLUGIN_KEY || qApp->property(DXCB_PLUGIN_SYMBOLIC_PROPERTY).toBool();
664
665 return _is_dxcb;
623 return DGUI_NAMESPACE::DPlatformHandle::isDXcbPlatform();
666624 }
667625
668626 /*!
1033991 d->visibleMenuIcon = value;
1034992 }
1035993
994 bool DApplication::autoActivateWindows() const
995 {
996 D_DC(DApplication);
997
998 return d->autoActivateWindows;
999 }
1000
1001 void DApplication::setAutoActivateWindows(bool autoActivateWindows)
1002 {
1003 D_D(DApplication);
1004
1005 d->autoActivateWindows = autoActivateWindows;
1006
1007 if (autoActivateWindows) {
1008 connect(DGuiApplicationHelper::instance(), SIGNAL(newProcessInstance(qint64, const QStringList &)),
1009 this, SLOT(_q_onNewInstanceStarted()));
1010 } else {
1011 disconnect(DGuiApplicationHelper::instance(), SIGNAL(newProcessInstance(qint64, const QStringList &)),
1012 this, SLOT(_q_onNewInstanceStarted()));
1013 }
1014 }
1015
10361016 /**
10371017 * \~english @brief DApplication::handleHelpAction
10381018 *
10981078 }
10991079 aboutDialog->setAcknowledgementVisible(d->acknowledgementPageVisible);
11001080
1101 aboutDialog->exec();
1102 aboutDialog->deleteLater();
1081 aboutDialog->show();
1082 aboutDialog->setAttribute(Qt::WA_DeleteOnClose);
1083
1084 //目前的关于对话框是非模态的,这里的处理是防止关于对话框可以打开多个的情况
1085 d->aboutDialog = aboutDialog;
1086 connect(d->aboutDialog, &DAboutDialog::aboutToClose, this, [=] {
1087 d->aboutDialog = nullptr;
1088 });
11031089 }
11041090
11051091 /**
11341120
11351121 bool DApplication::notify(QObject *obj, QEvent *event)
11361122 {
1137 switch((int)event->type()) {
1138 case QEvent::PolishRequest: {
1139 // Fixed the style for the menu widget to dlight
1140 // ugly code will no longer needed.
1141 static QStyle *light_style = nullptr;
1142
1143 if (QMenu *menu = qobject_cast<QMenu *>(obj)) {
1144 if (!menu->testAttribute(Qt::WA_SetStyle)) {
1145 if (!light_style) {
1146 light_style = QStyleFactory::create("dlight");
1147 }
1148
1149 if (light_style) {
1150 menu->setStyle(light_style);
1151 }
1123 if (event->type() == QEvent::FocusIn) {
1124 QFocusEvent *fe = static_cast<QFocusEvent*>(event);
1125 QWidget *widget = qobject_cast<QWidget*>(obj);
1126
1127 if (widget && fe->reason() == Qt::ActiveWindowFocusReason && !widget->isTopLevel()
1128 && (widget->focusPolicy() & Qt::StrongFocus) != Qt::StrongFocus) {
1129 // 针对激活窗口所获得的焦点,为了避免被默认给到窗口内部的控件上,此处将焦点还给主窗口
1130 // 并且只设置一次
1131 #define NON_FIRST_ACTIVE "_d_dtk_non_first_active_focus"
1132 QWidget *top_window = widget->topLevelWidget();
1133
1134 if (top_window->isWindow() && !top_window->property(NON_FIRST_ACTIVE).toBool()) {
1135 top_window->setFocus();
1136 top_window->setProperty(NON_FIRST_ACTIVE, true);
11521137 }
11531138 }
1154 #ifdef Q_OS_LINUX
1155 else if (QWidget *widget = qobject_cast<QWidget *>(obj)) {
1156 if (!widget->testAttribute(Qt::WA_SetStyle)
1157 && (widget->inherits("QPrintDialog")
1158 || widget->inherits("QPrintPropertiesDialog")
1159 || widget->inherits("QPageSetupDialog")
1160 || widget->inherits("QPrintPreviewDialog")
1161 || (widget->inherits("QComboBoxPrivateContainer")
1162 && basePrintPropertiesDialog(widget)))) {
1163 if (!light_style) {
1164 light_style = QStyleFactory::create("dlight");
1165 }
1166
1167 if (light_style) {
1168 widget->setStyle(light_style);
1169
1170 if (widget->style() != light_style) {
1171 widget->style()->deleteLater();
1172 widget->d_func()->setStyle_helper(light_style, false);
1173 }
1174
1175 for (QWidget *w : widget->findChildren<QWidget *>()) {
1176 w->setStyle(light_style);
1177 }
1178 }
1179 }
1180 }
1181 #endif
1182 break;
1183 }
1184 case QEvent::ParentChange: {
1185 if (QWidget *widget = qobject_cast<QWidget *>(obj)) {
1186 DThemeManager::instance()->updateThemeOnParentChanged(widget);
1187 }
1188 break;
1189 }
1190 // 处理应用程序和主窗口的调色板变化事件,以此更新程序/窗口的主题类型
1191 case QEvent::ApplicationPaletteChange: {
1192 // 只处理发送给application对象的事件
1193 if (obj == this) {
1194 D_D(DApplication);
1195 d->resetApplicationThemeType();
1196 }
1197 break;
1198 }
1199 case QEvent::PaletteChange: {
1200 D_D(DApplication);
1201
1202 if (QWidget *window = qobject_cast<QWidget*>(obj)) {
1203 if (window->isTopLevel()) {
1204 d->resetWindowThemeType(window);
1205 }
1206 }
1207 break;
1208 }
12091139 }
12101140
12111141 return QApplication::notify(obj, event);
12141144 int DtkBuildVersion::value = 0;
12151145
12161146 DWIDGET_END_NAMESPACE
1147
1148 #include "moc_dapplication.cpp"
1717 #ifndef DAPPLICATION_H
1818 #define DAPPLICATION_H
1919
20 #include <dtkwidget_global.h>
21 #include <DObject>
22 #include <DPalette>
23
2024 #include <QApplication>
2125
22 #include "dtkwidget_global.h"
23 #include "dobject.h"
24
26 DGUI_USE_NAMESPACE
2527 DWIDGET_BEGIN_NAMESPACE
2628
2729 #define DAPPLICATION_XSTRING(s) DAPPLICATION_STRING(s)
4345 Q_PROPERTY(bool visibleMenuShortcutText READ visibleMenuShortcutText WRITE setVisibleMenuShortcutText)
4446 Q_PROPERTY(bool visibleMenuCheckboxWidget READ visibleMenuCheckboxWidget WRITE setVisibleMenuCheckboxWidget)
4547 Q_PROPERTY(bool visibleMenuIcon READ visibleMenuIcon WRITE setVisibleMenuIcon)
48 Q_PROPERTY(bool autoActivateWindows READ autoActivateWindows WRITE setAutoActivateWindows)
4649
4750 public:
4851 DApplication(int &argc, char **argv);
5255 SystemScope
5356 };
5457
55 QString theme() const;
56 void setTheme(const QString &theme);
58 D_DECL_DEPRECATED QString theme() const;
59 D_DECL_DEPRECATED void setTheme(const QString &theme);
5760
5861 #ifdef Q_OS_UNIX
5962 void setOOMScoreAdj(const int score);
6063 #endif
6164
6265 bool setSingleInstance(const QString &key);
63
6466 bool setSingleInstance(const QString &key, SingleScope singleScope);
6567
6668 bool loadTranslator(QList<QLocale> localeFallback = QList<QLocale>() << QLocale::system());
115117 bool visibleMenuIcon() const;
116118 void setVisibleMenuIcon(bool value);
117119
120 bool autoActivateWindows() const;
121 void setAutoActivateWindows(bool autoActivateWindows);
122
118123 #ifdef VERSION
119124 static inline QString buildVersion(const QString &fallbackVersion)
120125 {
149154 private:
150155 friend class DTitlebarPrivate;
151156 friend class DMainWindowPrivate;
157
158 D_PRIVATE_SLOT(void _q_onNewInstanceStarted())
152159 };
153160
154161 class DtkBuildVersion {
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #include "dapplicationhelper.h"
21 #include "dstyleoption.h"
22
23 #include <QWidget>
24
25 DWIDGET_BEGIN_NAMESPACE
26
27 class _DApplicationHelper {
28 public:
29 static DGuiApplicationHelper *createHelper()
30 {
31 return new DApplicationHelper();
32 }
33 };
34
35 __attribute__((constructor)) // 在库被加载时就执行此函数
36 static void init_createHelper ()
37 {
38 DApplicationHelper::registerInstanceCreator(_DApplicationHelper::createHelper);
39 }
40
41 class DApplicationHelperPrivate
42 {
43 public:
44 QHash<const QWidget*, DPalette> paletteCache;
45 };
46
47 static DApplicationHelperPrivate *d = nullptr;
48
49 /*!
50 * \~chinese \class DApplicationHelper
51 * \~chinese \brief DApplicationHelper提供了一个修改的 DGuiApplicationHelper 类
52 */
53
54 /*!
55 * \~chinese \brief DApplicationHelper::instance返回 DApplicationHelper 对象
56 */
57 DApplicationHelper *DApplicationHelper::instance()
58 {
59 return qobject_cast<DApplicationHelper*>(DGuiApplicationHelper::instance());
60 }
61
62 /*!
63 * \~chinese \brief DApplicationHelper::palette返回调色板
64 * \~chinese \param widget控件
65 * \~chinese \param base调色板
66 * \~chinese \return 调色板
67 */
68 DPalette DApplicationHelper::palette(const QWidget *widget, const QPalette &base) const
69 {
70 DPalette palette;
71
72 if (!widget) {
73 return applicationPalette();
74 }
75
76 do {
77 // 先从缓存中取数据
78 if (d->paletteCache.contains(widget)) {
79 palette = d->paletteCache.value(widget);
80 break;
81 }
82
83 if (QWidget *parent = widget->parentWidget()) {
84 palette = this->palette(parent, base);
85 } else {
86 palette = applicationPalette();
87 }
88
89 // 判断widget对象有没有被设置过palette
90 if (widget->testAttribute(Qt::WA_SetPalette)) {
91 // 存在自定义palette时应该根据其自定义的palette获取对应色调的DPalette
92 const QPalette &wp = widget->palette();
93
94 // 判断控件自己的palette色调是否和要继承调色板色调一致
95 if (toColorType(palette) != toColorType(wp)) {
96 // 不一致时则fallback到标准的palette
97 palette = standardPalette(toColorType(wp));
98 }
99 }
100
101 // 缓存数据
102 d->paletteCache.insert(widget, palette);
103 // 关注控件palette改变的事件
104 const_cast<QWidget*>(widget)->installEventFilter(const_cast<DApplicationHelper*>(this));
105 } while (false);
106
107 palette.QPalette::operator =(base.resolve() ? base : widget->palette());
108
109 return palette;
110 }
111
112 /*!
113 * \~chinese \brief DApplicationHelper::setPalette将调色板设置到控件
114 * \~chinese \param widget控件
115 * \~chinese \param palette调色板
116 */
117 void DApplicationHelper::setPalette(QWidget *widget, const DPalette &palette)
118 {
119 d->paletteCache.insert(widget, palette);
120 // 记录此控件被设置过palette
121 widget->setProperty("_d_set_palette", true);
122 widget->setPalette(palette);
123 }
124
125 /*!
126 * \~chinese \brief DApplicationHelper::resetPalette重置控件的调色板属性
127 * \~chinese \param widget控件
128 */
129 void DApplicationHelper::resetPalette(QWidget *widget)
130 {
131 // 清理数据
132 d->paletteCache.remove(widget);
133 widget->setProperty("_d_set_palette", QVariant());
134 widget->setAttribute(Qt::WA_SetPalette, false);
135 }
136
137 DApplicationHelper::DApplicationHelper()
138 {
139 if (!d)
140 d = new DApplicationHelperPrivate();
141 }
142
143 DApplicationHelper::~DApplicationHelper()
144 {
145 if (d) {
146 delete d;
147 d = nullptr;
148 }
149 }
150
151 bool DApplicationHelper::eventFilter(QObject *watched, QEvent *event)
152 {
153 if (Q_UNLIKELY(event->type() == QEvent::PaletteChange)) {
154 if (QWidget *widget = qobject_cast<QWidget*>(watched)) {
155 if (!widget->property("_d_set_palette").toBool()) {
156 // 清理缓存
157 d->paletteCache.remove(widget);
158 }
159 }
160 }
161
162 return DGuiApplicationHelper::eventFilter(watched, event);
163 }
164
165 bool DApplicationHelper::event(QEvent *event)
166 {
167 if (event->type() == QEvent::ApplicationFontChange) {
168 DFontSizeManager::instance()->setFontGenericPixelSize(DFontSizeManager::fontPixelSize(qGuiApp->font()));
169 }
170
171 return DGuiApplicationHelper::event(event);
172 }
173
174 DWIDGET_END_NAMESPACE
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #ifndef DAPPLICATIONHELPER_H
21 #define DAPPLICATIONHELPER_H
22
23 #include <dtkwidget_global.h>
24 #include <DGuiApplicationHelper>
25 #include <DPalette>
26
27 DGUI_USE_NAMESPACE
28 DWIDGET_BEGIN_NAMESPACE
29
30 class DApplicationHelper : public DGuiApplicationHelper
31 {
32 Q_OBJECT
33
34 public:
35 static DApplicationHelper *instance();
36
37 DPalette palette(const QWidget *widget, const QPalette &base = QPalette()) const;
38 void setPalette(QWidget *widget, const DPalette &palette);
39 void resetPalette(QWidget *widget);
40
41 private:
42 DApplicationHelper();
43 ~DApplicationHelper();
44
45 bool eventFilter(QObject *watched, QEvent *event) override;
46 bool event(QEvent *event) override;
47
48 friend class _DApplicationHelper;
49 };
50
51 DWIDGET_END_NAMESPACE
52
53 #endif // DAPPLICATIONHELPER_H
8080 DArrowButton::DArrowButton(QWidget *parent)
8181 : QLabel(parent)
8282 {
83 DThemeManager::registerWidget(this);
84
8583 setFixedSize(IMAGE_BUTTON_WIDTH, BUTTON_HEIGHT);
8684
8785 m_normalLabel = new ArrowButtonIcon(this);
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #include "darrowlinedrawer.h"
21 #include "dheaderline.h"
22 #include "diconbutton.h"
23 #include "private/ddrawer_p.h"
24
25 #include <QResizeEvent>
26
27 DWIDGET_BEGIN_NAMESPACE
28
29 namespace HeaderLine {
30 class ArrowHeaderLine : public DHeaderLine
31 {
32 Q_OBJECT
33 public:
34 ArrowHeaderLine(QWidget *parent = nullptr);
35 void setExpand(bool value);
36
37 Q_SIGNALS:
38 void mousePress();
39
40 protected:
41 void mousePressEvent(QMouseEvent *) override;
42 void mouseMoveEvent(QMouseEvent *event) override;
43
44 private:
45 void reverseArrowDirection();
46 bool m_isExpanded = false;
47 DIconButton *m_arrowButton = nullptr;
48 };
49
50 ArrowHeaderLine::ArrowHeaderLine(QWidget *parent) :
51 DHeaderLine(parent)
52 {
53 m_arrowButton = new DIconButton(DStyle::SP_ReduceElement, this);
54 m_arrowButton->setFlat(true);
55 setExpand(false);
56 connect(m_arrowButton, &DIconButton::clicked, this, &ArrowHeaderLine::mousePress);
57 setContent(m_arrowButton);
58 setFixedHeight(EXPAND_HEADER_HEIGHT);
59 }
60
61 void ArrowHeaderLine::setExpand(bool value)
62 {
63 if (value) {
64 m_arrowButton->setIcon(DStyle::SP_ExpandElement);
65 } else {
66 m_arrowButton->setIcon(DStyle::SP_ReduceElement);
67 }
68 m_isExpanded = value;
69 }
70
71 void ArrowHeaderLine::mousePressEvent(QMouseEvent *)
72 {
73 Q_EMIT mousePress();
74 }
75
76 void ArrowHeaderLine::mouseMoveEvent(QMouseEvent *event)
77 {
78 //屏蔽掉鼠标移动事件
79 event->accept();
80 }
81
82 void ArrowHeaderLine::reverseArrowDirection()
83 {
84 setExpand(!m_isExpanded);
85 }
86 }
87 using namespace HeaderLine;
88
89 class DArrowLineDrawerPrivate : public DDrawerPrivate
90 {
91 public:
92 D_DECLARE_PUBLIC(DArrowLineDrawer)
93 explicit DArrowLineDrawerPrivate(DDrawer *qq)
94 : DDrawerPrivate(qq) {
95
96 }
97
98 ArrowHeaderLine *headerLine = nullptr;
99 };
100
101 /**
102 * \~chinese \class DArrowLineDrawer
103 * \~chinese \brief 一个美观的可展开的控件
104 * \~chinese
105 * \~chinese DArrowLineDrawer 继承自 DDrawer 并提供了了 ArrowHeaderLine (一个带有箭头标示的按钮)作为其固定的标题控件,也就是说跟 DDrawer 相比省去了提供标题控件的步骤,只需要提供内容控件即可,如果需要自定义标题控件应该使用 DDrawer 类。
106 * \~chinese \sa DDrawer
107 */
108
109 /**
110 * \~chinese \brief 构造一个 DArrowLineDrawer 实例
111 * \~chinese
112 * \~chinese \param parent 为实例的父控件
113 */
114 DArrowLineDrawer::DArrowLineDrawer(QWidget *parent)
115 : DDrawer(*new DArrowLineDrawerPrivate(this), parent)
116 {
117 D_D(DArrowLineDrawer);
118 d->headerLine = new ArrowHeaderLine(this);
119 d->headerLine->setExpand(expand());
120 connect(d->headerLine, &ArrowHeaderLine::mousePress, [=]{
121 setExpand(!expand());
122 });
123 setHeader(d->headerLine);
124 }
125
126 /**
127 * \~chinese \brief 设置标题要显示的文字
128 * \~chinese
129 * \~chinese \param title 标题内容
130 */
131 void DArrowLineDrawer::setTitle(const QString &title)
132 {
133 D_D(DArrowLineDrawer);
134 d->headerLine->setTitle(title);
135 }
136
137 /**
138 * \~chinese \brief 设置是否展开以显示内容控件
139 * \~chinese
140 * \~chinese \param value 为 true 即为显示,反之则反
141 */
142 void DArrowLineDrawer::setExpand(bool value)
143 {
144 D_D(DArrowLineDrawer);
145 //Header's arrow direction change here
146 d->headerLine->setExpand(value);
147 DDrawer::setExpand(value);
148 }
149
150 /**
151 * \~chinese \brief 获取标题控件
152 * \~chinese \return 标题控件
153 * \~chinese \sa ArrowHeaderLine DHeaderLine DBaseLine
154 */
155 DBaseLine *DArrowLineDrawer::headerLine()
156 {
157 D_D(DArrowLineDrawer);
158 return d->headerLine;
159 }
160
161 void DArrowLineDrawer::setHeader(QWidget *header)
162 {
163 DDrawer::setHeader(header);
164 }
165
166 void DArrowLineDrawer::resizeEvent(QResizeEvent *e)
167 {
168 D_D(DArrowLineDrawer);
169 d->headerLine->setFixedWidth(e->size().width());
170
171 DDrawer::resizeEvent(e);
172 }
173
174 DWIDGET_END_NAMESPACE
175
176 #include "darrowlinedrawer.moc"
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #ifndef DARROWLINEDRAWER_H
21 #define DARROWLINEDRAWER_H
22
23 #include <DDrawer>
24
25 DWIDGET_BEGIN_NAMESPACE
26
27 class DBaseLine;
28 class DArrowLineDrawerPrivate;
29 class LIBDTKWIDGETSHARED_EXPORT DArrowLineDrawer : public DDrawer
30 {
31 Q_OBJECT
32 D_DECLARE_PRIVATE(DArrowLineDrawer)
33
34 public:
35 explicit DArrowLineDrawer(QWidget *parent = nullptr);
36 void setTitle(const QString &title);
37 void setExpand(bool value);
38 D_DECL_DEPRECATED DBaseLine *headerLine();
39
40 private:
41 void setHeader(QWidget *header);
42 void resizeEvent(QResizeEvent *e);
43 };
44
45 DWIDGET_END_NAMESPACE
46
47 #endif // DARROWLINEDRAWER_H
2424 ArrowHeaderLine::ArrowHeaderLine(QWidget *parent) :
2525 DHeaderLine(parent)
2626 {
27 m_arrowButton = new DArrowButton(this);
28 connect(m_arrowButton, &DArrowButton::mouseRelease, this, &ArrowHeaderLine::mousePress);
27 m_arrowButton = new DIconButton(DStyle::SP_ReduceElement, this);
28 m_arrowButton->setFlat(true);
29 setExpand(false);
30 connect(m_arrowButton, &DIconButton::clicked, this, &ArrowHeaderLine::mousePress);
2931 setContent(m_arrowButton);
3032 setFixedHeight(EXPAND_HEADER_HEIGHT);
3133 }
3234
3335 void ArrowHeaderLine::setExpand(bool value)
3436 {
35 if (value)
36 m_arrowButton->setArrowDirection(DArrowButton::ArrowUp);
37 else
38 m_arrowButton->setArrowDirection(DArrowButton::ArrowDown);
37 if (value) {
38 m_arrowButton->setIcon(DStyle::SP_ExpandElement);
39 } else {
40 m_arrowButton->setIcon(DStyle::SP_ReduceElement);
41 }
42 m_isExpanded = value;
3943 }
4044
4145 void ArrowHeaderLine::mousePressEvent(QMouseEvent *)
4347 Q_EMIT mousePress();
4448 }
4549
50 void ArrowHeaderLine::mouseMoveEvent(QMouseEvent *event)
51 {
52 //屏蔽掉鼠标移动事件
53 event->accept();
54 }
55
4656 void ArrowHeaderLine::reverseArrowDirection()
4757 {
48 if (m_arrowButton->arrowDirection() == DArrowButton::ArrowUp)
49 m_arrowButton->setArrowDirection(DArrowButton::ArrowDown);
50 else
51 m_arrowButton->setArrowDirection(DArrowButton::ArrowUp);
58 setExpand(!m_isExpanded);
5259 }
5360
5461 /**
2121
2222 #include "dtkwidget_global.h"
2323 #include "dbaseexpand.h"
24 #include "darrowbutton.h"
24 #include "diconbutton.h"
2525 #include "dbaseline.h"
2626 #include "dheaderline.h"
27
2827 DWIDGET_BEGIN_NAMESPACE
2928
30 class ArrowHeaderLine : public DHeaderLine
29 class D_DECL_DEPRECATED ArrowHeaderLine : public DHeaderLine
3130 {
3231 Q_OBJECT
3332 public:
34 ArrowHeaderLine(QWidget *parent = 0);
33 ArrowHeaderLine(QWidget *parent = nullptr);
3534 void setExpand(bool value);
3635
3736 Q_SIGNALS:
3938
4039 protected:
4140 void mousePressEvent(QMouseEvent *);
41 void mouseMoveEvent(QMouseEvent *);
4242
4343 private:
4444 void reverseArrowDirection();
45 DArrowButton *m_arrowButton = NULL;
45 bool m_isExpanded = false;
46 DIconButton *m_arrowButton = nullptr;
4647 };
4748
48 class LIBDTKWIDGETSHARED_EXPORT DArrowLineExpand : public DBaseExpand
49 class LIBDTKWIDGETSHARED_EXPORT D_DECL_DEPRECATED_X("Use DArrowLineDrawer") DArrowLineExpand : public DBaseExpand
4950 {
5051 Q_OBJECT
5152 public:
52 explicit DArrowLineExpand(QWidget *parent = 0);
53 explicit DArrowLineExpand(QWidget *parent = nullptr);
5354 void setTitle(const QString &title);
5455 void setExpand(bool value);
5556 DBaseLine *headerLine();
5960 void resizeEvent(QResizeEvent *e);
6061
6162 private:
62 ArrowHeaderLine *m_headerLine = NULL;
63 ArrowHeaderLine *m_headerLine = nullptr;
6364 };
6465
6566 DWIDGET_END_NAMESPACE
1818 #include "dplatformwindowhandle.h"
1919 #include "dapplication.h"
2020 #include "private/darrowrectangle_p.h"
21 #include "dstyle.h"
22
23 #include <DGuiApplicationHelper>
2124
2225 #ifdef Q_OS_LINUX
2326 #include <X11/extensions/shape.h>
307310 {
308311 switch (e->type()) {
309312 case QEvent::WindowDeactivate: Q_EMIT windowDeactivate(); break;
313 case QEvent::Polish: {
314 D_D(DArrowRectangle);
315 if (d->m_radius < 0)
316 d->m_radius = DStyleHelper(style()).pixelMetric(DStyle::PM_TopLevelWindowRadius);
317 break;
318 }
310319 default:;
311320 }
312321
10821091 m_handle->setTranslucentBackground(true);
10831092
10841093 m_blurBackground = new DBlurEffectWidget(q);
1085 m_blurBackground->setMaskColor(DBlurEffectWidget::DarkColor);
10861094 m_blurBackground->setBlendMode(DBlurEffectWidget::BehindWindowBlend);
10871095
10881096 m_wmHelper = DWindowManagerHelper::instance();
11691177
11701178 #ifdef Q_OS_LINUX
11711179 const qreal ratio = qApp->devicePixelRatio();
1172 if (!m_handle && !floatMode) {
1180 if (!m_handle && !floatMode && DGUI_NAMESPACE::DGuiApplicationHelper::instance()->isXWindowPlatform()) {
11731181 XRectangle m_contentXRect;
11741182 m_contentXRect.x = m_content->pos().x() * ratio;
11751183 m_contentXRect.y = m_content->pos().y() * ratio;
11901198 return;
11911199 }
11921200
1201 QColor bk_color;
1202
1203 if (!m_backgroundColor.isValid()) {
1204 bk_color = qApp->palette().background().color();
1205 } else {
1206 bk_color = m_backgroundColor;
1207 }
1208
11931209 QPainter painter(q);
11941210
11951211 if (m_handle) {
1196 painter.fillRect(e->rect(), m_backgroundColor);
1212 painter.fillRect(e->rect(), bk_color);
11971213 } else {
11981214 painter.setRenderHint(QPainter::Antialiasing);
11991215
12171233 }
12181234
12191235 painter.setClipPath(border);
1220 painter.fillPath(border, QBrush(m_backgroundColor));
1236 painter.fillPath(border, QBrush(bk_color));
12211237
12221238 QPen strokePen;
12231239 strokePen.setColor(m_borderColor);
00 #include "dbackgroundgroup.h"
11 #include "dstyleoption.h"
2 #include "dstyle.h"
3 #include "dobject_p.h"
4
25 #include <QBoxLayout>
3
46 #include <QStylePainter>
5 #include <QStyleOptionButton>
7 #include <QEvent>
68
79 DWIDGET_BEGIN_NAMESPACE
810
9 void DBackgroundGroup::paintEvent(QPaintEvent *event)
10 {
11 Q_UNUSED(event);
12
13 DStyleOptionBackgroundGroup::BackgroundDirection direction;
14 if (QBoxLayout* boxLayout = qobject_cast<QBoxLayout*>(layout())) {
11 class DBackgroundGroupPrivate : public DCORE_NAMESPACE::DObjectPrivate
12 {
13 public:
14 DBackgroundGroupPrivate(DBackgroundGroup *qq)
15 : DObjectPrivate(qq)
16 {
17
18 }
19
20 void updateOptions()
21 {
22 D_QC(DBackgroundGroup);
23
24 QList<QWidget*> items = q->findChildren<QWidget*>(QString(), Qt::FindDirectChildrenOnly);
25 QList<QPair<QWidget*, DStyleOptionBackgroundGroup::ItemBackgroundPosition>> itemStyleOptions;
26 itemStyleOptions.reserve(items.size());
27
28 if (items.isEmpty()) {
29 itemStyleOptions << qMakePair(nullptr, DStyleOptionBackgroundGroup::Invalid);
30 } else {
31 QWidget* first = items.first();
32 QWidget* last = items.last();
33
34 if (first == last) {
35 itemStyleOptions << qMakePair(first, DStyleOptionBackgroundGroup::OnlyOne);
36 } else {
37 items.removeOne(first);
38 items.removeOne(last);
39
40 if (q->layoutDirection() == Qt::LeftToRight) {
41 itemStyleOptions << qMakePair(first, DStyleOptionBackgroundGroup::Beginning);
42 } else {
43 itemStyleOptions << qMakePair(first, DStyleOptionBackgroundGroup::End);
44 }
45
46 for (auto it = items.cbegin(); it != items.cend(); ++it) {
47 itemStyleOptions << qMakePair(*it, DStyleOptionBackgroundGroup::Middle);
48 }
49
50 if (q->layoutDirection() == Qt::LeftToRight) {
51 itemStyleOptions << qMakePair(last, DStyleOptionBackgroundGroup::End);
52 } else {
53 itemStyleOptions << qMakePair(last, DStyleOptionBackgroundGroup::Beginning);
54 }
55 }
56 }
57
58 this->itemStyleOptions = itemStyleOptions;
59 }
60
61 void updateLayoutSpacing();
62
63 Qt::Orientations direction;
64 QList<QPair<QWidget*, DStyleOptionBackgroundGroup::ItemBackgroundPosition>> itemStyleOptions;
65 QMargins itemMargins;
66 int itemSpacing = -1;
67 bool useWidgetBackground = true;
68
69 D_DECLARE_PUBLIC(DBackgroundGroup)
70 };
71
72 /*!
73 * \~chinese \class DBackgroundGroup
74 * \~chinese \brief DBackgroundGroup提供了将布局控件改成圆角边框(将布局看成一个整体)
75 * \~chinese \note \row 示例代码
76 * \~chinese \note \row QWidget w;
77 * \~chinese \note \row QHBoxLayout* mainlayout = new QHBoxLayout(&w);
78 * \~chinese \note \row mainlayout->addWidget(new QPushButton("btn"));
79 * \~chinese \note \row QHBoxLayout *hlayout = new QHBoxLayout;
80 * \~chinese \note \row DBackgroundGroup *group = new DBackgroundGroup(hlayout,&w);
81 * \~chinese \note \row mainlayout->addWidget(group);
82 * \~chinese \note \row hlayout->addWidget(new QFrame);
83 * \~chinese \note \row hlayout->addWidget(new QFrame);
84 * \~chinese \image html DBackgroundGroup.png
85 */
86
87 /*!
88 * \~chinese \brief DBackgroundGroup::DBackgroundGroup构造函数
89 * \~chinese \param layout布局对象
90 * \~chinese \param parent参数被发送到 QWidget 构造函数
91 */
92 DBackgroundGroup::DBackgroundGroup(QLayout *layout, QWidget *parent)
93 : QWidget(parent)
94 , DObject(*new DBackgroundGroupPrivate(this))
95 {
96 // 默认使用窗口背景作为item背景
97 setBackgroundRole(QPalette::Base);
98 setAutoFillBackground(false);
99 setLayout(layout);
100 }
101
102 /*!
103 * \~chinese \brief DBackgroundGroup::itemMargins返回控件在布局内的边距
104 * \~chinese \return 控件在布局内的边距
105 */
106 QMargins DBackgroundGroup::itemMargins() const
107 {
108 D_DC(DBackgroundGroup);
109
110 return d->itemMargins;
111 }
112
113 /*!
114 * \~chinese \brief DBackgroundGroup::useWidgetBackground是否使用 QWidget 背景颜色
115 * \~chinese \return
116 */
117 bool DBackgroundGroup::useWidgetBackground() const
118 {
119 D_DC(DBackgroundGroup);
120
121 return d->useWidgetBackground;
122 }
123
124 /*!
125 * \~chinese \brief DBackgroundGroup::setLayout设置布局
126 * \~chinese \param layout布局
127 */
128 void DBackgroundGroup::setLayout(QLayout *layout)
129 {
130 QWidget::setLayout(layout);
131
132 if (!layout)
133 return;
134
135 if (QBoxLayout* boxLayout = qobject_cast<QBoxLayout*>(layout)) {
15136 if (boxLayout->direction() == QBoxLayout::LeftToRight ||
16137 boxLayout->direction() == QBoxLayout::RightToLeft) {
17 direction = DStyleOptionBackgroundGroup::horizontal;
18 }
19 else {
20 direction = DStyleOptionBackgroundGroup::vertical;
21 }
22
23 QList<QWidget*> items = findChildren<QWidget*>();
24 QList<QPair<QWidget*, DStyleOptionBackgroundGroup::ItemBackgroundPosition>> itemStyleOptions;
25 itemStyleOptions.reserve(items.size());
26
27 auto createOption = [=] (QWidget* obj, DStyleOptionBackgroundGroup::ItemBackgroundPosition position) {
28 return QPair<QWidget*, DStyleOptionBackgroundGroup::ItemBackgroundPosition>(obj, position);
29 };
30
31 switch (items.size()) {
32 case 0:
33 itemStyleOptions << createOption(nullptr, DStyleOptionBackgroundGroup::Invalid);
138 d_func()->direction = Qt::Horizontal;
139 } else {
140 d_func()->direction = Qt::Vertical;
141 }
142 }
143
144 // 从布局中同步margins数据
145 setItemMargins(layout->contentsMargins());
146 }
147
148 /*!
149 * \~chinese \brief DBackgroundGroup::setItemMargins设置控件在布局内的边距
150 * \~chinese \param itemMargins控件在布局内的边距
151 */
152 void DBackgroundGroup::setItemMargins(QMargins itemMargins)
153 {
154 D_D(DBackgroundGroup);
155
156 d->itemMargins = itemMargins;
157 d->updateLayoutSpacing();
158 }
159
160 /*!
161 * \~chinese \brief DBackgroundGroup::setItemSpacing设置布局内控件间的距离
162 * \~chinese \param spacing距离
163 */
164 void DBackgroundGroup::setItemSpacing(int spacing)
165 {
166 D_D(DBackgroundGroup);
167
168 d->itemSpacing = spacing;
169 d->updateLayoutSpacing();
170 }
171
172 /*!
173 * \~chinese \brief DBackgroundGroup::setUseWidgetBackground设置是否使用 QWidget 背景颜色
174 * \~chinese \row 设置是否使用 QWidget 背景颜色,并发送 useWidgetBackgroundChanged 信号
175 * \~chinese \param useWidgetBackground是否使用 QWidget 背景颜色
176 */
177 void DBackgroundGroup::setUseWidgetBackground(bool useWidgetBackground)
178 {
179 D_D(DBackgroundGroup);
180
181 if (d->useWidgetBackground == useWidgetBackground)
182 return;
183
184 d->useWidgetBackground = useWidgetBackground;
185 Q_EMIT useWidgetBackgroundChanged(useWidgetBackground);
186 }
187
188 void DBackgroundGroup::paintEvent(QPaintEvent *event)
189 {
190 Q_UNUSED(event);
191
192 DStylePainter painter(this);
193 D_DC(DBackgroundGroup);
194
195 for (auto pair : d->itemStyleOptions) {
196 DStyleOptionBackgroundGroup option;
197 if (!pair.first) continue;
198
199 if (!pair.first->isVisible())
200 continue;
201
202 option.init(pair.first);
203 option.rect += d->itemMargins;
204 option.directions = d->direction;
205 option.position = pair.second;
206
207 if (d->useWidgetBackground) {
208 option.dpalette.setBrush(DPalette::ItemBackground, palette().brush(backgroundRole()));
209 }
210
211 painter.drawPrimitive(DStyle::PE_ItemBackground, option);
212 }
213 }
214
215 bool DBackgroundGroup::event(QEvent *event)
216 {
217 switch (event->type()) {
218 case QEvent::ChildAdded:
219 case QEvent::ChildRemoved: {
220 QChildEvent *ce = static_cast<QChildEvent*>(event);
221
222 if (!ce->child()->isWidgetType()) {
34223 break;
35 default: {
36 QWidget* first = items.first();
37 QWidget* last = items.last();
38
39 if (first == last) {
40 itemStyleOptions << createOption(first, DStyleOptionBackgroundGroup::OnlyOne);
41 break;
42 }
43
44 items.removeOne(first);
45 items.removeOne(last);
46
47 itemStyleOptions << createOption(first, DStyleOptionBackgroundGroup::Beginning);
48
49 for (auto it = items.cbegin(); it != items.cend(); ++it) {
50 itemStyleOptions << createOption(*it, DStyleOptionBackgroundGroup::Middle);
51 }
52
53 itemStyleOptions << createOption(last, DStyleOptionBackgroundGroup::End);
54 }
55 break;
56 }
57
58 QStylePainter painter(this);
59 for (QPair<QWidget*, DStyleOptionBackgroundGroup::ItemBackgroundPosition> pair : itemStyleOptions) {
60 DStyleOptionBackgroundGroup option;
61 if (!pair.first) continue;
62 option.init(pair.first);
63 option.direction = direction;
64 option.position = pair.second;
65 painter.drawPrimitive(static_cast<QStyle::PrimitiveElement>(DStyleOption::PE_BACKGROUND), option);
66 }
224 }
225 update(); //重绘全部区域
226 Q_FALLTHROUGH();
227 }
228 case QEvent::LayoutDirectionChange: {
229 D_D(DBackgroundGroup);
230 d->updateOptions();
231 break;
232 }
233 default:
234 break;
235 }
236
237 return QWidget::event(event);
238 }
239
240 void DBackgroundGroupPrivate::updateLayoutSpacing()
241 {
242 D_Q(DBackgroundGroup);
243
244 QLayout *layout = q->layout();
245 QBoxLayout::Direction lo = QBoxLayout::LeftToRight;
246
247 if (QBoxLayout *l = qobject_cast<QBoxLayout*>(layout)) {
248 lo = l->direction();
249 }
250
251 int spacing = itemSpacing;
252
253 if (spacing < 0) {
254 spacing = q->style()->pixelMetric(QStyle::PM_DefaultLayoutSpacing, nullptr, q);
255 }
256
257 if (lo == QBoxLayout::LeftToRight || lo == QBoxLayout::RightToLeft) {
258 layout->setSpacing(itemMargins.left() + itemMargins.right() + spacing);
259 } else {
260 layout->setSpacing(itemMargins.top() + itemMargins.bottom() + spacing);
67261 }
68262 }
69263
77
88 DWIDGET_BEGIN_NAMESPACE
99
10 class DBackgroundGroupPrivate;
1011 class LIBDTKWIDGETSHARED_EXPORT DBackgroundGroup : public QWidget, public DTK_CORE_NAMESPACE::DObject
1112 {
1213 Q_OBJECT
14 D_DECLARE_PRIVATE(DBackgroundGroup)
15
16 Q_PROPERTY(QMargins itemMargins READ itemMargins WRITE setItemMargins)
17 Q_PROPERTY(bool useWidgetBackground READ useWidgetBackground WRITE setUseWidgetBackground NOTIFY useWidgetBackgroundChanged)
18
1319 public:
14 using QWidget::QWidget;
20 explicit DBackgroundGroup(QLayout *layout = nullptr, QWidget *parent = nullptr);
21
22 QMargins itemMargins() const;
23 bool useWidgetBackground() const;
24
25 void setLayout(QLayout *layout);
26
27 public Q_SLOTS:
28 void setItemMargins(QMargins itemMargins);
29 void setItemSpacing(int spacing);
30 void setUseWidgetBackground(bool useWidgetBackground);
31
32 Q_SIGNALS:
33 void useWidgetBackgroundChanged(bool useWidgetBackground);
1534
1635 protected:
1736 void paintEvent(QPaintEvent *event) override;
37 bool event(QEvent *event) override;
38
39 private:
40 using QWidget::setLayout;
41 using QWidget::setAutoFillBackground;
1842 };
1943
2044 DWIDGET_END_NAMESPACE
+0
-109
src/widgets/dbasebutton.cpp less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #include "dbasebutton.h"
18 #include "dthememanager.h"
19
20 DWIDGET_BEGIN_NAMESPACE
21
22 /*!
23 * \~english \class DBaseButton
24 * \~english \brief The DBaseButton class provides deepin style QPushButton.
25 *
26 * \~english DBaseButton will be deprecated and removed in the future, please use
27 * \~english QPushButton, together with dstyle Qt style plugin, QPushButton should have
28 * \~english the same visual effect as DBaseButton.
29 */
30
31 /*!
32 * \~chinese \class DBaseButton
33 * \~chinese \brief DBaseButton 提供 deepin 风格的 QPushButton。
34 *
35 * \~chinese DBaseButton 将来会被弃用并删除,请使用 QPushButton
36 */
37
38 /*!
39 * \~english \brief DBaseButton::DBaseButton constructs an instance of DBaseButton.
40 * \~english \param parent is passed to QPushButton constructor.
41 */
42
43 /*!
44 * \~chinese \brief DBaseButton 的构造函数
45 * \~chinese \param parent
46 */
47 DBaseButton::DBaseButton(QWidget *parent) :
48 QPushButton(parent)
49 {
50 DThemeManager::registerWidget(this);
51
52 initInsideFrame();
53 }
54
55 /*!
56 * \~english \brief DBaseButton::DBaseButton constructs an instance of DBaseButton.
57 * \~english \param text is passed to QPushButton constructor.
58 * \~english \param parent is passed to QPushButton constructor.
59 */
60
61 /*!
62 * \~chinese \brief DBaseButton 的重载构造函数
63 * \~chinese \param text 用于初始化文本内容
64 * \~chinese \param
65 */
66 DBaseButton::DBaseButton(const QString &text, QWidget *parent) :
67 QPushButton(text, parent)
68 {
69 DThemeManager::registerWidget(this);
70
71 initInsideFrame();
72 }
73
74 /*!
75 * \~english \brief DBaseButton::DBaseButton constructs an instance of DBaseButton.
76 * \~english \param icon is passed to QPushButton constructor.
77 * \~english \param text is passed to QPushButton constructor.
78 * \~english \param parent is passed to QPushButton constructor.
79 */
80
81 /*!
82 * \~chinese \brief DBaseButton 的重载构造函数
83 * \~chinese \param icon 初始化图标
84 * \~chinese \param text 初始化文本内容
85 * \~chinese \param parent
86 */
87 DBaseButton::DBaseButton(const QIcon &icon, const QString &text, QWidget *parent) :
88 QPushButton(icon, text, parent)
89 {
90 DThemeManager::registerWidget(this);
91
92 initInsideFrame();
93 }
94
95 //Bypassing the problem here
96 //qss can't draw box-shadow
97 void DBaseButton::initInsideFrame()
98 {
99 QFrame *insideFrame = new QFrame;
100 insideFrame->raise();
101 insideFrame->setAttribute(Qt::WA_TransparentForMouseEvents);
102 insideFrame->setObjectName("ButtonInsideFrame");
103 QHBoxLayout *insideLayout = new QHBoxLayout(this);
104 insideLayout->setContentsMargins(0, 1, 0, 0);
105 insideLayout->addWidget(insideFrame);
106 }
107
108 DWIDGET_END_NAMESPACE
+0
-42
src/widgets/dbasebutton.h less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #ifndef DBASEBUTTON_H
18 #define DBASEBUTTON_H
19
20 #include <QFrame>
21 #include <QHBoxLayout>
22 #include <QPushButton>
23 #include "dtkwidget_global.h"
24
25 DWIDGET_BEGIN_NAMESPACE
26
27 class LIBDTKWIDGETSHARED_EXPORT DBaseButton : public QPushButton
28 {
29 Q_OBJECT
30 public:
31 explicit DBaseButton(QWidget * parent = 0);
32 explicit DBaseButton(const QString & text, QWidget * parent = 0);
33 explicit DBaseButton(const QIcon & icon, const QString & text, QWidget * parent = 0);
34
35 private:
36 void initInsideFrame();
37 };
38
39 DWIDGET_END_NAMESPACE
40
41 #endif // DBASEBUTTON_H
2222
2323 DWIDGET_BEGIN_NAMESPACE
2424
25 /*!
26 * \~chinese \class DBaseExpand
27 * \~chinese \brief 一个美观的可展开的控件
28 *
29 * \~chinese 使用 DBaseExpand 类可以创建一个可展开的带有展开动画效果的控件,这个控件包含上下两部分,上面的控件为标题控件,这个控件会始终显示,下面的控件为内容控件,默认为不会显示,调用 DBaseExpand::setExpand 设置内容控件的可见性。使用 DBaseExpand::setHeader 和 DBaseExpand::setContent 设置分别设置标题控件和内容控件。
30 *
31 * \~chinese \sa DHeaderLine
32 *
33 * \~chinese \image html DBaseExpand.gif
34 */
35
36 /**
37 * \~chinese \fn DBaseExpand::expandChange
38 * \~chinese \brief 内容控件可见性发生改变的信号
39 * \~chinese \param e 为 true 表示内容控件变为了可见,反之则反
40 */
41
42 /*!
43 * \~chinese \brief 获取 DBaseExpand::DBaseExpand 实例
44 * \~chinese \param parent 作为实例的父控件
45 */
46 DBaseExpand::DBaseExpand(QWidget *parent) : QWidget(parent)
47 {
48 DThemeManager::registerWidget(this);
49
50 QVBoxLayout *mainLayout = new QVBoxLayout(this);
25 class DBaseExpandPrivate
26 {
27 public:
28 DBaseExpandPrivate(DBaseExpand* qq);
29 ~DBaseExpandPrivate();
30
31 QWidget *m_header = nullptr;
32 QWidget *m_content = nullptr;
33 DBoxWidget *m_boxWidget = nullptr;
34 QVBoxLayout *m_headerLayout = nullptr;
35 QBoxLayout *m_contentLayout = nullptr;
36 ContentLoader *m_contentLoader = nullptr;
37 DHorizontalLine * m_hSeparator = nullptr;
38 DHorizontalLine *m_bottom_separator = nullptr;
39 QPropertyAnimation *m_animation = nullptr;
40 bool m_expand = false;
41 bool m_reservedPadding[7];
42
43 DBaseExpand *q_ptr;
44 };
45
46 DBaseExpandPrivate::DBaseExpandPrivate(DBaseExpand *qq)
47 : q_ptr(qq)
48 {
49 QVBoxLayout *mainLayout = new QVBoxLayout(qq);
5150 mainLayout->setContentsMargins(0, 0, 0, 0);
5251 mainLayout->setSpacing(0);
5352
5554 m_headerLayout->setContentsMargins(0, 0, 0, 0);
5655 m_headerLayout->setAlignment(Qt::AlignCenter);
5756
58 m_hSeparator = new DSeparatorHorizontal();
59 m_bottom_separator = new DSeparatorHorizontal;
57 m_hSeparator = new DHorizontalLine();
58 m_bottom_separator = new DHorizontalLine;
6059 m_bottom_separator->hide();
6160
62 connect(this, &DBaseExpand::expandChange, m_bottom_separator, &DSeparatorHorizontal::setVisible);
61 qq->connect(qq, &DBaseExpand::expandChange, m_bottom_separator, &QWidget::setVisible);
6362
6463 m_contentLoader = new ContentLoader();
6564 m_contentLoader->setFixedHeight(0); // default to not expanded.
7473 layout_contentLoader->addWidget(m_boxWidget);
7574 layout_contentLoader->addStretch();
7675
77 m_animation = new QPropertyAnimation(m_contentLoader, "height");
76 m_animation = new QPropertyAnimation(m_contentLoader, "height", qq);
7877 m_animation->setDuration(200);
7978 m_animation->setEasingCurve(QEasingCurve::InSine);
80 connect(m_animation, &QPropertyAnimation::valueChanged, this, [this] {
81 setFixedHeight(sizeHint().height());
79 qq->connect(m_animation, &QPropertyAnimation::valueChanged, qq, [qq] {
80 qq->setFixedHeight(qq->sizeHint().height());
8281 });
82
83
84 m_hSeparator->setFrameStyle(QFrame::NoFrame);
85 m_bottom_separator->setFrameStyle(QFrame::NoFrame);
8386
8487 mainLayout->addLayout(m_headerLayout);
8588 mainLayout->addWidget(m_hSeparator);
8689 mainLayout->addWidget(m_contentLoader);
8790 mainLayout->addWidget(m_bottom_separator);
8891
89 setLayout(mainLayout);
90
91 connect(m_boxWidget, &DBoxWidget::sizeChanged, this, [this] {
92 if (m_expand)
93 {
92 qq->setLayout(mainLayout);
93
94 qq->connect(m_boxWidget, &DBoxWidget::sizeChanged, qq, [this] {
95 if (m_expand) {
9496 int endHeight = 0;
9597 endHeight = m_boxWidget->height();
9698
102104 });
103105 }
104106
107 DBaseExpandPrivate::~DBaseExpandPrivate()
108 {
109 }
110
111 /*!
112 * \~chinese \class DBaseExpand
113 * \~chinese \brief 一个美观的可展开的控件
114 *
115 * \~chinese 使用 DBaseExpand 类可以创建一个可展开的带有展开动画效果的控件,这个控件包含上下两部分,上面的控件为标题控件,这个控件会始终显示,下面的控件为内容控件,默认为不会显示,调用 DBaseExpand::setExpand 设置内容控件的可见性。使用 DBaseExpand::setHeader 和 DBaseExpand::setContent 设置分别设置标题控件和内容控件。
116 *
117 * \~chinese \sa DHeaderLine
118 *
119 * \~chinese \image html DBaseExpand.gif
120 */
121
122 /**
123 * \~chinese \fn DBaseExpand::expandChange
124 * \~chinese \brief 内容控件可见性发生改变的信号
125 * \~chinese \param e 为 true 表示内容控件变为了可见,反之则反
126 */
127
128 /*!
129 * \~chinese \brief 获取 DBaseExpand::DBaseExpand 实例
130 * \~chinese \param parent 作为实例的父控件
131 */
132 DBaseExpand::DBaseExpand(QWidget *parent)
133 : QWidget(parent)
134 , d_private(new DBaseExpandPrivate(this))
135 {
136
137 }
138
105139 DBaseExpand::~DBaseExpand()
106140 {
107 if (m_headerLayout) {
108 m_headerLayout->deleteLater();
109 }
110 if (m_contentLayout) {
111 m_contentLayout->deleteLater();
112 }
113 if (m_contentLoader) {
114 m_contentLoader->deleteLater();
115 }
116 if (m_animation) {
117 m_animation->deleteLater();
118 }
141
119142 }
120143
121144 /**
125148 */
126149 void DBaseExpand::setHeader(QWidget *header)
127150 {
151 Q_D(DBaseExpand);
128152 if (!header) {
129153 return;
130154 }
131155
132156 QLayoutItem *child;
133 while ((child = m_headerLayout->takeAt(0)) != 0) {
157 while ((child = d->m_headerLayout->takeAt(0)) != nullptr) {
134158 delete child;
135159 }
136160
137 m_headerLayout->addWidget(header);
138 m_header = header;
161 d->m_headerLayout->addWidget(header);
162 d->m_header = header;
139163 }
140164
141165 /**
152176 */
153177 void DBaseExpand::setContent(QWidget *content, Qt::Alignment alignment)
154178 {
179 Q_D(DBaseExpand);
180
155181 if (!content) {
156182 return;
157183 }
158184
159185 QLayoutItem *child;
160 while ((child = m_contentLayout->takeAt(0)) != 0) {
186 while ((child = d->m_contentLayout->takeAt(0)) != nullptr) {
161187 delete child;
162188 }
163189
164 m_contentLayout->addWidget(content, 1, alignment);
165 m_contentLayout->addStretch(1);
166 m_content = content;
190 d->m_contentLayout->addWidget(content, 1, alignment);
191 d->m_contentLayout->addStretch(1);
192 d->m_content = content;
193 }
194
195 QWidget *DBaseExpand::getContent() const
196 {
197 Q_D(const DBaseExpand);
198
199 return d->m_content;
167200 }
168201
169202 /**
173206 */
174207 void DBaseExpand::setHeaderHeight(int height)
175208 {
176 if (m_header) {
177 m_header->setFixedHeight(height);
209 Q_D(DBaseExpand);
210
211 if (d->m_header) {
212 d->m_header->setFixedHeight(height);
178213 }
179214 }
180215
185220 */
186221 void DBaseExpand::setExpand(bool value)
187222 {
188 if (m_expand == value) {
223 Q_D(DBaseExpand);
224
225 if (d->m_expand == value) {
189226 return;
190227 }
191228
192 m_expand = value;
229 d->m_expand = value;
193230 Q_EMIT expandChange(value);
194231
195232 if (value) {
196 m_animation->setStartValue(0);
197 m_animation->setEndValue(m_boxWidget->height());
233 d->m_animation->setStartValue(0);
234 d->m_animation->setEndValue(d->m_boxWidget->height());
198235 } else {
199 m_animation->setStartValue(m_boxWidget->height());
200 m_animation->setEndValue(0);
201 }
202
203 m_animation->stop();
204 m_animation->start();
236 d->m_animation->setStartValue(d->m_boxWidget->height());
237 d->m_animation->setEndValue(0);
238 }
239
240 d->m_animation->stop();
241 d->m_animation->start();
205242 }
206243
207244 /**
211248 */
212249 bool DBaseExpand::expand() const
213250 {
214 return m_expand;
251 Q_D(const DBaseExpand);
252 return d->m_expand;
215253 }
216254
217255 /**
221259 */
222260 void DBaseExpand::setAnimationDuration(int duration)
223261 {
224 m_animation->setDuration(duration);
262 Q_D(DBaseExpand);
263 d->m_animation->setDuration(duration);
225264 }
226265
227266 /**
231270 */
232271 void DBaseExpand::setAnimationEasingCurve(QEasingCurve curve)
233272 {
234 m_animation->setEasingCurve(curve);
273 Q_D(DBaseExpand);
274 d->m_animation->setEasingCurve(curve);
235275 }
236276
237277 /**
241281 */
242282 void DBaseExpand::setSeparatorVisible(bool arg)
243283 {
244 m_hSeparator->setVisible(arg);
284 Q_D(DBaseExpand);
285 d->m_hSeparator->setVisible(arg);
245286 }
246287
247288 /**
251292 */
252293 void DBaseExpand::setExpandedSeparatorVisible(bool arg)
253294 {
295 Q_D(DBaseExpand);
296
254297 if (arg) {
255 connect(this, &DBaseExpand::expandChange, m_bottom_separator, &DSeparatorHorizontal::setVisible);
256 m_bottom_separator->show();
298 connect(this, &DBaseExpand::expandChange, d->m_bottom_separator, &QWidget::setVisible);
299 d->m_bottom_separator->show();
257300 } else {
258 disconnect(this, &DBaseExpand::expandChange, m_bottom_separator, &DSeparatorHorizontal::setVisible);
259 m_bottom_separator->hide();
301 disconnect(this, &DBaseExpand::expandChange, d->m_bottom_separator, &QWidget::setVisible);
302 d->m_bottom_separator->hide();
260303 }
261304 }
262305
263306 void DBaseExpand::resizeEvent(QResizeEvent *e)
264307 {
265 if (m_content) {
266 m_content->setFixedWidth(e->size().width());
308 Q_D(DBaseExpand);
309
310 if (d->m_content) {
311 d->m_content->setFixedWidth(e->size().width());
267312 }
268313 QWidget::resizeEvent(e);
269314 }
270315
271
272316 DWIDGET_END_NAMESPACE
2222 #include <QVBoxLayout>
2323 #include <QPropertyAnimation>
2424
25 #include <DHorizontalLine>
26
2527 #include "dtkwidget_global.h"
26 #include "dseparatorhorizontal.h"
2728 #include "dconstants.h"
2829
2930 DWIDGET_BEGIN_NAMESPACE
3031
31 class ContentLoader : public QFrame
32 class D_DECL_DEPRECATED ContentLoader : public QFrame
3233 {
3334 Q_OBJECT
3435 Q_PROPERTY(int height READ height WRITE setFixedHeight)
3536 public:
36 explicit ContentLoader(QWidget *parent = 0) : QFrame(parent){}
37 explicit ContentLoader(QWidget *parent = nullptr) : QFrame(parent){}
3738 };
3839
3940 class DBoxWidget;
4041
41 class LIBDTKWIDGETSHARED_EXPORT DBaseExpand : public QWidget
42 class DBaseExpandPrivate;
43 class LIBDTKWIDGETSHARED_EXPORT D_DECL_DEPRECATED_X("Use DDrawer") DBaseExpand : public QWidget
4244 {
4345 Q_OBJECT
4446 public:
45 explicit DBaseExpand(QWidget *parent = 0);
46 ~DBaseExpand();
47 explicit DBaseExpand(QWidget *parent = nullptr);
48 ~DBaseExpand() override;
4749
4850 void setHeader(QWidget *header);
4951 void setContent(QWidget *content, Qt::Alignment alignment = Qt::AlignHCenter);
50 inline QWidget *getContent() const {return m_content;}
52 QWidget *getContent() const;
5153 void setHeaderHeight(int height);
5254 virtual void setExpand(bool value);
5355 bool expand() const;
6466 void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE;
6567
6668 private:
67 QWidget *m_header = NULL;
68 QWidget *m_content = NULL;
69 DBoxWidget *m_boxWidget = NULL;
70 QVBoxLayout *m_headerLayout = NULL;
71 QBoxLayout *m_contentLayout = NULL;
72 ContentLoader *m_contentLoader = NULL;
73 DSeparatorHorizontal * m_hSeparator = NULL;
74 DSeparatorHorizontal *m_bottom_separator = NULL;
75 QPropertyAnimation *m_animation = NULL;
76 bool m_expand = false;
69 QScopedPointer<DBaseExpandPrivate> d_private;
70
71 Q_DECLARE_PRIVATE_D(d_private, DBaseExpand)
7772 };
7873
7974 DWIDGET_END_NAMESPACE
4242
4343 DBaseLine::DBaseLine(QWidget *parent) : QLabel(parent)
4444 {
45 DThemeManager::registerWidget(this);
46
4745 this->setFixedHeight(CONTENT_HEADER_HEIGHT);
4846 m_leftLayout = new QHBoxLayout();
4947 m_leftLayout->setMargin(0);
4848 QHBoxLayout *m_leftLayout= NULL;
4949 QHBoxLayout *m_rightLayout = NULL;
5050
51 int m_leftMargin = HEADER_LEFT_MARGIN;
51 int m_leftMargin = 10;
5252 int m_rightMargin = HEADER_RIGHT_MARGIN;
5353 };
5454
1717 #include "dblureffectwidget.h"
1818 #include "private/dblureffectwidget_p.h"
1919 #include "dplatformwindowhandle.h"
20 #include "util/dwindowmanagerhelper.h"
20
21 #include <DWindowManagerHelper>
22 #include <DGuiApplicationHelper>
2123
2224 #include <QPainter>
2325 #include <QBackingStore>
2527 #include <QDebug>
2628
2729 #include <qpa/qplatformbackingstore.h>
30 #include <private/qwidget_p.h>
31 #ifndef slots
32 #define slots Q_SLOTS
33 #endif
34
35 #define private public
36
37 #if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
38 #include <private/qwidgetrepaintmanager_p.h>
39 #else
40 #include <private/qwidgetbackingstore_p.h>
41 #endif
42
43 #undef private
2844
2945 #define MASK_COLOR_ALPHA_DEFAULT 204
3046
3248 Q_WIDGETS_EXPORT void qt_blurImage(QPainter *p, QImage &blurImage, qreal radius, bool quality, bool alphaOnly, int transposed = 0);
3349 QT_END_NAMESPACE
3450
51 DGUI_USE_NAMESPACE
52
3553 DWIDGET_BEGIN_NAMESPACE
3654
3755 QMultiHash<QWidget *, const DBlurEffectWidget *> DBlurEffectWidgetPrivate::blurEffectWidgetHash;
5573 {
5674 D_QC(DBlurEffectWidget);
5775
58 return full || (q->isTopLevel() && !(blurRectXRadius * blurRectYRadius) && maskPath.isEmpty());
76 return full || (q->isTopLevel() && !(blurRectXRadius && blurRectYRadius) && maskPath.isEmpty());
5977 }
6078
6179 void DBlurEffectWidgetPrivate::addToBlurEffectWidgetHash()
107125 setMaskColor(maskColor);
108126 }
109127
128 quint8 DBlurEffectWidgetPrivate::getMaskColorAlpha() const
129 {
130 if (maskAlpha < 0)
131 return isBehindWindowBlendMode() ? 102 : 204;
132
133 return static_cast<quint8>(maskAlpha);
134 }
135
136 QColor DBlurEffectWidgetPrivate::getMaskColor(const QColor &baseColor) const
137 {
138 QColor color = baseColor;
139 DGuiApplicationHelper::ColorType ct = DGuiApplicationHelper::toColorType(color);
140
141 if (DGuiApplicationHelper::DarkType == ct) {
142 color = DGuiApplicationHelper::adjustColor(color, 0, 0, -10, 0, 0, 0, 0);
143 } else {
144 color = DGuiApplicationHelper::adjustColor(color, 0, 0, -5, 0, 0, 0, 0);
145 }
146
147 int maskAlpha = this->getMaskColorAlpha();
148
149 if (!isBehindWindowBlendMode()) {
150 color.setAlpha(maskAlpha);
151 } else if (DWindowManagerHelper::instance()->hasComposite()) {
152 color.setAlpha(DWindowManagerHelper::instance()->hasBlurWindow() ? maskAlpha : MASK_COLOR_ALPHA_DEFAULT);
153 } else {
154 return ct == DGuiApplicationHelper::DarkType ? "#202020" : "#D2D2D2";
155 }
156
157 return color;
158 }
159
160 void DBlurEffectWidgetPrivate::resetSourceImage()
161 {
162 // 设置了自定义的image时忽略此请求
163 // 属于某个组时也忽略
164 if (customSourceImage || group)
165 return;
166
167 sourceImage = QImage();
168 }
169
110170 void DBlurEffectWidgetPrivate::setMaskColor(const QColor &color)
111171 {
112172 maskColor = color;
113173
114174 if (isBehindWindowBlendMode()) {
115 maskColor.setAlpha(DWindowManagerHelper::instance()->hasBlurWindow() ? maskAlpha : MASK_COLOR_ALPHA_DEFAULT);
175 maskColor.setAlpha(DWindowManagerHelper::instance()->hasBlurWindow() ? getMaskColorAlpha() : MASK_COLOR_ALPHA_DEFAULT);
116176 }
117177
118178 D_Q(DBlurEffectWidget);
240300 * \~chinese \class DBlurEffectWidget
241301 * \~chinese \brief 用于实现主窗口或控件背景的实时模糊效果。
242302 *
243 * \~chinese 分为主窗口模糊 DBlurEffectWidget::BehindWindowBlend 和控件模糊 DBlurEffectWidget::InWindowBlend
303 * \~chinese 分为主窗口模糊 DBlurEffectWidget::BehindWindowBlend 和控件模糊 DBlurEffectWidget::InWindowBlend DBlurEffectWidget::InWindowBlend
244304 * \~chinese 这两种不同的模式,主窗口模糊效果依赖于窗口管理器的实现,目前仅支持 deepin-wm 和 kwin,
245305 * \~chinese 可以使用DWindowManagerHelper::hasBlurWindow 判断当前运行环境中的窗口管理器是否支持
246306 * \~chinese 模糊特效,使用 DPlatformWindowHandle::setWindowBlurAreaByWM 设置主窗口背景的模糊
313373 * \~chinese 属性的情况下,无论 full 属性的值为多少,都将和值为 true 时的行为保持一致。
314374 * \~chinese \note 可读可写
315375 * \~chinese \note 此属性不影响蒙版的绘制区域
316 * \~chinese \note 只在模糊的混合模式为 BehindWindowBlend 时生效
376 * \~chinese \note 只在模糊的混合模式为 BehindWindowBlend 或 DBlurEffectWidget::InWindowBlend 时生效
317377 * \~chinese \see DBlurEffectWidget::blurRectXRadius BlurEffectWidget::blurRectYRadius
318378 * \~chinese \see DBlurEffectWidget::maskColor
319379 * \~chinese \see DBlurEffectWidget::blendMode
360420 *
361421 * \~chinese \var DBlurEffectWidget::BehindWindowBlend DBlurEffectWidget::BehindWindowBlend
362422 * \~chinese 以外部的其它窗口作为模糊背景
423 *
424 * * \~chinese \var DBlurEffectWidget::InWidgetBlend DBlurEffectWidget::InWidgetBlend
425 * \~chinese 同 DBlurEffectWidget::InWindowBlend,区别是不会自动更新用于模糊的源图片
426 * \~chinese 可手动调用 DBlurEffectWidget::updateBlurSourceImage 更新,以此来实现自行控制模糊
427 * \~chinese 源图片的更新时机
363428 */
364429
365430 /*!
366431 * \~chinese \enum DBlurEffectWidget::MaskColorType
367432 * \~chinese DBlurEffectWidget::MaskColorType 内置的几种颜色模式。分为三种情况:
368433 * \~chinese \arg \c A:模式为 DBlurEffectWidget::InWindowBlend 或当前窗口管理器支持混成且支持窗口背景模糊
369 * \~chinese \arg \c B:模式为 DBlurEffectWidget::BehindWindowBlend 窗口管理器不支持混成
370 * \~chinese \arg \c C:模式为 DBlurEffectWidget::BehindWindowBlend 窗口管理器不支持模糊
434 * \~chinese \arg \c B:模式为 DBlurEffectWidget::BehindWindowBlend 或 DBlurEffectWidget::InWindowBlend 窗口管理器不支持混成
435 * \~chinese \arg \c C:模式为 DBlurEffectWidget::BehindWindowBlend 或 DBlurEffectWidget::InWindowBlend 窗口管理器不支持模糊
371436 * \~chinese \see DBlurEffectWidget::maskAlpha
372437 *
373438 * \~chinese \var DBlurEffectWidget::DarkColor DBlurEffectWidget::DarkColor
383448 * \~chinese \arg \c B:\color{#FCFCFC,#FCFCFC}
384449 * \~chinese \arg \c C:\color{rgba(255\,255\,255\,0.8),#CCFFFFFF}
385450 *
451 * \~chinese \var DBlurEffectWidget::AutoColor DBlurEffectWidget::AutoColor
452 * \~chinese 自动颜色,以当前应用的主题的背景色作为叠加色(alpha通道值为非定值)
453 *
386454 * \~chinese \var DBlurEffectWidget::CustomColor DBlurEffectWidget::CustomColor
387455 * \~chinese 自定义颜色,使用 DBlurEffectWidget::setMaskColor 设置的颜色
388456 */
401469 , DObject(*new DBlurEffectWidgetPrivate(this))
402470 {
403471 setAttribute(Qt::WA_TranslucentBackground);
472 setBackgroundRole(QPalette::Window);
404473
405474 if (!parent) {
406475 D_D(DBlurEffectWidget);
433502 if (d->isBehindWindowBlendMode()) {
434503 d->removeFromBlurEffectWidgetHash();
435504 }
505
506 // clean group
507 if (d->group) {
508 d->group->removeWidget(this);
509 }
436510 }
437511
438512 /*!
519593 D_DC(DBlurEffectWidget);
520594
521595 switch ((int)d->maskColorType) {
522 case DarkColor: {
523 if (!d->isBehindWindowBlendMode()) {
524 return QColor(0, 0, 0, d->maskAlpha);
525 }
526
527 if (DWindowManagerHelper::instance()->hasComposite()) {
528 return QColor(0, 0, 0, DWindowManagerHelper::instance()->hasBlurWindow() ? d->maskAlpha : MASK_COLOR_ALPHA_DEFAULT);
529 } else {
530 return QColor("#373F47");
531 }
532 }
533 case LightColor: {
534 if (!d->isBehindWindowBlendMode()) {
535 return QColor(255, 255, 255, d->maskAlpha);
536 }
537
538 if (DWindowManagerHelper::instance()->hasComposite()) {
539 return QColor(255, 255, 255, DWindowManagerHelper::instance()->hasBlurWindow() ? d->maskAlpha : MASK_COLOR_ALPHA_DEFAULT);
540 } else {
541 return QColor("#FCFCFC");
542 }
596 case DarkColor:
597 return d->getMaskColor(DGuiApplicationHelper::standardPalette(DGuiApplicationHelper::DarkType).window().color());
598 case LightColor:
599 return d->getMaskColor(DGuiApplicationHelper::standardPalette(DGuiApplicationHelper::LightType).window().color());
600 case AutoColor: {
601 QColor color = palette().color(backgroundRole());
602
603 return d->getMaskColor(color);
543604 }
544605 }
545606
549610 quint8 DBlurEffectWidget::maskAlpha() const {
550611 D_DC(DBlurEffectWidget);
551612
552 return d->maskAlpha;
613 return d->getMaskColorAlpha();
553614 }
554615
555616 /*!
575636 update();
576637 }
577638
639 /*!
640 * \~chinese \brief DBlurEffectWidget::setSourceImage
641 * \~chinese \param image
642 * \~chinese \param autoScale
643 * \~chinese \warning
644 * \~chinese \see
645 */
646 void DBlurEffectWidget::setSourceImage(const QImage &image, bool autoScale)
647 {
648 D_D(DBlurEffectWidget);
649
650 d->sourceImage = image;
651 d->customSourceImage = !image.isNull();
652 d->autoScaleSourceImage = autoScale && d->customSourceImage;
653
654 if (autoScale && isVisible()) {
655 d->sourceImage.setDevicePixelRatio(devicePixelRatioF());
656 d->sourceImage = d->sourceImage.scaled((size() + QSize(d->radius * 1, d->radius * 2)) * devicePixelRatioF());
657 d->sourceImage.setDevicePixelRatio(devicePixelRatioF());
658 }
659 }
660
661 /*!
662 * \~chinese \brief DBlurEffectWidget::isFull
663 * \~chinese \return true 窗口占据了整个模糊区域,反之为false
664 */
578665 bool DBlurEffectWidget::isFull() const
579666 {
580667 D_DC(DBlurEffectWidget);
582669 return d->full;
583670 }
584671
672 /*!
673 * \~chinese \brief DBlurEffectWidget::blurEnabled
674 * \~chinese \return true 模糊区域可伸缩调整
675 */
585676 bool DBlurEffectWidget::blurEnabled() const
586677 {
587678 D_DC(DBlurEffectWidget);
589680 return d->blurEnabled;
590681 }
591682
683 /*!
684 * \~chinese \brief DBlurEffectWidget::setRadius
685 * \~chinese \param radius 模糊区域的圆角大小 如果设定值和原值不一致会发送信号radiusChanged
686 */
592687 void DBlurEffectWidget::setRadius(int radius)
593688 {
594689 D_D(DBlurEffectWidget);
598693 }
599694
600695 d->radius = radius;
601 d->sourceImage = QImage();
696 d->resetSourceImage();
602697
603698 update();
604699
605700 Q_EMIT radiusChanged(radius);
606701 }
607702
703 /*!
704 * \~chinese \brief DBlurEffectWidget::setMode
705 * \~chinese \param mode 设定模糊算法,默认为高斯模糊算法GaussianBlur
706 */
608707 void DBlurEffectWidget::setMode(DBlurEffectWidget::BlurMode mode)
609708 {
610709 D_D(DBlurEffectWidget);
618717 Q_EMIT modeChanged(mode);
619718 }
620719
720 /*!
721 * \~chinese \brief DBlurEffectWidget::setBlendMode
722 * \~chinese \param blendMode 窗口混合模式,模式设定变化发送blendModeChanged信号
723 */
621724 void DBlurEffectWidget::setBlendMode(DBlurEffectWidget::BlendMode blendMode)
622725 {
623726 D_D(DBlurEffectWidget);
628731
629732 if (blendMode == BehindWindowBlend) {
630733 d->addToBlurEffectWidgetHash();
734
735 // 移除针对顶层窗口的事件过滤器
736 topLevelWidget()->removeEventFilter(this);
631737 } else {
632 if (blendMode == InWindowBlend) {
633 d->maskColor.setAlpha(d->maskAlpha);
738 if (blendMode != BehindWindowBlend) {
739 d->maskColor.setAlpha(d->getMaskColorAlpha());
634740 }
635741
636742 if (d->blendMode == BehindWindowBlend) {
637743 d->removeFromBlurEffectWidgetHash();
638744 }
639 }
640
745
746 if (isVisible()) {
747 // 给顶层窗口添加事件过滤器
748 topLevelWidget()->installEventFilter(this);
749 }
750 }
751
752 // 前面还有用到 d->blendMode 读取上一次的值
641753 d->blendMode = blendMode;
642
643754 update();
644755
645756 Q_EMIT blendModeChanged(blendMode);
646757 }
647758
759 /*!
760 * \~chinese \brief DBlurEffectWidget::setBlurRectXRadius
761 * \~chinese \param blurRectXRadius 模糊区域矩形的X圆角大小
762 */
648763 void DBlurEffectWidget::setBlurRectXRadius(int blurRectXRadius)
649764 {
650765 D_D(DBlurEffectWidget);
660775 Q_EMIT blurRectXRadiusChanged(blurRectXRadius);
661776 }
662777
778 /*!
779 * \~chinese \brief DBlurEffectWidget::setBlurRectYRadius
780 * \~chinese \param blurRectYRadius 模糊区域矩形的Y圆角大小
781 */
663782 void DBlurEffectWidget::setBlurRectYRadius(int blurRectYRadius)
664783 {
665784 D_D(DBlurEffectWidget);
675794 Q_EMIT blurRectYRadiusChanged(blurRectYRadius);
676795 }
677796
797 /*!
798 * \~chinese \brief DBlurEffectWidget::setMaskAlpha
799 * \~chinese \param alpha 设置Alpha通道,值变化发送maskAlphaChanged信号
800 */
678801 void DBlurEffectWidget::setMaskAlpha(quint8 alpha) {
679802 D_D(DBlurEffectWidget);
680803
685808 Q_EMIT maskAlphaChanged(alpha);
686809 }
687810
811 /*!
812 * \~chinese \brief DBlurEffectWidget::setMaskColor
813 * \~chinese \param maskColor 设定mask的颜色
814 */
688815 void DBlurEffectWidget::setMaskColor(QColor maskColor)
689816 {
690817 D_D(DBlurEffectWidget);
720847 update();
721848 }
722849
850 /*!
851 * \~chinese \brief DBlurEffectWidget::setFull
852 * \~chinese \param full 设置时候模糊区域占满整个窗口大小
853 */
723854 void DBlurEffectWidget::setFull(bool full)
724855 {
725856 D_D(DBlurEffectWidget);
733864 Q_EMIT fullChanged(full);
734865 }
735866
867 /*!
868 * \~chinese \brief DBlurEffectWidget::setBlurEnabled
869 * \~chinese \param blurEnabled 设定模糊区域是否可以伸缩
870 */
736871 void DBlurEffectWidget::setBlurEnabled(bool blurEnabled)
737872 {
738873 D_D(DBlurEffectWidget);
747882 Q_EMIT blurEnabledChanged(d->blurEnabled);
748883 }
749884
885 inline QRect operator *(const QRect &rect, qreal scale)
886 {
887 return QRect(rect.left() * scale, rect.top() * scale, rect.width() * scale, rect.height() * scale);
888 }
889
890 /*!
891 * \~chinese \brief DBlurEffectWidget::updateBlurSourceImage
892 * \~chinese \param ren 设定模糊区域的背景图片
893 */
894 void DBlurEffectWidget::updateBlurSourceImage(const QRegion &ren)
895 {
896 D_D(DBlurEffectWidget);
897
898 // 自定义模式,或者属于某个组时不需要以下操作
899 if (d->customSourceImage || d->group)
900 return;
901
902 const qreal device_pixel_ratio = devicePixelRatioF();
903 const QPoint point_offset = mapTo(window(), QPoint(0, 0));
904
905 if (d->sourceImage.isNull()) {
906 const QRect &tmp_rect = rect().translated(point_offset).adjusted(-d->radius, -d->radius, d->radius, d->radius);
907
908 d->sourceImage = window()->backingStore()->handle()->toImage().copy(tmp_rect * device_pixel_ratio);
909 d->sourceImage = d->sourceImage.scaledToWidth(d->sourceImage.width() / device_pixel_ratio);
910 } else {
911 QPainter pa_image(&d->sourceImage);
912
913 pa_image.setCompositionMode(QPainter::CompositionMode_Source);
914
915 if (device_pixel_ratio > 1) {
916 const QRect &tmp_rect = this->rect().translated(point_offset);
917 QImage area = window()->backingStore()->handle()->toImage().copy(tmp_rect * device_pixel_ratio);
918 area = area.scaledToWidth(area.width() / device_pixel_ratio);
919
920 for (const QRect &rect : ren.rects()) {
921 pa_image.drawImage(rect.topLeft() + QPoint(d->radius, d->radius), rect == area.rect() ? area : area.copy(rect));
922 }
923 } else {
924 for (const QRect &rect : ren.rects()) {
925 pa_image.drawImage(rect.topLeft() + QPoint(d->radius, d->radius),
926 window()->backingStore()->handle()->toImage().copy(rect.translated(point_offset)));
927 }
928 }
929
930 pa_image.end();
931 }
932 }
933
750934 DBlurEffectWidget::DBlurEffectWidget(DBlurEffectWidgetPrivate &dd, QWidget *parent)
751935 : QWidget(parent)
752936 , DObject(dd)
753937 {
754938
755 }
756
757 inline QRect operator *(const QRect &rect, qreal scale)
758 {
759 return QRect(rect.left() * scale, rect.top() * scale, rect.width() * scale, rect.height() * scale);
760939 }
761940
762941 void DBlurEffectWidget::paintEvent(QPaintEvent *event)
791970 if (d->isBehindWindowBlendMode()) {
792971 pa.setCompositionMode(QPainter::CompositionMode_Source);
793972 } else {
794 int radius = d->radius;
795 QPoint point_offset = mapTo(window(), QPoint(0, 0));
796 const QRect &paintRect = event->rect();
797 qreal device_pixel_ratio = devicePixelRatioF();
798
799 if (d->sourceImage.isNull()) {
800 const QRect &tmp_rect = rect().translated(point_offset).adjusted(-radius, -radius, radius, radius);
801
802 d->sourceImage = window()->backingStore()->handle()->toImage().copy(tmp_rect * device_pixel_ratio);
803 d->sourceImage = d->sourceImage.scaledToWidth(d->sourceImage.width() / device_pixel_ratio);
804 } else {
805 QPainter pa_image(&d->sourceImage);
806
807 pa_image.setCompositionMode(QPainter::CompositionMode_Source);
808
809 for (const QRect &rect : event->region().rects()) {
810 if (device_pixel_ratio > 1) {
811 const QRect &tmp_rect = this->rect().translated(point_offset);
812 const QImage &area = window()->backingStore()->handle()->toImage().copy(tmp_rect * device_pixel_ratio);
813
814 pa_image.drawImage(rect.topLeft() + QPoint(radius, radius), area.scaledToWidth(area.width() / device_pixel_ratio).copy(rect));
815 } else {
816 pa_image.drawImage(rect.topLeft() + QPoint(radius, radius),
817 window()->backingStore()->handle()->toImage().copy(rect.translated(point_offset)));
818 }
973 // 此模式下是自行控制sourceImage的更新
974 if (d->blendMode != InWidgetBlend) {
975 updateBlurSourceImage(event->region());
976 }
977
978 if (d->customSourceImage || !d->sourceImage.isNull()) {
979 int radius = d->radius;
980 qreal device_pixel_ratio = devicePixelRatioF();
981 QImage image;
982 const QRect &paintRect = event->rect();
983
984 if (d->customSourceImage) {
985 image = d->sourceImage.copy(paintRect.adjusted(0, 0, 2 * radius, 2 * radius) * device_pixel_ratio);
986 image.setDevicePixelRatio(device_pixel_ratio);
987 pa.setOpacity(0.2);
988 } else {// 非customSourceImage不考虑缩放产生的影响
989 image = d->sourceImage.copy(paintRect.adjusted(0, 0, 2 * radius, 2 * radius));
819990 }
820991
821 pa_image.end();
822 }
823
824 QImage image = d->sourceImage.copy(paintRect.adjusted(0, 0, 2 * radius, 2 * radius));
825
826 QTransform old_transform = pa.transform();
827 pa.translate(paintRect.topLeft() - QPoint(radius, radius));
828 qt_blurImage(&pa, image, radius, false, false);
829 pa.setTransform(old_transform);
992 QTransform old_transform = pa.transform();
993 pa.translate(paintRect.topLeft() - QPoint(radius, radius));
994 qt_blurImage(&pa, image, radius, false, false);
995 pa.setTransform(old_transform);
996 pa.setOpacity(1);
997 } else if (d->group) { // 组模式
998 d->group->paint(&pa, this);
999 }
8301000 }
8311001
8321002 pa.fillRect(rect(), maskColor());
8401010 return QWidget::moveEvent(event);
8411011 }
8421012
843 if (d->blendMode == DBlurEffectWidget::InWindowBlend) {
844 d->sourceImage = QImage();
1013 if (d->blendMode == DBlurEffectWidget::InWindowBlend
1014 || d->blendMode == DBlurEffectWidget::InWindowBlend) {
1015 d->resetSourceImage();
8451016
8461017 return QWidget::moveEvent(event);
8471018 }
8551026 {
8561027 D_D(DBlurEffectWidget);
8571028
858 d->sourceImage = QImage();
1029 d->resetSourceImage();
8591030
8601031 if (!d->isBehindWindowBlendMode()) {
1032 if (d->autoScaleSourceImage) {
1033 d->sourceImage = d->sourceImage.scaled((size() + QSize(d->radius * 1, d->radius * 2)) * devicePixelRatioF());
1034 d->sourceImage.setDevicePixelRatio(devicePixelRatioF());
1035 }
1036
8611037 return QWidget::resizeEvent(event);
8621038 }
8631039
8711047 D_D(DBlurEffectWidget);
8721048
8731049 if (!d->isBehindWindowBlendMode()) {
1050 if (d->autoScaleSourceImage) {
1051 d->sourceImage = d->sourceImage.scaled((size() + QSize(d->radius * 1, d->radius * 2)) * devicePixelRatioF());
1052 d->sourceImage.setDevicePixelRatio(devicePixelRatioF());
1053 }
1054
1055 // 给顶层窗口添加事件过滤器
1056 topLevelWidget()->installEventFilter(this);
1057
8741058 return QWidget::showEvent(event);
8751059 }
8761060
8841068 D_D(DBlurEffectWidget);
8851069
8861070 if (!d->isBehindWindowBlendMode()) {
1071 // 移除事件过滤器
1072 topLevelWidget()->removeEventFilter(this);
1073
8871074 return QWidget::hideEvent(event);
8881075 }
8891076
9091096 QWidget::changeEvent(event);
9101097 }
9111098
1099 bool DBlurEffectWidget::eventFilter(QObject *watched, QEvent *event)
1100 {
1101 if (event->type() != QEvent::UpdateRequest) {
1102 return QWidget::eventFilter(watched, event);
1103 }
1104
1105 // 截获顶层窗口的绘制请求事件,判断需要重绘的区域是否在模糊半径内
1106 // 是的话则重绘模糊控件,因为避免由于DBlurEffectWidget控件外部(但是在模糊半径内,所以需要将此区域的内容计算到模糊)的重绘
1107 if (QWidget *widget = qobject_cast<QWidget*>(watched)) {
1108 auto wd = QWidgetPrivate::get(widget);
1109
1110 #if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
1111 if (!wd->maybeRepaintManager()) {
1112 #else
1113 if (!wd->maybeBackingStore()) {
1114 #endif
1115 return QWidget::eventFilter(watched, event);
1116 }
1117
1118 // 当前待绘制的区域
1119 QRegion dirty;
1120 #if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
1121 for (const QWidget *w : wd->maybeRepaintManager()->dirtyWidgets) {
1122 #else
1123 for (const QWidget *w : wd->maybeBackingStore()->dirtyWidgets) {
1124 #endif
1125 dirty |= QWidgetPrivate::get(w)->dirty.translated(w->mapToGlobal(QPoint(0, 0)));
1126 }
1127
1128 if (dirty.isEmpty()) {
1129 return QWidget::eventFilter(watched, event);
1130 }
1131
1132 D_D(DBlurEffectWidget);
1133 const QPoint &offset = mapToGlobal(QPoint(0, 0));
1134 const QRect frame_rect = rect() + QMargins(d->radius, d->radius, d->radius, d->radius);
1135 QRegion radius_edge = QRegion(frame_rect) - QRegion(rect());
1136
1137 // 如果更新内容区域包含控件外围的区域(主要时radius半径下的区域),应当更新模糊绘制
1138 if (!(dirty & radius_edge.translated(offset)).isEmpty()) {
1139 // 此区域已经脏了,应当重置source image
1140 d->resetSourceImage();
1141
1142 if (d->blendMode == InWidgetBlend)
1143 Q_EMIT blurSourceImageDirtied();
1144 else
1145 update();
1146 }
1147 }
1148
1149 return QWidget::eventFilter(watched, event);
1150 }
1151
1152 class DBlurEffectGroupPrivate : public DTK_CORE_NAMESPACE::DObjectPrivate
1153 {
1154 public:
1155 DBlurEffectGroupPrivate(DBlurEffectGroup *qq)
1156 : DObjectPrivate(qq)
1157 {
1158
1159 }
1160
1161 D_DECLARE_PUBLIC(DBlurEffectGroup)
1162 QHash<DBlurEffectWidget*, QPoint> effectWidgetMap;
1163 QPixmap blurPixmap;
1164 };
1165
1166 DBlurEffectGroup::DBlurEffectGroup()
1167 : DObject(*new DBlurEffectGroupPrivate(this))
1168 {
1169
1170 }
1171
1172 DBlurEffectGroup::~DBlurEffectGroup()
1173 {
1174 D_DC(DBlurEffectGroup);
1175
1176 for (DBlurEffectWidget *widget : d->effectWidgetMap.keys()) {
1177 widget->d_func()->group = nullptr;
1178 widget->update();
1179 }
1180 }
1181
1182 void DBlurEffectGroup::setSourceImage(QImage image, int blurRadius)
1183 {
1184 D_D(DBlurEffectGroup);
1185
1186 if (image.isNull()) {
1187 d->blurPixmap = QPixmap();
1188 return;
1189 }
1190
1191 QImage tmp(image.size(), image.format());
1192 QPainter pa(&tmp);
1193 qt_blurImage(&pa, image, blurRadius, false, false);
1194 pa.end();
1195
1196 d->blurPixmap = QPixmap::fromImage(tmp);
1197 d->blurPixmap.setDevicePixelRatio(image.devicePixelRatio());
1198
1199 // 重绘制模糊控件
1200 for (auto begin = d->effectWidgetMap.constBegin(); begin != d->effectWidgetMap.constEnd(); ++begin) {
1201 begin.key()->update();
1202 }
1203 }
1204
1205 void DBlurEffectGroup::addWidget(DBlurEffectWidget *widget, const QPoint &offset)
1206 {
1207 if (widget->d_func()->group && widget->d_func()->group != this) {
1208 widget->d_func()->group->removeWidget(widget);
1209 }
1210
1211 widget->d_func()->group = this;
1212 D_D(DBlurEffectGroup);
1213 d->effectWidgetMap[widget] = offset;
1214
1215 widget->update();
1216 }
1217
1218 void DBlurEffectGroup::removeWidget(DBlurEffectWidget *widget)
1219 {
1220 D_D(DBlurEffectGroup);
1221
1222 if (d->effectWidgetMap.remove(widget)) {
1223 widget->d_func()->group = nullptr;
1224 widget->update();
1225 }
1226 }
1227
1228 void DBlurEffectGroup::paint(QPainter *pa, DBlurEffectWidget *widget) const
1229 {
1230 D_DC(DBlurEffectGroup);
1231
1232 pa->drawPixmap(widget->rect(), d->blurPixmap, widget->geometry().translated(d->effectWidgetMap[widget]));
1233 }
1234
9121235 DWIDGET_END_NAMESPACE
1717 #ifndef DBLUREFFECTWIDGET_H
1818 #define DBLUREFFECTWIDGET_H
1919
20 #include "dtkwidget_global.h"
21 #include "dobject.h"
20 #include <dtkwidget_global.h>
21 #include <DObject>
2222
2323 #include <QWidget>
2424
2525 DWIDGET_BEGIN_NAMESPACE
2626
2727 class DBlurEffectWidgetPrivate;
28
2928 class LIBDTKWIDGETSHARED_EXPORT DBlurEffectWidget : public QWidget, public DTK_CORE_NAMESPACE::DObject
3029 {
3130 Q_OBJECT
5352
5453 enum BlendMode {
5554 InWindowBlend,
56 BehindWindowBlend
55 BehindWindowBlend,
56 InWidgetBlend
5757 };
5858
5959 Q_ENUMS(BlendMode)
6161 enum MaskColorType {
6262 DarkColor,
6363 LightColor,
64 AutoColor,
6465 CustomColor
6566 };
6667
8485 quint8 maskAlpha() const;
8586
8687 void setMaskPath(const QPainterPath &path);
88 void setSourceImage(const QImage &image, bool autoScale = true);
8789
8890 public Q_SLOTS:
8991 void setRadius(int radius);
98100 void setFull(bool full);
99101 void setBlurEnabled(bool blurEnabled);
100102
103 void updateBlurSourceImage(const QRegion &ren);
104
101105 Q_SIGNALS:
102106 void radiusChanged(int radius);
103107 void modeChanged(BlurMode mode);
110114 void fullChanged(bool full);
111115 void blurEnabledChanged(bool blurEnabled);
112116
117 void blurSourceImageDirtied();
118
113119 protected:
114120 DBlurEffectWidget(DBlurEffectWidgetPrivate &dd, QWidget *parent = 0);
115121
119125 void showEvent(QShowEvent *event) Q_DECL_OVERRIDE;
120126 void hideEvent(QHideEvent *event) Q_DECL_OVERRIDE;
121127 void changeEvent(QEvent *event) Q_DECL_OVERRIDE;
128 bool eventFilter(QObject *watched, QEvent *event) override;
122129
123130 private:
124131 D_DECLARE_PRIVATE(DBlurEffectWidget)
132 friend class DBlurEffectGroup;
133 };
134
135 class DBlurEffectGroupPrivate;
136 class DBlurEffectGroup : public DTK_CORE_NAMESPACE::DObject
137 {
138 D_DECLARE_PRIVATE(DBlurEffectGroup)
139 public:
140 explicit DBlurEffectGroup();
141 ~DBlurEffectGroup();
142
143 void setSourceImage(QImage image, int blurRadius = 35);
144 void addWidget(DBlurEffectWidget *widget, const QPoint &offset = QPoint(0, 0));
145 void removeWidget(DBlurEffectWidget *widget);
146
147 void paint(QPainter *pa, DBlurEffectWidget *widget) const;
125148 };
126149
127150 DWIDGET_END_NAMESPACE
+0
-1227
src/widgets/dborderlesswidget.cpp less more
0 /*
1 * Copyright (C) 2017 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #include "dborderlesswidget.h"
18
19 #include <QDebug>
20 #include <QTimer>
21 #include <QWidget>
22 #include <QMouseEvent>
23 #include <QLayout>
24 #include <QTemporaryFile>
25 #include <QImage>
26 #include <QPainter>
27 #include <QGuiApplication>
28 #include <QWindow>
29
30 #include <DObjectPrivate>
31
32 #include "dtitlebar.h"
33 #include "private/dborderlesswidget_p.h"
34
35 #ifdef Q_OS_LINUX
36 #include "../platforms/x11/xutil.h"
37 #endif
38
39 #include "dwidgetutil.h"
40
41 DWIDGET_BEGIN_NAMESPACE
42
43 const int WindowGlowRadius = 40;
44 const int WindowRadius = 4;
45 const int WindowBorder = 1;
46 const int WindowHandleWidth = 10;
47
48 const QColor BorderColor = QColor(0, 0, 0, 60);
49 const QColor BackgroundTopColor = QColor(255, 255, 255);
50 const QColor BackgroundButtonColor = QColor(255, 255, 255);
51
52 const QColor TipsBorderColor = QColor(255, 255, 255, 255 * 0.2);
53 const QColor TipsBackground = QColor(0, 0, 0);
54
55 /// shadow
56 #define SHADOW_COLOR_NORMAL QColor(0, 0, 0, 255 * 0.15)
57 #define SHADOW_COLOR_ACTIVE QColor(0, 0, 0, 255 * 0.3)
58
59 DBorderlessWidgetPrivate::DBorderlessWidgetPrivate(DBorderlessWidget *q) : DObjectPrivate(q)
60 {
61 leftPressed = false;
62 resizable = true;
63 }
64
65 void DBorderlessWidgetPrivate::init()
66 {
67 D_Q(DBorderlessWidget);
68
69 dwindowFlags = Qt::Window | Qt::WindowTitleHint |
70 Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint |
71 Qt::WindowCloseButtonHint | Qt::WindowFullscreenButtonHint;
72 m_NormalShadowWidth = WindowGlowRadius;
73 m_ShadowWidth = WindowGlowRadius;
74 shadowColor = SHADOW_COLOR_ACTIVE;
75 shadowOffset = QPoint(0, 10);
76 m_Radius = WindowRadius;
77 m_Border = WindowBorder;
78 m_ResizeHandleWidth = WindowHandleWidth;
79 m_MousePressed = false;
80 m_backgroundColor = BackgroundTopColor;
81
82 rootLayout = new QVBoxLayout(q);
83
84 rootLayout->setSpacing(0);
85 updateContentsMargins();
86
87 windowWidget = new QWidget;
88 QVBoxLayout *windowLayout = new QVBoxLayout(windowWidget);
89 windowLayout->setMargin(0);
90 windowLayout->setSpacing(0);
91
92 rootLayout->addWidget(windowWidget);
93
94 titlebar = new DTitlebar;
95 contentWidget = new QWidget;
96 QVBoxLayout *contentWidgetLayout = new QVBoxLayout;
97 contentWidgetLayout->setSpacing(0);
98 contentWidgetLayout->setMargin(0);
99 contentWidget->setLayout(contentWidgetLayout);
100 contentWidget->setContentsMargins(m_Border, 0, m_Border, m_Border);
101 contentWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
102
103 windowLayout->addWidget(titlebar);
104 windowLayout->addWidget(contentWidget);
105
106 auto filter = new FilterMouseMove(windowWidget);
107 windowWidget->installEventFilter(filter);
108 filter->m_rootWidget = q;
109
110 q->connect(titlebar, &DTitlebar::optionClicked, q, &DBorderlessWidget::optionClicked);
111 q->connect(titlebar, &DTitlebar::mouseMoving, q, &DBorderlessWidget::moveWindow);
112
113 q->connect(titlebar, SIGNAL(mousePressed(Qt::MouseButtons)), q, SLOT(_q_onTitleBarMousePressed(Qt::MouseButtons)));
114
115 q->connect(qApp, &QGuiApplication::focusWindowChanged, q, [q] {
116 if (q->isActiveWindow())
117 {
118 q->setShadowColor(SHADOW_COLOR_ACTIVE);
119 } else
120 {
121 q->setShadowColor(SHADOW_COLOR_NORMAL);
122 }
123 });
124 }
125
126 QSize DBorderlessWidgetPrivate::externSize(const QSize &size) const
127 {
128 return QSize(size.width() + (m_ShadowWidth + m_Border) * 2,
129 size.height() + (m_ShadowWidth + m_Border) * 2);
130 }
131
132 QMargins DBorderlessWidgetPrivate::externMargins() const
133 {
134 return rootLayout->contentsMargins() + contentWidget->contentsMargins();
135 }
136
137 int DBorderlessWidgetPrivate::externWidth() const
138 {
139 return m_ShadowWidth + m_Border;
140 }
141
142 void DBorderlessWidgetPrivate::updateContentsMargins()
143 {
144 rootLayout->setContentsMargins(m_ShadowWidth + m_Border - shadowOffset.x(),
145 m_ShadowWidth + m_Border - shadowOffset.y(),
146 m_ShadowWidth + m_Border + shadowOffset.x(),
147 m_ShadowWidth + m_Border + shadowOffset.y());
148 }
149
150 void DBorderlessWidgetPrivate::_q_onTitleBarMousePressed(Qt::MouseButtons buttons) const
151 {
152 #ifdef Q_OS_LINUX
153 D_QC(DBorderlessWidget);
154
155 if (buttons != Qt::LeftButton) {
156 XUtils::CancelMoveWindow(q, Qt::LeftButton);
157 }
158 #else
159 Q_UNUSED(buttons);
160 #endif
161 }
162
163 /*!
164 * \~chinese @class DBorderlessWidget
165 *
166 * \~chinese @brief DBorderlessWidget 是DTK中用于提供无边框的功能的类,主要用于Windows。
167 * 在Windows和Linux图形环境下,窗口管理器都会附加一个标题栏,为了Deepin的设计,DTK的窗口不会使用系统提供的
168 * 样式,而是通过取消系统标题栏和自己提供阴影来达到效果。
169 * \~chinese - 通过设置窗口的WindowFlags为Qt::Window | Qt::FramelessWindowHint来实现
170 */
171
172 /*!
173 * \~chinese \fn DBorderlessWidget::optionClicked()
174 * \~chinese 会在标题栏被点击时触发
175 * \~chinese \fn DBorderlessWidget::backgroundColorChanged(QColor backgroundColor)
176 * \~chinese 会在背景颜色发生改变时时触发
177 * \~chinese \fn DBorderlessWidget::shadowColorChanged(QColor shadowColor)
178 * \~chinese 会在阴影颜色发生改变时触发
179 * \~chinese \fn DBorderlessWidget::shadowOffsetChanged(QPoint shadowOffset)
180 * \~chinese 会在阴影偏移被设置时触发
181 */
182
183 /*!
184 * \~chinese \enum DBorderlessWidget::DecorationFlag
185 * \~chinese @brief DBorderlessWidget::DecorationFlag 定义了修饰的标志
186 */
187
188 /*!
189 * \~chinese \var DBorderlessWidget::ShowTitlebarSeparator
190 * \~chinese @brief 显示标题栏分隔栏
191 */
192
193 /*!
194 * @brief 用于构建DBorderlessWidget实例的构造函数
195 * @param parent 接收QWidget的parent指针
196 */
197
198 DBorderlessWidget::DBorderlessWidget(QWidget *parent): DBorderlessWidget(*new DBorderlessWidgetPrivate(this), parent)
199 {
200
201 }
202
203 /*!
204 * \~chinese @brief 返回装饰标志
205 * \~chinese @return DBorderlessWidget::DecorationFlags
206 */
207
208 DBorderlessWidget::DecorationFlags DBorderlessWidget::decorationFlags()
209 {
210 D_D(DBorderlessWidget);
211 return d->decorationFlags;
212 }
213
214 /*!
215 * \~chinese @brief 设置当前的修饰标志
216 * \~chinese @param flags 接收一个DBorderlessWidget::DecorationFlags的枚举
217 */
218
219 void DBorderlessWidget::setDecorationFlags(DBorderlessWidget::DecorationFlags flags)
220 {
221 D_D(DBorderlessWidget);
222 d->decorationFlags = flags;
223
224 if (flags & ShowTitlebarSeparator) {
225 d->titlebar->setSeparatorVisible(true);
226 } else {
227 d->titlebar->setSeparatorVisible(false);
228 }
229 }
230
231 /*!
232 * \~chinese @brief 用于构建DBorderlessWidget实例的构造函数
233 *
234 * \~chinese @param dd 接收私有类
235 * \~chinese @param parent 设置parent
236 */
237
238 DBorderlessWidget::DBorderlessWidget(DBorderlessWidgetPrivate &dd, QWidget *parent)
239 : QWidget(parent), DObject(dd)
240 {
241 D_D(DBorderlessWidget);
242 d->init();
243 QWidget::setMouseTracking(true);
244
245 QWidget::setAttribute(Qt::WA_TranslucentBackground, true);
246 setWindowFlags(windowFlags());
247 setDecorationFlags(decorationFlags());
248
249 DBorderlessWidget::adjustSize();
250 #ifdef Q_OS_LINUX
251 XUtils::SetMouseTransparent(this, true);
252 #endif
253 #ifdef DTK_TITLE_DRAG_WINDOW
254 connect(d->titlebar, &DTitlebar::mousePosMoving,
255 this, [ = ](Qt::MouseButton /*button*/, QPoint pos) {
256 move(pos - d->m_LastMousePos);
257 });
258
259 connect(d->titlebar, &DTitlebar::mousePosPressed,
260 this, [ = ](Qt::MouseButtons /*button*/, QPoint pos) {
261 // TODO: fix margin
262 pos.setY(pos.y() - 10);
263 d->m_LastMousePos = pos - this->mapToParent(this->pos());
264 });
265 #endif
266 }
267
268 void DBorderlessWidget::enterEvent(QEvent *e)
269 {
270 // qDebug() << "enterEvent" ;
271 return QWidget::enterEvent(e);
272 }
273
274 void DBorderlessWidget::leaveEvent(QEvent *e)
275 {
276 // qDebug() << "leaveEvent";
277 return QWidget::leaveEvent(e);
278 }
279
280 void DBorderlessWidget::changeEvent(QEvent *event)
281 {
282 D_D(DBorderlessWidget);
283
284 if (event->type() == QEvent::WindowStateChange) {
285 d->updateContentsMargins();
286 }
287
288 QWidget::changeEvent(event);
289 }
290
291 void DBorderlessWidget::mouseMoveEvent(QMouseEvent *event)
292 {
293 #ifdef Q_OS_LINUX
294 D_D(DBorderlessWidget);
295
296 const int x = event->x();
297 const int y = event->y();
298
299 if (d->resizingCornerEdge == XUtils::CornerEdge::kInvalid && d->resizable) {
300 XUtils::UpdateCursorShape(this, x, y, d->externMargins(), d->m_ResizeHandleWidth);
301 }
302 #endif
303
304 return QWidget::mouseMoveEvent(event);
305 }
306
307 void DBorderlessWidget::mousePressEvent(QMouseEvent *event)
308 {
309 #ifdef Q_OS_LINUX
310 D_D(DBorderlessWidget);
311
312 const int x = event->x();
313 const int y = event->y();
314 if (event->button() == Qt::LeftButton) {
315
316 const XUtils::CornerEdge ce = XUtils::GetCornerEdge(this, x, y, d->externMargins(), d->m_ResizeHandleWidth);
317 if (ce != XUtils::CornerEdge::kInvalid) {
318 d->resizingCornerEdge = ce;
319 XUtils::StartResizing(this, QCursor::pos(), ce);
320 }
321
322 }
323 #endif
324 return QWidget::mousePressEvent(event);
325 }
326
327 void DBorderlessWidget::mouseReleaseEvent(QMouseEvent *event)
328 {
329 #ifdef Q_OS_LINUX
330 D_D(DBorderlessWidget);
331 d->resizingCornerEdge = XUtils::CornerEdge::kInvalid;
332 #endif
333 return QWidget::mouseReleaseEvent(event);
334 }
335
336 /*!
337 * \~chinese \brief 该方法会在Linux下调用XUtils::ShowMinimizedWindow(this, true);
338 */
339 void DBorderlessWidget::showMinimized()
340 {
341 #ifdef Q_OS_LINUX
342 XUtils::ShowMinimizedWindow(this, true);
343 #endif
344 QWidget::showMinimized();
345 }
346
347 /*!
348 * \~chinese @brief 该方法会在Linux下调用XUtils::ShowMaximizedWindow(this, true);
349 */
350 void DBorderlessWidget::showMaximized()
351 {
352 #ifdef Q_OS_LINUX
353 XUtils::ShowMaximizedWindow(this);
354 #endif
355 this->show();
356 this->activateWindow();
357 this->raise();
358 }
359
360 /*!
361 * \~chinese @brief 设置内部控件的外边距
362 * \~chinese
363 * \~chinese @param left 设置左边缘的距离
364 * \~chinese @param top 设置上边缘的距离
365 * \~chinese @param right 设置右边缘的距离
366 * \~chinese @param bottom 设置下边缘的距离
367 */
368 void DBorderlessWidget::setContentsMargins(int left, int top, int right, int bottom)
369 {
370 D_D(DBorderlessWidget);
371 d->contentWidget->setContentsMargins(left, top, right, bottom);
372 }
373
374 /*!
375 * \~chinese @brief 重载的方法,接收QMargins对象来设置内部控件的外边距
376 *
377 * \~chinese @param margins QMargins对象
378 */
379 void DBorderlessWidget::setContentsMargins(const QMargins &margins)
380 {
381 D_D(DBorderlessWidget);
382 d->contentWidget->setContentsMargins(margins);
383 }
384
385 /*!
386 * \~chinese @brief 获取内部控件的外边距
387 *
388 * \~chinese @param left 左边距的指针
389 * \~chinese @param top 上边距的指针
390 * \~chinese @param right 右边距的指针
391 * \~chinese @param bottom 下边距的指针
392 */
393 void DBorderlessWidget::getContentsMargins(int *left, int *top, int *right, int *bottom) const
394 {
395 D_DC(DBorderlessWidget);
396 d->contentWidget->getContentsMargins(left, top, right, bottom);
397 }
398
399 /*!
400 * \~chinese @brief 获取内部控件的外边距
401 *
402 * \~chinese @return QMargins 返回QMargins对象
403 */
404 QMargins DBorderlessWidget::contentsMargins() const
405 {
406 D_DC(DBorderlessWidget);
407 return d->contentWidget->contentsMargins();
408 }
409
410 /*!
411 * \~chinese @brief 显示全屏
412 * \~chinese 会在Linux下调用XUtils::ShowFullscreenWindow(this, true);
413 */
414 void DBorderlessWidget::showFullScreen()
415 {
416 #ifdef Q_OS_LINUX
417 XUtils::ShowFullscreenWindow(this, true);
418 #endif
419 this->show();
420 this->activateWindow();
421 this->raise();
422 }
423
424 /*!
425 * \~chinese @brief 移动窗口
426 * \~chinese @param button 接收Qt::MouseButton枚举值
427 */
428 void DBorderlessWidget::moveWindow(Qt::MouseButton button)
429 {
430 #ifdef Q_OS_LINUX
431 XUtils::MoveWindow(this, button);
432 #endif
433 }
434
435 /*!
436 * \~chinese @brief 切换窗口为最大化或者还原
437 *
438 */
439 void DBorderlessWidget::toggleMaximizedWindow()
440 {
441 #ifdef Q_OS_LINUX
442 XUtils::ToggleMaximizedWindow(this);
443 #endif
444 }
445
446 /*!
447 * \~chinese @brief 窗口将以标准模式显示
448 *
449 */
450 void DBorderlessWidget::showNormal()
451 {
452 #ifdef Q_OS_LINUX
453 XUtils::ShowNormalWindow(this);
454 #endif
455 }
456
457 /*!
458 * \~chinese @brief 删除当前的布局
459 *
460 */
461 void DBorderlessWidget::removeLayout()
462 {
463 qDeleteAll(this->children());
464 }
465
466 /*!
467 * \~chinese @brief 返回当前的WindowFlags
468 *
469 * \~chinese @return Qt::WindowFlags Qt的窗口标志枚举值
470 */
471 Qt::WindowFlags DBorderlessWidget::windowFlags()
472 {
473 D_D(DBorderlessWidget);
474 return d->dwindowFlags;
475 }
476
477 /*!
478 * \~english @brief set the required flags for the window
479 *
480 * \~english @param type Qt::WindowFlags enum
481 *
482 * \~chinese @brief 设置窗口需要的标志位
483 * \~chinese @param type Qt::WindowFlags 枚举值
484 */
485 void DBorderlessWidget::setWindowFlags(Qt::WindowFlags type)
486 {
487 D_D(DBorderlessWidget);
488 QWidget::setWindowFlags(type | Qt::FramelessWindowHint);
489 d->dwindowFlags = type;
490 d->titlebar->setWindowFlags(type &~ Qt::Window);
491 }
492
493 /*!
494 * \~chinese @brief 返回标题栏的高度
495 *
496 * \~chinese @return int 标题栏的高度
497 */
498 int DBorderlessWidget::titlebarHeight() const
499 {
500 D_DC(DBorderlessWidget);
501 return d->titlebar->height();
502 }
503
504 /*!
505 * \~chinese @brief 设置标题栏的固定高度
506 *
507 * \~chinese @param h 高度
508 */
509 void DBorderlessWidget::setTitlebarFixedHeight(int h)
510 {
511 D_D(DBorderlessWidget);
512 d->titlebar->setFixedHeight(h);
513 DBorderlessWidget::adjustSize();
514 }
515
516 /*!
517 * \~chinese @brief 设置标题
518 *
519 * \~chinese @param t 标题内容
520 */
521 void DBorderlessWidget::setTitle(const QString &t)
522 {
523 D_D(DBorderlessWidget);
524 d->titlebar->setTitle(t);
525 }
526
527 /*!
528 * \~chinese @brief 设置标题栏的图标
529 *
530 * \~chinese @param icon 图标对象
531 */
532 void DBorderlessWidget::setTitleIcon(const QPixmap &icon)
533 {
534 D_D(DBorderlessWidget);
535 d->titlebar->setIcon(icon);
536 }
537
538 /*!
539 * \~chinese @brief 返回标题栏对象
540 *
541 * \~chinese @return DTitlebar* 标题栏对象指针
542 */
543 DTitlebar *DBorderlessWidget::titlebar() const
544 {
545 D_DC(DBorderlessWidget);
546
547 return d->titlebar;
548 }
549
550 /*!
551 * \~chinese @brief 设置标题栏菜单
552 *
553 * \~chinese @param menu 菜单对象指针
554 */
555 void DBorderlessWidget::setTitlebarMenu(QMenu *menu)
556 {
557 D_D(DBorderlessWidget);
558 d->titlebar->setMenu(menu);
559 }
560
561 /*!
562 * \~chinese @brief 返回标题栏的菜单对象
563 *
564 * \~chinese @return QMenu* 菜单对象的指针
565 */
566 QMenu *DBorderlessWidget::titleBarMenu() const
567 {
568 D_DC(DBorderlessWidget);
569 return d->titlebar->menu();
570 }
571
572 /*!
573 * \~chinese @brief 设置标题栏的控件
574 *
575 * \~chinese @param w 要添加在标题栏的QWidget控件
576 * \~chinese @param fixCenterPos 从中心偏移的距离
577 */
578 void DBorderlessWidget::setTitlebarWidget(QWidget *w, bool fixCenterPos)
579 {
580 D_D(DBorderlessWidget);
581 d->titlebar->setCustomWidget(w, Qt::AlignCenter, fixCenterPos);
582 }
583
584 /*!
585 * \~chinese @brief 重载的方法,增加了设置对齐方式的参数
586 *
587 * \~chinese @param w 要添加在标题栏的QWidget控件
588 * \~chinese @param wflag 设置对齐方式
589 * \~chinese @param fixCenterPos 从中心偏移的距离
590 */
591 void DBorderlessWidget::setTitlebarWidget(QWidget *w, Qt::AlignmentFlag wflag, bool fixCenterPos)
592 {
593 D_D(DBorderlessWidget);
594 d->titlebar->setCustomWidget(w, wflag, fixCenterPos);
595 }
596
597
598 /*!
599 * \~chinese @brief 返回当前的布局
600 *
601 */
602 // TODO: fix layout
603 QLayout *DBorderlessWidget::layout() const
604 {
605 D_DC(DBorderlessWidget);
606 return d->contentWidget->layout();
607 }
608
609 /*!
610 * \~chinese @brief 设置布局
611 *
612 * \~chinese @param l 布局对象
613 */
614 void DBorderlessWidget::setLayout(QLayout *l)
615 {
616 D_D(DBorderlessWidget);
617
618 qDeleteAll(d->contentWidget->children());
619 d->contentWidget->setLayout(l);
620 d->contentWidget->adjustSize();
621 d->windowWidget->adjustSize();
622 DBorderlessWidget::resize(d->windowWidget->size());
623 }
624
625 /*!
626 * \~chinese @brief 返回控件的圆角半径
627 *
628 * \~chinese @return int 半径
629 */
630 int DBorderlessWidget::radius() const
631 {
632 D_DC(DBorderlessWidget);
633 return d->m_Radius;
634 }
635
636 /*!
637 * \~chinese @brief 设置控件的圆角半径
638 *
639 * \~chinese @param r 半径
640 */
641 void DBorderlessWidget::setRadius(int r)
642 {
643 D_D(DBorderlessWidget);
644 if (r > d->m_Border * 2) {
645 r = d->m_Border * 2;
646 }
647 d->m_Radius = r;
648 }
649
650 /*!
651 * \~chinese @brief 返回阴影的宽度
652 *
653 * \~chinese @return int 阴影宽度
654 */
655 int DBorderlessWidget::shadowWidth() const
656 {
657 D_DC(DBorderlessWidget);
658 return d->m_Radius;
659 }
660
661 /*!
662 * \~chinese @brief 设置阴影的宽度
663 *
664 * \~chinese @param r 阴影的宽度
665 */
666 void DBorderlessWidget::setShadowWidth(int r)
667 {
668 D_D(DBorderlessWidget);
669
670 if (d->m_ShadowWidth == r) {
671 return;
672 }
673
674 d->m_Radius = r;
675 d->m_ShadowWidth = r;
676
677 d->updateContentsMargins();
678 drawShadowPixmap();
679 update();
680 }
681
682 /*!
683 * \~chinese @property DBorderlessWidget::backgroundColor
684 * \~chinese @brief 返回背景颜色
685 *
686 * \~chinese @return QColor 颜色对象
687 */
688 QColor DBorderlessWidget::backgroundColor() const
689 {
690 D_DC(DBorderlessWidget);
691
692 return d->m_backgroundColor;
693 }
694
695 /*!
696 * \~chinese @brief 返回阴影的颜色
697 *
698 * \~chinese @return QColor 颜色对象
699 */
700 QColor DBorderlessWidget::shadowColor() const
701 {
702 D_DC(DBorderlessWidget);
703
704 return d->shadowColor;
705 }
706
707 /*!
708 * \~chinese @brief 返回阴影的偏移
709 *
710 * \~chinese @return QPoint 坐标对象
711 */
712 QPoint DBorderlessWidget::shadowOffset() const
713 {
714 D_DC(DBorderlessWidget);
715
716 return d->shadowOffset;
717 }
718
719 /*!
720 * \~chinese @brief 设置背景颜色
721 *
722 * \~chinese @param backgroundColor 颜色对象
723 */
724 void DBorderlessWidget::setBackgroundColor(QColor backgroundColor)
725 {
726 D_D(DBorderlessWidget);
727
728 if (d->m_backgroundColor == backgroundColor) {
729 return;
730 }
731
732 d->m_backgroundColor = backgroundColor;
733 Q_EMIT backgroundColorChanged(backgroundColor);
734 }
735
736 /*!
737 * \~chinese @brief 设置阴影颜色
738 *
739 * \~chinese @param shadowColor 颜色对象
740 */
741 void DBorderlessWidget::setShadowColor(QColor shadowColor)
742 {
743 D_D(DBorderlessWidget);
744
745 if (d->shadowColor == shadowColor) {
746 return;
747 }
748
749 d->shadowColor = shadowColor;
750
751 drawShadowPixmap();
752 update();
753
754 Q_EMIT shadowColorChanged(shadowColor);
755 }
756
757 /*!
758 * \~chinese @brief 设置阴影的偏移
759 *
760 * \~chinese @param shadowOffset 偏移的坐标对象
761 */
762 void DBorderlessWidget::setShadowOffset(QPoint shadowOffset)
763 {
764 D_D(DBorderlessWidget);
765
766 if (d->shadowOffset == shadowOffset) {
767 return;
768 }
769
770 d->shadowOffset = shadowOffset;
771
772 d->updateContentsMargins();
773 update();
774
775 Q_EMIT shadowOffsetChanged(shadowOffset);
776 }
777
778 /*!
779 * \~chinese @brief 绘制阴影的图像
780 *
781 */
782 void DBorderlessWidget::drawShadowPixmap()
783 {
784 D_D(DBorderlessWidget);
785
786 QPixmap pixmap(QWidget::size() - QSize(d->m_ShadowWidth * 2, d->m_ShadowWidth * 2));
787
788 pixmap.fill(Qt::black);
789
790 d->shadowPixmap = QPixmap::fromImage(Dtk::Widget::dropShadow(pixmap, d->m_ShadowWidth, d->shadowColor));
791 }
792
793 /*!
794 * \~chinese @brief 返回边框的大小
795 *
796 * \~chinese @return int 边框大小
797 */
798 int DBorderlessWidget::border() const
799 {
800 D_DC(DBorderlessWidget);
801 return d->m_Border;
802 }
803
804 /*!
805 * \~chinese @brief 设置边框的大小
806 *
807 * \~chinese @param b 设置的大小
808 */
809 void DBorderlessWidget::setBorder(int b)
810 {
811 D_D(DBorderlessWidget);
812 if (b < 0) { b = 0; }
813 d->m_Border = b;
814 if (d->m_Radius > b * 2) {
815 d->m_Radius = b * 2;
816 }
817 }
818
819 /*!
820 * \~chinese @brief 返回背景的图像
821 *
822 * \~chinese @return const QPixmap& 背景的图像对象
823 */
824 const QPixmap &DBorderlessWidget::backgroundImage() const
825 {
826 D_DC(DBorderlessWidget);
827 return d->m_Background;
828 }
829
830 /*!
831 * \~chinese @brief 设置背景的图像数据
832 *
833 * \~chinese @param srcPixmap 图像数据
834 */
835 void DBorderlessWidget::setBackgroundImage(const QPixmap &srcPixmap)
836 {
837 D_D(DBorderlessWidget);
838
839 int radius = d->m_Radius;
840 int windowExtern = d->m_ShadowWidth + d->m_Border * 2;
841 QRect windowRect = QWidget::rect().marginsRemoved(
842 QMargins(windowExtern, windowExtern, windowExtern, windowExtern));
843 QSize sz = windowRect.size();
844 QPixmap backgroundPixmap = srcPixmap.scaled(sz, Qt::KeepAspectRatioByExpanding);
845
846 QPixmap maskPixmap(sz);
847 maskPixmap.fill(Qt::transparent);
848 QPainterPath path;
849 path.addRoundRect(QRectF(0, 0, sz.width(), sz.height()), radius / 2);
850 QPainter bkPainter(&maskPixmap);
851 bkPainter.setRenderHint(QPainter::Antialiasing);
852 bkPainter.setPen(QPen(Qt::white, 1));
853 bkPainter.fillPath(path, QBrush(Qt::red));
854
855 QPainter::CompositionMode mode = QPainter::CompositionMode_SourceIn;
856 QImage resultImage = QImage(sz, QImage::Format_ARGB32_Premultiplied);
857 QPainter painter(&resultImage);
858 painter.setCompositionMode(QPainter::CompositionMode_Source);
859 painter.fillRect(resultImage.rect(), Qt::transparent);
860 painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
861 painter.drawImage(0, 0, maskPixmap.toImage());
862 painter.setCompositionMode(mode);
863 painter.drawImage(0, 0, backgroundPixmap.toImage());
864 painter.setCompositionMode(QPainter::CompositionMode_DestinationOver);
865 painter.end();
866
867 d->m_Background = QPixmap::fromImage(resultImage);
868 }
869
870 /*!
871 * \~chinese @brief 设置固定大小
872 *
873 * \~chinese @param size 大小
874 */
875 void DBorderlessWidget::setFixedSize(const QSize &size)
876 {
877 D_D(DBorderlessWidget);
878 d->resizable = false;
879 d->titlebar->setMinimumWidth(size.width());
880 d->windowWidget->setFixedSize(size);
881 d->contentWidget->setFixedSize(size.width(), size.height() - titlebarHeight());
882 QSize externSize = d->externSize(size);
883 QWidget::setFixedSize(externSize);
884 setWindowFlags(windowFlags() & ~ Qt::WindowMaximizeButtonHint);
885
886 #ifdef Q_OS_LINUX
887 XUtils::DisableResize(this);
888 #endif
889 }
890
891 /*!
892 * \~chinese @brief 重载的方法,设置固定大小
893 *
894 * \~chinese @param w 固定的宽度
895 * \~chinese @param h 固定的高度
896 */
897 void DBorderlessWidget::setFixedSize(int w, int h)
898 {
899 DBorderlessWidget::setFixedSize(QSize(w, h));
900 }
901
902 /*!
903 * \~chinese @brief 设置固定宽度
904 *
905 * \~chinese @param w 固定的宽度
906 */
907 void DBorderlessWidget::setFixedWidth(int w)
908 {
909 D_D(DBorderlessWidget);
910 d->titlebar->setFixedWidth(w);
911 d->windowWidget->setFixedWidth(w);
912 QWidget::setFixedWidth(w + d->m_ShadowWidth + d->m_Border);
913 }
914
915 /*!
916 * \~chinese @brief 调整控件的大小
917 * \~chinese - 可以调整的范围介于minimumSize和maxmumSize之间
918 *
919 * @param width 设置宽度
920 * @param height 设置高度
921 */
922 void DBorderlessWidget::resize(int width, int height)
923 {
924 resize(QSize(width, height));
925 }
926
927 /*!
928 * \~chinese @brief 这是调整大小的重载方法,接收一个QSzie对象
929 *
930 * \~chinese @param size 要调整的大小
931 */
932 void DBorderlessWidget::resize(const QSize &size)
933 {
934 D_D(DBorderlessWidget);
935 d->windowWidget->resize(size);
936 d->titlebar->resize(size.width(), d->titlebar->height());
937
938 QSize externSize = d->externSize(size);
939 if (d->resizable) {
940 QWidget::setMinimumSize(externSize);
941 QWidget::resize(externSize);
942 } else {
943 QWidget::setMaximumSize(externSize);
944 }
945 }
946
947 /*!
948 * \~chinese @brief 立即调整大小
949 *
950 */
951 void DBorderlessWidget::adjustSize()
952 {
953 D_D(DBorderlessWidget);
954 d->windowWidget->adjustSize();
955 QSize externSize = d->externSize(d->windowWidget->size());
956 if (d->resizable) {
957 QWidget::setMinimumSize(externSize);
958 QWidget::resize(externSize);
959 } else {
960 QWidget::setMaximumSize(externSize);
961 QWidget::resize(externSize);
962 }
963 }
964
965 /*!
966 * \~chinese @brief 返回控件当前的大小
967 *
968 * \~chinese @return QSize
969 */
970 QSize DBorderlessWidget::size() const
971 {
972 D_DC(DBorderlessWidget);
973 return d->windowWidget->size();
974 }
975
976 /*!
977 * \~chinese @brief 移动控件到某一点
978 *
979 * \~chinese @param x X坐标
980 * \~chinese @param y Y坐标
981 */
982 void DBorderlessWidget::move(int x, int y)
983 {
984 D_D(DBorderlessWidget);
985 QWidget::move(x - d->externWidth(), y - d->externWidth());
986 }
987
988 /*!
989 * \~chinese @brief 这是重载的方法,接收一个坐标对象
990 *
991 * \~chinese @param p 要移动到的坐标
992 */
993 void DBorderlessWidget::move(const QPoint &p)
994 {
995 DBorderlessWidget::move(p.x(), p.y());
996 }
997
998 /*!
999 * \~chinese @brief 返回当前的几何尺寸,包含阴影
1000 *
1001 * \~chinese @return QRect 当前的几何大小
1002 */
1003 QRect DBorderlessWidget::frameGeometry() const
1004 {
1005 D_DC(DBorderlessWidget);
1006 return d->windowWidget->frameGeometry();
1007 }
1008
1009 /*!
1010 * \~chinese @brief 返回当前的几何尺寸,不包含阴影的区域
1011 *
1012 * @return const QRect& 当前的几何大小
1013 */
1014 const QRect &DBorderlessWidget::geometry() const
1015 {
1016 D_DC(DBorderlessWidget);
1017 return d->windowWidget->geometry();
1018 }
1019
1020 /*!
1021 * \~chinese @brief 此方法返回窗口小部件的几何
1022 * \~chinese - 对于子窗口和控件, 此方法始终包含空矩形
1023 *
1024 * @return QRect
1025 */
1026 QRect DBorderlessWidget::normalGeometry() const
1027 {
1028 D_DC(DBorderlessWidget);
1029 return d->windowWidget->normalGeometry();
1030 }
1031
1032 /*!
1033 * \~chinese @brief 返回当前的X坐标
1034 *
1035 * \~chinese @return int
1036 */
1037 int DBorderlessWidget::x() const
1038 {
1039 D_DC(DBorderlessWidget);
1040 return d->windowWidget->x();
1041 }
1042
1043 /*!
1044 * \~chinese @brief 返回当前的Y坐标
1045 *
1046 * \~chinese @return int
1047 */
1048 int DBorderlessWidget::y() const
1049 {
1050 D_DC(DBorderlessWidget);
1051 return d->windowWidget->y();
1052 }
1053
1054 /*!
1055 * \~chinese @brief 返回当前的坐标
1056 *
1057 * \~chinese @return QPoint 相对于父窗口的坐标
1058 */
1059 QPoint DBorderlessWidget::pos() const
1060 {
1061 D_DC(DBorderlessWidget);
1062 return d->windowWidget->pos();
1063 }
1064
1065 /*!
1066 * \~chinese @brief 返回窗口外部框架的大小
1067 *
1068 * \~chinese @return QSize 框架的大小
1069 */
1070 QSize DBorderlessWidget::frameSize() const
1071 {
1072 D_DC(DBorderlessWidget);
1073 return d->windowWidget->frameSize();
1074 }
1075
1076 /*!
1077 * \~chinese @brief 返回当前的宽度
1078 *
1079 * \~chinese @return int 当前的宽度
1080 */
1081 int DBorderlessWidget::width() const
1082 {
1083 D_DC(DBorderlessWidget);
1084 return d->windowWidget->width();
1085 }
1086
1087 /*!
1088 * \~chinese @brief 返回当前的高度
1089 *
1090 * \~chinese @return int 当前的高度
1091 */
1092 int DBorderlessWidget::height() const
1093 {
1094 D_DC(DBorderlessWidget);
1095 return d->windowWidget->height();
1096 }
1097
1098 /*!
1099 * \~chinese @brief 返回当前的大小
1100 *
1101 * \~chinese @return QRect 当前的大小
1102 */
1103 inline QRect DBorderlessWidget::rect() const
1104 {
1105 D_DC(DBorderlessWidget);
1106 return d->windowWidget->rect();
1107 }
1108
1109 /*!
1110 * \~chinese @brief 返回内部控件的大小
1111 *
1112 * \~chinese @return QRect 内部控件的大小
1113 */
1114 QRect DBorderlessWidget::childrenRect() const
1115 {
1116 D_DC(DBorderlessWidget);
1117 return d->windowWidget->childrenRect();
1118 }
1119
1120 /*!
1121 * \~chinese @brief 返回内部控件的区域大小
1122 *
1123 * \~chinese @return QRegion 内部控件的区域大小
1124 */
1125 QRegion DBorderlessWidget::childrenRegion() const
1126 {
1127 D_DC(DBorderlessWidget);
1128 return d->windowWidget->childrenRegion();
1129 }
1130
1131 void DBorderlessWidget::showEvent(QShowEvent *e)
1132 {
1133 QWidget::showEvent(e);
1134 }
1135
1136 void DBorderlessWidget::resizeEvent(QResizeEvent *e)
1137 {
1138 D_D(DBorderlessWidget);
1139 #ifdef Q_OS_LINUX
1140 int resizeHandleWidth = d->resizable ? d->m_ResizeHandleWidth : 0;
1141 XUtils::SetWindowExtents(this, d->externMargins(), resizeHandleWidth);
1142 #endif
1143
1144 drawShadowPixmap();
1145 d->titlebar->resize(e->size().width(), d->titlebar->height());
1146 QWidget::resizeEvent(e);
1147 }
1148
1149 void DBorderlessWidget::closeEvent(QCloseEvent *e)
1150 {
1151 QWidget::closeEvent(e);
1152 }
1153
1154 void DBorderlessWidget::paintEvent(QPaintEvent * /*e*/)
1155 {
1156 D_D(DBorderlessWidget);
1157 int radius = d->m_Radius;
1158 //. TODO: border not part of window?
1159 int windowExtern = d->m_ShadowWidth + d->m_Border * 2;
1160 int contentExtern = d->m_ShadowWidth + d->m_Border * 2;
1161
1162 QPainter painter(this);
1163
1164 painter.drawPixmap(0, 0, d->shadowPixmap);
1165
1166 QRect contentRect = QWidget::rect().marginsRemoved(QMargins(contentExtern, contentExtern, contentExtern, contentExtern));
1167 QRect windowRect = QWidget::rect().marginsRemoved(QMargins(windowExtern, windowExtern, windowExtern, windowExtern));
1168
1169 contentRect.moveTopLeft(contentRect.topLeft() - d->shadowOffset);
1170 windowRect.moveTopLeft(windowRect.topLeft() - d->shadowOffset);
1171
1172 if (! d->m_Background.isNull()) {
1173 painter.drawPixmap(contentRect, d->m_Background);
1174 } else {
1175 QPoint topLeft(windowRect.x(), windowRect.y());
1176 QPoint bottomRight(windowRect.x() + windowRect.width(), windowRect.y() + windowRect.height());
1177 QPainterPath border;
1178 border.addRoundedRect(windowRect, radius, radius);
1179
1180 QLinearGradient linearGradient(topLeft, QPoint(topLeft.x(), bottomRight.y()));
1181 linearGradient.setColorAt(0.0, d->m_backgroundColor);
1182 linearGradient.setColorAt(0.2, d->m_backgroundColor);
1183 linearGradient.setColorAt(1.0, d->m_backgroundColor);
1184
1185 QPen borderPen(BorderColor);
1186
1187 painter.setRenderHint(QPainter::Antialiasing);
1188 painter.setBrush(QBrush(linearGradient));
1189 painter.strokePath(border, borderPen);
1190 painter.fillPath(border, /*palette().background()*/QBrush(linearGradient));
1191 }
1192 }
1193
1194 FilterMouseMove::FilterMouseMove(QObject *object) : QObject(object)
1195 {
1196
1197 }
1198
1199 FilterMouseMove::~FilterMouseMove()
1200 {
1201
1202 }
1203
1204 bool FilterMouseMove::eventFilter(QObject *obj, QEvent *event)
1205 {
1206 switch (event->type()) {
1207 case QEvent::Enter: {
1208 if (qobject_cast<QWidget *>(obj) != qobject_cast<QWidget *>(this->parent())) {
1209 break;
1210 }
1211 if (m_rootWidget) {
1212 #ifdef Q_OS_LINUX
1213 XUtils::ResetCursorShape(m_rootWidget);
1214 #endif
1215 }
1216 break;
1217 }
1218 default: {
1219 }
1220 }
1221 return QObject::eventFilter(obj, event);
1222 }
1223
1224 DWIDGET_END_NAMESPACE
1225
1226 #include "moc_dborderlesswidget.cpp"
+0
-198
src/widgets/dborderlesswidget.h less more
0 /*
1 * Copyright (C) 2017 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #ifndef DABSTRACTWIDGET_H
18 #define DABSTRACTWIDGET_H
19
20 #include <QWidget>
21 #include <dobject.h>
22 #include <dtkwidget_global.h>
23
24 class QMenu;
25
26 DWIDGET_BEGIN_NAMESPACE
27
28 class DBorderlessWidgetPrivate;
29 class DTitlebar;
30
31 class LIBDTKWIDGETSHARED_EXPORT DBorderlessWidget : public QWidget, public DTK_CORE_NAMESPACE::DObject
32 {
33 Q_OBJECT
34 public:
35 enum DecorationFlag {
36 ShowTitlebarSeparator = 0x01
37 };
38 Q_DECLARE_FLAGS(DecorationFlags, DecorationFlag)
39 Q_FLAGS(DecorationFlags)
40
41 explicit DBorderlessWidget(QWidget *parent = 0);
42
43 Q_PROPERTY(int radius READ radius WRITE setRadius)
44 Q_PROPERTY(int shadowWidth READ shadowWidth WRITE setShadowWidth)
45 Q_PROPERTY(int border READ border WRITE setBorder)
46 Q_PROPERTY(int titlebarHeight READ titlebarHeight WRITE setTitlebarFixedHeight)
47 Q_PROPERTY(QPixmap backgroundImage READ backgroundImage WRITE setBackgroundImage)
48 Q_PROPERTY(QColor backgroundColor READ backgroundColor WRITE setBackgroundColor NOTIFY backgroundColorChanged)
49 Q_PROPERTY(QColor shadowColor READ shadowColor WRITE setShadowColor NOTIFY shadowColorChanged)
50 Q_PROPERTY(QPoint shadowOffset READ shadowOffset WRITE setShadowOffset NOTIFY shadowOffsetChanged)
51
52 DecorationFlags decorationFlags();
53 void setDecorationFlags(DecorationFlags flags);
54
55 Qt::WindowFlags windowFlags();
56 void setWindowFlags(Qt::WindowFlags type);
57
58 void setTitle(const QString &);
59 void setTitleIcon(const QPixmap &icon);
60
61 DTitlebar *titlebar() const;
62
63 void setTitlebarMenu(QMenu *);
64 QMenu *titleBarMenu() const;
65 void setTitlebarWidget(QWidget *, bool fixCenterPos = false);
66 void setTitlebarWidget(QWidget *w, Qt::AlignmentFlag wflag, bool fixCenterPos = false);
67 int titlebarHeight() const;
68 void setTitlebarFixedHeight(int h);
69
70 QLayout *layout() const;
71 void setLayout(QLayout *);
72
73 int radius() const;
74 void setRadius(int r);
75
76 int shadowWidth() const;
77 void setShadowWidth(int w);
78
79 int border() const;
80 void setBorder(int b);
81
82 const QPixmap &backgroundImage() const;
83 void setBackgroundImage(const QPixmap &srcPixmap);
84
85 void setContentsMargins(int left, int top, int right, int bottom);
86 void setContentsMargins(const QMargins &margins);
87 void getContentsMargins(int *left, int *top, int *right, int *bottom) const;
88 QMargins contentsMargins() const;
89
90 void setFixedSize(const QSize &);
91 void setFixedSize(int w, int h);
92 void setFixedWidth(int w);
93 // void setFixedHeight(int h);
94
95 void resize(int width, int height);
96 void resize(const QSize &);
97
98 void removeLayout();
99
100 void adjustSize();
101
102 void move(int x, int y);
103 void move(const QPoint &);
104
105 QRect frameGeometry() const;
106 const QRect &geometry() const;
107 QRect normalGeometry() const;
108
109 int x() const;
110 int y() const;
111 QPoint pos() const;
112 QSize frameSize() const;
113 QSize size() const;
114 int width() const;
115 int height() const;
116 QRect rect() const;
117 QRect childrenRect() const;
118 QRegion childrenRegion() const;
119
120 QSize minimumSize() const;
121 QSize maximumSize() const;
122 int minimumWidth() const;
123 int minimumHeight() const;
124 int maximumWidth() const;
125 int maximumHeight() const;
126 void setMinimumSize(const QSize &);
127 void setMinimumSize(int minw, int minh);
128 void setMaximumSize(const QSize &);
129 void setMaximumSize(int maxw, int maxh);
130 void setMinimumWidth(int minw);
131 void setMinimumHeight(int minh);
132 void setMaximumWidth(int maxw);
133 void setMaximumHeight(int maxh);
134
135 QColor backgroundColor() const;
136 QColor shadowColor() const;
137 QPoint shadowOffset() const;
138
139 protected:
140 void mouseMoveEvent(QMouseEvent *) Q_DECL_OVERRIDE;
141 void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;
142 void mouseReleaseEvent(QMouseEvent *) Q_DECL_OVERRIDE;
143 void showEvent(QShowEvent *) Q_DECL_OVERRIDE;
144 void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
145 void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE;
146 void closeEvent(QCloseEvent *) Q_DECL_OVERRIDE;
147 void enterEvent(QEvent *)Q_DECL_OVERRIDE;
148 void leaveEvent(QEvent *)Q_DECL_OVERRIDE;
149 void changeEvent(QEvent *event) Q_DECL_OVERRIDE;
150
151 public Q_SLOTS:
152 void showMinimized();
153 void showMaximized();
154 void showFullScreen();
155 void showNormal();
156
157 void moveWindow(Qt::MouseButton button);
158 void toggleMaximizedWindow();
159
160 void setBackgroundColor(QColor backgroundColor);
161 void setShadowColor(QColor shadowColor);
162 void setShadowOffset(QPoint shadowOffset);
163
164 protected:
165 explicit DBorderlessWidget(DBorderlessWidgetPrivate &dd, QWidget *parent = 0);
166
167 virtual void drawShadowPixmap();
168
169 Q_SIGNALS:
170 void optionClicked();
171 void backgroundColorChanged(QColor backgroundColor);
172 void shadowColorChanged(QColor shadowColor);
173 void shadowOffsetChanged(QPoint shadowOffset);
174
175 private:
176 D_PRIVATE_SLOT(void _q_onTitleBarMousePressed(Qt::MouseButtons) const)
177
178 D_DECLARE_PRIVATE(DBorderlessWidget)
179 };
180
181 class FilterMouseMove : public QObject
182 {
183 Q_OBJECT
184
185 public:
186 explicit FilterMouseMove(QObject *object = nullptr);
187 ~FilterMouseMove();
188
189 bool eventFilter(QObject *obj, QEvent *event);
190
191 //private:
192 QWidget *m_rootWidget = nullptr;
193 };
194
195 DWIDGET_END_NAMESPACE
196
197 #endif // DABSTRACTWIDGET_H
+0
-126
src/widgets/dborderlesswindow.cpp less more
0 /*
1 * Copyright (C) 2017 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #include "dborderlesswindow.h"
18
19 #include <QDebug>
20 #include <QHBoxLayout>
21 #include <QMenu>
22 #include <DApplication>
23
24 #include "dtitlebar.h"
25 #include "private/dborderlesswidget_p.h"
26
27 DWIDGET_BEGIN_NAMESPACE
28
29 class DBorderlessWindowPrivate: public DBorderlessWidgetPrivate
30 {
31 D_DECLARE_PUBLIC(DBorderlessWindow)
32
33 public:
34 explicit DBorderlessWindowPrivate(DBorderlessWindow *q);
35 void init();
36
37 QMenu *m_menu = nullptr;
38 QWidget *m_parent = nullptr;
39 };
40
41 DBorderlessWindowPrivate::DBorderlessWindowPrivate(DBorderlessWindow *q): DBorderlessWidgetPrivate(q)
42 {
43
44 }
45
46 void DBorderlessWindowPrivate::init()
47 {
48 D_Q(DBorderlessWindow);
49
50 m_menu = new QMenu(q);
51 q->setTitlebarMenu(m_menu);
52
53 const DApplication *dapp = qobject_cast<DApplication*>(qApp);
54 if (dapp) {
55 q->setWindowTitle(dapp->productName());
56 } else {
57 q->setWindowTitle(qApp->applicationDisplayName());
58 }
59 }
60
61 /*!
62 * \~chinese @class DBorderlessWindow
63 * \~chinese @brief DBorderlessWindow 是DBorderlessWidget的派生类,提供了简化的接口
64 *
65 * \~chinese @param parent
66 */
67
68 DBorderlessWindow::DBorderlessWindow(QWidget *parent): DBorderlessWidget(*(new DBorderlessWindowPrivate(this)))
69 {
70 D_D(DBorderlessWindow);
71
72 setParent(parent);
73
74 d->init();
75 }
76
77 /*!
78 * \~chinese @brief 修改当前的parent
79 *
80 * \~chinese @param parent
81 */
82 void DBorderlessWindow::setParent(QWidget *parent)
83 {
84 D_D(DBorderlessWindow);
85 d->m_parent = parent;
86 QObject::setParent(parent);
87 }
88
89 /*!
90 * \~chinese @brief 获取当前的父窗口对象
91 *
92 * \~chinese @return QWidget* 父窗口对象
93 */
94 QWidget *DBorderlessWindow::parentWidget() const
95 {
96 D_DC(DBorderlessWindow);
97 return d->m_parent;
98 }
99
100 /*!
101 * \~chinese @brief 设置内部的布局
102 *
103 * \~chinese @param l 布局对象
104 */
105 void DBorderlessWindow::setContentLayout(QLayout *l)
106 {
107 DBorderlessWidget::setLayout(l);
108 }
109
110 /*!
111 * \~chinese @brief 设置内部控件
112 *
113 * \~chinese @param w
114 */
115 void DBorderlessWindow::setContentWidget(QWidget *w)
116 {
117 QHBoxLayout *l = new QHBoxLayout;
118 l->setSpacing(0);
119 l->setMargin(0);
120 l->addWidget(w);
121 l->setAlignment(w, Qt::AlignCenter);
122 setContentLayout(l);
123 }
124
125 DWIDGET_END_NAMESPACE
+0
-54
src/widgets/dborderlesswindow.h less more
0 /*
1 * Copyright (C) 2017 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #ifndef DWINDOW_H
18 #define DWINDOW_H
19
20 #include <QWidget>
21 #include <dobject.h>
22 #include <dtkwidget_global.h>
23
24 #include "dborderlesswidget.h"
25
26 class QMenu;
27
28 DWIDGET_BEGIN_NAMESPACE
29
30 class DBorderlessWindowPrivate;
31
32 class DBorderlessWindow : public DBorderlessWidget
33 {
34 Q_OBJECT
35 public:
36 explicit DBorderlessWindow(QWidget *parent = Q_NULLPTR);
37
38 void setContentLayout(QLayout *l);
39 void setContentWidget(QWidget *w);
40
41 void setParent(QWidget *parent);
42 QWidget *parentWidget() const;
43
44 protected Q_SLOTS:
45
46 private:
47 D_DECLARE_PRIVATE(DBorderlessWindow)
48 Q_DISABLE_COPY(DBorderlessWindow)
49 };
50
51 DWIDGET_END_NAMESPACE
52
53 #endif // DWINDOW_H
8686 QFrame(parent),
8787 DObject(*new DBoxWidgetPrivate(this))
8888 {
89 DThemeManager::registerWidget(this);
90
9189 d_func()->layout->setDirection(direction);
9290 d_func()->init();
9391 }
168166 */
169167 void DBoxWidget::updateSize(const QSize &size)
170168 {
171 if(direction() == QBoxLayout::TopToBottom || QBoxLayout::BottomToTop) {
169 if(direction() == QBoxLayout::TopToBottom || direction() == QBoxLayout::BottomToTop) {
172170 setFixedHeight(size.height());
173171
174172 if(size.width() > minimumWidth())
0 <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
1 "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
2 <node name="/asr/xxx">
3 <interface name="com.iflytek.aiservice.asr">
4 <!--开始转写-->
5 <method name='startAsr'>
6 <!--
7 param为QVariantMap,目前支持以下参数
8 filePath:
9 必填,待转写文件路径,时长最大为5小时,5分钟以上效果最佳
10 fileDuration:
11 音频真实时长,单位是毫秒 服务端将针对用户上传的duration和服务端转码后的音频时长进行对比,如果偏差在10秒内(含10秒),则视为合法。
12 srcLanguage:
13 选填,用于上传的语种识别,仅可填入en、cn中的某一个值。en:英文,cn:中文,默认cn
14 targetLanguage:
15 选填,如果该字段不为空,代表客户需要使用转写+翻译的功能;字段值支持cn:中文,en:英文;该字段需要和 language 字段配套使用。language代表源语言,targetLanguage代表翻译后的语言。例如:language=cn,targetLanguage=en,表示中翻英。
16 -->
17 <arg name='param' type='a{sv}' direction='in'/>
18 <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QVariantMap"/>
19 <!--返回值,具体请见错误码-->
20 <arg name='code' type='s' direction='out'/>
21 </method>
22 <!--停止转写,如果转写尚未结束,调用此接口会自动停止转写,如果转写已经完成,调用此结果则不会做任何动作-->
23 <method name='stopAsr'/>
24 <!--转写状态及结果通知-->
25 <signal name="onNotify">
26 <!--result内容为json字符串形式,具体见定义-->
27 <arg name="msg" type="s" direction="out"/>
28 </signal>
29 </interface>
30 </node>
0 <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
1 "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
2 <node name="/iat/interface">
3 <interface name="com.iflytek.aiservice.iat">
4 <!--录音启动接口-->
5 <method name='startIat'>
6 <!--传入参数,param为QVariantMap,用户听写控制-->
7 <arg name='param' type='a{sv}' direction='in'/>
8 <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QVariantMap"/>
9 <!--传出参数,json对象,表示函数返回值,json对象field如下:
10 status:
11 -1 : 未知错误
12 0 : 操作成功
13 1 : 录音设备被占用
14 2 : 参数错误
15 msg: 错误信息
16 session_id: session信息
17 -->
18 <arg name='status' type='s' direction='out'/>
19 </method>
20 <method name='putAudio'>
21 <!--传入参数-->
22 <arg name='audio_buf' type='ay' direction='in'/>
23 <!--传入参数-->
24 <arg name='finish' type='b' direction='in'/>
25 </method>
26 <!--录音停止接口,供用户主动调用-->
27 <method name='stopIat'/>
28 <!--语音输入的文本结果,该结果是可能是语音输入的流式文本
29 客户端需要监听该信号-->
30 <signal name="onResult">
31 <!--返回参数,json格式,形式如下:
32 text: 文本结果,{"sn":1,"ls":false,"bg":0,"ed":0,"ws":[{"bg":78,"cw":[{"sc":0.0,"w":"灰"}]},{"bg":94,"cw":[{"sc":0.0,"w":"化肥"}]},{"bg":134,"cw":[{"sc":0.0,"w":"挥发"}]},{"bg":174,"cw":[{"sc":0.0,"w":"会"}]},{"bg":194,"cw":[{"sc":0.0,"w":"发"}]},{"bg":210,"cw":[{"sc":0.0,"w":"灰"}]}]}
33 session_id: session信息
34 -->
35 <arg name="result" type="s" direction="out"/>
36 </signal>
37 <!--听写服务出现异常-->
38 <signal name="onError">
39 <!--在线听写服务的异常错误信息,json 对象,field如下:
40 errInfo: 错误文本信息
41 errCode: 错误码
42 -->
43 <arg name="errInfo" type="s" direction="out"/>
44 </signal>
45 <!--听写结束,云端主动通知客户端听写结束,客户端需要监听该信号,
46 客户端若希望继续听写,需要重新调用startIat接口
47 -->
48 <signal name="onEnd"/>
49 </interface>
50 </node>
0 <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
1 "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
2 <node name="/">
3 <interface name="com.iflytek.aiservice.ocr">
4 <!--ocr识别要求:照片为jpg格式,大小不超过4M-->
5 <method name='sendpictureByPath'>
6 <!--图片路径-->
7 <arg name='path' type='s' direction='in'/>
8 <!--是否异步,默认异步-->
9 <arg name='isSync' type='b' direction='in'/>
10 <!--错误码,0:成功,-1:打开文件失败-->
11 <arg name='errorcode' type='i' direction='out'/>
12 </method>
13 <!--图像数据的方式,非图片的路径-->
14 <method name='sendpicture'>
15 <!--图像数据-->
16 <arg name='array' type='ay' direction='in'/>
17 <!--是否异步,默认异步-->
18 <arg name='isSync' type='b' direction='in'/>
19 <!--错误码,0:成功,-1:失败-->
20 <arg name='errorcode' type='i' direction='out'/>
21 </method>
22 <signal name="signalOCRResult">
23 <!--result内容为json字符串形式,具体见定义-->
24 <arg name="result" type="s" direction="out"/>
25 </signal>
26 </interface>
27 </node>
0 <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
1 "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
2 <node name="/">
3 <interface name="com.iflytek.aiservice.session">
4 <!--创建会话-->
5 <method name='createSession'>
6 <!--调用者的应用标识-->
7 <arg name='appId' type='s' direction='in'/>
8 <!--需要调用的能力,目前支持听写:iat,转写:asr,合成:tts-->
9 <arg name='ability' type='s' direction='in'/>
10 <!--所申请能力返回对应dbus的object-path-->
11 <arg name='path' type='o' direction='out'/>
12 <!--错误码,0:成功,-1:appid为空,-2:能力选择错误,-3:创建object失败,-4:路径已存在-->
13 <arg name='errorcode' type='i' direction='out'/>
14 </method>
15 <!--释放会话-->
16 <method name='freeSession'>
17 <!--调用者的应用标识-->
18 <arg name='appId' type='s' direction='in'/>
19 <!--需要调用的能力,目前支持听写:iat,转写:asr,合成:tts-->
20 <arg name='ability' type='s' direction='in'/>
21 <!--错误码,0:成功,-1:appid为空,-2:能力选择错误-->
22 <arg name='errorcode' type='i' direction='out'/>
23 </method>
24 </interface>
25 </node>
0 <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
1 "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
2 <node name="/trans/xxx">
3 <interface name="com.iflytek.aiservice.trans">
4 <!--阻塞式翻译,结果同步返回-->
5 <method name='syncTrans'>
6 <!--
7 param为QVariantMap,目前支持以下参数
8 srcLanguage:
9 必填,源语种
10 targetLanguage:
11 必填,目标语种
12 txt:
13 必填,待翻译文本,最大15000 bytes
14 -->
15 <arg name='param' type='a{sv}' direction='in'/>
16 <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QVariantMap"/>
17 <!--翻译结果,json字符串格式-->
18 <arg name='result' type='s' direction='out'/>
19 </method>
20 <!--非阻塞式翻译,结果以Signal形式异步返回-->
21 <method name='asyncTrans'>
22 <!--param同syncTrans-->
23 <arg name='param' type='a{sv}' direction='in'/>
24 <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QVariantMap"/>
25 </method>
26 <!--异步翻译结果通知-->
27 <signal name="onNotify">
28 <!--result内容为json字符串形式,同syncTrans返回值-->
29 <arg name="result" type="s" direction="out"/>
30 </signal>
31 </interface>
32 </node>
0 <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
1 "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
2 <node name="/tts/xxx">
3 <interface name="com.iflytek.aiservice.tts">
4 <method name='startCompose'>
5 <arg name='params' type='a{sv}' direction='in'/>
6 <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QVariantMap"/>
7 <arg name='sessionId' type='s' direction='out'/>
8 </method>
9 <method name='stopCompose'>
10 <arg name='code' type='s' direction='out'/>
11 </method>
12 <method name='putText'>
13 <arg name='text' type='s' direction='in'/>
14 <arg name='code' type='s' direction='out'/>
15 </method>
16 <signal name="onNotify">
17 <arg name='data' type='ay' direction='out'/>
18 <arg name='code' type='s' direction='out'/>
19 </signal>
20 </interface>
21 </node>
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #include "dbuttonbox.h"
21 #include "private/dbuttonbox_p.h"
22 #include "dstyleoption.h"
23 #include "dstyle.h"
24
25 #include <QButtonGroup>
26 #include <QAbstractButton>
27 #include <QHBoxLayout>
28 #include <QStyleOptionButton>
29 #include <QStylePainter>
30 #include <private/qabstractbutton_p.h>
31
32 DWIDGET_BEGIN_NAMESPACE
33
34 class DButtonBoxButtonPrivate : public DCORE_NAMESPACE::DObjectPrivate
35 {
36 public:
37 DButtonBoxButtonPrivate(DButtonBoxButton *qq)
38 : DObjectPrivate(qq)
39 {
40
41 }
42
43 qint64 iconType = -1;
44 };
45
46 /*!
47 * \~chinese \class DButtonBoxButton
48 * \~chinese \brief DButtonBoxButton 提供了修改了样式的按钮
49 * \~chinese \li DButtonBoxButton 提供了设置图标的按钮的函数
50 *
51 * \~chinese \note\row 代码示例
52 * \~chinese \note\row DButtonBoxButton *btn1 = new DButtonBoxButton("btn1");
53 * \~chinese \note\row btn1->setIcon(QStyle::StandardPixmap::SP_ArrowUp);
54 * \~chinese \image html DButtonBoxButton.png
55 */
56
57 /*!
58 * \chinese \brief DButtonBoxButton 构造函数
59 * \chinese \param text 按钮名称
60 * \chinese \param parent参数被发送到 QAbstractButton 构造函数
61 */
62 DButtonBoxButton::DButtonBoxButton(const QString &text, QWidget *parent)
63 : QAbstractButton(parent)
64 , DObject(*new DButtonBoxButtonPrivate(this))
65 {
66 setText(text);
67 }
68
69 /*!
70 * \chinese \brief DButtonBoxButton构造函数
71 * \chinese \param icon图标
72 * \chinese \param text参数被发送到 DButtonBoxButton 构造函数
73 * \chinese \param parent参数被发送到 DButtonBoxButton 构造函数
74 */
75 DButtonBoxButton::DButtonBoxButton(const QIcon &icon, const QString &text, QWidget *parent)
76 : DButtonBoxButton(text, parent)
77 {
78 setIcon(icon);
79 }
80
81 /*!
82 * \chinese \brief DButtonBoxButton 构造函数
83 * \chinese \param iconType Qt标准图标
84 * \chinese \param text 参数被发送到 DButtonBoxButton 构造函数
85 * \chinese \param parent 参数被发送到 DButtonBoxButton 构造函数
86 */
87 DButtonBoxButton::DButtonBoxButton(QStyle::StandardPixmap iconType, const QString &text, QWidget *parent)
88 : DButtonBoxButton(static_cast<DStyle::StandardPixmap>(iconType), text, parent)
89 {
90
91 }
92
93 /*!
94 * \chinese \brief DButtonBoxButton 构造函数
95 * \chinese \param iconType 标准图标
96 * \chinese \param text 参数被发送到 DButtonBoxButton 构造函数
97 * \chinese \param parent 参数被发送到 DButtonBoxButton 构造函数
98 */
99 DButtonBoxButton::DButtonBoxButton(DStyle::StandardPixmap iconType, const QString &text, QWidget *parent)
100 : DButtonBoxButton(text, parent)
101 {
102 d_func()->iconType = static_cast<qint64>(iconType);
103 }
104
105 /*!
106 * \chinese \brief DButtonBoxButton::setIcon 设置图标
107 * \chinese \param icon图标
108 */
109 void DButtonBoxButton::setIcon(const QIcon &icon)
110 {
111 D_D(DButtonBoxButton);
112
113 d->iconType = -1;
114 QAbstractButton::setIcon(icon);
115 }
116
117 /*!
118 * \chinese \brief DButtonBoxButton::setIcon 设置图标
119 * \chinese \param iconType Qt标准图标
120 */
121 void DButtonBoxButton::setIcon(QStyle::StandardPixmap iconType)
122 {
123 D_D(DButtonBoxButton);
124
125 d->iconType = iconType;
126 QAbstractButton::setIcon(style()->standardIcon(iconType, nullptr, this));
127 }
128
129 /*!
130 * \chinese \brief DButtonBoxButton::setIcon 设置图标
131 * \chinese \param iconType 标准图标
132 */
133 void DButtonBoxButton::setIcon(DStyle::StandardPixmap iconType)
134 {
135 D_D(DButtonBoxButton);
136
137 d->iconType = iconType;
138 QAbstractButton::setIcon(DStyleHelper(style()).standardIcon(iconType, nullptr, this));
139 }
140
141 /*!
142 * \chinese \brief DButtonBoxButton::iconSize 返回图标大小
143 */
144 QSize DButtonBoxButton::iconSize() const
145 {
146 QAbstractButtonPrivate *bp = static_cast<QAbstractButtonPrivate*>(QAbstractButton::d_ptr.data());
147
148 if (bp->iconSize.isValid()) {
149 return bp->iconSize;
150 }
151
152 DStyleHelper dstyle(style());
153 DStyleOptionButton opt;
154 opt.initFrom(this);
155 int size = dstyle.pixelMetric(DStyle::PM_IconButtonIconSize, &opt, this);
156
157 if (Q_LIKELY(size > 0)) {
158 return QSize(size, size);
159 }
160
161 return QAbstractButton::iconSize();
162 }
163
164 /*!
165 * \chinese \brief DButtonBoxButton::sizeHint
166 * \chinese \row \sa QAbstractButton::sizeHint()
167 */
168 QSize DButtonBoxButton::sizeHint() const
169 {
170 QAbstractButtonPrivate *d = static_cast<QAbstractButtonPrivate*>(QAbstractButton::d_ptr.data());
171
172 if (d->sizeHint.isValid())
173 return d->sizeHint;
174
175 ensurePolished();
176
177 int w = 0, h = 0;
178
179 DStyleOptionButtonBoxButton opt;
180 initStyleOption(&opt);
181
182 if (!icon().isNull()) {
183 int ih = opt.iconSize.height();
184 int iw = opt.iconSize.width() + 4;
185 w += iw;
186 h = qMax(h, ih);
187 }
188
189 QString s(text());
190 bool empty = s.isEmpty();
191 if (empty)
192 s = QStringLiteral("XXXX");
193 QFontMetrics fm = fontMetrics();
194 QSize sz = fm.size(Qt::TextShowMnemonic, s);
195 if(!empty || !w)
196 w += sz.width();
197 if(!empty || !h)
198 h = qMax(h, sz.height());
199 opt.rect.setSize(QSize(w, h)); // PM_MenuButtonIndicator depends on the height
200
201 DStyleHelper dstyle(style());
202
203 d->sizeHint = (dstyle.sizeFromContents(DStyle::CT_ButtonBoxButton, &opt, QSize(w, h), this).
204 expandedTo(QApplication::globalStrut()));
205 return d->sizeHint;
206 }
207
208 /*!
209 * \~chinese \brief DButtonBoxButton::minimumSizeHint
210 * \~chinese \row \sa QAbstractButton::minimumSizeHint()
211 */
212 QSize DButtonBoxButton::minimumSizeHint() const
213 {
214 return sizeHint();
215 }
216
217 void DButtonBoxButton::initStyleOption(DStyleOptionButtonBoxButton *option) const
218 {
219 option->initFrom(this);
220 option->init(this);
221 option->features = QStyleOptionButton::Flat;
222
223 if (isDown())
224 option->state |= QStyle::State_Sunken;
225 if (isChecked())
226 option->state |= QStyle::State_On;
227
228 option->text = text();
229 option->icon = icon();
230 option->iconSize = iconSize();
231
232 if (DButtonBox *p = qobject_cast<DButtonBox*>(parent())) {
233 option->orientation = p->orientation();
234 option->position = p->d_func()->getButtonPosition(this);
235 }
236 }
237
238 void DButtonBoxButton::paintEvent(QPaintEvent *e)
239 {
240 Q_UNUSED(e)
241
242 DStylePainter p(this);
243 DStyleOptionButtonBoxButton option;
244 initStyleOption(&option);
245 p.drawControl(DStyle::CE_ButtonBoxButton, option);
246 }
247
248 void DButtonBoxButton::keyPressEvent(QKeyEvent *event)
249 {
250 switch (event->key()) {
251 case Qt::Key_Enter:
252 case Qt::Key_Return:
253 if (hasFocus()) {
254 click();
255 break;
256 }
257 Q_FALLTHROUGH();
258 default:
259 QAbstractButton::keyPressEvent(event);
260 }
261 }
262
263 bool DButtonBoxButton::event(QEvent *e)
264 {
265 if (e->type() == QEvent::Polish) {
266 D_DC(DButtonBoxButton);
267
268 if (d->iconType >= 0) {
269 if (d->iconType > static_cast<qint64>(QStyle::SP_CustomBase)) {
270 DStyleHelper dstyle(style());
271 setIcon(dstyle.standardIcon(static_cast<DStyle::StandardPixmap>(d->iconType), nullptr, this));
272 } else {
273 setIcon(style()->standardIcon(static_cast<QStyle::StandardPixmap>(d->iconType), nullptr, this));
274 }
275 }
276 }
277
278 return QAbstractButton::event(e);
279 }
280
281 DButtonBoxPrivate::DButtonBoxPrivate(DButtonBox *qq)
282 : DObjectPrivate(qq)
283 {
284
285 }
286
287 void DButtonBoxPrivate::init()
288 {
289 D_Q(DButtonBox);
290
291 q->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed, QSizePolicy::PushButton));
292
293 group = new QButtonGroup(q);
294 q->connect(group, SIGNAL(buttonClicked(QAbstractButton*)), q, SIGNAL(buttonClicked(QAbstractButton*)));
295 q->connect(group, SIGNAL(buttonPressed(QAbstractButton*)), q, SIGNAL(buttonPressed(QAbstractButton*)));
296 q->connect(group, SIGNAL(buttonReleased(QAbstractButton*)), q, SIGNAL(buttonReleased(QAbstractButton*)));
297 q->connect(group, SIGNAL(buttonToggled(QAbstractButton*, bool)), q, SIGNAL(buttonToggled(QAbstractButton*, bool)));
298
299 layout = new QHBoxLayout(q);
300 layout->setMargin(0);
301 layout->setSpacing(0);
302 }
303
304 DStyleOptionButtonBoxButton::ButtonPosition DButtonBoxPrivate::getButtonPosition(const DButtonBoxButton *button) const
305 {
306 D_QC(DButtonBox);
307
308 DStyleOptionButtonBoxButton::ButtonPosition position;
309 auto list = q->buttonList();
310 bool reverse = q->layoutDirection() == Qt::RightToLeft && q->orientation() == Qt::Horizontal;
311
312 if (list.count() == 1) {
313 position = DStyleOptionButtonBoxButton::OnlyOne;
314 } else if (button == list.first()) {
315 position = reverse ? DStyleOptionButtonBoxButton::End : DStyleOptionButtonBoxButton::Beginning;
316 } else if (button == list.last()) {
317 position = reverse ? DStyleOptionButtonBoxButton::Beginning : DStyleOptionButtonBoxButton::End;
318 } else {
319 position = DStyleOptionButtonBoxButton::Middle;
320 }
321
322 return position;
323 }
324
325 /*!
326 * \~chinese \class DButtonBox
327 * \~chinese \brief DButtonBox 类似于 QButtonGroup 的类
328 * \~chinese \li DButtonBox 提供了对按钮的布局方向
329 *
330 * \~chinese \code 示例代码
331 * \~chinese \row DButtonBox box;
332 * \~chinese \row DButtonBoxButton *btn1 = new DButtonBoxButton("btn1");
333 * \~chinese \row DButtonBoxButton *btn2 = new DButtonBoxButton("btn2");
334 * \~chinese \row btn1->setIcon(QStyle::StandardPixmap::SP_ArrowUp);
335 * \~chinese \row box.setButtonList({btn1, btn2}, true);
336 * \~chinese \endcode
337 * \~chinese \image html DButtonBox.png
338 */
339
340 /*!
341 * \~chinese \brief DButtonBox::DButtonBox 构造函数
342 * \~chinese \param parent 参数被发送到 QWidget 构造函数
343 */
344 DButtonBox::DButtonBox(QWidget *parent)
345 : QWidget(parent)
346 , DObject(*new DButtonBoxPrivate(this))
347 {
348 d_func()->init();
349 }
350
351 /*!
352 * \~chinese \brief DButtonBox::orientation 返回布局方向
353 * \~chinese \row \sa Qt::Orientation
354 */
355 Qt::Orientation DButtonBox::orientation() const
356 {
357 D_DC(DButtonBox);
358
359 QBoxLayout::Direction ld = d->layout->direction();
360
361 if (ld == QBoxLayout::LeftToRight || ld == QBoxLayout::RightToLeft) {
362 return Qt::Horizontal;
363 }
364
365 return Qt::Vertical;
366 }
367
368 /*!
369 * \~chinese \brief DButtonBox::setOrientation 设置布局方向
370 * \~chinese \param \sa orientationQt::Orientation
371 */
372 void DButtonBox::setOrientation(Qt::Orientation orientation)
373 {
374 D_D(DButtonBox);
375 Q_ASSERT(d->group->buttons().isEmpty());
376
377 d->layout->setDirection(orientation == Qt::Horizontal ? QBoxLayout::LeftToRight : QBoxLayout::TopToBottom);
378 }
379
380 /*!
381 * \~chinese \brief DButtonBox::setButtonList将按钮进添加到组中
382 * \~chinese \param list存储按钮的 QList 列表
383 * \~chinese \param checkable按钮是否可选中
384 */
385 void DButtonBox::setButtonList(const QList<DButtonBoxButton *> &list, bool checkable)
386 {
387 D_D(DButtonBox);
388
389 for (QAbstractButton *button : d->group->buttons()) {
390 d->group->removeButton(button);
391 d->layout->removeWidget(button);
392 }
393
394 for (int i = 0; i < list.count(); ++i) {
395 QAbstractButton *button = list.at(i);
396
397 button->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding);
398 d->layout->addWidget(button);
399 d->group->addButton(button);
400
401 button->setCheckable(checkable);
402 }
403 }
404
405 /*!
406 * \~chinese \brief DButtonBox::buttonList
407 * \~chinese \row \sa QButtonGroup::buttons()
408 */
409 QList<QAbstractButton *> DButtonBox::buttonList() const
410 {
411 D_DC(DButtonBox);
412
413 return d->group->buttons();
414 }
415
416 /*!
417 * \~chinese \brief DButtonBox::checkedButton
418 * \~chinese \row \sa QButtonGroup::checkedButton()
419 */
420 QAbstractButton *DButtonBox::checkedButton() const
421 {
422 D_DC(DButtonBox);
423
424 return d->group->checkedButton();
425 }
426
427 /*!
428 * \~chinese \brief DButtonBox::button
429 * \~chinese \row \sa QButtonGroup::button()
430 */
431 QAbstractButton *DButtonBox::button(int id) const
432 {
433 D_DC(DButtonBox);
434
435 return d->group->button(id);
436 }
437
438 /*!
439 * \~chinese \brief DButtonBox::setId
440 * \~chinese \row \sa QButtonGroup::setId()
441 */
442 void DButtonBox::setId(QAbstractButton *button, int id)
443 {
444 D_D(DButtonBox);
445
446 d->group->setId(button, id);
447 }
448
449 /*!
450 * \~chinese \brief DButtonBox::id
451 * \~chinese \row \sa QButtonGroup::id()
452 */
453 int DButtonBox::id(QAbstractButton *button) const
454 {
455 D_DC(DButtonBox);
456
457 return d->group->id(button);
458 }
459 /*!
460 * \~chinese \brief DButtonBox::checkedId
461 * \~chinese \row \sa QButtonGroup::
462 */
463 int DButtonBox::checkedId() const
464 {
465 D_DC(DButtonBox);
466
467 return d->group->checkedId();
468 }
469
470 void DButtonBox::paintEvent(QPaintEvent *e)
471 {
472 Q_UNUSED(e)
473
474 QStylePainter p(this);
475 QStyleOptionButton opt;
476 opt.state = QStyle::State_None;
477 opt.rect = rect();
478 opt.direction = layoutDirection();
479 opt.palette = palette();
480 opt.styleObject = this;
481 opt.fontMetrics = fontMetrics();
482
483 if (isEnabled()) {
484 opt.state |= QStyle::State_Enabled;
485 } else if (isActiveWindow()) {
486 opt.state |= QStyle::State_Active;
487 }
488
489 p.drawControl(QStyle::CE_PushButtonBevel, opt);
490 }
491
492 DWIDGET_END_NAMESPACE
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #ifndef DBUTTONBOX_H
21 #define DBUTTONBOX_H
22
23 #include <dtkwidget_global.h>
24 #include <DObject>
25 #include <DStyle>
26
27 #include <QAbstractButton>
28
29 DWIDGET_BEGIN_NAMESPACE
30
31 class DStyleOptionButtonBoxButton;
32 class DButtonBoxButtonPrivate;
33 class DButtonBoxButton : public QAbstractButton, public DCORE_NAMESPACE::DObject
34 {
35 Q_OBJECT
36 D_DECLARE_PRIVATE(DButtonBoxButton)
37
38 public:
39 explicit DButtonBoxButton(const QString &text, QWidget *parent = nullptr);
40 DButtonBoxButton(const QIcon& icon, const QString &text = QString(), QWidget *parent = nullptr);
41 DButtonBoxButton(QStyle::StandardPixmap iconType = static_cast<QStyle::StandardPixmap>(-1),
42 const QString &text = QString(), QWidget *parent = nullptr);
43 DButtonBoxButton(DStyle::StandardPixmap iconType = static_cast<DStyle::StandardPixmap>(-1),
44 const QString &text = QString(), QWidget *parent = nullptr);
45
46 void setIcon(const QIcon &icon);
47 void setIcon(QStyle::StandardPixmap iconType);
48 void setIcon(DStyle::StandardPixmap iconType);
49
50 QSize iconSize() const;
51 QSize sizeHint() const;
52 QSize minimumSizeHint() const override;
53
54 private:
55 void initStyleOption(DStyleOptionButtonBoxButton *option) const;
56
57 void paintEvent(QPaintEvent *e) override;
58 void keyPressEvent(QKeyEvent *event) override;
59 bool event(QEvent *e) override;
60 };
61
62 class DButtonBoxPrivate;
63 class DButtonBox : public QWidget, public DCORE_NAMESPACE::DObject
64 {
65 Q_OBJECT
66 D_DECLARE_PRIVATE(DButtonBox)
67
68 public:
69 explicit DButtonBox(QWidget *parent = nullptr);
70
71 Qt::Orientation orientation() const;
72 void setOrientation(Qt::Orientation orientation);
73
74 void setButtonList(const QList<DButtonBoxButton*> &list, bool checkable);
75 QList<QAbstractButton*> buttonList() const;
76
77 QAbstractButton * checkedButton() const;
78 // no setter on purpose!
79
80 QAbstractButton *button(int id) const;
81 void setId(QAbstractButton *button, int id);
82 int id(QAbstractButton *button) const;
83 int checkedId() const;
84
85 Q_SIGNALS:
86 void buttonClicked(QAbstractButton *);
87 void buttonPressed(QAbstractButton *);
88 void buttonReleased(QAbstractButton *);
89 void buttonToggled(QAbstractButton *, bool);
90
91 private:
92 void paintEvent(QPaintEvent *e) override;
93
94 friend class DButtonBoxButton;
95 };
96
97 DWIDGET_END_NAMESPACE
98
99 #endif // DBUTTONBOX_H
+0
-237
src/widgets/dbuttonlist.cpp less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #include "dbuttonlist.h"
18 #include "dthememanager.h"
19 #include "dconstants.h"
20 #include <QListWidget>
21 #include <QButtonGroup>
22 #include <QPushButton>
23 #include <QListWidgetItem>
24 #include <QVBoxLayout>
25 #include <QLabel>
26 #include <QPoint>
27 #include <QResizeEvent>
28 #include <QEvent>
29 #include <QDebug>
30
31 DWIDGET_BEGIN_NAMESPACE
32
33 DIconButton::DIconButton(const QString &Icon, const QString &text, QWidget *parent):
34 QPushButton(text, parent),
35 m_icon(Icon),
36 m_text(text)
37 {
38 initIconLabel();
39 initConnect();
40 }
41
42 void DIconButton::initConnect(){
43 connect(this, SIGNAL(toggled(bool)), m_iconLabel, SLOT(setVisible(bool)));
44 }
45
46 void DIconButton::initIconLabel(){
47 m_iconLabel = new QLabel(this);
48 setIconLeftMargin(20);
49 m_iconLabel->hide();
50 QImage image(m_icon);
51 m_iconLabel->setPixmap(QPixmap::fromImage(image));
52 m_iconLabel->setFixedSize(image.size());
53 }
54
55 void DIconButton::setIconLeftMargin(int leftMargin){
56 m_iconLabel->move(leftMargin, y());
57 }
58
59 void DIconButton::resizeEvent(QResizeEvent *event){
60 int height = event->size().height();
61 m_iconLabel->move(m_iconLabel->x(), (height - m_iconLabel->height())/ 2 );
62 QPushButton::resizeEvent(event);
63 }
64
65 void DIconButton::setIconLabel(const QString &icon){
66 m_icon = icon;
67 QImage image(m_icon);
68 m_iconLabel->setPixmap(QPixmap::fromImage(image));
69 m_iconLabel->setFixedSize(image.size());
70 }
71
72 void DIconButton::hideIconLabel(){
73 m_iconLabel->hide();
74 }
75
76 void DIconButton::updateStyle(){
77 style()->unpolish(this);
78 style()->polish(this);
79 update();
80 }
81
82 void DIconButton::enterEvent(QEvent *event){
83 Q_EMIT mouseEntered(text());
84 QPushButton::enterEvent(event);
85 }
86
87 void DIconButton::leaveEvent(QEvent *event){
88 Q_EMIT mouseLeaved(text());
89 QPushButton::leaveEvent(event);
90 }
91
92 /*!
93 * \class DButtonList
94 *
95 * \~chinese \brief 已废弃,请考虑配合 QButtonGroup 使用 QRadioButton 来替代。
96 * \~english \brief Deprecated. Consider use QRadioButton with QButtonGroup instead.
97 *
98 * \~chinese \deprecated 请考虑配合 QButtonGroup 使用 QRadioButton 来替代。
99 * \~english \deprecated Consider use QRadioButton with QButtonGroup instead.
100 */
101
102 DButtonList::DButtonList(QWidget *parent) : QListWidget(parent)
103 {
104 DThemeManager::registerWidget(this);
105
106 setSelectionMode(DButtonList::NoSelection);
107 setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
108 setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
109 setVerticalScrollMode(ScrollPerItem);
110 setResizeMode(Adjust);
111
112 setItemSize(200, BUTTON_HEIGHT);
113
114 m_buttonGroup = new QButtonGroup(this);
115 m_buttonGroup->setExclusive(true);
116
117 initConnect();
118 }
119
120
121 void DButtonList::initMargins(int leftMargin, int rightMargin, int imageLeftMargin){
122 m_leftMargin = leftMargin;
123 m_rightMargin = rightMargin;
124 m_imageLeftMargin = imageLeftMargin;
125 }
126
127 DButtonList::~DButtonList()
128 {
129
130 }
131
132 void DButtonList::initConnect(){
133 connect(m_buttonGroup, SIGNAL(buttonClicked(int)), this, SLOT(setButtonChecked(int)));
134 }
135
136 void DButtonList::setItemWidth(int width){
137 setGridSize(QSize(width, gridSize().height()));
138 setFixedWidth(gridSize().width());
139 }
140
141 void DButtonList::setItemHeight(int height){
142 setGridSize(QSize(gridSize().width(), height));
143 }
144
145 void DButtonList::setItemSize(int width, int height){
146 setItemSize(QSize(width, height));
147 }
148
149 void DButtonList::setItemSize(QSize size){
150 setGridSize(size);
151 setFixedWidth(gridSize().width());
152
153 for(int i=0; i< count(); i++){
154 itemWidget(item(i))->setFixedHeight(size.height());
155 }
156 }
157
158 void DButtonList::addButton(const QString &label){
159 int index = count();
160 addButton(label, index);
161 }
162
163 void DButtonList::addButton(const QString &label, int index){
164 DIconButton* button = new DIconButton(":/images/dark/images/tick_hover.png", label, this);
165 button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
166 button->setCheckable(true);
167 connect(button, SIGNAL(mouseEntered(QString)), this, SIGNAL(buttonMouseEntered(QString)));
168 connect(button, SIGNAL(mouseLeaved(QString)), this, SIGNAL(buttonMouseLeaved(QString)));
169 QFrame* borderFrame = new QFrame;
170 borderFrame->setObjectName("BorderFrame");
171 QVBoxLayout* borderLayout = new QVBoxLayout;
172 borderLayout->addWidget(button);
173 borderLayout->setSpacing(0);
174 borderLayout->setContentsMargins(m_leftMargin, 0, m_rightMargin, 0);
175 borderFrame->setLayout(borderLayout);
176
177 m_buttonGroup->addButton(button, index);
178 QListWidgetItem* item = new QListWidgetItem(this);
179 addItem(item);
180 setItemWidget(item, borderFrame);
181
182 setItemSize(gridSize());
183
184 }
185
186
187 void DButtonList::addButtons(const QStringList &listLabels){
188 for(int i= 0; i< listLabels.length(); i++) {
189 addButton(listLabels.at(i), i);
190 }
191 }
192
193 void DButtonList::setButtonChecked(int id){
194 if (id < m_buttonGroup->buttons().length()){
195 DIconButton* button = reinterpret_cast<DIconButton*>(m_buttonGroup->button(id));
196 button->setChecked(true);
197 if (m_buttonGroup->buttons().length() == 1){
198 button->setProperty("state", "OnlyOne");
199 button->hideIconLabel();
200 }else{
201 button->setProperty("state", "normal");
202 }
203 button->updateStyle();
204 Q_EMIT buttonCheckedIndexChanged(id);
205 Q_EMIT buttonChecked(button->text());
206 }
207 }
208
209 void DButtonList::checkButtonByIndex(int index){
210 if (index < m_buttonGroup->buttons().length()){
211 DIconButton* button = reinterpret_cast<DIconButton*>(m_buttonGroup->button(index));
212 button->click();
213 }
214 }
215
216 DIconButton* DButtonList::getButtonByIndex(int index){
217 if (index < m_buttonGroup->buttons().length()){
218 DIconButton* button = reinterpret_cast<DIconButton*>(m_buttonGroup->button(index));
219 return button;
220 }else{
221 qWarning() << "There is no this index:" << index;
222 }
223 return NULL;
224 }
225
226 void DButtonList::clear(){
227 Q_FOREACH (QAbstractButton* button, m_buttonGroup->buttons()) {
228 // qDebug() << static_cast<IconButton*>(button)->text();
229 static_cast<DIconButton*>(button)->disconnect();
230 m_buttonGroup->removeButton(static_cast<DIconButton*>(button));
231 }
232 QListWidget::clear();
233 }
234
235
236 DWIDGET_END_NAMESPACE
+0
-104
src/widgets/dbuttonlist.h less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #ifndef DBUTTONLIST_H
18 #define DBUTTONLIST_H
19
20 #include <QListWidget>
21 #include <QPushButton>
22 #include "dtkwidget_global.h"
23
24 class QButtonGroup;
25 class QLabel;
26 class QPoint;
27 class QResizeEvent;
28 class QEvent;
29
30 DWIDGET_BEGIN_NAMESPACE
31
32 class DIconButton : public QPushButton
33 {
34 Q_OBJECT
35 public:
36 DIconButton(const QString &Icon, const QString &text, QWidget *parent = Q_NULLPTR);
37
38 void initIconLabel();
39 void initConnect();
40 void setIconLeftMargin(int leftMargin);
41 void setIconLabel(const QString &icon);
42 void hideIconLabel();
43 void updateStyle();
44
45 Q_SIGNALS:
46 void mouseEntered(QString label);
47 void mouseLeaved(QString label);
48
49 protected:
50 void resizeEvent(QResizeEvent *event);
51 void enterEvent(QEvent *event);
52 void leaveEvent(QEvent *event);
53
54 private:
55 QLabel *m_iconLabel;
56 QString m_icon;
57 QString m_text;
58 };
59
60 class LIBDTKWIDGETSHARED_EXPORT DButtonList : public QListWidget
61 {
62 Q_OBJECT
63 public:
64 Q_DECL_DEPRECATED explicit DButtonList(QWidget *parent = Q_NULLPTR);
65 ~DButtonList();
66
67 void initMargins(int leftMargin, int rightMargin, int imageLeftMargin);
68 DIconButton *getButtonByIndex(int index);
69
70 public Q_SLOTS:
71 void addButton(const QString &label);
72 void addButton(const QString &label, int index);
73 void addButtons(const QStringList &listLabels);
74 void setItemHeight(int height);
75 void setItemWidth(int width);
76 void setItemSize(int width, int height);
77 void setItemSize(QSize size);
78 void checkButtonByIndex(int index);
79 void clear();
80
81 private Q_SLOTS:
82 void setButtonChecked(int id);
83
84 Q_SIGNALS:
85 void buttonChecked(QString label);
86 void buttonCheckedIndexChanged(int index);
87 void buttonMouseEntered(QString label);
88 void buttonMouseLeaved(QString label);
89
90 private:
91 QButtonGroup *m_buttonGroup = NULL;
92
93 void initConnect();
94
95 int m_leftMargin = 10;
96 int m_rightMargin = 10;
97 int m_imageLeftMargin = 10;
98 };
99
100
101 DWIDGET_END_NAMESPACE
102
103 #endif // DBUTTONLIST_H
9494 : QWidget(parent),
9595 DObject(*new DCircleProgressPrivate(this))
9696 {
97 DThemeManager::registerWidget(this);
97
9898 }
9999
100100 /*!
230230 d->m_lineWidth = width;
231231 }
232232
233 /*!
234 * \~chinese \brief DCircleProgress::topLabel
235 * \~chinese \return 返回环形进度条顶部文字Label
236 */
233237 QLabel *DCircleProgress::topLabel()
234238 {
235239 Q_D(DCircleProgress);
237241 return &d->m_topLabel;
238242 }
239243
244 /*!
245 * \~chinese \brief DCircleProgress::bottomLabel
246 * \~chinese \return 返回环形进度条底部文字Label
247 */
240248 QLabel *DCircleProgress::bottomLabel()
241249 {
242250 Q_D(DCircleProgress);
0 /*
1 * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd.
2 *
3 * Author: Chris Xiong <chirs241097@gmail.com>
4 *
5 * Maintainer: Chris Xiong <chirs241097@gmail.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #include "dcoloredprogressbar.h"
22
23 #include <DObjectPrivate>
24
25 #include <QMap>
26 #include <QPainter>
27 #include <QStylePainter>
28 #include <QStyleOptionProgressBar>
29
30 DWIDGET_BEGIN_NAMESPACE
31
32 class DColoredProgressBarPrivate : DTK_CORE_NAMESPACE::DObjectPrivate
33 {
34 D_DECLARE_PUBLIC(DColoredProgressBar)
35 DColoredProgressBarPrivate(DColoredProgressBar *q);
36 private:
37 QMap<int, QBrush> threshmap;
38 };
39
40 DWIDGET_END_NAMESPACE
41
42 DWIDGET_USE_NAMESPACE
43
44 DColoredProgressBarPrivate::DColoredProgressBarPrivate(DColoredProgressBar *q)
45 : DObjectPrivate(q)
46 {
47 }
48
49 /*!
50 * \class DColoredProgressBar
51 * \brief DColoredProgressBar is the same as QProgressBar, except it can change its appearance depending on the value displayed.
52 */
53
54 /*!
55 * \~chinese \class DColoredProgressBar::DColoredProgressBar
56 * \~chinese \brief DColoredProgressBar和QProgressBar功能差不多一样,只是它可以根据显示的值更改其外观
57 */
58 DColoredProgressBar::DColoredProgressBar(QWidget *parent)
59 : QProgressBar(parent)
60 , DObject(*new DColoredProgressBarPrivate(this))
61 {
62 }
63
64 /*!
65 * \brief DColoredProgressBar::addThreshold adds a new threshold value and specifies the brush to use once that value is reached.
66 * If a threshold of the same value already exists, it will be overwritten.
67 * \param threshold Minimum value for this brush to be used.
68 * \param brush The brush to use when the currently displayed value is no less than \threshold and less than the next threshold value.
69 */
70
71 /*!
72 * \~chinese \brief DColoredProgressBar::addThreshold 添加一个新的阈值,并指定达到该值后要使用的画笔。如果一个相同值的阈值已经存在,它将被覆盖。
73 * \~chinese \param threshold 使用此画笔的最小值。
74 * \~chinese \param brush 当前显示的值不小于 threshold且小于下一个阈值时使用的画笔。
75 */
76 void DColoredProgressBar::addThreshold(int threshold, QBrush brush)
77 {
78 D_D(DColoredProgressBar);
79 d->threshmap[threshold] = brush;
80 }
81
82 /*!
83 * \brief DColoredProgressBar::removeThreshold removes a threshold.
84 * \param threshold The threshold value to remove.
85 */
86
87 /*!
88 * \~chinese \brief DColoredProgressBar::removeThreshold 移除一个threshold
89 * \~chinese \param threshold 被移除的threshold值
90 */
91 void DColoredProgressBar::removeThreshold(int threshold)
92 {
93 D_D(DColoredProgressBar);
94 if (d->threshmap.contains(threshold)) {
95 d->threshmap.remove(threshold);
96 }
97 }
98
99 /*!
100 * \brief DColoredProgressBar::threadsholds gets all threshold values.
101 * \return A list of threshold values.
102 */
103
104 /*!
105 * \~chinese \brief DColoredProgressBar::thresholds 获取所有的thresholds值
106 * \~chinese \return 返回一个 threshold值的列表
107 */
108 QList<int> DColoredProgressBar::thresholds() const
109 {
110 D_D(const DColoredProgressBar);
111 return d->threshmap.keys();
112 }
113
114 void DColoredProgressBar::paintEvent(QPaintEvent *)
115 {
116 D_D(DColoredProgressBar);
117
118 QStylePainter painter(this);
119 QStyleOptionProgressBar styopt;
120 initStyleOption(&styopt);
121 if (d->threshmap.upperBound(value()) != d->threshmap.begin()) {
122 styopt.palette.setBrush(QPalette::ColorRole::Highlight, (--d->threshmap.upperBound(value())).value());
123 }
124
125 painter.setRenderHint(QPainter::Antialiasing);
126 painter.setPen(Qt::NoPen);
127 painter.drawRect(styopt.rect);
128
129 painter.drawControl(QStyle::ControlElement::CE_ProgressBarGroove, styopt);
130 painter.drawControl(QStyle::ControlElement::CE_ProgressBarContents, styopt);
131
132 if (styopt.textVisible && styopt.orientation == Qt::Horizontal) {
133 painter.drawControl(QStyle::ControlElement::CE_ProgressBarLabel, styopt);
134 }
135 }
0 /*
1 * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd.
2 *
3 * Author: Chris Xiong <chirs241097@gmail.com>
4 *
5 * Maintainer: Chris Xiong <chirs241097@gmail.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #include "dtkwidget_global.h"
22 #include "dobject.h"
23
24 #include <QProgressBar>
25
26 DWIDGET_BEGIN_NAMESPACE
27
28 class DColoredProgressBarPrivate;
29 class LIBDTKWIDGETSHARED_EXPORT DColoredProgressBar : public QProgressBar, public DTK_CORE_NAMESPACE::DObject
30 {
31 Q_OBJECT
32 public:
33 explicit DColoredProgressBar(QWidget *parent = nullptr);
34 void addThreshold(int threshold, QBrush brush);
35 void removeThreshold(int threshold);
36 QList<int> thresholds() const;
37
38 protected:
39 void paintEvent(QPaintEvent *) override;
40
41 private:
42 D_DECLARE_PRIVATE(DColoredProgressBar)
43 };
44
45 DWIDGET_END_NAMESPACE
0 #include "dcommandlinkbutton.h"
1 #include "dapplicationhelper.h"
2
3 #include <DStyleOption>
4 #include <DStylePainter>
5
6 DWIDGET_BEGIN_NAMESPACE
7
8 /*!
9 * \~chinese \class 一个继承于 QAbstractButton 的按钮,外形和链接很像;也可以是带有箭头的链接
10 * 常用于点击之后,跳转到另外一个窗口或者页面,比如浏览器的前进后退按钮
11 */
12
13 /*!
14 * \~chinese \brief 构造函数
15 * \~chinese \param[in] text 控件显示的文字
16 * \~chinese \param[in] parent 控件的父对象
17 */
18 DCommandLinkButton::DCommandLinkButton(const QString text, QWidget *parent)
19 : QAbstractButton(parent)
20 {
21 this->setText(text);
22 }
23
24 /*!
25 * \~chinese \brief 获取控件的矩形大小
26 * \~chinese \return 返回本的控件矩形大小
27 */
28 QSize DCommandLinkButton::sizeHint() const
29 {
30 QString text = this->text();
31 QSize size = fontMetrics().size(0, text);
32
33 return size;
34 }
35
36 /*!
37 * \~chinese \brief 初始化的一个 option 的风格,和一些基本的属性
38 * \~chinese \param [in] option 实参是一个用来初始化的(按钮控件的)风格属性
39 */
40 void DCommandLinkButton::initStyleOption(DStyleOptionButton *option) const
41 {
42 option->initFrom(this);
43
44 if (isDown())
45 option->state |= QStyle::State_Sunken;
46
47 DPalette pa = DApplicationHelper::instance()->palette(this);
48 option->palette.setBrush(DPalette::ButtonText, pa.highlight());
49 option->text = this->text();
50 }
51
52 /*!
53 * \~chinese \brief 绘画事件
54 * \~chinese \param [in] e 此处不使用
55 */
56 void DCommandLinkButton::paintEvent(QPaintEvent *e)
57 {
58 Q_UNUSED(e)
59
60 DStyleOptionButton opt;
61 initStyleOption(&opt);
62
63 DStylePainter painter(this);
64 painter.drawControl(DStyle::CE_TextButton, opt);
65 }
66
67 DWIDGET_END_NAMESPACE
0 #ifndef DCOMMANDLINKBUTTON_H
1 #define DCOMMANDLINKBUTTON_H
2
3 #include <dtkwidget_global.h>
4 #include <QAbstractButton>
5
6 DWIDGET_BEGIN_NAMESPACE
7 class DStyleOptionButton;
8
9 class DCommandLinkButton : public QAbstractButton
10 {
11 Q_OBJECT
12
13 public:
14 explicit DCommandLinkButton(const QString text, QWidget *parent = nullptr);
15
16 QSize sizeHint() const override;
17
18 protected:
19 void initStyleOption(DStyleOptionButton *option) const;
20 void paintEvent(QPaintEvent *e) override;
21 };
22
23 DWIDGET_END_NAMESPACE
24
25 #endif // DCOMMANDLINKBUTTON_H
1919 */
2020 #include "dcrumbedit.h"
2121 #include "dobject_p.h"
22 #include "DStyle"
2223
2324 #include <QAbstractTextDocumentLayout>
2425 #include <QPainter>
8990
9091 }
9192
93 /*!
94 * \~chinese \brief DCrumbTextFormat::tagColor
95 * \~chinese \return 返回标签的文字的颜色
96 */
9297 QColor DCrumbTextFormat::tagColor() const
9398 {
9499 return colorProperty(QTextFormat::UserProperty);
95100 }
96101
97102 /*!
98 * \~chinese \brief 设置标签颜色
103 * \~chinese \brief DCrumbTextFormat::setTagColor 设置标签颜色
104 * \~chinese \param color 标签的颜色
99105 */
100106 void DCrumbTextFormat::setTagColor(const QColor &color)
101107 {
102108 setProperty(QTextFormat::UserProperty, color);
103109 }
104110
111 /*!
112 * \~chinese \brief DCrumbTextFormat::text
113 * \~chinese \return 返回标签的文本内容
114 */
105115 QString DCrumbTextFormat::text() const
106116 {
107117 return stringProperty(QTextFormat::UserProperty + 1);
108118 }
109119
110120 /*!
111 * \~chinese \brief 设置文本内容(标签名称)
121 * \~chinese \brief DCrumbTextFormat::setText 设置文本内容(标签名称)
122 * \~chinese \param text 文本内容
112123 */
113124 void DCrumbTextFormat::setText(const QString &text)
114125 {
115126 setProperty(QTextFormat::UserProperty + 1, text);
116127 }
117128
129 /*!
130 * \~chinese \brief DCrumbTextFormat::textColor
131 * \~chinese \return 返回文本的颜色
132 */
118133 QColor DCrumbTextFormat::textColor() const
119134 {
120135 return colorProperty(QTextFormat::UserProperty + 2);
121136 }
122137
123138 /*!
124 * \~chinese \brief 设置文本颜色
139 * \~chinese \brief DCrumbTextFormat::setTextColor 设置文本颜色
140 * \~chinese \param color 文本的颜色
125141 */
126142 void DCrumbTextFormat::setTextColor(const QColor &color)
127143 {
128144 setProperty(QTextFormat::UserProperty + 2, color);
129145 }
130146
147 /*!
148 * \~chinese \brief DCrumbTextFormat::background
149 * \~chinese \return 返回背景画刷
150 */
131151 QBrush DCrumbTextFormat::background() const
132152 {
133153 return brushProperty(QTextFormat::UserProperty + 3);
134154 }
135155
136156 /*!
137 * \~chinese \brief 设置背景
157 * \~chinese \brief DCrumbTextFormat::setBackground 设置背景
158 * \~chinese \param background 背景画刷
138159 */
139160 void DCrumbTextFormat::setBackground(const QBrush &background)
140161 {
141162 setProperty(QTextFormat::UserProperty + 3, background);
142163 }
143164
165 /*!
166 * \~chinese \brief DCrumbTextFormat::backgroundRadius
167 * \~chinese \return 返回背景的圆角
168 */
144169 int DCrumbTextFormat::backgroundRadius() const
145170 {
146171 return intProperty(QTextFormat::UserProperty + 4);
147172 }
148173
149174 /*!
150 * \~chinese \brief 设置背景圆角程度
175 * \~chinese \brief DCrumbTextFormat::setBackgroundRadius 设置背景圆角程度
176 * \~chinese \param radius 圆角的大小
151177 */
152178 void DCrumbTextFormat::setBackgroundRadius(int radius)
153179 {
177203 : DObjectPrivate(qq)
178204 , object(new CrumbObjectInterface(qq))
179205 {
180
206 widgetTop = new QWidget(qq);
207 widgetBottom = new QWidget(qq);
208 widgetLeft = new QWidget(qq);
209 widgetRight = new QWidget(qq);
181210 }
182211
183212 void registerHandler(QAbstractTextDocumentLayout *layout)
410439 QMap<QString, DCrumbTextFormat> formats;
411440
412441 bool dualClickMakeCrumb = false;
442
443 public:
444 QWidget* widgetTop;
445 QWidget* widgetBottom;
446 QWidget* widgetLeft;
447 QWidget* widgetRight;
413448 };
414449
415450 QSizeF CrumbObjectInterface::intrinsicSize(QTextDocument *doc, int posInDocument, const QTextFormat &format)
499534 : QTextEdit(parent)
500535 , DObject(*new DCrumbEditPrivate(this))
501536 {
537 Q_D(DCrumbEdit);
538
539 viewport()->setAutoFillBackground(false);
540 setFrameShape(QFrame::NoFrame);
541
542 d->widgetTop->setFixedWidth(1);
543 d->widgetBottom->setFixedWidth(1);
544 d->widgetLeft->setFixedHeight(1);
545 d->widgetRight->setFixedHeight(1);
546
547 addScrollBarWidget(d->widgetTop, Qt::AlignTop);
548 addScrollBarWidget(d->widgetBottom, Qt::AlignBottom);
549 addScrollBarWidget(d->widgetLeft, Qt::AlignLeft);
550 addScrollBarWidget(d->widgetRight, Qt::AlignRight);
551
502552 d_func()->registerHandler(document()->documentLayout());
503553
504554 connect(document(), SIGNAL(documentLayoutChanged()),
879929 d->dualClickMakeCrumb = flag;
880930 }
881931
932 bool DCrumbEdit::event(QEvent *e)
933 {
934 D_D(DCrumbEdit);
935
936 if (e->type() == QEvent::Polish) {
937 DStyleHelper dstyle(style());
938 int frame_radius = dstyle.pixelMetric(DStyle::PM_FrameRadius, nullptr, this);
939 d->widgetTop->setFixedHeight(frame_radius);
940 d->widgetBottom->setFixedHeight(frame_radius);
941 d->widgetLeft->setFixedWidth(frame_radius);
942 d->widgetRight->setFixedWidth(frame_radius);
943 }
944
945 return QTextEdit::event(e);
946 }
947
882948 /*!\reimp */
883949 void DCrumbEdit::paintEvent(QPaintEvent *event)
884950 {
114114 void setDualClickMakeCrumb(bool flag) Q_DECL_NOEXCEPT;
115115
116116 protected:
117 bool event(QEvent *e) override;
117118 void paintEvent(QPaintEvent *event) override;
118119 void keyPressEvent(QKeyEvent *event) override;
119120 void mouseDoubleClickEvent(QMouseEvent *event) override;
1313 * You should have received a copy of the GNU General Public License
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1515 */
16
17 #include <DHorizontalLine>
1618
1719 #include <QPushButton>
1820 #include <QLabel>
2426 #include <QDesktopWidget>
2527 #include <QScreen>
2628 #include <QAction>
27 #include <QRegExp>
2829 #include <QRegularExpression>
29
30 #include <QStyle>
31 #include <QStyleFactory>
30 #include <DFontSizeManager>
3231
3332 #include "private/ddialog_p.h"
3433
35 #include "dimagebutton.h"
34 #include "ddialogclosebutton.h"
3635 #include "dialog_constants.h"
3736 #include "ddialog.h"
38 #include "dthememanager.h"
3937 #include "dboxwidget.h"
4038 #include "DAnchors"
39 #include "dtitlebar.h"
40 #include "dwarningbutton.h"
41 #include "dsuggestbutton.h"
4142
4243 DWIDGET_BEGIN_NAMESPACE
4344
44 DialogButton::DialogButton(const QString &text, QWidget *parent)
45 :QPushButton(text, parent)
46 {
47
48 }
49
50 int DialogButton::buttonType() const
51 {
52 return m_buttonType;
53 }
54
55 void DialogButton::setButtonType(int buttonType)
56 {
57 if (m_buttonType == buttonType)
58 return;
59
60 m_buttonType = buttonType;
61 Q_EMIT buttonTypeChanged(buttonType);
62 }
63
6445 DDialogPrivate::DDialogPrivate(DDialog *qq) :
65 DAbstractDialogPrivate(qq),
66 fixedStyle(Q_NULLPTR)
46 DAbstractDialogPrivate(qq)
6747 {
6848
6949 }
7353 return contentLayout;
7454 }
7555
56 static void palrtteTransparency(QWidget *widget, qint8 alphaFloat)
57 {
58 QPalette palette = widget->palette();
59 QColor color = DGuiApplicationHelper::adjustColor(palette.color(QPalette::BrightText), 0, 0, 0, 0, 0, 0, alphaFloat);
60 palette.setColor(QPalette::WindowText, color);
61 widget->setPalette(palette);
62 }
63
7664 void DDialogPrivate::init()
7765 {
7866 D_Q(DDialog);
79
80 // TopLayout
81 topLayout = new QHBoxLayout;
82 topLayout->setContentsMargins(DIALOG::ICON_LAYOUT_LEFT_MARGIN,
83 DIALOG::ICON_LAYOUT_TOP_MARGIN,
84 DIALOG::ICON_LAYOUT_RIGHT_MARGIN,
85 DIALOG::ICON_LAYOUT_BOTTOM_MARGIN);
86 topLayout->setSpacing(DIALOG::ICON_LAYOUT_SPACING);
87
88
89 // TopLayout--Icon
90 iconLabel = new QLabel;
91 iconLabel->hide();
92 iconLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
93
94 topLayout->addWidget(iconLabel);
9567
9668 // TopLayout--TextLabel
9769 titleLabel = new QLabel;
9870 titleLabel->setObjectName("TitleLabel");
71 titleLabel->setAttribute(Qt::WA_TransparentForMouseEvents);
72 titleLabel->setWordWrap(true);
73 titleLabel->setAlignment(Qt::AlignCenter);
74 titleLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
75 DFontSizeManager::instance()->bind(titleLabel, DFontSizeManager::T5, QFont::DemiBold);
76 palrtteTransparency(titleLabel, -10);
9977 titleLabel->hide();
100 titleLabel->setAttribute(Qt::WA_TransparentForMouseEvents);
10178
10279 messageLabel = new QLabel;
10380 messageLabel->setObjectName("MessageLabel");
81 messageLabel->setAttribute(Qt::WA_TransparentForMouseEvents);
82 messageLabel->setWordWrap(true);
83 messageLabel->setAlignment(Qt::AlignCenter);
84 messageLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
85 palrtteTransparency(messageLabel, -30);
10486 messageLabel->hide();
105 messageLabel->setAttribute(Qt::WA_TransparentForMouseEvents);
10687
10788 QVBoxLayout *textLayout = new QVBoxLayout;
10889 textLayout->setContentsMargins(0, 0, 0, 0);
10990 textLayout->setSpacing(5);
110 textLayout->addStretch();
111 textLayout->addWidget(titleLabel, 0, Qt::AlignLeft);
112 textLayout->addWidget(messageLabel, 0, Qt::AlignLeft);
113 textLayout->addStretch();
91 textLayout->addWidget(titleLabel);
92 textLayout->addWidget(messageLabel, 0, Qt::AlignTop);
11493
11594 // TopLayout--ContentLayout
11695 contentLayout = new QVBoxLayout;
117 contentLayout->setContentsMargins(0, 0, 0, 0);
96 contentLayout->setContentsMargins(10, 0, 10, 0);
11897 contentLayout->setSpacing(0);
11998 contentLayout->addLayout(textLayout);
12099
121 topLayout->addLayout(contentLayout);
122
123 // TopLayout--Close button
124 closeButton = new DImageButton(q);
125 closeButton->setObjectName("CloseButton");
126 closeButton->adjustSize();
127 // closeButton->setFixedSize(DIALOG::CLOSE_BUTTON_WIDTH, DIALOG::CLOSE_BUTTON_HEIGHT);
128 closeButton->setAttribute(Qt::WA_NoMousePropagation);
129
130 DAnchorsBase::setAnchor(closeButton, Qt::AnchorRight, q, Qt::AnchorRight);
100 titleBar = new DTitlebar();
101 titleBar->setIcon(icon); //设置标题icon
102 titleBar->setMenuVisible(false);
103 titleBar->setBackgroundTransparent(true);
104 titleBar->setTitle(q->windowTitle());
105
106 QObject::connect(q, &DDialog::windowTitleChanged, titleBar, &DTitlebar::setTitle);
131107
132108 QVBoxLayout *mainLayout = new QVBoxLayout;
133 mainLayout->setContentsMargins(0, 0, 0, 0);
134 mainLayout->setSpacing(0);
109 spacer = new QSpacerItem(1, 0);
135110
136111 // MainLayout--TopLayout
137 mainLayout->addLayout(topLayout);
112 mainLayout->addWidget(titleBar);
113 mainLayout->addLayout(contentLayout);
114 mainLayout->setContentsMargins(QMargins(0, 0, 0, 0));
138115
139116 // MainLayout--ButtonLayout
140117 buttonLayout = new QHBoxLayout;
141118 buttonLayout->setMargin(0);
142 buttonLayout->setSpacing(0);
143119 buttonLayout->setContentsMargins(DIALOG::BUTTON_LAYOUT_LEFT_MARGIN,
144120 DIALOG::BUTTON_LAYOUT_TOP_MARGIN,
145121 DIALOG::BUTTON_LAYOUT_RIGHT_MARGIN,
146122 DIALOG::BUTTON_LAYOUT_BOTTOM_MARGIN);
123 mainLayout->addSpacerItem(spacer);
147124 mainLayout->addLayout(buttonLayout);
148
149125
150126 QAction *button_action = new QAction(q);
151127
152128 button_action->setShortcuts(QKeySequence::InsertParagraphSeparator);
153129 button_action->setAutoRepeat(false);
154130
155 QObject::connect(closeButton, SIGNAL(clicked()), q, SLOT(close()));
156131 QObject::connect(button_action, SIGNAL(triggered(bool)), q, SLOT(_q_defaultButtonTriggered()));
157132
158133 q->setLayout(mainLayout);
167142
168143 const QScreen *screen = qApp->screens()[qApp->desktop()->screenNumber(q)];
169144
170 if(screen)
145 if (screen)
171146 return screen;
172147
173148 screen = qApp->screens()[qApp->desktop()->screenNumber(QCursor::pos())];
202177 {
203178 QString trimmed = trimTag(str);
204179 if (fm.width(trimmed) > width) {
205 QMap<int, QString> info = scanTags(str);
206 QString elided = fm.elidedText(trimmed, Qt::ElideMiddle, width);
207 int elideStart = elided.indexOf("…");
208 int elideLength = trimmed.length() - elided.length();
209 QList<int> indexes = info.keys();
210 std::sort(indexes.begin(), indexes.end());
211 for (int index : indexes) {
212 if (index <= elideStart) {
213 elided.insert(index, info[index]);
214 } else if (elideStart < index && index <= elideStart + elideLength) {
215 elided.insert(elideStart, info[index]);
216 elideStart += 1;
217 } else {
218 elided.insert(index - elideLength + 1, info[index]);
219 }
220 }
221 return elided;
180 QMap<int, QString> info = scanTags(str);
181 QString elided = fm.elidedText(trimmed, Qt::ElideMiddle, width);
182 int elideStart = elided.indexOf("…");
183 int elideLength = trimmed.length() - elided.length();
184 QList<int> indexes = info.keys();
185 std::sort(indexes.begin(), indexes.end());
186 for (int index : indexes) {
187 if (index <= elideStart) {
188 elided.insert(index, info[index]);
189 } else if (elideStart < index && index <= elideStart + elideLength) {
190 elided.insert(elideStart, info[index]);
191 elideStart += 1;
192 } else {
193 elided.insert(index - elideLength + 1, info[index]);
194 }
195 }
196 return elided;
222197 } else {
223198 return str;
224199 }
239214 }
240215 }
241216
217 void DDialogPrivate::setSpacer(int height)
218 {
219 spacer->changeSize(1, height);
220 }
221
242222 void DDialogPrivate::_q_onButtonClicked()
243223 {
244224 D_Q(DDialog);
245225
246 QAbstractButton *button = qobject_cast<QAbstractButton*>(q->sender());
247
248 if(button) {
226 QAbstractButton *button = qobject_cast<QAbstractButton *>(q->sender());
227
228 if (button) {
249229 clickedButtonIndex = buttonList.indexOf(button);
250230 q->buttonClicked(clickedButtonIndex, button->text());
251231
252 if(onButtonClickedClose)
232 if (onButtonClickedClose)
253233 q->done(clickedButtonIndex);
254234 }
255235 }
258238 {
259239 D_QC(DDialog);
260240
261 QAbstractButton *button = qobject_cast<QAbstractButton*>(q->focusWidget());
241 QAbstractButton *button = qobject_cast<QAbstractButton *>(q->focusWidget());
262242
263243 if (button)
264244 button->click();
310290 DDialog::DDialog(QWidget *parent) :
311291 DAbstractDialog(*new DDialogPrivate(this), parent)
312292 {
313 DThemeManager::registerWidget(this);
314
315293 d_func()->init();
316294 }
317295
325303 DDialog::DDialog(const QString &title, const QString &message, QWidget *parent) :
326304 DAbstractDialog(*new DDialogPrivate(this), parent)
327305 {
328 DThemeManager::registerWidget(this);
329
330306 d_func()->init();
331307
332308 setTitle(title);
344320 {
345321 int i = -1;
346322
347 for(const QAbstractButton *button : getButtons()) {
323 for (const QAbstractButton *button : getButtons()) {
348324 ++i;
349325
350 if(button->text() == text)
326 if (button->text() == text)
351327 return i;
352328 }
353329
377353 /*!
378354 * \~chinese \brief 获得对话框的按钮列表
379355 */
380 QList<QAbstractButton*> DDialog::getButtons() const
356 QList<QAbstractButton *> DDialog::getButtons() const
381357 {
382358 D_DC(DDialog);
383359
407383 return d->buttonList.at(index);
408384 }
409385
386 /*!
387 * \~chinese \brief DDialog::getContent 获取指定下标对应的内容控件
388 * \~chinese \param index 控件下标
389 * \~chinese \return 返回对应的内容控件
390 */
410391 QWidget *DDialog::getContent(int index) const
411392 {
412393 D_DC(DDialog);
414395 return d->contentList.at(index);
415396 }
416397
398 /*!
399 * \~chinese \brief DDialog::title
400 * \~chinese \return 返回对话框的标题内容
401 */
417402 QString DDialog::title() const
418403 {
419404 D_DC(DDialog);
421406 return d->title;
422407 }
423408
409 /*!
410 * \~chinese \brief DDialog::message
411 * \~chinese \return 返回对话框的显示信息
412 */
424413 QString DDialog::message() const
425414 {
426415 D_DC(DDialog);
428417 return d->message;
429418 }
430419
420 /*!
421 * \~chinese \brief DDialog::icon
422 * \~chinese \return 返回对话框的icon
423 */
431424 QIcon DDialog::icon() const
432425 {
433426 D_DC(DDialog);
435428 return d->icon;
436429 }
437430
431 /*!
432 * \~chinese \brief DDialog::iconPixmap
433 * \~chinese \return 返回ICON的pixmap
434 */
438435 QPixmap DDialog::iconPixmap() const
439436 {
440437 D_DC(DDialog);
441438
442 return *d->iconLabel->pixmap();
443 }
444
439 if (d->icon.isNull()) {
440 return QPixmap();
441 } else {
442 return d->icon.pixmap(d->icon.availableSizes().at(0));
443 }
444 }
445
446 /*!
447 * \~chinese \brief DDialog::textFormat
448 * \~chinese \return 返回设定的文本格式
449 */
445450 Qt::TextFormat DDialog::textFormat() const
446451 {
447452 D_DC(DDialog);
459464 return d->onButtonClickedClose;
460465 }
461466
467 /*!
468 * \~chinese \brief DDialog::setContentLayoutContentsMargins 设定内容布局的内容margin
469 * \~chinese \param margins 具体的margins
470 */
462471 void DDialog::setContentLayoutContentsMargins(const QMargins &margins)
463472 {
464473 D_D(DDialog);
465474
466 d->topLayout->setContentsMargins(margins);
467 }
468
475 d->contentLayout->setContentsMargins(margins);
476 }
477
478 /*!
479 * \~chinese \brief DDialog::contentLayoutContentsMargins
480 * \~chinese \return 返回内容布局的内容margin
481 */
469482 QMargins DDialog::contentLayoutContentsMargins() const
470483 {
471484 D_DC(DDialog);
472485
473 return d->topLayout->contentsMargins();
486 return d->contentLayout->contentsMargins();
487 }
488
489 /*!
490 * \~chinese \brief DDialog::closeButtonVisible
491 * \~chinese \return 返回关闭按钮是否可见的bool值
492 */
493 bool DDialog::closeButtonVisible() const
494 {
495 return windowFlags().testFlag(Qt::WindowCloseButtonHint);
474496 }
475497
476498 /*!
517539 */
518540 void DDialog::insertButton(int index, const QString &text, bool isDefault, ButtonType type)
519541 {
520 DialogButton *button = new DialogButton(text);
542 QAbstractButton *button;
543
544 switch (type) {
545 case ButtonWarning:
546 button = new DWarningButton(this);
547 break;
548 case ButtonRecommend:
549 button = new DSuggestButton(this);
550 break;
551 default:
552 button = new QPushButton(this);
553 break;
554 }
555
556 button->setText(text);
521557 button->setObjectName("ActionButton");
522 button->setButtonType(type);
523558 button->setAttribute(Qt::WA_NoMousePropagation);
524 button->setFixedHeight(DIALOG::BUTTON_HEIGHT);
525559
526560 insertButton(index, button, isDefault);
527561 }
537571 {
538572 D_D(DDialog);
539573
540 QLabel* label = new QLabel;
541 label->setObjectName("VLine");
542 label->setFixedWidth(1);
543 label->hide();
544
545 if (index > 0 && index >= buttonCount()) {
546 QLabel *label = qobject_cast<QLabel*>(d->buttonLayout->itemAt(d->buttonLayout->count() - 1)->widget());
547 if(label)
548 label->show();
549 }
550
551 d->buttonLayout->insertWidget(index * 2, button);
574 DVerticalLine *line = new DVerticalLine;
575 line->setObjectName("VLine");
576 line->setFixedHeight(30);
577
578 d->buttonLayout->insertWidget(index * 2 , line);
579 d->buttonLayout->insertWidget(index * 2 + 1, button);
552580 d->buttonList << button;
553 d->buttonLayout->insertWidget(index * 2 + 1, label);
581 if (d->buttonList.count() == 1) {
582 int spacing = DStyleHelper(style()).pixelMetric(DStyle::PM_ContentsSpacing);
583 d->setSpacer(spacing);
584 }
585 line->show();
586 d->buttonLayout->itemAt(0)->widget()->hide();
554587
555588 connect(button, SIGNAL(clicked(bool)), this, SLOT(_q_onButtonClicked()));
556589
585618 */
586619 void DDialog::insertButtons(int index, const QStringList &text)
587620 {
588 for(int i = 0; i < text.count(); ++i) {
621 for (int i = 0; i < text.count(); ++i) {
589622 insertButton(index + i, text[i]);
590623 }
591624 }
599632 {
600633 D_D(DDialog);
601634
602 QLabel *label = qobject_cast<QLabel*>(d->buttonLayout->itemAt(index * 2 + 1)->widget());
603 QAbstractButton * button = qobject_cast<QAbstractButton*>(d->buttonLayout->itemAt(index * 2)->widget());
604
605 if(label) {
635 DVerticalLine *label = qobject_cast<DVerticalLine *>(d->buttonLayout->itemAt(index * 2 + 1)->widget());
636 QAbstractButton *button = qobject_cast<QAbstractButton *>(d->buttonLayout->itemAt(index * 2)->widget());
637
638 if (label) {
606639 d->buttonLayout->removeWidget(label);
607640 label->deleteLater();
608641 }
609642
610 if(button) {
643 if (button) {
611644 d->buttonLayout->removeWidget(button);
612645 button->deleteLater();
613646 }
614647
615 if(index > 0 && index == buttonCount() - 1) {
616 QLabel *label = qobject_cast<QLabel*>(d->buttonLayout->itemAt(d->buttonLayout->count() - 1)->widget());
617
618 if(label)
648 if (index > 0 && index == buttonCount() - 1) {
649 DVerticalLine *label = qobject_cast<DVerticalLine *>(d->buttonLayout->itemAt(d->buttonLayout->count() - 1)->widget());
650
651 if (label)
619652 label->hide();
620653 }
621654
622655 d->buttonList.removeAt(index);
656
657 if (d->buttonList.isEmpty()) {
658 d->setSpacer(0);
659 }
623660 }
624661
625662 /*!
641678 {
642679 int index = getButtonIndexByText(text);
643680
644 if(index >= 0)
681 if (index >= 0)
645682 removeButton(index);
646683 }
647684
653690 D_D(DDialog);
654691
655692 d->buttonList.clear();
656
657 while(d->buttonLayout->count()) {
693 d->setSpacer(0);
694
695 while (d->buttonLayout->count()) {
658696 QLayoutItem *item = d->buttonLayout->takeAt(0);
659697
660698 item->widget()->deleteLater();
671709 */
672710 bool DDialog::setDefaultButton(int index)
673711 {
674 if(index < 0)
712 if (index < 0)
675713 return false;
676714
677715 setDefaultButton(getButton(index));
732770 D_D(DDialog);
733771
734772 d->contentLayout->insertWidget(index + DIALOG::CONTENT_INSERT_OFFSET,
735 widget, 0, alignment);
773 widget, 0, alignment);
736774 d->contentList << widget;
737775 }
738776
748786
749787 d->contentLayout->removeWidget(widget);
750788
751 if(isDelete)
789 if (isDelete)
752790 widget->deleteLater();
753791
754792 d->contentList.removeOne(widget);
763801 {
764802 D_D(DDialog);
765803
766 for(QWidget *widget : d->contentList)
804 for (QWidget *widget : d->contentList)
767805 d->contentLayout->removeWidget(widget);
768806
769 if(isDelete) {
807 if (isDelete) {
770808 qDeleteAll(d->contentList);
771809 }
772810
824862 {
825863 D_D(DDialog);
826864
827 for(int i = 0; i < d->contentLayout->count(); ++i) {
865 for (int i = 0; i < d->contentLayout->count(); ++i) {
828866 QLayoutItem *item = d->contentLayout->itemAt(i);
829867
830 if(item->spacerItem()) {
868 if (item->spacerItem()) {
831869 delete d->contentLayout->takeAt(i);
832870 }
833871 }
876914 }
877915
878916 /*!
917 * \~chinese \brief DDialog::setWordWrapTitle 设定标题Label内容是否可截断换行
918 * \~chinese \param wordWrap true可换行 false不可以换行
919 */
920 void DDialog::setWordWrapTitle(bool wordWrap)
921 {
922 D_D(DDialog);
923 d->titleLabel->setWordWrap(wordWrap);
924 }
925
926 /*!
879927 * \~chinese \brief 设置对话框消息内容
880928 */
881929 void DDialog::setMessage(const QString &message)
892940 Q_EMIT messageChanged(message);
893941 }
894942
943 void DDialog::setWordWrapMessage(bool wordWrap)
944 {
945 D_D(DDialog);
946 d->messageLabel->setWordWrap(wordWrap);
947 }
948
895949 /*!
896950 * \~chinese \brief 设置对话框图标
897951 *
904958
905959 d->icon = icon;
906960
907 if(!icon.isNull()) {
908 auto size = QSize(64, 64);
909 size = icon.availableSizes().value(0, size);
910 auto pixmap = icon.pixmap(size);
911 setIconPixmap(pixmap);
961 if (!icon.isNull()) {
962 d->titleBar->setIcon(d->icon);
912963 }
913964 }
914965
937988 */
938989 void DDialog::setIconPixmap(const QPixmap &iconPixmap)
939990 {
940 D_D(DDialog);
941
942 d->iconLabel->setPixmap(iconPixmap);
943 if(iconPixmap.isNull()) {
944 d->iconLabel->hide();
945 } else {
946 d->iconLabel->show();
947 }
991 setIcon(QIcon(iconPixmap));
948992 }
949993
950994 /*!
9941038 return d->clickedButtonIndex >= 0 ? d->clickedButtonIndex : code;
9951039 }
9961040
1041 void DDialog::setCloseButtonVisible(bool closeButtonVisible)
1042 {
1043 bool visible = isVisible();
1044 // This function calls setParent() when changing the flags for a window, causing the widget to be hidden.
1045 setWindowFlag(Qt::WindowCloseButtonHint, closeButtonVisible);
1046 // So we need call show() or so to make the widget visible again.
1047 this->setVisible(visible);
1048 }
1049
9971050 DDialog::DDialog(DDialogPrivate &dd, QWidget *parent) :
9981051 DAbstractDialog(dd, parent)
9991052 {
1000 DThemeManager::registerWidget(this);
1001
10021053 d_func()->init();
10031054 }
10041055
10421093 D_D(DDialog);
10431094
10441095 if (event->added()) {
1045 if (d->closeButton) {
1046 d->closeButton->raise();
1096 if (d->titleBar) {
1097 d->titleBar->raise();
10471098 }
1048
1049 QStyle *style = d->fixedStyle;
1050 if (!style) {
1051 style = QStyleFactory::create("dlight");
1052 if (style) {
1053 d->fixedStyle = style;
1054 style->setParent(this);
1055 }
1056 }
1057
1058
1059 QWidget *child = qobject_cast<QWidget*>(event->child());
1060 if (child) {
1061 if (style) {
1062 child->setStyle(style);
1063 }
1064
1065 // TODO(hualet): apply the rule to all dwidgets.
1066 // Just tried with no luck, DPsswordWidget's style goes wrong,
1067 // no time to deal with this detail, leave it alone for now.
1068 if (child->inherits("Dtk::Widget::DLineEdit")) {
1069 DThemeManager *dtm = DThemeManager::instance();
1070 // NOTE(sbw): want to force reset to light theme.
1071 // FIXME(zccrs): fixation the DLineEdit widget theme to light.
1072 dtm->setTheme(child, "light");
1073 }
1074 }
10751099 }
10761100 }
10771101
10781102 void DDialog::resizeEvent(QResizeEvent *event)
10791103 {
1080 DAbstractDialog::resizeEvent(event);
1081
1082 D_D(DDialog);
1083
1084
1085 d->titleLabel->setWordWrap(false);
1086 int labelMaxWidth = maximumWidth() - d->closeButton->width() - d->titleLabel->x();
1087
1088 if (d->titleLabel->sizeHint().width() > labelMaxWidth) {
1089 d->titleLabel->setFixedWidth(labelMaxWidth);
1090 d->titleLabel->setWordWrap(true);
1091 d->titleLabel->setFixedHeight(d->titleLabel->sizeHint().height());
1092 }
1093
1094 d->messageLabel->setWordWrap(false);
1095 labelMaxWidth = maximumWidth() - d->closeButton->width() - d->messageLabel->x();
1096
1097 if (d->messageLabel->sizeHint().width() > labelMaxWidth) {
1098 d->messageLabel->setFixedWidth(labelMaxWidth);
1099 d->messageLabel->setWordWrap(true);
1100 d->messageLabel->setFixedHeight(d->messageLabel->sizeHint().height());
1101 }
1104 return DAbstractDialog::resizeEvent(event);
11021105 }
11031106
11041107 DWIDGET_END_NAMESPACE
3737 Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged)
3838 Q_PROPERTY(QString message READ message WRITE setMessage NOTIFY messageChanged)
3939 Q_PROPERTY(QIcon icon READ icon WRITE setIcon)
40 Q_PROPERTY(QPixmap iconPixmap READ iconPixmap WRITE setIconPixmap)
4140 Q_PROPERTY(Qt::TextFormat textFormat READ textFormat WRITE setTextFormat NOTIFY textFormatChanged)
4241 Q_PROPERTY(bool onButtonClickedClose READ onButtonClickedClose WRITE setOnButtonClickedClose)
42 Q_PROPERTY(bool closeButtonVisible READ closeButtonVisible WRITE setCloseButtonVisible)
4343
4444 public:
4545 enum ButtonType {
4848 ButtonRecommend
4949 };
5050
51 explicit DDialog(QWidget *parent = 0);
51 explicit DDialog(QWidget *parent = nullptr);
5252 explicit DDialog(const QString &title, const QString& message, QWidget *parent = 0);
5353
5454 int getButtonIndexByText(const QString &text) const;
6161 QString title() const;
6262 QString message() const;
6363 QIcon icon() const;
64 QPixmap iconPixmap() const;
64 D_DECL_DEPRECATED QPixmap iconPixmap() const;
6565 Qt::TextFormat textFormat() const;
6666 bool onButtonClickedClose() const;
6767
6868 void setContentLayoutContentsMargins(const QMargins &margins);
6969 QMargins contentLayoutContentsMargins() const;
70
71 bool closeButtonVisible() const;
7072
7173 Q_SIGNALS:
7274 void aboutToClose();
102104 void setButtonText(int index, const QString &text);
103105 void setButtonIcon(int index, const QIcon &icon);
104106 void setTitle(const QString &title);
107 void setWordWrapTitle(bool wordWrap);
105108 void setMessage(const QString& message);
106 Q_DECL_DEPRECATED void setIcon(const QIcon &icon);
107 void setIcon(const QIcon &icon, const QSize &expectedSize);
108 void setIconPixmap(const QPixmap &iconPixmap);
109 void setWordWrapMessage(bool wordWrap);
110 void setIcon(const QIcon &icon);
111 D_DECL_DEPRECATED void setIcon(const QIcon &icon, const QSize &expectedSize);
112 D_DECL_DEPRECATED void setIconPixmap(const QPixmap &iconPixmap);
109113 void setTextFormat(Qt::TextFormat textFormat);
110114 void setOnButtonClickedClose(bool onButtonClickedClose);
115 void setCloseButtonVisible(bool closeButtonVisible);
111116
112117 int exec() Q_DECL_OVERRIDE;
113118
118123 void hideEvent(QHideEvent *event) Q_DECL_OVERRIDE;
119124 void closeEvent(QCloseEvent *event) override;
120125 void childEvent(QChildEvent *event) Q_DECL_OVERRIDE;
121 void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
126 void resizeEvent(QResizeEvent *event) override;
122127
123128 private:
124129 D_DECLARE_PRIVATE(DDialog)
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #include "ddialogclosebutton.h"
21
22 DWIDGET_BEGIN_NAMESPACE
23
24 /*!
25 * \~chinese \brief DDialogCloseButton::DDialogCloseButton 实现一个带有关闭按钮的button
26 * \~chinese \param parent
27 */
28 DDialogCloseButton::DDialogCloseButton(QWidget *parent)
29 : DIconButton(DStyle::SP_CloseButton, parent)
30 {
31 setFlat(true);
32 setIconSize(QSize(20, 20));
33 }
34
35 DWIDGET_END_NAMESPACE
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #ifndef DDIALOGCLOSEBUTTON_H
21 #define DDIALOGCLOSEBUTTON_H
22
23 #include <DIconButton>
24
25 DWIDGET_BEGIN_NAMESPACE
26
27 class DDialogCloseButton : public DIconButton
28 {
29 Q_OBJECT
30 public:
31 explicit DDialogCloseButton(QWidget *parent = nullptr);
32 };
33
34 DWIDGET_END_NAMESPACE
35
36 #endif // DDIALOGCLOSEBUTTON_H
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #include "ddrawer.h"
21 #include "dboxwidget.h"
22 #include "private/ddrawer_p.h"
23
24 #include <QPropertyAnimation>
25 #include <QResizeEvent>
26
27 DWIDGET_BEGIN_NAMESPACE
28
29 class ContentBox : public QWidget
30 {
31 Q_OBJECT
32 Q_PROPERTY(int height READ height WRITE setFixedHeight)
33 public:
34 explicit ContentBox(QWidget *parent = nullptr) : QWidget(parent){}
35 };
36
37 DDrawerPrivate::DDrawerPrivate(DDrawer *qq)
38 : DFramePrivate(qq)
39 {
40
41 }
42
43 DDrawerPrivate::~DDrawerPrivate()
44 {
45 }
46
47 void DDrawerPrivate::init()
48 {
49 DDrawer *qq = q_func();
50 QVBoxLayout *mainLayout = new QVBoxLayout(qq);
51 mainLayout->setContentsMargins(0, 0, 0, 0);
52 mainLayout->setSpacing(0);
53
54 m_headerLayout = new QVBoxLayout();
55 m_headerLayout->setContentsMargins(0, 0, 0, 0);
56 m_headerLayout->setAlignment(Qt::AlignCenter);
57
58 m_hSeparator = new DHorizontalLine();
59 m_bottom_separator = new DHorizontalLine;
60 m_bottom_separator->hide();
61
62 qq->connect(qq, &DDrawer::expandChange, m_bottom_separator, &QWidget::setVisible);
63
64 m_contentLoader = new ContentBox();
65 m_contentLoader->setFixedHeight(0); // default to not expanded.
66
67 m_boxWidget = new DVBoxWidget;
68 m_contentLayout = m_boxWidget->layout();
69
70 QVBoxLayout *layout_contentLoader = new QVBoxLayout(m_contentLoader);
71
72 layout_contentLoader->setMargin(0);
73 layout_contentLoader->setSpacing(0);
74 layout_contentLoader->addWidget(m_boxWidget);
75 layout_contentLoader->addStretch();
76
77 m_animation = new QPropertyAnimation(m_contentLoader, "height", qq);
78 m_animation->setDuration(200);
79 m_animation->setEasingCurve(QEasingCurve::InSine);
80 qq->connect(m_animation, &QPropertyAnimation::valueChanged, qq, [qq] {
81 qq->setFixedHeight(qq->sizeHint().height());
82 });
83
84
85 m_hSeparator->setFrameStyle(QFrame::NoFrame);
86 m_bottom_separator->setFrameStyle(QFrame::NoFrame);
87
88 mainLayout->addLayout(m_headerLayout);
89 mainLayout->addWidget(m_hSeparator);
90 mainLayout->addWidget(m_contentLoader);
91 mainLayout->addWidget(m_bottom_separator);
92
93 qq->setLayout(mainLayout);
94
95 qq->connect(m_boxWidget, &DBoxWidget::sizeChanged, qq, [this] {
96 if (m_expand) {
97 int endHeight = 0;
98 endHeight = m_boxWidget->height();
99
100 m_animation->setStartValue(m_contentLoader->height());
101 m_animation->setEndValue(endHeight);
102 m_animation->stop();
103 m_animation->start();
104 }
105 });
106 }
107
108 /*!
109 * \~chinese \class DDrawer
110 * \~chinese \brief 一个美观的可展开的控件
111 *
112 * \~chinese 使用 DDrawer 类可以创建一个可展开的带有展开动画效果的控件,这个控件包含上下两部分,上面的控件为标题控件,这个控件会始终显示,下面的控件为内容控件,默认为不会显示,调用 DDrawer::setExpand 设置内容控件的可见性。使用 DDrawer::setHeader 和 DDrawer::setContent 设置分别设置标题控件和内容控件。
113 *
114 * \~chinese \sa DHeaderLine
115 *
116 * \~chinese \image html DDrawer.gif
117 */
118
119 /**
120 * \~chinese \fn DDrawer::expandChange
121 * \~chinese \brief 内容控件可见性发生改变的信号
122 * \~chinese \param e 为 true 表示内容控件变为了可见,反之则反
123 */
124
125 /*!
126 * \~chinese \brief 获取 DDrawer::DDrawer 实例
127 * \~chinese \param parent 作为实例的父控件
128 */
129 DDrawer::DDrawer(QWidget *parent)
130 : DDrawer(*new DDrawerPrivate(this), parent)
131 {
132
133 }
134
135 DDrawer::~DDrawer()
136 {
137
138 }
139
140 /**
141 * \~chinese \brief 设置标题控件
142 * \~chinese 标题控件会始终显示在布局里
143 * \~chinese \param header 标题控件
144 */
145 void DDrawer::setHeader(QWidget *header)
146 {
147 Q_D(DDrawer);
148 if (!header) {
149 return;
150 }
151
152 QLayoutItem *child;
153 while ((child = d->m_headerLayout->takeAt(0)) != nullptr) {
154 delete child;
155 }
156
157 d->m_headerLayout->addWidget(header);
158 d->m_header = header;
159 }
160
161 /**
162 * \~chinese \property DDrawer::getContent
163 * \~chinese \brief 获取内容控件对象
164 * \~chinese \return 内容控件对象
165 */
166
167 /**
168 * \~chinese \brief 设置内容控件
169 * \~chinese 内容控件默认是隐藏的,调用 DDrawer::setExpand 设置其可见性
170 * \~chinese \param content 内容控件
171 * \~chinese \param alignment 内容控件在布局中的对齐方式
172 */
173 void DDrawer::setContent(QWidget *content, Qt::Alignment alignment)
174 {
175 Q_D(DDrawer);
176
177 if (!content) {
178 return;
179 }
180
181 QLayoutItem *child;
182 while ((child = d->m_contentLayout->takeAt(0)) != nullptr) {
183 delete child;
184 }
185
186 d->m_contentLayout->addWidget(content, 1, alignment);
187 d->m_contentLayout->addStretch(1);
188 d->m_content = content;
189 }
190
191 QWidget *DDrawer::getContent() const
192 {
193 Q_D(const DDrawer);
194
195 return d->m_content;
196 }
197
198 /**
199 * \~chinese \brief 设置标题控件的高度
200 * \~chinese
201 * \~chinese \param height 指定的高度
202 */
203 void DDrawer::setHeaderHeight(int height)
204 {
205 Q_D(DDrawer);
206
207 if (d->m_header) {
208 d->m_header->setFixedHeight(height);
209 }
210 }
211
212 /**
213 * \~chinese \brief 设置内容控件的可见性
214 * \~chinese
215 * \~chinese \param value 为 true 则内容控件可见,反之则反
216 */
217 void DDrawer::setExpand(bool value)
218 {
219 Q_D(DDrawer);
220
221 if (d->m_expand == value) {
222 return;
223 }
224
225 d->m_expand = value;
226 Q_EMIT expandChange(value);
227
228 if (value) {
229 d->m_animation->setStartValue(0);
230 d->m_animation->setEndValue(d->m_boxWidget->height());
231 } else {
232 d->m_animation->setStartValue(d->m_boxWidget->height());
233 d->m_animation->setEndValue(0);
234 }
235
236 d->m_animation->stop();
237 d->m_animation->start();
238 }
239
240 /**
241 * \~chinese \brief 获取当前内容控件的可见性
242 * \~chinese
243 * \~chinese \return 当前内容控件的可见性
244 */
245 bool DDrawer::expand() const
246 {
247 Q_D(const DDrawer);
248 return d->m_expand;
249 }
250
251 /**
252 * \~chinese \brief 设置内容控件的可见性改变时动画的时间
253 * \~chinese
254 * \~chinese \param duration 指定动画时间
255 */
256 void DDrawer::setAnimationDuration(int duration)
257 {
258 Q_D(DDrawer);
259 d->m_animation->setDuration(duration);
260 }
261
262 /**
263 * \~chinese \brief 设置内容控件的可见性改变时动画的样式
264 * \~chinese
265 * \~chinese \param curve 指定动画样式
266 */
267 void DDrawer::setAnimationEasingCurve(QEasingCurve curve)
268 {
269 Q_D(DDrawer);
270 d->m_animation->setEasingCurve(curve);
271 }
272
273 /**
274 * \~chinese \brief 设置是否允许标题控件与内容控件之间的分割线
275 * \~chinese
276 * \~chinese \param arg 为 ture 则显示分割线,反之则反
277 */
278 void DDrawer::setSeparatorVisible(bool arg)
279 {
280 Q_D(DDrawer);
281 d->m_hSeparator->setVisible(arg);
282 }
283
284 /**
285 * \~chinese \brief 设置是否允许内容控件下的分割线
286 * \~chinese
287 * \~chinese \param arg 为 ture 则显示分割线,反之则反
288 */
289 void DDrawer::setExpandedSeparatorVisible(bool arg)
290 {
291 Q_D(DDrawer);
292
293 if (arg) {
294 connect(this, &DDrawer::expandChange, d->m_bottom_separator, &QWidget::setVisible);
295 d->m_bottom_separator->show();
296 } else {
297 disconnect(this, &DDrawer::expandChange, d->m_bottom_separator, &QWidget::setVisible);
298 d->m_bottom_separator->hide();
299 }
300 }
301
302 DDrawer::DDrawer(DDrawerPrivate &dd, QWidget *parent)
303 : DFrame(dd, parent)
304 {
305 dd.init();
306 }
307
308 void DDrawer::resizeEvent(QResizeEvent *e)
309 {
310 Q_D(DDrawer);
311
312 if (d->m_content) {
313 d->m_content->setFixedWidth(e->size().width());
314 }
315 DFrame::resizeEvent(e);
316 }
317
318 DWIDGET_END_NAMESPACE
319
320 #include "ddrawer.moc"
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #ifndef DDRAWER_H
21 #define DDRAWER_H
22
23 #include <DFrame>
24
25 DWIDGET_BEGIN_NAMESPACE
26 class DDrawerPrivate;
27 class LIBDTKWIDGETSHARED_EXPORT DDrawer : public DFrame
28 {
29 Q_OBJECT
30 D_DECLARE_PRIVATE(DDrawer)
31
32 public:
33 explicit DDrawer(QWidget *parent = nullptr);
34 ~DDrawer() override;
35
36 void setHeader(QWidget *header);
37 void setContent(QWidget *content, Qt::Alignment alignment = Qt::AlignHCenter);
38 QWidget *getContent() const;
39 void setHeaderHeight(int height);
40 virtual void setExpand(bool value);
41 bool expand() const;
42 void setAnimationDuration(int duration);
43 void setAnimationEasingCurve(QEasingCurve curve);
44 void setSeparatorVisible(bool arg);
45 void setExpandedSeparatorVisible(bool arg);
46
47 Q_SIGNALS:
48 void expandChange(bool e);
49 void sizeChanged(QSize s);
50
51 protected:
52 DDrawer(DDrawerPrivate &dd, QWidget *parent = nullptr);
53 void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE;
54 };
55
56 DWIDGET_END_NAMESPACE
57
58 #endif // DDRAWER_H
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #include "ddrawergroup.h"
21 #include "ddrawer.h"
22
23 #include <DObjectPrivate>
24
25 DWIDGET_BEGIN_NAMESPACE
26
27 class DDrawerGroupPrivate : public DCORE_NAMESPACE::DObjectPrivate
28 {
29 public:
30 DDrawerGroupPrivate(DDrawerGroup *qq)
31 : DObjectPrivate(qq)
32 {
33
34 }
35
36 QMap<int, DDrawer *> expandMap;
37 QMap<int, DDrawer *> checkedMap;
38
39 D_DECLARE_PUBLIC(DDrawerGroup)
40 };
41
42 /**
43 * \~chinese \class DDrawerGroup
44 * \~chinese \brief 封装了一组 DDrawer 控件(当然也可以是其子类), 并保证同一时间只有一个 DDrawer 处于展开状态
45
46 * \~chinese DDrawerGroup 顾名思义是用来管理一组 DDrawer 控件的,提供了简单的新增,获取,移除的方法,用于统一管理多个 DDrawer 对象的展开和收起状态,
47 * \~chinese DDrawerGroup 会保证在同一时间只有一个 DDrawer 控件处于展开状态, 也就是说如果点击展开了组里的一个控件, DDrawerGroup 会将组里其他控件设置为收起状态。
48 * \note 请注意,DDrawerGroup 并不是控件, 只需要将需要管理的 DDrawer 添加进来即可
49 */
50
51 /**
52 * \~chinese \brief 获取类实例
53 * \~chinese
54 * \~chinese \param parent 作为实例的父对象
55 */
56 DDrawerGroup::DDrawerGroup(QObject *parent)
57 : QObject(parent)
58 , DCORE_NAMESPACE::DObject(*new DDrawerGroupPrivate(this))
59 {
60
61 }
62
63 /**
64 * \~chinese \brief 获取所有正在管理的控件
65 * \~chinese
66 * \~chinese \return 控件组成的列表
67 */
68 QList<DDrawer *> DDrawerGroup::expands() const
69 {
70 D_DC(DDrawerGroup);
71 return d->expandMap.values();
72 }
73
74 /**
75 * \~chinese \brief 获取处于已展开状态的 DDrawer 对象
76 * \~chinese
77 * \~chinese \return 已展开状态的控件, 若没有已展开的控件则返回 NULL
78 */
79 DDrawer *DDrawerGroup::checkedExpand() const
80 {
81 D_DC(DDrawerGroup);
82 if (d->checkedMap.isEmpty())
83 return NULL;
84 else
85 return d->checkedMap.first();
86 }
87
88 /**
89 * \~chinese \brief 获取指定 id 对应的控件
90 * \~chinese
91 * \~chinese \param id 增加控件时指定的的id
92 * \~chinese
93 * \~chinese \return 根据 id 找到的控件
94 */
95 DDrawer *DDrawerGroup::expand(int id) const
96 {
97 D_DC(DDrawerGroup);
98 return d->expandMap.value(id);
99 }
100
101 /**
102 * \~chinese \brief 增加一个控件
103 * \~chinese
104 * \~chinese \param expand 要新增的控件对象
105 * \~chinese \param id 为要新增的控件对象指定id,id 应该是唯一值,如果没有给定 id ,则使用已有列表中最大的id自加1后的值
106 */
107 void DDrawerGroup::addExpand(DDrawer *expand, int id)
108 {
109 D_D(DDrawerGroup);
110 if (d->expandMap.values().indexOf(expand) == -1){
111 if (id == -1){
112 int maxId = -1;
113 Q_FOREACH (int tmp, d->expandMap.keys()) {
114 maxId = qMax(tmp, maxId);
115 }
116
117 id = maxId + 1;
118 }
119 d->expandMap.insert(id, expand);
120
121 connect(expand, &DDrawer::expandChange, this, &DDrawerGroup::onExpandChanged);
122 }
123 }
124
125 /**
126 * \~chinese \brief 设置指定控件的id
127 * \~chinese
128 * \~chinese \param expand 要设置id的控件
129 * \~chinese \param id 要设置的id
130 */
131 void DDrawerGroup::setId(DDrawer *expand, int id)
132 {
133 D_D(DDrawerGroup);
134 int index = d->expandMap.values().indexOf(expand);
135 if (index != -1){
136 d->expandMap.remove(d->expandMap.keys().at(index));
137 addExpand(expand, id);
138 }
139 }
140
141 /**
142 * \~chinese \brief 移除一个控件
143 * \~chinese
144 * \~chinese \param expand 要移除的控件对象
145 */
146 void DDrawerGroup::removeExpand(DDrawer *expand)
147 {
148 D_D(DDrawerGroup);
149 int index = d->expandMap.values().indexOf(expand);
150 d->expandMap.remove(d->expandMap.keys().at(index));
151 }
152
153 /**
154 * \~chinese \brief 返回处于已展开状态控件的 id
155 * \~chinese
156 * \~chinese \return 如果当前没有处于展开状态的控件则返回 -1
157 */
158 int DDrawerGroup::checkedId() const
159 {
160 D_DC(DDrawerGroup);
161 if (d->checkedMap.isEmpty())
162 return -1;
163 else
164 return d->checkedMap.firstKey();
165 }
166
167 /**
168 * \~chinese \brief 获取指定控件的 id
169 * \~chinese
170 * \~chinese \param expand 指定控件对象
171 * \~chinese
172 * \~chinese \return 指定控件对象的 id
173 */
174 int DDrawerGroup::id(DDrawer *expand) const
175 {
176 D_DC(DDrawerGroup);
177 return d->expandMap.keys().at(d->expandMap.values().indexOf(expand));
178 }
179
180 void DDrawerGroup::onExpandChanged(bool v)
181 {
182 D_D(DDrawerGroup);
183 DDrawer *dSender = qobject_cast<DDrawer *>(sender());
184 if (!dSender || dSender == checkedExpand() || !v)
185 return;
186
187 d->checkedMap.clear();
188 int checkedIndex = d->expandMap.values().indexOf(dSender);
189 d->checkedMap.insert(d->expandMap.keys().at(checkedIndex), dSender);
190
191 QList<DDrawer *> expandList = d->expandMap.values();
192 for (int i = 0; i < expandList.count(); i ++){
193 DDrawer *target = expandList.at(i);
194 if (target != dSender && target->expand())
195 target->setExpand(false);
196 }
197 }
198
199 DWIDGET_END_NAMESPACE
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #ifndef DDRAWERGROUP_H
21 #define DDRAWERGROUP_H
22
23 #include <dtkwidget_global.h>
24 #include <DObject>
25
26 DWIDGET_BEGIN_NAMESPACE
27
28 class DDrawer;
29 class DDrawerGroupPrivate;
30 class LIBDTKWIDGETSHARED_EXPORT DDrawerGroup : public QObject, public DCORE_NAMESPACE::DObject
31 {
32 Q_OBJECT
33 D_DECLARE_PRIVATE(DDrawerGroup)
34
35 public:
36 explicit DDrawerGroup(QObject *parent = 0);
37
38 QList<DDrawer *> expands() const;
39 DDrawer * checkedExpand() const;
40 DDrawer * expand(int id) const;
41 void addExpand(DDrawer *expand, int id = -1);
42 void setId(DDrawer *expand, int id);
43 void removeExpand(DDrawer *expand);
44 int checkedId() const;
45 int id(DDrawer *expand) const;
46
47 private:
48 void onExpandChanged(bool v);
49 };
50
51 DWIDGET_END_NAMESPACE
52
53 #endif // DDRAWERGROUP_H
2626
2727 DWIDGET_BEGIN_NAMESPACE
2828
29 class LIBDTKWIDGETSHARED_EXPORT DExpandGroup : public QObject
29 class LIBDTKWIDGETSHARED_EXPORT D_DECL_DEPRECATED_X("Use DDrawerGroup") DExpandGroup : public QObject
3030 {
3131 Q_OBJECT
3232 public:
1515 */
1616
1717 #include "dfilechooseredit.h"
18 #include "dthememanager.h"
1918 #include "private/dfilechooseredit_p.h"
2019
21 #include <QDebug>
22 #include <QFileDialog>
20 #include <DStyleHelper>
21 #include <DSuggestButton>
22
2323 #include <QScreen>
2424 #include <QGuiApplication>
2525
2626 DWIDGET_BEGIN_NAMESPACE
27
2827
2928 /*!
3029 * \~chinese \class DFileChooserEdit
7574 DFileChooserEdit::DFileChooserEdit(QWidget *parent)
7675 : DLineEdit(*new DFileChooserEditPrivate(this), parent)
7776 {
78 DThemeManager::registerWidget(this);
7977 D_D(DFileChooserEdit);
8078
8179 d->init();
106104 D_D(DFileChooserEdit);
107105
108106 d->dialogDisplayPosition = dialogDisplayPosition;
107 }
108
109 void DFileChooserEdit::setFileDialog(QFileDialog *fileDialog)
110 {
111 D_D(DFileChooserEdit);
112
113 d->dialog = fileDialog;
114 }
115
116 QFileDialog *DFileChooserEdit::fileDialog() const
117 {
118 D_DC(DFileChooserEdit);
119
120 return d->dialog;
109121 }
110122
111123 /*!
116128 void DFileChooserEdit::setFileMode(QFileDialog::FileMode mode)
117129 {
118130 D_D(DFileChooserEdit);
119 d->fileMode = mode;
131 d->dialog->setFileMode(mode);
120132 }
121133
122134 /*!
130142 QFileDialog::FileMode DFileChooserEdit::fileMode() const
131143 {
132144 D_DC(DFileChooserEdit);
133 return d->fileMode;
145 return d->dialog->fileMode();
134146 }
135147
136148 /*!
141153 void DFileChooserEdit::setNameFilters(const QStringList &filters)
142154 {
143155 D_D(DFileChooserEdit);
144 d->nameFilters = filters;
156 d->dialog->setNameFilters(filters);
145157 }
146158
147159 /*!
157169 QStringList DFileChooserEdit::nameFilters() const
158170 {
159171 D_DC(DFileChooserEdit);
160 return d->nameFilters;
172 return d->dialog->nameFilters();
173 }
174
175 void DFileChooserEdit::setDirectoryUrl(const QUrl &directory)
176 {
177 D_D(DFileChooserEdit);
178
179 d->dialog->setDirectoryUrl(directory);
180 }
181
182 QUrl DFileChooserEdit::directoryUrl()
183 {
184 D_D(DFileChooserEdit);
185
186 return d->dialog->directoryUrl();
161187 }
162188
163189
170196 {
171197 D_Q(DFileChooserEdit);
172198
173 q->setTextMargins(0, 0, 24, 0);
174 q->setReadOnly(true);
175 q->setIconVisible(true);
176 q->connect(q, SIGNAL(iconClicked()), q, SLOT(_q_showFileChooserDialog()));
199 dialog = new QFileDialog(q);
200 dialog->setAcceptMode(QFileDialog::AcceptOpen);
201 dialog->setFileMode(QFileDialog::ExistingFile);
202
203 QList<QWidget *> list;
204 DSuggestButton *btn = new DSuggestButton(nullptr);
205 btn->setIcon(DStyleHelper(q->style()).standardIcon(DStyle::SP_SelectElement, nullptr));
206 btn->setIconSize(QSize(24, 24));
207
208 q->setDialogDisplayPosition(DFileChooserEdit::DialogDisplayPosition::CurrentMonitorCenter);
209
210 list.append(btn);
211
212 q->setRightWidgets(list);
213 q->setClearButtonEnabled(true);
214
215 q->connect(btn, SIGNAL(clicked()), q, SLOT(_q_showFileChooserDialog()));
177216 }
178217
179218 void DFileChooserEditPrivate::_q_showFileChooserDialog()
180219 {
181220 D_Q(DFileChooserEdit);
182
183 QFileDialog dialog(q);
184
185 dialog.setAcceptMode(QFileDialog::AcceptOpen);
186 dialog.setFileMode(fileMode);
187 dialog.setNameFilters(nameFilters);
188221
189222 if (dialogDisplayPosition == DFileChooserEdit::CurrentMonitorCenter) {
190223 QPoint pos = QCursor::pos();
191224
192225 for (QScreen *screen : qApp->screens()) {
193226 if (screen->geometry().contains(pos)) {
194 QRect rect = dialog.geometry();
227 QRect rect = dialog->geometry();
195228 rect.moveCenter(screen->geometry().center());
196 dialog.move(rect.topLeft());
229 dialog->move(rect.topLeft());
197230 break;
198231 }
199232 }
201234
202235 q->dialogOpened();
203236
204 int code = dialog.exec();
205
206
207 if (code == QDialog::Accepted && !dialog.selectedFiles().isEmpty()) {
208 const QString fileName = dialog.selectedFiles().first();
237 int code = dialog->exec();
238
239 if (code == QDialog::Accepted && !dialog->selectedFiles().isEmpty()) {
240 const QString fileName = dialog->selectedFiles().first();
209241
210242 q->setText(fileName);
211243 Q_EMIT q->fileChoosed(fileName);
2828 Q_OBJECT
2929
3030 Q_ENUMS(DialogDisplayPosition)
31 Q_PROPERTY(DialogDisplayPosition dialogDisplayPosition READ dialogDisplayPosition WRITE setDialogDisplayPosition)
3231
3332 public:
34 enum DialogDisplayPosition{
33 enum DialogDisplayPosition {
3534 FollowParentWindow,
3635 CurrentMonitorCenter
3736 };
3837
39
4038 DFileChooserEdit(QWidget *parent = nullptr);
41
42 DialogDisplayPosition dialogDisplayPosition() const;
4339
4440 void setFileMode(QFileDialog::FileMode mode);
4541 QFileDialog::FileMode fileMode() const;
4743 void setNameFilters(const QStringList &filters);
4844 QStringList nameFilters() const;
4945
50 public Q_SLOTS:
46 void setDirectoryUrl(const QUrl &directory);
47 QUrl directoryUrl();
48
5149 void setDialogDisplayPosition(DialogDisplayPosition dialogDisplayPosition);
50 DFileChooserEdit::DialogDisplayPosition dialogDisplayPosition() const;
51
52 void setFileDialog(QFileDialog *fileDialog);
53 QFileDialog *fileDialog() const;
5254
5355 Q_SIGNALS:
5456 void fileChoosed(const QString &fileName);
132132 }
133133
134134 /*!
135 * \brief Allow mixed selection
136 *
137 * Allow user choose files and folders at the same time when selecting multiple files. By
138 * default user can only select files (folder not included) when selecting multiple files.
139 *
140 * Notice that this option only works when file mode is QFileDialog::ExistingFiles
141 *
142 * \param on enable this feature or not.
143 */
144 void DFileDialog::setAllowMixedSelection(bool on)
145 {
146 setProperty("_dtk_widget_filedialog_mixed_selection", on);
147 }
148
149 /*!
135150 * \~english \brief Get the added extra ComboBox value
136151 * \~chinese \brief 获得所追加的额外多选框的值
137152 *
3636 void addComboBox(const QString &text, const DComboBoxOptions &options);
3737 void addLineEdit(const QString &text);
3838 void addLineEdit(const QString &text, const DLineEditOptions &options);
39 void setAllowMixedSelection(bool on);
3940
4041 QString getComboBoxValue(const QString &text) const;
4142 QString getLineEditValue(const QString &text) const;
0 /*
1 * Copyright (C) 2017 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #include "dfloatingbutton.h"
21 #include "dstyleoption.h"
22 #include "dobject_p.h"
23 #include "dstyle.h"
24
25 #include <private/qabstractbutton_p.h>
26
27 DWIDGET_BEGIN_NAMESPACE
28
29 /*!
30 * \~chinese \brief DFloatingButton::DFloatingButton 用于定制化的button,根据传入的图标参数具体调整
31 * \~chinese \param parent
32 */
33 DFloatingButton::DFloatingButton(QWidget *parent)
34 : DIconButton(parent)
35 {
36 setBackgroundRole(QPalette::Highlight);
37 setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
38 }
39
40 DFloatingButton::DFloatingButton(QStyle::StandardPixmap iconType, QWidget *parent)
41 : DIconButton(iconType, parent)
42 {
43 setBackgroundRole(QPalette::Highlight);
44 setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
45 }
46
47 DFloatingButton::DFloatingButton(DStyle::StandardPixmap iconType, QWidget *parent)
48 : DIconButton(iconType, parent)
49 {
50 setBackgroundRole(QPalette::Highlight);
51 setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
52 }
53
54 DFloatingButton::DFloatingButton(const QString &text, QWidget *parent)
55 : DFloatingButton(parent)
56 {
57 setText(text);
58 }
59
60 DFloatingButton::DFloatingButton(const QIcon &icon, const QString &text, QWidget *parent)
61 : DFloatingButton(parent)
62 {
63 setIcon(icon);
64 setText(text);
65 }
66
67 DStyleOptionButton DFloatingButton::baseStyleOption() const
68 {
69 DStyleOptionButton opt;
70 opt.features = QStyleOptionButton::ButtonFeature(DStyleOptionButton::FloatingButton);
71
72 return opt;
73 }
74
75 void DFloatingButton::initStyleOption(DStyleOptionButton *option) const
76 {
77 DIconButton::initStyleOption(option);
78 option->features = QStyleOptionButton::ButtonFeature(DStyleOptionButton::FloatingButton);
79 }
80
81 DWIDGET_END_NAMESPACE
0 /*
1 * Copyright (C) 2017 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #ifndef DFLOATINGBUTTON_H
21 #define DFLOATINGBUTTON_H
22
23 #include <DIconButton>
24
25 DWIDGET_BEGIN_NAMESPACE
26
27 class DFloatingButton : public DIconButton
28 {
29 Q_OBJECT
30
31 public:
32 explicit DFloatingButton(QWidget *parent = nullptr);
33 explicit DFloatingButton(QStyle::StandardPixmap iconType = static_cast<QStyle::StandardPixmap>(-1), QWidget *parent = nullptr);
34 explicit DFloatingButton(DStyle::StandardPixmap iconType = static_cast<DStyle::StandardPixmap>(-1), QWidget *parent = nullptr);
35 explicit DFloatingButton(const QString &text, QWidget *parent = nullptr);
36 DFloatingButton(const QIcon& icon, const QString &text = QString(), QWidget *parent = nullptr);
37
38 protected:
39 DStyleOptionButton baseStyleOption() const override;
40 void initStyleOption(DStyleOptionButton *option) const override;
41 };
42
43 DWIDGET_END_NAMESPACE
44
45 #endif // DFLOATINGBUTTON_H
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zhangwengeng <zhangwengeng_cm@deepin.com>
4 *
5 * Maintainer: zhangwengeng <zhangwengeng_cm@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #include "dfloatingmessage.h"
22 #include "private/dfloatingmessage_p.h"
23 #include "ddialogclosebutton.h"
24
25 #include <QHBoxLayout>
26 #include <QTimer>
27 #include <QLabel>
28 #include <QDebug>
29
30 class MessageLabel : public QLabel
31 {
32 public:
33 QSize sizeHint() const override
34 {
35 return fontMetrics().size(Qt::TextSingleLine, text());
36 }
37 };
38 DWIDGET_BEGIN_NAMESPACE
39
40 DFloatingMessagePrivate::DFloatingMessagePrivate(DFloatingMessage *qq)
41 : DFloatingWidgetPrivate(qq)
42 {
43
44 }
45
46 DFloatingMessagePrivate::~DFloatingMessagePrivate()
47 {
48
49 }
50
51 void DFloatingMessagePrivate::init()
52 {
53 D_Q(DFloatingMessage);
54
55 timer = nullptr;
56 content = nullptr;
57 closeButton = nullptr;
58 notifyType = notifyType;
59 widget = new QWidget();
60 q->DFloatingWidget::setWidget(widget);
61 hBoxLayout = new QHBoxLayout(widget);
62 iconButton = new DIconButton(nullptr);
63 labMessage = new MessageLabel();
64 labMessage->setWordWrap(true);
65
66 iconButton->setFlat(true);
67 iconButton->setFocusPolicy(Qt::NoFocus);
68 iconButton->setAttribute(Qt::WA_TransparentForMouseEvents);
69 iconButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
70 iconButton->setIconSize(QSize(30, 30));
71
72 hBoxLayout->addWidget(iconButton);
73 hBoxLayout->addWidget(labMessage);
74
75 if (notifyType == DFloatingMessage::MessageType::TransientType) { //临时消息
76 timer = new QTimer(q);
77 timer->setInterval(4000);
78 timer->setSingleShot(true);
79 q->connect(timer, &QTimer::timeout, q, &DFloatingMessage::close);
80 } else { //常驻消息
81 content = nullptr;
82 closeButton = new DDialogCloseButton(q);
83
84 hBoxLayout->addWidget(closeButton);
85 q->connect(closeButton, &DIconButton::clicked, q, &DFloatingMessage::closeButtonClicked);
86 q->connect(closeButton, &DIconButton::clicked, q, &DFloatingMessage::close);
87 }
88 }
89
90 /*!
91 * \~chinese \class DFloatingMessage
92 * \~chinese \brief 是一个浮动消息的类, 类似于 ios 的通知栏消息, 然后有每一个新的消息对象, 就添加到一个竖直布局里面,
93 * \~chinese 然后一个消息的其布局模式是: icon (图标) + Message (消息) + QWidget (存放如控件按钮,可选) + closeButton (关闭按钮,可选)
94 * \~chinese 多个消息均是以竖直布局存放在一个 DMessageManager (消息管理类) 里面的
95 *
96 * \~chinese \htmlonly
97 * <pre style="font-family: FreeMono, Consolas, Menlo, 'Noto Mono', 'Courier New', Courier, monospace;line-height: 100%;">
98 * =============================================================================================
99 * = =
100 * = ========== ======================= ========= ========== =
101 * = = icon = = message = =QWidget= = quit = =
102 * = ========== ======================= ========= ========== =
103 * = (必选) (必选) (永驻:可选) (永驻:可选) =
104 * =============================================================================================
105 * </pre>
106 * \endhtmlonly
107 * \~chinese 消息通知一共有两种类型,临时停留几秒和手动清除的永驻消息
108 */
109
110 /*!
111 *
112 * \~chinese \enum DFloatingMessage::MessageType
113 * \~chinese DFloatingMessage::MessageType 定义了 DFloatingMessage 通知类型
114 *
115 * \~chinese \var DFloatingMessage:MessageType DFloatingMessage::TransientType
116 * \~chinese 临时的消息
117 *
118 * \~chinese \var DDFloatingMessage:MessageType DFloatingMessage::ResidentType
119 * \~chinese 常驻的消息
120 */
121
122 DFloatingMessage::DFloatingMessage(MessageType notifyType, QWidget *parent)
123 : DFloatingWidget(*new DFloatingMessagePrivate(this), parent)
124 {
125 D_D(DFloatingMessage);
126
127 setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
128
129 d->notifyType = notifyType;
130 d->init();
131 }
132
133 DFloatingMessage::MessageType DFloatingMessage::messageType() const
134 {
135 D_DC(DFloatingMessage);
136
137 return d->notifyType;
138 }
139
140 /*!
141 * \~chinese \brief 设置控件图标 icon
142 * \~chinese \param[in] ico 是最终的效果图标
143 */
144 void DFloatingMessage::setIcon(const QIcon &ico)
145 {
146 D_D(DFloatingMessage);
147
148 d->iconButton->setIcon(ico);
149 }
150
151 /*!
152 * \~chinese \brief 设置显示的文本消息(文字)
153 * \~chinese \param[in] str 消息文本的具体文字内容
154 */
155 void DFloatingMessage::setMessage(const QString &str)
156 {
157 D_D(DFloatingMessage);
158
159 d->labMessage->setText(str);
160 }
161
162 /*!
163 * \~chinese \brief 消息里面的,水平布局里面的第三个位置, 用来存放一些自定义控件, 比如一个确定按钮
164 * \~chinese \param[in] w 插入的具体控件, 若之前此处已经有其他的控件, 先删除挪出空位子, 在将 w 控件放到这个上面
165 */
166 void DFloatingMessage::setWidget(QWidget *w)
167 {
168 D_D(DFloatingMessage);
169
170 if (d->content)
171 delete d->hBoxLayout->takeAt(2);
172
173 d->content = w;
174 d->hBoxLayout->insertWidget(2, d->content);
175 }
176
177 /*!
178 * \~chinese \brief 若是为临时消息,则设置时间(毫秒)后会自动消失
179 * \~chinese \param[in] msec 消息显示的毫秒数, 默认是4000毫秒
180 */
181 void DFloatingMessage::setDuration(int msec)
182 {
183 D_D(DFloatingMessage);
184
185 if (d->timer == nullptr)
186 return;
187
188 d->timer->setInterval(msec);
189 }
190
191 QSize DFloatingMessage::sizeHint() const
192 {
193 int max_width = maximumWidth();
194 QSize size_hint = DFloatingWidget::sizeHint();
195
196 if (max_width < size_hint.width())
197 return QSize(max_width, heightForWidth(max_width));
198
199 return DFloatingWidget::sizeHint();
200 }
201
202 /*!
203 * \~chinese \brief 显示事件,里面设置计时器开始工作
204 * \~chinese \param[in] event 系统传过来的显示消息事件,没有感兴趣的消息需要处理,直接所有事件继续传递给下一个对象
205 */
206 void DFloatingMessage::showEvent(QShowEvent *event)
207 {
208 D_D(DFloatingMessage);
209
210 if (d->timer)
211 d->timer->start();
212
213 DFloatingWidget::showEvent(event);
214 }
215
216 DWIDGET_END_NAMESPACE
217
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zhangwengeng <zhangwengeng_cm@deepin.com>
4 *
5 * Maintainer: zhangwengeng <zhangwengeng_cm@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #ifndef DFLOATINGMESSAGE_H
22 #define DFLOATINGMESSAGE_H
23
24 #include <dtkwidget_global.h>
25 #include <dfloatingwidget.h>
26 #include <DObject>
27
28 #include <DIconButton>
29
30 DWIDGET_BEGIN_NAMESPACE
31
32 class DFloatingMessagePrivate;
33 class DFloatingMessage : public DFloatingWidget
34 {
35 Q_OBJECT
36 D_DECLARE_PRIVATE(DFloatingMessage)
37
38 public:
39 enum MessageType {
40 TransientType, //临时的消息,
41 ResidentType //常驻的消息
42 };
43
44 explicit DFloatingMessage(MessageType notifyType = MessageType::TransientType, QWidget *parent = nullptr);
45 MessageType messageType() const;
46
47 void setIcon(const QIcon &ico);
48 void setMessage(const QString &str);
49 void setWidget(QWidget *w);
50 void setDuration(int msec);
51
52 QSize sizeHint() const;
53
54 Q_SIGNALS:
55 void closeButtonClicked();
56
57 protected:
58 using DFloatingWidget::setWidget;
59
60 private:
61 void showEvent(QShowEvent *event) override;
62 };
63
64 DWIDGET_END_NAMESPACE
65
66 #endif // DFLOATINGMESSAGE_H
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zhangwengeng <zhangwengeng_cm@deepin.com>
4 *
5 * Maintainer: zhangwengeng <zhangwengeng_cm@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #include "dfloatingwidget.h"
22 #include "private/dfloatingwidget_p.h"
23 #include "dstyleoption.h"
24 #include "dstyle.h"
25 #include "dblureffectwidget.h"
26
27 #include <QHBoxLayout>
28 #include <QEvent>
29 #include <QDebug>
30 #include <QPaintEvent>
31
32 DWIDGET_BEGIN_NAMESPACE
33
34 DFloatingWidgetPrivate::DFloatingWidgetPrivate(DFloatingWidget *qq)
35 : DObjectPrivate(qq)
36 {
37 }
38
39 DFloatingWidgetPrivate::~DFloatingWidgetPrivate()
40 {
41 }
42
43 void DFloatingWidgetPrivate::init()
44 {
45 }
46
47 void DFloatingWidgetPrivate::adjustPalette()
48 {
49 if (!layout || layout->count() == 0)
50 return;
51
52 QWidget *content = layout->itemAt(0)->widget();
53
54 if (background) {
55 D_Q(DFloatingWidget);
56 // 开启模糊背景后应到调整调色板
57 QPalette pa = q->palette();
58 pa.setBrush(QPalette::Button, pa.brush(QPalette::Base));
59 pa.setBrush(QPalette::Light, pa.brush(QPalette::Base));
60 pa.setBrush(QPalette::Dark, pa.brush(QPalette::Base));
61
62 content->setPalette(pa);
63 } else {
64 content->setPalette(QPalette());
65 }
66 }
67
68 /*!
69 * \~chinese \brief 设置 widget 对象, 若是之前此处已经有对象, 会先清理旧的对象, 再将此处的新对象放到此处
70 * \~chinese \param[in] widget 将 widget 添加到 DFloatingWidget 的布局里面
71 */
72 void DFloatingWidget::setWidget(QWidget *widget)
73 {
74 D_D(DFloatingWidget);
75
76 if (!d->layout) {
77 d->layout = new QHBoxLayout(this);
78 d->layout->setMargin(0);
79 }
80
81 for (int i = 0; i < d->layout->count(); ++i) {
82 delete d->layout->takeAt(i);
83 }
84
85 d->layout->addWidget(widget);
86 d->adjustPalette();
87 }
88
89 /*!
90 * \~chinese \brief DFloatingWidget::setFramRadius 设置边框的圆角大小
91 * \~chinese \param radius 圆角大小
92 */
93 void DFloatingWidget::setFramRadius(int radius)
94 {
95 D_D(DFloatingWidget);
96 if (d->framRadius == radius)
97 return;
98 d->framRadius = radius;
99 update();
100 }
101
102 /*!
103 * \~chinese \brief 构造函数
104 * \~chinese \param[in] dd 是 DFloatingWidgetPrivate 的对象引用
105 * \~chinese \param[in] parent 其父对象
106 */
107 DFloatingWidget::DFloatingWidget(DFloatingWidgetPrivate &dd, QWidget *parent)
108 : QWidget(parent)
109 , DObject(dd)
110 {
111 D_D(DFloatingWidget);
112 d->init();
113 setAutoFillBackground(false);
114 }
115
116 /*!
117 * \~chinese \brief 构造函数
118 * \~chinese \param[in] parent 是本类的父控件
119 */
120 DFloatingWidget::DFloatingWidget(QWidget *parent)
121 : DFloatingWidget(*new DFloatingWidgetPrivate(this), parent)
122 {
123
124 }
125
126 QSize DFloatingWidget::sizeHint() const
127 {
128 D_DC(DFloatingWidget);
129
130 QSize size = d->layout ? d->layout->sizeHint() : QSize(0, 0);
131 DStyleHelper dstyle(style());
132 DStyleOptionFloatingWidget opt;
133 opt.frameRadius = d_func()->framRadius;
134 size = dstyle.sizeFromContents(DStyle::CT_FloatingWidget, &opt, size, this);
135
136 return size;
137 }
138
139 void DFloatingWidget::paintEvent(QPaintEvent *e)
140 {
141 Q_UNUSED(e)
142
143 // 更新模糊背景的源图片,在此处更新是为了避免阴影部分会进入到模糊控件的源图片
144 D_D(DFloatingWidget);
145
146 if (d->background) {
147 d->background->updateBlurSourceImage(e->region().translated(-d->background->pos()) & d->background->rect());
148 }
149
150 DStylePainter painter(this);
151 DStyleOptionFloatingWidget opt;
152 initStyleOption(&opt);
153 painter.drawControl(DStyle::CE_FloatingWidget, opt);
154 }
155
156 /*!
157 * \~chinese \brief 主事件处理程序, 用来处理感兴趣的事件
158 * \~chinese \param[in] event`父控件或者外设传入进来的 event 事件消息
159 * \~chinese \return 事件消息是否被处理的结果
160 */
161 bool DFloatingWidget::event(QEvent *event)
162 {
163 D_D(DFloatingWidget);
164
165 switch (event->type()) {
166 case QEvent::Polish: {
167 DStyleHelper dstyle(style());
168 int margins = dstyle.pixelMetric(DStyle::PM_FloatingWidgetShadowMargins, nullptr, this);
169 setContentsMargins(margins, margins, margins, margins);
170
171 if (d->background) {
172 int radius = DStyleHelper(style()).pixelMetric(DStyle::PM_TopLevelWindowRadius);
173
174 d->background->setBlurRectXRadius(radius);
175 d->background->setBlurRectYRadius(radius);
176 d->background->setGeometry(contentsRect());
177
178 d->adjustPalette();
179 }
180 break;
181 }
182 case QEvent::PaletteChange: {
183 d->adjustPalette();
184 break;
185 }
186 case QEvent::Resize: {
187 if (d->background) {
188 d->background->setGeometry(contentsRect());
189 }
190 break;
191 }
192 default:
193 break;
194 }
195
196 return QWidget::event(event);
197 }
198
199 /*!
200 * \~chinese \brief 初始化风格属性
201 * \~chinese \param[in] option 自带一些风格属性传入, 其上面增加和删除一些其他属性
202 */
203 void DFloatingWidget::initStyleOption(DStyleOptionFloatingWidget *option) const
204 {
205 option->init(this);
206 option->initFrom(this);
207 option->noBackground = blurBackgroundIsEnabled();
208 option->frameRadius = d_func()->framRadius;
209 }
210
211 /*!
212 * \~chinese \brief 获取背景模糊状态
213 * \~chinese \return 返回背景模糊状态
214 */
215 bool DFloatingWidget::blurBackgroundIsEnabled() const
216 {
217 D_DC(DFloatingWidget);
218
219 return d->background;
220 }
221
222 /*!
223 * \~chinese \brief 获取模糊背景功能的对象
224 * \~chinese \return 返回模糊背景功能的对象
225 */
226 DBlurEffectWidget *DFloatingWidget::blurBackground() const
227 {
228 D_DC(DFloatingWidget);
229
230 return d->background;
231 }
232
233 /*!
234 * \~chinese \brief 设置模糊背景启动
235 * \~chinese \param[in] blurBackgroundEnabled 是否启动模糊背景效果
236 */
237 void DFloatingWidget::setBlurBackgroundEnabled(bool blurBackgroundEnabled)
238 {
239 D_D(DFloatingWidget);
240
241 if (bool(d->background) == blurBackgroundEnabled)
242 return;
243
244 if (blurBackgroundEnabled) {
245 d->background = new DBlurEffectWidget(this);
246 d->background->setGeometry(contentsRect());
247 d->background->lower();
248 d->background->setFocusPolicy(Qt::NoFocus);
249 d->background->setAttribute(Qt::WA_TransparentForMouseEvents);
250 d->background->show();
251
252 int radius = DStyleHelper(style()).pixelMetric(DStyle::PM_TopLevelWindowRadius);
253
254 d->background->setBlurRectXRadius(radius);
255 d->background->setBlurRectYRadius(radius);
256 d->background->setBlendMode(DBlurEffectWidget::InWidgetBlend);
257
258 connect(d->background, &DBlurEffectWidget::blurSourceImageDirtied,
259 this, static_cast<void(DFloatingWidget::*)()>(&DFloatingWidget::update));
260 } else {
261 d->background->hide();
262 d->background->deleteLater();
263 }
264
265 d->adjustPalette();
266 }
267
268 DWIDGET_END_NAMESPACE
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zhangwengeng <zhangwengeng_cm@deepin.com>
4 *
5 * Maintainer: zhangwengeng <zhangwengeng_cm@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #ifndef DFLOATINGWIDGET_H
22 #define DFLOATINGWIDGET_H
23
24 #include <dtkwidget_global.h>
25 #include <DObject>
26
27 #include <QWidget>
28
29 DWIDGET_BEGIN_NAMESPACE
30
31 class DStyleOptionFloatingWidget;
32 class DBlurEffectWidget;
33 class DFloatingWidgetPrivate;
34 class DFloatingWidget : public QWidget, public DTK_CORE_NAMESPACE::DObject
35 {
36 Q_OBJECT
37 D_DECLARE_PRIVATE(DFloatingWidget)
38 Q_PROPERTY(bool blurBackgroundEnabled READ blurBackgroundIsEnabled WRITE setBlurBackgroundEnabled)
39
40 public:
41 explicit DFloatingWidget(QWidget *parent = nullptr);
42
43 QSize sizeHint() const override;
44 void setWidget(QWidget *widget);
45 void setFramRadius(int radius);
46
47 protected:
48 DFloatingWidget(DFloatingWidgetPrivate &dd, QWidget *parent);
49
50 void paintEvent(QPaintEvent* e) override;
51 bool event(QEvent *event) override;
52
53 using QWidget::setContentsMargins;
54 using QWidget::setAutoFillBackground;
55
56 public:
57 virtual void initStyleOption(DStyleOptionFloatingWidget *option) const;
58 bool blurBackgroundIsEnabled() const;
59 DBlurEffectWidget *blurBackground() const;
60
61 public Q_SLOTS:
62 void setBlurBackgroundEnabled(bool blurBackgroundEnabled);
63 };
64
65 DWIDGET_END_NAMESPACE
66
67 #endif // DFLOATINGWIDGET_H
+0
-195
src/widgets/dforeignwindow.cpp less more
0 /*
1 * Copyright (C) 2017 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #include "dforeignwindow.h"
18 #include <DObjectPrivate>
19
20 #include <private/qguiapplication_p.h>
21 #include <qpa/qplatformintegration.h>
22
23 #include <QEvent>
24 #include <QDynamicPropertyChangeEvent>
25 #include <QDebug>
26
27 DWIDGET_BEGIN_NAMESPACE
28
29 #define DEFINE_CONST_CHAR(Name) const char _##Name[] = "_d_" #Name
30
31 // propertys
32 DEFINE_CONST_CHAR(WmClass);
33 DEFINE_CONST_CHAR(ProcessId);
34
35 class DForeignWindowPrivate : public DTK_CORE_NAMESPACE::DObjectPrivate
36 {
37 public:
38 DForeignWindowPrivate(DForeignWindow *qq)
39 : DObjectPrivate(qq) {}
40 };
41
42 /*!
43 * \~chinese \class DForeignWindow
44 * \~chinese \brief 一个用于获取本地窗口信息的类,继承于 QWindow,支持 QWindow::geometry
45 * \~chinese QWindow::x QWindow::y QWindow::width QWindow::height
46 * \~chinese QWindow::title QWindow::flags QWindow::visibility QWindow::type
47 * \~chinese QWindow::windowStates QWindow::windowState 等接口的使用,另外扩展
48 * \~chinese 增加了一部分接口,方面更加详细的获取窗口信息。依赖于 dxcb 插件,在未加载
49 * \~chinese dxcb 插件的应用中使用时结果未知
50 * \~chinese \sa DWindowManagerHelper::currentWorkspaceWindows
51 * \~chinese \sa DApplication::loadDXcbPlugin
52 * \~chinese \sa DApplication::isDXcbPlatform
53 */
54
55 /*!
56 * \~chinese \property DForeignWindow::wmClass
57 * \~chinese \brief 窗口 WM_CLASS 的值
58 * \~chinese \note 只读
59 * \~chinese \sa \href{https://tronche.com/gui/x/icccm/sec-4.html#WM_CLASS,WM_CLASS}
60 */
61
62 /*!
63 * \~chinese \property DForeignWindow::pid
64 * \~chinese \brief 窗口所属进程的 pid
65 * \~chinese \note 只读
66 * \~chinese \sa \href{https://specifications.freedesktop.org/wm-spec/1.3/ar01s05.html,_NET_WM_PID}
67 */
68
69 /*!
70 * \~chinese \fn DForeignWindow::wmClassChanged
71 * \~chinese \brief 信号会在 \a wmClass 属性改变时被发送
72 * \~chinese \fn DForeignWindow::pidChanged
73 * \~chinese \brief 信号会在 \a pid 属性的值改变时被发送
74 */
75
76 /*!
77 * \~chinese \brief DForeignWindow::DForeignWindow
78 * \~chinese 直接构造一个 DForeignWindow 对象和使用 QWindow 对象没有区别
79 * \~chinese \param parent
80 * \~chinese \sa DForeignWindow::fromWinId
81 */
82 DForeignWindow::DForeignWindow(QWindow *parent)
83 : QWindow(parent)
84 , DObject(*new DForeignWindowPrivate(this))
85 {
86
87 }
88
89 /*!
90 * \~chinese \brief DForeignWindow::fromWinId
91 * \~chinese 使用这个窗口id创建一个 DForeignWindow 对象,此对象不会被加到 QGuiApplication::allWindows
92 * \~chinese 中。一般应用在需要获取一个本地窗口信息的场景。示例:
93 * \~chinese \code
94 * // a.cpp
95 * int main(int argc, char *argv[])
96 * {
97 * DApplication a(argc, argv);
98 *
99 * QWidget w;
100 *
101 * w.setWindowTitle("deepin");
102 * w.show();
103 *
104 * QFile app_win_id("/tmp/window_id.txt");
105 * if (app_win_id.open(QFile::WriteOnly)) {
106 * app_win_id.write(QByteArray::number(w.winId()));
107 * app_win_id.close();
108 * }
109 *
110 * return a.exec();
111 * }
112 * \endcode
113 *
114 * \~chinese \code
115 * // b.cpp
116 * int main(int argc, char *argv[])
117 * {
118 * DApplication::loadDXcbPlugin();
119 * DApplication a(argc, argv);
120 *
121 * DForeignWindow *fw = nullptr;
122 * QFile app_win_id("/tmp/window_id.txt");
123 * if (app_win_id.open(QFile::ReadOnly)) {
124 * fw = DForeignWindow::fromWinId(app_win_id.readAll().toInt());
125 * }
126 *
127 * if (fw) {
128 * qDebug() << fw->title();
129 *
130 * fw->connect(fw, &DForeignWindow::widthChanged, [&] {
131 * qDebug() << fw->width();
132 * });
133 * }
134 *
135 * return a.exec();
136 * }
137 * \endcode
138 *
139 * \arg \c 先启动应用 a
140 * \arg \c 再启动应用 b
141 *
142 * \~chinese 在应用 b 启动后将看到如下输出:
143 * \~chinese \code
144 * "deepin"
145 * \endcode
146 * 当改变应用 a 中的窗口宽度时,在应用 b 中会看到宽度的输出
147 * \~chinese \param id
148 * \~chinese \return
149 * \~chinese \warning 不要尝试对由本应用创建的窗口调用此接口,可能会导致窗口行为发生不可逆转的变化
150 */
151 DForeignWindow *DForeignWindow::fromWinId(WId id)
152 {
153 if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::ForeignWindows)) {
154 qWarning() << "DForeignWindow::fromWinId(): platform plugin does not support foreign windows.";
155 return 0;
156 }
157
158 DForeignWindow *window = new DForeignWindow;
159 window->setFlags(Qt::ForeignWindow);
160 window->setProperty("_q_foreignWinId", QVariant::fromValue(id));
161 window->create();
162 return window;
163 }
164
165 QString DForeignWindow::wmClass() const
166 {
167 return property(_WmClass).toString();
168 }
169
170 quint32 DForeignWindow::pid() const
171 {
172 return qvariant_cast<quint32>(property(_ProcessId));
173 }
174
175 bool DForeignWindow::event(QEvent *e)
176 {
177 if (e->type() == QEvent::DynamicPropertyChange) {
178 QDynamicPropertyChangeEvent *event = static_cast<QDynamicPropertyChangeEvent*>(e);
179
180 if (event->propertyName() == _WmClass) {
181 Q_EMIT wmClassChanged();
182
183 return true;
184 } else if (event->propertyName() == _ProcessId) {
185 Q_EMIT pidChanged();
186
187 return true;
188 }
189 }
190
191 return false;
192 }
193
194 DWIDGET_END_NAMESPACE
+0
-56
src/widgets/dforeignwindow.h less more
0 /*
1 * Copyright (C) 2017 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #ifndef DFOREIGNWINDOW_H
18 #define DFOREIGNWINDOW_H
19
20 #include "dobject.h"
21 #include "dtkwidget_global.h"
22
23 #include <QWindow>
24
25 DWIDGET_BEGIN_NAMESPACE
26
27 class DForeignWindowPrivate;
28 class DForeignWindow : public QWindow, public DTK_CORE_NAMESPACE::DObject
29 {
30 Q_OBJECT
31 Q_PROPERTY(QString wmClass READ wmClass NOTIFY wmClassChanged)
32 Q_PROPERTY(quint32 pid READ pid NOTIFY pidChanged)
33
34 public:
35 explicit DForeignWindow(QWindow *parent = 0);
36
37 static DForeignWindow *fromWinId(WId id);
38
39 QString wmClass() const;
40 quint32 pid() const;
41
42 Q_SIGNALS:
43 void wmClassChanged();
44 void pidChanged();
45
46 protected:
47 bool event(QEvent *) Q_DECL_OVERRIDE;
48
49 private:
50 D_DECLARE_PRIVATE(DForeignWindow)
51 };
52
53 DWIDGET_END_NAMESPACE
54
55 #endif // DFOREIGNWINDOW_H
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #include "dframe.h"
21 #include "dapplicationhelper.h"
22 #include "private/dframe_p.h"
23
24 #include <DObjectPrivate>
25
26 #include <QPainter>
27 #include <QStyle>
28 #include <QStyleOptionFrame>
29
30 DWIDGET_BEGIN_NAMESPACE
31
32 DFramePrivate::DFramePrivate(DFrame *qq)
33 : DCORE_NAMESPACE::DObjectPrivate(qq)
34 , frameRounded(true)
35 , backType(DPalette::NoType)
36 {
37
38 }
39
40 /*!
41 * \~chinese \brief DFrame::DFrame 用于其他需要边框的widget的基类
42 * \~chinese \param parent
43 */
44 DFrame::DFrame(QWidget *parent)
45 : DFrame(*new DFramePrivate(this), parent)
46 {
47
48 }
49
50 /*!
51 * \~chinese \brief DFrame::setFrameRounded设置边框圆角是否开启
52 * \~chinese \param on true开启 false关闭
53 */
54 void DFrame::setFrameRounded(bool on)
55 {
56 D_D(DFrame);
57
58 if (d->frameRounded == on)
59 return;
60
61 d->frameRounded = on;
62 update();
63 }
64
65 /*!
66 * \~chinese \brief DFrame::setBackgroundRole 设置边框背景画刷的角色类型
67 * \~chinese \param type 背景画刷的角色类型
68 */
69 void DFrame::setBackgroundRole(DPalette::ColorType type)
70 {
71 D_D(DFrame);
72
73 if (d->backType == type)
74 return;
75
76 d->backType = type;
77 update();
78 }
79
80 DFrame::DFrame(DFramePrivate &dd, QWidget *parent)
81 : QFrame(parent)
82 , DObject(dd)
83 {
84 setBackgroundRole(QPalette::Base);
85 setFrameShape(QFrame::StyledPanel);
86 }
87
88 void DFrame::paintEvent(QPaintEvent *event)
89 {
90 Q_UNUSED(event)
91 QStyleOptionFrame opt;
92 initStyleOption(&opt);
93 QPainter p(this);
94 D_DC(DFrame);
95
96 if (d->frameRounded) {
97 opt.features |= QStyleOptionFrame::Rounded;
98 }
99
100 const DPalette &dp = DApplicationHelper::instance()->palette(this);
101
102 if (d->backType != DPalette::NoType) {
103 p.setBackground(dp.brush(d->backType));
104 }
105
106 p.setPen(QPen(dp.frameBorder(), opt.lineWidth));
107 style()->drawControl(QStyle::CE_ShapedFrame, &opt, &p, this);
108 }
109
110 DWIDGET_END_NAMESPACE
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #ifndef DFRAME_H
21 #define DFRAME_H
22
23 #include <dtkwidget_global.h>
24 #include <DPalette>
25 #include <DObject>
26
27 #include <QFrame>
28
29 DWIDGET_BEGIN_NAMESPACE
30
31 class DFramePrivate;
32 class DFrame : public QFrame, public DCORE_NAMESPACE::DObject
33 {
34 Q_OBJECT
35 D_DECLARE_PRIVATE(DFrame)
36
37 public:
38 explicit DFrame(QWidget *parent = nullptr);
39
40 void setFrameRounded(bool on);
41 void setBackgroundRole(DGUI_NAMESPACE::DPalette::ColorType type);
42 using QFrame::setBackgroundRole;
43
44 protected:
45 DFrame(DFramePrivate &dd, QWidget *parent = nullptr);
46
47 void paintEvent(QPaintEvent *event) override;
48 };
49
50 class DHorizontalLine : public QFrame
51 {
52 Q_OBJECT
53 public:
54 explicit DHorizontalLine(QWidget* parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
55 : QFrame(parent, f)
56 {
57 setFrameShape(HLine);
58 }
59 };
60
61 class DVerticalLine : public QFrame
62 {
63 Q_OBJECT
64 public:
65 explicit DVerticalLine(QWidget* parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
66 : QFrame(parent, f)
67 {
68 setFrameShape(VLine);
69 }
70 };
71
72 DWIDGET_END_NAMESPACE
73
74 #endif // DFRAME_H
5151
5252 DHeaderLine::DHeaderLine(QWidget *parent) : DBaseLine(parent)
5353 {
54 DThemeManager::registerWidget(this);
55
5654 setAlignment(Qt::AlignVCenter | Qt::AlignLeft);
5755 setFixedHeight(EXPAND_HEADER_HEIGHT);
5856 m_titleLabel = new QLabel(this);
2828 const int BORDER_RADIUS = 4;
2929 const int CONTENT_INSERT_OFFSET = 2;
3030 const int BUTTON_HEIGHT = 28;
31 const int CLOSE_BUTTON_WIDTH = 27;
32 const int CLOSE_BUTTON_HEIGHT = 23;
31 const int CLOSE_BUTTON_WIDTH = 21;
32 const int CLOSE_BUTTON_HEIGHT = 21;
3333 const int ICON_LAYOUT_TOP_MARGIN = 14;
3434 const int ICON_LAYOUT_BOTTOM_MARGIN = 14;
3535 const int ICON_LAYOUT_LEFT_MARGIN = 20;
3636 const int ICON_LAYOUT_RIGHT_MARGIN = 20;
3737 const int ICON_LAYOUT_SPACING = 20;
3838 const int BUTTON_LAYOUT_TOP_MARGIN = 0;
39 const int BUTTON_LAYOUT_BOTTOM_MARGIN = 0;
40 const int BUTTON_LAYOUT_LEFT_MARGIN = 0;
41 const int BUTTON_LAYOUT_RIGHT_MARGIN = 0;
39 const int BUTTON_LAYOUT_BOTTOM_MARGIN = 10;
40 const int BUTTON_LAYOUT_LEFT_MARGIN = 10;
41 const int BUTTON_LAYOUT_RIGHT_MARGIN = 10;
4242 }
4343
4444 DWIDGET_END_NAMESPACE
0 /*
1 * Copyright (C) 2017 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #include "diconbutton.h"
21 #include "dstyleoption.h"
22 #include "dobject_p.h"
23 #include "dstyle.h"
24 #include "private/diconbutton_p.h"
25
26 #include <private/qabstractbutton_p.h>
27
28 DWIDGET_BEGIN_NAMESPACE
29
30 DIconButtonPrivate::DIconButtonPrivate(DIconButton *qq)
31 : DObjectPrivate(qq)
32 {
33
34 }
35
36 /*!
37 * \~chinese \brief DIconButton::DIconButton 实现一个方便定义图标的button
38 * \~chinese \param parent
39 */
40 DIconButton::DIconButton(QWidget *parent)
41 : DIconButton(*new DIconButtonPrivate(this), parent)
42 {
43
44 }
45
46 DIconButton::DIconButton(QStyle::StandardPixmap iconType, QWidget *parent)
47 : DIconButton(static_cast<DStyle::StandardPixmap>(iconType), parent)
48 {
49
50 }
51
52 DIconButton::DIconButton(DStyle::StandardPixmap iconType, QWidget *parent)
53 : DIconButton(parent)
54 {
55 d_func()->iconType = static_cast<qint64>(iconType);
56 setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
57 }
58
59 DIconButton::~DIconButton()
60 {
61
62 }
63
64 /*!
65 * \~chinese \brief DIconButton::setIcon 设置button的图标
66 * \~chinese \param icon button的图标
67 */
68 void DIconButton::setIcon(const QIcon &icon)
69 {
70 D_D(DIconButton);
71
72 d->iconType = -1;
73 QAbstractButton::setIcon(icon);
74 }
75
76 /*!
77 * \~chinese \brief DIconButton::setIcon 设置button图标的类型,传入QT预定义枚举值
78 * \~chinese \param iconType icon类型
79 */
80 void DIconButton::setIcon(QStyle::StandardPixmap iconType)
81 {
82 D_D(DIconButton);
83
84 d->iconType = iconType;
85 QAbstractButton::setIcon(style()->standardIcon(iconType, nullptr, this));
86 }
87
88 /*!
89 * \~chinese \brief DIconButton::setIcon 设置button图标的类型,传入DTK预定义枚举值
90 * \~chinese \param iconType icon类型
91 */
92 void DIconButton::setIcon(DStyle::StandardPixmap iconType)
93 {
94 D_D(DIconButton);
95
96 d->iconType = iconType;
97 QAbstractButton::setIcon(DStyleHelper(style()).standardIcon(iconType, nullptr, this));
98 }
99
100 QSize DIconButton::sizeHint() const
101 {
102 QAbstractButtonPrivate *bp = static_cast<QAbstractButtonPrivate*>(QAbstractButton::d_ptr.data());
103
104 if (bp->sizeHint.isValid()) {
105 return bp->sizeHint;
106 }
107
108 DStyleOptionButton opt;
109 initStyleOption(&opt);
110
111 opt.rect.setSize(opt.iconSize);
112 bp->sizeHint = DStyleHelper(style()).sizeFromContents(DStyle::CT_IconButton, &opt, opt.iconSize, this).expandedTo(QApplication::globalStrut());
113 int size = qMax(bp->sizeHint.width(), bp->sizeHint.height());
114 bp->sizeHint.setHeight(size);
115 bp->sizeHint.setWidth(size);
116
117 return bp->sizeHint;
118 }
119
120 QSize DIconButton::minimumSizeHint() const
121 {
122 return sizeHint();
123 }
124
125 /*!
126 * \~chinese \brief DIconButton::iconSize
127 * \~chinese \return 返回ICON的尺寸
128 */
129 QSize DIconButton::iconSize() const
130 {
131 QAbstractButtonPrivate *bp = static_cast<QAbstractButtonPrivate*>(QAbstractButton::d_ptr.data());
132
133 if (bp->iconSize.isValid()) {
134 return bp->iconSize;
135 }
136
137 DStyleHelper dstyle(style());
138 DStyleOptionButton opt = baseStyleOption();
139 int size = dstyle.pixelMetric(DStyle::PM_IconButtonIconSize, &opt, this);
140
141 if (Q_LIKELY(size > 0)) {
142 return QSize(size, size);
143 }
144
145 return QAbstractButton::iconSize();
146 }
147
148 /*!
149 * \~chinese \brief DIconButton::isFlat
150 * \~chinese \return true无边框 false有边框
151 */
152 bool DIconButton::isFlat() const
153 {
154 D_DC(DIconButton);
155
156 return d->flat;
157 }
158
159 /*!
160 * \~chinese \brief DIconButton::setFlat 设置是否保留边框
161 * \~chinese \param flat true无边框 false有边框
162 */
163 void DIconButton::setFlat(bool flat)
164 {
165 D_D(DIconButton);
166
167 if (d->flat == flat)
168 return;
169
170 d->flat = flat;
171
172 QAbstractButtonPrivate *bp = static_cast<QAbstractButtonPrivate*>(QAbstractButton::d_ptr.data());
173 bp->sizeHint = QSize();
174
175 update();
176 updateGeometry();
177 }
178
179 DIconButton::DIconButton(DIconButtonPrivate &dd, QWidget *parent)
180 : QAbstractButton(parent)
181 , DObject(dd)
182 {
183
184 }
185
186 DStyleOptionButton DIconButton::baseStyleOption() const
187 {
188 return DStyleOptionButton();
189 }
190
191 void DIconButton::initStyleOption(DStyleOptionButton *option) const
192 {
193 D_DC(DIconButton);
194
195 option->initFrom(this);
196 option->init(this);
197
198 if (d->flat)
199 option->features |= QStyleOptionButton::Flat;
200
201 if (isChecked())
202 option->state |= QStyle::State_On;
203
204 if (isDown())
205 option->state |= QStyle::State_Sunken;
206
207 if (!d->flat && !isDown())
208 option->state |= QStyle::State_Raised;
209
210 option->text = text();
211 option->icon = icon();
212 option->iconSize = iconSize();
213
214 if (backgroundRole() == QPalette::Highlight) {
215 option->palette.setBrush(QPalette::Light, option->dpalette.lightLively());
216 option->palette.setBrush(QPalette::Button, option->palette.highlight());
217 option->palette.setBrush(QPalette::Dark, option->dpalette.darkLively());
218 option->palette.setBrush(QPalette::ButtonText, option->palette.highlightedText());
219 }
220 }
221
222 void DIconButton::keyPressEvent(QKeyEvent *event)
223 {
224 switch (event->key()) {
225 case Qt::Key_Enter:
226 case Qt::Key_Return:
227 if (hasFocus()) {
228 click();
229 break;
230 }
231 Q_FALLTHROUGH();
232 default:
233 QAbstractButton::keyPressEvent(event);
234 }
235 }
236
237 void DIconButton::paintEvent(QPaintEvent *event)
238 {
239 Q_UNUSED(event)
240
241 DStylePainter p(this);
242 DStyleOptionButton opt;
243 initStyleOption(&opt);
244 p.drawControl(DStyle::CE_IconButton, opt);
245 }
246
247 bool DIconButton::event(QEvent *e)
248 {
249 if (e->type() == QEvent::Polish) {
250 D_DC(DIconButton);
251
252 if (d->iconType >= 0) {
253 if (d->iconType > static_cast<qint64>(QStyle::SP_CustomBase)) {
254 DStyleHelper dstyle(style());
255 setIcon(dstyle.standardIcon(static_cast<DStyle::StandardPixmap>(d->iconType), nullptr, this));
256 } else {
257 setIcon(style()->standardIcon(static_cast<QStyle::StandardPixmap>(d->iconType), nullptr, this));
258 }
259 }
260 } else if (e->type() == QEvent::ShowToParent) {
261 // 默认调整大小,否则可能会导致按钮显示后为 QWidget 的默认大小
262 resize(sizeHint());
263 }
264
265 return QAbstractButton::event(e);
266 }
267
268 DWIDGET_END_NAMESPACE
0 /*
1 * Copyright (C) 2017 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #ifndef DICONBUTTON_H
21 #define DICONBUTTON_H
22
23 #include <dtkwidget_global.h>
24 #include <DObject>
25 #include <DStyle>
26
27 #include <QAbstractButton>
28
29 DWIDGET_BEGIN_NAMESPACE
30
31 class DIconButtonPrivate;
32 class DStyleOptionButton;
33 class DIconButton : public QAbstractButton, public DCORE_NAMESPACE::DObject
34 {
35 Q_OBJECT
36 D_DECLARE_PRIVATE(DIconButton)
37
38 Q_PROPERTY(bool flat READ isFlat WRITE setFlat)
39
40 public:
41 explicit DIconButton(QWidget *parent = nullptr);
42 explicit DIconButton(QStyle::StandardPixmap iconType = static_cast<QStyle::StandardPixmap>(-1), QWidget *parent = nullptr);
43 explicit DIconButton(DStyle::StandardPixmap iconType = static_cast<DStyle::StandardPixmap>(-1), QWidget *parent = nullptr);
44 ~DIconButton() override;
45
46 void setIcon(const QIcon &icon);
47 void setIcon(QStyle::StandardPixmap iconType);
48 void setIcon(DStyle::StandardPixmap iconType);
49
50 QSize sizeHint() const override;
51 QSize minimumSizeHint() const override;
52 QSize iconSize() const;
53
54 bool isFlat() const;
55
56 public Q_SLOTS:
57 void setFlat(bool flat);
58
59 protected:
60 using QAbstractButton::setText;
61 using QAbstractButton::text;
62
63 DIconButton(DIconButtonPrivate &dd, QWidget *parent = nullptr);
64 virtual DStyleOptionButton baseStyleOption() const;
65 virtual void initStyleOption(DStyleOptionButton *option) const;
66 void keyPressEvent(QKeyEvent *event) override;
67
68 private:
69 void paintEvent(QPaintEvent *event) override;
70 bool event(QEvent *e) override;
71 };
72
73 DWIDGET_END_NAMESPACE
74
75 #endif // DICONBUTTON_H
9696 : QLabel(parent)
9797 , DObject(*new DImageButtonPrivate(this))
9898 {
99 DThemeManager::registerWidget(this, QStringList({"checked", "state"}));
100
10199 D_D(DImageButton);
102100
103101 d->updateIcon();
128126 : QLabel(parent)
129127 , DObject(*new DImageButtonPrivate(this))
130128 {
131 DThemeManager::registerWidget(this, QStringList({"checked", "state"}));
132
133129 D_D(DImageButton);
134130
135131 if (!normalPic.isEmpty()) {
175171 : QLabel(parent)
176172 , DObject(*new DImageButtonPrivate(this))
177173 {
178 DThemeManager::registerWidget(this, QStringList({"checked", "state"}));
179
180174 D_D(DImageButton);
181175
182176 if (!normalPic.isEmpty()) {
707701 : QLabel(parent)
708702 , DObject(q)
709703 {
710 DThemeManager::registerWidget(this, QStringList({"checked", "state"}));
711
712704 D_D(DImageButton);
713705
714706 d->updateIcon();
2727
2828 DWIDGET_BEGIN_NAMESPACE
2929 class DImageButtonPrivate;
30 class LIBDTKWIDGETSHARED_EXPORT DImageButton : public QLabel, public DTK_CORE_NAMESPACE::DObject
30 class LIBDTKWIDGETSHARED_EXPORT D_DECL_DEPRECATED_X("Use DIconButton") DImageButton : public QLabel, public DTK_CORE_NAMESPACE::DObject
3131 {
3232 Q_OBJECT
3333 Q_PROPERTY(QString normalPic READ getNormalPic WRITE setNormalPic DESIGNABLE true)
2424 #include "private/dinputdialog_p.h"
2525 #include "dspinbox.h"
2626
27 #include "dlabel.h"
2827 #include "dpasswordedit.h"
2928
3029 DWIDGET_BEGIN_NAMESPACE
266265
267266 DLineEdit *edit;
268267
269 if(mode == DLineEdit::Normal) {
268 if(mode == QLineEdit::Normal) {
270269 edit = new DLineEdit;
271270 } else {
272271 edit = new DPasswordEdit;
3434 Q_PROPERTY(QString textValue READ textValue WRITE setTextValue NOTIFY textValueChanged)
3535 Q_PROPERTY(int intValue READ intValue WRITE setIntValue NOTIFY intValueChanged)
3636 Q_PROPERTY(int doubleValue READ doubleValue WRITE setDoubleValue NOTIFY doubleValueChanged)
37 Q_PROPERTY(DLineEdit::EchoMode textEchoMode READ textEchoMode WRITE setTextEchoMode)
37 Q_PROPERTY(QLineEdit::EchoMode textEchoMode READ textEchoMode WRITE setTextEchoMode)
3838 Q_PROPERTY(bool comboBoxEditable READ isComboBoxEditable WRITE setComboBoxEditable)
3939 Q_PROPERTY(QStringList comboBoxItems READ comboBoxItems WRITE setComboBoxItems)
4040 Q_PROPERTY(int comboBoxCurrentIndex READ comboBoxCurrentIndex WRITE setComboBoxCurrentIndex NOTIFY comboBoxCurrentIndexChanged)
1515 */
1616
1717 #include <QRegularExpressionValidator>
18 #include <QHBoxLayout>
1918 #include <QGuiApplication>
2019 #include <QClipboard>
2120 #include <QKeyEvent>
2221 #include <QDebug>
22 #include <QLabel>
2323
2424 #include "dthememanager.h"
2525 #include "dipv4lineedit.h"
2929
3030 #define RX_PATTERN_IP "^(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)?$"
3131
32 DIpv4LineEditPrivate::DIpv4LineEditPrivate(DIpv4LineEdit *parent) :
33 DLineEditPrivate(parent)
32 DIpv4LineEditPrivate::DIpv4LineEditPrivate(DIpv4LineEdit *parent)
33 : DObjectPrivate(parent)
3434 {
3535
3636 }
5555
5656 editMainWidget->setLayout(hbox_layout);
5757
58 q->DLineEdit::setReadOnly(true);
58 q->QLineEdit::setReadOnly(true);
5959 q->setFocusProxy(editList.first());
6060 q->setValidator(new QRegularExpressionValidator(QRegularExpression("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)?\\.){0,3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)?"), q));
6161
62 QObject::connect(q, &DIpv4LineEdit::sizeChanged,
63 editMainWidget, static_cast<void (QWidget::*)(const QSize&)>(&QWidget::resize));
6462 QObject::connect(q, SIGNAL(textChanged(QString)), q, SLOT(_q_setIpLineEditText(QString)), Qt::QueuedConnection);
6563 }
6664
9694
9795 void DIpv4LineEditPrivate::setFocus(bool focus)
9896 {
99 if(this->focus == focus)
97 D_Q(DIpv4LineEdit);
98
99 if (this->focus == focus)
100100 return;
101101
102102 this->focus = focus;
103103
104 Q_EMIT q_func()->focusChanged(focus);
104 Q_EMIT q->focusChanged(focus);
105105 }
106106
107107 void DIpv4LineEditPrivate::_q_updateLineEditText()
108108 {
109109 D_Q(DIpv4LineEdit);
110
111110 QString text;
112111
113 for(const QLineEdit *edit : editList) {
112 for (const QLineEdit *edit : editList) {
114113 text.append(".").append(edit->text());
115114 }
116115
117116 QObject::disconnect(q, SIGNAL(textChanged(QString)), q, SLOT(_q_setIpLineEditText(QString)));
118117
119 if(text == "....") {
120 if(!q->text().isEmpty()) {
118 if (text == "....") {
119 if (!q->text().isEmpty()) {
121120 q->setText("");
122121 Q_EMIT q->textEdited(q->text());
123122 }
124123 } else {
125124 text = text.mid(1);
126125
127 if(text != q->text()) {
126 if (text != q->text()) {
128127 q->setText(text);
129128 Q_EMIT q->textEdited(q->text());
130129 }
132131
133132 QObject::connect(q, SIGNAL(textChanged(QString)), q, SLOT(_q_setIpLineEditText(QString)), Qt::QueuedConnection);
134133
135 q->DLineEdit::setCursorPosition(q->cursorPosition());
134 q->QLineEdit::setCursorPosition(q->cursorPosition());
136135 }
137136
138137 void DIpv4LineEditPrivate::_q_setIpLineEditText(const QString &text)
139138 {
140 D_QC(DIpv4LineEdit);
139 D_Q(DIpv4LineEdit);
141140
142141 int pos = 0;
143142
144 if(q->validator()->validate(const_cast<QString&>(text), pos) != QValidator::Acceptable) {
143 if (q->validator()->validate(const_cast<QString &>(text), pos) != QValidator::Acceptable) {
145144 _q_updateLineEditText();
146145 return;
147146 }
150149
151150 int min_count = qMin(editList.count(), text_list.count());
152151
153 for(int i = 0; i < min_count; ++i ) {
152 for (int i = 0; i < min_count; ++i) {
154153 QLineEdit *edit = editList[i];
155154 bool edit_blocked = edit->blockSignals(true);
156155 edit->setText(text_list[i]);
157156 edit->blockSignals(edit_blocked);
158157 }
159158
160 for(int i = min_count; i < editList.count(); ++i) {
159 for (int i = min_count; i < editList.count(); ++i) {
161160 QLineEdit *edit = editList[i];
162161 bool edit_blocked = edit->blockSignals(true);
163162 edit->clear();
204203 /*!
205204 * \~chinese \brief 构造DIpv4LineEdit类,和普通 \l QWidget 一样,可以传入一个QWidget指
206205 * \~chinese 针对象作为其父对象
207 * \~chinese \note 会调用 DThemeManager::registerWidget 注册为受 DThemeManager
208206 * \~chinese 管理的控件
209207 * \~chinese \param parent
210208 */
211 DIpv4LineEdit::DIpv4LineEdit(QWidget *parent) :
212 DLineEdit(*new DIpv4LineEditPrivate(this), parent)
213 {
214 DThemeManager::registerWidget(this);
215
209 DIpv4LineEdit::DIpv4LineEdit(QWidget *parent)
210 : QLineEdit(parent)
211 , DObject(*new DIpv4LineEditPrivate(this))
212 {
216213 d_func()->init();
217214 }
218215
251248
252249 int cursorPosition = 0;
253250
254 for(const QLineEdit *edit : d->editList) {
255 if(edit->hasFocus()) {
251 for (const QLineEdit *edit : d->editList) {
252 if (edit->hasFocus()) {
256253 cursorPosition += edit->cursorPosition();
257254 break;
258255 } else {
296293
297294 bool has = true;
298295
299 for(const QLineEdit *edit : d->editList) {
296 for (const QLineEdit *edit : d->editList) {
300297 has = has && edit->hasAcceptableInput();
301298 }
302299
323320 */
324321 void DIpv4LineEdit::setCursorPosition(int cursorPosition)
325322 {
326 DLineEdit::setCursorPosition(cursorPosition);
323 QLineEdit::setCursorPosition(cursorPosition);
327324
328325 D_D(DIpv4LineEdit);
329326
330 for(QLineEdit *edit : d->editList) {
331 if(cursorPosition > edit->text().count()) {
327 for (QLineEdit *edit : d->editList) {
328 if (cursorPosition > edit->text().count()) {
332329 cursorPosition -= edit->text().count();
333330 --cursorPosition;
334331 } else {
348345 {
349346 D_D(DIpv4LineEdit);
350347
351 for(QLineEdit *edit : d->editList) {
348 for (QLineEdit *edit : d->editList) {
352349 edit->setReadOnly(readOnly);
353350 }
354351 }
363360 {
364361 D_D(DIpv4LineEdit);
365362
366 for(QLineEdit *edit : d->editList) {
367 if(edit->text().count() > start) {
368 if(edit->text().count() < length + start) {
363 for (QLineEdit *edit : d->editList) {
364 if (edit->text().count() > start) {
365 if (edit->text().count() < length + start) {
369366 int tmp_length = edit->text().count() - start;
370367
371368 edit->setSelection(start, tmp_length);
382379 start -= edit->text().count();
383380 }
384381
385 DLineEdit::setSelection(start, length);
382 QLineEdit::setSelection(start, length);
386383 }
387384
388385 /*!
393390 {
394391 D_D(DIpv4LineEdit);
395392
396 for(QLineEdit *edit : d->editList) {
393 for (QLineEdit *edit : d->editList) {
397394 edit->selectAll();
398395 }
399396
400 DLineEdit::selectAll();
397 QLineEdit::selectAll();
401398 }
402399
403400 bool DIpv4LineEdit::eventFilter(QObject *obj, QEvent *e)
404401 {
405 if(e->type() == QEvent::KeyPress) {
406 QLineEdit *edit = qobject_cast<QLineEdit*>(obj);
407
408 if(edit) {
409 QKeyEvent *event = static_cast<QKeyEvent*>(e);
410
411 if(event) {
402 if (e->type() == QEvent::KeyPress) {
403 QLineEdit *edit = qobject_cast<QLineEdit *>(obj);
404
405 if (edit) {
406 QKeyEvent *event = static_cast<QKeyEvent *>(e);
407
408 if (event) {
412409 D_D(DIpv4LineEdit);
413410
414 if(event->key() <= Qt::Key_9 && event->key() >= Qt::Key_0) {
415 if(edit->cursorPosition() == edit->text().count()) {
411 if (event->key() <= Qt::Key_9 && event->key() >= Qt::Key_0) {
412 if (edit->cursorPosition() == edit->text().count()) {
416413 QRegularExpression rx(RX_PATTERN_IP);
417414
418415 const QString number = QString::number(event->key() - Qt::Key_0);
419416
420 if(!rx.match(edit->text().append(number)).hasMatch()) {
417 if (!rx.match(edit->text().append(number)).hasMatch()) {
421418 int index = d->editList.indexOf(edit) + 1;
422419
423 if(index < d->editList.count()) {
420 if (index < d->editList.count()) {
424421 d->editList[index]->setFocus();
425422
426 if(d->editList[index]->text().isEmpty()) {
423 if (d->editList[index]->text().isEmpty()) {
427424 d->editList[index]->setText(number);
428425 d->_q_updateLineEditText();
429426 }
433430 }
434431 }
435432 } else {
436 if(event->key() == Qt::Key_Backspace) {
433 if (event->key() == Qt::Key_Backspace) {
437434 bool accept = false;
438435
439 for(QLineEdit *edit : d->editList) {
440 if(!edit->selectedText().isEmpty()) {
436 for (QLineEdit *edit : d->editList) {
437 if (!edit->selectedText().isEmpty()) {
441438 edit->setText(edit->text().remove(edit->selectedText()));
442439 d->_q_updateLineEditText();
443440 accept = true;
444441 }
445442 }
446443
447 if(accept)
444 if (accept)
448445 return true;
449446 }
450447
451 if(event->key() == Qt::Key_Left
452 || (event->key() == Qt::Key_Backspace
453 && edit->cursorPosition() == 0)) {
448 if (event->key() == Qt::Key_Left
449 || (event->key() == Qt::Key_Backspace
450 && edit->cursorPosition() == 0)) {
454451 setCursorPosition(cursorPosition() - 1);
455452
456453 return true;
457454 }
458455
459 if(event->key() == Qt::Key_Right) {
456 if (event->key() == Qt::Key_Right) {
460457 setCursorPosition(cursorPosition() + 1);
461458
462459 return true;
463460 }
464461
465 if(event->key() == Qt::Key_Period || event->key() == Qt::Key_Space) {
462 if (event->key() == Qt::Key_Period || event->key() == Qt::Key_Space) {
466463 int index = d->editList.indexOf(edit) + 1;
467464
468 if(index < d->editList.count()) {
465 if (index < d->editList.count()) {
469466 d->editList[index]->setFocus();
470467 }
471468
472469 return true;
473470 }
474471
475 if(event->modifiers() == Qt::ControlModifier) {
476 if(event->key() == Qt::Key_V) {
472 if (event->modifiers() == Qt::ControlModifier) {
473 if (event->key() == Qt::Key_V) {
477474 QString clipboarg_text = qApp->clipboard()->text();
478475 QString text = edit->text().insert(edit->cursorPosition(), clipboarg_text);
479476
480477 QRegularExpression rx(RX_PATTERN_IP);
481478
482 if(rx.match(text).hasMatch()) {
479 if (rx.match(text).hasMatch()) {
483480 edit->setText(text);
484481 d->_q_updateLineEditText();
485482 } else {
486483 int pos = 0;
487484
488 if(this->validator()->validate(clipboarg_text, pos) == QValidator::Acceptable)
485 if (validator()->validate(clipboarg_text, pos) == QValidator::Acceptable)
489486 d->_q_setIpLineEditText(clipboarg_text);
490487 }
491488
492489 return true;
493 } else if(event->key() == Qt::Key_A) {
490 } else if (event->key() == Qt::Key_A) {
494491 selectAll();
495 } else if(event->key() == Qt::Key_X) {
492 } else if (event->key() == Qt::Key_X) {
496493 cut();
497494 } else {
498 DLineEdit::keyPressEvent(event);
495 QLineEdit::keyPressEvent(event);
499496 }
500497
501498 return true;
503500 }
504501 }
505502 }
506 } else if(e->type() == QEvent::FocusIn) {
507 QLineEdit *edit = qobject_cast<QLineEdit*>(obj);
508
509 if(edit) {
510 DLineEdit::setCursorPosition(cursorPosition());
503 } else if (e->type() == QEvent::FocusIn) {
504 QLineEdit *edit = qobject_cast<QLineEdit *>(obj);
505
506 if (edit) {
507 QLineEdit::setCursorPosition(cursorPosition());
511508 }
512509
513510 d_func()->setFocus(true);
514 } else if(e->type() == QEvent::FocusOut || e->type() == QEvent::MouseButtonPress) {
511 } else if (e->type() == QEvent::FocusOut || e->type() == QEvent::MouseButtonPress) {
515512 D_D(DIpv4LineEdit);
516513
517514 bool focus = false;
518515
519 for(QLineEdit *edit : d->editList) {
516 for (QLineEdit *edit : d->editList) {
520517 edit->setSelection(edit->cursorPosition(), 0);
521518
522519 focus = edit->hasFocus() | focus;
523520 }
524521
525 if(!focus)
522 if (!focus)
526523 d_func()->setFocus(false);
527524 }
528525
529 return DLineEdit::eventFilter(obj, e);
526 return QLineEdit::eventFilter(obj, e);
527 }
528
529 DIpv4LineEdit::DIpv4LineEdit(DIpv4LineEditPrivate &q, QWidget *parent)
530 : QLineEdit(parent)
531 , DObject(q)
532 {
533
534 }
535
536 void DIpv4LineEdit::resizeEvent(QResizeEvent *event)
537 {
538 D_D(DIpv4LineEdit);
539 d->editMainWidget->resize(event->size());
530540 }
531541
532542 DWIDGET_END_NAMESPACE
1717 #ifndef DIPV4LINEEDIT_H
1818 #define DIPV4LINEEDIT_H
1919
20 #include "dlineedit.h"
20 #include <dtkwidget_global.h>
21 #include <DObject>
22
23 #include <QLineEdit>
2124
2225 DWIDGET_BEGIN_NAMESPACE
2326
2427 class DIpv4LineEditPrivate;
25 class LIBDTKWIDGETSHARED_EXPORT DIpv4LineEdit : public DLineEdit
28 class LIBDTKWIDGETSHARED_EXPORT DIpv4LineEdit : public QLineEdit, public DCORE_NAMESPACE::DObject
2629 {
2730 Q_OBJECT
2831
32 Q_DISABLE_COPY(DIpv4LineEdit)
33 D_DECLARE_PRIVATE(DIpv4LineEdit)
2934 Q_PROPERTY(QString displayText READ displayText)
3035 Q_PROPERTY(int cursorPosition READ cursorPosition WRITE setCursorPosition)
3136 Q_PROPERTY(Qt::Alignment alignment READ alignment)
5055 void setSelection(int start, int length);
5156 void selectAll();
5257
58 Q_SIGNALS:
59 void focusChanged(bool focus);
60
5361 protected:
5462 bool eventFilter(QObject *obj, QEvent *e) Q_DECL_OVERRIDE;
5563
5664 private:
65 DIpv4LineEdit(DIpv4LineEditPrivate &q, QWidget *parent);
5766 void setPlaceholderText(QString placeholderText);
5867 void setClearButtonEnabled(bool clearButtonEnabled);
5968
60 D_DECLARE_PRIVATE(DIpv4LineEdit)
61
6269 Q_PRIVATE_SLOT(d_func(), void _q_updateLineEditText())
6370 Q_PRIVATE_SLOT(d_func(), void _q_setIpLineEditText(const QString &))
71
72 protected:
73 void resizeEvent(QResizeEvent *event) override;
6474 };
6575
6676 DWIDGET_END_NAMESPACE
0 #include "DApplication"
1 #include "dkeysequenceedit.h"
2 #include "dstyle.h"
3
4 #include "private/dkeysequenceedit_p.h"
5
6 #include <QDebug>
7 #include <QKeyEvent>
8 #include <DPalette>
9 #include <DFrame>
10 #include <DTipLabel>
11
12 #include <QVBoxLayout>
13
14 DWIDGET_BEGIN_NAMESPACE
15
16 class DKeyLabel : public DFrame
17 {
18 public:
19 DKeyLabel(QString text, QWidget *parent = nullptr)
20 : DFrame(parent)
21 {
22 label = new DTipLabel(text);
23 QVBoxLayout *layout = new QVBoxLayout(this);
24 layout->setContentsMargins(layout->contentsMargins().left(), 0, layout->contentsMargins().right(), 0);
25 layout->setSpacing(0);
26 label->setForegroundRole(DPalette::LightLively);
27 layout->addWidget(label);
28 }
29 private:
30 DTipLabel *label;
31 };
32
33 class DKeyWidget : public QWidget
34 {
35 public:
36 DKeyWidget(QWidget *parent = nullptr)
37 : QWidget(parent)
38 {
39 QHBoxLayout *layout = new QHBoxLayout(this);
40 label = new DTipLabel(qApp->translate("DKeySequenceEdit", "Enter a new shortcut"));
41
42 layout->addWidget(label);
43 }
44
45 void setKeyVisible(bool visible) //true 隐藏文字 false显示文字
46 {
47 label->setVisible(!visible);
48 keyHide(!visible);
49 fastMode = visible;
50 }
51
52 bool isFastMode()
53 {
54 return fastMode;
55 }
56
57 void keyHide(bool hide)
58 {
59 for (int i = 0; i < labelList.count(); i++) {
60 labelList.at(i)->setVisible(!hide);
61 }
62 }
63
64 void keyDelete()
65 {
66 for (int i = 0; i < labelList.count(); i++) {
67 labelList.at(i)->deleteLater();
68 }
69 labelList.clear();
70 }
71
72 void setKeyName(const QStringList &keyList);
73 private:
74 DTipLabel *label;
75
76 QList<DKeyLabel *> labelList;
77 bool fastMode = false; //true 显示快捷键 false 显示文字简介
78 protected:
79 void mousePressEvent(QMouseEvent *event) override
80 {
81 parentWidget()->setFocus();
82 if (fastMode) {
83 setKeyVisible(false);
84 }
85 QWidget::mousePressEvent(event);
86 }
87
88 void focusOutEvent(QFocusEvent *event) override
89 {
90 Q_UNUSED(event)
91
92 if (fastMode) {
93 return;
94 } else {
95 setKeyVisible(true);
96 for (int i = 0; i < labelList.count(); i++) {
97 labelList.at(i)->setVisible(true);
98 }
99 if (labelList.isEmpty())
100 setKeyVisible(false);
101 }
102 }
103 };
104
105 /*!
106 * \~chinese \brief DKeySequenceEdit::DKeySequenceEdit 一个快捷键编辑展示的控件
107 * \~chinese \param parent
108 */
109 DKeySequenceEdit::DKeySequenceEdit(QWidget *parent)
110 : QLineEdit(parent)
111 , DObject(*new DKeySequenceEditPrivate(this))
112 {
113 Q_D(DKeySequenceEdit);
114
115 d->init();
116 }
117
118 /*!
119 * \~chinese \brief DKeySequenceEdit::clear 清空内容
120 */
121 void DKeySequenceEdit::clear()
122 {
123 D_D(DKeySequenceEdit);
124
125 d->rightWidget->keyDelete();
126 d->rightWidget->setKeyVisible(false);
127 d->sequencekey = QKeySequence();
128 }
129
130 /*!
131 * \~chinese \brief DKeySequenceEdit::setKeySequence 设定快捷键
132 * \~chinese \param keySequence 快捷键
133 * \~chinese \return true设定成功 false设定失败
134 */
135 bool DKeySequenceEdit::setKeySequence(const QKeySequence &keySequence)
136 {
137 D_D(DKeySequenceEdit);
138
139 QStringList keyText;
140 keyText << keySequence.toString().split("+", QString::SkipEmptyParts);
141
142 if (keyText.isEmpty() || (keyText.count() > 4)) {
143 return false;
144 }
145
146 for (int i = 0; i < keyText.count(); ++i) {
147 keyText[i] = d->replaceWriting(keyText[i]);
148 }
149
150 d->rightWidget->setKeyName(keyText);
151 d->sequencekey = keySequence;
152 Q_EMIT keySequenceChanged(keySequence);
153 return true;
154 }
155
156 /*!
157 * \~chinese \brief DKeySequenceEdit::keySequence 返回设定的快捷键
158 * \~chinese \return
159 */
160 QKeySequence DKeySequenceEdit::keySequence()
161 {
162 D_D(DKeySequenceEdit);
163 return d->sequencekey;
164 }
165
166 /*!
167 * \~chinese \brief DKeySequenceEdit::ShortcutDirection 快捷键文本展示方向
168 * \~chinese \param alig 设定方向的枚举值
169 */
170 void DKeySequenceEdit::ShortcutDirection(Qt::AlignmentFlag alig)
171 {
172 if (alig == Qt::AlignLeft || alig == Qt::AlignRight) {
173 layout()->setAlignment(alig);
174 setAlignment(alig == Qt::AlignLeft ? Qt::AlignRight : Qt::AlignLeft);
175 }
176 }
177
178 void DKeySequenceEdit::keyPressEvent(QKeyEvent *e)
179 {
180 D_D(DKeySequenceEdit);
181
182 if (d->rightWidget->isFastMode()) {
183 return;
184 }
185
186 int nextKey = e->key();
187
188 if (nextKey == Qt::Key_Control
189 || nextKey == Qt::Key_Shift
190 || nextKey == Qt::Key_Alt
191 || nextKey == Qt::Key_unknown
192 || nextKey == Qt::Key_Meta) {
193 return;
194 }
195
196 QString modifiers = QKeySequence(e->modifiers()).toString();
197 QString key = QKeySequence(e->key()).toString();
198
199 QKeySequence sequence(modifiers + key);
200 bool flags = setKeySequence(sequence);
201 if (!flags)
202 return;
203
204 d_func()->sequencekey = sequence;
205 Q_EMIT editingFinished(sequence);
206 }
207
208 bool DKeySequenceEdit::event(QEvent *e)
209 {
210 D_D(DKeySequenceEdit);
211 if (e->type() == QEvent::FocusOut) {
212 if (!d->sequencekey.isEmpty())
213 d->rightWidget->setKeyVisible(true);
214 }
215 return QLineEdit::event(e);
216 }
217
218
219 DKeySequenceEditPrivate::DKeySequenceEditPrivate(DKeySequenceEdit *q)
220 : DObjectPrivate(q)
221 {
222 }
223
224 void DKeySequenceEditPrivate::init()
225 {
226 Q_Q(DKeySequenceEdit);
227
228 QHBoxLayout *layout = new QHBoxLayout(q);
229 rightWidget = new DKeyWidget(q);
230
231 layout->setMargin(0);
232 layout->setSpacing(0);
233
234 layout->addWidget(rightWidget, 0, Qt::AlignRight);
235
236 q->setReadOnly(true);
237 q->setFocusPolicy(Qt::FocusPolicy::ClickFocus);
238
239 copywritingList.insert("PgUp", "PageUp");
240 copywritingList.insert("PgDown", "PageDown");
241 copywritingList.insert("Return", "Enter");
242 }
243
244 QString DKeySequenceEditPrivate::replaceWriting(QString copywriting)
245 {
246 return copywritingList.value(copywriting, copywriting);
247 }
248
249 void DKeyWidget::setKeyName(const QStringList &keyList)
250 {
251 keyDelete();
252
253 for (QString key : keyList) {
254 DKeyLabel *label = new DKeyLabel(key);
255 layout()->addWidget(label);
256 labelList.append(label);
257 }
258 setKeyVisible(true);
259 }
260
261 DWIDGET_END_NAMESPACE
0 #ifndef DKEYSEQUENCEEDIT_H
1 #define DKEYSEQUENCEEDIT_H
2
3 #include <dobject.h>
4 #include <dtkwidget_global.h>
5
6 #include <QKeySequenceEdit>
7 #include <QLineEdit>
8
9 DWIDGET_BEGIN_NAMESPACE
10
11 class DKeySequenceEditPrivate;
12 class LIBDTKWIDGETSHARED_EXPORT DKeySequenceEdit : public QLineEdit, public DTK_CORE_NAMESPACE::DObject
13 {
14 Q_OBJECT
15 Q_DISABLE_COPY(DKeySequenceEdit)
16 D_DECLARE_PRIVATE(DKeySequenceEdit)
17
18 public:
19 explicit DKeySequenceEdit(QWidget *parent = nullptr);
20
21 void clear();
22 bool setKeySequence(const QKeySequence &keySequence);
23 QKeySequence keySequence();
24 void ShortcutDirection(Qt::AlignmentFlag alig);
25
26 Q_SIGNALS:
27 void editingFinished(const QKeySequence &keySequence);
28 void keySequenceChanged(const QKeySequence &keySequence);
29
30 protected:
31 void keyPressEvent(QKeyEvent *event) override;
32 bool event(QEvent *e) override;
33 };
34
35 DWIDGET_END_NAMESPACE
36
37 #endif // DKEYSEQUENCEEDIT_H
38
39
00 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
26 *
37 * This program is free software: you can redistribute it and/or modify
48 * it under the terms of the GNU General Public License as published by
1317 * You should have received a copy of the GNU General Public License
1418 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1519 */
16
1720 #include "dlabel.h"
18 #include "dthememanager.h"
21 #include "private/dlabel_p.h"
22
23 #include <DApplicationHelper>
24
25 #include <private/qlabel_p.h>
1926
2027 DWIDGET_BEGIN_NAMESPACE
21
22 /*!
23 * \~english \class DLabel
24 * \~english \brief The DLabel class is a direct subclass of QLabel, styled by deepin to
25 * provide better style unification.
26 */
2728
2829 /*!
2930 * \~chinese \class DLabel
30 * \~chinese \brief DLabel 是 QLabel 的子类,为 deepin 提供更好的的风格统一。
31 * \~chinese \brief DLabel一个重新实现的 QLabel
32 * \~chinese \li DLabel提供了将 DLabel 显示在指定位置的函数
33 * \~chinese \li DLabel提供了改变字体颜色的函数
3134 */
3235
3336 /*!
34 * \~english \brief DLabel::DLabel constructs an instance of DLabel.
35 * \~english \param parent is passed to QLabel constructor.
36 * \~english \param f is passed to QLabel constructor.
37 */
38
39 /*!
40 * \~chinese \brief DLabel 的构造函数.
41 * \~chinese \param parent
42 * \~chinese \param f
37 * \~chinese \brief DLabel的构造函数
38 * \~chinese \param text文本信息
39 * \~chinese \param parent参数被发送到 QLabel 构造函数。
4340 */
4441 DLabel::DLabel(QWidget *parent, Qt::WindowFlags f)
4542 : QLabel(parent, f)
46 {
47 DThemeManager::registerWidget(this);
43 , DObject(*new DLabelPrivate(this))
44 {
45 D_D(DLabel);
46 d->init();
47 }
48
49 DLabel::DLabel(const QString &text, QWidget *parent)
50 : QLabel(text, parent)
51 , DObject(*new DLabelPrivate(this))
52 {
53 D_D(DLabel);
54 d->init();
55 }
56
57 DLabel::~DLabel()
58 {
59
60 }
61
62 void DLabel::setForegroundRole(QPalette::ColorRole role)
63 {
64 D_D(DLabel);
65
66 d->color = DPalette::NoType;
67 QLabel::setForegroundRole(role);
4868 }
4969
5070 /*!
51 * \~english \brief DLabel::DLabel constructs an instance of DLabel.
52 * \~english \param text is used to initialize the content, passed to QLabel constructor.
53 * \~english \param parent is passed to QLabel constructor.
54 * \~english \param f is passed to QLabel constructor.
71 * \brief DLabel::setForegroundRole显示的字体颜色
72 * \param color字体颜色
5573 */
56
57 /*!
58 * \~chinese \brief DLabel 的重载构造函数
59 * \~chinese \param text 用于初始化本文内容,传递给 QLabel 构造函数
60 * \~chinese \param parent 初始化 QLabel 的构造函数
61 * \~chinese \param f 初始化 QLabel 的构造函数
62 */
63 DLabel::DLabel(const QString &text, QWidget *parent, Qt::WindowFlags f)
64 : QLabel(text, parent, f)
65 {
66 DThemeManager::registerWidget(this);
74 void DLabel::setForegroundRole(DPalette::ColorType color)
75 {
76 D_D(DLabel);
77 d->color = color;
78 }
79
80 void DLabel::setElideMode(Qt::TextElideMode elideMode)
81 {
82 D_D(DLabel);
83 if (d->elideMode == elideMode) {
84 return;
85 }
86 d->elideMode = elideMode;
87 update();
88 }
89
90 Qt::TextElideMode DLabel::elideMode() const
91 {
92 D_DC(DLabel);
93 return d->elideMode;
94 }
95
96 DLabel::DLabel(DLabelPrivate &dd, QWidget *parent)
97 : QLabel(parent)
98 , DObject(dd)
99 {
100 dd.init();
101 }
102
103 void DLabel::initPainter(QPainter *painter) const
104 {
105 D_DC(DLabel);
106 QLabel::initPainter(painter);
107 if (d->color != DPalette::NoType) {
108 QBrush color = DApplicationHelper::instance()->palette(this).brush(d->color);
109 painter->setPen(QPen(color.color()));
110 }
111 }
112
113 void DLabel::paintEvent(QPaintEvent *event)
114 {
115 Q_UNUSED(event)
116 QLabelPrivate *d = static_cast<QLabelPrivate*>(d_ptr.data());
117 QStyle *style = QWidget::style();
118 QPainter painter(this);
119 drawFrame(&painter);
120 QRect cr = contentsRect();
121 cr.adjust(d->margin, d->margin, -d->margin, -d->margin);
122 int align = QStyle::visualAlignment(d->isTextLabel ? DLabelPrivate::textDirection(d)
123 : layoutDirection(), QFlag(d->align));
124
125 #if QT_CONFIG(movie)
126 if (d->movie && !d->movie->currentPixmap().isNull()) {
127 if (d->scaledcontents)
128 style->drawItemPixmap(&painter, cr, align, d->movie->currentPixmap().scaled(cr.size()));
129 else
130 style->drawItemPixmap(&painter, cr, align, d->movie->currentPixmap());
131 }
132 else
133 #endif
134 if (d->isTextLabel) {
135 QRectF lr = DLabelPrivate::layoutRect(d).toAlignedRect();
136 QStyleOption opt;
137 opt.initFrom(this);
138
139 if (d->control) {
140 #ifndef QT_NO_SHORTCUT
141 const bool underline = (bool)style->styleHint(QStyle::SH_UnderlineShortcut, 0, this, 0);
142 if (d->shortcutId != 0
143 && underline != d->shortcutCursor.charFormat().fontUnderline()) {
144 QTextCharFormat fmt;
145 fmt.setFontUnderline(underline);
146 d->shortcutCursor.mergeCharFormat(fmt);
147 }
148 #endif
149 DLabelPrivate::ensureTextLayouted(d);
150 QAbstractTextDocumentLayout::PaintContext context;
151 // Adjust the palette
152 context.palette = opt.palette;
153
154 if (d_func()->color != DPalette::NoType) {
155 context.palette.setBrush(QPalette::Text, DApplicationHelper::instance()->palette(this).brush(d_func()->color));
156 } else if (foregroundRole() != QPalette::Text && isEnabled()) {
157 context.palette.setColor(QPalette::Text, context.palette.color(foregroundRole()));
158 }
159
160 painter.save();
161 painter.translate(lr.topLeft());
162 painter.setClipRect(lr.translated(-lr.x(), -lr.y()));
163 d->control->setPalette(context.palette);
164 d->control->drawContents(&painter, QRectF(), this);
165 painter.restore();
166 } else {
167 int flags = align | (DLabelPrivate::textDirection(d) == Qt::LeftToRight ? Qt::TextForceLeftToRight
168 : Qt::TextForceRightToLeft);
169 if (d->hasShortcut) {
170 flags |= Qt::TextShowMnemonic;
171 if (!style->styleHint(QStyle::SH_UnderlineShortcut, &opt, this))
172 flags |= Qt::TextHideMnemonic;
173 }
174
175 QPalette palette = opt.palette;
176
177 if (d_func()->color != DPalette::NoType) {
178 palette.setBrush(foregroundRole(), DApplicationHelper::instance()->palette(this).brush(d_func()->color));
179 }
180
181 QString text = d->text;
182 if (elideMode() != Qt::ElideNone) {
183 const QFontMetrics fm(fontMetrics());
184 text = fm.elidedText(text, elideMode(), width(), Qt::TextShowMnemonic);
185 }
186 style->drawItemText(&painter, lr.toRect(), flags, palette, isEnabled(), text, foregroundRole());
187 }
188 } else
189 #ifndef QT_NO_PICTURE
190 if (d->picture) {
191 QRect br = d->picture->boundingRect();
192 int rw = br.width();
193 int rh = br.height();
194 if (d->scaledcontents) {
195 painter.save();
196 painter.translate(cr.x(), cr.y());
197 painter.scale((double)cr.width()/rw, (double)cr.height()/rh);
198 painter.drawPicture(-br.x(), -br.y(), *d->picture);
199 painter.restore();
200 } else {
201 int xo = 0;
202 int yo = 0;
203 if (align & Qt::AlignVCenter)
204 yo = (cr.height()-rh)/2;
205 else if (align & Qt::AlignBottom)
206 yo = cr.height()-rh;
207 if (align & Qt::AlignRight)
208 xo = cr.width()-rw;
209 else if (align & Qt::AlignHCenter)
210 xo = (cr.width()-rw)/2;
211 painter.drawPicture(cr.x()+xo-br.x(), cr.y()+yo-br.y(), *d->picture);
212 }
213 } else
214 #endif
215 if (d->pixmap && !d->pixmap->isNull()) {
216 QPixmap pix;
217 if (d->scaledcontents) {
218 QSize scaledSize = cr.size() * devicePixelRatioF();
219 if (!d->scaledpixmap || d->scaledpixmap->size() != scaledSize) {
220 if (!d->cachedimage)
221 d->cachedimage = new QImage(d->pixmap->toImage());
222 delete d->scaledpixmap;
223 QImage scaledImage =
224 d->cachedimage->scaled(scaledSize,
225 Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
226 d->scaledpixmap = new QPixmap(QPixmap::fromImage(scaledImage));
227 d->scaledpixmap->setDevicePixelRatio(devicePixelRatioF());
228 }
229 pix = *d->scaledpixmap;
230 } else
231 pix = *d->pixmap;
232 QStyleOption opt;
233 opt.initFrom(this);
234 if (!isEnabled())
235 pix = style->generatedIconPixmap(QIcon::Disabled, pix, &opt);
236 style->drawItemPixmap(&painter, cr, align, pix);
237 }
238 }
239
240 DLabelPrivate::DLabelPrivate(DLabel *q)
241 : DObjectPrivate(q)
242 {
243 }
244
245 void DLabelPrivate::init()
246 {
247
248 }
249
250 Qt::LayoutDirection DLabelPrivate::textDirection(QLabelPrivate *d)
251 {
252 if (d->control) {
253 QTextOption opt = d->control->document()->defaultTextOption();
254 return opt.textDirection();
255 }
256
257 return d->text.isRightToLeft() ? Qt::RightToLeft : Qt::LeftToRight;
258 }
259
260 QRectF DLabelPrivate::documentRect(QLabelPrivate *d)
261 {
262 QLabel *q = qobject_cast<QLabel*>(d->q_ptr);
263 Q_ASSERT_X(d->isTextLabel, "documentRect", "document rect called for label that is not a text label!");
264 QRect cr = q->contentsRect();
265 cr.adjust(d->margin, d->margin, -d->margin, -d->margin);
266 const int align = QStyle::visualAlignment(d->isTextLabel ? textDirection(d)
267 : q->layoutDirection(), QFlag(d->align));
268 int m = d->indent;
269 if (m < 0 && q->frameWidth()) // no indent, but we do have a frame
270 m = q->fontMetrics().horizontalAdvance(QLatin1Char('x')) / 2 - d->margin;
271 if (m > 0) {
272 if (align & Qt::AlignLeft)
273 cr.setLeft(cr.left() + m);
274 if (align & Qt::AlignRight)
275 cr.setRight(cr.right() - m);
276 if (align & Qt::AlignTop)
277 cr.setTop(cr.top() + m);
278 if (align & Qt::AlignBottom)
279 cr.setBottom(cr.bottom() - m);
280 }
281 return cr;
282 }
283
284 QRectF DLabelPrivate::layoutRect(QLabelPrivate *d)
285 {
286 QRectF cr = documentRect(d);
287 if (!d->control)
288 return cr;
289 ensureTextLayouted(d);
290 // Caculate y position manually
291 qreal rh = d->control->document()->documentLayout()->documentSize().height();
292 qreal yo = 0;
293 if (d->align & Qt::AlignVCenter)
294 yo = qMax((cr.height()-rh)/2, qreal(0));
295 else if (d->align & Qt::AlignBottom)
296 yo = qMax(cr.height()-rh, qreal(0));
297 return QRectF(cr.x(), yo + cr.y(), cr.width(), cr.height());
298 }
299
300 void DLabelPrivate::ensureTextLayouted(QLabelPrivate *d)
301 {
302 if (d->textLayoutDirty) {
303 if (d->textDirty) {
304 if (d->control) {
305 QTextDocument *doc = d->control->document();
306 if (d->textDirty) {
307 #ifndef QT_NO_TEXTHTMLPARSER
308 #if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
309 if (d->textformat == Qt::TextFormat::RichText)
310 #else
311 if (d->isRichText)
312 #endif
313 doc->setHtml(d->text);
314 else
315 doc->setPlainText(d->text);
316 #else
317 doc->setPlainText(d->text);
318 #endif
319 doc->setUndoRedoEnabled(false);
320
321 #ifndef QT_NO_SHORTCUT
322 if (d->hasShortcut) {
323 // Underline the first character that follows an ampersand (and remove the others ampersands)
324 int from = 0;
325 bool found = false;
326 QTextCursor cursor;
327 while (!(cursor = d->control->document()->find((QLatin1String("&")), from)).isNull()) {
328 cursor.deleteChar(); // remove the ampersand
329 cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor);
330 from = cursor.position();
331 if (!found && cursor.selectedText() != QLatin1String("&")) { //not a second &
332 found = true;
333 d->shortcutCursor = cursor;
334 }
335 }
336 }
337 #endif
338 }
339 }
340 d->textDirty = false;
341 }
342
343 if (d->control) {
344 QTextDocument *doc = d->control->document();
345 QTextOption opt = doc->defaultTextOption();
346
347 opt.setAlignment(QFlag(d->align));
348
349 if (d->align & Qt::TextWordWrap)
350 opt.setWrapMode(QTextOption::WordWrap);
351 else
352 opt.setWrapMode(QTextOption::ManualWrap);
353
354 doc->setDefaultTextOption(opt);
355
356 QTextFrameFormat fmt = doc->rootFrame()->frameFormat();
357 fmt.setMargin(0);
358 doc->rootFrame()->setFrameFormat(fmt);
359 doc->setTextWidth(DLabelPrivate::documentRect(d).width());
360 }
361 d->textLayoutDirty = false;
362 }
67363 }
68364
69365 DWIDGET_END_NAMESPACE
00 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
26 *
37 * This program is free software: you can redistribute it and/or modify
48 * it under the terms of the GNU General Public License as published by
1317 * You should have received a copy of the GNU General Public License
1418 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1519 */
16
1720 #ifndef DLABEL_H
1821 #define DLABEL_H
1922
23 #include <dobject.h>
24 #include <dstyle.h>
25 #include <dtkwidget_global.h>
2026
2127 #include <QLabel>
2228
23 #include "dtkwidget_global.h"
24
2529 DWIDGET_BEGIN_NAMESPACE
2630
27 class LIBDTKWIDGETSHARED_EXPORT DLabel : public QLabel
31 class DLabelPrivate;
32 class LIBDTKWIDGETSHARED_EXPORT DLabel : public QLabel, public DTK_CORE_NAMESPACE::DObject
2833 {
2934 Q_OBJECT
35 Q_DISABLE_COPY(DLabel)
36 D_DECLARE_PRIVATE(DLabel)
37 public:
38 explicit DLabel(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
39 DLabel(const QString &text, QWidget *parent = nullptr);
40 ~DLabel();
3041
31 public:
32 DLabel(QWidget * parent = 0, Qt::WindowFlags f = 0);
33 DLabel(const QString & text, QWidget * parent = 0, Qt::WindowFlags f = 0);
42 void setForegroundRole(QPalette::ColorRole role);
43 void setForegroundRole(DPalette::ColorType color);
44 void setElideMode(Qt::TextElideMode elideMode);
45 Qt::TextElideMode elideMode() const;
46
47 protected:
48 DLabel(DLabelPrivate &dd, QWidget *parent = nullptr);
49
50 void initPainter(QPainter *painter) const override;
51 void paintEvent(QPaintEvent *event) override;
3452 };
3553
3654 DWIDGET_END_NAMESPACE
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1515 */
1616
17 #include <QMenu>
18 #include <QDBusInterface>
19 #include <QDBusReply>
20 #include <QDebug>
21 #include <QTimer>
22
1723 #include "dlineedit.h"
18 #include "dthememanager.h"
1924 #include "private/dlineedit_p.h"
2025 #include "darrowrectangle.h"
21 #include "dstyleoption.h"
22
23 #include <QHBoxLayout>
24 #include <QResizeEvent>
25 #include <QWidgetAction>
26
27 #include <DToolTip>
28 #include <DPalette>
2629
2730 #define private public
2831 #ifndef slots
3437 DWIDGET_BEGIN_NAMESPACE
3538
3639 /*!
37 * \~english \class DLineEdit
38 * \~english \brief The DLineEdit class provides a styled QLineEdit.
39 *
40 * \~english DLineEdit has an optional action button (DImageButton) at the right side which can be used
41 * \~english to provide extra user interaction, for example: to change the echo mode of
42 * the line edit.
43 *
44 * \~english Also, DLineEdit can be set on or off alert mode, warning the user of some
45 * errors.
46 */
47
48 /*!
49 * \~english \brief DLineEdit::DLineEdit constructs an instance of DLineEdit.
50 * \~english \param parent is passed to QLineEdit constructor.
51 */
52
53 /*!
5440 * \~chinese \class DLineEdit
55 * \~chinese \brief DLineEdit提供了一个修改过的QLineEdit样式
56 *
57 * \~chinese DLineEdit右侧提供了可选的动作按钮,可以使用额外的用户交互,例如: 改变密码显示
41 * \~chinese \brief DLineEdit一个聚合 QLineEdit 的输入框
42 * \~chinese \li DLineEdit提供了向输入框左右两端插入控件的函数
43 * \~chinese \li DLineEdit提供了带警告颜色的输入框
44 * \~chinese \li DLineEdit提供了带文本警告消息的输入框
5845 */
5946
6047 /*!
6148 * \~chinese \brief DLineEdit的构造函数
62 *
63 * \~chinese \param parent 调用QLineEdit的构造函数
49 * \~chinese \param parent参数被发送到 QWidget 构造函数。
6450 */
6551 DLineEdit::DLineEdit(QWidget *parent)
66 : QLineEdit(parent),
67 DObject(*new DLineEditPrivate(this))
68 {
69 Q_D(DLineEdit);
52 : QWidget(parent)
53 , DObject(*new DLineEditPrivate(this))
54 {
55 D_D(DLineEdit);
7056 d->init();
7157 }
7258
59 DLineEdit::~DLineEdit()
60 {
61
62 }
63
64 /*!
65 * \~chinese \brief DLineEdit::lineEdit返回 QLineEdit 对象
66 * \~chinese \row 若 DLineEdit 不满足输入框的使用需求,请用此函数抛出的对象
67 * \~chinese \return
68 */
69 QLineEdit *DLineEdit::lineEdit() const
70 {
71 D_DC(DLineEdit);
72 return d->lineEdit;
73 }
74
7375 DLineEdit::DLineEdit(DLineEditPrivate &q, QWidget *parent)
74 : QLineEdit(parent),
75 DObject(q)
76 {
77 Q_D(DLineEdit);
78 d->init();
79 }
80
81 /*!
82 * \~chinese \brief 设置是否显示警告
83 *
84 * \~chinese @param isAlert 是否显示警告
76 : QWidget(parent)
77 , DObject(q)
78 {
79 d_func()->init();
80 }
81
82 /*!
83 * \~chinese \brief DLineEdit::setAlert设置是否开启警告模式
84 * \~chinese \row 警告模式,开启警告模式,输入框内将显示警告颜色
85 * \~chinese \param isAlert是否开启警告模式
8586 */
8687 void DLineEdit::setAlert(bool isAlert)
8788 {
8889 Q_D(DLineEdit);
89
90 if (isAlert == d->m_isAlert) {
90 //qDebug() << "setAlert..." << isAlert;
91 d->control->setAlert(isAlert);
92 }
93
94 /*!
95 * \~chinese \brief DLineEdit::alert返回当前是否处于警告模式
96 */
97 bool DLineEdit::isAlert() const
98 {
99 D_DC(DLineEdit);
100 return d->control->isAlert();
101 }
102
103 void DLineEdit::showAlertMessage(const QString &text, int duration)
104 {
105 showAlertMessage(text, nullptr, duration);
106 }
107
108 /*!
109 * \~chinese \brief DLineEdit::showAlertMessage显示警告消息
110 * \~chinese \row 显示指定的文本消息,超过指定时间后警告消息消失.
111 * \~chinese \row \note 时间参数为-1时,警告消息将一直存在
112 * \~chinese \param text警告的文本
113 * \~chinese \param duration显示的时间长度,单位毫秒
114 * \~chinese \param parent tooltip跟随
115 */
116 void DLineEdit::showAlertMessage(const QString &text, QWidget *follower, int duration)
117 {
118 D_D(DLineEdit);
119 d->control->showAlertMessage(text, follower ? follower : this, duration);
120 }
121
122 /*!
123 * \~chinese \brief DLineEdit::setAlertMessageAlignment 指定对齐方式
124 * \~chinese \row 现只支持(下)左,(下)右,(下水平)居中, 默认左对齐.
125 * \~chinese \row \note 参数为其他时,默认左对齐
126 * \~chinese \param alignment 消息对齐方式
127 */
128 void DLineEdit::setAlertMessageAlignment(Qt::Alignment alignment)
129 {
130 D_D(DLineEdit);
131 d->control->setMessageAlignment(alignment);
132 }
133
134 Qt::Alignment DLineEdit::alertMessageAlignment() const
135 {
136 D_DC(DLineEdit);
137 return d->control->messageAlignment();
138 }
139
140 /*!
141 * \~chinese \brief DLineEdit:: hideAlertMessage隐藏警告消息框
142 */
143
144 void DLineEdit:: hideAlertMessage()
145 {
146 Q_D(DLineEdit);
147 if (d->control) {
148 d->control->hideAlertMessage();
149 }
150 // if (d->frame) {
151 // d->frame->hide();
152 // if (d->follower) {
153 // this->removeEventFilter(d->follower);
154 // d->follower = nullptr;
155 // }
156 // }
157 }
158
159 /*!
160 * \~chinese \brief DLineEdit::setLeftWidgets向输入框左侧添加控件
161 * \~chinese \row 将 QList 里的控件插入到输入框的左侧
162 * \~chinese \row \note 多次调用,只有最后一次调用生效
163 * \~chinese \param list存储控件的列表
164 */
165
166 void DLineEdit::setLeftWidgets(const QList<QWidget *> &list)
167 {
168 Q_D(DLineEdit);
169
170 if (d->leftWidget != nullptr) {
171 d->leftWidget->hide();
172 d->leftWidget->deleteLater();
173 d->leftWidget = nullptr;
174 }
175
176 if (list.isEmpty())
91177 return;
178
179 d->leftWidget = new QWidget;
180 QHBoxLayout *layout = new QHBoxLayout(d->leftWidget);
181 layout->setContentsMargins(0, 0, 0, 0);
182 d->hLayout->insertWidget(0, d->leftWidget);
183
184 QList<QWidget *>::const_iterator itor;
185
186 for (itor = list.constBegin(); itor != list.constEnd(); itor++) {
187 layout->addWidget(*itor);
92188 }
93189
94 d->m_isAlert = isAlert;
95
96 update();
97
98 Q_EMIT alertChanged(isAlert);
99 }
100
101 /*!
102 * \~english\property DLineEdit::alert
103 * \~english \brief This property shows whether the line edit is in alert mode or not.
104 *
105 * There'll be a extra frame colored in orage like color showing if the alert
106 * mode is on, to remind the user that the input is wrong.
107 */
108
109 /*!
110 * \~chinese \property DLineEdit::alert
111 * \~chinese \brief 该属性会返回当前是否处于警告模式
112 *
113 * 将会有一个警告的颜色在额外的边框上显示,如果警告模式开启,将会提示用户输入错误
114 */
115
116 /*!
117 * \~chinese \brief 返回当前是否处于警告模式
118 *
119 * 将会有一个警告的颜色在额外的边框上显示,如果警告模式开启,将会提示用户输入错误
120 * @return true
121 * @return false
122 */
123 bool DLineEdit::isAlert() const
190 d->leftWidget->adjustSize();
191 }
192
193 /*!
194 * \~chinese \brief DLineEdit::setRightWidgets向输入框右侧添加控件
195 * \~chinese \row 将 QList 里的控件插入到输入框的右侧
196 * \~chinese \row \note 多次调用,只有最后一次调用生效
197 * \~chinese \param list存储控件的列表
198 */
199
200 void DLineEdit::setRightWidgets(const QList<QWidget *> &list)
201 {
202 Q_D(DLineEdit);
203
204 if (d->rightWidget != nullptr) {
205 d->rightWidget->hide();
206 d->rightWidget->deleteLater();
207 d->rightWidget = nullptr;
208 }
209
210 if (list.isEmpty())
211 return;
212
213 d->rightWidget = new QWidget;
214 QHBoxLayout *layout = new QHBoxLayout(d->rightWidget);
215 layout->setContentsMargins(0, 0, 0, 0);
216 d->hLayout->addWidget(d->rightWidget);
217 QList<QWidget *>::const_iterator itor;
218
219 for (itor = list.constBegin(); itor != list.constEnd(); itor++) {
220 layout->addWidget(*itor);
221 }
222
223 d->rightWidget->adjustSize();
224 }
225
226 /*!
227 * \~chinese \brief DLineEdit::setLeftWidgetsVisible是否隐藏输入框左侧控件
228 * \~chinese \param visible是否隐藏
229 */
230 void DLineEdit::setLeftWidgetsVisible(bool visible)
231 {
232 Q_D(DLineEdit);
233 d->leftWidget->setVisible(visible);
234 }
235 /**
236 * \~chinese \brief DLineEdit::setRightWidgetsVisible是否隐藏输入框右侧控件
237 * \~chinese \param visible是否隐藏
238 */
239 void DLineEdit::setRightWidgetsVisible(bool visible)
240 {
241 Q_D(DLineEdit);
242 d->rightWidget->setVisible(visible);
243 }
244
245 /*!
246 * \~chinese \brief DLineEdit::setClearButtonEnabled 设置清除按钮是否可见
247 * \~chinese \param enable true 按钮可见 false 按钮不可见
248 */
249 void DLineEdit::setClearButtonEnabled(bool enable)
250 {
251 Q_D(DLineEdit);
252 d->lineEdit->setClearButtonEnabled(enable);
253 }
254
255 /*!
256 * \~chinese \brief DLineEdit::isClearButtonEnabled
257 * \~chinese \return true 清除按钮可见 false 清除按钮不可见
258 */
259 bool DLineEdit::isClearButtonEnabled() const
124260 {
125261 D_DC(DLineEdit);
126
127 return d->m_isAlert;
128 }
129
130 /*!
131 * \~chinese \brief 设置的文本会在警告模式下显示
132 *
133 * @param text 警告的文本
134 * @param duration 显示的时间长度
135 */
136 void DLineEdit::showAlertMessage(const QString &text, int duration)
137 {
138 D_D(DLineEdit);
139
140 if (!d->tooltip) {
141 d->tooltip = new DArrowRectangle(DArrowRectangle::ArrowTop, this);
142 d->tooltip->setObjectName("AlertTooltip");
143
144 QLabel *label = new QLabel(d->tooltip);
145
146 label->setWordWrap(true);
147 label->setMaximumWidth(width());
148 d->tooltip->setContent(label);
149 d->tooltip->setBackgroundColor(DThemeManager::instance()->theme(this) == "light" ? Qt::white : Qt::black);
150 d->tooltip->setArrowX(15);
151 d->tooltip->setArrowHeight(5);
152
153 QTimer::singleShot(duration, d->tooltip, [d] {
154 d->tooltip->deleteLater();
155 d->tooltip = Q_NULLPTR;
262 return d->lineEdit->isClearButtonEnabled();
263 }
264
265 /*!
266 * \~chinese \brief DLineEdit::setText 设置显示的文本
267 * \~chinese \param text 显示的文本
268 */
269 void DLineEdit::setText(const QString &text)
270 {
271 D_D(DLineEdit);
272 d->lineEdit->setText(text);
273 }
274
275 /*!
276 * \~chinese \brief DLineEdit::text
277 * \~chinese \return 返回显示的文本
278 */
279 QString DLineEdit::text()
280 {
281 D_DC(DLineEdit);
282 return d->lineEdit->text();
283 }
284
285 /*!
286 * \~chinese \brief DLineEdit::clear 清空编辑的内容
287 */
288 void DLineEdit::clear()
289 {
290 D_D(DLineEdit);
291 return d->lineEdit->clear();
292 }
293
294 /*!
295 * \~chinese \brief DLineEdit::echoMode
296 * \~chinese \return 返回回显的模式
297 */
298 QLineEdit::EchoMode DLineEdit::echoMode() const
299 {
300 D_DC(DLineEdit);
301 return d->lineEdit->echoMode();
302 }
303
304 /*!
305 * \~chinese \brief DLineEdit::setEchoMode 设置回显的模式
306 * \~chinese \param mode 回显的模式
307 */
308 void DLineEdit::setEchoMode(QLineEdit::EchoMode mode)
309 {
310 D_D(DLineEdit);
311 d->lineEdit->setEchoMode(mode);
312 }
313
314 /*!
315 * \~chinese \brief DLineEdit::setContextMenuPolicy
316 * \~chinese \param policy 显示右键菜单的方式
317 * \~chinese \row 转发实际变量 QLineEdit 的 ContextMenuEvent 消息
318 * \~chinese \see QLineEdit::setContextMenuPolicy
319 */
320 void DLineEdit::setContextMenuPolicy(Qt::ContextMenuPolicy policy)
321 {
322 D_D(DLineEdit);
323 d->lineEdit->setContextMenuPolicy(policy);
324 }
325
326 /*!
327 * \~chinese \brief DLineEdit::speechToTextIsEnabled
328 * \~chinese \return true 显示语音听写菜单项 false不显示
329 */
330 bool DLineEdit::speechToTextIsEnabled() const
331 {
332 D_D(const DLineEdit);
333 return d->bSpeechToText;
334 }
335
336 /*!
337 * \~chinese \brief DLineEdit::setSpeechToTextEnabled 设置是否显示语音听写菜单项
338 * \~chinese \param enable true显示 flase不显示
339 */
340 void DLineEdit::setSpeechToTextEnabled(bool enable)
341 {
342 D_D(DLineEdit);
343 d->bSpeechToText = enable;
344 }
345
346 /*!
347 * \~chinese \brief DLineEdit::eventFilter
348 * \~chinese \row 该过滤器不做任何过滤动作,但会监控输入框的焦点状态,并发送信号 focusChanged()。
349 */
350 bool DLineEdit::eventFilter(QObject *watched, QEvent *event)
351 {
352 D_D(DLineEdit);
353
354 if (event->type() == QEvent::FocusIn) {
355 Q_EMIT focusChanged(true);
356 } else if (event->type() == QEvent::FocusOut) {
357 Q_EMIT focusChanged(false);
358 } else if (watched == lineEdit() && event->type() == QEvent::ContextMenu) {
359 if (static_cast<QLineEdit*>(watched)->echoMode() == QLineEdit::Password) {
360 return QWidget::eventFilter(watched, event);
361 }
362
363 QDBusInterface testSpeech("com.iflytek.aiassistant",
364 "/aiassistant/tts",
365 "com.iflytek.aiassistant.tts",
366 QDBusConnection::sessionBus());
367 //测试朗读接口是否开启
368 QDBusReply<bool> speechReply = testSpeech.call(QDBus::AutoDetect, "getTTSEnable");
369
370 QDBusInterface testReading("com.iflytek.aiassistant",
371 "/aiassistant/tts",
372 "com.iflytek.aiassistant.tts",
373 QDBusConnection::sessionBus());
374 //测试朗读是否在进行
375 QDBusReply<bool> readingReply = testReading.call(QDBus::AutoDetect, "isTTSInWorking");
376
377 QDBusInterface testTranslate("com.iflytek.aiassistant",
378 "/aiassistant/trans",
379 "com.iflytek.aiassistant.trans",
380 QDBusConnection::sessionBus());
381 //测试翻译接口是否开启
382 QDBusReply<bool> translateReply = testTranslate.call(QDBus::AutoDetect, "getTransEnable");
383
384 QDBusInterface testSpeechToText("com.iflytek.aiassistant",
385 "/aiassistant/iat",
386 "com.iflytek.aiassistant.iat",
387 QDBusConnection::sessionBus());
388 //测试听写接口是否开启
389 QDBusReply<bool> speechToTextReply = testSpeechToText.call(QDBus::AutoDetect, "getIatEnable");
390
391 QLineEdit *pLineEdit = static_cast<QLineEdit*>(watched);
392 QMenu *menu = pLineEdit->createStandardContextMenu();
393
394 //朗读,翻译,听写都没有开启,则弹出默认菜单
395 if (!speechReply.value() && !translateReply.value() && !speechToTextReply.value()) {
396 menu->popup(static_cast<QContextMenuEvent*>(event)->globalPos());
397 event->accept();
398 return true;
399 }
400
401 menu->addSeparator();
402
403 if (speechReply.value()) {
404 QAction *pAction_1 = nullptr;
405 if (readingReply.value()) {
406 pAction_1 = menu->addAction(QCoreApplication::translate("DLineEdit", "Stop reading"));
407 } else {
408 pAction_1 = menu->addAction(QCoreApplication::translate("DLineEdit", "Text to Speech"));
409 }
410
411 //没有选中文本,则菜单置灰色
412 if (!pLineEdit->hasSelectedText()) {
413 pAction_1->setEnabled(false);
414 }
415
416 connect(pAction_1, &QAction::triggered, this, [] {
417 QDBusInterface speechInterface("com.iflytek.aiassistant",
418 "/aiassistant/deepinmain",
419 "com.iflytek.aiassistant.mainWindow",
420 QDBusConnection::sessionBus());
421
422 if (speechInterface.isValid()) {
423 speechInterface.call(QDBus::BlockWithGui, "TextToSpeech");//此函在第一次调用时朗读,在朗读状态下再次调用为停止朗读
424 } else {
425 qWarning() << "[DLineEdit] TextToSpeech ERROR";
426 }
427 });
428 }
429
430 if (translateReply.value()) {
431 QAction *pAction_2 = menu->addAction(QCoreApplication::translate("DLineEdit", "Translate"));
432
433 //没有选中文本,则菜单置灰色
434 if (!pLineEdit->hasSelectedText()) {
435 pAction_2->setEnabled(false);
436 }
437
438 connect(pAction_2, &QAction::triggered, this, [] {
439 QDBusInterface translationInterface("com.iflytek.aiassistant",
440 "/aiassistant/deepinmain",
441 "com.iflytek.aiassistant.mainWindow",
442 QDBusConnection::sessionBus());
443
444 if (translationInterface.isValid()) {
445 translationInterface.call(QDBus::BlockWithGui, "TextToTranslate");//执行翻译
446 } else {
447 qWarning() << "[DLineEdit] Translation ERROR";
448 }
449 });
450 }
451
452 if (speechToTextReply.value() && speechToTextIsEnabled()) {
453 QAction *pAction_3 = menu->addAction(QCoreApplication::translate("DLineEdit", "Speech To Text"));
454 connect(pAction_3, &QAction::triggered, this, [] {
455 QDBusInterface speechToTextInterface("com.iflytek.aiassistant",
456 "/aiassistant/deepinmain",
457 "com.iflytek.aiassistant.mainWindow",
458 QDBusConnection::sessionBus());
459
460 if (speechToTextInterface.isValid()) {
461 speechToTextInterface.call(QDBus::BlockWithGui, "SpeechToText");//执行听写
462 } else {
463 qWarning() << "[DLineEdit] SpeechToText ERROR";
464 }
465 });
466 }
467
468 //FIXME: 由于Qt在UOS系统环境下不明原因的bug,使用menu->setAttribute(Qt::WA_DeleteOnClose) 销毁menu会在特定情况下出现崩溃的问题,这里采用一种变通的做法
469 connect(menu, &QMenu::aboutToHide, this, [=] {
470 if (menu->activeAction()) {
471 menu->deleteLater();
472 } else {
473 QTimer::singleShot(0, this, [=] {
474 menu->deleteLater();
475 });
476 }
156477 });
478
479 menu->popup(static_cast<QContextMenuEvent*>(event)->globalPos());
480 event->accept();
481 pLineEdit->setFocus();
482 return true;
157483 }
158484
159 QLabel *label = qobject_cast<QLabel *>(d->tooltip->getContent());
160
161 if (!label) {
162 return;
163 }
164
165 label->setText(text);
166 label->adjustSize();
167
168 const QPoint &pos = mapToGlobal(QPoint(15, height()));
169
170 d->tooltip->show(pos.x(), pos.y());
171 }
172
173 /*!
174 * \~chinese \brief 隐藏警告的消息框
175 *
176 */
177 void DLineEdit:: hideAlertMessage()
178 {
179 Q_D(DLineEdit);
180
181 if (d->tooltip) {
182 d->tooltip->hide();
183 }
184 }
185
186 /*!
187 * \~chinese \brief 设置图标是否可见
188 *
189 * @param visible
190 */
191 void DLineEdit::setIconVisible(bool visible)
192 {
193 Q_D(DLineEdit);
194
195 if (visible == d->m_rightIcon->isVisible()) {
196 return;
197 }
198
199 d->m_rightIcon->setVisible(visible);
200
201 if (visible) {
202
203 addAction(d->m_iconAction, TrailingPosition);
204 #ifndef Q_OS_WIN
205 QLineEditPrivate *d_d = reinterpret_cast<QLineEditPrivate*>(d_ptr.data());
206 if (d_d->trailingSideWidgets.size() > 1) {
207 if ((*(d_d->trailingSideWidgets.end() - 1)).action == d->m_iconAction) {
208 d_d->trailingSideWidgets.insert(d_d->trailingSideWidgets.begin(), *d_d->trailingSideWidgets.erase(d_d->trailingSideWidgets.end() - 1));
209 QResizeEvent resize_event(size(), size());
210 qApp->sendEvent(this, &resize_event);
211 }
212 }
213 #endif
214 } else {
215 removeAction(d->m_iconAction);
216 }
217 }
218
219 /*!
220 * \~english \property DLineEdit::iconVisible
221 * \~english \brief This property holds whether the action button can be seen.
222 */
223
224 /*!
225 * \~chinese \property DLineEdit::iconVisible
226 * \~chinese 这个属性将会决定动作按钮的图标是否可见
227 */
228 bool DLineEdit::iconVisible() const
229 {
230 D_DC(DLineEdit);
231
232 return d->m_rightIcon->isVisible();
233 }
234
235 /*!
236 * \~english \property DLineEdit::normalIcon
237 * \~english \brief This property holds the image used as the normal state of the action button.
238 */
239
240 /*!
241 * \~chinese \property DLineEdit::normalIcon
242 * \~chinese 该属性返回normal状态的图标
243 */
244 QString DLineEdit::normalIcon() const
245 {
246 D_DC(DLineEdit);
247
248 return d->m_rightIcon->getNormalPic();
249 }
250
251 /*!
252 * \~chinese \brief 设置normal状态的图标
253 *
254 * @param normalIcon
255 */
256 void DLineEdit::setNormalIcon(const QString &normalIcon)
257 {
258 Q_D(DLineEdit);
259
260 d->m_rightIcon->setNormalPic(normalIcon);
261 }
262
263 /*!
264 * \~english \property DLineEdit::hoverIcon
265 * \~english \brief This property holds the image used as the hover state of the action button.
266 */
267
268 /*!
269 * \~chinese \property DLineEdit::hoverIcon
270 * \~chinese 该属性返回鼠标在动作按钮上时,按钮的图标
271 */
272 QString DLineEdit::hoverIcon() const
273 {
274 D_DC(DLineEdit);
275
276 return d->m_rightIcon->getHoverPic();
277 }
278
279 /*!
280 * \~chinese \brief 设置鼠标在动作按钮上时,按钮的图标
281 *
282 * @param hoverIcon 鼠标在动作按钮上时,按钮的图标的路径
283 */
284 void DLineEdit::setHoverIcon(const QString &hoverIcon)
285 {
286 Q_D(DLineEdit);
287
288 d->m_rightIcon->setHoverPic(hoverIcon);
289 }
290
291 /*!
292 * \~english \property DLineEdit::pressIcon
293 * \~english \brief This property holds the image used as the pressed state of the action button.
294 */
295
296 /*!
297 * \~chinese \property DLineEdit::pressIcon
298 * \~chinese 该属性返回鼠标按下时动作按钮的图标
299 */
300 QString DLineEdit::pressIcon() const
301 {
302 D_DC(DLineEdit);
303
304 return d->m_rightIcon->getPressPic();
305 }
306
307 /*!
308 * \~chinese \brief 设置鼠标按下时动作按钮的图标
309 *
310 * @param pressIcon 鼠标按下时动作按钮的图标路径
311 */
312 void DLineEdit::setPressIcon(const QString &pressIcon)
313 {
314 Q_D(DLineEdit);
315
316 d->m_rightIcon->setPressPic(pressIcon);
317 }
318
319 void DLineEdit::focusInEvent(QFocusEvent *e)
320 {
321 Q_EMIT focusChanged(true);
322 QLineEdit::focusInEvent(e);
323 }
324
325 void DLineEdit::focusOutEvent(QFocusEvent *e)
326 {
327 Q_EMIT focusChanged(false);
328 QLineEdit::focusOutEvent(e);
329 }
330
331 void DLineEdit::resizeEvent(QResizeEvent *e)
332 {
333 QLineEdit::resizeEvent(e);
334
335 Q_EMIT sizeChanged(e->size());
336
337 D_D(DLineEdit);
338
339 d->m_rightIcon->setFixedHeight(e->size().height() - 2);
340 }
341
342 bool DLineEdit::eventFilter(QObject *watched, QEvent *event)
343 {
344 D_D(DLineEdit);
345
346 if (watched == d->m_rightIcon) {
347 if (event->type() == QEvent::Move) {
348 d->m_rightIcon->move(width() - d->m_rightIcon->width() - 1, 1);
349 }
350 }
351
352 return false;
485 // if (d->frame)
486 // {
487 // if (watched == d->follower && event->type() == QEvent::Move) {
488 // d->updateTooltipPos();
489 // }
490 // }
491
492 return QWidget::eventFilter(watched, event);
493 }
494
495 bool DLineEdit::event(QEvent *e)
496 {
497 //D_D(DLineEdit);
498
499 // if (e->type() == QEvent::Move || e->type() == QEvent::Resize) {
500 // if (d->frame)
501 // d->updateTooltipPos();
502 // }
503 return QWidget::event(e);
353504 }
354505
355506 DLineEditPrivate::DLineEditPrivate(DLineEdit *q)
356507 : DObjectPrivate(q)
357 {
508 , leftWidget(nullptr)
509 , rightWidget(nullptr)
510 , lineEdit(nullptr)
511 , hLayout(nullptr)
512 {
513
514 }
515
516 void DLineEditPrivate::updateTooltipPos()
517 {
518 //control->updateTooltipPos();
358519 }
359520
360521 void DLineEditPrivate::init()
361522 {
362523 Q_Q(DLineEdit);
363 m_rightIcon = new DImageButton(q);
364 m_rightIcon->setObjectName("IconButton");
365 m_rightIcon->installEventFilter(q);
366
367 m_iconAction = new QWidgetAction(q);
368 m_iconAction->setDefaultWidget(m_rightIcon);
369 m_rightIcon->hide();
370
371 q->connect(m_rightIcon, &DImageButton::clicked, q, &DLineEdit::iconClicked);
524
525 hLayout = new QHBoxLayout(q);
526 lineEdit = new QLineEdit(q);
527
528 control = new DAlertControl(lineEdit, q);
529 q->connect(control, &DAlertControl::alertChanged, q, &DLineEdit::alertChanged);
530
531 hLayout->setContentsMargins(0, 0, 0, 0);
532 hLayout->addWidget(lineEdit);
533
534 lineEdit->installEventFilter(q);
535
536 q->lineEdit()->setClearButtonEnabled(true);
537
538 q->connect(lineEdit, &QLineEdit::textChanged, q, &DLineEdit::textChanged);
539 q->connect(lineEdit, &QLineEdit::textEdited, q, &DLineEdit::textEdited);
540 q->connect(lineEdit, &QLineEdit::cursorPositionChanged, q, &DLineEdit::cursorPositionChanged);
541 q->connect(lineEdit, &QLineEdit::returnPressed, q, &DLineEdit::returnPressed);
542 q->connect(lineEdit, &QLineEdit::editingFinished, q, &DLineEdit::editingFinished);
543 q->connect(lineEdit, &QLineEdit::selectionChanged, q, &DLineEdit::selectionChanged);
372544 }
373545
374546 DWIDGET_END_NAMESPACE
375
376 #include "moc_dlineedit.cpp"
1717 #ifndef DLINEEDIT_H
1818 #define DLINEEDIT_H
1919
20 #include <dobject.h>
21 #include <dtkwidget_global.h>
22
23 #include <QWidget>
2024 #include <QLineEdit>
21
22 #include "dtkwidget_global.h"
23 #include "dobject.h"
25 #include <QHBoxLayout>
2426
2527 DWIDGET_BEGIN_NAMESPACE
2628
2729 class DLineEditPrivate;
2830 class DStyleOptionLineEdit;
29 class LIBDTKWIDGETSHARED_EXPORT DLineEdit : public QLineEdit, public DTK_CORE_NAMESPACE::DObject
31 class LIBDTKWIDGETSHARED_EXPORT DLineEdit : public QWidget, public DTK_CORE_NAMESPACE::DObject
3032 {
3133 Q_OBJECT
3234 Q_DISABLE_COPY(DLineEdit)
3335 D_DECLARE_PRIVATE(DLineEdit)
3436 Q_PROPERTY(bool alert READ isAlert WRITE setAlert NOTIFY alertChanged)
35 Q_PROPERTY(QString normalIcon READ normalIcon WRITE setNormalIcon DESIGNABLE true)
36 Q_PROPERTY(QString hoverIcon READ hoverIcon WRITE setHoverIcon DESIGNABLE true)
37 Q_PROPERTY(QString pressIcon READ pressIcon WRITE setPressIcon DESIGNABLE true)
38 Q_PROPERTY(bool iconVisible READ iconVisible WRITE setIconVisible)
3937
4038 public:
41 DLineEdit(QWidget *parent = 0);
39 DLineEdit(QWidget *parent = nullptr);
40 virtual ~DLineEdit() override;
41
42 QLineEdit *lineEdit() const;
4243
4344 void setAlert(bool isAlert);
4445 bool isAlert() const;
4546 void showAlertMessage(const QString &text, int duration = 3000);
47 void showAlertMessage(const QString &text, QWidget *follower, int duration = 3000);
48 void setAlertMessageAlignment(Qt::Alignment alignment);
49 Qt::Alignment alertMessageAlignment() const;
4650 void hideAlertMessage();
4751
48 void setIconVisible(bool visible);
49 bool iconVisible() const;
52 void setLeftWidgets(const QList<QWidget *> &list);
53 void setRightWidgets(const QList<QWidget *> &list);
5054
51 QString normalIcon() const;
52 QString hoverIcon() const;
53 QString pressIcon() const;
55 void setLeftWidgetsVisible(bool visible);
56 void setRightWidgetsVisible(bool visible);
5457
55 public Q_SLOTS:
56 void setNormalIcon(const QString &normalIcon);
57 void setHoverIcon(const QString &hoverIcon);
58 void setPressIcon(const QString &pressIcon);
58 void setClearButtonEnabled(bool enable);
59 bool isClearButtonEnabled() const;
60
61 void setText(const QString &text);
62 QString text();
63
64 void clear();
65
66 QLineEdit::EchoMode echoMode() const;
67 void setEchoMode(QLineEdit::EchoMode mode);
68
69 void setContextMenuPolicy(Qt::ContextMenuPolicy policy);
70
71 bool speechToTextIsEnabled() const;
72 void setSpeechToTextEnabled(bool enable);
5973
6074 Q_SIGNALS:
61 void iconClicked() const;
6275 void alertChanged(bool alert) const;
6376 void focusChanged(bool onFocus) const;
64 void sizeChanged(const QSize &size) const;
77
78 void textChanged(const QString &);
79 void textEdited(const QString &);
80 void cursorPositionChanged(int, int);
81 void returnPressed();
82 void editingFinished();
83 void selectionChanged();
6584
6685 protected:
6786 DLineEdit(DLineEditPrivate &q, QWidget *parent);
68
69 void focusInEvent(QFocusEvent *e) Q_DECL_OVERRIDE;
70 void focusOutEvent(QFocusEvent *e) Q_DECL_OVERRIDE;
71 void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE;
7287 bool eventFilter(QObject *watched, QEvent *event) override;
88 bool event(QEvent *event) override;
7389
7490 friend class DStyleOptionLineEdit;
7591 };
+0
-52
src/widgets/dlinkbutton.cpp less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #include "dlinkbutton.h"
18 #include "dthememanager.h"
19
20 DWIDGET_BEGIN_NAMESPACE
21
22 /*!
23 * \~english \class DLinkButton
24 * \~english \brief The DLinkButton class provides a styled QPushButton to mini the style
25 * and behavior of links displayed on the internet.
26 */
27
28 /*!
29 * \~english \brief DLinkButton::DLinkButton constructs an instance of DLinkButton.
30 * \~english \param text is passed to QPushButton constructor.
31 * \~english \param parent is passed to QPushButton constructor.
32 */
33
34 /*!
35 * \~chinese \class DLinkButton
36 * \~chinese \brief 提供了一个QPushButton的样式,和显示在网页上的链接一样。
37 */
38
39 /*!
40 * \~chinese \brief DLinkButton的构造函数
41 *
42 * @param text 要显示的文字
43 * @param parent
44 */
45 DLinkButton::DLinkButton(const QString &text, QWidget *parent) :
46 QPushButton(text, parent)
47 {
48 DThemeManager::registerWidget(this);
49 }
50
51 DWIDGET_END_NAMESPACE
+0
-37
src/widgets/dlinkbutton.h less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #ifndef DLINKBUTTON_H
18 #define DLINKBUTTON_H
19
20 #include <QPushButton>
21
22 #include "dtkwidget_global.h"
23
24 DWIDGET_BEGIN_NAMESPACE
25
26 class LIBDTKWIDGETSHARED_EXPORT DLinkButton : public QPushButton
27 {
28 Q_OBJECT
29
30 public:
31 DLinkButton(const QString & text = QString(), QWidget * parent = 0);
32 };
33
34 DWIDGET_END_NAMESPACE
35
36 #endif // DLINKBUTTON_H
1717 #include <QDebug>
1818 #include <QScrollBar>
1919
20 #include "dthememanager.h"
2120 #include "dboxwidget.h"
2221 #include "dlistview.h"
2322 #include "private/dlistview_p.h"
2423 #include "dflowlayout.h"
24 #include "dstyleoption.h"
25 #include "dstyleditemdelegate.h"
26 #include "dstyle.h"
2527
2628 DWIDGET_BEGIN_NAMESPACE
2729
4648 }
4749
4850 bool DVariantListModel::setData(const QModelIndex &index,
49 const QVariant &value, int role)
51 const QVariant &value, int role)
5052 {
5153 if (index.row() >= 0 && index.row() < dataList.size()) {
5254 dataList.replace(index.row(), value);
105107
106108 q->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
107109 q->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
110
111 DStyledItemDelegate *delegate = new DStyledItemDelegate(q);
112 q->setItemDelegate(delegate);
113
114 q->setFrameShape(QFrame::NoFrame);
115
116 q->viewport()->setAutoFillBackground(false);
117 q->setAutoFillBackground(false);
118 q->setBackgroundRole(q->viewport()->backgroundRole());
119
120 // 默认背景类型为圆角背景
121 q->setBackgroundType(DStyledItemDelegate::RoundedBackground);
108122 }
109123
110124 void DListViewPrivate::onOrientationChanged()
113127
114128 bool isVerticalLayout = (q->orientation() == Qt::Vertical);
115129
116 if(headerLayout) {
130 if (headerLayout) {
117131 headerLayout->setDirection(isVerticalLayout
118132 ? QBoxLayout::TopToBottom
119133 : QBoxLayout::LeftToRight);
120 if(isVerticalLayout) {
134 if (isVerticalLayout) {
121135 headerLayout->resize(q->width(), headerLayout->sizeHint().height());
122136 } else {
123137 headerLayout->resize(headerLayout->sizeHint().width(), q->height());
126140 headerLayout->layout()->update();
127141 }
128142
129 if(footerLayout) {
143 if (footerLayout) {
130144 footerLayout->setDirection(isVerticalLayout
131145 ? QBoxLayout::TopToBottom
132146 : QBoxLayout::LeftToRight);
133147
134 if(isVerticalLayout) {
148 if (isVerticalLayout) {
135149 footerLayout->resize(q->width(), footerLayout->sizeHint().height());
136150 footerLayout->move(0, q->height() - footerLayout->height());
137151 } else {
184198 QListView(parent),
185199 DObject(*new DListViewPrivate(this))
186200 {
187 DThemeManager::registerWidget(this);
188
189201 d_func()->init();
190202 }
191203
211223 void DListView::setWrapping(bool enable)
212224 {
213225 QListView::setWrapping(enable);
226 }
227
228 QSize DListView::viewportSizeHint() const
229 {
230 return sizeAdjustPolicy() == QAbstractScrollArea::AdjustToContents ? QSize(0, 0) : QListView::viewportSizeHint();
231 }
232
233 int DListView::horizontalOffset() const
234 {
235 if (viewMode() != IconMode || flow() != LeftToRight || !isWrapping()
236 || (!gridSize().isValid() && !itemSize().isValid())) {
237 return QListView::horizontalOffset();
238 }
239
240 int width = contentsSize().width();
241 int offset = gridSize().isValid() ? 0 : spacing() / 2;
242
243 return -(viewport()->width() - width) / 2 + offset;
244 }
245
246 QSize DListView::minimumSizeHint() const
247 {
248 QSize size = QListView::minimumSizeHint();
249 QSize content_size = QListView::contentsSize();
250
251 if (horizontalScrollBarPolicy() == Qt::ScrollBarAlwaysOff) {
252 size.setWidth(content_size.width());
253 }
254
255 if (verticalScrollBarPolicy() == Qt::ScrollBarAlwaysOff) {
256 size.setHeight(content_size.height());
257 }
258
259 return size;
214260 }
215261
216262 /*!
337383 }
338384 }
339385
386 DStyledItemDelegate::BackgroundType DListView::backgroundType() const
387 {
388 if (DStyledItemDelegate *d = qobject_cast<DStyledItemDelegate *>(itemDelegate())) {
389 return d->backgroundType();
390 }
391
392 return DStyledItemDelegate::NoBackground;
393 }
394
395 QMargins DListView::itemMargins() const
396 {
397 if (DStyledItemDelegate *d = qobject_cast<DStyledItemDelegate *>(itemDelegate())) {
398 return d->margins();
399 }
400
401 return QMargins();
402 }
403
404 QSize DListView::itemSize() const
405 {
406 if (DStyledItemDelegate *d = qobject_cast<DStyledItemDelegate *>(itemDelegate())) {
407 return d->itemSize();
408 }
409
410 return QSize();
411 }
412
340413 /*!
341414 * \~chinese \brief 在列表底部新增一个item
342415 * \~chinese \param data 要新增的数据
365438 */
366439 bool DListView::insertItem(int index, const QVariant &data)
367440 {
368 if(!model()->insertRow(index))
441 if (!model()->insertRow(index))
369442 return false;
370443
371444 return model()->setData(model()->index(index, 0, rootIndex()), data);
379452 */
380453 bool DListView::insertItems(int index, const QVariantList &datas)
381454 {
382 if(!model()->insertRows(index, datas.count()))
455 if (!model()->insertRows(index, datas.count()))
383456 return false;
384457
385 for(int i = 0; i < datas.count(); ++i)
458 for (int i = 0; i < datas.count(); ++i)
386459 model()->setData(model()->index(index + i, 0, rootIndex()), datas.at(i));
387460
388461 return true;
418491
419492 int index = d->headerList.indexOf(widget);
420493
421 if(index >= 0)
494 if (index >= 0)
422495 return index;
423496
424 if(!d->headerLayout) {
497 if (!d->headerLayout) {
425498 bool isVerticalLayout = (orientation() == Qt::Vertical);
426499
427500 d->headerLayout = new DBoxWidget(isVerticalLayout
428501 ? QBoxLayout::TopToBottom
429502 : QBoxLayout::LeftToRight, this);
430503
431 if(isVerticalLayout)
504 if (isVerticalLayout)
432505 d->headerLayout->resize(width(), d->headerLayout->height());
433506 else
434507 d->headerLayout->resize(d->headerLayout->width(), height());
435508
436509 connect(d->headerLayout, &DBoxWidget::sizeChanged,
437 this, [this](const QSize &size) {
510 this, [this](const QSize & size) {
438511 bool isVerticalLayout = (orientation() == Qt::Vertical);
439512
440513 QMargins margins = this->viewportMargins();
441514
442 if(isVerticalLayout)
515 if (isVerticalLayout)
443516 margins.setTop(size.height());
444517 else
445518 margins.setLeft(size.width());
463536 {
464537 QWidget *widget = takeHeaderWidget(index);
465538
466 if(widget)
539 if (widget)
467540 widget->deleteLater();
468541 }
469542
470543 /*!
471 * \brief 与 DListView::getHeaderWidget 类似,但返回要移除的顶部控件的对象
544 * \~chinese \brief 与 DListView::getHeaderWidget 类似,但返回要移除的顶部控件的对象
472545 * \~chinese \sa DListView::getHeaderWidget
473546 */
474547 QWidget *DListView::takeHeaderWidget(int index)
479552
480553 d->headerLayout->layout()->removeWidget(widget);
481554
482 if(d->headerList.isEmpty()) {
555 if (d->headerList.isEmpty()) {
483556 d->headerLayout->deleteLater();
484557 d->headerLayout = nullptr;
485558 }
496569
497570 int index = d->footerList.indexOf(widget);
498571
499 if(index >= 0)
572 if (index >= 0)
500573 return index;
501574
502 if(!d->footerLayout) {
575 if (!d->footerLayout) {
503576 bool isVerticalLayout = (orientation() == Qt::Vertical);
504577
505578 d->footerLayout = new DBoxWidget(isVerticalLayout
506579 ? QBoxLayout::TopToBottom
507580 : QBoxLayout::LeftToRight, this);
508581
509 if(isVerticalLayout)
582 if (isVerticalLayout)
510583 d->footerLayout->resize(width(), d->footerLayout->height());
511584 else
512585 d->footerLayout->resize(d->footerLayout->width(), height());
513586
514587 connect(d->footerLayout, &DBoxWidget::sizeChanged,
515 this, [this](const QSize &size) {
588 this, [this](const QSize & size) {
516589 bool isVerticalLayout = (orientation() == Qt::Vertical);
517590
518591 QMargins margins = this->viewportMargins();
519592
520593 D_D(DListView);
521594
522 if(isVerticalLayout) {
595 if (isVerticalLayout) {
523596 margins.setBottom(size.height());
524597 d->footerLayout->move(0, height() - d->footerLayout->height());
525598 } else {
546619 {
547620 QWidget *widget = takeFooterWidget(index);
548621
549 if(widget)
622 if (widget)
550623 widget->deleteLater();
551624 }
552625
561634
562635 d->footerLayout->layout()->removeWidget(widget);
563636
564 if(d->footerList.isEmpty()) {
637 if (d->footerList.isEmpty()) {
565638 d->footerLayout->deleteLater();
566639 d->footerLayout = nullptr;
567640 }
581654
582655 Qt::Orientation orientation = this->orientation();
583656
584 if(old_orientation != orientation) {
657 if (old_orientation != orientation) {
585658 D_D(DListView);
586659
587660 QMargins margins = viewportMargins();
588661
589 if(old_orientation == Qt::Vertical) {
590 if(d->headerLayout)
662 if (old_orientation == Qt::Vertical) {
663 if (d->headerLayout)
591664 margins.setTop(0);
592665
593 if(d->footerLayout)
666 if (d->footerLayout)
594667 margins.setBottom(0);
595668 } else {
596 if(d->headerLayout)
669 if (d->headerLayout)
597670 margins.setLeft(0);
598671
599 if(d->footerLayout)
672 if (d->footerLayout)
600673 margins.setRight(0);
601674 }
602675
609682 }
610683
611684 /*!
612 * \brief 开始编辑一个item
613 * \param index 指定要编辑的item的位置
685 * \~chinese \brief 开始编辑一个item
686 * \~chinese \param index 指定要编辑的item的位置
614687 */
615688 void DListView::edit(const QModelIndex &index)
616689 {
617690 QListView::edit(index);
691 }
692
693 /*!
694 * \~chinese \brief DListView::setBackgroundType 设定item的背景色类型
695 * \~chinese \param backgroundType 背景色类型
696 */
697 void DListView::setBackgroundType(DStyledItemDelegate::BackgroundType backgroundType)
698 {
699 if (DStyledItemDelegate *d = qobject_cast<DStyledItemDelegate *>(itemDelegate())) {
700 d->setBackgroundType(backgroundType);
701
702 if (d->backgroundType() == DStyledItemDelegate::RoundedBackground) {
703 d->setItemSpacing(10);
704 } else if (d->backgroundType() == DStyledItemDelegate::ClipCornerBackground) {
705 d->setItemSpacing(1);
706 } else {
707 d->setItemSpacing(0);
708 }
709 }
710 }
711
712 /*!
713 * \~chinese \brief DListView::setItemMargins 设定item的内容margin
714 * \~chinese \param itemMargins margin值
715 */
716 void DListView::setItemMargins(const QMargins &itemMargins)
717 {
718 if (DStyledItemDelegate *d = qobject_cast<DStyledItemDelegate *>(itemDelegate())) {
719 d->setMargins(itemMargins);
720 }
721 }
722
723 /*!
724 * \~chinese \brief DListView::setItemSize设定item的尺寸
725 * \~chinese \param itemSize 尺寸的大小
726 */
727 void DListView::setItemSize(QSize itemSize)
728 {
729 if (DStyledItemDelegate *d = qobject_cast<DStyledItemDelegate *>(itemDelegate())) {
730 return d->setItemSize(itemSize);
731 }
732 }
733
734 /*!
735 * \~chinese \brief DListView::setItemSpacing 设定item的间距大小
736 * \~chinese \param spacing 间距大小值
737 */
738 void DListView::setItemSpacing(int spacing)
739 {
740 if (DStyledItemDelegate *d = qobject_cast<DStyledItemDelegate *>(itemDelegate())) {
741 return d->setItemSpacing(spacing);
742 }
743 }
744
745 /*!
746 * \~chinese \brief DListView::setItemRadius 设定item的圆角大小
747 * \~chinese \param radius 圆角大小值
748 */
749 void DListView::setItemRadius(int radius)
750 {
751 DStyle::setFrameRadius(this, radius);
752 update();
618753 }
619754
620755 #if(QT_VERSION < 0x050500)
651786
652787 bool isVerticalLayout = (orientation() == Qt::Vertical);
653788
654 if(d->headerLayout) {
655 if(isVerticalLayout)
789 if (d->headerLayout) {
790 if (isVerticalLayout)
656791 d->headerLayout->resize(width(), d->headerLayout->height());
657792 else
658793 d->headerLayout->resize(d->headerLayout->width(), height());
659794 }
660795
661 if(d->footerLayout) {
662 if(isVerticalLayout) {
796 if (d->footerLayout) {
797 if (isVerticalLayout) {
663798 d->footerLayout->resize(width(), d->footerLayout->height());
664799 d->footerLayout->move(0, height() - d->footerLayout->height());
665800 } else {
688823 if (trigger == QAbstractItemView::AllEditTriggers) // force editing
689824 return true;
690825 if ((trigger & editTriggers()) == QAbstractItemView::SelectedClicked
691 && !selectionModel()->isSelected(index))
826 && !selectionModel()->isSelected(index))
692827 return false;
693828
694 if(trigger & editTriggers()) {
829 if (trigger & editTriggers()) {
695830 w->setFocus();
696831
697832 Q_EMIT triggerEdit(index);
702837
703838 bool tmp = QListView::edit(index, trigger, event);
704839
705 if(tmp)
840 if (tmp)
706841 Q_EMIT triggerEdit(index);
707842
708843 return tmp;
709844 }
710845
846 QStyleOptionViewItem DListView::viewOptions() const
847 {
848 QStyleOptionViewItem item = QListView::viewOptions();
849
850 item.showDecorationSelected = true;
851 // 列表项不会变为Inactive状态
852 item.state |= QStyle::State_Active;
853
854 if (viewMode() == QListView::ListMode) {
855 item.decorationAlignment = Qt::AlignVCenter;
856 }
857
858 return item;
859 }
860
861 QModelIndex DListView::moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers)
862 {
863 switch (cursorAction) {
864 case MoveNext: {
865 auto curIdx = currentIndex();
866 auto curCol = modelColumn();
867
868 auto nextRow = 0;
869 if (curIdx.isValid()) {
870 nextRow = (curIdx.row() + 1) % model()->rowCount();
871 }
872
873 int hiddenCount = 0;
874 while (isRowHidden(nextRow)) {
875 nextRow = (nextRow + 1) % model()->rowCount();
876
877 //防止所有列都是隐藏的死循环
878 ++hiddenCount;
879 if (hiddenCount >= count()) {
880 return currentIndex();
881 }
882 }
883
884 return model()->index(nextRow, curCol);
885 }
886 default:
887 break;
888 }
889
890 return QListView::moveCursor(cursorAction, modifiers);
891 }
892
711893 DWIDGET_END_NAMESPACE
712894
713895 #include "moc_dlistview.cpp"
2020 #include "dtkwidget_global.h"
2121
2222 #include <dobject.h>
23 #include <DStyledItemDelegate>
2324
24 #include <QStyledItemDelegate>
2525 #include <QListView>
2626
2727 DWIDGET_BEGIN_NAMESPACE
5151 Q_PROPERTY(int count READ count NOTIFY rowCountChanged)
5252 /// list layout orientation
5353 Q_PROPERTY(Qt::Orientation orientation READ orientation NOTIFY orientationChanged)
54 Q_PROPERTY(DStyledItemDelegate::BackgroundType backgroundType READ backgroundType WRITE setBackgroundType)
55 Q_PROPERTY(QMargins itemMargins READ itemMargins WRITE setItemMargins)
56 Q_PROPERTY(QSize itemSize READ itemSize WRITE setItemSize)
5457
5558 public:
5659 explicit DListView(QWidget *parent = 0);
6972 Qt::Orientation orientation() const;
7073
7174 void setModel(QAbstractItemModel *model) Q_DECL_OVERRIDE;
75 QSize minimumSizeHint() const Q_DECL_OVERRIDE;
76
77 DStyledItemDelegate::BackgroundType backgroundType() const;
78 QMargins itemMargins() const;
79 QSize itemSize() const;
80
81 using QListView::contentsSize;
82 using QListView::setViewportMargins;
7283
7384 public Q_SLOTS:
7485 bool addItem(const QVariant &data);
8899 void setOrientation(QListView::Flow flow, bool wrapping);
89100 void edit(const QModelIndex &index);
90101
102 void setBackgroundType(DStyledItemDelegate::BackgroundType backgroundType);
103 void setItemMargins(const QMargins &itemMargins);
104 void setItemSize(QSize itemSize);
105 void setItemSpacing(int spacing);
106 void setItemRadius(int radius);
107
91108 Q_SIGNALS:
92109 void rowCountChanged();
93110 void orientationChanged(Qt::Orientation orientation);
105122 void currentChanged(const QModelIndex &current, const QModelIndex &previous) Q_DECL_OVERRIDE;
106123 bool edit(const QModelIndex &index, EditTrigger trigger, QEvent *event) Q_DECL_OVERRIDE;
107124
125 QStyleOptionViewItem viewOptions() const override;
126 virtual QModelIndex moveCursor(CursorAction cursorAction,
127 Qt::KeyboardModifiers modifiers) override;
128 QSize viewportSizeHint() const override;
129 int horizontalOffset() const override;
130
108131 private:
109132 void setFlow(QListView::Flow flow);
110133 void setWrapping(bool enable);
+0
-833
src/widgets/dlistwidget.cpp less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #include <QWidget>
18 #include <QVBoxLayout>
19 #include <QEvent>
20 #include <QMouseEvent>
21 #include <QDebug>
22
23 #include "dthememanager.h"
24 #include "dlistwidget.h"
25 #include "private/dlistwidget_p.h"
26
27 DWIDGET_BEGIN_NAMESPACE
28
29 DListWidgetPrivate::DListWidgetPrivate(DListWidget *qq):
30 DScrollAreaPrivate(qq),
31 itemWidth(-1),
32 itemHeight(-1),
33 checkMode(DListWidget::Radio),
34 mainWidget(new DBoxWidget(QBoxLayout::TopToBottom)),
35 visibleCount(0),
36 checkable(false),
37 toggleable(false),
38 enableHorizontalScroll(false),
39 enableVerticalScroll(false)
40 {
41
42 }
43
44 DListWidgetPrivate::~DListWidgetPrivate()
45 {
46
47 }
48
49 void DListWidgetPrivate::init()
50 {
51 Q_Q(DListWidget);
52
53 mainWidget->setObjectName("MainWidget");
54
55 q->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
56 q->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
57 q->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
58 q->setAlignment(Qt::AlignHCenter);
59 q->setFrameStyle(QFrame::NoFrame);
60 q->setFrameShape(QFrame::NoFrame);
61 q->setWidget(mainWidget);
62
63 QObject::connect(mainWidget, &DBoxWidget::sizeChanged, q, &DListWidget::updateSize);
64 }
65
66
67
68
69 /**
70 * \~chinese \class DListWidget
71 * \~chinese \brief 基于widget的列表控件。
72
73 * \~chinese DListWidget是一个自定义的列表控件,与QListWidget相比它虽然也是基于item的一个列表控件但却更灵活,因为它可以设置任意QWidget类型的对象作为自己的item,同时提供了各种新增,插入,移除item的方法以及信号,另外还支持设置选择模式为单选或多选。
74 */
75
76 /**
77 * \~chinese \enum DListWidget::CheckMode
78 * \~chinese \brief 定义了列表的选择模式。
79
80 * \~chinese 其定义了以下两种模式:
81 * \~chinese \var DListWidget::CheckMode DListWidget::Radio
82 * \~chinese 单选模式。
83 * \~chinese \var DListWidget::CheckMode DListWidget::MultipleCheck
84 * \~chinese 多选模式。
85 */
86
87 /**
88 * \~chinese \fn DListWidget::checkedChanged
89 * \~chinese \brief 某一项的选择状态发生了改变。
90 * \~chinese \param index 发生改变的项的位置。
91 * \~chinese \param checked 当前是否被选择。
92 */
93
94 /**
95 * \~chinese \brief 获取一个 DListWidget 实例
96 *
97 * \~chinese \param checkMode 指定列表控件的选择模式,默认为 DListWidget::CheckMode::Radio 。
98 * \~chinese \param parent 指定列表控件的父控件。
99 */
100 DListWidget::DListWidget(CheckMode checkMode, QWidget *parent) :
101 DScrollArea(*new DListWidgetPrivate(this), parent)
102 {
103 DThemeManager::registerWidget(this);
104
105 d_func()->checkMode = checkMode;
106 d_func()->init();
107 }
108
109 /**
110 * \~chinese \brief 获取一个 DListWidget 实例
111 *
112 * \~chinese \param direction 指定列表控件的内容布局方向。
113 * \~chinese \param checkMode 指定列表控件的选择模式,默认为 DListWidget::CheckMode::Radio 。
114 * \~chinese \param parent 指定列表控件的父控件。
115 */
116 DListWidget::DListWidget(QBoxLayout::Direction direction, DListWidget::CheckMode checkMode, QWidget *parent) :
117 DScrollArea(*new DListWidgetPrivate(this), parent)
118 {
119 DThemeManager::registerWidget(this);
120
121 d_func()->mainWidget->setDirection(direction);
122 d_func()->checkMode = checkMode;
123 d_func()->init();
124 }
125
126 /**
127 * \~chinese \brief 新增一个列表项。
128 * \~chinese
129 * \~chinese \param w 要新增的列表项对象。
130 * \~chinese \param a 为要新增的列表项对象指定对齐方式, 默认为 Qt::AlignHCenter 。
131 * \~chinese
132 * \~chinese \return 返回新增的列表项在整个列表中的位置。
133 */
134 int DListWidget::addWidget(QWidget *w, Qt::Alignment a)
135 {
136 insertWidget(-1, w, a);
137
138 return count()-1;
139 }
140
141 /**
142 * \~chinese \brief 一次新增多个列表项。
143 * \~chinese
144 * \~chinese \param ws 要新增的多个列表项组成的QList。
145 * \~chinese \param a 为要新增的多个列表项对象指定对齐方式, 默认为 Qt::AlignHCenter 。
146 */
147 void DListWidget::addWidgets(const QList<QWidget*> &ws, Qt::Alignment a)
148 {
149 insertWidgets(-1, ws, a);
150 }
151
152 /**
153 * \~chinese \brief 在指定位置插入一个列表项。
154 * \~chinese
155 * \~chinese \param index 要插入列表项的位置。
156 * \~chinese \param w 要插入的列表项对象。
157 * \~chinese \param a 为要插入的列表项对象指定对齐方式, 默认为 Qt::AlignHCenter 。
158 */
159 void DListWidget::insertWidget(int index, QWidget *w, Qt::Alignment a)
160 {
161 Q_D(DListWidget);
162
163 if(w==NULL || d->widgetList.contains(w))
164 return;
165
166 if(d->itemWidth>0){
167 w->setFixedWidth(d->itemWidth);
168 }
169
170 if(d->itemHeight>0){
171 w->setFixedHeight(d->itemHeight);
172 }
173
174 if(index < 0) {
175 d->widgetList << w;
176 d->mainWidget->layout()->addWidget(w, 0, a);
177 } else {
178 d->widgetList.insert(index, w);
179 d->mainWidget->layout()->insertWidget(index, w, 0, a);
180 }
181
182 d->mapVisible[w] = true;
183
184 setVisibleCount(d->visibleCount + 1);
185
186 Q_EMIT countChanged(count());
187 }
188
189 /**
190 * \~chinese \brief 一次在指定位置插入多个列表项。
191 * \~chinese
192 * \~chinese \param index 要插入列表项的位置。
193 * \~chinese \param w 要插入的多个列表项对象组成的QList。
194 * \~chinese \param a 为要插入的列表项对象指定对齐方式, 默认为 Qt::AlignHCenter 。
195 */
196 void DListWidget::insertWidgets(int index, const QList<QWidget*> &ws, Qt::Alignment a)
197 {
198 if(index < 0) {
199 Q_FOREACH (QWidget *w, ws) {
200 insertWidget(-1, w, a);
201 }
202 } else {
203 Q_FOREACH (QWidget *w, ws) {
204 insertWidget(index++, w, a);
205 }
206 }
207 }
208
209 /**
210 * \~chinese \brief 设置每一个列表项的宽高。
211 * \~chinese
212 * \~chinese \param w 指定宽度。
213 * \~chinese \param h 指定高度。
214 */
215 void DListWidget::setItemSize(int w, int h)
216 {
217 Q_D(DListWidget);
218
219 d->itemWidth = w;
220 d->itemHeight = h;
221
222 if(d->itemWidth <= 0 && d->itemHeight <= 0)
223 return;
224
225 Q_FOREACH (QWidget *w, d->widgetList) {
226 if(d->itemWidth>0)
227 w->setFixedWidth(d->itemWidth);
228 if(d->itemHeight>0){
229 w->setFixedHeight(d->itemHeight);
230 }
231 }
232 }
233
234 /**
235 * \~chinese \brief 清空当前列表中的所有列表项。
236 * \~chinese
237 * \~chinese \param isDelete 是否释放列表项对象占用的内存空间。
238 */
239 void DListWidget::clear(bool isDelete)
240 {
241 Q_D(DListWidget);
242
243 for(int i=0;i<count();++i){
244 delete d->mainWidget->layout()->takeAt(i);
245 d->widgetList[i]->setParent(NULL);
246 if(isDelete)
247 d->widgetList[i]->deleteLater();
248 }
249
250 d->mapVisible.clear();
251 d->widgetList.clear();
252 d->checkedList.clear();
253
254 resize(0, 0);
255 setVisibleCount(0);
256
257 Q_EMIT countChanged(count());
258 }
259
260 /**
261 * \~chinese \brief 移除指定位置的列表项。
262 * \~chinese
263 * \~chinese \param index 指定的位置。
264 * \~chinese \param isDelete 是否释放被移除对象占用的内存空间。
265 */
266 void DListWidget::removeWidget(int index, bool isDelete)
267 {
268 Q_D(DListWidget);
269
270 QWidget *w = getWidget(index);
271
272 d->widgetList.removeAt(index);
273 delete d->mainWidget->layout()->takeAt(index);
274 d->checkedList.removeOne(index);
275
276 if(d->mapVisible.value(w, false)){
277 setVisibleCount(d->visibleCount -1);
278 }
279 d->mapVisible.remove(w);
280
281 w->setParent(NULL);
282 if(isDelete)
283 w->deleteLater();
284
285 Q_EMIT countChanged(count());
286 }
287
288 /**
289 * \~chinese \brief 显示指定位置的列表项。
290 * \~chinese
291 * \~chinese \param index 指定的位置。
292 */
293 void DListWidget::showWidget(int index)
294 {
295 Q_D(DListWidget);
296
297 QWidget *w = getWidget(index);
298
299 if(!d->mapVisible.value(w, true)){
300 w->show();
301 d->mapVisible[w] = true;
302 setVisibleCount(d->visibleCount+1);
303 }
304 }
305
306 /**
307 * \~chinese \brief 隐藏指定位置的列表项。
308 * \~chinese
309 * \~chinese \param index 指定的位置。
310 */
311 void DListWidget::hideWidget(int index)
312 {
313 Q_D(DListWidget);
314
315 QWidget *w = getWidget(index);
316
317 if(d->mapVisible.value(w, false)){
318 w->hide();
319 d->mapVisible[w] = false;
320 setVisibleCount(d->visibleCount-1);
321 }
322 }
323
324 /**
325 * \~chinese \brief 设置指定位置的列表项的选择状态。
326 * \~chinese
327 * \~chinese \param index 指定的位置。
328 * \~chinese \param checked 为 true 则设置指定的项为被选择状态,反之则反。
329 */
330 void DListWidget::setChecked(int index, bool checked)
331 {
332 Q_D(DListWidget);
333
334 if (!d->checkable || (checked && isChecked(index)) || (!checked && !isChecked(index)))
335 return;
336
337 if(d->checkMode == Radio && checked){
338 int checkedWidget = firstChecked();
339 if(checkedWidget>=0){
340 getWidget(checkedWidget)->setProperty("checked", false);
341 d->checkedList.removeOne(checkedWidget);
342 }
343 }
344
345 if(index>=0 && index < count()){
346 QWidget *w = getWidget(index);
347 w->setProperty("checked", checked);
348 }
349
350 if(checked){
351 d->checkedList << index;
352 }else{
353 d->checkedList.removeOne(index);
354 }
355
356 if(d->checkMode == Radio && checked){
357 Q_EMIT firstCheckedChanged(index);
358 }
359
360 Q_EMIT checkedChanged(index, checked);
361 }
362
363 /**
364 * \~chinese \sa DListWidget::checkMode
365 */
366 void DListWidget::setCheckMode(DListWidget::CheckMode checkMode)
367 {
368 Q_D(DListWidget);
369
370 d->checkMode = checkMode;
371 }
372
373 /**
374 * \~chinese \sa DListWidget::checkable
375 */
376 void DListWidget::setCheckable(bool checkable)
377 {
378 Q_D(DListWidget);
379
380 if (d->checkable == checkable)
381 return;
382
383 d->checkable = checkable;
384 }
385
386 /**
387 * \~chinese \sa DListWidget::toggleable
388 */
389 void DListWidget::setToggleable(bool enableUncheck)
390 {
391 Q_D(DListWidget);
392
393 if (d->toggleable == enableUncheck)
394 return;
395
396 d->toggleable = enableUncheck;
397 Q_EMIT toggleableChanged(enableUncheck);
398 }
399
400 /**
401 * \~chinese \sa DListWidget::enableHorizontalScroll
402 */
403 void DListWidget::setEnableHorizontalScroll(bool enableHorizontalScroll)
404 {
405 Q_D(DListWidget);
406
407 if (d->enableHorizontalScroll == enableHorizontalScroll)
408 return;
409
410 d->enableHorizontalScroll = enableHorizontalScroll;
411
412 updateSize();
413
414 Q_EMIT enableHorizontalScrollChanged(enableHorizontalScroll);
415 }
416
417 /**
418 * \~chinese \brief 设置是否允许垂直方向滚动。
419 * \~chinese
420 * \~chinese \param enableVerticalScroll 为 true 即为允许,反之则反。
421 */
422 void DListWidget::setEnableVerticalScroll(bool enableVerticalScroll)
423 {
424 Q_D(DListWidget);
425
426 if (d->enableVerticalScroll == enableVerticalScroll)
427 return;
428
429 d->enableVerticalScroll = enableVerticalScroll;
430
431 updateSize();
432
433 Q_EMIT enableVerticalScrollChanged(enableVerticalScroll);
434 }
435
436 /**
437 * \~chinese \sa DListWidget::spacing
438 */
439 void DListWidget::setSpacing(int spacing)
440 {
441 Q_D(DListWidget);
442
443 d->mainWidget->layout()->setSpacing(spacing);
444 }
445
446 /**
447 * \~chinese \sa DListWidget::direction
448 */
449 void DListWidget::setDirection(QBoxLayout::Direction direction)
450 {
451 Q_D(DListWidget);
452
453 d->mainWidget->layout()->setDirection(direction);
454 }
455
456 /**
457 * \~chinese \fn DListWidget::countChanged
458 * \~chinese \brief 当列表项数量发生改变时被调用。
459 * \~chinese \param count 当前列表项的数量。
460 * \~chinese \sa DListWidget::count
461 */
462
463 /**
464 * \~chinese \property DListWidget::count
465 * \~chinese \brief 所有列表项数量。
466
467 * \~chinese Getter: DListWidget::count , Signal: DListWidget::countChanged
468 */
469 int DListWidget::count() const
470 {
471 Q_D(const DListWidget);
472
473 return d->widgetList.count();
474 }
475
476 /**
477 * \~chinese \brief 获取指定列表项对象所在的位置。
478 * \~chinese
479 * \~chinese \param w 指定的列表项对象。
480 * \~chinese
481 * \~chinese \return 指定对象的位置。
482 */
483 int DListWidget::indexOf(const QWidget* w)
484 {
485 Q_D(DListWidget);
486
487 return d->widgetList.indexOf(const_cast<QWidget*>(w));
488 }
489
490 /**
491 * \~chinese \brief 获取指定位置的列表项对象。
492 * \~chinese
493 * \~chinese \param index 指定的位置。
494 * \~chinese
495 * \~chinese \return 指定位置处的列表项对象。
496 */
497 QWidget *DListWidget::getWidget(int index) const
498 {
499 Q_D(const DListWidget);
500
501 return d->widgetList[index];
502 }
503
504 /**
505 * \~chinese \fn DListWidget::firstCheckedChanged
506 * \~chinese \brief 第一个被选择的列表项的位置改变时被调用。
507 * \~chinese \param index 当前第一个被选择的列表项的位置。
508 * \~chinese \sa DListWidget::firstChecked
509 */
510
511 /**
512 * \~chinese \property DListWidget::firstChecked
513 * \~chinese \brief 第一个被选择的列表项的位置。
514 *
515 * \~chinese Getter: DListWidget::firstChecked , Signal: DListWidget::firstCheckedChanged
516 */
517 int DListWidget::firstChecked() const
518 {
519 Q_D(const DListWidget);
520
521 return d->checkedList.count()>0 ? d->checkedList.first() : -1;
522 }
523
524 /**
525 * \~chinese \brief 获取所有被选择项的位置组成的列表。
526 * \~chinese
527 * \~chinese \return 所有被选择项的位置组成的列表。
528 */
529 QList<int> DListWidget::checkedList() const
530 {
531 Q_D(const DListWidget);
532
533 return d->checkedList;
534 }
535
536 /**
537 * \~chinese \fn DListWidget::checkableChanged
538 * \~chinese \sa DListWidget::checkable
539 */
540
541 /**
542 * \~chinese \property DListWidget::checkable
543 * \~chinese \brief 这个属性表示列表控件中的项是否可以被选择。
544 * \~chinese Getter: DListWidget::checkable, Setter: DListWidget::setCheckable , Signal: DListWidget::checkableChanged
545 */
546 bool DListWidget::checkable() const
547 {
548 Q_D(const DListWidget);
549
550 return d->checkable;
551 }
552
553 /**
554 * \~chinese \fn DListWidget::toggleableChanged
555 * \~chinese \sa DListWidget::toggleable
556 */
557
558 /**
559 * \~chinese \property DListWidget::toggleable
560 * \~chinese \brief 这个属性表示列表控件的所有项的选择状态是否可以切换。
561 * \~chinese 当设置为 true 时,鼠标点击某一个列表项,会根据当前的列表项的选择状态切换,如果当前是已选择状态则点击后切换到未选择状态,反之则反,此选项默认为 false 。
562
563 * \~chinese Getter: DListWidget::toggleable , Setter: DListWidget::setToggleable , Signal: DListWidget::toggleableChanged
564 */
565 bool DListWidget::toggleable() const
566 {
567 Q_D(const DListWidget);
568
569 return d->toggleable;
570 }
571
572 bool DListWidget::isChecked(int index) const
573 {
574 Q_D(const DListWidget);
575
576 return d->checkedList.contains(index);
577 }
578
579 /**
580 * \~chinese \fn DListWidget::visibleCountChanged
581 * \~chinese \brief 当前列表中正在显示的所有列表项的数量发生改变时被调用。
582 * \~chinese \param visibleCount 当前列表中正在显示的所有列表项的数量。
583 * \~chinese \sa DListWidget::visibleCount
584 */
585
586 /**
587 * \~chinese \property DListWidget::visibleCount
588 * \~chinese \brief 当前列表中正在显示的所有列表项的数量。
589 * \~chinese Getter: DListWidget::visibleCount ,Signal: DListWidget::visibleCountChanged
590 */
591 int DListWidget::visibleCount() const
592 {
593 Q_D(const DListWidget);
594
595 return d->visibleCount;
596 }
597
598 /**
599 * \~chinese \property DListWidget::spacing
600 * \~chinese \brief 这个属性是列表项之间的间隔大小。
601 * \~chinese 使用 DListWidget::setSpacing 设置这个属性。
602 */
603 int DListWidget::spacing() const
604 {
605 Q_D(const DListWidget);
606
607 return d->mainWidget->layout()->spacing();
608 }
609
610 /**
611 * \~chinese \property DListWidget::direction
612 * \~chinese \brief 这个属性是列表项布局的方向。
613 * \~chinese 使用 DListWidget::setDirection 设置这个属性。
614 */
615 QBoxLayout::Direction DListWidget::direction() const
616 {
617 Q_D(const DListWidget);
618
619 return d->mainWidget->direction();
620 }
621
622 /**
623 * \~chinese \property DListWidget::checkMode
624 * \~chinese \brief 这个属性表示列表控件的选择模式。
625 * \~chinese 当属性的值为 DListWidget::CheckMode::Radio 时,列表为单选模式,为 DListWidget::CheckMode::MultipleCheck 时列表为多选模式。
626 * \~chinese Getter: DListWidget::checkMode , Setter: DListWidget::setCheckMode
627 */
628 DListWidget::CheckMode DListWidget::checkMode() const
629 {
630 Q_D(const DListWidget);
631
632 return d->checkMode;
633 }
634
635 void DListWidget::mouseReleaseEvent(QMouseEvent *e)
636 {
637 if(!checkable()){
638 return DScrollArea::mouseReleaseEvent(e);
639 }
640
641 Q_D(DListWidget);
642
643 QWidget *widget = childAt(e->pos());
644
645 while(widget && widget->parentWidget() != d->mainWidget) {
646 widget = widget->parentWidget();
647 }
648
649 int index = indexOf(widget);
650 if(index>=0){
651 if(toggleable())
652 setChecked(index, !isChecked(index));
653 else
654 setChecked(index, true);
655
656 Q_EMIT clicked(index);
657 }
658 }
659
660 void DListWidget::setVisibleCount(int count)
661 {
662 Q_D(DListWidget);
663
664 if(d->visibleCount == count)
665 return;
666
667 d->visibleCount = count;
668
669 Q_EMIT visibleCountChanged(count);
670 }
671
672 void DListWidget::updateSize()
673 {
674 Q_D(DListWidget);
675
676 if(!d->enableHorizontalScroll) {
677 if(direction() == QBoxLayout::LeftToRight || direction() == QBoxLayout::RightToLeft)
678 setFixedWidth(d->mainWidget->width());
679 else
680 setMinimumWidth(d->mainWidget->width());
681 } else {
682 setMinimumWidth(qMin(d->mainWidget->width(), maximumWidth()));
683 }
684
685 if(!d->enableVerticalScroll) {
686 if(direction() == QBoxLayout::TopToBottom || direction() == QBoxLayout::BottomToTop)
687 setFixedHeight(d->mainWidget->height());
688 else
689 setMinimumHeight(d->mainWidget->height());
690 } else {
691 setMinimumHeight(qMin(d->mainWidget->height(), maximumHeight()));
692 }
693 }
694
695 /**
696 * \~chinese \brief 获取所有列表项对象。
697 * \~chinese
698 * \~chinese \return 所有列表项对象组成的列表。
699 */
700 QList<QWidget*> DListWidget::widgetList() const
701 {
702 Q_D(const DListWidget);
703
704 return d->widgetList;
705 }
706
707 /**
708 * \~chinese \brief 获取列表项的宽高。
709 * \~chinese
710 * \~chinese \return 列表项的宽高。
711 */
712 QSize DListWidget::itemSize() const
713 {
714 Q_D(const DListWidget);
715
716 return QSize(d->itemWidth, d->itemHeight);
717 }
718
719 /**
720 * \~chinese \fn DListWidget::enableHorizontalScrollChanged
721 * \~chinese \sa DListWidget::enableHorizontalScroll
722 */
723
724 /**
725 * \~chinese \property DListWidget::enableHorizontalScroll
726 * \~chinese \brief 这个属性表示列表控件是否允许水平滚动。
727 * \~chinese Getter: DListWidget::enableHorizontalScroll , Setter:DListWidget::setEnableHorizontalScroll , Signal: DListWidget::enableHorizontalScrollChanged
728 */
729 bool DListWidget::enableHorizontalScroll() const
730 {
731 Q_D(const DListWidget);
732
733 return d->enableHorizontalScroll;
734 }
735
736 /**
737 * \~chinese \fn DListWidget::enableVerticalScrollChanged
738 * \~chinese \sa DListWidget::enableVerticalScroll
739 */
740
741 /**
742 * \~chinese \property DListWidget::enableVerticalScroll
743 * \~chinese \brief 这个属性表示列表控件是否允许垂直滚动。
744 * \~chinese Getter: DListWidget::enableVerticalScroll , Setter:DListWidget::setEnableVerticalScroll , Signal: DListWidget::enableVerticalScrollChanged
745 */
746 bool DListWidget::enableVerticalScroll() const
747 {
748 Q_D(const DListWidget);
749
750 return d->enableVerticalScroll;
751 }
752
753 /**
754 * \~chinese \brief 设置列表的内容与边框之间的间隔。
755 * \~chinese
756 * \~chinese \param left 左边距。
757 * \~chinese \param top 上边距。
758 * \~chinese \param right 右边距。
759 * \~chinese \param bottom 下边距。
760 */
761 void DListWidget::setContentsMargins(int left, int top, int right, int bottom)
762 {
763 Q_D(DListWidget);
764
765 d->mainWidget->layout()->setContentsMargins(left, top, right, bottom);
766 }
767
768 /**
769 * \~chinese \brief 这是一个重载函数,设置列表的内容与边框之间的间隔。
770 * \~chinese
771 * \~chinese \param margins 指定左上右下边距。
772 */
773 void DListWidget::setContentsMargins(const QMargins &margins)
774 {
775 Q_D(DListWidget);
776
777 d->mainWidget->layout()->setContentsMargins(margins);
778 }
779
780 /**
781 * \~chinese \brief 获取列表的内容与边框之间的间隔。
782 * \~chinese
783 * \~chinese \param left 用于保存左边距的指针。
784 * \~chinese \param top 用于保存上边距的指针。
785 * \~chinese \param right 用于保存右边距的指针。
786 * \~chinese \param bottom 用于保存下边距的指针。
787 */
788 void DListWidget::getContentsMargins(int *left, int *top, int *right, int *bottom) const
789 {
790 Q_D(const DListWidget);
791
792 d->mainWidget->layout()->getContentsMargins(left, top, right, bottom);
793 }
794
795 /**
796 * \~chinese \brief 获取列表的内容与边框之间的间隔。
797 * \~chinese
798 * \~chinese \return 列表的内容与边框之间的间隔。
799 */
800 QMargins DListWidget::contentsMargins() const
801 {
802 Q_D(const DListWidget);
803
804 return d->mainWidget->layout()->contentsMargins();
805 }
806
807 /**
808 * \~chinese \brief 获取列表所有内容的大小。
809 * \~chinese
810 * \~chinese \return 列表所有内容的大小。
811 */
812 QRect DListWidget::contentsRect() const
813 {
814 Q_D(const DListWidget);
815
816 return d->mainWidget->layout()->contentsRect();
817 }
818
819 QSize DListWidget::sizeHint() const
820 {
821 return minimumSize();
822 }
823
824 DListWidget::DListWidget(DListWidgetPrivate &dd, QWidget *parent):
825 DScrollArea(dd, parent)
826 {
827 DThemeManager::registerWidget(this);
828
829 d_func()->init();
830 }
831
832 DWIDGET_END_NAMESPACE
+0
-126
src/widgets/dlistwidget.h less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #ifndef DLISTWIDGET_H
18 #define DLISTWIDGET_H
19
20 #include <QMap>
21 #include <QBoxLayout>
22
23 #include "dscrollarea.h"
24 #include "dtkwidget_global.h"
25
26 DWIDGET_BEGIN_NAMESPACE
27
28 class DListWidgetPrivate;
29 class DListWidget : public DScrollArea
30 {
31 Q_OBJECT
32
33 Q_PROPERTY(int firstChecked READ firstChecked NOTIFY firstCheckedChanged)
34 Q_PROPERTY(int count READ count NOTIFY countChanged FINAL)
35 Q_PROPERTY(int visibleCount READ visibleCount NOTIFY visibleCountChanged FINAL)
36 Q_PROPERTY(int spacing READ spacing WRITE setSpacing)
37 Q_PROPERTY(QBoxLayout::Direction direction READ direction WRITE setDirection)
38 Q_PROPERTY(bool checkable READ checkable WRITE setCheckable)
39 Q_PROPERTY(bool toggleable READ toggleable WRITE setToggleable NOTIFY toggleableChanged)
40 Q_PROPERTY(bool enableHorizontalScroll READ enableHorizontalScroll WRITE setEnableHorizontalScroll NOTIFY enableHorizontalScrollChanged)
41 Q_PROPERTY(bool enableVerticalScroll READ enableVerticalScroll WRITE setEnableVerticalScroll NOTIFY enableVerticalScrollChanged)
42 Q_PROPERTY(CheckMode checkMode READ checkMode)
43
44 Q_ENUMS(CheckMode)
45 public:
46 enum CheckMode{
47 Radio,
48 MultipleCheck
49 };
50
51 explicit DListWidget(CheckMode checkMode = Radio, QWidget *parent = 0);
52 explicit DListWidget(QBoxLayout::Direction direction, CheckMode checkMode = Radio, QWidget *parent = 0);
53
54 public Q_SLOTS:
55 int addWidget(QWidget *w, Qt::Alignment a = Qt::AlignHCenter);
56 void addWidgets(const QList<QWidget*> &ws, Qt::Alignment a = Qt::AlignHCenter);
57 void insertWidget(int index, QWidget *w, Qt::Alignment a = Qt::AlignHCenter);
58 void insertWidgets(int index, const QList<QWidget*> &ws, Qt::Alignment a = Qt::AlignHCenter);
59 void setItemSize(int w, int h);
60 void clear(bool isDelete = true);
61 void removeWidget(int index, bool isDelete = true);
62 void showWidget(int index);
63 void hideWidget(int index);
64 void setChecked(int index, bool checked);
65 void setCheckMode(CheckMode checkMode);
66 void setCheckable(bool checkable);
67 void setToggleable(bool toggleable);
68 void setEnableHorizontalScroll(bool enableHorizontalScroll);
69 void setEnableVerticalScroll(bool enableVerticalScroll);
70 void setSpacing(int spacing);
71 void setDirection(QBoxLayout::Direction direction);
72
73 public:
74 int count() const;
75 int indexOf(const QWidget* widget);
76 QWidget *getWidget(int index) const;
77 int firstChecked() const;
78 QList<int> checkedList() const;
79 bool checkable() const;
80 bool toggleable() const;
81 bool isChecked(int index) const;
82 int visibleCount() const;
83 int spacing() const;
84 QBoxLayout::Direction direction() const;
85 CheckMode checkMode() const;
86 QList<QWidget*> widgetList() const;
87 QSize itemSize() const;
88 bool enableHorizontalScroll() const;
89 bool enableVerticalScroll() const;
90 void setContentsMargins(int left, int top, int right, int bottom);
91 void setContentsMargins(const QMargins &margins);
92 void getContentsMargins(int *left, int *top, int *right, int *bottom) const;
93 QMargins contentsMargins() const;
94
95 QRect contentsRect() const;
96
97 QSize sizeHint() const Q_DECL_OVERRIDE;
98
99 Q_SIGNALS:
100 void firstCheckedChanged(int index);
101 void checkedChanged(int index, bool checked);
102 void countChanged(int count);
103 void checkableChanged(bool checkable);
104 void toggleableChanged(bool toggleable);
105 void visibleCountChanged(int visibleCount);
106 void clicked(int index);
107 void enableHorizontalScrollChanged(bool enableHorizontalScroll);
108 void enableVerticalScrollChanged(bool enableVerticalScroll);
109
110 private Q_SLOTS:
111 void updateSize();
112
113 protected:
114 DListWidget(DListWidgetPrivate &dd, QWidget *parent);
115 void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
116 void setVisibleCount(int count);
117
118 private:
119 Q_DISABLE_COPY(DListWidget)
120 D_DECLARE_PRIVATE(DListWidget)
121 };
122
123 DWIDGET_END_NAMESPACE
124
125 #endif // DLISTWIDGET_H
3737 q->setScene(new QGraphicsScene(q));
3838 q->setRenderHint(QPainter::SmoothPixmapTransform);
3939 q->setViewportUpdateMode(QGraphicsView::SmartViewportUpdate);
40 q->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
41 q->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
4042
4143 rotateAni.setDuration(1000);
4244 rotateAni.setEasingCurve(QEasingCurve::OutInQuad);
121123 DObject(*new DLoadingIndicatorPrivate(this))
122124 {
123125 d_func()->init();
124
125 // May crash if the scene is not set.
126 DThemeManager::registerWidget(this);
127126 }
128127
129128 DLoadingIndicator::~DLoadingIndicator()
1818 #include "dplatformwindowhandle.h"
1919 #include "dapplication.h"
2020 #include "dtitlebar.h"
21 #include "dmessagemanager.h"
2122
2223 #include "private/dmainwindow_p.h"
2324 #include "private/dapplication_p.h"
2627 #include <QShortcut>
2728 #include <QWindow>
2829 #include <QMouseEvent>
30 #include <QComboBox>
2931
3032 #ifdef Q_OS_MAC
3133 #include "osxwindow.h"
5254 titlebar->setEmbedMode(true);
5355 #endif
5456 }
57
58 qq->setMinimumWidth(titlebar->minimumSizeHint().width());
5559 }
5660
5761 void DMainWindowPrivate::init()
5862 {
5963 D_Q(DMainWindow);
64
65 // 默认开启标题栏阴影
66 q->setTitlebarShadowEnabled(true);
6067
6168 const DApplication *dapp = qobject_cast<DApplication *>(qApp);
6269 if (dapp) {
8188 q->connect(handle, &DPlatformWindowHandle::enableBlurWindowChanged, q, &DMainWindow::enableBlurWindowChanged);
8289 q->connect(handle, &DPlatformWindowHandle::autoInputMaskByClipPathChanged, q, &DMainWindow::autoInputMaskByClipPathChanged);
8390
84 if (!handle->isEnableNoTitlebar(q->windowHandle())) {
91 if (!handle->isEnabledNoTitlebar(q->windowHandle())) {
8592 q->connect(qApp, &QGuiApplication::focusWindowChanged, q, [q] {
8693 if (q->isActiveWindow())
8794 {
109116
110117 }
111118
119 void DMainWindowPrivate::updateTitleShadowGeometry()
120 {
121 D_QC(DMainWindow);
122
123 if (!titleShadow)
124 return;
125
126 QRect rect(0, titlebar->rect().bottom() + 1, q->width(), titleShadow->sizeHint().height());
127 titleShadow->setGeometry(rect);
128 // 全凭时会隐藏窗口标题栏,因此不应该显示标题栏的阴影
129 titleShadow->setVisible(!q->isFullScreen());
130 titleShadow->raise();
131 }
132
112133 /*!
113134 * \class DMainWindow
114135 * \brief The DMainWindow class provides a main application window.
385406 return d->handle->autoInputMaskByClipPath();
386407 }
387408
409 /*!
410 * \~chinese \brief DMainWindow::titlebarShadowIsEnabled
411 * \~chinese \return true titleBar阴影开启 false 阴影关闭
412 */
413 bool DMainWindow::titlebarShadowIsEnabled() const
414 {
415 D_DC(DMainWindow);
416
417 return d->titleShadow;
418 }
419
420 /*!
421 * \~chinese \brief DMainWindow::setWindowRadius 设定窗口的圆角
422 * \~chinese \param windowRadius 窗口的圆角值
423 */
388424 void DMainWindow::setWindowRadius(int windowRadius)
389425 {
390426 D_D(DMainWindow);
396432 d->handle->setWindowRadius(windowRadius);
397433 }
398434
435 /*!
436 * \~chinese \brief DMainWindow::setBorderWidth 设定边框的宽度
437 * \~chinese \param borderWidth 边框的宽度
438 */
399439 void DMainWindow::setBorderWidth(int borderWidth)
400440 {
401441 D_D(DMainWindow);
407447 d->handle->setBorderWidth(borderWidth);
408448 }
409449
450 /*!
451 * \~chinese \brief DMainWindow::setBorderColor 设定边框的颜色
452 * \~chinese \param borderColor 边框的颜色
453 */
410454 void DMainWindow::setBorderColor(const QColor &borderColor)
411455 {
412456 D_D(DMainWindow);
418462 d->handle->setBorderColor(borderColor);
419463 }
420464
465 /*!
466 * \~chinese \brief DMainWindow::setShadowRadius 设定阴影区域的圆角
467 * \~chinese \param shadowRadius 阴影区域圆角大小
468 */
421469 void DMainWindow::setShadowRadius(int shadowRadius)
422470 {
423471 D_D(DMainWindow);
429477 d->handle->setShadowRadius(shadowRadius);
430478 }
431479
480 /*!
481 * \~chinese \brief DMainWindow::setShadowOffset 设定阴影区域的偏移距离
482 * \~chinese \param shadowOffset 阴影区域的偏移距离
483 */
432484 void DMainWindow::setShadowOffset(const QPoint &shadowOffset)
433485 {
434486 D_D(DMainWindow);
440492 d->handle->setShadowOffset(shadowOffset);
441493 }
442494
495 /*!
496 * \~chinese \brief DMainWindow::setShadowColor 设定阴影的颜色
497 * \~chinese \param shadowColor 阴影的颜色
498 */
443499 void DMainWindow::setShadowColor(const QColor &shadowColor)
444500 {
445501 D_D(DMainWindow);
451507 d->handle->setShadowColor(shadowColor);
452508 }
453509
510 /*!
511 * \~chinese \brief DMainWindow::setClipPath 设定裁剪路径
512 * \~chinese \param clipPath 裁剪的路径
513 */
454514 void DMainWindow::setClipPath(const QPainterPath &clipPath)
455515 {
456516 D_D(DMainWindow);
462522 d->handle->setClipPath(clipPath);
463523 }
464524
525 /*!
526 * \~chinese \brief DMainWindow::setFrameMask 设定边框的mask区域
527 * \~chinese \param frameMask mask区域
528 */
465529 void DMainWindow::setFrameMask(const QRegion &frameMask)
466530 {
467531 D_D(DMainWindow);
473537 d->handle->setFrameMask(frameMask);
474538 }
475539
540 /*!
541 * \~chinese \brief DMainWindow::setTranslucentBackground 设定时候擦除背景
542 * \~chinese \param translucentBackground true擦除背景 false不擦除背景
543 */
476544 void DMainWindow::setTranslucentBackground(bool translucentBackground)
477545 {
478546 D_D(DMainWindow);
484552 d->handle->setTranslucentBackground(translucentBackground);
485553 }
486554
555 /*!
556 * \~chinese \brief DMainWindow::setEnableSystemResize 设定是否允许系统调整窗口大小
557 * \~chinese \param enableSystemResize true允许系统调整 false不允许系统调整
558 */
487559 void DMainWindow::setEnableSystemResize(bool enableSystemResize)
488560 {
489561 D_D(DMainWindow);
495567 d->handle->setEnableSystemResize(enableSystemResize);
496568 }
497569
570 /*!
571 * \~chinese \brief DMainWindow::setEnableSystemMove 设定时候允许系统移动窗口
572 * \~chinese \param enableSystemMove true允许移动 false不允许移动
573 */
498574 void DMainWindow::setEnableSystemMove(bool enableSystemMove)
499575 {
500576 D_D(DMainWindow);
506582 d->handle->setEnableSystemMove(enableSystemMove);
507583 }
508584
585 /*!
586 * \~chinese \brief DMainWindow::setEnableBlurWindow 设定时候能伸缩窗口
587 * \~chinese \param enableBlurWindow true能伸缩 false不能伸缩
588 */
509589 void DMainWindow::setEnableBlurWindow(bool enableBlurWindow)
510590 {
511591 D_D(DMainWindow);
517597 d->handle->setEnableBlurWindow(enableBlurWindow);
518598 }
519599
600 /*!
601 * \~chinese \brief DMainWindow::setAutoInputMaskByClipPath 通过裁剪区域自动设定mask
602 * \~chinese \param autoInputMaskByClipPath true自动设定 false不自动设定
603 */
520604 void DMainWindow::setAutoInputMaskByClipPath(bool autoInputMaskByClipPath)
521605 {
522606 D_D(DMainWindow);
526610 }
527611
528612 d->handle->setAutoInputMaskByClipPath(autoInputMaskByClipPath);
613 }
614
615 /*!
616 * \~chinese \brief DMainWindow::sendMessage 发送消息
617 * \~chinese \param icon 消息展示图标
618 * \~chinese \param message 消息内容
619 */
620 void DMainWindow::sendMessage(const QIcon &icon, const QString &message)
621 {
622 DMessageManager::instance()->sendMessage(this, icon, message);
623 }
624
625 /*!
626 * \~chinese \brief DMainWindow::sendMessage 发送消息
627 * \~chinese \param message DFloatingMessage消息
628 */
629 void DMainWindow::sendMessage(DFloatingMessage *message)
630 {
631 DMessageManager::instance()->sendMessage(this, message);
632 }
633
634 /*!
635 * \~chinese \brief DMainWindow::setTitlebarShadowEnabled设定titleBar是否有阴影区域
636 * \~chinese \param titlebarShadowEnabled true titleBar有阴影 false无阴影
637 */
638 void DMainWindow::setTitlebarShadowEnabled(bool titlebarShadowEnabled)
639 {
640 D_D(DMainWindow);
641
642 if (static_cast<bool>(d->titleShadow) == titlebarShadowEnabled)
643 return;
644
645 if (titlebarShadowEnabled) {
646 d->titleShadow = new DShadowLine(this);
647 d->titleShadow->setAttribute(Qt::WA_AlwaysStackOnTop);
648 d->updateTitleShadowGeometry();
649 } else {
650 d->titleShadow->deleteLater();
651 d->titleShadow = nullptr;
652 }
529653 }
530654
531655 #ifdef Q_OS_MAC
543667 d_func()->init();
544668 }
545669
670 void DMainWindow::mouseMoveEvent(QMouseEvent *event)
671 {
672 QWidget *compoment = childAt(event->pos());
673 if (qobject_cast<QComboBox *>(compoment)) {
674 return;
675 }
676 return QMainWindow::mouseMoveEvent(event);
677 }
678
679 void DMainWindow::resizeEvent(QResizeEvent *event)
680 {
681 Q_UNUSED(event)
682 D_D(DMainWindow);
683
684 d->updateTitleShadowGeometry();
685
686 return QMainWindow::resizeEvent(event);
687 }
688
689 void DMainWindow::changeEvent(QEvent *event)
690 {
691 if (event->type() == QEvent::WindowStateChange) {
692 D_D(DMainWindow);
693 d->updateTitleShadowGeometry();
694 }
695
696 return QMainWindow::changeEvent(event);
697 }
698
546699 DWIDGET_END_NAMESPACE
1717 #ifndef DMAINWINDOW_H
1818 #define DMAINWINDOW_H
1919
20 #include "dtkwidget_global.h"
21 #include "dobject.h"
20 #include <dtkwidget_global.h>
21 #include <DFloatingMessage>
22 #include <DObject>
2223
2324 #include <QMainWindow>
2425
4546 Q_PROPERTY(bool enableSystemMove READ enableSystemMove WRITE setEnableSystemMove NOTIFY enableSystemMoveChanged)
4647 Q_PROPERTY(bool enableBlurWindow READ enableBlurWindow WRITE setEnableBlurWindow NOTIFY enableBlurWindowChanged)
4748 Q_PROPERTY(bool autoInputMaskByClipPath READ autoInputMaskByClipPath WRITE setAutoInputMaskByClipPath NOTIFY autoInputMaskByClipPathChanged)
49 Q_PROPERTY(bool titlebarShadowEnabled READ titlebarShadowIsEnabled WRITE setTitlebarShadowEnabled)
4850
4951 public:
5052 explicit DMainWindow(QWidget *parent = 0);
7274 bool enableBlurWindow() const;
7375 bool autoInputMaskByClipPath() const;
7476
77 bool titlebarShadowIsEnabled() const;
78
7579 public Q_SLOTS:
7680 void setWindowRadius(int windowRadius);
7781
96100 void setWindowFlags(Qt::WindowFlags type);
97101 #endif
98102
103 void sendMessage(const QIcon &icon, const QString &message);
104 void sendMessage(DFloatingMessage *message);
105
106 void setTitlebarShadowEnabled(bool titlebarShadowEnabled);
107
99108 Q_SIGNALS:
100109 void windowRadiusChanged();
101110 void borderWidthChanged();
114123
115124 protected:
116125 DMainWindow(DMainWindowPrivate &dd, QWidget *parent = 0);
126 void mouseMoveEvent(QMouseEvent *event) override;
127 void resizeEvent(QResizeEvent *event) override;
128 void changeEvent(QEvent *event) override;
117129
118130 private:
119131 D_DECLARE_PRIVATE(DMainWindow)
0 #include "dmessagemanager.h"
1 #include <QDebug>
2 #include <QEvent>
3
4 #define D_MESSAGE_MANAGER_CONTENT "_d_message_manager_content"
5
6 Q_DECLARE_METATYPE(QMargins)
7
8 DMessageManager::DMessageManager() //私有静态构造函数
9 {
10 }
11
12 DMessageManager *DMessageManager::instance() //公有静态函数
13 {
14 static DMessageManager instance; //局部静态变量
15 return &instance;
16 }
17
18 void DMessageManager::sendMessage(QWidget *par, DFloatingMessage *floMsg)
19 {
20 QWidget *content = par->findChild<QWidget *>(D_MESSAGE_MANAGER_CONTENT);
21
22 if (!content) {
23 content = new QWidget(par);
24 content->setObjectName(D_MESSAGE_MANAGER_CONTENT);
25 content->setAttribute(Qt::WA_AlwaysStackOnTop);
26
27 QMargins magins = par->property("_d_margins").value<QMargins>();
28 if (par->property("_d_margins").isValid())
29 content->setContentsMargins(magins);
30 else
31 content->setContentsMargins(QMargins(20, 0, 20, 0));
32
33 content->installEventFilter(this);
34 par->installEventFilter(this);
35 QVBoxLayout *layout = new QVBoxLayout(content);
36 layout->setSpacing(0);
37 layout->setMargin(0);
38 layout->setDirection(QBoxLayout::BottomToTop);
39 content->show();
40 }
41
42 static_cast<QBoxLayout*>(content->layout())->addWidget(floMsg, 0, Qt::AlignHCenter);
43 }
44
45 void DMessageManager::sendMessage(QWidget *par, const QIcon &icon, const QString &message)
46 {
47 QWidget *content = par->findChild<QWidget *>(D_MESSAGE_MANAGER_CONTENT);
48 int text_message_count = 0;
49
50 for (DFloatingMessage *message : content->findChildren<DFloatingMessage*>()) {
51 if (message->messageType() == DFloatingMessage::TransientType) {
52 ++text_message_count;
53 }
54 }
55
56 // TransientType 类型的通知消息,最多只允许同时显示三个
57 if (text_message_count >= 3)
58 return;
59
60 DFloatingMessage *floMsg = new DFloatingMessage(DFloatingMessage::TransientType);
61 floMsg->setAttribute(Qt::WA_DeleteOnClose);
62 floMsg->setIcon(icon);
63 floMsg->setMessage(message);
64 sendMessage(par, floMsg);
65 }
66
67 bool DMessageManager::setContentMargens(QWidget *par, const QMargins &margins)
68 {
69 QWidget *content = par->findChild<QWidget *>(D_MESSAGE_MANAGER_CONTENT);
70 if (content) {
71 content->setContentsMargins(margins);
72 return true;
73 } else {
74 par->setProperty("_d_margins", QVariant::fromValue(margins));
75 return false;
76 }
77 }
78
79 bool DMessageManager::eventFilter(QObject *watched, QEvent *event)
80 {
81 if (event->type() == QEvent::LayoutRequest || event->type() == QEvent::Resize) {
82 if (QWidget *widget = qobject_cast<QWidget *>(watched)) {
83 QWidget *content;
84
85 if (widget->objectName() == D_MESSAGE_MANAGER_CONTENT) {
86 content = widget;
87 } else {
88 content = widget->findChild<QWidget*>(D_MESSAGE_MANAGER_CONTENT);
89 }
90
91 QWidget *par = content->parentWidget();
92
93 // 限制通知消息的最大宽度
94 for (DFloatingMessage *message : content->findChildren<DFloatingMessage*>()) {
95 message->setMaximumWidth(par->rect().marginsRemoved(content->contentsMargins()).width());
96 }
97
98 QRect geometry(QPoint(0, 0), content->sizeHint());
99 geometry.moveCenter(par->rect().center());
100 geometry.moveBottom(par->rect().bottom());
101 content->setGeometry(geometry);
102 }
103 } else if (event->type() == QEvent::ChildRemoved) {
104 // 如果是通知消息被删除的事件
105 if (QWidget *widget = qobject_cast<QWidget*>(watched)) {
106 if (widget->objectName() == D_MESSAGE_MANAGER_CONTENT
107 && widget->layout() && widget->layout()->count() == 0) {
108 widget->parent()->removeEventFilter(this);
109 widget->deleteLater();
110 }
111 }
112 }
113
114 return QObject::eventFilter(watched, event);
115 }
0 #ifndef DMESSAGEMANAGER_H
1 #define DMESSAGEMANAGER_H
2
3 #include <QObject>
4 #include <QWidget>
5 #include <QHBoxLayout>
6
7 #include "dfloatingmessage.h"
8
9 DWIDGET_USE_NAMESPACE
10
11 class DMessageManager: public QObject
12 {
13 Q_OBJECT
14
15 private:
16 DMessageManager(); //构造函数是私有的
17
18 public:
19 static DMessageManager *instance();
20
21 void sendMessage(QWidget *par, DFloatingMessage *floMsg);
22 void sendMessage(QWidget *par, const QIcon &icon, const QString &message);
23 bool setContentMargens(QWidget *par, const QMargins &margins);
24
25 protected:
26 bool eventFilter(QObject *watched, QEvent *event) override;
27 };
28
29 #endif // DMESSAGEMANAGER_H
105105 m_picture = new QLabel;
106106 m_pictureVisible = true;
107107 m_controlWidget = new QWidget;
108 m_prevBtn = new DImageButton;
109 m_pauseBtn = new DImageButton;
110 m_playBtn = new DImageButton;
111 m_nextBtn = new DImageButton;
108 m_prevBtn = new DFloatingButton(m_controlWidget);
109 m_pauseBtn = new DFloatingButton(m_controlWidget);
110 m_playBtn = new DFloatingButton(m_controlWidget);
111 m_nextBtn = new DFloatingButton(m_controlWidget);
112112 m_tickEffect = new DTickEffect(m_title, m_title);
113
114 m_prevBtn->setIcon(QIcon::fromTheme(":/images/play_previous.svg"));
115 m_playBtn->setIcon(QIcon::fromTheme(":/images/play_start.svg"));
116 m_nextBtn->setIcon(QIcon::fromTheme(":/images/play_next.svg"));
117 m_pauseBtn->setIcon(QIcon::fromTheme(":/images/play_pause.svg"));
118 m_prevBtn->setBackgroundRole(DPalette::Button);
119 m_playBtn->setBackgroundRole(DPalette::Button);
120 m_nextBtn->setBackgroundRole(DPalette::Button);
121 m_pauseBtn->setBackgroundRole(DPalette::Button);
122 m_prevBtn->setAutoExclusive(true);
123 m_pauseBtn->setAutoExclusive(true);
124 m_playBtn->setAutoExclusive(true);
125 m_nextBtn->setAutoExclusive(true);
113126
114127 m_title->setAlignment(Qt::AlignCenter);
115128 m_picture->setFixedSize(200, 200);
119132 m_nextBtn->setObjectName("NextBtn");
120133
121134 m_tickEffect->setDirection(DTickEffect::RightToLeft);
122 m_tickEffect->setDuration(3000);
135 m_tickEffect->setFixedPixelMove(50);
123136
124137 m_titleScrollArea->setWidget(m_title);
125138 m_titleScrollArea->setObjectName("scrollarea");
134147
135148 #ifdef QT_DEBUG
136149 m_title->setText("MPRIS Title");
137 m_nextBtn->setNormalPic("://images/arrow_right_normal.png");
138 m_pauseBtn->setNormalPic("://images/arrow_left_white.png");
139 m_playBtn->setNormalPic("://images/arrow_right_white.png");
140 m_prevBtn->setNormalPic("://images/arrow_left_normal.png");
150 m_nextBtn->setIcon(QIcon::fromTheme("://images/arrow_right_normal.png"));
151 m_pauseBtn->setIcon(QIcon::fromTheme("://images/arrow_left_white.png"));
152 m_playBtn->setIcon(QIcon::fromTheme("://images/arrow_right_white.png"));
153 m_prevBtn->setIcon(QIcon::fromTheme("://images/arrow_left_normal.png"));
141154 #endif
142155
143156 QHBoxLayout *controlLayout = new QHBoxLayout;
147160 controlLayout->addWidget(m_playBtn);
148161 controlLayout->addStretch();
149162 controlLayout->addWidget(m_nextBtn);
150 controlLayout->setContentsMargins(0, 10, 0, 0);
163 controlLayout->setContentsMargins(0, 5, 0, 0);
151164 m_controlWidget->setLayout(controlLayout);
152165
153166
238251 {
239252 const QString stat = m_mprisInter->playbackStatus();
240253
241 if (stat == "Playing")
242 {
254 if (stat == "Playing") {
243255 m_pauseBtn->setVisible(true);
256 m_pauseBtn->setFocus();
244257 m_playBtn->setVisible(false);
245258 } else {
246259 m_pauseBtn->setVisible(false);
247260 m_playBtn->setVisible(true);
261 m_playBtn->setFocus();
248262 }
249263 }
250264
+0
-216
src/widgets/doption.cpp less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #include "doption.h"
18 #include "dtkwidget_global.h"
19 #include "dthememanager.h"
20 #include "private/doption_p.h"
21
22 #include <QDebug>
23 #include <QResizeEvent>
24
25 DWIDGET_BEGIN_NAMESPACE
26
27 DOptionPrivate::DOptionPrivate(DOption *q) :
28 DObjectPrivate(q)
29 {
30 }
31
32 void DOptionPrivate::init()
33 {
34 D_Q(DOption);
35
36 m_checkedIconLabel = new QLabel;
37 m_checkedIconLabel->setMinimumSize(0, 0);
38 m_checkedIconLabel->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
39 m_optionIcon = new QLabel;
40 m_optionIcon->setMinimumSize(0, 0);
41 m_optionIcon->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
42 m_optionName = new QLabel;
43 m_optionName->setObjectName("OptionName");
44 m_optionName->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
45
46 m_layout = new QHBoxLayout;
47 m_layout->addWidget(m_checkedIconLabel);
48 m_layout->addWidget(m_optionIcon);
49 m_layout->addWidget(m_optionName);
50 m_layout->setSpacing(5);
51 m_layout->setContentsMargins(0, 0, 0, 0);
52
53 q->setLayout(m_layout);
54 }
55
56 void DOptionPrivate::setIcon(const QString &iconName)
57 {
58 setIcon(QPixmap(iconName));
59 }
60
61 void DOptionPrivate::setIcon(const QPixmap &icon)
62 {
63 m_optionIcon->setPixmap(icon);
64 }
65
66 const QString DOptionPrivate::name() const
67 {
68 return m_optionName->text();
69 }
70
71 const QString DOptionPrivate::value() const
72 {
73 return m_optionValue;
74 }
75
76 bool DOptionPrivate::checked() const
77 {
78 return m_checked;
79 }
80
81 void DOptionPrivate::setChecked(bool checked)
82 {
83 if (m_checked == checked)
84 return;
85 m_checked = checked;
86
87 D_QC(DOption);
88
89 Q_EMIT q->checkedChanged(m_checked);
90 }
91
92 const QString DOptionPrivate::checkedIcon() const
93 {
94 return m_checkedIconName;
95 }
96
97 void DOptionPrivate::setCheckedIcon(const QString &icon)
98 {
99 if (icon == m_checkedIconName)
100 return;
101 m_checkedIconName = icon;
102 m_checkedIconLabel->setPixmap(QPixmap(icon));
103
104 D_QC(DOption);
105
106 Q_EMIT q->checkedIconChanged(icon);
107 }
108
109 void DOptionPrivate::sizeChanged(QResizeEvent *e)
110 {
111 D_Q(DOption);
112
113 Q_EMIT q->sizeChanged(e->size());
114 }
115
116 DOption::DOption(QWidget *parent) :
117 QFrame(parent),
118 DObject(*new DOptionPrivate(this))
119 {
120 DThemeManager::registerWidget(this, QStringList({"checked"}));
121
122 D_D(DOption);
123
124 d->init();
125 }
126
127 void DOption::setName(const QString &name)
128 {
129 D_D(DOption);
130
131 d->m_optionName->setText(name);
132 }
133
134 void DOption::setValue(const QString &value)
135 {
136 D_D(DOption);
137
138 d->m_optionValue = value;
139 }
140
141 void DOption::setIcon(const QString &icon)
142 {
143 D_D(DOption);
144
145 d->setIcon(icon);
146 }
147
148 void DOption::setIcon(const QPixmap &icon)
149 {
150 D_D(DOption);
151
152 d->setIcon(icon);
153 }
154
155 const QString DOption::value() const
156 {
157 D_DC(DOption);
158
159 return d->value();
160 }
161
162 const QString DOption::name() const
163 {
164 D_DC(DOption);
165
166 return d->name();
167 }
168
169 bool DOption::checked() const
170 {
171 D_DC(DOption);
172
173 return d->checked();
174 }
175
176 void DOption::setChecked(bool checked)
177 {
178 D_D(DOption);
179
180 d->setChecked(checked);
181 }
182
183 const QString DOption::checkedIcon() const
184 {
185 D_DC(DOption);
186
187 return d->checkedIcon();
188 }
189
190 void DOption::setCheckedIcon(const QString &icon)
191 {
192 D_D(DOption);
193
194 d->setCheckedIcon(icon);
195 }
196
197 QHBoxLayout *DOption::layout()
198 {
199 D_D(DOption);
200
201 return d->m_layout;
202 }
203
204 void DOption::resizeEvent(QResizeEvent *e)
205 {
206 QWidget::resizeEvent(e);
207
208 D_D(DOption);
209
210 d->sizeChanged(e);
211 }
212
213 DWIDGET_END_NAMESPACE
214
215 #include "moc_doption.cpp"
+0
-66
src/widgets/doption.h less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #ifndef DOPTION_H
18 #define DOPTION_H
19
20 #include "dtkwidget_global.h"
21 #include "dobject.h"
22
23 #include <QFrame>
24 #include <QHBoxLayout>
25
26 DWIDGET_BEGIN_NAMESPACE
27
28 class DOptionPrivate;
29 class D_DECL_DEPRECATED_X("Remove useless old widget") LIBDTKWIDGETSHARED_EXPORT DOption : public QFrame, public DTK_CORE_NAMESPACE::DObject
30 {
31 Q_OBJECT
32 Q_DISABLE_COPY(DOption)
33 D_DECLARE_PRIVATE(DOption)
34 Q_PROPERTY(bool checked READ checked WRITE setChecked NOTIFY checkedChanged)
35 Q_PROPERTY(QString checkedIcon READ checkedIcon WRITE setCheckedIcon NOTIFY checkedIconChanged DESIGNABLE true)
36
37 public:
38 DOption(QWidget *parent = nullptr);
39 void setName(const QString &name);
40 void setValue(const QString &value);
41 void setIcon(const QString &icon);
42 void setIcon(const QPixmap &icon);
43
44 const QString value() const;
45 const QString name() const;
46
47 bool checked() const;
48 void setChecked(bool checked);
49 const QString checkedIcon() const;
50 void setCheckedIcon(const QString &icon);
51
52 QHBoxLayout *layout();
53
54 protected:
55 void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE;
56
57 Q_SIGNALS:
58 void sizeChanged(const QSize &size) const;
59 void checkedChanged(bool checked) const;
60 void checkedIconChanged(const QString checkedIcon) const;
61 };
62
63 DWIDGET_END_NAMESPACE
64
65 #endif // DOPTION_H
+0
-145
src/widgets/doptionlist.cpp less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #include "doptionlist.h"
18 #include "dtkwidget_global.h"
19 #include "dthememanager.h"
20 #include "private/doptionlist_p.h"
21
22 #include <QDebug>
23
24 DWIDGET_BEGIN_NAMESPACE
25
26 DOptionListPrivate::DOptionListPrivate(DOptionList *q) :
27 DObjectPrivate(q)
28 {
29
30 }
31
32 void DOptionListPrivate::init()
33 {
34 D_Q(DOptionList);
35
36 q->setSelectionMode(QAbstractItemView::SingleSelection);
37 q->connect(q, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), q, SLOT(_q_currentItemChanged(QListWidgetItem*,QListWidgetItem*)));
38 }
39
40 void DOptionListPrivate::addOption(DOption *option)
41 {
42 QListWidgetItem *item = new QListWidgetItem;
43 m_optionList.insert(item, option);
44
45 D_Q(DOptionList);
46
47 q->connect(option, &DOption::sizeChanged, [item] (const QSize &size) {item->setSizeHint(size);});
48
49 q->addItem(item);
50 q->setItemWidget(item, option);
51 }
52
53 void DOptionListPrivate::insertOption(int pos, DOption *option)
54 {
55 QListWidgetItem *item = new QListWidgetItem;
56 m_optionList.insert(item, option);
57
58 D_Q(DOptionList);
59
60 q->connect(option, &DOption::sizeChanged, [item] (const QSize &size) {item->setSizeHint(size);});
61
62 q->insertItem(pos, item);
63 q->setItemWidget(item, option);
64 }
65
66 void DOptionListPrivate::setCurrentSelected(int pos)
67 {
68 D_Q(DOptionList);
69
70 DOption *prevItem = m_optionList.value(q->currentItem(), nullptr);
71
72 if (prevItem)
73 prevItem->setChecked(false);
74
75 QListWidgetItem *item = q->item(pos);
76 q->setCurrentItem(item);
77
78 DOption *currentItem = m_optionList.value(item, nullptr);
79 if (currentItem)
80 currentItem->setChecked(true);
81 }
82
83 void DOptionListPrivate::setCurrentSelected(const QString &value)
84 {
85 D_Q(DOptionList);
86
87 const QList<DOption *> list = m_optionList.values();
88
89 for (DOption *option : list)
90 if (option->value() == value)
91 return setCurrentSelected(q->row(m_optionList.key(option)));
92 }
93
94 void DOptionListPrivate::_q_currentItemChanged(QListWidgetItem *current,QListWidgetItem *previous)
95 {
96 DOption *currentItem = m_optionList.value(current, nullptr);
97 DOption *previousItem = m_optionList.value(previous, nullptr);
98
99 if (currentItem)
100 currentItem->setChecked(true);
101 if (previousItem)
102 previousItem->setChecked(false);
103 }
104
105 DOptionList::DOptionList(QWidget *parent) :
106 QListWidget(parent),
107 DObject(*new DOptionListPrivate(this))
108 {
109 DThemeManager::registerWidget(this);
110
111 D_D(DOptionList);
112
113 d->init();
114 }
115
116 void DOptionList::addOption(DOption *option)
117 {
118 D_D(DOptionList);
119 d->addOption(option);
120 }
121
122 void DOptionList::insertOption(int pos, DOption *option)
123 {
124 D_D(DOptionList);
125 d->insertOption(pos, option);
126 }
127
128 void DOptionList::setCurrentSelected(int pos)
129 {
130 D_D(DOptionList);
131
132 d->setCurrentSelected(pos);
133 }
134
135 void DOptionList::setCurrentSelected(const QString &value)
136 {
137 D_D(DOptionList);
138
139 d->setCurrentSelected(value);
140 }
141
142 DWIDGET_END_NAMESPACE
143
144 #include "moc_doptionlist.cpp"
+0
-51
src/widgets/doptionlist.h less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #ifndef DOPTIONLIST_H
18 #define DOPTIONLIST_H
19
20 #include "dtkwidget_global.h"
21 #include "dobject.h"
22 #include "doption.h"
23
24 #include <QListWidget>
25
26 DWIDGET_BEGIN_NAMESPACE
27
28 class DOptionListPrivate;
29 class D_DECL_DEPRECATED_X("Remove useless old widget") LIBDTKWIDGETSHARED_EXPORT DOptionList : public QListWidget, public DTK_CORE_NAMESPACE::DObject
30 {
31 Q_OBJECT
32 Q_DISABLE_COPY(DOptionList)
33 D_DECLARE_PRIVATE(DOptionList)
34
35 public:
36 explicit DOptionList(QWidget *parent = nullptr);
37
38 void addOption(DOption *option);
39 void insertOption(int pos, DOption *option);
40
41 void setCurrentSelected(int pos);
42 void setCurrentSelected(const QString &value);
43
44 protected:
45 D_PRIVATE_SLOT(void _q_currentItemChanged(QListWidgetItem*,QListWidgetItem*))
46 };
47
48 DWIDGET_END_NAMESPACE
49
50 #endif // DOPTIONLIST_H
+0
-568
src/widgets/dpasswdeditanimated.cpp less more
0 #include "dpasswdeditanimated.h"
1 #include "dkeyboardmonitor.h"
2 #include "private/dpasswdeditanimated_p.h"
3
4 #include "DThemeManager"
5 #include <QHBoxLayout>
6
7 DWIDGET_BEGIN_NAMESPACE
8
9 LoadSlider::LoadSlider(QWidget *parent) : QWidget(parent),
10 m_loadSliderColor(Qt::gray)
11 {
12 }
13
14 void LoadSlider::setLoadSliderColor(const QColor &color)
15 {
16 m_loadSliderColor = color;
17 update();
18 }
19
20 void LoadSlider::paintEvent(QPaintEvent *event)
21 {
22 QPainter painter(this);
23 // painter.setOpacity(0.8);
24 QLinearGradient grad(0, height() / 2, width(), height() / 2);
25 grad.setColorAt(0.0, Qt::transparent);
26 grad.setColorAt(1.0, m_loadSliderColor);
27 painter.fillRect(0, 1, width(), height() - 2, grad);
28
29 QWidget::paintEvent(event);
30 }
31
32 QColor LoadSlider::loadSliderColor() const
33 {
34 return m_loadSliderColor;
35 }
36
37 DPasswdEditAnimatedPrivate::DPasswdEditAnimatedPrivate(DPasswdEditAnimated *q)
38 : DTK_CORE_NAMESPACE::DObjectPrivate(q)
39 {
40 }
41
42 void DPasswdEditAnimatedPrivate::init()
43 {
44 D_Q(DPasswdEditAnimated);
45
46 QHBoxLayout *mainHLayout = new QHBoxLayout(q);
47 QVBoxLayout *passwdVBLayout = new QVBoxLayout;
48
49 m_keyboard = new DImageButton;
50 m_passwdEdit = new QLineEdit;
51 m_caps = new DLabel;
52 m_eye = new DImageButton;
53 m_submit = new DImageButton;
54 m_invalidTip = new DArrowRectangle(DArrowRectangle::ArrowTop, DArrowRectangle::FloatWidget);
55 m_invalidMessage = new DLabel(m_invalidTip);
56 m_invalidTip->setContent(m_invalidMessage);
57 m_invalidTip->setMargin(10);
58
59 m_loadSlider = new LoadSlider(q);
60 m_loadSlider->hide();
61 m_loadSliderAnim = new QPropertyAnimation(m_loadSlider, "pos", m_loadSlider);
62 m_loadSliderAnim->setDuration(1000);
63 m_loadSliderAnim->setLoopCount(-1);
64 m_loadSliderAnim->setEasingCurve(QEasingCurve::Linear);
65
66 m_capsEnable = true;
67 m_eyeEnable = true;
68 m_submitEnable = true;
69 m_loadAnimEnable = true;
70 m_isLoading = false;
71 m_alterBeforeHide = false;
72
73 m_keyboard->setObjectName("KeyboardButton");
74 m_passwdEdit->setObjectName("PasswdEdit");
75 m_caps->setObjectName("Capslock");
76 m_eye->setObjectName("EyeButton");
77 m_submit->setObjectName("SubmitButton");
78 m_invalidMessage->setObjectName("InvalidMessage");
79 m_invalidTip->setObjectName("InvalidTip");
80
81 m_keyboard->setStyleSheet("background-color: transparent;");
82 m_passwdEdit->setStyleSheet("background-color: transparent;");
83 m_caps->setStyleSheet("background-color: transparent;");
84 m_eye->setStyleSheet("background-color: transparent;");
85 m_submit->setStyleSheet("background-color: transparent;");
86
87 m_passwdEdit->setEchoMode(QLineEdit::Password);
88 m_passwdEdit->setFrame(false);
89 m_passwdEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
90 m_passwdEdit->installEventFilter(q);
91 q->setFocusPolicy(Qt::StrongFocus);
92 q->setFocusProxy(m_passwdEdit);
93
94 m_caps->setPixmap(QPixmap(":/images/light/images/capslock-hover.svg"));
95
96 m_invalidMessage->hide();
97 m_invalidTip->hide();
98
99 // fix QLineEdit do not expand width in QHBoxLayout
100 passwdVBLayout->setMargin(0);
101 passwdVBLayout->setContentsMargins(0, 0, 0, 0);
102 passwdVBLayout->setSpacing(0);
103 passwdVBLayout->addWidget(m_passwdEdit);
104
105 mainHLayout->addWidget(m_keyboard, 0, Qt::AlignLeft);
106 mainHLayout->addLayout(passwdVBLayout, 1);
107 mainHLayout->addWidget(m_caps, 0, Qt::AlignRight);
108 mainHLayout->addWidget(m_eye, 0, Qt::AlignRight);
109 mainHLayout->addWidget(m_submit, 0, Qt::AlignRight);
110
111 mainHLayout->setContentsMargins(5, 5, 5, 5);
112 q->setLayout(mainHLayout);
113
114 DThemeManager::registerWidget(q, QStringList("alert") << "editFocus");
115
116 m_kbdMonitor = DKeyboardMonitor::instance();
117 m_kbdMonitor->start(QThread::LowestPriority);
118 _q_resetCapslockState();
119
120 q->connect(m_kbdMonitor, SIGNAL(capslockStatusChanged(bool)), q, SLOT(_q_resetCapslockState()));
121 q->connect(m_eye, SIGNAL(clicked()), q, SLOT(_q_onEyeButtonClicked()));
122 q->connect(m_passwdEdit, SIGNAL(returnPressed()), q, SLOT(_q_inputDone()));
123 q->connect(m_passwdEdit, SIGNAL(selectionChanged()), q, SLOT(hideAlert()));
124 q->connect(m_submit, SIGNAL(clicked()), q, SLOT(_q_inputDone()));
125 q->connect(m_keyboard, SIGNAL(clicked()), q, SLOT(_q_onKeyboardButtonClicked()));
126 }
127
128 void DPasswdEditAnimatedPrivate::_q_onEyeButtonClicked()
129 {
130 D_Q(DPasswdEditAnimated);
131
132 if (m_passwdEdit->echoMode() == QLineEdit::Password) {
133 q->setEchoMode(QLineEdit::Normal);
134 return;
135 }
136 q->setEchoMode(QLineEdit::Password);
137 }
138
139 void DPasswdEditAnimatedPrivate::_q_inputDone()
140 {
141 D_Q(DPasswdEditAnimated);
142
143 q->hideAlert();
144
145 QString input = m_passwdEdit->text();
146 if (input.length() > 0) {
147 _q_showLoadSlider();
148 Q_EMIT q->submit(input);
149 }
150 }
151
152 void DPasswdEditAnimatedPrivate::_q_onKeyboardButtonClicked()
153 {
154 D_Q(DPasswdEditAnimated);
155
156 q->hideAlert();
157
158 Q_EMIT q->keyboardButtonClicked();
159 }
160
161 void DPasswdEditAnimatedPrivate::_q_showLoadSlider()
162 {
163 D_Q(DPasswdEditAnimated);
164
165 if (m_loadAnimEnable) {
166 if (!m_isLoading) {
167 m_isLoading = true;
168 m_loadSlider->show();
169 m_loadSlider->setGeometry(0, 0, LoadSliderWidth, q->height());
170 m_loadSliderAnim->setStartValue(QPoint(0 - LoadSliderWidth, 0));
171 m_loadSliderAnim->setEndValue(QPoint(q->width(), 0));
172 m_loadSliderAnim->start();
173 }
174 }
175 }
176
177 void DPasswdEditAnimatedPrivate::_q_hideLoadSlider()
178 {
179 if (m_isLoading) {
180 m_isLoading = false;
181 m_loadSliderAnim->stop();
182 m_loadSlider->hide();
183 }
184 }
185
186 void DPasswdEditAnimatedPrivate::_q_resetCapslockState()
187 {
188 if (m_capsEnable) {
189 if (m_kbdMonitor->isCapslockOn()) {
190 m_caps->setVisible(true);
191 return;
192 }
193 }
194 m_caps->setVisible(false);
195 }
196
197 /**
198 * \~chinese \class DPasswdEditAnimated
199 * \~chinese \brief 带有动画的密码输入框。
200 *
201 * \~chinese DPasswdEditAnimated 一个带有动画,大小写标识,键盘布局按钮的密码输入框。
202 *
203 * \~chinese 动画的效果是一个半透明滑块从左向右滑动,
204 * \~chinese 可以通过 DPasswdEditAnimated::setLoadingEffectColor 来设置滑块的颜色。
205 * \~chinese 也可以通过 DPasswdEditAnimated::loadingAnimation 拿到 QPropertyAnimation 对象并设置其属性,
206 * \~chinese 以改变动画的一些行为。
207 */
208
209 // ========================PROPERTY START========================
210 /**
211 * \~chinese \property DPasswdEditAnimated::editFocus
212 * \~chinese \brief 获取焦点的状态
213 */
214 // ========================PROPERTY END========================
215
216 // ========================SIGNAL START========================
217 /**
218 * \~chinese \fn DPasswdEditAnimated::submit
219 * \~chinese \brief 提交输入完成数据,一般是因为按下了回车或者点击了提交按钮。
220 * \~chinese \param input 输入的字符串。
221 */
222
223 /**
224 * \~chinese \fn DPasswdEditAnimated::abort
225 * \~chinese \brief 过程被终止。
226 */
227
228 /**
229 * \~chinese \fn DPasswdEditAnimated::alertChanged
230 * \~chinese \brief 属性 DPasswdEditAnimated::alert 属性发生改变。
231 */
232
233 /**
234 * \~chinese \fn DPasswdEditAnimated::editFocusChanged
235 * \~chinese \brief 属性 DPasswdEditAnimated::editFocus 发生改变。
236 */
237
238 /**
239 * \~chinese \fn DPasswdEditAnimated::keyboardButtonClicked
240 * \~chinese \brief 键盘布局按钮被点击。
241 */
242 // ========================SIGNAL END========================
243
244 /**
245 * \~chinese \brief 构造一个 DPasswdEditAnimated 实例。
246 * \~chinese \param parent 为创建对象的父控件。
247 */
248 DPasswdEditAnimated::DPasswdEditAnimated(QWidget *parent) : QFrame(parent),
249 DTK_CORE_NAMESPACE::DObject(*new DPasswdEditAnimatedPrivate(this))
250 {
251 D_D(DPasswdEditAnimated);
252
253 d->init();
254
255 d->m_invalidTip->setParent(parent);
256 }
257
258 /**
259 * \~chinese \brief 获取输入框对象。
260 *
261 * \~chinese 拿到QLineEdit类型的输入框对象后可对其进行一些常规设置,如设置最大输入长度等。
262 * \~chinese \return 输入框对象。
263 */
264 QLineEdit *DPasswdEditAnimated::lineEdit()
265 {
266 D_D(DPasswdEditAnimated);
267
268 return d->m_passwdEdit;
269 }
270
271 /**
272 * \~chinese \brief 获取警告信息。
273 *
274 * \~chinese 可以用获取到对象来设置要显示的警告信息。
275 * \~chinese \return 警告信息对象。
276 */
277 QLabel *DPasswdEditAnimated::invalidMessage()
278 {
279 D_D(DPasswdEditAnimated);
280
281 return d->m_invalidMessage;
282 }
283
284 /**
285 * \~chinese \brief 获取动画对象。
286 *
287 * \~chinese 可以用获取到的对象设置动画的属性。
288 * \~chinese \return 动画对象。
289 */
290 QPropertyAnimation *DPasswdEditAnimated::loadingAnimation()
291 {
292 D_D(DPasswdEditAnimated);
293
294 return d->m_loadSliderAnim;
295 }
296
297 /**
298 * \~chinese \brief 设置是否需要键盘布局按钮。
299 *
300 * \~chinese \param value 为true表示需要,反之则反。
301 */
302 void DPasswdEditAnimated::setKeyboardButtonEnable(bool value)
303 {
304 D_D(DPasswdEditAnimated);
305
306 d->m_keyboard->setVisible(value);
307 }
308
309 /**
310 * \~chinese \brief 设置是否需要大小写指示器。
311 *
312 * \~chinese \param value 为true表示需要,反之则反。
313 */
314 void DPasswdEditAnimated::setCapslockIndicatorEnable(bool value)
315 {
316 D_D(DPasswdEditAnimated);
317
318 if (d->m_capsEnable != value) {
319 d->m_capsEnable = value;
320 d->_q_resetCapslockState();
321 }
322 }
323
324 /**
325 * \~chinese \brief 设置是否需要切换密码隐藏状态的按钮。
326 *
327 * \~chinese \param value 为true表示需要,反之则反。
328 */
329 void DPasswdEditAnimated::setEyeButtonEnable(bool value)
330 {
331 D_D(DPasswdEditAnimated);
332
333 if (d->m_eyeEnable != value) {
334 d->m_eyeEnable = value;
335 d->m_eye->setVisible(d->m_eyeEnable);
336 }
337 }
338
339 /**
340 * \~chinese \brief 设置是否需要提交按钮。
341 *
342 * \~chinese \param value 为true表示需要,反之则反。
343 */
344 void DPasswdEditAnimated::setSubmitButtonEnable(bool value)
345 {
346 D_D(DPasswdEditAnimated);
347
348 if (d->m_submitEnable != value) {
349 d->m_submitEnable = value;
350 d->m_submit->setVisible(d->m_submitEnable);
351 }
352 }
353
354 /**
355 * \~chinese \brief 设置是否需要动画功能。
356 *
357 * \~chinese \param value 为true表示需要,反之则反。
358 */
359 void DPasswdEditAnimated::setLoadAnimEnable(bool value)
360 {
361 D_D(DPasswdEditAnimated);
362
363 d->m_loadAnimEnable = value;
364 }
365
366 /**
367 * \~chinese \brief 设置是密码的显示状态。
368 *
369 * \~chinese \param value 显示状态。
370 *
371 * \sa QLineEdit::EchoMode
372 */
373 void DPasswdEditAnimated::setEchoMode(QLineEdit::EchoMode mode)
374 {
375 D_D(DPasswdEditAnimated);
376
377 d->m_passwdEdit->setEchoMode(mode);
378 }
379
380 /** \reimp */
381 bool DPasswdEditAnimated::eventFilter(QObject *watched, QEvent *event)
382 {
383 D_D(DPasswdEditAnimated);
384
385 if (watched == d->m_passwdEdit) {
386 switch (event->type()) {
387 case QEvent::FocusIn:
388 Q_EMIT editFocusChanged(true);
389 break;
390 case QEvent::FocusOut:
391 Q_EMIT editFocusChanged(false);
392 break;
393 default:
394 break;
395 }
396 }
397 return false;
398 }
399
400 /*!
401 * \reimp
402 */
403 void DPasswdEditAnimated::showEvent(QShowEvent *event)
404 {
405 D_D(DPasswdEditAnimated);
406
407 // show alert message if it is visible when widget is hidden
408 if (d->m_alterBeforeHide) {
409 showAlert(d->m_invalidMessage->text());
410 }
411
412 QFrame::showEvent(event);
413 }
414
415 /*!
416 * \reimp
417 */
418 void DPasswdEditAnimated::hideEvent(QHideEvent *event)
419 {
420 D_D(DPasswdEditAnimated);
421
422 // remember alert visible before hide
423 d->m_alterBeforeHide = alert();
424
425 hideAlert();
426
427 QFrame::hideEvent(event);
428 }
429
430 /**
431 * \~chinese \brief 显示警告信息。
432 *
433 * \~chinese 弹出一个警告信息提示框。
434 * \~chinese \param message 要显示的信息。
435 */
436 void DPasswdEditAnimated::showAlert(const QString &message)
437 {
438 D_D(DPasswdEditAnimated);
439
440 d->_q_hideLoadSlider();
441
442 d->m_invalidMessage->setText(message);
443 d->m_invalidMessage->adjustSize();
444
445 d->m_passwdEdit->selectAll();
446 d->m_passwdEdit->setFocus();
447
448 if (isVisible() == false) {
449 d->m_alterBeforeHide = true;
450 return;
451 }
452
453 if (!d->m_invalidTip->isVisible()) {
454 // focus BUG
455 // d->m_invalidTip->setContent(d->m_invalidMessage);
456 // d->m_invalidTip->adjustSize();
457 d->m_invalidTip->setContent(d->m_invalidMessage);
458
459 updateAlertPosition();
460
461 Q_EMIT alertChanged(true);
462 }
463 }
464
465 /**
466 * \~chinese \brief 隐藏警告提示框。
467 */
468 void DPasswdEditAnimated::hideAlert()
469 {
470 D_D(DPasswdEditAnimated);
471
472 if (d->m_invalidTip->isVisible()) {
473 d->m_invalidTip->setVisible(false);
474
475 Q_EMIT alertChanged(false);
476 }
477 }
478
479 /**
480 * \~chinese \brief 终止认证过程,同时会关闭警告提示框和停止动画。
481 */
482 void DPasswdEditAnimated::abortAuth()
483 {
484 D_D(DPasswdEditAnimated);
485
486 if (d->m_isLoading) {
487 d->_q_hideLoadSlider();
488 Q_EMIT abort();
489 }
490 }
491
492 /**
493 * \~chinese \brief 更新警告提示框正确位置
494 */
495 void DPasswdEditAnimated::updateAlertPosition()
496 {
497 D_D(DPasswdEditAnimated);
498
499 QPoint pos = mapToParent(rect().bottomLeft());
500 const int messageHalfWidth = d->m_invalidMessage->width() / 2;
501 d->m_invalidTip->move(pos.x() + messageHalfWidth + 10, pos.y() + 5);
502
503 const QPoint messagePos = d->m_invalidMessage->pos();
504 const int h = d->m_invalidTip->height() - d->m_invalidMessage->height() - 10;
505 d->m_invalidMessage->move(messagePos.x(), h / 2);
506
507 d->m_invalidTip->setArrowX(20);
508 d->m_invalidMessage->show();
509 d->m_invalidTip->QWidget::show();
510 }
511
512 /**
513 * \~chinese \property DPasswdEditAnimated::alert
514 * \~chinese \brief 警告信息的显示状态。
515 * \~chinese \return true 正在显示警告信息,反之则反。
516 */
517 bool DPasswdEditAnimated::alert()
518 {
519 D_D(DPasswdEditAnimated);
520
521 return d->m_invalidTip->isVisible();
522 }
523
524 /**
525 * \~chinese \brief 设置提交按钮的图标。
526 *
527 * \~chinese 参数可以是文件系统中的文件路径,也可以是资源系统中的路径。
528 * \~chinese \param normalPic 正常状态下的图标。
529 * \~chinese \param hoverPic 鼠标悬浮状态下的图标。
530 * \~chinese \param pressPic 鼠标按下状态下的图标。
531 */
532 void DPasswdEditAnimated::setSubmitIcon(const QString &normalPic, const QString &hoverPic, const QString &pressPic)
533 {
534 D_D(DPasswdEditAnimated);
535
536 d->m_submit->setNormalPic(normalPic);
537 d->m_submit->setHoverPic(hoverPic);
538 d->m_submit->setPressPic(pressPic);
539 }
540
541 /**
542 * \~chinese \property DPasswdEditAnimated::loadingEffectColor
543 * \~chinese \brief 动画的颜色。
544 * \~chinese \sa DPasswdEditAnimated::setLoadingEffectColor
545 */
546 QColor DPasswdEditAnimated::loadingEffectColor()
547 {
548 D_D(DPasswdEditAnimated);
549
550 return d->m_loadSlider->loadSliderColor();
551 }
552
553 /**
554 * \~chinese \brief 设置动画的颜色。
555 *
556 * \~chinese \param color 动画的颜色。
557 */
558 void DPasswdEditAnimated::setLoadingEffectColor(const QColor &color)
559 {
560 D_D(DPasswdEditAnimated);
561
562 d->m_loadSlider->setLoadSliderColor(color);
563 }
564
565 DWIDGET_END_NAMESPACE
566
567 #include "moc_dpasswdeditanimated.cpp"
+0
-78
src/widgets/dpasswdeditanimated.h less more
0 #ifndef DPASSWDEDITANIMATED_H
1 #define DPASSWDEDITANIMATED_H
2
3 #include <QLineEdit>
4 #include <QPropertyAnimation>
5 #include <QLabel>
6
7 #include <DObject>
8 #include <dtkwidget_global.h>
9
10 DWIDGET_BEGIN_NAMESPACE
11
12 class DPasswdEditAnimatedPrivate;
13 class LIBDTKWIDGETSHARED_EXPORT DPasswdEditAnimated : public QFrame, public DTK_CORE_NAMESPACE::DObject
14 {
15 Q_OBJECT
16 Q_DISABLE_COPY(DPasswdEditAnimated)
17
18 Q_PROPERTY(bool alert READ alert NOTIFY alertChanged)
19 Q_PROPERTY(bool editFocus READ hasFocus NOTIFY editFocusChanged)
20 Q_PROPERTY(QColor loadingEffectColor READ loadingEffectColor WRITE setLoadingEffectColor DESIGNABLE true SCRIPTABLE true)
21
22 public:
23 DPasswdEditAnimated(QWidget *parent);
24
25 Q_SIGNALS:
26 void submit(const QString &input);
27 void abort();
28 void alertChanged(bool alert);
29 void editFocusChanged(bool focus);
30 void keyboardButtonClicked();
31
32 public Q_SLOTS:
33 void setKeyboardButtonEnable(bool value);
34 void setCapslockIndicatorEnable(bool value);
35 void setEyeButtonEnable(bool value);
36 void setSubmitButtonEnable(bool value);
37 void setLoadAnimEnable(bool value);
38
39 void setEchoMode(QLineEdit::EchoMode mode);
40 void setSubmitIcon(const QString &normalPic, const QString &hoverPic, const QString &pressPic);
41 void setLoadingEffectColor(const QColor &color);
42
43 void showAlert(const QString &message);
44 void hideAlert();
45 void abortAuth();
46
47 void updateAlertPosition();
48
49 public:
50 bool alert();
51
52 QLineEdit *lineEdit();
53 QPropertyAnimation *loadingAnimation();
54 QLabel *invalidMessage();
55
56 QColor loadingEffectColor();
57
58 protected:
59 bool eventFilter(QObject *watched, QEvent *event) Q_DECL_OVERRIDE;
60 void showEvent(QShowEvent *event) Q_DECL_OVERRIDE;
61 void hideEvent(QHideEvent *event) Q_DECL_OVERRIDE;
62
63 protected:
64 D_PRIVATE_SLOT(void _q_resetCapslockState())
65 D_PRIVATE_SLOT(void _q_onEyeButtonClicked())
66 D_PRIVATE_SLOT(void _q_showLoadSlider())
67 D_PRIVATE_SLOT(void _q_hideLoadSlider())
68 D_PRIVATE_SLOT(void _q_inputDone())
69 D_PRIVATE_SLOT(void _q_onKeyboardButtonClicked())
70
71 private:
72 D_DECLARE_PRIVATE(DPasswdEditAnimated)
73 };
74
75 DWIDGET_END_NAMESPACE
76
77 #endif // DPASSWDEDITANIMATED_H
1515 */
1616
1717 #include "dpasswordedit.h"
18 #include "dthememanager.h"
1918 #include "private/dpasswordedit_p.h"
2019
2120 #include <DUtil>
21 #include <DStyle>
22 #include <DSuggestButton>
2223
2324 #include <QDebug>
2425 #include <QTimer>
26 #include <QPushButton>
27 #include <QLineEdit>
2528
2629
2730 DWIDGET_BEGIN_NAMESPACE
4952 DPasswordEdit::DPasswordEdit(QWidget *parent)
5053 : DLineEdit(*new DPasswordEditPrivate(this), parent)
5154 {
52 // This will do the trick refreshing your style sheet for you
53 // after your registered property changed.
54 DThemeManager::registerWidget(this, QStringList({"isEchoMode"}));
55
5655 D_D(DPasswordEdit);
5756
5857 d->init();
6362 * \~english \brief This property holds whether the user input should be displayed directly
6463 * or show as dots.
6564 *
66 * \see QLineEdit::EchoMode
65 * \~chinese \see QLineEdit::EchoMode
6766 */
6867
6968 /*!
7069 * \~chinese \property DPasswordEdit::isEchoMode
7170 * \~chinese \brief 该属性会控制用户输入是否可见
7271 *
73 * \see QLineEdit::EchoMode
72 * \~chinese \see QLineEdit::EchoMode
7473 */
7574 bool DPasswordEdit::isEchoMode() const
7675 {
77 return echoMode() == Normal;
76 return lineEdit()->echoMode() == QLineEdit::Normal;
7877 }
7978
8079 /*!
8180 * \~chinese \brief 设置显示模式
82 * \see QLineEdit::EchoMode
81 * \~chinese \see QLineEdit::EchoMode
8382 * @param mode
8483 */
8584 void DPasswordEdit::setEchoMode(QLineEdit::EchoMode mode)
8685 {
8786 if (mode != echoMode()) {
88 QLineEdit::setEchoMode(mode);
87 DLineEdit::setEchoMode(mode);
8988
9089 // To inform the style sheet system that our style sheet needs
9190 // to be recalculated.
92 Q_EMIT echoModeChanged(mode == Normal);
91 Q_EMIT echoModeChanged(mode == QLineEdit::Normal);
92
93 D_D(DPasswordEdit);
94
95 if (isEchoMode()) {
96 d->togglePasswordVisibleButton->setIcon(DStyle::standardIcon(style(), DStyle::SP_HidePassword));
97 } else {
98 d->togglePasswordVisibleButton->setIcon(DStyle::standardIcon(style(),DStyle::SP_ShowPassword));
99 }
93100 }
101 }
102
103 /*!
104 * \~chinese \brief DPasswordEdit::setEchoButtonIsVisible 设置输入密码是否可见
105 * \~chinese \param visible true输入密码可见 false不可见
106 */
107 void DPasswordEdit::setEchoButtonIsVisible(bool visible)
108 {
109 D_D(DPasswordEdit);
110
111 d->togglePasswordVisibleButton->setVisible(visible);
112 setRightWidgetsVisible(visible);
113 }
114
115 /*!
116 * \~chinese \brief DPasswordEdit::echoButtonIsVisible
117 * \~chinese \return true输入密码可见 false不可见
118 */
119 bool DPasswordEdit::echoButtonIsVisible() const
120 {
121 D_DC(DPasswordEdit);
122 return d->togglePasswordVisibleButton->isVisible();
94123 }
95124
96125 DPasswordEditPrivate::DPasswordEditPrivate(DPasswordEdit *q)
103132 {
104133 D_Q(DPasswordEdit);
105134
106 q->setEchoMode(q->Password);
107 q->setIconVisible(true);
135 q->lineEdit()->setEchoMode(QLineEdit::Password);
108136
109 // FIXME: DPasswordEdit instances that initialized with a parent will fail
110 // to load the little eye icon if we don't do the below thing.
111 DUtil::TimerSingleShot(0, [q] { q->setStyleSheet(q->styleSheet()); });
137 QList<QWidget *> list;
138 togglePasswordVisibleButton = new DSuggestButton;
139 togglePasswordVisibleButton->setIcon(DStyle::standardIcon(q->style(), DStyle::SP_ShowPassword));
140 togglePasswordVisibleButton->setIconSize(QSize(24, 24));
112141
113 q->connect(q, SIGNAL(iconClicked()), q, SLOT(_q_toggleEchoMode()));
142 list.append(togglePasswordVisibleButton);
143 q->setRightWidgets(list);
144
145 q->connect(togglePasswordVisibleButton, SIGNAL(clicked()), q, SLOT(_q_toggleEchoMode()));
114146 }
115147
116148 void DPasswordEditPrivate::_q_toggleEchoMode()
118150 D_Q(DPasswordEdit);
119151
120152 if (q->isEchoMode()) {
121 q->setEchoMode(q->Password);
153 togglePasswordVisibleButton->setIcon(DStyle::standardIcon(q->style(),DStyle::SP_ShowPassword));
154 q->setEchoMode(q->lineEdit()->Password);
122155 } else {
123 q->setEchoMode(q->Normal);
156 togglePasswordVisibleButton->setIcon(DStyle::standardIcon(q->style(), DStyle::SP_HidePassword));
157 q->setEchoMode(q->lineEdit()->Normal);
124158 }
125159 }
126160
3131 DPasswordEdit(QWidget *parent = nullptr);
3232
3333 bool isEchoMode() const;
34 void setEchoMode(EchoMode mode);
34 void setEchoMode(QLineEdit::EchoMode mode);
35
36 void setEchoButtonIsVisible(bool visible);
37 bool echoButtonIsVisible () const;
3538
3639 Q_SIGNALS:
3740 void echoModeChanged(bool echoOn);
1515 */
1616
1717 #include "dplatformwindowhandle.h"
18 #include "dapplication.h"
19 #include "util/dwindowmanagerhelper.h"
2018
21 #include <QWindow>
2219 #include <QWidget>
23 #include <QGuiApplication>
24 #include <QDebug>
20 #include <QApplication>
2521
2622 DWIDGET_BEGIN_NAMESPACE
27
28 #define DEFINE_CONST_CHAR(Name) const char _##Name[] = "_d_" #Name
29
30 DEFINE_CONST_CHAR(useDxcb);
31 DEFINE_CONST_CHAR(redirectContent);
32 DEFINE_CONST_CHAR(netWmStates);
33 DEFINE_CONST_CHAR(windowRadius);
34 DEFINE_CONST_CHAR(borderWidth);
35 DEFINE_CONST_CHAR(borderColor);
36 DEFINE_CONST_CHAR(shadowRadius);
37 DEFINE_CONST_CHAR(shadowOffset);
38 DEFINE_CONST_CHAR(shadowColor);
39 DEFINE_CONST_CHAR(clipPath);
40 DEFINE_CONST_CHAR(frameMask);
41 DEFINE_CONST_CHAR(frameMargins);
42 DEFINE_CONST_CHAR(translucentBackground);
43 DEFINE_CONST_CHAR(enableSystemResize);
44 DEFINE_CONST_CHAR(enableSystemMove);
45 DEFINE_CONST_CHAR(enableBlurWindow);
46 DEFINE_CONST_CHAR(windowBlurAreas);
47 DEFINE_CONST_CHAR(windowBlurPaths);
48 DEFINE_CONST_CHAR(autoInputMaskByClipPath);
49
50 // functions
51 DEFINE_CONST_CHAR(setWmBlurWindowBackgroundArea);
52 DEFINE_CONST_CHAR(setWmBlurWindowBackgroundPathList);
53 DEFINE_CONST_CHAR(setWmBlurWindowBackgroundMaskImage);
54 DEFINE_CONST_CHAR(setWindowProperty);
55 DEFINE_CONST_CHAR(pluginVersion);
56 DEFINE_CONST_CHAR(disableOverrideCursor);
57 DEFINE_CONST_CHAR(enableDxcb);
58 DEFINE_CONST_CHAR(isEnableDxcb);
59 DEFINE_CONST_CHAR(setEnableNoTitlebar);
60 DEFINE_CONST_CHAR(isEnableNoTitlebar);
61
62 static void setWindowProperty(QWindow *window, const char *name, const QVariant &value)
63 {
64 if (!window)
65 return;
66
67 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
68 static QFunctionPointer setWindowProperty = qApp->platformFunction(_setWindowProperty);
69 #else
70 constexpr QFunctionPointer setWindowProperty = nullptr;
71 #endif
72
73 if (!setWindowProperty) {
74 window->setProperty(name, value);
75
76 return;
77 }
78
79 reinterpret_cast<void(*)(QWindow *, const char *, const QVariant &)>(setWindowProperty)(window, name, value);
80 }
81
82 /*!
83 * \~chinese \class DPlatformWindowHandle
84 * \~chinese \brief 一个和Qt dxcb平台插件交互的工具类,实质性的功能皆在dxcb插件中实现,此插件目前只
85 * \~chinese 支持X11平台,在其它平台上使用这个类不会有任何效果。关于dxcb:它介于Qt应用和Qt xcb平台
86 * \~chinese 插件之间,通过覆写xcb插件中某些对象的虚函数来改变它的一些行为,本质上来讲是Qt xcb插件的
87 * \~chinese 扩展,在X11平台上为DTK应用提供了一些改变窗口效果的功能(比如自定义窗口的边框)、其它和平
88 * \~chinese 台密切相关的实现(比如修复Qt应用在X11平台的一些bug),不能脱离Qt xcb插件独立运行。dxcb
89 * \~chinese 通过重载 QPlatformNativeInterface 提供接口,DPlatformWindowHandle 中使用
90 * \~chinese QGuiApplication::platformFunction 调用这些接口。Application、dxcb、qt xcb 之间
91 * \~chinese 的关系:
92 * \~chinese \htmlonly
93 * <pre style="font-family: FreeMono, Consolas, Menlo, 'Noto Mono', 'Courier New', Courier, monospace;line-height: 100%;">
94 * ┏━━━━━━━━━━━━━━━━┓
95 * ┃ Application ┃
96 * ┗━━━━━━━━━━━━━━━━┛
97 * ⇅
98 * ┏━━━━━━━━━━━━━━━━━━━━┓
99 * ┃ dxcb plugin ┃
100 * ┗━━━━━━━━━━━━━━━━━━━━┛
101 * ⇅
102 * ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
103 * ┃ qt xcb platform ┃
104 * ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
105 * </pre>
106 * \endhtmlonly
107 * \~chinese \sa \href{http://doc.qt.io/qt-5/qpa.html,QPA}
108 * \~chinese \sa \href{https://github.com/linuxdeepin/qt5dxcb-plugin/,dxcb插件}
109 * \~chinese \sa DApplication::loadDXcbPlugin
110 * \~chinese \sa DApplication::isDXcbPlatform
111 * \~chinese \sa QGuiApplication::platformNativeInterface
112 * \~chinese \sa DMainWindow
113 * \~chinese \sa DWindowManagerHelper
114 * \~chinese \warning 使用此工具前要确保应用加载了dxcb插件
115 * \~chinese \warning 因为 QGuiApplication::platformFunction 是在 Qt 5.4.0 版本引入的新接口,
116 * \~chinese 所以 DPlatformWindowHandle 不支持 Qt 5.4.0 以下版本。
117 */
118
119 /*!
120 * \~chinese \property DPlatformWindowHandle::windowRadius
121 * \~chinese \brief 窗口的圆角半径。默认情况下,窗口管理器支持混成时,圆角半径为4,否则为0,并且
122 * \~chinese 会随着窗口管理器开启/关闭混成效果而变化
123 * \~chinese \note 可读可写
124 * \~chinese \note 窗口为半屏、全屏或最大化状态时此值不生效
125 * \~chinese \warning 手动设置值后将无法再随着窗口管理器是否支持混成而自动更新边框宽度
126 * \~chinese \sa DWindowManagerHelper::hasComposite
127 */
128
129 /*!
130 * \~chinese \property DPlatformWindowHandle::borderWidth
131 * \~chinese \brief 窗口的外边框宽度。默认情况下,窗口管理器支持混成时,边框宽度为1,否则对于可以
132 * \~chinese 改变大小的窗口其值为2,否则为1,并且会随着窗口管理器开启/关闭混成效果而变化
133 * \~chinese \note 可读可写
134 * \~chinese \warning 手动设置值后将无法再随着窗口管理器是否支持混成而自动更新边框宽度
135 * \~chinese \sa DWindowManagerHelper::hasComposite
136 */
137
138 /*!
139 * \~chinese \property DPlatformWindowHandle::borderColor
140 * \~chinese \brief 窗口外边框的颜色。默认情况下,窗口管理器支持混成时,颜色为 QColor(0, 0, 0, 255 * 0.15),
141 * \~chinese 否则为边框颜色和 #e0e0e0 的混合,并且会随着窗口管理器开启/关闭混成效果而变化
142 * \~chinese \note 可读可写
143 * \~chinese \sa DWindowManagerHelper::hasComposite
144 */
145
146 /*!
147 * \~chinese \property DPlatformWindowHandle::shadowRadius
148 * \~chinese \brief 窗口的阴影半径。默认为 60
149 * \~chinese \note 可读可写
150 * \~chinese \note 窗口管理器不支持混成时此值无效
151 * \~chinese \sa DWindowManagerHelper::hasComposite
152 */
153
154 /*!
155 * \~chinese \property DPlatformWindowHandle::shadowOffset
156 * \~chinese \brief 窗口阴影的偏移量。默认为 QPoint(0,16)
157 * \~chinese \note 可读可写
158 * \~chinese \note 窗口管理器不支持混成时此值无效
159 * \~chinese \sa DWindowManagerHelper::hasComposite
160 */
161
162 /*!
163 * \~chinese \property DPlatformWindowHandle::shadowColor
164 * \~chinese \brief 窗口阴影的颜色。默认为 QColor(0, 0, 0, 255 * 0.6)
165 * \~chinese \note 可读可写
166 * \~chinese \note 窗口管理器不支持混成时此值无效
167 * \~chinese \sa DWindowManagerHelper::hasComposite
168 */
169
170 /*!
171 * \~chinese \property DPlatformWindowHandle::clipPath
172 * \~chinese \brief 窗口的裁剪区域。处于路径内部的区域为窗口有效区域,非有效区域内的窗口内容
173 * \~chinese 将无法显示,并且无法收到鼠标和触摸事件。示例:
174 * \~chinese \code
175 * QWidget w;
176 * QPainterPath path;
177 * QFont font;
178 *
179 * font.setPixelSize(100);
180 * path.addText(0, 150, font, "deepin");
181 *
182 * DPlatformWindowHandle handle(&w);
183 *
184 * handle.setClipPath(path);
185 * w.resize(400, 200);
186 * w.show();
187 * \endcode
188 * \~chinese \image html clip_window_demo.gif
189 * \~chinese \note 可读可写
190 * \~chinese \note 窗口的阴影和外边框绘制和其有效区域密切相关
191 * \~chinese \warning 设置此属性后将导致 DPlatformWindowHandle::windowRadius 失效
192 */
193
194 /*!
195 * \~chinese \property DPlatformWindowHandle::frameMask
196 * \~chinese \brief 设置 Frame Window 的遮罩,和 \a clipPath 不同的是,它的裁剪包括阴影
197 * \~chinese 部分。示例:
198 * \~chinese \code
199 * QWidget w;
200 * DPlatformWindowHandle handle(&w);
201 *
202 * // 为何更好的观察效果,此处将阴影改为蓝色
203 * handle.setShadowColor(Qt::blue);
204 * w.resize(400, 200);
205 * w.show();
206 * QRect frame_rect = w.rect() + handle.frameMargins();
207 * frame_rect.moveTopLeft(QPoint(0, 0));
208 * handle.setFrameMask(QRegion(frame_rect, QRegion::Ellipse));
209 * \endcode
210 * \~chinese \image html frame_mask_demo.png
211 * \~chinese \note 可读可写
212 * \~chinese \note 由于实现机制限制,使用此属性裁剪 Frame Window 时,无法去除边缘产生的锯齿
213 */
214
215 /*!
216 * \~chinese \property DPlatformWindowHandle::frameMargins
217 * \~chinese \brief Sub Window 相对于 Frame Window 的边距
218 * \~chinese \image html frame_margins.png
219 * \~chinese \note 只读
220 * \~chinese \warning 在窗口隐藏时不保证此值的正确性
221 */
222
223 /*!
224 * \~chinese \property DPlatformWindowHandle::translucentBackground
225 * \~chinese \brief 如果此属性值为 true,则在更新窗口绘制内容之前会先清空要更新区域内的图像,
226 * \~chinese 否则不清空,默认为 false
227 * \~chinese \note 可读可写
228 */
229
230 /*!
231 * \~chinese \property DPlatformWindowHandle::enableSystemResize
232 * \~chinese \brief 如果此属性值为 true,则允许外界改变窗口的大小(如使用鼠标拖拽窗口边框),
233 * \~chinese 否则不允许。默认为 true
234 * \~chinese \note 无论属性值是多少,Qt::Popup 和 Qt::BypassWindowManagerHint 类型的
235 * \~chinese 窗口都不允许改变大小
236 * \~chinese \note 可读可写
237 * \~chinese \note 此属性仅仅控制 dxcb 中的行为,不会影响窗口管理器的行为
238 * \~chinese \sa QWidget::setFixedSize
239 * \~chinese \sa QWindow::setMinimumSize
240 * \~chinese \sa QWindow::setMaximumSize
241 * \~chinese \sa DWindowManagerHelper::FUNC_RESIZE
242 */
243
244 /*!
245 * \~chinese \property DPlatformWindowHandle::enableSystemMove
246 * \~chinese \brief 如果此属性值为 ture,则允许外界移动窗口的位置(如使用鼠标拖拽移动窗口),
247 * \~chinese 否则不允许。默认为 true
248 * \~chinese \note 无论属性值是多少,Qt::Popup 和 Qt::BypassWindowManagerHint 类型的
249 * \~chinese 窗口都不允许改变大小
250 * \~chinese \note 可读可写
251 * \~chinese \note 此属性仅仅控制 dxcb 中的行为,不会影响窗口管理器的行为
252 * \~chinese \sa DWindowManagerHelper::FUNC_MOVE
253 */
254
255 /*!
256 * \~chinese \property DPlatformWindowHandle::enableBlurWindow
257 * \~chinese \brief 如果此属性为 true,则窗口有效区域内的背景将呈现出模糊效果,否则无特效。
258 * \~chinese 默认为 false
259 * \~chinese \note 可读可写
260 * \~chinese \sa DPlatformWindowHandle::setWindowBlurAreaByWM
261 */
262
263 /*!
264 * \~chinese \property DPlatformWindowHandle::autoInputMaskByClipPath
265 * \~chinese \brief 如果此属性值为 true,则窗口可输入区域跟随其 \a clipPath 属性,否则不
266 * \~chinese 跟随。默认为 true
267 * \~chinese \note 可输入区域指可接收鼠标或触摸事件的区域
268 * \~chinese \note 可读可写
269 */
270
271 /*!
272 * \~chinese \property DPlatformWindowHandle::realWindowId
273 * \~chinese \brief Sub Window 的窗口 id,直接使用 QWindow::winId 或 QWidget::winId
274 * \~chinese 获取到的是 Frame Window 的窗口 id
275 * \~chinese \note 只读
276 */
277
278 /*!
279 * \~chinese \fn DPlatformWindowHandle::frameMarginsChanged
280 * \~chinese \brief 信号会在 frameMargins 属性的值改变时被发送
281 * \~chinese \fn DPlatformWindowHandle::windowRadiusChanged
282 * \~chinese \brief 信号会在 windowRadius 属性的值改变时被发送
283 * \~chinese \fn DPlatformWindowHandle::borderWidthChanged
284 * \~chinese \brief 信号会在 borderWidth 属性的值改变时被发送
285 * \~chinese \fn DPlatformWindowHandle::borderColorChanged
286 * \~chinese \brief 信号会在 borderColor 属性的值改变时被发送
287 * \~chinese \fn DPlatformWindowHandle::shadowRadiusChanged
288 * \~chinese \brief 信号会在 shadowRadius 属性的值改变时被发送
289 * \~chinese \fn DPlatformWindowHandle::shadowOffsetChanged
290 * \~chinese \brief 信号会在 shadowOffset 属性的值改变时被发送
291 * \~chinese \fn DPlatformWindowHandle::shadowColorChanged
292 * \~chinese \brief 信号会在 shadowColor 属性的值改变时被发送
293 * \~chinese \fn DPlatformWindowHandle::clipPathChanged
294 * \~chinese \brief 信号会在 clipPath 属性的值改变时被发送
295 * \~chinese \fn DPlatformWindowHandle::frameMaskChanged
296 * \~chinese \brief 信号会在 frameMask 属性的值改变时被发送
297 * \~chinese \fn DPlatformWindowHandle::translucentBackgroundChanged
298 * \~chinese \brief 信号会在 translucentBackground 属性的值改变时被发送
299 * \~chinese \fn DPlatformWindowHandle::enableSystemResizeChanged
300 * \~chinese \brief 信号会在 enableSystemResize 属性的值改变时被发送
301 * \~chinese \fn DPlatformWindowHandle::enableSystemMoveChanged
302 * \~chinese \brief 信号会在 enableSystemMove 属性的值改变时被发送
303 * \~chinese \fn DPlatformWindowHandle::enableBlurWindowChanged
304 * \~chinese \brief 信号会在 enableBlurWindow 属性的值改变时被发送
305 * \~chinese \fn DPlatformWindowHandle::autoInputMaskByClipPathChanged
306 * \~chinese \brief 信号会在 autoInputMaskByClipPath 属性的值改变时被发送
307 */
308
309 /*!
310 * \~chinese \struct DPlatformWindowHandle::WMBlurArea
311 * \~chinese \brief 描述窗口背景模糊区域的数据结构,包含位置、大小、圆角半径等信息
312 * \var DPlatformWindowHandle::WMBlurArea::x
313 * 水平方向的坐标
314 * \var DPlatformWindowHandle::WMBlurArea::y
315 * 竖直方向的坐标
316 * \var DPlatformWindowHandle::WMBlurArea::width
317 * 区域的宽度
318 * \var DPlatformWindowHandle::WMBlurArea::height
319 * 区域的高度
320 * \var DPlatformWindowHandle::WMBlurArea::xRadius
321 * 水平方向的圆角半径
322 * \var DPlatformWindowHandle::WMBlurArea::yRaduis
323 * 竖直方向的圆角半径
324 */
325
326 /*!
327 * \~chinese \brief DPlatformWindowHandle::DPlatformWindowHandle
328 * \~chinese 将 \a window 对象传递给 enableDXcbForWindow
329 * \~chinese \param window 要开启DTK风格的主窗口
330 * \~chinese \param parent DPlatformWindowHandle 对象的父对象
331 * \~chinese \sa DPlatformWindowHandle::enableDXcbForWindow(QWindow *)
332 */
333 DPlatformWindowHandle::DPlatformWindowHandle(QWindow *window, QObject *parent)
334 : QObject(parent)
335 , m_window(window)
336 {
337 enableDXcbForWindow(window);
338
339 window->installEventFilter(this);
340 }
341
342 /*!
343 * \~chinese \brief DPlatformWindowHandle::DPlatformWindowHandle
344 * \~chinese 同 DPlatformWindowHandle::DPlatformWindowHandle(QWindow *window, QObject *parent),
345 * \~chinese 这只是针对 QWidget 对象的重载,将 \a widget 对象传递给 enableDXcbForWindow
346 * \~chinese \param widget 要开启DTK风格的主窗口
347 * \~chinese \param parent DPlatformWindowHandle 对象的父对象
348 * \~chinese \sa DPlatformWindowHandle::enableDXcbForWindow(QWidget *)
349 */
350 DPlatformWindowHandle::DPlatformWindowHandle(QWidget *widget, QObject *parent)
351 : QObject(parent)
352 , m_window(Q_NULLPTR)
353 {
354 enableDXcbForWindow(widget);
355
356 m_window = widget->window()->windowHandle();
357
358 if (m_window)
359 m_window->installEventFilter(this);
360 }
361
362 /*!
363 * \~chinese \brief DPlatformWindowHandle::pluginVersion
364 * \~chinese \return 返回dxcb插件的版本
365 * \~chinese \note 在旧版dxcb插件中未实现获取版本的接口,将会返回一个空的 QString 对象
366 */
367 QString DPlatformWindowHandle::pluginVersion()
368 {
369 QFunctionPointer pv = 0;
370
371 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
372 pv = qApp->platformFunction(_pluginVersion);
373 #endif
374
375 if (Q_UNLIKELY(!pv))
376 return QString();
377
378 return reinterpret_cast<QString(*)()>(pv)();
379 }
38023
38124 static QWindow *ensureWindowHandle(QWidget *widget)
38225 {
40144 }
40245
40346 /*!
47 * \~chinese \brief DPlatformWindowHandle::DPlatformWindowHandle
48 * \~chinese 同 DPlatformHandle::DPlatformHandle(QWindow *window, QObject *parent),
49 * \~chinese 这只是针对 QWidget 对象的重载,将 \a widget 对象传递给 enableDXcbForWindow
50 * \~chinese \param widget 要开启DTK风格的主窗口
51 * \~chinese \param parent DPlatformWindowHandle 对象的父对象
52 * \~chinese \sa DPlatformHandle::enableDXcbForWindow(QWidget *)
53 */
54 DPlatformWindowHandle::DPlatformWindowHandle(QWidget *widget, QObject *parent)
55 : DPlatformHandle(ensureWindowHandle(widget), parent)
56 {
57
58 }
59
60 /*!
40461 * \~chinese \brief DPlatformWindowHandle::enableDXcbForWindow
40562 * \~chinese 这是一个针对 QWidget 类型主窗口的重载函数,此函数将设置 QWidget 对象的 Qt::WA_NativeWindow
40663 * \~chinese 标志,之后将其 QWidget::windowHandle 对象作为参数传递给 enableDXcbForWindow(QWindow *)
40966 */
41067 void DPlatformWindowHandle::enableDXcbForWindow(QWidget *widget)
41168 {
412 if (!DApplication::isDXcbPlatform())
69 if (!isDXcbPlatform())
41370 return;
41471
41572 QWindow *handle = ensureWindowHandle(widget);
41673
417 enableDXcbForWindow(handle);
418 }
419
420 /*!
421 * \~chinese \brief DPlatformWindowHandle::enableDXcbForWindow
422 * \~chinese 将 QWindow 的窗口装饰设置为 DTK 风格,这将使用 Qt::FramelessWindowHint 去除本地窗口管理器
423 * \~chinese 给窗口附加的边框修饰以及窗口阴影效果,并且,会创建一个对应的本地窗口(在X11平台就是指X Window)
424 * \~chinese 作为此窗口的父窗口,父窗口(Frame Window)中将根据子窗口(Sub Window)的有效区域绘制阴影和边
425 * \~chinese 框等效果,默认情况下,子窗口的有效区域为一个圆角矩形,结构如下:
426 * \~chinese \htmlonly
427 * <pre style="font-family: FreeMono, Consolas, Menlo, 'Noto Mono', 'Courier New', Courier, monospace;line-height: 100%;">
428 * ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
429 * ┃ Frame Window ┃
430 * ┃ ┃
431 * ┃ ┃
432 * ┃ ╭┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅╮ ┃
433 * ┃ ┋ Sub Window ┋ ┃
434 * ┃ ┋ ┋ ┃
435 * ┃ ┋ ┋ ┃
436 * ┃ ┋ ┋ ┃
437 * ┃ ┋ ┋ ┃
438 * ┃ ┋ ┋ ┃
439 * ┃ ┋ ┋ ┃
440 * ┃ ┋ ┋ ┃
441 * ┃ ┋ ┋ ┃
442 * ┃ ╰┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅╯ ┃
443 * ┃ ┃
444 * ┃ ┃
445 * ┃ ┃
446 * ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
447 * </pre>
448 * \endhtmlonly
449 *
450 * 但是,如果窗口管理器自身支持隐藏窗口标题栏,则此方法将优先调用 enableNoTitlebarForWindow 实现同样的效果。
451 *
452 * 例子:
453 * \~chinese \code
454 * QWidget w1;
455 *
456 * w1.setWindowTitle("使用系统边框的窗口");
457 * w1.show();
458 *
459 * DMainWindow w2;
460 * QWidget w3;
461 *
462 * w2.titlebar()->setTitle("使用DTK风格边框带标题栏的窗口");
463 * w3.setWindowTitle("使用DTK风格边框没有标题栏的窗口");
464 * w2.show();
465 *
466 * DPlatformWindowHandle::enableDXcbForWindow(&w3);
467 * w3.show(); // 因为这个窗口没有标题栏,所以不会显示窗口标题
468 *
469 * \endcode
470 * \~chinese \image html dtk_and_system_window.jpeg
471 * \~chinese 开启了dxcb的窗口,在窗口外边缘10像素的范围按下鼠标左键可以触发改变窗口大小的行为,
472 * \~chinese 而且会自动将鼠标吸附到对应的窗口边缘,增强了拖拽改变窗口大小的体验。效果:
473 * \~chinese \image html dtk_window_cursor_effect.gif
474 * \~chinese 另外,所有到达主窗口的鼠标移动事件如果没有调用 QEvent::accepted ,则会触发主窗
475 * \~chinese 口的移动效果,默认情况下,一个没有子控件的DTK窗口,如果没有重写 QWidget::mouseMoveEvent ,
476 * \~chinese 则使用鼠标左键在窗口的任意地方按住并移动都会触发移动窗口的动作。如:
477 * \~chinese \code
478 * class Window : public QWidget
479 * {
480 * public:
481 * explicit Window() {
482 *
483 * }
484
485 * protected:
486 * void mouseMoveEvent(QMouseEvent *event) override {
487 * event->accept();
488 * }
489 * };
490 * \endcode
491 * \~chinese \code
492 * Window w;
493 * DPlatformWindowHandle::enableDXcbForWindow(&w);
494 * w.show();
495 * \endcode
496 * \~chinese 将无法使用鼠标移动窗口w
497 *
498 * \~chinese 窗口管理器(如X11平台上的Window Manager)是否支持混成会影响dxcb插件对窗口添加的默认装饰。
499 * \~chinese \note 在 Deepin 桌面环境中,打开窗口特效则支持混成,关闭窗口特效则不支持混成
500 *
501 * \~chinese 支持混成:
502 * \~chinese \image html enable_composite.png
503 * \~chinese 不支持混成:
504 * \~chinese \image html disable_composite.png
505 * \~chinese 并且,在不支持混成的窗口管理器中,上述“窗口边缘的鼠标吸附”效果也会被禁用。可以使用
506 * \~chinese DWindowManagerHelper::hasComposite 或 QX11Info::isCompositingManagerRunning
507 * \~chinese 判断当前运行的窗口管理器是否支持混成。
508 * \~chinese \param window
509 * \~chinese \sa DPlatformWindowHandle::setEnableNoTitlebarForWindow
510 */
511 void DPlatformWindowHandle::enableDXcbForWindow(QWindow *window)
512 {
513 // 优先使用窗口管理器中实现的no titlebar接口实现自定义窗口修饰器的效果
514 if (setEnableNoTitlebarForWindow(window, true)) {
515 return;
516 }
517
518 if (!DApplication::isDXcbPlatform())
519 return;
520
521 QFunctionPointer enable_dxcb = nullptr;
522
523 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
524 enable_dxcb = qApp->platformFunction(_enableDxcb);
525 #endif
526
527 if (enable_dxcb) {
528 (*reinterpret_cast<bool(*)(QWindow*)>(enable_dxcb))(window);
529 } else if (window->handle()) {
530 Q_ASSERT_X(window->property(_useDxcb).toBool(), "DPlatformWindowHandler:",
531 "Must be called before window handle has been created. See also QWindow::handle()");
532 } else {
533 window->setProperty(_useDxcb, true);
534 }
74 DPlatformHandle::enableDXcbForWindow(handle);
53575 }
53676
53777 /*!
54484 */
54585 void DPlatformWindowHandle::enableDXcbForWindow(QWidget *widget, bool redirectContent)
54686 {
547 enableDXcbForWindow(ensureWindowHandle(widget), redirectContent);
548 }
549
550 /*!
551 * \~chinese \brief DPlatformWindowHandle::enableDXcbForWindow
552 * \~chinese 功能上和 DPlatformWindowHandle::enableDXcbForWindow(QWindow *) 一致
553 * \~chinese \param window
554 * \~chinese \param redirectContent 如果值为 true,Sub Window 将不可见,且它的绘制内容会
555 * \~chinese 被合成到外层的 Frame Window(它的父窗口),否则 Sub Window 和 Frame Window
556 * \~chinese 会分开绘制和显示。默认情况下只需要使用 DPlatformWindowHandle::enableDXcbForWindow(QWindow *),
557 * \~chinese dxcb插件中会自动根据窗口渲染类型选择使用更合适的实现方式,使用 OpenGL 渲染的窗口将开启
558 * \~chinese redirectContent 模式。
559 * \~chinese \note 如果窗口内嵌入了其它的本地窗口(如X11平台的X Window),默认情况下,这个窗口
560 * \~chinese 绘制的内容不受dxcb插件的控制,它的绘制内容可能会超过 Sub Window 的有效区域,这种
561 * \~chinese 情况下,应该使用此接口,并将 redirectContent 指定为 true。
562 * \~chinese \sa X11 Damage: https://www.x.org/releases/X11R7.5/doc/damageproto/damageproto.txt
563 */
564 void DPlatformWindowHandle::enableDXcbForWindow(QWindow *window, bool redirectContent)
565 {
566 window->setProperty(_redirectContent, redirectContent);
567
568 enableDXcbForWindow(window);
87 DPlatformHandle::enableDXcbForWindow(ensureWindowHandle(widget), redirectContent);
56988 }
57089
57190 /*!
57897 bool DPlatformWindowHandle::isEnabledDXcb(const QWidget *widget)
57998 {
58099 if (QWindow *handle = widget->windowHandle()) {
581 return isEnabledDXcb(handle);
582 }
583
584 return false;
585 }
586
587 /*!
588 * \~chinese \brief DPlatformWindowHandle::isEnabledDXcb
589 * \~chinese \param widget
590 * \~chinese \return 如果窗口开启了DTK风格的窗口修饰则返回 true,否则返回 false
591 * \~chinese \sa DPlatformWindowHandle::isEnableNoTitlebar
592 */
593 bool DPlatformWindowHandle::isEnabledDXcb(const QWindow *window)
594 {
595 if (isEnableNoTitlebar(window))
596 return true;
597
598 QFunctionPointer is_enable_dxcb = nullptr;
599
600 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
601 is_enable_dxcb = qApp->platformFunction(_isEnableDxcb);
602 #endif
603
604 if (is_enable_dxcb) {
605 return (*reinterpret_cast<bool(*)(const QWindow*)>(is_enable_dxcb))(window);
606 }
607
608 return window->property(_useDxcb).toBool();
609 }
610
611 /*!
612 * \~chinese \brief DPlatformWindowHandle::setEnableNoTitlebarForWindow
613 * \~chinese 使用窗口管理器提供的方式隐藏窗口的标题栏,目前已适配 DDE KWin 窗管,在窗口管理器支持的前提下,
614 * \~chinese 此方法将通过设置窗口属性 _DEEPIN_SCISSOR_WINDOW 的值为 1 来开启无标题栏效果。
615 * \~chinese \param window
616 * \~chinese \param enable
617 * \~chinese \sa DPlatformWindowHandle::enableDXcbForWindow(QWindow *)
618 * \~chinese \sa DWindowManagerHelper::hasNoTitlebar
619 */
620 bool DPlatformWindowHandle::setEnableNoTitlebarForWindow(QWindow *window, bool enable)
621 {
622 if (!DApplication::isDXcbPlatform())
623 return false;
624
625 QFunctionPointer enable_no_titlear = nullptr;
626
627 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
628 enable_no_titlear = qApp->platformFunction(_setEnableNoTitlebar);
629 #endif
630
631 if (enable_no_titlear) {
632 return (*reinterpret_cast<bool(*)(QWindow*, bool)>(enable_no_titlear))(window, enable);
633 }
634
635 return false;
636 }
637
638 /*!
639 * \~chinese \brief DPlatformWindowHandle::isEnableNoTitlebar
640 * \~chinese \param window
641 * \~chinese \return 如果窗口使用窗管提供的方式隐藏了标题栏则返回 true,否则返回 false
642 * \~chinese \sa DPlatformWindowHandle::isEnabledDXcb
643 */
644 bool DPlatformWindowHandle::isEnableNoTitlebar(const QWindow *window)
645 {
646 QFunctionPointer is_enable_no_titlebar = nullptr;
647
648 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
649 is_enable_no_titlebar = qApp->platformFunction(_isEnableNoTitlebar);
650 #endif
651
652 if (is_enable_no_titlebar) {
653 return (*reinterpret_cast<bool(*)(const QWindow*)>(is_enable_no_titlebar))(window);
100 return DPlatformHandle::isEnabledDXcb(handle);
654101 }
655102
656103 return false;
687134 * \~chinese \note 需要对 \a widget 添加 Qt::WA_TranslucentBackground 使其背景透明
688135 * \~chinese \sa QWidget::setAttribute
689136 */
690 bool DPlatformWindowHandle::setWindowBlurAreaByWM(QWidget *widget, const QVector<DPlatformWindowHandle::WMBlurArea> &area)
137 bool DPlatformWindowHandle::setWindowBlurAreaByWM(QWidget *widget, const QVector<DPlatformHandle::WMBlurArea> &area)
691138 {
692139 Q_ASSERT(widget);
693140
694 return widget->windowHandle() && setWindowBlurAreaByWM(widget->windowHandle(), area);
141 return widget->windowHandle() && DPlatformHandle::setWindowBlurAreaByWM(widget->windowHandle(), area);
695142 }
696143
697144 /*!
731178 {
732179 Q_ASSERT(widget);
733180
734 return widget->windowHandle() && setWindowBlurAreaByWM(widget->windowHandle(), paths);
735 }
736
737 inline DPlatformWindowHandle::WMBlurArea operator *(const DPlatformWindowHandle::WMBlurArea &area, qreal scale)
738 {
739 if (qFuzzyCompare(scale, 1.0))
740 return area;
741
742 DPlatformWindowHandle::WMBlurArea new_area;
743
744 new_area.x = qRound64(area.x * scale);
745 new_area.y = qRound64(area.y * scale);
746 new_area.width = qRound64(area.width * scale);
747 new_area.height = qRound64(area.height * scale);
748 new_area.xRadius = qRound64(area.xRadius * scale);
749 new_area.yRaduis = qRound64(area.yRaduis * scale);
750
751 return new_area;
752 }
753
754 /*!
755 * \~chinese \brief DPlatformWindowHandle::setWindowBlurAreaByWM
756 * \~chinese 设置窗口背景的模糊区域,示例:
757 * \~chinese \code
758 * QWindow w;
759 * QVector<DPlatformWindowHandle::WMBlurArea> area_list;
760 * DPlatformWindowHandle::WMBlurArea area;
761 *
762 * area.x = 50;
763 * area.y = 50;
764 * area.width = 200;
765 * area.height = 200;
766 * area.xRadius = 10;
767 * area.yRaduis = 10;
768 * area_list.append(area);
769 *
770 * DPlatformWindowHandle::setWindowBlurAreaByWM(&w, area_list);
771 *
772 * QSurfaceFormat format = w.format();
773 * format.setAlphaBufferSize(8);
774 *
775 * w.setFormat(format);
776 * w.resize(300, 300);
777 * w.show();
778 *
779 * \endcode
780 * \~chinese \image html blur_window_demo1.png
781 * \~chinese \param window 目标窗口对象
782 * \~chinese \param area 模糊区域,此区域范围内的窗口背景将填充为窗口后面内容模糊之后的图像
783 * \~chinese \return 如果设置成功则返回 true,否则返回 false
784 * \~chinese \note 对于需要显示模糊背景的窗口,需要将其 QSurfaceFormat 的 alpha 通道设置为8
785 * \~chinese \note 调用此接口设置窗口背景模糊区域后将覆盖之前所设置的区域,包括调用
786 * \~chinese setWindowBlurAreaByWM(QWindow *, const QList<QPainterPath> &)
787 * \~chinese 所设置的区域
788 * \~chinees \note 建议使用 DBlurEffectWidget 实现窗口背景模糊效果
789 * \~chinese \note 此功能依赖于窗口管理器的实现,目前仅支持 deepin-wm 和 kwin 这两个窗口管理器
790 * \~chinese \sa DBlurEffectWidget
791 * \~chinese \sa QSurfaceFormat::setAlphaBufferSize
792 * \~chinese \sa QWindow::setFormat
793 * \~chinese \sa DWindowManagerHelper::hasBlurWindow
794 * \~chinese \sa DPlatformWindowHandle::setWindowBlurAreaByWM(QWindow *, const QList<QPainterPath> &)
795 */
796 bool DPlatformWindowHandle::setWindowBlurAreaByWM(QWindow *window, const QVector<DPlatformWindowHandle::WMBlurArea> &area)
797 {
798 if (!window) {
799 return false;
800 }
801
802 if (isEnabledDXcb(window)) {
803 setWindowProperty(window, _windowBlurAreas, QVariant::fromValue(*(reinterpret_cast<const QVector<quint32>*>(&area))));
804
805 return true;
806 }
807
808 QFunctionPointer setWmBlurWindowBackgroundArea = Q_NULLPTR;
809
810 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
811 setWmBlurWindowBackgroundArea = qApp->platformFunction(_setWmBlurWindowBackgroundArea);
812 #endif
813
814 if (!setWmBlurWindowBackgroundArea) {
815 qWarning("setWindowBlurAreaByWM is not support");
816
817 return false;
818 }
819
820 QSurfaceFormat format = window->format();
821
822 format.setAlphaBufferSize(8);
823 window->setFormat(format);
824
825 const qreal device_ratio = window->devicePixelRatio();
826
827 if (qFuzzyCompare(device_ratio, 1.0)) {
828 return reinterpret_cast<bool(*)(const quint32, const QVector<WMBlurArea>&)>(setWmBlurWindowBackgroundArea)(window->winId(), area);
829 }
830
831 QVector<WMBlurArea> new_areas;
832
833 new_areas.reserve(area.size());
834
835 for (const WMBlurArea &a : area) {
836 new_areas.append(a * device_ratio);
837 }
838
839 return reinterpret_cast<bool(*)(const quint32, const QVector<WMBlurArea>&)>(setWmBlurWindowBackgroundArea)(window->winId(), new_areas);
840 }
841
842 inline QPainterPath operator *(const QPainterPath &path, qreal scale)
843 {
844 if (qFuzzyCompare(1.0, scale))
845 return path;
846
847 QPainterPath new_path = path;
848
849 for (int i = 0; i < path.elementCount(); ++i) {
850 const QPainterPath::Element &e = path.elementAt(i);
851
852 new_path.setElementPositionAt(i, qRound(e.x * scale), qRound(e.y * scale));
853 }
854
855 return new_path;
856 }
857
858 /*!
859 * \~chinese \brief DPlatformWindowHandle::setWindowBlurAreaByWM
860 * \~chinese 设置窗口背景的模糊区域,使用 QPainterPath 描述模糊区域,使用起来更加的灵活,可以
861 * \~chinese 实现任何形状,但是性能要低于使用 QVector<DPlatformWindowHandle::WMBlurArea>
862 * \~chinese 描述模糊区域。示例:
863 * \~chinese \code
864 * QWindow w;
865 * QList<QPainterPath> path_list;
866 * QPainterPath path;
867 * QFont font;
868 *
869 * font.setPixelSize(100);
870 * font.setBold(true);
871 * path.addText(0, 150, font, "deepin");
872 * path_list.append(path);
873 *
874 * DPlatformWindowHandle::setWindowBlurAreaByWM(&w, path_list);
875 *
876 * QSurfaceFormat format = w.format();
877 * format.setAlphaBufferSize(8);
878 *
879 * w.setFormat(format);
880 * w.resize(300, 300);
881 * w.show();
882 *
883 * \endcode
884 * \~chinese \image html blur_window_demo2.png
885 * \~chinese \param window 目标窗口对象
886 * \~chinese \param paths 模糊区域,此区域范围内的窗口背景将填充为窗口后面内容模糊之后的图像
887 * \~chinese \return 如果设置成功则返回 true,否则返回 false
888 * \~chinese \note 调用此接口设置窗口背景模糊区域后将覆盖之前所设置的区域,包括调用
889 * \~chinese setWindowBlurAreaByWM(QWindow *, QVector<DPlatformWindowHandle::WMBlurArea> &)
890 * \~chinese 设置的窗口背景模糊路径
891 * \~chinese \note 对于需要显示模糊背景的窗口,需要将其 QSurfaceFormat 的 alpha 通道设置为8
892 * \~chinees \note 建议使用 DBlurEffectWidget 实现窗口背景模糊效果
893 * \~chinese \note 此功能依赖于窗口管理器的实现,目前仅支持 deepin-wm 和 kwin 这两个窗口管理器
894 * \~chinese \warning setWindowBlurAreaByWM(QWindow *, QVector<DPlatformWindowHandle::WMBlurArea> &)
895 * \~chinese 能满足需求请不要使用此接口
896 * \~chinese \sa DBlurEffectWidget
897 * \~chinese \sa QSurfaceFormat::setAlphaBufferSize
898 * \~chinese \sa QWindow::setFormat
899 * \~chinese \sa DWindowManagerHelper::hasBlurWindow
900 * \~chinese \sa DPlatformWindowHandle::setWindowBlurAreaByWM(QWindow *, QVector<DPlatformWindowHandle::WMBlurArea> &)
901 */
902 bool DPlatformWindowHandle::setWindowBlurAreaByWM(QWindow *window, const QList<QPainterPath> &paths)
903 {
904 if (!window) {
905 return false;
906 }
907
908 if (isEnabledDXcb(window)) {
909 setWindowProperty(window, _windowBlurPaths, QVariant::fromValue(paths));
910
911 return true;
912 }
913
914 QFunctionPointer setWmBlurWindowBackgroundPathList = Q_NULLPTR;
915
916 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
917 setWmBlurWindowBackgroundPathList = qApp->platformFunction(_setWmBlurWindowBackgroundPathList);
918 #endif
919
920 if (!setWmBlurWindowBackgroundPathList) {
921 qWarning("setWindowBlurAreaByWM is not support");
922
923 return false;
924 }
925
926 QSurfaceFormat format = window->format();
927
928 format.setAlphaBufferSize(8);
929 window->setFormat(format);
930
931 const qreal device_ratio = window->devicePixelRatio();
932
933 if (qFuzzyCompare(device_ratio, 1.0)) {
934 return reinterpret_cast<bool(*)(const quint32, const QList<QPainterPath>&)>(setWmBlurWindowBackgroundPathList)(window->winId(), paths);
935 }
936
937 QList<QPainterPath> new_paths;
938
939 new_paths.reserve(paths.size());
940
941 for (const QPainterPath &p : paths) {
942 new_paths.append(p * device_ratio);
943 }
944
945 return reinterpret_cast<bool(*)(const quint32, const QList<QPainterPath>&)>(setWmBlurWindowBackgroundPathList)(window->winId(), new_paths);
946 }
947
948 /*!
949 * \~chinese \brief DPlatformWindowHandle::connectWindowManagerChangedSignal
950 * \~chinese 将窗口管理器变化的信号链接到 object 对象的 slot 槽,建议使用 DWindowManager::windowManagerChanged
951 * \~chinese \param object
952 * \~chinese \param slot
953 * \~chinese \return 如果链接成功则返回 true,否则返回 false
954 * \~chinese \sa DWindowManager::windowManagerChanged
955 */
956 bool DPlatformWindowHandle::connectWindowManagerChangedSignal(QObject *object, std::function<void ()> slot)
957 {
958 if (object) {
959 return QObject::connect(DWindowManagerHelper::instance(), &DWindowManagerHelper::windowManagerChanged, object, slot);
960 }
961
962 return QObject::connect(DWindowManagerHelper::instance(), &DWindowManagerHelper::windowManagerChanged, slot);
963 }
964
965 /*!
966 * \~chinese \brief DPlatformWindowHandle::connectHasBlurWindowChanged
967 * \~chinese 将窗口管理器是否支持背景模糊的信号链接到 object 对象的 slot 槽,建议使用
968 * \~chinese DWindowManager::hasBlurWindowChanged
969 * \~chinese \param object
970 * \~chinese \param slot
971 * \~chinese \return 如果链接成功则返回 true,否则返回 false
972 * \~chinese \sa DWindowManager::hasBlurWindowChanged
973 */
974 bool DPlatformWindowHandle::connectHasBlurWindowChanged(QObject *object, std::function<void ()> slot)
975 {
976 if (object) {
977 return QObject::connect(DWindowManagerHelper::instance(), &DWindowManagerHelper::hasBlurWindowChanged, object, slot);
978 }
979
980 return QObject::connect(DWindowManagerHelper::instance(), &DWindowManagerHelper::hasBlurWindowChanged, slot);
981 }
982
983 /*!
984 * \~chinese \brief DPlatformWindowHandle::setWindowBlurAreaByWM
985 * \~chinese 这只是一个重载的函数,将调用 setWindowBlurAreaByWM(QWindow *, const QVector<DPlatformWindowHandle::WMBlurArea> &)
986 * \~chinese 并将构造对象时传递的主窗口当做第一个参数
987 * \~chinese \param area
988 * \~chinese \return
989 * \~chinese \sa DPlatformWindowHandle::setWindowBlurAreaByWM(QWindow *, const QVector<DPlatformWindowHandle::WMBlurArea> &)
990 */
991 bool DPlatformWindowHandle::setWindowBlurAreaByWM(const QVector<DPlatformWindowHandle::WMBlurArea> &area)
992 {
993 return setWindowBlurAreaByWM(m_window, area);
994 }
995
996 /*!
997 * \~chinese \brief DPlatformWindowHandle::setWindowBlurAreaByWM
998 * \~chinese 这只是一个重载的函数,将调用 setWindowBlurAreaByWM(QWindow *, const QList<QPainterPath> &)
999 * \~chinese 并将构造对象时传递的主窗口当做第一个参数
1000 * \~chinese \param area
1001 * \~chinese \return
1002 * \~chinese \sa DPlatformWindowHandle::setWindowBlurAreaByWM(QWindow *, const QList<QPainterPath> &)
1003 */
1004 bool DPlatformWindowHandle::setWindowBlurAreaByWM(const QList<QPainterPath> &paths)
1005 {
1006 return setWindowBlurAreaByWM(m_window, paths);
1007 }
1008
1009 /*!
1010 * \~chinese \brief DPlatformWindowHandle::setDisableWindowOverrideCursor
1011 * \~chinese 如果 \a disable 为 true,则禁止窗口 \a window 改变光标样式,否则允许改变光标样式。
1012 * \~chinese 窗口被禁止改变光标样式后,使用 QWindow::setCursor 将不会产生任何效果。
1013 * \~chinese \param window
1014 * \~chinese \param disable
1015 */
1016 void DPlatformWindowHandle::setDisableWindowOverrideCursor(QWindow *window, bool disable)
1017 {
1018 window->setProperty(_disableOverrideCursor, disable);
1019 }
1020
1021 int DPlatformWindowHandle::windowRadius() const
1022 {
1023 return m_window->property(_windowRadius).toInt();
1024 }
1025
1026 int DPlatformWindowHandle::borderWidth() const
1027 {
1028 return m_window->property(_borderWidth).toInt();
1029 }
1030
1031 QColor DPlatformWindowHandle::borderColor() const
1032 {
1033 return qvariant_cast<QColor>(m_window->property(_borderColor));
1034 }
1035
1036 int DPlatformWindowHandle::shadowRadius() const
1037 {
1038 return m_window->property(_shadowRadius).toInt();
1039 }
1040
1041 QPoint DPlatformWindowHandle::shadowOffset() const
1042 {
1043 return m_window->property(_shadowOffset).toPoint();
1044 }
1045
1046 QColor DPlatformWindowHandle::shadowColor() const
1047 {
1048 return qvariant_cast<QColor>(m_window->property(_shadowColor));
1049 }
1050
1051 QPainterPath DPlatformWindowHandle::clipPath() const
1052 {
1053 return qvariant_cast<QPainterPath>(m_window->property(_clipPath));
1054 }
1055
1056 QRegion DPlatformWindowHandle::frameMask() const
1057 {
1058 return qvariant_cast<QRegion>(m_window->property(_frameMask));
1059 }
1060
1061 QMargins DPlatformWindowHandle::frameMargins() const
1062 {
1063 return qvariant_cast<QMargins>(m_window->property(_frameMargins));
1064 }
1065
1066 bool DPlatformWindowHandle::translucentBackground() const
1067 {
1068 return m_window->property(_translucentBackground).toBool();
1069 }
1070
1071 bool DPlatformWindowHandle::enableSystemResize() const
1072 {
1073 return m_window->property(_enableSystemResize).toBool();
1074 }
1075
1076 bool DPlatformWindowHandle::enableSystemMove() const
1077 {
1078 return m_window->property(_enableSystemMove).toBool();
1079 }
1080
1081 bool DPlatformWindowHandle::enableBlurWindow() const
1082 {
1083 return m_window->property(_enableBlurWindow).toBool();
1084 }
1085
1086 bool DPlatformWindowHandle::autoInputMaskByClipPath() const
1087 {
1088 return m_window->property(_autoInputMaskByClipPath).toBool();
1089 }
1090
1091 WId DPlatformWindowHandle::realWindowId() const
1092 {
1093 return qvariant_cast<WId>(m_window->property("_d_real_content_window"));
1094 }
1095
1096 void DPlatformWindowHandle::setWindowRadius(int windowRadius)
1097 {
1098 setWindowProperty(m_window, _windowRadius, windowRadius);
1099 }
1100
1101 void DPlatformWindowHandle::setBorderWidth(int borderWidth)
1102 {
1103 setWindowProperty(m_window, _borderWidth, borderWidth);
1104 }
1105
1106 void DPlatformWindowHandle::setBorderColor(const QColor &borderColor)
1107 {
1108 setWindowProperty(m_window, _borderColor, QVariant::fromValue(borderColor));
1109 }
1110
1111 void DPlatformWindowHandle::setShadowRadius(int shadowRadius)
1112 {
1113 setWindowProperty(m_window, _shadowRadius, shadowRadius);
1114 }
1115
1116 void DPlatformWindowHandle::setShadowOffset(const QPoint &shadowOffset)
1117 {
1118 setWindowProperty(m_window, _shadowOffset, shadowOffset);
1119 }
1120
1121 void DPlatformWindowHandle::setShadowColor(const QColor &shadowColor)
1122 {
1123 setWindowProperty(m_window, _shadowColor, QVariant::fromValue(shadowColor));
1124 }
1125
1126 void DPlatformWindowHandle::setClipPath(const QPainterPath &clipPath)
1127 {
1128 setWindowProperty(m_window, _clipPath, QVariant::fromValue(clipPath));
1129 }
1130
1131 void DPlatformWindowHandle::setFrameMask(const QRegion &frameMask)
1132 {
1133 setWindowProperty(m_window, _frameMask, QVariant::fromValue(frameMask));
1134 }
1135
1136 void DPlatformWindowHandle::setTranslucentBackground(bool translucentBackground)
1137 {
1138 setWindowProperty(m_window, _translucentBackground, translucentBackground);
1139 }
1140
1141 void DPlatformWindowHandle::setEnableSystemResize(bool enableSystemResize)
1142 {
1143 setWindowProperty(m_window, _enableSystemResize, enableSystemResize);
1144 }
1145
1146 void DPlatformWindowHandle::setEnableSystemMove(bool enableSystemMove)
1147 {
1148 setWindowProperty(m_window, _enableSystemMove, enableSystemMove);
1149 }
1150
1151 void DPlatformWindowHandle::setEnableBlurWindow(bool enableBlurWindow)
1152 {
1153 setWindowProperty(m_window, _enableBlurWindow, enableBlurWindow);
1154 }
1155
1156 void DPlatformWindowHandle::setAutoInputMaskByClipPath(bool autoInputMaskByClipPath)
1157 {
1158 setWindowProperty(m_window, _autoInputMaskByClipPath, autoInputMaskByClipPath);
1159 }
1160
1161 bool DPlatformWindowHandle::eventFilter(QObject *obj, QEvent *event)
1162 {
1163 if (obj == m_window) {
1164 if (event->type() == QEvent::DynamicPropertyChange) {
1165 QDynamicPropertyChangeEvent *e = static_cast<QDynamicPropertyChangeEvent *>(event);
1166
1167 if (e->propertyName() == _windowRadius) {
1168 Q_EMIT windowRadiusChanged();
1169 } else if (e->propertyName() == _borderWidth) {
1170 Q_EMIT borderWidthChanged();
1171 } else if (e->propertyName() == _borderColor) {
1172 Q_EMIT borderColorChanged();
1173 } else if (e->propertyName() == _shadowRadius) {
1174 Q_EMIT shadowRadiusChanged();
1175 } else if (e->propertyName() == _shadowOffset) {
1176 Q_EMIT shadowOffsetChanged();
1177 } else if (e->propertyName() == _shadowColor) {
1178 Q_EMIT shadowColorChanged();
1179 } else if (e->propertyName() == _clipPath) {
1180 Q_EMIT clipPathChanged();
1181 } else if (e->propertyName() == _frameMask) {
1182 Q_EMIT frameMaskChanged();
1183 } else if (e->propertyName() == _frameMargins) {
1184 Q_EMIT frameMarginsChanged();
1185 } else if (e->propertyName() == _translucentBackground) {
1186 Q_EMIT translucentBackgroundChanged();
1187 } else if (e->propertyName() == _enableSystemResize) {
1188 Q_EMIT enableSystemResizeChanged();
1189 } else if (e->propertyName() == _enableSystemMove) {
1190 Q_EMIT enableSystemMoveChanged();
1191 } else if (e->propertyName() == _enableBlurWindow) {
1192 Q_EMIT enableBlurWindowChanged();
1193 } else if (e->propertyName() == _autoInputMaskByClipPath) {
1194 Q_EMIT autoInputMaskByClipPathChanged();
1195 }
1196 }
1197 }
1198
1199 return false;
181 return widget->windowHandle() && DPlatformHandle::setWindowBlurAreaByWM(widget->windowHandle(), paths);
1200182 }
1201183
1202184 DWIDGET_END_NAMESPACE
1203
1204 QT_BEGIN_NAMESPACE
1205 QDebug operator<<(QDebug deg, const DPlatformWindowHandle::WMBlurArea &area)
1206 {
1207 QDebugStateSaver saver(deg);
1208 Q_UNUSED(saver)
1209
1210 deg.setAutoInsertSpaces(true);
1211 deg << "x:" << area.x
1212 << "y:" << area.y
1213 << "width:" << area.width
1214 << "height:" << area.height
1215 << "xRadius:" << area.xRadius
1216 << "yRadius:" << area.yRaduis;
1217
1218 return deg;
1219 }
1220 QT_END_NAMESPACE
1717 #ifndef DPLATFORMWINDOWHANDLE_H
1818 #define DPLATFORMWINDOWHANDLE_H
1919
20 #include "dtkwidget_global.h"
21
22 #include <QObject>
23 #include <QPainterPath>
24 #include <QColor>
25 #include <QRegion>
26
27 #include <functional>
20 #include <dtkwidget_global.h>
21 #include <DPlatformHandle>
2822
2923 QT_BEGIN_NAMESPACE
30 class QWindow;
3124 class QWidget;
3225 QT_END_NAMESPACE
3326
3427 DWIDGET_BEGIN_NAMESPACE
3528
36 class DPlatformWindowHandle : public QObject
29 class DPlatformWindowHandle : public DPlatformHandle
3730 {
3831 Q_OBJECT
3932
40 Q_PROPERTY(int windowRadius READ windowRadius WRITE setWindowRadius NOTIFY windowRadiusChanged)
41 Q_PROPERTY(int borderWidth READ borderWidth WRITE setBorderWidth NOTIFY borderWidthChanged)
42 Q_PROPERTY(QColor borderColor READ borderColor WRITE setBorderColor NOTIFY borderColorChanged)
43 Q_PROPERTY(int shadowRadius READ shadowRadius WRITE setShadowRadius NOTIFY shadowRadiusChanged)
44 Q_PROPERTY(QPoint shadowOffset READ shadowOffset WRITE setShadowOffset NOTIFY shadowOffsetChanged)
45 Q_PROPERTY(QColor shadowColor READ shadowColor WRITE setShadowColor NOTIFY shadowColorChanged)
46 Q_PROPERTY(QPainterPath clipPath READ clipPath WRITE setClipPath NOTIFY clipPathChanged)
47 Q_PROPERTY(QRegion frameMask READ frameMask WRITE setFrameMask NOTIFY frameMaskChanged)
48 Q_PROPERTY(QMargins frameMargins READ frameMargins NOTIFY frameMarginsChanged)
49 Q_PROPERTY(bool translucentBackground READ translucentBackground WRITE setTranslucentBackground NOTIFY translucentBackgroundChanged)
50 Q_PROPERTY(bool enableSystemResize READ enableSystemResize WRITE setEnableSystemResize NOTIFY enableSystemResizeChanged)
51 Q_PROPERTY(bool enableSystemMove READ enableSystemMove WRITE setEnableSystemMove NOTIFY enableSystemMoveChanged)
52 Q_PROPERTY(bool enableBlurWindow READ enableBlurWindow WRITE setEnableBlurWindow NOTIFY enableBlurWindowChanged)
53 Q_PROPERTY(bool autoInputMaskByClipPath READ autoInputMaskByClipPath WRITE setAutoInputMaskByClipPath NOTIFY autoInputMaskByClipPathChanged)
54 Q_PROPERTY(WId realWindowId READ realWindowId CONSTANT)
55
5633 public:
57 explicit DPlatformWindowHandle(QWindow *window, QObject *parent = 0);
58 explicit DPlatformWindowHandle(QWidget *widget, QObject *parent = 0);
59
60 static QString pluginVersion();
34 explicit DPlatformWindowHandle(QWidget *widget, QObject *parent = nullptr);
6135
6236 static void enableDXcbForWindow(QWidget *widget);
63 static void enableDXcbForWindow(QWindow *window);
6437 static void enableDXcbForWindow(QWidget *widget, bool redirectContent);
65 static void enableDXcbForWindow(QWindow *window, bool redirectContent);
6638 static bool isEnabledDXcb(const QWidget *widget);
67 static bool isEnabledDXcb(const QWindow *window);
68
69 static bool setEnableNoTitlebarForWindow(QWindow *window, bool enable);
70 static bool isEnableNoTitlebar(const QWindow *window);
71
72 struct WMBlurArea {
73 qint32 x = 0;
74 qint32 y = 0;
75 qint32 width = 0;
76 qint32 height = 0;
77 qint32 xRadius = 0;
78 qint32 yRaduis = 0;
79 };
8039
8140 static bool setWindowBlurAreaByWM(QWidget *widget, const QVector<WMBlurArea> &area);
8241 static bool setWindowBlurAreaByWM(QWidget *widget, const QList<QPainterPath> &paths);
83 static bool setWindowBlurAreaByWM(QWindow *window, const QVector<WMBlurArea> &area);
84 static bool setWindowBlurAreaByWM(QWindow *window, const QList<QPainterPath> &paths);
85 static bool connectWindowManagerChangedSignal(QObject *object, std::function<void ()> slot);
86 static bool connectHasBlurWindowChanged(QObject *object, std::function<void ()> slot);
8742
88 bool setWindowBlurAreaByWM(const QVector<WMBlurArea> &area);
89 bool setWindowBlurAreaByWM(const QList<QPainterPath> &paths);
9043
91 static void setDisableWindowOverrideCursor(QWindow *window, bool disable);
92
93 int windowRadius() const;
94
95 int borderWidth() const;
96 QColor borderColor() const;
97
98 int shadowRadius() const;
99 QPoint shadowOffset() const;
100 QColor shadowColor() const;
101
102 QPainterPath clipPath() const;
103 QRegion frameMask() const;
104 QMargins frameMargins() const;
105
106 bool translucentBackground() const;
107 bool enableSystemResize() const;
108 bool enableSystemMove() const;
109 bool enableBlurWindow() const;
110 bool autoInputMaskByClipPath() const;
111
112 WId realWindowId() const;
113
114 public Q_SLOTS:
115 void setWindowRadius(int windowRadius);
116
117 void setBorderWidth(int borderWidth);
118 void setBorderColor(const QColor &borderColor);
119
120 void setShadowRadius(int shadowRadius);
121 void setShadowOffset(const QPoint &shadowOffset);
122 void setShadowColor(const QColor &shadowColor);
123
124 void setClipPath(const QPainterPath &clipPath);
125 void setFrameMask(const QRegion &frameMask);
126
127 void setTranslucentBackground(bool translucentBackground);
128 void setEnableSystemResize(bool enableSystemResize);
129 void setEnableSystemMove(bool enableSystemMove);
130 void setEnableBlurWindow(bool enableBlurWindow);
131 void setAutoInputMaskByClipPath(bool autoInputMaskByClipPath);
132
133 Q_SIGNALS:
134 void frameMarginsChanged();
135 void windowRadiusChanged();
136 void borderWidthChanged();
137 void borderColorChanged();
138 void shadowRadiusChanged();
139 void shadowOffsetChanged();
140 void shadowColorChanged();
141 void clipPathChanged();
142 void frameMaskChanged();
143 void translucentBackgroundChanged();
144 void enableSystemResizeChanged();
145 void enableSystemMoveChanged();
146 void enableBlurWindowChanged();
147 void autoInputMaskByClipPathChanged();
148
149 protected:
150 bool eventFilter(QObject *obj, QEvent *event) Q_DECL_OVERRIDE;
151
152 private:
153 QWindow *m_window;
44 using DPlatformHandle::setWindowBlurAreaByWM;
15445 };
155
156 inline DPlatformWindowHandle::WMBlurArea dMakeWMBlurArea(quint32 x, quint32 y, quint32 width, quint32 height, quint32 xr = 0, quint32 yr = 0)
157 {
158 DPlatformWindowHandle::WMBlurArea a;
159
160 a.x = x;
161 a.y = y;
162 a.width = width;
163 a.height = height;
164 a.xRadius = xr;
165 a.yRaduis = yr;
166
167 return a;
168 }
16946
17047 DWIDGET_END_NAMESPACE
17148
172 QT_BEGIN_NAMESPACE
173 DWIDGET_USE_NAMESPACE
174 QDebug operator<<(QDebug deg, const DPlatformWindowHandle::WMBlurArea &area);
175 QT_END_NAMESPACE
176
177 Q_DECLARE_METATYPE(QPainterPath)
178 Q_DECLARE_METATYPE(QRegion)
179 Q_DECLARE_METATYPE(QMargins)
180
18149 #endif // DPLATFORMWINDOWHANDLE_H
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #include "dprogressbar.h"
21
22 #include <QStyle>
23 #include <QStyleOptionProgressBar>
24
25 DWIDGET_BEGIN_NAMESPACE
26
27 DProgressBar::DProgressBar(QWidget *parent)
28 : QProgressBar(parent)
29 {
30
31 }
32
33 QSize DProgressBar::sizeHint() const
34 {
35 if (isTextVisible()) {
36 return QProgressBar::sizeHint();
37 }
38
39 QStyleOptionProgressBar opt;
40 initStyleOption(&opt);
41 return style()->sizeFromContents(QStyle::CT_ProgressBar, &opt, QSize(1, 1), this);
42 }
43
44 QSize DProgressBar::minimumSizeHint() const
45 {
46 if (isTextVisible()) {
47 return QProgressBar::minimumSizeHint();
48 }
49
50 return sizeHint();
51 }
52
53 DWIDGET_END_NAMESPACE
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #ifndef DPROGRESSBAR_H
21 #define DPROGRESSBAR_H
22
23 #include <dtkwidget_global.h>
24 #include <DObject>
25 #include <QProgressBar>
26
27 DWIDGET_BEGIN_NAMESPACE
28
29 class DProgressBar : public QProgressBar, public DCORE_NAMESPACE::DObject
30 {
31 public:
32 explicit DProgressBar(QWidget *parent = nullptr);
33
34 QSize sizeHint() const override;
35 QSize minimumSizeHint() const override;
36 };
37
38 DWIDGET_END_NAMESPACE
39
40 #endif // DPROGRESSBAR_H
+0
-205
src/widgets/dpushbutton.cpp less more
0 /*
1 * Copyright (C) 2017 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #include "dpushbutton.h"
18 #include "private/dpushbutton_p.h"
19
20 DWIDGET_BEGIN_NAMESPACE
21
22 /*!
23 * \~chinese \class DPushButton
24 * \~chinese \brief 封装了三种状态的QPushButton,可以自动在不同状态更换图标,不需要自己控制。
25 */
26
27 /*!
28 * \~chinese \brief DPushButton的构造函数
29 *
30 * @param parent
31 */
32 DPushButton::DPushButton(QWidget *parent)
33 : QPushButton(parent)
34 , DObject(*new DPushButtonPrivate(this))
35 {
36
37 }
38
39 /*!
40 * \~chinese \brief DPushButton的重载构造函数,初始化时接收不同状态的图标
41 *
42 * @param normalIcon 正常状态下的图标
43 * @param hoverIcon 鼠标在按钮上时的图标
44 * @param pressIcon 鼠标按下时的图标
45 * @param parent 初始化QPushButton的构造函数
46 */
47 DPushButton::DPushButton(const QString &normalIcon, const QString &hoverIcon, const QString &pressIcon, QWidget *parent)
48 : DPushButton(parent)
49 {
50 setNormalIcon(normalIcon);
51 setHoverIcon(hoverIcon);
52 setPressIcon(pressIcon);
53 }
54
55 /*!
56 * \~chinese \property DPushButton::normalIcon
57 * \~chinese \brief 该属性控制正常状态下的图标
58 */
59 const QString DPushButton::normalIcon() const
60 {
61 D_DC(DPushButton);
62
63 return d->normalIconPath;
64 }
65
66 /*!
67 * \~chinese \property DPushButton::hoverIcon
68 * \~chinese \brief 该属性控制鼠标在按钮上时的图标
69 */
70 const QString DPushButton::hoverIcon() const
71 {
72 D_DC(DPushButton);
73
74 return d->hoverIconPath;
75 }
76
77 /*!
78 * \~chinese \property DPushButton::pressIcon
79 * \~chinese \brief 该属性控制鼠标按下时的图标
80 */
81 const QString DPushButton::pressIcon() const
82 {
83 D_DC(DPushButton);
84
85 return d->pressIconPath;
86 }
87
88 /*!
89 * \~chinese \brief 设置正常状态下的图标
90 *
91 * @param normalIcon
92 */
93 void DPushButton::setNormalIcon(const QString &normalIcon)
94 {
95 D_D(DPushButton);
96
97 setNormalIcon(QIcon(normalIcon));
98
99 d->normalIconPath = normalIcon;
100 }
101
102 /*!
103 * \~chinese \brief 设置鼠标在按钮上时的图标
104 *
105 * @param hoverIcon
106 */
107 void DPushButton::setHoverIcon(const QString &hoverIcon)
108 {
109 D_D(DPushButton);
110
111 setHoverIcon(QIcon(hoverIcon));
112
113 d->hoverIconPath = hoverIcon;
114 }
115
116 /*!
117 * \~chinese \brief 设置鼠标按下时的图标
118 *
119 * @param pressIcon
120 */
121 void DPushButton::setPressIcon(const QString &pressIcon)
122 {
123 D_D(DPushButton);
124
125 setPressIcon(QIcon(pressIcon));
126
127 d->pressIconPath = pressIcon;
128 }
129
130 /*!
131 * \~chinese \brief 重载的方法
132 * \see setNormalIcon
133 * @param normalIcon
134 */
135 void DPushButton::setNormalIcon(const QIcon &normalIcon)
136 {
137 D_D(DPushButton);
138
139 d->normalIconPath.clear();
140 d->normalIcon = QIcon(normalIcon);
141
142 setIcon(d->normalIcon);
143 }
144
145 /*!
146 * \~chinese \brief 重载的方法
147 * \see setHoverIcon
148 * @param hoverIcon
149 */
150 void DPushButton::setHoverIcon(const QIcon &hoverIcon)
151 {
152 D_D(DPushButton);
153
154 d->hoverIconPath.clear();
155 d->hoverIcon = QIcon(hoverIcon);
156 }
157
158 /*!
159 * \~chinese \brief 重载的方法
160 * \see setPressIcon
161 * @param pressIcon
162 */
163 void DPushButton::setPressIcon(const QIcon &pressIcon)
164 {
165 D_D(DPushButton);
166
167 d->pressIconPath.clear();
168 d->pressIcon = QIcon(pressIcon);
169 }
170
171 void DPushButton::enterEvent(QEvent *e)
172 {
173 D_D(DPushButton);
174
175 setIcon(d->hoverIcon);
176
177 QPushButton::enterEvent(e);
178 }
179
180 void DPushButton::leaveEvent(QEvent *e)
181 {
182 D_D(DPushButton);
183
184 setIcon(d->normalIcon);
185
186 QPushButton::leaveEvent(e);
187 }
188
189 void DPushButton::mousePressEvent(QMouseEvent *e)
190 {
191 D_D(DPushButton);
192
193 setIcon(d->pressIcon);
194
195 QPushButton::mousePressEvent(e);
196 }
197
198 DPushButtonPrivate::DPushButtonPrivate(DPushButton *qq)
199 : DObjectPrivate(qq)
200 {
201
202 }
203
204 DWIDGET_END_NAMESPACE
+0
-66
src/widgets/dpushbutton.h less more
0 /*
1 * Copyright (C) 2017 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #ifndef DPUSHBUTTON_H
18 #define DPUSHBUTTON_H
19
20 #include "dtkwidget_global.h"
21 #include "dobject.h"
22
23 #include <QWidget>
24 #include <QPushButton>
25
26 DWIDGET_BEGIN_NAMESPACE
27
28 class DPushButtonPrivate;
29 class LIBDTKWIDGETSHARED_EXPORT DPushButton : public QPushButton, public DTK_CORE_NAMESPACE::DObject
30 {
31 Q_OBJECT
32 Q_PROPERTY(QString normalIcon READ normalIcon WRITE setNormalIcon DESIGNABLE true)
33 Q_PROPERTY(QString hoverIcon READ hoverIcon WRITE setHoverIcon DESIGNABLE true)
34 Q_PROPERTY(QString pressIcon READ pressIcon WRITE setPressIcon DESIGNABLE true)
35
36 public:
37 explicit DPushButton(QWidget *parent = 0);
38
39 DPushButton(const QString &normalIcon, const QString &hoverIcon,
40 const QString &pressIcon, QWidget *parent = 0);
41
42 const QString normalIcon() const;
43 const QString hoverIcon() const;
44 const QString pressIcon() const;
45
46 public Q_SLOTS:
47 void setNormalIcon(const QString &normalIcon);
48 void setHoverIcon(const QString &hoverIcon);
49 void setPressIcon(const QString &pressIcon);
50 void setNormalIcon(const QIcon &normalIcon);
51 void setHoverIcon(const QIcon &hoverIcon);
52 void setPressIcon(const QIcon &pressIcon);
53
54 protected:
55 void enterEvent(QEvent *e) Q_DECL_OVERRIDE;
56 void leaveEvent(QEvent *e) Q_DECL_OVERRIDE;
57 void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
58
59 private:
60 D_DECLARE_PRIVATE(DPushButton)
61 };
62
63 DWIDGET_END_NAMESPACE
64
65 #endif // DPUSHBUTTON_H
+0
-174
src/widgets/dscrollarea.cpp less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #include <QPropertyAnimation>
18 #include <QTimer>
19 #include <QDebug>
20 #include <QGraphicsOpacityEffect>
21 #include <QEvent>
22
23 #include "dscrollarea.h"
24 #include "dthememanager.h"
25 #include "dscrollbar.h"
26 #include "private/dscrollarea_p.h"
27
28 DWIDGET_BEGIN_NAMESPACE
29
30 DScrollAreaPrivate::DScrollAreaPrivate(DScrollArea *qq):
31 DObjectPrivate(qq),
32 autoHideScrollBar(false),
33 vBar(new DScrollBar),
34 hBar(new DScrollBar),
35 scrollBarAnimation(nullptr),
36 timer(nullptr)
37 {
38
39 }
40
41 DScrollAreaPrivate::~DScrollAreaPrivate()
42 {
43 vBar->deleteLater();
44 hBar->deleteLater();
45 if(scrollBarAnimation)
46 scrollBarAnimation->deleteLater();
47 if(timer)
48 timer->deleteLater();
49 }
50
51 void DScrollAreaPrivate::init()
52 {
53 Q_Q(DScrollArea);
54
55 q->setVerticalScrollBar(vBar);
56 q->setHorizontalScrollBar(hBar);
57
58 QObject::connect(vBar, &DScrollBar::valueChanged, q, [q, this]{
59 q->showScrollBar(vBar);
60 });
61 QObject::connect(hBar, &DScrollBar::valueChanged, q, [q, this]{
62 q->showScrollBar(hBar);
63 });
64 }
65
66 DScrollArea::DScrollArea(QWidget *parent) :
67 QScrollArea(parent),
68 DObject(*new DScrollAreaPrivate(this))
69 {
70 DThemeManager::registerWidget(this);
71
72 d_func()->init();
73 }
74
75 bool DScrollArea::autoHideScrollBar() const
76 {
77 Q_D(const DScrollArea);
78
79 return d->autoHideScrollBar;
80 }
81
82 void DScrollArea::setAutoHideScrollBar(bool autoHideScrollBar)
83 {
84 Q_D(DScrollArea);
85
86 if (d->autoHideScrollBar == autoHideScrollBar)
87 return;
88
89 d->autoHideScrollBar = autoHideScrollBar;
90
91 if(autoHideScrollBar){
92 if(!d->scrollBarAnimation)
93 d->scrollBarAnimation = new QPropertyAnimation(this, "windowOpacity");
94 if(!d->timer)
95 d->timer = new QTimer(this);
96
97 d->scrollBarAnimation->setDuration(300);
98 d->timer->setSingleShot(true);
99
100 d->vBar->hide();
101 d->hBar->hide();
102
103 connect(d->timer, &QTimer::timeout, [&]{
104 if(d->vBar->isVisible())
105 hideScrollBar(d->vBar);
106 if(d->hBar->isVisible())
107 hideScrollBar(d->hBar);
108 });
109 }else{
110 if(d->scrollBarAnimation)
111 d->scrollBarAnimation->deleteLater();
112 if(d->timer)
113 d->timer->deleteLater();
114
115 showScrollBar(d->vBar);
116 showScrollBar(d->hBar);
117 }
118
119 Q_EMIT autoHideScrollBarChanged(autoHideScrollBar);
120 }
121
122 void DScrollArea::hideScrollBar(QScrollBar *bar)
123 {
124 Q_D(DScrollArea);
125
126 if(bar->isHidden())
127 return;
128
129 if(d->scrollBarAnimation){
130 connect(d->scrollBarAnimation, &QPropertyAnimation::finished, bar, &DScrollBar::hide);
131 connect(d->scrollBarAnimation, &QPropertyAnimation::finished, bar, &DScrollBar::hide);
132
133 d->scrollBarAnimation->setStartValue(1.0);
134 d->scrollBarAnimation->setEndValue(0.0);
135 d->scrollBarAnimation->start();
136 }else{
137 bar->hide();
138 }
139 }
140
141 void DScrollArea::showScrollBar(QScrollBar *bar)
142 {
143 Q_D(DScrollArea);
144
145 if(bar->isVisible())
146 return;
147
148 if(bar == d->vBar && verticalScrollBarPolicy() != Qt::ScrollBarAlwaysOff)
149 d->vBar->show();
150 else if(bar == d->hBar && horizontalScrollBarPolicy() != Qt::ScrollBarAlwaysOff)
151 d->hBar->show();
152
153 if(d->scrollBarAnimation){
154 disconnect(d->scrollBarAnimation, &QPropertyAnimation::finished, bar, &DScrollBar::hide);
155 disconnect(d->scrollBarAnimation, &QPropertyAnimation::finished, bar, &DScrollBar::hide);
156
157 d->scrollBarAnimation->setStartValue(1.0);
158 d->scrollBarAnimation->setEndValue(0.0);
159 d->scrollBarAnimation->start();
160 d->timer->start(1000);
161 }
162 }
163
164 DScrollArea::DScrollArea(DScrollAreaPrivate &dd, QWidget *parent):
165 QScrollArea(parent),
166 DObject(dd)
167 {
168 DThemeManager::registerWidget(this);
169
170 d_func()->init();
171 }
172
173 DWIDGET_END_NAMESPACE
+0
-60
src/widgets/dscrollarea.h less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #ifndef DSCROLLAREA_H
18 #define DSCROLLAREA_H
19
20 #include <QScrollArea>
21
22 #include "dtkwidget_global.h"
23 #include "dobject.h"
24
25 DWIDGET_BEGIN_NAMESPACE
26
27 class DScrollBar;
28 class DScrollAreaPrivate;
29 class D_DECL_DEPRECATED_X("Plase use QScrollArea") LIBDTKWIDGETSHARED_EXPORT DScrollArea : public QScrollArea, public DTK_CORE_NAMESPACE::DObject
30 {
31 Q_OBJECT
32
33 Q_PROPERTY(bool autoHideScrollBar READ autoHideScrollBar WRITE setAutoHideScrollBar NOTIFY autoHideScrollBarChanged)
34
35 public:
36 explicit DScrollArea(QWidget *parent = 0);
37
38 bool autoHideScrollBar() const;
39
40 public Q_SLOTS:
41 void setAutoHideScrollBar(bool autoHideScrollBar);
42
43 Q_SIGNALS:
44 void autoHideScrollBarChanged(bool autoHideScrollBar);
45
46 private Q_SLOTS:
47 void hideScrollBar(QScrollBar *bar);
48 void showScrollBar(QScrollBar *bar);
49
50 protected:
51 DScrollArea(DScrollAreaPrivate &dd, QWidget *parent = 0);
52
53 private:
54 D_DECLARE_PRIVATE(DScrollArea)
55 };
56
57 DWIDGET_END_NAMESPACE
58
59 #endif // DSCROLLAREA_H
+0
-157
src/widgets/dscrollbar.cpp less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #include "dscrollbar.h"
18 #include "dthememanager.h"
19
20 #include "private/dscrollbar_p.h"
21
22 #include <QPalette>
23 #include <QTimer>
24 #include <QPaintEvent>
25 #include <QPainter>
26 #include <QDebug>
27
28 DWIDGET_BEGIN_NAMESPACE
29
30 DScrollBarPrivate::DScrollBarPrivate(DScrollBar *qq)
31 : DObjectPrivate(qq)
32 {
33
34 }
35
36 void DScrollBarPrivate::init()
37 {
38 D_Q(DScrollBar);
39
40 timer = new QTimer(q);
41 opacityTimer = new QTimer(q);
42
43 timer->setInterval(1000);
44 timer->setSingleShot(true);
45
46 q->connect(timer, SIGNAL(timeout()), q, SLOT(_q_hidden()));
47 q->connect(opacityTimer, SIGNAL(timeout()), q, SLOT(_q_updateOpacity()));
48 q->connect(q, &DScrollBar::valueChanged, q, [this] {
49 timer->start();
50 opacityTimer->stop();
51
52 setOpacity(1);
53 });
54 }
55
56 void DScrollBarPrivate::setOpacity(qreal opacity)
57 {
58 D_Q(DScrollBar);
59
60 if (qAbs(this->opacity - opacity) < 0.001) {
61 return;
62 }
63
64 this->opacity = opacity;
65 this->canPaint = false;
66
67 q->update();
68 }
69
70 void DScrollBarPrivate::_q_hidden()
71 {
72 timer->stop();
73 opacityTimer->start(50);
74 }
75
76 void DScrollBarPrivate::_q_updateOpacity()
77 {
78 if (opacity < 0.01) {
79 opacityTimer->stop();
80 } else {
81 setOpacity(opacity - 0.05);
82 }
83 }
84
85 DScrollBar::DScrollBar(QWidget *parent)
86 : QScrollBar(parent)
87 , DObject(*new DScrollBarPrivate(this))
88 {
89 DThemeManager::registerWidget(this);
90
91 d_func()->init();
92 }
93
94 bool DScrollBar::autoHide() const
95 {
96 D_DC(DScrollBar);
97
98 return d->autoHide;
99 }
100
101 void DScrollBar::setAutoHide(bool autoHide)
102 {
103 D_D(DScrollBar);
104
105 if (d->autoHide == autoHide)
106 return;
107
108 d->autoHide = autoHide;
109 Q_EMIT autoHideChanged(autoHide);
110
111 update();
112 }
113
114 void DScrollBar::enterEvent(QEvent *event)
115 {
116 D_D(DScrollBar);
117
118 d->timer->stop();
119 d->opacityTimer->stop();
120 d->setOpacity(1);
121
122 QScrollBar::enterEvent(event);
123 }
124
125 void DScrollBar::leaveEvent(QEvent *event)
126 {
127 D_DC(DScrollBar);
128
129 d->timer->start(1000);
130
131 QScrollBar::leaveEvent(event);
132 }
133
134 void DScrollBar::paintEvent(QPaintEvent *event)
135 {
136 D_D(DScrollBar);
137
138 if (d->canPaint || !d->autoHide) {
139 return QScrollBar::paintEvent(event);
140 }
141
142 QPixmap pixmap;
143 QPainter painter(this);
144
145 d->canPaint = true;
146
147 setAttribute(Qt::WA_WState_InPaintEvent, false);
148 pixmap = grab();
149
150 painter.setOpacity(d->opacity);
151 painter.drawPixmap(QPoint(0, 0), pixmap);
152 }
153
154 DWIDGET_END_NAMESPACE
155
156 #include "moc_dscrollbar.cpp"
+0
-60
src/widgets/dscrollbar.h less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #ifndef DSCROLLBAR_H
18 #define DSCROLLBAR_H
19
20 #include <QScrollBar>
21
22 #include "dtkwidget_global.h"
23 #include "dobject.h"
24
25 DWIDGET_BEGIN_NAMESPACE
26
27 class DScrollBarPrivate;
28 class D_DECL_DEPRECATED_X("Plase use QScrollBar") LIBDTKWIDGETSHARED_EXPORT DScrollBar : public QScrollBar, public DTK_CORE_NAMESPACE::DObject
29 {
30 Q_OBJECT
31
32 Q_PROPERTY(bool autoHide READ autoHide WRITE setAutoHide NOTIFY autoHideChanged)
33
34 public:
35 explicit DScrollBar(QWidget *parent = 0);
36
37 bool autoHide() const;
38
39 public Q_SLOTS:
40 void setAutoHide(bool autoHide);
41
42 Q_SIGNALS:
43 void autoHideChanged(bool autoHide);
44
45 protected:
46 void enterEvent(QEvent *event) Q_DECL_OVERRIDE;
47 void leaveEvent(QEvent *event) Q_DECL_OVERRIDE;
48 void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
49
50 private:
51 Q_DISABLE_COPY(DScrollBar)
52 D_DECLARE_PRIVATE(DScrollBar)
53 D_PRIVATE_SLOT(void _q_hidden())
54 D_PRIVATE_SLOT(void _q_updateOpacity())
55 };
56
57 DWIDGET_END_NAMESPACE
58
59 #endif // DSCROLLBAR_H
1515 */
1616
1717 #include "dsearchedit.h"
18 #include "dthememanager.h"
19
18 #include "dpalette.h"
19 #include "dstyle.h"
20 #include "private/dsearchedit_p.h"
21 #include "diconbutton.h"
22
23 #include <DSysInfo>
24
25 #ifdef ENABLE_AI
26 // 讯飞语言相关
27 #include "session_interface.h"
28 #include "iat_interface.h"
29 #endif
30
31 #include <QAction>
32 #include <QPainter>
33 #include <QDebug>
34 #include <QLabel>
2035 #include <QHBoxLayout>
21 #include <QSpacerItem>
22 #include <QPropertyAnimation>
23 #include <QDebug>
2436 #include <QEvent>
25 #include <QFocusEvent>
26 #include <QResizeEvent>
37 #include <QAction>
38 #include <QAudioInput>
2739 #include <QTimer>
40 #include <QAudioDeviceInfo>
41 #include <QCoreApplication>
42 #include <QToolButton>
2843
2944 DWIDGET_BEGIN_NAMESPACE
45 DCORE_USE_NAMESPACE
46
47 #ifdef ENABLE_AI
48 class VoiceDevice : public QIODevice
49 {
50 Q_OBJECT
51 public:
52 using QIODevice::QIODevice;
53 ~VoiceDevice()
54 {
55 if (isOpen())
56 close();
57 }
58
59 bool open(OpenMode mode) override
60 {
61 if (mode != WriteOnly)
62 return false;
63
64 com::iflytek::aiservice::session session("com.iflytek.aiservice", "/", QDBusConnection::sessionBus());
65 QDBusObjectPath path = session.createSession(qApp->arguments().first().split("/").last(), "iat");
66
67 if (session.lastError().type() != QDBusError::NoError)
68 return false;
69
70 m_iat = new com::iflytek::aiservice::iat("com.iflytek.aiservice", path.path(), QDBusConnection::sessionBus(), this);
71
72 QVariantMap param_dict;
73 param_dict[QString("accent")] = QVariant(QString("mandarin"));
74 param_dict[QString("ptt")] = QVariant(QString("0"));
75 const QString &json_data = m_iat->startIat(param_dict);
76 QJsonDocument document = QJsonDocument::fromJson(json_data.toLocal8Bit());
77
78 if (document.object().value("status").toInt(-1) != 0) {
79 m_iat->deleteLater();
80 m_iat = nullptr;
81 return false;
82 }
83
84 // 清理旧的数据
85 m_message.clear();
86
87 connect(m_iat, &ComIflytekAiserviceIatInterface::onEnd, this, &VoiceDevice::onEnd);
88 connect(m_iat, &ComIflytekAiserviceIatInterface::onResult, this, &VoiceDevice::onResult);
89
90 return QIODevice::open(mode);
91 }
92
93 void close() override
94 {
95 if (m_iat) {
96 m_iat->stopIat();
97 m_iat->deleteLater();
98 m_iat = nullptr;
99 }
100
101 QIODevice::close();
102 }
103
104 qint64 readData(char *, qint64) override
105 {
106 return 0;
107 }
108
109 qint64 writeData(const char *data, qint64 len) override
110 {
111 m_iat->putAudio(QByteArray(data, len), false);
112
113 return len;
114 }
115
116 Q_SLOT void onResult(const QString &json)
117 {
118 QJsonDocument document = QJsonDocument::fromJson(json.toLocal8Bit());
119
120 if (!document.isObject()) {
121 return;
122 }
123
124 document = QJsonDocument::fromJson(document["text"].toString().toLocal8Bit());
125 const QJsonArray &words = document["ws"].toArray();
126 bool replace = document["pgs"].toString() == "rpl";
127
128 if (replace) {
129 m_message.clear();
130 }
131
132 for (const QJsonValue &v : words) {
133 const QJsonArray &cw = v["cw"].toArray();
134
135 for (const QJsonValue &v : cw) {
136 m_message.append(v["w"].toString());
137 }
138 }
139
140 Q_EMIT voiceReply(m_message);
141 }
142
143 Q_SLOT void onError(const QString &error)
144 {
145 qDebug() << error;
146 Q_EMIT voiceReply(QString());
147 }
148
149 Q_SLOT void onEnd()
150 {
151 close();
152 Q_EMIT finished();
153 }
154
155 Q_SIGNALS:
156 void voiceReply(QString text);
157 void finished();
158
159 private:
160 com::iflytek::aiservice::iat *m_iat = nullptr;
161 QString m_message;
162 };
163 #endif
30164
31165 /*!
32166 * \~chinese \class DSearchEdit
39173 * \~chinese \warning DSearchEdit 与 QLineEdit、DLineEdit 没有继承关系,功能不兼容。
40174 */
41175
42
43 /*!
44 * \~chinese \fn DSearchEdit::textChanged
45 * \~chinese \brief 信号在用户对输入框内容做了修改后触发。
46 */
47
48 /*!
49 * \~chinese \fn DSearchEdit::returnPressed
50 * \~chinese \brief 信号在用户输入完成敲击回车时触发。
51 */
52
53 /*!
54 * \~chinese \fn DSearchEdit::editingFinished
55 * \~chinese \brief 信号在用户敲击Enter或者回车键,以及输入框失去焦点是触发。
56 * \~chinese \see QLineEdit::editingFinished。
57 */
58
59 /*!
60 * \~chinese \fn DSearchEdit::focusOut
61 * \~chinese \brief 信号在输入框失去焦点时触发。
62 */
63
64 /*!
65 * \~chinese \fn DSearchEdit::focusIn
66 * \~chinese \brief 信号在输入框获得焦点时触发。
67 */
68
69
70 /*!
71 * \~chinese \fn DSearchEdit::setText
72 * \~chinese \brief 设置输入框内容。
73 * \~chinese \param text 为要设置的内容。
74 */
75
76
77 /*!
78 * \~chinese \fn DSearchEdit::clear
79 * \~chinese \brief 清空输入框内容。
80 */
81
82
83 /*!
84 * \~chinese \fn DSearchEdit::setPlaceHolder
85 * \~chinese \brief 为输入框设置占位内容,用来提示用户,如显示“搜索快捷键”。
86 * \~chinese \param text 为占位内容。
87 *
88 */
89
90
91176 /*!
92177 * \~chinese \brief DSearchEdit::DSearchEdit 是 DSearchEdit 类的构造函数。
93178 * \~chinese \param parent 指定了控件的父控件。
94179 */
95180 DSearchEdit::DSearchEdit(QWidget *parent)
96 : QFrame(parent)
97 {
98 DThemeManager::registerWidget(this);
99
100 initInsideFrame();
101
102 m_searchBtn = new QLabel;
103 m_searchBtn->setObjectName("SearchIcon");
104 m_searchBtn->setFixedSize(16, 16);
105 m_clearBtn = new DImageButton;
106 m_clearBtn->setObjectName("ClearIcon");
107 m_clearBtn->hide();
108 m_edt = new QLineEdit;
109 m_edt->setObjectName("Edit");
110 m_placeHolder = new QLabel;
111 m_placeHolder->setObjectName("PlaceHolder");
112
113 m_animation = new QPropertyAnimation(m_edt, "minimumWidth");
114
115 m_size = QSize(m_searchBtn->sizeHint().width() + m_edt->sizeHint().width() + m_clearBtn->sizeHint().width() + 6,
116 qMax(m_searchBtn->sizeHint().height(), m_edt->sizeHint().height()));
117 m_edt->setFixedWidth(0);
118 m_edt->installEventFilter(this);
119
120 QHBoxLayout *layout = new QHBoxLayout(m_insideFrame);
121 layout->addStretch();
122 layout->addWidget(m_searchBtn);
123 layout->setAlignment(m_searchBtn, Qt::AlignCenter);
124 layout->addWidget(m_placeHolder);
125 layout->setAlignment(m_placeHolder, Qt::AlignCenter);
126 layout->addWidget(m_edt);
127 layout->setAlignment(m_edt, Qt::AlignCenter);
128 layout->addStretch();
129 layout->addWidget(m_clearBtn);
130 layout->setAlignment(m_clearBtn, Qt::AlignCenter);
181 : DLineEdit(*new DSearchEditPrivate(this), parent)
182 {
183 D_D(DSearchEdit);
184
185 d->init();
186 setSpeechToTextEnabled(false);
187 }
188
189 DSearchEdit::~DSearchEdit()
190 {
191
192 }
193
194 /*!
195 * \~chinese \brief DSearchEdit::setPlaceHolder 设置灰色的占位符文本
196 * \~chinese \param placeHolder 占位符文本内容
197 */
198 void DSearchEdit::setPlaceHolder(QString placeHolder)
199 {
200 Q_D(DSearchEdit);
201
202 d->placeHolder = placeHolder;
203 }
204
205 /*!
206 * \~chinese \brief DSearchEdit::placeHolder
207 * \~chinese \return 返回占位符文本内容
208 */
209 QString DSearchEdit::placeHolder() const
210 {
211 D_DC(DSearchEdit);
212
213 return d->placeHolder;
214 }
215
216 void DSearchEdit::clear()
217 {
218 lineEdit()->clear();
219 }
220
221
222 /*!
223 * \~chinese \brief DSearchEdit::clearEdit 清除内容,退出编辑状态
224 */
225 void DSearchEdit::clearEdit()
226 {
227 D_D(DSearchEdit);
228
229 lineEdit()->clear();
230 d->_q_toEditMode(false);
231
232 if (lineEdit()->hasFocus()) {
233 setFocus();
234 }
235 }
236
237 bool DSearchEdit::isVoiceInput() const
238 {
239 D_DC(DSearchEdit);
240 return d->voiceInput && d->voiceInput->state() == QAudio::ActiveState;
241 }
242
243 void DSearchEdit::setPlaceholderText(const QString &text)
244 {
245 D_D(DSearchEdit);
246 d->placeholderText = text;
247 if (lineEdit()->hasFocus())
248 lineEdit()->setPlaceholderText(text);
249 }
250
251 QString DSearchEdit::placeholderText() const
252 {
253 return d_func()->placeholderText;
254 }
255
256 DSearchEditPrivate::DSearchEditPrivate(DSearchEdit *q)
257 : DLineEditPrivate(q)
258 , action(nullptr)
259 , iconWidget(nullptr)
260 {
261 }
262
263 DSearchEditPrivate::~DSearchEditPrivate()
264 {
265
266 }
267
268 void DSearchEditPrivate::init()
269 {
270 D_Q(DSearchEdit);
271 QLabel *label = new QLabel;
272 DIconButton *iconbtn = new DIconButton(DStyle::SP_IndicatorSearch);
273
274 iconbtn->setFlat(true);
275 iconbtn->setFocusPolicy(Qt::NoFocus);
276 iconbtn->setAttribute(Qt::WA_TransparentForMouseEvents);
277
278 placeHolder = qApp->translate("DSearchEdit", "Search");
279
280 action = new QAction(q);
281 action->setIcon(DStyleHelper(q->style()).standardIcon(DStyle::SP_IndicatorSearch, nullptr));
282 q->lineEdit()->addAction(action, QLineEdit::LeadingPosition);
283 action->setVisible(false);
284 iconbtn->setIconSize(QSize(32, 32));
285
286 DPalette pe;
287 QStyleOption opt;
288 QColor color = DStyleHelper(q->style()).getColor(&opt, pe, DPalette::TextTips);
289 pe.setColor(DPalette::TextTips, color);
290
291 label->setPalette(pe);
292 label->setText(placeHolder);
293
294 q->setFocusPolicy(Qt::ClickFocus);
295 q->lineEdit()->setContextMenuPolicy(Qt::NoContextMenu);
296
297 q->connect(q, SIGNAL(focusChanged(bool)), q, SLOT(_q_toEditMode(bool)));
298 q->connect(q, &DLineEdit::textChanged, q, [ = ](QString text) {
299 if (!text.isEmpty())
300 _q_toEditMode(false);
301 });
302
303 QHBoxLayout *layout = new QHBoxLayout(q->lineEdit());
304
305 iconWidget = new QWidget;
306 QHBoxLayout *center_layout = new QHBoxLayout(iconWidget);
307 center_layout->setMargin(0);
308 center_layout->setSpacing(0);
309
310 layout->setMargin(0);
131311 layout->setSpacing(0);
132 layout->setContentsMargins(3, 0, 3, 0);
133
134 setAutoFillBackground(true);
135 setFocusPolicy(Qt::StrongFocus);
136
137 connect(m_clearBtn, &DImageButton::clicked, m_edt, static_cast<void (QLineEdit::*)()>(&QLineEdit::setFocus));
138 connect(m_clearBtn, &DImageButton::clicked, this, &DSearchEdit::clear);
139 connect(m_edt, &QLineEdit::textChanged, [this] {m_clearBtn->setVisible(!m_edt->text().isEmpty());});
140 connect(m_edt, &QLineEdit::textChanged, this, &DSearchEdit::textChanged, Qt::DirectConnection);
141 connect(m_edt, &QLineEdit::editingFinished, this, &DSearchEdit::editingFinished, Qt::DirectConnection);
142 connect(m_edt, &QLineEdit::returnPressed, this, &DSearchEdit::returnPressed, Qt::DirectConnection);
143 // connect(m_searchBtn, &DImageButton::clicked, this, &DSearchEdit::toEditMode);
144 }
145
146 DSearchEdit::~DSearchEdit()
147 {
148 m_animation->deleteLater();
149 }
150
151 /*!
152 * \~chinese \brief DSearchEdit::text 用于获取输入框中的内容。
153 * \~chinese \return 输入框中用户输入的内容。
154 */
155 const QString DSearchEdit::text() const
156 {
157 return m_edt->text();
158 }
159
160 void DSearchEdit::mousePressEvent(QMouseEvent *e)
161 {
162 if (e->button() != Qt::LeftButton)
163 return QFrame::mousePressEvent(e);
164
165 toEditMode();
166
167 e->accept();
168 }
169
170 void DSearchEdit::mouseReleaseEvent(QMouseEvent *e)
171 {
172 e->accept();
173 }
174
175 bool DSearchEdit::eventFilter(QObject *o, QEvent *e)
176 {
177 if (o == m_edt && e->type() == QEvent::FocusOut && m_edt->text().isEmpty()) {
178 auto fe = dynamic_cast<QFocusEvent *>(e);
179 if (fe && fe->reason() != Qt::PopupFocusReason) {
180 m_animation->stop();
181 m_animation->setStartValue(m_edt->width());
182 m_animation->setEndValue(0);
183 m_animation->setEasingCurve(m_hideCurve);
184 m_animation->start();
185
186 connect(m_animation, &QPropertyAnimation::finished, m_placeHolder, &QLabel::show);
187 }
188 }
189
190 if (o == m_edt) {
191 if (e->type() == QEvent::FocusOut) {
192 Q_EMIT focusOut();
193 }
194
195 if (e->type() == QEvent::FocusIn) {
196 Q_EMIT focusIn();
197 }
198 }
199
200 return QFrame::eventFilter(o, e);
201 }
202
203 /*!
204 * \~chinese \brief DSearchEdit::getLineEdit 用于获取控件中封装的 QLineEdit 实例,
205 * \~chinese 使用者可以通过 QLineEdit 提供的函数对输入框进行进一步细节设置,如果输入规则等。
206 * \~chinese \return 控件中封装的 QLineEdit 实例
207 */
208 QLineEdit *DSearchEdit::getLineEdit() const
209 {
210 return m_edt;
211 }
212
213 void DSearchEdit::toEditMode()
214 {
215 // already in edit mode
216 if (!m_placeHolder->isVisible()) {
217 return;
218 }
219
220 disconnect(m_animation, &QPropertyAnimation::finished, m_placeHolder, &QLabel::show);
221
222 m_animation->stop();
223 m_animation->setStartValue(0);
224 m_animation->setEndValue(m_size.width() - m_searchBtn->width() - 6); // left + right margins = 6
225 m_animation->setEasingCurve(m_showCurve);
226 m_animation->start();
227
228 m_placeHolder->hide();
229 m_edt->setFocus();
230 }
231
232 //Bypassing the problem here
233 //qss can't draw box-shadow
234 void DSearchEdit::initInsideFrame()
235 {
236 m_insideFrame = new QFrame(this);
237 m_insideFrame->raise();
238 m_insideFrame->setObjectName("DEditInsideFrame");
239 QHBoxLayout *insideLayout = new QHBoxLayout(this);
240 insideLayout->setContentsMargins(0, 0, 0, 1);
241 insideLayout->setSpacing(0);
242 insideLayout->addWidget(m_insideFrame);
243 }
244
245 void DSearchEdit::resizeEvent(QResizeEvent *e)
246 {
247 m_size = e->size();
248 m_edt->setFixedHeight(m_size.height());
249 }
250
251 bool DSearchEdit::event(QEvent *e)
252 {
253 if (e->type() == QEvent::FocusIn) {
254 const QFocusEvent *event = static_cast<QFocusEvent*>(e);
255
256 if (event->reason() == Qt::TabFocusReason
257 || event->reason() == Qt::BacktabFocusReason
258 || event->reason() == Qt::OtherFocusReason
259 || event->reason() == Qt::ShortcutFocusReason) {
260 toEditMode();
261 }
262 }
263
264 return QFrame::event(e);
312
313 center_layout->addWidget(iconbtn, 0, Qt::AlignVCenter);
314 center_layout->addWidget(label, 0, Qt::AlignCenter);
315 layout->addWidget(iconWidget, 0, Qt::AlignCenter);
316
317 QAction* clearAction = q->lineEdit()->findChild<QAction *>(QLatin1String("_q_qlineeditclearaction"));
318
319 if (clearAction != nullptr) {
320 QList<QToolButton *> list = q->lineEdit()->findChildren<QToolButton *>();
321
322 for (int i = 0; i < list.count(); i++) {
323 if (list.at(i)->defaultAction() == clearAction) {
324 QToolButton *clearBtn = list.at(i);
325 //屏蔽lineedit清除按钮的槽函数,_q_clearFocus()获得有效的判断条件
326 q->disconnect(clearBtn, SIGNAL(clicked()), q->lineEdit(), nullptr);
327 q->connect(clearBtn, SIGNAL(clicked()), q, SLOT(_q_clearFocus()));
328 }
329 }
330 }
331
332 #ifdef ENABLE_AI
333 // 语音输入按钮
334 QDBusInterface testSpeechToText("com.iflytek.aiassistant",
335 "/aiassistant/iat",
336 "com.iflytek.aiassistant.iat",
337 QDBusConnection::sessionBus());
338 // 测试听写接口是否开启
339 QDBusReply<bool> speechToTextReply = testSpeechToText.call(QDBus::AutoDetect, "getIatEnable");
340 if (speechToTextReply.isValid() && speechToTextReply.value()) {
341 voiceAction = new QAction(q);
342 voiceAction->setIcon(QIcon::fromTheme("button_voice"));
343 voiceAction->setCheckable(true);
344 lineEdit->addAction(voiceAction, QLineEdit::TrailingPosition);
345
346 q->connect(voiceAction, SIGNAL(triggered(bool)), q, SLOT(_q_onVoiceActionTrigger(bool)));
347 }
348 #endif
349 }
350
351 void DSearchEditPrivate::_q_toEditMode(bool focus)
352 {
353 D_Q(DSearchEdit);
354
355 if (focus || !q->lineEdit()->text().isEmpty()) {
356 action->setVisible(true);
357 iconWidget->setVisible(false);
358 lineEdit->setPlaceholderText(placeholderText);
359 } else {
360 action->setVisible(false);
361 iconWidget->setVisible(true);
362 lineEdit->setPlaceholderText(QString());
363 }
364
365 #ifdef ENABLE_AI
366 //焦点消失,清除语音check
367 if (voiceAction) {
368 voiceAction->setChecked(false);
369 _q_onVoiceActionTrigger(false);
370 }
371 #endif
372 }
373
374 void DSearchEditPrivate::_q_onVoiceActionTrigger(bool checked)
375 {
376 #ifdef ENABLE_AI
377 if (checked) {
378 voiceAction->setIcon(QIcon::fromTheme("button_voice_active"));
379
380 if (!voiceInput) {
381 QAudioFormat format;
382 format.setSampleRate(16000);
383 format.setChannelCount(1);
384 format.setSampleSize(16);
385 format.setSampleType(QAudioFormat::SignedInt);
386 format.setByteOrder(QAudioFormat::LittleEndian);
387 format.setCodec("audio/pcm");
388
389 D_Q(DSearchEdit);
390 voiceInput = new QAudioInput(format, q);
391 voiceIODevice = new VoiceDevice(voiceInput);
392
393 q->connect(voiceIODevice, &VoiceDevice::voiceReply, q, [q, this](const QString & text) {
394 q->setText(text);
395 }, Qt::QueuedConnection);
396
397 q->connect(voiceIODevice, &VoiceDevice::finished, q, [q, this] {
398 // 自动结束录制
399 voiceAction->setChecked(false);
400 _q_onVoiceActionTrigger(false);
401 Q_EMIT q->voiceInputFinished();
402 });
403
404 q->connect(voiceInput, &QAudioInput::stateChanged, q, &DSearchEdit::voiceChanged);
405 }
406
407 if (voiceIODevice->open(QIODevice::WriteOnly))
408 voiceInput->start(voiceIODevice);
409 } else {
410 voiceAction->setIcon(QIcon::fromTheme("button_voice"));
411
412 if (voiceInput) {
413 voiceInput->stop();
414 voiceIODevice->close();
415 voiceInput->deleteLater();
416 voiceInput = nullptr;
417 }
418 }
419 #endif
420 }
421
422 void DSearchEditPrivate::_q_clearFocus()
423 {
424 Q_Q(DSearchEdit);
425
426 if (!q->text().isEmpty()) {
427 q->clearEdit();
428 }
429 Q_EMIT q->searchAborted();
265430 }
266431
267432 DWIDGET_END_NAMESPACE
433
434 #include "moc_dsearchedit.cpp"
435 #include "dsearchedit.moc"
1717 #ifndef DSEARCHEDIT_H
1818 #define DSEARCHEDIT_H
1919
20 #include <QFrame>
21 #include <QSize>
22 #include <QLineEdit>
23 #include <QPropertyAnimation>
24
25 #include "dtkwidget_global.h"
26 #include "dimagebutton.h"
20 #include <DLineEdit>
2721
2822 DWIDGET_BEGIN_NAMESPACE
2923
30 class LIBDTKWIDGETSHARED_EXPORT DSearchEdit : public QFrame
24 class DSearchEditPrivate;
25 class LIBDTKWIDGETSHARED_EXPORT DSearchEdit : public DLineEdit
3126 {
3227 Q_OBJECT
28 Q_PROPERTY(bool voiceInput READ isVoiceInput NOTIFY voiceChanged)
29
3330 public:
34 explicit DSearchEdit(QWidget *parent = 0);
31 explicit DSearchEdit(QWidget *parent = nullptr);
3532 ~DSearchEdit();
3633
37 QSize sizeHint() const {return m_size;}
38 QSize minimumSizeHint() const {return m_size;}
39 const QString text() const;
34 void setPlaceHolder(QString placeHolder);
35 QString placeHolder() const;
4036
41 void mousePressEvent(QMouseEvent *e);
42 void mouseReleaseEvent(QMouseEvent *e);
43 bool eventFilter(QObject *o, QEvent *e);
37 void clear();
38 void clearEdit();
4439
45 inline void setAniDuration(const int duration) {m_animation->setDuration(duration);}
46 inline void setAniShowCurve(const QEasingCurve curve) {m_showCurve = curve;}
47 inline void setAniHideCurve(const QEasingCurve curve) {m_hideCurve = curve;}
40 bool isVoiceInput() const;
4841
49 QLineEdit *getLineEdit() const;
50
51 public Q_SLOTS:
52 void setText(const QString & text) {if (m_edt) m_edt->setText(text);}
53 inline void clear() {m_edt->clear();}
54 inline void setPlaceHolder(const QString &text) {m_placeHolder->setText(text);}
42 void setPlaceholderText(const QString &text);
43 QString placeholderText() const;
5544
5645 Q_SIGNALS:
57 void textChanged();
58 void returnPressed();
59 void editingFinished();
60 void focusOut();
61 void focusIn();
46 void voiceInputFinished();
47 void searchAborted();
48 void voiceChanged();
6249
63 private Q_SLOTS:
64 void toEditMode();
65
66 private:
67 void initInsideFrame();
68 void resizeEvent(QResizeEvent *e);
69 bool event(QEvent *e);
70
71 private:
72 QSize m_size;
73 QLineEdit *m_edt;
74 QLabel *m_searchBtn;
75 DImageButton *m_clearBtn;
76 QLabel *m_placeHolder;
77 QFrame *m_insideFrame = NULL;
78
79 QPropertyAnimation *m_animation;
80 QEasingCurve m_showCurve = QEasingCurve::OutCubic;
81 QEasingCurve m_hideCurve = QEasingCurve::InCubic;
50 protected:
51 Q_DISABLE_COPY(DSearchEdit)
52 D_DECLARE_PRIVATE(DSearchEdit)
53 Q_PRIVATE_SLOT(d_func(), void _q_toEditMode(bool))
54 D_PRIVATE_SLOT(void _q_onVoiceActionTrigger(bool))
55 D_PRIVATE_SLOT(void _q_clearFocus())
8256 };
8357
8458 DWIDGET_END_NAMESPACE
116116 d->highlight->setObjectName("Highlight");
117117 d->highlight->installEventFilter(this);
118118
119 DThemeManager::registerWidget(this);
120
121119 d->highlightMoveAnimation->setDuration(100);
122120 d->highlightMoveAnimation->setEasingCurve(QEasingCurve::InCubic);
123121 }
2929
3030 DWIDGET_BEGIN_NAMESPACE
3131
32 class LIBDTKWIDGETSHARED_EXPORT DSegmentedHighlight : public QToolButton
32 class LIBDTKWIDGETSHARED_EXPORT D_DECL_DEPRECATED DSegmentedHighlight : public QToolButton
3333 {
3434 Q_OBJECT
3535
3838 };
3939
4040 class DSegmentedControlPrivate;
41 class LIBDTKWIDGETSHARED_EXPORT DSegmentedControl : public QWidget, public DCORE_NAMESPACE::DObject
41 class LIBDTKWIDGETSHARED_EXPORT D_DECL_DEPRECATED_X("Use DButtonBox") DSegmentedControl : public QWidget, public DCORE_NAMESPACE::DObject
4242 {
4343 Q_OBJECT
4444 D_DECLARE_PRIVATE(DSegmentedControl)
+0
-76
src/widgets/dseparatorhorizontal.cpp less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #include "dseparatorhorizontal.h"
18 #include "dthememanager.h"
19
20 DWIDGET_BEGIN_NAMESPACE
21
22 /*!
23 * \~english \class DSeparatorHorizontal
24 * \~english \brief The DSeparatorHorizontal class provides an horizontal separator.
25 *
26 * \~english DSeparatorHorizontal has fixed two pixels in height.
27 *
28 *
29 * \~chinese \class DSeparatorHorizontal
30 * \~chinese \brief DSeparatorHorizontal 类提供了通用的横向分割线,可以应用在任何基于
31 * \~chinese QWidget 的控件上。
32 *
33 * \~chinese DSeparatorHorizontal 固定高度为2px,如果是放置在 QVBoxLayout 中进行使用,
34 * \~chinese 使用者无需手动指定 DSeparatorHorizontal 控件的宽度,控件会默认使用 QVBoxLayout
35 * \~chinese 提供的最大宽度。否则,使用者需要手动指定控件宽度。
36 *
37 *
38 * \sa DSeparatorVertical
39 */
40
41 /*!
42 * \~english \brief DSeparatorHorizontal::DSeparatorHorizontal constructs an instance of DSeparatorHorizontal.
43 * \~english \param parent is passed to QWidget constructor.
44 */
45
46 /*!
47 * \~chinese \brief DSeparatorHorizontal::DSeparatorHorizontal 函数是
48 * \~chinese DSeparatorHorizontal 类的构造函数。
49 * \~chinese \param parent 为控件的父控件。
50 */
51 DSeparatorHorizontal::DSeparatorHorizontal(QWidget *parent) : QWidget(parent)
52 {
53 DThemeManager::registerWidget(this);
54
55 this->setFixedHeight(2);
56 this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
57
58 m_topRec = new QWidget(this);
59 m_topRec->setObjectName("DSeparatorTopRec");
60 m_bottomRec = new QWidget(this);
61 m_bottomRec->setObjectName("DSeparatorBottomRec");
62
63 QVBoxLayout *mainLayout = new QVBoxLayout(this);
64 mainLayout->setMargin(0);
65 mainLayout->setSpacing(0);
66
67 mainLayout->addStretch();
68 mainLayout->addWidget(m_topRec);
69 mainLayout->addWidget(m_bottomRec);
70 mainLayout->addStretch();
71
72 this->setLayout(mainLayout);
73 }
74
75 DWIDGET_END_NAMESPACE
+0
-41
src/widgets/dseparatorhorizontal.h less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #ifndef DSEPARATORHORIZONTAL_H
18 #define DSEPARATORHORIZONTAL_H
19
20 #include <QWidget>
21 #include <QVBoxLayout>
22
23 #include "dtkwidget_global.h"
24
25 DWIDGET_BEGIN_NAMESPACE
26
27 class LIBDTKWIDGETSHARED_EXPORT DSeparatorHorizontal : public QWidget
28 {
29 Q_OBJECT
30 public:
31 explicit DSeparatorHorizontal(QWidget *parent = 0);
32
33 private:
34 QWidget *m_topRec = NULL;
35 QWidget *m_bottomRec = NULL;
36 };
37
38 DWIDGET_END_NAMESPACE
39
40 #endif // DSEPARATORHORIZONTAL_H
+0
-74
src/widgets/dseparatorvertical.cpp less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #include "dseparatorvertical.h"
18 #include "dthememanager.h"
19
20 DWIDGET_BEGIN_NAMESPACE
21
22 /*!
23 * \~english \class DSeparatorVertical
24 * \~english \brief The DSeparatorVertical class provides an vertical separator.
25 *
26 * \~english DSeparatorVertical has fixed two pixels in width.
27 *
28 *
29 * \~chinese \class DSeparatorVertical
30 * \~chinese \brief DSeparatorVertical 类提供了通用的纵向分割线,可以应用在任何基于
31 * \~chinese QWidget 的控件上。
32 *
33 * \~chinese DSeparatorVertical 固定宽度为2px,如果是放置在 QHBoxLayout 中进行使用,
34 * \~chinese 使用者无需手动指定 DSeparatorHorizontal 控件的高度,控件会默认使用 QHBoxLayout
35 * \~chinese 提供的最大高度。否则,使用者需要手动指定控件高度。
36 *
37 *
38 * \sa DSeparatorHorizontal
39 */
40
41 /*!
42 * \~english \brief DSeparatorVertical::DSeparatorVertical constructs an instance of DSeparatorVertical.
43 * \~english \param parent is passed to QWidget constructor.
44 *
45 * \~chinese \brief DSeparatorVertical::DSeparatorVertical 函数是
46 * \~chinese DSeparatorVertical 类的构造函数。
47 * \~chinese \param parent 为控件的父控件。
48 */
49 DSeparatorVertical::DSeparatorVertical(QWidget *parent) : QWidget(parent)
50 {
51 DThemeManager::registerWidget(this);
52
53 this->setFixedWidth(2);
54 this->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
55
56 m_leftRec = new QWidget(this);
57 m_leftRec->setObjectName("DSeparatorLeftRec");
58 m_rightRec = new QWidget(this);
59 m_rightRec->setObjectName("DSeparatorRightRec");
60
61 QHBoxLayout *mainLayout = new QHBoxLayout(this);
62 mainLayout->setMargin(0);
63 mainLayout->setSpacing(0);
64
65 mainLayout->addStretch();
66 mainLayout->addWidget(m_leftRec);
67 mainLayout->addWidget(m_rightRec);
68 mainLayout->addStretch();
69
70 this->setLayout(mainLayout);
71 }
72
73 DWIDGET_END_NAMESPACE
+0
-41
src/widgets/dseparatorvertical.h less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #ifndef DSEPARATORVERTICAL_H
18 #define DSEPARATORVERTICAL_H
19
20 #include <QWidget>
21 #include <QHBoxLayout>
22
23 #include "dtkwidget_global.h"
24
25 DWIDGET_BEGIN_NAMESPACE
26
27 class LIBDTKWIDGETSHARED_EXPORT DSeparatorVertical : public QWidget
28 {
29 Q_OBJECT
30 public:
31 explicit DSeparatorVertical(QWidget *parent = 0);
32
33 private:
34 QWidget *m_leftRec = NULL;
35 QWidget *m_rightRec = NULL;
36 };
37
38 DWIDGET_END_NAMESPACE
39
40 #endif // DSEPARATORVERTICAL_H
2020 #include <QHBoxLayout>
2121
2222 #include <DSettingsOption>
23 #include <DPushButton>
2324 #include <DSettings>
25 #include <DTitlebar>
26 #include <DFrame>
2427
2528 #include "dsettingswidgetfactory.h"
2629
2730 #include "private/settings/content.h"
2831 #include "private/settings/navigation.h"
2932
30 #include "dthememanager.h"
33 #include "dspinbox.h"
3134 #include "dwindowclosebutton.h"
32 #include "dspinbox.h"
33 #include "dbuttonlist.h"
34 #include "doptionlist.h"
3535
3636 DWIDGET_BEGIN_NAMESPACE
37
38 // see also: dtitlebar.cpp
39 const int DefaultTitlebarHeight = 40;
3740
3841 /*!
3942 * \~english \class DSettingsDialog
5659 DSettingsDialogPrivate(DSettingsDialog *parent) : q_ptr(parent) {}
5760
5861 Navigation *leftFrame;
59
60 QFrame *rightFrame;
61 QVBoxLayout *rightLayout;
6262 Content *content;
6363
6464 DSettingsDialog *q_ptr;
6666 };
6767
6868 DSettingsDialog::DSettingsDialog(QWidget *parent) :
69 DAbstractDialog(parent), dd_ptr(new DSettingsDialogPrivate(this))
69 DAbstractDialog(false, parent), dd_ptr(new DSettingsDialogPrivate(this))
7070 {
7171 Q_D(DSettingsDialog);
7272
73 DThemeManager::registerWidget(this);
74
7573 setObjectName("DSettingsDialog");
7674
77 auto layout = new QHBoxLayout(this);
78 layout->setContentsMargins(0, 0, 0, 0);
79 layout->setSpacing(0);
75 auto mainlayout = new QVBoxLayout(this);
76 mainlayout->setContentsMargins(0, 0, 0, 0);
77 mainlayout->setSpacing(0);
8078
8179 d->leftFrame = new Navigation;
82 d->leftFrame->layout()->setContentsMargins(0, 30, 0, 0);
83
84 layout->addWidget(d->leftFrame);
85
86 d->rightFrame = new QFrame;
87 d->rightFrame->setObjectName("RightFrame");
88 d->rightLayout = new QVBoxLayout(d->rightFrame);
89 d->rightLayout->setContentsMargins(1, 0, 0, 0);
90 d->rightLayout->setSpacing(0);
91
9280 d->content = new Content;
9381
94 auto closeBt = new DImageButton;
95 closeBt->setObjectName("DSettingsDialogClose");
96 d->rightLayout->addWidget(closeBt, 0, Qt::AlignVCenter | Qt::AlignRight);
97 d->rightLayout->addWidget(d->content);
98
99 layout->addWidget(d->rightFrame);
100 setFixedWidth(680);
82 DFrame *rightFrame = new DFrame;
83 rightFrame->setLineWidth(0);
84 rightFrame->setContentsMargins(10, 10, 10, 10);
85
86 QVBoxLayout *rightlayout = new QVBoxLayout(rightFrame);
87 DTitlebar *frameBar = new DTitlebar;
88 frameBar->setMenuVisible(false);
89 frameBar->setTitle(QString());
90
91 d->leftFrame->setObjectName("LeftFrame");
92 d->content->setObjectName("RightFrame");
93 d->content->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
94
95 rightlayout->setMargin(0);
96 rightlayout->addWidget(d->content);
97
98 QHBoxLayout *bottomlayout = new QHBoxLayout;
99 bottomlayout->addWidget(d->leftFrame, 0, Qt::AlignLeft);
100 bottomlayout->addWidget(rightFrame);
101 bottomlayout->setContentsMargins(0, 0, 0, 0);
102
103 mainlayout->addWidget(frameBar);
104 mainlayout->addLayout(bottomlayout);
105
106 setMinimumWidth(680);
101107
102108 connect(d->leftFrame, &Navigation::selectedGroup, d->content, &Content::onScrollToGroup);
103109 connect(d->content, &Content::scrollToGroup, d->leftFrame, [ = ](const QString & key) {
105111 d->leftFrame->onSelectGroup(key);
106112 d->leftFrame->blockSignals(false);
107113 });
108 connect(closeBt, &DWindowCloseButton::clicked, this, &DSettingsDialog::close);
114
115 connect(this, &DSettingsDialog::windowIconChanged, frameBar, &DTitlebar::setIcon);
116 connect(this, &DSettingsDialog::windowTitleChanged, frameBar, &DTitlebar::setTitle);
109117 }
110118
111119 DSettingsDialog::~DSettingsDialog()
127135 {
128136 Q_D(const DSettingsDialog);
129137 return d->content->widgetFactory();
138 }
139
140 bool DSettingsDialog::groupIsVisible(const QString &groupKey) const
141 {
142 Q_D(const DSettingsDialog);
143 return d->content->groupIsVisible(groupKey);
144 }
145
146 /*!
147 * /~chinese \brief DSettingsDialog::setResetVisible 设置恢复默认设置按钮是否显示
148 * /~chinese \param visible true显示 false隐藏
149 * /~chinese \note 请在 updateSettings() 后调用
150 */
151 void DSettingsDialog::setResetVisible(bool visible)
152 {
153 D_D(DSettingsDialog);
154 DPushButton *btn = d->content->findChild<DPushButton *>("SettingsContentReset");
155 if (btn == nullptr)
156 return;
157 btn->setVisible(visible);
158
130159 }
131160
132161 /*!
164193 adjustSize();
165194 }
166195
196 void DSettingsDialog::setGroupVisible(const QString &groupKey, bool visible)
197 {
198 Q_D(DSettingsDialog);
199 d->leftFrame->setGroupVisible(groupKey, visible);
200 d->content->setGroupVisible(groupKey, visible);
201 }
202
167203 DWIDGET_END_NAMESPACE
3535 ~DSettingsDialog();
3636
3737 DSettingsWidgetFactory* widgetFactory() const;
38 bool groupIsVisible(const QString &groupKey) const;
39 void setResetVisible(bool visible);
3840
3941 public Q_SLOTS:
4042 void updateSettings(DTK_CORE_NAMESPACE::DSettings *settings);
4143 void updateSettings(const QByteArray &translateContext, DTK_CORE_NAMESPACE::DSettings *settings);
44 void setGroupVisible(const QString &groupKey, bool visible);
4245
4346 private:
4447 QScopedPointer<DSettingsDialogPrivate> dd_ptr;
2929 #include <QRadioButton>
3030 #include <QGroupBox>
3131 #include <QCoreApplication>
32 #include <QFormLayout>
3233
3334 #include <DSettingsOption>
35 #include <DSwitchButton>
36 #include <DFontSizeManager>
37 #include <DKeySequenceEdit>
38 #include <DSuggestButton>
39 #include <DButtonBox>
40 #include <DTipLabel>
41 #include <DDialog>
3442
3543 #include "private/settings/shortcutedit.h"
3644 #include "private/settings/buttongroup.h"
3745 #include "private/settings/combobox.h"
46 #include "private/settings/contenttitle.h"
3847
3948 DWIDGET_BEGIN_NAMESPACE
49
50 #define SHORTCUT_VALUE "shortcut_null"
51
52 class DSettingsWidgetFactoryPrivate;
53
54 class KeySequenceEdit : public DKeySequenceEdit
55 {
56 public:
57 KeySequenceEdit(DTK_CORE_NAMESPACE::DSettingsOption *opt, QWidget *parent = nullptr)
58 : DKeySequenceEdit(parent)
59 {
60 m_poption = opt;
61 }
62 DTK_CORE_NAMESPACE::DSettingsOption *option()
63 {
64 return m_poption;
65 }
66 private:
67 DTK_CORE_NAMESPACE::DSettingsOption *m_poption = nullptr;
68 };
69
70 static QMap<QString, KeySequenceEdit *> shortcutMap;
71
72 class ChangeDDialog : public DDialog
73 {
74 public:
75 ChangeDDialog(QString key, KeySequenceEdit *edit, QString text = QString())
76 {
77 QPushButton *cancel = new QPushButton(qApp->translate("DSettingsDialog", "Cancel"));
78 DSuggestButton *replace = new DSuggestButton(qApp->translate("DSettingsDialog", "Replace"));
79
80 QString str = qApp->translate("DSettingsDialog", "This shortcut conflicts with %1, click on Add to make this shortcut effective immediately")
81 .arg(QString("<span style=\"color: rgba(255, 90, 90, 1);\">%1 %2</span>").arg(text).arg(QString("[%1]").arg(key)));
82 setMessage(str);
83 insertButton(1, cancel);
84 insertButton(1, replace);
85 connect(replace, &DSuggestButton::clicked, [ = ] { //替换
86 auto value = shortcutMap.value(key);
87 value->option()->setValue(SHORTCUT_VALUE);
88 shortcutMap.remove(key);
89
90 edit->option()->setValue(key);
91 });
92 connect(cancel, &QPushButton::clicked, [ = ] { //取消
93 cancelSettings(edit);
94 });
95 connect(this, &DDialog::closed, [ = ] {
96 cancelSettings(edit);
97 });
98 connect(this, &DDialog::rejected, [ = ] {
99 cancelSettings(edit);
100 });
101 }
102 private:
103 void cancelSettings(KeySequenceEdit *edit)
104 {
105 if (shortcutMap.key(edit).isEmpty()) { //第一次被设置
106 edit->clear();
107 } else {
108 edit->setKeySequence(edit->option()->value().toString());
109 }
110 }
111 };
40112
41113 /*!
42114 * \~chinese \class DSettingsWidgetFactory
86158 */
87159 QWidget *DSettingsWidgetFactory::createTwoColumWidget(const QByteArray &translateContext, DTK_CORE_NAMESPACE::DSettingsOption *option, QWidget *rightWidget)
88160 {
89 auto optionFrame = new QFrame;
90 optionFrame->setMinimumHeight(30);
161 auto optionFrame = new QWidget;
91162 optionFrame->setObjectName("OptionFrame");
92 // optionFrame->setStyleSheet("QFrame{border: 1px solid red;}");
93
94 auto optionLayout = new QGridLayout(optionFrame);
163
164 auto optionLayout = new QFormLayout(optionFrame);
95165 optionLayout->setContentsMargins(0, 0, 0, 0);
96166 optionLayout->setSpacing(0);
97167
98168 rightWidget->setMinimumWidth(240);
99169
100170 if (!option->name().isEmpty()) {
101 optionLayout->setColumnMinimumWidth(0, 110);
102 optionLayout->setHorizontalSpacing(20);
103 optionLayout->setColumnStretch(0, 10);
104 optionLayout->setColumnStretch(1, 100);
105
106171 auto trName = DWIDGET_NAMESPACE::tr(translateContext, option->name().toStdString().c_str());
107 auto labelWidget = new QLabel(trName);
108 labelWidget->setContentsMargins(5, 0, 0, 0);
109 labelWidget->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
110 labelWidget->setMinimumWidth(150);
111 labelWidget->setFixedWidth(160);
112 labelWidget->setObjectName("OptionLabel");
113 optionLayout->addWidget(labelWidget, 0, 0, Qt::AlignLeft | Qt::AlignVCenter);
114 optionLayout->addWidget(rightWidget, 0, 1, Qt::AlignLeft | Qt::AlignVCenter);
172 optionLayout->addRow(trName, rightWidget);
115173 } else {
116 optionLayout->setColumnMinimumWidth(0, 5);
117 optionLayout->addWidget(rightWidget, 0, 1, Qt::AlignLeft | Qt::AlignVCenter);
174 optionLayout->addWidget(rightWidget);
118175 }
119176
120177 return optionFrame;
121178 }
122179
123 QWidget *createShortcutEditOptionHandle(QObject *opt)
124 {
125 auto option = qobject_cast<DTK_CORE_NAMESPACE::DSettingsOption *>(opt);
126
127 auto rightWidget = new ShortcutEdit();
180 QPair<QWidget *, QWidget *> DSettingsWidgetFactory::createStandardItem(const QByteArray &translateContext, Core::DSettingsOption *option, QWidget *rightWidget)
181 {
182 const QString label(DWIDGET_NAMESPACE::tr(translateContext, option->name().toLocal8Bit().constData()));
183
184 if (label.isEmpty())
185 return qMakePair(nullptr, rightWidget);
186
187 return qMakePair(new QLabel(label), rightWidget);
188 }
189
190 QPair<QWidget *, QWidget *> createShortcutEditOptionHandle(DSettingsWidgetFactoryPrivate *p, QObject *opt)
191 {
192 static DSettingsWidgetFactoryPrivate *pFlg = nullptr;
193 if (pFlg != p) {
194 shortcutMap.clear();
195 pFlg = p;
196 }
197
198 auto option = qobject_cast<DTK_CORE_NAMESPACE::DSettingsOption *>(opt);
199 auto rightWidget = new KeySequenceEdit(option);
200
128201 rightWidget->setObjectName("OptionShortcutEdit");
129
130 auto updateWidgetValue = [rightWidget](const QVariant & optionValue) {
131 switch (optionValue.type()) {
132 case QVariant::List:
133 case QVariant::StringList: {
134 QStringList keyseqs = optionValue.toStringList();
135 if (keyseqs.length() == 2) {
136 auto modifier = static_cast<Qt::KeyboardModifiers>(keyseqs.value(0).toInt());
137 auto key = static_cast<Qt::Key>(keyseqs.value(1).toInt());
138 rightWidget->setShortCut(modifier, key);
139 }
140 break;
141 }
142 case QVariant::String: {
143 rightWidget->setShortCut(optionValue.toString());
144 break;
145 }
146 default:
147 qCritical() << "unknown variant type" << optionValue;
202 rightWidget->ShortcutDirection(Qt::AlignLeft);
203
204 auto optionValue = option->value();
205 auto translateContext = opt->property(PRIVATE_PROPERTY_translateContext).toByteArray();
206
207 option->connect(rightWidget, &KeySequenceEdit::editingFinished, [ = ](const QKeySequence & sequence) {
208
209 QString keyseq = sequence.toString();
210 if (shortcutMap.value(sequence.toString()) == rightWidget) //键位于自己相同
211 return;
212
213 if (shortcutMap.value(keyseq)) {
214 ChangeDDialog frame(keyseq, rightWidget, rightWidget->text());
215 frame.exec();
216 } else {
217 shortcutMap.remove(shortcutMap.key(rightWidget));
218 shortcutMap.insert(keyseq, rightWidget);
219 option->setValue(keyseq);
220 }
221 });
222
223 auto updateWidgetValue = [ = ](const QVariant & optionValue, DTK_CORE_NAMESPACE::DSettingsOption * opt) {
224 QKeySequence sequence(optionValue.toString());
225 QString keyseq = sequence.toString();
226
227 if (auto edit = shortcutMap.value(keyseq)) {
228 return;
229 }
230
231 if (rightWidget->setKeySequence(sequence)) {
232 shortcutMap.insert(keyseq, rightWidget);
233 opt->setValue(keyseq);
148234 }
149235 };
150
151 auto optionValue = option->value();
152 updateWidgetValue(optionValue);
153
154 auto translateContext = opt->property(PRIVATE_PROPERTY_translateContext).toByteArray();
155 auto optionWidget = DSettingsWidgetFactory::createTwoColumWidget(translateContext, option, rightWidget);
156
157 // keep raw value type
158 switch (optionValue.type()) {
159 case QVariant::List:
160 case QVariant::StringList: {
161 option->connect(rightWidget, &ShortcutEdit::shortcutChanged,
162 option, [ = ](Qt::KeyboardModifiers modifier, Qt::Key key) {
163 QStringList keyseqs;
164 keyseqs << QString("%1").arg(modifier) << QString("%1").arg(key);
165 option->setValue(keyseqs);
166 });
167 break;
168 }
169 case QVariant::String: {
170 option->connect(rightWidget, &ShortcutEdit::shortcutStringChanged,
171 option, [ = ](const QString & seqString) {
172 option->setValue(seqString);
173 });
174 break;
175 }
176 default:
177 qCritical() << "unknown variant type" << optionValue;
178 }
179
180 option->connect(option, &DTK_CORE_NAMESPACE::DSettingsOption::valueChanged,
181 rightWidget, [ = ](const QVariant & value) {
182 updateWidgetValue(value);
183 rightWidget->update();
184 });
185
186 return optionWidget;
187 }
188
189 QWidget *createCheckboxOptionHandle(QObject *opt)
236 updateWidgetValue(optionValue, option);
237
238 option->connect(option, &DTK_CORE_NAMESPACE::DSettingsOption::valueChanged, rightWidget, [ = ](const QVariant & value) {
239
240 if (value.toString() == SHORTCUT_VALUE) {
241 rightWidget->clear();
242 return;
243 }
244 QKeySequence sequence(value.toString());
245 QString keyseq = sequence.toString();
246
247 shortcutMap.remove(shortcutMap.key(rightWidget));
248
249 if (rightWidget->setKeySequence(sequence)) { //设置快捷键
250
251 shortcutMap.insert(keyseq, rightWidget);
252 option->setValue(keyseq);
253 }
254 });
255
256 return DSettingsWidgetFactory::createStandardItem(translateContext, option, rightWidget);
257 }
258
259 QPair<QWidget *, QWidget *> createCheckboxOptionHandle(QObject *opt)
190260 {
191261 auto translateContext = opt->property(PRIVATE_PROPERTY_translateContext).toByteArray();
192262 auto option = qobject_cast<DTK_CORE_NAMESPACE::DSettingsOption *>(opt);
193263 auto value = option->data("text").toString();
194264 auto trName = DWIDGET_NAMESPACE::tr(translateContext, value.toStdString().c_str());
195265
196 // auto checkboxFrame = new QWidget;
197 // auto checkboxLayout = new QHBoxLayout(checkboxFrame);
198 // checkboxLayout->setSpacing(0);
199 // checkboxLayout->setContentsMargins(0, 0, 0, 0);
200266 auto rightWidget = new QCheckBox(trName);
201 // auto checkboxLabel = new QLabel(trName);
202 // checkboxLabel->setWordWrap(true);
203 // checkboxLabel->setMinimumWidth(320);
204 // checkboxLayout->addWidget(rightWidget);
205 // checkboxLayout->addSpacing(5);
206 // checkboxLayout->addWidget(checkboxLabel);
207 // checkboxLayout->addStretch();
208
209 rightWidget->setMinimumHeight(30);
267
210268 rightWidget->setObjectName("OptionCheckbox");
211269 rightWidget->setChecked(option->value().toBool());
212
213 // auto optionWidget = DSettingsWidgetFactory::createTwoColumWidget(translateContext, option, checkboxFrame);
214270
215271 option->connect(rightWidget, &QCheckBox::stateChanged,
216272 option, [ = ](int status) {
222278 rightWidget->update();
223279 });
224280
225 return rightWidget;
226 // return optionWidget;
227 }
228
229 QWidget *createLineEditOptionHandle(QObject *opt)
281 return qMakePair(rightWidget, nullptr);
282 }
283
284 QPair<QWidget *, QWidget *> createLineEditOptionHandle(QObject *opt)
230285 {
231286 auto translateContext = opt->property(PRIVATE_PROPERTY_translateContext).toByteArray();
232287 auto option = qobject_cast<DTK_CORE_NAMESPACE::DSettingsOption *>(opt);
233288 auto value = option->data("text").toString();
234289 auto trName = DWIDGET_NAMESPACE::tr(translateContext, value.toStdString().c_str());
235290 auto rightWidget = new QLineEdit(trName);
236 rightWidget->setFixedHeight(24);
237291 rightWidget->setObjectName("OptionLineEdit");
238292 rightWidget->setText(option->value().toString());
239
240 auto optionWidget = DSettingsWidgetFactory::createTwoColumWidget(translateContext, option, rightWidget);
241293
242294 option->connect(rightWidget, &QLineEdit::editingFinished,
243295 option, [ = ]() {
249301 rightWidget->update();
250302 });
251303
252 return optionWidget;
253 }
254
255 QWidget *createComboBoxOptionHandle(QObject *opt)
304 return DSettingsWidgetFactory::createStandardItem(translateContext, option, rightWidget);
305 }
306
307 QPair<QWidget *, QWidget *> createComboBoxOptionHandle(QObject *opt)
256308 {
257309 auto translateContext = opt->property(PRIVATE_PROPERTY_translateContext).toByteArray();
258310 auto option = qobject_cast<DTK_CORE_NAMESPACE::DSettingsOption *>(opt);
259311 auto rightWidget = new ComboBox();
260312 rightWidget->setFocusPolicy(Qt::StrongFocus);
261 rightWidget->setFixedHeight(24);
262313 rightWidget->setObjectName("OptionLineEdit");
263 auto optionWidget = DSettingsWidgetFactory::createTwoColumWidget(translateContext, option, rightWidget);
264314
265315 auto initComboxList = [ = ](const QStringList & data) {
266316 for (auto item : data) {
328378 updateData(dataType, value);
329379 });
330380
331 return optionWidget;
332 }
333
334 QWidget *createButtonGroupOptionHandle(QObject *opt)
335 {
336 auto option = qobject_cast<DTK_CORE_NAMESPACE::DSettingsOption *>(opt);
337 auto rightWidget = new ButtonGroup();
338 rightWidget->setFixedHeight(24);
339 rightWidget->setObjectName("OptionButtonGroup");
340
381 return DSettingsWidgetFactory::createStandardItem(translateContext, option, rightWidget);
382 }
383
384 QPair<QWidget *, QWidget *> createButtonGroupOptionHandle(QObject *opt)
385 {
386 QList<DButtonBoxButton *> btnList;
387
388 auto option = qobject_cast<DTK_CORE_NAMESPACE::DSettingsOption *>(opt);
341389 auto items = option->data("items").toStringList();
342 rightWidget->setButtons(items);
343 rightWidget->setCheckedButton(0);
344
345 auto translateContext = opt->property(PRIVATE_PROPERTY_translateContext).toByteArray();
346 auto optionWidget = DSettingsWidgetFactory::createTwoColumWidget(translateContext, option, rightWidget);
347 rightWidget->setParent(optionWidget);
348
349 option->connect(rightWidget, &ButtonGroup::buttonChecked,
350 option, [ = ](int id) {
351 option->setValue(id);
390 for (const auto item : items) {
391 auto btn = new DButtonBoxButton(item);
392 btnList.append(btn);
393 }
394
395 auto rightWidget = new DButtonBox();
396 rightWidget->setObjectName("OptionButtonBox");
397 rightWidget->setButtonList(btnList, true);
398 rightWidget->setMaximumWidth(60 * btnList.count());
399 btnList.at(option->value().toInt())->setChecked(true);
400
401 auto translateContext = opt->property(PRIVATE_PROPERTY_translateContext).toByteArray();
402 option->connect(rightWidget, &DButtonBox::buttonToggled, option, [option, rightWidget ] (QAbstractButton * toggleBtn, bool) {
403 int index = rightWidget->buttonList().indexOf(toggleBtn);
404 option->setValue(index);
352405 });
353406 option->connect(option, &DTK_CORE_NAMESPACE::DSettingsOption::valueChanged,
354 rightWidget, [ = ](const QVariant & value) {
355 rightWidget->setCheckedButton(value.toInt());
407 rightWidget, [ = ](const QVariant & value) {
408 int index = value.toInt();
409 btnList.at(index)->setChecked(true);
356410 rightWidget->update();
357411 });
358 return optionWidget;
359 }
360
361 QWidget *createRadioGroupOptionHandle(QObject *opt)
412
413 return DSettingsWidgetFactory::createStandardItem(translateContext, option, rightWidget);
414 }
415
416 QPair<QWidget *, QWidget *> createRadioGroupOptionHandle(QObject *opt)
362417 {
363418 auto translateContext = opt->property(PRIVATE_PROPERTY_translateContext).toByteArray();
364419 auto option = qobject_cast<DTK_CORE_NAMESPACE::DSettingsOption *>(opt);
368423 rightWidget->setContentsMargins(0, 0, 0, 0);
369424 rightWidget->setObjectName("OptionRadioGroup");
370425 rightWidget->setAlignment(Qt::AlignLeft);
426 rightWidget->setFlat(true);
371427 rightWidget->setFixedHeight(24 * items.length() + 8);
372428
373429 auto rgLayout = new QVBoxLayout;
390446 }
391447 rightWidget->setLayout(rgLayout);
392448
393 // auto optionWidget = DSettingsWidgetFactory::createTwoColumWidget(translateContext, option, rightWidget);
394 // rightWidget->setParent(optionWidget);
395
396449 option->connect(option, &DTK_CORE_NAMESPACE::DSettingsOption::valueChanged,
397450 rightWidget, [ buttonList ](const QVariant & value) {
398451 auto index = value.toInt();
406459 buttonList.value(index)->setChecked(true);
407460 }
408461
409 rightWidget->setStyleSheet("QGroupBox{border: 0px solid red;}");
410 // optionWidget->setFixedHeight(24 * items.length() + 8);
411 // return optionWidget;
412 return rightWidget;
413 }
414
415 QWidget *createSpinButtonOptionHandle(QObject *opt)
462 return qMakePair(rightWidget, nullptr);
463 }
464
465 QPair<QWidget *, QWidget *> createSpinButtonOptionHandle(QObject *opt)
416466 {
417467 auto option = qobject_cast<DTK_CORE_NAMESPACE::DSettingsOption *>(opt);
418468 auto rightWidget = new QSpinBox();
419 rightWidget->setFixedHeight(24);
420469 rightWidget->setObjectName("OptionDSpinBox");
421470 rightWidget->setValue(option->value().toInt());
422471
428477 }
429478
430479 auto translateContext = opt->property(PRIVATE_PROPERTY_translateContext).toByteArray();
431 auto optionWidget = DSettingsWidgetFactory::createTwoColumWidget(translateContext, option, rightWidget);
432480
433481 option->connect(rightWidget, static_cast<void (QSpinBox::*)(int value)>(&QSpinBox::valueChanged),
434482 option, [ = ](int value) {
439487 rightWidget->setValue(value.toInt());
440488 rightWidget->update();
441489 });
442 return optionWidget;
443 }
444
445 QWidget *createSliderOptionHandle(QObject *opt)
490
491 return DSettingsWidgetFactory::createStandardItem(translateContext, option, rightWidget);
492 }
493
494 QPair<QWidget *, QWidget *> createSliderOptionHandle(QObject *opt)
446495 {
447496 auto option = qobject_cast<DTK_CORE_NAMESPACE::DSettingsOption *>(opt);
448497 auto rightWidget = new QSlider();
449 rightWidget->setFixedHeight(24);
450498 rightWidget->setObjectName("OptionQSlider");
451499 rightWidget->setOrientation(Qt::Horizontal);
452500 rightWidget->setMaximum(option->data("max").toInt());
454502 rightWidget->setValue(option->value().toInt());
455503
456504 auto translateContext = opt->property(PRIVATE_PROPERTY_translateContext).toByteArray();
457 auto optionWidget = DSettingsWidgetFactory::createTwoColumWidget(translateContext, option, rightWidget);
458505
459506 option->connect(rightWidget, &QSlider::valueChanged,
460507 option, [ = ](int value) {
467514 rightWidget->setValue(value.toInt());
468515 rightWidget->update();
469516 });
470 return optionWidget;
517
518 return DSettingsWidgetFactory::createStandardItem(translateContext, option, rightWidget);
519 }
520
521 QPair<QWidget *, QWidget *> createSwitchButton(QObject *opt)
522 {
523 auto option = qobject_cast<DTK_CORE_NAMESPACE::DSettingsOption *>(opt);
524 auto rightWidget = new DSwitchButton();
525 rightWidget->setObjectName("OptionDSwitchButton");
526 rightWidget->setChecked(option->value().toBool());
527
528 auto translateContext = opt->property(PRIVATE_PROPERTY_translateContext).toByteArray();
529
530 option->connect(rightWidget, &DSwitchButton::checkedChanged,
531 option, [ = ](bool value) {
532 rightWidget->blockSignals(true);
533 option->setValue(value);
534 rightWidget->blockSignals(false);
535 });
536 option->connect(option, &DTK_CORE_NAMESPACE::DSettingsOption::valueChanged,
537 rightWidget, [ = ](const QVariant & value) {
538 rightWidget->setChecked(value.toBool());
539 rightWidget->update();
540 });
541
542 QWidget *widget = new QWidget();
543 QHBoxLayout *layout = new QHBoxLayout(widget);
544 layout->setContentsMargins(0, 0, 0, 0);
545 layout->addWidget(rightWidget, 0, Qt::AlignRight);
546
547 return DSettingsWidgetFactory::createStandardItem(translateContext, option, widget);
548 }
549
550 QPair<QWidget *, QWidget *> createTitle1(QObject *opt)
551 {
552 auto option = qobject_cast<DTK_CORE_NAMESPACE::DSettingsOption *>(opt);
553 auto translateContext = opt->property(PRIVATE_PROPERTY_translateContext).toByteArray();
554 auto trName = DWIDGET_NAMESPACE::tr(translateContext, option->value().toString().toLocal8Bit().constData());
555
556 auto title = new ContentTitle;
557 title->setTitle(trName);
558 title->label()->setForegroundRole(QPalette::BrightText);
559 DFontSizeManager::instance()->bind(title, DFontSizeManager::T4, QFont::Medium);
560
561 return qMakePair(title, nullptr);
562 }
563
564 QPair<QWidget *, QWidget *> createTitle2(QObject *opt)
565 {
566 auto option = qobject_cast<DTK_CORE_NAMESPACE::DSettingsOption *>(opt);
567 auto translateContext = opt->property(PRIVATE_PROPERTY_translateContext).toByteArray();
568 auto trName = DWIDGET_NAMESPACE::tr(translateContext, option->value().toString().toLocal8Bit().constData());
569
570 auto title = new ContentTitle;
571 title->setTitle(trName);
572 DFontSizeManager::instance()->bind(title, DFontSizeManager::T5, QFont::Medium);
573
574 return qMakePair(title, nullptr);
471575 }
472576
473577 QWidget *createUnsupportHandle(QObject *opt)
477581 rightWidget->setFixedHeight(24);
478582 rightWidget->setObjectName("OptionUnsupport");
479583 rightWidget->setText("Unsupport option type: " + option->viewType());
480
481 auto translateContext = opt->property(PRIVATE_PROPERTY_translateContext).toByteArray();
482 auto optionWidget = DSettingsWidgetFactory::createTwoColumWidget(translateContext, option, rightWidget);
483
484 // optionWidget->setStyleSheet("QFrame{border: 1px solid red;}");
485 return optionWidget;
584 rightWidget->setWordWrap(true);
585
586 return rightWidget;
486587 }
487588
488589 class DSettingsWidgetFactoryPrivate
490591 public:
491592 DSettingsWidgetFactoryPrivate(DSettingsWidgetFactory *parent) : q_ptr(parent)
492593 {
493 widgetCreateHandles.insert("checkbox", createCheckboxOptionHandle);
494 widgetCreateHandles.insert("lineedit", createLineEditOptionHandle);
495 widgetCreateHandles.insert("combobox", createComboBoxOptionHandle);
496 widgetCreateHandles.insert("shortcut", createShortcutEditOptionHandle);
497 widgetCreateHandles.insert("spinbutton", createSpinButtonOptionHandle);
498 widgetCreateHandles.insert("buttongroup", createButtonGroupOptionHandle);
499 widgetCreateHandles.insert("radiogroup", createRadioGroupOptionHandle);
500 widgetCreateHandles.insert("slider", createSliderOptionHandle);
594 itemCreateHandles.insert("checkbox", createCheckboxOptionHandle);
595 itemCreateHandles.insert("lineedit", createLineEditOptionHandle);
596 itemCreateHandles.insert("combobox", createComboBoxOptionHandle);
597 itemCreateHandles.insert("shortcut", std::bind(createShortcutEditOptionHandle, this, std::placeholders::_1));
598 itemCreateHandles.insert("spinbutton", createSpinButtonOptionHandle);
599 itemCreateHandles.insert("buttongroup", createButtonGroupOptionHandle);
600 itemCreateHandles.insert("radiogroup", createRadioGroupOptionHandle);
601 itemCreateHandles.insert("slider", createSliderOptionHandle);
602 itemCreateHandles.insert("switchbutton", createSwitchButton);
603 itemCreateHandles.insert("title1", createTitle1);
604 itemCreateHandles.insert("title2", createTitle2);
501605 }
502606
503607 QMap<QString, std::function<DSettingsWidgetFactory::WidgetCreateHandler> > widgetCreateHandles;
608 QMap<QString, std::function<DSettingsWidgetFactory::ItemCreateHandler> > itemCreateHandles;
504609
505610 DSettingsWidgetFactory *q_ptr;
506611 Q_DECLARE_PUBLIC(DSettingsWidgetFactory)
526631 {
527632 Q_D(DSettingsWidgetFactory);
528633 d->widgetCreateHandles.insert(viewType, handler);
634 }
635
636 void DSettingsWidgetFactory::registerWidget(const QString &viewType, std::function<DSettingsWidgetFactory::ItemCreateHandler> handler)
637 {
638 Q_D(DSettingsWidgetFactory);
639 d->itemCreateHandles.insert(viewType, handler);
529640 }
530641
531642 /*!
558669 }
559670 }
560671
672 QPair<QWidget *, QWidget *> DSettingsWidgetFactory::createItem(QPointer<Core::DSettingsOption> option) const
673 {
674 return createItem(QByteArray(), option);
675 }
676
677 QPair<QWidget *, QWidget *> DSettingsWidgetFactory::createItem(const QByteArray &translateContext, QPointer<Core::DSettingsOption> option) const
678 {
679 option->setProperty(PRIVATE_PROPERTY_translateContext, translateContext);
680
681 Q_D(const DSettingsWidgetFactory);
682 auto handle = d->itemCreateHandles.value(option->viewType());
683 if (handle) {
684 return handle(option.data());
685 }
686
687 return qMakePair(nullptr, nullptr);
688 }
689
561690 DWIDGET_END_NAMESPACE
3535 Q_OBJECT
3636 public:
3737 typedef QWidget *(WidgetCreateHandler)(QObject *);
38 typedef QPair<QWidget*, QWidget*> (ItemCreateHandler)(QObject *);
3839
3940 explicit DSettingsWidgetFactory(QObject *parent = Q_NULLPTR);
4041 ~DSettingsWidgetFactory();
4142
4243 void registerWidget(const QString &viewType, std::function<WidgetCreateHandler> handler);
44 void registerWidget(const QString &viewType, std::function<ItemCreateHandler> handler);
4345
4446 QWidget *createWidget(QPointer<DTK_CORE_NAMESPACE::DSettingsOption> option);
4547 QWidget *createWidget(const QByteArray &translateContext, QPointer<DTK_CORE_NAMESPACE::DSettingsOption> option);
48 QPair<QWidget*, QWidget*> createItem(QPointer<DTK_CORE_NAMESPACE::DSettingsOption> option) const;
49 QPair<QWidget*, QWidget*> createItem(const QByteArray &translateContext, QPointer<DTK_CORE_NAMESPACE::DSettingsOption> option) const;
4650
47 static QWidget *createTwoColumWidget(DTK_CORE_NAMESPACE::DSettingsOption *option, QWidget *rightWidget);
48 static QWidget *createTwoColumWidget(const QByteArray &translateContext, DTK_CORE_NAMESPACE::DSettingsOption *option, QWidget *rightWidget);
51 D_DECL_DEPRECATED static QWidget *createTwoColumWidget(DTK_CORE_NAMESPACE::DSettingsOption *option, QWidget *rightWidget);
52 D_DECL_DEPRECATED static QWidget *createTwoColumWidget(const QByteArray &translateContext, DTK_CORE_NAMESPACE::DSettingsOption *option, QWidget *rightWidget);
53 static QPair<QWidget*, QWidget*> createStandardItem(const QByteArray &translateContext, DTK_CORE_NAMESPACE::DSettingsOption *option, QWidget *rightWidget);
4954
5055 private:
5156 QScopedPointer<DSettingsWidgetFactoryPrivate> dd_ptr;
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #include "dshadowline.h"
21
22 #include <DGuiApplicationHelper>
23 #include <DObjectPrivate>
24
25 #include <QEvent>
26 #include <QIcon>
27 #include <QPainter>
28
29 DGUI_USE_NAMESPACE
30 DWIDGET_BEGIN_NAMESPACE
31
32 class DShadowLinePrivate : public DCORE_NAMESPACE::DObjectPrivate
33 {
34 public:
35 DShadowLinePrivate(DShadowLine *qq)
36 : DObjectPrivate(qq)
37 {
38
39 }
40
41 QPixmap shadow;
42 };
43
44 /*!
45 * \~chinese \brief DShadowLine::DShadowLine 提供一个以titlebar_shadow为主题背景的线条形状的控件
46 * \~chinese \param parent
47 */
48 DShadowLine::DShadowLine(QWidget *parent)
49 : QWidget(parent)
50 , DObject(*new DShadowLinePrivate(this))
51 {
52 connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, [this] {
53 D_D(DShadowLine);
54 d->shadow = QPixmap();
55 update();
56 });
57
58 setAttribute(Qt::WA_TransparentForMouseEvents);
59 setFocusPolicy(Qt::NoFocus);
60 }
61
62 QSize DShadowLine::sizeHint() const
63 {
64 return QSize(20, 20);
65 }
66
67 void DShadowLine::paintEvent(QPaintEvent *event)
68 {
69 Q_UNUSED(event)
70 D_D(DShadowLine);
71
72 if (d->shadow.isNull()) {
73 d->shadow = QIcon::fromTheme("titlebar_shadow").pixmap(sizeHint());
74 }
75
76 QPainter pa(this);
77 pa.drawPixmap(contentsRect(), d->shadow);
78 }
79
80 DWIDGET_END_NAMESPACE
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #ifndef DSHADOWLINE_H
21 #define DSHADOWLINE_H
22
23 #include <dtkwidget_global.h>
24 #include <DObject>
25
26 #include <QWidget>
27
28 DWIDGET_BEGIN_NAMESPACE
29
30 class DShadowLinePrivate;
31 class LIBDTKWIDGETSHARED_EXPORT DShadowLine : public QWidget, public DCORE_NAMESPACE::DObject
32 {
33 D_DECLARE_PRIVATE(DShadowLine)
34
35 public:
36 explicit DShadowLine(QWidget *parent = nullptr);
37
38 QSize sizeHint() const;
39
40 protected:
41 void paintEvent(QPaintEvent *event) override;
42 };
43
44 DWIDGET_END_NAMESPACE
45
46 #endif // DSHADOWLINE_H
3232 DShortcutEdit::DShortcutEdit(QWidget *parent)
3333 : QFrame(parent)
3434 {
35 DThemeManager::registerWidget(this);
36
3735 m_keysEdit = new QLabel(DefaultTips);
3836 m_keysEdit->setObjectName("Edit");
3937 m_keysEdit->setAlignment(Qt::AlignVCenter | Qt::AlignHCenter);
236236 {
237237 D_D(DSimpleListView);
238238
239 Q_ASSERT_X(toggleHideFlags.contains(false), "toggleHideFlags", "at least have one 'false' in list.");
239 //Q_ASSERT_X(toggleHideFlags.contains(false), "toggleHideFlags", "at least have one 'false' in list.");
240240 Q_ASSERT_X(toggleHideFlags.count() == d->columnTitles.count(), "toggleHideFlags", "hide flags length is not same as titles list.");
241241
242242 d->alwaysVisibleColumn = visibleColumnIndex;
993993 action->setChecked(columnVisibles[i]);
994994
995995 connect(action, &QAction::triggered, this, [this, action, i] {
996 columnVisibles[i] = !columnVisibles[i];
997
998 changeColumnVisible(i, columnVisibles[i], columnVisibles);
999
1000 repaint();
1001 });
996 if (i>=columnVisibles.size()) return ;
997
998 columnVisibles[i] = !columnVisibles[i];
999
1000 changeColumnVisible(i, columnVisibles[i], columnVisibles);
1001
1002 repaint();
1003 });
10021004
10031005 menu->addAction(action);
10041006 }
16021604 if (d->columnWidths.contains(-1)) {
16031605 for (int i = 0; i < d->columnWidths.count(); i++) {
16041606 if (d->columnWidths[i] != -1) {
1605 if (columnVisibles[i]) {
1607 if (columnVisibles.value(i)) {
16061608 renderWidths << d->columnWidths[i];
16071609 } else {
16081610 renderWidths << 0;
16091611 }
16101612 } else {
1611 if (columnVisibles[i]) {
1613 if (columnVisibles.value(i)) {
16121614 int totalWidthOfOtherColumns = 0;
16131615
16141616 for (int j = 0; j < d->columnWidths.count(); j++) {
1615 if (d->columnWidths[j] != -1 && columnVisibles[j]) {
1617 if (d->columnWidths[j] != -1 && columnVisibles.value(j)) {
16161618 totalWidthOfOtherColumns += d->columnWidths[j];
16171619 }
16181620 }
16251627 }
16261628 } else {
16271629 for (int i = 0; i < d->columnWidths.count(); i++) {
1628 if (columnVisibles[i]) {
1630 if (columnVisibles.value(i)) {
16291631 renderWidths << d->columnWidths[i];
16301632 } else {
16311633 renderWidths << 0;
00 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
1 * Copyright (C) 2011 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: wp <wangpeng_cm@deepin.com>
4 *
5 * Maintainer: wp <wangpeng_cm@deepin.com>
26 *
37 * This program is free software: you can redistribute it and/or modify
48 * it under the terms of the GNU General Public License as published by
1418 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1519 */
1620
21 #include "dslider.h"
22 #include "private/dslider_p.h"
23
1724 #include <QPainter>
18 #include <QPaintEvent>
25 #include <QEvent>
26 #include <QtMath>
1927 #include <QDebug>
20 #include <QTimer>
21 #include <QStyle>
22 #include <QStyleOptionSlider>
23
24 #include "dslider.h"
25 #include "dthememanager.h"
28
29 #include <DApplicationHelper>
30 #include <DFontSizeManager>
2631
2732 DWIDGET_BEGIN_NAMESPACE
2833
29 static const int CustomDrawingLeftPadding = 10;
30 static const int CustomDrawingRightPadding = 10;
31 static const int CustomDrawingScaleHeight = 6;
32
33 // TODO: optimize for better vertical slider support
34 class DSliderPrivate
35 {
36 DSliderPrivate(DSlider *q):
37 m_hoverShowValue(false),
38 m_handleHovering(false),
39 m_hoverTimout(false),
40 m_hoverShowValueInterval(-1),
41 q_ptr(q)
34 class SliderStrip : public QWidget
35 {
36 public:
37 SliderStrip(Qt::Orientation orie, QWidget *parent = nullptr)
38 : QWidget(parent)
39 , orient(orie)
4240 {
43 m_hoverTimer.setSingleShot(true);
44 }
45
46 int m_handleType = DSlider::RoundHandle;
47
48 QString m_leftTip;
49 QString m_rightTip;
50 QList<int> m_scales;
51
52 QColor m_tipColor = Qt::black;
53 QColor m_scaleColor = Qt::black;
54 QColor m_hoverValueColor;
55 bool m_hoverShowValue;
56 bool m_handleHovering;
57 bool m_hoverTimout;
58 bool mousePressed = false;
59 int clickOffset = 0;
60 int m_hoverShowValueInterval;
61 QTimer m_hoverTimer;
62
63 int getScalePosition(int value);
64 int pixelPosToRangeValue(int pos) const;
65
66 inline int pick(const QPoint &pt) const
67 {
68 Q_Q(const DSlider);
69 return q->orientation() == Qt::Horizontal ? pt.x() : pt.y();
70 }
71
72 DSlider *q_ptr;
73 Q_DECLARE_PUBLIC(DSlider)
41 DFontSizeManager::instance()->bind(this, DFontSizeManager::T7);
42 }
43 QSize sizeHint() const override;
44
45 void setScaleInfo(QStringList scaleInfo, QSlider::TickPosition tickPosition);
46 void setMarkList(QList<int> list, QSlider::TickPosition tickPosition);
47 QList<int> getList();
48 QStringList getScaleInfo();
49
50 protected:
51 void paintEvent(QPaintEvent *event) override;
52 bool event(QEvent *e) override;
53 private:
54 void drawSCale();
55 private:
56 Qt::Orientation orient;
57 QSlider::TickPosition tick;
58 QStringList scaleInfo;
59 QList<int> list;
7460 };
7561
76
77 /*!
78 * \~english \class DSlider
79 * \~english \brief The DSlider class provides an extended QSlider widget.
62 /*!
63 * \~chinese \class DSlider
64 * \~chinese \brief DSlider一个聚合 QSlider 的滑块
65 * \~chinese \row \li DSlider提供了在滑块两侧设置图标函数
66 * \~chinese \row \li DSlider提供了滑块的刻度及刻度标识
67 */
68
69 /*!
70 * \~chinese \brief DSlider的构造函数
71 * \~chinese \param \sa orientation Qt::Orientation
72 * \~chinese \param parent参数被发送到 QWidget 构造函数。
73 */
74 DSlider::DSlider(Qt::Orientation orientation, QWidget *parent)
75 : QWidget(parent)
76 , DObject(*new DSliderPrivate(this))
77 {
78 Q_D(DSlider);
79 d->orientation = orientation;
80 d->init();
81 }
82
83 DSlider::DSlider(DSliderPrivate &q, QWidget *parent)
84 : QWidget(parent)
85 , DObject(q)
86 {
87
88 }
89
90 bool DSlider::event(QEvent *e)
91 {
92 D_D(DSlider);
93 if (d->tipvalue && (e->type() == QEvent::Resize || e->type() == QEvent::LayoutRequest)) {
94 d->updtateTool(value());
95 }
96 return QWidget::event(e);
97 }
98
99 /*!
100 * \~chinese \brief DSlider::eventFilter
101 * \~chinese \row 此函数处理了鼠标滚轮事件
102 */
103 bool DSlider::eventFilter(QObject *watched, QEvent *e)
104 {
105 Q_D(DSlider);
106
107 if ((watched == d->slider) && (e->type() == QEvent::Wheel)) {
108 return !d->mouseWheelEnabled;
109 }
110 return QWidget::eventFilter(watched, e);
111 }
112
113 /*!
114 * \~chinese \brief DSlider::orientation
115 * \~chinese \sa QSlider::orientation()
116 */
117 Qt::Orientation DSlider::orientation() const
118 {
119 D_DC(DSlider);
120 return d->slider->orientation();
121 }
122 /*!
123 * \~chinese \brief DSlider::slider返回 QSlider 对象
124 * \~chinese \row 若 DSlider 不满足输入框的使用需求,请用此函数抛出的对象
125 * \~chinese \return
126 */
127 QSlider *DSlider::slider()
128 {
129 Q_D(DSlider);
130 return d->slider;
131 }
132
133 /*!
134 * \~chinese \brief DSlider::setLeftIcon设置滑块左侧图标
135 * \~chinese \param left图标
136 */
137 void DSlider::setLeftIcon(const QIcon &left)
138 {
139 D_D(DSlider);
140
141 if (d->leftIcon == nullptr) {
142 d->leftIcon = new DIconButton(nullptr);
143 d->leftIcon->setFlat(true);
144 d->leftIcon->setFocusPolicy(Qt::NoFocus);
145 d->leftIcon->setAttribute(Qt::WA_TransparentForMouseEvents);
146
147 if (orientation() == Qt::Horizontal) {
148 d->layout->addWidget(d->leftIcon, 1, 0, Qt::AlignVCenter);
149 } else {
150 d->layout->addWidget(d->leftIcon, 0, 1, Qt::AlignHCenter);
151 }
152
153 if (d->iconSize.isValid())
154 d->leftIcon->setIconSize(d->iconSize);
155 }
156 d->leftIcon->setIcon(left);
157 }
158
159 /*!
160 * \~chinese \brief DSlider::setRightIcon设置滑块右图标
161 * \~chinese \param right图标
162 */
163 void DSlider::setRightIcon(const QIcon &right)
164 {
165 D_D(DSlider);
166
167 if (d->rightIcon == nullptr) {
168 d->rightIcon = new DIconButton(nullptr);
169 d->rightIcon->setFlat(true);
170 d->rightIcon->setFocusPolicy(Qt::NoFocus);
171 d->rightIcon->setAttribute(Qt::WA_TransparentForMouseEvents);
172
173 if (orientation() == Qt::Horizontal) {
174 d->layout->addWidget(d->rightIcon, 1, 2, Qt::AlignVCenter);
175 } else {
176 d->layout->addWidget(d->rightIcon, 2, 1, Qt::AlignHCenter);
177 }
178
179 if (d->iconSize.isValid())
180 d->rightIcon->setIconSize(d->iconSize);
181 }
182 d->rightIcon->setIcon(right);
183 }
184
185 /*!
186 * \~chinese \brief DSlider::setIconSize设置滑块图标大小
187 * \~chinese \param size图标大小
188 */
189 void DSlider::setIconSize(const QSize &size)
190 {
191 D_D(DSlider);
192
193 d->iconSize = size;
194
195 if (d->leftIcon != nullptr) {
196 d->leftIcon->setIconSize(size);
197 }
198
199 if (d->rightIcon != nullptr) {
200 d->rightIcon->setIconSize(size);
201 }
202 }
203
204 /*!
205 * \~chinese \brief DSlider::setMinimum
206 * \~chinese \sa QSlider::setMinimum()
207 */
208 void DSlider::setMinimum(int min)
209 {
210 D_D(DSlider);
211 d->slider->setMinimum(min);
212 }
213
214 /*!
215 * \~chinese \brief DSlider::minimum
216 * \~chinese \sa QSlider::minimum()
217 */
218 int DSlider::minimum() const
219 {
220 D_DC(DSlider);
221 return d->slider->minimum();
222 }
223
224 /*!
225 * \~chinese \brief DSlider::setValue
226 * \~chinese \sa QSlider::setValue()
227 */
228 void DSlider::setValue(int value)
229 {
230 D_D(DSlider);
231 d->slider->setValue(value);
232 }
233
234 /*!
235 * \~chinese \brief DSlider::value
236 * \~chinese \sa QSlider::value()
237 */
238 int DSlider::value() const
239 {
240 D_DC(DSlider);
241 return d->slider->value();
242 }
243
244 /*!
245 * \~chinese \brief DSlider::setPageStep
246 * \~chinese \sa QSlider::setPageStep()
247 */
248 void DSlider::setPageStep(int pageStep)
249 {
250 D_D(DSlider);
251 d->slider->setPageStep(pageStep);
252 }
253
254 /*!
255 * \~chinese \brief DSlider::pageStep
256 * \~chinese \sa QSlider::pageStep()
257 */
258 int DSlider::pageStep() const
259 {
260 D_DC(DSlider);
261 return d->slider->pageStep();
262 }
263
264 /*!
265 * \~chinese \brief DSlider::setMaximum
266 * \~chinese \sa QSlider::setMaximum()
267 */
268 void DSlider::setMaximum(int max)
269 {
270 D_D(DSlider);
271 d->slider->setMaximum(max);
272 }
273
274 /*!
275 * \~chinese \brief DSlider::maximum
276 * \~chinese \sa QSlider::maximum
277 */
278 int DSlider::maximum() const
279 {
280 D_DC(DSlider);
281 return d->slider->maximum();
282 }
283
284 /*!
285 * \~chinese \brief DSlider::setLeftTicks设置刻度在滑块左侧
286 * \~chinese \row 根据 QStringList 数量,绘制刻度的个数,绘制刻度标识
287 * \~chinese \row \li 滑块为水平,刻度在滑块上方
288 * \~chinese \row \li 滑块为垂直,刻度在滑块左侧
289 * \~chinese \param info刻度标识
290 */
291 void DSlider::setLeftTicks(const QStringList &info)
292 {
293 D_D(DSlider);
294
295 if (info.isEmpty()) {
296 if (d->left) {
297 if (d->left->getList().empty()) {
298 d->left->deleteLater();
299 d->left = nullptr;
300 }
301 }
302
303 return;
304 }
305
306 if (d->left == nullptr) {
307 d->left = new SliderStrip(orientation());
308 d->left->setScaleInfo(info, QSlider::TicksLeft);
309
310 if (orientation() == Qt::Horizontal) {
311 d->layout->addWidget(d->left, 0, 1, Qt::AlignTop);
312 } else {
313 d->layout->addWidget(d->left, 1, 0, Qt::AlignRight);
314 }
315 }
316 d->left->setScaleInfo(info, QSlider::TicksLeft);
317 }
318
319 /*!
320 * \~chinese \brief DSlider::setRightTicks设置刻度在滑块右侧
321 * \~chinese \row 根据 QStringList 数量,绘制刻度的个数,绘制刻度标识
322 * \~chinese \row \li 滑块为水平,刻度在滑块下方
323 * \~chinese \row \li 滑块为垂直,刻度在滑块右侧
324 * \~chinese \param info刻度标识
325 */
326 void DSlider::setRightTicks(const QStringList &info)
327 {
328 D_D(DSlider);
329
330 if (info.isEmpty()) {
331 if (d->right) {
332 if (d->right->getList().isEmpty()){
333 d->right->deleteLater();
334 d->right = nullptr;
335 }
336 }
337
338 return;
339 }
340
341 if (d->right == nullptr) {
342 d->right = new SliderStrip(orientation());
343 d->right->setScaleInfo(info, QSlider::TicksRight);
344
345 if (orientation() == Qt::Horizontal) {
346 d->layout->addWidget(d->right, 2, 1, Qt::AlignTop);
347 } else {
348 d->layout->addWidget(d->right, 1, 2, Qt::AlignLeft);
349 }
350 }
351 d->right->setScaleInfo(info, QSlider::TicksRight);
352 }
353
354 /*!
355 * \~chinese \brief DSlider::setAboveTicks设置刻度在滑块上方
356 * \~chinese \sa DSlider::setLeftTicks()
357 */
358 void DSlider::setAboveTicks(const QStringList &info)
359 {
360 setLeftTicks(info);
361 }
362
363 /*!
364 * \~chinese \brief DSlider::setBelowTicks设置刻度在滑块下方
365 * \~chinese \sa DSlider::setRightTicks()
366 */
367 void DSlider::setBelowTicks(const QStringList &info)
368 {
369 setRightTicks(info);
370 }
371
372 /*!
373 * \~chinese \brief DSlider::setMarkPositions 设置显示双边的刻度线(不显示刻度值)
374 * \~chinese \li 举例用途:比如调节音量的 DSlider,需要在 value = 100 的地方标记一个刻度,而不需要显示其他的刻度值(并且实际音量值是可以超过 100 的)
375 * \~chinese \li 其他:设置指定数值的刻度线(setMarkPositions)和设置刻度线+刻度值(setBelowTicks)是两个相互独立的,且互不干扰,若是同时使用,也会同时绘画各自的线;
376 * \~chinese 另外两个的先后顺序也并没有关系
80377 *
81 * \~english DSlider has optional vernier type handle type, scale marks that can be placed at
82 * \~english any position and corresponding scale tips.
83 *
84 * \~english DSlider also supports showing texts, value of the slider, when
85 * \~english user hovers on the slider handle.
86 *
87 * \~english \note This class relies on dstyle Qt style plugin to work properly.
88 *
89 * \~english \note This class is not working very well while orientation is set to vertical.
90 */
91
92 /*!
93 * \~chinese \class DSlider
94 * \~chinese \brief DSlider 是基于 QSlider 之上扩展的控件。
95 *
96 * \~chinese 当用户将鼠标悬停在滑块手柄上时,DSlider 还支持显示文本,滑块的值。
97 *
98 * \~chinese \note 这个类依赖于 dstyle Qt 样式插件才能正常工作。
99 *
100 * \~chinese \note 当方向设置垂直时,不能很好的工作。
101 */
102
103 /*!
104 * \~chinese \enum HandleType
105 * \~chinese \brief DSlider可以使用的句柄类型。
106 * \~chinese \var HandleType SharpHandler 箭头滑块
107 * \~chinese \var HandleType RoundHandle 圆形滑块
108 */
109
110 /*!
111 * \~english \brief DSlider::DSlider constructs an instance of DSlider.
112 * \~english \param parent is passed to QSlider constructor.
113 */
114
115 /*!
116 * \~chinese \brief DSlider 构造函数
117 * \~chinese \param parent
118 */
119 DSlider::DSlider(QWidget *parent) :
120 QSlider(parent),
121 d_ptr(new DSliderPrivate(this))
122 {
123 init();
124 }
125
126 /*!
127 * \~english \brief DSlider::DSlider constructs an instance of DSlider.
128 * \~english \param orientation is passed to QSlider constructor.
129 * \~english \param parent is passed to QSldier constructor.
130 */
131
132 /*!
133 * \~chinese \brief DSlider 的重载构造函数
134 * \~chinese \param orientation 初始化方向
135 * \~chinese \param parent
136 */
137 DSlider::DSlider(Qt::Orientation orientation, QWidget *parent) :
138 QSlider(orientation, parent),
139 d_ptr(new DSliderPrivate(this))
140 {
141 init();
142 }
143
144 DSlider::~DSlider()
145 {
146 delete d_ptr;
147 }
148
149 /*!
150 * \~english \property DSlider::handleType
151 * \~english \brief This property holds the handle type used by this slider.
152 *
153 * \~english Default value is DSlider::RoundHandle.
154 */
155
156 /*!
157 * \~chinese \property DSlider::handleType
158 * \~chinese \brief 滑块句柄类型
159 *
160 * \~chinese 默认值是 DSlider::RoundHandle.
161 */
162 int DSlider::handleType() const
163 {
164 Q_D(const DSlider);
165
166 return d->m_handleType;
167 }
168
169 /*!
170 * \~chinese \property DSlider::setHandleType
171 * \~chinese \brief 设置滑块句柄类型
172 * \~chinese \brief 根据类型来显示滑块的样式,目前有箭头、圆形样式滑块
173 */
174 void DSlider::setHandleType(HandleType handleType)
175 {
176 Q_D(DSlider);
177
178 d->m_handleType = handleType;
179 }
180
181 /*!
182 * \~chinese \property DSlider::rightTip
183 * \~chinese \brief 显示在滑块右侧的文本
184 */
185 QString DSlider::rightTip() const
186 {
187 Q_D(const DSlider);
188
189 return d->m_rightTip;
190 }
191
192 /*!
193 * \~chinese \property DSlider::setRightTip
194 * \~chinese \brief 设置滑块右侧的文本
195 */
196 void DSlider::setRightTip(const QString &rightTip)
197 {
198 Q_D(DSlider);
199
200 if (d->m_rightTip == rightTip) {
378 * \~chinese \code 示例代码
379 * \~chinese \row DSlider* slider = new DSlider(Qt::Horizontal, wTemp);
380 * \~chinese \row QStringList list1;
381 * \~chinese \row list1<<"0"<<"25"<<"50"<<"75"<<"100";
382 * \~chinese \row slider->setBelowTicks(list1);
383 * \~chinese \row QStringList list2;
384 * \~chinese \row list2<<"0"<<"25"<<"50"<<"75"<<"100"";
385 * \~chinese \row slider->setAboveTicks(list2);
386 * \~chinese \row QList<int> list3;
387 * \~chinese \row list3<<0<<30<<80;
388 * \~chinese \row slider->setMarkPositions(list3);
389 * \~chinese \row slider->setMinimum(0);
390 * \~chinese \row slider->setMaximum(100);
391 * \~chinese \endcode
392 */
393 void DSlider::setMarkPositions(QList<int> list)
394 {
395 D_D(DSlider);
396
397 if (list.isEmpty()) {
398 if (d->left) {
399 if (d->left->getScaleInfo().isEmpty()) {
400 d->left->deleteLater();
401 d->left = nullptr;
402 }
403 }
404
405 if (d->right) {
406 if (d->right->getScaleInfo().isEmpty()) {
407 d->right->deleteLater();
408 d->right = nullptr;
409 }
410 }
411
201412 return;
202413 }
203414
204 if (d->m_rightTip.isEmpty() || rightTip.isEmpty()) {
205 d->m_rightTip = rightTip;
415 if (d->left == nullptr) {
416 d->left = new SliderStrip(orientation());
417
418 if (orientation() == Qt::Horizontal) {
419 d->layout->addWidget(d->left, 0, 1, Qt::AlignTop);
420 } else {
421 d->layout->addWidget(d->left, 1, 0, Qt::AlignRight);
422 }
423 }
424
425 if (d->right == nullptr) {
426 d->right = new SliderStrip(orientation());
427
428 if (orientation() == Qt::Horizontal) {
429 d->layout->addWidget(d->right, 2, 1, Qt::AlignTop);
430 } else {
431 d->layout->addWidget(d->right, 1, 2, Qt::AlignLeft);
432 }
433 }
434
435 d->left->setMarkList(list, QSlider::TicksLeft);
436 d->right->setMarkList(list, QSlider::TicksRight);
437 }
438
439 /*!
440 * \~chinese \brief DSlider::setMouseWheelEnabled设置鼠标滚轮是否开启
441 * \~chinese \param enabled是否开启鼠标滚轮
442 */
443 void DSlider::setMouseWheelEnabled(bool enabled)
444 {
445 D_D(DSlider);
446 d->mouseWheelEnabled = enabled;
447 }
448
449 void DSliderPrivate::updtateTool(int value)
450 {
451 Q_Q(DSlider);
452
453 if (!tipvalue)
454 return;
455
456 int min = q->minimum();
457 int max = q->maximum();
458 QStyleOptionSlider opt;
459 const QRectF rectHandle = q->style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderHandle, slider); //滑块
460
461 double x = ((value - min) * 1.0 / (max -min)) * (slider->rect().width() - rectHandle.width());
462 double y = slider->y() + slider->height();
463
464 //x是以实际滑槽为起始坐标,而非DSlider为参考坐标(实际滑槽长度 == Slider长度 - 滑块长度)
465 //气泡位置
466 if (slider->invertedAppearance()) {
467 tipvalue->move(slider->width() - x - (tipvalue->width() + rectHandle.width()) / 2.0 , y);
468 } else {
469 tipvalue->move(x + (rectHandle.width() - tipvalue->width()) / 2.0, y);
470 }
471
472 int shadowMarge = DStyle::pixelMetric(q->style(), DStyle::PM_FloatingWidgetShadowMargins) - 1;
473
474 //气泡贴边
475 if (tipvalue->x() < 0) {
476 tipvalue->move(0 - shadowMarge, y);
477 }
478
479 if (tipvalue->x() + tipvalue->width() > slider->width()) {
480 tipvalue->move(slider->width() - tipvalue->width() + shadowMarge, y);
481 }
482
483 tipvalue->raise();
484 tipvalue->adjustSize();
485 }
486
487 /*!
488 * \~chinese \brief DSlider::setTipValue 此函数会创建气泡,气泡将跟随滑块移动
489 * \~chinese \param open value非空开启气泡 value空关闭气泡(销毁)
490 */
491 void DSlider::setTipValue(const QString &value)
492 {
493 D_D(DSlider);
494
495 if (d->tipvalue == nullptr) {
496 d->label = new DLabel(value);
497 d->tipvalue = new DFloatingWidget;
498 d->tipvalue->setWidget(d->label);
499 d->tipvalue->setParent(this);
500 d->label->setForegroundRole(DPalette::HighlightedText);
501 d->label->setAlignment(Qt::AlignCenter);
502 d->tipvalue->setBackgroundRole(QPalette::Highlight);
503 d->tipvalue->setFramRadius(DStyle::pixelMetric(d->label->style(), DStyle::PM_FrameRadius));
504 d->tipvalue->adjustSize();
505 d->tipvalue->show();
506 }
507
508 if (value.isEmpty()) {
509 d->tipvalue->deleteLater();
510 d->tipvalue = nullptr;
511 return;
512 }
513
514 d->label->setText(value);
515 d->updtateTool(slider()->value());
516 }
517
518 /*!
519 * \~chinese \brief DSlider::tickPosition返回滑块的记号位置
520 * \~chinese \row 获取滑块刻度当前朝向
521 * \~chinese \row \sa QSlider::TickPosition
522 * \~chinese \return
523 */
524 QSlider::TickPosition DSlider::tickPosition() const
525 {
526 D_DC(DSlider);
527
528 if (d->left && d->right) {
529 return QSlider::TicksBothSides;
530 }
531
532 if (d->left) {
533 return QSlider::TicksLeft;
534 }
535
536 if (d->right) {
537 return QSlider::TicksRight;
538 }
539
540 return QSlider::NoTicks;
541 }
542
543 QSize DSlider::sizeHint() const
544 {
545 D_DC(DSlider);
546 QSize size = QWidget::sizeHint();
547 if (d->tipvalue && d->right == nullptr)
548 size.setHeight(size.height() + d->tipvalue->height() * 2);
549 return size;
550 }
551
552 void DSlider::setHandleVisible(bool b)
553 {
554 D_D(DSlider);
555
556 if (d->handleVisible == b)
557 return;
558
559 d->handleVisible = b;
560 update();
561 }
562
563 bool DSlider::handleVisible() const
564 {
565 D_DC(DSlider);
566 return d->handleVisible;
567 }
568
569 DSliderPrivate::DSliderPrivate(DSlider *q)
570 : DObjectPrivate(q)
571 , slider(nullptr)
572 , leftIcon(nullptr)
573 , rightIcon(nullptr)
574 , left(nullptr)
575 , right(nullptr)
576 , tipvalue(nullptr)
577 , label(nullptr)
578 , handleVisible(true)
579 , mouseWheelEnabled(false)
580 {
581
582 }
583
584 void DSliderPrivate::init()
585 {
586 D_Q(DSlider);
587
588 slider = new SpecialSlider(orientation, q);
589 q->connect(slider, &QSlider::valueChanged, q, &DSlider::valueChanged);
590 q->connect(slider, &QSlider::sliderPressed, q, &DSlider::sliderPressed);
591 q->connect(slider, &QSlider::sliderMoved, q, &DSlider::sliderMoved);
592 q->connect(slider, &QSlider::sliderReleased, q, &DSlider::sliderReleased);
593 q->connect(slider, &QSlider::rangeChanged, q, &DSlider::rangeChanged);
594 q->connect(slider, &QSlider::actionTriggered, q, &DSlider::actionTriggered);
595
596 layout = new QGridLayout(q);
597
598 layout->setContentsMargins(0, 0, 0, 0);
599 layout->setSpacing(0);
600 layout->addWidget(slider, 1, 1);
601
602 if (q->orientation() == Qt::Horizontal) {
603 q->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
604 } else {
605 q->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::MinimumExpanding);
606 }
607 slider->setTickPosition(QSlider::NoTicks);
608 slider->installEventFilter(q);
609 }
610
611 QSize SliderStrip::sizeHint() const
612 {
613 QSize size = QWidget::sizeHint();
614 int fontSize = fontMetrics().height();
615
616 if (orient == Qt::Horizontal) {
617 size.setHeight(fontSize * 1.5);
618 } else {
619 int max = 0;
620
621 for (int i = 0; i < scaleInfo.count(); i++) {
622 max = qMax(max, fontMetrics().width(scaleInfo[i]));
623 }
624 size.setWidth(max + fontSize / 2);
625 }
626
627 return size;
628 }
629
630 /*!
631 * \~chines \brief SliderStrip::setScaleInfo 设置显示刻度线和刻度值
632 * \~chines \param scaleInfo 显示的刻度值
633 * \~chines \param tickPosition 显示的方向枚举值
634 */
635 void SliderStrip::setScaleInfo(QStringList scaleInfo, QSlider::TickPosition tickPosition)
636 {
637 this->scaleInfo = scaleInfo;
638 this->tick = tickPosition;
639 }
640
641 /*!
642 * \~chines \brief SliderStrip::setMarkList 设置显示刻度线(不显示刻度值)
643 * \~chines \param list 显示的刻度线的list
644 * \~chines \param tickPosition 显示的方向枚举值
645 */
646 void SliderStrip::setMarkList(QList<int> list, QSlider::TickPosition tickPosition)
647 {
648 this->list = list;
649 this->tick = tickPosition;
650 }
651
652 /*!
653 * \~chines \brief SliderStrip::getList 返回刻度线的 list
654 * \~chines \return 刻度线的 list
655 */
656 QList<int> SliderStrip::getList()
657 {
658 return this->list;
659 }
660
661 /*!
662 * \~chines \brief SliderStrip::getScaleInfo 返回刻度值的 list
663 * \~chines \return 度值的 list
664 */
665 QStringList SliderStrip::getScaleInfo()
666 {
667 return this->scaleInfo;
668 }
669
670 void SliderStrip::paintEvent(QPaintEvent *event)
671 {
672 Q_UNUSED(event)
673 QPainter pa(this);
674 auto dpa = DApplicationHelper::instance()->palette(this);
675 QPen penLine = QPen(dpa.color(DPalette::ObviousBackground), 1);
676 QPen penNumber = QPen(dpa.textTips(), 1);
677
678 int tickSize = fontMetrics().height() / 2;
679 int offsetSize = style()->pixelMetric(QStyle::PM_SliderLength, nullptr, this) / 2;
680 qreal startX = 0, startY = 0, endX = 0, endY = 0;
681 int width = this->width(), height = this->height(); //slider宽高
682 int paragraph = scaleInfo.count(); //刻度个数
683 qreal average = 0; //每一段的距离
684 qreal textPos = 0; //字体位置
685
686 QSlider* slider = static_cast<DSlider *>(this->parent())->slider();
687 for (int i = 0; i < list.count(); i++) {
688 qreal percentage = (list.at(i) - slider->minimum()) * 1.0 / (slider->maximum() - slider->minimum());
689 pa.setPen(penLine);
690
691 if (orient == Qt::Horizontal) {
692 qreal sliderX = percentage * width;
693 if (tick == QSlider::TicksAbove)
694 pa.drawLine(QPointF(sliderX + offsetSize, height), QPointF(sliderX + offsetSize, height - tickSize));
695 if (tick == QSlider::TicksBelow)
696 pa.drawLine(QPointF(sliderX + offsetSize, 0), QPointF(sliderX + offsetSize, tickSize));
697 } else {
698 qreal sliderX = percentage * height;
699 if (tick == QSlider::TicksLeft)
700 pa.drawLine(QPointF(width - tickSize, height - (sliderX + offsetSize)), QPointF(width, height - (sliderX + offsetSize)));
701 if (tick == QSlider::TicksRight)
702 pa.drawLine(QPointF(0, height - (sliderX + offsetSize)), QPointF(tickSize, height - (sliderX + offsetSize)));
703 }
704 }
705
706 if (scaleInfo.isEmpty())
707 return;
708
709 if (orient == Qt::Horizontal) {
710 width -= 2 * offsetSize;
711 startX += offsetSize;
712 endX = startX;
713 average = width / static_cast<qreal>(paragraph - 1);
714
715 if (tick == QSlider::TicksBelow) {
716 endY = tickSize;
717 textPos = endY;
718 } else if (tick == QSlider::TicksAbove) {
719 startY = height;
720 endY = startY - tickSize;
721 }
722
723 pa.setPen(penLine);
724 pa.drawLine(QPointF(startX, startY), QPointF(endX, endY));
725 pa.setPen(penNumber);
726 pa.drawText(QRectF(endX - offsetSize, textPos, width, height - tickSize), Qt::AlignLeft, scaleInfo[0]);
727
728 for (int i = 1; i < paragraph - 1; i++) {
729 startX += average;
730 endX = startX;
731 pa.setPen(penLine);
732 pa.drawLine(QPointF(startX, startY), QPointF(endX, endY));
733 pa.setPen(penNumber);
734 pa.drawText(QRectF(endX - width / 2, textPos, width, height - tickSize), Qt::AlignHCenter, scaleInfo[i]);
735 }
736
737 if (paragraph > 1) {
738 startX += average;
739 endX = startX;
740 pa.setPen(penLine);
741 pa.drawLine(QPointF(startX, startY), QPointF(endX, endY));
742 pa.setPen(penNumber);
743 pa.drawText(QRectF(endX - width + offsetSize, textPos, width, height - tickSize), Qt::AlignRight, scaleInfo[paragraph - 1]);
744 }
745 } else {
746 startY = offsetSize;
747 height -= offsetSize * 2;
748 endY = startY;
749 average = height / static_cast<qreal>(paragraph - 1);
750 Qt::Alignment text_flags = Qt::AlignVCenter;
751
752 if (tick == QSlider::TicksLeft) {
753 startX = width;
754 endX = startX - tickSize;
755 textPos = 0;
756 text_flags |= Qt::AlignRight;
757 } else if (tick == QSlider::TicksRight) {
758 endX = tickSize;
759 textPos = endX;
760 text_flags |= Qt::AlignLeft;
761 }
762
763 for (int i = 0; i < paragraph; i++) {
764 pa.setPen(penLine);
765 pa.drawLine(QPointF(startX, startY), QPointF(endX, endY));
766 pa.setPen(penNumber);
767 pa.drawText(QRectF(textPos, endY - average / 2, width - tickSize, average), text_flags, scaleInfo[i]);
768 startY += average;
769 endY = startY;
770 }
771 }
772 }
773
774 bool SliderStrip::event(QEvent *e)
775 {
776 if (e->type() == QEvent::FontChange || e->type() == QEvent::ApplicationFontChange) {
206777 updateGeometry();
207 } else {
208 d->m_rightTip = rightTip;
209 }
210
211 repaint();
212 }
213
214 /*!
215 * \~english \property DSlider::leftTip
216 * \~english \brief This property holds the text to be display on the left side of the slider.
217 *
218 * \~english DSlider::leftTip and DSlider::rightTip are used to help the user understand
219 * \~english how the slider works, for example: leftTip set to Low and rightTip set to High
220 * \~english tells the user that drag the handle to left lower the value and vice versa.
221 */
222
223 /*!
224 * \~chinese \property DSlider::leftTip
225 * \~chinese \brief 显示在滑块左侧的文本
226 */
227 QString DSlider::leftTip() const
228 {
229 Q_D(const DSlider);
230
231 return d->m_leftTip;
232 }
233
234 /*!
235 * \~chinese \property DSlider::setLeftTip
236 * \~chinese \brief 设置滑块左侧的文本
237 */
238 void DSlider::setLeftTip(const QString &leftTip)
239 {
240 Q_D(DSlider);
241
242 if (d->m_leftTip == leftTip) {
243 return;
244 }
245
246 if (d->m_leftTip.isEmpty() || leftTip.isEmpty()) {
247 d->m_leftTip = leftTip;
248 updateGeometry();
249 } else {
250 d->m_leftTip = leftTip;
251 }
252
253 repaint();
254 }
255
256 /*!
257 * \~english \property DSlider::scaleColor
258 * \~english \brief This property holds the color to paint the scale marks.
259 */
260
261 /*!
262 * \~chinese \property DSlider::scaleColor
263 * \~chinese \brief 刻度线颜色
264 */
265 QColor DSlider::scaleColor() const
266 {
267 Q_D(const DSlider);
268
269 return d->m_scaleColor;
270 }
271
272 /*!
273 * \~chinese \property DSlider::setScaleColor
274 * \~chinese \brief 设置刻度线颜色
275 */
276 void DSlider::setScaleColor(const QColor &scaleColor)
277 {
278 Q_D(DSlider);
279
280 d->m_scaleColor = scaleColor;
281
282 repaint();
283 }
284
285 /*!
286 * \~english \property DSlider::tipColor
287 * \~english \brief This property holds the color to paint the scale tips.
288 */
289
290 /*!
291 * \~chinese \property DSlider::tipColor
292 * \~chinese \brief 用于绘制刻度提示的颜色。
293 */
294 QColor DSlider::tipColor() const
295 {
296 Q_D(const DSlider);
297
298 return d->m_tipColor;
299 }
300
301 /*!
302 * \~chinese \property DSlider::setTipColor
303 * \~chinese \brief 设置绘制刻度提示的颜色。
304 */
305 void DSlider::setTipColor(const QColor &tipColor)
306 {
307 Q_D(DSlider);
308
309 d->m_tipColor = tipColor;
310
311 repaint();
312 }
313
314 /*!
315 * \~english \brief DSlider::addScale adds a scale mark on the slider.
316 * \~english \param value is the position that the scale mark to be added.
317 *
318 * \~english The scale added can be removed using DSlider::removeScale passing the
319 * \~english value as the parameter.
320 */
321
322 /*!
323 * \~chinese \brief DSlider::addScale 在滑块上添加刻度标记
324 * \~chinese \param value 要添加刻度标记的位置
325 *
326 * \~chinese 可以使用 DSlider::removeScale 将标记的位置值传入,删除相关的刻度标记。
327 */
328 void DSlider::addScale(int value)
329 {
330 Q_D(DSlider);
331
332 d->m_scales.append(value);
333
334 if (d->m_scales.count() == 1) {
335 updateGeometry();
336 }
337
338 repaint();
339 }
340
341 /*!
342 * \~english \brief DSlider::removeScale removes a scale mark on the slider.
343 * \~english \param value is the value used to add the scale mark.
344 */
345
346 /*!
347 * \~chinese \brief DSlider::removeScale 删除滑块上的刻度标记。
348 * \~chinese \param value 要删除刻度标记的位置值
349 */
350 void DSlider::removeScale(int value)
351 {
352 Q_D(DSlider);
353
354 d->m_scales.removeOne(value);
355
356 if (d->m_scales.isEmpty()) {
357 updateGeometry();
358 }
359
360 repaint();
361 }
362
363 void DSlider::mousePressEvent(QMouseEvent *event)
364 {
365 QAbstractSlider::mousePressEvent(event);
366
367 if (event->button() == Qt::LeftButton) {
368 if (orientation() == Qt::Vertical) {
369 setValue(minimum() + ((maximum() - minimum()) * (height() - event->y())) / height()) ;
370 } else {
371 // FIXME
372 // the value 10 is specified in DSlider.theme, it's ugly here, but I don't have any
373 // good idea for now, maybe someone can help.
374 setValue(minimum() + ((maximum() - minimum()) * (event->x() - 10)) / (width() - 10 - 10)) ;
375 }
376
377 event->accept();
378
379 Q_D(DSlider);
380
381 QStyleOptionSlider opt;
382 initStyleOption(&opt);
383 setRepeatAction(SliderNoAction);
384 QRect sr = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderHandle, this);
385
386 d->clickOffset = d->pick(event->pos() - sr.topLeft());
387 d->mousePressed = true;
388
389 Q_EMIT sliderPressed();
390 }
391 }
392
393 void DSlider::mouseReleaseEvent(QMouseEvent *event)
394 {
395 QAbstractSlider::mouseReleaseEvent(event);
396
397 if(event->button() == Qt::LeftButton) {
398 d_func()->mousePressed = false;
399
400 Q_EMIT sliderReleased();
401 }
402 }
403
404 void DSlider::paintEvent(QPaintEvent *event)
405 {
406 Q_D(DSlider);
407
408 QPainter painter;
409 painter.begin(this);
410
411 // draw tips
412 QFont font = painter.font();
413 font.setPixelSize(12);
414 painter.setFont(font);
415
416 QPen pen = painter.pen();
417 pen.setColor(d->m_tipColor);
418 painter.setPen(pen);
419
420 QRect tmp = rect().adjusted(CustomDrawingLeftPadding - 5, 0, -CustomDrawingRightPadding + 5, 0);
421
422 QTextOption leftBottomOption;
423 leftBottomOption.setAlignment(Qt::AlignLeft | Qt::AlignBottom);
424 painter.drawText(tmp, d->m_leftTip, leftBottomOption);
425
426 QTextOption rightBottomOption;
427 rightBottomOption.setAlignment(Qt::AlignRight | Qt::AlignBottom);
428 painter.drawText(tmp, d->m_rightTip, rightBottomOption);
429
430 // draw scales
431 pen.setColor(d->m_scaleColor);
432 painter.setPen(pen);
433
434 Q_FOREACH(int scale, d->m_scales) {
435 int x = d->getScalePosition(scale);
436 int y = height() - 8;
437 painter.drawLine(x, y, x, y - CustomDrawingScaleHeight);
438 }
439
440 if (d->m_handleHovering && !d->m_hoverTimout) {
441 QString str = QString::number(value());
442 int x = d->getScalePosition(value()) - painter.fontMetrics().width(str) / 2.0;
443 painter.setPen(d->m_hoverValueColor);
444 painter.drawText(x, 10, str);
445 }
446
447 painter.end();
448
449 QSlider::paintEvent(event);
450 }
451
452 void DSlider::mouseMoveEvent(QMouseEvent *event)
453 {
454 Q_D(DSlider);
455
456 if(d->mousePressed) {
457 int newPosition = d->pixelPosToRangeValue(d->pick(event->pos()) - d->clickOffset);
458 setSliderPosition(newPosition);
459
460 Q_EMIT sliderMoved(newPosition);
461 }
462
463 if (!d->m_hoverShowValue) {
464 return;
465 }
466
467 QPoint pos = event->pos();
468 QRect rect(d->getScalePosition(value()) - CustomDrawingLeftPadding, 10, 20, 20);
469 if (d->m_handleHovering) {
470 d->m_handleHovering = rect.contains(pos);
471 } else {
472 d->m_handleHovering = rect.contains(pos);
473 if (d->m_handleHovering) {
474 d->m_hoverTimout = false;
475 if (d->m_hoverShowValueInterval > 0) {
476 d->m_hoverTimer.start(d->m_hoverShowValueInterval);
477 }
478 }
479 }
480
481 update();
482 }
483
484 void DSlider::hoverTimout()
485 {
486 Q_D(DSlider);
487
488 d->m_hoverTimout = true;
489 update();
490 }
491
492 void DSlider::init()
493 {
494 Q_D(DSlider);
495
496 DThemeManager::registerWidget(this);
497
498 setMouseTracking(true);
499 connect(&d->m_hoverTimer, &QTimer::timeout, this, &DSlider::hoverTimout);
500 }
501
502 QSize DSlider::sizeHint() const
503 {
504 Q_D(const DSlider);
505
506 QSize size = QSlider::sizeHint();
507 if (!d->m_leftTip.isEmpty() || !d->m_rightTip.isEmpty() || !d->m_scales.isEmpty()) {
508 size.setHeight(size.height() + 25);
509 } else {
510 if (d->m_hoverShowValue) {
511 size.setHeight(size.height() + 25);
512 } else {
513 size.setHeight(size.height() + 3);
514 }
515 }
516
517 return size;
518 }
519
520 /*!
521 * \~english \property DSlider::hoverShowValue
522 * \~english \brief This property holds whether the value should be displayed when user
523 * \~english hovers on the slider handle.
524 */
525
526 /*!
527 * \~chinese \property DSlider::hoverShowValue
528 * \~chinese \brief 是否显示鼠标悬停在滑块上的值。
529 * \~chinese \brief 这个属性保存着当用户鼠标悬停在滑块时是否显示该值。
530 */
531 bool DSlider::hoverShowValue() const
532 {
533 Q_D(const DSlider);
534
535 return d->m_hoverShowValue;
536 }
537
538 /*!
539 * \~english \property DSlider::hoverValueColor
540 * \~english \brief This property holds the color to be used to display the texts.
541 */
542
543 /*!
544 * \~chinese \property DSlider::hoverValueColor
545 * \~chinese \brief 鼠标悬停在滑块上提示文本的颜色。
546 */
547 QColor DSlider::hoverValueColor() const
548 {
549 Q_D(const DSlider);
550
551 return d->m_hoverValueColor;
552 }
553
554 /*!
555 * \~english \property DSlider::hoverShowValueInterval
556 * \~english \brief This property holds the interval of how long the value will be displayed
557 * \~english if the user keeps hovering on the slider handle.
558 */
559
560 /*!
561 * \~chinese \property DSlider::hoverShowValueInterval
562 * \~chinese \brief 鼠标悬停在滑块显示值的时间间隔。
563 */
564 int DSlider::hoverShowValueInterval() const
565 {
566 Q_D(const DSlider);
567
568 return d->m_hoverShowValueInterval;
569 }
570
571 /*!
572 * \~chinese \property DSlider::setHoverShowValue
573 * \~chinese \brief 设置显示值的时间间隔。
574 */
575 void DSlider::setHoverShowValue(bool hoverShowValue)
576 {
577 Q_D(DSlider);
578
579 if (d->m_hoverShowValue == hoverShowValue) {
580 return;
581 }
582
583 d->m_hoverShowValue = hoverShowValue;
584 d->m_handleHovering &= hoverShowValue;
585
586 updateGeometry();
587 repaint();
588 }
589
590 /*!
591 * \~chinese \property DSlider::setHoverValueColor
592 * \~chinese \brief 设置鼠标悬停在滑块上提示文本的颜色。
593 */
594 void DSlider::setHoverValueColor(QColor hoverValueColor)
595 {
596 Q_D(DSlider);
597
598 d->m_hoverValueColor = hoverValueColor;
599 }
600
601 /*!
602 * \~chinese \property DSlider::setHoverShowValueInterval
603 * \~chinese \brief 设置悬停显示值的时间间隔。
604 */
605 void DSlider::setHoverShowValueInterval(int hoverShowValueInterval)
606 {
607 Q_D(DSlider);
608
609 d->m_hoverShowValueInterval = hoverShowValueInterval;
610 }
611
612 DSlider::DSlider(DSliderPrivate &d): d_ptr(&d)
613 {
614 init();
615 }
616
617 int DSliderPrivate::getScalePosition(int value)
618 {
619 Q_Q(DSlider);
620
621 float valueRange = q->maximum() - q->minimum();
622 float posRange = q->width() - CustomDrawingLeftPadding - CustomDrawingRightPadding;
623 return CustomDrawingLeftPadding + (value - q->minimum()) * posRange / valueRange;
624 }
625
626 int DSliderPrivate::pixelPosToRangeValue(int pos) const
627 {
628 Q_Q(const DSlider);
629
630 QStyleOptionSlider opt;
631 q->initStyleOption(&opt);
632 QRect gr = q->style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderGroove, q);
633 QRect sr = q->style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderHandle, q);
634 int sliderMin, sliderMax, sliderLength;
635
636 if (q->orientation() == Qt::Horizontal) {
637 sliderLength = sr.width();
638 sliderMin = gr.x();
639 sliderMax = gr.right() - sliderLength + 1;
640 } else {
641 sliderLength = sr.height();
642 sliderMin = gr.y();
643 sliderMax = gr.bottom() - sliderLength + 1;
644 }
645 return QStyle::sliderValueFromPosition(q->minimum(), q->maximum(), pos - sliderMin,
646 sliderMax - sliderMin, opt.upsideDown);
778 }
779
780 return QWidget::event(e);
647781 }
648782
649783 DWIDGET_END_NAMESPACE
00 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
1 * Copyright (C) 2011 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: wp <wangpeng_cm@deepin.com>
4 *
5 * Maintainer: wp <wangpeng_cm@deepin.com>
26 *
37 * This program is free software: you can redistribute it and/or modify
48 * it under the terms of the GNU General Public License as published by
1721 #ifndef DSLIDER_H
1822 #define DSLIDER_H
1923
24 #include <QWidget>
2025 #include <QSlider>
26 #include <QStyleOption>
27 #include <QPainter>
2128
22 #include "dtkwidget_global.h"
29 #include <dtkwidget_global.h>
30 #include <dobject.h>
2331
2432 DWIDGET_BEGIN_NAMESPACE
2533
2634 class DSliderPrivate;
27 class LIBDTKWIDGETSHARED_EXPORT DSlider : public QSlider
35 class LIBDTKWIDGETSHARED_EXPORT DSlider : public QWidget, public DTK_CORE_NAMESPACE::DObject
2836 {
2937 Q_OBJECT
30 Q_PROPERTY(int handleType READ handleType)
31 Q_PROPERTY(QColor tipColor READ tipColor WRITE setTipColor)
32 Q_PROPERTY(QColor scaleColor READ scaleColor WRITE setScaleColor)
33 Q_PROPERTY(bool hoverShowValue READ hoverShowValue WRITE setHoverShowValue)
34 Q_PROPERTY(QColor hoverValueColor READ hoverValueColor WRITE setHoverValueColor)
35 Q_PROPERTY(int hoverShowValueInterval READ hoverShowValueInterval WRITE setHoverShowValueInterval)
38 Q_DISABLE_COPY(DSlider)
39 D_DECLARE_PRIVATE(DSlider)
40 public:
41 DSlider(Qt::Orientation orientation = Qt::Horizontal, QWidget *parent = nullptr);
3642
37 public:
38 enum HandleType {
39 SharpHandler,
40 RoundHandle
41 };
43 Qt::Orientation orientation() const;
4244
43 DSlider(QWidget *parent = 0);
44 DSlider(Qt::Orientation orientation, QWidget *parent = 0);
45 ~DSlider();
45 QSlider *slider();
4646
47 int handleType() const;
48 void setHandleType(HandleType handleType);
47 void setLeftIcon(const QIcon &left);
48 void setRightIcon(const QIcon &right);
4949
50 QString leftTip() const;
51 void setLeftTip(const QString &leftTip);
50 void setIconSize(const QSize &size);
5251
53 QString rightTip() const;
54 void setRightTip(const QString &rightTip);
52 void setMinimum(int min);
53 int minimum() const;
5554
56 QColor tipColor() const;
57 void setTipColor(const QColor &tipColor);
55 void setValue(int value);
56 int value() const;
5857
59 QColor scaleColor() const;
60 void setScaleColor(const QColor &scaleColor);
58 void setPageStep(int pageStep);
59 int pageStep() const;
6160
62 void addScale(int value);
63 void removeScale(int value);
61 void setMaximum(int max);
62 int maximum() const;
6463
65 bool hoverShowValue() const;
66 QColor hoverValueColor() const;
67 int hoverShowValueInterval() const;
64 void setLeftTicks(const QStringList &info);
65 void setRightTicks(const QStringList &info);
6866
69 public Q_SLOTS:
70 void setHoverShowValue(bool hoverShowValue);
71 void setHoverValueColor(QColor hoverValueColor);
72 void setHoverShowValueInterval(int hoverShowValueInterval);
67 void setAboveTicks(const QStringList &info);
68 void setBelowTicks(const QStringList &info);
69
70 void setMarkPositions(QList<int> list);
71
72 void setMouseWheelEnabled(bool enabled);
73
74 void setTipValue(const QString &value);
75
76 QSlider::TickPosition tickPosition() const;
77 QSize sizeHint() const override;
78
79 void setHandleVisible(bool b);
80 bool handleVisible() const;
81
82 Q_SIGNALS:
83 void valueChanged(int value);
84
85 void sliderPressed();
86 void sliderMoved(int position);
87 void sliderReleased();
88
89 void rangeChanged(int min, int max);
90
91 void actionTriggered(int action);
7392
7493 protected:
75 DSlider(DSliderPrivate &d);
76 void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
77 void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
78 void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
79 void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
80 QSize sizeHint() const Q_DECL_OVERRIDE;
94 DSlider(DSliderPrivate &q, QWidget *parent);
8195
82 private Q_SLOTS:
83 void hoverTimout();
96 bool event(QEvent *event) override;
97 bool eventFilter(QObject *watched, QEvent *event) override;
98 };
8499
85 private:
86 DSliderPrivate *d_ptr;
100 class SpecialSlider : public QSlider {
101 public:
102 SpecialSlider(Qt::Orientation orientation, QWidget *parent = nullptr) : QSlider(orientation, parent) {
103 }
87104
88 void init();
105 void paintEvent(QPaintEvent *ev) {
106 Q_UNUSED(ev)
107 QPainter p(this);
108 QStyleOptionSlider opt;
109 initStyleOption(&opt);
89110
90 Q_DECLARE_PRIVATE(DSlider)
91 Q_DISABLE_COPY(DSlider)
111 DSlider* dSlider = qobject_cast<DSlider *>(this->parent());
112
113 if (!dSlider)
114 return;
115
116 if (dSlider->handleVisible())
117 opt.subControls = QStyle::SC_SliderGroove | QStyle::SC_SliderHandle;
118 else
119 opt.subControls = QStyle::SC_SliderGroove;
120
121 style()->drawComplexControl(QStyle::CC_Slider, &opt, &p, this);
122 }
92123 };
93124
94125 DWIDGET_END_NAMESPACE
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1515 */
1616
17 #include <QResizeEvent>
18 #include <QHBoxLayout>
1917 #include <QDebug>
2018
2119 #include "dspinbox.h"
22 #include "dthememanager.h"
20 #include "private/dspinbox_p.h"
2321 #include "dlineedit.h"
24 #include "private/dspinbox_p.h"
25 #include "dimagebutton.h"
2622
2723 DWIDGET_BEGIN_NAMESPACE
28
29 DImageButton* DSpinBox_getButton(const QString &image_name)
30 {
31 const QString str = ":/images/" + DThemeManager::instance()->theme() + "/images/" + image_name;
32
33 DImageButton *button = new DImageButton(str + "_normal.png", str + "_hover.png", str + "_press.png");
34
35 button->setObjectName("SpinBox_ImageButton");
36
37 return button;
38 }
3924
4025 DSpinBoxPrivate::DSpinBoxPrivate(DSpinBox *parent) :
4126 DObjectPrivate(parent)
4732 {
4833 D_Q(DSpinBox);
4934
50 insideFrame = new QFrame(q);
51 insideFrame->setObjectName("SpinBoxInsideFrame");
52
53 QHBoxLayout *h_layout = new QHBoxLayout(insideFrame);
54
55 DImageButton *button_reset = DSpinBox_getButton("restore");
56 DImageButton *button_add = DSpinBox_getButton("spinner_increase");
57 DImageButton *button_sub = DSpinBox_getButton("spinner_decrease");
58
59 h_layout->setMargin(0);
60 h_layout->setSpacing(0);
61 h_layout->addStretch();
62 h_layout->addWidget(button_reset);
63 h_layout->addWidget(button_add);
64 h_layout->addWidget(button_sub);
65
66 q->connect(button_reset, &DImageButton::clicked, q, [q, this] {
67 if(defaultValue <= q->maximum() && defaultValue >= q->minimum())
68 q->setValue(defaultValue);
69 else
70 q->setValue(q->minimum());
71 });
72 q->connect(button_add, &DImageButton::clicked, q, &DSpinBox::stepUp);
73 q->connect(button_sub, &DImageButton::clicked, q, &DSpinBox::stepDown);
74 }
75
76 void DSpinBoxPrivate::_q_resizeInsideFrame(const QSize &size)
77 {
78 insideFrame->setFixedWidth(size.width());
79 insideFrame->setFixedHeight(size.height() - 1);
35 lineEdit = new DLineEdit(q);
36 q->setLineEdit(lineEdit->lineEdit());
37 q->connect(lineEdit, &DLineEdit::alertChanged, q, &DSpinBox::alertChanged);
8038 }
8139
8240 /*!
12684 QSpinBox(parent),
12785 DObject(*new DSpinBoxPrivate(this))
12886 {
129 DThemeManager::registerWidget(this, QStringList({"alert"}));
130
13187 d_func()->init();
13288 }
13389
160116 {
161117 D_DC(DSpinBox);
162118
163 return d->alert;
119 return d->lineEdit->isAlert();
164120 }
165121
166122 /*!
176132 */
177133 int DSpinBox::defaultValue() const
178134 {
179 return d_func()->defaultValue;
135 return 0;
136 }
137
138 void DSpinBox::setEnabledEmbedStyle(bool enabled)
139 {
140 setProperty("_d_dtk_spinBox", enabled);
180141 }
181142
182143 void DSpinBox::setAlert(bool alert)
183144 {
184145 D_D(DSpinBox);
185146
186 if(alert == d->alert)
187 return;
188
189 d->alert = alert;
190
191 Q_EMIT alertChanged(alert);
147 d->lineEdit->setAlert(alert);
192148 }
193149
194150 void DSpinBox::setDefaultValue(int defaultValue)
195151 {
196 D_D(DSpinBox);
197
198 if (d->defaultValue == defaultValue)
199 return;
200
201 d->defaultValue = defaultValue;
202
203 Q_EMIT defaultValueChanged(defaultValue);
204 }
205
206 /** \reimp */
207 void DSpinBox::resizeEvent(QResizeEvent *e)
208 {
209 QSpinBox::resizeEvent(e);
210
211 d_func()->_q_resizeInsideFrame(e->size());
152 Q_UNUSED(defaultValue)
212153 }
213154
214155 DDoubleSpinBoxPrivate::DDoubleSpinBoxPrivate(DDoubleSpinBox *parent) :
221162 {
222163 D_Q(DDoubleSpinBox);
223164
224 insideFrame = new QFrame(q);
225 insideFrame->setObjectName("SpinBoxInsideFrame");
226
227 QHBoxLayout *h_layout = new QHBoxLayout(insideFrame);
228
229 DImageButton *button_reset = DSpinBox_getButton("restore");
230 DImageButton *button_add = DSpinBox_getButton("spinner_increase");
231 DImageButton *button_sub = DSpinBox_getButton("spinner_decrease");
232
233 h_layout->setMargin(0);
234 h_layout->setSpacing(0);
235 h_layout->addStretch();
236 h_layout->addWidget(button_reset);
237 h_layout->addWidget(button_add);
238 h_layout->addWidget(button_sub);
239
240 q->connect(button_reset, &DImageButton::clicked, q, [q, this] {
241 if(defaultValue < q->maximum() && defaultValue > q->minimum())
242 q->setValue(defaultValue);
243 else
244 q->setValue(q->minimum());
245 });
246 q->connect(button_add, &DImageButton::clicked, q, &DSpinBox::stepUp);
247 q->connect(button_sub, &DImageButton::clicked, q, &DSpinBox::stepDown);
248 }
249
250 void DDoubleSpinBoxPrivate::_q_resizeInsideFrame(const QSize &size)
251 {
252 insideFrame->setFixedWidth(size.width());
253 insideFrame->setFixedHeight(size.height() - 1);
254 }
255
256
165 lineEdit = new DLineEdit(q);
166 q->setLineEdit(lineEdit->lineEdit());
167 q->connect(lineEdit, &DLineEdit::alertChanged, q, &DDoubleSpinBox::alertChanged);
168 }
257169
258170 /*!
259171 * \~chinese \class DDoubleSpinBox
264176 QDoubleSpinBox(parent),
265177 DObject(*new DDoubleSpinBoxPrivate(this))
266178 {
267 DThemeManager::registerWidget(this, QStringList({"alert"}));
268
269179 d_func()->init();
270180 }
271181
273183 {
274184 D_DC(DDoubleSpinBox);
275185
276 return d->alert;
186 return d->lineEdit->isAlert();
277187 }
278188
279189 double DDoubleSpinBox::defaultValue() const
280190 {
281 return d_func()->defaultValue;
191 return 0;
282192 }
283193
284194 void DDoubleSpinBox::setAlert(bool alert)
285195 {
286196 D_D(DDoubleSpinBox);
287197
288 if(alert == d->alert)
289 return;
290
291 d->alert = alert;
292
293 Q_EMIT alertChanged(alert);
198 d->lineEdit->setAlert(alert);
294199 }
295200
296201 void DDoubleSpinBox::setDefaultValue(double defaultValue)
297202 {
298 D_D(DDoubleSpinBox);
299
300 if (d->defaultValue == defaultValue)
301 return;
302
303 d->defaultValue = defaultValue;
304
305 Q_EMIT defaultValueChanged(defaultValue);
306 }
307
308 void DDoubleSpinBox::resizeEvent(QResizeEvent *e)
309 {
310 QDoubleSpinBox::resizeEvent(e);
311
312 d_func()->_q_resizeInsideFrame(e->size());
203 Q_UNUSED(defaultValue)
313204 }
314205
315206 DWIDGET_END_NAMESPACE
1717 #ifndef DSPINBOX_H
1818 #define DSPINBOX_H
1919
20 #include <dtkwidget_global.h>
21 #include <DObject>
22
2023 #include <QSpinBox>
21
22 #include "dtkwidget_global.h"
23 #include "dobject.h"
2424
2525 DWIDGET_BEGIN_NAMESPACE
2626
3838 QLineEdit *lineEdit() const;
3939
4040 bool isAlert() const;
41 int defaultValue() const;
41 D_DECL_DEPRECATED int defaultValue() const;
42
43 void setEnabledEmbedStyle(bool enabled);
4244
4345 public Q_SLOTS:
4446 void setAlert(bool alert);
45 void setDefaultValue(int defaultValue);
47 D_DECL_DEPRECATED void setDefaultValue(int defaultValue);
4648
4749 Q_SIGNALS:
4850 void alertChanged(bool alert);
49 void defaultValueChanged(int defaultValue);
50
51 protected:
52 void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE;
51 D_DECL_DEPRECATED void defaultValueChanged(int defaultValue);
5352
5453 private:
5554 D_DECLARE_PRIVATE(DSpinBox)
6766 explicit DDoubleSpinBox(QWidget *parent = 0);
6867
6968 bool isAlert() const;
70 double defaultValue() const;
69 D_DECL_DEPRECATED double defaultValue() const;
7170
7271 public Q_SLOTS:
7372 void setAlert(bool alert);
74 void setDefaultValue(double defaultValue);
73 D_DECL_DEPRECATED void setDefaultValue(double defaultValue);
7574
7675 Q_SIGNALS:
7776 void alertChanged(bool alert);
78 void defaultValueChanged(double defaultValue);
79
80 protected:
81 void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE;
77 D_DECL_DEPRECATED void defaultValueChanged(double defaultValue);
8278
8379 private:
8480 D_DECLARE_PRIVATE(DDoubleSpinBox)
85 double m_defaultValue;
8681 };
8782
8883 DWIDGET_END_NAMESPACE
22 #include <QtMath>
33 #include <QPainter>
44 #include <QTimer>
5 #include <QEvent>
56
67 #include <DObjectPrivate>
78
6061 QWidget(parent), DObject(*new DSpinnerPrivate(this))
6162 {
6263 Q_D(DSpinner);
63
64 d->indicatorColors << d->createDefaultIndicatorColorList(QColor(200, 46, 255));
65 d->indicatorColors << d->createDefaultIndicatorColorList(QColor(207, 225, 0));
66 d->indicatorColors << d->createDefaultIndicatorColorList(QColor(0, 255, 241));
6764
6865 d->refreshTimer.setInterval(30);
6966
125122 {
126123 Q_D(DSpinner);
127124
125 if (d->indicatorColors.isEmpty()) {
126 for (int i = 0; i < 3; ++i)
127 d->indicatorColors << d->createDefaultIndicatorColorList(palette().highlight().color());
128 }
129
128130 QPainter painter(this);
129131 painter.setRenderHints(QPainter::Antialiasing);
130132
155157 }
156158 }
157159
160 void DSpinner::changeEvent(QEvent *e)
161 {
162 Q_D(DSpinner);
163
164 if (e->type() == QEvent::PaletteChange)
165 d->indicatorColors.clear();
166
167 QWidget::changeEvent(e);
168 }
169
158170 QList<QColor> DSpinnerPrivate::createDefaultIndicatorColorList(QColor color)
159171 {
160172 QList<QColor> colors;
2626
2727 protected:
2828 void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
29 void changeEvent(QEvent *e) override;
2930
3031 private:
3132 D_DECLARE_PRIVATE(DSpinner)
182182 QWidget(parent),
183183 DObject(*new DStackWidgetPrivate(this))
184184 {
185 DThemeManager::registerWidget(this);
186
187185 d_func()->init();
188186 }
189187
470468 QWidget(parent),
471469 DObject(dd)
472470 {
473 DThemeManager::registerWidget(this);
474
475471 d_func()->init();
476472 }
477473
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #include "dstyle.h"
21 #include "dstyleoption.h"
22
23 #include <DGuiApplicationHelper>
24
25 #include <QStyleOption>
26 #include <QTextLayout>
27 #include <QTextLine>
28 #include <QPixmapCache>
29 #include <QGuiApplication>
30 #include <QAbstractItemView>
31
32 #include <qmath.h>
33 #include <private/qfixed_p.h>
34 #include <private/qtextengine_p.h>
35 #include <private/qicon_p.h>
36
37 #include <math.h>
38
39 QT_BEGIN_NAMESPACE
40 //extern Q_WIDGETS_EXPORT void qt_blurImage(QImage &blurImage, qreal radius, bool quality, int transposed = 0);
41 extern Q_WIDGETS_EXPORT void qt_blurImage(QPainter *p, QImage &blurImage, qreal radius, bool quality, bool alphaOnly, int transposed = 0);
42 QT_END_NAMESPACE
43
44 DGUI_USE_NAMESPACE
45 DWIDGET_BEGIN_NAMESPACE
46
47 static Qt::TextFormat textFormat = Qt::TextFormat::AutoText;
48
49 /*!
50 * \~chinese \brief DStyle::adjustColor调整颜色
51 * \~chinese \sa DGuiApplicationHelper::adjustColor()
52 */
53 QColor DStyle::adjustColor(const QColor &base,
54 qint8 hueFloat, qint8 saturationFloat, qint8 lightnessFloat,
55 qint8 redFloat, qint8 greenFloat, qint8 blueFloat, qint8 alphaFloat)
56 {
57 return DGuiApplicationHelper::adjustColor(base, hueFloat, saturationFloat, lightnessFloat, redFloat, greenFloat, blueFloat, alphaFloat);
58 }
59
60 /*!
61 * \~chinese \brief DStyle::blendColor混合颜色
62 * \~chinese \sa DGuiApplicationHelper::blendColor()
63 */
64 QColor DStyle::blendColor(const QColor &substrate, const QColor &superstratum)
65 {
66 return DGuiApplicationHelper::blendColor(substrate, superstratum);
67 }
68
69 /*!
70 * \~chinese \brief DStyle::toIconModeState 根据option中的QStyle::State返回图标应有
71 * \~chinese 的模式和状态
72 */
73 QPair<QIcon::Mode, QIcon::State> DStyle::toIconModeState(const QStyleOption *option)
74 {
75 QIcon::Mode mode = QIcon::Normal;
76 QIcon::State state = option->state & State_On ? QIcon::On : QIcon::Off;
77
78 if (option->state & QStyle::State_Enabled) {
79 if (option->state & (State_Sunken | State_Selected)) {
80 mode = QIcon::Selected;
81 } else if (option->state & State_MouseOver) {
82 mode = QIcon::Active;
83 }
84 } else {
85 mode = QIcon::Disabled;
86 }
87
88 return qMakePair(mode, state);
89 }
90
91 /*!
92 * \~chinese \brief DStyle::setTooltipTextFormat 设置 tooltip 文本格式
93 * \~chinese \sa Qt::TextFormat
94 */
95 void DStyle::setTooltipTextFormat(Qt::TextFormat format)
96 {
97 textFormat = format;
98 }
99 /*!
100 * \~chinese \brief DStyle::tooltipTextFormat 获取 tooltip 文本格式
101 * \~chinese \sa Qt::TextFormat
102 */
103 Qt::TextFormat DStyle::tooltipTextFormat()
104 {
105 return textFormat;
106 }
107
108 void DStyle::setFocusRectVisible(QWidget *widget, bool visible)
109 {
110 widget->setProperty("_d_dtk_noFocusRect", !visible);
111 }
112
113 void DStyle::setFrameRadius(QWidget *widget, int radius)
114 {
115 widget->setProperty("_d_dtk_frameRadius", radius);
116 }
117
118 namespace DDrawUtils {
119 static QImage dropShadow(const QPixmap &px, qreal radius, const QColor &color)
120 {
121 if (px.isNull())
122 return QImage();
123
124 QImage tmp(px.size() + QSize(radius * 2, radius * 2), QImage::Format_ARGB32_Premultiplied);
125 tmp.fill(0);
126 QPainter tmpPainter(&tmp);
127 tmpPainter.setCompositionMode(QPainter::CompositionMode_Source);
128 tmpPainter.drawPixmap(QPoint(radius, radius), px);
129 tmpPainter.end();
130
131 // blur the alpha channel
132 QImage blurred(tmp.size(), QImage::Format_ARGB32_Premultiplied);
133 blurred.fill(0);
134 QPainter blurPainter(&blurred);
135 qt_blurImage(&blurPainter, tmp, radius, false, true);
136 blurPainter.end();
137
138 if (color == QColor(Qt::black))
139 return blurred;
140
141 tmp = blurred;
142
143 // blacken the image...
144 tmpPainter.begin(&tmp);
145 tmpPainter.setCompositionMode(QPainter::CompositionMode_SourceIn);
146 tmpPainter.fillRect(tmp.rect(), color);
147 tmpPainter.end();
148
149 return tmp;
150 }
151
152 static QList<QRect> sudokuByRect(const QRect &rect, QMargins borders)
153 {
154 QList<QRect> list;
155
156 // qreal border_width = borders.left() + borders.right();
157
158 // if ( border_width > rect.width()) {
159 // borders.setLeft(borders.left() / border_width * rect.width());
160 // borders.setRight(rect.width() - borders.left());
161 // }
162
163 // qreal border_height = borders.top() + borders.bottom();
164
165 // if (border_height > rect.height()) {
166 // borders.setTop(borders.top()/ border_height * rect.height());
167 // borders.setBottom(rect.height() - borders.top());
168 // }
169
170 const QRect &contentsRect = rect - borders;
171
172 list << QRect(0, 0, borders.left(), borders.top());
173 list << QRect(list.at(0).topRight(), QSize(contentsRect.width(), borders.top())).translated(1, 0);
174 list << QRect(list.at(1).topRight(), QSize(borders.right(), borders.top())).translated(1, 0);
175 list << QRect(list.at(0).bottomLeft(), QSize(borders.left(), contentsRect.height())).translated(0, 1);
176 list << contentsRect;
177 list << QRect(contentsRect.topRight(), QSize(borders.right(), contentsRect.height())).translated(1, 0);
178 list << QRect(list.at(3).bottomLeft(), QSize(borders.left(), borders.bottom())).translated(0, 1);
179 list << QRect(contentsRect.bottomLeft(), QSize(contentsRect.width(), borders.bottom())).translated(0, 1);
180 list << QRect(contentsRect.bottomRight(), QSize(borders.left(), borders.bottom())).translated(1, 1);
181
182 return list;
183 }
184
185 static QImage borderImage(const QPixmap &px, const QMargins &borders, const QSize &size, QImage::Format format)
186 {
187 QImage image(size, format);
188 QPainter pa(&image);
189
190 const QList<QRect> sudoku_src = sudokuByRect(px.rect(), borders);
191 const QList<QRect> sudoku_tar = sudokuByRect(QRect(QPoint(0, 0), size), borders);
192
193 pa.setCompositionMode(QPainter::CompositionMode_Source); //设置组合模式
194
195 for (int i = 0; i < 9; ++i) {
196 pa.drawPixmap(sudoku_tar[i], px, sudoku_src[i]);
197 }
198
199 pa.end();
200
201 return image;
202 }
203
204 void drawShadow(QPainter *pa, const QRect &rect, qreal xRadius, qreal yRadius, const QColor &sc, qreal radius, const QPoint &offset)
205 {
206 QPixmap shadow;
207 qreal scale = pa->paintEngine()->paintDevice()->devicePixelRatioF();
208 QRect shadow_rect = rect;
209
210 shadow_rect.setTopLeft(shadow_rect.topLeft() + offset);
211
212 xRadius *= scale;
213 yRadius *= scale;
214 radius *= scale;
215
216 const QString &key = QString("dtk-shadow-%1x%2-%3-%4").arg(xRadius).arg(yRadius).arg(sc.name()).arg(radius);
217
218 if (!QPixmapCache::find(key, shadow)) {
219 QImage shadow_base(QSize(xRadius * 3, yRadius * 3), QImage::Format_ARGB32_Premultiplied);
220 shadow_base.fill(0);
221 QPainter pa(&shadow_base);
222
223 pa.setBrush(sc);
224 pa.setPen(Qt::NoPen);
225 pa.drawRoundedRect(shadow_base.rect(), xRadius, yRadius);
226 pa.end();
227
228 shadow_base = dropShadow(QPixmap::fromImage(shadow_base), radius, sc);
229 shadow = QPixmap::fromImage(shadow_base);
230 QPixmapCache::insert(key, shadow);
231 }
232
233 const QMargins margins(xRadius + radius, yRadius + radius, xRadius + radius, yRadius + radius);
234 QImage new_shadow = borderImage(shadow, margins, shadow_rect.size() * scale, QImage::Format_ARGB32_Premultiplied);
235 // QPainter pa_shadow(&new_shadow);
236 // pa_shadow.setCompositionMode(QPainter::CompositionMode_Clear);
237 // pa_shadow.setPen(Qt::NoPen);
238 // pa_shadow.setBrush(Qt::transparent);
239 // pa_shadow.setRenderHint(QPainter::Antialiasing);
240 // pa_shadow.drawRoundedRect((new_shadow.rect() - QMargins(radius, radius, radius, radius)).translated(-offset), xRadius, yRadius);
241 // pa_shadow.end();
242 new_shadow.setDevicePixelRatio(scale);
243 pa->drawImage(shadow_rect.topLeft(), new_shadow);
244 }
245
246 void drawShadow(QPainter *pa, const QRect &rect, const QPainterPath &path, const QColor &sc, int radius, const QPoint &offset)
247 {
248 QPixmap shadow;
249 qreal scale = pa->paintEngine()->paintDevice()->devicePixelRatioF();
250 QRect shadow_rect = rect;
251
252 shadow_rect.setTopLeft(rect.topLeft() + offset);
253 radius *= scale;
254
255 QImage shadow_base(shadow_rect.size() * scale, QImage::Format_ARGB32_Premultiplied);
256 shadow_base.fill(0);
257 shadow_base.setDevicePixelRatio(scale);
258
259 QPainter paTmp(&shadow_base);
260 paTmp.setBrush(sc);
261 paTmp.setPen(Qt::NoPen);
262 paTmp.drawPath(path);
263 paTmp.end();
264 shadow_base = dropShadow(QPixmap::fromImage(shadow_base), radius, sc);
265 shadow = QPixmap::fromImage(shadow_base);
266 shadow.setDevicePixelRatio(scale);
267
268 pa->drawPixmap(shadow_rect, shadow);
269 }
270
271 void drawFork(QPainter *pa, const QRectF &rect, const QColor &color, int width)
272 {
273 QPen pen;
274 pen.setWidth(width);
275 pen.setColor(color);
276
277 pa->setRenderHint(QPainter::Antialiasing, true);
278 pa->setPen(pen);
279 pa->setBrush(Qt::NoBrush);
280
281 drawForkElement(pa, rect);
282 }
283
284 void drawRoundedRect(QPainter *pa, const QRect &rect, qreal xRadius, qreal yRadius, Corners corners, Qt::SizeMode mode)
285 {
286 QRectF r = rect.normalized();
287
288 if (r.isNull())
289 return;
290
291 if (mode == Qt::AbsoluteSize) {
292 qreal w = r.width() / 2;
293 qreal h = r.height() / 2;
294
295 if (w == 0) {
296 xRadius = 0;
297 } else {
298 xRadius = 100 * qMin(xRadius, w) / w;
299 }
300 if (h == 0) {
301 yRadius = 0;
302 } else {
303 yRadius = 100 * qMin(yRadius, h) / h;
304 }
305 } else {
306 if (xRadius > 100) // fix ranges
307 xRadius = 100;
308
309 if (yRadius > 100)
310 yRadius = 100;
311 }
312
313 if (xRadius <= 0 || yRadius <= 0) { // add normal rectangle
314 pa->drawRect(r);
315 return;
316 }
317
318 QPainterPath path;
319 qreal x = r.x();
320 qreal y = r.y();
321 qreal w = r.width();
322 qreal h = r.height();
323 qreal rxx2 = w * xRadius / 100;
324 qreal ryy2 = h * yRadius / 100;
325
326 path.arcMoveTo(x, y, rxx2, ryy2, 180);
327
328 if (corners & TopLeftCorner) {
329 path.arcTo(x, y, rxx2, ryy2, 180, -90);
330 } else {
331 path.lineTo(r.topLeft());
332 }
333
334 if (corners & TopRightCorner) {
335 path.arcTo(x + w - rxx2, y, rxx2, ryy2, 90, -90);
336 } else {
337 path.lineTo(r.topRight());
338 }
339
340 if (corners & BottomRightCorner) {
341 path.arcTo(x + w - rxx2, y + h - ryy2, rxx2, ryy2, 0, -90);
342 } else {
343 path.lineTo(r.bottomRight());
344 }
345
346 if (corners & BottomLeftCorner) {
347 path.arcTo(x, y + h - ryy2, rxx2, ryy2, 270, -90);
348 } else {
349 path.lineTo(r.bottomLeft());
350 }
351
352 path.closeSubpath();
353 pa->drawPath(path);
354 }
355
356 void drawMark(QPainter *pa, const QRectF &rect, const QColor &boxInside, const QColor &boxOutside, const int penWidth, const int outLineLeng)
357 {
358 QPen pen(boxInside);
359 pen.setWidth(penWidth);
360 pa->setPen(pen);
361 pen.setJoinStyle(Qt::RoundJoin);
362 pa->setRenderHint(QPainter::Antialiasing, true);
363
364 drawMarkElement(pa, rect);
365
366 if (outLineLeng == 0)
367 return;
368
369 double xWide = (rect.width() / 2.0);
370 int yHigh = rect.height();
371 double length = sqrt(pow(xWide, 2) + pow(yHigh, 2));
372 double x = rect.right() + (outLineLeng / length) * xWide;
373 double y = rect.y() - (outLineLeng / length) * yHigh;
374
375 pen.setColor(boxOutside);
376 pa->setPen(pen);
377 pa->drawLine(QPointF(rect.topRight()), QPointF(x, y));
378 }
379
380 void drawBorder(QPainter *pa, const QRectF &rect, const QBrush &brush, int borderWidth, int radius)
381 {
382 pa->setPen(QPen(brush, borderWidth, Qt::SolidLine));
383 pa->setBrush(Qt::NoBrush);
384 pa->setRenderHint(QPainter::Antialiasing);
385 pa->drawRoundedRect(rect.adjusted(1, 1, -1, -1), radius, radius) ;
386 }
387
388 void drawArrow(QPainter *pa, const QRectF &rect, const QColor &color, Qt::ArrowType arrow, int width)
389 {
390 QPen pen;
391 pen.setWidth(width);
392 pen.setColor(color);
393 pa->setRenderHint(QPainter::Antialiasing, true);
394 pa->setPen(pen);
395 pa->setBrush(Qt::NoBrush);
396
397 drawArrowElement(arrow, pa, rect);
398 }
399
400 void drawPlus(QPainter *painter, const QRectF &rect, const QColor &color, qreal width)
401 {
402 QPen pen = color;
403 pen.setWidthF(width);
404 painter->setPen(pen);
405 painter->setBrush(Qt::NoBrush);
406 drawIncreaseElement(painter, rect);
407 }
408
409 void drawSubtract(QPainter *painter, const QRectF &rect, const QColor &color, qreal width)
410 {
411 QPen pen = color;
412 pen.setWidthF(width);
413 painter->setPen(pen);
414 painter->setBrush(Qt::NoBrush);
415 drawDecreaseElement(painter, rect);
416 }
417
418 void drawForkElement(QPainter *pa, const QRectF &rect)
419 {
420 pa->drawLine(rect.topLeft(), rect.bottomRight());
421 pa->drawLine(rect.bottomLeft(), rect.topRight());
422 }
423
424 void drawDecreaseElement(QPainter *pa, const QRectF &rect)
425 {
426 qreal centerY = rect.center().y();
427
428 pa->drawLine(QPointF(rect.left(), centerY), QPointF(rect.right(), centerY));
429 }
430
431 void drawIncreaseElement(QPainter *pa, const QRectF &rect)
432 {
433 qreal centerX = rect.center().x();
434 qreal centerY = rect.center().y();
435
436 pa->drawLine(QPointF(rect.x(), centerY), QPointF(rect.right(), centerY));
437 pa->drawLine(QPointF(centerX, rect.y()), QPointF(centerX, rect.bottom()));
438 }
439
440 void drawMarkElement(QPainter *pa, const QRectF &rect)
441 {
442 pa->drawLine(rect.x(), rect.center().y(), rect.center().x(), rect.bottom());
443 pa->drawLine(rect.center().x(), rect.bottom(), rect.right(), rect.y());
444 }
445
446 void drawSelectElement(QPainter *pa, const QRectF &rect)
447 {
448 qreal radius = rect.width() / 15.0;
449 QPointF pointff = rect.center();
450
451 pa->setBrush(QBrush(pa->pen().color()));
452 pa->drawEllipse(pointff, radius, radius);
453 pa->drawEllipse(pointff - QPointF(radius * 3.5, 0), radius, radius);
454 pa->drawEllipse(pointff + QPointF(radius * 3.5, 0), radius, radius);
455 }
456
457 void drawExpandElement(QPainter *pa, const QRectF &rect)
458 {
459 drawArrowUp(pa, rect);
460 }
461
462 void drawReduceElement(QPainter *pa, const QRectF &rect)
463 {
464 drawArrowDown(pa, rect);
465 }
466
467 void drawLockElement(QPainter *pa, const QRectF &rect)
468 {
469 qreal width = rect.width() / 5.0;
470 qreal height = rect.height() / 5.0;
471 qreal y = rect.y();
472 qreal x = rect.x();
473
474 QRectF topRect(x + width, y, width * 3, height * 3);
475 QRectF bottomRect(x, y + height * 2, rect.width(), rect.height() - height * 2);
476 QPainterPath path;
477
478 path.arcMoveTo(topRect, 0);
479 path.arcTo(topRect, 0, 180);
480
481 path.addRect(bottomRect);
482 pa->drawPath(path);
483 }
484
485 void drawUnlockElement(QPainter *pa, const QRectF &rect)
486 {
487 qreal width = rect.width() / 5.0;
488 qreal height = rect.height() / 5.0;
489 qreal y = rect.y();
490 qreal x = rect.x();
491
492 QRectF topRect(x + width * 3, y, rect.width() - width * 3, height * 3);
493 QRectF bottomRect(x + width, y + height * 2, rect.width() - width * 2, rect.height() - height * 2);
494 QPainterPath path;
495
496 path.arcMoveTo(topRect, 0);
497 path.arcTo(topRect, 0, 180);
498 path.addRect(bottomRect);
499 pa->drawPath(path);
500 }
501
502 void drawArrowEnter(QPainter *pa, const QRectF &rect)
503 {
504 drawArrowRight(pa, rect);
505 }
506
507 void drawArrowLeave(QPainter *pa, const QRectF &rect)
508 {
509 drawArrowLeft(pa, rect);
510 }
511
512 void drawArrowNext(QPainter *pa, const QRectF &rect)
513 {
514 QRectF content_rect(rect.x() + rect.width() / 2, rect.y(), rect.width() / 2, rect.height());
515 qreal y = rect.center().y();
516
517 drawArrowElement(Qt::RightArrow, pa, content_rect);
518 pa->drawLine(rect.x(), y, rect.bottom(), y);
519 }
520
521 void drawArrowPrev(QPainter *pa, const QRectF &rect)
522 {
523 QRectF content_rect(rect.x(), rect.y(), rect.width() / 2, rect.height());
524 qreal y = rect.center().y();
525
526 drawArrowElement(Qt::LeftArrow, pa, content_rect);
527 pa->drawLine(rect.x(), y, rect.bottom(), y);
528 }
529
530 void drawCloseButton(QPainter *pa, const QRectF &rect)
531 {
532 pa->setRenderHint(QPainter::Antialiasing);
533 QPen pen = pa->pen();
534 QPen new_pen = pa->pen();
535 QColor border_color = pen.color();
536 border_color.setAlphaF(0.1);
537 new_pen.setColor(border_color);
538 pa->setPen(new_pen);
539 qreal pen_extent = pen.widthF() / 2;
540 pa->drawEllipse(rect.adjusted(pen_extent, pen_extent, -pen_extent, -pen_extent));
541 QRectF content_rect(0, 0, rect.width() / 3, rect.height() / 3);
542 content_rect.moveCenter(rect.center());
543 pa->setPen(pen);
544 drawForkElement(pa, content_rect);
545 }
546
547 void drawDeleteButton(QPainter *pa, const QRectF &rect)
548 {
549 const QPen pen = pa->pen();
550 pa->setPen(Qt::NoPen);
551
552 QPainterPath path;
553 path.addEllipse(rect);
554
555 QRectF hRect(rect.x(), rect.y(), rect.width() / 2, 1);
556
557 hRect.moveCenter(rect.center());
558
559 path.addRect(hRect);
560
561 pa->fillPath(path, QColor("#ff6a6a"));
562 }
563
564 void drawAddButton(QPainter *pa, const QRectF &rect)
565 {
566 const QPen pen = pa->pen();
567 pa->setPen(Qt::NoPen);
568
569 QPainterPath path;
570 path.addEllipse(rect);
571
572 QRectF hRect(rect.x(), rect.y(), rect.width() / 2, 1);
573 QRectF vRect(rect.x(), rect.y(), 1, rect.height() / 2);
574
575 hRect.moveCenter(rect.center());
576 vRect.moveCenter(rect.center());
577
578 path.addRect(hRect);
579 path.addRect(vRect);
580
581 QRectF center(0, 0, 1, 1);
582 center.moveCenter(rect.center());
583 path.addEllipse(center);
584
585 pa->fillPath(path, QColor("#48bf00"));
586 }
587
588 void drawTitleBarMenuButton(QPainter *pa, const QRectF &rect)
589 {
590 const QPen pen = pa->pen();
591 pa->setPen(Qt::NoPen);
592 pa->drawRect(rect);
593 QRect content_rect(0, 0, rect.width() / 5, rect.height() / 5);
594 content_rect.moveCenter(rect.center().toPoint());
595 pa->setPen(pen);
596
597 pa->setRenderHint(QPainter::Antialiasing, pa->device()->devicePixelRatioF() > 1.0);
598 pa->drawLine(content_rect.x(), content_rect.y(), content_rect.topRight().x() - 2, content_rect.topRight().y());
599 pa->drawLine(content_rect.bottomLeft(), content_rect.bottomRight());
600
601 qreal y = content_rect.center().y();
602 pa->drawLine(content_rect.x(), y, content_rect.topRight().x(), y);
603 }
604
605 void drawTitleBarMinButton(QPainter *pa, const QRectF &rect)
606 {
607 const QPen pen = pa->pen();
608 pa->setPen(Qt::NoPen);
609 pa->drawRect(rect);
610 QRect content_rect(0, 0, rect.width() / 5, rect.height() / 5);
611 content_rect.moveCenter(rect.center().toPoint());
612 pa->setPen(pen);
613 pa->setRenderHint(QPainter::Antialiasing, pa->device()->devicePixelRatioF() > 1.0);
614 drawDecreaseElement(pa, content_rect);
615 }
616
617 void drawTitleBarMaxButton(QPainter *pa, const QRectF &rect)
618 {
619 const QPen pen = pa->pen();
620 pa->setPen(Qt::NoPen);
621 pa->drawRect(rect);
622 QRect content_rect(0, 0, rect.width() / 5, rect.height() / 6);
623 content_rect.moveCenter(rect.center().toPoint());
624 pa->setPen(pen);
625 pa->setRenderHint(QPainter::Antialiasing, pa->device()->devicePixelRatioF() > 1.0);
626 pa->drawRect(content_rect);
627 }
628
629 void drawTitleBarCloseButton(QPainter *pa, const QRectF &rect)
630 {
631 const QPen pen = pa->pen();
632 pa->setPen(Qt::NoPen);
633 pa->drawRect(rect);
634 QRectF content_rect(0, 0, rect.width() / 5, rect.height() / 5);
635 content_rect.moveCenter(rect.center());
636 pa->setPen(pen);
637 pa->setRenderHint(QPainter::Antialiasing, pa->device()->devicePixelRatioF() > 1.0);
638 drawForkElement(pa, content_rect);
639 }
640
641 void drawTitleBarNormalButton(QPainter *pa, const QRectF &rect)
642 {
643 const QPen pen = pa->pen();
644 pa->setPen(Qt::NoPen);
645 pa->drawRect(rect);
646 QRect content_rect(0, 0, rect.width() / 5, rect.height() / 5);
647 content_rect.moveCenter(rect.center().toPoint());
648 pa->setPen(pen);
649
650 pa->setRenderHint(QPainter::Antialiasing, pa->device()->devicePixelRatioF() > 1.0);
651 pa->drawRect(content_rect.x(), content_rect.y() + 2, content_rect.width() - 2, content_rect.height() - 2);
652 pa->drawLine(content_rect.x() + 2, content_rect.y(), content_rect.right(), content_rect.y());
653 pa->drawLine(content_rect.right() + 1, content_rect.y(), content_rect.right() + 1, content_rect.bottom() - 2);
654 }
655
656 void drawArrowUp(QPainter *pa, const QRectF &rect)
657 {
658 QRectF ar(0, 0, rect.width(), rect.height() / 2);
659 ar.moveCenter(rect.center());
660 drawArrowElement(Qt::UpArrow, pa, ar);
661 }
662
663 void drawArrowDown(QPainter *pa, const QRectF &rect)
664 {
665 QRectF ar(0, 0, rect.width(), rect.height() / 2);
666 ar.moveCenter(rect.center());
667 drawArrowElement(Qt::DownArrow, pa, ar);
668 }
669
670 void drawArrowLeft(QPainter *pa, const QRectF &rect)
671 {
672 QRectF ar(0, 0, rect.width() / 2, rect.height());
673 ar.moveCenter(rect.center());
674 drawArrowElement(Qt::LeftArrow, pa, ar);
675 }
676
677 void drawArrowRight(QPainter *pa, const QRectF &rect)
678 {
679 QRectF ar(0, 0, rect.width() / 2, rect.height());
680 ar.moveCenter(rect.center());
681 drawArrowElement(Qt::RightArrow, pa, ar);
682 }
683
684 void drawArrowBack(QPainter *pa, const QRectF &rect)
685 {
686 drawArrowLeft(pa, rect);
687 }
688
689 void drawArrowForward(QPainter *pa, const QRectF &rect)
690 {
691 drawArrowRight(pa, rect);
692 }
693
694 void drawLineEditClearButton(QPainter *pa, const QRectF &rect)
695 {
696 drawCloseButton(pa, rect);
697 }
698
699 void drawIndicatorUnchecked(QPainter *pa, const QRectF &rect)
700 {
701 pa->drawEllipse(rect);
702 }
703
704 void drawIndicatorChecked(QPainter *pa, const QRectF &rect)
705 {
706 QRectF mark(0, 0, rect.width() / 2, rect.height() / 2);
707 mark.moveCenter(rect.center());
708 QStyleOption opt;
709 QColor brush = opt.palette.color(DPalette::Highlight);
710 pa->setPen(Qt::NoPen);
711 pa->setBrush(brush);
712
713 pa->drawEllipse(rect);
714 drawMark(pa, mark, opt.palette.color(DPalette::Window), opt.palette.color(DPalette::Window), 2, 0);
715 }
716
717 void drawArrowElement(Qt::ArrowType arrow, QPainter *pa, const QRectF &rect)
718 {
719 const QPointF center = rect.center();
720
721 switch (arrow) {
722 case Qt::UpArrow: {
723 pa->drawLine(QPointF(center.x(), rect.y()), rect.bottomLeft());
724 pa->drawLine(QPointF(center.x(), rect.y()), rect.bottomRight());
725 break;
726 }
727 case Qt::LeftArrow: {
728 pa->drawLine(QPointF(rect.x(), center.y()), rect.bottomRight());
729 pa->drawLine(QPointF(rect.x(), center.y()), rect.topRight());
730 break;
731 }
732 case Qt::DownArrow: {
733 pa->drawLine(QPointF(center.x(), rect.bottom()), rect.topLeft());
734 pa->drawLine(QPointF(center.x(), rect.bottom()), rect.topRight());
735 break;
736 }
737 case Qt::RightArrow: {
738 pa->drawLine(QPointF(rect.right(), center.y()), rect.topLeft());
739 pa->drawLine(QPointF(rect.right(), center.y()), rect.bottomLeft());
740 break;
741 }
742 default:
743 break;
744 }
745 }
746
747 }
748
749 /*!
750 * \~chinese \class DStyle
751 * \~chinese \brief DStyle提供了一个修改风格的类
752 * \~chinese \sa QCommonStyle()
753 */
754
755 /*!
756 * \~chinese \enum DStyle::PrimitiveElement
757 * \~chinese \sa DStyle::PrimitiveElement QStyle::PrimitiveElement
758 *
759 * \~chinese \var DStyle::PrimitiveElement DStyle::PE_ItemBackground
760 * \~chinese item背景颜色
761 *
762 * \~chinese \var DStyle::PrimitiveElement DStyle::PE_IconButtonPanel
763 * \~chinese DIconButton 面板
764 *
765 * \~chinese \var DStyle::PrimitiveElement DStyle::PE_IconButtonIcon
766 * \~chinese DIconButton 不同状态下的背景颜色
767 *
768 * \~chinese \var DStyle::PrimitiveElement DStyle::PE_Icon
769 * \~chinese DIconButton
770 *
771 * \~chinese \var DStyle::PrimitiveElement DStyle::PE_SwitchButtonGroove
772 * \~chinese DSwitchButton 面板
773 *
774 * \~chinese \var DStyle::PrimitiveElement DStyle::PE_SwitchButtonHandle
775 * \~chinese DSwitchButton 滑块面板
776 *
777 * \~chinese \var DStyle::PrimitiveElement DStyle::PE_FloatingWidget
778 * \~chinese DFloatingWidget 面板
779 */
780
781 /*!
782 * \~chinese \enum DStyle::StyleState
783 * \~chinese \sa DStyle::StyleState 记录控件状态的值
784 *
785 * \~chinese \var DStyle::StyleState DStyle::SS_NormalState
786 * \~chinese 正常状态
787 *
788 * \~chinese \var DStyle::StyleState DStyle::SS_HoverState
789 * \~chinese 悬停状态
790 *
791 * \~chinese \var DStyle::StyleState DStyle::SS_PressState
792 * \~chinese 按下状态
793 *
794 *\~chinese \var DStyle::StyleState DStyle::SS_StateCustomBase
795 * \~chinese 自定义子元素的基值
796 *
797 * \~chinese \var DStyle::StyleState DStyle::StyleState_Mask
798 * \~chinese 状态掩码
799 *
800 * \~chinese \var DStyle::StyleState DStyle::SS_CheckedFlag
801 * \~chinese 选定标志
802 *
803 * \~chinese \var DStyle::StyleState DStyle::SS_SelectedFlag
804 * \~chinese 选中状态
805 *
806 * * \~chinese \var DStyle::StyleState DStyle::SS_FocusFlag
807 * \~chinese 焦点状态
808 *
809 * \~chinese \var DStyle::StyleState DStyle::SS_FlagCustomBase
810 * \~chinese 自定义子元素的基值
811 */
812
813 /*!
814 * \~chinese \enum DStyle::PixelMetric
815 * \~chinese \sa DStyle::PixelMetric QStyle::PixelMetric
816 *
817 * \~chinese \var DStyle::PixelMetric DStyle::PM_FocusBorderWidth
818 * \~chinese 控件焦点状态的边框宽度
819 *
820 * \~chinese \var DStyle::PixelMetric DStyle::PM_FocusBorderSpacing
821 * \~chinese 控件内容和border之间的间隔
822 *
823 * \~chinese \var DStyle::PixelMetric DStyle::PM_FrameRadius
824 * \~chinese 控件的圆角大小
825 *
826 * \~chinese \var DStyle::PixelMetric DStyle::PM_ShadowRadius
827 * \~chinese 控件阴影效果的半径
828 *
829 * \~chinese \var DStyle::PixelMetric DStyle::PM_ShadowHOffset
830 * \~chinese 阴影在水平方向的偏移
831 *
832 * \~chinese \var DStyle::PixelMetric DStyle::PM_ShadowVOffset
833 * \~chinese 阴影在竖直方向的偏移
834 *
835 * \~chinese \var DStyle::PixelMetric DStyle::PM_FrameMargins
836 * \~chinese 控件的margins区域,控件内容 = 控件大小 - FrameMargins
837 *
838 * \~chinese \var DStyle::PixelMetric DStyle::PM_IconButtonIconSize
839 * \~chinese 控件大小
840 *
841 * \~chinese \var DStyle::PixelMetric DStyle::PM_TopLevelWindowRadius
842 * \~chinese 窗口的圆角大小
843 *
844 * \~chinese \var DStyle::PixelMetric DStyle::PM_SwitchButtonHandleWidth
845 * \~chinese 控件开关的宽度
846 *
847 * \~chinese \var DStyle::PixelMetric DStyle::PM_SwithcButtonHandleHeight
848 * \~chinese 控件开关的高度
849 *
850 * \~chinese \var DStyle::PixelMetric DStyle::PM_FloatingWidgetRadius
851 * \~chinese (基类)的圆角半径:控件内容-Radius < 控件内容 < 控件显示大小
852 *
853 * \~chinese \var DStyle::PixelMetric DStyle::PM_FloatingWidgetShadowRadius
854 * \~chinese (基类)的阴影Radius区域:控件内容 < 控件内容+阴影margins < 控件内容+阴影margins+阴影Radius = 控件显示大小
855 *
856 * \~chinese \var DStyle::PixelMetric DStyle::PM_FloatingWidgetShadowMargins
857 * \~chinese (基类)阴影的宽度 = 控件显示大小 - 阴影Radius - 控件内容
858 *
859 * \~chinese \var DStyle::PixelMetric DStyle::PM_FloatingWidgetShadowHOffset
860 * \~chinese (基类)的阴影水平偏移
861 *
862 * \~chinese \var DStyle::PixelMetric DStyle::PM_ContentsMargins
863 * \~chinese (基类)内容的边距(一般只用于左右边距)
864 *
865 * \~chinese \var DStyle::PixelMetric DStyle::PM_ContentsSpacing
866 * \~chinese 内容的间距(可用于列表项中每一项的距离)
867 *
868 * \~chinese \var DStyle::PixelMetric DStyle::PM_ButtonMinimizedSize
869 * \~chinese 按钮控件的最小大小
870 */
871
872 /*!
873 * \~chinese \enum DStyle::StandardPixmap
874 * \~chinese \sa DStyle::StandardPixmap QStyle::StandardPixmap
875 *
876 * \~chinese \var DStyle::StandardPixmap DStyle::P_DecreaseElement
877 * \~chinese 减少(-)
878 * \~chinese \var DStyle::StandardPixmap DStyle::SP_IncreaseElement
879 * \~chinese 增加(+)
880 * \~chinese \var DStyle::StandardPixmap DStyle::SP_MarkElement
881 * \~chinese 对勾
882 * \~chinese \var DStyle::StandardPixmap DStyle::SP_SelectElement
883 * \~chinese 选择(...)
884 * \~chinese \var DStyle::StandardPixmap DStyle::SP_EditElement
885 * \~chinese 编辑
886 * \~chinese \var DStyle::StandardPixmap DStyle::SP_ExpandElement
887 * \~chinese 展开
888 * \~chinese \var DStyle::StandardPixmap DStyle::SP_ReduceElement
889 * \~chinese 收缩
890 * \~chinese \var DStyle::StandardPixmap DStyle::SP_LockElement
891 * \~chinese 锁定
892 * \~chinese \var DStyle::StandardPixmap DStyle::SP_UnlockElement
893 * \~chinese 解锁
894 * \~chinese \var DStyle::StandardPixmap DStyle::SP_MediaVolumeLowElement
895 * \~chinese 音量
896 * \~chinese \var DStyle::StandardPixmap DStyle::SP_MediaVolumeHighElement
897 * \~chinese 满音量
898 * \~chinese \var DStyle::StandardPixmap DStyle::SP_MediaVolumeMutedElement
899 * \~chinese 静音
900 * \~chinese \var DStyle::StandardPixmap DStyle::SP_MediaVolumeLeftElement
901 * \~chinese 左声道
902 * \~chinese \var DStyle::StandardPixmap DStyle::SP_MediaVolumeRightElement
903 * \~chinese 右声道
904 * \~chinese \var DStyle::StandardPixmap DStyle::SP_ArrowEnter
905 * \~chinese 进入
906 * \~chinese \var DStyle::StandardPixmap DStyle::SP_ArrowLeave
907 * \~chinese 离开
908 * \~chinese \var DStyle::StandardPixmap DStyle::SP_ArrowNext
909 * \~chinese 下一页
910 * \~chinese \var DStyle::StandardPixmap DStyle::SP_ArrowPrev
911 * \~chinese 上一页
912 * \~chinese \var DStyle::StandardPixmap DStyle::SP_ShowPassword
913 * \~chinese 显示密码
914 * \~chinese \var DStyle::StandardPixmap DStyle::SP_HidePassword
915 * \~chinese 隐藏密码
916 * \~chinese \var DStyle::StandardPixmap DStyle::SP_CloseButton
917 * \~chinese 关闭按钮(X)
918 * \~chinese \var DStyle::StandardPixmap DStyle::SP_IndicatorMajuscule
919 * \~chinese 大写标识
920 * \~chinese \var DStyle::StandardPixmap DStyle::SP_IndicatorSearch
921 * \~chinese 搜索标识(放大镜)
922 * \~chinese \var DStyle::StandardPixmap DStyle::SP_IndicatorUnchecked
923 * \~chinese 搜索标识(对应对勾的选中状态)
924 * \~chinese \var DStyle::StandardPixmap DStyle::SP_IndicatorChecked
925 * \~chinese 搜索标识(对勾)
926 *
927 * \~chinese \var DStyle::StandardPixmap DStyle::SP_DeleteButton
928 * \~chinese 删除按钮
929 *
930 * \~chinese \var DStyle::StandardPixmap DStyle::SP_AddButton
931 * \~chinese 新增按钮
932 */
933
934 /*!
935 * \~chinese \brief DStyle::DStyle
936 */
937 DStyle::DStyle()
938 {
939
940 }
941
942 /*!
943 * \~chinese \brief DStyle::drawPrimitive
944 * \~chinese QStyle::drawPrimitive()
945 */
946 void DStyle::drawPrimitive(const QStyle *style, DStyle::PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w)
947 {
948 DStyleHelper dstyle(style);
949
950 switch (pe) {
951 case PE_ItemBackground: {
952 if (const DStyleOptionBackgroundGroup *vopt = qstyleoption_cast<const DStyleOptionBackgroundGroup *>(opt)) {
953 QColor color = vopt->dpalette.color(DPalette::ItemBackground);
954
955 if (dstyle.dstyle()) {
956 color = dstyle.dstyle()->generatedBrush(vopt, color, vopt->dpalette.currentColorGroup(), DPalette::ItemBackground).color();
957 }
958
959 if (color.alpha() == 0) {
960 return;
961 }
962
963 int frame_radius = dstyle.pixelMetric(PM_FrameRadius, opt, w);
964 p->setBrush(color);
965 p->setPen(Qt::NoPen);
966 p->setRenderHint(QPainter::Antialiasing);
967
968 if (vopt->directions != Qt::Horizontal && vopt->directions != Qt::Vertical) {
969 p->drawRoundedRect(vopt->rect, frame_radius, frame_radius);
970 break;
971 }
972
973 switch (vopt->position) {
974 case DStyleOptionBackgroundGroup::OnlyOne:
975 p->drawRoundedRect(vopt->rect, frame_radius, frame_radius);
976 break;
977 case DStyleOptionBackgroundGroup::Beginning: {
978 if (vopt->directions == Qt::Horizontal) {
979 DDrawUtils::drawRoundedRect(p, vopt->rect, frame_radius, frame_radius,
980 DDrawUtils::TopLeftCorner | DDrawUtils::BottomLeftCorner);
981 } else {
982 DDrawUtils::drawRoundedRect(p, vopt->rect, frame_radius, frame_radius,
983 DDrawUtils::TopLeftCorner | DDrawUtils::TopRightCorner);
984 }
985
986 break;
987 }
988 case DStyleOptionBackgroundGroup::End:
989 if (vopt->directions == Qt::Horizontal) {
990 DDrawUtils::drawRoundedRect(p, vopt->rect, frame_radius, frame_radius,
991 DDrawUtils::TopRightCorner | DDrawUtils::BottomRightCorner);
992 } else {
993 DDrawUtils::drawRoundedRect(p, vopt->rect, frame_radius, frame_radius,
994 DDrawUtils::BottomLeftCorner | DDrawUtils::BottomRightCorner);
995 }
996
997 break;
998 case DStyleOptionBackgroundGroup::Middle:
999 p->setRenderHint(QPainter::Antialiasing, false);
1000 p->drawRect(vopt->rect);
1001 break;
1002 default:
1003 break;
1004 }
1005
1006 return;
1007 }
1008 break;
1009 }
1010 case PE_IconButtonPanel: {
1011 if (const DStyleOptionButton *btn = qstyleoption_cast<const DStyleOptionButton *>(opt)) {
1012 DStyleHelper dstyle(style);
1013
1014 if (btn->features & DStyleOptionButton::FloatingButton) {
1015 int frame_margins = 3;
1016 const QMargins margins(frame_margins, frame_margins, frame_margins, frame_margins);
1017 QRect shadow_rect = opt->rect + margins;
1018 const QRect content_rect = opt->rect - margins;
1019 QColor color = dstyle.getColor(opt, QPalette::Button);
1020
1021 qreal frame_radius = content_rect.width() / 2.0;
1022 int shadow_radius = 5;
1023 int shadow_xoffset = 0;
1024 int shadow_yoffset = 2;
1025
1026 shadow_rect.setTopLeft(shadow_rect.topLeft() + QPoint(shadow_xoffset, shadow_yoffset));
1027 shadow_rect.setWidth(qMin(shadow_rect.width(), shadow_rect.height()));
1028 shadow_rect.setHeight(qMin(shadow_rect.width(), shadow_rect.height()));
1029 shadow_rect.moveCenter(opt->rect.center() + QPoint(shadow_xoffset / 2.0, shadow_yoffset / 2.0));
1030
1031 DDrawUtils::drawShadow(p, shadow_rect, frame_radius, frame_radius,
1032 DStyle::adjustColor(color, 0, 0, +30), shadow_radius, QPoint(0, 0));
1033
1034 p->setPen(Qt::NoPen);
1035 p->setBrush(color);
1036 p->setRenderHint(QPainter::Antialiasing);
1037 p->drawEllipse(content_rect);
1038 } else {
1039 style->drawControl(CE_PushButtonBevel, opt, p, w);
1040 }
1041 }
1042 break;
1043 }
1044 case PE_IconButtonIcon: {
1045 if (const DStyleOptionButton *btn = qstyleoption_cast<const DStyleOptionButton *>(opt)) {
1046 DStyleHelper dstyle(style);
1047 DStyleOptionIcon icon_option;
1048
1049 icon_option.QStyleOption::operator =(*opt);
1050 icon_option.icon = btn->icon;
1051 icon_option.dpalette = btn->dpalette;
1052
1053 QPalette pa = opt->palette;
1054
1055 if (btn->features & DStyleOptionButton::TitleBarButton) {
1056 if (!(opt->state & (State_MouseOver | State_Sunken))) {
1057 pa.setBrush(QPalette::Background, Qt::transparent);
1058 }
1059
1060 if (opt->state & State_Sunken) {
1061 pa.setBrush(QPalette::Foreground, opt->palette.highlight());
1062 } else {
1063 pa.setBrush(QPalette::Foreground, opt->palette.buttonText());
1064 }
1065 } else {
1066 pa.setBrush(QPalette::Background, dstyle.generatedBrush(opt, pa.button(), pa.currentColorGroup(), QPalette::Button));
1067
1068 if (opt->state & QStyle::State_On) {
1069 pa.setBrush(QPalette::Foreground, dstyle.generatedBrush(opt, pa.highlightedText(), pa.currentColorGroup(), QPalette::HighlightedText));
1070 } else {
1071 pa.setBrush(QPalette::Foreground, dstyle.generatedBrush(opt, pa.buttonText(), pa.currentColorGroup(), QPalette::ButtonText));
1072 }
1073 }
1074
1075 icon_option.palette = pa;
1076 icon_option.rect.setSize(btn->iconSize);
1077 icon_option.rect.moveCenter(QRect(opt->rect).center());
1078
1079 dstyle.drawPrimitive(PE_Icon, &icon_option, p, w);
1080 }
1081 break;
1082 }
1083 case PE_Icon: {
1084 if (const DStyleOptionIcon *icon_opt = qstyleoption_cast<const DStyleOptionIcon *>(opt)) {
1085 if (icon_opt->icon.isNull()) {
1086 return;
1087 }
1088
1089 auto *data = const_cast<DStyleOptionIcon *>(icon_opt)->icon.data_ptr();
1090
1091 if (DStyledIconEngine *engine = dynamic_cast<DStyledIconEngine *>(data->engine)) {
1092 engine->paint(p, opt->palette, opt->rect);
1093 } else {
1094 auto icon_mode_state = toIconModeState(opt);
1095 p->setBrush(opt->palette.background());
1096 p->setPen(QPen(opt->palette.foreground(), 1));
1097 icon_opt->icon.paint(p, opt->rect, Qt::AlignCenter, icon_mode_state.first, icon_mode_state.second);
1098 }
1099 }
1100 break;
1101 }
1102 case PE_SwitchButtonGroove: {
1103 if (const DStyleOptionButton *btn = qstyleoption_cast<const DStyleOptionButton *>(opt)) {
1104 QRect rectGroove = btn->rect;
1105 int frame_radius = dstyle.pixelMetric(DStyle::PM_FrameRadius, opt, w);
1106
1107 p->setRenderHint(QPainter::Antialiasing);
1108 p->setPen(Qt::NoPen);
1109 p->setBrush(dstyle.getColor(opt, QPalette::Button));
1110 p->drawRoundedRect(rectGroove, frame_radius, frame_radius);
1111 }
1112 break;
1113 }
1114 case PE_SwitchButtonHandle: {
1115 if (const DStyleOptionButton *btn = qstyleoption_cast<const DStyleOptionButton *>(opt)) {
1116 QRect rectHandle = btn->rect;
1117 int frame_radius = dstyle.pixelMetric(DStyle::PM_FrameRadius, opt, w);
1118 p->setRenderHint(QPainter::Antialiasing);
1119 p->setPen(Qt::NoPen);
1120
1121 if (btn->state & State_On) {
1122 p->setBrush(dstyle.getColor(opt, QPalette::Highlight));
1123 } else {
1124 p->setBrush(dstyle.getColor(opt, QPalette::ButtonText));
1125 }
1126
1127 p->drawRoundedRect(rectHandle, frame_radius, frame_radius);
1128 }
1129 break;
1130 }
1131 case PE_FloatingWidget: {
1132 if (const DStyleOptionFloatingWidget *btn = qstyleoption_cast<const DStyleOptionFloatingWidget *>(opt)) {
1133 DStyleHelper dstyle(style);
1134 int shadowRadius = dstyle.pixelMetric(PM_FloatingWidgetShadowRadius, opt, w); //18
1135 int frameRadius = dstyle.pixelMetric(PM_FloatingWidgetRadius, opt, w); //18
1136 int offsetX = dstyle.pixelMetric(PM_FloatingWidgetShadowHOffset, opt, w); //0
1137 int offsetY = dstyle.pixelMetric(PM_FloatingWidgetShadowVOffset, opt, w); //6
1138 int shadowMargins = dstyle.pixelMetric(PM_FloatingWidgetShadowMargins, opt, w) * 2;
1139
1140 //绘画 矩形(图标icon+text+btn+icon)和外面一小圈frameRadius/2的 合在一起的矩形
1141 p->setRenderHint(QPainter::Antialiasing);
1142 QMargins shadow_margin(shadowMargins, shadowMargins, shadowMargins, shadowMargins);
1143
1144 //先绘画阴影
1145 DDrawUtils::drawShadow(p, btn->rect + shadow_margin, frameRadius, frameRadius, QColor(0, 0, 0, 0.25 * 255), shadowRadius, QPoint(offsetX, offsetY));
1146 //再绘画上面的待显示区域
1147 p->setPen(QPen(btn->dpalette.frameShadowBorder(), 1));
1148 p->setBrush(btn->noBackground ? Qt::NoBrush : p->background());
1149 p->drawRoundedRect(opt->rect, frameRadius, frameRadius);
1150 }
1151 break;
1152 }
1153 default:
1154 break;
1155 }
1156 }
1157
1158 /*!
1159 * \~chinese \brief DStyle::drawControl
1160 * \~chinese \sa QStyle::drawControl()
1161 */
1162 void DStyle::drawControl(const QStyle *style, DStyle::ControlElement ce, const QStyleOption *opt, QPainter *p, const QWidget *w)
1163 {
1164 switch (ce) {
1165 case CE_IconButton: {
1166 if (const DStyleOptionButton *btn = qstyleoption_cast<const DStyleOptionButton *>(opt)) {
1167 DStyleHelper dstyle(style);
1168
1169 if (!(btn->features & DStyleOptionButton::Flat)) {
1170 dstyle.drawPrimitive(PE_IconButtonPanel, opt, p, w);
1171 }
1172
1173 if ((!btn->text.isEmpty() && (btn->features & DStyleOptionButton::FloatingButton))) {
1174 QStyleOptionButton subopt = *btn;
1175 subopt.rect = style->subElementRect(SE_PushButtonContents, opt, w);
1176
1177 if (!(btn->features & QStyleOptionButton::Flat))
1178 subopt.palette.setBrush(QPalette::ButtonText, subopt.palette.highlightedText());
1179
1180 style->drawControl(CE_PushButtonLabel, &subopt, p, w);
1181 } else {
1182 DStyleOptionButton new_opt = *btn;
1183 new_opt.rect = dstyle.subElementRect(SE_IconButtonIcon, opt, w);
1184 dstyle.drawPrimitive(PE_IconButtonIcon, &new_opt, p, w);
1185 }
1186
1187 if (btn->state & State_HasFocus) {
1188 if (btn->features & DStyleOptionButton::FloatingButton) {
1189 int border_width = dstyle.pixelMetric(PM_FocusBorderWidth, opt, w);
1190 QColor color = dstyle.getColor(opt, QPalette::Highlight);
1191
1192 p->setPen(QPen(color, border_width, Qt::SolidLine));
1193 p->setBrush(Qt::NoBrush);
1194 p->setRenderHint(QPainter::Antialiasing);
1195 p->drawEllipse(QRectF(opt->rect).adjusted(1, 1, -1, -1));
1196 } else if (btn->features & DStyleOptionButton::TitleBarButton) {
1197 QStyleOption option = *opt;
1198 option.rect.adjust(6, 6, -6, -6);
1199 style->drawPrimitive(PE_FrameFocusRect, &option, p, w);
1200 } else {
1201 style->drawPrimitive(PE_FrameFocusRect, opt, p, w);
1202 }
1203 }
1204 }
1205 break;
1206 }
1207 case CE_SwitchButton: {
1208 if (const DStyleOptionButton *btn = qstyleoption_cast<const DStyleOptionButton *>(opt)) {
1209 DStyleHelper dstyle(style);
1210 DStyleOptionButton option = *btn;
1211 option.dpalette = btn->dpalette;
1212 option.rect = dstyle.subElementRect(SE_SwitchButtonGroove, opt, w);
1213 dstyle.drawPrimitive(PE_SwitchButtonGroove, &option, p, w);
1214 option.rect = dstyle.subElementRect(SE_SwitchButtonHandle, opt, w);
1215 dstyle.drawPrimitive(PE_SwitchButtonHandle, &option, p, w);
1216 }
1217 break;
1218 }
1219 case CE_FloatingWidget: {
1220 if (const DStyleOptionFloatingWidget *btn = qstyleoption_cast<const DStyleOptionFloatingWidget *>(opt)) {
1221 DStyleHelper dstyle(style);
1222 DStyleOptionFloatingWidget option = *btn;
1223 option.dpalette = btn->dpalette;
1224 option.rect = dstyle.subElementRect(SE_FloatingWidget, opt, w);
1225 dstyle.drawPrimitive(PE_FloatingWidget, &option, p, w);
1226 }
1227 break;
1228 }
1229 case CE_ButtonBoxButton: {
1230 if (const DStyleOptionButton *btn = qstyleoption_cast<const DStyleOptionButton *>(opt)) {
1231 DStyleHelper dstyle(style);
1232 dstyle.drawControl(CE_ButtonBoxButtonBevel, btn, p, w);
1233 DStyleOptionButton subopt = *btn;
1234 subopt.rect = dstyle.subElementRect(SE_ButtonBoxButtonContents, btn, w);
1235 dstyle.drawControl(CE_ButtonBoxButtonLabel, &subopt, p, w);
1236 if (btn->state & State_HasFocus) {
1237 QStyleOptionFocusRect fropt;
1238 fropt.QStyleOption::operator=(*btn);
1239 fropt.rect = dstyle.subElementRect(SE_ButtonBoxButtonFocusRect, btn, w);
1240 style->drawPrimitive(PE_FrameFocusRect, &fropt, p, w);
1241 }
1242 }
1243 break;
1244 }
1245 case CE_ButtonBoxButtonBevel: {
1246 if (const DStyleOptionButtonBoxButton *btn = qstyleoption_cast<const DStyleOptionButtonBoxButton *>(opt)) {
1247 bool checked = btn->state & State_On;
1248 bool disable = !(btn->state & State_Enabled);
1249 bool hover = btn->state & State_MouseOver;
1250 bool press = btn->state & State_Sunken;
1251
1252 DStyleHelper dstyle(style);
1253 const QColor &background = dstyle.getColor(opt, checked ? QPalette::Highlight : QPalette::Button);
1254 p->setBrush(background);
1255 p->setPen(QPen(dstyle.getColor(btn, DPalette::FrameBorder), 1));
1256 int radius = dstyle.pixelMetric(PM_FrameRadius, opt, w);
1257 int margins = dstyle.pixelMetric(PM_FrameMargins, opt, w);
1258 DStyleOptionButtonBoxButton::ButtonPosition pos = btn->position;
1259
1260 if (btn->state & State_HasFocus) {
1261 pos = DStyleOptionButtonBoxButton::OnlyOne;
1262 }
1263
1264 switch (pos) {
1265 case DStyleOptionButtonBoxButton::Beginning: {
1266 p->setRenderHint(QPainter::Antialiasing);
1267 QRect rect;
1268
1269 if (btn->orientation == Qt::Horizontal) {
1270 rect = opt->rect.adjusted(margins, margins, 0, -margins);
1271 DDrawUtils::drawRoundedRect(p, rect, radius, radius, DDrawUtils::TopLeftCorner | DDrawUtils::BottomLeftCorner);
1272 } else {
1273 rect = opt->rect.adjusted(margins, margins, -margins, 0);
1274 DDrawUtils::drawRoundedRect(p, rect, radius, radius, DDrawUtils::TopLeftCorner | DDrawUtils::TopRightCorner);
1275 }
1276
1277 break;
1278 }
1279 case DStyleOptionButtonBoxButton::Middle: {
1280 QRect rect;
1281
1282 if (btn->orientation == Qt::Horizontal)
1283 rect = opt->rect.adjusted(0, margins, 0, -margins);
1284 else
1285 rect = opt->rect.adjusted(margins, 0, -margins, 0);
1286
1287 p->drawRect(rect);
1288 break;
1289 }
1290 case DStyleOptionButtonBoxButton::End: {
1291 p->setRenderHint(QPainter::Antialiasing);
1292 QRect rect;
1293
1294 if (btn->orientation == Qt::Horizontal) {
1295 rect = opt->rect.adjusted(0, margins, -margins, -margins);
1296 DDrawUtils::drawRoundedRect(p, rect, radius, radius, DDrawUtils::TopRightCorner | DDrawUtils::BottomRightCorner);
1297 } else {
1298 rect = opt->rect.adjusted(margins, 0, -margins, -margins);
1299 DDrawUtils::drawRoundedRect(p, rect, radius, radius, DDrawUtils::BottomLeftCorner | DDrawUtils::BottomRightCorner);
1300 }
1301
1302 break;
1303 }
1304 case DStyleOptionButtonBoxButton::OnlyOne: {
1305 QRect rect = opt->rect.adjusted(margins, margins, -margins, -margins);
1306 p->setRenderHint(QPainter::Antialiasing);
1307 p->drawRoundedRect(rect, radius, radius);
1308 break;
1309 }
1310 default:
1311 break;
1312 }
1313 }
1314 break;
1315 }
1316 case CE_ButtonBoxButtonLabel: {
1317 style->drawControl(CE_PushButtonLabel, opt, p, w);
1318 break;
1319 }
1320 case CE_TextButton: {
1321 if (const QStyleOptionButton *option = qstyleoption_cast<const QStyleOptionButton *>(opt)) {
1322 DStyleHelper dstyle(style);
1323 p->setPen(dstyle.getColor(option, QPalette::Highlight));
1324 p->drawText(opt->rect, option->text);
1325 }
1326 break;
1327 }
1328 default:
1329 break;
1330 }
1331 }
1332
1333 /*!
1334 * \~chinese \brief DStyle::pixelMetric
1335 * \~chinese \sa QStyle::pixelMetric()
1336 */
1337 int DStyle::pixelMetric(const QStyle *style, DStyle::PixelMetric m, const QStyleOption *opt, const QWidget *widget)
1338 {
1339 DStyleHelper dstyle(style);
1340
1341 switch (m) {
1342 case PM_FocusBorderWidth: Q_FALLTHROUGH();
1343 case PM_FocusBorderSpacing:
1344 return 2;
1345 case PM_FrameRadius:
1346 if (widget) {
1347 const QVariant &radius_value = widget->property("_d_dtk_frameRadius");
1348 bool ok = false;
1349 int radius = radius_value.toInt(&ok);
1350 if (ok && radius >= 0) {
1351 return radius;
1352 }
1353 }
1354 return 8;
1355 case PM_TopLevelWindowRadius:
1356 return 18;
1357 case PM_ShadowRadius:
1358 return 0;
1359 case PM_ShadowHOffset:
1360 return 0;
1361 case PM_ShadowVOffset:
1362 return 1;
1363 case PM_FrameMargins: {
1364 int shadow_radius = dstyle.pixelMetric(PM_ShadowRadius, opt, widget);
1365 int shadow_xoffset = dstyle.pixelMetric(PM_ShadowHOffset, opt, widget);
1366 int shadow_yoffset = dstyle.pixelMetric(PM_ShadowVOffset, opt, widget);
1367 int margins = shadow_radius + qMax(shadow_xoffset, shadow_yoffset);
1368
1369 return margins;
1370 }
1371 case PM_IconButtonIconSize: {
1372 if (const DStyleOptionButton *btn = qstyleoption_cast<const DStyleOptionButton *>(opt)) {
1373 if (btn->features & DStyleOptionButton::FloatingButton) {
1374 return 20;
1375 }
1376 }
1377 return 12;
1378 }
1379 case PM_SwitchButtonHandleWidth:
1380 return 30;
1381 case PM_SwithcButtonHandleHeight:
1382 return 24;
1383 case PM_FloatingWidgetRadius: {
1384 if (const DStyleOptionFloatingWidget *wid = qstyleoption_cast<const DStyleOptionFloatingWidget *>(opt)) {
1385 if (wid->frameRadius != -1)
1386 return wid->frameRadius;
1387 }
1388 return dstyle.pixelMetric(PM_TopLevelWindowRadius, opt, widget);
1389 }
1390 case PM_FloatingWidgetShadowRadius:
1391 return 8;
1392 case PM_FloatingWidgetShadowHOffset:
1393 return 0;
1394 case PM_FloatingWidgetShadowVOffset:
1395 return 4;
1396 case PM_FloatingWidgetShadowMargins: {
1397 int shadow_radius = dstyle.pixelMetric(PM_FloatingWidgetShadowRadius, opt, widget);
1398 int shadow_hoffset = dstyle.pixelMetric(PM_FloatingWidgetShadowHOffset, opt, widget);
1399 int shadow_voffset = dstyle.pixelMetric(PM_FloatingWidgetShadowVOffset, opt, widget);
1400
1401 return (shadow_radius + qMax(shadow_hoffset, shadow_voffset)) / 2;
1402 }
1403 case PM_ContentsMargins:
1404 case PM_ContentsSpacing:
1405 return 10;
1406 case PM_ButtonMinimizedSize:
1407 return 36;
1408 default:
1409 break;
1410 }
1411
1412 return -1;
1413 }
1414
1415 /*!
1416 * \~chinese \brief DStyle::subElementRect
1417 * \~chinese \sa QStyle::subElementRect()
1418 */
1419 QRect DStyle::subElementRect(const QStyle *style, DStyle::SubElement r, const QStyleOption *opt, const QWidget *widget)
1420 {
1421 Q_UNUSED(widget)
1422
1423 switch (r) {
1424 case SE_IconButtonIcon:
1425 if (const DStyleOptionButton *btn = qstyleoption_cast<const DStyleOptionButton *>(opt)) {
1426 if (btn->features & DStyleOptionButton::FloatingButton) {
1427 QRect icon_rect(opt->rect);
1428 icon_rect.setWidth(opt->rect.width() * 0.75);
1429 icon_rect.setHeight(opt->rect.height() * 0.75);
1430 icon_rect.moveCenter(opt->rect.center());
1431
1432 return icon_rect;
1433 }
1434 }
1435
1436 return opt->rect;
1437 case SE_SwitchButtonGroove: {
1438 if (const DStyleOptionButton *btn = qstyleoption_cast<const DStyleOptionButton *>(opt)) {
1439 return btn->rect;
1440 }
1441 break;
1442 }
1443 case SE_SwitchButtonHandle: {
1444 if (const DStyleOptionButton *btn = qstyleoption_cast<const DStyleOptionButton *>(opt)) {
1445 DStyleHelper dstyle(style);
1446 int handleWidth = dstyle.pixelMetric(PM_SwitchButtonHandleWidth, opt, widget);
1447 int handleHeight = dstyle.pixelMetric(PM_SwithcButtonHandleHeight, opt, widget);
1448 QRect rectHandle(0, 0, handleWidth, handleHeight);
1449
1450 if (btn->state & QStyle::State_On) {
1451 rectHandle.moveRight(opt->rect.right());
1452 } else {
1453 rectHandle.moveLeft(opt->rect.left());
1454 }
1455
1456 return rectHandle;
1457 }
1458 break;
1459 }
1460 case SE_FloatingWidget: {
1461 if (const DStyleOptionFloatingWidget *btn = qstyleoption_cast<const DStyleOptionFloatingWidget *>(opt)) {
1462 DStyleHelper dstyle(style);
1463 QRect rect = btn->rect;
1464 int shadowMarge = dstyle.pixelMetric(PM_FloatingWidgetShadowMargins, opt, widget);
1465 QRect rectBtn = rect.adjusted(shadowMarge, shadowMarge, -shadowMarge, -shadowMarge);
1466
1467 return rectBtn;
1468 }
1469 break;
1470 }
1471 case SE_ButtonBoxButtonContents:
1472 return style->subElementRect(SE_PushButtonContents, opt, widget);
1473 case SE_ButtonBoxButtonFocusRect:
1474 return style->subElementRect(SE_PushButtonFocusRect, opt, widget);
1475 default:
1476 break;
1477 }
1478
1479 return QRect();
1480 }
1481
1482 /*!
1483 * \~chinese \brief DStyle::sizeFromContents
1484 * \~chinese \sa QStyle::sizeFromContents()
1485 */
1486 QSize DStyle::sizeFromContents(const QStyle *style, DStyle::ContentsType ct, const QStyleOption *opt, const QSize &contentsSize, const QWidget *widget)
1487 {
1488 Q_UNUSED(widget)
1489
1490 switch (ct) {
1491 case CT_IconButton:
1492 if (const DStyleOptionButton *btn = qstyleoption_cast<const DStyleOptionButton *>(opt)) {
1493 if (btn->features & DStyleOptionButton::FloatingButton) {
1494 return btn->iconSize * 2.5;
1495 }
1496
1497 if (btn->features & DStyleOptionButton::Flat) {
1498 return contentsSize.expandedTo(btn->iconSize);
1499 }
1500
1501 return style->sizeFromContents(CT_PushButton, opt, btn->iconSize, widget);
1502 }
1503 Q_FALLTHROUGH();
1504 case CT_SwitchButton: {
1505 DStyleHelper dstyle(style);
1506 int w = dstyle.pixelMetric(PM_SwitchButtonHandleWidth, opt, widget);
1507 int h = dstyle.pixelMetric(PM_SwithcButtonHandleHeight, opt, widget);
1508 QSize size(qMax(contentsSize.width(), w * 5 / 3), qMax(contentsSize.height(), h));
1509
1510 return size;
1511 }
1512 case CT_FloatingWidget: {
1513 DStyleHelper dstyle(style);
1514 int margins = dstyle.pixelMetric(PM_FloatingWidgetShadowMargins, opt, widget);
1515 int window_radius = dstyle.pixelMetric(PM_FloatingWidgetRadius, opt, widget);
1516 QSize size(2 * margins + qMax(2 * window_radius, contentsSize.width() + window_radius),
1517 2 * margins + qMax(2 * window_radius, contentsSize.height()));
1518 return size;
1519 }
1520 case CT_ButtonBoxButton: {
1521 QSize size = style->sizeFromContents(CT_PushButton, opt, contentsSize, widget);
1522
1523 if (const DStyleOptionButtonBoxButton *btn = qstyleoption_cast<const DStyleOptionButtonBoxButton *>(opt)) {
1524 if (btn->text.isEmpty()) {
1525 // 只有图标时高度至少和宽度一致
1526 size.setHeight(qMax(size.width(), size.height()));
1527 }
1528
1529 int frame_margin = DStyleHelper(style).pixelMetric(PM_FrameMargins, opt, widget);
1530 switch (btn->position) {
1531 case DStyleOptionButtonBoxButton::Beginning:
1532 case DStyleOptionButtonBoxButton::End:
1533 size.rwidth() -= frame_margin;
1534 break;
1535 case DStyleOptionButtonBoxButton::Middle:
1536 size.rwidth() -= 2 * frame_margin;
1537 break;
1538 default:
1539 break;
1540 }
1541 }
1542
1543 return size;
1544 }
1545 default:
1546 break;
1547 }
1548
1549 return contentsSize;
1550 }
1551
1552 /*!
1553 * \~chinese \brief DStyle::standardIcon
1554 * \~chinese \sa QStyle::standardIcon()
1555 */
1556 QIcon DStyle::standardIcon(const QStyle *style, DStyle::StandardPixmap st, const QStyleOption *opt, const QWidget *widget)
1557 {
1558 Q_UNUSED(opt)
1559 Q_UNUSED(style)
1560 Q_UNUSED(widget)
1561
1562 #define CASE_ICON(Value) \
1563 case SP_##Value: { \
1564 DStyledIconEngine *icon_engine = new DStyledIconEngine(DDrawUtils::draw##Value, QStringLiteral(#Value)); \
1565 return QIcon(icon_engine);}
1566
1567 switch (st) {
1568 CASE_ICON(SelectElement)
1569
1570 case SP_IndicatorUnchecked:
1571 return QIcon::fromTheme("unselected_indicator");
1572 case SP_IndicatorChecked: {
1573 const QIcon &icon = QIcon::fromTheme("selected_indicator");
1574 DStyledIconEngine *icon_engine = new DStyledIconEngine(std::bind(DStyledIconEngine::drawIcon, icon, std::placeholders::_1, std::placeholders::_2), QStringLiteral("IndicatorChecked"));
1575 icon_engine->setFrontRole(widget, DPalette::Highlight);
1576 return QIcon(icon_engine);
1577 }
1578 case SP_DeleteButton:
1579 return QIcon::fromTheme("list_delete");
1580 case SP_AddButton:
1581 return QIcon::fromTheme("list_add");
1582 case SP_ForkElement:
1583 return QIcon::fromTheme("fork_indicator");
1584 case SP_CloseButton:
1585 return QIcon::fromTheme("window-close_round");
1586 case SP_DecreaseElement:
1587 return QIcon::fromTheme("button_reduce");
1588 case SP_IncreaseElement:
1589 return QIcon::fromTheme("button_add");
1590 case SP_MarkElement:
1591 return QIcon::fromTheme("mark_indicator");
1592 case SP_UnlockElement:
1593 return QIcon::fromTheme("unlock_indicator");
1594 case SP_LockElement:
1595 return QIcon::fromTheme("lock_indicator");
1596 case SP_ExpandElement:
1597 return QIcon::fromTheme("go-up");
1598 case SP_ReduceElement:
1599 return QIcon::fromTheme("go-down");
1600 case SP_ArrowEnter:
1601 return style->standardIcon(SP_ArrowForward);
1602 case SP_ArrowNext:
1603 return QIcon::fromTheme("next_indicator");
1604 case SP_ArrowLeave:
1605 return style->standardIcon(SP_ArrowBack);
1606 case SP_ArrowPrev:
1607 return QIcon::fromTheme("prev_indicator");
1608 case SP_EditElement:
1609 return QIcon::fromTheme("edit");
1610 case SP_MediaVolumeLowElement:
1611 return QIcon::fromTheme("audio-volume-low");
1612 case SP_MediaVolumeHighElement:
1613 return QIcon::fromTheme("audio-volume-medium");
1614 case SP_MediaVolumeMutedElement:
1615 return QIcon::fromTheme("audio-volume-muted");
1616 case SP_MediaVolumeLeftElement:
1617 return QIcon::fromTheme("audio-volume-left");
1618 case SP_MediaVolumeRightElement:
1619 return QIcon::fromTheme("audio-volume-right");
1620 case SP_IndicatorMajuscule:
1621 return QIcon::fromTheme("caps_lock");
1622 case SP_ShowPassword:
1623 return QIcon::fromTheme("password_show");
1624 case SP_HidePassword:
1625 return QIcon::fromTheme("password_hide");
1626 case SP_IndicatorSearch:
1627 return QIcon::fromTheme("search_indicator");
1628 default:
1629 break;
1630 }
1631
1632 return QIcon();
1633 }
1634
1635 /*!
1636 * \~chinese \brief DStyle::styleHint
1637 * \~chinese \sa QStyle::styleHint()
1638 */
1639 int DStyle::styleHint(QStyle::StyleHint sh, const QStyleOption *opt, const QWidget *w, QStyleHintReturn *shret) const
1640 {
1641 switch (sh) {
1642 case SH_ScrollBar_MiddleClickAbsolutePosition:
1643 case SH_FontDialog_SelectAssociatedText:
1644 case SH_Menu_KeyboardSearch:
1645 case SH_Menu_Scrollable:
1646 case SH_Menu_SloppySubMenus:
1647 case SH_ComboBox_ListMouseTracking:
1648 case SH_Menu_MouseTracking:
1649 case SH_MenuBar_MouseTracking:
1650 case SH_Menu_FillScreenWithScroll:
1651 case SH_ItemView_ChangeHighlightOnFocus:
1652 case SH_TabBar_PreferNoArrows:
1653 case SH_ComboBox_Popup:
1654 case SH_Slider_StopMouseOverSlider:
1655 case SH_SpinBox_AnimateButton:
1656 case SH_SpinControls_DisableOnBounds:
1657 case SH_Menu_FadeOutOnHide:
1658 case SH_ItemView_ShowDecorationSelected:
1659 case SH_ScrollBar_Transient:
1660 case SH_TitleBar_ShowToolTipsOnButtons:
1661 return true;
1662 case SH_SpinBox_ButtonsInsideFrame:
1663 case SH_ScrollBar_LeftClickAbsolutePosition:
1664 case SH_Slider_SnapToValue:
1665 case SH_Menu_AllowActiveAndDisabled:
1666 case SH_BlinkCursorWhenTextSelected:
1667 case SH_UnderlineShortcut:
1668 case SH_ItemView_PaintAlternatingRowColorsForEmptyArea:
1669 case SH_ComboBox_AllowWheelScrolling:
1670 return false;
1671 case SH_Header_ArrowAlignment:
1672 return Qt::AlignVCenter | Qt::AlignRight;
1673 case SH_Menu_SubMenuPopupDelay:
1674 return 100;
1675 case SH_ToolTipLabel_Opacity:
1676 return 255;
1677 case SH_RequestSoftwareInputPanel:
1678 return RSIP_OnMouseClickAndAlreadyFocused;
1679 case SH_ItemView_ScrollMode:
1680 return QAbstractItemView::ScrollPerPixel;
1681 case SH_Widget_Animation_Duration:
1682 return 300;
1683 case SH_Button_FocusPolicy:
1684 return Qt::TabFocus;
1685 case SH_ScrollView_FrameOnlyAroundContents:
1686 return false;
1687 case SH_LineEdit_PasswordCharacter:
1688 return 0x25CF;
1689 default:
1690 break;
1691 }
1692
1693 return QCommonStyle::styleHint(sh, opt, w, shret);
1694 }
1695
1696 /*!
1697 * \~chinese \brief DStyle::standardPalette 获取标准调色板
1698 * \~chinese \return 调色板
1699 */
1700 QPalette DStyle::standardPalette() const
1701 {
1702 QPalette pa = DGuiApplicationHelper::instance()->standardPalette(DGuiApplicationHelper::LightType);
1703 // 将无效的颜色fallback到QCommonStyle提供的palette,且在resolve操作中将detach pa对象
1704 // 防止在QApplication initSystemPalette的setSystemPalette中获取到一个和 QGuiApplicationPrivate::platformTheme()->palette()
1705 // 一样的QPalette对象,这样将导致QApplicationPrivate::setPalette_helper中将 app_pal 和新的QPalette对比时认为他们没有变化
1706 return pa.resolve(QCommonStyle::standardPalette());
1707 }
1708
1709 QPixmap DStyle::generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const
1710 {
1711 Q_UNUSED(opt)
1712
1713 if (iconMode == QIcon::Active) {
1714 QImage image = pixmap.toImage();
1715 QPainter pa(&image);
1716
1717 if (!pa.isActive())
1718 return QCommonStyle::generatedIconPixmap(iconMode, pixmap, opt);
1719
1720 pa.setCompositionMode(QPainter::CompositionMode_SourceAtop);
1721
1722 if (DGuiApplicationHelper::toColorType(opt->palette) == DGuiApplicationHelper::DarkType) {
1723 pa.fillRect(image.rect(), QColor(255, 255, 255, 0.1 * 255));
1724 } else {
1725 pa.fillRect(image.rect(), QColor(0, 0, 0, 0.1 * 255));
1726 }
1727
1728 return QPixmap::fromImage(image);
1729 } else if (iconMode == QIcon::Disabled) {
1730 QImage image = pixmap.toImage();
1731 QPainter pa(&image);
1732
1733 if (!pa.isActive())
1734 return QCommonStyle::generatedIconPixmap(iconMode, pixmap, opt);
1735
1736 pa.setCompositionMode(QPainter::CompositionMode_DestinationIn);
1737 pa.fillRect(image.rect(), QColor(0, 0, 0, 255 * 0.4));
1738
1739 return QPixmap::fromImage(image);
1740 }
1741
1742 return QCommonStyle::generatedIconPixmap(iconMode, pixmap, opt);
1743 }
1744
1745 DStyle::StyleState DStyle::getState(const QStyleOption *option)
1746 {
1747 DStyle::StyleState state = DStyle::SS_NormalState;
1748
1749 if (!option->state.testFlag(DStyle::State_Enabled)) {
1750 return DStyle::SS_NormalState;
1751 }
1752
1753 if (option->state.testFlag(DStyle::State_Sunken)) {
1754 state = DStyle::SS_PressState;
1755 } else if (option->state.testFlag(DStyle::State_MouseOver)) {
1756 state = DStyle::SS_HoverState;
1757 }
1758
1759 return state;
1760 }
1761
1762 static DStyle::StateFlags getFlags(const QStyleOption *option)
1763 {
1764 DStyle::StateFlags flags = 0;
1765
1766 if (option->state.testFlag(DStyle::State_On)) {
1767 flags |= DStyle::SS_CheckedFlag;
1768 }
1769
1770 if (option->state.testFlag(DStyle::State_Selected)) {
1771 flags |= DStyle::SS_SelectedFlag;
1772 }
1773
1774 if (option->state.testFlag(DStyle::State_HasFocus)) {
1775 flags |= DStyle::SS_FocusFlag;
1776 }
1777
1778 return flags;
1779 }
1780
1781 /*!
1782 * \~chinese \brief DStyle::drawPrimitive
1783 * \~chinese \sa QStyle::drawPrimitive()
1784 */
1785 void DStyle::drawPrimitive(QStyle::PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w) const
1786 {
1787 switch (pe) {
1788 case PE_IndicatorArrowUp:
1789 p->setPen(QPen(opt->palette.foreground(), 1));
1790 return DDrawUtils::drawArrowUp(p, opt->rect);
1791 case PE_IndicatorArrowDown:
1792 p->setPen(QPen(opt->palette.foreground(), 1));
1793 return DDrawUtils::drawArrowDown(p, opt->rect);
1794 case PE_IndicatorArrowRight:
1795 p->setPen(QPen(opt->palette.foreground(), 1));
1796 return DDrawUtils::drawArrowRight(p, opt->rect);
1797 case PE_IndicatorArrowLeft:
1798 p->setPen(QPen(opt->palette.foreground(), 1));
1799 return DDrawUtils::drawArrowLeft(p, opt->rect);
1800 case PE_IndicatorHeaderArrow:
1801 if (const QStyleOptionHeader *header = qstyleoption_cast<const QStyleOptionHeader *>(opt)) {
1802 p->setPen(QPen(opt->palette.foreground(), 1));
1803 // sort up draw down icon, since both windows, mac and even wikipedia did this...
1804 if (header->sortIndicator & QStyleOptionHeader::SortUp) {
1805 return proxy()->drawPrimitive(PE_IndicatorArrowDown, opt, p, w);
1806 } else if (header->sortIndicator & QStyleOptionHeader::SortDown) {
1807 return proxy()->drawPrimitive(PE_IndicatorArrowUp, opt, p, w);
1808 }
1809 }
1810 return;
1811 default:
1812 break;
1813 }
1814
1815 if (Q_UNLIKELY(pe < QStyle::PE_CustomBase)) {
1816 return QCommonStyle::drawPrimitive(pe, opt, p, w);
1817 }
1818
1819 drawPrimitive(this, static_cast<PrimitiveElement>(pe), opt, p, w);
1820 }
1821
1822 /*!
1823 * \~chinese \brief DStyle::drawControl
1824 * \~chinese \sa QStyle::drawControl()
1825 */
1826 void DStyle::drawControl(QStyle::ControlElement ce, const QStyleOption *opt, QPainter *p, const QWidget *w) const
1827 {
1828 if (Q_UNLIKELY(ce < QStyle::CE_CustomBase)) {
1829 return QCommonStyle::drawControl(ce, opt, p, w);
1830 }
1831
1832 drawControl(this, static_cast<ControlElement>(ce), opt, p, w);
1833 }
1834
1835 /*!
1836 * \~chinese \brief DStyle::pixelMetric
1837 * \~chinese \sa QStyle::pixelMetric()
1838 */
1839 int DStyle::pixelMetric(QStyle::PixelMetric m, const QStyleOption *opt, const QWidget *widget) const
1840 {
1841 switch (m) {
1842 case PM_ButtonDefaultIndicator:
1843 case PM_ButtonShiftHorizontal:
1844 case PM_ButtonShiftVertical:
1845 case PM_FocusFrameVMargin:
1846 case PM_FocusFrameHMargin:
1847 case PM_MenuBarPanelWidth:
1848 case PM_MenuDesktopFrameWidth:
1849 return 0;
1850 case PM_ButtonMargin:
1851 case PM_DefaultChildMargin:
1852 return pixelMetric(PM_FrameRadius, opt, widget);
1853 case PM_DefaultFrameWidth:
1854 return 1;
1855 case PM_DefaultLayoutSpacing:
1856 return 5;
1857 case PM_DefaultTopLevelMargin:
1858 return pixelMetric(PM_TopLevelWindowRadius, opt, widget) / 2;
1859 case PM_MenuBarItemSpacing:
1860 return 6;
1861 case PM_IndicatorWidth:
1862 case PM_IndicatorHeight:
1863 case PM_ExclusiveIndicatorHeight:
1864 case PM_ExclusiveIndicatorWidth:
1865 return 14;
1866 case PM_ScrollBarSliderMin:
1867 return 36;
1868 case PM_SliderLength:
1869 case PM_ScrollBarExtent:
1870 return 20;
1871 case PM_SliderControlThickness:
1872 return 24;
1873 case PM_MenuBarHMargin:
1874 return 10;
1875 case PM_MenuBarVMargin:
1876 return 6;
1877 case PM_SliderTickmarkOffset:
1878 return 14;
1879 case PM_MenuHMargin:
1880 return 0;
1881 case PM_MenuVMargin:
1882 return pixelMetric(PM_TopLevelWindowRadius, opt, widget);
1883 case PM_SmallIconSize:
1884 return 14;
1885 case PM_ButtonIconSize:
1886 return 16;
1887 case PM_ListViewIconSize:
1888 case PM_LargeIconSize:
1889 return 24;
1890 case PM_IconViewIconSize:
1891 return 32;
1892 case PM_ScrollView_ScrollBarOverlap:
1893 return true;
1894 default:
1895 break;
1896 }
1897
1898 if (Q_UNLIKELY(m < QStyle::PM_CustomBase)) {
1899 return QCommonStyle::pixelMetric(m, opt, widget);
1900 }
1901
1902 return pixelMetric(this, static_cast<PixelMetric>(m), opt, widget);
1903 }
1904
1905 /*!
1906 * \~chinese \brief DStyle::subElementRect
1907 * \~chinese \sa QStyle::subElementRect()
1908 */
1909 QRect DStyle::subElementRect(QStyle::SubElement r, const QStyleOption *opt, const QWidget *widget) const
1910 {
1911 if (Q_UNLIKELY(r < QStyle::SE_CustomBase)) {
1912 return QCommonStyle::subElementRect(r, opt, widget);
1913 }
1914
1915 return subElementRect(this, static_cast<DStyle::SubElement>(r), opt, widget);
1916 }
1917
1918 /*!
1919 * \~chinese \brief DStyle::sizeFromContents
1920 * \~chinese \sa QStyle::sizeFromContents()
1921 */
1922 QSize DStyle::sizeFromContents(QStyle::ContentsType ct, const QStyleOption *opt, const QSize &contentsSize, const QWidget *widget) const
1923 {
1924 if (Q_UNLIKELY(ct < QStyle::CT_CustomBase)) {
1925 return QCommonStyle::sizeFromContents(ct, opt, contentsSize, widget);
1926 }
1927
1928 return sizeFromContents(this, static_cast<DStyle::ContentsType>(ct), opt, contentsSize, widget);
1929 }
1930
1931 /*!
1932 * \~chinese \brief DStyle::standardIcon
1933 * \~chinese \param \sa QStyle::standardIcon()
1934 */
1935 QIcon DStyle::standardIcon(QStyle::StandardPixmap st, const QStyleOption *opt, const QWidget *widget) const
1936 {
1937 switch (st) {
1938 CASE_ICON(TitleBarMenuButton)
1939 CASE_ICON(TitleBarMinButton)
1940 CASE_ICON(TitleBarMaxButton)
1941 CASE_ICON(TitleBarCloseButton)
1942 CASE_ICON(TitleBarNormalButton)
1943 case SP_LineEditClearButton:
1944 return QIcon::fromTheme("button_edit-clear");
1945 break;
1946 default:
1947 break;
1948 }
1949
1950 if (st < QStyle::SP_CustomBase) {
1951 return QCommonStyle::standardIcon(st, opt, widget);
1952 }
1953
1954 return standardIcon(this, static_cast<DStyle::StandardPixmap>(st), opt, widget);
1955 }
1956
1957 /*!
1958 * \~chinese \brief DStyle::generatedBrush获取一个加工后的画刷
1959 * \~chinese \param \sa option QStyleOption
1960 * \~chinese \param base 画刷
1961 * \~chinese \param \sa cg QPalette::ColorGroup
1962 * \~chinese \param \sa role QPalette::ColorRole
1963 * \~chinese \return 加工后的画刷
1964 */
1965 QBrush DStyle::generatedBrush(const QStyleOption *option, const QBrush &base, QPalette::ColorGroup cg, QPalette::ColorRole role) const
1966 {
1967 return generatedBrush(getState(option), option, base, cg, role);
1968 }
1969
1970 /*!
1971 * \~chinese \brief DStyle::generatedBrush获取一个加工后的画刷
1972 * \~chinese \param \sa state DStyle::StyleState
1973 * \~chinese \param \sa option QStyleOption
1974 * \~chinese \param base 画刷
1975 * \~chinese \param \sa cg QPalette::ColorGroup
1976 * \~chinese \param \sa role QPalette::ColorRole
1977 * \~chinese \return 加工后的画刷
1978 */
1979 QBrush DStyle::generatedBrush(DStyle::StyleState state, const QStyleOption *option, const QBrush &base, QPalette::ColorGroup cg, QPalette::ColorRole role) const
1980 {
1981 if (auto proxy = qobject_cast<const DStyle *>(this->proxy())) {
1982 return proxy->generatedBrush(getFlags(option) | state, base, cg, role, option);
1983 }
1984
1985 return generatedBrush(getFlags(option) | state, base, cg, role, option);
1986 }
1987
1988 /*!
1989 * \~chinese \brief DStyle::generatedBrush获取一个加工后的画刷
1990 * \~chinese \param \sa flags DStyle::StateFlags
1991 * \~chinese \param base 画刷
1992 * \~chinese \param \sa cg QPalette::ColorGroup
1993 * \~chinese \param \sa role QPalette::ColorRole
1994 * \~chinese \param \sa option QStyleOption
1995 * \~chinese \return 加工后的画刷
1996 */
1997 QBrush DStyle::generatedBrush(StateFlags flags, const QBrush &base, QPalette::ColorGroup cg, QPalette::ColorRole role, const QStyleOption *option) const
1998 {
1999 Q_UNUSED(cg)
2000
2001 QColor colorNew = base.color();
2002
2003 if (!colorNew.isValid())
2004 return base;
2005
2006 if ((flags & StyleState_Mask) == SS_HoverState) {
2007 switch (role) {
2008 case QPalette::Button:
2009 case QPalette::Light:
2010 case QPalette::Dark:
2011 colorNew = adjustColor(colorNew, 0, 0, -10, 0, 0, 0, 0);
2012 break;
2013 case QPalette::Highlight:
2014 colorNew = adjustColor(colorNew, 0, 0, +20);
2015 break;
2016 case QPalette::ButtonText: {
2017 DGuiApplicationHelper::ColorType type = DGuiApplicationHelper::toColorType(option->palette);
2018 colorNew = adjustColor(colorNew, 0, 0, type == DGuiApplicationHelper::DarkType ? 20 : -50);
2019 break;
2020 }
2021 case QPalette::HighlightedText:
2022 colorNew = adjustColor(colorNew, 0, 0, 20);
2023 break;
2024 default:
2025 break;
2026 }
2027
2028 return colorNew;
2029 } else if ((flags & StyleState_Mask) == SS_PressState) {
2030 QColor hightColor = option->palette.highlight().color();
2031 hightColor.setAlphaF(0.1);
2032
2033 switch (role) {
2034 case QPalette::Button:
2035 case QPalette::Light: {
2036 colorNew = adjustColor(colorNew, 0, 0, -20, 0, 0, +20, 0);
2037 colorNew = blendColor(colorNew, hightColor);
2038 break;
2039 }
2040 case QPalette::Dark: {
2041 colorNew = adjustColor(colorNew, 0, 0, -15, 0, 0, +20, 0);
2042 colorNew = blendColor(colorNew, hightColor);
2043 break;
2044 }
2045 case QPalette::Highlight:
2046 colorNew = adjustColor(colorNew, 0, 0, -10);
2047 break;
2048 case QPalette::ButtonText:
2049 return option->palette.highlight();
2050 case QPalette::HighlightedText:
2051 colorNew = adjustColor(colorNew, 0, 0, 0, 0, 0, 0, -40);
2052 break;
2053 default:
2054 break;
2055 }
2056
2057 return colorNew;
2058 }
2059
2060 return base;
2061 }
2062
2063 /*!
2064 * \~chinese \brief DStyle::generatedBrush获取一个加工后的画刷
2065 * \~chinese \param \sa option QStyleOption
2066 * \~chinese \param base 画刷
2067 * \~chinese \param \sa cg QPalette::ColorGroup
2068 * \~chinese \param \sa type DPalette::ColorType
2069 * \~chinese \return 加工后的画刷
2070 */
2071 QBrush DStyle::generatedBrush(const QStyleOption *option, const QBrush &base, QPalette::ColorGroup cg, DPalette::ColorType type) const
2072 {
2073 return generatedBrush(getState(option), option, base, cg, type);
2074 }
2075
2076 /*!
2077 * \~chinese \brief DStyle::generatedBrush获取一个加工后的画刷
2078 * \~chinese \param \sa state DStyle::StyleState
2079 * \~chinese \param \sa option QStyleOption
2080 * \~chinese \param base 画刷
2081 * \~chinese \param \sa cg QPalette::ColorGroup
2082 * \~chinese \param \sa type DPalette::ColorType
2083 * \~chinese \return 加工后的画刷
2084 */
2085 QBrush DStyle::generatedBrush(DStyle::StyleState state, const QStyleOption *option, const QBrush &base, QPalette::ColorGroup cg, DPalette::ColorType type) const
2086 {
2087 if (auto proxy = qobject_cast<const DStyle *>(this->proxy())) {
2088 return proxy->generatedBrush(getFlags(option) | state, base, cg, type, option);
2089 }
2090
2091 return generatedBrush(getFlags(option) | state, base, cg, type, option);
2092 }
2093
2094 /*!
2095 * \~chinese \brief DStyle::generatedBrush获取一个加工后的画刷
2096 * \~chinese \param \sa flags DStyle::StateFlags
2097 * \~chinese \param base画刷
2098 * \~chinese \param \sa cg QPalette::ColorGroup
2099 * \~chinese \param \sa type DPalette::ColorType
2100 * \~chinese \param \sa option QStyleOption()
2101 * \~chinese \return 加工后的画刷
2102 */
2103 QBrush DStyle::generatedBrush(StateFlags flags, const QBrush &base, QPalette::ColorGroup cg, DPalette::ColorType type, const QStyleOption *option) const
2104 {
2105 Q_UNUSED(cg)
2106 Q_UNUSED(option)
2107
2108 QColor colorNew = base.color();
2109
2110 if (!colorNew.isValid())
2111 return base;
2112
2113 if ((flags & StyleState_Mask) == SS_HoverState) {
2114 switch (type) {
2115 case DPalette::LightLively:
2116 colorNew = adjustColor(colorNew, 0, 0, +30, 0, 0, 0, 0);
2117 break;
2118 case DPalette::DarkLively:
2119 colorNew = adjustColor(colorNew, 0, 0, +10, 0, 0, 0, 0);
2120 break;
2121 case DPalette::ItemBackground: {
2122 DGuiApplicationHelper::ColorType ct = DGuiApplicationHelper::toColorType(colorNew);
2123 colorNew = ct == DGuiApplicationHelper::LightType ? adjustColor(colorNew, 0, 0, -10, 0, 0, 0, +10)
2124 : adjustColor(colorNew, 0, 0, +10, 0, 0, 0, +10);
2125 break;
2126 }
2127 case DPalette::TextWarning: {
2128 colorNew = adjustColor(colorNew, 0, 0, -10);
2129 break;
2130 }
2131 default:
2132 break;
2133 }
2134
2135 return colorNew;
2136 } else if ((flags & StyleState_Mask) == SS_PressState) {
2137 switch (type) {
2138 case DPalette::LightLively:
2139 colorNew = adjustColor(colorNew, 0, 0, -30, 0, 0, 0, 0);
2140 break;
2141 case DPalette::DarkLively:
2142 colorNew = adjustColor(colorNew, 0, 0, -20, 0, 0, 0, 0);
2143 break;
2144 case DPalette::TextWarning: {
2145 colorNew = adjustColor(colorNew, 0, 0, -30);
2146 break;
2147 }
2148 default:
2149 break;
2150 }
2151
2152 return colorNew;
2153 } else if ((flags & StyleState_Mask) == SS_NormalState) {
2154 switch (type) {
2155 case DPalette::LightLively:
2156 colorNew = adjustColor(colorNew, 0, 0, +40, 0, 0, 0, 0);
2157 break;
2158 case DPalette::DarkLively:
2159 colorNew = adjustColor(colorNew, 0, 0, +20, 0, 0, 0, 0);
2160 break;
2161 default:
2162 break;
2163 }
2164
2165 return colorNew;
2166 }
2167
2168 return base;
2169 }
2170
2171 #if QT_CONFIG(itemviews)
2172 /*!
2173 * \~chinese \brief DStyle::viewItemTextLayout视图项文本布局
2174 * \~chinese \param textLayout文本布局
2175 * \~chinese \param lineWidth 宽度
2176 * \~chinese \return 文本内容所占大小
2177 */
2178 QSizeF DStyle::viewItemTextLayout(QTextLayout &textLayout, int lineWidth)
2179 {
2180 qreal height = 0;
2181 qreal widthUsed = 0;
2182 textLayout.beginLayout();
2183 while (true) {
2184 QTextLine line = textLayout.createLine();
2185 if (!line.isValid())
2186 break;
2187 line.setLineWidth(lineWidth);
2188 line.setPosition(QPointF(0, height));
2189 height += line.height();
2190 widthUsed = qMax(widthUsed, line.naturalTextWidth());
2191 }
2192 textLayout.endLayout();
2193 return QSizeF(widthUsed, height);
2194 }
2195
2196 /*!
2197 * \~chinese \brief DStyle::viewItemSize 视图项大小
2198 * \~chinese \param\sa style QStyle()
2199 * \~chinese \param\sa option QStyleOptionViewItem()
2200 * \~chinese \param \sa role Qt::ItemDataRole
2201 * \~chinese \return 文本内容所占大小
2202 */
2203 QSize DStyle::viewItemSize(const QStyle *style, const QStyleOptionViewItem *option, int role)
2204 {
2205 const QWidget *widget = option->widget;
2206 switch (role) {
2207 case Qt::CheckStateRole:
2208 if (option->features & QStyleOptionViewItem::HasCheckIndicator)
2209 return QSize(style->pixelMetric(QStyle::PM_IndicatorWidth, option, widget),
2210 style->pixelMetric(QStyle::PM_IndicatorHeight, option, widget));
2211 break;
2212 case Qt::DisplayRole:
2213 if (option->features & QStyleOptionViewItem::HasDisplay) {
2214 QTextOption textOption;
2215 textOption.setWrapMode(QTextOption::WordWrap);
2216 QTextLayout textLayout(option->text, option->font);
2217 textLayout.setTextOption(textOption);
2218 const bool wrapText = option->features & QStyleOptionViewItem::WrapText;
2219 int spacing = DStyleHelper(style).pixelMetric(DStyle::PM_ContentsSpacing, option, widget);
2220 QRect bounds = option->rect;
2221 switch (option->decorationPosition) {
2222 case QStyleOptionViewItem::Left:
2223 case QStyleOptionViewItem::Right: {
2224 if (wrapText && bounds.isValid()) {
2225 int width = bounds.width();
2226 if (option->features & QStyleOptionViewItem::HasDecoration)
2227 width -= option->decorationSize.width() + spacing;
2228 bounds.setWidth(width);
2229 } else
2230 bounds.setWidth(QFIXED_MAX);
2231 break;
2232 }
2233 case QStyleOptionViewItem::Top:
2234 case QStyleOptionViewItem::Bottom:
2235 if (wrapText)
2236 bounds.setWidth(bounds.isValid() ? bounds.width() - spacing : option->decorationSize.width());
2237 else
2238 bounds.setWidth(QFIXED_MAX);
2239 break;
2240 default:
2241 break;
2242 }
2243
2244 if (wrapText && option->features & QStyleOptionViewItem::HasCheckIndicator)
2245 bounds.setWidth(bounds.width() - style->pixelMetric(QStyle::PM_IndicatorWidth) - spacing);
2246
2247 const int lineWidth = bounds.width();
2248 const QSizeF size = viewItemTextLayout(textLayout, lineWidth);
2249 return QSize(qCeil(size.width()), qCeil(size.height()));
2250 }
2251 break;
2252 case Qt::DecorationRole:
2253 if (option->features & QStyleOptionViewItem::HasDecoration) {
2254 return option->decorationSize;
2255 }
2256 break;
2257 default:
2258 break;
2259 }
2260
2261 return QSize(0, 0);
2262 }
2263
2264 /*!
2265 * \~chinese \brief DStyle::viewItemLayout视图项组合(文字 + 图标 + 点击区域)
2266 * \~chinese \param \sa style QStyle()
2267 * \~chinese \param \sa opt QStyleOptionViewItem()
2268 * \~chinese \param pixmapRect 图标位置大小
2269 * \~chinese \param textRect 文字区域位置大小
2270 * \~chinese \param checkRect 点击区域位置大小
2271 * \~chinese \param sizehint 是否开启
2272 */
2273 void DStyle::viewItemLayout(const QStyle *style, const QStyleOptionViewItem *opt, QRect *pixmapRect, QRect *textRect, QRect *checkRect, bool sizehint)
2274 {
2275 Q_ASSERT(checkRect && pixmapRect && textRect);
2276 *pixmapRect = QRect(QPoint(0, 0), viewItemSize(style, opt, Qt::DecorationRole));
2277 *textRect = QRect(QPoint(0, 0), viewItemSize(style, opt, Qt::DisplayRole));
2278 *checkRect = QRect(QPoint(0, 0), viewItemSize(style, opt, Qt::CheckStateRole));
2279
2280 const DStyleHelper dstyle(style);
2281 const QWidget *widget = opt->widget;
2282 const bool hasCheck = checkRect->isValid();
2283 const bool hasPixmap = pixmapRect->isValid();
2284 const bool hasText = textRect->isValid();
2285 const int spacing = dstyle.pixelMetric(DStyle::PM_ContentsSpacing, opt, widget);
2286 const int x = opt->rect.left();
2287 const int y = opt->rect.top();
2288 int w, h;
2289
2290 if (textRect->height() == 0 && (!hasPixmap || !sizehint)) {
2291 //if there is no text, we still want to have a decent height for the item sizeHint and the editor size
2292 textRect->setHeight(opt->fontMetrics.height());
2293 }
2294
2295 QSize pm(0, 0);
2296 if (hasPixmap) {
2297 pm = pixmapRect->size();
2298 }
2299 if (sizehint) {
2300 h = qMax(checkRect->height(), qMax(textRect->height(), pm.height()));
2301 if (opt->decorationPosition == QStyleOptionViewItem::Left
2302 || opt->decorationPosition == QStyleOptionViewItem::Right) {
2303 w = textRect->width() + pm.width();
2304
2305 if (hasText) {
2306 w += spacing; // add spacing
2307 }
2308 } else {
2309 w = qMax(textRect->width(), pm.width());
2310 }
2311
2312 int cw = 0;
2313 QRect check;
2314 if (hasCheck) {
2315 cw = checkRect->width();
2316 w += cw + spacing;
2317
2318 if (opt->direction == Qt::RightToLeft) {
2319 check.setRect(x + w - cw, y, cw, h);
2320 } else {
2321 check.setRect(x, y, cw, h);
2322 }
2323 }
2324
2325 QRect display;
2326 QRect decoration;
2327 switch (opt->decorationPosition) {
2328 case QStyleOptionViewItem::Top: {
2329 h = textRect->height();
2330
2331 if (opt->direction == Qt::RightToLeft) {
2332 decoration.setRect(x, y, w - cw, pm.height());
2333 display.setRect(x, y + pm.height() + spacing, w - cw, h);
2334 } else {
2335 decoration.setRect(x + cw, y, w - cw, pm.height());
2336 display.setRect(x + cw, y + pm.height() + spacing, w - cw, h);
2337 }
2338 break;
2339 }
2340 case QStyleOptionViewItem::Bottom: {
2341 h = textRect->height() + pm.height();
2342
2343 if (opt->direction == Qt::RightToLeft) {
2344 display.setRect(x, y, w - cw, textRect->height());
2345 decoration.setRect(x, y + textRect->height() + spacing, w - cw, h - textRect->height());
2346 } else {
2347 display.setRect(x + cw, y, w - cw, textRect->height());
2348 decoration.setRect(x + cw, y + textRect->height() + spacing, w - cw, h - textRect->height());
2349 }
2350 break;
2351 }
2352 case QStyleOptionViewItem::Left: {
2353 if (opt->direction == Qt::LeftToRight) {
2354 decoration.setRect(x + cw, y, pm.width(), h);
2355 display.setRect(decoration.right() + spacing, y, w - pm.width() - cw, h);
2356 } else {
2357 display.setRect(x, y, w - pm.width() - cw, h);
2358 decoration.setRect(display.right() + spacing, y, pm.width(), h);
2359 }
2360 break;
2361 }
2362 case QStyleOptionViewItem::Right: {
2363 if (opt->direction == Qt::LeftToRight) {
2364 display.setRect(x + cw, y, w - pm.width() - cw, h);
2365 decoration.setRect(display.right() + spacing, y, pm.width(), h);
2366 } else {
2367 decoration.setRect(x, y, pm.width(), h);
2368 display.setRect(decoration.right() + spacing, y, w - pm.width() - cw, h);
2369 }
2370 break;
2371 }
2372 default:
2373 qWarning("doLayout: decoration position is invalid");
2374 decoration = *pixmapRect;
2375 break;
2376 }
2377
2378 *checkRect = check;
2379 *pixmapRect = decoration;
2380 *textRect = display;
2381 } else {
2382 w = opt->rect.width();
2383 h = opt->rect.height();
2384
2385 *pixmapRect = QStyle::alignedRect(opt->direction, opt->decorationAlignment,
2386 pixmapRect->size(), opt->rect);
2387
2388 QRect display = opt->rect;
2389
2390 switch (opt->decorationPosition) {
2391 case QStyleOptionViewItem::Top: {
2392 int residue_height = opt->rect.bottom() - pixmapRect->bottom();
2393
2394 // 空间不够时,要改变图标的位置来腾出空间
2395 if (textRect->height() > residue_height) {
2396 pixmapRect->moveTop(qMax(0, pixmapRect->top() - textRect->height() + residue_height));
2397 }
2398
2399 display.setTop(pixmapRect->bottom() + spacing);
2400 break;
2401 }
2402 case QStyleOptionViewItem::Bottom: {
2403 int residue_height = pixmapRect->top() - opt->rect.top();
2404
2405 // 空间不够时,要改变图标的位置来腾出空间
2406 if (textRect->height() > residue_height) {
2407 pixmapRect->moveBottom(qMin(opt->rect.bottom(), pixmapRect->bottom() + textRect->height() - residue_height));
2408 }
2409
2410 display.setBottom(pixmapRect->top() - spacing);
2411 break;
2412 }
2413 case QStyleOptionViewItem::Left:
2414 case QStyleOptionViewItem::Right:
2415 if (opt->decorationPosition == QStyleOptionViewItem::Left
2416 && opt->direction == Qt::LeftToRight) {
2417 int residue_width = pixmapRect->left() - opt->rect.left();
2418
2419 // 空间不够时,要改变图标的位置来腾出空间
2420 if (textRect->width() > residue_width) {
2421 pixmapRect->moveLeft(qMax(opt->rect.left(), pixmapRect->left() - textRect->width() + residue_width));
2422 }
2423
2424 display.setLeft(pixmapRect->right() + spacing);
2425 } else {
2426 int residue_width = opt->rect.right() - pixmapRect->left();
2427
2428 // 空间不够时,要改变图标的位置来腾出空间
2429 if (textRect->width() > residue_width) {
2430 pixmapRect->moveRight(qMin(opt->rect.right(), pixmapRect->right() + textRect->width() - residue_width));
2431 }
2432
2433 display.setRight(pixmapRect->left() - spacing);
2434 }
2435 default:
2436 break;
2437 }
2438
2439 if (opt->features & QStyleOptionViewItem::HasCheckIndicator) {
2440 *checkRect = QStyle::alignedRect(opt->direction, Qt::AlignRight | Qt::AlignVCenter, checkRect->size(), display);
2441 }
2442
2443 // *textRect = QStyle::alignedRect(opt->direction, opt->displayAlignment, textRect->size(), display);
2444
2445 if (opt->features & QStyleOptionViewItem::HasCheckIndicator)
2446 display.setRight(checkRect->left() - spacing);
2447
2448 *textRect = display;
2449 }
2450 }
2451
2452 /*!
2453 * \~chinese \brief DStyle::viewItemLayout
2454 * \~chinese \sa DStyle::viewItemLayout()
2455 */
2456 void DStyle::viewItemLayout(const QStyleOptionViewItem *opt, QRect *pixmapRect, QRect *textRect, QRect *checkRect, bool sizehint) const
2457 {
2458 viewItemLayout(this, opt, pixmapRect, textRect, checkRect, sizehint);
2459 }
2460
2461 /*!
2462 * \~chinese \brief DStyle::viewItemDrawText视图项文字
2463 * \~chinese \param \sa style QStyle()
2464 * \~chinese \param p 画家
2465 * \~chinese \param \sa option QStyleOptionViewItem()
2466 * \~chinese \param rect 文字大小
2467 * \~chinese \return 布局大小
2468 */
2469 QRect DStyle::viewItemDrawText(const QStyle *style, QPainter *p, const QStyleOptionViewItem *option, const QRect &rect)
2470 {
2471 Q_UNUSED(style)
2472 QRect textRect = rect;
2473 const bool wrapText = option->features & QStyleOptionViewItem::WrapText;
2474 QTextOption textOption;
2475 textOption.setWrapMode(wrapText ? QTextOption::WordWrap : QTextOption::ManualWrap);
2476 textOption.setTextDirection(option->direction);
2477 textOption.setAlignment(QStyle::visualAlignment(option->direction, option->displayAlignment));
2478 QTextLayout textLayout(option->text, option->font);
2479 textLayout.setTextOption(textOption);
2480
2481 viewItemTextLayout(textLayout, textRect.width());
2482
2483 QString elidedText;
2484 qreal height = 0;
2485 qreal width = 0;
2486 int elidedIndex = -1;
2487 const int lineCount = textLayout.lineCount();
2488 for (int j = 0; j < lineCount; ++j) {
2489 const QTextLine line = textLayout.lineAt(j);
2490 if (j + 1 <= lineCount - 1) {
2491 const QTextLine nextLine = textLayout.lineAt(j + 1);
2492 if ((nextLine.y() + nextLine.height()) > textRect.height()) {
2493 int start = line.textStart();
2494 int length = line.textLength() + nextLine.textLength();
2495 const QStackTextEngine engine(textLayout.text().mid(start, length), option->font);
2496 elidedText = engine.elidedText(option->textElideMode, textRect.width());
2497 height += line.height();
2498 width = textRect.width();
2499 elidedIndex = j;
2500 break;
2501 }
2502 }
2503 if (line.naturalTextWidth() > textRect.width()) {
2504 int start = line.textStart();
2505 int length = line.textLength();
2506 const QStackTextEngine engine(textLayout.text().mid(start, length), option->font);
2507 elidedText = engine.elidedText(option->textElideMode, textRect.width());
2508 height += line.height();
2509 width = textRect.width();
2510 elidedIndex = j;
2511 break;
2512 }
2513 width = qMax<qreal>(width, line.width());
2514 height += line.height();
2515 }
2516
2517 const QRect layoutRect = QStyle::alignedRect(option->direction, option->displayAlignment,
2518 QSize(int(width), int(height)), textRect);
2519 const QPointF position = layoutRect.topLeft();
2520 for (int i = 0; i < lineCount; ++i) {
2521 const QTextLine line = textLayout.lineAt(i);
2522 if (i == elidedIndex) {
2523 qreal x = position.x() + line.x();
2524 qreal y = position.y() + line.y() + line.ascent();
2525 p->save();
2526 p->setFont(option->font);
2527 p->drawText(QPointF(x, y), elidedText);
2528 p->restore();
2529 break;
2530 }
2531 line.draw(p, position);
2532 }
2533
2534 return layoutRect;
2535 }
2536
2537 /*!
2538 * \~chinese \brief DStyle::viewItemDrawText
2539 * \~chinese \sa DStyle::viewItemDrawText()
2540 */
2541 QRect DStyle::viewItemDrawText(QPainter *p, const QStyleOptionViewItem *option, const QRect &rect) const
2542 {
2543 return viewItemDrawText(this, p, option, rect);
2544 }
2545 #endif
2546
2547
2548 /*!
2549 * \~chinese \class DStyledIconEngine
2550 * \~chinese \brief DStyledIconEngine一个修改的 QIconEngine 类
2551 */
2552
2553 void DStyledIconEngine::drawIcon(const QIcon &icon, QPainter *pa, const QRectF &rect)
2554 {
2555 icon.paint(pa, rect.toRect());
2556 }
2557
2558 /*!
2559 * \~chinese \brief DStyledIconEngine::DStyledIconEngine
2560 * \~chinese \param drawFun
2561 * \~chinese \param iconName
2562 */
2563 DStyledIconEngine::DStyledIconEngine(DrawFun drawFun, const QString &iconName)
2564 : QIconEngine()
2565 , m_drawFun(drawFun)
2566 , m_iconName(iconName)
2567 {
2568 m_painterRole = DPalette::NoRole;
2569 m_widget = nullptr;
2570 }
2571
2572 /*!
2573 * \~chinese \brief DStyledIconEngine::bindDrawFun活页夹
2574 * \~chinese \param drawFun
2575 */
2576 void DStyledIconEngine::bindDrawFun(DrawFun drawFun)
2577 {
2578 m_drawFun = drawFun;
2579 }
2580
2581 /*!
2582 * \~chinese \brief DStyledIconEngine::setIconName设置icon名称
2583 * \~chinese \param name 名称
2584 */
2585 void DStyledIconEngine::setIconName(const QString &name)
2586 {
2587 m_iconName = name;
2588 }
2589
2590 /*!
2591 * \~chinese \brief DStyledIconEngine::pixmap
2592 * \~chinese \sa QIconEngine::pixmap()
2593 */
2594 QPixmap DStyledIconEngine::pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state)
2595 {
2596 QImage image(size, QImage::Format_ARGB32_Premultiplied);
2597 image.fill(Qt::transparent);
2598 QPainter pa(&image);
2599 paint(&pa, QRect(QPoint(0, 0), size), mode, state);
2600 pa.end();
2601
2602 return QPixmap::fromImage(image);
2603 }
2604
2605 /*!
2606 * \~chinese \brief DStyledIconEngine::paint 重载paint
2607 * \~chinese \param painter画家
2608 * \~chinese \param palette调色板
2609 * \~chinese \param \sa rect QIconEngine::paint()
2610 */
2611 void DStyledIconEngine::paint(QPainter *painter, const QPalette &palette, const QRectF &rect)
2612 {
2613 if (!m_drawFun)
2614 return;
2615
2616 painter->setBrush(palette.background());
2617 painter->setPen(QPen(palette.foreground(), painter->pen().widthF()));
2618
2619 m_drawFun(painter, rect);
2620 }
2621
2622 /*!
2623 * \~chinese \brief DStyledIconEngine::paint
2624 * \~chinese \sa QIconEngine::paint()
2625 */
2626 void DStyledIconEngine::paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state)
2627 {
2628 Q_UNUSED(mode)
2629 Q_UNUSED(state)
2630
2631 if (m_painterRole != QPalette::NoRole) {
2632 if (m_widget) {
2633 painter->setPen(m_widget->palette().brush(m_painterRole).color());
2634 painter->setBrush(m_widget->palette().brush(m_painterRole));
2635 } else {
2636 painter->setPen(qApp->palette().brush(m_painterRole).color());
2637 painter->setBrush(qApp->palette().brush(m_painterRole));
2638 }
2639 }
2640
2641 m_drawFun(painter, rect);
2642 }
2643
2644 /*!
2645 * \~chinese \brief DStyledIconEngine::clone
2646 * \~chinese \sa QIconEngine::clone()
2647 */
2648 QIconEngine *DStyledIconEngine::clone() const
2649 {
2650 return new DStyledIconEngine(m_drawFun, m_iconName);
2651 }
2652
2653 void DStyledIconEngine::setFrontRole(const QWidget *widget, QPalette::ColorRole role)
2654 {
2655 m_painterRole = role;
2656 m_widget = widget;
2657 }
2658
2659 void DStyledIconEngine::virtual_hook(int id, void *data)
2660 {
2661 if (id == IconNameHook) {
2662 *reinterpret_cast<QString *>(data) = m_iconName;
2663 } else if (id == IsNullHook) {
2664 *reinterpret_cast<bool *>(data) = !m_drawFun;
2665 }
2666
2667 return QIconEngine::virtual_hook(id, data);
2668 }
2669
2670 DWIDGET_END_NAMESPACE
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #ifndef DSTYLE_H
21 #define DSTYLE_H
22
23 #include <dtkwidget_global.h>
24 #include <DPalette>
25
26 #include <QCommonStyle>
27 #include <QPainter>
28 #include <QIconEngine>
29 #include <QStyleOption>
30
31 QT_BEGIN_NAMESPACE
32 class QTextLayout;
33 QT_END_NAMESPACE
34
35 DGUI_USE_NAMESPACE
36 DWIDGET_BEGIN_NAMESPACE
37
38 namespace DDrawUtils
39 {
40 enum Corner {
41 TopLeftCorner = 0x00001,
42 TopRightCorner = 0x00002,
43 BottomLeftCorner = 0x00004,
44 BottomRightCorner = 0x00008
45 };
46 Q_DECLARE_FLAGS(Corners, Corner)
47
48 void drawShadow(QPainter *pa, const QRect &rect, qreal xRadius, qreal yRadius, const QColor &sc, qreal radius, const QPoint &offset);
49 void drawShadow(QPainter *pa, const QRect &rect, const QPainterPath &path, const QColor &sc, int radius, const QPoint &offset);
50 void drawRoundedRect(QPainter *pa, const QRect &rect, qreal xRadius, qreal yRadius, Corners corners, Qt::SizeMode mode = Qt::AbsoluteSize);
51 void drawFork(QPainter *pa, const QRectF &rect, const QColor &color, int width = 2);
52 void drawMark(QPainter *pa, const QRectF &rect, const QColor &boxInside, const QColor &boxOutside, const int penWidth, const int outLineLeng = 2);
53 void drawBorder(QPainter *pa, const QRectF &rect, const QBrush &brush, int borderWidth, int radius);
54 void drawArrow(QPainter *pa, const QRectF &rect, const QColor &color, Qt::ArrowType arrow, int width = 2);
55 void drawPlus(QPainter *painter, const QRectF &rect, const QColor &color , qreal width);
56 void drawSubtract(QPainter *painter, const QRectF &rect, const QColor &color, qreal width);
57
58 void drawForkElement(QPainter *pa, const QRectF &rect);
59 void drawArrowElement(Qt::ArrowType arrow, QPainter *pa, const QRectF &rect);
60 void drawDecreaseElement(QPainter *pa, const QRectF &rect);
61 void drawIncreaseElement(QPainter *pa, const QRectF &rect);
62 void drawMarkElement(QPainter *pa, const QRectF &rect);
63 void drawSelectElement(QPainter *pa, const QRectF &rect);
64 void drawEditElement(QPainter *pa, const QRectF &rect);
65 void drawExpandElement(QPainter *pa, const QRectF &rect);
66 void drawReduceElement(QPainter *pa, const QRectF &rect);
67 void drawLockElement(QPainter *pa, const QRectF &rect);
68 void drawUnlockElement(QPainter *pa, const QRectF &rect);
69 void drawMediaVolumeElement(QPainter *pa, const QRectF &rect);
70 void drawMediaVolumeFullElement(QPainter *pa, const QRectF &rect);
71 void drawMediaVolumeMutedElement(QPainter *pa, const QRectF &rect);
72 void drawMediaVolumeLeftElement(QPainter *pa, const QRectF &rect);
73 void drawMediaVolumeRightElement(QPainter *pa, const QRectF &rect);
74 void drawArrowEnter(QPainter *pa, const QRectF &rect);
75 void drawArrowLeave(QPainter *pa, const QRectF &rect);
76 void drawArrowNext(QPainter *pa, const QRectF &rect);
77 void drawArrowPrev(QPainter *pa, const QRectF &rect);
78 void drawShowPassword(QPainter *pa, const QRectF &rect);
79 void drawHidePassword(QPainter *pa, const QRectF &rect);
80 void drawCloseButton(QPainter *pa, const QRectF &rect);
81 void drawIndicatorMajuscule(QPainter *pa, const QRectF &rect);
82 void drawIndicatorUnchecked(QPainter *pa, const QRectF &rect);
83 void drawIndicatorChecked(QPainter *pa, const QRectF &rect);
84 void drawDeleteButton(QPainter *pa, const QRectF &rect);
85 void drawAddButton(QPainter *pa, const QRectF &rect);
86
87 void drawTitleBarMenuButton(QPainter *pa, const QRectF &rect);
88 void drawTitleBarMinButton(QPainter *pa, const QRectF &rect);
89 void drawTitleBarMaxButton(QPainter *pa, const QRectF &rect);
90 void drawTitleBarCloseButton(QPainter *pa, const QRectF &rect);
91 void drawTitleBarNormalButton(QPainter *pa, const QRectF &rect);
92 void drawArrowUp(QPainter *pa, const QRectF &rect);
93 void drawArrowDown(QPainter *pa, const QRectF &rect);
94 void drawArrowLeft(QPainter *pa, const QRectF &rect);
95 void drawArrowRight(QPainter *pa, const QRectF &rect);
96 void drawArrowBack(QPainter *pa, const QRectF &rect);
97 void drawArrowForward(QPainter *pa, const QRectF &rect);
98 void drawLineEditClearButton(QPainter *pa, const QRectF &rect);
99
100 Q_DECLARE_OPERATORS_FOR_FLAGS(Corners)
101 }
102
103 class DViewItemAction;
104 class DStyle : public QCommonStyle
105 {
106 Q_OBJECT
107
108 public:
109 enum PrimitiveElement {
110 PE_ItemBackground = QStyle::PE_CustomBase + 1, //列表项的背景色
111 PE_IconButtonPanel,
112 PE_IconButtonIcon,
113 PE_Icon,
114 PE_SwitchButtonGroove,
115 PE_SwitchButtonHandle,
116 PE_FloatingWidget,
117 PE_CustomBase = QStyle::PE_CustomBase + 0xf00000
118 };
119
120 enum ControlElement {
121 CE_IconButton = QStyle::CE_CustomBase + 1,
122 CE_SwitchButton,
123 CE_FloatingWidget,
124 CE_ButtonBoxButton,
125 CE_ButtonBoxButtonBevel,
126 CE_ButtonBoxButtonLabel,
127 CE_TextButton,
128 CE_CustomBase = QStyle::CE_CustomBase + 0xf00000
129 };
130
131 enum PixelMetric {
132 PM_FocusBorderWidth = QStyle::PM_CustomBase + 1, //控件焦点状态的边框宽度
133 PM_FocusBorderSpacing, //控件内容和border之间的间隔
134 PM_FrameRadius, //控件的圆角大小
135 PM_ShadowRadius, //控件阴影效果的半径
136 PM_ShadowHOffset, //阴影在水平方向的偏移
137 PM_ShadowVOffset, //阴影在竖直方向的偏移
138 PM_FrameMargins, //控件的margins区域,控件内容 = 控件大小 - FrameMargins
139 PM_IconButtonIconSize,
140 PM_TopLevelWindowRadius, //窗口的圆角大小
141 PM_SwitchButtonHandleWidth,
142 PM_SwithcButtonHandleHeight,
143 PM_FloatingWidgetRadius, //(基类)的圆角半径:控件内容-Radius < 控件内容 < 控件显示大小
144 PM_FloatingWidgetShadowRadius, //(基类)的阴影Radius区域:控件内容 < 控件内容+阴影margins < 控件内容+阴影margins+阴影Radius = 控件显示大小
145 PM_FloatingWidgetShadowMargins, //(基类)阴影的宽度 = 控件显示大小 - 阴影Radius - 控件内容
146 PM_FloatingWidgetShadowHOffset, //(基类)的阴影水平偏移
147 PM_FloatingWidgetShadowVOffset, //(基类)的阴影竖直偏移
148 PM_ContentsMargins, //内容的边距(一般只用于左右边距)
149 PM_ContentsSpacing, //内容的间距(可用于列表项中每一项的距离)
150 PM_ButtonMinimizedSize, //按钮控件的最小大小
151 PM_CustomBase = QStyle::PM_CustomBase + 0xf00000
152 };
153
154 enum SubElement {
155 SE_IconButtonIcon = QStyle::SE_CustomBase + 1,
156 SE_SwitchButtonGroove,
157 SE_SwitchButtonHandle,
158 SE_FloatingWidget,
159 SE_ButtonBoxButtonContents,
160 SE_ButtonBoxButtonFocusRect,
161 SE_CustomBase = QStyle::SE_CustomBase + 0xf00000
162 };
163
164 enum ContentsType {
165 CT_IconButton = QStyle::CT_CustomBase + 1,
166 CT_SwitchButton,
167 CT_FloatingWidget,
168 CT_ButtonBoxButton,
169 CT_CustomBase = QStyle::CT_CustomBase + 0xf00000
170 };
171
172 enum StyleState {
173 SS_NormalState = 0x00000000,
174 SS_HoverState = 0x00000001,
175 SS_PressState = 0x00000002,
176 SS_StateCustomBase = 0x000000f0,
177
178 StyleState_Mask = 0x000000ff,
179 SS_CheckedFlag = 0x00000100,
180 SS_SelectedFlag = 0x00000200,
181 SS_FocusFlag = 0x00000400,
182 SS_FlagCustomBase = 0xf00000
183 };
184 Q_DECLARE_FLAGS(StateFlags, StyleState)
185
186 enum StandardPixmap {
187 SP_ForkElement = QStyle::SP_CustomBase + 1,
188 SP_DecreaseElement, //减少(-)
189 SP_IncreaseElement, //增加(+)
190 SP_MarkElement, //对勾
191 SP_SelectElement, //选择(...)
192 SP_EditElement, //编辑
193 SP_ExpandElement, //展开
194 SP_ReduceElement, //收缩
195 SP_LockElement, //锁定
196 SP_UnlockElement, //解锁
197 SP_MediaVolumeLowElement, //音量
198 SP_MediaVolumeHighElement, //满音量
199 SP_MediaVolumeMutedElement, //静音
200 SP_MediaVolumeLeftElement, //左声道
201 SP_MediaVolumeRightElement, //右声道
202 SP_ArrowEnter, //进入
203 SP_ArrowLeave, //离开
204 SP_ArrowNext, //下一页
205 SP_ArrowPrev, //上一页
206 SP_ShowPassword, //显示密码
207 SP_HidePassword, //因此密码
208 SP_CloseButton, //关闭按钮(X)
209 SP_IndicatorMajuscule, //大写标识
210 SP_IndicatorSearch, //搜索标识(放大镜)
211 SP_IndicatorUnchecked, //搜索标识(对应对勾的选中状态)
212 SP_IndicatorChecked, //搜索标识(对勾)
213 SP_DeleteButton, //删除按钮
214 SP_AddButton, //新增按钮
215 SP_CustomBase = QStyle::SP_CustomBase + 0xf00000
216 };
217
218 static QColor adjustColor(const QColor &base,
219 qint8 hueFloat = 0, qint8 saturationFloat = 0, qint8 lightnessFloat = 0,
220 qint8 redFloat = 0, qint8 greenFloat = 0, qint8 blueFloat = 0, qint8 alphaFloat = 0);
221 static QColor blendColor(const QColor &substrate, const QColor &superstratum);
222 static QPair<QIcon::Mode, QIcon::State> toIconModeState(const QStyleOption *option);
223
224 static void setTooltipTextFormat(Qt::TextFormat format);
225 static Qt::TextFormat tooltipTextFormat();
226 static DStyle::StyleState getState(const QStyleOption *option);
227 static void setFocusRectVisible(QWidget *widget, bool visible);
228 static void setFrameRadius(QWidget *widget, int radius);
229 DStyle();
230
231 static void drawPrimitive(const QStyle *style, DStyle::PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w = nullptr);
232 static void drawControl(const QStyle *style, DStyle::ControlElement ce, const QStyleOption *opt, QPainter *p, const QWidget *w = nullptr);
233 static int pixelMetric(const QStyle *style, DStyle::PixelMetric m, const QStyleOption *opt = nullptr, const QWidget *widget = nullptr);
234 static QRect subElementRect(const QStyle *style, DStyle::SubElement r, const QStyleOption *opt, const QWidget *widget = nullptr);
235 static QSize sizeFromContents(const QStyle *style, DStyle::ContentsType ct, const QStyleOption *opt, const QSize &contentsSize, const QWidget *widget = nullptr);
236 static QIcon standardIcon(const QStyle *style, StandardPixmap st, const QStyleOption *opt = nullptr, const QWidget *widget = 0);
237
238 inline void drawPrimitive(DStyle::PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w = nullptr) const
239 { proxy()->drawPrimitive(static_cast<QStyle::PrimitiveElement>(pe), opt, p, w); }
240 inline void drawControl(DStyle::ControlElement ce, const QStyleOption *opt, QPainter *p, const QWidget *w = nullptr) const
241 { proxy()->drawControl(static_cast<QStyle::ControlElement>(ce), opt, p, w); }
242 inline int pixelMetric(DStyle::PixelMetric m, const QStyleOption *opt = nullptr, const QWidget *widget = nullptr) const
243 { return proxy()->pixelMetric(static_cast<QStyle::PixelMetric>(m), opt, widget); }
244 inline QRect subElementRect(DStyle::SubElement r, const QStyleOption *opt, const QWidget *widget = nullptr) const
245 { return proxy()->subElementRect(static_cast<QStyle::SubElement>(r), opt, widget); }
246 inline QSize sizeFromContents(DStyle::ContentsType ct, const QStyleOption *opt, const QSize &contentsSize, const QWidget *widget = nullptr) const
247 { return proxy()->sizeFromContents(static_cast<QStyle::ContentsType>(ct), opt, contentsSize, widget); }
248 inline QIcon standardIcon(DStyle::StandardPixmap st, const QStyleOption *opt = nullptr, const QWidget *widget = nullptr) const
249 { return proxy()->standardIcon(static_cast<QStyle::StandardPixmap>(st), opt, widget); }
250
251 void drawPrimitive(QStyle::PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w = nullptr) const override;
252 void drawControl(QStyle::ControlElement ce, const QStyleOption *opt, QPainter *p, const QWidget *w = nullptr) const override;
253 int pixelMetric(QStyle::PixelMetric m, const QStyleOption *opt = nullptr, const QWidget *widget = nullptr) const override;
254 int styleHint(StyleHint sh, const QStyleOption *opt, const QWidget *w, QStyleHintReturn *shret) const override;
255 QRect subElementRect(QStyle::SubElement r, const QStyleOption *opt, const QWidget *widget = nullptr) const override;
256 QSize sizeFromContents(QStyle::ContentsType ct, const QStyleOption *opt, const QSize &contentsSize, const QWidget *widget = nullptr) const override;
257 QIcon standardIcon(QStyle::StandardPixmap st, const QStyleOption *opt = nullptr, const QWidget *widget = nullptr) const override;
258
259 QPalette standardPalette() const override;
260 QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const override;
261
262 // 获取一个加工后的画笔
263 QBrush generatedBrush(const QStyleOption *option, const QBrush &base,
264 QPalette::ColorGroup cg = QPalette::Normal,
265 QPalette::ColorRole role = QPalette::NoRole) const;
266 QBrush generatedBrush(StyleState state, const QStyleOption *option, const QBrush &base,
267 QPalette::ColorGroup cg = QPalette::Normal,
268 QPalette::ColorRole role = QPalette::NoRole) const;
269 virtual QBrush generatedBrush(StateFlags flags, const QBrush &base,
270 QPalette::ColorGroup cg = QPalette::Normal,
271 QPalette::ColorRole role = QPalette::NoRole,
272 const QStyleOption *option = nullptr) const;
273
274 QBrush generatedBrush(const QStyleOption *option, const QBrush &base,
275 DPalette::ColorGroup cg = DPalette::Normal,
276 DPalette::ColorType type = DPalette::ItemBackground) const;
277 QBrush generatedBrush(StyleState state, const QStyleOption *option, const QBrush &base,
278 DPalette::ColorGroup cg = DPalette::Normal,
279 DPalette::ColorType type = DPalette::ItemBackground) const;
280 virtual QBrush generatedBrush(StateFlags flags, const QBrush &base,
281 DPalette::ColorGroup cg = DPalette::Normal,
282 DPalette::ColorType type = DPalette::ItemBackground,
283 const QStyleOption *option = nullptr) const;
284
285 using QCommonStyle::drawPrimitive;
286 using QCommonStyle::drawControl;
287 using QCommonStyle::pixelMetric;
288 using QCommonStyle::subElementRect;
289 using QCommonStyle::sizeFromContents;
290 using QCommonStyle::standardIcon;
291
292 #if QT_CONFIG(itemviews)
293 static QSizeF viewItemTextLayout(QTextLayout &textLayout, int lineWidth);
294 static QSize viewItemSize(const QStyle *style, const QStyleOptionViewItem *option, int role);
295 static void viewItemLayout(const QStyle *style, const QStyleOptionViewItem *opt, QRect *pixmapRect,
296 QRect *textRect, QRect *checkRect, bool sizehint);
297 virtual void viewItemLayout(const QStyleOptionViewItem *opt, QRect *pixmapRect,
298 QRect *textRect, QRect *checkRect, bool sizehint) const;
299
300 static QRect viewItemDrawText(const QStyle *style, QPainter *p, const QStyleOptionViewItem *option, const QRect &rect);
301 virtual QRect viewItemDrawText(QPainter *p, const QStyleOptionViewItem *option, const QRect &rect) const;
302 #endif
303 };
304
305 class DStyleHelper
306 {
307 public:
308 inline DStyleHelper(const QStyle *style = nullptr) {
309 setStyle(style);
310 }
311
312 inline void setStyle(const QStyle *style) {
313 m_style = style;
314 m_dstyle = qobject_cast<const DStyle*>(style);
315 }
316
317 inline const QStyle *style() const
318 { return m_style; }
319 inline const DStyle *dstyle() const
320 { return m_dstyle; }
321
322 inline QBrush generatedBrush(const QStyleOption *option, const QBrush &base,
323 QPalette::ColorGroup cg = QPalette::Normal,
324 QPalette::ColorRole role = QPalette::NoRole) const
325 { return m_dstyle ? m_dstyle->generatedBrush(option, base, cg, role) : base; }
326 inline QBrush generatedBrush(const QStyleOption *option, const QBrush &base,
327 QPalette::ColorGroup cg = QPalette::Normal,
328 DPalette::ColorType type = DPalette::NoType) const
329 { return m_dstyle ? m_dstyle->generatedBrush(option, base, cg, type) : base; }
330 inline QColor getColor(const QStyleOption *option, QPalette::ColorRole role) const
331 { return generatedBrush(option, option->palette.brush(role), option->palette.currentColorGroup(), role).color(); }
332 inline QColor getColor(const QStyleOption *option, const DPalette &palette, DPalette::ColorType type) const
333 { return generatedBrush(option, palette.brush(type), palette.currentColorGroup(), type).color(); }
334 template<class T>
335 inline QColor getColor(const T *option, DPalette::ColorType type) const
336 { return getColor(option, option->dpalette, type); }
337
338 inline void drawPrimitive(DStyle::PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w = nullptr) const
339 { m_dstyle ? m_dstyle->drawPrimitive(pe, opt, p, w) : DStyle::drawPrimitive(m_style, pe, opt, p, w); }
340 inline void drawControl(DStyle::ControlElement ce, const QStyleOption *opt, QPainter *p, const QWidget *w = nullptr) const
341 { m_dstyle ? m_dstyle->drawControl(ce, opt, p, w) : DStyle::drawControl(m_style, ce, opt, p, w); }
342 inline int pixelMetric(DStyle::PixelMetric m, const QStyleOption *opt = nullptr, const QWidget *widget = nullptr) const
343 { return m_dstyle ? m_dstyle->pixelMetric(m, opt, widget) : DStyle::pixelMetric(m_style, m, opt, widget); }
344 inline QRect subElementRect(DStyle::SubElement r, const QStyleOption *opt, const QWidget *widget = nullptr) const
345 { return m_dstyle ? m_dstyle->subElementRect(r, opt, widget) : DStyle::subElementRect(m_style, r, opt, widget); }
346 inline QSize sizeFromContents(DStyle::ContentsType ct, const QStyleOption *opt, const QSize &contentsSize, const QWidget *widget = nullptr) const
347 { return m_dstyle ? m_dstyle->sizeFromContents(ct, opt, contentsSize, widget) : DStyle::sizeFromContents(m_style, ct, opt, contentsSize, widget); }
348 inline QIcon standardIcon(DStyle::StandardPixmap standardIcon, const QStyleOption *opt, const QWidget *widget = nullptr) const
349 { return m_dstyle ? m_dstyle->standardIcon(standardIcon, opt, widget) : DStyle::standardIcon(m_style, standardIcon, opt, widget); }
350
351 private:
352 const QStyle *m_style;
353 const DStyle *m_dstyle;
354 };
355
356 class DStylePainter : public QPainter
357 {
358 public:
359 inline DStylePainter() : QPainter(), widget(nullptr), wstyle(nullptr) {}
360 inline explicit DStylePainter(QWidget *w) { begin(w, w); }
361 inline DStylePainter(QPaintDevice *pd, QWidget *w) { begin(pd, w); }
362 inline bool begin(QWidget *w) { return begin(w, w); }
363 inline bool begin(QPaintDevice *pd, QWidget *w) {
364 Q_ASSERT_X(w, "DStylePainter::DStylePainter", "Widget must be non-zero");
365 widget = w;
366 wstyle = w->style();
367 dstyle.setStyle(wstyle);
368 return QPainter::begin(pd);
369 };
370 inline void drawPrimitive(QStyle::PrimitiveElement pe, const QStyleOption &opt);
371 inline void drawPrimitive(DStyle::PrimitiveElement pe, const QStyleOption &opt);
372 inline void drawControl(QStyle::ControlElement ce, const QStyleOption &opt);
373 inline void drawControl(DStyle::ControlElement ce, const QStyleOption &opt);
374 inline void drawComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex &opt);
375 inline void drawItemText(const QRect &r, int flags, const QPalette &pal, bool enabled,
376 const QString &text, QPalette::ColorRole textRole = QPalette::NoRole);
377 inline void drawItemPixmap(const QRect &r, int flags, const QPixmap &pixmap);
378 inline QStyle *style() const { return wstyle; }
379
380 private:
381 QWidget *widget;
382 QStyle *wstyle;
383 DStyleHelper dstyle;
384 Q_DISABLE_COPY(DStylePainter)
385 };
386
387 void DStylePainter::drawPrimitive(QStyle::PrimitiveElement pe, const QStyleOption &opt)
388 {
389 wstyle->drawPrimitive(pe, &opt, this, widget);
390 }
391
392 void DStylePainter::drawPrimitive(DStyle::PrimitiveElement pe, const QStyleOption &opt)
393 {
394 dstyle.drawPrimitive(pe, &opt, this, widget);
395 }
396
397 void DStylePainter::drawControl(QStyle::ControlElement ce, const QStyleOption &opt)
398 {
399 wstyle->drawControl(ce, &opt, this, widget);
400 }
401
402 void DStylePainter::drawControl(DStyle::ControlElement ce, const QStyleOption &opt)
403 {
404 dstyle.drawControl(ce, &opt, this, widget);
405 }
406
407 void DStylePainter::drawComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex &opt)
408 {
409 wstyle->drawComplexControl(cc, &opt, this, widget);
410 }
411
412 void DStylePainter::drawItemText(const QRect &r, int flags, const QPalette &pal, bool enabled,
413 const QString &text, QPalette::ColorRole textRole)
414 {
415 wstyle->drawItemText(this, r, flags, pal, enabled, text, textRole);
416 }
417
418 void DStylePainter::drawItemPixmap(const QRect &r, int flags, const QPixmap &pixmap)
419 {
420 wstyle->drawItemPixmap(this, r, flags, pixmap);
421 }
422
423 class DStyledIconEngine : public QIconEngine
424 {
425 public:
426 static void drawIcon(const QIcon &icon, QPainter *pa, const QRectF &rect);
427
428 typedef std::function<void(QPainter *, const QRectF &rect)> DrawFun;
429 DStyledIconEngine(DrawFun drawFun, const QString &iconName = QString());
430
431 void bindDrawFun(DrawFun drawFun);
432 void setIconName(const QString &name);
433
434 QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state) override;
435 void paint(QPainter *painter, const QPalette &palette, const QRectF &rect);
436 void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) override;
437
438 QIconEngine *clone() const override;
439 void setFrontRole(const QWidget* widget, QPalette::ColorRole role);
440
441 protected:
442 void virtual_hook(int id, void *data) override;
443
444 DrawFun m_drawFun = nullptr;
445 QString m_iconName;
446 QPalette::ColorRole m_painterRole;
447 const QWidget *m_widget;
448 };
449
450 DWIDGET_END_NAMESPACE
451
452 #endif // DSTYLE_H
0 /*
1 * Copyright (C) 2017 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #include "dstyleditemdelegate.h"
21 #include "dobject_p.h"
22 #include "dstyleoption.h"
23 #include "dapplicationhelper.h"
24 #include "dstyle.h"
25
26 #include "dlistview.h"
27
28 #include <QDebug>
29 #include <QApplication>
30 #include <QTextLayout>
31 #include <DStyle>
32 #include <QPainter>
33 #include <QListView>
34 #include <QLineEdit>
35 #include <QTableView>
36 #include <QListWidget>
37 #include <private/qlayoutengine_p.h>
38
39 Q_DECLARE_METATYPE(QMargins)
40
41 DWIDGET_BEGIN_NAMESPACE
42
43 class DViewItemActionPrivate : public DCORE_NAMESPACE::DObjectPrivate
44 {
45 public:
46 DViewItemActionPrivate(DViewItemAction *qq)
47 : DObjectPrivate(qq)
48 {
49
50 }
51
52 Qt::Alignment alignment;
53 QSize iconSize;
54 QSize maxSize;
55 QMargins clickMargins;
56 bool clickable;
57 QWidget *widget = nullptr;
58
59 qint8 colorType = -1;
60 qint8 colorRole = -1;
61 qint8 fontSize = -1;
62 };
63
64 class DStyledItemDelegatePrivate : public DCORE_NAMESPACE::DObjectPrivate
65 {
66 public:
67 DStyledItemDelegatePrivate(DStyledItemDelegate *qq)
68 : DObjectPrivate(qq)
69 {
70
71 }
72
73 static QSize actionSize(const DViewItemAction *action, const QSize &max, const QSize &fallbackIconSize, int spacing)
74 {
75 if (action->widget()) {
76 return action->widget()->size();
77 }
78
79 const QString &text = action->text();
80 QSize icon_size = action->iconSize();
81
82 if (!icon_size.isValid() && !action->icon().isNull()) {
83 icon_size = fallbackIconSize;
84 }
85
86 QSize max_size;
87
88 max_size.setWidth(max.width() >= 0 ? max.width() : QWIDGETSIZE_MAX);
89 max_size.setHeight(max.height() >= 0 ? max.height() : QWIDGETSIZE_MAX);
90
91 if (text.isEmpty()) {
92 return icon_size.boundedTo(max_size);
93 }
94
95 QFontMetrics fm(action->font());
96 const QSize &text_size = fm.size(0, text);
97
98 if (!icon_size.isValid())
99 spacing = 0;
100
101 return QSize(icon_size.width() + text_size.width() + spacing, qMax(icon_size.height(), text_size.height()));
102 }
103
104 static QSize displayActionSize(const DViewItemAction *action, const QStyle *style, const QStyleOptionViewItem &option)
105 {
106 QStyleOptionViewItem item;
107 item.text = action->text();
108 item.features = option.features | QStyleOptionViewItem::HasDisplay;
109 item.font = action->font();
110 item.fontMetrics = QFontMetrics(item.font);
111 item.rect = option.rect;
112 item.decorationPosition = option.decorationPosition;
113 item.decorationSize = option.decorationSize;
114
115 return DStyle::viewItemSize(style, &item, Qt::DisplayRole);
116 }
117
118 static QList<QRect> doActionsLayout(QRect base, const QList<DViewItemAction*> &list, Qt::Orientation orientation,
119 Qt::LayoutDirection direction, const QSize &fallbackIconSize, QSize *bounding)
120 {
121 if (list.isEmpty()) {
122 if (bounding) {
123 bounding->setWidth(0);
124 bounding->setHeight(0);
125 }
126
127 return {};
128 }
129
130 QList<QRect> result_list;
131 int max_width = 0;
132 int max_height = 0;
133 QList<QSize> size_list;
134 size_list.reserve(list.size());
135 int spacing = DStyleHelper(qApp->style()).pixelMetric(DStyle::PM_ContentsSpacing);
136
137 if (orientation == Qt::Horizontal) {
138 // 记录上中下三列的宽度
139 int top_width = 0;
140 int center_width = 0;
141 int bottom_width = 0;
142
143 // 先找到最大宽度
144 for (const DViewItemAction *action : list) {
145 size_list.append(actionSize(action, action->maximumSize(), fallbackIconSize, spacing));
146
147 if (action->alignment().testFlag(Qt::AlignVCenter)) {
148 center_width += size_list.last().width();
149 } else if (action->alignment().testFlag(Qt::AlignBottom)) {
150 bottom_width += size_list.last().width();
151 } else {
152 top_width += size_list.last().width();
153 }
154 }
155
156 max_width = qBound(qMax(top_width, center_width), bottom_width, base.width()) + (list.size() - 1) * spacing;
157 base.setWidth(max_width);
158
159 QRect top_rect = base;
160 QRect center_rect = base;
161 QRect bottom_rect = base;
162
163 // 开始布局
164 for (int i = 0; i < list.size(); ++i) {
165 const DViewItemAction *action = list.at(i);
166
167 if (action->alignment().testFlag(Qt::AlignVCenter)) {
168 result_list << QStyle::alignedRect(direction, action->alignment(), size_list.at(i), center_rect);
169 center_rect.setLeft(result_list.last().right() + spacing);
170 } else if (action->alignment().testFlag(Qt::AlignBottom)) {
171 result_list << QStyle::alignedRect(direction, action->alignment(), size_list.at(i), bottom_rect);
172 bottom_rect.setLeft(result_list.last().right() + spacing);
173 } else {
174 result_list << QStyle::alignedRect(direction, action->alignment(), size_list.at(i), top_rect);
175 top_rect.setLeft(result_list.last().right() + spacing);
176 }
177
178 if (bounding)
179 max_height = qMax(max_height, result_list.last().bottom() - base.top() + 1);
180 }
181 } else {
182 // 记录左中右三列的宽度
183 int left_height = 0;
184 int center_height = 0;
185 int right_height = 0;
186
187 // 先找到最大高度
188 for (const DViewItemAction *action : list) {
189 size_list.append(actionSize(action, action->maximumSize(), fallbackIconSize, spacing));
190
191 if (action->alignment().testFlag(Qt::AlignHCenter)) {
192 center_height += size_list.last().height();
193 } else if (action->alignment().testFlag(Qt::AlignRight)) {
194 right_height += size_list.last().height();
195 } else {
196 left_height += size_list.last().height();
197 }
198 }
199
200 max_height = qBound(qMax(left_height, center_height), right_height, base.height()) + (list.size() - 1) * spacing;
201 base.setHeight(max_height);
202
203 QRect left_rect = base;
204 QRect center_rect = base;
205 QRect right_rect = base;
206
207 // 开始布局
208 for (int i = 0; i < list.size(); ++i) {
209 const DViewItemAction *action = list.at(i);
210
211 if (action->alignment().testFlag(Qt::AlignHCenter)) {
212 result_list << QStyle::alignedRect(direction, action->alignment(), size_list.at(i), center_rect);
213 center_rect.setTop(result_list.last().bottom() + spacing);
214 } else if (action->alignment().testFlag(Qt::AlignRight)) {
215 result_list << QStyle::alignedRect(direction, action->alignment(), size_list.at(i), right_rect);
216 right_rect.setTop(result_list.last().bottom() + spacing);
217 } else {
218 result_list << QStyle::alignedRect(direction, action->alignment(), size_list.at(i), left_rect);
219 left_rect.setTop(result_list.last().bottom() + spacing);
220 }
221
222 if (bounding)
223 max_height = qMax(max_height, result_list.last().bottom() - base.top() + 1);
224 }
225 }
226
227 if (bounding) {
228 bounding->setWidth(max_width);
229 bounding->setHeight(max_height);
230 }
231
232 return result_list;
233 }
234
235 static void drawAction(QPainter *pa, const QStyleOptionViewItem &option, const QRect &rect, const DViewItemAction *action, int spacing)
236 {
237 if (!action->isVisible()) {
238 return;
239 }
240
241 if (action->widget()) {
242 if (action->widget()->geometry() != rect) {
243 action->widget()->setGeometry(rect);
244 }
245
246 return;
247 }
248
249 QSize icon_size(action->iconSize());
250
251 if (!icon_size.isValid() && !action->icon().isNull()) {
252 icon_size = option.decorationSize;
253 }
254
255 // 图标的绘制用也可能会使用这些颜色
256 QPalette::ColorGroup cg = option.state & QStyle::State_Enabled
257 ? QPalette::Normal : QPalette::Disabled;
258 if (cg == QPalette::Normal && !(option.state & QStyle::State_Active))
259 cg = QPalette::Inactive;
260
261 if (option.state & QStyle::State_Selected) {
262 pa->setPen(option.palette.color(cg, QPalette::HighlightedText));
263 } else {
264 if (action->textColorType() > 0) {
265 pa->setPen(QPen(DApplicationHelper::instance()->palette(option.widget).brush(cg, action->textColorType()), 1));
266 } else {
267 QPalette::ColorRole role = action->textColorRole() > 0 ? action->textColorRole() : QPalette::Text;
268 pa->setPen(QPen(option.palette.brush(cg, role), 1));
269 }
270 }
271
272 // draw icon
273 if (icon_size.isValid()) {
274 const QIcon &icon = action->icon();
275 QRect icon_rect(QPoint(0, 0), icon_size);
276
277 icon_rect.moveCenter(rect.center());
278 icon_rect.moveLeft(rect.left());
279 icon.paint(pa, icon_rect);
280 }
281
282 // draw text
283 if (!action->text().isEmpty()) {
284 QRect text_rect = rect;
285
286 if (!icon_size.isValid()) {
287 spacing = 0;
288 }
289
290 text_rect.setLeft(text_rect.left() + icon_size.width() + spacing);
291 pa->setFont(action->font());
292 pa->drawText(text_rect, Qt::AlignVCenter, action->text());
293 }
294 }
295
296 static QSize drawActions(QPainter *pa, const QStyleOptionViewItem &option, const QVariant &value, Qt::Edge edge, QList<QPair<QAction*, QRect>> *clickableActionRect)
297 {
298 const DViewItemActionList &actionList = qvariant_cast<DViewItemActionList>(value);
299 DViewItemActionList visiable_actionList;
300 for (auto action : actionList) {
301 if (action->isVisible()) {
302 visiable_actionList.append(action);
303 }
304 }
305
306 const Qt::Orientation orientation = (edge == Qt::TopEdge || edge == Qt::BottomEdge) ? Qt::Vertical : Qt::Horizontal;
307 QSize bounding;
308 const QList<QRect> &list = doActionsLayout(option.rect, visiable_actionList, orientation, option.direction, option.decorationSize, &bounding);
309 QPoint origin(0, 0);
310 int spacing = DStyleHelper(qApp->style()).pixelMetric(DStyle::PM_ContentsSpacing);
311
312 switch (edge) {
313 case Qt::BottomEdge:
314 origin = QPoint(0, option.rect.height() - bounding.height());
315 break;
316 case Qt::RightEdge:
317 origin = QPoint(option.rect.width() - bounding.width(), 0);
318 break;
319 default:
320 break;
321 }
322
323 for (int i = 0; i < list.count(); ++i) {
324 DViewItemAction *action = visiable_actionList.at(i);
325 const QRect &rect = list.at(i).translated(origin);
326
327 drawAction(pa, option, rect, action, spacing);
328
329 if (action->isClickable()) {
330 clickableActionRect->append(qMakePair(action, rect.marginsAdded(action->clickAreaMargins())));
331 }
332 }
333
334 return bounding;
335 }
336
337 DStyledItemDelegate::BackgroundType backgroundType;
338 QMargins margins;
339 QSize itemSize;
340 int itemSpacing = 0;
341 QMap<QModelIndex, QList<QPair<QAction*, QRect>>> clickableActionMap;
342 QAction *pressedAction = nullptr;
343 };
344
345 /*!
346 * \~chinese \class DViewItemAction
347 * \~chinese \brief 是一个 action 活动, 其默认是不能被点击的.
348 *
349 * \~chinese //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
350 *
351 * \~chinese setActionList(Qt::BottomEdge, *list) 的 BottomEdge 为水平方向的枚举值时候: LeftEdge, RightEdge, 其对应 alignment 枚举数值只有如下的有效:
352 *
353 * \~chinese 其参数 alignment 为如下值时候(才有效):
354 * \~chinese \li AlignTop
355 * \~chinese \li AlignVCenter
356 * \~chinese \li AlignBottom
357 *
358 * \~chinese 此处举一个小例子, 可以自行修改相关参数, 查看结果, 理解参数:
359 * \code
360 * QMainWindow *wid = new QMainWindow();
361 * wid->resize(800, 600);
362 *
363 * //视图和模型
364 * DListView *view = new DListView(wid);
365 * QStandardItemModel *model = new QStandardItemModel(view);
366 * view->setModel(model);
367 *
368 * //标准DStandardItem item
369 * DStandardItem *item = new DStandardItem();
370 * item->setText("@1:这是同一个item 的text\n@2:这是同一个item 的text\n@3:这是同一个item 的text\n@4:这是同一个item 的text\n@5:这是同一个item 的text\n@6:这是同一个item 的text");
371 *
372 * //DViewItemAction() 的形参: 其参数 alignment = AlignLeft 或 AlignHCenter 或 AlignRight; 设置为 AlignTop, AlignVCenter, AlignBottom 也是无效的
373 * DViewItemAction *act1 = new DViewItemAction(Qt::AlignBottom, QSize(15, 15), QSize(50, 50));
374 * act1->setText("act1");
375 * act1->setIcon(QIcon("/home/yuanyi/Desktop/dog.jpg"));
376 * DViewItemAction *act2 = new DViewItemAction(Qt::AlignVCenter, QSize(15, 15), QSize());
377 * act2->setText("act2");
378 * act2->setIcon(QIcon("/home/yuanyi/Desktop/dog.jpg"));
379 * DViewItemAction *act3 = new DViewItemAction(Qt::AlignTop, QSize(15, 15), QSize(100, 50));
380 * act3->setText("act3");
381 * act3->setIcon(QIcon("/home/yuanyi/Desktop/dog.jpg"));
382 * DViewItemAction *act4 = new DViewItemAction(Qt::AlignBottom, QSize(15, 15), QSize(100, 50));
383 * act4->setText("act4");
384 * act4->setIcon(QIcon("/home/yuanyi/Desktop/dog.jpg"));
385 *
386 * DViewItemActionList *list = new DViewItemActionList();
387 * list->append(act1);
388 * list->append(act2);
389 * list->append(act3);
390 * list->append(act4);
391 *
392 * //edge实参: TopEdg, BottomEdge (主要设置前面两个参数), LeftEdge, RightEdge
393 * item->setActionList(Qt::LeftEdge, *list);
394 * model->appendRow(item);
395 *
396 * wid->setCentralWidget(view);
397 * wid->show();
398 * \endcode
399 * \~chinese 上代码示例 code 效果图如下:
400 * \~chinese \image html DViewItemAction2.png
401 *
402 * \~chinese //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
403 *
404 * \~chinese setActionList(Qt::BottomEdge, *list) 的 BottomEdge 为竖直方向的枚举值时候: TopEdge, BottomEdge, 其对应 alignment 枚举数值只有如下的有效:
405 *
406 * \~chinese 其参数 alignment 为如下值时候(才有效):
407 * \~chinese \li AlignLeft
408 * \~chinese \li AlignHCenter
409 * \~chinese \li AlignRight
410 *
411 * 此处举一个小例子, 可以自行修改相关参数, 查看结果, 理解参数:
412 * \code
413 * QMainWindow *wid = new QMainWindow();
414 * wid->resize(800, 600);
415 *
416 * //视图和模型
417 * DListView *view = new DListView(wid);
418 * QStandardItemModel *model = new QStandardItemModel(view);
419 * view->setModel(model);
420 *
421 * //标准DStandardItem item
422 * DStandardItem *item = new DStandardItem();
423 * item->setText("这是一个item 的text");
424 *
425 * //DViewItemAction() 的形参: 其参数 alignment = AlignLeft 或 AlignHCenter 或 AlignRight; 设置为 AlignTop, AlignVCenter, AlignBottom 也是无效的
426 * DViewItemAction *act1 = new DViewItemAction(Qt::AlignLeft, QSize(15, 15), QSize(50, 50));
427 * act1->setText("act1");
428 * act1->setIcon(QIcon("/home/yuanyi/Desktop/dog.jpg"));
429 * DViewItemAction *act2 = new DViewItemAction(Qt::AlignRight, QSize(15, 15), QSize());
430 * act2->setText("act2");
431 * act2->setIcon(QIcon("/home/yuanyi/Desktop/dog.jpg"));
432 * DViewItemAction *act3 = new DViewItemAction(Qt::AlignHCenter, QSize(15, 15), QSize(100, 50));
433 * act3->setText("act3");
434 * act3->setIcon(QIcon("/home/yuanyi/Desktop/dog.jpg"));
435 * DViewItemAction *act4 = new DViewItemAction(Qt::AlignLeft, QSize(15, 15), QSize(100, 50));
436 * act4->setText("act4");
437 * act4->setIcon(QIcon("/home/yuanyi/Desktop/dog.jpg"));
438 *
439 * DViewItemActionList *list = new DViewItemActionList();
440 * list->append(act1);
441 * list->append(act2);
442 * list->append(act3);
443 * list->append(act4);
444 *
445 * //edge实参: TopEdg, BottomEdge (主要设置前面两个参数), LeftEdge, RightEdge
446 * item->setActionList(Qt::BottomEdge, *list);
447 * model->appendRow(item);
448 *
449 * wid->setCentralWidget(view);
450 * wid->show();
451 * \endcode
452 * \~chinese 上代码示例 code 效果图如下:
453 * \~chinese \image html DViewItemAction.png
454 * \~chinese \param[in] alignment 设置本控件对象(在父控件的)方向位置: 居左, 居中, 居右 (其他枚举值此处无效)
455 * \~chinese \param[out] iconSize 本控件的图标 icon 的大小
456 */
457
458 /*!
459 * \~chinese \brief 构造函数
460 * \~chinese \param[in] Alignment 设置放置的方位
461 * \~chinese \param[in] iconSize 设置图标 icon 的大小
462 * \~chinese \param[in] maxSize 控件矩形最大的大小
463 * \~chinese \param[in] clickable 是否允许点击动作的标识
464 */
465 DViewItemAction::DViewItemAction(Qt::Alignment alignment, const QSize &iconSize, const QSize &maxSize, bool clickable)
466 : QAction(nullptr)
467 , DObject(*new DViewItemActionPrivate(this))
468 {
469 D_D(DViewItemAction);
470
471 d->alignment = alignment;
472 d->iconSize = iconSize.isValid() ? iconSize : QSize(qApp->style()->pixelMetric(DStyle::PM_IndicatorWidth), qApp->style()->pixelMetric(DStyle::PM_IndicatorHeight));
473 d->maxSize = maxSize;
474 d->clickable = clickable;
475 }
476
477 DViewItemAction::DViewItemAction(Qt::Alignment alignment, const QSize &iconSize,
478 const QSize &maxSize, bool clickable, QObject *parent)
479 : DViewItemAction(alignment, iconSize, maxSize, clickable)
480 {
481 if (parent) {
482 qWarning() << "setting parent for a DViewItemAction object is no longer supported.";
483 }
484 }
485
486 /*!
487 * \~chinese \brief 获取 DViewItemAction 放置的(水平)位置
488 * \~chinese \return 返回 DViewItemAction 放置的(水平)位置
489 */
490 Qt::Alignment DViewItemAction::alignment() const
491 {
492 D_DC(DViewItemAction);
493
494 return d->alignment;
495 }
496
497 /*!
498 * \~chinese \brief 获取图标 icon 的矩形大小
499 * \~chinese \return 返回图标 icon 的矩形大小
500 */
501 QSize DViewItemAction::iconSize() const
502 {
503 D_DC(DViewItemAction);
504
505 return d->iconSize;
506 }
507
508 /*!
509 * \~chinese \brief 获取最大的矩形大小
510 * \~chinese \return 返回最大的矩形大小
511 */
512 QSize DViewItemAction::maximumSize() const
513 {
514 D_DC(DViewItemAction);
515
516 return d->maxSize;
517 }
518
519 /*!
520 * \~chinese \brief 获取点击区域范围
521 * \~chinese \return 返回点击区域范围
522 */
523 QMargins DViewItemAction::clickAreaMargins() const
524 {
525 D_DC(DViewItemAction);
526
527 return d->clickMargins;
528 }
529
530 /*!
531 * \~chinese \brief 设置点击区域范围(eg: 只有图标 icon 时候,会点击区域比较小, 不方便点击, 可以将点击范围设置大一点,便于点击)
532 * \~chinese \param[in] margins 将被设置的点击区域间隔数值
533 */
534 void DViewItemAction::setClickAreaMargins(const QMargins &margins)
535 {
536 D_D(DViewItemAction);
537
538 d->clickMargins = margins;
539 }
540
541 /*!
542 * \~chinese \brief 设置文本颜色的角色枚举数值 (DPalette)
543 * \~chinese \param[in] role 文本颜色的枚举值
544 */
545 void DViewItemAction::setTextColorRole(DPalette::ColorType role)
546 {
547 D_D(DViewItemAction);
548
549 d->colorRole = -1;
550 d->colorType = role;
551 }
552
553 /*!
554 * \~chinese \brief 设置文本颜色的角色枚举数值 (QPalette)
555 * \~chinese \param[in] role 文本颜色的枚举值
556 */
557 void DViewItemAction::setTextColorRole(QPalette::ColorRole role)
558 {
559 D_D(DViewItemAction);
560
561 d->colorType = -1;
562 d->colorRole = role;
563 }
564
565 /*!
566 * \~chinese \brief 获取文本颜色类型
567 * \~chinese \return 返回文本颜色的类型
568 */
569 DPalette::ColorType DViewItemAction::textColorType() const
570 {
571 D_DC(DViewItemAction);
572
573 return static_cast<DPalette::ColorType>(d->colorType);
574 }
575
576 /*!
577 * \~chinese \brief 获取文本颜色角色
578 * \~chinese \return 返回文本颜色角色
579 */
580 DPalette::ColorRole DViewItemAction::textColorRole() const
581 {
582 D_DC(DViewItemAction);
583
584 return static_cast<DPalette::ColorRole>(d->colorRole);
585 }
586
587 /*!
588 * \~chinese \brief 设置字体大小
589 * \~chinese \param[in] size 将要设置的字体大小值
590 */
591 void DViewItemAction::setFontSize(DFontSizeManager::SizeType size)
592 {
593 D_D(DViewItemAction);
594
595 d->fontSize = size;
596 }
597
598 /*!
599 * \~chinese \brief 获取字体
600 * \~chinese \return 返回字体
601 */
602 QFont DViewItemAction::font() const
603 {
604 D_DC(DViewItemAction);
605
606 if (d->fontSize < 0) {
607 return QAction::font();
608 }
609
610 return DFontSizeManager::instance()->get(static_cast<DFontSizeManager::SizeType>(d->fontSize), QAction::font());
611 }
612
613 /*!
614 * \~chinese \brief 获取是否允许被点击的状态(即:如果可以被点击返回true,否则返回false)
615 * \~chinese \return 返回是否允许被点击的状态
616 */
617 bool DViewItemAction::isClickable() const
618 {
619 D_DC(DViewItemAction);
620
621 return d->clickable;
622 }
623
624 /*!
625 * \~chinese \brief 设置 QWidget
626 * \~chinese \param[in] widget 被添加进来的 QWidget
627 */
628 void DViewItemAction::setWidget(QWidget *widget)
629 {
630 D_D(DViewItemAction);
631
632 d->widget = widget;
633 }
634
635 /*!
636 * \~chinese \brief 获取 QWidget 控件对象
637 * \~chinese \return 返回 QWidget 控件对象
638 */
639 QWidget *DViewItemAction::widget() const
640 {
641 D_DC(DViewItemAction);
642
643 return d->widget;
644 }
645
646 static QPalette::ColorRole getViewItemColorRole(const QModelIndex &index, int role)
647 {
648 const QVariant &value = index.data(role);
649
650 if (!value.isValid())
651 return QPalette::NoRole;
652
653 auto pair = qvariant_cast<QPair<int, int>>(value);
654
655 return static_cast<QPalette::ColorRole>(pair.first);
656 }
657
658 static DPalette::ColorType getViewItemColorType(const QModelIndex &index, int role)
659 {
660 const QVariant &value = index.data(role);
661
662 if (!value.isValid())
663 return DPalette::NoType;
664
665 auto pair = qvariant_cast<QPair<int, int>>(value);
666
667 return static_cast<DPalette::ColorType>(pair.second);
668 }
669
670 static QFont getViewItemFont(const QModelIndex &index, int role)
671 {
672 const QVariant &value = index.data(role);
673
674 if (!value.isValid()) {
675 return qvariant_cast<QFont>(index.data(Qt::FontRole));
676 }
677
678 DFontSizeManager::SizeType size = static_cast<DFontSizeManager::SizeType>(qvariant_cast<int>(value));
679 return DFontSizeManager::instance()->get(size);
680 }
681
682 DStyledItemDelegate::DStyledItemDelegate(QAbstractItemView *parent)
683 : QStyledItemDelegate(parent)
684 , DObject(*new DStyledItemDelegatePrivate(this))
685 {
686 //支持QAction的点击
687 parent->viewport()->installEventFilter(this);
688
689 // 初始化 background type. 注意 setBackgroundType() 中有额外的处理操作,所以不能直接简单的修改默认值
690 setBackgroundType(DStyledItemDelegate::RoundedBackground);
691 }
692
693 void DStyledItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
694 {
695 D_DC(DStyledItemDelegate);
696
697 QStyleOptionViewItem opt(option);
698 initStyleOption(&opt, index);
699
700 QRect backup_opt_rect = opt.rect;
701
702 const QWidget *widget = option.widget;
703 QStyle *style = widget ? widget->style() : QApplication::style();
704 bool editing = false;
705
706 if (auto view = qobject_cast<const QListView*>(widget)) {
707 editing = !qobject_cast<const QListWidget*>(view) && view->isPersistentEditorOpen(index);
708 }
709
710 if (!editing)
711 style->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, widget);
712
713 // draw the background
714 if (!editing && backgroundType() != NoBackground && !(opt.state & QStyle::State_Selected)
715 && !(d->backgroundType & NoNormalState && DStyle::getState(&opt) == DStyle::SS_NormalState)) {
716 DStyleOptionBackgroundGroup boption;
717 boption.init(widget);
718 boption.QStyleOption::operator =(opt);
719 boption.position = DStyleOptionBackgroundGroup::ItemBackgroundPosition(opt.viewItemPosition);
720
721 if (opt.backgroundBrush.style() != Qt::NoBrush) {
722 boption.dpalette.setBrush(DPalette::ItemBackground, opt.backgroundBrush);
723 }
724
725 boption.rect = opt.rect;
726
727 if (backgroundType() != RoundedBackground) {
728 boption.directions = Qt::Vertical;
729 }
730
731 style->drawPrimitive(static_cast<QStyle::PrimitiveElement>(DStyle::PE_ItemBackground), &boption, painter, widget);
732 }
733
734 // 设置内容区域
735 QMargins margins = d->margins;
736 const QVariant &margins_varinat = index.data(Dtk::MarginsRole);
737
738 if (margins_varinat.isValid()) {
739 margins = qvariant_cast<QMargins>(margins_varinat);
740 }
741
742 opt.rect = opt.rect.marginsRemoved(margins);
743 QRect itemContentRect = opt.rect;
744 QSize action_area_size(0, 0);
745 QList<QPair<QAction*, QRect>> clickActionList;
746 int spacing = DStyleHelper(qApp->style()).pixelMetric(DStyle::PM_ContentsSpacing);
747
748 action_area_size = d->drawActions(painter, opt, index.data(Dtk::LeftActionListRole), Qt::LeftEdge, &clickActionList);
749 itemContentRect.setLeft(itemContentRect.left() + action_area_size.width() + (action_area_size.isNull() ? 0 : spacing));
750
751 action_area_size = d->drawActions(painter, opt, index.data(Dtk::RightActionListRole), Qt::RightEdge, &clickActionList);
752 itemContentRect.setRight(itemContentRect.right() - action_area_size.width() - (action_area_size.isNull() ? 0 : spacing));
753
754 action_area_size = d->drawActions(painter, opt, index.data(Dtk::TopActionListRole), Qt::TopEdge, &clickActionList);
755 itemContentRect.setTop(itemContentRect.top() + action_area_size.height() + (action_area_size.isNull() ? 0 : spacing));
756
757 action_area_size = d->drawActions(painter, opt, index.data(Dtk::BottomActionListRole), Qt::BottomEdge, &clickActionList);
758 itemContentRect.setBottom(itemContentRect.bottom() - action_area_size.height() - (action_area_size.isNull() ? 0 : spacing));
759
760 if (!clickActionList.isEmpty()) {
761 const_cast<DStyledItemDelegatePrivate*>(d)->clickableActionMap[index] = clickActionList;
762 } else {
763 const_cast<DStyledItemDelegatePrivate*>(d)->clickableActionMap.remove(index);
764 }
765
766 const DViewItemActionList &text_action_list = qvariant_cast<DViewItemActionList>(index.data(Dtk::TextActionListRole));
767
768 opt.rect = itemContentRect;
769 QRect iconRect, textRect, checkRect;
770 DStyle::viewItemLayout(style, &opt, &iconRect, &textRect, &checkRect, false);
771
772 // 图标的绘制用也可能会使用这些颜色
773 QPalette::ColorGroup cg = opt.state & QStyle::State_Enabled
774 ? QPalette::Normal : QPalette::Disabled;
775 if (opt.state & QStyle::State_Selected) {
776 painter->setPen(opt.palette.color(cg, QPalette::HighlightedText));
777 } else {
778 painter->setPen(opt.palette.color(cg, QPalette::Text));
779 }
780
781 // draw icon
782 if (opt.features & QStyleOptionViewItem::HasDecoration) {
783 QIcon::Mode mode = QIcon::Normal;
784 if (!(opt.state & QStyle::State_Enabled))
785 mode = QIcon::Disabled;
786 else if (opt.state & QStyle::State_Selected)
787 mode = QIcon::Selected;
788 QIcon::State state = opt.state & QStyle::State_Open ? QIcon::On : QIcon::Off;
789 opt.icon.paint(painter, iconRect, opt.decorationAlignment, mode, state);
790 }
791
792 // draw the text
793 if (opt.features & QStyleOptionViewItem::HasDisplay) {
794 if (opt.state & QStyle::State_Editing) {
795 painter->setPen(opt.palette.color(cg, QPalette::Text));
796 painter->drawRect(textRect.adjusted(0, 0, -1, -1));
797 }
798
799 if (!text_action_list.isEmpty()) {
800 opt.displayAlignment &= ~Qt::AlignBottom;
801 opt.displayAlignment &= ~Qt::AlignVCenter;
802 opt.displayAlignment |= Qt::AlignTop;
803 }
804
805 if (text_action_list.isEmpty()) {
806 DStyle::viewItemDrawText(style, painter, &opt, textRect);
807 } else {
808 opt.displayAlignment &= ~Qt::AlignVCenter;
809 opt.displayAlignment &= ~Qt::AlignBottom;
810
811 QRect bounding = DStyle::viewItemDrawText(style, painter, &opt, textRect);
812
813 // draw action text
814 for (const DViewItemAction *action : text_action_list) {
815 textRect.setTop(bounding.bottom());
816 opt.font = action->font();
817 opt.text = action->text();
818
819 if (opt.state & QStyle::State_Selected) {
820 painter->setPen(opt.palette.color(cg, QPalette::HighlightedText));
821 } else if (action->textColorType() >= 0) {
822 painter->setPen(DApplicationHelper::instance()->palette(widget).color(cg, action->textColorType()));
823 } else if (action->textColorRole() >= 0) {
824 painter->setPen(opt.palette.color(cg, action->textColorRole()));
825 } else {
826 painter->setPen(opt.palette.color(cg, QPalette::Text));
827 }
828
829 bounding = DStyle::viewItemDrawText(style, painter, &opt, textRect);
830 }
831 }
832 }
833
834 // draw the check mark
835 if (opt.features & QStyleOptionViewItem::HasCheckIndicator) {
836 QStyleOptionViewItem option(opt);
837 option.rect = checkRect;
838 option.state = option.state & ~QStyle::State_HasFocus;
839
840 switch (opt.checkState) {
841 case Qt::Unchecked:
842 option.state |= QStyle::State_Off;
843 break;
844 case Qt::PartiallyChecked:
845 option.state |= QStyle::State_NoChange;
846 break;
847 case Qt::Checked:
848 option.state |= QStyle::State_On;
849 break;
850 }
851
852 style->drawPrimitive(QStyle::PE_IndicatorViewItemCheck, &option, painter, widget);
853 }
854
855 // reset rect for focus rect
856 opt.rect = backup_opt_rect;
857
858 if (opt.state & QStyle::State_HasFocus) {
859 QStyleOptionFocusRect o;
860 o.QStyleOption::operator=(opt);
861 o.rect = style->subElementRect(QStyle::SE_ItemViewItemFocusRect, &opt, widget);
862 o.state |= QStyle::State_KeyboardFocusChange;
863 o.state |= QStyle::State_Item;
864 QPalette::ColorGroup cg = (opt.state & QStyle::State_Enabled)
865 ? QPalette::Normal : QPalette::Disabled;
866 o.backgroundColor = opt.palette.color(cg, (opt.state & QStyle::State_Selected)
867 ? QPalette::Highlight : QPalette::Window);
868 style->drawPrimitive(QStyle::PE_FrameFocusRect, &o, painter, widget);
869 }
870 }
871
872 QSize DStyledItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
873 {
874 D_DC(DStyledItemDelegate);
875
876 if (d->itemSize.isValid()) {
877 return d->itemSize;
878 }
879
880 QVariant value = index.data(Qt::SizeHintRole);
881
882 if (value.isValid())
883 return qvariant_cast<QSize>(value);
884
885 const QWidget *widget = option.widget;
886 QStyle *style = widget ? widget->style() : QApplication::style();
887 QStyleOptionViewItem opt = option;
888 initStyleOption(&opt, index);
889 QRect pixmapRect, textRect, checkRect;
890 DStyle::viewItemLayout(style, &opt, &pixmapRect, &textRect, &checkRect, true);
891
892 const DViewItemActionList &text_action_list = qvariant_cast<DViewItemActionList>(index.data(Dtk::TextActionListRole));
893
894 for (const DViewItemAction *action : text_action_list) {
895 const QSize &action_size = d->displayActionSize(action, style, opt);
896 textRect.setWidth(qMax(textRect.width(), action_size.width()));
897 textRect.setHeight(textRect.height() + action_size.height());
898 }
899
900 QSize size = (pixmapRect | textRect | checkRect).size();
901
902 const DViewItemActionList &left_actions = qvariant_cast<QList<DViewItemAction*>>(index.data(Dtk::LeftActionListRole));
903 const DViewItemActionList &right_actions = qvariant_cast<QList<DViewItemAction*>>(index.data(Dtk::RightActionListRole));
904 const DViewItemActionList &top_actions = qvariant_cast<QList<DViewItemAction*>>(index.data(Dtk::TopActionListRole));
905 const DViewItemActionList &bottom_actions = qvariant_cast<QList<DViewItemAction*>>(index.data(Dtk::BottomActionListRole));
906
907 QSize action_area_size;
908 // 获取左边区域大小
909 d->doActionsLayout(QRect(0, 0, QWIDGETSIZE_MAX, size.height()), left_actions, Qt::Horizontal,
910 option.direction, option.decorationSize, &action_area_size);
911 size.setHeight(qMax(size.height(), action_area_size.height()));
912 size.setWidth(size.width() + action_area_size.width());
913
914 // 获取右边区域大小
915 d->doActionsLayout(QRect(0, 0, QWIDGETSIZE_MAX, size.height()), right_actions, Qt::Horizontal,
916 option.direction, option.decorationSize, &action_area_size);
917 size.setHeight(qMax(size.height(), action_area_size.height()));
918 size.setWidth(size.width() + action_area_size.width());
919
920 // 获取上面区域大小
921 d->doActionsLayout(QRect(0, 0, size.width(), QWIDGETSIZE_MAX), top_actions, Qt::Vertical,
922 option.direction, option.decorationSize, &action_area_size);
923 size.setHeight(size.height() + action_area_size.height());
924 size.setWidth(qMax(size.width(), action_area_size.width()));
925
926 // 获取下面区域大小
927 d->doActionsLayout(QRect(0, 0, size.width(), QWIDGETSIZE_MAX), bottom_actions, Qt::Vertical,
928 option.direction, option.decorationSize, &action_area_size);
929 size.setHeight(size.height() + action_area_size.height());
930 size.setWidth(qMax(size.width(), action_area_size.width()));
931
932 QMargins margins = d->margins;
933 const QVariant &margins_varinat = index.data(Dtk::MarginsRole);
934
935 if (margins_varinat.isValid()) {
936 margins = qvariant_cast<QMargins>(margins_varinat);
937 }
938
939 // 在item高度上添加额外空间来模拟spacing
940 const QListView * lv = qobject_cast<const QListView*>(option.widget);
941 if (lv) {
942 if (lv->flow() == QListView::LeftToRight) {
943 size.rwidth() += d->itemSpacing;
944 } else {
945 size.rheight() += d->itemSpacing;
946 }
947 }
948
949 return QRect(QPoint(0, 0), size).marginsAdded(margins).size();
950 }
951
952 void DStyledItemDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
953 {
954 if (!editor)
955 return;
956 Q_ASSERT(index.isValid());
957 const QWidget *widget = option.widget;
958
959 QStyleOptionViewItem opt = option;
960 initStyleOption(&opt, index);
961
962 QRect rect = opt.rect;
963
964 if (opt.features & QStyleOptionViewItem::HasDecoration) {
965 opt.showDecorationSelected = true;
966
967 QStyle *style = widget ? widget->style() : QApplication::style();
968 QRect geom = style->subElementRect(QStyle::SE_ItemViewItemDecoration, &opt, widget);
969 int spacing = DStyleHelper(style).pixelMetric(DStyle::PM_ContentsSpacing, &opt, widget);
970
971 // 排除掉图标的位置,剩下的空间全都给输入框
972 switch (opt.decorationPosition) {
973 case QStyleOptionViewItem::Left:
974 rect.setLeft(geom.right() + spacing);
975 break;
976 case QStyleOptionViewItem::Right:
977 rect.setRight(geom.left() - spacing);
978 break;
979 case QStyleOptionViewItem::Top:
980 rect.setTop(geom.bottom() + spacing);
981 break;
982 case QStyleOptionViewItem::Bottom:
983 rect.setBottom(geom.top() - spacing);
984 break;
985 default:
986 break;
987 }
988 }
989
990 // 确保输入框的高度不会超出范围
991 rect.setHeight(qMin(rect.height(), editor->sizeHint().height()));
992
993 editor->setGeometry(rect);
994 }
995
996 DStyledItemDelegate::BackgroundType DStyledItemDelegate::backgroundType() const
997 {
998 D_DC(DStyledItemDelegate);
999 return DStyledItemDelegate::BackgroundType(d->backgroundType & BackgroundType_Mask);
1000 }
1001
1002 QMargins DStyledItemDelegate::margins() const
1003 {
1004 D_DC(DStyledItemDelegate);
1005
1006 return d->margins;
1007 }
1008
1009 QSize DStyledItemDelegate::itemSize() const
1010 {
1011 D_DC(DStyledItemDelegate);
1012
1013 return d->itemSize;
1014 }
1015
1016 int DStyledItemDelegate::spacing() const
1017 {
1018 D_DC(DStyledItemDelegate);
1019
1020 return d->itemSpacing;
1021 }
1022
1023 void DStyledItemDelegate::setBackgroundType(DStyledItemDelegate::BackgroundType type)
1024 {
1025 D_D(DStyledItemDelegate);
1026
1027 if (d->backgroundType == type)
1028 return;
1029
1030 d->backgroundType = type;
1031 d->margins = QMargins();
1032
1033 if (backgroundType() != NoBackground) {
1034 QStyle *style = qApp->style();
1035
1036 if (QWidget *w = qobject_cast<QWidget *>(parent())) {
1037 style = w->style();
1038 }
1039
1040 int frame_margin = style->pixelMetric(static_cast<QStyle::PixelMetric>(DStyle::PM_FrameRadius));
1041 d->margins += frame_margin;
1042 }
1043 }
1044
1045 void DStyledItemDelegate::setMargins(const QMargins margins)
1046 {
1047 D_D(DStyledItemDelegate);
1048
1049 d->margins = margins;
1050 }
1051
1052 void DStyledItemDelegate::setItemSize(QSize itemSize)
1053 {
1054 D_D(DStyledItemDelegate);
1055
1056 d->itemSize = itemSize;
1057 }
1058
1059 void DStyledItemDelegate::setItemSpacing(int spacing)
1060 {
1061 D_D(DStyledItemDelegate);
1062
1063 d->itemSpacing = spacing;
1064 }
1065
1066 void DStyledItemDelegate::initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const
1067 {
1068 QStyledItemDelegate::initStyleOption(option, index);
1069
1070 if (index.data(Dtk::TextActionListRole).isValid()) {
1071 option->features |= QStyleOptionViewItem::HasDisplay;
1072 }
1073
1074 if ((option->state & (QStyle::State_HasFocus | QStyle::State_Selected)) == (QStyle::State_HasFocus | QStyle::State_Selected)) {
1075 if (const QAbstractItemView *view = qobject_cast<const QAbstractItemView*>(option->widget)) {
1076 // item 被选中背景色和获取焦点时的border样式类似,因此单选时不再绘制焦点样式
1077 if (view->selectionMode() == QAbstractItemView::SingleSelection) {
1078 option->state &= ~QStyle::State_HasFocus;
1079 }
1080 }
1081 }
1082
1083 D_DC(DStyledItemDelegate);
1084 const QListView * lv = qobject_cast<const QListView*>(option->widget);
1085 if (lv) {
1086 if (lv->flow() == QListView::LeftToRight) {
1087 option->rect.adjust(0, 0, 0 - d->itemSpacing, 0);
1088 } else {
1089 option->rect.adjust(0, 0, 0, 0 - d->itemSpacing);
1090 }
1091 }
1092
1093 DPalette::ColorType type = getViewItemColorType(index, Dtk::ViewItemForegroundRole);
1094
1095 if (type != DPalette::NoType) {
1096 option->palette.setBrush(QPalette::Text, DApplicationHelper::instance()->palette(option->widget).brush(type));
1097 } else {
1098 QPalette::ColorRole role = getViewItemColorRole(index, Dtk::ViewItemForegroundRole);
1099
1100 if (role != QPalette::NoRole) {
1101 option->palette.setBrush(QPalette::Text, lv->palette().brush(role));
1102 }
1103 }
1104
1105 type = getViewItemColorType(index, Dtk::ViewItemBackgroundRole);
1106
1107 if (type != DPalette::NoType) {
1108 option->backgroundBrush = DApplicationHelper::instance()->palette(option->widget).brush(type);
1109 } else {
1110 QPalette::ColorRole role = getViewItemColorRole(index, Dtk::ViewItemBackgroundRole);
1111
1112 if (role != QPalette::NoRole) {
1113 option->backgroundBrush = lv->palette().brush(role);
1114 }
1115 }
1116
1117 option->font = getViewItemFont(index, Dtk::ViewItemFontLevelRole);
1118 }
1119
1120 bool DStyledItemDelegate::eventFilter(QObject *object, QEvent *event)
1121 {
1122 switch (event->type()) {
1123 case QEvent::MouseButtonPress: {
1124 D_D(DStyledItemDelegate);
1125 d->pressedAction = nullptr;
1126 Q_FALLTHROUGH();
1127 }
1128 case QEvent::MouseButtonRelease: {
1129 QMouseEvent *ev = static_cast<QMouseEvent*>(event);
1130 D_D(DStyledItemDelegate);
1131
1132 QAbstractItemView *view = qobject_cast<QAbstractItemView*>(parent());
1133 const QModelIndex &index = view->indexAt(ev->pos());
1134
1135 for (auto action_map : d->clickableActionMap.value(index)) {
1136 if (action_map.first->isEnabled()
1137 && action_map.second.contains(ev->pos(), true)) {
1138 if (event->type() == QEvent::MouseButtonRelease
1139 && d->pressedAction == action_map.first) {
1140 action_map.first->trigger();
1141 } else {
1142 d->pressedAction = action_map.first;
1143 }
1144
1145 return true;
1146 }
1147 }
1148 break;
1149 }
1150 default:
1151 break;
1152 }
1153
1154 return QStyledItemDelegate::eventFilter(object, event);
1155 }
1156
1157 static Dtk::ItemDataRole getActionPositionRole(Qt::Edge edge)
1158 {
1159 switch (edge) {
1160 case Qt::TopEdge:
1161 return Dtk::TopActionListRole;
1162 case Qt::RightEdge:
1163 return Dtk::RightActionListRole;
1164 case Qt::LeftEdge:
1165 return Dtk::LeftActionListRole;
1166 case Qt::BottomEdge:
1167 return Dtk::BottomActionListRole;
1168 default:
1169 break;
1170 }
1171
1172 return Dtk::LeftActionListRole;
1173 }
1174
1175 static void clearActions(const DViewItemActionList &list)
1176 {
1177 for (auto action : list) {
1178 action->deleteLater();
1179 }
1180 }
1181
1182 /*!
1183 * \~chinese \class DStandardItem
1184 * \~chinese \brief 提供标准项 item, 通常用于模型/视图,或模型-代理-视图里面,用以提供标准的 item 控件
1185 * \~chinese \see QStandardItem, 和 DViewItemAction (有代码片示例,可重点参考)
1186 */
1187
1188 /*!
1189 * \~chinese \brief 析构函数
1190 */
1191 DStandardItem::~DStandardItem()
1192 {
1193 for (Qt::Edge e : {Qt::TopEdge, Qt::LeftEdge, Qt::RightEdge, Qt::BottomEdge}) {
1194 clearActions(qvariant_cast<DViewItemActionList>(data(getActionPositionRole(e))));
1195 }
1196
1197 clearActions(textActionList());
1198 }
1199
1200 /*!
1201 * \~chinese \brief 设置 actionList
1202 * \~chinese \param[in] edge 选用数值方向的枚举值, 表示设置 list 是在本对象 DStandardItem 的哪一个区域;
1203 * \~chinese edge是相对于 item 的内容区域的,内容区域指的是 item 自身的图标和文字所在区域,也就是通过 setIcon和setText设置的内容的显示区域。
1204 * \~chinese \param[in] list 许多 actiontem 的集合的 list 列表
1205 */
1206 void DStandardItem::setActionList(Qt::Edge edge, const DViewItemActionList &list)
1207 {
1208 QVariant value;
1209
1210 if (!list.isEmpty()) {
1211 value = QVariant::fromValue(list);
1212 }
1213
1214 auto role = getActionPositionRole(edge);
1215 clearActions(qvariant_cast<DViewItemActionList>(data(role)));
1216 setData(value, role);
1217 }
1218
1219 /*!
1220 * \~chinese \brief 获取项 item 的集合列表 list
1221 * \~chinese \param[in] edge edge是相对于 item 的内容区域的,内容区域指的是 item 自身的图标和文字所在区域,也就是通过 setIcon和setText设置的内容的显示区域。
1222 * \~chinese \return 返回项 item 的集合列表 list
1223 */
1224 DViewItemActionList DStandardItem::actionList(Qt::Edge edge) const
1225 {
1226 return qvariant_cast<DViewItemActionList>(data(getActionPositionRole(edge)));
1227 }
1228
1229 /*!
1230 * \~chinese \brief 设置项 item 的集合列表 list, 只显示有 text 的 DViewItemActionList 集合
1231 * \~chinese \param[in] 项 item 的集合列表 list, 只显示文字的 item 的集合
1232 * \~chinese \li 一个参考代码片段,使用 setTextActionList():
1233 *
1234 * \code
1235 * QMainWindow *wid = new QMainWindow();
1236 * wid->resize(800, 600);
1237 *
1238 * //视图和模型
1239 * DListView *view = new DListView(wid);
1240 * QStandardItemModel *model = new QStandardItemModel(view);
1241 * view->setModel(model);
1242 *
1243 * //标准DStandardItem item
1244 * DStandardItem *item = new DStandardItem();
1245 * item->setText("@1:这是同一个item 的text\n@2:这是同一个item 的text\n@3:这是同一个item 的text\n@4:这是同一个item 的text\n@5:这是同一个item 的text\n@6:这是同一个item 的text");
1246 *
1247 * //DViewItemAction() 的形参: 其参数 alignment = AlignLeft 或 AlignHCenter 或 AlignRight; 设置为 AlignTop, AlignVCenter, AlignBottom 也是无效的
1248 * DViewItemAction *act1 = new DViewItemAction(Qt::AlignBottom, QSize(15, 15), QSize(50, 50));
1249 * act1->setText("act1");
1250 * act1->setIcon(QIcon("/home/yuanyi/Desktop/dog.jpg"));
1251 * DViewItemAction *act2 = new DViewItemAction(Qt::AlignVCenter, QSize(15, 15), QSize());
1252 * act2->setText("act2");
1253 * act2->setIcon(QIcon("/home/yuanyi/Desktop/dog.jpg"));
1254 * DViewItemAction *act3 = new DViewItemAction(Qt::AlignTop, QSize(15, 15), QSize(100, 50));
1255 * act3->setText("act3");
1256 * act3->setIcon(QIcon("/home/yuanyi/Desktop/dog.jpg"));
1257 * DViewItemAction *act4 = new DViewItemAction(Qt::AlignBottom, QSize(15, 15), QSize(100, 50));
1258 * act4->setText("act4");
1259 * act4->setIcon(QIcon("/home/yuanyi/Desktop/dog.jpg"));
1260 *
1261 * DViewItemActionList *list = new DViewItemActionList();
1262 * list->append(act1);
1263 * list->append(act2);
1264 * list->append(act3);
1265 * list->append(act4);
1266 *
1267 * item->setTextActionList(*list);
1268 * model->appendRow(item);
1269 *
1270 * wid->setCentralWidget(view);
1271 * wid->show();
1272 * \endcode
1273 * \~chinese \li 代码片运行效果图:
1274 *
1275 * \~chinese \image html DStandardItem.png
1276 */
1277 void DStandardItem::setTextActionList(const DViewItemActionList &list)
1278 {
1279 QVariant value;
1280
1281 if (!list.isEmpty()) {
1282 value = QVariant::fromValue(list);
1283 }
1284
1285 clearActions(textActionList());
1286 setData(value, Dtk::TextActionListRole);
1287 }
1288
1289 /*!
1290 * \~chinese \brief 返回 "扩充的文本内容列表" 数据
1291 */
1292 DViewItemActionList DStandardItem::textActionList() const
1293 {
1294 return qvariant_cast<DViewItemActionList>(data(Dtk::TextActionListRole));
1295 }
1296
1297 void DStandardItem::setTextColorRole(DPalette::ColorType role)
1298 {
1299 setData(QVariant::fromValue(qMakePair((int)QPalette::NoRole, (int)role)), Dtk::ViewItemForegroundRole);
1300 }
1301
1302 void DStandardItem::setTextColorRole(QPalette::ColorRole role)
1303 {
1304 setData(QVariant::fromValue(qMakePair((int)role, (int)DPalette::NoType)), Dtk::ViewItemForegroundRole);
1305 }
1306
1307 DPalette::ColorType DStandardItem::textColorType() const
1308 {
1309 return getViewItemColorType(index(), Dtk::ViewItemForegroundRole);
1310 }
1311
1312 QPalette::ColorRole DStandardItem::textColorRole() const
1313 {
1314 return getViewItemColorRole(index(), Dtk::ViewItemForegroundRole);
1315 }
1316
1317 void DStandardItem::setBackgroundRole(DPalette::ColorType role)
1318 {
1319 setData(QVariant::fromValue(qMakePair((int)QPalette::NoRole, (int)role)), Dtk::ViewItemBackgroundRole);
1320 }
1321
1322 void DStandardItem::setBackgroundRole(QPalette::ColorRole role)
1323 {
1324 setData(QVariant::fromValue(qMakePair((int)role, (int)DPalette::NoType)), Dtk::ViewItemBackgroundRole);
1325 }
1326
1327 DPalette::ColorType DStandardItem::backgroundType() const
1328 {
1329 return getViewItemColorType(index(), Dtk::ViewItemBackgroundRole);
1330 }
1331
1332 QPalette::ColorRole DStandardItem::backgroundRole() const
1333 {
1334 return getViewItemColorRole(index(), Dtk::ViewItemBackgroundRole);
1335 }
1336
1337 void DStandardItem::setFontSize(DFontSizeManager::SizeType size)
1338 {
1339 setData((int)size, Dtk::ViewItemFontLevelRole);
1340 }
1341
1342 QFont DStandardItem::font() const
1343 {
1344 return getViewItemFont(index(), Dtk::ViewItemFontLevelRole);
1345 }
1346
1347 DWIDGET_END_NAMESPACE
0 /*
1 * Copyright (C) 2017 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #ifndef DSTYLEDITEMDELEGATE_H
21 #define DSTYLEDITEMDELEGATE_H
22
23 #include <dtkwidget_global.h>
24 #include <DObject>
25 #include <DPalette>
26 #include <DFontSizeManager>
27
28 #include <QAction>
29 #include <QStyledItemDelegate>
30 #include <QStandardItem>
31 #include <QAbstractItemView>
32
33 DWIDGET_BEGIN_NAMESPACE
34
35 class DViewItemActionPrivate;
36 class DViewItemAction : public QAction, public DCORE_NAMESPACE::DObject
37 {
38 Q_OBJECT
39 D_DECLARE_PRIVATE(DViewItemAction)
40
41 public:
42 explicit DViewItemAction(Qt::Alignment alignment = Qt::Alignment(), const QSize &iconSize = QSize(),
43 const QSize &maxSize = QSize(), bool clickable = false);
44 D_DECL_DEPRECATED explicit DViewItemAction(Qt::Alignment alignment, const QSize &iconSize,
45 const QSize &maxSize, bool clickable, QObject *parent);
46
47 Qt::Alignment alignment() const;
48 QSize iconSize() const;
49 QSize maximumSize() const;
50
51 QMargins clickAreaMargins() const;
52 void setClickAreaMargins(const QMargins &margins);
53
54 void setTextColorRole(DPalette::ColorType role);
55 void setTextColorRole(DPalette::ColorRole role);
56 DPalette::ColorType textColorType() const;
57 DPalette::ColorRole textColorRole() const;
58
59 void setFontSize(DFontSizeManager::SizeType size);
60 QFont font() const;
61
62 bool isClickable() const;
63
64 void setWidget(QWidget *widget);
65 QWidget *widget() const;
66 };
67 typedef QList<DViewItemAction *> DViewItemActionList;
68
69 class DStyledItemDelegatePrivate;
70 class DStyledItemDelegate : public QStyledItemDelegate, public DCORE_NAMESPACE::DObject
71 {
72 Q_OBJECT
73 D_DECLARE_PRIVATE(DStyledItemDelegate)
74
75 Q_PROPERTY(BackgroundType backgroundType READ backgroundType WRITE setBackgroundType)
76 Q_PROPERTY(QMargins margins READ margins WRITE setMargins)
77 Q_PROPERTY(QSize itemSize READ itemSize WRITE setItemSize)
78
79 public:
80 enum BackgroundType {
81 NoBackground = 0,
82 ClipCornerBackground = 1,
83 RoundedBackground = 2,
84 BackgroundType_Mask = 0xff,
85 NoNormalState = 0x100
86 };
87
88 explicit DStyledItemDelegate(QAbstractItemView *parent = nullptr);
89
90 void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
91 QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override;
92
93 void updateEditorGeometry(QWidget *editor,
94 const QStyleOptionViewItem &option,
95 const QModelIndex &index) const override;
96
97 BackgroundType backgroundType() const;
98 QMargins margins() const;
99 QSize itemSize() const;
100 int spacing() const;
101
102 public Q_SLOTS:
103 void setBackgroundType(BackgroundType backgroundType);
104 void setMargins(const QMargins margins);
105 void setItemSize(QSize itemSize);
106 void setItemSpacing(int spacing);
107
108 protected:
109 void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const override;
110 bool eventFilter(QObject *object, QEvent *event) override;
111 };
112
113 class DStandardItem : public QStandardItem
114 {
115 public:
116 using QStandardItem::QStandardItem;
117 virtual ~DStandardItem();
118
119 void setActionList(Qt::Edge edge, const DViewItemActionList &list);
120 DViewItemActionList actionList(Qt::Edge edge) const;
121
122 void setTextActionList(const DViewItemActionList &list);
123 DViewItemActionList textActionList() const;
124
125 void setTextColorRole(DPalette::ColorType role);
126 void setTextColorRole(DPalette::ColorRole role);
127 DPalette::ColorType textColorType() const;
128 DPalette::ColorRole textColorRole() const;
129
130 void setBackgroundRole(DPalette::ColorType role);
131 void setBackgroundRole(DPalette::ColorRole role);
132 DPalette::ColorType backgroundType() const;
133 DPalette::ColorRole backgroundRole() const;
134
135 void setFontSize(DFontSizeManager::SizeType size);
136 QFont font() const;
137 };
138
139 DWIDGET_END_NAMESPACE
140
141 Q_DECLARE_METATYPE(DTK_WIDGET_NAMESPACE::DViewItemActionList)
142
143 #endif // DSTYLEDITEMDELEGATE_H
1818 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1919 */
2020
21 #define private public
22 #include <QFont>
23 #undef private
24
2125 #include "dstyleoption.h"
2226
2327 #include "dlineedit.h"
2428 #include "private/dlineedit_p.h"
29 #include "dapplicationhelper.h"
2530
2631 #include <QGuiApplication>
32 #include <qmath.h>
33 #include <private/qfont_p.h>
34
35 #include <cmath>
2736
2837 DWIDGET_BEGIN_NAMESPACE
2938
121130 */
122131 void DStyleOption::init(QWidget *widget)
123132 {
124 Q_UNUSED(widget)
133 init(static_cast<const QWidget*>(widget));
134 }
135
136 void DStyleOption::init(const QWidget *widget)
137 {
138 dpalette = DApplicationHelper::instance()->palette(widget);
125139 }
126140
127141 /*!
134148 * \param widget
135149 * \sa Dtk::Widget::DSuggestButton
136150 */
137 void DStyleOptionSuggestButton::init(QWidget *widget)
138 {
139 Q_UNUSED(widget)
140
141 features |= QStyleOptionButton::ButtonFeature(SuggestButton);
151 void DStyleOptionButton::init(const QWidget *widget)
152 {
153 DStyleOption::init(widget);
142154 }
143155
144156 /*!
151163 * \param widget
152164 * \sa Dtk::Widget::DLineEdit
153165 */
154 void DStyleOptionLineEdit::init(QWidget *widget)
155 {
156 if (const DLineEdit *edit = qobject_cast<DLineEdit*>(widget)) {
166 void DStyleOptionLineEdit::init(const QWidget *widget)
167 {
168 DStyleOption::init(widget);
169
170 if (const DLineEdit *edit = qobject_cast<const DLineEdit*>(widget)) {
157171 if (edit->isAlert()) {
158172 features |= Alert;
159173 }
160
161 if (edit->iconVisible()) {
162 features |= IconButton;
163 iconButtonRect = edit->d_func()->m_rightIcon->geometry();
164 }
165 }
166 }
167
168 void DStyleOptionBackgroundGroup::init(QWidget *widget)
169 {
170 backgroundRect = widget->geometry();
171 }
172
173 class DPalettePrivate
174 }
175 }
176
177 void DStyleOptionBackgroundGroup::init(const QWidget *widget)
178 {
179 DStyleOption::init(widget);
180 if (widget)
181 rect = widget->geometry();
182 }
183
184 class DFontSizeManagerPrivate
174185 {
175186 public:
176 QBrush br[DPalette::NColorGroups][DPalette::NColorRoles];
177
178 static QHash<const QWidget*, QSharedPointer<DPalettePrivate>> map;
179 static QSharedPointer<DPalettePrivate> appPalette;
180 };
181
182 QHash<const QWidget*, QSharedPointer<DPalettePrivate>> DPalettePrivate::map;
183 QSharedPointer<DPalettePrivate> DPalettePrivate::appPalette = QSharedPointer<DPalettePrivate>::create();
184
185 DPalette::DPalette()
186 : d(DPalettePrivate::appPalette)
187 {
188
189 }
190
191 DPalette::DPalette(const QPalette &palette)
192 : QPalette(palette)
193 , d(DPalettePrivate::appPalette)
194 {
195
196 }
197
198 DPalette::~DPalette()
199 {
200
201 }
202
203 DPalette DPalette::get(const QWidget *widget, const QPalette &base)
204 {
205 DPalette pa = base;
206 auto data = DPalettePrivate::map.value(widget);
207
208 while (!data) {
209 widget = widget->parentWidget();
210
211 if (!widget) {
212 break;
213 }
214
215 data = DPalettePrivate::map.value(widget);
216 }
217
218 if (data) {
219 pa.d = data;
220 }
221
222 return pa;
223 }
224
225 void DPalette::set(QWidget *widget, const DPalette &pa)
226 {
227 if (!DPalettePrivate::map.contains(widget)) {
228 QObject::connect(widget, &QWidget::destroyed, [widget] {
229 DPalettePrivate::map.remove(widget);
230 });
231 }
232
233 DPalettePrivate::map[widget] = pa.d;
234 widget->setPalette(pa);
235 }
236
237 void DPalette::setGeneric(const DPalette &pa)
238 {
239 DPalettePrivate::appPalette = pa.d;
240 }
241
242 const QBrush &DPalette::brush(QPalette::ColorGroup cg, DPalette::ColorType cr) const
243 {
244 if (cr >= NColorTypes) {
245 return QPalette::brush(cg, QPalette::NoRole);
246 }
247
248 if (cg == Current) {
249 cg = currentColorGroup();
250 } else if (cg >= NColorGroups) {
251 cg = Normal;
252 }
253
254 return d->br[cg][cr];
255 }
256
257 void DPalette::setBrush(QPalette::ColorGroup cg, DPalette::ColorType cr, const QBrush &brush)
258 {
259 d->br[cg][cr] = brush;
260 }
261
262 class DFontSizeManagerPrivate
263 {
264 public:
187 DFontSizeManagerPrivate() {
188 fontPixelSizeDiff = DFontSizeManager::fontPixelSize(qGuiApp->font()) - fontPixelSize[DFontSizeManager::T6];
189 }
190
265191 QList<QWidget*> binderMap[DFontSizeManager::NSizeTypes];
266192 quint16 fontPixelSize[DFontSizeManager::NSizeTypes] = {40, 30, 24, 20, 17, 14, 13, 12, 11, 10};
267193 quint8 fontGenericSizeType = DFontSizeManager::T6;
276202 }
277203 };
278204
205 /*!
206 * \~chinese \class DFontSizeManager
207 * \~chinese \brief 字体大小设置的一个类,系统默认只设置T6
208 * \chiinese \image html font.png
209 */
210
211 /*!
212 * \~chinese \brief 创建一个字体管理的实例
213 * \~chinese \return 返回一个创建的 static DFontSizeManager 实例
214 */
279215 DFontSizeManager *DFontSizeManager::instance()
280216 {
281217 static DFontSizeManager manager;
285221
286222 void DFontSizeManager::bind(QWidget *widget, DFontSizeManager::SizeType type)
287223 {
224 bind(widget, type, widget->font().weight());
225 }
226
227 /*!
228 * \~chinese \enum DFontSizeManager::SizeType
229 * \~chinese DFontSizeManager::SizeType 定义了 DFontSizeManager 的系统字体的定义的大小; 而系统只会设置 T6 为系统默认的字体
230 * \~chinese \var DFontSizeManager:SizeType DFontSizeManager::T1
231 * \~chinese 系统级别为 T1 的字体大小, 默认是40 px
232 * \~chinese \var DFontSizeManager:SizeType DFontSizeManager::T2
233 * \~chinese 系统级别为 T2 的字体大小, 默认是30 px
234 * \~chinese \var DFontSizeManager:SizeType DFontSizeManager::T3
235 * \~chinese 系统级别为 T3 的字体大小, 默认是24 px
236 * \~chinese \var DFontSizeManager:SizeType DFontSizeManager::T4
237 * \~chinese 系统级别为 T4 的字体大小, 默认是20 px
238 * \~chinese \var DFontSizeManager:SizeType DFontSizeManager::T5
239 * \~chinese 系统级别为 T5 的字体大小, 默认是17 px
240 * \~chinese \var DFontSizeManager:SizeType DFontSizeManager::T6
241 * \~chinese 系统级别为 T6 的字体大小, 默认是14 px
242 * \~chinese \var DFontSizeManager:SizeType DFontSizeManager::T7
243 * \~chinese 系统级别为 T7 的字体大小, 默认是13 px
244 * \~chinese \var DFontSizeManager:SizeType DFontSizeManager::T8
245 * \~chinese 系统级别为 T8 的字体大小, 默认是12 px
246 * \~chinese \var DFontSizeManager:SizeType DFontSizeManager::T9
247 * \~chinese 系统级别为 T9 的字体大小, 默认是11 px
248 * \~chinese \var DFontSizeManager:SizeType DFontSizeManager::T10
249 * \~chinese 系统级别为 T10 的字体大小, 默认是10 px
250 */
251
252 /*!
253 * \~chinese \brief 将字体的大小枚举 SizeType 和控件 widget 进行绑定, 其控件的字体大小(随绑定的枚举的)对应值的改变而改变;
254 * \~chinese 系统自定义的绑定枚举值 T6, 若 T6 = 14px, 则其他枚举 T1 - T10 的数值,依次为:40, 30, 24, 20, 17, 14(T6), 13, 12, 11, 10;
255 * \~chinese 系统自定义的绑定枚举值 T6 改为 T6 = 20px, 则其他枚举 T1 - T10 的数值,依次为:46, 36, 30, 26, 23, 20(T6), 19, 18, 17, 16;
256 * \~chinese 即: 其对应的无论 T6 为何值, 其两个相邻的 T 值的差是定值: T(n) - T(n-1) == 定值
257 * \~chinese 而系统是只设置 T6 这以枚举, 作为基准
258 * \~chinese \param[in] widget 将要绑定字体大小枚举数值的控件
259 * \~chinese \param[int] type 字体的枚举类型, 每一个枚举数值对应着一个字体像素大小
260 */
261 void DFontSizeManager::bind(QWidget *widget, DFontSizeManager::SizeType type, int weight)
262 {
288263 unbind(widget);
289264
290265 d->binderMap[type].append(widget);
291 widget->setFont(get(type, widget->font()));
266 widget->setFont(get(type, weight, widget->font()));
292267
293268 QObject::connect(widget, &QWidget::destroyed, [this, widget] {
294269 unbind(widget);
295270 });
296271 }
297272
273 /*!
274 * \~chinese \brief 将字体大小枚举值和 widget 的绑定解除, 不跟随 "枚举对应的像素值" 而改变本控件的字体大小
275 * \~chinese \param[in] widget 与 "字体枚举所对应的像素值" 的 (解除绑定的控件) 对象
276 */
298277 void DFontSizeManager::unbind(QWidget *widget)
299278 {
300279 for (int i = 0; i < NSizeTypes; ++i) {
302281 }
303282 }
304283
284 /*!
285 * \~chinese \brief 获取字体像素的大小
286 * \~chinese \param[in] type 字体枚举类型
287 * \~chinese \return 返回字体像素的大小
288 */
305289 quint16 DFontSizeManager::fontPixelSize(DFontSizeManager::SizeType type) const
306290 {
307291 if (type >= NSizeTypes) {
311295 return d->fontPixelSize[type] + d->fontPixelSizeDiff;
312296 }
313297
298 /*!
299 * \~chinese \brief 设置字体像素大小
300 * \~chinese \param[in] type 字体枚举类型
301 * \~chinese \param[in] size 字体大小
302 */
314303 void DFontSizeManager::setFontPixelSize(DFontSizeManager::SizeType type, quint16 size)
315304 {
316305 if (type >= NSizeTypes) {
325314 d->updateWidgetFont(this, type);
326315 }
327316
317 /*!
318 * \~chinese \brief 设置字体的通用像素大小
319 * \~chinese \param[in] size 预设计的字体像素的大小
320 */
328321 void DFontSizeManager::setFontGenericPixelSize(quint16 size)
329322 {
330323 qint16 diff = size - d->fontPixelSize[d->fontGenericSizeType];
341334
342335 const QFont DFontSizeManager::get(DFontSizeManager::SizeType type, const QFont &base) const
343336 {
337 return get(type, base.weight(), base);
338 }
339
340 /*!
341 * \~chinese \brief 获取字体
342 * \~chinese \param[in] type 字体的大小枚举
343 * \~chinese \param[in] base 将改变大小的字体
344 * \~chinese \return 返回设置字体大小后的字体
345 */
346 const QFont DFontSizeManager::get(DFontSizeManager::SizeType type, int weight, const QFont &base) const
347 {
344348 QFont font = base;
345349
346350 font.setPixelSize(fontPixelSize(type));
351 font.setWeight(weight);
347352
348353 return font;
349354 }
350355
356 int DFontSizeManager::fontPixelSize(const QFont &font)
357 {
358 int px = font.pixelSize();
359
360 if (px == -1) {
361 px = qRound(std::floor(((font.pointSizeF() * font.d->dpi) / 72) * 100 + 0.5) / 100);
362 }
363
364 return px;
365 }
366
367 /*!
368 * \~chinese \brief 构造函数
369 */
351370 DFontSizeManager::DFontSizeManager()
352371 : d(new DFontSizeManagerPrivate())
353372 {
2121 #define DSTYLEOPTION_H
2222
2323 #include <dtkwidget_global.h>
24 #include <DPalette>
2425
2526 #include <QStyleOption>
2627
2829 class QGuiApplication;
2930 QT_END_NAMESPACE
3031
32 DGUI_USE_NAMESPACE
33
34 DTK_BEGIN_NAMESPACE
35
36 enum ItemDataRole {
37 MarginsRole = Qt::UserRole + 1,
38 LeftActionListRole,
39 TopActionListRole,
40 RightActionListRole,
41 BottomActionListRole,
42 TextActionListRole,
43 ViewItemFontLevelRole,
44 ViewItemBackgroundRole,
45 ViewItemForegroundRole,
46 UserRole = Qt::UserRole << 2
47 };
48
49 DTK_END_NAMESPACE
50
3151 DWIDGET_BEGIN_NAMESPACE
3252
3353 class DStyleOption
3454 {
3555 public:
36 enum PrimitiveElement {
37 PE_BACKGROUND = QStyle::PE_CustomBase + 1,
56 enum OptionType {
57 SO_HighlightButton = QStyleOption::SO_CustomBase + 1,
58 SO_CustomBase = QStyleOption::SO_CustomBase << 2
3859 };
3960
4061 virtual void init(QWidget *widget);
41 };
42
43 class DStyleOptionSuggestButton : public QStyleOptionButton, public DStyleOption
62 virtual void init(const QWidget *widget);
63
64 DPalette dpalette;
65 };
66
67 class DStyleOptionButton : public QStyleOptionButton, public DStyleOption
4468 {
4569 public:
4670 enum ButtonFeature {
47 SuggestButton = (CommandLinkButton << 1)
48 };
49
50 void init(QWidget *widget) override;
71 SuggestButton = (CommandLinkButton << 1),
72 WarningButton = (SuggestButton << 1),
73 FloatingButton = (WarningButton << 1),
74 TitleBarButton = (FloatingButton << 1)
75 };
76
77 void init(const QWidget *widget) override;
78 };
79
80 class DStyleOptionButtonBoxButton : public DStyleOptionButton
81 {
82 public:
83 enum ButtonPosition {
84 Invalid,
85 Beginning,
86 Middle,
87 End,
88 OnlyOne
89 };
90
91 Qt::Orientation orientation;
92 ButtonPosition position;
5193 };
5294
5395 class DStyleOptionLineEdit : public DStyleOption
60102 };
61103 Q_DECLARE_FLAGS(LineEditFeatures, LineEditFeature)
62104
63 void init(QWidget *widget) override;
105 void init(const QWidget *widget) override;
64106
65107 LineEditFeatures features = None;
66108 QRect iconButtonRect;
69111 class DStyleOptionBackgroundGroup : public QStyleOption, public DStyleOption
70112 {
71113 public:
72 enum BackgroundDirection {
73 horizontal,
74 vertical,
75 };
76
77114 enum ItemBackgroundPosition {
78115 Invalid,
79116 Beginning,
84121
85122 using DStyleOption::DStyleOption;
86123 using QStyleOption::QStyleOption;
87 void init(QWidget *widget) override;
88
89 BackgroundDirection direction;
124 void init(const QWidget *widget) override;
125
126 Qt::Orientations directions;
90127 ItemBackgroundPosition position;
91 QRect backgroundRect;
92 };
93
94 class DPalettePrivate;
95 class DPalette : public QPalette
96 {
97 public:
98 enum ColorType {
99 ItemBackground,
100 TextTitle,
101 TextTips,
102 TextWarning,
103 TextLively,
104 NColorTypes
105 };
106
107 DPalette();
108 DPalette(const QPalette &palette);
109 ~DPalette();
110
111 static DPalette get(const QWidget *widget, const QPalette &base);
112 static inline DPalette get(const QWidget *widget)
113 { return get(widget, widget->palette()); }
114
115 static void set(QWidget *widget, const DPalette &pa);
116 static void setGeneric(const DPalette &pa);
117
118 inline const QColor &color(ColorGroup cg, ColorType ct) const
119 { return brush(cg, ct).color(); }
120 const QBrush &brush(ColorGroup cg, ColorType ct) const;
121 inline void setColor(ColorGroup cg, ColorType ct, const QColor &color)
122 { setBrush(cg, ct, color); }
123 inline void setColor(ColorType ct, const QColor &color)
124 { setColor(All, ct, color); }
125 inline void setBrush(ColorType ct, const QBrush &brush)
126 { setBrush(All, ct, brush); }
127 void setBrush(ColorGroup cg, ColorType ct, const QBrush &brush);
128
129 inline const QColor &color(ColorType ct) const { return color(Current, ct); }
130 inline const QBrush &brush(ColorType ct) const { return brush(Current, ct); }
131 inline const QBrush &itemBackground() const { return brush(ItemBackground); }
132 inline const QBrush &textTiele() const { return brush(TextTitle); }
133 inline const QBrush &textTips() const { return brush(TextTips); }
134 inline const QBrush &textWarning() const { return brush(TextWarning); }
135 inline const QBrush &textLively() const { return brush(TextLively); }
136
137 private:
138 QSharedPointer<DPalettePrivate> d;
128 };
129
130 class DStyleOptionIcon : public QStyleOption, public DStyleOption
131 {
132 public:
133 QIcon icon;
134 };
135
136 class DStyleOptionViewItem : public QStyleOptionViewItem, public DStyleOption
137 {
138 public:
139 enum ViewItemFeature {
140
141 };
142 };
143
144 class DStyleOptionFloatingWidget : public QStyleOption, public DStyleOption
145 {
146 public:
147 using DStyleOption::init;
148 bool noBackground;
149 int frameRadius = -1;
139150 };
140151
141152 class DFontSizeManagerPrivate;
158169
159170 static DFontSizeManager *instance();
160171 void bind(QWidget *widget, SizeType type);
172 void bind(QWidget *widget, SizeType type, int weight);
161173 void unbind(QWidget *widget);
162174
163175 quint16 fontPixelSize(SizeType type) const;
164176 void setFontPixelSize(SizeType type, quint16 size);
165177 void setFontGenericPixelSize(quint16 size);
166178 const QFont get(SizeType type, const QFont &base = QFont()) const;
179 const QFont get(SizeType type, int weight, const QFont &base = QFont()) const;
167180
168181 inline const QFont t1(const QFont &base = QFont()) const
169182 { return get(T1, base); }
186199 inline const QFont t10(const QFont &base = QFont()) const
187200 { return get(T10, base); }
188201
202 static int fontPixelSize(const QFont &font);
203
189204 private:
190205 DFontSizeManager();
191206
22
33 #include <QStylePainter>
44 #include <QStyleOptionButton>
5 #include <DGuiApplicationHelper>
56
67 DWIDGET_BEGIN_NAMESPACE
78
3637
3738 void DSuggestButton::paintEvent(QPaintEvent *event)
3839 {
40 Q_UNUSED(event)
3941 QStylePainter p(this);
40 DStyleOptionSuggestButton option;
42 DStyleOptionButton option;
4143 initStyleOption(&option);
4244 option.init(this);
45 option.features |= QStyleOptionButton::ButtonFeature(DStyleOptionButton::SuggestButton);
46
47 QColor startColor = palette().color(QPalette::Highlight);
48 QColor endColor = DGuiApplicationHelper::adjustColor(startColor, 0, 0, +10, 0, 0, 0, 0);
49
50 option.palette.setBrush(QPalette::Light, QBrush(endColor));
51 option.palette.setBrush(QPalette::Dark, QBrush(startColor));
52 option.palette.setBrush(QPalette::ButtonText, option.palette.highlightedText());
4353 p.drawControl(QStyle::CE_PushButton, option);
4454 }
4555
1515 */
1616
1717 #include "dswitchbutton.h"
18 #include <QPainter>
19 #include <QPainterPath>
20 #include <QMouseEvent>
21 #include <QDebug>
18 #include <DStyle>
19 #include <DStyleOptionButton>
20 #include <private/dswitchbutton_p.h>
21
2222 #include <QApplication>
23 #include <QIcon>
24 #include "dthememanager.h"
25 #include "private/dswitchbutton_p.h"
23
2624
2725 DWIDGET_BEGIN_NAMESPACE
2826
2927 /*!
30 * \~english \class DSwitchButton
31 * \~english \brief The DSwitchButton class provides switch like widget.
32 *
33 * User can put the switch on/off the turn some feature on/off.
34 *
35 * It's inspired by UISwitch of Apple,
36 * see https://developer.apple.com/documentation/uikit/uiswitch.
28 * \~chinese \brief DSwitchButton::DSwitchButton 实现一个开关按钮
29 * \~chinese \param parent
3730 */
38
39 /*!
40 * \~english \brief DSwitchButton::DSwitchButton constructs an instance of DSwitchButton.
41 * \~english \param parent is passed to QFrame constructor.
42 */
43
44 /*!
45 * \~chinese \class DSwitchButton
46 *
47 * \~chinese \brief DSwitchButton提供了切换样式的控件
48 * 用户可以打开和关闭一些功能
49 *
50 * 受到Apple的切换按钮的影响,查看https://developer.apple.com/documentation/uikit/uiswitch.
51 */
52
53 /*!
54 * \~chinese \brief DSwitchButton的构造函数
55 *
56 * @param parent
57 */
58 DSwitchButton::DSwitchButton(QWidget *parent) :
59 QFrame(parent),
60 DObject(*new DSwitchButtonPrivate(this))
31 DSwitchButton::DSwitchButton(QWidget *parent)
32 : QAbstractButton(parent)
33 , DObject(*new DSwitchButtonPrivate(this))
6134 {
62 setObjectName("DSwitchButton");
63
64 setMaximumSize(36, 20);
65 setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
66
67 DThemeManager::registerWidget(this);
68
6935 D_D(DSwitchButton);
7036
7137 d->init();
72
73 connect(d->animation, &QVariantAnimation::valueChanged, [&]() {
74 this->update();
75 });
76 }
77
78 /*!
79 * \~english \property DSwitchButton::checked
80 * \~english \brief This property holds whether the switch is on or off.
81 *
82 * True if the switch is on, otherwise false.
83 */
84
85 /*!
86 * \~chinese \property DSwitchButton::checked
87 * \~chinese \brief 这个属性保持开关是否打开或关闭
88 *
89 * True是开启,反之False
90 */
91 bool DSwitchButton::checked() const
92 {
93 D_DC(DSwitchButton);
94
95 return d->checked;
9638 }
9739
9840 QSize DSwitchButton::sizeHint() const
9941 {
100 return maximumSize();
101 }
42 QSize size(0, 0);
43 DStyleHelper dstyle(style());
44 size = dstyle.sizeFromContents(DStyle::CT_SwitchButton, nullptr, QSize(0, 0), this);
10245
103 /*!
104 * \~chinese \property DSwitchButton::disabledBackground
105 *
106 * \~chinese \brief 这个属性保持了禁用状态的背景色
107 */
108 QColor DSwitchButton::disabledBackground() const
109 {
110 D_DC(DSwitchButton);
111 return d->disabledBackground;
112 }
113
114 /*!
115 * \~chinese \property DSwitchButton::enabledBackground
116 * \~chinese \brief 这个属性保持启用状态的背景色
117 */
118 QColor DSwitchButton::enabledBackground() const
119 {
120 D_DC(DSwitchButton);
121 return d->enabledBackground;
122 }
123
124 /*!
125 * \~chinese \brief 设置开启状态
126 *
127 * @param arg
128 */
129 void DSwitchButton::setChecked(bool arg)
130 {
131 D_D(DSwitchButton);
132
133 if (d->checked != arg) {
134 d->checked = arg;
135
136 if (arg) {
137 d->animation->setStartValue(d->animationStartValue);
138 d->animation->setEndValue(d->animationEndValue);
139 } else {
140 d->animation->setStartValue(d->animationEndValue);
141 d->animation->setEndValue(d->animationStartValue);
142 }
143 d->animation->start();
144
145 Q_EMIT checkedChanged(arg);
146 }
147 }
148
149 /*!
150 * \~chinese \brief 设置启用状态的背景色
151 *
152 * @param enabledBackground
153 */
154 void DSwitchButton::setEnabledBackground(QColor enabledBackground)
155 {
156 D_D(DSwitchButton);
157 d->enabledBackground = enabledBackground;
158 }
159
160 /*!
161 * \~chinese \brief 设置禁用状态的背景色
162 *
163 * @param disabledBackground
164 */
165 void DSwitchButton::setDisabledBackground(QColor disabledBackground)
166 {
167 D_D(DSwitchButton);
168 d->disabledBackground = disabledBackground;
46 return size;
16947 }
17048
17149 void DSwitchButton::paintEvent(QPaintEvent *e)
17250 {
17351 Q_UNUSED(e);
17452
175 D_D(DSwitchButton);
53 DStylePainter painter(this);
54 DStyleOptionButton opt;
55 initStyleOption(&opt);
56 painter.drawControl(DStyle::CE_SwitchButton, opt);
57 }
17658
177 QColor frontground = Qt::white;
178 QColor background = d->enabledBackground;
59 void DSwitchButton::initStyleOption(DStyleOptionButton *option) const
60 {
61 if (!option)
62 return;
17963
180 if (d->checked) {
181 background = d->checkedBackground;
64 option->init(this);
65 option->initFrom(this);
66
67 if (isChecked()) {
68 option->state |= QStyle::State_On;
69 } else {
70 option->state |= QStyle::State_Off;
18271 }
18372
184 if (!isEnabled()) {
185 background.setAlpha(255 * 55 / 100);
186 frontground.setAlpha(255 * 55 / 100);
187 }
188
189 QPainter p(this);
190 p.setRenderHints(QPainter::Antialiasing);
191
192 QPainterPath path;
193 path.addRoundedRect(rect(), height() / 2.0, height() / 2.0);
194 path.closeSubpath();
195
196 p.setClipPath(path);
197
198 double indicatorX = 0;
199
200 if (d->animation->state() == QVariantAnimation::Stopped) {
201 if (!d->checked) {
202 indicatorX = d->animationStartValue;
203 } else {
204 indicatorX = d->animationEndValue;
205 }
206 } else {
207 indicatorX = d->animation->currentValue().toDouble();
208 }
209
210 int moveWidth = width() - height();
211 int border = 1 * 1;
212 int btSize = height() - border * 2;
213 QRectF btRect(moveWidth * indicatorX + border, border, btSize, btSize);
214 QPainterPath btPath;
215 btPath.addRoundedRect(btRect, btSize / 2.0, btSize / 2.0);
216 btPath.closeSubpath();
217
218 p.fillPath(path, background);
219 p.fillPath(btPath, frontground);
220 }
221
222 // for ABI compatibilities' sake.
223 void DSwitchButton::mousePressEvent(QMouseEvent *event)
224 {
225 QFrame::mousePressEvent(event);
226 }
227
228 void DSwitchButton::mouseReleaseEvent(QMouseEvent *e)
229 {
230 D_D(DSwitchButton);
231
232 if (e->button() == Qt::LeftButton) {
233 setChecked(!d->checked);
234 e->accept();
235 }
73 // 针对switch button禁用hover状态
74 option->state &= ~QStyle::State_MouseOver;
23675 }
23776
23877 DSwitchButtonPrivate::DSwitchButtonPrivate(DSwitchButton *qq)
23978 : DObjectPrivate(qq)
24079 {
241 init();
80
24281 }
24382
24483 DSwitchButtonPrivate::~DSwitchButtonPrivate()
24584 {
246 animation->deleteLater();
85
24786 }
24887
24988 void DSwitchButtonPrivate::init()
25089 {
25190 checked = false;
252 animation = new QVariantAnimation;
25391 animationStartValue = 0;
25492 animationEndValue = 1;
93
94 D_Q(DSwitchButton);
95
96 q->setObjectName("DSwitchButton");
97 q->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
98 q->setCheckable(true);
99 q->connect(q, &DSwitchButton::toggled, q, &DSwitchButton::checkedChanged);
255100 }
256101
257102 DWIDGET_END_NAMESPACE
1717 #ifndef DSWITCHBUTTON_H
1818 #define DSWITCHBUTTON_H
1919
20 #include <QFrame>
21 #include <QPixmap>
2220 #include <QVariantAnimation>
23 #include <QUrl>
21 #include <QAbstractButton>
2422
25 #include "dtkwidget_global.h"
26 #include "dobject.h"
23 #include <dtkwidget_global.h>
24 #include <DObject>
2725
2826 DWIDGET_BEGIN_NAMESPACE
2927
3028 class DSwitchButtonPrivate;
31 class LIBDTKWIDGETSHARED_EXPORT DSwitchButton : public QFrame, public DTK_CORE_NAMESPACE::DObject
29 class DStyleOptionButton;
30 class LIBDTKWIDGETSHARED_EXPORT DSwitchButton : public QAbstractButton, public DTK_CORE_NAMESPACE::DObject
3231 {
3332 Q_OBJECT
34
35 Q_PROPERTY(bool checked READ checked WRITE setChecked NOTIFY checkedChanged)
36 Q_PROPERTY(QColor enabledBackground READ enabledBackground WRITE setEnabledBackground)
37 Q_PROPERTY(QColor disabledBackground READ disabledBackground WRITE setDisabledBackground)
3833
3934 public:
4035 explicit DSwitchButton(QWidget *parent = Q_NULLPTR);
4136
42 bool checked() const;
43 QColor enabledBackground() const;
44 QColor disabledBackground() const;
45
4637 QSize sizeHint() const Q_DECL_OVERRIDE;
47
48 public Q_SLOTS:
49 void setChecked(bool arg);
50 void setEnabledBackground(QColor enabledBackground);
51 void setDisabledBackground(QColor disabledBackground);
5238
5339 Q_SIGNALS:
5440 void checkedChanged(bool arg);
5541
5642 protected:
5743 void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;
58 void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;
59 void mouseReleaseEvent(QMouseEvent *) Q_DECL_OVERRIDE;
44 void initStyleOption(DStyleOptionButton *option) const;
6045
6146 private:
6247 D_DECLARE_PRIVATE(DSwitchButton)
5656
5757 void DSwitchHeaderLine::mousePressEvent(QMouseEvent *)
5858 {
59 m_switchButton->setChecked(!m_switchButton->checked());
59 m_switchButton->setChecked(!m_switchButton->isChecked());
6060 // Q_EMIT mousePress();
6161 }
6262
1919 */
2020 #include "dtabbar.h"
2121 #include "dobject_p.h"
22 #include "dimagebutton.h"
23 #include "dthememanager.h"
2422
2523 #include <QPainter>
2624 #include <QMouseEvent>
3129 #include <QMimeData>
3230 #include <QDragMoveEvent>
3331 #include <QTimer>
34 #include <QDebug>
3532
3633 #include <private/qtabbar_p.h>
3734 #define private public
4340 #undef protected
4441
4542 #include "dapplication.h"
43 #include "diconbutton.h"
4644
4745 DWIDGET_BEGIN_NAMESPACE
4846
8684 QPainter pa(this);
8785
8886 pa.drawPixmap(0, 0, m_pixmap);
89 }
90
91 class DTabBarAddButton : public QToolButton
92 {
93 public:
94 explicit DTabBarAddButton(QWidget *parent)
95 : QToolButton(parent) {}
96
97 private:
98 void paintEvent(QPaintEvent *event) override;
99 };
100
101 void DTabBarAddButton::paintEvent(QPaintEvent *event)
102 {
103 Q_UNUSED(event)
104
105 QStylePainter p(this);
106 QStyleOptionToolButton opt;
107 initStyleOption(&opt);
108 p.drawControl(static_cast<QStyle::ControlElement>(QStyle::CE_CustomBase + 1), opt);
10987 }
11088
11189 class DTabBarPrivate : public QTabBar, public DObjectPrivate
12098 startDragDistance = qApp->startDragDistance();
12199 maskColor = flashColor = QColor(0, 0, 255, 125);
122100
123 addButton = new DTabBarAddButton(qq);
101 addButton = new DIconButton(DStyle::SP_IncreaseElement, qq);
124102 addButton->setObjectName("AddButton");
125 addButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
126 addButton->setFixedWidth(48);
127
128 connect(addButton, &DTabBarAddButton::clicked,
103
104 connect(addButton, &DIconButton::clicked,
129105 qq, &DTabBar::tabAddRequested);
130106 connect(this, &QTabBar::tabMoved, this, [this] (int from, int to) {
131107 tabMinimumSize.move(from, to);
140116 });
141117
142118 setAcceptDrops(true);
143 setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Expanding);
119 setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Fixed);
120 setDrawBase(false);
144121
145122 QTabBarPrivate *d = reinterpret_cast<QTabBarPrivate *>(qGetPtrHelper(d_ptr));
146123
147 leftScrollButton = new QToolButton(qq);
148 rightScrollButton = new QToolButton(qq);
124 leftScrollButton = new DIconButton(DStyle::SP_ArrowLeft, qq);
125 rightScrollButton = new DIconButton(DStyle::SP_ArrowRight, qq);
126 rightScrollButton->setObjectName("rightButton");
149127
150128 leftScrollButton->setVisible(d->leftB->isVisible());
151129 leftScrollButton->setAutoRepeat(true);
152 leftScrollButton->setArrowType(Qt::LeftArrow);
153 leftScrollButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
154130 rightScrollButton->setVisible(d->rightB->isVisible());
155131 rightScrollButton->setAutoRepeat(true);
156 rightScrollButton->setArrowType(Qt::RightArrow);
157 rightScrollButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
158132
159133 d->leftB->setFixedSize(0, 0);
160134 d->leftB->installEventFilter(this);
161135 d->rightB->setFixedSize(0, 0);
162136 d->rightB->installEventFilter(this);
163137
164 connect(leftScrollButton, &QToolButton::clicked, d->leftB, &QToolButton::click);
165 connect(rightScrollButton, &QToolButton::clicked, d->rightB, &QToolButton::click);
166
167 QHBoxLayout *layout = new QHBoxLayout(qq);
168
138 connect(leftScrollButton, &DIconButton::clicked, d->leftB, &QToolButton::click);
139 connect(rightScrollButton, &DIconButton::clicked, d->rightB, &QToolButton::click);
140
141 layout = new QHBoxLayout(qq);
142 stretch = new QSpacerItem(1, 0, QSizePolicy::Expanding, QSizePolicy::Minimum);
169143 layout->setContentsMargins(0, 0, 0, 0);
170144 layout->setSpacing(0);
171145 layout->addWidget(leftScrollButton);
146 layout->addWidget(this);
172147 layout->addWidget(rightScrollButton);
173 layout->addWidget(this);
148 layout->addSpacing(DStyle::pixelMetric(style(), DStyle::PM_ContentsSpacing));
174149 layout->addWidget(addButton);
175 layout->addStretch();
150 layout->addSpacerItem(stretch);
151 d->expanding = false;
176152
177153 qq->setFocusProxy(this);
178154
179 connect(this, &DTabBarPrivate::currentChanged, qq, &DTabBar::currentChanged);
155 connect(this, &DTabBarPrivate::currentChanged, this, &DTabBarPrivate::onCurrentChanged);
180156 connect(this, &DTabBarPrivate::tabCloseRequested, qq, &DTabBar::tabCloseRequested);
181157 connect(this, &DTabBarPrivate::tabMoved, qq, &DTabBar::tabMoved);
182158 connect(this, &DTabBarPrivate::tabBarClicked, qq, &DTabBar::tabBarClicked);
264240 void startMove(int index);
265241 void stopMove();
266242
243 void onCurrentChanged(int current);
244 void updateCloseButtonVisible();
245
267246 QList<QSize> tabMinimumSize;
268247 QList<QSize> tabMaximumSize;
269248 bool visibleAddButton = true;
270 DTabBarAddButton *addButton;
249 DIconButton *addButton;
271250 QPointer<QDrag> drag;
272251 bool dragable = false;
273252 int startDragDistance;
284263 qreal opacityOnFlash = 1;
285264 int flashTabIndex = -1;
286265
287 QToolButton *leftScrollButton;
288 QToolButton *rightScrollButton;
266 DIconButton *leftScrollButton;
267 DIconButton *rightScrollButton;
268 QHBoxLayout *layout;
269 QSpacerItem *stretch;
289270
290271 class FullWidget : public QWidget {
291272 public:
866847 setMovable(movable);
867848 }
868849
850 void DTabBarPrivate::onCurrentChanged(int current)
851 {
852 updateCloseButtonVisible();
853 D_Q(DTabBar);
854 Q_EMIT q->currentChanged(current);
855 }
856
857 // 只允许当前标签页显示关闭按钮
858 void DTabBarPrivate::updateCloseButtonVisible()
859 {
860 if (!tabsClosable())
861 return;
862
863 int current = currentIndex();
864
865 for (int i = 0; i < this->count(); ++i) {
866 QWidget *close_button = tabButton(i, QTabBar::RightSide);
867
868 if (!close_button || close_button->metaObject()->className() != QByteArrayLiteral("CloseButton")) {
869 close_button = tabButton(i, QTabBar::LeftSide);
870 }
871
872 if (!close_button || close_button->metaObject()->className() != QByteArrayLiteral("CloseButton"))
873 continue;
874
875 close_button->setVisible(i == current);
876 }
877 }
878
879 static QIcon getArrowIcon(const QStyle *style, Qt::ArrowType type)
880 {
881 switch (type) {
882 case Qt::UpArrow:
883 return style->standardIcon(QStyle::SP_ArrowUp);
884 case Qt::DownArrow:
885 return style->standardIcon(QStyle::SP_ArrowDown);
886 case Qt::LeftArrow:
887 return style->standardIcon(QStyle::SP_ArrowLeft);
888 case Qt::RightArrow:
889 return style->standardIcon(QStyle::SP_ArrowRight);
890 default:
891 break;
892 }
893
894 return QIcon();
895 }
896
869897 bool DTabBarPrivate::eventFilter(QObject *watched, QEvent *event)
870898 {
871899 QTabBarPrivate *d = reinterpret_cast<QTabBarPrivate *>(qGetPtrHelper(d_ptr));
882910 leftScrollButton->setEnabled(d->leftB->isEnabled());
883911 break;
884912 case QEvent::UpdateRequest:
885 leftScrollButton->setArrowType(d->leftB->arrowType());
913 leftScrollButton->setIcon(getArrowIcon(style(), d->leftB->arrowType()));
886914 break;
887915 default:
888916 break;
891919 switch (event->type()) {
892920 case QEvent::Show:
893921 rightScrollButton->show();
922 rightScrollButton->updateGeometry();
894923 // ###(zccrs): 当主窗口从最大化还原后,此button的大小会被布局改为 0x40 (原因不明)
895924 QTimer::singleShot(100, rightScrollButton, [this] {
896925 rightScrollButton->resize(rightScrollButton->sizeHint().width(), rightScrollButton->height());
903932 rightScrollButton->setEnabled(d->rightB->isEnabled());
904933 break;
905934 case QEvent::UpdateRequest:
906 rightScrollButton->setArrowType(d->rightB->arrowType());
935 rightScrollButton->setIcon(getArrowIcon(style(), d->rightB->arrowType()));
907936 break;
908937 default:
909938 break;
10701099 }
10711100
10721101 if (event->buttons() == Qt::LeftButton
1073 // 此条件会导致横向拖动时卡顿
1074 // && offset_x > startDragDistance
1102 && d->dragInProgress // update tab position only in dragging..
10751103 && valid_pressed_index) {
10761104
10771105 updateMoveingTabPosition(event->pos());
11821210 {
11831211 D_QC(DTabBar);
11841212
1185 if (qApp->buildDtkVersion() > DTK_VERSION_CHECK(2, 0, 8, 1))
1186 return q->tabSizeHint(index);
1187
1188 return q->DTabBar::tabSizeHint(index);
1213 return q->tabSizeHint(index);
11891214 }
11901215
11911216 QSize DTabBarPrivate::minimumTabSizeHint(int index) const
11921217 {
11931218 D_QC(DTabBar);
11941219
1195 const QSize &min = qApp->buildDtkVersion() > DTK_VERSION_CHECK(2, 0, 8, 1) ? q->minimumTabSizeHint(index) : q->DTabBar::minimumTabSizeHint(index);
1220 const QSize &min = q->minimumTabSizeHint(index);
11961221
11971222 if (min.isValid())
11981223 return min;
11991224
12001225 QSize size = QTabBar::tabSizeHint(index);
1201 const QSize &max = qApp->buildDtkVersion() > DTK_VERSION_CHECK(2, 0, 8, 1) ? q->maximumTabSizeHint(index) : q->DTabBar::maximumTabSizeHint(index);
1202
1203 if (max.isValid()) {
1226 const QSize &max = q->maximumTabSizeHint(index);
1227
1228 if (max.width() > 0) {
12041229 size.setWidth(qMin(size.width(), max.width()));
1230 }
1231
1232 if (max.height() > 0) {
12051233 size.setHeight(qMin(size.height(), max.height()));
12061234 }
12071235
12121240 {
12131241 D_Q(DTabBar);
12141242
1215 if (qApp->buildDtkVersion() > DTK_VERSION_CHECK(2, 0, 8, 1))
1216 q->tabInserted(index);
1217 else
1218 q->DTabBar::tabInserted(index);
1243 q->tabInserted(index);
12191244 }
12201245
12211246 void DTabBarPrivate::tabRemoved(int index)
12221247 {
12231248 D_Q(DTabBar);
12241249
1225 if (qApp->buildDtkVersion() > DTK_VERSION_CHECK(2, 0, 8, 1))
1226 q->tabRemoved(index);
1227 else
1228 q->DTabBar::tabRemoved(index);
1250 q->tabRemoved(index);
12291251 }
12301252
12311253 void DTabBarPrivate::tabLayoutChange()
12321254 {
12331255 D_Q(DTabBar);
12341256
1235 if (qApp->buildDtkVersion() > DTK_VERSION_CHECK(2, 0, 8, 1))
1236 q->tabLayoutChange();
1237 else
1238 q->DTabBar::tabLayoutChange();
1257 q->tabLayoutChange();
1258 // 更新关闭按钮的显示
1259 updateCloseButtonVisible();
12391260 }
12401261
12411262 void DTabBarPrivate::initStyleOption(QStyleOptionTab *option, int tabIndex) const
13641385 }
13651386
13661387 if (new_vertical) {
1367 d->leftScrollButton->setArrowType(Qt::UpArrow);
1368 d->rightScrollButton->setArrowType(Qt::DownArrow);
1388 d->leftScrollButton->setIcon(getArrowIcon(style(), Qt::UpArrow));
1389 d->rightScrollButton->setIcon(getArrowIcon(style(), Qt::DownArrow));
13691390 d->leftScrollButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
13701391 d->rightScrollButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
13711392 d->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
13741395 d->addButton->setMinimumWidth(0);
13751396 d->addButton->setMaximumWidth(9999);
13761397 } else {
1377 d->leftScrollButton->setArrowType(Qt::LeftArrow);
1378 d->rightScrollButton->setArrowType(Qt::RightArrow);
1398 d->leftScrollButton->setIcon(getArrowIcon(style(), Qt::LeftArrow));
1399 d->rightScrollButton->setIcon(getArrowIcon(style(), Qt::RightArrow));
13791400 d->leftScrollButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
13801401 d->rightScrollButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
13811402 d->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Expanding);
16561677
16571678 bool DTabBar::expanding() const
16581679 {
1659 return d_func()->expanding();
1680 QTabBarPrivate *dd = reinterpret_cast<QTabBarPrivate *>(qGetPtrHelper(d_func()->d_ptr));
1681 return dd->expanding;
16601682 }
16611683
16621684 void DTabBar::setExpanding(bool enabled)
16631685 {
1664 d_func()->setExpanding(enabled);
1686 D_D(DTabBar);
1687
1688 if (enabled == expanding())
1689 return;
1690 QTabBarPrivate *dd = reinterpret_cast<QTabBarPrivate *>(qGetPtrHelper(d->d_ptr));
1691 dd->expanding = enabled;
1692 QHBoxLayout *auto_layout = d->layout;
1693
1694 if (enabled) {
1695 auto_layout->removeItem(d->stretch);
1696 d->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
1697 } else {
1698 auto_layout->addSpacerItem(d->stretch);
1699 d->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Fixed);
1700 }
16651701 }
16661702
16671703 bool DTabBar::isMovable() const
17371773 }
17381774
17391775 return nullptr;
1776 }
1777
1778 /*!
1779 * \~chinese \brief DTabBar::setEnabledEmbedStyle 启用直角样式的Tabbar
1780 * \~chinese \row 此风格适用于切换窗口的操作,多用于支持多开的应用
1781 * \param replace true 启用,false 恢复
1782 */
1783 void DTabBar::setEnabledEmbedStyle(bool enable)
1784 {
1785 setProperty("_d_dtk_tabbartab_type", enable);
17401786 }
17411787
17421788 /*!
20342080 size.setHeight(qMax(size.height(), d->height()));
20352081 }
20362082
2037 const QSize &min = qApp->buildDtkVersion() > DTK_VERSION_CHECK(2, 0, 8, 1) ? minimumTabSizeHint(index) : DTabBar::minimumTabSizeHint(index);
2038 const QSize &max = qApp->buildDtkVersion() > DTK_VERSION_CHECK(2, 0, 8, 1) ? maximumTabSizeHint(index) : DTabBar::maximumTabSizeHint(index);
2083 const QSize &min = minimumTabSizeHint(index);
2084 const QSize &max = maximumTabSizeHint(index);
20392085
20402086 size.setWidth(qMax(size.width(), min.width()));
20412087 size.setHeight(qMax(size.height(), min.height()));
20422088
2043 if (max.isValid()) {
2089 if (max.width() > 0)
20442090 size.setWidth(qMin(size.width(), max.width()));
2091
2092 if (max.height() > 0)
20452093 size.setHeight(qMin(size.height(), max.height()));
2046 }
20472094
20482095 return size;
20492096 }
153153
154154 QWindow *dragIconWindow() const;
155155
156 void setEnabledEmbedStyle(bool enable);
157
156158 Q_SIGNALS:
157159 void currentChanged(int index);
158160 void tabCloseRequested(int index);
+0
-46
src/widgets/dtextbutton.cpp less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #include "dtextbutton.h"
18 #include "dthememanager.h"
19
20 /**
21 * \~chinese \class DTextButton
22 * \~chinese \brief 一个 DDE 风格按钮控件。
23 *
24 * \~chinese 继承自 QPushButton 并修改了样式使其更符合 DDE 风格, 其他功能与 QPushButton 一致, 可将其直接作为 QPushButton 使用
25 */
26
27 DWIDGET_BEGIN_NAMESPACE
28
29 /*!
30 * \brief 构造一个 DTextButton 实例。
31 * \param text 按钮需要显示的文字
32 * \param parent 用于作为按钮的父控件
33 */
34 DTextButton::DTextButton(const QString & text, QWidget * parent) :
35 QPushButton(text, parent)
36 {
37 DThemeManager::registerWidget(this);
38 }
39
40 DTextButton::~DTextButton()
41 {
42
43 }
44
45 DWIDGET_END_NAMESPACE
+0
-38
src/widgets/dtextbutton.h less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #ifndef DTEXTBUTTON_H
18 #define DTEXTBUTTON_H
19
20 #include <QPushButton>
21 #include <QPainter>
22
23 #include "dtkwidget_global.h"
24
25 DWIDGET_BEGIN_NAMESPACE
26
27 class LIBDTKWIDGETSHARED_EXPORT DTextButton : public QPushButton
28 {
29 Q_OBJECT
30 public:
31 DTextButton(const QString & text, QWidget * parent = 0);
32 ~DTextButton();
33 };
34
35 DWIDGET_END_NAMESPACE
36
37 #endif // DTEXTBUTTON_H
0 /*
1 * Copyright (C) 2017 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
0 #include "dtextedit.h"
1
2 #include <QPainter>
3 #include <QEvent>
4 #include <QContextMenuEvent>
5 #include <QMenu>
6 #include <QDBusInterface>
7 #include <QDBusReply>
8 #include <QDebug>
9 #include <QCoreApplication>
10 #include <QTimer>
11
12 #include <DStyle>
13 #include <DObjectPrivate>
14
15 DWIDGET_BEGIN_NAMESPACE
16
17 class DTextEditPrivate : public DTK_CORE_NAMESPACE::DObjectPrivate
18 {
19 public:
20 DTextEditPrivate(DTextEdit* qq);
21 ~DTextEditPrivate();
22
23 public:
24 QWidget* widgetTop;
25 QWidget* widgetButtom;
26 QWidget* widgetLeft;
27 QWidget* widgetRight;
28
29 public:
30 D_DECLARE_PUBLIC(DTextEdit)
31 };
32
33 /*!
34 * \~chinese \brief DTextEdit::DTextEdit 实现一个用于编辑和显示纯文本和富文本的控件
35 * \~chinese \param parent
1536 */
16
17 #include "dtextedit.h"
18 #include "dthememanager.h"
19 #include "private/dtextedit_p.h"
20 #include "dscrollbar.h"
21
22 #include <QResizeEvent>
23
24 DWIDGET_BEGIN_NAMESPACE
25
26 DTextEditPrivate::DTextEditPrivate(DTextEdit *qq) :
27 DObjectPrivate(qq)
28 {
29
30 }
31
32 void DTextEditPrivate::init()
33 {
34 D_Q(DTextEdit);
35
36 insideFrame = new QFrame(q);
37 insideFrame->setObjectName("TextEditInsideFrame");
38 insideFrame->setFocusProxy(q);
39 insideFrame->setAttribute(Qt::WA_TransparentForMouseEvents);
40
41 q->setContextMenuPolicy(Qt::NoContextMenu);
42 q->setVerticalScrollBar(new DScrollBar);
43 q->setHorizontalScrollBar(new DScrollBar);
44 }
45
46 /*!
47 * \~chinese \brief DTextEdit
48 * \~chinese DTextEdit 提供 deepin 风格的多行编辑控件,是 QTextEdit 的子类。
49 */
50
51 DTextEdit::DTextEdit(QWidget *parent) :
52 QTextEdit(parent),
53 DObject(*new DTextEditPrivate(this))
54 {
55 DThemeManager::registerWidget(this);
56
57 d_func()->init();
58 }
59
60 void DTextEdit::resizeEvent(QResizeEvent *event)
61 {
62 QTextEdit::resizeEvent(event);
63
64 D_D(DTextEdit);
65
66 const QSize &size = event->size();
67
68 d->insideFrame->setFixedHeight(size.height() - 1);
69 d->insideFrame->setFixedWidth(size.width());
37 DTextEdit::DTextEdit(QWidget *parent)
38 : QTextEdit(parent)
39 , DObject(*new DTextEditPrivate(this))
40 {
41 Q_D(DTextEdit);
42
43 viewport()->setAutoFillBackground(false);
44 setFrameShape(QFrame::NoFrame);
45
46 d->widgetTop->setFixedWidth(1);
47 d->widgetButtom->setFixedWidth(1);
48 d->widgetLeft->setFixedHeight(1);
49 d->widgetRight->setFixedHeight(1);
50
51 addScrollBarWidget(d->widgetTop, Qt::AlignTop);
52 addScrollBarWidget(d->widgetButtom, Qt::AlignBottom);
53 addScrollBarWidget(d->widgetLeft, Qt::AlignLeft);
54 addScrollBarWidget(d->widgetRight, Qt::AlignRight);
55 }
56
57 DTextEdit::DTextEdit(const QString &text, QWidget *parent)
58 : DTextEdit(parent)
59 {
60 setText(text);
61 }
62
63 bool DTextEdit::event(QEvent *e)
64 {
65 Q_D(DTextEdit);
66
67 if (e->type() == QEvent::Paint) {
68 QPainter p(this);
69 p.setRenderHints(QPainter::Antialiasing);
70
71 QStyleOptionFrame panel;
72 initStyleOption(&panel);
73 style()->drawPrimitive(QStyle::PE_PanelLineEdit, &panel, &p, this);
74
75 return true;
76 } else if (e->type() == QEvent::Polish) {
77 DStyleHelper dstyle(style());
78 int frame_radius = dstyle.pixelMetric(DStyle::PM_FrameRadius, nullptr, this);
79 setViewportMargins(frame_radius, 0, frame_radius, 0);
80
81 d->widgetTop->setFixedHeight(frame_radius);
82 d->widgetButtom->setFixedHeight(frame_radius);
83 d->widgetLeft->setFixedWidth(frame_radius);
84 d->widgetRight->setFixedWidth(frame_radius);
85 }
86
87 return QTextEdit::event(e);
88 }
89
90 void DTextEdit::contextMenuEvent(QContextMenuEvent *e)
91 {
92 QDBusInterface testSpeech("com.iflytek.aiassistant",
93 "/aiassistant/tts",
94 "com.iflytek.aiassistant.tts",
95 QDBusConnection::sessionBus());
96 //测试朗读接口是否开启
97 QDBusReply<bool> speechReply = testSpeech.call(QDBus::AutoDetect, "getTTSEnable");
98
99 QDBusInterface testReading("com.iflytek.aiassistant",
100 "/aiassistant/tts",
101 "com.iflytek.aiassistant.tts",
102 QDBusConnection::sessionBus());
103 //测试朗读是否在进行
104 QDBusReply<bool> readingReply = testReading.call(QDBus::AutoDetect, "isTTSInWorking");
105
106 QDBusInterface testTranslate("com.iflytek.aiassistant",
107 "/aiassistant/trans",
108 "com.iflytek.aiassistant.trans",
109 QDBusConnection::sessionBus());
110 //测试翻译接口是否开启
111 QDBusReply<bool> translateReply = testTranslate.call(QDBus::AutoDetect, "getTransEnable");
112
113 QDBusInterface testSpeechToText("com.iflytek.aiassistant",
114 "/aiassistant/iat",
115 "com.iflytek.aiassistant.iat",
116 QDBusConnection::sessionBus());
117 //测试听写接口是否开启
118 QDBusReply<bool> speechToTextReply = testSpeechToText.call(QDBus::AutoDetect, "getIatEnable");
119
120 //测试服务是否存在
121 if (!speechReply.value() && !translateReply.value() && !speechToTextReply.value()) {
122 QTextEdit::contextMenuEvent(e);
123 return;
124 }
125
126 QMenu *menu = createStandardContextMenu();
127 menu->addSeparator();
128
129 if (speechReply.value()) {
130 QAction *pAction = nullptr;
131 if (readingReply.value()) {
132 pAction = menu->addAction(QCoreApplication::translate("DTextEdit", "Stop reading"));
133 } else {
134 pAction = menu->addAction(QCoreApplication::translate("DTextEdit", "Text to Speech"));
135 }
136
137 //没有选中文本,则菜单置灰色
138 if (textCursor().selectedText().isEmpty()) {
139 pAction->setEnabled(false);
140 }
141
142 connect(pAction, &QAction::triggered, this, [] {
143 QDBusInterface speechInterface("com.iflytek.aiassistant",
144 "/aiassistant/deepinmain",
145 "com.iflytek.aiassistant.mainWindow",
146 QDBusConnection::sessionBus());
147
148 if (speechInterface.isValid()) {
149 speechInterface.call(QDBus::BlockWithGui, "TextToSpeech");//此函在第一次调用时朗读,在朗读状态下再次调用为停止朗读
150 } else {
151 qWarning() << "[DTextEdit] TextToSpeech ERROR";
152 }
153 });
154 }
155
156 if (translateReply.value()) {
157 QAction *pAction_2 = menu->addAction(QCoreApplication::translate("DTextEdit", "Translate"));
158
159 //没有选中文本,则菜单置灰色
160 if (textCursor().selectedText().isEmpty()) {
161 pAction_2->setEnabled(false);
162 }
163
164 connect(pAction_2, &QAction::triggered, this, [] {
165 QDBusInterface translationInterface("com.iflytek.aiassistant",
166 "/aiassistant/deepinmain",
167 "com.iflytek.aiassistant.mainWindow",
168 QDBusConnection::sessionBus());
169
170 if (translationInterface.isValid()) {
171 translationInterface.call(QDBus::BlockWithGui, "TextToTranslate");//执行翻译
172 } else {
173 qWarning() << "[DTextEdit] Translation ERROR";
174 }
175 });
176 }
177
178 if (speechToTextReply.value()) {
179 QAction *pAction_3 = menu->addAction(QCoreApplication::translate("DTextEdit", "Speech To Text"));
180 connect(pAction_3, &QAction::triggered, this, [] {
181 QDBusInterface speechToTextInterface("com.iflytek.aiassistant",
182 "/aiassistant/deepinmain",
183 "com.iflytek.aiassistant.mainWindow",
184 QDBusConnection::sessionBus());
185
186 if (speechToTextInterface.isValid()) {
187 speechToTextInterface.call(QDBus::BlockWithGui, "SpeechToText");//执行听写
188 } else {
189 qWarning() << "[DTextEdit] SpeechToText ERROR";
190 }
191 });
192 }
193
194 //FIXME: 由于Qt在UOS系统环境下不明原因的bug,使用menu->setAttribute(Qt::WA_DeleteOnClose) 销毁menu会在特定情况下出现崩溃的问题,这里采用一种变通的做法
195 connect(menu, &QMenu::aboutToHide, this, [=] {
196 if (menu->activeAction()) {
197 menu->deleteLater();
198 } else {
199 QTimer::singleShot(0, this, [=] {
200 menu->deleteLater();
201 });
202 }
203 });
204
205 menu->popup(e->globalPos());
206 }
207
208 DTextEditPrivate::DTextEditPrivate(DTextEdit *qq)
209 : DObjectPrivate(qq)
210 {
211 widgetTop = new QWidget(qq);
212 widgetButtom = new QWidget(qq);
213 widgetLeft = new QWidget(qq);
214 widgetRight = new QWidget(qq);
215 }
216
217 DTextEditPrivate::~DTextEditPrivate()
218 {
70219 }
71220
72221 DWIDGET_END_NAMESPACE
0 /*
1 * Copyright (C) 2017 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
170 #ifndef DTEXTEDIT_H
181 #define DTEXTEDIT_H
192
20 #include "dtkwidget_global.h"
21
22 #include <dobject.h>
23
243 #include <QTextEdit>
254
5 #include <dtkwidget_global.h>
6 #include <DObject>
7
8 QT_BEGIN_NAMESPACE
9 class QContextMenuEvent;
10 QT_END_NAMESPACE
11
2612 DWIDGET_BEGIN_NAMESPACE
27
2813 class DTextEditPrivate;
29 class DTextEdit : public QTextEdit, public DTK_CORE_NAMESPACE::DObject
14 class DTextEdit : public QTextEdit, public DCORE_NAMESPACE::DObject
3015 {
31 Q_OBJECT
32
3316 public:
34 explicit DTextEdit(QWidget *parent = 0);
17 explicit DTextEdit(QWidget *parent = nullptr);
18 explicit DTextEdit(const QString& text, QWidget* parent = nullptr);
3519
3620 protected:
37 void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
21 bool event(QEvent *e) override;
22 void contextMenuEvent(QContextMenuEvent *e) override;
3823
3924 private:
4025 D_DECLARE_PRIVATE(DTextEdit)
41 Q_DISABLE_COPY(DTextEdit)
4226 };
4327
4428 DWIDGET_END_NAMESPACE
224224
225225 QString themeName;
226226 QMap<QWidget *, QMap<QString, QString> > watchedDynamicPropertys;
227 DThemeManager::ThemeType themeType = DThemeManager::UnknownType;
228227
229228 public:
230229 DThemeManagerPrivate(DThemeManager *qq)
520519 }
521520
522521 /*!
523 * \~chinese \brief DThemeManager::themeType 返回应用程序的主题类型。DApplication 对象构造时会
524 * \~chinese 调用 setThemeType 初始化应用程序的主题类型,未初始化时返回 UnknownType。
525 * \~chinese \return 主题类型的枚举值
526 *
527 * \~chinese \sa \class DApplication
528 * \~chinese \sa DThemeManager::setThemeType
529 */
530 DThemeManager::ThemeType DThemeManager::themeType() const
531 {
532 D_DC(DThemeManager);
533
534 return d->themeType;
535 }
536
537 /*!
538 * \~chinese \brief DThemeManager::themeType 返回窗口的主题类型。当窗口未设置主题类型时,将返回
539 * \~chinese 应用程序的主题类型。
540 * \~chinese \param window 要获取主题类型的顶级窗口对象
541 * \~chinese \return 主题类型的枚举值
542 *
543 * \~chinese \sa DThemeManager::setThemeType
544 * \~chinese \sa DThemeManager::setThemeType(QWidget*, DThemeManager::ThemeType)
545 */
546 DThemeManager::ThemeType DThemeManager::themeType(const QWidget *window) const
547 {
548 ThemeType type = static_cast<ThemeType>(window->property("_d_dtk_theme_type").toInt());
549
550 if (type == UnknownType) {
551 type = themeType();
552 }
553
554 return type;
555 }
556
557 /*!
558 * \~chinese \brief DThemeManager::setThemeType 设置窗口的主题类型。
559 * \~chinese \param window 要设置主题类型的顶级窗口对象
560 * \~chinese \param 要设置的主题类型枚举值,值为 UnknownType 时将清空 window 对象的主题类型设置
561 *
562 * \~chinese \sa DThemeManager::setThemeType()
563 * \~chinese \note 针对窗口设置的主题类型将存储在窗口对象的 "_d_dtk_theme_type" 属性中
564 */
565 void DThemeManager::setThemeType(QWidget *window, DThemeManager::ThemeType type)
566 {
567 ThemeType old_type = themeType(window);
568
569 if (type == UnknownType) {
570 window->setProperty("_d_dtk_theme_type", QVariant());
571 type = themeType();
572 } else {
573 window->setProperty("_d_dtk_theme_type", type);
574 }
575
576 if (old_type != type) {
577 Q_EMIT windowThemeTypeChanged(window, type);
578 }
579 }
580
581 /*!
582522 * \~english \brief DThemeManager::getQssForWidget searches for the theme file of one class in a specific theme.
583523 * \~english \param className is the name of the class.
584524 * \~english \param theme is the name of the theme to be applied.
602542 return d->getQssContent(themeURL);
603543 }
604544
605 QString DThemeManager::getQssForWidget(const QString className, const QWidget *widget) const
606 {
607 Q_ASSERT(widget);
608
609 return getQssForWidget(className, theme(widget));
610 }
611
612545 /*!
613546 * \~english \brief DThemeManager::getQssForWidget This function is overloaded.
614547 * \~english \param widget is the target widget.
621554 */
622555 QString DThemeManager::getQssForWidget(const QWidget *widget) const
623556 {
624 return getQssForWidget(getObjectClassName(widget), widget);
557 return getQssForWidget(getObjectClassName(widget), theme(widget));
625558 }
626559
627560 /*!
655588 }
656589
657590 /*!
658 * \~chinese \brief DThemeManager::toThemeType 获取颜色的明亮度,将其转换为主题类型的枚举值。
659 * \~chinese 转换的策略为:先将颜色转换为rgb格式,再根据 Y = 0.299R + 0.587G + 0.114B 的公式
660 * \~chinese 计算出颜色的亮度,亮度大于 191 时认为其为浅色,否则认为其为深色。
661 * \~chinese \param color 需要转换为主题的类型的颜色
662 * \~chinese \return 主题类型的枚举值
663 */
664 DThemeManager::ThemeType DThemeManager::toThemeType(const QColor &color)
665 {
666 QColor rgb_color = color.toRgb();
667 // 获取rgb颜色的亮度
668 float luminance = 0.299 * rgb_color.redF() + 0.587 * rgb_color.greenF() + 0.114 * rgb_color.blueF();
669
670 if (qRound(luminance * 255) > 191) {
671 return LightType;
672 }
673
674 return DarkType;
675 }
676
677 /*!
678591 * \~english \brief DThemeManager::updateQss This slot repolishes the theme applied on
679592 * \~english the sender widget.
680593 *
697610 : QObject()
698611 , DObject(*new DThemeManagerPrivate(this))
699612 {
700 setTheme("light");
613 qApp->setStyle("chameleon");
701614 }
702615
703616 bool DThemeManager::eventFilter(QObject *watched, QEvent *event)
750663 updateWidgetTheme(this, widget, base_widget, theme);
751664 }
752665
753 /*!
754 * \~chinese \brief DThemeManager::setThemeType 设置应用程序的主题类型。
755 * \~chinese \param themeType 新的主题类型
756 */
757 void DThemeManager::setThemeType(DThemeManager::ThemeType themeType)
758 {
759 D_D(DThemeManager);
760
761 if (d->themeType == themeType)
762 return;
763
764 d->themeType = themeType;
765 Q_EMIT themeTypeChanged(themeType);
766
767 // 未自定义主题类型的窗口应该跟随应用程序的主题类型改变,此处需要为这些窗口发送通知
768 for (QWidget *window : qApp->topLevelWidgets()) {
769 if (!window->property("_d_dtk_theme_type").isValid()) {
770 Q_EMIT windowThemeTypeChanged(window, themeType);
771 }
772 }
773 }
774
775666 DWIDGET_END_NAMESPACE
2727 DWIDGET_BEGIN_NAMESPACE
2828
2929 class DThemeManagerPrivate;
30 class LIBDTKWIDGETSHARED_EXPORT DThemeManager : public QObject, public DTK_CORE_NAMESPACE::DObject
30 class LIBDTKWIDGETSHARED_EXPORT D_DECL_DEPRECATED DThemeManager : public QObject, public DTK_CORE_NAMESPACE::DObject
3131 {
3232 Q_OBJECT
3333
34 Q_PROPERTY(ThemeType themeType READ themeType WRITE setThemeType NOTIFY themeTypeChanged)
35
3634 public:
37 enum ThemeType {
38 UnknownType,
39 LightType,
40 DarkType
41 };
42 Q_ENUM(ThemeType)
43
4435 static DThemeManager *instance();
4536
4637 QString theme() const;
4839 void setTheme(const QString theme);
4940 void setTheme(QWidget *widget, const QString theme);
5041
51 ThemeType themeType() const;
52 ThemeType themeType(const QWidget *window) const;
53 void setThemeType(QWidget *window, ThemeType type);
54
5542 QString getQssForWidget(const QString className, const QString &theme = QString()) const;
56 Q_DECL_DEPRECATED QString getQssForWidget(const QString className, const QWidget *widget) const;
5743 QString getQssForWidget(const QWidget *widget) const;
5844
5945 static void registerWidget(QWidget *widget, QStringList propertys = QStringList());
6147 // static void registerWidget(QWidget *widget, const QStringList &propertys = QStringList());
6248 static void registerWidget(QWidget *widget, const QString &filename, const QStringList &propertys = QStringList());
6349
64 static ThemeType toThemeType(const QColor &color);
65
6650 public Q_SLOTS:
6751 void updateQss();
6852 void updateThemeOnParentChanged(QWidget *widget);
6953
70 void setThemeType(ThemeType themeType);
71
7254 Q_SIGNALS:
7355 void themeChanged(QString theme);
7456 void widgetThemeChanged(QWidget *widget, QString theme);
75
76 void themeTypeChanged(ThemeType themeType);
77 void windowThemeTypeChanged(QWidget *window, ThemeType type);
7857
7958 protected:
8059 DThemeManager();
189189 play();
190190 }
191191
192 /*!
193 * \~chinese \brief 设置滚动的时长
194 *
195 * @param duration
196 */
197 void DTickEffect::setDuration(const int duration)
198 {
199 Q_UNUSED(duration);
200 }
201
202192 void DTickEffect::setFixedPixelMove(const int pixel)
203193 {
204194 D_D(DTickEffect);
4444 void resume();
4545
4646 void setDirection(Direction direction);
47 D_DECL_DEPRECATED void setDuration(const int duration);
4847 void setFixedPixelMove(const int pixel);
4948
5049 Q_SIGNALS:
0 /*
1 * Copyright (C) 2011 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: wp <wangpeng_cm@deepin.com>
4 *
5 * Maintainer: wp <wangpeng_cm@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #include "dtiplabel.h"
22 #include "private/dtiplabel_p.h"
23
24 #include <DFontSizeManager>
25
26 DWIDGET_BEGIN_NAMESPACE
27
28
29 /*!
30 * \~chinese \class DTipLabel
31 * \~chinese \brief DTipLabel一个重新实现的 QLabel
32 * \~chinese \li DTipLabel提供了将 DTipLabel 显示在指定位置的函数
33 * \~chinese \li DTipLabel提供了改变字体颜色的函数
34 */
35
36 /*!
37 * \~chinese \brief DTipLabel的构造函数
38 * \~chinese \param text文本信息
39 * \~chinese \param parent参数被发送到 QLabel 构造函数。
40 */
41 DTipLabel::DTipLabel(const QString &text, QWidget *parent)
42 : DLabel(*new DTipLabelPrivate(this), parent)
43 {
44 setText(text);
45
46 D_D(DTipLabel);
47 d->init();
48 }
49
50 DTipLabel::~DTipLabel()
51 {
52
53 }
54
55 /*!
56 * \brief DTipLabel::show显示在指定的位置上
57 * \param pos 显示位置
58 */
59 void DTipLabel::show(const QPoint &pos)
60 {
61 if (isWindow()) {
62 setWindowFlag(Qt::ToolTip);
63 }
64
65 move(pos);
66
67 QLabel::show();
68 }
69
70 /*!
71 * \brief DTipLabel::setForegroundRole显示的字体颜色
72 * \param color字体颜色
73 */
74 void DTipLabel::setForegroundRole(DPalette::ColorType color)
75 {
76 DLabel::setForegroundRole(color);
77 }
78
79 void DTipLabel::initPainter(QPainter *painter) const
80 {
81 DLabel::initPainter(painter);
82 }
83
84 void DTipLabel::paintEvent(QPaintEvent *event)
85 {
86 DLabel::paintEvent(event);
87 }
88
89 DTipLabelPrivate::DTipLabelPrivate(DTipLabel *q)
90 : DLabelPrivate(q)
91 {
92 color = DPalette::TextTips;
93 }
94
95 void DTipLabelPrivate::init()
96 {
97 Q_Q(DTipLabel);
98 q->setAlignment(Qt::AlignCenter);
99
100 DFontSizeManager::instance()->bind(q, DFontSizeManager::T7);
101 }
102
103 DWIDGET_END_NAMESPACE
0 /*
1 * Copyright (C) 2011 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: wp <wangpeng_cm@deepin.com>
4 *
5 * Maintainer: wp <wangpeng_cm@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #ifndef DTIPLABEL_H
22 #define DTIPLABEL_H
23
24 #include <DLabel>
25
26 DWIDGET_BEGIN_NAMESPACE
27
28 class DTipLabelPrivate;
29 class LIBDTKWIDGETSHARED_EXPORT DTipLabel : public DLabel
30 {
31 Q_OBJECT
32 Q_DISABLE_COPY(DTipLabel)
33 D_DECLARE_PRIVATE(DTipLabel)
34 public:
35 DTipLabel(const QString &text = QString(), QWidget *parent = nullptr);
36 ~DTipLabel();
37
38 using QLabel::show;
39 void show(const QPoint &pos);
40 void setForegroundRole(DPalette::ColorType color);
41
42 protected:
43 void initPainter(QPainter *painter) const override;
44 void paintEvent(QPaintEvent *event) override;
45 };
46 DWIDGET_END_NAMESPACE
47
48 #endif // DTIPLABEL_H
2323 #include <QMouseEvent>
2424 #include <QProcess>
2525
26 #include <DWindowManagerHelper>
2627 #include <DObjectPrivate>
2728
2829 #include "dwindowclosebutton.h"
2930 #include "dwindowmaxbutton.h"
3031 #include "dwindowminbutton.h"
3132 #include "dwindowoptionbutton.h"
32 #include "dlabel.h"
3333 #include "dplatformwindowhandle.h"
34 #ifdef Q_OS_LINUX
35 #include "../platforms/x11/xutil.h"
36 #endif
3734 #include "daboutdialog.h"
3835 #include "dapplication.h"
3936 #include "private/dapplication_p.h"
40 #include "dthememanager.h"
41 #include "util/dwindowmanagerhelper.h"
4237 #include "dmainwindow.h"
38 #include "DHorizontalLine"
39 #include "dimagebutton.h"
40 #include "dblureffectwidget.h"
41 #include "dwidgetstype.h"
42 #include "dlabel.h"
4343
4444 DWIDGET_BEGIN_NAMESPACE
4545
46 const int DefaultTitlebarHeight = 40;
47 const int DefaultIconHeight = 24;
48 const int DefaultIconWidth = 24;
46 const int DefaultTitlebarHeight = 50;
47 const int DefaultIconHeight = 32;
48 const int DefaultIconWidth = 32;
4949
5050 class DTitlebarPrivate : public DTK_CORE_NAMESPACE::DObjectPrivate
5151 {
6464 void updateFullscreen();
6565 void updateButtonsState(Qt::WindowFlags type);
6666 void updateButtonsFunc();
67 void updateCenterArea();
68
6769 void handleParentWindowStateChange();
6870 void handleParentWindowIdChange();
6971 void _q_toggleWindowState();
7577 void _q_helpActionTriggered();
7678 void _q_aboutActionTriggered();
7779 void _q_quitActionTriggered();
80 void _q_switchThemeActionTriggered(QAction*action);
7881 #endif
7982
83 void setIconVisible(bool visible);
84 void updateTabOrder();
85
8086 QHBoxLayout *mainLayout;
81 DLabel *iconLabel;
82 DLabel *titleLabel;
87 QWidget *leftArea;
88 QHBoxLayout *leftLayout;
89 QWidget *rightArea;
90 QHBoxLayout *rightLayout;
91 DLabel *centerArea;
92 QHBoxLayout *centerLayout;
93 DIconButton *iconLabel;
94 QWidget *buttonArea;
8395 DWindowMinButton *minButton;
8496 DWindowMaxButton *maxButton;
8597 DWindowCloseButton *closeButton;
8698 DWindowOptionButton *optionButton;
8799 DImageButton *quitFullButton;
88
89 QWidget *customWidget = Q_NULLPTR;
90 QWidget *coustomAtea;
91 QWidget *buttonArea;
92 QWidget *titleArea;
93 QWidget *titlePadding;
94 QLabel *separatorTop;
95 QLabel *separator;
100 DLabel *titleLabel;
101 QWidget *customWidget = nullptr;
102
103 DHorizontalLine *separatorTop;
104 DHorizontalLine *separator;
105
106 DBlurEffectWidget *blurWidget = nullptr;
96107
97108 #ifndef QT_NO_MENU
98 QMenu *menu = Q_NULLPTR;
99 QAction *helpAction = Q_NULLPTR;
100 QAction *aboutAction = Q_NULLPTR;
101 QAction *quitAction = Q_NULLPTR;
109 QMenu *menu = Q_NULLPTR;
110 QAction *helpAction = Q_NULLPTR;
111 QAction *aboutAction = Q_NULLPTR;
112 QAction *quitAction = Q_NULLPTR;
113 bool canSwitchTheme = true;
114 QAction *themeSeparator = nullptr;
115 QMenu *switchThemeMenu = nullptr;
116 QAction *autoThemeAction = nullptr;
117 QAction *lightThemeAction = nullptr;
118 QAction *darkThemeAction = nullptr;
102119 #endif
103120
104121 QWindow *targetWindowHandle = Q_NULLPTR;
120137 D_Q(DTitlebar);
121138
122139 mainLayout = new QHBoxLayout;
123 iconLabel = new DLabel;
124 titleLabel = new DLabel;
140 leftArea = new QWidget;
141 leftLayout = new QHBoxLayout(leftArea);
142 rightArea = new QWidget;
143 rightLayout = new QHBoxLayout;
144 centerArea = new DLabel(q);
145 centerLayout = new QHBoxLayout(centerArea);
146 iconLabel = new DIconButton(q);
147 buttonArea = new QWidget;
125148 minButton = new DWindowMinButton;
126149 maxButton = new DWindowMaxButton;
127150 closeButton = new DWindowCloseButton;
128151 optionButton = new DWindowOptionButton;
129152 quitFullButton = new DImageButton;
130 coustomAtea = new QWidget;
131 buttonArea = new QWidget;
132 titleArea = new QWidget;
133 titlePadding = new QWidget;
134 separatorTop = new QLabel(q);
135 separator = new QLabel(q);
153 separatorTop = new DHorizontalLine(q);
154 separator = new DHorizontalLine(q);
155 titleLabel = centerArea;
156 titleLabel->setElideMode(Qt::ElideMiddle);
136157
137158 optionButton->setObjectName("DTitlebarDWindowOptionButton");
159 optionButton->setIconSize(QSize(DefaultTitlebarHeight, DefaultTitlebarHeight));
138160 minButton->setObjectName("DTitlebarDWindowMinButton");
161 minButton->setIconSize(QSize(DefaultTitlebarHeight, DefaultTitlebarHeight));
139162 maxButton->setObjectName("DTitlebarDWindowMaxButton");
163 maxButton->setIconSize(QSize(DefaultTitlebarHeight, DefaultTitlebarHeight));
140164 closeButton->setObjectName("DTitlebarDWindowCloseButton");
165 closeButton->setIconSize(QSize(DefaultTitlebarHeight, DefaultTitlebarHeight));
141166 quitFullButton->setObjectName("DTitlebarDWindowQuitFullscreenButton");
142167 quitFullButton->hide();
143168
144 mainLayout->setContentsMargins(6, 0, 0, 0);
145 mainLayout->setSpacing(0);
146
147 iconLabel->setFixedSize(DefaultIconWidth, DefaultIconHeight);
169 iconLabel->setIconSize(QSize(DefaultIconWidth, DefaultIconHeight));
148170 iconLabel->setWindowFlags(Qt::WindowTransparentForInput);
149 titleLabel->setText(qApp->applicationName());
150 // TODO: use QSS
151 titleLabel->setStyleSheet("font-size: 12px;");
152 titleLabel->setContentsMargins(0, 0, DefaultIconWidth + 10, 0);
153 titleLabel->setWindowFlags(Qt::WindowTransparentForInput);
154 // q->setStyleSheet("background-color: green;");
171 iconLabel->setFocusPolicy(Qt::NoFocus);
172 iconLabel->setFlat(true);
173 // 默认无图标,所以隐藏
174 iconLabel->hide();
175
176 leftArea->setWindowFlag(Qt::WindowTransparentForInput);
177 leftArea->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
178 leftLayout->setContentsMargins(0, 0, 0, 0);
179
180 centerLayout->setContentsMargins(0, 0, 0, 0);
181 centerArea->setText(qApp->applicationName());
182 centerArea->setWindowFlags(Qt::WindowTransparentForInput);
183 centerArea->setFrameShape(QFrame::NoFrame);
184 centerArea->setAutoFillBackground(false);
185 centerArea->setBackgroundRole(QPalette::NoRole);
186 centerArea->setAlignment(Qt::AlignCenter);
187
188 buttonArea->setWindowFlag(Qt::WindowTransparentForInput);
189 buttonArea->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
190 QHBoxLayout *buttonLayout = new QHBoxLayout(buttonArea);
191 buttonLayout->setContentsMargins(0, 0, 0, 0);
192 buttonLayout->setSpacing(0);
193 buttonLayout->addWidget(optionButton);
194 buttonLayout->addWidget(minButton);
195 buttonLayout->addWidget(maxButton);
196 buttonLayout->addWidget(closeButton);
197 buttonLayout->addWidget(quitFullButton);
198
199 rightArea->setWindowFlag(Qt::WindowTransparentForInput);
200 rightArea->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
201 rightLayout->setContentsMargins(0, 0, 0, 0);
202 auto rightAreaLayout = new QHBoxLayout(rightArea);
203 rightAreaLayout->setContentsMargins(0, 0, 0, 0);
204 rightAreaLayout->setMargin(0);
205 rightAreaLayout->setSpacing(0);
206 rightAreaLayout->addLayout(rightLayout);
207 rightAreaLayout->addWidget(buttonArea);
155208
156209 separatorTop->setFixedHeight(1);
157 separatorTop->setStyleSheet("background: rgba(0, 0, 0, 20);");
158210 separatorTop->hide();
159211 separatorTop->setWindowFlags(Qt::WindowTransparentForInput);
160212
161213 separator->setFixedHeight(1);
162 separator->setStyleSheet("background: rgba(0, 0, 0, 20);");
163214 separator->hide();
164215 separator->setWindowFlags(Qt::WindowTransparentForInput);
165216
166 QHBoxLayout *buttonAreaLayout = new QHBoxLayout;
167 buttonAreaLayout->setContentsMargins(0, 0, 0, 0);
168 buttonAreaLayout->setMargin(0);
169 buttonAreaLayout->setSpacing(0);
170 buttonAreaLayout->addWidget(optionButton);
171 buttonAreaLayout->addWidget(minButton);
172 buttonAreaLayout->addWidget(maxButton);
173 buttonAreaLayout->addWidget(closeButton);
174 buttonAreaLayout->addWidget(quitFullButton);
175 buttonArea->setLayout(buttonAreaLayout);
176
177 QHBoxLayout *titleAreaLayout = new QHBoxLayout;
178 titleAreaLayout->setContentsMargins(4, 0, 10 + iconLabel->width(), 0);
179 titleAreaLayout->setSpacing(0);
180 titleAreaLayout->addWidget(iconLabel);
181 titleAreaLayout->setAlignment(iconLabel, Qt::AlignLeft);
182 titlePadding->setFixedSize(buttonArea->size());
183 titlePadding->setWindowFlags(Qt::WindowTransparentForInput);
184 titleAreaLayout->addWidget(titlePadding);
185 titleAreaLayout->addStretch();
186 titleAreaLayout->addWidget(titleLabel);
187 titleAreaLayout->setAlignment(titleLabel, Qt::AlignCenter);
188
189 titleAreaLayout->addStretch();
190 titleArea->setLayout(titleAreaLayout);
191 titleArea->setWindowFlags(Qt::WindowTransparentForInput);
192
193 QHBoxLayout *coustomAteaLayout = new QHBoxLayout;
194 coustomAteaLayout->setMargin(0);
195 coustomAteaLayout->setSpacing(0);
196 coustomAteaLayout->addWidget(titleArea);
197 coustomAtea->setLayout(coustomAteaLayout);
198
199 mainLayout->addWidget(coustomAtea);
200 mainLayout->addWidget(buttonArea);
201 mainLayout->setAlignment(buttonArea, Qt::AlignRight | Qt::AlignVCenter);
217 mainLayout->setContentsMargins(0, 0, 0, 0);
218 mainLayout->addWidget(leftArea, 0, Qt::AlignLeft);
219 mainLayout->addWidget(rightArea, 0, Qt::AlignRight);
202220
203221 q->setLayout(mainLayout);
204222 q->setFixedHeight(DefaultTitlebarHeight);
205223 q->setMinimumHeight(DefaultTitlebarHeight);
206 coustomAtea->setFixedHeight(q->height());
207 buttonArea->setFixedHeight(q->height());
208224
209225 q->connect(quitFullButton, &DImageButton::clicked, q, [ = ]() {
210226 bool isFullscreen = targetWindow()->windowState().testFlag(Qt::WindowFullScreen);
217233 q->connect(optionButton, &DWindowOptionButton::clicked, q, &DTitlebar::optionClicked);
218234 q->connect(DWindowManagerHelper::instance(), SIGNAL(windowMotifWMHintsChanged(quint32)),
219235 q, SLOT(_q_onTopWindowMotifHintsChanged(quint32)));
236
237 q->setFrameShape(QFrame::NoFrame);
238 q->setBackgroundRole(QPalette::Base);
239 q->setAutoFillBackground(true);
240 q->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
241 // 确保点击标题栏后输入框能失去焦点
242 // 另外,让标题栏接收焦点,还是为了避免一个focus控件隐藏时,会把焦点转移给标题栏上的按钮控件
243 q->setFocusPolicy(Qt::StrongFocus);
220244 }
221245
222246 QWidget *DTitlebarPrivate::targetWindow()
283307 bool useDXcb = DPlatformWindowHandle::isEnabledDXcb(targetWindow());
284308 bool isFullscreen = targetWindow()->windowState().testFlag(Qt::WindowFullScreen);
285309
286 bool forceShow = !useDXcb;
310 // bool forceShow = !useDXcb;
311 bool forceShow = false;
287312 #ifndef Q_OS_LINUX
288313 forceShow = false;
289314 #endif
292317 if (titleLabel) {
293318 titleLabel->setVisible(showTitle);
294319 }
295 if (iconLabel) {
296 iconLabel->setVisible(showTitle);
297 }
298320
299321 // Never show in embed/fullscreen
300 bool forceHide = embedMode || isFullscreen;
322 bool forceHide = (!useDXcb) || embedMode || isFullscreen;
301323
302324 bool showMin = (type.testFlag(Qt::WindowMinimizeButtonHint) || forceShow) && !forceHide;
303325 minButton->setVisible(showMin);
320342
321343 bool showClose = (type.testFlag(Qt::WindowCloseButtonHint) || forceShow) && !forceHide;
322344 closeButton->setVisible(showClose);
323
324 buttonArea->adjustSize();
325 buttonArea->resize(buttonArea->size());
326
327 if (titlePadding) {
328 titlePadding->setFixedSize(buttonArea->size());
329 }
330345 }
331346
332347 void DTitlebarPrivate::updateButtonsFunc()
354369 !disableFlags.testFlag(Qt::WindowCloseButtonHint));
355370 }
356371
372 void DTitlebarPrivate::updateCenterArea()
373 {
374 D_QC(DTitlebar);
375
376 if (centerArea->isHidden()) {
377 return;
378 }
379
380 int padding = qMax(leftArea->width(), rightArea->width());
381 QRect rect(0, 0, q->width() - 2 * padding, q->height());
382 rect.moveCenter(q->rect().center());
383 centerArea->setGeometry(rect);
384 }
385
357386 void DTitlebarPrivate::handleParentWindowStateChange()
358387 {
359388 maxButton->setMaximized(targetWindow()->windowState() == Qt::WindowMaximized);
389418 parentWindow->showNormal();
390419 } else if (!parentWindow->isFullScreen()
391420 && (maxButton->isVisible())) {
392 maxButton->setState(DImageButton::Normal);
393421 parentWindow->showMaximized();
394422 }
395423 }
396424
397425 void DTitlebarPrivate::_q_showMinimized()
398426 {
399 minButton->setState(DImageButton::Normal);
400427 targetWindow()->showMinimized();
401428 }
402429
426453
427454 if (titleLabel) {
428455 titleLabel->setVisible(decorations_hints.testFlag(DWindowManagerHelper::DECOR_TITLE));
429 }
430
431 if (iconLabel) {
432 iconLabel->setVisible(decorations_hints.testFlag(DWindowManagerHelper::DECOR_TITLE));
433456 }
434457
435458 updateButtonsState(targetWindow()->windowFlags());
448471 setWindowFlag(disableFlags, Qt::WindowMaximizeButtonHint, !maxButton->isEnabled());
449472 setWindowFlag(disableFlags, Qt::WindowCloseButtonHint, !closeButton->isEnabled());
450473 #endif
451
452 if (titlePadding) {
453 titlePadding->setFixedSize(buttonArea->size());
454 }
455474 }
456475
457476 #ifndef QT_NO_MENU
462481
463482 if (!menu) {
464483 q->setMenu(new QMenu(q));
484 }
485
486 // add switch theme sub menu
487 if (!switchThemeMenu) {
488 switchThemeMenu = new QMenu(qApp->translate("TitleBarMenu", "Theme"), menu);
489 lightThemeAction = switchThemeMenu->addAction(qApp->translate("TitleBarMenu", "Light Theme"));
490 darkThemeAction = switchThemeMenu->addAction(qApp->translate("TitleBarMenu", "Dark Theme"));
491 autoThemeAction = switchThemeMenu->addAction(qApp->translate("TitleBarMenu", "System Theme"));
492
493 autoThemeAction->setCheckable(true);
494 lightThemeAction->setCheckable(true);
495 darkThemeAction->setCheckable(true);
496
497 QActionGroup *group = new QActionGroup(switchThemeMenu);
498 group->addAction(autoThemeAction);
499 group->addAction(lightThemeAction);
500 group->addAction(darkThemeAction);
501
502 QObject::connect(group, SIGNAL(triggered(QAction*)),
503 q, SLOT(_q_switchThemeActionTriggered(QAction*)));
504
505 menu->addMenu(switchThemeMenu);
506 themeSeparator = menu->addSeparator();
507
508 switchThemeMenu->menuAction()->setVisible(canSwitchTheme);
509 themeSeparator->setVisible(canSwitchTheme);
465510 }
466511
467512 // add help menu item.
507552 DApplication *dapp = qobject_cast<DApplication *>(qApp);
508553 if (dapp) {
509554 dapp->handleQuitAction();
555 }
556 }
557
558 void DTitlebarPrivate::_q_switchThemeActionTriggered(QAction *action)
559 {
560 DGuiApplicationHelper::ColorType type = DGuiApplicationHelper::UnknownType;
561
562 if (action == lightThemeAction) {
563 type = DGuiApplicationHelper::LightType;
564 } else if (action == darkThemeAction) {
565 type = DGuiApplicationHelper::DarkType;
566 }
567
568 DGuiApplicationHelper::instance()->setPaletteType(type);
569 }
570
571 void DTitlebarPrivate::setIconVisible(bool visible)
572 {
573 if (iconLabel->isVisible() == visible)
574 return;
575
576 if (visible) {
577 leftLayout->insertSpacing(0, 10);
578 leftLayout->insertWidget(1, iconLabel, 0, Qt::AlignLeading | Qt::AlignVCenter);
579 iconLabel->show();
580 } else {
581 iconLabel->hide();
582 // 从布局中移除图标相关的东西
583 delete leftLayout->takeAt(0);
584 delete leftLayout->takeAt(1);
585 }
586 }
587
588 void DTitlebarPrivate::updateTabOrder()
589 {
590 D_Q(DTitlebar);
591
592 QList<QWidget *> orderWidget;
593 QList<QHBoxLayout *> orderLayout;
594 orderLayout << leftLayout << centerLayout << rightLayout;
595
596 //查找 leftLayout、centerLayout、rightLayout 三个区域中有 TabFocus 属性的 widget
597 for (QHBoxLayout * lyt : orderLayout) {
598 if (!lyt) {
599 continue;
600 }
601
602 for (int i = 0; i < lyt->count(); ++i) {
603 QWidget *wdg = lyt->itemAt(i)->widget();
604 if (wdg && (wdg->focusPolicy() & Qt::FocusPolicy::TabFocus)) {
605 orderWidget.append(wdg);
606 }
607 }
608 }
609
610 if (orderWidget.isEmpty()) {
611 return;
612 }
613
614 //对筛选出来的 widget 重新设置 taborder
615 QWidget::setTabOrder(q, orderWidget.first());
616 for (int i = 0; i < orderWidget.count() - 1; ++i) {
617 QWidget::setTabOrder(orderWidget.at(i), orderWidget.at(i + 1));
510618 }
511619 }
512620
545653 setBackgroundTransparent(true);
546654 }
547655
548 DThemeManager::registerWidget(this, QStringList({"transparent"}));
549
550656 D_D(DTitlebar);
551657 d->init();
552658
554660 if (parent && parent->window()->windowType() != Qt::Window) {
555661 d->optionButton->hide();
556662 }
557
558 d->buttonArea->adjustSize();
559 d->buttonArea->resize(d->buttonArea->size());
560 d->titlePadding->setFixedSize(d->buttonArea->size());
561663 }
562664
563665 #ifndef QT_NO_MENU
633735 D_D(DTitlebar);
634736
635737 if (d->menu) {
636 d->optionButton->setState(DImageButton::Normal);
738 // 更新主题选中的项
739 if (d->switchThemeMenu) {
740 QAction *action;
741
742 switch (DGuiApplicationHelper::instance()->paletteType()) {
743 case DGuiApplicationHelper::LightType:
744 action = d->lightThemeAction;
745 break;
746 case DGuiApplicationHelper::DarkType:
747 action = d->darkThemeAction;
748 break;
749 default:
750 action = d->autoThemeAction;
751 break;
752 }
753
754 action->setChecked(true);
755 }
756
637757 d->menu->exec(d->optionButton->mapToGlobal(d->optionButton->rect().bottomLeft()));
638758 }
639759 }
660780 d->_q_onTopWindowMotifHintsChanged(
661781 static_cast<quint32>(window()->internalWinId()));
662782 }
783
784 d->updateCenterArea();
663785 }
664786
665787 void DTitlebar::mousePressEvent(QMouseEvent *event)
725847 return QWidget::eventFilter(obj, event);
726848 }
727849
850 bool DTitlebar::event(QEvent *e)
851 {
852 if (e->type() == QEvent::LayoutRequest) {
853 D_D(DTitlebar);
854
855 d->updateCenterArea();
856 }
857
858 return QFrame::event(e);
859 }
860
728861 void DTitlebar::resizeEvent(QResizeEvent *event)
729862 {
730863 //override QWidget::resizeEvent to fix button and separator pos.
731864 D_D(DTitlebar);
732865
733 d->optionButton->setFixedHeight(event->size().height());
734 d->minButton->setFixedHeight(event->size().height());
735 d->maxButton->setFixedHeight(event->size().height());
736 d->closeButton->setFixedHeight(event->size().height());
737866 d->separatorTop->setFixedWidth(event->size().width());
738867 d->separator->setFixedWidth(event->size().width());
868 d->updateCenterArea();
869
870 if (d->blurWidget) {
871 d->blurWidget->resize(event->size());
872 }
873
739874 return QWidget::resizeEvent(event);
740875 }
741876
753888 */
754889 void DTitlebar::setCustomWidget(QWidget *w, bool fixCenterPos)
755890 {
756 setCustomWidget(w, Qt::AlignCenter, fixCenterPos);
757 }
758
759 /*!
760 * \~english @brief DTitlebar::setCustomWidget sets a customized widget to be used as the
761 * central content of the title bar.
762 * @param w is the widget to be used as the customize widget shown in the title
763 * bar.
764 * @param wflag is used to vertically align the widget.
765 * @param fixCenterPos indicates whether it should automatically move the
766 * customize widget to the horizontal center of the title bar or not.
767 */
768 /*!
769 * \~chinese @brief 设置标题栏上的自定义控件
770 * @param w 需要显示的控件。
771 * @param wflag 控件对齐方式。
772 * @param fixCenterPos 是否需要自动修正控件位置,用于保持控件居中显示。
773 */
774 void DTitlebar::setCustomWidget(QWidget *w, Qt::AlignmentFlag wflag, bool fixCenterPos)
775 {
776 D_D(DTitlebar);
777 if (!w || w == d->titleArea) {
891 D_D(DTitlebar);
892
893 if (w == d->customWidget) {
778894 return;
779895 }
780896
781 QSize old = d->buttonArea->size();
782
783 QHBoxLayout *l = new QHBoxLayout;
784 l->setSpacing(0);
785 l->setMargin(0);
897 if (d->customWidget) {
898 d->mainLayout->removeWidget(d->customWidget);
899 d->customWidget->hide();
900 d->customWidget->deleteLater();
901 }
902
903 d->customWidget = w;
904
905 if (w) {
906 w->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
907 } else {
908 d->centerArea->show();
909 d->titleLabel = d->centerArea;
910
911 return;
912 }
786913
787914 if (fixCenterPos) {
788 d->titlePadding = new QWidget;
789 d->titlePadding->setFixedSize(old);
790 l->addWidget(d->titlePadding);
791 }
792
793 l->addWidget(w, 0, wflag);
794 qDeleteAll(d->coustomAtea->children());
795 d->titleLabel = Q_NULLPTR;
796 d->titleArea = Q_NULLPTR;
797 d->iconLabel = Q_NULLPTR;
798 d->titlePadding = Q_NULLPTR;
799 d->coustomAtea->setLayout(l);
800 d->buttonArea->resize(old);
801 d->customWidget = w;
802
803 w->resize(d->coustomAtea->size());
915 for (int i = 0; i < d->centerLayout->count(); ++i) {
916 delete d->centerLayout->itemAt(i);
917 }
918
919 addWidget(w, Qt::Alignment());
920 d->centerArea->show();
921 d->titleLabel = d->centerArea;
922 } else {
923 d->mainLayout->insertWidget(1, w);
924 d->titleLabel = nullptr;
925 d->centerArea->hide();
926 }
927 }
928
929 void DTitlebar::addWidget(QWidget *w, Qt::Alignment alignment)
930 {
931 D_D(DTitlebar);
932
933 if (alignment & Qt::AlignLeft) {
934 d->leftLayout->addWidget(w, 0, alignment & ~Qt::AlignLeft);
935 } else if (alignment & Qt::AlignRight) {
936 d->rightLayout->addWidget(w, 0, alignment & ~Qt::AlignRight);
937 } else {
938 d->centerLayout->addWidget(w, 0, alignment);
939 d->centerArea->clear();
940 d->titleLabel = nullptr;
941 }
942
943 updateGeometry();
944 d->updateTabOrder();
945 }
946
947 void DTitlebar::removeWidget(QWidget *w)
948 {
949 D_D(DTitlebar);
950
951 d->leftLayout->removeWidget(w);
952 d->centerLayout->removeWidget(w);
953 d->rightLayout->removeWidget(w);
954
955 if (d->centerLayout->isEmpty()) {
956 d->titleLabel = d->centerArea;
957 d->titleLabel->setText(d->targetWindowHandle->title());
958 }
959
960 updateGeometry();
961 d->updateTabOrder();
804962 }
805963
806964 /*!
809967 * @param h is the target height.
810968 */
811969 /*!
812 * \~chinese @brief 设置标题栏的高度,默认高度为40。
970 * \~chinese @brief 设置标题栏的高度,默认高度为 50。
813971 * @param h 需要设置的高度
814972 */
815973 void DTitlebar::setFixedHeight(int h)
816974 {
817 D_D(DTitlebar);
818975 QWidget::setFixedHeight(h);
819 d->coustomAtea->setFixedHeight(h);
820 d->buttonArea->setFixedHeight(h);
821976 }
822977
823978 /*!
830985 */
831986 void DTitlebar::setBackgroundTransparent(bool transparent)
832987 {
833 setProperty("transparent", transparent);
988 setAutoFillBackground(!transparent);
989
990 if (transparent)
991 setBackgroundRole(QPalette::NoRole);
992 else
993 setBackgroundRole(QPalette::Base);
834994 }
835995
836996 /*!
8821042 void DTitlebar::setIcon(const QIcon &icon)
8831043 {
8841044 D_D(DTitlebar);
885 if (d->titleLabel && !d->embedMode) {
886 d->titleLabel->setContentsMargins(0, 0, 0, 0);
887 d->iconLabel->setPixmap(icon.pixmap(QSize(DefaultIconWidth, DefaultIconHeight)));
1045 if (!d->embedMode) {
1046 d->iconLabel->setIcon(icon);
1047 d->setIconVisible(!icon.isNull());
8881048 } else if (parentWidget()) {
1049 d->setIconVisible(false);
8891050 parentWidget()->setWindowIcon(icon);
8901051 }
8911052 }
8951056 D_D(DTitlebar);
8961057
8971058 d->_q_toggleWindowState();
1059 }
1060
1061 void DTitlebar::setBlurBackground(bool blurBackground)
1062 {
1063 D_D(DTitlebar);
1064
1065 if (static_cast<bool>(d->blurWidget) == blurBackground)
1066 return;
1067
1068 if (d->blurWidget) {
1069 d->blurWidget->hide();
1070 d->blurWidget->deleteLater();
1071 d->blurWidget = nullptr;
1072 } else {
1073 d->blurWidget = new DBlurEffectWidget(this);
1074 d->blurWidget->lower();
1075 d->blurWidget->resize(size());
1076 d->blurWidget->setMaskColor(DBlurEffectWidget::AutoColor);
1077 d->blurWidget->setRadius(30);
1078 d->blurWidget->show();
1079 }
1080
1081 setAutoFillBackground(!blurBackground);
8981082 }
8991083
9001084 /*!
10011185 d->updateButtonsState(windowFlags());
10021186 }
10031187
1004 void DTitlebar::resize(int w, int h)
1005 {
1006 D_DC(DTitlebar);
1007 if (d->customWidget) {
1008 d->customWidget->resize(w - d->buttonArea->width(), h);
1009 }
1010 }
1011
1012 void DTitlebar::resize(const QSize &sz)
1013 {
1014 DTitlebar::resize(sz.width(), sz.height());
1015 }
1016
1188 /*!
1189 * \~chinese \brief DTitlebar::menuIsVisible
1190 * \~chinese \return true 菜单可见 false菜单不可见
1191 */
10171192 bool DTitlebar::menuIsVisible() const
10181193 {
10191194 D_DC(DTitlebar);
10201195 return !d->optionButton->isVisible();
10211196 }
10221197
1198 /*!
1199 * \~chinese \brief DTitlebar::setMenuVisible 设置菜单是否可见
1200 * \~chinese \param visible true 菜单可见 false菜单不可见
1201 */
10231202 void DTitlebar::setMenuVisible(bool visible)
10241203 {
10251204 D_D(DTitlebar);
10261205 d->optionButton->setVisible(visible);
10271206 }
10281207
1208 /*!
1209 * \~chinese \brief DTitlebar::menuIsDisabled
1210 * \~chinese \return true 菜单被禁用 false 菜单没有被禁用
1211 */
10291212 bool DTitlebar::menuIsDisabled() const
10301213 {
10311214 D_DC(DTitlebar);
10321215 return !d->optionButton->isEnabled();
10331216 }
10341217
1218 /*!
1219 * \~chinese \brief DTitlebar::setMenuDisabled 设置菜单是否被禁用
1220 * \~chinese \param disabled true 菜单被禁用 false菜单没有被禁用
1221 */
10351222 void DTitlebar::setMenuDisabled(bool disabled)
10361223 {
10371224 D_D(DTitlebar);
10381225 d->optionButton->setDisabled(disabled);
10391226 }
10401227
1228 /*!
1229 * \~chinese \brief DTitlebar::quitMenuIsDisabled
1230 * \~chinese \return true 退出菜单被禁用 false退出菜单没有被禁用
1231 */
1232 bool DTitlebar::quitMenuIsDisabled() const
1233 {
1234 D_DC(DTitlebar);
1235
1236 return d->quitAction && !d->quitAction->isEnabled();
1237 }
1238
1239 /*!
1240 * \~chinese \brief DTitlebar::setQuitMenuDisabled 设置退出菜单是否被禁用
1241 * \~chinese \param disabled true 退出菜单被禁用 false退出菜单没有被禁用
1242 */
1243 void DTitlebar::setQuitMenuDisabled(bool disabled)
1244 {
1245 D_D(DTitlebar);
1246
1247 if (!d->quitAction) {
1248 d->_q_addDefaultMenuItems();
1249 }
1250
1251 d->quitAction->setEnabled(!disabled);
1252 }
1253
1254 /*!
1255 * \~chinese \brief DTitlebar::setQuitMenuVisible 设置退出菜单是否被可见
1256 * \~chinese \param visible true 退出菜单可见 false退出菜单不可见
1257 */
1258 void DTitlebar::setQuitMenuVisible(bool visible)
1259 {
1260 D_D(DTitlebar);
1261
1262 if (!d->quitAction) {
1263 d->_q_addDefaultMenuItems();
1264 }
1265
1266 d->quitAction->setVisible(visible);
1267 }
1268
1269 /*!
1270 * \~chinese \brief DTitlebar::switchThemeMenuIsVisible
1271 * \~chinese \return true 切换主题菜单可见 false切换主题菜单不可见
1272 */
1273 bool DTitlebar::switchThemeMenuIsVisible() const
1274 {
1275 D_DC(DTitlebar);
1276
1277 return d->switchThemeMenu;
1278 }
1279
1280 /*!
1281 * \~chinese \brief DTitlebar::setSwitchThemeMenuVisible 设置切换主题菜单是否可见
1282 * \~chinese \param visible true 切换主题菜单可见 false切换主题菜单不可见
1283 */
1284 void DTitlebar::setSwitchThemeMenuVisible(bool visible)
1285 {
1286 D_D(DTitlebar);
1287
1288 if (visible == d->canSwitchTheme) {
1289 return;
1290 }
1291
1292 d->canSwitchTheme = visible;
1293
1294 if (d->switchThemeMenu) {
1295 d->switchThemeMenu->menuAction()->setVisible(visible);
1296 d->themeSeparator->setVisible(visible);
1297 }
1298 }
10411299
10421300 /*!
10431301 * \~english \brief DTitlebar::setDisableFlags will disable button match flags.
10641322 {
10651323 D_DC(DTitlebar);
10661324 return d->disableFlags;
1325 }
1326
1327 QSize DTitlebar::sizeHint() const
1328 {
1329 D_DC(DTitlebar);
1330
1331 if (d->centerArea->isHidden()) {
1332 return QFrame::sizeHint();
1333 }
1334
1335 int padding = qMax(d->leftArea->sizeHint().width(), d->rightArea->sizeHint().width());
1336 int width = d->centerArea->sizeHint().width() + 2 * d->mainLayout->spacing() + 2 * padding;
1337
1338 return QSize(width, DefaultTitlebarHeight);
1339 }
1340
1341 QSize DTitlebar::minimumSizeHint() const
1342 {
1343 return sizeHint();
1344 }
1345
1346 bool DTitlebar::blurBackground() const
1347 {
1348 D_DC(DTitlebar);
1349 return d->blurWidget;
10671350 }
10681351
10691352 void DTitlebar::mouseMoveEvent(QMouseEvent *event)
1717 #ifndef DTITLEBAR_H
1818 #define DTITLEBAR_H
1919
20 #include <dtkwidget_global.h>
21 #include <DObject>
22 #include <DGuiApplicationHelper>
23
2024 #include <QFrame>
2125 #include <QMenu>
2226
23 #include <dobject.h>
24 #include "dtkwidget_global.h"
25
27 DGUI_USE_NAMESPACE
2628 DWIDGET_BEGIN_NAMESPACE
2729
2830 class DTitlebarPrivate;
2931 class LIBDTKWIDGETSHARED_EXPORT DTitlebar : public QFrame, public DTK_CORE_NAMESPACE::DObject
3032 {
3133 Q_OBJECT
34 Q_PROPERTY(bool blurBackground READ blurBackground WRITE setBlurBackground)
35
3236 public:
3337 explicit DTitlebar(QWidget *parent = Q_NULLPTR);
3438
3943
4044 QWidget *customWidget() const;
4145 void setCustomWidget(QWidget *, bool fixCenterPos = false);
42 void setCustomWidget(QWidget *, Qt::AlignmentFlag flag = Qt::AlignCenter, bool fixCenterPos = false);
46
47 void addWidget(QWidget *w, Qt::Alignment alignment = Qt::Alignment());
48 void removeWidget(QWidget *w);
4349
4450 int buttonAreaWidth() const;
4551 bool separatorVisible() const;
5056 void setVisible(bool visible) Q_DECL_OVERRIDE;
5157 void setEmbedMode(bool embed);
5258
53 void resize(int width, int height);
54 void resize(const QSize &);
55
5659 bool menuIsVisible() const;
5760 void setMenuVisible(bool visible);
5861
5962 bool menuIsDisabled() const;
6063 void setMenuDisabled(bool disabled);
6164
65 bool quitMenuIsDisabled() const;
66 void setQuitMenuDisabled(bool disabled);
67 void setQuitMenuVisible(bool visible);
68
69 bool switchThemeMenuIsVisible() const;
70 void setSwitchThemeMenuVisible(bool visible);
71
6272 void setDisableFlags(Qt::WindowFlags flags);
6373 Qt::WindowFlags disableFlags() const;
74
75 QSize sizeHint() const;
76 QSize minimumSizeHint() const;
77
78 bool blurBackground() const;
79
6480 Q_SIGNALS:
6581 void optionClicked();
6682 void doubleClicked();
8197 /// Maximized/Minumized
8298 void toggleWindowState();
8399
100 void setBlurBackground(bool blurBackground);
101
84102 private Q_SLOTS:
85103 #ifndef QT_NO_MENU
86104 void showMenu();
88106
89107 protected:
90108 bool eventFilter(QObject *obj, QEvent *event) Q_DECL_OVERRIDE;
109 bool event(QEvent *e) override;
91110 void showEvent(QShowEvent *event) Q_DECL_OVERRIDE;
92111 void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
93112 void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
106125 D_PRIVATE_SLOT(void _q_helpActionTriggered())
107126 D_PRIVATE_SLOT(void _q_aboutActionTriggered())
108127 D_PRIVATE_SLOT(void _q_quitActionTriggered())
128 D_PRIVATE_SLOT(void _q_switchThemeActionTriggered(QAction*))
109129 #endif
110130 };
111131
6363 QFrame(parent), DObject(*new DToastPrivate(this))
6464 {
6565 D_D(DToast);
66 DThemeManager::registerWidget(this);
6766 d->initUI();
6867 }
6968
3131 DWIDGET_BEGIN_NAMESPACE
3232
3333 class DToastPrivate;
34 class LIBDTKWIDGETSHARED_EXPORT DToast : public QFrame, public DTK_CORE_NAMESPACE::DObject
34 class LIBDTKWIDGETSHARED_EXPORT D_DECL_DEPRECATED_X("Use DMessageManager") DToast : public QFrame, public DTK_CORE_NAMESPACE::DObject
3535 {
3636 Q_OBJECT
3737
0 #include "dtooltip.h"
1 #include "dstyle.h"
2
3 #include <DPlatformWindowHandle>
4
5 #include <QDebug>
6 #include <QEvent>
7 #include <QTimer>
8
9 DWIDGET_BEGIN_NAMESPACE
10
11 /*!
12 * \~chinese \class DToolTip
13 * \~chinese \brief DToolTip类似于 QToolTip 功能的类
14 * \~chinese \li DToolTip提供了将 DToolTip 显示在指定位置的函数
15 */
16
17 /*!
18 * \~chinese \brief DToolTip的构造函数
19 * \~chinese \param text文本信息
20 * \~chinese \param completionClose提示消息消失后是否销毁
21 */
22 DToolTip::DToolTip(const QString &text, bool completionClose)
23 : DTipLabel(text)
24 {
25 if (completionClose) {
26 setAttribute(Qt::WA_DeleteOnClose);
27 }
28 }
29
30 /*!
31 * \~chinese \brief DToolTip::sizeHint
32 * \~chinese \sa QLabel::sizeHint()
33 */
34 QSize DToolTip::sizeHint() const
35 {
36 int radius = DStyleHelper(style()).pixelMetric(DStyle::PM_FrameRadius);
37 QSize fontSize = fontMetrics().size(Qt::TextSingleLine, text());
38
39 fontSize.setWidth(fontSize.width() + radius);
40
41 return fontSize;
42 }
43
44 /*!
45 * \chinese \brief DToolTip::show设置提示消息出现的位置
46 * \chinese \param pos提示消息位置
47 * \chinese \param duration提示消息存在时间,单位毫秒
48 */
49 void DToolTip::show(const QPoint &pos, int duration)
50 {
51 QTimer::singleShot(duration, this, &DTipLabel::close);
52
53 DTipLabel::show(pos);
54 }
55
56 DWIDGET_END_NAMESPACE
0 #ifndef DTOOLTIP_H
1 #define DTOOLTIP_H
2
3 #include <DTipLabel>
4 #include <dobject.h>
5 #include <dtkwidget_global.h>
6
7 DWIDGET_BEGIN_NAMESPACE
8
9 class DToolTip : public DTipLabel
10 {
11 Q_OBJECT
12
13 public:
14 explicit DToolTip(const QString &text, bool completionClose = true);
15
16 QSize sizeHint() const override;
17 void show(const QPoint &pos, int duration);
18 };
19
20 DWIDGET_END_NAMESPACE
21
22 #endif // DTOOLTIP_H
0 #include "dwarningbutton.h"
1 #include "dapplicationhelper.h"
2 #include "dstyleoption.h"
3
4 #include <QStyleOptionButton>
5 #include <QStylePainter>
6
7 DWIDGET_BEGIN_NAMESPACE
8
9 /*!
10 * \~chinese \class DWarningButton
11 * \~chinese \brief 警告按钮控件, 继承于 DPushButton 控件, 主要替换了文字和背景的颜色
12 * \~chinese \note 通常在执行一些比较危险的动作时候, 给出的一个提醒标识, 但是并不强制阻止; 如: 某些小程序需要较高的权限才能够运行; 删除文件不可恢复等
13 * \~chinese \see DPushButton
14 */
15
16 /*!
17 * \~chinese \brief 构造函数
18 * \~chinese \param[in] parent 本控件的父对象
19 */
20 DWarningButton::DWarningButton(QWidget *parent): DPushButton(parent)
21 {
22 }
23
24 /*!
25 * \~chinese \brief 初始化风格属性
26 * \~chinese \param[in] option 用来初始化本控件的基础的风格属性
27 */
28 void DWarningButton::initStyleOption(QStyleOptionButton *option) const
29 {
30 DPushButton::initStyleOption(option);
31 DPalette pa = DApplicationHelper::instance()->palette(this);
32 option->palette.setBrush(QPalette::ButtonText, pa.textWarning());
33 option->features |= QStyleOptionButton::ButtonFeature(DStyleOptionButton::WarningButton);
34 }
35
36 void DWarningButton::paintEvent(QPaintEvent *e)
37 {
38 Q_UNUSED(e)
39
40 QStyleOptionButton opt;
41 initStyleOption(&opt);
42 QStylePainter painter(this);
43 painter.drawControl(QStyle::CE_PushButton, opt);
44 }
45
46 DWIDGET_END_NAMESPACE
0 #ifndef DWARNINGBUTTON_H
1 #define DWARNINGBUTTON_H
2
3 #include <dtkwidget_global.h>
4 #include <DPushButton>
5
6 DWIDGET_BEGIN_NAMESPACE
7
8 class DWarningButton : public DPushButton
9 {
10 public:
11 DWarningButton(QWidget *parent = nullptr);
12
13 protected:
14 void initStyleOption(QStyleOptionButton *option) const;
15 void paintEvent(QPaintEvent *e) override;
16 };
17
18 DWIDGET_END_NAMESPACE
19
20 #endif // DWARNINGBUTTON_H
2020 #include <QTimer>
2121 #include <QPainter>
2222 #include <QGraphicsDropShadowEffect>
23 #include <QEvent>
24 #include <QIcon>
25 #include <QLinearGradient>
2326
2427 #include <DObjectPrivate>
2528 #include <DSvgRenderer>
173176 d->paint(&p);
174177 }
175178
179 void DWaterProgress::changeEvent(QEvent *e)
180 {
181 if (e->type() == QEvent::PaletteChange) {
182 D_D(DWaterProgress);
183 d->waterBackImage = QImage();
184 d->waterFrontImage = QImage();
185 }
186
187 return QWidget::changeEvent(e);
188 }
189
176190 void DWaterProgressPrivate::resizePixmap(QSize sz)
177191 {
178192 // resize water;
181195 auto waterSize = QSizeF(waterWidth, waterHeight).toSize();
182196
183197 if (waterFrontImage.size() != waterSize) {
184 DSvgRenderer renderer(QString(":/images/light/images/water_front.svg"));
198 QIcon renderer = QIcon::fromTheme("water_front");
185199 QImage image(waterWidth, waterHeight, QImage::Format_ARGB32);
186200 image.fill(Qt::transparent); // partly transparent red-ish background
187201 QPainter waterPainter(&image);
188 renderer.render(&waterPainter);
202 renderer.paint(&waterPainter, image.rect());
189203 waterFrontImage = image;
190204 }
191205 if (waterBackImage.size() != waterSize) {
192 DSvgRenderer renderer(QString(":/images/light/images/water_back.svg"));
206 QIcon renderer = QIcon::fromTheme("water_back");
193207 QImage image(waterWidth, waterHeight, QImage::Format_ARGB32);
194208 image.fill(Qt::transparent); // partly transparent red-ish background
195209 QPainter waterPainter(&image);
196 renderer.render(&waterPainter);
210 renderer.paint(&waterPainter, image.rect());
197211 waterBackImage = image;
198212 }
199213 }
259273 void DWaterProgressPrivate::setValue(int v)
260274 {
261275 value = v;
262 progressText = QString("%1%").arg(v);
276 progressText = QString("%1").arg(v);
263277 }
264278
265279 void DWaterProgressPrivate::paint(QPainter *p)
280294 QPainter waterPinter(&waterImage);
281295 waterPinter.setRenderHint(QPainter::Antialiasing);
282296 waterPinter.setCompositionMode(QPainter::CompositionMode_Source);
283 waterPinter.fillRect(waterImage.rect(), QColor(43, 146, 255, 255 * 3 / 10));
297
298 QPointF pointStart(sz.width() / 2, 0);
299 QPointF pointEnd(sz.width() / 2, sz.height());
300 QLinearGradient linear(pointStart, pointEnd);
301 QColor startColor("#1F08FF");
302 startColor.setAlphaF(1);
303 QColor endColor("#50FFF7");
304 endColor.setAlphaF(0.28);
305 linear.setColorAt(0, startColor);
306 linear.setColorAt(1, endColor);
307 linear.setSpread(QGradient::PadSpread);
308 waterPinter.setPen(Qt::NoPen);
309 waterPinter.setBrush(linear);
310 waterPinter.drawEllipse(waterImage.rect().center(), sz.width() / 2 + 1, sz.height() / 2 + 1);
311
284312 waterPinter.setCompositionMode(QPainter::CompositionMode_SourceOver);
285313 waterPinter.drawImage(static_cast<int>(backXOffset), yOffset, waterBackImage);
286314 waterPinter.drawImage(static_cast<int>(backXOffset) - waterBackImage.width(), yOffset, waterBackImage);
293321 QPainterPath popPath;
294322 popPath.addEllipse(pop.xOffset * sz.width() / 100, (100 - pop.yOffset) * sz.height() / 100,
295323 pop.size * sz.width() / 100, pop.size * sz.height() / 100);
296 waterPinter.fillPath(popPath, QColor(77, 208, 255));
297 }
298 }
299
300 double borderWidth = 2.0 * sz.width() / 100.0;
301 auto outRect = QRectF(0, 0, sz.width(), sz.height());
302 QPainterPath pathBorder;
303 auto factor = 0.5;
304 auto margin = QMarginsF(borderWidth * factor, borderWidth * factor,
305 borderWidth * factor, borderWidth * factor);
306 pathBorder.addEllipse(outRect.marginsRemoved(margin));
307 waterPinter.strokePath(pathBorder, QPen(QColor(43, 146, 255, 255 * 7 / 10), borderWidth));
308 QPainterPath pathInnerBorder;
309 auto interFactor = 1.5;
310 auto innerMargin = QMarginsF(borderWidth * interFactor, borderWidth * interFactor,
311 borderWidth * interFactor, borderWidth * interFactor);
312 pathInnerBorder.addEllipse(outRect.marginsRemoved(innerMargin));
313 waterPinter.strokePath(pathInnerBorder, QPen(QColor(234, 242, 255, 255 * 5 / 10), borderWidth));
324 QColor color(255, 255, 255, 255 * 0.3);
325 waterPinter.fillPath(popPath, color);
326 }
327 }
314328
315329 if (textVisible) {
316330 auto font = waterPinter.font();
317 font.setPixelSize(sz.height() * 20 / 100);
318 waterPinter.setFont(font);
319 waterPinter.setPen(Qt::white);
320 waterPinter.drawText(rect, Qt::AlignCenter, progressText);
331
332 QRect rectValue;
333 if (progressText == "100") {
334 font.setPixelSize(sz.height() * 35 / 100);
335 waterPinter.setFont(font);
336
337 rectValue.setWidth(sz.width() * 60 / 100);
338 rectValue.setHeight(sz.height() * 35 / 100);
339 rectValue.moveCenter(rect.center().toPoint());
340 waterPinter.setPen(Qt::white);
341 waterPinter.drawText(rectValue, Qt::AlignCenter, progressText);
342
343 } else {
344 font.setPixelSize(sz.height() * 40 / 100);
345 waterPinter.setFont(font);
346
347 rectValue.setWidth(sz.width() * 45 / 100);
348 rectValue.setHeight(sz.height() * 40 / 100);
349 rectValue.moveCenter(rect.center().toPoint());
350 rectValue.moveLeft(rect.left() + rect.width() * 0.45 * 0.5);
351
352 waterPinter.setPen(Qt::white);
353 waterPinter.drawText(rectValue, Qt::AlignCenter, progressText);
354 font.setPixelSize(font.pixelSize() / 2);
355 waterPinter.setFont(font);
356 QRect rectPerent(QPoint(rectValue.right(), rectValue.bottom() - rect.height() * 20 / 100),
357 QPoint(rectValue.right() + rect.width() * 20 / 100, rectValue.bottom()));
358
359 waterPinter.drawText(rectPerent, Qt::AlignCenter, "%");
360 }
321361 }
322362 waterPinter.end();
323363
4848
4949 protected:
5050 void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
51 void changeEvent(QEvent *e) override;
5152
5253 private:
5354 D_DECLARE_PRIVATE(DWaterProgress)
0 #ifndef DWIDGETSTYPE_H
1 #define DWIDGETSTYPE_H
2
3 #include <dtkwidget_global.h>
4
5 QT_BEGIN_NAMESPACE
6
7 class QScrollBar;
8 class QPushButton;
9 class QToolButton;
10 class QRadioButton;
11 class QDialogButtonBox;
12 class QListWidget;
13 class QTreeWidget;
14 class QTableWidget;
15 class QGroupBox;
16 class QScrollArea;
17 class QToolBox;
18 class QTableWidget;
19 class QStackedWidget;
20 class QWidget;
21 class QMDIArea;
22 class QDockWidget;
23 class QComboBox;
24 class QFontComboBox;
25 class QPlainTextEdit;
26 class QSpinBox;
27 class QDoubleSpinBox;
28 class QTimeEdit;
29 class QDateEdit;
30 class QDateTimeEdit;
31 class QDial;
32 class QHorizontalSlider;
33 class QVerticalSlider;
34 class QTextBrowser;
35 class QGraphicsView;
36 class QCalendarWidget;
37 class QLCDNumber;
38 class QHorizontalLine;
39 class QVerticalLine;
40 class QOpenGLWidget;
41 class QQuickWidget;
42 class QWebView;
43 class QAccessibleWidget;
44 class QCheckBox;
45 class QColorDialog;
46 class QColumnView;
47 class QDataWidgetMapper;
48 class QFocusFrame;
49 class QHeaderView;
50 class QInputDialog;
51 class QMdiArea;
52 class QMdiSubWindow;
53 class QErrorMessage;
54 class QFontDialog;
55 class QMenu;
56 class QMenuBar;
57 class QMessageBox;
58 class QRubberBand;
59 class QSlider;
60 class QSplitter;
61 class QStatusBar;
62 class QTabWidget;
63 class QTableView;
64 class QTileRules;
65 class QToolBar;
66 class QTreeView;
67 class QUndoView;
68 class QWhatsThis;
69 class QWizard;
70 class QWizardPage;
71
72 QT_END_NAMESPACE
73
74 DWIDGET_BEGIN_NAMESPACE
75
76 typedef QScrollBar DScrollBar;
77 typedef QPushButton DPushButton;
78 typedef QToolButton DToolButton;
79 typedef QRadioButton DRadioButton;
80 typedef QDialogButtonBox DDialogButtonBox;
81 typedef QListWidget DListWidget;
82 typedef QTreeWidget DTreeWidget;
83 typedef QTableWidget DTableWidget;
84 typedef QGroupBox DGroupBox;
85 typedef QScrollArea DScrollArea;
86 typedef QToolBox DToolBox;
87 typedef QTableWidget DTableWidget;
88 typedef QStackedWidget DStackedWidget;
89 typedef QWidget DWidget;
90 typedef QMDIArea DMDIArea;
91 typedef QDockWidget DDockWidget;
92 typedef QComboBox DComboBox;
93 typedef QFontComboBox DFontComboBox;
94 typedef QPlainTextEdit DPlainTextEdit;
95 typedef QTimeEdit DTimeEdit;
96 typedef QDateEdit DDateEdit;
97 typedef QDateTimeEdit DDateTimeEdit;
98 typedef QDial DDial;
99 typedef QHorizontalSlider DHorizontalSlider;
100 typedef QVerticalSlider DVerticalSlider;
101 typedef QTextBrowser DTextBrowser;
102 typedef QGraphicsView DGraphicsView;
103 typedef QCalendarWidget DCalendarWidget;
104 typedef QLCDNumber DLCDNumber;
105 typedef QOpenGLWidget DOpenGLWidget;
106 typedef QQuickWidget DQuickWidget;
107 typedef QWebView DWebView;
108 typedef QAccessibleWidget DAccessibleWidget;
109 typedef QCheckBox DCheckBox;
110 typedef QColorDialog DColorDialog;
111 typedef QColumnView DColumnView;
112 typedef QDataWidgetMapper DDataWidgetMapper;
113 typedef QFocusFrame DFocusFrame;
114 typedef QHeaderView DHeaderView;
115 typedef QInputDialog DInputDialog;
116 typedef QMdiArea DMdiArea;
117 typedef QMdiSubWindow DMdiSubWindow;
118 typedef QErrorMessage DErrorMessage;
119 typedef QFontDialog DFontDialog;
120 typedef QMenu DMenu;
121 typedef QMenuBar DMenuBar;
122 typedef QMessageBox DMessageBox;
123 typedef QRubberBand DRubberBand;
124 typedef QSplitter DSplitter;
125 typedef QStatusBar DStatusBar;
126 typedef QTabWidget DTabWidget;
127 typedef QTableView DTableView;
128 typedef QTileRules DTileRules;
129 typedef QToolBar DToolBar;
130 typedef QTreeView DTreeView;
131 typedef QUndoView DUndoView;
132 typedef QWhatsThis DWhatsThis;
133 typedef QWizard DWizard;
134 typedef QWizardPage DWizardPage;
135
136 DWIDGET_END_NAMESPACE
137
138 #endif // DWIDGETSTYPE_H
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1515 */
1616
17 #include "dthememanager.h"
18
1917 #include "dwindowclosebutton.h"
18 #include "dstyleoption.h"
2019
2120 DWIDGET_BEGIN_NAMESPACE
2221
3534 * \~chinese 函数,返回 DWindowCloseButton 对象,普通程序一般无需使用。
3635 * \~chinese \param parent 为创建对象的父控件。
3736 */
38 DWindowCloseButton::DWindowCloseButton(QWidget * parent) :
39 DImageButton(parent)
37 DWindowCloseButton::DWindowCloseButton(QWidget * parent)
38 : DIconButton(QStyle::SP_TitleBarCloseButton, parent)
4039 {
41 DThemeManager::registerWidget(this);
40 setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding);
41 setFlat(true);
42 }
4243
43 setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
44 QSize DWindowCloseButton::sizeHint() const
45 {
46 return iconSize();
47 }
48
49 void DWindowCloseButton::initStyleOption(DStyleOptionButton *option) const
50 {
51 DIconButton::initStyleOption(option);
52
53 option->features |= QStyleOptionButton::ButtonFeature(DStyleOptionButton::TitleBarButton);
4454 }
4555
4656 DWIDGET_END_NAMESPACE
1717 #ifndef DWINDOWCLOSEBUTTON_H
1818 #define DWINDOWCLOSEBUTTON_H
1919
20 #include "dimagebutton.h"
20 #include <DIconButton>
2121
2222 DWIDGET_BEGIN_NAMESPACE
2323
24 class LIBDTKWIDGETSHARED_EXPORT DWindowCloseButton : public DImageButton
24 class LIBDTKWIDGETSHARED_EXPORT DWindowCloseButton : public DIconButton
2525 {
2626 Q_OBJECT
2727 public:
2828 DWindowCloseButton(QWidget * parent = 0);
29
30 QSize sizeHint() const override;
31
32 protected:
33 void initStyleOption(DStyleOptionButton *option) const override;
2934 };
3035
3136 DWIDGET_END_NAMESPACE
+0
-255
src/widgets/dwindowgroupleader.cpp less more
0 /*
1 * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #include "dwindowgroupleader.h"
21
22 #include <QWidget>
23 #include <QWindow>
24 #include <QGuiApplication>
25 #include <QPointer>
26
27 DWIDGET_BEGIN_NAMESPACE
28
29 #define DEFINE_CONST_CHAR(Name) const char _##Name[] = "_d_" #Name
30
31 DEFINE_CONST_CHAR(groupLeader);
32 DEFINE_CONST_CHAR(createGroupWindow);
33 DEFINE_CONST_CHAR(destoryGroupWindow);
34 DEFINE_CONST_CHAR(setWindowGroup);
35 DEFINE_CONST_CHAR(clientLeader);
36
37 class DWindowGroupLeaderPrivate
38 {
39 public:
40 DWindowGroupLeaderPrivate(quint32 groupLeader)
41 : groupLeader(groupLeader) {
42 QFunctionPointer clientLeaderFun = qApp->platformFunction(_clientLeader);
43
44 if (clientLeaderFun) {
45 clientLeader = reinterpret_cast<quint32(*)()>(clientLeaderFun)();
46 }
47 }
48
49 quint32 groupLeader;
50 quint32 clientLeader = 0;
51 bool groupLeaderFromUser = false;
52
53 QList<QPointer<QWindow>> windowList;
54
55 void ensureGroupLeader();
56 bool setWindowGroupLeader(quint32 window, quint32 groupLeader);
57 };
58
59 void DWindowGroupLeaderPrivate::ensureGroupLeader()
60 {
61 if (groupLeader != 0)
62 return;
63
64 QFunctionPointer createGroupWindow = qApp->platformFunction(_createGroupWindow);
65
66 if (!createGroupWindow)
67 return;
68
69 groupLeader = reinterpret_cast<quint32(*)()>(createGroupWindow)();
70 }
71
72 bool DWindowGroupLeaderPrivate::setWindowGroupLeader(quint32 window, quint32 groupLeader)
73 {
74 QFunctionPointer setWindowGroup = qApp->platformFunction(_setWindowGroup);
75
76 if (!setWindowGroup) {
77 return false;
78 }
79
80 reinterpret_cast<void(*)(quint32, quint32)>(setWindowGroup)(window, groupLeader);
81
82 return true;
83 }
84
85 /*!
86 * \~chinese \class DWindowGroupLeader
87 *
88 * \~chinese \brief DWindowGroupLeader 用于设置窗口所在的组,可以把多个窗口加到同一个组。在dxcb平台上,所有未指定组的
89 * \~chinese 窗口都会被分配到 DWindowGroupLeader::clientLeaderId 这个组,且在窗口对应的本地窗口被创建时,会对
90 * \~chinese Qt::Dialog、Qt::Sheet、Qt::Tool、Qt::SplashScreen、Qt::ToolTip、Qt::Drawer、Qt::Popup
91 * \~chinese 类型的窗口设置 WM_TRANSIENT_FOR 属性,对于此类型的窗口,如果没有手动调用 QWindow::setTransientParent ,
92 * \~chinese 则会将其 WM_TRANSIENT_FOR 属性设置为所在组id,得到的效果就是:会保证此窗口显示到这个组所有其它窗口
93 * \~chinese 之上。例子:
94 * \~chinese \code
95 * DWindowGroupLeader leader;
96 * QWindow wa, wb;
97 * QWindow topWindow;
98 *
99 * leader.addWindow(&wa);
100 * leader.addWindow(&wb);
101 * leader.addWindow(&topWindow);
102 *
103 * wa.setTitle("窗口wa");
104 * wa.resize(300, 100);
105 * wa.show();
106 * wb.setTitle("窗口wb");
107 * wb.resize(300, 100);
108 * wb.show();
109 * topWindow.setTitle("窗口topWindow");
110 * topWindow.setFlag(Qt::Dialog);
111 * topWindow.resize(300, 300);
112 * topWindow.show();
113 * \endcode
114 * \~chinese 窗口topWindow一直处于窗口wa和wb上层
115 * \~chinese \image html wa_wb_topWindow.gif
116 * \~chinese 如果一个组内同时存在多个未设置过 QWindow::setTransientParent 的 Qt::Dialog(其它会自动设置 WM_TRANSIENT_FOR
117 * \~chinese 属性的窗口也成立)类型的窗口,这些窗口之间不会互相影响显示顺序,具体的规则和 X11 ICCCM 标准一致。
118 * \~chinese \sa https://tronche.com/gui/x/icccm/sec-4.html#WM_TRANSIENT_FOR
119 * \~chinese \sa DWindowGroupLeader::clientLeaderId
120 * \~chinese \sa DApplication::loadDXcbPlugin
121 */
122
123 /*!
124 * \~chinese \brief DWindowGroupLeader::DWindowGroupLeader
125 * \~chinese \param groupId 为0时会在需要时自动创建一个有效的 groupLeaderId
126 * \~chinese \sa DWindowGroupLeader::groupLeaderId
127 */
128 DWindowGroupLeader::DWindowGroupLeader(quint32 groupId)
129 : d_ptr(new DWindowGroupLeaderPrivate(groupId))
130 {
131 if (groupId != 0)
132 d_ptr->groupLeaderFromUser = true;
133 }
134
135 /*!
136 * \~chinese \brief DWindowGroupLeader::~DWindowGroupLeader
137 * \~chinese 对象销毁时会释放由自己自动创建的 groupLeaderId
138 * \~chinese \sa DWindowGroupLeader::groupLeaderId
139 */
140 DWindowGroupLeader::~DWindowGroupLeader()
141 {
142 Q_D(DWindowGroupLeader);
143
144 for (auto window : d->windowList)
145 removeWindow(window);
146
147 if (!d->groupLeaderFromUser) {
148 QFunctionPointer destoryGroupWindow = qApp->platformFunction(_destoryGroupWindow);
149
150 if (!destoryGroupWindow)
151 return;
152
153 reinterpret_cast<void(*)(quint32)>(destoryGroupWindow)(d->groupLeader);
154 }
155 }
156
157 /*!
158 * \~chinese \brief DWindowGroupLeader::groupLeaderId
159 * \~chinese \return 返回组的id,类似于 QWindow::winId
160 * \~chinese \warning 如果没有一个有效的id,则会先创建一个新的组id
161 */
162 quint32 DWindowGroupLeader::groupLeaderId() const
163 {
164 Q_D(const DWindowGroupLeader);
165
166 const_cast<DWindowGroupLeaderPrivate*>(d)->ensureGroupLeader();
167
168 return d->groupLeader;
169 }
170
171 /*!
172 * \~chinese \brief DWindowGroupLeader::clientLeaderId
173 * \~chinese \return 返回应用程序默认的组id
174 */
175 quint32 DWindowGroupLeader::clientLeaderId() const
176 {
177 Q_D(const DWindowGroupLeader);
178
179 return d->clientLeader;
180 }
181
182 /*!
183 * \~chinese \brief DWindowGroupLeader::addWindow
184 * \~chinese 将窗口添加到这个组
185 * \~chinese \param window
186 * \~chinese \warning 每个窗口只能有一个组,添加到新的组时,将不再受旧的组所带来的任何影响
187 */
188 void DWindowGroupLeader::addWindow(QWindow *window)
189 {
190 Q_ASSERT(window);
191 Q_D(DWindowGroupLeader);
192
193 d->ensureGroupLeader();
194
195 window->setProperty(_groupLeader, d->groupLeader);
196
197 if (window->handle()) {
198 d->setWindowGroupLeader(window->winId(), d->groupLeader);
199 }
200
201 d->windowList << window;
202 }
203
204 /*!
205 * \~chinese \brief DWindowGroupLeader::removeWindow
206 * \~chinese 将窗口从这个组中移除
207 * \~chinese \param window
208 * \~chinese \warning 窗口被移除后将不再受此组带来的任何影响
209 */
210 void DWindowGroupLeader::removeWindow(QWindow *window)
211 {
212 if (!window)
213 return;
214
215 window->setProperty(_groupLeader, QVariant());
216
217 Q_D(DWindowGroupLeader);
218
219 if (window->handle()) {
220 d->setWindowGroupLeader(window->winId(), d->clientLeader);
221 }
222 }
223
224 /*!
225 * \~chinese \brief DWindowGroupLeader::addWindow
226 * \~chinese 同 DWindowGroupLeader::addWindow(QWindow *),这只是针对不同类型窗口对象的重载函数,
227 * \~chinese 将 window->windowHandle() 作为参数传递给 DWindowGroupLeader::addWindow(QWindow *)
228 * \~chinese \param window
229 * \~chinese \warning 不要对非顶层窗口设置组,否则它会被设置 Qt::WA_NativeWindow 标志
230 */
231 void DWindowGroupLeader::addWindow(QWidget *window)
232 {
233 Q_ASSERT(window);
234 Q_ASSERT(window->isWindow());
235
236 if (!window->windowHandle()) {
237 window->setAttribute(Qt::WA_NativeWindow);
238 }
239
240 return addWindow(window->windowHandle());
241 }
242
243 /*!
244 * \~chinese \brief DWindowGroupLeader::removeWindow
245 * \~chinese 同 DWindowGroupLeader::removeWindow(QWindow *),这只是针对不同类型窗口对象的重载函数,
246 * \~chinese 等价于 removeWindow(window->windowHandle())
247 * \~chinese \param window
248 */
249 void DWindowGroupLeader::removeWindow(QWidget *window)
250 {
251 return removeWindow(window->windowHandle());
252 }
253
254 DWIDGET_END_NAMESPACE
+0
-55
src/widgets/dwindowgroupleader.h less more
0 /*
1 * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #ifndef DWINDOWGROUPLEADER_H
21 #define DWINDOWGROUPLEADER_H
22
23 #include <dtkwidget_global.h>
24
25 QT_BEGIN_NAMESPACE
26 class QWindow;
27 QT_END_NAMESPACE
28
29 DWIDGET_BEGIN_NAMESPACE
30
31 class DWindowGroupLeaderPrivate;
32 class DWindowGroupLeader
33 {
34 public:
35 explicit DWindowGroupLeader(quint32 groupId = 0);
36 ~DWindowGroupLeader();
37
38 quint32 groupLeaderId() const;
39 quint32 clientLeaderId() const;
40
41 void addWindow(QWindow *window);
42 void removeWindow(QWindow *window);
43 void addWindow(QWidget *window);
44 void removeWindow(QWidget *window);
45
46 private:
47 QScopedPointer<DWindowGroupLeaderPrivate> d_ptr;
48
49 Q_DECLARE_PRIVATE(DWindowGroupLeader)
50 };
51
52 DWIDGET_END_NAMESPACE
53
54 #endif // DWINDOWGROUPLEADER_H
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1515 */
1616
17 #include <DObjectPrivate>
18
19 #include "dthememanager.h"
2017 #include "dwindowmaxbutton.h"
21 #include "private/dimagebutton_p.h"
22 #include <QStyle>
18 #include "private/diconbutton_p.h"
19 #include "dstyleoption.h"
2320
2421 DWIDGET_BEGIN_NAMESPACE
2522
26 class DWindowMaxButtonPrivate : public DImageButtonPrivate{
23 class DWindowMaxButtonPrivate : public DIconButtonPrivate {
2724 public:
28 DWindowMaxButtonPrivate(DWindowMaxButton* qq):DImageButtonPrivate(qq) {
25 DWindowMaxButtonPrivate(DWindowMaxButton* qq)
26 : DIconButtonPrivate(qq)
27 {
2928 m_isMaximized = false;
3029 }
3130
5453 * \~chinese \param parent 为创建对象的父控件。
5554 */
5655 DWindowMaxButton::DWindowMaxButton(QWidget * parent) :
57 DImageButton(*new DWindowMaxButtonPrivate(this), parent)
56 DIconButton(*new DWindowMaxButtonPrivate(this), parent)
5857 {
59 DThemeManager::registerWidget(this, QStringList({"isMaximized"}));
60
61 setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
58 setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding);
59 setIcon(QStyle::SP_TitleBarMaxButton);
60 setFlat(true);
6261 }
6362
6463 /*!
8382 return d->m_isMaximized;
8483 }
8584
85 QSize DWindowMaxButton::sizeHint() const
86 {
87 return iconSize();
88 }
89
8690 void DWindowMaxButton::setMaximized(bool isMaximized)
8791 {
8892 D_D(DWindowMaxButton);
9195 return;
9296
9397 d->m_isMaximized = isMaximized;
98
99 if (isMaximized) {
100 setIcon(QStyle::SP_TitleBarNormalButton);
101 } else {
102 setIcon(QStyle::SP_TitleBarMaxButton);
103 }
104
94105 Q_EMIT maximizedChanged(isMaximized);
106 }
107
108 void DWindowMaxButton::initStyleOption(DStyleOptionButton *option) const
109 {
110 DIconButton::initStyleOption(option);
111
112 option->features |= QStyleOptionButton::ButtonFeature(DStyleOptionButton::TitleBarButton);
95113 }
96114
97115 DWIDGET_END_NAMESPACE
1717 #ifndef DWINDOWMAXBUTTON_H
1818 #define DWINDOWMAXBUTTON_H
1919
20 #include <dobject.h>
21
22 #include "dimagebutton.h"
20 #include <DIconButton>
2321
2422 DWIDGET_BEGIN_NAMESPACE
2523
2624 class DWindowMaxButtonPrivate;
2725
28 class LIBDTKWIDGETSHARED_EXPORT DWindowMaxButton : public DImageButton
26 class LIBDTKWIDGETSHARED_EXPORT DWindowMaxButton : public DIconButton
2927 {
3028 Q_OBJECT
3129 public:
3432 Q_PROPERTY(bool isMaximized READ isMaximized WRITE setMaximized NOTIFY maximizedChanged)
3533
3634 bool isMaximized() const;
35 QSize sizeHint() const override;
3736
3837 public Q_SLOTS:
3938 void setMaximized(bool isMaximized);
4039
4140 Q_SIGNALS:
4241 void maximizedChanged(bool isMaximized);
42
43 protected:
44 void initStyleOption(DStyleOptionButton *option) const override;
4345
4446 private:
4547 D_DECLARE_PRIVATE(DWindowMaxButton)
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1515 */
1616
17 #include "dthememanager.h"
17 #include "dwindowminbutton.h"
18 #include "dstyleoption.h"
1819
19 #include "dwindowminbutton.h"
20 #include <QEvent>
21 #include <QStyle>
2022
2123 DWIDGET_BEGIN_NAMESPACE
2224
3537 * \~chinese 函数,返回 DWindowMinButton 对象,普通程序一般无需使用。
3638 * \~chinese \param parent 为创建对象的父控件。
3739 */
38 DWindowMinButton::DWindowMinButton(QWidget * parent) :
39 DImageButton(parent)
40 DWindowMinButton::DWindowMinButton(QWidget * parent)
41 : DIconButton(QStyle::SP_TitleBarMinButton, parent)
4042 {
41 DThemeManager::registerWidget(this);
43 setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding);
44 setFlat(true);
45 }
4246
43 setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
47 QSize DWindowMinButton::sizeHint() const
48 {
49 return iconSize();
50 }
51
52 void DWindowMinButton::initStyleOption(DStyleOptionButton *option) const
53 {
54 DIconButton::initStyleOption(option);
55
56 option->features |= QStyleOptionButton::ButtonFeature(DStyleOptionButton::TitleBarButton);
4457 }
4558
4659 DWIDGET_END_NAMESPACE
1717 #ifndef DWINDOWMINBUTTON_H
1818 #define DWINDOWMINBUTTON_H
1919
20 #include "dimagebutton.h"
20 #include <DIconButton>
2121
2222 DWIDGET_BEGIN_NAMESPACE
2323
24 class LIBDTKWIDGETSHARED_EXPORT DWindowMinButton : public DImageButton
24 class LIBDTKWIDGETSHARED_EXPORT DWindowMinButton : public DIconButton
2525 {
2626 Q_OBJECT
27
2728 public:
2829 DWindowMinButton(QWidget * parent = 0);
30
31 QSize sizeHint() const override;
32
33 protected:
34 void initStyleOption(DStyleOptionButton *option) const override;
2935 };
3036
3137 DWIDGET_END_NAMESPACE
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1515 */
1616
17 #include "dthememanager.h"
18
1917 #include "dwindowoptionbutton.h"
18 #include "dstyleoption.h"
2019
2120 DWIDGET_BEGIN_NAMESPACE
2221
3635 * \~chinese 函数,返回 DWindowOptionButton 对象,普通程序一般无需使用。
3736 * \~chinese \param parent 为创建对象的父控件。
3837 */
39 DWindowOptionButton::DWindowOptionButton(QWidget * parent) :
40 DImageButton(parent)
38 DWindowOptionButton::DWindowOptionButton(QWidget * parent)
39 : DIconButton(QStyle::SP_TitleBarMenuButton, parent)
4140 {
42 DThemeManager::registerWidget(this);
41 setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding);
42 setFlat(true);
43 }
4344
44 setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
45 QSize DWindowOptionButton::sizeHint() const
46 {
47 return iconSize();
48 }
49
50 void DWindowOptionButton::initStyleOption(DStyleOptionButton *option) const
51 {
52 DIconButton::initStyleOption(option);
53
54 option->features |= QStyleOptionButton::ButtonFeature(DStyleOptionButton::TitleBarButton);
4555 }
4656
4757 DWIDGET_END_NAMESPACE
1717 #ifndef DWINDOWOPTIONBUTTON_H
1818 #define DWINDOWOPTIONBUTTON_H
1919
20 #include "dimagebutton.h"
20 #include <DIconButton>
2121
2222 DWIDGET_BEGIN_NAMESPACE
2323
24 class LIBDTKWIDGETSHARED_EXPORT DWindowOptionButton : public DImageButton
24 class LIBDTKWIDGETSHARED_EXPORT DWindowOptionButton : public DIconButton
2525 {
2626 Q_OBJECT
2727 public:
2828 DWindowOptionButton(QWidget * parent = 0);
29
30 QSize sizeHint() const override;
31
32 protected:
33 void initStyleOption(DStyleOptionButton *option) const override;
2934 };
3035
3136 DWIDGET_END_NAMESPACE
0 <svg xmlns="http://www.w3.org/2000/svg" width="383" height="115" viewBox="0 0 383 115">
1 <path fill="#0031A7" fill-rule="evenodd" d="M383,115 L383,14.1688789 C380.269872,14.0716143 377.092672,13.5814974 373.063461,12.4722672 C368.696509,11.2699114 362.241136,10.1727531 357.649256,10.1227411 C347.007291,10.0071963 342.744795,10.6014761 332.930121,12.0276784 C326.157898,13.0120512 317.51313,12.4953762 311.375303,10.33762 C305.58601,8.30230681 299.587109,8.09191178 293.164466,8.16675723 C284.09108,8.27264456 276.303198,11.8021073 267.219716,11.3406179 C260.695053,11.0091595 256.565913,8.56512814 248.546835,8.86450991 C241.871757,9.11387975 235.569934,13.1896798 228.881972,13.3297132 C219.538394,13.525622 215.498041,10.7384053 208.282229,8.42337018 C201.688974,6.30769299 190.725982,6.45048568 185.454442,8.65549452 C170.142255,15.0597811 162.05946,9.31703167 150.536236,5.36712375 C147.826999,4.43862637 144.672431,3.20971247 141.663406,2.90998579 C135.153716,2.26155522 129.812539,3.9788615 123.613779,5.46231888 C115.747555,7.3451819 106.643181,6.73503633 99.4869089,3.84572629 C96.4124243,2.60474055 93.6255416,0.951587506 90.1882469,0.261077932 C79.652131,-1.85528907 69.7970674,9.59778831 58.8051757,9.35186757 C49.4744806,9.14319709 42.6942497,2.4740197 33.3934986,1.93078665 C20.5224457,1.17888312 19.3845731,15.343297 0,13.8463882 L0,115 L383,115 Z"/>
2 </svg>
0 <svg xmlns="http://www.w3.org/2000/svg" width="383" height="115" viewBox="0 0 383 115">
1 <path fill="#0172FF" fill-rule="evenodd" d="M383,115 L383,14.1688789 C380.269872,14.0716143 377.092672,13.5814974 373.063461,12.4722672 C368.696509,11.2699114 362.241136,10.1727531 357.649256,10.1227411 C347.007291,10.0071963 342.744795,10.6014761 332.930121,12.0276784 C326.157898,13.0120512 317.51313,12.4953762 311.375303,10.33762 C305.58601,8.30230681 299.587109,8.09191178 293.164466,8.16675723 C284.09108,8.27264456 276.303198,11.8021073 267.219716,11.3406179 C260.695053,11.0091595 256.565913,8.56512814 248.546835,8.86450991 C241.871757,9.11387975 235.569934,13.1896798 228.881972,13.3297132 C219.538394,13.525622 215.498041,10.7384053 208.282229,8.42337018 C201.688974,6.30769299 190.725982,6.45048568 185.454442,8.65549452 C170.142255,15.0597811 162.05946,9.31703167 150.536236,5.36712375 C147.826999,4.43862637 144.672431,3.20971247 141.663406,2.90998579 C135.153716,2.26155522 129.812539,3.9788615 123.613779,5.46231888 C115.747555,7.3451819 106.643181,6.73503633 99.4869089,3.84572629 C96.4124243,2.60474055 93.6255416,0.951587506 90.1882469,0.261077932 C79.652131,-1.85528907 69.7970674,9.59778831 58.8051757,9.35186757 C49.4744806,9.14319709 42.6942497,2.4740197 33.3934986,1.93078665 C20.5224457,1.17888312 19.3845731,15.343297 0,13.8463882 L0,115 L383,115 Z"/>
2 </svg>
0 <svg xmlns="http://www.w3.org/2000/svg" width="4" height="20" viewBox="0 0 4 20">
1 <defs>
2 <linearGradient id="shadow_dark-a" x1="50%" x2="50%" y1="0%" y2="100%">
3 <stop offset="0%" stop-opacity=".1"/>
4 <stop offset="100%" stop-opacity="0"/>
5 </linearGradient>
6 </defs>
7 <rect width="4" height="20" fill="url(#shadow_dark-a)" fill-rule="evenodd"/>
8 </svg>
0 <RCC>
1 <qresource prefix="/icons/deepin/builtin">
2 <file>dark/texts/titlebar_shadow_20px.svg</file>
3 <file>light/texts/titlebar_shadow_20px.svg</file>
4 <file>dark/icons/water_front_383px.svg</file>
5 <file>dark/icons/water_back_383px.svg</file>
6 <file>light/icons/water_back_383px.svg</file>
7 <file>light/icons/water_front_383px.svg</file>
8 </qresource>
9 </RCC>
0 <svg xmlns="http://www.w3.org/2000/svg" width="383" height="115" viewBox="0 0 383 115">
1 <path fill="#007DFF" fill-rule="evenodd" d="M383,115 L383,14.1688789 C380.269872,14.0716143 377.092672,13.5814974 373.063461,12.4722672 C368.696509,11.2699114 362.241136,10.1727531 357.649256,10.1227411 C347.007291,10.0071963 342.744795,10.6014761 332.930121,12.0276784 C326.157898,13.0120512 317.51313,12.4953762 311.375303,10.33762 C305.58601,8.30230681 299.587109,8.09191178 293.164466,8.16675723 C284.09108,8.27264456 276.303198,11.8021073 267.219716,11.3406179 C260.695053,11.0091595 256.565913,8.56512814 248.546835,8.86450991 C241.871757,9.11387975 235.569934,13.1896798 228.881972,13.3297132 C219.538394,13.525622 215.498041,10.7384053 208.282229,8.42337018 C201.688974,6.30769299 190.725982,6.45048568 185.454442,8.65549452 C170.142255,15.0597811 162.05946,9.31703167 150.536236,5.36712375 C147.826999,4.43862637 144.672431,3.20971247 141.663406,2.90998579 C135.153716,2.26155522 129.812539,3.9788615 123.613779,5.46231888 C115.747555,7.3451819 106.643181,6.73503633 99.4869089,3.84572629 C96.4124243,2.60474055 93.6255416,0.951587506 90.1882469,0.261077932 C79.652131,-1.85528907 69.7970674,9.59778831 58.8051757,9.35186757 C49.4744806,9.14319709 42.6942497,2.4740197 33.3934986,1.93078665 C20.5224457,1.17888312 19.3845731,15.343297 0,13.8463882 L0,115 L383,115 Z"/>
2 </svg>
0 <svg xmlns="http://www.w3.org/2000/svg" width="383" height="115" viewBox="0 0 383 115">
1 <path fill="#01C4FF" fill-rule="evenodd" d="M383,115 L383,14.1688789 C380.269872,14.0716143 377.092672,13.5814974 373.063461,12.4722672 C368.696509,11.2699114 362.241136,10.1727531 357.649256,10.1227411 C347.007291,10.0071963 342.744795,10.6014761 332.930121,12.0276784 C326.157898,13.0120512 317.51313,12.4953762 311.375303,10.33762 C305.58601,8.30230681 299.587109,8.09191178 293.164466,8.16675723 C284.09108,8.27264456 276.303198,11.8021073 267.219716,11.3406179 C260.695053,11.0091595 256.565913,8.56512814 248.546835,8.86450991 C241.871757,9.11387975 235.569934,13.1896798 228.881972,13.3297132 C219.538394,13.525622 215.498041,10.7384053 208.282229,8.42337018 C201.688974,6.30769299 190.725982,6.45048568 185.454442,8.65549452 C170.142255,15.0597811 162.05946,9.31703167 150.536236,5.36712375 C147.826999,4.43862637 144.672431,3.20971247 141.663406,2.90998579 C135.153716,2.26155522 129.812539,3.9788615 123.613779,5.46231888 C115.747555,7.3451819 106.643181,6.73503633 99.4869089,3.84572629 C96.4124243,2.60474055 93.6255416,0.951587506 90.1882469,0.261077932 C79.652131,-1.85528907 69.7970674,9.59778831 58.8051757,9.35186757 C49.4744806,9.14319709 42.6942497,2.4740197 33.3934986,1.93078665 C20.5224457,1.17888312 19.3845731,15.343297 0,13.8463882 L0,115 L383,115 Z"/>
2 </svg>
0 <svg xmlns="http://www.w3.org/2000/svg" width="4" height="20" viewBox="0 0 4 20">
1 <defs>
2 <linearGradient id="shadow_light-a" x1="50%" x2="50%" y1="0%" y2="100%">
3 <stop offset="0%" stop-opacity=".03"/>
4 <stop offset="100%" stop-opacity="0"/>
5 </linearGradient>
6 </defs>
7 <rect width="4" height="20" x="945" y="3465" fill="url(#shadow_light-a)" fill-rule="evenodd" transform="translate(-945 -3465)"/>
8 </svg>
1414 <file>images/dialog_close_round_normal@2x.png</file>
1515 <file>images/dialog_close_round_normal.png</file>
1616 <file>images/dialog_close_round_press.png</file>
17 <file>images/play_pause.svg</file>
18 <file>images/play_start.svg</file>
19 <file>images/play_previous.svg</file>
20 <file>images/play_next.svg</file>
21 <file>images/water_back.svg</file>
22 <file>images/water_front.svg</file>
23 <file>images/uos.svg</file>
1724 </qresource>
1825 </RCC>
0 <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 48 48">
1 <path fill="#FFF" fill-rule="evenodd" d="M13,1.21455591 C13,0.112089413 13.7703795,-0.318305698 14.7206907,0.25188105 L14.7206907,0.25188105 L26.2793093,7.18705218 C27.2355257,7.76078205 27.2296205,8.6816943 26.2793093,9.25188105 L26.2793093,9.25188105 L14.7206907,16.1870522 C13.7644743,16.7607821 13,16.3262347 13,15.2243773 L13,15.2243773 L13,9.418 L1.72069073,16.1870522 C0.804316625,16.7368766 0.0640390751,16.3606965 0.00394020656,15.3586093 L8.1428837e-15,15.2243773 L1.01504972e-15,1.21455591 C4.54143342e-16,0.112089413 0.770379479,-0.318305698 1.72069073,0.25188105 L1.72069073,0.25188105 L13,7.02 Z" transform="translate(11 16)"/>
2 </svg>
0 <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 48 48">
1 <path fill="#FFF" fill-rule="evenodd" d="M4.99408095,0 C6.10191945,0 7,0.897026226 7,2.00494659 L7,21.9950534 C7,23.1023548 6.11344516,24 4.99408095,24 L2.00591905,24 C0.898080551,24 3.88578059e-16,23.1029738 3.88578059e-16,21.9950534 L3.88578059e-16,2.00494659 C3.88578059e-16,0.897645164 0.886554837,0 2.00591905,0 L4.99408095,0 Z M17.9940809,0 C19.1019194,0 20,0.897026226 20,2.00494659 L20,21.9950534 C20,23.1023548 19.1134452,24 17.9940809,24 L15.0059191,24 C13.8980806,24 13,23.1029738 13,21.9950534 L13,2.00494659 C13,0.897645164 13.8865548,0 15.0059191,0 L17.9940809,0 Z" transform="translate(14 12)"/>
2 </svg>
0 <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 48 48">
1 <path fill="#FFF" fill-rule="evenodd" d="M24,17.2145559 C24,16.1120894 24.7703795,15.6816943 25.7206907,16.2518811 L25.7206907,16.2518811 L37.2793093,23.1870522 C38.2355257,23.7607821 38.2296205,24.6816943 37.2793093,25.2518811 L37.2793093,25.2518811 L25.7206907,32.1870522 C24.7644743,32.7607821 24,32.3262347 24,31.2243773 L24,31.2243773 L24,25.418 L12.7206907,32.1870522 C11.8043166,32.7368766 11.0640391,32.3606965 11.0039402,31.3586093 L11,31.2243773 L11,17.2145559 C11,16.1120894 11.7703795,15.6816943 12.7206907,16.2518811 L12.7206907,16.2518811 L24,23.02 Z" transform="matrix(-1 0 0 1 48.994 0)"/>
2 </svg>
0 <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 48 48">
1 <path fill="#FFF" fill-rule="evenodd" d="M11.6768872,5.57982651 L20.9915151,19.9100233 C21.5934927,20.8361425 21.3307239,22.0749097 20.4046046,22.6768872 C20.0801841,22.8877606 19.7015597,23 19.3146279,23 L0.685372088,23 C-0.419197411,23 -1.31462791,22.1045695 -1.31462791,21 C-1.31462791,20.6130682 -1.20238848,20.2344438 -0.991515144,19.9100233 L8.32311277,5.57982651 C8.92509028,4.65370727 10.1638575,4.39093847 11.0899767,4.99291598 C11.3245031,5.14535817 11.524445,5.34530007 11.6768872,5.57982651 Z" transform="rotate(90 12.5 26.5)"/>
2 </svg>
0 <svg xmlns="http://www.w3.org/2000/svg" width="78" height="23" viewBox="0 0 78 23">
1 <defs>
2 <linearGradient id="关于-a" x1="0%" x2="100%" y1="45.653%" y2="54.347%">
3 <stop offset="0%" stop-color="#0071FF"/>
4 <stop offset="21.078%" stop-color="#00FBFF" stop-opacity=".755"/>
5 <stop offset="45.882%" stop-color="#006CFF" stop-opacity=".918"/>
6 <stop offset="71.851%" stop-color="#00FCA7"/>
7 <stop offset="100%" stop-color="#00A2FF"/>
8 </linearGradient>
9 </defs>
10 <path fill="url(#关于-a)" d="M21.5,0 C22.3284271,0 23,0.671572875 23,1.5 L23,1.5 L23,11.5 C23,17.8512746 17.8512746,23 11.5,23 C5.14872538,23 0,17.8512746 0,11.5 L0,11.5 L0,1.5 C0,0.671572875 0.671572875,0 1.5,0 C2.32842712,0 3,0.671572875 3,1.5 L3,1.5 L3,11.5 C3,16.1944204 6.80557963,20 11.5,20 C16.1944204,20 20,16.1944204 20,11.5 L20,11.5 L20,1.5 C20,0.671572875 20.6715729,0 21.5,0 Z M42,0 C47.2467051,0 51.5,4.25329488 51.5,9.5 L51.5,13.5 C51.5,18.7467051 47.2467051,23 42,23 L38,23 C32.7532949,23 28.5,18.7467051 28.5,13.5 L28.5,9.5 C28.5,4.25329488 32.7532949,0 38,0 L42,0 Z M75.5,0 C76.3284271,0 77,0.671572875 77,1.5 C77,2.32842712 76.3284271,3 75.5,3 L75.5,3 L62.5,3 C60.5670034,3 59,4.56700338 59,6.5 C59,8.43299662 60.5670034,10 62.5,10 L62.5,10 L71.5,10 C75.0898509,10 78,12.9101491 78,16.5 C78,20.0898509 75.0898509,23 71.5,23 L71.5,23 L58.5,23 C57.6715729,23 57,22.3284271 57,21.5 C57,20.6715729 57.6715729,20 58.5,20 L58.5,20 L71.5,20 C73.4329966,20 75,18.4329966 75,16.5 C75,14.5670034 73.4329966,13 71.5,13 L71.5,13 L62.5,13 C58.9101491,13 56,10.0898509 56,6.5 C56,2.91014913 58.9101491,0 62.5,0 L62.5,0 Z M42,3 L38,3 C34.4101491,3 31.5,5.91014913 31.5,9.5 L31.5,13.5 C31.5,17.0898509 34.4101491,20 38,20 L42,20 C45.5898509,20 48.5,17.0898509 48.5,13.5 L48.5,9.5 C48.5,5.91014913 45.5898509,3 42,3 Z"/>
11 </svg>
0 <svg xmlns="http://www.w3.org/2000/svg" width="383" height="115" viewBox="0 0 383 115">
1 <path fill="#007DFF" fill-rule="evenodd" d="M383,115 L383,14.1688789 C380.269872,14.0716143 377.092672,13.5814974 373.063461,12.4722672 C368.696509,11.2699114 362.241136,10.1727531 357.649256,10.1227411 C347.007291,10.0071963 342.744795,10.6014761 332.930121,12.0276784 C326.157898,13.0120512 317.51313,12.4953762 311.375303,10.33762 C305.58601,8.30230681 299.587109,8.09191178 293.164466,8.16675723 C284.09108,8.27264456 276.303198,11.8021073 267.219716,11.3406179 C260.695053,11.0091595 256.565913,8.56512814 248.546835,8.86450991 C241.871757,9.11387975 235.569934,13.1896798 228.881972,13.3297132 C219.538394,13.525622 215.498041,10.7384053 208.282229,8.42337018 C201.688974,6.30769299 190.725982,6.45048568 185.454442,8.65549452 C170.142255,15.0597811 162.05946,9.31703167 150.536236,5.36712375 C147.826999,4.43862637 144.672431,3.20971247 141.663406,2.90998579 C135.153716,2.26155522 129.812539,3.9788615 123.613779,5.46231888 C115.747555,7.3451819 106.643181,6.73503633 99.4869089,3.84572629 C96.4124243,2.60474055 93.6255416,0.951587506 90.1882469,0.261077932 C79.652131,-1.85528907 69.7970674,9.59778831 58.8051757,9.35186757 C49.4744806,9.14319709 42.6942497,2.4740197 33.3934986,1.93078665 C20.5224457,1.17888312 19.3845731,15.343297 0,13.8463882 L0,115 L383,115 Z"/>
2 </svg>
0 <svg xmlns="http://www.w3.org/2000/svg" width="383" height="115" viewBox="0 0 383 115">
1 <path fill="#01C4FF" fill-rule="evenodd" d="M383,115 L383,14.1688789 C380.269872,14.0716143 377.092672,13.5814974 373.063461,12.4722672 C368.696509,11.2699114 362.241136,10.1727531 357.649256,10.1227411 C347.007291,10.0071963 342.744795,10.6014761 332.930121,12.0276784 C326.157898,13.0120512 317.51313,12.4953762 311.375303,10.33762 C305.58601,8.30230681 299.587109,8.09191178 293.164466,8.16675723 C284.09108,8.27264456 276.303198,11.8021073 267.219716,11.3406179 C260.695053,11.0091595 256.565913,8.56512814 248.546835,8.86450991 C241.871757,9.11387975 235.569934,13.1896798 228.881972,13.3297132 C219.538394,13.525622 215.498041,10.7384053 208.282229,8.42337018 C201.688974,6.30769299 190.725982,6.45048568 185.454442,8.65549452 C170.142255,15.0597811 162.05946,9.31703167 150.536236,5.36712375 C147.826999,4.43862637 144.672431,3.20971247 141.663406,2.90998579 C135.153716,2.26155522 129.812539,3.9788615 123.613779,5.46231888 C115.747555,7.3451819 106.643181,6.73503633 99.4869089,3.84572629 C96.4124243,2.60474055 93.6255416,0.951587506 90.1882469,0.261077932 C79.652131,-1.85528907 69.7970674,9.59778831 58.8051757,9.35186757 C49.4744806,9.14319709 42.6942497,2.4740197 33.3934986,1.93078665 C20.5224457,1.17888312 19.3845731,15.343297 0,13.8463882 L0,115 L383,115 Z"/>
2 </svg>
2828 DAboutDialogPrivate(DAboutDialog *qq);
2929
3030 void init();
31 void initWebsiteInfo();
31 void loadDistributionInfo();
3232 void updateWebsiteLabel();
3333 void updateAcknowledgementLabel();
3434 void _q_onLinkActivated(const QString &link);
4646 QLabel *websiteLabel;
4747 QLabel *acknowledgementLabel;
4848
49 QString logoPath;
4950 QString websiteName;
5051 QString websiteLink;
5152 QString acknowledgementLink;
3737 QRect getParentGeometry() const;
3838
3939 private:
40 void init();
40 void init(bool blurIfPossible);
4141
4242 bool mouseMoved = false;
4343 /// 记录是否收到过鼠标移动事件.
4444 bool mousePressed = false;
4545
4646 QPoint dragPosition;
47 QColor backgroundColor;
48 QColor borderColor;
4947 DAbstractDialog::DisplayPosition displayPosition = DAbstractDialog::Center;
5048
51 QLabel* windowTitle = Q_NULLPTR;
5249 DPlatformWindowHandle *handle = Q_NULLPTR;
5350 DBlurEffectWidget *bgBlurWidget = Q_NULLPTR;
5451
0 /*
1 * Copyright (C) 2020 ~ 2021 Deepin Technology Co., Ltd.
2 *
3 * Author: ck <chenke@uniontech.com>
4 *
5 * Maintainer: ck <chenke@uniontech.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #ifndef DALERTCONTROL_P_H
22 #define DALERTCONTROL_P_H
23 #include "dalertcontrol.h"
24 #include <DObjectPrivate>
25 #include <QPointer>
26
27 DWIDGET_BEGIN_NAMESPACE
28
29 class DAlertControlPrivate : public DTK_CORE_NAMESPACE::DObjectPrivate
30 {
31 Q_DECLARE_PUBLIC(DAlertControl)
32 public:
33 DAlertControlPrivate(DAlertControl *q);
34
35 void updateTooltipPos();
36
37 private:
38 bool isAlert = false;
39 QPointer<DToolTip> tooltip;
40 QPointer<DFloatingWidget> frame;
41 QWidget *follower{nullptr};
42 QWidget *target{nullptr};
43 QColor alertColor;
44 Qt::Alignment alignment{Qt::AlignLeft};
45 };
46
47 DWIDGET_END_NAMESPACE
48
49 #endif // DALERTCONTROL_P_H
4040 explicit DApplicationPrivate(DApplication *q);
4141 ~DApplicationPrivate();
4242
43 QString theme() const;
44 void setTheme(const QString &theme);
43 D_DECL_DEPRECATED QString theme() const;
44 D_DECL_DEPRECATED void setTheme(const QString &theme);
4545
4646 bool setSingleInstanceBySemaphore(const QString &key);
4747 #ifdef Q_OS_UNIX
5050
5151 bool loadDtkTranslator(QList<QLocale> localeFallback);
5252 bool loadTranslator(QList<DPathBuf> translateDirs, const QString &name, QList<QLocale> localeFallback);
53
54 // 根据调色板中的窗口背景色重设程序的主题颜色“亮”/“暗”类型
55 void resetApplicationThemeType();
56 // 根据窗口自身的背景色重设其主题颜色的“亮”/“暗”类型
57 void resetWindowThemeType(QWidget *window);
53 void _q_onNewInstanceStarted();
5854
5955 static bool isUserManualExists();
6056 public:
7571 bool visibleMenuShortcutText = false;
7672 bool visibleMenuCheckboxWidget = false;
7773 bool visibleMenuIcon = false;
74 bool autoActivateWindows = false;
7875
7976 DAboutDialog *aboutDialog = Q_NULLPTR;
8077 };
1919
2020 #include "darrowrectangle.h"
2121
22 #include <DWindowManagerHelper>
2223 #include <DObjectPrivate>
2324
2425 #include <QPointer>
2526
26 #include "util/dwindowmanagerhelper.h"
27
27 DGUI_USE_NAMESPACE
2828 DWIDGET_BEGIN_NAMESPACE
2929
3030 class DArrowRectanglePrivate : public DTK_CORE_NAMESPACE::DObjectPrivate
7171 int m_shadowWidth = 5; //Abandoned
7272 int m_borderWidth = 1;
7373 QColor m_borderColor = QColor(0, 0, 0, 255 * 0.1);
74 QColor m_backgroundColor = QColor(255, 255, 255, 255);
74 QColor m_backgroundColor;
7575
7676 DArrowRectangle::ArrowDirection m_arrowDirection;
7777 QPoint m_lastPos = QPoint(0, 0);
2929
3030 DBlurEffectWidget::BlurMode mode = DBlurEffectWidget::GaussianBlur;
3131 QImage sourceImage;
32 bool customSourceImage = false;
33 bool autoScaleSourceImage = false;
3234 DBlurEffectWidget::BlendMode blendMode = DBlurEffectWidget::InWindowBlend;
3335
34 int radius = 10;
36 int radius = 35;
3537 int blurRectXRadius = 0;
3638 int blurRectYRadius = 0;
37 quint8 maskAlpha = 102;
39 qint16 maskAlpha = -1;
3840
3941 bool full = false;
4042 bool blurEnabled = true;
4143
4244 QColor maskColor = Qt::transparent;
43 DBlurEffectWidget::MaskColorType maskColorType = DBlurEffectWidget::CustomColor;
45 DBlurEffectWidget::MaskColorType maskColorType = DBlurEffectWidget::AutoColor;
4446 QPainterPath maskPath;
47
48 // group
49 DBlurEffectGroup *group = nullptr;
4550
4651 bool isBehindWindowBlendMode() const;
4752 bool isFull() const;
5257 bool updateWindowBlurArea();
5358 void setMaskColor(const QColor &color);
5459 void setMaskAlpha(const quint8 alpha);
60 quint8 getMaskColorAlpha() const;
61 QColor getMaskColor(const QColor &baseColor) const;
62
63 void resetSourceImage();
5564
5665 static QMultiHash<QWidget*, const DBlurEffectWidget*> blurEffectWidgetHash;
5766 static QHash<const DBlurEffectWidget*, QWidget*> windowOfBlurEffectHash;
+0
-78
src/widgets/private/dborderlesswidget_p.h less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #ifndef DWDIGET_P_H
18 #define DWDIGET_P_H
19
20 #include <DObjectPrivate>
21 #include "dborderlesswidget.h"
22 #include "../../platforms/x11/xutil.h"
23
24 class QVBoxLayout;
25
26 class QGraphicsDropShadowEffect;
27
28 class DX11Widget;
29
30 DWIDGET_BEGIN_NAMESPACE
31
32 class DBorderlessWidgetPrivate: public DTK_CORE_NAMESPACE::DObjectPrivate
33 {
34 D_DECLARE_PUBLIC(DBorderlessWidget)
35 public:
36 explicit DBorderlessWidgetPrivate(DBorderlessWidget *q);
37
38 void init();
39
40 QSize externSize(const QSize &size) const;
41 QMargins externMargins() const;
42 int externWidth() const;
43 void updateContentsMargins();
44
45 void _q_onTitleBarMousePressed(Qt::MouseButtons buttons) const;
46
47 bool leftPressed;
48 bool resizable;
49
50 int m_ShadowWidth;
51 int m_NormalShadowWidth;
52 int m_Radius;
53 int m_Border;
54 int m_ResizeHandleWidth;
55 bool m_MousePressed;
56 QPoint m_LastMousePos;
57 Qt::WindowFlags dwindowFlags;
58 DBorderlessWidget::DecorationFlags decorationFlags;
59 QColor m_backgroundColor;
60 QColor shadowColor;
61 QPoint shadowOffset;
62
63 QPixmap m_Background;
64 QPixmap shadowPixmap;
65 QWidget *windowWidget = nullptr;
66 QVBoxLayout *rootLayout = nullptr;
67 DTitlebar *titlebar = nullptr;
68 QWidget *contentWidget = nullptr;
69
70 XUtils::CornerEdge resizingCornerEdge = XUtils::CornerEdge::kInvalid;
71 };
72
73
74
75 DWIDGET_END_NAMESPACE
76
77 #endif // DWDIGET_P_H
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #ifndef DBUTTONBOX_P_H
21 #define DBUTTONBOX_P_H
22
23 #include "dbuttonbox.h"
24 #include "dstyleoption.h"
25
26 #include <DObjectPrivate>
27
28 QT_BEGIN_NAMESPACE
29 class QBoxLayout;
30 QT_END_NAMESPACE
31
32 DWIDGET_BEGIN_NAMESPACE
33
34 class DButtonBoxPrivate : public DCORE_NAMESPACE::DObjectPrivate
35 {
36 public:
37 DButtonBoxPrivate(DButtonBox *qq);
38 void init();
39 DStyleOptionButtonBoxButton::ButtonPosition getButtonPosition(const DButtonBoxButton *button) const;
40
41 QButtonGroup *group;
42 QBoxLayout *layout;
43
44 D_DECLARE_PUBLIC(DButtonBox)
45 };
46
47 DWIDGET_END_NAMESPACE
48
49 #endif // DBUTTONBOX_P_H
1919
2020 #include <QPointer>
2121 #include <QPushButton>
22 #include <QSpacerItem>
2223 #include "ddialog.h"
2324 #include "dabstractdialogprivate_p.h"
2425
2829
2930 DWIDGET_BEGIN_NAMESPACE
3031
31 class DImageButton;
32 class DIconButton;
33 class DTitlebar;
3234 class DVBoxWidget;
3335 class DHBoxWidget;
34
35 class DialogButton : public QPushButton {
36 Q_OBJECT
37 Q_PROPERTY(int buttonType READ buttonType WRITE setButtonType NOTIFY buttonTypeChanged)
38
39 public:
40 explicit DialogButton(const QString &text, QWidget *parent = 0);
41 int buttonType() const;
42
43 public Q_SLOTS:
44 void setButtonType(int buttonType);
45
46 Q_SIGNALS:
47 void buttonTypeChanged(int buttonType);
48
49 private:
50 int m_buttonType;
51 };
5236
5337 class DDialogPrivate : public DAbstractDialogPrivate
5438 {
6448 QString message;
6549 Qt::TextFormat textFormat;
6650
67 QLabel* iconLabel;
6851 QLabel* messageLabel;
6952 QLabel* titleLabel;
7053
71 DImageButton* closeButton = Q_NULLPTR;
54 DTitlebar *titleBar = nullptr;
7255 QHBoxLayout *iconLayout;
7356 QVBoxLayout *contentLayout;
7457 QHBoxLayout *buttonLayout;
75 QHBoxLayout *topLayout;
7658 const QScreen *targetScreen = nullptr;
59 QSpacerItem *spacer = nullptr;
7760
7861 QList<QAbstractButton*> buttonList;
7962 QList<QWidget*> contentList;
8265
8366 int clickedButtonIndex;
8467
85 QStyle *fixedStyle;
86
8768 void init();
8869 const QScreen *getScreen() const;
8970 QString trimTag(QString origin) const;
9172 QString elideString(QString str, const QFontMetrics &fm, int width) const;
9273
9374 void updateSize();
75 void setSpacer(int height);
9476
9577 void _q_onButtonClicked();
9678 void _q_defaultButtonTriggered();
0 /*
1 * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #ifndef DDRAWER_P_H
21 #define DDRAWER_P_H
22
23 #include "ddrawer.h"
24 #include "dframe_p.h"
25
26 QT_BEGIN_NAMESPACE
27 class QBoxLayout;
28 class QVBoxLayout;
29 class QPropertyAnimation;
30 QT_END_NAMESPACE
31
32 DWIDGET_BEGIN_NAMESPACE
33
34 class DBoxWidget;
35 class ContentBox;
36 class DDrawerPrivate : public DFramePrivate
37 {
38 public:
39 DDrawerPrivate(DDrawer* qq);
40 ~DDrawerPrivate();
41
42 void init();
43
44 QWidget *m_header = nullptr;
45 QWidget *m_content = nullptr;
46 DBoxWidget *m_boxWidget = nullptr;
47 QVBoxLayout *m_headerLayout = nullptr;
48 QBoxLayout *m_contentLayout = nullptr;
49 ContentBox *m_contentLoader = nullptr;
50 DHorizontalLine * m_hSeparator = nullptr;
51 DHorizontalLine *m_bottom_separator = nullptr;
52 QPropertyAnimation *m_animation = nullptr;
53 bool m_expand = false;
54 bool m_reservedPadding[7];
55
56 D_DECLARE_PUBLIC(DDrawer)
57 };
58
59 DWIDGET_END_NAMESPACE
60
61 #endif // DDRAWER_P_H
3535 public:
3636 void _q_showFileChooserDialog();
3737
38 DFileChooserEdit::DialogDisplayPosition dialogDisplayPosition = DFileChooserEdit::FollowParentWindow;
39 QFileDialog::FileMode fileMode = QFileDialog::ExistingFile;
40 QStringList nameFilters;
38 DFileChooserEdit::DialogDisplayPosition dialogDisplayPosition;
39
40 QFileDialog *dialog;
4141 };
4242
4343 DWIDGET_END_NAMESPACE
0 #ifndef DFLOATINGMESSAGE_P_H
1 #define DFLOATINGMESSAGE_P_H
2
3 #include "dfloatingmessage.h"
4 #include "dfloatingwidget_p.h"
5
6 QT_BEGIN_NAMESPACE
7 class QTimer;
8 class QWidget;
9 class QHBoxLayout;
10 class DIconButton;
11 class QLabel;
12 class MessageLabel;
13 QT_END_NAMESPACE
14
15 DWIDGET_BEGIN_NAMESPACE
16
17 class DFloatingMessagePrivate : public DFloatingWidgetPrivate
18 {
19 public:
20 explicit DFloatingMessagePrivate(DFloatingMessage *qq);
21 ~DFloatingMessagePrivate();
22
23 void init();
24
25 QTimer *timer = nullptr;
26 QWidget *widget = nullptr;
27 QHBoxLayout *hBoxLayout = nullptr;
28 DIconButton *iconButton = nullptr;
29 MessageLabel *labMessage = nullptr;
30 QWidget *content = nullptr;
31 DIconButton *closeButton = nullptr;
32 DFloatingMessage::MessageType notifyType;
33
34 D_DECLARE_PUBLIC(DFloatingMessage)
35 };
36
37 DWIDGET_END_NAMESPACE
38
39 #endif // DFLOATINGMESSAGE_P_H
0 #ifndef DFLOATINGWIDGET_P_H
1 #define DFLOATINGWIDGET_P_H
2
3 #include "dfloatingwidget.h"
4
5 #include <DObjectPrivate>
6
7 QT_BEGIN_NAMESPACE
8 class QHBoxLayout;
9 QT_END_NAMESPACE
10
11 DWIDGET_BEGIN_NAMESPACE
12
13 class DFloatingWidgetPrivate : public DTK_CORE_NAMESPACE::DObjectPrivate
14 {
15 public:
16 explicit DFloatingWidgetPrivate(DFloatingWidget *qq);
17 ~DFloatingWidgetPrivate();
18
19 void init();
20 void adjustPalette();
21
22 QHBoxLayout *layout = nullptr;
23 DBlurEffectWidget *background = nullptr;
24 int framRadius {-1};
25
26 D_DECLARE_PUBLIC(DFloatingWidget)
27 };
28
29 DWIDGET_END_NAMESPACE
30
31 #endif // DFLOATINGWIDGET_P_H
0 /*
1 * Copyright (C) 2011 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: sunkang <sunkang_cm@deepin.com>
4 *
5 * Maintainer: sunkang <sunkang_cm@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #ifndef DFRAME_P_H
22 #define DFRAME_P_H
23
24 #include <DStyle>
25 #include <DFrame>
26
27 #include <DObjectPrivate>
28
29 DWIDGET_BEGIN_NAMESPACE
30
31
32 class DFramePrivate : public DCORE_NAMESPACE::DObjectPrivate
33 {
34 public:
35 DFramePrivate(DFrame *qq);
36 bool frameRounded;
37 DPalette::ColorType backType;
38
39 D_DECLARE_PUBLIC(DFrame)
40 };
41
42 DWIDGET_END_NAMESPACE
43
44 #endif // DFRAME_P_H
0 /*
1 * Copyright (C) 2017 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: zccrs <zccrs@live.com>
4 *
5 * Maintainer: zccrs <zhangjide@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #ifndef DICONBUTTON_P_H
21 #define DICONBUTTON_P_H
22
23 #include "dobject_p.h"
24 #include "diconbutton.h"
25
26 DWIDGET_BEGIN_NAMESPACE
27
28 class DIconButtonPrivate : public DCORE_NAMESPACE::DObjectPrivate
29 {
30 public:
31 DIconButtonPrivate(DIconButton *qq);
32
33 bool flat = false;
34 qint64 iconType = -1;
35
36 D_DECLARE_PUBLIC(DIconButton)
37 };
38
39 DWIDGET_END_NAMESPACE
40
41 #endif // DICONBUTTON_P_H
1919
2020 #include "dlineedit_p.h"
2121 #include "dipv4lineedit.h"
22 #include "dimagebutton.h"
2223
2324 DWIDGET_BEGIN_NAMESPACE
2425
25 class DIpv4LineEditPrivate : public DLineEditPrivate
26 class DIpv4LineEditPrivate : public DTK_CORE_NAMESPACE::DObjectPrivate
2627 {
28 Q_DECLARE_PUBLIC(DIpv4LineEdit)
29
30 public:
2731 DIpv4LineEditPrivate(DIpv4LineEdit *parent);
2832
2933 void init();
4044 QWidget *editMainWidget;
4145
4246 bool focus = false;
43
44 D_DECLARE_PUBLIC(DIpv4LineEdit)
4547 };
4648
4749 DWIDGET_END_NAMESPACE
0 #ifndef DKEYSEQUENCEEDIT_P_H
1 #define DKEYSEQUENCEEDIT_P_H
2
3 #include "dkeysequenceedit.h"
4
5 #include <DObjectPrivate>
6
7 DWIDGET_BEGIN_NAMESPACE
8
9 class DKeyWidget;
10 class DKeySequenceEditPrivate : public DTK_CORE_NAMESPACE::DObjectPrivate
11 {
12 Q_DECLARE_PUBLIC(DKeySequenceEdit)
13 public:
14 DKeySequenceEditPrivate(DKeySequenceEdit *q);
15
16 void init();
17 QString replaceWriting(QString writing);
18 private:
19 DKeyWidget *rightWidget;
20 QKeySequence sequencekey;
21 QMap<QString , QString> copywritingList;
22 };
23
24 DWIDGET_END_NAMESPACE
25
26 #endif // DKEYSEQUENCEEDIT_P_H
0 /*
1 * Copyright (C) 2011 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: wp <wangpeng_cm@deepin.com>
4 *
5 * Maintainer: wp <wangpeng_cm@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #ifndef DLABEL_P_H
22 #define DLABEL_P_H
23
24 #include "dlabel.h"
25 #include "dstyle.h"
26
27 #include <DObjectPrivate>
28
29 DWIDGET_BEGIN_NAMESPACE
30
31 class DLabelPrivate : public DTK_CORE_NAMESPACE::DObjectPrivate
32 {
33 Q_DECLARE_PUBLIC(DLabel)
34
35 public:
36 DLabelPrivate(DLabel *q);
37
38 void init();
39 static Qt::LayoutDirection textDirection(QLabelPrivate *d);
40 static QRectF documentRect(QLabelPrivate *d);
41 static QRectF layoutRect(QLabelPrivate *d);
42 static void ensureTextLayouted(QLabelPrivate *d);
43
44 DPalette::ColorType color = DPalette::NoType;
45 Qt::TextElideMode elideMode = Qt::ElideNone;
46 };
47
48 DWIDGET_END_NAMESPACE
49
50 #endif // DLABEL_P_H
1818 #define DLINEEDIT_P_H
1919
2020 #include "dlineedit.h"
21 #include "dimagebutton.h"
21 #include "dalertcontrol.h"
2222
2323 #include <DObjectPrivate>
24
25 #include <QHBoxLayout>
26
27 QT_BEGIN_NAMESPACE
28 class QWidgetAction;
29 QT_END_NAMESPACE
24 #include <QPointer>
25 #include <DFloatingWidget>
3026
3127 DWIDGET_BEGIN_NAMESPACE
3228
33 class DArrowRectangle;
29 class DToolTip;
3430 class DLineEditPrivate : public DTK_CORE_NAMESPACE::DObjectPrivate
3531 {
3632 Q_DECLARE_PUBLIC(DLineEdit)
3733
3834 public:
3935 DLineEditPrivate(DLineEdit *q);
36 void updateTooltipPos();
4037
4138 void init();
4239
43 public:
44 bool m_isAlert = false;
40 DAlertControl *control{nullptr};
4541
46 DImageButton *m_rightIcon;
47 QWidgetAction *m_iconAction;
48 DArrowRectangle *tooltip = Q_NULLPTR;
42 QWidget *leftWidget;
43 QWidget *rightWidget;
44
45 QLineEdit *lineEdit;
46 QHBoxLayout *hLayout;
47
48 bool bSpeechToText = true;
4949 };
5050
5151 DWIDGET_END_NAMESPACE
+0
-57
src/widgets/private/dlistwidget_p.h less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #ifndef DLISTWIDGET_P_H
18 #define DLISTWIDGET_P_H
19
20 #include "dscrollarea_p.h"
21 #include "dlistwidget.h"
22 #include "dboxwidget.h"
23
24 class QVBoxLayout;
25
26 DWIDGET_BEGIN_NAMESPACE
27
28 class DListWidgetPrivate : public DScrollAreaPrivate
29 {
30 protected:
31 DListWidgetPrivate(DListWidget *qq);
32 ~DListWidgetPrivate();
33
34 private:
35 void init();
36
37 int itemWidth;
38 int itemHeight;
39 QList<QWidget*> widgetList;
40 QList<int> checkedList;
41 DListWidget::CheckMode checkMode;
42 DBoxWidget *mainWidget;
43 int visibleCount;
44 QMap<const QWidget*, bool> mapVisible;
45 bool checkable;
46 bool toggleable;
47 bool enableHorizontalScroll;
48 bool enableVerticalScroll;
49
50 D_DECLARE_PUBLIC(DListWidget)
51 };
52
53 DWIDGET_END_NAMESPACE
54
55 #endif // DLISTWIDGET_P_H
56
1717 #ifndef DMAINWINDOW_P_H
1818 #define DMAINWINDOW_P_H
1919
20 #include <DObjectPrivate>
2120 #include "dtkwidget_global.h"
2221 #include "dmainwindow.h"
22 #include "dshadowline.h"
23
24 #include <DObjectPrivate>
2325
2426 class QShortcut;
2527
3335 DMainWindowPrivate(DMainWindow *qq);
3436
3537 void init();
38 void updateTitleShadowGeometry();
3639
3740 DPlatformWindowHandle *handle = Q_NULLPTR;
3841 DTitlebar *titlebar = Q_NULLPTR;
42 DShadowLine *titleShadow = nullptr;
3943 QShortcut *help = Q_NULLPTR;
4044
4145 private:
1818 #define DMPRISCONTROL_P_H
1919
2020 #include <DObjectPrivate>
21 #include <DFloatingButton>
2122
2223 #include "dimagebutton.h"
2324 #include "dmpriscontrol.h"
6162 DTickEffect *m_tickEffect;
6263
6364 QWidget * m_controlWidget;
64 DImageButton *m_prevBtn;
65 DImageButton *m_playBtn;
66 DImageButton *m_pauseBtn;
67 DImageButton *m_nextBtn;
65 DFloatingButton *m_prevBtn;
66 DFloatingButton *m_playBtn;
67 DFloatingButton *m_pauseBtn;
68 DFloatingButton *m_nextBtn;
6869
6970 bool m_pictureVisible;
7071
+0
-72
src/widgets/private/doption_p.h less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #ifndef DOPTION_P_H
18 #define DOPTION_P_H
19
20 #include "doption.h"
21
22 #include <DObjectPrivate>
23
24 #include <QLabel>
25 #include <QHBoxLayout>
26 #include <QListWidgetItem>
27
28 DWIDGET_BEGIN_NAMESPACE
29
30 class DOptionPrivate : public DTK_CORE_NAMESPACE::DObjectPrivate
31 {
32 D_DECLARE_PUBLIC(DOption)
33
34 public:
35 DOptionPrivate(DOption *q);
36
37 void init();
38
39 void setIcon(const QString& iconName);
40 void setIcon(const QPixmap& icon);
41
42 const QString name() const;
43 const QString value() const;
44
45 bool checked() const;
46 void setChecked(bool checked);
47
48 const QString checkedIcon() const;
49 void setCheckedIcon(const QString &icon);
50
51 void sizeChanged(QResizeEvent *e);
52
53 public Q_SLOTS:
54 void _q_itemStateChanged(QListWidgetItem* item);
55
56 public:
57 bool m_checked = false;
58 QString m_optionValue;
59 QString m_checkedIconName;
60
61 QLabel *m_checkedIconLabel;
62 QLabel *m_optionIcon;
63 QLabel *m_optionName;
64
65 QHBoxLayout *m_layout;
66 };
67
68 DWIDGET_END_NAMESPACE
69
70 #endif // DOPTION_P_H
71
+0
-53
src/widgets/private/doptionlist_p.h less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #ifndef DOPTIONLIST_P_H
18 #define DOPTIONLIST_P_H
19
20 #include "doptionlist.h"
21 #include "doption.h"
22
23 #include <DObjectPrivate>
24
25 #include <QList>
26 #include <QListWidgetItem>
27
28 DWIDGET_BEGIN_NAMESPACE
29
30 class DOptionListPrivate : public DTK_CORE_NAMESPACE::DObjectPrivate
31 {
32 D_DECLARE_PUBLIC(DOptionList)
33
34 public:
35 DOptionListPrivate(DOptionList *q);
36
37 void init();
38 void addOption(DOption *option);
39 void insertOption(int pos, DOption *option);
40 void setCurrentSelected(int pos);
41 void setCurrentSelected(const QString &value);
42
43 public Q_SLOTS:
44 void _q_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
45
46 protected:
47 QMap<QListWidgetItem *, DOption *> m_optionList;
48 };
49
50 DWIDGET_END_NAMESPACE
51
52 #endif // DOPTIONLIST_P_H
+0
-77
src/widgets/private/dpasswdeditanimated_p.h less more
0 #ifndef DPASSWDEDITANIMATED_P_H
1 #define DPASSWDEDITANIMATED_P_H
2
3 #include "dpasswdeditanimated.h"
4 #include "dimagebutton.h"
5 #include "dlabel.h"
6 #include "darrowrectangle.h"
7 #include "dkeyboardmonitor.h"
8
9 #include <DObjectPrivate>
10 #include <QLineEdit>
11
12 DWIDGET_BEGIN_NAMESPACE
13
14 class LoadSlider : public QWidget
15 {
16 public:
17 LoadSlider(QWidget *parent = 0);
18
19 public:
20 QColor loadSliderColor() const;
21 void setLoadSliderColor(const QColor &color);
22
23 protected:
24 void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
25
26 private:
27 QColor m_loadSliderColor;
28 };
29
30 class DPasswdEditAnimatedPrivate : public DTK_CORE_NAMESPACE::DObjectPrivate
31 {
32 D_DECLARE_PUBLIC(DPasswdEditAnimated)
33
34 public:
35 DPasswdEditAnimatedPrivate(DPasswdEditAnimated *q);
36
37 void init();
38
39 public Q_SLOTS:
40 void _q_resetCapslockState();
41 void _q_onEyeButtonClicked();
42 void _q_showLoadSlider();
43 void _q_hideLoadSlider();
44 void _q_inputDone();
45 void _q_onKeyboardButtonClicked();
46
47 public:
48 DImageButton *m_keyboard;
49 DImageButton *m_eye;
50 DImageButton *m_submit;
51
52 DLabel *m_caps;
53 DLabel *m_invalidMessage;
54
55 DArrowRectangle *m_invalidTip;
56 QLineEdit *m_passwdEdit;
57
58 LoadSlider *m_loadSlider;
59 QPropertyAnimation *m_loadSliderAnim;
60
61 // to get capslock state
62 DKeyboardMonitor *m_kbdMonitor;
63
64 bool m_capsEnable;
65 bool m_eyeEnable;
66 bool m_submitEnable;
67 bool m_loadAnimEnable;
68 bool m_isLoading;
69 bool m_alterBeforeHide;
70
71 const int LoadSliderWidth = 40;
72 };
73
74 DWIDGET_END_NAMESPACE
75
76 #endif // DPASSWDEDITANIMATED_P_H
2222
2323 DWIDGET_BEGIN_NAMESPACE
2424
25 class DSuggestButton;
2526 class DPasswordEditPrivate : DLineEditPrivate
2627 {
2728 public:
3334
3435 protected:
3536 Q_DECLARE_PUBLIC(DPasswordEdit)
37
38 private:
39 DSuggestButton * togglePasswordVisibleButton;
3640 };
3741
3842 DWIDGET_END_NAMESPACE
+0
-44
src/widgets/private/dpushbutton_p.h less more
0 /*
1 * Copyright (C) 2017 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #ifndef DPUSHBUTTON_P_H
18 #define DPUSHBUTTON_P_H
19
20 #include "dpushbutton.h"
21 #include <DObjectPrivate>
22
23 DWIDGET_BEGIN_NAMESPACE
24
25 class DPushButtonPrivate : public DTK_CORE_NAMESPACE::DObjectPrivate
26 {
27 public:
28 DPushButtonPrivate(DPushButton *qq);
29
30 QIcon normalIcon;
31 QIcon hoverIcon;
32 QIcon pressIcon;
33
34 QString normalIconPath;
35 QString hoverIconPath;
36 QString pressIconPath;
37
38 D_DECLARE_PUBLIC(DPushButton)
39 };
40
41 DWIDGET_END_NAMESPACE
42
43 #endif // DPUSHBUTTON_P_H
+0
-50
src/widgets/private/dscrollarea_p.h less more
0 /*
1 * Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #ifndef DSCROLLAREA_P_H
18 #define DSCROLLAREA_P_H
19
20 #include "dtkwidget_global.h"
21 #include "dscrollarea.h"
22
23 #include <DObjectPrivate>
24
25 class QPropertyAnimation;
26
27 DWIDGET_BEGIN_NAMESPACE
28
29 class DScrollAreaPrivate : public DTK_CORE_NAMESPACE::DObjectPrivate
30 {
31 protected:
32 DScrollAreaPrivate(DScrollArea *qq);
33 ~DScrollAreaPrivate();
34
35 private:
36 void init();
37
38 bool autoHideScrollBar;
39 DScrollBar *vBar;
40 DScrollBar *hBar;
41 QPropertyAnimation *scrollBarAnimation;
42 QTimer *timer;
43
44 D_DECLARE_PUBLIC(DScrollArea)
45 };
46
47 DWIDGET_END_NAMESPACE
48
49 #endif // DSCROLLAREA_P_H
+0
-52
src/widgets/private/dscrollbar_p.h less more
0 /*
1 * Copyright (C) 2017 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #ifndef DSCROLLBAR_P_H
18 #define DSCROLLBAR_P_H
19
20 #include "dscrollbar.h"
21
22 #include <DObjectPrivate>
23
24 QT_BEGIN_NAMESPACE
25 class QGraphicsOpacityEffect;
26 QT_END_NAMESPACE
27
28 DWIDGET_BEGIN_NAMESPACE
29
30 class DScrollBarPrivate : public DTK_CORE_NAMESPACE::DObjectPrivate
31 {
32 DScrollBarPrivate(DScrollBar *qq);
33
34 void init();
35 void setOpacity(qreal opacity);
36 void _q_hidden();
37 void _q_updateOpacity();
38
39 bool canPaint = true;
40 bool autoHide = true;
41 qreal opacity = 1;
42
43 QTimer *timer = Q_NULLPTR;
44 QTimer *opacityTimer = Q_NULLPTR;
45
46 D_DECLARE_PUBLIC(DScrollBar)
47 };
48
49 DWIDGET_END_NAMESPACE
50
51 #endif // DSCROLLBAR_P_H
0 /*
1 * Copyright (C) 2011 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: wp <wangpeng_cm@deepin.com>
4 *
5 * Maintainer: wp <wangpeng_cm@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #ifndef DSEARCHEDIT_P_H
22 #define DSEARCHEDIT_P_H
23
24 #include "dlineedit_p.h"
25 #include "dsearchedit.h"
26
27 #include <QLabel>
28
29 QT_BEGIN_NAMESPACE
30 class QAudioInput;
31 QT_END_NAMESPACE
32
33 DWIDGET_BEGIN_NAMESPACE
34
35 class VoiceDevice;
36 class DIconButton;
37 class DSearchEditPrivate : DLineEditPrivate
38 {
39 public:
40 DSearchEditPrivate(DSearchEdit *q);
41 ~DSearchEditPrivate();
42
43 void init();
44
45 void _q_toEditMode(bool focus);
46 void _q_onVoiceActionTrigger(bool checked);
47 void _q_clearFocus();
48
49 public:
50 QAction *action;
51 QString placeHolder;
52 QString placeholderText;
53
54 QWidget *iconWidget;
55
56 #ifdef ENABLE_AI
57 QAction *voiceAction = nullptr;
58 QAudioInput *voiceInput = nullptr;
59 VoiceDevice *voiceIODevice = nullptr;
60 #endif
61
62 protected:
63 Q_DECLARE_PUBLIC(DSearchEdit)
64 };
65
66 DWIDGET_END_NAMESPACE
67
68 #endif // DSEARCHEDIT_P_H
0 /*
1 * Copyright (C) 2011 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: wp <wangpeng_cm@deepin.com>
4 *
5 * Maintainer: wp <wangpeng_cm@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #ifndef DSLIDER_P_H
22 #define DSLIDER_P_H
23
24 #include "dslider.h"
25
26 #include <DObjectPrivate>
27 #include <DIconButton>
28 #include <DFloatingWidget>
29 #include <DLabel>
30
31 #include <QLayout>
32
33 DWIDGET_BEGIN_NAMESPACE
34
35 class SliderStrip;
36 class DSliderPrivate : public DTK_CORE_NAMESPACE::DObjectPrivate
37 {
38 Q_DECLARE_PUBLIC(DSlider)
39
40 public:
41 DSliderPrivate(DSlider *q);
42
43 void init();
44
45 public:
46 SpecialSlider *slider;
47 bool handleVisible;
48 Qt::Orientation orientation = Qt::Horizontal;
49 QSlider::TickPosition aleDirection = QSlider::NoTicks;
50
51 DIconButton *leftIcon;
52 DIconButton *rightIcon;
53
54 SliderStrip *left;
55 SliderStrip *right;
56
57 QGridLayout *layout;
58 DFloatingWidget *tipvalue;
59 DLabel *label;
60
61 QSize iconSize;
62 bool mouseWheelEnabled;
63
64 void updtateTool(int value);
65 };
66
67 DWIDGET_END_NAMESPACE
68
69 #endif // DSLIDER_P_H
2626
2727 DWIDGET_BEGIN_NAMESPACE
2828
29 class DImageButton;
29 class DLineEdit;
3030 class DSpinBoxPrivate : public DTK_CORE_NAMESPACE::DObjectPrivate
3131 {
3232 DSpinBoxPrivate(DSpinBox *parent);
3333
3434 void init();
3535
36 void _q_resizeInsideFrame(const QSize &size);
37
38 QFrame *insideFrame;
39 bool alert = false;
40 int defaultValue = 0;
41
36 DLineEdit *lineEdit;
4237 D_DECLARE_PUBLIC(DSpinBox)
4338 };
4439
4843
4944 void init();
5045
51 void _q_resizeInsideFrame(const QSize &size);
52
53 QFrame *insideFrame;
54 bool alert = false;
55 double defaultValue = 0;
56
46 DLineEdit *lineEdit;
5747 D_DECLARE_PUBLIC(DDoubleSpinBox)
5848 };
5949
3838 QColor disabledBackground = qRgba(207, 214, 230, 255);
3939 QColor checkedBackground = qRgba(44, 167, 248, 255);
4040
41 QVariantAnimation *animation;
4241 double animationStartValue;
4342 double animationEndValue;
4443
+0
-40
src/widgets/private/dtextedit_p.h less more
0 /*
1 * Copyright (C) 2017 ~ 2017 Deepin Technology Co., Ltd.
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #ifndef DTEXTEDIT_P_H
18 #define DTEXTEDIT_P_H
19
20 #include "dtextedit.h"
21
22 #include <DObjectPrivate>
23
24 DWIDGET_BEGIN_NAMESPACE
25
26 class DTextEditPrivate : public DTK_CORE_NAMESPACE::DObjectPrivate
27 {
28 DTextEditPrivate(DTextEdit *qq);
29
30 void init();
31
32 QFrame *insideFrame;
33
34 D_DECLARE_PUBLIC(DTextEdit)
35 };
36
37 DWIDGET_END_NAMESPACE
38
39 #endif // DTEXTEDIT_P_H
0 /*
1 * Copyright (C) 2011 ~ 2019 Deepin Technology Co., Ltd.
2 *
3 * Author: wp <wangpeng_cm@deepin.com>
4 *
5 * Maintainer: wp <wangpeng_cm@deepin.com>
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #ifndef DTIPLABEL_P_H
22 #define DTIPLABEL_P_H
23
24 #include "dtiplabel.h"
25 #include "dstyle.h"
26 #include "dlabel_p.h"
27
28 DWIDGET_BEGIN_NAMESPACE
29
30 class DTipLabelPrivate : public DLabelPrivate
31 {
32 Q_DECLARE_PUBLIC(DTipLabel)
33
34 public:
35 DTipLabelPrivate(DTipLabel *q);
36
37 void init();
38 };
39
40 DWIDGET_END_NAMESPACE
41
42 #endif // DTIPLABEL_P_H
1818 $$PWD/dlineedit_p.h \
1919 $$PWD/dfilechooseredit_p.h \
2020 $$PWD/dstackwidget_p.h \
21 $$PWD/dscrollarea_p.h \
22 $$PWD/dlistwidget_p.h \
2321 $$PWD/dboxwidget_p.h \
2422 $$PWD/dpasswordedit_p.h \
2523 $$PWD/dabstractdialogprivate_p.h \
2826 $$PWD/dinputdialog_p.h \
2927 $$PWD/dipv4lineedit_p.h \
3028 $$PWD/dspinbox_p.h \
31 $$PWD/doptionlist_p.h \
32 $$PWD/doption_p.h \
3329 $$PWD/dpicturesequenceview_p.h \
3430 $$PWD/dflowlayout_p.h \
3531 $$PWD/dlistview_p.h \
36 $$PWD/dtextedit_p.h \
3732 $$PWD/dapplication_p.h \
38 $$PWD/dscrollbar_p.h \
3933 $$PWD/dmainwindow_p.h \
4034 $$PWD/dblureffectwidget_p.h \
4135 $$PWD/dpageindicator_p.h \
4236 $$PWD/daboutdialog_p.h \
4337 $$PWD/darrowrectangle_p.h \
44 $$PWD/dpushbutton_p.h \
4538 $$PWD/dtickeffect_p.h \
4639 $$PWD/dswitchbutton_p.h \
4740 $$PWD/dimagebutton_p.h \
48 $$PWD/dpasswdeditanimated_p.h \
49 $$PWD/dborderlesswidget_p.h
41 $$PWD/diconbutton_p.h \
42 $$PWD/dsearchedit_p.h \
43 $$PWD/dfloatingwidget_p.h \
44 $$PWD/dfloatingmessage_p.h \
45 $$PWD/dbuttonbox_p.h \
46 $$PWD/dslider_p.h \
47 $$PWD/dtiplabel_p.h \
48 $$PWD/dkeysequenceedit_p.h \
49 $$PWD/dlabel_p.h \
50 $$PWD/dframe_p.h \
51 $$PWD/ddrawer_p.h \
52 $$PWD/dalertcontrol_p.h
5053
5154 SOURCES += \
5255 $$PWD/dthemehelper.cpp
6666 int i = 0;
6767 for (auto text: texts) {
6868 auto bt = new QPushButton(text);
69 bt->setFixedWidth(36);
70 bt->setFixedHeight(22);
7169 bt->setCheckable(true);
7270
7371 if (texts.length() <= 1)
7472 bt->setObjectName("ButtonGroupSingle");
75 // bt->setStyleSheet("QPushButton{border: 1px solid red; border-radius: 4.0px}");
7673 else {
7774 if (i == 0)
7875 bt->setObjectName("ButtonGroupBegin");
79 // bt->setStyleSheet("QPushButton{"
80 // "border: 1px solid red;"
81 // "border-top-left-radius: 4.0px;"
82 // "border-bottom-left-radius: 4.0px;"
83 // "}");
8476 else if (i == texts.length() -1) {
8577 bt->setObjectName("ButtonGroupEnd");
86 // bt->setStyleSheet("QPushButton{"
87 // "border: 1px solid red;"
88 // "border-top-right-radius: 4.0px;"
89 // "border-bottom-right-radius: 4.0px;"
90 // "}");
9178 } else {
9279
9380 bt->setObjectName("ButtonGroupMiddle");
94 // bt->setStyleSheet("QPushButton{"
95 // "border-top: 1px solid red;"
96 // "border-bottom: 1px solid red;"
97 // "}");
9881 }
9982 }
10083 d->group->addButton(bt, i);
2525 #include <QCoreApplication>
2626 #include <QScroller>
2727 #include <QMouseEvent>
28 #include <QFormLayout>
2829
2930 #include <DSettings>
3031 #include <DSettingsGroup>
31 #include <DSettingsOption>
3232 #include <DSuggestButton>
33 #include <DPushButton>
34 #include <DFontSizeManager>
3335
3436 #include "dsettingswidgetfactory.h"
3537
4850
4951 QScrollArea *contentArea;
5052 QWidget *contentFrame;
51 QVBoxLayout *contentLayout;
53 QFormLayout *contentLayout;
5254
5355 QMap<QString, QWidget *> titles;
5456 QList<QWidget *> sortTitles;
5961 Q_DECLARE_PUBLIC(Content)
6062 };
6163
62 Content::Content(QWidget *parent) :
63 QFrame(parent), d_ptr(new ContentPrivate(this))
64 Content::Content(QWidget *parent)
65 : QWidget(parent)
66 , d_ptr(new ContentPrivate(this))
6467 {
6568 Q_D(Content);
6669
6770 setObjectName("RightFrame");
68 setContentsMargins(0, 0, 0, 0);
6971
7072 auto layout = new QVBoxLayout(this);
71 layout->setContentsMargins(0, 0, 0, 0);
72 layout->setSpacing(0);
7373
7474 d->contentArea = new QScrollArea;
7575 d->contentArea->setContentsMargins(0, 0, 0, 0);
7676 d->contentArea->setWidgetResizable(true);
77 d->contentArea->setStyleSheet("QScrollArea{border: none; background-color: transparent; }");
78 // d->contentArea->setStyleSheet("QFrame{border: 1px solid red;}");
77 d->contentArea->setFrameShape(QFrame::NoFrame);
7978
8079 // 设置列表支持触屏滚动
8180 QScroller::grabGesture(d->contentArea);
8281
8382 d->contentFrame = new QWidget(this);
8483 d->contentFrame->setObjectName("SettingsContent");
85 d->contentFrame->setStyleSheet("#SettingsContent{border: none; background-color: transparent; }");
86 d->contentLayout = new QVBoxLayout(d->contentFrame);
87 d->contentLayout->setContentsMargins(20, 0, 0, 0);
88 d->contentLayout->setSpacing(0);
84 d->contentLayout = new QFormLayout(d->contentFrame);
85 d->contentLayout->setRowWrapPolicy(QFormLayout::DontWrapRows);
86 d->contentLayout->setLabelAlignment(Qt::AlignLeft);
87 d->contentLayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
88 d->contentLayout->setContentsMargins(0, 0, d->contentArea->verticalScrollBar()->height(), 0);
8989 layout->addWidget(d->contentArea);
9090
9191 d->contentArea->setWidget(d->contentFrame);
114114
115115 if (!visableTitleList.isEmpty()) {
116116 auto lastTitle = d->sortTitles.last();
117 if (value + viewHeight + 180 >= lastTitle->y()) {
117 if (value + viewHeight - 180 >= lastTitle->y()) {
118118 currentTitle = visableTitleList.last();
119119 } else {
120120 currentTitle = visableTitleList.first();
121121 }
122122 }
123123
124 if (value > d->sortTitles.last()->y())
125 currentTitle = d->sortTitles.last();
126 if (value < d->sortTitles.first()->y())
127 currentTitle = d->sortTitles.first();
128
124129 if (currentTitle) {
125130 Q_EMIT scrollToGroup(currentTitle->property("key").toString());
126131 }
136141 {
137142 Q_D(const Content);
138143 return d->widgetFactory;
144 }
145
146 bool Content::groupIsVisible(const QString &key) const
147 {
148 Q_D(const Content);
149
150 QWidget *title = d->titles.value(key);
151
152 return title && title->isVisible();
153 }
154
155 void Content::setGroupVisible(const QString &key, bool visible)
156 {
157 Q_D(Content);
158
159 if (!d->titles.contains(key))
160 return;
161
162 auto title = d->titles.value(key);
163 title->setVisible(visible);
164
165 for (QObject *obj : d->contentFrame->children()) {
166 if (obj->property("_d_dtk_group_key").toString() == key) {
167 if (ContentTitle *title = qobject_cast<ContentTitle *>(obj)) {
168 const QString &key = title->property("key").toString();
169
170 if (d->titles.contains(key)) {
171 setGroupVisible(key, visible);
172 continue;
173 }
174 }
175
176 if (QWidget *w = qobject_cast<QWidget *>(obj)) {
177 if (!visible || w->parentWidget()) // 无父控件时禁止其显示
178 w->setVisible(visible);
179 }
180 }
181 }
139182 }
140183
141184 void Content::onScrollToGroup(const QString &key)
155198 void Content::updateSettings(const QByteArray &translateContext, QPointer<DTK_CORE_NAMESPACE::DSettings> settings)
156199 {
157200 Q_D(Content);
201
202 QString current_groupKey;
203 QString current_subGroupKey;
204
158205 for (auto groupKey : settings->groupKeys()) {
206 current_groupKey = groupKey;
207
159208 auto group = settings->group(groupKey);
160209 if (group->isHidden()) {
161210 continue;
165214 auto title = new ContentTitle;
166215 title->setTitle(trName);
167216 title->setProperty("key", groupKey);
168 // d->contentLayout->addSpacing(10);
169 d->contentLayout->addWidget(title);
170 d->contentLayout->addSpacing(8);
217 title->label()->setForegroundRole(QPalette::BrightText);
218
219 DFontSizeManager::instance()->bind(title, DFontSizeManager::T4, QFont::Medium);
220 d->contentLayout->setWidget(d->contentLayout->rowCount(), QFormLayout::LabelRole, title);
171221 d->sortTitles.push_back(title);
172222 d->titles.insert(groupKey, title);
173223
176226 continue;
177227 }
178228
229 current_subGroupKey = subgroup->key();
230
179231 if (!subgroup->name().isEmpty()) {
180 auto title = new QLabel;
181 title->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
182 title->setObjectName("ContentSubTitleText");
183 title->setFixedHeight(20);
184232 auto trName = translateContext.isEmpty() ? QObject::tr(subgroup->name().toStdString().c_str())
185233 : qApp->translate(translateContext.constData(), subgroup->name().toStdString().c_str());
186 title->setText(trName);
234 auto title = new ContentTitle;
235
236 title->setTitle(trName);
237 DFontSizeManager::instance()->bind(title, DFontSizeManager::T5, QFont::Medium);
187238 title->setProperty("key", subgroup->key());
188 title->setStyleSheet("#ContentSubTitleText{font-weight: 520; "
189 // "border: 1px solid red; "
190 "}");
191 d->contentLayout->addWidget(title);
192 d->contentLayout->addSpacing(10);
239 title->setProperty("_d_dtk_group_key", current_groupKey);
240
241 d->contentLayout->setWidget(d->contentLayout->rowCount(), QFormLayout::LabelRole, title);
193242 d->sortTitles.push_back(title);
194243 d->titles.insert(subgroup->key(), title);
195244 }
199248 continue;
200249 }
201250
202 auto widget = d->widgetFactory->createWidget(translateContext, option);
203
204 if (widget) {
205 // qDebug() << widget << widget->height();
206 d->contentLayout->addWidget(widget);
207 widget->setParent(d->contentFrame);
251 auto widget = d->widgetFactory->createItem(translateContext, option);
252
253 // 先尝试创建item
254 if (widget.first || widget.second) {
255 if (QLabel *label = qobject_cast<QLabel *>(widget.first)) {
256 if (widget.second)
257 label->setBuddy(widget.second);
258 }
259
260 d->contentLayout->addRow(widget.first, widget.second);
261
262 if (widget.first) {
263 widget.first->setProperty("_d_dtk_group_key", current_subGroupKey);
264 }
265
266 if (widget.second) {
267 widget.second->setProperty("_d_dtk_group_key", current_subGroupKey);
268 }
269 } else {
270 QWidget *widget = d->widgetFactory->createWidget(translateContext, option);
271
272 if (widget) {
273 widget->setProperty("_d_dtk_group_key", current_subGroupKey);
274 d->contentLayout->setWidget(d->contentLayout->rowCount(), QFormLayout::SpanningRole, widget);
275 }
208276 }
209277 }
210
211 d->contentLayout->addSpacing(4);
212278 }
213279 }
214280
215 auto resetBt = new DSuggestButton(QObject::tr("Restore Defaults"));
281 QWidget *box = new QWidget();
282 QHBoxLayout *box_layout = new QHBoxLayout(box);
283 box_layout->setContentsMargins(0, 30, 0, 0);
284 auto resetBt = new DPushButton(QObject::tr("Restore Defaults"), box);
216285 resetBt->setObjectName("SettingsContentReset");
217 resetBt->setFixedSize(310, 36);
218
219 d->contentLayout->addSpacing(40);
220 d->contentLayout->addWidget(resetBt, 0, Qt::AlignCenter);
221 d->contentLayout->addSpacing(40);
222 d->contentLayout->addStretch();
286 resetBt->setMaximumWidth(300);
287 box_layout->addWidget(resetBt);
288 box->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
289
290 d->contentLayout->setWidget(d->contentLayout->rowCount(), QFormLayout::SpanningRole, box);
223291
224292 connect(resetBt, &QPushButton::released,
225293 this, [ = ]() {
239307 }
240308 }
241309
310 void Content::resizeEvent(QResizeEvent *event)
311 {
312 Q_D(Content);
313 d->contentFrame->setMaximumWidth(d->contentArea->width());
314
315 return QWidget::resizeEvent(event);
316 }
317
242318 DWIDGET_END_NAMESPACE
3030
3131 class DSettingsWidgetFactory;
3232 class ContentPrivate;
33 class LIBDTKWIDGETSHARED_EXPORT Content : public QFrame
33 class LIBDTKWIDGETSHARED_EXPORT Content : public QWidget
3434 {
3535 Q_OBJECT
3636 public:
3838 ~Content();
3939
4040 DSettingsWidgetFactory* widgetFactory() const;
41 bool groupIsVisible(const QString &key) const;
42 void setGroupVisible(const QString &key, bool visible);
43
4144 Q_SIGNALS:
4245 void scrollToGroup(const QString &key);
4346
4750
4851 private:
4952 void mouseMoveEvent(QMouseEvent *event) override;
53 void resizeEvent(QResizeEvent *event) override;
5054
5155 QScopedPointer<ContentPrivate> d_ptr;
5256 Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), Content)
4141 layout->setContentsMargins(0, 0, 0, 0);
4242 layout->setSpacing(10);
4343
44 d->titleLabel = new QLabel();
44 d->titleLabel = new QLabel;
4545 d->titleLabel->setObjectName("ContentTitleText");
4646 layout->addWidget(d->titleLabel, 0, Qt::AlignLeft);
47 d->titleLabel->setStyleSheet("#ContentTitleText{font-weight: 550; font-size: 14px;}");
4847
4948 auto lineLabel = new QLabel;
5049 lineLabel->setObjectName("ContentTitleLine");
51 lineLabel->setFixedHeight(1);
52 lineLabel->setStyleSheet("#ContentTitleLine{border: 1px solid rgba(0,0,0,0.1);}");
5350 layout->addWidget(lineLabel);
5451 lineLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
55 setFixedHeight(20);
5652 }
5753
5854 ContentTitle::~ContentTitle()
6056
6157 }
6258
59 void ContentTitle::setSpacing(int width)
60 {
61 QHBoxLayout *hLayout = qobject_cast<QHBoxLayout *>(layout());
62 hLayout->insertSpacing(0, width);
63 }
64
65 QLabel *ContentTitle::label() const
66 {
67 Q_D(const ContentTitle);
68
69 return d->titleLabel;
70 }
71
6372 void ContentTitle::setTitle(const QString &title)
6473 {
6574 Q_D(ContentTitle);
1717 #pragma once
1818
1919 #include <QScopedPointer>
20 #include <QWidget>
20 #include <QLabel>
2121
2222 class ContentTitlePrivate;
2323 class ContentTitle : public QWidget
2727 explicit ContentTitle(QWidget *parent = 0);
2828 ~ContentTitle();
2929
30 Q_SIGNALS:
30 void setSpacing(int width);
31 QLabel *label() const;
3132
3233 public Q_SLOTS:
3334 void setTitle(const QString &title);
2424
2525 #include <DSettings>
2626 #include <DSettingsGroup>
27 #include <DListView>
28 #include <DApplicationHelper>
2729
2830 #include "navigationdelegate.h"
2931
3335 {
3436 public:
3537 NavigationPrivate(Navigation *parent) : q_ptr(parent) {}
38 QModelIndex indexOfGroup(const QString &key) const
39 {
40 for (int i = 0; i < navbarModel->rowCount(); ++i) {
41 auto index = navbarModel->index(i, 0);
42 if (index.data(NavigationDelegate::NavKeyRole).toString() == key) {
43 return index;
44 }
45 }
3646
37 QListView *navbar = nullptr;
47 return QModelIndex();
48 }
49
50 DListView *navbar = nullptr;
3851 QStandardItemModel *navbarModel = nullptr;
3952
4053 Navigation *q_ptr;
4760 Q_D(Navigation);
4861
4962 setObjectName("Navigation");
50 // setStyleSheet("#Navigation{border: none; border-right: 1px solid rgba(0,0,0,0.1);}");
5163
5264 setContentsMargins(0, 0, 0, 0);
5365 auto layout = new QHBoxLayout(this);
5466 layout->setContentsMargins(0, 0, 0, 0);
5567
56 d->navbar = new QListView(this);
68 d->navbar = new DListView(this);
5769 d->navbar->setObjectName("NavigationBar");
58 // d->navbar->setStyleSheet("#NavigationBar{border: none;}");
59 // d->navbar->setMinimumWidth(160);
60 // d->navbar->setMaximumWidth(199);
6170 d->navbar->setContentsMargins(0, 0, 0, 0);
71 d->navbar->setAutoFillBackground(true);
72 d->navbar->setViewportMargins(10, 0, 10, 0);
73 DPalette pa = DApplicationHelper::instance()->palette(d->navbar);
74 pa.setBrush(DPalette::ItemBackground, Qt::transparent);
75 DApplicationHelper::instance()->setPalette(d->navbar, pa);
6276
6377 d->navbar->setSelectionMode(QListView::SingleSelection);
64 d->navbar->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
6578 d->navbar->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
6679
6780 d->navbarModel = new QStandardItemModel;
6982 d->navbar->setModel(d->navbarModel);
7083
7184 d->navbar->setEditTriggers(QAbstractItemView::NoEditTriggers);
72 d->navbar->setItemDelegate(new NavigationDelegate);
85 d->navbar->setItemDelegate(new NavigationDelegate(d->navbar));
7386
7487 layout->addWidget(d->navbar);
7588
7992 Q_EMIT selectedGroup(key);
8093 }
8194 });
82
83 // setMaximumWidth(200);
8495 d->navbar->setFixedWidth(190);
85 setFixedWidth(190 + 1);
8696 }
8797
8898 Navigation::~Navigation()
8999 {
90100 }
91101
102 bool Navigation::groupIsVisible(const QString &key) const
103 {
104 Q_D(const Navigation);
105
106 const QModelIndex &index = d->indexOfGroup(key);
107
108 return index.isValid() && d->navbar->isRowHidden(index.row());
109 }
110
111 void Navigation::setGroupVisible(const QString &key, bool visible)
112 {
113 Q_D(Navigation);
114
115 const QModelIndex &index = d->indexOfGroup(key);
116
117 if (index.isValid()) {
118 d->navbar->setRowHidden(index.row(), !visible);
119 }
120 }
121
92122 void Navigation::onSelectGroup(const QString &key)
93123 {
94124 Q_D(Navigation);
95 for (int i = 0; i < d->navbarModel->rowCount(); ++i) {
96 auto index = d->navbarModel->index(i, 0);
97 if (index.data(NavigationDelegate::NavKeyRole).toString() == key) {
98 d->navbar->setCurrentIndex(index);
99 return;
100 }
125
126 const QModelIndex &index = d->indexOfGroup(key);
127
128 if (index.isValid()) {
129 d->navbar->setCurrentIndex(index);
101130 }
102131 }
103132
105134 {
106135 Q_D(Navigation);
107136
108 bool first = true;
109137 for (auto groupKey : settings->groupKeys()) {
110 if (!first) {
111 auto item = new QStandardItem;
112 item->setData("", Qt::DisplayRole);
113 item->setData(NavigationDelegate::Split, NavigationDelegate::NavLevelRole);
114 d->navbarModel->appendRow(item);
115 }
116 first = false;
117
118138 auto group = settings->group(groupKey);
119139 if (group->isHidden()) {
120140 continue;
158178 }
159179
160180 d->navbar->setCurrentIndex(d->navbarModel->index(0, 0));
161 // this->adjustSize();
162 // d->navbar->setMaximumWidth(200);
163 // this->setFixedWidth(d->navbar->width() + 1);
164181 }
165182
166183 DWIDGET_END_NAMESPACE
3535 explicit Navigation(QWidget *parent = 0);
3636 ~Navigation();
3737
38 bool groupIsVisible(const QString &key) const;
39 void setGroupVisible(const QString &key, bool visible);
40
3841 Q_SIGNALS:
3942 void selectedGroup(const QString &key);
4043
1818
1919 #include <QPainter>
2020 #include <QDebug>
21 #include <DApplication>
22 #include <DFontSizeManager>
2123
22 class NavigationDelegatePrivate
23 {
24 public:
25 NavigationDelegatePrivate(NavigationDelegate *parent) : q_ptr(parent) {}
24 DWIDGET_BEGIN_NAMESPACE
2625
27 NavigationDelegate *q_ptr;
28 Q_DECLARE_PUBLIC(NavigationDelegate)
29 };
30
31 NavigationDelegate::NavigationDelegate(QWidget *parent) :
32 QStyledItemDelegate(parent) ,
33 d_ptr(new NavigationDelegatePrivate(this))
26 NavigationDelegate::NavigationDelegate(QAbstractItemView *parent)
27 : DStyledItemDelegate(parent)
3428 {
3529
3630 }
4337 void NavigationDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
4438 const QModelIndex &index) const
4539 {
46 painter->save();
47 painter->setRenderHints(QPainter::Antialiasing | QPainter::HighQualityAntialiasing);
48
49 painter->setBrush(option.palette.foreground());
50
40 QStyleOptionViewItem opt = option;
41 opt.text = QString();
42 DStyledItemDelegate::paint(painter, opt, index);
5143 auto level = static_cast<NavLevel>(index.data(NavLevelRole).toInt());
52
5344 bool isSelected = option.state & QStyle::State_Selected;
5445
55 switch (level) {
56 case Level1:
57 case Level2: {
58 if (isSelected) {
59 auto brush = QColor("#d5edfe");
60 painter->fillRect(option.rect, brush);
61 auto rect = option.rect;
62 rect.setX(option.rect.x() + option.rect.width() - 3);
63 brush = QColor("#2ca7f8");
64 painter->fillRect(rect, brush);
65 }
66 }
67 case Split:
68 case Level3:
69 break;
70 }
71
46 // draw text
7247 switch (level) {
7348 case Level1: {
74 auto pen = isSelected ? QColor("#2ca7f8") : QColor("#00162c");
49 QColor pen = option.palette.color(isSelected ? QPalette::HighlightedText : QPalette::BrightText);
7550 painter->setPen(pen);
76 auto rect = option.rect.marginsRemoved(QMargins(30, 0, 0, 0));
77 auto font = painter->font();
78 font.setPixelSize(16);
79 font.setWeight(QFont::DemiBold);
80 painter->setFont(font);
81
82 QFontMetrics fm(font);
83 auto text = fm.elidedText(index.data().toString(), Qt::ElideMiddle, 150);
51 painter->setFont(DFontSizeManager::instance()->get(DFontSizeManager::T4, QFont::Medium, opt.font));
52 QRect rect = opt.rect.marginsRemoved(QMargins(10, 0, 10, 0));
53 auto text = opt.fontMetrics.elidedText(index.data().toString(), Qt::ElideRight, rect.width());
8454 painter->drawText(rect, Qt::AlignLeft | Qt::AlignVCenter, text);
8555 break;
8656 }
8757 case Level2: {
88 auto pen = isSelected ? QColor("#2ca7f8") : QColor("#303030");
58 QColor pen = option.palette.color(isSelected ? QPalette::HighlightedText : QPalette::WindowText);
8959 painter->setPen(pen);
90 auto font = painter->font();
91 painter->setFont(font);
92
93 QFontMetrics fm(font);
94 auto text = fm.elidedText(index.data().toString(), Qt::ElideMiddle, 135);
95 auto rect = option.rect.marginsRemoved(QMargins(45, 0, 0, 0));
60 auto rect = option.rect.marginsRemoved(QMargins(30, 0, 10, 0));
61 auto text = opt.fontMetrics.elidedText(index.data().toString(), Qt::ElideRight, rect.width());
62 painter->setFont(opt.font);
9663 painter->drawText(rect, Qt::AlignLeft | Qt::AlignVCenter, text);
9764 break;
9865 }
10067 case Level3:
10168 break;
10269 }
103
104 painter->restore();
105 }
106
107 QSize NavigationDelegate::sizeHint(const QStyleOptionViewItem &option,
108 const QModelIndex &index) const
109 {
110 auto sh = QStyledItemDelegate::sizeHint(option, index);
111
112 auto level = static_cast<NavLevel>(index.data(NavLevelRole).toInt());
113 switch (level) {
114 case Split: {
115 sh.setHeight(20);
116 break;
117 }
118 case Level1:
119 case Level2:
120 case Level3:
121 sh.setHeight(30);
122 break;
123 }
124 return sh;
125 }
126
127 QWidget *NavigationDelegate::createEditor(QWidget *parent,
128 const QStyleOptionViewItem &option,
129 const QModelIndex &index) const
130
131 {
132 return QStyledItemDelegate::createEditor(parent, option, index);
133 }
134
135 void NavigationDelegate::setEditorData(QWidget *editor,
136 const QModelIndex &index) const
137 {
138
139 QStyledItemDelegate::setEditorData(editor, index);
140
141 }
142
143 void NavigationDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
144 const QModelIndex &index) const
145 {
146 QStyledItemDelegate::setModelData(editor, model, index);
14770 }
14871
14972 void NavigationDelegate::initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const
15073 {
151 QStyledItemDelegate::initStyleOption(option, index);
74 DStyledItemDelegate::initStyleOption(option, index);
75 option->features &= ~QStyleOptionViewItem::HasDisplay;
76
77 auto level = static_cast<NavLevel>(index.data(NavLevelRole).toInt());
78
79 if (level == Level1) {
80 option->font = DFontSizeManager::instance()->get(DFontSizeManager::T4, option->font);
81 option->font.setBold(true);
82 option->fontMetrics = QFontMetrics(option->font);
83 }
15284 }
85
86 DWIDGET_END_NAMESPACE
1717 #pragma once
1818
1919 #include <QScopedPointer>
20 #include <QStyledItemDelegate>
20
21 #include <DStyle>
22 #include <DStyledItemDelegate>
23
24 DWIDGET_BEGIN_NAMESPACE
2125
2226 class NavigationDelegatePrivate;
23 class NavigationDelegate: public QStyledItemDelegate
27 class NavigationDelegate: public DStyledItemDelegate
2428 {
2529 Q_OBJECT
2630 public:
27 NavigationDelegate(QWidget *parent = 0);
31 NavigationDelegate(QAbstractItemView *parent);
2832 ~NavigationDelegate();
2933
3034
3135 enum DataRole {
32 NavLevelRole = Qt::UserRole + 100,
36 NavLevelRole = Dtk::UserRole + 100,
3337 NavKeyRole,
3438 };
3539
4044 Level3
4145 };
4246
43 virtual void initStyleOption(QStyleOptionViewItem *option,
44 const QModelIndex &index) const;
47 protected:
4548 void paint(QPainter *painter, const QStyleOptionViewItem &option,
46 const QModelIndex &index) const;
47
48 QSize sizeHint(const QStyleOptionViewItem &option,
49 const QModelIndex &index) const;
50
51 QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
52 const QModelIndex &index) const;
53
54 void setEditorData(QWidget *editor, const QModelIndex &index) const;
55
56 void setModelData(QWidget *editor, QAbstractItemModel *model,
57 const QModelIndex &index) const;
58
59 private:
60 QScopedPointer<NavigationDelegatePrivate> d_ptr;
61 Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), NavigationDelegate)
49 const QModelIndex &index) const override;
50 void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const override;
6251 };
6352
64
53 DWIDGET_END_NAMESPACE
6464
6565 ShortcutEdit::ShortcutEdit(QWidget *parent) : QWidget(parent), d_ptr(new ShortcutEditPrivate(this))
6666 {
67 // Q_D(ShortcutEdit);
68 setFixedSize(MAX_WIDTH, MAX_HEIGHT);
6967 setFocusPolicy(Qt::ClickFocus);
7068 }
7169
114112 QFont f;
115113 f.setPixelSize(11);
116114 painter.setFont(f);
117 painter.setPen(QPen(QColor(48, 48, 48, 255 * 4 / 10)));
118115 painter.drawText(tR, tr("Please enter a new shortcut"));
119116 } else {
120117 QRectF lastRect(1, 0, 0, 0);
234231 painter.fillRect(r, QColor(105, 170, 255, 255 * 0.15));
235232
236233 // Draw inside border
234 painter.save();
237235 painter.setPen(QPen(QColor(95, 159, 217, 255 * 0.3), 1));
238236 QPainterPathStroker stroker;
239237 stroker.setWidth(1.0);
240238 stroker.setJoinStyle(Qt::RoundJoin);
241239 QPainterPath borderPath = stroker.createStroke(bp);
242240 painter.drawPath(borderPath);
241 painter.restore();
243242
244243 // Draw text
245244 QRectF tR(r.x() + 6, 5, r.width(), r.height());
246245 QFont f;
247246 f.setPixelSize(10);
248247 painter.setFont(f);
249 painter.setPen(QPen(QColor("#434343")));
250248 painter.drawText(tR, str);
251249
252250 return r;
1919
2020 #include <libsn/sn-monitor.h>
2121 #include <xcb/xcb_aux.h>
22
23 #include <DGuiApplicationHelper>
2224
2325 #include "startupnotificationmonitor.h"
2426
7779 StartupNotificationMonitor::StartupNotificationMonitor() :
7880 QObject()
7981 {
82 if (!DTK_GUI_NAMESPACE::DGuiApplicationHelper::instance()->isXWindowPlatform())
83 return;
84
8085 int screen = 0;
8186
8287 xcb_screen_t *s = xcb_aux_get_screen (QX11Info::connection(), screen);
+0
-33
src/widgets/themes/dark/Dtk--Widget--DAboutDialog.theme less more
0 QLabel#ProductNameLabel {
1 font-size:18px;
2 color: black;
3 }
4
5 QLabel#VersionLabel {
6 font-size:12px;
7 color: #666666;
8 }
9
10 QLabel#WebsiteLabel {
11 font-size:13px;
12 color: #004EE5;
13 }
14
15 QLabel#AcknowledgementLabel {
16 font-size:13px;
17 color: #004EE5;
18 }
19
20 QLabel#DescriptionLabel {
21 font-size:11px;
22 font-weight: normal;
23 color:#1A1A1A;
24 border: none;
25 }
26
27 QLabel#LicenseLabel {
28 font-size:11px;
29 font-weight: normal;
30 color:#1A1A1A;
31 border: none;
32 }
+0
-6
src/widgets/themes/dark/Dtk--Widget--DAbstractDialog.theme less more
0 Dtk--Widget--DAbstractDialog {
1 qproperty-backgroundColor: rgba(0, 0, 0, 0.8);
2 qproperty-borderColor: rgba(0, 0, 0, 0.2);
3 border-width: 1;
4 border-radius: 4px;
5 }
+0
-49
src/widgets/themes/dark/Dtk--Widget--DArrowButton.theme less more
0 Dtk--Widget--ArrowButtonIcon {
1 background-repeat: no-repeat;
2 background-position: center;
3 }
4
5 QLabel#ArrowButtonIconNormal[arrowButtonDirection="0"] {
6 background-image: url(:/images/dark/images/arrow_up_normal.png);
7 }
8 QLabel#ArrowButtonIconNormal[arrowButtonDirection="1"] {
9 background-image: url(:/images/dark/images/arrow_down_normal.png);
10 }
11 QLabel#ArrowButtonIconNormal[arrowButtonDirection="2"] {
12 background-image: url(:/images/dark/images/arrow_left_normal.png);
13 }
14 QLabel#ArrowButtonIconNormal[arrowButtonDirection="3"] {
15 background-image: url(:/images/dark/images/arrow_right_normal.png);
16 }
17
18 QLabel#ArrowButtonIconHover[arrowButtonDirection="0"] {
19 background-image: url(:/images/dark/images/arrow_up_hover.png);
20 }
21
22 QLabel#ArrowButtonIconHover[arrowButtonDirection="1"] {
23 background-image: url(:/images/dark/images/arrow_down_hover.png);
24 }
25
26 QLabel#ArrowButtonIconHover[arrowButtonDirection="2"] {
27 background-image: url(:/images/dark/images/arrow_left_hover.png);
28 }
29
30 QLabel#ArrowButtonIconHover[arrowButtonDirection="3"] {
31 background-image: url(:/images/dark/images/arrow_right_hover.png);
32 }
33
34 QLabel#ArrowButtonIconPress[arrowButtonDirection="0"] {
35 background-image: url(:/images/dark/images/arrow_up_press.png);
36 }
37
38 QLabel#ArrowButtonIconPress[arrowButtonDirection="1"] {
39 background-image: url(:/images/dark/images/arrow_down_press.png);
40 }
41
42 QLabel#ArrowButtonIconPress[arrowButtonDirection="2"] {
43 background-image: url(:/images/dark/images/arrow_left_press.png);
44 }
45
46 QLabel#ArrowButtonIconPress[arrowButtonDirection="3"] {
47 background-image: url(:/images/dark/images/arrow_right_press.png);
48 }
+0
-28
src/widgets/themes/dark/Dtk--Widget--DBaseButton.theme less more
0 Dtk--Widget--DBaseButton {
1 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
2 stop: 0 #272727,
3 stop: 1.0 #191919);
4 border-width: 1px;
5 border-style: solid;
6 border-radius: 3;
7 border-color: rgba(0, 0, 0, 255);
8 }
9
10 Dtk--Widget--DBaseButton:pressed {
11 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
12 stop: 0 #181818,
13 stop: 1.0 #282828);
14 }
15
16 Dtk--Widget--DBaseButton:flat {
17 border: none; /* no border for a flat push button */
18 }
19
20
21 QFrame#ButtonInsideFrame {
22 background-color: transparent;
23 border-top-width: 1px;
24 border-style: solid;
25 border-radius: 3;
26 border-top-color: rgba(255, 255, 255, 26);
27 }
+0
-3
src/widgets/themes/dark/Dtk--Widget--DBaseExpand.theme less more
0 Dtk--Widget--ContentLoader {
1 background-color: #1A1B1B
2 }
+0
-4
src/widgets/themes/dark/Dtk--Widget--DBaseLine.theme less more
0 /*Dtk--Widget--DBaseLine {
1 background-color: #252627
2 }*/
3 /*use default background color(transparent)*/
+0
-3
src/widgets/themes/dark/Dtk--Widget--DBoxWidget.theme less more
0 Dtk--Widget--DBoxWidget{
1 background: transparent;
2 }
+0
-42
src/widgets/themes/dark/Dtk--Widget--DButtonList.theme less more
0 Dtk--Widget--DButtonList {
1 background-color: #1A1B1B;
2 border: none;
3 outline: none;
4 }
5
6 Dtk--Widget--DButtonList::item {
7 border: none;
8 outline: none;
9 }
10
11 Dtk--Widget--DButtonList QPushButton:hover{
12 color: white;
13 }
14
15 Dtk--Widget--DButtonList QFrame#BorderFrame{
16 background-color: transparent;
17 }
18
19 Dtk--Widget--DButtonList QPushButton{
20 background-color: transparent;
21 color: #b4b4b4;
22 border: none;
23 border-radius:3px;
24 text-align: left center;
25 padding-left: 40px;
26 }
27
28 Dtk--Widget--DButtonList QPushButton:checked{
29 background-color: #66000000;
30 color: #2ca7f8;
31 }
32
33 Dtk--Widget--DButtonList QPushButton:checked[state="OnlyOne"]{
34 background-color: transparent;
35 color:#01BDFF;
36 }
37
38 Dtk--Widget--DButtonList QPushButton:checked[state="normal"]{
39 background-color: lightblack;
40 color:#01BDFF;
41 }
+0
-9
src/widgets/themes/dark/Dtk--Widget--DCircleProgress.theme less more
0 Dtk--Widget--DCircleProgress {
1 qproperty-backgroundColor:rgba(255, 255, 255, .2);
2 qproperty-chunkColor:#26aeed;
3 }
4
5 Dtk--Widget--DCircleProgress #DisplayLabel {
6 color:white;
7 font-size:10px;
8 }
+0
-105
src/widgets/themes/dark/Dtk--Widget--DDialog.theme less more
0 Dtk--Widget--DDialog{
1 qproperty-backgroundColor: white;
2 qproperty-borderColor: rgba(0, 0, 0, 0.2);
3 }
4
5 QFrame#ButtonFrame{
6 border:1px solid rgba(0, 0, 0, 0.1);
7 border-radius: 2px;
8 }
9
10 #CloseButton{
11 qproperty-normalPic: url(:/images/dialog_close_round_normal.png);
12 qproperty-hoverPic: url(:/images/dialog_close_round_hover.png);
13 qproperty-pressPic: url(:/images/dialog_close_round_press.png);
14 }
15
16 QPushButton#NormalButton{
17 background-color: transparent;
18 border: 1px solid rgba(0, 0, 0, 0.1);
19 border-radius: 2px;
20 color: white;
21 text-align: center;
22 }
23
24 QPushButton#NormalButton:hover{
25 background-color: transparent;
26 color: rgba(0, 0, 0, 0.5);
27 }
28
29 QPushButton#NormalButton:pressed{
30 background-color: transparent;
31 color: #01bdff;
32 }
33
34 QPushButton#ActionButton{
35 background-color: transparent;
36 border: 1px solid rgba(0, 0, 0, 0.1);
37 border-right: none;
38 border-left: none;
39 border-bottom: none;
40 font-size: 13px;
41 color: #303030;
42 text-align: center;
43 outline: none;
44 }
45
46 QPushButton#ActionButton[buttonType="1"] {/*warning*/
47 color: #ff5a5a;
48 font-weight: 500;
49 }
50
51 QPushButton#ActionButton[buttonType="2"] {/*recommend*/
52 color: #0087ff;
53 font-weight: 500;
54 }
55
56 QPushButton#ActionButton:hover{
57 background: qlineargradient(x1:0, y1:0, x2:0, y2:1,
58 stop:0 #8ccfff, stop:1 #4bb8ff);
59 color: #ffffff;
60 }
61
62 QPushButton#ActionButton:pressed{
63 background: qlineargradient(x1:0, y1:0, x2:0, y2:1,
64 stop:0 #0b8cff, stop:1 #0aa1ff);
65 color: #ffffff;
66 }
67
68 QPushButton#ConflictButton{
69 background-color: transparent;
70 border:none;
71 color: white;
72 text-align: center;
73 }
74
75 QPushButton#ConflictButton:checked{
76 background-color: #ff9327;
77 }
78
79 QLabel#VLine{
80 background-color:rgba(0, 0, 0, 0.1);
81 }
82
83 QLabel#TitleLabel{
84 padding-top: 2px;
85 padding-bottom: 2px;
86 color: #000000;
87 }
88
89 QLabel#MessageLabel{
90 padding-top: 2px;
91 padding-bottom: 2px;
92 color: #444444;
93 }
94
95 QLabel#TaskTitleLabel{
96 padding-top: 2px;
97 padding-bottom: 2px;
98 font-size: 10px;
99 color: #b4b4b4;
100 }
101
102 QListWidget{
103 background-color: transparent;
104 }
+0
-5
src/widgets/themes/dark/Dtk--Widget--DFileChooserEdit.theme less more
0 Dtk--Widget--DFileChooserEdit {
1 qproperty-normalIcon:url(:/images/dark/images/loadfile_normal.png);
2 qproperty-hoverIcon:url(:/images/dark/images/loadfile_hover.png);
3 qproperty-pressIcon:url(:/images/dark/images/loadfile_press.png);
4 }
+0
-4
src/widgets/themes/dark/Dtk--Widget--DHeaderLine.theme less more
0 QLabel#DHeaderLineTitle {
1 color: #b4b4b4;
2 font-size: 12px;
3 }
+0
-4
src/widgets/themes/dark/Dtk--Widget--DImageButton.theme less more
0 Dtk--Widget--DImageButton:disabled {
1 border: none;
2 background: transparent;
3 }
+0
-15
src/widgets/themes/dark/Dtk--Widget--DIpv4LineEdit.theme less more
0 #DIpv4LineEdit_Edit{
1 border: none;
2 background: transparent;
3 color: #fff;
4 }
5
6 #DIpv4LineEdit_Label{
7 color: #fff;
8 }
9
10 Dtk--Widget--DIpv4LineEdit{
11 color: transparent;
12 selection-background-color: transparent;
13 selection-color: transparent;
14 }
+0
-4
src/widgets/themes/dark/Dtk--Widget--DLabel.theme less more
0 Dtk--Widget--DLabel {
1 color: #b4b4b4;
2 font-size: 12px;
3 }
+0
-38
src/widgets/themes/dark/Dtk--Widget--DLineEdit.theme less more
0 Dtk--Widget--DLineEdit {
1 min-height: 22px;
2 color: #fff;
3 border-radius: 3;
4 background-color: rgba(255, 255, 255, 26);/*use as outside border*/
5 }
6
7 Dtk--Widget--DLineEdit[alert="true"] QFrame#LineEditInsideFrame{
8 border-color: #FF8F00;
9 }
10
11 QFrame#LineEditInsideFrame {/*outside frame*/
12 background-color: rgba(0, 0, 0, 50);
13 border: 1px solid;
14 border-radius: 3;
15 border-color: black;
16 }
17
18 Dtk--Widget--DLineEdit #IconButton {
19 border: 0px solid;
20 border-left: 1px solid rgba(0, 0, 0, 50);
21 margin: 1px 0px 2px 0px;
22 }
23
24 Dtk--Widget--DLineEdit[alert="true"] #IconButton{
25 border-color: #FF8F00;
26 }
27
28 Dtk--Widget--DLineEdit #ClearButton {
29 qproperty-normalPic: ":/images/dark/images/input_clear_normal.svg";
30 qproperty-hoverPic: ":/images/dark/images/input_clear_hover.svg";
31 qproperty-pressPic: "/images/dark/images/input_clear_press.svg";
32 margin-right: 4px;
33 }
34
35 #AlertTooltip QLabel {
36 color: #FF8F00;
37 }
+0
-12
src/widgets/themes/dark/Dtk--Widget--DLinkButton.theme less more
0 Dtk--Widget--DLinkButton {
1 background-color:transparent;
2 border:none;
3 color:#b4b4b4;
4 }
5
6 Dtk--Widget--DLinkButton:hover {
7 color:#01BDFF;
8 }
9
10 Dtk--Widget--DLinkButton:pressed {
11 }
+0
-8
src/widgets/themes/dark/Dtk--Widget--DListView.theme less more
0 QAbstractScrollArea{
1 border: none;
2 background: transparent;
3 }
4
5 QAbstractScrollArea::corner{
6 background-color: transparent;
7 }
+0
-5
src/widgets/themes/dark/Dtk--Widget--DLoadingIndicator.theme less more
0 Dtk--Widget--DLoadingIndicator {
1 background: transparent;
2 qproperty-backgroundColor: transparent;
3 border: none;
4 }
+0
-24
src/widgets/themes/dark/Dtk--Widget--DOption.theme less more
0
1 Dtk--Widget--DOption {
2 margin:0 10px;
3 padding:0 10px;
4 qproperty-checkedIcon:url(:/images/dark/images/tick_transparent.png);
5 }
6
7 Dtk--Widget--DOption[checked="true"] {
8 background-color: lightblack;
9 border-radius:3px;
10 qproperty-checkedIcon:url(:/images/dark/images/tick_hover.png);
11 }
12
13 Dtk--Widget--DOption #OptionName {
14 color: #b4b4b4;
15 }
16
17 Dtk--Widget--DOption #OptionName:hover {
18 color: white;
19 }
20
21 Dtk--Widget--DOption[checked="true"] #OptionName {
22 color: #2ca7f8;
23 }
+0
-44
src/widgets/themes/dark/Dtk--Widget--DOptionList.theme less more
0 Dtk--Widget--DOptionList {
1 background-color: #1A1B1B;
2 border: none;
3 outline: none;
4 }
5
6 Dtk--Widget--DOptionList::item {
7 border: none;
8 outline: none;
9 }
10
11 /*
12 Dtk--Widget--DOptionList QPushButton:hover{
13 color: white;
14 }
15
16 Dtk--Widget--DButtonList QFrame#BorderFrame{
17 background-color: transparent;
18 }
19
20 Dtk--Widget--DButtonList QPushButton{
21 background-color: transparent;
22 color: #b4b4b4;
23 border: none;
24 border-radius:3px;
25 text-align: left center;
26 padding-left: 40px;
27 }
28
29 Dtk--Widget--DButtonList QPushButton:checked{
30 background-color: #66000000;
31 color: #2ca7f8;
32 }
33
34 Dtk--Widget--DButtonList QPushButton:checked[state="OnlyOne"]{
35 background-color: transparent;
36 color:#01BDFF;
37 }
38
39 Dtk--Widget--DButtonList QPushButton:checked[state="normal"]{
40 background-color: lightblack;
41 color:#01BDFF;
42 }
43 */
+0
-45
src/widgets/themes/dark/Dtk--Widget--DPasswdEditAnimated.theme less more
0 Dtk--Widget--DPasswdEditAnimated {
1 border-width: 1px;
2 border-style: solid;
3 border-radius: 3px;
4 border-color: rgba(255,255,255,.1);
5 background-color: #454647;
6 }
7
8 Dtk--Widget--DPasswdEditAnimated[editFocus="true"] {
9 border-color: #2CA7F8;
10 }
11
12 Dtk--Widget--DPasswdEditAnimated[alert="true"] {
13 border-color: #FF8F00;
14 }
15
16 Dtk--Widget--DPasswdEditAnimated #KeyboardButton {
17 qproperty-normalPic: url(:/images/dark/images/keyboard-normal.svg);
18 qproperty-hoverPic: url(:/images/dark/images/keyboard-hover.svg);
19 qproperty-pressPic: url(:/images/dark/images/keyboard-clicked.svg);
20 }
21
22 Dtk--Widget--DPasswdEditAnimated #PasswdEdit {
23
24 }
25
26 Dtk--Widget--DPasswdEditAnimated #Capslock {
27
28 }
29
30 Dtk--Widget--DPasswdEditAnimated #EyeButton {
31 qproperty-normalPic: url(:/images/dark/images/pw-visible-normal.svg);
32 qproperty-hoverPic: url(:/images/dark/images/pw-visible-hover.svg);
33 qproperty-pressPic: url(:/images/dark/images/pw-visible-clicked.svg);
34 }
35
36 Dtk--Widget--DPasswdEditAnimated #SubmitButton {
37 qproperty-normalPic: url(:/images/dark/images/submit-normal.svg);
38 qproperty-hoverPic: url(:/images/dark/images/submit-hover.svg);
39 qproperty-pressPic: url(:/images/dark/images/submit-clicked.svg);
40 }
41
42 Dtk--Widget--DPasswdEditAnimated #InvalidTip {
43 qproperty-backgroundColor: rgba(255,255,255,.3);
44 }
+0
-35
src/widgets/themes/dark/Dtk--Widget--DPasswordEdit.theme less more
0 Dtk--Widget--DPasswordEdit {
1 color: white;
2 }
3
4 Dtk--Widget--DPasswordEdit[isEchoMode="false"] #IconButton {
5 border-radius: 2px;
6 border-top-left-radius: 0px;
7 border-bottom-left-radius: 0px;
8 qproperty-normalPic:url(:/images/dark/images/show_password_normal.svg);
9 qproperty-hoverPic:url(:/images/dark/images/show_password_hover.svg);
10 qproperty-pressPic:url(:/images/dark/images/show_password_press.svg);
11 }
12
13 Dtk--Widget--DPasswordEdit[isEchoMode="true"] Dtk--Widget--DImageButton {
14 border-radius: 2px;
15 border-top-left-radius: 0px;
16 border-bottom-left-radius: 0px;
17 qproperty-normalPic:url(:/images/dark/images/hide_password_normal.svg);
18 qproperty-hoverPic:url(:/images/dark/images/hide_password_hover.svg);
19 qproperty-pressPic:url(:/images/dark/images/hide_password_press.svg);
20 }
21
22 Dtk--Widget--DPasswordEdit #IconButton[state="hover"] {
23 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
24 stop: 0 #8ccfff, stop: 1.0 #4bb8ff);
25 }
26
27 Dtk--Widget--DPasswordEdit #IconButton[state="press"] {
28 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
29 stop: 0 #0b8cff, stop: 1.0 #0aa1ff);
30 }
31
32 Dtk--Widget--DPasswordEdit[alert="true"] #IconButton{
33 border-color: #FF8F00;
34 }
+0
-8
src/widgets/themes/dark/Dtk--Widget--DScrollArea.theme less more
0 Dtk--Widget--DScrollArea{
1 border: none;
2 background: transparent;
3 }
4
5 Dtk--Widget--DScrollArea::corner{
6 background-color: transparent;
7 }
+0
-39
src/widgets/themes/dark/Dtk--Widget--DScrollBar.theme less more
0 Dtk--Widget--DScrollBar::add-line,Dtk--Widget--DScrollBar::sub-line,Dtk--Widget--DScrollBar::add-page,Dtk--Widget--DScrollBar::sub-page{
1 background-color: transparent;
2 }
3
4 Dtk--Widget--DScrollBar{
5 max-width: 10;
6 margin-right: 1px;
7 background-color: transparent;
8 }
9
10 Dtk--Widget--DScrollBar::handle{
11 background-color: rgba(255,255,255,0.2);
12 border-radius: 2px;
13 margin: 4px 2px 4px 2px;
14 }
15
16 Dtk--Widget--DScrollBar::handle:vertical{
17 min-height: 20px;
18 width: 8px;
19 }
20
21 Dtk--Widget--DScrollBar::handle:horizontal{
22 min-width: 20px;
23 height: 8px;
24 }
25
26 Dtk--Widget--DScrollBar::handle:hover{
27 background-color: rgba(255,255,255,0.4);
28 }
29
30 Dtk--Widget--DScrollBar::add-line {
31 border: none;
32 background: none;
33 }
34
35 Dtk--Widget--DScrollBar::sub-line {
36 border: none;
37 background: none;
38 }
+0
-37
src/widgets/themes/dark/Dtk--Widget--DSearchEdit.theme less more
0 Dtk--Widget--DSearchEdit {
1 border-radius: 4px;
2 }
3
4 Dtk--Widget--DSearchEdit #SearchIcon {
5 background-color:transparent;
6 margin: 2 -1 2 4 px;
7 border-image:url(:/images/dark/images/search.svg);
8 }
9
10 Dtk--Widget--DSearchEdit #ClearIcon {
11 background-color:transparent;
12 qproperty-normalPic:url(:/images/dark/images/input_clear_normal.svg);
13 qproperty-hoverPic:url(:/images/dark/images/input_clear_hover.svg);
14 qproperty-pressPic:url(:/images/dark/images/input_clear_press.svg);
15 }
16
17 Dtk--Widget--DSearchEdit #Edit {
18 background-color:transparent;
19 border-radius:0;
20 color:#fff;
21 padding-right:15px;
22 padding-bottom: 1px;
23 }
24
25 Dtk--Widget--DSearchEdit QFrame#DEditInsideFrame {
26 background-color: rgba(255,255,255,15%);
27 border: 0px solid;
28 border-radius: 4px;
29 border-color: rgba(0, 0, 0, 0.08);
30 }
31
32 Dtk--Widget--DSearchEdit #PlaceHolder {
33 color:white;
34 margin:0 0 0 3px;
35 font-size:12px;
36 }
+0
-24
src/widgets/themes/dark/Dtk--Widget--DSegmentedControl.theme less more
0 Dtk--Widget--DSegmentedControl Dtk--Widget--DSegmentedHighlight#Highlight{
1 background-color: #2ca7f8;
2 color: white;
3 border: none;
4 }
5
6 Dtk--Widget--DSegmentedControl QToolButton{
7 color: white;
8 background: rgba(255, 255, 255, 38);
9 border: none;
10 padding-bottom: 2px;
11 }
12
13 Dtk--Widget--DSegmentedControl QToolButton:hover{
14 background: rgba(255, 255, 255, 77);
15 }
16
17 Dtk--Widget--DSegmentedControl QToolButton:pressed{
18 background: rgba(255, 255, 255, 26);
19 }
20
21 Dtk--Widget--DSegmentedControl QToolButton:disabled{
22 color: white;
23 }
+0
-11
src/widgets/themes/dark/Dtk--Widget--DSeparatorHorizontal.theme less more
0 Dtk--Widget--DSeparatorHorizontal QWidget#DSeparatorTopRec {
1 background-color: #99000000;
2 min-height: 1;
3 max-height: 1;
4 }
5
6 Dtk--Widget--DSeparatorHorizontal QWidget#DSeparatorBottomRec {
7 background-color: #0cffffff;
8 min-height: 1;
9 max-height: 1;
10 }
+0
-11
src/widgets/themes/dark/Dtk--Widget--DSeparatorVertical.theme less more
0 Dtk--Widget--DSeparatorVertical QWidget#DSeparatorLeftRec {
1 background-color: #99000000;
2 min-width: 1;
3 max-width: 1;
4 }
5
6 Dtk--Widget--DSeparatorVertical QWidget#DSeparatorRightRec {
7 background-color: #0cffffff;
8 min-width: 1;
9 max-width: 1;
10 }
+0
-52
src/widgets/themes/dark/Dtk--Widget--DSettingsDialog.theme less more
0 #DSettingsDialog{
1 qproperty-backgroundColor: white;
2 qproperty-borderColor: rgba(0, 0, 0, 0.2);
3 }
4
5 #Navigation{
6 border: none;
7 border-right: 1px solid rgba(0,0,0,0.1);
8 }
9
10 #NavigationBar{
11 border: none;
12 }
13
14 #ButtonGroupSingle {
15 border: 1px solid rgba(0, 0, 0, 0.08);
16 border-radius: 4.0px;
17 }
18 #ButtonGroupBegin {
19 border: 1px solid rgba(0, 0, 0, 0.08);
20 border-top-left-radius: 4.0px;
21 border-bottom-left-radius: 4.0px;
22 }
23 #ButtonGroupBegin:checked {
24 background-color: #2ca7f8;
25 border: solid 1px rgba(0, 90, 224, 0.22);
26 }
27 #ButtonGroupMiddle {
28 border-top: 1px solid rgba(0, 0, 0, 0.08);
29 border-bottom: 1px solid rgba(0, 0, 0, 0.08);
30 border-right: 1px solid rgba(0, 0, 0, 0.08);
31 }
32 #ButtonGroupMiddle:checked {
33 background-color: #2ca7f8;
34 border: solid 1px rgba(0, 90, 224, 0.22);
35 }
36 #ButtonGroupEnd {
37 border: 1px solid rgba(0, 0, 0, 0.08);
38 border-left: none;
39 border-top-right-radius: 4.0px;
40 border-bottom-right-radius: 4.0px;
41 }
42 #ButtonGroupEnd:checked {
43 background-color: #2ca7f8;
44 border: solid 1px rgba(0, 90, 224, 0.22);
45 }
46
47 #DSettingsDialogClose{
48 qproperty-normalPic: url(:/images/light/images/window/close_normal.svg);
49 qproperty-hoverPic: url(:/images/light/images/window/close_hover.svg);
50 qproperty-pressPic: url(:/images/light/images/window/close_press.svg);
51 }
+0
-16
src/widgets/themes/dark/Dtk--Widget--DShortcutEdit.theme less more
0
1 Dtk--Widget--DShortcutEdit {
2 border-radius:4px;
3 }
4
5 Dtk--Widget--DShortcutEdit #Edit {
6 color:#fff;
7 background-color:#2f2626;
8 padding:4px 3px;
9 }
10
11 Dtk--Widget--DShortcutEdit #Label {
12 qproperty-echoNormal:black;
13 qproperty-echoHover:red;
14 qproperty-echoInvalid:orange;
15 }
+0
-61
src/widgets/themes/dark/Dtk--Widget--DSlider.theme less more
0 Dtk--Widget--DSlider {
1 qproperty-tipColor: #505050;
2 qproperty-scaleColor: #505050;
3 qproperty-hoverValueColor: #B4B4B4;
4 }
5
6 /*************************************For Round Handle***************************************/
7 Dtk--Widget--DSlider::groove[handleType="1"] {
8 margin-left: 10px;
9 margin-right: 10px;
10 border-width: 0px 2px 1px 2px;
11 border-image: url(:/images/dark/images/slider_bg.png) 0 2 1 2 stretch;
12 height: 8px;
13 }
14
15 Dtk--Widget--DSlider::handle[handleType="1"] {
16 background: url(:/images/dark/images/slider_handle.svg);
17 width: 18px;
18 height: 18px;
19 margin-top: -5px;
20 margin-bottom: -5px;
21 margin-left: -10px;
22 margin-right: -10px;
23 border-radius: 6px;
24 }
25
26 Dtk--Widget--DSlider::add-page:horizontal[handleType="1"] {
27 border-width: 0px 2px 1px 2px;
28 border-image: url(:/images/dark/images/slider_bg.png) 0 2 1 2 stretch;
29 margin-right: 10px;
30 height: 8px;
31 }
32
33 Dtk--Widget--DSlider::sub-page[handleType="1"] {
34 border-width: 0px 2px 0px 2px;
35 border-image: url(:/images/dark/images/slider_bg_active.png) 0 2 0 2 stretch;
36 margin-top: 1px;
37 margin-bottom: 2px;
38 margin-left: 10;
39 height: 6px;
40 }
41
42 /*************************************For Sharp Handle***************************************/
43 Dtk--Widget--DSlider::groove[handleType="0"] {
44 margin-left: 9px;
45 margin-right: 9px;
46 border-width: 0px 2px 1px 2px;
47 border-image: url(:/images/dark/images/slider_bg.png) 0 2 1 2 stretch;
48 height: 8px;
49 }
50
51 Dtk--Widget--DSlider::handle[handleType="0"] {
52 background: url(:/images/dark/images/slider_balance.png);
53 width: 16px;
54 height: 20px;
55 margin-top: -6px;
56 margin-bottom: -6px;
57 margin-left: -9px;
58 margin-right: -9px;
59 }
60
+0
-44
src/widgets/themes/dark/Dtk--Widget--DSpinBox.theme less more
0 QAbstractSpinBox {
1 min-height: 22px;
2 color: #fff;
3 border-radius: 3;
4 padding-right: 53px;
5 background-color: rgba(255, 255, 255, 26);/*use as outside border*/
6 }
7
8 QFrame#SpinBoxInsideFrame {/*outside frame*/
9 background-color: rgba(0, 0, 0, 50);
10 border: 1px solid black;
11 border-radius: 3;
12 }
13
14 #SpinBox_ImageButton {
15 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
16 stop: 0 #50333333,
17 stop: 1.0 #50000000);
18 border-left: 1px solid #AA111111;
19 }
20
21 QAbstractSpinBox[alert="true"] QFrame#SpinBoxInsideFrame{
22 border-color: #FF8F00;
23 }
24
25 QAbstractSpinBox::up-button {
26 border: none;
27 background: transparent;
28 }
29
30 QAbstractSpinBox::up-arrow {
31 border: none;
32 background: transparent;
33 }
34
35 QAbstractSpinBox::down-button {
36 border: none;
37 background: transparent;
38 }
39
40 QAbstractSpinBox::down-arrow {
41 border: none;
42 background: transparent;
43 }
+0
-3
src/widgets/themes/dark/Dtk--Widget--DStackWidget.theme less more
0 Dtk--Widget--DStackWidget{
1 background: transparent;
2 }
+0
-2
src/widgets/themes/dark/Dtk--Widget--DSwitchButton.theme less more
0 Dtk--Widget--DSwitchButton#DSwitchButton{
1 }
+0
-22
src/widgets/themes/dark/Dtk--Widget--DTextButton.theme less more
0 Dtk--Widget--DTextButton {
1 padding:0 5px;
2 min-width:50px;
3 color: #CCCCCC;
4 outline:none;
5 border-width:5px 5px 5px 5px;
6 border-image:url(:/images/dark/images/dark_button_normal_bg.png) 5 5 5 5 stretch;
7 background-color:transparent;
8 }
9
10 Dtk--Widget--DTextButton:hover {
11 color: #AAA;
12 border-image:url(:/images/dark/images/dark_button_hover_bg.png) 5 5 5 5 stretch;
13 }
14
15 Dtk--Widget--DTextButton:pressed {
16 border-image:url(:/images/dark/images/dark_button_press_bg.png) 5 5 5 5 stretch;
17 }
18
19 Dtk--Widget--DTextButton:checked {
20 color:#01BDFF;
21 }
+0
-16
src/widgets/themes/dark/Dtk--Widget--DTextEdit.theme less more
0 Dtk--Widget--DTextEdit {
1 color: #fff;
2 border-radius: 3;
3 background-color: rgba(255, 255, 255, 26);/*use as outside border*/
4 }
5
6 Dtk--Widget--DTextEdit[alert="true"] QFrame#TextEditInsideFrame{
7 border-color: #FF8F00;
8 }
9
10 QFrame#TextEditInsideFrame {/*outside frame*/
11 background-color: rgba(0, 0, 0, 50);
12 border: 1px solid;
13 border-radius: 3;
14 border-color: black;
15 }
+0
-20
src/widgets/themes/dark/Dtk--Widget--DTitlebar.theme less more
0 Dtk--Widget--DTitlebar {
1 background: qlineargradient(x1:0 y1:0, x2:0 y2:1,
2 stop:0 rgba(0,0,0,85%), stop:1 rgba(0,0,0,85%));
3 }
4
5 Dtk--Widget--DTitlebar[transparent=true] {
6 background: transparent;
7 }
8
9 Dtk--Widget--DWindowCloseButton {
10 qproperty-normalPic: url(:/images/dark/images/window/close_normal.svg);
11 qproperty-hoverPic: url(:/images/dark/images/window/close_hover.svg);
12 qproperty-pressPic: url(:/images/dark/images/window/close_press.svg);
13 }
14
15 #DTitlebarDWindowQuitFullscreenButton {
16 qproperty-normalPic: url(:/images/dark/images/window/quit_fullscreen_normal.svg);
17 qproperty-hoverPic: url(:/images/dark/images/window/quit_fullscreen_hover.svg);
18 qproperty-pressPic: url(:/images/dark/images/window/quit_fullscreen_press.svg);
19 }
+0
-5
src/widgets/themes/dark/Dtk--Widget--DToast.theme less more
0 Dtk--Widget--DToast {
1 border: 1px solid rgba(0,0,0,10%);
2 border-radius: 4px;
3 background: rgba(49,49,49, 100%);
4 }
+0
-6
src/widgets/themes/dark/Dtk--Widget--DWindowCloseButton.theme less more
0 Dtk--Widget--DWindowCloseButton {
1 qproperty-normalPic: url(:/images/dark/images/window/close_normal.svg);
2 qproperty-hoverPic: url(:/images/dark/images/window/close_hover.svg);
3 qproperty-pressPic: url(:/images/dark/images/window/close_press.svg);
4 qproperty-disabledPic: url(:/images/dark/images/window/close_disabled.svg);
5 }
+0
-13
src/widgets/themes/dark/Dtk--Widget--DWindowMaxButton.theme less more
0 Dtk--Widget--DWindowMaxButton[isMaximized=true] {
1 qproperty-normalPic: url(:/images/dark/images/window/unmaximize_normal.svg);
2 qproperty-hoverPic: url(:/images/dark/images/window/unmaximize_hover.svg);
3 qproperty-pressPic: url(:/images/dark/images/window/unmaximize_press.svg);
4 qproperty-disabledPic: url(:/images/dark/images/window/unmaximize_disabled.svg);
5 }
6
7 Dtk--Widget--DWindowMaxButton[isMaximized=false] {
8 qproperty-normalPic: url(:/images/dark/images/window/maximize_normal.svg);
9 qproperty-hoverPic: url(:/images/dark/images/window/maximize_hover.svg);
10 qproperty-pressPic: url(:/images/dark/images/window/maximize_press.svg);
11 qproperty-disabledPic: url(:/images/dark/images/window/maximize_disabled.svg);
12 }
+0
-6
src/widgets/themes/dark/Dtk--Widget--DWindowMinButton.theme less more
0 Dtk--Widget--DWindowMinButton {
1 qproperty-normalPic: url(:/images/dark/images/window/minimize_normal.svg);
2 qproperty-hoverPic: url(:/images/dark/images/window/minimize_hover.svg);
3 qproperty-pressPic: url(:/images/dark/images/window/minimize_press.svg);
4 qproperty-disabledPic: url(:/images/dark/images/window/minimize_disabled.svg);
5 }
+0
-6
src/widgets/themes/dark/Dtk--Widget--DWindowOptionButton.theme less more
0 Dtk--Widget--DWindowOptionButton {
1 qproperty-normalPic: url(:/images/dark/images/window/menu_normal.svg);
2 qproperty-hoverPic: url(:/images/dark/images/window/menu_hover.svg);
3 qproperty-pressPic: url(:/images/dark/images/window/menu_press.svg);
4 qproperty-disabledPic: url(:/images/dark/images/window/menu_disabled.svg);
5 }
+0
-5
src/widgets/themes/dark/Dtk--Widget--DWindowRestoreButton.theme less more
0 Dtk--Widget--DWindowRestoreButton {
1 qproperty-normalPic: url(:/images/dark/images/window/unmaximize_normal.svg);
2 qproperty-hoverPic: url(:/images/dark/images/window/unmaximize_hover.svg);
3 qproperty-pressPic: url(:/images/dark/images/window/unmaximize_press.svg);
4 }
src/widgets/themes/dark/dialogs/images/check_focus.png less more
Binary diff not shown
src/widgets/themes/dark/dialogs/images/dark_check.png less more
Binary diff not shown
src/widgets/themes/dark/dialogs/images/dark_check_checked.png less more
Binary diff not shown
src/widgets/themes/dark/dialogs/images/dark_check_checked_hover.png less more
Binary diff not shown
src/widgets/themes/dark/dialogs/images/dark_close_small_hover.png less more
Binary diff not shown
src/widgets/themes/dark/dialogs/images/dark_close_small_normal.png less more
Binary diff not shown
src/widgets/themes/dark/dialogs/images/dark_close_small_press.png less more
Binary diff not shown
src/widgets/themes/dark/dialogs/images/dark_minimise_small_hover.png less more
Binary diff not shown
src/widgets/themes/dark/dialogs/images/dark_minimise_small_normal.png less more
Binary diff not shown
src/widgets/themes/dark/dialogs/images/dark_minimise_small_press.png less more
Binary diff not shown
src/widgets/themes/dark/dialogs/images/user-trash-full.png less more
Binary diff not shown
src/widgets/themes/dark/images/add_hover.png less more
Binary diff not shown
src/widgets/themes/dark/images/add_normal.png less more
Binary diff not shown
src/widgets/themes/dark/images/add_press.png less more
Binary diff not shown
src/widgets/themes/dark/images/arrow_down_hover.png less more
Binary diff not shown
+0
-12
src/widgets/themes/dark/images/arrow_down_hover.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="9px" height="9px" viewBox="0 0 9 9" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 47.1 (45422) - http://www.bohemiancoding.com/sketch -->
3 <title>down_hover</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="箭头" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
7 <g id="down_hover" stroke-width="1.2" stroke="#FFFFFF">
8 <polyline id="down-copy-2" points="8.07106781 3 4.53553391 6.53553391 1 3"></polyline>
9 </g>
10 </g>
11 </svg>
+0
-12
src/widgets/themes/dark/images/arrow_down_insensitive.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="9px" height="9px" viewBox="0 0 9 9" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 47.1 (45422) - http://www.bohemiancoding.com/sketch -->
3 <title>down_insensitive</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="箭头" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.400000006">
7 <g id="down_insensitive" stroke-width="1.2" stroke="#DDDDDD">
8 <polyline id="down-copy-2" points="8.07106781 3 4.53553391 6.53553391 1 3"></polyline>
9 </g>
10 </g>
11 </svg>
src/widgets/themes/dark/images/arrow_down_normal.png less more
Binary diff not shown
+0
-12
src/widgets/themes/dark/images/arrow_down_normal.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="9px" height="9px" viewBox="0 0 9 9" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 47.1 (45422) - http://www.bohemiancoding.com/sketch -->
3 <title>down_normal</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="箭头" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
7 <g id="down_normal" stroke-width="1.2" stroke="#DDDDDD">
8 <polyline id="down-copy-2" points="8.07106781 3 4.53553391 6.53553391 1 3"></polyline>
9 </g>
10 </g>
11 </svg>
src/widgets/themes/dark/images/arrow_down_press.png less more
Binary diff not shown
+0
-12
src/widgets/themes/dark/images/arrow_down_press.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="9px" height="9px" viewBox="0 0 9 9" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 47.1 (45422) - http://www.bohemiancoding.com/sketch -->
3 <title>down_press</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="箭头" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
7 <g id="down_press" stroke-width="1.2" stroke="#2CA7F8">
8 <polyline id="down-copy-2" points="8.07106781 3 4.53553391 6.53553391 1 3"></polyline>
9 </g>
10 </g>
11 </svg>
src/widgets/themes/dark/images/arrow_down_white.png less more
Binary diff not shown
src/widgets/themes/dark/images/arrow_left_hover.png less more
Binary diff not shown
src/widgets/themes/dark/images/arrow_left_normal.png less more
Binary diff not shown
src/widgets/themes/dark/images/arrow_left_press.png less more
Binary diff not shown
src/widgets/themes/dark/images/arrow_left_white.png less more
Binary diff not shown
src/widgets/themes/dark/images/arrow_right_hover.png less more
Binary diff not shown
src/widgets/themes/dark/images/arrow_right_normal.png less more
Binary diff not shown
src/widgets/themes/dark/images/arrow_right_press.png less more
Binary diff not shown
src/widgets/themes/dark/images/arrow_right_white.png less more
Binary diff not shown
src/widgets/themes/dark/images/arrow_up_hover.png less more
Binary diff not shown
+0
-12
src/widgets/themes/dark/images/arrow_up_hover.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="9px" height="9px" viewBox="0 0 9 9" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 47.1 (45422) - http://www.bohemiancoding.com/sketch -->
3 <title>up_hover</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="箭头" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
7 <g id="up_hover" stroke-width="1.2" stroke="#FFFFFF">
8 <polyline id="down-copy-2" transform="translate(4.535534, 4.767767) scale(1, -1) translate(-4.535534, -4.767767) " points="8.07106781 3 4.53553391 6.53553391 1 3"></polyline>
9 </g>
10 </g>
11 </svg>
+0
-12
src/widgets/themes/dark/images/arrow_up_insensitive.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="9px" height="9px" viewBox="0 0 9 9" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 47.1 (45422) - http://www.bohemiancoding.com/sketch -->
3 <title>up_insensitive</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="箭头" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.400000006">
7 <g id="up_insensitive" stroke-width="1.2" stroke="#DDDDDD">
8 <polyline id="down-copy-2" transform="translate(4.535534, 4.767767) scale(1, -1) translate(-4.535534, -4.767767) " points="8.07106781 3 4.53553391 6.53553391 1 3"></polyline>
9 </g>
10 </g>
11 </svg>
src/widgets/themes/dark/images/arrow_up_normal.png less more
Binary diff not shown
+0
-12
src/widgets/themes/dark/images/arrow_up_normal.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="9px" height="9px" viewBox="0 0 9 9" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 47.1 (45422) - http://www.bohemiancoding.com/sketch -->
3 <title>up_normal</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="箭头" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
7 <g id="up_normal" stroke-width="1.2" stroke="#DDDDDD">
8 <polyline id="down-copy-2" transform="translate(4.535534, 4.767767) scale(1, -1) translate(-4.535534, -4.767767) " points="8.07106781 3 4.53553391 6.53553391 1 3"></polyline>
9 </g>
10 </g>
11 </svg>
src/widgets/themes/dark/images/arrow_up_press.png less more
Binary diff not shown
+0
-12
src/widgets/themes/dark/images/arrow_up_press.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="9px" height="9px" viewBox="0 0 9 9" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 47.1 (45422) - http://www.bohemiancoding.com/sketch -->
3 <title>up_press</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="箭头" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
7 <g id="up_press" stroke-width="1.2" stroke="#2CA7F8">
8 <polyline id="down-copy-2" transform="translate(4.535534, 4.767767) scale(1, -1) translate(-4.535534, -4.767767) " points="8.07106781 3 4.53553391 6.53553391 1 3"></polyline>
9 </g>
10 </g>
11 </svg>
src/widgets/themes/dark/images/arrow_up_white.png less more
Binary diff not shown
src/widgets/themes/dark/images/button_center_normal.png less more
Binary diff not shown
src/widgets/themes/dark/images/button_center_press.png less more
Binary diff not shown
src/widgets/themes/dark/images/button_left_normal.png less more
Binary diff not shown
src/widgets/themes/dark/images/button_left_press.png less more
Binary diff not shown
src/widgets/themes/dark/images/button_right_normal.png less more
Binary diff not shown
src/widgets/themes/dark/images/button_right_press.png less more
Binary diff not shown
+0
-1
src/widgets/themes/dark/images/capslock-clicked.svg less more
0 <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1524020868462" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3181" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M511.238149 536.597211M511.238149 536.597211M105.142154 907.508869M105.142154 265.895883M894.192074 633.006981c-7.892761 0-15.782451-3.024893-21.784142-9.067516l-360.869954-363.408777-361.487008 363.426173c-11.95631 12.020778-31.394011 12.07399-43.414789 0.115634-12.020778-11.95631-12.072967-31.394011-0.116657-43.414789l383.27115-385.326972c5.762237-5.792936 13.595646-9.05012 21.765723-9.05012 0.004093 0 0.008186 0 0.01228 0 8.175193 0.00307 16.010649 3.267417 21.770839 9.067516l382.635677 385.326972c11.946077 12.031011 11.878538 31.468712-0.152473 43.414789C909.835356 630.036323 902.01218 633.006981 894.192074 633.006981zM511.238149 602.307795m-45.025473 0a44 44 0 1 0 90.050945 0 44 44 0 1 0-90.050945 0ZM511.238149 792.514835m-45.025473 0a44 44 0 1 0 90.050945 0 44 44 0 1 0-90.050945 0Z" p-id="3182" fill="#2c2c2c"></path></svg>
+0
-1
src/widgets/themes/dark/images/capslock-hover.svg less more
0 <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1524020868462" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3181" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M511.238149 536.597211M511.238149 536.597211M105.142154 907.508869M105.142154 265.895883M894.192074 633.006981c-7.892761 0-15.782451-3.024893-21.784142-9.067516l-360.869954-363.408777-361.487008 363.426173c-11.95631 12.020778-31.394011 12.07399-43.414789 0.115634-12.020778-11.95631-12.072967-31.394011-0.116657-43.414789l383.27115-385.326972c5.762237-5.792936 13.595646-9.05012 21.765723-9.05012 0.004093 0 0.008186 0 0.01228 0 8.175193 0.00307 16.010649 3.267417 21.770839 9.067516l382.635677 385.326972c11.946077 12.031011 11.878538 31.468712-0.152473 43.414789C909.835356 630.036323 902.01218 633.006981 894.192074 633.006981zM511.238149 602.307795m-45.025473 0a44 44 0 1 0 90.050945 0 44 44 0 1 0-90.050945 0ZM511.238149 792.514835m-45.025473 0a44 44 0 1 0 90.050945 0 44 44 0 1 0-90.050945 0Z" p-id="3182" fill="#1296db"></path></svg>
+0
-1
src/widgets/themes/dark/images/capslock-normal.svg less more
0 <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1524020868462" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3181" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M511.238149 536.597211M511.238149 536.597211M105.142154 907.508869M105.142154 265.895883M894.192074 633.006981c-7.892761 0-15.782451-3.024893-21.784142-9.067516l-360.869954-363.408777-361.487008 363.426173c-11.95631 12.020778-31.394011 12.07399-43.414789 0.115634-12.020778-11.95631-12.072967-31.394011-0.116657-43.414789l383.27115-385.326972c5.762237-5.792936 13.595646-9.05012 21.765723-9.05012 0.004093 0 0.008186 0 0.01228 0 8.175193 0.00307 16.010649 3.267417 21.770839 9.067516l382.635677 385.326972c11.946077 12.031011 11.878538 31.468712-0.152473 43.414789C909.835356 630.036323 902.01218 633.006981 894.192074 633.006981zM511.238149 602.307795m-45.025473 0a44 44 0 1 0 90.050945 0 44 44 0 1 0-90.050945 0ZM511.238149 792.514835m-45.025473 0a44 44 0 1 0 90.050945 0 44 44 0 1 0-90.050945 0Z" p-id="3182" fill="#e6e6e6"></path></svg>
src/widgets/themes/dark/images/checkbox_checked.png less more
Binary diff not shown
src/widgets/themes/dark/images/checkbox_checked_hover.png less more
Binary diff not shown
src/widgets/themes/dark/images/checkbox_checked_insensitive.png less more
Binary diff not shown
src/widgets/themes/dark/images/checkbox_unchecked.png less more
Binary diff not shown
src/widgets/themes/dark/images/checkbox_unchecked_hover.png less more
Binary diff not shown
src/widgets/themes/dark/images/checkbox_unchecked_insensitive.png less more
Binary diff not shown
src/widgets/themes/dark/images/clear_white.png less more
Binary diff not shown
src/widgets/themes/dark/images/combobox_down_arrow.png less more
Binary diff not shown
src/widgets/themes/dark/images/combobox_up_arrow.png less more
Binary diff not shown
src/widgets/themes/dark/images/dark_button_hover_bg.png less more
Binary diff not shown
src/widgets/themes/dark/images/dark_button_normal_bg.png less more
Binary diff not shown
src/widgets/themes/dark/images/dark_button_press_bg.png less more
Binary diff not shown
src/widgets/themes/dark/images/delete_hover.png less more
Binary diff not shown
src/widgets/themes/dark/images/delete_multi_hover.png less more
Binary diff not shown
src/widgets/themes/dark/images/delete_multi_normal.png less more
Binary diff not shown
src/widgets/themes/dark/images/delete_multi_press.png less more
Binary diff not shown
src/widgets/themes/dark/images/delete_normal.png less more
Binary diff not shown
src/widgets/themes/dark/images/delete_press.png less more
Binary diff not shown
src/widgets/themes/dark/images/dock_preview_close_hover.png less more
Binary diff not shown
src/widgets/themes/dark/images/dock_preview_close_normal.png less more
Binary diff not shown
src/widgets/themes/dark/images/dock_preview_close_press.png less more
Binary diff not shown
src/widgets/themes/dark/images/file_24.png less more
Binary diff not shown
src/widgets/themes/dark/images/folder_24.png less more
Binary diff not shown
src/widgets/themes/dark/images/folder_up_24.png less more
Binary diff not shown
+0
-3
src/widgets/themes/dark/images/hide_password_hover.svg less more
0 <svg height="26" viewBox="0 0 24 26" width="24" xmlns="http://www.w3.org/2000/svg">
1 <path d="m1.76689 3.83867c.02923-.00532.05934-.0081.09011-.0081.27614 0 .5.22386.5.5 0 1.24396 1.40857 2.31487 3.20242 2.31487 1.79393 0 3.20251-1.07091 3.20251-2.31487 0-.27614.22386-.5.5-.5s.5.22386.5.5c0 1.86524-1.90674 3.31487-4.20251 3.31487-2.27303 0-4.16474-1.42117-4.20186-3.25976-.13676.18858-.34024.46861-.4038.55023-.16967.21787-.48383.25695-.7017.08728s-.25695-.48383-.08728-.7017c.08056-.10345.46737-.63978.51568-.7053.2714-.3681.51833-.67784.78846-.97801 1.1868-1.31874 2.51585-2.08921 4.12131-2.08921 2.5817 0 4.0098 1.21988 5.46782 3.83633.13442.24122.04784.54573-.19338.68015s-.54573.04784-.68015-.19338c-1.30015-2.33314-2.45909-3.32311-4.59429-3.32311-1.27563 0-2.36308.63041-3.378 1.75816-.15179.16866-.29679.34226-.44534.53153z" fill="#ddd" transform="translate(7 9)"/>
2 </svg>
+0
-14
src/widgets/themes/dark/images/hide_password_normal.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="24px" height="26px" viewBox="0 0 24 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 48.2 (47327) - http://www.bohemiancoding.com/sketch -->
3 <title>hide_password_normal</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="不透明控件库" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(-1789.000000, -1598.000000)">
7 <g id="show_password_normal" transform="translate(1789.000000, 1598.000000)" fill="#DDDDDD" fill-rule="nonzero">
8 <g id="eye" transform="translate(7.000000, 9.000000)">
9 <path d="M1.76689308,3.83867328 C1.79612248,3.83335357 1.82623807,3.8305751 1.85700261,3.8305751 C2.13314499,3.8305751 2.35700261,4.05443272 2.35700261,4.3305751 C2.35700261,5.57453324 3.76557654,6.64545003 5.5594192,6.64545003 C7.3533453,6.64545003 8.761933,5.57454219 8.761933,4.3305751 C8.761933,4.05443272 8.98579063,3.8305751 9.261933,3.8305751 C9.53807537,3.8305751 9.761933,4.05443272 9.761933,4.3305751 C9.761933,6.19581212 7.85519365,7.64545003 5.5594192,7.64545003 C3.28638599,7.64545003 1.39468224,6.22427539 1.35755848,4.38568631 C1.22079921,4.57427023 1.01732289,4.85429518 0.953762249,4.93591467 C0.784096188,5.15378629 0.469934832,5.19286461 0.252063221,5.02319854 C0.0341916097,4.85353248 -0.00488671,4.53937113 0.164779351,4.32149952 C0.245342309,4.218047 0.632149981,3.68172073 0.680457004,3.61620162 C0.951854903,3.24810294 1.19878313,2.9383624 1.46891901,2.63819536 C2.65572205,1.31945473 3.98477078,0.548984955 5.59022902,0.548984955 C8.17192531,0.548984955 9.60002751,1.76886965 11.0580483,4.38531981 C11.1924674,4.6265378 11.1058897,4.93105182 10.8646717,5.06547091 C10.6234538,5.19989 10.3189397,5.11331238 10.1845206,4.87209438 C8.8843754,2.53895529 7.72543077,1.54898495 5.59022902,1.54898495 C4.31459492,1.54898495 3.22714775,2.17939463 2.21223096,3.30714031 C2.06044327,3.47580233 1.91543662,3.6493985 1.76689308,3.83867328 Z" id="Combined-Shape"></path>
10 </g>
11 </g>
12 </g>
13 </svg>
+0
-12
src/widgets/themes/dark/images/hide_password_press.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="24px" height="26px" viewBox="0 0 24 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 48.2 (47327) - http://www.bohemiancoding.com/sketch -->
3 <title>hide_password_press</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="不透明控件库" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(-1851.000000, -1598.000000)">
7 <g id="show_password_normal" transform="translate(1851.000000, 1598.000000)">
8 <g id="eye" transform="translate(7.000000, 9.000000)"></g>
9 </g>
10 </g>
11 </svg>
src/widgets/themes/dark/images/icon_view_hover.png less more
Binary diff not shown
src/widgets/themes/dark/images/icon_view_normal.png less more
Binary diff not shown
src/widgets/themes/dark/images/icon_view_press.png less more
Binary diff not shown
+0
-12
src/widgets/themes/dark/images/input_clear_hover.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="14px" height="14px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
3 <title>input_clear_hover</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="输入框" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" fill-opacity="0.7">
7 <g id="input_clear_hover" fill="#000000">
8 <path d="M7.70710678,6.9999925 L10.3535534,4.35354589 C10.5488155,4.15828374 10.5488155,3.84170126 10.3535534,3.64643911 C10.1582912,3.45117696 9.84170876,3.45117696 9.64644661,3.64643911 L7,6.29288572 L4.35355339,3.64643911 C4.15829124,3.45117696 3.84170876,3.45117696 3.64644661,3.64643911 C3.45118446,3.84170126 3.45118446,4.15828374 3.64644661,4.35354589 L6.29289322,6.9999925 L3.64644661,9.64643911 C3.45118446,9.84170126 3.45118446,10.1582837 3.64644661,10.3535459 C3.84170876,10.548808 4.15829124,10.548808 4.35355339,10.3535459 L7,7.70709928 L9.64644661,10.3535459 C9.84170876,10.548808 10.1582912,10.548808 10.3535534,10.3535459 C10.5488155,10.1582837 10.5488155,9.84170126 10.3535534,9.64643911 L7.70710678,6.9999925 Z M7,14 C3.13400675,14 0,10.8659932 0,7 C0,3.13400675 3.13400675,0 7,0 C10.8659932,0 14,3.13400675 14,7 C14,10.8659932 10.8659932,14 7,14 Z" id="input_clear_"></path>
9 </g>
10 </g>
11 </svg>
+0
-12
src/widgets/themes/dark/images/input_clear_normal.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="14px" height="14px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
3 <title>input_clear_normal</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="输入框" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" fill-opacity="0.5">
7 <g id="清除" fill="#000000">
8 <path d="M7.70710678,6.9999925 L10.3535534,4.35354589 C10.5488155,4.15828374 10.5488155,3.84170126 10.3535534,3.64643911 C10.1582912,3.45117696 9.84170876,3.45117696 9.64644661,3.64643911 L7,6.29288572 L4.35355339,3.64643911 C4.15829124,3.45117696 3.84170876,3.45117696 3.64644661,3.64643911 C3.45118446,3.84170126 3.45118446,4.15828374 3.64644661,4.35354589 L6.29289322,6.9999925 L3.64644661,9.64643911 C3.45118446,9.84170126 3.45118446,10.1582837 3.64644661,10.3535459 C3.84170876,10.548808 4.15829124,10.548808 4.35355339,10.3535459 L7,7.70709928 L9.64644661,10.3535459 C9.84170876,10.548808 10.1582912,10.548808 10.3535534,10.3535459 C10.5488155,10.1582837 10.5488155,9.84170126 10.3535534,9.64643911 L7.70710678,6.9999925 Z M7,14 C3.13400675,14 0,10.8659932 0,7 C0,3.13400675 3.13400675,0 7,0 C10.8659932,0 14,3.13400675 14,7 C14,10.8659932 10.8659932,14 7,14 Z"></path>
9 </g>
10 </g>
11 </svg>
+0
-12
src/widgets/themes/dark/images/input_clear_press.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="14px" height="14px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
3 <title>input_clear_press</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="输入框" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
7 <g id="input_clear_press" fill="#2CA7F8">
8 <path d="M7.70710678,6.9999925 L10.3535534,4.35354589 C10.5488155,4.15828374 10.5488155,3.84170126 10.3535534,3.64643911 C10.1582912,3.45117696 9.84170876,3.45117696 9.64644661,3.64643911 L7,6.29288572 L4.35355339,3.64643911 C4.15829124,3.45117696 3.84170876,3.45117696 3.64644661,3.64643911 C3.45118446,3.84170126 3.45118446,4.15828374 3.64644661,4.35354589 L6.29289322,6.9999925 L3.64644661,9.64643911 C3.45118446,9.84170126 3.45118446,10.1582837 3.64644661,10.3535459 C3.84170876,10.548808 4.15829124,10.548808 4.35355339,10.3535459 L7,7.70709928 L9.64644661,10.3535459 C9.84170876,10.548808 10.1582912,10.548808 10.3535534,10.3535459 C10.5488155,10.1582837 10.5488155,9.84170126 10.3535534,9.64643911 L7.70710678,6.9999925 Z M7,14 C3.13400675,14 0,10.8659932 0,7 C0,3.13400675 3.13400675,0 7,0 C10.8659932,0 14,3.13400675 14,7 C14,10.8659932 10.8659932,14 7,14 Z" id="input_clear_"></path>
9 </g>
10 </g>
11 </svg>
+0
-1
src/widgets/themes/dark/images/keyboard-clicked.svg less more
0 <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1524021535602" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5467" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M928.67 206.44H95.33A83.42 83.42 0 0 0 12 289.78v444.44a83.42 83.42 0 0 0 83.33 83.33h833.34a83.42 83.42 0 0 0 83.33-83.33V289.78a83.42 83.42 0 0 0-83.33-83.34z m27.78 527.78A27.8 27.8 0 0 1 928.67 762H95.33a27.8 27.8 0 0 1-27.78-27.78V289.78A27.8 27.8 0 0 1 95.33 262h833.34a27.8 27.8 0 0 1 27.78 27.78z" p-id="5468" fill="#2c2c2c"></path><path d="M845.33 623.11H178.67a27.78 27.78 0 0 0 0 55.56h666.66a27.78 27.78 0 0 0 0-55.56zM178.67 539.78H262a27.78 27.78 0 1 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM373.11 539.78h83.33a27.78 27.78 0 0 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM567.56 539.78h83.33a27.78 27.78 0 0 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM845.33 484.22H762a27.78 27.78 0 1 0 0 55.56h83.33a27.78 27.78 0 0 0 0-55.56zM178.67 400.89H262a27.78 27.78 0 1 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM373.11 400.89h83.33a27.78 27.78 0 0 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM567.56 400.89h83.33a27.78 27.78 0 0 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM845.33 345.33H762a27.78 27.78 0 1 0 0 55.56h83.33a27.78 27.78 0 0 0 0-55.56z" p-id="5469" fill="#2c2c2c"></path></svg>
+0
-1
src/widgets/themes/dark/images/keyboard-hover.svg less more
0 <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1524021535602" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5467" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M928.67 206.44H95.33A83.42 83.42 0 0 0 12 289.78v444.44a83.42 83.42 0 0 0 83.33 83.33h833.34a83.42 83.42 0 0 0 83.33-83.33V289.78a83.42 83.42 0 0 0-83.33-83.34z m27.78 527.78A27.8 27.8 0 0 1 928.67 762H95.33a27.8 27.8 0 0 1-27.78-27.78V289.78A27.8 27.8 0 0 1 95.33 262h833.34a27.8 27.8 0 0 1 27.78 27.78z" p-id="5468" fill="#1296db"></path><path d="M845.33 623.11H178.67a27.78 27.78 0 0 0 0 55.56h666.66a27.78 27.78 0 0 0 0-55.56zM178.67 539.78H262a27.78 27.78 0 1 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM373.11 539.78h83.33a27.78 27.78 0 0 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM567.56 539.78h83.33a27.78 27.78 0 0 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM845.33 484.22H762a27.78 27.78 0 1 0 0 55.56h83.33a27.78 27.78 0 0 0 0-55.56zM178.67 400.89H262a27.78 27.78 0 1 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM373.11 400.89h83.33a27.78 27.78 0 0 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM567.56 400.89h83.33a27.78 27.78 0 0 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM845.33 345.33H762a27.78 27.78 0 1 0 0 55.56h83.33a27.78 27.78 0 0 0 0-55.56z" p-id="5469" fill="#1296db"></path></svg>
+0
-1
src/widgets/themes/dark/images/keyboard-normal.svg less more
0 <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1524021535602" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5467" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M928.67 206.44H95.33A83.42 83.42 0 0 0 12 289.78v444.44a83.42 83.42 0 0 0 83.33 83.33h833.34a83.42 83.42 0 0 0 83.33-83.33V289.78a83.42 83.42 0 0 0-83.33-83.34z m27.78 527.78A27.8 27.8 0 0 1 928.67 762H95.33a27.8 27.8 0 0 1-27.78-27.78V289.78A27.8 27.8 0 0 1 95.33 262h833.34a27.8 27.8 0 0 1 27.78 27.78z" p-id="5468" fill="#e6e6e6"></path><path d="M845.33 623.11H178.67a27.78 27.78 0 0 0 0 55.56h666.66a27.78 27.78 0 0 0 0-55.56zM178.67 539.78H262a27.78 27.78 0 1 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM373.11 539.78h83.33a27.78 27.78 0 0 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM567.56 539.78h83.33a27.78 27.78 0 0 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM845.33 484.22H762a27.78 27.78 0 1 0 0 55.56h83.33a27.78 27.78 0 0 0 0-55.56zM178.67 400.89H262a27.78 27.78 0 1 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM373.11 400.89h83.33a27.78 27.78 0 0 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM567.56 400.89h83.33a27.78 27.78 0 0 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM845.33 345.33H762a27.78 27.78 0 1 0 0 55.56h83.33a27.78 27.78 0 0 0 0-55.56z" p-id="5469" fill="#e6e6e6"></path></svg>
src/widgets/themes/dark/images/list_view_hover.png less more
Binary diff not shown
src/widgets/themes/dark/images/list_view_normal.png less more
Binary diff not shown
src/widgets/themes/dark/images/list_view_press.png less more
Binary diff not shown
src/widgets/themes/dark/images/loadfile_hover.png less more
Binary diff not shown
src/widgets/themes/dark/images/loadfile_normal.png less more
Binary diff not shown
src/widgets/themes/dark/images/loadfile_press.png less more
Binary diff not shown
src/widgets/themes/dark/images/multiselect_active_normal.png less more
Binary diff not shown
src/widgets/themes/dark/images/multiselect_inactive_hover.png less more
Binary diff not shown
src/widgets/themes/dark/images/multiselect_inactive_normal.png less more
Binary diff not shown
+0
-1
src/widgets/themes/dark/images/pw-visible-clicked.svg less more
0 <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1524021940747" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6370" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M512 240C178.704 240 12.304 483.872 5.376 494.256c-7.168 10.752-7.168 24.752 0 35.504C12.304 540.128 178.704 784 512 784s499.696-243.872 506.624-254.256c7.168-10.752 7.168-24.752 0-35.504C1011.696 483.872 845.296 240 512 240zM512 720C263.888 720 115.744 565.152 72.192 511.936 115.6 458.608 262.976 304 512 304c248.112 0 396.256 154.848 439.808 208.064C908.4 565.392 761.024 720 512 720zM512 368c-79.408 0-144 64.608-144 144s64.592 144 144 144 144-64.608 144-144S591.408 368 512 368zM512 592c-44.112 0-80-35.888-80-80s35.888-80 80-80 80 35.888 80 80S556.112 592 512 592z" p-id="6371" fill="#2c2c2c"></path></svg>
+0
-1
src/widgets/themes/dark/images/pw-visible-hover.svg less more
0 <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1524021940747" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6370" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M512 240C178.704 240 12.304 483.872 5.376 494.256c-7.168 10.752-7.168 24.752 0 35.504C12.304 540.128 178.704 784 512 784s499.696-243.872 506.624-254.256c7.168-10.752 7.168-24.752 0-35.504C1011.696 483.872 845.296 240 512 240zM512 720C263.888 720 115.744 565.152 72.192 511.936 115.6 458.608 262.976 304 512 304c248.112 0 396.256 154.848 439.808 208.064C908.4 565.392 761.024 720 512 720zM512 368c-79.408 0-144 64.608-144 144s64.592 144 144 144 144-64.608 144-144S591.408 368 512 368zM512 592c-44.112 0-80-35.888-80-80s35.888-80 80-80 80 35.888 80 80S556.112 592 512 592z" p-id="6371" fill="#1296db"></path></svg>
+0
-1
src/widgets/themes/dark/images/pw-visible-normal.svg less more
0 <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1524021940747" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6370" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M512 240C178.704 240 12.304 483.872 5.376 494.256c-7.168 10.752-7.168 24.752 0 35.504C12.304 540.128 178.704 784 512 784s499.696-243.872 506.624-254.256c7.168-10.752 7.168-24.752 0-35.504C1011.696 483.872 845.296 240 512 240zM512 720C263.888 720 115.744 565.152 72.192 511.936 115.6 458.608 262.976 304 512 304c248.112 0 396.256 154.848 439.808 208.064C908.4 565.392 761.024 720 512 720zM512 368c-79.408 0-144 64.608-144 144s64.592 144 144 144 144-64.608 144-144S591.408 368 512 368zM512 592c-44.112 0-80-35.888-80-80s35.888-80 80-80 80 35.888 80 80S556.112 592 512 592z" p-id="6371" fill="#e6e6e6"></path></svg>
src/widgets/themes/dark/images/radio_selected.png less more
Binary diff not shown
src/widgets/themes/dark/images/radio_selected_hover.png less more
Binary diff not shown
src/widgets/themes/dark/images/radio_selected_insensitive.png less more
Binary diff not shown
src/widgets/themes/dark/images/radio_unselected.png less more
Binary diff not shown
src/widgets/themes/dark/images/radio_unselected_hover.png less more
Binary diff not shown
src/widgets/themes/dark/images/radio_unselected_insensitive.png less more
Binary diff not shown
src/widgets/themes/dark/images/restore_hover.png less more
Binary diff not shown
src/widgets/themes/dark/images/restore_normal.png less more
Binary diff not shown
src/widgets/themes/dark/images/restore_press.png less more
Binary diff not shown
+0
-15
src/widgets/themes/dark/images/search.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="13px" height="12px" viewBox="0 0 13 12" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
3 <title>search </title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
7 <g id="search_dark" transform="translate(-116.000000, -6.000000)" stroke="#FFFFFF">
8 <g id="search-" transform="translate(117.000000, 7.000000)">
9 <circle id="Oval-1" cx="4" cy="4" r="4"></circle>
10 <path d="M7.4,7.4 L10.6,10.6" id="Line" stroke-linecap="square"></path>
11 </g>
12 </g>
13 </g>
14 </svg>
src/widgets/themes/dark/images/search_hover.png less more
Binary diff not shown
src/widgets/themes/dark/images/search_normal.png less more
Binary diff not shown
src/widgets/themes/dark/images/search_press.png less more
Binary diff not shown
+0
-14
src/widgets/themes/dark/images/show_password_hover.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="24px" height="26px" viewBox="0 0 24 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 48.2 (47327) - http://www.bohemiancoding.com/sketch -->
3 <title>show_password_hover</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="不透明控件库" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(-1820.000000, -1563.000000)">
7 <g id="show_password_normal" transform="translate(1820.000000, 1563.000000)" fill="#DDDDDD" fill-rule="nonzero">
8 <g id="eye" transform="translate(7.000000, 9.000000)">
9 <path d="M1.76689308,3.83867328 C1.79612248,3.83335357 1.82623807,3.8305751 1.85700261,3.8305751 C2.13314499,3.8305751 2.35700261,4.05443272 2.35700261,4.3305751 C2.35700261,5.57453324 3.76557654,6.64545003 5.5594192,6.64545003 C7.3533453,6.64545003 8.761933,5.57454219 8.761933,4.3305751 C8.761933,4.05443272 8.98579063,3.8305751 9.261933,3.8305751 C9.53807537,3.8305751 9.761933,4.05443272 9.761933,4.3305751 C9.761933,6.19581212 7.85519365,7.64545003 5.5594192,7.64545003 C3.28638599,7.64545003 1.39468224,6.22427539 1.35755848,4.38568631 C1.22079921,4.57427023 1.01732289,4.85429518 0.953762249,4.93591467 C0.784096188,5.15378629 0.469934832,5.19286461 0.252063221,5.02319854 C0.0341916097,4.85353248 -0.00488671,4.53937113 0.164779351,4.32149952 C0.245342309,4.218047 0.632149981,3.68172073 0.680457004,3.61620162 C0.951854903,3.24810294 1.19878313,2.9383624 1.46891901,2.63819536 C2.65572205,1.31945473 3.98477078,0.548984955 5.59022902,0.548984955 C8.17192531,0.548984955 9.60002751,1.76886965 11.0580483,4.38531981 C11.1924674,4.6265378 11.1058897,4.93105182 10.8646717,5.06547091 C10.6234538,5.19989 10.3189397,5.11331238 10.1845206,4.87209438 C8.8843754,2.53895529 7.72543077,1.54898495 5.59022902,1.54898495 C4.31459492,1.54898495 3.22714775,2.17939463 2.21223096,3.30714031 C2.06044327,3.47580233 1.91543662,3.6493985 1.76689308,3.83867328 Z M7.593551,4.1425961 C7.593551,5.2468461 6.698329,6.1420681 5.594079,6.1420681 C4.489732,6.1420681 3.59451,5.2468461 3.59451,4.1425961 C3.59451,3.0383461 4.489732,2.1431231 5.594079,2.1431231 C6.698329,2.1431231 7.593551,3.0383461 7.593551,4.1425961 Z" id="Combined-Shape"></path>
10 </g>
11 </g>
12 </g>
13 </svg>
+0
-14
src/widgets/themes/dark/images/show_password_normal.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="24px" height="26px" viewBox="0 0 24 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 48.2 (47327) - http://www.bohemiancoding.com/sketch -->
3 <title>show_password_normal</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="不透明控件库" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(-1789.000000, -1563.000000)">
7 <g id="show_password_normal" transform="translate(1789.000000, 1563.000000)" fill="#DDDDDD" fill-rule="nonzero">
8 <g id="eye" transform="translate(7.000000, 9.000000)">
9 <path d="M1.76689308,3.83867328 C1.79612248,3.83335357 1.82623807,3.8305751 1.85700261,3.8305751 C2.13314499,3.8305751 2.35700261,4.05443272 2.35700261,4.3305751 C2.35700261,5.57453324 3.76557654,6.64545003 5.5594192,6.64545003 C7.3533453,6.64545003 8.761933,5.57454219 8.761933,4.3305751 C8.761933,4.05443272 8.98579063,3.8305751 9.261933,3.8305751 C9.53807537,3.8305751 9.761933,4.05443272 9.761933,4.3305751 C9.761933,6.19581212 7.85519365,7.64545003 5.5594192,7.64545003 C3.28638599,7.64545003 1.39468224,6.22427539 1.35755848,4.38568631 C1.22079921,4.57427023 1.01732289,4.85429518 0.953762249,4.93591467 C0.784096188,5.15378629 0.469934832,5.19286461 0.252063221,5.02319854 C0.0341916097,4.85353248 -0.00488671,4.53937113 0.164779351,4.32149952 C0.245342309,4.218047 0.632149981,3.68172073 0.680457004,3.61620162 C0.951854903,3.24810294 1.19878313,2.9383624 1.46891901,2.63819536 C2.65572205,1.31945473 3.98477078,0.548984955 5.59022902,0.548984955 C8.17192531,0.548984955 9.60002751,1.76886965 11.0580483,4.38531981 C11.1924674,4.6265378 11.1058897,4.93105182 10.8646717,5.06547091 C10.6234538,5.19989 10.3189397,5.11331238 10.1845206,4.87209438 C8.8843754,2.53895529 7.72543077,1.54898495 5.59022902,1.54898495 C4.31459492,1.54898495 3.22714775,2.17939463 2.21223096,3.30714031 C2.06044327,3.47580233 1.91543662,3.6493985 1.76689308,3.83867328 Z M7.593551,4.1425961 C7.593551,5.2468461 6.698329,6.1420681 5.594079,6.1420681 C4.489732,6.1420681 3.59451,5.2468461 3.59451,4.1425961 C3.59451,3.0383461 4.489732,2.1431231 5.594079,2.1431231 C6.698329,2.1431231 7.593551,3.0383461 7.593551,4.1425961 Z" id="Combined-Shape"></path>
10 </g>
11 </g>
12 </g>
13 </svg>
+0
-14
src/widgets/themes/dark/images/show_password_press.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="24px" height="26px" viewBox="0 0 24 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 48.2 (47327) - http://www.bohemiancoding.com/sketch -->
3 <title>show_password_press</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="不透明控件库" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(-1851.000000, -1563.000000)">
7 <g id="show_password_normal" transform="translate(1851.000000, 1563.000000)" fill="#2CA7F8" fill-rule="nonzero">
8 <g id="eye" transform="translate(7.000000, 9.000000)">
9 <path d="M1.76689308,38.8386733 C1.79612248,38.8333536 1.82623807,38.8305751 1.85700261,38.8305751 C2.13314499,38.8305751 2.35700261,39.0544327 2.35700261,39.3305751 C2.35700261,40.5745332 3.76557654,41.64545 5.5594192,41.64545 C7.3533453,41.64545 8.761933,40.5745422 8.761933,39.3305751 C8.761933,39.0544327 8.98579063,38.8305751 9.261933,38.8305751 C9.53807537,38.8305751 9.761933,39.0544327 9.761933,39.3305751 C9.761933,41.1958121 7.85519365,42.64545 5.5594192,42.64545 C3.28638599,42.64545 1.39468224,41.2242754 1.35755848,39.3856863 C1.22079921,39.5742702 1.01732289,39.8542952 0.953762249,39.9359147 C0.784096188,40.1537863 0.469934832,40.1928646 0.252063221,40.0231985 C0.0341916097,39.8535325 -0.00488671,39.5393711 0.164779351,39.3214995 C0.245342309,39.218047 0.632149981,38.6817207 0.680457004,38.6162016 C0.951854903,38.2481029 1.19878313,37.9383624 1.46891901,37.6381954 C2.65572205,36.3194547 3.98477078,35.548985 5.59022902,35.548985 C8.17192531,35.548985 9.60002751,36.7688696 11.0580483,39.3853198 C11.1924674,39.6265378 11.1058897,39.9310518 10.8646717,40.0654709 C10.6234538,40.19989 10.3189397,40.1133124 10.1845206,39.8720944 C8.8843754,37.5389553 7.72543077,36.548985 5.59022902,36.548985 C4.31459492,36.548985 3.22714775,37.1793946 2.21223096,38.3071403 C2.06044327,38.4758023 1.91543662,38.6493985 1.76689308,38.8386733 Z M1.76689308,3.83867328 C1.79612248,3.83335357 1.82623807,3.8305751 1.85700261,3.8305751 C2.13314499,3.8305751 2.35700261,4.05443272 2.35700261,4.3305751 C2.35700261,5.57453324 3.76557654,6.64545003 5.5594192,6.64545003 C7.3533453,6.64545003 8.761933,5.57454219 8.761933,4.3305751 C8.761933,4.05443272 8.98579063,3.8305751 9.261933,3.8305751 C9.53807537,3.8305751 9.761933,4.05443272 9.761933,4.3305751 C9.761933,6.19581212 7.85519365,7.64545003 5.5594192,7.64545003 C3.28638599,7.64545003 1.39468224,6.22427539 1.35755848,4.38568631 C1.22079921,4.57427023 1.01732289,4.85429518 0.953762249,4.93591467 C0.784096188,5.15378629 0.469934832,5.19286461 0.252063221,5.02319854 C0.0341916097,4.85353248 -0.00488671,4.53937113 0.164779351,4.32149952 C0.245342309,4.218047 0.632149981,3.68172073 0.680457004,3.61620162 C0.951854903,3.24810294 1.19878313,2.9383624 1.46891901,2.63819536 C2.65572205,1.31945473 3.98477078,0.548984955 5.59022902,0.548984955 C8.17192531,0.548984955 9.60002751,1.76886965 11.0580483,4.38531981 C11.1924674,4.6265378 11.1058897,4.93105182 10.8646717,5.06547091 C10.6234538,5.19989 10.3189397,5.11331238 10.1845206,4.87209438 C8.8843754,2.53895529 7.72543077,1.54898495 5.59022902,1.54898495 C4.31459492,1.54898495 3.22714775,2.17939463 2.21223096,3.30714031 C2.06044327,3.47580233 1.91543662,3.6493985 1.76689308,3.83867328 Z M7.593551,4.1425961 C7.593551,5.2468461 6.698329,6.1420681 5.594079,6.1420681 C4.489732,6.1420681 3.59451,5.2468461 3.59451,4.1425961 C3.59451,3.0383461 4.489732,2.1431231 5.594079,2.1431231 C6.698329,2.1431231 7.593551,3.0383461 7.593551,4.1425961 Z" id="Combined-Shape"></path>
10 </g>
11 </g>
12 </g>
13 </svg>
src/widgets/themes/dark/images/slider_balance.png less more
Binary diff not shown
src/widgets/themes/dark/images/slider_bg.png less more
Binary diff not shown
src/widgets/themes/dark/images/slider_bg_active.png less more
Binary diff not shown
+0
-21
src/widgets/themes/dark/images/slider_handle.svg less more
0 <?xml version="1.0" encoding="utf-8"?>
1 <!-- Generator: Adobe Illustrator 17.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
2 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3 <svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
4 width="18px" height="18px" viewBox="0 0 18 18" enable-background="new 0 0 18 18" xml:space="preserve">
5 <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="9.0574" y1="16.5001" x2="9.0574" y2="1.5001">
6 <stop offset="0" style="stop-color:#282828"/>
7 <stop offset="0.2609" style="stop-color:#141414"/>
8 <stop offset="1" style="stop-color:#1E1E1E"/>
9 </linearGradient>
10 <circle fill="url(#SVGID_1_)" stroke="#000000" stroke-miterlimit="10" cx="9.057" cy="9" r="7.5"/>
11 <path opacity="0.2" fill="none" stroke="#000000" stroke-miterlimit="10" d="M9.004,17.5c-4.687,0-8.5-3.813-8.5-8.5
12 s3.813-8.5,8.5-8.5c4.687,0,8.5,3.813,8.5,8.5S13.69,17.5,9.004,17.5z"/>
13 <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="9.0037" y1="16.0005" x2="9.0037" y2="2">
14 <stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0"/>
15 <stop offset="0.8587" style="stop-color:#FFFFFF;stop-opacity:0.1288"/>
16 <stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0.15"/>
17 </linearGradient>
18 <path fill="none" stroke="url(#SVGID_2_)" stroke-miterlimit="10" d="M9.004,15.501c-3.584,0-6.5-2.916-6.5-6.501
19 c0-3.584,2.916-6.5,6.5-6.5s6.5,2.916,6.5,6.5C15.504,12.585,12.588,15.501,9.004,15.501z"/>
20 </svg>
src/widgets/themes/dark/images/spinner_decrease.png less more
Binary diff not shown
src/widgets/themes/dark/images/spinner_decrease_hover.png less more
Binary diff not shown
src/widgets/themes/dark/images/spinner_decrease_normal.png less more
Binary diff not shown
src/widgets/themes/dark/images/spinner_decrease_press.png less more
Binary diff not shown
src/widgets/themes/dark/images/spinner_increase.png less more
Binary diff not shown
src/widgets/themes/dark/images/spinner_increase_hover.png less more
Binary diff not shown
src/widgets/themes/dark/images/spinner_increase_normal.png less more
Binary diff not shown
src/widgets/themes/dark/images/spinner_increase_press.png less more
Binary diff not shown
+0
-1
src/widgets/themes/dark/images/submit-clicked.svg less more
0 <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1524021439864" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4258" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M884.48 989.687l-744.96 0 0-517.047 122.727 0 0-188.574c0-137.716 112.036-249.753 249.774-249.753 137.716 0 249.731 112.036 249.731 249.753l0 188.574 122.727 0 0 517.047zM183.156 946.051l657.709 0 0-429.774-657.709 0 0 429.774zM305.884 472.64l412.233 0 0-188.574c0-113.651-92.444-206.116-206.094-206.116-113.651 0-206.138 92.466-206.138 206.116l0 188.574z" p-id="4259" fill="#2c2c2c"></path></svg>
+0
-1
src/widgets/themes/dark/images/submit-hover.svg less more
0 <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1524021439864" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4258" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M884.48 989.687l-744.96 0 0-517.047 122.727 0 0-188.574c0-137.716 112.036-249.753 249.774-249.753 137.716 0 249.731 112.036 249.731 249.753l0 188.574 122.727 0 0 517.047zM183.156 946.051l657.709 0 0-429.774-657.709 0 0 429.774zM305.884 472.64l412.233 0 0-188.574c0-113.651-92.444-206.116-206.094-206.116-113.651 0-206.138 92.466-206.138 206.116l0 188.574z" p-id="4259" fill="#1296db"></path></svg>
+0
-1
src/widgets/themes/dark/images/submit-normal.svg less more
0 <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1524021439864" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4258" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M884.48 989.687l-744.96 0 0-517.047 122.727 0 0-188.574c0-137.716 112.036-249.753 249.774-249.753 137.716 0 249.731 112.036 249.731 249.753l0 188.574 122.727 0 0 517.047zM183.156 946.051l657.709 0 0-429.774-657.709 0 0 429.774zM305.884 472.64l412.233 0 0-188.574c0-113.651-92.444-206.116-206.094-206.116-113.651 0-206.138 92.466-206.138 206.116l0 188.574z" p-id="4259" fill="#e6e6e6"></path></svg>
src/widgets/themes/dark/images/tick_hover.png less more
Binary diff not shown
src/widgets/themes/dark/images/tick_insensitive.png less more
Binary diff not shown
src/widgets/themes/dark/images/tick_normal.png less more
Binary diff not shown
src/widgets/themes/dark/images/tick_transparent.png less more
Binary diff not shown
src/widgets/themes/dark/images/transparent_button_left_hover.png less more
Binary diff not shown
src/widgets/themes/dark/images/transparent_button_left_normal.png less more
Binary diff not shown
src/widgets/themes/dark/images/transparent_button_left_press.png less more
Binary diff not shown
src/widgets/themes/dark/images/transparent_button_middle_hover.png less more
Binary diff not shown
src/widgets/themes/dark/images/transparent_button_middle_normal.png less more
Binary diff not shown
src/widgets/themes/dark/images/transparent_button_middle_press.png less more
Binary diff not shown
src/widgets/themes/dark/images/transparent_button_right_hover.png less more
Binary diff not shown
src/widgets/themes/dark/images/transparent_button_right_normal.png less more
Binary diff not shown
src/widgets/themes/dark/images/transparent_button_right_press.png less more
Binary diff not shown
src/widgets/themes/dark/images/up_hover.png less more
Binary diff not shown
src/widgets/themes/dark/images/up_normal.png less more
Binary diff not shown
src/widgets/themes/dark/images/up_press.png less more
Binary diff not shown
+0
-3
src/widgets/themes/dark/images/window/close_disabled.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <polygon fill="#FFF" points="4.243 4.95 1.061 8.132 .707 8.485 0 7.778 .354 7.425 3.536 4.243 .354 1.061 0 .707 .707 0 1.061 .354 4.243 3.536 7.425 .354 7.778 0 8.485 .707 8.132 1.061 4.95 4.243 8.132 7.425 8.485 7.778 7.778 8.485 7.425 8.132" opacity=".3" transform="translate(16 17)"/>
2 </svg>
+0
-7
src/widgets/themes/dark/images/window/close_hover.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="none" fill-rule="evenodd">
2 <rect width="27" height="23" x="7" fill="#000" fill-opacity=".289" opacity="0"/>
3 <rect width="40" height="40" fill="#FFF" fill-opacity=".15"/>
4 <polygon fill="#F27E00" fill-rule="nonzero" points="20.243 20.95 17.061 24.132 16.707 24.485 16 23.778 16.354 23.425 19.536 20.243 16.354 17.061 16 16.707 16.707 16 17.061 16.354 20.243 19.536 23.425 16.354 23.778 16 24.485 16.707 24.132 17.061 20.95 20.243 24.132 23.425 24.485 23.778 23.778 24.485 23.425 24.132"/>
5 </g>
6 </svg>
+0
-3
src/widgets/themes/dark/images/window/close_normal.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <polygon fill="#FFF" points="4.243 4.95 1.061 8.132 .707 8.485 0 7.778 .354 7.425 3.536 4.243 .354 1.061 0 .707 .707 0 1.061 .354 4.243 3.536 7.425 .354 7.778 0 8.485 .707 8.132 1.061 4.95 4.243 8.132 7.425 8.485 7.778 7.778 8.485 7.425 8.132" opacity=".6" transform="translate(16 16)"/>
2 </svg>
+0
-7
src/widgets/themes/dark/images/window/close_press.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="none" fill-rule="evenodd">
2 <rect width="27" height="23" x="7" fill="#000" fill-opacity=".289" opacity="0"/>
3 <polygon fill="#000" fill-opacity=".1" points="0 0 40 0 40 40 0 40"/>
4 <polygon fill="#FF3763" fill-rule="nonzero" points="20.243 20.95 17.061 24.132 16.707 24.485 16 23.778 16.354 23.425 19.536 20.243 16.354 17.061 16 16.707 16.707 16 17.061 16.354 20.243 19.536 23.425 16.354 23.778 16 24.485 16.707 24.132 17.061 20.95 20.243 24.132 23.425 24.485 23.778 23.778 24.485 23.425 24.132"/>
5 </g>
6 </svg>
+0
-6
src/widgets/themes/dark/images/window/fullscreen_hover.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="#FFF" fill-rule="evenodd">
2 <rect width="40" height="40" fill-opacity=".15"/>
3 <path d="M24,20 L24,16 L20,16 L20,15 L25,15 L25,20 L24,20 Z M16,20 L16,24 L20,24 L20,25 L15,25 L15,20 L16,20 Z"/>
4 </g>
5 </svg>
+0
-6
src/widgets/themes/dark/images/window/fullscreen_normal.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="none" fill-rule="evenodd">
2 <rect width="40" height="40" fill="#000" fill-opacity=".289" opacity="0"/>
3 <path fill="#FFF" d="M24,20 L24,16 L20,16 L20,15 L25,15 L25,20 L24,20 Z M16,20 L16,24 L20,24 L20,25 L15,25 L15,20 L16,20 Z" opacity=".6"/>
4 </g>
5 </svg>
+0
-7
src/widgets/themes/dark/images/window/fullscreen_press.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="none" fill-rule="evenodd">
2 <rect width="40" height="40" fill="#000" fill-opacity=".1" rx="2"/>
3 <rect width="40" height="40" fill="#000" fill-opacity=".1"/>
4 <path fill="#2CA7F8" fill-rule="nonzero" d="M24,20 L24,16 L20,16 L20,15 L25,15 L25,20 L24,20 Z M16,20 L16,24 L20,24 L20,25 L15,25 L15,20 L16,20 Z"/>
5 </g>
6 </svg>
+0
-3
src/widgets/themes/dark/images/window/maximize_disabled.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <path fill="#FFF" fill-rule="evenodd" d="M0,6.25 L0,1.75 L0,0 L1.8,0 L8.2,0 L10,0 L10,1.75 L10,6.25 L10,8 L8.2,8 L1.8,8 L0,8 L0,6.25 Z M1,7 L9,7 L9,1 L1,1 L1,7 Z" opacity=".3" transform="translate(15 16)"/>
2 </svg>
+0
-6
src/widgets/themes/dark/images/window/maximize_hover.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="#FFF" fill-rule="evenodd">
2 <rect width="40" height="40" fill-opacity=".15"/>
3 <path d="M15,22.25 L15,17.75 L15,16 L16.8,16 L23.2,16 L25,16 L25,17.75 L25,22.25 L25,24 L23.2,24 L16.8,24 L15,24 L15,22.25 Z M16,23 L24,23 L24,17 L16,17 L16,23 Z"/>
4 </g>
5 </svg>
+0
-3
src/widgets/themes/dark/images/window/maximize_normal.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <path fill="#FFF" fill-rule="evenodd" d="M0,6.25 L0,1.75 L0,0 L1.8,0 L8.2,0 L10,0 L10,1.75 L10,6.25 L10,8 L8.2,8 L1.8,8 L0,8 L0,6.25 Z M1,7 L9,7 L9,1 L1,1 L1,7 Z" opacity=".6" transform="translate(15 16)"/>
2 </svg>
+0
-6
src/widgets/themes/dark/images/window/maximize_press.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="none" fill-rule="evenodd">
2 <rect width="40" height="40" fill="#000" fill-opacity=".1"/>
3 <path fill="#2CA7F8" fill-rule="nonzero" d="M15,22.25 L15,17.75 L15,16 L16.8,16 L23.2,16 L25,16 L25,17.75 L25,22.25 L25,24 L23.2,24 L16.8,24 L15,24 L15,22.25 Z M16,23 L24,23 L24,17 L16,17 L16,23 Z"/>
4 </g>
5 </svg>
+0
-3
src/widgets/themes/dark/images/window/menu_disabled.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <path fill="#FFF" d="M7.5625,1 L0.4375,1 L0,1 L0,0 L0.4375,0 L7.5625,0 L8,0 L8,1 L7.5625,1 Z M9.57647059,5 L0.423529412,5 L0,5 L0,4 L0.423529412,4 L9.57647059,4 L10,4 L10,5 L9.57647059,5 Z M9.57647059,9 L0.423529412,9 L0,9 L0,8 L0.423529412,8 L9.57647059,8 L10,8 L10,9 L9.57647059,9 Z" opacity=".3" transform="translate(15 15)"/>
2 </svg>
+0
-6
src/widgets/themes/dark/images/window/menu_hover.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="#FFF" fill-rule="evenodd">
2 <rect width="40" height="40" fill-opacity=".15"/>
3 <path fill-rule="nonzero" d="M22.5625,16 L15.4375,16 L15,16 L15,15 L15.4375,15 L22.5625,15 L23,15 L23,16 L22.5625,16 Z M24.5764706,20 L15.4235294,20 L15,20 L15,19 L15.4235294,19 L24.5764706,19 L25,19 L25,20 L24.5764706,20 Z M24.5764706,24 L15.4235294,24 L15,24 L15,23 L15.4235294,23 L24.5764706,23 L25,23 L25,24 L24.5764706,24 Z"/>
4 </g>
5 </svg>
+0
-3
src/widgets/themes/dark/images/window/menu_normal.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <path fill="#FFF" d="M7.5625,1 L0.4375,1 L0,1 L0,0 L0.4375,0 L7.5625,0 L8,0 L8,1 L7.5625,1 Z M9.57647059,5 L0.423529412,5 L0,5 L0,4 L0.423529412,4 L9.57647059,4 L10,4 L10,5 L9.57647059,5 Z M9.57647059,9 L0.423529412,9 L0,9 L0,8 L0.423529412,8 L9.57647059,8 L10,8 L10,9 L9.57647059,9 Z" opacity=".6" transform="translate(15 15)"/>
2 </svg>
+0
-7
src/widgets/themes/dark/images/window/menu_press.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="none" fill-rule="evenodd" transform="translate(-2)">
2 <rect width="27" height="23" y="9" fill="#000" fill-opacity=".289" opacity="0"/>
3 <rect width="40" height="40" x="2" fill="#000" fill-opacity=".1"/>
4 <path fill="#2CA7F8" fill-rule="nonzero" d="M24.5625,16 L17.4375,16 L17,16 L17,15 L17.4375,15 L24.5625,15 L25,15 L25,16 L24.5625,16 Z M26.5764706,20 L17.4235294,20 L17,20 L17,19 L17.4235294,19 L26.5764706,19 L27,19 L27,20 L26.5764706,20 Z M26.5764706,24 L17.4235294,24 L17,24 L17,23 L17.4235294,23 L26.5764706,23 L27,23 L27,24 L26.5764706,24 Z"/>
5 </g>
6 </svg>
+0
-3
src/widgets/themes/dark/images/window/minimize_disabled.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <polygon fill="#FFF" points="9.529 1 10 1 10 0 9.529 0 .471 0 0 0 0 1 .471 1" opacity=".3" transform="translate(15 19)"/>
2 </svg>
+0
-6
src/widgets/themes/dark/images/window/minimize_hover.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="#FFF" fill-rule="evenodd">
2 <rect width="40" height="40" fill-opacity=".15"/>
3 <polygon fill-rule="nonzero" points="15.5 20 25.125 20 25.625 20 25.625 19 25.125 19 15.5 19 15 19 15 20"/>
4 </g>
5 </svg>
+0
-3
src/widgets/themes/dark/images/window/minimize_normal.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <polygon fill="#FFF" points="10.482 1 11 1 11 0 10.482 0 .518 0 0 0 0 1 .518 1" opacity=".6" transform="translate(15 19)"/>
2 </svg>
+0
-7
src/widgets/themes/dark/images/window/minimize_press.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="none" fill-rule="evenodd" transform="translate(-2)">
2 <rect width="27" height="23" y="9" fill="#000" fill-opacity=".289" opacity="0"/>
3 <rect width="40" height="40" x="2" fill="#000" fill-opacity=".1"/>
4 <polygon fill="#2CA7F8" fill-rule="nonzero" points="17.5 20 27.125 20 27.625 20 27.625 19 27.125 19 17.5 19 17 19 17 20"/>
5 </g>
6 </svg>
+0
-6
src/widgets/themes/dark/images/window/quit_fullscreen_hover.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="#FFF" fill-rule="evenodd">
2 <rect width="40" height="40" fill-opacity=".15"/>
3 <path d="M18,26 L18,22 L14,22 L14,21 L15,21 L18,21 L19,21 L19,22.25 L19,24.75 L19,26 L18,26 Z M22,14 L22,18 L26,18 L26,19 L25,19 L22,19 L21,19 L21,17.75 L21,15.25 L21,14 L22,14 Z"/>
4 </g>
5 </svg>
+0
-3
src/widgets/themes/dark/images/window/quit_fullscreen_normal.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <path fill="#FFF" fill-rule="evenodd" d="M4,12 L4,8 L0,8 L0,7 L5,7 L5,12 L4,12 Z M8,0 L8,4 L12,4 L12,5 L7,5 L7,0 L8,0 Z" opacity=".6" transform="translate(14 14)"/>
2 </svg>
+0
-8
src/widgets/themes/dark/images/window/quit_fullscreen_press.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="none" fill-rule="evenodd">
2 <rect width="27" height="23" y="9" fill="#000" fill-opacity=".289" opacity="0"/>
3 <rect width="19" height="19" x="4" y="11" fill="#000" fill-opacity=".1" rx="2"/>
4 <rect width="40" height="40" fill="#000" fill-opacity=".1"/>
5 <path fill="#2CA7F8" fill-rule="nonzero" d="M18,26 L18,22 L14,22 L14,21 L19,21 L19,26 L18,26 Z M22,14 L22,18 L26,18 L26,19 L21,19 L21,14 L22,14 Z"/>
6 </g>
7 </svg>
+0
-3
src/widgets/themes/dark/images/window/unmaximize_disabled.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <path fill="#FFF" fill-rule="evenodd" d="M9,1 L1,1 L1,0 L10,0 L10,9 L9,9 L9,1 Z M0,8 L0,4 L0,2 L2,2 L5,2 L8,2 L8,4 L8,8 L8,10 L5,10 L2,10 L0,10 L0,8 Z M1,9 L7,9 L7,3 L1,3 L1,9 Z" opacity=".3" transform="translate(15 15)"/>
2 </svg>
+0
-6
src/widgets/themes/dark/images/window/unmaximize_hover.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="#FFF" fill-rule="evenodd">
2 <rect width="40" height="40" fill-opacity=".15"/>
3 <path d="M24,16 L16,16 L16,15 L25,15 L25,24 L24,24 L24,16 Z M15,23 L15,19 L15,17 L17,17 L21,17 L23,17 L23,19 L23,23 L23,25 L21,25 L17,25 L15,25 L15,23 Z M16,24 L22,24 L22,18 L16,18 L16,24 Z"/>
4 </g>
5 </svg>
+0
-3
src/widgets/themes/dark/images/window/unmaximize_normal.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <path fill="#FFF" fill-rule="evenodd" d="M9,1 L1,1 L1,0 L10,0 L10,9 L9,9 L9,1 Z M0,8 L0,4 L0,2 L2,2 L6,2 L8,2 L8,4 L8,8 L8,10 L6,10 L2,10 L0,10 L0,8 Z M1,9 L7,9 L7,3 L1,3 L1,9 Z" opacity=".6" transform="translate(15 15)"/>
2 </svg>
+0
-6
src/widgets/themes/dark/images/window/unmaximize_press.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="none" fill-rule="evenodd">
2 <rect width="40" height="40" fill="#000" fill-opacity=".1"/>
3 <path fill="#2CA7F8" fill-rule="nonzero" d="M24,16 L16,16 L16,15 L25,15 L25,24 L24,24 L24,16 Z M15,23 L15,19 L15,17 L17,17 L21,17 L23,17 L23,19 L23,23 L23,25 L21,25 L17,25 L15,25 L15,23 Z M16,24 L22,24 L22,18 L16,18 L16,24 Z"/>
4 </g>
5 </svg>
+0
-235
src/widgets/themes/dui_theme_dark.qrc less more
0 <RCC>
1 <qresource prefix="/">
2 <file>dark/images/window/close_disabled.svg</file>
3 <file>dark/images/window/close_hover.svg</file>
4 <file>dark/images/window/close_normal.svg</file>
5 <file>dark/images/window/close_press.svg</file>
6 <file>dark/images/window/maximize_disabled.svg</file>
7 <file>dark/images/window/maximize_hover.svg</file>
8 <file>dark/images/window/maximize_normal.svg</file>
9 <file>dark/images/window/maximize_press.svg</file>
10 <file>dark/images/window/menu_disabled.svg</file>
11 <file>dark/images/window/menu_hover.svg</file>
12 <file>dark/images/window/menu_normal.svg</file>
13 <file>dark/images/window/menu_press.svg</file>
14 <file>dark/images/window/minimize_disabled.svg</file>
15 <file>dark/images/window/minimize_hover.svg</file>
16 <file>dark/images/window/minimize_normal.svg</file>
17 <file>dark/images/window/minimize_press.svg</file>
18 <file>dark/images/window/unmaximize_disabled.svg</file>
19 <file>dark/images/window/unmaximize_hover.svg</file>
20 <file>dark/images/window/unmaximize_normal.svg</file>
21 <file>dark/images/window/unmaximize_press.svg</file>
22 <file>dark/Dtk--Widget--DWindowRestoreButton.theme</file>
23 <file>dark/Dtk--Widget--DWindowOptionButton.theme</file>
24 <file>dark/Dtk--Widget--DWindowMinButton.theme</file>
25 <file>dark/Dtk--Widget--DWindowMaxButton.theme</file>
26 <file>dark/Dtk--Widget--DWindowCloseButton.theme</file>
27 <file>dark/Dtk--Widget--DToast.theme</file>
28 <file>dark/Dtk--Widget--DTitlebar.theme</file>
29 <file>dark/Dtk--Widget--DTextEdit.theme</file>
30 <file>dark/Dtk--Widget--DTextButton.theme</file>
31 <file>dark/Dtk--Widget--DSwitchButton.theme</file>
32 <file>dark/Dtk--Widget--DStackWidget.theme</file>
33 <file>dark/Dtk--Widget--DSpinBox.theme</file>
34 <file>dark/Dtk--Widget--DSlider.theme</file>
35 <file>dark/Dtk--Widget--DShortcutEdit.theme</file>
36 <file>dark/Dtk--Widget--DSettingsDialog.theme</file>
37 <file>dark/Dtk--Widget--DSeparatorVertical.theme</file>
38 <file>dark/Dtk--Widget--DSeparatorHorizontal.theme</file>
39 <file>dark/Dtk--Widget--DSegmentedControl.theme</file>
40 <file>dark/Dtk--Widget--DSearchEdit.theme</file>
41 <file>dark/Dtk--Widget--DScrollBar.theme</file>
42 <file>dark/Dtk--Widget--DScrollArea.theme</file>
43 <file>dark/Dtk--Widget--DPasswordEdit.theme</file>
44 <file>dark/Dtk--Widget--DOptionList.theme</file>
45 <file>dark/Dtk--Widget--DOption.theme</file>
46 <file>dark/Dtk--Widget--DLoadingIndicator.theme</file>
47 <file>dark/Dtk--Widget--DListView.theme</file>
48 <file>dark/Dtk--Widget--DLinkButton.theme</file>
49 <file>dark/Dtk--Widget--DLineEdit.theme</file>
50 <file>dark/Dtk--Widget--DLabel.theme</file>
51 <file>dark/Dtk--Widget--DIpv4LineEdit.theme</file>
52 <file>dark/Dtk--Widget--DImageButton.theme</file>
53 <file>dark/Dtk--Widget--DHeaderLine.theme</file>
54 <file>dark/Dtk--Widget--DFileChooserEdit.theme</file>
55 <file>dark/Dtk--Widget--DDialog.theme</file>
56 <file>dark/Dtk--Widget--DCircleProgress.theme</file>
57 <file>dark/Dtk--Widget--DButtonList.theme</file>
58 <file>dark/Dtk--Widget--DBoxWidget.theme</file>
59 <file>dark/Dtk--Widget--DBaseLine.theme</file>
60 <file>dark/Dtk--Widget--DBaseExpand.theme</file>
61 <file>dark/Dtk--Widget--DBaseButton.theme</file>
62 <file>dark/Dtk--Widget--DArrowButton.theme</file>
63 <file>dark/Dtk--Widget--DAbstractDialog.theme</file>
64 <file>dark/Dtk--Widget--DAboutDialog.theme</file>
65 <file>dark/Dtk--Widget--DPasswdEditAnimated.theme</file>
66 </qresource>
67 <qresource prefix="/images">
68 <file>dark/images/add_hover.png</file>
69 <file>dark/images/add_normal.png</file>
70 <file>dark/images/add_press.png</file>
71 <file>dark/images/arrow_down_hover.png</file>
72 <file>dark/images/arrow_down_normal.png</file>
73 <file>dark/images/arrow_down_press.png</file>
74 <file>dark/images/arrow_down_white.png</file>
75 <file>dark/images/arrow_down_hover.svg</file>
76 <file>dark/images/arrow_down_normal.svg</file>
77 <file>dark/images/arrow_down_press.svg</file>
78 <file>dark/images/arrow_down_insensitive.svg</file>
79 <file>dark/images/arrow_left_hover.png</file>
80 <file>dark/images/arrow_left_normal.png</file>
81 <file>dark/images/arrow_left_press.png</file>
82 <file>dark/images/arrow_left_white.png</file>
83 <file>dark/images/arrow_right_hover.png</file>
84 <file>dark/images/arrow_right_normal.png</file>
85 <file>dark/images/arrow_right_press.png</file>
86 <file>dark/images/arrow_right_white.png</file>
87 <file>dark/images/arrow_up_hover.png</file>
88 <file>dark/images/arrow_up_normal.png</file>
89 <file>dark/images/arrow_up_press.png</file>
90 <file>dark/images/arrow_up_white.png</file>
91 <file>dark/images/arrow_up_hover.svg</file>
92 <file>dark/images/arrow_up_normal.svg</file>
93 <file>dark/images/arrow_up_press.svg</file>
94 <file>dark/images/arrow_up_insensitive.svg</file>
95 <file>dark/images/button_center_normal.png</file>
96 <file>dark/images/button_center_press.png</file>
97 <file>dark/images/button_left_normal.png</file>
98 <file>dark/images/button_left_press.png</file>
99 <file>dark/images/button_right_normal.png</file>
100 <file>dark/images/button_right_press.png</file>
101 <file>dark/images/checkbox_checked_hover.png</file>
102 <file>dark/images/checkbox_checked_insensitive.png</file>
103 <file>dark/images/checkbox_checked.png</file>
104 <file>dark/images/checkbox_unchecked_hover.png</file>
105 <file>dark/images/checkbox_unchecked_insensitive.png</file>
106 <file>dark/images/checkbox_unchecked.png</file>
107 <file>dark/images/input_clear_hover.svg</file>
108 <file>dark/images/input_clear_normal.svg</file>
109 <file>dark/images/input_clear_press.svg</file>
110 <file>dark/images/clear_white.png</file>
111 <file>dark/images/delete_hover.png</file>
112 <file>dark/images/delete_multi_hover.png</file>
113 <file>dark/images/delete_multi_normal.png</file>
114 <file>dark/images/delete_multi_press.png</file>
115 <file>dark/images/delete_normal.png</file>
116 <file>dark/images/delete_press.png</file>
117 <file>dark/images/file_24.png</file>
118 <file>dark/images/folder_24.png</file>
119 <file>dark/images/folder_up_24.png</file>
120 <file>dark/images/icon_view_hover.png</file>
121 <file>dark/images/icon_view_normal.png</file>
122 <file>dark/images/icon_view_press.png</file>
123 <file>dark/images/list_view_hover.png</file>
124 <file>dark/images/list_view_normal.png</file>
125 <file>dark/images/list_view_press.png</file>
126 <file>dark/images/loadfile_hover.png</file>
127 <file>dark/images/loadfile_normal.png</file>
128 <file>dark/images/loadfile_press.png</file>
129 <file>dark/images/multiselect_active_normal.png</file>
130 <file>dark/images/multiselect_inactive_hover.png</file>
131 <file>dark/images/multiselect_inactive_normal.png</file>
132 <file>dark/images/hide_password_hover.svg</file>
133 <file>dark/images/hide_password_normal.svg</file>
134 <file>dark/images/hide_password_press.svg</file>
135 <file>dark/images/show_password_hover.svg</file>
136 <file>dark/images/show_password_normal.svg</file>
137 <file>dark/images/show_password_press.svg</file>
138 <file>dark/images/radio_selected_hover.png</file>
139 <file>dark/images/radio_selected_insensitive.png</file>
140 <file>dark/images/radio_selected.png</file>
141 <file>dark/images/radio_unselected_hover.png</file>
142 <file>dark/images/radio_unselected_insensitive.png</file>
143 <file>dark/images/radio_unselected.png</file>
144 <file>dark/images/restore_hover.png</file>
145 <file>dark/images/restore_normal.png</file>
146 <file>dark/images/restore_press.png</file>
147 <file>dark/images/search_hover.png</file>
148 <file>dark/images/search_normal.png</file>
149 <file>dark/images/search_press.png</file>
150 <file>dark/images/slider_balance.png</file>
151 <file>dark/images/slider_handle.svg</file>
152 <file>dark/images/spinner_decrease_hover.png</file>
153 <file>dark/images/spinner_decrease_normal.png</file>
154 <file>dark/images/spinner_decrease_press.png</file>
155 <file>dark/images/spinner_decrease.png</file>
156 <file>dark/images/spinner_increase_hover.png</file>
157 <file>dark/images/spinner_increase_normal.png</file>
158 <file>dark/images/spinner_increase_press.png</file>
159 <file>dark/images/spinner_increase.png</file>
160 <file>dark/images/tick_hover.png</file>
161 <file>dark/images/tick_insensitive.png</file>
162 <file>dark/images/tick_normal.png</file>
163 <file>dark/images/transparent_button_left_hover.png</file>
164 <file>dark/images/transparent_button_left_normal.png</file>
165 <file>dark/images/transparent_button_left_press.png</file>
166 <file>dark/images/transparent_button_middle_hover.png</file>
167 <file>dark/images/transparent_button_middle_normal.png</file>
168 <file>dark/images/transparent_button_middle_press.png</file>
169 <file>dark/images/transparent_button_right_hover.png</file>
170 <file>dark/images/transparent_button_right_normal.png</file>
171 <file>dark/images/transparent_button_right_press.png</file>
172 <file>dark/images/up_hover.png</file>
173 <file>dark/images/up_normal.png</file>
174 <file>dark/images/up_press.png</file>
175 <file>dark/images/slider_bg.png</file>
176 <file>dark/images/slider_bg_active.png</file>
177 <file>dark/images/dark_button_press_bg.png</file>
178 <file>dark/images/dark_button_normal_bg.png</file>
179 <file>dark/images/dark_button_hover_bg.png</file>
180 <file>dark/images/dock_preview_close_hover.png</file>
181 <file>dark/images/dock_preview_close_normal.png</file>
182 <file>dark/images/dock_preview_close_press.png</file>
183 <file>dark/dialogs/images/check_focus.png</file>
184 <file>dark/dialogs/images/dark_check_checked_hover.png</file>
185 <file>dark/dialogs/images/dark_check_checked.png</file>
186 <file>dark/dialogs/images/dark_check.png</file>
187 <file>dark/dialogs/images/dark_close_small_hover.png</file>
188 <file>dark/dialogs/images/dark_close_small_normal.png</file>
189 <file>dark/dialogs/images/dark_close_small_press.png</file>
190 <file>dark/dialogs/images/dark_minimise_small_hover.png</file>
191 <file>dark/dialogs/images/dark_minimise_small_normal.png</file>
192 <file>dark/dialogs/images/dark_minimise_small_press.png</file>
193 <file>dark/dialogs/images/user-trash-full.png</file>
194 <file>dark/images/combobox_up_arrow.png</file>
195 <file>dark/images/combobox_down_arrow.png</file>
196 <file>dark/images/tick_transparent.png</file>
197 <file>dark/images/search.svg</file>
198 <file>dark/images/window/close_disabled.svg</file>
199 <file>dark/images/window/close_hover.svg</file>
200 <file>dark/images/window/close_normal.svg</file>
201 <file>dark/images/window/close_press.svg</file>
202 <file>dark/images/window/maximize_disabled.svg</file>
203 <file>dark/images/window/maximize_hover.svg</file>
204 <file>dark/images/window/maximize_normal.svg</file>
205 <file>dark/images/window/maximize_press.svg</file>
206 <file>dark/images/window/menu_disabled.svg</file>
207 <file>dark/images/window/menu_hover.svg</file>
208 <file>dark/images/window/menu_normal.svg</file>
209 <file>dark/images/window/menu_press.svg</file>
210 <file>dark/images/window/minimize_disabled.svg</file>
211 <file>dark/images/window/minimize_hover.svg</file>
212 <file>dark/images/window/minimize_normal.svg</file>
213 <file>dark/images/window/minimize_press.svg</file>
214 <file>dark/images/window/unmaximize_disabled.svg</file>
215 <file>dark/images/window/unmaximize_hover.svg</file>
216 <file>dark/images/window/unmaximize_normal.svg</file>
217 <file>dark/images/window/unmaximize_press.svg</file>
218 <file>dark/images/window/quit_fullscreen_hover.svg</file>
219 <file>dark/images/window/quit_fullscreen_normal.svg</file>
220 <file>dark/images/window/quit_fullscreen_press.svg</file>
221 <file>dark/images/capslock-clicked.svg</file>
222 <file>dark/images/capslock-hover.svg</file>
223 <file>dark/images/capslock-normal.svg</file>
224 <file>dark/images/keyboard-clicked.svg</file>
225 <file>dark/images/keyboard-hover.svg</file>
226 <file>dark/images/keyboard-normal.svg</file>
227 <file>dark/images/pw-visible-clicked.svg</file>
228 <file>dark/images/pw-visible-hover.svg</file>
229 <file>dark/images/pw-visible-normal.svg</file>
230 <file>dark/images/submit-clicked.svg</file>
231 <file>dark/images/submit-hover.svg</file>
232 <file>dark/images/submit-normal.svg</file>
233 </qresource>
234 </RCC>
+0
-168
src/widgets/themes/dui_theme_light.qrc less more
0 <RCC>
1 <qresource prefix="/">
2 <file>light/Dtk--Widget--DWindowRestoreButton.theme</file>
3 <file>light/Dtk--Widget--DWindowOptionButton.theme</file>
4 <file>light/Dtk--Widget--DWindowMinButton.theme</file>
5 <file>light/Dtk--Widget--DWindowMaxButton.theme</file>
6 <file>light/Dtk--Widget--DWindowCloseButton.theme</file>
7 <file>light/Dtk--Widget--DWindow.theme</file>
8 <file>light/Dtk--Widget--DToast.theme</file>
9 <file>light/Dtk--Widget--DTitlebar.theme</file>
10 <file>light/Dtk--Widget--DTextEdit.theme</file>
11 <file>light/Dtk--Widget--DTextButton.theme</file>
12 <file>light/Dtk--Widget--DSwitchButton.theme</file>
13 <file>light/Dtk--Widget--DStackWidget.theme</file>
14 <file>light/Dtk--Widget--DSpinBox.theme</file>
15 <file>light/Dtk--Widget--DSlider.theme</file>
16 <file>light/Dtk--Widget--DSettingsDialog.theme</file>
17 <file>light/Dtk--Widget--DSeparatorVertical.theme</file>
18 <file>light/Dtk--Widget--DSeparatorHorizontal.theme</file>
19 <file>light/Dtk--Widget--DSegmentedControl.theme</file>
20 <file>light/Dtk--Widget--DSearchEdit.theme</file>
21 <file>light/Dtk--Widget--DScrollBar.theme</file>
22 <file>light/Dtk--Widget--DScrollArea.theme</file>
23 <file>light/Dtk--Widget--DPasswordEdit.theme</file>
24 <file>light/Dtk--Widget--DLoadingIndicator.theme</file>
25 <file>light/Dtk--Widget--DLinkButton.theme</file>
26 <file>light/Dtk--Widget--DLineEdit.theme</file>
27 <file>light/Dtk--Widget--DLabel.theme</file>
28 <file>light/Dtk--Widget--DImageButton.theme</file>
29 <file>light/Dtk--Widget--DHeaderLine.theme</file>
30 <file>light/Dtk--Widget--DFileChooserEdit.theme</file>
31 <file>light/Dtk--Widget--DDialog.theme</file>
32 <file>light/Dtk--Widget--DButtonList.theme</file>
33 <file>light/Dtk--Widget--DBoxWidget.theme</file>
34 <file>light/Dtk--Widget--DBaseLine.theme</file>
35 <file>light/Dtk--Widget--DBaseExpand.theme</file>
36 <file>light/Dtk--Widget--DBaseButton.theme</file>
37 <file>light/Dtk--Widget--DArrowButton.theme</file>
38 <file>light/Dtk--Widget--DAbstractDialog.theme</file>
39 <file>light/Dtk--Widget--DAboutDialog.theme</file>
40 <file>light/Dtk--Widget--DPasswdEditAnimated.theme</file>
41 </qresource>
42 <qresource prefix="/images">
43 <file>light/images/arrow_down_hover.png</file>
44 <file>light/images/arrow_down_normal.png</file>
45 <file>light/images/arrow_down_press.png</file>
46 <file>light/images/arrow_down_hover.svg</file>
47 <file>light/images/arrow_down_normal.svg</file>
48 <file>light/images/arrow_down_press.svg</file>
49 <file>light/images/arrow_down_insensitive.svg</file>
50 <file>light/images/arrow_left_hover.png</file>
51 <file>light/images/arrow_left_normal.png</file>
52 <file>light/images/arrow_left_press.png</file>
53 <file>light/images/arrow_right_hover.png</file>
54 <file>light/images/arrow_right_normal.png</file>
55 <file>light/images/arrow_right_press.png</file>
56 <file>light/images/arrow_up_hover.png</file>
57 <file>light/images/arrow_up_normal.png</file>
58 <file>light/images/arrow_up_press.png</file>
59 <file>light/images/arrow_up_hover.svg</file>
60 <file>light/images/arrow_up_normal.svg</file>
61 <file>light/images/arrow_up_press.svg</file>
62 <file>light/images/arrow_up_insensitive.svg</file>
63 <file>light/images/checkbox_checked_hover.png</file>
64 <file>light/images/checkbox_checked_insensitive.png</file>
65 <file>light/images/checkbox_checked.png</file>
66 <file>light/images/checkbox_unchecked_hover.png</file>
67 <file>light/images/checkbox_unchecked_insensitive.png</file>
68 <file>light/images/checkbox_unchecked.png</file>
69 <file>light/images/input_clear_hover.svg</file>
70 <file>light/images/input_clear_normal.svg</file>
71 <file>light/images/input_clear_press.svg</file>
72 <file>light/images/delete_multi_hover.png</file>
73 <file>light/images/delete_multi_normal.png</file>
74 <file>light/images/delete_multi_press.png</file>
75 <file>light/images/multiselect_active_normal.png</file>
76 <file>light/images/multiselect_inactive_hover.png</file>
77 <file>light/images/multiselect_inactive_normal.png</file>
78 <file>light/images/hide_password_hover.svg</file>
79 <file>light/images/hide_password_normal.svg</file>
80 <file>light/images/hide_password_press.svg</file>
81 <file>light/images/show_password_hover.svg</file>
82 <file>light/images/show_password_normal.svg</file>
83 <file>light/images/show_password_press.svg</file>
84 <file>light/images/radio_selected_hover.png</file>
85 <file>light/images/radio_selected_insensitive.png</file>
86 <file>light/images/radio_selected.png</file>
87 <file>light/images/radio_unselected_hover.png</file>
88 <file>light/images/radio_unselected_insensitive.png</file>
89 <file>light/images/radio_unselected.png</file>
90 <file>light/images/restore_hover.png</file>
91 <file>light/images/restore_normal.png</file>
92 <file>light/images/restore_press.png</file>
93 <file>light/images/search_hover.png</file>
94 <file>light/images/search_normal.png</file>
95 <file>light/images/search_press.png</file>
96 <file>light/images/spinner_decrease_hover.png</file>
97 <file>light/images/spinner_decrease_normal.png</file>
98 <file>light/images/spinner_decrease_press.png</file>
99 <file>light/images/spinner_increase_hover.png</file>
100 <file>light/images/spinner_increase_normal.png</file>
101 <file>light/images/spinner_increase_press.png</file>
102 <file>light/images/tick_hover.png</file>
103 <file>light/images/tick_insensitive.png</file>
104 <file>light/images/tick_normal.png</file>
105 <file>light/images/slider_bg_active.png</file>
106 <file>light/images/slider_bg.png</file>
107 <file>light/images/slider_round.png</file>
108 <file>light/images/slider_sharp.png</file>
109 <file>light/images/button_press_bg.png</file>
110 <file>light/images/button_normal_bg.png</file>
111 <file>light/images/button_hover_bg.png</file>
112 <file>light/dialogs/images/light_minimise_small_hover.png</file>
113 <file>light/dialogs/images/light_minimise_small_press.png</file>
114 <file>light/dialogs/images/light_minimise_small_normal.png</file>
115 <file>light/dialogs/images/light_close_small_normal.png</file>
116 <file>light/dialogs/images/light_check.png</file>
117 <file>light/dialogs/images/check_focus.png</file>
118 <file>light/dialogs/images/light_close_small_hover.png</file>
119 <file>light/dialogs/images/light_close_small_press.png</file>
120 <file>light/dialogs/images/light_check_checked.png</file>
121 <file>light/dialogs/images/light_check_checked_hover.png</file>
122 <file>light/dialogs/images/user-trash-full.png</file>
123 <file>light/images/combobox_arrow.png</file>
124 <file>light/images/combobox_arrow_active.png</file>
125 <file>light/images/search.svg</file>
126 <file>light/images/water_back.svg</file>
127 <file>light/images/water_front.svg</file>
128 <file>light/images/window/close_disabled.svg</file>
129 <file>light/images/window/close_hover.svg</file>
130 <file>light/images/window/close_normal.svg</file>
131 <file>light/images/window/close_press.svg</file>
132 <file>light/images/window/maximize_disabled.svg</file>
133 <file>light/images/window/maximize_hover.svg</file>
134 <file>light/images/window/maximize_normal.svg</file>
135 <file>light/images/window/maximize_press.svg</file>
136 <file>light/images/window/menu_disabled.svg</file>
137 <file>light/images/window/menu_hover.svg</file>
138 <file>light/images/window/menu_normal.svg</file>
139 <file>light/images/window/menu_press.svg</file>
140 <file>light/images/window/minimize_hover.svg</file>
141 <file>light/images/window/minimize_normal.svg</file>
142 <file>light/images/window/minimize_press.svg</file>
143 <file>light/images/window/minimize_disabled.svg</file>
144 <file>light/images/window/unmaximize_disabled.svg</file>
145 <file>light/images/window/unmaximize_hover.svg</file>
146 <file>light/images/window/unmaximize_normal.svg</file>
147 <file>light/images/window/unmaximize_press.svg</file>
148 <file>light/images/loadfile_hover.svg</file>
149 <file>light/images/loadfile_normal.svg</file>
150 <file>light/images/loadfile_press.svg</file>
151 <file>light/images/window/quit_fullscreen_hover.svg</file>
152 <file>light/images/window/quit_fullscreen_normal.svg</file>
153 <file>light/images/window/quit_fullscreen_press.svg</file>
154 <file>light/images/capslock-normal.svg</file>
155 <file>light/images/capslock-hover.svg</file>
156 <file>light/images/capslock-clicked.svg</file>
157 <file>light/images/submit-clicked.svg</file>
158 <file>light/images/submit-hover.svg</file>
159 <file>light/images/submit-normal.svg</file>
160 <file>light/images/keyboard-clicked.svg</file>
161 <file>light/images/keyboard-hover.svg</file>
162 <file>light/images/keyboard-normal.svg</file>
163 <file>light/images/pw-visible-clicked.svg</file>
164 <file>light/images/pw-visible-hover.svg</file>
165 <file>light/images/pw-visible-normal.svg</file>
166 </qresource>
167 </RCC>
+0
-32
src/widgets/themes/light/Dtk--Widget--DAboutDialog.theme less more
0 QLabel#ProductNameLabel {
1 font-size:18px;
2 }
3
4 QLabel#VersionLabel {
5 font-size:12px;
6 color: #666666;
7 }
8
9 QLabel#WebsiteLabel {
10 font-size:13px;
11 color: #004EE5;
12 }
13
14 QLabel#AcknowledgementLabel {
15 font-size:13px;
16 color: #004EE5;
17 }
18
19 QLabel#DescriptionLabel {
20 font-size:11px;
21 font-weight: normal;
22 color:#1A1A1A;
23 border: none;
24 }
25
26 QLabel#LicenseLabel {
27 font-size:11px;
28 font-weight: normal;
29 color:#1A1A1A;
30 border: none;
31 }
+0
-6
src/widgets/themes/light/Dtk--Widget--DAbstractDialog.theme less more
0 Dtk--Widget--DAbstractDialog {
1 qproperty-backgroundColor: white;
2 qproperty-borderColor: rgba(0, 0, 0, 0.2);
3 border-width: 1;
4 border-radius: 4px;
5 }
+0
-49
src/widgets/themes/light/Dtk--Widget--DArrowButton.theme less more
0 Dtk--Widget--ArrowButtonIcon {
1 background-repeat: no-repeat;
2 background-position: center;
3 }
4
5 QLabel#ArrowButtonIconNormal[arrowButtonDirection="0"] {
6 background-image: url(:/images/light/images/arrow_up_normal.png);
7 }
8 QLabel#ArrowButtonIconNormal[arrowButtonDirection="1"] {
9 background-image: url(:/images/light/images/arrow_down_normal.png);
10 }
11 QLabel#ArrowButtonIconNormal[arrowButtonDirection="2"] {
12 background-image: url(:/images/light/images/arrow_left_normal.png);
13 }
14 QLabel#ArrowButtonIconNormal[arrowButtonDirection="3"] {
15 background-image: url(:/images/light/images/arrow_right_normal.png);
16 }
17
18 QLabel#ArrowButtonIconHover[arrowButtonDirection="0"] {
19 background-image: url(:/images/light/images/arrow_up_hover.png);
20 }
21
22 QLabel#ArrowButtonIconHover[arrowButtonDirection="1"] {
23 background-image: url(:/images/light/images/arrow_down_hover.png);
24 }
25
26 QLabel#ArrowButtonIconHover[arrowButtonDirection="2"] {
27 background-image: url(:/images/light/images/arrow_left_hover.png);
28 }
29
30 QLabel#ArrowButtonIconHover[arrowButtonDirection="3"] {
31 background-image: url(:/images/light/images/arrow_right_hover.png);
32 }
33
34 QLabel#ArrowButtonIconPress[arrowButtonDirection="0"] {
35 background-image: url(:/images/light/images/arrow_up_press.png);
36 }
37
38 QLabel#ArrowButtonIconPress[arrowButtonDirection="1"] {
39 background-image: url(:/images/light/images/arrow_down_press.png);
40 }
41
42 QLabel#ArrowButtonIconPress[arrowButtonDirection="2"] {
43 background-image: url(:/images/light/images/arrow_left_press.png);
44 }
45
46 QLabel#ArrowButtonIconPress[arrowButtonDirection="3"] {
47 background-image: url(:/images/light/images/arrow_right_press.png);
48 }
+0
-39
src/widgets/themes/light/Dtk--Widget--DBaseButton.theme less more
0 Dtk--Widget--DBaseButton {
1 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #3BC1FF, stop: 1.0 #079DFF);
2 border-width: 1px;
3 border-color: rgba(29, 130, 255, 0.30);
4 border-style: solid;
5 border-radius: 4px;
6 font-size: 12px;
7 color: white;
8 }
9
10 Dtk--Widget--DBaseButton:hover{
11 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #6EC9FF, stop: 1.0 #2DA9F6);
12 }
13
14 Dtk--Widget--DBaseButton:pressed{
15 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #0B8CFF, stop: 1.0 #0AA1FF);
16 }
17
18 Dtk--Widget--DBaseButton:disabled {
19 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 rgba(59,193,255,0.50), stop: 1.0 rgba(7,157,255,0.50));
20 }
21
22 Dtk--Widget--DBaseButton:flat {
23 border: none; /* no border for a flat push button */
24 }
25
26 QFrame#ButtonInsideFrame {
27 background-color: transparent;
28 border-top-width: 1px;
29 border-style: solid;
30 border-radius: 3px;
31 border-top-color: rgba(255, 255, 255, 0.1);
32 }
33
34
35
36
37
38
+0
-3
src/widgets/themes/light/Dtk--Widget--DBaseExpand.theme less more
0 Dtk--Widget--ContentLoader {
1 background-color: #ffffff
2 }
+0
-4
src/widgets/themes/light/Dtk--Widget--DBaseLine.theme less more
0 /*Dtk--Widget--DBaseLine {
1 background-color: #fafafa
2 }*/
3 /*use default background color(transparent)*/
+0
-3
src/widgets/themes/light/Dtk--Widget--DBoxWidget.theme less more
0 Dtk--Widget--DBoxWidget{
1 background: transparent;
2 }
+0
-30
src/widgets/themes/light/Dtk--Widget--DButtonList.theme less more
0 Dtk--Widget--DButtonList {
1 background-color: #ffffff;
2 border: none;
3 }
4
5 Dtk--Widget--DButtonList QPushButton:hover{
6 color: black;
7 }
8
9 Dtk--Widget--DButtonList QFrame#BorderFrame{
10 background-color: transparent;
11 }
12
13 Dtk--Widget--DButtonList QFrame#BorderFrame[state="checked"]{
14 background-color: transparent;
15 }
16
17 Dtk--Widget--DButtonList QPushButton{
18 background-color: transparent;
19 color: #b4b4b4;
20 border: none;
21 border-radius:3px;
22 text-align: left center;
23 padding-left: 40px;
24 }
25
26 Dtk--Widget--DButtonList QPushButton:checked{
27 background-color: white;
28 color: #2CA7F8;
29 }
+0
-105
src/widgets/themes/light/Dtk--Widget--DDialog.theme less more
0 Dtk--Widget--DDialog{
1 qproperty-backgroundColor: white;
2 qproperty-borderColor: rgba(0, 0, 0, 0.2);
3 }
4
5 QFrame#ButtonFrame{
6 border:1px solid rgba(0, 0, 0, 0.1);
7 border-radius: 2px;
8 }
9
10 #CloseButton{
11 qproperty-normalPic: url(:/images/dialog_close_round_normal.png);
12 qproperty-hoverPic: url(:/images/dialog_close_round_hover.png);
13 qproperty-pressPic: url(:/images/dialog_close_round_press.png);
14 }
15
16 QPushButton#NormalButton{
17 background-color: transparent;
18 border: 1px solid rgba(0, 0, 0, 0.1);
19 border-radius: 2px;
20 color: white;
21 text-align: center;
22 }
23
24 QPushButton#NormalButton:hover{
25 background-color: transparent;
26 color: rgba(0, 0, 0, 0.5);
27 }
28
29 QPushButton#NormalButton:pressed{
30 background-color: transparent;
31 color: #01bdff;
32 }
33
34 QPushButton#ActionButton{
35 background-color: transparent;
36 border: 1px solid rgba(0, 0, 0, 0.1);
37 border-right: none;
38 border-left: none;
39 border-bottom: none;
40 font-size: 13px;
41 color: #303030;
42 text-align: center;
43 outline: none;
44 }
45
46 QPushButton#ActionButton[buttonType="1"] {/*warning*/
47 color: #ff5a5a;
48 font-weight: 500;
49 }
50
51 QPushButton#ActionButton[buttonType="2"] {/*recommend*/
52 color: #0087ff;
53 font-weight: 500;
54 }
55
56 QPushButton#ActionButton:hover{
57 background: qlineargradient(x1:0, y1:0, x2:0, y2:1,
58 stop:0 #8ccfff, stop:1 #4bb8ff);
59 color: #ffffff;
60 }
61
62 QPushButton#ActionButton:pressed{
63 background: qlineargradient(x1:0, y1:0, x2:0, y2:1,
64 stop:0 #0b8cff, stop:1 #0aa1ff);
65 color: #ffffff;
66 }
67
68 QPushButton#ConflictButton{
69 background-color: transparent;
70 border:none;
71 color: white;
72 text-align: center;
73 }
74
75 QPushButton#ConflictButton:checked{
76 background-color: #ff9327;
77 }
78
79 QLabel#VLine{
80 background-color:rgba(0, 0, 0, 0.1);
81 }
82
83 QLabel#TitleLabel{
84 padding-top: 2px;
85 padding-bottom: 2px;
86 color: #000000;
87 }
88
89 QLabel#MessageLabel{
90 padding-top: 2px;
91 padding-bottom: 2px;
92 color: #444444;
93 }
94
95 QLabel#TaskTitleLabel{
96 padding-top: 2px;
97 padding-bottom: 2px;
98 font-size: 10px;
99 color: #b4b4b4;
100 }
101
102 QListWidget{
103 background-color: transparent;
104 }
+0
-5
src/widgets/themes/light/Dtk--Widget--DFileChooserEdit.theme less more
0 Dtk--Widget--DFileChooserEdit {
1 qproperty-normalIcon:url(:/images/light/images/loadfile_normal.svg);
2 qproperty-hoverIcon:url(:/images/light/images/loadfile_hover.svg);
3 qproperty-pressIcon:url(:/images/light/images/loadfile_press.svg);
4 }
+0
-4
src/widgets/themes/light/Dtk--Widget--DHeaderLine.theme less more
0 QLabel#DHeaderLineTitle {
1 color: #474747;
2 font-size: 12px
3 }
+0
-4
src/widgets/themes/light/Dtk--Widget--DImageButton.theme less more
0 Dtk--Widget--DImageButton:disabled {
1 border: none;
2 background: transparent;
3 }
+0
-4
src/widgets/themes/light/Dtk--Widget--DLabel.theme less more
0 Dtk--Widget--DLabel {
1 color: #474747;
2 font-size: 12px;
3 }
+0
-38
src/widgets/themes/light/Dtk--Widget--DLineEdit.theme less more
0 Dtk--Widget--DLineEdit {
1 color: black;
2 border-radius: 3;
3 margin-left: 3px;
4 background-color: rgba(255, 255, 255, 26);/*use as outside border*/
5 }
6
7 Dtk--Widget--DLineEdit[alert="true"] QFrame#LineEditInsideFrame{
8 border-color: #FF8F00;
9 }
10
11 QFrame#LineEditInsideFrame {/*outside frame*/
12 background-color: rgba(255, 255, 255, 20%);
13 border: 1px solid;
14 border-radius: 3;
15 border-color: rgba(0, 0, 0, 20%);
16 }
17
18 Dtk--Widget--DLineEdit #IconButton {
19 border: 0px solid;
20 border-left: 1px solid rgba(0, 0, 0, 20%);
21 margin: 1px 0px 2px 0px;
22 }
23
24 Dtk--Widget--DLineEdit[alert="true"] #IconButton{
25 border-color: #FF8F00;
26 }
27
28 Dtk--Widget--DLineEdit #ClearButton {
29 qproperty-normalPic: ":/images/light/images/input_clear_normal.svg";
30 qproperty-hoverPic: ":/images/light/images/input_clear_hover.svg";
31 qproperty-pressPic: "/images/light/images/input_clear_press.svg";
32 margin-right: 4px;
33 }
34
35 #AlertTooltip QLabel {
36 color: #FF8F00;
37 }
+0
-13
src/widgets/themes/light/Dtk--Widget--DLinkButton.theme less more
0 Dtk--Widget--DLinkButton {
1 background-color:transparent;
2 border:none;
3 color:#0082fa;
4 }
5
6 Dtk--Widget--DLinkButton:hover {
7 color:#01BDFF;
8 }
9
10 Dtk--Widget--DLinkButton:pressed {
11 color:#0082fa;
12 }
+0
-3
src/widgets/themes/light/Dtk--Widget--DLoadingIndicator.theme less more
0 Dtk--Widget--DLoadingIndicator {
1 border: 0px;
2 }
+0
-45
src/widgets/themes/light/Dtk--Widget--DPasswdEditAnimated.theme less more
0 Dtk--Widget--DPasswdEditAnimated {
1 border-width: 1px;
2 border-style: solid;
3 border-radius: 3px;
4 border-color: #E6E6E6;
5 background-color: white;
6 }
7
8 Dtk--Widget--DPasswdEditAnimated[editFocus="true"] {
9 border-color: #2CA7F8;
10 }
11
12 Dtk--Widget--DPasswdEditAnimated[alert="true"] {
13 border-color: #FF8F00;
14 }
15
16 Dtk--Widget--DPasswdEditAnimated #KeyboardButton {
17 qproperty-normalPic: url(:/images/light/images/keyboard-normal.svg);
18 qproperty-hoverPic: url(:/images/light/images/keyboard-hover.svg);
19 qproperty-pressPic: url(:/images/light/images/keyboard-clicked.svg);
20 }
21
22 Dtk--Widget--DPasswdEditAnimated #PasswdEdit {
23
24 }
25
26 Dtk--Widget--DPasswdEditAnimated #Capslock {
27
28 }
29
30 Dtk--Widget--DPasswdEditAnimated #EyeButton {
31 qproperty-normalPic: url(:/images/light/images/pw-visible-normal.svg);
32 qproperty-hoverPic: url(:/images/light/images/pw-visible-hover.svg);
33 qproperty-pressPic: url(:/images/light/images/pw-visible-clicked.svg);
34 }
35
36 Dtk--Widget--DPasswdEditAnimated #SubmitButton {
37 qproperty-normalPic: url(:/images/light/images/submit-normal.svg);
38 qproperty-hoverPic: url(:/images/light/images/submit-hover.svg);
39 qproperty-pressPic: url(:/images/light/images/submit-clicked.svg);
40 }
41
42 Dtk--Widget--DPasswdEditAnimated #InvalidTip {
43 qproperty-backgroundColor: rgba(255,255,255,.3);
44 }
+0
-35
src/widgets/themes/light/Dtk--Widget--DPasswordEdit.theme less more
0 Dtk--Widget--DPasswordEdit {
1 color: black;
2 }
3
4 Dtk--Widget--DPasswordEdit[isEchoMode="false"] #IconButton {
5 border-radius: 2px;
6 border-top-left-radius: 0px;
7 border-bottom-left-radius: 0px;
8 qproperty-normalPic:url(:/images/light/images/show_password_normal.svg);
9 qproperty-hoverPic:url(:/images/light/images/show_password_hover.svg);
10 qproperty-pressPic:url(:/images/light/images/show_password_press.svg);
11 }
12
13 Dtk--Widget--DPasswordEdit[isEchoMode="true"] Dtk--Widget--DImageButton {
14 border-radius: 2px;
15 border-top-left-radius: 0px;
16 border-bottom-left-radius: 0px;
17 qproperty-normalPic:url(:/images/light/images/hide_password_normal.svg);
18 qproperty-hoverPic:url(:/images/light/images/hide_password_hover.svg);
19 qproperty-pressPic:url(:/images/light/images/hide_password_press.svg);
20 }
21
22 Dtk--Widget--DPasswordEdit #IconButton[state="hover"] {
23 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
24 stop: 0 #8ccfff, stop: 1.0 #4bb8ff);
25 }
26
27 Dtk--Widget--DPasswordEdit #IconButton[state="press"] {
28 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
29 stop: 0 #0b8cff, stop: 1.0 #0aa1ff);
30 }
31
32 Dtk--Widget--DPasswordEdit[alert="true"] #IconButton{
33 border-color: #FF8F00;
34 }
+0
-7
src/widgets/themes/light/Dtk--Widget--DScrollArea.theme less more
0 Dtk--Widget--DScrollArea{
1 border: none;
2 }
3
4 Dtk--Widget--DScrollArea::corner{
5 background-color: transparent;
6 }
+0
-39
src/widgets/themes/light/Dtk--Widget--DScrollBar.theme less more
0 Dtk--Widget--DScrollBar::add-line,Dtk--Widget--DScrollBar::sub-line,Dtk--Widget--DScrollBar::add-page,Dtk--Widget--DScrollBar::sub-page{
1 background-color: transparent;
2 }
3
4 Dtk--Widget--DScrollBar{
5 max-width: 10;
6 margin-right: 1px;
7 background-color: transparent;
8 }
9
10 Dtk--Widget--DScrollBar::handle{
11 background-color: rgba(16,16,16,0.5);
12 border-radius: 2px;
13 margin: 4px 2px 4px 2px;
14 }
15
16 Dtk--Widget--DScrollBar::handle:vertical{
17 min-height: 20px;
18 width: 8px;
19 }
20
21 Dtk--Widget--DScrollBar::handle:horizontal{
22 min-width: 20px;
23 height: 8px;
24 }
25
26 Dtk--Widget--DScrollBar::handle:hover{
27 background-color: rgba(16,16,16,0.7);
28 }
29
30 Dtk--Widget--DScrollBar::add-line {
31 border: none;
32 background: none;
33 }
34
35 Dtk--Widget--DScrollBar::sub-line {
36 border: none;
37 background: none;
38 }
+0
-37
src/widgets/themes/light/Dtk--Widget--DSearchEdit.theme less more
0 Dtk--Widget--DSearchEdit {
1 border-radius: 4px;
2 }
3
4 Dtk--Widget--DSearchEdit #SearchIcon {
5 background-color:transparent;
6 margin: 2 -1 2 4 px;
7 border-image:url(:/images/light/images/search.svg);
8 }
9
10 Dtk--Widget--DSearchEdit #ClearIcon {
11 background-color:transparent;
12 qproperty-normalPic:url(:/images/light/images/input_clear_normal.svg);
13 qproperty-hoverPic:url(:/images/light/images/input_clear_hover.svg);
14 qproperty-pressPic:url(:/images/light/images/input_clear_press.svg);
15 }
16
17 Dtk--Widget--DSearchEdit #Edit {
18 background-color:transparent;
19 border-radius:0px;
20 color:#303030;
21 padding-right:15px;
22 padding-bottom: 3px;
23 }
24
25 Dtk--Widget--DSearchEdit QFrame#DEditInsideFrame {
26 background-color: white;
27 border: 1px solid;
28 border-radius: 4px;
29 border-color: rgba(0, 0, 0, 0.08);
30 }
31
32 Dtk--Widget--DSearchEdit #PlaceHolder {
33 color:#303030;
34 margin:0 0 0 3px;
35 font-size:12px;
36 }
+0
-23
src/widgets/themes/light/Dtk--Widget--DSegmentedControl.theme less more
0 Dtk--Widget--DSegmentedControl Dtk--Widget--DSegmentedHighlight#Highlight{
1 background-color: #2ca7f8;
2 border: none;
3 }
4
5 Dtk--Widget--DSegmentedControl QToolButton{
6 color: black;
7 background: rgba(0, 0, 0, 38);
8 border: none;
9 padding-bottom: 2px;
10 }
11
12 Dtk--Widget--DSegmentedControl QToolButton:hover{
13 background: rgba(0, 0, 0, 77);
14 }
15
16 Dtk--Widget--DSegmentedControl QToolButton:pressed{
17 background: rgba(0, 0, 0, 26);
18 }
19
20 Dtk--Widget--DSegmentedControl QToolButton:disabled{
21 color: white;
22 }
+0
-11
src/widgets/themes/light/Dtk--Widget--DSeparatorHorizontal.theme less more
0 QWidget#DSeparatorTopRec {
1 background-color: #19000000;
2 min-height: 1;
3 max-height: 1;
4 }
5
6 QWidget#DSeparatorBottomRec {
7 background-color: #19000000;
8 min-height: 0;
9 max-height: 0;
10 }
+0
-11
src/widgets/themes/light/Dtk--Widget--DSeparatorVertical.theme less more
0 QWidget#DSeparatorLeftRec {
1 background-color: #19000000;
2 min-width: 1;
3 max-width: 1;
4 }
5
6 QWidget#DSeparatorRightRec {
7 background-color: #19000000;
8 min-width: 0;
9 max-width: 0;
10 }
+0
-52
src/widgets/themes/light/Dtk--Widget--DSettingsDialog.theme less more
0 #DSettingsDialog{
1 qproperty-backgroundColor: white;
2 qproperty-borderColor: rgba(0, 0, 0, 0.2);
3 }
4
5 #Navigation{
6 border: none;
7 border-right: 1px solid rgba(0,0,0,0.1);
8 }
9
10 #NavigationBar{
11 border: none;
12 }
13
14 #ButtonGroupSingle {
15 border: 1px solid rgba(0, 0, 0, 0.08);
16 border-radius: 4.0px;
17 }
18 #ButtonGroupBegin {
19 border: 1px solid rgba(0, 0, 0, 0.08);
20 border-top-left-radius: 4.0px;
21 border-bottom-left-radius: 4.0px;
22 }
23 #ButtonGroupBegin:checked {
24 background-color: #2ca7f8;
25 border: solid 1px rgba(0, 90, 224, 0.22);
26 }
27 #ButtonGroupMiddle {
28 border-top: 1px solid rgba(0, 0, 0, 0.08);
29 border-bottom: 1px solid rgba(0, 0, 0, 0.08);
30 border-right: 1px solid rgba(0, 0, 0, 0.08);
31 }
32 #ButtonGroupMiddle:checked {
33 background-color: #2ca7f8;
34 border: solid 1px rgba(0, 90, 224, 0.22);
35 }
36 #ButtonGroupEnd {
37 border: 1px solid rgba(0, 0, 0, 0.08);
38 border-left: none;
39 border-top-right-radius: 4.0px;
40 border-bottom-right-radius: 4.0px;
41 }
42 #ButtonGroupEnd:checked {
43 background-color: #2ca7f8;
44 border: solid 1px rgba(0, 90, 224, 0.22);
45 }
46
47 #DSettingsDialogClose{
48 qproperty-normalPic: url(:/images/light/images/window/close_normal.svg);
49 qproperty-hoverPic: url(:/images/light/images/window/close_hover.svg);
50 qproperty-pressPic: url(:/images/light/images/window/close_press.svg);
51 }
+0
-54
src/widgets/themes/light/Dtk--Widget--DSlider.theme less more
0 /*************************************For Round Handle***************************************/
1 Dtk--Widget--DSlider::groove[handleType="1"] {
2 margin-left: 11px;
3 margin-right: 11px;
4 border-width: 0px 2px 0px 2px;
5 height: 2px;
6 }
7
8 Dtk--Widget--DSlider::handle[handleType="1"] {
9 background: url(:/images/light/images/slider_round.png);
10 repeat: no-repeat;
11 width: 22px;
12 height: 22px;
13 margin-top: -10px;
14 margin-bottom: -11px;
15 margin-left: -11px;
16 margin-right: -11px;
17 }
18
19 Dtk--Widget--DSlider::add-page:horizontal[handleType="1"] {
20 border-width: 0px 2px 1px 2px;
21 border-image: url(:/images/light/images/slider_bg.png) 0 2 1 2 stretch;
22 margin-right: 11px;
23 height: 2px;
24 }
25
26 Dtk--Widget--DSlider::sub-page[handleType="1"] {
27 border-width: 0px 2px 0px 2px;
28 border-image: url(:/images/light/images/slider_bg_active.png) 0 2 0 2 stretch;
29 margin-left: 11px;
30 margin-bottom: -0.5px;/*Expand outside the groove */
31 margin-top: -0.5px;/*Expand outside the groove */
32 height: 2px;
33 }
34
35 /*************************************For Sharp Handle***************************************/
36 Dtk--Widget--DSlider::groove[handleType="0"] {
37 margin-left: 11px;
38 margin-right: 11px;
39 border-width: 0px 2px 0px 2px;
40 border-image: url(:/images/light/images/slider_bg.png) 0 2 0 2 stretch;
41 height: 2px;
42 }
43
44 Dtk--Widget--DSlider::handle[handleType="0"] {
45 background: url(:/images/light/images/slider_sharp.png);
46 width: 20px;
47 height: 22px;
48 margin-top: -10px;
49 margin-bottom: -10px;
50 margin-left: -11px;
51 margin-right: -11px;
52 }
53
+0
-44
src/widgets/themes/light/Dtk--Widget--DSpinBox.theme less more
0 QAbstractSpinBox {
1 min-height: 22px;
2 color: #fff;
3 border-radius: 3;
4 padding-right: 53px;
5 background-color: rgba(255, 255, 255, 26);/*use as outside border*/
6 }
7
8 QFrame#SpinBoxInsideFrame {/*outside frame*/
9 background-color: rgba(0, 0, 0, 50);
10 border: 1px solid black;
11 border-radius: 3;
12 }
13
14 #SpinBox_ImageButton {
15 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
16 stop: 0 #50333333,
17 stop: 1.0 #50000000);
18 border-left: 1px solid #AA111111;
19 }
20
21 QAbstractSpinBox[alert="true"] QFrame#SpinBoxInsideFrame{
22 border-color: #FF8F00;
23 }
24
25 QAbstractSpinBox::up-button {
26 border: none;
27 background: transparent;
28 }
29
30 QAbstractSpinBox::up-arrow {
31 border: none;
32 background: transparent;
33 }
34
35 QAbstractSpinBox::down-button {
36 border: none;
37 background: transparent;
38 }
39
40 QAbstractSpinBox::down-arrow {
41 border: none;
42 background: transparent;
43 }
+0
-3
src/widgets/themes/light/Dtk--Widget--DStackWidget.theme less more
0 Dtk--Widget--DStackWidget{
1 background: transparent;
2 }
+0
-2
src/widgets/themes/light/Dtk--Widget--DSwitchButton.theme less more
0 Dtk--Widget--DSwitchButton#DSwitchButton{
1 }
+0
-22
src/widgets/themes/light/Dtk--Widget--DTextButton.theme less more
0 Dtk--Widget--DTextButton {
1 padding:0 5px;
2 min-width:60px;
3 color:#333;
4 outline:none;
5 border-width:5px 5px 5px 5px;
6 border-image:url(:/images/light/images/button_normal_bg.png) 5 5 5 5 stretch;
7 background-color:transparent;
8 }
9
10 Dtk--Widget--DTextButton:hover {
11 color:#111;
12 border-image:url(:/images/light/images/button_hover_bg.png) 5 5 5 5 stretch;
13 }
14
15 Dtk--Widget--DTextButton:pressed {
16 border-image:url(:/images/light/images/button_press_bg.png) 5 5 5 5 stretch;
17 }
18
19 Dtk--Widget--DTextButton:checked {
20 color:#01BDFF;
21 }
+0
-16
src/widgets/themes/light/Dtk--Widget--DTextEdit.theme less more
0 Dtk--Widget--DTextEdit {
1 color: #fff;
2 border-radius: 3;
3 background-color: rgba(255, 255, 255, 26);/*use as outside border*/
4 }
5
6 Dtk--Widget--DTextEdit[alert="true"] QFrame#TextEditInsideFrame{
7 border-color: #FF8F00;
8 }
9
10 QFrame#TextEditInsideFrame {/*outside frame*/
11 background-color: rgba(0, 0, 0, 50);
12 border: 1px solid;
13 border-radius: 3;
14 border-color: black;
15 }
+0
-20
src/widgets/themes/light/Dtk--Widget--DTitlebar.theme less more
0 Dtk--Widget--DTitlebar {
1 background: qlineargradient(x1:1, y1:0, x2:1, y2:1,
2 stop:0 #ffffff, stop:1 #f8f8f8);
3 }
4
5 Dtk--Widget--DTitlebar[transparent=true] {
6 background: transparent;
7 }
8
9 Dtk--Widget--DWindowCloseButton {
10 qproperty-normalPic: url(:/images/light/images/window/close_normal.svg);
11 qproperty-hoverPic: url(:/images/light/images/window/close_hover.svg);
12 qproperty-pressPic: url(:/images/light/images/window/close_press.svg);
13 }
14
15 #DTitlebarDWindowQuitFullscreenButton {
16 qproperty-normalPic: url(:/images/light/images/window/quit_fullscreen_normal.svg);
17 qproperty-hoverPic: url(:/images/light/images/window/quit_fullscreen_hover.svg);
18 qproperty-pressPic: url(:/images/light/images/window/quit_fullscreen_press.svg);
19 }
+0
-5
src/widgets/themes/light/Dtk--Widget--DToast.theme less more
0 Dtk--Widget--DToast {
1 border: 1px solid rgba(0,0,0,10%);
2 border-radius: 4px;
3 background: white;
4 }
+0
-9
src/widgets/themes/light/Dtk--Widget--DWindow.theme less more
0 Dtk--Widget--DWindow {
1 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #3BC1FF, stop: 1.0 #079DFF);
2 border-width: 1px;
3 border-color: rgba(29, 130, 255, 0.30);
4 border-style: solid;
5 border-radius: 3;
6 font-size: 12px;
7 color: white;
8 }
+0
-6
src/widgets/themes/light/Dtk--Widget--DWindowCloseButton.theme less more
0 Dtk--Widget--DWindowCloseButton {
1 qproperty-normalPic: url(:/images/light/images/window/close_normal.svg);
2 qproperty-hoverPic: url(:/images/light/images/window/close_hover.svg);
3 qproperty-pressPic: url(:/images/light/images/window/close_press.svg);
4 qproperty-disabledPic: url(:/images/light/images/window/close_disabled.svg);
5 }
+0
-13
src/widgets/themes/light/Dtk--Widget--DWindowMaxButton.theme less more
0 Dtk--Widget--DWindowMaxButton[isMaximized=true] {
1 qproperty-normalPic: url(:/images/light/images/window/unmaximize_normal.svg);
2 qproperty-hoverPic: url(:/images/light/images/window/unmaximize_hover.svg);
3 qproperty-pressPic: url(:/images/light/images/window/unmaximize_press.svg);
4 qproperty-disabledPic: url(:/images/light/images/window/unmaximize_disabled.svg);
5 }
6
7 Dtk--Widget--DWindowMaxButton[isMaximized=false] {
8 qproperty-normalPic: url(:/images/light/images/window/maximize_normal.svg);
9 qproperty-hoverPic: url(:/images/light/images/window/maximize_hover.svg);
10 qproperty-pressPic: url(:/images/light/images/window/maximize_press.svg);
11 qproperty-disabledPic: url(:/images/light/images/window/maximize_disabled.svg);
12 }
+0
-6
src/widgets/themes/light/Dtk--Widget--DWindowMinButton.theme less more
0 Dtk--Widget--DWindowMinButton {
1 qproperty-normalPic: url(:/images/light/images/window/minimize_normal.svg);
2 qproperty-hoverPic: url(:/images/light/images/window/minimize_hover.svg);
3 qproperty-pressPic: url(:/images/light/images/window/minimize_press.svg);
4 qproperty-disabledPic: url(:/images/light/images/window/minimize_disabled.svg);
5 }
+0
-6
src/widgets/themes/light/Dtk--Widget--DWindowOptionButton.theme less more
0 Dtk--Widget--DWindowOptionButton {
1 qproperty-normalPic: url(:/images/light/images/window/menu_normal.svg);
2 qproperty-hoverPic: url(:/images/light/images/window/menu_hover.svg);
3 qproperty-pressPic: url(:/images/light/images/window/menu_press.svg);
4 qproperty-disabledPic: url(:/images/light/images/window/menu_disabled.svg);
5 }
+0
-5
src/widgets/themes/light/Dtk--Widget--DWindowRestoreButton.theme less more
0 Dtk--Widget--DWindowRestoreButton {
1 qproperty-normalPic: url(:/images/light/images/window/unmaximize_normal.svg);
2 qproperty-hoverPic: url(:/images/light/images/window/unmaximize_hover.svg);
3 qproperty-pressPic: url(:/images/light/images/window/unmaximize_press.svg);
4 }
src/widgets/themes/light/dialogs/images/check_focus.png less more
Binary diff not shown
src/widgets/themes/light/dialogs/images/light_check.png less more
Binary diff not shown
src/widgets/themes/light/dialogs/images/light_check_checked.png less more
Binary diff not shown
src/widgets/themes/light/dialogs/images/light_check_checked_hover.png less more
Binary diff not shown
src/widgets/themes/light/dialogs/images/light_close_small_hover.png less more
Binary diff not shown
src/widgets/themes/light/dialogs/images/light_close_small_normal.png less more
Binary diff not shown
src/widgets/themes/light/dialogs/images/light_close_small_press.png less more
Binary diff not shown
src/widgets/themes/light/dialogs/images/light_minimise_small_hover.png less more
Binary diff not shown
src/widgets/themes/light/dialogs/images/light_minimise_small_normal.png less more
Binary diff not shown
src/widgets/themes/light/dialogs/images/light_minimise_small_press.png less more
Binary diff not shown
src/widgets/themes/light/dialogs/images/user-trash-full.png less more
Binary diff not shown
src/widgets/themes/light/images/arrow_down_hover.png less more
Binary diff not shown
+0
-12
src/widgets/themes/light/images/arrow_down_hover.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="8px" height="5px" viewBox="0 0 8 5" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 47 (45396) - http://www.bohemiancoding.com/sketch -->
3 <title>down_hover</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="箭头" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
7 <g id="down_hover" stroke-width="1.2" stroke="#000000">
8 <polyline id="down-copy-2" points="7.57106781 0.5 4.03553391 4.03553391 0.5 0.5"></polyline>
9 </g>
10 </g>
11 </svg>
+0
-12
src/widgets/themes/light/images/arrow_down_insensitive.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="8px" height="5px" viewBox="0 0 8 5" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 47 (45396) - http://www.bohemiancoding.com/sketch -->
3 <title>down_insensitive</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="箭头" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.400000006">
7 <g id="down_insensitive" stroke-width="1.2" stroke="#303030">
8 <polyline id="down-copy-2" points="7.57106781 0.5 4.03553391 4.03553391 0.5 0.5"></polyline>
9 </g>
10 </g>
11 </svg>
src/widgets/themes/light/images/arrow_down_normal.png less more
Binary diff not shown
+0
-12
src/widgets/themes/light/images/arrow_down_normal.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="8px" height="5px" viewBox="0 0 8 5" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 47 (45396) - http://www.bohemiancoding.com/sketch -->
3 <title>down_normal</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="箭头" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
7 <g id="down_normal" stroke-width="1.2" stroke="#303030">
8 <polyline id="down-copy-2" points="7.57106781 0.5 4.03553391 4.03553391 0.5 0.5"></polyline>
9 </g>
10 </g>
11 </svg>
src/widgets/themes/light/images/arrow_down_press.png less more
Binary diff not shown
+0
-12
src/widgets/themes/light/images/arrow_down_press.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="8px" height="5px" viewBox="0 0 8 5" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 47 (45396) - http://www.bohemiancoding.com/sketch -->
3 <title>down_press</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="箭头" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
7 <g id="down_press" stroke-width="1.2" stroke="#2CA7F8">
8 <polyline id="down-copy-2" points="7.57106781 0.5 4.03553391 4.03553391 0.5 0.5"></polyline>
9 </g>
10 </g>
11 </svg>
src/widgets/themes/light/images/arrow_left_hover.png less more
Binary diff not shown
src/widgets/themes/light/images/arrow_left_normal.png less more
Binary diff not shown
src/widgets/themes/light/images/arrow_left_press.png less more
Binary diff not shown
src/widgets/themes/light/images/arrow_right_hover.png less more
Binary diff not shown
src/widgets/themes/light/images/arrow_right_normal.png less more
Binary diff not shown
src/widgets/themes/light/images/arrow_right_press.png less more
Binary diff not shown
src/widgets/themes/light/images/arrow_up_hover.png less more
Binary diff not shown
+0
-12
src/widgets/themes/light/images/arrow_up_hover.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="8px" height="5px" viewBox="0 0 8 5" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 47 (45396) - http://www.bohemiancoding.com/sketch -->
3 <title>up_hover</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="箭头" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
7 <g id="up_hover" stroke-width="1.2" stroke="#000000">
8 <polyline id="down-copy-2" transform="translate(4.035534, 2.767767) scale(1, -1) translate(-4.035534, -2.767767) " points="7.57106781 1 4.03553391 4.53553391 0.5 1"></polyline>
9 </g>
10 </g>
11 </svg>
+0
-12
src/widgets/themes/light/images/arrow_up_insensitive.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="8px" height="5px" viewBox="0 0 8 5" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 47 (45396) - http://www.bohemiancoding.com/sketch -->
3 <title>up_insensitive</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="箭头" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.400000006">
7 <g id="up_insensitive" stroke-width="1.2" stroke="#303030">
8 <polyline id="down-copy-2" transform="translate(4.035534, 2.767767) scale(1, -1) translate(-4.035534, -2.767767) " points="7.57106781 1 4.03553391 4.53553391 0.5 1"></polyline>
9 </g>
10 </g>
11 </svg>
src/widgets/themes/light/images/arrow_up_normal.png less more
Binary diff not shown
+0
-12
src/widgets/themes/light/images/arrow_up_normal.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="8px" height="5px" viewBox="0 0 8 5" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 47 (45396) - http://www.bohemiancoding.com/sketch -->
3 <title>up_normal</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="箭头" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
7 <g id="up_normal" stroke-width="1.2" stroke="#303030">
8 <polyline id="down-copy-2" transform="translate(4.035534, 2.767767) scale(1, -1) translate(-4.035534, -2.767767) " points="7.57106781 1 4.03553391 4.53553391 0.5 1"></polyline>
9 </g>
10 </g>
11 </svg>
src/widgets/themes/light/images/arrow_up_press.png less more
Binary diff not shown
+0
-12
src/widgets/themes/light/images/arrow_up_press.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="8px" height="5px" viewBox="0 0 8 5" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 47 (45396) - http://www.bohemiancoding.com/sketch -->
3 <title>up_press</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="箭头" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
7 <g id="up_press" stroke-width="1.2" stroke="#2CA7F8">
8 <polyline id="down-copy-2" transform="translate(4.035534, 2.767767) scale(1, -1) translate(-4.035534, -2.767767) " points="7.57106781 1 4.03553391 4.53553391 0.5 1"></polyline>
9 </g>
10 </g>
11 </svg>
src/widgets/themes/light/images/button_hover_bg.png less more
Binary diff not shown
src/widgets/themes/light/images/button_normal_bg.png less more
Binary diff not shown
src/widgets/themes/light/images/button_press_bg.png less more
Binary diff not shown
+0
-1
src/widgets/themes/light/images/capslock-clicked.svg less more
0 <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1524020868462" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3181" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M511.238149 536.597211M511.238149 536.597211M105.142154 907.508869M105.142154 265.895883M894.192074 633.006981c-7.892761 0-15.782451-3.024893-21.784142-9.067516l-360.869954-363.408777-361.487008 363.426173c-11.95631 12.020778-31.394011 12.07399-43.414789 0.115634-12.020778-11.95631-12.072967-31.394011-0.116657-43.414789l383.27115-385.326972c5.762237-5.792936 13.595646-9.05012 21.765723-9.05012 0.004093 0 0.008186 0 0.01228 0 8.175193 0.00307 16.010649 3.267417 21.770839 9.067516l382.635677 385.326972c11.946077 12.031011 11.878538 31.468712-0.152473 43.414789C909.835356 630.036323 902.01218 633.006981 894.192074 633.006981zM511.238149 602.307795m-45.025473 0a44 44 0 1 0 90.050945 0 44 44 0 1 0-90.050945 0ZM511.238149 792.514835m-45.025473 0a44 44 0 1 0 90.050945 0 44 44 0 1 0-90.050945 0Z" p-id="3182" fill="#e6e6e6"></path></svg>
+0
-1
src/widgets/themes/light/images/capslock-hover.svg less more
0 <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1524020868462" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3181" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M511.238149 536.597211M511.238149 536.597211M105.142154 907.508869M105.142154 265.895883M894.192074 633.006981c-7.892761 0-15.782451-3.024893-21.784142-9.067516l-360.869954-363.408777-361.487008 363.426173c-11.95631 12.020778-31.394011 12.07399-43.414789 0.115634-12.020778-11.95631-12.072967-31.394011-0.116657-43.414789l383.27115-385.326972c5.762237-5.792936 13.595646-9.05012 21.765723-9.05012 0.004093 0 0.008186 0 0.01228 0 8.175193 0.00307 16.010649 3.267417 21.770839 9.067516l382.635677 385.326972c11.946077 12.031011 11.878538 31.468712-0.152473 43.414789C909.835356 630.036323 902.01218 633.006981 894.192074 633.006981zM511.238149 602.307795m-45.025473 0a44 44 0 1 0 90.050945 0 44 44 0 1 0-90.050945 0ZM511.238149 792.514835m-45.025473 0a44 44 0 1 0 90.050945 0 44 44 0 1 0-90.050945 0Z" p-id="3182" fill="#1296db"></path></svg>
+0
-1
src/widgets/themes/light/images/capslock-normal.svg less more
0 <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1524020868462" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3181" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M511.238149 536.597211M511.238149 536.597211M105.142154 907.508869M105.142154 265.895883M894.192074 633.006981c-7.892761 0-15.782451-3.024893-21.784142-9.067516l-360.869954-363.408777-361.487008 363.426173c-11.95631 12.020778-31.394011 12.07399-43.414789 0.115634-12.020778-11.95631-12.072967-31.394011-0.116657-43.414789l383.27115-385.326972c5.762237-5.792936 13.595646-9.05012 21.765723-9.05012 0.004093 0 0.008186 0 0.01228 0 8.175193 0.00307 16.010649 3.267417 21.770839 9.067516l382.635677 385.326972c11.946077 12.031011 11.878538 31.468712-0.152473 43.414789C909.835356 630.036323 902.01218 633.006981 894.192074 633.006981zM511.238149 602.307795m-45.025473 0a44 44 0 1 0 90.050945 0 44 44 0 1 0-90.050945 0ZM511.238149 792.514835m-45.025473 0a44 44 0 1 0 90.050945 0 44 44 0 1 0-90.050945 0Z" p-id="3182" fill="#2c2c2c"></path></svg>
src/widgets/themes/light/images/checkbox_checked.png less more
Binary diff not shown
src/widgets/themes/light/images/checkbox_checked_hover.png less more
Binary diff not shown
src/widgets/themes/light/images/checkbox_checked_insensitive.png less more
Binary diff not shown
src/widgets/themes/light/images/checkbox_unchecked.png less more
Binary diff not shown
src/widgets/themes/light/images/checkbox_unchecked_hover.png less more
Binary diff not shown
src/widgets/themes/light/images/checkbox_unchecked_insensitive.png less more
Binary diff not shown
src/widgets/themes/light/images/combobox_arrow.png less more
Binary diff not shown
src/widgets/themes/light/images/combobox_arrow_active.png less more
Binary diff not shown
src/widgets/themes/light/images/delete_multi_hover.png less more
Binary diff not shown
src/widgets/themes/light/images/delete_multi_normal.png less more
Binary diff not shown
src/widgets/themes/light/images/delete_multi_press.png less more
Binary diff not shown
+0
-15
src/widgets/themes/light/images/hide_password_hover.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="24px" height="26px" viewBox="0 0 24 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 48.2 (47327) - http://www.bohemiancoding.com/sketch -->
3 <title>hide_password_hover</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="输入框" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round">
7 <g id="show_password_normal" stroke="#FFFFFF">
8 <g id="eye" transform="translate(7.000000, 10.000000)">
9 <path d="M0.5592708,3.6287071 C1.23885412,2.75604045 2.81171519,0.0489849546 5.59022902,0.0489849546 C8.36884007,0.0489849546 9.6238817,1.83884602 10.6212845,3.6287071" id="Stroke-1"></path>
10 <path d="M9.261933,3.3305751 C9.261933,4.88515839 7.60429415,6.14545003 5.5594192,6.14545003 C3.51464146,6.14545003 1.85700261,4.88515839 1.85700261,3.3305751" id="Stroke-3"></path>
11 </g>
12 </g>
13 </g>
14 </svg>
+0
-15
src/widgets/themes/light/images/hide_password_normal.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="24px" height="26px" viewBox="0 0 24 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 48.2 (47327) - http://www.bohemiancoding.com/sketch -->
3 <title>hide_password_normal</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="输入框" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round">
7 <g id="show_password_normal" stroke="#303030">
8 <g id="eye" transform="translate(7.000000, 10.000000)">
9 <path d="M0.5592708,3.6287071 C1.23885412,2.75604045 2.81171519,0.0489849546 5.59022902,0.0489849546 C8.36884007,0.0489849546 9.6238817,1.83884602 10.6212845,3.6287071" id="Stroke-1"></path>
10 <path d="M9.261933,3.3305751 C9.261933,4.88515839 7.60429415,6.14545003 5.5594192,6.14545003 C3.51464146,6.14545003 1.85700261,4.88515839 1.85700261,3.3305751" id="Stroke-3"></path>
11 </g>
12 </g>
13 </g>
14 </svg>
+0
-15
src/widgets/themes/light/images/hide_password_press.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="24px" height="26px" viewBox="0 0 24 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 48.2 (47327) - http://www.bohemiancoding.com/sketch -->
3 <title>hide_password_press</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="输入框" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round">
7 <g id="show_password_normal" stroke="#FFFFFF">
8 <g id="eye" transform="translate(7.000000, 10.000000)">
9 <path d="M0.5592708,3.6287071 C1.23885412,2.75604045 2.81171519,0.0489849546 5.59022902,0.0489849546 C8.36884007,0.0489849546 9.6238817,1.83884602 10.6212845,3.6287071" id="Stroke-1"></path>
10 <path d="M9.261933,3.3305751 C9.261933,4.88515839 7.60429415,6.14545003 5.5594192,6.14545003 C3.51464146,6.14545003 1.85700261,4.88515839 1.85700261,3.3305751" id="Stroke-3"></path>
11 </g>
12 </g>
13 </g>
14 </svg>
+0
-12
src/widgets/themes/light/images/input_clear_hover.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="14px" height="14px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
3 <title>input_clear_hover</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="输入框" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" fill-opacity="0.7">
7 <g id="input_clear_hover" fill="#000000">
8 <path d="M7.70710678,6.9999925 L10.3535534,4.35354589 C10.5488155,4.15828374 10.5488155,3.84170126 10.3535534,3.64643911 C10.1582912,3.45117696 9.84170876,3.45117696 9.64644661,3.64643911 L7,6.29288572 L4.35355339,3.64643911 C4.15829124,3.45117696 3.84170876,3.45117696 3.64644661,3.64643911 C3.45118446,3.84170126 3.45118446,4.15828374 3.64644661,4.35354589 L6.29289322,6.9999925 L3.64644661,9.64643911 C3.45118446,9.84170126 3.45118446,10.1582837 3.64644661,10.3535459 C3.84170876,10.548808 4.15829124,10.548808 4.35355339,10.3535459 L7,7.70709928 L9.64644661,10.3535459 C9.84170876,10.548808 10.1582912,10.548808 10.3535534,10.3535459 C10.5488155,10.1582837 10.5488155,9.84170126 10.3535534,9.64643911 L7.70710678,6.9999925 Z M7,14 C3.13400675,14 0,10.8659932 0,7 C0,3.13400675 3.13400675,0 7,0 C10.8659932,0 14,3.13400675 14,7 C14,10.8659932 10.8659932,14 7,14 Z" id="input_clear_"></path>
9 </g>
10 </g>
11 </svg>
+0
-12
src/widgets/themes/light/images/input_clear_normal.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="14px" height="14px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
3 <title>input_clear_normal</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="输入框" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" fill-opacity="0.5">
7 <g id="清除" fill="#000000">
8 <path d="M7.70710678,6.9999925 L10.3535534,4.35354589 C10.5488155,4.15828374 10.5488155,3.84170126 10.3535534,3.64643911 C10.1582912,3.45117696 9.84170876,3.45117696 9.64644661,3.64643911 L7,6.29288572 L4.35355339,3.64643911 C4.15829124,3.45117696 3.84170876,3.45117696 3.64644661,3.64643911 C3.45118446,3.84170126 3.45118446,4.15828374 3.64644661,4.35354589 L6.29289322,6.9999925 L3.64644661,9.64643911 C3.45118446,9.84170126 3.45118446,10.1582837 3.64644661,10.3535459 C3.84170876,10.548808 4.15829124,10.548808 4.35355339,10.3535459 L7,7.70709928 L9.64644661,10.3535459 C9.84170876,10.548808 10.1582912,10.548808 10.3535534,10.3535459 C10.5488155,10.1582837 10.5488155,9.84170126 10.3535534,9.64643911 L7.70710678,6.9999925 Z M7,14 C3.13400675,14 0,10.8659932 0,7 C0,3.13400675 3.13400675,0 7,0 C10.8659932,0 14,3.13400675 14,7 C14,10.8659932 10.8659932,14 7,14 Z"></path>
9 </g>
10 </g>
11 </svg>
+0
-12
src/widgets/themes/light/images/input_clear_press.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="14px" height="14px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
3 <title>input_clear_press</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="输入框" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
7 <g id="input_clear_press" fill="#2CA7F8">
8 <path d="M7.70710678,6.9999925 L10.3535534,4.35354589 C10.5488155,4.15828374 10.5488155,3.84170126 10.3535534,3.64643911 C10.1582912,3.45117696 9.84170876,3.45117696 9.64644661,3.64643911 L7,6.29288572 L4.35355339,3.64643911 C4.15829124,3.45117696 3.84170876,3.45117696 3.64644661,3.64643911 C3.45118446,3.84170126 3.45118446,4.15828374 3.64644661,4.35354589 L6.29289322,6.9999925 L3.64644661,9.64643911 C3.45118446,9.84170126 3.45118446,10.1582837 3.64644661,10.3535459 C3.84170876,10.548808 4.15829124,10.548808 4.35355339,10.3535459 L7,7.70709928 L9.64644661,10.3535459 C9.84170876,10.548808 10.1582912,10.548808 10.3535534,10.3535459 C10.5488155,10.1582837 10.5488155,9.84170126 10.3535534,9.64643911 L7.70710678,6.9999925 Z M7,14 C3.13400675,14 0,10.8659932 0,7 C0,3.13400675 3.13400675,0 7,0 C10.8659932,0 14,3.13400675 14,7 C14,10.8659932 10.8659932,14 7,14 Z" id="input_clear_"></path>
9 </g>
10 </g>
11 </svg>
+0
-1
src/widgets/themes/light/images/keyboard-clicked.svg less more
0 <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1524021535602" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5467" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M928.67 206.44H95.33A83.42 83.42 0 0 0 12 289.78v444.44a83.42 83.42 0 0 0 83.33 83.33h833.34a83.42 83.42 0 0 0 83.33-83.33V289.78a83.42 83.42 0 0 0-83.33-83.34z m27.78 527.78A27.8 27.8 0 0 1 928.67 762H95.33a27.8 27.8 0 0 1-27.78-27.78V289.78A27.8 27.8 0 0 1 95.33 262h833.34a27.8 27.8 0 0 1 27.78 27.78z" p-id="5468" fill="#e6e6e6"></path><path d="M845.33 623.11H178.67a27.78 27.78 0 0 0 0 55.56h666.66a27.78 27.78 0 0 0 0-55.56zM178.67 539.78H262a27.78 27.78 0 1 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM373.11 539.78h83.33a27.78 27.78 0 0 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM567.56 539.78h83.33a27.78 27.78 0 0 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM845.33 484.22H762a27.78 27.78 0 1 0 0 55.56h83.33a27.78 27.78 0 0 0 0-55.56zM178.67 400.89H262a27.78 27.78 0 1 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM373.11 400.89h83.33a27.78 27.78 0 0 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM567.56 400.89h83.33a27.78 27.78 0 0 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM845.33 345.33H762a27.78 27.78 0 1 0 0 55.56h83.33a27.78 27.78 0 0 0 0-55.56z" p-id="5469" fill="#e6e6e6"></path></svg>
+0
-1
src/widgets/themes/light/images/keyboard-hover.svg less more
0 <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1524021535602" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5467" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M928.67 206.44H95.33A83.42 83.42 0 0 0 12 289.78v444.44a83.42 83.42 0 0 0 83.33 83.33h833.34a83.42 83.42 0 0 0 83.33-83.33V289.78a83.42 83.42 0 0 0-83.33-83.34z m27.78 527.78A27.8 27.8 0 0 1 928.67 762H95.33a27.8 27.8 0 0 1-27.78-27.78V289.78A27.8 27.8 0 0 1 95.33 262h833.34a27.8 27.8 0 0 1 27.78 27.78z" p-id="5468" fill="#1296db"></path><path d="M845.33 623.11H178.67a27.78 27.78 0 0 0 0 55.56h666.66a27.78 27.78 0 0 0 0-55.56zM178.67 539.78H262a27.78 27.78 0 1 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM373.11 539.78h83.33a27.78 27.78 0 0 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM567.56 539.78h83.33a27.78 27.78 0 0 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM845.33 484.22H762a27.78 27.78 0 1 0 0 55.56h83.33a27.78 27.78 0 0 0 0-55.56zM178.67 400.89H262a27.78 27.78 0 1 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM373.11 400.89h83.33a27.78 27.78 0 0 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM567.56 400.89h83.33a27.78 27.78 0 0 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM845.33 345.33H762a27.78 27.78 0 1 0 0 55.56h83.33a27.78 27.78 0 0 0 0-55.56z" p-id="5469" fill="#1296db"></path></svg>
+0
-1
src/widgets/themes/light/images/keyboard-normal.svg less more
0 <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1524021535602" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5467" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M928.67 206.44H95.33A83.42 83.42 0 0 0 12 289.78v444.44a83.42 83.42 0 0 0 83.33 83.33h833.34a83.42 83.42 0 0 0 83.33-83.33V289.78a83.42 83.42 0 0 0-83.33-83.34z m27.78 527.78A27.8 27.8 0 0 1 928.67 762H95.33a27.8 27.8 0 0 1-27.78-27.78V289.78A27.8 27.8 0 0 1 95.33 262h833.34a27.8 27.8 0 0 1 27.78 27.78z" p-id="5468" fill="#2c2c2c"></path><path d="M845.33 623.11H178.67a27.78 27.78 0 0 0 0 55.56h666.66a27.78 27.78 0 0 0 0-55.56zM178.67 539.78H262a27.78 27.78 0 1 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM373.11 539.78h83.33a27.78 27.78 0 0 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM567.56 539.78h83.33a27.78 27.78 0 0 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM845.33 484.22H762a27.78 27.78 0 1 0 0 55.56h83.33a27.78 27.78 0 0 0 0-55.56zM178.67 400.89H262a27.78 27.78 0 1 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM373.11 400.89h83.33a27.78 27.78 0 0 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM567.56 400.89h83.33a27.78 27.78 0 0 0 0-55.56h-83.33a27.78 27.78 0 0 0 0 55.56zM845.33 345.33H762a27.78 27.78 0 1 0 0 55.56h83.33a27.78 27.78 0 0 0 0-55.56z" p-id="5469" fill="#2c2c2c"></path></svg>
+0
-16
src/widgets/themes/light/images/loadfile_hover.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 47 (45396) - http://www.bohemiancoding.com/sketch -->
3 <title>select-hover</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
7 <g id="影院_设置全部" transform="translate(-993.000000, -429.000000)" fill="#000000">
8 <g id="Group-8" transform="translate(967.000000, 429.000000)">
9 <g id="Group-6-Copy" transform="translate(26.000000, 0.000000)">
10 <path d="M6,9 L6,9 C6.55228475,9 7,9.44771525 7,10 L7,10 C7,10.5522847 6.55228475,11 6,11 C5.44771525,11 5,10.5522847 5,10 L5,10 L5,10 C5,9.44771525 5.44771525,9 6,9 L6,9 Z M10,9 C10.5522847,9 11,9.44771525 11,10 L11,10 C11,10.5522847 10.5522847,11 10,11 C9.44771525,11 9,10.5522847 9,10 L9,10 L9,10 C9,9.44771525 9.44771525,9 10,9 Z M14,9 C14.5522847,9 15,9.44771525 15,10 L15,10 C15,10.5522847 14.5522847,11 14,11 C13.4477153,11 13,10.5522847 13,10 L13,10 L13,10 C13,9.44771525 13.4477153,9 14,9 Z" id="Combined-Shape"></path>
11 </g>
12 </g>
13 </g>
14 </g>
15 </svg>
+0
-16
src/widgets/themes/light/images/loadfile_normal.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 47 (45396) - http://www.bohemiancoding.com/sketch -->
3 <title>select-normal</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
7 <g id="影院_设置全部" transform="translate(-967.000000, -429.000000)" fill="#303030">
8 <g id="Group-8" transform="translate(967.000000, 429.000000)">
9 <g id="Group-6">
10 <path d="M6,9 L6,9 C6.55228475,9 7,9.44771525 7,10 L7,10 C7,10.5522847 6.55228475,11 6,11 C5.44771525,11 5,10.5522847 5,10 L5,10 L5,10 C5,9.44771525 5.44771525,9 6,9 L6,9 Z M10,9 C10.5522847,9 11,9.44771525 11,10 L11,10 C11,10.5522847 10.5522847,11 10,11 C9.44771525,11 9,10.5522847 9,10 L9,10 L9,10 C9,9.44771525 9.44771525,9 10,9 Z M14,9 C14.5522847,9 15,9.44771525 15,10 L15,10 C15,10.5522847 14.5522847,11 14,11 C13.4477153,11 13,10.5522847 13,10 L13,10 L13,10 C13,9.44771525 13.4477153,9 14,9 Z" id="Combined-Shape"></path>
11 </g>
12 </g>
13 </g>
14 </g>
15 </svg>
+0
-16
src/widgets/themes/light/images/loadfile_press.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 47 (45396) - http://www.bohemiancoding.com/sketch -->
3 <title>select-press</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
7 <g id="影院_设置全部" transform="translate(-1019.000000, -429.000000)" fill="#2CA7F8">
8 <g id="Group-8" transform="translate(967.000000, 429.000000)">
9 <g id="Group-6-Copy-2" transform="translate(52.000000, 0.000000)">
10 <path d="M6,9 L6,9 C6.55228475,9 7,9.44771525 7,10 L7,10 C7,10.5522847 6.55228475,11 6,11 C5.44771525,11 5,10.5522847 5,10 L5,10 L5,10 C5,9.44771525 5.44771525,9 6,9 L6,9 Z M10,9 C10.5522847,9 11,9.44771525 11,10 L11,10 C11,10.5522847 10.5522847,11 10,11 C9.44771525,11 9,10.5522847 9,10 L9,10 L9,10 C9,9.44771525 9.44771525,9 10,9 Z M14,9 C14.5522847,9 15,9.44771525 15,10 L15,10 C15,10.5522847 14.5522847,11 14,11 C13.4477153,11 13,10.5522847 13,10 L13,10 L13,10 C13,9.44771525 13.4477153,9 14,9 Z" id="Combined-Shape"></path>
11 </g>
12 </g>
13 </g>
14 </g>
15 </svg>
src/widgets/themes/light/images/multiselect_active_normal.png less more
Binary diff not shown
src/widgets/themes/light/images/multiselect_inactive_hover.png less more
Binary diff not shown
src/widgets/themes/light/images/multiselect_inactive_normal.png less more
Binary diff not shown
+0
-1
src/widgets/themes/light/images/pw-visible-clicked.svg less more
0 <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1524021940747" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6370" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M512 240C178.704 240 12.304 483.872 5.376 494.256c-7.168 10.752-7.168 24.752 0 35.504C12.304 540.128 178.704 784 512 784s499.696-243.872 506.624-254.256c7.168-10.752 7.168-24.752 0-35.504C1011.696 483.872 845.296 240 512 240zM512 720C263.888 720 115.744 565.152 72.192 511.936 115.6 458.608 262.976 304 512 304c248.112 0 396.256 154.848 439.808 208.064C908.4 565.392 761.024 720 512 720zM512 368c-79.408 0-144 64.608-144 144s64.592 144 144 144 144-64.608 144-144S591.408 368 512 368zM512 592c-44.112 0-80-35.888-80-80s35.888-80 80-80 80 35.888 80 80S556.112 592 512 592z" p-id="6371" fill="#e6e6e6"></path></svg>
+0
-1
src/widgets/themes/light/images/pw-visible-hover.svg less more
0 <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1524021940747" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6370" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M512 240C178.704 240 12.304 483.872 5.376 494.256c-7.168 10.752-7.168 24.752 0 35.504C12.304 540.128 178.704 784 512 784s499.696-243.872 506.624-254.256c7.168-10.752 7.168-24.752 0-35.504C1011.696 483.872 845.296 240 512 240zM512 720C263.888 720 115.744 565.152 72.192 511.936 115.6 458.608 262.976 304 512 304c248.112 0 396.256 154.848 439.808 208.064C908.4 565.392 761.024 720 512 720zM512 368c-79.408 0-144 64.608-144 144s64.592 144 144 144 144-64.608 144-144S591.408 368 512 368zM512 592c-44.112 0-80-35.888-80-80s35.888-80 80-80 80 35.888 80 80S556.112 592 512 592z" p-id="6371" fill="#1296db"></path></svg>
+0
-1
src/widgets/themes/light/images/pw-visible-normal.svg less more
0 <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1524021940747" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6370" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M512 240C178.704 240 12.304 483.872 5.376 494.256c-7.168 10.752-7.168 24.752 0 35.504C12.304 540.128 178.704 784 512 784s499.696-243.872 506.624-254.256c7.168-10.752 7.168-24.752 0-35.504C1011.696 483.872 845.296 240 512 240zM512 720C263.888 720 115.744 565.152 72.192 511.936 115.6 458.608 262.976 304 512 304c248.112 0 396.256 154.848 439.808 208.064C908.4 565.392 761.024 720 512 720zM512 368c-79.408 0-144 64.608-144 144s64.592 144 144 144 144-64.608 144-144S591.408 368 512 368zM512 592c-44.112 0-80-35.888-80-80s35.888-80 80-80 80 35.888 80 80S556.112 592 512 592z" p-id="6371" fill="#2c2c2c"></path></svg>
src/widgets/themes/light/images/radio_selected.png less more
Binary diff not shown
src/widgets/themes/light/images/radio_selected_hover.png less more
Binary diff not shown
src/widgets/themes/light/images/radio_selected_insensitive.png less more
Binary diff not shown
src/widgets/themes/light/images/radio_unselected.png less more
Binary diff not shown
src/widgets/themes/light/images/radio_unselected_hover.png less more
Binary diff not shown
src/widgets/themes/light/images/radio_unselected_insensitive.png less more
Binary diff not shown
src/widgets/themes/light/images/restore_hover.png less more
Binary diff not shown
src/widgets/themes/light/images/restore_normal.png less more
Binary diff not shown
src/widgets/themes/light/images/restore_press.png less more
Binary diff not shown
+0
-23
src/widgets/themes/light/images/search.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="13px" height="12px" viewBox="0 0 13 12" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
3 <title>search </title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
7 <g id="深度音乐9" transform="translate(-465.000000, -74.000000)" stroke="#303030">
8 <g id="搜索结果-无" transform="translate(65.000000, 60.000000)">
9 <g id="工具栏-2">
10 <g id="搜索">
11 <g transform="translate(396.000000, 9.000000)">
12 <g id="search-" transform="translate(5.000000, 6.000000)">
13 <circle id="Oval-1" cx="4" cy="4" r="4"></circle>
14 <path d="M7.4,7.4 L10.6,10.6" id="Line"></path>
15 </g>
16 </g>
17 </g>
18 </g>
19 </g>
20 </g>
21 </g>
22 </svg>
src/widgets/themes/light/images/search_hover.png less more
Binary diff not shown
src/widgets/themes/light/images/search_normal.png less more
Binary diff not shown
src/widgets/themes/light/images/search_press.png less more
Binary diff not shown
+0
-7
src/widgets/themes/light/images/show_password_hover.svg less more
0 <svg height="26" viewBox="0 0 24 26" width="24" xmlns="http://www.w3.org/2000/svg">
1 <g fill="none" fill-rule="evenodd" transform="translate(7 10)">
2 <path d="m.55927 3.62871c.67958-.87267 2.25245-3.57973 5.03096-3.57973 2.77861 0 4.03365 1.78987 5.03105 3.57973" stroke="#fff" stroke-linecap="round"/>
3 <path d="m9.26193 3.33058c0 1.55458-1.65764 2.81487-3.70251 2.81487-2.04478 0-3.70242-1.26029-3.70242-2.81487" stroke="#fff" stroke-linecap="round"/>
4 <path d="m7.59355 3.1426c0 1.10425-.89522 1.99947-1.99947 1.99947-1.10435 0-1.99957-.89522-1.99957-1.99947s.89522-1.99948 1.99957-1.99948c1.10425 0 1.99947.89523 1.99947 1.99948" fill="#fff"/>
5 </g>
6 </svg>
+0
-16
src/widgets/themes/light/images/show_password_normal.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="24px" height="26px" viewBox="0 0 24 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 48.2 (47327) - http://www.bohemiancoding.com/sketch -->
3 <title>show_password_normal</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="输入框" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
7 <g id="show_password_normal">
8 <g id="eye" transform="translate(7.000000, 10.000000)">
9 <path d="M0.5592708,3.6287071 C1.23885412,2.75604045 2.81171519,0.0489849546 5.59022902,0.0489849546 C8.36884007,0.0489849546 9.6238817,1.83884602 10.6212845,3.6287071" id="Stroke-1" stroke="#303030" stroke-linecap="round"></path>
10 <path d="M9.261933,3.3305751 C9.261933,4.88515839 7.60429415,6.14545003 5.5594192,6.14545003 C3.51464146,6.14545003 1.85700261,4.88515839 1.85700261,3.3305751" id="Stroke-3" stroke="#303030" stroke-linecap="round"></path>
11 <path d="M7.593551,3.1425961 C7.593551,4.2468461 6.698329,5.1420681 5.594079,5.1420681 C4.489732,5.1420681 3.59451,4.2468461 3.59451,3.1425961 C3.59451,2.0383461 4.489732,1.1431231 5.594079,1.1431231 C6.698329,1.1431231 7.593551,2.0383461 7.593551,3.1425961" id="Fill-5" fill="#303030"></path>
12 </g>
13 </g>
14 </g>
15 </svg>
+0
-16
src/widgets/themes/light/images/show_password_press.svg less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg width="24px" height="26px" viewBox="0 0 24 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2 <!-- Generator: Sketch 48.2 (47327) - http://www.bohemiancoding.com/sketch -->
3 <title>show_password_press</title>
4 <desc>Created with Sketch.</desc>
5 <defs></defs>
6 <g id="输入框" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
7 <g id="show_password_normal">
8 <g id="eye" transform="translate(7.000000, 10.000000)">
9 <path d="M0.5592708,3.6287071 C1.23885412,2.75604045 2.81171519,0.0489849546 5.59022902,0.0489849546 C8.36884007,0.0489849546 9.6238817,1.83884602 10.6212845,3.6287071" id="Stroke-1" stroke="#FFFFFF" stroke-linecap="round"></path>
10 <path d="M9.261933,3.3305751 C9.261933,4.88515839 7.60429415,6.14545003 5.5594192,6.14545003 C3.51464146,6.14545003 1.85700261,4.88515839 1.85700261,3.3305751" id="Stroke-3" stroke="#FFFFFF" stroke-linecap="round"></path>
11 <path d="M7.593551,3.1425961 C7.593551,4.2468461 6.698329,5.1420681 5.594079,5.1420681 C4.489732,5.1420681 3.59451,4.2468461 3.59451,3.1425961 C3.59451,2.0383461 4.489732,1.1431231 5.594079,1.1431231 C6.698329,1.1431231 7.593551,2.0383461 7.593551,3.1425961" id="Fill-5" fill="#FFFFFF"></path>
12 </g>
13 </g>
14 </g>
15 </svg>
src/widgets/themes/light/images/slider_bg.png less more
Binary diff not shown
src/widgets/themes/light/images/slider_bg_active.png less more
Binary diff not shown
src/widgets/themes/light/images/slider_round.png less more
Binary diff not shown
src/widgets/themes/light/images/slider_sharp.png less more
Binary diff not shown
src/widgets/themes/light/images/spinner_decrease_hover.png less more
Binary diff not shown
src/widgets/themes/light/images/spinner_decrease_normal.png less more
Binary diff not shown
src/widgets/themes/light/images/spinner_decrease_press.png less more
Binary diff not shown
src/widgets/themes/light/images/spinner_increase_hover.png less more
Binary diff not shown
src/widgets/themes/light/images/spinner_increase_normal.png less more
Binary diff not shown
src/widgets/themes/light/images/spinner_increase_press.png less more
Binary diff not shown
+0
-1
src/widgets/themes/light/images/submit-clicked.svg less more
0 <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1524021439864" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4258" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M884.48 989.687l-744.96 0 0-517.047 122.727 0 0-188.574c0-137.716 112.036-249.753 249.774-249.753 137.716 0 249.731 112.036 249.731 249.753l0 188.574 122.727 0 0 517.047zM183.156 946.051l657.709 0 0-429.774-657.709 0 0 429.774zM305.884 472.64l412.233 0 0-188.574c0-113.651-92.444-206.116-206.094-206.116-113.651 0-206.138 92.466-206.138 206.116l0 188.574z" p-id="4259" fill="#e6e6e6"></path></svg>
+0
-1
src/widgets/themes/light/images/submit-hover.svg less more
0 <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1524021439864" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4258" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M884.48 989.687l-744.96 0 0-517.047 122.727 0 0-188.574c0-137.716 112.036-249.753 249.774-249.753 137.716 0 249.731 112.036 249.731 249.753l0 188.574 122.727 0 0 517.047zM183.156 946.051l657.709 0 0-429.774-657.709 0 0 429.774zM305.884 472.64l412.233 0 0-188.574c0-113.651-92.444-206.116-206.094-206.116-113.651 0-206.138 92.466-206.138 206.116l0 188.574z" p-id="4259" fill="#1296db"></path></svg>
+0
-1
src/widgets/themes/light/images/submit-normal.svg less more
0 <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1524021439864" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4258" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M884.48 989.687l-744.96 0 0-517.047 122.727 0 0-188.574c0-137.716 112.036-249.753 249.774-249.753 137.716 0 249.731 112.036 249.731 249.753l0 188.574 122.727 0 0 517.047zM183.156 946.051l657.709 0 0-429.774-657.709 0 0 429.774zM305.884 472.64l412.233 0 0-188.574c0-113.651-92.444-206.116-206.094-206.116-113.651 0-206.138 92.466-206.138 206.116l0 188.574z" p-id="4259" fill="#2c2c2c"></path></svg>
src/widgets/themes/light/images/tick_hover.png less more
Binary diff not shown
src/widgets/themes/light/images/tick_insensitive.png less more
Binary diff not shown
src/widgets/themes/light/images/tick_normal.png less more
Binary diff not shown
+0
-65
src/widgets/themes/light/images/water_back.svg less more
0 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
1 <svg
2 xmlns:dc="http://purl.org/dc/elements/1.1/"
3 xmlns:cc="http://creativecommons.org/ns#"
4 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
5 xmlns:svg="http://www.w3.org/2000/svg"
6 xmlns="http://www.w3.org/2000/svg"
7 xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
8 xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
9 width="500"
10 height="110"
11 viewBox="0 0 500 110"
12 version="1.1"
13 id="svg10"
14 sodipodi:docname="water_back.svg"
15 inkscape:version="0.92.1 r15371">
16 <metadata
17 id="metadata14">
18 <rdf:RDF>
19 <cc:Work
20 rdf:about="">
21 <dc:format>image/svg+xml</dc:format>
22 <dc:type
23 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
24 </cc:Work>
25 </rdf:RDF>
26 </metadata>
27 <sodipodi:namedview
28 pagecolor="#ffffff"
29 bordercolor="#666666"
30 borderopacity="1"
31 objecttolerance="10"
32 gridtolerance="10"
33 guidetolerance="10"
34 inkscape:pageopacity="0"
35 inkscape:pageshadow="2"
36 inkscape:window-width="1860"
37 inkscape:window-height="1052"
38 id="namedview12"
39 showgrid="false"
40 inkscape:zoom="1.3174516"
41 inkscape:cx="109.40083"
42 inkscape:cy="-30.881016"
43 inkscape:window-x="1920"
44 inkscape:window-y="0"
45 inkscape:window-maximized="1"
46 inkscape:current-layer="svg10" />
47 <!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
48 <title
49 id="title2">water_back</title>
50 <desc
51 id="desc4">Created with Sketch.</desc>
52 <defs
53 id="defs6" />
54 <g
55 id="对话框"
56 transform="scale(1.3157895,0.99099099)"
57 style="fill:none;fill-rule:evenodd;stroke:none;stroke-width:1">
58 <path
59 d="M 380,111 V 5.9627078 c -2.70874,-0.096499 -7.48881,-2.2162231 -13.50709,-1.0934831 -6.01828,1.12274 -8.0705,8.5760363 -12.62641,8.5264183 C 343.30789,13.281008 341.54976,4.5477337 331.81196,5.9627078 322.07416,7.3776819 305.3529,11.812819 298.61807,8.8419929 291.88324,5.8711665 284.15247,2.0873556 277.78014,2.1616118 268.77782,2.2666655 260.73265,19.521529 245.89558,18.045921 231.05852,16.570312 239.1012,15.077864 224.99667,11.812819 210.89214,8.5477749 210.87198,14.894414 199.63075,10.412758 188.38951,5.9311013 184.60501,-3.1405281 167.64172,3.1567133 150.67844,9.4539547 152.00683,13.395643 138.34354,13.395643 c -13.6633,0 -11.05715,-13.7707138 -31.18949,-13.38780304 C 93.768297,0.26243263 91.11274,7.6192711 78.398463,5.9627078 65.684186,4.3061445 52.883252,0.80138889 43.655352,0.26243263 30.885117,-0.48355127 19.232736,7.4478317 0,5.9627078 V 111 Z"
60 id="water_back"
61 inkscape:connector-curvature="0"
62 style="fill:#009dff" />
63 </g>
64 </svg>
+0
-65
src/widgets/themes/light/images/water_front.svg less more
0 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
1 <svg
2 xmlns:dc="http://purl.org/dc/elements/1.1/"
3 xmlns:cc="http://creativecommons.org/ns#"
4 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
5 xmlns:svg="http://www.w3.org/2000/svg"
6 xmlns="http://www.w3.org/2000/svg"
7 xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
8 xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
9 width="500"
10 height="109.99999"
11 viewBox="0 0 500 109.99999"
12 version="1.1"
13 id="svg10"
14 sodipodi:docname="water_front.svg"
15 inkscape:version="0.92.1 r15371">
16 <metadata
17 id="metadata14">
18 <rdf:RDF>
19 <cc:Work
20 rdf:about="">
21 <dc:format>image/svg+xml</dc:format>
22 <dc:type
23 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
24 </cc:Work>
25 </rdf:RDF>
26 </metadata>
27 <sodipodi:namedview
28 pagecolor="#ffffff"
29 bordercolor="#666666"
30 borderopacity="1"
31 objecttolerance="10"
32 gridtolerance="10"
33 guidetolerance="10"
34 inkscape:pageopacity="0"
35 inkscape:pageshadow="2"
36 inkscape:window-width="1920"
37 inkscape:window-height="1052"
38 id="namedview12"
39 showgrid="false"
40 inkscape:zoom="1.0973684"
41 inkscape:cx="191.82254"
42 inkscape:cy="49.999995"
43 inkscape:window-x="0"
44 inkscape:window-y="0"
45 inkscape:window-maximized="1"
46 inkscape:current-layer="svg10" />
47 <!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
48 <title
49 id="title2">water_front</title>
50 <desc
51 id="desc4">Created with Sketch.</desc>
52 <defs
53 id="defs6" />
54 <g
55 id="对话框"
56 transform="matrix(1.3157895,0,0,1.0997447,0,0.02552545)"
57 style="fill:none;fill-rule:evenodd;stroke:none;stroke-width:1">
58 <path
59 d="M 380,100 V 11 C 377.29126,10.759864 374.13894,10.326506 370,9 365.80855,8.2826191 359.15506,1.7624294 355,2 344.04054,1.6160454 344.00285,5.3256612 334,7 327.54588,7.457074 325.45208,4.8877289 309,2 293.50039,-1.4513104 281.01233,11.25391 272,11 265.52645,10.552792 254.55626,5.8910696 247,6 239.9772,6.3762718 233.12477,13.647955 226,14 217.2188,13.944993 213.81007,7.8126653 207,6 200.10916,3.8950621 189.23204,4.0213183 184,6 168.80955,11.633594 164.64559,6.5558972 153,3 150.52461,2.2424471 146.02223,1.9832254 143,2 136.57807,1.1448717 127.08966,12.460109 121,14 113.13485,15.436585 113.39058,10.24849 97,3 81.479518,-4.121655 69.250354,6.8041402 58,7 49.086952,6.4021939 42.35983,0.50535639 33,0 20.361695,-0.63979385 19.232736,12.169421 0,11 v 89 z"
60 id="water_front"
61 inkscape:connector-curvature="0"
62 style="fill:#01c4ff" />
63 </g>
64 </svg>
+0
-3
src/widgets/themes/light/images/window/close_disabled.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <polygon fill-opacity=".2" points="4.243 4.95 1.061 8.132 .707 8.485 0 7.778 .354 7.425 3.536 4.243 .354 1.061 0 .707 .707 0 1.061 .354 4.243 3.536 7.425 .354 7.778 0 8.485 .707 8.132 1.061 4.95 4.243 8.132 7.425 8.485 7.778 7.778 8.485 7.425 8.132" opacity=".5" transform="translate(16 16)"/>
2 </svg>
+0
-6
src/widgets/themes/light/images/window/close_hover.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="none" fill-rule="evenodd">
2 <rect width="40" height="40" fill="#636381" fill-opacity=".1"/>
3 <polygon fill="#FF8500" fill-rule="nonzero" points="20.243 20.95 17.061 24.132 16.707 24.485 16 23.778 16.354 23.425 19.536 20.243 16.354 17.061 16 16.707 16.707 16 17.061 16.354 20.243 19.536 23.425 16.354 23.778 16 24.485 16.707 24.132 17.061 20.95 20.243 24.132 23.425 24.485 23.778 23.778 24.485 23.425 24.132"/>
4 </g>
5 </svg>
+0
-3
src/widgets/themes/light/images/window/close_normal.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <polygon fill="#303030" points="20.25 20.958 17.063 24.146 16.708 24.5 16 23.792 16.354 23.438 19.542 20.25 16.354 17.063 16 16.708 16.708 16 17.063 16.354 20.25 19.542 23.438 16.354 23.792 16 24.5 16.708 24.146 17.063 20.958 20.25 24.146 23.438 24.5 23.792 23.792 24.5 23.438 24.146"/>
2 </svg>
+0
-6
src/widgets/themes/light/images/window/close_press.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="none" fill-rule="evenodd">
2 <rect width="40" height="40" fill="#34344B" fill-opacity=".1"/>
3 <polygon fill="#FF3763" fill-rule="nonzero" points="20.243 20.95 17.061 24.132 16.707 24.485 16 23.778 16.354 23.425 19.536 20.243 16.354 17.061 16 16.707 16.707 16 17.061 16.354 20.243 19.536 23.425 16.354 23.778 16 24.485 16.707 24.132 17.061 20.95 20.243 24.132 23.425 24.485 23.778 23.778 24.485 23.425 24.132"/>
4 </g>
5 </svg>
+0
-6
src/widgets/themes/light/images/window/fullscreen_hover.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="none" fill-rule="evenodd">
2 <rect width="40" height="40" fill="#636381" fill-opacity=".1" rx="4"/>
3 <path fill="#303030" d="M24,20 L24,16 L20,16 L20,15 L25,15 L25,20 L24,20 Z M16,20 L16,24 L20,24 L20,25 L15,25 L15,20 L16,20 Z"/>
4 </g>
5 </svg>
+0
-3
src/widgets/themes/light/images/window/fullscreen_normal.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <path fill="#303030" fill-rule="evenodd" d="M9,5 L9,1 L5,1 L5,0 L10,0 L10,5 L9,5 Z M1,5 L1,9 L5,9 L5,10 L0,10 L0,5 L1,5 Z" transform="translate(15 15)"/>
2 </svg>
+0
-6
src/widgets/themes/light/images/window/fullscreen_press.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="none" fill-rule="evenodd">
2 <rect width="40" height="40" fill="#34344B" fill-opacity=".1"/>
3 <path fill="#2CA7F8" fill-rule="nonzero" d="M24,20 L24,16 L20,16 L20,15 L25,15 L25,20 L24,20 Z M16,20 L16,24 L20,24 L20,25 L15,25 L15,20 L16,20 Z"/>
4 </g>
5 </svg>
+0
-3
src/widgets/themes/light/images/window/maximize_disabled.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <path fill-opacity=".2" fill-rule="evenodd" d="M0,6.25 L0,1.75 L0,0 L1.8,0 L8.2,0 L10,0 L10,1.75 L10,6.25 L10,8 L8.2,8 L1.8,8 L0,8 L0,6.25 Z M1,7 L9,7 L9,1 L1,1 L1,7 Z" opacity=".5" transform="translate(15 16)"/>
2 </svg>
+0
-6
src/widgets/themes/light/images/window/maximize_hover.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="none" fill-rule="evenodd">
2 <rect width="40" height="40" fill="#636381" fill-opacity=".1"/>
3 <path fill="#303030" d="M15,22.25 L15,17.75 L15,16 L16.8,16 L23.2,16 L25,16 L25,17.75 L25,22.25 L25,24 L23.2,24 L16.8,24 L15,24 L15,22.25 Z M16,23 L24,23 L24,17 L16,17 L16,23 Z"/>
4 </g>
5 </svg>
+0
-3
src/widgets/themes/light/images/window/maximize_normal.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <path fill="#303030" fill-rule="evenodd" d="M15,22.25 L15,17.75 L15,16 L16.8,16 L23.2,16 L25,16 L25,17.75 L25,22.25 L25,24 L23.2,24 L16.8,24 L15,24 L15,22.25 Z M16,23 L24,23 L24,17 L16,17 L16,23 Z"/>
2 </svg>
+0
-6
src/widgets/themes/light/images/window/maximize_press.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="none" fill-rule="evenodd">
2 <rect width="40" height="40" fill="#34344B" fill-opacity=".1"/>
3 <path fill="#2CA7F8" fill-rule="nonzero" d="M15,22.25 L15,17.75 L15,16 L16.8,16 L23.2,16 L25,16 L25,17.75 L25,22.25 L25,24 L23.2,24 L16.8,24 L15,24 L15,22.25 Z M16,23 L24,23 L24,17 L16,17 L16,23 Z"/>
4 </g>
5 </svg>
+0
-3
src/widgets/themes/light/images/window/menu_disabled.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <path fill-opacity=".2" d="M7.5625,1 L0.4375,1 L0,1 L0,0 L0.4375,0 L7.5625,0 L8,0 L8,1 L7.5625,1 Z M9.57647059,5 L0.423529412,5 L0,5 L0,4 L0.423529412,4 L9.57647059,4 L10,4 L10,5 L9.57647059,5 Z M9.57647059,9 L0.423529412,9 L0,9 L0,8 L0.423529412,8 L9.57647059,8 L10,8 L10,9 L9.57647059,9 Z" opacity=".5" transform="translate(15 16)"/>
2 </svg>
+0
-6
src/widgets/themes/light/images/window/menu_hover.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="none" fill-rule="evenodd">
2 <rect width="40" height="40" fill="#636381" fill-opacity=".1"/>
3 <path fill="#303030" fill-rule="nonzero" d="M7.5625,1 L0.4375,1 L0,1 L0,0 L0.4375,0 L7.5625,0 L8,0 L8,1 L7.5625,1 Z M9.57647059,5 L0.423529412,5 L0,5 L0,4 L0.423529412,4 L9.57647059,4 L10,4 L10,5 L9.57647059,5 Z M9.57647059,9 L0.423529412,9 L0,9 L0,8 L0.423529412,8 L9.57647059,8 L10,8 L10,9 L9.57647059,9 Z" transform="translate(15 15)"/>
4 </g>
5 </svg>
+0
-3
src/widgets/themes/light/images/window/menu_normal.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <path fill="#303030" d="M7.5625,1 L0.4375,1 L0,1 L0,0 L0.4375,0 L7.5625,0 L8,0 L8,1 L7.5625,1 Z M9.57647059,5 L0.423529412,5 L0,5 L0,4 L0.423529412,4 L9.57647059,4 L10,4 L10,5 L9.57647059,5 Z M9.57647059,9 L0.423529412,9 L0,9 L0,8 L0.423529412,8 L9.57647059,8 L10,8 L10,9 L9.57647059,9 Z" transform="translate(15 15)"/>
2 </svg>
+0
-6
src/widgets/themes/light/images/window/menu_press.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="none" fill-rule="evenodd">
2 <rect width="40" height="40" fill="#34344B" fill-opacity=".1"/>
3 <path fill="#2CA7F8" fill-rule="nonzero" d="M22.5625,16 L15.4375,16 L15,16 L15,15 L15.4375,15 L22.5625,15 L23,15 L23,16 L22.5625,16 Z M24.5764706,20 L15.4235294,20 L15,20 L15,19 L15.4235294,19 L24.5764706,19 L25,19 L25,20 L24.5764706,20 Z M24.5764706,24 L15.4235294,24 L15,24 L15,23 L15.4235294,23 L24.5764706,23 L25,23 L25,24 L24.5764706,24 Z"/>
4 </g>
5 </svg>
+0
-3
src/widgets/themes/light/images/window/minimize_disabled.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <polygon fill-opacity=".2" points=".518 1 10.482 1 11 1 11 0 10.482 0 .518 0 0 0 0 1" opacity=".5" transform="translate(14 20)"/>
2 </svg>
+0
-6
src/widgets/themes/light/images/window/minimize_hover.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="none" fill-rule="evenodd">
2 <rect width="40" height="40" fill="#636381" fill-opacity=".1"/>
3 <polygon fill="#303030" fill-rule="nonzero" points="15.471 20 24.529 20 25 20 25 19 24.529 19 15.471 19 15 19 15 20"/>
4 </g>
5 </svg>
+0
-3
src/widgets/themes/light/images/window/minimize_normal.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <polygon fill="#303030" points="15.471 20 24.529 20 25 20 25 19 24.529 19 15.471 19 15 19 15 20"/>
2 </svg>
+0
-6
src/widgets/themes/light/images/window/minimize_press.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="none" fill-rule="evenodd">
2 <rect width="40" height="40" fill="#34344B" fill-opacity=".1"/>
3 <polygon fill="#2CA7F8" fill-rule="nonzero" points="15.471 20 24.529 20 25 20 25 19 24.529 19 15.471 19 15 19 15 20"/>
4 </g>
5 </svg>
+0
-6
src/widgets/themes/light/images/window/quit_fullscreen_hover.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="none" fill-rule="evenodd">
2 <rect width="40" height="40" fill="#636381" fill-opacity=".1" rx="4"/>
3 <path fill="#303030" d="M18,26 L18,22 L14,22 L14,21 L19,21 L19,26 L18,26 Z M22,14 L22,18 L26,18 L26,19 L21,19 L21,14 L22,14 Z"/>
4 </g>
5 </svg>
+0
-3
src/widgets/themes/light/images/window/quit_fullscreen_normal.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <path fill="#303030" fill-rule="evenodd" d="M4,12 L4,8 L0,8 L0,7 L5,7 L5,12 L4,12 Z M8,0 L8,4 L12,4 L12,5 L7,5 L7,0 L8,0 Z" transform="translate(14 15)"/>
2 </svg>
+0
-6
src/widgets/themes/light/images/window/quit_fullscreen_press.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="none" fill-rule="evenodd">
2 <rect width="40" height="40" fill="#34344B" fill-opacity=".1"/>
3 <path fill="#2CA7F8" fill-rule="nonzero" d="M18,26 L18,22 L14,22 L14,21 L19,21 L19,26 L18,26 Z M22,14 L22,18 L26,18 L26,19 L21,19 L21,14 L22,14 Z"/>
4 </g>
5 </svg>
+0
-3
src/widgets/themes/light/images/window/unmaximize_disabled.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <path fill-opacity=".2" fill-rule="evenodd" d="M9,1 L1,1 L1,0 L10,0 L10,9 L9,9 L9,1 Z M0,8 L0,4 L0,2 L2,2 L6,2 L8,2 L8,4 L8,8 L8,10 L6,10 L2,10 L0,10 L0,8 Z M1,9 L7,9 L7,3 L1,3 L1,9 Z" opacity=".5" transform="translate(15 15)"/>
2 </svg>
+0
-6
src/widgets/themes/light/images/window/unmaximize_hover.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="none" fill-rule="evenodd">
2 <rect width="40" height="40" fill="#636381" fill-opacity=".1"/>
3 <path fill="#303030" d="M24,16 L16,16 L16,15 L25,15 L25,24 L24,24 L24,16 Z M15,23 L15,19 L15,17 L17,17 L21,17 L23,17 L23,19 L23,23 L23,25 L21,25 L17,25 L15,25 L15,23 Z M16,24 L22,24 L22,18 L16,18 L16,24 Z"/>
4 </g>
5 </svg>
+0
-3
src/widgets/themes/light/images/window/unmaximize_normal.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <path fill="#303030" fill-rule="evenodd" d="M24,16 L16,16 L16,15 L25,15 L25,24 L24,24 L24,16 Z M15,23 L15,19 L15,17 L17,17 L21,17 L23,17 L23,19 L23,23 L23,25 L21,25 L17,25 L15,25 L15,23 Z M16,24 L22,24 L22,18 L16,18 L16,24 Z"/>
2 </svg>
+0
-6
src/widgets/themes/light/images/window/unmaximize_press.svg less more
0 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
1 <g fill="none" fill-rule="evenodd">
2 <rect width="40" height="40" fill="#34344B" fill-opacity=".1"/>
3 <path fill="#2CA7F8" fill-rule="nonzero" d="M24,16 L16,16 L16,15 L25,15 L25,24 L24,24 L24,16 Z M15,23 L15,19 L15,17 L17,17 L21,17 L23,17 L23,19 L23,23 L23,25 L21,25 L17,25 L15,25 L15,23 Z M16,24 L22,24 L22,18 L16,18 L16,24 Z"/>
4 </g>
5 </svg>
77
88 linux{
99 HEADERS += \
10 $$PWD/dmpriscontrol.h \
11 $$PWD/dpasswdeditanimated.h
10 $$PWD/dmpriscontrol.h
1211
1312 SOURCES += \
14 $$PWD/dmpriscontrol.cpp \
15 $$PWD/dpasswdeditanimated.cpp
13 $$PWD/dmpriscontrol.cpp
1614
1715 includes.files += \
1816 $$PWD/DPasswdEditAnimated
4644 $$PWD/dthememanager.h \
4745 $$PWD/dapplication.h \
4846 $$PWD/dconstants.h \
49 $$PWD/dseparatorhorizontal.h \
50 $$PWD/dseparatorvertical.h \
5147 $$PWD/dbaseline.h \
5248 $$PWD/dheaderline.h \
5349 $$PWD/dbaseexpand.h \
5450 $$PWD/darrowbutton.h \
5551 $$PWD/darrowlineexpand.h \
5652 $$PWD/dswitchlineexpand.h \
57 $$PWD/dbuttonlist.h \
5853 $$PWD/dimagebutton.h \
59 $$PWD/dtextbutton.h \
6054 $$PWD/dloadingindicator.h \
6155 $$PWD/dsearchedit.h \
6256 $$PWD/dswitchbutton.h \
7064 $$PWD/dsimplelistview.h \
7165 $$PWD/dsimplelistitem.h \
7266 $$PWD/dexpandgroup.h \
73 $$PWD/dlabel.h \
74 $$PWD/dlinkbutton.h \
75 $$PWD/dscrollbar.h \
76 $$PWD/dscrollarea.h \
7767 $$PWD/darrowrectangle.h \
7868 $$PWD/dgraphicsgloweffect.h \
79 $$PWD/dbasebutton.h \
80 $$PWD/dlistwidget.h \
8169 $$PWD/dboxwidget.h \
8270 $$PWD/dcircleprogress.h \
8371 $$PWD/dstackwidget.h \
8573 $$PWD/dpasswordedit.h \
8674 $$PWD/dipv4lineedit.h \
8775 $$PWD/dspinbox.h \
88 $$PWD/doptionlist.h \
89 $$PWD/doption.h \
9076 $$PWD/dpicturesequenceview.h \
9177 $$PWD/dflowlayout.h \
9278 $$PWD/dlistview.h \
9379 $$PWD/denhancedwidget.h \
94 $$PWD/dtextedit.h \
9580 $$PWD/dtitlebar.h \
9681 $$PWD/dplatformwindowhandle.h \
9782 $$PWD/dmainwindow.h \
9984 $$PWD/dpageindicator.h \
10085 $$PWD/dclipeffectwidget.h \
10186 $$PWD/dgraphicsclipeffect.h \
102 $$PWD/dforeignwindow.h \
103 $$PWD/dpushbutton.h \
10487 $$PWD/dtickeffect.h \
10588 $$PWD/dwaterprogress.h \
10689 $$PWD/dsettingswidgetfactory.h \
11194 $$PWD/dstyleoption.h \
11295 $$PWD/dtoast.h \
11396 $$PWD/danchors.h \
114 $$PWD/dwindowgroupleader.h \
115 $$PWD/dborderlesswidget.h \
116 $$PWD/dborderlesswindow.h
97 $$PWD/dstyle.h \
98 $$PWD/dfloatingbutton.h \
99 $$PWD/dwidgetstype.h \
100 $$PWD/dstyleditemdelegate.h \
101 $$PWD/diconbutton.h \
102 $$PWD/dfloatingwidget.h \
103 $$PWD/dapplicationhelper.h \
104 $$PWD/dfloatingmessage.h \
105 $$PWD/dmessagemanager.h \
106 $$PWD/dbuttonbox.h \
107 $$PWD/dwarningbutton.h \
108 $$PWD/dcommandlinkbutton.h \
109 $$PWD/ddialogclosebutton.h \
110 $$PWD/dtiplabel.h \
111 $$PWD/dtooltip.h \
112 $$PWD/dframe.h \
113 $$PWD/dshadowline.h \
114 $$PWD/dcoloredprogressbar.h \
115 $$PWD/dkeysequenceedit.h \
116 $$PWD/dprogressbar.h \
117 $$PWD/dlabel.h \
118 $$PWD/dtextedit.h \
119 $$PWD/ddrawer.h \
120 $$PWD/darrowlinedrawer.h \
121 $$PWD/ddrawergroup.h \
122 $$PWD/dalertcontrol.h
117123
118124 SOURCES += $$PWD/dslider.cpp \
119125 $$PWD/dbackgroundgroup.cpp \
120126 $$PWD/dthememanager.cpp \
121127 $$PWD/dapplication.cpp \
122 $$PWD/dseparatorhorizontal.cpp \
123 $$PWD/dseparatorvertical.cpp \
124128 $$PWD/dbaseline.cpp \
125129 $$PWD/dheaderline.cpp \
126130 $$PWD/dbaseexpand.cpp \
127131 $$PWD/darrowbutton.cpp \
128132 $$PWD/darrowlineexpand.cpp \
129133 $$PWD/dswitchlineexpand.cpp \
130 $$PWD/dbuttonlist.cpp \
131134 $$PWD/dimagebutton.cpp \
132 $$PWD/dtextbutton.cpp \
133135 $$PWD/dloadingindicator.cpp \
134136 $$PWD/dsearchedit.cpp \
135137 $$PWD/dswitchbutton.cpp\
143145 $$PWD/dsimplelistview.cpp \
144146 $$PWD/dsimplelistitem.cpp \
145147 $$PWD/dexpandgroup.cpp \
146 $$PWD/dlabel.cpp \
147 $$PWD/dlinkbutton.cpp \
148 $$PWD/dscrollbar.cpp \
149 $$PWD/dscrollarea.cpp \
150148 $$PWD/darrowrectangle.cpp \
151149 $$PWD/dgraphicsgloweffect.cpp \
152 $$PWD/dbasebutton.cpp \
153 $$PWD/dlistwidget.cpp \
154150 $$PWD/dboxwidget.cpp \
155151 $$PWD/dcircleprogress.cpp \
156152 $$PWD/dstackwidget.cpp \
158154 $$PWD/dpasswordedit.cpp \
159155 $$PWD/dipv4lineedit.cpp \
160156 $$PWD/dspinbox.cpp \
161 $$PWD/doptionlist.cpp \
162 $$PWD/doption.cpp \
163157 $$PWD/dpicturesequenceview.cpp \
164158 $$PWD/dflowlayout.cpp \
165159 $$PWD/dlistview.cpp \
166160 $$PWD/denhancedwidget.cpp \
167 $$PWD/dtextedit.cpp \
168161 $$PWD/dtitlebar.cpp \
169162 $$PWD/dplatformwindowhandle.cpp \
170163 $$PWD/dmainwindow.cpp \
172165 $$PWD/dpageindicator.cpp \
173166 $$PWD/dclipeffectwidget.cpp \
174167 $$PWD/dgraphicsclipeffect.cpp \
175 $$PWD/dforeignwindow.cpp \
176 $$PWD/dpushbutton.cpp \
177168 $$PWD/dtickeffect.cpp \
178169 $$PWD/dwaterprogress.cpp \
179170 $$PWD/dsettingswidgetfactory.cpp \
184175 $$PWD/dstyleoption.cpp \
185176 $$PWD/dtoast.cpp \
186177 $$PWD/danchors.cpp \
187 $$PWD/dwindowgroupleader.cpp \
188 $$PWD/dborderlesswidget.cpp \
189 $$PWD/dborderlesswindow.cpp
178 $$PWD/dstyle.cpp \
179 $$PWD/dfloatingbutton.cpp \
180 $$PWD/dstyleditemdelegate.cpp \
181 $$PWD/diconbutton.cpp \
182 $$PWD/dfloatingwidget.cpp \
183 $$PWD/dapplicationhelper.cpp \
184 $$PWD/dfloatingmessage.cpp \
185 $$PWD/dmessagemanager.cpp \
186 $$PWD/dbuttonbox.cpp \
187 $$PWD/dwarningbutton.cpp \
188 $$PWD/dcommandlinkbutton.cpp \
189 $$PWD/ddialogclosebutton.cpp \
190 $$PWD/dtiplabel.cpp \
191 $$PWD/dtooltip.cpp \
192 $$PWD/dframe.cpp \
193 $$PWD/dshadowline.cpp \
194 $$PWD/dcoloredprogressbar.cpp \
195 $$PWD/dkeysequenceedit.cpp \
196 $$PWD/dprogressbar.cpp \
197 $$PWD/dlabel.cpp \
198 $$PWD/dtextedit.cpp \
199 $$PWD/ddrawer.cpp \
200 $$PWD/darrowlinedrawer.cpp \
201 $$PWD/ddrawergroup.cpp \
202 $$PWD/dalertcontrol.cpp
190203
191204 RESOURCES += \
192 $$PWD/themes/dui_theme_dark.qrc \
193 $$PWD/themes/dui_theme_light.qrc \
194 $$PWD/icons.qrc
205 $$PWD/icons.qrc \
206 $$PWD/icons/dtk-icon-theme.qrc
195207
196208 INCLUDEPATH += $$PWD
197209
198210 includes.files += $$PWD/*.h
199211 includes.files += \
200212 $$PWD/DTitlebar \
201 $$PWD/DWindow \
202213 $$PWD/DMainWindow \
203214 $$PWD/DAboutDialog \
204215 $$PWD/DApplication \
207218 $$PWD/DGraphicsDropShadowEffect \
208219 $$PWD/DPlatformWindowHandle \
209220 $$PWD/DGraphicsClipEffect \
210 $$PWD/DForeignWindow \
211221 $$PWD/DExpandGroup \
212222 $$PWD/DArrowButton \
213223 $$PWD/DArrowLineExpand \
228238 $$PWD/DFileDialog \
229239 $$PWD/DLineEdit \
230240 $$PWD/DStyleOptionLineEdit \
231 $$PWD/DWindowGroupLeader \
232241 $$PWD/DAnchors \
233242 $$PWD/DSegmentedControl \
234243 $$PWD/DSegmentedHighlight \
235 $$PWD/DBackgroundGroup
244 $$PWD/DBackgroundGroup \
245 $$PWD/DStyleOptionBackgroundGroup \
246 $$PWD/DStyleOptionButton \
247 $$PWD/DPalette \
248 $$PWD/DFontSizeManager \
249 $$PWD/DStyle \
250 $$PWD/DFloatingButton \
251 $$PWD/DListView \
252 $$PWD/DStyleOptionViewItem \
253 $$PWD/DScrollBar \
254 $$PWD/DPushButton \
255 $$PWD/DToolButton \
256 $$PWD/DRadioButton \
257 $$PWD/DCheckButton \
258 $$PWD/DCommandLinkButton \
259 $$PWD/DDialogButtonBox \
260 $$PWD/DListWidget \
261 $$PWD/DTreeWidget \
262 $$PWD/DTableWidget \
263 $$PWD/DGroupBox \
264 $$PWD/DScrollArea \
265 $$PWD/DToolBox \
266 $$PWD/DTableWidget \
267 $$PWD/DStackedWidget \
268 $$PWD/DFrame \
269 $$PWD/DWidget \
270 $$PWD/DMDIArea \
271 $$PWD/DDockWidget \
272 $$PWD/DComboBox \
273 $$PWD/DFontComboBox \
274 $$PWD/DLineEdit \
275 $$PWD/DTextEdit \
276 $$PWD/DPlainTextEdit \
277 $$PWD/DSpinBox \
278 $$PWD/DDoubleSpinBox \
279 $$PWD/DTimeEdit \
280 $$PWD/DDateEdit \
281 $$PWD/DDateTimeEdit \
282 $$PWD/DDial \
283 $$PWD/DHorizontalScrollBar \
284 $$PWD/DVerticalScrollBar \
285 $$PWD/DHorizontalSlider \
286 $$PWD/DVerticalSlider \
287 $$PWD/DKeySequenceEdit \
288 $$PWD/DLabel \
289 $$PWD/DTextBrowser \
290 $$PWD/DGraphicsView \
291 $$PWD/DCalendarWidget \
292 $$PWD/DLCDNumber \
293 $$PWD/DProgressBar \
294 $$PWD/DHorizontalLine \
295 $$PWD/DVerticalLine \
296 $$PWD/DOpenGLWidget \
297 $$PWD/DQuickWidget \
298 $$PWD/DWebView \
299 $$PWD/DAccessibleWidget \
300 $$PWD/DCheckBox \
301 $$PWD/DColorDialog \
302 $$PWD/DColumnView \
303 $$PWD/DDataWidgetMapper \
304 $$PWD/DFocusFrame \
305 $$PWD/DHeaderView \
306 $$PWD/DInputDialog \
307 $$PWD/DMdiArea \
308 $$PWD/DMdiSubWindow \
309 $$PWD/DErrorMessage \
310 $$PWD/DFontDialog \
311 $$PWD/DMenu \
312 $$PWD/DMenuBar \
313 $$PWD/DMessageBox \
314 $$PWD/DRubberBand \
315 $$PWD/DSlider \
316 $$PWD/DSplitter \
317 $$PWD/DStatusBar \
318 $$PWD/DTabWidget \
319 $$PWD/DTableView \
320 $$PWD/DTileRules \
321 $$PWD/DToolBar \
322 $$PWD/DToolTip \
323 $$PWD/DTreeView \
324 $$PWD/DUndoView \
325 $$PWD/DWhatsThis \
326 $$PWD/DWizard \
327 $$PWD/DWizardPage \
328 $$PWD/DDialog \
329 $$PWD/DStyledItemDelegate \
330 $$PWD/DStandardItem \
331 $$PWD/DIconButton \
332 $$PWD/DFloatingWidget \
333 $$PWD/DStyleHelper \
334 $$PWD/DStylePainter \
335 $$PWD/DStyledIconEngine \
336 $$PWD/DArrowRectangle \
337 $$PWD/DImageButton \
338 $$PWD/DSwitchButton \
339 $$PWD/DWindowCloseButton \
340 $$PWD/DWindowMaxButton \
341 $$PWD/DWindowMinButton \
342 $$PWD/DWindowOptionButton \
343 $$PWD/DApplicationHelper \
344 $$PWD/DFloatingWidget \
345 $$PWD/DFloatingMessage \
346 $$PWD/DMessageManager \
347 $$PWD/DButtonBox \
348 $$PWD/DApplicationSettings \
349 $$PWD/DWarningButton \
350 $$PWD/DDialogCloseButton \
351 $$PWD/DPasswordEdit \
352 $$PWD/DTipLabel \
353 $$PWD/DShadowLine \
354 $$PWD/DColoredProgressBar \
355 $$PWD/DAbstractdialog \
356 $$PWD/DLabel \
357 $$PWD/DDrawer \
358 $$PWD/DDrawerGroup \
359 $$PWD/DArrowLineDrawer \
360 $$PWD/DAlertControl
0 #include <QApplication>
0 #include <QGuiApplication>
11 #include <QCommandLineParser>
22 #include <QCommandLineOption>
33 #include <QSvgRenderer>
44 #include <QImage>
55 #include <QPainter>
66
7 #include "DSvgRenderer"
7 #include <DSvgRenderer>
88
99 static int String2Int(QString str, int defaultValue)
1010 {
4141
4242 int main(int argc, char *argv[])
4343 {
44 QApplication app(argc, argv);
44 QGuiApplication app(argc, argv);
4545 app.setOrganizationName("deepin");
4646 app.setApplicationName("dtk-scgc");
4747
9090 QPainter outputPainter(&outPutimage);
9191
9292 if ("DSvgRenderer" == renderValue) {
93 Dtk::Widget::DSvgRenderer renderer(input);
93 Dtk::Gui::DSvgRenderer renderer(input);
9494 renderer.render(&outputPainter);
9595 } else {
9696 QSvgRenderer renderer(input);
00 QT += gui svg
1 QT += dtkcore
1 QT += dtkcore dtkgui
22
33 TARGET = dtk-svgc
44 CONFIG += c++11
2828 target.path = $$TOOL_INSTALL_DIR
2929
3030 INSTALLS += target
31
32 win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../../src/release/ -ldtkwidget
33 else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../../src/debug/ -ldtkwidget
34 else:unix: LIBS += -L$$OUT_PWD/../../src/ -ldtkwidget
35
36 INCLUDEPATH += $$PWD/../../src
37 INCLUDEPATH += $$PWD/../../src/util
38 DEPENDPATH += $$PWD/../../src