Advertisement
Guest User

Untitled

a guest
Sep 29th, 2017
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
XBasic 14.63 KB | None | 0 0
  1. Imports System.ComponentModel
  2. Imports System.Drawing.Drawing2D
  3. Imports System.Drawing.Text
  4. Imports DataservComponents.HMI
  5.  
  6. Public Class DataservProgressCircle
  7.     Inherits ReadDisplayObject
  8.  
  9.     Private Const DrawLock As String = "DrawLock"
  10.  
  11. # Region "columnNames"
  12.  
  13.     private const TextFontStr as String = "TextFont"
  14.     Private const TextColorStr as String = "TextColor"
  15.     Private const TextValueStr as String = "TextValue"
  16.     Private const ArcColorStr as String = "ArcColor"
  17.     Private const DisplaymodeStr as String = "DisplayMode"
  18.     Private const InFrontStr as String = "InFront"
  19.     Private const HeightStr as String = "height"
  20.     Private const WidthStr as String = "width"
  21.     Private const ZOrderStr as String = "zorder"
  22.     Private const YStr as String = "y"
  23.     Private const XStr as String = "x"
  24.     Private const ParentStr as String = "parent"
  25.     Private const NameStr as String = "name"
  26.     Private const ForegroundColorStr as String = "ForegroundColor"
  27.     Private const BackgroundColorStr as String = "BackgroundColor"
  28.     Private const BorderStyleStr as String = "BorderStyle"
  29.     Private const TagforTagcurrentvalueStr as String = "tagfor_TagCurrentValue"
  30.     Private const TagforTagminvalueStr as String = "tagfor_TagMinValue"
  31.     Private const TagforTagmaxvalueStr as String = "tagfor_TagMaxValue"
  32.  
  33. #End Region
  34.  
  35.     Private tagMaxValue As String = ""
  36.     Private tagMinValue As String = ""
  37.     Private tagCurrentValue as String = ""
  38.     Protected dlgFont As New FontDialog
  39.     Private Rendering as Bitmap
  40.     Private TextValue as String = "Progress"
  41.     private ArcColor as Color = ProgressCircle.DefaultOuter.Color
  42.  
  43.     Public Property MaxTag As String
  44.         Get
  45.             Return tagMaxValue
  46.         End Get
  47.         Set(value As String)
  48.             dTagMap.Remove(tagMaxValue)
  49.             tagMaxValue = value
  50.             AddTag(tagMaxValue)
  51.         End Set
  52.     End Property
  53.  
  54.     Public Property MinTag As String
  55.         Get
  56.             Return tagMinValue
  57.         End Get
  58.         Set(value As String)
  59.             dTagMap.Remove(tagMinValue)
  60.             tagMinValue = value
  61.             AddTag(tagMinValue)
  62.         End Set
  63.     End Property
  64.  
  65.     Public Property ValueTag As String
  66.         Get
  67.             Return tagCurrentValue
  68.         End Get
  69.         Set(value As String)
  70.             dTagMap.Remove(tagCurrentValue)
  71.             tagCurrentValue = value
  72.             AddTag(tagCurrentValue)
  73.         End Set
  74.     End Property
  75.  
  76.     Private TextColor as Color = Color.Black
  77.     Private DisplayMode As ProgressCircleDisplayMode = ProgressCircleDisplayMode.Percent
  78.     Dim min = 0
  79.     Dim max = 100
  80.     Dim val = 50
  81.  
  82.     Public Sub New()
  83.         MyBase.New
  84.         Pastable = false
  85.         DisplayPanel.BackgroundImageLayout = ImageLayout.Center
  86.         TextFont = new Font("Arial", 12f, FontStyle.Regular)
  87.     End Sub
  88.  
  89.     Protected Overrides Sub UpdateDisplay()
  90.         UpdateTagValues()
  91.         Threading.Monitor.Enter(drawLock)
  92.         'Subtracting 30 to account for padding
  93.         Dim imageWidth As Integer = DisplayPanel.ClientRectangle.Width
  94.         Dim imageHeight As Integer = DisplayPanel.ClientRectangle.Height
  95.  
  96.         If imagewidth <= 0 Or imageheight <= 0 Then
  97.             imagewidth = 1
  98.             imageheight = 1
  99.         End If
  100.         'Circle must be same l&w
  101.         If imageWidth < imageHeight then
  102.             imageHeight = imageWidth
  103.         Else
  104.             imageWidth = imageHeight
  105.         End If
  106.  
  107.         Dim rectangle = new Rectangle(0, 0, imageWidth, imageHeight)
  108.         Rendering = ProgressCircle.GetRender(rectangle, new SolidBrush(DisplayPanel.ForeColor), new SolidBrush(TextColor), TextValue, val, max, DisplayMode, ArcColor)
  109.         DisplayPanel.BackgroundImage = Rendering
  110.         Threading.Monitor.Pulse(drawLock)
  111.         Threading.Monitor.Exit(drawLock)
  112.     End Sub
  113.  
  114.     Private Sub UpdateTagValues()
  115.         Try
  116.             If Not ValueTag Is Nothing AndAlso ValueTag.StartsWith("LIT") Or (dTagMap.Keys.Contains(ValueTag) AndAlso IsNumeric(dTagMap(ValueTag))) Then
  117.                 val = dTagMap(ValueTag)
  118.             End If
  119.             If Not MaxTag Is Nothing AndAlso MaxTag.StartsWith("LIT") Or (dTagMap.Keys.Contains(MaxTag) AndAlso IsNumeric(dTagMap(MaxTag))) Then
  120.                 max = dTagMap(MaxTag)
  121.             End If
  122.             If Not MinTag Is Nothing AndAlso MinTag.StartsWith("LIT") Or (dTagMap.Keys.Contains(MinTag) AndAlso IsNumeric(dTagMap(MinTag))) Then
  123.                 min = dTagMap(MinTag)
  124.             End If
  125.         Catch ex As Exception
  126.         End Try
  127.     End Sub
  128.  
  129.     Public Overrides Sub UpdateTagFields(values As DataTable)
  130.         dTagMap.Remove(MaxTag)
  131.         MaxTag = values.Rows(0).Item(tagforTagMaxValueStr)
  132.         AddTag(MaxTag)
  133.  
  134.         dTagMap.Remove(MinTag)
  135.         MinTag = values.Rows(0).Item(tagforTagMinValueStr)
  136.         AddTag(MinTag)
  137.  
  138.         dTagMap.Remove(ValueTag)
  139.         ValueTag = values.Rows(0).Item(TagforTagcurrentvalueStr)
  140.         AddTag(ValueTag)
  141.  
  142.         UpdateDisplay()
  143.     End Sub
  144.  
  145.     'Saves this instance of display object
  146.     Public Overrides Function Save() As DataTable
  147.         Dim ret As DataTable = DataservProgressCircle.CreationFields()
  148.         ret.Rows(0).SetField("controltype", "DataservProgressCircle")
  149.         ret.Rows(0).SetField(NameStr, Name)
  150.         ret.Rows(0).SetField(ParentStr, ParentDisplayObject.Name)
  151.         ret.Rows(0).SetField(XStr, Location.X)
  152.         ret.Rows(0).SetField(YStr, Location.Y)
  153.         ret.Rows(0).SetField(ZOrderStr, ZOrder)
  154.         ret.Rows(0).SetField(WidthStr, Width)
  155.         ret.Rows(0).SetField(HeightStr, Height)
  156.         ret.Rows(0).SetField(InFrontStr, InFront)
  157.         ret.Rows(0).SetField(BorderStyleStr, CInt(DisplayBorderStyle))
  158.         ret.Rows(0).SetField(TagforTagmaxvalueStr, MaxTag)
  159.         ret.Rows(0).SetField(TagforTagminvalueStr, MinTag)
  160.         ret.Rows(0).SetField(TagforTagcurrentvalueStr, ValueTag)
  161.         ret.Rows(0).SetField(BackgroundColorStr, BackgroundColor.ToArgb)
  162.         ret.Rows(0).SetField(ForegroundColorStr, ForegroundColor.ToArgb)
  163.         ret.Rows(0).SetField("TakeParentColors", TakeParentColors)
  164.         ret.Rows(0).SetField(DisplaymodeStr, CInt(DisplayMode))
  165.         ret.Rows(0).SetField(ArcColorStr, ArcColor.ToArgb())
  166.         ret.Rows(0).SetField(TextValueStr, TextValue)
  167.         ret.Rows(0).SetField(TextFontStr, If(TextFont Is Nothing, "Arial", TextFont.Name))
  168.         ret.Rows(0).SetField(TextColorStr, TextColor.toArgb)
  169.         Return (ret)
  170.     End Function
  171.     'creates an instance of display object given what we're saving
  172.     Public Shared Shadows Function Create(values As DataTable) As DisplayObject
  173.         Dim ret As DataservProgressCircle = New DataservProgressCircle()
  174.         For Each c As DataColumn In values.Columns
  175.             Try
  176.                 Select Case c.ColumnName
  177.                     Case NameStr
  178.                         ret.Name = values.Rows(0).Item(c.ColumnName)
  179.                     Case ParentStr
  180.                         ret.ParentDisplayObject = ControlHandler.GetInstance().GetDisplayObject(values.Rows(0).Item(c.ColumnName))
  181.                     Case XStr
  182.                         ret.Location = New Point(values.Rows(0).Item(c.ColumnName), ret.Location.Y)
  183.                     Case YStr
  184.                         ret.Location = New Point(ret.Location.X, values.Rows(0).Item(c.ColumnName))
  185.                     Case ZOrderStr
  186.                         ret.ZOrder = values.Rows(0).Item(c.ColumnName)
  187.                     Case WidthStr
  188.                         ret.Width = values.Rows(0).Item(c.ColumnName)
  189.                     Case HeightStr
  190.                         ret.Height = values.Rows(0).Item(c.ColumnName)
  191.                     Case InFrontStr
  192.                         ret.InFront = values.Rows(0).Item(c.ColumnName)
  193.                     Case ArcColorStr
  194.                         ret.ArcColor = Color.FromArgb(values.Rows(0).Item(c.ColumnName))
  195.                     Case DisplaymodeStr
  196.                         ret.DisplayMode = CInt(values.Rows(0).Item(c.ColumnName))
  197.                     Case TagforTagmaxvalueStr
  198.                         ret.MaxTag = values.Rows(0).Item(c.ColumnName)
  199.                     Case TagforTagminvalueStr
  200.                         ret.MinTag = values.Rows(0).Item(c.ColumnName)
  201.                     Case TagforTagcurrentvalueStr
  202.                         ret.ValueTag = values.Rows(0).Item(c.ColumnName)
  203.                     Case BorderStyleStr
  204.                         ret.DisplayBorderStyle = CInt(values.Rows(0).Item(c.ColumnName))
  205.                     Case BackgroundColorStr
  206.                         ret.BackgroundColor = Color.FromArgb(values.Rows(0).Item(c.ColumnName))
  207.                     Case ForegroundColorStr
  208.                         ret.ForegroundColor = Color.FromArgb(values.Rows(0).Item(c.ColumnName))
  209.                     Case TextValueStr
  210.                         ret.TextValue = values.Rows(0).Item(c.ColumnName)
  211.                     Case TextFontStr
  212.                         ret.TextFont = New Font(CType(values.Rows(0).Item(c.ColumnName), String), FontStyle.Regular)
  213.                         ProgressCircle.TextFont = ret.TextFont
  214.                     Case TextColorStr
  215.                         ret.TextColor = Color.FromArgb(values.Rows(0).Item(c.ColumnName))
  216.                 End Select
  217.             Catch ex As Exception
  218.             End Try
  219.         Next
  220.         Return (ret)
  221.     End Function
  222.  
  223.     'What do we need to know to create an instance of this
  224.     Public Shared Shadows Function CreationFields() As DataTable
  225.         Dim ret As DataTable = New DataTable("DisplayObject")
  226.         ret.Columns.Add("controltype")
  227.         ret.Columns.Add(NameStr)
  228.         ret.Columns.Add(ParentStr)
  229.         ret.Columns.Add(XStr)
  230.         ret.Columns.Add(YStr)
  231.         ret.Columns.Add(ZOrderStr)
  232.         ret.Columns.Add(WidthStr)
  233.         ret.Columns.Add(HeightStr)
  234.         ret.Columns.Add(InFrontStr)
  235.         ret.Columns.Add(BorderStyleStr)
  236.         ret.Columns.Add(BackgroundColorStr)
  237.         ret.Columns.Add(ForegroundColorStr)
  238.         ret.Columns.Add("TakeParentColors")
  239.         ret.Columns.Add(TagforTagmaxvalueStr)
  240.         ret.Columns.Add(TagforTagminvalueStr)
  241.         ret.Columns.Add(TagforTagcurrentvalueStr)
  242.         ret.Columns.Add(DisplaymodeStr)
  243.         ret.Columns.Add(ArcColorStr)
  244.         ret.Columns.Add(TextValueStr)
  245.         ret.Columns.Add(TextFontStr)
  246.         ret.Columns.Add(TextColorStr)
  247.         ret.Rows.Add("DataservProgressCircle", "shouldhavethis", "needthistoo", 1, 1, 0, 300, 300, True, CInt(BorderStyle.FixedSingle), DefaultBackColor.ToArgb(),
  248.                      Color.Black.ToArgb(), False, "100", "0", "50", 1, Color.Blue.ToArgb(), "Progress", "Arial", - 1)
  249.         Return ret
  250.     End Function
  251.  
  252.     Private Sub UpdateOnClientRectangleChange() Handles DisplayPanel.ClientSizeChanged
  253.         UpdateDisplay()
  254.     End Sub
  255.  
  256.     Public WithEvents DisplayStyle As ToolStripMenuItem
  257.     Public WithEvents Percentage As ToolStripMenuItem
  258.     Public WithEvents Fraction As ToolStripMenuItem
  259.     Public WithEvents Raw As ToolStripMenuItem
  260.     Public WithEvents Arc As ToolStripMenuItem
  261.     Public WithEvents ColorMenu As ToolStripMenuItem
  262.     Public WithEvents FontMenu As ToolStripMenuItem
  263.     Public WithEvents TextChange As ToolStripMenuItem
  264.  
  265.     Protected Overrides Sub SetupContextMenu()
  266.         MyBase.SetupContextMenu()
  267.         DisplayStyle = New ToolStripMenuItem("Display Style")
  268.         TextChange = New ToolStripMenuItem("Change Text")
  269.         Percentage = new ToolStripMenuItem("Percentage")
  270.         Fraction = new ToolStripMenuItem("Fraction")
  271.         Raw = new ToolStripMenuItem("Raw")
  272.         Arc = new ToolStripMenuItem("Arc Fill Color")
  273.         ColorMenu = new ToolStripMenuItem("Text Color")
  274.         FontMenu = new ToolStripMenuItem("Text Font")
  275.         DisplayStyle = new ToolStripMenuItem("Display Style")
  276.         DisplayStyle.DropDownItems.AddRange({Percentage, Fraction, Raw})
  277.         AddHandler Percentage.Click, AddressOf DisplayStyleChanged
  278.         AddHandler Fraction.Click, AddressOf DisplayStyleChanged
  279.         AddHandler Raw.Click, AddressOf DisplayStyleChanged
  280.         AddHandler Arc.Click, AddressOf ArcColorChanged
  281.         AddHandler ColorMenu.Click, AddressOf TextColorChanged
  282.         AddHandler FontMenu.Click, AddressOf FontChangedEvent
  283.         AddHandler TextChange.Click, AddressOf ChangeText
  284.         mnuContext.Items.Add(Arc)
  285.         mnuContext.Items.Add(TextChange)
  286.         mnuContext.Items.Add(DisplayStyle)
  287.         mnuContext.Items.Add(ColorMenu)
  288.         mnuContext.Items.Add(FontMenu)
  289.         RemoveHandler mnuTagPickerToolStripMenuItem.Click, AddressOf mnuTagPickerToolStripMenuItem_Clicked
  290.     End Sub
  291.  
  292.     Private Sub FontChangedEvent(sender As Object, e As EventArgs)
  293.         dlgFont.Font = TextFont
  294.         Dim result As DialogResult = dlgFont.ShowDialog()
  295.         If result = DialogResult.OK Then
  296.             TextFont = dlgFont.Font
  297.             ProgressCircle.TextFont = dlgFont.Font
  298.         End If
  299.     End Sub
  300.  
  301.     Private Sub ChangeText
  302.         Dim str as String = InputBox("Enter new text")
  303.         If str is Nothing then return
  304.         TextValue = str
  305.     End Sub
  306.  
  307.     Private Sub ArcColorChanged()
  308.         Dim cd As New ColorDialog
  309.         cd.Color = ArcColor
  310.         Dim result As DialogResult = cd.ShowDialog()
  311.         If result = DialogResult.OK Then
  312.             ArcColor = cd.Color
  313.             UpdateDisplay()
  314.         End If
  315.     End Sub
  316.  
  317.     Private Sub TextColorChanged()
  318.         Dim cd As New ColorDialog
  319.         cd.Color = TextColor
  320.         Dim result As DialogResult = cd.ShowDialog()
  321.         If result = DialogResult.OK Then
  322.             TextColor = cd.Color
  323.             UpdateDisplay()
  324.         End If
  325.     End Sub
  326.  
  327.     Private Sub DisplayStyleChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
  328.         If sender.Equals(Percentage) then
  329.             DisplayMode = ProgressCircleDisplayMode.Percent
  330.         Else If sender.Equals(Fraction) then
  331.             DisplayMode = ProgressCircleDisplayMode.Fraction
  332.         Else If sender.Equals(Raw) then
  333.             DisplayMode = ProgressCircleDisplayMode.RawValue
  334.         End If
  335.         UpdateDisplay()
  336.     End Sub
  337.  
  338.     Protected Overrides Sub mnuTagPickerToolStripMenuItem_Clicked(sender As Object, e As System.EventArgs) Handles mnuTagPickerToolStripMenuItem.Click
  339.         Dim result As DialogResult = FormHandler.getInstance.TagPickerForm.DisplayDialog(Me, frmTagPicker.FormMode.Specific)
  340.         If result = DialogResult.OK Then
  341.             Me.UpdateTagFields(FormHandler.getInstance.TagPickerForm.SpecificsResult)
  342.         End If
  343.     End Sub
  344. End Class
  345.  
  346.  
  347. Public Enum ProgressCircleDisplayMode
  348.     Percent = 1
  349.     Fraction = 2
  350.     RawValue = 3
  351. End Enum
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement