Example #1
0
class PlayerWind(QGraphicsEllipseItem):
    """a round wind tile"""
    def __init__(self, name, tileset, roundsFinished=0, parent = None):
        """generate new wind tile"""
        if not len(WINDPIXMAPS):
            WINDPIXMAPS[('E', False)] = None # avoid recursion
            self.genWINDPIXMAPS()
        QGraphicsEllipseItem.__init__(self)
        if parent:
            self.setParentItem(parent)
        self.name = name
        self.face = QGraphicsSvgItem()
        self.face.setParentItem(self)
        self.prevailing = None
        self.setWind(name, roundsFinished)
        self.tileset = tileset
        self.__sizeFace()

    @staticmethod
    def genWINDPIXMAPS():
        """prepare wind tiles"""
        tileset = Tileset(Preferences.windTilesetName)
        for wind in WINDS:
            for prevailing in False, True:
                pwind = PlayerWind(wind, tileset, prevailing)
                pMap = QPixmap(40, 40)
                pMap.fill(Qt.transparent)
                painter = QPainter(pMap)
                painter.setRenderHint(QPainter.Antialiasing)
                painter.scale(0.40, 0.40)
                pwind.paint(painter, QStyleOptionGraphicsItem())
                for child in pwind.childItems():
                    if isinstance(child, QGraphicsSvgItem):
                        painter.save()
                        painter.translate(child.mapToParent(0.0, 0.0))
                        child.paint(painter, QStyleOptionGraphicsItem())
                        painter.restore()
                WINDPIXMAPS[(wind, prevailing)] = pMap

    def __sizeFace(self):
        """size the chinese character depending on the wind tileset"""
        self.resetTransform()
        size = self.tileset.faceSize
        self.setFlag(QGraphicsItem.ItemClipsChildrenToShape)
        diameter = size.height() * 1.1
        scaleFactor = 0.9
        facePos = {'traditional':(10, 10), 'default':(15, 10),
                   'classic':(19, 1), 'jade':(19, 1)}
        self.setRect(0, 0, diameter, diameter)
        self.setScale(scaleFactor)
        faceX, faceY = facePos[self.tileset.desktopFileName]
        self.face.setPos(faceX, faceY)
        self.face.setSharedRenderer(self.tileset.renderer())

    def setWind(self, name, roundsFinished):
        """change the wind"""
        self.name = name
        if isinstance(roundsFinished, bool):
            self.prevailing = roundsFinished
        else:
            self.prevailing = name == WINDS[roundsFinished % 4]
        self.setBrush(ROUNDWINDCOLOR if self.prevailing else QColor('white'))
        windtilenr = {'N':1, 'S':2, 'E':3, 'W':4}
        self.face.setElementId('WIND_%d' % windtilenr[name])
Example #2
0
class PlayerWind(QGraphicsEllipseItem):
    """a round wind tile"""
    def __init__(self, name, tileset, roundsFinished=0, parent = None):
        """generate new wind tile"""
        if not len(WINDPIXMAPS):
            WINDPIXMAPS[('E', False)] = None # avoid recursion
            self.genWINDPIXMAPS()
        QGraphicsEllipseItem.__init__(self)
        if parent:
            self.setParentItem(parent)
        self.name = name
        self.face = QGraphicsSvgItem()
        self.face.setParentItem(self)
        self.prevailing = None
        self.setWind(name, roundsFinished)
        self.tileset = tileset
        self.__sizeFace()

    @staticmethod
    def genWINDPIXMAPS():
        """prepare wind tiles"""
        tileset = Tileset(common.PREF.windTilesetName)
        for wind in WINDS:
            for prevailing in False, True:
                pwind = PlayerWind(wind, tileset, prevailing)
                pMap = QPixmap(40, 40)
                pMap.fill(Qt.transparent)
                painter = QPainter(pMap)
                painter.setRenderHint(QPainter.Antialiasing)
                painter.scale(0.40, 0.40)
                pwind.paint(painter, QStyleOptionGraphicsItem())
                for child in pwind.childItems():
                    if isinstance(child, QGraphicsSvgItem):
                        painter.save()
                        painter.translate(child.mapToParent(0.0, 0.0))
                        child.paint(painter, QStyleOptionGraphicsItem())
                        painter.restore()
                WINDPIXMAPS[(wind, prevailing)] = pMap

    def __sizeFace(self):
        """size the chinese character depending on the wind tileset"""
        self.resetTransform()
        size = self.tileset.faceSize
        self.setFlag(QGraphicsItem.ItemClipsChildrenToShape)
        diameter = size.height() * 1.1
        scaleFactor = 0.9
        facePos = {'traditional':(10, 10), 'default':(15, 10),
                   'classic':(19, 1), 'jade':(19, 1)}
        self.setRect(0, 0, diameter, diameter)
        self.setScale(scaleFactor)
        faceX, faceY = facePos[self.tileset.desktopFileName]
        self.face.setPos(faceX, faceY)
        self.face.setSharedRenderer(self.tileset.renderer())

    def setWind(self, name, roundsFinished):
        """change the wind"""
        self.name = name
        if isinstance(roundsFinished, bool):
            self.prevailing = roundsFinished
        else:
            self.prevailing = name == WINDS[roundsFinished % 4]
        self.setBrush(ROUNDWINDCOLOR if self.prevailing else QColor('white'))
        windtilenr = {'N':1, 'S':2, 'E':3, 'W':4}
        self.face.setElementId('WIND_%d' % windtilenr[name])
