00001 #ifndef FRACTALBUILDER_H
00002 #define FRACTALBUILDER_H
00003
00004 #include <QObject>
00005 #include <QPointer>
00006 #include <QThread>
00007 #include <QtConcurrentMap>
00008 #include <QFutureWatcher>
00009
00010 #include "accumulator/accumulatorfactory.h"
00011 #include "generator/generatorfactory.h"
00012 #include "fractals/fractalfactory.h"
00013
00021 class FractalBuilder : public QThread
00022 {
00023 Q_OBJECT
00024
00025 FractalInfo * _info;
00026
00027 QPointer<Accumulator> _accumulator;
00028 QPointer<Fractal> _fractal;
00029 QPointer<Generator> _generator;
00030
00031 QFutureWatcher<void> * _watcher;
00032
00033 public:
00034 explicit FractalBuilder(QRectF fractaleSize, QSize imageSize, QObject *parent = 0);
00035 virtual void run();
00036
00037 void setAccumulator(QString name, bool autoParam);
00038 void setFractal(QString name, int limit, bool autoParam);
00039 void setGenerator(QString name, bool autoParam);
00040
00041 FractalInfo * info() { return _info; }
00042
00043 private slots :
00044 void progress(int);
00045
00046 signals:
00047 void progressValueChanged(int value);
00048 void setRange(int min, int max);
00049
00050
00051 private:
00052 static QStringList _definedFractalNames;
00053 public:
00054 static QStringList definedFractalNames();
00055 static FractalBuilder * build(QString name, QSize size, QObject * parent);
00056 };
00057
00058 #endif // FRACTALBUILDER_H