199 lines
8.2 KiB
VB.net
199 lines
8.2 KiB
VB.net
Imports System.IO
|
|
Imports System.Text.Encoding
|
|
Imports DD_ProcessManager.Controls
|
|
Imports DevExpress.XtraBars
|
|
Imports DevExpress.XtraEditors
|
|
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
|
|
Private _LayoutSerializer As LayoutControlSerializer = 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 BaseEdit = _ControlLoader.CreateLayoutControl(oLayoutControl.Tag, oControlName, 0)
|
|
|
|
If oLayoutControl IsNot Nothing Then
|
|
HideDragHelper()
|
|
oLayoutControl.Control = oControl
|
|
oLayoutControl.Text = oControlName
|
|
oLayoutControl.Name = "Container-" & oControlName
|
|
|
|
|
|
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)
|
|
_LayoutSerializer = New LayoutControlSerializer(LOGCONFIG)
|
|
|
|
Dim oSQL = "Select * from TBIDB_LAYOUT_CONFIG"
|
|
FormsDatatable = DatabaseFallback.GetDatatableIDB(oSQL)
|
|
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 Item_Click(sender As Object, e As ItemClickEventArgs)
|
|
Try
|
|
SelectedLayoutId = e.Item.Tag
|
|
Dim oRow As DataRow = FormsDatatable.Select($"GUID = {SelectedLayoutId}").First()
|
|
'Dim oXml = oRow.Item("XML_CONTENT")
|
|
|
|
Dim oLayout As Byte() = System.Convert.FromBase64String(oRow.Item("XML_LAYOUT"))
|
|
Dim oControls As Byte() = System.Convert.FromBase64String(oRow.Item("XML_CONTENT"))
|
|
|
|
Using oLayoutStream As New MemoryStream(oLayout, False)
|
|
Using oControlStream As New MemoryStream(oControls, False)
|
|
_LayoutSerializer.RestoreLayoutExFromStream(LayoutControlMain, oLayoutStream, oControlStream)
|
|
End Using
|
|
End Using
|
|
Catch ex As Exception
|
|
MsgBox("Unexpected Error in FormSave:" & ex.Message, MsgBoxStyle.Critical)
|
|
End Try
|
|
End Sub
|
|
|
|
Private Sub BarButtonItem2_ItemClick(sender As Object, e As ItemClickEventArgs) Handles BarButtonItem2.ItemClick
|
|
Using oLayoutStream As New MemoryStream()
|
|
Using oControlStream As New MemoryStream()
|
|
_LayoutSerializer.SaveLayoutExToStream(LayoutControlMain, oLayoutStream, oControlStream)
|
|
|
|
Dim oLayout = System.Convert.ToBase64String(oLayoutStream.ToArray())
|
|
Dim oControls = System.Convert.ToBase64String(oControlStream.ToArray())
|
|
|
|
Dim oSql As String = $"UPDATE TBIDB_LAYOUT_CONFIG SET XML_CONTENT = '{oControls}', XML_LAYOUT = '{oLayout}', CHANGED_WHO = '{Environment.UserName}' WHERE GUID = {SelectedLayoutId}"
|
|
|
|
DatabaseFallback.ExecuteNonQueryIDB(oSql)
|
|
End Using
|
|
End Using
|
|
End Sub
|
|
|
|
Private Sub BarButtonItem1_ItemClick(sender As Object, e As ItemClickEventArgs) Handles BarButtonItem1.ItemClick
|
|
LayoutControlMain.ShowCustomizationForm()
|
|
End Sub
|
|
|
|
Private Sub LayoutControlMain_ItemSelectionChanged(sender As Object, e As EventArgs) Handles LayoutControlMain.ItemSelectionChanged
|
|
' only layout control items have properties
|
|
If TypeOf sender IsNot LayoutControlItem Then
|
|
Exit Sub
|
|
End If
|
|
|
|
Dim oLayoutItem As LayoutControlItem = DirectCast(sender, LayoutControlItem)
|
|
Dim oSelectedControl As BaseEdit = oLayoutItem.Control
|
|
Dim oMetadata As New Metadata
|
|
|
|
' Don't load properties for layout items like splitters, separators, etc.
|
|
If oLayoutItem.Control Is Nothing Then
|
|
Exit Sub
|
|
End If
|
|
|
|
Select Case oSelectedControl.GetType
|
|
Case GetType(MemoEdit)
|
|
PropertyGridMain.SelectedObject = New Properties.MemoeditProperties() With {
|
|
.Id = 0,
|
|
.Name = oSelectedControl.Name
|
|
}
|
|
Case GetType(TextEdit)
|
|
PropertyGridMain.SelectedObject = New Properties.TextboxProperties() With {
|
|
.Id = 0,
|
|
.Name = oSelectedControl.Name
|
|
}
|
|
Case GetType(DateEdit)
|
|
PropertyGridMain.SelectedObject = New Properties.DatepickerProperties() With {
|
|
.Id = 0,
|
|
.Name = oSelectedControl.Name
|
|
}
|
|
Case GetType(CheckEdit)
|
|
PropertyGridMain.SelectedObject = New Properties.CheckboxProperties() With {
|
|
.Id = 0,
|
|
.Name = oSelectedControl.Name
|
|
}
|
|
End Select
|
|
End Sub
|
|
End Class |