// // Model.hpp // Lazarus // // Created by Alex Birch on 01/09/2017. // // #pragma once #include "../JuceLibraryCode/JuceHeader.h" #include "PresetsToBanks.h" #include #include using namespace std; class TableComponent : public Component, public TableListBoxModel { public: TableComponent( const vector &columns, const vector> &rows, const function &onRowSelected, const function&)> &rowToIDMapper, int initiallySelectedRow ); int getNumRows() override; void paintRowBackground ( Graphics& g, int rowNumber, int width, int height, bool rowIsSelected ) override; void paintCell ( Graphics& g, int rowNumber, int columnId, int width, int height, bool rowIsSelected ) override; void sortOrderChanged (int newSortColumnId, bool isForwards) override; int getColumnAutoSizeWidth (int columnId) override; void selectedRowsChanged (int row) override; void resized() override; void setRows(const vector>& rows, int initiallySelectedRow); bool keyPressed(const KeyPress &key) override; private: TableListBox table; // the table component itself Font font; vector columns; vector> rows; function onRowSelected; function&)> rowToIDMapper; // A comparator used to sort our data when the user clicks a column header class DataSorter { public: DataSorter ( int columnByWhichToSort, bool forwards ); bool operator ()( vector first, vector second ); private: int columnByWhichToSort; int direction; }; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (TableComponent) };