Geometrize  1.0
An application for geometrizing images into geometric primitives
Public Member Functions | Private Member Functions | Private Attributes | List of all members
geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl Class Reference
Collaboration diagram for geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl:
Collaboration graph
[legend]

Public Member Functions

 ImageTaskRunnerWidgetImpl (ImageTaskRunnerWidget *pQ)
 
 ~ImageTaskRunnerWidgetImpl ()=default
 
ImageTaskRunnerWidgetImpl operator= (const ImageTaskRunnerWidgetImpl &)=delete
 
 ImageTaskRunnerWidgetImpl (const ImageTaskRunnerWidgetImpl &)=delete
 
void setImageTask (task::ImageTask *task)
 
void setRunStopButtonText (const QString &text)
 
void syncUserInterface ()
 
void toggleRunning ()
 
void stepModel ()
 
void clearModel ()
 
void setShapes (const geometrize::ShapeTypes shapeTypes, const bool enable)
 
void setShapeOpacity (const int opacity)
 
void setCandidateShapesPerStep (const int value)
 
void setMutationsPerCandidateShape (const int value)
 
void setRandomSeed (const int value)
 
void setMaxThreads (const int value)
 
void onLanguageChange ()
 

Private Member Functions

void populateUi ()
 

Private Attributes

geometrize::dialog::RangeSliderm_hBoundsSlider { nullptr }
 
geometrize::dialog::RangeSliderm_vBoundsSlider { nullptr }
 
geometrize::task::ImageTaskm_task { nullptr }
 
ImageTaskRunnerWidgetq { nullptr }
 
std::unique_ptr< Ui::ImageTaskRunnerWidget > ui
 

Constructor & Destructor Documentation

◆ ImageTaskRunnerWidgetImpl() [1/2]

geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::ImageTaskRunnerWidgetImpl ( ImageTaskRunnerWidget pQ)
inline
24  : q{pQ}, ui{std::make_unique<Ui::ImageTaskRunnerWidget>()}
25  {
26  ui->setupUi(q);
27 
28  auto shapeLayout = new geometrize::layout::FlowLayout();
29  shapeLayout->addWidget(ui->usesCircles);
30  shapeLayout->addWidget(ui->usesEllipses);
31  shapeLayout->addWidget(ui->usesLines);
32  shapeLayout->addWidget(ui->usesPolylines);
33  shapeLayout->addWidget(ui->usesQuadraticBeziers);
34  shapeLayout->addWidget(ui->usesRectangles);
35  shapeLayout->addWidget(ui->usesRotatedEllipses);
36  shapeLayout->addWidget(ui->usesRotatedRectangles);
37  shapeLayout->addWidget(ui->usesTriangles);
38  ui->shapeTypesContainer->setLayout(shapeLayout);
39 
40  ui->useBoundsCheckbox->setChecked(false);
41  m_hBoundsSlider = new geometrize::dialog::RangeSlider(Qt::Horizontal, RangeSlider::Option::DoubleHandles, nullptr);
42  m_vBoundsSlider = new geometrize::dialog::RangeSlider(Qt::Vertical, RangeSlider::Option::DoubleHandles, nullptr);
43  for(auto* slider : { m_hBoundsSlider, m_vBoundsSlider}) {
44  slider->SetRange(0, 100);
45  slider->setLowerValue(0);
46  slider->setUpperValue(100);
47  }
48 
49  connect(ui->useBoundsCheckbox, &QCheckBox::stateChanged, [this](const int state) {
50  m_task->getPreferences().setShapeBoundsEnabled(state != Qt::Unchecked);
51  });
52 
53  connect(m_hBoundsSlider, &geometrize::dialog::RangeSlider::lowerValueChanged, [this](const int value) {
54  m_task->getPreferences().setShapeBoundsXMinPercent(static_cast<double>(value));
55  emit q->shapeBoundsSliderMoved();
56  });
57  connect(m_hBoundsSlider, &geometrize::dialog::RangeSlider::upperValueChanged, [this](const int value) {
58  m_task->getPreferences().setShapeBoundsXMaxPercent(static_cast<double>(value));
59  emit q->shapeBoundsSliderMoved();
60  });
61  connect(m_vBoundsSlider, &geometrize::dialog::RangeSlider::lowerValueChanged, [this](const int value) {
62  m_task->getPreferences().setShapeBoundsYMinPercent(static_cast<double>(value));
63  emit q->shapeBoundsSliderMoved();
64  });
65  connect(m_vBoundsSlider, &geometrize::dialog::RangeSlider::upperValueChanged, [this](const int value) {
66  m_task->getPreferences().setShapeBoundsYMaxPercent(static_cast<double>(value));
67  emit q->shapeBoundsSliderMoved();
68  });
69  ui->boundsLayout->addWidget(m_hBoundsSlider);
70  ui->boundsLayout->addWidget(m_vBoundsSlider);
71 
72  auto runnerButtonsLayout = new geometrize::layout::FlowLayout();
73  runnerButtonsLayout->addWidget(ui->runStopButton);
74  runnerButtonsLayout->addWidget(ui->stepButton);
75  runnerButtonsLayout->addWidget(ui->clearButton);
76 
77  ui->bottomButtonsContainer->setLayout(runnerButtonsLayout);
78 
79  populateUi();
80  }

