[Zope-Checkins] CVS: Zope3/lib/python/Zope/App/Formulator/Widgets/Browser - CheckBoxWidget.py:1.1.4.2 FileWidget.py:1.1.4.2 IBrowserWidget.py:1.1.4.2 ItemsWidget.py:1.1.4.2 LinesTextAreaWidget.py:1.1.4.2 ListTextAreaWidget.py:1.1.4.2 ListWidget.py:1.1.4.2 MultiItemsWidget.py:1.1.4.2 MultiListWidget.py:1.1.4.2 MultipleCheckBoxWidget.py:1.1.4.2 PasswordWidget.py:1.1.4.2 RadioWidget.py:1.1.4.2 SingleItemsWidget.py:1.1.4.2 TextAreaWidget.py:1.1.4.2 TextWidget.py:1.1.4.2

Jeremy Hylton jeremy@zope.com
Tue, 4 Jun 2002 12:28:19 -0400


Update of /cvs-repository/Zope3/lib/python/Zope/App/Formulator/Widgets/Browser
In directory cvs.zope.org:/tmp/cvs-serv4032/Widgets/Browser

Modified Files:
      Tag: Zope-3x-branch
	CheckBoxWidget.py FileWidget.py IBrowserWidget.py 
	ItemsWidget.py LinesTextAreaWidget.py ListTextAreaWidget.py 
	ListWidget.py MultiItemsWidget.py MultiListWidget.py 
	MultipleCheckBoxWidget.py PasswordWidget.py RadioWidget.py 
	SingleItemsWidget.py TextAreaWidget.py TextWidget.py 
Log Message:
Fix line endings


=== Zope3/lib/python/Zope/App/Formulator/Widgets/Browser/CheckBoxWidget.py 1.1.4.1 => 1.1.4.2 ===
 # 
 ##############################################################################
-"""
-
-$Id$
-"""
-
-from Zope.App.Formulator.Widgets.Browser.BrowserWidget import BrowserWidget
-from Zope.App.Formulator.Widgets.Browser.BrowserWidget import renderElement
-
-
-class CheckBoxWidget(BrowserWidget):
-    """Text widget
-    """
-
-    __implements__ = BrowserWidget.__implements__
-
-    propertyNames = BrowserWidget.propertyNames + \
-                     ['extra', 'default']
-
-    type = 'checkbox'
-    default = 0
-    extra = ''
-
-    
-    def render(self, REQUEST=None):
-        """Renders this widget as HTML using property values in field.
-        """
-        if self._getValueToInsert(REQUEST):
-            return renderElement(self.getValue('tag'),
-                                 type = self.getValue('type'),
-                                 name = self.getContext().id,
-                                 checked = None,
-                                 cssClass = self.getValue('cssClass'),
-                                 extra = self.getValue('extra'))
-        else:
-            return renderElement(self.getValue('tag'),
-                                 type = self.getValue('type'),
-                                 name = self.getContext().id,
-                                 cssClass = self.getValue('cssClass'),
-                                 size = self.getValue('displayWidth'),
-                                 extra = self.getValue('extra'))
+"""
+
+$Id$
+"""
+
+from Zope.App.Formulator.Widgets.Browser.BrowserWidget import BrowserWidget
+from Zope.App.Formulator.Widgets.Browser.BrowserWidget import renderElement
+
+
+class CheckBoxWidget(BrowserWidget):
+    """Text widget
+    """
+
+    __implements__ = BrowserWidget.__implements__
+
+    propertyNames = BrowserWidget.propertyNames + \
+                     ['extra', 'default']
+
+    type = 'checkbox'
+    default = 0
+    extra = ''
+
+    
+    def render(self, REQUEST=None):
+        """Renders this widget as HTML using property values in field.
+        """
+        if self._getValueToInsert(REQUEST):
+            return renderElement(self.getValue('tag'),
+                                 type = self.getValue('type'),
+                                 name = self.getContext().id,
+                                 checked = None,
+                                 cssClass = self.getValue('cssClass'),
+                                 extra = self.getValue('extra'))
+        else:
+            return renderElement(self.getValue('tag'),
+                                 type = self.getValue('type'),
+                                 name = self.getContext().id,
+                                 cssClass = self.getValue('cssClass'),
+                                 size = self.getValue('displayWidth'),
+                                 extra = self.getValue('extra'))


