diff --git a/GUIs.Monitor/Forms/frmMonitor.Designer.vb b/GUIs.Monitor/Forms/frmMonitor.Designer.vb index 06efa04..ada7aab 100644 --- a/GUIs.Monitor/Forms/frmMonitor.Designer.vb +++ b/GUIs.Monitor/Forms/frmMonitor.Designer.vb @@ -24,6 +24,7 @@ Partial Class frmMonitor Private Sub InitializeComponent() Me.components = New System.ComponentModel.Container() Dim PushTransition1 As DevExpress.Utils.Animation.PushTransition = New DevExpress.Utils.Animation.PushTransition() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmMonitor)) Me.RibbonControl1 = New DevExpress.XtraBars.Ribbon.RibbonControl() Me.ApplicationMenu1 = New DevExpress.XtraBars.Ribbon.ApplicationMenu(Me.components) Me.BarButtonItem1 = New DevExpress.XtraBars.BarButtonItem() @@ -85,6 +86,8 @@ Partial Class frmMonitor Me.AdornerUIManager2 = New DevExpress.Utils.VisualEffects.AdornerUIManager(Me.components) Me.WorkspaceManager1 = New DevExpress.Utils.WorkspaceManager(Me.components) Me.SplashScreenManager1 = New DevExpress.XtraSplashScreen.SplashScreenManager(Me, GetType(Global.DigitalData.GUIs.Monitor.frmLoading), True, True) + Me.btnExportChart2PDF = New DevExpress.XtraBars.BarButtonItem() + Me.btnExportChart2PNG = New DevExpress.XtraBars.BarButtonItem() CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.ApplicationMenu1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.XtraTabControlFileHTML, System.ComponentModel.ISupportInitialize).BeginInit() @@ -144,9 +147,9 @@ Partial Class frmMonitor ' Me.RibbonControl1.ApplicationButtonDropDownControl = Me.ApplicationMenu1 Me.RibbonControl1.ExpandCollapseItem.Id = 0 - Me.RibbonControl1.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl1.ExpandCollapseItem, Me.RibbonControl1.SearchEditItem, Me.buttonSearch, Me.BarButtonItem1, Me.btnExportDetails, Me.btnExportMain, Me.lbResultCount, Me.btnReloadSearches, Me.btnResetLayout, Me.BarButtonItem2, Me.lbVersion, Me.BarButtonItem3, Me.lbSearchTime}) + Me.RibbonControl1.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl1.ExpandCollapseItem, Me.RibbonControl1.SearchEditItem, Me.buttonSearch, Me.BarButtonItem1, Me.btnExportDetails, Me.btnExportMain, Me.lbResultCount, Me.btnReloadSearches, Me.btnResetLayout, Me.BarButtonItem2, Me.lbVersion, Me.BarButtonItem3, Me.lbSearchTime, Me.btnExportChart2PDF, Me.btnExportChart2PNG}) Me.RibbonControl1.Location = New System.Drawing.Point(0, 0) - Me.RibbonControl1.MaxItemId = 14 + Me.RibbonControl1.MaxItemId = 16 Me.RibbonControl1.Name = "RibbonControl1" Me.RibbonControl1.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1}) Me.RibbonControl1.ShowToolbarCustomizeItem = False @@ -270,6 +273,8 @@ Partial Class frmMonitor Me.RibbonPageGroup2.Alignment = DevExpress.XtraBars.Ribbon.RibbonPageGroupAlignment.Far Me.RibbonPageGroup2.ItemLinks.Add(Me.btnExportMain) Me.RibbonPageGroup2.ItemLinks.Add(Me.btnExportDetails) + Me.RibbonPageGroup2.ItemLinks.Add(Me.btnExportChart2PDF) + Me.RibbonPageGroup2.ItemLinks.Add(Me.btnExportChart2PNG) Me.RibbonPageGroup2.Name = "RibbonPageGroup2" Me.RibbonPageGroup2.Text = "Export" ' @@ -686,6 +691,22 @@ Partial Class frmMonitor ' Me.SplashScreenManager1.ClosingDelay = 500 ' + 'btnExportChart2PDF + ' + Me.btnExportChart2PDF.Caption = "Export Charts als PDF" + Me.btnExportChart2PDF.Enabled = False + Me.btnExportChart2PDF.Id = 14 + Me.btnExportChart2PDF.ImageOptions.SvgImage = CType(resources.GetObject("BarButtonItem4.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage) + Me.btnExportChart2PDF.Name = "btnExportChart2PDF" + ' + 'btnExportChart2PNG + ' + Me.btnExportChart2PNG.Caption = "Export Charts als Bild" + Me.btnExportChart2PNG.Enabled = False + Me.btnExportChart2PNG.Id = 15 + Me.btnExportChart2PNG.ImageOptions.SvgImage = CType(resources.GetObject("BarButtonItem5.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage) + Me.btnExportChart2PNG.Name = "btnExportChart2PNG" + ' 'frmMonitor ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) @@ -820,4 +841,6 @@ Partial Class frmMonitor Friend WithEvents lbVersion As DevExpress.XtraBars.BarStaticItem Friend WithEvents BarButtonItem3 As DevExpress.XtraBars.BarButtonItem Friend WithEvents lbSearchTime As DevExpress.XtraBars.BarStaticItem + Friend WithEvents btnExportChart2PDF As DevExpress.XtraBars.BarButtonItem + Friend WithEvents btnExportChart2PNG As DevExpress.XtraBars.BarButtonItem End Class diff --git a/GUIs.Monitor/Forms/frmMonitor.resx b/GUIs.Monitor/Forms/frmMonitor.resx index 72b2740..28b3162 100644 --- a/GUIs.Monitor/Forms/frmMonitor.resx +++ b/GUIs.Monitor/Forms/frmMonitor.resx @@ -120,6 +120,64 @@ 362, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40 + LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl + dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAABoHAAAC77u/ + PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi + IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv + MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh + Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg + MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJs + YWNre2ZpbGw6IzcyNzI3Mjt9Cgkuc3Qwe29wYWNpdHk6MC4yO30KPC9zdHlsZT4NCiAgPHBhdGggZD0i + TTgsNGgxOHY2aDJWM2MwLTAuNS0wLjUtMS0xLTFIN0M2LjUsMiw2LDIuNSw2LDN2N2gyVjR6IiBjbGFz + cz0iQmxhY2siIC8+DQogIDxwYXRoIGQ9Ik0yNiwyNkg4VjE2SDZ2MTFjMCwwLjUsMC41LDEsMSwxaDIw + YzAuNSwwLDEtMC41LDEtMVYxNmgtMlYyNnoiIGNsYXNzPSJCbGFjayIgLz4NCiAgPHBhdGggZD0iTTEw + LjMsMTEuNkg5LjZWMTRoMC42YzAuOSwwLDEuMy0wLjQsMS4zLTEuMkMxMS41LDEyLDExLjEsMTEuNiwx + MC4zLDExLjZ6IiBjbGFzcz0iUmVkIiAvPg0KICA8cGF0aCBkPSJNMTYuNywxMS43aC0wLjh2NC45aDAu + OGMwLjcsMCwxLjMtMC4yLDEuNi0wLjdzMC42LTEuMSwwLjYtMS44YzAtMC43LTAuMi0xLjMtMC42LTEu + NyAgQzE4LDExLjksMTcuNCwxMS43LDE2LjcsMTEuN3oiIGNsYXNzPSJSZWQiIC8+DQogIDxwYXRoIGQ9 + Ik0yOSw4SDVDNC40LDgsNCw4LjQsNCw5djEwYzAsMC42LDAuNCwxLDEsMWgyNGMwLjYsMCwxLTAuNCwx + LTFWOUMzMCw4LjQsMjkuNiw4LDI5LDh6IE0xMi41LDE0LjYgIGMtMC41LDAuNS0xLjIsMC43LTIuMSww + LjdIOS42VjE4SDh2LTcuN2gyLjVjMS44LDAsMi43LDAuOCwyLjcsMi41QzEzLjIsMTMuNSwxMywxNC4y + LDEyLjUsMTQuNnogTTE5LjYsMTYuOSAgQzE4LjksMTcuNiwxOCwxOCwxNi44LDE4aC0yLjV2LTcuN2gy + LjVjMi41LDAsMy44LDEuMywzLjgsMy44QzIwLjcsMTUuMywyMC4zLDE2LjIsMTkuNiwxNi45eiBNMjYs + MTEuN2gtMi41djEuOWgyLjNWMTVoLTIuM3YzICBoLTEuNnYtNy43SDI2VjExLjd6IiBjbGFzcz0iUmVk + IiAvPg0KICA8ZyBjbGFzcz0ic3QwIj4NCiAgICA8cGF0aCBkPSJNMTAuMywxMS42SDkuNlYxNGgwLjZj + MC45LDAsMS4zLTAuNCwxLjMtMS4yQzExLjUsMTIsMTEuMSwxMS42LDEwLjMsMTEuNnoiIGNsYXNzPSJC + bGFjayIgLz4NCiAgICA8cGF0aCBkPSJNMTYuNywxMS43aC0wLjh2NC45aDAuOGMwLjcsMCwxLjMtMC4y + LDEuNi0wLjdzMC42LTEuMSwwLjYtMS44YzAtMC43LTAuMi0xLjMtMC42LTEuNyAgIEMxOCwxMS45LDE3 + LjQsMTEuNywxNi43LDExLjd6IiBjbGFzcz0iQmxhY2siIC8+DQogICAgPHBhdGggZD0iTTI5LDhINUM0 + LjQsOCw0LDguNCw0LDl2MTBjMCwwLjYsMC40LDEsMSwxaDI0YzAuNiwwLDEtMC40LDEtMVY5QzMwLDgu + NCwyOS42LDgsMjksOHogTTEyLjUsMTQuNiAgIGMtMC41LDAuNS0xLjIsMC43LTIuMSwwLjdIOS42VjE4 + SDh2LTcuN2gyLjVjMS44LDAsMi43LDAuOCwyLjcsMi41QzEzLjIsMTMuNSwxMywxNC4yLDEyLjUsMTQu + NnogTTE5LjYsMTYuOSAgIEMxOC45LDE3LjYsMTgsMTgsMTYuOCwxOGgtMi41di03LjdoMi41YzIuNSww + LDMuOCwxLjMsMy44LDMuOEMyMC43LDE1LjMsMjAuMywxNi4yLDE5LjYsMTYuOXogTTI2LDExLjdoLTIu + NXYxLjloMi4zVjE1aC0yLjN2MyAgIGgtMS42di03LjdIMjZWMTEuN3oiIGNsYXNzPSJCbGFjayIgLz4N + CiAgPC9nPg0KPC9zdmc+Cw== + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40 + LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl + dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAANECAAAC77u/ + PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi + IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv + MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh + Y2U9InByZXNlcnZlIiBpZD0iUGljdHVyZSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg + MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9Cgku + R3JlZW57ZmlsbDojMDM5QzIzO30KCS5ZZWxsb3d7ZmlsbDojRkZCMTE1O30KCS5zdDB7b3BhY2l0eTow + LjU7fQo8L3N0eWxlPg0KICA8cGF0aCBkPSJNMjksNEgzQzIuNSw0LDIsNC41LDIsNXYyMmMwLDAuNSww + LjUsMSwxLDFoMjZjMC41LDAsMS0wLjUsMS0xVjVDMzAsNC41LDI5LjUsNCwyOSw0eiBNMjgsMjZINFY2 + aDI0VjI2eiIgY2xhc3M9IkJsYWNrIiAvPg0KICA8Y2lyY2xlIGN4PSIyMSIgY3k9IjExIiByPSIzIiBj + bGFzcz0iWWVsbG93IiAvPg0KICA8cG9seWdvbiBwb2ludHM9IjIwLDI0IDEwLDE0IDYsMTggNiwyNCAi + IGNsYXNzPSJHcmVlbiIgLz4NCiAgPGcgY2xhc3M9InN0MCI+DQogICAgPHBvbHlnb24gcG9pbnRzPSIy + MiwyNCAxOCwyMCAyMCwxOCAyNiwyNCAgIiBjbGFzcz0iR3JlZW4iIC8+DQogIDwvZz4NCjwvc3ZnPgs= + + 196, 17 diff --git a/GUIs.Monitor/Forms/frmMonitor.vb b/GUIs.Monitor/Forms/frmMonitor.vb index 9d46a9d..49d7f21 100644 --- a/GUIs.Monitor/Forms/frmMonitor.vb +++ b/GUIs.Monitor/Forms/frmMonitor.vb @@ -21,7 +21,11 @@ Imports DigitalData.Modules.Language.Utils Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Patterns Imports DevExpress.XtraEditors - +Imports System.Drawing.Imaging +Imports System.IO +Imports DevExpress.XtraBars +Imports DevExpress.Utils.CommonDialogs +Imports System.Windows.Forms.VisualStyles Public Class frmMonitor Private ReadOnly InvisibleColumnMarkers As New List(Of String) From {"[HTML]", "[SQL]", "[FILENAME]"} @@ -84,6 +88,7 @@ Public Class frmMonitor Private Validator As Validator Private GridLoader As GridLoader + Private SelectedChart As ChartControl Private Sub frmStart_Load(sender As Object, e As EventArgs) Handles MyBase.Load Try @@ -125,9 +130,12 @@ Public Class frmMonitor Validator = New Validator(LogConfig, LayoutControl1, AdornerUIManager2, ControlHelper) GridLoader = New GridLoader(LogConfig, SvgImageCollection1) + AddHandler GridLoader.ChartControlClicked, AddressOf ChartControl_Click + InitGrid() InitTreeList() InitChartContainer() + InitBarItems() Dim oGrids As GridView() = New List(Of GridView) From {GridView1, GridView2, GridView3, GridView4}.ToArray GridBuilder.SetDefaults(oGrids) @@ -235,8 +243,6 @@ Public Class frmMonitor TreeListResults.DataSource = oTable - lbResultCount.Visibility = DevExpress.XtraBars.BarItemVisibility.Never - Dim oMaxLength = 0 For Each oRow As DataRow In oTable.Rows Dim oProcess = oRow.Item("COLUMN1") @@ -339,8 +345,6 @@ Public Class frmMonitor GridViewResults.PopulateColumns() GridBuilder.SetDateTimeColumns(GridViewResults) - lbResultCount.Visibility = DevExpress.XtraBars.BarItemVisibility.Always - For Each oColumn As GridColumn In GridViewResults.Columns If oColumn.ColumnType = GetType(Integer) Then oColumn.AppearanceCell.TextOptions.HAlignment = HorzAlignment.Center @@ -525,7 +529,6 @@ Public Class frmMonitor End Sub - Private Sub SetResultVisbility(pSearchMode As ReturnTypeEnum) Select Case pSearchMode Case ReturnTypeEnum.TreeView @@ -535,8 +538,13 @@ Public Class frmMonitor TreeListResults.Dock = DockStyle.Fill ChartViewResultContainer.Visible = False ChartViewResultContainer.Dock = DockStyle.None - btnExportDetails.Enabled = True - btnExportMain.Enabled = True + + lbResultCount.Visibility = DevExpress.XtraBars.BarItemVisibility.Never + + EnableButtons(btnExportMain) + EnableButtons(btnExportDetails) + DisableButtons(btnExportChart2PDF) + DisableButtons(btnExportChart2PNG) Case ReturnTypeEnum.ChartView GridControlResults.Visible = False @@ -545,8 +553,13 @@ Public Class frmMonitor TreeListResults.Dock = DockStyle.None ChartViewResultContainer.Visible = True ChartViewResultContainer.Dock = DockStyle.Fill - btnExportDetails.Enabled = False - btnExportMain.Enabled = False + + lbResultCount.Visibility = DevExpress.XtraBars.BarItemVisibility.Never + + DisableButtons(btnExportMain) + DisableButtons(btnExportDetails) + EnableButtons(btnExportChart2PDF) + EnableButtons(btnExportChart2PNG) Case ReturnTypeEnum.Table GridControlResults.Visible = True @@ -555,12 +568,40 @@ Public Class frmMonitor TreeListResults.Dock = DockStyle.None ChartViewResultContainer.Visible = False ChartViewResultContainer.Dock = DockStyle.None - btnExportDetails.Enabled = True - btnExportMain.Enabled = True + + lbResultCount.Visibility = DevExpress.XtraBars.BarItemVisibility.Always + + EnableButtons(btnExportMain) + EnableButtons(btnExportDetails) + DisableButtons(btnExportChart2PDF) + DisableButtons(btnExportChart2PNG) + End Select End Sub + Private Sub DisableButtons(pBarButtonItem As BarButtonItem) + pBarButtonItem.Enabled = False + pBarButtonItem.Visibility = BarItemVisibility.Never + End Sub + + Private Sub EnableButtons(pBarButtonItem As BarButtonItem) + pBarButtonItem.Enabled = True + pBarButtonItem.Visibility = BarItemVisibility.Always + End Sub + + Private Sub InitBarItems() + btnExportMain.Visibility = BarItemVisibility.Always + btnExportMain.Enabled = False + btnExportDetails.Visibility = BarItemVisibility.Always + btnExportDetails.Enabled = False + DisableButtons(btnExportChart2PDF) + DisableButtons(btnExportChart2PNG) + + lbResultCount.Visibility = BarItemVisibility.Never + lbSearchTime.Visibility = BarItemVisibility.Never + End Sub + ''' ''' Linklogik für Hyperlink-Spalten ''' @@ -668,6 +709,9 @@ Public Class frmMonitor DisposeGrid() InitGrid() + DisposeCharts() + InitChartContainer() + SplitContainerSQL.Collapsed = True SplitContainerFileHTML.Collapsed = True @@ -675,6 +719,7 @@ Public Class frmMonitor btnExportDetails.Enabled = False SetResultCount(0) + InitBarItems() LoadSearch() HideAllTabs() @@ -1177,10 +1222,14 @@ Public Class frmMonitor DisposeGrid() InitGrid() + DisposeCharts() + InitChartContainer() + HideAllTabs() Await LoadData() SetResultCount(0) + InitBarItems() End If End Sub @@ -1191,12 +1240,21 @@ Public Class frmMonitor GridControlResults = Nothing End Sub + Private Sub DisposeCharts() + ChartViewResultContainer.Dispose() + ChartViewResultContainer = Nothing + End Sub + Private Sub SetResultCount(pResults As Integer) lbResultCount.Caption = String.Format(lbResultCount.Tag, pResults) End Sub Private Sub SetSearchTimeValue(pValue As String) - lbSearchTime.Caption = pValue + If pValue.Equals("00:00") Then + lbSearchTime.Caption = "" + Else + lbSearchTime.Caption = pValue + End If End Sub Private Sub SetVersion() @@ -1230,8 +1288,8 @@ Public Class frmMonitor Private Sub InitChartContainer() ChartViewResultContainer = GridLoader.InitChartViewResultContainer() - SplitContainerSQL.Panel1.Controls.Add(ChartViewResultContainer) + SelectedChart = Nothing End Sub Private Sub ResizeCharContainer() @@ -1261,5 +1319,87 @@ Public Class frmMonitor End Try End Sub + Private Sub ChartControl_Click(sender As Object, e As EventArgs) + SelectedChart = CType(sender, ChartControl) + End Sub + + Private Sub btnExportChart2PDF_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnExportChart2PDF.ItemClick + Try + If Not IsNothing(SelectedChart) Then + XtraSaveFileDialog1.Filter = "PDF Files (*.pdf*)|*.pdf" + If XtraSaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then + ' TODO: Filename + ExportChart2Pdf(SelectedChart, XtraSaveFileDialog1.FileName) + End If + Else + FormHelper.ShowInfoMessage("Bitte einen Chart auswählen", "Chart Export per PDF") + End If + Catch ex As Exception + FormHelper.ShowErrorMessage(ex, "Chart Export nach PDF") + End Try + End Sub + + Private Sub btnExportChart2PNG_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnExportChart2PNG.ItemClick + Try + If Not IsNothing(SelectedChart) Then + XtraSaveFileDialog1.Filter = "PNG Files(* .png *)|*.png" + If XtraSaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then + ' TODO: Filename + ExportChartToImage(SelectedChart, XtraSaveFileDialog1.FileName) + End If + Else + FormHelper.ShowInfoMessage("Bitte einen Chart auswählen", "Chart Export per PNG") + End If + Catch ex As Exception + FormHelper.ShowErrorMessage(ex, "Chart Export nach PNG") + End Try + End Sub + + Sub ExportChart2Pdf(pMyChart As ChartControl, pFilePath As String) + Try + pMyChart.OptionsPrint.ImageFormat = DevExpress.XtraCharts.Printing.PrintImageFormat.Metafile + pMyChart.ExportToPdf(pFilePath, New DevExpress.XtraPrinting.PdfExportOptions With { + .ConvertImagesToJpeg = False + }) + ' Exports to a stream as PDF. + Dim pdfStream As FileStream = New FileStream(pFilePath, FileMode.Create) + pMyChart.ExportToPdf(pdfStream) + ' ... + pdfStream.Close() + Catch ex As Exception + Logger.Error(ex) + End Try + End Sub + + Sub ExportChartToImage(pMyChart As ChartControl, pFilePath As String) + Try + SaveChartImageToFile(pMyChart, ImageFormat.Png, pFilePath) + Dim image As Image = GetChartImage(pMyChart, ImageFormat.Png) + image.Save(pFilePath) + Catch ex As Exception + Logger.Error(ex) + End Try + + End Sub + + Private Sub SaveChartImageToFile(ByVal chart As ChartControl, ByVal format As ImageFormat, ByVal fileName As String) + ' Create an image in the specified format from the chart + ' and save it to the specified path. + chart.ExportToImage(fileName, format) + End Sub + + Private Function GetChartImage(ByVal chart As ChartControl, ByVal format As ImageFormat) As Image + ' Create an image. + Dim image As Image = Nothing + + ' Create an image of the chart. + Using s As New MemoryStream() + chart.ExportToImage(s, format) + image = System.Drawing.Image.FromStream(s) + End Using + + ' Return the image. + Return image + End Function End Class diff --git a/GUIs.Monitor/Helper/GridLoader.vb b/GUIs.Monitor/Helper/GridLoader.vb index 62395ec..82ea7dc 100644 --- a/GUIs.Monitor/Helper/GridLoader.vb +++ b/GUIs.Monitor/Helper/GridLoader.vb @@ -23,6 +23,8 @@ Public Class GridLoader Public ReadOnly Property SvgImageCollection As SvgImageCollection Public ReadOnly Property GridBuilder As GridBuilder + Public Event ChartControlClicked As EventHandler + Private ReadOnly StateIcons As New Dictionary(Of String, NodeImage) From { {STATE_SUCCESS, NodeImage.Success}, {STATE_FAILURE, NodeImage.Failure} @@ -131,6 +133,11 @@ Public Class GridLoader .Dock = DockStyle.Fill } + AddHandler oChartControlTopLeft.Click, AddressOf ChartControl_Click + AddHandler oChartControlTopRight.Click, AddressOf ChartControl_Click + AddHandler oChartControlBottomLeft.Click, AddressOf ChartControl_Click + AddHandler oChartControlBottomRight.Click, AddressOf ChartControl_Click + oSplitContainerTop.Panel1.AddControl(oChartControlTopLeft) oSplitContainerTop.Panel2.AddControl(oChartControlTopRight) oSplitContainerBottom.Panel1.AddControl(oChartControlBottomLeft) @@ -139,6 +146,10 @@ Public Class GridLoader Return oChartViewResultContainer End Function + Private Sub ChartControl_Click(sender As Object, e As EventArgs) + RaiseEvent ChartControlClicked(sender, Nothing) + End Sub + Public Sub InitTreeListColumns(pTreeList As TreeList, pMaxLength As Integer) Dim oColumn1 = pTreeList.Columns.Item("COLUMN1") Dim oColumn2 = pTreeList.Columns.Item("COLUMN2")