Mitä hyötyä katseluohjelmista on, kun työympäristön käyttöliittymälisäykset, kuten näkymät, muokkausohjelmat, ohjatut toiminnot ja valintaikkunat, voi toteuttaa suoraan SWT-widget-objektien avulla?
Katseluohjelmien avulla voit luoda widget-objekteja, vaikka yhä käytät malliobjekteja. Jos käytät SWT-widget-objektia suoraan, objektit on muunnettava merkkijonoiksi ja kuviksi, joita SWT odottaa. Katseluohjelmat toimivat SWT-widget-objektien sovittimina, jotka käsittelevät widget-tapahtumien yhteistä käsittelykoodia, jonka muutoin joutuisit toteuttamaan itse.
Tutustuimme ensimmäisen kerran katseluohjelmaan näkymän ReadmeSectionsView sisäisessä readme-työkalun tarkastelulisäyksessä.
public void createPartControl(Composite parent) { viewer = new ListViewer(parent); ... }
Huomautus: Katseluohjelmia voi käyttää sekä työympäristön näkymien että muokkausohjelmien toteutuksen toimitukseen. Termi "katseluohjelma" ei tarkoita, että katseluohjelmia voi käyttää vain näkymien toteutukseen. Esimerkiksi katseluohjelmaa TextViewer käytetään useiden työympäristön ja lisäosien muokkausohjelmien toteutuksessa.
JFace sisältää katseluohjelmia useimmille monimutkaisille SWT-widget-objekteille. Yleisimmin katseluohjelmia käytetään luettelo-, rakenne-, taulukko- ja teksti-widget-objektien yhteydessä.
Jokaisella katseluohjelmalla on siihen liittyvä SWT-widget-objekti. Kyseinen widget-objekti voidaan luoda epäsuorasti toimittamalla Pääyhdistelmä apukatseluohjelman konstruktoriin tai suorasti luomalla se ensin ja tämän jälkeen toimittamalla se katseluohjelmaan omassa konstruktorissaan.
Luetteloilla, rakenteilla ja taulukoilla on käyttäjän näkökulmasta monia yhteisiä ominaisuuksia kuten objekteilla täyttö, valinta, lajittelu ja suodatus.
Kyseiset katseluohjelmat ylläpitävät verkkoalueobjektien luetteloa (kyseisiä objekteja kutsutaan elementeiksi) ja näyttävät ne vastaavassa SWT-widget-objektissa. Luetteloiden katseluohjelmat osaavat hakea tekstinimiön mistä tahansa luettelon elementistä. Ne poimivat nimiön rajapinnasta ILabelProvider, jonka voi määrittää katseluohjelmaan. Luetteloiden katseluohjelmat osaavat määrittää widget-toimintojen vastakutsuille vastaavuudet katseluohjelman asiakkaan tuntemaan elementtimaailmaan.
Tavallisia SWT-widget-objekteja käyttävien asiakkaiden tulee toimia SWT-työkalujen tasolla, jossa alkiot ovat merkkijonoja ja tapahtumat liittyvät usein merkkijonoluettelon sisäisiin indekseihin. Katseluohjelmien avulla voi toimia myös ylemmillä tasoilla. Asiakkaille ilmoitetaan luettelon valinnoista ja muutoksista käyttämällä asiakkaiden katseluohjelmalle toimittamia elementtejä. Katseluohjelma hoitaa kaiken indeksien ja elementtien vastaavuuksien määritykseen, objektien suodatettuun tarkasteluun ja uudelleen järjestämiseen liittyvän rutiinityön tarvittaessa.
Suodatus ja lajittelu hoidetaan määrittämällä katseluohjelmalle lajittelutoiminto (ViewerSorter) ja/tai suodatin (ViewerFilter). (Kyseiset toiminnot voi määrittää myös rakenteiden ja taulukoiden katseluohjelmille.) Asiakkaan tarvitsee vain toimittaa luokka, joka voi verrata tai suodattaa luettelon objekteja. Katseluohjelma hoitaa yksityiskohtaiset toimenpiteet, jotka liittyvät määritetyn järjestyksen ja suodatuksen mukaiseen listan täyttöön sekä järjestyksen ja suodatuksen ylläpitoon, kun elementtejä lisätään tai poistetaan.
Katseluohjelmia ei ole tarkoitettu asiakkaiden laajennettaviksi. Jos haluat mukauttaa katseluohjelmaa, voit määrittää sen kokoonpanoon oman sisällön ja otsikon toimittajat.
Luokka ListViewer määrittää luettelon elementeille vastaavuuksia SWT-työkalujen List-ohjausobjektiin.
Luokka TreeViewer näyttää hierarkkiset objektit Tree-SWT-widget-objektissa. Se hoitaa alkioiden laajennukseen ja pienennykseen liittyvät tehtävät. Eri SWT-rakenneohjausobjekteille (tavalliselle rakenteelle, taulukkorakenteelle, valintaruuturakenteelle) on useita erilaisia rakenteen katseluohjelmia.
Taulukkojen katseluohjelma TableViewer on paljolti luetteloiden katseluohjelman kaltainen, mutta siinä on lisäksi ominaisuus, jolla voi tarkastella taulukon elementtien tietoja useissa sarakkeissa. Taulukoiden katseluohjelmat laajentavat SWT-taulukko-objektin käyttötarkoitusta merkittävästi ottamalla käyttöön solujen muokkauksen käsitteen. Voidaan käyttää erityisiä solujen muokkausohjelmia, jotta käyttäjä voi muokata taulukon soluja yhdistelmäruutujen, valintaikkunoiden tai widget-tekstiobjektien avulla. Taulukoiden katseluohjelma hoitaa kyseisten widget-objektien luonnin ja sijoituksen, kun niitä tarvitaan sallimaan käyttäjän tekemät muokkaukset. Tämä hoidetaan käyttämällä CellEditor-luokkia, kuten TextCellEditor ja CheckboxCellEditor. Vain tarkasteltaessa täytettävälle näennäistaulukolle taulukoiden katseluohjelma ajaa vain määritetyn määrän tuloksia riippumatta siitä, mitä todellisuudessa luodaan. Tietokanta tekee kyselyjä JIT-kääntäjälle (just-in-time) "laiskasti" lazy-vastinehaun tapaan ja vain ennalta määritetyn määrän kerralla.
Widget-tekstiobjekteilla on paljon yhteistä semantiikkaa kuten kaksoisnapsautuksen toiminta, kumous, väritys ja indeksin tai rivin perusteella siirtyminen. Tekstinkatseluohjelma TextViewer on sovitin StyledText-SWT-widget-objektille. Tekstinkatseluohjelmat toimittavat asiakirjamallin työasemalle ja hoitavat asiakirjan muuntamisen widget-tekstiobjektin toimittamiksi muotoilluiksi tekstitiedoiksi.
Tekstinkatseluohjelmia käsitellään yksityiskohtaisemmin ohjeaiheessa Työympäristön muokkausohjelmat.
Katseluohjelman ymmärtämiseksi on tutustuttava katseluohjelman syöte-elementin, sisällön, valintojen ja sen käsittelemän widget-objektin varsinaisesti näyttämien tietojen välisiin suhteisiin.
Syöte-elementti on katseluohjelman näyttämä (tai muokkaama) pääobjekti. Katseluohjelman näkökulmasta mikä tahansa objekti voi olla syöte-elementti. Se ei oleta, että syöte-elementti toteuttaa jonkin tietyn rajapinnan. (Näemme syyn tähän hetken kuluttua, kun käsittelemme sisällön toimittajia.)
Katseluohjelman täytyy pystyä käsittelemään syöte-elementin vaihdoksia. Jos katseluohjelmaan asetetaan uusi syöte-elementti, katseluohjelman täytyy täyttää widget-objektinsa uudelleen uuden elementin mukaisesti ja irrottautua edellisestä syöte-elementistä. Jokaisella eri lajin katseluohjelmalla on oma semantiikkansa syöte-elementin kuuntelutoiminnoksi rekisteröitymistä ja elementtiin perustuvaa widget-toiminnon täyttöä varten.
Sisällön katseluohjelma on katseluohjelma, joka toteuttaa tarkasti määritettyä käytäntöä tietojen poimintaan sen syöte-elementistä. Sisällön katseluohjelmat käyttävät erikoistuneita apuluokkia IContentProvider ja ILabelProvider widget-objektiensa täyttöön ja syöte-elementin tietojen näyttämiseen.
Luokka IContentProvider sisältää peruselinkaarikäytännön sisällön toimittajan syöte-elementtiin liittämistä ja syöte-elementin vaihdoksen käsittelyä varten. Eri lajien katseluohjelmille toteutetaan muita erikoistuneita sisällön toimittajia. Yleisin sisällön toimittaja on rajapinta IStructuredContentProvider, joka voi toimittaa syöte-elementin antaman objektiluettelon. Sitä käytetään luettelomaisissa katseluohjelmissa, kuten luetteloissa, taulukoissa tai rakenteissa. Sisällön toimittaja osaa yleensä määrittää vastaavuudet syöte-elementin ja odotetun katseluohjelman sisällön välille.
Rajapinta ILabelProvider menee hieman pidemmälle. Katseluohjelman sisällön (joka johdetaan syöte-elementistä ja sisällön toimittajasta) perusteella se tuottaa sisällön näyttämiseen katseluohjelmassa vaadittavat erityiset käyttöliittymän elementit kuten nimet ja kuvakkeet. Otsikon toimittajat voivat auttaa kuvakeresurssien tallennuksessa, koska niiden avulla voi varmistaa, että samaa kuvakkeen ilmentymää käytetään kaikille samankaltaisille lajeille katseluohjelmassa.
Huomautus: Tiettyjen sisällön ja otsikon toimittajien ilmentymiä ei ole tarkoitettu määritettäväksi yhteiskäyttöön useiden katseluohjelmien kesken. Vaikka kaikki käytetyt katseluohjelmat käyttäisivät samaa lajia olevaa sisällön tai otsikon toimittajaa, jokainen katseluohjelma tulee alustaa omalla toimittajaluokan ilmentymällään. Toimittajan elinkaarikäytäntö on suunniteltu toimittajan ja katseluohjelman välistä kahdenkeskistä (1-to-1) suhdetta varten.
Syöte-elementtien, sisällön toimittajien ja otsikon toimittajien avulla katseluohjelmat voivat pitää suurimman osan widget-objektien täyttöön liittyvistä tiedoista piilotettuina. Katseluohjelman asiakkaiden tarvitsee huolehtia vain katseluohjelman täytöstä oikeanlaisilla syötteillä ja sisällön toimittajilla. Otsikon toimittajan täytyy osata johtaa käyttöliittymätiedot katseluohjelman sisällön perusteella.
Otsikon toimittaja voi näyttää muutakin kuin vain tekstiä ja kuvan. JFace sisältää useita luokkia ja rajapintoja lisätoimintojen tukeen. Luokat TableViewer, AbstractTreeViewer ja TableTreeViewer tukevat seuraavia rajapintoja.
Voit vaikuttaa näkymän kohteiden väriin joko näkymän otsikon toimittajan avulla tai koristelutoiminnon avulla. Yleensä kannattaa käyttää otsikon toimittajien väri- ja fonttitukea, sillä koristelutoiminnot vaikuttavat jokaiseen tiettyä lajia näyttävään näkymään. Jos käytät värin tai fontin koristelutoimintoa, varmista, että sen arvot voi määrittää Värit ja fontit -asetussivuilta.
Katseluohjelmien, sisällön toimittajien ja otsikon toimittajien tarjoamaa joustavuutta voi havainnollistaa niiden käytöllä työympäristössä.
Luokka WorkbenchContentProvider on rakenteinen sisällön toimittaja, joka poimii syöte-elementin sisällön pyytämällä sen aliobjekteja. Sovitinten käsitettä käytetään jälleen toteuttamaan yleistä toimintoa. Kun WorkbenchContentProvider-luokalta pyydetään elementtiluetteloa sen syöte-elementistä, se poimii IWorkbenchAdapter-rajapinnan syöte-elementiksi. Jos IWorkbenchAdapter-rajapinta on rekisteröity syöte-elementiksi, sisällön toimittaja voi turvallisesti olettaa, että elementille voi tehdä kyselyn sen alielementeistä. WorkbenchContentProvider-luokka tekee myös tarvittavat toimet katseluohjelmansa päivittämiseksi, kun työtila muuttuu.
WorkbenchLabelProvider-luokka on otsikon toimittaja, joka poimii rajapinnanIWorkbenchAdapter objektista hakeakseen objektin tekstin ja kuvan. Otsikon toimittajan käsite on erityisen hyödyllinen työympäristön objekteille, koska työympäristö sallii yksittäisen otsikon toimittajan ladata välimuistiin kuvia, joita katseluohjelma käyttää usein. Kun WorkbenchLabelProvider-luokka esimerkiksi poimii kuvan rajapinnan IProject käyttöön, se voi ladata kyseisen kuvan välimuistiin ja käyttää sitä kaikkien katseluohjelman näyttämien IProject-objektien yhteydessä.
Määrittämällä yleisen sovittimen IWorkbenchAdapter ja rekisteröimällä sen useille käyttöjärjestelmälajeille kyseiset lajit voidaan näyttää oikein useissa yleisissä katseluohjelmissa ja niitä sisältävissä työympäristön näkymissä.