[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': {