Index: main/waeup.sirp/branches/ulif-fasttables/src/waeup/sirp/jambtables/browser.py
===================================================================
--- main/waeup.sirp/branches/ulif-fasttables/src/waeup/sirp/jambtables/browser.py	(revision 5273)
+++ main/waeup.sirp/branches/ulif-fasttables/src/waeup/sirp/jambtables/browser.py	(revision 5273)
@@ -0,0 +1,120 @@
+##
+## browser.py
+## Login : <uli@pu.smp.net>
+## Started on  Sun Jun 27 11:03:10 2010 Uli Fouquet
+## $Id$
+## 
+## Copyright (C) 2010 Uli Fouquet
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+## 
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+## 
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##
+"""UI components for JAMB tables.
+"""
+import grok
+
+from waeup.sirp.browser import (
+    WAeUPPage, WAeUPEditFormPage, WAeUPAddFormPage,
+    WAeUPDisplayFormPage, NullValidator)
+from waeup.sirp.jambtables import JAMBDataTable
+from waeup.sirp.jambtables.interfaces import IApplicant, IApplicantContainer
+
+#from zope.formlib.objectwidget import ObjectWidget
+from zope.formlib.sequencewidget import ListSequenceWidget, SequenceDisplayWidget
+from zope.formlib.widget import CustomWidgetFactory
+from waeup.sirp.jambtables.applicants import ResultEntry
+from waeup.sirp.jambtables.resultsentrywidget import (
+    ResultsEntryWidget, ResultsEntryDisplayWidget)
+from waeup.sirp.jambtables.multilistwidget import (
+    MultiListWidget, MultiListDisplayWidget)
+results_widget = CustomWidgetFactory(
+    ResultsEntryWidget, ResultEntry)
+
+results_display_widget = CustomWidgetFactory(
+    ResultsEntryDisplayWidget, ResultEntry)
+
+#list_results_widget = CustomWidgetFactory(
+#    ListSequenceWidget, subwidget=results_widget)
+
+list_results_widget = CustomWidgetFactory(
+    MultiListWidget, subwidget=results_widget)
+
+list_results_display_widget = CustomWidgetFactory(
+    MultiListDisplayWidget, subwidget=results_display_widget)
+
+class ApplicationsPage(WAeUPPage):
+    grok.context(IApplicantContainer)
+    grok.name('index')
+    title = 'Applications'
+    pnav = 1
+    
+    def getApplications(self):
+        """Get a list of all stored applications.
+        """
+        for key, val in self.context.items():
+            url = self.url(val)
+            yield(dict(url=url, name=key))
+
+class AddApplicant(WAeUPAddFormPage):
+    grok.context(IApplicantContainer)
+    grok.name('add')
+    form_fields = grok.AutoFields(IApplicant)
+    form_fields['fst_sit_results'].custom_widget = list_results_widget
+    label = 'Add Applicant'
+    title = 'Add Applicant'
+    pnav = 1
+
+    @grok.action('Add applicant')
+    def addApplicant(self, **data):
+        from waeup.sirp.jambtables.applicants import Applicant
+        applicant = Applicant()
+        self.applyData(applicant, **data)
+        self.context[applicant.reg_no] = applicant
+        self.redirect(self.url(self.context))
+
+class DisplayApplicant(WAeUPDisplayFormPage):
+    grok.context(IApplicant)
+    grok.name('index')
+    form_fields = grok.AutoFields(IApplicant)
+    form_fields['fst_sit_results'].custom_widget = list_results_display_widget
+    label = 'Applicant'
+    title = 'Applicant'
+    pnav = 1
+
+class EditApplicant(WAeUPEditFormPage):
+    grok.context(IApplicant)
+    grok.name('edit')
+    form_fields = grok.AutoFields(IApplicant)
+    form_fields['fst_sit_results'].custom_widget = list_results_widget
+    label = 'Edit Application'
+    title = 'Edit Application'
+    pnav = 1
+
+    @grok.action('Save')
+    def save(self, **data):
+        print "DATA: ", data
+        self.applyData(self.context, **data)
+        print "ENTRY: ", self.context.fst_sit_results
+        self.context._p_changed = True
+        return
+
+    @grok.action('Save and return')
+    def saveAndReturn(self, **data):
+        self.applyData(self.context, **data)
+        self.redirect(self.url(self.context))
+        return
+
+    @grok.action('Cancel', validator=NullValidator)
+    def cancel(self, **data):
+        self.redirect(self.url(self.context))
+        return
Index: main/waeup.sirp/branches/ulif-fasttables/src/waeup/sirp/jambtables/browser_templates/applicationspage.pt
===================================================================
--- main/waeup.sirp/branches/ulif-fasttables/src/waeup/sirp/jambtables/browser_templates/applicationspage.pt	(revision 5273)
+++ main/waeup.sirp/branches/ulif-fasttables/src/waeup/sirp/jambtables/browser_templates/applicationspage.pt	(revision 5273)
@@ -0,0 +1,8 @@
+<div>
+  <div tal:repeat="entry view/getApplications">
+    <a href=""
+       tal:attributes="href entry/url"
+       tal:content="entry/name"
+       >Some Entry</a>
+  </div>
+</div>
