%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%     3. fejezet
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\clearpage
\section{Az XVi\-ew To\-ol\-kit}
\label{xview}

Az XVi\-ew n\'ev az {\bf X} Win\-dow-System-ba\-sed {\bf V}isu\-al/{\bf I}nteg\-ra\-ted {\bf
E}nvi\-ron\-ment for {\bf W}orks\-ta\-ti\-ons (X ab\-lak\-ke\-ze\-l\H o rend\-szer\-re ala\-pu\-l\'o
vi\-zu\-\'a\-lis/in\-teg\-r\'alt k\"or\-nye\-zet mun\-ka\-\'al\-lo\-m\'a\-sok\-ra) ki\-fe\-je\-z\'es r\"o\-vi\-d\'\i{}\-t\'e\-se\-k\'ent
ke\-let\-ke\-zett. Az XVi\-ew olyan UI \'ep\'\i{}\-t\H o\-e\-le\-me\-ket tar\-tal\-maz, ame\-lyek t\'a\-mo\-gat\-j\'ak
in\-te\-rak\-t\'\i{}v, gra\-fi\-k\'a\-ra ala\-pu\-l\'o al\-kal\-ma\-z\'a\-sok fej\-lesz\-t\'e\-s\'et X Win\-dows al\'a. Az
\'ep\'\i{}\-t\H o\-e\-le\-mek meg\-je\-le\-n\'e\-se \'es vi\-sel\-ke\-d\'e\-se az OPEN\-LO\-OK gra\-fi\-kus UI
spe\-ci\-fi\-k\'a\-ci\-\'o\-nak fe\-lel meg.


Az ese\-m\'eny\-ve\-z\'e\-relt prog\-ra\-mo\-z\'as eg\'e\-szen m\'as prog\-ramst\-ruk\-t\'u\-ra ki\-a\-la\-k\'\i{}\-t\'a\-s\'at
ig\'eny\-li, mint a ha\-gyo\-m\'a\-nyos m\'od\-sze\-rek. Az XVi\-ew-ban hasz\-n\'alt ve\-z\'er\-l\'e\-si
szer\-ke\-ze\-tek\-r\H ol sz\'a\-mol be a \ref{xview:vez} al\-fe\-je\-zet. Az XVi\-ew ese\-m\'eny\-ke\-ze\-l\'es
m\'od\-j\'at \'\i{}r\-ja le a \ref{xview:esem} r\'esz.

Az XVi\-ew egyik jel\-lem\-z\H o\-je, hogy na\-gyon ke\-v\'es f\"ugg\-v\'eny hasz\-n\'a\-la\-t\'a\-val le\-het
prog\-ra\-mo\-kat \'\i{}r\-ni. Ez ab\-b\'ol ad\'o\-dik, hogy ez a {\em to\-ol\-kit} is ren\-del\-ke\-zik
bi\-zo\-nyos ob\-jek\-tum ori\-en\-t\'alt prog\-ra\-mo\-z\'a\-si vo\-n\'a\-sok\-kal. Ez\'ert p\'el\-d\'a\-ul ugya\-naz
a f\"ugg\-v\'eny al\-kal\-maz\-ha\-t\'o az \"o\discretionary{sz-}{sz}{ssz}es ob\-jek\-tum l\'et\-re\-ho\-z\'a\-s\'a\-ra, pa\-ra\-m\'e\-ter\-k\'ent
meg\-ad\-va az ob\-jek\-tum t\'\i{}\-pu\-s\'at. A leg\-fon\-to\-sabb f\"ugg\-v\'e\-nyek le\-\'\i{}\-r\'a\-sa a
\ref{xview:fv} al\-fe\-je\-zet\-ben ta\-l\'al\-ha\-t\'o.

A ke\-v\'es f\"ugg\-v\'enyt na\-gyon sok\-f\'e\-le ob\-jek\-tu\-mosz\-t\'aly eg\'e\-sz\'\i{}\-ti ki, amik\-b\H ol
v\'al\-to\-za\-tos UI-k \'ep\'\i{}t\-he\-t\H ok fel. Az ob\-jek\-tu\-mok jel\-lem\-z\H o\-it az ob\-jek\-tum\-hoz tar\-to\-z\'o
att\-ri\-b\'u\-tu\-mok \'er\-t\'e\-k\'e\-nek \'al\-l\'\i{}\-t\'a\-s\'a\-val le\-het mag\-v\'al\-toz\-tat\-ni. Egy ob\-jek\-tum
l\'et\-re\-ho\-z\'a\-sa\-kor fel le\-het so\-rol\-ni, hogy az ob\-jek\-tum mely att\-ri\-b\'u\-tu\-m\'at ho\-gyan
k\'\i{}\-v\'an\-juk be\-\'al\-l\'\i{}\-ta\-ni. Az att\-ri\-b\'u\-tu\-mok\-nak \'al\-ta\-l\'a\-ban van va\-la\-mi\-lyen (j\'ol
meg\-v\'a\-lasz\-tott) de\-fa\-ult \'er\-t\'e\-ke, ez\'ert el\'eg azo\-kat \'al\-l\'\i{}\-ta\-ni, amik el\-t\'er\-nek et\-t\H ol.
Az att\-ri\-b\'u\-tu\-mok \'al\-l\'\i{}t\-ha\-t\'ok az ob\-jek\-tum l\'et\-re\-ho\-z\'a\-sa\-kor, vagy k\'e\-s\H obb, egy m\'a\-sik
f\"ugg\-v\'enyt hasz\-n\'al\-va.
 Az ob\-jek\-tu\-mok\-r\'ol, att\-ri\-b\'u\-tu\-ma\-ik\-r\'ol a \ref{xview:hier} \'es a \ref{xview:obj}
al\-fe\-je\-ze\-tek\-ben lesz sz\'o.

A \ref{xview:prg} r\'esz\-ben a {\em to\-ol\-kit} hasz\-n\'a\-la\-t\'a\-hoz sz\"uk\-s\'e\-ges \'al\-ta\-l\'a\-nos
in\-for\-m\'a\-ci\-\'ok kap\-tak he\-lyet. Itt \'\i{}runkk egy XVi\-ew prog\-ram le\-for\-d\'\i{}\-t\'a\-s\'a\-nak,
nyom\-k\"o\-ve\-t\'e\-s\'e\-nek m\'od\-j\'a\-r\'ol, a prog\-ram \'al\-ta\-l\'a\-nos fel\-\'e\-p\'\i{}\-t\'e\-s\'e\-r\H ol, \'es ha\-son\-l\'o,
m\'as\-hon\-nan ki\-szo\-rult r\'e\-szek\-r\H ol.

A fe\-je\-zet v\'e\-g\'en egy tel\-jes p\'el\-dap\-rog\-ra\-mot k\"oz\-l\"unk, ami de\-monst\-r\'al\-ja az XVi\-ew
ob\-jek\-tu\-mok hasz\-n\'a\-la\-t\'at.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
 \subsection{A ve\-z\'er\-l\'es szer\-ve\-z\'e\-se}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \label{xview:vez}

Az ese\-m\'eny\-ve\-z\'e\-relt\-s\'eg eg\'e\-szen m\'as prog\-ra\-mo\-z\'a\-si tech\-ni\-k\'a\-kat ig\'e\-nyel az
XVi\-ew-ban, mint a ha\-gyo\-m\'a\-nyos prog\-ra\-m\'\i{}\-r\'as. En\-nek oka, hogy az
ese\-m\'eny\-ve\-z\'e\-relt prog\-ram nem v\'a\-ra\-koz\-hat fel\-hasz\-n\'a\-l\'oi in\-put\-ra, ehe\-lyett \'at\-ad\-ja
a ve\-z\'er\-l\'est az \'un. {\bf No\-ti\-fi\-er}nek, ami az\-t\'an \'er\-te\-s\'\i{}\-ti \H ot, ha ese\-m\'eny
t\"or\-t\'e\-nik.

\begin{figure}
\begin{center}
\begin{picture}(45,60)
\put(10,0){\makebox(20,5){V\'e\-ge}}
\put(20,10){\vector(0,-1){5}}
\put(10,10){\line(1,0){20}}
\put(10,20){\line(1,0){20}}
\put(30,10){\line(1,1){5}}
\put(35,15){\line(-1,1){5}}
\put(10,10){\line(-1,1){5}}
\put(5,15){\line(1,1){5}}
\put(10,10){\makebox(20,10){Ki\-l\'e\-p\'es ?}}
\put(20,25){\vector(0,-1){5}}
\put(0,25){\framebox(40,10){In\-put fel\-dol\-go\-z\'a\-sa}}
\put(20,40){\vector(0,-1){5}}
\put(0,40){\framebox(40,10){In\-put ol\-va\-s\'a\-sa}}
\put(20,55){\vector(0,-1){5}}
\put(10,55){\makebox(20,5){Start}}
\put(35,15){\line(1,0){10}}
\put(45,15){\line(0,1){38}}
\put(45,53){\vector(-1,0){25}}
\put(35,8){\makebox(10,5)[tl]{nem}}
\put(22,5){\makebox(10,5)[l]{igen}}
\end{picture}
\caption{Ha\-gyo\-m\'a\-nyos prog\-ram ve\-z\'er\-l\'e\-se}
\label{fig:hagy}
\end{center}
\end{figure}

Egy ha\-gyo\-m\'a\-nyos prog\-ram struk\-t\'u\-r\'a\-ja l\'at\-ha\-t\'o a \ref{fig:hagy}. \'ab\-r\'an.
P\'el\-da\-k\'ent n\'ez\-z\"unk egy sz\"o\-veg\-szer\-kesz\-t\H ot. A prog\-ram bil\-len\-ty\H u\-ol\-va\-s\'as\-ra
v\'a\-ra\-ko\-zik az ide\-je nagy r\'e\-sz\'e\-ben. Ha a fel\-hasz\-n\'a\-l\'o \'\i{}r va\-la\-mit, ak\-kor ezt a
prog\-ram fel\-dol\-goz\-za, \'es az ered\-m\'eny\-t\H ol f\"ug\-g\H o\-en ki\-l\'ep, vagy \'uj\-ra bil\-len\-ty\H u\-re
v\'ar.

Az ese\-m\'eny\-ve\-z\'e\-relt meg\-ol\-d\'as a \ref{fig:noti}. \'ab\-ra sze\-rint m\H u\-k\"o\-dik. A No\-ti\-fi\-er
\'er\-z\'e\-ke\-li az ese\-m\'e\-nye\-ket, \'es azo\-kat el\-oszt\-ja a meg\-fe\-le\-l\H o ab\-la\-kok\-hoz tar\-to\-z\'o
{\em call\-back} ru\-ti\-nok k\"ozt. Ha va\-la\-me\-lyik f\"ugg\-v\'eny ki\-l\'e\-p\'est k\'ert, ak\-kor a
No\-ti\-fi\-er vi\discretionary{sz-}{sz}{ssz}a\-ad\-ja a ve\-z\'er\-l\'est az al\-kal\-ma\-z\'as\-nak.

A sz\"o\-veg\-szer\-kesz\-t\H onk a kez\-de\-ti be\-\'al\-l\'\i{}\-t\'a\-sok el\-v\'eg\-z\'e\-se ut\'an \'at\-ad\-ja a ve\-z\'er\-l\'est
a No\-ti\-fi\-er\-nek. Ezu\-t\'an min\-den bil\-len\-ty\H u\-nyo\-m\'as ut\'an a meg\-fe\-le\-l\H o {\em call\-back}
ru\-tin fel\-dol\-goz\-za az in\-pu\-tot, majd vi\discretionary{sz-}{sz}{ssz}a\-t\'er a No\-ti\-fi\-er\-hez. Ez a
struk\-t\'u\-ra le\-he\-t\H o\-s\'e\-get te\-remt ar\-ra, hogy a fel\-hasz\-n\'a\-l\'o szer\-kesz\-t\'es
k\"oz\-ben p\'el\-d\'a\-ul \'at\-m\'e\-re\-tez\-ze az ab\-la\-ko\-kat, vagy ma\-g\'a\-ra hagy\-has\-sa a
sz\"o\-veg\-szer\-kesz\-t\H ot \'es m\'as prog\-ram\-ra t\'er\-jen \'at.

Fon\-tos tud\-ni, hogy ha egy {\em call\-back} ru\-tin t\"or\-zse \'uj ob\-jek\-tu\-mot hoz l\'et\-re,
vagy meg\-sem\-mi\-s\'\i{}t egy l\'e\-te\-z\H o ob\-jek\-tu\-mot, sem\-mi nem fog t\"or\-t\'en\-ni a k\'e\-per\-ny\H on
min\-dad\-dig, am\'\i{}g a ru\-tin vi\discretionary{sz-}{sz}{ssz}a nem ad\-ja a ve\-z\'er\-l\'est a No\-ti\-fi\-er\-nek.

\begin{figure}[htbp]
\begin{center}
\begin{picture}(95,120)
\put(45,0){\line(0,1){120}}
\put(46,0){\line(0,1){120}}
\put(45,5){\makebox(50,5){Vi\discretionary{sz-}{sz}{ssz}a\-t\'e\-r\'es az}}
\put(45,0){\makebox(50,5){al\-kal\-ma\-z\'as\-hoz}}
\put(70,15){\vector(0,-1){5}}
\put(72,10){\makebox(20,5)[l]{igen}}
\put(60,15){\line(1,0){20}}
\put(60,30){\line(1,0){20}}
\put(80,15){\line(1,1){7.5}}
\put(87.5,22.5){\line(-1,1){7.5}}
\put(60,15){\line(-1,1){7.5}}
\put(52.5,22.5){\line(1,1){7.5}}
\put(55,25){\makebox(30,5){K\'ert a}}
\put(55,20){\makebox(30,5){call\-back ru\-tin}}
\put(55,15){\makebox(30,5){ki\-l\'e\-p\'est ?}}
\put(70,35){\vector(0,-1){5}}
\put(55,45){\makebox(30,5){A meg\-fe\-le\-l\H o}}
\put(55,35){\framebox(30,15){call\-back ru\-tin}}
\put(55,35){\makebox(30,5){h\'\i{}\-v\'a\-sa}}
\put(55,42){\vector(-1,0){15}}
\put(70,55){\vector(0,-1){5}}
\put(55,55){\framebox(30,10){In\-put ol\-va\-s\'a\-sa}}
\put(70,75){\vector(0,-1){10}}
\put(40,75){\line(1,0){30}}
\put(87.5,22.5){\line(1,0){7.5}}
\put(95,22.5){\line(0,1){47.5}}
\put(95,70){\vector(-1,0){25}}
\put(87,15){\makebox(8,5)[tl]{nem}}
\put(0,37){\framebox(40,10){Ese\-m\'eny fel\-dol\-go\-z\'a\-sa}}
\put(0,60){\makebox(40,5){V\'e\-ge}}
\put(20,70){\vector(0,-1){5}}
\put(0,70){\framebox(40,10){No\-ti\-fi\-er h\'\i{}\-v\'a\-sa}}
\put(20,85){\vector(0,-1){5}}
\put(0,85){\framebox(40,10){Be\-\'al\-l\'\i{}\-t\'a\-sok}}
\put(20,100){\vector(0,-1){5}}
\put(0,100){\makebox(40,5){Start}}
\put(0,110){\makebox(40,10){\bf Al\-kal\-ma\-z\'as}}
\put(55,110){\makebox(30,10){\bf No\-ti\-fi\-er}}
\end{picture}
\caption{Ese\-m\'e\-nye\-ken ala\-pu\-l\'o prog\-ram ve\-z\'er\-l\'e\-se}
\label{fig:noti}
\end{center}
\end{figure}

Ez a tu\-laj\-don\-s\'ag az X-et ki\-mon\-dot\-tan k\'e\-nyel\-met\-len\-n\'e te\-szi, ha a prog\-ra\-munk
ho\discretionary{sz-}{sz}{ssz}abb sz\'a\-mo\-l\'a\-so\-kat, adat\-fel\-dol\-go\-z\'ast v\'e\-gez. Ugya\-nis ha ek\"oz\-ben a prog\-ram
a fel\-hasz\-n\'a\-l\'o\-val is kap\-cso\-la\-tot akar tar\-ta\-ni, ak\-kor k\'eny\-te\-len id\H o\-r\H ol id\H o\-re
meg\-h\'\i{}v\-ni a No\-ti\-fi\-ert, ami ese\-ten\-k\'ent el\'eg cs\'u\-nya prog\-ramst\-ruk\-t\'u\-r\'at
ered\-m\'e\-nyez. Az XVi\-ew To\-ol\-kit az olyan prog\-ra\-mo\-kat ``sze\-re\-ti'', ame\-lyek
in\-te\-rak\-t\'\i{}\-vak, azaz gyak\-ran v\'a\-ra\-koz\-nak a fel\-hasz\-n\'a\-l\'o pa\-ran\-csa\-i\-ra.

Ha m\'e\-gis olyan prog\-ra\-mot aka\-runk X alatt imp\-le\-men\-t\'al\-ni, ami ho\discretionary{sz-}{sz}{ssz}abb ide\-ig
ma\-g\'a\-n\'al tart\-ja a ve\-z\'er\-l\'est, ak\-kor spe\-ci\-\'a\-lis f\"ugg\-v\'e\-nye\-ket kell hasz\-n\'al\-nunk.
Ugya\-nis nincs ar\-ra le\-he\-t\H o\-s\'eg, hogy egy {\em call\-back} ru\-tin\-ban ma\-rad\-va
v\'e\-gez\-ze a prog\-ram az id\H o\-i\-g\'e\-nyes te\-v\'e\-keny\-s\'e\-g\'et, \'es k\"oz\-ben az ese\-m\'e\-nye\-ket is
ke\-zel\-je. Az ilyen prob\-l\'e\-ma meg\-ol\-d\'a\-s\'a\-nak he\-lyes m\'od\-ja a k\"o\-vet\-ke\-z\H o:

A {\em call\-back} ru\-tin\-ban a prog\-ram ki\-ad egy {\tt notify\_stop()}
f\"ugg\-v\'eny\-h\'\i{}\-v\'ast \'es vi\discretionary{sz-}{sz}{ssz}a\-t\'er. En\-nek ha\-t\'a\-s\'a\-ra a No\-ti\-fi\-er vi\discretionary{sz-}{sz}{ssz}ad\-ja a ve\-z\'er\-l\'est
az al\-kal\-ma\-z\'as\-nak, ami el\-kezd\-he\-ti a k\'\i{}\-v\'ant te\-v\'e\-keny\-s\'e\-get. An\-nak \'er\-de\-k\'e\-ben, hogy
a fel\-hasz\-n\'a\-l\'o\-val va\-l\'o kap\-cso\-lat\-tar\-t\'as ne sz\H un\-j\"on meg, \'es a k\'e\-per\-ny\H o\-re is \'\i{}r\-ni
le\-hes\-sen, a prog\-ram\-nak id\H on\-k\'ent meg kell h\'\i{}v\-nia a No\-ti\-fi\-ert. Ez a {\tt
notify\_dispatch()} f\"ugg\-v\'e\discretionary{ny-}{ny}{nny}el megy, ami egyet\-len ese\-m\'eny\-ke\-ze\-l\H o cik\-lust
hajt v\'eg\-re \'es vi\discretionary{sz-}{sz}{ssz}a\-t\'er.

L\'e\-tez\-nek m\'eg az XVi\-ew-ban m\'as m\'od\-sze\-rek is az ese\-m\'eny\-cik\-lus meg\-va\-l\'o\-s\'\i{}\-t\'a\-s\'a\-ra,
ezek\-re itt nem t\'e\-r\"unk ki, meg\-ta\-l\'al\-ha\-t\'ok \cite{xws7}-ban \'es \cite{atxview}-ben.

A gya\-kor\-lat\-ban egy ilyen struk\-t\'u\-ra meg\-va\-l\'o\-s\'\i{}\-t\'a\-s\'a\-n\'al t\"o\-re\-ked\-ni kell ar\-ra, hogy
le\-ga\-l\'abb m\'a\-sod\-per\-cen\-k\'ent v\'e\-gez\-zen a prog\-ram ese\-m\'eny\-ke\-ze\-l\'est, mert egy\'eb\-k\'ent
a fel\-hasz\-n\'a\-l\'o \'er\-z\'e\-kel\-he\-ti, hogy a prog\-ram nem v\'a\-la\-szol azon\-nal az \H o
te\-v\'e\-keny\-s\'e\-g\'e\-re.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
 \subsection{XVi\-ew ese\-m\'eny\-ke\-ze\-l\'es}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \label{xview:esem}

Az ese\-m\'eny egy olyan adatst\-ruk\-t\'u\-ra, amit a szer\-ver k\"uld az al\-kal\-ma\-z\'a\-sank, \'es
va\-la\-mi olyas\-mi\-r\H ol hor\-doz in\-for\-m\'a\-ci\-\'ot, ami \'ep\-pen most t\"or\-t\'ent, \'es ami \'er\-dek\-li
az al\-kal\-ma\-z\'ast. A prog\-ram el\-s\H o f\'a\-zi\-s\'a\-ban, a be\-\'al\-l\'\i{}\-t\'a\-si f\'a\-zis\-ban a prog\-ra\-mo\-z\'o
l\'et\-re\-hoz\-hat ob\-jek\-tu\-mo\-kat, \'es meg\-ha\-t\'a\-roz\-hat\-ja, hogy ezek ho\-gyan fog\-nak
egy\"utt\-m\H u\-k\"od\-ni az al\-kal\-ma\-z\'as\-sal. Ezu\-t\'an a prog\-ram be\-l\'ep az ese\-m\'eny\-cik\-lus\-ba, \'es
in\-nen\-t\H ol kezd\-ve a No\-ti\-fi\-er ve\-szi \'at a ve\-z\'er\-l\'est. A prog\-ram csak azok\-r\'ol az
ese\-m\'e\-nyek\-r\H ol fog \'er\-te\-s\"ul\-ni, ame\-lye\-ket a No\-ti\-fi\-er\-nek a be\-\'al\-l\'\i{}\-t\'a\-si f\'a\-zis\-ban
meg\-a\-dott. Az al\-kal\-ma\-z\'as a fe\-la\-da\-t\'at az ese\-m\'e\-nyek\-re va\-l\'o v\'a\-la\-szai \'al\-tal hajt\-ja
v\'eg\-re.



Az ab\-lak\-ke\-ze\-l\H o rend\-szer ha\-t\'a\-roz\-za meg, hogy egy ese\-m\'enyt me\-lyik ab\-lak kap meg.
Ha egy ab\-lak az adott ese\-m\'enyt nem k\'\i{}\-v\'an\-ja ke\-zel\-ni, v\'a\-laszt\-hat, hogy el\-dob\-ja
az ese\-m\'enyt, vagy to\-v\'ab\-bad\-ja az alat\-ta fek\-v\H o ab\-lak\-nak, ami \'al\-ta\-l\'a\-ban a
sz\"u\-l\H o\-je.

Az XVi\-ew-ban min\-den ab\-lak\-hoz ren\-del\-he\-t\"unk egy {\em call\-back} ru\-tint, \'es
meg\-ad\-ha\-tunk egy masz\-kot, ami de\-fi\-ni\-\'al\-ja azo\-kat az ese\-m\'e\-nye\-ket, ame\-lyek
ha\-t\'a\-s\'a\-ra, az adott {\em call\-back} ru\-tin meg\-kap\-ja a ve\-z\'er\-l\'est. 

Az \'al\-ta\-l\'a\-nos ese\-m\'eny\-ke\-ze\-l\H o ru\-tin meg\-a\-d\'a\-sa\-kor a {\tt WIN\_EVENT\_PROC}
att\-ri\-b\'u\-tum\-hoz kell ren\-del\-ni a {\em call\-back} ru\-tint. Az ezt ki\-v\'al\-t\'o ese\-m\'e\-nyek
maszk\-j\'at a {\tt WIN\_CONSUME\_EVENTS} att\-ri\-b\'u\-tum ut\'an kell fel\-so\-rol\-ni, egy 
{\tt NULL}-al le\-z\'ar\-va.

Van\-nak bi\-zo\-nyos ese\-m\'e\-nyek, ame\-lyek spe\-ci\-\'a\-lis ese\-m\'eny\-ke\-ze\-l\H o ru\-tint ig\'e\-nyel\-nek.
Er\-re a  leg\-gya\-ko\-ribb p\'el\-da az ab\-la\-kok \'uj\-ra\-fes\-t\'e\-s\'et v\'eg\-z\H o f\"ugg\-v\'eny. En\-nek
meg\-a\-d\'a\-s\'a\-hoz az ob\-jek\-tum egye\-di att\-ri\-b\'u\-tu\-m\'at kell hasz\-n\'al\-ni.

A k\"o\-vet\-ke\-z\H o prog\-ram\-r\'esz\-let\-ben p\'el\-d\'at mu\-ta\-tunk az \'al\-ta\-l\'a\-nos, \'es az \'uj\-ra\-fes\-t\H o
{\em call\-back} ru\-tin\-ra is.

\begin{tt}
\begin{verbatim}
void my_repaint_proc(canvas, paint_win, area)
Canvas canvas;
Xv_Window paint_win;
Rectlist *area;
{
\end{verbatim}
    /* Raj\-zo\-l\'as ... */
\begin{verbatim}
}

void my_event_proc(window, event)
Xv_Window window;
Event *event;
{
    switch(event_action(event)) {
        case ACTION_SELECT:
        case MS_LEFT: 
            if (event_is_down(event))
                break;
\end{verbatim}
            /* Ba\-lol\-da\-li gomb fel lett en\-ged\-ve ... */
\begin{verbatim}
            break;
        default:
            break;
    }
}

main()
{
\end{verbatim}
    /* Ini\-ci\-a\-li\-z\'a\-l\'a\-sok, dek\-la\-r\'a\-ci\-\'ok ... */
\begin{verbatim}
    canvas = (Canvas)xv_create(frame, CANVAS,
        CANVAS_REPAINT_PROC,         my_repaint_proc,
        CANVAS_PAINTWINDOW_ATTRS,
            WIN_EVENT_PROC,          my_event_proc,
            WIN_CONSUME_EVENTS,
                WIN_MOUSE_BUTTONS, NULL,
            NULL,
        NULL);
\end{verbatim}
    /* Ese\-m\'eny\-cik\-lus ... */
\begin{verbatim}
}
\end{verbatim}
\end{tt}

A prog\-ram\-r\'esz\-let a l\'et\-re\-ho\-zott can\-vas-hoz\footnote{L\'asd
\ref{xview:obj:canvas} fe\-jezt.} be\-\'al\-l\'\i{}t\-ja a {\tt
repaint\_proc}-ot, ami ak\-kor h\'\i{}\-v\'o\-dik meg, ha a can\-vas-t \'uj\-ra kell fes\-te\-ni.
Be\-\'al\-l\'\i{}t egy ese\-m\'eny\-ke\-ze\-l\H o {\em call\-back} ru\-tint is, ami az eg\'er bil\-len\-ty\H uk
\'al\-la\-po\-t\'a\-nak v\'al\-to\-z\'a\-sa\-kor ak\-ti\-vi\-z\'a\-l\'o\-dik. Az ese\-m\'e\-nye\-ket ke\-ze\-l\H o ru\-tin\-ban l\'at\-ha\-t\'o
az ilyan {\em call\-back} f\"ugg\-v\'e\-nyek v\'a\-za.

Az XVi\-ew ese\-m\'e\-nyek ke\-ze\-l\'e\-s\'e\-re sz\'a\-mos mak\-r\'o van de\-fi\-ni\-\'al\-va. Ezek a
pa\-ra\-m\'e\-ter\-k\'ent ka\-pott ese\-m\'eny\-b\H ol bi\-zo\-nyos in\-for\-m\'a\-ci\-\'o\-r\'esz\-le\-te\-ket sz\H ur\-nek ki.
A \"o\discretionary{sz-}{sz}{ssz}es ilyen mak\-r\'o le\-\'\i{}\-r\'a\-s\'at se\-me\-lyik iro\-da\-lom sem k\"oz\-li,
az egyet\-len hely, ahol meg\-ta\-l\'al\-t\'ok fel\-so\-rol\-va, az {\tt
xview/win\_input.h} inc\-lu\-de fi\-le. Ezek k\"o\-z\"ul most az \'al\-ta\-lunk
leg\-fon\-to\-sabb\-nak \'\i{}t\'el\-tek k\"o\-vet\-kez\-nek:

\begin{description}
 \item[{\tt event\_action()}]: Az XVi\-ew ese\-m\'eny azo\-no\-s\'\i{}\-t\'o\-j\'a\-val t\'er vi\discretionary{sz-}{sz}{ssz}a.

 \item[{\tt event\_x()}]: A kur\-zor X po\-z\'\i{}\-ci\-\'o\-ja az ese\-m\'eny be\-k\"o\-vet\-kez\-te\-kor.

 \item[{\tt event\_y()}]: A kur\-zor Y po\-z\'\i{}\-ci\-\'o\-ja az ese\-m\'eny be\-k\"o\-vet\-kez\-te\-kor.

 \item[{\tt event\_time()}]: Az ese\-m\'eny id\H o\-pe\-cs\'et\-j\'et ad\-ja vi\discretionary{sz-}{sz}{ssz}a.

 \item[{\tt event\_window()}]: Az ese\-m\'e\discretionary{ny-}{ny}{nny}el kap\-cso\-la\-tos ab\-lak azo\-no\-s\'\i{}\-t\'o\-j\'at
ad\-ja vi\discretionary{sz-}{sz}{ssz}a.

 \item[{\tt event\_is\_up()}]: Vi\discretionary{sz-}{sz}{ssz}a\-ad\-ja, hogy az ese\-m\'eny egy fel\-fe\-l\'e t\"or\-t\'e\-n\H o
\'at\-me\-net volt-e.

 \item[{\tt event\_is\_down()}]: Vi\discretionary{sz-}{sz}{ssz}a\-ad\-ja, hogy az ese\-m\'eny egy le\-fe\-l\'e
t\"or\-t\'e\-n\H o \'at\-me\-net volt-e.

 \item[{\tt event\_shift\_is\_down()}]: Vi\discretionary{sz-}{sz}{ssz}a\-ad\-ja, hogy a {\em Shift}
bil\-len\-ty\H u le volt-e nyom\-va az ese\-m\'eny be\-k\"o\-vet\-kez\-te\-kor.

 \item[{\tt event\_ctrl\_is\_down()}]: Vi\discretionary{sz-}{sz}{ssz}a\-ad\-ja, hogy a {\em Cont\-rol}~
bil\-len\-ty\H u le volt-e nyom\-va az ese\-m\'eny be\-k\"o\-vet\-kez\-te\-kor.
\end{description}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
 \subsection{XVi\-ew f\"ugg\-v\'e\-nyek}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \label{xview:fv}

Az Xvi\-ew na\-gyon ke\-v\'es f\"ugg\-v\'enyt \'es na\-gyon sok att\-ri\-b\'u\-tu\-mot hasz\-n\'al. A
f\"ugg\-v\'e\-nyek egy r\'e\-sze v\'al\-to\-z\'o pa\-ra\-m\'e\-ter\-sz\'am\-mal h\'\i{}v\-ha\-t\'o, ilyen\-kor a prog\-ra\-mo\-z\'o
fe\-le\-l\H o\-s\'e\-ge, hogy meg\-fe\-le\-l\H o ho\discretionary{sz-}{sz}{ssz}\'u pa\-ra\-m\'e\-ter\-lis\-t\'at hasz\-n\'al\-jon. A f\"ugg\-v\'e\-nyek
k\'et cso\-port\-ba oszt\-ha\-t\'ok:

\begin{itemize}
 \item \'Al\-ta\-l\'a\-nos c\'e\-l\'u f\"ugg\-v\'e\-nyek: tet\-sz\H o\-le\-ges t\'\i{}\-pu\-s\'u ob\-jek\-tu\-mok ke\-ze\-l\'e\-s\'e\-re
hasz\-n\'al\-ha\-t\'ok.

 \item Spe\-ci\-\'a\-lis f\"ugg\-v\'e\-nyek: egy-egy ob\-jek\-tum jel\-lem\-z\H o\-i\-nek \'al\-l\'\i{}\-t\'a\-s\'a\-ra,
le\-k\'er\-de\-z\'e\-s\'e\-re hasz\-n\'al\-ha\-t\'ok.
\end{itemize}

Ez a fe\-je\-zet az el\-s\H o cso\-port\-ba tar\-to\-z\'o f\"ugg\-v\'e\-nyek\-kel fog\-lal\-ko\-zik. A m\'a\-so\-dik
cso\-port f\"ugg\-v\'e\-nye\-i\-r\H ol a \ref{xview:obj} al\-fe\-je\-zet\-ben a meg\-fe\-le\-l\H o ob\-jek\-tum\-n\'al
\'\i{}rok.

\begin{description}

 \item[{\tt xv\_init()}]: Ez a f\"ugg\-v\'eny h\'a\-rom dol\-got v\'e\-gez el:
\begin{itemize}
 \item Meg\-te\-rem\-ti a kap\-cso\-la\-tot a szer\-ver\-rel.
 \item Ini\-ci\-a\-li\-z\'al\-ja a No\-ti\-fi\-ert.
 \item Ini\-ci\-a\-li\-z\'al\-ja az er\H o\-for\-r\'a\-so\-kat.
\end{itemize}

A f\"ugg\-v\'eny h\'\i{}\-v\'a\-s\'a\-nak k\'et for\-m\'a\-ja le\-het\-s\'e\-ges:
\begin{itemize}
 \item {\tt xv\_init(XV\_INIT\_ARGC\_PTR\_ARGV, \&argc, argv, NULL)}

Eb\-ben a for\-m\'a\-j\'a\-ban a f\"ugg\-v\'eny a prog\-ram pa\-rancs\-sor ar\-gu\-men\-tu\-ma\-i\-b\'ol ki\-sz\H u\-ri
az XVi\-ew-nak sz\'o\-l\'o\-kat, \'es ezek\-nek meg\-fe\-le\-l\H o\-en \'al\-l\'\i{}t\-ja az er\H o\-for\-r\'a\-so\-kat. A
fel\-hasz\-n\'alt ar\-gu\-men\-tu\-mo\-kat el\-t\'a\-vo\-l\'\i{}t\-ja az {\tt argv} t\"omb\-b\H ol, \'es {\tt argc}
\'er\-t\'e\-k\'et is en\-nek meg\-fe\-le\-l\H o\-en cs\"ok\-ken\-ti.

 \item {\tt xv\_init(XV\_INIT\_ARGS, argc, argv, NULL)}

Ez a f\"ugg\-v\'eny\-h\'\i{}\-v\'as \'er\-tel\-me\-zi a prog\-ram pa\-rancs\-sor ar\-gu\-men\-tu\-ma\-i\-b\'ol az
XVi\-ew-nak sz\'o\-l\'o\-kat, de nem v\'al\-toz\-tat\-ja meg a pa\-ra\-m\'e\-ter\-lis\-t\'at.
\end{itemize}


A f\"ugg\-v\'enyt a prog\-ram\-nak min\-den m\'as XVi\-ew f\"ugg\-v\'eny\-h\'\i{}\-v\'ast meg\-e\-l\H o\-z\H o\-en kell
meg\-h\'\i{}v\-nia. Ha ezt nem te\-szi, ak\-kor az el\-s\H o XVi\-ew f\"ugg\-v\'eny\-h\'\i{}\-v\'as\-kor
au\-to\-ma\-ti\-ku\-san el\-v\'eg\-z\H o\-dik az ini\-ci\-a\-li\-z\'a\-l\'as, de ilyen\-kor a pa\-rancs\-sor
ar\-gu\-men\-tu\-mok fi\-gyel\-men k\'\i{}\-v\"ul ha\-gy\'od\-nak. Az el\-s\H o h\'\i{}\-v\'as ut\'an min\-den to\-v\'ab\-bi
h\'\i{}\-v\'as ha\-t\'as\-ta\-lan ma\-rad.

\begin{tt}
\begin{verbatim}
main(argc, argv)
int        argc;
char       *argv[];
{
\end{verbatim}
    /* ini\-ci\-a\-li\-z\'a\-l\'a\-sok, dek\-la\-r\'a\-ci\-\'ok ... */
\begin{verbatim}
    (void)xv_init(XV_INIT_ARGS, argc, argv, NULL);
    frame = xv_create(NULL, FRAME, NULL);
}
\end{verbatim}
\end{tt}

 \item[{\tt xv\_create()}]: L\'et\-re\-hoz egy ob\-jek\-tu\-mot.

A f\"ugg\-v\'eny dek\-la\-r\'a\-ci\-\'o\-ja: \\
\begin{tt}
Xv\_opa\-que xv\_cre\-a\-te(ow\-ner, pac\-ka\-ge, attrs) \\
Xv\_ob\-ject ow\-ner; \\
Xv\_pkg pac\-ka\-ge; \\
$<${\tt att\-ri\-b\'u\-tum-\'er\-t\'ek lis\-ta}$>$ attrs;
\end{tt}

\begin{description}
 \item[{\tt owner}] A l\'et\-re\-ho\-zan\-d\'o ob\-jek\-tum tu\-laj\-do\-no\-sa. Ha {\tt NULL}-t
adunk meg, a de\-fa\-ult tu\-laj\-do\-nos hasz\-n\'a\-l\'o\-dik.

 \item[{\tt package}] A l\'et\-re\-ho\-zan\-d\'o ob\-jek\-tum osz\-t\'a\-lya.

 \item[{\tt attrs}] Egy att\-ri\-b\'u\-tum-\'er\-t\'ek lis\-ta. A v\'e\-g\'en {\tt NULL}-al van
le\-z\'ar\-va.
\end{description}

A f\"ugg\-v\'eny vi\discretionary{sz-}{sz}{ssz}a\-t\'e\-r\'e\-si \'er\-t\'e\-ke az \'ujon\-nan l\'et\-re\-ho\-zott ob\-jek\-tum azo\-no\-s\'\i{}\-t\'o\-ja.

\begin{tt}
\begin{verbatim}
    frame = xv_create(NULL, FRAME,
        XV_WIDTH,        200,
        XV_HEIGHT,       150,
        FRAME_LABEL,     "Sample Frame",
        NULL);
\end{verbatim}
\end{tt}

 \item[{\tt xv\_find()}]: Meg\-ke\-re\-si a spe\-ci\-fi\-k\'a\-ci\-\'ok\-nak meg\-fe\-le\-l\H o ob\-jek\-tu\-mot,
\'es an\-nak az azo\-no\-s\'\i{}\-t\'o\-j\'at ad\-ja vi\discretionary{sz-}{sz}{ssz}a. Ha nem ta\-l\'al ilyen ob\-jek\-tu\-mot, l\'et\-re\-hoz
egyet.

A f\"ugg\-v\'eny dek\-la\-r\'a\-ci\-\'o\-ja ana\-l\'og az {\tt xv\_create()} dek\-la\-r\'a\-ci\-\'o\-j\'a\-val.  
\item[{\tt xv\_destroy()}] vagy
 \item[{\tt xv\_destroy\_safe()}]: Meg\-sem\-mi\-s\'\i{}t egy ob\-jek\-tu\-mot, \'es min\-den
ab\-la\-kot, ami\-nek ez volt a tu\-laj\-do\-no\-sa. A m\'a\-so\-dik alak el\H obb meg\-gy\H o\-z\H o\-dik r\'o\-la,
hogy ez biz\-ton\-s\'a\-gos-e. ({\em call\-back} ru\-tin bel\-se\-j\'e\-ben az ese\-m\'enyt ki\-v\'al\-t\'o
ob\-jek\-tu\-mot csak a m\'a\-so\-dik alak\-kal sza\-bad meg\-sem\-mi\-s\'\i{}\-te\-ni.)

A f\"ugg\-v\'e\-nyek dek\-la\-r\'a\-ci\-\'o\-ja: \\
\begin{tt}
int xv\_dest\-roy(ob\-ject) \\
Xv\_ob\-ject ob\-ject;

int xv\_dest\-roy\_sa\-fe(ob\-ject) \\
Xv\_ob\-ject ob\-ject;
\end{tt}

\begin{description}
 \item[{\tt object}:] A meg\-sem\-mi\-s\'\i{}\-ten\-d\H o ob\-jek\-tum azo\-no\-s\'\i{}\-t\'o\-ja.
\end{description}

A f\"ugg\-v\'e\-nyek vi\discretionary{sz-}{sz}{ssz}a\-t\'e\-r\'e\-si \'er\-t\'e\-ke {\tt XV\_ERROR} vagy {\tt XV\_OK}.

\begin{tt}
\begin{verbatim}
    ercode = xv_destroy_safe(frame);
\end{verbatim}
\end{tt}

 \item[{\tt xv\_set()}]: Egy tet\-sz\H o\-le\-ges ob\-jek\-tum att\-ri\-b\'u\-tu\-ma\-i\-nak \'er\-t\'e\-k\'et
\'al\-l\'\i{}t\-ja.

A f\"ugg\-v\'eny dek\-la\-r\'a\-ci\-\'o\-ja: \\
\begin{tt}
Xv\_opa\-que xv\_set(ob\-ject, attrs) \\
Xv\_ob\-ject ob\-ject; \\
$<${\tt att\-ri\-b\'u\-tum-\'er\-t\'ek lis\-ta}$>$ attrs;
\end{tt}

\begin{description}
 \item[{\tt object}] Az ob\-jek\-tum, ame\-lyik\-hez tar\-to\-z\'o att\-ri\-b\'u\-tu\-mo\-kat \'al\-l\'\i{}\-ta\-ni
sze\-ret\-n\'enk.

 \item[{\tt attrs}] Mint {\tt xv\_create}-n\'el.
\end{description}

A f\"ugg\-v\'eny vi\discretionary{sz-}{sz}{ssz}a\-t\'e\-r\'e\-si \'er\-t\'e\-ke {\tt XV\_OK}, ha si\-ke\-res volt az \'al\-l\'\i{}\-t\'as,
egy\'eb\-k\'ent egy hi\-ba\-k\'od, ami ar\-ra az att\-ri\-b\'u\-tum\-ra utal, ame\-lyik\-kel kap\-cso\-lat\-ban
a hi\-ba fel\-me\-r\"ult.

\begin{tt}
\begin{verbatim}
    ercode = xv_set(frame,
        FRAME_SHOW_FOOTER,   TRUE,
        NULL);
\end{verbatim}
\end{tt}
 \item[{\tt xv\_get()}]: Egy tet\-sz\H o\-le\-ges ob\-jek\-tum egy att\-ri\-b\'u\-tu\-m\'a\-nak \'er\-t\'e\-k\'et
k\'er\-de\-zi le.

A f\"ugg\-v\'eny dek\-la\-r\'a\-ci\-\'o\-ja: \\
\begin{tt}
Xv\_opa\-que xv\_get(ob\-ject, attrs) \\
Xv\_ob\-ject ob\-ject; \\
Attr\_att\-ri\-bu\-te attr;
\end{tt}

\begin{description}
 \item[{\tt object}] Az ob\-jek\-tum, ame\-lyik\-nek egy att\-ri\-b\'u\-tu\-m\'at le\-k\'er\-dez\-ni
sze\-ret\-n\'enk.

 \item[{\tt attr}] Az att\-ri\-b\'u\-tum, ami\-re k\'\i{}\-v\'an\-csi\-ak va\-gyunk. Ezen a he\-lyen
el\H o\-for\-dul\-hat t\"obb att\-ri\-b\'u\-tum is, n\'e\-h\'any ki\-v\'e\-te\-les eset\-ben.
\end{description}

A f\"ugg\-v\'eny az att\-ri\-b\'u\-tum \'er\-t\'e\-k\'e\-vel t\'er vi\discretionary{sz-}{sz}{ssz}a ha si\-ke\-res volt az \'al\-l\'\i{}\-t\'as,
egy\'eb\-k\'ent nul\-l\'a\-val. Eb\-b\H ol k\"o\-vet\-ke\-zik, hogy nem de\-tek\-t\'al\-ha\-t\'o a hi\-ba, ha a nul\-la
\'er\-v\'e\-nyes \'er\-t\'e\-ke az att\-ri\-b\'u\-tum\-nak.

\begin{tt}
\begin{verbatim}
    label = (char *)xv_get(frame, FRAME_LEFT_FOOTER);

    value = (int)xv_get(button,
                     XV_KEY_DATA, MY_BUTTON_VALUE);
\end{verbatim}
\end{tt}

A m\'a\-so\-dik p\'el\-da egy olyan att\-ri\-b\'u\-tum le\-k\'er\-de\-z\'e\-s\'et mu\-tat\-ja, ami k\'et \'er\-t\'e\-ket
vesz fel. Az el\-s\H o \'er\-t\'ek, ame\-lyi\-ket le\-k\'er\-de\-z\'es\-kor is meg kell ad\-ni, a prog\-ra\-mo\-z\'o
\'al\-tal meg\-a\-dott azo\-no\-s\'\i{}\-t\'o, a m\'a\-so\-dik pe\-dig az eh\-hez ren\-delt \'er\-t\'ek. Ez\-zel a
m\'od\-szer\-rel a prog\-ra\-mo\-z\'o az ob\-jek\-tu\-mok\-hoz hoz\-z\'a\-ren\-del\-het bi\-zo\-nyos \'er\-t\'e\-ke\-ket,
amit k\'e\-s\H obb le tud k\'er\-dez\-ni.

 \item[{\tt xv\_main\_loop()}]: Ez a f\"ugg\-v\'eny\-h\'\i{}\-v\'as el\-in\-d\'\i{}t\-ja a No\-ti\-fi\-ert. A
prog\-ram \'al\-tal ko\-r\'ab\-ban l\'et\-re\-ho\-zott ob\-jek\-tu\-mok va\-l\'o\-j\'a\-ban ek\-kor j\"on\-nek l\'et\-re,
\'es et\-t\H ol kezd\-ve kap a prog\-ram ese\-m\'e\-nye\-ket. Ez a f\"ugg\-v\'eny min\-dad\-dig nem l\'ep ki,
am\'\i{}g va\-la\-me\-lyik {\em call\-back} ru\-tin egy {\tt notify\_stop()} f\"ugg\-v\'eny\-h\'\i{}\-v\'ast
nem v\'e\-gez, vagy ki nem l\'ep. A f\"ugg\-v\'eny pa\-ra\-m\'e\-te\-re egy ob\-jek\-tum, \'al\-ta\-l\'a\-ban a
{\em ba\-se fra\-me}\footnote{L\'asd \ref{xview:obj:frame} fe\-je\-zet.}.

\end{description}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
 \subsection{Ob\-jek\-tu\-mosz\-t\'a\-lyok hi\-e\-rar\-chi\-\'a\-ja}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \label{xview:hier}
Az XVi\-ew sok\-f\'e\-le ab\-la\-kot tar\-tal\-maz, ezek k\"o\-z\"ul a fon\-to\-sab\-bak:

\begin{itemize}
 \item Fra\-me: Ez az alap ab\-lak, ami m\'as ab\-la\-ko\-kat tar\-tal\-maz\-hat.
 \item Can\-vas: Ezek\-re le\-het a prog\-ram\-b\'ol raj\-zol\-ni. (Fes\-t\H o\-v\'a\-szon.)

 \item Text sub\-win: Be\-\'e\-p\'\i{}\-tett sz\"o\-veg\-szer\-kesz\-t\H oi funk\-ci\-\'o\-kat tar\-tal\-maz.


 \item Pa\-nel: Er\-re le\-het olyan el\-e\-me\-ket fel\-he\-lyez\-ni, mint gom\-bok, me\-n\"uk, stb.
\end{itemize}

Az ob\-jek\-tu\-mok meg\-je\-le\-n\'e\-s\'e\-nek, vi\-sel\-ke\-d\'e\-s\'e\-nek \'al\-l\'\i{}\-t\'a\-s\'a\-ra szol\-g\'al\-nak az
att\-ri\-b\'u\-tu\-mok. Ezek\-b\H ol h\'a\-rom k\"u\-l\"on\-b\"o\-z\H o t\'\i{}\-pu\-s\'u l\'e\-te\-zik:

\begin{itemize}
 \item \'Al\-ta\-l\'a\-nos ({\em ge\-ne\-ric\/}): Ezek az att\-ri\-b\'u\-tu\-mok min\-den XVi\-ew
ob\-jek\-tum\-ra vo\-nat\-koz\-nak. A ne\-v\"uk {\tt XV\_}-vel kez\-d\H o\-dik.

 \item K\"o\-z\"os ({\em com\-mon\/}): Sok, de nem az \"o\discretionary{sz-}{sz}{ssz}es ob\-jek\-tum\-ra vo\-nat\-koz\-nak.

 \item Egye\-di ({\em spe\-ci\-fic\/}): Csak egy bi\-zo\-nyos ob\-jek\-tu\-mosz\-t\'a\-lyok\-ra
vo\-nat\-ko\-z\'o att\-ri\-b\'u\-tu\-mok. A ne\-v\"uk \'al\-ta\-l\'a\-ban az osz\-t\'aly ne\-v\'e\-vel kez\-d\H o\-dik, p\'el\-d\'a\-ul
{\tt MENU\_\/}. A csak ab\-la\-kok\-ra vo\-nat\-ko\-z\'o att\-ri\-b\'u\-tu\-mok a {\tt WIN\_}
el\H o\-tag\-gal kez\-d\H od\-nek.
\end{itemize}

Az att\-ri\-b\'u\-tu\-mok \'al\-l\'\i{}\-t\'a\-s\'a\-ra le\-he\-t\H o\-s\'eg van az ob\-jek\-tum l\'et\-re\-ho\-z\'a\-sa\-kor az {\tt
xv\_create} f\"ugg\-v\'e\discretionary{ny-}{ny}{nny}el, vagy k\'e\-s\H obb, az {\tt xv\_set} f\"ugg\-v\'e\discretionary{ny-}{ny}{nny}el. Az
att\-ri\-b\'u\-tu\-mok le\-k\'er\-de\-z\'e\-s\'e\-re szol\-g\'al az {\tt xv\_get} f\"ugg\-v\'eny. A leg\-t\"obb
att\-ri\-b\'u\-tum \'er\-t\'e\-ke \'al\-l\'\i{}t\-ha\-t\'o \'es le is k\'er\-dez\-he\-t\H o. Van\-nak azon\-ban olya\-nok,
ame\-lyek csak \'al\-l\'\i{}t\-ha\-t\'ok (pl. {\tt SERVER\_IMAGE\_BITS}), il\-let\-ve csak
le\-k\'er\-dez\-he\-t\H ok (pl. {\tt WIN\_FRAME}).

Az \"o\discretionary{sz-}{sz}{ssz}es XVi\-ew ob\-jek\-tu\-mosz\-t\'aly hi\-e\-rar\-chi\-\'a\-ja l\'at\-ha\-t\'o az \ref{fig:hier}. \'ab\-r\'an.
A hi\-e\-rar\-chi\-\'a\-ban ala\-cso\-nyab\-ban le\-v\H o ob\-jek\-tu\-mok \"or\"ok\-lik az \H ose\-ik att\-ri\-b\'u\-tu\-ma\-it.
Az \'ab\-r\'an ta\-l\'al\-ha\-t\'o {\em Ge\-ne\-ric Ob\-ject\/}, {\em Dra\-wab\-le} \'es {\em Open\-win}
ob\-jek\-tu\-mok\-hoz nem tar\-to\-zik funk\-ci\'o, csak az \"or\"ok\-l\H o\-d\'e\-si lo\-gi\-ka fenn\-tar\-t\'a\-s\'at
szol\-g\'al\-j\'ak.

\setlength{\unitlength}{1.2mm}
\begin{figure}[p]
\begin{center}
\begin{picture}(100,140)
\put(60,0){\framebox(20,10){Pa\-nel}}
\put(70,10){\line(0,1){10}}
\put(60,20){\framebox(20,10){Can\-vas}}
\put(70,30){\line(0,1){5}}
\put(35,20){\framebox(20,10){Text}}
\put(45,30){\line(0,1){5}}
\put(45,35){\line(1,0){25}}
\put(60,35){\line(0,1){5}}
\put(50,40){\framebox(20,10){(Open\-win)}}
\put(60,50){\line(0,1){25}}
\put(35,55){\framebox(20,10){Tty}}
\put(45,65){\line(0,1){5}}
\put(20,40){\framebox(20,10){Fra\-me}}
\put(30,50){\line(0,1){20}}
\put(65,55){\framebox(20,10){Scroll\-bar}}
\put(75,65){\line(0,1){5}}
\put(80,40){\framebox(20,10){Icon}}
\put(90,50){\line(0,1){20}}
\put(30,70){\line(1,0){60}}
\put(50,75){\framebox(20,10){Win\-dow}}
\put(60,85){\line(0,1){5}}
\put(25,75){\framebox(20,10){Ser\-ver ima\-ge}}
\put(35,85){\line(0,1){5}}
\put(35,90){\line(1,0){25}}
\put(50,90){\line(0,1){5}}
\put(40,95){\framebox(20,10){(Dra\-wab\-le)}}
\put(50,105){\line(0,1){25}}
\put(27,110){\framebox(20,10){Cur\-sor}}
\put(37,120){\line(0,1){5}}
\put(14,95){\framebox(20,10){Scre\-en}}
\put(24,105){\line(0,1){20}}
\put(1,110){\framebox(20,10){Ser\-ver}}
\put(11,120){\line(0,1){5}}
\put(53,110){\framebox(20,10){Fullsc\-re\-en}}
\put(63,120){\line(0,1){5}}
\put(66,95){\framebox(20,10){Font}}
\put(76,105){\line(0,1){20}}
\put(79,110){\framebox(20,10){Me\-nu}}
\put(89,120){\line(0,1){5}}
\put(11,125){\line(1,0){78}}
\put(35,130){\framebox(30,10){Ge\-ne\-ric Ob\-ject}}
\end{picture}
\caption{Az XVi\-ew oszt\'alyok hi\-e\-rar\-chi\'aja}
\label{fig:hier}
\end{center}
\end{figure}
\setlength{\unitlength}{1mm}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
 \subsection{Ob\-jek\-tu\-mok t\'\i{}\-pu\-sai}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \label{xview:obj}

Az XVi\-ew ob\-jek\-tu\-mok ke\-ze\-l\'e\-se\-kor hasz\-n\'alt att\-ri\-b\'u\-tu\-mok leg\-na\-gyobb r\'e\-sze
\'al\-ta\-l\'a\-nos, min\-den ob\-jek\-tum\-ra \'er\-v\'e\-nyes ha\-t\'a\-s\'u. Ezek k\"o\-z\"ul so\-ro\-lom fel itt a
leg\-fon\-to\-sab\-ba\-kat.

\begin{description}
 \item[{\tt XV\_X}]: Egy ob\-jek\-tum {\tt x} ko\-or\-di\-n\'a\-t\'a\-j\'at ad\-ja meg, re\-la\-t\'\i{}\-van a
sz\"u\-l\H o ob\-jek\-tum\-hoz.
 \item[{\tt XV\_Y}]: Egy ob\-jek\-tum {\tt y} ko\-or\-di\-n\'a\-t\'a\-j\'at ad\-ja meg, re\-la\-t\'\i{}\-van
a sz\"u\-l\H o ob\-jek\-tum\-hoz.

 \item[{\tt XV\_WIDTH}]: Az ob\-jek\-tum sz\'e\-les\-s\'e\-ge pi\-xe\-lek\-ben.
 \item[{\tt XV\_HEIGHT}]: Az ob\-jek\-tum ma\-gas\-s\'a\-ga pi\-xe\-lek\-ben.
 \item[{\tt XV\_SHOW}]: Azt \'al\-l\'\i{}t\-ja vagy ad\-ja vi\discretionary{sz-}{sz}{ssz}a, hogy az ob\-jek\-tum
l\'at\-ha\-t\'o-e.
\end{description}

A k\"o\-vet\-ke\-z\H o n\'e\-h\'any al\-fe\-je\-zet\-ben a leg\-gyak\-rab\-ban hasz\-n\'alt
ob\-jek\-tum\-t\'\i{}\-pu\-sok\-r\'ol \'\i{}runk. Le\-\'\i{}r\-juk az adott ob\-jek\-tum funk\-ci\-\'o\-j\'at, jel\-lem\-z\H o\-it,
fon\-to\-sabb att\-ri\-b\'u\-tu\-ma\-it. \'Al\-ta\-l\'a\-ban megp\-r\'o\-b\'al\-juk p\'el\-d\'ak\-kal is szem\-l\'el\-tet\-ni a
hasz\-n\'a\-la\-tu\-kat. Az ikon (icon), kur\-zor (cur\-sor) \'es ima\-ge (Ser\-ver\_ima\-ge)
ob\-jek\-tu\-mok\-r\'ol majd csak a \ref{graf}. fe\-je\-zet\-ben, a gra\-fi\-ka ke\-re\-t\'en be\-l\"ul esik
sz\'o.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
  \subsubsection{Fra\-me}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  \label{xview:obj:frame}

A fra\-me a XVi\-ew prog\-ra\-mok egyik leg\-fon\-to\-sabb ob\-jek\-tu\-ma. A fra\-me-ek f\H o
funk\-ci\-\'o\-ja m\'as ab\-la\-kok t\'a\-ro\-l\'a\-sa, fel\-\"u\-gye\-le\-te. K\'et t\'\i{}\-pu\-suk l\'e\-te\-zik, a {\bf ba\-se
fra\-me} \'es a {\bf com\-mand fra\-me}. Az el\-s\H o\-b\H ol le\-ga\-l\'abb egyet min\-den prog\-ram\-nak
tar\-tal\-maz\-nia kell, er\-re \'ep\'\i{}t\-he\-ti fel az ab\-la\-ko\-kat \'es egy\'eb ob\-jek\-tu\-mo\-kat. A
m\'a\-so\-dik t\'\i{}\-pus r\"o\-vid ide\-ig l\'e\-te\-z\H o ob\-jek\-tu\-mok meg\-je\-le\-n\'\i{}\-t\'e\-s\'et szol\-g\'al\-ja. Az
OPEN\-LO\-OK meg\-va\-l\'o\-s\'\i{}\-t\'as\-ban a com\-mand fra\-me egy rajzs\-z\"og\-gel ({\em push-pin}) van
``fel\-t\H uz\-ve'' a h\'at\-t\'er\-re, en\-nek ki\-h\'u\-z\'a\-sa\-kor \'al\-ta\-l\'a\-ban el\-t\H u\-nik.

A prog\-ra\-mo\-z\'as\-kor fon\-tos tud\-ni, hogy a com\-mand fra\-me l\'et\-re\-ho\-z\'a\-sa\-kor az {\tt
XV\_SHOW} ar\-gu\-men\-tum \'er\-t\'e\-ke {\tt FALSE} \'es hogy a fra\-me-hez
au\-to\-ma\-ti\-ku\-san l\'et\-re\-j\"on egy hoz\-z\'a tar\-to\-z\'o pa\-nel is. A fra\-mek n\'e\-h\'any spe\-ci\-\'a\-lis
att\-ri\-b\'u\-tu\-ma:

\begin{description}
 \item[{\tt FRAME\_ICON}]: A fra\-me-hez tar\-to\-z\'o ikont ad\-ja meg.

 \item[{\tt FRAME\_CLOSED}]: Azt ad\-ja meg, hogy a fra\-me iko\-ni\-z\'alt \'al\-la\-pot\-ban
van-e.

 \item[{\tt FRAME\_BUSY}]: Ha {\tt TRUE}, ak\-kor a fra\-me fej\-l\'e\-ce be\-sz\"ur\-k\"ul,
\'es a kur\-zor \'at\-v\'alt egy \'ora\-a\-lak\-ra.

 \item[{\tt FRAME\_LABEL}]: A fra\-me fej\-l\'e\-c\'e\-be ke\-r\"u\-l\H o sz\"o\-veg.

 \item[{\tt FRAME\_CMD\_PANEL}]: A com\-mand fra\-me de\-fa\-ult pa\-ne\-le.

 \item[{\tt FRAME\_CMD\_PUSHPIN\_IN}]: A com\-mand fra\-me rajzs\-z\"o\-g\'e\-nek 
\'al\-la\-po\-t\'at \'al\-l\'\i{}t\-ja, k\'er\-de\-zi le.

\item[{\tt FRAME\_DONE\_PROC}]: A com\-mand fra\-me meg\-sem\-mi\-s\'\i{}\-t\'e\-se\-kor
meg\-h\'\i{}\-vott {\em call\-back} ru\-tin.
\end{description}

\begin{tt}
\begin{verbatim}
    frame = (Frame)xv_create(NULL, FRAME,
        FRAME_LABEL,      "Sample Frame",
        NULL);

    popup = (Frame)xv_create(frame, FRAME_CMD,
        FRAME_DONE_PROC,  done_proc,
        NULL);
\end{verbatim}
\end{tt}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
  \subsubsection{Pa\-nel}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  \label{xview:obj:panel}

A {\bf pa\-nel} az XVi\-ew ve\-z\'er\-l\'e\-si funk\-ci\-\'o\-kat meg\-va\-l\'o\-s\'\i{}\-t\'o ab\-la\-ka. Ezen le\-het
l\'et\-re\-hoz\-ni nyo\-m\'o\-gom\-bo\-kat, me\-n\"u\-ket, stb. A pa\-nel leg\-fon\-to\-sabb att\-ri\-b\'u\-tu\-ma:

\begin{description}
 \item[{\tt PANEL\_LAYOUT}]: A pa\-nel\-re fel\-vitt ob\-jek\-tu\-mok el\-he\-lye\-z\'e\-s\'e\-nek
sor\-rend\-j\'et ad\-ja meg. \'Er\-t\'e\-ke le\-het {\tt PANEL\_HORIZONTAL} vagy {\tt
PANEL\_VERTICAL}.

\end{description}

A pa\-ne\-lek\-re el\-he\-lyez\-he\-t\H o ob\-jek\-tu\-mok k\"o\-z\"ul a gyak\-ran hasz\-n\'al\-tak a
k\"o\-vet\-ke\-z\H ok:

\begin{description}
 \item[but\-ton]: Soft\-wa\-re nyo\-m\'o\-gomb, fel\-i\-rat vagy {\em ima\-ge} le\-het raj\-ta,
meg\-nyo\-m\'a\-sa ese\-m\'enyt v\'alt ki.

 \item[me\-nu]: Me\-n\"u, t\"obb faj\-t\'a\-ja l\'e\-te\-zik. K\"o\-z\"os ben\-n\"uk, hogy le\-he\-t\H o\-s\'e\-get
biz\-to\-s\'\i{}\-ta\-nak t\"obb t\'e\-tel k\"o\-z\"u\-li v\'a\-lasz\-t\'as\-ra.
\end{description}

L\'e\-te\-zik egy gyak\-ran hasz\-nos mak\-r\'o a pa\-ne\-lek\-hez, ami az \"o\discretionary{sz-}{sz}{ssz}es pa\-nel\-re
fel\-he\-lye\-zett ob\-jek\-tum azo\-no\-s\'\i{}\-t\'o\-j\'at ad\-ja vi\discretionary{sz-}{sz}{ssz}a. Az el\-s\H o pa\-ra\-m\'e\-te\-re be\-me\-n\H o, a
pa\-nel azo\-no\-s\'\i{}\-t\'o\-ja, a m\'a\-so\-dik\-ban pe\-dig vi\discretionary{sz-}{sz}{ssz}a\-ad\-ja egyen\-k\'ent az ob\-jek\-tu\-mok
azo\-no\-s\'\i{}\-t\'o\-it. En\-nek hasz\-n\'a\-la\-t\'a\-ra l\'at\-ha\-t\'o p\'el\-da a k\"o\-vet\-ke\-z\H ok\-ben:

\begin{tt}
\begin{verbatim}
    Panel panel;
    Panel_item item;

    PANEL_EACH_ITEM(panel, item)
        xv_set(item, PANEL_INACTIVE, TRUE, NULL);
    PANEL_END_EACH
\end{verbatim}
\end{tt}
A prog\-ram\-r\'esz\-let egy pa\-nel \"o\discretionary{sz-}{sz}{ssz}es ob\-jek\-tu\-m\'at inak\-t\'\i{}v\-v\'a te\-szi.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
  \subsubsection{Can\-vas}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  \label{xview:obj:canvas}

A {\bf can\-vas} az az ab\-lak\-t\'\i{}\-pus, ami a le\-gal\-kal\-ma\-sabb gra\-fi\-ka meg\-je\-le\-n\'\i{}\-t\'e\-s\'e\-re
\'es ese\-m\'e\-nyek fo\-ga\-d\'a\-s\'a\-ra. Ami\-kor egy can\-vas-r\'ol be\-sz\'e\-l\"unk, ak\-kor iga\-z\'a\-b\'ol
h\'a\-rom ob\-jek\-tu\-mot \'er\-t\"unk alat\-ta:

\begin{description}
 \item[Can\-vas sub\-win\-dow]: Ez az ab\-lak az, ami a fra\-me le\-sz\'ar\-ma\-zott\-ja, \'es ez
tar\-tal\-maz egy vagy t\"obb {\em vi\-ew win\-dow\/}-t. Ez tu\-laj\-don\-k\'ep\-pen egy ke\-ret,
ami le\-he\-t\H o\-v\'e te\-szi, hogy egy ob\-jek\-tum\-k\'ent hi\-vat\-koz\-has\-sunk a can\-vas-ra.

 \item[Vi\-ew win\-dow]: Ezt az ab\-la\-kot \'ugy kell el\-k\'ep\-zel\-ni, mint egy \'at\-l\'at\-sz\'o
ke\-re\-tet, amin ke\-resz\-t\"ul l\'at\-ha\-t\'o a {\em pa\-int win\-dow} egy r\'e\-sze. Ilyen\-b\H ol egy
can\-vas egyi\-de\-j\H u\-leg t\"ob\-bet is tar\-tal\-maz\-hat, \'es ilyen\-kor egy\-szer\-re t\"obb
r\'esz\-le\-te l\'at\-ha\-t\'o a rajz\-nak.

 \item[Pa\-int win\-dow]: Eb\-be az ab\-lak\-ba ke\-r\"ul a gra\-fi\-ka, \'es ide \'er\-kez\-nek az
ese\-m\'e\-nyek. Ezt az ob\-jek\-tu\-mot egy nagy fes\-t\H o\-v\'a\-szon\-k\'ent le\-het el\-k\'ep\-zel\-ni, ami\-re
tet\-sz\'es sze\-rint fest\-he\-t\"unk, de a k\'e\-per\-ny\H on csak azok a r\'e\-szei fog\-nak l\'at\-sza\-ni,
ame\-lyek fe\-lett van egy {\em vi\-ew win\-dow\/}.

\end{description}

Na\-gyon fon\-tos, hogy a raj\-zo\-l\'o\-ru\-ti\-nok hasz\-n\'a\-la\-t\'a\-n\'al, az ese\-m\'e\-nyek
ki\-v\'a\-lasz\-t\'a\-s\'a\-n\'al, kur\-zor hoz\-z\'a\-ren\-de\-l\'e\-s\'e\-n\'el \'es a {\em call\-back} ru\-tin
meg\-a\-d\'a\-s\'a\-n\'al ne a can\-vas-t, ha\-nem a {\em pa\-int win\-dow\/}-t hasz\-n\'al\-juk! A {\em
pa\-int win\-dow} azo\-no\-s\'\i{}\-t\'o\-j\'at a {\tt canvas\_paint\_window(can\-vas)}
f\"ugg\-v\'eny\-h\'\i{}\-v\'as\-sal kap\-hat\-juk meg.

A {\em pa\-int win\-dow} pa\-ra\-m\'e\-te\-re\-i\-nek be\-\'al\-l\'\i{}\-t\'a\-s\'a\-ra ren\-del\-ke\-z\'es\-re \'all egy
att\-ri\-b\'u\-tum. Ez a {\tt CANVAS\_PAINTWINDOW\_ATTRS}, ami ut\'an
att\-ri\-b\'u\-tum-\'er\-t\'ek p\'a\-rok\-kal le\-het meg\-ad\-ni a {\em pa\-int win\-dow} att\-ri\-b\'u\-tu\-ma\-it,
a v\'e\-g\'en egy {\tt NULL}-al le\-z\'ar\-va.

A k\"o\-vet\-ke\-z\H ok\-ben n\'e\-h\'any fon\-tos can\-vas att\-ri\-b\'u\-tu\-mot r\'esz\-le\-te\-z\"unk.

\begin{description}
 \item[{\tt CANVAS\_WIDTH}] \'es
 \item[{\tt CANVAS\_HEIGHT}]: A {\em pa\-int win\-dow} m\'e\-re\-te\-it \'al\-l\'\i{}t\-j\'ak. A {\em
can\-vas sub\-win\-dow} m\'er\-te\-i\-nek \'al\-l\'\i{}\-t\'a\-s\'a\-ra az {\tt XV\_WIDTH} \'es {\tt
XV\_HEIGHT} att\-ri\-b\'u\-tu\-mo\-kat kell hasz\-n\'al\-ni.
 \item[{\tt CANVAS\_REPAINT\_PROC}]: A {\em pa\-int win\-dow} \'uj\-ra\-fes\-t\'e\-s\'et
v\'eg\-z\H o {\em call\-back} ru\-tin. A can\-vas-hoz kell ren\-del\-ni.
 \item[{\tt CANVAS\_X\_PAINT\_WINDOW}]: Ami\-kor az \'er\-t\'e\-ke {\tt TRUE},
to\-v\'ab\-bi pa\-ra\-m\'e\-te\-re\-ket ad az \'uj\-ra\-fes\-t\'est v\'eg\-z\H o f\"ugg\-v\'eny h\'\i{}\-v\'a\-s\'a\-hoz. Ez
k\"u\-l\"o\-n\"o\-sen ak\-kor hasz\-nos, ha az \'uj\-ra\-fes\-t\'es so\-r\'an Xlib szin\-t\H u gra\-fi\-k\'at hasz\-n\'al
a prog\-ram, mert a hoz\-z\'a\-a\-dott pa\-ra\-m\'e\-te\-rek ezt k\"o\discretionary{ny-}{ny}{nny}\'\i{}\-tik meg. A k\'et\-f\'e\-le
\'uj\-ra\-fes\-t\H o ru\-tin fej\-l\'e\-ce:

Ha a fen\-ti att\-ri\-b\'u\-tum \'er\-t\'e\-ke {\tt TRUE}:
\begin{tt}
\begin{verbatim}
void repaint_proc(canvas, paint_win, area)
Canvas canvas;
Xv_Window paint_win;
Rectlist *area;
\end{verbatim}
\end{tt}

Ha pe\-dig az att\-ri\-b\'u\-tum \'er\-t\'e\-ke {\tt FALSE}:

\begin{tt}
\begin{verbatim}
void repaint_proc(canvas, paint_win, dpy, xwin, xrects)
Canvas canvas;
Xv_Window paint_win;
Display *dpy;
Window xwin;
Xv_xrectlist *xrects;
\end{verbatim}
\end{tt}

\end{description}

A can\-vas-ok\-kal gyak\-ran egy\"utt hasz\-n\'al\-nak egy m\'a\-sik ob\-jek\-tu\-mot, a {\bf
scroll\-bar}t. Ez le\-he\-t\H o\-v\'e te\-szi, hogy a {\em pa\-int win\-dow\/}-t a {\em vi\-ew
win\-dow} alatt el\-moz\-gas\-suk, \'es l\'at\-has\-suk min\-den r\'e\-sz\'et. En\'el\-k\"ul a {\em pa\-int
win\-dow} nem le\-het\-ne na\-gyobb m\'e\-re\-t\H u, mint a {\em vi\-ew win\-dow\/}. A scroll\-bart
l\'et\-re\-ho\-z\'a\-sa\-kor tud\-juk a can\-vas-hoz ren\-del\-ni az\-zal, hogy sz\"u\-l\H o ob\-jek\-tum\-k\'ent
a can\-vas-t t\"un\-tet\-j\"uk fel.

A scroll\-bar egyik leg\-fon\-to\-sabb att\-ri\-b\'u\-tu\-ma a {\tt
SCROLLBAR\_DIRECTION}, ami a fek\-v\'e\-s\'et ha\-t\'a\-roz\-za meg. Ez k\'et \'er\-t\'e\-ket ve\-het
fel: \\
{\tt SCROLLBAR\_HORIZONTAL} \\
{\tt SCROLLBAR\_VERTICAL}

A k\"o\-vet\-ke\-z\H o prog\-ram\-r\'esz\-let egy can\-vas l\'et\-re\-ho\-z\'a\-s\'at mu\-tat\-ja be n\'e\-h\'any
att\-ri\-b\'u\-tum \'al\-l\'\i{}\-t\'a\-s\'a\-val, \'es k\'et scroll\-bar hoz\-z\'a\-a\-d\'a\-s\'a\-val.


\begin{tt}
\begin{verbatim}
    canvas = (Canvas)xv_create(frame, CANVAS,
        XV_WIDTH,             100,
        XV_HEIGHT,            100,
        CANVAS_WIDTH,         200,
        CANVAS_HEIGHT,        200,
        CANVAS_REPAINT_PROC,  my_repaint,
        CANVAS_PAINTWINDOW_ATTRS,
            WIN_EVENT_PROC,   my_event,
            WIN_CONSUME_EVENTS,
                WIN_MOUSE_BUTTONS, LOC_MOVE, NULL,
            NULL,
        NULL);

    xv_create(canvas, SCROLLBAR,
        SCROLLBAR_DIRECTION,  SCROLLBAR_HORIZONTAL,
        NULL);
    xv_create(canvas, SCROLLBAR,
        SCROLLBAR_DIRECTION,  SCROLLBAR_VERTICAL,
        NULL);
\end{verbatim}
\end{tt}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
  \subsubsection{No\-ti\-ce}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  \label{xview:obj:notice}

A {\bf no\-ti\-ce} egy spe\-ci\-\'a\-lis XVi\-ew ob\-jek\-tum, ab\-ban az \'er\-te\-lem\-ben, hogy tel\-je\-sen
el\-t\'e\-r\H o m\'o\-don kell ke\-zel\-ni, mint az egy\'eb ob\-jek\-tu\-mo\-kat. A no\-ti\-ce-t nem le\-het
l\'et\-re\-hoz\-ni az {\tt xv\_create} f\"ugg\-v\'e\discretionary{ny-}{ny}{nny}el, \'es az {\tt xv\_get} \'es {\tt
xv\_set} sem al\-kal\-maz\-ha\-t\'o r\'a. Ez az ob\-jek\-tum az egyet\-len nem t\'eg\-la\-lap ala\-k\'u
XVi\-ew ab\-lak. Er\-re az sem igaz, hogy csak a No\-ti\-fi\-er\-hez va\-l\'o vi\discretionary{sz-}{sz}{ssz}a\-t\'e\-r\'es ut\'an
j\"on l\'et\-re. A prog\-ram\-ban b\'ar\-mi\-kor l\'et\-re\-hoz\-ha\-t\'o, \'es a prog\-ram ad\-dig \'all, am\'\i{}g a
no\-ti\-ce meg nem sem\-mi\-s\"ult, azaz a fel\-hasz\-n\'a\-l\'o meg nem nyom\-ja a no\-ti\-ce
va\-la\-me\-lyik nyo\-m\'o\-gomb\-j\'at. A no\-ti\-ce a Fullsc\-re\-en osz\-t\'aly\-ba tar\-to\-zik, ez\'ert
meg\-je\-le\-n\'e\-se\-kor a k\'e\-per\-ny\H o \"o\discretionary{sz-}{sz}{ssz}es ese\-m\'e\-ny\'et \H o kap\-ja. Emi\-att ilyen\-kor a
fel\-hasz\-n\'a\-l\'o nem te\-het m\'ast, mint hogy v\'a\-la\-szol a no\-ti\-ce-ra.

A fen\-ti tu\-laj\-don\-s\'a\-gok\-b\'ol k\"o\-vet\-ke\-zik, hogy a no\-ti\-ce ob\-jek\-tum ide\-\'a\-lis
hi\-ba\-\"u\-ze\-ne\-tek meg\-je\-le\-n\'\i{}\-t\'e\-s\'e\-re, \'es egy\'eb azon\-nal meg\-v\'a\-la\-szo\-lan\-d\'o k\'er\-d\'e\-sek
fel\-te\-v\'e\-s\'e\-re.

A no\-ti\-ce l\'et\-re\-ho\-z\'a\-sa a {\tt notice\_prompt} f\"ugg\-v\'e\discretionary{ny-}{ny}{nny}el le\-het\-s\'e\-ges. Er\-re
mu\-tat p\'el\-d\'at a k\"o\-vet\-ke\-z\H o prog\-ram\-r\'esz\-let.

\begin{tt}
\begin{verbatim}
    notice_prompt(frame, NULL,
        NOTICE_MESSAGE_STRINGS,    "Invalid position.",
                                   NULL,
        NOTICE_BUTTON,             "OK",
        NULL);
\end{verbatim}
\end{tt}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
 \subsection{Prog\-ram\-fej\-lesz\-t\'es az XVi\-ew To\-ol\-kit\-tel}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \label{xview:prg}
Egy \'al\-ta\-l\'a\-nos XVi\-ew prog\-ram a k\"o\-vet\-ke\-z\H o\-k\'ep\-pen \'ep\"ul fel:

\begin{itemize}
 \item Az XVi\-ew ini\-ci\-a\-li\-z\'a\-l\'a\-sa egy {\tt xv\_init()} f\"ugg\-v\'eny\-h\'\i{}\-v\'as\-sal.

 \item Egy leg\-fel\-s\H o szin\-t\H u ab\-lak (fra\-me) l\'et\-re\-ho\-z\'a\-sa.

 \item Ab\-la\-kok l\'et\-re\-ho\-z\'a\-sa a fra\-me-re.

 \item Ob\-jek\-tu\-mok l\'et\-re\-ho\-z\'a\-sa az ab\-la\-kok\-ra.

 \item {\em Call\-back} ru\-ti\-nok meg\-a\-d\'a\-sa \'es az in\-put ese\-m\'e\-nyek ki\-v\'a\-lasz\-t\'a\-sa.

 \item A No\-ti\-fi\-er h\'\i{}\-v\'a\-sa.
\end{itemize}

Az el\-s\H o l\'e\-p\'es el\-ha\-gy\'a\-sa nem okoz hi\-b\'at, de az X el\-ve\-ket s\'er\-ti (a fel\-hasz\-n\'a\-l\'o\-nak
jo\-ga van a prog\-ram bi\-zo\-nyos jel\-lem\-z\H o\-it pa\-rancs\-sor\-b\'ol \'al\-l\'\i{}\-ta\-ni, amit az {\tt
xv\_init()} h\'\i{}\-v\'a\-sa biz\-to\-s\'\i{}t).


Az XVi\-ew prog\-ra\-mok k\"o\-te\-le\-sek be\-ol\-vas\-ni ({\tt \#include} di\-rec\-t\'\i{}\-v\'a\-val) az {\tt
xview/xview.h} fi\-le-t. Ezen\-k\'\i{}\-v\"ul be kell ol\-vas\-ni\-uk min\-den fel\-hasz\-n\'alt
ob\-jek\-tu\-mosz\-t\'aly\-hoz tar\-to\-z\'o inc\-lu\-de fi\-le-t. P\'el\-d\'a\-ul ha egy prog\-ram hasz\-n\'al
can\-vas-t, ak\-kor sze\-re\-pel\-jen ben\-ne a k\"o\-vet\-ke\-z\H o sor:
\begin{tt}
\begin{verbatim}
#include <xview/canvas.h>
\end{verbatim}
\end{tt}


Az XVi\-ew prog\-ra\-mok for\-d\'\i{}\-t\'a\-sa UNIX ope\-r\'a\-ci\-\'os rend\-sze\-ren a k\"o\-vet\-ke\-z\H o m\'o\-don
t\"or\-t\'e\-nik, fel\-t\'e\-te\-lez\-ve, hogy a for\-r\'asp\-rog\-ram ne\-ve {\tt myprog.c}:

\begin{tt}
\begin{verbatim}
cc -I$OPENWINHOME/include myprog.c -o myprog
                               -lxview -lolgx -lX11
\end{verbatim}
\end{tt}

A fi\-le-ban hasz\-n\'alt {\tt \$OPENWINHOME} UNIX rend\-szer\-v\'al\-to\-z\'o tar\-tal\-maz\-za
az Open\-Win\-dows gy\"o\-k\'er\-k\"onyv\-t\'a\-r\'at. A for\-d\'\i{}\-t\'o\-nak meg\-a\-dott k\"onyv\-t\'a\-rak:

\begin{description}
 \item[xvi\-ew]: Az XVi\-ew k\"onyv\-t\'ar

 \item[olgx]: Az OPEN\-LO\-OK gra\-fi\-kus k\"onyv\-t\'ar

 \item[X11]: Az Xlib k\"onyv\-t\'ar
\end{description}
A k\"o\-vet\-ke\-z\H ok\-ben egy p\'el\-da {\tt Makefile}-t mu\-ta\-tunkk be, ami XVi\-ew prog\-ra\-mok
for\-d\'\i{}\-t\'a\-s\'at te\-szi k\'e\-nyel\-me\-seb\-b\'e.

\begin{tt}
\begin{verbatim}
#
# Makefile for compiling XView programs
#

INCLUDE         = -I${OPENWINHOME}/include

#
# Change -O to -g below to compile for debugging
#

CFLAGS          = ${INCLUDE} -O
XVIEW_LIBS      = -L${OPENWINHOME}/lib \
                  -lxview -lolgx -lX11

CFILE           = sample.c

OBJS            = $(CFILE:.c=.o)

PROGRAM         = sample
all:  ${PROGRAM}

${PROGRAM}: ${OBJS}
        ${CC} ${CFLAGS} -o $@ ${OBJS} ${XVIEW_LIBS}

.c.o:
        ${CC} ${CFLAGS} -o $@ -c $<

clean:
        rm -f core ${OBJS} *.o
\end{verbatim}
\end{tt}

A p\'el\-da\-fi\-le egy {\tt sample.c} for\-r\'as\-fi\-le-b\'ol k\'e\-sz\'\i{}t egy {\tt sample} ne\-v\H u
fut\-tat\-ha\-t\'o fi\-le-t. A {\tt Makefile}-ok k\'e\-sz\'\i{}\-t\'e\-s\'e\-vel szin\-te min\-den UNIX-r\'ol
sz\'o\-l\'o k\"onyv fog\-lal\-ko\-zik, \'\i{}gy er\-re itt nem t\'e\-r\"unkk ki.

A prog\-ram\-fej\-lesz\-t\'es so\-r\'an gya\-ko\-ri m\H u\-ve\-let a nyom\-k\"o\-ve\-t\'es. En\-n\'el a m\H u\-ve\-let\-n\'el
na\-gyon za\-va\-r\'o le\-het, hogy az Xlib a pro\-to\-koll k\'e\-rel\-me\-ket pu\discretionary{f-}{f}{ff}e\-re\-li. Emi\-att a
l\'e\-p\'e\-sen\-k\'en\-ti v\'eg\-re\-haj\-t\'as so\-r\'an az adott l\'e\-p\'es ered\-m\'e\-nye nem min\-dig je\-le\-nik
meg a k\'e\-per\-ny\H on. En\-nek ki\-k\"u\-sz\"o\-b\"o\-l\'e\-s\'e\-re aj\'anl\-juk az {\tt XFlush(display)}
f\"ugg\-v\'eny\-h\'\i{}\-v\'ast, ami k\'eny\-sze\-r\'\i{}\-ti az Xlib-et, hogy k\"uld\-je el a k\'e\-rel\-met.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
 \subsection{Egy tel\-jes p\'el\-dap\-rog\-ram}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \label{xview:pelda}
Eb\-ben a r\'esz\-ben egy tel\-jes p\'el\-dap\-rog\-ra\-mot mu\-ta\-tunk be. A prog\-ram l\'et\-re\-hoz egy
fra\-me-et, azon be\-l\"ul egy pa\-nelt, majd a pa\-nel\-re egy nyo\-m\'o\-gom\-bot. A gomb
meg\-nyo\-m\'a\-sa\-kor meg\-e\-r\H o\-s\'\i{}\-t\'est v\'ar, majd ki\-l\'ep.


\begin{tt}
\begin{verbatim}
#include <xview/xview.h>
#include <xview/frame.h>
#include <xview/panel.h>
#include <xview/notice.h>

Frame frame;

Xv_opaque my_notify_proc(item, event)
Panel_item item;
Event *event;
{
    if (NOTIFY_YES == notice_prompt(frame, NULL,
            NOTICE_FOCUS_XY,           event_x(event),
                                       event_y(event),
            NOTICE_MESSAGE_STRINGS,    "Really quit ?",
                                       NULL,
            NOTICE_BUTTON_YES,         "Yes",
            NOTICE_BUTTON_NO,          "No",
            NULL))
        xv_destroy_safe(frame);
}

main(argc, argv)
int argc;
char *argv[];
{
    Panel    panel;

    xv_init(XV_INIT_ARGS, argc, argv, NULL);

    frame = (Frame)xv_create(NULL, FRAME, NULL);
    panel = (Panel)xv_create(frame, PANEL, NULL);
    xv_create(panel, PANEL_BUTTON,
        PANEL_LABEL_STRING,   "Quit",
        PANEL_NOTIFY_PROC,    my_notify_proc,
        NULL);

    window_fit(panel);
    window_fit(frame);
    xv_main_loop(frame);
}
\end{verbatim}
\end{tt}


A prog\-ram a gomb meg\-nyo\-m\'a\-s\'a\-hoz hoz\-z\'a\-ren\-del egy sa\-j\'at ese\-m\'eny\-ke\-ze\-l\H o ru\-tint.
Ez a ru\-tin meg\-e\-r\H o\-s\'\i{}\-t\'est k\'er egy no\-ti\-ce-t hasz\-n\'al\-va, majd ha a fel\-hasz\-n\'a\-l\'o
to\-v\'abb\-ra is ki akar l\'ep\-ni, meg\-sem\-mi\-s\'\i{}\-ti a fra\-me-et. Fon\-tos, hogy mi\-vel az
ese\-m\'eny\-ke\-ze\-l\H o ru\-tin\-b\'ol vi\discretionary{sz-}{sz}{ssz}a\-t\'er\-ve a No\-ti\-fi\-er m\'eg hi\-vat\-ko\-zik a fra\-me-re,
ez\'ert azt a {\em call\-back} ru\-tin\-ban csak az {\tt xv\_destroy\_safe}
f\"ugg\-v\'e\discretionary{ny-}{ny}{nny}el sza\-bad meg\-sem\-mi\-s\'\i{}\-te\-ni. Ha ehe\-lyett az {\tt xv\_destroy}
f\"ugg\-v\'enyt h\'\i{}v\-n\'a meg a prog\-ram, az fu\-t\'a\-si hi\-b\'at okoz\-na. (UNIX alatt a prog\-ram\-b\'ol
{\tt core} fi\-le ke\-let\-ke\-zik.)


A {\tt window\_fit} f\"ugg\-v\'eny ed\-dig nem sze\-re\-pelt. Ez a ru\-tin a
pa\-ra\-m\'e\-te\-re\-k\'ent meg\-a\-dott ab\-lak m\'e\-re\-t\'et az ab\-lak tar\-tal\-m\'a\-t\'ol f\"ug\-g\H o\-en \'al\-l\'\i{}t\-ja
be.

%