Další vazby s jednoduchým kontrolérem - MujMAC.cz - Apple, Mac OS X, Apple iPod

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Seriály

Více seriálů



Software

Další vazby s jednoduchým kontrolérem

1. června 2006, 00.00 | Dnes si trochu "spravíme chuť" od minula – v minulém dílu jsme hodně povídali s takřka žádným výsledkem; dnes naopak využijeme systém vazeb k tomu, že bez dlouhých řečí grafické uživatelské rozhraní aplikace dost zásadně obohatíme.

V minulém dílu našeho seriálu jsme si připravili jednoduchý testovací projekt, obsahující modelový objekt s atributy "width" a "height" (automaticky udržovanými v poměru 4:3), s jednoduchým kontrolérem třídy NSObjectController, a se základním grafickým uživatelským rozhraním, obsahujícím jediné okno a formulář, umožňující vkládání hodnot pro oba atributy.

Jak jsme si řekli, konkrétní sada vazeb, kterou máme pro ten který objekt grafického uživatelského rozhraní k dispozici, je určena programátorem daného objektu a od ostatních se může lišit. Pojďme se dnes proto podívat na ukázku na několik typických možností, jež nám různé objekty GUI nabízejí. Dnes si tedy trochu "spravíme chuť" od minula – v minulém dílu jsme hodně povídali s takřka žádným výsledkem; dnes naopak využijeme systém vazeb k tomu, že bez dlouhých řečí grafické uživatelské rozhraní aplikace dost zásadně obohatíme.

Posuvníky: nic jednoduššího

Velmi přirozený požadavek je umožnit nastavování šířky i výšky pomocí posuvníků:

Nemá smysl čtenáře urážet ilustrací toho, jak je nastavit – prostě do okna vhodíme dva objekty NSSlider z palety "Cocoa–Controls", nastavíme požadovaným způsobem jejich atributy, jeden prostřednictvím vazby "value" připojíme opět na "selection.width" v kontroléru, druhý prostřednictvím téže vazby na "selection.height" – tedy naprosto přesně stejně, jako textová pole vedle nich.

To je celé: zbuildujeme, spustíme, vše funguje, všechny čtyři ovladače se automaticky vzájemně synchronizují. Už to by dalo při klasickém ručním programování kontrolérů nemálo práce – a to jsme teprve na začátku!

Indikace nuly

Zde je to spíš jen taková hříčka; v jiných kontextech se ale může velmi dobře hodit to, že bezmála každý objekt grafického uživatelského rozhraní se dokáže podmíněně skrývat – přičemž podmínku lze určit prostřednictvím vazeb. My toho využijeme pro indikaci nuly a nenuly, a zároveň si vysvětlíme položku "Value Transformer".

Vložíme do okna dvojici obyčejných textů (NSTextField z levého horního rohu palety "Cocoa–Text"); obsah prvého změníme na "Zero", druhého na "Nonzero". Vybereme prvý z nich, a otevřeme vazbu "hidden" ze skupiny "Availability". Navážeme atribut textu "hidden" – tedy "skryto" – na kteroukoli z hodnot atributů "width" či "height" modelu: vzhledem k jejich vzájemné vazbě přes daný poměr jsou oba zároveň nulové nebo oba zároveň nenulové. Funkce je zřejmá: je-li navázaná hodnota "ano" – tedy v kontextu jazyka C cokoli nenulového – objekt grafického uživatelského rozhraní se skryje; je-li hodnota "ne" – tedy nula – objekt (s nadpisem "Zero") se objeví...

Malinko složitější to je pro druhý objekt, nazvaný "Nonzero": ten by se totiž měl skrývat a objevovat podle podmínky přesně opačné. K tomu využijeme "Value Transformer": objekty grafického uživatelského rozhraní totiž při zjišťování hodnot, získaných prostřednictvím vazeb, vždy umožňují spustit obecnou programovou transformaci získané hodnoty. My se později naučíme takové převodníky psát a instalovat; zatím si však vystačíme s jedním ze standardně nabízených, který se jmenuje "NSNegateBoolean" a prostě převrátí podmínku na její opak:

Volba z předem připravených hodnot

Pro další ukázku vazby použijeme sadu "radio buttonů" – nalezneme je v paletě "Cocoa–Controls" poblíž jejího pravého horního rohu. Vhodíme je do okna, a tažením pravého okraje s přidržením přepínače Alt rozšíříme matici na 2x2 tlačítka. Jejich nadpisy změníme na něco rozumného – třeba "Twenty", "Forty", "Sixty" a "Eighty" – a v inspektoru atributů nastavíme tagy jednotlivých tlačítek na odpovídající hodnoty – tedy 20, 40, 60 a 80:

Pak označíme celou skupinu tlačítek, a pro tu jako celek určíme vazbu "selectedTag" – můžeme ji opět navázat třeba na atribut modelu "width". Tím zajistíme, že kdykoli uživatel klepne na některé z tlačítek, atribut "width" modelu se ihned nastaví na hodnotu, kterou jsme uložili pro toto tlačítko do jeho tagu – a naopak, získá-li náhodou model tutéž hodnotu nastavením z jiného ovladače, tlačítko se automaticky aktivuje:

Co třeba živá ukázka velikosti?

I taková věc se dá pomocí vazeb snadno udělat: z palety "Cocoa–Windows" přidáme do NIBu panel; v inspektoru atributů zakážeme všechny tři standardní ovladače vypnutím přepínačů "Close", "Minimize" a "Zoom (and resize)" v horní části inspektoru a také si vyžádáme jeho automatické zobrazení pomocí přepínače "Visible at launch time"; vhodné je také změnit jeho typ na "Utility window (panel only)", neboť tento typ má menší titulek (samozřejmě, ještě lepší by bylo okno vůbec bez titulku, ale takové nelze vytvořit přímo v Interface Builderu – na to bychom museli aspoň trochu programovat, a to si necháme na jindy; dnes si jen hrajeme s vazbami...).

Přepneme do inspektoru velikosti a ubezpečíme se, že minimální velikost okna je nastavena na nejmenší možnou kombinaci výšky a šířky – prostě je obě nastavíme na nulu, Interface Builder je automaticky změní na nejmenší možná čísla (pro "Utility window" by to mělo být 59 x 5).

Pak již jen navážeme podle předcházejícího obrázku "contentHeight" ze skupiny "Parameters" na atribut "height" v modelu, a podobně "contentWidth" na atribut "width" – a jsme hotovi!

Ovšem, z uživatelského hlediska by bylo patrně lepší nastavit "Value Transformer" z bodů na milimetry, takže by ukázkové okno nebylo tak malé; to si ale ukážeme až příště. Dnes se namísto toho na závěr ještě naučíme prostřednictvím vazeb generovat obecné texty, a umístíme jeden takový do titulku našeho právě vytvořeného ukázkového okna.

Texty s více parametry

Nezřídka by se nám hodilo v grafickém uživatelském rozhraní aplikace generovat komplikovanější texty, obsahující hodnoty různých atributů z objektů modelu. V nejobecnějším případě samozřejmě musíme takovou věc explicitně naprogramovat; pro jednodušší situace však bohatě postačí hezká a flexibilní podpora, již některé z objektů grafického uživatelského rozhraní nabízejí – jde o generování hodnoty na základě textového vzoru a libovolného množství atributů, jejichž hodnoty jsou do něj automaticky vloženy.

Jelikož mezi objekty grafického uživatelského rozhraní, jež tuto službu podporují, patří i titulek okna, "naprogramujeme" prostřednictvím vazeb to, aby titulek ukázkového okna obsahoval text "šířka x výška".

Označíme panel, a v inspektoru vazeb ve skupině "Title With Pattern" vybereme položku "displayPatternTitle1"; navážeme ji na atribut modelu "width", a do atributu "Display Pattern" zapíšeme textový řetězec "%{title1}@x%{title2}@". Jakmile vazbu dokončíme, automaticky se nám nabídne druhý atribut, "displayPatternTitle2"; ten nastavíme podobně, ale samozřejmě s atributem modelu "height":

Jakmile dokončíme jeho vazbu, automaticky se objeví třetí atribut "displayPatternTitle3"; pokud bychom jej vyplnili, objevil by se čtvrtý a tak dále, v libovolném počtu, jaký potřebujeme.

(Mimochodem, možná jste si povšimli, že stejně se nám objevily atributy "hidden2" po nastavení atributů "hidden" při určování indikace nuly – to proto, že objekty grafického uživatelského rozhraní obecně dokáží zkoumat libovolně mnoho atributů "hidden", a objekt se skryje, pokud platí kterýkoli z nich.)

Zpět k vazbám "displayPatternTitle": jejich atribut "Display Pattern" – sdílený všemi těmito vazbami, takže stačí nastavit jej v kterékoli z nich pro všechny najednou – je v podstatě formát, obdobný formátu funkce NSLog – může jím být libovolný textový řetězec, obsahující kromě běžných znaků také metařetězce "%{titleN}@". Každý tento metařetězec se pak nahradí hodnotou odpovídajícího atributu (který je uveden v patřičné vazbě "displayPatternTitleN").

Výsledek vypadá nějak takto:

Na těch pár minut "programování" v Interface Builderu to celkem ujde... a příště budeme pokračovat.

Pokud by se snad někomu nedařilo, hotový projekt obsahující všechny popsané služby nalezne na www.ocs.cz/apps/KVOTest.zip.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Informace  

 » Rubriky  » Agregator  

 » Rubriky  » Software  

 

 

 

Nejčtenější články
Nejlépe hodnocené články
Apple kurzy

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: