[haiku-development] Can we make BStringView's MaxSize = BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET) by default?

  • From: John Scipione <jscipione@xxxxxxxxx>
  • To: haiku-development@xxxxxxxxxxxxx
  • Date: Tue, 10 Apr 2012 13:53:23 -0400

Working with UI code recently I've been caught by this small annoyance
a couple times now.

BStringView's by default are set to by only as wide as the text. So if
you don't make sure to SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED,
B_SIZE_UNSET)); on the string view then your string views won't get
aligned based on the Alignment() property, e.g. B_ALIGN_LEFT,
B_ALIGN_CENTER, B_ALIGN_RIGHT.

So if you have some code that you want to look like this:

stringView1         control1
stringView2         control2
stringView3         control3

and you write the layout code without SetExplictiMaxSize() you'll
actually get something like this:

   stringView1      control1
 stringView2        control2
     stringView3    control3

The Alignment() property of the BStringView's will be effectively ignored.

So to get a series of left-aligned string views I have to create the
BStringView's first, SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED,
B_SIZE_UNSET)) on each of them, and then use the BStringView in the
<Group><Grid><etc>Layout. Since BStringView's are supposed to be
left-aligned by default this makes the code harder and seems like a
"gotcha" to me. It would be a lot easier if I could simply create
StringView's inline when building the layout for the default case of
left-aligned string views.

For the case of B_ALIGN_CENTER and B_ALIGN_RIGHT string views you'll
have similar  problems if you don't SetExplicitMaxSize() on them.
Although this doesn't have the same code size savings since you'll
have to make sure to SetAlignment() on them before you can use them
anyway.

Thanks for your consideration,

John Scipione

Other related posts: