awesome-widgets/sources/desktop-panel/package/contents/ui/main.qml
2023-05-16 18:09:02 +03:00

206 lines
7.6 KiB
QML

/***************************************************************************
* This file is part of awesome-widgets *
* *
* awesome-widgets 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 3 of the *
* License, or (at your option) any later version. *
* *
* awesome-widgets 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 awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/
import QtQuick 2.4
import QtQuick.Controls 1.3 as QtControls
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
import org.kde.plasma.private.desktoppanel 1.0
import "."
Item {
id: main
property bool debug: dpAdds.isDebugEnabled()
property variant tooltipSettings: {
"tooltipColor": plasmoid.configuration.tooltipColor,
"tooltipType": plasmoid.configuration.tooltipType,
"tooltipWidth": plasmoid.configuration.tooltipWidth
}
signal needUpdate()
signal needTooltipUpdate()
signal sizeUpdate()
// init
Plasmoid.preferredRepresentation: Plasmoid.fullRepresentation
Plasmoid.compactRepresentation: Plasmoid.fullRepresentation
Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter
Plasmoid.icon: "utilities-system-monitor"
Plasmoid.backgroundHints: plasmoid.configuration.background ? "DefaultBackground" : "NoBackground"
onNeedUpdate: {
if (debug)
console.debug();
for (var i = 0; i < repeater.count; i++) {
if (!repeater.itemAt(i)) {
if (debug)
console.info("Nothing to do here yet", i);
timer.start();
return ;
}
repeater.itemAt(i).text = dpAdds.parsePattern(plasmoid.configuration.text, i);
if (dpAdds.currentDesktop() === i) {
repeater.itemAt(i).color = plasmoid.configuration.currentFontColor;
repeater.itemAt(i).font.family = plasmoid.configuration.currentFontFamily;
repeater.itemAt(i).font.italic = plasmoid.configuration.currentFontStyle === "italic";
repeater.itemAt(i).font.pointSize = plasmoid.configuration.currentFontSize;
repeater.itemAt(i).font.weight = General.fontWeight[plasmoid.configuration.currentFontWeight];
repeater.itemAt(i).style = General.textStyle[plasmoid.configuration.currentTextStyle];
repeater.itemAt(i).styleColor = plasmoid.configuration.currentTextStyleColor;
} else {
repeater.itemAt(i).color = plasmoid.configuration.fontColor;
repeater.itemAt(i).font.family = plasmoid.configuration.fontFamily;
repeater.itemAt(i).font.italic = plasmoid.configuration.fontStyle === "italic";
repeater.itemAt(i).font.pointSize = plasmoid.configuration.fontSize;
repeater.itemAt(i).font.weight = General.fontWeight[plasmoid.configuration.fontWeight];
repeater.itemAt(i).style = General.textStyle[plasmoid.configuration.textStyle];
repeater.itemAt(i).styleColor = plasmoid.configuration.textStyleColor;
}
repeater.itemAt(i).update();
}
sizeUpdate();
needTooltipUpdate();
}
onNeedTooltipUpdate: {
if (debug)
console.debug();
for (var i = 0; i < repeater.count; i++) {
repeater.itemAt(i).tooltip.text = dpAdds.toolTipImage(i);
// resize text tooltip to content size
// this hack does not work for images-based tooltips
if (tooltipSettings.tooltipType === "names") {
repeater.itemAt(i).tooltip.height = repeater.itemAt(i).tooltip.implicitHeight;
repeater.itemAt(i).tooltip.width = repeater.itemAt(i).tooltip.implicitWidth;
}
}
}
onSizeUpdate: {
if (debug)
console.debug();
if (plasmoid.configuration.height === 0) {
var newHeight = 0;
for (var i = 0; i < repeater.count; i++) newHeight += repeater.itemAt(i).contentHeight
Layout.minimumHeight = newHeight;
Layout.maximumHeight = -1;
} else {
Layout.minimumHeight = plasmoid.configuration.height;
Layout.maximumHeight = plasmoid.configuration.height;
}
if (plasmoid.configuration.width === 0) {
var newWidth = 0;
for (var i = 0; i < repeater.count; i++) newWidth += repeater.itemAt(i).contentWidth
Layout.minimumWidth = newWidth;
Layout.maximumWidth = -1;
} else {
Layout.minimumWidth = plasmoid.configuration.width;
Layout.maximumWidth = plasmoid.configuration.width;
}
}
Plasmoid.onUserConfiguringChanged: {
if (plasmoid.userConfiguring)
return ;
if (debug)
console.debug();
dpAdds.setMark(plasmoid.configuration.mark);
dpAdds.setToolTipData(tooltipSettings);
needUpdate();
}
Component.onCompleted: {
if (debug)
console.debug();
// init submodule
Plasmoid.userConfiguringChanged(false);
dpAdds.desktopChanged.connect(needUpdate);
dpAdds.windowListChanged.connect(needTooltipUpdate);
}
// backend
DPAdds {
id: dpAdds
}
// ui
GridLayout {
anchors.fill: parent
columns: plasmoid.configuration.verticalLayout ? 1 : dpAdds.numberOfDesktops()
rows: plasmoid.configuration.verticalLayout ? dpAdds.numberOfDesktops() : 1
Repeater {
id: repeater
Layout.columnSpan: 0
Layout.rowSpan: 0
model: dpAdds.numberOfDesktops()
Text {
id: text
property alias tooltip: tooltip
height: contentHeight
width: contentWidth
renderType: Text.NativeRendering
textFormat: Text.RichText
wrapMode: Text.NoWrap
verticalAlignment: Text.AlignVCenter
text: dpAdds.parsePattern(plasmoid.configuration.text, index)
MouseArea {
hoverEnabled: true
anchors.fill: parent
onClicked: dpAdds.setCurrentDesktop(index)
onEntered: needTooltipUpdate()
}
PlasmaCore.ToolTipArea {
height: tooltip.height
width: tooltip.width
mainItem: Text {
id: tooltip
height: contentHeight
width: contentWidth
textFormat: Text.RichText
}
}
}
}
}
Timer {
id: timer
interval: 1000
onTriggered: needUpdate()
}
}