// Code for the Add pane /*------------------------------------------------------------------------- Purpose: Called by the containing document when the page is 'loaded'. */ function Add_Activate() { // We need some utility functions LoadScriptFile("idScriptUtil", "util.js"); if (false == g_bAddPageLoaded) { g_bIsOnDomain = g_docAll.idCtlAppsDso.OnDomain; /* Fake version g_bIsOnDomain = true; */ } // We need to first set the display style to indicate the active page // has changed. g_docAll.idTrHeadMargin_Add.style.display = 'block'; g_docAll.idTrHeadCDROM1_Add.style.display = 'block'; g_docAll.idTrHeadCDROM2_Add.style.display = 'block'; g_docAll.idTrHeadInternet1_Add.style.display = 'block'; g_docAll.idTrHeadInternet2_Add.style.display = 'block'; g_docAll.idTrHeadPub_Add.style.display = 'block'; g_docAll.idTrBody2_Add.style.display = 'block'; if (false == g_bAddPageLoaded) { // Check policy restrictions to show the right sections. Use the visibility // style to maintain text flow. if (Dso_IsRestricted("NoAddFromCDorFloppy")) { g_docAll.idTrHeadCDROM1_Add.style.visibility = 'hidden'; g_docAll.idTrHeadCDROM2_Add.style.visibility = 'hidden'; } if (Dso_IsRestricted("NoAddFromInternet")) { g_docAll.idTrHeadInternet1_Add.style.visibility = 'hidden'; g_docAll.idTrHeadInternet2_Add.style.visibility = 'hidden'; } // Is this machine on a domain at all? if (false == g_bIsOnDomain || Dso_IsRestricted("NoAddFromNetwork")) { // No; don't bother showing the published list g_docAll.idTrHeadPub_Add.style.visibility = 'hidden'; g_docAll.idTrBody2_Add.style.visibility = 'hidden'; g_bIsOnDomain = false; // override to persist restriction across panes } // Check the GPO policy for the default category selection. g_bSelectDefault = true; } if (false == g_bIsOnDomain) { // To maintain the Places Bar column, we turn on idTrBody1_Add in place // of idTrBody2_Add for this case. g_docAll.idTrBody1_Add.style.display = 'block'; } g_bReenumInstalledList = false; // Reset this each time we activate this pane // Is this an alpha machine? if (g_bIsAlpha) { // Yes; turn on the check box and set the 'force x86' property g_docAll.idTrFoot_Add.style.display = 'block'; g_docAll.idChkAddForcex86.attachEvent("onclick", new Function("idCtlAppsDso.Forcex86 = idChkAddForcex86.checked")); } // Is this being loaded for the first time? if (false == g_bAddPageLoaded) { // Yes; apply some one-time settings // Handle button clicks g_docAll.idBtnCDFloppy.onclick = _AddApp; g_docAll.idBtnInternet.onclick = _AddApp; if (g_bIsOnDomain) { _SetPubWaitingFeedback(); g_docAll.idSelCategory.onchange = _OnChangeCategories; // Bind our stub span element so the categories are enumerated g_docAll.idBindCategories.dataFld = 'displayname'; g_docAll.idBindCategories.dataSrc = '#idCtlAppsDso.Categories'; g_docAll.idSpnAddLaterSchedule.dataSrc = "#idCtlAppsDso.Add"; g_docAll.idAddListbox.dataSource = "idCtlAppsDso.Add"; /* Fake version g_docAll.idBindCategories.dataSrc = '#idCtlCategory'; g_docAll.idSpnAddLaterSchedule.dataSrc = "#idCtlAddApps"; g_docAll.idAddListbox.dataSource = "idCtlAddApps"; */ // Attach to the categories DSO so we know when to populate the dropdown Dso_GetCtl("Categories").attachEvent("ondatasetcomplete", Cat_OnDatasetComplete); Dso_GetCtl("Add").attachEvent("ondatasetcomplete", Add_OnDatasetComplete); // Set the initial focus to the listbox, and refresh the listbox // so it gets its data. // g_docAll.idAddListbox.Refresh(); } g_bAddPageLoaded = true; } Add_SetFocus(); } /*------------------------------------------------------------------------- Purpose: Set the initial focus */ function Add_SetFocus() { g_docAll.idAddListbox.focus(); } /*------------------------------------------------------------------------- Purpose: Called by the containing document when the page is switched away. */ function Add_Deactivate() { g_docAll.idTrHeadMargin_Add.style.display = 'none'; g_docAll.idTrHeadCDROM1_Add.style.display = 'none'; g_docAll.idTrHeadCDROM2_Add.style.display = 'none'; g_docAll.idTrHeadInternet1_Add.style.display = 'none'; g_docAll.idTrHeadInternet2_Add.style.display = 'none'; g_docAll.idTrHeadPub_Add.style.display = 'none'; g_docAll.idTrFoot_Add.style.display = 'none'; g_docAll.idTrBody1_Add.style.display = 'none'; g_docAll.idTrBody2_Add.style.display = 'none'; // Reenumerate the list of installed apps (since we might be // navigating to that page)? if (g_bReenumInstalledList) { // Yes; force a refresh of the installed apps Dso_Refresh("Remove"); } } /*------------------------------------------------------------------------- Purpose: Handler for the 'onSetFocus' listbox event. */ function Add_OnSetFocus() { var evt = window.event; ApplyExtraStyles(evt.srcChild, evt.bFocus); } /*------------------------------------------------------------------------- Purpose: Handler for the 'onCustomDraw' listbox event. Fixup the element objects as appropriate. */ function Add_OnCustomDraw() { var evt = window.event; var tblElem = evt.srcChild; // the contents of the row is another table if (evt.bSelected) { // Item is selected var dwCapability = evt.Recordset("capability"); if ('prepaint' == evt.drawStage) { // Prepaint stuff // Show the right set of buttons // Does this support 'add later'? if (dwCapability & APPCAP_ADDLATER) { // Yes evt.srcElement.EnableTemplate('idTrMultiBtns', true); evt.srcElement.EnableTemplate('idTrSingleBtns', false); } else { // No evt.srcElement.EnableTemplate('idTrMultiBtns', false); evt.srcElement.EnableTemplate('idTrSingleBtns', true); } } else { // Postpaint stuff // Attach events and stuff now that the elements have been added // to the document tree. // Does this support 'add later'? if (dwCapability & APPCAP_ADDLATER) { // Yes tblElem.all("idBtnAdd").onclick = _AddApp; tblElem.all("idBtnAddLater").onclick = _AddLater; } else { // No tblElem.all("idBtnAdd").onclick = _AddApp; } // Does this app have a support URL? var szSupportUrl = evt.Recordset("supporturl"); if ("" != szSupportUrl) { // Yes; show the "more info" string var spnMoreInfo = tblElem.all("idSpnMoreInfo"); spnMoreInfo.all("idAMoreInfo").href = szSupportUrl; spnMoreInfo.style.display = 'block'; } ApplyExtraStyles(evt.srcChild, evt.bFocus); } } } /*------------------------------------------------------------------------- Purpose: Display the More Info dialog */ function _OpenMoreInfo() { var url = event.srcElement.parentElement.href; window.open(url, "", ""); // Don't let it navigate event.returnValue = false; } /*------------------------------------------------------------------------- Purpose: Filter the categories according to the selection list */ function _FilterCategories(optElem) { var szFilter; _SetPubWaitingFeedback(); if (optElem.value == "all") szFilter = ""; else szFilter = optElem.value; Dso_Filter("Add", szFilter); } /*------------------------------------------------------------------------- Purpose: Handle the onchange event for the categories drop down */ function _OnChangeCategories() { var elem = window.event.srcElement; var optElem = elem.options(elem.selectedIndex); _FilterCategories(optElem); } /*------------------------------------------------------------------------- Purpose: Add the app */ function _AddApp() { var rsCur = Dso_GetRecordset("Add"); switch(event.srcElement.id) { case "idBtnAdd": g_docAll.idCtlAppsDso.Exec("Add", "install", rsCur.AbsolutePosition); break; case "idBtnCDFloppy": g_docAll.idCtlAppsDso.Exec("Add", "generic install", 0); break; case "idBtnInternet": g_docAll.idCtlAppsDso.Exec("Add", "winupdate", 0); break; } /* Fake version switch(event.srcElement.id) { case "idBtnAdd": alert('Add ' + rsCur("displayname")); break; case "idBtnCDFloppy": alert('Add from CD or Floppy'); break; case "idBtnInternet": alert('Add from Windows Update'); break; } */ if ("idBtnAdd" == event.srcElement.id || "idBtnInternet" == event.srcElement.id) { // Now cause the 'Remove' page to re-enumerate since an app may have been // installed. Ideally we'd only do this when we know an app successfully // installed, but I'm lazy about trying to figure that out! g_bReenumInstalledList = true; } } /*------------------------------------------------------------------------- Purpose: Add the app later on a schedule */ function _AddLater() { var rsCur = Dso_GetRecordset("Add"); g_docAll.idCtlAppsDso.Exec("Add", "addlater", rsCur.AbsolutePosition); /* Fake version alert('Add ' + rsCur("displayname") + ' later'); */ // Don't let the 'A' elem navigate window.event.returnValue = false; window.event.cancelBubble = true; } /*------------------------------------------------------------------------- Purpose: Change the schedule of the scheduled app. */ function _Schedule() { var elemSrc = window.event.srcElement; if ("idASchedule" == elemSrc.id) { var rsCur = Dso_GetRecordset("Add"); g_docAll.idCtlAppsDso.Exec("Add", "addlater", rsCur.AbsolutePosition); /* Fake version alert('Change schedule for ' + rsCur("displayname")); */ } // Don't let the 'A' elem navigate window.event.returnValue = false; window.event.cancelBubble = true; } /*------------------------------------------------------------------------- Purpose: Reset the category list by removing all but the orginal "All" category */ function _ResetCategoryList() { var i; var optElem; var colOptions = g_docAll.idSelCategory.options; for (i = 0; i < colOptions.length;) { optElem = colOptions[i]; if (optElem.value != "all") // this does not need to be localized optElem.removeNode(); else i++; } } /*------------------------------------------------------------------------- Purpose: Initialize the category selection list */ function _InitCategoryList() { var rsCur = Dso_GetRecordset("Categories"); if (rsCur.RecordCount > 0) { var i; var szDefault; var optElemSel = null; // Determine what the default category should be according // to the GPO policy. szDefault = g_docAll.idCtlAppsDso.DefaultCategory; /* Fake version szDefault = "{C}"; */ // Is there a default category? if ("" == szDefault) { // No; select the "All" category szDefault = "all"; // This does not need to be localized } // Now add the items to the dropdown rsCur.MoveFirst(); for (i = 1; i <= rsCur.RecordCount; i++) { var optElem = document.createElement("option"); // Right now we use the displayname as the id optElem.value = rsCur("displayname"); /* Fake version optElem.value = rsCur("id"); */ optElem.text = rsCur("displayname"); // Do we select this item? if (g_bSelectDefault && optElem.value == szDefault) { optElem.selected = true; // Yes optElemSel = optElem; } g_docAll.idSelCategory.add(optElem); // add it rsCur.MoveNext(); } if (optElemSel) _FilterCategories(optElemSel); g_bSelectDefault = false; // Reset this so we don't always reselect the default } } /*------------------------------------------------------------------------- Purpose: Handle 'ondatasetcomplete' event fired from DSO */ function Cat_OnDatasetComplete() { // Is this dataset complete for categories if (window.event.qualifier == "Categories") { _ResetCategoryList(); _InitCategoryList(); } } /*------------------------------------------------------------------------- Purpose: Handle 'ondatasetcomplete' event fired from DSO */ function Add_OnDatasetComplete() { // Is this dataset complete for add? if (window.event.qualifier == "Add") { // Yes; show this text if the dataset is empty var L_AddNoneAvailable_Text = "No programs are available on the network"; Dso_FeedbackIfEmpty("Add", g_docAll.idAddListbox, L_AddNoneAvailable_Text); } }