SlideShare ist ein Scribd-Unternehmen logo
1 von 20
Downloaden Sie, um offline zu lesen
Plasma Widgets di KDE
Pietro Lerro <lerro@StartupSolutions.it>
Pietro Lerro <lerro@StartupSolutions.it>
Cos'è “Plasma” ?
KDE 3
Kicker
Kdesktop
SuperKaramba
KDE 4
Pietro Lerro <lerro@StartupSolutions.it>
Cos'è “Plasma” ?
KDE lanciò Plasma nel 2005 con lo scopo di “rivitalizzare”
l'interfaccia desktop (è “essenzialmente la stessa” dal 1984)
L'iniziativa cercava di rinnovare le fondamenta del desktop di
KDE in previsione del rilascio di KDE 4 portando un
cambiamento “radicale” nell'interfaccia tradizionalista del KDE 3.
Gli obiettivi chiave includevano l'unificazione di tre elementi
fondamentali nel KDE: Kicker desktop panel, Kdesktop root
window e SuperKaramba widget manager
in un'unica interfaccia “Plasma”.
Ne uscì fuori un framework che rendeva i widget molto semplici
da scrivere e che assicurava una consistenza visuale e di
accessibilità.
Pietro Lerro <lerro@StartupSolutions.it>
Cos'è “Plasma” ?
• Panel, “Desktop”, Menu, Application Launcher
• Piattaforma di sviluppo Open Source “High-Level”
• Window Manager con supporto
Compositing (effetti grafici desktop)
• Basato sulle Qt e su KDE
• Concepito con fondamenti di bellezza & usabilità
Pietro Lerro <lerro@StartupSolutions.it>
In evidenza
• Accelerazione Hardware attraverso Qt
• I Widgets si possono scrivere in C++ o con linguaggi di
scripting (JavaScript, HTML/CSS, Python, Ruby, …)
• Target primario: mobile devices
(small footprint, modularity, touchscreen, …)
*le stesse Qt sono sviluppate da Nokia*
Pietro Lerro <lerro@StartupSolutions.it>
Plasmoids Plasma's Widgets–
• “Plasma” è la superficie su cui “poggiano” i widget
• Si posizionano su un “Panel” o sul desktop
o su entrambi
• Si possono liberamente animare, ridimensionare,
spostare, ruotare …
• Condivisi online tramite apposita piattaforma
• “Ereditano” comportamenti e impostazioni di
visualizzazione dal tema del KDE attuale
Pietro Lerro <lerro@StartupSolutions.it>
• “Desktop” widgets:
➢ Application launcher menu, taskbar,
desktop pager, ...
• System widgets:
➢ Device notifier, power, network, notifications ...
• “Online” widgets:
➢ RSS reader, widget meteo, dizionario,
twitter, ...
Esempi
Pietro Lerro <lerro@StartupSolutions.it>
• ~100 Plasma widgets 'nativi'
• Sono inoltre supportati:
➢ Tutti i Google Gadgets
➢ Tutto il contenuto Edje (E17)
➢ Molti Widget della DashBoard di MacOS X
Esempi
Pietro Lerro <lerro@StartupSolutions.it>
• Intercambialità assicurata:
I Widgets scritti per un form factor (es. desktop)
possono essere riutilizzati altrove (es. MID)
poichè variano a runtime.
• I Widgets ed il loro contenuto può essere
pacchettizzato e condiviso in rete.
In pratica ...
In pratica ...
Pietro Lerro <lerro@StartupSolutions.it>
Pietro Lerro <lerro@StartupSolutions.it>
Pratica (quella seria)
Ma come si fanno i widget ??
Come si crea un Widget (in C++)
I widget sono costituiti da almeno 4 file
✔ .desktop (informazioni)
✔ header
✔ implementazione
✔ CMakeLists.txt
Pietro Lerro <lerro@StartupSolutions.it>
Come si crea un Widget (in C++)
Pietro Lerro <lerro@StartupSolutions.it>
.desktop File
Pietro Lerro <lerro@StartupSolutions.it>
Ogni Plasmoide necessita di un file .desktop per comunicare al sistema come
dovrà essere gestito e quali sono le sue informazioni di base.
Il nostro file sarà: plasma-applet-test.desktop
[Desktop Entry]
Name=Widget Widgettoso
Comment=Esempio di widget
Type=Service
ServiceTypes=Plasma/Applet
X-KDE-Library=plasma_applet_test
X-KDE-PluginInfo-Author=Pietro Lerro
X-KDE-PluginInfo-Email=lerro@startupsolutions.it
X-KDE-PluginInfo-Name=firsttest
X-KDE-PluginInfo-Version=0.1
X-KDE-PluginInfo-Website=http://www.startupsolutions.it/
X-KDE-PluginInfo-Category=Examples
X-KDE-PluginInfo-Depends=
X-KDE-PluginInfo-License=GPL
X-KDE-PluginInfo-EnabledByDefault=true
Come si crea un Widget (in C++)
Pietro Lerro <lerro@StartupSolutions.it>
.desktop File
Pietro Lerro <lerro@StartupSolutions.it>
Ogni Plasmoide necessita di un file .desktop per comunicare al suo contenitore
come dovrà essere gestito e quali sono le sue informazioni di base.
Il nostro file sarà: plasma-applet-test.desktop
[Desktop Entry]
Name=Widget Widgettoso
Comment=Esempio di widget
Type=Service
ServiceTypes=Plasma/Applet
X-KDE-Library=plasma_applet_test
X-KDE-PluginInfo-Author=Pietro Lerro
X-KDE-PluginInfo-Email=lerro@startupsolutions.it
X-KDE-PluginInfo-Name=firsttest
X-KDE-PluginInfo-Version=0.1
X-KDE-PluginInfo-Website=http://www.startupsolutions.it/
X-KDE-PluginInfo-Category=Examples
X-KDE-PluginInfo-Depends=
X-KDE-PluginInfo-License=GPL
X-KDE-PluginInfo-EnabledByDefault=true
Le informazioni chiave sono
X-KDE-Library e X-KDE-PluginInfo-Name,
esse rappresentano la “colla”
che unisce la nostra classe
con Plasma, senza queste,
non partirebbe nulla.
Il nostro file sarà: plasma-applet-test.desktop
[Desktop Entry]
Name=Widget Widgettoso
Comment=Esempio di widget
Type=Service
ServiceTypes=Plasma/Applet
X-KDE-Library=plasma_applet_test
X-KDE-PluginInfo-Author=Pietro Lerro
X-KDE-PluginInfo-Email=lerro@startupsolutions.it
X-KDE-PluginInfo-Name=firsttest
X-KDE-PluginInfo-Version=0.1
X-KDE-PluginInfo-Website=http://www.startupsolutions.it/
X-KDE-PluginInfo-Category=Examples
X-KDE-PluginInfo-Depends=
X-KDE-PluginInfo-License=GPL
X-KDE-PluginInfo-EnabledByDefault=true
Come si crea un Widget (in C++)
Pietro Lerro <lerro@StartupSolutions.it>
.desktop File
Pietro Lerro <lerro@StartupSolutions.it>
Ogni Plasmoide necessita di un file .desktop per comunicare al suo contenitore
come dovrà essere gestito e quali sono le sue informazioni di base.
X-KDE-PluginInfo-Category,
è molto importante per la distribuzione dell'applet
Avere una categoria di appartenenza.
Attualmente ci sono categorie predefinite, nel caso
la nostra applet non ricadesse in una di quelle
basta lasciar vuota questa property in modo che
il sistema la assegni alla categoria “Miscellaneous”
PIG
Plugin Info cateGory
http://techbase.kde.org/Projects/Plasma/PIG
Come si crea un Widget (in C++)
// Here we avoid loading the header multiple times
#ifndef Tutorial1_HEADER
#define Tutorial1_HEADER
// We need the Plasma Applet headers
#include <KIcon>
#include <Plasma/Applet>
#include <Plasma/Svg>
class QSizeF;
// Define our plasma Applet
class PlasmaTutorial1 : public Plasma::Applet
{
Q_OBJECT
public:
// Basic Create/Destroy
PlasmaTutorial1(QObject *parent, const QVariantList &args);
~PlasmaTutorial1();
// The paintInterface procedure paints the applet to screen
void paintInterface(QPainter *p,
const QStyleOptionGraphicsItem *option,
const QRect& contentsRect);
void init();
private:
Plasma::Svg m_svg;
KIcon m_icon;
};
#endif
Pietro Lerro <lerro@StartupSolutions.it>
header file
- Struttura base -
✔ Costruttore / Distruttore
✔ Init
✔ PaintInterface
Come si crea un Widget (in C++)
#include "plasma-tutorial1.h"
#include <QPainter>
#include <QFontMetrics>
#include <QSizeF>
#include <plasma/svg.h>
#include <plasma/theme.h>
PlasmaTutorial1::PlasmaTutorial1(QObject *parent, const QVariantList &args)
: Plasma::Applet(parent, args),
m_svg(this),
m_icon("document")
{
m_svg.setImagePath("widgets/background");
// this will get us the standard applet background, for free!
setBackgroundHints(DefaultBackground);
resize(200, 200);
}
PlasmaTutorial1::~PlasmaTutorial1()
{
if (hasFailedToLaunch()) {
// Do some cleanup here
} else {
// Save settings
}
}
Pietro Lerro <lerro@StartupSolutions.it>
implementazione (1/2)
Nel costruttore instanzieremo tutte
le risorse necessarie
Grazie al metodo hasFailedToLaunch()
potremo sapere se l'applet
è stata chiusa dall'utente o
ha avuto problemi nel caricamento
Come si crea un Widget (in
C++)
void PlasmaTutorial1::init()
{
// A small demonstration of the setFailedToLaunch function
if (m_icon.isNull()) {
setFailedToLaunch(true, "No world to say hello");
}
}
void PlasmaTutorial1::paintInterface(QPainter *p,
const QStyleOptionGraphicsItem *option, const QRect &contentsRect)
{
p->setRenderHint(QPainter::SmoothPixmapTransform);
p->setRenderHint(QPainter::Antialiasing);
// Now we draw the applet, starting with our svg
m_svg.resize((int)contentsRect.width(), (int)contentsRect.height());
m_svg.paint(p, (int)contentsRect.left(), (int)contentsRect.top());
// We place the icon and text
p->drawPixmap(7, 0, m_icon.pixmap((int)contentsRect.width(),
(int)contentsRect.width()-14));
p->save();
p->setPen(Qt::white);
p->drawText(contentsRect,
Qt::AlignBottom | Qt::AlignHCenter,
"Hello Plasmoid!");
p->restore();
}
// This is the command that links your applet to the .desktop file
K_EXPORT_PLASMA_APPLET(tutorial1, PlasmaTutorial1)
#include "plasma-tutorial1.moc"
Pietro Lerro <lerro@StartupSolutions.it>
implementazione (2/2)
K_EXPORT_PLASMA_APPLET(<nome>,<classe>)
Serve a collegare la nostra applet
al file .desktop
Come si crea un Widget (in C++)
CMakeLists.txt
# Project Needs a name ofcourse
project(plasma-tutorial1)
# Find the required Libaries
find_package(KDE4 REQUIRED)
include(KDE4Defaults)
add_definitions (${QT_DEFINITIONS} ${KDE4_DEFINITIONS})
include_directories(
${CMAKE_SOURCE_DIR}
${CMAKE_BINARY_DIR}
${KDE4_INCLUDES}
)
# We add our source code here
set(tutorial1_SRCS plasma-tutorial1.cpp)
# Now make sure all files get to the right place
kde4_add_plugin(plasma_applet_tutorial1 ${tutorial1_SRCS})
target_link_libraries(plasma_applet_tutorial1
${KDE4_PLASMA_LIBS} ${KDE4_KDEUI_LIBS})
install(TARGETS plasma_applet_tutorial1
DESTINATION ${PLUGIN_INSTALL_DIR})
install(FILES plasma-applet-tutorial1.desktop
DESTINATION ${SERVICES_INSTALL_DIR})
Pietro Lerro <lerro@StartupSolutions.it>
compilazione && installazione
Mettiamo insieme il tutto specificando
nel file CMakeLists.txt
le definizioni per la creazione del
Makefile
Grazie al makefile generato
potremo compilare la nostra applet
digitando nella shell il comando
'make'
L'installazione può essere
eseguita in automatico
digitando 'make install' da root *
* N.B. I percorsi specificati nel 'make install' possono variare a seconda della distribuzione usata
Pietro Lerro <lerro@StartupSolutions.it>
Migliori widget
Acquarium Make progress ShortLog

