def ApplyAttributes(self, attributes):
     Window.ApplyAttributes(self, attributes)
     self.showNavigationBar = settings.user.ui.Get('browserShowNavBar', True)
     self.showStatusBar = settings.user.ui.Get('browserShowStatusBar', True)
     self.SetCaption(localization.GetByLabel('UI/Browser/BrowserSettings/BrowserSettingsCaption'))
     self.SetButtons(uiconst.OKCLOSE, okLabel=localization.GetByLabel('UI/Browser/BrowserSettings/SaveChanges'), okFunc=self.Save, okModalResult=uiconst.ID_NONE)
     main = self.GetMainArea()
     main.clipChildren = 0
     main.padding = 6
     c = Container(name='homeCont', parent=main, align=uiconst.TOTOP, height=32)
     l = Container(name='left', parent=c, align=uiconst.TOLEFT, width=100, state=uiconst.UI_PICKCHILDREN)
     r = Container(name='right', parent=c, align=uiconst.TORIGHT, width=80, state=uiconst.UI_PICKCHILDREN)
     text = Label(text=localization.GetByLabel('UI/Browser/BrowserSettings/Homepage'), align=uiconst.TOALL, state=uiconst.UI_DISABLED, parent=l, left=0, top=4, width=2)
     top = (text.textheight - 16) / 2 + 2 if text.textheight > 16 else 0
     totalTop = top
     btn = Button(parent=r, label=localization.GetByLabel('UI/Browser/BrowserSettings/ResetHomepage'), func=self.ResetHomePage, pos=(0,
      top,
      0,
      0), align=uiconst.TOPRIGHT)
     if btn.width > 80:
         r.width = btn.width
     self.homeEdit = SinglelineEdit(name='homeEdit', setvalue=settings.user.ui.Get('HomePage2', browserutil.DefaultHomepage()), align=uiconst.TOTOP, pos=(0,
      top,
      0,
      0), parent=c)
     Line(parent=main, align=uiconst.TOTOP, color=(0.5, 0.5, 0.5, 0.75))
     self.showHideContainer = Container(name='showHideContainer', parent=main, align=uiconst.TOTOP, height=35, top=0, state=uiconst.UI_PICKCHILDREN)
     self.showStatusBarCbx = Checkbox(text=localization.GetByLabel('UI/Browser/BrowserSettings/ShowStatusBar'), parent=self.showHideContainer, configName='', retval=0, checked=self.showStatusBar)
     self.showNavBarCbx = Checkbox(text=localization.GetByLabel('UI/Browser/BrowserSettings/ShowNavigationBar'), parent=self.showHideContainer, configName='', retval=0, checked=self.showNavigationBar)
     Line(parent=main, align=uiconst.TOTOP, color=(0.5, 0.5, 0.5, 0.75))
     self.cacheContainer = Container(name='cacheContainer', parent=main, align=uiconst.TOTOP, height=26, top=8, state=uiconst.UI_PICKCHILDREN)
     l = Container(name='cacheLeft', parent=self.cacheContainer, align=uiconst.TOLEFT, width=100, state=uiconst.UI_PICKCHILDREN)
     r = Container(name='cacheRight', parent=self.cacheContainer, align=uiconst.TORIGHT, width=80, state=uiconst.UI_PICKCHILDREN)
     if not blue.win32.IsTransgaming():
         text = Label(text=localization.GetByLabel('UI/Browser/BrowserSettings/CacheLocation'), align=uiconst.TOLEFT, state=uiconst.UI_DISABLED, parent=l, padding=(2, 4, 2, 4))
         top = (text.textheight - 16) / 2 + 2 if text.textheight > 16 else 0
         totalTop += top
         btn = Button(parent=r, label=localization.GetByLabel('UI/Browser/BrowserSettings/ResetCacheLocation'), func=self.ResetCacheLocation, pos=(0,
          top,
          0,
          0), align=uiconst.TOPRIGHT)
         if btn.width > r.width:
             r.width = btn.width
         if text.textwidth > l.width:
             l.width = text.textwidth + 4
         self.cacheEdit = SinglelineEdit(name='cacheEdit', setvalue=settings.public.generic.Get('BrowserCache', corebrowserutil.DefaultCachePath()), align=uiconst.TOTOP, pos=(0,
          top,
          0,
          0), parent=self.cacheContainer)
         explainContainer = Container(name='cacheExplainContainer', parent=main, align=uiconst.TOTOP, height=26)
         Label(text=localization.GetByLabel('UI/Browser/BrowserSettings/CacheCaption'), align=uiconst.TOALL, state=uiconst.UI_DISABLED, parent=explainContainer, padLeft=4, fontsize=10)
         totalTop += 26
         clearCacheContainer = Container(name='clearCacheContainer', parent=main, align=uiconst.TOTOP, height=14)
         btn = Button(parent=clearCacheContainer, label=localization.GetByLabel('UI/Browser/BrowserSettings/ClearCache'), func=self.ClearCache)
         btn.hint = (localization.GetByLabel('UI/Browser/BrowserSettings/ClearCacheHint'),)
         totalTop += 16
     else:
         totalTop -= 32
     self.SetMinSize((500, 204 + totalTop))
     sm.StartService('sites')
 def ConstructMainCont(self):
     self.spriteCont.Flush()
     self.mainItem = None
     self.mainTransform = None
     self.mainSprite = None
     self.codeEdit = None
     if self.mode is MODE_NORMAL:
         self.mainTransform = Transform(parent=self.spriteCont,
                                        align=uiconst.CENTER,
                                        pos=(0, 0, 128, 128))
         self.mainSprite = Sprite(
             parent=self.mainTransform,
             align=uiconst.CENTER,
             pos=(0, 0, 128, 128),
             texturePath='res:/UI/Texture/CorpLogoLibs/419.png',
             texturePathSecondary='res:/UI/Texture/colorgradient.dds')
     elif self.mode is MODE_CODE:
         self.codeEdit = SinglelineEdit(
             parent=self.spriteCont,
             align=uiconst.TOTOP,
             label='Code that returns a UI object:',
             heigt=15,
             padding=(10, 30, 150, 0),
             setvalue=settings.user.ui.Get('TestAnimationsWndCode',
                                           'uicore.layer.sidePanels'))
         Button(parent=self.spriteCont,
                align=uiconst.TOPLEFT,
                label='Assign result',
                top=60,
                left=5,
                func=self.OnAssignCodeBtn)
     elif self.mode is MODE_INPUT:
         self.mainItem = self.inputObj
 def ApplyAttributes(self, attributes):
     Window.ApplyAttributes(self, attributes)
     name = attributes.bookmarkName
     url = attributes.url
     self.SetCaption(localization.GetByLabel('UI/Browser/EditBookmarks/Caption'))
     self.SetButtons(uiconst.OKCLOSE, okLabel=localization.GetByLabel('UI/Browser/EditBookmarks/Remove', selectedItems=0), okFunc=self.Remove, okModalResult=uiconst.ID_NONE)
     self.SetMinSize((256, 256))
     main = self.GetMainArea()
     main.clipChildren = 0
     Container(name='errorParent', parent=main, align=uiconst.TOBOTTOM, height=16, state=uiconst.UI_HIDDEN)
     toppar = Container(name='toppar', align=uiconst.TOTOP, height=66, parent=main, idx=0, padding=(const.defaultPadding,
      const.defaultPadding,
      const.defaultPadding,
      const.defaultPadding))
     c = Container(name='namecont', parent=toppar, align=uiconst.TOTOP, height=20, padBottom=5)
     label = Label(text=localization.GetByLabel('UI/Browser/EditBookmarks/Name'), fontsize=9, letterspace=2, state=uiconst.UI_DISABLED, parent=c, align=uiconst.CENTERLEFT, left=4)
     edit = SinglelineEdit(name='nameEdit', parent=c, align=uiconst.CENTERLEFT, width=150)
     edit.OnReturn = self.OnEnter
     self.nameEdit = edit
     c = Container(name='urlcont', parent=toppar, align=uiconst.TOTOP, height=20, padBottom=5)
     label2 = Label(text=localization.GetByLabel('UI/Browser/EditBookmarks/URL'), fontsize=9, letterspace=2, state=uiconst.UI_DISABLED, parent=c, align=uiconst.CENTERLEFT, left=4, uppercase=True)
     edit = SinglelineEdit(name='urlEdit', parent=c, align=uiconst.CENTERLEFT, width=150)
     edit.OnReturn = self.OnEnter
     self.urlEdit = edit
     self.nameEdit.left = self.urlEdit.left = max(35, label.textwidth + 6, label2.textwidth + 6)
     b = Button(parent=toppar, label=localization.GetByLabel('UI/Browser/EditBookmarks/Add'), func=self.OnEnter, align=uiconst.BOTTOMRIGHT)
     editBtn = Button(parent=toppar, label=localization.GetByLabel('UI/Browser/EditBookmarks/Edit'), pos=(b.width + const.defaultPadding,
      0,
      0,
      0), func=self.OnEdit, align=uiconst.BOTTOMRIGHT)
     editBtn.state = uiconst.UI_HIDDEN
     self.editBtn = editBtn
     name = StripTags(name).strip()
     if name:
         self.nameEdit.SetValue(name)
     if url:
         self.urlEdit.SetValue(url)
     self.scroll = Scroll(parent=main, padding=(const.defaultPadding,
      const.defaultPadding,
      const.defaultPadding,
      const.defaultPadding))
     sm.GetService('sites')
     self.RefreshSites()
