File indexing completed on 2024-10-06 04:26:01

0001 /*
0002     SPDX-FileCopyrightText: 1998-2008 Sebastian Trueg <trueg@k3b.org>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #ifndef _K3B_PLACES_MODEL_H_
0007 #define _K3B_PLACES_MODEL_H_
0008 
0009 #include "k3bmetaitemmodel.h"
0010 
0011 #include <QUrl>
0012 
0013 class KFileItem;
0014 
0015 namespace K3b {
0016     namespace Device {
0017         class Device;
0018         class DeviceManager;
0019     }
0020 
0021     /**
0022      * Wraps multiple KDirModels and a DeviceModel
0023      */
0024     class PlacesModel : public MetaItemModel
0025     {
0026         Q_OBJECT
0027 
0028     public:
0029         explicit PlacesModel( QObject* parent = 0 );
0030         ~PlacesModel() override;
0031 
0032         /**
0033          * Will return an invalid item if the index is not part
0034          * of a KDirModel.
0035          */
0036         KFileItem itemForIndex( const QModelIndex& index ) const;
0037 
0038         /**
0039          * Will return 0 if the index does not refer to a device item.
0040          */
0041         Device::Device* deviceForIndex( const QModelIndex& index ) const;
0042 
0043         /**
0044          * Will return invalid index if model does not contain such device
0045          */
0046         QModelIndex indexForDevice( Device::Device* dev ) const;
0047 
0048     Q_SIGNALS:
0049         /**
0050          * Emitted for each subdirectory that is a parent of a url
0051          * passed to expandToUrl This allows one to asynchronously open
0052          * a tree view down to a given directory.
0053          *
0054          * \sa KDirModel::expand
0055          */
0056         void expand( const QModelIndex& index );
0057 
0058     public Q_SLOTS:
0059         void addPlace( const QString& name, const QIcon& icon, const QUrl& rootUrl );
0060 
0061         /**
0062          * \short Lists subdirectories using fetchMore() as needed until the given \p url exists in the model.
0063          *
0064          * When the model is used by a treeview, call KDirLister::openUrl with the base url of the tree,
0065          * then the treeview will take care of calling fetchMore() when the user opens directories.
0066          * However if you want the tree to show a given URL (i.e. open the tree recursively until that URL),
0067          * call expandToUrl().
0068          * Note that this is asynchronous; the necessary listing of subdirectories will take time so
0069          * the model will not immediately have this url available.
0070          * The model emits the signal expand() when an index has become available; this can be connected
0071          * to the treeview in order to let it open that index.
0072          * \param url the url of a subdirectory of the directory model
0073          *
0074          * \sa KDirModel::expandToUrl
0075          */
0076         void expandToUrl( const QUrl& url );
0077 
0078     private Q_SLOTS:
0079         void slotDevicesChanged( K3b::Device::DeviceManager* dm );
0080         void slotExpand( const QModelIndex& index );
0081 
0082     private:
0083         class Private;
0084         Private* const d;
0085     };
0086 }
0087 
0088 #endif