Weitere ähnliche Inhalte

Was ist angesagt?

Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018Marco Chiesi
 
Chakra_recensione
Chakra_recensioneChakra_recensione
Chakra_recensioneandreazube
 
Introduzione a Sass e Less (ITA)
Introduzione a Sass e Less (ITA)Introduzione a Sass e Less (ITA)
Introduzione a Sass e Less (ITA)Valerio Radice
 
Pacchi e pacchetti
Pacchi e pacchettiPacchi e pacchetti
Pacchi e pacchettigiallu
 
Avete avuto l'idea per il nuovo Flappy Birds? - Anelli
Avete avuto l'idea per il nuovo Flappy Birds? - AnelliAvete avuto l'idea per il nuovo Flappy Birds? - Anelli
Avete avuto l'idea per il nuovo Flappy Birds? - AnelliCodemotion
 

Was ist angesagt? (9)

Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
 
Apache Maven
Apache MavenApache Maven
Apache Maven
 
TYPO3 CMS 8.1 - Le novità
TYPO3 CMS 8.1 - Le novitàTYPO3 CMS 8.1 - Le novità
TYPO3 CMS 8.1 - Le novità
 
Chakra_recensione
Chakra_recensioneChakra_recensione
Chakra_recensione
 
Introduzione a Sass e Less (ITA)
Introduzione a Sass e Less (ITA)Introduzione a Sass e Less (ITA)
Introduzione a Sass e Less (ITA)
 
