~ubuntu-branches/ubuntu/trusty/boa-constructor/trusty

« back to all changes in this revision

Viewing changes to Companions/Companions.py

  • Committer: Bazaar Package Importer
  • Author(s): Cédric Delfosse
  • Date: 2007-01-23 21:32:29 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20070123213229-1d9lxp9c4dutjwv5
Add a .desktop file (Closes: #349081)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#----------------------------------------------------------------------
2
 
# Name:        Companions.py
3
 
# Purpose:     Classes defining and implementing the design time
4
 
#              behaviour of controls
5
 
#
6
 
# Author:      Riaan Booysen
7
 
#
8
 
# Created:     1999
9
 
# RCS-ID:      $Id: Companions.py,v 1.26 2004/08/16 13:16:56 riaan Exp $
10
 
# Copyright:   (c) 1999 - 2004 Riaan Booysen
11
 
# Licence:     GPL
12
 
#----------------------------------------------------------------------
13
 
 
14
 
""" Classes defining and implementing the design time behaviour of controls """
15
 
 
16
 
from wxPython.wx import *
17
 
 
18
 
from wxPython.lib.anchors import LayoutAnchors
19
 
 
20
 
from PropEdit import PropertyEditors
21
 
from PropEdit.Enumerations import *
22
 
from BaseCompanions import HelperDTC
23
 
import PaletteStore, RTTI
24
 
 
25
 
#---Helpers---------------------------------------------------------------------
26
 
 
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,}
35
 
 
36
 
        fontEnum = wxFontEnumerator()
37
 
        fontEnum.EnumerateFacenames()
38
 
        fontNameList = fontEnum.GetFacenames()
39
 
        fontFaceName = []
40
 
        fontFaceNameNames = {}
41
 
        for fnt in fontNameList:
42
 
            fontFaceName.append(fnt)
43
 
            fontFaceNameNames[fnt] = fnt
44
 
        fontFaceName.sort()
45
 
 
46
 
        self.options = {'FaceName' : fontFaceName,
47
 
                        'Family'   : fontFamily,
48
 
                        'Style'    : fontStyle,
49
 
                        'Weight'   : fontWeight,}
50
 
        self.names = {'FaceName' : fontFaceNameNames,
51
 
                      'Family'   : fontFamilyNames,
52
 
                      'Style'    : fontStyleNames,
53
 
                      'Weight'   : fontWeightNames,}
54
 
 
55
 
    def hideDesignTime(self):
56
 
        return HelperDTC.hideDesignTime(self) + ['Encoding', 'NativeFontInfo',
57
 
               'NativeFontInfoUserDesc', 'NoAntiAliasing']
58
 
 
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,}
65
 
    def properties(self):
66
 
        return {'Red'  : ('CompnRoute', self.GetRed, self.SetRed),
67
 
                'Green': ('CompnRoute', self.GetGreen, self.SetGreen),
68
 
                'Blue' : ('CompnRoute', self.GetBlue, self.SetBlue),}
69
 
 
70
 
    def GetRed(self, cmpn):
71
 
        return self.obj.Red()
72
 
    def SetRed(self, value):
73
 
        self.obj.Set(max(min(value, 255), 0), self.obj.Green(), self.obj.Blue())
74
 
 
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())
79
 
 
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))
84
 
 
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}
90
 
 
91
 
    def properties(self):
92
 
        return {'X': ('CompnRoute', self.GetX, self.SetX),
93
 
                'Y': ('CompnRoute', self.GetY, self.SetY)}
94
 
 
95
 
    def GetX(self, comp):
96
 
        return self.obj.x
97
 
    def SetX(self, value):
98
 
        self.obj.Set(value, self.obj.y)
99
 
 
100
 
    def GetY(self, comp):
101
 
        return self.obj.y
102
 
    def SetY(self, value):
103
 
        self.obj.Set(self.obj.x, value)
104
 
 
105
 
class SizeDTC(HelperDTC): pass
106
 
 
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
115
 
        self.assureAnchors()
116
 
        self.GetLeftAnchor('')
117
 
        self.GetTopAnchor('')
118
 
        self.GetRightAnchor('')
119
 
        self.GetBottomAnchor('')
