# -*- mode:Python -*-
#
# This file is part of the Coriolis Software.
# Copyright (c) Sorbonne Université 2012-2021, All Rights Reserved
#
# +-----------------------------------------------------------------+ 
# |                   C O R I O L I S                               |
# |          T o o l c h a i n   B u i l d e r                      |
# |                                                                 |
# |  Author      :                    Jean-Paul Chaput              |
# |  E-mail           :       Jean-Paul.Chaput@lip6.fr              |
# | =============================================================== |
# |  Python      :   "./builder/ProjectWidget.py"                   |
# +-----------------------------------------------------------------+


import string
from PyQt4.QtCore import Qt, QObject, QSettings
from PyQt4.QtGui  import QSizePolicy, QFrame, QPushButton, QCheckBox, \
                         QLabel


class ProjectWidgets ( QObject ):
  
    def __init__ ( self, project ):
        self._project       = project
        self._projectButton = QLabel( string.capwords(self._project.getName()) )
        self._projectButton.setStyleSheet( 'font-weight: bold;' )
        self._projectButton.setFrameShape( QFrame.Box )
        self._projectButton.setSizePolicy( QSizePolicy.Expanding, QSizePolicy.Preferred )
        self._toolsCheckBoxes = []
        for tool in self._project.getTools():
            self._toolsCheckBoxes += [ QCheckBox( tool.name ) ]
       #self._projectButton.clicked.connect( self.toggleToolsVisibility )
        return
  
    def _getProjectButton   ( self ): return self._projectButton
    def _getToolsCheckBoxes ( self ): return self._toolsCheckBoxes
  
    def _getActives ( self ):
        actives = []
        for toolCb in self._toolsCheckBoxes:
            if toolCb.isChecked(): actives += [ str(toolCb.text()) ]
        return actives
  
    projectButton   = property( _getProjectButton )
    toolsCheckBoxes = property( _getToolsCheckBoxes )
    actives         = property( _getActives )
  
    def addToLayout( self, column, layout ):
        toolsNb = len(self._toolsCheckBoxes)
        if toolsNb <= 10:
            layout.addWidget( self._projectButton, 0, column, Qt.AlignLeft )
            for row in range(toolsNb):
                layout.addWidget( self._toolsCheckBoxes[row], row+1, column, Qt.AlignTop )
            return 1
        columnSpan = toolsNb / 10
        if toolsNb % 10: columnSpan += 1
        layout.addWidget( self._projectButton, 0, column, 1, columnSpan, Qt.AlignJustify )
        for row in range(toolsNb):
            if row and row % 10 == 0: column += 1
            layout.addWidget( self._toolsCheckBoxes[row], row%10+1, column, Qt.AlignTop )
        return columnSpan
  
   #def toggleToolsVisibility ( self ):
   #    self._visibleTools = not self._visibleTools
   #    for toolCb in self._toolsCheckBoxes:
   #        toolCb.setVisible( self._visibleTools )
   #    return
  
    def readFromSettings ( self ):
        settings = QSettings()
        for toolCb in self._toolsCheckBoxes:
            toolId = 'tools/'+self._project.getName()+'/'+toolCb.text()
            toolCb.setChecked( bool(settings.value(toolId)) )
        return
  
    def saveToSettings ( self ):
        settings = QSettings()
        for toolCb in self._toolsCheckBoxes:
            toolId = 'tools/'+self._project.getName()+'/'+toolCb.text()
            settings.setValue( toolId, toolCb.isChecked() )
        return