import Homer
import Accessibility
import Microsoft.VisualBasic
import Microsoft.VisualBasic.Compatibility.VB6
import Microsoft.VisualBasic.ApplicationServices
import Microsoft.VisualBasic.MyServices
import Microsoft.Win32
import System.Collections.ObjectModel
import System.Collections.Specialized
import System.Text
import System.Text.RegularExpressions
import System
import System.ComponentModel
import System.Diagnostics
import System.Drawing
import System.IO
import System.Net
import System.Reflection
import System.Runtime.InteropServices
import System.Windows.Forms
import System.Xml

package Homer {
class Lbc {
static function DialogConfirm(sTitle, sMessage, sDefault) {
if (!sTitle) sTitle = 'Confirm'
if (!sMessage) sMessage = ''
var defaultButton = MessageBoxDefaultButton.Button1
if (sDefault.ToLower() == 'n') defaultButton = MessageBoxDefaultButton.Button2
switch (MessageBox.Show(sText, sTitle, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, defaultButton)) {
case DialogResult.Yes :
return 'Y'
case DialogResult.No :
return 'N'
}
return ''
} // DialogConfirm method

static function DialogShow(oTitle, oMessage) {
var sTitle = oTitle.ToString()
var sMessage = oMessage.ToString()
MessageBox.Show(oMessage, oTitle)
} //DialogShow method


static function DialogOpenFile(sTitle, sPath) {
var sReturn = ''
var dlg = new OpenFileDialog()
if (sTitle) dlg.Title = sTitle
var sDir
if (Directory.Exists(sPath)) sDir = sPath
else {
if (File.Exists(sPath)) dlg.FileName = sPath
sDir = Path.GetDirectoryName(sPath)
if (!Directory.Exists(sDir)) sDir = Directory.GetCurrentDirectory()
}
dlg.InitialDirectory = sDir

dlg.Filter = 'All files (*.*)|*.*'
dlg.FilterIndex = 1
dlg.ValidateNames = true
dlg.CheckPathExists = true

if (dlg.ShowDialog() == DialogResult.OK) sReturn = dlg.FileName
dlg.Dispose()
return sReturn
} // OpenFile method

static function DialogSaveFile(sTitle, sPath) {
var sReturn = ''
var sDir
var dlg = new SaveFileDialog()
if (sTitle) dlg.Title = sTitle
if (Directory.Exists(sPath)) sDir = sPath
else {
dlg.FileName = sPath
sDir = Path.GetDirectoryName(sPath)
}

if (Directory.Exists(sDir)) dlg.InitialDirectory = sDir

dlg.Filter = 'All files (*.*)|*.*'
dlg.FilterIndex = 1
dlg.CheckPathExists = true
dlg.SupportMultiDottedExtensions = true
dlg.CreatePrompt = false
dlg.ValidateNames = true
dlg.AddExtension = true
dlg.DefaultExt = 'txt'

if (dlg.ShowDialog() == DialogResult.OK) sReturn = dlg.FileName
dlg.Dispose()
return sReturn
} // SaveFile method

static function DialogBrowseForFolder(sTitle, sDir) {
var sReturn = ''
var dlg = new FolderBrowserDialog()
if (sTitle) dlg.Description = sTitle
dlg.ShowNewFolderButton = true
dlg.SelectedPath = sDir

if (dlg.ShowDialog() == DialogResult.OK) sReturn = dlg.SelectedPath
dlg.Dispose()
return sReturn
} // BrowseForFolder method

static function DialogInput(sTitle, sName, sValue) {
if (!sTitle) var sTitle = 'Input'
var aNames = [sName]
var aValues = [sValue]
var aResults = Lbc.DialogMultiInput(sTitle, aNames, aValues, null)
var sResult = null
if (aResults && aResults.length) sResult = aResults[0]
return sResult
} // DialogInput method

static function DialogInputAndChoose(sTitle, sName, sValue, aButtons, iFocus) {
if (!sTitle) var sTitle = 'Input and Choose'
if (!aButtons) var aButtons = []
if (!sName) var sName = ''
if (!sValue) var sValue = ''
if (!iFocus) var iFocus = 0
var dlg = new LbcDialog(sTitle, 'this.HandleDialogInputAndChoose', null)
dlg.AddInputBox(sName, sValue)
aButtons.push('Cancel')
dlg.CompleteDialog(aButtons, iFocus)
return dlg.Result
} // DialogInputAndChoose method

static function DialogPickAndChoose(sTitle, sLabel, aNames, aValues, bSort, iIndex, aButtons, iFocus) {
if (!sTitle) var sTitle = 'Pick and Choose'
if (!aNames) var aNames = []
if (!aValues) var aValues = aNames
if (!bSort) var bSort = false
if (!iIndex) var iIndex = 0
if (!aButtons) var aButtons = []
if (!iFocus) var iFocus = 0

var dlg = new LbcDialog(sTitle, 'this.HandleDialogPickAndChoose', null)
dlg.AddPickBox(sLabel, aNames, bSort, iIndex)
aButtons.push('Cancel')
dlg.CompleteDialog(aButtons, iFocus)
var aResults = dlg.Result
var iIndex = aResults[0]
if (iIndex != null) aResults[0] = aValues[iIndex]
return aResults
} // DialogPickAndChoose method

static function DialogPickInputAndChoose(sTitle, sLabel, aNames, aValues, bSort, iIndex, sName, sValue, aButtons, iFocus) {
if (!sTitle) var sTitle = 'Pick, Input, and Choose'
if (!aNames) var aNames = []
if (!aValues) var aValues = aNames
if (!bSort) var bSort = false
if (!iIndex) var iIndex = 0
if (!sName) var sName = ''
if (!sValue) var sValue = ''
if (!aButtons) var aButtons = 0
if (!iFocus) var iFocus = 0

var dlg = new LbcDialog(sTitle, 'this.HandleDialogPickInputAndChoose', null)
dlg.AddPickBox(sLabel, aNames, bSort, iIndex)
dlg.AddBand()
dlg.AddInputBox(sName, sValue)
aButtons.push('Cancel')
dlg.CompleteDialog(aButtons, iFocus)
var aResults = dlg.Result
var iIndex = aResults[0]
if (iIndex != null) aResults[0] = aValues[iIndex]
return aResults
} // DialogPickInputAndChoose method


static function DialogPick(sTitle, sLabel, aNames, aValues, bSort, iIndex) {
if (!sTitle) var sTitle = 'Pick'
if (!aNames) var aNames = []
if (!aValues) var aValues = aNames
if (!bSort) bSort = false
if (!iIndex) var iIndex = 0

var dlg = new LbcDialog(sTitle,'this.HandleDialogPick', null)
var lst = dlg.AddPickBox(sLabel, aNames, bSort, iIndex)[1]
if (bSort) lst.Sorted = true
if (iIndex >= 0 && lst.Items.Count) lst.SelectedIndex = iIndex
dlg.CompleteDialog(null, null)
if (dlg.Result == null) return null
return aValues[dlg.Result]
} // DialogPick method

static function DialogMemo(sTitle, sLabel, sText) {
if (!sTitle) var sTitle = 'Memo'
if (!sText) var sText = ''

var dlg = new LbcDialog(sTitle,'this.HandleDialogMemo', null)
var memo = dlg.AddMemoBox(sLabel, sText, false)
dlg.CompleteDialog(null, null)
return dlg.Result
} // DialogMemo method



static function DialogInfo(sTitle, sLabel, sText) {
if (!sTitle) var sTitle = 'Memo'
if (!sText) var sText = ''

var dlg = new LbcDialog(sTitle,'this.HandleDialogInfo', null)
var memo = dlg.AddMemoBox(sLabel, sText, true)
dlg.CompleteDialog(null, null)
return null
} // DialogInfo method



static function DialogMultiPick(sTitle, sLabel, aNames, aValues, aSelect, bSort, iIndex) {
if (!sTitle) var sTitle = 'Pick'
if (!aNames) var aNames = []
if (!aValues) var aValues = aNames
if (!aSelect) var aSelect = []
if (!bSort) bSort = false
if (!iIndex) var iIndex = 0
var dlg = new LbcDialog(sTitle,'this.HandleDialogMultiPick', null)
var lst = dlg.AddMultiListBox(sLabel, aNames, aSelect, bSort, iIndex)
if (bSort) lst.Sorted = true
if (iIndex >= 0 && lst.Items.Count) lst.SelectedIndex = iIndex
dlg.CompleteDialog(null, null)
if (dlg.Result == null) return null
var aResults = []
for (var i = 0; i < dlg.Result.length; i++) {
var iIndex = dlg.Result[i]
var sValue = aValues[iIndex]
aResults.push(sValue)
}
return aResults
} // DialogMultiPick method

static function DialogMultiCheck(sTitle, sLabel, aNames, aValues, aSelect, bSort, iIndex) {
if (!sTitle) var sTitle = 'Pick'
if (!aNames) var aNames = []
if (!aValues) var aValues = aNames
if (!aSelect) var aSelect = []
if (!bSort) bSort = false
if (!iIndex) var iIndex = 0
var dlg = new LbcDialog(sTitle,'this.HandleDialogMultiCheck', null)
var lst = dlg.AddCheckedListBox(sLabel, aNames, aSelect, bSort, iIndex)
if (bSort) lst.Sorted = true
if (iIndex >= 0 && lst.Items.Count) lst.SelectedIndex = iIndex
dlg.CompleteDialog(null, null)
if (dlg.Result == null) return null
var aResults = []
for (var i = 0; i < dlg.Result.length; i++) {
var iIndex = dlg.Result[i]
var sValue = aValues[iIndex]
aResults.push(sValue)
}
return aResults
} // DialogMultiCheck method


static function DialogMultiInput(sTitle, aNames, aValues, iFocus) {
if (!sTitle) var sTitle = 'Multi Input'
if (!aNames) var aNames = []
if (!aValues) var aValues = new Array(aNames.length)
if (!iFocus) var iFocus = 0
var dlg = new LbcDialog(sTitle,'this.HandleDialogMultiInput', null)
for (var i = 0; i < aNames.length; i++){
var sName = aNames[i]
var sValue = aValues[i]
var txt = dlg.AddInputBox(sName, sValue)[1]
// if (i == iFocus) txt.Select()
if (aNames.length - i > 1) dlg.AddBand()
}
dlg.CompleteDialog(null, iFocus)
return dlg.Result
} // DialogMultiInput method

static function DialogChoose(sTitle, aButtons, iFocus) {
if (!sTitle) var sTitle = 'Choose'
if (!aButtons) var aButtons = []
if (!iFocus) var iFocus = 0
aButtons.push('Cancel')
var dlg = new LbcDialog(sTitle,'this.HandleDialogChoose', null)
for (var i = 0; i < aButtons.length; i++){
var sButton = aButtons[i]
var btn = dlg.AddButton(sButton)
// if (i == iFocus) btn.Select()
if ((aButtons.length - i) > 1) dlg.AddBand()
}
dlg.CompleteDialog([], iFocus)
return dlg.Result
} // DialogChoose method
} // Lbc class

class LbcDialog extends Form {
var MainPanel = null
var Names = new OrderedDictionary()
var Tooltips = {}
var Handler = 'OnEvent'
var Result = null

function LbcDialog(sText, sHandler, dTooltips) {
this.SuspendLayout()
this.Text = sText
if (sHandler) this.Handler = sHandler
if (dTooltips) this.Tooltips = dTooltips
this.MainPanel = CreateVerticalPanel()
this.MainPanel.Dock = DockStyle.Fill
this.Controls.Add(this.MainPanel)
this.AddBand()
} // LbcDialog constructor

function HandleDialogPick(sLabel, sEvent, oSender, oArgs) {
this.Result = null
if (this.AcceptButton == oSender) {
var sName = 'ListBox_'
var lst = this.Names[sName]
var iIndex = lst.SelectedIndex
this.Result = Support.GetItemData(lst, iIndex)
}
this.Dispose()
} // HandleDialogPick method

function HandleDialogMultiPick(sLabel, sEvent, oSender, oArgs) {
this.Result = null
if (this.AcceptButton == oSender) {
var sName = 'ListBox_'
var lst = this.Names[sName]
var aResults = []
for (var i = 0; i < lst.SelectedIndices.Count; i++) {
var iIndex = lst.SelectedIndexes.Item(i)
var iData = Support.GetItemData(lst, iIndex)
aResults.push(iData)
}
this.Result = aResults
}
this.Dispose()
} // HandleDialogMultiPick method

function HandleDialogMultiCheck(sLabel, sEvent, oSender, oArgs) {
this.Result = null
if (this.AcceptButton == oSender) {
var sName = 'CheckedListBox_'
var lst = this.Names[sName]
var aResults = []
for (var i = 0; i < lst.CheckedIndices.Count; i++) {
var iIndex = lst.CheckedIndices.Item(i)
var iData = Support.GetItemData(lst, iIndex)
aResults.push(iData)
}
this.Result = aResults
}
this.Dispose()
} // HandleDialogMultiCheck method



function HandleDialogMultiInput(sEvent, oSender, oArgs) {
this.Result = null
if (this.AcceptButton == oSender) {
var aResults = []
for (var i = 0; i < this.MainPanel.Controls.Count; i++) {
var flp = this.MainPanel.Controls(i)
for (var j = 0; j < flp.Controls.Count; j++) {
var ctl = flp.Controls(j)
if (ctl.Name.StartsWith('TextBox_')) aResults.push(ctl.Text)
}
}
this.Result = aResults
}
this.Dispose()
} // HandleDialogMultiInput method

function HandleDialogChoose(sEvent, oSender, oArgs) {
this.Result = null
if(sEvent == 'Click' && oSender.Name.StartsWith('Button_')) this.Result = oSender.AccessibleName
this.Dispose()
} // HandleDialogChoose method


function HandleDialogInputAndChoose(sEvent, oSender, oArgs) {
this.Result = null
if(sEvent == 'Click' && oSender.Name.StartsWith('Button_')) {
var aResults = []
var flp = this.MainPanel.Controls(0)
var txt = flp.Controls(1)
aResults.push(txt.Text)
aResults.push(oSender.AccessibleName)
this.Result = aResults
}
this.Dispose()
} // HandleDialogInputAndChoose method


function HandleDialogPickAndChoose(sLabel, sEvent, oSender, oArgs) {
this.Result = null
if(sEvent == 'Click' && oSender.Name.StartsWith('Button_')) {
var aResults = []
var flp = this.MainPanel.Controls(0)
var lst:ListBox = flp.Controls(0)
var iIndex = lst.SelectedIndex
var iData = null
if (iIndex >= 0) iData = Support.GetItemData(lst, iIndex)
aResults.push(iData)
aResults.push(oSender.AccessibleName)
this.Result = aResults
}
this.Dispose()
} // HandleDialogPickAndChoose method

function HandleDialogPickInputAndChoose(sLabel, sEvent, oSender, oArgs) {
this.Result = null
if(sEvent == 'Click' && oSender.Name.StartsWith('Button_')) {
var aResults = []
var flp = this.MainPanel.Controls(0)
var lst:ListBox = flp.Controls(0)
var iIndex = lst.SelectedIndex
var iData = null
if (iIndex >= 0) iData = Support.GetItemData(lst, iIndex)
aResults.push(iData)
var flp = this.MainPanel.Controls(1)
var txt = flp.Controls(1)
aResults.push(txt.Text)
aResults.push(oSender.AccessibleName)
this.Result = aResults
}
this.Dispose()
} // HandleDialogPickInputAndChoose method


function AddButtonBand(aButtons) {
var aReturn = []
if (!aButtons) var aButtons = ['OK', 'Cancel']
var flp = AddBand()
flp.AnchorStyles = AnchorStyles.None
for (var i = 0; i < aButtons.length; i++) {
var sButton = aButtons[i]
var btn = AddButton(sButton)
// if (i == iFocus) btn.Select()
aReturn.push(btn)
}
return aReturn
} // AddButtonBand method

function CompleteDialog(aButtons, iFocus) {
if (!aButtons || aButtons.length) {
var a = AddButtonBand(aButtons)
this.AcceptButton = a[0]
}
if (!iFocus) var iFocus = 0

AddStatusBar()
this.add_Load(Delegate.CreateDelegate(CancelEventHandler, this, 'HandleLoad'))
this.add_Shown(Delegate.CreateDelegate(CancelEventHandler, this, 'HandleShown'))
this.add_Closing(Delegate.CreateDelegate(CancelEventHandler, this, 'HandleClosing'))
this.StartPosition = FormStartPosition.CenterScreen
this.AutoSize = true
this.AutoSizeMode = AutoSizeMode.GrowAndShrink
// this.AutoScroll = true
// Start at 1 not 0
for (var i = 1; i < this.Names.Count; i++) {
if (i == iFocus) {
var ctl = this.Names[i]
ctl.Select()
break
}
}
this.ResumeLayout()
this.ShowDialog()
} // CompleteDialog method

function CreateVerticalPanel() {
return CreateFlowPanel(FlowDirection.TopDown)
} // CreateVerticalPanel method

function CreateHorizontalPanel() {
return CreateFlowPanel(FlowDirection.TopDown)
} // CreateHorizontalPanel method

function CreateFlowPanel(direction) {
var flp = new FlowLayoutPanel()
flp.FlowDirection = direction
flp.AutoSize = true
flp.AutoSizeMode = AutoSizeMode.GrowAndShrink
return flp
} // CreateFlowPanel method

function CreateTablePanel(iColumns, iRows) {
var tlp = new TableLayoutPanel()
tlp.Anchor = AnchorStyles.None
tlp.AutoSize = true
tlp.AutoSizeMode = AutoSizeMode.GrowAndShrink
//tlp.AutoScroll = true
tlp.ColumnCount = iColumns
for (var i = 0; i < tlp.ColumnCount; i++) {
tlp.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize))
}

for (var i = 0; i < tlp.RowCount; i++) {
tlp.RowStyles.Add(new RowStyle(SizeType.AutoSize))
}
return tlp
} // CreateTablePanel method

