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 |
|
wasEditing= 0 |
|
|
if self.editing: |
|
|
wasEditing= 1 |
|
|
dummyEvent= GFEvent ('nothing') |
|
|
self.endEdit (dummyEvent) |
|
67 |
self.value = value |
self.value = value |
|
|
|
|
# print 'new value! %s [%s]' % (value, self.__class__) |
|
|
# from traceback import print_stack |
|
|
# import sys |
|
|
# print_stack (file=sys.stdout) |
|
|
# print '-------------' |
|
|
|
|
68 |
self._buildDisplay() |
self._buildDisplay() |
|
if wasEditing: |
|
|
self.beginEdit (dummyEvent) |
|
69 |
|
|
70 |
|
|
71 |
def getValue(self): |
def getValue(self): |
102 |
# |
# |
103 |
# Editing methods |
# Editing methods |
104 |
# |
# |
105 |
|
|
106 |
# |
# |
107 |
# beginEdit |
# beginEdit |
108 |
# called when a widget first gets focus |
# called when a widget first gets focus |
109 |
# |
# |
110 |
def beginEdit(self, event): |
def beginEdit(self, event): |
111 |
|
self.editing = 1 |
112 |
|
self.modified = 0 |
113 |
|
|
114 |
# TODO: Replace with formatter |
# TODO: Replace with formatter |
115 |
self.setValue(self.entry.getValue()) |
self.setValue(self.entry.getValue()) |
117 |
self._buildDisplay() |
self._buildDisplay() |
118 |
|
|
119 |
self.cursor = len(self.display) |
self.cursor = len(self.display) |
|
self.editing = 1 |
|
|
self.modified = 0 |
|
120 |
|
|
121 |
# |
# |
122 |
# endEdit |
# endEdit |
151 |
event.__errortext__ = _("Invalid value '%s' for field") % self.value |
event.__errortext__ = _("Invalid value '%s' for field") % self.value |
152 |
return |
return |
153 |
|
|
154 |
|
self.editing = 0 |
155 |
event.__results__ = self.value |
event.__results__ = self.value |
156 |
event.modified = self.modified |
event.modified = self.modified |
157 |
self.entry.setValue(self.value) |
self.entry.setValue(self.value) |
163 |
event.__errortext__ = _("The entered value\n ") \ |
event.__errortext__ = _("The entered value\n ") \ |
164 |
+ " '%s'\n" % self.work \ |
+ " '%s'\n" % self.work \ |
165 |
+ _("is not a valid entry.") |
+ _("is not a valid entry.") |
|
# must end the editing mode in any case, unless it failed |
|
|
self.editing = 0 |
|
166 |
|
|
167 |
|
|
168 |
def addText(self, event): |
def addText(self, event): |
169 |
|
|
170 |
value = event.text |
value = event.text |
171 |
|
|
|
if self.entry.readonly: |
|
|
return |
|
|
|
|
172 |
if (self.entry.readonly and not self.entry._block.mode=='query'): |
if (self.entry.readonly and not self.entry._block.mode=='query'): |
173 |
event.__error__ = 1 |
event.__error__ = 1 |
174 |
event.__errortext__ = _("Cannot modify field. Entry is read only") |
event.__errortext__ = _("Cannot modify field. Form is read only") |
175 |
return |
return |
176 |
elif self.entry.editOnNull and \ |
elif self.entry.editOnNull and \ |
177 |
self.value != None and \ |
self.value != None and \ |
222 |
|
|
223 |
else: |
else: |
224 |
# Otherwise just graft the new text in place |
# Otherwise just graft the new text in place |
225 |
|
|
226 |
self.work = self.work[:self.cursor] \ |
self.work = self.work[:self.cursor] \ |
227 |
+ value \ |
+ value \ |
228 |
+ self.work[self.cursor:] |
+ self.work[self.cursor:] |
229 |
|
|
230 |
self.cursor += len(event.text) |
self.cursor += len(event.text) |
231 |
|
|
232 |
|
|
233 |
event.__dropped__ = 1 |
event.__dropped__ = 1 |
234 |
self.modified = 1 |
self.modified = 1 |
235 |
self._buildDisplay() |
self._buildDisplay() |
250 |
if self.cursor != precurs: |
if self.cursor != precurs: |
251 |
event.overstrike = 1 |
event.overstrike = 1 |
252 |
event.text = "" |
event.text = "" |
253 |
|
|
254 |
self.addText(event) |
self.addText(event) |
255 |
|
|
256 |
# Delete forward one character |
# Delete forward one character |
257 |
def delete(self, event): |
def delete(self, event): |
258 |
event.overstrike = 1 |
event.overstrike = 1 |
259 |
event.text = "" |
event.text = "" |
260 |
|
|
261 |
self.addText(event) |
self.addText(event) |
262 |
|
|
263 |
|
|
460 |
return "%s" % value |
return "%s" % value |
461 |
|
|
462 |
def _buildDisplay(self): |
def _buildDisplay(self): |
|
# print "w: %s, v: %s, d: %s, e: %s" % (self.work, self.value, self.display, self.editing) |
|
|
# from traceback import print_stack |
|
|
# import sys |
|
|
# print_stack (file=sys.stdout) |
|
|
|
|
463 |
if self.editing: |
if self.editing: |
464 |
self.display = self._buildDisplayHelper(self.work, 1) |
self.display = self._buildDisplayHelper(self.work, 1) |
465 |
else: |
else: |
466 |
self.display = self._buildDisplayHelper(self.value, 0) |
self.display = self._buildDisplayHelper(self.value, 0) |
|
if self.value: |
|
|
self.work= str (self.value) |
|
|
else: |
|
|
self.work= '' |
|
|
|
|
|
# print "w: %s, v: %s, d: %s" % (self.work, self.value, self.display) |
|
|
# print '-------------' |
|
467 |
|
|
468 |
|
|
469 |
|
|
521 |
# hack |
# hack |
522 |
if self.displayMask: |
if self.displayMask: |
523 |
try: |
try: |
524 |
return self.displayMask % value |
return displayMask % value |
525 |
except: |
except: |
526 |
pass |
pass |
527 |
|
|
589 |
# TODO: Replace with format mask |
# TODO: Replace with format mask |
590 |
def _buildDisplayHelper(self, value, editing): |
def _buildDisplayHelper(self, value, editing): |
591 |
format = "%d/%m/%Y" |
format = "%d/%m/%Y" |
592 |
|
|
593 |
if value in (None,""): |
if value in (None,""): |
594 |
return "" |
return "" |
595 |
try: |
try: |
652 |
self.entry.allowedValues() |
self.entry.allowedValues() |
653 |
self._loadedAllowedValues = 1 |
self._loadedAllowedValues = 1 |
654 |
|
|
655 |
|
self.editing = 1 |
656 |
|
self.modified = 0 |
657 |
|
|
658 |
# TODO: Replace with formatter |
# TODO: Replace with formatter |
659 |
self.setValue(self.entry.getValue()) |
self.setValue(self.entry.getValue()) |
660 |
|
|
671 |
self._buildDisplay() |
self._buildDisplay() |
672 |
|
|
673 |
self.cursor = len(self.display) |
self.cursor = len(self.display) |
|
self.editing = 1 |
|
|
self.modified = 0 |
|
|
|
|
674 |
|
|
675 |
|
|
676 |
# TODO: Replace with format mask |
# TODO: Replace with format mask |
723 |
# |
# |
724 |
class TextLookupDisplayHandler(FieldDisplayHandler): |
class TextLookupDisplayHandler(FieldDisplayHandler): |
725 |
|
|
726 |
def __init__(self, entry, eventHandler, displayMask, inputMask= None): |
def __init__(self, *args, **params): |
727 |
FieldDisplayHandler.__init__(self, entry, eventHandler, None) |
FieldDisplayHandler.__init__(self, *args, **params) |
|
self.displayMask= entry._displaymask |
|
|
self._currentValue = "" |
|
|
self._currentDisplayValue = "" |
|
728 |
|
|
729 |
def beginEdit(self, event): |
def beginEdit(self, event): |
730 |
pass |
pass |
731 |
|
|
732 |
# TODO: Replace with format mask |
# TODO: Replace with format mask |
733 |
def _buildDisplayHelper(self, value, editing): |
def _buildDisplayHelper(self, value, editing): |
|
# print "hack! %s" % self.entry.name |
|
734 |
if value in (None,""): |
if value in (None,""): |
735 |
return "" |
return "" |
|
if value == self._currentValue: |
|
|
return self._currentDisplayValue |
|
736 |
descr = "" |
descr = "" |
737 |
if hasattr(self.entry,'datasource'): |
if hasattr(self.entry,'datasource'): |
738 |
if hasattr(self.entry,'foreign_key'): |
if hasattr(self.entry,'foreign_key'): |
741 |
tmpFieldName = foreignKeyContent[1]+'.'+foreignKeyContent[2] |
tmpFieldName = foreignKeyContent[1]+'.'+foreignKeyContent[2] |
742 |
else: |
else: |
743 |
tmpFieldName = foreignKeyContent[1] |
tmpFieldName = foreignKeyContent[1] |
744 |
|
|
745 |
lResultSet = self.entry.datasource.createResultSet({tmpFieldName:value}) |
lResultSet = self.entry.datasource.createResultSet({tmpFieldName:value}) |
746 |
if (lResultSet.firstRecord()): |
if (lResultSet.firstRecord()): |
747 |
if hasattr(self.entry,'foreign_key_description'): |
if hasattr(self.entry,'foreign_key_description'): |
748 |
descr = "%s" % lResultSet.current.getField(self.entry.foreign_key_description) |
descr = "%s" % lResultSet.current.getField(self.entry.foreign_key_description) |
749 |
|
|
|
# displaymask |
|
|
# hack |
|
|
if self.displayMask: |
|
|
try: |
|
|
descr= self.displayMask % descr |
|
|
# print "hack[1]! %s: %s" % (self.entry.name, str(descr)) |
|
|
except: |
|
|
pass |
|
|
self._currentValue = value |
|
|
self._currentDisplayValue = descr |
|
750 |
return descr |
return descr |
751 |
|
|
752 |
def _buildDisplay(self): |
def _buildDisplay(self): |