[gnue] r10246 - in trunk/gnue-forms: . src src/GFObjects
[email protected] Wed, 1 Dec 2010 15:02:48 -0600 (CST)
| Newsgroups | gmane.comp.cms.gnue.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: reinhard Date: 2010-12-01 15:02:47 -0600 (Wed, 01 Dec 2010) New Revision: 10246 Modified: trunk/gnue-forms/ trunk/gnue-forms/src/GFForm.py trunk/gnue-forms/src/GFObjects/GFBlock.py trunk/gnue-forms/src/GFObjects/GFField.py trunk/gnue-forms/src/GFParser.py Log: Introduced separate block attribute "insertable". This allows for blocks = where new records can only be inserted through trigger code (insertable=3D"N") = but these newly inserted records can still be edited by the user (editable=3D= "Y"). Property changes on: trunk/gnue-forms ___________________________________________________________________ Name: bzr:revision-info - timestamp: 2010-11-22 09:33:36.551000118 +0100 committer: Reinhard M=C3=BCller <[email protected]> properties:=20 branch-nick: forms + timestamp: 2010-12-01 22:00:52.105999947 +0100 committer: Reinhard M=C3=BCller <[email protected]> properties:=20 branch-nick: forms Name: bzr:file-ids - src/GFObjects/GFEntry.py 1459@3a364389-8fce-0310-8f11-cc363fde16c7:t= runk%2Fgnue-forms:src%2FGFObjects%2FGFEntry.py + src/GFForm.py 6@3a364389-8fce-0310-8f11-cc363fde16c7:trunk%2Fgnue-fo= rms:src%2FGFForm.py src/GFObjects/GFBlock.py 1459@3a364389-8fce-0310-8f11-cc363fde16c7:trunk%= 2Fgnue-forms:src%2FGFObjects%2FGFBlock.py src/GFObjects/GFField.py 1459@3a364389-8fce-0310-8f11-cc363fde16c7:trunk%= 2Fgnue-forms:src%2FGFObjects%2FGFField.py src/GFParser.py 106@3a364389-8fce-0310-8f11-cc363fde16c7:trunk%2Fgnue-for= ms:src%2FGFParser.py Name: bzr:revision-id:v4 - 3116 [email protected] 3117 [email protected] 3118 [email protected] 3119 [email protected] 3120 [email protected] 3121 [email protected] 3122 [email protected] 3123 [email protected] 3124 [email protected] 3125 [email protected] 3126 [email protected] 3127 [email protected] 3128 [email protected] 3129 [email protected] 3130 [email protected] 3131 [email protected] 3132 [email protected] 3133 [email protected] 3134 [email protected] 3135 [email protected] 3136 [email protected] 3137 [email protected] 3138 [email protected] 3139 [email protected] 3140 [email protected] 3141 [email protected] 3142 [email protected] 3143 [email protected] 3144 [email protected] 3145 [email protected] 3146 [email protected] 3147 [email protected] 3148 [email protected] 3149 [email protected] 3150 [email protected] 3151 [email protected] 3152 [email protected] 3153 [email protected] 3154 [email protected] 3155 [email protected] 3156 [email protected] + 3116 [email protected] 3117 [email protected] 3118 [email protected] 3119 [email protected] 3120 [email protected] 3121 [email protected] 3122 [email protected] 3123 [email protected] 3124 [email protected] 3125 [email protected] 3126 [email protected] 3127 [email protected] 3128 [email protected] 3129 [email protected] 3130 [email protected] 3131 [email protected] 3132 [email protected] 3133 [email protected] 3134 [email protected] 3135 [email protected] 3136 [email protected] 3137 [email protected] 3138 [email protected] 3139 [email protected] 3140 [email protected] 3141 [email protected] 3142 [email protected] 3143 [email protected] 3144 [email protected] 3145 [email protected] 3146 [email protected] 3147 [email protected] 3148 [email protected] 3149 [email protected] 3150 [email protected] 3151 [email protected] 3152 [email protected] 3153 [email protected] 3154 [email protected] 3155 [email protected] 3156 [email protected] 3157 [email protected] Name: bzr:text-parents - src/GFObjects/GFEntry.py [email protected]= -57tv8mf0wbiycuw1 + src/GFForm.py [email protected]= no2n5m src/GFObjects/GFBlock.py [email protected]= wlufysjbke01 src/GFObjects/GFField.py [email protected]= vggyt6jy8h0y src/GFParser.py [email protected]= 6yy Modified: trunk/gnue-forms/src/GFForm.py =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/gnue-forms/src/GFForm.py 2010-11-30 14:26:27 UTC (rev 10245) +++ trunk/gnue-forms/src/GFForm.py 2010-12-01 21:02:47 UTC (rev 10246) @@ -842,82 +842,85 @@ currentBlock =3D self._currentBlock mode =3D self.getCurrentMode() =20 - if currentBlock is None or ( \ - currentBlock.transparent and not ( \ - currentBlock.autoNextRecord and not ( \ - currentBlock.get_record_status() in [None, 'empty'] or= \ - (not reverse and currentBlock.is_last_record() and \ - not (currentBlock.autoCreate and \ - currentBlock.editable in ('Y', 'new')) or \ - (reverse and currentBlock.is_first_record()) \ - )))): - source =3D self._currentPage.get_focus_order() - stayInBlock =3D False + if currentBlock is None: + stayInBlock =3D False + elif not currentBlock.transparent: + stayInBlock =3D True + elif currentBlock.autoNextRecord: + if reverse: + operation =3D 'prev_record' + else: + operation =3D 'next_record' + stayInBlock =3D operation in currentBlock.get_possible_opera= tions() else: - source =3D currentBlock.get_focus_order() - stayInBlock =3D True + stayInBlock =3D False =20 + if stayInBlock: + source =3D currentBlock.get_focus_order() + else: + source =3D self._currentPage.get_focus_order() + # If we want the previous entry, then reverse the focusorder we'= re using if reverse: - source.reverse() + source.reverse() =20 nextEntry =3D None firstEntry =3D None keepNext =3D False =20 for object in source: + if not object.is_navigable(mode): + continue =20 - if object.is_navigable(mode): - if stayInBlock and \ - (currentBlock !=3D object.get_block()): - continue + if stayInBlock and (currentBlock !=3D object.get_block()): + continue =20 # Put the first field as the next to rollover if nextEntry =3D=3D None: - nextEntry =3D object - firstEntry =3D object + nextEntry =3D object + firstEntry =3D object =20 # If we're at the current focused entry, # then the next entry will be what we want if object =3D=3D self._currentEntry or self._currentEntry is= None: - keepNext =3D True + keepNext =3D True =20 # If we've already passed the current entry # Then this is the entry to return elif keepNext: - nextEntry =3D object - break + nextEntry =3D object + break =20 - # If we've cycled back around to the first entry, then do specia= l checks - if nextEntry =3D=3D firstEntry: + # If we've not yet reached the end of the entry list, we just fo= rward + # the focus to the next entry. + if nextEntry !=3D firstEntry: + self.change_focus(nextEntry, 0) + return =20 - # If we should navigate to the next record, do it... - if currentBlock is not None \ - and reverse and currentBlock.autoNextRecord \ - and not currentBlock.is_first_record(): - self.change_focus(nextEntry, -1) - elif currentBlock is not None and not reverse and \ - currentBlock.autoNextRecord and \ - not currentBlock.get_record_status() in [None, 'empty'] and= \ - not (not currentBlock.autoCreate and \ - currentBlock.is_last_record()): - self.change_focus(nextEntry, +1) + # We have reached the end of the entry list. Do we want to navig= ate to + # the next record? + if stayInBlock: + if currentBlock.autoNextRecord and \ + operation in currentBlock.get_possible_operations(): + if reverse: + offset =3D -1 + else: + offset =3D 1 + else: + offset =3D 0 + self.change_focus(nextEntry, offset) + return =20 - # Otherwise, are we transparent? If so, go to next block/page - elif (currentBlock is None or currentBlock.transparent) and \ - self._currentPage.transparent: - - # Jump to the next/(previous) page if block is page as trans= parent + # We've reached the end of the page. Do we want to jump to the n= ext + # page? + if self._currentPage.transparent: pages =3D self._layout._pageList i =3D pages.index(self._currentPage) list =3D pages[i+1:] + pages[:i] self.__find_and_change_focus(list, reverse) - else: + else: self.change_focus(nextEntry, 0) =20 - else: - self.change_focus(nextEntry, 0) - # ------------------------------------------------------------------= ------- =20 def previous_entry(self): Modified: trunk/gnue-forms/src/GFObjects/GFBlock.py =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/gnue-forms/src/GFObjects/GFBlock.py 2010-11-30 14:26:27 UTC (re= v 10245) +++ trunk/gnue-forms/src/GFObjects/GFBlock.py 2010-12-01 21:02:47 UTC (re= v 10246) @@ -234,9 +234,16 @@ del self.__dict__['restrictDelete'] =20 if hasattr(self, 'restrictInsert') and self.restrictInsert: - self.editable =3D 'update' + self.insertable =3D False del self.__dict__['restrictInsert'] =20 + if self.editable in ('N', 'update'): + # Don't let the user insert records if they wouldn't be edit= able + # afterwards. FIXME: Warn about this in 0.8, remove in 0.9. = It + # might make sense to insert new records that can only be mo= dified + # through trigger code. + self.insertable =3D False + if hasattr(self,'datasource'): self.datasource =3D self.datasource.lower() =20 @@ -1644,14 +1651,11 @@ if self._form.readonly: return False =20 - if self.editable in ['N', 'update']: - return False - for field in self._fieldMap.itervalues(): if field.autosearch: return False =20 - return True + return self.insertable =20 # ------------------------------------------------------------------= ------- =20 Modified: trunk/gnue-forms/src/GFObjects/GFField.py =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/gnue-forms/src/GFObjects/GFField.py 2010-11-30 14:26:27 UTC (re= v 10245) +++ trunk/gnue-forms/src/GFObjects/GFField.py 2010-12-01 21:02:47 UTC (re= v 10246) @@ -630,7 +630,7 @@ # keywords to be strings. if not self._block.search_record( **{str(self.name): self.__autosearch_value})= and \ - self._block.editable in ('Y', 'new') and \ + self._block.insertable and \ not self._form.readonly: self._block.new_record( **{str(self.name): self.__autosearch_val= ue}) Modified: trunk/gnue-forms/src/GFParser.py =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/gnue-forms/src/GFParser.py 2010-11-30 14:26:27 UTC (rev 10245) +++ trunk/gnue-forms/src/GFParser.py 2010-12-01 21:02:47 UTC (rev 10246) @@ -409,22 +409,27 @@ 'Description': 'If set, then the block is cleared/emptied= on ' 'a commit.'}, 'editable': { - 'Description': 'Can records be edited/created?', + 'Description': 'Can the user edit records?', 'Label': _('Allow Editing'), 'ValueSet': { 'Y': {'Label': _('Yes')}, 'N': {'Label': _('No')}, - 'update': {'Label': _('Update Only')}, - 'new': {'Label': _('New Records Only')} }, + 'update': {'Label': _('Only existing records')}, + 'new': {'Label': _('Only new records')} }, 'Typecast': GTypecast.text, 'Default': 'Y' }, 'queryable': { - 'Description': 'Can records be queried?', + 'Description': 'Can the user query (filter) this block?', 'Label': _('Allow Querying'), 'Typecast': GTypecast.boolean, 'Default': True }, + 'insertable': { + 'Description': 'Can the user insert records?', + 'Label': _('Allow Inserts'), + 'Typecast': GTypecast.boolean, + 'Default': True }, 'deletable': { - 'Description': 'Can records be deleted?', + 'Description': 'Can the user delete records?', 'Label': _('Allow Deletes'), 'Typecast': GTypecast.boolean, 'Default': True }, @@ -444,7 +449,7 @@ 'Typecast': GTypecast.boolean, 'Default': False, 'Label': _('Prevent Inserts'), - 'Deprecated': 'Use editable=3D"update"', + 'Deprecated': 'Use insertable=3D"N"', 'Description': 'If set then the user will be unable to re= quest ' 'that new records be inserted into the blo= ck.' }, 'datasource': {