Integrated first event box prototype
This commit is contained in:
parent
367218ed67
commit
6b726ac6b6
1 changed files with 48 additions and 12 deletions
|
@ -2,12 +2,15 @@ from DesignEntity import DesignEntity
|
||||||
from settings import hours, language
|
from settings import hours, language
|
||||||
from TextDesign import TextDesign
|
from TextDesign import TextDesign
|
||||||
from PIL import ImageDraw
|
from PIL import ImageDraw
|
||||||
from Assets import colors
|
from Assets import colors, defaultfontsize
|
||||||
|
from BoxDesign import BoxDesign
|
||||||
|
|
||||||
hourbox_y_width = 1
|
hourbox_y_width = 1
|
||||||
hour_box_fontsize = 0.75
|
hour_box_fontsize = 0.75
|
||||||
hoursubtext_fontsize = 0.7
|
hoursubtext_fontsize = 0.7
|
||||||
hoursubtext_height = 0.35
|
hoursubtext_height = 0.35
|
||||||
|
event_title_fontsize = defaultfontsize
|
||||||
|
event_title_padding = 1
|
||||||
line_thickness = 1
|
line_thickness = 1
|
||||||
|
|
||||||
class HourListDesign (DesignEntity):
|
class HourListDesign (DesignEntity):
|
||||||
|
@ -17,14 +20,23 @@ class HourListDesign (DesignEntity):
|
||||||
super(HourListDesign, self).__init__(size)
|
super(HourListDesign, self).__init__(size)
|
||||||
self.first_hour = first_hour
|
self.first_hour = first_hour
|
||||||
self.last_hour = last_hour
|
self.last_hour = last_hour
|
||||||
self.__calc_metrics__()
|
self.events = []
|
||||||
|
|
||||||
def add_events (self, events):
|
def add_events (self, events):
|
||||||
pass
|
self.events.extend(events)
|
||||||
|
|
||||||
def __finish_image__(self):
|
def __finish_image__ (self):
|
||||||
|
self.__calc_parameters__()
|
||||||
self.__draw_hour_rows__()
|
self.__draw_hour_rows__()
|
||||||
self.__draw_lines__()
|
self.__draw_lines__()
|
||||||
|
|
||||||
|
for event in self.events:
|
||||||
|
self.__draw_event__(event)
|
||||||
|
|
||||||
|
def __calc_parameters__ (self):
|
||||||
|
self.hour_count = self.last_hour - self.first_hour + 1
|
||||||
|
self.__row_size__ = (self.size[0], self.size[1] / self.hour_count)
|
||||||
|
self.number_columns = 1
|
||||||
|
|
||||||
def __get_hour_text__ (self, hour):
|
def __get_hour_text__ (self, hour):
|
||||||
if hour <= 12 or hours is "24":
|
if hour <= 12 or hours is "24":
|
||||||
|
@ -33,10 +45,6 @@ class HourListDesign (DesignEntity):
|
||||||
short = hour - 12
|
short = hour - 12
|
||||||
return str(short) if short > 0 else "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):
|
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)
|
return self.__get_height_for_duration__(hour, minute) - self.__get_height_for_duration__(self.first_hour)
|
||||||
|
|
||||||
|
@ -65,15 +73,43 @@ class HourListDesign (DesignEntity):
|
||||||
sub.pos = (0, height + self.__get_ypos_for_time__(hour))
|
sub.pos = (0, height + self.__get_ypos_for_time__(hour))
|
||||||
self.draw_design(sub)
|
self.draw_design(sub)
|
||||||
|
|
||||||
def __draw_lines__(self):
|
def __draw_lines__ (self):
|
||||||
for i in range(self.hour_count):
|
for i in range(self.hour_count):
|
||||||
ypos = i * self.__row_size__[1]
|
ypos = i * self.__row_size__[1]
|
||||||
line_start = (0, ypos)
|
line_start = (0, ypos)
|
||||||
line_end = (self.size[0], ypos)
|
line_end = (self.size[0], ypos)
|
||||||
ImageDraw.Draw(self.__image__).line([line_start, line_end], fill=colors["fg"], width=line_thickness)
|
ImageDraw.Draw(self.__image__).line([ line_start, line_end ], fill=colors["fg"], width=line_thickness)
|
||||||
|
|
||||||
def __get_hour_sub_text__(self, hour):
|
def __get_hour_sub_text__ (self, hour):
|
||||||
if language is "de":
|
if language is "de":
|
||||||
return "Uhr"
|
return "Uhr"
|
||||||
elif language is "en":
|
elif language is "en":
|
||||||
return "AM" if hour < 12 else "PM"
|
return "AM" if hour < 12 else "PM"
|
||||||
|
|
||||||
|
def __draw_event__ (self, event, column = 0):
|
||||||
|
xoffset = hourbox_y_width * self.__row_size__[1]
|
||||||
|
column_width = (self.size[0] - xoffset) / self.number_columns
|
||||||
|
|
||||||
|
begin = event.begin_datetime
|
||||||
|
time_ypos = self.__get_ypos_for_time__(begin.hour, begin.minute)
|
||||||
|
hours = event.duration.total_seconds() / 3600
|
||||||
|
time_height = self.__get_height_for_duration__(hours)
|
||||||
|
|
||||||
|
pos = (xoffset + column_width * column, time_ypos)
|
||||||
|
size = (column_width, time_height)
|
||||||
|
|
||||||
|
self.__draw_event_block__(pos, size, event)
|
||||||
|
|
||||||
|
def __draw_event_block__ (self, pos, size, event):
|
||||||
|
box_color = colors["hl"] if event.highlight else colors["fg"]
|
||||||
|
box = BoxDesign(size, fill = box_color)
|
||||||
|
box.mask = False
|
||||||
|
box.pos = pos
|
||||||
|
self.draw_design(box)
|
||||||
|
|
||||||
|
text = event.title
|
||||||
|
text_color = colors["bg"]
|
||||||
|
textbox_size = (size[0] - event_title_padding, size[1] - event_title_padding)
|
||||||
|
txt = TextDesign(textbox_size, text = text, fontsize=event_title_fontsize, color=text_color, background_color=box_color)
|
||||||
|
txt.pos = (pos[0] + event_title_padding, pos[1] + event_title_padding)
|
||||||
|
self.draw_design(txt)
|
Loading…
Reference in a new issue