Пример #4
0
 def ApplyAttributes(self, attributes):
     Window.ApplyAttributes(self, attributes)
     name = attributes.bookmarkName
     url = attributes.url
     self.SetCaption(localization.GetByLabel('UI/Browser/EditBookmarks/Caption'))
     self.SetButtons(uiconst.OKCLOSE, okLabel=localization.GetByLabel('UI/Browser/EditBookmarks/Remove', selectedItems=0), okFunc=self.Remove, okModalResult=uiconst.ID_NONE)
     self.SetMinSize((256, 256))
     main = self.GetMainArea()
     main.clipChildren = 0
     Container(name='errorParent', parent=main, align=uiconst.TOBOTTOM, height=16, state=uiconst.UI_HIDDEN)
     toppar = Container(name='toppar', align=uiconst.TOTOP, height=66, parent=main, idx=0, padding=(const.defaultPadding,
      const.defaultPadding,
      const.defaultPadding,
      const.defaultPadding))
     c = Container(name='namecont', parent=toppar, align=uiconst.TOTOP, height=20, padBottom=5)
     label = Label(text=localization.GetByLabel('UI/Browser/EditBookmarks/Name'), fontsize=9, letterspace=2, state=uiconst.UI_DISABLED, parent=c, align=uiconst.CENTERLEFT, left=4)
     edit = SinglelineEdit(name='nameEdit', parent=c, align=uiconst.CENTERLEFT, width=150)
     edit.OnReturn = self.OnEnter
     self.nameEdit = edit
     c = Container(name='urlcont', parent=toppar, align=uiconst.TOTOP, height=20, padBottom=5)
     label2 = Label(text=localization.GetByLabel('UI/Browser/EditBookmarks/URL'), fontsize=9, letterspace=2, state=uiconst.UI_DISABLED, parent=c, align=uiconst.CENTERLEFT, left=4, uppercase=True)
     edit = SinglelineEdit(name='urlEdit', parent=c, align=uiconst.CENTERLEFT, width=150)
     edit.OnReturn = self.OnEnter
     self.urlEdit = edit
     self.nameEdit.left = self.urlEdit.left = max(35, label.textwidth + 6, label2.textwidth + 6)
     b = Button(parent=toppar, label=localization.GetByLabel('UI/Browser/EditBookmarks/Add'), func=self.OnEnter, align=uiconst.BOTTOMRIGHT)
     editBtn = Button(parent=toppar, label=localization.GetByLabel('UI/Browser/EditBookmarks/Edit'), pos=(b.width + const.defaultPadding,
      0,
      0,
      0), func=self.OnEdit, align=uiconst.BOTTOMRIGHT)
     editBtn.state = uiconst.UI_HIDDEN
     self.editBtn = editBtn
     name = StripTags(name).strip()
     if name:
         self.nameEdit.SetValue(name)
     if url:
         self.urlEdit.SetValue(url)
     self.scroll = Scroll(parent=main, padding=(const.defaultPadding,
      const.defaultPadding,
      const.defaultPadding,
      const.defaultPadding))
     sm.GetService('sites')
     self.RefreshSites()
Пример #5
0
 def PrepareNavigationBar(self):
     mainArea = self.GetMainArea()
     self.navigationBar = Container(name='navBar',
                                    parent=mainArea,
                                    align=uiconst.TOTOP,
                                    height=24,
                                    padBottom=4)
     buttonParent = Container(name='buttonParent',
                              parent=self.navigationBar,
                              align=uiconst.TORIGHT,
                              padRight=const.defaultPadding)
     goBtn = Button(parent=buttonParent,
                    label=localization.GetByLabel('UI/Browser/Go'),
                    func=self.OnGoBtn,
                    align=uiconst.CENTER)
     buttonParent.width = goBtn.width
     iconContainer = Container(name='sslIndicator',
                               parent=self.navigationBar,
                               align=uiconst.TORIGHT,
                               width=20,
                               padRight=const.defaultPadding)
     Sprite(name='sslIcon',
            texturePath='res:/UI/Texture/classes/Browser/sslIcon.png',
            parent=iconContainer,
            pos=(-2, -1, 24, 24),
            hint=localization.GetByLabel('UI/Browser/SecureConnection'),
            ignoreSize=True,
            state=uiconst.UI_NORMAL)
     self.sslIconContainer = iconContainer
     self.urlInput = SinglelineEdit(name='urlInput',
                                    parent=self.navigationBar,
                                    padTop=1,
                                    padRight=const.defaultPadding,
                                    maxLength=1630,
                                    autoselect=True,
                                    align=uiconst.TOTOP)
     self.urlInput.OnReturn = self.BrowseTo
     self.urlInput.OnHistoryClick = self.OnHistoryClicked
class TestAnimationsWnd(Window):
    __guid__ = 'form.UIAnimationTest'
    __notifyevents__ = [
        'OnUITestAnimationSelected', 'OnTestAnimationsPlayAnimation'
    ]
    default_minSize = (500, 300)
    default_caption = 'UI Animations'
    default_windowID = 'UIAnimationTest'

    def ApplyAttributes(self, attributes):
        Window.ApplyAttributes(self, attributes)
        if hasattr(self, 'SetTopparentHeight'):
            self.SetTopparentHeight(0)
        if self.sr.main is None:
            self.sr.main = Container(parent=self.sr.maincontainer)
        self.mainItem = None
        self.mainSprite = None
        self.mainTransform = None
        self.inputObj = attributes.get('animObj', None)
        self.codeEdit = None
        self.duration = 0.5
        self.loops = 1
        self.curveSet = None
        if self.inputObj:
            self.mode = MODE_INPUT
        else:
            self.mode = MODE_NORMAL
        self.topCont = Container(name='topCont',
                                 parent=self.sr.main,
                                 align=uiconst.TOTOP,
                                 height=20)
        self.mainCont = Container(name='mainCont',
                                  parent=self.sr.main,
                                  align=uiconst.TOTOP,
                                  height=200)
        self.topRightCont = Container(name='topRightCont',
                                      parent=self.mainCont,
                                      align=uiconst.TORIGHT,
                                      width=100)
        self.spriteCont = Container(name='spriteCont', parent=self.mainCont)
        from carbonui.primitives.gridcontainer import GridContainer
        self.buttonCont = GridContainer(name='buttonCont',
                                        parent=self.sr.main,
                                        align=uiconst.TOBOTTOM,
                                        height=30,
                                        columns=3,
                                        lines=1)
        self.bottomCont = Container(name='bottomCont', parent=self.sr.main)
        self.ConstructTopCont()
        self.ConstructTopRightCont()
        self.ConstructBottomCont()
        self.ConstructMainCont()
        btns = [('Uncheck all', self.UncheckAll, ()),
                ('Stop all', self.StopAllAnimations, ()),
                ('Play selected', self.PlaySelected, ())]
        for label, func, args in btns:
            Button(parent=Container(parent=self.buttonCont),
                   label=label,
                   func=func,
                   align=uiconst.CENTER)

    def ConstructTopCont(self):
        checkBoxes = [(MODE_NORMAL, 'Normal'), (MODE_CODE, 'Code')]
        if self.inputObj:
            checkBoxes.append((MODE_INPUT, 'Input object'))
        for retval, text in checkBoxes:
            Checkbox(parent=self.topCont,
                     text=text,
                     groupname='radioGroup',
                     align=uiconst.TOLEFT,
                     checked=retval == self.mode,
                     callback=self.OnRadioButtonsChanged,
                     retval=retval,
                     width=100)

    def ConstructTopRightCont(self):
        self.durationEdit = SinglelineEdit(parent=self.topRightCont,
                                           name='durationEdit',
                                           align=uiconst.TOPRIGHT,
                                           label='duration',
                                           floats=(0.0, 10.0),
                                           setvalue=self.duration,
                                           pos=(5, 14, 100, 0),
                                           OnChange=self.OnDurationEditChanged)
        self.loopsEdit = SinglelineEdit(parent=self.topRightCont,
                                        name='loopEdit',
                                        align=uiconst.TOPRIGHT,
                                        label='loops',
                                        ints=(-1, 20),
                                        setvalue=self.loops,
                                        pos=(5, 52, 100, 0),
                                        OnChange=self.OnLoopEditChanged)
        options = [
            (funcName, getattr(uiconst, funcName)) for funcName in dir(uiconst)
            if funcName.startswith('ANIM_') and funcName != 'ANIM_LOOPCYCLE'
        ]
        self.curveTypeCombo = Combo(parent=self.topRightCont,
                                    label='curveType',
                                    options=options,
                                    name='',
                                    select=uiconst.ANIM_SMOOTH,
                                    pos=(5, 92, 100, 0),
                                    width=100,
                                    align=uiconst.TOPRIGHT)

    def ConstructMainCont(self):
        self.spriteCont.Flush()
        self.mainItem = None
        self.mainTransform = None
        self.mainSprite = None
        self.codeEdit = None
        if self.mode is MODE_NORMAL:
            self.mainTransform = Transform(parent=self.spriteCont,
                                           align=uiconst.CENTER,
                                           pos=(0, 0, 128, 128))
            self.mainSprite = Sprite(
                parent=self.mainTransform,
                align=uiconst.CENTER,
                pos=(0, 0, 128, 128),
                texturePath='res:/UI/Texture/CorpLogoLibs/419.png',
                texturePathSecondary='res:/UI/Texture/colorgradient.dds')
        elif self.mode is MODE_CODE:
            self.codeEdit = SinglelineEdit(
                parent=self.spriteCont,
                align=uiconst.TOTOP,
                label='Code that returns a UI object:',
                heigt=15,
                padding=(10, 30, 150, 0),
                setvalue=settings.user.ui.Get('TestAnimationsWndCode',
                                              'uicore.layer.sidePanels'))
            Button(parent=self.spriteCont,
                   align=uiconst.TOPLEFT,
                   label='Assign result',
                   top=60,
                   left=5,
                   func=self.OnAssignCodeBtn)
        elif self.mode is MODE_INPUT:
            self.mainItem = self.inputObj

    def OnDurationEditChanged(self, value):
        self.duration = float(value.replace(',', '.'))

    def OnLoopEditChanged(self, value):
        try:
            self.loops = int(value)
        except:
            self.loops = 0.5

    def ConstructBottomCont(self):
        self.scroll = Scroll(parent=self.bottomCont, multiselect=True)
        self.LoadScroll()

    def LoadScroll(self):
        scrolllist = []
        for funcName in dir(uicore.animations):
            if funcName.startswith('_'):
                continue
            func = getattr(uicore.animations, funcName)
            if not callable(func):
                continue
            node = ScrollEntryNode(decoClass=TestAnimationsCheckbox,
                                   label=funcName,
                                   animFunc=func)
            scrolllist.append(node)

        self.scroll.Load(contentList=scrolllist)

    def OnRadioButtonsChanged(self, button):
        self.mode = button.data['value']
        self.ConstructMainCont()

    def OnAssignCodeBtn(self, *args):
        exec 'self.mainItem=%s' % self.codeEdit.GetValue()
        settings.user.ui.Get('TestAnimationsWndCode', self.codeEdit.GetValue())

    def OnUITestAnimationSelected(self, animFunc):
        animFunc(self.mainItem)

    def PlaySelected(self, *args):
        if self.curveSet:
            self.curveSet.Stop()
        nodes = self.scroll.GetNodes()
        for node in nodes:
            if node.checked:
                self.PlayAnimation(node.animFunc, node.label)

    def StopAllAnimations(self, *args):
        for obj in (self.mainItem, self.mainTransform, self.mainSprite,
                    self.inputObj):
            if obj:
                obj.StopAnimations()

    def PlayAnimation(self, animFunc, funcName):
        if self.mode == MODE_NORMAL:
            if self.mainSprite and funcName.startswith('Sp'):
                obj = self.mainSprite
            else:
                obj = self.mainTransform
        else:
            obj = self.mainItem
        if obj:
            curveType = self.curveTypeCombo.GetValue()
            print 'PLAY', obj
            self.curveSet = animFunc(obj,
                                     duration=self.duration,
                                     loops=self.loops,
                                     curveType=curveType)

    def OnTestAnimationsPlayAnimation(self, animFunc, funcName):
        self.PlayAnimation(animFunc, funcName)

    def UncheckAll(self, *args):
        self.LoadScroll()

    def SetAnimationObject(self, animObj):
        self.mainItem = self.inputObj = animObj
