1
#----------------------------------------------------------------------
3
# Purpose: Classes defining and implementing the design time
4
# behaviour of controls
6
# Author: Riaan Booysen
9
# RCS-ID: $Id: Companions.py,v 1.26 2004/08/16 13:16:56 riaan Exp $
10
# Copyright: (c) 1999 - 2004 Riaan Booysen
12
#----------------------------------------------------------------------
14
""" Classes defining and implementing the design time behaviour of controls """
16
from wxPython.wx import *
18
from wxPython.lib.anchors import LayoutAnchors
20
from PropEdit import PropertyEditors
21
from PropEdit.Enumerations import *
22
from BaseCompanions import HelperDTC
23
import PaletteStore, RTTI
25
#---Helpers---------------------------------------------------------------------
27
class FontDTC(HelperDTC):
28
def __init__(self, name, designer, cmpn, obj, ownerPW):
29
HelperDTC.__init__(self, name, designer, cmpn, obj, ownerPW)
30
self.editors = {'FaceName' : PropertyEditors.EnumPropEdit,
31
'Family' : PropertyEditors.EnumPropEdit,
32
'Style' : PropertyEditors.EnumPropEdit,
33
'Weight' : PropertyEditors.EnumPropEdit,
34
'Underlined': PropertyEditors.BoolPropEdit,}
36
fontEnum = wxFontEnumerator()
37
fontEnum.EnumerateFacenames()
38
fontNameList = fontEnum.GetFacenames()
40
fontFaceNameNames = {}
41
for fnt in fontNameList:
42
fontFaceName.append(fnt)
43
fontFaceNameNames[fnt] = fnt
46
self.options = {'FaceName' : fontFaceName,
47
'Family' : fontFamily,
49
'Weight' : fontWeight,}
50
self.names = {'FaceName' : fontFaceNameNames,
51
'Family' : fontFamilyNames,
52
'Style' : fontStyleNames,
53
'Weight' : fontWeightNames,}
55
def hideDesignTime(self):
56
return HelperDTC.hideDesignTime(self) + ['Encoding', 'NativeFontInfo',
57
'NativeFontInfoUserDesc', 'NoAntiAliasing']
59
class ColourDTC(HelperDTC):
60
def __init__(self, name, designer, cmpn, obj, ownerPW):
61
HelperDTC.__init__(self, name, designer, cmpn, obj, ownerPW)
62
self.editors = {'Red' : PropertyEditors.IntPropEdit,
63
'Green' : PropertyEditors.IntPropEdit,
64
'Blue' : PropertyEditors.IntPropEdit,}
66
return {'Red' : ('CompnRoute', self.GetRed, self.SetRed),
67
'Green': ('CompnRoute', self.GetGreen, self.SetGreen),
68
'Blue' : ('CompnRoute', self.GetBlue, self.SetBlue),}
70
def GetRed(self, cmpn):
72
def SetRed(self, value):
73
self.obj.Set(max(min(value, 255), 0), self.obj.Green(), self.obj.Blue())
75
def GetGreen(self, cmpn):
76
return self.obj.Green()
77
def SetGreen(self, value):
78
self.obj.Set(self.obj.Red(), max(min(value, 255), 0), self.obj.Blue())
80
def GetBlue(self, cmpn):
81
return self.obj.Blue()
82
def SetBlue(self, value):
83
self.obj.Set(self.obj.Red(), self.obj.Green(), max(min(value, 255), 0))
85
class PosDTC(HelperDTC):
86
def __init__(self, name, designer, cmpn, obj, ownerPW):
87
HelperDTC.__init__(self, name, designer, cmpn, obj, ownerPW)
88
self.editors = {'X' : PropertyEditors.IntPropEdit,
89
'Y' : PropertyEditors.IntPropEdit}
92
return {'X': ('CompnRoute', self.GetX, self.SetX),
93
'Y': ('CompnRoute', self.GetY, self.SetY)}
97
def SetX(self, value):
98
self.obj.Set(value, self.obj.y)
100
def GetY(self, comp):
102
def SetY(self, value):
103
self.obj.Set(self.obj.x, value)
105
class SizeDTC(HelperDTC): pass
107
class AnchorsDTC(HelperDTC):
108
def __init__(self, name, designer, cmpn, obj, ownerPW):
109
HelperDTC.__init__(self, name, designer, cmpn, obj, ownerPW)
110
self.editors = {'Left' : PropertyEditors.BoolPropEdit,
111
'Top' : PropertyEditors.BoolPropEdit,
112
'Right' : PropertyEditors.BoolPropEdit,
113
'Bottom' : PropertyEditors.BoolPropEdit}
114
self.anchCtrl = cmpn.control
116
self.GetLeftAnchor('')
117
self.GetTopAnchor('')
118
self.GetRightAnchor('')
119
self.GetBottomAnchor('')
121
def properties(self):
122
return {'Left' : ('CompnRoute', self.GetLeftAnchor, self.SetLeftAnchor),
123
'Top' : ('CompnRoute', self.GetTopAnchor, self.SetTopAnchor),
124
'Right' : ('CompnRoute', self.GetRightAnchor, self.SetRightAnchor),
125
'Bottom' : ('CompnRoute', self.GetBottomAnchor, self.SetBottomAnchor),}
127
## def getPropList(self):
128
## props = self.properties()
129
## keys = props.keys()
130
## keys.sort();keys.reverse()
133
## rType, getter, setter = props[key]
134
## pl.append(RTTI.PropertyWrapper(key, rType, getter, setter))
135
## return {'properties': pl}
137
def assureAnchors(self):
138
if not self.ownerCompn.anchorSettings:
139
self.ownerCompn.defaultAnchors()
141
def updateAnchors(self):
142
self.ownerCompn.anchorSettings = [self.left, self.top, self.right, self.bottom]
143
self.obj = LayoutAnchors(self.anchCtrl, self.left, self.top, self.right, self.bottom)
145
def GetLeftAnchor(self, name):
147
self.left = self.ownerCompn.anchorSettings[0]
149
def SetLeftAnchor(self, value):
154
def GetTopAnchor(self, name):
156
self.top = self.ownerCompn.anchorSettings[1]
158
def SetTopAnchor(self, value):
163
def GetRightAnchor(self, name):
165
self.right = self.ownerCompn.anchorSettings[2]
167
def SetRightAnchor(self, value):
172
def GetBottomAnchor(self, name):
174
self.bottom = self.ownerCompn.anchorSettings[3]
176
def SetBottomAnchor(self, value):
182
class BaseFlagsDTC(HelperDTC):
185
def __init__(self, name, designer, cmpn, obj, ownerPW):
186
HelperDTC.__init__(self, name, designer, cmpn, obj, ownerPW)
188
for flag in self.ownerCompn.windowStyles:
189
self.editors[flag] = PropertyEditors.BoolPropEdit
191
# XXX One of these 2 methods is redundant !
193
def properties(self):
195
prop = ('NameRoute', self.GetStyle, self.SetStyle)
196
for flag in self.ownerCompn.windowStyles:
200
def getPropList(self):
202
for prop in self.ownerCompn.windowStyles:
203
propLst.append(RTTI.PropertyWrapper(prop, 'NameRoute',
204
self.GetStyle, self.SetStyle))
205
return {'constructor':[], 'properties': propLst}
207
def GetStyle(self, name):
208
return name in self.ownerCompn.textConstr.params[self.paramName].split(' | ')
210
def SetStyle(self, name, value):
211
flags = self.ownerCompn.textConstr.params[self.paramName].split(' | ')
213
if name not in flags:
216
flags.insert(0, name)
222
flagsSrc = ' | '.join(flags)
223
self.ownerCompn.textConstr.params[self.paramName] = flagsSrc
224
self.designer.inspector.constructorUpdate(self.propName)
225
flagsVal = self.eval(flagsSrc)
226
ctrl = self.ownerCompn.control
227
if hasattr(ctrl, 'SetWindowStyleFlag'):
228
ctrl.SetWindowStyleFlag(flagsVal)
230
class WindowStyleDTC(BaseFlagsDTC):
234
class FlagsDTC(BaseFlagsDTC):
239
PaletteStore.helperClasses.update({
240
'wxFontPtr': FontDTC,
241
'wxColourPtr': ColourDTC,
242
'Anchors': AnchorsDTC
1
#----------------------------------------------------------------------
3
# Purpose: Classes defining and implementing the design time
4
# behaviour of controls
6
# Author: Riaan Booysen
9
# RCS-ID: $Id: Companions.py,v 1.30 2005/07/11 09:54:26 riaan Exp $
10
# Copyright: (c) 1999 - 2005 Riaan Booysen
12
#----------------------------------------------------------------------
14
""" Classes defining and implementing the design time behaviour of controls """
18
from wx.lib.anchors import LayoutAnchors
20
from PropEdit import PropertyEditors
21
from PropEdit.Enumerations import *
22
from BaseCompanions import HelperDTC
23
import PaletteStore, RTTI
25
#---Helpers---------------------------------------------------------------------
27
class FontDTC(HelperDTC):
28
def __init__(self, name, designer, cmpn, obj, ownerPW):
29
HelperDTC.__init__(self, name, designer, cmpn, obj, ownerPW)
30
self.editors = {'FaceName' : PropertyEditors.EnumPropEdit,
31
'Family' : PropertyEditors.EnumPropEdit,
32
'Style' : PropertyEditors.EnumPropEdit,
33
'Weight' : PropertyEditors.EnumPropEdit,
34
'Underlined': PropertyEditors.BoolPropEdit,}
36
fontEnum = wx.FontEnumerator()
37
fontEnum.EnumerateFacenames()
38
fontNameList = fontEnum.GetFacenames()
40
fontFaceNameNames = {}
41
for fnt in fontNameList:
42
fontFaceName.append(fnt)
43
fontFaceNameNames[fnt] = fnt
46
self.options = {'FaceName' : fontFaceName,
47
'Family' : fontFamily,
49
'Weight' : fontWeight,}
50
self.names = {'FaceName' : fontFaceNameNames,
51
'Family' : fontFamilyNames,
52
'Style' : fontStyleNames,
53
'Weight' : fontWeightNames,}
55
def hideDesignTime(self):
56
return HelperDTC.hideDesignTime(self) + ['Encoding', 'NativeFontInfo',
57
'NativeFontInfoUserDesc', 'NoAntiAliasing']
59
class ColourDTC(HelperDTC):
60
def __init__(self, name, designer, cmpn, obj, ownerPW):
61
HelperDTC.__init__(self, name, designer, cmpn, obj, ownerPW)
62
self.editors = {'Red' : PropertyEditors.IntPropEdit,
63
'Green' : PropertyEditors.IntPropEdit,
64
'Blue' : PropertyEditors.IntPropEdit,}
66
return {'Red' : ('CompnRoute', self.GetRed, self.SetRed),
67
'Green': ('CompnRoute', self.GetGreen, self.SetGreen),
68
'Blue' : ('CompnRoute', self.GetBlue, self.SetBlue),}
70
def GetRed(self, cmpn):
72
def SetRed(self, value):
73
self.obj.Set(max(min(value, 255), 0), self.obj.Green(), self.obj.Blue())
75
def GetGreen(self, cmpn):
76
return self.obj.Green()
77
def SetGreen(self, value):
78
self.obj.Set(self.obj.Red(), max(min(value, 255), 0), self.obj.Blue())
80
def GetBlue(self, cmpn):
81
return self.obj.Blue()
82
def SetBlue(self, value):
83
self.obj.Set(self.obj.Red(), self.obj.Green(), max(min(value, 255), 0))
85
class PosDTC(HelperDTC):
86
def __init__(self, name, designer, cmpn, obj, ownerPW):
87
HelperDTC.__init__(self, name, designer, cmpn, obj, ownerPW)
88
self.editors = {'X' : PropertyEditors.IntPropEdit,
89
'Y' : PropertyEditors.IntPropEdit}
92
return {'X': ('CompnRoute', self.GetX, self.SetX),
93
'Y': ('CompnRoute', self.GetY, self.SetY)}
97
def SetX(self, value):
98
self.obj.Set(value, self.obj.y)
100
def GetY(self, comp):
102
def SetY(self, value):
103
self.obj.Set(self.obj.x, value)
105
class SizeDTC(HelperDTC):
106
def __init__(self, name, designer, cmpn, obj, ownerPW):
107
HelperDTC.__init__(self, name, designer, cmpn, obj, ownerPW)
108
self.editors = {'Width' : PropertyEditors.IntPropEdit,
109
'Height' : PropertyEditors.IntPropEdit}
111
def properties(self):
112
return {'Width': ('CompnRoute', self.GetWidth, self.SetWidth),
113
'Height': ('CompnRoute', self.GetHeight, self.SetHeight)}
115
def GetWidth(self, comp):
116
return self.obj.width
117
def SetWidth(self, value):
118
self.obj.width = value
120
def GetHeight(self, comp):
121
return self.obj.height
122
def SetHeight(self, value):
123
self.obj.height = value
126
class AnchorsDTC(HelperDTC):
127
def __init__(self, name, designer, cmpn, obj, ownerPW):
128
HelperDTC.__init__(self, name, designer, cmpn, obj, ownerPW)
129
self.editors = {'Left' : PropertyEditors.BoolPropEdit,
130
'Top' : PropertyEditors.BoolPropEdit,
131
'Right' : PropertyEditors.BoolPropEdit,
132
'Bottom' : PropertyEditors.BoolPropEdit}
133
self.anchCtrl = cmpn.control
135
self.GetLeftAnchor('')
136
self.GetTopAnchor('')
137
self.GetRightAnchor('')
138
self.GetBottomAnchor('')
140
def properties(self):
141
return {'Left' : ('CompnRoute', self.GetLeftAnchor, self.SetLeftAnchor),
142
'Top' : ('CompnRoute', self.GetTopAnchor, self.SetTopAnchor),
143
'Right' : ('CompnRoute', self.GetRightAnchor, self.SetRightAnchor),
144
'Bottom' : ('CompnRoute', self.GetBottomAnchor, self.SetBottomAnchor),}
146
def assureAnchors(self):
147
if not self.ownerCompn.anchorSettings:
148
self.ownerCompn.defaultAnchors()
150
def updateAnchors(self):
151
self.ownerCompn.anchorSettings = [self.left, self.top, self.right, self.bottom]
152
self.obj = LayoutAnchors(self.anchCtrl, self.left, self.top, self.right, self.bottom)
154
def GetLeftAnchor(self, name):
156
self.left = self.ownerCompn.anchorSettings[0]
158
def SetLeftAnchor(self, value):
163
def GetTopAnchor(self, name):
165
self.top = self.ownerCompn.anchorSettings[1]
167
def SetTopAnchor(self, value):
172
def GetRightAnchor(self, name):
174
self.right = self.ownerCompn.anchorSettings[2]
176
def SetRightAnchor(self, value):
181
def GetBottomAnchor(self, name):
183
self.bottom = self.ownerCompn.anchorSettings[3]
185
def SetBottomAnchor(self, value):
191
class BaseFlagsDTC(HelperDTC):
194
def __init__(self, name, designer, cmpn, obj, ownerPW):
195
HelperDTC.__init__(self, name, designer, cmpn, obj, ownerPW)
197
for flag in self.ownerCompn.windowStyles:
198
self.editors[flag] = PropertyEditors.BoolPropEdit
200
def properties(self):
202
prop = ('NameRoute', self.GetStyle, self.SetStyle)
203
for flag in self.ownerCompn.windowStyles:
207
def GetStyle(self, name):
208
return name in self.ownerCompn.textConstr.params[self.paramName].split(' | ')
210
def SetStyle(self, name, value):
211
flags = self.ownerCompn.textConstr.params[self.paramName].split(' | ')
213
if name not in flags:
216
flags.insert(0, name)
222
flagsSrc = ' | '.join(flags)
223
self.ownerCompn.textConstr.params[self.paramName] = flagsSrc
224
self.designer.inspector.constructorUpdate(self.propName)
225
flagsVal = self.eval(flagsSrc)
226
ctrl = self.ownerCompn.control
227
if hasattr(ctrl, 'SetWindowStyleFlag'):
228
ctrl.SetWindowStyleFlag(flagsVal)
230
class WindowStyleDTC(BaseFlagsDTC):
234
class FlagsDTC(BaseFlagsDTC):
239
PaletteStore.helperClasses.update({
241
'wx.Colour': ColourDTC,
242
'Anchors': AnchorsDTC