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 )