Пример #7
0
 def ApplyAttributes(self, attributes):
     Window.ApplyAttributes(self, attributes)
     initialUrl = attributes.initialUrl
     self.SetCaption(localization.GetByLabel('UI/Browser/TrustedSites'))
     self.SetMinSize((368, 300))
     mainArea = self.GetMainArea()
     mainArea.top = 2
     self.inputContainer = Container(name='inputContainer',
                                     parent=mainArea,
                                     align=uiconst.TOTOP,
                                     height=50)
     self.bodyContainer = Container(name='bodyContainer',
                                    parent=mainArea,
                                    align=uiconst.TOALL,
                                    pos=(0, 0, 0, 0))
     self.trustContainer = Container(name='trustContainer',
                                     parent=self.bodyContainer,
                                     align=uiconst.TOTOP,
                                     height=76)
     self.ignoreContainer = Container(name='ignoreContainer',
                                      parent=self.bodyContainer,
                                      align=uiconst.TOBOTTOM,
                                      height=76)
     urlInputContainer = Container(name='urlInputContainer',
                                   parent=self.inputContainer,
                                   align=uiconst.TOTOP,
                                   height=22,
                                   top=3)
     inputButtonContainer = Container(name='urlInputButtonContainer',
                                      parent=self.inputContainer,
                                      align=uiconst.TOBOTTOM,
                                      height=20,
                                      padRight=4)
     self.urlText = Label(
         text=localization.GetByLabel('UI/Browser/EditBookmarks/URL'),
         parent=urlInputContainer,
         align=uiconst.TOLEFT,
         padLeft=6,
         state=uiconst.UI_DISABLED,
         uppercase=1,
         fontsize=10,
         letterspace=1)
     self.urlInput = SinglelineEdit(name='urlInput',
                                    parent=urlInputContainer,
                                    align=uiconst.TOTOP,
                                    padRight=const.defaultPadding,
                                    padLeft=const.defaultPadding)
     self.trustBtn = Button(
         parent=inputButtonContainer,
         label=localization.GetByLabel('UI/Browser/TrustSite'),
         align=uiconst.TORIGHT,
         padLeft=4,
         padBottom=3,
         func=self.TrustSite)
     self.trustBtn.hint = localization.GetByLabel(
         'UI/Browser/TrustManagementTrustHint')
     self.ignoreBtn = Button(
         parent=inputButtonContainer,
         label=localization.GetByLabel('UI/Browser/IgnoreSite'),
         align=uiconst.TORIGHT,
         padLeft=4,
         padBottom=3,
         func=self.IgnoreSite)
     self.ignoreBtn.hint = localization.GetByLabel(
         'UI/Browser/TrustManagementIgnoreHint')
     trustBtnContainer = Container(name='trustBtnContainer',
                                   parent=self.trustContainer,
                                   align=uiconst.TOBOTTOM,
                                   height=22,
                                   padRight=4)
     trustRemoveBtn = Button(
         parent=trustBtnContainer,
         label=localization.GetByLabel('UI/Commands/Remove'),
         align=uiconst.TORIGHT,
         padLeft=4,
         padBottom=3,
         func=self.RemoveTrustedSite)
     trustRemoveBtn.hint = localization.GetByLabel(
         'UI/Browser/TrustManagementRemoveTrustHint')
     trustTextContainer = Container(name='trustTextContainer',
                                    parent=self.trustContainer,
                                    align=uiconst.TOTOP,
                                    height=14)
     Label(text=localization.GetByLabel('UI/Browser/TrustedSites'),
           parent=trustTextContainer,
           state=uiconst.UI_DISABLED,
           fontsize=10,
           left=10,
           top=3)
     trustScrollContainer = Container(name='trustScrollContainer',
                                      parent=self.trustContainer,
                                      align=uiconst.TOALL)
     self.trustScroll = Scroll(
         parent=trustScrollContainer,
         padding=(const.defaultPadding, const.defaultPadding,
                  const.defaultPadding, const.defaultPadding))
     ignoreBtnContainer = Container(name='ignoreBtnContainer',
                                    parent=self.ignoreContainer,
                                    align=uiconst.TOBOTTOM,
                                    height=22,
                                    padRight=4)
     ignoreRemoveBtn = Button(
         parent=ignoreBtnContainer,
         label=localization.GetByLabel('UI/Commands/Remove'),
         align=uiconst.TORIGHT,
         padLeft=4,
         padBottom=3,
         func=self.RemoveIgnoredSite)
     ignoreRemoveBtn.hint = localization.GetByLabel(
         'UI/Browser/TrustManagementRemoveIgnoredHint')
     ignoreTextContainer = Container(name='ignoreTextContainer',
                                     parent=self.ignoreContainer,
                                     align=uiconst.TOTOP,
                                     height=14)
     Label(text=localization.GetByLabel('UI/Browser/IgnoredSites'),
           parent=ignoreTextContainer,
           state=uiconst.UI_DISABLED,
           fontsize=10,
           left=10,
           top=3)
     ignoreScrollContainer = Container(name='ignoreScrollContainer',
                                       parent=self.ignoreContainer,
                                       align=uiconst.TOALL)
     self.ignoreScroll = Scroll(
         parent=ignoreScrollContainer,
         padding=(const.defaultPadding, const.defaultPadding,
                  const.defaultPadding, const.defaultPadding))
     self.inited = 1
     self.sitesSvc = sm.GetService('sites')
     self.RefreshSites()
     if initialUrl is not None:
         self.urlInput.SetValue(initialUrl)
