Hi, I'm not sure I follow exactly what you are trying to do but the following code works with Plasma 6:
https://invent.kde.org/education/marble/-/blob/master/src/plasma/wallpapers/worldmap/contents/ui/main.qml?ref_type=heads Cheers, Carl On Fri, May 23, 2025, at 10:02 AM, Piotr Frankowski wrote: > Hello, > Long time has passed, I have found some free time, and with little help > of LLM I have managed to reproduce your work, modify the script(?), and > it works. I have enabled stars, but I cannot force clouds display - I > think problem is inside of Marble. I have found, that in the script > there is marbleItem which is > https://api.kde.org/marble/html/MarbleQuickItem_8h_source.html - and it > has less properties than MarbleMap. In my setup there is a problem with > getting location - geolocation is returning access denied or something. > My KDE is 5.27, I'm just curious if this script will work on new KDE. > This is my sript: > > ``` > /* > * Copyright 2018 Friedrich W. H. Kossebau <kosse...@kde.org> > * > * This program is free software; you can redistribute it and/or > * modify it under the terms of the GNU Lesser General Public > * License as published by the Free Software Foundation; either > * version 2.1 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 > * Lesser General Public License for more details. > * > * You should have received a copy of the GNU Lesser General Public > * License along with this program. If not, see > <http://www.gnu.org/licenses/>. > */ > > import QtQuick 2.1 > > import org.kde.plasma.core 2.0 as PlasmaCore > import org.kde.plasma.extras 2.0 as PlasmaExtras > > import org.kde.marble.private.plasma 0.20 > > MarbleItem { > id: marbleItem > // https://api.kde.org/marble/html/MarbleQuickItem_8h_source.html > // available properties > > readonly property int centerMode: wallpaper.configuration.centerMode > property double fixedLongitude: wallpaper.configuration.fixedLongitude > property double fixedLatitude: wallpaper.configuration.fixedLatitude > property double locationLongitude: 0.0 > property double locationLatitude: 0.0 > > enabled: false // do not handle input > > radius: { > var ratio = width/height; > if (ratio > 1) { > return height / 2.5; > } > return width / 2.5 > } > > // Theme settings. > projection: MarbleItem.Spherical > mapThemeId: "earth/bluemarble/bluemarble.dgml" > > // Visibility of layers/plugins. > showAtmosphere: true > showClouds: true > showBackground: true > > showGrid: false > showCrosshairs: false > showCompass: false > showOverviewMap: false > showScaleBar: false > showOtherPlaces: false > showPublicTransport: false > showOutdoorActivities: false > > > onCenterModeChanged: handleCenterModeChange() > function handleCenterModeChange() { > if (centerMode === 0) { > marbleItem.centerOn(locationLongitude, locationLatitude); > } else if (centerMode === 1) { > marbleItem.centerOn(fixedLongitude, fixedLatitude); > } else { > marbleItem.centerOn(locationLongitude, locationLatitude); > } > } > > onFixedLongitudeChanged: handleFixedLonLatChange() > onFixedLatitudeChanged: handleFixedLonLatChange() > function handleFixedLonLatChange() { > if (centerMode === 1) { > marbleItem.centerOn(fixedLongitude, fixedLatitude); > } > } > > onLocationLongitudeChanged:handleLocationChange() > onLocationLatitudeChanged:handleLocationChange() > function handleLocationChange() { > if (centerMode === 2) { > marbleItem.centerOn(locationLongitude, locationLatitude); > } > } > > Component.onCompleted: { > > // marbleItem.setShowPlaces(false); > // marbleItem.setShowCities(false); > marbleItem.setShowOtherPlaces(showOtherPlaces); > marbleItem.setShowBackground(showBackground); > > handleCenterModeChange(); > } > > PlasmaCore.DataSource { > id: geolocationDataSource > engine: "geolocation" > connectedSources: (marbleItem.centerMode === 2) ? ["location"] > : [] > interval: 10 * 60 * 1000 // every 30 minutes, might be still > too large for users on the ISS :P > } > > Timer { > id: sunPositionTimer > interval: 60000 // Update every minute > running: marbleItem.centerMode === 0 // Only when following sun > repeat: true > triggeredOnStart: true > > onTriggered: { > var sunPos = calculateSunPosition(); > marbleItem.locationLongitude = sunPos.longitude; > marbleItem.locationLatitude = sunPos.latitude; > handleCenterModeChange(); > } > } > > // Function to calculate sun's position > function calculateSunPosition() { > var now = new Date(); > var dayOfYear = getDayOfYear(now); > var timeOfDay = now.getUTCHours() + now.getUTCMinutes() / 60.0; > > // Solar declination (simplified) > var declination = -23.45 * Math.cos(2 * Math.PI * (dayOfYear + > 10) / 365.25); > > // Hour angle - sun's longitude changes 15 degrees per hour > var hourAngle = 15 * (timeOfDay - 12); // 0° at solar noon (12:00 UTC) > > // Sun's subsolar point > var longitude = hourAngle; > var latitude = declination; > > // Normalize longitude to [-180, 180] > while (longitude > 180) longitude -= 360; > while (longitude < -180) longitude += 360; > > // debug > //console.log("[earthglobe]]: ", longitude); > //console.log("[earthglobe]]: ", latitude); > > return { > longitude: -longitude, > latitude: -latitude > }; > } > > function getDayOfYear(date) { > var start = new Date(date.getFullYear(), 0, 0); > var diff = date - start; > return Math.floor(diff / (1000 * 60 * 60 * 24)); > } > } > ``` > > image.png > > > pt., 12 cze 2020 o 21:26 Piotr Frankowski > <frankowski.piot...@gmail.com> napisał(a): >> Thanks - good starting point for me. Your email is like 5 hours of >> mentoring;) have a nice weekend >> >> pt., 12 cze 2020 o 01:10 Friedrich W. H. Kossebau <kosse...@kde.org> >> napisał(a): >>> Hi Piotr, >>> >>> Am Donnerstag, 11. Juni 2020, 20:49:57 CEST schrieb Piotr Frankowski: >>> > Hello, >>> > >>> > First of all,thanks for such great piece of software, which I am using for >>> > 15 years. I would like to make small contribution - but I need little >>> > help, >>> > a kind of mentoring or a plan and help at begin. I would like rewrite KDE4 >>> > app - plasma-wallpaper-globe, to KDE5 using QML. I think it is possible to >>> > do - I am thinking, that I should create plasma-wallpaper plugin, which >>> > uses Marbles Maps API. >>> >>> ((quick reminder to speak with same terms: post-KDE4 there is no KDE5, >>> things >>> got split in cross-platform apps (for platforms like Plasma, Gnome, >>> $OTHERLINUXSHELL, Windows, macOS, Android. HaikuOS, etc.), modular reusable >>> Qt >>> extensions (KDE Frameworks) and the actual workspace (Plasma).)) >>> >>> When it comes to the Globe plasma wallpaper, there actually has been a >>> working >>> patch. I know because I did it :) Though just for coding fun, did not plan >>> to >>> use it, so it died as review request because no-one pushed and no-one >>> pulled. >>> It is up for adaption here, might still apply: >>> https://phabricator.kde.org/D11969 >>> >>> > First questions: >>> > - is there template for plasma-wallpaper-plugin? >>> >>> Yes, the blog post you linked below is referencing one, and it does still >>> exist. >>> >>> > - is there tutorial for writing plasma-plugins? >>> >>> Sadly Plasma developers are lacking here and need support. People learning >>> are >>> some of the best people to write documentation/tutorials while they lean, >>> because they see all the problems and can mention them, so consider picking >>> up >>> that as side-task. >>> >>> > - I have found some linke, are they actual: >>> > https://frinring.wordpress.com/2018/04/04/templates-to-create-your-own-plasm >>> > a-wallpaper-plugin/ >>> >>> Should still apply (I just fixed some links now given you mentioned it and >>> I >>> found they were broken). Not tested though, but I would hope Plasma >>> developers >>> kept compatibility during Plasma 5 times ;) >>> >>> > - I should learn QML and C++, right? >>> >>> Yes. If you are completely new, best first walk yourself through all the Qt >>> tutorials to get some first sense about things before you enter the >>> partially >>> rough world of developing for Plasma. >>> See https://doc.qt.io/qt-5/qtexamplesandtutorials.html and make yourself >>> familiar with Qt and QtQuick/Qml. And try to find some local people to talk >>> and learn together in real life, that also helps (it did for me when I >>> started). >>> >>> Sorry, not available myself for mentoring. >>> >>> Cheers >>> Friedrich >>> >>> >> >> >> -- >> Pozdrawiam >> pf > > > -- > Pozdrawiam > pf