All pastes #341996 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-02-06 00:42 UTC
rendered paste body
    def DrawLine(self, gc, x0, y0, x1, y1):
        return gc.DrawLines([(x0, y0), (x1, y1)])

    def DrawPolygon(self, gc, points, offsetx, offsety, rule):
        points = [(x + offsetx, y + offsety) for x, y in points]
        return gc.DrawLines(points, rule)
        
    # event handlers
    def OnMiniCalPaint(self, event):

        size = self.GetClientSize()
        width = size.x
        height = size.y

        gc = wx.GraphicsContext.Create(wx.PaintDC(self))

        font = self.GetDeviceFont()
        boldFont = wx.Font(font.GetPointSize(), font.GetFamily(),
                           font.GetStyle(), wx.BOLD, font.GetUnderlined(), 
                           font.GetFaceName(), font.GetEncoding())
        y = 0

        # draw the sequential month-selector
        gc.SetBrush(wx.TRANSPARENT_BRUSH)
        gc.SetPen(wx.LIGHT_GREY_PEN)
        if self.lineAboveToday:
            self.DrawLine(gc, 0, y, width, y)
        self.DrawLine(gc, 0, y + self.todayHeight,
                          width, y + self.todayHeight)
        buttonWidth = width / 5
        self.DrawLine(gc, buttonWidth, y,
                          buttonWidth, y + self.todayHeight)
        self.DrawLine(gc, buttonWidth * 4, y, 
                          buttonWidth * 4, y + self.todayHeight)

        # Get extent of today button
        todaytext = _(u"Today")
        (todayw, todayh) = gc.GetTextExtent(todaytext)

        # Draw today button
        self.todayRect = wx.Rect(buttonWidth, y,
                                 buttonWidth * 4, self.todayHeight)
        todayx = ((self.widthCol * DAYS_PER_WEEK) - todayw) / 2
        todayy = ((self.todayHeight - todayh) / 2) + y
        gc.SetFont(gc.CreateFont(boldFont, wx.BLACK))
        gc.DrawText(todaytext, todayx, todayy,
                    gc.CreateBrush(wx.TRANSPARENT_BRUSH))

        # calculate the "month-arrows"
        arrowheight = todayh - 5

        leftarrow = [(0, arrowheight / 2),
                     (arrowheight / 2, 0),
                     (arrowheight / 2, arrowheight - 1)]

        rightarrow = [(0, 0),
                      (arrowheight / 2, arrowheight / 2),
                      (0, arrowheight - 1)]

        # draw the "month-arrows"
        arrowy = (self.todayHeight - arrowheight) / 2 + y
        larrowx = (buttonWidth - (arrowheight / 2)) / 2
        rarrowx = (buttonWidth / 2) + buttonWidth * 4

        # Draw left arrow
        self.leftArrowRect = wx.Rect(0, y, buttonWidth - 1, self.todayHeight)
        gc.SetBrush(gc.CreateBrush(wx.BLACK_BRUSH))
        gc.SetPen(gc.CreatePen(wx.BLACK_PEN))
        self.DrawPolygon(gc, leftarrow, larrowx , arrowy, wx.WINDING_RULE)

        # Draw right arrow
        self.rightArrowRect = wx.Rect(buttonWidth * 4 + 1,
                                      y, buttonWidth - 1, self.todayHeight)
        gc.SetBrush(wx.BLACK_BRUSH)
        gc.SetPen(wx.BLACK_PEN)
        self.DrawPolygon(gc, rightarrow, rarrowx , arrowy, wx.WINDING_RULE)

        y += self.todayHeight

        dateToDraw = self.firstVisibleDate
        for i in xrange(MONTHS_TO_DISPLAY):
            y = self.DrawMonth(gc, dateToDraw, y, True, font, boldFont,
                               width, height)
            dateToDraw = MonthDelta(dateToDraw, 1)