Skip to content

Commit

Permalink
Started implementation of Navi for Objects dock
Browse files Browse the repository at this point in the history
  • Loading branch information
buddhi1980 committed Sep 29, 2024
1 parent 7c601d0 commit 82f9f76
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 53 deletions.
90 changes: 63 additions & 27 deletions mandelbulber2/qt/dock_fractal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
#include "src/write_log.hpp"

#include "formula/definition/all_fractal_list.hpp"
#include "navigator_window.h"

cDockFractal::cDockFractal(QWidget *parent)
: QWidget(parent), cMyWidgetWithParams(), ui(new Ui::cDockFractal)
Expand Down Expand Up @@ -176,6 +177,8 @@ void cDockFractal::ConnectSignals() const
SLOT(slotToggledFractalEnable(int, bool)));
connect(ui->tabWidget_fractals->tabBar(), SIGNAL(currentChanged(int)), this,
SLOT(slotChangedFractalTab(int)));
connect(
ui->pushButton_local_navi, &QPushButton::clicked, this, &cDockFractal::slotPressedButtonNavi);

connect(
ui->tabWidget_fractals, SIGNAL(swapTabs(int, int)), this, SLOT(slotFractalSwap(int, int)));
Expand Down Expand Up @@ -210,7 +213,7 @@ void cDockFractal::InitializeFractalUi() const
->findChild<QScrollArea *>("scrollArea_fractal_" + QString::number(i + 1))
->setEnabled(false);
}
fractalTabs[i]->AssignParameterContainers(gPar, gParFractal);
fractalTabs[i]->AssignParameterContainers(params, fractalParams);
fractalTabs[i]->Init(i == 0, i);
}

Expand All @@ -224,7 +227,7 @@ void cDockFractal::slotFractalSwap(int swapA, int swapB) const
// qDebug() << "swapping " << swapA << " with " << swapB;

// read all data from ui
gMainInterface->SynchronizeInterface(gPar, gParFractal, qInterface::read);
gMainInterface->SynchronizeInterface(params, fractalParams, qInterface::read);

// swap formula specific fields in gPar
QStringList gParFormulaSpecificFields({"formula", "formula_iterations", "formula_weight",
Expand All @@ -237,9 +240,9 @@ void cDockFractal::slotFractalSwap(int swapA, int swapB) const
{
// to keep original properties of parameters
cOneParameter formulaA =
gPar->GetAsOneParameter(gParFormulaSpecificFields.at(i) + "_" + QString::number(swapA + 1));
params->GetAsOneParameter(gParFormulaSpecificFields.at(i) + "_" + QString::number(swapA + 1));
cOneParameter formulaB =
gPar->GetAsOneParameter(gParFormulaSpecificFields.at(i) + "_" + QString::number(swapB + 1));
params->GetAsOneParameter(gParFormulaSpecificFields.at(i) + "_" + QString::number(swapB + 1));

// get only actual values and swap between slots
cMultiVal multiA = formulaB.GetMultiVal(parameterContainer::valueActual);
Expand All @@ -250,18 +253,18 @@ void cDockFractal::slotFractalSwap(int swapA, int swapB) const
formulaB.SetMultiVal(multiB, parameterContainer::valueActual);

// writing parameters to original containers
gPar->SetFromOneParameter(
params->SetFromOneParameter(
gParFormulaSpecificFields.at(i) + "_" + QString::number(swapA + 1), formulaA);
gPar->SetFromOneParameter(
params->SetFromOneParameter(
gParFormulaSpecificFields.at(i) + "_" + QString::number(swapB + 1), formulaB);
}

// swap formula specific fields in gParFractal by swapping whole container
fractalTabs[swapA]->SynchronizeFractal(gParFractal->at(swapB), qInterface::read);
fractalTabs[swapB]->SynchronizeFractal(gParFractal->at(swapA), qInterface::read);
// swap formula specific fields in fractalParams by swapping whole container
fractalTabs[swapA]->SynchronizeFractal(fractalParams->at(swapB), qInterface::read);
fractalTabs[swapB]->SynchronizeFractal(fractalParams->at(swapA), qInterface::read);

// write swapped changes to ui
gMainInterface->SynchronizeInterface(gPar, gParFractal, qInterface::write);
gMainInterface->SynchronizeInterface(params, fractalParams, qInterface::write);
}

void cDockFractal::slotChangedCheckBoxBooleanOperators(bool state) const
Expand Down Expand Up @@ -340,8 +343,8 @@ void cDockFractal::slotGroupCheckJuliaModeToggled(bool state)

void cDockFractal::slotChangedJuliaPoint() const
{
if (ui->groupCheck_julia_mode->isChecked() && gPar->Get<bool>("julia_preview")
&& gInterfaceReadyForSynchronization)
if (ui->groupBox_julia_preview && ui->groupCheck_julia_mode->isChecked()
&& params->Get<bool>("julia_preview") && gInterfaceReadyForSynchronization)
{
std::shared_ptr<cParameterContainer> params(new cParameterContainer());
InitParams(params);
Expand All @@ -351,7 +354,7 @@ void cDockFractal::slotChangedJuliaPoint() const

const double cameraDistance = params->Get<double>("julia_preview_distance");
CVector3 target(0.0, 0.0, 0.0);
CVector3 direction = gPar->Get<CVector3>("camera") - gPar->Get<CVector3>("target");
CVector3 direction = params->Get<CVector3>("camera") - params->Get<CVector3>("target");
direction.Normalize();
CVector3 camera = target + direction * cameraDistance;

Expand All @@ -360,24 +363,24 @@ void cDockFractal::slotChangedJuliaPoint() const
params->Set("julia_mode", true);
params->Set("ambient_occlusion_enabled", true);
params->Set("ambient_occlusion_mode", int(params::AOModeFast));
params->Copy("camera_top", gPar);
params->Copy("camera_top", params);
for (int i = 1; i <= NUMBER_OF_FRACTALS; i++)
{
params->Copy(QString("formula_%1").arg(i), gPar);
params->Copy(QString("formula_iterations_%1").arg(i), gPar);
params->Copy(QString("fractal_enable_%1").arg(i), gPar);
params->Copy(QString("formula_weight_%1").arg(i), gPar);
params->Copy(QString("formula_start_iteration_%1").arg(i), gPar);
params->Copy(QString("formula_stop_iteration_%1").arg(i), gPar);
params->Copy(QString("dont_add_c_constant_%1").arg(i), gPar);
params->Copy(QString("check_for_bailout_%1").arg(i), gPar);
params->Copy(QString("formula_%1").arg(i), params);
params->Copy(QString("formula_iterations_%1").arg(i), params);
params->Copy(QString("fractal_enable_%1").arg(i), params);
params->Copy(QString("formula_weight_%1").arg(i), params);
params->Copy(QString("formula_start_iteration_%1").arg(i), params);
params->Copy(QString("formula_stop_iteration_%1").arg(i), params);
params->Copy(QString("dont_add_c_constant_%1").arg(i), params);
params->Copy(QString("check_for_bailout_%1").arg(i), params);
}
params->Copy("hybrid_fractal_enable", gPar);
params->Copy("fractal_constant_factor", gPar);
params->Copy("opencl_mode", gPar);
params->Copy("opencl_enabled", gPar);
params->Copy("hybrid_fractal_enable", params);
params->Copy("fractal_constant_factor", params);
params->Copy("opencl_mode", params);
params->Copy("opencl_enabled", params);

ui->previewwidget_julia->AssignParameters(params, gParFractal);
ui->previewwidget_julia->AssignParameters(params, fractalParams);
ui->previewwidget_julia->update();
}
}
Expand Down Expand Up @@ -449,3 +452,36 @@ void cDockFractal::RegeneratePrimitives()
{
ui->widgetPrimitivesManager->Regenerate();
}

void cDockFractal::slotPressedButtonNavi()
{
gMainInterface->SynchronizeInterface(params, fractalParams, qInterface::read);
cNavigatorWindow *navigator = new cNavigatorWindow();
cDockFractal *leftWidget = new cDockFractal();
navigator->AddLeftWidget(leftWidget);
navigator->setAttribute(Qt::WA_DeleteOnClose);
navigator->SetInitialParameters(params, fractalParams);
navigator->SetMouseClickFunction(gMainInterface->GetMouseClickFunction());
leftWidget->HideSomeWidgetsForNavi();
leftWidget->InitializeFractalUi();
navigator->SynchronizeInterface(qInterface::write);

connect(navigator, &cNavigatorWindow::signalChangesAccepted, this,
&cDockFractal::slotNewParametersFromNavi);

navigator->show();
navigator->AllPrepared();
}

void cDockFractal::slotNewParametersFromNavi()
{
// TODO: implement this
}

void cDockFractal::HideSomeWidgetsForNavi()
{
delete ui->pushButton_get_julia_constant;
ui->pushButton_get_julia_constant = nullptr;
delete ui->groupBox_julia_preview;
ui->groupBox_julia_preview = nullptr;
}
3 changes: 3 additions & 0 deletions mandelbulber2/qt/dock_fractal.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ class cDockFractal : public QWidget, public cMyWidgetWithParams
virtual void AssignSpecialWidgets(
RenderedImage *_renderedImage, QComboBox *_mouseFunctionCombo) override;
void RegeneratePrimitives();
void HideSomeWidgetsForNavi();

public slots:
void slotSynchronizeInterfaceJulia(std::shared_ptr<cParameterContainer> par) const;
Expand All @@ -91,6 +92,8 @@ private slots:
void slotToggledFractalEnable(int fractalIndex, bool enabled) const;
void slotFractalSwap(int swapA, int swapB) const;
void slotChangedFractalTab(int index);
void slotPressedButtonNavi();
void slotNewParametersFromNavi();

signals:
void signalUpdatePrimitivesCombos();
Expand Down
65 changes: 39 additions & 26 deletions mandelbulber2/qt/dock_fractal.ui
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,19 @@
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_local_navi">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Navi</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
Expand Down Expand Up @@ -156,8 +169,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>374</width>
<height>808</height>
<width>372</width>
<height>802</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayoutScroll_fractal_1" stretch="1,0">
Expand Down Expand Up @@ -225,8 +238,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>96</width>
<height>26</height>
<width>92</width>
<height>22</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayoutScroll_fractal_3">
Expand Down Expand Up @@ -284,8 +297,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>96</width>
<height>26</height>
<width>92</width>
<height>22</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayoutScroll_fractal_4">
Expand Down Expand Up @@ -343,8 +356,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>96</width>
<height>26</height>
<width>92</width>
<height>22</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayoutScroll_fractal_5">
Expand Down Expand Up @@ -402,8 +415,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>96</width>
<height>26</height>
<width>92</width>
<height>22</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayoutScroll_fractal_6">
Expand Down Expand Up @@ -461,8 +474,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>96</width>
<height>26</height>
<width>92</width>
<height>22</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayoutScroll_fractal_7">
Expand Down Expand Up @@ -520,8 +533,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>96</width>
<height>26</height>
<width>92</width>
<height>22</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayoutScroll_fractal_8">
Expand Down Expand Up @@ -579,8 +592,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>96</width>
<height>26</height>
<width>92</width>
<height>22</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayoutScroll_fractal_9">
Expand Down Expand Up @@ -638,8 +651,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>96</width>
<height>26</height>
<width>92</width>
<height>22</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayoutScroll_fractal_10">
Expand Down Expand Up @@ -747,7 +760,7 @@
<x>0</x>
<y>0</y>
<width>276</width>
<height>811</height>
<height>857</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_68">
Expand Down Expand Up @@ -2282,8 +2295,8 @@ distance estimation)</string>
<rect>
<x>0</x>
<y>0</y>
<width>382</width>
<height>853</height>
<width>257</width>
<height>227</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_74">
Expand Down Expand Up @@ -2644,11 +2657,6 @@ with visible shadows of fractal objects</string>
<extends>QPushButton</extends>
<header>buton_reset_settings_from_widget.h</header>
</customwidget>
<customwidget>
<class>MyComboBox</class>
<extends>QComboBox</extends>
<header>my_combo_box.h</header>
</customwidget>
<customwidget>
<class>MyDoubleSpinBox</class>
<extends>QDoubleSpinBox</extends>
Expand All @@ -2659,6 +2667,11 @@ with visible shadows of fractal objects</string>
<extends>QPushButton</extends>
<header>buton_random_settings_from_widget.h</header>
</customwidget>
<customwidget>
<class>MyComboBox</class>
<extends>QComboBox</extends>
<header>my_combo_box.h</header>
</customwidget>
<customwidget>
<class>cMaterialSelector</class>
<extends>QWidget</extends>
Expand Down

0 comments on commit 82f9f76

Please sign in to comment.