BsGUITabbedTitleBar.cpp 3.2 KB

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