Files
EgtCAM5/MTableDb/MTableDbVM.vb
T
Emmanuele Sassi db6662ec48 EgtCAM5 :
- Aggiunta ricerca su MTable lavorazioni ordinate.
- Aggiunta possibilità in MTable di spostare anche le righe della tabella associazioni.
- Migliorie varie.
2017-07-21 17:52:04 +00:00

1832 lines
72 KiB
VB.net

Imports System.Collections.ObjectModel
Imports System.ComponentModel
Imports System.IO
Imports EgtUILib
Imports System.Text.RegularExpressions
Public Class MTableDbVM
Inherits VMBase
Friend Enum Tables As Integer
LEFTTABLE = 1
RIGHTTABLE = 2
End Enum
Private m_FocusedTable As Tables = Tables.LEFTTABLE
Friend Property FocusedTable As Tables
Get
Return m_FocusedTable
End Get
Set(value As Tables)
m_FocusedTable = value
End Set
End Property
Private Shared m_refMTableDbVM As MTableDbVM
Public Shared ReadOnly Property refMTableDbVM As MTableDbVM
Get
Return m_refMTableDbVM
End Get
End Property
Friend Function SetRefMTableDbVM(MTableDbVM As MTableDbVM) As Boolean
m_refMTableDbVM = MTableDbVM
Return Not IsNothing(m_refMTableDbVM)
End Function
Private m_sPreviousActiveMachine As String
Private m_TablesList As New ObservableCollection(Of MTableListBoxItem)
Public Property TablesList As ObservableCollection(Of MTableListBoxItem)
Get
Return m_TablesList
End Get
Set(value As ObservableCollection(Of MTableListBoxItem))
m_TablesList = value
End Set
End Property
Private m_TextToSearch As String
Public Property TextToSearch As String
Get
Return m_TextToSearch
End Get
Set(value As String)
If value <> m_TextToSearch Then
If Not String.IsNullOrWhiteSpace(value) Then
' deseleziono tutto nella tabella delle lavorazioni ordinate
ResetRightTableSelection()
' recupero tabella selezionata
Dim SelectedMTable As MTableListBoxItem = Nothing
For TableIndex = 0 To m_TablesList.Count - 1
If m_TablesList(TableIndex).IsSelected Then
SelectedMTable = m_TablesList(TableIndex)
End If
Next
' se esiste, cerco il testo ed abilito il bottone reset
If Not IsNothing(SelectedMTable) Then
SearchText(value, SelectedMTable)
IsEnabledResetSearch = True
End If
Else
' altrimenti resetto la ricerca e disabilito il bottone reset
ResetSearchedRow()
IsEnabledResetSearch = False
End If
m_TextToSearch = value
NotifyPropertyChanged("TextToSearch")
End If
End Set
End Property
Private m_IsEnabledResetSearch As Boolean
Public Property IsEnabledResetSearch As Boolean
Get
Return m_IsEnabledResetSearch
End Get
Set(value As Boolean)
If value <> m_IsEnabledResetSearch Then
m_IsEnabledResetSearch = value
NotifyPropertyChanged("IsEnabledResetSearch")
End If
End Set
End Property
Private m_FocusSearchTextState As Boolean
Public Property FocusSearchTextState As Boolean
Get
Return m_FocusSearchTextState
End Get
Set(value As Boolean)
m_FocusSearchTextState = value
NotifyPropertyChanged("FocusSearchTextState")
End Set
End Property
Private m_AddRemoveRow_IsEnabled As Boolean
Public Property AddRemoveRow_IsEnabled As Boolean
Get
Return m_AddRemoveRow_IsEnabled
End Get
Set(value As Boolean)
If value <> m_AddRemoveRow_IsEnabled Then
m_AddRemoveRow_IsEnabled = value
NotifyPropertyChanged("AddRemoveRow_IsEnabled")
End If
End Set
End Property
Private m_MoveRow_IsEnabled As Boolean
Public Property MoveRow_IsEnabled As Boolean
Get
Return m_MoveRow_IsEnabled
End Get
Set(value As Boolean)
If value <> m_MoveRow_IsEnabled Then
m_MoveRow_IsEnabled = value
NotifyPropertyChanged("MoveRow_IsEnabled")
End If
End Set
End Property
Private m_Group_IsEnabled As Boolean
Public Property Group_IsEnabled As Boolean
Get
Return m_Group_IsEnabled
End Get
Set(value As Boolean)
If value <> m_Group_IsEnabled Then
m_Group_IsEnabled = value
NotifyPropertyChanged("Group_IsEnabled")
End If
End Set
End Property
Private m_Position_IsEnabled As Boolean
Public Property Position_IsEnabled As Boolean
Get
Return m_Position_IsEnabled
End Get
Set(value As Boolean)
If value <> m_Position_IsEnabled Then
m_Position_IsEnabled = value
NotifyPropertyChanged("Position_IsEnabled")
End If
End Set
End Property
#Region "Messages"
Public ReadOnly Property Title As String
Get
Return EgtMsg(MSG_MAINWINDOW + 20)
End Get
End Property
Public ReadOnly Property MachListHeader As String
Get
Return EgtMsg(MSG_DOORS + 8)
End Get
End Property
Public ReadOnly Property MachineNameTxBl As String
Get
Return EgtMsg(MSG_DOORS + 9)
End Get
End Property
Public ReadOnly Property NcGenerateTxBl As String
Get
Return EgtMsg(MSG_DOORS + 10)
End Get
End Property
Public ReadOnly Property MakeRawTxBl As String
Get
Return EgtMsg(MSG_DOORS + 11)
End Get
End Property
Public ReadOnly Property OnHdr As String
Get
Return EgtMsg(MSG_DOORS + 12)
End Get
End Property
Public ReadOnly Property GeomNameHdr As String
Get
Return EgtMsg(MSG_DOORS + 13)
End Get
End Property
Public ReadOnly Property OperationHdr As String
Get
Return EgtMsg(MSG_DOORS + 14)
End Get
End Property
Public ReadOnly Property MIdHdr As String
Get
Return EgtMsg(MSG_DOORS + 15)
End Get
End Property
Public ReadOnly Property ShiftHdr As String
Get
Return EgtMsg(MSG_DOORS + 16)
End Get
End Property
Public ReadOnly Property MachTypeHdr As String
Get
Return EgtMsg(MSG_DOORS + 17)
End Get
End Property
Public ReadOnly Property MachHdr As String
Get
Return EgtMsg(MSG_DOORS + 18)
End Get
End Property
Public ReadOnly Property MachUpHdr As String
Get
Return EgtMsg(MSG_DOORS + 19)
End Get
End Property
Public ReadOnly Property MachDownHdr As String
Get
Return EgtMsg(MSG_DOORS + 20)
End Get
End Property
Public ReadOnly Property GroupHdr As String
Get
Return EgtMsg(MSG_DOORS + 27)
End Get
End Property
Public ReadOnly Property PropertyHdr As String
Get
Return EgtMsg(MSG_DOORS + 28)
End Get
End Property
Public ReadOnly Property MachiningHdr As String
Get
Return EgtMsg(MSG_DOORS + 29)
End Get
End Property
Public ReadOnly Property JoinHdr As String
Get
Return EgtMsg(MSG_DOORS + 30)
End Get
End Property
Public ReadOnly Property AddMachBtn As String
Get
Return EgtMsg(MSG_DOORS + 21)
End Get
End Property
Public ReadOnly Property RemoveMachBtn As String
Get
Return EgtMsg(MSG_DOORS + 22)
End Get
End Property
Public ReadOnly Property AddMachiningBtn As String
Get
Return EgtMsg(MSG_DOORS + 23)
End Get
End Property
Public ReadOnly Property RemoveMachiningBtn As String
Get
Return EgtMsg(MSG_DOORS + 24)
End Get
End Property
Public ReadOnly Property CurrMsg As String
Get
Return EgtMsg(MSG_DOORS + 25)
End Get
End Property
Public ReadOnly Property AssHdr As String
Get
Return EgtMsg(MSG_DOORS + 25)
End Get
End Property
Public ReadOnly Property OrdMachHdr As String
Get
Return EgtMsg(MSG_DOORS + 25)
End Get
End Property
#End Region ' Messages
#Region "ToolTip"
'Proprietà ToolTip
Public ReadOnly Property NewTableToolTip As String
Get
Return EgtMsg(MSG_DOORS + 1)
End Get
End Property
Public ReadOnly Property SaveTableToolTip As String
Get
Return EgtMsg(MSG_DOORS + 2)
End Get
End Property
Public ReadOnly Property SaveAsTableToolTip As String
Get
Return EgtMsg(MSG_DOORS + 3)
End Get
End Property
Public ReadOnly Property RemoveTableToolTip As String
Get
Return EgtMsg(MSG_DOORS + 4)
End Get
End Property
Public ReadOnly Property SetActiveTableToolTip As String
Get
Return EgtMsg(MSG_DOORS + 26)
End Get
End Property
#End Region ' ToolTip
' Definizione comandi
Private m_cmdNewTable As ICommand
Private m_cmdSaveTable As ICommand
Private m_cmdSaveTableAs As ICommand
Private m_cmdRemoveTable As ICommand
Private m_cmdSetActiveTable As ICommand
Private m_cmdResetSearch As ICommand
Private m_cmdSearchPrevious As ICommand
Private m_cmdSearchNext As ICommand
Private m_cmdFocusSearch As ICommand
Private m_cmdAddMach As ICommand
Private m_cmdRemoveMach As ICommand
Private m_cmdAddRow As ICommand
Private m_cmdRemoveRow As ICommand
Private m_cmdMoveRowUp As ICommand
Private m_cmdMoveRowDown As ICommand
Private m_cmdGroup As ICommand
Private m_cmdPosition As ICommand
Private m_cmdCloseMTableWindow As ICommand
#Region "CONSTRUCTOR"
Sub New()
' Creo riferimento a questa classe
SetRefMTableDbVM(Me)
' Passo all'item della lista il delegato alla funzuione che permette di cancellare una lavorazione
MTableListBoxItem.m_delSaveMTable = AddressOf SaveTable
MTableMachineListBoxItem.m_delCloseMTableWnd = AddressOf CloseWindow
MTableListBoxItem.m_delCloseMTableWnd = AddressOf CloseWindow
MTableAssociationGridBoxItem.m_delCloseMTableWnd = AddressOf CloseWindow
MTableListBoxItem.m_delSearchInMTable = AddressOf SearchInNewlySelectedMTable
' recupero macchina corrente all'apertura della finestra per poterla ripristinare alla fine
EgtGetCurrMachineName(m_sPreviousActiveMachine)
' Azzero indice per nome tabella di default
MTableListBoxItem.NewMTableIndex = 0
' Creo liste operazioni e proprietà
MTableAssociationGridBoxItem.LoadOperationList()
MTableMachiningGridBoxItem.LoadPropertyList()
' Carico lista tabelle
UpdateTables()
Dim bActiveMTableFound As Boolean = False
For Index = 0 To m_TablesList.Count - 1
If m_TablesList(Index).ActiveTable Then
m_TablesList(Index).IsSelected = True
m_TablesList(Index).SelMachine = m_TablesList(Index).ActiveMachinesList(0)
bActiveMTableFound = True
Exit For
End If
Next
If EgtVerifyMachinesDir() AndAlso Not bActiveMTableFound AndAlso m_TablesList.Count > 0 Then
m_TablesList(0).IsSelected = True
m_TablesList(0).SelMachine = m_TablesList(0).ActiveMachinesList(0)
End If
End Sub
#End Region
#Region "METHODS"
Private Sub UpdateTables()
m_TablesList.Clear()
' se trovo la cartella carico la lista di tabelle
Dim FileTableList As ReadOnlyCollection(Of String) = My.Computer.FileSystem.GetFiles(IniFile.m_sTablesRoot)
For Index As Integer = 0 To FileTableList.Count - 1
If Path.GetExtension(FileTableList(Index)).ToLower = ".mtl" Then
m_TablesList.Add(New MTableListBoxItem(Path.GetFileNameWithoutExtension(FileTableList(Index)), FileTableList(Index)))
VerifyNewName(Path.GetFileNameWithoutExtension(FileTableList(Index)))
End If
Next
SetActiveTable()
End Sub
Private Sub VerifyNewName(sNewName As String)
Dim sNameIndex As String = Regex.Match(sNewName, "MTable_(\d+)").Groups(1).Value
Dim nNameIndex As Integer = 0
If Not String.IsNullOrEmpty(sNameIndex) Then
Integer.TryParse(sNameIndex, nNameIndex)
End If
If nNameIndex > MTableListBoxItem.NewMTableIndex Then
MTableListBoxItem.NewMTableIndex = nNameIndex
End If
End Sub
Private Const MTABLENAME As String = "MTableName"
Private Const MTNAME As String = "MTName"
Private Sub SetActiveTable()
Dim ActiveMTableName As String = String.Empty
GetPrivateProfileString(S_DOORS, K_CURRMTABLE, "", ActiveMTableName)
'Dim ActiveMTableFilePath As String = Path.GetDirectoryName(IniFile.m_sTablesRoot) & "\CurrMTable.lua"
'If File.Exists(ActiveMTableFilePath) Then
' Dim ReadFile As String() = File.ReadAllLines(ActiveMTableFilePath)
' For LineIndex As Integer = 0 To ReadFile.Count - 1
' If ReadFile(LineIndex).Contains(MTABLENAME) Then
' ActiveMTableName = TableUtility.SearchKey(ReadFile(LineIndex), MTNAME)
' Exit For
' End If
' Next
For Index As Integer = 0 To m_TablesList.Count - 1
If m_TablesList(Index).TableName = ActiveMTableName Then
m_TablesList(Index).ActiveTable = True
Exit For
End If
Next
'End If
End Sub
Private Sub SearchText(sText As String, SelectedMTable As MTableListBoxItem)
Dim bFirst As Boolean = True
' cerco nella tabella associazioni
For AssociationIndex = 0 To SelectedMTable.AssociationList.Count - 1
Dim CurrAssociation As MTableAssociationGridBoxItem = SelectedMTable.AssociationList(AssociationIndex)
If CurrAssociation.Name.ToLower.Contains(sText) Then
If bFirst Then
CurrAssociation.IsSelected = True
bFirst = False
End If
CurrAssociation.IsValidForSearch = True
Else
CurrAssociation.IsValidForSearch = False
End If
Next
' cerco nella tabella lavorazioni ordinate
For MachineIndex = 0 To SelectedMTable.ActiveMachinesList.Count - 1
For MachiningIndex = 0 To SelectedMTable.ActiveMachinesList(MachineIndex).MachiningList.Count - 1
Dim CurrMachining As MTableMachiningGridBoxItem = SelectedMTable.ActiveMachinesList(MachineIndex).MachiningList(MachiningIndex)
If CurrMachining.Geometry.ToLower.Contains(sText) Then
CurrMachining.IsValidForSearch = True
Else
CurrMachining.IsValidForSearch = False
End If
Next
Next
End Sub
Private Sub SearchInNewlySelectedMTable(SelectedMTable As MTableListBoxItem)
If Not String.IsNullOrWhiteSpace(m_TextToSearch) Then
SearchText(m_TextToSearch, SelectedMTable)
IsEnabledResetSearch = True
End If
End Sub
#Region "SelectRow"
Friend Sub LeftSelect(SelectedRow As MTableMachiningGridBoxItem)
' se è già selezionato, lo deseleziono
If SelectedRow.IsSelected Then
' verifico se è in mezzo a due gruppi selezionati
Dim bIsPrevSel As Boolean = False
Dim bIsNextSel As Boolean = False
For TableIndex = 0 To m_TablesList.Count - 1
If m_TablesList(TableIndex).IsSelected Then
' trovo posizione dell'elemento selezionato
Dim nSelItemIndex As Integer = m_TablesList(TableIndex).SelMachine.MachiningList.IndexOf(SelectedRow)
' cerco il primo precedente non dello stesso gruppo
For MachiningIndex = nSelItemIndex - 1 To 0 Step -1
Dim CurrMachining As MTableMachiningGridBoxItem = m_TablesList(TableIndex).SelMachine.MachiningList(MachiningIndex)
If CurrMachining.GroupId <> SelectedRow.GroupId Then
bIsPrevSel = CurrMachining.IsSelected
Exit For
End If
Next
' verifico se i successivi sono dello stesso gruppo
For MachiningIndex = nSelItemIndex + 1 To m_TablesList(TableIndex).SelMachine.MachiningList.Count - 1
Dim CurrMachining As MTableMachiningGridBoxItem = m_TablesList(TableIndex).SelMachine.MachiningList(MachiningIndex)
If CurrMachining.GroupId <> SelectedRow.GroupId Then
bIsNextSel = CurrMachining.IsSelected
Exit For
End If
Next
Exit For
End If
Next
If bIsPrevSel And bIsNextSel Then Return
SelectGroup(SelectedRow)
' verifico cosa è rimasto selezionato e gestisco di conseguenza i bottoni
VerifyDeselection()
Return
End If
' verifico se ci sono elementi già selezionati
Dim bFirstIsGroup As Boolean = False
Dim bLastIsGroup As Boolean = False
Dim bZeroItemFound As Boolean = False
Dim bItemFound As Boolean = False
Dim nSelFirstGroupId As Integer = -1
Dim nSelLastGroupId As Integer = -1
For TableIndex = 0 To m_TablesList.Count - 1
If m_TablesList(TableIndex).IsSelected Then
For MachiningIndex = 0 To m_TablesList(TableIndex).SelMachine.MachiningList.Count - 1
Dim CurrMachining As MTableMachiningGridBoxItem = m_TablesList(TableIndex).SelMachine.MachiningList(MachiningIndex)
If CurrMachining.IsSelected Then
If CurrMachining.GroupId = 0 Then
' se cerco di selezionare un secondo elemento di gruppo zero, esco
If SelectedRow.GroupId = 0 Then
Return
Else
bZeroItemFound = True
End If
Else
' se ci sono già un elemento con gruppo zero ed un gruppo ordinato selezionati, esco
If bZeroItemFound Then
Return
End If
If nSelFirstGroupId = -1 Then
' se c'è già un altro gruppo ordinato selezionato
nSelFirstGroupId = CurrMachining.GroupId
nSelLastGroupId = CurrMachining.GroupId
bItemFound = True
' verifico se sono selezionati gruppi o singole lavorazioni
If MachiningIndex >= 1 Then
If m_TablesList(TableIndex).SelMachine.MachiningList(MachiningIndex - 1).GroupId <> CurrMachining.GroupId Then
bFirstIsGroup = True
End If
Else
bFirstIsGroup = True
End If
If MachiningIndex < m_TablesList(TableIndex).SelMachine.MachiningList.Count - 1 Then
If m_TablesList(TableIndex).SelMachine.MachiningList(MachiningIndex + 1).GroupId <> CurrMachining.GroupId Then
bLastIsGroup = True
End If
Else
bLastIsGroup = True
End If
ElseIf CurrMachining.GroupId = nSelLastGroupId Or (CurrMachining.GroupId = nSelLastGroupId + 1 And CurrMachining.IsSelected) Then
' se il successivo ha lo stesso gruppo, o il gruppo successivo ed è selezionato
nSelLastGroupId = CurrMachining.GroupId
' verifico se sono selezionati gruppi o singole lavorazioni
If MachiningIndex = m_TablesList(TableIndex).SelMachine.MachiningList.Count - 1 Then
bLastIsGroup = True
ElseIf m_TablesList(TableIndex).SelMachine.MachiningList(MachiningIndex + 1).GroupId <> CurrMachining.GroupId Then
bLastIsGroup = True
End If
End If
End If
End If
Next
Exit For
End If
Next
' se ho trovato un elemento
If bItemFound Then
' se non è adiacente e ( non ha gruppo zero e indice inizio e fine selezione coincidono) e indice di inizio e fine non sono gruppi, esco
If (Not (SelectedRow.GroupId <> 0 And (nSelFirstGroupId - 1 = SelectedRow.GroupId Or nSelLastGroupId + 1 = SelectedRow.GroupId)) And
Not (SelectedRow.GroupId = 0 And nSelFirstGroupId = nSelLastGroupId)) Or
Not (bFirstIsGroup And bLastIsGroup And nSelFirstGroupId <> -1) Then
Return
End If
End If
' procedo con la selezione dell'elemento
SelectGroup(SelectedRow)
' gestisco bottoni
' se ho selezionato un gruppo 0 e c'è un gruppo già selezionato
If SelectedRow.GroupId = 0 And nSelFirstGroupId = nSelLastGroupId And bItemFound Then
ManageMachiningButtons(False, True, False, False)
ElseIf SelectedRow.GroupId <> 0 And nSelFirstGroupId = nSelLastGroupId And bZeroItemFound Then
ManageMachiningButtons(False, True, False, False)
ElseIf SelectedRow.GroupId <> 0 And bItemFound Then
ManageMachiningButtons(False, False, True, False)
ElseIf SelectedRow.GroupId <> 0 And Not bItemFound Then
ManageMachiningButtons(False, False, False, True)
Else
ManageMachiningButtons(False, False, False, False)
End If
End Sub
Private Sub VerifyDeselection()
' verifico se ci sono elementi già selezionati
Dim bFirstIsGroup As Boolean = False
Dim bLastIsGroup As Boolean = False
Dim bZeroItemFound As Boolean = False
Dim bItemFound As Boolean = False
Dim nSelFirstGroupId As Integer = -1
Dim nSelLastGroupId As Integer = -1
For TableIndex = 0 To m_TablesList.Count - 1
If m_TablesList(TableIndex).IsSelected Then
For MachiningIndex = 0 To m_TablesList(TableIndex).SelMachine.MachiningList.Count - 1
Dim CurrMachining As MTableMachiningGridBoxItem = m_TablesList(TableIndex).SelMachine.MachiningList(MachiningIndex)
If CurrMachining.IsSelected Then
If CurrMachining.GroupId = 0 Then
bZeroItemFound = True
Else
If nSelFirstGroupId = -1 Then
nSelFirstGroupId = CurrMachining.GroupId
nSelLastGroupId = CurrMachining.GroupId
bItemFound = True
' verifico se sono selezionati gruppi o singole lavorazioni
If MachiningIndex >= 1 Then
If m_TablesList(TableIndex).SelMachine.MachiningList(MachiningIndex - 1).GroupId <> CurrMachining.GroupId Then
bFirstIsGroup = True
End If
Else
bFirstIsGroup = True
End If
If MachiningIndex < m_TablesList(TableIndex).SelMachine.MachiningList.Count - 1 Then
If m_TablesList(TableIndex).SelMachine.MachiningList(MachiningIndex + 1).GroupId <> CurrMachining.GroupId Then
bLastIsGroup = True
End If
Else
bLastIsGroup = True
End If
ElseIf CurrMachining.GroupId = nSelLastGroupId Or (CurrMachining.GroupId = nSelLastGroupId + 1 And CurrMachining.IsSelected) Then
' se il successivo ha lo stesso gruppo, o il gruppo successivo ed è selezionato
nSelLastGroupId = CurrMachining.GroupId
' verifico se sono selezionati gruppi o singole lavorazioni
If m_TablesList(TableIndex).SelMachine.MachiningList.Count - 1 = MachiningIndex OrElse m_TablesList(TableIndex).SelMachine.MachiningList(MachiningIndex + 1).GroupId <> CurrMachining.GroupId Then
bLastIsGroup = True
End If
End If
End If
End If
Next
Exit For
End If
Next
' gestisco bottoni
' se ho selezionato un gruppo 0 e c'è un gruppo già selezionato
If bItemFound And nSelFirstGroupId = nSelLastGroupId Then
ManageMachiningButtons(False, False, False, True)
Else
ManageMachiningButtons(False, False, False, False)
End If
End Sub
Private Sub SelectGroup(SelectedRow As MTableMachiningGridBoxItem)
If IsNothing(SelectedRow) Then Return
' seleziono l'elemento cliccato
SelectedRow.IsSelected = Not SelectedRow.IsSelected
' se il gruppo è zero non seleziono le altre righe
If SelectedRow.GroupId = 0 Then Return
For TableIndex = 0 To m_TablesList.Count - 1
If m_TablesList(TableIndex).IsSelected Then
' trovo posizione dell'elemento selezionato
Dim nSelItemIndex As Integer = m_TablesList(TableIndex).SelMachine.MachiningList.IndexOf(SelectedRow)
' verifico se i precedenti sono dello stesso gruppo
For MachiningIndex = nSelItemIndex - 1 To 0 Step -1
Dim CurrMachining As MTableMachiningGridBoxItem = m_TablesList(TableIndex).SelMachine.MachiningList(MachiningIndex)
If CurrMachining.GroupId = SelectedRow.GroupId Then
CurrMachining.IsSelected = SelectedRow.IsSelected
Else
Exit For
End If
Next
' verifico se i successivi sono dello stesso gruppo
For MachiningIndex = nSelItemIndex + 1 To m_TablesList(TableIndex).SelMachine.MachiningList.Count - 1
Dim CurrMachining As MTableMachiningGridBoxItem = m_TablesList(TableIndex).SelMachine.MachiningList(MachiningIndex)
If CurrMachining.GroupId = SelectedRow.GroupId Then
CurrMachining.IsSelected = SelectedRow.IsSelected
Else
Exit For
End If
Next
Exit For
End If
Next
End Sub
Friend Sub RightSelect(SelectedRow As MTableMachiningGridBoxItem)
Dim bIsRowSelected As Boolean = SelectedRow.IsSelected
' deseleziono tutto
ResetRightTableSelection()
If Not bIsRowSelected Then
' seleziono la lavorazione clickata
SelectedRow.IsSelected = True
' attivo solo tasti di movimento
ManageMachiningButtons(False, False, False, True)
Else
' disattivo tutti i tasti
ManageMachiningButtons(False, False, False, False)
End If
End Sub
Friend Sub ResetRightTableSelection()
For TableIndex = 0 To m_TablesList.Count - 1
If m_TablesList(TableIndex).IsSelected Then
For MachiningIndex = 0 To m_TablesList(TableIndex).SelMachine.MachiningList.Count - 1
Dim CurrMachining As MTableMachiningGridBoxItem = m_TablesList(TableIndex).SelMachine.MachiningList(MachiningIndex)
CurrMachining.IsSelected = False
Next
Exit For
End If
Next
End Sub
Friend Sub ResetLeftTableSelection()
For TableIndex = 0 To m_TablesList.Count - 1
If m_TablesList(TableIndex).IsSelected Then
For AssociationIndex = 0 To m_TablesList(TableIndex).AssociationList.Count - 1
Dim CurrAssociation As MTableAssociationGridBoxItem = m_TablesList(TableIndex).AssociationList(AssociationIndex)
CurrAssociation.IsSelected = False
Next
Exit For
End If
Next
End Sub
#End Region ' SelectGroupCommand
Friend Sub ManageMachiningButtons(bAddRemoveRow As Boolean, bPosition As Boolean, bGroup As Boolean, bMove As Boolean)
AddRemoveRow_IsEnabled = bAddRemoveRow
Position_IsEnabled = bPosition
Group_IsEnabled = bGroup
MoveRow_IsEnabled = bMove
End Sub
#End Region
#Region "COMMANDS"
#Region "NewTableCommand"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property NewTableCommand As ICommand
Get
If m_cmdNewTable Is Nothing Then
m_cmdNewTable = New Command(AddressOf NewTable)
End If
Return m_cmdNewTable
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub NewTable(param As Object)
Dim NewMTable As MTableListBoxItem = New MTableListBoxItem("MTable_" & (MTableListBoxItem.NewMTableIndex + 1).ToString, String.Empty)
m_TablesList.Add(NewMTable)
MTableListBoxItem.NewMTableIndex += 1
If Not IsNothing(param) Then
Dim SelectedMTable As MTableListBoxItem = DirectCast(param, MTableListBoxItem)
SelectedMTable.IsSelected = False
End If
NewMTable.IsSelected = True
End Sub
#End Region ' NewTableCommand
#Region "SaveTableCommand"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property SaveTableCommand As ICommand
Get
If m_cmdSaveTable Is Nothing Then
m_cmdSaveTable = New Command(AddressOf SaveTable)
End If
Return m_cmdSaveTable
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub SaveTable(param As Object)
Dim SelectedMTable As MTableListBoxItem = DirectCast(param, MTableListBoxItem)
If IsNothing(SelectedMTable) Then Return
If String.IsNullOrEmpty(SelectedMTable.TableNamePath) Then
SaveTableAs(SelectedMTable)
Else
' verifico di essere collegato alla cartella doors
If Not VerifyDoorsDir() Then
CloseWindow()
Return
End If
TableUtility.WriteDoorTable(SelectedMTable, SelectedMTable.TableNamePath)
SelectedMTable.IsModifiedReset()
End If
End Sub
#End Region ' SaveTableCommand
#Region "SaveTableAsCommand"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property SaveTableAsCommand As ICommand
Get
If m_cmdSaveTableAs Is Nothing Then
m_cmdSaveTableAs = New Command(AddressOf SaveTableAs)
End If
Return m_cmdSaveTableAs
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub SaveTableAs(param As Object)
Dim SelectedMTable As MTableListBoxItem = DirectCast(param, MTableListBoxItem)
If IsNothing(SelectedMTable) Then Return
' verifico di essere collegato alla cartella doors
If Not VerifyDoorsDir() Then
CloseWindow()
Return
End If
Dim sFile As String = String.Empty
If SaveTableAsDialog(sFile, SelectedMTable.TableName) Then
SelectedMTable.IsModifiedReset()
VerifyNewName(Path.GetFileNameWithoutExtension(sFile))
TableUtility.WriteDoorTable(SelectedMTable, sFile)
UpdateTables()
' seleziono la tabella appena salvata
For Index As Integer = 0 To m_TablesList.Count - 1
If m_TablesList(Index).TableNamePath = sFile Then
m_TablesList(Index).IsSelected = True
End If
Next
End If
End Sub
Public Function SaveTableAsDialog(ByRef sPath As String, sTableName As String) As Boolean
' Direttorio corrente per MTable
Dim sDir As String = IniFile.m_sTablesRoot
' Apertura dialogo di scelta file DDF
Dim SaveFileDialogView As New EgtWPFLib5.EgtSaveFileDialog
SaveFileDialogView.Title = EgtMsg(MSG_DOORS + 5)
SaveFileDialogView.Extension = ".mtl"
SaveFileDialogView.Directory = sDir
SaveFileDialogView.FileName = sTableName
If Not SaveFileDialogView.EgtShowDialog Then
Return False
End If
sPath = SaveFileDialogView.FileName
Return True
End Function
#End Region ' SaveTableAsCommand
#Region "RemoveTableCommand"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property RemoveTableCommand As ICommand
Get
If m_cmdRemoveTable Is Nothing Then
m_cmdRemoveTable = New Command(AddressOf RemoveTable)
End If
Return m_cmdRemoveTable
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub RemoveTable(param As Object)
Dim SelectedMTable As MTableListBoxItem = DirectCast(param, MTableListBoxItem)
If IsNothing(SelectedMTable) Then Return
' verifico di essere collegato alla cartella doors
If Not VerifyDoorsDir() Then
CloseWindow()
Return
End If
' cancello tutte le tavole nella lista impostate su non visibili (quelle rimaste quando viene creata una nuova tabella e passando ad un altra non la si salva)
Dim Index As Integer = m_TablesList.Count - 1
While Index >= 0
If m_TablesList(Index).Visibility <> Visibility.Visible Then
m_TablesList.RemoveAt(Index)
End If
Index -= 1
End While
' verifico se la tabella selezionata è quella attiva
If SelectedMTable.ActiveTable Then
MessageBox.Show(EgtMsg(MSG_DOORSERRORS + 8) & vbCrLf & EgtMsg(MSG_DOORSERRORS + 9), "", MessageBoxButton.OK, MessageBoxImage.Stop)
Exit Sub
End If
' chiedo conferma prima di cancellare la tabella
If MessageBox.Show(EgtMsg(MSG_DOORS + 6), "", MessageBoxButton.YesNo, MessageBoxImage.Question) = MessageBoxResult.Yes Then
If Not String.IsNullOrEmpty(SelectedMTable.TableNamePath) Then
File.Delete(SelectedMTable.TableNamePath)
End If
Dim SelectedTableIndex As Integer = m_TablesList.IndexOf(SelectedMTable)
m_TablesList.RemoveAt(SelectedTableIndex)
If SelectedTableIndex > 0 Then
TablesList(SelectedTableIndex - 1).IsSelected = True
End If
End If
End Sub
#End Region ' RemoveTableCommand
#Region "SetActiveTableCommand"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property SetActiveTableCommand As ICommand
Get
If m_cmdSetActiveTable Is Nothing Then
m_cmdSetActiveTable = New Command(AddressOf SetActiveTable)
End If
Return m_cmdSetActiveTable
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub SetActiveTable(param As Object)
Dim SelectedMTable As MTableListBoxItem = DirectCast(param, MTableListBoxItem)
If IsNothing(SelectedMTable) Then Return
If WritePrivateProfileString(S_DOORS, K_CURRMTABLE, SelectedMTable.TableName) Then
For Index As Integer = 0 To m_TablesList.Count - 1
If m_TablesList(Index).TableName = SelectedMTable.TableName Then
m_TablesList(Index).ActiveTable = True
Else
m_TablesList(Index).ActiveTable = False
End If
Next
End If
'' Scrivo il file di configurazione con il nome di questa tavola
'Dim FileContent As String() = File.ReadAllLines(Path.GetDirectoryName(IniFile.m_sTablesRoot) & "\" & CURRMTABLE_FILE)
'Dim NewTableFileContent As New List(Of String)
'For LineIndex As Integer = 0 To FileContent.Count - 1
' Dim sCurrLine As String = FileContent(LineIndex)
' sCurrLine = sCurrLine.Replace(TableUtility.DATETIME, System.DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"))
' sCurrLine = sCurrLine.Replace(TableUtility.TABLENAME, SelectedMTable.TableName)
' NewTableFileContent.Add(sCurrLine)
'Next
'File.WriteAllLines(Path.ChangeExtension(Path.GetDirectoryName(IniFile.m_sTablesRoot) & "\" & CURRMTABLE_FILE, ".lua"), NewTableFileContent, Text.Encoding.UTF8)
End Sub
#End Region ' SetActiveTableCommand
#Region "ResetSearchCommand"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property ResetSearchCommand As ICommand
Get
If m_cmdResetSearch Is Nothing Then
m_cmdResetSearch = New Command(AddressOf ResetSearch)
End If
Return m_cmdResetSearch
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub ResetSearch()
TextToSearch = String.Empty
End Sub
Public Sub ResetSearchedRow()
' analizzo tabella associazioni
For TableIndex = 0 To m_TablesList.Count - 1
If m_TablesList(TableIndex).IsSelected Then
For AssociationIndex = 0 To m_TablesList(TableIndex).AssociationList.Count - 1
Dim CurrAssociation As MTableAssociationGridBoxItem = m_TablesList(TableIndex).AssociationList(AssociationIndex)
CurrAssociation.IsValidForSearch = False
Next
Exit For
End If
Next
' analizzo tabella lavorazioni ordinate
For TableIndex = 0 To m_TablesList.Count - 1
If m_TablesList(TableIndex).IsSelected Then
For MachineIndex = 0 To m_TablesList(TableIndex).ActiveMachinesList.Count - 1
For MachiningIndex = 0 To m_TablesList(TableIndex).ActiveMachinesList(MachineIndex).MachiningList.Count - 1
Dim CurrMachining As MTableMachiningGridBoxItem = m_TablesList(TableIndex).ActiveMachinesList(MachineIndex).MachiningList(MachiningIndex)
CurrMachining.IsValidForSearch = False
Next
Next
Exit For
End If
Next
End Sub
#End Region ' ResetSearchCommand
#Region "SearchPreviousCommand"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property SearchPreviousCommand As ICommand
Get
If m_cmdSearchPrevious Is Nothing Then
m_cmdSearchPrevious = New Command(AddressOf SearchPrevious)
End If
Return m_cmdSearchPrevious
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub SearchPrevious()
If String.IsNullOrWhiteSpace(m_TextToSearch) Then
Return
End If
Dim bFound As Boolean = False
Dim LastSearchedRow As MTableAssociationGridBoxItem = Nothing
For TableIndex = 0 To m_TablesList.Count - 1
If m_TablesList(TableIndex).IsSelected Then
For AssociationIndex = 0 To m_TablesList(TableIndex).AssociationList.Count - 1
Dim CurrAssociation As MTableAssociationGridBoxItem = m_TablesList(TableIndex).AssociationList(AssociationIndex)
If CurrAssociation.IsSelected Then
If Not IsNothing(LastSearchedRow) Then
LastSearchedRow.IsSelected = True
End If
Return
End If
If CurrAssociation.IsValidForSearch Then
LastSearchedRow = CurrAssociation
End If
Next
Exit For
End If
Next
End Sub
#End Region ' SearchPreviousCommand
#Region "SearchNextCommand"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property SearchNextCommand As ICommand
Get
If m_cmdSearchNext Is Nothing Then
m_cmdSearchNext = New Command(AddressOf SearchNext)
End If
Return m_cmdSearchNext
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub SearchNext()
If String.IsNullOrWhiteSpace(m_TextToSearch) Then
Return
End If
Dim bFound As Boolean = False
For TableIndex = 0 To m_TablesList.Count - 1
If m_TablesList(TableIndex).IsSelected Then
For AssociationIndex = 0 To m_TablesList(TableIndex).AssociationList.Count - 1
Dim CurrAssociation As MTableAssociationGridBoxItem = m_TablesList(TableIndex).AssociationList(AssociationIndex)
If bFound AndAlso CurrAssociation.IsValidForSearch Then
CurrAssociation.IsSelected = True
Return
End If
If CurrAssociation.IsSelected Then
bFound = True
End If
Next
Exit For
End If
Next
End Sub
#End Region ' SearchNextCommand
#Region "FocusSearchCommand"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property FocusSearchCommand As ICommand
Get
If m_cmdFocusSearch Is Nothing Then
m_cmdFocusSearch = New Command(AddressOf FocusSearch)
End If
Return m_cmdFocusSearch
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub FocusSearch()
FocusSearchTextState = Not m_FocusSearchTextState
End Sub
#End Region ' FocusSearchCommand
#Region "AddMachCommand"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property AddMachCommand As ICommand
Get
If m_cmdAddMach Is Nothing Then
m_cmdAddMach = New Command(AddressOf AddMach)
End If
Return m_cmdAddMach
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub AddMach(param As Object)
Dim SelectedMTable As MTableListBoxItem = DirectCast(param, MTableListBoxItem)
If IsNothing(SelectedMTable) Then Return
SelectedMTable.SharedMachIndex += 1
SelectedMTable.ActiveMachinesList.Add(New MTableMachineListBoxItem(String.Empty, False, False, SelectedMTable.SharedMachIndex))
SelectedMTable.MachIdList.Add(SelectedMTable.SharedMachIndex)
End Sub
#End Region ' AddMachCommand
#Region "RemoveMachCommand"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property RemoveMachCommand As ICommand
Get
If m_cmdRemoveMach Is Nothing Then
m_cmdRemoveMach = New Command(AddressOf RemoveMach)
End If
Return m_cmdRemoveMach
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub RemoveMach(param As Object)
Dim SelectedMTable As MTableListBoxItem = DirectCast(param, MTableListBoxItem)
If Not IsNothing(SelectedMTable) AndAlso SelectedMTable.ActiveMachinesList.Count > 1 Then
' Chiedo conferma cancellazione associazione macchina
If MessageBox.Show(EgtMsg(MSG_DOORSERRORS + 12), EgtMsg(MSG_DOORSERRORS + 11), MessageBoxButton.YesNo, MessageBoxImage.Question) <> MessageBoxResult.Yes Then
Return
End If
SelectedMTable.ActiveMachinesList.RemoveAt(SelectedMTable.SharedMachIndex - 1)
SelectedMTable.MachIdList.RemoveAt(SelectedMTable.SharedMachIndex - 1)
SelectedMTable.SharedMachIndex -= 1
End If
End Sub
#End Region ' RemoveMachCommand
#Region "AddRowCommand"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property AddRowCommand As ICommand
Get
If m_cmdAddRow Is Nothing Then
m_cmdAddRow = New Command(AddressOf AddRow)
End If
Return m_cmdAddRow
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub AddRow(param As Object)
Dim SelectedMTable As MTableListBoxItem = DirectCast(param, MTableListBoxItem)
If Not IsNothing(SelectedMTable) AndAlso Not IsNothing(SelectedMTable.SelectedAssociation) Then
Dim SelectedIndex As Integer = SelectedMTable.AssociationList.IndexOf(SelectedMTable.SelectedAssociation)
Dim NewEmptyRow As MTableAssociationGridBoxItem = New MTableAssociationGridBoxItem(False, String.Empty, 1, 0, String.Empty, Nothing, String.Empty, Nothing, String.Empty, Nothing, String.Empty, SelectedMTable.ActiveMachinesList, SelectedMTable.AssociationList)
SelectedMTable.AssociationList.Insert(SelectedIndex + 1, NewEmptyRow)
SelectedMTable.SelectedAssociation = NewEmptyRow
SelectedMTable.NotifyPropertyChanged("SelectedAssociation")
End If
End Sub
#End Region ' AddRowCommand
#Region "RemoveRowCommand"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property RemoveRowCommand As ICommand
Get
If m_cmdRemoveRow Is Nothing Then
m_cmdRemoveRow = New Command(AddressOf RemoveRow)
End If
Return m_cmdRemoveRow
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub RemoveRow(param As Object)
Dim SelectedMTable As MTableListBoxItem = DirectCast(param, MTableListBoxItem)
If Not IsNothing(SelectedMTable) AndAlso SelectedMTable.AssociationList.Count > 1 Then
If IsNothing(SelectedMTable.SelectedAssociation) Then Return
' Chiedo conferma cancellazione riga di associazione
If MessageBox.Show(EgtMsg(MSG_DOORSERRORS + 10), EgtMsg(MSG_DOORSERRORS + 11), MessageBoxButton.YesNo, MessageBoxImage.Question) <> MessageBoxResult.Yes Then
Return
End If
Dim SelectedIndex As Integer = SelectedMTable.AssociationList.IndexOf(SelectedMTable.SelectedAssociation)
' rimuovo Item associati dalla lisa lavorazioni ordinata
RemoveMachItem(SelectedIndex, SelectedMTable, SelectedMTable.AssociationList(SelectedIndex).RefMachItem)
RemoveMachItem(SelectedIndex, SelectedMTable, SelectedMTable.AssociationList(SelectedIndex).RefMachUpItem)
RemoveMachItem(SelectedIndex, SelectedMTable, SelectedMTable.AssociationList(SelectedIndex).RefMachDwItem)
SelectedMTable.AssociationList.RemoveAt(SelectedIndex)
If Not SelectedIndex < SelectedMTable.AssociationList.Count Then
SelectedIndex = SelectedMTable.AssociationList.Count - 1
End If
SelectedMTable.SelectedAssociation = SelectedMTable.AssociationList(SelectedIndex)
SelectedMTable.NotifyPropertyChanged("SelectedAssociation")
End If
End Sub
Private Sub RemoveMachItem(SelectedIndex As Integer, SelectedMTable As MTableListBoxItem, RefMachItem As MTableMachiningGridBoxItem)
' Se ha un Item a cui si riferisce nella lista ordinata delle lavorazioni
If Not IsNothing(RefMachItem) Then
' verifico se viene usato anche da altre associazioni
For AssIndex = 0 To SelectedMTable.AssociationList.Count - 1
If SelectedIndex <> AssIndex And (SelectedMTable.AssociationList(AssIndex).RefMachItem Is RefMachItem Or
SelectedMTable.AssociationList(AssIndex).RefMachUpItem Is RefMachItem Or
SelectedMTable.AssociationList(AssIndex).RefMachDwItem Is RefMachItem) Then
Return
End If
Next
For MachIndex = 0 To SelectedMTable.ActiveMachinesList.Count - 1
If SelectedMTable.ActiveMachinesList(MachIndex).MachId = SelectedMTable.AssociationList(SelectedIndex).MachId Then
MTableMachiningGridBoxItem.Remove(RefMachItem, SelectedMTable.ActiveMachinesList(MachIndex).MachiningList)
End If
Next
End If
End Sub
#End Region ' RemoveRowCommand
#Region "MoveRowUpCommand"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property MoveRowUpCommand As ICommand
Get
If m_cmdMoveRowUp Is Nothing Then
m_cmdMoveRowUp = New Command(AddressOf MoveRowUp)
End If
Return m_cmdMoveRowUp
End Get
End Property
''' <summary>
''' Right table Movement
''' </summary>
Public Sub MoveRowUp(param As Object)
Dim SelectedMTable As MTableListBoxItem = DirectCast(param, MTableListBoxItem)
If IsNothing(SelectedMTable) Then Return
If m_FocusedTable = Tables.LEFTTABLE Then
LeftTableMoveRowUp(SelectedMTable)
Else
RightTableMoveRowUp(SelectedMTable)
End If
End Sub
' Left table Movement
Public Sub LeftTableMoveRowUp(SelectedMTable As MTableListBoxItem)
Dim SelectedIndex As Integer = SelectedMTable.AssociationList.IndexOf(SelectedMTable.SelectedAssociation)
If SelectedIndex >= 1 Then
SelectedMTable.AssociationList.Move(SelectedIndex, SelectedIndex - 1)
End If
End Sub
Public Sub RightTableMoveRowUp(SelectedMTable As MTableListBoxItem)
SelectedMTable.m_IsMachiningOrdModified = True
MoveRow(SelectedMTable, True)
End Sub
Private Sub MoveRow(SelectedMTable As MTableListBoxItem, bMoveUp As Boolean)
Dim bIsSingleSelected As Boolean = False
Dim bIsGroupSelected As Boolean = False
Dim nLastItemIndex As Integer = -1
For TableIndex = 0 To m_TablesList.Count - 1
If m_TablesList(TableIndex).IsSelected Then
Dim bFirstSelItem As Boolean = True
For MachiningIndex = 0 To m_TablesList(TableIndex).SelMachine.MachiningList.Count - 1
Dim CurrMachining As MTableMachiningGridBoxItem = SelectedMTable.SelMachine.MachiningList(MachiningIndex)
If CurrMachining.IsSelected Then
If bIsSingleSelected Then
bIsGroupSelected = True
Exit For
Else
bIsSingleSelected = True
nLastItemIndex = CurrMachining.GroupId
If MachiningIndex > 0 AndAlso SelectedMTable.SelMachine.MachiningList(MachiningIndex - 1).GroupId = CurrMachining.GroupId Then
Exit For
ElseIf MachiningIndex = SelectedMTable.SelMachine.MachiningList.Count - 1 Then
bIsGroupSelected = True
ElseIf SelectedMTable.SelMachine.MachiningList(MachiningIndex + 1).GroupId <> CurrMachining.GroupId Then
bIsGroupSelected = True
Exit For
End If
End If
Else
If bIsGroupSelected Then
Exit For
End If
End If
Next
End If
Next
For TableIndex = 0 To m_TablesList.Count - 1
If m_TablesList(TableIndex).IsSelected Then
If bMoveUp Then
MoveUp(TableIndex, bIsGroupSelected, SelectedMTable)
Else
MoveDown(TableIndex, bIsGroupSelected, SelectedMTable)
End If
Exit For
End If
Next
End Sub
Private Function CalcPrevGroup(SelectedIndex As Integer, SelMachining As MTableMachiningGridBoxItem, bIsGroupSelected As Boolean, SelectedMTable As MTableListBoxItem) As Integer
Dim PositionIndex As Integer = 0
' cerco il primo precedente non dello stesso gruppo
Dim nPrevGroupIndex As Integer = -1
For MachiningIndex = SelectedIndex - 1 To 0 Step -1
Dim CurrMachining As MTableMachiningGridBoxItem = SelectedMTable.SelMachine.MachiningList(MachiningIndex)
If nPrevGroupIndex = -1 Then
If CurrMachining.GroupId <> SelMachining.GroupId Then
nPrevGroupIndex = CurrMachining.GroupId
PositionIndex += 1
If bIsGroupSelected Then
'aumento di uno l'indice di gruppo del gruppo precedente
CurrMachining.GroupId += 1
End If
End If
Else
If CurrMachining.GroupId = nPrevGroupIndex Then
PositionIndex += 1
If bIsGroupSelected Then
'aumento di uno l'indice di gruppo del gruppo precedente
CurrMachining.GroupId += 1
End If
Else
Exit For
End If
End If
Next
Return PositionIndex
End Function
Private Function CalcNextGroup(SelectedIndex As Integer, SelMachining As MTableMachiningGridBoxItem, bIsGroupSelected As Boolean, SelectedMTable As MTableListBoxItem) As Integer
Dim PositionIndex As Integer = 0
' cerco il primo successivo non dello stesso gruppo
Dim nNextGroupIndex As Integer = -1
For MachiningIndex = SelectedIndex + 1 To SelectedMTable.SelMachine.MachiningList.Count - 1
Dim CurrMachining As MTableMachiningGridBoxItem = SelectedMTable.SelMachine.MachiningList(MachiningIndex)
If nNextGroupIndex = -1 Then
If CurrMachining.GroupId <> SelMachining.GroupId Then
nNextGroupIndex = CurrMachining.GroupId
PositionIndex += 1
If bIsGroupSelected Then
'aumento di uno l'indice di gruppo del gruppo precedente
CurrMachining.GroupId -= 1
End If
End If
Else
If CurrMachining.GroupId = nNextGroupIndex Then
PositionIndex += 1
If bIsGroupSelected Then
'aumento di uno l'indice di gruppo del gruppo precedente
CurrMachining.GroupId -= 1
End If
Else
Exit For
End If
End If
Next
Return PositionIndex
End Function
Private Sub MoveUp(TableIndex As Integer, bIsGroupSelected As Boolean, SelectedMTable As MTableListBoxItem)
Dim nFirstMovedIndex As Integer = -1
Dim nLastMovedIndex As Integer = -1
Dim bExitFromGroup As Boolean = False
Dim nDelta As Integer = -1
For MachiningIndex = 0 To m_TablesList(TableIndex).SelMachine.MachiningList.Count - 1
Dim CurrMachining As MTableMachiningGridBoxItem = SelectedMTable.SelMachine.MachiningList(MachiningIndex)
' se singola lavorazione che esce dal gruppo, incremento tutte le successive
If bExitFromGroup Then
CurrMachining.GroupId += 1
End If
If CurrMachining.IsSelected And Not bExitFromGroup Then
' calcolo indice item corrente
Dim SelectedIndex As Integer = SelectedMTable.SelMachine.MachiningList.IndexOf(CurrMachining)
If SelectedIndex >= 1 AndAlso SelectedMTable.SelMachine.MachiningList(SelectedIndex - 1).GroupId > 0 Then
If bIsGroupSelected Then
' Calcolo dimensione gruppo precedente per sapere di quante posizioni spostarlo
nDelta = If(nDelta = -1, CalcPrevGroup(SelectedIndex, CurrMachining, bIsGroupSelected, SelectedMTable), nDelta)
' diminuisco di uno l'indice di quello selezionato
CurrMachining.GroupId -= 1
Else
' assegno spostamento se singola lavorazione selezionata
nDelta = 1
' se il precedente ha gruppo diverso
If SelectedMTable.SelMachine.MachiningList(SelectedIndex - 1).GroupId <> CurrMachining.GroupId Then
bExitFromGroup = True
End If
End If
If nFirstMovedIndex = -1 Then
nFirstMovedIndex = SelectedIndex
nLastMovedIndex = SelectedIndex
Else
nLastMovedIndex = SelectedIndex
End If
If Not bExitFromGroup Then SelectedMTable.SelMachine.MachiningList.Move(SelectedIndex, SelectedIndex - nDelta)
ElseIf SelectedIndex = 0 And Not bIsGroupSelected Then
nFirstMovedIndex = SelectedIndex
bExitFromGroup = True
Else
Return
End If
End If
Next
' Aggiorno visualizzazione indici spostati (per converter che li nasconde)
For Index = nFirstMovedIndex - nDelta To nLastMovedIndex
Dim CurrMachining As MTableMachiningGridBoxItem = SelectedMTable.SelMachine.MachiningList(Index)
CurrMachining.NotifyPropertyChanged("GroupId")
CurrMachining.NotifyPropertyChanged("PropertyPar")
Next
End Sub
Private Sub MoveDown(TableIndex As Integer, bIsGroupSelected As Boolean, SelectedMTable As MTableListBoxItem)
Dim nFirstMovedIndex As Integer = -1
Dim nLastMovedIndex As Integer = -1
Dim bExitFromGroup As Boolean = False
Dim nDelta As Integer = -1
For MachiningIndex = m_TablesList(TableIndex).SelMachine.MachiningList.Count - 1 To 0 Step -1
Dim CurrMachining As MTableMachiningGridBoxItem = SelectedMTable.SelMachine.MachiningList(MachiningIndex)
If CurrMachining.IsSelected And Not bExitFromGroup Then
' calcolo indice item corrente
Dim SelectedIndex As Integer = SelectedMTable.SelMachine.MachiningList.IndexOf(CurrMachining)
If SelectedIndex < SelectedMTable.SelMachine.MachiningList.Count - 1 AndAlso SelectedMTable.SelMachine.MachiningList(SelectedIndex + 1).GroupId > 0 Then
If bIsGroupSelected Then
' Calcolo dimensione gruppo precedente per sapere di quante posizioni spostarlo
nDelta = If(nDelta = -1, CalcNextGroup(SelectedIndex, CurrMachining, bIsGroupSelected, SelectedMTable), nDelta)
' diminuisco di uno l'indice di quello selezionato
CurrMachining.GroupId += 1
Else
' assegno spostamento se singola lavorazione selezionata
nDelta = 1
' se il successivo ha gruppo diverso
If SelectedMTable.SelMachine.MachiningList(SelectedIndex + 1).GroupId <> CurrMachining.GroupId Then
bExitFromGroup = True
End If
End If
If nFirstMovedIndex = -1 Then
nFirstMovedIndex = SelectedIndex
nLastMovedIndex = SelectedIndex
Else
nLastMovedIndex = SelectedIndex
End If
If Not bExitFromGroup Then SelectedMTable.SelMachine.MachiningList.Move(SelectedIndex, SelectedIndex + nDelta)
ElseIf SelectedIndex = SelectedMTable.SelMachine.MachiningList.Count - 1 And Not bIsGroupSelected Then
nFirstMovedIndex = SelectedIndex
bExitFromGroup = True
Exit For
Else
Return
End If
End If
Next
' se singola lavorazione che esce dal gruppo, incremento tutte le successive
If bExitFromGroup Then
For MachiningIndex = nFirstMovedIndex To m_TablesList(TableIndex).SelMachine.MachiningList.Count - 1
Dim CurrMachining As MTableMachiningGridBoxItem = SelectedMTable.SelMachine.MachiningList(MachiningIndex)
CurrMachining.GroupId += 1
Next
End If
' Aggiorno visualizzazione indici spostati (per converter che li nasconde)
For Index = nFirstMovedIndex + nDelta To nLastMovedIndex Step -1
Dim CurrMachining As MTableMachiningGridBoxItem = SelectedMTable.SelMachine.MachiningList(Index)
CurrMachining.NotifyPropertyChanged("GroupId")
CurrMachining.NotifyPropertyChanged("PropertyPar")
Next
End Sub
#End Region ' MoveRowUpCommand
#Region "MoveRowDownCommand"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property MoveRowDownCommand As ICommand
Get
If m_cmdMoveRowDown Is Nothing Then
m_cmdMoveRowDown = New Command(AddressOf MoveRowDown)
End If
Return m_cmdMoveRowDown
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub MoveRowDown(param As Object)
Dim SelectedMTable As MTableListBoxItem = DirectCast(param, MTableListBoxItem)
If IsNothing(SelectedMTable) Then Return
If m_FocusedTable = Tables.LEFTTABLE Then
LeftTableMoveRowDown(SelectedMTable)
Else
RigthTableMoveRowDown(SelectedMTable)
End If
End Sub
' Spostamento sulla tabella delle associazioni
Public Sub LeftTableMoveRowDown(SelectedMTable As MTableListBoxItem)
Dim SelectedIndex As Integer = SelectedMTable.AssociationList.IndexOf(SelectedMTable.SelectedAssociation)
If SelectedIndex < SelectedMTable.AssociationList.Count - 1 Then
SelectedMTable.AssociationList.Move(SelectedIndex, SelectedIndex + 1)
End If
End Sub
' Spostamento sulla tabella ordine lavorazioni
Public Sub RigthTableMoveRowDown(SelectedMTable As MTableListBoxItem)
SelectedMTable.m_IsMachiningOrdModified = True
MoveRow(SelectedMTable, False)
End Sub
#End Region ' MoveRowDownCommand
#Region "GroupCommand"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property GroupCommand As ICommand
Get
If m_cmdGroup Is Nothing Then
m_cmdGroup = New Command(AddressOf Group)
End If
Return m_cmdGroup
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub Group(param As Object)
Dim SelectedMTable As MTableListBoxItem = DirectCast(param, MTableListBoxItem)
If IsNothing(SelectedMTable) Then Return
SelectedMTable.m_IsMachiningOrdModified = True
Dim bGroupStarted As Boolean = False
Dim bGroupEnded As Boolean = False
Dim nGroupIndex As Integer = 0
Dim nFirstGroupIndex As Integer = -1
Dim nLastGroupIndex As Integer = -1
For MachIndex = 0 To SelectedMTable.SelMachine.MachiningList.Count - 1
Dim CurrMachining As MTableMachiningGridBoxItem = SelectedMTable.SelMachine.MachiningList(MachIndex)
If CurrMachining.IsSelected Then
If CurrMachining.GroupId = 0 Then
' Bisogna posizionare le lavorazioni prima di raggrupparle
Return
End If
If bGroupStarted Then
nLastGroupIndex = SelectedMTable.SelMachine.MachiningList.IndexOf(CurrMachining)
CurrMachining.GroupId = nGroupIndex
Else
nFirstGroupIndex = CurrMachining.GroupId
nGroupIndex = CurrMachining.GroupId
bGroupStarted = True
End If
Else
If bGroupStarted And Not bGroupEnded Then
bGroupEnded = True
nLastGroupIndex = SelectedMTable.SelMachine.MachiningList.IndexOf(CurrMachining) - 1
nGroupIndex = CurrMachining.GroupId - nGroupIndex - 1
End If
End If
If bGroupEnded Then
CurrMachining.GroupId = CurrMachining.GroupId - nGroupIndex
End If
Next
' se solo uno dei due gruppi ha una proprietà la tengo, altrimenti la cancello
Dim FirstGroupItem As MTableMachiningGridBoxItem = Nothing
Dim LastGroupItem As MTableMachiningGridBoxItem = Nothing
For MachiningIndex = 0 To SelectedMTable.SelMachine.MachiningList.Count - 1
Dim CurrMachining As MTableMachiningGridBoxItem = SelectedMTable.SelMachine.MachiningList(MachiningIndex)
If CurrMachining.GroupId = nFirstGroupIndex Then
FirstGroupItem = CurrMachining
Exit For
End If
Next
LastGroupItem = SelectedMTable.SelMachine.MachiningList(nLastGroupIndex)
If FirstGroupItem.PropertyPar = String.Empty Then
FirstGroupItem.PropertyPar = LastGroupItem.PropertyPar
ElseIf LastGroupItem.PropertyPar = String.Empty Or FirstGroupItem.PropertyPar = LastGroupItem.PropertyPar Then
FirstGroupItem.PropertyPar = FirstGroupItem.PropertyPar
Else
FirstGroupItem.PropertyPar = String.Empty
End If
For MachiningIndex = 0 To SelectedMTable.SelMachine.MachiningList.Count - 1
Dim CurrMachining As MTableMachiningGridBoxItem = SelectedMTable.SelMachine.MachiningList(MachiningIndex)
If CurrMachining.GroupId = nFirstGroupIndex Then
CurrMachining.NotifyPropertyChanged("PropertyPar")
End If
Next
End Sub
#End Region ' GroupCommand
#Region "PositionCommand"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property PositionCommand As ICommand
Get
If m_cmdPosition Is Nothing Then
m_cmdPosition = New Command(AddressOf Position)
End If
Return m_cmdPosition
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub Position(param As Object)
Dim SelectedMTable As MTableListBoxItem = DirectCast(param, MTableListBoxItem)
If IsNothing(SelectedMTable) Then Return
SelectedMTable.m_IsMachiningOrdModified = True
Dim MachToMove As MTableMachiningGridBoxItem = Nothing
Dim MachRef As MTableMachiningGridBoxItem = Nothing
Dim OldIndex As Integer = -1
Dim NewIndex As Integer = -1
Dim bMoved As Boolean = False
For MachIndex = 0 To SelectedMTable.SelMachine.MachiningList.Count - 1
Dim CurrMachining As MTableMachiningGridBoxItem = SelectedMTable.SelMachine.MachiningList(MachIndex)
If Not bMoved Then
If NewIndex > 0 Then
If CurrMachining.GroupId <> MachRef.GroupId Then
SelectedMTable.SelMachine.MachiningList.Move(OldIndex, NewIndex)
MachToMove.GroupId = CurrMachining.GroupId
CurrMachining.GroupId += 1
bMoved = True
End If
End If
If CurrMachining.IsSelected Then
If OldIndex >= 0 Then
NewIndex = SelectedMTable.SelMachine.MachiningList.IndexOf(CurrMachining)
MachRef = CurrMachining
CurrMachining.IsSelected = False
End If
If CurrMachining.GroupId = 0 Then
MachToMove = CurrMachining
OldIndex = SelectedMTable.SelMachine.MachiningList.IndexOf(CurrMachining)
ElseIf NewIndex = 0 Then
NewIndex = SelectedMTable.SelMachine.MachiningList.IndexOf(CurrMachining)
End If
End If
If NewIndex > 0 And Not bMoved Then
If SelectedMTable.SelMachine.MachiningList.IndexOf(CurrMachining) = SelectedMTable.SelMachine.MachiningList.Count - 1 Then
SelectedMTable.SelMachine.MachiningList.Move(OldIndex, NewIndex)
MachToMove.GroupId = CurrMachining.GroupId + 1
bMoved = True
End If
End If
Else
CurrMachining.GroupId += 1
End If
Next
' Rivaluto bottoni che dipendono da selezione
ManageMachiningButtons(False, False, False, True)
End Sub
#End Region ' PositionCommand
#Region "CloseMTableWindowCommand"
''' <summary>
''' Returns a command that remove the current selected machining.
''' </summary>
Public ReadOnly Property CloseMTableWindowCommand() As ICommand
Get
If m_cmdCloseMTableWindow Is Nothing Then
m_cmdCloseMTableWindow = New Command(AddressOf CloseMTableWindow)
End If
Return m_cmdCloseMTableWindow
End Get
End Property
''' <summary>
''' Manage the MachiningDb closing. This method is invoked by the CloseMachiningDbCommand.
''' </summary>
Public Sub CloseMTableWindow(param As Object)
Dim SelectedMTable As MTableListBoxItem = DirectCast(param, MTableListBoxItem)
If Not IsNothing(SelectedMTable) AndAlso (SelectedMTable.IsModified() OrElse String.IsNullOrEmpty(SelectedMTable.m_TableNamePath)) Then
' chiedo se salvare la tabella corrente prima di passare alla successiva
If MessageBox.Show(EgtMsg(MSG_DOORS + 7), "", MessageBoxButton.YesNo, MessageBoxImage.Question) = MessageBoxResult.Yes Then
SaveTable(SelectedMTable)
End If
End If
CloseWindow()
End Sub
Public Sub CloseWindow()
' ripristino la macchina selezionata all'apertura della finestra
EgtSetCurrMachine(m_sPreviousActiveMachine)
' Chiusura finestra
MTableListBoxItem.m_delSaveMTable = Nothing
MTableMachineListBoxItem.m_delCloseMTableWnd = Nothing
MTableAssociationGridBoxItem.m_delCloseMTableWnd = Nothing
For Each Window In Application.Current.Windows
If TypeOf Window Is MTableDbV Then
Dim MTableDbView As MTableDbV = DirectCast(Window, MTableDbV)
MTableDbView.DataContext = Nothing
MTableDbView.Close()
End If
Next
End Sub
#End Region ' CloseMTableWindowCommand
#End Region
End Class
Public Class GroupConverter
Implements IMultiValueConverter
Public Function Convert(value() As Object, targetType As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements IMultiValueConverter.Convert
Dim CurrItem As MTableMachiningGridBoxItem = DirectCast(value(1), MTableMachiningGridBoxItem)
Dim CurrItemIndex As Integer = -1
For TableIndex = 0 To MTableDbVM.refMTableDbVM.TablesList.Count - 1
If MTableDbVM.refMTableDbVM.TablesList(TableIndex).IsSelected Then
CurrItemIndex = MTableDbVM.refMTableDbVM.TablesList(TableIndex).SelMachine.MachiningList.IndexOf(CurrItem)
If CurrItem.GroupId = 0 Then
Return CurrItem.GroupId.ToString
End If
If CurrItemIndex >= 1 Then
If MTableDbVM.refMTableDbVM.TablesList(TableIndex).SelMachine.MachiningList(CurrItemIndex - 1).GroupId = CurrItem.GroupId Then
Return String.Empty
Else
Return CurrItem.GroupId.ToString
End If
Else
Return CurrItem.GroupId.ToString
End If
End If
Next
Return CurrItem.GroupId.ToString
End Function
Public Function ConvertBack(value As Object, targetType() As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object() Implements IMultiValueConverter.ConvertBack
Throw New NotImplementedException
End Function
End Class
Public Class PropertyConverter
Implements IMultiValueConverter
Public Function Convert(value() As Object, targetType As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements IMultiValueConverter.Convert
Dim CurrItem As MTableMachiningGridBoxItem = DirectCast(value(1), MTableMachiningGridBoxItem)
Dim CurrItemIndex As Integer = -1
For TableIndex = 0 To MTableDbVM.refMTableDbVM.TablesList.Count - 1
If MTableDbVM.refMTableDbVM.TablesList(TableIndex).IsSelected Then
CurrItemIndex = MTableDbVM.refMTableDbVM.TablesList(TableIndex).SelMachine.MachiningList.IndexOf(CurrItem)
If CurrItemIndex >= 1 Then
If CurrItem.PropertyPar = String.Empty Then
Return String.Empty
End If
If MTableDbVM.refMTableDbVM.TablesList(TableIndex).SelMachine.MachiningList(CurrItemIndex - 1).GroupId = CurrItem.GroupId Then
Return String.Empty
Else
Return CurrItem.PropertyPar
End If
Else
Return CurrItem.PropertyPar
End If
End If
Next
Return CurrItem.PropertyPar
End Function
Public Function ConvertBack(value As Object, targetType() As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object() Implements IMultiValueConverter.ConvertBack
Throw New NotImplementedException
End Function
End Class