BsModalWindow.cpp 2.4 KB

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