Example #3
0
class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
    """
    Class documentation goes here.
    """
    def __init__(self, parent = None):
        """
        Constructor
        """
        QtGui.QMainWindow.__init__(self, parent)
        self.setupUi(self)
        self.themeDir="/hometheme/Cockpit/"
        self.theme=["clock-drop-shadow.svg", 
                               "clock-face.svg", 
                               "clock-face-shadow.svg", 
                                "clock-marks.svg", 
                                "clock-frame.svg", 
                                "clock-glass.svg"
                             ]  
     
     #Variables that keep track of the angle of the hands, and  Time
        self.pHour=0
        self.pMinute=0
        self.pSecond=0
        self.secTimer = QtCore.QBasicTimer()
        self.minTimer=QtCore.QTimer()
        self.calibrateTimer=QtCore.QTimer()
        #The second hand counter  166=6 beats per second, 1000 =1 beat per sec
        self.secTimerType=166.9
        self.secTimerBeat=1
        #Variables that keep track of scene
        self.sceneWidth=0
        self.sceneHeight=0
        self.centerx=0
        self.centery=0
        self.xoffset=10
        #self.setGeometry(0,0,800, 480)
        self.setWindowTitle('Nclock')
        self.themeDir="/home/user/MyDocs/Nclocktheme/"
        #Check to see if files in /user/MyDocs/Nclock
        
        try:
            f=open (self.themeDir+"clock-face.svg")
        except :
            reply = QtGui.QMessageBox.question(self, 'Message',"No Theme Files in directory /home/user/MyDocs/Nclocktheme.     load default theme? No to Exit", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
            
            if reply==QtGui.QMessageBox.Yes :self.themeDir="theme/"
            else :    exit()
        
        #Initialize the Graphics Scene, Graphicsview is setup in QtDesigner UI
        self.scene = QtGui.QGraphicsScene()
        
        for path in self.theme:
            self.fileExist=1
            try:
                f=open (self.themeDir+path)
            except :
                    self.fileExist=0
            if self.fileExist==1:
                self.svgItem=QGraphicsSvgItem(self.themeDir+path)
                renderer=self.svgItem.renderer()
                self.scene.addItem(self.svgItem)
         #get the bounding box for the scene
        #self.rect=self.scene.itemsBoundingRect()
        #self.scene.setSceneRect(0, 0, 150, 150)
        self.rect=self.scene.itemsBoundingRect()
        
        self.sceneWidth=self.rect.width()
        self.sceneHeight=self.rect.height()
        self.centerx=self.sceneWidth/2
        self.centery=self.sceneHeight/2
        self.grView.centerOn(self.centerx, self.centery)
 
        #draw the Hourhand
        self.svgHour=QGraphicsSvgItem(self.themeDir+"clock-hour-hand.svg",)
        renderer=self.svgHour.renderer()
        self.svgHour.setPos(self.centerx, self.centery)
        #self.scene.addItem(self.svgHour)
        
        #draw the Minutehand
        self.svgMinute=QGraphicsSvgItem(self.themeDir+"clock-minute-hand.svg",)
        renderer=self.svgMinute.renderer()
        self.svgMinute.setPos(self.centerx, self.centery)
        #self.scene.addItem(self.svgMinute)
        
        #draw the Second hand 
        self.svgSecond=QGraphicsSvgItem(self.themeDir+"clock-second-hand.svg",)
        renderer=self.svgSecond.renderer()
        svgRect=QtCore.QRect()
        print svgRect
        svgRect.setX(-10)
        svgRect.setY(-1)
        svgRect.setWidth(100)
        svgRect.setHeight(100)
        print svgRect
        renderer.setViewBox(svgRect)
        self.svgSecond.setPos(self.centerx-10, self.centery-1)
        self.scene.addItem(self.svgSecond)
      
        #Paint the Scene and center
        self.rect=self.scene.itemsBoundingRect()
        height=self.rect.height()
        width=self.rect.width()
        if width>height: dimension=width
        
        else :dimension =height
        self.scene.setSceneRect(0, 0, dimension, dimension)
        self.rect=self.scene.itemsBoundingRect()
        
        self.grView.setScene(self.scene)
        self.grView.scale(3, 3)
        
    @pyqtSignature("")
    # sets the second hands tick to Quartz style
    def on_actionQuartz_triggered(self):
        self.secTimerType=1000
        self.secTimerBeat=6
        self.calibrateTime()
        
    @pyqtSignature("")
    #Sets the seconds hand to Automatic smooth style
    def on_actionAutomatic_triggered(self):
        self.secTimerType=166.9
        self.secTimerBeat=1
        self.calibrateTime()
        
    @pyqtSignature("")
    #Sets the seconds hand standstill
    def on_actionEco_triggered(self):
        self.secTimer.stop()
        self.calibrateTimer.stop()
        self.svgSecond.resetTransform()
        self.svgSecond.rotate(-90)
        
    @pyqtSignature("")
    #Sets the seconds hand to Automatic smooth style
    def on_actionZoom_In_triggered(self):
        self.grView.scale(2, 2)
        self.grView.setScene(self.scene)
    
    @pyqtSignature("")
    #Sets the seconds hand to Automatic smooth style
    def on_actionZoom_Out_triggered(self):
        self.grView.scale(0.9, 0.9)
        self.grView.setScene(self.scene)