calendarui/views/dayview/inc/calendaycontainer.h
author hgs
Mon, 09 Aug 2010 18:30:52 +0530
changeset 57 bb2d3e476f29
parent 55 2c54b51f39c4
child 83 5aadd1120515
permissions -rw-r--r--
201031

/*
 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
 * which accompanies this distribution, and is available
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
 *
 * Initial Contributors:
 * Nokia Corporation - initial contribution.
 *
 * Contributors:
 *
 * Description:  Day view container - parent widget for events (CalenDayItem) and
 * hours area widgets (CalenDayEventsPane)
 * Responsible for positioning and resizing events widgets.
 *
 */

#ifndef CALENDAYCONTAINER_H
#define CALENDAYCONTAINER_H

// System includes
#include <QDateTime>
#include "../../../../../mw/hb/src/hbwidgets/itemviews/hbabstractitemcontainer_p.h"

// Forward declarations
class CalenDayInfo;
class TouchEventAbsorber;

// Class declaration
class CalenDayContainer : public HbAbstractItemContainer
{
    Q_OBJECT

public:
    CalenDayContainer(QGraphicsItem *parent = 0);
    ~CalenDayContainer();

    void itemAdded(int index, HbAbstractViewItem *item, bool animate);
    void itemRemoved(HbAbstractViewItem *item, bool animate);
    void reset();
    void viewResized(const QSizeF &size);

    void setDayInfo(CalenDayInfo* dayInfo);
    CalenDayInfo* dayInfo();
    void setDate(const QDate &date);
    const QDate &date() const;

public slots:
    void orientationChanged(Qt::Orientation orientation);

protected:
    HbAbstractViewItem * createDefaultPrototype() const;
    void setItemModelIndex(HbAbstractViewItem *item, const QModelIndex &index);

    void updateTimedEventGeometry(
        HbAbstractViewItem *item,
        const QModelIndex &index);
    void updateAllDayEventGeometry(
        HbAbstractViewItem *item,
        const QModelIndex &index);

    /*!
     \class LayoutValues
     \brief Structure with event layout values.
     
     eventAreaX X value for event area start.
     eventAreaWidth The width of event area.
     eventMargin Margins between the multiple events.
     slotHeight Half hour slot's height.
     unitInPixels No. of pixels in 1un
     maxColumns Max. no. of touchable overlapping timed events
     */
    class LayoutValues
    {
    public:
        LayoutValues() :
            eventAreaX(0), eventAreaWidth(0), eventMargin(0), slotHeight(0),
                unitInPixels(0), maxColumns(0)
        {
        }

        qreal eventAreaX;
        qreal eventAreaWidth;
        qreal eventMargin;
        qreal slotHeight;
        qreal unitInPixels;
        int maxColumns;
    };

    void getTimedEventLayoutValues(LayoutValues& layoutValues);
    void createTouchEventAbsorbers();
    TouchEventAbsorber* crateAbsorberBetweenSlots(
        int startSlot,
        int endSlot,
        bool forAllDayEvents);

private:
    bool mGeometryUpdated;  //!< Indicates if geometry needs to be updated
    CalenDayInfo* mInfo; //!< Day event info. Not owned.
    LayoutValues mLayoutValues; //!< Keeps layout values, see LayoutValues class
    QList<TouchEventAbsorber*> mAbsorbers; //!< Keeps needed touch absorbers
    QDate mDate; //!< Keeps date currently associated with this container
};



/*!
 \class TouchEventAbsorber
 \brief TouchEventAbsorber objects are used to catch touch events.
 \brief Used when event widgets are to small (see UI spec.) 
 */
class TouchEventAbsorber : public HbWidget
{
    Q_OBJECT
    
public:
    TouchEventAbsorber(QGraphicsItem *parent = 0);
    ~TouchEventAbsorber();
    
protected:
    void gestureEvent(QGestureEvent *event);

#ifdef _DEBUG
    void paint(
        QPainter *painter,
        const QStyleOptionGraphicsItem *option,
        QWidget *widget);
#endif       
};

#endif // CALENDAYCONTAINER_H
// End of File