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

0001 /**
0002  * Copyright (C) 2002-2004 Scott Wheeler <wheeler@kde.org>
0003  *
0004  * This program is free software; you can redistribute it and/or modify it under
0005  * the terms of the GNU General Public License as published by the Free Software
0006  * Foundation; either version 2 of the License, or (at your option) any later
0007  * version.
0008  *
0009  * This program is distributed in the hope that it will be useful, but WITHOUT ANY
0010  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
0011  * PARTICULAR PURPOSE. See the GNU General Public License for more details.
0012  *
0013  * You should have received a copy of the GNU General Public License along with
0014  * this program.  If not, see <http://www.gnu.org/licenses/>.
0015  */
0016 
0017 #ifndef JUK_TAGEDITOR_H
0018 #define JUK_TAGEDITOR_H
0019 
0020 #include <QWidget>
0021 #include <QVector>
0022 #include <QMap>
0023 
0024 #include "ui_tageditor.h"
0025 
0026 class KComboBox;
0027 class KConfigGroup;
0028 
0029 class QCheckBox;
0030 
0031 class CollectionObserver;
0032 class Playlist;
0033 class PlaylistItem;
0034 
0035 typedef QVector<PlaylistItem *> PlaylistItemList;
0036 
0037 class TagEditor : public QWidget, public Ui::TagEditor
0038 {
0039     Q_OBJECT
0040 
0041 public:
0042     explicit TagEditor(QWidget *parent = 0);
0043     virtual ~TagEditor();
0044     PlaylistItemList items() const { return m_items; }
0045     void setupObservers();
0046 
0047 public slots:
0048     void slotSave() { save(m_items); }
0049     void slotSetItems(const PlaylistItemList &list);
0050     void slotRefresh();
0051     void slotClear();
0052     void slotPlaylistDestroyed(Playlist *p);
0053     /**
0054      * Update collection if we're visible, or defer otherwise
0055      */
0056     void slotUpdateCollection();
0057 
0058 private:
0059     void updateCollection();
0060 
0061     void setupActions();
0062     void setupLayout();
0063     void readConfig();
0064     void readCompletionMode(const KConfigGroup &config, KComboBox *box, const QString &key);
0065     void saveConfig();
0066     void save(const PlaylistItemList &list);
0067     void saveChangesPrompt();
0068     virtual void showEvent(QShowEvent *e) override;
0069 
0070 private slots:
0071     void slotDataChanged();
0072     void slotItemRemoved(PlaylistItem *item);
0073     void slotPlaylistRemoved() { m_currentPlaylist = 0; }
0074 
0075 private:
0076     typedef QMap<QWidget *, QCheckBox *> BoxMap;
0077     BoxMap m_enableBoxes;
0078 
0079     QStringList m_genreList;
0080 
0081     PlaylistItemList m_items;
0082     Playlist *m_currentPlaylist;
0083 
0084     CollectionObserver *m_observer;
0085 
0086     bool m_dataChanged;
0087     bool m_collectionChanged;
0088     bool m_performingSave;
0089 
0090     friend class CollectionObserver;
0091 };
0092 
0093 #endif
0094 
0095 // vim: set et sw=4 tw=0 sta: