| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 | 
							- /*=========================================================================
 
-   Library:   CTK
 
-   Copyright (c) Kitware Inc.
 
-   Licensed under the Apache License, Version 2.0 (the "License");
 
-   you may not use this file except in compliance with the License.
 
-   You may obtain a copy of the License at
 
-       http://www.apache.org/licenses/LICENSE-2.0.txt
 
-   Unless required by applicable law or agreed to in writing, software
 
-   distributed under the License is distributed on an "AS IS" BASIS,
 
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
-   See the License for the specific language governing permissions and
 
-   limitations under the License.
 
- =========================================================================*/
 
- #ifndef __ctkLayoutViewFactory_h
 
- #define __ctkLayoutViewFactory_h
 
- // Qt includes
 
- #include <QObject>
 
- #include <QDomDocument>
 
- class QLayoutItem;
 
- class QWidgetItem;
 
- // CTK includes
 
- #include "ctkWidgetsExport.h"
 
- class ctkLayoutViewFactoryPrivate;
 
- /// \ingroup Widgets
 
- /// ctkLayoutViewFactory is an abstract class that creates and setups widgets for a
 
- /// specific view XML element from ctkLayoutManager.
 
- /// See ctkTemplateLayoutViewFactory for a factory that can instantiate
 
- /// any Qt widget.
 
- /// This class is meant to be derived with at least the method createViewFromXML()
 
- /// being overwritten.
 
- /// \sa ctkLayoutManager, ctkTemplateLayoutViewFactory, createViewFromXML()
 
- class CTK_WIDGETS_EXPORT ctkLayoutViewFactory: public QObject
 
- {
 
-   Q_OBJECT
 
-   /// This property controls whether the views are cached and reused
 
-   /// from a previous layout. True by default.
 
-   /// \sa useCachedViews(), setUseCachedViews()
 
-   Q_PROPERTY(bool useCachedViews READ useCachedViews WRITE setUseCachedViews);
 
- public:
 
-   /// Constructor
 
-   ctkLayoutViewFactory(QObject* parent = 0);
 
-   /// Destructor
 
-   virtual ~ctkLayoutViewFactory();
 
-   /// Returns the list of element names supported by the factory (e.g. "view",
 
-   /// "myview"...). Returns ["view"] by default.
 
-   /// Can be reimplemented to support other element names.
 
-   /// \warning It is not possible to support the "layout" and "item" XML
 
-   /// elements.
 
-   /// \sa isSupportedElement()
 
-   virtual QStringList supportedElementNames()const;
 
-   /// Returns true if the layout element can be created and setup by the
 
-   /// factory. By default, returns true if the layout element name is
 
-   /// contained in supportedElementNames().
 
-   /// \sa supportedElementNames()
 
-   virtual bool isElementSupported(QDomElement layoutElement)const;
 
-   /// Return the useCachedViews property value.
 
-   /// \sa useCachedViews
 
-   bool useCachedViews()const;
 
-   /// Set the useCachedViews property value.
 
-   /// \sa useCachedViews
 
-   void setUseCachedViews(bool cache);
 
-   /// Called by the layout factory before a layout is setup.
 
-   /// \sa endSetupLayout()
 
-   virtual void beginSetupLayout();
 
-   /// Called by the layout factory after a layout is setup.
 
-   /// \sa beginSetupLayout()
 
-   virtual void endSetupLayout();
 
-   /// Method is called each time a view is made visible into a layout.
 
-   /// This method can be reimplemented. Sets the widget visibility to true
 
-   /// and register the view by default.
 
-   /// \sa viewsFromXML()
 
-   virtual void setupView(QDomElement layoutElement, QWidget* view);
 
-   /// Virtual method that returns a widget from a "view" layout element.
 
-   /// You are ensured that the tagName of the element is one of the element
 
-   /// from the supportedElementNames() list.
 
-   /// The XML element can contain an arbitrary number of XML attributes.
 
-   /// Returns previously registered or cached view if any, otherwise create
 
-   /// a new view using createViewFromXML(). Must be reimplemented.
 
-   /// \sa viewsFromXML(), setupView(), registeredViews(), useCachedView,
 
-   /// createViewFromXML()
 
-   virtual QWidget* viewFromXML(QDomElement layoutElement);
 
-   /// Virtual method that returns a list of widgets from a "view" layout
 
-   /// element.
 
-   /// If the parent "item" element has a "multiple=true" XML attribute,
 
-   /// the "view" layout element can describe many widgets instead of just one
 
-   /// widget.
 
-   /// The returned widgets will automatically be layout into their parent
 
-   /// layout (e.g. boxlayout).
 
-   /// Returns previously registered or cached views if any, otherwise create
 
-   /// new views using createViewsFromXML().
 
-   /// \sa viewFromXML(), registeredViews(), 
 
-   virtual QList<QWidget*> viewsFromXML(QDomElement layoutElement);
 
-   /// Return all the widgets that have been registered.
 
-   /// Used internally for testing.
 
-   /// \sa registeredViews()
 
-   QList<QWidget*> registeredViews()const;
 
- protected:
 
-   QScopedPointer<ctkLayoutViewFactoryPrivate> d_ptr;
 
-   /// Create a new view from a layoutElement. Returns 0 by default
 
-   /// \sa viewFromXML
 
-   virtual QWidget* createViewFromXML(QDomElement layoutElement);
 
-   /// Create new views from a layoutElement. Returns createViewFromXML()
 
-   /// by default.
 
-   /// \sa viewsFromXML(), createViewFromXML()
 
-   virtual QList<QWidget*> createViewsFromXML(QDomElement layoutElement);
 
-   /// Return the list of widgets that have already been created by
 
-   /// view(s)FromXML().
 
-   /// \sa registerView(), unregisterView()
 
-   QList<QWidget*> registeredViews(const QDomElement& layoutElement)const;
 
-   /// Save the view to reuse it later on (in view(s)FromXML() ).
 
-   /// \sa registerView(), registeredViews()
 
-   virtual void registerView(QDomElement layoutElement, QWidget* view);
 
-   /// Forget about the view. The view is not being deleted.
 
-   /// \sa registerView(), registeredViews()
 
-   virtual void unregisterView(QDomElement layoutElement, QWidget* view);
 
-   /// Forget about the view. The view is not being deleted.
 
-   /// \sa registerView(), unregisterView()
 
-   virtual void unregisterView(QWidget* view);
 
-   /// Return the layout element registered with the view or a null element
 
-   /// if the view is not registered.
 
-   /// \sa registerView(), unregisterView()
 
-   QDomElement layoutElement(QWidget* view)const;
 
- private:
 
-   Q_DECLARE_PRIVATE(ctkLayoutViewFactory);
 
-   Q_DISABLE_COPY(ctkLayoutViewFactory);
 
- };
 
