def __createLayout( self ): " Creates the toolbar and layout " # Buttons printButton = QAction( PixmapCache().getIcon( 'printer.png' ), 'Print', self ) #printButton.setShortcut( 'Ctrl+' ) printButton.triggered.connect( self.__onPrint ) printButton.setVisible( False ) printPreviewButton = QAction( PixmapCache().getIcon( 'printpreview.png' ), 'Print preview', self ) #printPreviewButton.setShortcut( 'Ctrl+' ) printPreviewButton.triggered.connect( self.__onPrintPreview ) printPreviewButton.setVisible( False ) fixedSpacer = QWidget() fixedSpacer.setFixedHeight( 16 ) zoomInButton = QAction( PixmapCache().getIcon( 'zoomin.png' ), 'Zoom in (Ctrl+=)', self ) zoomInButton.setShortcut( 'Ctrl+=' ) zoomInButton.triggered.connect( self.onZoomIn ) self.__zoomInSynonim = QShortcut( "Ctrl++", self ) self.__zoomInSynonim.activated.connect( self.onZoomIn ) zoomOutButton = QAction( PixmapCache().getIcon( 'zoomout.png' ), 'Zoom out (Ctrl+-)', self ) zoomOutButton.setShortcut( 'Ctrl+-' ) zoomOutButton.triggered.connect( self.onZoomOut ) zoomResetButton = QAction( PixmapCache().getIcon( 'zoomreset.png' ), 'Zoom reset (Ctrl+0)', self ) zoomResetButton.setShortcut( 'Ctrl+0' ) zoomResetButton.triggered.connect( self.onZoomReset ) # Toolbar toolbar = QToolBar( self ) toolbar.setOrientation( Qt.Vertical ) toolbar.setMovable( False ) toolbar.setAllowedAreas( Qt.RightToolBarArea ) toolbar.setIconSize( QSize( 16, 16 ) ) toolbar.setFixedWidth( 28 ) toolbar.setContentsMargins( 0, 0, 0, 0 ) toolbar.addAction( printPreviewButton ) toolbar.addAction( printButton ) toolbar.addWidget( fixedSpacer ) toolbar.addAction( zoomInButton ) toolbar.addAction( zoomOutButton ) toolbar.addAction( zoomResetButton ) hLayout = QHBoxLayout() hLayout.setContentsMargins( 0, 0, 0, 0 ) hLayout.setSpacing( 0 ) hLayout.addWidget( self.__viewer ) hLayout.addWidget( toolbar ) self.__outsideChangesBar = OutsideChangeWidget( self.__viewer ) self.__outsideChangesBar.reloadRequest.connect( self.__onReload ) self.__outsideChangesBar.reloadAllNonModifiedRequest.connect( self.reloadAllNonModified ) self.__outsideChangesBar.hide() self.setLayout( hLayout ) return
class PixmapTabWidget( QWidget, MainWindowTabWidgetBase ): " Pixmap viewer tab widget " escapePressed = pyqtSignal() reloadRequst = pyqtSignal() reloadAllNonModifiedRequest = pyqtSignal() def __init__( self, parent ): MainWindowTabWidgetBase.__init__( self ) QWidget.__init__( self, parent ) self.__editorsManager = parent self.__viewer = PixmapWidget() self.__fileName = "" self.__shortName = "" self.__viewer.escapePressed.connect( self.__onEsc ) self.__viewer.setContextMenuPolicy( Qt.CustomContextMenu ) self.__viewer.customContextMenuRequested.connect( self.__onContextMenu ) self.__createLayout() self.__diskModTime = None self.__diskSize = None self.__reloadDlgShown = False self.__vcsStatus = None return def __createLayout( self ): " Creates the toolbar and layout " # Buttons printButton = QAction( PixmapCache().getIcon( 'printer.png' ), 'Print', self ) #printButton.setShortcut( 'Ctrl+' ) printButton.triggered.connect( self.__onPrint ) printButton.setVisible( False ) printPreviewButton = QAction( PixmapCache().getIcon( 'printpreview.png' ), 'Print preview', self ) #printPreviewButton.setShortcut( 'Ctrl+' ) printPreviewButton.triggered.connect( self.__onPrintPreview ) printPreviewButton.setVisible( False ) fixedSpacer = QWidget() fixedSpacer.setFixedHeight( 16 ) zoomInButton = QAction( PixmapCache().getIcon( 'zoomin.png' ), 'Zoom in (Ctrl+=)', self ) zoomInButton.setShortcut( 'Ctrl+=' ) zoomInButton.triggered.connect( self.onZoomIn ) self.__zoomInSynonim = QShortcut( "Ctrl++", self ) self.__zoomInSynonim.activated.connect( self.onZoomIn ) zoomOutButton = QAction( PixmapCache().getIcon( 'zoomout.png' ), 'Zoom out (Ctrl+-)', self ) zoomOutButton.setShortcut( 'Ctrl+-' ) zoomOutButton.triggered.connect( self.onZoomOut ) zoomResetButton = QAction( PixmapCache().getIcon( 'zoomreset.png' ), 'Zoom reset (Ctrl+0)', self ) zoomResetButton.setShortcut( 'Ctrl+0' ) zoomResetButton.triggered.connect( self.onZoomReset ) # Toolbar toolbar = QToolBar( self ) toolbar.setOrientation( Qt.Vertical ) toolbar.setMovable( False ) toolbar.setAllowedAreas( Qt.RightToolBarArea ) toolbar.setIconSize( QSize( 16, 16 ) ) toolbar.setFixedWidth( 28 ) toolbar.setContentsMargins( 0, 0, 0, 0 ) toolbar.addAction( printPreviewButton ) toolbar.addAction( printButton ) toolbar.addWidget( fixedSpacer ) toolbar.addAction( zoomInButton ) toolbar.addAction( zoomOutButton ) toolbar.addAction( zoomResetButton ) hLayout = QHBoxLayout() hLayout.setContentsMargins( 0, 0, 0, 0 ) hLayout.setSpacing( 0 ) hLayout.addWidget( self.__viewer ) hLayout.addWidget( toolbar ) self.__outsideChangesBar = OutsideChangeWidget( self.__viewer ) self.__outsideChangesBar.reloadRequest.connect( self.__onReload ) self.__outsideChangesBar.reloadAllNonModifiedRequest.connect( self.reloadAllNonModified ) self.__outsideChangesBar.hide() self.setLayout( hLayout ) return def setFocus( self ): " Overridden setFocus " if self.__outsideChangesBar.isHidden(): self.__viewer.setFocus() else: self.__outsideChangesBar.setFocus() return def loadFromFile( self, path ): " Loads the content from the given file " self.__viewer.loadFromFile( path ) self.setFileName( os.path.abspath( path ) ) # Memorize the modification date path = os.path.realpath( path ) self.__diskModTime = os.path.getmtime( path ) self.__diskSize = os.path.getsize( path ) return def setPixmap( self, pixmap ): " Loads the provided pixmap " self.__viewer.setPixmap( pixmap ) self.__diskModTime = None self.__diskSize = None return def __onPrint( self ): " Triggered on the 'print' button " pass def __onPrintPreview( self ): " Triggered on the 'print preview' button " pass def onZoomIn( self ): " Triggered on the 'zoom in' button " self.__viewer.doZoom( 1.25 ) QApplication.processEvents() self.resizeBars() return def onZoomOut( self ): " Triggered on the 'zoom out' button " self.__viewer.doZoom( 0.8 ) QApplication.processEvents() self.resizeBars() return def wheelEvent( self, event ): """ Mouse wheel event """ if QApplication.keyboardModifiers() == Qt.ControlModifier: if event.delta() > 0: self.onZoomIn() else: self.onZoomOut() else: QWidget.wheelEvent( self, event ) return def __onContextMenu( self, pos ): " Triggered when a context menu is requested " pluginMenus = self.__editorsManager.getPluginMenus() if pluginMenus: contextMenu = QMenu() for pluginPath, pluginMenu in pluginMenus.iteritems(): contextMenu.addMenu( pluginMenu ) contextMenu.exec_( QCursor.pos() ) del contextMenu return def onZoomReset( self ): " Triggered on the 'zoom reset' button " self.__viewer.resetZoom() QApplication.processEvents() self.resizeBars() return def __onEsc( self ): " Triggered when Esc is pressed " self.escapePressed.emit() return def resizeEvent( self, event ): " Resizes the outside changes dialogue if necessary " QWidget.resizeEvent( self, event ) self.resizeBars() return def resizeBars( self ): " Resize the bars if they are shown " if not self.__outsideChangesBar.isHidden(): self.__outsideChangesBar.resize() return def __onReload( self ): " Triggered when a request to reload the file is received " self.reloadRequst.emit() return def reloadAllNonModified( self ): """ Triggered when a request to reload all the non-modified files is received """ self.reloadAllNonModifiedRequest.emit() return def showOutsideChangesBar( self, allEnabled ): " Shows the bar for the viewer for the user to choose the action " self.setReloadDialogShown( True ) self.__outsideChangesBar.showChoice( self.isModified(), allEnabled ) return def reload( self ): " Called (from the editors manager) to reload the file " # Re-read the file with updating the file timestamp self.loadFromFile( self.__fileName ) # Hide the bar is necessery if not self.__outsideChangesBar.isHidden(): self.__outsideChangesBar.hide() # Set the shown flag self.setReloadDialogShown( False ) return # Mandatory interface part is below def isModified( self ): " Tells if the file is modified " return False def getRWMode( self ): " Tells if the file is read only " return "RO" def getType( self ): " Tells the widget type " return MainWindowTabWidgetBase.PictureViewer def getLanguage( self ): " Tells the content language " return self.__viewer.formatInfo def getFileName( self ): " Tells what file name of the widget content " return self.__fileName def setFileName( self, name ): " Sets the file name " self.__fileName = name self.__shortName = os.path.basename( name ) return def getEol( self ): " Tells the EOL style " return "n/a" def getLine( self ): " Tells the cursor line " return "n/a" def getPos( self ): " Tells the cursor column " return "n/a" def getEncoding( self ): " Tells the content encoding " return self.__viewer.info def setEncoding( self, newEncoding ): " Sets the encoding - not applicable for picture viewer " return def getShortName( self ): " Tells the display name " return self.__shortName def setShortName( self, name ): " Sets the display name " self.__shortName = name return def isDiskFileModified( self ): " Return True if the loaded file is modified " if not os.path.isabs( self.__fileName ): return False if not os.path.exists( self.__fileName ): return True path = os.path.realpath( self.__fileName ) return self.__diskModTime != os.path.getmtime( path ) or \ self.__diskSize != os.path.getsize( path ) def doesFileExist( self ): " Returns True if the loaded file still exists " return os.path.exists( self.__fileName ) def setReloadDialogShown( self, value = True ): """ Sets the new value of the flag which tells if the reloading dialogue has already been displayed """ self.__reloadDlgShown = value return def getReloadDialogShown( self ): " Tells if the reload dialog has already been shown " return self.__reloadDlgShown and not self.__outsideChangesBar.isVisible() def updateModificationTime( self, fileName ): " Updates the modification time " path = os.path.realpath( fileName ) self.__diskModTime = os.path.getmtime( path ) self.__diskSize = os.path.getsize( path ) return def getVCSStatus( self ): " Provides the VCS status " return self.__vcsStatus def setVCSStatus( self, newStatus ): " Sets the new VCS status " self.__vcsStatus = newStatus return