# -*- coding: utf-8 -*- # This software and supporting documentation are distributed by # Institut Federatif de Recherche 49 # CEA/NeuroSpin, Batiment 145, # 91191 Gif-sur-Yvette cedex # France # # This software is governed by the CeCILL license version 2 under # French law and abiding by the rules of distribution of free software. # You can use, modify and/or redistribute the software under the # terms of the CeCILL license version 2 as circulated by CEA, CNRS # and INRIA at the following URL "http://www.cecill.info". # # As a counterpart to the access to the source code and rights to copy, # modify and redistribute granted by the license, users are provided only # with a limited warranty and the software's author, the holder of the # economic rights, and the successive licensors have only limited # liability. # # In this respect, the user's attention is drawn to the risks associated # with loading, using, modifying and/or developing or reproducing the # software by the user in light of its specific status of free software, # that may mean that it is complicated to manipulate, and that also # therefore means that it is reserved for developers and experienced # professionals having in-depth computer knowledge. Users are therefore # encouraged to load and test the software's suitability as regards their # requirements in conditions enabling the security of their systems and/or # data to be ensured and, more generally, to use and operate it in the # same conditions as regards security. # # The fact that you are presently reading this means that you have had # knowledge of the CeCILL license version 2 and that you accept its terms. from PyQt4.QtGui import * from PyQt4.QtCore import * import neuroConfig import os class LockedFilesListEditor( QDialog ): def __init__( self, parent, files, setLock ): QWidget.__init__( self, parent ) LockedFilesListEditor.pixProcessFinished \ = QIcon( os.path.join( neuroConfig.iconPath, 'ok.png' ) ) self._files = files if setLock: message = _t_( 'The following files will be locked:' ) + '\n\n' \ + '\n'.join( [ f.fullPath() for f in files ] ) else: message = _t_( 'The following files will be unlocked:' ) + '\n\n' \ + '\n'.join( [ f.fullPath() for f in files ] ) self.setModal( True ) self.setObjectName( 'locked_files_list_edition' ) vlay = QVBoxLayout( self ) if setLock: self.setWindowTitle( _t_( 'Locking files' ) ) vlay.addWidget( QLabel( 'The following files will be locked:', self ) ) else: self.setWindowTitle( _t_( 'Unlocking files' ) ) vlay.addWidget( QLabel( 'The following files will be unlocked:', self ) ) tablew = QTableWidget( self ) self._tablew = tablew vlay.addWidget( tablew ) hbox = QWidget( self ) vlay.addWidget( hbox ) hlay = QHBoxLayout( hbox ) ok = QPushButton( _t_( 'OK' ), hbox ) hlay.addWidget( ok ) ok.setSizePolicy( QSizePolicy( QSizePolicy.Fixed, QSizePolicy.Fixed ) ) cc = QPushButton( _t_( 'Cancel' ), hbox ) hlay.addWidget( cc ) cc.setSizePolicy( QSizePolicy( QSizePolicy.Fixed, QSizePolicy.Fixed ) ) add = QPushButton( _t_( 'Add to sel.' ), hbox ) hlay.addWidget( add ) add.setSizePolicy( QSizePolicy( QSizePolicy.Fixed, QSizePolicy.Fixed ) ) rmv = QPushButton( _t_( 'Remove' ), hbox ) hlay.addWidget( rmv ) rmv.setSizePolicy( QSizePolicy( QSizePolicy.Fixed, QSizePolicy.Fixed ) ) ok.clicked.connect( self.accept ) cc.clicked.connect( self.reject ) add.clicked.connect( self._addToLockSelection ) rmv.clicked.connect( self._removeFromLockSelection ) tablew.setColumnCount( 3 ) tablew.setHorizontalHeaderItem( 0, QTableWidgetItem( _t_( 'Sel.' ) ) ) tablew.setHorizontalHeaderItem( 1, QTableWidgetItem( _t_( 'short name' ) ) ) tablew.horizontalHeader().setStretchLastSection( False ) tablew.setHorizontalHeaderItem( 1, QTableWidgetItem( _t_( 'full name' ) ) ) tablew.horizontalHeader().setResizeMode( 0, QHeaderView.ResizeToContents ) tablew.horizontalHeader().setResizeMode( 1, QHeaderView.ResizeToContents ) tablew.horizontalHeader().setResizeMode( 2, QHeaderView.ResizeToContents ) tablew.setRowCount( len( files ) ) tablew.setSortingEnabled( True ) tablew.setSelectionMode( QTableWidget.ExtendedSelection ) tablew.setSelectionBehavior( QTableWidget.SelectRows ) for i, di in enumerate( files ): f = di.fullPath() item = QTableWidgetItem() item.setData( Qt.DecorationRole, self.pixProcessFinished ) item.setData( Qt.DisplayRole, None ) item.setData( Qt.UserRole, '1' ) tablew.setItem( i, 0, item ) item = QTableWidgetItem( os.path.basename( f ) ) item.setData( Qt.UserRole, str(i) ) tablew.setItem( i, 1, item ) tablew.setItem( i, 2, QTableWidgetItem( f ) ) self.resize( 800, 400 ) def _addToLockSelection( self ): tablew = self._tablew for i in xrange( tablew.rowCount() ): item = tablew.item( i, 0 ) if item and item.isSelected() and item.data( Qt.UserRole ) != '1': item = QTableWidgetItem() item.setData( Qt.DecorationRole, self.pixProcessFinished ) item.setData( Qt.UserRole, '1' ) tablew.setItem( i, 0, item ) def _removeFromLockSelection( self ): tablew = self._tablew for i in xrange( tablew.rowCount() ): item = tablew.item( i, 0 ) if item and item.isSelected() and item.data( Qt.UserRole ) == '1': item.setData( Qt.DecorationRole, None ) item.setData( Qt.UserRole, '0' ) def selectedDiskItems( self ): tablew = self._tablew selectedfiles = [] for i in xrange( tablew.rowCount() ): item = tablew.item( i, 0 ) if item and item.data( Qt.UserRole ) == '1': num = int( tablew.item( i, 1 ).data( Qt.UserRole ) ) selectedfiles.append( self._files[num] ) return selectedfiles