10 #ifndef smtk_extension_qt_qtOperationTypeModel_h
11 #define smtk_extension_qt_qtOperationTypeModel_h
13 #include "smtk/extension/qt/Exports.h"
14 #include "smtk/extension/qt/qtOperationLauncher.h"
16 #include <QAbstractListModel>
19 #include "smtk/attribute/utility/Queries.h"
20 #include "smtk/common/Managers.h"
21 #include "smtk/operation/MetadataObserver.h"
22 #include "smtk/operation/Operation.h"
23 #include "smtk/view/Information.h"
24 #include "smtk/view/SelectionObserver.h"
31 class OperationDecorator;
121 static Column columnEnumFromName(
const std::string& colName);
122 static std::string columnNameFromEnum(Column enumerant);
124 int rowCount(
const QModelIndex& parent)
const override;
125 int columnCount(
const QModelIndex& parent)
const override;
126 QVariant data(
const QModelIndex& index,
int role)
const override;
127 QVariant headerData(
int section, Qt::Orientation orientation,
int role)
const override;
131 template<
typename OperationType>
134 return this->actionFor(this->findByTypeIndex<OperationType>());
138 QModelIndex findByTypeIndex(smtk::operation::Operation::Index typeIndex)
const;
139 template<
typename OperationType>
140 QModelIndex findByTypeIndex()
const
142 return this->findByTypeIndex(std::type_index(
typeid(OperationType)).hash_code());
149 smtk::operation::Operation::Index typeIndexFromTypeName(
const std::string&
typeName)
const;
152 void setDecorator(
const std::shared_ptr<smtk::view::OperationDecorator>& decorator);
153 std::shared_ptr<smtk::view::OperationDecorator> decorator()
const;
156 std::shared_ptr<smtk::operation::Operation> prepareOperation(
157 smtk::operation::Operation::Index typeIndex)
const;
166 virtual void runOperationWithDefaults(smtk::operation::Operation::Index typeIndex)
const;
169 virtual void runOperationWithParameters(
170 const std::shared_ptr<smtk::operation::Operation>& operation)
const;
173 virtual void requestOperationParameterEdits(smtk::operation::Operation::Index typeIndex)
const;
195 void runOperation(smtk::operation::Operation::Index);
196 void editOperationParameters(smtk::operation::Operation::Index)
const;
200 void runSendingOperation();
201 void editSendingOperationParameters();
204 using EditableParameters = smtk::attribute::utility::EditableParameters;
261 static std::array<std::string, 10> names{
"BadExcess",
"UglyExcess",
"GoodExcess",
262 "Unneeded",
"BadIncomplete",
"UglyIncomplete",
263 "GoodIncomplete",
"BadComplete",
"UglyComplete",
265 return names[
static_cast<int>(aa)];
271 std::string associabilityName(aa);
273 associabilityName.begin(),
274 associabilityName.end(),
275 associabilityName.begin(),
276 [](
unsigned char c) { return std::tolower(c); });
278 if (associabilityName.substr(0, 22) ==
"qtoperationtypemodel::")
280 associabilityName = associabilityName.substr(22);
282 if (associabilityName.substr(0, 15) ==
"associability::")
284 associabilityName = associabilityName.substr(15);
287 if (associabilityName ==
"badexcess")
289 return Associability::BadExcess;
291 else if (associabilityName ==
"uglyexcess")
293 return Associability::UglyExcess;
295 else if (associabilityName ==
"goodexcess")
297 return Associability::GoodExcess;
299 else if (associabilityName ==
"unneeded")
301 return Associability::Unneeded;
303 else if (associabilityName ==
"badincomplete")
305 return Associability::BadIncomplete;
307 else if (associabilityName ==
"uglyincomplete")
309 return Associability::UglyIncomplete;
311 else if (associabilityName ==
"goodincomplete")
313 return Associability::GoodIncomplete;
315 else if (associabilityName ==
"badcomplete")
317 return Associability::BadComplete;
319 else if (associabilityName ==
"uglycomplete")
321 return Associability::UglyComplete;
324 return Associability::GoodComplete;
332 smtk::operation::Operation::Index typeIndex,
334 const std::string& label,
336 EditableParameters editability,
337 const std::string& buttonLabel,
338 const std::string& toolTip,
341 bool operator<(
const Item& other)
const;
343 smtk::operation::Operation::Index m_index;
345 EditableParameters m_editability{ EditableParameters::Mandatory };
346 std::string m_shortName;
347 std::string m_typeName;
349 std::string m_toolTip;
351 mutable QPointer<qtOperationAction> m_action;
357 void updateSelectionAssociability(
358 const std::string& source,
359 const std::shared_ptr<smtk::view::Selection>& selection,
365 std::vector<Item> m_operations;
366 std::shared_ptr<smtk::operation::Manager> m_operationManager;
367 std::shared_ptr<smtk::view::Manager> m_viewManager;
368 std::shared_ptr<smtk::view::Selection> m_selection;
369 std::shared_ptr<smtk::view::OperationDecorator> m_operationDecorator;
384 int m_selectionValue{ 0x01 };
391 bool m_selectionExact{
false };
401 std::string m_secondaryColor{
"#ffffff" };
409 #endif // smtk_extension_qt_qtOperationTypeModel_h