diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 90825e2392b2d70e43c7a25b8a3752299a933894 (patch) | |
tree | e33aa27f02b74604afbfd0ea4f1cfca8833d882a /python/pyqt/examples3/progress.py | |
download | tdebindings-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-x | python/pyqt/examples3/progress.py | 287 |
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() |