commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnue] r10246 - in trunk/gnue-forms: . src src/GFObjects


From: reinhard
Subject: [gnue] r10246 - in trunk/gnue-forms: . src src/GFObjects
Date: Wed, 1 Dec 2010 15:02:48 -0600 (CST)

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="N") but
these newly inserted records can still be edited by the user (editable="Y").



Property changes on: trunk/gnue-forms
___________________________________________________________________
Name: bzr:revision-info
   - timestamp: 2010-11-22 09:33:36.551000118 +0100
committer: Reinhard Müller <address@hidden>
properties: 
        branch-nick: forms

   + timestamp: 2010-12-01 22:00:52.105999947 +0100
committer: Reinhard Müller <address@hidden>
properties: 
        branch-nick: forms

Name: bzr:file-ids
   - src/GFObjects/GFEntry.py   
address@hidden:trunk%2Fgnue-forms:src%2FGFObjects%2FGFEntry.py

   + src/GFForm.py      address@hidden:trunk%2Fgnue-forms:src%2FGFForm.py
src/GFObjects/GFBlock.py        
address@hidden:trunk%2Fgnue-forms:src%2FGFObjects%2FGFBlock.py
src/GFObjects/GFField.py        
address@hidden:trunk%2Fgnue-forms:src%2FGFObjects%2FGFField.py
src/GFParser.py address@hidden:trunk%2Fgnue-forms:src%2FGFParser.py

Name: bzr:revision-id:v4
   - 3116 address@hidden
3117 address@hidden
3118 address@hidden
3119 address@hidden
3120 address@hidden
3121 address@hidden
3122 address@hidden
3123 address@hidden
3124 address@hidden
3125 address@hidden
3126 address@hidden
3127 address@hidden
3128 address@hidden
3129 address@hidden
3130 address@hidden
3131 address@hidden
3132 address@hidden
3133 address@hidden
3134 address@hidden
3135 address@hidden
3136 address@hidden
3137 address@hidden
3138 address@hidden
3139 address@hidden
3140 address@hidden
3141 address@hidden
3142 address@hidden
3143 address@hidden
3144 address@hidden
3145 address@hidden
3146 address@hidden
3147 address@hidden
3148 address@hidden
3149 address@hidden
3150 address@hidden
3151 address@hidden
3152 address@hidden
3153 address@hidden
3154 address@hidden
3155 address@hidden
3156 address@hidden

   + 3116 address@hidden
3117 address@hidden
3118 address@hidden
3119 address@hidden
3120 address@hidden
3121 address@hidden
3122 address@hidden
3123 address@hidden
3124 address@hidden
3125 address@hidden
3126 address@hidden
3127 address@hidden
3128 address@hidden
3129 address@hidden
3130 address@hidden
3131 address@hidden
3132 address@hidden
3133 address@hidden
3134 address@hidden
3135 address@hidden
3136 address@hidden
3137 address@hidden
3138 address@hidden
3139 address@hidden
3140 address@hidden
3141 address@hidden
3142 address@hidden
3143 address@hidden
3144 address@hidden
3145 address@hidden
3146 address@hidden
3147 address@hidden
3148 address@hidden
3149 address@hidden
3150 address@hidden
3151 address@hidden
3152 address@hidden
3153 address@hidden
3154 address@hidden
3155 address@hidden
3156 address@hidden
3157 address@hidden

Name: bzr:text-parents
   - src/GFObjects/GFEntry.py   address@hidden

   + src/GFForm.py      address@hidden
src/GFObjects/GFBlock.py        address@hidden
src/GFObjects/GFField.py        address@hidden
src/GFParser.py address@hidden


Modified: trunk/gnue-forms/src/GFForm.py
===================================================================
--- 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 = self._currentBlock
         mode = self.getCurrentMode()
 
-        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 = self._currentPage.get_focus_order()
-          stayInBlock = False
+        if currentBlock is None:
+            stayInBlock = False
+        elif not currentBlock.transparent:
+            stayInBlock = True
+        elif currentBlock.autoNextRecord:
+            if reverse:
+                operation = 'prev_record'
+            else:
+                operation = 'next_record'
+            stayInBlock = operation in currentBlock.get_possible_operations()
         else:
-          source = currentBlock.get_focus_order()
-          stayInBlock = True
+            stayInBlock = False
 
+        if stayInBlock:
+            source = currentBlock.get_focus_order()
+        else:
+            source = self._currentPage.get_focus_order()
+
         # If we want the previous entry, then reverse the focusorder we're 
using
         if reverse:
-          source.reverse()
+            source.reverse()
 
         nextEntry = None
         firstEntry = None
         keepNext = False
 
         for object in source:
+            if not object.is_navigable(mode):
+                continue
 
-          if object.is_navigable(mode):
-            if stayInBlock and \
-               (currentBlock != object.get_block()):
-              continue
+            if stayInBlock and (currentBlock != object.get_block()):
+                continue
 
             # Put the first field as the next to rollover
             if nextEntry == None:
-              nextEntry = object
-              firstEntry = object
+                nextEntry = object
+                firstEntry = object
 
             # If we're at the current focused entry,
             # then the next entry will be what we want
             if object == self._currentEntry or self._currentEntry is None:
-              keepNext = True
+                keepNext = True
 
             # If we've already passed the current entry
             # Then this is the entry to return
             elif keepNext:
-              nextEntry = object
-              break
+                nextEntry = object
+                break
 
-        # If we've cycled back around to the first entry, then do special 
checks
-        if nextEntry == firstEntry:
+        # If we've not yet reached the end of the entry list, we just forward
+        # the focus to the next entry.
+        if nextEntry != firstEntry:
+            self.change_focus(nextEntry, 0)
+            return
 
-          # 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 navigate to
+        # the next record?
+        if stayInBlock:
+            if currentBlock.autoNextRecord and \
+                    operation in currentBlock.get_possible_operations():
+                if reverse:
+                    offset = -1
+                else:
+                    offset = 1
+            else:
+                offset = 0
+            self.change_focus(nextEntry, offset)
+            return
 
-          # 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 transparent
+        # We've reached the end of the page. Do we want to jump to the next
+        # page?
+        if  self._currentPage.transparent:
             pages = self._layout._pageList
             i = pages.index(self._currentPage)
             list = pages[i+1:] + pages[:i]
             self.__find_and_change_focus(list, reverse)
-          else:
+        else:
             self.change_focus(nextEntry, 0)
 
-        else:
-          self.change_focus(nextEntry, 0)
-
     # -------------------------------------------------------------------------
 
     def previous_entry(self):

Modified: trunk/gnue-forms/src/GFObjects/GFBlock.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFBlock.py   2010-11-30 14:26:27 UTC (rev 
10245)
+++ trunk/gnue-forms/src/GFObjects/GFBlock.py   2010-12-01 21:02:47 UTC (rev 
10246)
@@ -234,9 +234,16 @@
             del self.__dict__['restrictDelete']
 
         if hasattr(self, 'restrictInsert') and self.restrictInsert:
-            self.editable = 'update'
+            self.insertable = False
             del self.__dict__['restrictInsert']
 
+        if self.editable in ('N', 'update'):
+            # Don't let the user insert records if they wouldn't be editable
+            # afterwards. FIXME: Warn about this in 0.8, remove in 0.9. It
+            # might make sense to insert new records that can only be modified
+            # through trigger code.
+            self.insertable = False
+
         if hasattr(self,'datasource'):
             self.datasource = self.datasource.lower()
 
@@ -1644,14 +1651,11 @@
         if self._form.readonly:
             return False
 
-        if self.editable in ['N', 'update']:
-            return False
-
         for field in self._fieldMap.itervalues():
             if field.autosearch:
                 return False
 
-        return True
+        return self.insertable
 
     # -------------------------------------------------------------------------
 

Modified: trunk/gnue-forms/src/GFObjects/GFField.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFField.py   2010-11-30 14:26:27 UTC (rev 
10245)
+++ trunk/gnue-forms/src/GFObjects/GFField.py   2010-12-01 21:02:47 UTC (rev 
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_value})

Modified: trunk/gnue-forms/src/GFParser.py
===================================================================
--- 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="update"',
+               'Deprecated': 'Use insertable="N"',
                'Description': 'If set then the user will be unable to request '
                               'that new records be inserted into the block.' },
             'datasource': {




reply via email to

[Prev in Thread] Current Thread [Next in Thread]