Objects blend between tab panels...?

I started to get weird problems. I am using a Tabpanel with 12 panels. On each of these panels I placed checkbox controls. I was starting to add them to the last, 12th, panel and now I noticed that all of the checkbox controls are showing on all the Tabpanels. Why is this?

They are not ‘children’ of the tabpanel you believe them to be.
They are sitting on top of them.

So meaning they are not connected to a specific tab? How can I make them connected to a specific tab only?

Switch to the specific tab. Drag the checkbox out of the window, then drag it onto the tabpanel, until the tabpanel gets a red outline showing that it is the parent

1 Like

That is what I did all the time. I tried it again just now and the problem stays. Also, I ONLY see this bleeding to other tabs when running the app, not in layout mode.

And yet

Is there a way to get that screen from you as a file for checking?

I have to mention that the tab panel that contains the checkbox objects is inside a tab from another panel which is again inside a tab from another panel
 All of them have the left, right and bottom borders set to the edges of the window. Can this give this problem?

the tab panel that contains the checkbox objects is inside a tab from another panel which is again inside a tab from another panel

Yikes
 that is asking for trouble, and I expect it is very confusing for the user.

This is what I did in Filemaker and was never a problem. For the user it should be clear, I hope
 It looks like this:

Nesting tabpanels - is that actually supported? (Or is it just pagepanels where you can’t do that?)

No idea, I assumed it was. If this isn’t supported I will have to change my layout design completely. This programs is already in the shop made in Filemaker some years ago and I wanted to create it in Xojo to have more programming options. So I hope I can keep the design the same.

Every time I try to adjust the width of a tab panel, Xojo crashes

Screenshot 2022-08-01 at 09.59.44

There is two ways to resize a Control:
a. By its edges,
b. Changing the values

How many TabPanel(s) you want to resize at once ?

What Xojo version ?

What is the Memory Size ? (RAM)

Is there’s enough SSD free space ?

What macOS version ?

And I do not ask the Screen size (in inches
)

How many TabPanel(s) you want to resize at once ? One at a time.

What Xojo version? Xojo: 2019.release 3.2

What is the Memory Size ? (RAM): 64 GB. Even with this amount or ram, I stil get the spinning ball very often in Xojo. I didn’t expect this on a Mac Studio to be honest.

Is there’s enough SSD free space ?: Yes, 1,97 TB, must one enough


Mac OS: Monterey

I’ll be honest
 if i wanted to to make use of this to develop a story outline, I think I would struggle a bit.

But if I go down ’ a different design suggestion’, then we are not addressing the checkbox issue.
I do have afeeling that nested tabpanels are a problem. Im not sure if ‘not supported’ but I am sure I have read several posts from people who ran into trouble.

I think containercontrols are your best choice here.
These are ‘like a window’, but they can be displayed on a window.

That said, your layout is very hierarchical.
I wonder if a hierarchical listbox might be a good way to navigate?

You just display the containercontrol or the pagepanel, which corresponds to the selected row


Best advice I can give:

Download Xojo 2022r2, open the project and try (WITHOUT SAVING).
You can do that in free mode, buy a license if it works, else continue as you wish.

If it works the way you want, you know what to do.

Remember Apple Silicon (M1, M2) and MacStudio does not exists at 2019r2 release times.

This looks really good, how do I create a hierarchical listbox?

Add a listbox
Set hierarchical = true in the IDE

Then use code like this: (the numbers on the end are 'how deep the indentation goes")


listbox1.AddFolder "Story"
listbox1.AddFolder "Category Type"
listbox1.AddFolder "Characters"
listbox1.AddFolder "Worlds"
listbox1.AddFolder "Creation Steps"
listbox1.insertfolder (listbox1.listcount, "Act 1 (25%)",1)
listbox1.insertrow (listbox1.listcount, "About Act1",2)
listbox1.insertrow (listbox1.listcount, "Step One",2)
listbox1.insertrow (listbox1.listcount, "Step Two",2)
listbox1.insertrow (listbox1.listcount, "Step Three",2)
listbox1.insertrow (listbox1.listcount, "Step Four",2)
listbox1.insertfolder (listbox1.listcount, "Act 2 (50%)",1)
listbox1.insertfolder (listbox1.listcount, "Act 3 (25%)",1)
listbox1.AddFolder "Story Clock"

Thanks, I got it to work. Maybe this is a little cleaner for the design, yes.

Great.
Later on, if you didnt realise already, you need to add the children every time a folderrow is expanded, because they are deleted if a row is collapsed.

So instead of

listbox1.insertrow (listbox1.listcount, “About Act1”,2)
listbox1.insertrow (listbox1.listcount, “Step One”,2)
listbox1.insertrow (listbox1.listcount, “Step Two”,2)

at startup,

you would initialise the list with just the top level items:

listbox1.AddFolder "Story"
listbox1.AddFolder "Category Type"
listbox1.AddFolder "Characters"
listbox1.AddFolder "Worlds"
listbox1.AddFolder "Creation Steps"
listbox1.AddFolder "Story Clock"

Then you would use code like this in the expandrow event:


select case me.list(row)

case "Creation Steps"
//row is the row you are adding children to..
me.insertfolder (row+1, "Act 1 (25%)",me.RowDepth(row)+1)
case "Act 1 (25%)"
  me.insertrow(row+1, "About Act1",me.RowDepth(row)+1)
  me.insertrow(row+2, "Step One",me.RowDepth(row)+1)
  me.insertrow(row+3, "Step Two",me.RowDepth(row)+1)
//etc
case else

end select

If you set the rowtag of each added row to be ‘the panel you want to show’
like this:


case "Creation Steps"
  //row is the row you are adding children to..
  me.insertfolder (row+1, "Act 1 (25%)",me.RowDepth(row)+1)
  me.rowtag(me.lastindex) = "panelact1"
case "Act 1 (25%)"
  me.insertrow(row+1, "About Act1",me.RowDepth(row)+1)
  me.rowtag(me.lastindex) = "panelaboutact1"
  me.insertrow(row+2, "Step One",me.RowDepth(row)+1)
  me.rowtag(me.lastindex) = "panelaboutact1stepone"
  me.insertrow(row+3, "Step Two",me.RowDepth(row)+1)
  me.rowtag(me.lastindex) = "panelaboutact1steptwo"

Then when a row is selected, you can display the right panel by checking the rowtag against the control names:


//listbox changed event

for x as integer = 0 to self.ControlCount-1
  if self.Control(x) isa PagePanel then
    pagepanel(Control(x)).Visible = pagepanel(Control(x)).name = me.rowtag(me.listindex)
  end if
next