Pacchi e pacchetti
Pacchi e pacchettiPacchi e pacchetti
Pacchi e pacchetti
 
Sinfonia in Domino RE - Integrazione Symphony e Lotus Notes 8.x
Sinfonia in Domino RE - Integrazione Symphony e Lotus Notes 8.xSinfonia in Domino RE - Integrazione Symphony e Lotus Notes 8.x
Sinfonia in Domino RE - Integrazione Symphony e Lotus Notes 8.x
 
XPages Tips & Tricks, #dd13
XPages Tips & Tricks, #dd13XPages Tips & Tricks, #dd13
XPages Tips & Tricks, #dd13
 
Avete avuto l'idea per il nuovo Flappy Birds? - Anelli
Avete avuto l'idea per il nuovo Flappy Birds? - AnelliAvete avuto l'idea per il nuovo Flappy Birds? - Anelli
Avete avuto l'idea per il nuovo Flappy Birds? - Anelli
 

Andere mochten auch

I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014
I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014
I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014Giorgio Cefaro
 
Sviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con JavaSviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con JavaMarcello Teodori
 
Java ME per palmari e PDA
Java ME per palmari e PDAJava ME per palmari e PDA
Java ME per palmari e PDAStefano Sanna
 
Android App Development - Unimore
Android App Development - UnimoreAndroid App Development - Unimore
Android App Development - UnimoreNicola Corti
 
