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 160 161 162 163 164
|
/*
* Cantata
*
* Copyright (c) 2011-2022 Craig Drummond <craig.p.drummond@gmail.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.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef CONTEXT_WIDGET_H
#define CONTEXT_WIDGET_H
#include "mpd-interface/song.h"
#include <QColor>
#include <QPixmap>
#include <QPropertyAnimation>
#include <QSplitter>
#include <QWidget>
class ArtistView;
class AlbumView;
class SongView;
class NetworkJob;
class QStackedWidget;
class QComboBox;
class QImage;
class QToolButton;
class QButtonGroup;
class QWheelEvent;
class OnlineView;
class ViewSelector : public QWidget {
Q_OBJECT
public:
ViewSelector(QWidget* p);
~ViewSelector() override {}
void addItem(const QString& label, const QVariant& data);
QVariant itemData(int index) const;
int count() { return buttons.count(); }
int currentIndex() const;
void setCurrentIndex(int index);
private:
void wheelEvent(QWheelEvent* ev) override;
void paintEvent(QPaintEvent*) override;
private Q_SLOTS:
void buttonActivated();
Q_SIGNALS:
void activated(int);
private:
QButtonGroup* group;
QList<QToolButton*> buttons;
};
class ThinSplitter : public QSplitter {
Q_OBJECT
public:
ThinSplitter(QWidget* parent);
QSplitterHandle* createHandle() override;
public Q_SLOTS:
void reset();
private:
QAction* resetAct;
};
class ContextWidget : public QWidget {
Q_OBJECT
Q_PROPERTY(float fade READ fade WRITE setFade)
public:
static void enableDebug();
static const QLatin1String constBackdropFileName;
static const QLatin1String constCacheDir;
ContextWidget(QWidget* parent = nullptr);
void readConfig();
void saveConfig();
void useDarkBackground(bool u);
void update(const Song& s);
void showEvent(QShowEvent* e) override;
void paintEvent(QPaintEvent* e) override;
float fade() { return fadeValue; }
void setFade(double value);
void updateImage(QImage img);
void search();
private:
void updatePalette();
Q_SIGNALS:
void findArtist(const QString& artist);
void findAlbum(const QString& artist, const QString& album);
void playSong(const QString& file);
private Q_SLOTS:
void musicbrainzResponse();
void fanArtResponse();
void downloadResponse();
private:
void setWide(bool w);
void resizeEvent(QResizeEvent* e) override;
void cancel();
void updateBackdrop(bool force = false);
void getBackdrop();
void getFanArtBackdrop();
void getMusicbrainzId(const QString& artist);
void createBackdrop();
void resizeBackdrop();
NetworkJob* getReply(QObject* obj);
private:
bool shown;
NetworkJob* job;
bool alwaysCollapsed;
int backdropType;
int backdropOpacity;
int backdropBlur;
QString customBackdropFile;
bool darkBackground;
Song currentSong;
QImage currentImage;
QPixmap oldBackdrop;
QPixmap currentBackdrop;
QString currentArtist;
QString updateArtist;
ArtistView* artist;
AlbumView* album;
SongView* song;
QColor appLinkColor;
double fadeValue;
QPropertyAnimation animator;
int minWidth;
bool isWide;
QStackedWidget* mainStack;
QStackedWidget* stack;
QWidget* standardContext;
OnlineView* onlineContext;
ThinSplitter* splitter;
ViewSelector* viewSelector;
};
#endif
|