coriolis/bootstrap/builder/ConfigureWidget.py

173 lines
6.8 KiB
Python

# -*- 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 : Damien Dupuis |
# | E-mail : Jean-Paul.Chaput@lip6.fr |
# | =============================================================== |
# | Python : "./builder/ConfigureWidget.py" |
# +-----------------------------------------------------------------+
from PyQt4.QtCore import Qt, QVariant, pyqtSignal, QSettings, \
QModelIndex, QAbstractTableModel
from PyQt4.QtGui import QFont, QWidget, QGridLayout, QHBoxLayout, \
QVBoxLayout, QLabel, QPushButton, \
QLineEdit, QAbstractItemView, QHeaderView, \
QTableView, QGroupBox, QFileDialog, \
QApplication
from .Configuration import Configuration
class ConfSettingsModel ( QAbstractTableModel ):
HeaderFont = QApplication.font()
PrimaryFont = QFont('Courier',HeaderFont.pointSize()-2,QFont.Normal)
SecondaryFont = QFont('Courier',HeaderFont.pointSize()-2,QFont.Normal)
ValueFont = QFont('Courier',HeaderFont.pointSize()-2,QFont.Bold)
def __init__ ( self, conf, parent=None ):
ConfSettingsModel.HeaderFont.setBold( True )
ConfSettingsModel.SecondaryFont.setItalic( True )
QAbstractTableModel.__init__( self, parent )
self._conf = conf
self._ids = self._conf.getAllIds()
return
def data ( self, index, role ):
if role == Qt.SizeHintRole:
if index.column() == 0: return 300
else: return -1
elif role == Qt.FontRole:
if index.column() == 0:
if index.row() >= len(self._conf.getPrimaryIds()):
return ConfSettingsModel.SecondaryFont
return ConfSettingsModel.PrimaryFont
else:
return ConfSettingsModel.ValueFont
elif role == Qt.DisplayRole:
row = index.row()
if row < self.rowCount():
if index.column() == 0: return self._ids[row]
elif index.column() == 1: return getattr( self._conf, self._ids[row] )
return None
def headerData ( self, section, orientation, role ):
if orientation == Qt.Vertical: return None
if role == Qt.FontRole: return ConfSettingsModel.HeaderFont
if role != Qt.DisplayRole: return None
if section == 0: return 'Setting'
elif section == 1: return 'Value'
return '?'
def rowCount ( self, index=QModelIndex() ): return len(self._ids)
def columnCount ( self, index=QModelIndex() ): return 2
class ConfSettingsWidget ( QWidget ):
def __init__ ( self, conf, parent=None ):
QWidget.__init__( self, parent )
self._rowHeight = 20
self._view = QTableView()
self._view.setShowGrid ( False )
self._view.setAlternatingRowColors( True )
self._view.setSelectionBehavior ( QAbstractItemView.SelectRows )
#self._view.setSortingEnabled ( True )
#self._view.installEventFilter ( self )
horizontalHeader = self._view.horizontalHeader ()
horizontalHeader.setStretchLastSection ( True )
horizontalHeader.setMinimumSectionSize ( 150 )
horizontalHeader.setResizeMode ( QHeaderView.ResizeToContents )
horizontalHeader.setDefaultSectionSize ( 150 )
verticalHeader = self._view.verticalHeader ();
verticalHeader.setVisible ( False );
verticalHeader.setDefaultSectionSize ( self._rowHeight );
self._baseModel = ConfSettingsModel( conf )
self._view.setModel( self._baseModel );
self._view.horizontalHeader().setStretchLastSection( True );
self._view.resizeColumnToContents( 0 );
peanoDataLayout = QGridLayout();
peanoDataLayout.addWidget( self._view, 0, 0, 1, 1 );
self.setLayout ( peanoDataLayout );
return
class ConfigureWidget ( QWidget ):
def __init__ ( self, confFile, parent=None ):
QWidget.__init__ ( self, parent )
self._confFile = confFile
self._conf = Configuration()
self._rootDir = ''
rootDirLabel = QLabel( 'Root Directory' )
rootDirBrowse = QPushButton( '&Browse' )
rootDirBrowse.clicked.connect( self.browseRootDir )
self._rootDirEdit = QLineEdit( '' )
#self._rootDirEdit.setFixedWidth( 600 )
gLayout = QGridLayout()
gLayout.addWidget( rootDirLabel , 0, 0, 1, 1 )
gLayout.addWidget( self._rootDirEdit, 0, 1, 1, 6 )
gLayout.addWidget( rootDirBrowse , 0, 7, 1, 1 )
groupDirs = QGroupBox( 'Directories' )
groupDirs.setLayout( gLayout )
gLayout = QGridLayout()
groupConf = QGroupBox( 'Configuration' )
groupConf.setLayout( gLayout )
vLayout = QVBoxLayout()
vLayout.addWidget ( groupDirs )
vLayout.addWidget ( groupConf )
#vLayout.addStretch()
self.setLayout( vLayout )
self._rootDirEdit.textChanged.connect( self.rootDirChanged )
self.readSettings()
noteLabel = QLabel( 'Those settings can be changed only by editing build.conf' )
gLayout.addWidget( noteLabel , 0, 0, 1, 1 )
gLayout.addWidget( ConfSettingsWidget(self._conf), 1, 0, 1, 1 )
def _getConf ( self ): return self._conf
def _getRootDir ( self ): return self._rootDir
def _getBootstrapDir ( self ): return self._getConf().bootstrapDir
conf = property( _getConf )
rootDir = property( _getRootDir )
bootstrapDir = property( _getBootstrapDir )
def rootDirChanged ( self, rootDir ):
self._rootDir = rootDir
return
def browseRootDir ( self ):
self._rootDirEdit.setText( QFileDialog.getExistingDirectory(self,'Select the Building Root Directory') )
return
def readSettings ( self ):
settings = QSettings()
self._rootDirEdit.setText( settings.value('conf/rootDir') )
if not self._confFile and settings.value('conf/confFile'):
self._confFile = str( settings.value('conf/confFile') )
self._conf.load( self._confFile )
return
def saveSettings ( self ):
settings = QSettings()
settings.setValue( 'conf/rootDir' , self._rootDirEdit.text() )
settings.setValue( 'conf/confFile', self._confFile )
return