ITI0011:Kimp

Allikas: Kursused
Mine navigeerimisribale Mine otsikasti

Tagasi ITI0011 lehele.

English version of this homework: ITI0011:Kimp homework.

Üldine

Detailid võivad muutuda kuni 21. oktoobrini.

Üldfunktsionaalsus ei muutu.

Tähtaeg: kood tuleb laadida git'i hiljemalt pühapäeval, 16. novembril kell 23:59. Kaitsmine: 18. või 20. november (vastavalt rühma tunnile)
Enne seda nädalat kaitsmine annab +1 lisapunkti. Eeldus on, et kood on git'i laetud enne kaitsmist.

Tuleb kirjutada graafilise kasutajaliidesega joonistamisprogramm kasutades JavaFX teeki. Programm võimaldab kasutajal hiirega kujundeid joonistada ning kujunditega teatud operatsioone sooritada.

Põhiosa (4p)

  • Programm kuvab kasutajale graafilise kasutajaliidese (akna) ja võimaldab sellel vabakäejoont joonistada. Joonistamise alustamiseks kasutaja vajutab ja hoiab all vasakut hiire nuppu. Hiirt lohistades kuvab programm hiire liikumise trajektoori joonega. Kujundi joonistamine lõppeb vasaku hiirenupu vabastamisega.
  • Programm võimaldab joonistada suvalise arvu kujundeid.
  • Joonistada peab saama ka punkti (hiire klikk ilma hiirt vahepeal liigutamata - joone algus- ja lõpp-punkt on samad).
  • Akna parameetrite muutmisel - suurendamine/vähendamine, nihutamine, osaliselt või täielikult teiste akendega peitmine - ei tohi joonistatud kujundeid visuaalselt rikkuda.
  • Programmist peab olema võimalik väljuda vajutades klahvi <escape>.

Lisaosa: Ristkülik (1p)

Programm võimaldab kasutajal joonistada ristkülikut. Joonistamise alustamiseks kasutaja vajutab hiire nuppu - programm registreerib uue ristküliku alguspunkti (ristküliku üks tipp). Hiirt lohistades (hiirenupp all ja hiir liigub) kuvatakse ristküliku vastastipp vastavas positsioonis. Ehk siis hiirt lohistades üks ristküliku tipp on paigas, selle vastastipp aga liigub hiirega kaasa. Ristküliku joonistamine lõppeb hiirenupu vabastamisega.

Seda, kuidas kasutaja saab joonistada vabakäejoont või ristkülikut, on tudengi enda otsustada. Oluline on, et programmis saab mõlemaid joonistada.

Lisaosa: Kujundite liigutamine/kustutamine (2-3p)

Programm võimaldab joonistatud kujundite liigutamist:

  • Hoides all <control> nuppu liigub kasutaja kujundile, mida soovib liigutada. Kõik järgnev tegevus toimub <control> nuppu all hoides.
  • Sihtmärgiks olev kujund tõstetakse esile (highlight) eristades see teistest varju efektiga (DropShadow efekt).
  • Vajutades alla vasaku hiirenupu algab kujundi liigutamine. Programm liigutab kujundit vastavalt hiire lohistamise trajektoorile.
  • Liigutamine lõppeb hiirenupu vabastades. Hoides all <control> nuppu võib kasutaja jätkata kujundite liigutamist.

Programm võimaldab joonistatud kujundite kustutamist:

  • Sarnaselt kujundi liigutamisele hoiab Kasutaja all <control> nuppu ja liigub hiirega kujundile, mida soovib kustutada. Kõik järgnev tegevus toimub <control> nuppu all hoides.
  • Vastav kujund tuuakse esile varju efektiga.
  • Vajutades paremat hiirenuppu eemaldatakse kujund.

Lisaülesanne annab 2 punkti, kui ristküliku joonistamine (vt eelmist lisaosa) pole realiseeritud.

Lisaülesanne annab 3 punkti, kui ristküliku joonistamine on realiseeritud.

Lisaosa: Puhverdamine (2p)

  • Programm puhverdab Kasutaja tegevused, et neid saaks tagasi võtta (i.k. undo):
    • Kujundi lisamine/joonistamine
    • Kujundi liigutamine
    • Kujundi kustutamine
  • Kasutaja saab tegevusi tagasi võtta vajutades <escape> klahvi.
  • <escape> võtab tegevusi tagasi seni, kuni neid on. Kui rohkem tegevusi tagasi võtta ei saa, alustatakse programmist väljumist.
  • Lisaks puhvrist tagasivõtmisele (undo) on võimalik tegevusi korrata (i.k. redo). Kui kasutaja on mõned tegevused tagasi võtnud, saab need samad tegevused uuesti teha
    • Kujundi lisamine/joonistamine
    • Kujundi liigutamine
    • Kujundi kustutamine
  • Kasutaja saab tegevusi korrata vajutades <space> (tühik) klahvi.
  • Korrata saab vaid neid tegevusi, mis on tagasi võetud.

Selle lisaosa tegemine eeldab, et kujundi liigutamine ja kustutamine on realiseeritud.

Kui kujundi liigutamine ja kustutamine ei ole realieeritud, võib saada redo+undo eest kokku 1 punkti.

Lisaosa: Kasutajaliidese täiendamine (2p)

See lisaosa eeldab eelmiste lisaosade täitmist.

Lisaosa eesmärk on täiendada programmi kasutajaliidest järgnevalt:

  • Kui kasutaja vajutab <escape>, siis väljumise asemel küsitakse kasutajalt kinnitust (avaneb eraldi aken, kus on valikud "jah"/"ei" vms). Puhvri realiseerimise puhul peale kõikide tegevuste tagasivõtmist järgneb <escape> vajutamisele samamoodi kinnituse dialoog.
  • Järgmise joonistatava kujundi värvi on võimalik muuta. Selleks peaks kuskil programmi aknas olema värvivaliku element (ColorPicker). Olemasoleva kujundi värvi ei pea saama muuta (kuigi võib).
  • Undo/redo jaoks on nupud. Ehk siis lisaks <escape> ja <space> klahvidele töötavad samamoodi ekraanil olevad nupud.
  • Kujundivalik (kas vabakäejoon või ristkülik) on realiseeritud nuppude või muu elemendi abil.