371 lines
11 KiB
VB.net
371 lines
11 KiB
VB.net
Imports GBM.My.Resources
|
|
Imports System.IO
|
|
|
|
Public Class frmProcessManager
|
|
Dim hshProcessData As Hashtable
|
|
Private bIsDirty As Boolean = False
|
|
Private bIsLoading As Boolean = False
|
|
Private oCurrentProcess As clsProcess
|
|
|
|
Private Property IsDirty As Boolean
|
|
Get
|
|
Return bIsDirty
|
|
End Get
|
|
Set(value As Boolean)
|
|
bIsDirty = value
|
|
End Set
|
|
End Property
|
|
|
|
Private Property IsLoading As Boolean
|
|
Get
|
|
Return bIsLoading
|
|
End Get
|
|
Set(value As Boolean)
|
|
bIsLoading = value
|
|
End Set
|
|
End Property
|
|
|
|
Private Enum eModes As Integer
|
|
View = 1
|
|
Edit = 2
|
|
Add = 3
|
|
Disabled = 4
|
|
End Enum
|
|
|
|
Private eCurrentMode As eModes = eModes.Disabled
|
|
|
|
Private Property ProcessData As Hashtable
|
|
Get
|
|
Return hshProcessData
|
|
End Get
|
|
Set(value As Hashtable)
|
|
hshProcessData = value
|
|
End Set
|
|
End Property
|
|
|
|
Private Sub ProcessBrowse()
|
|
Dim sDefaultFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
|
|
Dim sCurrentPath As String = txtPath.Text
|
|
Dim sNewPath As String
|
|
|
|
If sCurrentPath <> String.Empty Then
|
|
sCurrentPath = Path.GetDirectoryName(txtPath.Text)
|
|
If Directory.Exists(sCurrentPath) Then
|
|
sDefaultFolder = sCurrentPath
|
|
End If
|
|
End If
|
|
|
|
sNewPath = mgrCommon.OpenFileBrowser("PM_Process", frmProcessManager_ChooseProcess, "exe",
|
|
frmProcessManager_Executable, sDefaultFolder, True)
|
|
|
|
If sNewPath <> String.Empty Then
|
|
txtPath.Text = sNewPath
|
|
End If
|
|
|
|
End Sub
|
|
|
|
Private Sub LoadData()
|
|
ProcessData = mgrProcess.ReadProcesses
|
|
lstProcesses.Items.Clear()
|
|
FormatAndFillList()
|
|
End Sub
|
|
|
|
Private Function HandleDirty() As MsgBoxResult
|
|
Dim oResult As MsgBoxResult
|
|
|
|
oResult = mgrCommon.ShowMessage(App_ConfirmDirty, MsgBoxStyle.YesNoCancel)
|
|
|
|
Select Case oResult
|
|
Case MsgBoxResult.Yes
|
|
IsDirty = False
|
|
Case MsgBoxResult.No
|
|
IsDirty = False
|
|
Case MsgBoxResult.Cancel
|
|
'No Change
|
|
End Select
|
|
|
|
Return oResult
|
|
|
|
End Function
|
|
|
|
Private Sub FormatAndFillList()
|
|
IsLoading = True
|
|
|
|
For Each oProcess As clsProcess In ProcessData.Values
|
|
lstProcesses.Items.Add(oProcess.Name)
|
|
Next
|
|
|
|
IsLoading = False
|
|
End Sub
|
|
|
|
Private Sub FillData()
|
|
IsLoading = True
|
|
|
|
oCurrentProcess = DirectCast(ProcessData(lstProcesses.SelectedItems(0).ToString), clsProcess)
|
|
|
|
txtID.Text = oCurrentProcess.ID
|
|
txtName.Text = oCurrentProcess.Name
|
|
txtPath.Text = oCurrentProcess.Path
|
|
txtArguments.Text = oCurrentProcess.Args
|
|
chkKillProcess.Checked = oCurrentProcess.Kill
|
|
|
|
IsLoading = False
|
|
End Sub
|
|
|
|
Private Sub DirtyCheck_ValueChanged(sender As Object, e As EventArgs)
|
|
If Not IsLoading Then
|
|
IsDirty = True
|
|
If Not eCurrentMode = eModes.Add Then EditProcess()
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub AssignDirtyHandlers(ByVal oCtls As GroupBox.ControlCollection)
|
|
For Each ctl As Control In oCtls
|
|
If TypeOf ctl Is TextBox Then
|
|
AddHandler DirectCast(ctl, TextBox).TextChanged, AddressOf DirtyCheck_ValueChanged
|
|
End If
|
|
Next
|
|
End Sub
|
|
|
|
Private Sub WipeControls(ByVal oCtls As GroupBox.ControlCollection)
|
|
For Each ctl As Control In oCtls
|
|
If TypeOf ctl Is TextBox Then
|
|
DirectCast(ctl, TextBox).Text = String.Empty
|
|
End If
|
|
Next
|
|
txtID.Text = String.Empty
|
|
End Sub
|
|
|
|
Private Sub ModeChange()
|
|
IsLoading = True
|
|
|
|
Select Case eCurrentMode
|
|
Case eModes.Add
|
|
grpProcess.Enabled = True
|
|
WipeControls(grpProcess.Controls)
|
|
btnSave.Enabled = True
|
|
btnCancel.Enabled = True
|
|
btnAdd.Enabled = False
|
|
btnDelete.Enabled = False
|
|
lstProcesses.Enabled = False
|
|
chkKillProcess.Checked = True
|
|
Case eModes.Edit
|
|
lstProcesses.Enabled = False
|
|
grpProcess.Enabled = True
|
|
btnSave.Enabled = True
|
|
btnCancel.Enabled = True
|
|
btnAdd.Enabled = False
|
|
btnDelete.Enabled = False
|
|
Case eModes.View
|
|
lstProcesses.Enabled = True
|
|
grpProcess.Enabled = True
|
|
btnSave.Enabled = False
|
|
btnCancel.Enabled = False
|
|
btnAdd.Enabled = True
|
|
btnDelete.Enabled = True
|
|
Case eModes.Disabled
|
|
lstProcesses.Enabled = True
|
|
WipeControls(grpProcess.Controls)
|
|
grpProcess.Enabled = False
|
|
btnSave.Enabled = False
|
|
btnCancel.Enabled = False
|
|
btnAdd.Enabled = True
|
|
btnDelete.Enabled = True
|
|
End Select
|
|
|
|
IsLoading = False
|
|
End Sub
|
|
|
|
Private Sub EditProcess()
|
|
eCurrentMode = eModes.Edit
|
|
ModeChange()
|
|
End Sub
|
|
|
|
Private Sub AddProcess()
|
|
eCurrentMode = eModes.Add
|
|
ModeChange()
|
|
txtName.Focus()
|
|
End Sub
|
|
|
|
Private Sub CancelEdit()
|
|
If bIsDirty Then
|
|
Select Case HandleDirty()
|
|
Case MsgBoxResult.Yes
|
|
SaveProcess()
|
|
Case MsgBoxResult.No
|
|
If lstProcesses.SelectedItems.Count > 0 Then
|
|
eCurrentMode = eModes.View
|
|
ModeChange()
|
|
FillData()
|
|
lstProcesses.Focus()
|
|
Else
|
|
eCurrentMode = eModes.Disabled
|
|
ModeChange()
|
|
End If
|
|
Case MsgBoxResult.Cancel
|
|
'Do Nothing
|
|
End Select
|
|
Else
|
|
If lstProcesses.SelectedItems.Count > 0 Then
|
|
eCurrentMode = eModes.View
|
|
ModeChange()
|
|
FillData()
|
|
lstProcesses.Focus()
|
|
Else
|
|
eCurrentMode = eModes.Disabled
|
|
ModeChange()
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub SaveProcess()
|
|
Dim oProcess As New clsProcess
|
|
Dim bSuccess As Boolean = False
|
|
|
|
If txtID.Text <> String.Empty Then
|
|
oProcess.ID = txtID.Text
|
|
End If
|
|
oProcess.Name = txtName.Text
|
|
oProcess.Path = txtPath.Text
|
|
oProcess.Args = txtArguments.Text
|
|
oProcess.Kill = chkKillProcess.Checked
|
|
|
|
Select Case eCurrentMode
|
|
Case eModes.Add
|
|
If CoreValidatation(oProcess) Then
|
|
bSuccess = True
|
|
mgrProcess.DoProcessAdd(oProcess)
|
|
eCurrentMode = eModes.View
|
|
End If
|
|
Case eModes.Edit
|
|
If CoreValidatation(oProcess) Then
|
|
bSuccess = True
|
|
mgrProcess.DoProcessUpdate(oProcess)
|
|
eCurrentMode = eModes.View
|
|
End If
|
|
End Select
|
|
|
|
If bSuccess Then
|
|
IsDirty = False
|
|
LoadData()
|
|
ModeChange()
|
|
If eCurrentMode = eModes.View Then lstProcesses.SelectedIndex = lstProcesses.Items.IndexOf(oProcess.Name)
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub DeleteProcess()
|
|
Dim oProcess As clsProcess
|
|
|
|
If lstProcesses.SelectedItems.Count > 0 Then
|
|
oProcess = DirectCast(ProcessData(lstProcesses.SelectedItems(0).ToString), clsProcess)
|
|
|
|
If mgrCommon.ShowMessage(frmProcessManager_ConfirmDelete, oProcess.Name, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
|
mgrProcess.DoProcessDelete(oProcess.ID)
|
|
LoadData()
|
|
eCurrentMode = eModes.Disabled
|
|
ModeChange()
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub SwitchProcess()
|
|
If lstProcesses.SelectedItems.Count > 0 Then
|
|
eCurrentMode = eModes.View
|
|
FillData()
|
|
ModeChange()
|
|
End If
|
|
End Sub
|
|
|
|
Private Function CoreValidatation(ByVal oProcess As clsProcess) As Boolean
|
|
If txtName.Text.Trim = String.Empty Then
|
|
mgrCommon.ShowMessage(frmProcessManager_ErrorValidName, MsgBoxStyle.Exclamation)
|
|
txtName.Focus()
|
|
Return False
|
|
End If
|
|
|
|
If txtPath.Text.Trim = String.Empty Then
|
|
mgrCommon.ShowMessage(frmProcessManager_ErrorValidPath, MsgBoxStyle.Exclamation)
|
|
txtPath.Focus()
|
|
Return False
|
|
Else
|
|
If Not File.Exists(txtPath.Text.Trim) Then
|
|
mgrCommon.ShowMessage(frmProcessManager_ErrorPathNotFound, MsgBoxStyle.Exclamation)
|
|
txtPath.Focus()
|
|
Return False
|
|
End If
|
|
End If
|
|
|
|
If mgrProcess.DoCheckDuplicate(oProcess.Name, oProcess.ID) Then
|
|
mgrCommon.ShowMessage(frmProcessManager_ErrorDupe, MsgBoxStyle.Exclamation)
|
|
txtName.Focus()
|
|
Return False
|
|
End If
|
|
|
|
Return True
|
|
End Function
|
|
|
|
Private Sub SetForm()
|
|
'Set Form Name
|
|
Me.Text = frmProcessManager_FormName
|
|
|
|
'Set Form Text
|
|
btnCancel.Text = frmProcessManager_btnCancel
|
|
btnSave.Text = frmProcessManager_btnSave
|
|
grpProcess.Text = frmProcessManager_grpProcess
|
|
btnProcessBrowse.Text = frmProcessManager_btnProcessBrowse
|
|
lblProcess.Text = frmProcessManager_lblPath
|
|
lblName.Text = frmProcessManager_lblName
|
|
btnClose.Text = frmProcessManager_btnClose
|
|
btnDelete.Text = frmProcessManager_btnDelete
|
|
btnAdd.Text = frmProcessManager_btnAdd
|
|
chkKillProcess.Text = frmProcessManager_chkKillProcess
|
|
End Sub
|
|
|
|
Private Sub frmProcessManager_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
|
SetForm()
|
|
LoadData()
|
|
ModeChange()
|
|
AssignDirtyHandlers(grpProcess.Controls)
|
|
End Sub
|
|
|
|
Private Sub lstProcesses_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstProcesses.SelectedIndexChanged
|
|
SwitchProcess()
|
|
End Sub
|
|
|
|
Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
|
|
AddProcess()
|
|
End Sub
|
|
|
|
Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click
|
|
DeleteProcess()
|
|
End Sub
|
|
|
|
Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
|
|
SaveProcess()
|
|
End Sub
|
|
|
|
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
|
|
CancelEdit()
|
|
End Sub
|
|
|
|
Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click
|
|
Me.Close()
|
|
End Sub
|
|
|
|
Private Sub btnPathBrowse_Click(sender As Object, e As EventArgs) Handles btnProcessBrowse.Click
|
|
ProcessBrowse()
|
|
End Sub
|
|
|
|
Private Sub frmProcessManager_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
|
|
If bIsDirty Then
|
|
Select Case HandleDirty()
|
|
Case MsgBoxResult.Yes
|
|
SaveProcess()
|
|
Case MsgBoxResult.No
|
|
'Do Nothing
|
|
Case MsgBoxResult.Cancel
|
|
e.Cancel = True
|
|
End Select
|
|
End If
|
|
End Sub
|
|
End Class |