38 |
print """ |
print """ |
39 |
This GNUe tool requires mxDateTime to be installed |
This GNUe tool requires mxDateTime to be installed |
40 |
|
|
41 |
You can find the mxDateTime at |
You can find the mxDateTime at |
42 |
|
|
43 |
http://www.lemburg.com/files/python/mxDateTime.html |
http://www.lemburg.com/files/python/mxDateTime.html |
44 |
|
|
64 |
|
|
65 |
def setValue(self, value): |
def setValue(self, value): |
66 |
self.modified = 0 |
self.modified = 0 |
67 |
|
wasEditing= 0 |
68 |
|
if self.editing: |
69 |
|
wasEditing= 1 |
70 |
|
dummyEvent= GFEvent ('nothing') |
71 |
|
self.endEdit (dummyEvent) |
72 |
self.value = value |
self.value = value |
73 |
|
# print 'new value! %s [%s]' % (value, self.__class__) |
74 |
|
# from traceback import print_stack |
75 |
|
# import sys |
76 |
|
# print_stack (file=sys.stdout) |
77 |
|
# print '-------------' |
78 |
self._buildDisplay() |
self._buildDisplay() |
79 |
|
if wasEditing: |
80 |
|
self.beginEdit (dummyEvent) |
81 |
|
|
82 |
|
|
83 |
def getValue(self): |
def getValue(self): |
114 |
# |
# |
115 |
# Editing methods |
# Editing methods |
116 |
# |
# |
117 |
|
|
118 |
# |
# |
119 |
# beginEdit |
# beginEdit |
120 |
# called when a widget first gets focus |
# called when a widget first gets focus |
121 |
# |
# |
122 |
def beginEdit(self, event): |
def beginEdit(self, event): |
|
self.editing = 1 |
|
|
self.modified = 0 |
|
123 |
|
|
124 |
# TODO: Replace with formatter |
# TODO: Replace with formatter |
125 |
self.setValue(self.entry.getValue()) |
self.setValue(self.entry.getValue()) |
127 |
self._buildDisplay() |
self._buildDisplay() |
128 |
|
|
129 |
self.cursor = len(self.display) |
self.cursor = len(self.display) |
130 |
|
self.editing = 1 |
131 |
|
self.modified = 0 |
132 |
|
|
133 |
# |
# |
134 |
# endEdit |
# endEdit |
163 |
event.__errortext__ = _("Invalid value '%s' for field") % self.value |
event.__errortext__ = _("Invalid value '%s' for field") % self.value |
164 |
return |
return |
165 |
|
|
|
self.editing = 0 |
|
166 |
event.__results__ = self.value |
event.__results__ = self.value |
167 |
event.modified = self.modified |
event.modified = self.modified |
168 |
self.entry.setValue(self.value) |
self.entry.setValue(self.value) |
174 |
event.__errortext__ = _("The entered value\n ") \ |
event.__errortext__ = _("The entered value\n ") \ |
175 |
+ " '%s'\n" % self.work \ |
+ " '%s'\n" % self.work \ |
176 |
+ _("is not a valid entry.") |
+ _("is not a valid entry.") |
177 |
|
# must end the editing mode in any case, unless it failed |
178 |
|
self.editing = 0 |
179 |
|
|
180 |
|
|
181 |
def addText(self, event): |
def addText(self, event): |
184 |
|
|
185 |
if (self.entry.readonly and not self.entry._block.mode=='query'): |
if (self.entry.readonly and not self.entry._block.mode=='query'): |
186 |
event.__error__ = 1 |
event.__error__ = 1 |
187 |
event.__errortext__ = _("Cannot modify field. Form is read only") |
event.__errortext__ = _("Cannot modify field. Form is read only") |
188 |
return |
return |
189 |
elif self.entry.editOnNull and \ |
elif self.entry.editOnNull and \ |
190 |
self.value != None and \ |
self.value != None and \ |
235 |
|
|
236 |
else: |
else: |
237 |
# Otherwise just graft the new text in place |
# Otherwise just graft the new text in place |
238 |
|
|
239 |
self.work = self.work[:self.cursor] \ |
self.work = self.work[:self.cursor] \ |
240 |
+ value \ |
+ value \ |
241 |
+ self.work[self.cursor:] |
+ self.work[self.cursor:] |
242 |
|
|
243 |
self.cursor += len(event.text) |
self.cursor += len(event.text) |
244 |
|
|
245 |
|
|
246 |
event.__dropped__ = 1 |
event.__dropped__ = 1 |
247 |
self.modified = 1 |
self.modified = 1 |
248 |
self._buildDisplay() |
self._buildDisplay() |
263 |
if self.cursor != precurs: |
if self.cursor != precurs: |
264 |
event.overstrike = 1 |
event.overstrike = 1 |
265 |
event.text = "" |
event.text = "" |
266 |
|
|
267 |
self.addText(event) |
self.addText(event) |
268 |
|
|
269 |
# Delete forward one character |
# Delete forward one character |
270 |
def delete(self, event): |
def delete(self, event): |
271 |
event.overstrike = 1 |
event.overstrike = 1 |
272 |
event.text = "" |
event.text = "" |
273 |
|
|
274 |
self.addText(event) |
self.addText(event) |
275 |
|
|
276 |
|
|
473 |
return "%s" % value |
return "%s" % value |
474 |
|
|
475 |
def _buildDisplay(self): |
def _buildDisplay(self): |
476 |
|
# print "w: %s, v: %s, d: %s, e: %s" % (self.work, self.value, self.display, self.editing) |
477 |
|
# from traceback import print_stack |
478 |
|
# import sys |
479 |
|
# print_stack (file=sys.stdout) |
480 |
if self.editing: |
if self.editing: |
481 |
self.display = self._buildDisplayHelper(self.work, 1) |
self.display = self._buildDisplayHelper(self.work, 1) |
482 |
else: |
else: |
483 |
self.display = self._buildDisplayHelper(self.value, 0) |
self.display = self._buildDisplayHelper(self.value, 0) |
484 |
|
self.work= str (self.value) |
485 |
|
# print "w: %s, v: %s, d: %s" % (self.work, self.value, self.display) |
486 |
|
# print '-------------' |
487 |
|
|
488 |
|
|
489 |
|
|
541 |
# hack |
# hack |
542 |
if self.displayMask: |
if self.displayMask: |
543 |
try: |
try: |
544 |
return displayMask % value |
return self.displayMask % value |
545 |
except: |
except: |
546 |
pass |
pass |
547 |
|
|
609 |
# TODO: Replace with format mask |
# TODO: Replace with format mask |
610 |
def _buildDisplayHelper(self, value, editing): |
def _buildDisplayHelper(self, value, editing): |
611 |
format = "%d/%m/%Y" |
format = "%d/%m/%Y" |
612 |
|
|
613 |
if value in (None,""): |
if value in (None,""): |
614 |
return "" |
return "" |
615 |
try: |
try: |
672 |
self.entry.allowedValues() |
self.entry.allowedValues() |
673 |
self._loadedAllowedValues = 1 |
self._loadedAllowedValues = 1 |
674 |
|
|
|
self.editing = 1 |
|
|
self.modified = 0 |
|
|
|
|
675 |
# TODO: Replace with formatter |
# TODO: Replace with formatter |
676 |
self.setValue(self.entry.getValue()) |
self.setValue(self.entry.getValue()) |
677 |
|
|
688 |
self._buildDisplay() |
self._buildDisplay() |
689 |
|
|
690 |
self.cursor = len(self.display) |
self.cursor = len(self.display) |
691 |
|
self.editing = 1 |
692 |
|
self.modified = 0 |
693 |
|
|
694 |
|
|
695 |
|
|
696 |
# TODO: Replace with format mask |
# TODO: Replace with format mask |
743 |
# |
# |
744 |
class TextLookupDisplayHandler(FieldDisplayHandler): |
class TextLookupDisplayHandler(FieldDisplayHandler): |
745 |
|
|
746 |
def __init__(self, *args, **params): |
# def __init__(self, *args, **params): |
747 |
FieldDisplayHandler.__init__(self, *args, **params) |
# FieldDisplayHandler.__init__(self, *args, **params) |
748 |
|
def __init__(self, entry, eventHandler, displayMask, inputMask= None): |
749 |
|
FieldDisplayHandler.__init__(self, entry, eventHandler, None) |
750 |
|
self.displayMask= entry._displaymask |
751 |
|
|
752 |
def beginEdit(self, event): |
def beginEdit(self, event): |
753 |
pass |
pass |
754 |
|
|
755 |
# TODO: Replace with format mask |
# TODO: Replace with format mask |
756 |
def _buildDisplayHelper(self, value, editing): |
def _buildDisplayHelper(self, value, editing): |
757 |
|
# print "hack! %s" % self.entry.name |
758 |
if value in (None,""): |
if value in (None,""): |
759 |
return "" |
return "" |
760 |
descr = "" |
descr = "" |
765 |
tmpFieldName = foreignKeyContent[1]+'.'+foreignKeyContent[2] |
tmpFieldName = foreignKeyContent[1]+'.'+foreignKeyContent[2] |
766 |
else: |
else: |
767 |
tmpFieldName = foreignKeyContent[1] |
tmpFieldName = foreignKeyContent[1] |
768 |
|
|
769 |
lResultSet = self.entry.datasource.createResultSet({tmpFieldName:value}) |
lResultSet = self.entry.datasource.createResultSet({tmpFieldName:value}) |
770 |
if (lResultSet.firstRecord()): |
if (lResultSet.firstRecord()): |
771 |
if hasattr(self.entry,'foreign_key_description'): |
if hasattr(self.entry,'foreign_key_description'): |
772 |
descr = "%s" % lResultSet.current.getField(self.entry.foreign_key_description) |
descr = "%s" % lResultSet.current.getField(self.entry.foreign_key_description) |
773 |
|
|
774 |
|
# displaymask |
775 |
|
# hack |
776 |
|
if self.displayMask: |
777 |
|
try: |
778 |
|
descr= self.displayMask % descr |
779 |
|
# print "hack[1]! %s: %s" % (self.entry.name, str(descr)) |
780 |
|
except: |
781 |
|
pass |
782 |
|
|
783 |
return descr |
return descr |
784 |
|
|
785 |
def _buildDisplay(self): |
def _buildDisplay(self): |