Берём строку
Находим количество блоков в строке
Находим ширину блока = ширина окна / количество блоков
Отрисовываем блок с шириной посчитанной выше и смещением = номер_блока * ширину_блока [+ 2 * ширина_границы]
Следующая строка
Под строкой имеется ввиду строка на рисунке что-ли?
Событие характеризует начало и конец в котором есть и минуты. Перебирать по минутам - не гуд.
Ну и главное я ничего не понял:
Берём строку
Ну допусти между 6 и 7 часами.
Находим количество блоков в строке
В данном случае - один.
Ширина блока = вся ширина окна. - неверно. По-моему проблема была не понята.
Формулирую заново:
Есть массив (коллекция не принципиально), событий. У событий есть свойства - "начало" и - "конец". Надо отрисовать их так что бы они не перекрывали друг друга.
Пока что придумал следующее:
1. Сортируем события по их продолжительности. Самое длинное - первое.
2. Берем событие С и смотрим, если предыдущее C-1 по списку событие перекрывается в датах, тогда первое "место" занято, (введем в событие свойство "место"), повторяем для события с-2 и.т.д. Дойдя до первого события становится понятно, сколько "мест" "занято". Присваиваем свойству "место" - следующее свободное.
3. Отрисовка - ну тут все понятно. Количество мест вычисляем. И рисуем в любой последовательности согласно смещению сверху по датам. Шириной (ширина окна / количество мест) Отступ от края ширина * "место" события.
Результат будет как на рисунке, но хотелось бы вычислять свободные места. скажем "событие 6" на рисунке идеально довести до правой границы окна. Но с другой стороны: если микрософт этим не озаботился. Может и мне плюнуть.