# Created by Leo from: C:\Python23\Tom\leo\browser3.leo # -*- coding: utf-8 -*- # << webwig declarations >> import urllib2,cStringIO,sys import wx import wx.html as html import wx.lib.filebrowsebutton as filebrowse import wx.lib.newevent import HTMLparse import wx.lib.colourdb pyEVT_UPDATE_WEBFORM = wx.NewEventType() EVT_UPDATE_WEBFORM = wx.PyEventBinder(pyEVT_UPDATE_WEBFORM, 1) pyEVT_UPDATE_RADIO = wx.NewEventType() #EVT_UPDATE_RADIO = wx.PyEventBinder(pyEVT_UPDATE_RADIO, 1) # -- end -- << webwig declarations >> # << webwig methods >> (1 of 15) class WebObject: # << class WebObject methods >> def __init__(self,val): # Val = [ formname,formurl,objname,data,objtyp,self.id,win,aux] self.URL = val[1].strip() self.FormData = {} attrblist = val[0].split('|') for i in range(0,len(attrblist)-1,2): try: self.FormData[attrblist[i]] = attrblist[i+1] except: self.FormData[attrblist[i]] = '' self.Name = val[2].strip() self.Value = val[3] if val[3] == True: self.WebValue = u'&%s=%s'%(self.Name.replace(u' ',u'+'),'on') elif val[3] == False: self.WebValue = u'&%s=%s'%(self.Name.replace(u' ',u'+'),'off') else: self.WebValue = u'&%s=%s'%(self.Name.replace(u' ',u'+'),val[3].strip().replace(u' ',u'+')) self.Value = val[3].strip() self.Typ = val[4].strip() self.Id = val[5] self.Win = val[6] self.Data = val[7] # -- end -- << class WebObject methods >> # << webwig methods >> (2 of 15) class WebEvent(wx.PyCommandEvent): # << class WebEvent methods >> (1 of 3) def __init__(self, evtType, id): self.id=id wx.PyCommandEvent.__init__(self, evtType, id) self.myVal = [] # << class WebEvent methods >> (2 of 3) def SetVal(self, formname,formurl,objname,data,objtyp,win,aux = ''): self.myVal = WebObject( [formname,formurl,objname,data,objtyp,self.id,win,aux]) # << class WebEvent methods >> (3 of 3) def GetVal(self): return self.myVal # -- end -- << class WebEvent methods >> # << webwig methods >> (3 of 15) class Websubmit(wx.Button): # << class Websubmit methods >> (1 of 2) def __init__(self, parent, id=-1,label = '' ,pos = wx.DefaultPosition,size=wx.DefaultSize, style = wx.BU_LEFT,validator = wx.DefaultValidator,name = '',bgcolor=None,formname = '',formurl = ''): try: wx.Button.__init__(self, parent, id,label,pos ,size, style,validator,name) if bgcolor: self.SetBackgroundColour(bgcolor) self.Bind(wx.EVT_BUTTON, self.OnButton) self.formname = formname self.formurl = formurl self.name = name self.parent = parent self.evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) self.evt.SetVal(self.formname , self.formurl , self.name , self.GetLabel() ,'int_submit',self) self.GetEventHandler().ProcessEvent(self.evt) except: evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) evt.SetVal(sys.exc_info()[0] , sys.exc_info()[1] ,sys.exc_info()[2], '','err_submit',None) self.GetEventHandler().ProcessEvent(evt) self.Destroy() # << class Websubmit methods >> (2 of 2) def OnButton(self, event): #evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) self.evt.SetVal(self.formname , self.formurl , self.name , self.GetLabel(), 'submit',self ) self.GetEventHandler().ProcessEvent(self.evt) event.Skip() # -- end -- << class Websubmit methods >> # << webwig methods >> (4 of 15) class WebHidden(wx.BitmapButton): # << class WebHidden methods >> (1 of 2) def __init__(self, parent, id=-1,src = '' ,pos = wx.DefaultPosition,size=wx.DefaultSize, style = wx.BU_LEFT,name = '',bgcolor=None,formname = '',formurl = ''): self.data = name self.name = '' self.value = '' #try: hidict = {} newname = [] if name: newname = name.split('|') for i in range(0,len(newname)-1,2): try: hidict[newname[i]] = newname[i+1].strip() except: hidict[newname[i]] = '' for i in hidict.keys(): if i.strip() == 'name': self.name = hidict[i] elif i.strip() == 'value': self.value = hidict[i] wx.BitmapButton.__init__(self, parent, -1,wx.EmptyBitmap(0, 0) ,wx.DefaultPosition ,(0, 0)) if bgcolor: self.SetBackgroundColour(bgcolor) self.Bind(wx.EVT_BUTTON, self.OnButton) self.formname = formname self.formurl = formurl self.parent = parent self.evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) self.evt.SetVal(self.formname , self.formurl , self.name , self.value,'int_hidden',self,aux = self.data ) self.GetEventHandler().ProcessEvent(self.evt) #except: # evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) # evt.SetVal(repr(sys.exc_info()[0]) , repr(sys.exc_info()[1]) ,repr(sys.exc_info()[2]), '','err_hidden',None, self.data) # wx.BitmapButton.__init__(self, parent, -1,wx.EmptyBitmap(2, 2) ,wx.DefaultPosition ,(2, 2)) # self.GetEventHandler().ProcessEvent(evt) # << class WebHidden methods >> (2 of 2) def OnButton(self, event): self.evt.SetVal(self.formname , self.formurl , self.name , self.value , 'hidden',self,aux = self.data) self.GetEventHandler().ProcessEvent(self.evt) event.Skip() # -- end -- << class WebHidden methods >> # << webwig methods >> (5 of 15) class Webreset(wx.Button): # << class Webreset methods >> (1 of 2) def __init__(self, parent, id=-1,label = '' ,pos = wx.DefaultPosition,size=wx.DefaultSize, style = wx.BU_LEFT,validator = wx.DefaultValidator,name = '',bgcolor=None,formname = '',formurl = ''): try: wx.Button.__init__(self, parent, id,label,pos ,size, style,validator,name) if bgcolor: self.SetBackgroundColour(bgcolor) self.Bind(wx.EVT_BUTTON, self.OnButton) self.formname = formname self.formurl = formurl self.name = name self.parent = parent self.evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) self.evt.SetVal(self.formname , self.formurl , self.name , self.GetLabel() ,'int_reset',self) self.GetEventHandler().ProcessEvent(self.evt) except: evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) evt.SetVal(sys.exc_info()[0] , sys.exc_info()[1] ,sys.exc_info()[2], '','err_reset',None) self.GetEventHandler().ProcessEvent(evt) self.Destroy() # << class Webreset methods >> (2 of 2) def OnButton(self, event): #evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) self.evt.SetVal(self.formname , self.formurl , self.name , self.GetLabel(), 'reset',self ) self.GetEventHandler().ProcessEvent(self.evt) event.Skip() # -- end -- << class Webreset methods >> # << webwig methods >> (6 of 15) class WebButton(wx.Button): # << class WebButton methods >> (1 of 2) def __init__(self, parent, id=-1,label = '' ,pos = wx.DefaultPosition,size=wx.DefaultSize, style = wx.BU_LEFT,validator = wx.DefaultValidator,name = '',bgcolor=None,formname = '',formurl = ''): try: wx.Button.__init__(self, parent, id,label,pos ,size, style,validator,name) if bgcolor: self.SetBackgroundColour(bgcolor) self.Bind(wx.EVT_BUTTON, self.OnButton) self.formname = formname self.formurl = formurl self.name = name self.parent = parent self.evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) self.evt.SetVal(self.formname , self.formurl , self.name , self.GetLabel(),'int_button',self ) self.GetEventHandler().ProcessEvent(self.evt) except: evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) evt.SetVal(sys.exc_info()[0] , sys.exc_info()[1] ,sys.exc_info()[2], '','err_button',None) self.GetEventHandler().ProcessEvent(evt) self.Destroy() # << class WebButton methods >> (2 of 2) def OnButton(self, event): #self.evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) self.evt.SetVal(self.formname , self.formurl , self.name , self.GetLabel() , 'button',self) self.GetEventHandler().ProcessEvent(self.evt) event.Skip() # -- end -- << class WebButton methods >> # << webwig methods >> (7 of 15) class WebImage(wx.BitmapButton): # << class WebImage methods >> (1 of 2) def __init__(self, parent, id=-1,src = '' ,pos = wx.DefaultPosition,size=wx.DefaultSize, style = wx.BU_LEFT,validator = wx.DefaultValidator,name = '',bgcolor=None,formname = '',formurl = ''): try: if src != '': tmpbmp = urllib2.urlopen(src).read() stream = cStringIO.StringIO(tmpbmp) bmp = wx.BitmapFromImage( wx.ImageFromStream( stream )) else: bmp = wx.EmptyBitmap(20, 20) wx.BitmapButton.__init__(self, parent, -1,bmp,pos ,(bmp.GetWidth(), bmp.GetHeight()), style,validator,name) if bgcolor: self.SetBackgroundColour(bgcolor) self.Bind(wx.EVT_BUTTON, self.OnButton) self.formname = formname self.formurl = formurl self.name = name self.parent = parent self.evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) self.evt.SetVal(self.formname , self.formurl , self.name , self.GetLabel(),'int_image',self ) self.GetEventHandler().ProcessEvent(self.evt) except: evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) evt.SetVal(sys.exc_info()[0] , sys.exc_info()[1] ,sys.exc_info()[2], '','err_image',None) self.GetEventHandler().ProcessEvent(evt) self.Destroy() # << class WebImage methods >> (2 of 2) def OnButton(self, event): #self.evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) self.evt.SetVal(self.formname , self.formurl , self.name , self.GetLabel() , 'image',self) self.GetEventHandler().ProcessEvent(self.evt) event.Skip() # -- end -- << class WebImage methods >> # << webwig methods >> (8 of 15) class WebCheckBox(wx.Panel): # << class WebCheckBox methods >> (1 of 2) def __init__(self, parent, id=-1,label = '' ,pos = (-1,-1),size = wx.DefaultSize, style = wx.CHK_2STATE ,name = '',bgcolor=wx.Color(255,255,255),formname = '',formurl = ''): try: wx.Panel.__init__(self, parent, id,pos =pos, size=size) self.check = wx.CheckBox(self, -1,label,(-1, -1), (150, 20),style = style,name = name) if bgcolor: self.SetBackgroundColour(bgcolor) self.check.SetBackgroundColour(bgcolor) self.Bind(wx.EVT_CHECKBOX, self.OnCheck, self.check) self.formname = formname self.formurl = formurl self.name = name comsiz = wx.BoxSizer(wx.HORIZONTAL) comsiz.Add(self.check,1, wx.SHAPED) self.SetSizer(comsiz) self.SetAutoLayout(1) comsiz.Fit(self) self.evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) self.evt.SetVal(self.formname , self.formurl , self.name , self.check.GetValue(),'int_checkbox',self.check) self.GetEventHandler().ProcessEvent(self.evt) except: evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) evt.SetVal(sys.exc_info()[0] , sys.exc_info()[1] ,sys.exc_info()[2], '','err_checkbox',None) self.GetEventHandler().ProcessEvent(evt) self.Destroy() # << class WebCheckBox methods >> (2 of 2) def OnCheck(self, event): #evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) self.evt.SetVal(self.formname , self.formurl , self.name , self.check.GetValue(),'checkbox',self.check) self.GetEventHandler().ProcessEvent(self.evt) event.Skip() # -- end -- << class WebCheckBox methods >> # << webwig methods >> (9 of 15) class WebRadioBox(wx.Panel): # << class WebRadioBox methods >> (1 of 2) def __init__(self, parent, id=-1,label = '' ,pos = (-1,-1),size = wx.DefaultSize, style = wx.CHK_2STATE ,name = '',bgcolor=wx.Color(255,255,255),formname = '',formurl = ''): try: wx.Panel.__init__(self, parent, id,pos =pos, size=size) self.check = wx.CheckBox(self, -1,label,(-1, -1), (150, 20),style = style,name = name) if bgcolor: self.SetBackgroundColour(bgcolor) self.check.SetBackgroundColour(bgcolor) self.Bind(wx.EVT_CHECKBOX, self.OnCheck, self.check) self.formname = formname self.formurl = formurl self.name = name comsiz = wx.BoxSizer(wx.HORIZONTAL) comsiz.Add(self.check,1, wx.SHAPED) self.SetSizer(comsiz) self.SetAutoLayout(1) comsiz.Fit(self) self.evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) self.evt.SetVal(self.formname , self.formurl , self.name , self.check.GetValue(),'int_radio',self.check) self.GetEventHandler().ProcessEvent(self.evt) except: evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) evt.SetVal(sys.exc_info()[0] , sys.exc_info()[1] ,sys.exc_info()[2], '','err_radio',None) self.GetEventHandler().ProcessEvent(evt) self.Destroy() # << class WebRadioBox methods >> (2 of 2) def OnCheck(self, event): self.evt.SetVal(self.formname , self.formurl , self.name , self.check.GetValue(),'radio',self.check) self.GetEventHandler().ProcessEvent(self.evt) event.Skip() # -- end -- << class WebRadioBox methods >> # << webwig methods >> (10 of 15) class WebComboBox(wx.Panel): # << class WebComboBox methods >> (1 of 2) def __init__(self, parent, id = -1,value = '',size =wx.DefaultSize,choices = [],style = wx.CB_DROPDOWN ,name = '', bgcolor=None,formname = '',formurl = '', optdata = '',choicesL = ''): try: choices = choicesL.split('|') self.optdata = optdata.split('|') self.optdict = {} for i in range(len(choices)): try: self.optdict[choices[i]] = self.optdata[i] except: self.optdict[choices[i]] = '' #maxnum = 1 #for i in choices: # if len(i) > maxnum: # maxnum = len(i) #combosize = (maxnum * 10,-1) #panelsize = (maxnum * 10 + 5,-1) wx.Panel.__init__(self, parent, id, size=size) comsiz = wx.BoxSizer(wx.HORIZONTAL) self.Combo = wx.ComboBox(self,-1 ,value,(-1,-1),wx.DefaultSize,choices,style,name = name) for i in choices: if self.optdict[i] == 'SELECTED': self.Combo.SetValue(i) if bgcolor: self.SetBackgroundColour(bgcolor) self.Combo.SetBackgroundColour(bgcolor) self.Bind(wx.EVT_TEXT, self.OnCombo) self.name = name comsiz.Add(self.Combo,1, wx.EXPAND ) self.SetSizer(comsiz) self.SetAutoLayout(1) comsiz.Fit(self) self.formname = formname self.formurl = formurl self.evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) self.evt.SetVal(self.formname , self.formurl , self.name , self.Combo.GetValue(),'int_select',self.Combo,'') self.GetEventHandler().ProcessEvent(self.evt) except: evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) evt.SetVal(sys.exc_info()[0] , sys.exc_info()[1] ,sys.exc_info()[2], '','err_select',None) self.GetEventHandler().ProcessEvent(evt) self.Destroy() # << class WebComboBox methods >> (2 of 2) def OnCombo(self, event): try: self.evt.SetVal(self.formname , self.formurl , self.name , self.Combo.GetValue(),'select',self.Combo,self.optdict[self.Combo.GetValue()]) except KeyError: self.evt.SetVal(self.formname , self.formurl , self.name , self.Combo.GetValue(),'select',self.Combo,'') self.GetEventHandler().ProcessEvent(self.evt) event.Skip() # -- end -- << class WebComboBox methods >> # << webwig methods >> (11 of 15) class WebFile(wx.Panel): # << class WebFile methods >> (1 of 2) def __init__(self, parent, id = -1,value = '',size =wx.DefaultSize,style = wx.CB_DROPDOWN ,name = '', bgcolor=None,formname = '',formurl = ''): try: #maxnum = 1 #for i in choices: # if len(i) > maxnum: # maxnum = len(i) #combosize = (maxnum * 10,-1) #panelsize = (maxnum * 10 + 5,-1) wx.Panel.__init__(self, parent, id, size=size) comsiz = wx.BoxSizer(wx.HORIZONTAL) self.FileB = filebrowse.FileBrowseButtonWithHistory(self, -1, (-1,-1), size , changeCallback = self.OnFileSelect) self.FileB.SetHistory(['',]) if bgcolor: self.SetBackgroundColour(bgcolor) self.FileB.SetBackgroundColour(bgcolor) self.name = name comsiz.Add(self.FileB,1, wx.EXPAND ) self.SetSizer(comsiz) self.SetAutoLayout(1) comsiz.Fit(self) self.formname = formname self.formurl = formurl self.evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) self.evt.SetVal(self.formname , self.formurl , self.name , self.FileB.GetValue(),'int_file',self.FileB) self.GetEventHandler().ProcessEvent(self.evt) except: evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) evt.SetVal(sys.exc_info()[0] , sys.exc_info()[1] ,sys.exc_info()[2], '','err_file',None) self.GetEventHandler().ProcessEvent(evt) self.Destroy() # << class WebFile methods >> (2 of 2) def OnFileSelect(self, event): if hasattr(self, 'FileB'): value = event.GetString() history = self.FileB.GetHistory() if value not in history: history.append(value) self.FileB.SetHistory(history) self.FileB.GetHistoryControl().SetStringSelection(value) #evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.Combo.GetId()) self.evt.SetVal(self.formname , self.formurl , self.name , self.FileB.GetValue(),'select',self.FileB) self.GetEventHandler().ProcessEvent(self.evt) # -- end -- << class WebFile methods >> # << webwig methods >> (12 of 15) class WebTextCtrl(wx.Panel): # << class WebTextCtrl methods >> (1 of 2) def __init__(self, parent, id=-1,value = '' ,pos = wx.DefaultPosition,size=wx.DefaultSize, style =wx.TE_LEFT ,name = '',bgcolor=None,formname = '',formurl = ''): wx.Panel.__init__(self, parent, id, size=wx.DefaultSize) try: self.text = wx.TextCtrl(self,-1,value,pos =pos,size= size,style = style,name = name) if bgcolor: self.SetBackgroundColour(bgcolor) self.text.SetBackgroundColour(bgcolor) self.Bind(wx.EVT_TEXT, self.OnText,self.text ) self.formname = formname self.formurl = formurl self.name = name comsiz = wx.BoxSizer(wx.HORIZONTAL) comsiz.Add(self.text,1, wx.EXPAND) self.SetSizer(comsiz) self.SetAutoLayout(1) comsiz.Fit(self) self.evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) self.evt.SetVal(self.formname , self.formurl , self.name , self.text.GetValue(),'int_text',self.text) self.GetEventHandler().ProcessEvent(self.evt) except: evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) evt.SetVal(sys.exc_info()[0] , sys.exc_info()[1] ,sys.exc_info()[2], '','err_text',None) self.GetEventHandler().ProcessEvent(evt) self.Destroy() # << class WebTextCtrl methods >> (2 of 2) def OnText(self, event): #self.evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) self.evt.SetVal(self.formname , self.formurl , self.name , self.text.GetValue(),'text',self.text) self.GetEventHandler().ProcessEvent(self.evt) event.Skip() # -- end -- << class WebTextCtrl methods >> # << webwig methods >> (13 of 15) class WebHtmlWindow(html.HtmlWindow): # << class WebHtmlWindow methods >> (1 of 2) def __init__(self, parent, id,name= '',url = '',formname = '', formurl= '',pos = (-1,-1),size = wx.DefaultSize,vsize = 400): html.HtmlWindow.__init__(self, parent, id, style=wx.NO_FULL_REPAINT_ON_RESIZE,size = (size[0],vsize),pos = pos,name = name) self.parent = parent self.address = url self.name = name self.formname , self.formurl = formname , formurl if "gtk2" in wx.PlatformInfo: self.NormalizeFontSizes() self.evt = WebEvent(pyEVT_UPDATE_WEBFORM, self.GetId()) self.evt.SetVal(self.formname , self.address , self.name , self.address,'int_frame',self,aux = self.parent.TomFilter.frametargetbase) self.GetEventHandler().ProcessEvent(self.evt) # << class WebHtmlWindow methods >> (2 of 2) def OnLinkClicked(self, linkinfo): url = linkinfo.GetHref() self.address = url target = u'' if self.parent.frametargetadict.has_key(url): if self.parent.frametargetadict[url] != '_self': self.evt.SetVal(self.formname , self.address , self.name , self.address,'frame',self,aux = self.parent.frametargetadict[url]) self.GetEventHandler().ProcessEvent(self.evt) else: self.parent.LoadURL(url) self.evt.SetVal(self.formname , self.address , self.name , self.address,'frame',self,aux = target) self.GetEventHandler().ProcessEvent(self.evt) else: self.parent.LoadURL(url) self.evt.SetVal(self.formname , self.address , self.name , self.address,'frame',self,aux = target) self.GetEventHandler().ProcessEvent(self.evt) # -- end -- << class WebHtmlWindow methods >> # << webwig methods >> (14 of 15) class WebFrame(wx.Panel): # << class WebFrame methods >> (1 of 3) def __init__(self, parent,src = '',name='' , scrolling='AUTO',formname = '', formurl='',pos = (-1,-1),size = wx.DefaultSize,vsize = 400): wx.Panel.__init__(self, parent, -1, style=wx.NO_FULL_REPAINT_ON_RESIZE,size =size,pos = pos) self.TomFilter = HTMLparse.TomFilter() self.html = WebHtmlWindow(self, -1,url = src,formname =formname, formurl=formurl,vsize = vsize ,name =name) self.box = wx.BoxSizer(wx.VERTICAL) self.box.Add(self.html, 1, wx.GROW) self.SetSizer(self.box) self.frametargetadict = {} self.SetAutoLayout(True) self.box.Fit(self) self.LoadURL(src) # << class WebFrame methods >> (2 of 3) def LoadURL(self, url): webtext = '' try: webtext = urllib2.urlopen(url).read() except: webtext = '
' for i in sys.exc_info(): webtext = webtext + repr(i) + '