Almond.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. #pragma once
  2. #ifndef ALMOND_H
  3. #define ALMOND_H
  4. #include <QtWidgets/QMainWindow>
  5. #include "ui_Almond.h"
  6. #include <Mandel.h>
  7. #include "BackgroundTask.h"
  8. #include "choosegenerators.h"
  9. #include "customgenerator.h"
  10. #include "FractalWidget.h"
  11. #include "AlmondMenuWidget.h"
  12. #include "ExportImageMenu.h"
  13. #include "ExportVideoMenu.h"
  14. #include "GradientMenu.h"
  15. #include "About.h"
  16. #include <memory>
  17. ///
  18. /// \brief contains a viewport that can be restored when switching
  19. /// between mandelbrot set and julia set
  20. ///
  21. struct ViewState
  22. {
  23. mnd::MandelViewport viewport;
  24. mnd::MandelGenerator* generator;
  25. };
  26. enum ViewType
  27. {
  28. MANDELBROT,
  29. JULIA,
  30. CUSTOM,
  31. };
  32. ///
  33. /// \brief The main window of the Almond application
  34. ///
  35. class Almond : public QMainWindow
  36. {
  37. Q_OBJECT
  38. private:
  39. mnd::MandelContext mandelContext;
  40. QThreadPool backgroundTasks;
  41. bool stoppingBackgroundTasks = false;
  42. AlmondMenuWidget* amw;
  43. ExportImageMenu* eim;
  44. ExportVideoMenu* evm;
  45. About* about;
  46. GradientMenu* gradientMenu;
  47. bool fullscreenMode = false;
  48. bool maximizedBeforeFullscreen = true;
  49. QWidget* cw;
  50. public:
  51. FractalWidget* fractalWidget;
  52. private:
  53. //std::unique_ptr<BenchmarkDialog> benchmarkDialog;
  54. std::unique_ptr<CustomGenerator> customGeneratorDialog;
  55. std::vector<std::unique_ptr<FractalDef>> customGenerators;
  56. FractalDef* currentCustom;
  57. mnd::AdaptiveGenerator* customGenerator;
  58. std::vector<std::unique_ptr<mnd::AdaptiveGenerator>> adjustedGenerators;
  59. ViewType currentView;
  60. mnd::MandelViewport mandelViewSave;
  61. mnd::MandelViewport customViewSave;
  62. mnd::AdaptiveGenerator* mandelGenerator;
  63. public:
  64. mnd::MandelGenerator* currentGenerator;
  65. public:
  66. Almond(QWidget *parent = Q_NULLPTR);
  67. ~Almond(void);
  68. void submitBackgroundTask(BackgroundTask* task);
  69. void stopBackgroundTask(void);
  70. void closeEvent(QCloseEvent* ce) override;
  71. bool eventFilter(QObject *target, QEvent *event) override;
  72. void submenuOK(int smIndex);
  73. void imageExportOk(void);
  74. void videoExportOk(void);
  75. void gradientEditOk(void);
  76. public slots:
  77. void toggleFullscreen(void);
  78. private slots:
  79. void on_zoom_out_clicked();
  80. void on_zoom_in_clicked();
  81. void on_maxIterations_editingFinished();
  82. void on_chooseGradient_clicked();
  83. void on_exportVideo_clicked();
  84. void on_smooth_stateChanged(int arg1);
  85. void on_exportImage_clicked();
  86. void on_resetZoom_clicked();
  87. void on_displayInfo_stateChanged(int arg1);
  88. void on_chooseGenerator_clicked();
  89. void backgroundTaskFinished(bool, QString message);
  90. void backgroundTaskProgress(float percentage);
  91. void pointSelected(mnd::Real x, mnd::Real y);
  92. void on_wMandel_toggled(bool checked);
  93. void saveView(void);
  94. void setViewType(ViewType v);
  95. void on_wMandel_clicked();
  96. void on_radioButton_toggled(bool checked);
  97. void on_radioButton_2_toggled(bool checked);
  98. void on_createCustom_clicked();
  99. void on_cancelProgress_clicked();
  100. void on_aboutBtn_clicked();
  101. void on_loadBtn_clicked();
  102. void on_saveBtn_clicked();
  103. private:
  104. Ui::AlmondClass ui;
  105. };
  106. #endif // ALMOND_H