Files
RecordOrganizer/app/DD-Record-Organiser/frmDiagrams.vb
2016-10-06 16:00:04 +02:00

219 lines
8.2 KiB
VB.net

Imports DevExpress.XtraCharts
Public Class frmDiagrams
Private Function Get_Splitter_Layout_Filename() As String
Dim Filename As String = String.Format("{0}-Diagram-SplitterLayout.xml", CURRENT_FORM_ID)
Return System.IO.Path.Combine(Application.UserAppDataPath(), Filename)
End Function
Private Function Get_Settings(settings As List(Of ClassSetting)) As List(Of ClassSetting)
settings.Add(New ClassSetting("SplitterMainDistance", SplitContainerMain.SplitterDistance))
settings.Add(New ClassSetting("SplitterTopDistance", SplitContainerTop.SplitterDistance))
settings.Add(New ClassSetting("SplitterBottomDistance", SplitContainerBottom.SplitterDistance))
Return settings
End Function
Private Sub Load_Settings()
Try
' Load Splitter Settings
Dim XMLPath As String = Get_Splitter_Layout_Filename()
Dim layout As New ClassLayout(XMLPath)
Dim settings As List(Of ClassSetting)
settings = layout.Load()
' No Settings found, save current values
If settings.Count = 0 Then
'Adjust Width and Height of containers
Dim containerW = Me.Width / 2
Dim containerH = Me.Height / 2
SplitContainerTop.SplitterDistance = containerW
SplitContainerBottom.SplitterDistance = containerW
SplitContainerMain.SplitterDistance = containerH
settings = Get_Settings(settings)
layout.Save(settings)
End If
'Apply Settings
For Each setting As ClassSetting In settings
If setting._name = "SplitterMainDistance" Then
SplitContainerMain.SplitterDistance = setting._value
End If
If setting._name = "SplitterTopDistance" Then
SplitContainerTop.SplitterDistance = setting._value
End If
If setting._name = "SplitterBottomDistance" Then
SplitContainerBottom.SplitterDistance = setting._value
End If
Next
Catch ex As Exception
MsgBox("Error while loading Settings for frmDiagrams: " & vbNewLine & ex.Message)
End Try
End Sub
Private Sub Configure_Split_Containers(VisibleContainers As Integer)
Select Case VisibleContainers
Case 0
MsgBox("No Diagrams found")
Case 1
' Show only ChartTopLeft
SplitContainerTop.Panel2Collapsed = True
' Collapse SplitContainerBottom
SplitContainerMain.Panel2Collapsed = True
Case 2
' Collapse SplitContainerBottom
SplitContainerMain.Panel2Collapsed = True
Case 3
' Collapse ChartBottomRight
SplitContainerBottom.Panel2Collapsed = True
' Show SplitContainerBottom
SplitContainerMain.Panel2Collapsed = False
Case 4
' Show SplitContainerBottom
SplitContainerMain.Panel2Collapsed = False
End Select
End Sub
Private Sub frmDiagrams_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
Dim XMLPath As String = Get_Splitter_Layout_Filename()
Dim layout As New ClassLayout(XMLPath)
Dim settings As New List(Of ClassSetting)
settings = Get_Settings(settings)
layout.Save(settings)
End Sub
Private Function Create_Series(title As String, type As String) As Series
Dim series As Series
Select Case type
Case "BAR"
series = New Series(title, ViewType.Bar)
Case "LINE"
series = New Series(title, ViewType.Line)
Case "AREA"
series = New Series(title, ViewType.Area)
Case "PIE"
series = New Series(title, ViewType.Pie)
series.Label.TextPattern = "{A}: {VP:p0}"
Dim view As PieSeriesView = DirectCast(series.View, PieSeriesView)
view.Titles.Add(New SeriesTitle())
view.Titles(0).Text = title
Case Else
series = New Series(title, ViewType.Bar)
End Select
Return series
End Function
Private Function Select_Chart(index As Integer)
Select Case index
Case 0
Return ChartTopLeft
Case 1
Return ChartTopRight
Case 2
Return ChartBottomLeft
Case Else
Return ChartBottomRight
End Select
End Function
Private Sub frmDiagrams_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim CHART_ENTITY_SQL, CHART_GROUPS_SQL As String
Dim CHART_ENTITY_DT, CHART_GROUPS_DT As DataTable
CHART_ENTITY_SQL = String.Format("SELECT * FROM TBPMO_CHART_ENTITY WHERE ENTITY_ID = {0}", CURRENT_FORM_ID)
CHART_GROUPS_SQL = String.Format("SELECT DISTINCT GROUP_ID FROM TBPMO_CHART_ENTITY WHERE ENTITY_ID = {0} ORDER BY GROUP_ID", CURRENT_FORM_ID)
CHART_ENTITY_DT = ClassDatabase.Return_Datatable(CHART_ENTITY_SQL)
CHART_GROUPS_DT = ClassDatabase.Return_Datatable(CHART_GROUPS_SQL)
Dim Groups As DataRowCollection = CHART_GROUPS_DT.Rows
Dim GroupCount As Integer = Groups.Count
Load_Settings()
Configure_Split_Containers(GroupCount)
If GroupCount > 1 Then
For Each gRow As DataRow In Groups
Dim groupIndex As Integer = Groups.IndexOf(gRow)
Dim groupName As String = gRow.Item("GROUP_ID")
Dim groupCharts = CHART_ENTITY_DT.Select(String.Format("GROUP_ID = '{0}'", groupName))
Dim chart As ChartControl
For Each cRow As DataRow In groupCharts
Dim type = cRow.Item("TYPE_CHART")
Dim title = cRow.Item("TITLE")
Dim guid = cRow.Item("GUID")
Dim value = cRow.Item("VALUE")
Dim argument = cRow.Item("ARGUMENT")
Dim sql = cRow.Item("SQL_COMMAND")
Dim DATA_DT As DataTable = ClassDatabase.Return_Datatable(sql)
Dim series As Series = Create_Series(title, type)
' Select Current Chart
chart = Select_Chart(groupIndex)
' Set DataSource
chart.DataSource = DATA_DT
' Set shown Columns for Chart
series.ArgumentDataMember = argument
series.ValueDataMembers.AddRange(New String() {value})
'set some options
chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.True
' Show Data
chart.Series.Add(series)
Next ' End Charts
Next 'End Groups
Else
' Create Charts
For Each row As DataRow In CHART_ENTITY_DT.Rows
Dim chart As ChartControl
Dim chartIndex As Integer = CHART_ENTITY_DT.Rows.IndexOf(row)
Dim type = row.Item("TYPE_CHART")
Dim title = row.Item("TITLE")
Dim guid = row.Item("GUID")
Dim value = row.Item("VALUE")
Dim argument = row.Item("ARGUMENT")
Dim sql = row.Item("SQL_COMMAND")
Dim DATA_DT As DataTable = ClassDatabase.Return_Datatable(sql)
' Create Series based on type
Dim series As Series = Create_Series(title, type)
' Select Current Chart
chart = Select_Chart(chartIndex)
' Set DataSource
chart.DataSource = DATA_DT
' Set shown Columns for Chart
series.ArgumentDataMember = argument
series.ValueDataMembers.AddRange(New String() {value})
'set some options
chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.True
' Show Data
chart.Series.Add(series)
Next
End If
End Sub
End Class