Files
GBM/GBM/Forms/frmAddWizard.vb
Michael J. Seiferling 2eb6693275 More cosmetic changes
2016-03-13 20:24:30 -06:00

502 lines
18 KiB
VB.net

Imports GBM.My.Resources
Imports System.IO
Public Class frmAddWizard
Private oGameData As Hashtable
Private oGameToSave As clsGame
Private bDisableAdminWarning As Boolean = False
Property GameData As Hashtable
Get
Return oGameData
End Get
Set(value As Hashtable)
oGameData = value
End Set
End Property
Private Enum eSteps As Integer
Step1 = 1
Step2 = 2
Step3 = 3
Step3a = 4
Step4 = 5
Step5 = 6
End Enum
Private eCurrentStep As eSteps = eSteps.Step1
Private Sub SetForm()
'Set Form Name
Me.Text = frmAddWizard_FormName
'Set Form Text
btnCancel.Text = frmAddWizard_btnCancel
btnNext.Text = frmAddWizard_btnNext
btnBack.Text = frmAddWizard_btnBack
lblStep1Title.Text = frmAddWizard_lblStep1Title
lblStep1Instructions.Text = frmAddWizard_lblStep1Instructions
lblStep1Intro.Text = frmAddWizard_lblStep1Intro
lblStep2Title.Text = frmAddWizard_lblStep2Title
lblStep2Instructions.Text = frmAddWizard_lblStep2Instructions
btnProcessBrowse.Text = frmAddWizard_btnProcessBrowse
lblStep2Intro.Text = frmAddWizard_lblStep2Intro
lblStep3Title.Text = frmAddWizard_lblStep3Title
lblStep3Instructions.Text = frmAddWizard_lblStep3Instructions
chkTimeStamp.Text = frmAddWizard_chkTimeStamp
chkFolderSave.Text = frmAddWizard_chkFolderSave
btnSaveBrowse.Text = frmAddWizard_btnSaveBrowse
lblStep3Intro.Text = frmAddWizard_lblStep3Intro
lblIncludePathTitle.Text = frmAddWizard_lblIncludePathTitle
lblIncludePath.Text = frmAddWizard_lblIncludePath
lblFileTypes.Text = frmAddWizard_ItemsSelectedNone
btnInclude.Text = frmAddWizard_btnInclude
lblStep3aTitle.Text = frmAddWizard_lblStep3aTitle
lblStep3aInstructions.Text = frmAddWizard_lblStep3aInstructions
lblExcludePathTitle.Text = frmAddWizard_lblExcludePathTitle
lblExcludePath.Text = frmAddWizard_lblExcludePath
lblExclude.Text = frmAddWizard_ItemsSelectedNone
btnExclude.Text = frmAddWizard_btnExclude
lblStep4Title.Text = frmAddWizard_lblStep4Title
lblStep4Instructions.Text = frmAddWizard_lblStep4Instructions
lblStep5Intro.Text = frmAddWizard_lblStep5Intro
lblStep5Title.Text = frmAddWizard_lblStep5Title
chkFolderSave.Checked = True
chkTimeStamp.Checked = False
StepHandler()
End Sub
Private Function StringEmptyText(ByVal sString As String) As String
If sString = String.Empty Then
Return frmAddWizard_None
Else
Return sString
End If
End Function
Private Function BuildSummaryAndData() As clsGame
Dim oGame As New clsGame
Dim sName As String = txtName.Text
Dim sProcessFullPath As String = txtProcessPath.Text
Dim sProcessPath As String = Path.GetDirectoryName(sProcessFullPath)
Dim sProcess As String = Path.GetFileNameWithoutExtension(sProcessFullPath)
Dim sProcessSummaryText As String = Path.GetFileName(sProcessFullPath) & " (" & sProcessPath & ")"
Dim sSavePath As String = txtSavePath.Text
Dim bIsAbsolute As Boolean = mgrPath.IsAbsolute(sSavePath)
Dim bFolderBackup As Boolean = chkFolderSave.Checked
Dim bTimeStamp As Boolean = chkTimeStamp.Checked
Dim sFileType As String = txtFileTypes.Text
Dim sExcludeList As String = txtExcludeList.Text
Dim sItem As String()
Dim sItems As String()
Dim sValues As String()
Dim lstItem As ListViewItem
If Not bIsAbsolute Then
sSavePath = mgrPath.DetermineRelativePath(sProcessPath, sSavePath)
End If
'Build Summary Listview
lstSummary.Clear()
lstSummary.Columns.Add("Item")
lstSummary.Columns.Add("Value")
lstSummary.Columns(0).Width = 95
lstSummary.Columns(1).Width = 210
sItems = {frmAddWizard_Summary_Name, frmAddWizard_Summary_Process, frmAddWizard_Summary_AbsolutePath, frmAddWizard_Summary_SavePath, frmAddWizard_Summary_FolderSave, frmAddWizard_Summary_Timestamp, frmAddWizard_Summary_Include, frmAddWizard_Summary_Exclude}
sValues = {sName, sProcessSummaryText, mgrCommon.BooleanYesNo(bIsAbsolute), sSavePath, mgrCommon.BooleanYesNo(bFolderBackup), mgrCommon.BooleanYesNo(bTimeStamp), StringEmptyText(sFileType), StringEmptyText(sExcludeList)}
For i = 0 To sItems.Length - 1
sItem = {sItems(i), sValues(i)}
lstItem = New ListViewItem(sItem)
lstSummary.Items.Add(lstItem)
Next
'Build Save Object
oGame.Name = sName
oGame.ProcessName = sProcess
oGame.Path = sSavePath
oGame.AbsolutePath = bIsAbsolute
oGame.FolderSave = bFolderBackup
oGame.FileType = sFileType
oGame.AppendTimeStamp = bTimeStamp
oGame.ExcludeList = sExcludeList
Return oGame
End Function
Private Sub StepHandler()
Select Case eCurrentStep
Case eSteps.Step1
btnBack.Enabled = False
btnNext.Enabled = True
tabWizard.SelectTab(0)
Case eSteps.Step2
btnBack.Enabled = True
btnNext.Enabled = True
tabWizard.SelectTab(1)
Case eSteps.Step3
btnBack.Enabled = True
btnNext.Enabled = True
tabWizard.SelectTab(2)
Case eSteps.Step3a
btnBack.Enabled = True
btnNext.Enabled = True
tabWizard.SelectTab(3)
Case eSteps.Step4
btnBack.Enabled = True
btnNext.Enabled = True
btnNext.Text = frmAddWizard_btnNext
tabWizard.SelectTab(4)
Case eSteps.Step5
btnBack.Enabled = True
btnNext.Text = frmAddWizard_btnNext_Finish
tabWizard.SelectTab(5)
End Select
End Sub
Private Function ValidateName(ByVal strName As String, ByRef sErrorMessage As String) As Boolean
If txtName.Text <> String.Empty Then
txtName.Text = mgrPath.ValidateForFileSystem(txtName.Text)
Return True
Else
sErrorMessage = frmAddWizard_ErrorValidName
txtName.Focus()
Return False
End If
Return True
End Function
Private Function ValidateProcessPath(ByVal strPath As String, ByRef sErrorMessage As String) As Boolean
If strPath = String.Empty Then
sErrorMessage = frmAddWizard_ErrorValidProcess
txtProcessPath.Focus()
Return False
End If
If Path.GetExtension(strPath.ToLower) <> ".exe" And Not mgrCommon.IsUnix Then
sErrorMessage = frmAddWizard_ErrorNotAProcess
txtProcessPath.Focus()
Return False
End If
If Not Path.IsPathRooted(strPath) Then
sErrorMessage = frmAddWizard_ErrorBadProcessPath
txtProcessPath.Focus()
Return False
End If
If Not File.Exists(strPath) Then
sErrorMessage = frmAddWizard_ErrorProcessNotExist
txtProcessPath.Focus()
Return False
End If
Return True
End Function
Private Function ValidateSavePath(ByVal strPath As String, ByRef sErrorMessage As String) As Boolean
If strPath = String.Empty Then
sErrorMessage = frmAddWizard_ErrorValidSavePath
txtSavePath.Focus()
Return False
End If
If Not Directory.Exists(strPath) Then
sErrorMessage = frmAddWizard_ErrorSavePathNotExist
txtSavePath.Focus()
Return False
End If
If Not Path.IsPathRooted(strPath) Then
sErrorMessage = frmAddWizard_ErrorBadSavePath
txtSavePath.Focus()
Return False
End If
Return True
End Function
Private Function ValidateSaveType(ByVal strSaveType As String, ByRef sErrorMessage As String)
If strSaveType = String.Empty Then
sErrorMessage = frmAddWizard_ErrorValidSaveType
txtFileTypes.Focus()
Return False
End If
Return True
End Function
Private Sub DoSave()
Dim hshDupeCheck As New Hashtable
Dim sNewGame As String = oGameToSave.ProcessName & ":" & oGameToSave.Name
For Each o As clsGame In GameData.Values
hshDupeCheck.Add(o.CompoundKey, String.Empty)
Next
If hshDupeCheck.Contains(sNewGame) Then
mgrCommon.ShowMessage(frmAddWizard_ErrorGameDupe, MsgBoxStyle.Exclamation)
Else
mgrMonitorList.DoListAdd(oGameToSave)
If mgrCommon.ShowMessage(frmAddWizard_ConfirmSaveTags, New String() {oGameToSave.Name, oGameToSave.Name}, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
OpenTags(oGameToSave)
End If
Me.Close()
End If
End Sub
Private Sub ValidateBack()
Select Case eCurrentStep
Case eSteps.Step2
eCurrentStep = eSteps.Step1
Case eSteps.Step3
eCurrentStep = eSteps.Step2
Case eSteps.Step3a
eCurrentStep = eSteps.Step3
Case eSteps.Step4
If chkFolderSave.Checked Then
eCurrentStep = eSteps.Step3
Else
eCurrentStep = eSteps.Step3a
End If
Case eSteps.Step5
eCurrentStep = eSteps.Step4
End Select
StepHandler()
End Sub
Private Sub ValidateNext()
Dim bError As Boolean = False
Dim sErrorMessage As String = String.Empty
Select Case eCurrentStep
Case eSteps.Step1
If ValidateName(txtName.Text, sErrorMessage) Then
eCurrentStep = eSteps.Step2
Else
bError = True
End If
Case eSteps.Step2
If ValidateProcessPath(txtProcessPath.Text, sErrorMessage) Then
eCurrentStep = eSteps.Step3
Else
bError = True
End If
Case eSteps.Step3
If ValidateSavePath(txtSavePath.Text, sErrorMessage) Then
lblIncludePath.Text = txtSavePath.Text
lblExcludePath.Text = txtSavePath.Text
If chkFolderSave.Checked = False Then
eCurrentStep = eSteps.Step3a
Else
eCurrentStep = eSteps.Step4
End If
Else
bError = True
End If
Case eSteps.Step3a
If ValidateSaveType(txtFileTypes.Text, sErrorMessage) Then
eCurrentStep = eSteps.Step4
Else
bError = True
End If
Case eSteps.Step4
oGameToSave = BuildSummaryAndData()
eCurrentStep = eSteps.Step5
Case eSteps.Step5
DoSave()
End Select
If bError Then mgrCommon.ShowMessage(sErrorMessage, MsgBoxStyle.Exclamation)
StepHandler()
End Sub
Private Sub ReadShortcut(ByVal sLinkPath As String)
Dim oShell As Shell32.Shell
Dim oFolder As Shell32.Folder
Dim sDirectory As String = Path.GetDirectoryName(sLinkPath)
Dim sFile As String = Path.GetFileName(sLinkPath)
Dim sExtension As String = Path.GetExtension(sFile)
Dim sTemp As String
If sExtension = ".lnk" Then
Try
oShell = New Shell32.Shell
oFolder = oShell.NameSpace(sDirectory)
If (Not oFolder Is Nothing) Then
Dim oFolderItem As Shell32.FolderItem
oFolderItem = oFolder.ParseName(sFile)
If (Not oFolderItem Is Nothing) Then
Dim oShellLink As Shell32.ShellLinkObject
oShellLink = oFolderItem.GetLink
If (Not oShellLink Is Nothing) Then
If eCurrentStep = eSteps.Step1 Then
txtName.Text = System.IO.Path.GetFileNameWithoutExtension(sFile)
txtProcessPath.Text = oShellLink.Target.Path
Else
txtProcessPath.Text = oShellLink.Target.Path
End If
End If
oShellLink = Nothing
End If
oFolderItem = Nothing
End If
oFolder = Nothing
oShell = Nothing
Catch e1 As Exception
If e1.Message.Contains("E_ACCESSDENIED") Then
sTemp = Path.GetTempPath & Path.GetFileName(sFile)
Try
File.Copy(sLinkPath, sTemp, True)
ReadShortcut(sTemp)
File.Delete(sTemp)
Catch e2 As Exception
mgrCommon.ShowMessage(frmAddWizard_ErrorWithShortcut, e2.Message, MsgBoxStyle.Critical)
End Try
Else
mgrCommon.ShowMessage(frmAddWizard_ErrorWithShortcut, e1.Message, MsgBoxStyle.Critical)
End If
End Try
Else
mgrCommon.ShowMessage(frmAddWizard_ErrorNotAShortcut, MsgBoxStyle.Information)
End If
End Sub
Private Sub ProcessBrowse()
Dim sDefaultFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
Dim sCurrentPath As String
Dim sNewPath As String
If txtProcessPath.Text <> String.Empty Then
sCurrentPath = Path.GetDirectoryName(txtProcessPath.Text)
If Directory.Exists(sCurrentPath) Then
sDefaultFolder = sCurrentPath
End If
End If
sNewPath = mgrCommon.OpenFileBrowser(frmAddWizard_ChooseProcess, "exe",
frmAddWizard_Executable, sDefaultFolder, False)
If sNewPath <> String.Empty Then txtProcessPath.Text = sNewPath
End Sub
Private Sub SavePathBrowse()
Dim sDefaultFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
Dim sCurrentPath As String = txtSavePath.Text
Dim sNewPath As String
If txtSavePath.Text <> String.Empty Then
If Directory.Exists(sCurrentPath) Then
sDefaultFolder = sCurrentPath
End If
End If
sNewPath = mgrCommon.OpenFolderBrowser(frmAddWizard_ChooseSavePath, sDefaultFolder, False)
If sNewPath <> String.Empty Then txtSavePath.Text = sNewPath
End Sub
Private Sub UpdateBuilderLabel(ByVal sBuilderString As String, ByVal lbl As Label)
Dim iCount As Integer = sBuilderString.Split(":").Length
If sBuilderString <> String.Empty And iCount > 0 Then
lbl.Text = mgrCommon.FormatString(frmAddWizard_ItemsSelectedMulti, iCount)
Else
lbl.Text = frmAddWizard_ItemsSelectedNone
End If
End Sub
Private Sub OpenBuilder(ByVal sFormText As String, ByRef txtBox As TextBox)
Dim frm As New frmIncludeExclude
frm.FormName = sFormText
frm.BuilderString = txtBox.Text
frm.RootFolder = txtSavePath.Text
frm.ShowDialog()
txtBox.Text = frm.BuilderString
End Sub
Private Sub OpenTags(ByVal oGame As clsGame)
Dim frm As New frmGameTags
Dim sMonitorIDs As New List(Of String)
sMonitorIDs.Add(oGame.ID)
frm.IDList = sMonitorIDs
frm.GameName = oGame.Name
frm.ShowDialog()
End Sub
Private Sub btnBack_Click(sender As Object, e As EventArgs) Handles btnBack.Click
ValidateBack()
End Sub
Private Sub btnNext_Click(sender As Object, e As EventArgs) Handles btnNext.Click
ValidateNext()
End Sub
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
Me.Close()
End Sub
Private Sub frmAddWizard_Load(sender As Object, e As EventArgs) Handles MyBase.Load
SetForm()
End Sub
Private Sub DropTarget_DragEnter(sender As Object, e As DragEventArgs) Handles txtName.DragEnter, txtProcessPath.DragEnter, lblStep1Instructions.DragEnter, lblStep2Instructions.DragEnter
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
e.Effect = DragDropEffects.Copy
End If
End Sub
Private Sub DropTarget_DragDrop(sender As Object, e As DragEventArgs) Handles txtName.DragDrop, txtProcessPath.DragDrop, lblStep1Instructions.DragDrop, lblStep2Instructions.DragDrop
Dim oFiles() As String = e.Data.GetData(DataFormats.FileDrop)
For Each sPath In oFiles
ReadShortcut(sPath)
Next
End Sub
Private Sub btnProcessBrowse_Click(sender As Object, e As EventArgs) Handles btnProcessBrowse.Click
ProcessBrowse()
End Sub
Private Sub btnSaveBrowse_Click(sender As Object, e As EventArgs) Handles btnSaveBrowse.Click
SavePathBrowse()
End Sub
Private Sub btnStep4Clear_Click(sender As Object, e As EventArgs)
txtExcludeList.Clear()
End Sub
Private Sub btnStep3aClear_Click(sender As Object, e As EventArgs)
txtFileTypes.Clear()
End Sub
Private Sub chkFolderSave_CheckedChanged(sender As Object, e As EventArgs) Handles chkFolderSave.CheckedChanged
txtFileTypes.Clear()
End Sub
Private Sub btnInclude_Click(sender As Object, e As EventArgs) Handles btnInclude.Click
OpenBuilder(frmAddWizard_Include, txtFileTypes)
UpdateBuilderLabel(txtFileTypes.Text, lblFileTypes)
End Sub
Private Sub btnExclude_Click(sender As Object, e As EventArgs) Handles btnExclude.Click
OpenBuilder(frmAddWizard_Exclude, txtExcludeList)
UpdateBuilderLabel(txtExcludeList.Text, lblExclude)
End Sub
End Class