Professional Documents
Culture Documents
Segedlet Az Xwindows Programozasa Mereshez
Segedlet Az Xwindows Programozasa Mereshez
hu
SEGÉDLET
AZ "X-WINDOWS PROGRAMOZÁSA" c.
MÉRÉSHEZ
1. X-Windows
X-Window készülékfüggetlen hálózatorientált grafikus user interface(GUI).
A grafikus user interface azt jelenti, hogy a felhasználó, többnyire szines
nagy felbontású, grafikus képeket használ a pixelekből felépülő képernyőn . Ezt inkább
egérrel, track ball-lal vagy más hasonló eszközzel vezérli, mint keyboard-dal.
Hálózatorientált, mivel az alkalmazásnak nem szükségképpen kell
ugyanazon a computeren lenni, mint ahol a felhasználó ül.
Készülékfüggetlensége két dolgot jelent. Egy X-Window alkalmazás
forráskódját le kell tudni fordítani és futtatni minden gyártó azon rendszerein, amelyek
az X-Window-t támogatják. Továbbá egy X-Window alkalmazás display független is.
2. X koncepció
X server
Az X server egy olyan alkalmazás, amely egy számítógépen futva kezeli a display-t.
Válaszol az vezérlő input eszközöknek és közvetíti a felhasználó tevékenységét az X
client felé, mint X eseményeket. Az X server képes egyszerre több X client-sel
2
Forrás: http://www.doksi.hu
X client
Ez az applikáció, az X környezet X client felöli oldala. Client oldalon szükséges egy
könyvtár, amely realizálja a kapcsolatot az X serverrel.
X hálózaton
Az X client és az X server különválasztása lehetővé teszi az alkalmazásoknak a
display függetlenséget . Így nem szükséges a különböző tipusú display-knek megfelelő
könyvtárakat beszerkeszteni az X client oldalon. Az X server kezeli valamennyit, a
nagy felbontású színes monitortól a kis monochrome monitorig.
Az X server-nek és az X client-nek nem kell különböző számítógépen lennie,.
ha ezt a számítógép teljesítménye lehetővé teszi.
Az X server és az X client közötti kommunikációs mechanizmust X
protokollnak nevezzük. Amikor a két vég nem egy gépben helyezkedik el, akkor az X
protokoll valamilyen hálózati protokollon keresztül ( általában TCP-IP) jut el a másik
végre. Azonban átviteli sebesség korlátok miatt ezt csak lokális hálózaton érdemes
alkalmazni.
Lehetséges, hogy az X server különböző implementációi némileg különböző
módon jelenítik meg ugyanazt a funkciót. A különböző serverek fizikailag különböző
tulajdonságokkal rendelkezhetnek ( beállított színek, képernyő felbontása ). Így egy X
client különbözőképpen jelenhet meg, ha különböző X server-hez kapcsolódik.
3. X-Windows programozása
3
Forrás: http://www.doksi.hu
Application
X Toolkit
Widget set
Intrinsics
Xlib
Xlib
Ez az alapszint. Az X az X protocol-t jelenti, amely specifikálja az összes
információcsomag tartalmát, amelyet az X server küld az X client-nek és fordítva.
(akár egy gépen van az X server és client akár külön gépen.) Minden X protokoll
üzenetnek megfelel egy függvény a legalacsonyabb programozási szinten. Ez az Xlib
könyvtár.
X Toolkit
Az Xlib-nek létezik egy magasabb szintű alternatívája, amelynek része egy elem
gyűjtemény amelyet widget-nek nevezünk. Ezt a gyűjteményt az X alkalmazás
megjelenítésénél alkalmazhatjuk sikeresen. Ezek olyan elemek, mint a nyomógomb
kezelés, message box( amely feljön és megjelenit valamely információt a felhasználó
számára) , edit box (amelyben a felhaszáló adatokat gépelhet be az alkalmazás
számára). Pl. egy gomb megnyomásakor egy widget
kiszámítja egy kijelzendő szöveg szélességét pixelben
készít egy ablakot a kívánt méretben,
beállítja, hogy az adott ablak milyen eseményekre lesz érzékeny,
elvégzi a komplex grafikus műveletek ( 2D 3D alkalmazások pl.: forgatás),
elhelyezi az ablakot a képernyőn,
kezeli az eseményeket az ablakban.
Eseményvezérelt programok
Az X-Windows programok eseményvezéreltek. A tradicionális alkalmazásokban a
felhasználó párbeszédben véges számú lehetőségből választva vezérelte a programot.
(Pl.: Menü-vezérelt alkalmazások hiearachikus menüj mellett az alkalmazás elindulása
után megjelenik a főmenü, ebből juthatunk el a véges számú almenübe stb.) Minden
4
Forrás: http://www.doksi.hu
választás után egy újabb almenü v. egy alprogram választódik ki. Ez szigorúan
hierarchikus.
X-Window környezetben ez nem igaz. A felhasználó szabadon manipulálhatja a
programot. Becsukhatja az ablakot., egyszerre több példányban különböző
paraméterezéssel futtathatja, egyszerre az összes példány aktívan dolgozhat. Ilyen
környezetben egy tradicionális alkalmazás hamarosan lefagyna.
Ezért az alkalmazásokat X-Window környezetben úgy kell megtervezni, hogy az
applikáció helyesen reagáljon a felhasználó összes lehetséges ténykedésére. Ez csak
úgy lehetséges, ha a program fő ciklusában vár egy esemény megtörténésére, amikor
egy ismert esemény bekövetkezik, akkor azt egy függvény lekezeli. Nem kötelező
minden eseményt lekezelni. Dönteni kell arról, hogy lekezelendő, figyelmen kívül
hagyandó, vagy tovább kell adni .
Amikor egy eseményt generál a felhasználó, akkor az elősször egy esemény queue-
ba kerül, amelyet az alkalmazás olvas. Így nem vész el esemény akkor sem, ha az
alkalmazás elfoglalt. Minden alkalmazás rendelkezik egy saját esemény bufferrel. Az
XToolkit-et felhasználva a programozáskor az események automatikusan olvasódnak
az esemény bufferből és kerülnek ahhoz a widget-hez, amelyben az esemény
generálódott. A widget lekezeli, ignorálja, vagy feldolgozza azt.
Widget programozása:
A widget-ek az egyszerű X-windows interface építőkövei. Minden X-Windows
widget-et hierarchikusan osztályokba vannak soroltak külső megjelenésük ill.
viselkedésük alapján. Az igy osztályokba sorolt widget-ek (jellemzően úgy
viselkednek, mint az objektumok) saját tulajdonságaikat minden esetben örökítik az
osztályban a hierarchiában alattuk levőre. Fizikailag egy osztály egy pointer, amely
egy adatstruktúrára mutat. Az X-windows object minden példánya két adatstruktúrából
áll:
egy az osztály minden elemének általános viselkedését leiró adatstruktúrából
egy egyedi adatstruktúrából, amely a speciális widget saját egyedi
viselkededését írja le.
Az Xtoolkit Intrisics definiál néhány alap widget osztályt, amelyek nem alkotnak
egy teljes hierarchikus struktúrát. Az olyan widget készletek, mint a Motif vagy az
Athena, ezen alap osztályok felhasználásával új teljes widget-készleteket épít fel. A
gyakorlatban a programozó csak nagyon ritkán használja az alap widget-eket. ( A
Motif widgetkészlet felépítését az 1. melléklet mutatja.)
5
Forrás: http://www.doksi.hu
Header file-ok
Toolkit inicializálás
6
Forrás: http://www.doksi.hu
Pl.:
XtAppContext app_context;
Widget toplevel;
toplevel=XtAppInitialize(&app_context,"Name",NULL,0,&argc,argv,NULL,NULL,0)
Eseménykezelés
7
Forrás: http://www.doksi.hu
Widget-ek megvalósítása
Események feldolgozása.
Xlib programozása
Egy Xlib hívásokból felépülő program a következő részeket kell, hogy tartalmazza:
8
Forrás: http://www.doksi.hu