Circular State indicator

I programmed a paintable canvas to do this. Didn’t have time to do an arrow. Here you go:

Paste this code into a paintable canvas repaint script and then setup the custom properties to match.

from java.awt import Color
from java.awt import BasicStroke
from java.awt.geom import Rectangle2D
import math

g = event.graphics

armAngle = event.source.armAngle
circleStartAngle = event.source.boundaryStartAngle
circleArcSize = event.source.boundaryArcSize
rotation = event.source.rotationAdjustment
clockwise = event.source.degreesDirectionCW
diameter = min([event.width,event.height])
dx = event.width - diameter
dy = event.height - diameter
area = Rectangle2D.Float(0+dx/2.,0+dy/2.,diameter,diameter)

if clockwise:
	c1_startAngle = -(circleStartAngle + rotation)
	c1_arcAngle = -(armAngle-circleStartAngle)
	c2_startAngle = -circleStartAngle-(armAngle-circleStartAngle)-rotation
	c2_arcAngle = -(circleArcSize-(armAngle-circleStartAngle))
	theta = -circleStartAngle-(armAngle-circleStartAngle)-rotation

else:
	c1_startAngle = circleStartAngle + rotation
	c1_arcAngle = armAngle-circleStartAngle
	c2_startAngle = circleStartAngle+armAngle-circleStartAngle + rotation
	c2_arcAngle = circleArcSize-(armAngle-circleStartAngle)
	theta = circleStartAngle+armAngle-circleStartAngle + rotation

# Draw Arcs
g.setColor(event.source.primaryColor)
g.fillArc(int(area.x), int(area.y), int(area.width), int(area.height), int(c1_startAngle), int(c1_arcAngle))
g.setColor(event.source.secondaryColor)
g.fillArc(int(area.x), int(area.y), int(area.width), int(area.height), int(c2_startAngle), int(c2_arcAngle))

# Draw Arm
centerX = event.width/2.
centerY = event.height/2.
x = centerX + diameter/2. * math.cos(-theta * math.pi / 180.0)
y = centerY + diameter/2. * math.sin(-theta * math.pi / 180.0)
g.setStroke(BasicStroke(diameter*0.01,BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER))
g.setColor(event.source.armColor)
g.drawLine(int(centerX),int(centerY), int(x), int(y))

Custom Properties:
image