Source code for umbra.components.factory.componentsManagerUi.views
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
**views.py**
**Platform:**
	Windows, Linux, Mac Os X.
**Description:**
	Defines the :class:`umbra.components.factory.componentsManagerUi.componentsManagerUi.ComponentsManagerUi`
	Component Interface class Views.
**Others:**
"""
#**********************************************************************************************************************
#***	Future imports.
#**********************************************************************************************************************
from __future__ import unicode_literals
#**********************************************************************************************************************
#***	External imports.
#**********************************************************************************************************************
from PyQt4.QtCore import Qt
from PyQt4.QtGui import QAbstractItemView
#**********************************************************************************************************************
#***	Internal imports.
#**********************************************************************************************************************
import foundations.exceptions
import foundations.verbose
import umbra.ui.views
#**********************************************************************************************************************
#***	Module attributes.
#**********************************************************************************************************************
__author__ = "Thomas Mansencal"
__copyright__ = "Copyright (C) 2008 - 2014 - Thomas Mansencal"
__license__ = "GPL V3.0 - http://www.gnu.org/licenses/"
__maintainer__ = "Thomas Mansencal"
__email__ = "[email protected]"
__status__ = "Production"
__all__ = ["LOGGER", "Components_QTreeView"]
LOGGER = foundations.verbose.installLogger()
#**********************************************************************************************************************
#***	Module classes and definitions.
#**********************************************************************************************************************
[docs]class Components_QTreeView(umbra.ui.views.Abstract_QTreeView):
	"""
	Defines the view for Database Collections.
	"""
	def __init__(self, parent, model=None, readOnly=False, message=None):
		"""
		Initializes the class.
		:param parent: Object parent.
		:type parent: QObject
		:param model: Model.
		:type model: QObject
		:param readOnly: View is read only.
		:type readOnly: bool
		:param message: View default message when Model is empty.
		:type message: unicode
		"""
		LOGGER.debug("> Initializing '{0}()' class.".format(self.__class__.__name__))
		umbra.ui.views.Abstract_QTreeView.__init__(self, parent, readOnly, message)
		# --- Setting class attributes. ---
		self.__container = parent
		self.__treeViewIndentation = 15
		self.setModel(model)
		Components_QTreeView.__initializeUi(self)
	#******************************************************************************************************************
	#***	Attributes properties.
	#******************************************************************************************************************
	@property
	def container(self):
		"""
		Property for **self.__container** attribute.
		:return: self.__container.
		:rtype: QObject
		"""
		return self.__container
	@container.setter
# Oncilla: Statement commented by auto-documentation process: 	@foundations.exceptions.handleExceptions(foundations.exceptions.ProgrammingError)
	def container(self, value):
		"""
		Setter for **self.__container** attribute.
		:param value: Attribute value.
		:type value: QObject
		"""
		raise foundations.exceptions.ProgrammingError(
		"{0} | '{1}' attribute is read only!".format(self.__class__.__name__, "container"))
	@container.deleter
# Oncilla: Statement commented by auto-documentation process: 	@foundations.exceptions.handleExceptions(foundations.exceptions.ProgrammingError)
[docs]	def container(self):
		"""
		Deleter for **self.__container** attribute.
		"""
		raise foundations.exceptions.ProgrammingError(
		"{0} | '{1}' attribute is not deletable!".format(self.__class__.__name__, "container"))
 
	@property
	def treeViewIndentation(self):
		"""
		Property for **self.__treeViewIndentation** attribute.
		:return: self.__treeViewIndentation.
		:rtype: int
		"""
		return self.__treeViewIndentation
	@treeViewIndentation.setter
# Oncilla: Statement commented by auto-documentation process: 	@foundations.exceptions.handleExceptions(foundations.exceptions.ProgrammingError)
	def treeViewIndentation(self, value):
		"""
		Setter for **self.__treeViewIndentation** attribute.
		:param value: Attribute value.
		:type value: int
		"""
		raise foundations.exceptions.ProgrammingError(
		"{0} | '{1}' attribute is read only!".format(self.__class__.__name__, "treeViewIndentation"))
	@treeViewIndentation.deleter
# Oncilla: Statement commented by auto-documentation process: 	@foundations.exceptions.handleExceptions(foundations.exceptions.ProgrammingError)
[docs]	def treeViewIndentation(self):
		"""
		Deleter for **self.__treeViewIndentation** attribute.
		"""
		raise foundations.exceptions.ProgrammingError(
		"{0} | '{1}' attribute is not deletable!".format(self.__class__.__name__, "treeViewIndentation"))
	#******************************************************************************************************************
	#***	Class methods.
	#****************************************************************************************************************** 
[docs]	def setModel(self, model):
		"""
		Reimplements the **umbra.ui.views.Abstract_QTreeView.setModel** method.
		
		:param model: Model to set.
		:type model: QObject
		"""
		if not model:
			return
		LOGGER.debug("> Setting '{0}' model.".format(model))
		umbra.ui.views.Abstract_QTreeView.setModel(self, model)
		# Signals / Slots.
		self.model().modelAboutToBeReset.connect(self.__model__modelAboutToBeReset)
		self.model().modelReset.connect(self.__model__modelReset)
 
	def __model__modelAboutToBeReset(self):
		"""
		Defines the slot triggered by the Model when about to be reset.
		"""
		pass
	def __model__modelReset(self):
		"""
		Defines the slot triggered by the Model when reset.
		"""
		pass
	def __initializeUi(self):
		"""
		Initializes the Widget ui.
		"""
		self.setAutoScroll(False)
		self.setDragDropMode(QAbstractItemView.NoDragDrop)
		self.setEditTriggers(QAbstractItemView.NoEditTriggers)
		self.setIndentation(self.__treeViewIndentation)
		self.setSelectionMode(QAbstractItemView.ExtendedSelection)
		self.setSortingEnabled(True)
		self.sortByColumn(0, Qt.AscendingOrder)
		self.__setDefaultUiState()
		# Signals / Slots.
		self.model().modelReset.connect(self.__setDefaultUiState)
	def __setDefaultUiState(self):
		"""
		Sets the Widget default ui state.
		"""
		LOGGER.debug("> Setting default View state!")
		if not self.model():
			return
		self.expandAll()
		for column in range(len(self.model().horizontalHeaders)):
			self.resizeColumnToContents(column)