[Top][All Lists]
[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': {
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnue] r10246 - in trunk/gnue-forms: . src src/GFObjects,
reinhard <=