Pozicioniranje PopUp prozora u Flex-u

Danas sam i ja naišao na problem da PopUpManager ne pozicionira baš pravilno komponente. Problem nastaje kada se klik desio u nekoj komponenti aplikacije. Recimo, ja sam koristio komponentu sa umanjenim prikazom slike koja kada se klikne na nju prikazuje centrirano uvećanu sliku. Kako se u aplikaciji nalazi više komponenata na različitim pozicijama, to je i uvećan prikaz različito centriran. Rešenje je u sledećem:

import mx.core.Application;

private var uvecanaSlika:uvecanaSlikaKomponenta;

private function prikaziUvecano(event:MouseEvent):void
{
uvecanaSlika = new uvecanaSlikaKomponenta();
uvecanaSlika = uvecanaSlikaKomponenta(PopUpManager.createPopUp(DisplayObject(Application.application.parentDocument), uvecanaSlikaKomponenta, true));
PopUpManager.centerPopUp(uvecanaSlika);
}

Flex: Korišćenje Label komponente kao linka

Kada se label komponenta koristi kao link, poželjno je da se kursor iznad nje prikazuje u obliku šake sa ispruženim kažiprstom, kao što je to uobičajeno. Sama label komponenta ima osobinu useHandCursor, međutim, kada ju postavimo na true nema efekta. Stoga, umesto

< mx:label usehandcursor="true">

treba koristiti:

< mx:label usehandcursor="true" buttonmode="true" mousechildren="false" >

Znači, pored useHandCursor treba uključiti i buttonMode, a mouseChildren isključiti. Ovo funkcioniše i za neke druge komponente, ne samo za label.

strReplace() funkcija u Flex-u

Nakon pretraživanja neta za sintaksom strReplace() funkcije u Flex-u ispostavilo se da takva funkcija ne postoji kao sastavni deo AS3, ali sam našao rešenje koje stoga prenosim ovde:

private function strReplace( original:String, replace:String,
replaceWith:String):String
{
var array:Array = original.split(replaceWith);
return array.join(replace);
}

kako ne bih morao i sledeći put da ju tražim 🙂

Izrada .pdf kataloga slika od gomile .jpg sličica

Danas sam slao neke fotografije svojih proizvoda zapakovane u .zip fajl, međutim primaocu to nije odgovaralo, te me je, zarad lakše preglednosti, zamolila da slike spakujem u jedan .pdf fajl. Kako sam tek tri meseca definitivno prešao na Linux, još uvek neke osnovne stvari nisam naučio, niti rešio, pa sam se dao u razmišljanje. Neka prva ideja mi je bila da napravim .pdf u Libre Office Writeru i čak sam krenuo da ju realizujem. Kod četvrte slike sam skontao da će pravljenje kataloga od par stotina sličica da mi oduzme prilično vremena, pa sam se odlučio napraviti skript za to.

Malo sam istraživao i ubrzo otkrio genijalnu alatku ImageMagick. To je alatka koja omogućuje nebrojeno mnogo manipulacija sa slikama i konverzija formata iz komandne linije i time je idealan za skripte. Oduševilo me je što je izrada .pdf fajla od foldera sa .jpg fajlovima krajnje jednostavna:

convert *.jpg katalog.pdf

i to je to. Ova komanda će od svih slika napraviti .pdf, u kom će svaka slika biti jedna strana.

Kako mi to nije bila osnovna ideja, morao sam malo pročitati uputstvo. Moja konačna komandna linija je:

montage +frame -pointsize 48 -label "%f" -tile 4x4 -geometry 500x500+15+15 *.jpg katalog.pdf

Komanda montage kombinuje više slika u jednu izlaznu.  Parametri imaju sledeća značenja:

+ frame => ubacuje okvir oko slike
-tile 4×4 => označava da će se izlazna slika sastojati od mreže koja sadrži 4×4 ulazne slike
-geometry 500×500+15+15 => označava da će svaka sličica u mreži biti 500 x 500 px i da će imati marginu od 15 x 15 px sa strane
-label „%f“ => definiše da će ispod svake slike biti ispisan naziv fajla
-pointsize 48 => definiše veličinu fonta kojim će biti ispisan naziv

Ova komanda mi je dala rezultat baš kao što sam želeo, međutim konačni .pdf je bio prevelik, te sam se dao u potragu za načinom da ga smanjim.  Na netu sam našao blogpost koji je naveo skriptu koja mi je u potpunosti odgovarala. Malo sam ju modifikovao, tako da sam kao konačnu verziju:

#!/bin/bash

FILENAME=`basename $1`
DIRNAME=`dirname $1`
OUTNAME=opt_$FILENAME

montage +frame -pointsize 48 -label "%f" -tile 4x4 -geometry 500x500+15+15 *.jpg $1
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=$OUTNAME $1

rm $DIRNAME/$1
mv $DIRNAME/$OUTNAME $DIRNAME/$1

Ovoj skripti proslđujem naziv izlaznog .pdf fajla i ona odrađuje sve 🙂