1 /* 2 ============================================================================== 3 4 This file is part of the JUCE library. 5 Copyright (c) 2020 - Raw Material Software Limited 6 7 JUCE is an open source library subject to commercial or open-source 8 licensing. 9 10 By using JUCE, you agree to the terms of both the JUCE 6 End-User License 11 Agreement and JUCE Privacy Policy (both effective as of the 16th June 2020). 12 13 End User License Agreement: www.juce.com/juce-6-licence 14 Privacy Policy: www.juce.com/juce-privacy-policy 15 16 Or: You may also use this code under the terms of the GPL v3 (see 17 www.gnu.org/licenses). 18 19 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER 20 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE 21 DISCLAIMED. 22 23 ============================================================================== 24 */ 25 26 #pragma once 27 28 #include "../../Application/jucer_Application.h" 29 30 //============================================================================== 31 class SlidingPanelComponent : public Component 32 { 33 public: 34 SlidingPanelComponent(); 35 ~SlidingPanelComponent() override; 36 37 /** Adds a new tab to the panel slider. */ 38 void addTab (const String& tabName, 39 Component* contentComponent, 40 bool deleteComponentWhenNotNeeded, 41 int insertIndex = -1); 42 43 /** Gets rid of one of the tabs. */ 44 void removeTab (int tabIndex); 45 46 /** Gets index of current tab. */ getCurrentTabIndex()47 int getCurrentTabIndex() const noexcept { return currentIndex; } 48 49 /** Returns the number of tabs. */ getNumTabs()50 int getNumTabs() const noexcept { return pages.size(); } 51 52 /** Animates the window to the desired tab. */ 53 void goToTab (int targetTabIndex); 54 55 //============================================================================== 56 /** @internal */ 57 void resized() override; 58 59 private: 60 struct DotButton; 61 friend struct DotButton; 62 63 struct PageInfo 64 { 65 ~PageInfo(); 66 67 Component::SafePointer<Component> content; 68 std::unique_ptr<DotButton> dotButton; 69 String name; 70 bool shouldDelete; 71 }; 72 73 OwnedArray<PageInfo> pages; 74 75 Component pageHolder; 76 int currentIndex, dotSize; 77 78 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SlidingPanelComponent) 79 }; 80