hwechtla-tl:
Laiteriippumaton käyttöliittymä
Koska "laiteriippumattomuus" itse asiassa määrittyy sen kautta, mitä
laitteita osaa ottaa huomioon, kerron tässä, mitä laitteita itse haluan
huomioida:
- Graafinen ympäristö (ruutu ei kokonaan omassa käytössä, tarkka
kontrolli sijoitteluun ja ulkonäköön)
- Curses (muuten niin kuin graafinen, mutta pelkkiä merkkejä
käytettävissä, sijoittelu merkin tarkkuudella, tyypillisesti koko
ruutu hallinnassa, yksi implisiittinen kursori koko ruudulla)
- Nopea virta, esim. perinteinen Unix-I/O vaikkapa tyhmälle tty:lle
(ei voi liikkua ympäriinsä ruudulla, uusi teksti tulee aina
edellisten alle/jälkeen)
- Hidas virta, esim. puhesynteesi (käyttäjä tarvitsee enemmän
mahdollisuuksia hallita käyttöliittymää, esim. keskeyttää sen)
Olennaista on se, että käyttöliittymän ei pidä olla määritelty
perinteisellä widget-tasolla: erilaisten visuaalisten elementtien
luettelu ei anna riittävästi informaatiota interaktioon näissä
medioissa; pitää edetä kohti loogisia widgettejä, jotka kuvaavat
varsinaista koneen ja ihmisen vuorovaikutusta, eli mitä tietoja kone
tarvitsee ihmiseltä jne.
Olen yrittänyt kerätä näitä widgettejä sillä perusteella, mitä
elementtejä erilaiset ohjelmat sisältävät. Niiden irrallisuus
representaatiosta on vielä vähän niin ja näin, mutta ovat ne parempia
kuin useimpien widget toolkitien valikoima:
- query (kysymys, vastausmuoto vapaa)
- text input (alue, johon käyttäjä voi kirjoittaa vapaamuotoista tai
strukturoitua tekstiä)
- notification (ohjelman lyhyt huomautus)
- float (aina näkyvillä, sisältää ohjeita / toiminteita yhdistettäväksi
muuhun käyttöliittymään)
- selection (käyttäjä valitsee vaihtoehdoista yhden (muistutus itselle -
jokin kohta voi olla edeltä oletuksena))
- list (luettelo, jossa voi liikkua edestakaisin)
- choice (valinta kahden vaihtoehdon välillä)
- diagram (jollain tavoin skaalattu(ja) ja graafisesti esitetty(jä)
numeeri(nen/sia) tieto(ja)
- action (asia, jonka voi tehdä tai jättää tekemättä, esim. tulostus)
- multiselection (käyttäjä valitsee vaihtoehdoista kuinka monta
tahansa)
- canvas (alue, johon ohjelma voi panna haluamiaan asioita)
- editable canvas (canvas, joka reagoi käyttäjän tekemisiin. Itse
asiassa kaikki ohjelman tyypilliset "domain data" ovat tätä...)
- log (alue, johon lisätään pikku hiljaa tekstiä perään)
- group (yhdistää toisiinsa liittyviä widgetejä)
- crossgroup (yhdistää toisiinsa liittyviä widgetejä kaksiulotteisesti)
di-widgetien toteutuksia
Näitä kaikkia on modaalisia (widget pitää "käsitellä" ennen kuin voi
tehdä muuta) että moodittomia (widget toimii yhdessä ja asynkronisesti
muiden samaan modaaliseen ryhmään kuuluvien widgetien kanssa). Lisäksi
olisi mukavaa, jos jotkin widgetit voisivat olla interaktiivisia, esim.
selection, jossa vaihtoehtolista muuttuu kontekstuaalisesti -- tällaisella
voisi toteuttaa esim. file browserin. Jokaisella widgetillä pitäisi
myös olla "title", joka vastaa perinteisten widgetien labelia, ja
"explanation", jossa on pitempi selitys aiheesta.
Näistä pitäisi voida myös rakentaa seuraavia korkean tason semanttisia
widgetejä:
- calendar (päivien selailuun)
- time (ajan kysymiseen)
- range, number, gauge, slider yms. (määriin)
- filebrowser (tiedostojen valitsemiseen)
Ajattelin toteuttaa näitä ensin Pythonilla nopeille virroille. Pitäisi
olla verrattain helppoa myöhemmin tehdä niistä bindingeja muihin
ympäristöihin.
kategoria: projektit
kommentoi
(viimeksi muutettu 27.06.2005 15:41)