From 407a5979ac6d63b2d5d0bdf33b1249fc99b84e5a Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Fri, 10 Jan 2020 14:30:58 +0100 Subject: [PATCH] first pass of new layout loading and editing --- app/DD_PM_WINDREAM/DD_PM_WINDREAM.vbproj | 2 + .../frmDesignerLayout.Designer.vb | 86 ++++++----- app/DD_PM_WINDREAM/frmDesignerLayout.vb | 135 ++++++++++++++++-- .../frmDesignerLayout/Loader.vb | 110 ++++++++++++++ .../frmDesignerLayout/Metadata.vb | 5 + 5 files changed, 291 insertions(+), 47 deletions(-) create mode 100644 app/DD_PM_WINDREAM/frmDesignerLayout/Loader.vb create mode 100644 app/DD_PM_WINDREAM/frmDesignerLayout/Metadata.vb diff --git a/app/DD_PM_WINDREAM/DD_PM_WINDREAM.vbproj b/app/DD_PM_WINDREAM/DD_PM_WINDREAM.vbproj index 6da43de..21005b2 100644 --- a/app/DD_PM_WINDREAM/DD_PM_WINDREAM.vbproj +++ b/app/DD_PM_WINDREAM/DD_PM_WINDREAM.vbproj @@ -294,6 +294,8 @@ Form + + frmDocView.vb diff --git a/app/DD_PM_WINDREAM/frmDesignerLayout.Designer.vb b/app/DD_PM_WINDREAM/frmDesignerLayout.Designer.vb index abe11dc..181f559 100644 --- a/app/DD_PM_WINDREAM/frmDesignerLayout.Designer.vb +++ b/app/DD_PM_WINDREAM/frmDesignerLayout.Designer.vb @@ -25,14 +25,14 @@ Partial Class frmDesignerLayout Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmDesignerLayout)) Me.RibbonControl1 = New DevExpress.XtraBars.Ribbon.RibbonControl() Me.BarListItem1 = New DevExpress.XtraBars.BarListItem() + Me.BarButtonItem1 = New DevExpress.XtraBars.BarButtonItem() + Me.BarButtonItem2 = New DevExpress.XtraBars.BarButtonItem() Me.RibbonPage1 = New DevExpress.XtraBars.Ribbon.RibbonPage() Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() Me.RibbonPageGroup2 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() Me.RibbonStatusBar1 = New DevExpress.XtraBars.Ribbon.RibbonStatusBar() Me.RibbonPage2 = New DevExpress.XtraBars.Ribbon.RibbonPage() Me.SplitContainerControl1 = New DevExpress.XtraEditors.SplitContainerControl() - Me.LayoutControl1 = New DevExpress.XtraLayout.LayoutControl() - Me.Root = New DevExpress.XtraLayout.LayoutControlGroup() Me.XtraTabControl1 = New DevExpress.XtraTab.XtraTabControl() Me.XtraTabPage1 = New DevExpress.XtraTab.XtraTabPage() Me.PropertyGridControl1 = New DevExpress.XtraVerticalGrid.PropertyGridControl() @@ -43,25 +43,26 @@ Partial Class frmDesignerLayout Me.ToolboxItemMemoedit = New DevExpress.XtraToolbox.ToolboxItem() Me.ToolboxItemDatepicker = New DevExpress.XtraToolbox.ToolboxItem() Me.ToolboxItemCheckbox = New DevExpress.XtraToolbox.ToolboxItem() - Me.BarButtonItem1 = New DevExpress.XtraBars.BarButtonItem() + Me.LayoutControlMain = New DevExpress.XtraLayout.LayoutControl() + Me.LayoutControlGroupMain = New DevExpress.XtraLayout.LayoutControlGroup() CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.SplitContainerControl1, System.ComponentModel.ISupportInitialize).BeginInit() Me.SplitContainerControl1.SuspendLayout() - CType(Me.LayoutControl1, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.Root, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.XtraTabControl1, System.ComponentModel.ISupportInitialize).BeginInit() Me.XtraTabControl1.SuspendLayout() Me.XtraTabPage1.SuspendLayout() CType(Me.PropertyGridControl1, System.ComponentModel.ISupportInitialize).BeginInit() Me.XtraTabPage2.SuspendLayout() + CType(Me.LayoutControlMain, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.LayoutControlGroupMain, System.ComponentModel.ISupportInitialize).BeginInit() Me.SuspendLayout() ' 'RibbonControl1 ' Me.RibbonControl1.ExpandCollapseItem.Id = 0 - Me.RibbonControl1.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl1.ExpandCollapseItem, Me.RibbonControl1.SearchEditItem, Me.BarListItem1, Me.BarButtonItem1}) + Me.RibbonControl1.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl1.ExpandCollapseItem, Me.RibbonControl1.SearchEditItem, Me.BarListItem1, Me.BarButtonItem1, Me.BarButtonItem2}) Me.RibbonControl1.Location = New System.Drawing.Point(0, 0) - Me.RibbonControl1.MaxItemId = 3 + Me.RibbonControl1.MaxItemId = 4 Me.RibbonControl1.Name = "RibbonControl1" Me.RibbonControl1.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1}) Me.RibbonControl1.Size = New System.Drawing.Size(1196, 158) @@ -75,6 +76,18 @@ Partial Class frmDesignerLayout Me.BarListItem1.Name = "BarListItem1" Me.BarListItem1.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithText ' + 'BarButtonItem1 + ' + Me.BarButtonItem1.Caption = "BarButtonItem1" + Me.BarButtonItem1.Id = 2 + Me.BarButtonItem1.Name = "BarButtonItem1" + ' + 'BarButtonItem2 + ' + Me.BarButtonItem2.Caption = "Layout speichern" + Me.BarButtonItem2.Id = 3 + Me.BarButtonItem2.Name = "BarButtonItem2" + ' 'RibbonPage1 ' Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup1, Me.RibbonPageGroup2}) @@ -84,6 +97,7 @@ Partial Class frmDesignerLayout 'RibbonPageGroup1 ' Me.RibbonPageGroup1.ItemLinks.Add(Me.BarListItem1) + Me.RibbonPageGroup1.ItemLinks.Add(Me.BarButtonItem2) Me.RibbonPageGroup1.Name = "RibbonPageGroup1" Me.RibbonPageGroup1.Text = "RibbonPageGroup1" ' @@ -110,7 +124,7 @@ Partial Class frmDesignerLayout Me.SplitContainerControl1.Dock = System.Windows.Forms.DockStyle.Fill Me.SplitContainerControl1.Location = New System.Drawing.Point(0, 158) Me.SplitContainerControl1.Name = "SplitContainerControl1" - Me.SplitContainerControl1.Panel1.Controls.Add(Me.LayoutControl1) + Me.SplitContainerControl1.Panel1.Controls.Add(Me.LayoutControlMain) Me.SplitContainerControl1.Panel1.Text = "Panel1" Me.SplitContainerControl1.Panel2.Controls.Add(Me.XtraTabControl1) Me.SplitContainerControl1.Panel2.Text = "Panel2" @@ -118,24 +132,6 @@ Partial Class frmDesignerLayout Me.SplitContainerControl1.SplitterPosition = 818 Me.SplitContainerControl1.TabIndex = 8 ' - 'LayoutControl1 - ' - Me.LayoutControl1.Dock = System.Windows.Forms.DockStyle.Fill - Me.LayoutControl1.Location = New System.Drawing.Point(0, 0) - Me.LayoutControl1.Name = "LayoutControl1" - Me.LayoutControl1.Root = Me.Root - Me.LayoutControl1.Size = New System.Drawing.Size(818, 440) - Me.LayoutControl1.TabIndex = 0 - Me.LayoutControl1.Text = "LayoutControl1" - ' - 'Root - ' - Me.Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.[True] - Me.Root.GroupBordersVisible = False - Me.Root.Name = "Root" - Me.Root.Size = New System.Drawing.Size(818, 440) - Me.Root.TextVisible = False - ' 'XtraTabControl1 ' Me.XtraTabControl1.Dock = System.Windows.Forms.DockStyle.Fill @@ -223,11 +219,30 @@ Partial Class frmDesignerLayout Me.ToolboxItemCheckbox.Name = "ToolboxItemCheckbox" Me.ToolboxItemCheckbox.Tag = "Checkbox" ' - 'BarButtonItem1 - ' - Me.BarButtonItem1.Caption = "BarButtonItem1" - Me.BarButtonItem1.Id = 2 - Me.BarButtonItem1.Name = "BarButtonItem1" + 'LayoutControlMain + ' + Me.LayoutControlMain.AllowCustomization = False + Me.LayoutControlMain.AllowDrop = True + Me.LayoutControlMain.BackColor = System.Drawing.Color.Transparent + Me.LayoutControlMain.Dock = System.Windows.Forms.DockStyle.Fill + Me.LayoutControlMain.Location = New System.Drawing.Point(0, 0) + Me.LayoutControlMain.Name = "LayoutControlMain" + Me.LayoutControlMain.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = New System.Drawing.Rectangle(706, 255, 650, 400) + Me.LayoutControlMain.OptionsCustomizationForm.ShowLayoutTreeView = False + Me.LayoutControlMain.OptionsCustomizationForm.ShowLoadButton = False + Me.LayoutControlMain.OptionsCustomizationForm.ShowSaveButton = False + Me.LayoutControlMain.Root = Me.LayoutControlGroupMain + Me.LayoutControlMain.Size = New System.Drawing.Size(818, 440) + Me.LayoutControlMain.TabIndex = 3 + Me.LayoutControlMain.Text = "LayoutControl1" + ' + 'LayoutControlGroupMain + ' + Me.LayoutControlGroupMain.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.[True] + Me.LayoutControlGroupMain.GroupBordersVisible = False + Me.LayoutControlGroupMain.Name = "Root" + Me.LayoutControlGroupMain.Size = New System.Drawing.Size(818, 440) + Me.LayoutControlGroupMain.TextVisible = False ' 'frmDesignerLayout ' @@ -244,13 +259,13 @@ Partial Class frmDesignerLayout CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.SplitContainerControl1, System.ComponentModel.ISupportInitialize).EndInit() Me.SplitContainerControl1.ResumeLayout(False) - CType(Me.LayoutControl1, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.Root, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.XtraTabControl1, System.ComponentModel.ISupportInitialize).EndInit() Me.XtraTabControl1.ResumeLayout(False) Me.XtraTabPage1.ResumeLayout(False) CType(Me.PropertyGridControl1, System.ComponentModel.ISupportInitialize).EndInit() Me.XtraTabPage2.ResumeLayout(False) + CType(Me.LayoutControlMain, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.LayoutControlGroupMain, System.ComponentModel.ISupportInitialize).EndInit() Me.ResumeLayout(False) Me.PerformLayout() @@ -263,8 +278,6 @@ Partial Class frmDesignerLayout Friend WithEvents RibbonStatusBar1 As DevExpress.XtraBars.Ribbon.RibbonStatusBar Friend WithEvents RibbonPage2 As DevExpress.XtraBars.Ribbon.RibbonPage Friend WithEvents SplitContainerControl1 As DevExpress.XtraEditors.SplitContainerControl - Friend WithEvents LayoutControl1 As DevExpress.XtraLayout.LayoutControl - Friend WithEvents Root As DevExpress.XtraLayout.LayoutControlGroup Friend WithEvents XtraTabControl1 As DevExpress.XtraTab.XtraTabControl Friend WithEvents XtraTabPage1 As DevExpress.XtraTab.XtraTabPage Friend WithEvents XtraTabPage2 As DevExpress.XtraTab.XtraTabPage @@ -277,4 +290,7 @@ Partial Class frmDesignerLayout Friend WithEvents BarListItem1 As DevExpress.XtraBars.BarListItem Friend WithEvents PropertyGridControl1 As DevExpress.XtraVerticalGrid.PropertyGridControl Friend WithEvents BarButtonItem1 As DevExpress.XtraBars.BarButtonItem + Friend WithEvents BarButtonItem2 As DevExpress.XtraBars.BarButtonItem + Friend WithEvents LayoutControlMain As DevExpress.XtraLayout.LayoutControl + Friend WithEvents LayoutControlGroupMain As DevExpress.XtraLayout.LayoutControlGroup End Class diff --git a/app/DD_PM_WINDREAM/frmDesignerLayout.vb b/app/DD_PM_WINDREAM/frmDesignerLayout.vb index 77677b0..c80ddbb 100644 --- a/app/DD_PM_WINDREAM/frmDesignerLayout.vb +++ b/app/DD_PM_WINDREAM/frmDesignerLayout.vb @@ -1,26 +1,137 @@ -Public Class frmDesignerLayout - Dim DT_Foms As DataTable +Imports System.IO +Imports System.Text.Encoding +Imports DevExpress.XtraBars +Imports DevExpress.XtraLayout +Imports DevExpress.XtraLayout.Customization +Imports DevExpress.XtraLayout.Dragging +Imports DevExpress.XtraLayout.HitInfo +Imports DevExpress.XtraToolbox + +Public Class frmDesignerLayout + Private SelectedLayoutId As Integer = 0 + Private FormsDatatable As DataTable + Private _ControlLoader As ControlLoader + +#Region "Drag Helper" + Private _DragItem As BaseLayoutItem + Private _Window As DragFrameWindow + Private _DragController As LayoutItemDragController = Nothing + + Protected ReadOnly Property DragFrameWindow As DragFrameWindow + Get + If _Window Is Nothing Then + _Window = New DragFrameWindow(LayoutControlMain) + End If + Return _Window + End Get + End Property + + Private Sub ShowDragHelper() + DragFrameWindow.Visible = True + End Sub + + Private Sub HideDragHelper() + DragFrameWindow.Reset() + DragFrameWindow.Visible = False + End Sub + + Private Sub UpdateDragHelper(p As Point) + p = LayoutControlMain.PointToClient(p) + _DragController = New LayoutItemDragController(_DragItem, LayoutControlMain.Root, New Point(p.X, p.Y)) + DragFrameWindow.DragController = _DragController + End Sub +#End Region +#Region "Drag Drop Actions" + Private Sub ToolboxControlMain_DragItemDrop(sender As Object, e As ToolboxDragItemDropEventArgs) Handles ToolboxControlMain.DragItemDrop + Dim oPosition As Point = LayoutControlMain.PointToClient(MousePosition) + Dim oHitInfo As BaseLayoutItemHitInfo = LayoutControlMain.CalcHitInfo(oPosition) + Dim oLayoutControl As LayoutControlItem = DirectCast(_DragItem, LayoutControlItem) + Dim oControlName As String = oLayoutControl.Tag & Guid.NewGuid().ToString().GetHashCode().ToString("x") + Dim oControl As Control = _ControlLoader.CreateLayoutControl(oLayoutControl.Tag, oControlName, 0) + + If oLayoutControl IsNot Nothing Then + HideDragHelper() + oLayoutControl.Control = oControl + + If (_DragController IsNot Nothing AndAlso _DragItem IsNot Nothing) Then + If (_DragItem.Owner Is Nothing OrElse _DragItem.Parent Is Nothing) Then + _DragController.DragWildItem() + Else + _DragController.Drag() + End If + Focus() + End If + HideDragHelper() + '_DragItem = Nothing + End If + End Sub + + Private Sub ToolboxControlMain_DragItemStart(sender As Object, e As ToolboxDragItemStartEventArgs) Handles ToolboxControlMain.DragItemStart + _DragItem = CreateLayoutControlItem(e.Item.Tag) + End Sub + + Private Sub ToolboxControlMain_DragItemMove(sender As Object, e As DevExpress.XtraToolbox.ToolboxDragItemMoveEventArgs) Handles ToolboxControlMain.DragItemMove + If (CType(LayoutControlMain, ILayoutControl)).EnableCustomizationMode OrElse Me.DesignMode Then Return + Dim oFormPosition As Point = PointToClient(e.Location) + Dim oLayoutPosition As Point = LayoutControlMain.PointToClient(e.Location) + + If LayoutControlMain.Bounds.Contains(oFormPosition) Then + + If Not DragFrameWindow.Visible Then + DragFrameWindow.Visible = True + Return + End If + + UpdateDragHelper(e.Location) + Else + DragFrameWindow.Visible = False + End If + End Sub + + Private Function CreateLayoutControlItem(Id As String) As LayoutControlItem + Return New LayoutControlItem() With {.Tag = Id} + End Function +#End Region + Private Sub frmDesignerLayout_Load(sender As Object, e As EventArgs) Handles Me.Load Try + _ControlLoader = New ControlLoader(LOGCONFIG, LayoutControlGroupMain) + Dim oSQL = "Select * from TBIDB_LAYOUT_CONFIG" - DT_Foms = ClassDatabase.Return_Datatable_ConStr(oSQL, CONNECTION_STRING_IDB) - If Not IsNothing(DT_Foms) Then - For Each oRow As DataRow In DT_Foms.Rows - BarListItem1.Strings.Add(oRow.Item("TITLE")) + FormsDatatable = ClassDatabase.Return_Datatable_ConStr(oSQL, CONNECTION_STRING_IDB) + If Not IsNothing(FormsDatatable) Then + For Each oRow As DataRow In FormsDatatable.Rows + Dim oItem As New BarButtonItem(RibbonControl1.Manager, oRow.Item("TITLE")) + oItem.Tag = oRow.Item("GUID") + AddHandler oItem.ItemClick, AddressOf Item_Click + + BarListItem1.ItemLinks.Add(oItem) Next End If Catch ex As Exception MsgBox("Unexpected Error in FormLoad:" & ex.Message, MsgBoxStyle.Critical) End Try - End Sub - Private Sub BarListItem1_ListItemClick(sender As Object, e As DevExpress.XtraBars.ListItemClickEventArgs) Handles BarListItem1.ListItemClick - Dim barlistItem = e.Item - ' Dim oSelectedText = e.Item.str + Private Sub Item_Click(sender As Object, e As ItemClickEventArgs) + SelectedLayoutId = e.Item.Tag + Dim oRow As DataRow = FormsDatatable.Select($"GUID = {SelectedLayoutId}").First() + 'Dim oXml = oRow.Item("XML_CONTENT") + Dim b As Byte() = System.Convert.FromBase64String(oRow.Item("XML_CONTENT")) + + Using oStream As New MemoryStream(b, False) + LayoutControlMain.RestoreLayoutFromStream(oStream) + End Using End Sub - Private Sub BarButtonItem1_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem1.ItemClick - LayoutControl1.sa + Private Sub BarButtonItem2_ItemClick(sender As Object, e As ItemClickEventArgs) Handles BarButtonItem2.ItemClick + Using oStream As New MemoryStream() + LayoutControlMain.SaveLayoutToStream(oStream) + Dim oBase64 = System.Convert.ToBase64String(oStream.ToArray()) + 'Dim oXml As String = UTF8.GetString(oStream.ToArray()) + Dim oSql As String = $"UPDATE TBIDB_LAYOUT_CONFIG SET XML_CONTENT = '{oBase64}' WHERE GUID = {SelectedLayoutId}" + + ClassDatabase.Execute_non_Query_ConStr(oSql, CONNECTION_STRING_IDB) + End Using End Sub End Class \ No newline at end of file diff --git a/app/DD_PM_WINDREAM/frmDesignerLayout/Loader.vb b/app/DD_PM_WINDREAM/frmDesignerLayout/Loader.vb new file mode 100644 index 0000000..fe7ab40 --- /dev/null +++ b/app/DD_PM_WINDREAM/frmDesignerLayout/Loader.vb @@ -0,0 +1,110 @@ +Imports DevExpress.XtraEditors +Imports DevExpress.XtraLayout +Imports DigitalData.Modules.Logging + + +Public Class ControlLoader + Public Const CONTROL_TEXTEDIT = "TextBox" + Public Const CONTROL_MEMOEDIT = "Memoedit" + Public Const CONTROL_COMBOEDIT = "Combobox" + Public Const CONTROL_CHECKEDIT = "Checkbox" + Public Const CONTROL_RADIOEDIT = "Radiobutton" + Public Const CONTROL_DATEEDIT = "Datepicker" + + Private _LayoutControlGroup As LayoutControlGroup + Private _LayoutControls As List(Of BaseEdit) + Private _LogConfig As LogConfig + Private _LOgger As Logger + + Public ReadOnly Property LayoutControls As List(Of BaseEdit) + Get + If _LayoutControls Is Nothing Then + _LayoutControls = New List(Of BaseEdit) + End If + Return _LayoutControls + End Get + End Property + + Public Sub New(LogConfig As LogConfig, LayoutControlGroup As LayoutControlGroup) + _LayoutControlGroup = LayoutControlGroup + _LogConfig = LogConfig + _LOgger = LogConfig.GetLogger + End Sub + + Public Sub AddControl(Name As String, Value As String, LayoutControlGroup As LayoutControlGroup) + Dim oTextEdit As New SimpleLabelItem() With { + .Name = Name, + .Text = Name & " - " & Value + } + + LayoutControlGroup.AddItem(oTextEdit) + End Sub + Public Sub AddControl(Name As String, Value As String) + AddControl(Name, Value, _LayoutControlGroup) + End Sub + + Public Sub AddSeparator(LayoutControlGroup As LayoutControlGroup) + Dim oSeparator = New SimpleSeparator() + + LayoutControlGroup.AddItem(oSeparator) + End Sub + Public Sub AddSeparator() + AddSeparator(_LayoutControlGroup) + End Sub + + Public Sub LoadControls(Datatable As DataTable, LayoutControlGroup As LayoutControlGroup) + For Each oRow As DataRow In Datatable.Rows + Dim oCaption As String = oRow.Item("COLNAME") + Dim oControlType As String = oRow.Item("CTRLTYPE") + Dim oControlId As Int64 = oRow.Item("RECORD_ID") + Dim oEditor As BaseEdit = CreateLayoutControl(oControlType, oControlId, oControlId) + + If oEditor Is Nothing Then + Continue For + End If + + oEditor.Tag = New Metadata() With { + .Id = oControlId, + .Type = oControlType, + .Caption = oCaption + } + + LayoutControls.Add(oEditor) + LayoutControlGroup.AddItem(oCaption, oEditor) + Next + + LayoutControlGroup.AddItem(New EmptySpaceItem()) + End Sub + Public Sub LoadControls(Datatable As DataTable) + LoadControls(Datatable, _LayoutControlGroup) + End Sub + + Public Function CreateLayoutControl(Type As String, Name As String, Id As Int64) + Dim oEditor As BaseEdit = Nothing + + LOGGER.Debug("Create new Control of type {0} with name {1}", Type, Name) + + Select Case Type + Case CONTROL_TEXTEDIT + Dim oTextEdit As New TextEdit() With {.Name = Name} + oEditor = oTextEdit + Case CONTROL_MEMOEDIT + Dim oMemoEdit As New MemoEdit() With {.Name = Name} + oEditor = oMemoEdit + Case CONTROL_DATEEDIT + Dim oDateEdit As New DateEdit() With {.Name = Name} + oEditor = oDateEdit + Case CONTROL_CHECKEDIT + Dim oCheckEdit As New CheckEdit() With {.Name = Name} + oEditor = oCheckEdit + Case Else + oEditor = Nothing + End Select + + Return oEditor + End Function + End Class + + + + diff --git a/app/DD_PM_WINDREAM/frmDesignerLayout/Metadata.vb b/app/DD_PM_WINDREAM/frmDesignerLayout/Metadata.vb new file mode 100644 index 0000000..9bde075 --- /dev/null +++ b/app/DD_PM_WINDREAM/frmDesignerLayout/Metadata.vb @@ -0,0 +1,5 @@ +Public Class Metadata + Public Id As Int64 + Public Type As String + Public Caption As String +End Class \ No newline at end of file