Megnézzük, hogyan tudjuk a flash player „jobb klikk” menüjét az úgynevezett Context Menut-t actionscript 3-ban testreszabni. Mire is jó ez nekünk. Például, ha nem szeretnénk, hogy a felhasználó tudja zoomolni a flash tartalmat, akkor kivehetjük azt a menüből, ugyan így ha azt akarjuk, hogy csak maximum minőségen legyen elérhető, akkor letilthatjuk a quality funkciót. És persze lehetőségünk van a tartalom vezérlésére is stb. Ez egy kis apróságnak tűnhet, de egy jól elkészített programot is el tudnak rontani a zavaró részletek.
Ezt fogjuk megvalósítani:
Első körben nézzük meg, hogyan tudunk, saját menüt készíteni, ill. miként tudjuk az alapértelmezett elemek manipulálni.
var myMenu:ContextMenu = new ContextMenu(); myMenu.hideBuiltInItems(); contextMenu = myMenu;
Az első sorban csak létrehozzuk a saját menünket. A másodikban letiltjuk az össze alapértelmezett elemet (zoom, quality, print, stb.). Az utolsóban, pedig betöltjük az általunk létrehozott menüt. A hideBuiltInItems() elég kényelmes megoldás abban az esetben, ha minden ki szeretnénk iktatni, de mi van, ha mégis meg szeretnénk tartani 1-2 alap menüelemet. Szerencsére ezeket egyesével is lehetőségünk van paraméterezni.
myMenu.builtInItems.forwardAndBack = false; myMenu.builtInItems.loop = false; myMenu.builtInItems.play = true; myMenu.builtInItems.print = true; myMenu.builtInItems.quality = false; myMenu.builtInItems.rewind = false; myMenu.builtInItems.save = false; myMenu.builtInItems.zoom = false;
Érdemes megjegyezni, hogy bizonyos elemek, mint pl.: Settings vagy az About, semmilyen módon nem távolíthatók el a listából.
Ezek után nézzük, meg hogyan tudunk saját listaelemeket hozzáadni újonnan készített menünkhöz.
var myMenu:ContextMenu = new ContextMenu();
myMenu.hideBuiltInItems();
var myText = new ContextMenuItem("Hello World");
myMenu.customItems.push(myText);
contextMenu = myMenu;
A ContextMenuItem-mel tudunk létrehozni egy új elemet, stringet vár paraméterül, ez fog megjelenni a menüben. A push utasítással tudjuk beletenni a menüelemet a ContextMenu-be.
Több menuitemet így tudunk hozzáadni:
var myMenu:ContextMenu = new ContextMenu();
myMenu.hideBuiltInItems();
var myText = new ContextMenuItem("Hello World");
var mail = new ContextMenuItem("mail@domain.com");
var copyr = new ContextMenuItem("Minden jog...");
myMenu.customItems.push(myText,mail,copyr);
contextMenu = myMenu;
Semmi érdekes nincs a kódba, csak annyit érdemes megjegyezni, hogy amilyen sorrendben felsoroljuk a pushban az itemeket, olyas sorrendben fognak megjelenni a menüben.
Most nézzük meg, hogyan tudjuk a menüelemeket testreszabni:
- enabled – kattinthatóság (kiszürkül)
- separatorBefore – kis elválasztójelek közé kerül az elem
- visible – láthatóság (megjelenik a listában vagy sem)
- caption – felüldefiniálja a konstruktorban megadott nevet
A caption kivételével, ami stringet, mindegyik logikai értéket vár.
var myText=new ContextMenuItem("Hello World");
var mail=new ContextMenuItem("mail@domain.com");
var copyr=new ContextMenuItem("Minden jog...");
myText.enabled=false;
myText.separatorBefore=true;
mail.caption="e-mail";
copyr.visible=false
Az eddigi ismereteinkkel már képesek vagyunk minden ízében konfigolni a menünket, de sajnos az általunk felvett elemek idáig statikusak, hiába kattint a felhasználó bármelyikre, semmi nem fog történni. Tegyünk ez ellen!
var myMenu:ContextMenu = new ContextMenu();
myMenu.hideBuiltInItems();
var myText=new ContextMenuItem("ActionScript.hu");
var mail=new ContextMenuItem("mail@domain.com");
myText.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,navigate);
function navigate(evt:ContextMenuEvent) {
navigateToURL(new URLRequest("http://www.actionscript.hu/"),"_blank");
}
function navigate(evt:ContextMenuEvent) {
navigateToURL(new URLRequest("http://www.actionscript.hu/"),"_blank");
}
myMenu.customItems.push(mail,myText);
contextMenu=myMenu;
A myText nevű menuitemhez hozzáadunk egy eseményfigyelőt. Abban az esetben, ha kattintunk a myText-re akkor lefuttatja navigate függvényünket, ami egy régebbi postban (Egyszerű linkek as3-ban) taglalt módon megnyit egy oldalt.
Legvégül pedig a teljes kód, ami egy kis ötlet add arra, hogy miként is lehet a menü segítségével vezérelni a mozinkat.
var myMenu:ContextMenu = new ContextMenu();
myMenu.hideBuiltInItems();
var myText=new ContextMenuItem("ActionScript.hu");
var mail=new ContextMenuItem("mail@domain.com");
var showCircle=new ContextMenuItem("Kör megjelenítése");
var hideCircle=new ContextMenuItem("Kör elrejtése");
myText.separatorBefore=true;
showCircle.enabled=false;
myText.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,navigate);
showCircle.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,showC);
hideCircle.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,hideC);
function navigate(evt:ContextMenuEvent) {
navigateToURL(new URLRequest("http://www.actionscript.hu/"),"_blank");
}
function showC(evt:ContextMenuEvent) {
circle.visible=true;
hideCircle.enabled=true;
showCircle.enabled=false;
}
function hideC(evt:ContextMenuEvent) {
circle.visible=false;
hideCircle.enabled=false;
showCircle.enabled=true;
}
myMenu.customItems.push(mail,myText,showCircle,hideCircle);
contextMenu=myMenu;
Feleslegesnek érzem kivesézni a kódot, hiszen csak az itt bemutatott eszközöket használom fel. Innentől már mindenki fantáziájára bízom a továbbiakat.