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 )