◆ ~ImageTaskRunnerWidgetImpl()

geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::~ImageTaskRunnerWidgetImpl ( )
default

◆ ImageTaskRunnerWidgetImpl() [2/2]

geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::ImageTaskRunnerWidgetImpl ( const ImageTaskRunnerWidgetImpl )
delete

Member Function Documentation

◆ clearModel()

void geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::clearModel ( )
inline
148  {
149  emit q->clearButtonClicked();
150  }

◆ onLanguageChange()

void geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::onLanguageChange ( )
inline
193  {
194  ui->retranslateUi(q);
195  populateUi();
196  }
Here is the call graph for this function:

◆ operator=()

ImageTaskRunnerWidgetImpl geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::operator= ( const ImageTaskRunnerWidgetImpl )
delete

◆ populateUi()

void geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::populateUi ( )
inlineprivate
200  {
201 
202  }
Here is the caller graph for this function:

◆ setCandidateShapesPerStep()

void geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::setCandidateShapesPerStep ( const int  value)
inline
169  {
170  ui->candidateShapesPerStepCountLabel->setText(QLocale().toString(value));
171 
173  }
Here is the call graph for this function:

◆ setImageTask()

void geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::setImageTask ( task::ImageTask task)
inline
86  {
87  m_task = task;
88  }

◆ setMaxThreads()

void geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::setMaxThreads ( const int  value)
inline
188  {
190  }
Here is the call graph for this function:

◆ setMutationsPerCandidateShape()

void geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::setMutationsPerCandidateShape ( const int  value)
inline
176  {
177  ui->mutationsPerCandidateShapeCountLabel->setText(QLocale().toString(value));
178 
180  }
Here is the call graph for this function:

◆ setRandomSeed()

void geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::setRandomSeed ( const int  value)
inline
183  {
184  m_task->getPreferences().setSeed(value);
185  }
Here is the call graph for this function:

◆ setRunStopButtonText()

void geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::setRunStopButtonText ( const QString &  text)
inline
91  {
92  ui->runStopButton->setText(text);
93  }

◆ setShapeOpacity()

void geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::setShapeOpacity ( const int  opacity)
inline
162  {
163  ui->shapeOpacityValueLabel->setText(QLocale().toString(opacity));
164 
165  m_task->getPreferences().setShapeAlpha(opacity);
166  }
Here is the call graph for this function:

◆ setShapes()

void geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::setShapes ( const geometrize::ShapeTypes  shapeTypes,
const bool  enable 
)
inline
153  {
154  if(enable) {
155  m_task->getPreferences().enableShapeTypes(shapeTypes);
156  } else {
157  m_task->getPreferences().disableShapeTypes(shapeTypes);
158  }
159  }
Here is the call graph for this function:

