gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

grid.h (2480B)


      1 #pragma once
      2 
      3 #include "griditemcontainer.h"
      4 #include "gridviewport.h"
      5 #include "listmodel.h"
      6 
      7 #include "juce_gui_basics/juce_gui_basics.h"
      8 
      9 namespace jucePluginEditorLib::patchManager
     10 {
     11 	class GridItem;
     12 
     13 	class Grid : public ListModel, public juce::Component
     14 	{
     15 	public:
     16 		static constexpr uint32_t InvalidItem = ~0;
     17 
     18 		Grid(PatchManager& _pm);
     19 		~Grid() override;
     20 
     21 		Grid(Grid&&) = delete;
     22 		Grid(const Grid&) = delete;
     23 		Grid& operator = (Grid&&) = delete;
     24 		Grid& operator = (const Grid&) = delete;
     25 
     26 		void paint(juce::Graphics& g) override;
     27 
     28 		auto getItemWidth() const { return m_itemWidth; }
     29 		auto getItemHeight() const { return m_itemHeight; }
     30 		auto getSuggestedItemsPerRow() const { return m_suggestedItemsPerRow; }
     31 
     32 		void setItemWidth(float _width);
     33 		void setItemHeight(float _height);
     34 		void setSuggestedItemsPerRow(uint32_t _count);
     35 
     36 		void setVisibleItemRange(const std::pair<uint32_t, uint32_t>& _range);
     37 
     38 		const GridViewport& getViewport() const { return m_viewport; }
     39 
     40 		bool isSelected(const uint32_t _index)
     41 		{
     42 			return m_selectedItems.find(_index) != m_selectedItems.end();
     43 		}
     44 
     45 		void selectItem(uint32_t _index, bool _deselectOthers);
     46 		void deselectItem(uint32_t _index);
     47 		GridItem* getItem(uint32_t _index) const;
     48 		void selectRange(uint32_t _newIndex);
     49 		bool keyPressed(const juce::KeyPress& _key) override;
     50 
     51 	private:
     52 		void resized() override;
     53 		int getNeededColumnCount();
     54 		int getVisibleRowCount() const;
     55 		void updateViewportSize();
     56 		void handleKeySelection(int _offsetX, int _offsetY, bool _shift);
     57 		std::pair<int, int> getXY(uint32_t _index) const;
     58 
     59 	public:
     60 		// ListModel
     61 		juce::Colour findColor(int _colorId) override;
     62 		const juce::LookAndFeel& getStyle() const override;
     63 		void onModelChanged() override;
     64 		void redraw() override;
     65 		void ensureVisible(int _row) override;
     66 		int getSelectedEntry() const override;
     67 		juce::SparseSet<int> getSelectedEntries() const override;
     68 		void deselectAll() override;
     69 		void setSelectedEntries(const juce::SparseSet<int>&) override;
     70 		juce::Rectangle<int> getEntryPosition(int _row, bool _relativeToComponentTopLeft) override;
     71 
     72 	private:
     73 		float m_itemHeight = 15;
     74 		float m_itemWidth = 140;
     75 		uint32_t m_suggestedItemsPerRow = 32;
     76 
     77 		GridViewport m_viewport;
     78 		GridItemContainer m_itemContainer;
     79 
     80 		std::map<uint32_t, std::unique_ptr<GridItem>> m_items;
     81 		std::list<std::unique_ptr<GridItem>> m_itemPool;
     82 		std::set<uint32_t> m_selectedItems;
     83 		uint32_t m_lastSelectedItem = InvalidItem;
     84 	};
     85 }