calendarui/views/dayview/src/calendaycontentwidget.cpp
changeset 75 7ac58b2aae6f
parent 63 a3cb48f6c889
equal deleted inserted replaced
72:27feeedec790 75:7ac58b2aae6f
    15  *
    15  *
    16  */
    16  */
    17 
    17 
    18 // System includes
    18 // System includes
    19 #include <QGraphicsLinearLayout>
    19 #include <QGraphicsLinearLayout>
    20 #include <HbModelIterator>
       
    21 
    20 
    22 // User includes
    21 // User includes
    23 #include "calendaymodelmanager.h"
       
    24 #include "calendaycontentwidget.h"
    22 #include "calendaycontentwidget.h"
    25 #include "calendayitemview.h"
    23 #include "calendayitemview.h"
    26 #include "calendaycontentscrollarea.h"
       
    27 
    24 
    28 /*!
    25 /*!
    29  \class CalenDayContentWidget
    26  \class CalenDayContentWidget
    30  \brief Content widget is a container class for horizontal layouted widgets.
    27  \brief Content widget is a container class for horizontal layouted widgets.
    31  */
    28  */
    32 
    29 
    33 /*!
    30 /*!
    34  \brief Constructor
    31  \brief Constructor
    35  
    32  
    36  \param modelManager Day View model manager
       
    37  \param parent The parent of central widget
    33  \param parent The parent of central widget
    38  */
    34  */
    39 CalenDayContentWidget::CalenDayContentWidget(
    35 CalenDayContentWidget::CalenDayContentWidget(QGraphicsItem *parent) :
    40     CalenDayModelManager &modelManager,
    36     HbWidget(parent), mLayout(NULL)
    41     QGraphicsItem *parent) :
       
    42     HbWidget(parent), mLayout(NULL), mModelManager(modelManager)
       
    43 {
    37 {
    44     mWidgets.clear();
    38     mWidgets.clear();
    45     initializeViews();
       
    46 }
    39 }
    47 
    40 
    48 /*!
    41 /*!
    49  \brief Destructor
    42  \brief Destructor
    50  */
    43  */
    60  Ownership of item is passed to CalenDayContentWidget.
    53  Ownership of item is passed to CalenDayContentWidget.
    61  
    54  
    62  \param item Widget to be added
    55  \param item Widget to be added
    63  \param where Place where widget should be added (as first/last item)
    56  \param where Place where widget should be added (as first/last item)
    64  */
    57  */
    65 void CalenDayContentWidget::add(HbWidget* item, CalenWidgetPosition where)
    58 void CalenDayContentWidget::add(HbWidget *item, CalenWidgetPosition where)
    66 {
    59 {
    67     // Create linear, horizontal layout if not exist
    60     if (item) {
    68     if (!mLayout) {
    61         // Create linear, horizontal layout if not exist
    69         mLayout = new QGraphicsLinearLayout(Qt::Horizontal, NULL);
    62         if (!mLayout) {
    70         mLayout->setContentsMargins(0.0, 0.0, 0.0, 0.0);
    63             mLayout = new QGraphicsLinearLayout(Qt::Horizontal, NULL);
    71         mLayout->setSpacing(0.0);
    64             mLayout->setContentsMargins(0.0, 0.0, 0.0, 0.0);
    72     }
    65             mLayout->setSpacing(0.0);
       
    66         }
    73 
    67 
    74     switch (where) {
    68         switch (where) {
    75         case ECalenFirstWidget: {
    69             case ECalenFirstWidget: {
    76             mLayout->insertItem(0, item);
    70                 mLayout->insertItem(0, item);
    77             mWidgets.insert(0, item);
    71                 mWidgets.insert(0, item);
    78             break;
    72                 break;
       
    73             }
       
    74             case ECalenLastWidget:
       
    75             default: {
       
    76                 mLayout->addItem(item);
       
    77                 mWidgets.append(item);
       
    78             }
    79         }
    79         }
    80         case ECalenLastWidget:
    80 
    81         default: {
    81         // If layout has no parent - apply it to central widget
    82             mLayout->addItem(item);
    82         if (mLayout && !mLayout->parentLayoutItem()) {
    83             mWidgets.append(item);
    83             setLayout(mLayout);
    84         }
    84         }
    85     }
       
    86 
       
    87     // If layout has no parent - apply it to central widget
       
    88     if (mLayout && !mLayout->parentLayoutItem()) {
       
    89         setLayout(mLayout);
       
    90     }
    85     }
    91 }
    86 }
    92 
    87 
    93 /*!
    88 /*!
    94  \brief Takes the widget and removes it from central widget.
    89  \brief Takes the widget and removes it from central widget.
    98  \param which Indicates which widget should be taken (first/last)
    93  \param which Indicates which widget should be taken (first/last)
    99  \return Pointer to HbWidget or NULL if widget was not found
    94  \return Pointer to HbWidget or NULL if widget was not found
   100  */
    95  */
   101 HbWidget* CalenDayContentWidget::take(CalenWidgetPosition which)
    96 HbWidget* CalenDayContentWidget::take(CalenWidgetPosition which)
   102 {
    97 {
   103     Q_ASSERT(mLayout);
    98     HbWidget *itemToTake = NULL;
       
    99     if (mWidgets.count() > 0) {
       
   100         switch (which) {
       
   101             case ECalenFirstWidget: {
       
   102                 itemToTake = mWidgets.takeFirst();
       
   103                 break;
       
   104             }
       
   105             case ECalenLastWidget: {
       
   106                 itemToTake = mWidgets.takeLast();
       
   107                 break;
       
   108             }
       
   109             default: {
       
   110                 // do nothing
       
   111             }
       
   112         }
   104 
   113 
   105     HbWidget* itemToTake = NULL;
   114         if (mLayout && itemToTake) {
   106     switch (which) {
   115             mLayout->removeItem(itemToTake);
   107         case ECalenFirstWidget: {
       
   108             itemToTake = mWidgets.takeFirst();
       
   109             break;
       
   110         }
   116         }
   111         case ECalenLastWidget:
       
   112         default: {
       
   113             itemToTake = mWidgets.takeLast();
       
   114         }
       
   115     }
       
   116 
       
   117     if (itemToTake) {
       
   118         mLayout->removeItem(itemToTake);
       
   119     }
   117     }
   120 
   118 
   121     return itemToTake;
   119     return itemToTake;
   122 }
   120 }
   123 
   121 
   128  
   126  
   129  \param which Indicates which widget should be removed (first/last)
   127  \param which Indicates which widget should be removed (first/last)
   130  */
   128  */
   131 void CalenDayContentWidget::remove(CalenWidgetPosition which)
   129 void CalenDayContentWidget::remove(CalenWidgetPosition which)
   132 {
   130 {
   133     Q_ASSERT(mLayout);
   131     HbWidget *itemToRemove = take(which);
   134 
       
   135     HbWidget* itemToRemove = NULL;
       
   136     switch (which) {
       
   137         case ECalenFirstWidget: {
       
   138             itemToRemove = mWidgets.takeFirst();
       
   139             break;
       
   140         }
       
   141         case ECalenLastWidget:
       
   142         default: {
       
   143             itemToRemove = mWidgets.takeLast();
       
   144         }
       
   145     }
       
   146 
       
   147     if (itemToRemove) {
   132     if (itemToRemove) {
   148         mLayout->removeItem(itemToRemove);
       
   149         delete itemToRemove;
   133         delete itemToRemove;
   150     }
   134     }
   151 }
   135 }
   152 
   136 
   153 /*!
   137 /*!
   161  
   145  
   162  \param scrollTo Direction of last movement
   146  \param scrollTo Direction of last movement
   163  */
   147  */
   164 void CalenDayContentWidget::relayoutWidgets(CalenScrollDirection scrollTo)
   148 void CalenDayContentWidget::relayoutWidgets(CalenScrollDirection scrollTo)
   165 {
   149 {
   166     HbWidget* widget = NULL;
   150     HbWidget *widget = NULL;
   167     switch (scrollTo) {
   151     switch (scrollTo) {
   168         case ECalenScrollToNext: {
   152         case ECalenScrollToNext: {
   169             widget = take(ECalenFirstWidget);
   153             widget = take(ECalenFirstWidget);
   170             add(widget, ECalenLastWidget);
   154             add(widget, ECalenLastWidget);
   171             break;
   155             break;
   172         }
   156         }
   173         case ECalenScrollToPrev:
   157         case ECalenScrollToPrev: {
   174         default: {
       
   175             widget = take(ECalenLastWidget);
   158             widget = take(ECalenLastWidget);
   176             add(widget, ECalenFirstWidget);
   159             add(widget, ECalenFirstWidget);
       
   160         }
       
   161         case ECalenScrollNoDayChange: 
       
   162         default: {
       
   163             // do nothing
   177         }
   164         }
   178     }
   165     }
   179     emit widgetsRelayoutFinished(scrollTo);
   166     emit widgetsRelayoutFinished(scrollTo);
   180 }
   167 }
   181 
   168 
   192         view->scrollVertically(newPos);
   179         view->scrollVertically(newPos);
   193     }
   180     }
   194     emit scrollPositionChanged(newPos);
   181     emit scrollPositionChanged(newPos);
   195 }
   182 }
   196 
   183 
   197 /*!
       
   198  \brief Initializes content widgets and adds them to layout.
       
   199  
       
   200  \param parent Parent object 
       
   201  */
       
   202 void CalenDayContentWidget::initializeViews()
       
   203 {
       
   204     // Create item views
       
   205     HbModelIterator *iterator(0);
       
   206 
       
   207     iterator = new HbModelIterator(&mModelManager.getModel(
       
   208         CalenDayModelManager::PreviousDay));
       
   209     CalenDayItemView *prevItemView = new CalenDayItemView(
       
   210         mModelManager.getServices(), iterator, 0);
       
   211 
       
   212     iterator = new HbModelIterator(&mModelManager.getModel(
       
   213         CalenDayModelManager::CurrentDay));
       
   214     CalenDayItemView *currItemView = new CalenDayItemView(
       
   215         mModelManager.getServices(), iterator, 0);
       
   216 
       
   217     iterator = new HbModelIterator(&mModelManager.getModel(
       
   218         CalenDayModelManager::NextDay));
       
   219     CalenDayItemView *nextItemView = new CalenDayItemView(
       
   220         mModelManager.getServices(), iterator, 0);
       
   221 
       
   222     // Connecting views with widgetScrolled SLOT 
       
   223     // to support simultanous vertical scrolling
       
   224     connect(prevItemView, SIGNAL(scrollPositionChanged(const QPointF&)), this,
       
   225         SLOT(widgetScrolled(const QPointF&)));
       
   226     connect(currItemView, SIGNAL(scrollPositionChanged(const QPointF&)), this,
       
   227         SLOT(widgetScrolled(const QPointF&)));
       
   228     connect(nextItemView, SIGNAL(scrollPositionChanged(const QPointF&)), this,
       
   229         SLOT(widgetScrolled(const QPointF&)));
       
   230 
       
   231     if (parentItem()) {
       
   232         // Install event filters to receive events necessary for gesture handling
       
   233         CalenDayContentScrollArea* scrollArea =
       
   234             static_cast<CalenDayContentScrollArea*> (parentItem());
       
   235         prevItemView->installEventFilter(scrollArea);
       
   236         currItemView->installEventFilter(scrollArea);
       
   237         nextItemView->installEventFilter(scrollArea);
       
   238     }
       
   239 
       
   240     // Add views to layout
       
   241     add(prevItemView);
       
   242     add(currItemView);
       
   243     add(nextItemView);
       
   244 }
       
   245 
       
   246 // End of File
   184 // End of File