]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Initial revision
authorBarry Warsaw <barry@python.org>
Thu, 12 Feb 1998 19:51:57 +0000 (19:51 +0000)
committerBarry Warsaw <barry@python.org>
Thu, 12 Feb 1998 19:51:57 +0000 (19:51 +0000)
Tools/pynche/StripViewer.py [new file with mode: 0644]

diff --git a/Tools/pynche/StripViewer.py b/Tools/pynche/StripViewer.py
new file mode 100644 (file)
index 0000000..be8bb34
--- /dev/null
@@ -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
+
+
+\f
+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