=== Zope3/lib/python/Zope/App/Formulator/Widgets/Browser/FileWidget.py 1.1.4.1 => 1.1.4.2 ===
 # 
 ##############################################################################
-"""
-
-$Id$
-"""
-
-from TextWidget import TextWidget
-from Zope.App.Formulator.Widgets.Browser.BrowserWidget import renderElement
-
-
-class FileWidget(TextWidget):
-
-    __implements__ = TextWidget.__implements__
-
-    type = 'file'
-
-
-    def render(self, REQUEST=None):
-        """Renders this widget as HTML using property values in field.
-        """
-        displayMaxWidth = self.getValue('displayMaxWidth') or 0
-        if displayMaxWidth > 0:
-            return renderElement(self.getValue('tag'),
-                                 type = self.getValue('type'),
-                                 name = self.getContext().id,
-                                 cssClass = self.getValue('cssClass'),
-                                 size = self.getValue('displayWidth'),
-                                 maxlength = displayMaxWidth,
-                                 extra = self.getValue('extra'))
-        else:
-            return renderElement(self.getValue('tag'),
-                                 type = self.getValue('type'),
-                                 name = self.getContext().id,
-                                 cssClass = self.getValue('cssClass'),
-                                 size = self.getValue('displayWidth'),
-                                 extra = self.getValue('extra'))
+"""
+
+$Id$
+"""
+
+from TextWidget import TextWidget
+from Zope.App.Formulator.Widgets.Browser.BrowserWidget import renderElement
+
+
+class FileWidget(TextWidget):
+
+    __implements__ = TextWidget.__implements__
+
+    type = 'file'
+
+
+    def render(self, REQUEST=None):
+        """Renders this widget as HTML using property values in field.
+        """
+        displayMaxWidth = self.getValue('displayMaxWidth') or 0
+        if displayMaxWidth > 0:
+            return renderElement(self.getValue('tag'),
+                                 type = self.getValue('type'),
+                                 name = self.getContext().id,
+                                 cssClass = self.getValue('cssClass'),
+                                 size = self.getValue('displayWidth'),
+                                 maxlength = displayMaxWidth,
+                                 extra = self.getValue('extra'))
+        else:
+            return renderElement(self.getValue('tag'),
+                                 type = self.getValue('type'),
+                                 name = self.getContext().id,
+                                 cssClass = self.getValue('cssClass'),
+                                 size = self.getValue('displayWidth'),
+                                 extra = self.getValue('extra'))


=== Zope3/lib/python/Zope/App/Formulator/Widgets/Browser/IBrowserWidget.py 1.1.4.1 => 1.1.4.2 ===
 # 
 ##############################################################################
-"""
-
-$Id$
-"""
-
-from Interface import Interface
-
-
-class IBrowserWidget(Interface):
-    """A field widget contains all the properties that are required
-       to represent a field. Properties include css_sheet, 
-       default value and so on.
-
-    """
-
-
-    def render(field, key, value, REQUEST):
-        """Renders this widget as HTML using property values in field.
-        """
-
-        
-    def render_hidden(field, key, value, REQUEST):
-        """Renders this widget as a hidden field.
-        """
-        
+"""
+
+$Id$
+"""
+
+from Interface import Interface
+
+
+class IBrowserWidget(Interface):
+    """A field widget contains all the properties that are required
+       to represent a field. Properties include css_sheet, 
+       default value and so on.
+
+    """
+
+
+    def render(field, key, value, REQUEST):
+        """Renders this widget as HTML using property values in field.
+        """
+
+        
+    def render_hidden(field, key, value, REQUEST):
+        """Renders this widget as a hidden field.
+        """
+        


=== Zope3/lib/python/Zope/App/Formulator/Widgets/Browser/ItemsWidget.py 1.1.4.1 => 1.1.4.2 ===
 # 
 ##############################################################################
