⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wizard.py

📁 Wxpython Implemented on Windows CE, Source code
💻 PY
📖 第 1 页 / 共 5 页
字号:
#----------------------------------------------------------------------------
# Name:         Wizard.py
# Purpose:      
#
# Author:       Peter Yared
#
# Created:      10/28/04
# CVS-ID:       $Id: Wizard.py,v 1.3 2006/04/20 06:25:57 RD Exp $
# Copyright:    (c) 2004-2005 ActiveGrid, Inc.
# License:      wxWindows License
#----------------------------------------------------------------------------
import wx
import wx.xrc as xrc
import wx.wizard

WHITE_COLOR = wx.Color(0xFF, 0xFF, 0xFF)
LABEL_FONT = wx.Font(8, wx.SWISS, wx.NORMAL, wx.NORMAL, faceName="Arial")  
SELECTED_LABEL_FONT = wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, faceName="Arial")  
TINY_FONT = wx.Font(6, wx.SWISS, wx.NORMAL, wx.BOLD, faceName="Arial")
ELLIPSIS_FONT = wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, faceName="Arial")
ACTIVEGRID_ORANGE_COLOR = wx.Color(0xF9, 0x9E, 0x1B)
#----------------------------------------------------------------------------
# Classes
#----------------------------------------------------------------------------

class BaseWizard(wx.wizard.Wizard):


    def __init__(self, parent, title, pos=(-1,-1)):
        self.bitmap = getWizardBGShorterBitmap()
        self.title = title
        wx.wizard.Wizard.__init__(self, parent, wx.NewId(), title, self.bitmap, pos=pos)
        self.myDC = wx.MemoryDC()
        self.crumbs = []
        self.firstPage = None

        
    def GetDocument(self):
        if self.GetParent() and hasattr(self.GetParent(), 'GetDocument'):
            return self.GetParent().GetDocument()
        else:
            return None

    def SetPrevNext(self, prev, next):
        prev.SetNext(next)
        next.SetPrev(prev)
        
    def RunWizard(self, firstPage):
        self.firstPage = firstPage
        return wx.wizard.Wizard.RunWizard(self, firstPage)
        
    def BuildCrumbsList(self, onPage):
        def PastThisPage(currentPage, pageToCheck):
            foundPageToCheck = False
            tempPage = self.firstPage
            while hasattr(tempPage, '_next'):
                if tempPage == currentPage:
                    return foundPageToCheck
                if tempPage == pageToCheck:
                    foundPageToCheck = True
                tempPage = tempPage._next
        self.crumbs = []
        currPage = self.firstPage
        while hasattr(currPage, '_next'):
            self.crumbs.append(currPage.title.GetLabel())
            if currPage.pauseCrumbTrail and not PastThisPage(onPage, currPage):
                self.crumbs.append('?')
                return
            currPage = currPage._next
            
        
    def GetBreadcrumbsBitmap(self, page):
        bitmap = getWizardBGShorterBitmap()
        highlightText = page.title.GetLabel()
        self.BuildCrumbsList(page)
        self.myDC.BeginDrawing()
        self.myDC.SelectObject(bitmap)
        #self.myDC.SetFont(TINY_FONT)
        #self.myDC.DrawText(self.title, 10, 35)
        #print "Title was w=%i, h=%i" % self.myDC.GetTextExtent(self.title)
        x = 20
        y = 50
        for crumb in self.crumbs:
            if crumb == highlightText:
                self.myDC.SetTextForeground(ACTIVEGRID_ORANGE_COLOR)
                self.myDC.SetFont(SELECTED_LABEL_FONT)
            else:
                self.myDC.SetTextForeground(WHITE_COLOR)
                self.myDC.SetFont(LABEL_FONT)
            lines = self.BreakIntoLines(crumb)
            offset = 0
            w = h = 0
            for line in lines:                  
                offset += h + 3
                if line == '? ':
                    decisionBM = getDecisionBitmap()
                    x1 = (bitmap.GetWidth() - decisionBM.GetWidth()) / 2
                    self.myDC.DrawBitmap(decisionBM, x1, y + offset, True)
                else:
                    self.myDC.DrawText(line, x, y + offset)
                w, h = self.myDC.GetTextExtent(line)
            y += 30 + offset
        self.myDC.EndDrawing()
        self.myDC.SelectObject(wx.NullBitmap)
        return bitmap
    
    def CenterTextUnderParent(self, dc, parentWidth, parentX, text):
        xbase = parentX + parentWidth / 2
        w,h = dc.GetTextExtent(text)
        return xbase - w / 2 
           
    def BreakIntoLines(self, text, maxLineLength=22):
        words = text.split(' ')
        retval = []
        count = 0
        currentLineLength = 0
        currentLine = ''
        for word in words:
            if len(word) + currentLineLength >= maxLineLength:
                retval.append(currentLine)
                currentLine = word + ' '
                currentLineLength = len(word) + 1
            else:
                currentLine += word + ' '
                currentLineLength += len(word) + 1
        if currentLine:
            retval.append(currentLine)
        return retval
        
class TitledWizardPage(wx.wizard.PyWizardPage):


    def __init__(self, parent, title=None, pauseCrumbTrail=False):
        self.pauseCrumbTrail = pauseCrumbTrail
        self._prev = None
        self._prevFunc = None
        self._next = None
        self._nextFunc = None
        wx.wizard.PyWizardPage.__init__(self, parent)
        self.SetSizer(wx.BoxSizer(wx.VERTICAL))
        self.MakePageTitle(title)

    def GetBitmap(self):
        return self.GetParent().GetBreadcrumbsBitmap(self)
        
    def SetTitle(self, title):
        if not title: title = ""
        self.title.SetLabel(title)
        
    def MakePageTitle(self, title):
        sizer = wx.BoxSizer(wx.VERTICAL)
        if not title: title = ""
        self.title = wx.StaticText(self, -1, title)
        self.title.SetFont(wx.Font(18, wx.SWISS, wx.NORMAL, wx.BOLD))
        # the code below used to add a 5 pixel border in all directions
        # but I found that the left margin was not aligned properly because
        # only a few of the wizards made sure that pages themselves added
        # the 5 pixel left border. If we still want to inset 5 more pixels,
        # we should add a wx.HORIZONTAL sizer here to take care of it.
        sizer.Add(self.title, 0, wx.ALIGN_LEFT | wx.TOP | wx.BOTTOM, 5)
        sizer.Add(wx.StaticLine(self, -1), 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5)
        self.GetSizer().Add(sizer)


    def GetPrev(self):
        if self._prevFunc:
            self._prev = self._prevFunc()
        return self._prev
        

    def SetPrev(self, prev):
        self._prev = prev
        self._prevFunc = None


    def GetPrevFunc(self):
        return self._prevFunc


    def SetPrevFunc(self, prevFunc):
        self._prevFunc = prevFunc
        self._prev = None
        

    def GetNext(self):
        if self._nextFunc:
            self._next = self._nextFunc()
        return self._next


    def SetNext(self, next):
        self._next = next
        self._nextFunc = None
        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -