Grafikus tervezőrendszerek programozása 10. előadás
DCL bevezetés •DCL = Dialog Control Language •Párbeszédablakok programozási nyelve •AutoCAD ablakai is DCL-ben vannak írva •Például az acad.dcl file •Hierarchikus felépítésű nyelv
DCL példa
DCL alapok •A programozható párbeszédpanelek téglalap alakú részekre (zónákra, tile) tagolódnak. •A zónák önállóan programozhatók, és mozaikszerűen összeépíthetők. •Vannak passzív zónák, melyek csak megjelenítésre szolgálnak, és vannak aktív zónák is, melyek interaktív adatbevitelre szolgálnak
Hierarchikus fa
Jelkészlet •A DCL nyelv jelkészlete –Az abécé betűi és a számjegyek –Speciális jelek: { } = _. : ; " / * •Sztringen belül bármilyen jel előfordulhat •Megjegyzések (C típusúak): –// - egy sornyi megjegyzés –/* */ - jelek közötti megjegyzés
Szintakszis 1. •Fejléc dcl_settings : default_dcl_settings { audit = n; } •Ellenőrzi a DCL file szemantikáját •n értéke: –0 : Nincs ellenőrzés –1 : Hibákat ellenőrzi –2 : Figyelmeztetéseket ad –3 : Javaslatokat ad
Szintakszis 2. •Zóna definíciója name : item1 [ : item2 : item3... ] { attribute1 = value1; attribute2 = value2;... } •Ahol item már elözőleg definiált zóna •A name zóna örökli az összes item zóna attribútumát (balról – jobbra) •A {} zárójelek közötti rész az attribútumokat írhatja felül
Szintakszis 3. •Egy zóna neve csak betűket, számokat és az aláhúzás jelet tartalmazhatja •Például egy gomb definíciója: button : tile { fixed_height = true; is_tab_stop = true; }
Szintakszis 4. •Például az alapesetben kiválasztott gomb definíciója: default_button : button { is_default = true; } •Örökli az előző gomb definícióját és kiegészíti egy új attribútummal
Szintakszis 5. •Egy definiált zónára hivatkozni is lehet name; ill. : name { attribute = value; }
Szintakszis 6. •Attribútumok definiálása attribute = value; •Ahol: –attribute – egy érvényes kulcsszó –value – egy érték ami szöveg vagy kulcsszó •A sort a pontosvessző ( ; ) zárja!
Definiált zóna típusok
Egyszerű példa, DCL hello : dialog { label = ”Hello World Példa”; : text { label = ”Hello World!”; } : button { key = ”accept”; label = ”Rendben”; is_default = true; }
Egyszerű példa, AutoLisp (defun hello ( / dcl_id ) (setq dcl_id (load_dialog ”hello.dcl”)) (if (not (new_dialog ”hello” dcl_id)) (exit) ) (action_tile ”accept” ”(done_dialog)”) (start_dialog) (unload_dialog dcl_id) )
Általános LISP program DCL-el •DCL file betöltése: load_dialog •A dialógus definíciójának betöltése: new_dialog •A dialógus zónáinak beállítása ill. a zónák call-back függvények definíciója: Pl. action_tile •A dialógus ablak megjelenítése: start_dialog •A dialógus ablak kitöltése
Név és kor lekérdezése DCL dialógus ablak Érvénytelen kor megadása Végső dilógus ablak
DCL ablak szerkezete 1. nev_dcl : dialog { label = "Személyes adatok"; : edit_box { label = "Mi a neved: "; mnemonic = "N"; key = "nev"; alignment = centered; edit_limit = 30; edit_width = 30; }
DCL ablak szerkezete 2. : edit_box { label = "Hány éves vagy: "; mnemonic = "H"; key = "kor"; alignment = centered; edit_limit = 3; edit_width = 3; value = ""; }
DCL ablak szerkezete 3. : button { key = "accept"; label = "Rendben"; is_default = true; fixed_width = true; alignment = centered; } : errtile { width = 34; }
Név és kor lekérdezése (AutoLisp) (defun c:nev ( / dcl_id name age ) ; ellenörző függvények ide jönnek (setq dcl_id (load_dialog "name.dcl")) (if (not (new_dialog "nev_dcl" dcl_id)) (exit) ) (set_tile "nev" "Ird ide a neved") (action_tile "nev" "(setq name $value)") (action_tile "kor" "(setq age $value)") (action_tile "accept" "(nev_ell)") (start_dialog) (unload_dialog dcl_id) (alert (strcat "Az Ön neve " name "\nés kora " age)) )
Név ellenőrző függvény (defun nev_ell () (if (or (= (get_tile ”nev”) ”Ird ide a neved”) (= (get_tile ”nev”) ””) ) (set_tile ”error” ”Nem adtad meg a neved!”) (kor_ell) )
Kor ellenőrző függvény (defun kor_ell () (if (< (atoi (get_tile "kor")) 1) (set_tile "error" "Nem érvényes kor!") (done_dialog) )
DCG = DCL code generator
DCG 1.
DCG 2.
DCG 3.
DCG 4.
DCG 5.
DCG 6.
DCG 7.
DCG 8.
DCG 9.