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

Public Member Functions

 ImageTaskScriptingWidgetImpl (ImageTaskScriptingWidget *pQ)
 
 ~ImageTaskScriptingWidgetImpl ()=default
 
ImageTaskScriptingWidgetImpl operator= (const ImageTaskScriptingWidgetImpl &)=delete
 
 ImageTaskScriptingWidgetImpl (const ImageTaskScriptingWidgetImpl &)=delete
 
void setImageTask (task::ImageTask *task)
 
void syncUserInterface ()
 
std::map< std::string, std::string > getShapeMutationScripts ()
 
std::map< std::string, std::string > getScripts () const
 
bool evaluateScriptsWithBooleanReturnValue (const std::string &scriptPrefix) const
 
void evaluateScriptsWithNoReturnValue (const std::string &scriptGroupNamePrefix) const
 
bool evaluateStopConditionScripts () const
 
void evaluateOnStopConditionMetScripts () const
 
void evaluateBeforeStepScripts () const
 
void evaluateAfterStepScripts () const
 
bool evaluateAddShapePreconditionScripts () const
 
void evaluateBeforeAddShapeScripts () const
 
void evaluateAfterAddShapeScripts () const
 
void evaluateOnPenInputEventScripts () const
 
void evaluateOnPenProximityEnterEventScripts () const
 
void evaluateOnPenProximityExitEventScripts () const
 
void evaluateOnKeyDownEventScripts () const
 
void evaluateOnKeyUpEventScripts () const
 
void evaluateOnMouseDownEventScripts () const
 
void evaluateOnMouseUpEventScripts () const
 
void evaluateOnMouseMoveEventScripts () const
 
void evaluateOnMouseWheelEventScripts () const
 
void evaluateOnTimedUpdateEventScripts () const
 
void onLanguageChange ()
 

Private Member Functions

void addScriptWidget (const std::string &scriptDisplayName, const std::string &functionName, const std::string &scriptCode)
 
void addBeforeStepCallbackWidget (const std::string &scriptCode)
 
void addAfterStepCallbackWidget (const std::string &scriptCode)
 
void addCustomStopConditionWidget (const std::string &scriptCode)
 
void addOnStopConditionMetWidget (const std::string &scriptCode)
 
void addShapePreconditionWidget (const std::string &scriptCode)
 
void addBeforeAddShapeCallbackWidget (const std::string &scriptCode)
 
void addAfterAddShapeCallbackWidget (const std::string &scriptCode)
 
void addOnPenInputWidget (const std::string &scriptCode)
 
void addOnPenProximityEnterWidget (const std::string &scriptCode)
 
void addOnPenProximityExitWidget (const std::string &scriptCode)
 
void addOnKeyDownWidget (const std::string &scriptCode)
 
void addOnKeyUpWidget (const std::string &scriptCode)
 
void addOnMouseDownWidget (const std::string &scriptCode)
 
void addOnMouseUpWidget (const std::string &scriptCode)
 
void addOnMouseMoveWidget (const std::string &scriptCode)
 
void addOnMouseWheelWidget (const std::string &scriptCode)
 
void addOnTimedUpdateWidget (const std::string &scriptCode)
 
void revealShapeScriptingPanel ()
 
void setScripts (const std::map< std::string, std::string > &scripts)
 
dialog::ScriptEditorWidgetfindEditor (const std::string &editorId)
 
geometrize::dialog::ImageTaskShapeScriptingPanelgetShapeScriptingPanel () const
 
void populateUi ()
 
void populateScriptSelectionComboBox (QComboBox *combo, const std::map< std::string, std::string > &scripts)
 
std::string getScriptForSelectedComboBoxItem (QComboBox *combo)
 
void buildScriptSelectionComboBoxes ()
 
std::string makeUniqueFunctionName (const std::string &prefix)
 

Static Private Member Functions

static bool startsWith (const std::string &s, const std::string &prefix)
 

Private Attributes

task::ImageTaskm_task {nullptr}
 
ImageTaskScriptingWidgetq
 
std::unique_ptr< Ui::ImageTaskScriptingWidget > ui
 

Constructor & Destructor Documentation

◆ ImageTaskScriptingWidgetImpl() [1/2]

geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::ImageTaskScriptingWidgetImpl ( ImageTaskScriptingWidget pQ)
inline
74  : q{pQ}, ui{std::make_unique<Ui::ImageTaskScriptingWidget>()}
75  {
76  ui->setupUi(q);
77  populateUi();
78 
80 
81  // Populate the preset script comboboxes with the default/built-in scripts
83 
84  connect(ui->clearScriptsButton, &QPushButton::clicked, [this]() {
85  QLayoutItem* item = nullptr;
86  while((item = ui->customScriptsEditorLayout->takeAt(0)) != nullptr) {
87  delete item->widget();
88  delete item;
89  }
90  });
91  connect(ui->rescanScriptsButton, &QPushButton::clicked, [this]() {
92  buildScriptSelectionComboBoxes();
93  });
94 
95  connect(ui->editShapeScriptsButton, &QPushButton::clicked, [this]() {
96  revealShapeScriptingPanel();
97  });
98 
99  connect(ui->addBeforeStepEvent, &QPushButton::clicked, [this]() {
100  addBeforeStepCallbackWidget(getScriptForSelectedComboBoxItem(ui->addBeforeStepPresetScriptsComboBox));
101  });
102  connect(ui->addAfterStepEvent, &QPushButton::clicked, [this]() {
103  addAfterStepCallbackWidget(getScriptForSelectedComboBoxItem(ui->addAfterStepPresetScriptsComboBox));
104  });
105  connect(ui->addStopConditionButton, &QPushButton::clicked, [this]() {
106  addCustomStopConditionWidget(getScriptForSelectedComboBoxItem(ui->addStopConditionPresetScriptsComboBox));
107  });
108  connect(ui->addShapePreconditionButton, &QPushButton::clicked, [this]() {
109  addShapePreconditionWidget(getScriptForSelectedComboBoxItem(ui->addShapePreconditionPresetScriptsComboBox));
110  });
111  connect(ui->onStopConditionMetEvent, &QPushButton::clicked, [this]() {
112  addOnStopConditionMetWidget(getScriptForSelectedComboBoxItem(ui->onStopConditionMetEventComboBox));
113  });
114  connect(ui->addBeforeAddShapeEvent, &QPushButton::clicked, [this]() {
115  addBeforeAddShapeCallbackWidget(getScriptForSelectedComboBoxItem(ui->addBeforeAddShapePresetScriptsComboBox));
116  });
117  connect(ui->addAfterAddShapeEvent, &QPushButton::clicked, [this]() {
118  addAfterAddShapeCallbackWidget(getScriptForSelectedComboBoxItem(ui->addAfterAddShapePresetScriptsComboBox));
119  });
120  connect(ui->onScenePenInputEvent, &QPushButton::clicked, [this]() {
121  addOnPenInputWidget(getScriptForSelectedComboBoxItem(ui->onScenePenInputEventPresetScriptsComboBox));
122  });
123  connect(ui->onPenProximityEnterEvent, &QPushButton::clicked, [this]() {
124  addOnPenProximityEnterWidget(getScriptForSelectedComboBoxItem(ui->onPenProximityEnterEventPresetScriptsComboBox));
125  });
126  connect(ui->onPenProximityExitEvent, &QPushButton::clicked, [this]() {
127  addOnPenProximityExitWidget(getScriptForSelectedComboBoxItem(ui->onPenProximityExitEventPresetScriptsComboBox));
128  });
129  connect(ui->onKeyDownEvent, &QPushButton::clicked, [this]() {
130  addOnKeyDownWidget(getScriptForSelectedComboBoxItem(ui->onKeyDownEventPresetScriptsComboBox));
131  });
132  connect(ui->onKeyUpEvent, &QPushButton::clicked, [this]() {
133  addOnKeyUpWidget(getScriptForSelectedComboBoxItem(ui->onKeyUpEventPresetScriptsComboBox));
134  });
135  connect(ui->onMouseDownEvent, &QPushButton::clicked, [this]() {
136  addOnMouseDownWidget(getScriptForSelectedComboBoxItem(ui->onMouseDownEventPresetScriptsComboBox));
137  });
138  connect(ui->onMouseUpEvent, &QPushButton::clicked, [this]() {
139  addOnMouseUpWidget(getScriptForSelectedComboBoxItem(ui->onMouseUpEventPresetScriptsComboBox));
140  });
141  connect(ui->onMouseMoveEvent, &QPushButton::clicked, [this]() {
142  addOnMouseMoveWidget(getScriptForSelectedComboBoxItem(ui->onMouseMoveEventPresetScriptsComboBox));
143  });
144  connect(ui->onMouseWheelEvent, &QPushButton::clicked, [this]() {
145  addOnMouseWheelWidget(getScriptForSelectedComboBoxItem(ui->onMouseWheelEventPresetScriptsComboBox));
146  });
147  connect(ui->onUpdateEvent, &QPushButton::clicked, [this]() {
148  addOnTimedUpdateWidget(getScriptForSelectedComboBoxItem(ui->onUpdateEventPresetScriptsComboBox));
149  });
150 
151  // Update the script code when the editor modifies them
152  connect(q, &geometrize::dialog::ImageTaskScriptingWidget::signal_scriptChanged, [this](const std::string& functionName, const std::string& code) {
153  if(m_task) {
154  m_task->getPreferences().setScript(functionName, code);
155  }
156  });
157 
158  // Reveal shape scripting panel if global preferences are set this way
160  if(prefs.shouldShowImageTaskScriptEditorByDefault()) {
162  }
163  }

◆ ~ImageTaskScriptingWidgetImpl()

geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::~ImageTaskScriptingWidgetImpl ( )
default

◆ ImageTaskScriptingWidgetImpl() [2/2]

geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::ImageTaskScriptingWidgetImpl ( const ImageTaskScriptingWidgetImpl )
delete

Member Function Documentation

◆ addAfterAddShapeCallbackWidget()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::addAfterAddShapeCallbackWidget ( const std::string &  scriptCode)
inlineprivate
423  {
424  addScriptWidget(tr("After Add Shape Callback").toStdString(), makeUniqueFunctionName(::afterAddShapeCallbackPrefix), scriptCode);
425  }

