summaryrefslogtreecommitdiff
path: root/Tools/pynche/TextViewer.py
blob: 9fdab078250f7ec0dba56f0eae6c4d25e989d750 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import sys
from Tkinter import *
from pynche import __version__
import ColorDB

class TextViewer:
    def __init__(self, switchboard, parent=None):
        self.__sb = switchboard
        root = self.__root = Toplevel(parent, class_='Pynche')
        root.protocol('WM_DELETE_WINDOW', self.__withdraw)
        root.title('Pynche %s' % __version__)
        root.iconname('Pynche Text Window')
        root.bind('<Alt-q>', self.__quit)
        root.bind('<Alt-Q>', self.__quit)
        #
        # create the text widget
        #
        self.__text = Text(root, relief=SUNKEN,
                           background='black',
                           foreground='white',
                           width=35, height=15)
        self.__text.pack()
        self.__text.insert(0.0, '''\
Insert some stuff here and play
with the buttons below to see
how the colors interact in
textual displays.''')
        #
        # variables
        self.__trackp = BooleanVar()
        self.__trackp.set(0)
        self.__which = IntVar()
        self.__which.set(4)
        #
        # track toggle
        self.__t = Checkbutton(root, text='Track color changes',
                               variable=self.__trackp,
                               relief=GROOVE)
        self.__t.pack(fill=X, expand=YES)
        frame = self.__frame = Frame(root)
        frame.pack()
        #
        # labels
        self.__labels = []
        row = 2
        for text in ('Text:', 'Selection:', 'Insertion:'):
            l = Label(frame, text=text)
            l.grid(row=row, column=0, sticky=E)
            self.__labels.append(l)
            row = row + 1
        col = 1
        for text in ('Foreground', 'Background'):
            l = Label(frame, text=text)
            l.grid(row=1, column=col)
            self.__labels.append(l)
            col = col + 1
        #
        # radios
        self.__radios = []
        val = 0
        for col in (1, 2):
            for row in (2, 3, 4):
                # there is no insertforeground option
                if row==4 and col==1:
                    continue
                r = Radiobutton(frame, variable=self.__which,
                                value=(row-2)*2 + col-1)
                r.grid(row=row, column=col)
                self.__radios.append(r)

    def __quit(self, event=None):
        sys.exit(0)

    def __withdraw(self, event=None):
        self.__root.withdraw()

    def deiconify(self, event=None):
        self.__root.deiconify()

    def __forceupdate(self, event=None):
        self.__sb.update_views_current()

    def update_yourself(self, red, green, blue):
        colorname = ColorDB.triplet_to_rrggbb((red, green, blue))
        which = self.__which.get()
        if which == 0:
            self.__text.configure(foreground=colorname)
        elif which == 1:
            self.__text.configure(background=colorname)
        elif which == 2:
            self.__text.configure(selectforeground=colorname)
        elif which == 3:
            self.__text.configure(selectbackground=colorname)
        elif which == 5:
            self.__text.configure(insertbackground=colorname)