ModelPresetBrowserDialog.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <Atom/Feature/Utils/ModelPreset.h>
  9. #include <AtomToolsFramework/Util/Util.h>
  10. #include <AzFramework/Application/Application.h>
  11. #include <Viewport/MaterialViewportRequestBus.h>
  12. #include <Window/PresetBrowserDialogs/ModelPresetBrowserDialog.h>
  13. namespace MaterialEditor
  14. {
  15. ModelPresetBrowserDialog::ModelPresetBrowserDialog(QWidget* parent)
  16. : PresetBrowserDialog(parent)
  17. {
  18. QSignalBlocker signalBlocker(this);
  19. setWindowTitle("Model Preset Browser");
  20. MaterialViewportRequestBus::BroadcastResult(m_initialPreset, &MaterialViewportRequestBus::Events::GetModelPresetSelection);
  21. AZ::Render::ModelPresetPtrVector presets;
  22. MaterialViewportRequestBus::BroadcastResult(presets, &MaterialViewportRequestBus::Events::GetModelPresets);
  23. AZStd::sort(presets.begin(), presets.end(), [](const auto& a, const auto& b) { return a->m_displayName < b->m_displayName; });
  24. const int itemSize = aznumeric_cast<int>(
  25. AtomToolsFramework::GetSettingOrDefault<AZ::u64>("/O3DE/Atom/MaterialEditor/PresetBrowserDialog/ModelItemSize", 90));
  26. QListWidgetItem* selectedItem = nullptr;
  27. for (const auto& preset : presets)
  28. {
  29. QListWidgetItem* item = CreateListItem(preset->m_displayName.c_str(), preset->m_modelAsset.GetId(), QSize(itemSize, itemSize));
  30. m_listItemToPresetMap[item] = preset;
  31. if (m_initialPreset == preset)
  32. {
  33. selectedItem = item;
  34. }
  35. }
  36. if (selectedItem)
  37. {
  38. m_ui->m_presetList->setCurrentItem(selectedItem);
  39. m_ui->m_presetList->scrollToItem(selectedItem);
  40. }
  41. }
  42. void ModelPresetBrowserDialog::SelectCurrentPreset()
  43. {
  44. auto presetItr = m_listItemToPresetMap.find(m_ui->m_presetList->currentItem());
  45. if (presetItr != m_listItemToPresetMap.end())
  46. {
  47. MaterialViewportRequestBus::Broadcast(&MaterialViewportRequestBus::Events::SelectModelPreset, presetItr->second);
  48. }
  49. }
  50. void ModelPresetBrowserDialog::SelectInitialPreset()
  51. {
  52. MaterialViewportRequestBus::Broadcast(&MaterialViewportRequestBus::Events::SelectModelPreset, m_initialPreset);
  53. }
  54. } // namespace MaterialEditor
  55. #include <Window/PresetBrowserDialogs/moc_ModelPresetBrowserDialog.cpp>