def testQDate(self):
        date = datetime.date(2010, 4, 23)
        other = QDate(date)
        self.assertEqual(date.year, other.year())
        self.assertEqual(date.month, other.month())
        self.assertEqual(date.day, other.day())

        self.assertEqual(date, other.toPython())
Beispiel #2
0
    def testQDate(self):
        date = datetime.date(2010, 4, 23)
        other = QDate(date)
        self.assertEqual(date.year, other.year())
        self.assertEqual(date.month, other.month())
        self.assertEqual(date.day, other.day())

        self.assertEqual(date, other.toPython())
    def updateCalendar(self, select_date: QDate) -> None:
        if self.__selectDate == select_date: return
        row: int = 0
        dateItem: List[List[ShadowCalendar.DateItem], ] = \
            [[ShadowCalendar.DateItem() for column in range(7)] for row in range(6)]
        date: QDate = QDate(select_date.year(), select_date.month(), 1)
        while date.month() == select_date.month():
            weekDay: int = date.dayOfWeek()
            dateItem[row][weekDay - 1].year = date.year()
            dateItem[row][weekDay - 1].month = date.month()
            dateItem[row][weekDay - 1].day = date.day()
            date = date.addDays(1)
            if weekDay is 7 and date.month() is date.month():
                row += 1

        # 重新赋值
        for i in range(6):
            for j in range(7):
                self.__dateItem[i][j] = dateItem[i][j]

        self.__selectDate = select_date
        self.update()
    def paintCell(
        self, painter: QtGui.QPainter, rect: QtCore.QRect, date: QtCore.QDate
    ):
        # Paint background
        if self.selectedDate() == date:
            painter.fillRect(rect, self.Color.selected_background)

        # Paint date text
        if self.selectedDate() != date:
            if self.monthShown() != date.month():
                painter.setPen(self.Color.unselected_month_date_text)
            elif qdate_is_weekend(date):
                painter.setPen(self.Color.unselected_weekend_date_text)
            else:
                painter.setPen(self.Color.unselected_date_text)
        else:
            painter.setPen(self.Color.selected_date_text)
        painter.setFont(QtGui.QFont("Helvetica", 20))
        painter.drawText(rect, QtCore.Qt.AlignTop, str(date.day()))

        # Get todo items to paint
        items = []
        try:
            items = self.todo_item_dict[date.year()][date.month()][date.day()]
        except KeyError:
            pass

        if len(items) != 0:
            # Paint number of todo items
            # Text color is same is date's
            completed_items_num = len([item for item in items if item["completed"]])
            x = 40
            y = 5
            width = rect.width() - x
            painter.setFont(QtGui.QFont("Helvetica", 14))
            item_number_str = f"{completed_items_num}/{len(items)} items"
            painter.drawText(
                rect.x() + x, rect.y() + y, width, rect.height(), 0, item_number_str
            )

            # Paint todo items
            x = 5
            y = 32
            width = rect.width() - x
            painter.setFont(QtGui.QFont("Helvetica", 10))
            for item in items:
                if y > rect.height():
                    break

                if item["completed"]:
                    painter.setPen(self.Color.completed_todo_item)
                else:
                    painter.setPen(self.Color.uncompleted_todo_item)

                height = rect.height() - y
                bounding_rect = painter.boundingRect(
                    rect.x() + x,
                    rect.y() + y,
                    width,
                    height,
                    QtCore.Qt.TextWordWrap,
                    item["name"],
                )
                painter.drawText(
                    rect.x() + x,
                    rect.y() + y,
                    width,
                    height,
                    QtCore.Qt.TextWordWrap,
                    item["name"],
                )
                y += bounding_rect.height()
Beispiel #5
0
    def paintCell(
        self, painter: QtGui.QPainter, rect: QtCore.QRect, qdate: QtCore.QDate
    ):
        date = qdate_to_date(qdate)
        # Paint date text
        if self.monthShown() != qdate.month():
            painter.setPen(self.Color.unselected_month_date_text)
        else:
            painter.setPen(self.Color.unselected_date_text)
        painter.setFont(QtGui.QFont("Helvetica", 20))
        painter.drawText(rect, QtCore.Qt.AlignTop, str(qdate.day()))

        # Get all of the chains for the current week
        for date_range, chains in self.month_chains.items():
            if date_range[0] <= date and date <= date_range[1]:
                display_chains = chains
                break
        else:
            display_chains = self.generate_week_info(qdate_to_date(qdate))

        # Paint completed chains
        completed_chains_num = 0
        x = 5
        y = 32
        width = rect.width() - x
        painter.setFont(QtGui.QFont("Helvetica", 10))
        for chain in display_chains:
            if y > rect.height():
                break

            height = rect.height() - y
            bounding_rect = painter.boundingRect(
                rect.x() + x,
                rect.y() + y,
                width,
                height,
                QtCore.Qt.TextWordWrap,
                chain,
            )
            if chain_handler.get_chain(chain, qdate.year(), qdate.month(), qdate.day()):
                # Draw colored rect
                painter.fillRect(
                    rect.x(),
                    rect.y() + y,
                    rect.width(),
                    min(bounding_rect.height(), rect.height() - y),
                    self.chain_color_dict[chain],
                )

                # Draw text
                painter.setPen(self.Color.chain_name_color)
                completed_chains_num += 1
                painter.drawText(
                    rect.x() + x,
                    rect.y() + y,
                    width,
                    height,
                    QtCore.Qt.TextWordWrap,
                    chain,
                )

            y += bounding_rect.height()

        # Paint number of completed todo items
        if completed_chains_num > 0:
            if self.monthShown() != qdate.month():
                painter.setPen(self.Color.unselected_month_date_text)
            else:
                painter.setPen(self.Color.unselected_date_text)
            x = 40
            y = 5
            width = rect.width() - x
            painter.setFont(QtGui.QFont("Helvetica", 14))
            item_number_str = f"{completed_chains_num}"
            painter.drawText(
                rect.x() + x, rect.y() + y, width, rect.height(), 0, item_number_str
            )

        # Surround current date in a blue border
        if datetime.date.today() == date:
            painter.setPen(self.Color.selected_background)
            painter.drawRect(rect.x(), rect.y(), rect.width(), rect.height())
Beispiel #6
0
def qDate2date(qDate: QDate) -> datetime.date:
    return datetime.date(qDate.year(), qDate.month(), qDate.day())
Beispiel #7
0
def qdate_to_date(qdate: QtCore.QDate) -> datetime.date:
    return datetime.date(qdate.year(), qdate.month(), qdate.day())