00001 ############################################################################## 00002 # 00003 # Copyright (c) 2008 Albert Cervera i Areny <albert@nan-tic.com> 00004 # 00005 # WARNING: This program as such is intended to be used by professional 00006 # programmers who take the whole responsability of assessing all potential 00007 # consequences resulting from its eventual inadequacies and bugs 00008 # End users who are looking for a ready-to-use solution with commercial 00009 # garantees and support are strongly adviced to contract a Free Software 00010 # Service Company 00011 # 00012 # This program is Free Software; you can redistribute it and/or 00013 # modify it under the terms of the GNU General Public License 00014 # as published by the Free Software Foundation; either version 2 00015 # of the License, or (at your option) any later version. 00016 # 00017 # This program is distributed in the hope that it will be useful, 00018 # but WITHOUT ANY WARRANTY; without even the implied warranty of 00019 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00020 # GNU General Public License for more details. 00021 # 00022 # You should have received a copy of the GNU General Public License 00023 # along with this program; if not, write to the Free Software 00024 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00025 # 00026 ############################################################################## 00027 00028 from Koo.Common import Plugins 00029 import os 00030 00031 ## @brief The FieldWidgetFactory class specializes in creating the appropiate 00032 # widget for a given type. 00033 00034 class FieldWidgetFactory: 00035 widgets = {} 00036 00037 ## @brief Scans for all available widgets. 00038 @staticmethod 00039 def scan(): 00040 # Scan only once 00041 if FieldWidgetFactory.widgets: 00042 return 00043 # Search for all available views 00044 Plugins.scan( 'Koo.Fields', os.path.abspath(os.path.dirname(__file__)) ) 00045 00046 ## @brief Creates a new widget given type, parent and attributes. 00047 @staticmethod 00048 def create(widgetType, parent, view, attributes): 00049 FieldWidgetFactory.scan() 00050 if not widgetType in FieldWidgetFactory.widgets: 00051 print "Widget '%s' not available" % widgetType 00052 return None 00053 00054 widgetClass = FieldWidgetFactory.widgets[ widgetType ] 00055 return widgetClass(parent, view, attributes) 00056 00057 ## @brief Registers a new widget, given it's name (or type) and reference 00058 # to the class. 00059 @staticmethod 00060 def register(name, widget): 00061 FieldWidgetFactory.widgets[ name ] = widget 00062