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.Common import Common
00030 from Koo.Common import Shortcuts
00031
00032 from Koo.Fields.AbstractFieldWidget import *
00033 from Koo.Fields.AbstractFieldDelegate import *
00034 from Koo.Common.Calendar import *
00035 from PyQt4.QtCore import *
00036 from PyQt4.QtGui import *
00037 from PyQt4.uic import *
00038
00039 (DateFieldWidgetUi, DateFieldWidgetBase ) = loadUiType( Common.uiPath('calendar.ui') )
00040
00041 class DateFieldWidget(AbstractFieldWidget, DateFieldWidgetUi):
00042 def __init__(self, parent, model, attrs={}):
00043 AbstractFieldWidget.__init__(self, parent, model, attrs)
00044 DateFieldWidgetUi.__init__(self)
00045 self.setupUi(self)
00046
00047
00048 self.scSearch = QShortcut( self.uiDate )
00049 self.scSearch.setKey( Shortcuts.SearchInField )
00050 self.scSearch.setContext( Qt.WidgetShortcut )
00051 self.connect( self.scSearch, SIGNAL('activated()'), self.showCalendar )
00052
00053 self.connect( self.pushCalendar, SIGNAL( "clicked()" ),self.showCalendar )
00054 self.dateTime = False
00055 self.connect( self.uiDate, SIGNAL('editingFinished()'), self.updateValue )
00056 self.installPopupMenu( self.uiDate )
00057
00058 def updateValue(self):
00059 self.modified()
00060 self.showValue()
00061
00062 def menuEntries(self):
00063 return [ (_('Set current date'), self._setCurrentDate, True ) ]
00064
00065 def _setCurrentDate( self ):
00066 self.setText( dateToText( QDate.currentDate() ) )
00067
00068 def colorWidget(self):
00069 return self.uiDate
00070
00071 def setReadOnly(self, value):
00072 AbstractFieldWidget.setReadOnly(self, value)
00073 self.uiDate.setReadOnly( value )
00074 self.pushCalendar.setEnabled( not value )
00075
00076 def value(self):
00077 date = textToDate( self.uiDate.text() )
00078 if not date.isValid():
00079 return False
00080 return dateToStorage(date)
00081
00082 def storeValue(self):
00083
00084
00085
00086
00087
00088
00089 if self.isReadOnly():
00090 return
00091 self.record.setValue(self.name, self.value())
00092
00093 def clear(self):
00094 self.uiDate.clear()
00095 self.uiDate.setToolTip('')
00096
00097 def showValue(self):
00098
00099 if not self.record:
00100 self.clear()
00101 return
00102 value = self.record.value(self.name)
00103 if value:
00104 self.setText( dateToText( storageToDate( value ) ) )
00105 else:
00106 self.clear()
00107
00108 def showCalendar(self):
00109 popup = PopupCalendarWidget( self.uiDate, self.dateTime )
00110 self.connect( popup, SIGNAL('selected()'), self.store )
00111
00112 def setText(self, text):
00113 self.uiDate.setCursorPosition( 0 )
00114 self.uiDate.setText( text )
00115 self.uiDate.setToolTip( text )
00116
00117
00118 class DateTimeFieldWidget( DateFieldWidget ):
00119 def __init__(self, parent, model, attrs={}):
00120 DateFieldWidget.__init__( self, parent, model, attrs=attrs)
00121 self.dateTime = True
00122
00123 def menuEntries(self):
00124 return [ (_('Set current date and time'), self._setCurrentDateTime, True ) ]
00125
00126 def _setCurrentDateTime( self ):
00127 self.uiDate.setText( dateTimeToText( QDateTime.currentDateTime() ) )
00128
00129 def value(self):
00130 datetime = textToDateTime( self.uiDate.text() )
00131 if not datetime.isValid():
00132 return False
00133 return str(dateTimeToStorage( datetime ))
00134
00135 def showValue(self):
00136
00137 if not self.record:
00138 self.clear()
00139 return
00140 value = self.record.value(self.name)
00141 if value:
00142 self.setText( dateTimeToText( storageToDateTime(value) ) )
00143 else:
00144 self.clear()
00145
00146
00147
00148 class TimeFieldWidget(AbstractFieldWidget):
00149 def __init__(self, parent, model, attrs={}):
00150 AbstractFieldWidget.__init__(self, parent, model, attrs)
00151 self.uiTime = QLineEdit( self )
00152 self.uiTime.setSizePolicy( QSizePolicy.Preferred, QSizePolicy.Fixed )
00153 layout = QHBoxLayout( self )
00154 layout.setContentsMargins( 0, 0, 0, 0 )
00155 layout.addWidget( self.uiTime )
00156 self.installPopupMenu( self.uiTime )
00157 self.connect( self.uiTime, SIGNAL('editingFinished()'), self.updateValue )
00158
00159 def updateValue(self):
00160 self.modified()
00161 self.showValue()
00162
00163 def menuEntries( self ):
00164 return [ (_('Set current time'), self.setCurrentTime, True ) ]
00165
00166 def setCurrentTime( self ):
00167 self.setText( timeToText( QTime.currentTime() ) )
00168
00169 def setReadOnly(self, value):
00170 AbstractFieldWidget.setReadOnly(self, value)
00171 self.uiTime.setReadOnly(value)
00172
00173 def colorWidget(self):
00174 return self.uiTime
00175
00176 def value(self):
00177 time = textToTime( self.uiTime.text() )
00178 if not time.isValid():
00179 return False
00180 return timeToStorage( time )
00181
00182 def storeValue(self):
00183 self.record.setValue(self.name, self.value())
00184
00185 def clear(self):
00186 self.uiTime.clear()
00187 self.uiTime.setToolTip('')
00188
00189 def showValue(self):
00190
00191 if not self.record:
00192 self.clear()
00193 return
00194 value = self.record.value(self.name)
00195 if value:
00196 self.setText( timeToText( storageToTime( value ) ) )
00197 else:
00198 self.clear()
00199
00200 def setText(self, text):
00201 self.uiTime.setCursorPosition( 0 )
00202 self.uiTime.setText( text )
00203 self.uiTime.setToolTip( text )
00204
00205 class FloatTimeFieldWidget(AbstractFieldWidget):
00206 def __init__(self, parent, model, attrs={}):
00207 AbstractFieldWidget.__init__(self, parent, model, attrs)
00208 self.uiTime = QLineEdit( self )
00209 self.uiTime.setSizePolicy( QSizePolicy.Preferred, QSizePolicy.Fixed )
00210 self.uiTime.setMaxLength( 11 )
00211 layout = QHBoxLayout( self )
00212 layout.setContentsMargins( 0, 0, 0, 0 )
00213 layout.addWidget( self.uiTime )
00214 self.installPopupMenu( self.uiTime )
00215 self.connect( self.uiTime, SIGNAL('editingFinished()'), self.updateValue )
00216
00217 def updateValue(self):
00218 self.modified()
00219 self.showValue()
00220
00221 def menuEntries( self ):
00222 return [ (_('Set current time'), self.setCurrentTime, True ) ]
00223
00224 def setCurrentTime( self ):
00225 self.setText( timeToText( QTime.currentTime() ) )
00226
00227 def setReadOnly(self, value):
00228 AbstractFieldWidget.setReadOnly(self, value)
00229 self.uiTime.setReadOnly(value)
00230
00231 def colorWidget(self):
00232 return self.uiTime
00233
00234 def value(self):
00235 time = textToFloatTime( self.uiTime.text() )
00236 if not time.isValid():
00237 return False
00238 return timeToStorage( time )
00239
00240 def storeValue(self):
00241 self.record.setValue(self.name, textToFloatTime(unicode(self.uiTime.text())) )
00242
00243 def clear(self):
00244 self.setText('00:00')
00245
00246 def showValue(self):
00247
00248 if not self.record:
00249 self.clear()
00250 return
00251 value = self.record.value(self.name)
00252 if value:
00253 self.setText( floatTimeToText( float( value ) ) )
00254 else:
00255 self.setText( '00:00' )
00256
00257 def setText(self, text):
00258 self.uiTime.setCursorPosition( 0 )
00259 self.uiTime.setText( text )
00260 self.uiTime.setToolTip( text )
00261
00262 class DateFieldDelegate( AbstractFieldDelegate ):
00263 def setModelData(self, editor, model, index):
00264 value = textToDate( editor.text() )
00265 model.setData( index, QVariant( value ), Qt.EditRole )
00266
00267 class TimeFieldDelegate( AbstractFieldDelegate ):
00268 def setModelData(self, editor, model, index):
00269 value = textToTime( editor.text() )
00270 model.setData( index, QVariant( value ), Qt.EditRole )
00271
00272 class DateTimeFieldDelegate( AbstractFieldDelegate ):
00273 def setModelData(self, editor, model, index):
00274 value = textToDateTime( editor.text() )
00275 model.setData( index, QVariant( value ), Qt.EditRole )
00276
00277 class FloatTimeFieldDelegate( AbstractFieldDelegate ):
00278 def setModelData(self, editor, model, index):
00279 value = textToFloatTime( unicode(editor.text()) )
00280 model.setData( index, QVariant( value ), Qt.EditRole )