◆ addAfterStepCallbackWidget()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::addAfterStepCallbackWidget ( const std::string &  scriptCode)
inlineprivate
398  {
399  addScriptWidget(tr("After Step Callback").toStdString(), makeUniqueFunctionName(::afterStepCallbackPrefix), scriptCode);
400  }

◆ addBeforeAddShapeCallbackWidget()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::addBeforeAddShapeCallbackWidget ( const std::string &  scriptCode)
inlineprivate
418  {
419  addScriptWidget(tr("Before Add Shape Callback").toStdString(), makeUniqueFunctionName(::beforeAddShapeCallbackPrefix), scriptCode);
420  }

◆ addBeforeStepCallbackWidget()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::addBeforeStepCallbackWidget ( const std::string &  scriptCode)
inlineprivate
393  {
394  addScriptWidget(tr("Before Step Callback").toStdString(), makeUniqueFunctionName(::beforeStepCallbackPrefix), scriptCode);
395  }

◆ addCustomStopConditionWidget()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::addCustomStopConditionWidget ( const std::string &  scriptCode)
inlineprivate
403  {
404  addScriptWidget(tr("Custom Stop Condition").toStdString(), makeUniqueFunctionName(::stopConditionIdPrefix), scriptCode);
405  }

◆ addOnKeyDownWidget()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::addOnKeyDownWidget ( const std::string &  scriptCode)
inlineprivate
443  {
444  addScriptWidget(tr("On Key Down Callback").toStdString(), makeUniqueFunctionName(::onKeyDownCallbackPrefix), scriptCode);
445  }

◆ addOnKeyUpWidget()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::addOnKeyUpWidget ( const std::string &  scriptCode)
inlineprivate
448  {
449  addScriptWidget(tr("On Key Up Callback").toStdString(), makeUniqueFunctionName(::onKeyUpCallbackPrefix), scriptCode);
450  }

◆ addOnMouseDownWidget()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::addOnMouseDownWidget ( const std::string &  scriptCode)
inlineprivate
453  {
454  addScriptWidget(tr("On Mouse Down Callback").toStdString(), makeUniqueFunctionName(::onMouseDownCallbackPrefix), scriptCode);
455  }

◆ addOnMouseMoveWidget()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::addOnMouseMoveWidget ( const std::string &  scriptCode)
inlineprivate
463  {
464  addScriptWidget(tr("On Mouse Move Callback").toStdString(), makeUniqueFunctionName(::onMouseMoveCallbackPrefix), scriptCode);
465  }

◆ addOnMouseUpWidget()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::addOnMouseUpWidget ( const std::string &  scriptCode)
inlineprivate
458  {
459  addScriptWidget(tr("On Mouse Up Callback").toStdString(), makeUniqueFunctionName(::onMouseUpCallbackPrefix), scriptCode);
460  }

◆ addOnMouseWheelWidget()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::addOnMouseWheelWidget ( const std::string &  scriptCode)
inlineprivate
468  {
469  addScriptWidget(tr("On Mouse Wheel Callback").toStdString(), makeUniqueFunctionName(::onMouseWheelCallbackPrefix), scriptCode);
470  }

◆ addOnPenInputWidget()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::addOnPenInputWidget ( const std::string &  scriptCode)
inlineprivate
428  {
429  addScriptWidget(tr("On Pen Input Callback").toStdString(), makeUniqueFunctionName(::onPenInputCallbackPrefix), scriptCode);
430  }

◆ addOnPenProximityEnterWidget()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::addOnPenProximityEnterWidget ( const std::string &  scriptCode)
inlineprivate
433  {
434  addScriptWidget(tr("On Pen Proximity Enter Callback").toStdString(), makeUniqueFunctionName(::onPenProximityEnterCallbackPrefix), scriptCode);
435  }

◆ addOnPenProximityExitWidget()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::addOnPenProximityExitWidget ( const std::string &  scriptCode)
inlineprivate
438  {
439  addScriptWidget(tr("On Pen Proximity Exit Callback").toStdString(), makeUniqueFunctionName(::onPenProximityExitCallbackPrefix), scriptCode);
440  }

◆ addOnStopConditionMetWidget()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::addOnStopConditionMetWidget ( const std::string &  scriptCode)
inlineprivate
408  {
409  addScriptWidget(tr("On Stop Condition Met Callback").toStdString(), makeUniqueFunctionName(::onStopConditionMetCallbackPrefix), scriptCode);
410  }

◆ addOnTimedUpdateWidget()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::addOnTimedUpdateWidget ( const std::string &  scriptCode)
inlineprivate
473  {
474  addScriptWidget(tr("On Timed Update Callback").toStdString(), makeUniqueFunctionName(::onTimedUpdateCallbackPrefix), scriptCode);
475  }

