00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 from Koo.View.AbstractView import *
00029 from PyQt4.QtGui import *
00030 from PyQt4.QtCore import *
00031 from PyQt4.QtSvg import *
00032
00033 class SvgView( AbstractView ):
00034 def __init__(self, parent=None):
00035 AbstractView.__init__( self, parent )
00036 self.scene = QGraphicsScene( self )
00037 self.view = QGraphicsView( self )
00038 self.view.setScene( self.scene )
00039 self.view.setRenderHints(QPainter.Antialiasing | QPainter.TextAntialiasing | QPainter.SmoothPixmapTransform);
00040 self.view.setHorizontalScrollBarPolicy( Qt.ScrollBarAlwaysOff )
00041 self.view.setVerticalScrollBarPolicy( Qt.ScrollBarAlwaysOff )
00042 self.svg = None
00043 self.widgets = {}
00044 self.fields = {}
00045 self.record = None
00046
00047 layout = QVBoxLayout(self)
00048 layout.addWidget( self.view )
00049
00050 def viewType(self):
00051 return 'gantt'
00052
00053 def showsMultipleRecords(self):
00054 return False
00055
00056 def setSvg( self, file ):
00057
00058
00059
00060
00061 self.svg = QGraphicsSvgItem( file )
00062 self.scene.addItem( self.svg )
00063
00064 for name in self.widgets.keys():
00065 if not self.svg.renderer().elementExists( name ):
00066 continue
00067 r = self.svg.renderer().boundsOnElement( name )
00068
00069 widget = self.widgets[name]
00070 widget.resize( r.size().width(), r.size().height() )
00071 proxy = self.scene.addWidget( widget )
00072 proxy.resize( r.size() )
00073
00074 proxy.moveBy( r.x(), r.y() )
00075 proxy.setZValue( 1 )
00076
00077
00078
00079 def display(self, currentRecord, records):
00080
00081
00082
00083
00084
00085
00086
00087
00088 if self.record:
00089 self.disconnect(self.record,SIGNAL('recordChanged(PyQt_PyObject)'),self.updateDisplay)
00090 self.record = currentRecord
00091 if self.record:
00092 self.connect(self.record, SIGNAL('recordChanged(PyQt_PyObject)'),self.updateDisplay)
00093 self.updateDisplay(self.record)
00094
00095 def updateDisplay(self, record):
00096
00097 for name in self.widgets:
00098 if self.record:
00099 self.widgets[name].load(self.record)
00100 else:
00101 self.widgets[name].load(None)