123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556 |
- <!--
-
- 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>
|