summaryrefslogtreecommitdiffstats
path: root/panes/toolbar.html
diff options
context:
space:
mode:
Diffstat (limited to 'panes/toolbar.html')
-rw-r--r--panes/toolbar.html1112
1 files changed, 556 insertions, 556 deletions
diff --git a/panes/toolbar.html b/panes/toolbar.html
index b637c60..c76b347 100644
--- a/panes/toolbar.html
+++ b/panes/toolbar.html
@@ -1,556 +1,556 @@
-<!--
-
- Top (main) phpVirtualBox tool bar
- Copyright (C) 2010-2015 Ian Moore (imoore76 at yahoo dot com)
-
- $Id: toolbar.html 599 2015-07-27 10:40:37Z imoore76 $
-
--->
-<script type='text/javascript'>
-
-/*
- * JS objects for actions that can be performed on a VM
- * from this toolbar
- */
-var tButtons = [
-
- vboxVMActions['new'],
- $.extend({},vboxVMActions['settings'],{click: function(){
- var vm = vboxChooser.getSingleSelected();
- if(!vm || vboxVMStates.isRunning(vm) || vboxVMStates.isPaused(vm)) return;
- vboxVMActions['settings'].click();
-
- }}),
- vboxVMActions['start'],
- {
- name: 'stop',
- icon: 'vm_poweroff',
- label: 'Stop',
- language_context: 'VBoxSelectorWnd',
- enabled: vboxVMActions['stop'].enabled,
- click : function() {return;}
- }
-];
-
-/* Append Top Toolbar */
-var vboxChooserToolbarTop = new vboxToolbar({buttons: tButtons, size: 32,
- language_context: 'UIActionPool', renderTo: 'vboxPaneToolbar'});
-
-/* Stop button menu and actions */
-var stopMenuItems = [
- vboxVMActions['pause'],
- vboxVMActions['reset'],
-];
-for(var i = 0; i < vboxVMActions.stop_actions.length; i++) {
- var n = $.extend({}, vboxVMActions[vboxVMActions.stop_actions[i]]);
- if(i==0) n.separator = true;
- stopMenuItems[stopMenuItems.length] = n;
-}
-stopMenu = new vboxMenu({name: 'stopContextMenu', menuItems: stopMenuItems, language_context: 'UIActionPool'});
-
-vboxChooserToolbarTop.getButtonElement('stop').contextMenu({
- menu: stopMenu.menuId(),
- button: 0,
- mode: 'menu'
- },function(a, el, pos) {
- for(var i in vboxVMActions) {
- if(typeof i == 'string' && vboxVMActions[i].name == a) {
- vboxVMActions[i].click();
- return;
- }
- }
- }
-);
-
-/* 'Settings' menu items / actions */
-var vboxChooserSettingsMenu = {
-
- 'settings' : {
- 'label' : vboxVMActions['settings'].label,
- 'icon' : vboxVMActions['settings'].icon
- },
- 'storage' : {
- 'icon' : 'hd'
- },
- 'USB' : {
- 'label' : 'USB',
- 'icon' : 'usb'
- },
- 'Network' : {
- 'label' : 'Network',
- 'icon' : 'nw'
- },
- 'SharedFolders' : {
- 'label' : 'Shared Folders',
- 'icon' : 'sf'
- },
- 'RemoteDisplay' : {
- 'label' : 'Remote Display',
- 'icon' : 'vrdp',
- 'separator' : true
- },
- 'GuestAdditions' : {
- 'label' : vboxVMActions['guestAdditionsInstall'].label,
- 'icon' : vboxVMActions['guestAdditionsInstall'].icon,
- 'separator' : true
- }
-
-};
-
-
-/* 'Settings' menu */
-var ul = $('<ul />').attr({'class':'contextMenu','style':'display: none','id':'vboxVMSettingsMenu'});
-
-for(var i in vboxChooserSettingsMenu) {
-
- // add name
- vboxChooserSettingsMenu[i].name = i;
- var label = trans(vboxChooserSettingsMenu[i].label, 'UIActionPool');
- var li = $('<li />').html("<span class='vboxMenuItemChecked' /><a href='#" + vboxChooserSettingsMenu[i].name + "' style='background-image: url(images/vbox/" + vboxChooserSettingsMenu[i].icon +"_16px.png);' >"+(label ? label : ' ')+"</a>");
- if(i == 'storage') { $(li).attr({'style':'display:none','id':'vboxVMSettingsToolbarStorageHolder'}); }
- if(i == 'USB') {
- /* 'USB' menu */
- $('<ul />').attr({'class':'vboxSettingsUSBAttachmentsMenu contextMenuNoBG','style':'display: none','id':'vboxVMSettingsUSBMenu'}).data({'callback':'vboxChooserToolbarUSBUpdate'}).appendTo(li);
- }
- if(vboxChooserSettingsMenu[i].separator) $(li).addClass('separator');
- $(ul).append(li);
-
-}
-
-/* Append 'Settings' button Menu */
-$('#vboxPane').append(ul);
-
-
-
-/* 'Settings' button menu initialization */
-vboxChooserToolbarTop.getButtonElement('settings').contextMenu({
- menu: 'vboxVMSettingsMenu',
- button: 0,
- mode: 'menu'
- },
- function(a, el, pos, srcEl) {
-
- var vm = vboxChooser.getSingleSelected();
-
- if(!vm) return;
-
- switch(a) {
-
- case 'Network':
- case 'SharedFolders':
- vboxVMsettingsDialog(vm, a);
- break;
-
- case 'GuestAdditions':
-
- vboxVMActions['guestAdditionsInstall'].click();
- break;
-
- // Don't do anything for dvd, fd, or USB devices main menu item click
- case 'dvdDevices':
- case 'fdDevices':
- case 'USB':
- break;
-
- case 'RemoteDisplay':
- var en = vboxVMDataMediator.getVMRuntimeData(vm.id).VRDEServer.enabled;
- vboxAjaxRequest('consoleVRDEServerSave',{'vm':vm.id,'enabled':(en ? 0 : 1)});
- break;
-
- case 'settings':
- vboxVMActions['settings'].click();
- break;
-
- default:
-
- // Assume it was a storage action
- if(vboxToolbarMediaLast) {
- if(vboxToolbarMediaLast.type == 'DVD') {
- vboxToolbarMediaMenuDVD.menuCallback(a,el,pos);
- } else {
- vboxToolbarMediaMenuFD.menuCallback(a,el,pos);
- }
- }
-
- } // </ switch / case >
-
- }
-);
-
-/*
- * Storage mount menu
- */
-var vboxToolbarMediaLast = null; // Used when context menu item is clicked to determine
- // which medium attachment to act upon.
-function vboxChooserToolbarMediumMount(medium) {
-
- var vmid = vboxChooser.getSingleSelectedId();
-
- var args = {'vm':vmid,'medium':medium,'port':vboxToolbarMediaLast.port,'device':vboxToolbarMediaLast.device,'bus':vboxToolbarMediaLast.bus,'controller':vboxToolbarMediaLast.controller};
-
- // Ajax request to mount medium
- var mount = new vboxLoader('mediumMount');
- mount.add('mediumMount',function(d){
- var l = new vboxLoader('getMedia');
- l.add('vboxGetMedia',function(d){$('#vboxPane').data('vboxMedia',d.responseData);});
- l.run();
- },args);
- mount.run();
-}
-var vboxToolbarMediaMenuDVD = new vboxMediaMenu('DVD',vboxChooserToolbarMediumMount,'');
-var vboxToolbarMediaMenuFD = new vboxMediaMenu('Floppy',vboxChooserToolbarMediumMount,'');
-
-function vboxChooserToolbarStorageUpdate(menu) {
-
- vboxToolbarMediaLast = $(menu).data('storage');
- var medium = null;
- if(vboxToolbarMediaLast && vboxToolbarMediaLast.medium && vboxToolbarMediaLast.medium.id)
- medium = vboxMedia.getMediumById(vboxToolbarMediaLast.medium.id);
-
- if(vboxToolbarMediaLast.type == 'DVD') {
- vboxToolbarMediaMenuDVD.menuUpdateMedia(medium);
- return vboxToolbarMediaMenuDVD.menuElement();
- }
-
- vboxToolbarMediaMenuFD.menuUpdateMedia(medium);
- return vboxToolbarMediaMenuFD.menuElement();
-}
-
-// Update host drives and recent media on host change.
-// Just recreate the menus
-$('#vboxPane').on('hostChanged',function(){
- vboxToolbarMediaMenuDVD = new vboxMediaMenu('DVD',vboxChooserToolbarMediumMount,'');
- vboxToolbarMediaMenuFD = new vboxMediaMenu('Floppy',vboxChooserToolbarMediumMount,'');
-});
-/*
- * Update USB device list
- */
-function vboxChooserToolbarUSBUpdate(menu) {
-
- $(menu).append($('<li />').html('<span><img src="images/jqueryFileTree/spinner.gif" /></span>').css({'width':'100px','text-align':'center'}));
-
- var vm = vboxChooser.getSingleSelected();
-
- var l = new vboxLoader();
-
- l.add('hostGetUSBDevices',function(d){
- $('#vboxPaneToolbar').data('hostUSB',d.responseData);
- },{});
-
- l.add('consoleGetUSBDevices',function(d){
- $('#vboxPaneToolbar').data('guestUSB',d.responseData);
- },{'vm':vm.id});
-
- l.noLoadingScreen = true;
- l.onLoad = function() {
-
- var hostUSB = $('#vboxPaneToolbar').data('hostUSB');
- var guestUSB = $('#vboxPaneToolbar').data('guestUSB');
- $(menu).children().remove();
-
- for(var i = 0; i < hostUSB.length; i++) {
-
- var dname = '';
- if(!hostUSB[i].product) {
- dname = trans('Unknown device %1:%2','UIActionPool').replace('%1',hostUSB[i].vendorId).replace('%2',hostUSB[i].productId);
- } else {
- dname = hostUSB[i].manufacturer + ' ' + hostUSB[i].product;
- }
- dname += ' [' + hostUSB[i].revision + ']';
- var capt = (hostUSB[i].state == 'Captured' && guestUSB[hostUSB[i].id]);
- var avail = (capt || (hostUSB[i].state != 'NotSupported' && hostUSB[i].state != 'Unavailable' && hostUSB[i].state != 'Captured'));
- var cbox = $('<input />').attr({'type':'checkbox','class':'vboxCheckbox'}).prop({'checked':(capt ? true : false),'disabled':(avail ? false : true)}).on('click',function(e){
- e.stopPropagation();
- if($(this).prop('disabled')) return;
-
- var cbox = $(this);
- // Detach
- if($(this).data('capt')) {
- $.when(vboxAjaxRequest('consoleUSBDeviceDetach',{'vm':vm.id,'id':$(this).data('usbDevice')})).done(function(d){
- if(d.success) {
- cbox.prop('checked',false);
- cbox.data('capt',false);
- } else {
- cbox.prop('checked',true);
- }
- });
- // Attach
- } else {
- $.when(vboxAjaxRequest('consoleUSBDeviceAttach',{'vm':vm.id,'id':$(this).data('usbDevice')})).done(function(d){
- if(d.success) {
- cbox.prop('checked',true);
- cbox.data('capt',true);
- } else {
- cbox.prop('checked',false);
- }
- });
- }
- }).data({'usbDevice':hostUSB[i].id,'capt':capt});
-
- $(menu).append($('<li />').append(
- $('<span />').addClass('vboxMenuAcceptClick')
- .click(function(){if(!$(this).parent().hasClass('disabled')){$(this).children('input').click();}return false;})
- .append(cbox).append(' '+dname)).attr({'class':(avail ? '' : 'disabled')}));
- }
-
- // No devices?
- if(hostUSB.length == 0) {
- $(menu).append($('<li />').html('<span>'+$('<div />').text(trans('<no devices available>','VBoxUSBMenu')).html()+'</span>'));
- }
- $(menu).trigger('menuLoaded');
- };
- l.run();
-}
-
-/*
- *
- * Update vboxSettingsMenu items. Called when
- * vboxChooser selection changes $('#vboxPane').onvmSelectionListChanged
- *
- */
-function vboxUpdateSettingsMenu(vm) {
-
- if(vboxVMStates.isRunning(vm) || vboxVMStates.isPaused(vm)) {
- vboxChooserToolbarTop.getButtonElement("settings").enableContextMenu();
- } else {
- vboxChooserToolbarTop.getButtonElement("settings").disableContextMenu();
- return;
- }
- // enable or disable USB
- var usbEnabled = false;
- if(vm['USBControllers'].length) {
- for(var i = 0; i < vm['USBControllers'].length; i++) {
- if(vm['USBControllers'][i].type == 'OHCI') {
- usbEnabled = true;
- break;
- }
- }
- }
- if(usbEnabled) {
- $('ul.vboxSettingsUSBAttachmentsMenu').children().remove();
- $('#vboxVMSettingsMenu').find('a[href=#USB]').closest('li').css('display','');
- } else {
- $('#vboxVMSettingsMenu').find('a[href=#USB]').closest('li').css('display','none');
- }
-
- // Enable or disable network
- var enabledS = false;
- if(vm && vm.networkAdapters && vm.networkAdapters.length) {
- for(var a = 0; a < vm.networkAdapters.length; a++) {
- if(vm.networkAdapters[a].enabled) {
- enabledS = true;
- break;
- }
- }
- }
- if(enabledS) {
- $('#vboxVMSettingsMenu').find('a[href=#Network]').closest('li').css('display','');
- } else {
- $('#vboxVMSettingsMenu').find('a[href=#Network]').closest('li').css('display','none');
- }
-
- // vboxVMSettingsToolbarStorageHolder
- var smenu = $('#vboxVMSettingsToolbarStorageHolder');
- smenu.siblings('li.vboxVMSettingsStorage').remove();
- $('ul.vboxVMSettingsStorage').remove();
- var enabledS = false;
- if(vm && vm.storageControllers && vm.storageControllers.length) {
- var dvdDevices = new Array();
- var fdDevices = new Array();
-
- for(var a = 0; a < vm.storageControllers.length; a++) {
-
- // See if this bus type supports removable media
- if(jQuery.inArray('dvd',vboxStorage[vm['storageControllers'][a].bus].driveTypes) == -1 &&
- jQuery.inArray('floppy',vboxStorage[vm['storageControllers'][a].bus].driveTypes) == -1)
- continue;
-
- var icon = vboxStorage.getBusIconName(vm['storageControllers'][a].bus);
-
- for(var b = 0; b < vm['storageControllers'][a]['mediumAttachments'].length; b++) {
-
- if(vm['storageControllers'][a]['mediumAttachments'][b].type == 'HardDisk') continue;
-
- vm['storageControllers'][a]['mediumAttachments'][b]['controller'] = vm['storageControllers'][a]['name'];
-
- var portName = vboxStorage[vm['storageControllers'][a].bus].slotName(vm['storageControllers'][a]['mediumAttachments'][b].port, vm['storageControllers'][a]['mediumAttachments'][b].device);
- var m = vm['storageControllers'][a]['mediumAttachments'][b].medium;
- m = vboxMedia.getMediumById((m && m.id ? m.id : null));
-
- var mName = vboxMedia.getName(m);
- mName = $('<div />').text(mName).html();
-
-
- var smid = vm.id+'-vboxVMSettingsStorage-'+a+'-'+b;
- $('#'+vm.id+'-vboxVMSettingsStorage-'+a+'-'+b).remove();
-
- var li = $('<li />').attr({'title':mName}).html("<a title='"+mName+"' href='#mount-"+vm['storageControllers'][a].bus+"-"+vm['storageControllers'][a]['mediumAttachments'][b].port+"-"+vm['storageControllers'][a]['mediumAttachments'][b].device+"' style='background-image:url(images/vbox/"+icon+"_16px.png);'>"+vm['storageControllers'][a]['name'] + ' ('+portName + ")</a>").addClass('vboxVMSettingsStorage');
- $(li).append($('<ul />').attr({'id':smid,'style':'display:none'}).data({'callback':'vboxChooserToolbarStorageUpdate','storage':vm['storageControllers'][a]['mediumAttachments'][b]}));
- if(vm['storageControllers'][a]['mediumAttachments'][b].type == 'DVD') {
- dvdDevices[dvdDevices.length] = li;
- } else {
- fdDevices[fdDevices.length] = li;
- }
- enabledS = true;
- }
- }
- if(dvdDevices.length) {
- var ul = null;
- var li = $('<li />').html("<a href='#dvdDevices' style='background-image:url(images/vbox/cd_16px.png);'>"+trans('Optical Drives','UIActionPool')+'</a>').addClass('vboxVMSettingsStorage');
- if(dvdDevices.length == 1) {
- ul = dvdDevices[0].children('ul').first();
- } else {
- ul = $('<ul />').attr({'style':'display:none'}).addClass('vboxVMSettingsStorage');
- for(var i = 0; i < dvdDevices.length; i++) {
- $(ul).append(dvdDevices[i]);
- }
- }
- $(li).append(ul).insertBefore(smenu);
- }
-
- if(fdDevices.length) {
- var ul = null;
- var li = $('<li />').html("<a href='#fdDevices' style='background-image:url(images/vbox/fd_16px.png);'>"+trans('Floppy Devices','UIActionPool')+'</a>').addClass('vboxVMSettingsStorage');
- if(fdDevices.length == 1) {
- ul = fdDevices[0].children('ul').first();
- } else {
- ul = $('<ul />').attr({'style':'display:none'}).addClass('vboxVMSettingsStorage');
- for(var i = 0; i < fdDevices.length; i++) {
- $(ul).append(fdDevices[i]);
- }
- }
- $(li).append(ul).insertBefore(smenu);
- }
-
- }
- if(enabledS) {
- $('#vboxVMSettingsMenu').find('a[href=#Network]').parent().addClass('separator');
- } else {
- $('#vboxVMSettingsMenu').find('a[href=#Network]').parent().removeClass('separator');
- }
-
- // Enable remote display?
- if(vm && vm.VRDEServer) {
- $('#vboxVMSettingsMenu').find('a[href=#RemoteDisplay]').css({'background-image':'url(images/vbox/vrdp' + (vm.VRDEServer.enabled ? '_on' : '') + '_16px.png)'}).parent().removeClass('disabled')
- .addClass((vm.VRDEServer.enabled ? 'vboxMenuItemChecked' : '')).removeClass((vm.VRDEServer.enabled ? '' : 'vboxMenuItemChecked'));
- } else {
- $('#vboxVMSettingsMenu').find('a[href=#RemoteDisplay]').css({'background-image':'url(images/vbox/vrdp_disabled_16px.png)'}).parent().addClass('disabled');
- }
-
-
-}
-
-
-/*
- Bind events...
- */
-
-// Selection list changed
-$('#vboxPane').on('vmSelectionListChanged',function(e) {
-
- vboxChooserToolbarTop.update(vboxChooser);
- vboxUpdateSettingsMenu();
-
- // Check for a single selected VM and
- // update settings menu based on its runtime data
- if(vboxChooser.selectedVMs.length == 1 && (vboxChooser.isSelectedInState('Running') || vboxChooser.isSelectedInState('Paused'))) {
-
- // Get data
- $.when(vboxVMDataMediator.getVMDataCombined(vboxChooser.selectedVMs[0]))
- .done(function(d) {
-
- vboxUpdateSettingsMenu(d);
-
- });
-
- }
-
-// Update menus on these events
-}).on('vboxEvents', function(e, eventList) {
-
- var updateToolbar = false;
- var updateSettingsMenu = false;
- var updateVRDE = false;
-
- for(var i = 0; i < eventList.length && !(updateToolbar && updateSettingsMenu); i++) {
-
- switch(eventList[i].eventType) {
-
- // Machine or session state change
- case 'OnMachineStateChanged':
- case 'OnSessionStateChanged':
- if(vboxChooser.isVMSelected(eventList[i].machineId)) {
- updateToolbar = true;
- }
- if(vboxChooser.getSingleSelectedId() == eventList[i].machineId) {
- updateSettingsMenu = true;
- }
- break;
-
- // Machine or medium data change
- case 'OnMachineDataChanged':
- case 'OnMediumChanged':
- if(vboxChooser.isVMSelected(eventList[i].machineId)) {
- updateToolbar = true;
- updateSettingsMenu = true;
- }
- break;
-
- // VRDE Server
- case 'OnVRDEServerChanged':
- case 'OnVRDEServerInfoChanged':
- if(!updateSettingsMenu && !updateVRDE && vboxChooser.isVMSelected(eventList[i].machineId)) {
- if(eventList[i].enrichmentData && eventList[i].enrichmentData.enabled) {
- updateVRDE = function(){
- $('#vboxVMSettingsMenu').find('a[href=#RemoteDisplay]').css({'background-image':'url(images/vbox/vrdp_on_16px.png)'}).parent().removeClass('disabled')
- .addClass('vboxMenuItemChecked');
- };
- } else {
- updateVRDE = function(){
- $('#vboxVMSettingsMenu').find('a[href=#RemoteDisplay]').css({'background-image':'url(images/vbox/vrdp_16px.png)'}).parent().removeClass('disabled')
- .removeClass('vboxMenuItemChecked');
-
- };
- }
- }
- break;
-
-
- } // </ switch event type >
-
- } // </ for each event >
-
- // Toolbar
- if(updateToolbar) {
- vboxChooserToolbarTop.update(vboxChooser);
- }
-
- // Entire settings menu or just VRDE
- if(updateSettingsMenu) {
-
- // Check for a single selected VM and
- // update settings menu based on its runtime data
- if(vboxChooser.selectedVMs.length == 1 && (vboxChooser.isSelectedInState('Running') || vboxChooser.isSelectedInState('Paused'))) {
-
- // Get data
- $.when(vboxVMDataMediator.getVMDataCombined(vboxChooser.selectedVMs[0]))
- .done(function(d) {
- vboxUpdateSettingsMenu(d);
- });
-
- } else {
- vboxUpdateSettingsMenu();
- }
-
- } else if(updateVRDE) {
-
- updateVRDE();
-
- }
-
-});
-
-$('#vboxVMSettingsMenu').disableContextMenu();
-
-
-</script>
+<!--
+
+ Top (main) phpVirtualBox tool bar
+ Copyright (C) 2010-2015 Ian Moore (imoore76 at yahoo dot com)
+
+ $Id: toolbar.html 599 2015-07-27 10:40:37Z imoore76 $
+
+-->
+<script type='text/javascript'>
+
+/*
+ * JS objects for actions that can be performed on a VM
+ * from this toolbar
+ */
+var tButtons = [
+
+ vboxVMActions['new'],
+ $.extend({},vboxVMActions['settings'],{click: function(){
+ var vm = vboxChooser.getSingleSelected();
+ if(!vm || vboxVMStates.isRunning(vm) || vboxVMStates.isPaused(vm)) return;
+ vboxVMActions['settings'].click();
+
+ }}),
+ vboxVMActions['start'],
+ {
+ name: 'stop',
+ icon: 'vm_poweroff',
+ label: 'Stop',
+ language_context: 'VBoxSelectorWnd',
+ enabled: vboxVMActions['stop'].enabled,
+ click : function() {return;}
+ }
+];
+
+/* Append Top Toolbar */
+var vboxChooserToolbarTop = new vboxToolbar({buttons: tButtons, size: 32,
+ language_context: 'UIActionPool', renderTo: 'vboxPaneToolbar'});
+
+/* Stop button menu and actions */
+var stopMenuItems = [
+ vboxVMActions['pause'],
+ vboxVMActions['reset'],
+];
+for(var i = 0; i < vboxVMActions.stop_actions.length; i++) {
+ var n = $.extend({}, vboxVMActions[vboxVMActions.stop_actions[i]]);
+ if(i==0) n.separator = true;
+ stopMenuItems[stopMenuItems.length] = n;
+}
+stopMenu = new vboxMenu({name: 'stopContextMenu', menuItems: stopMenuItems, language_context: 'UIActionPool'});
+
+vboxChooserToolbarTop.getButtonElement('stop').contextMenu({
+ menu: stopMenu.menuId(),
+ button: 0,
+ mode: 'menu'
+ },function(a, el, pos) {
+ for(var i in vboxVMActions) {
+ if(typeof i == 'string' && vboxVMActions[i].name == a) {
+ vboxVMActions[i].click();
+ return;
+ }
+ }
+ }
+);
+
+/* 'Settings' menu items / actions */
+var vboxChooserSettingsMenu = {
+
+ 'settings' : {
+ 'label' : vboxVMActions['settings'].label,
+ 'icon' : vboxVMActions['settings'].icon
+ },
+ 'storage' : {
+ 'icon' : 'hd'
+ },
+ 'USB' : {
+ 'label' : 'USB',
+ 'icon' : 'usb'
+ },
+ 'Network' : {
+ 'label' : 'Network',
+ 'icon' : 'nw'
+ },
+ 'SharedFolders' : {
+ 'label' : 'Shared Folders',
+ 'icon' : 'sf'
+ },
+ 'RemoteDisplay' : {
+ 'label' : 'Remote Display',
+ 'icon' : 'vrdp',
+ 'separator' : true
+ },
+ 'GuestAdditions' : {
+ 'label' : vboxVMActions['guestAdditionsInstall'].label,
+ 'icon' : vboxVMActions['guestAdditionsInstall'].icon,
+ 'separator' : true
+ }
+
+};
+
+
+/* 'Settings' menu */
+var ul = $('<ul />').attr({'class':'contextMenu','style':'display: none','id':'vboxVMSettingsMenu'});
+
+for(var i in vboxChooserSettingsMenu) {
+
+ // add name
+ vboxChooserSettingsMenu[i].name = i;
+ var label = trans(vboxChooserSettingsMenu[i].label, 'UIActionPool');
+ var li = $('<li />').html("<span class='vboxMenuItemChecked' /><a href='#" + vboxChooserSettingsMenu[i].name + "' style='background-image: url(images/vbox/" + vboxChooserSettingsMenu[i].icon +"_16px.png);' >"+(label ? label : ' ')+"</a>");
+ if(i == 'storage') { $(li).attr({'style':'display:none','id':'vboxVMSettingsToolbarStorageHolder'}); }
+ if(i == 'USB') {
+ /* 'USB' menu */
+ $('<ul />').attr({'class':'vboxSettingsUSBAttachmentsMenu contextMenuNoBG','style':'display: none','id':'vboxVMSettingsUSBMenu'}).data({'callback':'vboxChooserToolbarUSBUpdate'}).appendTo(li);
+ }
+ if(vboxChooserSettingsMenu[i].separator) $(li).addClass('separator');
+ $(ul).append(li);
+
+}
+
+/* Append 'Settings' button Menu */
+$('#vboxPane').append(ul);
+
+
+
+/* 'Settings' button menu initialization */
+vboxChooserToolbarTop.getButtonElement('settings').contextMenu({
+ menu: 'vboxVMSettingsMenu',
+ button: 0,
+ mode: 'menu'
+ },
+ function(a, el, pos, srcEl) {
+
+ var vm = vboxChooser.getSingleSelected();
+
+ if(!vm) return;
+
+ switch(a) {
+
+ case 'Network':
+ case 'SharedFolders':
+ vboxVMsettingsDialog(vm, a);
+ break;
+
+ case 'GuestAdditions':
+
+ vboxVMActions['guestAdditionsInstall'].click();
+ break;
+
+ // Don't do anything for dvd, fd, or USB devices main menu item click
+ case 'dvdDevices':
+ case 'fdDevices':
+ case 'USB':
+ break;
+
+ case 'RemoteDisplay':
+ var en = vboxVMDataMediator.getVMRuntimeData(vm.id).VRDEServer.enabled;
+ vboxAjaxRequest('consoleVRDEServerSave',{'vm':vm.id,'enabled':(en ? 0 : 1)});
+ break;
+
+ case 'settings':
+ vboxVMActions['settings'].click();
+ break;
+
+ default:
+
+ // Assume it was a storage action
+ if(vboxToolbarMediaLast) {
+ if(vboxToolbarMediaLast.type == 'DVD') {
+ vboxToolbarMediaMenuDVD.menuCallback(a,el,pos);
+ } else {
+ vboxToolbarMediaMenuFD.menuCallback(a,el,pos);
+ }
+ }
+
+ } // </ switch / case >
+
+ }
+);
+
+/*
+ * Storage mount menu
+ */
+var vboxToolbarMediaLast = null; // Used when context menu item is clicked to determine
+ // which medium attachment to act upon.
+function vboxChooserToolbarMediumMount(medium) {
+
+ var vmid = vboxChooser.getSingleSelectedId();
+
+ var args = {'vm':vmid,'medium':medium,'port':vboxToolbarMediaLast.port,'device':vboxToolbarMediaLast.device,'bus':vboxToolbarMediaLast.bus,'controller':vboxToolbarMediaLast.controller};
+
+ // Ajax request to mount medium
+ var mount = new vboxLoader('mediumMount');
+ mount.add('mediumMount',function(d){
+ var l = new vboxLoader('getMedia');
+ l.add('vboxGetMedia',function(d){$('#vboxPane').data('vboxMedia',d.responseData);});
+ l.run();
+ },args);
+ mount.run();
+}
+var vboxToolbarMediaMenuDVD = new vboxMediaMenu('DVD',vboxChooserToolbarMediumMount,'');
+var vboxToolbarMediaMenuFD = new vboxMediaMenu('Floppy',vboxChooserToolbarMediumMount,'');
+
+function vboxChooserToolbarStorageUpdate(menu) {
+
+ vboxToolbarMediaLast = $(menu).data('storage');
+ var medium = null;
+ if(vboxToolbarMediaLast && vboxToolbarMediaLast.medium && vboxToolbarMediaLast.medium.id)
+ medium = vboxMedia.getMediumById(vboxToolbarMediaLast.medium.id);
+
+ if(vboxToolbarMediaLast.type == 'DVD') {
+ vboxToolbarMediaMenuDVD.menuUpdateMedia(medium);
+ return vboxToolbarMediaMenuDVD.menuElement();
+ }
+
+ vboxToolbarMediaMenuFD.menuUpdateMedia(medium);
+ return vboxToolbarMediaMenuFD.menuElement();
+}
+
+// Update host drives and recent media on host change.
+// Just recreate the menus
+$('#vboxPane').on('hostChanged',function(){
+ vboxToolbarMediaMenuDVD = new vboxMediaMenu('DVD',vboxChooserToolbarMediumMount,'');
+ vboxToolbarMediaMenuFD = new vboxMediaMenu('Floppy',vboxChooserToolbarMediumMount,'');
+});
+/*
+ * Update USB device list
+ */
+function vboxChooserToolbarUSBUpdate(menu) {
+
+ $(menu).append($('<li />').html('<span><img src="images/jqueryFileTree/spinner.gif" /></span>').css({'width':'100px','text-align':'center'}));
+
+ var vm = vboxChooser.getSingleSelected();
+
+ var l = new vboxLoader();
+
+ l.add('hostGetUSBDevices',function(d){
+ $('#vboxPaneToolbar').data('hostUSB',d.responseData);
+ },{});
+
+ l.add('consoleGetUSBDevices',function(d){
+ $('#vboxPaneToolbar').data('guestUSB',d.responseData);
+ },{'vm':vm.id});
+
+ l.noLoadingScreen = true;
+ l.onLoad = function() {
+
+ var hostUSB = $('#vboxPaneToolbar').data('hostUSB');
+ var guestUSB = $('#vboxPaneToolbar').data('guestUSB');
+ $(menu).children().remove();
+
+ for(var i = 0; i < hostUSB.length; i++) {
+
+ var dname = '';
+ if(!hostUSB[i].product) {
+ dname = trans('Unknown device %1:%2','UIActionPool').replace('%1',hostUSB[i].vendorId).replace('%2',hostUSB[i].productId);
+ } else {
+ dname = hostUSB[i].manufacturer + ' ' + hostUSB[i].product;
+ }
+ dname += ' [' + hostUSB[i].revision + ']';
+ var capt = (hostUSB[i].state == 'Captured' && guestUSB[hostUSB[i].id]);
+ var avail = (capt || (hostUSB[i].state != 'NotSupported' && hostUSB[i].state != 'Unavailable' && hostUSB[i].state != 'Captured'));
+ var cbox = $('<input />').attr({'type':'checkbox','class':'vboxCheckbox'}).prop({'checked':(capt ? true : false),'disabled':(avail ? false : true)}).on('click',function(e){
+ e.stopPropagation();
+ if($(this).prop('disabled')) return;
+
+ var cbox = $(this);
+ // Detach
+ if($(this).data('capt')) {
+ $.when(vboxAjaxRequest('consoleUSBDeviceDetach',{'vm':vm.id,'id':$(this).data('usbDevice')})).done(function(d){
+ if(d.success) {
+ cbox.prop('checked',false);
+ cbox.data('capt',false);
+ } else {
+ cbox.prop('checked',true);
+ }
+ });
+ // Attach
+ } else {
+ $.when(vboxAjaxRequest('consoleUSBDeviceAttach',{'vm':vm.id,'id':$(this).data('usbDevice')})).done(function(d){
+ if(d.success) {
+ cbox.prop('checked',true);
+ cbox.data('capt',true);
+ } else {
+ cbox.prop('checked',false);
+ }
+ });
+ }
+ }).data({'usbDevice':hostUSB[i].id,'capt':capt});
+
+ $(menu).append($('<li />').append(
+ $('<span />').addClass('vboxMenuAcceptClick')
+ .click(function(){if(!$(this).parent().hasClass('disabled')){$(this).children('input').click();}return false;})
+ .append(cbox).append(' '+dname)).attr({'class':(avail ? '' : 'disabled')}));
+ }
+
+ // No devices?
+ if(hostUSB.length == 0) {
+ $(menu).append($('<li />').html('<span>'+$('<div />').text(trans('<no devices available>','VBoxUSBMenu')).html()+'</span>'));
+ }
+ $(menu).trigger('menuLoaded');
+ };
+ l.run();
+}
+
+/*
+ *
+ * Update vboxSettingsMenu items. Called when
+ * vboxChooser selection changes $('#vboxPane').onvmSelectionListChanged
+ *
+ */
+function vboxUpdateSettingsMenu(vm) {
+
+ if(vboxVMStates.isRunning(vm) || vboxVMStates.isPaused(vm)) {
+ vboxChooserToolbarTop.getButtonElement("settings").enableContextMenu();
+ } else {
+ vboxChooserToolbarTop.getButtonElement("settings").disableContextMenu();
+ return;
+ }
+ // enable or disable USB
+ var usbEnabled = false;
+ if(vm['USBControllers'].length) {
+ for(var i = 0; i < vm['USBControllers'].length; i++) {
+ if(vm['USBControllers'][i].type == 'OHCI') {
+ usbEnabled = true;
+ break;
+ }
+ }
+ }
+ if(usbEnabled) {
+ $('ul.vboxSettingsUSBAttachmentsMenu').children().remove();
+ $('#vboxVMSettingsMenu').find('a[href=#USB]').closest('li').css('display','');
+ } else {
+ $('#vboxVMSettingsMenu').find('a[href=#USB]').closest('li').css('display','none');
+ }
+
+ // Enable or disable network
+ var enabledS = false;
+ if(vm && vm.networkAdapters && vm.networkAdapters.length) {
+ for(var a = 0; a < vm.networkAdapters.length; a++) {
+ if(vm.networkAdapters[a].enabled) {
+ enabledS = true;
+ break;
+ }
+ }
+ }
+ if(enabledS) {
+ $('#vboxVMSettingsMenu').find('a[href=#Network]').closest('li').css('display','');
+ } else {
+ $('#vboxVMSettingsMenu').find('a[href=#Network]').closest('li').css('display','none');
+ }
+
+ // vboxVMSettingsToolbarStorageHolder
+ var smenu = $('#vboxVMSettingsToolbarStorageHolder');
+ smenu.siblings('li.vboxVMSettingsStorage').remove();
+ $('ul.vboxVMSettingsStorage').remove();
+ var enabledS = false;
+ if(vm && vm.storageControllers && vm.storageControllers.length) {
+ var dvdDevices = new Array();
+ var fdDevices = new Array();
+
+ for(var a = 0; a < vm.storageControllers.length; a++) {
+
+ // See if this bus type supports removable media
+ if(jQuery.inArray('dvd',vboxStorage[vm['storageControllers'][a].bus].driveTypes) == -1 &&
+ jQuery.inArray('floppy',vboxStorage[vm['storageControllers'][a].bus].driveTypes) == -1)
+ continue;
+
+ var icon = vboxStorage.getBusIconName(vm['storageControllers'][a].bus);
+
+ for(var b = 0; b < vm['storageControllers'][a]['mediumAttachments'].length; b++) {
+
+ if(vm['storageControllers'][a]['mediumAttachments'][b].type == 'HardDisk') continue;
+
+ vm['storageControllers'][a]['mediumAttachments'][b]['controller'] = vm['storageControllers'][a]['name'];
+
+ var portName = vboxStorage[vm['storageControllers'][a].bus].slotName(vm['storageControllers'][a]['mediumAttachments'][b].port, vm['storageControllers'][a]['mediumAttachments'][b].device);
+ var m = vm['storageControllers'][a]['mediumAttachments'][b].medium;
+ m = vboxMedia.getMediumById((m && m.id ? m.id : null));
+
+ var mName = vboxMedia.getName(m);
+ mName = $('<div />').text(mName).html();
+
+
+ var smid = vm.id+'-vboxVMSettingsStorage-'+a+'-'+b;
+ $('#'+vm.id+'-vboxVMSettingsStorage-'+a+'-'+b).remove();
+
+ var li = $('<li />').attr({'title':mName}).html("<a title='"+mName+"' href='#mount-"+vm['storageControllers'][a].bus+"-"+vm['storageControllers'][a]['mediumAttachments'][b].port+"-"+vm['storageControllers'][a]['mediumAttachments'][b].device+"' style='background-image:url(images/vbox/"+icon+"_16px.png);'>"+vm['storageControllers'][a]['name'] + ' ('+portName + ")</a>").addClass('vboxVMSettingsStorage');
+ $(li).append($('<ul />').attr({'id':smid,'style':'display:none'}).data({'callback':'vboxChooserToolbarStorageUpdate','storage':vm['storageControllers'][a]['mediumAttachments'][b]}));
+ if(vm['storageControllers'][a]['mediumAttachments'][b].type == 'DVD') {
+ dvdDevices[dvdDevices.length] = li;
+ } else {
+ fdDevices[fdDevices.length] = li;
+ }
+ enabledS = true;
+ }
+ }
+ if(dvdDevices.length) {
+ var ul = null;
+ var li = $('<li />').html("<a href='#dvdDevices' style='background-image:url(images/vbox/cd_16px.png);'>"+trans('Optical Drives','UIActionPool')+'</a>').addClass('vboxVMSettingsStorage');
+ if(dvdDevices.length == 1) {
+ ul = dvdDevices[0].children('ul').first();
+ } else {
+ ul = $('<ul />').attr({'style':'display:none'}).addClass('vboxVMSettingsStorage');
+ for(var i = 0; i < dvdDevices.length; i++) {
+ $(ul).append(dvdDevices[i]);
+ }
+ }
+ $(li).append(ul).insertBefore(smenu);
+ }
+
+ if(fdDevices.length) {
+ var ul = null;
+ var li = $('<li />').html("<a href='#fdDevices' style='background-image:url(images/vbox/fd_16px.png);'>"+trans('Floppy Devices','UIActionPool')+'</a>').addClass('vboxVMSettingsStorage');
+ if(fdDevices.length == 1) {
+ ul = fdDevices[0].children('ul').first();
+ } else {
+ ul = $('<ul />').attr({'style':'display:none'}).addClass('vboxVMSettingsStorage');
+ for(var i = 0; i < fdDevices.length; i++) {
+ $(ul).append(fdDevices[i]);
+ }
+ }
+ $(li).append(ul).insertBefore(smenu);
+ }
+
+ }
+ if(enabledS) {
+ $('#vboxVMSettingsMenu').find('a[href=#Network]').parent().addClass('separator');
+ } else {
+ $('#vboxVMSettingsMenu').find('a[href=#Network]').parent().removeClass('separator');
+ }
+
+ // Enable remote display?
+ if(vm && vm.VRDEServer) {
+ $('#vboxVMSettingsMenu').find('a[href=#RemoteDisplay]').css({'background-image':'url(images/vbox/vrdp' + (vm.VRDEServer.enabled ? '_on' : '') + '_16px.png)'}).parent().removeClass('disabled')
+ .addClass((vm.VRDEServer.enabled ? 'vboxMenuItemChecked' : '')).removeClass((vm.VRDEServer.enabled ? '' : 'vboxMenuItemChecked'));
+ } else {
+ $('#vboxVMSettingsMenu').find('a[href=#RemoteDisplay]').css({'background-image':'url(images/vbox/vrdp_disabled_16px.png)'}).parent().addClass('disabled');
+ }
+
+
+}
+
+
+/*
+ Bind events...
+ */
+
+// Selection list changed
+$('#vboxPane').on('vmSelectionListChanged',function(e) {
+
+ vboxChooserToolbarTop.update(vboxChooser);
+ vboxUpdateSettingsMenu();
+
+ // Check for a single selected VM and
+ // update settings menu based on its runtime data
+ if(vboxChooser.selectedVMs.length == 1 && (vboxChooser.isSelectedInState('Running') || vboxChooser.isSelectedInState('Paused'))) {
+
+ // Get data
+ $.when(vboxVMDataMediator.getVMDataCombined(vboxChooser.selectedVMs[0]))
+ .done(function(d) {
+
+ vboxUpdateSettingsMenu(d);
+
+ });
+
+ }
+
+// Update menus on these events
+}).on('vboxEvents', function(e, eventList) {
+
+ var updateToolbar = false;
+ var updateSettingsMenu = false;
+ var updateVRDE = false;
+
+ for(var i = 0; i < eventList.length && !(updateToolbar && updateSettingsMenu); i++) {
+
+ switch(eventList[i].eventType) {
+
+ // Machine or session state change
+ case 'OnMachineStateChanged':
+ case 'OnSessionStateChanged':
+ if(vboxChooser.isVMSelected(eventList[i].machineId)) {
+ updateToolbar = true;
+ }
+ if(vboxChooser.getSingleSelectedId() == eventList[i].machineId) {
+ updateSettingsMenu = true;
+ }
+ break;
+
+ // Machine or medium data change
+ case 'OnMachineDataChanged':
+ case 'OnMediumChanged':
+ if(vboxChooser.isVMSelected(eventList[i].machineId)) {
+ updateToolbar = true;
+ updateSettingsMenu = true;
+ }
+ break;
+
+ // VRDE Server
+ case 'OnVRDEServerChanged':
+ case 'OnVRDEServerInfoChanged':
+ if(!updateSettingsMenu && !updateVRDE && vboxChooser.isVMSelected(eventList[i].machineId)) {
+ if(eventList[i].enrichmentData && eventList[i].enrichmentData.enabled) {
+ updateVRDE = function(){
+ $('#vboxVMSettingsMenu').find('a[href=#RemoteDisplay]').css({'background-image':'url(images/vbox/vrdp_on_16px.png)'}).parent().removeClass('disabled')
+ .addClass('vboxMenuItemChecked');
+ };
+ } else {
+ updateVRDE = function(){
+ $('#vboxVMSettingsMenu').find('a[href=#RemoteDisplay]').css({'background-image':'url(images/vbox/vrdp_16px.png)'}).parent().removeClass('disabled')
+ .removeClass('vboxMenuItemChecked');
+
+ };
+ }
+ }
+ break;
+
+
+ } // </ switch event type >
+
+ } // </ for each event >
+
+ // Toolbar
+ if(updateToolbar) {
+ vboxChooserToolbarTop.update(vboxChooser);
+ }
+
+ // Entire settings menu or just VRDE
+ if(updateSettingsMenu) {
+
+ // Check for a single selected VM and
+ // update settings menu based on its runtime data
+ if(vboxChooser.selectedVMs.length == 1 && (vboxChooser.isSelectedInState('Running') || vboxChooser.isSelectedInState('Paused'))) {
+
+ // Get data
+ $.when(vboxVMDataMediator.getVMDataCombined(vboxChooser.selectedVMs[0]))
+ .done(function(d) {
+ vboxUpdateSettingsMenu(d);
+ });
+
+ } else {
+ vboxUpdateSettingsMenu();
+ }
+
+ } else if(updateVRDE) {
+
+ updateVRDE();
+
+ }
+
+});
+
+$('#vboxVMSettingsMenu').disableContextMenu();
+
+
+</script>