class ItemsPickerDialog(wx.Dialog): def __init__(self,parent, style, log): wx.Dialog.__init__(self,parent) self.log = log sizer = wx.BoxSizer(wx.VERTICAL) b = wx.Button(self, -1, "Add Item") b.Bind(wx.EVT_BUTTON, self.OnAdd) sizer.Add(b, 0, wx.ALL, 5) self.ip = ItemsPicker(self,-1, ['ThisIsItem3','ThisIsItem2','ThisIsItem1'], 'Stuff:', 'Selected stuff:',ipStyle = style) self.ip.Bind(EVT_IP_SELECTION_CHANGED, self.OnSelectionChange) self.ip._source.SetMinSize((-1,150)) self.ip.bAdd.SetBitmap(_bp_btn2.GetBitmap(), dir=wx.RIGHT) self.ip.bAdd.SetLabel('Add') self.ip.bRemove.SetBitmap(_bp_btn1.GetBitmap(), dir=wx.LEFT) self.ip.bRemove.SetLabel('Remove') sizer.Add(self.ip, 0, wx.ALL, 10) self.SetSizer(sizer) self.itemCount = 3 self.Fit() def OnAdd(self,e): items = self.ip.GetItems() self.itemCount += 1 newItem = "item%d" % self.itemCount self.ip.SetItems(items + [newItem]) def OnSelectionChange(self, e): self.log.write("EVT_IP_SELECTION_CHANGED %s\n" % \ ",".join(e.GetItems()))
class ItemsPickerDialog(wx.Dialog): def __init__(self,parent, style, log): wx.Dialog.__init__(self,parent) self.log = log sizer = wx.BoxSizer(wx.VERTICAL) b = wx.Button(self, -1, "Add Item") b.Bind(wx.EVT_BUTTON, self.OnAdd) sizer.Add(b, 0, wx.ALL, 5) self.ip = ItemsPicker(self,-1, ['ThisIsItem3','ThisIsItem2','ThisIsItem1'], 'Stuff:', 'Selected stuff:',ipStyle = style) self.ip.Bind(EVT_IP_SELECTION_CHANGED, self.OnSelectionChange) self.ip._source.SetMinSize((-1,150)) # Customize the buttons for this example. if 'wxMac' not in wx.PlatformInfo: # NOTE: wx.Button on OSX does not modify the button size when adding a # bitmap after the fact like this, and these bitmaps are a little too # large and look funny in OSX, so we won't do this customization there. self.ip.bAdd.SetBitmap(_bp_btn2.GetBitmap(), dir=wx.RIGHT) self.ip.bAdd.SetLabel('Add') self.ip.bRemove.SetBitmap(_bp_btn1.GetBitmap(), dir=wx.LEFT) self.ip.bRemove.SetLabel('Remove') sizer.Add(self.ip, 0, wx.ALL, 10) self.SetSizer(sizer) self.itemCount = 3 self.Fit() def OnAdd(self,e): items = self.ip.GetItems() self.itemCount += 1 newItem = "item%d" % self.itemCount self.ip.SetItems(items + [newItem]) def OnSelectionChange(self, e): self.log.write("EVT_IP_SELECTION_CHANGED %s\n" % \ ",".join(e.GetItems()))
class ItemsPickerDialog(wx.Dialog): def __init__(self, parent, style, log): wx.Dialog.__init__(self, parent, title='Pick some items...', style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER) self.log = log sizer = wx.BoxSizer(wx.VERTICAL) b = wx.Button(self, -1, "Add Item") b.Bind(wx.EVT_BUTTON, self.OnAdd) sizer.Add(b, 0, wx.ALL, 5) self.ip = ItemsPicker(self, -1, choices=['ThisIsItem3', 'ThisIsItem6', 'ThisIsItem2', 'ThisIsItem5', 'ThisIsItem1', 'ThisIsItem4'], label='Stuff:', selectedLabel='Selected stuff:', ipStyle=style) self.ip.Bind(EVT_IP_SELECTION_CHANGED, self.OnSelectionChange) self.ip._source.SetMinSize((-1, 150)) bmp2 = wx.Bitmap(gBmpDir + os.sep + "bp_btn2.png", wx.BITMAP_TYPE_PNG) self.ip.bAdd.SetBitmap(bmp2, dir=wx.RIGHT) self.ip.bAdd.SetLabel('Add') bmp1 = wx.Bitmap(gBmpDir + os.sep + "bp_btn1.png", wx.BITMAP_TYPE_PNG) self.ip.bRemove.SetBitmap(bmp1, dir=wx.LEFT) self.ip.bRemove.SetLabel('Remove') sizer.Add(self.ip, 1, wx.EXPAND | wx.ALL, 10) self.SetSizer(sizer) self.itemCount = 3 self.Fit() self.SetMinSize(self.GetSize()) def OnAdd(self, event): items = self.ip.GetItems() self.itemCount += 1 newItem = "item%d" % self.itemCount self.ip.SetItems(items + [newItem]) def OnSelectionChange(self, event): self.log.WriteText("EVT_IP_SELECTION_CHANGED %s\n" % \ ",".join(event.GetItems()))
def settings(self, event): dialog = wx.Dialog(parent=self, title="Settings", style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER) sizer = wx.BoxSizer(wx.VERTICAL) normal_domains = ( 'a-0001.a-msedge.net', 'a-0002.a-msedge.net', 'a-0003.a-msedge.net', 'a-0004.a-msedge.net', 'a-0005.a-msedge.net', 'a-0006.a-msedge.net', 'a-0007.a-msedge.net', 'a-0008.a-msedge.net', 'a-0009.a-msedge.net', 'a-msedge.net', 'a.ads1.msn.com', 'a.ads2.msads.net', 'a.ads2.msn.com', 'a.rad.msn.com', 'ac3.msn.com', 'ad.doubleclick.net', 'adnexus.net', 'adnxs.com', 'ads.msn.com', 'ads1.msads.net', 'ads1.msn.com', 'aidps.atdmt.com', 'aka-cdn-ns.adtech.de', 'az361816.vo.msecnd.net', 'az512334.vo.msecnd.net', 'b.ads1.msn.com', 'b.ads2.msads.net', 'b.rad.msn.com', 'bs.serving-sys.com', 'c.atdmt.com', 'c.msn.com', 'cdn.atdmt.com', 'cds26.ams9.msecn.net', 'choice.microsoft.com', 'choice.microsoft.com.nsatc.net', 'compatexchange.cloudapp.net', 'corp.sts.microsoft.com', 'corpext.msitadfs.glbdns2.microsoft.com', 'cs1.wpc.v0cdn.net', 'db3aqu.atdmt.com', 'df.telemetry.microsoft.com', 'diagnostics.support.microsoft.com', 'ec.atdmt.com', 'feedback.microsoft-hohm.com', 'feedback.search.microsoft.com', 'feedback.windows.com', 'flex.msn.com', 'g.msn.com', 'h1.msn.com', 'i1.services.social.microsoft.com', 'i1.services.social.microsoft.com.nsatc.net', 'lb1.www.ms.akadns.net', 'live.rads.msn.com', 'm.adnxs.com', 'msedge.net', 'msftncsi.com', 'msnbot-65-55-108-23.search.msn.com', 'msntest.serving-sys.com', 'oca.telemetry.microsoft.com', 'oca.telemetry.microsoft.com.nsatc.net', 'pre.footprintpredict.com', 'preview.msn.com', 'rad.live.com', 'rad.msn.com', 'redir.metaservices.microsoft.com', 'reports.wes.df.telemetry.microsoft.com', 'schemas.microsoft.akadns.net', 'secure.adnxs.com', 'secure.flashtalking.com', 'services.wes.df.telemetry.microsoft.com', 'settings-sandbox.data.microsoft.com', 'settings-win.data.microsoft.com', 'sls.update.microsoft.com.akadns.net', 'sqm.df.telemetry.microsoft.com', 'sqm.telemetry.microsoft.com', 'sqm.telemetry.microsoft.com.nsatc.net', 'ssw.live.com', 'static.2mdn.net', 'statsfe1.ws.microsoft.com', 'statsfe2.ws.microsoft.com', 'telecommand.telemetry.microsoft.com', 'telecommand.telemetry.microsoft.com.nsatc.net', 'telemetry.appex.bing.net', 'telemetry.microsoft.com', 'telemetry.urs.microsoft.com', 'v10.vortex-win.data.microsoft.com', 'vortex-bn2.metron.live.com.nsatc.net', 'vortex-cy2.metron.live.com.nsatc.net', 'vortex-sandbox.data.microsoft.com', 'vortex-win.data.metron.live.com.nsatc.net', 'vortex-win.data.microsoft.com', 'vortex.data.glbdns2.microsoft.com', 'vortex.data.microsoft.com', 'watson.live.com', 'web.vortex.data.microsoft.com', 'www.msftncsi.com') extra_domains = ('fe2.update.microsoft.com.akadns.net', 's0.2mdn.net', 'statsfe2.update.microsoft.com.akadns.net', 'survey.watson.microsoft.com', 'view.atdmt.com', 'watson.microsoft.com', 'watson.ppe.telemetry.microsoft.com', 'watson.telemetry.microsoft.com', 'watson.telemetry.microsoft.com.nsatc.net', 'wes.df.telemetry.microsoft.com', 'ui.skype.com', 'pricelist.skype.com', 'apps.skype.com', 'm.hotmail.com', 's.gateway.messenger.live.com') ip_addresses = ('2.22.61.43', '2.22.61.66', '65.39.117.230', '65.55.108.23', '23.218.212.69', '134.170.30.202', '137.116.81.24', '157.56.106.189', '204.79.197.200', '65.52.108.33', '64.4.54.254') normal_domain_picker = ItemsPicker( dialog, choices=[], selectedLabel="Domains to be blocked", ipStyle=IP_SORT_SELECTED | IP_SORT_CHOICES | IP_REMOVE_FROM_CHOICES) if self.picked_normal: normal_domain_picker.SetSelections(self.picked_normal) normal_domain_picker.SetItems([ domain for domain in normal_domains if domain not in self.picked_normal ]) else: normal_domain_picker.SetSelections(normal_domains) extra_domain_picker = ItemsPicker( dialog, choices=[], selectedLabel="Extra domains to be blocked", ipStyle=IP_SORT_SELECTED | IP_SORT_CHOICES | IP_REMOVE_FROM_CHOICES) if self.picked_extra: extra_domain_picker.SetSelections(self.picked_extra) extra_domain_picker.SetItems([ domain for domain in extra_domains if domain not in self.picked_extra ]) else: extra_domain_picker.SetSelections(extra_domains) ip_picker = ItemsPicker(dialog, choices=[], selectedLabel="IP addresses to be blocked", ipStyle=IP_SORT_SELECTED | IP_SORT_CHOICES | IP_REMOVE_FROM_CHOICES) if self.picked_ips: ip_picker.SetSelections(self.picked_ips) ip_picker.SetItems( [ip for ip in ip_addresses if ip not in self.picked_ips]) else: ip_picker.SetSelections(ip_addresses) sizer.Add(normal_domain_picker, 0, wx.EXPAND) sizer.Add(extra_domain_picker, 0, wx.EXPAND) sizer.Add(ip_picker, 0, wx.EXPAND) if event is not None: dialog.SetSizerAndFit(sizer) dialog.Center() dialog.ShowModal() dialog.Destroy() self.picked_normal = normal_domain_picker.GetSelections() self.picked_extra = extra_domain_picker.GetSelections() self.picked_ips = ip_picker.GetSelections()
class BackupRollBackUI(wx.Panel): def __init__(self, parent, style=IP_REMOVE_FROM_CHOICES): wx.Panel.__init__(self, parent, style=style) self.backupList = GL.backup_list self.radioList = [u'当前用户最近备份列表', u'载入当前用户备份列表', u'载入全局备份列表'] self.backupRadio = wx.RadioBox(self, -1, "", (-1, -1), wx.DefaultSize, self.radioList, 3, wx.RA_SPECIFY_COLS | wx.NO_BORDER) #BtnRollBack = wx.Button(self,label=u"锟斤拷原",size=(80,50),id=GL.Publishing) self.BakRollText = ItemsPicker(self, -1, self.backupList, u"备份列表", u'确认还原文件:', ipStyle=style) self.BakRollText.add_button_label = u'添加=》' self.BakRollText.remove_button_label = u'《=移除' hsizer = wx.BoxSizer(wx.HORIZONTAL) vsizer = wx.BoxSizer(wx.VERTICAL) self.BakRollText._source.SetMinSize((-1, 150)) self.BakRollText._dest.SetMinSize((-1, 150)) vsizer.Add(self.backupRadio, 0, wx.ALL, 0) vsizer.Add(self.BakRollText, 1, wx.ALL | wx.EXPAND, 0) hsizer.Add(vsizer, 1, wx.ALL | wx.EXPAND, 10) self.SetSizerAndFit(hsizer) self.itemCount = 3 self.Bind(wx.EVT_RADIOBOX, self.OnLoadBackupList, self.backupRadio) self.BakRollText.Bind(EVT_IP_SELECTION_CHANGED, self.OnSelectionChange) def OnLoadBackupList(self, event): if event.GetInt() == 0: self.BakRollText._source.SetItems([]) self.BakRollText._source.SetItems(GL.backup_list) #self.BakRollText._dest.SetItems(GL.backup_list) #print self.BakRollText._dest.GetItems() elif event.GetInt() == 1: self.BakRollText._source.SetItems([]) import codecs #data = self.GetUserLogList('f:\\backup\\Glogs\\global_backup.log') #print data #self.FileContentList = [] self.FileContentList = self.GetUserLogList( GL.global_backup_logfile, isFilter=True) #with codecs.open('f:\\backup\\Glogs\\global_backup.log','r',"utf8") as FileObj: # [self.FileContentList.append(line) for line in FileObj] #print self.FileContentList self.BakRollText._source.SetItems(self.FileContentList) #self.BakRollText._source.SetBackgroundColour('#FF0000') #print "load log2" elif event.GetInt() == 2: self.BakRollText._source.SetItems([]) self.FileContentList = self.GetUserLogList( GL.global_backup_logfile, isFilter=False) self.BakRollText._source.SetItems(self.FileContentList) else: self.BakRollText._source.SetItems([]) def GetUserLogList(self, filelog, isFilter): if not os.path.exists(filelog): msg = u"读取全局日志文件出错." LoadLog.LogMsg(GL.logger_sysLog.error, msg) wx.MessageBox(msg, u"错误", style=wx.OK | wx.ICON_ERROR) FileContentList = [] return FileContentList FileContentList = [] with open(filelog, 'r') as f: if isFilter is True: bad = 0 import codecs, re goodline = re.compile(ur'#+?.*\[%s\].*#$' % GL.SvnUser) badline = re.compile(ur'#+?.*\[((?!%s).)*#$' % GL.SvnUser) for line in f: line = unicode(line, "utf8") if goodline.search(line) is not None: #print line bad = 1 FileContentList.append(line.strip()) continue if bad and badline.search(line) is None: #print line FileContentList.append(line.strip()) continue else: bad = 0 else: [FileContentList.append(unicode(line, "utf8")) for line in f] return FileContentList def OnAdd(self, e): items = self.BakRollText.GetItems() self.itemCount += 1 newItem = "item%d" % self.itemCount self.BakRollText.SetItems(items + [newItem]) #def OnSelectionChange(self, e): # self.log.write("EVT_IP_SELECTION_CHANGED %s\n" % \ # ",".join(e.GetItems())) def OnSelectionChange(self, e): #self.log.write("EVT_IP_SELECTION_CHANGED %s\n" % ",".join(e.GetItems())) pass
def settings(self, event, silent=False): if not silent: dialog = wx.Dialog(parent=self, title="Settings", style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER) sizer = wx.BoxSizer(wx.VERTICAL) normal_domain_picker = ItemsPicker( dialog, choices=[], selectedLabel="Domains to be blocked", ipStyle=IP_SORT_SELECTED | IP_SORT_CHOICES | IP_REMOVE_FROM_CHOICES) if self.picked_normal: normal_domain_picker.SetSelections(self.picked_normal) normal_domain_picker.SetItems([ domain for domain in normal_domains if domain not in self.picked_normal ]) else: normal_domain_picker.SetSelections(normal_domains) extra_domain_picker = ItemsPicker( dialog, choices=[], selectedLabel="Extra domains to be blocked", ipStyle=IP_SORT_SELECTED | IP_SORT_CHOICES | IP_REMOVE_FROM_CHOICES) if self.picked_extra: extra_domain_picker.SetSelections(self.picked_extra) extra_domain_picker.SetItems([ domain for domain in extra_domains if domain not in self.picked_extra ]) else: extra_domain_picker.SetSelections(extra_domains) ip_picker = ItemsPicker(dialog, choices=[], selectedLabel="IP addresses to be blocked", ipStyle=IP_SORT_SELECTED | IP_SORT_CHOICES | IP_REMOVE_FROM_CHOICES) if self.picked_ips: ip_picker.SetSelections(self.picked_ips) ip_picker.SetItems( [ip for ip in ip_addresses if ip not in self.picked_ips]) else: ip_picker.SetSelections(ip_addresses) whitelist_picker = ItemsPicker( dialog, choices=[], selectedLabel="Domains to be whitelisted", ipStyle=IP_SORT_SELECTED | IP_SORT_CHOICES | IP_REMOVE_FROM_CHOICES) if self.unpicked_ads: whitelist_picker.SetSelections(self.unpicked_ads) whitelist_picker.SetItems([ domain for domain in adblock_whitelist if domain not in self.unpicked_ads ]) else: whitelist_picker.SetSelections(adblock_whitelist) if not silent: sizer.Add(normal_domain_picker, 0, wx.EXPAND) sizer.Add(whitelist_picker, 0, wx.EXPAND) sizer.Add(extra_domain_picker, 0, wx.EXPAND) sizer.Add(ip_picker, 0, wx.EXPAND) if event is not None: dialog.SetSizerAndFit(sizer) dialog.Center() dialog.ShowModal() dialog.Destroy() self.unpicked_ads = whitelist_picker.GetSelections() self.picked_normal = normal_domain_picker.GetSelections() self.picked_extra = extra_domain_picker.GetSelections() self.picked_ips = ip_picker.GetSelections()