PickObjectDelegate.cpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /*
  2. * PickObjectDelegate.cpp, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #include "StdInc.h"
  11. #include "PickObjectDelegate.h"
  12. #include "../mapcontroller.h"
  13. #include "../../lib/mapObjects/CGObjectInstance.h"
  14. PickObjectDelegate::PickObjectDelegate(MapController & c): controller(c)
  15. {
  16. filter = [](const CGObjectInstance *)
  17. {
  18. return true;
  19. };
  20. }
  21. PickObjectDelegate::PickObjectDelegate(MapController & c, std::function<bool(const CGObjectInstance *)> f): controller(c), filter(f)
  22. {
  23. }
  24. void PickObjectDelegate::onObjectPicked(const CGObjectInstance * o)
  25. {
  26. for(int lvl : {0, 1})
  27. {
  28. auto & l = controller.scene(lvl)->objectPickerView;
  29. l.clear();
  30. l.update();
  31. QObject::disconnect(&l, &ObjectPickerLayer::selectionMade, this, &PickObjectDelegate::onObjectPicked);
  32. }
  33. QMap<int, QVariant> data;
  34. data[Qt::DisplayRole] = QVariant("None");
  35. data[Qt::UserRole] = QVariant::fromValue(data_cast(o));
  36. if(o)
  37. data[Qt::DisplayRole] = QVariant(QString::fromStdString(o->instanceName));
  38. const_cast<QAbstractItemModel*>(modelIndex.model())->setItemData(modelIndex, data);
  39. }
  40. QWidget * PickObjectDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
  41. {
  42. for(int lvl : {0, 1})
  43. {
  44. auto & l = controller.scene(lvl)->objectPickerView;
  45. l.highlight(filter);
  46. l.update();
  47. QObject::connect(&l, &ObjectPickerLayer::selectionMade, this, &PickObjectDelegate::onObjectPicked);
  48. }
  49. modelIndex = index;
  50. return nullptr;
  51. }