function AddStatusBar() {
var sb = new StatusStrip()
sb.AccessibleRole = AccessibleRole.StatusBar
var lblStatus = new ToolStripStatusLabel('Ready')
lblStatus.AutoSize = true
lblStatus.AutoSizeMode = AutoSizeMode.GrowAndShrink
// sb.Items.AddRange([lblStatus])
sb.Items.Add(lblStatus)
sb.AutoSize = true
sb.AutoSizeMode = AutoSizeMode.GrowAndShrink
sb.Dock = DockStyle.Bottom
this.Controls.Add(sb)
return sb
} // AddStatusBar method

function GetStatus() {
var iIndex = this.Controls.Count - 1
var sb:StatusStrip = this.Controls(iIndex)
var lbl = sb.Items(0)
return lbl.Text
} // GetStatus method

function SetStatus(sText) {
var iIndex = this.Controls.Count - 1
var sb:StatusStrip = this.Controls(iIndex)
var lbl = sb.Items(0)
var sOldStatus = lbl.Text
lbl.Text = sText
return sOldStatus
} // SetStatus method

function AddStatus(sText) {
var sStatus = sText
var sOldStatus = GetStatus()
if (!sOldStatus) sStatus = '   ' + sStatus
return SetStatus(sStatus)
} // AddStatus method

