calendarui/views/dayview/src/calendayitem.cpp
changeset 58 ef813d54df51
parent 50 579cc610882e
child 68 a5a1242fd2e8
equal deleted inserted replaced
50:579cc610882e 58:ef813d54df51
    26 
    26 
    27 //User inlcudes
    27 //User inlcudes
    28 #include "calendayitem.h"
    28 #include "calendayitem.h"
    29 #include "calendaystatusstrip.h"
    29 #include "calendaystatusstrip.h"
    30 #include "calendaymodel.h"
    30 #include "calendaymodel.h"
    31 
    31 #include "calendayutils.h"
    32 // -----------------------------------------------------------------------------
    32 #include "calenagendautils.h"
    33 // CalenDayItem()
    33 #include "calendaycontainer.h"
    34 // Constructor.
    34 
    35 // -----------------------------------------------------------------------------
    35 /*!
    36 //
    36    \brief Constructor.
    37 CalenDayItem::CalenDayItem():
    37 */
    38     mUpdated(false), mBg(0), mEventDesc(0), mColorStripe(0), 
    38 CalenDayItem::CalenDayItem(const CalenDayContainer *container):
       
    39     mContainer(container), mUpdated(false), mBg(0), mEventDesc(0), mColorStripe(0), 
    39     mEventDescMinWidth(0.0), mFrameMinWidth(0.0)
    40     mEventDescMinWidth(0.0), mFrameMinWidth(0.0)
    40 {
    41 {
    41 }
    42 }
    42 
    43 
    43 // -----------------------------------------------------------------------------
    44 /*!
    44 // CalenBCDayView()
    45    \brief Constructor.
    45 // Copy constructor.
    46 */
    46 // -----------------------------------------------------------------------------
       
    47 //
       
    48 CalenDayItem::CalenDayItem(const CalenDayItem & source) :
    47 CalenDayItem::CalenDayItem(const CalenDayItem & source) :
    49     HbAbstractViewItem(source), mUpdated(false), mBg(0), mEventDesc(0), 
    48     HbAbstractViewItem(source), mContainer(source.container()), mUpdated(false), mBg(0), mEventDesc(0), 
    50     mColorStripe(0), mEventDescMinWidth(0.0), mFrameMinWidth(0.0)
    49     mColorStripe(0), mEventDescMinWidth(0.0), mFrameMinWidth(0.0)
    51 {	
    50 {
    52     // TODO: "qtg_fr_btn_pressed" need to replaced with qtg_fr_cal_meeting_bg
    51     // TODO: "qtg_fr_btn_pressed" need to replaced with qtg_fr_cal_meeting_bg
    53 	// when available
    52 	// when available
    54     mBg = new HbFrameItem("qtg_fr_btn_pressed", HbFrameDrawer::NinePieces, this);
    53     mBg = new HbFrameItem("qtg_fr_btn_pressed", HbFrameDrawer::NinePieces, this);
    55     mEventDesc = new HbTextItem(this);
    54     mEventDesc = new HbTextItem(this);
    56     // TODO: probably ElideLeft needed for mirrored layout
    55     // TODO: probably ElideLeft needed for mirrored layout
    80     mEventDescMinWidth = mFrameMinWidth + rightMargin;//smallest width for which text can be displayed
    79     mEventDescMinWidth = mFrameMinWidth + rightMargin;//smallest width for which text can be displayed
    81     
    80     
    82     //Minimum width is assured by widgetml and css
    81     //Minimum width is assured by widgetml and css
    83     //additionally called here to prevent minimum size hint caching inside effectiveSizeHint
    82     //additionally called here to prevent minimum size hint caching inside effectiveSizeHint
    84     setMinimumWidth(stripeWidth);
    83     setMinimumWidth(stripeWidth);
    85 }
    84 
    86 
    85 }
    87 // -----------------------------------------------------------------------------
    86 
    88 // ~CalenDayItem()
    87 /*!
    89 // Destructor.
    88    \brief Destructor.
    90 // -----------------------------------------------------------------------------
    89 */
    91 //
       
    92 CalenDayItem::~CalenDayItem()
    90 CalenDayItem::~CalenDayItem()
    93 {
    91 {
    94 }
    92 }
    95 
    93 
    96 // -----------------------------------------------------------------------------
    94 /*!
    97 // 
    95    \brief Creates new instance of day item.
    98 // -----------------------------------------------------------------------------
    96    
    99 //
    97    \return New instance of day item.
       
    98 */
   100 HbAbstractViewItem * CalenDayItem::createItem()
    99 HbAbstractViewItem * CalenDayItem::createItem()
   101 {
   100 {
   102     CalenDayItem* newItem = new CalenDayItem(*this);
   101     CalenDayItem* newItem = new CalenDayItem(*this);
   103     return newItem;
   102     return newItem;
   104 }
   103 }
   105 
   104 
   106 
   105 
   107 // -----------------------------------------------------------------------------
   106 /*!
   108 // -----------------------------------------------------------------------------
   107    \brief Sets data to be displayed on item.
   109 //
   108 */
   110 void CalenDayItem::updateChildItems()
   109 void CalenDayItem::updateChildItems()
   111 {
   110 {
   112 	// there is no need to update items after creation
   111     // there is no need to update items after creation
   113 	if (!mUpdated)
   112     if (!mUpdated) {
   114 		{
   113         AgendaEntry entry;
   115 		AgendaEntry entry;
   114         entry = modelIndex().data(CalenDayEntry).value<AgendaEntry>();
   116 		entry = modelIndex().data( CalenDayEntry ).value<AgendaEntry>();
   115 
   117 		
   116 		bool isAllDayEvent = CalenAgendaUtils::isAlldayEvent(entry); 
   118 		bool isAllDayEvent = (entry.type() == AgendaEntry::TypeEvent)
   117 
   119 								&& !entry.isTimedEntry(); 
   118         setDescription(entry, isAllDayEvent);
   120 		
   119         setStatusStrip(entry, isAllDayEvent);
   121 		setDescription(entry, isAllDayEvent);
   120 
   122 		setStatusStrip(entry, isAllDayEvent);
   121         mUpdated = true;
   123 		
   122     }
   124 		mUpdated = true;
   123 
   125 		}
   124     //TODO: check if needed
   126 	
   125     //repolish(); 
   127 	//TODO: check if needed
   126     //HbAbstractViewItem::updateChildItems();
   128 	//repolish(); 
   127 }
   129 	//HbAbstractViewItem::updateChildItems();
   128 
   130 }
   129 
   131 
   130 /*!
   132 
   131    \brief Adds event description for the item.
   133 // -----------------------------------------------------------------------------
   132    
   134 // setDescription()
   133    \param entry An for which description needs to be displayed.
   135 // -----------------------------------------------------------------------------
   134    \param allDayEvent Flag that indicates whether an item is all day event
   136 //
   135 */
   137 void CalenDayItem::setDescription(const AgendaEntry &entry, bool allDayEvent)
   136 void CalenDayItem::setDescription(const AgendaEntry &entry, bool allDayEvent)
   138 {
   137 {
   139 	QString description(entry.summary());
   138 	QString description(entry.summary());
   140 	QString location(entry.location());
   139 	QString location(entry.location());
   141 	
   140 	
   177 
   176 
   178 /*!
   177 /*!
   179    \brief It set all needed things for status strip from Agenda Entry.
   178    \brief It set all needed things for status strip from Agenda Entry.
   180    
   179    
   181    \param entry Status Strip is created from Agenda Entry
   180    \param entry Status Strip is created from Agenda Entry
   182  */
   181 */
   183 void CalenDayItem::setStatusStrip(const AgendaEntry &entry, bool allDayEvent)
   182 void CalenDayItem::setStatusStrip(const AgendaEntry &entry, bool allDayEvent)
   184 {
   183 {
   185     QColor color = HbColorScheme::color("qtc_cal_month_current_day");
   184     QColor color = HbColorScheme::color("qtc_cal_month_current_day");
   186     mColorStripe->setColor(color);
   185     mColorStripe->setColor(color);
   187     
   186     
   188     if (!allDayEvent) {
   187     if (!allDayEvent) {
   189     	mColorStripe->setStartEndTime(entry.startTime().time(),
   188 
   190                                   entry.endTime().time());
   189         QDateTime startTime;
   191     } else {
   190         QDateTime endTime;
   192     	// This is workaround for displaying all-day events.
   191         QDateTime currentDateTime;
   193     	// Now for MS Outlook compability all-day events' start and end time is
   192         currentDateTime.setDate(container()->date());
   194     	// 00:00:00 and 00:00:00 next day respectively.
   193 
   195     	// To draw it correctly we need times like those visible for user in
   194         CalenDayUtils::instance()->getEventValidStartEndTime(startTime, endTime, entry,
   196     	// editor: 00:00:00 to 23:59:59 (the same day)
   195             currentDateTime);
   197     	mColorStripe->setStartEndTime(entry.startTime().time(),
   196 
   198     	                                  entry.endTime().time().addSecs(-1));
   197         mColorStripe->setStartEndTime(startTime.time(), endTime.time());
       
   198     }
       
   199     else {
       
   200         // This is workaround for displaying all-day events.
       
   201         // Now for MS Outlook compability all-day events' start and end time is
       
   202         // 00:00:00 and 00:00:00 next day respectively.
       
   203         // To draw it correctly we need times like those visible for user in
       
   204         // editor: 00:00:00 to 23:59:59 (the same day)
       
   205         mColorStripe->setStartEndTime(entry.startTime().time(), entry.endTime().time().addSecs(-1));
   199     }
   206     }
   200     
   207     
   201     switch (entry.status()) {
   208     switch (entry.status()) {
   202         case AgendaEntry::Confirmed:
   209         case AgendaEntry::Confirmed:
   203             mColorStripe->setDrawingStyle(CalenDayStatusStrip::Filled);
   210             mColorStripe->setDrawingStyle(CalenDayStatusStrip::Filled);
   212             mColorStripe->setDrawingStyle(CalenDayStatusStrip::Filled);
   219             mColorStripe->setDrawingStyle(CalenDayStatusStrip::Filled);
   213         break;
   220         break;
   214     }
   221     }
   215 }
   222 }
   216 
   223 
       
   224 /*!
       
   225    \brief Reimplemented from HbWidget. Handles resize event.
       
   226    
       
   227    \param event Instance of an event to be handled.
       
   228 */
   217 void CalenDayItem::resizeEvent(QGraphicsSceneResizeEvent *event)
   229 void CalenDayItem::resizeEvent(QGraphicsSceneResizeEvent *event)
   218 {
   230 {
   219     Q_UNUSED(event)
   231     Q_UNUSED(event)
   220 
   232 
   221     qreal width = rect().width();
   233     qreal width = rect().width();