◆ addScriptWidget()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::addScriptWidget ( const std::string &  scriptDisplayName,
const std::string &  functionName,
const std::string &  scriptCode 
)
inlineprivate
363  {
364  if(!startsWith(functionName, ::stopConditionIdPrefix) &&
365  !startsWith(functionName, ::onStopConditionMetCallbackPrefix) &&
366  !startsWith(functionName, ::addShapePreconditionCallbackPrefix) &&
367  !startsWith(functionName, ::beforeAddShapeCallbackPrefix) &&
368  !startsWith(functionName, ::afterAddShapeCallbackPrefix) &&
369  !startsWith(functionName, ::beforeStepCallbackPrefix) &&
370  !startsWith(functionName, ::afterStepCallbackPrefix) &&
371  !startsWith(functionName, ::onPenInputCallbackPrefix) &&
372  !startsWith(functionName, ::onPenProximityEnterCallbackPrefix) &&
373  !startsWith(functionName, ::onPenProximityExitCallbackPrefix) &&
374  !startsWith(functionName, ::onKeyDownCallbackPrefix) &&
375  !startsWith(functionName, ::onKeyUpCallbackPrefix) &&
376  !startsWith(functionName, ::onMouseDownCallbackPrefix) &&
377  !startsWith(functionName, ::onMouseUpCallbackPrefix) &&
378  !startsWith(functionName, ::onMouseMoveCallbackPrefix) &&
379  !startsWith(functionName, ::onMouseWheelCallbackPrefix) &&
380  !startsWith(functionName, ::onTimedUpdateCallbackPrefix))
381  {
382  return;
383  }
384 
385  auto widget = new geometrize::dialog::ScriptEditorWidget(scriptDisplayName, functionName, scriptCode, ui->customScriptsGroupBox);
386  connect(widget, &ScriptEditorWidget::signal_scriptChanged, [this](ScriptEditorWidget* /*self*/, const std::string& functionName, const std::string& code) {
387  emit q->signal_scriptChanged(functionName, code);
388  });
389  ui->customScriptsEditorLayout->addWidget(widget);
390  }

◆ addShapePreconditionWidget()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::addShapePreconditionWidget ( const std::string &  scriptCode)
inlineprivate
413  {
414  addScriptWidget(tr("Add Shape Precondition").toStdString(), makeUniqueFunctionName(::addShapePreconditionCallbackPrefix), scriptCode);
415  }

◆ buildScriptSelectionComboBoxes()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::buildScriptSelectionComboBoxes ( )
inlineprivate
537  {
538  std::vector<std::pair<QComboBox*, std::map<std::string, std::string>>> presetScriptData;
539  presetScriptData.push_back(std::make_pair(ui->addBeforeStepPresetScriptsComboBox, geometrize::script::getBeforeStepCallbackScripts()));
540  presetScriptData.push_back(std::make_pair(ui->addAfterStepPresetScriptsComboBox, geometrize::script::getAfterStepCallbackScripts()));
541  presetScriptData.push_back(std::make_pair(ui->addStopConditionPresetScriptsComboBox, geometrize::script::getStopConditionScripts()));
542  presetScriptData.push_back(std::make_pair(ui->onStopConditionMetEventComboBox, geometrize::script::getOnStopConditionMetScripts()));
543  presetScriptData.push_back(std::make_pair(ui->addShapePreconditionPresetScriptsComboBox, geometrize::script::getAddShapePreconditionScripts()));
544  presetScriptData.push_back(std::make_pair(ui->addBeforeAddShapePresetScriptsComboBox, geometrize::script::getBeforeAddShapeCallbackScripts()));
545  presetScriptData.push_back(std::make_pair(ui->addAfterAddShapePresetScriptsComboBox, geometrize::script::getAfterAddShapeCallbackScripts()));
546  presetScriptData.push_back(std::make_pair(ui->onScenePenInputEventPresetScriptsComboBox, geometrize::script::getOnPenInputCallbackScripts()));
547  presetScriptData.push_back(std::make_pair(ui->onPenProximityEnterEventPresetScriptsComboBox, geometrize::script::getOnPenProximityEnterCallbackScripts()));
548  presetScriptData.push_back(std::make_pair(ui->onPenProximityExitEventPresetScriptsComboBox, geometrize::script::getOnPenProximityExitCallbackScripts()));
549  presetScriptData.push_back(std::make_pair(ui->onKeyDownEventPresetScriptsComboBox, geometrize::script::getOnKeyDownEventScripts()));
550  presetScriptData.push_back(std::make_pair(ui->onKeyUpEventPresetScriptsComboBox, geometrize::script::getOnKeyUpEventScripts()));
551  presetScriptData.push_back(std::make_pair(ui->onMouseDownEventPresetScriptsComboBox, geometrize::script::getOnMouseDownEventScripts()));
552  presetScriptData.push_back(std::make_pair(ui->onMouseUpEventPresetScriptsComboBox, geometrize::script::getOnMouseUpEventScripts()));
553  presetScriptData.push_back(std::make_pair(ui->onMouseMoveEventPresetScriptsComboBox, geometrize::script::getOnMouseMoveEventScripts()));
554  presetScriptData.push_back(std::make_pair(ui->onMouseWheelEventPresetScriptsComboBox, geometrize::script::getOnMouseWheelEventScripts()));
555  presetScriptData.push_back(std::make_pair(ui->onUpdateEventPresetScriptsComboBox, geometrize::script::getOnTimedUpdateEventScripts()));
556 
557  for(const auto& item : presetScriptData) {
558  populateScriptSelectionComboBox(item.first, item.second);
559  }
560  }
Here is the call graph for this function:

◆ evaluateAddShapePreconditionScripts()

bool geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::evaluateAddShapePreconditionScripts ( ) const
inline
286  {
287  return evaluateScriptsWithBooleanReturnValue(::addShapePreconditionCallbackPrefix);
288  }

◆ evaluateAfterAddShapeScripts()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::evaluateAfterAddShapeScripts ( ) const
inline
296  {
297  evaluateScriptsWithNoReturnValue(::afterAddShapeCallbackPrefix);
298  }

◆ evaluateAfterStepScripts()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::evaluateAfterStepScripts ( ) const
inline
281  {
282  evaluateScriptsWithNoReturnValue(::afterStepCallbackPrefix);
283  }

◆ evaluateBeforeAddShapeScripts()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::evaluateBeforeAddShapeScripts ( ) const
inline
291  {
292  evaluateScriptsWithNoReturnValue(::beforeAddShapeCallbackPrefix);
293  }

◆ evaluateBeforeStepScripts()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::evaluateBeforeStepScripts ( ) const
inline
276  {
277  evaluateScriptsWithNoReturnValue(::beforeStepCallbackPrefix);
278  }

◆ evaluateOnKeyDownEventScripts()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::evaluateOnKeyDownEventScripts ( ) const
inline
316  {
317  evaluateScriptsWithNoReturnValue(::onKeyDownCallbackPrefix);
318  }

◆ evaluateOnKeyUpEventScripts()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::evaluateOnKeyUpEventScripts ( ) const
inline
321  {
322  evaluateScriptsWithNoReturnValue(::onKeyUpCallbackPrefix);
323  }

◆ evaluateOnMouseDownEventScripts()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::evaluateOnMouseDownEventScripts ( ) const
inline
326  {
327  evaluateScriptsWithNoReturnValue(::onMouseDownCallbackPrefix);
328  }

◆ evaluateOnMouseMoveEventScripts()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::evaluateOnMouseMoveEventScripts ( ) const
inline
336  {
337  evaluateScriptsWithNoReturnValue(::onMouseMoveCallbackPrefix);
338  }

◆ evaluateOnMouseUpEventScripts()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::evaluateOnMouseUpEventScripts ( ) const
inline
331  {
332  evaluateScriptsWithNoReturnValue(::onMouseUpCallbackPrefix);
333  }

◆ evaluateOnMouseWheelEventScripts()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::evaluateOnMouseWheelEventScripts ( ) const
inline
341  {
342  evaluateScriptsWithNoReturnValue(::onMouseWheelCallbackPrefix);
343  }

◆ evaluateOnPenInputEventScripts()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::evaluateOnPenInputEventScripts ( ) const
inline
301  {
302  evaluateScriptsWithNoReturnValue(::onPenInputCallbackPrefix);
303  }

◆ evaluateOnPenProximityEnterEventScripts()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::evaluateOnPenProximityEnterEventScripts ( ) const
inline
306  {
307  evaluateScriptsWithNoReturnValue(::onPenProximityEnterCallbackPrefix);
308  }

◆ evaluateOnPenProximityExitEventScripts()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::evaluateOnPenProximityExitEventScripts ( ) const
inline
311  {
312  evaluateScriptsWithNoReturnValue(::onPenProximityExitCallbackPrefix);
313  }

◆ evaluateOnStopConditionMetScripts()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::evaluateOnStopConditionMetScripts ( ) const
inline
271  {
272  evaluateScriptsWithNoReturnValue(::onStopConditionMetCallbackPrefix);
273  }

◆ evaluateOnTimedUpdateEventScripts()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::evaluateOnTimedUpdateEventScripts ( ) const
inline
346  {
347  evaluateScriptsWithNoReturnValue(::onTimedUpdateCallbackPrefix);
348  }

◆ evaluateScriptsWithBooleanReturnValue()

bool geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::evaluateScriptsWithBooleanReturnValue ( const std::string &  scriptPrefix) const
inline
208  {
209  const auto engine = m_task->getGeometrizer().getEngine();
210  if(!engine) {
211  return false;
212  }
213 
214  const auto scriptWidgets = ui->customScriptsGroupBox->findChildren<geometrize::dialog::ScriptEditorWidget*>();
215  bool returnValue = false;
216  for(const auto& widget : scriptWidgets) {
217  if(widget->getFunctionName().substr(0, scriptPrefix.length()) != scriptPrefix) {
218  continue; // Skip anything other than stop conditions
219  }
220 
221  try {
222  auto retValue = engine->eval<bool>(widget->getCurrentCode());
223  if(retValue) {
224  returnValue = true;
225  }
226  widget->onScriptEvaluationSucceeded();
227  } catch(const chaiscript::exception::eval_error& e) {
228  widget->onScriptEvaluationFailed(e.pretty_print());
229  } catch(const std::exception& e) {
230  widget->onScriptEvaluationFailed(e.what());
231  } catch(...) {
232  widget->onScriptEvaluationFailed("Unknown script evaluation error");
233  }
234  }
235 
236  return returnValue;
237  }
Here is the call graph for this function:

◆ evaluateScriptsWithNoReturnValue()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::evaluateScriptsWithNoReturnValue ( const std::string &  scriptGroupNamePrefix) const
inline
240  {
241  const auto engine = m_task->getGeometrizer().getEngine();
242  if(!engine) {
243  return;
244  }
245 
246  const auto scriptWidgets = ui->customScriptsGroupBox->findChildren<geometrize::dialog::ScriptEditorWidget*>();
247  for(const auto& widget : scriptWidgets) {
248  if(widget->getFunctionName().substr(0, scriptGroupNamePrefix.length()) != scriptGroupNamePrefix) {
249  continue;
250  }
251 
252  try {
253  engine->eval(widget->getCurrentCode());
254  widget->onScriptEvaluationSucceeded();
255  } catch(const chaiscript::exception::eval_error& e) {
256  widget->onScriptEvaluationFailed(e.pretty_print());
257  } catch(const std::exception& e) {
258  widget->onScriptEvaluationFailed(e.what());
259  } catch(...) {
260  widget->onScriptEvaluationFailed("Unknown script evaluation error");
261  }
262  }
263  }
Here is the call graph for this function:

◆ evaluateStopConditionScripts()

bool geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::evaluateStopConditionScripts ( ) const
inline
266  {
267  return evaluateScriptsWithBooleanReturnValue(::stopConditionIdPrefix);
268  }

◆ findEditor()

dialog::ScriptEditorWidget* geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::findEditor ( const std::string &  editorId)
inlineprivate
503  {
504  const auto& editors = ui->customScriptsGroupBox->findChildren<geometrize::dialog::ScriptEditorWidget*>();
505  for(const auto& editor : editors) {
506  if(editor->getFunctionName() == editorId) {
507  return editor;
508  }
509  }
510  return nullptr;
511  }

◆ getScriptForSelectedComboBoxItem()

std::string geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::getScriptForSelectedComboBoxItem ( QComboBox *  combo)
inlineprivate
532  {
533  return combo->itemData(combo->currentIndex()).toString().toStdString();
534  }

◆ getScripts()

std::map<std::string, std::string> geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::getScripts ( ) const
inline
192  {
193  // Gather the scripts from the editor boxes
194  const auto& editors = ui->customScriptsGroupBox->findChildren<geometrize::dialog::ScriptEditorWidget*>();
195  std::map<std::string, std::string> scripts;
196  for(ScriptEditorWidget* editor : editors) {
197  scripts[editor->getFunctionName()] = editor->getCurrentCode();
198  }
199 
200  // Gather the scripts from the shape scripting panel
201  const std::map<std::string, std::string> shapeScripts = getShapeScriptingPanel()->getScripts();
202  scripts.insert(shapeScripts.begin(), shapeScripts.end());
203 
204  return scripts;
205  }
Here is the call graph for this function:

◆ getShapeMutationScripts()

std::map<std::string, std::string> geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::getShapeMutationScripts ( )
inline
185  {
187  }

◆ getShapeScriptingPanel()

geometrize::dialog::ImageTaskShapeScriptingPanel* geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::getShapeScriptingPanel ( ) const
inlineprivate
514  {
516  }

◆ makeUniqueFunctionName()

std::string geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::makeUniqueFunctionName ( const std::string &  prefix)
inlineprivate
563  {
564  return prefix + QUuid::createUuid().toString().toStdString();
565  }

◆ onLanguageChange()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::onLanguageChange ( )
inline
351  {
352  ui->retranslateUi(q);
353  populateUi();
354  }

◆ operator=()

ImageTaskScriptingWidgetImpl geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::operator= ( const ImageTaskScriptingWidgetImpl )
delete

◆ populateScriptSelectionComboBox()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::populateScriptSelectionComboBox ( QComboBox *  combo,
const std::map< std::string, std::string > &  scripts 
)
inlineprivate
523  {
524  combo->clear();
525  for(const auto& item : scripts) {
526  combo->addItem(QString::fromStdString(item.first), QString::fromStdString(item.second));
527  }
528  combo->setCurrentIndex(0);
529  }

◆ populateUi()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::populateUi ( )
inlineprivate
519  {
520  }

◆ revealShapeScriptingPanel()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::revealShapeScriptingPanel ( )
inlineprivate
479  {
480  auto scriptingPanel = getShapeScriptingPanel();
481  scriptingPanel->setWindowState(scriptingPanel->windowState() & ~Qt::WindowMinimized);
482  QApplication::setActiveWindow(scriptingPanel);
483  scriptingPanel->raise();
484  scriptingPanel->show();
485  }

◆ setImageTask()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::setImageTask ( task::ImageTask task)
inline
169  {
170  m_task = task;
172  }

◆ setScripts()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::setScripts ( const std::map< std::string, std::string > &  scripts)
inlineprivate
488  {
489  // Look for matching script editor widgets, and set their contents if found
490  for(const auto& script : scripts) {
491  if(dialog::ScriptEditorWidget* editor = findEditor(script.first)) {
492  if(!script.second.empty()) {
493  editor->setCurrentCode(script.second);
494  }
495  } else {
496  // If no such editor exists, create a new panel (but only for scripts with names we recognize)
497  addScriptWidget(script.first, script.first, script.second);
498  }
499  }
500  }

