Enable shuffle mode
Co-authored-by: data-dude92 <60513060+data-dude92@users.noreply.github.com>
This commit is contained in:
@@ -8,7 +8,8 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <stdlib.h> /* srand, rand */
|
#include <stdlib.h> /* srand, rand */
|
||||||
#include <time.h> /* time */
|
#include <time.h> /* time */
|
||||||
|
#include <algorithm> // std::shuffle
|
||||||
|
#include <random> // std::default_random_engine
|
||||||
|
|
||||||
ImageSelector::ImageSelector(std::unique_ptr<PathTraverser>& pathTraverser):
|
ImageSelector::ImageSelector(std::unique_ptr<PathTraverser>& pathTraverser):
|
||||||
pathTraverser(pathTraverser)
|
pathTraverser(pathTraverser)
|
||||||
@@ -17,15 +18,15 @@ ImageSelector::ImageSelector(std::unique_ptr<PathTraverser>& pathTraverser):
|
|||||||
|
|
||||||
ImageSelector::~ImageSelector(){}
|
ImageSelector::~ImageSelector(){}
|
||||||
|
|
||||||
DefaultImageSelector::DefaultImageSelector(std::unique_ptr<PathTraverser>& pathTraverser):
|
RandomImageSelector::RandomImageSelector(std::unique_ptr<PathTraverser>& pathTraverser):
|
||||||
ImageSelector(pathTraverser)
|
ImageSelector(pathTraverser)
|
||||||
{
|
{
|
||||||
srand (time(NULL));
|
srand (time(NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
DefaultImageSelector::~DefaultImageSelector(){}
|
RandomImageSelector::~RandomImageSelector(){}
|
||||||
|
|
||||||
std::string DefaultImageSelector::getNextImage() const
|
std::string RandomImageSelector::getNextImage()
|
||||||
{
|
{
|
||||||
std:: string filename;
|
std:: string filename;
|
||||||
try
|
try
|
||||||
@@ -42,7 +43,7 @@ std::string DefaultImageSelector::getNextImage() const
|
|||||||
return filename;
|
return filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int DefaultImageSelector::selectRandom(const QStringList& images) const
|
unsigned int RandomImageSelector::selectRandom(const QStringList& images) const
|
||||||
{
|
{
|
||||||
std::cout << "images: " << images.size() << std::endl;
|
std::cout << "images: " << images.size() << std::endl;
|
||||||
if (images.size() == 0)
|
if (images.size() == 0)
|
||||||
@@ -51,3 +52,36 @@ unsigned int DefaultImageSelector::selectRandom(const QStringList& images) const
|
|||||||
}
|
}
|
||||||
return rand() % images.size();
|
return rand() % images.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ShuffleImageSelector::ShuffleImageSelector(std::unique_ptr<PathTraverser>& pathTraverser):
|
||||||
|
ImageSelector(pathTraverser),
|
||||||
|
current_image_shuffle(-1),
|
||||||
|
images()
|
||||||
|
{
|
||||||
|
srand (time(NULL));
|
||||||
|
}
|
||||||
|
|
||||||
|
ShuffleImageSelector::~ShuffleImageSelector()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string ShuffleImageSelector::getNextImage()
|
||||||
|
{
|
||||||
|
if (images.size() == 0 || current_image_shuffle == images.size())
|
||||||
|
{
|
||||||
|
current_image_shuffle = 0;
|
||||||
|
images = pathTraverser->getImages();
|
||||||
|
std::cout << "Shuffling " << images.size() << " images." << std::endl;
|
||||||
|
std::random_device rd;
|
||||||
|
std::mt19937 randomizer(rd());
|
||||||
|
std::shuffle(images.begin(), images.end(), randomizer);
|
||||||
|
}
|
||||||
|
if (images.size() == 0)
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
std::string filename = pathTraverser->getImagePath(images.at(current_image_shuffle).toStdString());
|
||||||
|
std::cout << "updating image: " << filename << std::endl;
|
||||||
|
current_image_shuffle = current_image_shuffle + 1;
|
||||||
|
return filename;
|
||||||
|
}
|
||||||
|
|||||||
@@ -13,21 +13,33 @@ class ImageSelector
|
|||||||
public:
|
public:
|
||||||
ImageSelector(std::unique_ptr<PathTraverser>& pathTraverser);
|
ImageSelector(std::unique_ptr<PathTraverser>& pathTraverser);
|
||||||
virtual ~ImageSelector();
|
virtual ~ImageSelector();
|
||||||
virtual std::string getNextImage() const = 0;
|
virtual std::string getNextImage() = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::unique_ptr<PathTraverser>& pathTraverser;
|
std::unique_ptr<PathTraverser>& pathTraverser;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DefaultImageSelector : public ImageSelector
|
class RandomImageSelector : public ImageSelector
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DefaultImageSelector(std::unique_ptr<PathTraverser>& pathTraverser);
|
RandomImageSelector(std::unique_ptr<PathTraverser>& pathTraverser);
|
||||||
virtual ~DefaultImageSelector();
|
virtual ~RandomImageSelector();
|
||||||
virtual std::string getNextImage() const;
|
virtual std::string getNextImage();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
unsigned int selectRandom(const QStringList& images) const;
|
unsigned int selectRandom(const QStringList& images) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class ShuffleImageSelector : public ImageSelector
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ShuffleImageSelector(std::unique_ptr<PathTraverser>& pathTraverser);
|
||||||
|
virtual ~ShuffleImageSelector();
|
||||||
|
virtual std::string getNextImage();
|
||||||
|
|
||||||
|
private:
|
||||||
|
int current_image_shuffle;
|
||||||
|
QStringList images;
|
||||||
|
};
|
||||||
|
|
||||||
#endif // IMAGESELECTOR_H
|
#endif // IMAGESELECTOR_H
|
||||||
|
|||||||
21
src/main.cpp
21
src/main.cpp
@@ -26,7 +26,8 @@ int main(int argc, char *argv[])
|
|||||||
MainWindow w;
|
MainWindow w;
|
||||||
int opt;
|
int opt;
|
||||||
bool recursive = false;
|
bool recursive = false;
|
||||||
while ((opt = getopt(argc, argv, "b:p:t:o:r")) != -1) {
|
bool shuffle = false;
|
||||||
|
while ((opt = getopt(argc, argv, "b:p:t:o:rs")) != -1) {
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
case 'p':
|
case 'p':
|
||||||
path = optarg;
|
path = optarg;
|
||||||
@@ -43,6 +44,10 @@ int main(int argc, char *argv[])
|
|||||||
case 'r':
|
case 'r':
|
||||||
recursive = true;
|
recursive = true;
|
||||||
break;
|
break;
|
||||||
|
case 's':
|
||||||
|
shuffle = true;
|
||||||
|
std::cout << "Shuffle mode is on." << std::endl;
|
||||||
|
break;
|
||||||
default: /* '?' */
|
default: /* '?' */
|
||||||
usage(argv[0]);
|
usage(argv[0]);
|
||||||
return 1;
|
return 1;
|
||||||
@@ -60,11 +65,21 @@ int main(int argc, char *argv[])
|
|||||||
if (recursive)
|
if (recursive)
|
||||||
{
|
{
|
||||||
pathTraverser = std::unique_ptr<PathTraverser>(new RecursivePathTraverser(path));
|
pathTraverser = std::unique_ptr<PathTraverser>(new RecursivePathTraverser(path));
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
pathTraverser = std::unique_ptr<PathTraverser>(new DefaultPathTraverser(path));
|
pathTraverser = std::unique_ptr<PathTraverser>(new DefaultPathTraverser(path));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<ImageSelector> selector = std::unique_ptr<ImageSelector>(new DefaultImageSelector(pathTraverser));
|
std::unique_ptr<ImageSelector> selector;
|
||||||
|
if (shuffle)
|
||||||
|
{
|
||||||
|
selector = std::unique_ptr<ImageSelector>(new ShuffleImageSelector(pathTraverser));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
selector = std::unique_ptr<ImageSelector>(new RandomImageSelector(pathTraverser));
|
||||||
|
}
|
||||||
|
|
||||||
w.show();
|
w.show();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user