[Pymoul-svn] SF.net SVN: pymoul: [175] pymoul/trunk/src/moul/qt
Status: Alpha
Brought to you by:
tiran
From: <ti...@us...> - 2007-02-17 18:10:25
|
Revision: 175 http://pymoul.svn.sourceforge.net/pymoul/?rev=175&view=rev Author: tiran Date: 2007-02-17 10:10:20 -0800 (Sat, 17 Feb 2007) Log Message: ----------- Added basics for D'ni clock Modified Paths: -------------- pymoul/trunk/src/moul/qt/dninumbers.py pymoul/trunk/src/moul/qt/mainwindow.py pymoul/trunk/src/moul/qt/ui/mainwindow.py pymoul/trunk/src/moul/qt/ui/mainwindow.ui Modified: pymoul/trunk/src/moul/qt/dninumbers.py =================================================================== --- pymoul/trunk/src/moul/qt/dninumbers.py 2007-02-16 13:09:45 UTC (rev 174) +++ pymoul/trunk/src/moul/qt/dninumbers.py 2007-02-17 18:10:20 UTC (rev 175) @@ -22,6 +22,7 @@ __version__ = "$Id$" __revision__ = "$Revision$" +import operator import sys from PyQt4 import QtCore from PyQt4 import QtGui @@ -29,37 +30,214 @@ from PyQt4.QtCore import SIGNAL from PyQt4.QtCore import pyqtSignature +from moul.time.cavern import CavernTime +from moul.time.dni import DniTime +from moul.time.dni import FACTOR_SP +from moul.log import getLogger from moul.qt.utils import QNamespaceContainer from moul.qt.utils import QSignalLoggerMetaclass -from moul.qt.utils import questionMB -from moul.qt.utils import criticalMB +from moul.qt.utils import skipLogging +NUMBER_HEIGHT = 25 +LOG = getLogger('moul.qt.dni') + +class DniTimeNumberContainer(QNamespaceContainer): + """Container for Dni Date and Dni + number stuff + """ + __metaclass__ = QSignalLoggerMetaclass + __logger__ = LOG.debug + + def initialize(self): + # D'ni numbers + self.dninumbers = QDniNumbers() + self.setup_dniclock() + self.setup_dninumbers() + + # D'ni date and time + self.dnitime = DniTime() + self.on_dnitimer_timeout() + self.dnitime_timer = QtCore.QTimer(self.context) + self.dnitime_timer.setInterval(FACTOR_SP*1000) + self.connect(self.dnitime_timer, SIGNAL('timeout()'), + self.on_dnitimer_timeout) + self.dnitime_timer.start() + + # time zone + self.caverntime = CavernTime() + self.timezone_update() + # TODO: change timer from every second to every minute + self.timezone_timer = QtCore.QTimer(self.context) + self.timezone_timer.setInterval(1000) # 1 sec + # TODO: needs optimization? run only when timer tab is active + self.connect(self.timezone_timer, SIGNAL('timeout()'), + self.on_timezone_timer_timeout) + self.timezone_timer.start() + + def timezone_update(self): + """ + Update datetime widgets + """ + ct = self.caverntime.info() + + self.dt_cavern.setDateTime(ct['cavern']['datetime']) + self.dt_pacific.setDateTime(ct['pacific']['datetime']) + + off = ct['cavern']['utcoffset'] + txt = "UTC %s%i" % (off[0], abs(off[1])) + self.lb_cavern_utc.setText(QtCore.QString(txt)) + + off = ct['pacific']['utcoffset'] + txt = "UTC %s%i" % (off[0], abs(off[1])) + self.lb_pacific_utc.setText(QtCore.QString(txt)) + + @pyqtSignature("") + @skipLogging + def on_timezone_timer_timeout(self): + """ + SIGNAL: QTimer timeout + """ + ct = self.caverntime() + self.dt_cavern.setDateTime(ct['cavern']) + self.dt_pacific.setDateTime(ct['pacific']) + + @pyqtSignature("") + @skipLogging + def on_dnitimer_timeout(self): + """ + SIGNAL: QTimer timeout + """ + dni = self.dnitime.fromUTC() # set to now + self.context.le_dnitime.setText(str(self.dnitime)+", bell: %s" % + self.dnitime.pahrtovo) + + def setup_dniclock(self): + height = 15 + space = 5 + width = self.dninumbers.get(0, height=height).width() + widthl = self.dninumbers.getLeft(0, height=height).width() + widthm = self.dninumbers.getMiddle(0, height=height).width() + widthr = self.dninumbers.getRight(0, height=height).width() + widthhahr = widthl + widthm + widthr + widthyahr = widthhahr + 2 * space + width + + view = self.gv_dniclock + dniclock = self.dniclock = QtGui.QGraphicsScene(view.parent()) + view.setScene(self.dniclock) + view.show() + + self.hahrl = QDniNumberRing(dniclock, 0, 24, height, 'left') + self.hahrl.setPos(0, height+space) + self.hahrm = QDniNumberRing(dniclock, 0, 24, height, 'middle') + self.hahrm.setPos(widthl, height+space) + self.hahrr = QDniNumberRing(dniclock, 0, 24, height, 'right') + self.hahrr.setPos(widthl+widthm, height+space) + + self.vailee = QDniNumberRing(dniclock, 1, 10, height) + self.vailee.setPos(widthhahr+space, height+space) + self.yahrl = QDniNumberRing(dniclock, 0, 10, height, 'left') + self.yahrl.setPos(widthyahr, height+space) + self.yahrr = QDniNumberRing(dniclock, 0, 24, height, 'right') + self.yahrr.setPos(widthyahr+widthl, height+space) + + for i, ring in enumerate((self.hahrl, self.hahrm, self.hahrr, self.vailee, + self.yahrl, self.yahrr)): + ring.setNumber(i) + + for i, name in enumerate(('gahrtahvo', 'tahvo', 'gorahn', 'prorahn')): + ring = QDniNumberRing(dniclock, 0, 24, height, cyclic=True) + setattr(self, name, ring) + ring.setPos((width+space)*i+width/2, 0) + ring.setNumber(i) + + + def setup_dninumbers(self): + # may change! + widget = self.context.gridLayout_3 + grid = self.context.gridlayout3 + + alignl = QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter + alignc = QtCore.Qt.AlignCenter | QtCore.Qt.AlignVCenter + for i in range(0, 5): + for j in range(0, 5): + nr = QtGui.QLabel(widget) + nr.setObjectName("lb_dninumber_nr_%02i_%02i" % (i, j)) + nr.setAlignment(alignc) + nr.setText(str(i + j*5)) + grid.addWidget(nr, j, i*2) + dni_pic = self.dninumbers.get(i + j*5, height=NUMBER_HEIGHT) + dni = QtGui.QLabel(widget) + dni.setObjectName("lb_dninumber_%02i_%02i" % (i, j)) + dni.setPixmap(dni_pic) + dni.setAlignment(alignl) + grid.addWidget(dni, j, i*2+1) + + nr = QtGui.QLabel(widget) + nr.setObjectName("lb_dninumber_nr_25") + nr.setAlignment(alignc) + nr.setText("25") + grid.addWidget(nr, 5, 2) + dni_pic = self.dninumbers.get(25, height=NUMBER_HEIGHT) + dni = QtGui.QLabel(widget) + dni.setObjectName("lb_dninumber_25") + dni.setAlignment(alignl) + dni.setPixmap(dni_pic) + grid.addWidget(dni, 5, 3) + + nr = QtGui.QLabel(widget) + nr.setObjectName("lb_dninumber_nr_00c") + nr.setAlignment(alignc) + nr.setText(self.trUtf8("cyclic 0")) + grid.addWidget(nr, 5, 5, 1, 2) + dni_pic = self.dninumbers.get("cyclic", height=NUMBER_HEIGHT) + dni = QtGui.QLabel(widget) + dni.setObjectName("lb_dninumber_00c") + dni.setAlignment(alignl) + dni.setPixmap(dni_pic) + grid.addWidget(dni, 5, 7) + + dnipix = QDniNumberWidget(widget) + dnipix.setHeight(NUMBER_HEIGHT) + dnipix.setByDecimal(25, digits=2) + dnipix.setObjectName("dnw_dninumber_250") + dnipix.setPosition(grid, 5, 0, QtCore.Qt.AlignRight) + grid.addWidget(dnipix, 5, 0, 1, 2) + +QtGui.QPixmapCache.setCacheLimit(QtGui.QPixmapCache.cacheLimit() + 1024) + class QDniNumbers(object): """Qt D'ni Number helper class - - Lookup and scale pixmaps for D'ni numbers + + Lookup and scale pixmaps for D'ni numbers. Pixmaps are cached in a + QPixmapCache. You can create as many instances as you require w/o much + efficency drawbacks """ - def __init__(self): - self.pixmaps = {} - for i in range(0, 26): - self.pixmaps[i] = QtGui.QPixmap( - ":/dninumbers/resources/dninumbers/%02i.png" % i) - self.pixmaps['cyclic'] = QtGui.QPixmap( - ":/dninumbers/resources/dninumbers/00c.png") - # w, h = 67, 55 - self._rectleft = QtCore.QRect(0, 0, 60, 55) # with right border - self._rectright = QtCore.QRect(12, 0, 55, 55) # w/o left border - self._rectmiddle = QtCore.QRect(12, 0, 49, 55) # right line + __slots__ = () + # w, h = 67, 55 + _rectleft = QtCore.QRect(0, 0, 60, 55) # with right border + _rectright = QtCore.QRect(12, 0, 55, 55) # w/o left border + _rectmiddle = QtCore.QRect(12, 0, 49, 55) # right line + _valid = tuple(range(0, 26)) + ('cyclic',) @staticmethod - def _scale(pixmap, height=None): + def _insertCache(nr, height, pos, pm): + key = 'dninumber%s_%s_%s' % (nr, height if height else '', pos) + QtGui.QPixmapCache.insert(key, pm) + + @staticmethod + def _findCache(nr, height, pos): + key = 'dninumber%s_%s_%s' % (nr, height if height else '', pos) + return QtGui.QPixmapCache.find(key) + + @staticmethod + def _scale(pm, height=None): """Scale a pixmap to height """ if height is not None: - return pixmap.scaledToHeight(height, QtCore.Qt.SmoothTransformation) + return pm.scaledToHeight(height, QtCore.Qt.SmoothTransformation) else: - return pixmap + return pm def get(self, nr, height=None): """Get pixmap by number and scale it @@ -71,13 +249,29 @@ @return: (scaled) pixmap @rtype: QPixmap instance """ - try: + pm = self._findCache(nr, height, 'full') + if pm: + return pm + + if nr == "cyclic": + fname = "00c.png" + else: nr = int(nr) - except ValueError: - pass - pixmap = self.pixmaps[nr] - return self._scale(pixmap, height) + fname = "%02i.png" % nr + if nr not in self._valid: + raise ValueError(nr) + + # lookup non scaled + pm = self._findCache(nr, None, 'full') + if not pm: + pm = QtGui.QPixmap(":/dninumbers/resources/dninumbers/%s" % fname) + self._insertCache(nr, None, 'full', pm) + + spm = self._scale(pm, height) + self._insertCache(nr, height, 'full', spm) + return spm + def getLeft(self, nr, height=None): """Get pixmap for left digit of combined number @@ -88,8 +282,13 @@ @return: (scaled) pixmap @rtype: QPixmap instance """ - pixmap = self.get(nr).copy(self._rectleft) - return self._scale(pixmap, height) + pm = self._findCache(nr, height, 'left') + if pm: + return pm + pm = self.get(nr).copy(self._rectleft) + spm = self._scale(pm, height) + self._insertCache(nr, height, 'left', spm) + return spm def getRight(self, nr, height=None): """Get pixmap for right digit of combined number @@ -101,10 +300,15 @@ @return: (scaled) pixmap @rtype: QPixmap instance """ - pixmap = self.get(nr).copy(self._rectright) - return self._scale(pixmap, height) + pm = self._findCache(nr, height, 'right') + if pm: + return pm + pm = self.get(nr).copy(self._rectright) + spm = self._scale(pm, height) + self._insertCache(nr, height, 'right', spm) + return spm - def getMiddle(self, nr, heigh=None): + def getMiddle(self, nr, height=None): """Get pixmap for middle digit of combined number @param nr: number (0-25, 'cyclic') @@ -114,9 +318,28 @@ @return: (scaled) pixmap @rtype: QPixmap instance """ - pixmap = self.get(nr).copy(self._rectmiddle) - return self._scale(pixmap, height) + pm = self._findCache(nr, height, 'middle') + if pm: + return pm + pm = self.get(nr).copy(self._rectmiddle) + spm = self._scale(pm, height) + self._insertCache(nr, height, 'middle', spm) + return spm + def getFactory(self, model='full'): + """Get factory method for model + """ + if model == 'full': + return self.get + elif model == 'left': + return self.getLeft + elif model == 'right': + return self.getRight + elif model == 'middle': + return self.getMiddle + else: + raise ValueError(model) + class QDniNumberWidget(QtGui.QWidget): """Q D'ni number widget @@ -124,42 +347,61 @@ """ def __init__(self, parent): QtGui.QWidget.__init__(self, parent) - self.dni = None + self.dni = QDniNumbers() self.height = None self.numbers = () self._layout = None - def setDniNumbers(self, dninumbers): - """Set D'ni number instance - """ - if not isinstance(dninumbers, QDniNumbers): - raise TypeError(type(dninumbers)) - self.dni = dninumbers - def setHeight(self, height=None): """Set height to scale """ self.height=height + def setByDecimal(self, number, digits=1): + """Set numbers by decial value with minimum digits + """ + numbers = [] + pos = 0 + while True: + div = 25**pos + cur = (number / div) % 25 + number -= cur * div + pos+=1 + numbers.insert(0, cur) + if not number: + break + while len(numbers) < digits: + numbers.insert(0, 0) + return self.setNumbers(*numbers) + def setNumbers(self, *args): """Set numbers to display """ valid = tuple(range(0, 26)) + ('cyclic',) for number in args: - if not isinstance(number, int): + if not isinstance(number, (int, basestring)): raise TypeError(number) if number not in valid: raise ValueError(number) self.numbers = args - self._pmleft = self.dni.getLeft(self.numbers[0], height=self.height) - self._pmright = self.dni.getRight(self.numbers[-1], height=self.height) - self._pmmiddle = [self.dni.getMiddle(nr, height=self.height) - for nr in self.numbers[1:-1]] - if self._pmmiddle: - raise NotImplementedError + self.pmlist = [] + if len(args) == 1: + self.pmlist.append(self.dni.get(self.numbers[0], + height=self.height)) else: - middlewidth = 0 - self.width = self._pmleft.width() + self._pmright.width() + middlewidth + for i, number in enumerate(args): + if i == 0: + # first + self.pmlist.append(self.dni.getLeft(number, + height=self.height)) + elif i == len(self.numbers)-1: + # last + self.pmlist.append(self.dni.getRight(number, + height=self.height)) + else: + self.pmlist.append(self.dni.getMiddle(number, + height=self.height)) + self.width = reduce(operator.add, [pm.width() for pm in self.pmlist]) self.setMinimumSize(self.width, self.height) self.setMaximumSize(self.width, self.height) self.resize(self.width, self.height) @@ -190,8 +432,10 @@ #painter.setWindow(self.parent().rect()) # left - painter.drawPixmap(0, 0, self._pmleft) - painter.drawPixmap(self.width-self._pmright.width(), 0, self._pmright) + pos = 0 + for i, pm in enumerate(self.pmlist): + painter.drawPixmap(pos, 0, pm) + pos += pm.width() painter.end() # remove the hack! @@ -204,3 +448,74 @@ movex = movex // 2 self.move(geometry.x()+movex, geometry.y()) self._layout = None + +class QDniNumberRing(object): + """Qt D'ni number graphics item ring + + The class emulates a ring structure similar to a clock. Internally it + stores a list of QGraphicsPixmapItem assossiacted with a scene. All items + are hidden by default and at position (0,0) + + >>> example = QDniNumberRing(scene, start=1, stop=25) + >>> example.setPosition(24) + <Pixmap Graphics Item 24> + >>> example.next() + <Pixmap Graphics Item 25> + >>> example.next() + <Pixmap Graphics Item 25> + """ + __slots__ = ('_elements', '_first', '_last', '_pos') + + def __init__(self, scene, start=0, stop=24, height=None, + model='full', cyclic=False): + factory = QDniNumbers().getFactory(model) + self._elements = [] + self._first = start + self._last = stop + self._pos = start + for i in range(start, stop+1): + if cyclic and i == 0: + i = 'cyclic' + pmitem = QtGui.QGraphicsPixmapItem(factory(i, height=height)) + pmitem.hide() + scene.addItem(pmitem) + self._elements.append(pmitem) + + def __getitem__(self, pos): + return self._elements[pos - self._first] + + def next(self): + """Get next item + + Hides the current item and returns the next item after it is made visible + """ + pos = self._pos + self[pos].hide() + pos += 1 + if pos > self._last: + pos = self._first + self._pos = pos + element = self[pos] + element.show() + return element + + def setNumber(self, nr): + """Set current number to nr + + Also hides all elements before returning the current element + """ + for element in self._elements: + element.hide() + element = self[nr] + element.show() + self._pos = nr + return element + + def setPos(self, xpos, y=None): + """Set position of element + """ + for element in self._elements: + if y is not None: + element.setPos(xpos, y) + else: + element.setPos(xpos) Modified: pymoul/trunk/src/moul/qt/mainwindow.py =================================================================== --- pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-16 13:09:45 UTC (rev 174) +++ pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-17 18:10:20 UTC (rev 175) @@ -41,10 +41,8 @@ from moul.server.ping import ServerList from moul.server.ping import isSocketError from moul.server.ping import fmtSocketError -from moul.time.cavern import CavernTime -from moul.time.dni import DniTime -from moul.time.dni import FACTOR_SP +from moul.qt.dninumbers import DniTimeNumberContainer from moul.qt.localization import LocalizationContainer from moul.qt.wdysini import IniFileContainer from moul.qt.simpleprogressbar import SimpleProgressbar @@ -52,8 +50,6 @@ from moul.qt.threadlet import Threadlet from moul.qt.ui.mainwindow import Ui_MainWindow from moul.qt import utils as qtutils -from moul.qt.dninumbers import QDniNumbers -from moul.qt.dninumbers import QDniNumberWidget LOG = getLogger('moul.qt') @@ -89,14 +85,13 @@ self.urupersonaldir.initializeFactories() # init handlers - self._dninumbers_init() - self._timezone_init() self._ping_init() self._systray_init() self._about_init() self._chatlog_init() self.qcLocalization = LocalizationContainer(self) self.qcIniFile = IniFileContainer(self) + self.qcDniTimeNumber = DniTimeNumberContainer(self) # run checker self._moulrunning = None @@ -388,68 +383,6 @@ sfdonate_url)) # ************************************************************************ - # time zones - def _timezone_init(self): - """ - Init time zone tab""" - # create info object and update display the first time - self._caverntime = CavernTime() - self._timezone_update() - - # create a timer to update the display every second - # TODO: change timer from every second to every minute - self._timezone_timer = QtCore.QTimer(self) - self._timezone_timer.setInterval(1000) # 1 sec - # TODO: needs optimization? run only when timer tab is active - self.connect(self._timezone_timer, SIGNAL('timeout()'), - self.on_timezone_timer_timeout) - self._timezone_timer.start() - - self._dnitime = DniTime() - self.on_dnitimer_timeout() - self._dnitime_timer = QtCore.QTimer(self) - self._dnitime_timer.setInterval(FACTOR_SP*1000) - self.connect(self._dnitime_timer, SIGNAL('timeout()'), - self.on_dnitimer_timeout) - self._dnitime_timer.start() - - def _timezone_update(self): - """ - Update datetime widgets - """ - ct = self._caverntime.info() - - self.dt_cavern.setDateTime(ct['cavern']['datetime']) - self.dt_pacific.setDateTime(ct['pacific']['datetime']) - - off = ct['cavern']['utcoffset'] - txt = "UTC %s%i" % (off[0], abs(off[1])) - self.lb_cavern_utc.setText(QtCore.QString(txt)) - - off = ct['pacific']['utcoffset'] - txt = "UTC %s%i" % (off[0], abs(off[1])) - self.lb_pacific_utc.setText(QtCore.QString(txt)) - - @pyqtSignature("") - @qtutils.skipLogging - def on_timezone_timer_timeout(self): - """ - SIGNAL: QTimer timeout - """ - ct = self._caverntime() - self.dt_cavern.setDateTime(ct['cavern']) - self.dt_pacific.setDateTime(ct['pacific']) - - @pyqtSignature("") - @qtutils.skipLogging - def on_dnitimer_timeout(self): - """ - SIGNAL: QTimer timeout - """ - dni = self._dnitime.fromUTC() # set to now - self.le_dnitime.setText(str(self._dnitime)+", bell: %s" % self._dnitime.pahrtovo) - - # ************************************************************************ # ping def _ping_init(self): """ @@ -506,59 +439,6 @@ else: LOG.error("Ping thread is already running") - def _dninumbers_init(self): - self._dninumbers = QDniNumbers() - height = 25 - widget = self.gridLayout_3 - grid = self.gridlayout3 - alignl = QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter - alignc = QtCore.Qt.AlignCenter | QtCore.Qt.AlignVCenter - for i in range(0, 5): - for j in range(0, 5): - nr = QtGui.QLabel(widget) - nr.setObjectName("lb_dninumber_nr_%02i_%02i" % (i, j)) - nr.setAlignment(alignc) - nr.setText(str(i + j*5)) - grid.addWidget(nr, j, i*2) - dni_pic = self._dninumbers.get(i + j*5, height=height) - dni = QtGui.QLabel(widget) - dni.setObjectName("lb_dninumber_%02i_%02i" % (i, j)) - dni.setPixmap(dni_pic) - dni.setAlignment(alignl) - grid.addWidget(dni, j, i*2+1) - - nr = QtGui.QLabel(widget) - nr.setObjectName("lb_dninumber_nr_25") - nr.setAlignment(alignc) - nr.setText("25") - grid.addWidget(nr, 5, 2) - dni_pic = self._dninumbers.get(25, height=height) - dni = QtGui.QLabel(widget) - dni.setObjectName("lb_dninumber_25") - dni.setAlignment(alignl) - dni.setPixmap(dni_pic) - grid.addWidget(dni, 5, 3) - - nr = QtGui.QLabel(widget) - nr.setObjectName("lb_dninumber_nr_00c") - nr.setAlignment(alignc) - nr.setText(self.trUtf8("cyclic 0")) - grid.addWidget(nr, 5, 5, 1, 2) - dni_pic = self._dninumbers.get("cyclic", height=height) - dni = QtGui.QLabel(widget) - dni.setObjectName("lb_dninumber_00c") - dni.setAlignment(alignl) - dni.setPixmap(dni_pic) - grid.addWidget(dni, 5, 7) - - dnipix = QDniNumberWidget(widget) - dnipix.setDniNumbers(self._dninumbers) - dnipix.setHeight(25) - dnipix.setNumbers(1, 0) - dnipix.setObjectName("dnw_dninumber_250") - dnipix.setPosition(grid, 5, 0, QtCore.Qt.AlignRight) - grid.addWidget(dnipix, 5, 0, 1, 2) - class PingServerThread(QtCore.QThread): def __init__(self, parent=None): QtCore.QThread.__init__(self, parent) Modified: pymoul/trunk/src/moul/qt/ui/mainwindow.py =================================================================== --- pymoul/trunk/src/moul/qt/ui/mainwindow.py 2007-02-16 13:09:45 UTC (rev 174) +++ pymoul/trunk/src/moul/qt/ui/mainwindow.py 2007-02-17 18:10:20 UTC (rev 175) @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file './src/moul/qt/ui/mainwindow.ui' # -# Created: Thu Feb 15 13:28:03 2007 +# Created: Sat Feb 17 18:51:48 2007 # by: PyQt4 UI code generator 4.1.1 # # WARNING! All changes made in this file will be lost! @@ -117,11 +117,11 @@ self.gridlayout.addWidget(self.lb_log_remove,1,1,1,3) self.groupBox_2 = QtGui.QGroupBox(self.tab_tasks) - self.groupBox_2.setGeometry(QtCore.QRect(10,120,451,81)) + self.groupBox_2.setGeometry(QtCore.QRect(10,120,451,61)) self.groupBox_2.setObjectName("groupBox_2") self.layoutWidget1 = QtGui.QWidget(self.groupBox_2) - self.layoutWidget1.setGeometry(QtCore.QRect(10,30,431,30)) + self.layoutWidget1.setGeometry(QtCore.QRect(10,20,431,30)) self.layoutWidget1.setObjectName("layoutWidget1") self.hboxlayout1 = QtGui.QHBoxLayout(self.layoutWidget1) @@ -142,7 +142,7 @@ self.hboxlayout1.addItem(spacerItem3) self.gb_caverntime = QtGui.QGroupBox(self.tab_tasks) - self.gb_caverntime.setGeometry(QtCore.QRect(10,200,451,101)) + self.gb_caverntime.setGeometry(QtCore.QRect(10,180,451,101)) self.gb_caverntime.setObjectName("gb_caverntime") self.gridLayout = QtGui.QWidget(self.gb_caverntime) @@ -203,14 +203,20 @@ self.gridlayout1.addItem(spacerItem4,0,3,1,1) self.gb_dnitime = QtGui.QGroupBox(self.tab_tasks) - self.gb_dnitime.setGeometry(QtCore.QRect(10,300,451,101)) + self.gb_dnitime.setGeometry(QtCore.QRect(10,280,451,121)) self.gb_dnitime.setObjectName("gb_dnitime") self.le_dnitime = QtGui.QLineEdit(self.gb_dnitime) - self.le_dnitime.setGeometry(QtCore.QRect(10,40,281,25)) + self.le_dnitime.setGeometry(QtCore.QRect(200,20,241,25)) self.le_dnitime.setEchoMode(QtGui.QLineEdit.Normal) self.le_dnitime.setReadOnly(True) self.le_dnitime.setObjectName("le_dnitime") + + self.gv_dniclock = QtGui.QGraphicsView(self.gb_dnitime) + self.gv_dniclock.setGeometry(QtCore.QRect(10,20,181,94)) + self.gv_dniclock.setAcceptDrops(False) + self.gv_dniclock.setFrameShadow(QtGui.QFrame.Plain) + self.gv_dniclock.setObjectName("gv_dniclock") self.tabwidget.addTab(self.tab_tasks,"") self.tab_settings = QtGui.QWidget() Modified: pymoul/trunk/src/moul/qt/ui/mainwindow.ui =================================================================== --- pymoul/trunk/src/moul/qt/ui/mainwindow.ui 2007-02-16 13:09:45 UTC (rev 174) +++ pymoul/trunk/src/moul/qt/ui/mainwindow.ui 2007-02-17 18:10:20 UTC (rev 175) @@ -282,7 +282,7 @@ <x>10</x> <y>120</y> <width>451</width> - <height>81</height> + <height>61</height> </rect> </property> <property name="title" > @@ -292,7 +292,7 @@ <property name="geometry" > <rect> <x>10</x> - <y>30</y> + <y>20</y> <width>431</width> <height>30</height> </rect> @@ -347,7 +347,7 @@ <property name="geometry" > <rect> <x>10</x> - <y>200</y> + <y>180</y> <width>451</width> <height>101</height> </rect> @@ -470,9 +470,9 @@ <property name="geometry" > <rect> <x>10</x> - <y>300</y> + <y>280</y> <width>451</width> - <height>101</height> + <height>121</height> </rect> </property> <property name="title" > @@ -481,9 +481,9 @@ <widget class="QLineEdit" name="le_dnitime" > <property name="geometry" > <rect> - <x>10</x> - <y>40</y> - <width>281</width> + <x>200</x> + <y>20</y> + <width>241</width> <height>25</height> </rect> </property> @@ -494,6 +494,22 @@ <bool>true</bool> </property> </widget> + <widget class="QGraphicsView" name="gv_dniclock" > + <property name="geometry" > + <rect> + <x>10</x> + <y>20</y> + <width>181</width> + <height>94</height> + </rect> + </property> + <property name="acceptDrops" > + <bool>false</bool> + </property> + <property name="frameShadow" > + <enum>QFrame::Plain</enum> + </property> + </widget> </widget> </widget> <widget class="QWidget" name="tab_settings" > This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |