This file is indexed.

/usr/include/qgis/qgsbrowsermodel.h is in libqgis-dev 2.14.11+dfsg-3+deb9u1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/***************************************************************************
    qgsbrowsermodel.h
    ---------------------
    begin                : July 2011
    copyright            : (C) 2011 by Martin Dobias
    email                : wonder dot sk at gmail dot com
 ***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/
#ifndef QGSBROWSERMODEL_H
#define QGSBROWSERMODEL_H

#include <QAbstractItemModel>
#include <QIcon>
#include <QMimeData>
#include <QMovie>
#include <QFuture>
#include <QFutureWatcher>

#include "qgsdataitem.h"

/** \class QgsBrowserWatcher
 * \note not available in Python bindings
*/
class CORE_EXPORT QgsBrowserWatcher : public QFutureWatcher<QVector <QgsDataItem*> >
{
    Q_OBJECT

  public:
    QgsBrowserWatcher( QgsDataItem * item );
    ~QgsBrowserWatcher();

    QgsDataItem* item() const { return mItem; }

  signals:
    void finished( QgsDataItem* item, const QVector <QgsDataItem*>& items );

  private:
    QgsDataItem *mItem;
};

class CORE_EXPORT QgsBrowserModel : public QAbstractItemModel
{
    Q_OBJECT

  public:
    explicit QgsBrowserModel( QObject *parent = nullptr );
    ~QgsBrowserModel();

    enum ItemDataRole
    {
      PathRole = Qt::UserRole, /*!< Item path used to access path in the tree, see QgsDataItem::mPath */
      CommentRole = Qt::UserRole + 1, /*!< Item comment */
    };
    // implemented methods from QAbstractItemModel for read-only access

    /** Used by other components to obtain information about each item provided by the model.
      In many models, the combination of flags should include Qt::ItemIsEnabled and Qt::ItemIsSelectable. */
    virtual Qt::ItemFlags flags( const QModelIndex &index ) const override;

    /** Used to supply item data to views and delegates. Generally, models only need to supply data
      for Qt::DisplayRole and any application-specific user roles, but it is also good practice
      to provide data for Qt::ToolTipRole, Qt::AccessibleTextRole, and Qt::AccessibleDescriptionRole.
      See the Qt::ItemDataRole enum documentation for information about the types associated with each role. */
    virtual QVariant data( const QModelIndex &index, int role = Qt::DisplayRole ) const override;

    /** Provides views with information to show in their headers. The information is only retrieved
      by views that can display header information. */
    virtual QVariant headerData( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const override;

    /** Provides the number of rows of data exposed by the model. */
    virtual int rowCount( const QModelIndex &parent = QModelIndex() ) const override;

    /** Provides the number of columns of data exposed by the model. List models do not provide this function
      because it is already implemented in QAbstractListModel. */
    virtual int columnCount( const QModelIndex &parent = QModelIndex() ) const override;

    /** Returns the index of the item in the model specified by the given row, column and parent index. */
    virtual QModelIndex index( int row, int column, const QModelIndex & parent = QModelIndex() ) const override;

    QModelIndex findItem( QgsDataItem *item, QgsDataItem *parent = nullptr ) const;

    /** Returns the parent of the model item with the given index.
     * If the item has no parent, an invalid QModelIndex is returned.
     */
    virtual QModelIndex parent( const QModelIndex &index ) const override;

    /** Returns a list of mime that can describe model indexes */
    virtual QStringList mimeTypes() const override;

    /** Returns an object that contains serialized items of data corresponding to the list of indexes specified */
    virtual QMimeData * mimeData( const QModelIndexList &indexes ) const override;

    /** Handles the data supplied by a drag and drop operation that ended with the given action */
    virtual bool dropMimeData( const QMimeData * data, Qt::DropAction action, int row, int column, const QModelIndex & parent ) override;

    QgsDataItem *dataItem( const QModelIndex &idx ) const;

    bool hasChildren( const QModelIndex &parent = QModelIndex() ) const override;

    //! Refresh item specified by path
    void refresh( const QString& path );

    //! Refresh item children
    void refresh( const QModelIndex &index = QModelIndex() );

    /** Return index of item with given path. It only searches in currently fetched
     * items, i.e. it does not fetch children.
     * @param path item path
     * @param matchFlag supported is Qt::MatchExactly and Qt::MatchStartsWith which has reverse meaning, i.e. find
     *        item with the longest match from start with path (to get as close/deep as possible to deleted item).
     * @return model index, invalid if item not found */
    QModelIndex findPath( const QString& path, Qt::MatchFlag matchFlag = Qt::MatchExactly );

    //! @note not available in python bindings
    static QModelIndex findPath( QAbstractItemModel *model, const QString& path, Qt::MatchFlag matchFlag = Qt::MatchExactly );

    void connectItem( QgsDataItem *item );

    bool canFetchMore( const QModelIndex & parent ) const override;
    void fetchMore( const QModelIndex & parent ) override;

  signals:
    /** Emitted when item children fetch was finished */
    void stateChanged( const QModelIndex & index, QgsDataItem::State oldState );

  public slots:
    //! Reload the whole model
    void reload();
    void beginInsertItems( QgsDataItem *parent, int first, int last );
    void endInsertItems();
    void beginRemoveItems( QgsDataItem *parent, int first, int last );
    void endRemoveItems();
    void itemDataChanged( QgsDataItem * item );
    void itemStateChanged( QgsDataItem * item, QgsDataItem::State oldState );

    void addFavouriteDirectory( const QString& favDir );
    void removeFavourite( const QModelIndex &index );
    void updateProjectHome();

    /** Hide the given path in the browser model */
    void hidePath( QgsDataItem *item );

  protected:
    //! Populates the model
    void addRootItems();
    void removeRootItems();

    QVector<QgsDataItem*> mRootItems;
    QgsFavouritesItem *mFavourites;
    QgsDirectoryItem *mProjectHome;
};

#endif // QGSBROWSERMODEL_H