diff --git a/Calendar/DayViewPanel.py b/Calendar/DayViewPanel.py index b0b61ca..b746686 100644 --- a/Calendar/DayViewPanel.py +++ b/Calendar/DayViewPanel.py @@ -39,7 +39,7 @@ class DayViewPanel (PanelDesign): self.__header__.pos = (0, 0) def __init_hourlist__ (self): - self.__hourlist__ = HourListDesign(self.__abs_co__(hourlist_size), datetime.now().hour) + self.__hourlist__ = HourListDesign(self.__abs_co__(hourlist_size), 6, 18) self.__hourlist__.pos = (0, self.__header__.size[1]) def __add_allday_events__ (self, calendar): diff --git a/Calendar/HourListDesign.py b/Calendar/HourListDesign.py index bd85e10..4fc2f2d 100644 --- a/Calendar/HourListDesign.py +++ b/Calendar/HourListDesign.py @@ -1,10 +1,81 @@ from DesignEntity import DesignEntity +from settings import hours, language +from TextDesign import TextDesign +from PIL import ImageDraw + +hourbox_y_width = 1 +hour_box_fontsize = 0.75 +hoursubtext_fontsize = 0.7 +hoursubtext_height = 0.35 +line_thickness = 1 class HourListDesign (DesignEntity): """Hours of a day are listed vertically and resemble a timeline.""" - def __init__ (self, size, first_hour): + def __init__ (self, size, first_hour = 0, last_hour = 23, background_color="white", general_color="black", highlight_color="red"): super(HourListDesign, self).__init__(size) + self.first_hour = first_hour + self.last_hour = last_hour + self.bg_color = background_color + self.color = general_color + self.highlight_color = highlight_color + self.__calc_metrics__() - def add_events(self, events): - pass \ No newline at end of file + def add_events (self, events): + pass + + def __finish_image__(self): + self.__draw_hour_rows__() + self.__draw_lines__() + + def __get_hour_text__ (self, hour): + if hour <= 12 or hours is "24": + return str(hour) + else: + short = hour - 12 + return str(short) if short > 0 else "12" + + def __calc_metrics__ (self): + self.hour_count = self.last_hour - self.first_hour + 1 + self.__row_size__ = (self.size[0], self.size[1] / self.hour_count) + + def __get_ypos_for_time__ (self, hour, minute = 0): + return self.__get_height_for_duration__(hour, minute) - self.__get_height_for_duration__(self.first_hour) + + def __get_height_for_duration__ (self, hours, minutes = 0): + row_height = self.__row_size__[1] + return row_height * (hours + minutes / 60) + + def __draw_hour_rows__ (self): + for hour in range(self.first_hour, self.last_hour + 1): + self.__draw_row__(hour) + + def __draw_row__ (self, hour): + subtext_height = self.__row_size__[1] * hoursubtext_height + sub_fontsize = subtext_height * hoursubtext_fontsize + width = hourbox_y_width * self.__row_size__[1] + height = self.__row_size__[1] - subtext_height + size = (width, height) + pos = (0, self.__get_ypos_for_time__(hour)) + fontsize = size[1] * hour_box_fontsize + + txt = TextDesign(size, text=self.__get_hour_text__(hour), fontsize=fontsize, verticalalignment="bottom", horizontalalignment="center") + txt.pos = pos + self.draw_design(txt) + + sub = TextDesign((width, subtext_height), text=self.__get_hour_sub_text__(hour), fontsize=sub_fontsize, verticalalignment="top", horizontalalignment="center") + sub.pos = (0, height + self.__get_ypos_for_time__(hour)) + self.draw_design(sub) + + def __draw_lines__(self): + for i in range(self.hour_count): + ypos = i * self.__row_size__[1] + line_start = (0, ypos) + line_end = (self.size[0], ypos) + ImageDraw.Draw(self.__image__).line([line_start, line_end], fill=self.color, width=line_thickness) + + def __get_hour_sub_text__(self, hour): + if language is "de": + return "Uhr" + elif language is "en": + return "AM" if hour < 12 else "PM" \ No newline at end of file