Changeset 306

Show
Ignore:
Timestamp:
06/20/08 16:28:41 (7 months ago)
Author:
matt
Message:

Allow the addition of new form items on the fly, relative to existing items.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/formal/examples/main.py

    r304 r306  
    2828    'formal.examples.richtextarea.RichTextAreaFormPage', 
    2929    'formal.examples.sequences.SequencesFormPage', 
     30    'formal.examples.dynamic.DynamicFormPage', 
    3031    ] 
    3132 
  • trunk/formal/form.py

    r303 r306  
    290290        # Forward to FormItems methods 
    291291        self.add = self.items.add 
     292        self.addLast = self.items.addLast 
     293        self.addFirst = self.items.addFirst 
     294        self.addBefore = self.items.addBefore 
     295        self.addAfter = self.items.addAfter 
    292296        self.getItemByName = self.items.getItemByName 
    293297 
     
    367371        # Forward to FormItems methods 
    368372        self.add = self.items.add 
     373        self.addLast = self.items.addLast 
     374        self.addFirst = self.items.addFirst 
     375        self.addBefore = self.items.addBefore 
     376        self.addAfter = self.items.addAfter 
    369377        self.getItemByName = self.items.getItemByName 
    370378 
     
    462470 
    463471    def add(self, item): 
     472        return self.__add(item, self.items.append) 
     473 
     474 
     475    def addLast(self, item, ref=None): 
     476        if ref is not None: 
     477            return self.__refToItem(ref).addLast(item) 
     478        return self.add(item) 
     479 
     480 
     481    def addFirst(self, item, ref=None): 
     482        if ref is not None: 
     483            return self.__refToItem(ref).addFirst(item) 
     484        return self.__add(item, lambda item: self.items.insert(0, item)) 
     485 
     486 
     487    def addBefore(self, item, ref): 
     488        ref = self.__refToItem(ref) 
     489        if ref.itemParent is not self.itemParent: 
     490            return ref.itemParent.addBefore(item, ref) 
     491        pos = self.items.index(ref) 
     492        return self.__add(item, lambda item: self.items.insert(pos, item)) 
     493 
     494 
     495    def addAfter(self, item, ref): 
     496        ref = self.__refToItem(ref) 
     497        if ref.itemParent is not self.itemParent: 
     498            return ref.itemParent.addAfter(item, ref) 
     499        pos = self.items.index(ref) 
     500        return self.__add(item, lambda item: self.items.insert(pos+1, item)) 
     501 
     502 
     503    def __refToItem(self, ref): 
     504        if isinstance(ref, (str, unicode)): 
     505            return self.getItemByName(ref) 
     506        return ref 
     507 
     508 
     509    def __add(self, item, adder): 
    464510        # Check the item name is unique 
    465511        if item.name in [i.name for i in self.items]: 
     
    467513                    (item.name, self)) 
    468514        # Add to child items and set self the parent 
    469         self.items.append(item) 
     515        adder(item) 
    470516        item.setItemParent(self.itemParent) 
    471517        return item 
  • trunk/setup.py

    r305 r306  
    33setup( 
    44    name='formal', 
    5     version='0.17', 
     5    version='0.18', 
    66    description='HTML forms framework for Nevow', 
    77    author='Matt Goodall',