Big change deriving BLayout from BLayoutItem, and allowing viewless BLayouts.

a few highlights:
* BLayout now derives publicly from BLayoutItem
* Added BAbstractLayout class, which our layouts now derive from
* updated layout builders to avoid creating views when they don't need to
* updated layout classes
* updated AboutSystem to fix a little regression
* more details on #6407
* please tell me about any regressions, I've tried to find them all, but some
  may have slipped by.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38207 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Alex Wilson
2010-08-17 18:43:41 +00:00
parent 0f274fd5b2
commit 1d6c7b6cb6
28 changed files with 1546 additions and 312 deletions
+220 -39
View File
@@ -33,7 +33,6 @@ protected:
public:
inline void SetParent(ParentBuilder* parent);
// conceptually private
inline ParentBuilder& End();
protected:
@@ -71,11 +70,23 @@ public:
inline GroupBuilder AddGroup(enum orientation orientation,
float spacing = 0.0f, float weight = 1.0f);
inline GroupBuilder AddGroup(BGroupView* groupView,
float weight = 1.0f);
inline GroupBuilder AddGroup(BGroupLayout* groupLayout,
float weight = 1.0f);
inline GridBuilder AddGrid(float horizontalSpacing = 0.0f,
float verticalSpacing = 0.0f,
float weight = 1.0f);
inline GridBuilder AddGrid(BGridLayout* gridLayout,
float weight = 1.0f);
inline GridBuilder AddGrid(BGridView* gridView,
float weight = 1.0f);
inline SplitBuilder AddSplit(enum orientation orientation,
float spacing = 0.0f, float weight = 1.0f);
inline SplitBuilder AddSplit(BSplitView* splitView,
float weight = 1.0f);
inline ThisBuilder& AddGlue(float weight = 1.0f);
inline ThisBuilder& AddStrut(float size);
@@ -84,7 +95,6 @@ public:
float bottom);
inline operator BGroupLayout*();
inline operator BView*();
private:
BGroupLayout* fLayout;
@@ -131,13 +141,30 @@ public:
inline GroupBuilder AddGroup(enum orientation orientation,
float spacing, int32 column, int32 row,
int32 columnCount = 1, int32 rowCount = 1);
inline GroupBuilder AddGroup(BGroupView* groupView, int32 column,
int32 row, int32 columnCount = 1,
int32 rowCount = 1);
inline GroupBuilder AddGroup(BGroupLayout* groupLayout,
int32 column, int32 row,
int32 columnCount = 1, int32 rowCount = 1);
inline GridBuilder AddGrid(float horizontalSpacing,
float verticalSpacing, int32 column,
int32 row, int32 columnCount = 1,
int32 rowCount = 1);
inline GridBuilder AddGrid(BGridLayout* gridLayout,
int32 column, int32 row,
int32 columnCount = 1, int32 rowCount = 1);
inline GridBuilder AddGrid(BGridView* gridView,
int32 column, int32 row,
int32 columnCount = 1, int32 rowCount = 1);
inline SplitBuilder AddSplit(enum orientation orientation,
float spacing, int32 column, int32 row,
int32 columnCount = 1, int32 rowCount = 1);
inline SplitBuilder AddSplit(BSplitView* splitView, int32 column,
int32 row, int32 columnCount = 1,
int32 rowCount = 1);
inline ThisBuilder& SetColumnWeight(int32 column, float weight);
inline ThisBuilder& SetRowWeight(int32 row, float weight);
@@ -146,7 +173,6 @@ public:
float bottom);
inline operator BGridLayout*();
inline operator BView*();
private:
BGridLayout* fLayout;
@@ -168,7 +194,8 @@ public:
inline Split(BSplitView* view);
inline BSplitView* View() const;
inline ThisBuilder& GetView(BSplitView** _view);
inline ThisBuilder& GetView(BView** _view);
inline ThisBuilder& GetSplitView(BSplitView** _view);
inline ThisBuilder& Add(BView* view);
inline ThisBuilder& Add(BView* view, float weight);
@@ -177,11 +204,23 @@ public:
inline GroupBuilder AddGroup(enum orientation orientation,
float spacing = 0.0f, float weight = 1.0f);
inline GroupBuilder AddGroup(BGroupView* groupView,
float weight = 1.0f);
inline GroupBuilder AddGroup(BGroupLayout* groupLayout,
float weight = 1.0f);
inline GridBuilder AddGrid(float horizontalSpacing = 0.0f,
float verticalSpacing = 0.0f,
float weight = 1.0f);
inline GridBuilder AddGrid(BGridView* gridView,
float weight = 1.0f);
inline GridBuilder AddGrid(BGridLayout* gridLayout,
float weight = 1.0f);
inline SplitBuilder AddSplit(enum orientation orientation,
float spacing = 0.0f, float weight = 1.0f);
inline SplitBuilder AddSplit(BSplitView* splitView,
float weight = 1.0f);
inline ThisBuilder& SetCollapsible(bool collapsible);
inline ThisBuilder& SetCollapsible(int32 index, bool collapsible);
@@ -244,7 +283,7 @@ Group<ParentBuilder>::Group(BWindow* window, enum orientation orientation,
{
window->SetLayout(fLayout);
fLayout->View()->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
fLayout->Owner()->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
// TODO: we get a white background if we don't do this
}
@@ -277,7 +316,7 @@ template<typename ParentBuilder>
BView*
Group<ParentBuilder>::View() const
{
return fLayout->View();
return fLayout->Owner();
}
@@ -294,7 +333,7 @@ template<typename ParentBuilder>
typename Group<ParentBuilder>::ThisBuilder&
Group<ParentBuilder>::GetView(BView** _view)
{
*_view = fLayout->View();
*_view = fLayout->Owner();
return *this;
}
@@ -340,21 +379,65 @@ typename Group<ParentBuilder>::GroupBuilder
Group<ParentBuilder>::AddGroup(enum orientation orientation, float spacing,
float weight)
{
GroupBuilder builder(orientation, spacing);
GroupBuilder builder(new BGroupLayout(orientation, spacing));
builder.SetParent(this);
fLayout->AddView(builder.View(), weight);
fLayout->AddItem(builder.Layout(), weight);
return builder;
}
template<typename ParentBuilder>
typename Group<ParentBuilder>::GroupBuilder
Group<ParentBuilder>::AddGroup(BGroupView* groupView, float weight)
{
GroupBuilder builder(groupView);
builder.SetParent(this);
fLayout->AddItem(builder.Layout(), weight);
return builder;
}
template<typename ParentBuilder>
typename Group<ParentBuilder>::GroupBuilder
Group<ParentBuilder>::AddGroup(BGroupLayout* groupLayout, float weight)
{
GroupBuilder builder(groupLayout);
builder.SetParent(this);
fLayout->AddItem(builder.Layout(), weight);
return builder;
}
template<typename ParentBuilder>
typename Group<ParentBuilder>::GridBuilder
Group<ParentBuilder>::AddGrid(float horizontalSpacing, float verticalSpacing,
float weight)
Group<ParentBuilder>::AddGrid(float horizontalSpacing,
float verticalSpacing, float weight)
{
GridBuilder builder(horizontalSpacing, verticalSpacing);
GridBuilder builder(new BGridLayout(horizontalSpacing, verticalSpacing));
builder.SetParent(this);
fLayout->AddView(builder.View(), weight);
fLayout->AddItem(builder.Layout(), weight);
return builder;
}
template<typename ParentBuilder>
typename Group<ParentBuilder>::GridBuilder
Group<ParentBuilder>::AddGrid(BGridLayout* gridLayout, float weight)
{
GridBuilder builder(gridLayout);
builder.SetParent(this);
fLayout->AddItem(builder.Layout(), weight);
return builder;
}
template<typename ParentBuilder>
typename Group<ParentBuilder>::GridBuilder
Group<ParentBuilder>::AddGrid(BGridView* gridView, float weight)
{
GridBuilder builder(gridView);
builder.SetParent(this);
fLayout->AddItem(builder.Layout(), weight);
return builder;
}
@@ -371,6 +454,17 @@ Group<ParentBuilder>::AddSplit(enum orientation orientation, float spacing,
}
template<typename ParentBuilder>
typename Group<ParentBuilder>::SplitBuilder
Group<ParentBuilder>::AddSplit(BSplitView* splitView, float weight)
{
SplitBuilder builder(splitView);
builder.SetParent(this);
fLayout->AddView(builder.View(), weight);
return builder;
}
template<typename ParentBuilder>
typename Group<ParentBuilder>::ThisBuilder&
Group<ParentBuilder>::AddGlue(float weight)
@@ -410,13 +504,6 @@ Group<ParentBuilder>::operator BGroupLayout*()
}
template<typename ParentBuilder>
Group<ParentBuilder>::operator BView*()
{
return fLayout->View();
}
// #pragma mark - Grid
@@ -436,7 +523,7 @@ Grid<ParentBuilder>::Grid(BWindow* window, float horizontalSpacing,
{
window->SetLayout(fLayout);
fLayout->View()->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
fLayout->Owner()->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
// TODO: we get a white background if we don't do this
}
@@ -469,7 +556,7 @@ template<typename ParentBuilder>
BView*
Grid<ParentBuilder>::View() const
{
return fLayout->View();
return fLayout->Owner();
}
@@ -486,7 +573,7 @@ template<typename ParentBuilder>
typename Grid<ParentBuilder>::ThisBuilder&
Grid<ParentBuilder>::GetView(BView** _view)
{
*_view = fLayout->View();
*_view = fLayout->Owner();
return *this;
}
@@ -546,9 +633,33 @@ typename Grid<ParentBuilder>::GroupBuilder
Grid<ParentBuilder>::AddGroup(enum orientation orientation, float spacing,
int32 column, int32 row, int32 columnCount, int32 rowCount)
{
GroupBuilder builder(orientation, spacing);
GroupBuilder builder(new BGroupLayout(orientation, spacing));
builder.SetParent(this);
fLayout->AddView(builder.View(), column, row, columnCount, rowCount);
fLayout->AddItem(builder.Layout(), column, row, columnCount, rowCount);
return builder;
}
template<typename ParentBuilder>
typename Grid<ParentBuilder>::GroupBuilder
Grid<ParentBuilder>::AddGroup(BGroupView* groupView, int32 column, int32 row,
int32 columnCount, int32 rowCount)
{
GroupBuilder builder(groupView);
builder.SetParent(this);
fLayout->AddItem(builder.Layout(), column, row, columnCount, rowCount);
return builder;
}
template<typename ParentBuilder>
typename Grid<ParentBuilder>::GroupBuilder
Grid<ParentBuilder>::AddGroup(BGroupLayout* groupLayout, int32 column,
int32 row, int32 columnCount, int32 rowCount)
{
GroupBuilder builder(groupLayout);
builder.SetParent(this);
fLayout->AddItem(builder.Layout(), column, row, columnCount, rowCount);
return builder;
}
@@ -558,7 +669,19 @@ typename Grid<ParentBuilder>::GridBuilder
Grid<ParentBuilder>::AddGrid(float horizontalSpacing, float verticalSpacing,
int32 column, int32 row, int32 columnCount, int32 rowCount)
{
GridBuilder builder(horizontalSpacing, verticalSpacing);
GridBuilder builder(new BGridLayout(horizontalSpacing, verticalSpacing));
builder.SetParent(this);
fLayout->AddItem(builder.Layout(), column, row, columnCount, rowCount);
return builder;
}
template<typename ParentBuilder>
typename Grid<ParentBuilder>::GridBuilder
Grid<ParentBuilder>::AddGrid(BGridView* gridView, int32 column, int32 row,
int32 columnCount, int32 rowCount)
{
GridBuilder builder(gridView);
builder.SetParent(this);
fLayout->AddView(builder.View(), column, row, columnCount, rowCount);
return builder;
@@ -574,7 +697,19 @@ Grid<ParentBuilder>::AddSplit(enum orientation orientation, float spacing,
builder.SetParent(this);
fLayout->AddView(builder.View(), column, row, columnCount, rowCount);
return builder;
}
}
template<typename ParentBuilder>
typename Grid<ParentBuilder>::SplitBuilder
Grid<ParentBuilder>::AddSplit(BSplitView* splitView, int32 column, int32 row,
int32 columnCount, int32 rowCount)
{
SplitBuilder builder(splitView);
builder.SetParent(this);
fLayout->AddView(builder.View(), column, row, columnCount, rowCount);
return builder;
}
template<typename ParentBuilder>
@@ -612,13 +747,6 @@ Grid<ParentBuilder>::operator BGridLayout*()
}
template<typename ParentBuilder>
Grid<ParentBuilder>::operator BView*()
{
return fLayout->View();
}
// #pragma mark - Split
@@ -648,7 +776,16 @@ Split<ParentBuilder>::View() const
template<typename ParentBuilder>
typename Split<ParentBuilder>::ThisBuilder&
Split<ParentBuilder>::GetView(BSplitView** _view)
Split<ParentBuilder>::GetView(BView** _view)
{
*_view = fView;
return *this;
}
template<typename ParentBuilder>
typename Split<ParentBuilder>::ThisBuilder&
Split<ParentBuilder>::GetSplitView(BSplitView** _view)
{
*_view = fView;
return *this;
@@ -696,9 +833,31 @@ typename Split<ParentBuilder>::GroupBuilder
Split<ParentBuilder>::AddGroup(enum orientation orientation, float spacing,
float weight)
{
GroupBuilder builder(orientation, spacing);
GroupBuilder builder(new BGroupLayout(orientation, spacing));
builder.SetParent(this);
fView->AddChild(builder.View(), weight);
fView->AddChild(builder.Layout(), weight);
return builder;
}
template<typename ParentBuilder>
typename Split<ParentBuilder>::GroupBuilder
Split<ParentBuilder>::AddGroup(BGroupView* groupView, float weight)
{
GroupBuilder builder(groupView);
builder.SetParent(this);
fView->AddChild(builder.Layout(), weight);
return builder;
}
template<typename ParentBuilder>
typename Split<ParentBuilder>::GroupBuilder
Split<ParentBuilder>::AddGroup(BGroupLayout* groupLayout, float weight)
{
GroupBuilder builder(groupLayout);
builder.SetParent(this);
fView->AddChild(builder.Layout(), weight);
return builder;
}
@@ -708,9 +867,31 @@ typename Split<ParentBuilder>::GridBuilder
Split<ParentBuilder>::AddGrid(float horizontalSpacing, float verticalSpacing,
float weight)
{
GridBuilder builder(horizontalSpacing, verticalSpacing);
GridBuilder builder(new BGridLayout(horizontalSpacing, verticalSpacing));
builder.SetParent(this);
fView->AddChild(builder.View(), weight);
fView->AddChild(builder.Layout(), weight);
return builder;
}
template<typename ParentBuilder>
typename Split<ParentBuilder>::GridBuilder
Split<ParentBuilder>::AddGrid(BGridView* gridView, float weight)
{
GridBuilder builder(gridView);
builder.SetParent(this);
fView->AddChild(builder.Layout(), weight);
return builder;
}
template<typename ParentBuilder>
typename Split<ParentBuilder>::GridBuilder
Split<ParentBuilder>::AddGrid(BGridLayout* layout, float weight)
{
GridBuilder builder(layout);
builder.SetParent(this);
fView->AddChild(builder.Layout(), weight);
return builder;
}