hgwidgets_pub/hgcacheproxymodel_api/inc/hgcacheproxymodel.h
author hgs
Wed, 06 Oct 2010 14:53:41 +0300
changeset 20 a60f8b6b1d32
permissions -rw-r--r--
201039
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
20
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*  Version     : %version: 6 %
hgs
parents:
diff changeset
    17
*/
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
#ifndef HGCACHEPROXYMODEL_H_
hgs
parents:
diff changeset
    20
#define HGCACHEPROXYMODEL_H_
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#include <QAbstractItemModel>
hgs
parents:
diff changeset
    23
#include <QSortFilterProxyModel>
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
#include <hgwidgets/hgdataprovidermodel.h>
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
#ifdef BUILD_CACHEPROXYMODEL
hgs
parents:
diff changeset
    28
#define CACHEPROXYMODEL_EXPORT Q_DECL_EXPORT
hgs
parents:
diff changeset
    29
#else
hgs
parents:
diff changeset
    30
#define CACHEPROXYMODEL_EXPORT Q_DECL_IMPORT
hgs
parents:
diff changeset
    31
#endif
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
class HgBufferManager;
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
const int KDefaultCacheSize = 120;
hgs
parents:
diff changeset
    36
const int KDefaultCacheTreshold = 30;
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
class HgBufferManagerObserver
hgs
parents:
diff changeset
    39
{
hgs
parents:
diff changeset
    40
public:
hgs
parents:
diff changeset
    41
    enum HgRequestOrder {
hgs
parents:
diff changeset
    42
        HgRequestOrderAscending,
hgs
parents:
diff changeset
    43
        HgRequestOrderDescending
hgs
parents:
diff changeset
    44
    };   
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
    virtual void release(int start, int end) = 0;
hgs
parents:
diff changeset
    47
    virtual void request(int start, int end, HgRequestOrder order = HgRequestOrderAscending) = 0;  
hgs
parents:
diff changeset
    48
};
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
class CACHEPROXYMODEL_EXPORT HgCacheProxyModel : public QAbstractItemModel, public HgBufferManagerObserver, public HgDataProviderModelObserver
hgs
parents:
diff changeset
    51
{
hgs
parents:
diff changeset
    52
    Q_OBJECT
hgs
parents:
diff changeset
    53
public:
hgs
parents:
diff changeset
    54
    HgCacheProxyModel(QObject *parent = 0);
hgs
parents:
diff changeset
    55
    ~HgCacheProxyModel();   
hgs
parents:
diff changeset
    56
    
hgs
parents:
diff changeset
    57
    void setDataProvider(HgDataProviderModel *dataProvider, int cacheSize = KDefaultCacheSize, int cacheTreshold = KDefaultCacheTreshold);
hgs
parents:
diff changeset
    58
    HgDataProviderModel* DataProvider();
hgs
parents:
diff changeset
    59
    void resizeCache(int newSize, int newTreshold);
hgs
parents:
diff changeset
    60
    
hgs
parents:
diff changeset
    61
//from QAbstractItemModel
hgs
parents:
diff changeset
    62
    virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
hgs
parents:
diff changeset
    63
    virtual QModelIndex parent(const QModelIndex &child) const;
hgs
parents:
diff changeset
    64
    virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
hgs
parents:
diff changeset
    65
    virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
hgs
parents:
diff changeset
    66
    virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const;
hgs
parents:
diff changeset
    67
    virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
hgs
parents:
diff changeset
    68
    virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
hgs
parents:
diff changeset
    69
    virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
hgs
parents:
diff changeset
    70
    virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole);
hgs
parents:
diff changeset
    71
    virtual QMap<int, QVariant> itemData(const QModelIndex &index) const;
hgs
parents:
diff changeset
    72
    virtual bool setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles);
hgs
parents:
diff changeset
    73
    virtual QStringList mimeTypes() const;
hgs
parents:
diff changeset
    74
    virtual QMimeData *mimeData(const QModelIndexList &indexes) const;
hgs
parents:
diff changeset
    75
    virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent);
