Einbinden von dynamischen Daten

Plasma trennt Darstellungen und Daten/Inhalte streng voneinander. Die Applets übernehmen die Darstellung, ihre Daten beziehen sie aus einer der bestehenden DataEngines [1].

Mehrere Plasmoiden können sich eine DataEngine teilen, die Plasma bei Bedarf lädt. Benötigt kein Plasmoid mehr den Datenmotor, entlädt Plasma ihn wieder, so dass er keine Ressourcen konsumiert. Dies alles regelt Plasma selbständig, als Entwickler müssen Sie sich nicht darum kümmern.

Ein Motor ist die Hotplug-DataEngine. Sie gibt ein Signal, wenn Sie ein neues Gerät mit dem Computer verbinden. Für "Dr. Ade" soll sie einen eingesteckten USB-Stick erkennen. Dazu verbinden Sie das Signal sourceAdded(const QString&) der DataEngine mit dem Slot onSourceAdded(const QString&) (Listing 4, Zeile 2). In Zeile 3 gibt hotplug ein Signal, sobald Sie das Gerät wieder entfernen.

// drade.cpp, Zeilen 83 und 84
connect(dataEngine("hotplug"), SIGNAL(sourceAdded(const QString&)), this, SLOT(onSourceAdded(const QString&)));
connect(dataEngine("hotplug"), SIGNAL(sourceRemoved(const QString&)), this, SLOT(onSourceRemoved(const QString&)));

Als Ergebnis liefern die Signal/Slot-Konstruktionen eine QString-Variable in den Methoden onSourceAdded() sowie onSourceRemoved() zurück. Die erste Methode benutzen Sie, um mit Hilfe von Solid – der Hardwarebibliothek von KDE 4 – herauszufinden, um was für ein Gerät es sich handelt (Listing 5). Im Beispiel soll der Produktname genügen (Solid::Device(name);, Zeile 6). Die Daten, die Solid liefert, zeichnet die Methode paintInferface() dann in das Plasmoid (Zeilen 222 bis 243 in drade.cpp).

// drade.cpp, Zeilen 124 bis 131
void DrAde::onSourceAdded(const QString &name)
{
    m_isPlugged = true;
    showScreen(true);
    Solid::Device m_device = Solid::Device(name);
    kDebug() << "Solid: vendor, product, icon" << m_device.vendor() << m_device.product() << m_device.icon();
    m_volumeName = m_device.product();
}

Die Funktion showScreen() startet die Animation der SVG-Grafik – dazu später mehr. Sie benutzen zunächst den Parameter &name, um über Solid ein neues Gerät anzumelden (Solid::Device), das Sie dann der Member-Variable m_device übergeben, auf die auch die paintInterface()- Funktion zugreifen kann.

Konfiguration und Einstellungen

Sie können Applets auch mit Konfigurationsdialogen ausstatten. Die Dialoge erstellen Sie recht einfach mit dem Qt-Designer. Das Beispiel zeigt, wie Sie eine Checkbox, eine Spinbox und ein Slider-Element einsetzen. Die Userinterface-Datei (.ui) koppelt dabei Slider und Spinbox aneinander, indem sie die Signale valueChanged() und die Slots setValue() der jeweiligen Elemente verbindet.

Abbildung 4: Im Qt-Designer entwerfen Sie die grafische Oberfläche für das Konfigurationsmenü des Plasmoids.

Den Konfigurationsdialog binden Sie in drei Schritten ein (Listing 6): Die Methode init() liest die gespeicherten Einstellungen aus einem KConfigGroup-Objekt, das Plasma über eine Funktion in der Applet-Klasse zur Verfügung stellt (config()). Dann liest das Programm über cg.readEntry die Werte der Schlüssel animate und animDuration aus. Der zweite Parameter in der Klammer (Zeilen 3 und 4) diktiert jeweils die Voreinstellung.

// drade.cpp, Zeilen 70 bis 72
KConfigGroup cg = config();
m_animDuration = cg.readEntry("animDuration", 200);
m_animate = cg.readEntry("animate", true);

Über die Member-Variablen m_animate und m_animDuration bestimmen Sie, ob Sie das Applet animieren wollen und wie lange die Animation dauert.

In der Methode createConfigurationInterface() (Listing 7) erstellen Sie den Konfigurationsdialog. Plasma führt die Methode aus, sobald der Benutzer den Konfigurationsdialog öffnet. Sie lädt das Interface der UI-Datei und ergänzt Knöpfe wie OK, Anwenden und Abbrechen automatisch.

In den Zeilen 7 und 8 übergeben Sie der Methode die Werte, die Sie vorher aus dem KConfig-Objekt ausgelesen haben. Schließen Sie den Konfigurationsdialog, muss das Applet davon erfahren. Dazu verbinden Sie die Signale applyClicked() und okClicked() mit dem Slot configAccepted() – einer Methode des Applets (Zeilen 10 und 11). Abschließend ergänzen Sie das Widget in Zeile 12 um den Konfigurationsdialog, wobei ein Pointer zum Einsatz kommt.

// drade.cpp, Zeilen 141 bis 159
void DrAde::createConfigurationInterface(KConfigDialog *parent)
{
    QWidget *widget = new QWidget;
    ui.setupUi(widget);
    parent->setButtons( KDialog::Ok | KDialog::Cancel | KDialog::Apply );
    ui.speedSlider->setValue(m_animDuration);
    ui.speedSpin->setValue(m_animDuration);
[…]
    connect( m_dialog, SIGNAL(applyClicked()), this, SLOT(configAccepted()) );
    connect( m_dialog, SIGNAL(okClicked()), this, SLOT(configAccepted()) );
    parent->addPage(widget, parent->windowTitle(), "drade");
}

Die Methode configureAccepted() (Listing 8) gibt ein Signal, sobald der Anwender im Konfigurationsbereich die Buttons OK oder Anwenden drückt. Die Methode gleicht die Daten des Applets mit jenen des Benutzers ab und schreibt sie meist auch direkt in die Konfiguration. Zum Speichern dient hier KConfig, KDEs Konfigurationssystem, das auch dafür sorgt, dass Sie die Daten einfach wieder auslesen können. Da KConfig viele Qt-Typen unterstützt, brauchen Sie sich kaum Gedanken über das Format zu machen, oder wie Sie verschiedene Datentypen speichern und einlesen. Es genügt, abstrakte Daten – wie zum Beispiel eine QColor-Farbe – in einen Konfigurationseintrag zu schreiben und sie später wieder auszulesen.

In der Methode von Listing 8 lesen Sie die Werte aus dem UI-Objekt. Dann schreiben Sie sie in die Konfigurationsdatei sowie in die Member-Variable, um bei Bedarf einfach auf die Daten zuzugreifen. Da sich möglicherweise interne Daten geändert haben, erneuern Sie die Verbindung mit der DataEngine (update()).

// drade.cpp, Zeilen 161 bis 172
void DrAde::configAccepted()
{
    m_animDuration = ui.speedSlider->value();
    m_animate = ui.Animate->isChecked();
    config().writeEntry("animate", m_animate);
    config().writeEntry("animDuration", m_animDuration);
    update();
    emit configNeedsSaving();
}

Indem Sie update() aufrufen, malt Plasma das Applet neu. Zugleich geben Sie auf diese Weise an, dass sich die Konfiguration geändert hat. Plasma kümmert sich in der Folge darum, dass die Konfigurationsdaten "in Kürze" auf der Festplatte landen. Es speichert die Daten nicht direkt: Bringen bestimmte Einstellungen den KDE-4-Desktop zum Absturz, soll er bei einem Neustart nicht gleich wieder den Geist aufgeben. Zugleich bündeln Sie durch die Verzögerung die Schreibzugriffe auf die Festplatte, was Energie spart.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • Erste Plasma-Widgets bereits auf Maemo 5 portiert
    Am Maemo-Summit in Amsterdam verteilte Nokia 300 Internettablets N900 an KDE- und Qt-Entwickler. Jetzt gibt es bereits erste Ports von KDE-Programmen für Maemo 5.
  • Plasmoiden erstellen mit JavaScript
    Seit Version 4.4 bietet die KDE Software Compilation die Möglichkeit, Plasmoiden in JavaScript oder QtScript zu schreiben. Dadurch eröffnet sich die Welt der KDE-Widgets auch Nicht-Programmierern.
  • KDE 4.11 erhält verbesserten Task-Manager
    Eike Hein hat in einem Blog-Beitrag einen Ausblick auf die überarbeitete Fensterleiste im kommenden KDE 4.11 gegeben. Verbesserungen gab es vor allem beim Layout und der Anordnung der Einträge auf der Leiste.
  • KDE-Miniprogramme mit Plasmate programmieren
    Das KDE-Projekt hat eine erste Alphaversion von Plasmate veröffentlicht. Die kleine Entwicklungsumgebung ist zum Schreiben der Plasmoide genannten Applets für den KDE-4-Desktop gedacht.
  • Plasmische Chirurgie
    KDE 4 definiert den Desktop um. Was aber steckt hinter Plasma und was sind Plasmoiden? KDE-Entwickler Sebastian Kügler erklärt das neue Desktop-Design.
Kommentare

Infos zur Publikation

LU 11/2014: VIDEOS BEARBEITEN

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

Artikelsuche
Erwin Ruitenberg, 09.10.2014 07:51, 1 Antworten
Ich habe seit einige Jahre ein Dugisub LinuxUser. Dann weiß ich das irgendwann ein bestimmtes Art...
Windows 8 startet nur mit externer Festplatte
Anne La, 10.09.2014 17:25, 6 Antworten
Hallo Leute, also, ich bin auf folgendes Problem gestoßen: Ich habe Ubuntu 14.04 auf meiner...
Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...
Server antwortet mit falschem Namen
oin notna, 21.07.2014 19:13, 1 Antworten
Hallo liebe Community, Ich habe mit Apache einen Server aufgesetzt. Soweit, so gut. Im Heimnet...