diff --git a/Source/Fractorium/Fractorium.cpp b/Source/Fractorium/Fractorium.cpp index 7f8419b..a75172c 100644 --- a/Source/Fractorium/Fractorium.cpp +++ b/Source/Fractorium/Fractorium.cpp @@ -234,7 +234,7 @@ Fractorium::~Fractorium() { SyncSequenceSettings(); m_VarDialog->SyncSettings(); - m_Settings->ShowXforms(ui.ActionDrawXforms->isChecked()); + m_Settings->ShowXforms(ui.ActionDrawPreAffines->isChecked() || ui.ActionDrawPostAffines->isChecked()); m_Settings->ShowGrid(ui.ActionDrawGrid->isChecked()); m_Settings->setValue("windowState", saveState()); m_Settings->sync(); diff --git a/Source/Fractorium/Fractorium.h b/Source/Fractorium/Fractorium.h index 1116193..51a6455 100644 --- a/Source/Fractorium/Fractorium.h +++ b/Source/Fractorium/Fractorium.h @@ -15,6 +15,11 @@ #include "DoubleSpinBoxTableItemDelegate.h" #include "PaletteEditor/PaletteEditor.h" +/// +/// An enum representing the type of edit being done. +/// +enum class eAffineState : int { PRE, ALL_PRE, POST, ALL_POST }; + /// /// Fractorium class. /// @@ -116,6 +121,8 @@ public: void CurrentXform(uint i); //Xforms Affine. + bool DrawPreAffines(); + bool DrawPostAffines(); bool DrawSelectedPre(); bool DrawAllPre(); bool DrawSelectedPost(); @@ -174,7 +181,8 @@ public slots: void OnActionDP(bool checked); void OnActionStyle(bool checked); void OnActionStartStopRenderer(bool checked); - void OnActionDrawXforms(bool checked); + void OnActionDrawAffines(bool checked); + void OnActionDrawAllAffines(bool checked); void OnActionDrawImage(bool checked); void OnActionDrawGrid(bool checked); @@ -412,6 +420,8 @@ private: bool HaveFinal(); //Toolbar. + void SaveAffineState(); + void SyncAffineStateToToolbar(); void SyncOptionsToToolbar(); //Library. @@ -592,6 +602,7 @@ private: QColor m_VariationTreeBgColorNonZero, m_VariationTreeBgColorZero; vector m_Docks; + bool m_PreviousAffineState[4]; int m_FontSize; int m_VarSortMode; int m_PaletteSortMode; diff --git a/Source/Fractorium/Fractorium.qrc b/Source/Fractorium/Fractorium.qrc index 667eb37..f8c2893 100644 --- a/Source/Fractorium/Fractorium.qrc +++ b/Source/Fractorium/Fractorium.qrc @@ -50,5 +50,6 @@ Icons/Function-512.png Icons/pic.png Icons/grid.png + Icons/reset_scale.png diff --git a/Source/Fractorium/Fractorium.ui b/Source/Fractorium/Fractorium.ui index 5f85d85..2e5e2b6 100644 --- a/Source/Fractorium/Fractorium.ui +++ b/Source/Fractorium/Fractorium.ui @@ -80,8 +80,8 @@ 0 0 - 1277 - 985 + 1213 + 978 @@ -173,7 +173,7 @@ 0 0 230 - 934 + 928 @@ -263,30 +263,30 @@ false + + 35 + 145 false - - 35 - true false + + 22 + 22 false - - 22 - false @@ -453,7 +453,10 @@ false - true + false + + + 15 15 @@ -461,24 +464,21 @@ false - - 15 - true false + + 15 + 15 false - - 15 - Geometry @@ -534,7 +534,10 @@ false - true + false + + + 15 15 @@ -542,24 +545,21 @@ false - - 15 - true false + + 15 + 15 false - - 15 - Iteration @@ -631,35 +631,35 @@ false - true + false false + + 15 + 15 false - - 15 - true false + + 15 + 15 false - - 15 - Filter @@ -773,30 +773,30 @@ false + + 35 + 120 false - - 35 - true false + + 22 + 22 false - - 22 - false @@ -1123,30 +1123,30 @@ false + + 35 + 145 false - - 35 - true false + + 22 + 22 false - - 22 - false @@ -1297,7 +1297,10 @@ 1 - true + false + + + 15 15 @@ -1305,24 +1308,21 @@ false - - 15 - true false + + 15 + 15 false - - 15 - Animation @@ -1408,30 +1408,30 @@ false + + 35 + 145 false - - 35 - true false + + 22 + 22 false - - 22 - Interpolation @@ -1572,30 +1572,30 @@ false + + 35 + 120 false - - 35 - true false + + 22 + 22 false - - 22 - false @@ -1819,7 +1819,10 @@ false - true + false + + + 15 15 @@ -1827,24 +1830,21 @@ false - - 15 - true false + + 16 + 16 false - - 16 - Color @@ -1867,7 +1867,7 @@ 550 0 - 240 + 252 881 @@ -1879,8 +1879,8 @@ - 240 - 392 + 252 + 409 @@ -2093,27 +2093,27 @@ false + + 35 + 35 false - - 35 - false + + 22 + 22 false - - 22 - @@ -2211,30 +2211,30 @@ 0 - true + false false - + 35 - + 35 false - true + false false - + 22 - + 22 @@ -2290,14 +2290,17 @@ true + + 35 + 35 false - - 35 + + 22 22 @@ -2305,9 +2308,6 @@ false - - 22 - @@ -2370,8 +2370,8 @@ 0 0 - 285 - 675 + 389 + 690 @@ -2474,10 +2474,10 @@ false - + 62 - + 62 @@ -2486,15 +2486,15 @@ false + + 22 + 22 false - - 22 - @@ -2713,10 +2713,10 @@ false - + 20 - + 20 @@ -2825,15 +2825,15 @@ false + + 16 + 16 false - - 16 - false @@ -3059,8 +3059,8 @@ 0 0 - 291 - 876 + 277 + 880 @@ -3407,7 +3407,10 @@ 2 - true + false + + + 27 110 @@ -3415,24 +3418,21 @@ false - - 27 - true false + + 21 + 21 false - - 21 - @@ -3502,7 +3502,7 @@ QTabWidget::Triangular - 2 + 1 @@ -3627,27 +3627,27 @@ false - - false - 27 + + false + true false + + 21 + 21 false - - 21 - false @@ -3753,7 +3753,7 @@ false - 19 + 21 false @@ -3963,30 +3963,30 @@ false + + 27 + 125 false - - 27 - true false + + 22 + 22 false - - 22 - false @@ -4141,7 +4141,7 @@ false - true + false @@ -4230,15 +4230,15 @@ false + + 40 + 100 false - - 40 - true @@ -4248,15 +4248,15 @@ false + + 22 + 22 false - - 22 - false @@ -4996,10 +4996,10 @@ false - true + false - true + false @@ -5091,15 +5091,15 @@ false + + 40 + 100 false - - 40 - true @@ -5109,15 +5109,15 @@ false + + 22 + 22 false - - 22 - false @@ -6061,15 +6061,15 @@ 3 + + 10 + 70 true - - 10 - true @@ -6293,8 +6293,8 @@ 0 0 - 267 - 670 + 253 + 646 @@ -6424,7 +6424,7 @@ 0 0 291 - 856 + 854 @@ -6554,10 +6554,10 @@ false - + 22 - + 22 @@ -6569,10 +6569,10 @@ false - + 21 - + 21 @@ -6678,23 +6678,23 @@ true - false + true 2 - true + false false - - 100 - 30 + + 100 + false @@ -7093,30 +7093,30 @@ false + + 27 + 110 false - - 27 - true false + + 22 + 22 false - - 22 - false @@ -7302,7 +7302,7 @@ 0 0 1712 - 20 + 22 @@ -7533,8 +7533,8 @@ 0 0 - 424 - 574 + 488 + 643 @@ -8223,8 +8223,14 @@ - + + + + + + + @@ -8709,21 +8715,6 @@ Show/Hide grid - - - true - - - - :/Fractorium/Icons/Function-512.png:/Fractorium/Icons/Function-512.png - - - Show/Hide xforms - - - Show/Hide xforms - - Alternate editor/image @@ -8733,6 +8724,10 @@ + + + :/Fractorium/Icons/reset_scale.png:/Fractorium/Icons/reset_scale.png + Reset scale @@ -8748,6 +8743,50 @@ Ctrl+K + + + true + + + Pre + + + Show/Hide Pre Affines + + + + + true + + + All + + + Show All Pre Affines + + + + + true + + + Post + + + Show/Hide Post Affines + + + + + true + + + All + + + Show All Post Affines + + diff --git a/Source/Fractorium/FractoriumMenus.cpp b/Source/Fractorium/FractoriumMenus.cpp index 0cedf7a..2c47a63 100644 --- a/Source/Fractorium/FractoriumMenus.cpp +++ b/Source/Fractorium/FractoriumMenus.cpp @@ -766,17 +766,20 @@ void Fractorium::OnActionResetWorkspace(bool checked) /// Ignored void Fractorium::OnActionAlternateEditorImage(bool checked) { - if (DrawImage()) + if (DrawPreAffines() || DrawPostAffines()) { - ui.ActionDrawImage->setChecked(false); - ui.ActionDrawXforms->setChecked(true); - ui.ActionDrawGrid->setChecked(true); + ui.ActionDrawPreAffines->setChecked(false); + ui.ActionDrawAllPreAffines->setChecked(false); + ui.ActionDrawPostAffines->setChecked(false); + ui.ActionDrawAllPostAffines->setChecked(false); + ui.ActionDrawGrid->setChecked(false); + ui.ActionDrawImage->setChecked(true); } else { - ui.ActionDrawXforms->setChecked(false); - ui.ActionDrawGrid->setChecked(false); - ui.ActionDrawImage->setChecked(true); + ui.ActionDrawImage->setChecked(false); + ui.ActionDrawGrid->setChecked(true); + SyncAffineStateToToolbar(); } ui.GLDisplay->update(); diff --git a/Source/Fractorium/FractoriumToolbar.cpp b/Source/Fractorium/FractoriumToolbar.cpp index 8cd5a7a..684c10f 100644 --- a/Source/Fractorium/FractoriumToolbar.cpp +++ b/Source/Fractorium/FractoriumToolbar.cpp @@ -15,24 +15,37 @@ void Fractorium::InitToolbarUI() spGroup->addAction(ui.ActionDP); SyncOptionsToToolbar(); ui.ActionDrawImage->setChecked(true); - connect(ui.ActionCpu, SIGNAL(triggered(bool)), this, SLOT(OnActionCpu(bool)), Qt::QueuedConnection); - connect(ui.ActionCL, SIGNAL(triggered(bool)), this, SLOT(OnActionCL(bool)), Qt::QueuedConnection); - connect(ui.ActionSP, SIGNAL(triggered(bool)), this, SLOT(OnActionSP(bool)), Qt::QueuedConnection); - connect(ui.ActionDP, SIGNAL(triggered(bool)), this, SLOT(OnActionDP(bool)), Qt::QueuedConnection); - connect(ui.ActionStyle, SIGNAL(triggered(bool)), this, SLOT(OnActionStyle(bool)), Qt::QueuedConnection); - connect(ui.ActionStartStopRenderer, SIGNAL(triggered(bool)), this, SLOT(OnActionStartStopRenderer(bool)), Qt::QueuedConnection); - connect(ui.ActionDrawXforms, SIGNAL(triggered(bool)), this, SLOT(OnActionDrawXforms(bool)), Qt::QueuedConnection); - connect(ui.ActionDrawImage, SIGNAL(triggered(bool)), this, SLOT(OnActionDrawImage(bool)), Qt::QueuedConnection); - connect(ui.ActionDrawGrid, SIGNAL(triggered(bool)), this, SLOT(OnActionDrawGrid(bool)), Qt::QueuedConnection); + m_PreviousAffineState[(int)eAffineState::PRE] = true; + m_PreviousAffineState[(int)eAffineState::ALL_PRE] = true; + m_PreviousAffineState[(int)eAffineState::POST] = false; + m_PreviousAffineState[(int)eAffineState::ALL_POST] = false; + connect(ui.ActionCpu, SIGNAL(triggered(bool)), this, SLOT(OnActionCpu(bool)), Qt::QueuedConnection); + connect(ui.ActionCL, SIGNAL(triggered(bool)), this, SLOT(OnActionCL(bool)), Qt::QueuedConnection); + connect(ui.ActionSP, SIGNAL(triggered(bool)), this, SLOT(OnActionSP(bool)), Qt::QueuedConnection); + connect(ui.ActionDP, SIGNAL(triggered(bool)), this, SLOT(OnActionDP(bool)), Qt::QueuedConnection); + connect(ui.ActionStyle, SIGNAL(triggered(bool)), this, SLOT(OnActionStyle(bool)), Qt::QueuedConnection); + connect(ui.ActionStartStopRenderer, SIGNAL(triggered(bool)), this, SLOT(OnActionStartStopRenderer(bool)), Qt::QueuedConnection); + connect(ui.ActionDrawImage, SIGNAL(triggered(bool)), this, SLOT(OnActionDrawImage(bool)), Qt::QueuedConnection); + connect(ui.ActionDrawPreAffines, SIGNAL(triggered(bool)), this, SLOT(OnActionDrawAffines(bool)), Qt::QueuedConnection); + connect(ui.ActionDrawPostAffines, SIGNAL(triggered(bool)), this, SLOT(OnActionDrawAffines(bool)), Qt::QueuedConnection); + connect(ui.ActionDrawAllPreAffines, SIGNAL(triggered(bool)), this, SLOT(OnActionDrawAllAffines(bool)), Qt::QueuedConnection); + connect(ui.ActionDrawAllPostAffines, SIGNAL(triggered(bool)), this, SLOT(OnActionDrawAllAffines(bool)), Qt::QueuedConnection); + connect(ui.ActionDrawGrid, SIGNAL(triggered(bool)), this, SLOT(OnActionDrawGrid(bool)), Qt::QueuedConnection); } /// /// GUI wrapper functions, getters only. /// -bool Fractorium::DrawXforms() { return ui.ActionDrawXforms->isChecked(); } -bool Fractorium::DrawImage() { return ui.ActionDrawImage->isChecked(); } -bool Fractorium::DrawGrid() { return ui.ActionDrawGrid->isChecked(); } +bool Fractorium::DrawPreAffines() { return ui.ActionDrawPreAffines->isChecked(); } +bool Fractorium::DrawPostAffines() { return ui.ActionDrawPostAffines->isChecked(); } +bool Fractorium::DrawSelectedPre() { return !ui.ActionDrawAllPreAffines->isChecked(); } +bool Fractorium::DrawAllPre() { return ui.ActionDrawAllPreAffines->isChecked(); } +bool Fractorium::DrawSelectedPost() { return !ui.ActionDrawAllPostAffines->isChecked(); } +bool Fractorium::DrawAllPost() { return ui.ActionDrawAllPostAffines->isChecked(); } +bool Fractorium::DrawXforms() { return ui.ActionDrawPreAffines->isChecked() || ui.ActionDrawPostAffines->isChecked(); } +bool Fractorium::DrawImage() { return ui.ActionDrawImage->isChecked(); } +bool Fractorium::DrawGrid() { return ui.ActionDrawGrid->isChecked(); } /// /// Called when the CPU render option on the toolbar is clicked. @@ -122,18 +135,30 @@ void Fractorium::OnActionStartStopRenderer(bool checked) } /// -/// Toggle whether to show the affines. -/// Called when the editor image button is clicked. +/// Called when the pre affine button is clicked. /// -/// Check state, show editor if true, else hide. -void Fractorium::OnActionDrawXforms(bool checked) +/// Check state, show pre affines if true, else hide. +void Fractorium::OnActionDrawAffines(bool checked) { - m_Settings->ShowXforms(checked); + m_Settings->ShowXforms(checked); - if (!ui.ActionDrawImage->isChecked() && !ui.ActionDrawXforms->isChecked()) - ui.ActionDrawImage->setChecked(true); + if (!ui.ActionDrawImage->isChecked() && !(ui.ActionDrawPreAffines->isChecked() || ui.ActionDrawPostAffines->isChecked())) + ui.ActionDrawImage->setChecked(true); - ui.GLDisplay->update(); + SaveAffineState(); + + ui.GLDisplay->update(); +} + +/// +/// Toggle whether to show selected/all post affines. +/// Called when the show all post affine button is clicked. +/// +/// Check state, show all pre affines if true, else show selected. +void Fractorium::OnActionDrawAllAffines(bool checked) +{ + SaveAffineState(); + ui.GLDisplay->update(); } /// @@ -143,8 +168,8 @@ void Fractorium::OnActionDrawXforms(bool checked) /// Check state, show image if true, else hide. void Fractorium::OnActionDrawImage(bool checked) { - if (!ui.ActionDrawImage->isChecked() && !ui.ActionDrawXforms->isChecked()) - ui.ActionDrawXforms->setChecked(true); + if (!ui.ActionDrawImage->isChecked()) + SyncAffineStateToToolbar(); ui.GLDisplay->update(); } @@ -160,6 +185,32 @@ void Fractorium::OnActionDrawGrid(bool checked) ui.GLDisplay->update(); } +/// +/// Keep previous state of the affines to switch between Editor and Image +/// +void Fractorium::SaveAffineState() +{ + if(!ui.ActionDrawPreAffines->isChecked() && !ui.ActionDrawPostAffines->isChecked()) + return; + + m_PreviousAffineState[(int)eAffineState::PRE] = ui.ActionDrawPreAffines->isChecked(); + m_PreviousAffineState[(int)eAffineState::ALL_PRE] = ui.ActionDrawAllPreAffines->isChecked(); + m_PreviousAffineState[(int)eAffineState::POST] = ui.ActionDrawPostAffines->isChecked(); + m_PreviousAffineState[(int)eAffineState::ALL_POST] = ui.ActionDrawAllPostAffines->isChecked(); +} + +/// +/// Sync affine state data to the check state of the toolbar buttons. +/// This does not trigger a clicked() event. +/// +void Fractorium::SyncAffineStateToToolbar() +{ + ui.ActionDrawPreAffines->setChecked(m_PreviousAffineState[(int)eAffineState::PRE]); + ui.ActionDrawAllPreAffines->setChecked(m_PreviousAffineState[(int)eAffineState::ALL_PRE]); + ui.ActionDrawPostAffines->setChecked(m_PreviousAffineState[(int)eAffineState::POST]); + ui.ActionDrawAllPostAffines->setChecked(m_PreviousAffineState[(int)eAffineState::ALL_POST]); +} + /// /// Sync options data to the check state of the toolbar buttons. /// This does not trigger a clicked() event. @@ -196,5 +247,8 @@ void Fractorium::SyncOptionsToToolbar() } ui.ActionDrawGrid->setChecked(m_Settings->ShowGrid()); - ui.ActionDrawXforms->setChecked(m_Settings->ShowXforms()); -} \ No newline at end of file + ui.ActionDrawPreAffines->setChecked(m_Settings->ShowXforms()); + ui.ActionDrawAllPreAffines->setChecked(m_Settings->ShowXforms()); + + SaveAffineState(); +} diff --git a/Source/Fractorium/FractoriumXformsAffine.cpp b/Source/Fractorium/FractoriumXformsAffine.cpp index 82d6e0d..fdafc1a 100644 --- a/Source/Fractorium/FractoriumXformsAffine.cpp +++ b/Source/Fractorium/FractoriumXformsAffine.cpp @@ -154,8 +154,10 @@ void Fractorium::InitXformsAffineUI() m_PostSpins[5] = m_PostO2Spin; ui.PreAffineGroupBox->setChecked(false);//Flip both once to force enabling/disabling the disabling of the group boxes and the corner buttons. ui.PreAffineGroupBox->setChecked(true);//Pre affine enabled. - ui.PostAffineGroupBox->setChecked(true); - ui.PostAffineGroupBox->setChecked(false);//Post affine disabled. + ui.PostAffineGroupBox->setChecked(false); + ui.PostAffineGroupBox->setChecked(true);//Post affine enabled. + ui.PreAffineShowGroupBox->setVisible(false); // michel - to delete + ui.PostAffineShowGroupBox->setVisible(false); // michel - to delete } /// @@ -791,13 +793,9 @@ void Fractorium::SetupAffineSpinner(QTableWidget* table, const QObject* receiver } /// -/// GUI wrapper functions, getters only. +/// GUI wrapper function, getter only. /// -bool Fractorium::DrawSelectedPre() { return ui.ShowPreAffineSelectedRadio->isChecked(); } -bool Fractorium::DrawAllPre() { return ui.ShowPreAffineAllRadio->isChecked(); } -bool Fractorium::DrawSelectedPost() { return ui.ShowPostAffineSelectedRadio->isChecked(); } -bool Fractorium::DrawAllPost() { return ui.ShowPostAffineAllRadio->isChecked(); } bool Fractorium::LocalPivot() { return ui.LocalPivotRadio->isChecked(); } template class FractoriumEmberController; diff --git a/Source/Fractorium/GLWidget.cpp b/Source/Fractorium/GLWidget.cpp index cc0a79f..1cbe296 100644 --- a/Source/Fractorium/GLWidget.cpp +++ b/Source/Fractorium/GLWidget.cpp @@ -523,8 +523,8 @@ void GLWidget::paintGL() } //Affine drawing. - bool pre = m_Fractorium->ui.PreAffineGroupBox->isChecked(); - bool post = m_Fractorium->ui.PostAffineGroupBox->isChecked(); + bool pre = m_Fractorium->DrawPreAffines(); + bool post = m_Fractorium->DrawPostAffines(); this->glEnable(GL_BLEND); this->glEnable(GL_LINE_SMOOTH); this->glEnable(GL_POINT_SMOOTH); @@ -1757,8 +1757,8 @@ void GLWidget::DrawAffineHelper(int index, float circleWidth, float lineWidth, b template int GLEmberController::UpdateHover(const v3T& glCoords) { - bool pre = m_Fractorium->ui.PreAffineGroupBox->isChecked(); - bool post = m_Fractorium->ui.PostAffineGroupBox->isChecked(); + bool pre = m_Fractorium->DrawPreAffines(); + bool post = m_Fractorium->DrawPostAffines(); int i = 0, bestIndex = -1; T bestDist = 10; auto ember = m_FractoriumEmberController->CurrentEmber(); diff --git a/Source/Fractorium/Icons/grid.png b/Source/Fractorium/Icons/grid.png old mode 100644 new mode 100755 index 5169259..6ef219b Binary files a/Source/Fractorium/Icons/grid.png and b/Source/Fractorium/Icons/grid.png differ diff --git a/Source/Fractorium/Icons/pic.png b/Source/Fractorium/Icons/pic.png old mode 100644 new mode 100755 index f617f2a..3d3d328 Binary files a/Source/Fractorium/Icons/pic.png and b/Source/Fractorium/Icons/pic.png differ diff --git a/Source/Fractorium/Icons/reset_scale.png b/Source/Fractorium/Icons/reset_scale.png new file mode 100755 index 0000000..9189258 Binary files /dev/null and b/Source/Fractorium/Icons/reset_scale.png differ