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 PyQt4.QtCore import *
00029 from PyQt4.QtGui import *
00030 from PyQt4.uic import *
00031 from PyQt4.QtWebKit import *
00032 from PyQt4.QtNetwork import *
00033 from Koo.Common import Common
00034 from Koo.Fields.AbstractFieldWidget import *
00035 
00036 (WebFieldWidgetUi, WebFieldWidgetBase) = loadUiType( Common.uiPath('web.ui') ) 
00037 
00038 
00039 class CookieJar(QNetworkCookieJar):
00040         def __init__(self, parent=None):
00041                 QNetworkCookieJar.__init__(self, parent)
00042 
00043         def allCookies(self):
00044                 return QNetworkCookieJar.allCookies(self)
00045         
00046         def setAllCookies(self, cookieList):
00047                 QNetworkCookieJar.setAllCookies(self, cookieList)
00048 
00049 class WebFieldWidget(AbstractFieldWidget, WebFieldWidgetUi):
00050         def __init__(self, parent, model, attrs={}):
00051                 AbstractFieldWidget.__init__(self, parent, model, attrs)
00052                 WebFieldWidgetUi.__init__(self)
00053                 self.setupUi( self )
00054                 self.cookieJar = CookieJar()
00055                 self.uiWeb.page().networkAccessManager().setCookieJar( self.cookieJar )
00056 
00057         def sizeHint(self):
00058                 size = super(WebFieldWidget, self).sizeHint()
00059                 width = self.attrs.get('width')
00060                 height = self.attrs.get('height')
00061                 if width:
00062                         size.setWidth( int(width) )
00063                 if height:
00064                         size.setHeight( int(height) )
00065                 return size
00066 
00067         def storeValue(self):
00068                 pass
00069 
00070         def clear( self ):
00071                 self.uiWeb.setUrl(QUrl(''))
00072 
00073         def showValue(self):
00074                 value = self.record.value(self.name) or ''
00075                 url = QUrl(value)
00076                 if not value or unicode(url.scheme()):
00077                         self.uiWeb.setUrl( url )
00078                 else:
00079                         self.uiWeb.setHtml( value )
00080 
00081         def setReadOnly(self, value):
00082                 AbstractFieldWidget.setReadOnly(self, value)
00083                 
00084                 self.uiWeb.setEnabled( True )
00085 
00086         def saveState(self):
00087                 cookieList = self.cookieJar.allCookies()
00088                 raw = []
00089                 for cookie in cookieList:
00090                         
00091                         if cookie.isSessionCookie():
00092                                 continue
00093                         
00094                         
00095                         if Common.isQtVersion45():
00096                                 isHttpOnly = str(cookie.isHttpOnly())
00097                         else:
00098                                 isHttpOnly = True
00099                         raw.append( [
00100                                 str(cookie.name().toBase64()), 
00101                                 str(cookie.value().toBase64()), 
00102                                 unicode(cookie.path()).encode('utf-8'),
00103                                 unicode(cookie.domain()).encode('utf-8'),
00104                                 unicode(cookie.expirationDate().toString()).encode('utf-8'),
00105                                 str(isHttpOnly),
00106                                 str(cookie.isSecure()),
00107                         ])
00108                 return QByteArray( str( raw ) )
00109 
00110         def restoreState(self, value):
00111                 if not value:
00112                         return
00113                 raw = eval( str( value ) )
00114                 cookieList = []
00115                 for cookie in raw:
00116                         name = QByteArray.fromBase64( cookie[0] )
00117                         value = QByteArray.fromBase64( cookie[1] )
00118                         networkCookie = QNetworkCookie( name, value )
00119                         networkCookie.setPath( unicode( cookie[2], 'utf-8' ) )
00120                         networkCookie.setDomain( unicode( cookie[3], 'utf-8' ) )
00121                         networkCookie.setExpirationDate( QDateTime.fromString( unicode( cookie[4], 'utf-8' ) ) )
00122                         if Common.isQtVersion45():
00123                                 networkCookie.setHttpOnly( eval(cookie[5]) )
00124                         networkCookie.setSecure( eval(cookie[6]) )
00125                         cookieList.append( networkCookie )
00126                 self.cookieJar.setAllCookies( cookieList )
00127                 self.uiWeb.page().networkAccessManager().setCookieJar( self.cookieJar )
00128 
00129 
00130