◆ stepModel()

void geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::stepModel ( )
inline
143  {
144  emit q->stepButtonClicked();
145  }

◆ syncUserInterface()

void geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::syncUserInterface ( )
inline
96  {
97  if(m_task == nullptr) {
98  return;
99  }
100 
102 
103  const geometrize::ImageRunnerOptions opts{prefs.getImageRunnerOptions()}; // Geometrize library options
104 
105  const auto usesShape = [&opts](const geometrize::ShapeTypes type) -> bool {
106  const std::uint32_t shapes{static_cast<std::uint32_t>(opts.shapeTypes)};
107  return shapes & type;
108  };
109 
110  ui->usesRectangles->setChecked(usesShape(geometrize::RECTANGLE));
111  ui->usesRotatedRectangles->setChecked(usesShape(geometrize::ROTATED_RECTANGLE));
112  ui->usesTriangles->setChecked(usesShape(geometrize::TRIANGLE));
113  ui->usesEllipses->setChecked(usesShape(geometrize::ELLIPSE));
114  ui->usesRotatedEllipses->setChecked(usesShape(geometrize::ROTATED_ELLIPSE));
115  ui->usesCircles->setChecked(usesShape(geometrize::CIRCLE));
116  ui->usesLines->setChecked(usesShape(geometrize::LINE));
117  ui->usesQuadraticBeziers->setChecked(usesShape(geometrize::QUADRATIC_BEZIER));
118  ui->usesPolylines->setChecked(usesShape(geometrize::POLYLINE));
119 
120  ui->shapeOpacitySlider->setValue(opts.alpha);
121  ui->candidateShapesPerStepSlider->setValue(opts.shapeCount);
122  ui->mutationsPerCandidateShapeSlider->setValue(opts.maxShapeMutations);
123  ui->randomSeedSpinBox->setValue(opts.seed);
124 
125  // Constrain max threads based on global settings
126  ui->maxThreadsSpinBox->setMaximum(geometrize::preferences::getGlobalPreferences().getImageTaskMaxThreads());
127 
128  ui->maxThreadsSpinBox->setValue(opts.maxThreads);
129 
130  ui->useBoundsCheckbox->setChecked(opts.shapeBounds.enabled);
131  m_hBoundsSlider->setLowerValue(opts.shapeBounds.xMinPercent);
132  m_hBoundsSlider->setUpperValue(opts.shapeBounds.xMaxPercent);
133  m_vBoundsSlider->setLowerValue(opts.shapeBounds.yMinPercent);
134  m_vBoundsSlider->setUpperValue(opts.shapeBounds.yMaxPercent);
135  }
Here is the call graph for this function:

◆ toggleRunning()

void geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::toggleRunning ( )
inline
138  {
139  emit q->runStopButtonClicked();
140  }

Member Data Documentation

◆ m_hBoundsSlider

geometrize::dialog::RangeSlider* geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::m_hBoundsSlider { nullptr }
private

◆ m_task

geometrize::task::ImageTask* geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::m_task { nullptr }
private

◆ m_vBoundsSlider

geometrize::dialog::RangeSlider* geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::m_vBoundsSlider { nullptr }
private

◆ q

ImageTaskRunnerWidget* geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::q { nullptr }
private

◆ ui

std::unique_ptr<Ui::ImageTaskRunnerWidget> geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::ui
private