120
 
 
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),}
126
 
 
127
 
##    def getPropList(self):
128
 
##        props = self.properties()
129
 
##        keys = props.keys()
130
 
##        keys.sort();keys.reverse()
131
 
##        pl = []
132
 
##        for key in keys:
133
 
##            rType, getter, setter = props[key]
134
 
##            pl.append(RTTI.PropertyWrapper(key, rType, getter, setter))
135
 
##        return {'properties': pl}
136
 
 
137
 
    def assureAnchors(self):
138
 
        if not self.ownerCompn.anchorSettings:
139
 
            self.ownerCompn.defaultAnchors()
140
 
 
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)
144
 
 
145
 
    def GetLeftAnchor(self, name):
146
 
        self.assureAnchors()
147
 
        self.left = self.ownerCompn.anchorSettings[0]
148
 
        return self.left
149
 
    def SetLeftAnchor(self, value):
150
 
        self.assureAnchors()
151
 
        self.left = value
152
 
        self.updateAnchors()
153
 
 
154
 
    def GetTopAnchor(self, name):
155
 
        self.assureAnchors()
156
 
        self.top = self.ownerCompn.anchorSettings[1]
157
 
        return self.top
158
 
    def SetTopAnchor(self, value):
159
 
        self.assureAnchors()
160
 
        self.top = value
161
 
        self.updateAnchors()
162
 
 
163
 
    def GetRightAnchor(self, name):
164
 
        self.assureAnchors()
165
 
        self.right = self.ownerCompn.anchorSettings[2]
166
 
        return self.right
167
 
    def SetRightAnchor(self, value):
168
 
        self.assureAnchors()
169
 
        self.right = value
170
 
        self.updateAnchors()
171
 
 
172
 
    def GetBottomAnchor(self, name):
173
 
        self.assureAnchors()
174
 
        self.bottom = self.ownerCompn.anchorSettings[3]
175
 
        return self.bottom
176
 
    def SetBottomAnchor(self, value):
177
 
        self.assureAnchors()
178
 
        self.bottom = value
179
 
        self.updateAnchors()
180
 
 
181
 
 
182
 
class BaseFlagsDTC(HelperDTC):
183
 
    paramName = 'param'
184
 
    propName = 'Prop'
185
 
    def __init__(self, name, designer, cmpn, obj, ownerPW):
186
 
        HelperDTC.__init__(self, name, designer, cmpn, obj, ownerPW)
187
 
        self.editors = {}
188
 
        for flag in self.ownerCompn.windowStyles:
189
 
            self.editors[flag] = PropertyEditors.BoolPropEdit
190
 
 
191
 
    # XXX One of these 2 methods is redundant !
192
 
 
193
 
    def properties(self):
194
 
        props = {}
195
 
        prop = ('NameRoute', self.GetStyle, self.SetStyle)
196
 
        for flag in self.ownerCompn.windowStyles:
197
 
            props[flag] = prop
198
 
        return props
199
 
 
200
 
    def getPropList(self):
201
 
        propLst = []
202
 
        for prop in self.ownerCompn.windowStyles:
203
 
            propLst.append(RTTI.PropertyWrapper(prop, 'NameRoute',
204
 
                  self.GetStyle, self.SetStyle))
205
 
        return {'constructor':[], 'properties': propLst}
206
 
 
207
 
    def GetStyle(self, name):
208
 
        return name in self.ownerCompn.textConstr.params[self.paramName].split(' | ')
209
 
 
210
 
    def SetStyle(self, name, value):
211
 
        flags = self.ownerCompn.textConstr.params[self.paramName].split(' | ')
212
 
        if value:
213
 
            if name not in flags:
214
 
                if '0' in flags:
215
 
                    flags.remove('0')
216
 
                flags.insert(0, name)
217
 
        else:
218
 
            if name in flags:
219
 
                flags.remove(name)
220
 
                if not flags:
221
 
                    flags.append('0')
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)
229
 
 
230
 
class WindowStyleDTC(BaseFlagsDTC):
231
 
    paramName = 'style'
232
 
    propName = 'Style'
233
 
 
234
 
class FlagsDTC(BaseFlagsDTC):
235
 
    paramName = 'flags'
