def _create_visibility_group(self):
        # create toolbar buttons
        self.wrong_name_visibility_btn = mttCmdUi.create_status_button(
            ':/tb_vizWrongName',
            'Highlight Node name clashing with Texture name',
            self.on_wrong_name_visibility, True)

        self.external_visibility_btn = mttCmdUi.create_status_button(
            ':/tb_vizExternal',
            'Highlight Texture path that comes from outside current workspace',
            self.on_external_visibility, True)

        self.wrong_path_visibility_btn = mttCmdUi.create_status_button(
            ':/tb_vizWrongPath',
            'Highlight Texture path clashing with user defined path pattern',
            self.on_wrong_path_visibility, True)

        self.basename_visibility_btn = mttCmdUi.create_status_button(
            ':/tb_vizBasename', 'Show files texture name only',
            self.on_basename_visibility, True)

        self.namespace_visibility_btn = mttCmdUi.create_status_button(
            ':/tb_vizNamespace', 'Toggle namespace visibility',
            self.on_namespace_visibility, True)

        # sort toolbar buttons
        self.visibility_grp = StatusCollapsibleLayout(
            section_name='Show/Hide the visibility icons')
        self.visibility_grp.add_button(self.namespace_visibility_btn)
        self.visibility_grp.add_button(self.wrong_name_visibility_btn)
        self.visibility_grp.add_button(self.external_visibility_btn)
        self.visibility_grp.add_button(self.wrong_path_visibility_btn)
        self.visibility_grp.add_button(self.basename_visibility_btn)

        return self.visibility_grp
    def _create_maya_tools_group(self):
        # sort toolbar buttons
        self.maya_grp = StatusCollapsibleLayout(
            section_name='Show/Hide the Maya tools icons')

        # create toolbar buttons
        self.maya_grp.add_button(mttCmdUi.create_status_button(
            ':/tb_Hypershade',
            'Hypershade',
            self.on_open_hypershade,
            False)
        )
        self.maya_grp.add_button(mttCmdUi.create_status_button(
            ':/tb_NodeEditor',
            'Node Editor',
            self.on_open_node_editor,
            False)
        )
        self.maya_grp.add_button(mttCmdUi.create_status_button(
            ':/tb_UVEditor',
            'UV Texture Editor',
            self.on_open_uv_editor,
            False)
        )

        return self.maya_grp
    def _create_auto_group(self):
        # create toolbar buttons
        self.auto_reload_btn = mttCmdUi.create_status_button(
            ':/tb_toolbar_autoReload',
            'Auto Reload Textures',
            self.on_auto_reload,
            True)

        self.auto_select_btn = mttCmdUi.create_status_button(
            ':/tb_toolbar_autoSelect',
            'Auto Select Textures Node',
            self.on_auto_select,
            True)

        self.auto_rename_btn = mttCmdUi.create_status_button(
            ':/tb_toolbar_autoRename',
            'Auto Rename Textures Node',
            self.on_auto_rename,
            True)

        # sort toolbar buttons
        self.auto_grp = StatusCollapsibleLayout(
            section_name='Show/Hide the auto actions icons')
        self.auto_grp.add_button(self.auto_reload_btn)
        self.auto_grp.add_button(self.auto_select_btn)
        self.auto_grp.add_button(self.auto_rename_btn)

        return self.auto_grp
    def _create_mtt_tools_group(self):
        # create toolbar buttons
        self.viewer_btn = mttCmdUi.create_status_button(
            ':/tb_Viewer', 'Show/Hide Viewer', self.on_toggle_viewer, False)

        create_node_btn = mttCmdUi.create_status_button(
            ':/tb_toolCreateNode', 'Create Node', self.on_create_node, False)

        # sort toolbar buttons
        self.tool_grp = StatusCollapsibleLayout(
            section_name='Show/Hide the tools icons')
        self.tool_grp.add_button(self.viewer_btn)
        self.tool_grp.add_button(create_node_btn)

        return self.tool_grp
    def __create_ui(self):
        # FILTERS
        scroll_area = StatusScrollArea()
        scroll_area.add_widget(self._create_filter_group())
        scroll_area.add_widget(self._create_visibility_group())
        scroll_area.add_widget(self._create_folder_group())
        scroll_area.add_widget(self._create_auto_group())
        scroll_area.add_widget(self._create_mtt_tools_group())
        scroll_area.add_widget(self._create_maya_tools_group())
        user_grp = self._create_user_group()
        if user_grp:
            scroll_area.add_widget(user_grp)
        self.addWidget(scroll_area)

        # STATS information
        self.stat_info = QLabel()
        self.stat_info.setAlignment(Qt.AlignCenter | Qt.AlignRight)
        self.stat_info.setText('0 File | 0/0 Node')
        self.stat_info.setToolTip(
            'number of files | number of nodes shown / total number of nodes')
        self.addWidget(self.stat_info)

        # SETTINGS button
        self.info_btn = mttCmdUi.create_status_button(':/tb_config',
                                                      'Settings', None, False)
        self.info_btn.setMenu(self.settings_menu)
        self.addWidget(self.info_btn)
    def _create_folder_group(self):
        self.folder_grp = StatusCollapsibleLayout(
            section_name='Show/Hide the folder icons')

        # create toolbar buttons
        self.folder_grp.add_button(
            mttCmdUi.create_status_button(':/tb_folderMap',
                                          'Open sourceimages folder',
                                          self.on_open_sourceimages_folder,
                                          False))
        self.folder_grp.add_button(
            mttCmdUi.create_status_button(':/tb_folderSrc',
                                          'Open source folder',
                                          self.on_open_source_folder, False))

        return self.folder_grp
    def __create_ui(self):
        # FILTERS
        scroll_area = StatusScrollArea()
        scroll_area.add_widget(self._create_filter_group())
        scroll_area.add_widget(self._create_visibility_group())
        scroll_area.add_widget(self._create_folder_group())
        scroll_area.add_widget(self._create_auto_group())
        scroll_area.add_widget(self._create_mtt_tools_group())
        scroll_area.add_widget(self._create_maya_tools_group())
        user_grp = self._create_user_group()
        if user_grp:
            scroll_area.add_widget(user_grp)
        self.addWidget(scroll_area)

        # STATS information
        self.stat_info = QLabel()
        self.stat_info.setAlignment(Qt.AlignCenter | Qt.AlignRight)
        self.stat_info.setText('0 File | 0/0 Node')
        self.stat_info.setToolTip(
            'number of files | number of nodes shown / total number of nodes')
        self.addWidget(self.stat_info)

        # SETTINGS button
        self.info_btn = mttCmdUi.create_status_button(
            ':/tb_config', 'Settings', None, False)
        self.info_btn.setMenu(self.settings_menu)
        self.addWidget(self.info_btn)
    def _create_maya_tools_group(self):
        # sort toolbar buttons
        self.maya_grp = StatusCollapsibleLayout(
            section_name='Show/Hide the Maya tools icons')

        # create toolbar buttons
        self.maya_grp.add_button(
            mttCmdUi.create_status_button(':/tb_Hypershade', 'Hypershade',
                                          self.on_open_hypershade, False))
        self.maya_grp.add_button(
            mttCmdUi.create_status_button(':/tb_NodeEditor', 'Node Editor',
                                          self.on_open_node_editor, False))
        self.maya_grp.add_button(
            mttCmdUi.create_status_button(':/tb_UVEditor', 'UV Texture Editor',
                                          self.on_open_uv_editor, False))

        return self.maya_grp
    def _create_folder_group(self):
        self.folder_grp = StatusCollapsibleLayout(
            section_name='Show/Hide the folder icons')

        # create toolbar buttons
        self.folder_grp.add_button(mttCmdUi.create_status_button(
            ':/tb_folderMap',
            'Open sourceimages folder',
            self.on_open_sourceimages_folder,
            False)
        )
        self.folder_grp.add_button(mttCmdUi.create_status_button(
            ':/tb_folderSrc',
            'Open source folder',
            self.on_open_source_folder,
            False)
        )

        return self.folder_grp
    def _create_visibility_group(self):
        # create toolbar buttons
        self.wrong_name_visibility_btn = mttCmdUi.create_status_button(
            ':/tb_vizWrongName',
            'Highlight Node name clashing with Texture name',
            self.on_wrong_name_visibility,
            True)

        self.external_visibility_btn = mttCmdUi.create_status_button(
            ':/tb_vizExternal',
            'Highlight Texture path that comes from outside current workspace',
            self.on_external_visibility,
            True)

        self.wrong_path_visibility_btn = mttCmdUi.create_status_button(
            ':/tb_vizWrongPath',
            'Highlight Texture path clashing with user defined path pattern',
            self.on_wrong_path_visibility,
            True)

        self.basename_visibility_btn = mttCmdUi.create_status_button(
            ':/tb_vizBasename',
            'Show files texture name only',
            self.on_basename_visibility,
            True)

        self.namespace_visibility_btn = mttCmdUi.create_status_button(
            ':/tb_vizNamespace',
            'Toggle namespace visibility',
            self.on_namespace_visibility,
            True)

        # sort toolbar buttons
        self.visibility_grp = StatusCollapsibleLayout(
            section_name='Show/Hide the visibility icons')
        self.visibility_grp.add_button(self.namespace_visibility_btn)
        self.visibility_grp.add_button(self.wrong_name_visibility_btn)
        self.visibility_grp.add_button(self.external_visibility_btn)
        self.visibility_grp.add_button(self.wrong_path_visibility_btn)
        self.visibility_grp.add_button(self.basename_visibility_btn)

        return self.visibility_grp
    def _create_user_group(self):
        if MTTSettings.CUSTOM_BUTTONS:
            self.custom_grp = StatusCollapsibleLayout(
                section_name='Show/Hide custom tools')

            for btnData in MTTSettings.CUSTOM_BUTTONS:
                self.custom_grp.add_button(
                    mttCmdUi.create_status_button(btnData[0], btnData[1],
                                                  eval(btnData[2]), False))

            return self.custom_grp
    def _create_mtt_tools_group(self):
        # create toolbar buttons
        self.viewer_btn = mttCmdUi.create_status_button(
            ':/tb_Viewer',
            'Show/Hide Viewer',
            self.on_toggle_viewer,
            False)

        create_node_btn = mttCmdUi.create_status_button(
            ':/tb_toolCreateNode',
            'Create Node',
            self.on_create_node,
            False)

        # sort toolbar buttons
        self.tool_grp = StatusCollapsibleLayout(
            section_name='Show/Hide the tools icons')
        self.tool_grp.add_button(self.viewer_btn)
        self.tool_grp.add_button(create_node_btn)

        return self.tool_grp
    def _create_filter_group(self):
        # create toolbar buttons
        self.selection_btn = mttCmdUi.create_status_button(
            ':/tb_onlySelection', 'Show textures applied to current selection',
            self.on_show_only_selection, True)
        self.writable_btn = mttCmdUi.create_status_button(
            ':/tb_onlyWritable', 'Hide read-only textures',
            self.on_show_only_writable, True)
        self.reference_btn = mttCmdUi.create_status_button(
            ':/tb_onlyReference', 'Hide references', self.on_show_reference,
            True)
        self.pin_btn = mttCmdUi.create_status_button(':/tb_onlyPinned',
                                                     'Pin textures',
                                                     self.on_pin_nodes, True)
        self.wrong_name_btn = mttCmdUi.create_status_button(
            ':/tb_onlyWrongName', 'Show Node name clashing with Texture name',
            self.on_show_wrong_name, True)
        self.filter_instances_btn = mttCmdUi.create_status_button(
            ':/tb_hideInstances', 'Show only one instance per file',
            self.on_filter_instances, True)

        # sort toolbar buttons
        self.filter_grp = StatusCollapsibleLayout(
            section_name='Show/Hide the filter icons')
        self.filter_grp.add_button(self.pin_btn)
        self.filter_grp.add_button(self.selection_btn)
        self.filter_grp.add_button(self.reference_btn)
        self.filter_grp.add_button(self.writable_btn)
        self.filter_grp.add_button(self.wrong_name_btn)
        self.filter_grp.add_button(self.filter_instances_btn)

        return self.filter_grp
    def _create_auto_group(self):
        # create toolbar buttons
        self.auto_reload_btn = mttCmdUi.create_status_button(
            ':/tb_toolbar_autoReload', 'Auto Reload Textures',
            self.on_auto_reload, True)

        self.auto_select_btn = mttCmdUi.create_status_button(
            ':/tb_toolbar_autoSelect', 'Auto Select Textures Node',
            self.on_auto_select, True)

        self.auto_rename_btn = mttCmdUi.create_status_button(
            ':/tb_toolbar_autoRename', 'Auto Rename Textures Node',
            self.on_auto_rename, True)

        # sort toolbar buttons
        self.auto_grp = StatusCollapsibleLayout(
            section_name='Show/Hide the auto actions icons')
        self.auto_grp.add_button(self.auto_reload_btn)
        self.auto_grp.add_button(self.auto_select_btn)
        self.auto_grp.add_button(self.auto_rename_btn)

        return self.auto_grp
    def _create_user_group(self):
        if MTTSettings.CUSTOM_BUTTONS:
            self.custom_grp = StatusCollapsibleLayout(
                section_name='Show/Hide custom tools')

            for btnData in MTTSettings.CUSTOM_BUTTONS:
                self.custom_grp.add_button(mttCmdUi.create_status_button(
                    btnData[0],
                    btnData[1],
                    eval(btnData[2]),
                    False)
                )

            return self.custom_grp
    def _create_filter_group(self):
        # create toolbar buttons
        self.selection_btn = mttCmdUi.create_status_button(
            ':/tb_onlySelection',
            'Show textures applied to current selection',
            self.on_show_only_selection,
            True)
        self.writable_btn = mttCmdUi.create_status_button(
            ':/tb_onlyWritable',
            'Hide read-only textures',
            self.on_show_only_writable,
            True)
        self.reference_btn = mttCmdUi.create_status_button(
            ':/tb_onlyReference',
            'Hide references',
            self.on_show_reference,
            True)
        self.pin_btn = mttCmdUi.create_status_button(
            ':/tb_onlyPinned',
            'Pin textures',
            self.on_pin_nodes,
            True)
        self.wrong_name_btn = mttCmdUi.create_status_button(
            ':/tb_onlyWrongName',
            'Show Node name clashing with Texture name',
            self.on_show_wrong_name,
            True)
        self.filter_instances_btn = mttCmdUi.create_status_button(
            ':/tb_hideInstances',
            'Show only one instance per file',
            self.on_filter_instances,
            True)

        # sort toolbar buttons
        self.filter_grp = StatusCollapsibleLayout(
            section_name='Show/Hide the filter icons')
        self.filter_grp.add_button(self.pin_btn)
        self.filter_grp.add_button(self.selection_btn)
        self.filter_grp.add_button(self.reference_btn)
        self.filter_grp.add_button(self.writable_btn)
        self.filter_grp.add_button(self.wrong_name_btn)
        self.filter_grp.add_button(self.filter_instances_btn)

        return self.filter_grp