Files
cavepaintings/lib/Jaris/src/jaris/display/Menu.hx
velocity37 c9bacdf56d Handle Video: Flash/HTML5 video player
Requires getID3() and Jaris FLV Player
2012-10-16 21:42:20 +01:00

246 lines
6.8 KiB
Haxe

/**
* @author Jefferson González
* @copyright 2010 Jefferson González
*
* @license
* This file is part of Jaris FLV Player.
*
* Jaris FLV Player is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License or GNU LESSER GENERAL
* PUBLIC LICENSE as published by the Free Software Foundation, either version
* 3 of the License, or (at your option) any later version.
*
* Jaris FLV Player is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License and
* GNU LESSER GENERAL PUBLIC LICENSE along with Jaris FLV Player. If not,
* see <http://www.gnu.org/licenses/>.
*/
package jaris.display;
import flash.display.MovieClip;
import flash.events.ContextMenuEvent;
import flash.Lib;
import flash.net.URLRequest;
import flash.ui.ContextMenu;
import flash.ui.ContextMenuItem;
import jaris.player.Player;
import jaris.player.AspectRatio;
import jaris.Version;
/**
* Modify original context menu
*/
class Menu
{
private var _movieClip:MovieClip;
public static var _player:Player;
private var _contextMenu:ContextMenu;
private var _jarisVersionMenuItem:ContextMenuItem;
private var _playMenuItem:ContextMenuItem;
private var _fullscreenMenuItem:ContextMenuItem;
private var _aspectRatioMenuItem:ContextMenuItem;
private var _muteMenuItem:ContextMenuItem;
private var _volumeUpMenuItem:ContextMenuItem;
private var _volumeDownMenuItem:ContextMenuItem;
private var _qualityContextMenu:ContextMenuItem;
public function new(player:Player)
{
_movieClip = Lib.current;
_player = player;
//Initialize context menu replacement
_contextMenu = new ContextMenu();
_contextMenu.hideBuiltInItems();
_contextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, onMenuOpen);
//Initialize each menu item
_jarisVersionMenuItem = new ContextMenuItem("Jaris Player v" + Version.NUMBER + " " + Version.STATUS, true, true, true);
_jarisVersionMenuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, onJarisVersion);
_playMenuItem = new ContextMenuItem("Play (SPACE)", true, true, true);
_playMenuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, onPlay);
_fullscreenMenuItem = new ContextMenuItem("Fullscreen View (F)");
_fullscreenMenuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, onFullscreen);
_aspectRatioMenuItem = new ContextMenuItem("Aspect Ratio (original) (TAB)");
_aspectRatioMenuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, onAspectRatio);
_muteMenuItem = new ContextMenuItem("Mute (M)");
_muteMenuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, onMute);
_volumeUpMenuItem = new ContextMenuItem("Volume + (arrow UP)");
_volumeUpMenuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, onVolumeUp);
_volumeDownMenuItem = new ContextMenuItem("Volume - (arrow DOWN)");
_volumeDownMenuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, onVolumeDown);
_qualityContextMenu = new ContextMenuItem("Lower Quality", true, true, true);
_qualityContextMenu.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, onQuality);
//add all context menu items to context menu object
_contextMenu.customItems.push(_jarisVersionMenuItem);
_contextMenu.customItems.push(_playMenuItem);
_contextMenu.customItems.push(_fullscreenMenuItem);
_contextMenu.customItems.push(_aspectRatioMenuItem);
_contextMenu.customItems.push(_muteMenuItem);
_contextMenu.customItems.push(_volumeUpMenuItem);
_contextMenu.customItems.push(_volumeDownMenuItem);
_contextMenu.customItems.push(_qualityContextMenu);
//override default context menu
_movieClip.contextMenu = _contextMenu;
}
/**
* Update context menu item captions depending on player status before showing them
* @param event
*/
private function onMenuOpen(event:ContextMenuEvent):Void
{
if (_player.isPlaying())
{
_playMenuItem.caption = "Pause (SPACE)";
}
else
{
_playMenuItem.caption = "Play (SPACE)";
}
if (_player.isFullscreen())
{
_fullscreenMenuItem.caption = "Normal View";
}
else
{
_fullscreenMenuItem.caption = "Fullscreen View (F)";
}
if (_player.getMute())
{
_muteMenuItem.caption = _player.isFullscreen()?"Unmute":"Unmute (M)";
}
else
{
_muteMenuItem.caption = _player.isFullscreen()?"Mute":"Mute (M)";
}
switch(_player.getAspectRatioString())
{
case "original":
_aspectRatioMenuItem.caption = "Aspect Ratio (1:1) (TAB)";
case "1:1":
_aspectRatioMenuItem.caption = "Aspect Ratio (3:2) (TAB)";
case "3:2":
_aspectRatioMenuItem.caption = "Aspect Ratio (4:3) (TAB)";
case "4:3":
_aspectRatioMenuItem.caption = "Aspect Ratio (5:4) (TAB)";
case "5:4":
_aspectRatioMenuItem.caption = "Aspect Ratio (14:9) (TAB)";
case "14:9":
_aspectRatioMenuItem.caption = "Aspect Ratio (14:10) (TAB)";
case "14:10":
_aspectRatioMenuItem.caption = "Aspect Ratio (16:9) (TAB)";
case "16:9":
_aspectRatioMenuItem.caption = "Aspect Ratio (16:10) (TAB)";
case "16:10":
_aspectRatioMenuItem.caption = "Aspect Ratio (original) (TAB)";
}
if (_player.getQuality())
{
_qualityContextMenu.caption = "Lower Quality";
}
else
{
_qualityContextMenu.caption = "Higher Quality";
}
}
/**
* Open jaris player website
* @param event
*/
private function onJarisVersion(event:ContextMenuEvent)
{
Lib.getURL(new URLRequest("http://jaris.sourceforge.net"), "_blank");
}
/**
* Toggles playback
* @param event
*/
private function onPlay(event:ContextMenuEvent)
{
_player.togglePlay();
}
/**
* Toggles fullscreen
* @param event
*/
private function onFullscreen(event:ContextMenuEvent)
{
_player.toggleFullscreen();
}
/**
* Toggles aspect ratio
* @param event
*/
private function onAspectRatio(event:ContextMenuEvent)
{
_player.toggleAspectRatio();
}
/**
* Toggles mute
* @param event
*/
private function onMute(event:ContextMenuEvent)
{
_player.toggleMute();
}
/**
* Raise volume
* @param event
*/
private function onVolumeUp(event:ContextMenuEvent)
{
_player.volumeUp();
}
/**
* Lower volume
* @param event
*/
private function onVolumeDown(event:ContextMenuEvent)
{
_player.volumeDown();
}
/**
* Toggle video quality
* @param event
*/
private function onQuality(event:ContextMenuEvent)
{
_player.toggleQuality();
}
}