Android App Development, Creare la nostra prima app
Android App Development, Creare la nostra prima appAndroid App Development, Creare la nostra prima app
Android App Development, Creare la nostra prima appNicola Corti
 

Andere mochten auch (9)

Golang + AngulaJS on GCP
Golang + AngulaJS on GCPGolang + AngulaJS on GCP
Golang + AngulaJS on GCP
 
Go on AppEngine
Go on AppEngineGo on AppEngine
Go on AppEngine
 
I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014
I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014
I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014
 
Golang Introduzione
Golang IntroduzioneGolang Introduzione
Golang Introduzione
 
Sviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con JavaSviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con Java
 
Corso UML
Corso UMLCorso UML
Corso UML
 
Java ME per palmari e PDA
Java ME per palmari e PDAJava ME per palmari e PDA
Java ME per palmari e PDA
 
Android App Development - Unimore
Android App Development - UnimoreAndroid App Development - Unimore
Android App Development - Unimore
 
Android App Development, Creare la nostra prima app
Android App Development, Creare la nostra prima appAndroid App Development, Creare la nostra prima app
Android App Development, Creare la nostra prima app
 

Ähnlich wie KDE Plasma widgets

Qt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immaginiQt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immaginiPaolo Sereno
 
Javaday 2006: Java 5
Javaday 2006: Java 5Javaday 2006: Java 5
Javaday 2006: Java 5Matteo Baccan
 
