Esempio n. 1
0
 def buttonPress(self, obj, event):
     ## self.winActivate() #?????????
     b = event.button
     (x, y, mask) = event.window.get_pointer() # or self.get_pointer()
     self.pointer = (x, y)
     if b==2:
         return False
     xPos = -1
     yPos = -1
     for i in xrange(7):
         if abs(x-self.cx[i]) <= self.dx/2.0:
             xPos = i
             break
     for i in xrange(6):
         if abs(y-self.cy[i]) <= self.dy/2.0:
             yPos = i
             break
     status = getCurrentMonthStatus()
     if yPos==-1 or xPos==-1:
         self.emit('popup-menu-main', event.time, event.x, event.y)
         #self.menuMainWidth = self.menuMain.allocation.width ## menu.allocation[3]
     elif yPos>=0 and xPos>=0:
         cell = status[yPos][xPos]
         self.changeDate(*cell.dates[core.primaryMode])
         if event.type==gdk._2BUTTON_PRESS:
             self.emit('2button-press')
         if b == 3 and cell.month == ui.cell.month:## right click on a normal cell
             #self.emit('popup-menu-cell', event.time, *self.getCellPos())
             self.emit('popup-menu-cell', event.time, event.x, event.y)
     return True
Esempio n. 2
0
 def save(self, widget=None):
     self.get_window().set_cursor(gdk.Cursor(gdk.WATCH))
     while gtk.events_pending():
         gtk.main_iteration_do(False)
     path = self.fcw.get_filename()
     if path in (None, ''):
         return
     print('Exporting to html file "%s"'%path)
     i = self.combo.get_active()
     months = []
     module = calTypes.primaryModule()
     if i==0:
         s = getCurrentMonthStatus()
         months = [s]
         title = '%s %s'%(core.getMonthName(calTypes.primary, s.month, s.year), _(s.year))
     elif i==1:
         for i in range(1, 13):
             months.append(getMonthStatus(ui.cell.year, i))
         title = '%s %s'%(_('Calendar'), _(ui.cell.year))
     elif i==2:
         y0, m0 = self.ymBox0.get_value()
         y1, m1 = self.ymBox1.get_value()
         for ym in range(y0*12+m0-1, y1*12+m1):
             y, m = divmod(ym, 12)
             m += 1
             months.append(getMonthStatus(y, m))
         title = _('Calendar')
     exportToHtml(path, months, title)
     self.get_window().set_cursor(gdk.Cursor(gdk.LEFT_PTR))
     self.hide()
Esempio n. 3
0
 def mousePressEvent(self, event):
     #print 'monthcal: mousePressEvent'
     x= event.x()
     y = event.y()
     b = event.button()
     #self.pointer = (x, y) ## needed? FIXME
     if b!=qc.Qt.MidButton:
         sx = -1
         sy = -1
         for i in xrange(7):
             if abs(x-self.cx[i]) <= self.dx/2.0:
                 sx = i
                 break
         for i in xrange(6):
             if abs(y-self.cy[i]) <= self.dy/2.0:
                 sy = i
                 break
         status = getCurrentMonthStatus()
         if sy==-1 or sx==-1:
             self.emit(qc.SIGNAL('popup-menu-main'), x, y)
             #self.menuMainWidth = self.menuMain.width()
         elif sy>=0 and sx>=0:
             cell = status[sy][sx]
             self.changeDate(*cell.dates[core.primaryMode])
             if event.type()==qc.QEvent.MouseButtonDblClick:
                 self.emit(qc.SIGNAL('2button-press')) ## Needed??
             if b==qc.Qt.RightButton and cell.month==ui.cell.month:## right click
                 #self.emit(qc.SIGNAL('popup-menu-cell'), *self.getCellPos())
                 self.emit(qc.SIGNAL('popup-menu-cell'), x, y)
     event.accept()## FIXME