function AddBand() {
var flp = CreateHorizontalPanel()
this.MainPanel.Controls.Add(flp)
return flp
} // AddBand method

function AddLabel(sText):Label {
var lbl = new Label()
var sText = MakeLabel(sText)
lbl.Text = sText
lbl.AccessibleName = MakeAccessibleName(sText)
var sName = MakeName(lbl, sText)
lbl.Name = sName
this.Names[sName] = lbl
this.MainPanel.Controls.Item(CurrentBand()).Controls.Add(lbl)
return lbl
} // AddLabel method

function AddTextBox(sText) {
var txt = new TextBox()
var iWidth = txt.Width
txt.Width = 2 * iWidth
if (sText) txt.Text = sText
var sName = 'TextBox_'
var lbl = CurrentControl()
if (lbl) {
txt.AccessibleName = lbl.AccessibleName
sName = lbl.Name.replace('Label_', 'TextBox_')
}
txt.Name = sName
this.Names[sName] = txt
txt.add_GotFocus(Delegate.CreateDelegate(EventHandler, this, 'HandleGotFocus'))
txt.add_SelectionChanged(Delegate.CreateDelegate(EventHandler, this, 'HandleSelectionChanged'))
this.MainPanel.Controls(CurrentBand()).Controls.Add(txt)
return txt
} // AddTextBox method

