diff --git a/package/contents/config/config.qml b/package/contents/config/config.qml
index 1966dd9..52f1d4f 100644
--- a/package/contents/config/config.qml
+++ b/package/contents/config/config.qml
@@ -1,35 +1,35 @@
import QtQuick 2.2
import org.kde.plasma.configuration 2.0
ConfigModel {
ConfigCategory {
name: i18n("Layout")
icon: "preferences-desktop-color"
source: "config/ConfigLayout.qml"
}
- ConfigCategory {
- name: i18n("Appearance")
- icon: "preferences-desktop-color"
- source: "config/ConfigAppearance.qml"
- }
ConfigCategory {
name: i18n("Behaviour")
icon: "preferences-desktop"
source: "config/ConfigBehaviour.qml"
}
+ ConfigCategory {
+ name: i18n("Title and Icon")
+ icon: "preferences-desktop-color"
+ source: "config/ConfigTitleAndIcon.qml"
+ }
ConfigCategory {
name: i18n("Buttons")
icon: "preferences-activities"
source: "config/ConfigButtons.qml"
}
- ConfigCategory {
- name: i18n("Mouse Control")
- icon: "preferences-desktop-mouse"
- source: "config/ConfigMouseControl.qml"
- }
ConfigCategory {
name: i18n("Application Menu")
icon: "application-menu"
source: "config/ConfigAppMenu.qml"
}
+ ConfigCategory {
+ name: i18n("Mouse Control")
+ icon: "preferences-desktop-mouse"
+ source: "config/ConfigMouseControl.qml"
+ }
}
diff --git a/package/contents/config/main.xml b/package/contents/config/main.xml
index da8b9f1..4fbc298 100644
--- a/package/contents/config/main.xml
+++ b/package/contents/config/main.xml
@@ -1,278 +1,231 @@
buttons|icon|title|menu
5.0
0
true
true
0
0
true
true
0
0
true
true
0
0
true
true
0
false
-
- true
-
-
- false
-
-
- false
-
-
- false
-
-
- close|maximize|minimize|pin
-
-
- true
-
-
-
-
-
- false
-
-
- false
-
-
- false
-
-
- false
-
-
- false
-
-
- false
-
-
-
-
-
-
-
-
- 0
-
-
- false
-
-
- 0.5
-
-
- 10
-
-
false
0.2
0.0
true
0
0
0
false
^(.*)\s*[—–\-:]\s*(Mozilla )?([^—–\-:]+)$
$3 — $1
Plasma Desktop :: %activity%
false
1000
-
- true
-
-
- false
-
-
- false
+
+ 0
-
- 5
-
1
false
-
-
+
+
false
-
+
false
-
+
false
-
- false
+
+ close|maximize|minimize|pin
-
+
false
-
- false
+
+ 10
-
- false
+
+ 0.5
-
+
+
+
+
+
+
+ 0
+
+
true
-
+
+
+
+
+
+
+
+ false
+
+
false
-
- 0
+
+ 1
+
+
+ true
0.1
1.0
true
0
0
false
0
diff --git a/package/contents/ui/AppMenu.qml b/package/contents/ui/AppMenu.qml
index 208172e..6f672b4 100644
--- a/package/contents/ui/AppMenu.qml
+++ b/package/contents/ui/AppMenu.qml
@@ -1,156 +1,159 @@
import QtQuick 2.2
import QtQuick.Layouts 1.1
import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.components 2.0 as PlasmaComponents
MouseArea {
id: appmenu
property bool mouseInWidget: appmenuOpened || appmenu.containsMouse
- property bool appmenuEnabled: plasmoid.configuration.appmenuEnabled
+ property bool appmenuEnabled: plasmoid.configuration.controlPartMenuShowOnMouseIn || plasmoid.configuration.controlPartMenuShowOnMouseOut
property bool appmenuFillHeight: plasmoid.configuration.appmenuFillHeight
property bool appmenuFontBold: plasmoid.configuration.appmenuFontBold
property bool appmenuEnabledAndNonEmpty: appmenuEnabled && appMenuModel !== null && appMenuModel.menuAvailable
property bool appmenuOpened: appmenuEnabled && plasmoid.nativeInterface.currentIndex > -1
property var appMenuModel: null
visible: appmenuEnabledAndNonEmpty && !main.noWindowActive
property bool showItem
+ property double recommendedWidth
opacity: showItem ? 1 : 0
+ width: recommendedWidth
+
hoverEnabled: true
GridLayout {
id: buttonGrid
Layout.minimumWidth: implicitWidth
Layout.minimumHeight: implicitHeight
flow: GridLayout.LeftToRight
rowSpacing: 0
columnSpacing: 0
anchors.top: parent.top
anchors.left: parent.left
Component.onCompleted: {
plasmoid.nativeInterface.buttonGrid = buttonGrid
plasmoid.nativeInterface.enabled = appmenuEnabled
}
Connections {
target: plasmoid.nativeInterface
onRequestActivateIndex: {
var idx = Math.max(0, Math.min(buttonRepeater.count - 1, index))
var button = buttonRepeater.itemAt(index)
if (button) {
button.clicked(null)
}
}
}
Repeater {
id: buttonRepeater
model: null
MouseArea {
id: appmenuButton
hoverEnabled: true
readonly property int buttonIndex: index
property bool menuOpened: plasmoid.nativeInterface.currentIndex === index
Layout.preferredWidth: appmenuButtonBackground.width
Layout.preferredHeight: appmenuButtonBackground.height
Rectangle {
id: appmenuButtonBackground
border.color: 'transparent'
width: appmenuButtonTitle.implicitWidth + units.smallSpacing * 3
height: appmenuFillHeight ? appmenu.height : appmenuButtonTitle.implicitHeight + units.smallSpacing
color: menuOpened ? theme.highlightColor : 'transparent'
radius: units.smallSpacing / 2
}
PlasmaComponents.Label {
id: appmenuButtonTitle
anchors.top: appmenuButtonBackground.top
anchors.bottom: appmenuButtonBackground.bottom
verticalAlignment: Text.AlignVCenter
anchors.horizontalCenter: appmenuButtonBackground.horizontalCenter
- font.pixelSize: fontPixelSize * plasmoid.configuration.appmenuButtonTextSizeScale
+ font.pixelSize: main.fontPixelSize * plasmoid.configuration.appmenuButtonTextSizeScale
text: activeMenu.replace('&', '')
font.weight: appmenuFontBold ? Font.Bold : theme.defaultFont.weight
}
onClicked: {
plasmoid.nativeInterface.trigger(this, index)
}
onEntered: {
appmenuButtonBackground.border.color = theme.highlightColor
}
onExited: {
appmenuButtonBackground.border.color = 'transparent'
}
}
}
}
function initializeAppModel() {
if (appMenuModel !== null) {
return
}
print('initializing appMenuModel...')
try {
appMenuModel = Qt.createQmlObject(
'import QtQuick 2.2;\
import org.kde.plasma.plasmoid 2.0;\
import org.kde.private.activeWindowControl 1.0 as ActiveWindowControlPrivate;\
ActiveWindowControlPrivate.AppMenuModel {\
id: appMenuModel;\
Component.onCompleted: {\
plasmoid.nativeInterface.model = appMenuModel\
}\
}', main)
} catch (e) {
print('appMenuModel failed to initialize: ' + e)
}
print('initializing appmenu...DONE ' + appMenuModel)
if (appMenuModel !== null) {
resetAppmenuModel()
}
}
function resetAppmenuModel() {
if (appmenuEnabled) {
initializeAppModel()
if (appMenuModel === null) {
return
}
print('setting model in QML: ' + appMenuModel)
for (var key in appMenuModel) {
print(' ' + key + ' -> ' + appMenuModel[key])
}
plasmoid.nativeInterface.model = appMenuModel
buttonRepeater.model = appMenuModel
} else {
plasmoid.nativeInterface.model = null
buttonRepeater.model = null
}
}
onAppmenuEnabledChanged: {
appmenu.resetAppmenuModel()
if (appMenuModel !== null) {
plasmoid.nativeInterface.enabled = appmenuEnabled
}
}
}
\ No newline at end of file
diff --git a/package/contents/ui/ControlButton.qml b/package/contents/ui/ControlButton.qml
index 9458eaa..ab07426 100644
--- a/package/contents/ui/ControlButton.qml
+++ b/package/contents/ui/ControlButton.qml
@@ -1,74 +1,74 @@
/*
* Copyright 2015 Martin Kotelnik
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
import QtQuick 2.2
import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
MouseArea {
id: controlButton
height: controlButtons.height
width: controlButtons.controlButtonsHeight
property bool mouseInside: false
property bool iconActive: (iconName !== 'alldesktops' && iconName !== 'maximize') || (iconName === 'alldesktops' && main.isActiveWindowPinned) || (iconName === 'maximize' && main.currentWindowMaximized)
property string themeName: textColorLight ? 'breeze-dark' : 'default'
- property string customAuroraeThemePath: main.automaticButtonThemeEnabled ? plasmoid.nativeInterface.auroraeThemePath : manualAuroraeThemePathResolved
- property string customAuroraeImageExt: main.automaticButtonThemeEnabled ? plasmoid.nativeInterface.auroraeThemeType : manualAuroraeThemeExtension
+ property string customAuroraeThemePath: controlButtons.automaticButtonThemeEnabled ? plasmoid.nativeInterface.auroraeThemePath : controlButtons.manualAuroraeThemePathResolved
+ property string customAuroraeImageExt: controlButtons.automaticButtonThemeEnabled ? plasmoid.nativeInterface.auroraeThemeType : controlButtons.manualAuroraeThemeExtension
property bool usingAuroraeTheme: customAuroraeThemePath ? true : false
property string buttonImagePath: customAuroraeThemePath ? customAuroraeThemePath + '/' + iconName + '.' + customAuroraeImageExt : Qt.resolvedUrl('../icons/' + themeName + '/' + iconName + '.svg')
property string svgElementId: usingAuroraeTheme
? (iconActive && iconName === 'alldesktops') ? (mouseInside ? 'pressed-center' : 'pressed-center') : (mouseInside ? 'hover-center' : 'active-center')
: iconActive ? (mouseInside ? 'active-hover' : 'active-idle') : (mouseInside ? 'inactive-hover' : 'inactive-idle')
PlasmaCore.Svg {
id: buttonSvg
imagePath: buttonImagePath
}
// icon
PlasmaCore.SvgItem {
id: svgItem
width: parent.width
height: width
svg: buttonSvg
elementId: svgElementId
anchors.verticalCenter: parent.verticalCenter
}
hoverEnabled: true
onEntered: {
mouseInside = true
controlButtons.mouseInWidget = true
}
onExited: {
mouseInside = false
controlButtons.mouseInWidget = false
}
// trigger active window action
onClicked: {
if (!controlButtons.showItem) {
return;
}
controlButtons.mouseInWidget = true
- main.performActiveWindowAction(windowOperation)
+ controlButtons.performActiveWindowAction(windowOperation)
}
}
diff --git a/package/contents/ui/ControlButtons.qml b/package/contents/ui/ControlButtons.qml
index 74a9e9b..c1b78e3 100644
--- a/package/contents/ui/ControlButtons.qml
+++ b/package/contents/ui/ControlButtons.qml
@@ -1,37 +1,141 @@
import QtQuick 2.2
import QtGraphicalEffects 1.0
import QtQuick.Layouts 1.1
import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
Item {
id: controlButtons
property bool mouseInWidget: false
- property var controlButtonsModel
property double controlButtonsHeight: parent.height * plasmoid.configuration.buttonSize
property bool showItem
- opacity: showItem ? 1 : 0
+ property bool automaticButtonThemeEnabled: plasmoid.configuration.automaticButtonThemeEnabled
+ property string manualAuroraeThemePath: plasmoid.configuration.customAuroraeThemePath
+ property string manualAuroraeThemePathResolved: ''
+ property string manualAuroraeThemeExtension: 'svg'
- height: main.buttonsVerticalCenter ? parent.height : controlButtonsHeight
- width: controlButtonsHeight + ((controlButtonsModel.count - 1) * (controlButtonsHeight + main.controlButtonsSpacing))
+ property bool showMinimize: plasmoid.configuration.showMinimize
+ property bool showMaximize: plasmoid.configuration.showMaximize
+ property bool showPinToAllDesktops: plasmoid.configuration.showPinToAllDesktops
+
+ property string buttonOrder: plasmoid.configuration.buttonOrder
+
+ property bool canShowButtonsAccordingMaximized: plasmoid.configuration.showButtonOnlyWhenMaximized ? main.currentWindowMaximized : true
+
+ property int buttonsVerticalPosition: plasmoid.configuration.buttonsVerticalPosition;
+ property double controlButtonsSpacing: plasmoid.configuration.controlButtonsSpacing;
+
+ opacity: (showItem && canShowButtonsAccordingMaximized) ? 1 : 0
+
+ // we want to trigger a button even if mouse is in the plasmoid area edge
+ height: buttonsVerticalPosition === 1 ? parent.height : controlButtonsHeight
+ width: controlButtonsHeight + ((controlButtonsModel.count - 1) * (controlButtonsHeight + controlButtonsSpacing))
+
+ onButtonsVerticalPositionChanged: {
+ anchors.top = undefined
+ anchors.verticalCenter = undefined
+ anchors.bottom = undefined
+ if (buttonsVerticalPosition === 0) {
+ anchors.top = parent.top
+ } else if (buttonsVerticalPosition === 1) {
+ anchors.verticalCenter = parent.verticalCenter
+ } else if (buttonsVerticalPosition === 2) {
+ anchors.bottom = parent.bottom
+ }
+ }
+
+ onManualAuroraeThemePathChanged: {
+ manualAuroraeThemeExtension = plasmoid.nativeInterface.extensionForTheme(manualAuroraeThemePath);
+ manualAuroraeThemePathResolved = plasmoid.nativeInterface.translateThemePath(manualAuroraeThemePath);
+ print('manualAuroraeThemePath=' + manualAuroraeThemePath)
+ print('manualAuroraeThemePathResolved=' + manualAuroraeThemePathResolved)
+ print('manualAuroraeThemeExtension=' + manualAuroraeThemeExtension)
+ }
+
+ onShowMaximizeChanged: initializeControlButtonsModel()
+ onShowMinimizeChanged: initializeControlButtonsModel()
+ onShowPinToAllDesktopsChanged: initializeControlButtonsModel()
+ onButtonOrderChanged: initializeControlButtonsModel()
+
+ function addButton(preparedArray, buttonName) {
+ if (buttonName === 'close') {
+ preparedArray.push({
+ iconName: 'close',
+ windowOperation: 'close'
+ });
+ } else if (buttonName === 'maximize' && showMaximize) {
+ preparedArray.push({
+ iconName: 'maximize',
+ windowOperation: 'toggleMaximized'
+ });
+ } else if (buttonName === 'minimize' && showMinimize) {
+ preparedArray.push({
+ iconName: 'minimize',
+ windowOperation: 'toggleMinimized'
+ });
+ } else if ((buttonName === 'pin' || buttonName === 'alldesktops') && showPinToAllDesktops) {
+ preparedArray.push({
+ iconName: 'alldesktops',
+ windowOperation: 'togglePinToAllDesktops'
+ });
+ }
+ }
+
+ function initializeControlButtonsModel() {
+
+ var preparedArray = []
+ buttonOrder.split('|').forEach(function (buttonName) {
+ addButton(preparedArray, buttonName);
+ });
+
+ controlButtonsModel.clear()
+
+ preparedArray.forEach(function (item) {
+ print('adding item to buttons: ' + item.iconName);
+ controlButtonsModel.append(item);
+ });
+ }
+
+ function performActiveWindowAction(windowOperation) {
+ if (!mouseInWidget) {
+ return;
+ }
+ if (windowOperation === 'close') {
+ main.toggleClose()
+ } else if (windowOperation === 'toggleMaximized') {
+ main.toggleMaximized()
+ } else if (windowOperation === 'toggleMinimized') {
+ main.toggleMinimized()
+ } else if (windowOperation === 'togglePinToAllDesktops') {
+ main.togglePinToAllDesktops()
+ }
+ }
+
+ ListModel {
+ id: controlButtonsModel
+ }
ListView {
orientation: ListView.Horizontal
- spacing: main.controlButtonsSpacing
+ spacing: controlButtonsSpacing
visible: true
model: controlButtonsModel
anchors.fill: parent
delegate: ControlButton { }
}
+
+ Component.onCompleted: {
+ initializeControlButtonsModel()
+ }
}
diff --git a/package/contents/ui/WindowIcon.qml b/package/contents/ui/WindowIcon.qml
index 554fcae..7d5d994 100644
--- a/package/contents/ui/WindowIcon.qml
+++ b/package/contents/ui/WindowIcon.qml
@@ -1,15 +1,16 @@
import QtQuick 2.2
import QtGraphicalEffects 1.0
import QtQuick.Layouts 1.1
import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
PlasmaCore.IconItem {
id: iconItem
width: parent.height
height: parent.height
source: plasmoid.configuration.noWindowIcon
- visible: plasmoid.configuration.showWindowIcon
+
+ opacity: menuItem.showItem ? plasmoid.configuration.appmenuIconAndTextOpacity : 1
}
diff --git a/package/contents/ui/WindowTitle.qml b/package/contents/ui/WindowTitle.qml
index 742673d..d5db510 100644
--- a/package/contents/ui/WindowTitle.qml
+++ b/package/contents/ui/WindowTitle.qml
@@ -1,50 +1,67 @@
import QtQuick 2.2
import QtGraphicalEffects 1.0
import QtQuick.Layouts 1.1
import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents
PlasmaComponents.Label {
id: titleItem
-// property double iconMargin: (plasmoid.configuration.showWindowIcon ? iconItem.width : 0)
-// property double properWidth: parent.width - iconMargin - iconAndTextSpacing
property double properHeight: parent.height
- property bool noElide: fitText === 2 || (fitText === 1 && mouseHover)
+ property int fontBold: plasmoid.configuration.textFontBold
+ property string fontFamily: plasmoid.configuration.fontFamily
+ property int fitText: plasmoid.configuration.fitText
+ property bool noElide: fitText === 2 || (fitText === 1 && mainMouseArea.containsMouse)
property int allowFontSizeChange: 3
property int minimumPixelSize: 8
-// property bool limitTextWidth: plasmoid.configuration.limitTextWidth
-// property int textWidthLimit: plasmoid.configuration.textWidthLimit
-// property double computedWidth: (limitTextWidth ? (implicitWidth > textWidthLimit ? textWidthLimit : implicitWidth) : properWidth)// - activeWindowListView.buttonsBetweenAddition
+ property bool limitTextWidth: plasmoid.configuration.limitTextWidth
+ property int textWidthLimit: plasmoid.configuration.textWidthLimit
+
+ property double recommendedWidth
+
+ onRecommendedWidthChanged: {
+ if (limitTextWidth) {
+ width = undefined
+ if (implicitWidth > textWidthLimit) {
+ width = textWidthLimit
+ } else {
+ width = recommendedWidth
+ }
+ } else {
+ width = recommendedWidth
+ }
+ }
verticalAlignment: Text.AlignVCenter
text: plasmoid.configuration.noWindowText
wrapMode: Text.Wrap
-// width: computedWidth
+ width: recommendedWidth
height: properHeight
elide: noElide ? Text.ElideNone : Text.ElideRight
- visible: plasmoid.configuration.showWindowTitle
font.pixelSize: fontPixelSize
font.pointSize: -1
- font.weight: fontBold || (appmenuBoldTitleWhenMenuDisplayed && appmenu.visible) ? Font.Bold : theme.defaultFont.weight
+ font.weight: fontBold === 1 || (fontBold === 2 && menuItem.showItem) ? Font.Bold : theme.defaultFont.weight
font.family: fontFamily || theme.defaultFont.family
+ opacity: menuItem.showItem ? plasmoid.configuration.appmenuIconAndTextOpacity : 1
+
onTextChanged: {
font.pixelSize = fontPixelSize
allowFontSizeChange = 3
+ recommendedWidthChanged()
}
onNoElideChanged: {
font.pixelSize = fontPixelSize
allowFontSizeChange = 3
}
onPaintedHeightChanged: {
if (allowFontSizeChange > 0 && noElide && paintedHeight > properHeight) {
var newPixelSize = (properHeight / paintedHeight) * fontPixelSize
font.pixelSize = newPixelSize < minimumPixelSize ? minimumPixelSize : newPixelSize
}
allowFontSizeChange--
}
}
\ No newline at end of file
diff --git a/package/contents/ui/config/ConfigAppMenu.qml b/package/contents/ui/config/ConfigAppMenu.qml
index ebdd6b7..6b77f71 100644
--- a/package/contents/ui/config/ConfigAppMenu.qml
+++ b/package/contents/ui/config/ConfigAppMenu.qml
@@ -1,124 +1,76 @@
import QtQuick 2.2
import QtQuick.Controls 1.3
import QtQuick.Layouts 1.1
Item {
- id: main
- property alias cfg_appmenuEnabled: appmenuEnabled.checked
- property alias cfg_appmenuNextToButtons: appmenuNextToButtons.checked
- property alias cfg_appmenuFillHeight: appmenuFillHeight.checked
property alias cfg_appmenuFontBold: appmenuFontBold.checked
- property alias cfg_appmenuDoNotHide: appmenuDoNotHide.checked
- property alias cfg_appmenuNextToIconAndText: appmenuNextToIconAndText.checked
- property alias cfg_appmenuSwitchSidesWithIconAndText: appmenuSwitchSidesWithIconAndText.checked
+ property alias cfg_appmenuFillHeight: appmenuFillHeight.checked
+ property alias cfg_appmenuVerticalPosition: appmenuVerticalPosition.currentIndex
property alias cfg_appmenuSeparatorEnabled: appmenuSeparatorEnabled.checked
- property alias cfg_appmenuBoldTitleWhenMenuDisplayed: appmenuBoldTitleWhenMenuDisplayed.checked
- property alias cfg_appmenuOuterSideMargin: appmenuOuterSideMargin.value
property alias cfg_appmenuIconAndTextOpacity: appmenuIconAndTextOpacity.value
property alias cfg_appmenuButtonTextSizeScale: appmenuButtonTextSizeScale.value
- GroupBox {
- id: appmenuEnabled
- title: i18n("Enable application menu")
- checkable: true
- flat: true
-
- GridLayout {
- columns: 2
-
- Item {
- width: 2
- height: 10
- Layout.columnSpan: 2
- }
-
- CheckBox {
- id: appmenuFillHeight
- text: i18n("Fill height")
- Layout.columnSpan: 2
- }
+ GridLayout {
+ columns: 2
- CheckBox {
- id: appmenuFontBold
- text: i18n("Bold font")
- Layout.columnSpan: 2
- }
-
- CheckBox {
- id: appmenuDoNotHide
- text: i18n("Do not hide on mouse out")
- }
-
- CheckBox {
- id: appmenuNextToButtons
- text: i18n("Show next to buttons")
- Layout.columnSpan: 2
- }
-
- CheckBox {
- id: appmenuNextToIconAndText
- text: i18n("Show next to icon and text")
- Layout.columnSpan: 2
- }
+ Item {
+ width: 2
+ height: 10
+ Layout.columnSpan: 2
+ }
- CheckBox {
- id: appmenuSwitchSidesWithIconAndText
- text: i18n("Switch sides with icon and text")
- Layout.columnSpan: 2
- enabled: appmenuNextToIconAndText.checked
- }
+ CheckBox {
+ id: appmenuFontBold
+ text: i18n("Bold font")
+ Layout.columnSpan: 2
+ }
- CheckBox {
- id: appmenuSeparatorEnabled
- text: i18n("Show separator")
- Layout.columnSpan: 2
- enabled: appmenuNextToIconAndText.checked
- }
+ CheckBox {
+ id: appmenuFillHeight
+ text: i18n("Fill height")
+ Layout.columnSpan: 2
+ }
- CheckBox {
- id: appmenuBoldTitleWhenMenuDisplayed
- text: i18n("Make window title bold when menu is displayed")
- Layout.columnSpan: 2
- }
+ Label {
+ text: i18n('Vertical position:')
+ Layout.alignment: Qt.AlignRight
+ }
+ ComboBox {
+ id: appmenuVerticalPosition
+ model: [i18n('Top'), i18n('Bottom')]
+ enabled: !appmenuFillHeight.checked
+ }
- Label {
- text: i18n('Side margin:')
- Layout.alignment: Qt.AlignRight
- }
- SpinBox {
- id: appmenuOuterSideMargin
- decimals: 0
- stepSize: 1
- minimumValue: 0
- maximumValue: 100
- suffix: i18nc('Abbreviation for pixels', 'px')
- }
+ CheckBox {
+ id: appmenuSeparatorEnabled
+ text: i18n("Show separator")
+ Layout.columnSpan: 2
+ }
- Label {
- text: i18n('Icon and text opacity:')
- Layout.alignment: Qt.AlignRight
- }
- SpinBox {
- id: appmenuIconAndTextOpacity
- decimals: 2
- stepSize: 0.1
- minimumValue: 0
- maximumValue: 1
- }
+ Label {
+ text: i18n('Icon and text opacity:')
+ Layout.alignment: Qt.AlignRight
+ }
+ SpinBox {
+ id: appmenuIconAndTextOpacity
+ decimals: 2
+ stepSize: 0.1
+ minimumValue: 0
+ maximumValue: 1
+ }
- Label {
- text: i18n('Menu button text size scale:')
- Layout.alignment: Qt.AlignRight
- }
- SpinBox {
- id: appmenuButtonTextSizeScale
- decimals: 2
- stepSize: 0.1
- minimumValue: 0.5
- maximumValue: 5
- }
+ Label {
+ text: i18n('Menu button text size scale:')
+ Layout.alignment: Qt.AlignRight
+ }
+ SpinBox {
+ id: appmenuButtonTextSizeScale
+ decimals: 2
+ stepSize: 0.1
+ minimumValue: 0.5
+ maximumValue: 5
}
}
}
diff --git a/package/contents/ui/config/ConfigAppearance.qml b/package/contents/ui/config/ConfigAppearance.qml
deleted file mode 100644
index 98a8091..0000000
--- a/package/contents/ui/config/ConfigAppearance.qml
+++ /dev/null
@@ -1,367 +0,0 @@
-import QtQuick 2.2
-import QtQuick.Controls 1.3
-import QtQuick.Layouts 1.1
-import org.kde.plasma.core 2.0 as PlasmaCore
-
-Item {
- id: appearancePage
-
- signal configurationChanged
-
- property alias cfg_autoFillWidth: autoFillWidth.checked
- property alias cfg_horizontalScreenWidthPercent: horizontalScreenWidthPercent.value
- property alias cfg_widthFineTuning: widthFineTuning.value
-
- property alias cfg_showWindowTitle: showWindowTitle.checked
- property alias cfg_textType: textTypeCombo.currentIndex
- property alias cfg_fitText: fitTextCombo.currentIndex
- property alias cfg_tooltipTextType: tooltipTextTypeCombo.currentIndex
- property alias cfg_showWindowIcon: showWindowIcon.checked
- property alias cfg_windowIconOnTheRight: windowIconOnTheRight.checked
- property alias cfg_useWindowTitleReplace: useWindowTitleReplace.checked
- property alias cfg_replaceTextRegex: replaceTextRegex.text
- property alias cfg_replaceTextReplacement: replaceTextReplacement.text
- property alias cfg_noWindowText: noWindowText.text
- property string cfg_noWindowIcon: plasmoid.configuration.noWindowIcon
- property alias cfg_limitTextWidth: limitTextWidth.checked
- property alias cfg_textWidthLimit: textWidthLimit.value
-
- property alias cfg_boldFontWeight: boldFontWeight.checked
- property string cfg_fontFamily
- property alias cfg_iconAndTextSpacing: iconAndTextSpacing.value
- property alias cfg_fontSizeScale: fontSizeScale.value
-
- PlasmaCore.DataSource {
- id: executableDS
- engine: 'executable'
-
- property string cmdBorderlessRead: 'kreadconfig5 --file kwinrc --group Windows --key BorderlessMaximizedWindows'
- property string cmdBorderlessWrite: 'kwriteconfig5 --file kwinrc --group Windows --key BorderlessMaximizedWindows --type bool {borderless}'
- property string cmdReconfigure: 'qdbus org.kde.KWin /KWin reconfigure'
-
- connectedSources: []
-
- onNewData: {
- connectedSources.length = 0
- print('sourceName: ' + sourceName)
- if (sourceName === cmdBorderlessRead) {
- var trimmedStdout = data.stdout.trim()
- print('current value: ' + trimmedStdout)
- toggleBorderlessMaximizedWindows.checked = trimmedStdout === 'true'
- } else if (sourceName.indexOf('kwriteconfig5') === 0) {
- connectedSources.push(cmdReconfigure)
- }
- }
- }
-
- /* copied from /usr/share/plasma/plasmoids/org.kde.plasma.digitalclock/contents/ui/configAppearance.qml */
- onCfg_fontFamilyChanged: {
- // HACK by the time we populate our model and/or the ComboBox is finished the value is still undefined
- if (cfg_fontFamily) {
- for (var i = 0, j = fontsModel.count; i < j; ++i) {
- if (fontsModel.get(i).value == cfg_fontFamily) {
- fontFamilyComboBox.currentIndex = i
- break
- }
- }
- }
- }
-
- ListModel {
- id: fontsModel
- Component.onCompleted: {
- var arr = [ {text: i18nc("Use default font", "Default"), value: ""} ]
- Qt.fontFamilies().forEach(function (font) {
- arr.push({text: font, value: font})
- })
- append(arr)
- cfg_fontFamilyChanged();
- }
- }
-
- Component.onCompleted: {
- executableDS.connectedSources.push(executableDS.cmdBorderlessRead)
- }
-
- GridLayout {
- columns: 2
-
- Label {
- text: i18n('Plasmoid version: ') + '1.7.4'
- Layout.alignment: Qt.AlignRight
- Layout.columnSpan: 2
- }
-
- Label {
- text: i18n("Width in horizontal panel:")
- Layout.alignment: Qt.AlignVCenter|Qt.AlignLeft
- Layout.columnSpan: 2
- }
-
- CheckBox {
- id: autoFillWidth
- text: i18n("Fill width")
- Layout.columnSpan: 2
- }
-
- GridLayout {
- columns: 2
- Layout.columnSpan: 2
- enabled: !autoFillWidth.checked
-
- Slider {
- id: horizontalScreenWidthPercent
- stepSize: 0.001
- minimumValue: 0.001
- maximumValue: 1
- Layout.preferredWidth: appearancePage.width
- Layout.columnSpan: 2
- }
-
- Label {
- text: i18n("Fine tuning:")
- Layout.alignment: Qt.AlignVCenter|Qt.AlignRight
- }
- SpinBox {
- id: widthFineTuning
- decimals: 1
- stepSize: 0.5
- minimumValue: -100
- maximumValue: 100
- }
- }
-
- Item {
- width: 2
- height: 10
- Layout.columnSpan: 2
- }
-
- CheckBox {
- id: toggleBorderlessMaximizedWindows
- text: i18n("Hide titlebar for maximized windows (takes effect immediately)")
- Layout.columnSpan: 2
- onCheckedChanged: {
- var preparedCmd = executableDS.cmdBorderlessWrite.replace('{borderless}', String(checked))
- executableDS.connectedSources.push(preparedCmd)
- }
- }
-
- Item {
- width: 2
- height: 10
- Layout.columnSpan: 2
- }
-
- GroupBox {
- id: showWindowTitle
- title: i18n("Show window title")
- checkable: true
- flat: true
- Layout.columnSpan: 2
-
- GridLayout {
- columns: 2
-
- Item {
- width: 2
- height: 10
- Layout.columnSpan: 2
- }
-
- Label {
- text: i18n('Text type:')
- Layout.alignment: Qt.AlignRight
- }
- ComboBox {
- id: textTypeCombo
- model: [i18n('Window title'), i18n('Application name')]
- }
-
- Label {
- text: i18n('Fit text:')
- Layout.alignment: Qt.AlignRight
- }
- ComboBox {
- id: fitTextCombo
- model: [i18n('Just elide'), i18n('Fit on hover'), i18n('Always fit')]
- }
-
- Label {
- text: i18n('Tooltip text:')
- Layout.alignment: Qt.AlignRight
- }
- ComboBox {
- id: tooltipTextTypeCombo
- model: [i18n('No tooltip'), i18n('Window title'), i18n('Application name')]
- }
-
- CheckBox {
- id: useWindowTitleReplace
- text: '"' + i18n('Window title') + '".replace(/'
- Layout.alignment: Qt.AlignRight
- }
- GridLayout {
- columns: 4
-
- TextField {
- id: replaceTextRegex
- placeholderText: '^(.*)\\s+[—–\\-:]\\s+([^—–\\-:]+)$'
- Layout.preferredWidth: 300
- onTextChanged: cfg_replaceTextRegex = text
- enabled: useWindowTitleReplace.checked
- }
-
- Label {
- text: '/, "'
- }
-
- TextField {
- id: replaceTextReplacement
- placeholderText: '$2 — $1'
- Layout.preferredWidth: 100
- onTextChanged: cfg_replaceTextReplacement = text
- enabled: useWindowTitleReplace.checked
- }
-
- Label {
- text: '");'
- }
- }
-
- Label {
- text: i18n('No window text:')
- Layout.alignment: Qt.AlignRight
- }
- GridLayout {
- columns: 2
-
- TextField {
- id: noWindowText
- placeholderText: 'Plasma Desktop :: %activity%'
- onTextChanged: cfg_noWindowText = text
- Layout.preferredWidth: 300
- }
-
- Label {
- text: i18n('Use %activity% placeholder to show current activity name.')
- Layout.preferredWidth: 200
- wrapMode: Text.Wrap
- }
- }
-
- Label {
- text: i18n("No window icon:")
- Layout.alignment: Qt.AlignRight
- }
- IconPicker {
- currentIcon: cfg_noWindowIcon
- defaultIcon: ''
- onIconChanged: cfg_noWindowIcon = iconName
- }
-
- CheckBox {
- id: limitTextWidth
- text: i18n('Limit text width')
- Layout.alignment: Qt.AlignRight
- }
- SpinBox {
- id: textWidthLimit
- decimals: 0
- stepSize: 10
- minimumValue: 0
- maximumValue: 10000
- enabled: limitTextWidth.checked
- suffix: i18nc('Abbreviation for pixels', 'px')
- }
- }
- }
-
- Item {
- width: 2
- height: 10
- Layout.columnSpan: 2
- }
-
- CheckBox {
- id: showWindowIcon
- text: i18n("Show window icon")
- Layout.columnSpan: 2
- }
-
- CheckBox {
- id: windowIconOnTheRight
- text: i18n("Window icon on the right")
- Layout.columnSpan: 2
- }
-
- Item {
- width: 2
- height: 10
- Layout.columnSpan: 2
- }
-
- GridLayout {
- columns: 2
-
- Layout.columnSpan: 2
-
- Item {
- width: 2
- height: 10
- }
- CheckBox {
- id: boldFontWeight
- text: i18n("Bold text")
- }
-
- Label {
- text: i18n('Text font:')
- Layout.alignment: Qt.AlignRight
- }
- ComboBox {
- id: fontFamilyComboBox
- // ComboBox's sizing is just utterly broken
- Layout.minimumWidth: units.gridUnit * 10
- model: fontsModel
- // doesn't autodeduce from model because we manually populate it
- textRole: "text"
- onCurrentIndexChanged: {
- var current = model.get(currentIndex)
- if (current) {
- cfg_fontFamily = current.value
- appearancePage.configurationChanged()
- console.log('change: ' + cfg_fontFamily)
- }
- }
- }
-
- Label {
- text: i18n("Icon and text spacing:")
- Layout.alignment: Qt.AlignVCenter|Qt.AlignRight
- }
- SpinBox {
- id: iconAndTextSpacing
- decimals: 1
- stepSize: 0.5
- minimumValue: 0.5
- maximumValue: 300
- }
-
- Label {
- text: i18n("Font size scale:")
- Layout.alignment: Qt.AlignVCenter|Qt.AlignRight
- }
- SpinBox {
- id: fontSizeScale
- decimals: 2
- stepSize: 0.05
- minimumValue: 0
- maximumValue: 3
- }
-
- }
-
- }
-
-}
diff --git a/package/contents/ui/config/ConfigBehaviour.qml b/package/contents/ui/config/ConfigBehaviour.qml
index bed177e..7440415 100644
--- a/package/contents/ui/config/ConfigBehaviour.qml
+++ b/package/contents/ui/config/ConfigBehaviour.qml
@@ -1,20 +1,57 @@
import QtQuick 2.2
import QtQuick.Controls 1.3
import QtQuick.Layouts 1.1
+import org.kde.plasma.core 2.0 as PlasmaCore
Item {
property alias cfg_showForCurrentScreenOnly: showForCurrentScreenOnly.checked
GridLayout {
columns: 2
+ CheckBox {
+ id: toggleBorderlessMaximizedWindows
+ text: i18n("Hide titlebar for maximized windows (takes effect immediately)")
+ Layout.columnSpan: 2
+ onCheckedChanged: {
+ var preparedCmd = executableDS.cmdBorderlessWrite.replace('{borderless}', String(checked))
+ executableDS.connectedSources.push(preparedCmd)
+ }
+ }
+
CheckBox {
id: showForCurrentScreenOnly
text: i18n("Show active window only for plasmoid's screen")
Layout.columnSpan: 2
}
+ }
+
+ PlasmaCore.DataSource {
+ id: executableDS
+ engine: 'executable'
+
+ property string cmdBorderlessRead: 'kreadconfig5 --file kwinrc --group Windows --key BorderlessMaximizedWindows'
+ property string cmdBorderlessWrite: 'kwriteconfig5 --file kwinrc --group Windows --key BorderlessMaximizedWindows --type bool {borderless}'
+ property string cmdReconfigure: 'qdbus org.kde.KWin /KWin reconfigure'
+
+ connectedSources: []
+
+ onNewData: {
+ connectedSources.length = 0
+ print('sourceName: ' + sourceName)
+ if (sourceName === cmdBorderlessRead) {
+ var trimmedStdout = data.stdout.trim()
+ print('current value: ' + trimmedStdout)
+ toggleBorderlessMaximizedWindows.checked = trimmedStdout === 'true'
+ } else if (sourceName.indexOf('kwriteconfig5') === 0) {
+ connectedSources.push(cmdReconfigure)
+ }
+ }
+ }
+ Component.onCompleted: {
+ executableDS.connectedSources.push(executableDS.cmdBorderlessRead)
}
}
diff --git a/package/contents/ui/config/ConfigButtons.qml b/package/contents/ui/config/ConfigButtons.qml
index 787bc47..b48e3c9 100644
--- a/package/contents/ui/config/ConfigButtons.qml
+++ b/package/contents/ui/config/ConfigButtons.qml
@@ -1,317 +1,250 @@
import QtQuick 2.2
import QtQuick.Controls 1.3
import QtQuick.Layouts 1.1
import QtQml.Models 2.1
Item {
- property alias cfg_showControlButtons: showControlButtons.checked
- property alias cfg_doNotHideControlButtons: doNotHideControlButtons.checked
- property int cfg_buttonsPosition
- property alias cfg_buttonsVerticalCenter: buttonsVerticalCenter.checked
- property alias cfg_buttonsStandalone: buttonsStandalone.checked
- property alias cfg_buttonsBetweenIconAndText: buttonsBetweenIconAndText.checked
- property alias cfg_buttonsDynamicWidth: buttonsDynamicWidth.checked
- property alias cfg_slidingIconAndText: slidingIconAndText.checked
- property alias cfg_showButtonOnlyWhenMaximized: showButtonOnlyWhenMaximized.checked
+ property string cfg_buttonOrder
+
property alias cfg_showMinimize: showMinimize.checked
property alias cfg_showMaximize: showMaximize.checked
property alias cfg_showPinToAllDesktops: showPinToAllDesktops.checked
+
+ property alias cfg_showButtonOnlyWhenMaximized: showButtonOnlyWhenMaximized.checked
+
property alias cfg_buttonSize: buttonSize.value
+ property int cfg_buttonsVerticalPosition
property alias cfg_controlButtonsSpacing: controlButtonsSpacing.value
- property string cfg_buttonOrder
+
property alias cfg_automaticButtonThemeEnabled: automaticButtonThemeEnabled.checked
property alias cfg_customAuroraeThemePath: customAuroraeThemePath.text
- onCfg_buttonsPositionChanged: {
- switch (cfg_buttonsPosition) {
+ onCfg_buttonsVerticalPositionChanged: {
+ switch (cfg_buttonsVerticalPosition) {
case 0:
- buttonsPositionGroup.current = upperLeftRadio;
+ buttonsVertialPositionGroup.current = topRadio;
break;
case 1:
- buttonsPositionGroup.current = upperRightRadio;
+ buttonsVertialPositionGroup.current = middleRadio;
break;
case 2:
- buttonsPositionGroup.current = bottomLeftRadio;
- break;
- case 3:
- buttonsPositionGroup.current = bottomRightRadio;
+ buttonsVertialPositionGroup.current = bottomRadio;
break;
default:
- buttonsPositionGroup.current = upperLeftRadio;
+ buttonsVertialPositionGroup.current = topRadio;
}
}
Component.onCompleted: {
- cfg_buttonsPositionChanged()
+ cfg_buttonsVerticalPositionChanged()
+ print('intially calling sortButtonOrder()')
sortButtonOrder()
}
ListModel {
id: buttonsToSpend
ListElement {
name: 'close'
iconName: 'close'
}
ListElement {
name: 'minimize'
iconName: 'minimize'
}
ListElement {
name: 'maximize'
iconName: 'maximize'
}
ListElement {
name: 'alldesktops'
iconName: 'alldesktops'
}
}
function sortButtonOrder() {
cfg_buttonOrder.split('|').forEach(function (itemId, index) {
if (itemId === 'close') {
print('adding ' + itemId);
buttonOrder.model.insert(index, buttonsToSpend.get(0));
} else if (itemId === 'minimize') {
buttonOrder.model.insert(index, buttonsToSpend.get(1));
print('adding ' + itemId);
} else if (itemId === 'maximize') {
buttonOrder.model.insert(index, buttonsToSpend.get(2));
print('adding ' + itemId);
} else if (itemId === 'pin' || itemId === 'alldesktops') {
buttonOrder.model.insert(index, buttonsToSpend.get(3));
print('adding ' + itemId);
}
});
}
ExclusiveGroup {
- id: buttonsPositionGroup
+ id: buttonsVertialPositionGroup
}
- GroupBox {
- id: showControlButtons
- title: i18n("Enable Control Buttons")
- checkable: true
- flat: true
-
- GridLayout {
- columns: 2
-
- Item {
- width: 2
- height: 10
- Layout.columnSpan: 2
- }
-
- Item {
- width: 2
- height: 2
- Layout.rowSpan: 3
- }
-
- CheckBox {
- id: showMinimize
- text: i18n("Show minimize button")
- }
-
- CheckBox {
- id: showMaximize
- text: i18n("Show maximize button")
- }
-
- CheckBox {
- id: showPinToAllDesktops
- text: i18n("Show pin to all desktops")
- }
-
- Item {
- width: 2
- height: 10
- Layout.columnSpan: 2
- }
-
- Label {
- text: i18n("Button order:")
- Layout.alignment: Qt.AlignVCenter|Qt.AlignRight
- }
+ GridLayout {
+ columns: 2
- OrderableListView {
- id: buttonOrder
- height: units.gridUnit * 2
- width: height * 4
- model: ListModel {
- // will be filled initially by sortButtonOrder() method
- }
- orientation: ListView.Horizontal
- itemWidth: width / 4
- itemHeight: itemWidth
+ Label {
+ text: i18n("Button order:")
+ Layout.alignment: Qt.AlignVCenter|Qt.AlignRight
+ }
- onModelOrderChanged: {
- var orderStr = '';
- for (var i = 0; i < model.count; i++) {
- var item = model.get(i)
- if (orderStr.length > 0) {
- orderStr += '|';
- }
- orderStr += item.name;
+ OrderableListView {
+ id: buttonOrder
+ height: units.gridUnit * 2
+ width: height * 4
+ model: ListModel {
+ // will be filled initially by sortButtonOrder() method
+ }
+ orientation: ListView.Horizontal
+ itemWidth: width / 4
+ itemHeight: itemWidth
+
+ onModelOrderChanged: {
+ var orderStr = '';
+ for (var i = 0; i < model.count; i++) {
+ var item = model.get(i)
+ if (orderStr.length > 0) {
+ orderStr += '|';
}
- cfg_buttonOrder = orderStr;
- print('written: ' + cfg_buttonOrder);
+ orderStr += item.name;
}
+ cfg_buttonOrder = orderStr;
+ print('written: ' + cfg_buttonOrder);
}
+ }
- Item {
- width: 2
- height: 10
- Layout.columnSpan: 2
- }
-
- Label {
- text: i18n("Behaviour:")
- Layout.alignment: Qt.AlignVCenter|Qt.AlignRight
- }
-
- CheckBox {
- id: doNotHideControlButtons
- text: i18n("Do not hide on mouse out")
- }
-
- Item {
- width: 2
- height: 2
- Layout.rowSpan: 5
- }
-
- CheckBox {
- id: showButtonOnlyWhenMaximized
- text: i18n("Show only when maximized")
- }
-
- CheckBox {
- id: buttonsStandalone
- text: i18n("Buttons next to icon and text")
- }
-
- CheckBox {
- id: buttonsBetweenIconAndText
- text: i18n("Buttons between icon and text")
- enabled: buttonsStandalone.checked
- }
-
- CheckBox {
- id: buttonsDynamicWidth
- text: i18n("Dynamic width")
- enabled: buttonsStandalone.checked
- }
+ Item {
+ width: 2
+ height: 10
+ Layout.columnSpan: 2
+ }
- CheckBox {
- id: slidingIconAndText
- text: i18n("Sliding icon and text")
- enabled: buttonsStandalone.checked
- }
+ Label {
+ text: i18n("Show:")
+ Layout.alignment: Qt.AlignRight
+ }
+ CheckBox {
+ id: showMinimize
+ text: i18n("Minimize button")
+ }
+ Item {
+ width: 2
+ height: 2
+ Layout.rowSpan: 2
+ }
+ CheckBox {
+ id: showMaximize
+ text: i18n("Maximize button")
+ }
+ CheckBox {
+ id: showPinToAllDesktops
+ text: i18n("Pin to all desktops")
+ }
+ Item {
+ width: 2
+ height: 10
+ Layout.columnSpan: 2
+ }
- Item {
- width: 2
- height: 10
- Layout.columnSpan: 2
- }
+ Label {
+ text: i18n("Behaviour:")
+ Layout.alignment: Qt.AlignVCenter|Qt.AlignRight
+ }
- Label {
- text: i18n("Position:")
- Layout.alignment: Qt.AlignVCenter|Qt.AlignRight
- }
- RadioButton {
- id: upperLeftRadio
- exclusiveGroup: buttonsPositionGroup
- text: i18n("Upper left")
- onCheckedChanged: if (checked) cfg_buttonsPosition = 0;
- }
- Item {
- width: 2
- height: 2
- Layout.rowSpan: 4
- }
- RadioButton {
- id: upperRightRadio
- exclusiveGroup: buttonsPositionGroup
- text: i18n("Upper right")
- onCheckedChanged: if (checked) cfg_buttonsPosition = 1;
- }
- RadioButton {
- id: bottomLeftRadio
- exclusiveGroup: buttonsPositionGroup
- text: i18n("Bottom left")
- onCheckedChanged: if (checked) cfg_buttonsPosition = 2;
- }
- RadioButton {
- id: bottomRightRadio
- exclusiveGroup: buttonsPositionGroup
- text: i18n("Bottom right")
- onCheckedChanged: if (checked) cfg_buttonsPosition = 3;
- }
+ CheckBox {
+ id: showButtonOnlyWhenMaximized
+ text: i18n("Show only when maximized")
+ }
- CheckBox {
- id: buttonsVerticalCenter
- text: i18n("Vertical center")
- }
+ Item {
+ width: 2
+ height: 10
+ Layout.columnSpan: 2
+ }
- Item {
- width: 2
- height: 10
- Layout.columnSpan: 2
- }
+ Label {
+ text: i18n("Buttons spacing:")
+ Layout.alignment: Qt.AlignVCenter|Qt.AlignRight
+ }
+ Slider {
+ id: controlButtonsSpacing
+ stepSize: 1
+ minimumValue: 0
+ maximumValue: 20
+ tickmarksEnabled: true
+ width: parent.width
+ }
- Label {
- text: i18n("Button size:")
- Layout.alignment: Qt.AlignVCenter|Qt.AlignRight
- }
- Slider {
- id: buttonSize
- stepSize: 0.1
- minimumValue: 0.1
- tickmarksEnabled: true
- width: parent.width
- }
+ Label {
+ text: i18n("Button size:")
+ Layout.alignment: Qt.AlignVCenter|Qt.AlignRight
+ }
+ Slider {
+ id: buttonSize
+ stepSize: 0.1
+ minimumValue: 0.1
+ tickmarksEnabled: true
+ width: parent.width
+ }
- Label {
- text: i18n("Buttons spacing:")
- Layout.alignment: Qt.AlignVCenter|Qt.AlignRight
- }
- Slider {
- id: controlButtonsSpacing
- stepSize: 1
- minimumValue: 0
- maximumValue: 20
- tickmarksEnabled: true
- width: parent.width
- }
+ Label {
+ text: i18n("Position:")
+ Layout.alignment: Qt.AlignVCenter|Qt.AlignRight
+ }
+ RadioButton {
+ id: topRadio
+ exclusiveGroup: buttonsVertialPositionGroup
+ text: i18n("Top")
+ onCheckedChanged: if (checked) cfg_buttonsVerticalPosition = 0;
+ enabled: buttonSize.value < 1
+ }
+ Item {
+ width: 2
+ height: 2
+ Layout.rowSpan: 4
+ }
+ RadioButton {
+ id: middleRadio
+ exclusiveGroup: buttonsVertialPositionGroup
+ text: i18n("Middle")
+ onCheckedChanged: if (checked) cfg_buttonsVerticalPosition = 1;
+ enabled: buttonSize.value < 1
+ }
+ RadioButton {
+ id: bottomRadio
+ exclusiveGroup: buttonsVertialPositionGroup
+ text: i18n("Bottom")
+ onCheckedChanged: if (checked) cfg_buttonsVerticalPosition = 2;
+ enabled: buttonSize.value < 1
+ }
- Item {
- width: 2
- height: 10
- Layout.columnSpan: 2
- }
+ Item {
+ width: 2
+ height: 10
+ Layout.columnSpan: 2
+ }
- Label {
- text: i18n("Theme")
- Layout.columnSpan: parent.columns
- font.bold: true
- }
- CheckBox {
- id: automaticButtonThemeEnabled
- text: i18n("Automatic")
- }
- TextField {
- id: customAuroraeThemePath
- placeholderText: i18n("Absolute path to aurorae button theme folder")
- Layout.preferredWidth: 350
- onTextChanged: cfg_customAuroraeThemePath = text
- enabled: !automaticButtonThemeEnabled.checked
- }
+ Label {
+ text: i18n("Theme")
+ Layout.columnSpan: parent.columns
+ font.bold: true
+ }
+ CheckBox {
+ id: automaticButtonThemeEnabled
+ text: i18n("Automatic")
+ }
+ TextField {
+ id: customAuroraeThemePath
+ placeholderText: i18n("Absolute path to aurorae button theme folder")
+ Layout.preferredWidth: 350
+ onTextChanged: cfg_customAuroraeThemePath = text
+ enabled: !automaticButtonThemeEnabled.checked
}
}
-
}
diff --git a/package/contents/ui/config/ConfigLayout.qml b/package/contents/ui/config/ConfigLayout.qml
index 1619a34..1e6903c 100644
--- a/package/contents/ui/config/ConfigLayout.qml
+++ b/package/contents/ui/config/ConfigLayout.qml
@@ -1,332 +1,395 @@
import QtQuick 2.2
import QtQuick.Controls 1.3
import QtQuick.Layouts 1.1
import QtQml.Models 2.1
Item {
+ id: configLayout
property string cfg_controlPartOrder
property alias cfg_controlPartSpacing: controlPartSpacing.value
// GENERATED config (start)
- property alias cfg_controlPartButtonsPosition: controlPartButtonsPosition.currentIndex
- property alias cfg_controlPartButtonsShowOnMouseIn: controlPartButtonsShowOnMouseIn.checked
- property alias cfg_controlPartButtonsShowOnMouseOut: controlPartButtonsShowOnMouseOut.checked
- property alias cfg_controlPartButtonsHorizontalAlignment: controlPartButtonsHorizontalAlignment.currentIndex
-
property alias cfg_controlPartIconPosition: controlPartIconPosition.currentIndex
property alias cfg_controlPartIconShowOnMouseIn: controlPartIconShowOnMouseIn.checked
property alias cfg_controlPartIconShowOnMouseOut: controlPartIconShowOnMouseOut.checked
property alias cfg_controlPartIconHorizontalAlignment: controlPartIconHorizontalAlignment.currentIndex
property alias cfg_controlPartTitlePosition: controlPartTitlePosition.currentIndex
property alias cfg_controlPartTitleShowOnMouseIn: controlPartTitleShowOnMouseIn.checked
property alias cfg_controlPartTitleShowOnMouseOut: controlPartTitleShowOnMouseOut.checked
property alias cfg_controlPartTitleHorizontalAlignment: controlPartTitleHorizontalAlignment.currentIndex
+ property alias cfg_controlPartButtonsPosition: controlPartButtonsPosition.currentIndex
+ property alias cfg_controlPartButtonsShowOnMouseIn: controlPartButtonsShowOnMouseIn.checked
+ property alias cfg_controlPartButtonsShowOnMouseOut: controlPartButtonsShowOnMouseOut.checked
+ property alias cfg_controlPartButtonsHorizontalAlignment: controlPartButtonsHorizontalAlignment.currentIndex
+
property alias cfg_controlPartMenuPosition: controlPartMenuPosition.currentIndex
property alias cfg_controlPartMenuShowOnMouseIn: controlPartMenuShowOnMouseIn.checked
property alias cfg_controlPartMenuShowOnMouseOut: controlPartMenuShowOnMouseOut.checked
property alias cfg_controlPartMenuHorizontalAlignment: controlPartMenuHorizontalAlignment.currentIndex
// GENERATED config (end)
property alias cfg_controlPartMouseAreaRestrictedToWidget: controlPartMouseAreaRestrictedToWidget.checked
+ property alias cfg_autoFillWidth: autoFillWidth.checked
+ property alias cfg_horizontalScreenWidthPercent: horizontalScreenWidthPercent.value
+ property alias cfg_widthFineTuning: widthFineTuning.value
+
ListModel {
id: partsToSpend
ListElement {
name: 'icon'
text: 'Icon'
}
ListElement {
name: 'title'
text: 'Title'
}
ListElement {
name: 'buttons'
text: 'Buttons'
}
ListElement {
name: 'menu'
text: 'Menu'
}
}
function sortPartOrder() {
buttonOrder.model.clear()
cfg_controlPartOrder.split('|').forEach(function (itemId, index) {
var partIndex = -1
print('adding ' + itemId);
if (itemId === 'icon') {
partIndex = 0
} else if (itemId === 'title') {
partIndex = 1
} else if (itemId === 'buttons') {
partIndex = 2
} else if (itemId === 'menu') {
partIndex = 3
}
if (partIndex >= 0) {
buttonOrder.model.append(partsToSpend.get(partIndex));
}
});
print('model count: ' + buttonOrder.model.count)
}
GridLayout {
columns: 3
+ Label {
+ text: i18n('Plasmoid version: ') + '1.8.0-git'
+ Layout.alignment: Qt.AlignRight
+ Layout.columnSpan: 3
+ }
+
+ Item {
+ width: 2
+ height: units.largeSpacing
+ Layout.columnSpan: 3
+ }
+
Label {
text: i18n("Item order:")
}
OrderableListView {
id: buttonOrder
Layout.columnSpan: 2
itemHeight: units.gridUnit * 2
itemWidth: units.gridUnit * 4
height: itemHeight
width: itemWidth * 4
model: ListModel {
// will be filled initially by sortButtonOrder() method
}
orientation: ListView.Horizontal
onModelOrderChanged: {
var orderStr = '';
for (var i = 0; i < model.count; i++) {
var item = model.get(i)
if (orderStr.length > 0) {
orderStr += '|';
}
orderStr += item.name;
}
cfg_controlPartOrder = orderStr;
print('written: ' + cfg_controlPartOrder);
}
}
Label {
text: i18n("Item spacing:")
}
SpinBox {
id: controlPartSpacing
decimals: 1
stepSize: 0.5
minimumValue: 0.5
maximumValue: 300
Layout.columnSpan: 2
}
// GENERATED controls (start)
GridLayout {
columns: 2
Item {
width: 2
height: units.largeSpacing
Layout.columnSpan: 2
}
Label {
- text: i18n('Buttons')
+ text: i18n('Icon')
font.bold: true
Layout.columnSpan: 2
}
Label {
text: i18n('Position:')
Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
}
ComboBox {
- id: controlPartButtonsPosition
+ id: controlPartIconPosition
model: [i18n('Occupy'), i18n('Floating layer'), i18n('Absolute')]
}
CheckBox {
- id: controlPartButtonsShowOnMouseIn
+ id: controlPartIconShowOnMouseIn
text: i18n('Show on mouse in')
Layout.columnSpan: 2
}
CheckBox {
- id: controlPartButtonsShowOnMouseOut
+ id: controlPartIconShowOnMouseOut
text: i18n('Show on mouse out')
Layout.columnSpan: 2
}
Label {
text: i18n('Horizontal alignment:')
Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
}
ComboBox {
- id: controlPartButtonsHorizontalAlignment
+ id: controlPartIconHorizontalAlignment
model: [i18n('Left'), i18n('Right')]
}
Item {
width: 2
height: units.largeSpacing
Layout.columnSpan: 2
}
Label {
- text: i18n('Icon')
+ text: i18n('Buttons')
font.bold: true
Layout.columnSpan: 2
}
Label {
text: i18n('Position:')
Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
}
ComboBox {
- id: controlPartIconPosition
+ id: controlPartButtonsPosition
model: [i18n('Occupy'), i18n('Floating layer'), i18n('Absolute')]
}
CheckBox {
- id: controlPartIconShowOnMouseIn
+ id: controlPartButtonsShowOnMouseIn
text: i18n('Show on mouse in')
Layout.columnSpan: 2
}
CheckBox {
- id: controlPartIconShowOnMouseOut
+ id: controlPartButtonsShowOnMouseOut
text: i18n('Show on mouse out')
Layout.columnSpan: 2
}
Label {
text: i18n('Horizontal alignment:')
Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
}
ComboBox {
- id: controlPartIconHorizontalAlignment
+ id: controlPartButtonsHorizontalAlignment
model: [i18n('Left'), i18n('Right')]
}
}
Item {
width: units.largeSpacing
height: units.largeSpacing
}
GridLayout {
columns: 2
Item {
width: 2
height: units.largeSpacing
Layout.columnSpan: 2
}
Label {
text: i18n('Title')
font.bold: true
Layout.columnSpan: 2
}
Label {
text: i18n('Position:')
Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
}
ComboBox {
id: controlPartTitlePosition
model: [i18n('Occupy'), i18n('Floating layer'), i18n('Absolute')]
}
CheckBox {
id: controlPartTitleShowOnMouseIn
text: i18n('Show on mouse in')
Layout.columnSpan: 2
}
CheckBox {
id: controlPartTitleShowOnMouseOut
text: i18n('Show on mouse out')
Layout.columnSpan: 2
}
Label {
text: i18n('Horizontal alignment:')
Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
}
ComboBox {
id: controlPartTitleHorizontalAlignment
model: [i18n('Left'), i18n('Right')]
}
Item {
width: 2
height: units.largeSpacing
Layout.columnSpan: 2
}
Label {
text: i18n('Menu')
font.bold: true
Layout.columnSpan: 2
}
Label {
text: i18n('Position:')
Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
}
ComboBox {
id: controlPartMenuPosition
model: [i18n('Occupy'), i18n('Floating layer'), i18n('Absolute')]
}
CheckBox {
id: controlPartMenuShowOnMouseIn
text: i18n('Show on mouse in')
Layout.columnSpan: 2
}
CheckBox {
id: controlPartMenuShowOnMouseOut
text: i18n('Show on mouse out')
Layout.columnSpan: 2
}
Label {
text: i18n('Horizontal alignment:')
Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
}
ComboBox {
id: controlPartMenuHorizontalAlignment
model: [i18n('Left'), i18n('Right')]
}
}
// GENERATED controls (end)
Item {
width: units.largeSpacing
height: units.largeSpacing
Layout.columnSpan: 3
}
CheckBox {
id: controlPartMouseAreaRestrictedToWidget
text: i18n('Restrict mouse area to widget')
- Layout.columnSpan: 2
+ Layout.columnSpan: 3
+ }
+
+ Item {
+ width: units.largeSpacing
+ height: units.largeSpacing
+ Layout.columnSpan: 3
+ }
+
+ Label {
+ text: i18n("Width in horizontal panel:")
+ font.bold: true
+ Layout.alignment: Qt.AlignLeft
+ Layout.columnSpan: 3
+ }
+
+ CheckBox {
+ id: autoFillWidth
+ text: i18n("Fill width")
+ Layout.columnSpan: 3
+ }
+
+ GridLayout {
+ columns: 2
+ Layout.columnSpan: 3
+ enabled: !autoFillWidth.checked
+
+ Slider {
+ id: horizontalScreenWidthPercent
+ stepSize: 0.001
+ minimumValue: 0.001
+ maximumValue: 1
+ Layout.preferredWidth: configLayout.width
+ Layout.columnSpan: 2
+ }
+
+ Label {
+ text: i18n("Fine tuning:")
+ Layout.alignment: Qt.AlignRight
+ }
+ SpinBox {
+ id: widthFineTuning
+ decimals: 1
+ stepSize: 0.5
+ minimumValue: -100
+ maximumValue: 100
+ }
}
}
Component.onCompleted: {
sortPartOrder()
}
}
diff --git a/package/contents/ui/config/ConfigMouseControl.qml b/package/contents/ui/config/ConfigMouseControl.qml
index a2b5441..f461a04 100644
--- a/package/contents/ui/config/ConfigMouseControl.qml
+++ b/package/contents/ui/config/ConfigMouseControl.qml
@@ -1,195 +1,194 @@
import QtQuick 2.2
import QtQuick.Controls 1.3
import QtQuick.Layouts 1.1
Item {
- id: appearancePage
property alias cfg_doubleClickMaximizes: doubleClickMaximizes.checked
property int cfg_leftClickAction
property int cfg_middleClickAction
property alias cfg_wheelUpMaximizes: wheelUpMaximizes.checked
property int cfg_wheelDownAction
onCfg_leftClickActionChanged: {
switch (cfg_leftClickAction) {
case 1:
leftClickActionGroup.current = leftClickExposeRadio;
break;
case 2:
leftClickActionGroup.current = leftClickExposeAllRadio;
break;
case 3:
leftClickActionGroup.current = leftClickExposeClassRadio;
break;
case 0:
default:
leftClickActionGroup.current = leftClickDisabledRadio;
}
}
onCfg_middleClickActionChanged: {
switch (cfg_middleClickAction) {
case 1:
middleClickActionGroup.current = middleClickCloseRadio;
break;
case 2:
middleClickActionGroup.current = middleClickFullscreenRadio;
break;
case 0:
default:
middleClickActionGroup.current = middleClickDisabledRadio;
}
}
onCfg_wheelDownActionChanged: {
switch (cfg_wheelDownAction) {
case 1:
wheelDownActionGroup.current = wheelDownMinimizesRadio;
break;
case 2:
wheelDownActionGroup.current = wheelDownUnmaximizesRadio;
break;
case 0:
default:
wheelDownActionGroup.current = wheelDownDisabledRadio;
}
}
Component.onCompleted: {
cfg_leftClickActionChanged()
cfg_middleClickActionChanged()
cfg_wheelDownActionChanged()
}
ExclusiveGroup {
id: leftClickActionGroup
}
ExclusiveGroup {
id: middleClickActionGroup
}
ExclusiveGroup {
id: wheelDownActionGroup
}
GridLayout {
id: displayPosition
columns: 2
Label {
text: i18n("Mouse Buttons:")
Layout.alignment: Qt.AlignVCenter|Qt.AlignRight
}
CheckBox {
id: doubleClickMaximizes
text: i18n("Doubleclick to toggle maximizing")
onCheckedChanged: if (checked) leftClickDisabledRadio.checked = true
}
Item {
width: 2
height: 10
Layout.rowSpan: 4
}
RadioButton {
id: leftClickDisabledRadio
exclusiveGroup: leftClickActionGroup
text: i18n("Left click disabled")
onCheckedChanged: if (checked) cfg_leftClickAction = 0;
enabled: !doubleClickMaximizes.checked
}
RadioButton {
id: leftClickExposeRadio
exclusiveGroup: leftClickActionGroup
text: i18n("Left click to present windows (Current Desktop)")
onCheckedChanged: if (checked) cfg_leftClickAction = 1;
enabled: !doubleClickMaximizes.checked
}
RadioButton {
id: leftClickExposeAllRadio
exclusiveGroup: leftClickActionGroup
text: i18n("Left click to present windows (All Desktops)")
onCheckedChanged: if (checked) cfg_leftClickAction = 2;
enabled: !doubleClickMaximizes.checked
}
RadioButton {
id: leftClickExposeClassRadio
exclusiveGroup: leftClickActionGroup
text: i18n("Left click to present windows (Window Class)")
onCheckedChanged: if (checked) cfg_leftClickAction = 3;
enabled: !doubleClickMaximizes.checked
}
Item {
width: 2
height: 10
Layout.columnSpan: 2
}
Item {
width: 2
height: 2
Layout.rowSpan: 3
}
RadioButton {
id: middleClickDisabledRadio
exclusiveGroup: middleClickActionGroup
text: i18n("Middle click disabled")
onCheckedChanged: if (checked) cfg_middleClickAction = 0;
}
RadioButton {
id: middleClickCloseRadio
exclusiveGroup: middleClickActionGroup
text: i18n("Middle click to close active window")
onCheckedChanged: if (checked) cfg_middleClickAction = 1;
}
RadioButton {
id: middleClickFullscreenRadio
exclusiveGroup: middleClickActionGroup
text: i18n("Middle click to toggle fullscreen")
onCheckedChanged: if (checked) cfg_middleClickAction = 2;
}
Item {
width: 2
height: 10
Layout.columnSpan: 2
}
Label {
text: i18n("Mouse Wheel:")
Layout.alignment: Qt.AlignVCenter|Qt.AlignRight
}
CheckBox {
id: wheelUpMaximizes
text: i18n("Mouse wheel up to maximize")
}
Item {
width: 2
height: 2
Layout.rowSpan: 3
}
RadioButton {
id: wheelDownDisabledRadio
exclusiveGroup: wheelDownActionGroup
text: i18n("Mouse wheel down disabled")
onCheckedChanged: if (checked) cfg_wheelDownAction = 0;
}
RadioButton {
id: wheelDownMinimizesRadio
exclusiveGroup: wheelDownActionGroup
text: i18n("Mouse wheel down to minimize")
onCheckedChanged: if (checked) cfg_wheelDownAction = 1;
}
RadioButton {
id: wheelDownUnmaximizesRadio
exclusiveGroup: wheelDownActionGroup
text: i18n("Mouse wheel down to unmaximize")
onCheckedChanged: if (checked) cfg_wheelDownAction = 2;
}
}
}
diff --git a/package/contents/ui/config/ConfigTitleAndIcon.qml b/package/contents/ui/config/ConfigTitleAndIcon.qml
new file mode 100644
index 0000000..0cb9dc0
--- /dev/null
+++ b/package/contents/ui/config/ConfigTitleAndIcon.qml
@@ -0,0 +1,233 @@
+import QtQuick 2.2
+import QtQuick.Controls 1.3
+import QtQuick.Layouts 1.1
+import org.kde.plasma.core 2.0 as PlasmaCore
+
+Item {
+
+ property alias cfg_textType: textTypeCombo.currentIndex
+ property alias cfg_fitText: fitTextCombo.currentIndex
+ property alias cfg_tooltipTextType: tooltipTextTypeCombo.currentIndex
+ property alias cfg_useWindowTitleReplace: useWindowTitleReplace.checked
+ property alias cfg_replaceTextRegex: replaceTextRegex.text
+ property alias cfg_replaceTextReplacement: replaceTextReplacement.text
+ property alias cfg_noWindowText: noWindowText.text
+ property string cfg_noWindowIcon: plasmoid.configuration.noWindowIcon
+ property alias cfg_limitTextWidth: limitTextWidth.checked
+ property alias cfg_textWidthLimit: textWidthLimit.value
+
+ property alias cfg_textFontBold: textFontBoldCombo.currentIndex
+ property string cfg_fontFamily
+ property alias cfg_fontSizeScale: fontSizeScale.value
+
+ /* copied from /usr/share/plasma/plasmoids/org.kde.plasma.digitalclock/contents/ui/configAppearance.qml */
+ onCfg_fontFamilyChanged: {
+ // HACK by the time we populate our model and/or the ComboBox is finished the value is still undefined
+ if (cfg_fontFamily) {
+ for (var i = 0, j = fontsModel.count; i < j; ++i) {
+ if (fontsModel.get(i).value == cfg_fontFamily) {
+ fontFamilyComboBox.currentIndex = i
+ break
+ }
+ }
+ }
+ }
+
+ ListModel {
+ id: fontsModel
+ Component.onCompleted: {
+ var arr = [ {text: i18nc("Use default font", "Default"), value: ""} ]
+ Qt.fontFamilies().forEach(function (font) {
+ arr.push({text: font, value: font})
+ })
+ append(arr)
+ cfg_fontFamilyChanged();
+ }
+ }
+
+ GridLayout {
+ columns: 2
+
+ Label {
+ text: i18n('Text')
+ Layout.alignment: Qt.AlignLeft
+ font.bold: true
+ Layout.columnSpan: 2
+ }
+
+ Label {
+ text: i18n('Text type:')
+ Layout.alignment: Qt.AlignRight
+ }
+ ComboBox {
+ id: textTypeCombo
+ model: [i18n('Window title'), i18n('Application name')]
+ }
+
+ Label {
+ text: i18n('Fit text:')
+ Layout.alignment: Qt.AlignRight
+ }
+ ComboBox {
+ id: fitTextCombo
+ model: [i18n('Just elide'), i18n('Fit on hover'), i18n('Always fit')]
+ }
+
+ Label {
+ text: i18n('Tooltip text:')
+ Layout.alignment: Qt.AlignRight
+ }
+ ComboBox {
+ id: tooltipTextTypeCombo
+ model: [i18n('No tooltip'), i18n('Window title'), i18n('Application name')]
+ }
+
+ Item {
+ width: 2
+ height: units.largeSpacing
+ Layout.columnSpan: 2
+ }
+
+ Label {
+ text: i18n('Bold text:')
+ Layout.alignment: Qt.AlignRight
+ }
+ ComboBox {
+ id: textFontBoldCombo
+ // ComboBox's sizing is just utterly broken
+ Layout.minimumWidth: units.gridUnit * 10
+ model: [i18n('Never'), i18n('Always'), i18n('When appmenu is displayed')]
+ }
+
+ Label {
+ text: i18n('Text font:')
+ Layout.alignment: Qt.AlignRight
+ }
+ ComboBox {
+ id: fontFamilyComboBox
+ // ComboBox's sizing is just utterly broken
+ Layout.minimumWidth: units.gridUnit * 10
+ model: fontsModel
+ // doesn't autodeduce from model because we manually populate it
+ textRole: "text"
+ onCurrentIndexChanged: {
+ var current = model.get(currentIndex)
+ if (current) {
+ cfg_fontFamily = current.value
+ //appearancePage.configurationChanged()
+ console.log('change: ' + cfg_fontFamily)
+ }
+ }
+ }
+
+ Label {
+ text: i18n("Font size scale:")
+ Layout.alignment: Qt.AlignVCenter|Qt.AlignRight
+ }
+ SpinBox {
+ id: fontSizeScale
+ decimals: 2
+ stepSize: 0.05
+ minimumValue: 0
+ maximumValue: 3
+ }
+
+ CheckBox {
+ id: limitTextWidth
+ text: i18n('Limit text width')
+ Layout.alignment: Qt.AlignRight
+ }
+ SpinBox {
+ id: textWidthLimit
+ decimals: 0
+ stepSize: 10
+ minimumValue: 0
+ maximumValue: 10000
+ enabled: limitTextWidth.checked
+ suffix: i18nc('Abbreviation for pixels', 'px')
+ }
+
+ Item {
+ width: 2
+ height: units.largeSpacing
+ Layout.columnSpan: 2
+ }
+
+ CheckBox {
+ id: useWindowTitleReplace
+ text: '"' + i18n('Window title') + '".replace(/'
+ Layout.alignment: Qt.AlignRight
+ }
+ GridLayout {
+ columns: 4
+
+ TextField {
+ id: replaceTextRegex
+ placeholderText: '^(.*)\\s+[—–\\-:]\\s+([^—–\\-:]+)$'
+ Layout.preferredWidth: 300
+ onTextChanged: cfg_replaceTextRegex = text
+ enabled: useWindowTitleReplace.checked
+ }
+
+ Label {
+ text: '/, "'
+ }
+
+ TextField {
+ id: replaceTextReplacement
+ placeholderText: '$2 — $1'
+ Layout.preferredWidth: 100
+ onTextChanged: cfg_replaceTextReplacement = text
+ enabled: useWindowTitleReplace.checked
+ }
+
+ Label {
+ text: '");'
+ }
+ }
+
+ Label {
+ text: i18n('No window text:')
+ Layout.alignment: Qt.AlignRight
+ }
+ GridLayout {
+ columns: 2
+
+ TextField {
+ id: noWindowText
+ placeholderText: 'Plasma Desktop :: %activity%'
+ onTextChanged: cfg_noWindowText = text
+ Layout.preferredWidth: 300
+ }
+
+ Label {
+ text: i18n('Use %activity% placeholder to show current activity name.')
+ Layout.preferredWidth: 200
+ wrapMode: Text.Wrap
+ }
+ }
+
+ Item {
+ width: 2
+ height: units.largeSpacing
+ Layout.columnSpan: 2
+ }
+
+ Label {
+ text: i18n('Icon')
+ Layout.alignment: Qt.AlignLeft
+ font.bold: true
+ Layout.columnSpan: 2
+ }
+
+ Label {
+ text: i18n("No window icon:")
+ Layout.alignment: Qt.AlignRight
+ }
+ IconPicker {
+ currentIcon: cfg_noWindowIcon
+ defaultIcon: ''
+ onIconChanged: cfg_noWindowIcon = iconName
+ }
+ }
+}
diff --git a/package/contents/ui/config/OrderableListView.qml b/package/contents/ui/config/OrderableListView.qml
index 01b44d7..46493c7 100644
--- a/package/contents/ui/config/OrderableListView.qml
+++ b/package/contents/ui/config/OrderableListView.qml
@@ -1,87 +1,87 @@
import QtQuick 2.6
import QtQuick.Controls 1.3
import QtQuick.Layouts 1.1
import org.kde.plasma.core 2.0 as PlasmaCore
Item {
id: mainContent
property var model
property int orientation
property double itemWidth
property double itemHeight
property bool interactive
width: itemWidth * (orientation == ListView.Vertical ? 1 : model.count)
height: itemHeight * (orientation == ListView.Horizontal ? 1 : model.count)
SystemPalette {
id: palette
}
// theme + svg
property bool textColorLight: ((palette.text.r + palette.text.g + palette.text.b) / 3) > 0.5
property string themeName: textColorLight ? 'breeze-dark' : 'default'
signal modelOrderChanged()
ListView {
id: listView
anchors.fill: parent
model: mainContent.model
orientation: mainContent.orientation
delegate: OrderableItem {
listViewParent: listView.parent
Item {
height: itemHeight
width: itemWidth
PlasmaCore.Svg {
id: buttonSvg
imagePath: Qt.resolvedUrl('../../icons/' + themeName + '/' + model.iconName + '.svg')
}
// item border
Rectangle {
border.width: 1
border.color: theme.textColor
radius: units.gridUnit / 4
color: 'transparent'
opacity: 0.5
anchors.fill: parent
}
// icon
PlasmaCore.SvgItem {
id: svgItem
anchors.left: parent.left
anchors.top: parent.top
anchors.bottom: parent.bottom
width: parent.width
height: width
svg: buttonSvg
elementId: 'active-idle'
visible: !!model.iconName
}
// text
Label {
- text: model.text
+ text: model.text || ''
anchors.fill: parent
anchors.leftMargin: svgItem.visible ? svgItem.width + units.smallSpacing : 0
visible: !!model.text
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
}
}
onMoveItemRequested: {
mainContent.model.move(from, to, 1);
mainContent.modelOrderChanged()
}
}
}
}
diff --git a/package/contents/ui/main.qml b/package/contents/ui/main.qml
index 64a7e23..42b228c 100644
--- a/package/contents/ui/main.qml
+++ b/package/contents/ui/main.qml
@@ -1,676 +1,561 @@
/*
* Copyright 2015 Martin Kotelnik
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
import QtQuick 2.2
import QtGraphicalEffects 1.0
import QtQuick.Layouts 1.1
import QtQuick.Window 2.2
import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.taskmanager 0.1 as TaskManager
import org.kde.activities 0.1 as Activities
Item {
id: main
property bool vertical: (plasmoid.formFactor == PlasmaCore.Types.Vertical)
property double horizontalScreenWidthPercent: plasmoid.configuration.horizontalScreenWidthPercent
-// property double buttonSize: plasmoid.configuration.buttonSize
property bool autoFillWidth: plasmoid.configuration.autoFillWidth
- property double widthForHorizontalPanel: (Screen.width * horizontalScreenWidthPercent + plasmoid.configuration.widthFineTuning) - ((!buttonsItem.visible && buttonsStandalone && plasmoid.configuration.buttonsDynamicWidth) ? buttonsItem.width : 0)
- anchors.fill: parent
- Layout.fillWidth: plasmoid.configuration.autoFillWidth
- Layout.preferredWidth: autoFillWidth ? -1 : (vertical ? parent.width : (widthForHorizontalPanel > 0 ? widthForHorizontalPanel : 0.0001))
- Layout.minimumWidth: Layout.preferredWidth
- Layout.maximumWidth: Layout.preferredWidth
- Layout.preferredHeight: parent === null ? 0 : vertical ? Math.min(theme.defaultFont.pointSize * 4, parent.width) : parent.height
- Layout.minimumHeight: Layout.preferredHeight
- Layout.maximumHeight: Layout.preferredHeight
+ property double widthForHorizontalPanel: (Screen.width * horizontalScreenWidthPercent + plasmoid.configuration.widthFineTuning)
property int textType: plasmoid.configuration.textType
- property int fitText: plasmoid.configuration.fitText
property int tooltipTextType: plasmoid.configuration.tooltipTextType
property string tooltipText: ''
- property bool windowIconOnTheRight: plasmoid.configuration.windowIconOnTheRight
- property double iconAndTextSpacing: plasmoid.configuration.iconAndTextSpacing
- property bool slidingIconAndText: plasmoid.configuration.slidingIconAndText
property double fontPixelSize: theme.defaultFont.pixelSize * plasmoid.configuration.fontSizeScale
- property bool fontBold: plasmoid.configuration.boldFontWeight
- property string fontFamily: plasmoid.configuration.fontFamily
property bool noWindowActive: true
property bool currentWindowMaximized: false
- property bool canShowButtonsAccordingMaximized: showButtonOnlyWhenMaximized ? currentWindowMaximized : true
-
- property int controlButtonsSpacing: plasmoid.configuration.controlButtonsSpacing
-
- property int bp: plasmoid.configuration.buttonsPosition;
- property bool buttonsVerticalCenter: plasmoid.configuration.buttonsVerticalCenter
- property bool showControlButtons: plasmoid.configuration.showControlButtons
- property bool showButtonOnlyWhenMaximized: plasmoid.configuration.showButtonOnlyWhenMaximized
- property bool showMinimize: showControlButtons && plasmoid.configuration.showMinimize
- property bool showMaximize: showControlButtons && plasmoid.configuration.showMaximize
- property bool showPinToAllDesktops: showControlButtons && plasmoid.configuration.showPinToAllDesktops
- property string buttonOrder: plasmoid.configuration.buttonOrder
+
property bool doubleClickMaximizes: plasmoid.configuration.doubleClickMaximizes
property int leftClickAction: plasmoid.configuration.leftClickAction
property string chosenLeftClickSource: leftClickAction === 1 ? shortcutDS.presentWindows : leftClickAction === 2 ? shortcutDS.presentWindowsAll : leftClickAction === 3 ? shortcutDS.presentWindowsClass : ''
property bool middleClickClose: plasmoid.configuration.middleClickAction === 1
property bool middleClickFullscreen: plasmoid.configuration.middleClickAction === 2
property bool wheelUpMaximizes: plasmoid.configuration.wheelUpMaximizes
property bool wheelDownMinimizes: plasmoid.configuration.wheelDownAction === 1
property bool wheelDownUnmaximizes: plasmoid.configuration.wheelDownAction === 2
- property bool buttonsStandalone: showControlButtons && plasmoid.configuration.buttonsStandalone
- property bool buttonsBetweenIconAndText: buttonsStandalone && plasmoid.configuration.buttonsBetweenIconAndText
- property bool doNotHideControlButtons: showControlButtons && plasmoid.configuration.doNotHideControlButtons
-
property bool textColorLight: ((theme.textColor.r + theme.textColor.g + theme.textColor.b) / 3) > 0.5
- property bool mouseHover: false
property bool isActiveWindowPinned: false
property bool isActiveWindowMaximized: false
-// property bool appmenuNextToIconAndText: plasmoid.configuration.appmenuNextToIconAndText
-// property double appmenuSideMargin: plasmoid.configuration.appmenuOuterSideMargin
-// property bool appmenuSwitchSidesWithIconAndText: plasmoid.configuration.appmenuSwitchSidesWithIconAndText
-// property bool appmenuBoldTitleWhenMenuDisplayed: plasmoid.configuration.appmenuBoldTitleWhenMenuDisplayed
-
property bool controlPartMouseAreaRestrictedToWidget: plasmoid.configuration.controlPartMouseAreaRestrictedToWidget
property var activeTaskLocal: null
property int activityActionCount: 0
- property bool automaticButtonThemeEnabled: plasmoid.configuration.automaticButtonThemeEnabled
- property string manualAuroraeThemePath: plasmoid.configuration.customAuroraeThemePath
- property string manualAuroraeThemePathResolved: ''
- property string manualAuroraeThemeExtension: 'svg'
-
property var itemPartOrder: []
+ property bool mouseInWidget: mainMouseArea.containsMouse || buttonsItem.mouseInWidget || menuItem.mouseInWidget
+
+ anchors.fill: parent
+
+ Layout.fillWidth: plasmoid.configuration.autoFillWidth
+ Layout.preferredWidth: autoFillWidth ? -1 : (vertical ? parent.width : (widthForHorizontalPanel > 0 ? widthForHorizontalPanel : 0.0001))
+ Layout.minimumWidth: Layout.preferredWidth
+ Layout.maximumWidth: Layout.preferredWidth
+ Layout.preferredHeight: parent === null ? 0 : vertical ? Math.min(theme.defaultFont.pointSize * 4, parent.width) : parent.height
+ Layout.minimumHeight: Layout.preferredHeight
+ Layout.maximumHeight: Layout.preferredHeight
+
Plasmoid.preferredRepresentation: Plasmoid.fullRepresentation
Plasmoid.status: {
if (menuItem.appmenuOpened) {
return PlasmaCore.Types.NeedsAttentionStatus;
} else if (!menuItem.appmenuOpened && menuItem.appmenuEnabledAndNonEmpty){
return PlasmaCore.Types.ActiveStatus;
} else {
return PlasmaCore.Types.PassiveStatus;
}
}
//
// MODEL
//
TaskManager.TasksModel {
id: tasksModel
sortMode: TaskManager.TasksModel.SortVirtualDesktop
groupMode: TaskManager.TasksModel.GroupDisabled
screenGeometry: plasmoid.screenGeometry
filterByScreen: plasmoid.configuration.showForCurrentScreenOnly
onActiveTaskChanged: {
updateActiveWindowInfo()
}
onDataChanged: {
updateActiveWindowInfo()
}
onCountChanged: {
updateActiveWindowInfo()
}
}
TaskManager.ActivityInfo {
id: activityInfo
onCurrentActivityChanged: {
if (noWindowActive) {
updateActiveWindowInfo();
}
reAddActivityActions()
}
onNumberOfRunningActivitiesChanged: {
reAddActivityActions()
}
}
Activities.ActivityModel {
id: activityModel
}
function activeTask() {
return activeTaskLocal
}
function activeTaskExists() {
return activeTaskLocal.display !== undefined
}
- onTooltipTextTypeChanged: updateTooltip()
-
function updateTooltip() {
if (tooltipTextType === 1) {
tooltipText = replaceTitle(activeTask().display || '')
} else if (tooltipTextType === 2) {
tooltipText = activeTask().AppName || ''
} else {
tooltipText = ''
}
}
+ onTooltipTextTypeChanged: updateTooltip()
+
function composeNoWindowText() {
return plasmoid.configuration.noWindowText.replace('%activity%', activityInfo.activityName(activityInfo.currentActivity))
}
function updateActiveWindowInfo() {
var activeTaskIndex = tasksModel.activeTask
// fallback for Plasma 5.8
var abstractTasksModel = TaskManager.AbstractTasksModel || {}
var isActive = abstractTasksModel.IsActive || 271
var appName = abstractTasksModel.AppName || 258
var isMaximized = abstractTasksModel.IsMaximized || 276
var virtualDesktop = abstractTasksModel.VirtualDesktop || 286
activeTaskLocal = {}
if (tasksModel.data(activeTaskIndex, isActive)) {
activeTaskLocal = {
display: tasksModel.data(activeTaskIndex, Qt.DisplayRole),
decoration: tasksModel.data(activeTaskIndex, Qt.DecorationRole),
AppName: tasksModel.data(activeTaskIndex, appName),
IsMaximized: tasksModel.data(activeTaskIndex, isMaximized),
VirtualDesktop: tasksModel.data(activeTaskIndex, virtualDesktop)
}
}
var actTask = activeTask()
noWindowActive = !activeTaskExists()
currentWindowMaximized = !noWindowActive && actTask.IsMaximized === true
isActiveWindowPinned = actTask.VirtualDesktop === -1;
if (noWindowActive) {
titleItem.text = composeNoWindowText()
iconItem.source = plasmoid.configuration.noWindowIcon
} else {
titleItem.text = (textType === 1 ? actTask.AppName : null) || replaceTitle(actTask.display)
iconItem.source = actTask.decoration
}
updateTooltip()
}
function toggleMaximized() {
tasksModel.requestToggleMaximized(tasksModel.activeTask);
}
function toggleMinimized() {
tasksModel.requestToggleMinimized(tasksModel.activeTask);
}
function toggleClose() {
tasksModel.requestClose(tasksModel.activeTask);
}
function toggleFullscreen() {
tasksModel.requestToggleFullScreen(tasksModel.activeTask);
}
function togglePinToAllDesktops() {
tasksModel.requestVirtualDesktop(tasksModel.activeTask, 0);
}
function setMaximized(maximized) {
if ((maximized && !activeTask().IsMaximized)
|| (!maximized && activeTask().IsMaximized)) {
print('toggle maximized')
toggleMaximized()
}
}
function setMinimized() {
if (!activeTask().IsMinimized) {
toggleMinimized()
}
}
function getConfigName(itemName) {
return itemName.substring(0, 1).toUpperCase() + itemName.substring(1)
}
/*
* Position can be:
* 0 ... occupy
* 1 ... floating layer (second occupy)
* 2 ... absolute
*/
function getPosition(itemName) {
var configName = getConfigName(itemName)
print('getPosition: ' + configName)
print('POS: ' + plasmoid.configuration['controlPart' + configName + 'Position'])
return plasmoid.configuration['controlPart' + configName + 'Position']
}
function isRelevant(itemName) {
var configName = getConfigName(itemName)
print('isRelevant: ' + configName)
print('1IR: ' + plasmoid.configuration['controlPart' + configName + 'ShowOnMouseIn'])
print('2IR: ' + plasmoid.configuration['controlPart' + configName + 'ShowOnMouseOut'])
var result = plasmoid.configuration['controlPart' + configName + 'ShowOnMouseIn'] || plasmoid.configuration['controlPart' + configName + 'ShowOnMouseOut']
print('res: ' + result)
return result
}
function getItem(itemName) {
if (itemName === 'icon') {
return iconItem
}
if (itemName === 'title') {
return titleItem
}
if (itemName === 'menu') {
return menuItem
}
if (itemName === 'buttons') {
return buttonsItem
}
return null
}
function getItemWidth(itemName) {
return getItem(itemName).width
}
function getLeftMargin(itemName) {
var itemPosition = getPosition(itemName)
print('position of ' + itemName + ' is ' + itemPosition)
if (itemPosition === 2) {
return 0
}
var anchorSize = 0
itemPartOrder.some(function (iName, index) {
print('iterating: ' + iName)
if (iName === itemName) {
return true
}
if (getPosition(iName) === itemPosition && isRelevant(iName)) {
var currentItemWidth = getItemWidth(iName)
print('width of ' + iName + ' is ' + currentItemWidth)
anchorSize += currentItemWidth
anchorSize += plasmoid.configuration.controlPartSpacing
}
});
print('leftMargin of ' + itemName + ' is ' + anchorSize)
return anchorSize
}
function getWidth(itemName) {
var itemPosition = getPosition(itemName)
print('getWidth(): position of ' + itemName + ' is ' + itemPosition)
if (itemPosition === 2) {
return 0
}
- var computedWidth = main.width
+ var computedWidth = widthForHorizontalPanel
itemPartOrder.forEach(function (iName, index) {
print('iterating: ' + iName)
if (iName === itemName) {
return;
}
if (getPosition(iName) === itemPosition && isRelevant(iName)) {
var currentItemWidth = getItemWidth(iName)
print('width of ' + iName + ' is ' + currentItemWidth)
computedWidth -= currentItemWidth
computedWidth -= plasmoid.configuration.controlPartSpacing
}
});
print('computedWidth of ' + itemName + ' is ' + computedWidth)
return computedWidth
}
function refreshItemPosition() {
- titleItem.width = getWidth('title')
- menuItem.width = getWidth('menu')
+ titleItem.recommendedWidth = getWidth('title')
+ menuItem.recommendedWidth = getWidth('menu')
iconItem.x = getLeftMargin('icon')
titleItem.x = getLeftMargin('title')
menuItem.x = getLeftMargin('menu')
buttonsItem.x = getLeftMargin('buttons')
textSeparator.x = getLeftMargin('menu') - (plasmoid.configuration.controlPartSpacing / 2)
}
function replaceTitle(title) {
if (!plasmoid.configuration.useWindowTitleReplace) {
return title
}
return title.replace(new RegExp(plasmoid.configuration.replaceTextRegex), plasmoid.configuration.replaceTextReplacement);
}
+ onWidthForHorizontalPanelChanged: refreshItemPosition()
+
MouseArea {
+ id: mainMouseArea
+
anchors.fill: parent
hoverEnabled: true
acceptedButtons: Qt.LeftButton | Qt.MiddleButton
- onEntered: {
- mouseHover = true
- buttonsItem.mouseInWidget = showControlButtons && !noWindowActive
- }
-
- onExited: {
- mouseHover = false
- buttonsItem.mouseInWidget = false
- }
-
onWheel: {
if (wheel.angleDelta.y > 0) {
if (wheelUpMaximizes) {
setMaximized(true)
}
} else {
if (wheelDownMinimizes) {
setMinimized()
} else if (wheelDownUnmaximizes) {
setMaximized(false)
}
}
}
onDoubleClicked: {
if (doubleClickMaximizes && mouse.button == Qt.LeftButton) {
toggleMaximized()
}
}
onClicked: {
if (chosenLeftClickSource !== '' && !doubleClickMaximizes && mouse.button == Qt.LeftButton) {
shortcutDS.connectedSources.push(chosenLeftClickSource)
buttonsItem.mouseInWidget = false
return
}
if (mouse.button == Qt.MiddleButton) {
if (middleClickFullscreen) {
toggleFullscreen()
} else if (middleClickClose) {
toggleClose()
}
}
}
PlasmaCore.ToolTipArea {
anchors.fill: parent
active: tooltipTextType > 0 && tooltipText !== ''
interactive: true
location: plasmoid.location
mainItem: Row {
spacing: 0
Layout.minimumWidth: fullText.width + units.largeSpacing
Layout.minimumHeight: childrenRect.height
Layout.maximumWidth: Layout.minimumWidth
Layout.maximumHeight: Layout.minimumHeight
Item {
width: units.largeSpacing / 2
height: 2
}
PlasmaComponents.Label {
id: fullText
text: tooltipText
}
}
}
}
- property bool mouseInWidget: mouseHover || buttonsItem.mouseInWidget || menuItem.mouseInWidget
-
ListModel {
id: controlButtonsModel
}
WindowIcon {
id: iconItem
visible: ((mouseInWidget && plasmoid.configuration.controlPartIconShowOnMouseIn)
|| (!mouseInWidget && plasmoid.configuration.controlPartIconShowOnMouseOut))
onWidthChanged: refreshItemPosition()
}
WindowTitle {
id: titleItem
visible: ((mouseInWidget && plasmoid.configuration.controlPartTitleShowOnMouseIn)
|| (!mouseInWidget && plasmoid.configuration.controlPartTitleShowOnMouseOut))
}
AppMenu {
id: menuItem
property bool mouseIn: controlPartMouseAreaRestrictedToWidget ? menuItem.mouseInWidget : main.mouseInWidget
height: main.height
- showItem: ((mouseIn && plasmoid.configuration.controlPartMenuShowOnMouseIn)
+ showItem: !noWindowActive && ((mouseIn && plasmoid.configuration.controlPartMenuShowOnMouseIn)
|| (!mouseIn && plasmoid.configuration.controlPartMenuShowOnMouseOut))
}
ControlButtons {
id: buttonsItem
property bool mouseIn: controlPartMouseAreaRestrictedToWidget ? buttonsItem.mouseInWidget : main.mouseInWidget
- controlButtonsModel: controlButtonsModel
-
- showItem: ((mouseIn && plasmoid.configuration.controlPartButtonsShowOnMouseIn)
+ showItem: !noWindowActive && ((mouseIn && plasmoid.configuration.controlPartButtonsShowOnMouseIn)
|| (!mouseIn && plasmoid.configuration.controlPartButtonsShowOnMouseOut))
onWidthChanged: refreshItemPosition()
}
Rectangle {
id: textSeparator
x: 0
anchors.verticalCenter: main.verticalCenter
height: 0.8 * parent.height
width: 1
visible: plasmoid.configuration.appmenuSeparatorEnabled && menuItem.showItem
color: theme.textColor
opacity: 0.4
}
- onMouseHoverChanged: {
- print('mouse hover changed: ' + mouseHover);
- }
-
- onMouseInWidgetChanged: {
- print('mouseInWidget: ' + mouseInWidget);
- }
-
- onManualAuroraeThemePathChanged: {
- manualAuroraeThemeExtension = plasmoid.nativeInterface.extensionForTheme(manualAuroraeThemePath);
- manualAuroraeThemePathResolved = plasmoid.nativeInterface.translateThemePath(manualAuroraeThemePath);
- print('manualAuroraeThemePath=' + manualAuroraeThemePath)
- print('manualAuroraeThemePathResolved=' + manualAuroraeThemePathResolved)
- print('manualAuroraeThemeExtension=' + manualAuroraeThemeExtension)
- }
-
- function addButton(preparedArray, buttonName) {
- if (buttonName === 'close') {
- preparedArray.push({
- iconName: 'close',
- windowOperation: 'close'
- });
- } else if (buttonName === 'maximize' && showMaximize) {
- preparedArray.push({
- iconName: 'maximize',
- windowOperation: 'toggleMaximized'
- });
- } else if (buttonName === 'minimize' && showMinimize) {
- preparedArray.push({
- iconName: 'minimize',
- windowOperation: 'toggleMinimized'
- });
- } else if ((buttonName === 'pin' || buttonName === 'alldesktops') && showPinToAllDesktops) {
- preparedArray.push({
- iconName: 'alldesktops',
- windowOperation: 'togglePinToAllDesktops'
- });
- }
- }
-
- function initializeControlButtonsModel() {
-
- var preparedArray = []
- buttonOrder.split('|').forEach(function (buttonName) {
- addButton(preparedArray, buttonName);
- });
-
- controlButtonsModel.clear()
-
- preparedArray.forEach(function (item) {
- print('adding item to buttons: ' + item.iconName);
- controlButtonsModel.append(item);
- });
- }
-
- function performActiveWindowAction(windowOperation) {
- if (bp === 4) {
- return;
- }
- if (windowOperation === 'close') {
- toggleClose()
- } else if (windowOperation === 'toggleMaximized') {
- toggleMaximized()
- } else if (windowOperation === 'toggleMinimized') {
- toggleMinimized()
- } else if (windowOperation === 'togglePinToAllDesktops') {
- togglePinToAllDesktops()
- }
- }
-
function action_close() {
toggleClose()
}
function action_maximise() {
toggleMaximized()
}
function action_minimise() {
toggleMinimized()
}
function action_pinToAllDesktops() {
togglePinToAllDesktops()
}
function action_reloadTheme() {
plasmoid.nativeInterface.refreshAuroraeTheme();
}
function actionTriggered(actionName) {
if (actionName.indexOf("switchToActivity_") == 0) {
var activityIndex = actionName.replace("switchToActivity_", "")
var activityId = activityInfo.runningActivities()[activityIndex]
activityModel.setCurrentActivity(activityId, function() {});
}
}
function reAddActivityActions() {
plasmoid.removeAction("separator1")
for (var i = 0; i < activityActionCount; i++) {
plasmoid.removeAction('switchToActivity_' + i)
}
plasmoid.removeAction("separator2")
var runningActivities = activityInfo.runningActivities()
activityActionCount = runningActivities.length
if (activityActionCount === 0) {
return
}
plasmoid.setActionSeparator("separator1")
activityInfo.runningActivities().forEach(function (activityId, index) {
if (activityId === activityInfo.currentActivity) {
return;
}
var activityName = activityInfo.activityName(activityId)
plasmoid.setAction('switchToActivity_' + index, i18n('Switch to activity: %1', activityName), 'preferences-activities')
})
plasmoid.setActionSeparator("separator2")
}
property string controlPartOrder: plasmoid.configuration.controlPartOrder
onControlPartOrderChanged: refreshControlPartOrder()
function refreshControlPartOrder() {
itemPartOrder.length = 0
plasmoid.configuration.controlPartOrder.split('|').forEach(function (itemName, index) {
print('itemOrder: ' + itemName)
itemPartOrder.push(itemName)
print('itemZ: ' + index)
getItem(itemName).z = index
});
print('itemPartOrder initialized: ' + itemPartOrder)
refreshItemPosition()
}
Component.onCompleted: {
refreshControlPartOrder()
refreshItemPosition()
- initializeControlButtonsModel()
updateActiveWindowInfo()
+ // actions
plasmoid.setAction('close', i18n('Close'), 'window-close');
plasmoid.setAction('maximise', i18n('Toggle Maximise'), 'arrow-up-double');
plasmoid.setAction('minimise', i18n('Minimise'), 'draw-arrow-down');
plasmoid.setAction('pinToAllDesktops', i18n('Toggle Pin To All Desktops'), 'window-pin');
plasmoid.setActionSeparator("separator0")
plasmoid.setAction('reloadTheme', i18n('Reload Theme'), 'system-reboot');
reAddActivityActions()
}
- onShowMaximizeChanged: initializeControlButtonsModel()
- onShowMinimizeChanged: initializeControlButtonsModel()
- onShowPinToAllDesktopsChanged: initializeControlButtonsModel()
- onBpChanged: initializeControlButtonsModel()
- onButtonOrderChanged: initializeControlButtonsModel()
-
PlasmaCore.DataSource {
id: shortcutDS
engine: 'executable'
property string presentWindows: 'qdbus org.kde.kglobalaccel /component/kwin invokeShortcut "Expose"'
property string presentWindowsAll: 'qdbus org.kde.kglobalaccel /component/kwin invokeShortcut "ExposeAll"'
property string presentWindowsClass: 'qdbus org.kde.kglobalaccel /component/kwin invokeShortcut "ExposeClass"'
connectedSources: []
onNewData: {
connectedSources.length = 0
}
}
}