summaryrefslogtreecommitdiffstats
path: root/Tools/pynche/StripViewer.py
diff options
context:
space:
mode:
authorBarry Warsaw <barry@python.org>1998-02-12 19:51:57 (GMT)
committerBarry Warsaw <barry@python.org>1998-02-12 19:51:57 (GMT)
commit9d882bc4de6c8f1e857f352787cfab95ff223b15 (patch)
treecdf7e5de2daf9d3abc51a55700cdfd5ffdc98473 /Tools/pynche/StripViewer.py
parentf64b4054af02d65c3ca00916cd064902d6cc6ea9 (diff)
downloadcpython-9d882bc4de6c8f1e857f352787cfab95ff223b15.zip
cpython-9d882bc4de6c8f1e857f352787cfab95ff223b15.tar.gz
cpython-9d882bc4de6c8f1e857f352787cfab95ff223b15.tar.bz2
Initial revision
Diffstat (limited to 'Tools/pynche/StripViewer.py')
-rw-r--r--Tools/pynche/StripViewer.py135
1 files changed, 135 insertions, 0 deletions
diff --git a/Tools/pynche/StripViewer.py b/Tools/pynche/StripViewer.py
new file mode 100644
index 0000000..be8bb34
--- /dev/null
+++ b/Tools/pynche/StripViewer.py
@@ -0,0 +1,135 @@
+from Tkinter import *
+import Pmw
+import ColorDB
+
+class LeftArrow:
+ _ARROWWIDTH = 30
+ _ARROWHEIGHT = 15
+ _YOFFSET = 13
+ _TEXTYOFFSET = 1
+ _TAG = ('leftarrow',)
+
+ def __init__(self, canvas, x):
+ self._canvas = canvas
+ self.__arrow, self.__text = self._create(x)
+ self.move_to(x)
+
+ def _create(self, x):
+ arrow = self._canvas.create_line(
+ x, self._ARROWHEIGHT + self._YOFFSET,
+ x, self._YOFFSET,
+ x + self._ARROWWIDTH, self._YOFFSET,
+ arrow='first',
+ width=3.0,
+ tags=self._TAG)
+ text = self._canvas.create_text(
+ x + self._ARROWWIDTH + 13,
+ self._ARROWHEIGHT - self._TEXTYOFFSET,
+ text='128')
+ return arrow, text
+
+ def _x(self):
+ coords = self._canvas.coords(self._TAG)
+ assert coords
+ return coords[0]
+
+ def move_to(self, x):
+ deltax = x - self._x()
+ self._canvas.move(self._TAG, deltax, 0)
+
+
+class RightArrow(LeftArrow):
+ _TAG = ('rightarrow',)
+
+ def _create(self, x):
+ arrow = self._canvas.create_line(
+ x, self._YOFFSET,
+ x + self._ARROWWIDTH, self._YOFFSET,
+ x + self._ARROWWIDTH, self._ARROWHEIGHT + self._YOFFSET,
+ arrow='last',
+ width=3.0,
+ tags=self._TAG)
+ text = self._canvas.create_text(
+ x - self._ARROWWIDTH - 20, # TBD: kludge
+ self._ARROWHEIGHT - self._TEXTYOFFSET,
+ text='128')
+ return arrow, text
+
+ def _x(self):
+ coords = self._canvas.bbox(self._TAG)
+ assert coords
+ return coords[2] - 6 # TBD: kludge
+
+
+
+class StripWidget(Pmw.MegaWidget):
+ _CHIPHEIGHT = 50
+ _CHIPWIDTH = 10
+ _NUMCHIPS = 40
+
+ def __init__(self, parent=None, **kw):
+ options = (('color', (128, 128, 128), self.__set_color),
+ ('delegate', None, None),
+ ('chipwidth', self._CHIPWIDTH, Pmw.INITOPT),
+ ('chipheight', self._CHIPHEIGHT, Pmw.INITOPT),
+ ('numchips', self._NUMCHIPS, Pmw.INITOPT),
+ ('generator', None, Pmw.INITOPT),
+ )
+ self.defineoptions(kw, options)
+
+ Pmw.MegaWidget.__init__(self, parent)
+ interiorarg = (self.interior(),)
+
+ # group component contains a convas containing a bunch of objects
+ # (moveable arrow + text label, relief'd rectangle color chips)
+ chipwidth = self.__chipwidth = self['chipwidth']
+ chipheight = self.__chipheight = self['chipheight']
+ numchips = self.__numchips = self['numchips']
+
+ canvaswidth = numchips * (chipwidth + 1)
+ canvasheight = chipheight + 35
+
+ self.__canvas = Canvas(
+ parent,
+ width=canvaswidth,
+ height=canvasheight)
+ self.__canvas.pack()
+
+ # create the color strip
+ chips = self.__chips = []
+ x = 1
+ y = 30
+ for c in range(self.__numchips):
+ rect = self.__canvas.create_rectangle(
+ x, y, x+chipwidth, y+chipheight,
+ fill='grey', outline='grey')
+
+ x = x + chipwidth + 1 # for outline
+ chips.append(rect)
+
+ # create the arrow and text item
+ chipx = self.__arrow_x(0)
+ self.__leftarrow = LeftArrow(self.__canvas, chipx)
+
+ chipx = self.__arrow_x(len(chips) - 1)
+ self.__rightarrow = RightArrow(self.__canvas, chipx)
+
+ self.__generator = self['generator']
+ self.initialiseoptions(StripWidget)
+
+ def __set_color(self):
+ rgbtuple = self['color']
+ if self.__generator:
+ i = 0
+ for t in self.__generator(self.__numchips, rgbtuple):
+ rrggbb = ColorDB.triplet_to_rrggbb(t)
+ self.__canvas.itemconfigure(self.__chips[i],
+ fill=rrggbb,
+ outline=rrggbb)
+ i = i + 1
+
+ def __arrow_x(self, chipnum):
+ coords = self.__canvas.coords(self.__chips[chipnum])
+ assert coords
+ x0, y0, x1, y1 = coords
+ return (x1 + x0) / 2.0