Package Camelot :: Package camelot :: Package view :: Package controls :: Module busy_widget
[frames] | no frames]

Source Code for Module Camelot.camelot.view.controls.busy_widget

 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  from PyQt4 import QtGui 
29  from PyQt4.QtCore import Qt 
30   
31 -class BusyWidget(QtGui.QWidget):
32 """A widget indicating the application is performing some background task. The widget acts 33 as an overlay of its parent widget and displays animating orbs""" 34
35 - def __init__(self, parent = None):
36 QtGui.QWidget.__init__(self, parent) 37 palette = QtGui.QPalette(self.palette()) 38 palette.setColor(palette.Background, Qt.transparent) 39 self.setPalette(palette) 40 self.setAttribute(Qt.WA_TransparentForMouseEvents) 41 self.orbs = 5 42 self.highlighted_orb = self.orbs 43 self.timer = None
44
45 - def set_busy(self, busy_state):
46 """start/stop the animation 47 :arg busy_state: True or False 48 """ 49 if busy_state: 50 self.timer = self.startTimer(200) 51 self.counter = 0 52 self.show() 53 else: 54 if self.timer: 55 self.killTimer(self.timer) 56 self.timer = None 57 self.hide()
58
59 - def paintEvent(self, event):
60 """custom paint, painting the orbs""" 61 painter = QtGui.QPainter() 62 painter.begin(self) 63 painter.setRenderHint(QtGui.QPainter.Antialiasing) 64 painter.setPen(QtGui.QPen(Qt.NoPen)) 65 width = self.width() 66 height = self.height() 67 radius = (min(width, height)/4) 68 for i in range(self.orbs): 69 if i!=self.highlighted_orb: 70 painter.setBrush(QtGui.QBrush(QtGui.QColor(180, 180, 180))) 71 else: 72 painter.setBrush(QtGui.QBrush(QtGui.QColor(127, 127, 127))) 73 center_x = width - (3*i+2)*radius 74 center_y = height / 2 75 painter.drawEllipse(center_x - radius, 76 center_y - radius, 77 2*radius, 78 2*radius) 79 painter.end()
80
81 - def timerEvent(self, event):
82 """custom timer event, updating the animation""" 83 self.update() 84 self.counter += 1 85 self.highlighted_orb -= 1 86 if self.highlighted_orb < 0: 87 self.highlighted_orb = self.orbs
88