Пример #8
0
class WebsiteTrustManagementWindowCore(Window):
    __guid__ = 'uicls.WebsiteTrustManagementWindowCore'
    __notifyevents__ = ['OnTrustedSitesChange']
    default_windowID = 'WebsiteTrustManagementWindow'

    def ApplyAttributes(self, attributes):
        Window.ApplyAttributes(self, attributes)
        initialUrl = attributes.initialUrl
        self.SetCaption(localization.GetByLabel('UI/Browser/TrustedSites'))
        self.SetMinSize((368, 300))
        mainArea = self.GetMainArea()
        mainArea.top = 2
        self.inputContainer = Container(name='inputContainer',
                                        parent=mainArea,
                                        align=uiconst.TOTOP,
                                        height=50)
        self.bodyContainer = Container(name='bodyContainer',
                                       parent=mainArea,
                                       align=uiconst.TOALL,
                                       pos=(0, 0, 0, 0))
        self.trustContainer = Container(name='trustContainer',
                                        parent=self.bodyContainer,
                                        align=uiconst.TOTOP,
                                        height=76)
        self.ignoreContainer = Container(name='ignoreContainer',
                                         parent=self.bodyContainer,
                                         align=uiconst.TOBOTTOM,
                                         height=76)
        urlInputContainer = Container(name='urlInputContainer',
                                      parent=self.inputContainer,
                                      align=uiconst.TOTOP,
                                      height=22,
                                      top=3)
        inputButtonContainer = Container(name='urlInputButtonContainer',
                                         parent=self.inputContainer,
                                         align=uiconst.TOBOTTOM,
                                         height=20,
                                         padRight=4)
        self.urlText = Label(
            text=localization.GetByLabel('UI/Browser/EditBookmarks/URL'),
            parent=urlInputContainer,
            align=uiconst.TOLEFT,
            padLeft=6,
            state=uiconst.UI_DISABLED,
            uppercase=1,
            fontsize=10,
            letterspace=1)
        self.urlInput = SinglelineEdit(name='urlInput',
                                       parent=urlInputContainer,
                                       align=uiconst.TOTOP,
                                       padRight=const.defaultPadding,
                                       padLeft=const.defaultPadding)
        self.trustBtn = Button(
            parent=inputButtonContainer,
            label=localization.GetByLabel('UI/Browser/TrustSite'),
            align=uiconst.TORIGHT,
            padLeft=4,
            padBottom=3,
            func=self.TrustSite)
        self.trustBtn.hint = localization.GetByLabel(
            'UI/Browser/TrustManagementTrustHint')
        self.ignoreBtn = Button(
            parent=inputButtonContainer,
            label=localization.GetByLabel('UI/Browser/IgnoreSite'),
            align=uiconst.TORIGHT,
            padLeft=4,
            padBottom=3,
            func=self.IgnoreSite)
        self.ignoreBtn.hint = localization.GetByLabel(
            'UI/Browser/TrustManagementIgnoreHint')
        trustBtnContainer = Container(name='trustBtnContainer',
                                      parent=self.trustContainer,
                                      align=uiconst.TOBOTTOM,
                                      height=22,
                                      padRight=4)
        trustRemoveBtn = Button(
            parent=trustBtnContainer,
            label=localization.GetByLabel('UI/Commands/Remove'),
            align=uiconst.TORIGHT,
            padLeft=4,
            padBottom=3,
            func=self.RemoveTrustedSite)
        trustRemoveBtn.hint = localization.GetByLabel(
            'UI/Browser/TrustManagementRemoveTrustHint')
        trustTextContainer = Container(name='trustTextContainer',
                                       parent=self.trustContainer,
                                       align=uiconst.TOTOP,
                                       height=14)
        Label(text=localization.GetByLabel('UI/Browser/TrustedSites'),
              parent=trustTextContainer,
              state=uiconst.UI_DISABLED,
              fontsize=10,
              left=10,
              top=3)
        trustScrollContainer = Container(name='trustScrollContainer',
                                         parent=self.trustContainer,
                                         align=uiconst.TOALL)
        self.trustScroll = Scroll(
            parent=trustScrollContainer,
            padding=(const.defaultPadding, const.defaultPadding,
                     const.defaultPadding, const.defaultPadding))
        ignoreBtnContainer = Container(name='ignoreBtnContainer',
                                       parent=self.ignoreContainer,
                                       align=uiconst.TOBOTTOM,
                                       height=22,
                                       padRight=4)
        ignoreRemoveBtn = Button(
            parent=ignoreBtnContainer,
            label=localization.GetByLabel('UI/Commands/Remove'),
            align=uiconst.TORIGHT,
            padLeft=4,
            padBottom=3,
            func=self.RemoveIgnoredSite)
        ignoreRemoveBtn.hint = localization.GetByLabel(
            'UI/Browser/TrustManagementRemoveIgnoredHint')
        ignoreTextContainer = Container(name='ignoreTextContainer',
                                        parent=self.ignoreContainer,
                                        align=uiconst.TOTOP,
                                        height=14)
        Label(text=localization.GetByLabel('UI/Browser/IgnoredSites'),
              parent=ignoreTextContainer,
              state=uiconst.UI_DISABLED,
              fontsize=10,
              left=10,
              top=3)
        ignoreScrollContainer = Container(name='ignoreScrollContainer',
                                          parent=self.ignoreContainer,
                                          align=uiconst.TOALL)
        self.ignoreScroll = Scroll(
            parent=ignoreScrollContainer,
            padding=(const.defaultPadding, const.defaultPadding,
                     const.defaultPadding, const.defaultPadding))
        self.inited = 1
        self.sitesSvc = sm.GetService('sites')
        self.RefreshSites()
        if initialUrl is not None:
            self.urlInput.SetValue(initialUrl)

    def _OnResize(self, *args):
        uthread.new(self.__OnResize, *args)

    def __OnResize(self, *args):
        if not getattr(self, 'inited', False):
            return
        bodyHeight = self.bodyContainer.absoluteBottom - self.bodyContainer.absoluteTop
        halfSize = int(bodyHeight / 2)
        if halfSize * 2 != bodyHeight:
            self.trustContainer.height = halfSize + 1
        else:
            self.trustContainer.height = halfSize
        self.ignoreContainer.height = halfSize

    def TrustSite(self, *args):
        value = self.urlInput.GetValue()
        if not value:
            eve.Message('trustedSiteManagementPleaseEnterUrl')
            return
        value = value.strip()
        if value is not None and len(value) > 0:
            self.sitesSvc.AddTrustedSite(value)
        else:
            eve.Message('trustedSiteManagementPleaseEnterUrl')

    def IgnoreSite(self, *args):
        value = self.urlInput.GetValue()
        if not value:
            eve.Message('trustedSiteManagementPleaseEnterUrl')
            return
        value = value.strip()
        if value is not None and len(value) > 0:
            self.sitesSvc.AddIgnoredSite(value)
        else:
            eve.Message('trustedSiteManagementPleaseEnterUrl')

    def RemoveTrustedSite(self, *args):
        selected = self.trustScroll.GetSelected()
        if not len(selected):
            eve.Message('trustedSiteManagementPleaseSelectSite')
            return
        for entry in selected:
            self.sitesSvc.RemoveTrustedSite(entry.retval)

    def RemoveIgnoredSite(self, *args):
        selected = self.ignoreScroll.GetSelected()
        if not len(selected):
            eve.Message('trustedSiteManagementPleaseSelectSite')
            return
        for entry in selected:
            self.sitesSvc.RemoveTrustedSite(entry.retval)

    def OnTrustedSitesChange(self, *etc):
        self.RefreshSites()

    def OnGetTrustMenu(self, entry):
        return [(localization.GetByLabel('UI/Commands/Remove'),
                 sm.GetService('sites').RemoveTrustedSite,
                 (entry.sr.node.retval, ))]

    def RefreshSites(self):
        trustScrollList = []
        ignoreScrollList = []
        for key, value in self.sitesSvc.GetTrustedSites().iteritems():
            if value.auto:
                continue
            trustScrollList.append(
                ScrollEntryNode(decoClass=SE_GenericCore,
                                label=key,
                                retval=key,
                                trustData=value,
                                GetMenu=self.OnGetTrustMenu))

        for key, value in self.sitesSvc.GetIgnoredSites().iteritems():
            if value.auto:
                continue
            ignoreScrollList.append(
                ScrollEntryNode(decoClass=SE_GenericCore,
                                label=key,
                                retval=key,
                                trustData=value,
                                GetMenu=self.OnGetTrustMenu))

        self.trustScroll.Load(contentList=trustScrollList)
        self.ignoreScroll.Load(contentList=ignoreScrollList)
    def ApplyAttributes(self, attributes):
        Window.ApplyAttributes(self, attributes)
        self.SetMinSize((500, 300))
        main = self.GetMainArea()
        main.clipChildren = True
        options = Container(parent=main, align=uiconst.TOLEFT, width=180, padTop=4, padLeft=5)
        fontsParent = Container(parent=options)
        flagsParent = Container(parent=options)
        tabs = uicontrols.TabGroup(parent=options, tabs=[('Fonts',
          fontsParent,
          self,
          'properties'), ('Load Flags',
          flagsParent,
          self,
          'flags')], padBottom=6, idx=0)
        for each in (STYLECLASSES, CLIENTFONTS, WINDOWSFONTS):
            Checkbox(parent=fontsParent, text='Browse ' + each, groupname='browseType', checked=each == STYLECLASSES, callback=self.OnBrowseTypeChange, retval=each)

        import uicls
        clientLabelClasses = []
        for className, cls in uicls.__dict__.iteritems():
            try:
                if issubclass(cls, LabelCore) and cls is not LabelCore and getattr(cls, '__guid__', None) is not None:
                    clientLabelClasses.append((className, (className, cls)))
            except:
                pass

        clientLabelClasses = SortListOfTuples(clientLabelClasses)
        self.styleClassesLabel = Label(parent=fontsParent, text='Style Classes', align=uiconst.TOTOP, padTop=10)
        self.styleClassesCombo = Combo(parent=fontsParent, align=uiconst.TOTOP, options=clientLabelClasses, callback=self.OnStyleClassChange)
        clientFaces = []
        clientFonts = os.listdir(blue.paths.ResolvePathForWriting(u'res:') + '\\UI\\Fonts')
        clientFonts.sort()
        for fontName in clientFonts:
            if fontName.lower().endswith('.ttf') or fontName.lower().endswith('.otf'):
                clientFaces.append((fontName, 'res:/UI/Fonts/' + fontName))

        self.clientFontsLabel = Label(parent=fontsParent, text='Client Fonts', align=uiconst.TOTOP, padTop=10)
        self.clientFontsCombo = typeFaceCombo = Combo(parent=fontsParent, align=uiconst.TOTOP, options=clientFaces, callback=self.OnTypeFaceChange)
        windowsFaces = []
        windowsFonts = os.listdir(blue.win32.SHGetFolderPath(blue.win32.CSIDL_FONTS))
        windowsFonts.sort()
        for fontName in windowsFonts:
            if fontName.lower().endswith('.ttf') or fontName.lower().endswith('.otf'):
                windowsFaces.append((fontName, blue.win32.SHGetFolderPath(blue.win32.CSIDL_FONTS) + '\\' + fontName))

        self.windowsFontsLabel = Label(parent=fontsParent, text='Windows Fonts', align=uiconst.TOTOP, padTop=10)
        self.windowsFontsCombo = typeFaceCombo = Combo(parent=fontsParent, align=uiconst.TOTOP, options=windowsFaces, callback=self.OnTypeFaceChange)
        Label(parent=fontsParent, text='Fontsize', align=uiconst.TOTOP, padTop=10)
        self.fontSizeEdit = SinglelineEdit(ints=(6, 128), parent=fontsParent, align=uiconst.TOTOP, OnChange=self.OnFontSizeChange, setvalue=unicode(Label.default_fontsize))
        Label(parent=fontsParent, text='Letterspace', align=uiconst.TOTOP, padTop=10)
        self.letterSpaceEdit = SinglelineEdit(ints=(-10, 10), parent=fontsParent, align=uiconst.TOTOP, OnChange=self.OnLetterSpaceChange, setvalue=unicode(Label.default_letterspace))
        Label(parent=fontsParent, text='LineSpacing', align=uiconst.TOTOP, padTop=10)
        self.lineSpacingEdit = SinglelineEdit(floats=(-1.0, 1.0, 2), parent=fontsParent, align=uiconst.TOTOP, OnChange=self.OnLineSpacingChange, setvalue=unicode(0.0))
        current = trinity.fontMan.loadFlag
        self.loadFlagCheckBoxes = []
        for flagName, flagValue in loadFlags:
            active = current & flagValue == flagValue
            cb = Checkbox(parent=flagsParent, align=uiconst.TOTOP, text=flagName.replace('FT_LOAD_', ''), callback=self.OnLoadFlagChange, retval=flagValue, checked=active)
            cb.flagName = flagName
            cb.flagValue = flagValue
            self.loadFlagCheckBoxes.append(cb)

        Label(parent=flagsParent, text='Render flags', align=uiconst.TOTOP, padTop=10)
        self.renderFlagCheckBoxes = []
        for flagName, flagValue in renderFlags:
            active = current & flagValue == flagValue
            cb = Checkbox(parent=flagsParent, align=uiconst.TOTOP, text=flagName.replace('FT_RENDER_MODE_', ''), groupname='renderFlag', callback=self.OnRenderFlagChange, retval=flagValue, checked=active)
            cb.flagName = flagName
            cb.flagValue = flagValue
            self.renderFlagCheckBoxes.append(cb)

        sampleSelectionParent = Container(parent=main, align=uiconst.TOTOP, height=38, padTop=20)
        Line(parent=main, align=uiconst.TOTOP, padTop=10, padRight=10, padLeft=10)
        self.sampleCombo = Combo(parent=sampleSelectionParent, align=uiconst.TOPLEFT, width=100, left=10, options=[('Lorem...', samplText), ('Ansi charset', ANSI), ('Cyrillic charset', CYRILLIC)], callback=self.OnSampleComboChange)
        orlabel = Label(parent=sampleSelectionParent, text='-or-', left=self.sampleCombo.left + self.sampleCombo.width + 5)
        self.sampleInput = EditPlainText(parent=sampleSelectionParent, align=uiconst.TOALL, padLeft=140, padRight=10, text='asdf sfdasfasfdasfd safd')
        self.sampleInput.OnChange = self.OnCustomTextChange
        self.samples = []
        for typeFace in clientFonts[:1]:
            sampl = Label(parent=main, align=uiconst.TOTOP, text=samplText, padding=10)
            self.samples.append(sampl)

        self.LoadBrowseType(STYLECLASSES)
