Kehittyneet ominaisuudet Piirtoarkkitehtuurit Leikkaa, kopioi ja liitä Peru, jaetut sovellukset ja makrot Petri Vuorimaa 1
12. Piirtoarkkitehtuuri Petri Vuorimaa 2
12.1 Peruspiirtoliittymä Luo uusi kappale Valitse yksi tai useampi kappale Tuhoa kappale Muuta attribuutteja Muunna kappaleita Kokoa kappaleet ryhmäksi Petri Vuorimaa 3
12.2 Liityntäarkkitehtuuri Suoritettavat komennot Valittu kappalejoukko Piirto tai työskentely Kappalepaletti alue Attribuuttipaletti Peruspiirtokappaleet Petri Vuorimaa 4
Piirrosalue Mallin perusnäyttö Eri alue kuin kangas (canvas) + kangas on alla olevan grafiikkajärjestelmän näkymän liityntä Lista kappaleista takaa-eteen järjestyksessä Kappaleet kuuluvat abstraktiin luokkaan DrawObj Petri Vuorimaa 5
Malli-Näkymä-Kontrolleri DrawObj Drawing Malli DrawObjView DrawView Näkymä Kontrolleri Petri Vuorimaa 6
class Drawing: public Model List of DrawObj objs; List of DrawObj selectedset; void Select(DrawObj *selectedobj); void UnSelect(DrawObj *selectedobj); void UnSelectAll(); void AddObj(DrawObj newobj); void DeleteSelected(); void SelectedToFront(); void SelectedToBack(); void ChangeObj(DrawObj *Obj); Petri Vuorimaa 7
class DrawObj ObjTypeId ObjectType(); DrawObj Copy(); void *GetAttribute(Id attributeid); void SetAttribute(Id attributeid, void * attributevalue); boolean isselected; Petri Vuorimaa 8
class LineObj: public DrawObj ObjTypeId objecttype() { return LINE_TYPE;} Point startpoint, endpoint; int thickness; RGB color; void *GetAttribute(Id attributeid); void SetAttribute(Id attributeid, void * attributevalue); Petri Vuorimaa 9
Class DrawObjView DrawObj *mymodelobj; void Redraw(Region DamegRegion); Rect BoundingRect(); int Ncontrols(); Point GetControl(int pointidx); void SetControl(int pointidx, Point newpoint); void StartControlDrag(int pointidx, Point selectionpoint); void MoveControl (int pointidx, Point movepoint); void EndControlDrag(int pointidx, Point endpoint); Petri Vuorimaa 10
Class DrawObjView void StartCreationEcho(Point downpoint); void MoveCreationEcho(Point movepoint); void SetCreationPoint(Point newpoint); boolean LastCreationPoint(Point newpoint); boolean IsHit(Point selectionpoint); void StartObjDrag(Point selectionpoint); void MoveObj(Point movepoint); void EndObjDrag(Point endpoint); Petri Vuorimaa 11
Mallinäkymien sitominen Jokaista kappaletta kohden pitää olla malli Näkymä per kappale vie paljon tilaa Tyyppinäkymä-taulu on parempi vaihtoehto Tyyppinäkymä-taulu on indeksoitu (ObjTypeId) ja palauttaa DrawObjView Petri Vuorimaa 12
Mallinäkymien sitominen (jatk.) DrawObjView *DrawView:: GetObjView(DrawObj *modelobj); DrawObj DrawObjView Drawing DrawView Petri Vuorimaa 13
Palettiarkkitehtuuri Kolme peruspalettia + kappaleet + attribuutit + toimenpieet Jokaisella paletilla on oma malli-näkymäkontrolleri Petri Vuorimaa 14
Kappalepaletti Petri Vuorimaa 15
Attribuuttipaletti 1. 1. Ikoni on on aktivoitu, kun vähintään yhdellä kappaleella on on kyseinen attribuutti 2. 2. Ikoni on on merkitty, kun kaikilla kappaleilla on on sama attribuutin arvo 3. 3. Kaikkien attribuuttien arvot asetetaan, kun käyttäjä valitsee aktiivisen ikonin Petri Vuorimaa 16
Arkkitehtuurin yhteenveto Arkkitehtuuri: piirtomalli, piirtonäkymä ja paletit Piirtomalli: lista kappaleista ja valituista kappaleista DrawObj: liittymä kappaleiden ja muun arkkitehtuurin välillä DrawView: toteuttaa näkymän ja kontrollerin DrawObjView: DrawViewin vuorovaikutteinen liittymä TypeViewTable: yhdistää tyypin oikeaan näkymään Petri Vuorimaa 17
12.3 Tehtävät Uudelleenpiirto Uuden kappaleen luominen Kappaleen valinta Kappaleiden raahaus Attribuuttien asetus Palettiolioiden attribuuttien asetus Ohjauspisteiden manipulointi Petri Vuorimaa 18
Uudelleenpiirto For each draw object DO in the model list in back to front order { DOV = GetObjView(DO); if (Dov.BoundingRect() intersects DamagedRegion) { DOV.Redraw(DamagedRegion) if (DO.IsSelected) { for each control point C in DOV { draw handle for C } } } } Petri Vuorimaa 19
13. Leikkaa, kopioi ja liitä Interaktiiviset ohjelmat voivat jakaa tietoa Tekstinkäsittelijä voi vastaanottaa tietoa taulukkolaskennasta, tietokannasta, piirto-ohjelmasta jne. Yksinkertainen leikkeletaulu + ei mahdollista muutosten seurantaa Julkaise ja tilaa + sovelluksille voidaan kertoa muutoksista Sulautettu editointi + tietoa voi editoida välittömästi Petri Vuorimaa 20
13.1 Leikkeletaulut Leikkeletaulu on paikka, jonne ohjelmat voivat siirtää tietoa ja toiset voivat hakea sitä 1. Mitä formaattia pitäisi käyttää? 2. Entä jos lähteellä ja käyttäjällä on eri formaatti? 3. Mitä tapahtuu, jos tietoa on todella paljon? Petri Vuorimaa 21
Yksinkertainen leikketaulu Globaali muistialue, jota käyttöjärjestelmä ylläpitää Informaation lisäksi talletetaan tieto formaatista Esim. taulukkolaskenta voi tallettaa excel-, tekstitai bittikartta-formaatissa Formaatti määritellään myös liitettäessä Kuluttaa paljon muistia Formaattien tunnisteista pitää sopia Petri Vuorimaa 22
X Windows Asiakas A Asiakas B A B Petri Vuorimaa 23
X Windows Leiketaulusta käytetään nimeä selection Kun käyttäjä kopioi tekstin, asiakas A kutsuu XSetSelectionOwner Kun käyttäjä liittää tekstin, asiakas B kutsuu XConvertSelection (ja määrittelee formaatin) Asiakas A voi käyttää pyydettyä formaattia tai ehdottaa jotain muuta Asiakas A:n täytyy säilyttää informaatiota käyttöön asti tai kunnes joku muu tekee valinnan Petri Vuorimaa 24
Tarveperustainen leikkeletaulu MS Windowsissa kaikki sovellukset jakavat saman näytön, prosessorin ja käyttöjärjestelmän Leikkeletaulu on lukittava + Openclipboard + CloseClipboard Sovellus kutsuu ensin EmptyClipboard Sen jälkee se kutsuu SetClipboard (jokaiselle formaatille erikseen) Data voidaan tallettaa heti tai myöhemmin Petri Vuorimaa 25
Tarveperustainen leikkeletaulu Liittävä ohjelma valitsee ensin formaatin + IsClipboardFormatAvailable + GetPriorityClipboardFormat + EnumClipboardFormats Sen jälkeen, liittävä ohjelma lukee datan + GetClipboardData Petri Vuorimaa 26
13.2 Julkaise ja tilaa Joskus aktiivinen yhteys sovellusten välillä on parempi ratkaisu kuin pysyvä siirto Koska informaatiota päivitetään? + aina kun lähdeinformaatiossa tapahtuu muutoksia + kun lähdetiedosto talletetaan + kun käyttäjä pyytää sitä Lähdesovellus voi julkaista datan versiotiedostoon ja kohdesovellus tilaa sen Petri Vuorimaa 27
13.3 Sulautettu editointi Tekstinkäsittelyohjelmat voivat hyödyntää informaatiota useasta erillisestä lähteestä Usein on kätevää editoida vierasta dataa suoraan tekstinkäsittelysovelluksessa Kaksi tärkeintä arkkitehtuuria ovat + Microsoft OLE + Apple OpenDoc Petri Vuorimaa 28
Sulautettu liitäntä Mitä pitäisi liittää? + sulautettu data tai linkki alkuperäiseen tiedostoon Tiedostot sisältävät tiedostoja + rakenteinen tiedostojärjestelmä (esim. Microsoft) Data voidaan sarjallistaa (OLE, Java) + data muunnetaan tavuvirraksi ja takaisin dataksi Alkuperäinen sovellus piirtää datan Data voidaan piirtää erityistiedostoon (metafile) Petri Vuorimaa 29
Datan editointi Editoi vieressä + käynnistetään erillinen editori Editoi paikalla + editointi tapahtuu sulautetussa ikkunassa Petri Vuorimaa 30
13.4 Yhteenveto Leikkaa, kopio ja liitä ovat perusmekanismeja interaktiivisten sovellusten integrointiin Yksinkertainen leikkeletaulu on yhteinen muistialue Julkaise ja tilaa on aktiivinen linkki Sulautettu editointi mahdollistaa editoinnin paikalla Petri Vuorimaa 31
14. Peru, ryhmätyö ja makrot Peru: käyttäjän toimenpiteet voi perua Ryhmätyö: yhden käyttäjän malliin tekemät muutokset näkyvät myös muille käyttäjille Makrot: käyttäjä voi rakentaa monimutkaisia käskyjä yksinkertaisista käskyistä Kaikissa tapauksissa käyttäjän toimenpiteitä monitoroidaan ja tarjotaan lisäpalveluja Petri Vuorimaa 32
14.1 Peru/tee uudestaan Käyttäjät tuntevat olonsa turvalliseksi, kun toimenpiteet voi perua Toimenpiteet ovat käskyjä tai kokonaisia tehtäväsarjoja (esim. viivan piirtäminen) Toimenpiteet aiheuttavat pysyvän muutoksen malliin Käyttäjä voi perua tai tehdä muutoksen uudestaan Petri Vuorimaa 33
Yksinkertainen historia järjestelmä Atomiset toimenpiteet tallennetaan historialistaan Peru poistaa viimeisimmän komennon historialistasta ja palauttaa käyttöliittymän tilan Perumattomia komentoja (esim. tiedoston talletus) ei voi perua Näkymää muuttavia käskyjä (esim. näkymän vieritys) ei yleensä talleteta historialistaan Petri Vuorimaa 34
Valikoiva peruminen 1. Luo valkoinen suorakaide 2. Luo viiva 3. Muuta suorakaide mustaksi 4. Luo ellipsi 5. Luo vapaa viiva Käyttäjä haluaa pitää suorakaiteen valkoisena? Peru 3. Petri Vuorimaa 35
Valikoiva peruminen (cont.) 1. Luo valkoinen suorakaide a 2. Luo viiva b 3. Suorakaide a mustaksi 4. Kopio a suorakaiteeksi c 5. Luo vapaa viiva d Käyttäjä haluaa pitää suorakaiteen a valkoisena? Konflikti! Petri Vuorimaa 36
14.2 Ryhmätyö Käyttäjät haluavat usein tehdä työtä yhdessä Asynkroninen yhteistyö: + monta henkilöä työskentelee saman työn kimpussa eri aikoina Synkroninen yhteistyö: + monta henkilöä työskentelee saman työn kimpussa yhtä aikaa Petri Vuorimaa 37
Asynkroninen ryhmätyö Kaikki käyttäjän malliin tekemät muutokset talletetaan erilliseen tiedostoon (patch) Muutokset välitetään muille käyttäjille tai keskitettyyn tietokantaan Ristiriitaiset muutokset pitää selvittää Konfliktit voidaan myös välttää lukitsemalla tiedostot Petri Vuorimaa 38
Synkroninen ryhmätyö Kaksi tai useampi käyttäjä työskentelee yhtä aikaa Kaikkien käyttäjien pitää saada tieto muiden käyttäjien malliin tekemistä muutoksista Sosiaaliset kysymykset pitää myös ratkaista + floor control Komennot välitetään muille käyttäjille Konfliktit pitää ratkoa Petri Vuorimaa 39
14.3 Makrot Makrot rakennetaan komennoista tallettamalla käyttäjän toimenpiteet Käyttäjän toimenpiteet on yleistettävä Syöttötiedon sijasta talletetaan komennot + Komennot parametrisoidaan + Komennot voivat riippua olioista Petri Vuorimaa 40
14.4 Monitorointiarkkitehtuuri Monitorointi perustuu komento oliolle + DoIt, UndoIt, RedoIt AddChip + user selects chip icon + echo rectangle is shown + user selects place (center of chip is defined) + AddChipCmnd.DoIt(CenterPoint) + Id = AddChip(CenterPoint) Petri Vuorimaa 41
Monitorointiarkkitehtuuri (jatk.) UndoChip + AddChipCmnd.UndoIt(Id) + DeleteChip(Id) RedoChip + AddChipCmnd.RedoIt(Id) + AddChipCmnd.DoIt(CenterPoint) Petri Vuorimaa 42
14.5 Yhteenveto Komentoja monitoroindaan Peru ja tee uudelleen Ryhmätyö Makrojen tallentaminen Petri Vuorimaa 43