diff options
author | PengWu <peng.1.wu@nokia.com> | 2011-11-07 15:14:36 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-11-09 18:06:59 +0100 |
commit | dbc780d63032f29db6d92814afa44910c69af63b (patch) | |
tree | abf645816632d2aadabcb5c547266347b08155fb /src/imports/organizer/qdeclarativeorganizeritem.cpp | |
parent | bfce0fbeb37befce200ba6c0d54d7ece558a3cba (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.cpp | 142 |
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 |