BsGUITabbedTitleBar.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #include "BsGUITabbedTitleBar.h"
  2. #include "BsGUIArea.h"
  3. #include "BsGUILayout.h"
  4. #include "BsGUITexture.h"
  5. #include "BsGUIButton.h"
  6. #include "BsGUIToggle.h"
  7. #include "BsGUISpace.h"
  8. #include "BsGUIWindowMover.h"
  9. #include "BsEngineGUI.h"
  10. #include "CmMath.h"
  11. using namespace CamelotFramework;
  12. using namespace BansheeEngine;
  13. namespace BansheeEditor
  14. {
  15. TabbedTitleBar::TabbedTitleBar(const HSceneObject& parent)
  16. :GUIWidget(parent), mLastDropElement(nullptr), mMinBtn(nullptr), mCloseBtn(nullptr), mMainArea(nullptr), mMainLayout(nullptr)
  17. {
  18. }
  19. TabbedTitleBar::~TabbedTitleBar()
  20. {
  21. }
  22. void TabbedTitleBar::addTab(const CM::String& name)
  23. {
  24. insertTab((UINT32)mTabButtons.size(), name);
  25. }
  26. void TabbedTitleBar::insertTab(UINT32 idx, const CM::String& name)
  27. {
  28. GUIToggle* newTabToggle = GUIToggle::create(*this, toWString(name), EngineGUI::instance().getSkin().getStyle("TabbedBarBtn"));
  29. GUIWindowMover* newDragDropElement = GUIWindowMover::create(*this, EngineGUI::instance().getSkin().getStyle("TabbedBarDropArea"));
  30. idx = Math::Clamp(idx, 0U, (UINT32)mTabButtons.size());
  31. mTabButtons.insert(mTabButtons.begin() + idx, newTabToggle);
  32. mDragDropElements.insert(mDragDropElements.begin() + idx, newDragDropElement);
  33. mMainLayout->insertElement(idx * 2, newTabToggle);
  34. mMainLayout->insertElement(idx * 2, newDragDropElement);
  35. }
  36. void TabbedTitleBar::removeTab(UINT32 idx)
  37. {
  38. if(mTabButtons.size() == 0)
  39. return;
  40. idx = Math::Clamp(idx, 0U, (UINT32)mTabButtons.size() - 1);
  41. mMainLayout->removeElement(mTabButtons[idx]);
  42. mMainLayout->removeElement(mDragDropElements[idx]);
  43. mTabButtons.erase(mTabButtons.begin() + idx);
  44. mDragDropElements.erase(mDragDropElements.begin() + idx);
  45. }
  46. void TabbedTitleBar::initialize(CM::Viewport* target, CM::RenderWindow* ownerWindow)
  47. {
  48. GUIWidget::initialize(target, ownerWindow);
  49. GUIArea* backgroundArea = GUIArea::createStretchedX(*this, 0, 0, 1, 13, 500);
  50. GUIWindowMover* titleBarBg = GUIWindowMover::create(*this, getSkin()->getStyle("TitleBarBackground"));
  51. backgroundArea->getLayout().addSpace(1);
  52. backgroundArea->getLayout().addElement(titleBarBg);
  53. backgroundArea->getLayout().addSpace(1);
  54. mMainArea = GUIArea::createStretchedX(*this, 0, 0, 1, 13, 499);
  55. GUIWindowMover* dragDropElement = GUIWindowMover::create(*this, GUILayoutOptions::expandableX(13, 20), getSkin()->getStyle("TabbedBarDropArea"));
  56. mLastDropElement = dragDropElement;
  57. mMinBtn = GUIButton::create(*this, L"", getSkin()->getStyle("WinMinimizeBtn"));
  58. mCloseBtn = GUIButton::create(*this, L"", getSkin()->getStyle("WinCloseBtn"));
  59. mMainArea->getLayout().addSpace(1);
  60. mMainLayout = &mMainArea->getLayout().addLayoutX();
  61. mMainLayout->addElement(dragDropElement);
  62. mMainLayout->addElement(mMinBtn);
  63. mMainLayout->addSpace(3);
  64. mMainLayout->addElement(mCloseBtn);
  65. mMainArea->getLayout().addSpace(3);
  66. addTab("TEST!");
  67. }
  68. void TabbedTitleBar::update()
  69. {
  70. }
  71. bool TabbedTitleBar::_mouseEvent(GUIElement* element, const GUIMouseEvent& ev)
  72. {
  73. return GUIWidget::_mouseEvent(element, ev);
  74. }
  75. }