2013-01-12 08:57:35 -06:00
|
|
|
|
|
|
|
# -*- mode:Python -*-
|
|
|
|
#
|
|
|
|
# This file is part of the Coriolis Software.
|
2018-01-06 10:55:44 -06:00
|
|
|
# Copyright (c) UPMC/LIP6 2012-2018, All Rights Reserved
|
2013-01-12 08:57:35 -06:00
|
|
|
#
|
|
|
|
# +-----------------------------------------------------------------+
|
|
|
|
# | C O R I O L I S |
|
|
|
|
# | C o r i o l i s / C h a m s B u i l d e r |
|
|
|
|
# | |
|
|
|
|
# | Author : Damien Dupuis |
|
|
|
|
# | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
|
|
|
# | =============================================================== |
|
|
|
|
# | Python : "./builder/ConfigureWidget.py" |
|
|
|
|
# +-----------------------------------------------------------------+
|
|
|
|
|
|
|
|
|
|
|
|
from PyQt4.QtCore import Qt
|
|
|
|
from PyQt4.QtCore import QVariant
|
|
|
|
from PyQt4.QtCore import pyqtSignal
|
|
|
|
from PyQt4.QtCore import QSettings
|
|
|
|
from PyQt4.QtGui import QFont
|
|
|
|
from PyQt4.QtGui import QWidget
|
|
|
|
from PyQt4.QtGui import QGridLayout
|
|
|
|
from PyQt4.QtGui import QHBoxLayout
|
|
|
|
from PyQt4.QtGui import QVBoxLayout
|
|
|
|
from PyQt4.QtGui import QLabel
|
|
|
|
from PyQt4.QtGui import QPushButton
|
|
|
|
from PyQt4.QtGui import QLineEdit
|
|
|
|
from PyQt4.QtCore import QModelIndex
|
|
|
|
from PyQt4.QtCore import QAbstractTableModel
|
|
|
|
from PyQt4.QtGui import QAbstractItemView
|
|
|
|
from PyQt4.QtGui import QHeaderView
|
|
|
|
from PyQt4.QtGui import QTableView
|
|
|
|
from PyQt4.QtGui import QGroupBox
|
|
|
|
from PyQt4.QtGui import QFileDialog
|
|
|
|
from PyQt4.QtGui import 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 QVariant()
|
|
|
|
|
|
|
|
|
|
|
|
def headerData ( self, section, orientation, role ):
|
|
|
|
if orientation == Qt.Vertical: return QVariant()
|
|
|
|
if role == Qt.FontRole: return ConfSettingsModel.HeaderFont
|
|
|
|
if role != Qt.DisplayRole: return QVariant()
|
|
|
|
|
|
|
|
if section == 0: return 'Setting'
|
|
|
|
elif section == 1: return 'Value'
|
|
|
|
|
|
|
|
return QVariant('?')
|
|
|
|
|
|
|
|
|
|
|
|
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 )
|
|
|
|
|
|
|
|
|
Cleanup after SVN importation, <ccb> builder script adaptation.
Project hierarchy reorganisation:
* With svn, we were doing a tool by tool checkout, suppressing the
whole repository hierarchy level.
* The tools were also grouped, inside one repository, into multiple
projects (<bootstrap>, <vlsisapd>, <coriolis>).
* We do not want to split up each tool into a separate repository,
given their tight integration (except for vlsisapd).
* We choose to simplify, and consider all tools in a svn repository
one project. Due to the way Git clone repositories, the directory
containing the project is now to be seen under "src/".
CMake modifications:
* Now that the <vlsisapd> and <bootstrap> projects are merged into
coriolis, modificate the top CMakeLists.txt of each tool to uses
only Coriolis (and bootstrap hard wired).
CCB compile script modifications:
* Uses the new source tree hierarchy, with the project directory
inserted.
* Remove (comment) all parts relateds to svn managment.
* Git is sufficiently simple so that we do not want to integrate
command shortcut into the script.
SVN cleanup:
* Remove the obsolete <chamsin> tool, that has become the full fledged
<chams> project long time ago.
2014-02-26 11:24:41 -06:00
|
|
|
def _getConf ( self ): return self._conf
|
|
|
|
def _getRootDir ( self ): return self._rootDir
|
|
|
|
def _getBootstrapDir ( self ): return self._getConf().bootstrapDir
|
2013-01-12 08:57:35 -06:00
|
|
|
|
Cleanup after SVN importation, <ccb> builder script adaptation.
Project hierarchy reorganisation:
* With svn, we were doing a tool by tool checkout, suppressing the
whole repository hierarchy level.
* The tools were also grouped, inside one repository, into multiple
projects (<bootstrap>, <vlsisapd>, <coriolis>).
* We do not want to split up each tool into a separate repository,
given their tight integration (except for vlsisapd).
* We choose to simplify, and consider all tools in a svn repository
one project. Due to the way Git clone repositories, the directory
containing the project is now to be seen under "src/".
CMake modifications:
* Now that the <vlsisapd> and <bootstrap> projects are merged into
coriolis, modificate the top CMakeLists.txt of each tool to uses
only Coriolis (and bootstrap hard wired).
CCB compile script modifications:
* Uses the new source tree hierarchy, with the project directory
inserted.
* Remove (comment) all parts relateds to svn managment.
* Git is sufficiently simple so that we do not want to integrate
command shortcut into the script.
SVN cleanup:
* Remove the obsolete <chamsin> tool, that has become the full fledged
<chams> project long time ago.
2014-02-26 11:24:41 -06:00
|
|
|
conf = property( _getConf )
|
|
|
|
rootDir = property( _getRootDir )
|
|
|
|
bootstrapDir = property( _getBootstrapDir )
|
2013-01-12 08:57:35 -06:00
|
|
|
|
|
|
|
|
|
|
|
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').toString() )
|
|
|
|
if not self._confFile and settings.value('conf/confFile'):
|
|
|
|
self._confFile = str( settings.value('conf/confFile').toString() )
|
|
|
|
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
|