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::TaskQueueWindow::TaskQueueWindowImpl Class Reference
Collaboration diagram for geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl:
Collaboration graph
[legend]

Public Member Functions

 TaskQueueWindowImpl (TaskQueueWindow *pQ)
 
TaskQueueWindowImploperator= (const TaskQueueWindowImpl &)=delete
 
 TaskQueueWindowImpl (const TaskQueueWindowImpl &)=delete
 
 ~TaskQueueWindowImpl ()
 
void addItems (const QStringList &tasks)
 
void close ()
 
void onLanguageChange ()
 
void closeOpenWindows ()
 

Private Member Functions

void refreshScripts ()
 
void runScript (const std::string &imagePath) const
 
void addItem (const QString &itemPath, const QString &itemDisplayName) const
 
void setMenuItemKey (QListWidgetItem *item, const QString &key) const
 
void setupScriptEditor ()
 
void populateUi ()
 

Private Attributes

std::unique_ptr< Ui::TaskQueueWindow > ui {nullptr}
 
TaskQueueWindowq {nullptr}
 
geometrize::dialog::ScriptEditorWidgetm_scriptEditorWidget
 
const std::string defaultScriptName { "default" }
 
std::map< std::string, std::string > m_scripts
 

Constructor & Destructor Documentation

◆ TaskQueueWindowImpl() [1/2]

geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::TaskQueueWindowImpl ( TaskQueueWindow pQ)
inline
31  :
32  ui{std::make_unique<Ui::TaskQueueWindow>()},
33  q{pQ}
34  {
35  ui->setupUi(q);
36  populateUi();
37  q->setAttribute(Qt::WA_DeleteOnClose);
38 
41 
42  connect(ui->scriptSelectComboBox, &QComboBox::currentTextChanged, [this](const QString& text) {
43  m_scriptEditorWidget->setCurrentCode(m_scripts[text.toStdString()]);
44  });
45 
46  connect(ui->runTasksButton, &QPushButton::clicked, [this]() {
47  for(int i = 0; i < ui->taskList->count(); ++i) {
48  QListWidgetItem* item = ui->taskList->item(i);
49  QString data = item->data(Qt::UserRole).toString();
50  runScript(data.toStdString());
51  }
52  });
53  connect(ui->clearTaskListButton, &QPushButton::clicked, [this]() {
54  ui->taskList->clear();
55  });
56  connect(ui->closeOpenWindowsButton, &QPushButton::clicked, [this]() {
57  closeOpenWindows();
58  });
59 
60  // Enable the run and clear buttons only when items are present
61  ui->runTasksButton->setEnabled(false);
62  ui->clearTaskListButton->setEnabled(false);
63  QTimer* timer = new QTimer(q);
64  q->connect(timer, &QTimer::timeout, q, [this]() {
65  const bool enableRunClearButtons = ui->taskList->count() > 0;
66  ui->runTasksButton->setEnabled(enableRunClearButtons);
67  ui->clearTaskListButton->setEnabled(enableRunClearButtons);
68  ui->closeOpenWindowsButton->setEnabled(!geometrize::dialog::ImageTaskWindow::getExistingImageTaskWindows().empty());
69  });
70  timer->start(500);
71  }

◆ TaskQueueWindowImpl() [2/2]

geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::TaskQueueWindowImpl ( const TaskQueueWindowImpl )
delete

◆ ~TaskQueueWindowImpl()

geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::~TaskQueueWindowImpl ( )
inline
75  {
76  }

Member Function Documentation

◆ addItem()

void geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::addItem ( const QString &  itemPath,
const QString &  itemDisplayName 
) const
inlineprivate
131  {
132  class MyListWidgetItem : public QListWidgetItem {
133  public:
134  MyListWidgetItem()
135  {
136  static int instanceCounter = 0;
137  m_instanceId = instanceCounter;
138  instanceCounter++;
139  //setData(Qt::DisplayRole, instanceCounter);
140  }
141 
142  virtual bool operator<(const MyListWidgetItem& other) const {
143  return m_instanceId > other.m_instanceId;
144  }
145 
146  private:
147  int m_instanceId;
148  };
149 
150  QListWidgetItem* item{new MyListWidgetItem()};
151  dialog::TaskItemWidget* button{new dialog::TaskItemWidget(itemPath, RecentTasksList::getDisplayNameForTaskPath(itemDisplayName),
152  [this](const QString& taskItemId) {
153  runScript(taskItemId.toStdString());
154  },
155  [item](const QString& /*taskItemId*/) {
156  delete item;
157  })};
158  item->setToolTip(itemPath);
159  item->setSizeHint(button->sizeHint());
160  setMenuItemKey(item, itemPath);
161  ui->taskList->addItem(item);
162  ui->taskList->setItemWidget(item, button);
163  }
Here is the call graph for this function:

◆ addItems()

void geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::addItems ( const QStringList &  tasks)
inline
79  {
80  for(const auto& task : tasks) {
81  addItem(task, task);
82  }
83  }

◆ close()

void geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::close ( )
inline
86  {
87  q->close();
88  }

◆ closeOpenWindows()

void geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::closeOpenWindows ( )
inline
97  {
99  for(auto* window : windows) {
100  window->close();
101  }
102  }
Here is the call graph for this function:

◆ onLanguageChange()

void geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::onLanguageChange ( )
inline
91  {
92  ui->retranslateUi(q);
93  populateUi();
94  }

◆ operator=()

TaskQueueWindowImpl& geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::operator= ( const TaskQueueWindowImpl )
delete

◆ populateUi()

void geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::populateUi ( )
inlineprivate
184  {
185  }

◆ refreshScripts()

void geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::refreshScripts ( )
inlineprivate
106  {
108 
109  ui->scriptSelectComboBox->clear();
110  for(const auto& script : m_scripts) {
111  ui->scriptSelectComboBox->addItem(QString::fromStdString(script.first));
112  }
113  }
Here is the call graph for this function:

◆ runScript()

void geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::runScript ( const std::string &  imagePath) const
inlineprivate
116  {
117  const auto engine = script::createBatchImageTaskEngine();
118  engine->set_global(chaiscript::var(imagePath), "inputPath");
119  const auto& code = m_scriptEditorWidget->getCurrentCode();
120  try {
121  engine->eval(code);
123  } catch(const chaiscript::exception::eval_error& e) {
125  } catch(...) {
126  m_scriptEditorWidget->onScriptEvaluationFailed("Unknown script evaluation error");
127  }
128  }
Here is the call graph for this function:

◆ setMenuItemKey()

void geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::setMenuItemKey ( QListWidgetItem *  item,
const QString &  key 
) const
inlineprivate
166  {
167  item->setData(Qt::UserRole, key);
168  }

◆ setupScriptEditor()

void geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::setupScriptEditor ( )
inlineprivate
171  {
172  const std::string scriptEditorWidgetTitle = tr("Script Editor").toStdString();
173 
174  m_scriptEditorWidget = new geometrize::dialog::ScriptEditorWidget(scriptEditorWidgetTitle, defaultScriptName, m_scripts.at(defaultScriptName), ui->taskListScriptContainer);
175 
176  connect(m_scriptEditorWidget, &ScriptEditorWidget::signal_scriptChanged, [this](ScriptEditorWidget* /*self*/, const std::string& functionName, const std::string& code) {
177  emit q->signal_scriptChanged(functionName, code);
178  });
179 
180  ui->scrollArea->setWidget(m_scriptEditorWidget);
181  }

Member Data Documentation

◆ defaultScriptName

const std::string geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::defaultScriptName { "default" }
private

◆ m_scriptEditorWidget

geometrize::dialog::ScriptEditorWidget* geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::m_scriptEditorWidget
private

◆ m_scripts

std::map<std::string, std::string> geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::m_scripts
private

◆ q

TaskQueueWindow* geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::q {nullptr}
private

◆ ui

std::unique_ptr<Ui::TaskQueueWindow> geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::ui {nullptr}
private

The documentation for this class was generated from the following file:
geometrize::dialog::RecentTasksList::getDisplayNameForTaskPath
static QString getDisplayNameForTaskPath(const QUrl &url)
getDisplayNameForTaskPath Extracts a display name suitable for displaying to the user from the task U...
Definition: recenttaskslist.cpp:186
geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::addItem
void addItem(const QString &itemPath, const QString &itemDisplayName) const
Definition: taskqueuewindow.cpp:130
geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::defaultScriptName
const std::string defaultScriptName
Definition: taskqueuewindow.cpp:192
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::dialog::ImageTaskWindow::getExistingImageTaskWindows
static std::vector< ImageTaskWindow * > getExistingImageTaskWindows()
getExistingImageTaskWindows Gets all of the existing image task windows.
Definition: imagetaskwindow.cpp:881
geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::runScript
void runScript(const std::string &imagePath) const
Definition: taskqueuewindow.cpp:115
geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::refreshScripts
void refreshScripts()
Definition: taskqueuewindow.cpp:105
geometrize::script::getTaskQueueBatchProcessingScripts
std::map< std::string, std::string > getTaskQueueBatchProcessingScripts()
getTaskQueueBatchProcessingScripts Gets a map of scripts used for batch processing multiple images on...
Definition: scriptutil.cpp:158
geometrize::dialog::ScriptEditorWidget
The ScriptEditorWidget class implements a widget for interactively editing a Chaiscript function.
Definition: scripteditorwidget.h:20
geometrize::dialog::ScriptEditorWidget::onScriptEvaluationSucceeded
void onScriptEvaluationSucceeded()
Definition: scripteditorwidget.cpp:210
geometrize::dialog::ScriptEditorWidget::onScriptEvaluationFailed
void onScriptEvaluationFailed(const std::string &errorMessage)
Definition: scripteditorwidget.cpp:215
geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::q
TaskQueueWindow * q
Definition: taskqueuewindow.cpp:188
geometrize::script::createBatchImageTaskEngine
std::unique_ptr< chaiscript::ChaiScript > createBatchImageTaskEngine()
createBatchImageTaskEngine Creates a Chaiscript engine for creating and processing multiple image tas...
Definition: chaiscriptcreator.cpp:70
geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::ui
std::unique_ptr< Ui::TaskQueueWindow > ui
Definition: taskqueuewindow.cpp:187
geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::setMenuItemKey
void setMenuItemKey(QListWidgetItem *item, const QString &key) const
Definition: taskqueuewindow.cpp:165
geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::m_scriptEditorWidget
geometrize::dialog::ScriptEditorWidget * m_scriptEditorWidget
Definition: taskqueuewindow.cpp:190
geometrize::dialog::ScriptEditorWidget::getCurrentCode
std::string getCurrentCode() const
Definition: scripteditorwidget.cpp:200
geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::populateUi
void populateUi()
Definition: taskqueuewindow.cpp:183
geometrize::dialog::TaskQueueWindow::signal_scriptChanged
void signal_scriptChanged(const std::string &functionName, const std::string &code)
geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::setupScriptEditor
void setupScriptEditor()
Definition: taskqueuewindow.cpp:170
geometrize::dialog::TaskQueueWindow::TaskQueueWindowImpl::m_scripts
std::map< std::string, std::string > m_scripts
Definition: taskqueuewindow.cpp:193