BsGUITabbedTitleBar.cpp 3.2 KB

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