Files
EgtCAM5/StatusBar/MyStatusBarVM.vb
T
Renzo Lanza 7eb8240749 EgtCAM5 2.2i2 :
- MachGroupPanelVM, MachinePanelVM, StatusBarVM spostati in EgtWPFLib5. Ora qua sono presenti le versioni My_ che ereditano quelle della Libreria. 
- ComboBox della Macchina corrente spostata in MachinePanel (accanto a Db Ut./Lav./SetUp). 
- modificato OptionPanel in modo da gestire i nuovi DrawOptionPanel e MachiningOptionPanel in base alle modalità DISEGNA e LAVORA. 
- ogni Expander di MachiningOptionPanel ora ha il suo VM e il suo V. 
- nuova gestione degli Expander di MachiningOptionPanel tramite funzioni Init e Exit. 
- barra TOPTRAY ora può estendersi su una seconda riga in base a larghezza finestra. 
- eliminati molti Application.Msn.Register/NotifyColleagues. Ora le funzioni che chiamavano sono chiamate tramite i riferimenti in Map. 
- corretta selezione superfici quando si sceglie Nuova Lav. in LAVORA.
2020-09-14 09:42:54 +00:00

602 lines
25 KiB
VB.net

Imports System.Collections.ObjectModel
Imports System.Runtime.InteropServices
Imports System.IO
Imports EgtUILib
Imports System.Threading
Imports EgtWPFLib5
Public Class MyStatusBarVM
Inherits StatusBarVM
#Region "FIELDS & PROPERTIES"
' Funzioni di callback per output in interfaccia da LUA
Private m_ProcEventsCallback As New ProcessEventsCallback(AddressOf ProcessEvents)
Private m_OutTextCallback As New OutTextCallback(AddressOf OutText)
' GRAPHICAL ELEMENTS
'Private m_StatusOutput As String
'Public Property StatusOutput As String
' Get
' Return m_StatusOutput
' End Get
' Set(value As String)
' m_StatusOutput = value
' NotifyPropertyChanged("StatusOutput")
' End Set
'End Property
'Private m_StatusCurrPos As String
'Public Property StatusCurrPos As String
' Get
' Return m_StatusCurrPos
' End Get
' Set(value As String)
' m_StatusCurrPos = value
' NotifyPropertyChanged("StatusCurrPos")
' End Set
'End Property
'Private m_StatusProgress As Integer
'Public Property StatusProgress As Integer
' Get
' Return m_StatusProgress
' End Get
' Set(value As Integer)
' m_StatusProgress = value
' NotifyPropertyChanged("StatusProgress")
' End Set
'End Property
'Private m_StatusStopIsEnabled As Boolean
'Public Property StatusStopIsEnabled As Boolean
' Get
' Return m_StatusStopIsEnabled
' End Get
' Set(value As Boolean)
' m_StatusStopIsEnabled = value
' NotifyPropertyChanged("StatusStopIsEnabled")
' End Set
'End Property
Private m_GridDimensionText As String
Public Property GridDimensionText As String
Get
Return m_GridDimensionText
End Get
Set(value As String)
m_GridDimensionText = value
NotifyPropertyChanged("GridDimensionText")
End Set
End Property
Private m_StatusGridText As String
Public Property StatusGridText As String
Get
Return m_StatusGridText
End Get
Set(value As String)
m_StatusGridText = value
NotifyPropertyChanged("StatusGridText")
End Set
End Property
Private m_CurrPosTypeText As String
Public Property CurrPosTypeText As String
Get
Return m_CurrPosTypeText
End Get
Set(value As String)
m_CurrPosTypeText = value
NotifyPropertyChanged("CurrPosTypeText")
End Set
End Property
'Private m_StatusUnitsText As String
'Public Property StatusUnitsText As String
' Get
' Return m_StatusUnitsText
' End Get
' Set(value As String)
' m_StatusUnitsText = value
' NotifyPropertyChanged("StatusUnitsText")
' End Set
'End Property
'Private m_SnapPointTypeText As String
'Public Property SnapPointTypeText As String
' Get
' Return m_SnapPointTypeText
' End Get
' Set(value As String)
' m_SnapPointTypeText = value
' NotifyPropertyChanged("SnapPointTypeText")
' End Set
'End Property
'Private m_SnapPointTypeBackground As SolidColorBrush
'Public Property SnapPointTypeBackground As SolidColorBrush
' Get
' Return m_SnapPointTypeBackground
' End Get
' Set(value As SolidColorBrush)
' m_SnapPointTypeBackground = value
' NotifyPropertyChanged("SnapPointTypeBackground")
' End Set
'End Property
'' Lista delle macchine disponibili nel programma
'Private m_MachinesList As New ObservableCollection(Of Machine)
'Public Property MachinesList As ObservableCollection(Of Machine)
' Get
' Return m_MachinesList
' End Get
' Set(value As ObservableCollection(Of Machine))
' m_MachinesList = value
' End Set
'End Property
'' Macchina correntemente selezionata e quindi attiva
'Private m_SelectedMachine As Machine
'Public Property SelectedMachine As Machine
' Get
' Return m_SelectedMachine
' End Get
' Set(value As Machine)
' If IsNothing(value) Then
' m_SelectedMachine = Nothing
' ElseIf value IsNot m_SelectedMachine Then
' EgtSetCurrentContext(IniFile.m_ProjectSceneContext)
' If EgtSetCurrMachine(value.Name) Then
' m_SelectedMachine = value
' IniFile.m_sMachineName = m_SelectedMachine.Name
' IniFile.m_sCurrMachIniFilePath = m_SelectedMachine.MachineDirPath & "\" & m_SelectedMachine.Name & ".ini"
' IniFile.m_sCurrMachToolsDirPath = m_SelectedMachine.MachineDirPath & "\Tools"
' IniFile.m_sCurrMachSetUpDirPath = m_SelectedMachine.MachineDirPath & "\SetUp"
' IniFile.m_sCurrMachScriptsDirPath = m_SelectedMachine.MachineDirPath & "\Scripts"
' UpdateToolAndMachDbParamVisibility()
' NotifyPropertyChanged("SelectedMachine")
' End If
' End If
' End Set
'End Property
'Private m_MachineListIsEnabled As Boolean
'Public Property MachineListIsEnabled As Boolean
' Get
' Return m_MachineListIsEnabled
' End Get
' Set(value As Boolean)
' m_MachineListIsEnabled = value
' NotifyPropertyChanged("MachineListIsEnabled")
' End Set
'End Property
' Commands definition
Private m_cmdGridDimension As ICommand
Private m_cmdGridDimensionLostFocus As ICommand
Private m_cmdStatusGrid As ICommand
Private m_cmdCurrPosType As ICommand
Private m_cmdStatusUnits As ICommand
Private m_cmdStatusStop As ICommand
Private m_cmdClearOutputMessage As ICommand
#End Region ' Fields & Properties
#Region "CONSTRUCTOR"
Sub New()
' Creo riferimento a questa classe in EgtCAM5Map
Map.SetRefStatusBarVM(Me)
Application.Msn.Register(Application.NOTIFYCURRPOS, Sub(sCursorPos As String)
SetCurrPos(sCursorPos)
End Sub)
Application.Msn.Register(Application.NOTIFYSTATUSOUTPUT, Sub(sStatusOutput As String)
SetOutputMessage(sStatusOutput)
End Sub)
Application.Msn.Register(Application.NOTIFYSTATUSPROGRESS, Sub(sStatusProgress As Integer)
SetLoadingProgress(sStatusProgress)
End Sub)
Application.Msn.Register(Application.NOTIFYSTATUSSTOP, Sub(sStatusStop As Boolean)
SetStopProgress_IsEnabled(sStatusStop)
End Sub)
Application.Msn.Register(Application.UPDATESTATUSGRID, Sub(UpdateStatusGridParam As UpdateStatusGridParam)
UpdateStatusGrid(UpdateStatusGridParam.m_bShowGrid, UpdateStatusGridParam.m_bShowGridFrame)
End Sub)
Application.Msn.Register(Application.STATUSCURRPOSTYPETEXT, Sub(sString As String)
CurrPosTypeText = sString
End Sub)
Application.Msn.Register(Application.UPDATESTATUSUNITS, Sub(bMmUnits As Boolean)
SetMeasureUnit(If(bMmUnits, 1, 0)) 'StatusUnitsText = If(bMmUnits, "mm", "in")
EgtSetUiUnits(bMmUnits)
End Sub)
Application.Msn.Register(Application.STATUSSNAPPOINTTYPETEXT, Sub(sString As String)
SetSnapPointType(sString)
End Sub)
Application.Msn.Register(Application.STATUSSNAPPOINTTYPEBACKGROUND, Sub(Color As SolidColorBrush)
SetSnapPointType_Background(Color)
End Sub)
'SearchMachines()
'Application.Msn.Register(Application.LOADCURRENTMACHINE, Sub()
' If m_MachinesList.Count = 0 Then Return
' Dim CurrMach As String = String.Empty
' GetPrivateProfileString(S_MACH, K_CURRMACH, String.Empty, CurrMach)
' Dim bFound As Boolean = False
' If Not String.IsNullOrEmpty(CurrMach) Then
' For Each Mach In MachinesList
' If Mach.Name = CurrMach Then
' bFound = True
' SelectedMachine = Mach
' Exit For
' End If
' Next
' End If
' If Not bFound And MachinesList.Count > 0 Then
' SelectedMachine = MachinesList(0)
' End If
' End Sub)
'Application.Msn.Register(Application.SAVECURRENTMACHINE, Sub()
' If IsNothing(m_SelectedMachine) Then Return
' WritePrivateProfileString(S_MACH, K_CURRMACH, SelectedMachine.Name)
' End Sub)
'Application.Msn.Register(Application.UPDATECURRENTMACHINE, Sub()
' EgtSetCurrentContext(IniFile.m_ProjectSceneContext)
' Dim sMachName As String = String.Empty
' If EgtGetCurrMachineName(sMachName) Then
' For Each Mach In MachinesList
' If Mach.Name = sMachName Then
' SelectedMachine = Mach
' Exit For
' End If
' Next
' End If
' End Sub)
Application.Msn.Register(Application.MAINWINDOW_CONTENTRENDERED, Sub()
If IniFile.m_bMmUnits Then
GridDimensionText = LenToString(IniFile.dSnapStepMm, 4)
Else
GridDimensionText = LenToString(IniFile.dSnapStepInch, 4)
End If
'If IniFile.m_ProjectMode = ProjectModeOpt.ONLYDRAW Then
' MachineListIsEnabled = False
'End If
End Sub)
Application.Msn.Register(Application.MACHININGMODE_ISCHECKED, Sub()
OutputMessage = String.Empty
'MachineListIsEnabled = False
End Sub)
Application.Msn.Register(Application.DRAWMODE_ISCHECKED, Sub()
OutputMessage = String.Empty
'MachineListIsEnabled = True
End Sub)
' Installo funzione gestione eventi per lua
EgtSetProcessEvents(m_ProcEventsCallback)
' Installo funzione output testo su status per lua
EgtSetOutText(m_OutTextCallback)
End Sub
#End Region ' Constructor
#Region "COMMANDS"
#Region "GridDimensionCommand"
''' <summary>
''' Returns a command that set grid status.
''' </summary>
Public ReadOnly Property GridDimensionCommand As ICommand
Get
If m_cmdGridDimension Is Nothing Then
m_cmdGridDimension = New RelayCommand(AddressOf GridDimension)
End If
Return m_cmdGridDimension
End Get
End Property
''' <summary>
''' Notify the function to set the status. This method is invoked by the StatusGridCommand.
''' </summary>
Public Sub GridDimension(ByVal param As Object)
If IniFile.m_bMmUnits Then
StringToLen(GridDimensionText, IniFile.dSnapStepMm)
EgtSetGridGeo(IniFile.dSnapStepMm, IniFile.nMinLineSStep, IniFile.nMajLineSStep, IniFile.nExtSStep)
Else
StringToLen(GridDimensionText, IniFile.dSnapStepInch)
EgtSetGridGeo(IniFile.dSnapStepInch, IniFile.nMinLineSStep, IniFile.nMajLineSStep, IniFile.nExtSStep)
End If
EgtSetGridColor(IniFile.MinLnColor, IniFile.MajLnColor)
Keyboard.ClearFocus()
EgtDraw()
End Sub
#End Region ' GridDimensionCommand
#Region "GridDimensionLostFocusCommand"
''' <summary>
''' Returns a command that set grid status.
''' </summary>
Public ReadOnly Property GridDimensionLostFocusCommand As ICommand
Get
If m_cmdGridDimensionLostFocus Is Nothing Then
m_cmdGridDimensionLostFocus = New RelayCommand(AddressOf GridDimensionLostFocus)
End If
Return m_cmdGridDimensionLostFocus
End Get
End Property
''' <summary>
''' Notify the function to set the status. This method is invoked by the StatusGridCommand.
''' </summary>
Public Sub GridDimensionLostFocus(ByVal param As Object)
If IniFile.m_bMmUnits Then
GridDimensionText = LenToString(IniFile.dSnapStepMm, 4)
Else
GridDimensionText = LenToString(IniFile.dSnapStepInch, 4)
End If
End Sub
#End Region ' GridDimensionLostFocusCommand
#Region "StatusGridCommand"
''' <summary>
''' Returns a command that set grid status.
''' </summary>
Public ReadOnly Property StatusGridCommand As ICommand
Get
If m_cmdStatusGrid Is Nothing Then
m_cmdStatusGrid = New RelayCommand(AddressOf StatusGrid)
End If
Return m_cmdStatusGrid
End Get
End Property
''' <summary>
''' Notify the function to set the status. This method is invoked by the StatusGridCommand.
''' </summary>
Public Sub StatusGrid(ByVal param As Object)
Dim bGridState As Boolean
If IniFile.m_ProjectMode = ProjectModeOpt.DRAW OrElse IniFile.m_ProjectMode = ProjectModeOpt.ONLYDRAW Then
IniFile.m_bDrawShowGrid = Not IniFile.m_bDrawShowGrid
bGridState = m_bDrawShowGrid
ElseIf IniFile.m_ProjectMode = ProjectModeOpt.MACHINING Then
IniFile.m_bMachiningShowGrid = Not IniFile.m_bMachiningShowGrid
bGridState = m_bMachiningShowGrid
End If
Application.Msn.NotifyColleagues(Application.UPDATESTATUSGRID, New UpdateStatusGridParam(bGridState, IniFile.m_bShowGridFrame))
EgtDraw()
End Sub
#End Region ' StatusGridCommand
#Region "CurrPosTypeCommand"
''' <summary>
''' Returns a command that choose the current reference.
''' </summary>
Public ReadOnly Property CurrPosTypeCommand As ICommand
Get
If m_cmdCurrPosType Is Nothing Then
m_cmdCurrPosType = New RelayCommand(AddressOf CurrPosType)
End If
Return m_cmdCurrPosType
End Get
End Property
''' <summary>
''' Execute the Point. This method is invoked by the CurrPosTypeCommand.
''' </summary>
Public Sub CurrPosType(ByVal param As Object)
Application.Msn.NotifyColleagues(Application.STATUSCURRPOSTYPECOMMAND)
End Sub
#End Region ' CurrPosTypeCommand
#Region "StatusUnitsCommand"
''' <summary>
''' Returns a command that choose the current reference.
''' </summary>
Public ReadOnly Property StatusUnitsCommand As ICommand
Get
If m_cmdStatusUnits Is Nothing Then
m_cmdStatusUnits = New RelayCommand(AddressOf StatusUnits)
End If
Return m_cmdStatusUnits
End Get
End Property
''' <summary>
''' Execute the Point. This method is invoked by the CurrPosTypeCommand.
''' </summary>
Public Sub StatusUnits(ByVal param As Object)
Application.Msn.NotifyColleagues(Application.STATUSUNITSCOMMAND)
If IniFile.m_bMmUnits Then
GridDimensionText = LenToString(IniFile.dSnapStepMm, 4)
Else
GridDimensionText = LenToString(IniFile.dSnapStepInch, 4)
End If
End Sub
#End Region ' StatusUnitsCommand
#Region "StatusStopCommand"
''' <summary>
''' Returns a command that choose the current reference.
''' </summary>
Public ReadOnly Property StatusStopCommand As ICommand
Get
If m_cmdStatusStop Is Nothing Then
m_cmdStatusStop = New RelayCommand(AddressOf StatusStop)
End If
Return m_cmdStatusStop
End Get
End Property
''' <summary>
''' Execute the Point. This method is invoked by the StatusStopCommand.
''' </summary>
Public Sub StatusStop(ByVal param As Object)
m_bStopScript = True
End Sub
#End Region ' StatusStopCommand
#Region "ClearOutputMessageCommand"
''' <summary>
''' Returns a command that choose the current reference.
''' </summary>
Public Overrides ReadOnly Property ClearOutputMessage_Command As ICommand
Get
If m_cmdClearOutputMessage Is Nothing Then
m_cmdClearOutputMessage = New RelayCommand(AddressOf ClearOutputMessage)
End If
Return m_cmdClearOutputMessage
End Get
End Property
''' <summary>
''' Execute the Point. This method is invoked by the ClearOutPutMessage_Command.
''' </summary>
Public Overloads Sub ClearOutputMessage(ByVal param As Object)
OutputMessage = String.Empty
SetLoadingProgress(0)
NotifyPropertyChanged("OutputMessage")
End Sub
#End Region ' ClearStatusOutputCommand
#End Region ' Commands
#Region "METHODS"
Private Sub UpdateStatusGrid(bShowGrid As Boolean, bShowGridFrame As Boolean)
'tsStatusGrid.ForeColor = If(m_bShowGrid, Color.Black, Color.Gray)
StatusGridText = If(bShowGrid, "GRID ON ", "GRID OFF")
EgtSetGridShow(bShowGrid, bShowGrid And bShowGridFrame)
End Sub
'''' <summary>
'''' Method that search the machines in the correct folder and add to the MachinesList those valid.
'''' </summary>
'Private Sub SearchMachines()
' ' Svuoto la lista delle macchine
' m_MachinesList.Clear()
' ' Se direttorio base macchine non definito o non esiste, ritorno
' If String.IsNullOrWhiteSpace(IniFile.m_sMachinesRoot) OrElse
' Not Directory.Exists(IniFile.m_sMachinesRoot) OrElse Directory.GetDirectories(IniFile.m_sMachinesRoot).Count = 0 Then
' IniFile.m_ProjectMode = ProjectModeOpt.ONLYDRAW
' EgtOutLog(EgtMsg(MSG_STATUSBAR + 1))
' Return
' End If
' ' Cerco le macchine
' Dim TempArray As String() = Directory.GetDirectories(IniFile.m_sMachinesRoot)
' For i As Integer = 0 To TempArray.Count - 1
' AddMachine(TempArray(i))
' Next
' If m_MachinesList.Count = 0 Then
' IniFile.m_ProjectMode = ProjectModeOpt.ONLYDRAW
' EgtOutLog(EgtMsg(MSG_STATUSBAR + 1))
' Return
' End If
'End Sub
'Private Function AddMachine(sPath As String) As Boolean
' ' Verifico presenza file caratteristici
' Dim sName As String = Path.GetFileName(sPath)
' Dim MachineIniPath As String = sPath & "\" & sName & ".ini"
' Dim MachineMldePath As String = sPath & "\" & sName & ".mlde"
' If Not File.Exists(MachineIniPath) Or Not File.Exists(MachineMldePath) Then Return False
' ' Aggiungo alla lista
' m_MachinesList.Add(New Machine With {.Name = sName, .MachineDirPath = sPath})
' Return True
'End Function
'Friend Function InsertMachine(sPath As String) As Boolean
' ' Verifico presenza file caratteristici
' Dim sName As String = Path.GetFileName(sPath)
' Dim MachineIniPath As String = sPath & "\" & sName & ".ini"
' Dim MachineMldePath As String = sPath & "\" & sName & ".mlde"
' If Not File.Exists(MachineIniPath) Or Not File.Exists(MachineMldePath) Then Return False
' ' Cerco la posizione di inserimento
' Dim nPos As Integer = 0
' For nI As Integer = 0 To m_MachinesList.Count() - 1
' Dim nRes As Integer = String.Compare(sName, m_MachinesList(nI).Name, True)
' If nRes = 0 Then
' Return True
' ElseIf nRes < 0 Then
' Exit For
' Else
' nPos += 1
' End If
' Next
' ' Inserisco nella lista
' m_MachinesList.Insert(nPos, New Machine With {.Name = sName, .MachineDirPath = sPath})
' Return True
'End Function
'''' <summary>
'''' Class that create the association Name/IniPath for the machine's
'''' </summary>
'Class Machine
' Private m_sName As String
' Public Property Name As String
' Get
' Return m_sName
' End Get
' Set(value As String)
' m_sName = value
' End Set
' End Property
' Friend MachineDirPath As String
'End Class
'Private Sub UpdateToolAndMachDbParamVisibility()
' If EgtUILib.GetPrivateProfileInt(S_MACHININGS, K_SAWINGONARCS, 0, IniFile.m_sCurrMachIniFilePath) <> 0 Then
' Sawing(39) = Visibility.Visible ' StepExtArc
' Sawing(40) = Visibility.Visible ' StepIntArc
' Else
' Sawing(39) = Visibility.Collapsed ' StepExtArc
' Sawing(40) = Visibility.Collapsed ' StepIntArc
' End If
'End Sub
Public Function OutText(ByRef psText As IntPtr) As Boolean
' Assegno stringa
OutputMessage = (Marshal.PtrToStringUni(psText))
' Costringo ad aggiornare
UpdateUI()
Return True
End Function
Private Function ProcessEvents(ByVal nProg As Integer, ByVal nPause As Integer) As Integer
' Se previsto, imposto progress
If nProg > 0 Then SetLoadingProgress(Math.Min(nProg, 100))
' Notifico a simulazione aggiornamento dati
Application.Msn.NotifyColleagues(Application.SIMULATIONEXPANDER_UPDATE_CNCDATA)
' Costringo ad aggiornare
UpdateUI()
' Eventuale attesa
Thread.Sleep(nPause)
' Ritorno eventuale stop
If m_bStopScript Then
m_bStopScript = False
Return 1
Else
Return 0
End If
End Function
Public Sub SetSnapPointType_Background(SnapPntTypeBackground As SolidColorBrush)
SnapPointType_Background = SnapPntTypeBackground
NotifyPropertyChanged("SnapPointType_Background")
End Sub
#End Region ' Methods
End Class