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:
Software
Automator naposled: pro programátory
23. listopadu 2005, 00.00 | Dnešním dílem náš seriál, věnovaný aplikaci Automator a jejím možnostem, ukončíme. Nakonec se podíváme na aplikaci z hlediska programátora: ukážeme si, jak vytvářet pro Automator vlastní akce, které budeme moci využívat v pracovních postupech stejně snadno, jako ty standardní.
Dnešním dílem náš seriál, věnovaný aplikaci Automator a jejím možnostem, ukončíme. Podobně, jako tomu bylo u série článků věnovaných aplikaci Quartz Composer, i zde se nakonec podíváme na aplikaci z hlediska programátora: ukážeme si, jak vytvářet pro Automator vlastní akce, které budeme moci využívat v pracovních postupech stejně snadno, jako ty standardní.
Přímá podpora v Xcode
Vývojové prostředí Xcode "ví", jak má takový projekt vypadat, a dokáže nám automaticky připravit jeho výchozí strukturu na základě projektového vzoru. Prostě si vyžádáme vytvoření nového projektu příkazem "New Project", a pak z možných vzorů, jež se objeví v okně projektového asistenta, zvolíme "Action / Cocoa Automator Action".
Xcode sestaví projekt, který obsahuje
- připravenou kostru kódu třídy, která vlastní akci implementuje;
- soubor "Info.plist", obsahující potřebné náležitosti akce Automatoru (a že jich je ☺);
- soubor "main.nib" se standardním "view", v jehož rámci se zobrazuje grafické uživatelské rozhraní akce uvnitř aplikace Automator.
Kromě toho samozřejmě projekt obsahuje všechny ostatní potřebné náležitosti; nejdůležitější jsou však ty výše uvedené:
Uživatelské rozhraní
Jak je při programování v Cocoa poměrně běžné, můžeme začít sestavením grafického uživatelského rozhraní. Jeho obsah samozřejmě závisí na konkrétní akci, kterou se rozhodneme naprogramovat; my si dnes ukážeme velmi jednoduchou akci, která zobrazí přesně a detailně svůj vstup (tedy výstup akce předcházející) – tak se bude poněkud podobat standardní akci View Results; na rozdíl od ní se však nebude snažit výstup "chytře" formátovat, což sice v běžných případech není dobře, ale narazíme-li na nějaké nečekané problémy, může se nám naopak detailní znalost konkrétního objektu a jeho třídy hodit.
Proto otevřeme soubor "main.nib" v InterfaceBuilderu – stačí na něj samozřejmě poklepat – a do view vložíme pouze textový objekt (v němž právě data zobrazíme). Přidáme "outlet" jménem "tv", "natáhneme dráty" (pro propojení outletu "tv" z "File Owner" na textový objekt), nastavíme rozumně atributy – a to je všechno:
Vlastní kód
Kód, který zobrazí přijatá data a opět je předá další akci, je velmi jednoduchý (samozřejmě jsme volili ukázkovou akci tak, abychom se nezapletli do komplikovaného programování).
Provedení akce knihový kód vždy zajistí tak, že nejprve podle potřeby vytvoří objekt, který akci representuje – ten se vytvoří automaticky na základě třídy, jež je uvedena v souboru "Info.plist" jako NSPrincipalClass – můžeme si to ověřit, avšak o tato nastavení se obecně nemusíme starat, neboť je pro nás korektně připravil Xcode na základě projektového vzoru. Kdykoli se má akce provést, knihovní kód prostě objektu pošle standardní zprávu runWithInput:fromAction:error:; odpovídající hlavičkový soubor vidíme na prvém obrázku.
Implementace může vypadat třeba takto:
@implementation OCSDetailedDisplay -(id)runWithInput:(id)input fromAction:(AMAction *)anAction error:(NSDictionary **)errorInfo { NSMutableString *ms=[NSMutableString stringWithString:@"Detailed Display v1.0 (c) OCSoftware\n\n"]; [ms appendFormat:@"Input class %@\n\n",NSStringFromClass([input class])]; if ([input isKindOfClass:[NSArray class]]) { int i,n=[input count]; [ms appendFormat:@"Array of %d items:\n",n]; for (i=1;i<=n;i++) { id o=[input objectAtIndex:i]; [ms appendFormat:@" %d: %@ -- (%@)\n",i,NSStringFromClass([o class]),o]; } } else [ms appendFormat:@"(%@)",input]; [tv setString:ms]; return input; } @end
Jak vidíme, kód je zcela prostý – sestaví text, popisující data, do textového objektu "ms": nejprve zobrazí třídu přijatého objektu, a pak, pokud náhodou jde o pole, vypíše jednotlivé objekty v něm. Nakonec metoda vrátí přesně táž data, jež získala na vstupu. Samozřejmě by bylo možné tento kód zásadně vylepšit; toto je jen výchozí princip ☺
Soubor Info.plist
Řada velmi důležitých nastavení je v souboru Info.plist. Jelikož Xcode zatím neobsahuje specializovaný editor pro nastavení, které se týkají právě Automatoru (nezkoušel jsem dosud současnou nejnovější versi 2.2, která se objevila právě v době, kdy tento článek píši) – musíme proto vedle inspektoru targetu, v němž můžeme určit základní informace (jako je výše zmíněná "principal class" nebo identifikátor, který je velmi důležitý), musíme použít i textový editor, a další proměnné v souboru Info.plist nastavit ručně:
- AMName je "interní" jméno akce; v Automatoru se ale samozřejmě zobrazuje lokalizované jméno ze souboru InfoPlist.strings – v našem případě "Detailed Data Display for Action Programmers");
- AMAccepts určuje možné hodnoty vstupních dat. Jelikož naše akce "spolkne" prakticky cokoli, je vhodným nastavením dictionary obsahující "Container"="List", "Optional"=false a "Types"=("*");
- AMProvides jsou možné hodnoty dat, jež akce dokáže produkovat; protože data předáváme beze změny, bude hodnotou stejný dictionary, jako u AMAccepts;
- AMApplication je aplikace, pro niž je plugin určen – "Automator";
- AMDescription obsahuje podrobnější popis akce; podobně AMIconName může obsahovat speciální ikonu a AMKeywords seznam klíčových slov, podle nichž bude Automator akci schopen nalézt.
To je vlastně všechno...
Obsah seriálu (více o seriálu):
- Mac OS X Tiger - Jak na Automator
- Automator a jeho akce
- Nejzajímavější akce Automatoru
- Další akce Automatoru
- Automator: dnes jen akce, žádné podrazy
- Další akce Automatoru
- Automator a pracovní postupy
- Automator: pracovní postupy stokrát jinak
- Automator naposled: pro programátory
- Automator – zdroje
- Leopard zblízka: Automator
- Automator zblízka: Photoshop Action Pack