summaryrefslogtreecommitdiffstats
path: root/python/pyqt/examples3/progress.py
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commit90825e2392b2d70e43c7a25b8a3752299a933894 (patch)
treee33aa27f02b74604afbfd0ea4f1cfca8833d882a /python/pyqt/examples3/progress.py
downloadtdebindings-90825e2392b2d70e43c7a25b8a3752299a933894.tar.gz
tdebindings-90825e2392b2d70e43c7a25b8a3752299a933894.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebindings@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'python/pyqt/examples3/progress.py')
-rwxr-xr-xpython/pyqt/examples3/progress.py287
1 files changed, 287 insertions, 0 deletions
diff --git a/python/pyqt/examples3/progress.py b/python/pyqt/examples3/progress.py
new file mode 100755
index 00000000..acdbd5aa
--- /dev/null
+++ b/python/pyqt/examples3/progress.py
@@ -0,0 +1,287 @@
+#!/usr/bin/env python
+
+#/****************************************************************************
+#** $Id$
+#**
+#** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
+#**
+#** This file is part of an example program for Qt. This example
+#** program may be used, distributed and modified without limitation.
+#**
+#** Converted to PyQt3: Hans-Peter Jansen <hpj@urpla.net>
+#**
+#*****************************************************************************/
+
+from qt import *
+import sys
+from random import random
+
+TRUE = 1
+FALSE = 0
+
+class AnimatedThingy(QLabel):
+ def __init__(self, parent, s):
+ QLabel.__init__(self, parent)
+ self.nqix = 40
+ self.step = 0
+ self.ox = []
+ self.oy = []
+ self.px = []
+ self.py = []
+ for i in range(self.nqix):
+ self.ox.append(0)
+ self.oy.append(0)
+ self.px.append(0)
+ self.py.append(0)
+ self.x0, self.y0, self.x1, self.y1 = 0, 0, 0, 0
+ self.dx0 = 2 + int(random() * 8)
+ self.dy0 = 2 + int(random() * 8)
+ self.dx1 = 2 + int(random() * 8)
+ self.dy1 = 2 + int(random() * 8)
+ self.label = QString(s)
+ self.setEraseColor(Qt.black)
+ self.label.append("\n... and wasting CPU\nwith this animation!\n")
+
+ def XXXshow(self):
+ if not self.isVisible():
+ print "bla"
+ self.startTimer(100)
+ QWidget.show(self)
+
+ def hide(self):
+ QWidget.hide(self)
+ self.killTimers()
+
+ def sizeHint(self):
+ return QSize(120, 100)
+
+ def timerEvent(self, e):
+ p, pn = self._painter()
+ pn.setColor(self.eraseColor())
+ p.setPen(pn)
+ self.step = step = (self.step + 1) % self.nqix
+ # erase line
+ p.drawLine(self.ox[step], self.oy[step], self.px[step], self.py[step])
+ # calc new line coordinates
+ self.x0, self.dx0 = self._inc(self.x0, self.dx0, self.width())
+ self.y0, self.dy0 = self._inc(self.y0, self.dy0, self.height())
+ self.x1, self.dx1 = self._inc(self.x1, self.dx1, self.width())
+ self.y1, self.dy1 = self._inc(self.y1, self.dy1, self.height())
+ self.ox[step] = self.x0
+ self.oy[step] = self.y0
+ self.px[step] = self.x1
+ self.py[step] = self.y1
+ self._drawqix(p, pn, step)
+ self._drawtxt(p)
+
+ def paintEvent(self, e):
+ p, pn = self._painter()
+ p.setClipRect(e.rect())
+ for i in range(self.nqix):
+ self._drawqix(p, pn, i)
+ self._drawtxt(p)
+
+ def _painter(self):
+ p = QPainter(self)
+ pn = p.pen()
+ pn.setWidth(2)
+ p.setPen(pn)
+ return p, pn
+
+ def _drawqix(self, p, pn, step):
+ c = QColor()
+ # enhanced rainbow effect
+ i = (step * 511)/self.nqix
+ if i > 255:
+ i = 511 - i
+ c.setHsv(i, 255, 255)
+ pn.setColor(c)
+ p.setPen(pn)
+ p.drawLine(self.ox[step], self.oy[step], self.px[step], self.py[step])
+
+ def _drawtxt(self, p):
+ #p.setPen(self.colorGroup().text())
+ p.setPen(Qt.white)
+ p.drawText(self.rect(), Qt.AlignCenter, self.label)
+
+ def _inc(self, x, dx, b):
+ x += dx
+ if x < 0:
+ x = 0
+ dx = 2 + int(random() * 8)
+ elif x >= b:
+ x = b-1
+ dx = -(2 + int(random() * 8))
+ return x, dx
+
+
+class CPUWaster(QWidget):
+ def __init__(self):
+ QWidget.__init__(self)
+ self.first_draw_item = 1000
+ self.last_draw_item = 1006
+ self.rects = 0
+ self.timer_driven = 0
+ self.default_label = 0
+ self.got_stop = 0
+ self.pb = None
+ menubar = QMenuBar(self, "menu")
+ file = QPopupMenu()
+ menubar.insertItem("&File", file)
+ for i in range(self.first_draw_item, self.last_draw_item + 1):
+ file.insertItem(self.drawItemText(i), i)
+ self.connect(menubar, SIGNAL("activated(int)"), self.doMenuItem)
+ file.insertSeparator()
+ file.insertItem("Quit", qApp, SLOT("quit()"))
+ options = QPopupMenu()
+ menubar.insertItem("&Options", options)
+ self.td_id = options.insertItem("Timer driven", self.timerDriven)
+ self.ld_id = options.insertItem("Loop driven", self.loopDriven)
+ options.insertSeparator()
+ self.dl_id = options.insertItem("Default label", self.defaultLabel)
+ self.cl_id = options.insertItem("Custom label", self.customLabel)
+ options.insertSeparator()
+ self.md_id = options.insertItem("No minimum duration", self.toggleMinimumDuration)
+ options.setCheckable(TRUE)
+ self.options = options
+ self.menubar = menubar
+ self.file = file
+ #self.loopDriven()
+ self.timerDriven()
+ #self.defaultLabel()
+ self.customLabel()
+ self.setFixedSize(400, 300)
+ self.setEraseColor(Qt.black)
+
+ def drawItemRects(self, id):
+ n = id - self.first_draw_item
+ r = 100
+ while n:
+ n -= 1
+ f = 5
+ if not n % 3:
+ f = 4
+ r *= f
+ return r
+
+ def drawItemText(self, id):
+ return QString("%d Rectangles" % self.drawItemRects(id))
+
+ # slots
+ def doMenuItem(self, id):
+ if id >= self.first_draw_item and id <= self.last_draw_item:
+ self._draw(self.drawItemRects(id))
+
+ def stopDrawing(self):
+ self.got_stop = TRUE
+
+ def timerDriven(self):
+ self.timer_driven = TRUE
+ self.options.setItemChecked(self.td_id, TRUE)
+ self.options.setItemChecked(self.ld_id, FALSE)
+
+ def loopDriven(self):
+ self.timer_driven = FALSE
+ self.options.setItemChecked(self.ld_id, TRUE)
+ self.options.setItemChecked(self.td_id, FALSE)
+
+ def defaultLabel(self):
+ self.default_label = TRUE
+ self.options.setItemChecked(self.dl_id, TRUE)
+ self.options.setItemChecked(self.cl_id, FALSE)
+
+ def customLabel(self):
+ self.default_label = FALSE
+ self.options.setItemChecked(self.dl_id, FALSE)
+ self.options.setItemChecked(self.cl_id, TRUE)
+
+ def toggleMinimumDuration(self):
+ self.options.setItemChecked(self.md_id, not self.options.isItemChecked(self.md_id))
+
+ def timerEvent(self, e):
+ self.pb.setProgress(self.pb.totalSteps() - self.rects)
+ self.rects -= 1
+ p = QPainter(self)
+ ww = self.width()
+ wh = self.height()
+
+ if ww > 8 and wh > 8:
+ c = QColor(int(random() * 255), int(random() * 255), int(random() * 255))
+ x = int(random() * (ww-8))
+ y = int(random() * (wh-8))
+ w = int(random() * (ww-x))
+ h = int(random() * (wh-y))
+ p.fillRect(x, y, w, h, QBrush(c))
+
+ if not self.rects or self.got_stop:
+ self.pb.setProgress(self.pb.totalSteps())
+ p = QPainter(self)
+ p.fillRect(0, 0, self.width(), self.height(), QBrush(self.eraseColor()))
+ self.enableDrawingItems(TRUE)
+ self.killTimers()
+ if not self.default_label:
+ self.pb.killTimers()
+ self.l.killTimers()
+ del self.pb
+ self.pb = None
+
+ def newProgressDialog(self, label, steps, modal):
+ d = QProgressDialog(label, "Cancel", steps, self, "progress", modal)
+ if self.options.isItemChecked(self.md_id):
+ d.setMinimumDuration(0)
+ if not self.default_label:
+ self.l = AnimatedThingy(d, label)
+ d.setLabel(self.l)
+ self.l.startTimer(100)
+ return d
+
+ def enableDrawingItems(self, yes):
+ for i in range(self.first_draw_item, self.last_draw_item):
+ self.menubar.setItemEnabled(i, yes)
+
+ def _draw(self, n):
+ if self.timer_driven:
+ if self.pb:
+ qWarning("This cannot happen!")
+ return
+
+ self.rects = n
+ self.pb = self.newProgressDialog("Drawing rectangles.\nUsing timer event.", n, FALSE)
+ self.pb.setCaption("Please Wait")
+ self.connect(self.pb, SIGNAL("cancelled()"), self.stopDrawing)
+ self.enableDrawingItems(FALSE)
+ self.startTimer(10)
+ self.got_stop = FALSE
+ else:
+ lpb = self.newProgressDialog("Drawing rectangles.\nUsing loop.", n, TRUE)
+ lpb.setCaption("Please Wait")
+
+ p = QPainter(self)
+ for i in range(n):
+ lpb.setProgress(i)
+ if lpb.wasCancelled():
+ break
+ c = QColor(int(random() * 255), int(random() * 255), int(random() * 255))
+ x = int(random() * (self.width()-8))
+ y = int(random() * (self.height()-8))
+ w = int(random() * (self.width()-x))
+ h = int(random() * (self.height()-y))
+ p.fillRect(x, y, w, h, QBrush(c))
+
+ lpb.cancel()
+ del lpb
+ p.fillRect(0, 0, self.width(), self.height(), QBrush(self.eraseColor()))
+
+
+if __name__ == "__main__":
+ app = QApplication(sys.argv)
+ try:
+ n = int(sys.argv[1])
+ except:
+ n = 1
+ for i in range(n):
+ cpuw = CPUWaster()
+ if i == 0:
+ app.setMainWidget(cpuw)
+ cpuw.show()
+ app.exec_loop()