function AddMemo(sText, bReadOnly) {
if (!sText) var sText = ''
if (!bReadOnly) var bReadOnly = true

var txt = new TextBox()
var iWidth = txt.Width
var iHeight = txt.Height
txt.Width = 4 * iWidth
txt.Height = 4 * iHeight
txt.Text = sText
txt.ReadOnly = bReadOnly
var sName = 'Memo_'
var lbl = CurrentControl()
if (lbl != null) {
txt.AccessibleName = lbl.AccessibleName
sName = lbl.Name.replace('Label_', 'TextBox_')
}
txt.Name = sName
this.Names[sName] = txt
txt.add_GotFocus(Delegate.CreateDelegate(EventHandler, this, 'HandleGotFocus'))
txt.add_SelectionChanged(Delegate.CreateDelegate(EventHandler, this, 'HandleSelectionChanged'))
this.MainPanel.Controls(CurrentBand()).Controls.Add(txt)
return txt
} // AddMemo method

function AddButton(sText):Button {
var btn = new Button()
if (sText == 'OK') this.AcceptButton = btn
else if (sText == 'Cancel' || sText == 'Close') this.CancelButton = btn
else var sText = MakeCaption(sText)
btn.Text = sText
btn.AccessibleName = MakeAccessibleName(sText)
var sName = MakeName(btn, sText)
btn.Name = sName
this.Names[sName] = btn
btn.add_Click(Delegate.CreateDelegate(EventHandler, this, 'HandleClick'))
btn.add_GotFocus(Delegate.CreateDelegate(EventHandler, this, 'HandleGotFocus'))
this.MainPanel.Controls(CurrentBand()).Controls.Add(btn)
return btn
} // AddButton method

