6#include <QtCore/QItemSelection>
7#include <QtGui/QStandardItemModel>
8#include <QtWidgets/QMenu>
9#include <QtWidgets/QMessageBox>
10#include <QtWidgets/QInputDialog>
11#include <QtWidgets/QLineEdit>
14#include <imod/CMultiModelDispatcherBase.h>
15#include <iimg/CBitmap.h>
16#include <ibase/ICommandsProvider.h>
17#include <iqtgui/TDesignerGuiObserverCompBase.h>
18#include <iqtgui/CHierarchicalCommand.h>
19#include <iqtgui/CGuiComponentDialog.h>
20#include <iqtgui/TMakeStateIconWrapper.h>
21#include <imod/IModel.h>
22#include <iprm/IOptionsList.h>
23#include <istd/CChangeGroup.h>
24#include <istd/CChangeNotifier.h>
27#include <imtbase/TModelUpdateBinder.h>
30#include <imthype/ITaskCollection.h>
31#include <imthype/ITaskResultCollection.h>
32#include <imthype/ITaskSettings.h>
33#include <imthypegui/CTaskItemDelegate.h>
34#include <imthypegui/CTaskSettingsDialog.h>
35#include <imthypegui/CTaskSettingsGuiComp.h>
43class TTaskCollectionEditorCompBase:
44 public iqtgui::StateIconWrapper<
45 iqtgui::TDesignerGuiObserverCompBase<
47 imthype::ITaskCollection> >,
48 protected imod::CMultiModelDispatcherBase,
49 virtual public ibase::ICommandsProvider
51 Q_DECLARE_TR_FUNCTIONS(TTaskCollectionEditorCompBase)
54 typedef iqtgui::StateIconWrapper< iqtgui::TDesignerGuiObserverCompBase<UI, imthype::ITaskCollection> > BaseClass;
55 typedef imod::CMultiModelDispatcherBase BaseClass2;
57 I_BEGIN_BASE_COMPONENT(TTaskCollectionEditorCompBase);
58 I_REGISTER_SUBELEMENT(Commands);
59 I_REGISTER_SUBELEMENT_INTERFACE(Commands, ibase::ICommandsProvider, ExtractCommands);
60 I_REGISTER_SUBELEMENT_INTERFACE(Commands, istd::IChangeable, ExtractCommands);
61 I_REGISTER_SUBELEMENT_INTERFACE(Commands, imod::IModel, ExtractCommands);
62 I_REGISTER_SUBELEMENT(TaskSettings);
63 I_REGISTER_SUBELEMENT_INTERFACE(TaskSettings, imthype::ITaskSettings, ExtractTaskSettings);
64 I_REGISTER_SUBELEMENT_INTERFACE(TaskSettings, istd::IChangeable, ExtractTaskSettings);
65 I_REGISTER_SUBELEMENT_INTERFACE(TaskSettings, imod::IModel, ExtractTaskSettings);
66 I_ASSIGN(m_previewArtifactIdAttrPtr,
"PreviewArtifactId",
"ID of the artifact used for task tumbnail",
true,
"Preview");
67 I_ASSIGN(m_allowAddTasksAttrPtr,
"AllowAddTasks",
"If enabled, adding the new task by user will be possible",
true,
true);
68 I_ASSIGN(m_taskInputManagerGuiCompPtr,
"TaskInputEditor",
"Editor of task inputs",
false,
"TaskInputEditor");
69 I_ASSIGN_TO(m_taskInputManagerObserverCompPtr, m_taskInputManagerGuiCompPtr,
true);
70 I_ASSIGN(m_taskSettingsGuiCompPtr,
"TaskSettingsEditor",
"Editor of task settings",
false,
"TaskSettingsGui");
71 I_ASSIGN_TO(m_taskSettingsObserverCompPtr, m_taskSettingsGuiCompPtr,
true);
74 TTaskCollectionEditorCompBase();
75 ~TTaskCollectionEditorCompBase();
79 void AddTask(
const QByteArray& typeId = QByteArray(),
bool initUserId =
false);
82 void OnTaskSelectionChanged(
const QItemSelection& selected,
const QItemSelection& deselected);
83 void EditTask(
const QModelIndex& index);
85 void RenameTask(
bool autoRename =
true);
86 void ShowInputsManager();
88 int GetLastNumberedUserId();
91 virtual QItemSelectionModel* GetTaskSelectionModel()
const = 0;
93 virtual void UpdateCommands();
94 void UpdateTaskItemState(
const QModelIndex& index);
95 imod::IModel* GetTaskModelFromSelection(
const QItemSelection& itemSelection)
const;
96 imod::IObserver* GetTaskModelObserverFromSelection(
const QItemSelection& itemSelection)
const;
98 void InfoToTaskSettings();
99 void InfoFromTaskSettings();
100 void OnTaskSettingsChanged(
const istd::IChangeable::ChangeSet& ,
const imthype::ITaskSettings* taskSettingsPtr);
103 virtual void OnGuiModelAttached()
override;
104 virtual void OnGuiModelDetached()
override;
105 virtual void UpdateGui(
const istd::IChangeable::ChangeSet& changeSet)
override;
108 virtual void OnModelChanged(
int modelId,
const istd::IChangeable::ChangeSet& changeSet)
override;
111 class TaskSettings:
virtual public imthype::ITaskSettings
116 void SetParent(TTaskCollectionEditorCompBase* parentPtr);
119 virtual QString GetTaskName()
const override;
120 virtual void SetTaskName(
const QString& taskName)
override;
121 virtual QString GetTaskDescription()
const override;
122 virtual void SetTaskDescription(
const QString& taskDescription)
override;
123 virtual bool GetTaskEnabled()
const override;
124 virtual void SetTaskEnabled(
bool isEnabled)
override;
125 virtual QByteArray GetUserTaskId()
const override;
126 virtual void SetUserTaskId(
const QByteArray& userTaskId)
override;
127 virtual QByteArray GetTaskInputId()
const override;
128 virtual void SetTaskInputId(
const QByteArray& inputId)
override;
132 TTaskCollectionEditorCompBase* m_parentPtr =
nullptr;
135 QString m_taskDescription;
136 bool m_isEnabled =
false;
137 QByteArray m_userTaskId;
138 QByteArray m_inputId;
141 template <
typename InterfaceType>
142 static InterfaceType* ExtractTaskSettings(TTaskCollectionEditorCompBase& component)
144 return &component.m_taskSettings;
148 class Commands:
virtual public ibase::ICommandsProvider
153 void SetParent(TTaskCollectionEditorCompBase* parentPtr);
157 virtual const ibase::IHierarchicalCommand* GetCommands()
const override;
160 TTaskCollectionEditorCompBase* m_parentPtr =
nullptr;
163 template <
typename InterfaceType>
164 static InterfaceType* ExtractCommands(TTaskCollectionEditorCompBase& component)
166 return &component.m_commandsProvider;
170 QStandardItemModel m_itemModel;
172 typedef QMap<QByteArray, imod::IObserver*> ObserversMap;
173 ObserversMap m_observersMap;
175 typedef QMap<QByteArray, iqtgui::IGuiObjectSharedPtr> EditorsMap;
176 EditorsMap m_editorsMap;
178 typedef QMap<QByteArray, qsizetype> TypeToIndexMap;
179 TypeToIndexMap m_typeToStackIndexMap;
181 QMenu m_startVariableMenus;
183 int m_currentSelectedIndex = -1;
185 iqtgui::CHierarchicalCommand m_rootCommands;
186 iqtgui::CHierarchicalCommand m_commands;
187 iqtgui::CHierarchicalCommand m_showTaskListCommand;
188 iqtgui::CHierarchicalCommand m_executeAllTasksCommand;
189 iqtgui::CHierarchicalCommand m_addCommand;
190 iqtgui::CHierarchicalCommand m_deleteCommand;
191 iqtgui::CHierarchicalCommand m_duplicateCommand;
192 iqtgui::CHierarchicalCommand m_showInputsManagerCommand;
194 imod::TModelWrap<Commands> m_commandsProvider;
196 imod::TModelWrap<TaskSettings> m_taskSettings;
197 bool m_isTaskSettingsUpdating =
false;
198 QByteArray m_selectedTaskId;
202 I_ATTR(QByteArray, m_previewArtifactIdAttrPtr);
203 I_ATTR(
bool, m_allowAddTasksAttrPtr);
204 I_REF(iqtgui::IGuiObject, m_taskInputManagerGuiCompPtr);
205 I_REF(imod::IObserver, m_taskInputManagerObserverCompPtr);
206 I_REF(iqtgui::IGuiObject, m_taskSettingsGuiCompPtr);
207 I_REF(imod::IObserver, m_taskSettingsObserverCompPtr);
213TTaskCollectionEditorCompBase<UI>::TTaskCollectionEditorCompBase()
214 :m_currentSelectedIndex(0),
215 m_showTaskListCommand(
"Show Task List", 100, ibase::ICommand::CF_GLOBAL_MENU | ibase::ICommand::CF_ONOFF, 1977),
216 m_executeAllTasksCommand(
"Execute", 100, ibase::ICommand::CF_GLOBAL_MENU, 1978),
217 m_addCommand(
"Add Task", 100, ibase::ICommand::CF_GLOBAL_MENU, 1979),
218 m_deleteCommand(
"Remove Task", 100, ibase::ICommand::CF_GLOBAL_MENU, 1979),
219 m_duplicateCommand(
"Duplicate Task", 100, ibase::ICommand::CF_GLOBAL_MENU, 1979),
220 m_showInputsManagerCommand(
"Edit Inputs", 100, ibase::ICommand::CF_GLOBAL_MENU, 1980),
221 m_isTaskSettingsUpdating(false),
222 m_taskSettingsObserver(*this)
224 m_rootCommands.InsertChild(&m_commands,
false);
226 m_commands.InsertChild(&m_showTaskListCommand);
227 m_commands.InsertChild(&m_executeAllTasksCommand);
228 m_commands.InsertChild(&m_addCommand);
229 m_commands.InsertChild(&m_deleteCommand);
230 m_commands.InsertChild(&m_duplicateCommand);
231 m_commands.InsertChild(&m_showInputsManagerCommand);
233 m_commandsProvider.SetParent(
this);
235 m_taskSettings.SetParent(
this);
236 m_taskSettingsObserver.RegisterObject(&m_taskSettings, &TTaskCollectionEditorCompBase<UI>::OnTaskSettingsChanged);
241TTaskCollectionEditorCompBase<UI>::~TTaskCollectionEditorCompBase()
243 m_taskSettingsObserver.UnregisterAllObjects();
248void TTaskCollectionEditorCompBase<UI>::TestAll()
251 if (objectPtr !=
nullptr){
252 imtbase::ICollectionInfo::Ids taskIds = objectPtr->
GetElementIds();
253 for (
const QByteArray& taskId : taskIds){
254 iinsp::ISupplier* taskPtr =
const_cast<iinsp::ISupplier*
>(objectPtr->
GetTask(taskId));
257 if ((taskPtr !=
nullptr) && isTaskEnabled){
258 taskPtr->InvalidateSupplier();
260 taskPtr->EnsureWorkInitialized();
264 for (
const QByteArray& taskId : taskIds){
265 iinsp::ISupplier* taskPtr =
const_cast<iinsp::ISupplier*
>(objectPtr->
GetTask(taskId));
268 if ((taskPtr !=
nullptr) && isTaskEnabled){
269 taskPtr->EnsureWorkFinished();
277void TTaskCollectionEditorCompBase<UI>::AddTask(
const QByteArray& typeId,
bool initUserId)
280 if (objectPtr ==
nullptr){
285 if (taskTypesPtr ==
nullptr || taskTypesPtr->GetOptionsCount() < 1){
289 QByteArray workingTypeId = typeId;
290 if (workingTypeId.isEmpty()){
291 workingTypeId = taskTypesPtr->GetOptionId(0);
294 istd::CChangeGroup changeGroup(objectPtr);
295 Q_UNUSED(changeGroup);
297 QByteArray taskId = objectPtr->
InsertNewObject(workingTypeId, QString(), QString());
299 if (taskId.isEmpty()){
300 QMessageBox::critical(BaseClass::GetWidget(), QObject::tr(
"Task Manager"), QObject::tr(
"Task could not be created!"));
305 int lastUserId = GetLastNumberedUserId();
307 if (lastUserId >= 0){
308 objectPtr->
SetUserTaskId(taskId, QByteArray(QString::number(lastUserId + 1).toUtf8()));
313 QItemSelectionModel* selectionModelPtr = GetTaskSelectionModel();
314 int lastRow = selectionModelPtr->model()->rowCount() - 1;
315 m_currentSelectedIndex = lastRow;
316 selectionModelPtr->setCurrentIndex(selectionModelPtr->model()->index(lastRow, 0), QItemSelectionModel::SelectCurrent);
321void TTaskCollectionEditorCompBase<UI>::DeleteTask()
324 if (objectPtr ==
nullptr){
328 QItemSelectionModel* selectionModelPtr = GetTaskSelectionModel();
329 if (selectionModelPtr ==
nullptr){
333 const QItemSelection currentSelection = selectionModelPtr->selection();
334 const QModelIndexList indexes = currentSelection.indexes();
335 if (indexes.isEmpty()){
339 int selectionIndex = m_currentSelectedIndex;
340 selectionModelPtr->select(currentSelection, QItemSelectionModel::Deselect);
342 imtbase::ICollectionInfo::Ids taskIds = objectPtr->
GetElementIds();
344 if (taskIds.count() > 1){
345 m_currentSelectedIndex = selectionIndex > 0 ? selectionIndex - 1 : 0;
348 const QModelIndex index = indexes[0];
350 QByteArray taskId = index.data(CTaskItemDelegate::DR_TASK_UUID).toByteArray();
352 imtbase::ICollectionInfo::Ids elementIds;
353 elementIds << taskId;
360void TTaskCollectionEditorCompBase<UI>::DuplicateTask()
363 if (objectPtr ==
nullptr){
367 QItemSelectionModel* selectionModelPtr = GetTaskSelectionModel();
368 if (selectionModelPtr ==
nullptr){
372 const QItemSelection currentSelection = selectionModelPtr->selection();
373 const QModelIndexList selectedIndexes = currentSelection.indexes();
375 if (!selectedIndexes.isEmpty()){
376 const QModelIndex index = selectedIndexes[0];
378 QByteArray taskId = index.data(CTaskItemDelegate::DR_TASK_UUID).toByteArray();
379 QByteArray taskTypeId = index.data(CTaskItemDelegate::DR_TYPE_ID).toByteArray();
380 QString sourceTaskName = index.data(CTaskItemDelegate::DR_TASK_NAME).toString();
382 istd::CChangeGroup changeGroup(objectPtr);
383 Q_UNUSED(changeGroup);
385 QByteArray newTaskId = objectPtr->
InsertNewObject(taskTypeId, QString(
"Copy of %1").arg(sourceTaskName),
"", objectPtr->
GetObjectPtr(taskId));
386 if (newTaskId.isEmpty()){
387 QMessageBox::critical(BaseClass::GetWidget(), QObject::tr(
"Task Error"), QObject::tr(
"Task could not be duplicated!"));
392 int lastUserId = GetLastNumberedUserId();
393 if (lastUserId >= 0){
394 objectPtr->
SetUserTaskId(newTaskId, QByteArray(QString::number(lastUserId + 1).toUtf8()));
400 int lastRow = selectionModelPtr->model()->rowCount() - 1;
401 m_currentSelectedIndex = lastRow;
402 selectionModelPtr->setCurrentIndex(selectionModelPtr->model()->index(lastRow, 0), QItemSelectionModel::SelectCurrent);
407void TTaskCollectionEditorCompBase<UI>::OnTaskSelectionChanged(
const QItemSelection& selected,
const QItemSelection& deselected)
410 m_currentSelectedIndex = 0;
413 m_selectedTaskId.clear();
416 if (objectPtr !=
nullptr){
417 imod::IModel* taskModelPtr = GetTaskModelFromSelection(deselected);
418 imod::IObserver* observerPtr = GetTaskModelObserverFromSelection(deselected);
419 if (taskModelPtr !=
nullptr && observerPtr !=
nullptr){
420 taskModelPtr->DetachObserver(observerPtr);
423 const QModelIndexList selectedIndexes = selected.indexes();
424 if (!selectedIndexes.isEmpty()){
425 const QModelIndex index = selectedIndexes[0];
427 QStandardItem* itemPtr = m_itemModel.itemFromIndex(index);
428 if (itemPtr !=
nullptr){
429 m_currentSelectedIndex = itemPtr->row();
431 QByteArray typeId = itemPtr->data(CTaskItemDelegate::DR_TYPE_ID).toByteArray();
432 pageIndex = m_typeToStackIndexMap[typeId];
433 taskName = itemPtr->data(CTaskItemDelegate::DR_TASK_NAME).toString();
434 m_selectedTaskId = itemPtr->data(CTaskItemDelegate::DR_TASK_UUID).toByteArray();
436 const iinsp::ISupplier* supplierPtr = objectPtr->
GetTask(m_selectedTaskId);
437 imod::IModel* selectedTaskModelPtr =
dynamic_cast<imod::IModel*
>(
const_cast<iinsp::ISupplier*
>(supplierPtr));
438 imod::IObserver* selectedObserverPtr = m_observersMap[typeId];
440 if (selectedTaskModelPtr && selectedObserverPtr && !selectedTaskModelPtr->IsAttached(selectedObserverPtr)){
441 selectedTaskModelPtr->AttachObserver(selectedObserverPtr);
447 BaseClass::TaskEditorStack->setCurrentIndex(pageIndex);
449 BaseClass::SetStatusText(taskName);
453 InfoToTaskSettings();
458void TTaskCollectionEditorCompBase<UI>::EditTask(
const QModelIndex& )
461 if (objectPtr !=
nullptr && m_taskSettingsGuiCompPtr.IsValid() && m_taskSettingsObserverCompPtr.IsValid()){
462 iqtgui::CGuiComponentDialog dialog(m_taskSettingsGuiCompPtr.GetPtr(), QDialogButtonBox::Ok);
463 dialog.SetDialogGeometry(0.15);
471void TTaskCollectionEditorCompBase<UI>::ToggleTask()
473 QItemSelectionModel* selectionModelPtr = GetTaskSelectionModel();
474 if (selectionModelPtr ==
nullptr){
479 if (objectPtr !=
nullptr){
480 const QItemSelection currentSelection = selectionModelPtr->selection();
481 const QModelIndexList selectedIndexes = currentSelection.indexes();
483 if (!selectedIndexes.isEmpty()){
484 const QModelIndex index = selectedIndexes[0];
486 QByteArray taskId = index.data(CTaskItemDelegate::DR_TASK_UUID).toByteArray();
487 bool isEnabled = index.data(CTaskItemDelegate::DR_TASK_ENABLED).toBool();
496void TTaskCollectionEditorCompBase<UI>::RenameTask(
bool autoRename)
498 QItemSelectionModel* selectionModelPtr = GetTaskSelectionModel();
499 if (selectionModelPtr ==
nullptr){
504 if (objectPtr !=
nullptr){
505 const QItemSelection currentSelection = selectionModelPtr->selection();
506 const QModelIndexList selectedIndexes = currentSelection.indexes();
508 if (!selectedIndexes.isEmpty()){
509 const QModelIndex index = selectedIndexes[0];
511 QString currentTaskName = index.data(CTaskItemDelegate::DR_TASK_NAME).toString();
513 bool renamingFinished =
false;
515 while (!renamingFinished){
516 bool isGetNameOk =
false;
517 const QString newName = QInputDialog::getText(BaseClass::GetWidget(), QObject::tr(
"Enter new task name"), QObject::tr(
"Name"), QLineEdit::Normal, currentTaskName, &isGetNameOk).trimmed();
520 if (!newName.isEmpty()){
521#if QT_VERSION > 0x060000
522 QRegularExpressionValidator inputValidator(QRegularExpression(
"^[^\\\\/:\\*\\?\"\\<\\>\\|\\+]+$"));
524 QRegExpValidator inputValidator(QRegExp(
"^[^\\\\/:\\*\\?\"\\<\\>\\|\\+]+$"));
527 QString name = newName;
528 if (inputValidator.validate(name, pos) != QValidator::Acceptable){
529 QMessageBox::critical(
nullptr, tr(
"Error"), tr(
"The task name contains some not allowed characters"));
534 QByteArray taskId = index.data(CTaskItemDelegate::DR_TASK_UUID).toByteArray();
536 bool isNewNameExists =
false;
539 imtbase::IObjectCollection::Ids ids = objectPtr->
GetElementIds();
540 for (
const imtbase::IObjectCollection::Id&
id : ids){
543 if (newName == taskName){
544 isNewNameExists =
true;
550 if (!isNewNameExists){
552 renamingFinished =
true;
555 QMessageBox::warning(
556 BaseClass::GetQtWidget(),
557 QObject::tr(
"Warning"),
558 QObject::tr(
"Task name already exist"));
562 QMessageBox::warning(BaseClass::GetWidget(), QObject::tr(
"Wrong task name"), QObject::tr(
"Empty task name cannot be used"));
566 renamingFinished =
true;
575void TTaskCollectionEditorCompBase<UI>::ShowInputsManager()
577 if (m_taskInputManagerGuiCompPtr.IsValid() && m_taskInputManagerObserverCompPtr.IsValid()){
579 if (objectPtr !=
nullptr){
581 if (taskInputsPtr !=
nullptr){
582 const imod::IModel* taskInputsModelPtr =
dynamic_cast<const imod::IModel*
>(taskInputsPtr);
583 if (taskInputsModelPtr !=
nullptr){
584 if ((
const_cast<imod::IModel*
>(taskInputsModelPtr))->AttachObserver(m_taskInputManagerObserverCompPtr.GetPtr())){
585 iqtgui::CGuiComponentDialog dialog(m_taskInputManagerGuiCompPtr.GetPtr(), QDialogButtonBox::Close,
false, BaseClass::GetWidget());
586 dialog.SetDialogGeometry(0.5);
587 dialog.setWindowTitle(tr(
"Task Input Manager"));
591 (
const_cast<imod::IModel*
>(taskInputsModelPtr))->DetachObserver(m_taskInputManagerObserverCompPtr.GetPtr());
601int TTaskCollectionEditorCompBase<UI>::GetLastNumberedUserId()
604 if (objectPtr ==
nullptr){
610 imtbase::IObjectCollection::Ids ids = objectPtr->
GetElementIds();
611 for (
const imtbase::IObjectCollection::Id&
id : ids){
615 int convertedUserId = userId.toInt(&isOk);
618 if (convertedUserId > lastUserId){
619 lastUserId = convertedUserId;
629void TTaskCollectionEditorCompBase<UI>::UpdateCommands()
631 m_addCommand.setEnabled(
false);
632 m_deleteCommand.setEnabled(
false);
633 m_duplicateCommand.setEnabled(
false);
634 m_showInputsManagerCommand.setEnabled(
false);
637 if (objectPtr !=
nullptr){
638 m_addCommand.setEnabled(
true);
643 const QModelIndexList selection = BaseClass::TaskList->selectionModel()->selectedIndexes();
644 if (!selection.isEmpty()){
645 const QModelIndex index = selection[0];
647 QByteArray taskId = index.data(CTaskItemDelegate::DR_TASK_UUID).toByteArray();
650 m_deleteCommand.setVisible(*m_allowAddTasksAttrPtr);
653 m_duplicateCommand.setEnabled(*m_allowAddTasksAttrPtr);
656 m_showInputsManagerCommand.setEnabled(objectPtr->
GetTaskInputs() !=
nullptr);
662void TTaskCollectionEditorCompBase<UI>::InfoToTaskSettings()
664 m_isTaskSettingsUpdating =
true;
668 bool isEnabled =
false;
669 QByteArray userTaskId;
673 if (objectPtr !=
nullptr && objectPtr->
GetElementIds().contains(m_selectedTaskId)){
682 istd::CChangeGroup group(&m_taskSettings);
684 m_taskSettings.SetTaskName(name);
685 m_taskSettings.SetTaskDescription(description);
686 m_taskSettings.SetTaskEnabled(isEnabled);
687 m_taskSettings.SetUserTaskId(userTaskId);
688 m_taskSettings.SetTaskInputId(inputId);
691 m_isTaskSettingsUpdating =
false;
696void TTaskCollectionEditorCompBase<UI>::InfoFromTaskSettings()
698 if (!m_isTaskSettingsUpdating){
699 QString name = m_taskSettings.GetTaskName();
700 QString description = m_taskSettings.GetTaskDescription();
701 bool isEnabled = m_taskSettings.GetTaskEnabled();
702 QByteArray userTaskId = m_taskSettings.GetUserTaskId();
703 QByteArray inputId = m_taskSettings.GetTaskInputId();
706 if (taskCollectionPtr !=
nullptr && taskCollectionPtr->
GetElementIds().contains(m_selectedTaskId)){
707 istd::CChangeGroup group(taskCollectionPtr);
713 if (!taskCollectionPtr->
SetUserTaskId(m_selectedTaskId, userTaskId)){
714 QByteArray userId = taskCollectionPtr->
GetUserTaskId(m_selectedTaskId);
715 m_taskSettings.SetUserTaskId(userId);
724void TTaskCollectionEditorCompBase<UI>::UpdateTaskItemState(
const QModelIndex& index)
726 istd::IInformationProvider::InformationCategory taskState = istd::IInformationProvider::IC_NONE;
729 if (objectPtr ==
nullptr){
733 QByteArray taskId = index.data(CTaskItemDelegate::DR_TASK_UUID).toByteArray();
735 const iinsp::ISupplier* taskPtr = objectPtr->
GetTask(taskId);
736 if (taskPtr ==
nullptr){
737 m_itemModel.setData(index, taskState, CTaskItemDelegate::DR_TASK_PROCESSING_STATE);
738 m_itemModel.setData(index, this->GetCategoryPixmap(taskState), CTaskItemDelegate::DR_TASK_PROCESSING_STATE_ICON);
742 const istd::IInformationProvider* infoProviderPtr =
dynamic_cast<const istd::IInformationProvider*
>(taskPtr);
743 if (infoProviderPtr !=
nullptr){
744 taskState = infoProviderPtr->GetInformationCategory();
748 if (taskResultsProviderPtr !=
nullptr){
750 const iimg::IBitmap* inputBitmapPtr =
dynamic_cast<const iimg::IBitmap*
>(taskResultsProviderPtr->
GetObjectPtr(*m_previewArtifactIdAttrPtr));
751 if (inputBitmapPtr !=
nullptr){
753 if (
const iimg::CBitmap* imagePtr =
dynamic_cast<const iimg::CBitmap*
>(inputBitmapPtr)) {
754 m_itemModel.setData(index, imagePtr->GetQImage(), CTaskItemDelegate::DR_TASK_PREVIEW_OBJECT);
757 iimg::CBitmap previewBitmap;
758 previewBitmap.CopyFrom(*inputBitmapPtr, istd::IChangeable::CM_CONVERT);
760 m_itemModel.setData(index, previewBitmap.GetQImage(), CTaskItemDelegate::DR_TASK_PREVIEW_OBJECT);
765 m_itemModel.setData(index, taskState, CTaskItemDelegate::DR_TASK_PROCESSING_STATE);
766 m_itemModel.setData(index, this->GetCategoryPixmap(taskState), CTaskItemDelegate::DR_TASK_PROCESSING_STATE_ICON);
771imod::IModel* TTaskCollectionEditorCompBase<UI>::GetTaskModelFromSelection(
const QItemSelection& itemSelection)
const
774 if (objectPtr ==
nullptr){
778 const QModelIndexList indexes = itemSelection.indexes();
779 if (indexes.isEmpty()){
783 const QModelIndex index = indexes[0];
785 QByteArray taskId = index.data(CTaskItemDelegate::DR_TASK_UUID).toByteArray();
787 const iinsp::ISupplier* supplierPtr = objectPtr->
GetTask(taskId);
789 return dynamic_cast<imod::IModel*
>(
const_cast<iinsp::ISupplier*
>(supplierPtr));
794imod::IObserver* TTaskCollectionEditorCompBase<UI>::GetTaskModelObserverFromSelection(
const QItemSelection& itemSelection)
const
797 if (objectPtr ==
nullptr){
801 const QModelIndexList indexes = itemSelection.indexes();
802 if (indexes.isEmpty()){
806 const QModelIndex index = indexes[0];
808 const QStandardItem* itemPtr = m_itemModel.itemFromIndex(index);
809 Q_ASSERT(itemPtr !=
nullptr);
811 QByteArray typeId = itemPtr->data(CTaskItemDelegate::DR_TYPE_ID).toByteArray();
813 return m_observersMap[typeId];
818void TTaskCollectionEditorCompBase<UI>::OnTaskSettingsChanged(
819 const istd::IChangeable::ChangeSet& ,
820 const imthype::ITaskSettings* )
822 InfoFromTaskSettings();
829void TTaskCollectionEditorCompBase<UI>::OnGuiModelAttached()
831 BaseClass::OnGuiModelAttached();
834 if (objectPtr !=
nullptr){
836 if (taskTypesPtr !=
nullptr){
837 int taskTypesCount = taskTypesPtr->GetOptionsCount();
838 for (
int i = 0; i < taskTypesCount; ++i){
839 if (taskTypesPtr->IsOptionEnabled(i)){
840 const QString typeName = taskTypesPtr->GetOptionName(i);
842 QAction* action = m_startVariableMenus.addAction(typeName);
843 action->setData(taskTypesPtr->GetOptionId(i));
847 m_addCommand.setMenu(&m_startVariableMenus);
849 QObject::connect(&m_startVariableMenus, SIGNAL(triggered(QAction*)),
this, SLOT(OnAddMenuOptionClicked(QAction*)));
856void TTaskCollectionEditorCompBase<UI>::OnGuiModelDetached()
858 BaseClass::OnGuiModelDetached();
863void TTaskCollectionEditorCompBase<UI>::UpdateGui(
const istd::IChangeable::ChangeSet& changeSet)
865 Q_ASSERT(BaseClass::IsGuiCreated());
866 int currentSelectedIndex = m_currentSelectedIndex;
868 if (changeSet.ContainsExplicit(istd::IChangeable::CF_DELEGATED,
true)){
872 const QItemSelection currentSelection = BaseClass::TaskList->selectionModel()->selection();
873 const QModelIndexList indexes = currentSelection.indexes();
874 if (!indexes.isEmpty()){
875 BaseClass::TaskList->selectionModel()->select(currentSelection, QItemSelectionModel::Deselect);
878 BaseClass::TaskList->selectionModel()->clear();
880 m_itemModel.setColumnCount(1);
882 BaseClass2::UnregisterAllModels();
885 if (objectPtr ==
nullptr){
894 imtbase::ICollectionInfo::Ids taskIds = objectPtr->
GetElementIds();
895 for (
const QByteArray& taskId : taskIds){
897 QString taskTypeName = taskTypeId;
898 if (typesInfoPtr !=
nullptr){
899 for (
int i = 0; i < typesInfoPtr->GetOptionsCount(); ++i){
900 if (typesInfoPtr->GetOptionId(i) == taskTypeId){
901 taskTypeName = typesInfoPtr->GetOptionName(i);
907 QStandardItem* taskItemPtr =
new QStandardItem();
908 taskItemPtr->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
909 taskItemPtr->setData(taskId, CTaskItemDelegate::DR_TASK_UUID);
910 taskItemPtr->setData(taskTypeId, CTaskItemDelegate::DR_TYPE_ID);
911 taskItemPtr->setData(taskTypeName, CTaskItemDelegate::DR_TYPE_NAME);
913 taskItemPtr->setData(taskName, CTaskItemDelegate::DR_TASK_NAME);
915 taskItemPtr->setData(objectPtr->
GetUserTaskId(taskId), CTaskItemDelegate::DR_TASK_USERID);
916 taskItemPtr->setData(objectPtr->
GetTaskInputId(taskId), CTaskItemDelegate::DR_TASK_INPUTID);
918 taskItemPtr->setToolTip(
919 tr(
"Task name: ") + taskName
923 m_itemModel.appendRow(taskItemPtr);
925 const iinsp::ISupplier* taskPtr = objectPtr->
GetTask(taskId);
926 imod::IModel* taskModelPtr =
const_cast<imod::IModel*
>(
dynamic_cast<const imod::IModel*
>(taskPtr));
927 if (taskModelPtr !=
nullptr){
928 BaseClass2::RegisterModel(taskModelPtr, modelId++);
932 int rowCount = m_itemModel.rowCount();
934 if (currentSelectedIndex > rowCount - 1){
935 currentSelectedIndex = rowCount - 1;
938 for (
int i = 0; i < rowCount; ++i){
939 const QModelIndex index = m_itemModel.index(i, 0);
940 if (i == currentSelectedIndex){
941 BaseClass::TaskList->selectionModel()->select(index, QItemSelectionModel::Select);
944 UpdateTaskItemState(index);
954void TTaskCollectionEditorCompBase<UI>::OnModelChanged(
int modelId,
const istd::IChangeable::ChangeSet& )
956 const QModelIndex index = m_itemModel.index(modelId, 0);
958 UpdateTaskItemState(index);
965TTaskCollectionEditorCompBase<UI>::Commands::Commands()
966 :m_parentPtr(nullptr)
972void TTaskCollectionEditorCompBase<UI>::Commands::SetParent(TTaskCollectionEditorCompBase<UI>* parentPtr)
974 Q_ASSERT(parentPtr !=
nullptr);
976 m_parentPtr = parentPtr;
983const ibase::IHierarchicalCommand* TTaskCollectionEditorCompBase<UI>::Commands::GetCommands()
const
985 Q_ASSERT(m_parentPtr !=
nullptr);
987 return &m_parentPtr->m_rootCommands;
994TTaskCollectionEditorCompBase<UI>::TaskSettings::TaskSettings()
995 :m_parentPtr(nullptr),
1002void TTaskCollectionEditorCompBase<UI>::TaskSettings::SetParent(TTaskCollectionEditorCompBase* parentPtr)
1004 Q_ASSERT(parentPtr !=
nullptr);
1006 m_parentPtr = parentPtr;
1013QString TTaskCollectionEditorCompBase<UI>::TaskSettings::GetTaskName()
const
1020void TTaskCollectionEditorCompBase<UI>::TaskSettings::SetTaskName(
const QString& taskName)
1022 if (m_taskName != taskName){
1023 istd::CChangeNotifier notifier(
this);
1025 m_taskName = taskName;
1031QString TTaskCollectionEditorCompBase<UI>::TaskSettings::GetTaskDescription()
const
1033 return m_taskDescription;
1038void TTaskCollectionEditorCompBase<UI>::TaskSettings::SetTaskDescription(
const QString& taskDescription)
1040 if (m_taskDescription != taskDescription){
1041 istd::CChangeNotifier notifier(
this);
1043 m_taskDescription = taskDescription;
1049bool TTaskCollectionEditorCompBase<UI>::TaskSettings::GetTaskEnabled()
const
1056void TTaskCollectionEditorCompBase<UI>::TaskSettings::SetTaskEnabled(
bool isEnabled)
1058 if (m_isEnabled!= isEnabled){
1059 istd::CChangeNotifier notifier(
this);
1061 m_isEnabled = isEnabled;
1067QByteArray TTaskCollectionEditorCompBase<UI>::TaskSettings::GetUserTaskId()
const
1069 return m_userTaskId;
1074void TTaskCollectionEditorCompBase<UI>::TaskSettings::SetUserTaskId(
const QByteArray& userTaskId)
1076 if (m_userTaskId != userTaskId){
1077 istd::CChangeNotifier notifier(
this);
1079 m_userTaskId = userTaskId;
1085QByteArray TTaskCollectionEditorCompBase<UI>::TaskSettings::GetTaskInputId()
const
1092void TTaskCollectionEditorCompBase<UI>::TaskSettings::SetTaskInputId(
const QByteArray& inputId)
1094 if (m_inputId != inputId){
1095 istd::CChangeNotifier notifier(
this);
1097 m_inputId = inputId;
1105 Q_ASSERT(m_parentPtr !=
nullptr);
1108 if (taskCollectionPtr !=
nullptr){
virtual bool SetElementName(const Id &elementId, const QString &name, ilog::IMessageConsumer *logPtr=nullptr)=0
virtual QVariant GetElementInfo(const Id &elementId, int infoType, ilog::IMessageConsumer *logPtr=nullptr) const =0
virtual Ids GetElementIds(int offset=0, int count=-1, const iprm::IParamsSet *selectionParamsPtr=nullptr, ilog::IMessageConsumer *logPtr=nullptr) const =0
virtual bool SetElementEnabled(const Id &elementId, bool isEnabled=true, ilog::IMessageConsumer *logPtr=nullptr)=0
virtual bool SetElementDescription(const Id &elementId, const QString &description, ilog::IMessageConsumer *logPtr=nullptr)=0
virtual const istd::IChangeable * GetObjectPtr(const Id &objectId) const =0
virtual bool RemoveElements(const Ids &elementIds, const IOperationContext *operationContextPtr=nullptr)=0
virtual int GetOperationFlags(const Id &elementId=Id()) const =0
virtual Id InsertNewObject(const QByteArray &typeId, const QString &name, const QString &description, const istd::IChangeable *defaultValuePtr=nullptr, const Id &proposedElementId=Id(), const idoc::IDocumentMetaInfo *dataMetaInfoPtr=nullptr, const idoc::IDocumentMetaInfo *elementMetaInfoPtr=nullptr, const IOperationContext *operationContextPtr=nullptr)=0
virtual const iprm::IOptionsList * GetObjectTypesInfo() const =0
virtual Id GetObjectTypeId(const Id &objectId) const =0
virtual const imtbase::IObjectCollection * GetTaskInputs() const =0
virtual QByteArray GetUserTaskId(const QByteArray &taskUuid) const =0
virtual bool SetUserTaskId(const QByteArray &taskUuid, const QByteArray &userTaskId)=0
virtual const iinsp::ISupplier * GetTask(const QByteArray &taskId) const =0
virtual bool SetTaskInputId(const QByteArray &taskUuid, const QByteArray &inputId)=0
virtual QByteArray GetTaskInputId(const QByteArray &taskUuid) const =0