new_contents: import datetime
  
  import gtk
  from sqlobject import connectionForURI, SQLObject, StringCol, DateCol, ForeignKey, AND
  
  from kiwi.enums import SearchFilterPosition
  from kiwi.db.sqlobj import SQLObjectQueryExecuter
  from kiwi.ui.objectlist import Column
  from kiwi.ui.search import (SearchContainer, DateSearchFilter,
                              ComboSearchFilter)
  
  __connection__ = connectionForURI('sqlite:///:memory:')
  
  class Category(SQLObject):
      name = StringCol()
  Category.createTable()
  
  class Task(SQLObject):
      title = StringCol()
      category = ForeignKey('Category')
      date = DateCol()
  Task.createTable()
  
  for category in ['Work',
                   'Home',
                   'School']:
      Category(name=category)
  
  work = Category.selectBy(name='Work')[0]
  home = Category.selectBy(name='Home')[0]
  school = Category.selectBy(name='School')[0]
  
  today = datetime.date.today()
  for title, category, date in [
      ('Upgrade web server',  work, today - datetime.timedelta(1)),
      ('Buy new light bulbs', home, today - datetime.timedelta(40)),
      ('Set stock options',   home, today - datetime.timedelta(30)),
      ('Pass geology test',   school, today - datetime.timedelta(23)),
      ('Extend student loan', school, today - datetime.timedelta(10)),
      ('Hire new secretary',  work, today - datetime.timedelta(5)),
      ('Complete GTA',        home, today),
      ('Train interns',       work, today)]:
  
      Task(title=title,
           category=category,
           date=date)
  
  class TaskViewer(gtk.Window):
      def __init__(self):
          gtk.Window.__init__(self)
          self.set_title('Tasks')
          self.search = SearchContainer(self.get_columns())
          self.add(self.search)
          self._setup_searching()
          self._create_filters()
  
      def _setup_searching(self):
          self.query = SQLObjectQueryExecuter()
          self.query.set_query(self._executer_query)
          self.search.set_query_executer(self.query)
          self.query.set_table(Task)
  
      def _create_filters(self):
          categories = [(c.name, c.id) for c in Category.select()]
          categories.insert(0, ('Any', None))
          self.category_filter = ComboSearchFilter(
              'Category:', categories)
          self.search.add_filter(
              self.category_filter,
              SearchFilterPosition.TOP, ['categoryID'])
  
          self.search.set_text_field_columns(['title'])
          self.search.add_filter(DateSearchFilter('Date:'),
                                 columns=['date'])
  
      def _executer_query(self, query, conn):
          category_id = self.category_filter.get_state().value
          if category_id is not None:
              query = AND(Category.q.id == category_id, query)
          return Task.select(query)
  
      def get_columns(self):
          return [
              Column('title', data_type=str, title='Title',
                     expand=True),
              Column('category.name', title='Category'),
              Column('date', data_type=datetime.date, width=90)
              ]
  
  view = TaskViewer()
  view.set_size_request(-1, 400)
  view.connect('delete-event', gtk.main_quit)
  view.show_all()
  gtk.main()
  
subject: Add a new tasks example