Type=Class Version=4.7 ModulesStructureVersion=1 B4J=true @EndOfDesignText@ Sub Class_Globals Dim ABM As ABMaterial 'ignore Dim ABMComp As ABMCustomComponent Private mTitle As String Private mWidth As String = "100%" Private mHeight As String = "500px" Private Series As List Private SeriesColors As List Private SeriesOptions As List Private mChartType As String Private DataRows As List Public barGroupMargin As Int = 4 Public TopMargin As Int = 30 Public BottomMargin As Int = 10 Public RightMargin As Int = 10 Public LeftMargin As Int = 30 Public SingleSeries As Boolean = False Public InitString As String Public SortTicks As Boolean = False Public IsStacked As Boolean = False Public Animate As Boolean = False Public AnimateReplot As Boolean = False Private hasLowerLimit As Boolean Private hasUpperLimit As Boolean Private hasDeadLine As Boolean Type lineCapObject(sround As String, sbutt As String, square As String) Type verticalLineObject(name As String, x As Object,lineWidth As Int,r As Int,g As Int, b As Int, shadow As Boolean, lineCap As String, yOffset As Int) Type horizontalLineObject(y As Object,lineWidth As Int,r As Int,g As Int, b As Int, shadow As Boolean, lineCap As String) Type dashedHorizontalLineObject(y As Object,lineWidth As Int,r As Int,g As Int, b As Int, shadow As Boolean, lineCap As String, dashPattern As String) Type canvasOverlayObject(show As Boolean, dashedHorizontalLine As dashedHorizontalLineObject, HorizontalLine As horizontalLineObject, VerticalLine As verticalLineObject) Type pointLabelsObject(show As Boolean, Location As String) Type highLighterObject(show As Boolean, sizeAdjust As Double, showMarker As Boolean, tooltipAxes As String, yvalues As Int, formatString As String) Type cursorObject(show As Boolean,tooltipLocation As String,zoom As Boolean, showToolTip As Boolean) Type linePatternObject(dashed As String, dotted As String) Type markerStyleObject(diamond As String,circle As String, x As String) Type markerOptionsObject(style As String, size As Int, show As Boolean) Type tickOptionsObject(formatString As String, angle As Int, fontSize As String) Type animationObject(show As Boolean, speed As Long) Type trendlineObject(show As Boolean, color As String, typeof As String) Type legendObject(Location As String, show As Boolean, placement As String) Type rendererOptionsObject(smooth As Boolean,varyBarColor As Boolean, animation As animationObject, dataLabels As String, ShowDataLabels As Boolean, sectionMargin As Int, fill As Boolean, lineWidth As Int, bubbleGradients As Boolean, bubbleAlpha As Double, sliceMargin As Int, startAngle As Int, innerDiameter As Int, ringMargin As Int, shadow As Boolean, barMargin As Int,fillToZero As Boolean,barDirection As String) Type ChartTypesObject(bar As String, line As String, pie As String, funnel As String, scatter As String, bubble As String,block As String, donut As String, barh As String) Type AxisObject(tickRenderer As String, sMin As String, sMax As String, renderer As String, label As String, pad As String, numberTicks As Int, ticks As List, tickOptions As tickOptionsObject, tickInterval As String) Type seriesDefaultsObject(pointLabels As pointLabelsObject, shadow As Boolean, showLine As Boolean, showMarker As Boolean, renderer As String, markerOptions As markerOptionsObject, rendererOptions As rendererOptionsObject) Type SeriesObject(trendline As trendlineObject,seriesName As String, seriesColor As String, linePattern As String, lineWidth As Int, markerOptions As markerOptionsObject, showLine As Boolean) Type axesDefaultsObject(sMin As String,sMax As String, labelRenderer As String) Type RendererObject(LogAxisRenderer As String, CanvasAxisLabelRenderer As String, BarRenderer As String,CategoryAxisRenderer As String, DateAxisRenderer As String, FunnelRenderer As String, BubbleRenderer As String, BlockRenderer As String, PieRenderer As String, DonutRenderer As String, CanvasAxisTickRenderer As String) Type gridObject(background As String, drawGridlines As Boolean,gridLineColor As String, gridLineWidth As Int, drawBorder As Boolean, shadow As Boolean) Public grid As gridObject Public axesDefaults As axesDefaultsObject Public seriesDefaults As seriesDefaultsObject Public renderer As RendererObject Public chartType As ChartTypesObject Public linePattern As linePatternObject Public markerStyle As markerStyleObject Public highLight As highLighterObject Public cursor As cursorObject Public legend As legendObject Public NeedsShadow As Boolean = True Public NeedsLegend As Boolean = True Public NeedsAxesDefaults As Boolean = True Public NeedsAxes As Boolean = True Public NeedsHighlighter As Boolean = True Public NeedsCursor As Boolean = True Public canvasOverlay As canvasOverlayObject Public yAxis As AxisObject Public xAxis As AxisObject Type LocationObject(n As String, s As String, e As String, w As String, ne As String, nw As String, se As String, sw As String) Public Location As LocationObject Public lineCap As lineCapObject End Sub 'Initializes the object. You can add parameters to this method if needed. Public Sub Initialize(InternalPage As ABMPage, ID As String) ABMComp.Initialize("ABMComp", Me, InternalPage, ID) 'ABMComp.Visibility = ABM.VISIBILITY_HIDE_ALL ' hide the chart while loading ' the automatic events will be raised on the page e.g. if the id = "mycomp" then the event will be mycomp_Click(params as Map) ' future: we'll see if some other mechanisme is needed for non automatic events Clear SetChartType("line") End Sub 'clear the contents of the chart Sub Clear grid.Initialize grid.background = "" grid.drawGridlines = True grid.gridLineColor = "" grid.gridLineWidth = -1 grid.drawBorder = True grid.shadow = True hasLowerLimit = False hasUpperLimit = False hasDeadLine = False lineCap.Initialize lineCap.sbutt = "butt" lineCap.square = "square" lineCap.sround = "round" canvasOverlay.Initialize canvasOverlay.show = False canvasOverlay.HorizontalLine.Initialize canvasOverlay.HorizontalLine.y = -1 canvasOverlay.HorizontalLine.b = 0 canvasOverlay.HorizontalLine.r = 0 canvasOverlay.HorizontalLine.g = 0 canvasOverlay.HorizontalLine.lineCap = "" canvasOverlay.HorizontalLine.shadow = False canvasOverlay.dashedHorizontalLine.Initialize canvasOverlay.dashedHorizontalLine.y = -1 canvasOverlay.dashedHorizontalLine.b = 0 canvasOverlay.dashedHorizontalLine.r = 0 canvasOverlay.dashedHorizontalLine.g = 0 canvasOverlay.dashedHorizontalLine.lineCap = "" canvasOverlay.dashedHorizontalLine.shadow = False canvasOverlay.dashedHorizontalLine.dashPattern = "" canvasOverlay.verticalLine.Initialize canvasOverlay.verticalLine.name = "" canvasOverlay.VerticalLine.x = 0 canvasOverlay.verticalLine.yoffset = 0 canvasOverlay.verticalLine.b = 0 canvasOverlay.verticalLine.r = 0 canvasOverlay.verticalLine.g = 0 canvasOverlay.verticalLine.lineCap = "" canvasOverlay.verticalLine.shadow = False Location.Initialize Location.n = "n" Location.s = "s" Location.e = "e" Location.w = "w" Location.ne = "ne" Location.nw = "nw" Location.se = "se" Location.sw = "sw" IsStacked = False SortTicks = False NeedsCursor = True NeedsHighlighter = True NeedsAxes = True NeedsAxesDefaults = True NeedsLegend = True NeedsShadow = True legend.Initialize legend.location = "" legend.show = False legend.placement = "" highLight.Initialize highLight.show = False highLight.sizeAdjust = 0 highLight.showMarker = True highLight.tooltipAxes = "" highLight.tooltipAxes = "" highLight.yvalues = 0 highLight.formatString = "" cursor.Initialize cursor.show = False cursor.tooltipLocation = "" cursor.showToolTip = True SingleSeries = False markerStyle.Initialize markerStyle.circle = "circle" markerStyle.diamond = "diamond" markerStyle.x = "x" linePattern.Initialize linePattern.dashed = "dashed" linePattern.dotted = "dotted" renderer.Initialize renderer.LogAxisRenderer = "$.jqplot.LogAxisRenderer" renderer.CanvasAxisLabelRenderer = "$.jqplot.CanvasAxisLabelRenderer" renderer.BarRenderer = "$.jqplot.BarRenderer" renderer.CategoryAxisRenderer = "$.jqplot.CategoryAxisRenderer" renderer.DateAxisRenderer = "$.jqplot.DateAxisRenderer" renderer.FunnelRenderer = "$.jqplot.FunnelRenderer" renderer.BubbleRenderer = "$.jqplot.BubbleRenderer" renderer.BlockRenderer = "$.jqplot.BlockRenderer" renderer.PieRenderer = "$.jqplot.PieRenderer" renderer.DonutRenderer = "$.jqplot.DonutRenderer" renderer.CanvasAxisTickRenderer = "$.jqplot.CanvasAxisTickRenderer" chartType.Initialize chartType.bar = "bar" chartType.line = "line" chartType.pie = "pie" chartType.funnel = "funnel" chartType.scatter = "scatter" chartType.bubble = "bubble" chartType.block = "block" chartType.donut = "donut" chartType.barh = "barh" mChartType = chartType.line mTitle = "" mWidth = "100%" mHeight = "500px" barGroupMargin = 4 TopMargin = 30 BottomMargin = 10 RightMargin = 10 LeftMargin = 30 Series.Initialize SeriesColors.Initialize DataRows.Initialize axesDefaults.Initialize axesDefaults.sMin = "" axesDefaults.sMax = "" axesDefaults.labelRenderer = renderer.CanvasAxisLabelRenderer '********** x axis xAxis.Initialize xAxis.renderer = "" xAxis.label = "" xAxis.pad = "" xAxis.sMax = "" xAxis.sMin = "" xAxis.numberTicks = 0 xAxis.ticks.Initialize xAxis.tickRenderer = "" xAxis.tickOptions.Initialize xAxis.tickOptions.formatString = "" xAxis.tickOptions.fontSize = "" xAxis.tickOptions.angle = 361 xAxis.tickInterval = "" '******** y axis yAxis.Initialize yAxis.renderer = "" yAxis.sMax = "" yAxis.sMin = "" yAxis.label = "" yAxis.pad = "" yAxis.numberTicks = 0 yAxis.ticks.Initialize yAxis.tickOptions.Initialize yAxis.tickOptions.formatString = "" yAxis.tickOptions.fontSize = "" yAxis.tickOptions.angle = 361 yAxis.tickRenderer = "" yAxis.tickInterval = "" seriesDefaults.Initialize seriesDefaults.pointLabels.Initialize seriesDefaults.pointLabels.show = False seriesDefaults.pointLabels.location = "" seriesDefaults.showMarker = True seriesDefaults.showLine = True seriesDefaults.renderer = "" seriesDefaults.shadow = False seriesDefaults.rendererOptions.Initialize seriesDefaults.rendereroptions.varyBarColor = False seriesDefaults.rendereroptions.smooth = False seriesDefaults.rendererOptions.animation.show = False seriesDefaults.rendererOptions.animation.speed = 2500 seriesDefaults.rendererOptions.bubbleGradients = False seriesDefaults.rendererOptions.bubbleAlpha = -1 seriesDefaults.markerOptions.Initialize seriesDefaults.markerOptions.show = True seriesDefaults.rendererOptions.dataLabels = "" seriesDefaults.rendererOptions.showDataLabels = False seriesDefaults.rendererOptions.sectionMargin = -1 seriesDefaults.rendererOptions.fill = True seriesDefaults.rendererOptions.lineWidth = -1 seriesDefaults.rendererOptions.sliceMargin = -1 seriesDefaults.rendererOptions.barMargin = -1 seriesDefaults.rendererOptions.fillToZero = True ' detect negative values by default seriesDefaults.rendererOptions.barDirection = "" SeriesOptions.Initialize End Sub 'set the deadline for the series Sub SetDeadLine(name As String, x As Object,lineWidth As Int,r As Int,g As Int, b As Int, shadow As Boolean, slineCap As String, yOffset As Int) canvasOverlay.show = True hasDeadLine = True canvasOverlay.verticalLine.name = name canvasOverlay.VerticalLine.x = x canvasOverlay.verticalLine.yoffset = yOffset canvasOverlay.VerticalLine.lineWidth = lineWidth canvasOverlay.verticalLine.b = b canvasOverlay.verticalLine.r = r canvasOverlay.verticalLine.g = g canvasOverlay.verticalLine.lineCap = slineCap canvasOverlay.verticalLine.shadow = shadow End Sub 'show point labels Sub ShowPointLabels(bs As Boolean, slocation As String) seriesDefaults.pointLabels.show = bs seriesDefaults.pointLabels.location = slocation End Sub 'set bar margins Sub SetBarMargins(iMargin As Int) seriesDefaults.rendererOptions.barMargin = iMargin End Sub 'Rotate the XAxis Labels Sub RotateXAxisLabels(iAngle As Int, fontSize As String) xAxis.tickRenderer = renderer.CanvasAxisTickRenderer xAxis.tickOptions.angle = iAngle xAxis.tickOptions.fontSize = fontSize End Sub 'set start angle Sub SetStartAngle(ia As Int) seriesDefaults.rendererOptions.startAngle = ia End Sub 'set fill for chart Sub SetFill(bFill As Boolean, lineWidth As Int) seriesDefaults.rendererOptions.fill = bFill seriesDefaults.rendererOptions.lineWidth = lineWidth End Sub 'set legend location and visibility Sub SetLegend(slocation As String, bShow As Boolean, sPlacement As String) legend.location = slocation legend.show = bShow legend.placement = sPlacement End Sub 'what happens when a mouse pointer is placed over a point, show details Sub SetHighlighter(bShow As Boolean, sizeAdjust As Double) highLight.show = bShow highLight.sizeAdjust = sizeAdjust End Sub 'set data labels for a funnel Sub SetDataLabels(dataLabel As String, bShow As Boolean) seriesDefaults.rendererOptions.dataLabels = dataLabel seriesDefaults.rendererOptions.showDataLabels = bShow End Sub 'No spacing between funnel values Sub SetFunnelSectionMargin(iMargin As Int) seriesDefaults.rendererOptions.sectionMargin = iMargin End Sub 'set the cursor visibility and tooltip location Sub SetCursor(bShow As Boolean, sToolTipLocation As String) cursor.show = bShow cursor.tooltipLocation = sToolTipLocation End Sub 'set XAxisTickOptionsFormatString Sub SetXAxisTickOptionsFormatString(fs As String) xAxis.tickOptions.formatString = fs End Sub 'set YAxisTickOptionsFormatString Sub SetYAxisTickOptionsFormatString(fs As String) yAxis.tickOptions.formatString = fs End Sub 'show lines or not Sub ShowLines(bl As Boolean) seriesDefaults.showLine = bl End Sub 'show markers or not Sub ShowMarkers(bs As Boolean) seriesDefaults.showMarker = bs End Sub 'has varying colors or not Sub UseVaryingColors(bv As Boolean) seriesDefaults.rendererOptions.varyBarColor = bv End Sub 'is chart smooth or not Sub IsSmooth(bs As Boolean) seriesDefaults.rendererOptions.smooth = bs End Sub 'is chart animated or not Sub IsAnimated(bv As Boolean, bAnimate As Boolean, bAnimateReplot As Boolean) seriesDefaults.rendererOptions.animation.show = bv Animate = bAnimate AnimateReplot = bAnimateReplot End Sub 'set the min and max for y axis 'this is the starting point on x axis and ending point Sub SetYAxisMinMax(sMin As String, sMax As String) yAxis.sMin = sMin yAxis.sMax = sMax End Sub 'set the width and height of the chart Sub SetWidthHeight(Width As String, Height As String) mHeight = Height mWidth = Width End Sub 'set the title of the chart Sub SetTitle(Title As String) mTitle = Title End Sub 'set all titles Sub SetTitles(Title As String, xAxisTitle As String, yAxisTitle As String) mTitle = Title xAxis.label = xAxisTitle yAxis.label = yAxisTitle End Sub 'set titles for x axis and y axis Sub SetAxisTitles(xAxisTitle As String, yAxisTitle As String) xAxis.label = xAxisTitle yAxis.label = yAxisTitle End Sub 'add specific ticks to the x axis Sub AddXAxisTick(v As Object) Select Case mChartType Case chartType.barh yAxis.ticks.Add(v) Case Else xAxis.ticks.Add(v) End Select End Sub Sub AddYAxisTick(v As Int) yAxis.ticks.Add(v) End Sub 'set the x axis title for the chart Sub SetXAxisTitle(XAxisTitle As String) xAxis.label = XAxisTitle End Sub 'set deafult marker options Sub SeriesDefaultsMarkerOptionsShow(bv As Boolean) seriesDefaults.markerOptions.Show = bv End Sub 'set XAxisRenderer Sub SetXAxisRenderer(sRenderer As String) xAxis.renderer = sRenderer End Sub 'set YAxisRenderer Sub SetYAxisRenderer(sRenderer As String) yAxis.renderer = sRenderer End Sub 'Set the y axis title for the chart Sub SetYAxisTitle(YAxisTitle As String) yAxis.label = YAxisTitle End Sub 'show the data labels Sub ShowDataLabels(bv As Boolean) seriesDefaults.rendererOptions.showDataLabels = bv End Sub 'show the data labels Sub SetSliceMargin(iv As Int) seriesDefaults.rendererOptions.sliceMargin = iv End Sub 'set the chart type Sub SetChartType(sChartType As String) mChartType = sChartType.tolowercase Select Case mChartType Case chartType.barh yAxis.renderer = renderer.CategoryAxisRenderer seriesDefaults.rendererOptions.barDirection = "horizontal" seriesDefaults.renderer = renderer.BarRenderer xAxis.renderer = "" axesDefaults.labelRenderer = "" NeedsCursor = False NeedsHighlighter = False NeedsAxesDefaults = False NeedsShadow = False Case chartType.donut seriesDefaults.renderer = renderer.DonutRenderer xAxis.renderer = "" yAxis.Renderer = "" axesDefaults.labelRenderer = "" NeedsCursor = False NeedsHighlighter = False NeedsAxes = False NeedsAxesDefaults = False NeedsLegend = False NeedsShadow = False Case chartType.pie seriesDefaults.renderer = renderer.PieRenderer xAxis.renderer = "" yAxis.Renderer = "" axesDefaults.labelRenderer = "" NeedsCursor = False NeedsHighlighter = False NeedsAxes = False NeedsAxesDefaults = False NeedsLegend = False NeedsShadow = False Case chartType.block seriesDefaults.renderer = renderer.BlockRenderer Case chartType.bubble seriesDefaults.renderer = renderer.BubbleRenderer seriesDefaults.shadow = True seriesDefaults.rendererOptions.bubbleGradients = True Case chartType.line seriesDefaults.renderer = "" xAxis.renderer = "" yAxis.Renderer = "" Case chartType.bar seriesDefaults.renderer = renderer.BarRenderer xAxis.renderer = renderer.CategoryAxisRenderer yAxis.Renderer = "" axesDefaults.labelRenderer = "" Case chartType.funnel seriesDefaults.renderer = renderer.FunnelRenderer xAxis.renderer = "" yAxis.Renderer = "" axesDefaults.labelRenderer = "" Case chartType.scatter seriesDefaults.renderer = "" xAxis.renderer = "" yAxis.Renderer = "" axesDefaults.labelRenderer = "" ShowLines(False) ShowMarkers(True) End Select End Sub Sub Map2Json(m As Map) As String Dim gen As JSONGenerator Dim outJSON As String gen.Initialize(m) outJSON = gen.ToString Return outJSON End Sub 'set the series options Sub AddSeriesOptions(seriesName As String, slinePattern As String, iLineWidth As Int, sMarkerStyle As String, iMarkerSize As Int, showLine As Boolean) Dim sb As StringBuilder sb.Initialize sb.Append("{") If slinePattern.Length > 0 Then sb.Append("linePattern: '").Append(slinePattern).Append("'").Append(",") End If If iLineWidth > 0 Then sb.Append("lineWidth: ").Append(iLineWidth).Append(",") End If If showLine = False Then sb.Append("showLine: false").Append(",") End If sb.Append("markerOptions: {") If sMarkerStyle.length > 0 Then sb.Append("style: '").Append(sMarkerStyle).Append("'").Append(",") End If If iMarkerSize > 0 Then sb.Append("size : ").Append(iMarkerSize).Append(",") End If sb.Append("}").Append(",") sb.Append("}") SeriesOptions.Add(sb.tostring) End Sub 'set seris trendlines Sub AddSeriesTrendLine(seriesName As String, bShow As Boolean, sColor As String, stypeOf As String) Dim sb As StringBuilder sb.Initialize sb.Append("{") sb.Append("trendline:{") sb.Append("show:").Append(bShow).Append(",") sb.Append("color:'").Append(sColor).Append("',") sb.Append("type:'").Append(stypeOf).Append("'") sb.Append("}") sb.Append("}") SeriesOptions.Add(sb.ToString) End Sub 'add a series to the chart, a series is like a row key/id Sub AddSeries(seriesName As String) Dim sb As StringBuilder sb.Initialize sb.Append("{label:'").Append(seriesName).Append("'}") SeriesOptions.Add(sb.ToString) End Sub 'set series categories Sub AddCategory(categoryName As String) SortTicks = False categoryName = "'" & categoryName & "'" AddXAxisTick(categoryName) End Sub 'add date data Sub AddSeriesDateData(sDate As String, value As String) sDate = QUOTE & sDate & QUOTE DataRows.Add($"[${sDate}, ${value}]"$) End Sub 'add bubble chart data Sub AddBubbleData(x As String, y As String, radius As String, label As String) label = QUOTE & label & QUOTE DataRows.Add($"[${x}, ${y}, ${radius}, ${label}]"$) End Sub 'add bubble data with color Sub AddBubbleDataWithColor(x As String, y As String, radius As String, label As String, color As String) Dim sb As StringBuilder sb.Initialize sb.Append("{label: '").Append(label).Append("',color: '").Append(color).Append("'}") DataRows.Add($"[${x}, ${y}, ${radius}, ${sb.tostring}]"$) End Sub 'add block data Sub AddBlockData(x As String, y As String, label As String) label = "'" & label & "'" DataRows.Add($"[${x}, ${y}, ${label}]"$) End Sub 'add a data row with 10 elements Sub AddSeriesData10(v1 As Object,v2 As Object,v3 As Object,v4 As Object,v5 As Object,v6 As Object, v7 As Object, v8 As Object, v9 As Object, v10 As Object) Select Case mChartType Case chartType.barh Dim sb As StringBuilder sb.Initialize sb.Append("[").Append(v1).Append(", 1],") sb.Append("[").Append(v2).Append(", 2],") sb.Append("[").Append(v3).Append(", 3],") sb.Append("[").Append(v4).Append(", 4],") sb.Append("[").Append(v5).Append(", 5]") sb.Append("[").Append(v6).Append(", 6]") sb.Append("[").Append(v7).Append(", 7]") sb.Append("[").Append(v8).Append(", 8]") sb.Append("[").Append(v9).Append(", 9]") sb.Append("[").Append(v10).Append(", 10]") DataRows.Add("[" & sb.ToString & "]") Case Else DataRows.Add($"[${v1}, ${v2}, ${v3}, ${v4}, ${v5}, ${v6}, ${v7}, ${v8}, ${v9}, ${v10}]"$) End Select End Sub 'add a data row with 9 elements Sub AddSeriesData9(v1 As Object,v2 As Object,v3 As Object,v4 As Object,v5 As Object,v6 As Object, v7 As Object, v8 As Object, v9 As Object) Select Case mChartType Case chartType.barh Dim sb As StringBuilder sb.Initialize sb.Append("[").Append(v1).Append(", 1],") sb.Append("[").Append(v2).Append(", 2],") sb.Append("[").Append(v3).Append(", 3],") sb.Append("[").Append(v4).Append(", 4],") sb.Append("[").Append(v5).Append(", 5]") sb.Append("[").Append(v6).Append(", 6]") sb.Append("[").Append(v7).Append(", 7]") sb.Append("[").Append(v8).Append(", 8]") sb.Append("[").Append(v9).Append(", 9]") DataRows.Add("[" & sb.ToString & "]") Case Else DataRows.Add($"[${v1}, ${v2}, ${v3}, ${v4}, ${v5}, ${v6}, ${v7}, ${v8}, ${v9}]"$) End Select End Sub 'add a data row with 8 elements Sub AddSeriesData8(v1 As Object,v2 As Object,v3 As Object,v4 As Object,v5 As Object,v6 As Object, v7 As Object, v8 As Object) Select Case mChartType Case chartType.barh Dim sb As StringBuilder sb.Initialize sb.Append("[").Append(v1).Append(", 1],") sb.Append("[").Append(v2).Append(", 2],") sb.Append("[").Append(v3).Append(", 3],") sb.Append("[").Append(v4).Append(", 4],") sb.Append("[").Append(v5).Append(", 5]") sb.Append("[").Append(v6).Append(", 6]") sb.Append("[").Append(v7).Append(", 7]") sb.Append("[").Append(v8).Append(", 8]") DataRows.Add("[" & sb.ToString & "]") Case Else DataRows.Add($"[${v1}, ${v2}, ${v3}, ${v4}, ${v5}, ${v6}, ${v7}, ${v8}]"$) End Select End Sub 'add a data row with 7 elements Sub AddSeriesData7(v1 As Object,v2 As Object,v3 As Object,v4 As Object,v5 As Object,v6 As Object,v7 As Object) Select Case mChartType Case chartType.barh Dim sb As StringBuilder sb.Initialize sb.Append("[").Append(v1).Append(", 1],") sb.Append("[").Append(v2).Append(", 2],") sb.Append("[").Append(v3).Append(", 3],") sb.Append("[").Append(v4).Append(", 4],") sb.Append("[").Append(v5).Append(", 5]") sb.Append("[").Append(v6).Append(", 6]") sb.Append("[").Append(v7).Append(", 7]") DataRows.Add("[" & sb.ToString & "]") Case Else DataRows.Add($"[${v1}, ${v2}, ${v3}, ${v4}, ${v5}, ${v6}, , ${v7}]"$) End Select End Sub 'add a data row with 6 elements Sub AddSeriesData6(v1 As Object,v2 As Object,v3 As Object,v4 As Object,v5 As Object,v6 As Object) Select Case mChartType Case chartType.barh Dim sb As StringBuilder sb.Initialize sb.Append("[").Append(v1).Append(", 1],") sb.Append("[").Append(v2).Append(", 2],") sb.Append("[").Append(v3).Append(", 3],") sb.Append("[").Append(v4).Append(", 4],") sb.Append("[").Append(v5).Append(", 5]") sb.Append("[").Append(v6).Append(", 6]") DataRows.Add("[" & sb.ToString & "]") Case Else DataRows.Add($"[${v1}, ${v2}, ${v3}, ${v4}, ${v5}, ${v6}]"$) End Select End Sub 'add a data row with 5 elements Sub AddSeriesData5(v1 As Object,v2 As Object,v3 As Object,v4 As Object,v5 As Object) Select Case mChartType Case chartType.barh Dim sb As StringBuilder sb.Initialize sb.Append("[").Append(v1).Append(", 1],") sb.Append("[").Append(v2).Append(", 2],") sb.Append("[").Append(v3).Append(", 3],") sb.Append("[").Append(v4).Append(", 4],") sb.Append("[").Append(v5).Append(", 5]") DataRows.Add("[" & sb.ToString & "]") Case Else DataRows.Add($"[${v1}, ${v2}, ${v3}, ${v4}, ${v5}]"$) End Select End Sub 'add a data row with 4 elements Sub AddSeriesData4(v1 As Object,v2 As Object,v3 As Object,v4 As Object) Select Case mChartType Case chartType.barh Dim sb As StringBuilder sb.Initialize sb.Append("[").Append(v1).Append(", 1],") sb.Append("[").Append(v2).Append(", 2],") sb.Append("[").Append(v3).Append(", 3],") sb.Append("[").Append(v4).Append(", 4],") DataRows.Add("[" & sb.ToString & "]") Case Else DataRows.Add($"[${v1}, ${v2}, ${v3}, ${v4}]"$) End Select End Sub 'add a data row with 3 elements Sub AddSeriesData3(v1 As Object,v2 As Object,v3 As Object) Select Case mChartType Case chartType.barh Dim sb As StringBuilder sb.Initialize sb.Append("[").Append(v1).Append(", 1],") sb.Append("[").Append(v2).Append(", 2],") sb.Append("[").Append(v3).Append(", 3],") DataRows.Add("[" & sb.ToString & "]") Case Else DataRows.Add($"[${v1}, ${v2}, ${v3}]"$) End Select End Sub 'add a data row with 2 elements Sub AddSeriesData2(v1 As Object,v2 As Object) Select Case mChartType Case chartType.barh Dim sb As StringBuilder sb.Initialize sb.Append("[").Append(v1).Append(", 1],") sb.Append("[").Append(v2).Append(", 2],") DataRows.Add("[" & sb.ToString & "]") Case Else DataRows.Add($"[${v1}, ${v2}]"$) End Select End Sub 'set the upper limit Sub SetLowerLimit(y As Object,lineWidth As Int, r As Int, g As Int, b As Int, bShadow As Boolean, slineCap As String) hasLowerLimit = True canvasOverlay.show = True canvasOverlay.HorizontalLine.y = y canvasOverlay.HorizontalLine.b = b canvasOverlay.HorizontalLine.g = g canvasOverlay.HorizontalLine.r = r canvasOverlay.HorizontalLine.lineCap = slineCap canvasOverlay.HorizontalLine.shadow = bShadow End Sub 'set the upper limit Sub SetUpperLimit(y As Object,lineWidth As Int, r As Int, g As Int, b As Int, bShadow As Boolean, sDashPattern As String, slineCap As String) hasUpperLimit = True canvasOverlay.show = True canvasOverlay.dashedHorizontalLine.y = y canvasOverlay.dashedHorizontalLine.b = b canvasOverlay.dashedHorizontalLine.g = g canvasOverlay.dashedHorizontalLine.r = r canvasOverlay.dashedHorizontalLine.lineCap = slineCap canvasOverlay.dashedHorizontalLine.shadow = bShadow canvasOverlay.dashedHorizontalLine.dashPattern = sDashPattern End Sub 'add a bar data Sub AddBarData(label As String,value As Object) label = "'" & label & "'" DataRows.Add($"[${label}, ${value}]"$) End Sub 'add a data row with 1 element Sub AddSeriesData1(v1 As Object) Select Case mChartType Case chartType.barh Dim sb As StringBuilder sb.Initialize sb.Append("[").Append(v1).Append(", 1],") DataRows.Add("[" & sb.ToString & "]") Case Else DataRows.Add($"[${v1}]"$) End Select End Sub 'RGBA Color private Sub GetRGBA(r As Int, g As Int, b As Int, a As Double) As String Dim sb As StringBuilder sb.Initialize sb.Append("rgba(").Append(r).Append(",") sb.Append(g).Append(",").Append(b).Append(",").Append(a) sb.Append(")") Return sb.tostring End Sub 'RGBA Color private Sub GetRGB(r As Int, g As Int, b As Int) As String Dim sb As StringBuilder sb.Initialize sb.Append("rgb(").Append(r).Append(",") sb.Append(g).Append(",").Append(b) sb.Append(")") Return sb.tostring End Sub 'get the series for this chart 'Private Sub GetSeries() As String ' Dim sb As StringBuilder ' sb.Initialize ' For Each strSeries As String In Series ' sb.Append(strSeries) ' Next ' Return sb.ToString 'End Sub 'get the series colors for this chart 'Private Sub GetSeriesColors() As String ' Dim sb As StringBuilder ' sb.Initialize ' For Each strColor As String In SeriesColors ' sb.Append(strColor) ' Next ' Return sb.ToString 'End Sub 'add a series to the chart, a series is like a row key/id Sub AddSeriesWithColor(seriesName As String, seriesColor As String) seriesName = QUOTE & seriesName & QUOTE seriesColor = QUOTE & seriesColor & QUOTE Series.Add(seriesName) SeriesColors.Add(seriesColor) Dim sb As StringBuilder sb.Initialize sb.Append("{label: '").Append(seriesName).Append("'}") SeriesOptions.Add(sb.ToString) End Sub 'add a series to the chart, a series is like a row key/id Sub AddSeriesRGBA(seriesName As String, r As Int, g As Int, b As Int, a As Double) Dim seriesColor As String seriesColor = GetRGBA(r,g,b,a) AddSeriesWithColor(seriesName,seriesColor) End Sub Sub AddSeriesNeigborThreshold(sneighborThreshold As String) Dim sb As StringBuilder sb.Initialize sb.Append("{neightborThreshold: ").Append(sneighborThreshold).Append("}") SeriesOptions.Add(sb.ToString) End Sub 'add a series to the chart, a series is like a row key/id Sub AddSeriesRGB(seriesName As String, r As Int, g As Int, b As Int) Dim seriesColor As String seriesColor = GetRGB(r,g,b) AddSeriesWithColor(seriesName,seriesColor) End Sub 'get the margins of the chart private Sub GetMargins() As String Dim sb As StringBuilder sb.Initialize sb.Append("top:").Append(TopMargin).Append(",") sb.Append("right:").Append(RightMargin).Append(",") sb.Append("bottom:").Append(BottomMargin).Append(",") sb.Append("left:").Append(LeftMargin) Return sb.tostring End Sub 'build the options for the chart private Sub GetOptions() As String Dim sb As StringBuilder sb.Initialize 'define the ticks for the x axis #Region "Build XAxis Ticks Array" If (xAxis.ticks.Size - 1) <> -1 Then sb.Append("var xticks = [];").Append(CRLF) If SortTicks = True Then xAxis.ticks.Sort(True) For Each strTick As String In xAxis.ticks sb.Append("xticks.push(").Append(strTick).Append(");").Append(CRLF) Next End If #End Region #Region "Build YAxis Ticks Array" 'define the ticks for the y axis If (yAxis.ticks.Size - 1) <> -1 Then sb.Append("var yticks = [];").Append(CRLF) If SortTicks = True Then yAxis.ticks.Sort(True) For Each strTick As String In yAxis.ticks sb.Append("yticks.push(").Append(strTick).Append(");").Append(CRLF) Next End If #End Region #Region "Build Series Colors Array" 'define the series colors If (SeriesColors.Size - 1) <> -1 Then sb.Append("var sColors = [];").Append(CRLF) For Each strColor As String In SeriesColors sb.Append("sColors.push(").Append(strColor).Append(");").Append(CRLF) Next End If #End Region #Region "Build Series Options Array" ' define series options If (SeriesOptions.Size - 1) <> -1 Then sb.Append("var sOptions = [];").Append(CRLF) For Each sOption As String In SeriesOptions sb.Append("sOptions.push(").Append(sOption).Append(");").Append(CRLF) Next End If #End Region #Region "Build Chart Options" sb.Append("var options = {").Append(CRLF) 'define the title of the chart #Region "Animate" If Animate = True Then sb.Append("animate: true,").append(CRLF) End If If AnimateReplot = True Then sb.Append("animateReplot: true,").Append(CRLF) End If #End Region #Region "Add Title" sb.Append("title: '").Append(mTitle).Append("'").Append(",").Append(CRLF) #End Region #Region "IsStacked" If IsStacked = True Then sb.Append("stackSeries: true, ").append(CRLF) End If #End Region #Region "Upper & Lower Limits" If canvasOverlay.show = True Then sb.Append("canvasOverlay: {").Append(CRLF) sb.Append("show: true,").Append(CRLF) sb.Append("objects: [").Append(CRLF) If hasLowerLimit = True Then sb.Append("{horizontalLine: {").Append(CRLF) sb.Append("y: ").Append(canvasOverlay.HorizontalLine.y).Append(",").Append(CRLF) sb.Append("lineWidth: ").Append(canvasOverlay.HorizontalLine.lineWidth).Append(",").Append(CRLF) sb.Append("color: 'rgb(").Append(canvasOverlay.HorizontalLine.r).Append(",") sb.Append(canvasOverlay.HorizontalLine.g).Append(",") sb.Append(canvasOverlay.HorizontalLine.b).Append(")',").Append(CRLF) sb.Append("shadow: ").Append(canvasOverlay.HorizontalLine.shadow).Append(",").Append(CRLF) sb.Append("lineCap: '").Append(canvasOverlay.HorizontalLine.lineCap).Append("'").append(CRLF) sb.Append("}},").Append(CRLF) End If If hasUpperLimit = True Then sb.Append("{dashedHorizontalLine: {").Append(CRLF) sb.Append("y: ").Append(canvasOverlay.dashedHorizontalLine.y).Append(",").Append(CRLF) sb.Append("lineWidth: ").Append(canvasOverlay.dashedHorizontalLine.lineWidth).Append(",").Append(CRLF) sb.Append("color: 'rgb(").Append(canvasOverlay.dashedHorizontalLine.r).Append(",") sb.Append(canvasOverlay.dashedHorizontalLine.g).Append(",") sb.Append(canvasOverlay.dashedHorizontalLine.b).Append(")',").Append(CRLF) sb.Append("shadow: ").Append(canvasOverlay.dashedHorizontalLine.shadow).Append(",").Append(CRLF) sb.Append("dashPattern: [").Append(canvasOverlay.dashedHorizontalLine.dashpattern).Append("],").Append(CRLF) sb.Append("lineCap: '").Append(canvasOverlay.dashedHorizontalLine.lineCap).Append("'").append(CRLF) sb.Append("}},").Append(CRLF) End If If hasDeadLine = True Then sb.Append("{verticalLine: {").Append(CRLF) sb.Append("name: '").Append(canvasOverlay.verticalLine.name).Append("',").Append(CRLF) sb.Append("x: ").Append(canvasOverlay.verticalLine.x).Append(",").Append(CRLF) sb.Append("lineWidth: ").Append(canvasOverlay.verticalLine.lineWidth).Append(",").Append(CRLF) sb.Append("color: 'rgb(").Append(canvasOverlay.verticalLine.r).Append(",") sb.Append(canvasOverlay.verticalLine.g).Append(",") sb.Append(canvasOverlay.verticalLine.b).Append(")',").Append(CRLF) sb.Append("shadow: ").Append(canvasOverlay.verticalLine.shadow).Append(",").Append(CRLF) sb.Append("yOffset: ").Append(canvasOverlay.verticalLine.yoffset).Append(",").Append(CRLF) sb.Append("lineCap: '").Append(canvasOverlay.verticalLine.lineCap).Append("'").append(CRLF) sb.Append("}},").Append(CRLF) End If sb.Append("]").Append(CRLF) sb.Append("},").Append(CRLF) End If #End Region #Region "Add Series Options" 'define series options If (SeriesOptions.Size - 1) <> -1 Then sb.Append("series: sOptions").Append(",").Append(CRLF) End If #End Region #Region "Add Series Colors" 'define the series colors If (SeriesColors.Size - 1) <> -1 Then sb.Append("seriesColors: sColors").Append(",").Append(CRLF) End If #End Region #Region "SeriesDefauls" 'define series defaults sb.Append("seriesDefaults: {").Append(CRLF) #Region "SeriesDefaults.Renderer" If seriesDefaults.Renderer.Length > 0 Then sb.Append("renderer: ").Append(seriesDefaults.renderer).Append(",").Append(CRLF) End If #End Region #Region "SeriesDefaults.rendererOptions" sb.Append("rendererOptions:{").Append(CRLF) #Region "SeriesDefaults.rendererOptions.barDirection" If seriesDefaults.rendererOptions.barDirection.Length > 0 Then sb.Append("barDirection: '").Append(seriesDefaults.rendererOptions.barDirection) sb.Append("',").Append(CRLF) End If #End Region #Region "SeriesDefaults.rendererOptions.fillToZero" If seriesDefaults.rendererOptions.fillToZero = True Then sb.Append("fillToZero: true,").Append(CRLF) End If #End Region #Region "SeriesDefaults.rendererOptions.barMargin" If seriesDefaults.rendererOptions.barMargin > 0 Then sb.Append("barMargin: ").Append(seriesDefaults.rendererOptions.barMargin) sb.Append(",").Append(CRLF) End If #End Region #Region "SeriesDefaults.rendererOptions.slideMargin" If seriesDefaults.rendererOptions.sliceMargin <> -1 Then sb.Append("sliceMargin: ").Append(seriesDefaults.rendererOptions.sliceMargin) sb.Append(",").Append(CRLF) End If #End Region #Region "SeriesDefaults.rendererOptions.varyBarColor" If seriesDefaults.rendererOptions.varyBarColor = True Then sb.Append("varyBarColor: true").Append(",").Append(CRLF) End If #End Region #Region "SeriesDefaults.rendererOptions.smooth" If seriesDefaults.rendererOptions.smooth = True Then sb.Append("smooth: true").Append(",").Append(CRLF) End If #End Region #Region "SeriesDefaults.rendererOptions.animation" sb.Append("animation: {").Append(CRLF) If seriesDefaults.rendereroptions.animation.show = True Then sb.Append("show: true,").Append(CRLF) End If If seriesDefaults.rendererOptions.animation.speed > 0 Then sb.Append("speed: ") sb.Append(seriesDefaults.rendererOptions.animation.speed) sb.Append(",").Append(CRLF) End If sb.Append("},").Append(CRLF) #End Region #Region "SeriesDefaults.rendererOptions.dataLabels" If seriesDefaults.rendererOptions.dataLabels.Length > 0 Then sb.Append("dataLabels: '").Append(seriesDefaults.rendererOptions.dataLabels) sb.Append("'").Append(", ").Append(CRLF) End If #End Region #Region "SeriesDefaults.rendererOptions.showDataLabels" If seriesDefaults.rendererOptions.showDataLabels = True Then sb.Append("showDataLabels: true").Append(",").Append(CRLF) End If #End Region #Region "SeriesDefaults.rendererOptions.sectionMargin" If seriesDefaults.rendererOptions.sectionMargin <> -1 Then sb.Append("sectionMargin: ").Append(seriesDefaults.rendererOptions.sectionMargin) sb.Append(",").Append(CRLF) End If #End Region #Region "SeriesDefaults.rendererOptions.fill" If seriesDefaults.rendererOptions.fill = False Then sb.Append("fill: ").Append(seriesDefaults.rendererOptions.fill) sb.Append(",").Append(CRLF) End If #End Region #Region "SeriesDefaults.rendererOptions.lineWidth" If seriesDefaults.rendererOptions.lineWidth <> -1 Then sb.Append("lineWidth: ").Append(seriesDefaults.rendererOptions.lineWidth) sb.Append(",").Append(CRLF) End If #End Region #Region "SeriesDefaults.rendererOptions.bubbleGradients" If seriesDefaults.rendererOptions.bubbleGradients = True Then sb.Append("bubbleGradients: true,").Append(CRLF) End If #End Region #Region "SeriesDefaults.rendererOptions.bubbleAlpha" If seriesDefaults.rendererOptions.bubbleAlpha <> -1 Then sb.Append("bubbleAlpha: ").Append(seriesDefaults.rendererOptions.bubbleAlpha) sb.Append(",").Append(CRLF) End If #End Region sb.Append("},").append(CRLF) #End Region #Region "SeriesDefaults.pointLabels" sb.Append("pointLabels:{").Append(CRLF) If seriesDefaults.pointLabels.show = True Then sb.Append("show: true,").Append(CRLF) End If If seriesDefaults.pointLabels.Location.Length > 0 Then sb.Append("location: '").Append(seriesDefaults.pointLabels.location) sb.Append("',").Append(CRLF) End If sb.Append("},").Append(CRLF) #End Region #Region "SeriesDefaults.showMarker" If seriesDefaults.showMarker = False Then sb.Append("showMarker: false,").Append(CRLF) End If #End Region #Region "SeriesDefaults.showLine" If seriesDefaults.showLine = False Then sb.Append("showLine: false,").Append(CRLF) End If #End Region #Region "SeriesDefaults.markerOptions" If seriesDefaults.markerOptions.Show = False Then sb.Append("markerOptions:{").Append(CRLF) sb.Append("show: false,").Append(CRLF) sb.Append("}").Append(",").Append(CRLF) End If #End Region #Region "SeriesDefaults.shadow" If NeedsShadow = True Then sb.Append("shadow: ").Append(seriesDefaults.shadow).Append(",").Append(CRLF) End If #End Region sb.Append("},").Append(CRLF) #End Region #End Region #Region "Axes Defaults" If NeedsAxesDefaults = True Then 'define the default axes properties (applies to both) sb.Append("axesDefaults:{").Append(CRLF) #Region "axesDefaults.MinMax" If axesDefaults.sMin.length > 0 Then sb.Append("min: ").Append(axesDefaults.sMin).Append(",").Append(CRLF) End If If axesDefaults.sMax.Length > 0 Then sb.Append("max: ").Append(axesDefaults.sMax).Append(",").Append(CRLF) End If #End Region #Region "axesDefaults.labelRenderer" If axesDefaults.labelRenderer.Length > 0 Then sb.Append("labelRenderer: ").Append(axesDefaults.labelRenderer).Append(",").Append(CRLF) End If #End Region sb.Append("},").Append(CRLF) End If #End Region #Region "XYAxis" If NeedsAxes = True Then 'define the axes default properties sb.Append("axes:{").Append(CRLF) #Region "YAxis" sb.Append("yaxis:{").Append(CRLF) #Region "YAxis.MinMax" If yAxis.sMin.length > 0 Then sb.Append("min: ").Append(yAxis.sMin).Append(",").Append(CRLF) End If If yAxis.sMax.length > 0 Then sb.Append("max: ").Append(yAxis.sMax).Append(",").Append(CRLF) End If #End Region #Region "YAxis.renderer" If yAxis.Renderer.Length > 0 Then sb.Append("renderer: ").Append(yAxis.renderer).Append(",").Append(CRLF) End If #End Region #Region "YAxis.tickInterval" If yAxis.tickInterval.Length > 0 Then sb.Append("tickInterval: ").Append(yAxis.tickInterval).Append(",").Append(CRLF) End If #End Region #Region "YAxis.tickOptions" sb.Append("tickOptions:{").append(CRLF) If yAxis.tickOptions.formatString.Length > 0 Then sb.Append("formatString: ").Append(yAxis.tickOptions.formatString) sb.Append(",").Append(CRLF) End If sb.Append("}").Append(",").Append(CRLF) #End Region #Region "YAxis.label" If yAxis.label.Length > 0 Then sb.Append("label: ").Append(QUOTE).Append(yAxis.label).Append(QUOTE) sb.Append(",").Append(CRLF) End If #End Region #Region "YAxis.pad If yAxis.pad.Length > 0 Then sb.Append("pad: ").Append(yAxis.pad).Append(",").Append(CRLF) End If #End Region #Region "YAxis.numberticks" If yAxis.numberticks > 0 Then sb.Append("numberTicks: ").Append(yAxis.numberTicks).Append(",").Append(CRLF) End If #End Region #Region "YAxis.ticks" If (yAxis.ticks.Size -1) <> -1 Then sb.Append("ticks: yticks").Append(",").Append(CRLF) End If #End Region sb.Append("},").Append(CRLF) #End Region #Region "XAxis" sb.Append("xaxis:{").Append(CRLF) #Region "XAxis.MinMax" If xAxis.sMin.length > 0 Then sb.Append("min: ").Append(xAxis.sMin).Append(",").Append(CRLF) End If If xAxis.sMax.Length > 0 Then sb.Append("max: ").Append(xAxis.sMax).Append(",").Append(CRLF) End If #End Region #Region "XAxis.Renderer" If xAxis.Renderer.Length > 0 Then sb.Append("renderer: ").Append(xAxis.renderer).Append(",").Append(CRLF) End If #End Region #Region "XAxis.tickInterval" If xAxis.tickInterval.Length > 0 Then sb.Append("tickInterval: ").Append(xAxis.tickInterval).Append(",").Append(CRLF) End If #End Region #Region "XAxis.tickRenderer" If xAxis.tickRenderer.Length > 0 Then sb.Append("tickRenderer: ").Append(xAxis.tickRenderer) sb.Append(",").Append(CRLF) End If #End Region #Region "XAxis.tickOptions" sb.Append("tickOptions:{").append(CRLF) If xAxis.tickOptions.formatString.Length > 0 Then sb.Append("formatString: ").Append(xAxis.tickOptions.formatString) sb.Append(",").Append(CRLF) End If If xAxis.tickOptions.fontSize.Length > 0 Then sb.Append("fontSize: '").Append(xAxis.tickOptions.fontSize) sb.Append("',").Append(CRLF) End If If xAxis.tickOptions.angle <> 361 Then sb.Append("angle: ").Append(xAxis.tickOptions.angle) sb.Append(",").Append(CRLF) End If sb.Append("}").Append(",").Append(CRLF) #End Region #Region "XAxis.label If xAxis.label.Length > 0 Then sb.Append("label: ").Append(QUOTE).Append(xAxis.label).Append(QUOTE) sb.Append(",").Append(CRLF) End If #End Region #Region "XAxis.pad" If xAxis.pad.Length > 0 Then sb.Append("pad: ").Append(xAxis.pad).Append(",").Append(CRLF) End If #End Region #Region "XAxis.numberticks If xAxis.numberticks > 0 Then sb.Append("numberTicks: ").Append(xAxis.numberTicks).Append(",").Append(CRLF) End If #End Region #Region "XAxis.ticks" If (xAxis.ticks.Size -1) <> -1 Then sb.Append("ticks: xticks").Append(",").Append(CRLF) End If #End Region sb.Append("},").Append(CRLF) #End Region sb.Append("},").Append(CRLF) End If #End Region #Region "Grid" sb.Append("grid:{").Append(CRLF) If grid.drawGridlines = False Then sb.Append("drawGridlines: false,").Append(CRLF) End If If grid.background.Length > 0 Then sb.Append("background: '").Append(grid.background).Append("',").Append(CRLF) End If If grid.gridLineColor.Length > 0 Then sb.Append("gridLineColor: '").Append(grid.gridLineColor).Append("',").Append(CRLF) End If If grid.gridLineWidth <> -1 Then sb.Append("gridLineWidth: ").Append(grid.gridLineWidth).Append(",").Append(CRLF) End If If grid.drawBorder = False Then sb.Append("drawBorder: false,").Append(CRLF) End If If grid.shadow = False Then sb.Append("shadow: false,").Append(CRLF) End If sb.Append("},").Append(CRLF) #End Region #Region "Highligher" If NeedsHighlighter = True Then sb.Append("highlighter:{").Append(CRLF) If highLight.show = True Then sb.Append("show: ").Append(highLight.show).Append(",").Append(CRLF) End If If highLight.sizeAdjust > 0 Then sb.Append("sizeAdjust: ").Append(highLight.sizeAdjust).Append(",").Append(CRLF) End If sb.Append("}").Append(",").Append(CRLF) End If #End Region #Region "Cursor" If NeedsCursor = True Then sb.Append("cursor:{").Append(CRLF) sb.Append("show: ").Append(cursor.show).Append(",").Append(CRLF) If cursor.tooltipLocation.Length > 0 Then sb.Append("tooltipLocation:'").Append(cursor.tooltipLocation).Append("'").Append(",") sb.Append(CRLF) End If If cursor.zoom = True Then sb.Append("zoom: true,").Append(CRLF) End If If cursor.showToolTip = False Then sb.Append("showTooltip: false,").Append(CRLF) End If sb.Append("}").Append(",").Append(CRLF) End If #End Region #Region "Legend" If NeedsLegend = True Then sb.Append("legend:{").Append(CRLF) #Region "Legend.location" If legend.location.Length > 0 Then sb.Append("location: '").Append(legend.location).Append("'").Append(",") sb.Append(CRLF) End If #End Region #Region "Legend.show" If legend.show = True Then sb.Append("show: true,").Append(CRLF) End If #End Region #Region "Legend.placement" If legend.placement.Length > 0 Then sb.Append("placement: '").Append(legend.placement).Append("'") sb.Append(",").Append(CRLF) End If #End Region sb.Append("}").Append(CRLF) End If #End Region sb.Append("};").Append(CRLF) Return sb.tostring #End Region End Sub 'detect negative values in bar chart Sub DetectNegativeValues(bd As Boolean) seriesDefaults.rendererOptions.fillToZero = bd End Sub 'set up Bubble Chart properties Sub SetBubbleChart(bShadow As Boolean, bBubbleGradients As Boolean, bubbleAlpha As Double) seriesDefaults.shadow = bShadow seriesDefaults.rendererOptions.bubbleGradients = bBubbleGradients seriesDefaults.rendererOptions.bubbleAlpha = bubbleAlpha End Sub 'set the x axis numberticks Sub SetXAxisNumberTicks(v As Int) xAxis.numberTicks = v End Sub 'set the x axis numberticks Sub SetYAxisNumberTicks(v As Int) yAxis.numberTicks = v End Sub 'set the x axis min Sub SetXAxisMin(sMin As String) xAxis.sMin = sMin End Sub 'set the x axis min Sub SetXAxisMax(sMax As String) xAxis.sMax = sMax End Sub 'set the x axis min Sub SetYAxisMin(sMin As String) yAxis.sMin = sMin End Sub Sub SetYAxisMax(sMax As Object) yAxis.smax = sMax End Sub 'set the x axis min max values Sub SetXAxisMinMax(smin As String, smax As String) xAxis.sMin = smin xAxis.sMax = smax End Sub 'set the padding of the x axis Sub SetXAxisPadding(v As Int) xAxis.pad = v End Sub 'set the padding of the y axis Sub SetYAxisPadding(v As Int) yAxis.pad = v End Sub 'return the script of the control public Sub ToString() As String Return GetScript(ABMComp.ID) End Sub 'build the data for the chart private Sub GetData() As String Dim sb As StringBuilder sb.Initialize sb.Append("var data = [];").Append(CRLF) For Each strData As String In DataRows sb.Append("data.push(").Append(strData).Append(");").Append(CRLF) Next If SingleSeries = True Then sb.Append("var singleData = [];").Append(CRLF) sb.Append("singleData.push(data);").Append(CRLF) sb.Append("data = singleData;").Append(CRLF) End If Return sb.tostring End Sub ' runs when an object is created for the first time. Expects a valid html string Sub ABMComp_Build(internalID As String) As String Return $"
"$ End Sub 'build the charting script private Sub GetScript(internalID As String) As String Dim sb As StringBuilder sb.Initialize sb.Append(GetData) sb.Append(GetOptions) sb.Append("$.jqplot('").append(internalID).append("', data, options);").append(CRLF) Return sb.tostring End Sub ' Is useful to run some initalisation script. Sub ABMComp_FirstRun(InternalPage As ABMPage, internalID As String) Dim script As String = GetScript(internalID) InternalPage.ws.Eval(script, Array As Object(ABMComp.ID)) ' flush not needed, it's done in the refresh method in the lib End Sub ' runs when a refresh is called Sub ABMComp_Refresh(InternalPage As ABMPage, internalID As String) ' use these methods to adjust the object ' ABM.HasClass ' ABM.AddClass ' ABM.RemoveClass ' ABM.AddHTML ' ABM.InsertHTMLAfter ' ABM.RemoveHTML ' ABM.GetProperty ' ABM.SetProperty ' ABM.RemoveProperty ' ABM.GetStyleProperty ' ABM.SetStyleProperty ' do some script stuff like you do in RunJavaScript 'Dim script As String = "" 'InternalPage.ws.Eval(script, Null) End Sub ' do the stuff needed when the object is removed Sub ABMComp_CleanUp(InternalPage As ABMPage, internalID As String) End Sub