Elektrotechniek/Embedded Systems engineering inf2d Programmeren in C ++ met wxwidgets les 5 cursus 2009-2010 ir drs E.J Boks
Les 5 Grafische toolkits Basisbeginselen gebruik grafische toolkit WxWidgets eerste voorbeeld 2
Grafische werkomgeving op een PC Computers waren in de jaren zeventig en tachtig grotendeels tekstgebaseerd. Eerste commercieel verkrijgbaar grafisch platform: Apple Macintosh (128K geheugen) in 1984. Grafische interface bood niet-technische onderlegde mensen de mogelijkheid, een computer te gebruiken. Grafische interface maakt software architectuur complexer en eist meer van computer. 3
Eerste grafische werkstation in 1984 een revolutie voor de maatschappij 4
Populaire grafische omgevingen Apple Apple Microsoft MS Windows Unix/Linux X11 5
Populaire (grafische) toolkits Win32 MFC/.Net (Windows) Borland Visual Component Library (Windows) Cocoa/Carbon/Quartz/OpenGL (Apple) GTK (Unix/Linux) Java (Multi platform, interpreted) Tcl/Tk (Multi platform, interpreted) QT (Multi platform, interpreted/compiled) FLTK (Multi platform, compiled) WxWidgets (Multi platform, interpreted/compiled) 6
Geschiedenis wxwidgets 1992 Start Univ van Edinburgh om ontwikkelaars op Sun OS en Windows 3.1 dezelfde programmatuur te laten ontwikkelen: wxwindows. 1993-1996 Open source ontwikkeling en groei ontwikkelgroep. Doelen: Win32 en Motif/Xt. 1997: wxwindows port naar GTK+ 1998: wxwindows port naar Mac OS 2004: naamswijziging ivm juridische dreigementen Microsoft. 2010: Apple Mac naar Cocoa (64 bit) 7
Mogelijkheden met wxwidgets -1 Zonder kosten en licenties gratis te downloaden vanaf internet buffer tussen applicatie en onderliggend systeem. Wijzigingen in systeem leiden niet tot wijzigingen in applicatiecode Multi platform een keer schrijven, meerdere releases voor verschillende systemen Sneller en veiliger dan interpreted code zoals Java Te gebruiken met meerdere talen: C ++, Python, Perl Meer dan grafische interface alleen applicatie ondersteuning op meerdere vlakken 8
WxWidgets mogelijkheden - 2 Applicatie ondersteuning voor: Event-driven grafische interface met adaptieve vormgeving Muis/toetsenboard support Standaard en zelf-gedefinieerde Dialogen Afbeeldingen Ondersteunende data structuren Bestanden en streams Geheugen mgmt en debugging Internationalisatie 9
WxWidgets mogelijkheden - 3 Applicatie ondersteuning voor: Multithreaded applicaties Internet programmeren sockets en html Documenten Alles natuurlijk eenduidig ongeacht het onderliggende systeem! 10
GUI the Graphical User Interface Een GUI werkt, anders dan een command-line interface, altijd wachtend op input vanuit meerdere bronnen. Een GUI is dan ook gebouwd om zogenaamde events te verwerken. Een event wordt opgewekt door : Muisbeweging en muistoetsen Toetsenbord aanslagen Touchscreen input Trackball Stem controle 11
WxWidgets eerste applicatie ter introductie Doel: een kleine applicatie om de tijd af te beelden Analyseer het probleem: gebruiker moet een moment aangeven om de tijd te zien te krijgen. Bovendien moet de gebruiker de applicatie kunnen afsluiten. 12
WxWidgets met Codeblocks Codeblocks kan wxwidgets code genereren. Start een nieuw project keuze is wxwidgets. Kies GCC compiler Gebruike de wxsmith vormgever. Zorg voor Unicode en Dyn Lib gebruik Op FreeBSD: zorg er voor dat Codeblocks wx-config kan vinden ga naar ~/bin directory. Als deze niet bestaat, maak deze aan met mkdir ~/bin. In ~/bin, maak een symlink naar wx-config op FreeBSD: ln -s /usr/local/bin/wxgtk2u-2.8-config wx-config 13
Codeblocks dialogen-1 14
Codeblocks dialogen -2 15
Bouwen en compileren Bouwen en compileren wordt uitgevoerd met de knoppen linksboven onder de menubalk: 16
WxWidgets bouw de form 17
WxWidgets properties edit 18
WxWidgets evt handler maken 19
WxWidgets koppeling aan OS EVT handling Codeblocks koppelt zelf de event handler aan het onderliggende Event systeem van het Operating Systeem. Het is wel zaak om elk event een eigen ID te geven, hetzij via Codeblocks, hetzij via een eigen ID lijst (meestal een enumeratie). 20
WxWidgets mogelijkheden dialoog en tijd In de event handler funktie definieëren wij de code om de tijd af te beelden. Daar is voor nodig: Een methode om de tijd te lezen. WxWidgets biedt hiervoor de klasse wxdatetime aan. Een methode om een klein dialoogschermpje te maken. WxWidgets heeft hiervoor de klasse wxmessagedialog. Alle klassen en funkties die de wxwidgets bibliotheek biedt zijn uitvoerig gedocumenteerd op: http://docs.wxwidgets.org/stable/wx_contents.html En ook op een systeem waar wxwidgets geinstalleerd is. 21
WxMessageDialog - structuur 22
wxdatetime WxDateTime is gedefineerd in <wx/datetime.h>, dit moet dus bovenaan in ons door Codeblocks gegenereerde bestand worden toegevoegd. In de documentatie staat : 23
WxDateTime omzetting naar String DateTime moet in de dialoog worden geprint. Er moet dus een methode zijn om naar het wxstring formaat te gaan, waar de dialoog mee werkt. Kijken in de wxdatetime documentatie leert dat er een output methode is, die automatisch formatteert naar het formaat waarin de gebruiker een tijd leest. 24
Implementatie in event handler 25
WxWidgets tijddemo uitvoering 26
Aan de slag! Begin met practicumopdracht 3