diff --git a/livesupport/modules/widgets/etc/Makefile.in b/livesupport/modules/widgets/etc/Makefile.in index dfe4f05ad..62b38d625 100644 --- a/livesupport/modules/widgets/etc/Makefile.in +++ b/livesupport/modules/widgets/etc/Makefile.in @@ -21,7 +21,7 @@ # # # Author : $Author: maroy $ -# Version : $Revision: 1.3 $ +# Version : $Revision: 1.4 $ # Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/widgets/etc/Makefile.in,v $ # # @configure_input@ @@ -77,6 +77,7 @@ TEST_XSLT = ../etc/testResultToHtml.xsl WIDGETS_LIB = livesupport_widgets WIDGETS_LIB_FILE = ${LIB_DIR}/lib${WIDGETS_LIB}.a TEST_EXE = ${TMP_DIR}/test +TEST_CFG = ${ETC_DIR}/widgetFactory.xml DOXYGEN_CONFIG = ${ETC_DIR}/doxygen.config @@ -108,7 +109,8 @@ LDFLAGS = @LDFLAGS@ -pthread \ #------------------------------------------------------------------------------- WIDGETS_LIB_OBJS = ${TMP_DIR}/ImageButton.o \ ${TMP_DIR}/Button.o \ - ${TMP_DIR}/BlueBin.o + ${TMP_DIR}/BlueBin.o \ + ${TMP_DIR}/WidgetFactory.o TEST_EXE_OBJS = ${TMP_DIR}/TestWindow.o \ ${TMP_DIR}/main.o @@ -144,7 +146,7 @@ distclean: clean docclean ${RMDIR} ${TMP_DIR}/config* ${TMP_DIR}/autom4te* run: all ${TEST_EXE} - ${TEST_EXE} + ${TEST_EXE} -c ${TEST_CFG} #------------------------------------------------------------------------------- diff --git a/livesupport/modules/widgets/etc/widgetFactory.xml b/livesupport/modules/widgets/etc/widgetFactory.xml new file mode 100644 index 000000000..f8bdc64c3 --- /dev/null +++ b/livesupport/modules/widgets/etc/widgetFactory.xml @@ -0,0 +1,9 @@ + + + +]> + + diff --git a/livesupport/modules/widgets/include/LiveSupport/Widgets/WidgetFactory.h b/livesupport/modules/widgets/include/LiveSupport/Widgets/WidgetFactory.h new file mode 100644 index 000000000..250dc0d1f --- /dev/null +++ b/livesupport/modules/widgets/include/LiveSupport/Widgets/WidgetFactory.h @@ -0,0 +1,262 @@ +/*------------------------------------------------------------------------------ + + Copyright (c) 2004 Media Development Loan Fund + + This file is part of the LiveSupport project. + http://livesupport.campware.org/ + To report bugs, send an e-mail to bugs@campware.org + + LiveSupport 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. + + LiveSupport 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 LiveSupport; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + Author : $Author: maroy $ + Version : $Revision: 1.1 $ + Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/widgets/include/LiveSupport/Widgets/WidgetFactory.h,v $ + +------------------------------------------------------------------------------*/ +#ifndef LiveSupport_Widgets_WidgetFactory_h +#define LiveSupport_Widgets_WidgetFactory_h + +#ifndef __cplusplus +#error This is a C++ include file +#endif + + +/* ============================================================ include files */ + +#ifdef HAVE_CONFIG_H +#include "configure.h" +#endif + +#include + +#include "LiveSupport/Core/Configurable.h" + +#include "LiveSupport/Widgets/Button.h" +#include "LiveSupport/Widgets/BlueBin.h" + + +namespace LiveSupport { +namespace Widgets { + +using namespace LiveSupport::Core; + +/* ================================================================ constants */ + + +/* =================================================================== macros */ + + +/* =============================================================== data types */ + +/** + * A factory to provide access to LiveSupport Widgets. + * + * The singleton instance of this class has to be configured with an XML + * element, which looks like the following: + * + *

+ *  <widgetFactory>   path = "path/to/widget/images/"
+ *  </>
+ *  
+ * + * The DTD for the above XML structure is: + * + *

+ *  
+ *  
+ *  
+ * + * @author $Author: maroy $ + * @version $Revision: 1.1 $ + */ +class WidgetFactory : + virtual public Configurable +{ + private: + /** + * The name of the configuration XML elmenent used by this object. + */ + static const std::string configElementNameStr; + + /** + * The singleton instance of this object. + */ + static Ptr::Ref singleton; + + /** + * The path to load the images from for the widgets. + */ + std::string path; + + /** + * The passive left image for the button. + */ + Glib::RefPtr buttonPassiveImageLeft; + + /** + * The passive center image for the button. + */ + Glib::RefPtr buttonPassiveImageCenter; + + /** + * The passive right image for the button. + */ + Glib::RefPtr buttonPassiveImageRight; + + /** + * The rollover left image for the button. + */ + Glib::RefPtr buttonRollImageLeft; + + /** + * The rollover center image for the button. + */ + Glib::RefPtr buttonRollImageCenter; + + /** + * The rollover right image for the button. + */ + Glib::RefPtr buttonRollImageRight; + + /** + * The top left image of the border for BlueBin. + */ + Glib::RefPtr blueBinTopLeftImage; + + /** + * The left image of the border for BlueBin. + */ + Glib::RefPtr blueBinLeftImage; + + /** + * The top image of the border for BlueBin. + */ + Glib::RefPtr blueBinTopImage; + + /** + * The top right image of the border for BlueBin. + */ + Glib::RefPtr blueBinTopRightImage; + + /** + * The right image of the border for BlueBin. + */ + Glib::RefPtr blueBinRightImage; + + /** + * The bottom left image of the border for BlueBin. + */ + Glib::RefPtr blueBinBottomLeftImage; + + /** + * The bottom image of the border for BlueBin. + */ + Glib::RefPtr blueBinBottomImage; + + /** + * The bottom right image of the border for BlueBin. + */ + Glib::RefPtr blueBinBottomRightImage; + + /** + * The default constructor. + */ + WidgetFactory(void) throw () + { + } + + /** + * Load an image relative the path, and signal error if not found. + * + * @param imageName the name of the image, relative to path + * @return the loaded image + * @exception std::invalid_argument if the image was not found + */ + Glib::RefPtr + loadImage(const std::string imageName) + throw (std::invalid_argument); + + + public: + /** + * A virtual destructor, as this class has virtual functions. + */ + virtual + ~WidgetFactory(void) throw () + { + } + + /** + * Return the name of the XML element this object expects + * to be sent to a call to configure(). + * + * @return the name of the expected XML configuration element. + */ + static const std::string + getConfigElementName(void) throw () + { + return configElementNameStr; + } + + /** + * Returns the singleton instance of this object. + * + * @return the singleton instance of this object. + */ + static Ptr::Ref + getInstance() throw (); + + /** + * Configure the object based on the XML element supplied. + * + * @param element the XML element to configure the object from. + * @exception std::invalid_argument if the supplied XML element + * contains bad configuraiton information + * @exception std::logic_error if the object has already + * been configured, and can not be reconfigured. + */ + virtual void + configure(const xmlpp::Element & element) + throw (std::invalid_argument, + std::logic_error); + + /** + * Create and return a button. + * + * @param label the label shown inside the button. + */ + Ptr