Académique Documents
Professionnel Documents
Culture Documents
wxWidgets
1 / 33
Licenza dutilizzo
c 2007, Davide CD-RON Rondini.
Copyright
Questo documento viene rilasciato secondo i termini della licenza Creative Commons
(http://creativecommons.org).
Lutente libero di:
distribuire, comunicare al pubblico, rappresentare o esporre in pubblico la
presente opera
alle seguenti condizioni:
Attribuzione Deve riconoscere la paternit dellopera allautore originario.
Non commerciale Non pu utilizzare questopera per scopi commerciali.
No opere derivate Non pu alterare, trasformare o sviluppare questopera.
In occasione di ogni atto di riutilizzazione o distribuzione, deve chiarire agli altri i termini della
licenza di questopera.
Se ottiene il permesso dal titolare del diritto dautore, possibile rinunciare a ciascuna di queste
condizioni. Le utilizzazioni libere e gli altri diritti non sono in nessun modo limitati da quanto
sopra. Questo un riassunto in lingua corrente dei concetti chiave della licenza completa (codice
legale), reperibile sul sito Internet
http://creativecommons.org/licenses/by-nc-nd/2.0/legalcode
wxWidgets
2 / 33
Sommario
Un programma di esempio
wxWidgets
3 / 33
wxWidgets
4 / 33
Perch wxWidgets?
Esiste un certo numero di librerie per lo sviluppo di GUI
multipiattaforma. Nessuna di queste per, secondo lopinione degli
sviluppatori di wxWidgets, rispetta tutti e 4 questi requisiti:
1
Basso costo.
wxWidgets
5 / 33
Realmente multipiattaforma
Supporta praticamente qualsiasi compilatore
Documentazione di altissima qualit
Wrapper leggero e veloce
Includono classi di alto livello
Buona struttura di astrazione
wxCode: database di progetti degli utenti
Gratis
Open Source
Progetto nato nel 1992 e ormai robusto
wxWidgets
6 / 33
Feature disponibili
Un vasto numero di classi per finestre e controlli
Gestore degli eventi evoluto
Supporto per la stampa su tutte le piattaforme
Supporto per il debug e il logging
Integrazione a database
Drag and drop
Gestione di file di configurazione
Integrazione con OpenGL
Multi-threading
Programmazione di rete trasparente
Gestione di HTML e XML integrata
Supporto per linternazionalizzazione
Supporto OLE
Davide Rondini (MontelLUG)
wxWidgets
7 / 33
Piattaforme supportate
Piattaforme [2]
Win32 (Win 9x/NT/2K)
Win64 (Windows XP/2003)
Win16 (Windows 3.1)
AIX
HP-UX
Linux x86
IRIX
Linux S/390
SCO UnixWare
FreeBSD
NetBSD
OS/2
OpenBSD
OpenVMS
Mac OS
Solaris
wxWidgets
8 / 33
Linguaggi di programmazione
Binding [3]
wxAda
wxLua
wxBasic
wxMax
wxD
wxNet
wxEuphoria
wxPerl
wxHaskell
wxPike
wxJava
wxPython
wxRuby
wxJavaScript
wxSqueak
wxWidgets
9 / 33
wxWidgets
10 / 33
wxWidgets
11 / 33
Porting in sviluppo
wxCocoa Port per MacOS
X, che si appoggia a
Cocoa.
Sviluppato da unazienda
italiana.
wxOS2 OS/2.
wxPalmOS Porting per
PalmOS.
a
wxWidgets
12 / 33
Licenza
wxWidgets
wxWindows license
Open Source
(OSI approved)
Compatibile
L-GPLv2
Consente di
distribuire binari
derivati con
licenza a propria
scelta.
Davide Rondini (MontelLUG)
.NET
Qt
Dual License
GPLv2 per
sviluppo Open
Source
Commerciale
per applicazioni
commerciali
wxWidgets
.NET
Microsoft Reference
License (Ms-RL)
Consente solo
di vedere il
codice
13 / 33
Pro
.NET
wxWidgets
Open Source
Documentazione
Facilit di programmazione
Piattaforme e
compilatori
supportati
Qt
.NET
Integrazione
perfetta con
KDE
Molto evoluto
Innovative
Diffusione
Supporto
commerciale
Nativo con
Windows
Veloce
wxWidgets
14 / 33
Contro
.NET
.NET
Qt
wxWidgets
Multi-threading
poco evoluto
Poco note
Licenze
commerciali
costose
Rognose da
compilare in
Windows
wxWidgets
Essenzialmente
limitato a
Windows
Documentazione
Vincolato alla
politica
commerciale
Microsoft
15 / 33
DialogBlocks
wxGlade
Widget editor
IDE commerciale
multipiattaforma
Open source
Scritto in wxPython
Sviluppato da Julian
Smart, project leader di
wxWidgets
wxWidgets
16 / 33
wxGlade screenshot
wxWidgets
17 / 33
Un semplice tutorial
Nel pacchetto delle wxWidgets ci sono tantissimi utili esempi
Il programma di esempio sar questo semplice editor di testo
wxWidgets
18 / 33
La classe wxApp
1
2
3
4
5
wxWidgets
19 / 33
1
2
3
4
5
6
7
8
9
10
11
12
private :
DECLARE_EVENT_TABLE ( )
w x T e x t C t r l textFrame ;
wxString c u r r e n t F i l e ;
13
14
15
16
};
Davide Rondini (MontelLUG)
17
wxWidgets
20 / 33
wxWindow La finestra di
base, senza decorazione.
Usata spesso nelle sue
derivazioni.
Il distruttore si occupa
automaticamente di
distruggerre tutti i figli
Per distruggere
esplicitamente una finestra
si usa il metodo
Destroy()
Davide Rondini (MontelLUG)
wxWidgets
21 / 33
wxWidgets
22 / 33
1
2
3
4
wxWidgets
23 / 33
wxWidgets
24 / 33
Limplementazione di wxApp
IMPLEMENT_APP( wxTestapp )
1
2
bool wxTestapp : : O n I n i t ( )
{
wxTestFrame frame = new wxTestFrame (
wxT ( " wxWidgets Simple Text E d i t i n g Program " ) ,
wxPoint ( 5 0 , 5 0 ) , wxSize ( 4 5 0 , 3 4 0 ) ) ;
3
4
5
6
7
8
frame>Show (TRUE ) ;
SetTopWindow ( frame ) ;
r e t u r n TRUE;
9
10
11
12
wxWidgets
25 / 33
Il costruttore di wxFrame
wxTestFrame : : wxTestFrame ( const w x S t r i n g& t i t l e ,
const wxPoint& pos ,
const wxSize& s i z e )
: wxFrame ( ( wxFrame )NULL , 1, t i t l e , pos , s i z e ,
wxDEFAULT_FRAME_STYLE, wxT ( " Base frame " ) )
1
2
3
4
5
Parametri
1
wxWidgets
26 / 33
1
2
3
4
5
6
7
8
9
10
wxWidgets
11
12
13
27 / 33
1
2
3
textFrame = new w x T e x t C t r l ( t h i s , 1,
wxT ( " W r i t e Here \ n " ) ,
wxDefaultPosition ,
wxDefaultSize ,
wxTE_MULTILINE | wxTE_AUTO_URL ) ;
4
5
6
7
8
wxWidgets
28 / 33
Apertura di un file
void wxTestFrame : : OpenFile ( wxCommandEvent& event )
{
wxFileDialog openFileDialog =
new w x F i l e D i a l o g ( t h i s ,
wxT ( " Open a t e x t f i l e " ) ,
wxT ( " / home / davide / " ) ,
wxT ( " " ) , f i l e T y p e s ,
wxOPEN, w x D e f a u l t P o s i t i o n ) ;
i f ( o p e n F i l e D i a l o g >ShowModal ( ) == wxID_OK ) {
c u r r e n t F i l e = o p e n F i l e D i a l o g >GetPath ( ) ;
textFrame >C l e a r ( ) ;
textFrame >L o a d F i l e ( c u r r e n t F i l e ) ;
1
2
3
4
5
6
7
8
9
10
11
12
13
S e t S t a t u s T e x t ( o p e n F i l e D i a l o g >GetFilename ( ) , 0 ) ;
S e t S t a t u s T e x t ( o p e n F i l e D i a l o g >G e t D i r e c t o r y ( ) , 1 ) ;
}
14
15
16
17
wxWidgets
29 / 33
Salvataggio di un file
void wxTestFrame : : S a v e F i l e ( wxCommandEvent& event )
1
{
2
i f ( c u r r e n t F i l e . IsEmpty ( ) ) {
3
SaveFileAs ( event ) ;
4
} else {
5
i f ( textFrame >S a v e F i l e ( c u r r e n t F i l e ) ) {
6
SetStatusText ( c u r r e n t F i l e , 0 ) ;
7
S e t S t a t u s T e x t ( wxT ( " F i l e saved " ) , 1 ) ;
8
} else {
9
wxMessageBox (
10
wxT ( " An e r r o r occoured w h i l e s a v i n g f i l e ! " ) , 11
wxT ( " Save e r r o r " ) ,
12
wxOK | wxICON_ERROR, t h i s ) ;
13
};
14
};
15
}
16
wxWidgets
30 / 33
wxWidgets
31 / 33
Conclusioni
Infine...
Abbiamo realizzato un editor di
testo grafico multi-piattaforma
con 147 righe di codice C++!
Riferimenti
http://www.montellug.it
montellug@montellug.it
davide.rondini@gmail.com
wxWidgets
32 / 33
wxEmbedded
http://www.koansoftware.com/it/prd_svil_wxembedded.htm
wxWidgets bindings
http://www.wxwidgets.org/wiki/index.php/General_Information
wxWidgets
33 / 33