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