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 SearchWidgetFactory class specializes in creating the appropiate 00032 # search widget for a given type. 00033 00034 class SearchWidgetFactory: 00035 widgets = {} 00036 00037 ## @brief Scans for all available search widgets. 00038 @staticmethod 00039 def scan(): 00040 # Scan only once 00041 if SearchWidgetFactory.widgets: 00042 return 00043 # Search for all available views 00044 Plugins.scan( 'Koo.Search', 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, name, parent, attributes): 00049 SearchWidgetFactory.scan() 00050 if not widgetType in SearchWidgetFactory.widgets: 00051 print "Search widget '%s' not available" % widgetType 00052 return None 00053 00054 widgetClass = SearchWidgetFactory.widgets[ widgetType ] 00055 return widgetClass(name, parent, 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 SearchWidgetFactory.widgets[ name ] = widget 00062