You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
155 lines
4.7 KiB
155 lines
4.7 KiB
/* |
|
SPDX-FileCopyrightText: 2007 Paolo Capriotti <p.capriotti@gmail.com> |
|
SPDX-FileCopyrightText: 2008 Petri Damsten <damu@iki.fi> |
|
SPDX-FileCopyrightText: 2014 Sebastian Kügler <sebas@kde.org> |
|
SPDX-FileCopyrightText: 2015 Kai Uwe Broulik <kde@privat.broulik.de> |
|
SPDX-FileCopyrightText: 2019 David Redondo <kde@david-redondo.de> |
|
|
|
SPDX-License-Identifier: GPL-2.0-or-later |
|
*/ |
|
|
|
#pragma once |
|
|
|
#include <QAbstractItemModel> |
|
#include <QQmlParserStatus> |
|
#include <QSize> |
|
#include <QTimer> |
|
#include <QUrl> |
|
|
|
#include "sortingmode.h" |
|
|
|
class QFileDialog; |
|
|
|
class ImageProxyModel; |
|
class SlideModel; |
|
class SlideFilterModel; |
|
|
|
class ImageBackend : public QObject, public QQmlParserStatus, public SortingMode |
|
{ |
|
Q_OBJECT |
|
Q_INTERFACES(QQmlParserStatus) |
|
|
|
Q_PROPERTY(bool usedInConfig MEMBER m_usedInConfig) |
|
Q_PROPERTY(RenderingMode renderingMode READ renderingMode WRITE setRenderingMode NOTIFY renderingModeChanged) |
|
Q_PROPERTY(SortingMode::Mode slideshowMode READ slideshowMode WRITE setSlideshowMode NOTIFY slideshowModeChanged) |
|
Q_PROPERTY(bool slideshowFoldersFirst READ slideshowFoldersFirst WRITE setSlideshowFoldersFirst NOTIFY slideshowFoldersFirstChanged) |
|
|
|
/** |
|
* Provides source url for \MediaProxy |
|
*/ |
|
Q_PROPERTY(QString image READ image WRITE setImage NOTIFY imageChanged) |
|
|
|
Q_PROPERTY(QAbstractItemModel *wallpaperModel READ wallpaperModel CONSTANT) |
|
Q_PROPERTY(QAbstractItemModel *slideFilterModel READ slideFilterModel CONSTANT) |
|
Q_PROPERTY(int slideTimer READ slideTimer WRITE setSlideTimer NOTIFY slideTimerChanged) |
|
Q_PROPERTY(QStringList slidePaths READ slidePaths WRITE setSlidePaths NOTIFY slidePathsChanged) |
|
Q_PROPERTY(QSize targetSize READ targetSize WRITE setTargetSize NOTIFY targetSizeChanged) |
|
Q_PROPERTY(QStringList uncheckedSlides READ uncheckedSlides WRITE setUncheckedSlides NOTIFY uncheckedSlidesChanged) |
|
|
|
/** |
|
* @return @c true if the image list is loaded, @c false otherwise |
|
*/ |
|
Q_PROPERTY(bool loading READ loading NOTIFY loadingChanged) |
|
|
|
public: |
|
enum RenderingMode { |
|
SingleImage, |
|
SlideShow, |
|
}; |
|
Q_ENUM(RenderingMode) |
|
|
|
explicit ImageBackend(QObject *parent = nullptr); |
|
~ImageBackend() override; |
|
|
|
QString image() const; |
|
void setImage(const QString &url); |
|
|
|
// this is for QML use |
|
Q_INVOKABLE void addSlidePath(const QUrl &url); |
|
Q_INVOKABLE void removeSlidePath(const QString &path); |
|
Q_INVOKABLE void openFolder(const QString &path); |
|
|
|
Q_INVOKABLE void showFileDialog(); |
|
|
|
Q_INVOKABLE QString addUsersWallpaper(const QUrl &url); |
|
|
|
RenderingMode renderingMode() const; |
|
void setRenderingMode(RenderingMode mode); |
|
|
|
SortingMode::Mode slideshowMode() const; |
|
void setSlideshowMode(SortingMode::Mode slideshowMode); |
|
|
|
bool slideshowFoldersFirst() const; |
|
void setSlideshowFoldersFirst(bool slideshowFoldersFirst); |
|
|
|
QSize targetSize() const; |
|
void setTargetSize(const QSize &size); |
|
|
|
QAbstractItemModel *wallpaperModel(); |
|
QAbstractItemModel *slideFilterModel(); |
|
|
|
int slideTimer() const; |
|
void setSlideTimer(int time); |
|
|
|
QStringList slidePaths() const; |
|
void setSlidePaths(const QStringList &slidePaths); |
|
|
|
void classBegin() override; |
|
void componentComplete() override; |
|
|
|
QStringList uncheckedSlides() const; |
|
void setUncheckedSlides(const QStringList &uncheckedSlides); |
|
|
|
bool loading() const; |
|
|
|
public Q_SLOTS: |
|
void nextSlide(); |
|
void slotSlideModelDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles); |
|
|
|
Q_SIGNALS: |
|
void settingsChanged(); |
|
void imageChanged(); |
|
void renderingModeChanged(); |
|
void slideshowModeChanged(); |
|
void slideshowFoldersFirstChanged(); |
|
void targetSizeChanged(const QSize &size); |
|
void slideTimerChanged(); |
|
void slidePathsChanged(); |
|
void uncheckedSlidesChanged(); |
|
void loadingChanged(); |
|
|
|
/** |
|
* Emitted when the user finishes adding images using the file dialog. |
|
*/ |
|
void wallpaperBrowseCompleted(); |
|
|
|
protected Q_SLOTS: |
|
void showAddSlidePathsDialog(); |
|
void slotWallpaperBrowseCompleted(); |
|
void startSlideshow(); |
|
void addDirFromSelectionDialog(); |
|
void backgroundsFound(); |
|
|
|
private: |
|
SlideModel *slideshowModel(); |
|
|
|
bool m_ready = false; |
|
int m_delay = 10; |
|
QUrl m_image; |
|
QSize m_targetSize; |
|
|
|
bool m_usedInConfig = true; |
|
|
|
RenderingMode m_mode = SingleImage; |
|
SortingMode::Mode m_slideshowMode = SortingMode::Random; |
|
bool m_slideshowFoldersFirst = false; |
|
|
|
QStringList m_slidePaths; |
|
QStringList m_uncheckedSlides; |
|
QTimer m_timer; |
|
int m_currentSlide = -1; |
|
ImageProxyModel *m_model = nullptr; |
|
SlideModel *m_slideshowModel = nullptr; |
|
SlideFilterModel *m_slideFilterModel; |
|
QFileDialog *m_dialog = nullptr; |
|
};
|
|
|