Warning, /plasma/plasma-workspace/wallpapers/image/imagepackage/contents/ui/config.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2013 Marco Martin <mart@kde.org> 0003 SPDX-FileCopyrightText: 2014 Kai Uwe Broulik <kde@privat.broulik.de> 0004 SPDX-FileCopyrightText: 2019 David Redondo <kde@david-redondo.de> 0005 0006 SPDX-License-Identifier: GPL-2.0-or-later 0007 */ 0008 0009 import QtQuick 0010 import QtQuick.Controls as QtControls2 0011 import QtQuick.Layouts 0012 import org.kde.plasma.wallpapers.image as PlasmaWallpaper 0013 import org.kde.kquickcontrols as KQuickControls 0014 import org.kde.kquickcontrolsaddons 0015 import org.kde.newstuff as NewStuff 0016 import org.kde.kcmutils as KCM 0017 import org.kde.kirigami as Kirigami 0018 0019 /** 0020 * For proper alignment, an ancestor **MUST** have id "appearanceRoot" and property "parentLayout" 0021 */ 0022 ColumnLayout { 0023 id: root 0024 0025 property var configDialog 0026 property var wallpaperConfiguration: wallpaper.configuration 0027 property var parentLayout 0028 property var screen : Screen 0029 property var screenSize: !!screen.geometry ? Qt.size(screen.geometry.width, screen.geometry.height): Qt.size(screen.width, screen.height) 0030 0031 property alias cfg_Color: colorButton.color 0032 property color cfg_ColorDefault 0033 property string cfg_Image 0034 property string cfg_ImageDefault 0035 property int cfg_FillMode 0036 property int cfg_FillModeDefault 0037 property int cfg_SlideshowMode 0038 property int cfg_SlideshowModeDefault 0039 property bool cfg_SlideshowFoldersFirst 0040 property bool cfg_SlideshowFoldersFirstDefault: false 0041 property alias cfg_Blur: blurRadioButton.checked 0042 property bool cfg_BlurDefault 0043 property var cfg_SlidePaths: [] 0044 property var cfg_SlidePathsDefault: [] 0045 property int cfg_SlideInterval: 0 0046 property int cfg_SlideIntervalDefault: 0 0047 property var cfg_UncheckedSlides: [] 0048 property var cfg_UncheckedSlidesDefault: [] 0049 0050 signal configurationChanged() 0051 /** 0052 * Emitted when the user finishes adding images using the file dialog. 0053 */ 0054 signal wallpaperBrowseCompleted(); 0055 0056 onScreenChanged: function() { 0057 if (thumbnailsLoader.item) { 0058 thumbnailsLoader.item.screenSize = !!root.screen.geometry ? Qt.size(root.screen.geometry.width, root.screen.geometry.height): Qt.size(root.screen.width, root.screen.height); 0059 } 0060 } 0061 0062 function saveConfig() { 0063 if (configDialog.currentWallpaper === "org.kde.image") { 0064 imageWallpaper.wallpaperModel.commitAddition(); 0065 imageWallpaper.wallpaperModel.commitDeletion(); 0066 } 0067 } 0068 0069 function openChooserDialog() { 0070 const dialogComponent = Qt.createComponent("AddFileDialog.qml"); 0071 dialogComponent.createObject(root); 0072 dialogComponent.destroy(); 0073 } 0074 0075 PlasmaWallpaper.ImageBackend { 0076 id: imageWallpaper 0077 renderingMode: (configDialog.currentWallpaper === "org.kde.image") ? PlasmaWallpaper.ImageBackend.SingleImage : PlasmaWallpaper.ImageBackend.SlideShow 0078 targetSize: { 0079 // Lock screen configuration case 0080 return Qt.size(root.screenSize.width * root.screen.devicePixelRatio, root.screenSize.height * root.screen.devicePixelRatio) 0081 } 0082 onSlidePathsChanged: cfg_SlidePaths = slidePaths 0083 onUncheckedSlidesChanged: cfg_UncheckedSlides = uncheckedSlides 0084 onSlideshowModeChanged: cfg_SlideshowMode = slideshowMode 0085 onSlideshowFoldersFirstChanged: cfg_SlideshowFoldersFirst = slideshowFoldersFirst 0086 0087 onSettingsChanged: root.configurationChanged() 0088 } 0089 0090 onCfg_FillModeChanged: { 0091 resizeComboBox.setMethod() 0092 } 0093 0094 onCfg_SlidePathsChanged: { 0095 if (cfg_SlidePaths) 0096 imageWallpaper.slidePaths = cfg_SlidePaths 0097 } 0098 onCfg_UncheckedSlidesChanged: { 0099 if (cfg_UncheckedSlides) 0100 imageWallpaper.uncheckedSlides = cfg_UncheckedSlides 0101 } 0102 0103 onCfg_SlideshowModeChanged: { 0104 if (cfg_SlideshowMode) 0105 imageWallpaper.slideshowMode = cfg_SlideshowMode 0106 } 0107 0108 onCfg_SlideshowFoldersFirstChanged: { 0109 if (cfg_SlideshowFoldersFirst) 0110 imageWallpaper.slideshowFoldersFirst = cfg_SlideshowFoldersFirst 0111 } 0112 0113 //Rectangle { color: "orange"; x: formAlignment; width: formAlignment; height: 20 } 0114 0115 Kirigami.FormLayout { 0116 id: formLayout 0117 0118 Component.onCompleted: function() { 0119 if (typeof appearanceRoot !== "undefined") { 0120 twinFormLayouts.push(appearanceRoot.parentLayout); 0121 } 0122 } 0123 0124 QtControls2.ComboBox { 0125 id: resizeComboBox 0126 Kirigami.FormData.label: i18nd("plasma_wallpaper_org.kde.image", "Positioning:") 0127 model: [ 0128 { 0129 'label': i18nd("plasma_wallpaper_org.kde.image", "Scaled and Cropped"), 0130 'fillMode': Image.PreserveAspectCrop 0131 }, 0132 { 0133 'label': i18nd("plasma_wallpaper_org.kde.image", "Scaled"), 0134 'fillMode': Image.Stretch 0135 }, 0136 { 0137 'label': i18nd("plasma_wallpaper_org.kde.image", "Scaled, Keep Proportions"), 0138 'fillMode': Image.PreserveAspectFit 0139 }, 0140 { 0141 'label': i18nd("plasma_wallpaper_org.kde.image", "Centered"), 0142 'fillMode': Image.Pad 0143 }, 0144 { 0145 'label': i18nd("plasma_wallpaper_org.kde.image", "Tiled"), 0146 'fillMode': Image.Tile 0147 } 0148 ] 0149 0150 textRole: "label" 0151 onActivated: cfg_FillMode = model[currentIndex]["fillMode"] 0152 Component.onCompleted: setMethod(); 0153 0154 KCM.SettingHighlighter { 0155 highlight: cfg_FillModeDefault != cfg_FillMode 0156 } 0157 0158 function setMethod() { 0159 for (var i = 0; i < model.length; i++) { 0160 if (model[i]["fillMode"] === root.cfg_FillMode) { 0161 resizeComboBox.currentIndex = i; 0162 break; 0163 } 0164 } 0165 } 0166 } 0167 0168 QtControls2.ButtonGroup { id: backgroundGroup } 0169 0170 QtControls2.RadioButton { 0171 id: blurRadioButton 0172 visible: cfg_FillMode === Image.PreserveAspectFit || cfg_FillMode === Image.Pad 0173 Kirigami.FormData.label: i18nd("plasma_wallpaper_org.kde.image", "Background:") 0174 text: i18nd("plasma_wallpaper_org.kde.image", "Blur") 0175 QtControls2.ButtonGroup.group: backgroundGroup 0176 } 0177 0178 RowLayout { 0179 id: colorRow 0180 visible: cfg_FillMode === Image.PreserveAspectFit || cfg_FillMode === Image.Pad 0181 QtControls2.RadioButton { 0182 id: colorRadioButton 0183 text: i18nd("plasma_wallpaper_org.kde.image", "Solid color") 0184 checked: !cfg_Blur 0185 QtControls2.ButtonGroup.group: backgroundGroup 0186 0187 KCM.SettingHighlighter { 0188 highlight: cfg_Blur != cfg_BlurDefault 0189 } 0190 } 0191 KQuickControls.ColorButton { 0192 id: colorButton 0193 color: cfg_Color 0194 dialogTitle: i18nd("plasma_wallpaper_org.kde.image", "Select Background Color") 0195 0196 KCM.SettingHighlighter { 0197 highlight: cfg_Color != cfg_ColorDefault 0198 } 0199 } 0200 } 0201 } 0202 0203 DropArea { 0204 Layout.fillWidth: true 0205 Layout.fillHeight: true 0206 0207 onEntered: drag => { 0208 if (drag.hasUrls) { 0209 drag.accept(); 0210 } 0211 } 0212 onDropped: drop => { 0213 drop.urls.forEach(function (url) { 0214 if (configDialog.currentWallpaper === "org.kde.image") { 0215 imageWallpaper.addUsersWallpaper(url); 0216 } else { 0217 imageWallpaper.addSlidePath(url); 0218 } 0219 }); 0220 // Scroll to top to view added images 0221 if (configDialog.currentWallpaper === "org.kde.image") { 0222 thumbnailsLoader.item.view.positionViewAtIndex(0, GridView.Beginning); 0223 } 0224 } 0225 0226 Loader { 0227 id: thumbnailsLoader 0228 anchors.fill: parent 0229 0230 function loadWallpaper () { 0231 let source = (configDialog.currentWallpaper == "org.kde.image") ? "ThumbnailsComponent.qml" : 0232 ((configDialog.currentWallpaper == "org.kde.slideshow") ? "SlideshowComponent.qml" : ""); 0233 0234 let props = {screenSize: screenSize}; 0235 0236 if (configDialog.currentWallpaper == "org.kde.slideshow") { 0237 props["configuration"] = wallpaperConfiguration; 0238 } 0239 thumbnailsLoader.setSource(source, props); 0240 } 0241 } 0242 0243 Connections { 0244 target: configDialog 0245 function onCurrentWallpaperChanged() { 0246 thumbnailsLoader.loadWallpaper(); 0247 } 0248 } 0249 0250 Component.onCompleted: () => { 0251 thumbnailsLoader.loadWallpaper(); 0252 } 0253 0254 } 0255 0256 Component.onDestruction: { 0257 if (wallpaperConfiguration) 0258 wallpaperConfiguration.PreviewImage = "null"; 0259 } 0260 }