class BrowserSettingsWindowCore(Window):
    __guid__ = 'uicls.BrowserSettingsWindowCore'
    default_windowID = 'BrowserSettingsWindow'

    def ApplyAttributes(self, attributes):
        Window.ApplyAttributes(self, attributes)
        self.showNavigationBar = settings.user.ui.Get('browserShowNavBar', True)
        self.showStatusBar = settings.user.ui.Get('browserShowStatusBar', True)
        self.SetCaption(localization.GetByLabel('UI/Browser/BrowserSettings/BrowserSettingsCaption'))
        self.SetButtons(uiconst.OKCLOSE, okLabel=localization.GetByLabel('UI/Browser/BrowserSettings/SaveChanges'), okFunc=self.Save, okModalResult=uiconst.ID_NONE)
        main = self.GetMainArea()
        main.clipChildren = 0
        main.padding = 6
        c = Container(name='homeCont', parent=main, align=uiconst.TOTOP, height=32)
        l = Container(name='left', parent=c, align=uiconst.TOLEFT, width=100, state=uiconst.UI_PICKCHILDREN)
        r = Container(name='right', parent=c, align=uiconst.TORIGHT, width=80, state=uiconst.UI_PICKCHILDREN)
        text = Label(text=localization.GetByLabel('UI/Browser/BrowserSettings/Homepage'), align=uiconst.TOALL, state=uiconst.UI_DISABLED, parent=l, left=0, top=4, width=2)
        top = (text.textheight - 16) / 2 + 2 if text.textheight > 16 else 0
        totalTop = top
        btn = Button(parent=r, label=localization.GetByLabel('UI/Browser/BrowserSettings/ResetHomepage'), func=self.ResetHomePage, pos=(0,
         top,
         0,
         0), align=uiconst.TOPRIGHT)
        if btn.width > 80:
            r.width = btn.width
        self.homeEdit = SinglelineEdit(name='homeEdit', setvalue=settings.user.ui.Get('HomePage2', browserutil.DefaultHomepage()), align=uiconst.TOTOP, pos=(0,
         top,
         0,
         0), parent=c)
        Line(parent=main, align=uiconst.TOTOP, color=(0.5, 0.5, 0.5, 0.75))
        self.showHideContainer = Container(name='showHideContainer', parent=main, align=uiconst.TOTOP, height=35, top=0, state=uiconst.UI_PICKCHILDREN)
        self.showStatusBarCbx = Checkbox(text=localization.GetByLabel('UI/Browser/BrowserSettings/ShowStatusBar'), parent=self.showHideContainer, configName='', retval=0, checked=self.showStatusBar)
        self.showNavBarCbx = Checkbox(text=localization.GetByLabel('UI/Browser/BrowserSettings/ShowNavigationBar'), parent=self.showHideContainer, configName='', retval=0, checked=self.showNavigationBar)
        Line(parent=main, align=uiconst.TOTOP, color=(0.5, 0.5, 0.5, 0.75))
        self.cacheContainer = Container(name='cacheContainer', parent=main, align=uiconst.TOTOP, height=26, top=8, state=uiconst.UI_PICKCHILDREN)
        l = Container(name='cacheLeft', parent=self.cacheContainer, align=uiconst.TOLEFT, width=100, state=uiconst.UI_PICKCHILDREN)
        r = Container(name='cacheRight', parent=self.cacheContainer, align=uiconst.TORIGHT, width=80, state=uiconst.UI_PICKCHILDREN)
        if not blue.win32.IsTransgaming():
            text = Label(text=localization.GetByLabel('UI/Browser/BrowserSettings/CacheLocation'), align=uiconst.TOLEFT, state=uiconst.UI_DISABLED, parent=l, padding=(2, 4, 2, 4))
            top = (text.textheight - 16) / 2 + 2 if text.textheight > 16 else 0
            totalTop += top
            btn = Button(parent=r, label=localization.GetByLabel('UI/Browser/BrowserSettings/ResetCacheLocation'), func=self.ResetCacheLocation, pos=(0,
             top,
             0,
             0), align=uiconst.TOPRIGHT)
            if btn.width > r.width:
                r.width = btn.width
            if text.textwidth > l.width:
                l.width = text.textwidth + 4
            self.cacheEdit = SinglelineEdit(name='cacheEdit', setvalue=settings.public.generic.Get('BrowserCache', corebrowserutil.DefaultCachePath()), align=uiconst.TOTOP, pos=(0,
             top,
             0,
             0), parent=self.cacheContainer)
            explainContainer = Container(name='cacheExplainContainer', parent=main, align=uiconst.TOTOP, height=26)
            Label(text=localization.GetByLabel('UI/Browser/BrowserSettings/CacheCaption'), align=uiconst.TOALL, state=uiconst.UI_DISABLED, parent=explainContainer, padLeft=4, fontsize=10)
            totalTop += 26
            clearCacheContainer = Container(name='clearCacheContainer', parent=main, align=uiconst.TOTOP, height=14)
            btn = Button(parent=clearCacheContainer, label=localization.GetByLabel('UI/Browser/BrowserSettings/ClearCache'), func=self.ClearCache)
            btn.hint = (localization.GetByLabel('UI/Browser/BrowserSettings/ClearCacheHint'),)
            totalTop += 16
        else:
            totalTop -= 32
        self.SetMinSize((500, 204 + totalTop))
        sm.StartService('sites')

    def ResetHomePage(self, *args):
        settings.user.ui.Set('HomePage2', browserutil.DefaultHomepage())
        self.homeEdit.SetValue(settings.user.ui.Get('HomePage2', browserutil.DefaultHomepage()))

    def ResetCacheLocation(self, *args):
        settings.public.generic.Set('BrowserCache', corebrowserutil.DefaultCachePath())
        self.cacheEdit.SetValue(corebrowserutil.DefaultCachePath())

    def Save(self, *args):
        url = self.homeEdit.GetValue().strip()
        if url and url.find('://') < 0:
            url = 'http://' + url
            self.homeEdit.SetValue(url)
        settings.user.ui.Set('HomePage2', url)
        if not blue.win32.IsTransgaming():
            cachePath = self.cacheEdit.GetValue().strip()
            cachePath = blue.paths.ResolvePath(cachePath)
            if cachePath:
                self.cacheEdit.SetValue(cachePath)
            settings.public.generic.Set('BrowserCache', cachePath)
        show = bool(self.showStatusBarCbx.GetValue())
        if bool(self.showStatusBar) != show:
            self.showStatusBar = show
            settings.user.ui.Set('browserShowStatusBar', show)
            sm.ScatterEvent('OnBrowserShowStatusBarChange')
        show = bool(self.showNavBarCbx.GetValue())
        if bool(self.showNavigationBar) != show:
            self.showNavigationBar = show
            settings.user.ui.Set('browserShowNavBar', show)
            sm.ScatterEvent('OnBrowserShowNavigationBarChange')

    def ClearCache(self, *args):
        if uicore.Message('BrowserClearCache', {}, uiconst.YESNO) == uiconst.ID_YES:
            from carbonui.control.browser.browserWindow import BrowserWindowCore
            for wnd in uicore.registry.GetWindows()[:]:
                if issubclass(wnd.__class__, BrowserWindowCore):
                    wnd.Close()

            sm.GetService('browserHostManager').RestartBrowserHost(clearCache=True)
            self.CloseByUser()
