From f1640f75f8eb4b643a2e05d9eeb6a3d7831a08bf Mon Sep 17 00:00:00 2001 From: RenzoL Date: Mon, 12 Jul 2021 17:29:51 +0200 Subject: [PATCH] =?UTF-8?q?-=20Creato=20l'oggetto=20EgtDataGridColumn=20pe?= =?UTF-8?q?r=20gestire=20diverse=20propriet=C3=A0=20(Width,=20IsReadOnly,?= =?UTF-8?q?=20DisplayIndex,=20ecc.)=20per=20ogni=20colonna=20singolarmente?= =?UTF-8?q?=20di=20una=20EgtDataGrid=20-=20Aggiunta=20gestione=20colonne?= =?UTF-8?q?=20(e=20relative=20propriet=C3=A0)=20delle=20EgtDataGrid=20tram?= =?UTF-8?q?ite=20lettura/scrittura=20su=20file=20ini?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BTLParam/FeatureListV.xaml | 12 +- .../BTLParam/FeatureListVM.vb | 13 +- .../BTLParam/PartInRawPartListV.xaml | 45 ++-- .../BTLParam/PartInRawPartListVM.vb | 35 +-- .../BTLParam/RawPartListV.xaml | 36 +--- .../BTLParam/RawPartListVM.vb | 24 +-- .../Constants/ConstDataGridColumnsIni.vb | 13 ++ .../EgtBEAMWALL.ViewerOptimizer.vbproj | 2 + .../MainMenu/MainMenuVM.vb | 25 ++- .../MainWindow/MainWindowM.vb | 2 + .../OpenProjectFileDialogV.xaml | 31 +-- .../OpenProjectFileDialogVM.vb | 18 +- .../Utility/DataGridColumnsIniFile.vb | 41 ++++ .../Utility/EgtDataGrid.xaml | 9 +- .../Utility/EgtDataGrid.xaml.vb | 201 +++++++++++++++++- 15 files changed, 339 insertions(+), 168 deletions(-) create mode 100644 EgtBEAMWALL.ViewerOptimizer/Constants/ConstDataGridColumnsIni.vb create mode 100644 EgtBEAMWALL.ViewerOptimizer/Utility/DataGridColumnsIniFile.vb diff --git a/EgtBEAMWALL.ViewerOptimizer/BTLParam/FeatureListV.xaml b/EgtBEAMWALL.ViewerOptimizer/BTLParam/FeatureListV.xaml index 5bb10324..2bb208a2 100644 --- a/EgtBEAMWALL.ViewerOptimizer/BTLParam/FeatureListV.xaml +++ b/EgtBEAMWALL.ViewerOptimizer/BTLParam/FeatureListV.xaml @@ -9,10 +9,7 @@ RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:FeatureListV}}}" CanUserAddRows="False" AutoGenerateColumns="False" - CanUserSortColumns="True" - CanUserResizeColumns="True" CanUserResizeRows="False" - CanUserReorderColumns="True" SelectionMode="Single" ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto" @@ -21,14 +18,13 @@ BindingColumns="{Binding FeatureColumns}"> - + - + @@ -73,9 +69,7 @@ - + diff --git a/EgtBEAMWALL.ViewerOptimizer/BTLParam/FeatureListVM.vb b/EgtBEAMWALL.ViewerOptimizer/BTLParam/FeatureListVM.vb index 0d0a28cc..21bb5a0d 100644 --- a/EgtBEAMWALL.ViewerOptimizer/BTLParam/FeatureListVM.vb +++ b/EgtBEAMWALL.ViewerOptimizer/BTLParam/FeatureListVM.vb @@ -1,14 +1,15 @@ Imports System.Collections.ObjectModel Imports EgtUILib +Imports EgtWPFLib5 Public Class FeatureListVM - Private m_FeatureColumns As New ObservableCollection(Of String) - Public Property FeatureColumns As ObservableCollection(Of String) + Private m_FeatureColumns As New ObservableCollection(Of EgtDataGridColumn) + Public Property FeatureColumns As ObservableCollection(Of EgtDataGridColumn) Get Return m_FeatureColumns End Get - Set(value As ObservableCollection(Of String)) + Set(value As ObservableCollection(Of EgtDataGridColumn)) m_FeatureColumns = value End Set End Property @@ -26,10 +27,8 @@ Public Class FeatureListVM Sub New() ' creo riferimento in Map Map.SetRefFeatureListVM(Me) - ' aggiungo le colonne alla tabella - FeatureColumns.Add("colDO") - FeatureColumns.Add("colCALC") - FeatureColumns.Add("colDESC") + ' carico le colonne della datagrid + GetPrivateProfileColumns(S_FEATURELIST, FeatureColumns) End Sub End Class diff --git a/EgtBEAMWALL.ViewerOptimizer/BTLParam/PartInRawPartListV.xaml b/EgtBEAMWALL.ViewerOptimizer/BTLParam/PartInRawPartListV.xaml index d4285be3..fc7a6b44 100644 --- a/EgtBEAMWALL.ViewerOptimizer/BTLParam/PartInRawPartListV.xaml +++ b/EgtBEAMWALL.ViewerOptimizer/BTLParam/PartInRawPartListV.xaml @@ -10,10 +10,7 @@ AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" - CanUserSortColumns="False" - CanUserResizeColumns="False" CanUserResizeRows="False" - CanUserReorderColumns="False" SelectionMode="Single" ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto" @@ -31,14 +28,13 @@ - + - + @@ -81,40 +77,31 @@ - + - + - + - + - + @@ -149,8 +136,7 @@ - + @@ -163,9 +149,7 @@ - + @@ -173,9 +157,7 @@ - + @@ -183,8 +165,7 @@ - + @@ -192,9 +173,7 @@ - + diff --git a/EgtBEAMWALL.ViewerOptimizer/BTLParam/PartInRawPartListVM.vb b/EgtBEAMWALL.ViewerOptimizer/BTLParam/PartInRawPartListVM.vb index ba0be01a..df203d2a 100644 --- a/EgtBEAMWALL.ViewerOptimizer/BTLParam/PartInRawPartListVM.vb +++ b/EgtBEAMWALL.ViewerOptimizer/BTLParam/PartInRawPartListVM.vb @@ -4,12 +4,12 @@ Imports EgtUILib Public Class PartInRawPartListVM - Private m_PartInRawPartColumns As New ObservableCollection(Of String) - Public Property PartInRawPartColumns As ObservableCollection(Of String) + Private m_PartInRawPartColumns As New ObservableCollection(Of EgtDataGridColumn) + Public Property PartInRawPartColumns As ObservableCollection(Of EgtDataGridColumn) Get Return m_PartInRawPartColumns End Get - Set(value As ObservableCollection(Of String)) + Set(value As ObservableCollection(Of EgtDataGridColumn)) m_PartInRawPartColumns = value End Set End Property @@ -74,36 +74,19 @@ Public Class PartInRawPartListVM Sub New() ' aggiungo riferimento a map Map.SetRefPartInRawPartListVM(Me) - ' aggiungo colonne - PartInRawPartColumns.Add(COL_PDN) - PartInRawPartColumns.Add(COL_CALC) - PartInRawPartColumns.Add(COL_NAM) - PartInRawPartColumns.Add(COL_W) - PartInRawPartColumns.Add(COL_H) - PartInRawPartColumns.Add(COL_L) - PartInRawPartColumns.Add(COL_ROT) - PartInRawPartColumns.Add(COL_FLIP) - PartInRawPartColumns.Add(COL_POSX) - PartInRawPartColumns.Add(COL_POSY) - PartInRawPartColumns.Add(COL_OFFSET) - PartInRawPartColumns.Add(COL_MATERIAL) + ' carico le colonne della datagrid + GetPrivateProfileColumns(S_PARTINRAWPARTLIST_BEAM, PartInRawPartColumns) End Sub #End Region ' CONSTRUCTOR Friend Sub UpdateColumns(nMachType As MachineType) If nMachType = MachineType.BEAM Then - If Not IsNothing(m_PartInRawPartColumns.FirstOrDefault(Function(x) x = COL_ROT)) Then m_PartInRawPartColumns.Remove(COL_ROT) - If Not IsNothing(m_PartInRawPartColumns.FirstOrDefault(Function(x) x = COL_FLIP)) Then m_PartInRawPartColumns.Remove(COL_FLIP) - If Not IsNothing(m_PartInRawPartColumns.FirstOrDefault(Function(x) x = COL_POSX)) Then m_PartInRawPartColumns.Remove(COL_POSX) - If Not IsNothing(m_PartInRawPartColumns.FirstOrDefault(Function(x) x = COL_POSY)) Then m_PartInRawPartColumns.Remove(COL_POSY) - If IsNothing(m_PartInRawPartColumns.FirstOrDefault(Function(x) x = COL_OFFSET)) Then m_PartInRawPartColumns.Insert(6, COL_OFFSET) + PartInRawPartColumns.Clear() + GetPrivateProfileColumns(S_PARTINRAWPARTLIST_BEAM, PartInRawPartColumns) ElseIf nMachType = MachineType.WALL Then - If Not IsNothing(m_PartInRawPartColumns.FirstOrDefault(Function(x) x = COL_OFFSET)) Then m_PartInRawPartColumns.Remove(COL_OFFSET) - If IsNothing(m_PartInRawPartColumns.FirstOrDefault(Function(x) x = COL_ROT)) Then m_PartInRawPartColumns.Insert(6, COL_ROT) - If IsNothing(m_PartInRawPartColumns.FirstOrDefault(Function(x) x = COL_FLIP)) Then m_PartInRawPartColumns.Insert(7, COL_FLIP) - If IsNothing(m_PartInRawPartColumns.FirstOrDefault(Function(x) x = COL_POSX)) Then m_PartInRawPartColumns.Insert(8, COL_POSX) - If IsNothing(m_PartInRawPartColumns.FirstOrDefault(Function(x) x = COL_POSY)) Then m_PartInRawPartColumns.Insert(9, COL_POSY) + PartInRawPartColumns.Clear() + GetPrivateProfileColumns(S_PARTINRAWPARTLIST_WALL, PartInRawPartColumns) End If End Sub diff --git a/EgtBEAMWALL.ViewerOptimizer/BTLParam/RawPartListV.xaml b/EgtBEAMWALL.ViewerOptimizer/BTLParam/RawPartListV.xaml index 0c1d0bf8..27788c2a 100644 --- a/EgtBEAMWALL.ViewerOptimizer/BTLParam/RawPartListV.xaml +++ b/EgtBEAMWALL.ViewerOptimizer/BTLParam/RawPartListV.xaml @@ -9,10 +9,7 @@ RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:RawPartListV}}}" AutoGenerateColumns="False" CanUserDeleteRows="False" - CanUserSortColumns="True" - CanUserResizeColumns="True" CanUserResizeRows="False" - CanUserReorderColumns="true" SelectionMode="Single" ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto" @@ -21,15 +18,13 @@ BindingColumns="{Binding RawPartColumns}"> - + - + @@ -72,8 +67,7 @@ - + + - + - + - + - + - + diff --git a/EgtBEAMWALL.ViewerOptimizer/BTLParam/RawPartListVM.vb b/EgtBEAMWALL.ViewerOptimizer/BTLParam/RawPartListVM.vb index 5aa52360..60f2e103 100644 --- a/EgtBEAMWALL.ViewerOptimizer/BTLParam/RawPartListVM.vb +++ b/EgtBEAMWALL.ViewerOptimizer/BTLParam/RawPartListVM.vb @@ -6,12 +6,12 @@ Public Class RawPartListVM #Region "FIELDS & PROPERTIES" - Private m_RawPartColumns As New ObservableCollection(Of String) - Public Property RawPartColumns As ObservableCollection(Of String) + Private m_RawPartColumns As New ObservableCollection(Of EgtDataGridColumn) + Public Property RawPartColumns As ObservableCollection(Of EgtDataGridColumn) Get Return m_RawPartColumns End Get - Set(value As ObservableCollection(Of String)) + Set(value As ObservableCollection(Of EgtDataGridColumn)) m_RawPartColumns = value End Set End Property @@ -75,25 +75,19 @@ Public Class RawPartListVM Sub New() ' Aggiungo riferimento a Map Map.SetRefRawPartListVM(Me) - ' aggiungo colonne - RawPartColumns.Add(COL_NAME) - RawPartColumns.Add(COL_CALC) - RawPartColumns.Add(COL_STARTCUT) - RawPartColumns.Add(COL_W) - RawPartColumns.Add(COL_H) - RawPartColumns.Add(COL_L) - RawPartColumns.Add(COL_MATERIAL) - RawPartColumns.Add(COL_USAGE) - RawPartColumns.Add(COL_WASTE) + ' carico le colonne della datagrid + GetPrivateProfileColumns(S_RAWPARTLIST_BEAM, RawPartColumns) End Sub #End Region ' CONSTRUCTOR Friend Sub UpdateColumns(nMachType As MachineType) If nMachType = MachineType.BEAM Then - If IsNothing(m_RawPartColumns.FirstOrDefault(Function(x) x = COL_STARTCUT)) Then m_RawPartColumns.Insert(2, COL_STARTCUT) + RawPartColumns.Clear() + GetPrivateProfileColumns(S_RAWPARTLIST_BEAM, RawPartColumns) ElseIf nMachType = MachineType.WALL Then - If Not IsNothing(m_RawPartColumns.FirstOrDefault(Function(x) x = COL_STARTCUT)) Then m_RawPartColumns.Remove(COL_STARTCUT) + RawPartColumns.Clear() + GetPrivateProfileColumns(S_RAWPARTLIST_WALL, RawPartColumns) End If End Sub diff --git a/EgtBEAMWALL.ViewerOptimizer/Constants/ConstDataGridColumnsIni.vb b/EgtBEAMWALL.ViewerOptimizer/Constants/ConstDataGridColumnsIni.vb new file mode 100644 index 00000000..9330a326 --- /dev/null +++ b/EgtBEAMWALL.ViewerOptimizer/Constants/ConstDataGridColumnsIni.vb @@ -0,0 +1,13 @@ +Module ConstDataGridColumnsIni + + Public Const DATAGRIDCOLUMNS_FILE_NAME As String = "DataGridColumns.ini" + + Public Const S_FEATURELIST As String = "DG_FeatureList" + Public Const S_OPENPROJFILEDLG_PROJ As String = "DG_OpenProjectFileDialog_PROJ" + Public Const S_OPENPROJFILEDLG_PROD As String = "DG_OpenProjectFileDialog_PROD" + Public Const S_RAWPARTLIST_BEAM As String = "DG_RawPartList_BEAM" + Public Const S_RAWPARTLIST_WALL As String = "DG_RawPartList_WALL" + Public Const S_PARTINRAWPARTLIST_BEAM As String = "DG_PartInRawPartList_BEAM" + Public Const S_PARTINRAWPARTLIST_WALL As String = "DG_PartInRawPartList_WALL" + +End Module diff --git a/EgtBEAMWALL.ViewerOptimizer/EgtBEAMWALL.ViewerOptimizer.vbproj b/EgtBEAMWALL.ViewerOptimizer/EgtBEAMWALL.ViewerOptimizer.vbproj index 1922ea68..c3386d7f 100644 --- a/EgtBEAMWALL.ViewerOptimizer/EgtBEAMWALL.ViewerOptimizer.vbproj +++ b/EgtBEAMWALL.ViewerOptimizer/EgtBEAMWALL.ViewerOptimizer.vbproj @@ -174,6 +174,7 @@ + FreeContourManagerV.xaml @@ -217,6 +218,7 @@ + WarehouseWndV.xaml diff --git a/EgtBEAMWALL.ViewerOptimizer/MainMenu/MainMenuVM.vb b/EgtBEAMWALL.ViewerOptimizer/MainMenu/MainMenuVM.vb index e21fe53b..fdd70173 100644 --- a/EgtBEAMWALL.ViewerOptimizer/MainMenu/MainMenuVM.vb +++ b/EgtBEAMWALL.ViewerOptimizer/MainMenu/MainMenuVM.vb @@ -157,10 +157,19 @@ Public Class MainMenuVM ' apro progetto proj If Not IsNothing(Map.refProjManagerVM.CurrProj) Then If IsNothing(Map.refProjManagerVM.CurrProj) OrElse Map.refProjManagerVM.CurrProj.bReloadProject Then - Map.refProjManagerVM.OpenProject(Map.refProjManagerVM.CurrProj) + 'Map.refProjManagerVM.OpenProject(Map.refProjManagerVM.CurrProj) + If Map.refSceneHostVM.MainController.OpenProject(Map.refProjManagerVM.CurrProj.sProjPath, False) Then + ' aggiorno le colonne in base al tipo progetto + Map.refRawPartListVM.UpdateColumns(Map.refProjectVM.BTLStructureVM.nPROJTYPE) + Map.refPartInRawPartListVM.UpdateColumns(Map.refProjectVM.BTLStructureVM.nPROJTYPE) + DbControllers.m_ProjController.LockByProjId(Map.refProjManagerVM.CurrProj.nProjId, True) + ' aggiorno titolo + Map.refMainWindowVM.UpdateTitle() + Map.refProjManagerVM.NotifyPropertyChanged(NameOf(Map.refProjManagerVM.MruFileNames)) + End If Else - ' verifico se il prod di provenienza ha piu' proj - If Not IsNothing(Map.refProdManagerVM.CurrProd) AndAlso Map.refProdManagerVM.CurrProd.nProjIdList.Count > 1 Then + ' verifico se il prod di provenienza ha piu' proj + If Not IsNothing(Map.refProdManagerVM.CurrProd) AndAlso Map.refProdManagerVM.CurrProd.nProjIdList.Count > 1 Then ' se si rigenero BTLStructure Map.refProjectVM.BTLStructureVM = New BTLStructureVM(BTLStructureM.CreateBTLStructure(Map.refProjManagerVM.CurrProj.nProjId)) End If @@ -215,7 +224,15 @@ Public Class MainMenuVM If File.Exists(Map.refProdManagerVM.CurrProd.sProdPath) Then ' apro progetto If Map.refProdManagerVM.CurrProd.bReloadProject Then - Map.refSceneHostVM.MainController.OpenProject(Map.refProdManagerVM.CurrProd.sProdPath, False) + If Map.refSceneHostVM.MainController.OpenProject(Map.refProdManagerVM.CurrProd.sProdPath, False) Then + ' aggiorno le colonne in base al tipo progetto + Map.refRawPartListVM.UpdateColumns(Map.refProjectVM.BTLStructureVM.nPROJTYPE) + Map.refPartInRawPartListVM.UpdateColumns(Map.refProjectVM.BTLStructureVM.nPROJTYPE) + DbControllers.m_ProdController.LockByProdId(Map.refProdManagerVM.CurrProd.nProdId, True) + ' aggiorno titolo + Map.refMainWindowVM.UpdateTitle() + Map.refProdManagerVM.NotifyPropertyChanged(NameOf(Map.refProdManagerVM.MruFileNames)) + End If Else ' verifico se il prod ha piu' proj If Map.refProdManagerVM.CurrProd.nProjIdList.Count > 1 Then diff --git a/EgtBEAMWALL.ViewerOptimizer/MainWindow/MainWindowM.vb b/EgtBEAMWALL.ViewerOptimizer/MainWindow/MainWindowM.vb index 96ffeeb7..f11bf9ee 100644 --- a/EgtBEAMWALL.ViewerOptimizer/MainWindow/MainWindowM.vb +++ b/EgtBEAMWALL.ViewerOptimizer/MainWindow/MainWindowM.vb @@ -180,6 +180,8 @@ Public Class MainWindowM IniFile.m_sIniFile = m_sConfigDir & "\" & INI_FILE_NAME ' Impostazione path BTL Ini File BTLIniFile.m_sBTLIniFile = m_sConfigDir & "\" & BTLFEATURES_FILE_NAME + ' Impostazione path Ini file DataGrid + DataGridColumnsIniFile.m_sDataGridColumnsIniFile = m_sConfigDir & "\" & DATAGRIDCOLUMNS_FILE_NAME ' Impostazione path resources dir m_sResourcesRoot = m_sDataRoot & "\" & RES_DIR ' Impostazione direttorio per le macchine diff --git a/EgtBEAMWALL.ViewerOptimizer/OpenProjectFileDialog/OpenProjectFileDialogV.xaml b/EgtBEAMWALL.ViewerOptimizer/OpenProjectFileDialog/OpenProjectFileDialogV.xaml index f00deff9..3d598c0a 100644 --- a/EgtBEAMWALL.ViewerOptimizer/OpenProjectFileDialog/OpenProjectFileDialogV.xaml +++ b/EgtBEAMWALL.ViewerOptimizer/OpenProjectFileDialog/OpenProjectFileDialogV.xaml @@ -61,10 +61,7 @@ SelectedItem="{Binding SelProject}" CanUserAddRows="False" AutoGenerateColumns="False" - CanUserSortColumns="True" - CanUserResizeColumns="True" CanUserResizeRows="False" - CanUserReorderColumns="True" SelectionMode="Single" ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto" @@ -73,9 +70,7 @@ BindingColumns="{Binding ProjectColumns}"> - + @@ -83,9 +78,7 @@ - + @@ -93,9 +86,7 @@ - + @@ -103,9 +94,7 @@ - + @@ -113,9 +102,7 @@ - + @@ -123,17 +110,13 @@ - + - + diff --git a/EgtBEAMWALL.ViewerOptimizer/OpenProjectFileDialog/OpenProjectFileDialogVM.vb b/EgtBEAMWALL.ViewerOptimizer/OpenProjectFileDialog/OpenProjectFileDialogVM.vb index a332a003..1c6698d2 100644 --- a/EgtBEAMWALL.ViewerOptimizer/OpenProjectFileDialog/OpenProjectFileDialogVM.vb +++ b/EgtBEAMWALL.ViewerOptimizer/OpenProjectFileDialog/OpenProjectFileDialogVM.vb @@ -10,12 +10,12 @@ Public Class OpenProjectFileDialogVM Friend Event m_CloseWindow(bDialogResult As Boolean) - Private m_ProjectColumns As New ObservableCollection(Of String) - Public Property ProjectColumns As ObservableCollection(Of String) + Private m_ProjectColumns As New ObservableCollection(Of EgtDataGridColumn) + Public Property ProjectColumns As ObservableCollection(Of EgtDataGridColumn) Get Return m_ProjectColumns End Get - Set(value As ObservableCollection(Of String)) + Set(value As ObservableCollection(Of EgtDataGridColumn)) m_ProjectColumns = value End Set End Property @@ -270,11 +270,8 @@ Public Class OpenProjectFileDialogVM Private Sub LoadColumns(ProjectType As ProjectType) If ProjectType = ProjectType.PROJ Then - ProjectColumns.Add("colPROJID") - ProjectColumns.Add("colBTLNAME") - ProjectColumns.Add("colLISTNAME") - ProjectColumns.Add("colEXPDATE") - ProjectColumns.Add("colCRTDATE") + ' carico le colonne della datagrid + GetPrivateProfileColumns(S_OPENPROJFILEDLG_PROJ, ProjectColumns) ' carico campi su cui eseguire il filtro di ricerca m_SearchColumnList = New ObservableCollection(Of IdNameStruct)({New IdNameStruct(OpenProjFileColumn.NULL, ""), New IdNameStruct(OpenProjFileColumn.ID, Id_Msg), @@ -283,9 +280,8 @@ Public Class OpenProjectFileDialogVM New IdNameStruct(OpenProjFileColumn.EXPORTDATE, ExportDate_Msg), New IdNameStruct(OpenProjFileColumn.CREATEDATE, CreateDate_Msg)}) ElseIf ProjectType = ProjectType.PROD Then - ProjectColumns.Add("colPRODID") - ProjectColumns.Add("colBTLNAME") - ProjectColumns.Add("colCRTDATE") + ' carico le colonne della datagrid + GetPrivateProfileColumns(S_OPENPROJFILEDLG_PROD, ProjectColumns) ' carico campi su cui eseguire il filtro di ricerca m_SearchColumnList = New ObservableCollection(Of IdNameStruct)({New IdNameStruct(OpenProjFileColumn.NULL, ""), New IdNameStruct(OpenProjFileColumn.ID, Id_Msg), diff --git a/EgtBEAMWALL.ViewerOptimizer/Utility/DataGridColumnsIniFile.vb b/EgtBEAMWALL.ViewerOptimizer/Utility/DataGridColumnsIniFile.vb new file mode 100644 index 00000000..dae24cd1 --- /dev/null +++ b/EgtBEAMWALL.ViewerOptimizer/Utility/DataGridColumnsIniFile.vb @@ -0,0 +1,41 @@ +Imports System.Collections.ObjectModel +Imports EgtUILib +Imports EgtWPFLib5 + +Friend Module DataGridColumnsIniFile + + Public m_sDataGridColumnsIniFile As String + + Public Function GetPrivateProfileColumns(ParentDGName As String, ByRef ocColumns As ObservableCollection(Of EgtDataGridColumn)) As Boolean + Dim colIndex As Integer = 0 + Dim str = String.Empty + While EgtUILib.GetPrivateProfileString(ParentDGName, colIndex, String.Empty, str, m_sDataGridColumnsIniFile) > 0 + Dim sColumnParams() As String = str.Split(","c) + ' verifico numero minimo di parametri + If sColumnParams.Count >= 7 Then + ' cancello spazi + For index = 0 To sColumnParams.Count - 1 + sColumnParams(index) = sColumnParams(index).Trim() + Next + ' creo colonna + Dim sName = sColumnParams(0) + Dim bReorder As Boolean = sColumnParams(1).Equals("1") + Dim bResize As Boolean = sColumnParams(2).Equals("1") + Dim bSort As Boolean = sColumnParams(3).Equals("1") + Dim bIsReadOnly As Boolean = sColumnParams(4).Equals("1") + Dim Width As Double + Dim WidthType As DataGridLengthUnitType + StringToDouble(sColumnParams(5), Width) + Integer.TryParse(sColumnParams(6), WidthType) + ocColumns.Add(New EgtDataGridColumn(ParentDGName, sName, bReorder, bResize, bSort, bIsReadOnly, New DataGridLength(Width, WidthType))) + End If + colIndex += 1 + End While + Return ocColumns.Count > 0 + End Function + + Public Function WriteColumnPrivateProfileParam(ParentDataGridName As String, DisplayIndex As String, sColumnParams As String) As Boolean + Return WritePrivateProfileString(ParentDataGridName, DisplayIndex, sColumnParams, m_sDataGridColumnsIniFile) + End Function + +End Module \ No newline at end of file diff --git a/EgtBEAMWALL.ViewerOptimizer/Utility/EgtDataGrid.xaml b/EgtBEAMWALL.ViewerOptimizer/Utility/EgtDataGrid.xaml index c174e845..0a9480a2 100644 --- a/EgtBEAMWALL.ViewerOptimizer/Utility/EgtDataGrid.xaml +++ b/EgtBEAMWALL.ViewerOptimizer/Utility/EgtDataGrid.xaml @@ -1,6 +1,13 @@  + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> + + + + + diff --git a/EgtBEAMWALL.ViewerOptimizer/Utility/EgtDataGrid.xaml.vb b/EgtBEAMWALL.ViewerOptimizer/Utility/EgtDataGrid.xaml.vb index 60ca6aca..a3d6515d 100644 --- a/EgtBEAMWALL.ViewerOptimizer/Utility/EgtDataGrid.xaml.vb +++ b/EgtBEAMWALL.ViewerOptimizer/Utility/EgtDataGrid.xaml.vb @@ -1,5 +1,7 @@ Imports System.Collections.ObjectModel Imports System.Collections.Specialized +Imports EgtUILib +Imports EgtWPFLib5 Public Class EgtDataGrid @@ -7,20 +9,20 @@ Public Class EgtDataGrid InitializeComponent() End Sub - Public Shadows Property BindingColumns As ObservableCollection(Of String) + Public Shadows Property BindingColumns As ObservableCollection(Of EgtDataGridColumn) Get - Return CType(MyBase.GetValue(BindingColumnsProperty), ObservableCollection(Of String)) + Return CType(MyBase.GetValue(BindingColumnsProperty), ObservableCollection(Of EgtDataGridColumn)) End Get - Set(value As ObservableCollection(Of String)) + Set(value As ObservableCollection(Of EgtDataGridColumn)) MyBase.SetValue(BindingColumnsProperty, value) End Set End Property - Public Shared ReadOnly BindingColumnsProperty As DependencyProperty = DependencyProperty.Register("BindingColumns", GetType(ObservableCollection(Of String)), GetType(EgtDataGrid), New FrameworkPropertyMetadata(New ObservableCollection(Of String), New PropertyChangedCallback(AddressOf OnDataGridColumnsPropertyChanged)) With {.BindsTwoWayByDefault = True}) + Public Shared ReadOnly BindingColumnsProperty As DependencyProperty = DependencyProperty.Register("BindingColumns", GetType(ObservableCollection(Of EgtDataGridColumn)), GetType(EgtDataGrid), New FrameworkPropertyMetadata(New ObservableCollection(Of EgtDataGridColumn), New PropertyChangedCallback(AddressOf OnDataGridColumnsPropertyChanged)) With {.BindsTwoWayByDefault = True}) Private Shared Sub OnDataGridColumnsPropertyChanged(ByVal source As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs) Dim context = TryCast(source, EgtDataGrid) - Dim oldItems = TryCast(e.OldValue, ObservableCollection(Of String)) + Dim oldItems = TryCast(e.OldValue, ObservableCollection(Of EgtDataGridColumn)) If oldItems IsNot Nothing Then @@ -32,12 +34,13 @@ Public Class EgtDataGrid RemoveHandler oldItems.CollectionChanged, AddressOf context.collectionChanged End If - Dim newItems = TryCast(e.NewValue, ObservableCollection(Of String)) + Dim newItems = TryCast(e.NewValue, ObservableCollection(Of EgtDataGridColumn)) If newItems IsNot Nothing Then For Index = 0 To newItems.Count - 1 - Dim col As DataGridColumn = context.FindResource(newItems(Index)) + Dim col As DataGridColumn = context.FindResource(newItems(Index).Name) + newItems(Index).InitColumn(col) context.Columns.Add(col) Next @@ -51,8 +54,9 @@ Public Class EgtDataGrid If e.NewItems IsNot Nothing Then - For Each one As String In e.NewItems - Dim col As DataGridColumn = CurrDataGrid.FindResource(one) + For Each one As EgtDataGridColumn In e.NewItems + Dim col As DataGridColumn = CurrDataGrid.FindResource(one.Name) + one.InitColumn(col) CurrDataGrid.Columns.Insert(e.NewStartingIndex, col) If col.DisplayIndex <> e.NewStartingIndex Then CurrDataGrid.Columns(e.NewStartingIndex).DisplayIndex = e.NewStartingIndex @@ -64,8 +68,8 @@ Public Class EgtDataGrid If e.OldItems IsNot Nothing Then - For Each one As String In e.OldItems - Dim col As DataGridColumn = CurrDataGrid.FindResource(one) + For Each one As EgtDataGridColumn In e.OldItems + Dim col As DataGridColumn = CurrDataGrid.FindResource(one.Name) CurrDataGrid.Columns.Remove(col) Next End If @@ -91,4 +95,179 @@ Public Class EgtDataGrid CurrDataGrid.Columns(e.NewStartingIndex) = col End Select End Sub + + Private Sub Cell_SizedChanged(sender As Object, e As SizeChangedEventArgs) + ' ad ogni ridimensionamento della cella del ColumnHeader salvo le nuove dimensioni nell'ini + If Not IsNothing(e.OriginalSource.Column) AndAlso Not IsNothing(BindingColumns(e.OriginalSource.Column.DisplayIndex)) Then + BindingColumns(e.OriginalSource.Column.DisplayIndex).SaveDataGridColumn() + End If + End Sub + + Public OldIndex As Integer = 0 + + Private Sub CurrDataGrid_ColumnReordering(sender As Object, e As DataGridColumnEventArgs) Handles CurrDataGrid.ColumnReordering + ' conservo il vecchio indice in modo da effettuare lo scambio in BindingColumns una volta riordinate graficamente + OldIndex = e.Column.DisplayIndex + End Sub + + Private Sub CurrDataGrid_ColumnReordered(sender As Object, e As DataGridColumnEventArgs) Handles CurrDataGrid.ColumnReordered + ' scambio le colonne in BindingColumns + BindingColumns.Move(OldIndex, e.Column.DisplayIndex) + ' scrivo tutte le colonne interessate dallo spostamento + ' (se OldIndex > e.Column.DisplayIndex, il ciclo non viene eseguito quindi lo faccio nell'altro senso) + For index = OldIndex To e.Column.DisplayIndex + BindingColumns(index).SaveDataGridColumn() + Next + For index = e.Column.DisplayIndex To OldIndex + BindingColumns(index).SaveDataGridColumn() + Next + End Sub + +End Class + +Public Class EgtDataGridColumn + + Private m_dgColumn As DataGridColumn + + Private Property m_ParentDataGridName As String + Public Property ParentDataGridName As String + Get + Return m_ParentDataGridName + End Get + Set(value As String) + m_ParentDataGridName = value + End Set + End Property + + Private Property m_Name As String + Public Property Name As String + Get + Return m_Name + End Get + Set(value As String) + m_Name = value + End Set + End Property + + Private Property m_Width As DataGridLength + Public Property Width As DataGridLength + Get + Return m_dgColumn.Width + End Get + Set(value As DataGridLength) + If Not IsNothing(m_dgColumn) Then + m_dgColumn.Width = value + Else + m_Width = value + End If + End Set + End Property + + Private Property m_DisplayIndex As Integer + Public Property DisplayIndex As Integer + Get + Return m_dgColumn.DisplayIndex + End Get + Set(value As Integer) + If Not IsNothing(m_dgColumn) Then + m_dgColumn.DisplayIndex = value + Else + m_DisplayIndex = value + End If + End Set + End Property + + Private Property m_IsReadOnly As Boolean = True + Public Property IsReadOnly As Boolean + Get + Return m_dgColumn.IsReadOnly + End Get + Set(value As Boolean) + If Not IsNothing(m_dgColumn) Then + m_dgColumn.IsReadOnly = value + Else + m_IsReadOnly = value + End If + SaveDataGridColumn() + End Set + End Property + + Private m_CanUserReorder As Boolean + Public Property CanUserReorder As Boolean + Get + Return m_dgColumn.CanUserReorder + End Get + Set(value As Boolean) + If Not IsNothing(m_dgColumn) Then + m_dgColumn.CanUserReorder = value + Else + m_CanUserReorder = value + End If + SaveDataGridColumn() + End Set + End Property + + Private m_CanUserResize As Boolean + Public Property CanUserResize As Boolean + Get + Return m_dgColumn.CanUserResize + End Get + Set(value As Boolean) + If Not IsNothing(m_dgColumn) Then + m_dgColumn.CanUserResize = value + Else + m_CanUserResize = value + End If + SaveDataGridColumn() + End Set + End Property + + Private m_CanUserSort As Boolean + Public Property CanUserSort As Boolean + Get + Return m_dgColumn.CanUserSort + End Get + Set(value As Boolean) + If Not IsNothing(m_dgColumn) Then + m_dgColumn.CanUserSort = value + Else + m_CanUserSort = value + End If + SaveDataGridColumn() + End Set + End Property + + Sub New(sName As String) + m_Name = sName + End Sub + + Sub New(sParentDG As String, sName As String, bCanUserReorder As Boolean, bCanUserResize As Boolean, bCanUserSort As Boolean, bIsReadOnly As Boolean, Width As DataGridLength) + m_ParentDataGridName = sParentDG + m_Name = sName + m_CanUserReorder = bCanUserReorder + m_CanUserResize = bCanUserResize + m_CanUserSort = bCanUserSort + m_IsReadOnly = bIsReadOnly + m_Width = Width + End Sub + + Friend Sub InitColumn(dgColumn As DataGridColumn) + m_dgColumn = dgColumn + m_dgColumn.CanUserReorder = m_CanUserReorder + m_dgColumn.CanUserResize = m_CanUserResize + m_dgColumn.CanUserSort = m_CanUserSort + m_dgColumn.IsReadOnly = m_IsReadOnly + 'm_dgColumn.DisplayIndex = m_DisplayIndex + m_dgColumn.Width = m_Width + End Sub + + ' funzione per calcolare e scrivere la stringa dei parametri della colonna nell'INI + Public Function SaveDataGridColumn() As Boolean + Dim bOk As Boolean + Dim sColumnParams = String.Empty + sColumnParams = Name & "," & If(CanUserReorder, 1, 0) & "," & If(CanUserResize, 1, 0) & "," & If(CanUserSort, 1, 0) & "," & If(IsReadOnly, 1, 0) & "," & DoubleToString(Width.Value, 6) & "," & Width.UnitType + bOk = WriteColumnPrivateProfileParam(ParentDataGridName, DisplayIndex, sColumnParams) + Return bOk + End Function + End Class