-"""
-
-$Id$
-"""
-
-from Widget import Widget
-
-class ItemsWidget(Widget):
-    """A widget that has a number of items in it.
-    """
-    
-    items = []
-
+"""
+
+$Id$
+"""
+
+from Widget import Widget
+
+class ItemsWidget(Widget):
+    """A widget that has a number of items in it.
+    """
+    
+    items = []
+


=== Zope3/lib/python/Zope/App/Formulator/Widgets/Browser/LinesTextAreaWidget.py 1.1.4.1 => 1.1.4.2 ===
 # 
 ##############################################################################
-"""
-
-$Id$
-"""
-
-from TextAreaWidget import TextAreaWidget
-
-
-class LinesTextAreaWidget(TextAreaWidget):
-
-    default = []
-
-    def render(self, REQUEST=None):
-        value = string.join(value, "\n")
-        return TextAreaWidget.render(self, REQUEST)
+"""
+
+$Id$
+"""
+
+from TextAreaWidget import TextAreaWidget
+
+
+class LinesTextAreaWidget(TextAreaWidget):
+
+    default = []
+
+    def render(self, REQUEST=None):
+        value = string.join(value, "\n")
+        return TextAreaWidget.render(self, REQUEST)


=== Zope3/lib/python/Zope/App/Formulator/Widgets/Browser/ListTextAreaWidget.py 1.1.4.1 => 1.1.4.2 ===
 # 
 ##############################################################################
-"""
-
-$Id$
-"""
-
-from Zope.App.Formulator.Widgets.Browser.TextAreaWidget import TextAreaWidget
-from Zope.App.Formulator.Widgets.Browser.BrowserWidget import renderElement
-
-
-class ListTextAreaWidget(TextAreaWidget):
-    """ListTextArea widget
-    """
-
-    __implements__ = TextAreaWidget.__implements__
-
-    propertyNames = TextAreaWidget.propertyNames + \
-                     ['extra', 'default']
-
-    default = []
-    extra = ''
-
-    
-    def render(self, REQUEST=None):
-        """Renders this widget as HTML using property values in field.
-        """
-        lines = []
-        for element_text, element_value in value:
-            lines.append("%s | %s" % (element_text, element_value))
-        return Widget.TextAreaWidget.render(self, field, key,
-                                            string.join(lines, '\n'),
-                                            REQUEST)
+"""
+
+$Id$
+"""
+
+from Zope.App.Formulator.Widgets.Browser.TextAreaWidget import TextAreaWidget
+from Zope.App.Formulator.Widgets.Browser.BrowserWidget import renderElement
+
+
+class ListTextAreaWidget(TextAreaWidget):
+    """ListTextArea widget
+    """
+
+    __implements__ = TextAreaWidget.__implements__
+
+    propertyNames = TextAreaWidget.propertyNames + \
+                     ['extra', 'default']
+
+    default = []
+    extra = ''
+
+    
+    def render(self, REQUEST=None):
+        """Renders this widget as HTML using property values in field.
+        """
+        lines = []
+        for element_text, element_value in value:
+            lines.append("%s | %s" % (element_text, element_value))
+        return Widget.TextAreaWidget.render(self, field, key,
+                                            string.join(lines, '\n'),
+                                            REQUEST)


=== Zope3/lib/python/Zope/App/Formulator/Widgets/Browser/ListWidget.py 1.1.4.1 => 1.1.4.2 ===
 # 
 ##############################################################################
