557 lines
18 KiB
HTML
557 lines
18 KiB
HTML
<!--
|
|
|
|
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>
|