// JS ::::::::
/*
// This code is adapted from the work of:
// Created by Michael Nachbaur on 13/04/09.
// Copyright 2009 Decaf Ninja Software. All rights reserved.
// MIT licensed
*/
/**
* This class exposes mobile phone interface controls to JavaScript, such as
* native tab and tool bars, etc.
* @constructor
*/
function NativeControls() {
this.tabBarTag = 0;
this.toolBarIndexes = 0;
this.tabBarCallbacks = {};
this.toolBarCallbacks = {};
this.tappedToolBarItem = null;
this.selectedTabBarItem = null;
}
/**
* Create a native tab bar that can have tab buttons added to it which can respond to events.
*/
NativeControls.prototype.createTabBar = function() {
cordova.exec("NativeControls.createTabBar");
};
/**
* Show a tab bar. The tab bar has to be created first.
* @param {Object} [options] Options indicating how the tab bar should be shown:
* - \c height integer indicating the height of the tab bar (default: \c 49)
* - \c position specifies whether the tab bar will be placed at the \c top or \c bottom of the screen (default: \c bottom)
*/
NativeControls.prototype.showTabBar = function(options) {
if (!options) options = {'position' : 'bottom'};
cordova.exec("NativeControls.showTabBar", options);
};
/**
* Hide a tab bar. The tab bar has to be created first.
*/
NativeControls.prototype.hideTabBar = function(animate) {
if (animate == undefined || animate == null)
animate = true;
cordova.exec("NativeControls.hideTabBar", { animate: animate });
};
/**
* Create a new tab bar item for use on a previously created tab bar. Use ::showTabBarItems to show the new item on the tab bar.
*
* If the supplied image name is one of the labels listed below, then this method will construct a tab button
* using the standard system buttons. Note that if you use one of the system images, that the \c title you supply will be ignored.
*
* Tab Buttons
* - tabButton:More
* - tabButton:Favorites
* - tabButton:Featured
* - tabButton:TopRated
* - tabButton:Recents
* - tabButton:Contacts
* - tabButton:History
* - tabButton:Bookmarks
* - tabButton:Search
* - tabButton:Downloads
* - tabButton:MostRecent
* - tabButton:MostViewed
* @param {String} name internal name to refer to this tab by
* @param {String} [title] title text to show on the tab, or null if no text should be shown
* @param {String} [image] image filename or internal identifier to show, or null if now image should be shown
* @param {Object} [options] Options for customizing the individual tab item
* - \c badge value to display in the optional circular badge on the item; if null or unspecified, the badge will be hidden
*/
NativeControls.prototype.createTabBarItem = function(name, label, image, options) {
var tag = this.tabBarTag++;
if (options && 'onSelect' in options && typeof(options['onSelect']) == 'function') {
this.tabBarCallbacks[tag] = {'onSelect':options.onSelect,'name':name};
//delete options.onSelect;
}
cordova.exec("NativeControls.createTabBarItem", name, label, image, tag, options);
};
/**
* Update an existing tab bar item to change its badge value.
* @param {String} name internal name used to represent this item when it was created
* @param {Object} options Options for customizing the individual tab item
* - \c badge value to display in the optional circular badge on the item; if null or unspecified, the badge will be hidden
*/
NativeControls.prototype.updateTabBarItem = function(name, options) {
if (!options) options = {};
cordova.exec("NativeControls.updateTabBarItem", name, options);
};
/**
* Show previously created items on the tab bar
* @param {String} arguments... the item names to be shown
* @param {Object} [options] dictionary of options, notable options including:
* - \c animate indicates that the items should animate onto the tab bar
* @see createTabBarItem
* @see createTabBar
*/
NativeControls.prototype.showTabBarItems = function() {
var parameters = [ "NativeControls.showTabBarItems" ];
for (var i = 0; i < arguments.length; i++) {
parameters.push(arguments[i]);
}
cordova.exec.apply(this, parameters);
};
/**
* Function to detect currently selected tab bar item
* @see createTabBarItem
* @see showTabBarItems
*/
NativeControls.prototype.getSelectedTabBarItem = function() {
return this.selectedTabBarItem;
};
/**
* Manually select an individual tab bar item, or nil for deselecting a currently selected tab bar item.
* @param {String} tabName the name of the tab to select, or null if all tabs should be deselected
* @see createTabBarItem
* @see showTabBarItems
*/
NativeControls.prototype.selectTabBarItem = function(tab) {
cordova.exec("NativeControls.selectTabBarItem", tab);
};
/**
* Function called when a tab bar item has been selected.
* @param {Number} tag the tag number for the item that has been selected
*/
NativeControls.prototype.tabBarItemSelected = function(tag)
{
this.selectedTabBarItem = tag;
if (typeof(this.tabBarCallbacks[tag].onSelect) == 'function')
this.tabBarCallbacks[tag].onSelect(this.tabBarCallbacks[tag].name);
};
/**
* Create a toolbar.
*/
NativeControls.prototype.createToolBar = function()
{
cordova.exec("NativeControls.createToolBar");
};
/**
* Function called when a tab bar item has been selected.
* @param {String} title the title to set within the toolbar
*/
NativeControls.prototype.setToolBarTitle = function(title)
{
cordova.exec("NativeControls.setToolBarTitle", title);
};
/*
* Added by Emile khattar: emile818@gmail.com emile@sign.al
* @ 2011-07-08 , 5.00 AM
*/
/**
* Set toolBarItems = nil;
*/
NativeControls.prototype.resetToolBar = function() {
cordova.exec("NativeControls.resetToolBar");
};
/**
* Hide the tool bar
* @brief hide the tool bar
*/
NativeControls.prototype.hideToolBar = function() {
cordova.exec("NativeControls.hideToolBar");
};
/**
* Show the tool bar ( re-render elements )
* @brief Show the tool bar
*/
NativeControls.prototype.showToolBar = function() {
cordova.exec("NativeControls.showToolBar");
};
/**
* Create a new tool bar button item for use on a previously created tool bar. Use ::showToolBar to show the new item on the tool bar.
*
* If the supplied image name is one of the labels listed below, then this method will construct a button
* using the standard system buttons. Note that if you use one of the system images, that the title you supply will be ignored.
*
* Tool Bar Buttons
* UIBarButtonSystemItemDone
* UIBarButtonSystemItemCancel
* UIBarButtonSystemItemEdit
* UIBarButtonSystemItemSave
* UIBarButtonSystemItemAdd
* UIBarButtonSystemItemFlexibleSpace
* UIBarButtonSystemItemFixedSpace
* UIBarButtonSystemItemCompose
* UIBarButtonSystemItemReply
* UIBarButtonSystemItemAction
* UIBarButtonSystemItemOrganize
* UIBarButtonSystemItemBookmarks
* UIBarButtonSystemItemSearch
* UIBarButtonSystemItemRefresh
* UIBarButtonSystemItemStop
* UIBarButtonSystemItemCamera
* UIBarButtonSystemItemTrash
* UIBarButtonSystemItemPlay
* UIBarButtonSystemItemPause
* UIBarButtonSystemItemRewind
* UIBarButtonSystemItemFastForward
* UIBarButtonSystemItemUndo, // iOS 3.0 and later
* UIBarButtonSystemItemRedo, // iOS 3.0 and later
* UIBarButtonSystemItemPageCurl, // iOS 4.0 and later
* @param {String} name internal name to refer to this tab by
* @param {String} [title] title text to show on the button, or null if no text should be shown
* @param {String} [image] image filename or internal identifier to show, or null if now image should be shown
* @param {Object} [options] Options for customizing the individual tab item [no option available at this time - this is for future proofing]
*
*/
NativeControls.prototype.createToolBarItem = function(name , title , image , options) {
var toolBarIndex = this.toolBarIndexes++;
if (options && 'onTap' in options && typeof(options['onTap']) == 'function') {
this.toolBarCallbacks[toolBarIndex] = {'onTap':options.onTap,'name':name};
//delete options.onSelect;
}
//modify the NativeControls.m to change the options quickly
// the instance name on the plugin can be passed with option for now it is hardcode in objc // Emile
cordova.exec("NativeControls.createToolBarItem" , name , title , image , options );
};
/**
* Function called when a tool bar item has been tapped.
* @param {Number} tag the tag number for the item that has been selected
*/
NativeControls.prototype.toolBarButtonTapped = function(tag)
{
this.tappedToolBarItem = tag;
if (typeof(this.toolBarCallbacks[tag].onTap) == 'function')
this.toolBarCallbacks[tag].onTap(this.toolBarCallbacks[tag].name);
};
NativeControls.prototype.createActionSheet = function(buttonTitles,actionSheetTitle,cancelButtonIndex,destructiveButtonIndex)
{
var options = {};
if(actionSheetTitle != null)
{
options.title = actionSheetTitle;
}
if(cancelButtonIndex != null)
{
options.cancelButtonIndex = cancelButtonIndex;
}
if(destructiveButtonIndex != null)
{
options.destructiveButtonIndex = destructiveButtonIndex;
}
var params = [ "NativeControls.createActionSheet",options ];
for (var i = 0; i < buttonTitles.length; i++)
{
params.push(buttonTitles[i]);
}
cordova.exec.apply(this, params);
this.actionSheetDelegate = {};
return this.actionSheetDelegate;
}
NativeControls.prototype._onActionSheetDismissed = function(index)
{
this.actionSheetDelegate.onActionSheetDismissed(index);
}
NativeControls.prototype.setStatusBarVisibilty = function(bHide)
{
cordova.exec("StatusBar.setHidden",bHide);
}
if(!window.plugins)
window.plugins = {};
window.plugins.nativeControls = new NativeControls();