190 lines
6.8 KiB
Python
190 lines
6.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
#
|
|
# Copyright (C) 2000-2005 by Yasushi Saito (yasushi.saito@gmail.com)
|
|
#
|
|
# Jockey is free software; you can redistribute it and/or modify it
|
|
# under the terms of the GNU General Public License as published by the
|
|
# Free Software Foundation; either version 2, or (at your option) any
|
|
# later version.
|
|
#
|
|
# Jockey is distributed in the hope that it will be useful, but WITHOUT
|
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
# for more details.
|
|
#
|
|
import color
|
|
import line_style
|
|
import fill_style
|
|
import chart_object
|
|
import object_set
|
|
import pychart_util
|
|
import tick_mark_doc
|
|
from pychart_types import *
|
|
|
|
_keys = {
|
|
"line_style": (line_style.T, line_style.default, "The line style of the tick mark."),
|
|
"fill_style": (fill_style.T, fill_style.white, "The fill style."),
|
|
"size": (UnitType, 5, "Size of the tick mark."),
|
|
}
|
|
|
|
class T(chart_object.T):
|
|
__doc__ = tick_mark_doc.doc
|
|
keys = _keys
|
|
##AUTOMATICALLY GENERATED
|
|
|
|
##END AUTOMATICALLY GENERATED
|
|
|
|
def predraw_check(self):
|
|
if not hasattr(self, "type_checked"):
|
|
self.type_check()
|
|
self.type_checked = 1
|
|
|
|
class Circle(T):
|
|
"""Draws a circle. """
|
|
def draw(self, can, x, y):
|
|
self.predraw_check()
|
|
can.ellipsis(self.line_style, self.fill_style, x, y,
|
|
self.size/2.0, 1)
|
|
|
|
class Square(T):
|
|
"""Draws a square."""
|
|
def draw(self, can, x, y):
|
|
self.predraw_check()
|
|
# move to the bottom-left corner
|
|
x = x - self.size/2.0
|
|
y = y - self.size/2.0
|
|
can.rectangle(self.line_style, self.fill_style,
|
|
x, y, x+self.size, y+self.size)
|
|
|
|
class Triangle(T):
|
|
"""Draws a triangle pointing up."""
|
|
def draw(self, can, x, y):
|
|
self.predraw_check()
|
|
can.polygon(self.line_style, self.fill_style,
|
|
((x-self.size/1.6, y-self.size/2.0),
|
|
(x+self.size/1.6, y-self.size/2.0),
|
|
(x, y+self.size/2.0)))
|
|
class DownTriangle(T):
|
|
"""Draws a triangle pointing down."""
|
|
def draw(self, can, x, y):
|
|
self.predraw_check()
|
|
can.polygon(self.line_style, self.fill_style,
|
|
((x, y-self.size/2.0),
|
|
(x-self.size/1.6, y+self.size/2.0),
|
|
(x+self.size/1.6, y+self.size/2.0)))
|
|
|
|
|
|
class X(T):
|
|
"""Draw a "X"-shaped tick mark. Attribute "fill-style" is ignored."""
|
|
keys = pychart_util.union_dict(T.keys,
|
|
{"line_style": (line_style.T,
|
|
line_style.T(width=0.7),
|
|
"The line style of the tick mark")})
|
|
def draw(self, can, x, y):
|
|
self.predraw_check()
|
|
# move to the bottom-left corner
|
|
x = x - self.size/2.0
|
|
y = y - self.size/2.0
|
|
can.line(self.line_style, x, y, x+self.size, y+self.size)
|
|
can.line(self.line_style, x+self.size, y, x, y+self.size)
|
|
|
|
class Plus(T):
|
|
"""Draw a "+"-shaped tick mark. Attribute "fill-style" is ignored."""
|
|
keys = pychart_util.union_dict(T.keys,
|
|
{"line_style": (line_style.T,
|
|
line_style.T(width=1),
|
|
"The line style of the tick mark.")})
|
|
def draw(self, can, x, y):
|
|
self.predraw_check()
|
|
# move to the bottom-left corner
|
|
can.line(self.line_style, x-self.size/1.4, y, x+self.size/1.4, y)
|
|
can.line(self.line_style, x, y-self.size/1.4, x, y+self.size/1.4)
|
|
|
|
class Diamond(T):
|
|
"""Draw a square rotated at 45 degrees."""
|
|
def draw(self, can, x, y):
|
|
self.predraw_check()
|
|
# move to the bottom-left corner
|
|
can.polygon(self.line_style, self.fill_style,
|
|
((x-self.size/1.4, y), (x, y+self.size/1.4),
|
|
(x+self.size/1.4, y), (x, y-self.size/1.4)))
|
|
|
|
class Star(T):
|
|
"""Draw a "*". Attribute "fill-style" is ignored."""
|
|
keys = pychart_util.union_dict(T.keys,
|
|
{"line_style": (line_style.T,
|
|
line_style.T(width=1),
|
|
"The line style of the tick mark.")})
|
|
def draw(self, can, x, y):
|
|
self.predraw_check()
|
|
# move to the bottom-left corner
|
|
midx = x
|
|
midy = y
|
|
d_len = self.size / 2.0
|
|
r_len = self.size * 1.414 / 2.0
|
|
can.line(self.line_style, x-d_len, y-d_len, x+d_len, y+d_len)
|
|
can.line(self.line_style, x+d_len, y-d_len, x-d_len, y+d_len)
|
|
can.line(self.line_style, midx, y-r_len, midx, y+r_len)
|
|
can.line(self.line_style, x-r_len, midy, x+r_len, midy)
|
|
|
|
class Null(T):
|
|
"""This tickmark doesn't draw anything. All the attributes are ignored."""
|
|
def __init__ (self):
|
|
self.line_style = None
|
|
self.fill_style = None
|
|
self.size = -1
|
|
def draw(self, can, x, y):
|
|
pass
|
|
|
|
standards = object_set.T()
|
|
def _intern(style):
|
|
standards.add(style)
|
|
return style
|
|
|
|
square = _intern(Square())
|
|
square3 = _intern(Square(size=3))
|
|
square5 = square
|
|
x = _intern(X())
|
|
x3 = _intern(X(size=3))
|
|
x5 = x
|
|
star = _intern(Star())
|
|
star3 = _intern(Star(size=3))
|
|
star5 = star
|
|
plus = _intern(Plus())
|
|
plus3 = _intern(Plus(size=3))
|
|
plus5 = plus
|
|
dia = _intern(Diamond())
|
|
dia3 = _intern(Diamond(size=3))
|
|
dia5 = dia
|
|
tri = _intern(Triangle())
|
|
tri3 = _intern(Triangle(size=3))
|
|
tri5 = tri
|
|
dtri = _intern(DownTriangle())
|
|
dtri3 = _intern(DownTriangle(size=3))
|
|
dtri5 = dtri
|
|
circle1 = _intern(Circle(size=1))
|
|
circle2 = _intern(Circle(size=3))
|
|
circle3 = _intern(Circle(size=5))
|
|
blacksquare = _intern(Square(fill_style=fill_style.black))
|
|
blacksquare3 = _intern(Square(size=3, fill_style=fill_style.black))
|
|
blackdia = _intern(Diamond(fill_style=fill_style.black))
|
|
blackdia3 = _intern(Diamond(size=3, fill_style=fill_style.black))
|
|
blacktri = _intern(Triangle(fill_style=fill_style.black))
|
|
blacktri3 = _intern(Triangle(size=3, fill_style=fill_style.black))
|
|
blackdtri = _intern(DownTriangle(fill_style=fill_style.black))
|
|
blackdtri3 = _intern(DownTriangle(size=3, fill_style=fill_style.black))
|
|
blackcircle1 = _intern(Circle(size=1, fill_style=fill_style.black))
|
|
blackcircle3 = _intern(Circle(size=3, fill_style=fill_style.black))
|
|
gray70square = _intern(Square(fill_style=fill_style.gray70))
|
|
gray70square3 = _intern(Square(size=3, fill_style=fill_style.gray70))
|
|
gray70dia = _intern(Diamond(fill_style=fill_style.gray70))
|
|
gray70dia3 = _intern(Diamond(size=3, fill_style=fill_style.gray70))
|
|
gray70tri = _intern(Triangle(fill_style=fill_style.gray70))
|
|
gray70tri3 = _intern(Triangle(size=3, fill_style=fill_style.gray70))
|
|
gray70dtri = _intern(DownTriangle(fill_style=fill_style.gray70))
|
|
gray70dtri3 = _intern(DownTriangle(size=3, fill_style=fill_style.gray70))
|
|
gray70circle1 = _intern(Circle(size=1, fill_style=fill_style.gray70))
|
|
gray70circle3 = _intern(Circle(size=3, fill_style=fill_style.gray70))
|
|
default = _intern(Null())
|
|
|