- /// \ingroup Widgets
 
- /// Instantiate a template QWidget anytime a view element is listed
 
- /// inside a layout element.
 
- /// \code
 
- /// QString tabLayout(
 
- ///   "<layout type=\"tab\">"
 
- ///   " <item><view name=\"tab1\"/></item>"
 
- ///   " <item><view name=\"tab2\"/></item>"
 
- ///   " <item><view name=\"tab3\"/></item>"
 
- ///   "</layout>");
 
- /// QWidget tab;
 
- /// tab.setWindowTitle("Tab Layout");
 
- /// ctkTemplateLayoutViewFactory<QPushButton>* buttonFactory =
 
- ///   new ctkTemplateLayoutViewFactory<QPushButton>(&tab);
 
- /// ctkLayoutFactory tabLayoutManager;
 
- /// tabLayoutManager.registerViewFactory(buttonFactory);
 
- /// tabToSimpleLayoutManager.setLayout(tabLayoutDoc);
 
- /// tabToSimpleLayoutManager.setViewport(&tab);
 
- /// tabToSimple.show();
 
- /// \endcode
 
- /// \sa ctkLayoutViewFactory
 
- template<class T>
 
- class ctkTemplateLayoutViewFactory: public ctkLayoutViewFactory
 
- {
 
- public:
 
-   ctkTemplateLayoutViewFactory(QObject* parent = 0)
 
-     : ctkLayoutViewFactory(parent)
 
-   {
 
-     this->setUseCachedViews(true);
 
-   }
 
-   virtual QWidget* createViewFromXML(QDomElement layoutElement){
 
-     return new T;
 
-     }
 
- };
 
- #endif
 
 
  |