summaryrefslogtreecommitdiffstats
path: root/panes/settingsStorage.html
diff options
context:
space:
mode:
Diffstat (limited to 'panes/settingsStorage.html')
-rw-r--r--panes/settingsStorage.html3408
1 files changed, 1704 insertions, 1704 deletions
diff --git a/panes/settingsStorage.html b/panes/settingsStorage.html
index 5056343..5e1ce54 100644
--- a/panes/settingsStorage.html
+++ b/panes/settingsStorage.html
@@ -1,1705 +1,1705 @@
-<!--
-
- VM Storage Settings
- Copyright (C) 2010-2015 Ian Moore (imoore76 at yahoo dot com)
-
- $Id: settingsStorage.html 599 2015-07-27 10:40:37Z imoore76 $
-
--->
-<table style='width: 100%;' id='vboxSettingsStorageTableWrapper'>
- <tr style='height: 100%'>
- <td width='50%' style='padding: 6px;'>
- <div id='vboxStoragePaneLeft'>
- <table class='vboxSettingsHeadingLine'
- style='width: 100%; border-spacing: 0; border: 0px; margin: 0px; padding: 0px;'>
- <tr style='vertical-align: middle'>
- <td style='white-space: nowrap; width: auto;'><span
- class='translate vboxRunningEnabled'>Storage Tree</span></td>
- <td style='width: 100%'>
- <hr style='width: 100%;' class='vboxSeparatorLine'/>
- </td>
- </tr>
- </table>
-
-
- <!-- Storage Controllers -->
- <div id='vboxSettingsStorageTree' style='height: 290px; outline: none;' class='vboxBordered' tabindex='0'>
- <ul class='vboxHover vboxHoverBorderless'>
- <li>Storage Thingy</li>
- <li>
- <ul>
- <li>Attachment Thingy</li>
- </ul>
- </li>
- </ul>
- </div>
-
- <!-- Controller Toolbar -->
- <div id='vboxSettingsControllersButtons' style='text-align: right'></div>
-
-
- </div>
- </td>
-
- <!-- Resize Bar -->
- <td style='height: 100%; width:3px; padding:0px; margin:0px;'>
- <div style='margin:0px; margin-top: 2px; padding:0px; width: 3px; height: 99%; background:#aaa;' id='vboxStorageResizeBar' ></div>
- </td>
-
- <td width='50%' style='padding: 6px;'>
- <div id='vboxStoragePaneRight'>
- <table class='vboxSettingsHeadingLine'
- style='width: 100%; border-spacing: 0; border: 0px; margin: 0px; padding: 0px;'>
- <tr style='vertical-align: middle'>
- <td style='white-space: nowrap; width: auto;'><span
- class='translate vboxRunningEnabled'>Attributes</span></td>
- <td style='width: 100%; white-space: nowrap;'><hr style='width: 100%;' class='vboxSeparatorLine'/></td>
- </tr>
- </table>
-
-
- <!-- Controller Settings -->
- <div id='vboxSettingsController' style='width: 100%; display: none;'>
- <table style='width: 100%' class='vboxVertical'>
- <tr>
- <th><span class='translate'>Name:</span></th>
- <td style='width: 100%'><input type='text' class='vboxText'
- name='vboxSettingsStorageItemName' style='width: 99%' /></td>
- </tr>
- <tr>
- <th><span class='translate'>Type:</span></th>
- <td><select name='vboxSettingsStorageControllerType'
- style='width: 100%'>
- <option value='ICH6'>ICH6</option>
- </select></td>
- </tr>
- <tr id='vboxSettingsControllerPortCountRow' style='display: none'>
- <th><span class='translate'>Port Count:</span></th>
- <td>
- <select name='vboxSettingsControllerPortCount'>
- </select>
- </td>
- </tr>
- <tr>
- <th></th>
- <td style='width: 100%'>
- <label><input type='checkbox' class='vboxCheckbox'
- name='vboxSettingsStorageHostCache'/> <span class='translate'>Use Host I/O Cache</span></label></td>
- </tr>
- </table>
- </div>
-
- <!-- Attachment Settings -->
- <div id='vboxSettingsStorageAttachment' style='display: none'>
- <table class='vboxVertical'>
- <tr style='vertical-align: middle;'>
- <th><span class='translate vboxRunningEnabled' id='vboxSettingsControllerSlotLabel'>HardDisk</span></th>
- <td style='width: 100%'>
- <table class='vboxInvisible' style='width: 100%'>
- <tr style='vertical-align: middle'>
- <td style='width: 100%'>
- <select name='vboxSettingsControllerSlot' style='width: 100%'></select>
- </td>
- <td>
- <div id='vboxSettingsAddAttachmentsMenuHDDiv' style='display: none'></div>
- <div id='vboxSettingsAddAttachmentsMenuFDDiv' style='display: none'></div>
- <div id='vboxSettingsAddAttachmentsMenuCDDiv' style='display: none'></div>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </div>
-
- <!-- Selected Media Info -->
- <div id='vboxSettingsMediaInfo' style='display: none'>
- <table class='vboxSettingsHeadingLine'
- style='width: 100%; border-spacing: 0; border: 0px; margin: 0px; padding: 0px;'>
- <tr style='vertical-align: middle'>
- <td style='white-space: nowrap; width: auto;'><span
- class='translate vboxRunningEnabled'>Information</span></td>
- <td style='width: 100%'>
- <hr style='width: 100%; ' class='vboxSeparatorLine'/>
- </td>
- </tr>
- </table>
-
-
- <!-- HardDisk Media -->
- <div id='vboxSettingsHDInfo'>
- <table class='vboxVertical'>
- <tr>
- <th><span class='translate vboxRunningEnabled'>Type (Format):</span></th>
- <td><span id='vboxSettingsHDtype' class='vboxRunningEnabled'>Image</span></td>
- </tr>
- <tr>
- <th><span class='translate vboxRunningEnabled'>Virtual Size:</span></th>
- <td><span id='vboxSettingsHDvsize' class='vboxRunningEnabled'>30 GB</span></td>
- </tr>
- <tr>
- <th><span class='translate vboxRunningEnabled'>Actual Size:</span></th>
- <td><span id='vboxSettingsHDasize' class='vboxRunningEnabled'>30 GB</span></td>
- </tr>
- <tr>
- <th><span class='translate vboxRunningEnabled'>Details:</span></th>
- <td><span id='vboxSettingsHDDetails' class='vboxRunningEnabled'>Dynamic</span></td>
- </tr>
- <tr>
- <th><span class='translate vboxRunningEnabled'>Location:</span></th>
- <td><span id='vboxSettingsHDlocation' class='vboxRunningEnabled'>/usr/local/blah/etc..</span></td>
- </tr>
- <tr>
- <th><span class='translate vboxRunningEnabled'>Attached to:</span></th>
- <td><span id='vboxSettingsHDattached' class='vboxRunningEnabled'>Some Virtual
- Machine Name</span></td>
- </tr>
- <tr>
- <th><span class='translate vboxRunningEnabled'>Encrypted with key:</span></th>
- <td><span id='vboxSettingsHDEncrypted' class='vboxRunningEnabled'>--</span></td>
- </tr>
- </table>
- </div>
-
- <!-- DVD/CD Media and Floppy -->
- <div id='vboxSettingsImageInfo'>
- <table class='vboxVertical'>
- <tr>
- <th><span class='translate vboxRunningEnabled'>Type:</span></th>
- <td><span id='vboxSettingsImageType' class='vboxRunningEnabled'>Image</span></td>
- </tr>
- <tr>
- <th><span class='translate vboxRunningEnabled'>Size:</span></th>
- <td><span id='vboxSettingsImageSize' class='vboxRunningEnabled'>30 GB</span></td>
- </tr>
- <tr>
- <th><span class='translate vboxRunningEnabled'>Location:</span></th>
- <td><span id='vboxSettingsImageLocation' class='vboxRunningEnabled'>/usr/local/blah/etc..</span></td>
- </tr>
- <tr>
- <th><span class='translate vboxRunningEnabled'>Attached to:</span></th>
- <td><span id='vboxSettingsImageAttached' class='vboxRunningEnabled'>Some Virtual
- Machine Name</span></td>
- </tr>
- </table>
- </div>
-
- </div>
- </div>
- </td>
- </tr>
-</table>
-<script type='text/javascript'>
-
- /*
- *
- * Storage controller helper object
- *
- *
- */
- var vboxSettingsStorageObj = function() {
-
- this.busTypes = vboxStorage.getBusTypes();
-
- this.attachedDirectMedia = {};
- this.attachedIndirectMedia = {};
-
- /* Return slots available on controller, including incl (device currently on slot) */
- this.availableSlots = function(conElm,incl) {
-
- var bus = $(conElm).children('table').first().data('controller').bus;
- var slots = vboxStorage[bus].slots();
-
- var atts = $(conElm).find('table.vboxSettingsStorageAttachment');
-
- for(var i = 0; i < atts.length; i++) {
- slot = $(atts[i]).data('attachment').port+'-'+$(atts[i]).data('attachment').device;
- if(incl && (incl == slot)) continue;
- delete slots[slot];
- }
- return slots;
- };
-
- this.addAttached = function(m) {
- if(!m || !m.id) return;
- var medium = vboxMedia.getMediumById(m.id);
-
- // SafeGuard
- if(!medium) {
- alert('A medium listed as attached to this machine was not found in the media registry. phpVirtualBox will now reload.');
- location.reload(true);
- }
-
- this.attachedDirectMedia[medium.id] = medium;
- if(medium.base) {
- this.attachedIndirectMedia[medium.base] = medium;
- }
- };
-
- this.isAttached = function(m,directOnly) {
- if(!m || !m.id) return false;
- if(this.attachedDirectMedia[m.id]) return this.attachedDirectMedia[m.id];
- if(!directOnly) {
- return (m.base ? this.attachedIndirectMedia[m.base] : null);
- }
- return false;
- };
-
- this.isAttachedDirect = function(m) { return this.attachedDirectMedia[m.id]; };
- this.isAttachedIndirect = function(m) { return (m.base ? this.attachedIndirectMedia[m.base] : null); };
- };
-
- /*
- *
- *
- * Initialization logic
- *
- *
- */
-
- /* Storage Obj */
- var vboxSettingsStorageBusses = new vboxSettingsStorageObj(); // defined below
-
- /* Setup SATA port count */
- var sel = document.forms['frmVboxSettings'].vboxSettingsControllerPortCount;
- for(var i = 1; i <= vboxStorage.SATA.maxPortCount; i++) {
- sel.options[sel.options.length] = new Option(i,i);
- }
- $(sel).change(function(){
- $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().data('controller').portCount = $(this).val();
- });
-
-
-
- /* Pre-load storage images */
-var imgs = new Array();
-for(var i=0;i<vboxSettingsStorageBusses.busTypes.length;i++){
- var imgName = vboxStorage.getBusIconName(vboxSettingsStorageBusses.busTypes[i]);
- imgs[i] = new Array();
- imgs[i][0] = new Image();
- imgs[i][0].src = 'images/vbox/'+imgName+'_expand_16px.png';
- imgs[i][1] = new Image();
- imgs[i][1].src = 'images/vbox/'+imgName+'_collapse_16px.png';
- imgs[i][2] = new Image();
- imgs[i][2].src = 'images/vbox/'+imgName+'_add_16px.png';
- imgs[i][3] = new Image();
- imgs[i][3].src = 'images/vbox/'+imgName+'_add_disabled_16px.png';
-}
-
-var imgs2 = new Array();
-var imgsToLoad = ['fd','hd','cd'];
-for(var i=0;i<imgsToLoad.length;i++){
- imgs2[i] = new Image();
- imgs2[i].src = 'images/vbox/'+imgsToLoad[i]+'_16px.png';
-}
-
-/*
- *
- * Init Storage Controller menus and toolbar
- *
- */
-
- /* Menu for adding controllers */
- var vboxSettingsCMenu = new vboxMenu({id: 'vboxSettingsAddControllerMenu',
- language_context: 'UIMachineSettingsStorage'});
- var vboxSettingsCMenuItems = [];
- var bustypes = vboxStorage.getBusTypes();
- for(var i = 0; i < bustypes.length; i++) {
- var bt = bustypes[i];
- var icon = vboxStorage.getBusIconName(bt);
- vboxSettingsCMenuItems[vboxSettingsCMenuItems.length] = {'name':'add'+bt,'icon':icon+"_add",'label':'Add '+bt+' Controller'};
- }
- vboxSettingsCMenu.addMenu(vboxSettingsCMenuItems);
-
-
- /* Storage tree context menu to add controllers */
- $('#vboxSettingsStorageTree').contextMenu({
- menu: vboxSettingsCMenu.menuId()
- },
- function(action, el, pos) {
-
- var bus = action.substring(3);
- var c = {'bus':bus,'mediumAttachments':[],'controllerType':vboxStorage[bus].types[0],'useHostIOCache':1,
- 'maxPortCount':vboxStorage[bus]['maxPortCount'],'maxDevicesPerPortCount':vboxStorage[bus]['maxDevicesPerPortCount']};
-
-
- vboxSettingsAddController(c, $('#vboxSettingsStorageTree').children('ul').first());
-
- $('#vboxSettingsStorageTree').trigger('itemselect',$('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first());
- }
- );
-
- /* Storage tree tool bar */
- var vboxSettingsStorageButtons = new Array(
- {
- /* Add Attachment Button */
- 'name' : 'addattach',
- 'label' : 'Add Attachment',
- 'icon' : 'attachment_add',
- 'enabled' : function (item) {
-
- if(!$(item).data('controller')) return false;
-
- // Determine how max and how many are used
- if(!($(item).data('controller').maxPortCount && ($(item).parent().find('ul').children('li').length < ($(item).data('controller').maxPortCount * $(item).data('controller').maxDevicesPerPortCount))))
- return false;
-
- // Enable / Disable CD/DVD menu
- var c = $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first();
- if(jQuery.inArray('dvd', vboxStorage[$(c).data('controller').bus].driveTypes) > -1) {
- scToolbar.getButtonElement("addattach").data('busType',$(c).data('controller').bus);
- scToolbar.getButtonElement("addattach").enableContextMenu();
- } else {
- scToolbar.getButtonElement("addattach").disableContextMenu();
- }
- return true;
-
- },
- 'click' : function (item) {
- // Let context menu handle IDE and Sata
- var c = $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first();
- if(vboxStorage[$(c).data('controller').bus].driveTypes.length > 1) {
- return;
- }
- vboxSettingsStorageAddMedium($(c).parent(),($(c).data('controller').bus == 'Floppy' ? 'Floppy' : 'HardDisk'));
- }
- },
-
- {
- /* Remove Attachment Button */
- 'name' : 'removeattach',
- 'label' : 'Remove Attachment',
- 'icon' : 'attachment_remove',
- 'enabled' : function (item) { return (item && $(item).data('attachment')); },
- 'click' : function () {
-
- // Set previous item to last?
- var cur = $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().parent();
-
- if($(cur).hasClass('last')) {
- $(cur).prev().addClass('last');
- }
-
- var next = $(cur).next().find('table.vboxListItem').first();
- if(!$(next).html()) {
- var con = $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().data('controller');
- if(con) next = $('#vboxSettingsController'+con.bus).find('table.vboxListItem').first();
- }
- $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().parent().remove();
- if(!$(next).trigger('click').html()) $('#vboxSettingsStorageTree').trigger('itemselect',null);
- }
- },
-
- {
- /* Add Controller Button */
- 'name' : 'addcontroller',
- 'label' : 'Add Controller',
- 'icon' : 'controller_add',
- 'enabled' : function (item) {
-
- // Draw menu items
- var cons = $('#vboxSettingsStorageTree').find('table.vboxSettingsController');
- var avail = vboxStorage.getBusTypes();
- var used = {};
- for(var i = 0; i < avail.length; i++) {
- used[avail[i]] = false;
- }
-
- for(var i = 0; i < cons.length; i++) {
- used[$(cons[i]).data('controller').bus] = true;
- }
-
- var oneEnabled = false;
- for(var i in used) {
-
- if(used[i]) { // && vboxStorage[i].limitOneInstance) {
- vboxSettingsCMenu.disableItem('add'+i);
- } else {
- vboxSettingsCMenu.enableItem('add'+i);
- oneEnabled = true;
- }
- }
-
- // If at least one item is enabled
- return oneEnabled;
-
-
- },
- 'click' : function (item) { return true; }
- },
-
- {
- /* Remove Controller Button */
- 'name' : 'removecontroller',
- 'label' : 'Remove Controller',
- 'icon' : 'controller_remove',
- 'enabled' : function (item) { if(item && $(item).data('controller')) return true; },
- 'click' : function () {
- var next = $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().parent().next().find('table.vboxListItem').first();
- $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().parent().remove();
- if(!$(next).html()) {next = $('#vboxSettingsStorageTree').find('table.vboxListItem').first();}
- if(!$(next).trigger('click').html()) $('#vboxSettingsStorageTree').trigger('itemselect',null);
- }
- }
-
-
-
- );
-var scToolbar = new vboxToolbarSmall({buttons: vboxSettingsStorageButtons,
- language_context: 'UIMachineSettingsStorage', renderTo: 'vboxSettingsControllersButtons'});
-
-
-/* Add controller button menu initialization */
-scToolbar.getButtonElement("addcontroller").contextMenu({
- menu: vboxSettingsCMenu.menuId(),
- mode:'menu',
- button: 0
- },
- function(action, el, pos) {
-
- var bus = action.substring(3);
- var c = {'bus':bus,'mediumAttachments':[],'controllerType':vboxStorage[bus].types[0],'useHostIOCache':1,
- 'maxPortCount':vboxStorage[bus]['maxPortCount'],'maxDevicesPerPortCount':vboxStorage[bus]['maxDevicesPerPortCount']};
-
- vboxSettingsAddController(c, $('#vboxSettingsStorageTree').children('ul').first());
-
- $('#vboxSettingsStorageTree').trigger('itemselect',$('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first());
- }
- );
-
-/* Menu for adding attachment */
-var mAttachMenu = new vboxMenu({id: 'vboxSettingsAddAttachmentsMenu',
- language_context: 'UIMachineSettingsStorage',
- menuItems: [{name: 'addCD', icon: 'cd_add', label: 'Add Optical Drive'},
- {name: 'addHD', icon: 'hd_add', label: 'Add Hard Disk'}]});
-
-
- /* Add attachment button menu initialization */
-scToolbar.getButtonElement("addattach").contextMenu({
- menu: mAttachMenu.menuId(),
- mode:'menu',
- button: 0
- },
- function(action, el, pos) {
- vboxSettingsStorageAddMedium($('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().parent(),(action == 'addCD' ? 'DVD' : 'HardDisk'));
- }
- );
-
-
-
-$('#vboxSettingsStorageTree').on('itemselect',function(e,el) {scToolbar.update(el); });
-
-
-/* Medium attachment context menu */
-var vboxSettingsMAMenu = new vboxMenu({'name':'vboxSettingsMAMenuL',
- 'menuItems': [vboxSettingsStorageButtons[1]],
- 'language_context': 'UIMachineSettingsStorage'});
-
-/*
- * Medium menu buttons
- */
-var mAttachToolbarHD = new vboxButtonMediaMenu('HardDisk',vboxSettingsControllerAttach);
-mAttachToolbarHD.renderTo('vboxSettingsAddAttachmentsMenuHDDiv');
-
-var mAttachToolbarCD = new vboxButtonMediaMenu('DVD',vboxSettingsControllerAttach);
-mAttachToolbarCD.renderTo('vboxSettingsAddAttachmentsMenuCDDiv');
-
-var mAttachToolbarFD = new vboxButtonMediaMenu('Floppy',vboxSettingsControllerAttach);
-mAttachToolbarFD.renderTo('vboxSettingsAddAttachmentsMenuFDDiv');
-
-/*
- * Controller actions and menus for each bus type
- */
-var vboxStorageBusTypes = vboxStorage.getBusTypes();
-var vboxStorageAttachmentMenus = new Array();
-for(var i = 0; i < vboxStorageBusTypes.length; i++) {
- var btype = vboxStorageBusTypes[i];
- var menuItems = [];
- for(var a = 0; a < vboxStorage[btype].driveTypes.length; a++) {
- switch(vboxStorage[btype].driveTypes[a]) {
- case 'dvd':
- b = {
- 'name' : btype+'addcd',
- 'label' : 'Add Optical Drive',
- 'icon' : 'cd_add',
- 'click' : function () {
- vboxSettingsStorageAddMedium($('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().parent(),'DVD');
- }
- };
- break;
- case 'disk':
- b = {
- 'name' : btype+'adddrive',
- 'label' : 'Add Hard Disk',
- 'icon' : 'hd_add',
- 'click' : function (item) {
- vboxSettingsStorageAddMedium($('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().parent());
- }
- };
- break;
- case 'floppy':
- b = {
- 'name' : btype + 'addfloppy',
- 'label':trans('Add Floppy Drive','UIMachineSettingsStorage'),
- 'icon' : 'fd_add',
- 'click' : function (item) {
- vboxSettingsStorageAddMedium($('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().parent(),'Floppy'); }
- };
- break;
- }
- b['enabled'] = function(a) {
- return ($('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().parent().find('li').length < (vboxStorage[a].maxPortCount * vboxStorage[a].maxDevicesPerPortCount));
- };
- menuItems[menuItems.length] = b;
- }
-
- // Add seperator and "remove controller"
- menuItems[menuItems.length] = $.extend(true, {}, vboxSettingsStorageButtons[3]); // "Remove"
- menuItems[(menuItems.length-1)].separator = true;
- menuItems[(menuItems.length-1)].enabled = null; // always enabled
-
- vboxStorageAttachmentMenus[btype] = new vboxMenu({name: 'vboxSettingsController'+btype+'AttachmentsMenu',
- language_context: 'UIMachineSettingsStorage',
- 'menuItems': menuItems});
-
-}
-
-$('#vboxSettingsStorageTree').on('itemselect',function(e,item){
- for(var i = 0; i < vboxStorageBusTypes.length; i++)
- vboxStorageAttachmentMenus[vboxStorageBusTypes[i]].update(vboxStorageBusTypes[i]);
-});
-/*
- *
- * Form helper functions that listen for form change events
- *
- *
- */
-
-/*
- * Changing the slot changes the object
- */
-document.forms['frmVboxSettings'].vboxSettingsControllerSlot.onchange = function(){
-
- // change port / device
- var pd = this.value.split('-');
- var attachment = $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first();
- $(attachment).data('attachment').port = pd[0];
- $(attachment).data('attachment').device = pd[1];
-
-};
-
-
-
-/*
- *
- * Controller form elements
- *
- */
-
-/* onChange of controller type */
-$(document.forms['frmVboxSettings'].vboxSettingsStorageControllerType).change(function(){
- $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().data('controller').controllerType = $(this).val();
-});
-
-/* change storage controller label on keydown in text box */
-$(document.forms['frmVboxSettings'].vboxSettingsStorageItemName).keyup(function(){
- $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().find('span.vboxSettingsControllerTitle').first().text(this.value);
-});
-
-/* Set storage controller name on blur of textbox */
-$(document.forms['frmVboxSettings'].vboxSettingsStorageItemName).on('blur',function(e){
-
- var bus = $('#vboxSettingsStorageTree').find('.vboxListItemSelected').first();
-
- if(!$(bus).data('controller')) return;
-
- var newName = $(this).val();
-
- // no change?
- if(newName == $(bus).data('controller').name) return true;
-
- if(jQuery.trim($(this).val().toString()).length < 1) {
- $(document.forms['frmVboxSettings'].vboxSettingsStorageItemName).val($(bus).data('controller').name);
-
- } else {
-
- $('#vboxSettingsStorageTree').find('table.vboxSettingsController').each(function(idx,elm) {
- if($(elm).data('controller').name == newName) {
- $(document.forms['frmVboxSettings'].vboxSettingsStorageItemName).val($(bus).data('controller').name);
- conflictFound = true;
- return false;
- }
- });
- }
-
- $(bus).data('controller').name = $(document.forms['frmVboxSettings'].vboxSettingsStorageItemName).val();
- $(bus).find('span.vboxSettingsControllerTitle').first().text($(bus).data('controller').name);
-
-}).keyup(function(){
- $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().find('span.vboxSettingsControllerTitle').text(this.value);
-});
-
-/* Change host cache value onClick of checkbox */
-$(document.forms['frmVboxSettings'].vboxSettingsStorageHostCache).click(function(){
- $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().data('controller').useHostIOCache = this.checked;
-});
-
-
-
-
-/*
- * Update menu items on select and display
- */
-$('#vboxSettingsStorageTree').on('itemselect',function(e,item){
-
- $('#vboxSettingsAddAttachmentsMenuCDDiv').hide();
- $('#vboxSettingsAddAttachmentsMenuHDDiv').hide();
- $('#vboxSettingsAddAttachmentsMenuFDDiv').hide();
-
- // Null selection hides everything
- if(!item) {
- $('#vboxSettingsController').css('display','none');
- $('#vboxSettingsMediaInfo').css('display','none');
- $('#vboxSettingsStorageAttachment').css('display','none');
- // Update label widths
- vboxStorageResizeTreeItemLabels();
- return;
- }
-
- if(!$(item).data('attachment')) {
- // Update label widths
- vboxStorageResizeTreeItemLabels();
- return;
- }
-
- switch($(item).data('attachment').type) {
- case 'HardDisk':
- $('#vboxSettingsAddAttachmentsMenuHDDiv').show();
- break;
- case 'Floppy':
- // Update media menu...
- mAttachToolbarFD.menuUpdateMedia($(item).data('attachment').medium);
- $('#vboxSettingsAddAttachmentsMenuFDDiv').show();
- break;
- default:
- // Update media menu...
- mAttachToolbarCD.menuUpdateMedia($(item).data('attachment').medium);
- $('#vboxSettingsAddAttachmentsMenuCDDiv').show();
- }
-
- // Update label widths
- vboxStorageResizeTreeItemLabels();
-
-
-
-});
-
-
-
-
-/*
- *
- * OnSave and OnShow for dialog
- *
- *
- */
-
-/* Change settings onSave() */
-$('#vboxSettingsDialog').on('save',function(){
-
- $(document.forms['frmVboxSettings'].vboxSettingsStorageItemName).trigger('blur');
-
- $('#vboxSettingsDialog').data('vboxMachineData').storageControllers = new Array();
-
- var storageList = $('#vboxSettingsStorageTree').children('ul').first();
-
- $(storageList).find('table.vboxSettingsController').each(function(i,con){
-
-
- var attachments = new Array();
-
- $(con).parent().find('table.vboxSettingsStorageAttachment').each(function(i,elm) {
-
- var attch = $(elm).data('attachment');
-
- if(attch.medium && attch.medium.id) {
- var med = vboxMedia.getMediumById(attch.medium.id);
- attch.medium = {'id':med.id,'hostDrive':med.hostDrive,'location':med.location};
- }
-
- attachments[attachments.length] = attch;
-
- });
-
- var curCon = $('#vboxSettingsDialog').data('vboxMachineData').storageControllers.length;
-
- $('#vboxSettingsDialog').data('vboxMachineData').storageControllers[curCon] = $(this).data('controller');
- $('#vboxSettingsDialog').data('vboxMachineData').storageControllers[curCon]['mediumAttachments'] = attachments;
-
- });
-
-
-});
-
-/* WHen data is loaded */
-$('#vboxSettingsDialog').on('dataLoaded',function(){
-
- /*
- *
- * Fill form and storage list items
- *
- */
-
- /* Fill List by calling helper functions for each controller */
- var storageList = $('#vboxSettingsStorageTree').children('ul').first();
- $(storageList).children().remove();
-
- var cons = $('#vboxSettingsDialog').data('vboxMachineData').storageControllers;
- for(var a = 0; a < cons.length; a++) {
-
- var attch = cons[a].mediumAttachments;
-
- var conElm = vboxSettingsAddController(cons[a], $(storageList));
-
- for(var b = 0; b < cons[a].mediumAttachments.length; b++) {
- vboxSettingsStorageBusses.addAttached(cons[a].mediumAttachments[b].medium);
- vboxSettingsAddAttachment(cons[a].mediumAttachments[b], conElm);
- }
- }
-
- //Select first item in storage tree list
- $('#vboxSettingsStorageTree').find('table.vboxListItem').first().trigger('click').html();
-
- /* Disable non-editable items when VM is running */
- var p = $('#vboxSettingsStorageTableWrapper');
- if(!$('#vboxSettingsDialog').data('vboxFullEdit')) {
-
- scToolbar.disable();
- $('#vboxSettingsStorageTree').disableContextMenu()
-
- p.find('span:not(.vboxRunningEnabled)').addClass('disabled');
- p.find('input:not(.vboxRunningEnabled),select,textarea').prop('disabled',true);
-
- // Storage tree toolbars
- $('#vboxSettingsStorageTree').find('.vboxControllerAttachmentButton').trigger('disable');
-
- // Hard Disk Media menu button
- $('#vboxSettingsAddAttachmentsMenuHDDiv').trigger('disable');
-
- } else {
-
- $('#vboxSettingsStorageTree').enableContextMenu();
-
- p.find('span:not(.vboxRunningEnabled)').removeClass('disabled');
- p.find('input:not(.vboxRunningEnabled),select,textarea').prop('disabled',false);
-
- // Storage tree toolbars
- $('#vboxSettingsStorageTree').find('.vboxControllerAttachmentButton').trigger('enable');
-
- // Hard Disk Media menu button
- $('#vboxSettingsAddAttachmentsMenuHDDiv').trigger('enable');
-
- // initial toolbar update
- scToolbar.enable();
- scToolbar.update();
-
- }
-
-});
-
-
-/* Respond to UP / Down arrow events */
-$('#vboxSettingsStorageTree').click(function(){$(this).focus();}).keydown(function(e){
-
- var keynum = 0;
-
- if(e.keyCode)
- keynum = e.keyCode;
- else if(e.which)
- keynum = e.which;
-
- switch(keynum) {
-
- // up
- case 38:
-
- var cur = $(this).find('table.vboxListItemSelected').parent();
-
- // Try previous med attachment
- if($(cur).prev('li.vboxSettingsMediumAttachment').children('table.vboxListItem').trigger('click')[0]) {
- return;
- }
-
- // If we're a medium, click our parent controller
- if($(cur).hasClass('vboxSettingsMediumAttachment')) {
- $(cur).parent().parent('li.vboxSettingsController').children('table.vboxListItem').trigger('click');
- return;
- }
-
- // Must be a controller, try previous controller's last medium attachment
- if($(cur).prev().children('ul:not([class~="vboxHidden"])').find('table.vboxListItem:last').trigger('click')[0])
- return;
-
- // No med attachment, try previous controller
- $(cur).prev('li.vboxSettingsController').children('table.vboxListItem').trigger('click');
- break;
-
- // right / expand
- case 39:
- var tbl = $(this).find('table.vboxListItemSelected');
- var con = $(tbl).data('controller');
- if(!con) return;
- $(tbl).find('td.vboxSettingsController' + con.bus).click();
- break;
-
- // left / contract
- case 37:
- var tbl = $(this).find('table.vboxListItemSelected');
- var con = $(tbl).data('controller');
- if(!con) return;
- $(tbl).find('td.vboxSettingsController' + con.bus + 'Expanded').click();
- break;
-
- // down
- case 40:
-
- var cur = $(this).find('table.vboxListItemSelected').parent();
-
- // Try next med attachment
- if($(cur).next('li.vboxSettingsMediumAttachment').children('table.vboxListItem').trigger('click')[0]) {
- return;
- }
-
- // Select first medium of current controller?
- if($(cur).children('ul:not([class~="vboxHidden"])').find('table.vboxListItem:first').trigger('click')[0])
- return;
-
- // Try next controller
- $(cur).closest('li.vboxSettingsController').next('li.vboxSettingsController').children('table.vboxListItem').trigger('click');
-
- break;
- }
-
-}).css('outline','none');;
-
-/*
- *
- * Change media attachment helper function
- *
- */
-function vboxSettingsControllerAttach(m) {
-
- var tbl = $('#vboxSettingsStorageTree').find('table.vboxListItemSelected');
- $(tbl).data('attachment').medium = m;
- $(tbl).parent().tipped({'source':vboxSettingsMediumTip(m),'position':'mouse','delay':1000});
-
- // Re-select attachment to update display info
- vboxSettingsSelectAttachment(tbl);
-
-
-}
-
-
-/*
- *
- * Called when controller is selected helper function
- *
- */
-function vboxSettingsSelectController(tbl) {
-
- // Null selection?
- if(!tbl) {
- $('#vboxSettingsController').css('display','none');
- $('#vboxSettingsMediaInfo').css('display','none');
- $('#vboxSettingsStorageAttachment').css('display','none');
- return;
- }
-
- $(document.forms['frmVboxSettings'].vboxSettingsStorageItemName).trigger('blur');
-
- /* set classes for selected / unselected */
- $('#vboxSettingsStorageTree').find('table[class]').removeClass('vboxListItemSelected').addClass('vboxListItem');
- $(tbl).removeClass('vboxListItem').addClass('vboxListItemSelected');
-
- /* set name text box value */
- document.forms['frmVboxSettings'].vboxSettingsStorageItemName.value = $(tbl).data('controller').name;
-
- /* Set host cache checkbox */
- document.forms['frmVboxSettings'].vboxSettingsStorageHostCache.checked = $(tbl).data('controller').useHostIOCache ? 'checked' : '';
-
- var busType = $(tbl).data('controller').bus;
-
- /* controller type */
- document.forms['frmVboxSettings'].vboxSettingsStorageControllerType.options.length = 0;
- $(document.forms['frmVboxSettings'].vboxSettingsStorageControllerType).children().remove();
- for(var i = 0; i < vboxStorage[busType].types.length; i++) {
- document.forms['frmVboxSettings'].vboxSettingsStorageControllerType.options[i] = new Option(trans(vboxStorageControllerType(vboxStorage[busType].types[i]),'VBoxGlobal'),vboxStorage[busType].types[i]);
- }
-
- /* Set default type */
- document.forms['frmVboxSettings'].vboxSettingsStorageControllerType.value = $(tbl).data('controller').controllerType;
-
- $('#vboxSettingsController').css('display','block');
- $('#vboxSettingsStorageAttachment').css('display','none');
- $('#vboxSettingsMediaInfo').css('display','none');
- $('#vboxSettingsHDInfo').css('display','none');
-
- // Show SATA port count
- if(busType == 'SATA') {
- $(document.forms['frmVboxSettings'].vboxSettingsControllerPortCount).val($(tbl).data('controller').portCount);
- $('#vboxSettingsControllerPortCountRow').css('display','');
- } else {
- $('#vboxSettingsControllerPortCountRow').css('display','none');
- }
-
- /* Enable / disable buttons */
- if($(tbl).parent().find('ul').children('li').length < ($(tbl).data('controller').maxPortCount * $(tbl).data('controller').maxDevicesPerPortCount)) {
-
- if($('#vboxSettingsDialog').data('vboxFullEdit')) {
- $(tbl).find('.vboxToolbarSmall').trigger('enable', [true]);
- }
-
- } else {
- $(tbl).find('.vboxToolbarSmall').trigger('disable');
- }
-
- /* Trigger Event */
- $('#vboxSettingsStorageTree').trigger('itemselect',tbl);
-
-}
-
-
-/*
- * Generate tooltip for medium helper function
- */
-function vboxSettingsMediumTip(m) {
-
- if(!m || !m.id) return trans('Empty','VBoxGlobal');
- if(m.hostDrive) return vboxMedia.getName(m);
-
- // DVD / Floppy images
- if(m.deviceType != 'HardDisk') {
- return '<b>'+m.location+'</b><p>'+trans('Attached to:','UIMachineSettingsStorage')+' '+vboxMedia.attachedTo(m)+'</p>';
- }
-
- var mbase = m;
- if(m.base != m.id) {
- mbase = vboxMedia.getMediumById(m.base);
- }
- var tip = '<b>'+mbase.location+'</b><p>'+trans('Type (Format):','UIMachineSettingsStorage')+' '+vboxMedia.getType(mbase)+' ('+mbase.format+')</p><p>'+trans('Attached to:','UIMachineSettingsStorage')+' '+vboxMedia.attachedTo(mbase)+'</p>';
-
- // Is this a medium that is attached indirectly
- if(vboxSettingsStorageBusses.isAttachedIndirect(m) && m.base != m.id) {
- var p = vboxSettingsStorageBusses.isAttached(m);
- tip += '<hr />'+trans('This base hard disk is indirectly attached using the following differencing hard disk:','VBoxGlobal')+'<br /><b>'+p.location+'</b></p><p>'+trans('Type (Format):','UIMachineSettingsStorage')+' '+vboxMedia.getType(p) + ' (' + p.format + ')'+'</p><p>'+trans('Attached to:','UIMachineSettingsStorage')+' '+vboxMedia.attachedTo(p)+'</p>';
- } else if(m.readOnly) {
- tip += '<hr />'+trans('Attaching this hard disk will be performed indirectly using a newly created differencing hard disk.','VBoxGlobal');
- }
-
- return tip;
-
-}
-
-/*
- *
- * Add disk medium to bus helper function
- *
- */
-function vboxSettingsStorageAddMedium(conElm, type) {
-
- // get controller name
- var controller = $(conElm).find('span.vboxSettingsControllerTitle').first().text();
-
- if(!type) type = 'HardDisk';
-
- // Find first target slot (vboxSettingsStorageBusses created above)
- var slots = vboxSettingsStorageBusses.availableSlots(conElm);
- var slot = null;
- for(var i in slots) {
- if(typeof i == 'function') continue;
- slot = i;
- break;
- }
- if(slot === null) return;
- slot = slot.split('-');
- var port = slot[0];
- var device = slot[1];
-
- // Add new attachment dialog
- ////////////////////////////
- var buttons = {};
-
- var msg = '';
-
- // Hard Disk buttons
- if (type == 'HardDisk') {
-
- buttons[trans('Create new disk','UIMessageCenter')] = function() {
-
- $.when(new vboxWizardNewHDDialog({'path':vboxDirname($('#vboxSettingsDialog').data('vboxMachineData').settingsFilePath)+$('#vboxPane').data('vboxConfig').DSEP,vmName:$('#vboxSettingsDialog').data('vboxMachineData').name}).run())
- .done(function(id){
- if(!id) return;
- mAttachToolbarHD.mediaMenu.menuUpdateRecent();
- vboxSettingsAddAttachment({'controller':controller,'port':port,'device':device,'type':type,'medium':vboxMedia.getMediumById(id),'ignoreFlush':1}, conElm);
- $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().click();
- });
-
- $(this).remove();
-
- };
- buttons[trans('Choose existing disk','UIMessageCenter')] = function() {
- var dlg = $(this);
- vboxMedia.actions.choose(null,'HardDisk',function(med){
- if(med) {
- mAttachToolbarHD.mediaMenu.menuUpdateRecent();
- vboxSettingsAddAttachment({'controller':controller,'port':port,'device':device,'type':type,'medium':med,'ignoreFlush':1}, conElm);
- $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().click();
- }
- $(dlg).remove();
- });
- };
-
- msg = trans('<p>You are about to add a virtual hard disk to controller <b>%1</b>.</p><p>Would you like to create a new, empty file to hold the disk contents or select an existing one?</p>','UIMessageCenter').replace('%1',controller);
-
- // Floppy buttons
- } else if(type == 'Floppy') {
-
- buttons[trans('Choose disk','UIMessageCenter')] = function() {
- var dlg = $(this);
- vboxMedia.actions.choose(null,'Floppy',function(med){
- if(med) {
- mAttachToolbarFD.mediaMenu.menuUpdateRecent();
- vboxSettingsAddAttachment({'controller':controller,'port':port,'device':device,'type':type,'medium':med}, conElm);
- $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().click();
- }
- $(dlg).remove();
- });
-
- };
-
- buttons[trans('Leave empty','UIMessageCenter')] = function() {
- vboxSettingsAddAttachment({'controller':controller,'port':port,'device':device,'type':type,'medium':null}, conElm);
- $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().click();
- $(this).remove();
- };
-
- msg = trans('<p>You are about to add a new floppy drive to controller <b>%1</b>.</p><p>Would you like to choose a virtual floppy disk to put in the drive or to leave it empty for now?</p>','UIMessageCenter').replace('%1',controller);
-
- // CD/DVD buttons
- } else {
-
- buttons[trans('Choose disk','UIMessageCenter')] = function() {
- var dlg = $(this);
- vboxMedia.actions.choose(null,'DVD',function(med){
- if(med) {
- mAttachToolbarCD.mediaMenu.menuUpdateRecent();
- vboxSettingsAddAttachment({'controller':controller,'port':port,'device':device,'type':type,'medium':med}, conElm);
- $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().click();
- }
- $(dlg).remove();
- });
-
- };
-
- buttons[trans('Leave empty','UIMessageCenter')] = function() {
- vboxSettingsAddAttachment({'controller':controller,'port':port,'device':device,'type':type,'medium':null}, conElm);
- $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().click();
- $(this).remove();
- };
-
- msg = trans('<p>You are about to add a new CD/DVD drive to controller <b>%1</b>.</p><p>Would you like to choose a virtual CD/DVD disk to put in the drive or to leave it empty for now?</p>','UIMessageCenter').replace('%1',controller);
-
- }
-
- buttons[trans('Cancel','QIMessageBox')] = function() {
- $(this).remove();
- };
- $('<div />').attr({'id':'vboxSettingsStorageUnavailable','style':'display: none'}).html(
- '<div><img src="images/50px-Question_icon.svg.png" style="float: left; padding: 10px; " />'+msg+'</div>'
- ).dialog({'closeOnEscape':false,'width':600,'height':200,'buttons':buttons,'modal':true,'autoOpen':true,'dialogClass':'vboxDialogContent','title':'<img src="images/vbox/OSE/about_16px.png" class="vboxDialogTitleIcon" /> phpVirtualBox'});
-
-
-}
-
-/*
- *
- * Add controller to list helper function
- *
- */
-
-function vboxSettingsAddController(con,list) {
-
- // Elect name if none exists
- if(!con.name) {
- var count = $(list).children('li.vboxSettingsController'+con.bus).length + 1;
- var name = trans(con.bus,'UIMachineSettingsStorage');
- if(count == 1) {
- con.name = name;
- } else {
-
- var electedName = name + ' ' + count;
- var conflictFound = false;
- do {
- conflictFound = false;
- $(list).children('li.vboxSettingsController'+con.bus).each(function(idx,elm) {
- if($(elm).children('table').first().data('controller').name == electedName) {
- conflictFound = true;
- electedName = name + ' ' + (++count);
- return false;
- }
- });
- con.name = electedName;
-
- } while(conflictFound);
- }
-
- }
- var li = $('<li />').attr({'title':con.name,'class':'vboxSettingsController vboxSettingsController' + con.bus});
-
- var tbl = $('<table />').attr({'class':'vboxListItem vboxSettingsController'}).on('click',function(){
- vboxSettingsSelectController(this);
- });
-
- // filter out any dummy medium attachments
- var mas = new Array();
- for(var i = 0; i < con.mediumAttachments.length; i++) {
- if(con.mediumAttachments[i].controller)
- mas[mas.length] = con.mediumAttachments[i];
- }
- con.mediumAttachments = mas;
-
- // Assign data
- $(tbl).data('controller',con);
-
- var tr = $('<tr />');
-
- var iconName = vboxStorage.getBusIconName(con.bus);
- $('<td />').attr({'class':'vboxSettingsStorageTypeIcon vboxSettingsController' + con.bus + 'Expanded'})
- .css({
- 'background-image':'url(images/vbox/'+iconName+'_collapse_16px.png)'
- }).html('<div style="width:22px" />').click(function(){
-
-
- if(!$(this).data('toggleClicked')) {
-
- $(this).data('toggleClicked', true);
-
- var n = $(this).closest('li');
- $(n).children('ul').addClass('vboxHidden').css('display','none');
- $(this).removeClass('vboxSettingsController'+con.bus+'Expanded').addClass('vboxSettingsController'+con.bus)
- .css({'background-image':'url(images/vbox/'+iconName+'_expand_16px.png)'});
-
- } else {
-
- $(this).data('toggleClicked', false);
- var n = $(this).closest('li');
- $(n).children('ul').removeClass('vboxHidden').css('display','');
- $(this).removeClass('vboxSettingsController'+con.bus).addClass('vboxSettingsController'+con.bus+'Expanded')
- .css({'background-image':'url(images/vbox/'+iconName+'_collapse_16px.png)'})
-
- }
-
- return false;
-
- }).appendTo(tr);
-
- // Controller name
- $(tr).append($('<td />').css({'width':'100%'}).html('<div class="vboxFitToContainer">'+trans('Controller: %1','UIMachineSettingsStorage').replace('%1','<span class="vboxSettingsControllerTitle vboxRunningEnabled">'+$('<div/>').text(con.name).html())+"</span>"+"</div>"));
-
- // Buttons
- $(tr).append($('<td />').attr({'style':'width: 22px;','class':'vboxControllerAttachmentButton'}));
-
- $(tbl).append(tr).appendTo(li);
-
-
- /* Attachments list holder */
- $(li).append($('<ul />').attr({'class':'vboxSettingsControllerAttachments'})).dblclick(function(e){
- $(this).children('table.vboxSettingsController').find('td.vboxSettingsStorageTypeIcon').trigger('click',e);
- }).disableSelection().appendTo(list);
-
- /* Generate Toolbars */
- var dtypes = vboxStorage[con.bus].driveTypes;
- for(var i = 0; i < dtypes.length; i++) {
- var b = null;
- if(dtypes[i] == 'dvd') {
- b = {
- 'name' : con.bus+'addcd',
- 'label' : trans('Add Optical Drive','UIMachineSettingsStorage'),
- 'icon' : 'cd_add',
- 'click' : function () { vboxSettingsStorageAddMedium(li,'DVD'); }
- };
- } else if(dtypes[i] == 'disk') {
- b = {
- 'name' : con.bus+'adddrive',
- 'label' : trans('Add Hard Disk','UIMachineSettingsStorage'),
- 'icon' : 'hd_add',
- 'click' : function (item) { vboxSettingsStorageAddMedium(li); }
- };
-
- } else if(dtypes[i] == 'floppy') {
- b = {'label':trans('Add Floppy Drive','UIMachineSettingsStorage'),
- 'icon' : 'fd_add',
- 'click' : function (item) { vboxSettingsStorageAddMedium(li,'Floppy'); }
- };
- }
- b['enabled'] = function() {
-
- return (li.find('li').length < (vboxStorage[con.bus].maxPortCount * vboxStorage[con.bus].maxDevicesPerPortCount));
- };
-
- var tb = new vboxToolbarSmall({buttons: [b],
- buttonStyle: 'margin:0px;padding:0px;border:0px;background-repeat:no-repeat;background-position:0px 0px;',
- noHover: true,
- renderTo: li.find('td.vboxControllerAttachmentButton')});
- tb.disable();
-
- }
-
- // Only if machine is not running
- if($('#vboxSettingsDialog').data('vboxFullEdit')) {
-
- $(li).contextMenu({menu: vboxStorageAttachmentMenus[con.bus].menuId(),
- menusetup: function() {$(li).children('table').first().trigger('click')}},
- vboxStorageAttachmentMenus[con.bus].menuClickCallback
- );
-
- }
-
- // Return controller element list item
- return li;
-
-}
-
-
-
-
-
-/*
- *
- * Add a medium attachment to a controller helper function
- *
- */
-function vboxSettingsAddAttachment(d,conElm) {
-
-
- var con = (conElm ? conElm : $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().parent());
-
- // Save bus
- d.bus = $(con).find('table.vboxSettingsController').data('controller').bus;
-
- // remove any 'last' classes
- $(con).children('ul').children().removeClass('last');
-
- var li = $('<li />').attr({'class':'last vboxSettingsMediumAttachment'});
-
-
- var tbl = $('<table />').attr({'class':'vboxListItem vboxSettingsStorageAttachment'})
- .data({'attachment':d}).on('click',function(){
- vboxSettingsSelectAttachment(this);
- });
-
- var m = vboxMedia.getMediumById(((d.medium && d.medium.id) ? d.medium.id : null));
-
- var tr = $('<tr />');
-
- // Storage type icon
- $(tr).append($('<td />').attr({'class':'vboxSettingsStorageTypeIcon vboxSettingsMediaType' + d.type,'style':'width:22px'}).html('<img src="images/vbox/blank.gif" style="width:22px" />'));
-
- // Medium name
- $(tr).append($('<td />').css({'width':'100%'}).append($('<div />').attr({'class':'vboxSettingsStorageMediumName vboxFitToContainer'}).html(vboxMedia.getName(vboxMedia.getMediumById((m && m.base ? m.base : (m && m.id ? m.id : null)))))));
-
-
- $(tbl).append(tr).appendTo(li);
-
- // Only if not running
- if($('#vboxSettingsDialog').data('vboxFullEdit')) {
-
- $(li).contextMenu({
- menu: vboxSettingsMAMenu.menuId(),
- menusetup : function(el) {
- vboxSettingsSelectAttachment($(el).find('table.vboxSettingsStorageAttachment'));
- }
- },
- function(action, el, pos) {
- vboxSettingsStorageButtons[1].click();
- }
- );
- }
-
- $(li).tipped({'source':vboxSettingsMediumTip(m),'position':'mouse','delay':1000}).appendTo(con.children('ul'));
-
-
-}
-
-/*
- *
- * Called when selecting a medium attachment
- *
- */
-function vboxSettingsSelectAttachment(tbl) {
-
- // Null selection?
- if(!tbl) {
- $('#vboxSettingsController').css('display','none');
- $('#vboxSettingsMediaInfo').css('display','none');
- $('#vboxSettingsStorageAttachment').css('display','none');
- return;
- }
-
- $(document.forms['frmVboxSettings'].vboxSettingsStorageItemName).trigger('blur');
-
- /* Display Changes */
- if(!$(tbl).hasClass('vboxListItemSelected')) {
- $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').removeClass('vboxListItemSelected').addClass('vboxListItem');
- $(tbl).removeClass('vboxListItem').addClass('vboxListItemSelected');
- }
-
- $('#vboxSettingsController').css('display','none');
- $('#vboxSettingsMediaInfo').css('display','block');
- $('#vboxSettingsStorageAttachment').css('display','block');
-
-
- var ma = $(tbl).data('attachment');
-
- /* Get / Set Medium */
- if(ma.medium && ma.medium.id)
- ma.medium = vboxMedia.getMediumById(ma.medium.id);
-
- (function(){
-
- var sc = $(tbl).closest('li.vboxSettingsController').children('table').first().data('controller');
-
- var tblSA = $('#vboxSettingsStorageAttachment').find('table').first();
- $(tblSA).find('tr.vboxSettingsControllerDeviceOptionRow').empty().remove();
-
- switch(ma.type) {
-
- case 'HardDisk':
- label = 'Hard Disk:';
- break;
- case 'DVD':
- label = 'CD/DVD Drive:';
- break;
- case 'Floppy':
- label = 'Floppy Drive:';
- break;
- }
- var maOptions = vboxStorage.getMAOptions(ma)
- .concat(vboxStorage.getMAOptionsForSC(sc));
- for(var i = 0; i < maOptions.length; i++) {
-
- var opt = maOptions[i];
-
- var cbox = $('<input />').attr('type','checkbox').prop('checked', ma[opt.attrib] ? true : false)
- .on('click', {attrib: opt.attrib}, function(event){
-
- var attachment = $(tbl).data('attachment');
- attachment[event.data.attrib] = this.checked ? true : false;
- $(tbl).data('attachment', attachment);
-
- }).addClass('vboxCheckbox');
-
- $('<tr />').addClass('vboxSettingsControllerDeviceOptionRow')
- .append($('<th />'))
- .append(
- $('<td />')
- .append($('<label />')
- .append(cbox)
- .append($('<span />').css({'margin-left':'4px'}).text(opt.label))
- )
- ).appendTo($(tblSA));
-
-
- }
- })();
- $('#vboxSettingsControllerSlotLabel').html(trans(label,'UIMachineSettingsStorage'));
-
-
- /* Show / Hide HD/Media Info */
- $('#vboxSettingsImageInfo').css('display',(ma.type == 'HardDisk' ? 'none' : 'block'));
- $('#vboxSettingsHDInfo').css('display',(ma.type == 'HardDisk' ? 'block' : 'none'));
-
-
-
- /* Populate slot select box */
- document.forms['frmVboxSettings'].vboxSettingsControllerSlot.options.length = 0;
- $(document.forms['frmVboxSettings'].vboxSettingsControllerSlot).children().remove();
- slots = vboxSettingsStorageBusses.availableSlots($(tbl).parent().parent().parent(), ma.port+'-'+ma.device);
-
- for(var s in slots) {
- var opt = new Option(slots[s], s);
- document.forms['frmVboxSettings'].vboxSettingsControllerSlot.options[document.forms['frmVboxSettings'].vboxSettingsControllerSlot.options.length] = opt;
- }
- document.forms['frmVboxSettings'].vboxSettingsControllerSlot.value = ma.port+'-'+ma.device;
-
- /* Trigger Event */
- $('#vboxSettingsStorageTree').trigger('itemselect',tbl);
-
- var m = ma.medium;
- var name = vboxMedia.getName(m);
-
- // Read-only medium selected
- if(ma.medium && ma.medium.readOnly) {
- $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().find('td').first().addClass('vboxMediumReadOnly');
- } else {
- $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().find('td').first().removeClass('vboxMediumReadOnly');
- }
-
- // Show medium info
- if(m && m.deviceType == 'HardDisk') {
-
- var disp = vboxMedia.getMediumById(m.base);
- name = vboxMedia.getName(disp);
-
- var encSettings = vboxMedia.getEncryptionSettings(disp);
-
- $('#vboxSettingsHDvsize').html(vboxMbytesConvert(disp.logicalSize));
- $('#vboxSettingsHDasize').html(vboxBytesConvert(disp.size));
- $('#vboxSettingsHDDetails').html(vboxMedia.getHardDiskVariant(disp));
- $('#vboxSettingsHDlocation').html(disp.location);
- $('#vboxSettingsHDtype').html(trans(disp.type,'VBoxGlobal') + ' (' + disp.format + ')');
- $('#vboxSettingsHDattached').html(vboxMedia.attachedTo(disp));
- $('#vboxSettingsHDEncrypted').html(encSettings && encSettings.id ? encSettings.id : '--');
-
-
- } else {
-
- $('#vboxSettingsImageType').html(m ? trans((m.hostDrive ? 'Host Drive' : 'Image'),'UIMachineSettingsStorage'): '--');
- $('#vboxSettingsImageSize').html((m && !m.hostDrive ? vboxBytesConvert(m.size):'--'));
- $('#vboxSettingsImageLocation').html((m && !m.hostDrive ? m.location:'--'));
- $('#vboxSettingsImageAttached').html((m && !m.hostDrive ? vboxMedia.attachedTo(m) :'--'));
-
- }
-
- $(tbl).data('attachment').medium = m;
- $(tbl).find('div.vboxSettingsStorageMediumName').first().html($('<div />').text(name).html());
-
-
-}
-
-
-/*
- * Focus storage controller list when showing this pane
- */
-$('#vboxSettingsStorageTableWrapper').on('show',function(){
- $('#vboxSettingsStorageTree').focus();
-});
-
-/*
- *
- *
- * Storage pane resize and draggable resize bar logic
- *
- *
- */
-/*
- * Resize storage pane
- */
-function vboxSettingsStorageResize() {
-
- // Hide storage tree
- $('#vboxSettingsStorageTree').css({'display':'none'});
-
- // Get and set size
- $('#vboxStoragePaneLeft').css({'display':'none'});
- $('#vboxStoragePaneRight').css({'display':'none'});
-
- // Main table height
- $('#vboxSettingsStorageTableWrapper').css({'display':'none'});
- var h = $('#vboxSettingsStorageTableWrapper').css({'display':'none'}).parent().parent().innerHeight()-4;
-
- // IE needs to account for bordering
- if($.browser.msie) h-= 4;
-
- // Set height
- $('#vboxSettingsStorageTableWrapper').css({'display':''}).height(h);
-
- // Pane width
- var bothWidth = ($('#vboxStoragePaneLeft').parent().innerWidth() + $('#vboxStoragePaneRight').parent().innerWidth() - 24) / 2;
- $('#vboxStoragePaneLeft').css({'width':bothWidth+'px','display':''}).parent().css({'width':'auto','padding':'6px'});
- $('#vboxStoragePaneRight').css({'width':bothWidth+'px','display':''}).parent().css({'width':'auto','padding':'6px'});
-
- // Unsnap.. sorry..
- $('#vboxStorageResizeBar').data('vboxSnapped',0);
-
- // Get inner height of storage tree parent - padding
- var h = $('#vboxStoragePaneLeft').parent().innerHeight() - 24;
- // subtract sibling heights
- $('#vboxSettingsStorageTree').siblings().each(function(){
- h -= $(this).outerHeight(true);
- });
-
- $('#vboxSettingsStorageTree').height(h).css({'display':''});
-
- vboxStorageResizeTreeItemLabels();
-
-}
-
-/*
- * Resize controller labels
- */
-function vboxStorageResizeTreeItemLabels() {
-
- $('#vboxSettingsStorageTree div.vboxFitToContainer').each(function(){
- $(this).css({'display':'none'});
- var w = $(this).parent().innerWidth() - 2;
- $(this).css({'width':w+'px','display':''});
- });
-
-
-};
-
-/*
- * Set pane sizes and resize bar
- */
-$('#vboxSettingsStorageTableWrapper').one('show',function(){
-
-
- // Resize everything on dialog resize
- $('#vboxSettingsDialog').on('dialogresizestop',function(){
- vboxSettingsStorageResize();
- });
- $('#vboxSettingsStorageTableWrapper').on('show',function(){
- vboxSettingsStorageResize();
- });
-
- // Hide children to get true size
- $('#vboxStoragePaneLeft').children().css({'display':'none'});
- $('#vboxStoragePaneRight').children().css({'display':'none'});
-
- var h = $('#vboxSettingsStorageTableWrapper').parent().css({'padding':'0px','margin':'0px'}).parent().innerHeight();
-
- // IE needs to account for bordering
- if($.browser.msie) h-= 4;
-
- $('#vboxSettingsStorageTableWrapper').height(h-4);
-
- // Get and set size
- var bothWidth = ($('#vboxStoragePaneLeft').parent().innerWidth() + $('#vboxStoragePaneRight').parent().innerWidth() - 24) / 2;
- $('#vboxStoragePaneLeft').css({'width':bothWidth+'px','overflow':'hidden'}).parent().css({'width':'auto'});
- $('#vboxStoragePaneRight').css({'width':bothWidth+'px','overflow':'hidden'}).parent().css({'width':'auto'});
-
- // Show children again
- $('#vboxStoragePaneLeft').children().css({'display':''});
- $('#vboxStoragePaneRight').children().css({'display':''});
-
- // Re-trigger list selection to show correct info
- if(!$('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().click().hasClass('vboxListItemSelected'))
- $('#vboxSettingsStorageTree').trigger('itemselect',null);
-
- // Don't allow selection of text in storage tree. This looks funny when dragging the resize bar
- $('#vboxSettingsStorageTree').disableSelection();
-
- // Resize
- vboxSettingsStorageResize();
-
- // Draggable resize bar
- $('#vboxStorageResizeBar').draggable({cursor:(jQuery.browser.opera ? 'e-resize' : 'col-resize'),axis:'x',zIndex:99,helper:function(){
-
- return $('<span />'); // dummy element
-
- },scroll:false,'start':function(e,ui){
-
- $('#vboxStorageResizeBar').data('vboxX',e.pageX);
-
- $('#vboxResizeOverlay').remove();
- $('body').disableSelection().css({'cursor':(jQuery.browser.opera ? 'e-resize' : 'col-resize')});
- $('#vboxSettingsDialog').append($('<div />').attr({'id':'vboxResizeOverlay','style':'width:99%;height:99%;border:0px;margin:0px;padding:0px;position:absolute;top:0px;left:0px;cursor:'+(jQuery.browser.opera ? 'e-resize' : 'col-resize')}));
-
-
- },'drag':function(e){
-
- var sStart = $('#vboxStorageResizeBar').data('vboxX');
- var sStop = e.pageX;
- var sWidth = Math.abs(sStop - sStart);
- if(sWidth == 0) return;
-
- var lWidth = parseInt($('#vboxStoragePaneLeft').css('width'));
- var rWidth = parseInt($('#vboxStoragePaneRight').css('width'));
-
- var snapped = $('#vboxStorageResizeBar').data('vboxSnapped');
-
- // Left to right
- if(sStop > sStart) {
-
- // Check for snapping
- if(snapped) {
- if(snapped > sStop || (rWidth - sWidth < 150)) { return; }
- else if(snapped && snapped <= sStop) {
-
- // Unsnap left pane
- $('#vboxStoragePaneRight').parent().css({'width':'auto'});
- $('#vboxStoragePaneLeft').css({'display':''}).parent().css({'padding':'6px'});
- $('#vboxStorageResizeBar').data('vboxSnapped',0);
- lWidth = $('#vboxStorageResizeBar').data('vboxSnappedWidthL');
- rWidth = $('#vboxStorageResizeBar').data('vboxSnappedWidthR');
- sWidth = Math.abs(sStop - snapped);
- }
- }
-
- if(rWidth - sWidth < 150) {
-
- $('#vboxStoragePaneLeft').css({'width':'100%'}).parent().css({'width':'100%'});
- $('#vboxStoragePaneRight').css({'display':'none','width':'10px'}).parent().css({'padding':'0px'});
- $('#vboxStorageResizeBar').data('vboxSnapped',e.pageX);
- $('#vboxStorageResizeBar').data('vboxSnappedWidthL', (lWidth + sWidth));
- $('#vboxStorageResizeBar').data('vboxSnappedWidthR', (rWidth - sWidth));
-
- } else {
- $('#vboxStoragePaneLeft').css({'width':(lWidth + sWidth)+'px','display':''});
- $('#vboxStoragePaneRight').css({'width':(rWidth - sWidth)+'px','display':''});
- }
-
-
- // Right to left
- } else {
-
- // Check for snapping
- if(snapped) {
- if(snapped < sStop || (lWidth - sWidth < 150)) { return; }
- else if(snapped && snapped >= sStop) {
-
- // Unsnap right pane
- $('#vboxStoragePaneLeft').parent().css({'width':'auto'});
- $('#vboxStoragePaneRight').css({'display':''}).parent().css({'width':'100%','padding':'6px'}); // 100% to fix webkit
- $('#vboxStorageResizeBar').data('vboxSnapped',0);
- lWidth = $('#vboxStorageResizeBar').data('vboxSnappedWidthL');
- rWidth = $('#vboxStorageResizeBar').data('vboxSnappedWidthR');
- sWidth = Math.abs(sStop-snapped);
-
- }
- }
-
- if(lWidth - sWidth < 150) {
-
- $('#vboxStoragePaneRight').css({'width':'100%'}).parent().css({'width':'100%'});
- $('#vboxStoragePaneLeft').css({'display':'none','width':'10px'}).parent().css({'padding':'0px'});
- $('#vboxStorageResizeBar').data('vboxSnapped',e.pageX);
- $('#vboxStorageResizeBar').data('vboxSnappedWidthL', (lWidth - sWidth));
- $('#vboxStorageResizeBar').data('vboxSnappedWidthR', (rWidth + sWidth));
-
- } else {
- $('#vboxStoragePaneLeft').css({'width':(lWidth - sWidth)+'px'});
- $('#vboxStoragePaneRight').css({'width':(rWidth + sWidth)+'px'});
- }
- }
-
- $('#vboxStorageResizeBar').data('vboxX',e.pageX);
-
- // resize labels
- vboxStorageResizeTreeItemLabels();
-
-
- },'stop':function(e) {
-
- // resize labels
- vboxStorageResizeTreeItemLabels();
-
- $('body').enableSelection().css({'cursor':'default'});
- $('#vboxResizeOverlay').remove();
- }}).css({'cursor':(jQuery.browser.opera ? 'e-resize' : 'col-resize'),'height':'98%'});
-
-
-});
-
+<!--
+
+ VM Storage Settings
+ Copyright (C) 2010-2015 Ian Moore (imoore76 at yahoo dot com)
+
+ $Id: settingsStorage.html 599 2015-07-27 10:40:37Z imoore76 $
+
+-->
+<table style='width: 100%;' id='vboxSettingsStorageTableWrapper'>
+ <tr style='height: 100%'>
+ <td width='50%' style='padding: 6px;'>
+ <div id='vboxStoragePaneLeft'>
+ <table class='vboxSettingsHeadingLine'
+ style='width: 100%; border-spacing: 0; border: 0px; margin: 0px; padding: 0px;'>
+ <tr style='vertical-align: middle'>
+ <td style='white-space: nowrap; width: auto;'><span
+ class='translate vboxRunningEnabled'>Storage Tree</span></td>
+ <td style='width: 100%'>
+ <hr style='width: 100%;' class='vboxSeparatorLine'/>
+ </td>
+ </tr>
+ </table>
+
+
+ <!-- Storage Controllers -->
+ <div id='vboxSettingsStorageTree' style='height: 290px; outline: none;' class='vboxBordered' tabindex='0'>
+ <ul class='vboxHover vboxHoverBorderless'>
+ <li>Storage Thingy</li>
+ <li>
+ <ul>
+ <li>Attachment Thingy</li>
+ </ul>
+ </li>
+ </ul>
+ </div>
+
+ <!-- Controller Toolbar -->
+ <div id='vboxSettingsControllersButtons' style='text-align: right'></div>
+
+
+ </div>
+ </td>
+
+ <!-- Resize Bar -->
+ <td style='height: 100%; width:3px; padding:0px; margin:0px;'>
+ <div style='margin:0px; margin-top: 2px; padding:0px; width: 3px; height: 99%; background:#aaa;' id='vboxStorageResizeBar' ></div>
+ </td>
+
+ <td width='50%' style='padding: 6px;'>
+ <div id='vboxStoragePaneRight'>
+ <table class='vboxSettingsHeadingLine'
+ style='width: 100%; border-spacing: 0; border: 0px; margin: 0px; padding: 0px;'>
+ <tr style='vertical-align: middle'>
+ <td style='white-space: nowrap; width: auto;'><span
+ class='translate vboxRunningEnabled'>Attributes</span></td>
+ <td style='width: 100%; white-space: nowrap;'><hr style='width: 100%;' class='vboxSeparatorLine'/></td>
+ </tr>
+ </table>
+
+
+ <!-- Controller Settings -->
+ <div id='vboxSettingsController' style='width: 100%; display: none;'>
+ <table style='width: 100%' class='vboxVertical'>
+ <tr>
+ <th><span class='translate'>Name:</span></th>
+ <td style='width: 100%'><input type='text' class='vboxText'
+ name='vboxSettingsStorageItemName' style='width: 99%' /></td>
+ </tr>
+ <tr>
+ <th><span class='translate'>Type:</span></th>
+ <td><select name='vboxSettingsStorageControllerType'
+ style='width: 100%'>
+ <option value='ICH6'>ICH6</option>
+ </select></td>
+ </tr>
+ <tr id='vboxSettingsControllerPortCountRow' style='display: none'>
+ <th><span class='translate'>Port Count:</span></th>
+ <td>
+ <select name='vboxSettingsControllerPortCount'>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <th></th>
+ <td style='width: 100%'>
+ <label><input type='checkbox' class='vboxCheckbox'
+ name='vboxSettingsStorageHostCache'/> <span class='translate'>Use Host I/O Cache</span></label></td>
+ </tr>
+ </table>
+ </div>
+
+ <!-- Attachment Settings -->
+ <div id='vboxSettingsStorageAttachment' style='display: none'>
+ <table class='vboxVertical'>
+ <tr style='vertical-align: middle;'>
+ <th><span class='translate vboxRunningEnabled' id='vboxSettingsControllerSlotLabel'>HardDisk</span></th>
+ <td style='width: 100%'>
+ <table class='vboxInvisible' style='width: 100%'>
+ <tr style='vertical-align: middle'>
+ <td style='width: 100%'>
+ <select name='vboxSettingsControllerSlot' style='width: 100%'></select>
+ </td>
+ <td>
+ <div id='vboxSettingsAddAttachmentsMenuHDDiv' style='display: none'></div>
+ <div id='vboxSettingsAddAttachmentsMenuFDDiv' style='display: none'></div>
+ <div id='vboxSettingsAddAttachmentsMenuCDDiv' style='display: none'></div>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </div>
+
+ <!-- Selected Media Info -->
+ <div id='vboxSettingsMediaInfo' style='display: none'>
+ <table class='vboxSettingsHeadingLine'
+ style='width: 100%; border-spacing: 0; border: 0px; margin: 0px; padding: 0px;'>
+ <tr style='vertical-align: middle'>
+ <td style='white-space: nowrap; width: auto;'><span
+ class='translate vboxRunningEnabled'>Information</span></td>
+ <td style='width: 100%'>
+ <hr style='width: 100%; ' class='vboxSeparatorLine'/>
+ </td>
+ </tr>
+ </table>
+
+
+ <!-- HardDisk Media -->
+ <div id='vboxSettingsHDInfo'>
+ <table class='vboxVertical'>
+ <tr>
+ <th><span class='translate vboxRunningEnabled'>Type (Format):</span></th>
+ <td><span id='vboxSettingsHDtype' class='vboxRunningEnabled'>Image</span></td>
+ </tr>
+ <tr>
+ <th><span class='translate vboxRunningEnabled'>Virtual Size:</span></th>
+ <td><span id='vboxSettingsHDvsize' class='vboxRunningEnabled'>30 GB</span></td>
+ </tr>
+ <tr>
+ <th><span class='translate vboxRunningEnabled'>Actual Size:</span></th>
+ <td><span id='vboxSettingsHDasize' class='vboxRunningEnabled'>30 GB</span></td>
+ </tr>
+ <tr>
+ <th><span class='translate vboxRunningEnabled'>Details:</span></th>
+ <td><span id='vboxSettingsHDDetails' class='vboxRunningEnabled'>Dynamic</span></td>
+ </tr>
+ <tr>
+ <th><span class='translate vboxRunningEnabled'>Location:</span></th>
+ <td><span id='vboxSettingsHDlocation' class='vboxRunningEnabled'>/usr/local/blah/etc..</span></td>
+ </tr>
+ <tr>
+ <th><span class='translate vboxRunningEnabled'>Attached to:</span></th>
+ <td><span id='vboxSettingsHDattached' class='vboxRunningEnabled'>Some Virtual
+ Machine Name</span></td>
+ </tr>
+ <tr>
+ <th><span class='translate vboxRunningEnabled'>Encrypted with key:</span></th>
+ <td><span id='vboxSettingsHDEncrypted' class='vboxRunningEnabled'>--</span></td>
+ </tr>
+ </table>
+ </div>
+
+ <!-- DVD/CD Media and Floppy -->
+ <div id='vboxSettingsImageInfo'>
+ <table class='vboxVertical'>
+ <tr>
+ <th><span class='translate vboxRunningEnabled'>Type:</span></th>
+ <td><span id='vboxSettingsImageType' class='vboxRunningEnabled'>Image</span></td>
+ </tr>
+ <tr>
+ <th><span class='translate vboxRunningEnabled'>Size:</span></th>
+ <td><span id='vboxSettingsImageSize' class='vboxRunningEnabled'>30 GB</span></td>
+ </tr>
+ <tr>
+ <th><span class='translate vboxRunningEnabled'>Location:</span></th>
+ <td><span id='vboxSettingsImageLocation' class='vboxRunningEnabled'>/usr/local/blah/etc..</span></td>
+ </tr>
+ <tr>
+ <th><span class='translate vboxRunningEnabled'>Attached to:</span></th>
+ <td><span id='vboxSettingsImageAttached' class='vboxRunningEnabled'>Some Virtual
+ Machine Name</span></td>
+ </tr>
+ </table>
+ </div>
+
+ </div>
+ </div>
+ </td>
+ </tr>
+</table>
+<script type='text/javascript'>
+
+ /*
+ *
+ * Storage controller helper object
+ *
+ *
+ */
+ var vboxSettingsStorageObj = function() {
+
+ this.busTypes = vboxStorage.getBusTypes();
+
+ this.attachedDirectMedia = {};
+ this.attachedIndirectMedia = {};
+
+ /* Return slots available on controller, including incl (device currently on slot) */
+ this.availableSlots = function(conElm,incl) {
+
+ var bus = $(conElm).children('table').first().data('controller').bus;
+ var slots = vboxStorage[bus].slots();
+
+ var atts = $(conElm).find('table.vboxSettingsStorageAttachment');
+
+ for(var i = 0; i < atts.length; i++) {
+ slot = $(atts[i]).data('attachment').port+'-'+$(atts[i]).data('attachment').device;
+ if(incl && (incl == slot)) continue;
+ delete slots[slot];
+ }
+ return slots;
+ };
+
+ this.addAttached = function(m) {
+ if(!m || !m.id) return;
+ var medium = vboxMedia.getMediumById(m.id);
+
+ // SafeGuard
+ if(!medium) {
+ alert('A medium listed as attached to this machine was not found in the media registry. phpVirtualBox will now reload.');
+ location.reload(true);
+ }
+
+ this.attachedDirectMedia[medium.id] = medium;
+ if(medium.base) {
+ this.attachedIndirectMedia[medium.base] = medium;
+ }
+ };
+
+ this.isAttached = function(m,directOnly) {
+ if(!m || !m.id) return false;
+ if(this.attachedDirectMedia[m.id]) return this.attachedDirectMedia[m.id];
+ if(!directOnly) {
+ return (m.base ? this.attachedIndirectMedia[m.base] : null);
+ }
+ return false;
+ };
+
+ this.isAttachedDirect = function(m) { return this.attachedDirectMedia[m.id]; };
+ this.isAttachedIndirect = function(m) { return (m.base ? this.attachedIndirectMedia[m.base] : null); };
+ };
+
+ /*
+ *
+ *
+ * Initialization logic
+ *
+ *
+ */
+
+ /* Storage Obj */
+ var vboxSettingsStorageBusses = new vboxSettingsStorageObj(); // defined below
+
+ /* Setup SATA port count */
+ var sel = document.forms['frmVboxSettings'].vboxSettingsControllerPortCount;
+ for(var i = 1; i <= vboxStorage.SATA.maxPortCount; i++) {
+ sel.options[sel.options.length] = new Option(i,i);
+ }
+ $(sel).change(function(){
+ $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().data('controller').portCount = $(this).val();
+ });
+
+
+
+ /* Pre-load storage images */
+var imgs = new Array();
+for(var i=0;i<vboxSettingsStorageBusses.busTypes.length;i++){
+ var imgName = vboxStorage.getBusIconName(vboxSettingsStorageBusses.busTypes[i]);
+ imgs[i] = new Array();
+ imgs[i][0] = new Image();
+ imgs[i][0].src = 'images/vbox/'+imgName+'_expand_16px.png';
+ imgs[i][1] = new Image();
+ imgs[i][1].src = 'images/vbox/'+imgName+'_collapse_16px.png';
+ imgs[i][2] = new Image();
+ imgs[i][2].src = 'images/vbox/'+imgName+'_add_16px.png';
+ imgs[i][3] = new Image();
+ imgs[i][3].src = 'images/vbox/'+imgName+'_add_disabled_16px.png';
+}
+
+var imgs2 = new Array();
+var imgsToLoad = ['fd','hd','cd'];
+for(var i=0;i<imgsToLoad.length;i++){
+ imgs2[i] = new Image();
+ imgs2[i].src = 'images/vbox/'+imgsToLoad[i]+'_16px.png';
+}
+
+/*
+ *
+ * Init Storage Controller menus and toolbar
+ *
+ */
+
+ /* Menu for adding controllers */
+ var vboxSettingsCMenu = new vboxMenu({id: 'vboxSettingsAddControllerMenu',
+ language_context: 'UIMachineSettingsStorage'});
+ var vboxSettingsCMenuItems = [];
+ var bustypes = vboxStorage.getBusTypes();
+ for(var i = 0; i < bustypes.length; i++) {
+ var bt = bustypes[i];
+ var icon = vboxStorage.getBusIconName(bt);
+ vboxSettingsCMenuItems[vboxSettingsCMenuItems.length] = {'name':'add'+bt,'icon':icon+"_add",'label':'Add '+bt+' Controller'};
+ }
+ vboxSettingsCMenu.addMenu(vboxSettingsCMenuItems);
+
+
+ /* Storage tree context menu to add controllers */
+ $('#vboxSettingsStorageTree').contextMenu({
+ menu: vboxSettingsCMenu.menuId()
+ },
+ function(action, el, pos) {
+
+ var bus = action.substring(3);
+ var c = {'bus':bus,'mediumAttachments':[],'controllerType':vboxStorage[bus].types[0],'useHostIOCache':1,
+ 'maxPortCount':vboxStorage[bus]['maxPortCount'],'maxDevicesPerPortCount':vboxStorage[bus]['maxDevicesPerPortCount']};
+
+
+ vboxSettingsAddController(c, $('#vboxSettingsStorageTree').children('ul').first());
+
+ $('#vboxSettingsStorageTree').trigger('itemselect',$('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first());
+ }
+ );
+
+ /* Storage tree tool bar */
+ var vboxSettingsStorageButtons = new Array(
+ {
+ /* Add Attachment Button */
+ 'name' : 'addattach',
+ 'label' : 'Add Attachment',
+ 'icon' : 'attachment_add',
+ 'enabled' : function (item) {
+
+ if(!$(item).data('controller')) return false;
+
+ // Determine how max and how many are used
+ if(!($(item).data('controller').maxPortCount && ($(item).parent().find('ul').children('li').length < ($(item).data('controller').maxPortCount * $(item).data('controller').maxDevicesPerPortCount))))
+ return false;
+
+ // Enable / Disable CD/DVD menu
+ var c = $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first();
+ if(jQuery.inArray('dvd', vboxStorage[$(c).data('controller').bus].driveTypes) > -1) {
+ scToolbar.getButtonElement("addattach").data('busType',$(c).data('controller').bus);
+ scToolbar.getButtonElement("addattach").enableContextMenu();
+ } else {
+ scToolbar.getButtonElement("addattach").disableContextMenu();
+ }
+ return true;
+
+ },
+ 'click' : function (item) {
+ // Let context menu handle IDE and Sata
+ var c = $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first();
+ if(vboxStorage[$(c).data('controller').bus].driveTypes.length > 1) {
+ return;
+ }
+ vboxSettingsStorageAddMedium($(c).parent(),($(c).data('controller').bus == 'Floppy' ? 'Floppy' : 'HardDisk'));
+ }
+ },
+
+ {
+ /* Remove Attachment Button */
+ 'name' : 'removeattach',
+ 'label' : 'Remove Attachment',
+ 'icon' : 'attachment_remove',
+ 'enabled' : function (item) { return (item && $(item).data('attachment')); },
+ 'click' : function () {
+
+ // Set previous item to last?
+ var cur = $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().parent();
+
+ if($(cur).hasClass('last')) {
+ $(cur).prev().addClass('last');
+ }
+
+ var next = $(cur).next().find('table.vboxListItem').first();
+ if(!$(next).html()) {
+ var con = $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().data('controller');
+ if(con) next = $('#vboxSettingsController'+con.bus).find('table.vboxListItem').first();
+ }
+ $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().parent().remove();
+ if(!$(next).trigger('click').html()) $('#vboxSettingsStorageTree').trigger('itemselect',null);
+ }
+ },
+
+ {
+ /* Add Controller Button */
+ 'name' : 'addcontroller',
+ 'label' : 'Add Controller',
+ 'icon' : 'controller_add',
+ 'enabled' : function (item) {
+
+ // Draw menu items
+ var cons = $('#vboxSettingsStorageTree').find('table.vboxSettingsController');
+ var avail = vboxStorage.getBusTypes();
+ var used = {};
+ for(var i = 0; i < avail.length; i++) {
+ used[avail[i]] = false;
+ }
+
+ for(var i = 0; i < cons.length; i++) {
+ used[$(cons[i]).data('controller').bus] = true;
+ }
+
+ var oneEnabled = false;
+ for(var i in used) {
+
+ if(used[i]) { // && vboxStorage[i].limitOneInstance) {
+ vboxSettingsCMenu.disableItem('add'+i);
+ } else {
+ vboxSettingsCMenu.enableItem('add'+i);
+ oneEnabled = true;
+ }
+ }
+
+ // If at least one item is enabled
+ return oneEnabled;
+
+
+ },
+ 'click' : function (item) { return true; }
+ },
+
+ {
+ /* Remove Controller Button */
+ 'name' : 'removecontroller',
+ 'label' : 'Remove Controller',
+ 'icon' : 'controller_remove',
+ 'enabled' : function (item) { if(item && $(item).data('controller')) return true; },
+ 'click' : function () {
+ var next = $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().parent().next().find('table.vboxListItem').first();
+ $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().parent().remove();
+ if(!$(next).html()) {next = $('#vboxSettingsStorageTree').find('table.vboxListItem').first();}
+ if(!$(next).trigger('click').html()) $('#vboxSettingsStorageTree').trigger('itemselect',null);
+ }
+ }
+
+
+
+ );
+var scToolbar = new vboxToolbarSmall({buttons: vboxSettingsStorageButtons,
+ language_context: 'UIMachineSettingsStorage', renderTo: 'vboxSettingsControllersButtons'});
+
+
+/* Add controller button menu initialization */
+scToolbar.getButtonElement("addcontroller").contextMenu({
+ menu: vboxSettingsCMenu.menuId(),
+ mode:'menu',
+ button: 0
+ },
+ function(action, el, pos) {
+
+ var bus = action.substring(3);
+ var c = {'bus':bus,'mediumAttachments':[],'controllerType':vboxStorage[bus].types[0],'useHostIOCache':1,
+ 'maxPortCount':vboxStorage[bus]['maxPortCount'],'maxDevicesPerPortCount':vboxStorage[bus]['maxDevicesPerPortCount']};
+
+ vboxSettingsAddController(c, $('#vboxSettingsStorageTree').children('ul').first());
+
+ $('#vboxSettingsStorageTree').trigger('itemselect',$('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first());
+ }
+ );
+
+/* Menu for adding attachment */
+var mAttachMenu = new vboxMenu({id: 'vboxSettingsAddAttachmentsMenu',
+ language_context: 'UIMachineSettingsStorage',
+ menuItems: [{name: 'addCD', icon: 'cd_add', label: 'Add Optical Drive'},
+ {name: 'addHD', icon: 'hd_add', label: 'Add Hard Disk'}]});
+
+
+ /* Add attachment button menu initialization */
+scToolbar.getButtonElement("addattach").contextMenu({
+ menu: mAttachMenu.menuId(),
+ mode:'menu',
+ button: 0
+ },
+ function(action, el, pos) {
+ vboxSettingsStorageAddMedium($('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().parent(),(action == 'addCD' ? 'DVD' : 'HardDisk'));
+ }
+ );
+
+
+
+$('#vboxSettingsStorageTree').on('itemselect',function(e,el) {scToolbar.update(el); });
+
+
+/* Medium attachment context menu */
+var vboxSettingsMAMenu = new vboxMenu({'name':'vboxSettingsMAMenuL',
+ 'menuItems': [vboxSettingsStorageButtons[1]],
+ 'language_context': 'UIMachineSettingsStorage'});
+
+/*
+ * Medium menu buttons
+ */
+var mAttachToolbarHD = new vboxButtonMediaMenu('HardDisk',vboxSettingsControllerAttach);
+mAttachToolbarHD.renderTo('vboxSettingsAddAttachmentsMenuHDDiv');
+
+var mAttachToolbarCD = new vboxButtonMediaMenu('DVD',vboxSettingsControllerAttach);
+mAttachToolbarCD.renderTo('vboxSettingsAddAttachmentsMenuCDDiv');
+
+var mAttachToolbarFD = new vboxButtonMediaMenu('Floppy',vboxSettingsControllerAttach);
+mAttachToolbarFD.renderTo('vboxSettingsAddAttachmentsMenuFDDiv');
+
+/*
+ * Controller actions and menus for each bus type
+ */
+var vboxStorageBusTypes = vboxStorage.getBusTypes();
+var vboxStorageAttachmentMenus = new Array();
+for(var i = 0; i < vboxStorageBusTypes.length; i++) {
+ var btype = vboxStorageBusTypes[i];
+ var menuItems = [];
+ for(var a = 0; a < vboxStorage[btype].driveTypes.length; a++) {
+ switch(vboxStorage[btype].driveTypes[a]) {
+ case 'dvd':
+ b = {
+ 'name' : btype+'addcd',
+ 'label' : 'Add Optical Drive',
+ 'icon' : 'cd_add',
+ 'click' : function () {
+ vboxSettingsStorageAddMedium($('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().parent(),'DVD');
+ }
+ };
+ break;
+ case 'disk':
+ b = {
+ 'name' : btype+'adddrive',
+ 'label' : 'Add Hard Disk',
+ 'icon' : 'hd_add',
+ 'click' : function (item) {
+ vboxSettingsStorageAddMedium($('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().parent());
+ }
+ };
+ break;
+ case 'floppy':
+ b = {
+ 'name' : btype + 'addfloppy',
+ 'label':trans('Add Floppy Drive','UIMachineSettingsStorage'),
+ 'icon' : 'fd_add',
+ 'click' : function (item) {
+ vboxSettingsStorageAddMedium($('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().parent(),'Floppy'); }
+ };
+ break;
+ }
+ b['enabled'] = function(a) {
+ return ($('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().parent().find('li').length < (vboxStorage[a].maxPortCount * vboxStorage[a].maxDevicesPerPortCount));
+ };
+ menuItems[menuItems.length] = b;
+ }
+
+ // Add seperator and "remove controller"
+ menuItems[menuItems.length] = $.extend(true, {}, vboxSettingsStorageButtons[3]); // "Remove"
+ menuItems[(menuItems.length-1)].separator = true;
+ menuItems[(menuItems.length-1)].enabled = null; // always enabled
+
+ vboxStorageAttachmentMenus[btype] = new vboxMenu({name: 'vboxSettingsController'+btype+'AttachmentsMenu',
+ language_context: 'UIMachineSettingsStorage',
+ 'menuItems': menuItems});
+
+}
+
+$('#vboxSettingsStorageTree').on('itemselect',function(e,item){
+ for(var i = 0; i < vboxStorageBusTypes.length; i++)
+ vboxStorageAttachmentMenus[vboxStorageBusTypes[i]].update(vboxStorageBusTypes[i]);
+});
+/*
+ *
+ * Form helper functions that listen for form change events
+ *
+ *
+ */
+
+/*
+ * Changing the slot changes the object
+ */
+document.forms['frmVboxSettings'].vboxSettingsControllerSlot.onchange = function(){
+
+ // change port / device
+ var pd = this.value.split('-');
+ var attachment = $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first();
+ $(attachment).data('attachment').port = pd[0];
+ $(attachment).data('attachment').device = pd[1];
+
+};
+
+
+
+/*
+ *
+ * Controller form elements
+ *
+ */
+
+/* onChange of controller type */
+$(document.forms['frmVboxSettings'].vboxSettingsStorageControllerType).change(function(){
+ $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().data('controller').controllerType = $(this).val();
+});
+
+/* change storage controller label on keydown in text box */
+$(document.forms['frmVboxSettings'].vboxSettingsStorageItemName).keyup(function(){
+ $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().find('span.vboxSettingsControllerTitle').first().text(this.value);
+});
+
+/* Set storage controller name on blur of textbox */
+$(document.forms['frmVboxSettings'].vboxSettingsStorageItemName).on('blur',function(e){
+
+ var bus = $('#vboxSettingsStorageTree').find('.vboxListItemSelected').first();
+
+ if(!$(bus).data('controller')) return;
+
+ var newName = $(this).val();
+
+ // no change?
+ if(newName == $(bus).data('controller').name) return true;
+
+ if(jQuery.trim($(this).val().toString()).length < 1) {
+ $(document.forms['frmVboxSettings'].vboxSettingsStorageItemName).val($(bus).data('controller').name);
+
+ } else {
+
+ $('#vboxSettingsStorageTree').find('table.vboxSettingsController').each(function(idx,elm) {
+ if($(elm).data('controller').name == newName) {
+ $(document.forms['frmVboxSettings'].vboxSettingsStorageItemName).val($(bus).data('controller').name);
+ conflictFound = true;
+ return false;
+ }
+ });
+ }
+
+ $(bus).data('controller').name = $(document.forms['frmVboxSettings'].vboxSettingsStorageItemName).val();
+ $(bus).find('span.vboxSettingsControllerTitle').first().text($(bus).data('controller').name);
+
+}).keyup(function(){
+ $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().find('span.vboxSettingsControllerTitle').text(this.value);
+});
+
+/* Change host cache value onClick of checkbox */
+$(document.forms['frmVboxSettings'].vboxSettingsStorageHostCache).click(function(){
+ $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().data('controller').useHostIOCache = this.checked;
+});
+
+
+
+
+/*
+ * Update menu items on select and display
+ */
+$('#vboxSettingsStorageTree').on('itemselect',function(e,item){
+
+ $('#vboxSettingsAddAttachmentsMenuCDDiv').hide();
+ $('#vboxSettingsAddAttachmentsMenuHDDiv').hide();
+ $('#vboxSettingsAddAttachmentsMenuFDDiv').hide();
+
+ // Null selection hides everything
+ if(!item) {
+ $('#vboxSettingsController').css('display','none');
+ $('#vboxSettingsMediaInfo').css('display','none');
+ $('#vboxSettingsStorageAttachment').css('display','none');
+ // Update label widths
+ vboxStorageResizeTreeItemLabels();
+ return;
+ }
+
+ if(!$(item).data('attachment')) {
+ // Update label widths
+ vboxStorageResizeTreeItemLabels();
+ return;
+ }
+
+ switch($(item).data('attachment').type) {
+ case 'HardDisk':
+ $('#vboxSettingsAddAttachmentsMenuHDDiv').show();
+ break;
+ case 'Floppy':
+ // Update media menu...
+ mAttachToolbarFD.menuUpdateMedia($(item).data('attachment').medium);
+ $('#vboxSettingsAddAttachmentsMenuFDDiv').show();
+ break;
+ default:
+ // Update media menu...
+ mAttachToolbarCD.menuUpdateMedia($(item).data('attachment').medium);
+ $('#vboxSettingsAddAttachmentsMenuCDDiv').show();
+ }
+
+ // Update label widths
+ vboxStorageResizeTreeItemLabels();
+
+
+
+});
+
+
+
+
+/*
+ *
+ * OnSave and OnShow for dialog
+ *
+ *
+ */
+
+/* Change settings onSave() */
+$('#vboxSettingsDialog').on('save',function(){
+
+ $(document.forms['frmVboxSettings'].vboxSettingsStorageItemName).trigger('blur');
+
+ $('#vboxSettingsDialog').data('vboxMachineData').storageControllers = new Array();
+
+ var storageList = $('#vboxSettingsStorageTree').children('ul').first();
+
+ $(storageList).find('table.vboxSettingsController').each(function(i,con){
+
+
+ var attachments = new Array();
+
+ $(con).parent().find('table.vboxSettingsStorageAttachment').each(function(i,elm) {
+
+ var attch = $(elm).data('attachment');
+
+ if(attch.medium && attch.medium.id) {
+ var med = vboxMedia.getMediumById(attch.medium.id);
+ attch.medium = {'id':med.id,'hostDrive':med.hostDrive,'location':med.location};
+ }
+
+ attachments[attachments.length] = attch;
+
+ });
+
+ var curCon = $('#vboxSettingsDialog').data('vboxMachineData').storageControllers.length;
+
+ $('#vboxSettingsDialog').data('vboxMachineData').storageControllers[curCon] = $(this).data('controller');
+ $('#vboxSettingsDialog').data('vboxMachineData').storageControllers[curCon]['mediumAttachments'] = attachments;
+
+ });
+
+
+});
+
+/* WHen data is loaded */
+$('#vboxSettingsDialog').on('dataLoaded',function(){
+
+ /*
+ *
+ * Fill form and storage list items
+ *
+ */
+
+ /* Fill List by calling helper functions for each controller */
+ var storageList = $('#vboxSettingsStorageTree').children('ul').first();
+ $(storageList).children().remove();
+
+ var cons = $('#vboxSettingsDialog').data('vboxMachineData').storageControllers;
+ for(var a = 0; a < cons.length; a++) {
+
+ var attch = cons[a].mediumAttachments;
+
+ var conElm = vboxSettingsAddController(cons[a], $(storageList));
+
+ for(var b = 0; b < cons[a].mediumAttachments.length; b++) {
+ vboxSettingsStorageBusses.addAttached(cons[a].mediumAttachments[b].medium);
+ vboxSettingsAddAttachment(cons[a].mediumAttachments[b], conElm);
+ }
+ }
+
+ //Select first item in storage tree list
+ $('#vboxSettingsStorageTree').find('table.vboxListItem').first().trigger('click').html();
+
+ /* Disable non-editable items when VM is running */
+ var p = $('#vboxSettingsStorageTableWrapper');
+ if(!$('#vboxSettingsDialog').data('vboxFullEdit')) {
+
+ scToolbar.disable();
+ $('#vboxSettingsStorageTree').disableContextMenu()
+
+ p.find('span:not(.vboxRunningEnabled)').addClass('disabled');
+ p.find('input:not(.vboxRunningEnabled),select,textarea').prop('disabled',true);
+
+ // Storage tree toolbars
+ $('#vboxSettingsStorageTree').find('.vboxControllerAttachmentButton').trigger('disable');
+
+ // Hard Disk Media menu button
+ $('#vboxSettingsAddAttachmentsMenuHDDiv').trigger('disable');
+
+ } else {
+
+ $('#vboxSettingsStorageTree').enableContextMenu();
+
+ p.find('span:not(.vboxRunningEnabled)').removeClass('disabled');
+ p.find('input:not(.vboxRunningEnabled),select,textarea').prop('disabled',false);
+
+ // Storage tree toolbars
+ $('#vboxSettingsStorageTree').find('.vboxControllerAttachmentButton').trigger('enable');
+
+ // Hard Disk Media menu button
+ $('#vboxSettingsAddAttachmentsMenuHDDiv').trigger('enable');
+
+ // initial toolbar update
+ scToolbar.enable();
+ scToolbar.update();
+
+ }
+
+});
+
+
+/* Respond to UP / Down arrow events */
+$('#vboxSettingsStorageTree').click(function(){$(this).focus();}).keydown(function(e){
+
+ var keynum = 0;
+
+ if(e.keyCode)
+ keynum = e.keyCode;
+ else if(e.which)
+ keynum = e.which;
+
+ switch(keynum) {
+
+ // up
+ case 38:
+
+ var cur = $(this).find('table.vboxListItemSelected').parent();
+
+ // Try previous med attachment
+ if($(cur).prev('li.vboxSettingsMediumAttachment').children('table.vboxListItem').trigger('click')[0]) {
+ return;
+ }
+
+ // If we're a medium, click our parent controller
+ if($(cur).hasClass('vboxSettingsMediumAttachment')) {
+ $(cur).parent().parent('li.vboxSettingsController').children('table.vboxListItem').trigger('click');
+ return;
+ }
+
+ // Must be a controller, try previous controller's last medium attachment
+ if($(cur).prev().children('ul:not([class~="vboxHidden"])').find('table.vboxListItem:last').trigger('click')[0])
+ return;
+
+ // No med attachment, try previous controller
+ $(cur).prev('li.vboxSettingsController').children('table.vboxListItem').trigger('click');
+ break;
+
+ // right / expand
+ case 39:
+ var tbl = $(this).find('table.vboxListItemSelected');
+ var con = $(tbl).data('controller');
+ if(!con) return;
+ $(tbl).find('td.vboxSettingsController' + con.bus).click();
+ break;
+
+ // left / contract
+ case 37:
+ var tbl = $(this).find('table.vboxListItemSelected');
+ var con = $(tbl).data('controller');
+ if(!con) return;
+ $(tbl).find('td.vboxSettingsController' + con.bus + 'Expanded').click();
+ break;
+
+ // down
+ case 40:
+
+ var cur = $(this).find('table.vboxListItemSelected').parent();
+
+ // Try next med attachment
+ if($(cur).next('li.vboxSettingsMediumAttachment').children('table.vboxListItem').trigger('click')[0]) {
+ return;
+ }
+
+ // Select first medium of current controller?
+ if($(cur).children('ul:not([class~="vboxHidden"])').find('table.vboxListItem:first').trigger('click')[0])
+ return;
+
+ // Try next controller
+ $(cur).closest('li.vboxSettingsController').next('li.vboxSettingsController').children('table.vboxListItem').trigger('click');
+
+ break;
+ }
+
+}).css('outline','none');;
+
+/*
+ *
+ * Change media attachment helper function
+ *
+ */
+function vboxSettingsControllerAttach(m) {
+
+ var tbl = $('#vboxSettingsStorageTree').find('table.vboxListItemSelected');
+ $(tbl).data('attachment').medium = m;
+ $(tbl).parent().tipped({'source':vboxSettingsMediumTip(m),'position':'mouse','delay':1000});
+
+ // Re-select attachment to update display info
+ vboxSettingsSelectAttachment(tbl);
+
+
+}
+
+
+/*
+ *
+ * Called when controller is selected helper function
+ *
+ */
+function vboxSettingsSelectController(tbl) {
+
+ // Null selection?
+ if(!tbl) {
+ $('#vboxSettingsController').css('display','none');
+ $('#vboxSettingsMediaInfo').css('display','none');
+ $('#vboxSettingsStorageAttachment').css('display','none');
+ return;
+ }
+
+ $(document.forms['frmVboxSettings'].vboxSettingsStorageItemName).trigger('blur');
+
+ /* set classes for selected / unselected */
+ $('#vboxSettingsStorageTree').find('table[class]').removeClass('vboxListItemSelected').addClass('vboxListItem');
+ $(tbl).removeClass('vboxListItem').addClass('vboxListItemSelected');
+
+ /* set name text box value */
+ document.forms['frmVboxSettings'].vboxSettingsStorageItemName.value = $(tbl).data('controller').name;
+
+ /* Set host cache checkbox */
+ document.forms['frmVboxSettings'].vboxSettingsStorageHostCache.checked = $(tbl).data('controller').useHostIOCache ? 'checked' : '';
+
+ var busType = $(tbl).data('controller').bus;
+
+ /* controller type */
+ document.forms['frmVboxSettings'].vboxSettingsStorageControllerType.options.length = 0;
+ $(document.forms['frmVboxSettings'].vboxSettingsStorageControllerType).children().remove();
+ for(var i = 0; i < vboxStorage[busType].types.length; i++) {
+ document.forms['frmVboxSettings'].vboxSettingsStorageControllerType.options[i] = new Option(trans(vboxStorageControllerType(vboxStorage[busType].types[i]),'VBoxGlobal'),vboxStorage[busType].types[i]);
+ }
+
+ /* Set default type */
+ document.forms['frmVboxSettings'].vboxSettingsStorageControllerType.value = $(tbl).data('controller').controllerType;
+
+ $('#vboxSettingsController').css('display','block');
+ $('#vboxSettingsStorageAttachment').css('display','none');
+ $('#vboxSettingsMediaInfo').css('display','none');
+ $('#vboxSettingsHDInfo').css('display','none');
+
+ // Show SATA port count
+ if(busType == 'SATA') {
+ $(document.forms['frmVboxSettings'].vboxSettingsControllerPortCount).val($(tbl).data('controller').portCount);
+ $('#vboxSettingsControllerPortCountRow').css('display','');
+ } else {
+ $('#vboxSettingsControllerPortCountRow').css('display','none');
+ }
+
+ /* Enable / disable buttons */
+ if($(tbl).parent().find('ul').children('li').length < ($(tbl).data('controller').maxPortCount * $(tbl).data('controller').maxDevicesPerPortCount)) {
+
+ if($('#vboxSettingsDialog').data('vboxFullEdit')) {
+ $(tbl).find('.vboxToolbarSmall').trigger('enable', [true]);
+ }
+
+ } else {
+ $(tbl).find('.vboxToolbarSmall').trigger('disable');
+ }
+
+ /* Trigger Event */
+ $('#vboxSettingsStorageTree').trigger('itemselect',tbl);
+
+}
+
+
+/*
+ * Generate tooltip for medium helper function
+ */
+function vboxSettingsMediumTip(m) {
+
+ if(!m || !m.id) return trans('Empty','VBoxGlobal');
+ if(m.hostDrive) return vboxMedia.getName(m);
+
+ // DVD / Floppy images
+ if(m.deviceType != 'HardDisk') {
+ return '<b>'+m.location+'</b><p>'+trans('Attached to:','UIMachineSettingsStorage')+' '+vboxMedia.attachedTo(m)+'</p>';
+ }
+
+ var mbase = m;
+ if(m.base != m.id) {
+ mbase = vboxMedia.getMediumById(m.base);
+ }
+ var tip = '<b>'+mbase.location+'</b><p>'+trans('Type (Format):','UIMachineSettingsStorage')+' '+vboxMedia.getType(mbase)+' ('+mbase.format+')</p><p>'+trans('Attached to:','UIMachineSettingsStorage')+' '+vboxMedia.attachedTo(mbase)+'</p>';
+
+ // Is this a medium that is attached indirectly
+ if(vboxSettingsStorageBusses.isAttachedIndirect(m) && m.base != m.id) {
+ var p = vboxSettingsStorageBusses.isAttached(m);
+ tip += '<hr />'+trans('This base hard disk is indirectly attached using the following differencing hard disk:','VBoxGlobal')+'<br /><b>'+p.location+'</b></p><p>'+trans('Type (Format):','UIMachineSettingsStorage')+' '+vboxMedia.getType(p) + ' (' + p.format + ')'+'</p><p>'+trans('Attached to:','UIMachineSettingsStorage')+' '+vboxMedia.attachedTo(p)+'</p>';
+ } else if(m.readOnly) {
+ tip += '<hr />'+trans('Attaching this hard disk will be performed indirectly using a newly created differencing hard disk.','VBoxGlobal');
+ }
+
+ return tip;
+
+}
+
+/*
+ *
+ * Add disk medium to bus helper function
+ *
+ */
+function vboxSettingsStorageAddMedium(conElm, type) {
+
+ // get controller name
+ var controller = $(conElm).find('span.vboxSettingsControllerTitle').first().text();
+
+ if(!type) type = 'HardDisk';
+
+ // Find first target slot (vboxSettingsStorageBusses created above)
+ var slots = vboxSettingsStorageBusses.availableSlots(conElm);
+ var slot = null;
+ for(var i in slots) {
+ if(typeof i == 'function') continue;
+ slot = i;
+ break;
+ }
+ if(slot === null) return;
+ slot = slot.split('-');
+ var port = slot[0];
+ var device = slot[1];
+
+ // Add new attachment dialog
+ ////////////////////////////
+ var buttons = {};
+
+ var msg = '';
+
+ // Hard Disk buttons
+ if (type == 'HardDisk') {
+
+ buttons[trans('Create new disk','UIMessageCenter')] = function() {
+
+ $.when(new vboxWizardNewHDDialog({'path':vboxDirname($('#vboxSettingsDialog').data('vboxMachineData').settingsFilePath)+$('#vboxPane').data('vboxConfig').DSEP,vmName:$('#vboxSettingsDialog').data('vboxMachineData').name}).run())
+ .done(function(id){
+ if(!id) return;
+ mAttachToolbarHD.mediaMenu.menuUpdateRecent();
+ vboxSettingsAddAttachment({'controller':controller,'port':port,'device':device,'type':type,'medium':vboxMedia.getMediumById(id),'ignoreFlush':1}, conElm);
+ $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().click();
+ });
+
+ $(this).remove();
+
+ };
+ buttons[trans('Choose existing disk','UIMessageCenter')] = function() {
+ var dlg = $(this);
+ vboxMedia.actions.choose(null,'HardDisk',function(med){
+ if(med) {
+ mAttachToolbarHD.mediaMenu.menuUpdateRecent();
+ vboxSettingsAddAttachment({'controller':controller,'port':port,'device':device,'type':type,'medium':med,'ignoreFlush':1}, conElm);
+ $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().click();
+ }
+ $(dlg).remove();
+ });
+ };
+
+ msg = trans('<p>You are about to add a virtual hard disk to controller <b>%1</b>.</p><p>Would you like to create a new, empty file to hold the disk contents or select an existing one?</p>','UIMessageCenter').replace('%1',controller);
+
+ // Floppy buttons
+ } else if(type == 'Floppy') {
+
+ buttons[trans('Choose disk','UIMessageCenter')] = function() {
+ var dlg = $(this);
+ vboxMedia.actions.choose(null,'Floppy',function(med){
+ if(med) {
+ mAttachToolbarFD.mediaMenu.menuUpdateRecent();
+ vboxSettingsAddAttachment({'controller':controller,'port':port,'device':device,'type':type,'medium':med}, conElm);
+ $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().click();
+ }
+ $(dlg).remove();
+ });
+
+ };
+
+ buttons[trans('Leave empty','UIMessageCenter')] = function() {
+ vboxSettingsAddAttachment({'controller':controller,'port':port,'device':device,'type':type,'medium':null}, conElm);
+ $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().click();
+ $(this).remove();
+ };
+
+ msg = trans('<p>You are about to add a new floppy drive to controller <b>%1</b>.</p><p>Would you like to choose a virtual floppy disk to put in the drive or to leave it empty for now?</p>','UIMessageCenter').replace('%1',controller);
+
+ // CD/DVD buttons
+ } else {
+
+ buttons[trans('Choose disk','UIMessageCenter')] = function() {
+ var dlg = $(this);
+ vboxMedia.actions.choose(null,'DVD',function(med){
+ if(med) {
+ mAttachToolbarCD.mediaMenu.menuUpdateRecent();
+ vboxSettingsAddAttachment({'controller':controller,'port':port,'device':device,'type':type,'medium':med}, conElm);
+ $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().click();
+ }
+ $(dlg).remove();
+ });
+
+ };
+
+ buttons[trans('Leave empty','UIMessageCenter')] = function() {
+ vboxSettingsAddAttachment({'controller':controller,'port':port,'device':device,'type':type,'medium':null}, conElm);
+ $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().click();
+ $(this).remove();
+ };
+
+ msg = trans('<p>You are about to add a new CD/DVD drive to controller <b>%1</b>.</p><p>Would you like to choose a virtual CD/DVD disk to put in the drive or to leave it empty for now?</p>','UIMessageCenter').replace('%1',controller);
+
+ }
+
+ buttons[trans('Cancel','QIMessageBox')] = function() {
+ $(this).remove();
+ };
+ $('<div />').attr({'id':'vboxSettingsStorageUnavailable','style':'display: none'}).html(
+ '<div><img src="images/50px-Question_icon.svg.png" style="float: left; padding: 10px; " />'+msg+'</div>'
+ ).dialog({'closeOnEscape':false,'width':600,'height':200,'buttons':buttons,'modal':true,'autoOpen':true,'dialogClass':'vboxDialogContent','title':'<img src="images/vbox/OSE/about_16px.png" class="vboxDialogTitleIcon" /> phpVirtualBox'});
+
+
+}
+
+/*
+ *
+ * Add controller to list helper function
+ *
+ */
+
+function vboxSettingsAddController(con,list) {
+
+ // Elect name if none exists
+ if(!con.name) {
+ var count = $(list).children('li.vboxSettingsController'+con.bus).length + 1;
+ var name = trans(con.bus,'UIMachineSettingsStorage');
+ if(count == 1) {
+ con.name = name;
+ } else {
+
+ var electedName = name + ' ' + count;
+ var conflictFound = false;
+ do {
+ conflictFound = false;
+ $(list).children('li.vboxSettingsController'+con.bus).each(function(idx,elm) {
+ if($(elm).children('table').first().data('controller').name == electedName) {
+ conflictFound = true;
+ electedName = name + ' ' + (++count);
+ return false;
+ }
+ });
+ con.name = electedName;
+
+ } while(conflictFound);
+ }
+
+ }
+ var li = $('<li />').attr({'title':con.name,'class':'vboxSettingsController vboxSettingsController' + con.bus});
+
+ var tbl = $('<table />').attr({'class':'vboxListItem vboxSettingsController'}).on('click',function(){
+ vboxSettingsSelectController(this);
+ });
+
+ // filter out any dummy medium attachments
+ var mas = new Array();
+ for(var i = 0; i < con.mediumAttachments.length; i++) {
+ if(con.mediumAttachments[i].controller)
+ mas[mas.length] = con.mediumAttachments[i];
+ }
+ con.mediumAttachments = mas;
+
+ // Assign data
+ $(tbl).data('controller',con);
+
+ var tr = $('<tr />');
+
+ var iconName = vboxStorage.getBusIconName(con.bus);
+ $('<td />').attr({'class':'vboxSettingsStorageTypeIcon vboxSettingsController' + con.bus + 'Expanded'})
+ .css({
+ 'background-image':'url(images/vbox/'+iconName+'_collapse_16px.png)'
+ }).html('<div style="width:22px" />').click(function(){
+
+
+ if(!$(this).data('toggleClicked')) {
+
+ $(this).data('toggleClicked', true);
+
+ var n = $(this).closest('li');
+ $(n).children('ul').addClass('vboxHidden').css('display','none');
+ $(this).removeClass('vboxSettingsController'+con.bus+'Expanded').addClass('vboxSettingsController'+con.bus)
+ .css({'background-image':'url(images/vbox/'+iconName+'_expand_16px.png)'});
+
+ } else {
+
+ $(this).data('toggleClicked', false);
+ var n = $(this).closest('li');
+ $(n).children('ul').removeClass('vboxHidden').css('display','');
+ $(this).removeClass('vboxSettingsController'+con.bus).addClass('vboxSettingsController'+con.bus+'Expanded')
+ .css({'background-image':'url(images/vbox/'+iconName+'_collapse_16px.png)'})
+
+ }
+
+ return false;
+
+ }).appendTo(tr);
+
+ // Controller name
+ $(tr).append($('<td />').css({'width':'100%'}).html('<div class="vboxFitToContainer">'+trans('Controller: %1','UIMachineSettingsStorage').replace('%1','<span class="vboxSettingsControllerTitle vboxRunningEnabled">'+$('<div/>').text(con.name).html())+"</span>"+"</div>"));
+
+ // Buttons
+ $(tr).append($('<td />').attr({'style':'width: 22px;','class':'vboxControllerAttachmentButton'}));
+
+ $(tbl).append(tr).appendTo(li);
+
+
+ /* Attachments list holder */
+ $(li).append($('<ul />').attr({'class':'vboxSettingsControllerAttachments'})).dblclick(function(e){
+ $(this).children('table.vboxSettingsController').find('td.vboxSettingsStorageTypeIcon').trigger('click',e);
+ }).disableSelection().appendTo(list);
+
+ /* Generate Toolbars */
+ var dtypes = vboxStorage[con.bus].driveTypes;
+ for(var i = 0; i < dtypes.length; i++) {
+ var b = null;
+ if(dtypes[i] == 'dvd') {
+ b = {
+ 'name' : con.bus+'addcd',
+ 'label' : trans('Add Optical Drive','UIMachineSettingsStorage'),
+ 'icon' : 'cd_add',
+ 'click' : function () { vboxSettingsStorageAddMedium(li,'DVD'); }
+ };
+ } else if(dtypes[i] == 'disk') {
+ b = {
+ 'name' : con.bus+'adddrive',
+ 'label' : trans('Add Hard Disk','UIMachineSettingsStorage'),
+ 'icon' : 'hd_add',
+ 'click' : function (item) { vboxSettingsStorageAddMedium(li); }
+ };
+
+ } else if(dtypes[i] == 'floppy') {
+ b = {'label':trans('Add Floppy Drive','UIMachineSettingsStorage'),
+ 'icon' : 'fd_add',
+ 'click' : function (item) { vboxSettingsStorageAddMedium(li,'Floppy'); }
+ };
+ }
+ b['enabled'] = function() {
+
+ return (li.find('li').length < (vboxStorage[con.bus].maxPortCount * vboxStorage[con.bus].maxDevicesPerPortCount));
+ };
+
+ var tb = new vboxToolbarSmall({buttons: [b],
+ buttonStyle: 'margin:0px;padding:0px;border:0px;background-repeat:no-repeat;background-position:0px 0px;',
+ noHover: true,
+ renderTo: li.find('td.vboxControllerAttachmentButton')});
+ tb.disable();
+
+ }
+
+ // Only if machine is not running
+ if($('#vboxSettingsDialog').data('vboxFullEdit')) {
+
+ $(li).contextMenu({menu: vboxStorageAttachmentMenus[con.bus].menuId(),
+ menusetup: function() {$(li).children('table').first().trigger('click')}},
+ vboxStorageAttachmentMenus[con.bus].menuClickCallback
+ );
+
+ }
+
+ // Return controller element list item
+ return li;
+
+}
+
+
+
+
+
+/*
+ *
+ * Add a medium attachment to a controller helper function
+ *
+ */
+function vboxSettingsAddAttachment(d,conElm) {
+
+
+ var con = (conElm ? conElm : $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().parent());
+
+ // Save bus
+ d.bus = $(con).find('table.vboxSettingsController').data('controller').bus;
+
+ // remove any 'last' classes
+ $(con).children('ul').children().removeClass('last');
+
+ var li = $('<li />').attr({'class':'last vboxSettingsMediumAttachment'});
+
+
+ var tbl = $('<table />').attr({'class':'vboxListItem vboxSettingsStorageAttachment'})
+ .data({'attachment':d}).on('click',function(){
+ vboxSettingsSelectAttachment(this);
+ });
+
+ var m = vboxMedia.getMediumById(((d.medium && d.medium.id) ? d.medium.id : null));
+
+ var tr = $('<tr />');
+
+ // Storage type icon
+ $(tr).append($('<td />').attr({'class':'vboxSettingsStorageTypeIcon vboxSettingsMediaType' + d.type,'style':'width:22px'}).html('<img src="images/vbox/blank.gif" style="width:22px" />'));
+
+ // Medium name
+ $(tr).append($('<td />').css({'width':'100%'}).append($('<div />').attr({'class':'vboxSettingsStorageMediumName vboxFitToContainer'}).html(vboxMedia.getName(vboxMedia.getMediumById((m && m.base ? m.base : (m && m.id ? m.id : null)))))));
+
+
+ $(tbl).append(tr).appendTo(li);
+
+ // Only if not running
+ if($('#vboxSettingsDialog').data('vboxFullEdit')) {
+
+ $(li).contextMenu({
+ menu: vboxSettingsMAMenu.menuId(),
+ menusetup : function(el) {
+ vboxSettingsSelectAttachment($(el).find('table.vboxSettingsStorageAttachment'));
+ }
+ },
+ function(action, el, pos) {
+ vboxSettingsStorageButtons[1].click();
+ }
+ );
+ }
+
+ $(li).tipped({'source':vboxSettingsMediumTip(m),'position':'mouse','delay':1000}).appendTo(con.children('ul'));
+
+
+}
+
+/*
+ *
+ * Called when selecting a medium attachment
+ *
+ */
+function vboxSettingsSelectAttachment(tbl) {
+
+ // Null selection?
+ if(!tbl) {
+ $('#vboxSettingsController').css('display','none');
+ $('#vboxSettingsMediaInfo').css('display','none');
+ $('#vboxSettingsStorageAttachment').css('display','none');
+ return;
+ }
+
+ $(document.forms['frmVboxSettings'].vboxSettingsStorageItemName).trigger('blur');
+
+ /* Display Changes */
+ if(!$(tbl).hasClass('vboxListItemSelected')) {
+ $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').removeClass('vboxListItemSelected').addClass('vboxListItem');
+ $(tbl).removeClass('vboxListItem').addClass('vboxListItemSelected');
+ }
+
+ $('#vboxSettingsController').css('display','none');
+ $('#vboxSettingsMediaInfo').css('display','block');
+ $('#vboxSettingsStorageAttachment').css('display','block');
+
+
+ var ma = $(tbl).data('attachment');
+
+ /* Get / Set Medium */
+ if(ma.medium && ma.medium.id)
+ ma.medium = vboxMedia.getMediumById(ma.medium.id);
+
+ (function(){
+
+ var sc = $(tbl).closest('li.vboxSettingsController').children('table').first().data('controller');
+
+ var tblSA = $('#vboxSettingsStorageAttachment').find('table').first();
+ $(tblSA).find('tr.vboxSettingsControllerDeviceOptionRow').empty().remove();
+
+ switch(ma.type) {
+
+ case 'HardDisk':
+ label = 'Hard Disk:';
+ break;
+ case 'DVD':
+ label = 'CD/DVD Drive:';
+ break;
+ case 'Floppy':
+ label = 'Floppy Drive:';
+ break;
+ }
+ var maOptions = vboxStorage.getMAOptions(ma)
+ .concat(vboxStorage.getMAOptionsForSC(sc));
+ for(var i = 0; i < maOptions.length; i++) {
+
+ var opt = maOptions[i];
+
+ var cbox = $('<input />').attr('type','checkbox').prop('checked', ma[opt.attrib] ? true : false)
+ .on('click', {attrib: opt.attrib}, function(event){
+
+ var attachment = $(tbl).data('attachment');
+ attachment[event.data.attrib] = this.checked ? true : false;
+ $(tbl).data('attachment', attachment);
+
+ }).addClass('vboxCheckbox');
+
+ $('<tr />').addClass('vboxSettingsControllerDeviceOptionRow')
+ .append($('<th />'))
+ .append(
+ $('<td />')
+ .append($('<label />')
+ .append(cbox)
+ .append($('<span />').css({'margin-left':'4px'}).text(opt.label))
+ )
+ ).appendTo($(tblSA));
+
+
+ }
+ })();
+ $('#vboxSettingsControllerSlotLabel').html(trans(label,'UIMachineSettingsStorage'));
+
+
+ /* Show / Hide HD/Media Info */
+ $('#vboxSettingsImageInfo').css('display',(ma.type == 'HardDisk' ? 'none' : 'block'));
+ $('#vboxSettingsHDInfo').css('display',(ma.type == 'HardDisk' ? 'block' : 'none'));
+
+
+
+ /* Populate slot select box */
+ document.forms['frmVboxSettings'].vboxSettingsControllerSlot.options.length = 0;
+ $(document.forms['frmVboxSettings'].vboxSettingsControllerSlot).children().remove();
+ slots = vboxSettingsStorageBusses.availableSlots($(tbl).parent().parent().parent(), ma.port+'-'+ma.device);
+
+ for(var s in slots) {
+ var opt = new Option(slots[s], s);
+ document.forms['frmVboxSettings'].vboxSettingsControllerSlot.options[document.forms['frmVboxSettings'].vboxSettingsControllerSlot.options.length] = opt;
+ }
+ document.forms['frmVboxSettings'].vboxSettingsControllerSlot.value = ma.port+'-'+ma.device;
+
+ /* Trigger Event */
+ $('#vboxSettingsStorageTree').trigger('itemselect',tbl);
+
+ var m = ma.medium;
+ var name = vboxMedia.getName(m);
+
+ // Read-only medium selected
+ if(ma.medium && ma.medium.readOnly) {
+ $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().find('td').first().addClass('vboxMediumReadOnly');
+ } else {
+ $('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().find('td').first().removeClass('vboxMediumReadOnly');
+ }
+
+ // Show medium info
+ if(m && m.deviceType == 'HardDisk') {
+
+ var disp = vboxMedia.getMediumById(m.base);
+ name = vboxMedia.getName(disp);
+
+ var encSettings = vboxMedia.getEncryptionSettings(disp);
+
+ $('#vboxSettingsHDvsize').html(vboxMbytesConvert(disp.logicalSize));
+ $('#vboxSettingsHDasize').html(vboxBytesConvert(disp.size));
+ $('#vboxSettingsHDDetails').html(vboxMedia.getHardDiskVariant(disp));
+ $('#vboxSettingsHDlocation').html(disp.location);
+ $('#vboxSettingsHDtype').html(trans(disp.type,'VBoxGlobal') + ' (' + disp.format + ')');
+ $('#vboxSettingsHDattached').html(vboxMedia.attachedTo(disp));
+ $('#vboxSettingsHDEncrypted').html(encSettings && encSettings.id ? encSettings.id : '--');
+
+
+ } else {
+
+ $('#vboxSettingsImageType').html(m ? trans((m.hostDrive ? 'Host Drive' : 'Image'),'UIMachineSettingsStorage'): '--');
+ $('#vboxSettingsImageSize').html((m && !m.hostDrive ? vboxBytesConvert(m.size):'--'));
+ $('#vboxSettingsImageLocation').html((m && !m.hostDrive ? m.location:'--'));
+ $('#vboxSettingsImageAttached').html((m && !m.hostDrive ? vboxMedia.attachedTo(m) :'--'));
+
+ }
+
+ $(tbl).data('attachment').medium = m;
+ $(tbl).find('div.vboxSettingsStorageMediumName').first().html($('<div />').text(name).html());
+
+
+}
+
+
+/*
+ * Focus storage controller list when showing this pane
+ */
+$('#vboxSettingsStorageTableWrapper').on('show',function(){
+ $('#vboxSettingsStorageTree').focus();
+});
+
+/*
+ *
+ *
+ * Storage pane resize and draggable resize bar logic
+ *
+ *
+ */
+/*
+ * Resize storage pane
+ */
+function vboxSettingsStorageResize() {
+
+ // Hide storage tree
+ $('#vboxSettingsStorageTree').css({'display':'none'});
+
+ // Get and set size
+ $('#vboxStoragePaneLeft').css({'display':'none'});
+ $('#vboxStoragePaneRight').css({'display':'none'});
+
+ // Main table height
+ $('#vboxSettingsStorageTableWrapper').css({'display':'none'});
+ var h = $('#vboxSettingsStorageTableWrapper').css({'display':'none'}).parent().parent().innerHeight()-4;
+
+ // IE needs to account for bordering
+ if($.browser.msie) h-= 4;
+
+ // Set height
+ $('#vboxSettingsStorageTableWrapper').css({'display':''}).height(h);
+
+ // Pane width
+ var bothWidth = ($('#vboxStoragePaneLeft').parent().innerWidth() + $('#vboxStoragePaneRight').parent().innerWidth() - 24) / 2;
+ $('#vboxStoragePaneLeft').css({'width':bothWidth+'px','display':''}).parent().css({'width':'auto','padding':'6px'});
+ $('#vboxStoragePaneRight').css({'width':bothWidth+'px','display':''}).parent().css({'width':'auto','padding':'6px'});
+
+ // Unsnap.. sorry..
+ $('#vboxStorageResizeBar').data('vboxSnapped',0);
+
+ // Get inner height of storage tree parent - padding
+ var h = $('#vboxStoragePaneLeft').parent().innerHeight() - 24;
+ // subtract sibling heights
+ $('#vboxSettingsStorageTree').siblings().each(function(){
+ h -= $(this).outerHeight(true);
+ });
+
+ $('#vboxSettingsStorageTree').height(h).css({'display':''});
+
+ vboxStorageResizeTreeItemLabels();
+
+}
+
+/*
+ * Resize controller labels
+ */
+function vboxStorageResizeTreeItemLabels() {
+
+ $('#vboxSettingsStorageTree div.vboxFitToContainer').each(function(){
+ $(this).css({'display':'none'});
+ var w = $(this).parent().innerWidth() - 2;
+ $(this).css({'width':w+'px','display':''});
+ });
+
+
+};
+
+/*
+ * Set pane sizes and resize bar
+ */
+$('#vboxSettingsStorageTableWrapper').one('show',function(){
+
+
+ // Resize everything on dialog resize
+ $('#vboxSettingsDialog').on('dialogresizestop',function(){
+ vboxSettingsStorageResize();
+ });
+ $('#vboxSettingsStorageTableWrapper').on('show',function(){
+ vboxSettingsStorageResize();
+ });
+
+ // Hide children to get true size
+ $('#vboxStoragePaneLeft').children().css({'display':'none'});
+ $('#vboxStoragePaneRight').children().css({'display':'none'});
+
+ var h = $('#vboxSettingsStorageTableWrapper').parent().css({'padding':'0px','margin':'0px'}).parent().innerHeight();
+
+ // IE needs to account for bordering
+ if($.browser.msie) h-= 4;
+
+ $('#vboxSettingsStorageTableWrapper').height(h-4);
+
+ // Get and set size
+ var bothWidth = ($('#vboxStoragePaneLeft').parent().innerWidth() + $('#vboxStoragePaneRight').parent().innerWidth() - 24) / 2;
+ $('#vboxStoragePaneLeft').css({'width':bothWidth+'px','overflow':'hidden'}).parent().css({'width':'auto'});
+ $('#vboxStoragePaneRight').css({'width':bothWidth+'px','overflow':'hidden'}).parent().css({'width':'auto'});
+
+ // Show children again
+ $('#vboxStoragePaneLeft').children().css({'display':''});
+ $('#vboxStoragePaneRight').children().css({'display':''});
+
+ // Re-trigger list selection to show correct info
+ if(!$('#vboxSettingsStorageTree').find('table.vboxListItemSelected').first().click().hasClass('vboxListItemSelected'))
+ $('#vboxSettingsStorageTree').trigger('itemselect',null);
+
+ // Don't allow selection of text in storage tree. This looks funny when dragging the resize bar
+ $('#vboxSettingsStorageTree').disableSelection();
+
+ // Resize
+ vboxSettingsStorageResize();
+
+ // Draggable resize bar
+ $('#vboxStorageResizeBar').draggable({cursor:(jQuery.browser.opera ? 'e-resize' : 'col-resize'),axis:'x',zIndex:99,helper:function(){
+
+ return $('<span />'); // dummy element
+
+ },scroll:false,'start':function(e,ui){
+
+ $('#vboxStorageResizeBar').data('vboxX',e.pageX);
+
+ $('#vboxResizeOverlay').remove();
+ $('body').disableSelection().css({'cursor':(jQuery.browser.opera ? 'e-resize' : 'col-resize')});
+ $('#vboxSettingsDialog').append($('<div />').attr({'id':'vboxResizeOverlay','style':'width:99%;height:99%;border:0px;margin:0px;padding:0px;position:absolute;top:0px;left:0px;cursor:'+(jQuery.browser.opera ? 'e-resize' : 'col-resize')}));
+
+
+ },'drag':function(e){
+
+ var sStart = $('#vboxStorageResizeBar').data('vboxX');
+ var sStop = e.pageX;
+ var sWidth = Math.abs(sStop - sStart);
+ if(sWidth == 0) return;
+
+ var lWidth = parseInt($('#vboxStoragePaneLeft').css('width'));
+ var rWidth = parseInt($('#vboxStoragePaneRight').css('width'));
+
+ var snapped = $('#vboxStorageResizeBar').data('vboxSnapped');
+
+ // Left to right
+ if(sStop > sStart) {
+
+ // Check for snapping
+ if(snapped) {
+ if(snapped > sStop || (rWidth - sWidth < 150)) { return; }
+ else if(snapped && snapped <= sStop) {
+
+ // Unsnap left pane
+ $('#vboxStoragePaneRight').parent().css({'width':'auto'});
+ $('#vboxStoragePaneLeft').css({'display':''}).parent().css({'padding':'6px'});
+ $('#vboxStorageResizeBar').data('vboxSnapped',0);
+ lWidth = $('#vboxStorageResizeBar').data('vboxSnappedWidthL');
+ rWidth = $('#vboxStorageResizeBar').data('vboxSnappedWidthR');
+ sWidth = Math.abs(sStop - snapped);
+ }
+ }
+
+ if(rWidth - sWidth < 150) {
+
+ $('#vboxStoragePaneLeft').css({'width':'100%'}).parent().css({'width':'100%'});
+ $('#vboxStoragePaneRight').css({'display':'none','width':'10px'}).parent().css({'padding':'0px'});
+ $('#vboxStorageResizeBar').data('vboxSnapped',e.pageX);
+ $('#vboxStorageResizeBar').data('vboxSnappedWidthL', (lWidth + sWidth));
+ $('#vboxStorageResizeBar').data('vboxSnappedWidthR', (rWidth - sWidth));
+
+ } else {
+ $('#vboxStoragePaneLeft').css({'width':(lWidth + sWidth)+'px','display':''});
+ $('#vboxStoragePaneRight').css({'width':(rWidth - sWidth)+'px','display':''});
+ }
+
+
+ // Right to left
+ } else {
+
+ // Check for snapping
+ if(snapped) {
+ if(snapped < sStop || (lWidth - sWidth < 150)) { return; }
+ else if(snapped && snapped >= sStop) {
+
+ // Unsnap right pane
+ $('#vboxStoragePaneLeft').parent().css({'width':'auto'});
+ $('#vboxStoragePaneRight').css({'display':''}).parent().css({'width':'100%','padding':'6px'}); // 100% to fix webkit
+ $('#vboxStorageResizeBar').data('vboxSnapped',0);
+ lWidth = $('#vboxStorageResizeBar').data('vboxSnappedWidthL');
+ rWidth = $('#vboxStorageResizeBar').data('vboxSnappedWidthR');
+ sWidth = Math.abs(sStop-snapped);
+
+ }
+ }
+
+ if(lWidth - sWidth < 150) {
+
+ $('#vboxStoragePaneRight').css({'width':'100%'}).parent().css({'width':'100%'});
+ $('#vboxStoragePaneLeft').css({'display':'none','width':'10px'}).parent().css({'padding':'0px'});
+ $('#vboxStorageResizeBar').data('vboxSnapped',e.pageX);
+ $('#vboxStorageResizeBar').data('vboxSnappedWidthL', (lWidth - sWidth));
+ $('#vboxStorageResizeBar').data('vboxSnappedWidthR', (rWidth + sWidth));
+
+ } else {
+ $('#vboxStoragePaneLeft').css({'width':(lWidth - sWidth)+'px'});
+ $('#vboxStoragePaneRight').css({'width':(rWidth + sWidth)+'px'});
+ }
+ }
+
+ $('#vboxStorageResizeBar').data('vboxX',e.pageX);
+
+ // resize labels
+ vboxStorageResizeTreeItemLabels();
+
+
+ },'stop':function(e) {
+
+ // resize labels
+ vboxStorageResizeTreeItemLabels();
+
+ $('body').enableSelection().css({'cursor':'default'});
+ $('#vboxResizeOverlay').remove();
+ }}).css({'cursor':(jQuery.browser.opera ? 'e-resize' : 'col-resize'),'height':'98%'});
+
+
+});
+
</script> \ No newline at end of file