File indexing completed on 2024-04-14 04:43:18

0001 /* AUDEX CDDA EXTRACTOR
0002  * SPDX-FileCopyrightText: Copyright (C) 2007 Marco Nelles
0003  * <https://userbase.kde.org/Audex>
0004  *
0005  * SPDX-License-Identifier: GPL-3.0-or-later
0006  */
0007 
0008 #ifndef CDDAHEADERWIDGET_H
0009 #define CDDAHEADERWIDGET_H
0010 
0011 #include <cmath>
0012 
0013 #include <QApplication>
0014 #include <QDesktopServices>
0015 #include <QFont>
0016 #include <QFontMetrics>
0017 #include <QImage>
0018 #include <QMouseEvent>
0019 #include <QPainter>
0020 #include <QTemporaryDir>
0021 #include <QTimer>
0022 #include <QWidget>
0023 
0024 #include <KActionCollection>
0025 #include <KColorScheme>
0026 #include <KLocalizedString>
0027 
0028 #include "preferences.h"
0029 
0030 #include "dialogs/cddaheaderdatadialog.h"
0031 #include "dialogs/errordialog.h"
0032 #include "models/cddamodel.h"
0033 
0034 // fixed point defines
0035 #define FP_BITS 10
0036 #define FP_FACTOR (1 << FP_BITS)
0037 
0038 enum FadeStyle { NoFade, FadeDown, FadeRight, FadeUp, FadeLeft };
0039 
0040 enum MirrorStyle { NoMirror, MirrorOverX, MirrorOverY };
0041 
0042 class CDDAHeaderWidget : public QWidget
0043 {
0044     Q_OBJECT
0045 
0046 public:
0047     explicit CDDAHeaderWidget(CDDAModel *cddaModel,
0048                               QWidget *parent = nullptr,
0049                               const int cover_size_min = 200,
0050                               const int cover_size_max = 400,
0051                               const int padding = 20);
0052     ~CDDAHeaderWidget() override;
0053     QSize sizeHint() const override;
0054     // void setCover(const QImage &cover);
0055 
0056     bool isEnabled() const;
0057 
0058 public Q_SLOTS:
0059     void setEnabled(bool enabled);
0060     void edit_data();
0061 
0062 Q_SIGNALS:
0063     void headerDataChanged();
0064 
0065 protected:
0066     void paintEvent(QPaintEvent *event) override;
0067     void mouseMoveEvent(QMouseEvent *event) override;
0068     void mousePressEvent(QMouseEvent *event) override;
0069     void fetchCoverFinished(bool showDialog);
0070 
0071 private Q_SLOTS:
0072 
0073     void update();
0074 
0075     void load();
0076     void save();
0077     void view_cover();
0078     void remove();
0079 
0080     void set_cover(const QByteArray &cover);
0081 
0082     void context_menu(const QPoint &point);
0083 
0084 private:
0085     CDDAModel *cdda_model;
0086     KActionCollection *action_collection;
0087     int cover_size_min;
0088     int cover_size_max;
0089     int padding;
0090 
0091     QImage cd_case;
0092     void construct_cd_case();
0093 
0094     QRect cover_rect;
0095     bool cursor_on_cover;
0096 
0097     QRect artist_label_rect;
0098     bool cursor_on_artist_label;
0099 
0100     QRect title_label_rect;
0101     bool cursor_on_title_label;
0102 
0103     QRect year_label_rect;
0104     bool cursor_on_year_label;
0105 
0106     void setup_actions();
0107 
0108     bool enabled;
0109 
0110     QTemporaryDir tmp_dir;
0111 };
0112 
0113 #endif