Esempio n. 4
0
 def save(self, path):
     print 'save', path
     self.setCursor(qc.Qt.WaitCursor)
     #while gtk.events_pending():## FIXME
     #    gtk.main_iteration_do(False)
     if path in (None, ''):
         return
     print 'Exporting to html file "%s"'%path
     i = self.combo.currentIndex()
     months = []
     module = core.modules[core.primaryMode]
     if i==0:
         s = getCurrentMonthStatus()
         months = [s]
         title = '%s %s'%(core.getMonthName(core.primaryMode, s.month, s.year), _(s.year))
     elif i==1:
         for i in xrange(1, 13):
             months.append(getMonthStatus(ui.cell.year, i))
         title = '%s %s'%(_('Calendar'), _(ui.cell.year))
     elif i==2:
         y0, m0 = self.ymBox0.getYM()
         y1, m1 = self.ymBox1.getYM()
         for ym in xrange(y0*12+m0-1, y1*12+m1):
             y, m = divmod(ym, 12)
             m += 1
             months.append(getMonthStatus(y, m))
         title = _('Calendar')
     exportToHtml(path, months, title)
     self.setCursor(qc.Qt.ArrowCursor)
     self.hide()
Esempio n. 5
0
	def buttonPress(self, obj, gevent):
		## self.winActivate() #?????????
		b = gevent.button
		x, y, mask = gevent.window.get_pointer() # or self.get_pointer()
		self.pointer = (x, y)
		if b==2:
			return False
		xPos = -1
		yPos = -1
		for i in range(7):
			if abs(x-self.cx[i]) <= self.dx/2.0:
				xPos = i
				break
		for i in range(6):
			if abs(y-self.cy[i]) <= self.dy/2.0:
				yPos = i
				break
		status = getCurrentMonthStatus()
		if yPos == -1 or xPos == -1:
			self.emit('popup-main-menu', gevent.time, gevent.x, gevent.y)
		elif yPos >= 0 and xPos >= 0:
			cell = status[yPos][xPos]
			self.changeDate(*cell.dates[calTypes.primary])
			if gevent.type==TWO_BUTTON_PRESS:
				self.emit('2button-press')
			if b == 3 and cell.month == ui.cell.month:## right click on a normal cell
				#self.emit('popup-cell-menu', gevent.time, *self.getCellPos())
				self.emit('popup-cell-menu', gevent.time, gevent.x, gevent.y)
		return True
Esempio n. 6
0
	def _save(self, path):
		comboItem = self.combo.get_active()
		months = []
		module = calTypes.primaryModule()
		if comboItem==0:
			s = getCurrentMonthStatus()
			months = [s]
			title = '%s %s'%(locale_man.getMonthName(calTypes.primary, s.month, s.year), _(s.year))
		elif comboItem==1:
			for i in range(1, 13):
				months.append(getMonthStatus(ui.cell.year, i))
			title = '%s %s'%(_('Calendar'), _(ui.cell.year))
		elif comboItem==2:
			y0, m0 = self.ymBox0.get_value()
			y1, m1 = self.ymBox1.get_value()
			for ym in range(y0*12+m0-1, y1*12+m1):
				y, m = divmod(ym, 12)
				m += 1
				months.append(getMonthStatus(y, m))
			title = _('Calendar')
		exportToHtml(path, months, title)
		self.hide()
