You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
258 lines
10 KiB
258 lines
10 KiB
/* |
|
SPDX-FileCopyrightText: 2013 Marco Martin <mart@kde.org> |
|
SPDX-FileCopyrightText: 2014 Kai Uwe Broulik <kde@privat.broulik.de> |
|
SPDX-FileCopyrightText: 2019 David Redondo <kde@david-redondo.de> |
|
|
|
SPDX-License-Identifier: GPL-2.0-or-later |
|
*/ |
|
|
|
import QtQuick 2.15 |
|
import QtQuick.Controls 2.15 as QQC2 |
|
import QtQuick.Layouts 1.15 |
|
|
|
import org.kde.newstuff 1.91 as NewStuff |
|
import org.kde.kcm 1.5 as KCM |
|
import org.kde.kirigami 2.12 as Kirigami |
|
import org.kde.plasma.wallpapers.image 2.0 as PlasmaWallpaper |
|
|
|
ColumnLayout { |
|
id: slideshowComponent |
|
|
|
property int hoursIntervalValue: Math.floor(cfg_SlideInterval / 3600) |
|
property int minutesIntervalValue: Math.floor(cfg_SlideInterval % 3600) / 60 |
|
property int secondsIntervalValue: cfg_SlideInterval % 3600 % 60 |
|
|
|
property int hoursIntervalValueDefault: Math.floor(cfg_SlideIntervalDefault / 3600) |
|
property int minutesIntervalValueDefault: Math.floor(cfg_SlideIntervalDefault % 3600) / 60 |
|
property int secondsIntervalValueDefault: cfg_SlideIntervalDefault % 3600 % 60 |
|
|
|
onHoursIntervalValueChanged: hoursInterval.value = hoursIntervalValue |
|
onMinutesIntervalValueChanged: minutesInterval.value = minutesIntervalValue |
|
onSecondsIntervalValueChanged: secondsInterval.value = secondsIntervalValue |
|
|
|
Kirigami.FormLayout { |
|
twinFormLayouts: parentLayout |
|
|
|
RowLayout { |
|
id: slideshowModeRow |
|
Kirigami.FormData.label: i18nd("plasma_wallpaper_org.kde.image", "Order:") |
|
|
|
QQC2.ComboBox { |
|
id: slideshowModeComboBox |
|
|
|
model: [ |
|
{ |
|
'label': i18nd("plasma_wallpaper_org.kde.image", "Random"), |
|
'slideshowMode': PlasmaWallpaper.SortingMode.Random |
|
}, |
|
{ |
|
'label': i18nd("plasma_wallpaper_org.kde.image", "A to Z"), |
|
'slideshowMode': PlasmaWallpaper.SortingMode.Alphabetical |
|
}, |
|
{ |
|
'label': i18nd("plasma_wallpaper_org.kde.image", "Z to A"), |
|
'slideshowMode': PlasmaWallpaper.SortingMode.AlphabeticalReversed |
|
}, |
|
{ |
|
'label': i18nd("plasma_wallpaper_org.kde.image", "Date modified (newest first)"), |
|
'slideshowMode': PlasmaWallpaper.SortingMode.ModifiedReversed |
|
}, |
|
{ |
|
'label': i18nd("plasma_wallpaper_org.kde.image", "Date modified (oldest first)"), |
|
'slideshowMode': PlasmaWallpaper.SortingMode.Modified |
|
} |
|
] |
|
textRole: "label" |
|
onActivated: { |
|
cfg_SlideshowMode = model[currentIndex]["slideshowMode"]; |
|
} |
|
Component.onCompleted: setMethod(); |
|
function setMethod() { |
|
for (var i = 0; i < model.length; i++) { |
|
if (model[i]["slideshowMode"] === wallpaper.configuration.SlideshowMode) { |
|
slideshowModeComboBox.currentIndex = i; |
|
break; |
|
} |
|
} |
|
} |
|
|
|
KCM.SettingHighlighter { |
|
highlight: cfg_SlideshowMode != cfg_SlideshowModeDefault |
|
} |
|
} |
|
|
|
QQC2.CheckBox { |
|
id: slideshowFoldersFirstCheckBox |
|
text: i18nd("plasma_wallpaper_org.kde.image", "Group by folders") |
|
checked: root.cfg_SlideshowFoldersFirst |
|
onToggled: cfg_SlideshowFoldersFirst = slideshowFoldersFirstCheckBox.checked |
|
|
|
KCM.SettingHighlighter { |
|
highlight: root.cfg_SlideshowFoldersFirst !== cfg_SlideshowFoldersFirstDefault |
|
} |
|
} |
|
} |
|
|
|
// FIXME: there should be only one spinbox: QtControls spinboxes are still too limited for it tough |
|
RowLayout { |
|
Kirigami.FormData.label: i18nd("plasma_wallpaper_org.kde.image", "Change every:") |
|
QQC2.SpinBox { |
|
id: hoursInterval |
|
value: slideshowComponent.hoursIntervalValue |
|
from: 0 |
|
to: 24 |
|
editable: true |
|
onValueChanged: cfg_SlideInterval = hoursInterval.value * 3600 + minutesInterval.value * 60 + secondsInterval.value |
|
|
|
textFromValue: function(value, locale) { |
|
return i18ndp("plasma_wallpaper_org.kde.image","%1 hour", "%1 hours", value) |
|
} |
|
valueFromText: function(text, locale) { |
|
return parseInt(text); |
|
} |
|
|
|
KCM.SettingHighlighter { |
|
highlight: slideshowComponent.hoursIntervalValue != slideshowComponent.hoursIntervalValueDefault |
|
} |
|
} |
|
|
|
QQC2.SpinBox { |
|
id: minutesInterval |
|
value: slideshowComponent.minutesIntervalValue |
|
from: 0 |
|
to: 60 |
|
editable: true |
|
onValueChanged: cfg_SlideInterval = hoursInterval.value * 3600 + minutesInterval.value * 60 + secondsInterval.value |
|
|
|
textFromValue: function(value, locale) { |
|
return i18ndp("plasma_wallpaper_org.kde.image","%1 minute", "%1 minutes", value) |
|
} |
|
valueFromText: function(text, locale) { |
|
return parseInt(text); |
|
} |
|
|
|
KCM.SettingHighlighter { |
|
highlight: slideshowComponent.minutesIntervalValue != slideshowComponent.minutesIntervalValueDefault |
|
} |
|
} |
|
|
|
QQC2.SpinBox { |
|
id: secondsInterval |
|
value: slideshowComponent.secondsIntervalValue |
|
from: slideshowComponent.hoursIntervalValue === 0 && slideshowComponent.minutesIntervalValue === 0 ? 1 : 0 |
|
to: 60 |
|
editable: true |
|
onValueChanged: cfg_SlideInterval = hoursInterval.value * 3600 + minutesInterval.value * 60 + secondsInterval.value |
|
|
|
textFromValue: function(value, locale) { |
|
return i18ndp("plasma_wallpaper_org.kde.image","%1 second", "%1 seconds", value) |
|
} |
|
valueFromText: function(text, locale) { |
|
return parseInt(text); |
|
} |
|
|
|
KCM.SettingHighlighter { |
|
highlight: slideshowComponent.secondsIntervalValue != slideshowComponent.secondsIntervalValueDefault |
|
} |
|
} |
|
} |
|
} |
|
|
|
Kirigami.Heading { |
|
text: i18nd("plasma_wallpaper_org.kde.image", "Folders") |
|
level: 2 |
|
} |
|
|
|
GridLayout { |
|
columns: 2 |
|
Layout.fillWidth: true |
|
Layout.fillHeight: true |
|
columnSpacing: Kirigami.Units.largeSpacing |
|
|
|
QQC2.ScrollView { |
|
id: foldersScroll |
|
Layout.fillHeight: true |
|
Layout.preferredWidth: 0.35 * parent.width |
|
Layout.maximumWidth: Kirigami.Units.gridUnit * 16 |
|
Component.onCompleted: foldersScroll.background.visible = true; |
|
ListView { |
|
id: slidePathsView |
|
model: imageWallpaper.slidePaths |
|
delegate: Kirigami.SwipeListItem { |
|
width: slidePathsView.width |
|
// content item includes its own padding |
|
padding: 0 |
|
// Don't need a highlight or hover effects |
|
hoverEnabled: false |
|
contentItem: Kirigami.BasicListItem { |
|
// Don't need a highlight or hover effects |
|
hoverEnabled: false |
|
separatorVisible: false |
|
|
|
// Header: the folder |
|
label: { |
|
var strippedPath = modelData.replace(/\/+$/, ""); |
|
return strippedPath.split('/').pop() |
|
} |
|
// Subtitle: the path to the folder |
|
subtitle: { |
|
var strippedPath = modelData.replace(/\/+$/, ""); |
|
return strippedPath.replace(/\/[^\/]*$/, '');; |
|
} |
|
|
|
QQC2.ToolTip.text: modelData |
|
QQC2.ToolTip.visible: hovered |
|
QQC2.ToolTip.delay: 1000 |
|
QQC2.ToolTip.timeout: 5000 |
|
} |
|
|
|
actions: [ |
|
Kirigami.Action { |
|
iconName: "list-remove" |
|
tooltip: i18nd("plasma_wallpaper_org.kde.image", "Remove Folder") |
|
onTriggered: imageWallpaper.removeSlidePath(modelData) |
|
}, |
|
Kirigami.Action { |
|
icon.name: "document-open-folder" |
|
tooltip: i18nd("plasma_wallpaper_org.kde.image", "Open Folder") |
|
onTriggered: imageWallpaper.openFolder(modelData) |
|
} |
|
] |
|
} |
|
|
|
Kirigami.PlaceholderMessage { |
|
anchors.centerIn: parent |
|
width: parent.width - (Kirigami.Units.largeSpacing * 4) |
|
visible: slidePathsView.count === 0 |
|
text: i18nd("plasma_wallpaper_org.kde.image", "There are no wallpaper locations configured") |
|
} |
|
} |
|
} |
|
|
|
Loader { |
|
source: "ThumbnailsComponent.qml" |
|
Layout.fillWidth: true |
|
Layout.fillHeight: true |
|
anchors.fill: undefined |
|
} |
|
|
|
QQC2.Button { |
|
Layout.alignment: Qt.AlignRight |
|
icon.name: "list-add" |
|
text: i18nd("plasma_wallpaper_org.kde.image","Add Folder…") |
|
onClicked: imageWallpaper.showAddSlidePathsDialog() |
|
} |
|
|
|
NewStuff.Button { |
|
Layout.alignment: Qt.AlignRight |
|
configFile: Kirigami.Settings.isMobile ? "wallpaper-mobile.knsrc" : "wallpaper.knsrc" |
|
text: i18nd("plasma_wallpaper_org.kde.image", "Get New Wallpapers…") |
|
viewMode: NewStuff.Page.ViewMode.Preview |
|
onEntryEvent: function(entry, event) { |
|
if (event == NewStuff.Entry.StatusChangedEvent) { |
|
imageWallpaper.newStuffFinished() |
|
} |
|
} |
|
} |
|
} |
|
}
|
|
|