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:
00035 explicit FractalBuilder(QRectF fractaleSize, QSize imageSize, QObject *parent = 0);
00037 virtual void run();
00038
00039 void setAccumulator(QString name, bool autoParam);
00040 void setFractal(QString name, int limit, bool autoParam);
00041 void setGenerator(QString name, bool autoParam);
00042
00043 FractalInfo * info() { return _info; }
00044
00045 private slots :
00046 void progress(int);
00047
00048 signals:
00049 void progressValueChanged(int value);
00050 void setRange(int min, int max);
00051
00052
00053 private:
00054 static QStringList _definedFractalNames;
00055 public:
00056 static QStringList definedFractalNames();
00057 static FractalBuilder * build(QString name, QSize size, QObject * parent);
00058 };
00059
00060 #endif // FRACTALBUILDER_H