Пример #11
0
class BrowserWindowCore(Window):
    __guid__ = 'uicls.BrowserWindowCore'
    __notifyevents__ = [
        'OnTrustedSitesChange', 'OnSessionChanged',
        'OnClientBrowserLockdownChange', 'OnClientFlaggedListsChange',
        'OnEndChangeDevice', 'OnBrowserShowStatusBarChange',
        'OnBrowserShowNavigationBarChange', 'OnBrowserHistoryCleared'
    ]
    default_width = 600
    default_height = 600
    default_iconNum = 'res:/ui/Texture/WindowIcons/browser.png'

    def ApplyAttributes(self, attributes):
        Window.ApplyAttributes(self, attributes)
        initialUrl = attributes.initialUrl
        self.reloadingTrustedSites = False
        self.awaitingTitle = False
        self.nextTabID = 1
        self.currentTab = None
        self.browserHostManager = sm.GetService(
            'browserHostManager').GetBrowserHost()
        self.tabs = []
        self.browserButtons = (('Back', self.HistoryBack, 20, 'back',
                                'UI/Browser/Back'),
                               ('Forward', self.HistoryForward, 60, 'next',
                                'UI/Browser/Forward'), (None, None, None, None,
                                                        None),
                               ('Reload', self.ReloadPage, -40, 'reload',
                                'UI/Browser/Reload'),
                               ('Stop', self.StopLoading, 20, 'stop',
                                'UI/Browser/Stop'), (None, None, None, None,
                                                     None),
                               ('Home', self.GoHome, 0, 'home',
                                'UI/Browser/Home'))
        self.MakeUnstackable()
        self.SetMinSize([260, 180])
        self.SetMaxSize([uicore.desktop.width, uicore.desktop.height])
        self.PrepareMenuBar()
        self.PrepareNavigationBar()
        self.PrepareNavigationButtons()
        self.PrepareTabBar()
        self.PrepareStatusBar()
        mainArea = self.GetMainArea()
        if not settings.user.ui.Get('browserShowNavBar', True):
            self.navigationBar.state = uiconst.UI_HIDDEN
        if not settings.user.ui.Get('browserShowStatusBar', True):
            self.statusBar.state = uiconst.UI_HIDDEN
        for name, GetMenu in [
            (localization.GetByLabel('UI/Browser/View'), lambda:
             [(localization.GetByLabel('UI/Browser/Reload'), self.ReloadPage,
               ()),
              (localization.GetByLabel('UI/Browser/ViewSource'), self.
               DocumentSource, ()),
              (localization.GetByLabel(
                  'UI/Browser/BrowserHistory/BrowserHistoryCaption'), self.
               OpenBrowserHistory, ())]),
            (localization.GetByLabel('UI/Browser/Bookmarks'),
             self.GetBookmarkMenu),
            (localization.GetByLabel('UI/Browser/Options'),
             lambda: [(localization.GetByLabel('UI/Browser/GeneralSettings'),
                       self.EditGeneralSettings, ()), None,
                      (localization.GetByLabel('UI/Browser/TrustedSites'), self
                       .EditSites, ('trusted', ))])
        ]:
            opt = WindowDropDownMenu(name='menuoption', parent=self.menuBar)
            opt.Setup(name, GetMenu)

        self.crashNotifierContainer = Container(name='crashNotifierContainer',
                                                parent=mainArea,
                                                align=uiconst.CENTER,
                                                state=uiconst.UI_HIDDEN,
                                                width=240,
                                                height=80,
                                                idx=0)
        crashText = Label(text=localization.GetByLabel('UI/Browser/Crashed'),
                          parent=self.crashNotifierContainer,
                          width=220,
                          left=10,
                          top=10,
                          fontsize=16,
                          letterspace=1)
        Fill(parent=self.crashNotifierContainer, color=(0.0, 0.0, 0.0, 1.0))
        self.crashNotifierContainer.height = max(80, crashText.textheight + 20)
        bp = browser.BrowserPane(parent=mainArea,
                                 align=uiconst.TOALL,
                                 state=uiconst.UI_NORMAL,
                                 padLeft=const.defaultPadding + 6,
                                 padRight=const.defaultPadding + 6,
                                 padTop=6,
                                 padBottom=6)
        bp.Startup()
        self.browserPane = bp
        Fill(parent=mainArea,
             color=(0.0, 0.0, 0.0, 1.0),
             padLeft=const.defaultPadding,
             padRight=const.defaultPadding)
        self.OnClientFlaggedListsChange()
        browseToUrl = initialUrl
        if browseToUrl is None or browseToUrl == 'home':
            browseToUrl = str(
                settings.user.ui.Get('HomePage2',
                                     browserutil.DefaultHomepage()))
        self.AddTab(browseToUrl)

    def PrepareMenuBar(self):
        mainArea = self.GetMainArea()
        self.menuBar = Container(name='menuBar',
                                 parent=mainArea,
                                 align=uiconst.TOTOP,
                                 height=16,
                                 padBottom=2)
        Line(parent=self.menuBar, align=uiconst.TOBOTTOM)

    def PrepareTabBar(self):
        mainArea = self.GetMainArea()
        self.tabBar = Container(name='tabParent',
                                parent=mainArea,
                                align=uiconst.TOTOP,
                                height=24)
        self.addTabBtn = Button(
            parent=self.tabBar,
            label=localization.uiutil.PrepareLocalizationSafeString('+'),
            align=uiconst.TOPRIGHT,
            fixedwidth=22,
            func=self.AddTabButton,
            alwaysLite=True,
            hint=localization.GetByLabel('UI/Browser/NewTab'),
            left=const.defaultPadding)

    def PrepareStatusBar(self):
        mainArea = self.GetMainArea()
        self.statusBar = Container(name='statusBar',
                                   parent=mainArea,
                                   align=uiconst.TOBOTTOM,
                                   height=22,
                                   clipChildren=1,
                                   idx=0)
        iconContainer = Container(name='trustIndicator',
                                  parent=self.statusBar,
                                  align=uiconst.TORIGHT,
                                  width=24,
                                  left=4)
        icon = Sprite(name='trustIndicatorIcon',
                      parent=iconContainer,
                      texturePath=
                      'res:/UI/Texture/classes/Browser/trustIndicatorIcon.png',
                      pos=(0, -3, 24, 24),
                      hint=localization.GetByLabel('UI/Browser/TrustedSite'),
                      ignoreSize=True,
                      state=uiconst.UI_DISABLED)
        self.trustIndicatorIcon = icon
        self.trustIndicatorIcon.state = uiconst.UI_HIDDEN
        iconContainer = Container(name='lockdownIndicator',
                                  parent=self.statusBar,
                                  align=uiconst.TOLEFT,
                                  width=28)
        Sprite(name='lockdownIndicatorIcon',
               parent=iconContainer,
               texturePath=
               'res:/UI/Texture/classes/Browser/lockdownIndicatorIcon.png',
               pos=(2, -3, 24, 24),
               hint=localization.GetByLabel('UI/Browser/LockdownEnabled'),
               ignoreSize=True,
               state=uiconst.UI_NORMAL)
        self.lockdownIconContainer = iconContainer
        self.statusText = Label(text='',
                                parent=self.statusBar,
                                maxLines=1,
                                state=uiconst.UI_NORMAL,
                                align=uiconst.CENTERLEFT)

    def PrepareNavigationBar(self):
        mainArea = self.GetMainArea()
        self.navigationBar = Container(name='navBar',
                                       parent=mainArea,
                                       align=uiconst.TOTOP,
                                       height=24,
                                       padBottom=4)
        buttonParent = Container(name='buttonParent',
                                 parent=self.navigationBar,
                                 align=uiconst.TORIGHT,
                                 padRight=const.defaultPadding)
        goBtn = Button(parent=buttonParent,
                       label=localization.GetByLabel('UI/Browser/Go'),
                       func=self.OnGoBtn,
                       align=uiconst.CENTER)
        buttonParent.width = goBtn.width
        iconContainer = Container(name='sslIndicator',
                                  parent=self.navigationBar,
                                  align=uiconst.TORIGHT,
                                  width=20,
                                  padRight=const.defaultPadding)
        Sprite(name='sslIcon',
               texturePath='res:/UI/Texture/classes/Browser/sslIcon.png',
               parent=iconContainer,
               pos=(-2, -1, 24, 24),
               hint=localization.GetByLabel('UI/Browser/SecureConnection'),
               ignoreSize=True,
               state=uiconst.UI_NORMAL)
        self.sslIconContainer = iconContainer
        self.urlInput = SinglelineEdit(name='urlInput',
                                       parent=self.navigationBar,
                                       padTop=1,
                                       padRight=const.defaultPadding,
                                       maxLength=1630,
                                       autoselect=True,
                                       align=uiconst.TOTOP)
        self.urlInput.OnReturn = self.BrowseTo
        self.urlInput.OnHistoryClick = self.OnHistoryClicked

    def PrepareNavigationButtons(self):
        buttonTop = Container(name='buttonTop',
                              parent=self.navigationBar,
                              padRight=const.defaultPadding,
                              align=uiconst.TOLEFT,
                              idx=0)
        for btnLabel, btnFunc, btnRectLeft, btnName, localizationLabel in self.browserButtons:
            if btnLabel is None:
                buttonTop.width += 6
                continue
            if localization.IsValidLabel(localizationLabel):
                thehint = localization.GetByLabel(localizationLabel)
            else:
                thehint = ''
            button = uicls.ImageButton(
                parent=buttonTop,
                name=btnLabel,
                width=20,
                height=20,
                align=uiconst.RELATIVE,
                top=2,
                left=buttonTop.width,
                idleIcon='res:/UI/Texture/classes/Browser/%sIdle.png' %
                btnName,
                mouseoverIcon='res:/UI/Texture/classes/Browser/%sMouseOver.png'
                % btnName,
                mousedownIcon='res:/UI/Texture/classes/Browser/%sIdle.png' %
                btnName,
                onclick=btnFunc,
                hint=thehint)
            button.flag = btnLabel
            setattr(self.sr, '%sButton' % btnLabel, button)
            buttonTop.width += 20

    def _OnClose(self, *args):
        sm.GetService('urlhistory').SaveHistory()
        ct = getattr(self, 'currentTab', None)
        if ct is not None:
            ct.Cleanup()
            ct = None
        if self.browserPane:
            self.browserPane.browserSession = None
            del self.browserPane
        if getattr(self, 'tabs', None):
            for tab in self.tabs[:]:
                tab.Cleanup()
                del tab

            self.tabs = []

    def PopulateWhitelistAndBlacklist(self):
        self.browserHostManager.ClearSiteList('Blacklist')
        self.browserHostManager.ClearSiteList('Whitelist')
        l = sm.GetService('sites').GetBrowserBlacklist()
        for url in l:
            self.browserHostManager.AddToSiteList('Blacklist', url)

        l = sm.GetService('sites').GetBrowserWhitelist()
        for url in l:
            self.browserHostManager.AddToSiteList('Whitelist', url)

    def OnClientFlaggedListsChange(self, *args):
        self.PopulateWhitelistAndBlacklist()
        self.browserHostManager.UpdateDynamicData()
        self.OnClientBrowserLockdownChange()
        self.OnTrustedSitesChange()

    def OnClientBrowserLockdownChange(self, *args):
        for tab in self.tabs:
            tab._OnClientBrowserLockdownChange(args)

        if sm.GetService('sites').IsBrowserInLockdown():
            self.lockdownIconContainer.state = uiconst.UI_PICKCHILDREN
            self.statusText.left = 0
        else:
            self.lockdownIconContainer.state = uiconst.UI_HIDDEN
            self.statusText.left = 6

    def OnEndChangeDevice(self, change, *args):
        self.SetMaxSize([uicore.desktop.width, uicore.desktop.height])

    def OnBrowserShowStatusBarChange(self, *args):
        show = settings.user.ui.Get('browserShowStatusBar', True)
        self.DisplayStatusBar(show)

    def OnBrowserShowNavigationBarChange(self, *args):
        show = settings.user.ui.Get('browserShowNavBar', True)
        self.DisplayNavigationBar(show)

    def OnBrowserHistoryCleared(self, *args):
        if self and not self.destroyed:
            self.urlInput.ClearHistory()

    def AddToAllOtherSites(self, header, value):
        self.browserHostManager.SetHeader('other', header, unicode(value))

    def AddToAllTrustedSites(self, header, value):
        value = self.CleanHeaderValue(value)
        self.browserHostManager.SetHeader('CCP', header, unicode(value))
        self.browserHostManager.SetHeader('COMMUNITY', header, unicode(value))
        self.browserHostManager.SetHeader('trusted', header, unicode(value))

    def RemoveFromAllTrustedSites(self, header):
        self.browserHostManager.DelHeader('CCP', header)
        self.browserHostManager.DelHeader('COMMUNITY', header)
        self.browserHostManager.DelHeader('trusted', header)

    def AddToCCPTrustedSites(self, header, value):
        value = self.CleanHeaderValue(value)
        self.browserHostManager.SetHeader('CCP', header, unicode(value))
        self.browserHostManager.SetHeader('COMMUNITY', header, unicode(value))

    def CleanHeaderValue(self, value):
        if value and isinstance(value, basestring):
            value = localization.CleanImportantMarkup(value)
        return value

    def OnSessionChanged(self, isRemote, sess, change):
        pass

    def SetupTrustedSiteHeaders(self):
        self.browserHostManager.ClearSiteList('trusted')
        self.browserHostManager.ClearSiteList('CCP')
        self.browserHostManager.ClearSiteList('COMMUNITY')

        def SiteMatch(siteA, siteB):
            if not siteA or not siteB:
                return siteA == siteB
            if siteA.find('://') == -1:
                siteA = 'http://' + siteA
            if siteB.find('://') == -1:
                siteB = 'http://' + siteB
            parsedSiteA = urlparse.urlsplit(siteA)
            parsedSiteB = urlparse.urlsplit(siteB)
            return parsedSiteA[1] == parsedSiteB[1]

        trusted = sm.GetService('sites').GetTrustedSites()
        userTrustedSites = []
        autoTrustedSites = []
        communitySites = []
        for site, flags in trusted.iteritems():
            try:
                if flags.auto == 0:
                    userTrustedSites.append(str(site))
                elif flags.community == 0:
                    autoTrustedSites.append(str(site))
                else:
                    communitySites.append(str(site))
            except:
                log.LogException('Error loading trusted sites, flags = %s' %
                                 flags)

        for site in userTrustedSites:
            cnt = False
            for siteB in autoTrustedSites:
                if SiteMatch(site, siteB):
                    cnt = True
                    break

            if cnt:
                continue
            cnt = False
            for siteB in communitySites:
                if SiteMatch(site, siteB):
                    cnt = True
                    break

            if cnt:
                continue
            self.browserHostManager.AddToSiteList('trusted', site)

        for site in autoTrustedSites:
            if site.startswith('.'):
                site = '*%s' % site
            if site.endswith('/'):
                site += '*'
            self.browserHostManager.AddToSiteList('CCP', site)

        for site in communitySites:
            if site.startswith('.'):
                site = '*%s' % site
            if site.endswith('/'):
                site += '*'
            self.browserHostManager.AddToSiteList('COMMUNITY', site)

        self.AddTrustedHeaderData()
        self.browserHostManager.UpdateDynamicData()

    def AddTrustedHeaderData(self):
        pass

    def _OnResize(self, *args):
        if self.GetState() != uiconst.RELATIVE:
            return
        if self.browserPane:
            self.browserPane.ResizeBrowser()

    def OnEndMaximize(self, *args):
        self.OnResizeUpdate()

    def GoHome(self, *args):
        if self.currentTab:
            self.currentTab.GoHome(*args)

    def BrowseTo(self, url=None, *args, **kwargs):
        if self.currentTab is None:
            return
        if url is None:
            url = self.urlInput.GetValue().encode('cp1252', 'ignore')
        if type(url) is not str:
            url = url.encode('cp1252', 'ignore')
        if url.find(':/') == -1 and url != 'about:blank':
            url = 'http://' + url
        self.browserPane.OnBrowseTo()
        self.currentTab.BrowseTo(url=url, *args)

    def OnHistoryClicked(self, historyString, *args, **kwargs):
        self.BrowseTo(historyString)

    def OnGoBtn(self, *args):
        url = None
        self.BrowseTo(url)

    def ReloadPage(self, *args):
        self.browserPane.OnBrowseTo()
        self.currentTab.ReloadPage(*args)

    def HistoryBack(self, *args):
        self.browserPane.OnBrowseTo()
        self.currentTab.HistoryBack(*args)

    def HistoryForward(self, *args):
        self.browserPane.OnBrowseTo()
        self.currentTab.HistoryForward(*args)

    def StopLoading(self, *args):
        self.currentTab.StopLoading(*args)

    def GetBookmarkMenu(self, startAt=0):
        m = []
        if startAt < 1:
            m.append((MenuLabel('UI/Browser/AddRemove'), self.EditBookmarks))
        allMarks = sm.GetService('sites').GetBookmarks()
        myMarks = allMarks[startAt:startAt + 20]
        if len(myMarks) >= 20 and len(allMarks) > startAt + 20:
            m.append((MenuLabel('UI/Common/More'),
                      ('isDynamic', self.GetBookmarkMenu, (startAt + 20, ))))
        if len(m) > 0:
            m.append(None)
        for each in myMarks:
            if each is not None:
                if each.url.find(':/') == -1:
                    each.url = 'http://' + each.url
                m.append((each.name, self.BrowseTo, (each.url, )))

        return m

    def ViewSourceOfUrl(self, url):
        BrowserSourceWindow.Open(browseTo=url)

    def DocumentSource(self):
        url = self.currentTab.GetCurrentURL()
        self.ViewSourceOfUrl(url)

    def OpenBrowserHistory(self):
        if not self.destroyed:
            BrowserHistoryWindow.Open()

    def EditGeneralSettings(self):
        if not self.destroyed:
            wnd = BrowserSettingsWindow.Open()
            wnd.ShowModal()

    def EditBookmarks(self):
        if not self.destroyed:
            wnd = EditBookmarksWindow.Open(bookmarkName=self.sr.caption.text,
                                           url=self.urlInput.GetValue())
            wnd.ShowModal()

    def EditSites(self, what):
        inputUrl = ''
        if self.currentTab is not None:
            inputUrl = self.currentTab.GetCurrentURL()
        WebsiteTrustManagementWindow.Open(initialUrl=inputUrl)

    def DisplayNavigationBar(self, display):
        if display:
            self.navigationBar.state = uiconst.UI_NORMAL
        else:
            self.navigationBar.state = uiconst.UI_HIDDEN

    def DisplayStatusBar(self, display):
        if display:
            self.statusBar.state = uiconst.UI_NORMAL
        else:
            self.statusBar.state = uiconst.UI_HIDDEN

    def DisplayTrusted(self, display):
        if display:
            self.trustIndicatorIcon.state = uiconst.UI_NORMAL
        else:
            self.trustIndicatorIcon.state = uiconst.UI_HIDDEN

    def IsTrusted(self, url):
        return sm.GetService('sites').IsTrusted(url)

    def OnTrustedSitesChange(self, *args):
        if self.reloadingTrustedSites:
            return
        try:
            self.reloadingTrustedSites = True
            self.SetupTrustedSiteHeaders()
        finally:
            self.reloadingTrustedSites = False

    def OnReattachBrowserSession(self, browserSession):
        self.SetupTrustedSiteHeaders()
        self.OnClientFlaggedListsChange()
        if browserSession == self.currentTab:
            self.crashNotifierContainer.state = uiconst.UI_HIDDEN
            self.browserPane.browserSession = browserSession
            browserSession.SetBrowserSurface(self.browserPane.GetSurface(),
                                             self.browserPane._OnSurfaceReady)
            self.browserPane.SetCursor(browserSession.cursorType)
            self.browserPane.ResizeBrowser()

    def _OnBrowserViewCrash(self, tabSession):
        if tabSession == self.currentTab:
            self.crashNotifierContainer.state = uiconst.UI_NORMAL

    def _OnBeginNavigation(self, tabSession, url, frameName):
        tabSession.hint = ''
        if tabSession == self.currentTab:
            self.statusText.text = localization.GetByLabel(
                '/Carbon/UI/Browser/BrowsingTo', url=url)
            self.ShowLoad(doBlock=False)
            self.browserPane.state = uiconst.UI_HIDDEN if self.currentTab.hidden else uiconst.UI_NORMAL

    def _OnBeginLoading(self, tabSession, url, frameName, status, mimeType):
        if frameName is None or frameName == '' or frameName == 'main':
            if tabSession == self.currentTab:
                self.urlInput.SetValue(url)
                if uicore.registry.GetFocus() is self.urlInput:
                    self.urlInput.SelectAll()
                self.DisplayTrusted(self.IsTrusted(url))

    def _OnProcessSecurityInfo(self, tabSession, securityInfo):
        if tabSession == self.currentTab:
            self.ProcessSecurityInfo(securityInfo)

    def _OnChangeCursor(self, tabSession, cursorType):
        if tabSession == self.currentTab:
            self.browserPane.SetCursor(cursorType)

    def ProcessSecurityInfo(self, securityInfo):
        try:
            secInfoInt = int(securityInfo)
        except:
            secInfoInt = 0

        if secInfoInt >= 80:
            self.sslIconContainer.state = uiconst.UI_NORMAL
        else:
            self.sslIconContainer.state = uiconst.UI_HIDDEN

    def _OnFinishLoading(self, tabSession):
        if tabSession == self.currentTab:
            self.statusText.text = tabSession.statusText
            self.SetCaption(tabSession.title)
            self.HideLoad()

    def _OnReceiveTitle(self, tabSession, title, frameName):
        if frameName is None or frameName == '' or frameName == 'main':
            if tabSession.logToHistory:
                uthread.new(self.AddToHistory, tabSession.GetCurrentURL(),
                            tabSession.title, blue.os.GetWallclockTime())
                tabSession.logToHistory = False
            for tabObject in self.tabGroup.sr.tabs:
                if tabObject.sr.args == tabSession:
                    title = localization.uiutil.PrepareLocalizationSafeString(
                        title)
                    tabObject.SetLabel(title, hint=title)
                    break

            if tabSession == self.currentTab:
                self.SetCaption(title)

    def SetCaption(self, caption):
        captionString = localization.uiutil.PrepareLocalizationSafeString(
            StripTags(caption)[:50])
        Window.SetCaption(self, captionString)

    def AddToHistory(self, url, title, ts):
        sm.GetService('urlhistory').AddToHistory(url, title, ts)
        w = BrowserHistoryWindow.GetIfOpen()
        if w:
            w.LoadHistory()

    def _OnChangeTooltip(self, tabSession, tooltip):
        self.browserPane.hint = tooltip

    def _OnChangeTargetURL(self, tabSession, url):
        if tabSession == self.currentTab:
            self.statusText.text = url

    def _OnJavascriptPrompt(self, tabSession, messageText):
        uthread.new(self._ShowAlert, messageText)

    def _ShowAlert(self, messageText):
        escapedText = cgi.escape(unicode(messageText))
        sm.GetService('gameui').MessageBox(
            str(escapedText),
            title=localization.GetByLabel('UI/Browser/JavaScriptAlert'),
            buttons=uiconst.OK,
            modal=True)

    def SetBrowserFocus(self):
        uicore.registry.SetFocus(self.browserPane)

    def AddTab(self, tabUrl=None):
        newTab = browser.BrowserSession()
        newTab.Startup('%s_%d' % (self.name, self.nextTabID),
                       initialUrl=tabUrl,
                       browserEventHandler=self)
        self.nextTabID += 1
        urlToBrowseTo = newTab.GetCurrentURL()
        newTab.BrowseTo(urlToBrowseTo)
        self.tabs.append(newTab)
        self.ReloadTabs(selectTab=-1)

    def AddTabButton(self, *args):
        self.AddTab()

    def CloseTab(self, tabID):
        if len(self.tabs) < 2:
            return
        dyingTab = None
        selectTab = -1
        for i in xrange(len(self.tabs)):
            if self.tabs[i].name == tabID:
                if self.tabs[i].name == self.currentTab.name:
                    nextIdx = i if i < len(self.tabs) - 1 else i - 1
                    selectTab = nextIdx
                dyingTab = self.tabs.pop(i)
                dyingTab.Cleanup()
                break

        self.ReloadTabs(selectTab=selectTab)

    def CloseTabButton(self, *args):
        if self.currentTab is not None:
            self.CloseTab(self.currentTab.name)

    def ReloadTabs(self, selectTab=None):
        if not self.tabs or len(self.tabs) < 1:
            return
        tabs = []
        for tab in self.tabs:
            tabData = Bunch()
            tabData.label = tab.title
            tabData.hint = tab.title
            tabData.code = self
            tabData.args = tab
            tabData.panel = None
            tabs.append(tabData)

        if getattr(self, 'tabGroup', None):
            tabGroup = self.tabGroup
        else:
            import uicontrols
            tabGroup = uicontrols.TabGroup(name='tabparent',
                                           parent=self.tabBar,
                                           minTabsize=50,
                                           maxTabsize=200,
                                           tabMenuMargin=8,
                                           align=uiconst.TOBOTTOM)
            self.tabGroup = tabGroup
        tabGroup.LoadTabs(tabs, autoselecttab=0)
        if self.currentTab is None:
            self.currentTab = self.tabs[0]
        else:
            self.currentTab.SetBrowserSurface(None, None)
            if selectTab is not None:
                self.currentTab = self.tabs[selectTab]
        tabGroup.ShowPanelByName(self.currentTab.title)

    def GetTabMenu(self, uiTab, *args):
        tabSession = uiTab.sr.args
        ops = [(localization.GetByLabel('UI/Browser/NewTab'), self.AddTab, [])]
        if len(self.tabs) > 1:
            ops.append((localization.GetByLabel('UI/Browser/CloseTab'),
                        self.CloseTab, (tabSession.name, )))
        return ops

    def LoadTabPanel(self, tabBrowserSession, container, tabgroup):
        if self.currentTab is not None:
            self.currentTab.SetBrowserSurface(None, None)
        self.statusText.text = tabBrowserSession.statusText
        self.urlInput.SetValue(tabBrowserSession.GetCurrentURL())
        self.ProcessSecurityInfo(tabBrowserSession.securityInfo)
        self.SetCaption(tabBrowserSession.title)
        if tabBrowserSession.loading:
            self.ShowLoad(doBlock=False)
        else:
            self.HideLoad()
        self.DisplayTrusted(self.IsTrusted(tabBrowserSession.GetCurrentURL()))
        self.currentTab = tabBrowserSession
        self.browserPane.browserSession = tabBrowserSession
        tabBrowserSession.SetBrowserSurface(self.browserPane.GetSurface(),
                                            self.browserPane._OnSurfaceReady)
        self.browserPane.SetCursor(self.currentTab.cursorType)
        self.browserPane.ResizeBrowser()
        self.browserPane.state = uiconst.UI_HIDDEN if self.currentTab.hidden else uiconst.UI_NORMAL
        if self.currentTab.IsAlive():
            self.crashNotifierContainer.state = uiconst.UI_HIDDEN
        else:
            self.crashNotifierContainer.state = uiconst.UI_NORMAL