-"""
-
-$Id$
-"""
-
-from SingleItemsWidget import SingleItemsWidget
-
-
-class ListWidget(SingleItemsWidget):
-    """List widget.
-    """
-    __implements__ = SingleItemsWidget.__implements__
-
-    property_names = Widget.property_names +\
-                     ['firstItem', 'items', 'size', 'extra']
-    size = 5
-
-    def render(self, REQUEST=None):
-
-        renderedItems = self.renderItems(field, key, value, REQUEST)
-
-        return render_element('select',
-                              name='',
-                              cssClass=field.get_value('cssClass'),
-                              size=field.get_value('size'),
-                              contents=string.join(renderedItems, "\n"),
-                              extra=field.get_value('extra'))
-
-    
-    def renderItem(self, text, value, key, css_class):
-        return render_element('option', contents=text, value=value)
-
-
-    def renderSelectedItem(self, text, value, key, css_class):
-        return render_element('option', contents=text, value=value,
-                              selected=None)
+"""
+
+$Id$
+"""
+
+from SingleItemsWidget import SingleItemsWidget
+
+
+class ListWidget(SingleItemsWidget):
+    """List widget.
+    """
+    __implements__ = SingleItemsWidget.__implements__
+
+    property_names = Widget.property_names +\
+                     ['firstItem', 'items', 'size', 'extra']
+    size = 5
+
+    def render(self, REQUEST=None):
+
+        renderedItems = self.renderItems(field, key, value, REQUEST)
+
+        return render_element('select',
+                              name='',
+                              cssClass=field.get_value('cssClass'),
+                              size=field.get_value('size'),
+                              contents=string.join(renderedItems, "\n"),
+                              extra=field.get_value('extra'))
+
+    
+    def renderItem(self, text, value, key, css_class):
+        return render_element('option', contents=text, value=value)
+
+
+    def renderSelectedItem(self, text, value, key, css_class):
+        return render_element('option', contents=text, value=value,
+                              selected=None)


=== Zope3/lib/python/Zope/App/Formulator/Widgets/Browser/MultiItemsWidget.py 1.1.4.1 => 1.1.4.2 ===
 # 
 ##############################################################################
-"""
-
-$Id$
-"""
-
-from ItemsWidget import ItemsWidget
-from types import ListType
-
-        
-class MultiItemsWidget(ItemsWidget):
-    """A widget with a number of items that has multiple selectable
-    items.
-    """
-    default = []
-        
-    def render_items(self, field, key, value, REQUEST):
-        # need to deal with single item selects
-        if not isinstance(values, ListType):
-            value = [value]
-        items = field.get_value('items')
-        css_class = field.get_value('css_class')
-        rendered_items = []
-        for item in items:
-            try:
-                item_text, item_value = item
-            except ValueError:
-                item_text = item
-                item_value = item
-
-            if item_value in value:
-                rendered_item = self.render_selected_item(item_text,
-                                                          item_value,
-                                                          key,
-                                                          css_class)
-            else:
-                rendered_item = self.render_item(item_text,
-                                                 item_value,
-                                                 key,
-                                                 css_class)
-
-            rendered_items.append(rendered_item)
-
-        return rendered_items
+"""
+
+$Id$
+"""
+
+from ItemsWidget import ItemsWidget
+from types import ListType
+
+        
+class MultiItemsWidget(ItemsWidget):
+    """A widget with a number of items that has multiple selectable
+    items.
+    """
+    default = []
+        
+    def render_items(self, field, key, value, REQUEST):
+        # need to deal with single item selects
+        if not isinstance(values, ListType):
+            value = [value]
+        items = field.get_value('items')
+        css_class = field.get_value('css_class')
+        rendered_items = []
+        for item in items:
+            try:
+                item_text, item_value = item
+            except ValueError:
+                item_text = item
+                item_value = item
+
+            if item_value in value:
+                rendered_item = self.render_selected_item(item_text,
+                                                          item_value,
+                                                          key,
+                                                          css_class)
+            else:
+                rendered_item = self.render_item(item_text,
+                                                 item_value,
+                                                 key,
+                                                 css_class)
+
+            rendered_items.append(rendered_item)
+
+        return rendered_items


=== Zope3/lib/python/Zope/App/Formulator/Widgets/Browser/MultiListWidget.py 1.1.4.1 => 1.1.4.2 ===
 # 
 ##############################################################################