hgs
parents:
diff changeset
    76
    virtual Qt::DropActions supportedDropActions() const;
hgs
parents:
diff changeset
    77
    virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex());
hgs
parents:
diff changeset
    78
    virtual bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex());
hgs
parents:
diff changeset
    79
    virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
hgs
parents:
diff changeset
    80
    virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex());
hgs
parents:
diff changeset
    81
    virtual void fetchMore(const QModelIndex &parent);
hgs
parents:
diff changeset
    82
    virtual bool canFetchMore(const QModelIndex &parent) const;
hgs
parents:
diff changeset
    83
    virtual Qt::ItemFlags flags(const QModelIndex &index) const;
hgs
parents:
diff changeset
    84
    virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);
hgs
parents:
diff changeset
    85
    virtual QModelIndex buddy(const QModelIndex &index) const;
hgs
parents:
diff changeset
    86
    virtual QModelIndexList match(const QModelIndex &start, int role,
hgs
parents:
diff changeset
    87
                                  const QVariant &value, int hits = 1,
hgs
parents:
diff changeset
    88
                                  Qt::MatchFlags flags =
hgs
parents:
diff changeset
    89
                                  Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) const;
hgs
parents:
diff changeset
    90
    virtual QSize span(const QModelIndex &index) const;
hgs
parents:
diff changeset
    91
hgs
parents:
diff changeset
    92
// for sorting
hgs
parents:
diff changeset
    93
    Qt::CaseSensitivity sortCaseSensitivity() const;
hgs
parents:
diff changeset
    94
    void setSortCaseSensitivity(Qt::CaseSensitivity cs);
hgs
parents:
diff changeset
    95
    bool isSortLocaleAware() const;
hgs
parents:
diff changeset
    96
    void setSortLocaleAware(bool on);
hgs
parents:
diff changeset
    97
    int sortColumn() const;
hgs
parents:
diff changeset
    98
    Qt::SortOrder sortOrder() const;
hgs
parents:
diff changeset
    99
    bool dynamicSortFilter() const;
hgs
parents:
diff changeset
   100
    void setDynamicSortFilter(bool enable);
hgs
parents:
diff changeset
   101
    int sortRole() const;
hgs
parents:
diff changeset
   102
    void setSortRole(int role);
hgs
parents:
diff changeset
   103
hgs
parents:
diff changeset
   104
//for filtering
hgs
parents:
diff changeset
   105
    QRegExp filterRegExp() const;
hgs
parents:
diff changeset
   106
    void setFilterRegExp(const QRegExp &regExp);
hgs
parents:
diff changeset
   107
    int filterKeyColumn() const;
hgs
parents:
diff changeset
   108
    void setFilterKeyColumn(int column);
hgs
parents:
diff changeset
   109
    Qt::CaseSensitivity filterCaseSensitivity() const;
hgs
parents:
diff changeset
   110
    void setFilterCaseSensitivity(Qt::CaseSensitivity cs);
hgs
parents:
diff changeset
   111
    int filterRole() const;
hgs
parents:
diff changeset
   112
    void setFilterRole(int role);
hgs
parents:
diff changeset
   113
    
hgs
parents:
diff changeset
   114
public slots:
hgs
parents:
diff changeset
   115
    virtual bool submit();
hgs
parents:
diff changeset
   116
    virtual void revert();
hgs
parents:
diff changeset
   117
    
hgs
parents:
diff changeset
   118
public:
hgs
parents:
diff changeset
   119
//from HgBufferManagerObserver
hgs
parents:
diff changeset
   120
    virtual void release(int start, int end);
hgs
parents:
diff changeset
   121
    virtual void request(int start, int end, HgRequestOrder order = HgRequestOrderAscending);  
hgs
parents:
diff changeset
   122
    
hgs
parents:
diff changeset
   123
private:
hgs
parents:
diff changeset
   124
    int count()const;
hgs
parents:
diff changeset
   125
    QModelIndex mapToSource(const QModelIndex &index)const;
hgs
parents:
diff changeset
   126
    QModelIndex mapToSource(int row, int col) const;
