summaryrefslogtreecommitdiffstats
path: root/src/imports/organizer/qdeclarativeorganizeritem.cpp
diff options
context:
space:
mode:
authorPengWu <peng.1.wu@nokia.com>2011-11-07 15:14:36 +0200
committerQt by Nokia <qt-info@nokia.com>2011-11-09 18:06:59 +0100
commitdbc780d63032f29db6d92814afa44910c69af63b (patch)
treeabf645816632d2aadabcb5c547266347b08155fb /src/imports/organizer/qdeclarativeorganizeritem.cpp
parentbfce0fbeb37befce200ba6c0d54d7ece558a3cba (diff)
Modify QDeclarativeOrganizerItem some Q_INVOKABLE functions to be virtual
Due to Qt meta-object limitation: Q_PROPERTY NOTIFY SIGNAL needs to be defined in that class and can not utilize base class signal. If the derived class objects call base class QDeclarativeOrganizerItem Q_INVOKABLE functions would not emit derived classs Q_PROPERTY notify signal, which breaks the property bindings of QML side. Modify them to be virtual so derived class could overide these functions and make sure Q_PROPERTY signals are emitted correctly. Change-Id: I83bfa0012247662ea2c712fadc250a12c5582599 Sanity-Review: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Xizhi Zhu <xizhi.zhu@nokia.com>
Diffstat (limited to 'src/imports/organizer/qdeclarativeorganizeritem.cpp')
-rw-r--r--src/imports/organizer/qdeclarativeorganizeritem.cpp142
1 files changed, 101 insertions, 41 deletions
diff --git a/src/imports/organizer/qdeclarativeorganizeritem.cpp b/src/imports/organizer/qdeclarativeorganizeritem.cpp
index 931e68e7e..189ca7f73 100644
--- a/src/imports/organizer/qdeclarativeorganizeritem.cpp
+++ b/src/imports/organizer/qdeclarativeorganizeritem.cpp
@@ -316,26 +316,8 @@ QVariantList QDeclarativeOrganizerItem::details(int type)
*/
void QDeclarativeOrganizerItem::setDetail(QDeclarativeOrganizerItemDetail *detail)
{
- if (!detail)
- return;
-
- bool found(false);
- int key = detail->detail().key();
- foreach (QDeclarativeOrganizerItemDetail *itemDetail, m_details) {
- if (key == itemDetail->detail().key()) {
- itemDetail->setDetail(detail->detail());
- found = true;
- }
- }
-
- if (!found) {
- QDeclarativeOrganizerItemDetail *itemDetail = QDeclarativeOrganizerItemDetailFactory::createItemDetail(detail->type());
- itemDetail->setDetail(detail->detail());
- m_details.append(itemDetail);
- }
-
- m_modified = true;
- emit itemChanged();
+ if (_q_setDetail(detail))
+ emit itemChanged();
}
/*!
@@ -345,21 +327,7 @@ void QDeclarativeOrganizerItem::setDetail(QDeclarativeOrganizerItemDetail *detai
*/
void QDeclarativeOrganizerItem::removeDetail(QDeclarativeOrganizerItemDetail *detail)
{
- if (!detail->removable())
- return;
-
- int key = detail->detail().key();
- int i = 0;
- bool removed = false;
- foreach (QDeclarativeOrganizerItemDetail *itemDetail, m_details) {
- if (key == itemDetail->detail().key()) {
- delete itemDetail;
- m_details.removeAt(i);
- removed = true;
- }
- ++i;
- }
- if (removed)
+ if (_q_removeDetail(detail))
emit itemChanged();
}
@@ -372,13 +340,8 @@ void QDeclarativeOrganizerItem::removeDetail(QDeclarativeOrganizerItemDetail *de
*/
void QDeclarativeOrganizerItem::clearDetails()
{
- if (!m_details.empty()) {
- foreach (QDeclarativeOrganizerItemDetail *detail, m_details)
- delete detail;
- m_details.clear();
- m_modified = true;
+ if (_q_clearDetails())
emit itemChanged();
- }
}
/*!
@@ -485,6 +448,68 @@ int QDeclarativeOrganizerItem::_q_detail_count(QDeclarativeListProperty<QDeclara
return 0;
}
+/*!
+ \internal
+ */
+bool QDeclarativeOrganizerItem::_q_removeDetail(QDeclarativeOrganizerItemDetail *detail)
+{
+ if (!detail->removable())
+ return false;
+
+ int key = detail->detail().key();
+ int i = 0;
+ bool removed = false;
+ foreach (QDeclarativeOrganizerItemDetail *itemDetail, m_details) {
+ if (key == itemDetail->detail().key()) {
+ delete itemDetail;
+ m_details.removeAt(i);
+ removed = true;
+ }
+ ++i;
+ }
+ return removed;
+}
+
+/*!
+ \internal
+ */
+bool QDeclarativeOrganizerItem::_q_setDetail(QDeclarativeOrganizerItemDetail *detail)
+{
+ if (!detail)
+ return false;
+
+ bool found(false);
+ int key = detail->detail().key();
+ foreach (QDeclarativeOrganizerItemDetail *itemDetail, m_details) {
+ if (key == itemDetail->detail().key()) {
+ itemDetail->setDetail(detail->detail());
+ found = true;
+ }
+ }
+ if (!found) {
+ QDeclarativeOrganizerItemDetail *itemDetail = QDeclarativeOrganizerItemDetailFactory::createItemDetail(detail->type());
+ itemDetail->setDetail(detail->detail());
+ m_details.append(itemDetail);
+ }
+ m_modified = true;
+ return true;
+}
+
+/*!
+ \internal
+ */
+bool QDeclarativeOrganizerItem::_q_clearDetails()
+{
+ bool ret = false;
+ if (!m_details.empty()) {
+ foreach (QDeclarativeOrganizerItemDetail *detail, m_details)
+ delete detail;
+ m_details.clear();
+ m_modified = true;
+ ret = true;
+ }
+ return ret;
+}
// to be removed
/*!
@@ -635,6 +660,41 @@ QDeclarativeOrganizerEvent::QDeclarativeOrganizerEvent(QObject *parent)
}
/*!
+ \qmlmethod void Event::setDetail(detail)
+
+ Saves the given \a detail in the organizer event, and sets its id.
+ */
+void QDeclarativeOrganizerEvent::setDetail(QDeclarativeOrganizerItemDetail *detail)
+{
+ if (_q_setDetail(detail))
+ emit valueChanged();
+}
+
+/*!
+ \qmlmethod void Event::removeDetail(detail)
+
+ Removes given \a detail from the organizer event.
+ */
+void QDeclarativeOrganizerEvent::removeDetail(QDeclarativeOrganizerItemDetail *detail)
+{
+ if (_q_removeDetail(detail))
+ emit valueChanged();
+}
+
+/*!
+ \qmlmethod Event::clearDetails()
+
+ Removes all details from the organizer event.
+
+ \sa Event::removeDetail()
+ */
+void QDeclarativeOrganizerEvent::clearDetails()
+{
+ if (_q_clearDetails())
+ emit valueChanged();
+}
+
+/*!
\qmlproperty bool Event::allDay
This property indicates whether the time-of-day component of the event's start date-time or end date-time is