text: """Guide Squash 01 module"""
  
  from functools import partial
  
  from mgear.maya.shifter.component import guide
  from mgear.maya import transform, pyqt
  from mgear.vendor.Qt import QtWidgets, QtCore
  
  from maya.app.general.mayaMixin import MayaQWidgetDockableMixin
  from maya.app.general.mayaMixin import MayaQDockWidget
  
  import settingsUI as sui
  
  # guide info
  AUTHOR = "Jeremie Passerin, Miquel Campos"
  URL = "www.jeremiepasserin.com, www.miquletd.com"
  EMAIL = "geerem@hotmail.com, hello@miquel-campos.com"
  VERSION = [1, 0, 0]
  TYPE = "shoulder_01"
  NAME = "shoulder"
  DESCRIPTION = "Simple shoulder with space switch for\n the arm, and Orbit " \
                "layer for the arm "
  
  ##########################################################
  # CLASS
  ##########################################################
  
  
  class Guide(guide.ComponentGuide):
      """Component Guide Class"""
  
      compType = TYPE
      compName = NAME
      description = DESCRIPTION
  
      author = AUTHOR
      url = URL
      email = EMAIL
      version = VERSION
  
      def postInit(self):
          """Initialize the position for the guide"""
          self.save_transform = ["root", "tip"]
          self.save_blade = ["blade"]
  
      def addObjects(self):
          """Add the Guide Root, blade and locators"""
  
          self.root = self.addRoot()
          vTemp = transform.getOffsetPosition(self.root, [2, 0, 0])
          self.loc = self.addLoc("tip", self.root, vTemp)
          self.blade = self.addBlade("blade", self.root, self.loc)
  
          centers = [self.root, self.loc]
          self.dispcrv = self.addDispCurve("crv", centers)
  
      def addParameters(self):
          """Add the configurations settings"""
  
          self.pRefArray = self.addParam("refArray", "string", "")
          self.pUseIndex = self.addParam("useIndex", "bool", False)
  
          self.pParentJointIndex = self.addParam(
              "parentJointIndex", "long", -1, None, None)
  
  
  ##########################################################
  # Setting Page
  ##########################################################
  
  class settingsTab(QtWidgets.QDialog, sui.Ui_Form):
      """The Component settings UI"""
  
      def __init__(self, parent=None):
          super(settingsTab, self).__init__(parent)
          self.setupUi(self)
  
  
  class componentSettings(MayaQWidgetDockableMixin, guide.componentMainSettings):
      """Create the component setting window"""
  
      def __init__(self, parent=None):
          self.toolName = TYPE
          # Delete old instances of the componet settings window.
          pyqt.deleteInstances(self, MayaQDockWidget)
  
          super(self.__class__, self).__init__(parent=parent)
          self.settingsTab = settingsTab()
  
          self.setup_componentSettingWindow()
          self.create_componentControls()
          self.populate_componentControls()
          self.create_componentLayout()
          self.create_componentConnections()
  
      def setup_componentSettingWindow(self):
          self.mayaMainWindow = pyqt.maya_main_window()
  
          self.setObjectName(self.toolName)
          self.setWindowFlags(QtCore.Qt.Window)
          self.setWindowTitle(TYPE)
          self.resize(280, 350)
  
      def create_componentControls(self):
          return
  
      def populate_componentControls(self):
          """Populate the controls values.
  
          Populate the controls values from the custom attributes of the
          component.
  
          """
          # populate tab
          self.tabs.insertTab(1, self.settingsTab, "Component Settings")
  
          # populate component settings
          refArrayItems = self.root.attr("refArray").get().split(",")
          for item in refArrayItems:
              self.settingsTab.refArray_listWidget.addItem(item)
  
      def create_componentLayout(self):
  
          self.settings_layout = QtWidgets.QVBoxLayout()
          self.settings_layout.addWidget(self.tabs)
          self.settings_layout.addWidget(self.close_button)
  
          self.setLayout(self.settings_layout)
  
      def create_componentConnections(self):
  
          self.settingsTab.refArrayAdd_pushButton.clicked.connect(
              partial(self.addItem2listWidget,
                      self.settingsTab.refArray_listWidget,
                      "refArray"))
  
          self.settingsTab.refArrayRemove_pushButton.clicked.connect(
              partial(self.removeSelectedFromListWidget,
                      self.settingsTab.refArray_listWidget,
                      "refArray"))
  
          self.settingsTab.refArray_listWidget.installEventFilter(self)
  
      def eventFilter(self, sender, event):
          if event.type() == QtCore.QEvent.ChildRemoved:
              if sender == self.settingsTab.refArray_listWidget:
                  self.updateListAttr(sender, "refArray")
              return True
          else:
              return QtWidgets.QDialog.eventFilter(self, sender, event)
  
      def dockCloseEventTriggered(self):
          pyqt.deleteInstances(self, MayaQDockWidget)
  