hgs
parents:
diff changeset
   127
    int mapToDataProviderIndex(int myIndex) const;
hgs
parents:
diff changeset
   128
    int mapFromDataProviderIndex(int myIndex) const;
hgs
parents:
diff changeset
   129
    void releaseAll();
hgs
parents:
diff changeset
   130
    void setBufferPosition(int pos) const;
hgs
parents:
diff changeset
   131
    
hgs
parents:
diff changeset
   132
private slots:
hgs
parents:
diff changeset
   133
    void sourceColumnsAboutToBeInserted( const QModelIndex & parent, int start, int end);
hgs
parents:
diff changeset
   134
    void sourceColumnsAboutToBeMoved( const QModelIndex & sourceParent, int sourceStart, int sourceEnd, const QModelIndex & destinationParent, int destinationColumn );
hgs
parents:
diff changeset
   135
    void sourceColumnsAboutToBeRemoved( const QModelIndex & parent, int start, int end);
hgs
parents:
diff changeset
   136
    void sourceColumnsInserted( const QModelIndex & parent, int start, int end );
hgs
parents:
diff changeset
   137
    void sourceColumnsMoved( const QModelIndex & sourceParent, int sourceStart, int sourceEnd, const QModelIndex & destinationParent, int destinationColumn );
hgs
parents:
diff changeset
   138
    void sourceColumnsRemoved( const QModelIndex & parent, int start, int end );
hgs
parents:
diff changeset
   139
    void sourceDataChanged( const QModelIndex & topLeft, const QModelIndex & bottomRight );
hgs
parents:
diff changeset
   140
    void sourceHeaderDataChanged( Qt::Orientation orientation, int first, int last );
hgs
parents:
diff changeset
   141
    void sourceLayoutAboutToBeChanged();
hgs
parents:
diff changeset
   142
    void sourceLayoutChanged();
hgs
parents:
diff changeset
   143
    void sourceModelAboutToBeReset();
hgs
parents:
diff changeset
   144
    void sourceModelReset();
hgs
parents:
diff changeset
   145
    void sourceRowsAboutToBeInserted( const QModelIndex & parent, int start, int end );
hgs
parents:
diff changeset
   146
    void sourceRowsAboutToBeMoved( const QModelIndex & sourceParent, int sourceStart, int sourceEnd, const QModelIndex & destinationParent, int destinationRow );
hgs
parents:
diff changeset
   147
    void sourceRowsAboutToBeRemoved( const QModelIndex & parent, int start, int end );
hgs
parents:
diff changeset
   148
    void sourceRowsInserted( const QModelIndex & parent, int start, int end );
hgs
parents:
diff changeset
   149
    void sourceRowsMoved( const QModelIndex & sourceParent, int sourceStart, int sourceEnd, const QModelIndex & destinationParent, int destinationRow );
hgs
parents:
diff changeset
   150
    void sourceRowsRemoved( const QModelIndex & parent, int start, int end );
hgs
parents:
diff changeset
   151
    
hgs
parents:
diff changeset
   152
//from HgDataProviderModelObserver    
hgs
parents:
diff changeset
   153
public:
hgs
parents:
diff changeset
   154
    virtual void dataUpdated(int from, int to);
hgs
parents:
diff changeset
   155
    virtual bool isCached(int idx) const;
hgs
parents:
diff changeset
   156
    
hgs
parents:
diff changeset
   157
private:
hgs
parents:
diff changeset
   158
    HgBufferManager* mBufferManager;
hgs
parents:
diff changeset
   159
    QSortFilterProxyModel* mSortFilterProxyModel;
hgs
parents:
diff changeset
   160
    HgDataProviderModel* mDataProviderModel;
hgs
parents:
diff changeset
   161
    mutable bool mSupressBM;
hgs
parents:
diff changeset
   162
    mutable int mCurrentPos;
hgs
parents:
diff changeset
   163
};
hgs
parents:
diff changeset
   164
hgs
parents:
diff changeset
   165
#endif // HGCACHEPROXYMODEL_H_