BsModalWindow.cpp 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #include "BsModalWindow.h"
  2. #include "BsEditorWindowManager.h"
  3. #include "BsRenderWindow.h"
  4. #include "BsPlatform.h"
  5. #include "BsGUIArea.h"
  6. #include "BsGUILayoutX.h"
  7. #include "BsGUILayoutY.h"
  8. #include "BsGUISpace.h"
  9. #include "BsGUIButton.h"
  10. #include "BsGUITexture.h"
  11. #include "BsGUILabel.h"
  12. namespace BansheeEngine
  13. {
  14. ModalWindow::ModalWindow(const HString& title, bool hasCloseButton)
  15. :EditorWindowBase(true), mTitleBarArea(nullptr), mTitleBarBgArea(nullptr),
  16. mCloseButton(nullptr), mTitleBarBg(nullptr), mTitle(nullptr)
  17. {
  18. EditorWindowManager::instance().registerWindow(this);
  19. mTitleBarBgArea = GUIArea::createStretchedXY(*mGUI, 1, 1, 1, 1, std::numeric_limits<UINT16>::max() - 1);
  20. mTitleBarArea = GUIArea::createStretchedXY(*mGUI, 1, 1, 1, 1, 0);
  21. mTitleBarBg = GUITexture::create(GUIOptions(GUIOption::flexibleWidth()), "TitleBarBackground");
  22. mTitle = GUILabel::create(title);
  23. GUILayout* bgLayout = mTitleBarBgArea->getLayout().addNewElement<GUILayoutY>();
  24. bgLayout->addElement(mTitleBarBg);
  25. bgLayout->addNewElement<GUIFlexibleSpace>();
  26. GUILayout* contentLayoutY = mTitleBarArea->getLayout().addNewElement<GUILayoutY>();
  27. GUILayout* contentLayoutX = contentLayoutY->addNewElement<GUILayoutX>();
  28. contentLayoutX->addNewElement<GUIFlexibleSpace>();
  29. GUILayout* titleLayout = contentLayoutX->addNewElement<GUILayoutY>();
  30. titleLayout->addNewElement<GUIFixedSpace>(2);
  31. titleLayout->addElement(mTitle);
  32. titleLayout->addNewElement<GUIFlexibleSpace>();
  33. contentLayoutX->addNewElement<GUIFlexibleSpace>();
  34. if (hasCloseButton)
  35. {
  36. mCloseButton = GUIButton::create(HString(L""), "WinCloseBtn");
  37. contentLayoutX->addElement(mCloseButton);
  38. mCloseButton->onClick.connect(std::bind(&ModalWindow::close, this));
  39. }
  40. contentLayoutY->addNewElement<GUIFlexibleSpace>();
  41. updateSize();
  42. }
  43. ModalWindow::~ModalWindow()
  44. {
  45. }
  46. void ModalWindow::update()
  47. {
  48. }
  49. void ModalWindow::close()
  50. {
  51. EditorWindowManager::instance().destroy(this);
  52. }
  53. void ModalWindow::setTitle(const HString& title)
  54. {
  55. mTitle->setContent(GUIContent(title));
  56. }
  57. void ModalWindow::resized()
  58. {
  59. EditorWindowBase::resized();
  60. updateSize();
  61. }
  62. void ModalWindow::updateSize()
  63. {
  64. Vector<Rect2I> captionAreas;
  65. captionAreas.push_back(Rect2I(1, 1, getWidth() - 2, getTitleBarHeight()));
  66. Platform::setCaptionNonClientAreas(*mRenderWindow->getCore().get(), captionAreas);
  67. }
  68. Rect2I ModalWindow::getContentArea() const
  69. {
  70. return Rect2I(1, 1 + getTitleBarHeight(), getWidth() - 2, getHeight() - getTitleBarHeight() - 2);
  71. }
  72. UINT32 ModalWindow::getTitleBarHeight() const
  73. {
  74. return mTitleBarBg->getBounds().height;
  75. }
  76. }