[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnue] r9371 - trunk/gnue-forms/src/input/displayHandlers
From: |
johannes |
Subject: |
[gnue] r9371 - trunk/gnue-forms/src/input/displayHandlers |
Date: |
Mon, 12 Feb 2007 07:03:48 -0600 (CST) |
Author: johannes
Date: 2007-02-12 07:03:48 -0600 (Mon, 12 Feb 2007)
New Revision: 9371
Modified:
trunk/gnue-forms/src/input/displayHandlers/datehandler.py
Log:
Use more generic aproach to autocompletion for datetime fields as well
Modified: trunk/gnue-forms/src/input/displayHandlers/datehandler.py
===================================================================
--- trunk/gnue-forms/src/input/displayHandlers/datehandler.py 2007-02-09
17:54:42 UTC (rev 9370)
+++ trunk/gnue-forms/src/input/displayHandlers/datehandler.py 2007-02-12
13:03:48 UTC (rev 9371)
@@ -145,8 +145,54 @@
def _get_ordering_(self):
pass
+ # -------------------------------------------------------------------------
+ # Split a given text into the date components
+ # -------------------------------------------------------------------------
+ def _split_apart(self, text):
+ """
+ Split the given string into the components according to the order as
+ given by @L{self._order}.
+ @param text: the string to be split into it's components
+ @returns: dictionary with the components using the item of self._order
+ as keys and the splitted part as value
+ """
+
+ result = {}
+
+ if text.isdigit():
+ components = []
+ while text:
+ if len(text) > 2:
+ components.append(text[:2])
+ text = text[2:]
+ else:
+ components.append(text)
+ text = ''
+
+ for index, value in enumerate(components):
+ result[self._order[index]] = value
+ else:
+ for index in range(len(self._order)):
+ if index < len(self._inter):
+ parts = text.split(self._inter[index], 1)
+ if len(parts) == 2:
+ cut = parts[0] + self._inter[index]
+ else:
+ cut = parts[0]
+ else:
+ parts = [text]
+ cut = text
+
+ result[self._order[index]] = parts[0]
+ text = text[len(cut):]
+ if not text:
+ break
+
+ return result
+
+
# =============================================================================
# Display handler for date fields
# =============================================================================
@@ -319,7 +365,7 @@
today = datetime.date.today()
- parts = self.__split_apart(new_text)
+ parts = self._split_apart(new_text)
result = ''
ncursor = None
for index, item in enumerate(self._order):
@@ -352,46 +398,6 @@
return result, new_cursor
- # -------------------------------------------------------------------------
- # Split a given text into the date components
- # -------------------------------------------------------------------------
-
- def __split_apart(self, text):
-
- result = {}
-
- if text.isdigit():
- components = []
- while text:
- if len(text) > 2:
- components.append(text[:2])
- text = text[2:]
- else:
- components.append(text)
- text = ''
-
- for index, value in enumerate(components):
- result[self._order[index]] = value
- else:
- for index in range(len(self._order)):
- if index < len(self._inter):
- parts = text.split(self._inter[index], 1)
- if len(parts) == 2:
- cut = parts[0] + self._inter[index]
- else:
- cut = parts[0]
- else:
- parts = [text]
- cut = text
-
- result[self._order[index]] = parts[0]
- text = text[len(cut):]
- if not text:
- break
-
- return result
-
-
# =============================================================================
# Display handler for time fields
# =============================================================================
@@ -780,41 +786,37 @@
if self._order[0] == 'year':
return new_text, new_cursor
- today = datetime.date.today().strftime(str(self._input_mask))
+ today = datetime.datetime.today().replace(hour=0, minute=0, second=0,
+ microsecond=0)
- # If the text is a number it must be the first component
- if new_text.isdigit():
- if len(new_text) > 2:
- new_text = new_text[:2] + self._inter[0] + new_text[2:]
- new_cursor += 1
- new_text += self._inter[1] + "%s" % datetime.date.today().year
+ parts = self._split_apart(new_text)
+ result = ''
+ ncursor = None
+ for index, item in enumerate(self._order):
+ if item in parts:
+ value = parts[item]
+ if item in ['day', 'month'] and len(value) > 2:
+ parts[item] = value[:2]
+ parts[self._order[index+1]] = value[2:]
- elif self._order[0] != 'month':
- new_text = new_text + today[today.index(self._inter[0]):]
+ if not value.isdigit():
+ return new_text, new_cursor
- return new_text, new_cursor
+ if (index > 0):
+ result += self._inter[index-1]
- else:
- parts = new_text.split(self._inter[0], 1)
- if len(parts) <> 2:
- return new_text, new_cursor
+ result += parts[item]
+ else:
+ if ncursor is None:
+ ncursor = len(result)
+ if new_text.endswith(self._inter[index-1]):
+ ncursor += len(self._inter[index-1])
- lead = parts[0] + self._inter[0]
- rest = parts[1]
- # If we have nothing after the first intersection symbol, we have
- # to complete the rest
- if not rest:
- if self._order[0] <> 'month':
- new_text = parts[0] + today[today.index(self._inter[0]):]
- return new_text, new_cursor
+ result += self._inter[index-1]
- parts = rest.split(self._inter[1], 1)
- # If we have the first and the second component, stick it together
- if len(parts) == 1:
- lead += parts[0]
- new_cursor = len(lead)
- new_text = lead + today[today.rindex(self._inter[1]):]
+ result += "%s" % getattr(today, item)
- return new_text, new_cursor
+ if ncursor is not None:
+ new_cursor = ncursor
- return new_text, new_cursor
+ return result, new_cursor
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnue] r9371 - trunk/gnue-forms/src/input/displayHandlers,
johannes <=