Esempio n. 7
0
    def paintEvent(self, event):
        self.updateTextWidth()
        self.calcCoord()
        w = self.width()
        h = self.height()
        #####
        painter = qt.QPainter()
        painter.begin(self)
        #####
        #painter.setPen(qt.QColor(*ui.bgColor))
        painter.setBrush(qt.QColor(*ui.bgColor))
        painter.drawRect(0, 0, w, h)
        #####
        status = getCurrentMonthStatus()
        #################################### Drawing Border
        if ui.mcalTopMargin>0:
            ##### Drawing border top background
            ##menuBgColor == borderColor ##???????????????
            painter.setBrush(qt.QColor(*ui.borderColor))
            painter.drawRect(0, 0, w, ui.mcalTopMargin)
            ######## Drawing weekDays names
            painter.setPen(qt.QColor(*ui.borderTextColor))
            dx = 0
            wdayAb = (self.wdaysWidth > w)
            for i in xrange(7):
                painter.drawText(self.cx[i]-self.dx/2.0, 0, self.dx, ui.mcalTopMargin,
                                 qc.Qt.AlignCenter, core.getWeekDayAuto(i, wdayAb))
            ######## Drawing "Menu" label
            painter.setPen(qt.QColor(*ui.menuTextColor))
            painter.drawText(
                w - ui.mcalLeftMargin if rtl else 0,
                0,
                ui.mcalLeftMargin,
                ui.mcalTopMargin,
                qc.Qt.AlignCenter,
                _('Menu')
            )
        if ui.mcalLeftMargin>0:
            ##### Drawing border left background
            painter.setBrush(qt.QColor(*ui.borderColor))
            if rtl:
                painter.drawRect(w-ui.mcalLeftMargin, ui.mcalTopMargin, ui.mcalLeftMargin, h-ui.mcalTopMargin)
            else:
                painter.drawRect(0, ui.mcalTopMargin, ui.mcalLeftMargin, h-ui.mcalTopMargin)
            ##### Drawing week numbers
            painter.setPen(qt.QColor(*ui.borderTextColor))
            for i in xrange(6):
                painter.drawText(
                    w - ui.mcalLeftMargin if rtl else 0,
                    self.cy[i]-self.dy/2.0,
                    ui.mcalLeftMargin,
                    self.dy,
                    qc.Qt.AlignCenter,
                    _(status.weekNum[i])
                )
        cursor = True ## FIXME
        quad = 90 ## 90*16
        selectedCellPos = ui.cell.monthPos
        for yPos in xrange(6):
            for xPos in xrange(7):
                c = status[yPos][xPos]
                x0 = self.cx[xPos]
                y0 = self.cy[yPos]
                cellInactive = (c.month != ui.cell.month)
                cellHasCursor = (cursor and (xPos, yPos) == selectedCellPos)
                if cellHasCursor:
                    ##### Drawing Cursor
                    d=ui.cursorD
                    if ui.cursorFixed:
                        cx0 = x0-ui.cursorW/2.0 - d
                        cy0 = y0-ui.cursorH/2.0 - d
                        cw = ui.cursorW + 2*d
                        ch = ui.cursorH + 2*d
                    else:
                        eps = 0.3 ## ????????????
                        cx0 = x0 - self.dx/2.0 + eps
                        cy0 = y0 - self.dy/2.0 + eps
                        cw = self.dx - 1 - 2*eps
                        ch = self.dy - 1 - 2*eps
                    painter.setBrush(qt.QColor(*ui.cursorBgColor))
                    if ui.cursorR==0:
                        painter.drawRect(cx0, cy0, cw, ch)
                    else:
                        ## if round_oval: ## ??????
                        ######### Circular Rounded
                        ro = min(ui.cursorR, cw/2, ch/2)
                        #a = min(cw, ch); ri = ro*(a-2*d)/a
                        ri = max(ro-d, 0)
                        ######### Outline:
                        path = qt.QPainterPath()
                        path.moveTo(cx0+ro, cy0)
                        path.lineTo(cx0+cw-ro, cy0)
                        path.arcTo(cx0+cw-2*ro, cy0, 2*ro, 2*ro, quad, -quad)## up right corner
                        path.lineTo(cx0+cw, cy0+ch-ro)
                        path.arcTo(cx0+cw-2*ro, cy0+ch-2*ro, 2*ro, 2*ro, 0, -quad)## down right corner
                        path.lineTo(cx0+ro, cy0+ch)
                        path.arcTo(cx0, cy0+ch-2*ro, 2*ro, 2*ro, -quad, -quad)## down left corner
                        path.lineTo(cx0, cy0+ro)
                        path.arcTo(cx0, cy0, 2*ro, 2*ro, -2*quad, -quad)## up left corner
                        ####
                        painter.drawPath(path)
                        ##if round_oval:##???????
                ##### end of Drawing Cursor
                '''
                if not cellInactive:
                    ## right buttom corner ?????????????????????
                    targetRect = QRectF()
                    pix = qt.QPixmap(join(pixDir, ui.customdayModes[c.customday['type']][1]))
                    painter.drawPixmap(self.cx[xPos]+self.dx/2.0-pix.width(),# right side
                                       self.cy[yPos]+self.dy/2.0-pix.height(),# buttom side
                                       self.customdayPixmaps[c.customday['type']])
                '''
                params = ui.mcalTypeParams[0]
                if params['enable']:
                    mode = core.primaryMode
                    num = _(c.dates[mode][2], mode)
                    qfont = qfontEncode(params['font'])
                    met = qt.QFontMetrics(qfont)
                    fontw = met.maxWidth() * len(num)
                    fonth = met.height()
                    painter.setFont(qfont)
                    if not cellInactive:
                        painter.setPen(qt.QColor(*ui.inactiveColor))
                    elif c.holiday:
                        painter.setPen(qt.QColor(*ui.holidayColor))
                    else:
                        painter.setPen(qt.QColor(*params['color']))
                    painter.drawText(
                        x0 - fontw/2.0 + params['x'],
                        y0 - fonth/2.0 + params['y'],
                        fontw,
                        fonth,
                        qc.Qt.AlignCenter,
                        num,
                    )
                if not cellInactive:
                    for mode, params in ui.getMcalMinorTypeParams()[1:]:
                        if params['enable']:
                            num = _(c.dates[mode][2], mode)
                            qfont = qfontEncode(params['font'])
                            met = qt.QFontMetrics(qfont)
                            fontw = met.maxWidth() * len(num)
                            fonth = met.height()
                            painter.setFont(qfont)
                            painter.setPen(qt.QColor(*params['color']))
                            painter.drawText(
                                x0 - fontw/2.0 + params['x'],
                                y0 - fonth/2.0 + params['y'],
                                fontw,
                                fonth,
                                qc.Qt.AlignCenter,
                                num,
                            )
                    if cellHasCursor:
                        ##### Drawing Cursor Outline
                        d = ui.cursorD
                        if ui.cursorFixed:
                            cx0 = x0 - ui.cursorW/2.0 - d
                            cy0 = y0 - ui.cursorH/2.0 - d
                            cw = ui.cursorW + 2*d
                            ch = ui.cursorH + 2* d
                        else:
                            eps = 0.3 ## ????????????
                            cx0 = x0-self.dx/2.0 + eps
                            cy0 = y0-self.dy/2.0 + eps
                            cw = self.dx - 1 - 2*eps
                            ch = self.dy - 1 - 2*eps
                        painter.setBrush(qt.QColor(*ui.cursorOutColor))
                        path = qt.QPainterPath()
                        if ui.cursorR==0:
                            path.moveTo(cx0, cy0)
                            path.lineTo(cx0+cw, cy0)
                            path.lineTo(cx0+cw, cy0+ch)
                            path.lineTo(cx0, cy0+ch)
                            path.lineTo(cx0, cy0)
                            #####
                            path.moveTo(cx0+d, cy0+d)
                            path.lineTo(cx0+d, cy0+ch-d)
                            path.lineTo(cx0+cw-d, cy0+ch-d)
                            path.lineTo(cx0+cw-d, cy0+d)
                            path.lineTo(cx0+d, cy0+d)
                        else:
                            ## if round_oval: #??????????
                            ######### Circular Rounded
                            ro = min(ui.cursorR, cw/2, ch/2)
                            #a = min(cw, ch); ri = ro*(a-2*d)/a
                            d = min(d, ro)
                            ri = ro-d
                            ######### Outline:
                            path.moveTo(cx0+ro, cy0)
                            path.lineTo(cx0+cw-ro, cy0)
                            path.arcTo(cx0+cw-2*ro, cy0, 2*ro, 2*ro, quad, -quad) ## up right corner
                            path.lineTo(cx0+cw, cy0+ch-ro)
                            path.arcTo(cx0+cw-2*ro, cy0+ch-2*ro, 2*ro, 2*ro, 0, -quad) ## down right corner
                            path.lineTo(cx0+ro, cy0+ch)
                            path.arcTo(cx0, cy0+ch-2*ro, 2*ro, 2*ro, -quad, -quad) ## down left corner
                            path.lineTo(cx0, cy0+ro)
                            path.arcTo(cx0, cy0, 2*ro, 2*ro, -2*quad, -quad) ## up left corner
                            #### Inline:
                            path.moveTo(cx0+ro, cy0+d) ## or line to?
                            path.arcTo(cx0+d, cy0+d, 2*ri, 2*ri, quad, quad) ## up left corner
                            path.lineTo(cx0+d, cy0+ch-ro)
                            path.arcTo(cx0+d, cy0+ch-ro-ri, 2*ri, 2*ri, 2*quad, quad) ## down left
                            path.lineTo(cx0+cw-ro, cy0+ch-d)
                            path.arcTo(cx0+cw-ro-ri, cy0+ch-ro-ri, 2*ri, 2*ri, 3*quad, quad) ## down right
                            path.lineTo(cx0+cw-d, cy0+ro)
                            path.arcTo(cx0+cw-ro-ri, cy0+d, 2*ri, 2*ri, 0, quad) ## up right
                            path.lineTo(cx0+ro, cy0+d)
                            ####
                            painter.drawPath(path)
                            ## if round_oval: ## ??????
                            ##### end of Drawing Cursor Outline


        ##### drawGrid
        if ui.mcalGrid:
            painter.setBrush(qt.QColor(*ui.mcalGridColor))
            for i in xrange(7):
                painter.drawRect(self.cx[i]+rtlSgn()*self.dx/2.0, 0, 1, h)
            for i in xrange(6):
                painter.drawRect(0, self.cy[i]-self.dy/2.0, w, 1)
