[[!toc levels=2]]
# Tvorba grafických aplikací
-## Nová doba, host vyhazuje vrchního
+## Žijeme v přelomovém období
-- dlouho jsme měli klávesnici, myš a jasno
+- vznikl obrovský trh z mobilními aplikacemi
+- desktopové aplikace opouští programátorské výsluní a jsou nahrazovány mobilními
+- dlouho jsme měli klávesnici, myš a nepsanou dohodu o tom, jak má vypadat widget-set
+- s mobilními aplikacemi přichází touch-screen, což má obrovský impakt na UI
- postupně se vžívá názor, že aplikace musí být průhledná, nepřehledná a zmatená, aby byla úspěšná na trhu, uživatelé na to přistupují
-- pak přišel (velmi zjednodušeně) Steve Jobs vynalezl iphone a ipad a řekl swipe or die
- vysledkem je, že v grafických aplikacích jsme v podstatě zase na začátku
+- Je velký rozdíl mezi desktopovou aplikací a mobilní, přesto existují snahy je sjednotit (Windows Metro, Ubuntu Unity)
## Potřebujeme vůbec GUI?
- Učící křivka je jednotkový skok
- Lze jednoduše skriptovat a automatizovat práci
- Většinu aplikace tvoří business logika
-- Je třeba je používat pravidelně, jinak uživatel zapomene, jak se to psalo
+- Je třeba je používat pravidelně, jinak uživatel zapomene, jak se to vlastně psalo
### CLI aplikace s GUI kabátkem
-- V podstatě ideální stav
+- Na desktopu ideální stav
- Asi nejvíc práce
## Tvorba aplikaci
### Požadavky na aplikaci
+- **MULTIPLATFORMNOST** (MasOS, Windows, Linux) (iOS, Windows Mobile, Android, BB10, ...)
+- jako developer jistě chcete svou aplikaci napsat jednou a pak ji prodávat na všech platformách
- logování
- konfigurace
- kontainery
- zpracování eventů (event driven aplikace, xev)
- widgetset
- layout manager
-- 3D layer, podporu akcelerace
+- mobilní aplikace - UI adaptability
- atd. ...
### Režie
### Vývojové nástroje
+- **verzovací systém** (GIT, SVN, CVS, Mercurial, )
- dobré nářadí nám výrazně ulehčí praci a ušetří čas a nervy
### V neposlední řadě
- **MUSÍ TO FUNGOVAT**
+### Doby, kdy toto vše dokázal napsat někdo sám jsou nenávratně pryč
+
+- ať chceme, či ne, jsme nuceni se dříve či později porozhlédnout po nějakém pěkném frameworku
+- rovněž vhodné IDE dokáže naši práci podstatně urychlit (code completion, indexer, profiling, debugging, UI designer)
+
----------
### Signal/Slot koncept
-- Obecně řeší observer pattern.
+- Observer pattern, výrazně redukuje boilerplate kód.
- Many to many relationship.
- Velice se hodí na řešení volání callback funkcí widgetů.
- dokáží multiplatformě obalit problém synchronizace window system eventů a eventů od file desriptorů (implementace není vždy ideální)
### Použití layout manageru
- Zaručuje optimální umístění a velikost widgetů při změně velikosti okna.
-- Je přirozenější říct tlčítka jsou nalevo pod sebou, než specifikovat jejich souřadnice
+- Je přirozenější říct tlačítka jsou nalevo pod sebou, než specifikovat jejich souřadnice
+
+### UI definition
+
+- způsob jakým definujeme UI
+- poloha a atributy ovládacích prvků v oknech aplikace
+- poměrně výrazně ovlivňuje produktivitu vývojáře
+- kód, XML, QML, custom
[1]: X_client_sever_example.svg
[2]: http://cs.wikipedia.org/wiki/X_display_manager