◆ startsWith()

static bool geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::startsWith ( const std::string &  s,
const std::string &  prefix 
)
inlinestaticprivate
358  {
359  return s.rfind(prefix, 0) == 0;
360  }

◆ syncUserInterface()

void geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::syncUserInterface ( )
inline
175  {
176  if(m_task == nullptr) {
177  return;
178  }
179 
182  }

Member Data Documentation

◆ m_task

task::ImageTask* geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::m_task {nullptr}
private

◆ q

ImageTaskScriptingWidget* geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::q
private

◆ ui

std::unique_ptr<Ui::ImageTaskScriptingWidget> geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::ui
private

The documentation for this class was generated from the following file:
geometrize::script::getOnKeyUpEventScripts
std::map< std::string, std::string > getOnKeyUpEventScripts()
getOnKeyUpEventScripts Gets a map of scripts that are useful to call after receiving a key up event t...
Definition: scriptutil.cpp:128
geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::ui
std::unique_ptr< Ui::ImageTaskScriptingWidget > ui
Definition: imagetaskscriptingwidget.cpp:570
geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::evaluateScriptsWithNoReturnValue
void evaluateScriptsWithNoReturnValue(const std::string &scriptGroupNamePrefix) const
Definition: imagetaskscriptingwidget.cpp:239
geometrize::script::getAfterStepCallbackScripts
std::map< std::string, std::string > getAfterStepCallbackScripts()
getAfterStepCallbackScripts Gets a map of scripts that are useful to call after stepping an image tas...
Definition: scriptutil.cpp:78
geometrize::script::GeometrizerEngine::getEngine
chaiscript::ChaiScript * getEngine()
getEngine Gets a pointer to the script engine used by the shape mutation engine.
Definition: geometrizerengine.cpp:52
geometrize::script::getOnMouseDownEventScripts
std::map< std::string, std::string > getOnMouseDownEventScripts()
getOnMouseDownEventScripts Gets a map of scripts that are useful to call after receiving a mouse down...
Definition: scriptutil.cpp:133
geometrize::script::getOnKeyDownEventScripts
std::map< std::string, std::string > getOnKeyDownEventScripts()
getOnKeyDownEventScripts Gets a map of scripts that are useful to call after receiving a key down eve...
Definition: scriptutil.cpp:123
geometrize::preferences::ImageTaskPreferences::getScripts
std::map< std::string, std::string > getScripts() const
Definition: imagetaskpreferences.cpp:335
geometrize::script::getOnPenProximityExitCallbackScripts
std::map< std::string, std::string > getOnPenProximityExitCallbackScripts()
getOnPenProximityExitCallbackScripts Gets a map of scripts that are useful to call after receiving a ...
Definition: scriptutil.cpp:118
geometrize::script::getOnMouseMoveEventScripts
std::map< std::string, std::string > getOnMouseMoveEventScripts()
getOnMouseMoveEventScripts Gets a map of scripts that are useful to call after receiving a mouse move...
Definition: scriptutil.cpp:143
geometrize::dialog::ImageTaskScriptingWidget::signal_scriptChanged
void signal_scriptChanged(const std::string &functionName, const std::string &code)
geometrize::dialog::ScriptEditorWidget::signal_scriptChanged
void signal_scriptChanged(ScriptEditorWidget *self, const std::string &functionName, const std::string &code)
signal_scriptChanged Signal emitted when the user change the script code of a function.
geometrize::script::getBeforeAddShapeCallbackScripts
std::map< std::string, std::string > getBeforeAddShapeCallbackScripts()
getBeforeAddShapeCallbackScripts Gets a map of scripts that are useful to call before adding a shape ...
Definition: scriptutil.cpp:98
geometrize::script::getOnStopConditionMetScripts
std::map< std::string, std::string > getOnStopConditionMetScripts()
getOnStopConditionMetScripts Gets a map of scripts that are useful to call after the stop condition f...
Definition: scriptutil.cpp:88
geometrize::script::getOnTimedUpdateEventScripts
std::map< std::string, std::string > getOnTimedUpdateEventScripts()
getOnTimedUpdateEventScripts Gets a map of scripts that are useful to regularly periodically call i....
Definition: scriptutil.cpp:153
geometrize::dialog::ScriptEditorWidget
The ScriptEditorWidget class implements a widget for interactively editing a Chaiscript function.
Definition: scripteditorwidget.h:20
geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::getShapeScriptingPanel
geometrize::dialog::ImageTaskShapeScriptingPanel * getShapeScriptingPanel() const
Definition: imagetaskscriptingwidget.cpp:513
geometrize::dialog::ScriptEditorWidget::onScriptEvaluationSucceeded
void onScriptEvaluationSucceeded()
Definition: scripteditorwidget.cpp:210
geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::addScriptWidget
void addScriptWidget(const std::string &scriptDisplayName, const std::string &functionName, const std::string &scriptCode)
Definition: imagetaskscriptingwidget.cpp:362
geometrize::script::getOnPenProximityEnterCallbackScripts
std::map< std::string, std::string > getOnPenProximityEnterCallbackScripts()
getOnPenProximityEnterCallbackScripts Gets a map of scripts that are useful to call after receiving a...
Definition: scriptutil.cpp:113
geometrize::script::getAfterAddShapeCallbackScripts
std::map< std::string, std::string > getAfterAddShapeCallbackScripts()
getAfterAddShapeCallbackScripts Gets a map of scripts that are useful to call after adding a shape to...
Definition: scriptutil.cpp:103
geometrize::dialog::ImageTaskShapeScriptingPanel
The ImageTaskShapeScriptingPanel models the UI for the script editors for controlling image task shap...
Definition: imagetaskshapescriptingpanel.h:36
geometrize::preferences::GlobalPreferences
The GlobalPreferences class models the preferences associated with the application as a whole....
Definition: globalpreferences.h:44
geometrize::script::getOnPenInputCallbackScripts
std::map< std::string, std::string > getOnPenInputCallbackScripts()
getOnPenInputCallbackScripts Gets a map of scripts that are useful to call after receiving pen input ...
Definition: scriptutil.cpp:108
geometrize::script::getAddShapePreconditionScripts
std::map< std::string, std::string > getAddShapePreconditionScripts()
getAddShapePreconditionScripts Gets a map of scripts that are used to decide whether to add a shape t...
Definition: scriptutil.cpp:93
geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::populateUi
void populateUi()
Definition: imagetaskscriptingwidget.cpp:518
geometrize::script::getStopConditionScripts
std::map< std::string, std::string > getStopConditionScripts()
getStopConditionScripts Gets a map of scripts that get to true/false, and can be used to check whethe...
Definition: scriptutil.cpp:83
geometrize::script::getOnMouseUpEventScripts
std::map< std::string, std::string > getOnMouseUpEventScripts()
getOnMouseUpEventScripts Gets a map of scripts that are useful to call after receiving a mouse up eve...
Definition: scriptutil.cpp:138
geometrize::task::ImageTask::getGeometrizer
geometrize::script::GeometrizerEngine & getGeometrizer()
getGeometrizer Gets a reference to the script-based engine used to turn images into shapes.
Definition: imagetask.cpp:402
geometrize::script::getOnMouseWheelEventScripts
std::map< std::string, std::string > getOnMouseWheelEventScripts()
getOnMouseWheelEventScripts Gets a map of scripts that are useful to call after receiving a mouse whe...
Definition: scriptutil.cpp:148
geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::buildScriptSelectionComboBoxes
void buildScriptSelectionComboBoxes()
Definition: imagetaskscriptingwidget.cpp:536
geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::q
ImageTaskScriptingWidget * q
Definition: imagetaskscriptingwidget.cpp:569
geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::findEditor
dialog::ScriptEditorWidget * findEditor(const std::string &editorId)
Definition: imagetaskscriptingwidget.cpp:502
geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::makeUniqueFunctionName
std::string makeUniqueFunctionName(const std::string &prefix)
Definition: imagetaskscriptingwidget.cpp:562
geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::startsWith
static bool startsWith(const std::string &s, const std::string &prefix)
Definition: imagetaskscriptingwidget.cpp:357
geometrize::script::getBeforeStepCallbackScripts
std::map< std::string, std::string > getBeforeStepCallbackScripts()
getBeforeStepCallbackScripts Gets a map of scripts that are useful to call prior to stepping an image...
Definition: scriptutil.cpp:73
geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::revealShapeScriptingPanel
void revealShapeScriptingPanel()
Definition: imagetaskscriptingwidget.cpp:478
geometrize::dialog::ScriptEditorWidget::getCurrentCode
std::string getCurrentCode() const
Definition: scripteditorwidget.cpp:200
geometrize::dialog::ImageTaskShapeScriptingPanel::setImageTask
void setImageTask(task::ImageTask *task)
setImageTask Sets the current image task manipulated by the scripting panel.
Definition: imagetaskshapescriptingpanel.cpp:259
geometrize::dialog::ImageTaskShapeScriptingPanel::getScripts
std::map< std::string, std::string > getScripts() const
Definition: imagetaskshapescriptingpanel.cpp:269
geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::setScripts
void setScripts(const std::map< std::string, std::string > &scripts)
Definition: imagetaskscriptingwidget.cpp:487
geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::m_task
task::ImageTask * m_task
Definition: imagetaskscriptingwidget.cpp:567
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
geometrize::dialog::ImageTaskShapeScriptingPanel::syncUserInterface
void syncUserInterface()
syncUserInterface Syncs the user interface with the current image task. This should be called after s...
Definition: imagetaskshapescriptingpanel.cpp:264
geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::evaluateScriptsWithBooleanReturnValue
bool evaluateScriptsWithBooleanReturnValue(const std::string &scriptPrefix) const
Definition: imagetaskscriptingwidget.cpp:207
geometrize::dialog::ImageTaskScriptingWidget::ImageTaskScriptingWidgetImpl::populateScriptSelectionComboBox
void populateScriptSelectionComboBox(QComboBox *combo, const std::map< std::string, std::string > &scripts)
Definition: imagetaskscriptingwidget.cpp:522