function AddCheckBox(sText, bState):CheckBox {
if (!sText) var sText = ''
if (!bState) var bState = false

var chk = new CheckBox()
chk.Checked = bState
var sText = MakeCaption(sText)
chk.Text = sText
chk.AccessibleName = MakeAccessibleName(sText)
var sName = MakeName(chk, sText)
chk.Name = sName
this.Names[sName] = chk
chk.add_Click(Delegate.CreateDelegate(EventHandler, this, 'HandleClick'))
chk.add_GotFocus(Delegate.CreateDelegate(EventHandler, this, 'HandleGotFocus'))
this.MainPanel.Controls(CurrentBand()).Controls.Add(chk)
return chk
} // AddCheckBox method


function AddListBox(aItems, bSort, iIndex) {
if (!aItems) var aItems = []
if (!bSort) var bSort = false
if (!iIndex) var iIndex = 0

var lst = new ListBox()
lst.SelectionMode = SelectionMode.One
for (var i = 0; i < aItems.length; i++) {
lst.Items.Add(aItems[i])
Support.SetItemData(lst, i, i)
}
lst.Sorted = bSort
if (iIndex >= 0 && lst.Items.Count) lst.SelectedIndex = iIndex

var sName = 'ListBox_'
var lbl = CurrentControl()
// if (lbl) {
if (lbl != null) {
lst.AccessibleName = lbl.AccessibleName
sName = lbl.Name.replace('Label_', 'ListBox_')
}
lst.Name = sName
this.Names[sName] = lst
lst.add_GotFocus(Delegate.CreateDelegate(EventHandler, this, 'HandleGotFocus'))
lst.add_SelectedIndexChanged(Delegate.CreateDelegate(EventHandler, this, 'HandleSelectedIndexChanged'))
this.MainPanel.Controls(CurrentBand()).Controls.Add(lst)
return lst
} // AddListBox method