The documentation for this class was generated from the following file:
geometrize::dialog::ImageTaskRunnerWidget::shapeBoundsSliderMoved
void shapeBoundsSliderMoved()
geometrize::preferences::GlobalPreferences::getImageTaskMaxThreads
std::uint32_t getImageTaskMaxThreads() const
getImageTaskMaxThreads Gets the maximum number of threads the image task should use.
Definition: globalpreferences.cpp:628
geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::ui
std::unique_ptr< Ui::ImageTaskRunnerWidget > ui
Definition: imagetaskrunnerwidget.cpp:208
geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::populateUi
void populateUi()
Definition: imagetaskrunnerwidget.cpp:199
geometrize::preferences::ImageTaskPreferences::setMaxShapeMutations
void setMaxShapeMutations(std::uint32_t maxMutations)
Definition: imagetaskpreferences.cpp:265
geometrize::dialog::RangeSlider::setUpperValue
void setUpperValue(int aUpperValue)
Definition: rangeslider.cpp:328
geometrize::preferences::ImageTaskPreferences::setSeed
void setSeed(std::uint32_t seed)
Definition: imagetaskpreferences.cpp:270
geometrize::dialog::ImageTaskRunnerWidget::runStopButtonClicked
void runStopButtonClicked()
geometrize::dialog::RangeSlider::setLowerValue
void setLowerValue(int aLowerValue)
Definition: rangeslider.cpp:310
geometrize::dialog::ImageTaskRunnerWidget::stepButtonClicked
void stepButtonClicked()
geometrize::layout::FlowLayout
The FlowLayout class implements a layout that arranges components in a directional flow,...
Definition: flowlayout.h:53
geometrize::preferences::ImageTaskPreferences::setCandidateShapeCount
void setCandidateShapeCount(std::uint32_t shapeCount)
Definition: imagetaskpreferences.cpp:260
geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::m_task
geometrize::task::ImageTask * m_task
Definition: imagetaskrunnerwidget.cpp:206
geometrize::preferences::ImageTaskPreferences
The ImageTaskPreferences class models the preferences associated with an image task.
Definition: imagetaskpreferences.h:29
geometrize::preferences::ImageTaskPreferences::getImageRunnerOptions
geometrize::ImageRunnerOptions getImageRunnerOptions() const
getImageRunnerOptions Gets a copy of the image runner options.
Definition: imagetaskpreferences.cpp:235
geometrize::preferences::ImageTaskPreferences::setShapeAlpha
void setShapeAlpha(std::uint8_t alpha)
Definition: imagetaskpreferences.cpp:255
geometrize::dialog::RangeSlider::lowerValueChanged
void lowerValueChanged(int aLowerValue)
geometrize::preferences::ImageTaskPreferences::setMaxThreads
void setMaxThreads(std::uint32_t maxThreads)
Definition: imagetaskpreferences.cpp:275
geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::q
ImageTaskRunnerWidget * q
Definition: imagetaskrunnerwidget.cpp:207
geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::m_hBoundsSlider
geometrize::dialog::RangeSlider * m_hBoundsSlider
Definition: imagetaskrunnerwidget.cpp:204
geometrize::dialog::RangeSlider::upperValueChanged
void upperValueChanged(int aUpperValue)
geometrize::dialog::RangeSlider
Definition: rangeslider.h:37
geometrize::preferences::ImageTaskPreferences::disableShapeTypes
void disableShapeTypes(geometrize::ShapeTypes shapes)
Definition: imagetaskpreferences.cpp:245
geometrize::dialog::ImageTaskRunnerWidget::clearButtonClicked
void clearButtonClicked()
geometrize::preferences::ImageTaskPreferences::enableShapeTypes
void enableShapeTypes(geometrize::ShapeTypes shapes)
Definition: imagetaskpreferences.cpp:240
geometrize::dialog::ImageTaskRunnerWidget::ImageTaskRunnerWidgetImpl::m_vBoundsSlider
geometrize::dialog::RangeSlider * m_vBoundsSlider
Definition: imagetaskrunnerwidget.cpp:205
geometrize::preferences::getGlobalPreferences
geometrize::preferences::GlobalPreferences & getGlobalPreferences()
getGlobalPreferences Shorthand function that gets a reference to the shared global preferences object...
Definition: globalpreferences.cpp:32
geometrize::task::ImageTask::getPreferences
geometrize::preferences::ImageTaskPreferences & getPreferences()
getPreferences Gets a reference to the current preferences of this task.
Definition: imagetask.cpp:392