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 
00029 from Koo.Fields.AbstractFieldWidget import *
00030 from Koo.Fields.AbstractFieldDelegate import *
00031 from Koo.Common.Numeric import *
00032 from PyQt4.QtGui import *
00033 from PyQt4.QtCore import *
00034 
00035 
00036 class FloatFieldWidget(AbstractFieldWidget):
00037         def __init__(self, parent, model, attrs={}):
00038                 AbstractFieldWidget.__init__(self, parent, model, attrs)
00039 
00040                 self.widget = QLineEdit(self)
00041                 self.widget.setSizePolicy( QSizePolicy.Preferred, QSizePolicy.Fixed )
00042                 self.widget.setAlignment( Qt.AlignRight )
00043                 layout = QHBoxLayout( self )
00044                 layout.setContentsMargins( 0, 0, 0, 0 )
00045                 layout.addWidget( self.widget )
00046 
00047                 self.installPopupMenu( self.widget )
00048                 self.connect( self.widget, SIGNAL('editingFinished()'), self.calculate )
00049                 self.digits = attrs.get('digits', None)
00050 
00051         def eventFilter( self, target, event ):
00052                 if event.type() == QEvent.FocusIn:
00053                         if self.record:
00054                                 self.setText( self.record.value(self.name) )
00055                 return AbstractFieldWidget.eventFilter(self, target, event)
00056 
00057         def setReadOnly(self, value):
00058                 AbstractFieldWidget.setReadOnly(self, value)
00059                 self.widget.setReadOnly( value )
00060 
00061         def calculate(self):
00062                 val = textToFloat( unicode(self.widget.text() ) )
00063                 self.setText( val )
00064                 self.modified()
00065 
00066         def value(self):
00067                 return textToFloat( unicode(self.widget.text()) )
00068 
00069         def storeValue(self):
00070                 self.record.setValue( self.name, self.value() )
00071 
00072         def clear(self):
00073                 self.setText( 0 )
00074                 
00075         def showValue(self):
00076                 if self.record.value(self.name):
00077                         self.setText( self.record.value(self.name) )
00078                 else:
00079                         self.clear()
00080 
00081         def colorWidget(self):
00082                 return self.widget
00083 
00084         def setText(self, value):
00085                 self.widget.setCursorPosition( 0 )
00086                 if self.widget.hasFocus() and not self.isReadOnly():
00087                         text = floatToText( value, self.digits )
00088                 else:
00089                         text = floatToText( value, self.digits, True )
00090                 self.widget.setText( text )
00091                 self.widget.setToolTip( text )
00092 
00093 class FloatFieldDelegate( AbstractFieldDelegate ):
00094         def setModelData(self, editor, model, index):
00095                 value = textToFloat( unicode( editor.text() ) )
00096                 model.setData( index, QVariant( value ), Qt.EditRole )