Utilizzare Windows Vista come Software Developer
Utilizzare Windows Vista come Software DeveloperUtilizzare Windows Vista come Software Developer
Utilizzare Windows Vista come Software DeveloperStefano Ottaviani
 
Dominare il codice legacy
Dominare il codice legacyDominare il codice legacy
Dominare il codice legacyTommaso Torti
 
Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker dotnetcode
 
ASP.NET Core 2 e Docker
ASP.NET Core 2 e DockerASP.NET Core 2 e Docker
ASP.NET Core 2 e DockerLuca Congiu
 
JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)jampslide
 
Introduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIntroduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIvan Gualandri
 
01 Android - Introduction
01   Android - Introduction01   Android - Introduction
01 Android - Introductionspawn150
 

Ähnlich wie KDE Plasma widgets (20)

Qt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immaginiQt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immagini
 
Unattended
UnattendedUnattended
Unattended
 
3DD 1e Reconfig
3DD 1e Reconfig3DD 1e Reconfig
3DD 1e Reconfig
 
Ddive Xpage852
Ddive Xpage852Ddive Xpage852
Ddive Xpage852
 
Javaday 2006: Java 5
Javaday 2006: Java 5Javaday 2006: Java 5
Javaday 2006: Java 5
 
Grasso Frameworks Ajax
Grasso Frameworks AjaxGrasso Frameworks Ajax
Grasso Frameworks Ajax
 
Utilizzare Windows Vista come Software Developer
Utilizzare Windows Vista come Software DeveloperUtilizzare Windows Vista come Software Developer
Utilizzare Windows Vista come Software Developer
 
TuxIsAlive
TuxIsAliveTuxIsAlive
TuxIsAlive
 
Openmoko
OpenmokoOpenmoko
Openmoko
 
Conferenza Pymaemo
Conferenza PymaemoConferenza Pymaemo
Conferenza Pymaemo
 
Quickr In Real Life - casi di successo di QuickR
 Quickr In Real Life - casi di successo di QuickR Quickr In Real Life - casi di successo di QuickR
Quickr In Real Life - casi di successo di QuickR
 
Dominare il codice legacy
Dominare il codice legacyDominare il codice legacy
Dominare il codice legacy
 
ASP.NET Core essentials
ASP.NET Core essentialsASP.NET Core essentials
ASP.NET Core essentials
 
Sametime 8.x configurarlo ed installarlo
Sametime 8.x configurarlo ed installarloSametime 8.x configurarlo ed installarlo
Sametime 8.x configurarlo ed installarlo
 
#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2
 
Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker
 
ASP.NET Core 2 e Docker
ASP.NET Core 2 e DockerASP.NET Core 2 e Docker
ASP.NET Core 2 e Docker
 
JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)
 
Introduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIntroduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulug
 
01 Android - Introduction
01   Android - Introduction01   Android - Introduction
01 Android - Introduction
 

