homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsarrangestate.cpp
changeset 36 cdae8c6c3876
parent 35 f9ce957a272c
child 39 4e8ebe173323
equal deleted inserted replaced
35:f9ce957a272c 36:cdae8c6c3876
    16  */
    16  */
    17 
    17 
    18 #include <QDebug>
    18 #include <QDebug>
    19 #include <hblistwidget.h>
    19 #include <hblistwidget.h>
    20 #include <hbdialog.h>
    20 #include <hbdialog.h>
       
    21 #include <HbDocumentLoader>
    21 #include <hblabel.h>
    22 #include <hblabel.h>
    22 #include <hbaction.h>
    23 #include <hbaction.h>
    23 #include <hsmenuservice.h>
    24 #include <hsmenuservice.h>
    24 #include <hblistwidgetitem.h>
    25 #include <hblistwidgetitem.h>
    25 #include <hbinstance.h>
    26 #include <hbinstance.h>
    50  Destructor
    51  Destructor
    51  \retval void
    52  \retval void
    52  */
    53  */
    53 HsArrangeState::~HsArrangeState()
    54 HsArrangeState::~HsArrangeState()
    54 {
    55 {
    55     if (mEntriesList) {
       
    56         delete mEntriesList;
       
    57     }
       
    58     if (mDialog) {
    56     if (mDialog) {
    59         delete mDialog;
    57         delete mDialog;
    60     }
    58     }
    61     if (mItemModel) {
    59     if (mItemModel) {
    62         delete mItemModel;
    60         delete mItemModel;
    72     setObjectName("homescreen.nokia.com/state/arrangestate");
    70     setObjectName("homescreen.nokia.com/state/arrangestate");
    73     connect(this, SIGNAL(exited()),SLOT(stateExited()));
    71     connect(this, SIGNAL(exited()),SLOT(stateExited()));
    74     HSMENUTEST_FUNC_EXIT("HsArrangeState::construct");
    72     HSMENUTEST_FUNC_EXIT("HsArrangeState::construct");
    75 }
    73 }
    76 
    74 
    77 // ---------------------------------------------------------------------------
    75 /*!
    78 // ---------------------------------------------------------------------------
    76   Send data to storage (selected applications in collection).
    79 //
    77   \param listWidget List of items to be stored. 
    80 void HsArrangeState::save()
    78  */
       
    79 void HsArrangeState::save(const HbListWidget& listWidget)
    81 {
    80 {
    82     qDebug("HsArrangeState::save()");
    81     qDebug("HsArrangeState::save()");
    83     HSMENUTEST_FUNC_ENTRY("HsArrangeState::save");
    82     HSMENUTEST_FUNC_ENTRY("HsArrangeState::save");
    84 
    83 
    85     getArrangedEntriesIds();
    84     getArrangedEntriesIds(listWidget);
    86     if (mArrangedCollIdList.count() == mCollIdList.count()) {
    85     if (mArrangedCollIdList.count() == mCollIdList.count()) {
    87         for (int i(0); i < mArrangedCollIdList.count(); i++) {
    86         for (int i(0); i < mArrangedCollIdList.count(); i++) {
    88             if (mArrangedCollIdList.at(i) != mCollIdList.at(i)) {
    87             if (mArrangedCollIdList.at(i) != mCollIdList.at(i)) {
    89                 HsMenuService::organizeCollection(
    88                 HsMenuService::organizeCollection(
    90                     HsMenuService::allCollectionsId(), mArrangedCollIdList);
    89                     HsMenuService::allCollectionsId(), mArrangedCollIdList);
   110     HsMenuEvent *menuEvent = static_cast<HsMenuEvent *>(event);
   109     HsMenuEvent *menuEvent = static_cast<HsMenuEvent *>(event);
   111     QVariantMap data = menuEvent->data();
   110     QVariantMap data = menuEvent->data();
   112 
   111 
   113     mTopItemId = data.value(itemIdKey()).toInt();
   112     mTopItemId = data.value(itemIdKey()).toInt();
   114 
   113 
   115     mItemModel = HsMenuService::getAllCollectionsModel();
   114     HbDocumentLoader loader;
   116 
   115     bool loadStatusOk = false;
   117     mEntriesList = new HbListWidget();
   116     mObjectList = 
   118     fulfillEntriesList();
   117         loader.load(HS_ARRANGE_DIALOG_LAYOUT, &loadStatusOk);
   119 
   118     Q_ASSERT_X(loadStatusOk,
   120     mEntriesList->scrollTo(mTopModelIndex,
   119         HS_ARRANGE_DIALOG_LAYOUT,
   121                            HbAbstractItemView::PositionAtTop);
   120            "Error while loading docml file.");
   122     mEntriesList->setArrangeMode(true);
   121     
   123 
   122     mEntriesList = qobject_cast<HbListWidget*>(
   124     mDialog = new HbDialog();
   123         loader.findWidget(HS_ARRANGE_LIST_NAME));
   125     mDialog->setDismissPolicy(HbPopup::NoDismiss);
   124     
   126     mDialog->setTimeout(HbPopup::NoTimeout);
   125     mDialog = qobject_cast<HbDialog*>(
   127 
   126             loader.findWidget(HS_ARRANGE_DIALOG_NAME));
   128     mDialog->setPreferredSize(
   127 
   129         HbInstance::instance()->allMainWindows().at(0)->size());
   128     
   130 
   129     if (mEntriesList != NULL && mDialog != NULL) {
   131     HbLabel *label = new HbLabel(hbTrId("txt_applib_title_arrange"));
   130 
   132     mDialog->setHeadingWidget(label);
   131         mItemModel = HsMenuService::getAllCollectionsModel();
   133     mDialog->setContentWidget(mEntriesList);
   132         
   134 
   133         fulfillEntriesList(*mEntriesList);
   135     mDialog->setPrimaryAction(new HbAction(hbTrId("txt_common_button_ok"),
   134     
   136                                            mDialog));
   135         mEntriesList->scrollTo(mTopModelIndex,
   137 
   136                                HbAbstractItemView::PositionAtTop);
   138     HbAction *result = mDialog->exec();
   137     
   139     mEntriesList->setArrangeMode(false);
   138         mEntriesList->setArrangeMode(true);
   140     if (result == mDialog->primaryAction()) {
   139     
   141         save();
   140         mDialog->setTimeout(HbPopup::NoTimeout);
   142     }
   141     
   143     delete result;
   142         mDialog->setPreferredSize(
   144     result = NULL;
   143             HbInstance::instance()->allMainWindows().at(0)->size());
   145 
   144     
       
   145         HbAction const* action(mDialog->exec());
       
   146         
       
   147         mEntriesList->setArrangeMode(false);
       
   148         
       
   149         if (action == mDialog->primaryAction()) {
       
   150             save(*mEntriesList);
       
   151         }
       
   152     }    
   146     HSMENUTEST_FUNC_EXIT("HsArrangeState::onEntry");
   153     HSMENUTEST_FUNC_EXIT("HsArrangeState::onEntry");
   147 }
   154 }
   148 #ifdef COVERAGE_MEASUREMENT
   155 #ifdef COVERAGE_MEASUREMENT
   149 #pragma CTC ENDSKIP
   156 #pragma CTC ENDSKIP
   150 #endif //COVERAGE_MEASUREMENT
   157 #endif //COVERAGE_MEASUREMENT
   153 //
   160 //
   154 void HsArrangeState::stateExited()
   161 void HsArrangeState::stateExited()
   155 {
   162 {
   156     HSMENUTEST_FUNC_ENTRY("HsArrangeState::stateExited");
   163     HSMENUTEST_FUNC_ENTRY("HsArrangeState::stateExited");
   157 
   164 
   158     mDialog->setHeadingWidget(0); //delete label
   165     qDeleteAll(mObjectList);
   159     mDialog->setContentWidget(0); //delete mEntriesList
   166     mObjectList.clear();
       
   167     
   160     mEntriesList = NULL;
   168     mEntriesList = NULL;
   161     delete mDialog;
       
   162     mDialog = NULL;
   169     mDialog = NULL;
   163     delete mItemModel;
   170     delete mItemModel;
   164     mItemModel = NULL;
   171     mItemModel = NULL;
   165 
   172 
   166     mArrangedCollIdList.clear();
   173     mArrangedCollIdList.clear();
   168 
   175 
   169     HSMENUTEST_FUNC_EXIT("HsArrangeState::stateExited");
   176     HSMENUTEST_FUNC_EXIT("HsArrangeState::stateExited");
   170     qDebug("HsArrangeState::stateExited()");
   177     qDebug("HsArrangeState::stateExited()");
   171 }
   178 }
   172 
   179 
   173 // ---------------------------------------------------------------------------
   180 
   174 // ---------------------------------------------------------------------------
   181 /*!
   175 //
   182  Put items from model into arrangable list of items represented by \a listWidget
   176 void HsArrangeState::fulfillEntriesList()
   183   \param listWidget Object to be filled with list of items from model.
       
   184  */
       
   185 void HsArrangeState::fulfillEntriesList(HbListWidget& listWidget)
   177 {
   186 {
   178     qDebug() << "HsArrangeState::fulfillEntriesList";
   187     qDebug() << "HsArrangeState::fulfillEntriesList";
   179 
   188 
   180     mTopModelIndex = QModelIndex();
   189     mTopModelIndex = QModelIndex();
   181     for (int i(0); i < mItemModel->rowCount(); i++) {
   190     for (int i(0); i < mItemModel->rowCount(); i++) {
   188         widgetItem->setData(mItemModel->data(idx, Qt::DisplayRole),
   197         widgetItem->setData(mItemModel->data(idx, Qt::DisplayRole),
   189                             Qt::DisplayRole);
   198                             Qt::DisplayRole);
   190         widgetItem->setData(mItemModel->data(idx, Qt::DecorationRole),
   199         widgetItem->setData(mItemModel->data(idx, Qt::DecorationRole),
   191                             Qt::DecorationRole);
   200                             Qt::DecorationRole);
   192 
   201 
   193         mEntriesList->addItem(widgetItem);
   202         listWidget.addItem(widgetItem);
   194         if (mTopItemId == itemId) {
   203         if (mTopItemId == itemId) {
   195             mEntriesList->indexCount();
   204             listWidget.indexCount();
   196             mEntriesList->setCurrentItem(widgetItem);
   205             listWidget.setCurrentItem(widgetItem);
   197             mTopModelIndex = mEntriesList->currentIndex();
   206             mTopModelIndex = listWidget.currentIndex();
   198         }
   207         }
   199     }
   208     }
   200 }
   209 }
   201 
   210 
   202 // ---------------------------------------------------------------------------
   211 
   203 // ---------------------------------------------------------------------------
   212 /*!
   204 //
   213  Copy items in from \a listWidget to arranged collection id list
   205 void HsArrangeState::getArrangedEntriesIds()
   214  \param listWidget List of items in the requested order.
   206 {
   215  */
   207     for (int i(0); i < mEntriesList->count(); i++) {
   216 void HsArrangeState::getArrangedEntriesIds(const HbListWidget& listWidget)
   208         HbListWidgetItem *widgetItem = mEntriesList->item(i);
   217 {
       
   218     for (int i(0); i < listWidget.count(); ++i) {
       
   219         HbListWidgetItem *widgetItem = listWidget.item(i);
   209         QVariant entryId = widgetItem->data(CaItemModel::IdRole);
   220         QVariant entryId = widgetItem->data(CaItemModel::IdRole);
   210         mArrangedCollIdList.append(entryId.toInt());
   221         mArrangedCollIdList.append(entryId.toInt());
   211     }
   222     }
   212 }
   223 }