# Source code for taurus.qt.qtdesigner.containerplugin

    #!/usr/bin/env python

    # ###########################################################################
    #
    # This file is part of Taurus
    #
    # http://taurus-scada.org
    #
    # Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
    #
    # Taurus is free software: you can redistribute it and/or modify
    # it under the terms of the GNU Lesser General Public License as published by
    # the Free Software Foundation, either version 3 of the License, or
    # (at your option) any later version.
    #
    # Taurus 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 Lesser General Public License for more details.
    #
    # You should have received a copy of the GNU Lesser General Public License
    # along with Taurus.  If not, see <http://www.gnu.org/licenses/>.
    #
    # ###########################################################################

    """
    Every TaurusWidget should have the following Qt Designer extended
    capabilities:

      - Task menu:
        it means when you right click on the widget in the designer, it will have
        the following additional items:

        - 'Edit model...': opens a customized dialog for editing the widget model

      - Property Sheet:
        it means that in the Qt Designer property sheet it will have the following
        properties customized:

        - 'model': will have a '...' button that will open a customized dialog for
          editing the widget model (same has 'Edit model...' task menu item
    """

    from taurus.external.qt import QtDesigner
    from taurus.qt.qtgui.container.qcontainer import QGroupWidget

    __all__ = [
        "Q_TYPEID",
        "QGroupWidgetContainerExtension",
        "QGroupWidgetExtensionFactory",
        "create_plugin",
        "QGroupWidgetPlugin",
    ]

    Q_TYPEID = {
        "QPyDesignerContainerExtension": "com.trolltech.Qt.Designer.Container",
        "QPyDesignerPropertySheetExtension": "com.trolltech.Qt.Designer.PropertySheet",  # noqa
        "QPyDesignerTaskMenuExtension": "com.trolltech.Qt.Designer.TaskMenu",
        "QPyDesignerMemberSheetExtension": "com.trolltech.Qt.Designer.MemberSheet",
    }

    class QGroupWidgetContainerExtension(QtDesigner.QPyDesignerContainerExtension):
        def __init__(self, widget, parent=None):
            super(QGroupWidgetContainerExtension, self).__init__(parent)
            self._widget = widget
            self._page_widget = None

        def addWidget(self, widget):
            if self.count() > 0:
                raise Exception("Can only have at maximum one child")
            self._layout().addWidget(widget)
            self._page_widget = widget

        def _content(self):
            return self._widget.content()

        def _layout(self):
            return self._content().layout()

        def count(self):
            return self._layout().count()

        def currentIndex(self):
            if self.count() > 0:
                return 0
            return -1

        def insertWidget(self, index, widget):
            self.addWidget(widget)

        def remove(self, index):
            self._layout().removeWidget(self.widget(index))

        def setCurrentIndex(self, index):
            pass

        def widget(self, index):
            return self._page_widget

    class QGroupWidgetExtensionFactory(QtDesigner.QExtensionFactory):
        def __init__(self, parent=None):
            super(QGroupWidgetExtensionFactory, self).__init__(parent)

        def createExtension(self, obj, iid, parent):
            if iid != Q_TYPEID["QPyDesignerContainerExtension"]:
                return None
            if isinstance(obj, QGroupWidget):
                return QGroupWidgetContainerExtension(obj, parent)
            return None

    def create_plugin():
        from taurus.qt.qtdesigner.taurusplugin.taurusplugin import (
            TaurusWidgetPlugin,
        )

        class QGroupWidgetPlugin(TaurusWidgetPlugin):

            WidgetClass = QGroupWidget

            def initialize(self, formEditor):
                if self.isInitialized():
                    return

                manager = formEditor.extensionManager()
                if manager:
                    self.factory = QGroupWidgetExtensionFactory(manager)
                    manager.registerExtensions(
                        self.factory, Q_TYPEID["QPyDesignerContainerExtension"]
                    )
                self.initialized = True

        return QGroupWidgetPlugin

    QGroupWidgetPlugin = create_plugin()