Added recognition of necessary number of columns

This commit is contained in:
Maximilian Giller 2019-04-09 09:34:00 +02:00
parent 5ec99c31bf
commit 0a523d5de9

View file

@ -4,6 +4,7 @@ from TextDesign import TextDesign
from PIL import ImageDraw from PIL import ImageDraw
from Assets import colors, defaultfontsize from Assets import colors, defaultfontsize
from BoxDesign import BoxDesign from BoxDesign import BoxDesign
from datetime import timedelta
hourbox_y_width = 1 hourbox_y_width = 1
hour_box_fontsize = 0.75 hour_box_fontsize = 0.75
@ -36,7 +37,7 @@ class HourListDesign (DesignEntity):
def __calc_parameters__ (self): def __calc_parameters__ (self):
self.hour_count = self.last_hour - self.first_hour + 1 self.hour_count = self.last_hour - self.first_hour + 1
self.__row_size__ = (self.size[0], self.size[1] / self.hour_count) self.__row_size__ = (self.size[0], self.size[1] / self.hour_count)
self.number_columns = 1 self.number_columns = self.__get_max_num_simultaneous_events__()
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":
@ -112,4 +113,25 @@ class HourListDesign (DesignEntity):
textbox_size = (size[0] - event_title_padding, size[1] - event_title_padding) 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 = 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) txt.pos = (pos[0] + event_title_padding, pos[1] + event_title_padding)
self.draw_design(txt) self.draw_design(txt)
def __get_max_num_simultaneous_events__(self):
parallelity_count = 1
for index, event in enumerate(self.events):
current_parallelity = 1
preceding = self.events[:index] #Assumption: Events are ordered chronologically
for pre_event in preceding:
if self.__are_simultaneous__(event, pre_event):
current_parallelity += 1
if parallelity_count < current_parallelity:
parallelity_count = current_parallelity
return parallelity_count
def __are_simultaneous__(self, ev_a, ev_b):
if ev_a.begin_datetime > ev_b.begin_datetime:
ev_a, ev_b = ev_b, ev_a
mes_dur = ev_b.begin_datetime - ev_a.begin_datetime
return mes_dur < ev_a.duration