function AddMultiListBox(sLabel, aItems, aSelect, bSort, iIndex) {
if (!aItems) var aItems = []
if (!aSelect) var aSelect = []
if (!bSort) var bSort = false
if (!iIndex) var iIndex = 0

var lst = new ListBox()
lst.SelectionMode = SelectionMode.MultiSimple
for (var i = 0; i < aItems.length; i++) {
lst.Items.Add(aItems[i])
Support.SetItemData(lst, i, i)
}

for (var i = 0; i < aSelect.length; i ++) {
var iSelect = aSelect[i]
lst.SetSelected(iSelect, true)
}

lst.Sorted = bSort
if (iIndex >= 0 && lst.Items.Count) lst.SelectedIndex = iIndex

var sName = 'MultiListBox_'
var lbl = CurrentControl()
// if (lbl) {
if (lbl != null) {
lst.AccessibleName = lbl.AccessibleName
sName = lbl.Name.replace('Label_', 'MultiListBox_')
}
lst.Name = sName
this.Names[sName] = lst
lst.add_GotFocus(Delegate.CreateDelegate(EventHandler, this, 'HandleGotFocus'))
this.MainPanel.Controls(CurrentBand()).Controls.Add(lst)
return lst
} // AddMultiListBox method

function AddCheckedListBox(sLabel, aItems, aSelect, bSort, iIndex) {
if (!aItems) var aItems = []
if (!aSelect) var aSelect = []
if (!bSort) var bSort = false
if (!iIndex) var iIndex = 0

var lst = new CheckedListBox()
lst.SelectionMode = SelectionMode.MultiSimple
for (var i = 0; i < aItems.length; i++) {
lst.Items.Add(aItems[i])
Support.SetItemData(lst, i, i)
}

for (var i = 0; i < aSelect.length; i ++) {
var iSelect = aSelect[i]
lst.SetItemChecked(iSelect, true)
}

lst.Sorted = bSort
if (iIndex >= 0 && lst.Items.Count) lst.SelectedIndex = iIndex

var sName = 'CheckedListBox_'
var lbl = CurrentControl()
// if (lbl) {
if (lbl != null) {
lst.AccessibleName = lbl.AccessibleName
sName = lbl.Name.replace('Label_', 'CheckedListBox_')
}
lst.Name = sName
this.Names[sName] = lst
lst.add_GotFocus(Delegate.CreateDelegate(EventHandler, this, 'HandleGotFocus'))
this.MainPanel.Controls(CurrentBand()).Controls.Add(lst)
return lst
} // AddCheckedListBox method


