Files
slide/src/imageselector.h
Alfred Reynolds be8f615c21 - Add a new Log() function to replace ad-hoc std::cout calls wrapped in debugMode checks
- Remove debugMode from classes that don't need it (i.e all of them)
2021-08-26 12:13:09 +12:00

83 lines
2.5 KiB
C++

#ifndef IMAGESELECTOR_H
#define IMAGESELECTOR_H
#include <iostream>
#include <memory>
#include <QStringList>
#include <QVector>
#include "imagestructs.h"
class MainWindow;
class PathTraverser;
class ImageSelector
{
public:
ImageSelector(std::unique_ptr<PathTraverser>& pathTraverser);
ImageSelector(); // use case for when you don't own your own traverser
virtual ~ImageSelector();
virtual const ImageDetails getNextImage(const ImageDisplayOptions &baseOptions) = 0;
protected:
ImageDetails populateImageDetails(const std::string&filename, const ImageDisplayOptions &baseOptions);
bool imageValidForAspect(const ImageDetails& imageDetails);
bool imageMatchesFilter(const ImageDetails& imageDetails);
bool imageInsideTimeWindow(const QVector<DisplayTimeWindow> &timeWindows);
std::unique_ptr<PathTraverser> pathTraverser;
};
class RandomImageSelector : public ImageSelector
{
public:
RandomImageSelector(std::unique_ptr<PathTraverser>& pathTraverser);
virtual ~RandomImageSelector();
virtual const ImageDetails getNextImage(const ImageDisplayOptions &baseOptions);
private:
unsigned int selectRandom(const QStringList& images) const;
};
class ShuffleImageSelector : public ImageSelector
{
public:
ShuffleImageSelector(std::unique_ptr<PathTraverser>& pathTraverser);
virtual ~ShuffleImageSelector();
virtual const ImageDetails getNextImage(const ImageDisplayOptions &baseOptions);
private:
void reloadImagesIfNoneLeft();
int current_image_shuffle;
QStringList images;
};
class SortedImageSelector : public ImageSelector
{
public:
SortedImageSelector(std::unique_ptr<PathTraverser>& pathTraverser);
virtual ~SortedImageSelector();
virtual const ImageDetails getNextImage(const ImageDisplayOptions &baseOptions);
private:
void reloadImagesIfEmpty();
QStringList images;
};
class ListImageSelector : public ImageSelector
{
public:
ListImageSelector();
virtual ~ListImageSelector();
virtual const ImageDetails getNextImage(const ImageDisplayOptions &baseOptions);
void AddImageSelector(std::unique_ptr<ImageSelector>& selector, const bool exclusiveIn, const ImageDisplayOptions& baseDisplayOptionsIn);
private:
struct SelectoryEntry {
std::unique_ptr<ImageSelector> selector;
ImageDisplayOptions baseDisplayOptions;
bool exclusive = false;
};
std::vector<SelectoryEntry> imageSelectors;
std::vector<SelectoryEntry>::iterator currentSelector;
};
#endif // IMAGESELECTOR_H