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)