Esempio n. 8
0
 def drawAll(self, widget=None, event=None, cr=None, cursor=True):
     #?????? Must enhance (only draw few cells, not all cells)
     #print time(), 'drawAll'#, tuple(event.area), tuple(self.allocation)
     if event:
         (xu, yu, wu, hu) = tuple(event.area)
         #print 'expose-event area:', xu, yu, wu, hu
     self.calcCoord()
     x, y, w, h = self.allocation
     if not cr:
         cr = self.window.cairo_create()
         #cr.set_line_width(0)#??????????????
         #cr.scale(0.5, 0.5)
     """
     wx = ui.winX
     wy = ui.winY
     if ui.bgUseDesk:## FIXME
         ### ????????????????? Need for mainWin !!!!!
         coord = self.translate_coordinates(self, wx, wy)
         if len(coord)==2:
             (x0, y0) = coord
             try:
                 bg = desktop.get_wallpaper(x0, y0, w, h)
             except:
                 print 'Could not get wallpaper!'
                 myRaise(__file__)
                 os.popen('gnome-settings-daemon')
                 ui.bgUseDesk = False ##??????????????????
                 #self.prefDialog.checkDeskBg.set_active(False)##??????????????????
             else:
                 cr.set_source_pixbuf(bg, 0, 0)
                 cr.paint()
         else:
             print coord
     """
     cr.rectangle(0, 0, w, h)
     fillColor(cr, ui.bgColor)
     status = getCurrentMonthStatus()
     #################################### Drawing Border
     if ui.mcalTopMargin>0:
         ##### Drawing border top background
         ##menuBgColor == borderColor ##???????????????
         cr.rectangle(0, 0, w, ui.mcalTopMargin)
         fillColor(cr, ui.borderColor)
         ######## Drawing weekDays names
         setColor(cr, ui.borderTextColor)
         dx = 0
         wdayAb = (self.wdaysWidth > w)
         for i in xrange(7):
             wday = newTextLayout(self, core.getWeekDayAuto(i, wdayAb))
             try:
                 (fontw, fonth) = wday.get_pixel_size()
             except:
                 myRaise(__file__)
                 (fontw, fonth) = wday.get_pixel_size()
             cr.move_to(
                 self.cx[i]-fontw/2.0,
                 (ui.mcalTopMargin-fonth)/2.0-1,
             )
             cr.show_layout(wday)
         ######## Drawing "Menu" label
         setColor(cr, ui.menuTextColor)
         text = newTextLayout(self, _('Menu'))
         (fontw, fonth) = text.get_pixel_size()
         if rtl:
             cr.move_to(
                 w-(ui.mcalLeftMargin+fontw)/2.0 - 3,
                 (ui.mcalTopMargin-fonth)/2.0 - 1,
             )
         else:
             cr.move_to(
                 (ui.mcalLeftMargin-fontw)/2.0,
                 (ui.mcalTopMargin-fonth)/2.0 - 1,
             )
         cr.show_layout(text)
     if ui.mcalLeftMargin>0:
         ##### Drawing border left background
         if rtl:
             cr.rectangle(w-ui.mcalLeftMargin, ui.mcalTopMargin, ui.mcalLeftMargin, h-ui.mcalTopMargin)
         else:
             cr.rectangle(0, ui.mcalTopMargin, ui.mcalLeftMargin, h-ui.mcalTopMargin)
         fillColor(cr, ui.borderColor)
         ##### Drawing week numbers
         setColor(cr, ui.borderTextColor)
         for i in xrange(6):
             lay = newTextLayout(self, _(status.weekNum[i]))
             fontw, fonth = lay.get_pixel_size()
             if rtl:
                 cr.move_to(
                     w-(ui.mcalLeftMargin+fontw)/2.0,
                     self.cy[i]-fonth/2.0+2,
                 )
             else:
                 cr.move_to(
                     (ui.mcalLeftMargin-fontw)/2.0,
                     self.cy[i]-fonth/2.0+2,
                 )
             cr.show_layout(lay)
     selectedCellPos = ui.cell.monthPos
     shown = self.shownCals
     if ui.todayCell.inSameMonth(ui.cell):
         (tx, ty) = ui.todayCell.monthPos ## today x and y
         x0 = self.cx[tx] - self.dx/2.0
         y0 = self.cy[ty] - self.dy/2.0
         cr.rectangle(x0, y0, self.dx, self.dy)
         fillColor(cr, ui.todayCellColor)
     for yPos in xrange(6):
         for xPos in xrange(7):
             c = status[yPos][xPos]
             x0 = self.cx[xPos]
             y0 = self.cy[yPos]
             cellInactive = (c.month != ui.cell.month)
             cellHasCursor = (cursor and (xPos, yPos) == selectedCellPos)
             if cellHasCursor:
                 ##### Drawing Cursor
                 cx0 = x0-self.dx/2.0+1
                 cy0 = y0-self.dy/2.0+1
                 cw = self.dx-1
                 ch = self.dy-1
                 ######### Circular Rounded
                 drawCursorBg(cr, cx0, cy0, cw, ch)
                 fillColor(cr, ui.cursorBgColor)
             ######## end of Drawing Cursor
             if not cellInactive:
                 iconList = c.getEventIcons()
                 if iconList:
                     iconsN = len(iconList)
                     scaleFact = 1.0 / sqrt(iconsN)
                     fromRight = 0
                     for index, icon in enumerate(iconList):
                         ## if len(iconList) > 1 ## FIXME
                         try:
                             pix = gdk.pixbuf_new_from_file(icon)
                         except:
                             myRaise(__file__)
                             continue
                         pix_w = pix.get_width()
                         pix_h = pix.get_height()
                         ## right buttom corner ?????????????????????
                         x1 = (self.cx[xPos] + self.dx/2.0)/scaleFact - fromRight - pix_w # right side
                         y1 = (self.cy[yPos] + self.dy/2.0)/scaleFact - pix_h # buttom side
                         cr.scale(scaleFact, scaleFact)
                         cr.set_source_pixbuf(pix, x1, y1)
                         cr.rectangle(x1, y1, pix_w, pix_h)
                         cr.fill()
                         cr.scale(1.0/scaleFact, 1.0/scaleFact)
                         fromRight += pix_w
             #### Drawing numbers inside every cell
             #cr.rectangle(
             #    x0-self.dx/2.0+1,
             #    y0-self.dy/2.0+1,
             #    self.dx-1,
             #    self.dy-1,
             #)
             if shown[0]['enable']:
                 mode = shown[0]['mode']
                 daynum = newTextLayout(self, _(c.dates[mode][2], mode), shown[0]['font'])
                 (fontw, fonth) = daynum.get_pixel_size()
                 if cellInactive:
                     setColor(cr, ui.inactiveColor)
                 elif c.holiday:
                     setColor(cr, ui.holidayColor)
                 else:
                     setColor(cr, shown[0]['color'])
                 cr.move_to(
                     x0 - fontw/2.0 + shown[0]['x'],
                     y0 - fonth/2.0 + shown[0]['y'],
                 )
                 cr.show_layout(daynum)
             if not cellInactive:
                 for item in shown[1:]:
                     if item['enable']:
                         mode = item['mode']
                         daynum = newTextLayout(self, _(c.dates[mode][2], mode), item['font'])
                         (fontw, fonth) = daynum.get_pixel_size()
                         setColor(cr, item['color'])
                         cr.move_to(
                             x0 - fontw/2.0 + item['x'],
                             y0 - fonth/2.0 + item['y'],
                         )
                         cr.show_layout(daynum)
                 if cellHasCursor:
                     ##### Drawing Cursor Outline
                     cx0 = x0-self.dx/2.0+1
                     cy0 = y0-self.dy/2.0+1
                     cw = self.dx-1
                     ch = self.dy-1
                     ######### Circular Rounded
                     drawCursorOutline(cr, cx0, cy0, cw, ch)
                     fillColor(cr, ui.cursorOutColor)
                     ##### end of Drawing Cursor Outline
     ################ end of drawing cells
     ##### drawGrid
     if ui.mcalGrid:
         setColor(cr, ui.gridColor)
         for i in xrange(7):
             cr.rectangle(self.cx[i]+rtlSgn()*self.dx/2.0, 0, 1, h)
             cr.fill()
         for i in xrange(6):
             cr.rectangle(0, self.cy[i]-self.dy/2.0, w, 1)
             cr.fill()
     return False