-"""
-
-$Id$
-"""
-
-from MultiItemsWidget import MultiItemsWidget
-
-
-class MultiListWidget(MultiItemsWidget):
-    """List widget with multiple select.
-    """
-    property_names = Widget.property_names +\
-                     ['items', 'size', 'extra']
-    
-    size = 5
-
-    def render(self, REQUEST=None):
-        rendered_items = self.render_items(field, key, value, REQUEST)
-
-        return render_element('select',
-                              name=key,
-                              multiple=None,
-                              css_class=field.get_value('css_class'),
-                              size=field.get_value('size'),
-                              contents=string.join(rendered_items, "\n"),
-                              extra=field.get_value('extra'))
-    
-    def render_item(self, text, value, key, css_class):
-        return render_element('option', contents=text, value=value)
-
-    def render_selected_item(self, text, value, key, css_class):
-        return render_element('option', contents=text, value=value,
-                              selected=None)
-    
-MultiListWidgetInstance = MultiListWidget()
+"""
+
+$Id$
+"""
+
+from MultiItemsWidget import MultiItemsWidget
+
+
+class MultiListWidget(MultiItemsWidget):
+    """List widget with multiple select.
+    """
+    property_names = Widget.property_names +\
+                     ['items', 'size', 'extra']
+    
+    size = 5
+
+    def render(self, REQUEST=None):
+        rendered_items = self.render_items(field, key, value, REQUEST)
+
+        return render_element('select',
+                              name=key,
+                              multiple=None,
+                              css_class=field.get_value('css_class'),
+                              size=field.get_value('size'),
+                              contents=string.join(rendered_items, "\n"),
+                              extra=field.get_value('extra'))
+    
+    def render_item(self, text, value, key, css_class):
+        return render_element('option', contents=text, value=value)
+
+    def render_selected_item(self, text, value, key, css_class):
+        return render_element('option', contents=text, value=value,
+                              selected=None)
+    
+MultiListWidgetInstance = MultiListWidget()


=== Zope3/lib/python/Zope/App/Formulator/Widgets/Browser/MultipleCheckBoxWidget.py 1.1.4.1 => 1.1.4.2 ===
 # 
 ##############################################################################
-"""
-
-$Id$
-"""
-
-from MultiItemsWidget import MultiItemsWidget
-
-
-class MultiCheckBoxWidget(MultiItemsWidget):
-    """multiple checkbox widget.
-    """
-    property_names = Widget.property_names +\
-                     ['items', 'orientation']
-    
-    orientation = "vertical"
-                                   
-    def render(self, REQUEST=None):
-        rendered_items = self.render_items(field, key, value, REQUEST)
-        orientation = field.get_value('orientation')
-        if orientation == 'horizontal':
-            return string.join(rendered_items, "  ")
-        else:
-            return string.join(rendered_items, "<br />")
-
-        
-    def render_item(self, text, value, key, css_class):
-        return render_element('input',
-                              type="checkbox",
-                              css_class=css_class,
-                              name=key,
-                              value=value) + text
-    
-
-    def render_selected_item(self, text, value, key, css_class):
-        return render_element('input',
-                              type="checkbox",
-                              css_class=css_class,
-                              name=key,
-                              value=value,
-                              checked=None) + text
+"""
+
+$Id$
+"""
+
+from MultiItemsWidget import MultiItemsWidget
+
+
+class MultiCheckBoxWidget(MultiItemsWidget):
+    """multiple checkbox widget.
+    """
+    property_names = Widget.property_names +\
+                     ['items', 'orientation']
+    
+    orientation = "vertical"
+                                   
+    def render(self, REQUEST=None):
+        rendered_items = self.render_items(field, key, value, REQUEST)
+        orientation = field.get_value('orientation')
+        if orientation == 'horizontal':
+            return string.join(rendered_items, "&nbsp;&nbsp;")
+        else:
+            return string.join(rendered_items, "<br />")
+
+        
+    def render_item(self, text, value, key, css_class):
+        return render_element('input',
+                              type="checkbox",
+                              css_class=css_class,
+                              name=key,
+                              value=value) + text
+    
+
+    def render_selected_item(self, text, value, key, css_class):
+        return render_element('input',
+                              type="checkbox",
+                              css_class=css_class,
+                              name=key,
+                              value=value,
+                              checked=None) + text


=== Zope3/lib/python/Zope/App/Formulator/Widgets/Browser/PasswordWidget.py 1.1.4.1 => 1.1.4.2 ===
 # 
 ##############################################################################
-"""
-
-$Id$
-"""
-
-from TextWidget import TextWidget
-
-
-class PasswordWidget(TextWidget):
-    
-    def render(self, REQUEST=None):
-        """Render password input field.
-        """
-        display_maxwidth = field.get_value('display_maxwidth') or 0
-        if display_maxwidth > 0:
-            return render_element("input",
-                                  type="password",
-                                  name=key,
-                                  css_class=field.get_value('css_class'),
-                                  value=value,
-                                  size=field.get_value('display_width'),
-                                  maxlength=display_maxwidth,
-                                  extra=field.get_value('extra'))
-        else:
-            return render_element("input",
-                                  type="password",
-                                  name=key,
-                                  css_class=field.get_value('css_class'),
-                                  value=value,
-                                  size=field.get_value('display_width'),
-                                  extra=field.get_value('extra'))
+"""
+
+$Id$
+"""
+
+from TextWidget import TextWidget
+
+
+class PasswordWidget(TextWidget):
+    
+    def render(self, REQUEST=None):
+        """Render password input field.
+        """
+        display_maxwidth = field.get_value('display_maxwidth') or 0
+        if display_maxwidth > 0:
+            return render_element("input",
+                                  type="password",
+                                  name=key,
+                                  css_class=field.get_value('css_class'),
+                                  value=value,
+                                  size=field.get_value('display_width'),
+                                  maxlength=display_maxwidth,
+                                  extra=field.get_value('extra'))
+        else:
+            return render_element("input",
+                                  type="password",
+                                  name=key,
+                                  css_class=field.get_value('css_class'),
+                                  value=value,
+                                  size=field.get_value('display_width'),
+                                  extra=field.get_value('extra'))


=== Zope3/lib/python/Zope/App/Formulator/Widgets/Browser/RadioWidget.py 1.1.4.1 => 1.1.4.2 ===
 # 
 ##############################################################################
-"""
-
-$Id$
-"""
-
-from SingleItemsWidget import SingleItemsWidget
-
-
-class RadioWidget(SingleItemsWidget):
-    """radio buttons widget.
-    """
-    property_names = Widget.property_names +\
-                     ['first_item', 'items', 'orientation']
-    
-    orientation = "vertical"
-                                   
-    def render(self, REQUEST=None):
-        rendered_items = self.render_items(field, key, value, REQUEST)
-        orientation = field.get_value('orientation')
-        if orientation == 'horizontal':
-            return string.join(rendered_items, "&nbsp;&nbsp;")
-        else:
-            return string.join(rendered_items, "<br />")
-
-        
-    def render_item(self, text, value, key, css_class):
-        return render_element('input',
-                              type="radio",
-                              css_class=css_class,
-                              name=key,
-                              value=value) + text
-    
-
-    def render_selected_item(self, text, value, key, css_class):
-        return render_element('input',
-                              type="radio",
-                              css_class=css_class,
-                              name=key,
-                              value=value,
-                              checked=None) + text
-       
+"""
+
+$Id$
+"""
+
+from SingleItemsWidget import SingleItemsWidget
+
+
+class RadioWidget(SingleItemsWidget):
+    """radio buttons widget.
+    """
+    property_names = Widget.property_names +\
+                     ['first_item', 'items', 'orientation']
+    
+    orientation = "vertical"
+                                   
+    def render(self, REQUEST=None):
+        rendered_items = self.render_items(field, key, value, REQUEST)
+        orientation = field.get_value('orientation')
+        if orientation == 'horizontal':
+            return string.join(rendered_items, "&nbsp;&nbsp;")
+        else:
+            return string.join(rendered_items, "<br />")
+
+        
+    def render_item(self, text, value, key, css_class):
+        return render_element('input',
+                              type="radio",
+                              css_class=css_class,
+                              name=key,
+                              value=value) + text
+    
+
+    def render_selected_item(self, text, value, key, css_class):
+        return render_element('input',
+                              type="radio",
+                              css_class=css_class,
+                              name=key,
+                              value=value,
+                              checked=None) + text
+       


=== Zope3/lib/python/Zope/App/Formulator/Widgets/Browser/SingleItemsWidget.py 1.1.4.1 => 1.1.4.2 ===
 # 
 ##############################################################################
-"""
-
-$Id$
-"""
-
-from ItemsWidget import ItemsWidget
-
-
-class SingleItemsWidget(ItemsWidget):
-    """A widget with a number of items that has only a single
-    selectable item.
-    """
-    default = ""
-    first_item = 0    
-
-
-    def render_items(self, field, key, value, REQUEST):
-        # get items
-        items = field.get_value('items')
-    
-        # check if we want to select first item
-        if not value and field.get_value('first_item') and len(items) > 0:
-            try:
-                text, value = items[0]
-            except ValueError:
-                value = items[0]
-                
-        css_class = field.get_value('css_class')
-        
-        # FIXME: what if we run into multiple items with same value?
-        rendered_items = []
-        for item in items:
-            try:
-                item_text, item_value = item
-            except ValueError:
-                item_text = item
-                item_value = item
-
-            if item_value == value:
-                rendered_item = self.render_selected_item(item_text,
-                                                          item_value,
-                                                          key,
-                                                          css_class)
-            else:
-                rendered_item = self.render_item(item_text,
-                                                 item_value,
-                                                 key,
-                                                 css_class)
-
-            rendered_items.append(rendered_item)
-
-        return rendered_items
+"""
+
+$Id$
+"""
+
+from ItemsWidget import ItemsWidget
+
+
+class SingleItemsWidget(ItemsWidget):
+    """A widget with a number of items that has only a single
+    selectable item.
+    """
+    default = ""
+    first_item = 0    
+
+
+    def render_items(self, field, key, value, REQUEST):
+        # get items
+        items = field.get_value('items')
+    
+        # check if we want to select first item
+        if not value and field.get_value('first_item') and len(items) > 0:
+            try:
+                text, value = items[0]
+            except ValueError:
+                value = items[0]
+                
+        css_class = field.get_value('css_class')
+        
+        # FIXME: what if we run into multiple items with same value?
+        rendered_items = []
+        for item in items:
+            try:
+                item_text, item_value = item
+            except ValueError:
+                item_text = item
+                item_value = item
+
+            if item_value == value:
+                rendered_item = self.render_selected_item(item_text,
+                                                          item_value,
+                                                          key,
+                                                          css_class)
+            else:
+                rendered_item = self.render_item(item_text,
+                                                 item_value,
+                                                 key,
+                                                 css_class)
+
+            rendered_items.append(rendered_item)
+
+        return rendered_items


=== Zope3/lib/python/Zope/App/Formulator/Widgets/Browser/TextAreaWidget.py 1.1.4.1 => 1.1.4.2 ===
 # 
 ##############################################################################
-"""
-
-$Id$
-"""
-
-from Zope.App.Formulator.Widgets.Browser.BrowserWidget import BrowserWidget
-from Zope.App.Formulator.Widgets.Browser.BrowserWidget import renderElement
-
-
-class TextAreaWidget(BrowserWidget):
-    """Textarea widget
-    """
-    propertyNames = BrowserWidget.propertyNames +\
-                     ['width', 'height', 'extra']
-    
-    default = ""
-    width = 80
-    height = 15
-    extra=""
-    
-    def render(self, REQUEST=None):
-        return renderElement("textarea",
-                             name=self.getContext().id,
-                             css_class=self.getValue('cssClass'),
-                             cols=self.getValue('width'),
-                             rows=self.getValue('height'),
-                             contents=self._getValueToInsert(REQUEST),
-                             extra=self.getValue('extra'))
-
+"""
+
+$Id$
+"""
+
+from Zope.App.Formulator.Widgets.Browser.BrowserWidget import BrowserWidget
+from Zope.App.Formulator.Widgets.Browser.BrowserWidget import renderElement
+
+
+class TextAreaWidget(BrowserWidget):
+    """Textarea widget
+    """
+    propertyNames = BrowserWidget.propertyNames +\
+                     ['width', 'height', 'extra']
+    
+    default = ""
+    width = 80
+    height = 15
+    extra=""
+    
+    def render(self, REQUEST=None):
+        return renderElement("textarea",
+                             name=self.getContext().id,
+                             css_class=self.getValue('cssClass'),
+                             cols=self.getValue('width'),
+                             rows=self.getValue('height'),
+                             contents=self._getValueToInsert(REQUEST),
+                             extra=self.getValue('extra'))
+


