LMMS
Loading...
Searching...
No Matches
juce_TreeView.h
Go to the documentation of this file.
1/*
2 ==============================================================================
3
4 This file is part of the JUCE library.
5 Copyright (c) 2022 - 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 7 End-User License
11 Agreement and JUCE Privacy Policy.
12
13 End User License Agreement: www.juce.com/juce-7-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
26namespace juce
27{
28
29class TreeView;
30
31//==============================================================================
48{
49public:
50 //==============================================================================
53
55 virtual ~TreeViewItem();
56
57 //==============================================================================
63 int getNumSubItems() const noexcept;
64
71 TreeViewItem* getSubItem (int index) const noexcept;
72
74 void clearSubItems();
75
84 void addSubItem (TreeViewItem* newItem, int insertPosition = -1);
85
94 template <class ElementComparator>
95 void addSubItemSorted (ElementComparator& comparator, TreeViewItem* newItem)
96 {
97 addSubItem (newItem, findInsertIndexInSortedArray (comparator, subItems.begin(), newItem, 0, subItems.size()));
98 }
99
105 void removeSubItem (int index, bool deleteItem = true);
106
122 template <class ElementComparator>
123 void sortSubItems (ElementComparator& comparator)
124 {
125 subItems.sort (comparator);
126 }
127
128 //==============================================================================
131
134
135 //==============================================================================
140 bool isOpen() const noexcept;
141
155 void setOpen (bool shouldBeOpen);
156
158 enum class Openness
159 {
160 opennessDefault,
161 opennessClosed,
162 opennessOpen
163 };
164
169 Openness getOpenness() const noexcept;
170
179 void setOpenness (Openness newOpenness);
180
185 bool isSelected() const noexcept;
186
192 void setSelected (bool shouldBeSelected,
193 bool deselectOtherItemsFirst,
194 NotificationType shouldNotify = sendNotification);
195
203 Rectangle<int> getItemPosition (bool relativeToTreeViewTopLeft) const noexcept;
204
209 void treeHasChanged() const noexcept;
210
216 void repaintItem() const;
217
224 int getRowNumberInTree() const noexcept;
225
230 bool areAllParentsOpen() const noexcept;
231
236 void setLinesDrawnForSubItems (bool shouldDrawLines) noexcept;
237
238 //==============================================================================
245 virtual bool mightContainSubItems() = 0;
246
257 virtual String getUniqueName() const;
258
279 virtual void itemOpennessChanged (bool isNowOpen);
280
294 virtual int getItemWidth() const { return -1; }
295
302 virtual int getItemHeight() const { return 20; }
303
307 virtual bool canBeSelected() const { return true; }
308
329 virtual std::unique_ptr<Component> createItemComponent() { return nullptr; }
330
331 //==============================================================================
347 virtual void paintItem (Graphics& g, int width, int height);
348
357 virtual void paintOpenCloseButton (Graphics&, const Rectangle<float>& area,
358 Colour backgroundColour, bool isMouseOver);
359
361 virtual void paintHorizontalConnectingLine (Graphics&, const Line<float>& line);
362
364 virtual void paintVerticalConnectingLine (Graphics&, const Line<float>& line);
365
371 virtual bool customComponentUsesTreeViewMouseHandler() const { return false; }
372
384 virtual void itemClicked (const MouseEvent&);
385
400 virtual void itemDoubleClicked (const MouseEvent&);
401
407 virtual void itemSelectionChanged (bool isNowSelected);
408
410 virtual void ownerViewChanged (TreeView* newOwner);
411
416 virtual String getTooltip();
417
427 virtual String getAccessibilityName();
428
429 //==============================================================================
445 virtual var getDragSourceDescription();
446
460 virtual bool isInterestedInFileDrag (const StringArray& files);
461
471 virtual void filesDropped (const StringArray& files, int insertIndex);
472
481 virtual bool isInterestedInDragSource (const DragAndDropTarget::SourceDetails& dragSourceDetails);
482
492 virtual void itemDropped (const DragAndDropTarget::SourceDetails& dragSourceDetails, int insertIndex);
493
494 //==============================================================================
508 void setDrawsInLeftMargin (bool canDrawInLeftMargin) noexcept;
509
521 void setDrawsInRightMargin (bool canDrawInRightMargin) noexcept;
522
523 //==============================================================================
542 std::unique_ptr<XmlElement> getOpennessState() const;
543
554 void restoreOpennessState (const XmlElement& xml);
555
556 //==============================================================================
558 int getIndexInParent() const noexcept;
559
561 bool isLastOfSiblings() const noexcept;
562
571 String getItemIdentifierString() const;
572
573 //==============================================================================
607
608private:
609 //==============================================================================
610 friend class TreeView;
611
612 void updatePositions (int);
625 std::unique_ptr<XmlElement> getOpennessState (bool) const;
626 bool removeSubItemFromList (int, bool);
628 bool areLinesDrawn() const;
629 void draw (Graphics&, int, bool);
630
631 //==============================================================================
632 TreeView* ownerView = nullptr;
635
636 Openness openness = Openness::opennessDefault;
637 int y = 0, itemHeight = 0, totalHeight = 0, itemWidth = 0, totalWidth = 0, uid = 0;
640
641 //==============================================================================
643};
644
645//==============================================================================
656 public DragAndDropTarget
657{
658public:
659 //==============================================================================
665 TreeView (const String& componentName = {});
666
668 ~TreeView() override;
669
670 //==============================================================================
685 void setRootItem (TreeViewItem* newRootItem);
686
692
697 void deleteRootItem();
698
705 void setRootItemVisible (bool shouldBeVisible);
706
712
720 void setDefaultOpenness (bool isOpenByDefault);
721
727
738 void setMultiSelectEnabled (bool canMultiSelect);
739
745
750 void setOpenCloseButtonsVisible (bool shouldBeVisible);
751
757
758 //==============================================================================
760 void clearSelectedItems();
761
769 int getNumSelectedItems (int maximumDepthToSearchTo = -1) const noexcept;
770
775 TreeViewItem* getSelectedItem (int index) const noexcept;
776
778 void moveSelectedRow (int deltaRows);
779
780 //==============================================================================
785 int getNumRowsInTree() const;
786
793 TreeViewItem* getItemOnRow (int index) const;
794
798 TreeViewItem* getItemAt (int yPosition) const noexcept;
799
801 void scrollToKeepItemVisible (TreeViewItem* item);
802
804 Viewport* getViewport() const noexcept;
805
810 int getIndentSize() noexcept;
811
816 void setIndentSize (int newIndentSize);
817
824 TreeViewItem* findItemFromIdentifierString (const String& identifierString) const;
825
827 Component* getItemComponent (const TreeViewItem* item) const;
828
829 //==============================================================================
845 std::unique_ptr<XmlElement> getOpennessState (bool alsoIncludeScrollPosition) const;
846
858 void restoreOpennessState (const XmlElement& newState, bool restoreStoredSelection);
859
860 //==============================================================================
877
878 //==============================================================================
883 {
884 virtual ~LookAndFeelMethods() = default;
885
887 Colour backgroundColour, bool isItemOpen, bool isMouseOver) = 0;
888
890 virtual int getTreeViewIndentSize (TreeView&) = 0;
891 };
892
893 //==============================================================================
895 void paint (Graphics&) override;
897 void resized() override;
899 bool keyPressed (const KeyPress&) override;
901 void colourChanged() override;
903 void enablementChanged() override;
905 bool isInterestedInFileDrag (const StringArray&) override;
907 void fileDragEnter (const StringArray&, int, int) override;
909 void fileDragMove (const StringArray&, int, int) override;
911 void fileDragExit (const StringArray&) override;
913 void filesDropped (const StringArray&, int, int) override;
915 bool isInterestedInDragSource (const SourceDetails&) override;
917 void itemDragEnter (const SourceDetails&) override;
919 void itemDragMove (const SourceDetails&) override;
921 void itemDragExit (const SourceDetails&) override;
923 void itemDropped (const SourceDetails&) override;
924
925private:
926 friend class TreeViewItem;
927
928 class ItemComponent;
929 class ContentComponent;
930 class TreeViewport;
933 class TreeAccessibilityHandler;
934 struct InsertPoint;
935
936 std::unique_ptr<AccessibilityHandler> createAccessibilityHandler() override;
938 void updateVisibleItems();
947 void moveByPages (int);
948
953 int indentSize = -1;
955
957};
958
959} // namespace juce
#define noexcept
Definition DistrhoDefines.h:72
Definition juce_Colour.h:38
Definition juce_Component.h:36
String componentName
Definition juce_Component.h:2534
Component() noexcept
Definition juce_Component.cpp:517
bool isMouseOver(bool includeChildren=false) const
Definition juce_Component.cpp:3159
Definition juce_DragAndDropTarget.h:54
Definition juce_DragAndDropTarget.h:46
Definition juce_FileDragAndDropTarget.h:37
Definition juce_GraphicsContext.h:45
Definition juce_KeyPress.h:40
Definition juce_Line.h:47
Definition juce_MouseEvent.h:39
Definition juce_OwnedArray.h:51
Definition juce_Rectangle.h:67
Definition juce_StringArray.h:35
Definition juce_String.h:53
Definition juce_TreeView.cpp:256
Definition juce_TreeView.cpp:1252
Definition juce_TreeView.cpp:45
Definition juce_TreeView.cpp:1291
Definition juce_TreeView.cpp:677
Definition juce_TreeView.h:657
bool isInterestedInFileDrag(const StringArray &) override
Definition juce_TreeView.cpp:1390
bool rootItemVisible
Definition juce_TreeView.h:954
void showDragHighlight(const InsertPoint &) noexcept
Definition juce_TreeView.cpp:1316
void filesDropped(const StringArray &, int, int) override
Definition juce_TreeView.cpp:1410
std::unique_ptr< TargetGroupHighlight > dragTargetGroupHighlight
Definition juce_TreeView.h:952
void colourChanged() override
Definition juce_TreeView.cpp:842
ColourIds
Definition juce_TreeView.h:869
@ dragAndDropIndicatorColourId
Definition juce_TreeView.h:872
@ oddItemsColourId
Definition juce_TreeView.h:874
@ linesColourId
Definition juce_TreeView.h:871
@ evenItemsColourId
Definition juce_TreeView.h:875
@ selectedItemBackgroundColourId
Definition juce_TreeView.h:873
@ backgroundColourId
Definition juce_TreeView.h:870
TreeViewItem * getRootItem() const noexcept
Definition juce_TreeView.h:691
void moveOutOfSelectedItem()
Definition juce_TreeView.cpp:1093
TreeViewItem * rootItem
Definition juce_TreeView.h:950
void updateVisibleItems()
Definition juce_TreeView.cpp:1177
TreeView(const String &componentName={})
Definition juce_TreeView.cpp:776
void handleDrag(const StringArray &, const SourceDetails &)
Definition juce_TreeView.cpp:1339
void fileDragMove(const StringArray &, int, int) override
Definition juce_TreeView.cpp:1400
bool multiSelectEnabled
Definition juce_TreeView.h:954
bool areOpenCloseButtonsVisible() const noexcept
Definition juce_TreeView.h:756
void resized() override
Definition juce_TreeView.cpp:1004
std::unique_ptr< AccessibilityHandler > createAccessibilityHandler() override
Definition juce_TreeView.cpp:1441
void paint(Graphics &) override
Definition juce_TreeView.cpp:999
void itemDragEnter(const SourceDetails &) override
Definition juce_TreeView.cpp:1420
friend class TreeViewItem
Definition juce_TreeView.h:926
int indentSize
Definition juce_TreeView.h:953
bool isInterestedInDragSource(const SourceDetails &) override
Definition juce_TreeView.cpp:1415
bool openCloseButtonsVisible
Definition juce_TreeView.h:954
void handleDrop(const StringArray &, const SourceDetails &)
Definition juce_TreeView.cpp:1365
bool keyPressed(const KeyPress &) override
Definition juce_TreeView.cpp:1159
std::unique_ptr< InsertPointHighlight > dragInsertPointHighlight
Definition juce_TreeView.h:951
void fileDragEnter(const StringArray &, int, int) override
Definition juce_TreeView.cpp:1395
bool isMultiSelectEnabled() const noexcept
Definition juce_TreeView.h:744
void updateButtonUnderMouse(const MouseEvent &)
void itemDropped(const SourceDetails &) override
Definition juce_TreeView.cpp:1435
void enablementChanged() override
Definition juce_TreeView.cpp:1010
bool areItemsOpenByDefault() const noexcept
Definition juce_TreeView.h:726
void moveByPages(int)
Definition juce_TreeView.cpp:1128
bool defaultOpenness
Definition juce_TreeView.h:954
void itemDragMove(const SourceDetails &) override
Definition juce_TreeView.cpp:1425
void fileDragExit(const StringArray &) override
Definition juce_TreeView.cpp:1405
std::unique_ptr< TreeViewport > viewport
Definition juce_TreeView.h:949
void itemsChanged() noexcept
bool isRootItemVisible() const noexcept
Definition juce_TreeView.h:711
void hideDragHighlight() noexcept
Definition juce_TreeView.cpp:1333
void itemDragExit(const SourceDetails &) override
Definition juce_TreeView.cpp:1430
bool toggleOpenSelectedItem()
Definition juce_TreeView.cpp:1079
void moveIntoSelectedItem()
Definition juce_TreeView.cpp:1117
void setRootItem(TreeViewItem *newRootItem)
Definition juce_TreeView.cpp:792
OpennessRestorer(TreeViewItem &)
Definition juce_TreeView.cpp:2111
std::unique_ptr< XmlElement > oldOpenness
Definition juce_TreeView.h:603
TreeViewItem & treeViewItem
Definition juce_TreeView.h:602
Definition juce_TreeView.h:48
virtual bool canBeSelected() const
Definition juce_TreeView.h:307
TreeView * getOwnerView() const noexcept
Definition juce_TreeView.h:130
TreeViewItem * parentItem
Definition juce_TreeView.h:633
virtual String getUniqueName() const
Definition juce_TreeView.cpp:1484
TreeViewItem * getSelectedItemWithIndex(int) noexcept
Definition juce_TreeView.cpp:1939
friend class TreeView
Definition juce_TreeView.h:610
TreeViewItem * getTopLevelItem() noexcept
Definition juce_TreeView.cpp:1885
bool drawLinesSet
Definition juce_TreeView.h:638
bool isFullyOpen() const noexcept
Definition juce_TreeView.cpp:1615
void clearSubItems()
Definition juce_TreeView.cpp:1503
void restoreToDefaultOpenness()
Definition juce_TreeView.cpp:1627
void sortSubItems(ElementComparator &comparator)
Definition juce_TreeView.h:123
int getNumSubItems() const noexcept
Definition juce_TreeView.cpp:1493
void addSubItemSorted(ElementComparator &comparator, TreeViewItem *newItem)
Definition juce_TreeView.h:95
virtual bool mightContainSubItems()=0
bool removeSubItemFromList(int, bool)
Definition juce_TreeView.cpp:1569
virtual int getItemWidth() const
Definition juce_TreeView.h:294
TreeViewItem * getDeepestOpenParentItem() noexcept
Definition juce_TreeView.cpp:1814
virtual std::unique_ptr< Component > createItemComponent()
Definition juce_TreeView.h:329
int countSelectedItemsRecursively(int) const noexcept
Definition juce_TreeView.cpp:1928
void removeAllSubItemsFromList()
Definition juce_TreeView.cpp:1519
OwnedArray< TreeViewItem > subItems
Definition juce_TreeView.h:634
TreeView * ownerView
Definition juce_TreeView.h:632
int y
Definition juce_TreeView.h:637
TreeViewItem * findItemFromIdentifierString(const String &)
Definition juce_TreeView.cpp:2009
virtual void itemOpennessChanged(bool isNowOpen)
Definition juce_TreeView.cpp:1489
void updatePositions(int)
Definition juce_TreeView.cpp:1792
TreeViewItem()
Definition juce_TreeView.cpp:1472
void deselectAllRecursively(TreeViewItem *)
Definition juce_TreeView.cpp:1637
bool drawLinesInside
Definition juce_TreeView.h:638
virtual int getItemHeight() const
Definition juce_TreeView.h:302
std::unique_ptr< XmlElement > getOpennessState() const
Definition juce_TreeView.cpp:2069
bool drawsInLeftMargin
Definition juce_TreeView.h:639
int getIndentX() const noexcept
Definition juce_TreeView.cpp:1841
virtual bool customComponentUsesTreeViewMouseHandler() const
Definition juce_TreeView.h:371
bool areLinesDrawn() const
Definition juce_TreeView.cpp:1867
void addSubItem(TreeViewItem *newItem, int insertPosition=-1)
Definition juce_TreeView.cpp:1525
int itemHeight
Definition juce_TreeView.h:637
void setOwnerView(TreeView *) noexcept
Definition juce_TreeView.cpp:1830
TreeViewItem * getSubItem(int index) const noexcept
Definition juce_TreeView.cpp:1498
void draw(Graphics &, int, bool)
Definition juce_TreeView.cpp:2123
TreeViewItem * getParentItem() const noexcept
Definition juce_TreeView.h:133
int totalWidth
Definition juce_TreeView.h:637
Openness
Definition juce_TreeView.h:159
int getNumRows() const noexcept
Definition juce_TreeView.cpp:1891
TreeViewItem * getItemOnRow(int) noexcept
Definition juce_TreeView.cpp:1902
bool drawsInRightMargin
Definition juce_TreeView.h:639
bool redrawNeeded
Definition juce_TreeView.h:638
int uid
Definition juce_TreeView.h:637
int totalHeight
Definition juce_TreeView.h:637
bool selected
Definition juce_TreeView.h:638
int itemWidth
Definition juce_TreeView.h:637
Openness openness
Definition juce_TreeView.h:636
Definition juce_Viewport.h:47
Definition juce_XmlElement.h:83
Definition juce_Variant.h:42
int g
Definition inflate.c:1573
static int int height
Definition pugl.h:1594
static int width
Definition pugl.h:1593
#define JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(className)
#define JUCE_API
Definition juce_StandardHeader.h:152
static char ** files
Definition misc.c:28
Definition carla_juce.cpp:31
static int findInsertIndexInSortedArray(ElementComparator &comparator, ElementType *const array, const ElementType newElement, int firstElement, int lastElement)
Definition juce_ElementComparator.h:126
NotificationType
Definition juce_NotificationType.h:32
@ sendNotification
Definition juce_NotificationType.h:34
Definition juce_Uuid.h:141
#define true
Definition ordinals.h:82
#define false
Definition ordinals.h:83
Definition juce_TreeView.cpp:1184
Definition juce_TreeView.h:883
virtual int getTreeViewIndentSize(TreeView &)=0
virtual ~LookAndFeelMethods()=default
virtual void drawTreeviewPlusMinusBox(Graphics &, const Rectangle< float > &area, Colour backgroundColour, bool isItemOpen, bool isMouseOver)=0
virtual bool areLinesDrawnForTreeView(TreeView &)=0
#define const
Definition zconf.h:137