Esempio n. 9
0
	def drawAll(self, widget=None, gevent=None, cr=None, cursor=True):
		#?????? Must enhance (only draw few cells, not all cells)
		#print(now(), 'drawAll'#, tuple(gevent.area), tuple(self.get_allocation()))
		if gevent:
			xu, yu, wu, hu = tuple(gevent.area)
			#print('expose-event area:', xu, yu, wu, hu)
		self.calcCoord()
		w = self.get_allocation().width
		h = self.get_allocation().height
		if not cr:
			cr = self.get_window().cairo_create()
			#cr.set_line_width(0)#??????????????
			#cr.scale(0.5, 0.5)
		wx = ui.winX
		wy = ui.winY
		if ui.bgUseDesk:## FIXME
			### ????????????????? Need for mainWin !!!!!
			coord = self.translate_coordinates(self, wx, wy)
			if len(coord)==2:
				from scal2.ui_gtk import desktop
				x0, y0 = coord
				try:
					bg = desktop.get_wallpaper(x0, y0, w, h)
				except:
					print('Could not get wallpaper!')
					myRaise(__file__)
					#os.popen('gnome-settings-daemon')
					ui.bgUseDesk = False ##??????????????????
					#if ui.prefDialog
					#	ui.prefDialog.checkDeskBg.set_active(False)##??????????????????
				else:
					cr.set_source_pixbuf(bg, 0, 0)
					cr.paint()
			#else:
			#	print(coord)
		cr.rectangle(0, 0, w, h)
		fillColor(cr, ui.bgColor)
		status = getCurrentMonthStatus()
		#################################### Drawing Border
		if ui.mcalTopMargin>0:
			##### Drawing border top background
			##menuBgColor == borderColor ##???????????????
			cr.rectangle(0, 0, w, ui.mcalTopMargin)
			fillColor(cr, ui.borderColor)
			######## Drawing weekDays names
			setColor(cr, ui.borderTextColor)
			dx = 0
			wdayAb = (self.wdaysWidth > w)
			for i in range(7):
				wday = newTextLayout(self, core.getWeekDayAuto(i, wdayAb))
				try:
					fontw, fonth = wday.get_pixel_size()
				except:
					myRaise(__file__)
					fontw, fonth = wday.get_pixel_size()
				cr.move_to(
					self.cx[i]-fontw/2.0,
					(ui.mcalTopMargin-fonth)/2.0-1,
				)
				cr.show_layout(wday)
			######## Drawing "Menu" label
			setColor(cr, ui.menuTextColor)
			text = newTextLayout(self, _('Menu'))
			fontw, fonth = text.get_pixel_size()
			if rtl:
				cr.move_to(
					w-(ui.mcalLeftMargin+fontw)/2.0 - 3,
					(ui.mcalTopMargin-fonth)/2.0 - 1,
				)
			else:
				cr.move_to(
					(ui.mcalLeftMargin-fontw)/2.0,
					(ui.mcalTopMargin-fonth)/2.0 - 1,
				)
			cr.show_layout(text)
		if ui.mcalLeftMargin>0:
			##### Drawing border left background
			if rtl:
				cr.rectangle(
					w - ui.mcalLeftMargin,
					ui.mcalTopMargin,
					ui.mcalLeftMargin,
					h - ui.mcalTopMargin,
				)
			else:
				cr.rectangle(
					0,
					ui.mcalTopMargin,
					ui.mcalLeftMargin,
					h - ui.mcalTopMargin,
				)
			fillColor(cr, ui.borderColor)
			##### Drawing week numbers
			setColor(cr, ui.borderTextColor)
			for i in range(6):
				lay = newTextLayout(self, _(status.weekNum[i]))
				fontw, fonth = lay.get_pixel_size()
				if rtl:
					cr.move_to(
						w - (ui.mcalLeftMargin+fontw)/2.0,
						self.cy[i]-fonth/2.0 + 2,
					)
				else:
					cr.move_to(
						(ui.mcalLeftMargin-fontw)/2.0,
						self.cy[i]-fonth/2.0 + 2,
					)
				cr.show_layout(lay)
		selectedCellPos = ui.cell.monthPos
		if ui.todayCell.inSameMonth(ui.cell):
			tx, ty = ui.todayCell.monthPos ## today x and y
			x0 = self.cx[tx] - self.dx/2.0
			y0 = self.cy[ty] - self.dy/2.0
			cr.rectangle(x0, y0, self.dx, self.dy)
			fillColor(cr, ui.todayCellColor)
		for yPos in range(6):
			for xPos in range(7):
				c = status[yPos][xPos]
				x0 = self.cx[xPos]
				y0 = self.cy[yPos]
				cellInactive = (c.month != ui.cell.month)
				cellHasCursor = (cursor and (xPos, yPos) == selectedCellPos)
				if cellHasCursor:
					##### Drawing Cursor
					cx0 = x0 - self.dx/2.0 + 1
					cy0 = y0 - self.dy/2.0 + 1
					cw = self.dx - 1
					ch = self.dy - 1
					######### Circular Rounded
					drawCursorBg(cr, cx0, cy0, cw, ch)
					fillColor(cr, ui.cursorBgColor)
				######## end of Drawing Cursor
				if not cellInactive:
					iconList = c.getMonthEventIcons()
					if iconList:
						iconsN = len(iconList)
						scaleFact = 1.0 / sqrt(iconsN)
						fromRight = 0
						for index, icon in enumerate(iconList):
							## if len(iconList) > 1 ## FIXME
							try:
								pix = gdk.pixbuf_new_from_file(icon)
							except:
								myRaise(__file__)
								continue
							pix_w = pix.get_width()
							pix_h = pix.get_height()
							## right buttom corner ?????????????????????
							x1 = (self.cx[xPos] + self.dx/2.0)/scaleFact - fromRight - pix_w # right side
							y1 = (self.cy[yPos] + self.dy/2.0)/scaleFact - pix_h # buttom side
							cr.scale(scaleFact, scaleFact)
							cr.set_source_pixbuf(pix, x1, y1)
							cr.rectangle(x1, y1, pix_w, pix_h)
							cr.fill()
							cr.scale(1.0/scaleFact, 1.0/scaleFact)
							fromRight += pix_w
				#### Drawing numbers inside every cell
				#cr.rectangle(
				#	x0-self.dx/2.0+1,
				#	y0-self.dy/2.0+1,
				#	self.dx-1,
				#	self.dy-1,
				#)
				mode = calTypes.primary
				params = ui.mcalTypeParams[0]
				daynum = newTextLayout(self, _(c.dates[mode][2], mode), params['font'])
				fontw, fonth = daynum.get_pixel_size()
				if cellInactive:
					setColor(cr, ui.inactiveColor)
				elif c.holiday:
					setColor(cr, ui.holidayColor)
				else:
					setColor(cr, params['color'])
				cr.move_to(
					x0 - fontw/2.0 + params['pos'][0],
					y0 - fonth/2.0 + params['pos'][1],
				)
				cr.show_layout(daynum)
				if not cellInactive:
					for mode, params in ui.getMcalMinorTypeParams()[1:]:
						daynum = newTextLayout(self, _(c.dates[mode][2], mode), params['font'])
						fontw, fonth = daynum.get_pixel_size()
						setColor(cr, params['color'])
						cr.move_to(
							x0 - fontw/2.0 + params['pos'][0],
							y0 - fonth/2.0 + params['pos'][1],
						)
						cr.show_layout(daynum)
					if cellHasCursor:
						##### Drawing Cursor Outline
						cx0 = x0-self.dx/2.0+1
						cy0 = y0-self.dy/2.0+1
						cw = self.dx-1
						ch = self.dy-1
						######### Circular Rounded
						drawCursorOutline(cr, cx0, cy0, cw, ch)
						fillColor(cr, ui.cursorOutColor)
						##### end of Drawing Cursor Outline
		################ end of drawing cells
		##### drawGrid
		if ui.mcalGrid:
			setColor(cr, ui.mcalGridColor)
			for i in range(7):
				cr.rectangle(self.cx[i]+rtlSgn()*self.dx/2.0, 0, 1, h)
				cr.fill()
			for i in range(6):
				cr.rectangle(0, self.cy[i]-self.dy/2.0, w, 1)
				cr.fill()
		return False