Files
EgtWPFLib5/EgtMsgBox.vb
T
Emmanuele Sassi 4ff7cfa57f EgtWPFLib5 1.6s2 :
- Primo rilascio.
2016-07-08 19:56:15 +00:00

450 lines
17 KiB
VB.net

' Follow steps 1a or 1b and then 2 to use this custom control in a XAML file.
'
' Step 1a) Using this custom control in a XAML file that exists in the current project.
' Add this XmlNamespace attribute to the root element of the markup file where it is
' to be used:
'
' xmlns:MyNamespace="clr-namespace:EgtWPFLib5"
'
'
' Step 1b) Using this custom control in a XAML file that exists in a different project.
' Add this XmlNamespace attribute to the root element of the markup file where it is
' to be used:
'
' xmlns:MyNamespace="clr-namespace:EgtWPFLib5;assembly=EgtWPFLib5"
'
' You will also need to add a project reference from the project where the XAML file lives
' to this project and Rebuild to avoid compilation errors:
'
' Right click on the target project in the Solution Explorer and
' "Add Reference"->"Projects"->[Browse to and select this project]
'
'
' Step 2)
' Go ahead and use your control in the XAML file. Note that Intellisense in the
' XML editor does not currently work on custom controls and its child elements.
'
' <MyNamespace:EgtMsgBox/>
'
Imports System.Windows.Controls.Primitives
Imports EgtUILib
<TemplatePart(Name:="PART_Grid", Type:=GetType(Grid))>
<TemplatePart(Name:="PART_Title", Type:=GetType(TextBlock))>
<TemplatePart(Name:="PART_Icon", Type:=GetType(Image))>
<TemplatePart(Name:="PART_Text", Type:=GetType(TextBlock))>
<TemplatePart(Name:="PART_ProgressBar", Type:=GetType(ProgressBar))>
<TemplatePart(Name:="PART_Button1", Type:=GetType(Button))>
<TemplatePart(Name:="PART_Button2", Type:=GetType(Button))>
<TemplatePart(Name:="PART_Button3", Type:=GetType(Button))>
Public Class EgtMsgBox
Inherits System.Windows.Window
Public Const MSG_EGTMSGBOX = 20040
Private m_Grid As Grid
Private m_Title As TextBlock
Private m_Icon As Image
Private m_Text As TextBlock
Private m_ProgressBar As ProgressBar
Private m_Button1 As Button
Private m_Button2 As Button
Private m_Button3 As Button
Shared Sub New()
'This OverrideMetadata call tells the system that this element wants to provide a style that is different than its base class.
'This style is defined in themes\generic.xaml
DefaultStyleKeyProperty.OverrideMetadata(GetType(EgtMsgBox), New FrameworkPropertyMetadata(GetType(EgtMsgBox)))
End Sub
Public Overrides Sub OnApplyTemplate()
MyBase.OnApplyTemplate()
' Retrieve the Button from the current template
m_Grid = TryCast(MyBase.GetTemplateChild("PART_MoveRectangle"), Grid)
m_Title = TryCast(MyBase.GetTemplateChild("PART_MoveRectangle"), TextBlock)
m_Icon = TryCast(MyBase.GetTemplateChild("PART_MoveRectangle"), Image)
m_Text = TryCast(MyBase.GetTemplateChild("PART_MoveRectangle"), TextBlock)
m_ProgressBar = TryCast(MyBase.GetTemplateChild("PART_MoveRectangle"), ProgressBar)
m_Button1 = TryCast(MyBase.GetTemplateChild("PART_MoveRectangle"), Button)
m_Button2 = TryCast(MyBase.GetTemplateChild("PART_MoveRectangle"), Button)
m_Button3 = TryCast(MyBase.GetTemplateChild("PART_MoveRectangle"), Button)
End Sub
''Parametri ricevuti
'Private m_sTitle As String = String.Empty
'Private m_sText As String = String.Empty
Private m_Buttons As Buttons = Buttons.NULL
Private m_IconVal As Icons = Icons.NULL
Private m_bProgressBar As Boolean = False
Private m_Width As Double = 0
Private m_WidthType As WidthType = WidthType.NULL
Private m_iExtraColumns As Integer = 0
Private m_iExtraHalfRows As Integer = 0
'Parametri ausiliari
Private m_nRow As Double = 0
Private m_nColumn As Double = 0
'Parametro di ritorno
Public Shadows DialogResult As Integer = 0
' Riferimento alla finestra che contiene la MsgBox
Private m_Owner As Window
' Proprietà che permette di cambiare il Text a finestra già aperta, utile per aggiornare il testo durante i caricamenti
Public Property Text
Get
Return m_Text.Text
End Get
Set(value)
m_Text.Text = value
End Set
End Property
' Proprietà che permette di cambiare il Value della LoadingPrBr all'esterno della libreria
Public Property ProgressBarValue
Get
Return m_ProgressBar.Value
End Get
Set(value)
m_ProgressBar.Value = value
End Set
End Property
'Enum
Enum Buttons
YES_NO_CANCEL
OK_CANCEL
ONE_TWO
OK
NULL
End Enum
Enum Icons
DANGER
ESCLAMATION
IMAGE
NULL
End Enum
Enum WidthType
GRID
PIXEL
NULL
End Enum
'Costruttori
Sub New(Owner As Window, sTitle As String, sText As String, Buttons As Buttons, Icon As Icons, Optional ExtraColumns As Integer = 0, Optional ExtraHalfRows As Integer = 0)
'Inizializzazione dei membri della classe con i valori ricevuti
m_Owner = Owner
m_Title.Text = sTitle
m_Text.Text = sText
m_Buttons = Buttons
m_IconVal = Icon
m_WidthType = WidthType.NULL
m_iExtraColumns = ExtraColumns
m_iExtraHalfRows = ExtraHalfRows
'Apro direttamente la finestra
If m_Buttons <> EgtMsgBox.Buttons.NULL Then
Me.ShowDialog()
Else
Me.Show()
End If
End Sub
Sub New(Owner As Window, Width As Double, WidthType As WidthType, sTitle As String, sText As String, Buttons As Buttons, Icon As Icons, Optional ExtraColumns As Integer = 0, Optional ExtraHalfRows As Integer = 0)
'Inizializzazione dei membri della classe con i valori ricevuti
m_Owner = Owner
m_Title.Text = sTitle
m_Text.Text = sText
m_Buttons = Buttons
m_IconVal = Icon
m_Width = Width
m_WidthType = WidthType
m_iExtraColumns = ExtraColumns
m_iExtraHalfRows = ExtraHalfRows
'Apro direttamente la finestra
If m_Buttons <> EgtMsgBox.Buttons.NULL Then
Me.ShowDialog()
Else
Me.Show()
End If
End Sub
Sub New(Owner As Window, sTitle As String, sText As String, bProgressBar As Boolean, Icon As Icons, Optional ExtraColumns As Integer = 0, Optional ExtraHalfRows As Integer = 0)
'Inizializzazione dei membri della classe con i valori ricevuti
m_Owner = Owner
m_Title.Text = sTitle
m_Text.Text = sText
m_bProgressBar = bProgressBar
m_IconVal = Icon
m_WidthType = WidthType.NULL
m_iExtraColumns = ExtraColumns
m_iExtraHalfRows = ExtraHalfRows
'Apro direttamente la finestra
Me.Show()
End Sub
Private Sub EgtMsgBox_Initialized(sender As Object, e As EventArgs) Handles Me.Initialized
'Calcolo il numero di righe necessarie
If m_Title.Text <> String.Empty Then
m_nRow += 0.5
If m_Text.Text <> String.Empty Then
m_nRow += 1
End If
If m_bProgressBar Then
m_nRow += 1
End If
If m_Buttons <> EgtMsgBox.Buttons.NULL Then
m_nRow += 1.5
End If
Else
If m_Text.Text <> String.Empty Then
m_nRow += 1
End If
If m_bProgressBar Then
m_nRow += 1
End If
If m_Buttons <> EgtMsgBox.Buttons.NULL Then
m_nRow += 1.5
End If
End If
m_nRow += m_iExtraHalfRows / 2
'Calcolo il numero di colonne necessarie
Select Case m_Buttons
Case Buttons.YES_NO_CANCEL, Buttons.OK
m_nColumn = 5
Case Buttons.OK_CANCEL, Buttons.ONE_TWO
m_nColumn = 4.5
Case Buttons.NULL
m_nColumn = 3.5
End Select
m_nColumn += m_iExtraColumns
'Creo la griglia
For Index As Integer = 1 To m_nRow * 2
m_Grid.RowDefinitions.Add(New RowDefinition)
Next
For Index As Integer = 1 To m_nColumn * 2
m_Grid.ColumnDefinitions.Add(New ColumnDefinition)
Next
'Attivo/disattivo gli elementi e li posiziono
If m_Title.Text <> String.Empty Then
m_Title.SetValue(Grid.RowProperty, 0)
m_Title.SetValue(Grid.ColumnProperty, 1)
m_Title.SetValue(Grid.ColumnSpanProperty, m_Grid.ColumnDefinitions.Count - 2)
Else
m_Title.Visibility = Windows.Visibility.Hidden
End If
If m_IconVal = Icons.NULL Then
m_Icon.Visibility = Windows.Visibility.Hidden
End If
If m_Text.Text <> String.Empty Then
If m_Title.Text <> String.Empty Then
m_Text.SetValue(Grid.RowProperty, 1)
m_Icon.SetValue(Grid.RowProperty, 1)
Else
m_Text.SetValue(Grid.RowProperty, 0)
m_Text.SetValue(VerticalAlignmentProperty, VerticalAlignment.Center)
m_Icon.SetValue(Grid.RowProperty, 0)
m_Icon.SetValue(VerticalAlignmentProperty, VerticalAlignment.Center)
End If
If m_IconVal <> Icons.NULL Then
m_Text.SetValue(Grid.ColumnProperty, 3)
m_Text.SetValue(Grid.ColumnSpanProperty, m_Grid.ColumnDefinitions.Count - 4)
m_Icon.SetValue(Grid.ColumnProperty, 1)
m_Icon.SetValue(Grid.ColumnSpanProperty, 2)
m_Icon.SetValue(Grid.RowSpanProperty, 2)
Else
m_Text.SetValue(Grid.ColumnProperty, 1)
m_Text.SetValue(Grid.ColumnSpanProperty, m_Grid.ColumnDefinitions.Count - 2)
m_Text.SetValue(HorizontalAlignmentProperty, HorizontalAlignment.Center)
End If
m_Text.SetValue(Grid.RowSpanProperty, 2 + m_iExtraHalfRows)
Else
m_Text.Visibility = Windows.Visibility.Hidden
m_Icon.Visibility = Windows.Visibility.Hidden
End If
If m_bProgressBar Then
If m_Title.Text <> String.Empty Then
If m_Text.Text <> String.Empty Then
m_ProgressBar.SetValue(Grid.RowProperty, 3 + m_iExtraHalfRows)
Else
m_ProgressBar.SetValue(Grid.RowProperty, 1)
End If
Else
If m_Text.Text <> String.Empty Then
m_ProgressBar.SetValue(Grid.RowProperty, 2 + m_iExtraHalfRows)
Else
m_ProgressBar.SetValue(Grid.RowProperty, 0)
End If
End If
m_ProgressBar.SetValue(Grid.ColumnProperty, 1)
m_ProgressBar.SetValue(Grid.ColumnSpanProperty, m_Grid.ColumnDefinitions.Count - 2)
Else
m_ProgressBar.Visibility = Windows.Visibility.Hidden
End If
If m_Buttons <> Buttons.NULL Then
If m_Title.Text <> String.Empty Then
If m_Text.Text <> String.Empty Then
If m_bProgressBar Then
m_Button1.SetValue(Grid.RowProperty, 5 + m_iExtraHalfRows)
m_Button2.SetValue(Grid.RowProperty, 5 + m_iExtraHalfRows)
m_Button3.SetValue(Grid.RowProperty, 5 + m_iExtraHalfRows)
Else
m_Button1.SetValue(Grid.RowProperty, 3 + m_iExtraHalfRows)
m_Button2.SetValue(Grid.RowProperty, 3 + m_iExtraHalfRows)
m_Button3.SetValue(Grid.RowProperty, 3 + m_iExtraHalfRows)
End If
Else
If m_bProgressBar Then
m_Button1.SetValue(Grid.RowProperty, 3)
m_Button2.SetValue(Grid.RowProperty, 3)
m_Button3.SetValue(Grid.RowProperty, 3)
Else
m_Button1.SetValue(Grid.RowProperty, 1)
m_Button2.SetValue(Grid.RowProperty, 1)
m_Button3.SetValue(Grid.RowProperty, 1)
End If
End If
Else
If m_Text.Text <> String.Empty Then
If m_bProgressBar Then
m_Button1.SetValue(Grid.RowProperty, 4 + m_iExtraHalfRows)
m_Button2.SetValue(Grid.RowProperty, 4 + m_iExtraHalfRows)
m_Button3.SetValue(Grid.RowProperty, 4 + m_iExtraHalfRows)
Else
m_Button1.SetValue(Grid.RowProperty, 2 + m_iExtraHalfRows)
m_Button2.SetValue(Grid.RowProperty, 2 + m_iExtraHalfRows)
m_Button3.SetValue(Grid.RowProperty, 2 + m_iExtraHalfRows)
End If
Else
If m_bProgressBar Then
m_Button1.SetValue(Grid.RowProperty, 2)
m_Button2.SetValue(Grid.RowProperty, 2)
m_Button3.SetValue(Grid.RowProperty, 2)
Else
m_Button1.SetValue(Grid.RowProperty, 0)
m_Button2.SetValue(Grid.RowProperty, 0)
m_Button3.SetValue(Grid.RowProperty, 0)
End If
End If
End If
m_Button1.SetValue(Grid.RowSpanProperty, 2)
m_Button2.SetValue(Grid.RowSpanProperty, 2)
m_Button3.SetValue(Grid.RowSpanProperty, 2)
End If
Select Case m_Buttons
Case Buttons.YES_NO_CANCEL
m_Button1.SetValue(Grid.ColumnProperty, 1 + m_iExtraColumns)
m_Button1.SetValue(Grid.ColumnSpanProperty, 2)
m_Button1.Content = EgtMsg(MSG_EGTMSGBOX + 3)
m_Button2.SetValue(Grid.ColumnProperty, 4 + m_iExtraColumns)
m_Button2.SetValue(Grid.ColumnSpanProperty, 2)
m_Button2.Content = EgtMsg(MSG_EGTMSGBOX + 4)
m_Button3.SetValue(Grid.ColumnProperty, 7 + m_iExtraColumns)
m_Button3.SetValue(Grid.ColumnSpanProperty, 2)
m_Button3.Content = EgtMsg(MSG_EGTMSGBOX + 2)
Case Buttons.OK_CANCEL
m_Button1.SetValue(Grid.ColumnProperty, 2 + m_iExtraColumns)
m_Button1.SetValue(Grid.ColumnSpanProperty, 2)
m_Button1.Content = EgtMsg(MSG_EGTMSGBOX + 1)
m_Button2.Visibility = Windows.Visibility.Hidden
m_Button3.SetValue(Grid.ColumnProperty, 5 + m_iExtraColumns)
m_Button3.SetValue(Grid.ColumnSpanProperty, 2)
m_Button3.Content = EgtMsg(MSG_EGTMSGBOX + 2)
Case Buttons.ONE_TWO
m_Button1.SetValue(Grid.ColumnProperty, 2 + m_iExtraColumns)
m_Button1.SetValue(Grid.ColumnSpanProperty, 2)
m_Button1.Content = "1"
m_Button2.Visibility = Windows.Visibility.Hidden
m_Button3.SetValue(Grid.ColumnProperty, 5 + m_iExtraColumns)
m_Button3.SetValue(Grid.ColumnSpanProperty, 2)
m_Button3.Content = "2"
Case Buttons.OK
m_Button1.SetValue(Grid.ColumnProperty, 4 + m_iExtraColumns)
m_Button1.SetValue(Grid.ColumnSpanProperty, 2)
m_Button1.Content = EgtMsg(MSG_EGTMSGBOX + 1)
m_Button2.Visibility = Windows.Visibility.Hidden
m_Button3.Visibility = Windows.Visibility.Hidden
Case Buttons.NULL
m_Button1.Visibility = Windows.Visibility.Hidden
m_Button2.Visibility = Windows.Visibility.Hidden
m_Button3.Visibility = Windows.Visibility.Hidden
End Select
'Assegno agli elementi i valori ricevuti
Dim sImagePath As String = String.Empty
'Select Case m_IconVal
' Case Icons.DANGER
' sImagePath = InitializeEgtWPFLib.MsgBoxDangerPath
' Case Icons.ESCLAMATION
' sImagePath = InitializeEgtWPFLib.MsgBoxExclamationPath
' Case Icons.IMAGE
' sImagePath = InitializeEgtWPFLib.MsgBoxImagePath
'End Select
'If m_IconVal <> Icons.NULL Then
' Try
' IconImg.Source = New System.Windows.Media.Imaging.BitmapImage(New Uri(sImagePath, UriKind.Absolute))
' Catch ex As Exception
' EgtOutLog("Errore nel caricamento dell'icona dell'EgtMsgBox")
' End Try
'End If
'Calcolo dimensioni e posizione della finestra
Select Case m_WidthType
'Case WidthType.NULL
' Me.Height = m_Owner.Height / InitializeEgtWPFLib.BaseGridHeight * m_nRow
' Me.Width = m_Owner.Width / InitializeEgtWPFLib.BaseGridWidth * m_nColumn
'Case WidthType.GRID
' Me.Height = m_Owner.Height / InitializeEgtWPFLib.BaseGridHeight * m_nColumn * m_Width / m_nRow
' Me.Width = m_Owner.Width / InitializeEgtWPFLib.BaseGridWidth * m_Width
Case WidthType.PIXEL
' Fisso il minimo a 250 pixel perchè più piccola diventa inutilizzabile
If m_Width < 250 Then
m_Width = 250
End If
Me.Height = m_Width / m_nColumn * m_nRow
Me.Width = m_Width
End Select
Me.Top = m_Owner.Top + (m_Owner.Height / 2) - (Me.Height / 2)
Me.Left = m_Owner.Left + (m_Owner.Width / 2) - (Me.Width / 2)
'Assegno la finestra come figlia della MainWindow
Me.Owner = m_Owner
End Sub
Private Sub Button1_Click(sender As Object, e As RoutedEventArgs)
DialogResult = 1
End Sub
Private Sub Button2_Click(sender As Object, e As RoutedEventArgs)
DialogResult = 2
End Sub
Private Sub Button3_Click(sender As Object, e As RoutedEventArgs)
DialogResult = 0
End Sub
End Class