Warning, /plasma/latte-dock/shell/package/contents/applet/CompactApplet.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 SPDX-FileCopyrightText: 2013 Marco Martin <mart@kde.org>
0003
0004 SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 import QtQuick 2.0
0007 import QtQuick.Layouts 1.1
0008 import QtQuick.Window 2.0
0009 import QtGraphicalEffects 1.0
0010
0011 import org.kde.plasma.core 2.0 as PlasmaCore
0012 import org.kde.plasma.components 2.0 as PlasmaComponents
0013 import org.kde.kquickcontrolsaddons 2.0
0014
0015 import org.kde.latte.core 0.2 as LatteCore
0016
0017 PlasmaCore.ToolTipArea {
0018 id: root
0019 objectName: "org.kde.desktop-CompactApplet"
0020 anchors.fill: parent
0021
0022 mainText: plasmoid.toolTipMainText
0023 subText: plasmoid.toolTipSubText
0024 location: plasmoid.location
0025 active: !plasmoid.expanded
0026 textFormat: plasmoid.toolTipTextFormat
0027 mainItem: plasmoid.toolTipItem ? plasmoid.toolTipItem : null
0028
0029 property Item fullRepresentation: null
0030 property Item compactRepresentation: null
0031 /*Discover real visual parent - the following code points to Applet::ItemWrapper*/
0032 property Item originalCompactRepresenationParent: null
0033 property Item compactRepresentationVisualParent: originalCompactRepresenationParent && originalCompactRepresenationParent.parent
0034 ? originalCompactRepresenationParent.parent.parent : null
0035
0036 property Item appletItem: compactRepresentationVisualParent
0037 && compactRepresentationVisualParent.parent
0038 && compactRepresentationVisualParent.parent.parent ? compactRepresentationVisualParent.parent.parent.parent : null
0039
0040 onCompactRepresentationChanged: {
0041 if (compactRepresentation) {
0042 originalCompactRepresenationParent = compactRepresentation.parent;
0043
0044 compactRepresentation.parent = root;
0045 compactRepresentation.anchors.centerIn = root;
0046 compactRepresentation.width = Qt.binding(function() {
0047 return root.width;
0048 });
0049
0050 compactRepresentation.height = Qt.binding(function() {
0051 return root.height;
0052 });
0053
0054 compactRepresentation.visible = true;
0055 }
0056 root.visible = true;
0057 }
0058
0059 onFullRepresentationChanged: {
0060
0061 if (!fullRepresentation) {
0062 return;
0063 }
0064
0065 //if the fullRepresentation size was restored to a stored size, or if is dragged from the desktop, restore popup size
0066 if (fullRepresentation.Layout && fullRepresentation.Layout.preferredWidth > 0) {
0067 popupWindow.mainItem.width = Qt.binding(function() {
0068 return fullRepresentation.Layout.preferredWidth
0069 })
0070 } else if (fullRepresentation.implicitWidth > 0) {
0071 popupWindow.mainItem.width = Qt.binding(function() {
0072 return fullRepresentation.implicitWidth
0073 })
0074 } else if (fullRepresentation.width > 0) {
0075 popupWindow.mainItem.width = Qt.binding(function() {
0076 return fullRepresentation.width
0077 })
0078 } else {
0079 popupWindow.mainItem.width = Qt.binding(function() {
0080 return PlasmaCore.Theme.mSize(PlasmaCore.Theme.defaultFont).width * 35
0081 })
0082 }
0083
0084 if (fullRepresentation.Layout && fullRepresentation.Layout.preferredHeight > 0) {
0085 popupWindow.mainItem.height = Qt.binding(function() {
0086 return fullRepresentation.Layout.preferredHeight
0087 })
0088 } else if (fullRepresentation.implicitHeight > 0) {
0089 popupWindow.mainItem.height = Qt.binding(function() {
0090 return fullRepresentation.implicitHeight
0091 })
0092 } else if (fullRepresentation.height > 0) {
0093 popupWindow.mainItem.height = Qt.binding(function() {
0094 return fullRepresentation.height
0095 })
0096 } else {
0097 popupWindow.mainItem.height = Qt.binding(function() {
0098 return PlasmaCore.Theme.mSize(PlasmaCore.Theme.defaultFont).height * 25
0099 })
0100 }
0101
0102 fullRepresentation.parent = appletParent;
0103 fullRepresentation.anchors.fill = fullRepresentation.parent;
0104 }
0105
0106 /* PlasmaCore.FrameSvgItem {
0107 id: expandedItem
0108 anchors.fill: parent
0109 imagePath: "widgets/tabbar"
0110 visible: fromCurrentTheme && opacity > 0
0111 prefix: {
0112 var prefix;
0113 switch (plasmoid.location) {
0114 case PlasmaCore.Types.LeftEdge:
0115 prefix = "west-active-tab";
0116 break;
0117 case PlasmaCore.Types.TopEdge:
0118 prefix = "north-active-tab";
0119 break;
0120 case PlasmaCore.Types.RightEdge:
0121 prefix = "east-active-tab";
0122 break;
0123 default:
0124 prefix = "south-active-tab";
0125 }
0126 if (!hasElementPrefix(prefix)) {
0127 prefix = "active-tab";
0128 }
0129 return prefix;
0130 }
0131 opacity: plasmoid.expanded ? 1 : 0
0132 Behavior on opacity {
0133 NumberAnimation {
0134 duration: PlasmaCore.Units.shortDuration
0135 easing.type: Easing.InOutQuad
0136 }
0137 }
0138 }*/
0139
0140 //! This timer is needed in order for the applet popup to not reshow instantly and faulty after the user
0141 //! clicks compact representation to hide it
0142 Timer {
0143 id: expandedSync
0144 interval: 500
0145 onTriggered: plasmoid.expanded = popupWindow.visible;
0146 }
0147
0148 Connections {
0149 target: plasmoid.action("configure")
0150 function onTriggered() { plasmoid.expanded = false }
0151 }
0152
0153 Connections {
0154 target: plasmoid
0155 function onContextualActionsAboutToShow() { root.hideToolTip() }
0156 }
0157
0158 LatteCore.Dialog {
0159 id: popupWindow
0160 objectName: "popupWindow"
0161 flags: Qt.WindowStaysOnTopHint
0162 visible: plasmoid.expanded && fullRepresentation
0163 visualParent: compactRepresentationVisualParent ? compactRepresentationVisualParent : (compactRepresentation ? compactRepresentation : null)
0164 // location: PlasmaCore.Types.Floating //plasmoid.location
0165 edge: plasmoid.location /*this way dialog borders are not updated and it is used only for adjusting dialog position*/
0166 hideOnWindowDeactivate: plasmoid.hideOnWindowDeactivate
0167 backgroundHints: (plasmoid.containmentDisplayHints & PlasmaCore.Types.DesktopFullyCovered) ? PlasmaCore.Dialog.SolidBackground : PlasmaCore.Dialog.StandardBackground
0168
0169 property var oldStatus: PlasmaCore.Types.UnknownStatus
0170
0171 //It's a MouseEventListener to get all the events, so the eventfilter will be able to catch them
0172 mainItem: MouseEventListener {
0173 id: appletParent
0174
0175 focus: true
0176
0177 Keys.onEscapePressed: {
0178 plasmoid.expanded = false;
0179 }
0180
0181 LayoutMirroring.enabled: Qt.application.layoutDirection === Qt.RightToLeft
0182 LayoutMirroring.childrenInherit: true
0183
0184 Layout.minimumWidth: (fullRepresentation && fullRepresentation.Layout) ? fullRepresentation.Layout.minimumWidth : 0
0185 Layout.minimumHeight: (fullRepresentation && fullRepresentation.Layout) ? fullRepresentation.Layout.minimumHeight: 0
0186
0187 Layout.preferredWidth: (fullRepresentation && fullRepresentation.Layout) ? fullRepresentation.Layout.preferredWidth : -1
0188 Layout.preferredHeight: (fullRepresentation && fullRepresentation.Layout) ? fullRepresentation.Layout.preferredHeight: -1
0189
0190 Layout.maximumWidth: (fullRepresentation && fullRepresentation.Layout) ? fullRepresentation.Layout.maximumWidth : Infinity
0191 Layout.maximumHeight: (fullRepresentation && fullRepresentation.Layout) ? fullRepresentation.Layout.maximumHeight: Infinity
0192
0193 onActiveFocusChanged: {
0194 if (activeFocus && fullRepresentation) {
0195 fullRepresentation.forceActiveFocus()
0196 }
0197 }
0198 }
0199
0200 onVisibleChanged: {
0201 if (!visible) {
0202 expandedSync.restart();
0203 plasmoid.status = oldStatus;
0204 } else {
0205 oldStatus = plasmoid.status;
0206 plasmoid.status = PlasmaCore.Types.RequiresAttentionStatus;
0207 // This call currently fails and complains at runtime:
0208 // QWindow::setWindowState: QWindow::setWindowState does not accept Qt::WindowActive
0209 popupWindow.requestActivate();
0210 }
0211 }
0212 }
0213
0214 ////Indicators API ////
0215 Binding {
0216 target: compactRepresentation ? compactRepresentation.anchors : null
0217 property: "horizontalCenterOffset"
0218 when: compactRepresentation
0219 value: appletItem ? appletItem.iconOffsetX : 0
0220 }
0221
0222 Binding {
0223 target: compactRepresentation ? compactRepresentation.anchors : null
0224 property: "verticalCenterOffset"
0225 when: compactRepresentation
0226 value: appletItem ? appletItem.iconOffsetY : 0
0227 }
0228
0229 Binding {
0230 target: root
0231 property: "transformOrigin"
0232 value: appletItem && compactRepresentation ? appletItem.iconTransformOrigin : Item.Center
0233 }
0234
0235 Binding {
0236 target: root
0237 property: "opacity"
0238 value: appletItem && compactRepresentation ? appletItem.iconOpacity : 1.0
0239 }
0240
0241 Binding {
0242 target: root
0243 property: "rotation"
0244 value: appletItem && compactRepresentation ? appletItem.iconRotation : 0
0245 }
0246
0247 Binding {
0248 target: root
0249 property: "scale"
0250 value: appletItem && compactRepresentation ? appletItem.iconScale : 1.0
0251 }
0252
0253 ////Clicked Effect ////
0254 BrightnessContrast {
0255 id: _clickedEffect
0256 anchors.centerIn: parent
0257 anchors.horizontalCenterOffset: compactRepresentation ? compactRepresentation.anchors.horizontalCenterOffset : 0
0258 anchors.verticalCenterOffset: compactRepresentation ? compactRepresentation.anchors.verticalCenterOffset : 0
0259 source: compactRepresentation
0260 width: root.width
0261 height: root.height
0262 visible: appletItem && clickedAnimation.running && !appletItem.indicators.info.providesClickedAnimation
0263 z:1000
0264 }
0265
0266 /////Clicked Animation/////
0267 SequentialAnimation{
0268 id: clickedAnimation
0269 alwaysRunToEnd: true
0270 running: appletItem
0271 && appletItem.animations
0272 && appletItem.indicators
0273 && appletItem.isSquare
0274 && appletItem.pressed
0275 && !appletItem.originalAppletBehavior
0276 && (appletItem.animations.speedFactor.current > 0)
0277 && !appletItem.indicators.info.providesClickedAnimation
0278
0279 ParallelAnimation{
0280 PropertyAnimation {
0281 target: _clickedEffect
0282 property: "brightness"
0283 to: -0.35
0284 duration: appletItem && appletItem.animations ? appletItem.animations.duration.large : 0
0285 easing.type: Easing.OutQuad
0286 }
0287 }
0288 ParallelAnimation{
0289 PropertyAnimation {
0290 target: _clickedEffect
0291 property: "brightness"
0292 to: 0
0293 duration: appletItem && appletItem.animations ? appletItem.animations.duration.large : 0
0294 easing.type: Easing.OutQuad
0295 }
0296 }
0297 }
0298 //END animations
0299 }