Пример #12
0
class LoadFlagTester(Window):
    __guid__ = 'uicls.LoadFlagTester'
    default_topParentHeight = 0
    default_windowID = 'LoadFlagTester'
    default_caption = 'Font Browser'

    def ApplyAttributes(self, attributes):
        Window.ApplyAttributes(self, attributes)
        self.SetMinSize((500, 300))
        main = self.GetMainArea()
        main.clipChildren = True
        options = Container(parent=main,
                            align=uiconst.TOLEFT,
                            width=180,
                            padTop=4,
                            padLeft=5)
        fontsParent = Container(parent=options)
        flagsParent = Container(parent=options)
        tabs = uicontrols.TabGroup(parent=options,
                                   tabs=[('Fonts', fontsParent, self,
                                          'properties'),
                                         ('Load Flags', flagsParent, self,
                                          'flags')],
                                   padBottom=6,
                                   idx=0)
        for each in (STYLECLASSES, CLIENTFONTS, WINDOWSFONTS):
            Checkbox(parent=fontsParent,
                     text='Browse ' + each,
                     groupname='browseType',
                     checked=each == STYLECLASSES,
                     callback=self.OnBrowseTypeChange,
                     retval=each)

        import uicls
        clientLabelClasses = []
        for className, cls in uicls.__dict__.iteritems():
            try:
                if issubclass(cls,
                              LabelCore) and cls is not LabelCore and getattr(
                                  cls, '__guid__', None) is not None:
                    clientLabelClasses.append((className, (className, cls)))
            except:
                pass

        clientLabelClasses = SortListOfTuples(clientLabelClasses)
        self.styleClassesLabel = Label(parent=fontsParent,
                                       text='Style Classes',
                                       align=uiconst.TOTOP,
                                       padTop=10)
        self.styleClassesCombo = Combo(parent=fontsParent,
                                       align=uiconst.TOTOP,
                                       options=clientLabelClasses,
                                       callback=self.OnStyleClassChange)
        clientFaces = []
        clientFonts = os.listdir(
            blue.paths.ResolvePathForWriting(u'res:') + '\\UI\\Fonts')
        clientFonts.sort()
        for fontName in clientFonts:
            if fontName.lower().endswith('.ttf') or fontName.lower().endswith(
                    '.otf'):
                clientFaces.append((fontName, 'res:/UI/Fonts/' + fontName))

        self.clientFontsLabel = Label(parent=fontsParent,
                                      text='Client Fonts',
                                      align=uiconst.TOTOP,
                                      padTop=10)
        self.clientFontsCombo = typeFaceCombo = Combo(
            parent=fontsParent,
            align=uiconst.TOTOP,
            options=clientFaces,
            callback=self.OnTypeFaceChange)
        windowsFaces = []
        windowsFonts = os.listdir(blue.sysinfo.GetSharedFontsDirectory())
        windowsFonts.sort()
        for fontName in windowsFonts:
            if fontName.lower().endswith('.ttf') or fontName.lower().endswith(
                    '.otf'):
                windowsFaces.append(
                    (fontName,
                     os.path.join(blue.sysinfo.GetSharedFontsDirectory(),
                                  fontName)))

        self.windowsFontsLabel = Label(parent=fontsParent,
                                       text='Windows Fonts',
                                       align=uiconst.TOTOP,
                                       padTop=10)
        self.windowsFontsCombo = typeFaceCombo = Combo(
            parent=fontsParent,
            align=uiconst.TOTOP,
            options=windowsFaces,
            callback=self.OnTypeFaceChange)
        Label(parent=fontsParent,
              text='Fontsize',
              align=uiconst.TOTOP,
              padTop=10)
        self.fontSizeEdit = SinglelineEdit(ints=(6, 128),
                                           parent=fontsParent,
                                           align=uiconst.TOTOP,
                                           OnChange=self.OnFontSizeChange,
                                           setvalue=unicode(
                                               Label.default_fontsize))
        Label(parent=fontsParent,
              text='Letterspace',
              align=uiconst.TOTOP,
              padTop=10)
        self.letterSpaceEdit = SinglelineEdit(
            ints=(-10, 10),
            parent=fontsParent,
            align=uiconst.TOTOP,
            OnChange=self.OnLetterSpaceChange,
            setvalue=unicode(Label.default_letterspace))
        Label(parent=fontsParent,
              text='LineSpacing',
              align=uiconst.TOTOP,
              padTop=10)
        self.lineSpacingEdit = SinglelineEdit(
            floats=(-1.0, 1.0, 2),
            parent=fontsParent,
            align=uiconst.TOTOP,
            OnChange=self.OnLineSpacingChange,
            setvalue=unicode(0.0))
        current = trinity.fontMan.loadFlag
        self.loadFlagCheckBoxes = []
        for flagName, flagValue in loadFlags:
            active = current & flagValue == flagValue
            cb = Checkbox(parent=flagsParent,
                          align=uiconst.TOTOP,
                          text=flagName.replace('FT_LOAD_', ''),
                          callback=self.OnLoadFlagChange,
                          retval=flagValue,
                          checked=active)
            cb.flagName = flagName
            cb.flagValue = flagValue
            self.loadFlagCheckBoxes.append(cb)

        Label(parent=flagsParent,
              text='Render flags',
              align=uiconst.TOTOP,
              padTop=10)
        self.renderFlagCheckBoxes = []
        for flagName, flagValue in renderFlags:
            active = current & flagValue == flagValue
            cb = Checkbox(parent=flagsParent,
                          align=uiconst.TOTOP,
                          text=flagName.replace('FT_RENDER_MODE_', ''),
                          groupname='renderFlag',
                          callback=self.OnRenderFlagChange,
                          retval=flagValue,
                          checked=active)
            cb.flagName = flagName
            cb.flagValue = flagValue
            self.renderFlagCheckBoxes.append(cb)

        sampleSelectionParent = Container(parent=main,
                                          align=uiconst.TOTOP,
                                          height=38,
                                          padTop=20)
        Line(parent=main,
             align=uiconst.TOTOP,
             padTop=10,
             padRight=10,
             padLeft=10)
        self.sampleCombo = Combo(parent=sampleSelectionParent,
                                 align=uiconst.TOPLEFT,
                                 width=100,
                                 left=10,
                                 options=[('Lorem...', samplText),
                                          ('Ansi charset', ANSI),
                                          ('Cyrillic charset', CYRILLIC)],
                                 callback=self.OnSampleComboChange)
        orlabel = Label(parent=sampleSelectionParent,
                        text='-or-',
                        left=self.sampleCombo.left + self.sampleCombo.width +
                        5)
        self.sampleInput = EditPlainText(parent=sampleSelectionParent,
                                         align=uiconst.TOALL,
                                         padLeft=140,
                                         padRight=10,
                                         text='asdf sfdasfasfdasfd safd')
        self.sampleInput.OnChange = self.OnCustomTextChange
        self.samples = []
        for typeFace in clientFonts[:1]:
            sampl = Label(parent=main,
                          align=uiconst.TOTOP,
                          text=samplText,
                          padding=10)
            self.samples.append(sampl)

        self.LoadBrowseType(STYLECLASSES)

    def OnBrowseTypeChange(self, checkBox, *args):
        self.LoadBrowseType(checkBox.data['value'])

    def LoadBrowseType(self, browseType):
        if browseType == STYLECLASSES:
            self.windowsFontsCombo.Hide()
            self.windowsFontsLabel.Hide()
            self.clientFontsCombo.Hide()
            self.clientFontsLabel.Hide()
            self.styleClassesLabel.Show()
            self.styleClassesCombo.Show()
            current = self.styleClassesCombo.GetValue()
            self.LoadFontClass(current)
        elif browseType == CLIENTFONTS:
            self.windowsFontsCombo.Hide()
            self.windowsFontsLabel.Hide()
            self.styleClassesLabel.Hide()
            self.styleClassesCombo.Hide()
            self.clientFontsCombo.Show()
            self.clientFontsLabel.Show()
            current = self.clientFontsCombo.GetValue()
            self.LoadFontPath(current)
        elif browseType == WINDOWSFONTS:
            self.styleClassesLabel.Hide()
            self.styleClassesCombo.Hide()
            self.clientFontsCombo.Hide()
            self.clientFontsLabel.Hide()
            self.windowsFontsCombo.Show()
            self.windowsFontsLabel.Show()
            current = self.windowsFontsCombo.GetValue()
            self.LoadFontPath(current)

    def OnLoadFlagChange(self, checkBox):
        self.UpdateFlags()

    def OnRenderFlagChange(self, checkBox):
        self.UpdateFlags()

    def UpdateFlags(self):
        loadFlag = 0
        for cb in self.loadFlagCheckBoxes:
            if cb.GetValue():
                loadFlag = loadFlag | cb.flagValue

        for cb in self.renderFlagCheckBoxes:
            if cb.GetValue():
                loadFlag = loadFlag | cb.flagValue
                break

        trinity.fontMan.loadFlag = loadFlag
        for sampl in self.samples:
            sampl.text = sampl.text

    def OnFontSizeChange(self, text):
        try:
            newFontSize = int(text)
            for sampl in self.samples:
                sampl.fontsize = newFontSize

        except:
            pass

    def OnLetterSpaceChange(self, text):
        try:
            newLetterSpace = int(text)
            for sampl in self.samples:
                sampl.letterspace = newLetterSpace

        except:
            pass

    def OnLineSpacingChange(self, text):
        try:
            newLineSpacing = float(text)
            for sampl in self.samples:
                sampl.lineSpacing = newLineSpacing

        except:
            pass

    def OnStyleClassChange(self, combo, header, value):
        self.LoadFontClass(value)

    def LoadFontClass(self, fontClass):
        for sampl in self.samples:
            sampl.fontPath = fontClass.default_fontPath
            sampl.fontFamily = fontClass.default_fontFamily
            sampl.fontStyle = fontClass.default_fontStyle

        self.fontSizeEdit.SetValue(fontClass.default_fontsize)
        self.letterSpaceEdit.SetValue(fontClass.default_letterspace)
        self.lineSpacingEdit.SetValue(fontClass.default_lineSpacing)

    def OnTypeFaceChange(self, combo, header, value):
        self.LoadFontPath(value)

    def LoadFontPath(self, fontPath):
        for sampl in self.samples:
            sampl.fontPath = fontPath

    def OnSampleComboChange(self, combo, header, value):
        for sampl in self.samples:
            sampl.text = value

    def OnCustomTextChange(self, *args):
        current = self.sampleInput.GetValue()
        for sampl in self.samples:
            sampl.text = current