236
 
    propName = 'Flags'
237
 
 
238
 
 
239
 
PaletteStore.helperClasses.update({
240
 
    'wxFontPtr': FontDTC,
241
 
    'wxColourPtr': ColourDTC,
242
 
    'Anchors': AnchorsDTC
243
 
})
 
1
#----------------------------------------------------------------------
 
2
# Name:        Companions.py
 
3
# Purpose:     Classes defining and implementing the design time
 
4
#              behaviour of controls
 
5
#
 
6
# Author:      Riaan Booysen
 
7
#
 
8
# Created:     1999
 
9
# RCS-ID:      $Id: Companions.py,v 1.30 2005/07/11 09:54:26 riaan Exp $
 
10
# Copyright:   (c) 1999 - 2005 Riaan Booysen
 
11
# Licence:     GPL
 
12
#----------------------------------------------------------------------
 
13
 
 
14
""" Classes defining and implementing the design time behaviour of controls """
 
15
 
 
16
import wx
 
17
 
 
18
from wx.lib.anchors import LayoutAnchors
 
19
 
 
20
from PropEdit import PropertyEditors
 
21
from PropEdit.Enumerations import *
 
22
from BaseCompanions import HelperDTC
 
23
import PaletteStore, RTTI
 
24
 
 
25
#---Helpers---------------------------------------------------------------------
 
26
 
 
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,}
 
35
 
 
36
        fontEnum = wx.FontEnumerator()
 
37
        fontEnum.EnumerateFacenames()
 
38
        fontNameList = fontEnum.GetFacenames()
 
39
        fontFaceName = []
 
40
        fontFaceNameNames = {}
 
41
        for fnt in fontNameList:
 
42
            fontFaceName.append(fnt)
 
43
            fontFaceNameNames[fnt] = fnt
 
44
        fontFaceName.sort()
 
45
 
 
46
        self.options = {'FaceName' : fontFaceName,
 
47
                        'Family'   : fontFamily,
 
48
                        'Style'    : fontStyle,
 
49
                        'Weight'   : fontWeight,}
 
50
        self.names = {'FaceName' : fontFaceNameNames,
 
51
                      'Family'   : fontFamilyNames,
 
52
                      'Style'    : fontStyleNames,
 
53
                      'Weight'   : fontWeightNames,}
 
54
 
 
55
    def hideDesignTime(self):
 
56
        return HelperDTC.hideDesignTime(self) + ['Encoding', 'NativeFontInfo',
 
57
               'NativeFontInfoUserDesc', 'NoAntiAliasing']
 
58
 
 
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,}
 
65
    def properties(self):
 
66
        return {'Red'  : ('CompnRoute', self.GetRed, self.SetRed),
 
67
                'Green': ('CompnRoute', self.GetGreen, self.SetGreen),
 
68
                'Blue' : ('CompnRoute', self.GetBlue, self.SetBlue),}
 
69
 
 
70
    def GetRed(self, cmpn):
 
71
        return self.obj.Red()
 
72
    def SetRed(self, value):
 
73
        self.obj.Set(max(min(value, 255), 0), self.obj.Green(), self.obj.Blue())
 
74
 
 
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())
 
79
 
 
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))
 
84
 
 
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}
 
90
 
 
91
    def properties(self):
 
92
        return {'X': ('CompnRoute', self.GetX, self.SetX),
 
93
                'Y': ('CompnRoute', self.GetY, self.SetY)}
 
94
 
 
95
    def GetX(self, comp):
 
96
        return self.obj.x
 
97
    def SetX(self, value):
 
98
        self.obj.Set(value, self.obj.y)
 
99
 
 
100
    def GetY(self, comp):
 
101
        return self.obj.y
 
102
    def SetY(self, value):
 
103
        self.obj.Set(self.obj.x, value)
 
104
 
 
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}
 
110
 
 
111
    def properties(self):
 
112
        return {'Width': ('CompnRoute', self.GetWidth, self.SetWidth),
 
113
                'Height': ('CompnRoute', self.GetHeight, self.SetHeight)}
 
114
 
 
115
    def GetWidth(self, comp):
 
116
        return self.obj.width
 