KDE Plasma widgets

  • 1. Plasma Widgets di KDE Pietro Lerro <lerro@StartupSolutions.it>
  • 2. Pietro Lerro <lerro@StartupSolutions.it> Cos'è “Plasma” ? KDE 3 Kicker Kdesktop SuperKaramba KDE 4
  • 3. Pietro Lerro <lerro@StartupSolutions.it> Cos'è “Plasma” ? KDE lanciò Plasma nel 2005 con lo scopo di “rivitalizzare” l'interfaccia desktop (è “essenzialmente la stessa” dal 1984) L'iniziativa cercava di rinnovare le fondamenta del desktop di KDE in previsione del rilascio di KDE 4 portando un cambiamento “radicale” nell'interfaccia tradizionalista del KDE 3. Gli obiettivi chiave includevano l'unificazione di tre elementi fondamentali nel KDE: Kicker desktop panel, Kdesktop root window e SuperKaramba widget manager in un'unica interfaccia “Plasma”. Ne uscì fuori un framework che rendeva i widget molto semplici da scrivere e che assicurava una consistenza visuale e di accessibilità.
  • 4. Pietro Lerro <lerro@StartupSolutions.it> Cos'è “Plasma” ? • Panel, “Desktop”, Menu, Application Launcher • Piattaforma di sviluppo Open Source “High-Level” • Window Manager con supporto Compositing (effetti grafici desktop) • Basato sulle Qt e su KDE • Concepito con fondamenti di bellezza & usabilità
  • 5. Pietro Lerro <lerro@StartupSolutions.it> In evidenza • Accelerazione Hardware attraverso Qt • I Widgets si possono scrivere in C++ o con linguaggi di scripting (JavaScript, HTML/CSS, Python, Ruby, …) • Target primario: mobile devices (small footprint, modularity, touchscreen, …) *le stesse Qt sono sviluppate da Nokia*
  • 6. Pietro Lerro <lerro@StartupSolutions.it> Plasmoids Plasma's Widgets– • “Plasma” è la superficie su cui “poggiano” i widget • Si posizionano su un “Panel” o sul desktop o su entrambi • Si possono liberamente animare, ridimensionare, spostare, ruotare … • Condivisi online tramite apposita piattaforma • “Ereditano” comportamenti e impostazioni di visualizzazione dal tema del KDE attuale
  • 7. Pietro Lerro <lerro@StartupSolutions.it> • “Desktop” widgets: ➢ Application launcher menu, taskbar, desktop pager, ... • System widgets: ➢ Device notifier, power, network, notifications ... • “Online” widgets: ➢ RSS reader, widget meteo, dizionario, twitter, ... Esempi
  • 8. Pietro Lerro <lerro@StartupSolutions.it> • ~100 Plasma widgets 'nativi' • Sono inoltre supportati: ➢ Tutti i Google Gadgets ➢ Tutto il contenuto Edje (E17) ➢ Molti Widget della DashBoard di MacOS X Esempi
  • 9. Pietro Lerro <lerro@StartupSolutions.it> • Intercambialità assicurata: I Widgets scritti per un form factor (es. desktop) possono essere riutilizzati altrove (es. MID) poichè variano a runtime. • I Widgets ed il loro contenuto può essere pacchettizzato e condiviso in rete. In pratica ...
  • 10. In pratica ... Pietro Lerro <lerro@StartupSolutions.it>
  • 11. Pietro Lerro <lerro@StartupSolutions.it> Pratica (quella seria) Ma come si fanno i widget ??
  • 12. Come si crea un Widget (in C++) I widget sono costituiti da almeno 4 file ✔ .desktop (informazioni) ✔ header ✔ implementazione ✔ CMakeLists.txt Pietro Lerro <lerro@StartupSolutions.it>
  • 13. Come si crea un Widget (in C++) Pietro Lerro <lerro@StartupSolutions.it> .desktop File Pietro Lerro <lerro@StartupSolutions.it> Ogni Plasmoide necessita di un file .desktop per comunicare al sistema come dovrà essere gestito e quali sono le sue informazioni di base. Il nostro file sarà: plasma-applet-test.desktop [Desktop Entry] Name=Widget Widgettoso Comment=Esempio di widget Type=Service ServiceTypes=Plasma/Applet X-KDE-Library=plasma_applet_test X-KDE-PluginInfo-Author=Pietro Lerro X-KDE-PluginInfo-Email=lerro@startupsolutions.it X-KDE-PluginInfo-Name=firsttest X-KDE-PluginInfo-Version=0.1 X-KDE-PluginInfo-Website=http://www.startupsolutions.it/ X-KDE-PluginInfo-Category=Examples X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-EnabledByDefault=true
  • 14. Come si crea un Widget (in C++) Pietro Lerro <lerro@StartupSolutions.it> .desktop File Pietro Lerro <lerro@StartupSolutions.it> Ogni Plasmoide necessita di un file .desktop per comunicare al suo contenitore come dovrà essere gestito e quali sono le sue informazioni di base. Il nostro file sarà: plasma-applet-test.desktop [Desktop Entry] Name=Widget Widgettoso Comment=Esempio di widget Type=Service ServiceTypes=Plasma/Applet X-KDE-Library=plasma_applet_test X-KDE-PluginInfo-Author=Pietro Lerro X-KDE-PluginInfo-Email=lerro@startupsolutions.it X-KDE-PluginInfo-Name=firsttest X-KDE-PluginInfo-Version=0.1 X-KDE-PluginInfo-Website=http://www.startupsolutions.it/ X-KDE-PluginInfo-Category=Examples X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-EnabledByDefault=true Le informazioni chiave sono X-KDE-Library e X-KDE-PluginInfo-Name, esse rappresentano la “colla” che unisce la nostra classe con Plasma, senza queste, non partirebbe nulla.
  • 15. Il nostro file sarà: plasma-applet-test.desktop [Desktop Entry] Name=Widget Widgettoso Comment=Esempio di widget Type=Service ServiceTypes=Plasma/Applet X-KDE-Library=plasma_applet_test X-KDE-PluginInfo-Author=Pietro Lerro X-KDE-PluginInfo-Email=lerro@startupsolutions.it X-KDE-PluginInfo-Name=firsttest X-KDE-PluginInfo-Version=0.1 X-KDE-PluginInfo-Website=http://www.startupsolutions.it/ X-KDE-PluginInfo-Category=Examples X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-EnabledByDefault=true Come si crea un Widget (in C++) Pietro Lerro <lerro@StartupSolutions.it> .desktop File Pietro Lerro <lerro@StartupSolutions.it> Ogni Plasmoide necessita di un file .desktop per comunicare al suo contenitore come dovrà essere gestito e quali sono le sue informazioni di base. X-KDE-PluginInfo-Category, è molto importante per la distribuzione dell'applet Avere una categoria di appartenenza. Attualmente ci sono categorie predefinite, nel caso la nostra applet non ricadesse in una di quelle basta lasciar vuota questa property in modo che il sistema la assegni alla categoria “Miscellaneous” PIG Plugin Info cateGory http://techbase.kde.org/Projects/Plasma/PIG
  • 16. Come si crea un Widget (in C++) // Here we avoid loading the header multiple times #ifndef Tutorial1_HEADER #define Tutorial1_HEADER // We need the Plasma Applet headers #include <KIcon> #include <Plasma/Applet> #include <Plasma/Svg> class QSizeF; // Define our plasma Applet class PlasmaTutorial1 : public Plasma::Applet { Q_OBJECT public: // Basic Create/Destroy PlasmaTutorial1(QObject *parent, const QVariantList &args); ~PlasmaTutorial1(); // The paintInterface procedure paints the applet to screen void paintInterface(QPainter *p, const QStyleOptionGraphicsItem *option, const QRect& contentsRect); void init(); private: Plasma::Svg m_svg; KIcon m_icon; }; #endif Pietro Lerro <lerro@StartupSolutions.it> header file - Struttura base - ✔ Costruttore / Distruttore ✔ Init ✔ PaintInterface
  • 17. Come si crea un Widget (in C++) #include "plasma-tutorial1.h" #include <QPainter> #include <QFontMetrics> #include <QSizeF> #include <plasma/svg.h> #include <plasma/theme.h> PlasmaTutorial1::PlasmaTutorial1(QObject *parent, const QVariantList &args) : Plasma::Applet(parent, args), m_svg(this), m_icon("document") { m_svg.setImagePath("widgets/background"); // this will get us the standard applet background, for free! setBackgroundHints(DefaultBackground); resize(200, 200); } PlasmaTutorial1::~PlasmaTutorial1() { if (hasFailedToLaunch()) { // Do some cleanup here } else { // Save settings } } Pietro Lerro <lerro@StartupSolutions.it> implementazione (1/2) Nel costruttore instanzieremo tutte le risorse necessarie Grazie al metodo hasFailedToLaunch() potremo sapere se l'applet è stata chiusa dall'utente o ha avuto problemi nel caricamento
  • 18. Come si crea un Widget (in C++) void PlasmaTutorial1::init() { // A small demonstration of the setFailedToLaunch function if (m_icon.isNull()) { setFailedToLaunch(true, "No world to say hello"); } } void PlasmaTutorial1::paintInterface(QPainter *p, const QStyleOptionGraphicsItem *option, const QRect &contentsRect) { p->setRenderHint(QPainter::SmoothPixmapTransform); p->setRenderHint(QPainter::Antialiasing); // Now we draw the applet, starting with our svg m_svg.resize((int)contentsRect.width(), (int)contentsRect.height()); m_svg.paint(p, (int)contentsRect.left(), (int)contentsRect.top()); // We place the icon and text p->drawPixmap(7, 0, m_icon.pixmap((int)contentsRect.width(), (int)contentsRect.width()-14)); p->save(); p->setPen(Qt::white); p->drawText(contentsRect, Qt::AlignBottom | Qt::AlignHCenter, "Hello Plasmoid!"); p->restore(); } // This is the command that links your applet to the .desktop file K_EXPORT_PLASMA_APPLET(tutorial1, PlasmaTutorial1) #include "plasma-tutorial1.moc" Pietro Lerro <lerro@StartupSolutions.it> implementazione (2/2) K_EXPORT_PLASMA_APPLET(<nome>,<classe>) Serve a collegare la nostra applet al file .desktop
  • 19. Come si crea un Widget (in C++) CMakeLists.txt # Project Needs a name ofcourse project(plasma-tutorial1) # Find the required Libaries find_package(KDE4 REQUIRED) include(KDE4Defaults) add_definitions (${QT_DEFINITIONS} ${KDE4_DEFINITIONS}) include_directories( ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${KDE4_INCLUDES} ) # We add our source code here set(tutorial1_SRCS plasma-tutorial1.cpp) # Now make sure all files get to the right place kde4_add_plugin(plasma_applet_tutorial1 ${tutorial1_SRCS}) target_link_libraries(plasma_applet_tutorial1 ${KDE4_PLASMA_LIBS} ${KDE4_KDEUI_LIBS}) install(TARGETS plasma_applet_tutorial1 DESTINATION ${PLUGIN_INSTALL_DIR}) install(FILES plasma-applet-tutorial1.desktop DESTINATION ${SERVICES_INSTALL_DIR}) Pietro Lerro <lerro@StartupSolutions.it> compilazione && installazione Mettiamo insieme il tutto specificando nel file CMakeLists.txt le definizioni per la creazione del Makefile Grazie al makefile generato potremo compilare la nostra applet digitando nella shell il comando 'make' L'installazione può essere eseguita in automatico digitando 'make install' da root * * N.B. I percorsi specificati nel 'make install' possono variare a seconda della distribuzione usata
  • 20. Pietro Lerro <lerro@StartupSolutions.it> Migliori widget Acquarium Make progress ShortLog