File indexing completed on 2023-05-30 11:30:53

0001 /**
0002  * Copyright (C) 2003-2004 Scott Wheeler <wheeler@kde.org>
0003  * Copyright (C) 2007 Michael Pyne <mpyne@kde.org>
0004  *
0005  * This program is free software; you can redistribute it and/or modify it under
0006  * the terms of the GNU General Public License as published by the Free Software
0007  * Foundation; either version 2 of the License, or (at your option) any later
0008  * version.
0009  *
0010  * This program is distributed in the hope that it will be useful, but WITHOUT ANY
0011  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
0012  * PARTICULAR PURPOSE. See the GNU General Public License for more details.
0013  *
0014  * You should have received a copy of the GNU General Public License along with
0015  * this program.  If not, see <http://www.gnu.org/licenses/>.
0016  */
0017 
0018 #ifndef JUK_VIEWMODE_H
0019 #define JUK_VIEWMODE_H
0020 
0021 #include <QObject>
0022 #include <QStringList>
0023 #include <QMap>
0024 
0025 #include "playlistbox.h"
0026 
0027 class QPainter;
0028 class QColorGroup;
0029 
0030 
0031 class ViewMode : public QObject
0032 {
0033     Q_OBJECT
0034 
0035 public:
0036     explicit ViewMode(PlaylistBox *b);
0037     virtual ~ViewMode();
0038 
0039     virtual QString name() const;
0040     virtual void setShown(bool shown);
0041 
0042     /*virtual void paintCell(PlaylistBox::Item *item,
0043                            QPainter *painter,
0044                            const QColorGroup &colorGroup,
0045                            int column, int width, int align);*/
0046 
0047     virtual bool eventFilter(QObject *watched, QEvent *e) override;
0048     void queueRefresh() { m_needsRefresh = true; }
0049 
0050     virtual void setupItem(PlaylistBox::Item *item) const;
0051 
0052     virtual void setupDynamicPlaylists() {}
0053 
0054     /**
0055      * If the view mode has dynamic lists, this function is used to temporarily
0056      * freeze them to prevent them from deleting dynamic elements.
0057      */
0058     virtual void setDynamicListsFrozen(bool /* frozen */) {}
0059 
0060     /**
0061      * Used for dynamic view modes.  This function will be called when \p items
0062      * are added to \p column (even if the view mode hasn't been shown yet).
0063      */
0064     virtual void addItems(const QStringList &items, unsigned column)
0065     {
0066         Q_UNUSED(items);
0067         Q_UNUSED(column);
0068     }
0069 
0070     /**
0071      * Used for dynamic view modes.  This function will be called when \p item
0072      * is removed from \p column (even if the view mode hasn't been shown yet).
0073      */
0074     virtual void removeItem(const QString &item, unsigned column)
0075     {
0076         Q_UNUSED(item);
0077         Q_UNUSED(column);
0078     }
0079 
0080 protected:
0081     PlaylistBox *playlistBox() const { return m_playlistBox; }
0082     bool visible() const { return m_visible; }
0083     void setVisible(bool v) { m_visible = v; }
0084     void updateIcons();
0085     static void paintDropIndicator(QPainter *painter, int width, int height);
0086 
0087 private:
0088     PlaylistBox *m_playlistBox;
0089     bool m_visible;
0090     bool m_needsRefresh;
0091     QMap<PlaylistBox::Item *, QStringList> m_lines;
0092     static const int border = 4;
0093 };
0094 
0095 ////////////////////////////////////////////////////////////////////////////////
0096 
0097 class CompactViewMode : public ViewMode
0098 {
0099     Q_OBJECT
0100 
0101 public:
0102     explicit CompactViewMode(PlaylistBox *b);
0103     virtual ~CompactViewMode();
0104 
0105     virtual QString name() const override;
0106     virtual void setShown(bool shown) override;
0107 
0108     virtual void setupItem(PlaylistBox::Item *item) const override
0109     {
0110         item->setup();
0111     }
0112 };
0113 
0114 ////////////////////////////////////////////////////////////////////////////////
0115 
0116 class TreeViewItemPlaylist;
0117 
0118 class TreeViewMode final : public CompactViewMode
0119 {
0120     Q_OBJECT
0121 
0122 public:
0123     explicit TreeViewMode(PlaylistBox *l);
0124     virtual ~TreeViewMode();
0125 
0126     virtual QString name() const override;
0127     virtual void setShown(bool shown) override;
0128     virtual void setupDynamicPlaylists() override;
0129     virtual void setDynamicListsFrozen(bool frozen) override;
0130 
0131     virtual void removeItem(const QString &item, unsigned column) override;
0132     virtual void addItems(const QStringList &items, unsigned column) override;
0133 
0134 signals:
0135     void signalPlaylistDestroyed(Playlist*);
0136 
0137 private:
0138     QMap<QString, PlaylistBox::Item*> m_searchCategories;
0139     QMap<QString, TreeViewItemPlaylist*> m_treeViewItems;
0140     QStringList m_pendingItemsToRemove;
0141     bool m_dynamicListsFrozen;
0142     bool m_setup;
0143 };
0144 
0145 #endif
0146 
0147 // vim: set et sw=4 tw=0 sta: