ui/main.qml
:
import QtQuick 1.0
import org.kde.plasma.core 0.1 as PlasmaCore
import "../code/history.js" as History
/*
* A "rootItem", minden ezen belülre kerül
* Ad egy fekete keretet, átlátszó színnel kitöltve
*/
Rectangle {
color: "#00FFFFFF"
border.width: 1
/*
* Ez egymás mellé rendezi a majdan alá berakott elemeket
* (a fenti kereten belülre került)
*/
Row {
id: cpuBars
// a kereten belülre méretezzük
width: parent.width - 2; height: parent.height
x: 1
/*
* Ez egy virtuális elem, dinamikusan fogjuk hozzáadogatni (példányosítani),
* attól függően hány CPU mag van
*/
Component {
id: cpuBar
/*
* Külső oszlop, ez szemlélteti az utóbbi X minta közül a legmagasabb értéket
*/
Rectangle {
width: parent.width / parent.children.length
// ez egy pici hack: soha nem lehet nulla, másképp "nem tartalmazza" a belső dobozt,
// ami így eggyel balra csúszna
height: 1
// az alsó része rögzített, a felső mozoghat
anchors.bottom: parent.bottom
color: "#D9DA16"
/*
* Belső oszlop, ez szemlélteti a legutolsó minta értéket
* mindig a külső oszlop előtt van, takarja azt
*/
Rectangle {
width: parent.width
anchors.bottom: parent.bottom
color: "red"
}
}
}
}
/*
* Az adatforrásunk, aminek a frissülése mozgatja az oszlopainkat
*/
PlasmaCore.DataSource {
id: datasource
engine: "systemmonitor"
// amint inicializálva lett ez az objektum..
Component.onCompleted: {
// végigmegyünk a már ismert erőforrásokon..
for (i in sources) {
source = sources[i]
// és az érdekeseknél..
if (source.match(/cpu\/cpu[0-9]+\/TotalLoad/)) {
// kérünk értesítést 'onNewData'
connectSource(source)
}
}
}
// ezzel a CPU hotplugot is támogatjuk :)
onSourceAdded: {
if (source.match(/cpu\/cpu[0-9]+\/TotalLoad/))
connectSource(source)
}
// egyébként ugyanezzel az eljárással szinte mindent le tudsz kérni, ami
// létezik a /proc alatt
// frissítési intervallum
interval: 500
onNewData: {
// a value 0-100(%) között lehet, illetve az első mintánál ismeretlen
if ((value = data['value'])) {
match = sourceName.match('^cpu/cpu([0-9]{1,2})/TotalLoad$')
cpunum = parseInt(match[1])
h = value / 100 * cpuBars.height
// ha kevesebb oszlop van mint CPU: adjunk hozzá
for (; cpuBars.children.length < cpunum + 1;)
cpuBar.createObject(cpuBars)
History.addH(cpunum, h)
/*
* és itt a lelke az egésznek, itt kapcsolódik a nézet a kóddal:
*/
// a külső oszlop magasságát hangoljuk a legmagasabb ismert CPU terheltséghez
cpuBars.children[cpunum].height = Math.max(1, History.maxH(cpunum))
// a belső oszlop magasságát hangoljuk az aktuális CPU terheltséghez
cpuBars.children[cpunum].children[0].height = h
}
}
../code/history.js
:
/*
* Ez jegyzi meg a magok utolsó mintáit
* (a QML-en belül erre nincs lehetőség, de szebb is így, kiemelve)
*/
var lastheights = []
function getH(cpu) {
return lastheights[cpu]
}
function maxH(cpu) {
return Math.max.apply(null, lastheights[cpu])
}
function addH(cpu, value) {
if (!lastheights[cpu])
lastheights[cpu] = []
// csak az utolsó 6 mintára emlékszünk
if (lastheights[cpu].push(value) > 6)
lastheights[cpu].shift()
}
Telepíthető Plasmoid így lehet belőle.
Először Ruby-ban írtam meg, de sajnos folyamatosan elcrash-elt miatta a panel és egyébként is 6% körüli CPU-t evett. Átírtam Javascriptre, ami már beérte 1% körüli CPU-val és tökéletesen működött, de kíváncsi lettem, hogy QML-ben hogy nézne ki. Szerintem a QML elegáns és gyors. Megszerettem.
UPDATE:
ulysses linkjén lévő Conky óra megtetszett, azon felbuzdulva én is összedobtam a QML verzióm:
(A felső Conky, az alsó saját)
Csúnyább, persze, de egyelőre nem is cicomázom, mert a hátteret szeretném eltüntetni először, de azt csak a Plasma 4.10 tudja majd.
QML: http://paste.kde.org/659144/ (96 sor)
- dap blogja
- A hozzászóláshoz be kell jelentkezni
- 1245 megtekintés
Hozzászólások
Vegre egy hasznos post! Koszonjuk.
- A hozzászóláshoz be kell jelentkezni
Kapcsolódó bejegyzés a Conky használatáról KDE-n és egy hozzászólás Aaron Seigotól.
- A hozzászóláshoz be kell jelentkezni
Uh. Legalább 1-2 órát elcsesztem azzal anno, hogy működő megoldást találjak és nem sikerült. Egyébként teljesen egyetértek Aaronnal: a Conky hackolása helyett QML-ezzünk! Fun.
Amit sajnálok, hogy az http://opendesktop.org/ (aka http://kde-look.org/) elég elhanyagolt. Túl sok reklám, túl idejemúlt design és spammolják mint állat. Sok kis hasznos widget kallódhat még a világban.
Azt meg nem lesz könnyű megszokni, hogy ne KDE-zzen az ember, hanem Plazmázzon. :)
- A hozzászóláshoz be kell jelentkezni
No még egy link, amit most találtam: http://hashpling.wordpress.com/2013/02/03/a-minimal-clock-plasmoid/
- A hozzászóláshoz be kell jelentkezni