37 Gets the width of device. |
37 Gets the width of device. |
38 |
38 |
39 \param parent The parent of scroll area widget |
39 \param parent The parent of scroll area widget |
40 */ |
40 */ |
41 CalenDayHourScrollArea::CalenDayHourScrollArea(QGraphicsItem *parent) : |
41 CalenDayHourScrollArea::CalenDayHourScrollArea(QGraphicsItem *parent) : |
42 HbScrollArea(parent), |
42 HbScrollArea(parent), mDateTime(QDateTime()) |
43 mDateTime(QDateTime()) |
|
44 { |
43 { |
|
44 // Grab pan gestures |
45 grabGesture(Qt::PanGesture); |
45 grabGesture(Qt::PanGesture); |
46 |
|
47 // Get width of hour elements and fix its size |
|
48 qreal hourElementWidth = CalenDayUtils::instance()->hourElementWidth(); |
|
49 |
46 |
50 // Create widget for hour elements |
47 // Create widget for hour elements |
51 HbWidget *hourWidget = new HbWidget(); |
48 HbWidget *hourWidget = new HbWidget(); |
52 |
49 |
53 // Create and insert hour elements into vertical layout |
50 // Create and insert hour elements into vertical layout |
54 QGraphicsLinearLayout* hourLayout = new QGraphicsLinearLayout(Qt::Vertical, |
51 QGraphicsLinearLayout* hourLayout = new QGraphicsLinearLayout(Qt::Vertical, |
55 NULL); |
52 NULL); |
56 for (int i = 0; i < 24; i++) { |
53 for (int i = 0; i < KCalenHoursInDay; i++) { |
57 CalenDayHourElement* element = new CalenDayHourElement(QTime(i, 0), |
54 CalenDayHourElement* element = new CalenDayHourElement(QTime(i, 0), |
58 this); |
55 this); |
59 hourLayout->addItem(element); |
56 hourLayout->addItem(element); |
60 mHourElements.append(element); |
57 mHourElements.append(element); |
61 } |
58 } |
62 hourLayout->setContentsMargins(0.0, 0.0, 0.0, 0.0); |
59 hourLayout->setContentsMargins(0.0, 0.0, 0.0, 0.0); |
63 hourLayout->setSpacing(0.0); |
60 hourLayout->setSpacing(0.0); |
64 |
|
65 // Fix the size of scroll area |
|
66 setMinimumWidth(hourElementWidth); |
|
67 setMaximumWidth(hourElementWidth); |
|
68 |
61 |
69 // Apply hour layout for new widget and set content widget to scroll area |
62 // Apply hour layout for new widget and set content widget to scroll area |
70 hourWidget->setLayout(hourLayout); |
63 hourWidget->setLayout(hourLayout); |
71 setContentWidget(hourWidget); |
64 setContentWidget(hourWidget); |
72 } |
65 } |
111 } |
104 } |
112 |
105 |
113 /*! |
106 /*! |
114 \brief Scroll view to given hour. |
107 \brief Scroll view to given hour. |
115 |
108 |
116 \param An hour In 24 hour format (0 - 23) |
109 \param An hour in 24 hour format (0 - 23) |
117 */ |
110 */ |
118 void CalenDayHourScrollArea::scrollToHour(int hour) |
111 void CalenDayHourScrollArea::scrollToHour(int hour) |
119 { |
112 { |
|
113 Q_ASSERT((hour > -1) && (hour < KCalenHoursInDay)); |
|
114 |
120 CalenDayHourElement *hourElement = mHourElements.at(hour); |
115 CalenDayHourElement *hourElement = mHourElements.at(hour); |
121 QRectF hourElementRect = hourElement->rect(); |
116 QRectF hourElementRect = hourElement->rect(); |
122 hourElementRect = hourElement->mapRectToParent(hourElementRect); |
117 hourElementRect = hourElement->mapRectToParent(hourElementRect); |
123 QPointF newPos = hourElementRect.topLeft(); |
118 QPointF newPos = hourElementRect.topLeft(); |
124 |
119 |
125 //Ensure that we won't scroll out of bound |
120 // Ensure that we won't scroll out of bound |
126 CalenDayHourElement *lastElement = mHourElements.last(); |
121 CalenDayHourElement *lastElement = mHourElements.last(); |
127 qreal bottomEdge = lastElement->mapRectToParent(lastElement->rect()).bottom(); |
122 qreal bottomEdge = lastElement->mapRectToParent(lastElement->rect()).bottom(); |
128 qreal viewHeight = rect().height(); |
123 qreal viewHeight = rect().height(); |
129 |
124 |
130 if(bottomEdge - newPos.y() < viewHeight){ |
125 if (bottomEdge - newPos.y() < viewHeight) { |
131 newPos.setY(bottomEdge - viewHeight); |
126 newPos.setY(bottomEdge - viewHeight); |
132 } |
127 } |
133 |
128 |
134 scrollContentsTo(newPos); |
129 scrollContentsTo(newPos); |
135 } |
130 } |