Didn't someone make ...

a “listbox” like control that was a stack of boxes (single column) where each box could be varying heights?
I just need each box to be a “canvas” to draw on, as well as detect a click.

The don’t need to collapse expand, but they do need to scroll if the boxes exceed the boundary.

I can make my own, but this current (personal) project is quite complex already

FYI… because it is a “personal” project, I can’t afford to buy something … so if you have something in the open, or perhaps barter let me know

If the box heights are always divisible by a certain value you can just use a listbox to do this.

• You would set the list box row height to the size of 1 box.
• Each row in the listbox would need access to the data for the box.
• Each row would need to know how many rows it was from the start of the box (eg: the first listbox row for the box would be 0, the second listbox row for the box would be 1 etc…).
• The content would be drawn in the listbox paint event. You would offset all of your y positions by (rows travelled down from start of box * list box row height)

not something that could be depended on… thanks

StackView from Martin Trippensee? 15€ should be affordable.

Martin’s StackView is described in this thread. I’ve not used it, but take a look at its demo project (free to try in IDE) and see if it would work for you. The docs are here if you want to peruse those first.

Personally, I’d use the piDog DataView for this because I already have a source license and it handles variable height rows easily – among MANY other things.

You might also be thinking of Mergeable List Box by @Karen Atkocius but it isn’t free either.

But maybe you can create container control and populate with each “box” you need, then put inside a canvas and use Canvas.Scroll to display, then calculate the relative position of clicks?

Pretty much what I decided to do, but am starting 100% from scratch to insure I get the flexabiity I need

For anyone who is interested…
I have created a custom “listbox” like control.
It is only ONE column (by design). each row can have its own row height (including 0 to make it "invisible)
the displayed content of each row can be inset by a user specified amount (left and right), as well as setting a space between rows

if has both Horizontal and Vertical scrollbars

The control itself does not have a “datastore”… this is up to the developer to manage via the CellPaint event

while it does support DarkMode… its up to the developer to deal with the CellPaint content

Events

  • cellClick(row as integer)
  • cellPaint(g as graphics, row) // unlike Listbox, the row must exist
  • Paint(g as graphics, areas() ) … this is to allow developer to overlay the entire control, with other drawing

Methods

  • addRow(height as integer) // add One Row … unlike Listbox that adds “text”
  • addRows(count as integer,height as integer) // adds multiple rows at once
  • deleteAllRows // removes all existing rows
  • RowHeight(row as integer)=value // set the height of a specific row

Properties

  • Border as Boolean
  • columnWidth as integer // defaults to control width unless this value is GREATER than that (hScroll)
  • leftMargin // amount to offset the left side of CellPaint content
  • rightMargin // amount to inset from the right
  • topMargin // amount to move down before the first drawn cell
  • ScrollPostion // the visible offset in pixels … set by user or by vScroll
  • Suspend as Boolean // suspend any redraw operations if doing a bunch of changes
  • textFont // default font to use in CellPaint
  • textSize // default font size to use in CellPaint

So far this looks like it will do what I want… (not bad for less than 4 hours work…probably less than 2)

My intent is to use this as a TIMELINE display of Life Events in a Genealogy Program

hmmmm… just realized
I need to add

  • ScrollPostionX
  • cellTag

I think @Karen Atkocius is the listbox Jedi of whom you speak.

as someone had previously mentioned… but what I wanted (and created) is not so much a Listbox as a vehicle to display various size canvas

Looking forward to you releasing this @Dave S as I can already think of a way to use it in the project I am working on. Will it also have a Double Click event?

You’re looking in the wrong thread. See https://forum.xojo.com/54854-a-scrollable-stack-of-canvas-a-listbox-like-control

Thanks, I will post it in that thread instead :slight_smile: