2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 // Licensed under the Flora License, Version 1.1 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
8 // http://floralicense.org/license/
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an AS IS BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
18 * @file ClDayPanel.cpp
19 * @brief This is the implementation file for the DayPanel class.
24 #include "ClDayPanel.h"
25 #include "ClEventListPresentationModel.h"
26 #include "ClGoToDatePopup.h"
27 #include "ClMainForm.h"
28 #include "ClPanningAnimationManager.h"
29 #include "ClResourceManager.h"
32 using namespace Tizen::Base;
33 using namespace Tizen::Base::Collection;
34 using namespace Tizen::Graphics;
35 using namespace Tizen::Social;
36 using namespace Tizen::System;
37 using namespace Tizen::Ui;
38 using namespace Tizen::Ui::Animations;
39 using namespace Tizen::Ui::Controls;
40 using namespace Tizen::Ui::Scenes;
42 static const int IDA_DAY_PANEL_ALL_DAY_EVENT_EXPAND = 11411;
43 static const int IDA_DAY_PANEL_ALL_DAY_EVENT_COLLAPSE = 11412;
44 static const int IDA_DAY_PANEL_EVENT = 11421;
45 static const int IDA_DAY_PANEL_EVENT_MORE = 11422;
47 static const int MIN_H_ALL_DAY_EVENT_LIST_PANEL = 80;
48 static const int MAX_H_ALL_DAY_EVENT_LIST_PANEL = 400;
49 static const unsigned int COLOR_ALL_DAY_EVENT_LIST_PANEL_BACKGROUND = Color32<242, 237, 226>::Value;
50 static const int Y_ALL_DAY_EVENT_LIST = 80;
51 static const unsigned int COLOR_ALL_DAY_EVENT_LIST_LINE = Color32<169, 169, 169>::Value;
52 static const int H_ALL_DAY_EVENT_ITEM = 80;
53 static const int X_ALL_DAY_EVENT = 22;
54 static const int FONT_SIZE_ALL_DAY_EVENT = 34;
55 static const unsigned int COLOR_ALL_DAY_EVENT = Color32<0, 0, 0>::Value;
56 static const unsigned int COLOR_ALL_DAY_EVENT_FOCUS = Color32<249, 249, 249>::Value;
57 static const int Y_EVENT_COLOR_BAR = 4;
58 static const int W_EVENT_COLOR_BAR = 7;
59 static const int H_EVENT_COLOR_BAR = 72;
60 static const int W_ALL_DAY_EVENT_EXPAND_ICON_MARGIN = 16;
61 static const int H_ALL_DAY_EVENT_EXPAND = 80;
62 static const int FONT_SIZE_ALL_DAY_EVENT_EXPAND = 34;
63 static const int H_EVENT_MIN = 39;
64 static const int H_EVENT_LIST_ITEM = 80;
65 static const int Y_EVENT_LIST_WITH_ALL_DAY_EVENTS = 80;
66 static const int X_CURRENT_TIME_ARROW = 33;
67 static const int H_CURRENT_TIME_LINE = 2;
68 static const unsigned int COLOR_CURRENT_TIME_LINE = Color32<233, 83, 30>::Value;
69 static const int W_TIME_LINE = 42;
70 static const int H_TIME_LINE = 50;
71 static const int X_TIME_LINE_AMPM = -19;
72 static const int W_TIME_LINE_AMPM = 80;
73 static const int H_TIME_LINE_AMPM = 20;
74 static const int FONT_SIZE_TIME_LINE_AMPM = 20;
75 static const unsigned int COLOR_TIME_LINE_AMPM = Color32<171, 171, 171>::Value;
76 static const int X_TIME_LINE_NUMBER = -9;
77 static const int W_TIME_LINE_NUMBER = 60;
78 static const int H_TIME_LINE_NUMBER = 24;
79 static const int FONT_SIZE_TIME_LINE_NUMBER = 24;
80 static const unsigned int COLOR_TIME_LINE_NUMBER = Color32<171, 171, 171>::Value;
81 static const unsigned int COLOR_EVENT_PANEL_BACKGROUND = Color32<0, 0, 0, 0>::Value;
82 static const int H_1_LINE_EVENT_TEXT = 80;
83 static const int FONT_SIZE_EVENT = 24;
84 static const unsigned int COLOR_EVENT = Color32<255, 255, 255>::Value;
85 static const int H_EVENT_MORE_BUTTON_MIN = 79;
86 static const unsigned int COLOR_EVENT_MORE_BACKGROUND = Color32<59, 151, 207>::Value;
88 static const int MAX_COLUMN_COUNT = 8;
89 static const int MINUTES_FOR_HOUR = 60;
90 static const int TIME_LINE_COUNT = 24;
91 static const int AMPM_TIME_COUNT = 12;
93 class DayPanelTimeLineItemProvider
94 : public virtual IListViewItemProvider
97 DayPanelTimeLineItemProvider(void);
98 virtual ~DayPanelTimeLineItemProvider(void);
100 virtual int GetItemCount(void);
101 virtual ListItemBase* CreateItem(int index, int itemWidth);
102 virtual bool DeleteItem(int index, ListItemBase* pItem, int itemWidth);
105 DayPanelTimeLineItemProvider::DayPanelTimeLineItemProvider(void)
109 DayPanelTimeLineItemProvider::~DayPanelTimeLineItemProvider(void)
114 DayPanelTimeLineItemProvider::GetItemCount(void)
116 return TIME_LINE_COUNT;
120 DayPanelTimeLineItemProvider::CreateItem(int index, int itemWidth)
122 CustomItem* pItem = new (std::nothrow) CustomItem();
123 pItem->Construct(Dimension(itemWidth, H_EVENT_LIST_ITEM), LIST_ANNEX_STYLE_NORMAL);
125 Bitmap* pBackgroundBitmap = ResourceManager::GetBitmapN(IDB_DAY_VIEW_TIME_LINE);
126 Bitmap* pPressedBackgroundBitmap = ResourceManager::GetBitmapN(IDB_DAY_VIEW_TIME_LINE_PRESS);
127 if (pBackgroundBitmap != null && pPressedBackgroundBitmap != null)
129 pItem->AddElement(Rectangle(0, 0, itemWidth, H_EVENT_LIST_ITEM), 0,
130 *pBackgroundBitmap, pPressedBackgroundBitmap, pPressedBackgroundBitmap);
132 delete pBackgroundBitmap;
133 delete pPressedBackgroundBitmap;
139 DayPanelTimeLineItemProvider::DeleteItem(int index, ListItemBase* pItem, int itemWidth)
147 , public virtual IActionEventListener
150 void Initialize(int x, int width, const CalEventInstance& event, const DateTime& date, const Color calendarColor);
151 void SetEventActionEventListener(IEventActionEventListener& listener);
153 DayEventButton(void);
154 virtual ~DayEventButton(void);
156 virtual result OnInitializing(void);
157 virtual result OnTerminating(void);
159 virtual void OnActionPerformed(const Control& source, int actionId);
161 const CalEventInstance* __pEvent;
162 IEventActionEventListener* __pEventActionEventListener;
165 DayEventButton::DayEventButton(void)
167 , __pEventActionEventListener(null)
171 DayEventButton::~DayEventButton(void)
176 DayEventButton::Initialize(int x, int width, const CalEventInstance& event, const DateTime& date, const Color calendarColor)
180 DateTime start = ResourceManager::ConvertUtcTimeToWallTime(__pEvent->GetStartTime());
181 DateTime end = ResourceManager::ConvertUtcTimeToWallTime(__pEvent->GetEndTime());
183 int startPosition = 0;
185 if (EventListPresentationModel::IsSameDay(start, date))
187 startPosition = start.GetHour() * H_EVENT_LIST_ITEM + start.GetMinute() * H_EVENT_LIST_ITEM / MINUTES_FOR_HOUR;
194 if (EventListPresentationModel::IsSameDay(end, date))
196 endPosition = end.GetHour() * H_EVENT_LIST_ITEM + end.GetMinute() * H_EVENT_LIST_ITEM / MINUTES_FOR_HOUR;
200 endPosition = TIME_LINE_COUNT * H_EVENT_LIST_ITEM;
203 int height = endPosition - startPosition - 1;
204 if (height < H_EVENT_MIN)
206 height = H_EVENT_MIN;
208 if (__pEvent->GetLocation().IsEmpty())
210 Construct(Rectangle(x, startPosition, width, height), __pEvent->GetSubject());
214 Construct(Rectangle(x, startPosition, width, height),
215 __pEvent->GetSubject() + ((endPosition - startPosition) >= H_1_LINE_EVENT_TEXT ? L"\n" : L", ") + __pEvent->GetLocation());
218 SetColor(BUTTON_STATUS_NORMAL, calendarColor);
219 SetColor(BUTTON_STATUS_PRESSED, calendarColor);
220 SetColor(BUTTON_STATUS_HIGHLIGHTED, calendarColor);
222 SetTextSize(FONT_SIZE_EVENT);
223 Color textColor(COLOR_EVENT);
224 SetTextColor(textColor);
225 SetPressedTextColor(textColor);
226 SetHighlightedTextColor(textColor);
230 DayEventButton::SetEventActionEventListener(IEventActionEventListener& listener)
232 __pEventActionEventListener = &listener;
236 DayEventButton::OnInitializing(void)
238 SetTextHorizontalAlignment(ALIGNMENT_LEFT);
239 SetTextVerticalAlignment(ALIGNMENT_TOP);
240 SetActionId(IDA_DAY_PANEL_EVENT);
241 AddActionEventListener(*this);
247 DayEventButton::OnTerminating(void)
253 DayEventButton::OnActionPerformed(const Control& source, int actionId)
255 if (GetParent()->GetParent()->GetControlAnimator()->GetStatus() == ANIMATOR_STATUS_PLAYING)
261 if (actionId == IDA_DAY_PANEL_EVENT && __pEventActionEventListener != null)
263 __pEventActionEventListener->OnEventActionPerformed(*__pEvent, EVENT_ACTION_SELECTION);
267 class DayEventMoreButton
269 , public virtual IActionEventListener
272 void AddEvent(CalEventInstance& event);
273 void Initialize(int x, int width, const DateTime& date);
275 DayEventMoreButton(void);
276 virtual ~DayEventMoreButton(void);
278 virtual result OnInitializing(void);
279 virtual result OnTerminating(void);
281 virtual void OnActionPerformed(const Control& source, int actionId);
284 DateTime __startDate;
286 Bitmap* __pBitmapArrow;
289 DayEventMoreButton::DayEventMoreButton(void)
290 : __startDate(DateTime::GetMaxValue())
291 , __endDate(DateTime::GetMinValue())
292 , __pBitmapArrow(null)
296 DayEventMoreButton::~DayEventMoreButton(void)
301 DayEventMoreButton::AddEvent(CalEventInstance& event)
303 DateTime start = ResourceManager::ConvertUtcTimeToWallTime(event.GetStartTime());
304 DateTime end = ResourceManager::ConvertUtcTimeToWallTime(event.GetEndTime());
305 if (__startDate > start)
314 int startPosition = 0;
316 if (EventListPresentationModel::IsSameDay(__startDate, __date))
318 startPosition = start.GetHour() * H_EVENT_LIST_ITEM + start.GetMinute() * H_EVENT_LIST_ITEM / MINUTES_FOR_HOUR;
325 if (EventListPresentationModel::IsSameDay(__endDate, __date))
327 endPosition = end.GetHour() * H_EVENT_LIST_ITEM + end.GetMinute() * H_EVENT_LIST_ITEM / MINUTES_FOR_HOUR;
331 endPosition = TIME_LINE_COUNT * H_EVENT_LIST_ITEM;
334 int height = endPosition - startPosition - 1;
335 if (height < H_EVENT_MORE_BUTTON_MIN)
337 height = H_EVENT_MORE_BUTTON_MIN;
339 SetBounds(GetX(), startPosition, GetWidth(), height);
341 if (__pBitmapArrow != null)
343 Point arrowPosition((GetWidth() - __pBitmapArrow->GetWidth()) / 2, (GetHeight() - __pBitmapArrow->GetHeight()) / 2);
344 SetNormalBitmap(arrowPosition, *__pBitmapArrow);
345 SetPressedBitmap(arrowPosition, *__pBitmapArrow);
350 DayEventMoreButton::Initialize(int x, int width, const DateTime& date)
352 Construct(Rectangle(x, 0, width, H_EVENT_MORE_BUTTON_MIN), L"");
353 SetColor(BUTTON_STATUS_NORMAL, Color(COLOR_EVENT_MORE_BACKGROUND));
354 SetActionId(IDA_DAY_PANEL_EVENT_MORE);
355 AddActionEventListener(*this);
361 DayEventMoreButton::OnInitializing(void)
363 __pBitmapArrow = ResourceManager::GetBitmapN(IDB_DAY_EVENT_MORE_ARROW);
364 Point arrowPosition((GetWidth() - __pBitmapArrow->GetWidth()) / 2, (GetHeight() - __pBitmapArrow->GetHeight()) / 2);
365 SetNormalBitmap(arrowPosition, *__pBitmapArrow);
366 SetPressedBitmap(arrowPosition, *__pBitmapArrow);
371 DayEventMoreButton::OnTerminating(void)
373 delete __pBitmapArrow;
378 DayEventMoreButton::OnActionPerformed(const Control& source, int actionId)
380 if (GetParent()->GetParent()->GetControlAnimator()->GetStatus() == ANIMATOR_STATUS_PLAYING)
386 if (actionId == IDA_DAY_PANEL_EVENT_MORE)
388 // Go to DayEventListForm
389 LinkedList* pArgs = new (std::nothrow) LinkedList();
390 pArgs->Add(new (std::nothrow) DateTime(__startDate));
391 pArgs->Add(new (std::nothrow) DateTime(__endDate));
392 result r = SceneManager::GetInstance()->GoForward(ForwardSceneTransition(IDSCN_DAY_EVENT_LIST,
393 SCENE_TRANSITION_ANIMATION_TYPE_LEFT), pArgs);
396 pArgs->RemoveAll(true);
404 , public virtual IActionEventListener
405 , public virtual IListViewItemEventListener
406 , public virtual IListViewItemProvider
407 , public virtual IScrollEventListener
410 const DateTime& GetDate(void) const;
411 int GetScrollPosition(void) const;
412 result Initialize(const Rectangle& bounds, const DateTime& date, const EventListPresentationModel& pm);
413 void SetDate(const DateTime& date);
414 void SetDateFocusEventListener(IDateFocusEventListener& listener);
415 void SetEventActionEventListener(IEventActionEventListener& listener);
416 void SetScrollEventListener(IScrollEventListener& listener);
417 void SetScrollPosition(int scrollPosition);
418 void UpdateEvent(void);
421 virtual ~DayEventPanel(void);
423 virtual void OnClearBackground(void);
424 virtual result OnInitializing(void);
425 virtual result OnTerminating(void);
427 virtual int GetItemCount(void);
428 virtual ListItemBase* CreateItem(int index, int itemWidth);
429 virtual bool DeleteItem(int index, ListItemBase* pItem, int itemWidth);
431 virtual void OnListViewItemStateChanged(ListView& listView, int index, int elementId, ListItemStatus status);
432 virtual void OnListViewItemSwept(ListView& listView, int index, SweepDirection direction);
433 virtual void OnListViewContextItemStateChanged(ListView& listView, int index, int elementId, ListContextItemStatus status);
434 virtual void OnListViewItemLongPressed(ListView& listView, int index, int elementId, bool& invokeListViewItemCallback);
435 virtual void OnListViewItemReordered(ListView& listView, int indexFrom, int indexTo);
437 virtual void OnActionPerformed(const Control& source, int actionId);
439 virtual void OnScrollEndReached(Control& source, ScrollEndEvent type);
440 virtual void OnScrollPositionChanged(Control& source, int scrollPos);
443 void ArrangeEvent(void);
444 result InitializeAllDayEventList(void);
445 result InitializeTimeLine(void);
447 result ExpandAllDayEventList(void);
448 result CollapseAllDayEventList(void);
452 const EventListPresentationModel* __pPm;
453 IDateFocusEventListener* __pDateFocusEventListener;
454 IEventActionEventListener* __pEventActionEventListener;
455 IScrollEventListener* __pScrollEventListener;
456 Panel* __pPanelAllDayEvents;
457 ListView* __pListViewAllDayEvents;
458 Button* __pButtonAllDayEventsPanelExpander;
459 ScrollPanel* __pPanelDayEvents;
460 ListView* __pListViewTimeLine;
461 DayPanelTimeLineItemProvider __timeLineItemProvider;
462 Label* __pLabelCurrent;
463 LinkedList __eventButtons;
464 Label* __pLabelTime[TIME_LINE_COUNT];
467 bool __is24HourEnabled;
470 DayEventPanel::DayEventPanel(void)
472 , __pDateFocusEventListener(null)
473 , __pEventActionEventListener(null)
474 , __pScrollEventListener(null)
475 , __pPanelAllDayEvents(null)
476 , __pListViewAllDayEvents(null)
477 , __pButtonAllDayEventsPanelExpander(null)
478 , __pPanelDayEvents(null)
479 , __pListViewTimeLine(null)
480 , __pLabelCurrent(null)
483 , __is24HourEnabled(false)
485 memset((void *)__pLabelTime, 0, sizeof(Label*) * TIME_LINE_COUNT);
488 DayEventPanel::~DayEventPanel(void)
493 DayEventPanel::GetDate(void) const
499 DayEventPanel::GetScrollPosition(void) const
501 return __pPanelDayEvents->GetScrollPosition();
505 DayEventPanel::Initialize(const Rectangle& bounds, const DateTime& date, const EventListPresentationModel& pm)
510 return Construct(bounds);
514 DayEventPanel::SetDate(const DateTime& date)
516 AppLogDebug("Enter");
517 if (EventListPresentationModel::IsSameDay(date, __date) == false)
527 int currentPosition = (__date.GetHour() * MINUTES_FOR_HOUR + __date.GetMinute()) * H_EVENT_LIST_ITEM / MINUTES_FOR_HOUR;
528 __pLabelCurrent->SetPosition(0, currentPosition - H_TIME_LINE / 2);
529 __pLabelCurrent->Invalidate(false);
533 DayEventPanel::SetDateFocusEventListener(IDateFocusEventListener& listener)
535 __pDateFocusEventListener = &listener;
539 DayEventPanel::SetEventActionEventListener(IEventActionEventListener& listener)
541 __pEventActionEventListener = &listener;
545 DayEventPanel::SetScrollEventListener(IScrollEventListener& listener)
547 __pScrollEventListener = &listener;
551 DayEventPanel::SetScrollPosition(int scrollPosition)
553 __pPanelDayEvents->SetScrollPosition(scrollPosition);
557 DayEventPanel::UpdateEvent(void)
560 if (GetItemCount() > 0)
562 __pPanelAllDayEvents->SetShowState(true);
563 if (__pButtonAllDayEventsPanelExpander->GetActionId() == IDA_DAY_PANEL_ALL_DAY_EVENT_COLLAPSE)
565 int height = GetItemCount() * H_ALL_DAY_EVENT_ITEM + H_ALL_DAY_EVENT_EXPAND;
566 __pPanelAllDayEvents->SetSize(GetWidth(), (height > MAX_H_ALL_DAY_EVENT_LIST_PANEL) ? MAX_H_ALL_DAY_EVENT_LIST_PANEL : height);
568 __pPanelAllDayEvents->Invalidate(true);
569 __pListViewAllDayEvents->UpdateList();
570 __pPanelDayEvents->SetBounds(0, Y_EVENT_LIST_WITH_ALL_DAY_EVENTS, GetWidth(), GetHeight() - Y_EVENT_LIST_WITH_ALL_DAY_EVENTS);
571 __pPanelDayEvents->Invalidate(true);
575 __pPanelAllDayEvents->SetShowState(false);
576 __pPanelDayEvents->SetBounds(0, 0, GetWidth(), GetHeight());
577 __pPanelDayEvents->Invalidate(true);
582 DayEventPanel::OnClearBackground(void)
584 bool is24HourNotationEnabled = false;
585 SettingInfo::GetValue(KEY_SYSTEM_24_HOUR_NOTATION_ENABLED, is24HourNotationEnabled);
587 if (is24HourNotationEnabled != __is24HourEnabled)
589 __is24HourEnabled = is24HourNotationEnabled;
590 for (int t = AMPM_TIME_COUNT + 1; t < TIME_LINE_COUNT; ++t)
593 time.Format(3, L"%02d", (__is24HourEnabled == true) ? t : (t - 1) % AMPM_TIME_COUNT + 1);
594 __pLabelTime[t]->SetText(time);
595 __pLabelTime[t]->Invalidate(false);
597 __pLabelAm->SetShowState(__is24HourEnabled == false);
598 __pLabelPm->SetShowState(__is24HourEnabled == false);
603 DayEventPanel::OnInitializing(void)
605 AppLogDebug("Enter");
606 RelativeLayout layout;
608 __pPanelAllDayEvents = new (std::nothrow) Panel();
609 __pPanelAllDayEvents->Construct(layout, Rectangle(0, 0, GetWidth(), MIN_H_ALL_DAY_EVENT_LIST_PANEL));
610 __pPanelAllDayEvents->SetBackgroundColor(Color(COLOR_ALL_DAY_EVENT_LIST_PANEL_BACKGROUND));
611 AddControl(__pPanelAllDayEvents);
612 SetControlAlwaysOnTop(*__pPanelAllDayEvents, true);
614 InitializeAllDayEventList();
616 __pPanelDayEvents = new (std::nothrow) ScrollPanel();
617 __pPanelDayEvents->Construct(Rectangle(0, 0, GetWidth(), GetHeight()));
618 AddControl(__pPanelDayEvents);
619 __pPanelDayEvents->SetScrollInputMode(SCROLL_INPUT_MODE_RESTRICT_TO_INITIAL_DIRECTION);
620 __pPanelDayEvents->AddScrollEventListener(*this);
622 InitializeTimeLine();
629 DayEventPanel::OnTerminating(void)
631 AppLogDebug("Enter");
632 __pPanelDayEvents->RemoveScrollEventListener(*this);
633 __eventButtons.RemoveAll(false);
638 DayEventPanel::GetItemCount(void)
640 return __pPm->GetAllDayEventCount(__date);
644 DayEventPanel::CreateItem(int index, int itemWidth)
646 const CalEventInstance* pEvent = __pPm->GetAllDayEvent(__date, index);
647 TryReturn(pEvent != null, null, "[E_FAILURE] Unable to get event.");
649 CustomItem* pItem = new (std::nothrow) CustomItem();
650 pItem->Construct(Dimension(itemWidth, H_ALL_DAY_EVENT_ITEM), LIST_ANNEX_STYLE_NORMAL);
652 Bitmap* pBitmap = new (std::nothrow) Bitmap();
653 pBitmap->Construct(Dimension(W_EVENT_COLOR_BAR, H_EVENT_COLOR_BAR), BITMAP_PIXEL_FORMAT_ARGB8888);
655 BufferInfo bufferinfo;
656 pBitmap->Lock(bufferinfo);
659 canvas.Construct(bufferinfo);
660 canvas.SetBackgroundColor(__pPm->GetCalendarColor(pEvent->GetCalendarId()));
664 pItem->AddElement(Rectangle(0, Y_EVENT_COLOR_BAR, W_EVENT_COLOR_BAR, H_EVENT_COLOR_BAR), 0, *pBitmap);
667 pItem->AddElement(Rectangle(X_ALL_DAY_EVENT, 0, itemWidth - X_ALL_DAY_EVENT, H_ALL_DAY_EVENT_ITEM), 1, pEvent->GetSubject(),
668 FONT_SIZE_ALL_DAY_EVENT, Color(COLOR_ALL_DAY_EVENT), Color(COLOR_ALL_DAY_EVENT_FOCUS), Color(COLOR_ALL_DAY_EVENT_FOCUS));
674 DayEventPanel::DeleteItem(int index, ListItemBase* pItem, int itemWidth)
681 DayEventPanel::OnListViewItemStateChanged(ListView& listView, int index, int elementId, ListItemStatus status)
683 if (status == LIST_ITEM_STATUS_SELECTED)
685 if (&listView == __pListViewAllDayEvents)
687 if (__pEventActionEventListener != null)
689 const CalEventInstance* pEvent = __pPm->GetAllDayEvent(__date, index);
692 __pEventActionEventListener->OnEventActionPerformed(*pEvent, EVENT_ACTION_SELECTION);
696 AppLogException("EventInstance is null");
701 if (&listView == __pListViewTimeLine)
703 if (__pDateFocusEventListener != null)
706 date.SetValue(__date.GetYear(), __date.GetMonth(), __date.GetDay(), index);
707 __pDateFocusEventListener->OnDateFocused(date);
714 DayEventPanel::OnListViewItemSwept(ListView& listView, int index, SweepDirection direction)
719 DayEventPanel::OnListViewContextItemStateChanged(ListView& listView, int index, int elementId, ListContextItemStatus status)
724 DayEventPanel::OnListViewItemLongPressed(ListView& listView, int index, int elementId, bool& invokeListViewItemCallback)
729 DayEventPanel::OnListViewItemReordered(ListView& listView, int indexFrom, int indexTo)
734 DayEventPanel::OnActionPerformed(const Control& source, int actionId)
738 case IDA_DAY_PANEL_ALL_DAY_EVENT_EXPAND:
739 ExpandAllDayEventList();
741 case IDA_DAY_PANEL_ALL_DAY_EVENT_COLLAPSE:
742 CollapseAllDayEventList();
746 if (__pEventActionEventListener != null)
748 __pEventActionEventListener->OnEventActionPerformed(*__pPm->GetEvent(__date, actionId), EVENT_ACTION_SELECTION);
753 DayEventPanel::OnScrollEndReached(Control& source, ScrollEndEvent type)
758 DayEventPanel::OnScrollPositionChanged(Control& source, int scrollPos)
760 if (__pScrollEventListener != null)
762 __pScrollEventListener->OnScrollPositionChanged(*this, scrollPos);
767 DayEventPanel::ArrangeEvent(void)
769 while (__eventButtons.GetCount() > 0)
771 __pPanelDayEvents->RemoveControl(static_cast<Control*>(__eventButtons.GetAt(0)));
772 __eventButtons.RemoveAt(0);
775 int groupIndex = __pPm->GetGroupIndex(__date);
776 int count = __pPm->GetEventCount(groupIndex);
783 LinkedList eventColumns[MAX_COLUMN_COUNT + 1];
784 DateTime bottomTime[MAX_COLUMN_COUNT + 1];
786 for (int i = 0; i < count; ++i)
788 const CalEventInstance* pEvent = __pPm->GetEvent(groupIndex, i);
790 DateTime startTime = ResourceManager::ConvertUtcTimeToWallTime(pEvent->GetStartTime());
791 DateTime endTime = ResourceManager::ConvertUtcTimeToWallTime(pEvent->GetEndTime());
794 while (bottomTime[col] > startTime && col < MAX_COLUMN_COUNT)
798 eventColumns[col].Add(*pEvent);
800 startTime.AddMinutes(30);
801 bottomTime[col] = (startTime > endTime) ? startTime : endTime;
802 if (maxColumns <= col)
804 maxColumns = col + 1;
808 IEnumerator** pEnum = new (std::nothrow) IEnumerator*[maxColumns];
809 for (int col = 0; col < maxColumns; ++col)
811 pEnum[col] = eventColumns[col].GetEnumeratorN();
814 // Create event buttons
815 int contentWidth = GetWidth() - W_TIME_LINE;
816 int maxEventColumns = (maxColumns > MAX_COLUMN_COUNT) ? MAX_COLUMN_COUNT : maxColumns;
821 for (int col = 0; col < maxEventColumns; ++col)
823 while (pEnum[col]->MoveNext() == E_SUCCESS)
825 CalEventInstance* pEvent = static_cast<CalEventInstance*>(pEnum[col]->GetCurrent());
827 startTime = ResourceManager::ConvertUtcTimeToWallTime(pEvent->GetStartTime());
828 endTime = ResourceManager::ConvertUtcTimeToWallTime(pEvent->GetEndTime());
830 int rightColumn = col + 1;
831 while (rightColumn < maxColumns)
833 bool compareNextColumn = true;
836 CalEventInstance* pRightEvent = static_cast<CalEventInstance*>(pEnum[rightColumn]->GetCurrent());
837 if (pRightEvent != null)
839 if (startTime >= ResourceManager::ConvertUtcTimeToWallTime(pRightEvent->GetEndTime()))
843 else if (endTime <= ResourceManager::ConvertUtcTimeToWallTime(pRightEvent->GetStartTime()))
849 compareNextColumn = false;
853 } while (pEnum[rightColumn]->MoveNext() == E_SUCCESS);
855 if (compareNextColumn == false)
862 DayEventButton* pButton = new (std::nothrow) DayEventButton();
863 pButton->Initialize(W_TIME_LINE + col * contentWidth / maxColumns, (rightColumn - col) * contentWidth / maxColumns,
864 *pEvent, __date, __pPm->GetCalendarColor(pEvent->GetCalendarId()));
865 __pPanelDayEvents->AddControl(pButton);
866 __eventButtons.Add(pButton);
867 if (__pEventActionEventListener != null)
869 pButton->SetEventActionEventListener(*__pEventActionEventListener);
873 if (col + 1 < maxEventColumns)
875 pEnum[col + 1]->Reset();
877 for (int nextCol = col + 2; nextCol < maxEventColumns; ++nextCol)
879 pEnum[nextCol]->Reset();
880 pEnum[nextCol]->MoveNext();
884 // Create more button
885 if (maxColumns > MAX_COLUMN_COUNT)
887 DayEventMoreButton* pButton = new (std::nothrow) DayEventMoreButton();
888 pButton->Initialize(W_TIME_LINE + MAX_COLUMN_COUNT * contentWidth / maxColumns, contentWidth / maxColumns, __date);
889 pEnum[MAX_COLUMN_COUNT]->Reset();
890 while (pEnum[MAX_COLUMN_COUNT]->MoveNext() == E_SUCCESS)
892 pButton->AddEvent(*static_cast<CalEventInstance*>(pEnum[MAX_COLUMN_COUNT]->GetCurrent()));
894 __pPanelDayEvents->AddControl(pButton);
895 __eventButtons.Add(pButton);
898 for (int col = 0; col < maxColumns; ++col)
901 eventColumns[col].RemoveAll(false);
907 DayEventPanel::InitializeAllDayEventList(void)
909 Button* pButton = new (std::nothrow) Button();
910 pButton->Construct(Rectangle(0, 0, __pPanelAllDayEvents->GetWidth(), H_ALL_DAY_EVENT_EXPAND),
911 ResourceManager::GetString(IDS_DAY_VIEW_ALL_DAY_EVENT));
912 pButton->SetActionId(IDA_DAY_PANEL_ALL_DAY_EVENT_EXPAND);
913 pButton->AddActionEventListener(*this);
914 pButton->SetNormalBackgroundBitmap(*ResourceManager::GetBlankBitmap());
915 pButton->SetPressedBackgroundBitmap(*ResourceManager::GetBlankBitmap());
916 pButton->SetHighlightedBackgroundBitmap(*ResourceManager::GetBlankBitmap());
917 pButton->SetTextSize(FONT_SIZE_ALL_DAY_EVENT_EXPAND);
918 pButton->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
919 pButton->SetTextColor(Color(COLOR_ALL_DAY_EVENT));
920 pButton->SetPressedTextColor(Color(COLOR_ALL_DAY_EVENT));
921 pButton->SetHighlightedTextColor(Color(COLOR_ALL_DAY_EVENT));
923 Bitmap* pBitmap = ResourceManager::GetBitmapN(IDB_ALL_DAY_EVENT_LIST_EXPAND_CLOSED);
926 Point position(pButton->GetWidth() - W_ALL_DAY_EVENT_EXPAND_ICON_MARGIN - pBitmap->GetWidth(),
927 (H_ALL_DAY_EVENT_EXPAND - pBitmap->GetHeight()) / 2);
928 pButton->SetNormalBitmap(position, *pBitmap);
931 Bitmap* pPressBitmap = ResourceManager::GetBitmapN(IDB_ALL_DAY_EVENT_LIST_EXPAND_CLOSED_PRESS);
932 if (pPressBitmap != null)
934 Point position(pButton->GetWidth() - W_ALL_DAY_EVENT_EXPAND_ICON_MARGIN - pPressBitmap->GetWidth(),
935 (H_ALL_DAY_EVENT_EXPAND - pPressBitmap->GetHeight()) / 2);
936 pButton->SetPressedBitmap(position, *pPressBitmap);
939 __pPanelAllDayEvents->AddControl(pButton);
940 __pButtonAllDayEventsPanelExpander = pButton;
942 ListView* pListView = new (std::nothrow) ListView();
943 pListView->Construct(Rectangle(0, Y_ALL_DAY_EVENT_LIST, __pPanelAllDayEvents->GetWidth(), H_ALL_DAY_EVENT_ITEM), true, SCROLL_STYLE_FADE_OUT);
944 pListView->SetItemProvider(*this);
945 pListView->SetItemDividerColor(Color(COLOR_ALL_DAY_EVENT_LIST_LINE));
946 pListView->AddListViewItemEventListener(*this);
947 __pPanelAllDayEvents->AddControl(pListView);
948 __pListViewAllDayEvents = pListView;
950 RelativeLayout* pLayout = dynamic_cast<RelativeLayout*>(__pPanelAllDayEvents->GetLayoutN());
953 pLayout->SetHorizontalFitPolicy(*__pButtonAllDayEventsPanelExpander, FIT_POLICY_PARENT);
954 pLayout->SetRelation(*__pButtonAllDayEventsPanelExpander, __pPanelAllDayEvents, RECT_EDGE_RELATION_LEFT_TO_LEFT);
955 pLayout->SetRelation(*__pButtonAllDayEventsPanelExpander, __pPanelAllDayEvents, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
956 pLayout->SetRelation(*__pButtonAllDayEventsPanelExpander, __pPanelAllDayEvents, RECT_EDGE_RELATION_TOP_TO_TOP);
957 pLayout->SetHeight(*__pButtonAllDayEventsPanelExpander, H_ALL_DAY_EVENT_EXPAND);
958 pLayout->SetHorizontalFitPolicy(*__pListViewAllDayEvents, FIT_POLICY_PARENT);
959 pLayout->SetRelation(*__pListViewAllDayEvents, __pPanelAllDayEvents, RECT_EDGE_RELATION_LEFT_TO_LEFT);
960 pLayout->SetRelation(*__pListViewAllDayEvents, __pPanelAllDayEvents, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
961 pLayout->SetRelation(*__pListViewAllDayEvents, __pPanelAllDayEvents, RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM);
962 pLayout->SetRelation(*__pListViewAllDayEvents, __pButtonAllDayEventsPanelExpander, RECT_EDGE_RELATION_TOP_TO_BOTTOM);
969 DayEventPanel::InitializeTimeLine(void)
971 SettingInfo::GetValue(KEY_SYSTEM_24_HOUR_NOTATION_ENABLED, __is24HourEnabled);
972 for (int t = 1; t < TIME_LINE_COUNT; ++t)
975 time.Format(3, L"%02d", (__is24HourEnabled == true) ? t : (t - 1) % AMPM_TIME_COUNT + 1);
977 __pLabelTime[t] = new (std::nothrow) Label();
978 __pLabelTime[t]->Construct(Rectangle(X_TIME_LINE_NUMBER, H_EVENT_LIST_ITEM * t - H_TIME_LINE_NUMBER / 2, W_TIME_LINE_NUMBER, H_TIME_LINE_NUMBER),
980 __pLabelTime[t]->SetTextConfig(FONT_SIZE_TIME_LINE_NUMBER, LABEL_TEXT_STYLE_NORMAL);
981 __pLabelTime[t]->SetTextColor(Color(COLOR_TIME_LINE_NUMBER));
982 __pPanelDayEvents->AddControl(__pLabelTime[t]);
985 __pLabelAm = new (std::nothrow) Label();
986 __pLabelAm->Construct(Rectangle(X_TIME_LINE_AMPM, 0, W_TIME_LINE_AMPM, H_TIME_LINE_AMPM),
987 ResourceManager::GetAmPmString(true));
988 __pLabelAm->SetTextConfig(FONT_SIZE_TIME_LINE_AMPM, LABEL_TEXT_STYLE_NORMAL);
989 __pLabelAm->SetTextColor(Color(COLOR_TIME_LINE_AMPM));
990 __pPanelDayEvents->AddControl(__pLabelAm);
991 __pLabelAm->SetShowState(__is24HourEnabled == false);
993 __pLabelPm = new (std::nothrow) Label();
994 __pLabelPm->Construct(Rectangle(X_TIME_LINE_AMPM, H_EVENT_LIST_ITEM * AMPM_TIME_COUNT + H_TIME_LINE_NUMBER / 2, W_TIME_LINE_AMPM, H_TIME_LINE_AMPM),
995 ResourceManager::GetAmPmString(false));
996 __pLabelPm->SetTextConfig(FONT_SIZE_TIME_LINE_AMPM, LABEL_TEXT_STYLE_NORMAL);
997 __pLabelPm->SetTextColor(Color(COLOR_TIME_LINE_AMPM));
998 __pPanelDayEvents->AddControl(__pLabelPm);
999 __pLabelPm->SetShowState(__is24HourEnabled == false);
1001 // Draw current time
1002 Dimension size = GetSize();
1003 size.height = H_TIME_LINE;
1004 Label* pLabelTimeLine = new (std::nothrow) Label();
1005 int currentPosition = (__date.GetHour() * MINUTES_FOR_HOUR + __date.GetMinute()) * H_EVENT_LIST_ITEM / MINUTES_FOR_HOUR;
1006 pLabelTimeLine->Construct(Rectangle(0, currentPosition - size.height / 2, size.width, size.height), L"");
1008 Bitmap* pBitmap = new (std::nothrow) Bitmap();
1009 pBitmap->Construct(size, BITMAP_PIXEL_FORMAT_ARGB8888);
1011 BufferInfo bufferinfo;
1012 pBitmap->Lock(bufferinfo);
1015 canvas.Construct(bufferinfo);
1016 canvas.SetBackgroundColor(Color(COLOR_EVENT_PANEL_BACKGROUND));
1018 canvas.FillRectangle(Color(COLOR_CURRENT_TIME_LINE),
1019 Rectangle(W_TIME_LINE, (size.height - H_CURRENT_TIME_LINE) / 2,
1020 size.width - W_TIME_LINE, H_CURRENT_TIME_LINE));
1022 Bitmap* pArrowBitmap = ResourceManager::GetBitmapN(IDB_DAY_CURRENT_TIME);
1023 if (pArrowBitmap != null)
1025 canvas.DrawBitmap(Rectangle(X_CURRENT_TIME_ARROW, (size.height - pArrowBitmap->GetHeight()) / 2,
1026 pArrowBitmap->GetWidth(), pArrowBitmap->GetHeight()), *pArrowBitmap);
1027 delete pArrowBitmap;
1030 pLabelTimeLine->SetBackgroundBitmap(*pBitmap);
1033 __pPanelDayEvents->AddControl(pLabelTimeLine);
1034 __pLabelCurrent = pLabelTimeLine;
1035 __pPanelDayEvents->SetControlAlwaysAtBottom(*__pLabelCurrent, true);
1036 __pPanelDayEvents->SetScrollPosition(currentPosition - __pPanelDayEvents->GetHeight() / 2);
1039 __pListViewTimeLine = new (std::nothrow) ListView();
1040 __pListViewTimeLine->Construct(Rectangle(W_TIME_LINE, 0,
1041 GetWidth() - W_TIME_LINE, H_EVENT_LIST_ITEM * TIME_LINE_COUNT),
1042 false, SCROLL_STYLE_FADE_OUT);
1043 __pListViewTimeLine->SetItemProvider(__timeLineItemProvider);
1044 __pListViewTimeLine->AddListViewItemEventListener(*this);
1045 __pPanelDayEvents->AddControl(__pListViewTimeLine);
1051 DayEventPanel::ExpandAllDayEventList(void)
1053 Bitmap* pBitmap = ResourceManager::GetBitmapN(IDB_ALL_DAY_EVENT_LIST_EXPAND_OPENED);
1054 if (pBitmap != null)
1056 Point position(__pButtonAllDayEventsPanelExpander->GetWidth() - W_ALL_DAY_EVENT_EXPAND_ICON_MARGIN - pBitmap->GetWidth(),
1057 (H_ALL_DAY_EVENT_EXPAND - pBitmap->GetHeight()) / 2);
1058 __pButtonAllDayEventsPanelExpander->SetNormalBitmap(position, *pBitmap);
1061 Bitmap* pPressBitmap = ResourceManager::GetBitmapN(IDB_ALL_DAY_EVENT_LIST_EXPAND_OPENED_PRESS);
1062 if (pPressBitmap != null)
1064 Point position(__pButtonAllDayEventsPanelExpander->GetWidth() - W_ALL_DAY_EVENT_EXPAND_ICON_MARGIN - pPressBitmap->GetWidth(),
1065 (H_ALL_DAY_EVENT_EXPAND - pPressBitmap->GetHeight()) / 2);
1066 __pButtonAllDayEventsPanelExpander->SetPressedBitmap(position, *pPressBitmap);
1067 delete pPressBitmap;
1069 __pButtonAllDayEventsPanelExpander->SetActionId(IDA_DAY_PANEL_ALL_DAY_EVENT_COLLAPSE);
1071 int height = GetItemCount() * H_ALL_DAY_EVENT_ITEM + H_ALL_DAY_EVENT_EXPAND;
1072 __pPanelAllDayEvents->SetSize(GetWidth(), (height > MAX_H_ALL_DAY_EVENT_LIST_PANEL) ? MAX_H_ALL_DAY_EVENT_LIST_PANEL : height);
1073 __pPanelAllDayEvents->Invalidate(true);
1078 DayEventPanel::CollapseAllDayEventList(void)
1080 Bitmap* pBitmap = ResourceManager::GetBitmapN(IDB_ALL_DAY_EVENT_LIST_EXPAND_CLOSED);
1081 if (pBitmap != null)
1083 Point position(__pButtonAllDayEventsPanelExpander->GetWidth() - W_ALL_DAY_EVENT_EXPAND_ICON_MARGIN - pBitmap->GetWidth(),
1084 (H_ALL_DAY_EVENT_EXPAND - pBitmap->GetHeight()) / 2);
1085 __pButtonAllDayEventsPanelExpander->SetNormalBitmap(position, *pBitmap);
1088 Bitmap* pPressBitmap = ResourceManager::GetBitmapN(IDB_ALL_DAY_EVENT_LIST_EXPAND_CLOSED_PRESS);
1089 if (pPressBitmap != null)
1091 Point position(__pButtonAllDayEventsPanelExpander->GetWidth() - W_ALL_DAY_EVENT_EXPAND_ICON_MARGIN - pPressBitmap->GetWidth(),
1092 (H_ALL_DAY_EVENT_EXPAND - pPressBitmap->GetHeight()) / 2);
1093 __pButtonAllDayEventsPanelExpander->SetPressedBitmap(position, *pPressBitmap);
1094 delete pPressBitmap;
1096 __pButtonAllDayEventsPanelExpander->SetActionId(IDA_DAY_PANEL_ALL_DAY_EVENT_EXPAND);
1097 __pPanelAllDayEvents->SetSize(GetWidth(), MIN_H_ALL_DAY_EVENT_LIST_PANEL);
1098 __pPanelAllDayEvents->Invalidate(true);
1103 DayPanel::DayPanel(void)
1105 , __pPanningAnimationManager(null)
1106 , __pGoToDatePopup(null)
1108 memset((void *)__pPanelDayEvent, 0, sizeof(Panel*) * VIEW_SCROLL_EFFECT_COUNT);
1111 DayPanel::~DayPanel(void)
1116 DayPanel::Initialize(void)
1118 static const int _MIN_SIZE = 1;
1119 return Construct(Rectangle(0, 0, _MIN_SIZE, _MIN_SIZE));
1123 DayPanel::OnInitializing(void)
1125 AppLogDebug("Enter");
1126 __pPm = EventListPresentationModel::GetInstance();
1128 Form* pForm = dynamic_cast<Form*>(GetParent());
1129 AppAssertf(pForm != null, "[E_FAILURE] Unable to get Form.");
1131 Rectangle bounds = pForm->GetClientAreaBounds();
1136 // Create panning animation manager
1137 __pPanningAnimationManager = new (std::nothrow) PanningAnimationManager();
1138 __pPanningAnimationManager->Initialize(bounds, *this);
1139 __pPanningAnimationManager->SetPanningAnimationEventListener(*this);
1140 AddControl(__pPanningAnimationManager);
1142 DayEventPanel* pPanel = new (std::nothrow) DayEventPanel();
1143 pPanel->Initialize(bounds, __pPm->GetCurrentDate(), *__pPm);
1144 pPanel->SetEventActionEventListener(*this);
1145 __pPanningAnimationManager->AddView(*pPanel, VIEW_SCROLL_EFFECT_CURRENT);
1146 pPanel->SetDateFocusEventListener(*this);
1147 pPanel->SetScrollEventListener(*this);
1148 __pPanelDayEvent[VIEW_SCROLL_EFFECT_CURRENT] = pPanel;
1150 __pGoToDatePopup = new (std::nothrow) GoToDatePopup();
1151 __pGoToDatePopup->Initialize();
1157 DayPanel::OnTerminating(void)
1159 AppLogDebug("Enter");
1160 __pPm->RemoveCalendarEventChangedEventListener(*this);
1161 __pPm->RemoveCurrentDateChangedEventListener(*this);
1163 if (__pGoToDatePopup)
1165 __pGoToDatePopup->Destroy();
1172 DayPanel::OnUserEventReceivedN(RequestId requestId, IList* pArgs)
1176 case IDA_MAIN_FORM_HEADER_TODAY:
1177 __pPanningAnimationManager->CancelPanningAnimationEvent();
1178 __pPm->SetTodayToCurrentDate();
1180 case IDA_SUB_MENU_GO_TO_DATE:
1181 __pGoToDatePopup->RequestPopup(__pPm->GetCurrentDate(), this);
1183 case IDA_MAIN_FORM_FOOTER_CREATE:
1185 LinkedList* pArgs = new (std::nothrow) LinkedList();
1186 pArgs->Add(new (std::nothrow) DateTime(__pPm->GetCurrentDate()));
1187 SceneManager::GetInstance()->GoForward(ForwardSceneTransition(IDSCN_EVENT_EDITOR,
1188 SCENE_TRANSITION_ANIMATION_TYPE_LEFT), pArgs);
1191 case IDA_SUB_MENU_DELETE:
1192 SceneManager::GetInstance()->GoForward(ForwardSceneTransition(IDSCN_EVENT_DELETER,
1193 SCENE_TRANSITION_ANIMATION_TYPE_LEFT));
1195 case IDA_SUB_MENU_SEARCH:
1196 SceneManager::GetInstance()->GoForward(ForwardSceneTransition(IDSCN_EVENT_SEARCHER,
1197 SCENE_TRANSITION_ANIMATION_TYPE_LEFT));
1199 case IDA_SUB_MENU_CALENDARS:
1200 SceneManager::GetInstance()->GoForward(ForwardSceneTransition(IDSCN_CALENDAR_LIST,
1201 SCENE_TRANSITION_ANIMATION_TYPE_LEFT));
1203 case IDA_SUB_MENU_SETTING:
1204 SceneManager::GetInstance()->GoForward(ForwardSceneTransition(IDSCN_SETTING,
1205 SCENE_TRANSITION_ANIMATION_TYPE_LEFT));
1207 case IDA_VIEW_MENU_YEAR:
1208 SceneManager::GetInstance()->GoForward(ForwardSceneTransition(IDSCN_YEAR,
1209 SCENE_TRANSITION_ANIMATION_TYPE_LEFT,
1210 SCENE_HISTORY_OPTION_NO_HISTORY));
1212 case IDA_VIEW_MENU_MONTH:
1213 SceneManager::GetInstance()->GoForward(ForwardSceneTransition(IDSCN_MONTH,
1214 SCENE_TRANSITION_ANIMATION_TYPE_LEFT,
1215 SCENE_HISTORY_OPTION_NO_HISTORY));
1217 case IDA_VIEW_MENU_LIST:
1218 SceneManager::GetInstance()->GoForward(ForwardSceneTransition(IDSCN_LIST,
1219 SCENE_TRANSITION_ANIMATION_TYPE_LEFT,
1220 SCENE_HISTORY_OPTION_NO_HISTORY));
1222 case IDA_GO_TO_DATE_POPUP_DONE:
1224 DateTime selectedDate = *static_cast<DateTime*>(pArgs->GetAt(0));
1225 DateTime currentDate = __pPm->GetCurrentDate();
1226 currentDate.SetValue(selectedDate.GetYear(), selectedDate.GetMonth(), selectedDate.GetDay(), currentDate.GetHour(), currentDate.GetMinute());
1227 __pPm->SetCurrentDate(currentDate);
1234 pArgs->RemoveAll(true);
1240 DayPanel::OnScrollEndReached(Control& source, ScrollEndEvent type)
1245 DayPanel::OnScrollPositionChanged(Control& source, int scrollPos)
1247 for (int i = VIEW_SCROLL_EFFECT_CURRENT; i < VIEW_SCROLL_EFFECT_COUNT; ++i)
1249 if (&source != __pPanelDayEvent[i] && __pPanelDayEvent[i] != null)
1251 static_cast<DayEventPanel*>(__pPanelDayEvent[i])->SetScrollPosition(scrollPos);
1257 DayPanel::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId& currentSceneId, IList* pArgs)
1259 AppLogDebug("Enter.");
1262 pArgs->RemoveAll(true);
1266 __pPm->SetViewType(VIEW_TYPE_DAILY);
1267 DayEventPanel* pCurrent = static_cast<DayEventPanel*>(__pPanelDayEvent[VIEW_SCROLL_EFFECT_CURRENT]);
1268 if (EventListPresentationModel::IsSameDay(pCurrent->GetDate(), __pPm->GetCurrentDate()))
1270 pCurrent->UpdateEvent();
1273 DateTime maxDateTime = Calendarbook::GetMaxDateTime();
1274 maxDateTime.AddYears(-1);
1275 DateTime minDateTime = Calendarbook::GetMinDateTime();
1276 minDateTime.AddYears(1);
1277 for (int i = VIEW_SCROLL_EFFECT_NEXT; i < VIEW_SCROLL_EFFECT_COUNT; ++i)
1279 if (!__pPanelDayEvent[i])
1281 DayEventPanel* pPanel = new (std::nothrow) DayEventPanel();
1282 DateTime date = __pPm->GetCurrentDate();
1285 case VIEW_SCROLL_EFFECT_NEXT:
1287 if (date > maxDateTime)
1289 DateTime minDate = minDateTime;
1290 date.SetValue(minDate.GetYear(), minDate.GetMonth(), minDate.GetDay(), date.GetHour(), date.GetMinute());
1292 pPanel->Initialize(Rectangle(0, 0, GetWidth(), GetHeight()), date, *__pPm);
1294 case VIEW_SCROLL_EFFECT_PREVIEW:
1296 if (date < minDateTime)
1298 DateTime maxDate = maxDateTime;
1299 date.SetValue(maxDate.GetYear(), maxDate.GetMonth(), maxDate.GetDay(), date.GetHour(), date.GetMinute());
1301 pPanel->Initialize(Rectangle(0, 0, GetWidth(), GetHeight()), date, *__pPm);
1304 pPanel->SetEventActionEventListener(*this);
1305 __pPanningAnimationManager->AddView(*pPanel, (ViewScrollEffect)i);
1306 pPanel->SetDateFocusEventListener(*this);
1307 pPanel->SetScrollEventListener(*this);
1308 __pPanelDayEvent[i] = pPanel;
1312 static_cast<DayEventPanel*>(__pPanelDayEvent[i])->UpdateEvent();
1316 __pPm->AddCalendarEventChangedEventListener(*this);
1317 __pPm->AddCurrentDateChangedEventListener(*this);
1319 __pPanningAnimationManager->ResetPosition();
1322 AppLogDebug("Exit.");
1326 DayPanel::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId& nextSceneId)
1328 AppLogDebug("Enter.");
1329 __pPm->RemoveCalendarEventChangedEventListener(*this);
1330 __pPm->RemoveCurrentDateChangedEventListener(*this);
1332 if (nextSceneId == IDSCN_YEAR || nextSceneId == IDSCN_MONTH || nextSceneId == IDSCN_LIST)
1334 __pPanningAnimationManager->RemoveView(VIEW_SCROLL_EFFECT_NEXT);
1335 __pPanelDayEvent[VIEW_SCROLL_EFFECT_NEXT] = null;
1336 __pPanningAnimationManager->RemoveView(VIEW_SCROLL_EFFECT_PREVIEW);
1337 __pPanelDayEvent[VIEW_SCROLL_EFFECT_PREVIEW] = null;
1342 DayPanel::OnCalendarEventChanged(void)
1344 AppLogDebug("Enter.");
1345 static_cast<DayEventPanel*>(__pPanelDayEvent[VIEW_SCROLL_EFFECT_CURRENT])->UpdateEvent();
1346 static_cast<DayEventPanel*>(__pPanelDayEvent[VIEW_SCROLL_EFFECT_NEXT])->UpdateEvent();
1347 static_cast<DayEventPanel*>(__pPanelDayEvent[VIEW_SCROLL_EFFECT_PREVIEW])->UpdateEvent();
1351 DayPanel::OnCurrentDateChanged(const DateTime& currentDate, const DateTime& prevDate)
1353 AppLogDebug("Enter.");
1354 DateTime currentCalendarDate = static_cast<DayEventPanel*>(__pPanelDayEvent[VIEW_SCROLL_EFFECT_CURRENT])->GetDate();
1355 Update(!EventListPresentationModel::IsSameDay(currentDate, currentCalendarDate));
1356 AppLogDebug("Exit.");
1360 DayPanel::OnDateFocused(const DateTime& focusedDate)
1362 __pPanningAnimationManager->CancelPanningAnimationEvent();
1365 LinkedList* pArgs = new (std::nothrow) LinkedList();
1366 DateTime* pDateTime = new (std::nothrow) DateTime(focusedDate);
1367 pDateTime->AddMinutes(-1);
1368 pArgs->Add(pDateTime);
1369 result r = SceneManager::GetInstance()->GoForward(ForwardSceneTransition(IDSCN_EVENT_EDITOR,
1370 SCENE_TRANSITION_ANIMATION_TYPE_LEFT), pArgs);
1373 pArgs->RemoveAll(true);
1379 DayPanel::OnEventActionPerformed(const CalEventInstance& event, EventAction actionId)
1381 if (actionId == EVENT_ACTION_SELECTION)
1383 __pPanningAnimationManager->CancelPanningAnimationEvent();
1386 LinkedList* pArgs = new (std::nothrow) LinkedList();
1387 pArgs->Add(new (std::nothrow) CalEventInstance(event));
1388 result r = SceneManager::GetInstance()->GoForward(ForwardSceneTransition(IDSCN_EVENT_DETAILS,
1389 SCENE_TRANSITION_ANIMATION_TYPE_LEFT), pArgs);
1392 pArgs->RemoveAll(true);
1399 DayPanel::GetCurrentControl(void)
1401 return __pPanelDayEvent[VIEW_SCROLL_EFFECT_CURRENT];
1405 DayPanel::GetNextControl(void)
1407 return __pPanelDayEvent[VIEW_SCROLL_EFFECT_NEXT];
1411 DayPanel::GetPreviewControl(void)
1413 return __pPanelDayEvent[VIEW_SCROLL_EFFECT_PREVIEW];
1417 DayPanel::OnPanningAnimationEnded(ViewScrollEffect direction)
1419 DateTime maxDateTime = Calendarbook::GetMaxDateTime();
1420 maxDateTime.AddYears(-1);
1421 DateTime minDateTime = Calendarbook::GetMinDateTime();
1422 minDateTime.AddYears(1);
1423 if (__pPanelDayEvent[VIEW_SCROLL_EFFECT_NEXT] != null && __pPanelDayEvent[VIEW_SCROLL_EFFECT_PREVIEW] != null)
1425 if (direction == VIEW_SCROLL_EFFECT_PREVIEW)
1427 DayEventPanel* pPanel = static_cast<DayEventPanel*>(__pPanelDayEvent[VIEW_SCROLL_EFFECT_NEXT]);
1428 DateTime date = __pPm->GetCurrentDate();
1430 if (date < minDateTime)
1432 DateTime maxDate = maxDateTime;
1433 date.SetValue(maxDate.GetYear(), maxDate.GetMonth(), maxDate.GetDay(), date.GetHour(), date.GetMinute());
1435 pPanel->SetDate(date);
1436 pPanel->RequestRedraw(false);
1438 __pPanelDayEvent[VIEW_SCROLL_EFFECT_NEXT] = __pPanelDayEvent[VIEW_SCROLL_EFFECT_CURRENT];
1439 __pPanelDayEvent[VIEW_SCROLL_EFFECT_CURRENT] = __pPanelDayEvent[VIEW_SCROLL_EFFECT_PREVIEW];
1440 __pPanelDayEvent[VIEW_SCROLL_EFFECT_PREVIEW] = pPanel;
1442 else if (direction == VIEW_SCROLL_EFFECT_NEXT)
1444 DayEventPanel* pPanel = static_cast<DayEventPanel*>(__pPanelDayEvent[VIEW_SCROLL_EFFECT_PREVIEW]);
1445 DateTime date = __pPm->GetCurrentDate();
1447 if (date > maxDateTime)
1449 DateTime minDate = minDateTime;
1450 date.SetValue(minDate.GetYear(), minDate.GetMonth(), minDate.GetDay(), date.GetHour(), date.GetMinute());
1452 pPanel->SetDate(date);
1453 pPanel->RequestRedraw(false);
1455 __pPanelDayEvent[VIEW_SCROLL_EFFECT_PREVIEW] = __pPanelDayEvent[VIEW_SCROLL_EFFECT_CURRENT];
1456 __pPanelDayEvent[VIEW_SCROLL_EFFECT_CURRENT] = __pPanelDayEvent[VIEW_SCROLL_EFFECT_NEXT];
1457 __pPanelDayEvent[VIEW_SCROLL_EFFECT_NEXT] = pPanel;
1460 __pPm->SetCurrentDate(static_cast<DayEventPanel*>(__pPanelDayEvent[VIEW_SCROLL_EFFECT_CURRENT])->GetDate());
1464 DayPanel::DrawCurrentDate(void)
1466 Form* pForm = dynamic_cast<Form*>(GetParent());
1469 Header* pHeader = pForm->GetHeader();
1470 if (pHeader != null)
1472 pHeader->SetTitleText(__pPm->GetDateString(__pPm->GetCurrentDate()));
1473 pHeader->Invalidate(false);
1479 DayPanel::DrawEvents(void)
1481 DayEventPanel* pPanel = static_cast<DayEventPanel*>(__pPanelDayEvent[VIEW_SCROLL_EFFECT_CURRENT]);
1482 DateTime date = pPanel->GetDate();
1483 pPanel->SetDate(__pPm->GetCurrentDate());
1485 DateTime maxDateTime = Calendarbook::GetMaxDateTime();
1486 maxDateTime.AddYears(-1);
1487 DateTime minDateTime = Calendarbook::GetMinDateTime();
1488 minDateTime.AddYears(1);
1490 DayEventPanel* pNextPanel = static_cast<DayEventPanel*>(__pPanelDayEvent[VIEW_SCROLL_EFFECT_NEXT]);
1491 if (pNextPanel != null)
1493 date = pNextPanel->GetDate();
1494 DateTime nextDate = __pPm->GetCurrentDate();
1495 nextDate.AddDays(1);
1496 if (nextDate > maxDateTime)
1498 DateTime minDate = minDateTime;
1499 nextDate.SetValue(minDate.GetYear(), minDate.GetMonth(), minDate.GetDay(), nextDate.GetHour(), nextDate.GetMinute());
1501 pNextPanel->SetDate(nextDate);
1504 DayEventPanel* pPrevPanel = static_cast<DayEventPanel*>(__pPanelDayEvent[VIEW_SCROLL_EFFECT_PREVIEW]);
1505 if (pPrevPanel != null)
1507 date = pPrevPanel->GetDate();
1508 DateTime prevDate = __pPm->GetCurrentDate();
1509 prevDate.AddDays(-1);
1510 if (prevDate < minDateTime)
1512 DateTime maxDate = maxDateTime;
1513 prevDate.SetValue(maxDate.GetYear(), maxDate.GetMonth(), maxDate.GetDay(), prevDate.GetHour(), prevDate.GetMinute());
1515 pPrevPanel->SetDate(prevDate);
1520 DayPanel::Update(bool draw)
1527 __pPanelDayEvent[VIEW_SCROLL_EFFECT_CURRENT]->Invalidate(true);
1528 if (__pPanelDayEvent[VIEW_SCROLL_EFFECT_NEXT] != null)
1530 __pPanelDayEvent[VIEW_SCROLL_EFFECT_NEXT]->RequestRedraw(false);
1532 if (__pPanelDayEvent[VIEW_SCROLL_EFFECT_PREVIEW] != null)
1534 __pPanelDayEvent[VIEW_SCROLL_EFFECT_PREVIEW]->RequestRedraw(false);