ImportPreviewComponent.h (4068B)
1 /*---------------------------------------------------------------------------------------- 2 3 Copyright (c) 2023 AUDIOKINETIC Inc. 4 5 This file is licensed to use under the license available at: 6 https://github.com/audiokinetic/ReaWwise/blob/main/License.txt (the "License"). 7 You may not use this file except in compliance with the License. 8 9 Unless required by applicable law or agreed to in writing, software distributed 10 under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 11 CONDITIONS OF ANY KIND, either express or implied. See the License for the 12 specific language governing permissions and limitations under the License. 13 14 ----------------------------------------------------------------------------------------*/ 15 16 #pragma once 17 18 #include "BinaryData.h" 19 #include "Core/DawContext.h" 20 #include "Helpers/ImportHelper.h" 21 #include "LoadingComponent.h" 22 #include "Theme/CustomLookAndFeel.h" 23 24 #include <juce_gui_basics/juce_gui_basics.h> 25 #include <unordered_map> 26 27 namespace AK::WwiseTransfer 28 { 29 struct ValueTreeItem 30 : public juce::TreeViewItem 31 , public juce::ValueTree::Listener 32 , public juce::TableHeaderComponent::Listener 33 { 34 struct Comparator 35 { 36 Comparator(const juce::TableHeaderComponent& header); 37 38 int compareElements(juce::TreeViewItem* first, juce::TreeViewItem* second); 39 40 private: 41 const int sortColumnId; 42 const bool sortDirectionForward; 43 }; 44 45 ValueTreeItem(juce::TableHeaderComponent& header, juce::ValueTree tree); 46 ~ValueTreeItem(); 47 48 bool mightContainSubItems() override; 49 void itemOpennessChanged(bool isNowOpen) override; 50 juce::String getUniqueName() const override; 51 juce::String getComparisonTextForColumn(int column); 52 void itemClicked(const juce::MouseEvent&) override; 53 juce::ValueTree getValueTree(); 54 55 enum ColourIds 56 { 57 errorOutlineColor = 0x00000002, 58 }; 59 60 private: 61 juce::TableHeaderComponent& header; 62 juce::ValueTree tree; 63 64 void refreshSubItems(); 65 void valueTreePropertyChanged(juce::ValueTree&, const juce::Identifier&) override; 66 void valueTreeChildAdded(juce::ValueTree& parentTree, juce::ValueTree&) override; 67 void valueTreeChildRemoved(juce::ValueTree& parentTree, juce::ValueTree&, int) override; 68 void valueTreeChildOrderChanged(juce::ValueTree& parentTree, int, int) override; 69 void valueTreeParentChanged(juce::ValueTree&) override; 70 void treeChildrenChanged(const juce::ValueTree& parentTree); 71 void paintItem(juce::Graphics& g, int width, int height) override; 72 void tableColumnsChanged(juce::TableHeaderComponent* tableHeader) override; 73 void tableColumnsResized(juce::TableHeaderComponent* tableHeader) override; 74 void tableSortOrderChanged(juce::TableHeaderComponent* tableHeader) override; 75 76 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(ValueTreeItem) 77 }; 78 79 class ImportPreviewComponent 80 : public juce::Component 81 , public juce::ValueTree::Listener 82 , public juce::AsyncUpdater 83 , public juce::KeyListener 84 { 85 public: 86 ImportPreviewComponent(juce::ValueTree appState); 87 ~ImportPreviewComponent(); 88 89 void resized() override; 90 91 void copySelectedItemsToClipBoard(); 92 bool keyPressed(const juce::KeyPress& key, juce::Component* originatingComponent) override; 93 94 private: 95 juce::ValueTree applicationState; 96 juce::ValueTree previewItems; 97 juce::TableHeaderComponent header; 98 juce::TreeView treeView; 99 ValueTreeItem rootItem; 100 101 juce::CachedValue<bool> previewLoading; 102 juce::CachedValue<bool> applyTemplateFeatureEnabled; 103 104 LoadingComponent loadingComponent; 105 106 juce::Label emptyState; 107 108 void valueTreePropertyChanged(juce::ValueTree& treeWhosePropertyHasChanged, const juce::Identifier& property) override; 109 void valueTreeChildAdded(juce::ValueTree& parentTree, juce::ValueTree& childWhichHasBeenAdded); 110 void valueTreeChildRemoved(juce::ValueTree& parentTree, juce::ValueTree& childWhichHasBeenRemoved, int indexFromWhichChildWasRemoved); 111 112 // Inherited via AsyncUpdater 113 void handleAsyncUpdate() override; 114 void refreshHeader(); 115 116 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(ImportPreviewComponent) 117 }; 118 } // namespace AK::WwiseTransfer