BsModalWindow.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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. mTitleBarBgArea = GUIArea::createStretchedXY(*mGUI, 1, 1, 1, 1, 1);
  18. mTitleBarArea = GUIArea::createStretchedXY(*mGUI, 1, 1, 1, 1, 0);
  19. mTitleBarBg = GUITexture::create(GUIOptions(GUIOption::flexibleWidth()), "TitleBarBackground");
  20. mTitle = GUILabel::create(title);
  21. GUILayout& bgLayout = mTitleBarBgArea->getLayout().addLayoutX();
  22. bgLayout.addElement(mTitleBarBg);
  23. bgLayout.addFlexibleSpace();
  24. GUILayout& contentLayout = mTitleBarArea->getLayout().addLayoutX();
  25. contentLayout.addFlexibleSpace();
  26. contentLayout.addElement(mTitle);
  27. contentLayout.addFlexibleSpace();
  28. if (hasCloseButton)
  29. {
  30. mCloseButton = GUIButton::create(HString(L""), "WinCloseBtn");
  31. GUILayout& contentLayout = mTitleBarArea->getLayout().addLayoutX();
  32. contentLayout.addFlexibleSpace();
  33. contentLayout.addElement(mCloseButton);
  34. mCloseButton->onClick.connect(std::bind(&ModalWindow::close, this));
  35. }
  36. mTitleBarArea->getLayout().addFlexibleSpace();
  37. updateSize();
  38. }
  39. ModalWindow::~ModalWindow()
  40. {
  41. }
  42. void ModalWindow::update()
  43. {
  44. }
  45. void ModalWindow::close()
  46. {
  47. bs_delete(this);
  48. }
  49. void ModalWindow::setTitle(const HString& title)
  50. {
  51. mTitle->setContent(GUIContent(title));
  52. }
  53. void ModalWindow::resized()
  54. {
  55. EditorWindowBase::resized();
  56. updateSize();
  57. }
  58. void ModalWindow::updateSize()
  59. {
  60. Vector<Rect2I> captionAreas;
  61. captionAreas.push_back(Rect2I(1, 1, getWidth() - 2, getTitleBarHeight()));
  62. Platform::setCaptionNonClientAreas(*mRenderWindow->getCore().get(), captionAreas);
  63. }
  64. Rect2I ModalWindow::getContentArea() const
  65. {
  66. return Rect2I(1, 1 + getTitleBarHeight(), getWidth() - 2, getHeight() - getTitleBarHeight() - 2);
  67. }
  68. UINT32 ModalWindow::getTitleBarHeight() const
  69. {
  70. return mTitleBarBg->getBounds().height;
  71. }
  72. }