=== Zope3/lib/python/Zope/App/Formulator/Widgets/Browser/TextWidget.py 1.1.4.1 => 1.1.4.2 ===
 # 
 ##############################################################################
-"""
-
-$Id$
-"""
-
-from Zope.App.Formulator.Widgets.Browser.BrowserWidget import BrowserWidget
-from Zope.App.Formulator.Widgets.Browser.BrowserWidget import renderElement
-
-
-class TextWidget(BrowserWidget):
-    """Text widget
-    """
-
-    __implements__ = BrowserWidget.__implements__
-
-    propertyNames = BrowserWidget.propertyNames + \
-                     ['displayWidth', 'displayMaxWidth', 'extra', 'default']
-
-    default = ''
-    displayWidth = 20
-    displayMaxWidth = ''
-    extra = ''
-
-    
-    def render(self, REQUEST=None):
-        """Renders this widget as HTML using property values in field.
-        """
-        displayMaxWidth = self.getValue('displayMaxWidth') or 0
-        if displayMaxWidth > 0:
-            return renderElement(self.getValue('tag'),
-                                 type = self.getValue('type'),
-                                 name = self.getContext().id,
-                                 value = self._getValueToInsert(REQUEST),
-                                 cssClass = self.getValue('cssClass'),
-                                 size = self.getValue('displayWidth'),
-                                 maxlength = displayMaxWidth,
-                                 extra = self.getValue('extra'))
-        else:
-            return renderElement(self.getValue('tag'),
-                                 type = self.getValue('type'),
-                                 name = self.getContext().id,
-                                 value = self._getValueToInsert(REQUEST),
-                                 cssClass = self.getValue('cssClass'),
-                                 size = self.getValue('displayWidth'),
-                                 extra = self.getValue('extra'))
+"""
+
+$Id$
+"""
+
+from Zope.App.Formulator.Widgets.Browser.BrowserWidget import BrowserWidget
+from Zope.App.Formulator.Widgets.Browser.BrowserWidget import renderElement
+
+
+class TextWidget(BrowserWidget):
+    """Text widget
+    """
+
+    __implements__ = BrowserWidget.__implements__
+
+    propertyNames = BrowserWidget.propertyNames + \
+                     ['displayWidth', 'displayMaxWidth', 'extra', 'default']
+
+    default = ''
+    displayWidth = 20
+    displayMaxWidth = ''
+    extra = ''
+
+    
+    def render(self, REQUEST=None):
+        """Renders this widget as HTML using property values in field.
+        """
+        displayMaxWidth = self.getValue('displayMaxWidth') or 0
+        if displayMaxWidth > 0:
+            return renderElement(self.getValue('tag'),
+                                 type = self.getValue('type'),
+                                 name = self.getContext().id,
+                                 value = self._getValueToInsert(REQUEST),
+                                 cssClass = self.getValue('cssClass'),
+                                 size = self.getValue('displayWidth'),
+                                 maxlength = displayMaxWidth,
+                                 extra = self.getValue('extra'))
+        else:
+            return renderElement(self.getValue('tag'),
+                                 type = self.getValue('type'),
+                                 name = self.getContext().id,
+                                 value = self._getValueToInsert(REQUEST),
+                                 cssClass = self.getValue('cssClass'),
+                                 size = self.getValue('displayWidth'),
+                                 extra = self.getValue('extra'))