I’m having a hard time finding an example for making a ListBox component that doesn’t use headers. My end goal is to have a simple single column list with ToggleButton rows. I think I’m good as far as the row items go, but I can’t find in the API docs any way of adding anything to a ListBox object. I have a ListBoxModel-derived class set up, but unsure where to go from there. If anything, I think I’m overdoing this when there could be a simple solution that I’m just not finding anywhere.
Code can be found at https://github.com/NebuHiiEjamu/CinemixAutomationBridge and the relevant files are for CheckBoxColumn and SimpleListBoxModel. I’m trying to make this to use as a component for PluginSettings
Hope it’s okay to bump. I’ve tried looking at the code for the DemoRunner’s side panel list, but my brain hurts to look at it.
I’ll help bump it. I’m trying to piece this together myself at the moment. Some old forum posts mention a DragAndDropDemo.cpp but I don’t think it exists anymore (or at least I can’t find it). If I figure anything out I’ll let you know.
Think I figured it out! The FontsDemo was very helpful.
Here’s the simplest form of a listbox that I could get displaying text. Doesn’t attempt to pull data from anywhere, just generates text directly.
I’d wager that to use a custom component instead of just drawing text, you’d place it inside the painListBoxItem() function.
class BasicListBox : public ListBoxModel, public Component
// In your constructor, you should add any child components, and
// initialise any special settings that your component needs.
listBox.setModel (this); // Tell the listbox where to get its data model
listBox.setColour (ListBox::textColourId, Colours::black);
listBox.setColour (ListBox::backgroundColourId, Colours::white);
void paint (Graphics& g) override
/* This demo code just fills the component's background and
draws some placeholder text to get you started.
You should replace everything in this method with your own
g.fillAll (Colours::lightgrey); // clear the background
void resized() override
// This method is where you should set the bounds of any child
// components that your component contains..
listBox.setBounds(0, 0, getParentWidth(), getParentHeight());
// The following methods implement the ListBoxModel virtual methods:
int getNumRows() override
return 12; //you should probably derive this from whatever source data you end up using
void paintListBoxItem (int rowNumber, Graphics& g,
int width, int height, bool rowIsSelected) override
g.setFont (height * 0.7f);
g.drawText ("Row Number " + String (rowNumber + 1), 5, 0, width, height,
void selectedRowsChanged (int /*lastRowselected*/) override
//do stuff when selection changes
Awesome! Much appreciated!