views:

325

answers:

1

I'm experimenting with Adobe AIR and Google Maps API in Flex Builder. The question is, i'm making a NativeMenu, and was wondering, how can I change the label of the "Fullscreen" item to "Exit fullscreen" when the stage is in fullscreen?

If you see any thing in the code that could/should be written better, please let me know ;)

Here is my code:

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication 
xmlns:mx="http://www.adobe.com/2006/mxml" 
layout="absolute"
height="600"
width="700"
minHeight="100"
minWidth="100"
showStatusBar="false"
title="Gmaps 0.002"
>
<maps:Map 
xmlns:maps="com.google.maps.*" 
id="map" 
mapevent_mapready="onMapReady(event)" 
width="100%" 
height="100%" 
url="" 
key=""
/>

   <mx:Button id="fullscreenButton" click="toggleFullScreen()"/>
<mx:Script>
<![CDATA[


import com.google.maps.LatLng;
import com.google.maps.Map;
import com.google.maps.MapEvent;
import com.google.maps.MapType;
import com.google.maps.MapMouseEvent;
import com.google.maps.controls.MapTypeControl;
import com.google.maps.controls.ZoomControl;
import com.google.maps.controls.PositionControl;
import flash.display.NativeMenu;
import flash.display.NativeMenuItem;
import flash.events.Event;
import mx.core.Window;
import flash.display.StageDisplayState;






private function onMapReady(event:Event):void {
  map.setCenter(new LatLng(59.908165,10.742719), 14, MapType.NORMAL_MAP_TYPE);


     stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
 function keyDownHandler(event:KeyboardEvent):void {
 if (event.keyCode == 70) {
  toggleFullScreen();
  }
 }

    createMenu();

  map.enableScrollWheelZoom();
  map.enableContinuousZoom();
  map.enableControlByKeyboard();



   systemManager.stage.addEventListener(FullScreenEvent.FULL_SCREEN, fullScreenHandler);





  map.addEventListener(MapMouseEvent.ROLL_OVER, function(event:MapMouseEvent):void {
    map.addControl(new ZoomControl());
    map.addControl(new PositionControl());
    map.addControl(new MapTypeControl());
  });


  map.addEventListener(MapMouseEvent.ROLL_OUT, function(event:MapMouseEvent):void {
    map.removeControl(new ZoomControl());
    map.removeControl(new PositionControl());
    map.removeControl(new MapTypeControl());
  });





}



private function createMenu():void{
      var mainMenu:NativeMenu = new NativeMenu();
            var fullscreenMenu:NativeMenuItem = new NativeMenuItem("Fullscreen");
            var maximizeMenu:NativeMenuItem = new NativeMenuItem("Maximize");
            var restoreMenu:NativeMenuItem = new NativeMenuItem("Restore");
            var separatorA:NativeMenuItem = new NativeMenuItem("A", true); 
            var closeMenu:NativeMenuItem = new NativeMenuItem("Close");
            fullscreenMenu.addEventListener(Event.SELECT, handleMenuClick);
            maximizeMenu.addEventListener(Event.SELECT, handleMenuClick);
            restoreMenu.addEventListener(Event.SELECT, handleMenuClick);
            closeMenu.addEventListener(Event.SELECT, handleMenuClick);
            mainMenu.addItem(fullscreenMenu);
            mainMenu.addItem(maximizeMenu);
            mainMenu.addItem(restoreMenu);
            mainMenu.addItem(separatorA);
            mainMenu.addItem(closeMenu);

            //fullscreenMenu.enabled = false;
            //fullscreenMenu.label = "Test";







            this.contextMenu=mainMenu;
     }

     private function handleMenuClick(e:Event):void{
      var menuItem:NativeMenuItem = e.target as NativeMenuItem;
            if(menuItem.label == "Fullscreen") toggleFullScreen();
            if(menuItem.label == "Maximize") this.maximize();
            if(menuItem.label == "Restore") this.restore();
            if(menuItem.label == "Close") this.close();
     }





     private function fullScreenHandler(evt:FullScreenEvent):void {
  if (evt.fullScreen) {
    //fullscreenMenu.label = "Test";

  } else {

  }
}



     private function toggleFullScreen():void {
  try {
    switch (systemManager.stage.displayState) {
      case StageDisplayState.FULL_SCREEN_INTERACTIVE:
        systemManager.stage.displayState = StageDisplayState.NORMAL;
        break;
      default:
        systemManager.stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
        break;
    }
  } catch (err:SecurityError) {
  // ignore
  }
}





]]>
  </mx:Script>
  </mx:WindowedApplication>
+1  A: 

hello,

in order to change a label into a NativeMenu, you can try this

yourNativeMenu.getItemAt(0).label="new_label";

where getItemAt(0) return the first item in the NativeMenu

OXMO456
When I add this: mainMenu.getItemAt(0).label="Exit fullscreen"; to the private function fullScreenHandler, I get this error "Severity and Description Path Resource Location Creation Time Id1120: Access of undefined property mainMenu. Gmaps/src Gmaps.mxml line 138 1236943043953 331". Any ideas?
mofle
you should set "mainMenu" var as an instance variable, you can also try to acces mainMenu via "this.contextMenu"
OXMO456