[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnue] r10251 - in trunk/gnue-forms: . src src/GFObjects src/input/displ
From: |
reinhard |
Subject: |
[gnue] r10251 - in trunk/gnue-forms: . src src/GFObjects src/input/displayHandlers |
Date: |
Thu, 2 Dec 2010 14:47:41 -0600 (CST) |
Author: reinhard
Date: 2010-12-02 14:47:40 -0600 (Thu, 02 Dec 2010)
New Revision: 10251
Modified:
trunk/gnue-forms/
trunk/gnue-forms/src/GFForm.py
trunk/gnue-forms/src/GFObjects/GFBlock.py
trunk/gnue-forms/src/GFObjects/GFEntry.py
trunk/gnue-forms/src/GFObjects/GFField.py
trunk/gnue-forms/src/GFObjects/GFTabStop.py
trunk/gnue-forms/src/input/displayHandlers/Checkbox.py
trunk/gnue-forms/src/input/displayHandlers/Cursor.py
Log:
Changed some function parameters for record index from relative offset to
absolute number, so these functions can still work when there is no current
record.
Property changes on: trunk/gnue-forms
___________________________________________________________________
Name: bzr:revision-info
- timestamp: 2010-12-02 17:00:21.529000044 +0100
committer: Reinhard Müller <address@hidden>
properties:
branch-nick: forms
+ timestamp: 2010-12-02 18:46:43.677000046 +0100
committer: Reinhard Müller <address@hidden>
properties:
branch-nick: forms
Name: bzr:file-ids
- src/GFObjects/GFObj.py
address@hidden:trunk%2Fgnue-forms:src%2FGFObjects%2FGFObj.py
src/GFObjects/GFTabStop.py
address@hidden:trunk%2Fgnue-forms:src%2FGFObjects%2FGFTabStop.py
src/input/displayHandlers/Cursor.py
address@hidden:trunk%2Fgnue-forms:src%2Finput%2FdisplayHandlers%2FCursor.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/GFEntry.py
address@hidden:trunk%2Fgnue-forms:src%2FGFObjects%2FGFEntry.py
src/GFObjects/GFField.py
address@hidden:trunk%2Fgnue-forms:src%2FGFObjects%2FGFField.py
src/GFObjects/GFTabStop.py
address@hidden:trunk%2Fgnue-forms:src%2FGFObjects%2FGFTabStop.py
src/input/displayHandlers/Checkbox.py
address@hidden:trunk%2Fgnue-forms:src%2Finput%2FdisplayHandlers%2FCheckbox.py
src/input/displayHandlers/Cursor.py
address@hidden:trunk%2Fgnue-forms:src%2Finput%2FdisplayHandlers%2FCursor.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
3157 address@hidden
3158 address@hidden
3159 address@hidden
3160 address@hidden
3161 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
3158 address@hidden
3159 address@hidden
3160 address@hidden
3161 address@hidden
3162 address@hidden
Name: bzr:text-parents
- src/GFObjects/GFObj.py
svn-v3-single1-dHJ1bmsvZ251ZS1mb3Jtcw..:3a364389-8fce-0310-8f11-cc363fde16c7:trunk%2Fgnue-forms:10149
src/GFObjects/GFTabStop.py address@hidden
src/input/displayHandlers/Cursor.py address@hidden
+ src/GFForm.py address@hidden
src/GFObjects/GFBlock.py address@hidden
src/GFObjects/GFEntry.py address@hidden
src/GFObjects/GFField.py address@hidden
src/input/displayHandlers/Checkbox.py address@hidden
Modified: trunk/gnue-forms/src/GFForm.py
===================================================================
--- trunk/gnue-forms/src/GFForm.py 2010-12-02 20:47:36 UTC (rev 10250)
+++ trunk/gnue-forms/src/GFForm.py 2010-12-02 20:47:40 UTC (rev 10251)
@@ -489,7 +489,7 @@
# -------------------------------------------------------------------------
- def _event_focus_changed(self, target, row_offset):
+ def _event_focus_changed(self, target, record_number):
"""
Notify the form that the user has moved the focus with a mouse click.
@@ -503,7 +503,7 @@
try:
self.endEditing()
try:
- self.__move_focus(target, row_offset)
+ self.__move_focus(target, record_number)
finally:
self.beginEditing()
except:
@@ -894,7 +894,7 @@
# 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)
+ self.change_focus(nextEntry)
return
# We have reached the end of the entry list. Do we want to navigate to
@@ -903,12 +903,12 @@
if currentBlock.autoNextRecord and \
operation in currentBlock.get_possible_operations():
if reverse:
- offset = -1
+ direction = "-"
else:
- offset = 1
+ direction = "+"
else:
- offset = 0
- self.change_focus(nextEntry, offset)
+ direction = None
+ self.change_focus(nextEntry, direction)
return
# We've reached the end of the page. Do we want to jump to the next
@@ -919,7 +919,7 @@
list = pages[i+1:] + pages[:i]
self.__find_and_change_focus(list, reverse)
else:
- self.change_focus(nextEntry, 0)
+ self.change_focus(nextEntry)
# -------------------------------------------------------------------------
@@ -1003,7 +1003,7 @@
entry = self.__find_focus(list, last)
if entry:
- self.change_focus(entry, 0)
+ self.change_focus(entry)
# -------------------------------------------------------------------------
@@ -1076,19 +1076,23 @@
# Changes to the requested entry object requested by an event source
# -------------------------------------------------------------------------
- def change_focus(self, widget, row_offset):
+ def change_focus(self, widget, record_number=None):
"""
Changes focus to the requested entry object on GF and UI layer.
@param widget: entry or page to put focus on. If it is a page, the form
changes to that page and does not focus any widget. This is useful
to activate a page without a focusable widget on it.
+
+ @param record_number: record number to jump to, or None to keep the
+ current record, or "+" to move to the next record, or "-" to move
+ to the previous record.
"""
self.endEditing()
old_page = self._currentPage
try:
- self.__move_focus(widget, row_offset)
+ self.__move_focus(widget, record_number)
if self._currentPage != old_page:
self.uiWidget._ui_goto_page_(self._currentPage.uiWidget)
finally:
@@ -1101,14 +1105,8 @@
# Changes to the requested entry object requested by an event source
# -------------------------------------------------------------------------
- def __move_focus(self, widget, row_offset):
- """
- Changes focus to the requested entry object on GF layer.
+ def __move_focus(self, widget, record_number):
- @param widget: entry to put focus on
- @param row_offset: number of rows to jump up or down in new widget
- """
-
assert gDebug(5, "Change focus: %s->%s" % (self._currentEntry, widget))
if isinstance(widget, GFTabStop):
@@ -1126,7 +1124,7 @@
# if we move the record pointer, we also want to run the block-level
# focus in and focus out triggers
- blockChange = (new_block != self._currentBlock) or row_offset != 0
+ blockChange = (new_block != self._currentBlock) or record_number is
not None
pageChange = (new_page != self._currentPage)
self.__editing_blocked = True
@@ -1158,11 +1156,12 @@
self._currentEntry = None
self._currentBlock = None
- if row_offset == 1:
- # Special case: next_record() can also trigger a new_record()
+ if record_number == '+':
new_block.next_record()
- elif row_offset != 0:
- new_block.jump_records(row_offset)
+ elif record_number == '-':
+ new_block.prev_record()
+ elif record_number is not None:
+ new_block.goto_record(record_number)
self._currentEntry = new_entry
self._currentBlock = new_block
Modified: trunk/gnue-forms/src/GFObjects/GFBlock.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFBlock.py 2010-12-02 20:47:36 UTC (rev
10250)
+++ trunk/gnue-forms/src/GFObjects/GFBlock.py 2010-12-02 20:47:40 UTC (rev
10251)
@@ -57,11 +57,11 @@
L{next_record}, L{last_record}, L{goto_record}, L{jump_records}, and
L{search_record} methods.
- Read and write access to the data of the current record (and the
- surrounding records) is possible with the L{get_value} and L{set_value}
- methods. New records can be inserted with the L{new_record} and
- L{duplicate_record} methods. Records can be marked for deletion at next
- commit with the L{delete_record} method and this mark can be undone with
+ Read and write access to the data of the current record (and to any other
+ record) is possible with the L{get_value} and L{set_value} methods. New
+ records can be inserted with the L{new_record} and L{duplicate_record}
+ methods. Records can be marked for deletion at next commit with the
+ L{delete_record} method and this mark can be undone with
L{undelete_record}.
The L{post} and L{requery} methods are available to write the block's
@@ -930,34 +930,40 @@
# Status information
# -------------------------------------------------------------------------
- def get_record_status(self, offset=0):
+ def get_record_status(self, record_number=None):
"""
- Find out about the status of the record.
+ Find out about the status of a record.
The status can be one of 'empty', 'inserted', 'void', 'clean',
- 'modified', or 'deleted', or C{None} if there is no current record.
+ 'modified', or 'deleted', or C{None} if the block is unbound or in
+ query mode, the given record doesn't exist, or the current record was
+ selected and there is no current record.
+
+ @param record_number: the record number to investigate, or None for the
+ current record.
"""
if self._dataSourceLink.type == 'unbound':
return None
- elif self.mode == 'query':
+ if self.mode == 'query':
return None
- elif self.mode == 'init':
+ if self.mode == 'init' and record_number is None:
rec = self.__initializing_record
-
else:
if self.__resultset is None:
return None
- record_number = self.__resultset.getRecordNumber() + offset
+ if record_number is None:
+ record_number = self.__resultset.getRecordNumber()
+
if record_number < 0 or \
record_number >= self.__resultset.getRecordCount():
return None
- else:
- rec = self.__resultset[record_number]
+ rec = self.__resultset[record_number]
+
# try functions that do not depend on detail records first, because
# they are faster
if rec.isVoid():
@@ -1100,40 +1106,39 @@
# Field access
# -------------------------------------------------------------------------
- def get_value(self, field, offset):
+ def get_value(self, field, record_number):
"""
Return the value of the given field, depending on the block's state.
@param field: the GFField object.
- @param offset: the offset from the current record (to get data for
- records other than the current one).
+ @param record_number: the record number to get the value from, or None
+ for the current record.
"""
- if offset == 0:
- if self.mode == 'query' and self.queryable:
- value = self.__query_values.get(field)
+ if self.mode == 'query' and self.queryable:
+ if record_number is None or record_number == 0:
+ return self.__query_values.get(field)
+ else:
+ return None
- elif self.mode == 'init':
- value = self.__initializing_record[field.field]
-
+ if self.mode == 'init':
+ if record_number is None:
+ return self.__initializing_record[field.field]
else:
- if self.__resultset and self.__resultset.current:
- value = self.__resultset.current[field.field]
- else:
- value = None
- else:
- if self.mode in ['query', 'init'] or self.__resultset is None:
- value = None
- else:
- record_number = self.__resultset.getRecordNumber() + offset
- if record_number < 0 or \
- record_number >= self.__resultset.getRecordCount():
- value = None
- else:
- value = self.__resultset[record_number][field.field]
+ return None
- return value
+ if self.__resultset is None:
+ return None
+ if record_number is None:
+ record_number = self.__resultset.getRecordNumber()
+
+ if record_number < 0 or \
+ record_number >= self.__resultset.getRecordCount():
+ return None
+
+ return self.__resultset[record_number][field.field]
+
# -------------------------------------------------------------------------
def set_value(self, field, value):
@@ -1394,11 +1399,10 @@
self.mode = 'normal'
try:
- for recno in xrange(0, self.__resultset.getRecordCount()):
- offset = recno - self.__resultset.getRecordNumber()
+ for record_number in xrange(0, self.__resultset.getRecordCount()):
add = {}
for field in fields:
- add[field.name] = field.get_value(offset)
+ add[field.name] = field.get_value(record_number)
result.append(add)
finally:
self.mode = save_mode
Modified: trunk/gnue-forms/src/GFObjects/GFEntry.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFEntry.py 2010-12-02 20:47:36 UTC (rev
10250)
+++ trunk/gnue-forms/src/GFObjects/GFEntry.py 2010-12-02 20:47:40 UTC (rev
10251)
@@ -122,10 +122,10 @@
# Consider empty labels disabled. This makes a difference for
# the enclosing boxes.
if index is None:
- offset = 0
+ record_number = None
else:
- offset = index - self._visibleIndex
- return (self._field.get_value(offset) is not None)
+ record_number = self.visible_offset + index
+ return (self._field.get_value(record_number) is not None)
else:
return GFFieldBound._is_enabled_(self, index)
Modified: trunk/gnue-forms/src/GFObjects/GFField.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFField.py 2010-12-02 20:47:36 UTC (rev
10250)
+++ trunk/gnue-forms/src/GFObjects/GFField.py 2010-12-02 20:47:40 UTC (rev
10251)
@@ -284,7 +284,7 @@
# Determine wether a field is editable or not
# -------------------------------------------------------------------------
- def is_editable(self, offset=0):
+ def is_editable(self, record_number=None):
if self._block.mode == 'query' or self.autosearch:
return self._block.queryable
@@ -297,7 +297,7 @@
if self.editable == 'N':
return False
- new = (self._block.get_record_status(offset) \
+ new = (self._block.get_record_status(record_number) \
in ['empty', 'inserted', 'void'])
if self._block.editable == 'new' and not new:
@@ -310,7 +310,8 @@
if self.editable == 'update' and new:
return False
- if self.editable == 'null' and self.__get_value(offset) is not
None:
+ if self.editable == 'null' \
+ and self.__get_value(record_number) is not None:
return False
return True
@@ -402,16 +403,16 @@
# Reading and writing the user value of the field
# -------------------------------------------------------------------------
- def get_value(self, offset=0):
+ def get_value(self, record_number=None):
"""
Return the current user value of the field. For lookup fields, this is
the foreign key description.
"""
if not self.__is_lookup:
- return self.__get_value(offset)
+ return self.__get_value(record_number)
- db_value = self.__get_value(offset)
+ db_value = self.__get_value(record_number)
if self._block.mode == 'query' and db_value == chr(0):
return u_("(empty)")
@@ -450,17 +451,10 @@
# Reading and writing the DB value of a field
# -------------------------------------------------------------------------
- def __get_value(self, offset=0):
- """
- Return the current value of the field, depending on the state of the
- form and the block.
+ def __get_value(self, record_number=None):
- @param offset: offset from the current record (to get values of records
- other than the current record).
- """
+ value = self._block.get_value(self, record_number)
- value = self._block.get_value(self, offset)
-
if isinstance(value, datatypes.InvalidValueType):
raise value.exception
Modified: trunk/gnue-forms/src/GFObjects/GFTabStop.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFTabStop.py 2010-12-02 20:47:36 UTC (rev
10250)
+++ trunk/gnue-forms/src/GFObjects/GFTabStop.py 2010-12-02 20:47:40 UTC (rev
10251)
@@ -143,7 +143,8 @@
and index == self._visibleIndex:
return
- self._form._event_focus_changed(self, index - self._visibleIndex)
+ self._form._event_focus_changed(self,
+ self.__first_visible_record + index)
# -------------------------------------------------------------------------
@@ -232,6 +233,39 @@
# -------------------------------------------------------------------------
+ # Information about the visible records
+ # -------------------------------------------------------------------------
+
+ @property
+ def visible_offset(self):
+ """
+ Record number of the first visible record in this entry.
+
+ If this entry is part of a grid, this property contains the record
+ number of the record visible in the first line. This is equal to the
+ number of records which have scrolled out through the top of the grid.
+
+ If this entry is not part of a grid, this property simply contains the
+ record number currently visible in the entry, or None if no record is
+ visible (because there is no current record).
+ """
+ return self.__first_visible_record
+
+ @property
+ def visible_index(self):
+ """
+ Zero-based index of the current record within the visible records.
+
+ If this entry is part of a grid, this property contains the row number
+ that holds the current record. Numbering starts with zero. If the
+ current record is not visible in the grid (for example, because there
+ is no current record set), this property holds None.
+
+ If this entry is not part of a grid, this property always contains 0.
+ """
+ return self._visibleIndex
+
+ # -------------------------------------------------------------------------
# Recalculate the visible index of an object
# -------------------------------------------------------------------------
@@ -395,7 +429,7 @@
return False
# Attached field is not editable in current mode: not navigable.
- if isinstance(self, GFFieldBound) and not self._field.is_editable(0):
+ if isinstance(self, GFFieldBound) and not self._field.is_editable():
return False
# Control not navigable in query mode.
@@ -415,7 +449,7 @@
Move the UI and GF focus to this object.
"""
- self._form.change_focus(self, index - self._visibleIndex)
+ self._form.change_focus(self, self.__first_visible_record + index)
# -------------------------------------------------------------------------
@@ -595,10 +629,10 @@
return False
else:
if index is None:
- offset = 0
+ record_number = None
else:
- offset = index - self._visibleIndex
- return self._field.is_editable(offset)
+ record_number = self.visible_offset + index
+ return self._field.is_editable(record_number)
# -------------------------------------------------------------------------
@@ -717,7 +751,7 @@
if not (index == self._visibleIndex \
and self._displayHandler.editing):
try:
- value = self._field.get_value(index - self._visibleIndex)
+ value = self._field.get_value(self.visible_offset + index)
except Exception: # invalid value
value = None
display = self._displayHandler.build_display(value, False)
Modified: trunk/gnue-forms/src/input/displayHandlers/Checkbox.py
===================================================================
--- trunk/gnue-forms/src/input/displayHandlers/Checkbox.py 2010-12-02
20:47:36 UTC (rev 10250)
+++ trunk/gnue-forms/src/input/displayHandlers/Checkbox.py 2010-12-02
20:47:40 UTC (rev 10251)
@@ -116,7 +116,7 @@
def beginEdit(self):
- self.editing = self.field.is_editable(0)
+ self.editing = self.field.is_editable()
self.display = self.build_display(self.field.get_value(), self.editing)
self.modified = False
self._cursor = 0
Modified: trunk/gnue-forms/src/input/displayHandlers/Cursor.py
===================================================================
--- trunk/gnue-forms/src/input/displayHandlers/Cursor.py 2010-12-02
20:47:36 UTC (rev 10250)
+++ trunk/gnue-forms/src/input/displayHandlers/Cursor.py 2010-12-02
20:47:40 UTC (rev 10251)
@@ -139,7 +139,7 @@
with this display handler, and creates the string to display in the
form.
"""
- self.editing = self.field.is_editable(0)
+ self.editing = self.field.is_editable()
self.modified = False
self.display = self.build_display(self.field.get_value(), self.editing)
self._cursor = len(self.display)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnue] r10251 - in trunk/gnue-forms: . src src/GFObjects src/input/displayHandlers,
reinhard <=