juicysfplugin/Source/TableComponent.h
2018-02-27 00:25:20 +00:00

88 lines
2.0 KiB
C++

//
// Model.hpp
// Lazarus
//
// Created by Alex Birch on 01/09/2017.
//
//
#pragma once
#include "../JuceLibraryCode/JuceHeader.h"
#include "PresetsToBanks.h"
#include <memory>
#include <string>
using namespace std;
class TableComponent : public Component,
public TableListBoxModel {
public:
TableComponent(
const vector<string> &columns,
const vector<vector<string>> &rows,
const function<void (int)> &onRowSelected,
const function<int (const vector<string>&)> &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<vector<string>>& rows, int initiallySelectedRow);
bool keyPressed(const KeyPress &key) override;
private:
TableListBox table; // the table component itself
Font font;
vector<string> columns;
vector<vector<string>> rows;
function<void (int)> onRowSelected;
function<int (const vector<string>&)> 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<string> first,
vector<string> second
);
private:
int columnByWhichToSort;
int direction;
};
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (TableComponent)
};