camelot.camelot.view.controls.animation

Package camelot :: Package camelot :: Package view :: Package controls :: Module animation |
[hide private]
[frames] | no frames]

# Source Code for Module camelot.camelot.view.controls.animation

      1  #  ==================================================================================
      2  #
      3  #  Copyright (C) 2007-2008 Conceptive Engineering bvba. All rights reserved.
      4  #  www.conceptive.be / project-camelot@conceptive.be
      5  #
      6  #  This file is part of the Camelot Library.
      7  #
      8  #  This file may be used under the terms of the GNU General Public
      9  #  License version 2.0 as published by the Free Software Foundation
     10  #  and appearing in the file LICENSE.GPL included in the packaging of
     11  #  this file.  Please review the following information to ensure GNU
     12  #  General Public Licensing requirements will be met:
     13  #  http://www.trolltech.com/products/qt/opensource.html
     14  #
     15  #  If you are unsure which license is appropriate for your use, please
     16  #  review the following information:
     17  #  http://www.trolltech.com/products/qt/licensing.html or contact
     18  #  project-camelot@conceptive.be.
     19  #
     20  #  This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
     21  #  WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
     22  #
     23  #  For use of this library in commercial applications, please contact
     24  #  project-camelot@conceptive.be
     25  #
     26  #  ==================================================================================
     27
     28  import logging
     29
     30  logger = logging.getLogger('animation')
     31
     32  from PyQt4 import QtGui
     33  from PyQt4 import QtCore
     34  from PyQt4.QtCore import Qt
     35
     36  from camelot.view import art
     37
     38 -class MovieWidget(QtGui.QLabel):
     39    """Simulates a QMovie using a QLabel"""
     40
     41 -  def __init__(self, icons, parent=None):
     42      logger.debug('creating movie widget')
     43      super(MovieWidget, self).__init__(parent)
     44      self.current_frame = 0
     45      self.last_frame = len(icons) - 1
     46      self.pixmaps = self._create_pixmaps(icons)
     47      self.started = False
     48
     49 -  def _create_pixmaps(self, icons):
     50      result = []
     51      for ic in icons:
     52        px = QtGui.QPixmap(ic)
     53        # scale to 16 x 16
     54        #px = px.scaled(16, 16, Qt.KeepAspectRatio)
     55        result.append(px)
     56      return result
     57
     58 -  def startMovie(self):
     59  #    logger.debug('movie started')
     60  #    if self.started:
     61  #      return
     62  #    self.timerId = self.startTimer(80) # 80 milliseconds
     63  #    self.started = True
     64  #@attention: movie stuff was turned off, because it seems to crash the application sometimes,
     65  #            according to google this could be a bug in QT 4.4, VLC seems to suffer the same
     66  #            problem
     67      pass
     68
     69 -  def stopMovie(self):
     70  #    logger.debug('movie stopped')
     71  #    if self.started:
     72  #      self.killTimer(self.timerId)
     73  #      self.started = False
     74      pass
     75
     76 -  def timerEvent(self, event):
     77      #logger.debug('changing movie frame')
     78      self.setPixmap(self.pixmaps[self.current_frame])
     79      self.current_frame += 1
     80      if self.current_frame > self.last_frame:
     81        self.current_frame = 0
     82
     83 -class Throbber(MovieWidget):
     84    """Spinning widget subclassing MovieWidget"""
     85
     86 -  def __init__(self, parent):
     87      logger.debug('creating throbber')
     88
     89      icons = [art.file_('Throbber-small-anim1.png'),
     90               art.file_('Throbber-small-anim2.png'),
     91               art.file_('Throbber-small-anim3.png'),
     92               art.file_('Throbber-small-anim4.png'),
     93               art.file_('Throbber-small-anim5.png'),
     94               art.file_('Throbber-small-anim6.png'),
     95               art.file_('Throbber-small-anim7.png'),
     96               art.file_('Throbber-small-anim8.png')]
     97
     98      super(Throbber, self).__init__(icons, parent)
     99
    100      self.idle_pixmap = QtGui.QPixmap(art.file_('Throbber-small.png'))
    101      self._idle_state()
    102      parent.resize(parent.size())
    103
    104 -  def _idle_state(self):
    105      self.setPixmap(self.idle_pixmap)
    106
    107 -  def process_working(self):
    108      logger.debug('Process is working')
    109      self.startMovie()
    110
    111 -  def process_idle(self):
    112      logger.debug('Process is idle')
    113      self.stopMovie()
    114      self._idle_state()
    115