117
    def SetWidth(self, value):
 
118
        self.obj.width = value
 
119
 
 
120
    def GetHeight(self, comp):
 
121
        return self.obj.height
 
122
    def SetHeight(self, value):
 
123
        self.obj.height = value
 
124
        
 
125
        
 
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
 
134
        self.assureAnchors()
 
135
        self.GetLeftAnchor('')
 
136
        self.GetTopAnchor('')
 
137
        self.GetRightAnchor('')
 
138
        self.GetBottomAnchor('')
 
139
 
 
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),}
 
145
 
 
146
    def assureAnchors(self):
 
147
        if not self.ownerCompn.anchorSettings:
 
148
            self.ownerCompn.defaultAnchors()
 
149
 
 
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)
 
153
 
 
154
    def GetLeftAnchor(self, name):
 
155
        self.assureAnchors()
 
156
        self.left = self.ownerCompn.anchorSettings[0]
 
157
        return self.left
 
158
    def SetLeftAnchor(self, value):
 
159
        self.assureAnchors()
 
160
        self.left = value
 
161
        self.updateAnchors()
 
162
 
 
163
    def GetTopAnchor(self, name):
 
164
        self.assureAnchors()
 
165
        self.top = self.ownerCompn.anchorSettings[1]
 
166
        return self.top
 
167
    def SetTopAnchor(self, value):
 
168
        self.assureAnchors()
 
169
        self.top = value
 
170
        self.updateAnchors()
 
171
 
 
172
    def GetRightAnchor(self, name):
 
173
        self.assureAnchors()
 
174
        self.right = self.ownerCompn.anchorSettings[2]
 
175
        return self.right
 
176
    def SetRightAnchor(self, value):
 
177
        self.assureAnchors()
 
178
        self.right = value
 
179
        self.updateAnchors()
 
180
 
 
181
    def GetBottomAnchor(self, name):
 
182
        self.assureAnchors()
 
183
        self.bottom = self.ownerCompn.anchorSettings[3]
 
184
        return self.bottom
 
185
    def SetBottomAnchor(self, value):
 
186
        self.assureAnchors()
 
187
        self.bottom = value
 
188
        self.updateAnchors()
 
189
 
 
190
 
 
191
class BaseFlagsDTC(HelperDTC):
 
192
    paramName = 'param'
 
193
    propName = 'Prop'
 
194
    def __init__(self, name, designer, cmpn, obj, ownerPW):
 
195
        HelperDTC.__init__(self, name, designer, cmpn, obj, ownerPW)
 
196
        self.editors = {}
 
197
        for flag in self.ownerCompn.windowStyles:
 
198
            self.editors[flag] = PropertyEditors.BoolPropEdit
 
199
 
 
200
    def properties(self):
 
201
        props = {}
 
202
        prop = ('NameRoute', self.GetStyle, self.SetStyle)
 
203
        for flag in self.ownerCompn.windowStyles:
 
204
            props[flag] = prop
 
205
        return props
 
206
 
 
207
    def GetStyle(self, name):
 
208
        return name in self.ownerCompn.textConstr.params[self.paramName].split(' | ')
 
209
 
 
210
    def SetStyle(self, name, value):
 
211
        flags = self.ownerCompn.textConstr.params[self.paramName].split(' | ')
 
212
        if value:
 
213
            if name not in flags:
 
214
                if '0' in flags:
 
215
                    flags.remove('0')
 
216
                flags.insert(0, name)
 
217
        else:
 
218
            if name in flags:
 
219
                flags.remove(name)
 
220
                if not flags:
 
221
                    flags.append('0')
 
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)
 
229
 
 
230
class WindowStyleDTC(BaseFlagsDTC):
 
231
    paramName = 'style'
 
232
    propName = 'Style'
 
233
 
 
234
class FlagsDTC(BaseFlagsDTC):
 
235
    paramName = 'flags'
 
236
    propName = 'Flags'
 
237
 
 
238
 
 
239
PaletteStore.helperClasses.update({
 
240
    'wx.Font': FontDTC,
 
241
    'wx.Colour': ColourDTC,
 
242
    'Anchors': AnchorsDTC
 
243
})