Portál AbcLinuxu, 1. května 2025 11:30
Lenže stále povieš 'Tlačidlo', nie 'Niečo, čo pošle jeden signál'. niekomu vadí rozloženie tlačidial v Gnome, niekomu rodielnosť GUI toolkitov a ich stále zmeny (ext. link).
Preto ja chcem vytvoriť len popis prianí na GUI. Ten sa dá prehnať nejakým AI (rule engine, fuzzy logik). (Napríklad!)
Dobrý postreh! Ale nechcel som hneď rozmýšlať 'ako to imlementovať', alebo 'ako to bude fungovať', chcem len _rozmýšlať_...
Takto by mohol vyzerať externy format:
[recommended] 'Gnome dialog template'; [komponents] 'but' { [send-signal] 'OK'; [send-signal] 'Cancel'; [send-signal] 'Wait'; } [komponents] { [store-text][on-change-signal] 'message'; [return-index][dynamic] 'category combo'; } [group][linear please] { [safe] 'but'.'Wait'; [unsafe][default] 'but'.'OK'; [unsafe] 'but'.'Cancel'; } [group] { 'category combo' [note] 'Vyberte si kategoriu'; [default] 'message' [note] 'Sem zapíšte text'; } [signals] { 'but'.'OK'.[send-signal] = 'doOK()'; 'but'.'Cancel'.[send-signel] = 'doCancel()'; 'but'.'Wait'.[send-signal] = 'doWait()'; 'message'.[on-change-signal] = 'updateTitle()'; }
Takto kod v C:
GUI_dialog* d; void initGUI(char** loaded_kategories) { d = GUI_load("gui.conf"); GUI_dynamicData(d, "category combo", loaded_kategories); GUI_makeActual(d); } void doOK() { server_send(GUI_get(d, "message")); } void updateTitle() { if(is_well_formed(GUI_get(d, "message"))) { printf("recipient will be happy!\n"); } else { printf("recipient will be unhappy!\n"); } }
Vsimnite si, ze v externom formate o rozlozeni nehovorim, len odporucam, skupinky a sablonu. V kode sa z inicializaciou a obsluhou GUI nehram.
Ale to nieje dolezite!
[recommend] doporucuje vseobecny mechanizmus, ktorym sa ma vyrobyt GUI z doporuceni [komponents] definuju casti GUI - formulare a dialogy, [group] urcuje layout [signals] signal bindingPovedal by som, ze by bolo uzitocne oddelit tieto veci: - definiciu interface aplikacie - (na to sa bezne pouziva IDL) - rozlozenie gui (analogia k html alebo xml) a jeho napojenie na aplikaciu - styl/tema/skin (analogia k css) GUI prostredie potrebuje vsetky tri veci, zatial co napr. tie AI skripty len tu prvu. Taketo rozdelenie je obvykle. Mozno blizsie k tomu co navrhujes by bolo nedefinovat rozlozenie gui, ale len pomenovat prvky gui a ich prepojenie na aplikaciu a potom nadefinovat samotne gui, ktore by sa odvolavalo na tieto pomenovane prvky. Priklad:
- mam funkciu "doOK()": void doOK(); - Na jej obsluhu potrebujem button, pomenujem ho "OKbutton": Button OKbutton bind OKbutton.clicked -> doOK() - Mam formular 1 obsahujuci OKbutton <form name="formular_1"> <button name="OKbutton" label="OK"/> <button name="Cancelbutton"/> </form> - Mam styl pripadne obsahujuci lokalizovane retazce: button.OKbutton {color:red;} button.Cancelbutton {label:"Zrus";}
Dobre, postupujes logicky! Lenze definujes vzhlad. Ja chcem len funkcnost. Zabudni na moje 1-urovnove [vsetko]. Ponechaj v popise len obsahy oboch [komponents] a zostane:
[send-signal] 'ok'; [send-signal] 'cancel'; [send-signal] 'wait'; [store-text][on-change-signal] 'text' [note] 'Vyberte si kategoriu'; [return-index][dynamic] 'category' [note] 'Sem zapíšte text';
send-signal vysle signal, ked si ho uzivatel vyberie. engine vzycajne vyberie tlacidlo.
store-text drzi text od uzivatela zvycajne inputbox.
return-index vrati index vyberu radio-buttony, combobox
dynamic obsah urci app. (definovane polozky, alebo rozsahy...)
...
Nikdy nepoviem [button], alebo farba, tento v lavo, tento v pravo. Ja chcem totiz usporit cas a sekundarne definovat dost abstraktny model na to, zby sa dal pouzit v GTK, QT, NCurses, ale aj konzole!
Nechcem hovorit o farbe, velkosti, polohe. Len o tom ako som ja schopny prijmat signaly a data, nech sa user, ako to chce. Podme na to __abstraktne.
Mozno by sme sa mohli o tom viacej pobavit, ak by s chcel... a mozno rozsirit nejaky uz funkcny projekt/vlastny projekt...
Radšej pobím v Perle, ale to je nepodstatné, aj tak, by som rád vyrobil niečo takéto:
parser modul: XML ASCII Binary | | | štrukturálny model | layout modul: múdri aloritmus | | | GUI backend: QT KDE ...
To je však hudba budúcnosti a možno absoltne zlý návrh...
sourceforge.net: zaujíma ma mailing-listu a tiež,či nepodporujú niečo iné ako CVS... ja by som radšej Darcs...
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.