ReaWwise

REAPER extension
Log | Files | Refs | Submodules

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