File: OptionTypes.py

package info (click to toggle)
spe 0.8.2a%2Brepack-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 4,812 kB
  • ctags: 6,555
  • sloc: python: 45,491; makefile: 146; sh: 2
file content (117 lines) | stat: -rwxr-xr-x 3,423 bytes parent folder | download | duplicates (2)
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import Tkinter

def bool(value):
    if value:
        return 1
    return 0

class Base:
    "Base class for all OptionTypes"
    
    def __init__(self, name, default):
        self._name = name
        self._default = default
        self._var = None

    def name(self):
        return self._name

    def set(self, value):
        self._var.set(value)

class Boolean(Base):
    "A option type for editing boolean values"

    def __init__(self, name, default):
        Base.__init__(self, name, default)

    def field(self, w):
        self._var = Tkinter.BooleanVar()
        if self._default:
            self._var.set(1)
        else:
            self._var.set(0)
        frame = Tkinter.Frame(w, name = self._name + "Frame")
        result = Tkinter.Checkbutton(frame,
                                     name=self._name,
                                     text=self._name,
                                     variable=self._var)
        result.grid(sticky=Tkinter.W)
        frame.columnconfigure(0, weight=1)
        return frame

    def arg(self):
        if bool(self._var.get()) != bool(self._default):
            if bool(self._var.get()):
                return "--" + self._name
            return "--no-" + self._name
        return None

class Number(Base):
    "OptionType for editing numbers"

    def __init__(self, name, default):
        Base.__init__(self, name, default)

    def field(self, w):
        self._var = Tkinter.IntVar()
        self._var.set(self._default)
        frame = Tkinter.Frame(w, name = self._name + "Frame")
        label = Tkinter.Label(frame, text=self._name + ":")
        label.grid(row=0, col=0, sticky=Tkinter.W)
        entry = Tkinter.Entry(frame,
                              name=self._name,
                              textvariable=self._var,
                              width=4)
        entry.grid(row=0, col=1, sticky=Tkinter.E)
        for i in range(2):
            frame.columnconfigure(i, weight=1)
        return frame

    def arg(self):
        if self._var.get() != self._default:
            return "--%s=%d" % (self._name, self._var.get())
        return None
    
class Text(Base):
    "OptionType for editing a little bit of text"

    def __init__(self, name, default):
        Base.__init__(self, name, default)

    def width(self):
        return int(min(15, len(self._default) * 1.20))

    def field(self, w):
        self._var = Tkinter.StringVar()
        self._var.set(self._default)
        frame = Tkinter.Frame(w, name = self._name + "Frame")
        label = Tkinter.Label(frame, text=self._name + ":")
        label.grid(row=0, col=0, sticky=Tkinter.W)
        entry = Tkinter.Entry(frame,
                              name=self._name,
                              textvariable=self._var,
                              width=self.width())
        entry.grid(row=0, col=1, sticky=Tkinter.E)
        for i in range(2):
            frame.columnconfigure(i, weight=1)
        return frame

    def arg(self):
        if self._var.get() != self._default:
            return "--%s=%s" % (self._name, self._var.get())
        return None
    
def join(list):
    import string
    return string.join(list, ", ")

class List(Text):
    "OptionType for editing a list of values"

    def __init__(self, name, default):
        Text.__init__(self, name, join(default))

    def set(self, value):
        self._var.set(join(value))