function AddInputBox(sLabel, sText) {
var lbl:Label = null
if (sLabel) lbl = AddLabel(sLabel)
var txt = AddTextBox(sText)
return [lbl, txt]
// return txt
} // AddInputBox method

function AddMemoBox(sLabel, sText, bReadOnly) {
var lbl:Label = null
if (sLabel) lbl = AddLabel(sLabel)
var txt = AddMemo(sText, bReadOnly)
return [lbl, txt]
} // AddMemoBox method


function AddPickBox(sLabel, aItems, bSort, iIndex) {
var lbl:Label = null
if (sLabel) lbl = AddLabel(sLabel)
var lst = AddListBox(aItems, bSort, iIndex)
return [lbl, lst]
} // AddPickBox method

function CurrentControl() {
var iIndex = this.MainPanel.Controls(CurrentBand()).Controls.Count - 1
if (iIndex >= 0) return this.MainPanel.Controls(CurrentBand()).Controls(iIndex)
else return null
} // CurrentControl method

function CurrentBand() {
return this.MainPanel.Controls.Count - 1
} // CurrentBand method

function MakeName(ctl, sLabel) {
var sType = ctl.GetType().ToString()
var aParts = sType.split('.')
sType = aParts.slice(-1)
var sName = MakeAccessibleName(sLabel)
sName = sType + '_' + sName
return sName
} // MakeName method

function MakeAccessibleName(sLabel) {
var sName = sLabel.Replace('&', '')
sName = sName.Replace(':', '')
return sName
} // MakeAccessibleName method

function MakeLabel(sText) {
var sReturn = MakeCaption(sText)
if (sReturn.indexOf(':') == -1) sReturn += ':'
return sReturn
} // MakeLabel method

function MakeCaption(sText) {
var sReturn = sText
if (sText.IndexOf('&') == -1) sReturn = '&' + sText
return sReturn
} // MakeCaption method

function HandleClick(oSender:Object, oArgs:EventArgs) {
var sEvent = 'Click'
var sCode = this.Handler + '(sEvent, oSender, oArgs)'
eval(sCode, 'unsafe')
} // HandleClickEvent method

function HandleClosing(oSender:Object, oArgs:CancelEventArgs) {
var sEvent = 'Close'
var sCode = this.Handler + '(sEvent, oSender, oArgs)'
// eval(sCode, 'unsafe')
} // HandleClosing method

function HandleGotFocus(oSender:Object, oArgs:EventArgs) {
var sText = this.Tooltips[oSender.Name]
if (!sText) sText = ''
SetStatus(sText)
var sEvent = 'Focus'
var sCode = this.Handler + '(sEvent, oSender, oArgs)'
// eval(sCode, 'unsafe')
} // HandleGotFocusEvent method
} // LbcDialog class
} // Homer package

var sFile = Interaction.Command()
var sText = File.ReadAllText(sFile)
eval(sText, 'unsafe')