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:
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright 2010, Haiku, Inc. All rights reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
#ifndef _ABSTRACT_LAYOUT_H
|
||||
#define _ABSTRACT_LAYOUT_H
|
||||
|
||||
#include <Alignment.h>
|
||||
#include <Layout.h>
|
||||
#include <Size.h>
|
||||
|
||||
class BAbstractLayout : public BLayout {
|
||||
public:
|
||||
BAbstractLayout();
|
||||
BAbstractLayout(BMessage* from);
|
||||
virtual ~BAbstractLayout();
|
||||
|
||||
virtual BSize MinSize();
|
||||
virtual BSize MaxSize();
|
||||
virtual BSize PreferredSize();
|
||||
virtual BAlignment Alignment();
|
||||
|
||||
virtual void SetExplicitMinSize(BSize size);
|
||||
virtual void SetExplicitMaxSize(BSize size);
|
||||
virtual void SetExplicitPreferredSize(BSize size);
|
||||
virtual void SetExplicitAlignment(BAlignment alignment);
|
||||
|
||||
virtual BSize BaseMinSize();
|
||||
virtual BSize BaseMaxSize();
|
||||
virtual BSize BasePreferredSize();
|
||||
virtual BAlignment BaseAlignment();
|
||||
|
||||
virtual BRect Frame();
|
||||
virtual void SetFrame(BRect frame);
|
||||
|
||||
virtual bool IsVisible();
|
||||
virtual void SetVisible(bool visible);
|
||||
|
||||
virtual status_t Archive(BMessage* into, bool deep = true) const;
|
||||
virtual status_t AllUnarchived(const BMessage* from);
|
||||
|
||||
protected:
|
||||
virtual void OwnerChanged(BView* was);
|
||||
virtual void AncestorVisibilityChanged(bool shown);
|
||||
|
||||
private:
|
||||
struct Proxy;
|
||||
struct ViewProxy;
|
||||
struct DataProxy;
|
||||
|
||||
Proxy* fExplicitData;
|
||||
};
|
||||
|
||||
#endif // _ABSTRACT_LAYOUT_ITEM_H
|
||||
@@ -5,10 +5,10 @@
|
||||
#ifndef _CARD_LAYOUT_H
|
||||
#define _CARD_LAYOUT_H
|
||||
|
||||
#include <Layout.h>
|
||||
#include <AbstractLayout.h>
|
||||
|
||||
|
||||
class BCardLayout : public BLayout {
|
||||
class BCardLayout : public BAbstractLayout {
|
||||
public:
|
||||
BCardLayout();
|
||||
BCardLayout(BMessage* from);
|
||||
@@ -19,23 +19,23 @@ public:
|
||||
void SetVisibleItem(int32 index);
|
||||
void SetVisibleItem(BLayoutItem* item);
|
||||
|
||||
virtual BSize MinSize();
|
||||
virtual BSize MaxSize();
|
||||
virtual BSize PreferredSize();
|
||||
virtual BAlignment Alignment();
|
||||
virtual BSize BaseMinSize();
|
||||
virtual BSize BaseMaxSize();
|
||||
virtual BSize BasePreferredSize();
|
||||
virtual BAlignment BaseAlignment();
|
||||
|
||||
virtual bool HasHeightForWidth();
|
||||
virtual void GetHeightForWidth(float width, float* min,
|
||||
float* max, float* preferred);
|
||||
|
||||
virtual void InvalidateLayout();
|
||||
virtual void LayoutView();
|
||||
virtual void InvalidateLayout(bool children = false);
|
||||
|
||||
virtual status_t Archive(BMessage* into, bool deep = true) const;
|
||||
virtual status_t AllUnarchived(const BMessage* from);
|
||||
static BArchivable* Instantiate(BMessage* from);
|
||||
|
||||
protected:
|
||||
virtual void DerivedLayoutItems();
|
||||
virtual bool ItemAdded(BLayoutItem* item, int32 atIndex);
|
||||
virtual void ItemRemoved(BLayoutItem* item, int32 fromIndex);
|
||||
|
||||
|
||||
@@ -16,9 +16,9 @@ public:
|
||||
BGridLayoutBuilder(BGridView* view);
|
||||
|
||||
BGridLayout* GridLayout() const;
|
||||
BView* View() const;
|
||||
BGridLayoutBuilder& GetGridLayout(BGridLayout** _layout);
|
||||
BGridLayoutBuilder& GetView(BView** _view);
|
||||
BView* View() const;
|
||||
BGridLayoutBuilder& GetView(BView** _view);
|
||||
|
||||
BGridLayoutBuilder& Add(BView* view, int32 column, int32 row,
|
||||
int32 columnCount = 1, int32 rowCount = 1);
|
||||
@@ -32,7 +32,6 @@ public:
|
||||
float bottom);
|
||||
|
||||
operator BGridLayout*();
|
||||
operator BView*();
|
||||
|
||||
private:
|
||||
BGridLayout* fLayout;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2006, Haiku, Inc. All rights reserved.
|
||||
* Copyright 2006-2010, Haiku, Inc. All rights reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
#ifndef _GROUP_LAYOUT_BUILDER_H
|
||||
@@ -39,7 +39,6 @@ public:
|
||||
float bottom);
|
||||
|
||||
operator BGroupLayout*();
|
||||
operator BView*();
|
||||
|
||||
private:
|
||||
bool _PushLayout(BGroupLayout* layout);
|
||||
|
||||
@@ -8,22 +8,27 @@
|
||||
|
||||
#include <Alignment.h>
|
||||
#include <Archivable.h>
|
||||
#include <LayoutItem.h>
|
||||
#include <List.h>
|
||||
#include <Size.h>
|
||||
|
||||
|
||||
class BLayoutContext;
|
||||
class BLayoutItem;
|
||||
class BView;
|
||||
|
||||
|
||||
class BLayout : public BArchivable {
|
||||
class BLayout : public BLayoutItem {
|
||||
public:
|
||||
BLayout();
|
||||
BLayout(BMessage* archive);
|
||||
virtual ~BLayout();
|
||||
|
||||
BView* View() const;
|
||||
BView* Owner() const;
|
||||
BView* TargetView() const;
|
||||
virtual BView* View(); // from BLayoutItem
|
||||
|
||||
// methods dealing with items
|
||||
virtual BLayoutItem* AddView(BView* child);
|
||||
virtual BLayoutItem* AddView(int32 index, BView* child);
|
||||
|
||||
@@ -39,18 +44,22 @@ public:
|
||||
int32 IndexOfItem(const BLayoutItem* item) const;
|
||||
int32 IndexOfView(BView* child) const;
|
||||
|
||||
virtual BSize MinSize() = 0;
|
||||
virtual BSize MaxSize() = 0;
|
||||
virtual BSize PreferredSize() = 0;
|
||||
virtual BAlignment Alignment() = 0;
|
||||
bool AncestorsVisible();
|
||||
|
||||
virtual bool HasHeightForWidth() = 0;
|
||||
virtual void GetHeightForWidth(float width, float* min,
|
||||
float* max, float* preferred) = 0;
|
||||
// Layouting related methods
|
||||
|
||||
virtual void InvalidateLayout();
|
||||
virtual void InvalidateLayout(bool children = false);
|
||||
virtual void Relayout(bool immediate = false);
|
||||
void RequireLayout();
|
||||
bool IsValid();
|
||||
void EnableLayoutInvalidation();
|
||||
void DisableLayoutInvalidation();
|
||||
|
||||
virtual void LayoutView() = 0;
|
||||
void LayoutItems(bool force = false);
|
||||
BRect LayoutArea();
|
||||
BLayoutContext* LayoutContext();
|
||||
|
||||
// Archiving methods
|
||||
|
||||
virtual status_t Archive(BMessage* into, bool deep = true) const;
|
||||
virtual status_t AllUnarchived(const BMessage* from);
|
||||
@@ -59,17 +68,44 @@ public:
|
||||
int32 index) const;
|
||||
virtual status_t ItemUnarchived(const BMessage* from,
|
||||
BLayoutItem* item, int32 index);
|
||||
|
||||
protected:
|
||||
// BLayout hook methods
|
||||
virtual bool ItemAdded(BLayoutItem* item, int32 atIndex);
|
||||
virtual void ItemRemoved(BLayoutItem* item, int32 fromIndex);
|
||||
virtual void DerivedLayoutItems() = 0;
|
||||
virtual void OwnerChanged(BView* was);
|
||||
|
||||
// BLayoutItem hook methods
|
||||
virtual void AttachedToLayout();
|
||||
virtual void DetachedFromLayout(BLayout* layout);
|
||||
virtual void AncestorVisibilityChanged(bool shown);
|
||||
|
||||
// To be called by sub-classes in SetVisible().
|
||||
void VisibilityChanged(bool show);
|
||||
// To be called when layout data is known to be good
|
||||
void ResetLayoutInvalidation();
|
||||
|
||||
private:
|
||||
friend class BView;
|
||||
|
||||
void SetView(BView* view);
|
||||
bool RemoveViewRecursive(BView* view);
|
||||
bool InvalidateLayoutsForView(BView* view);
|
||||
bool InvalidationLegal();
|
||||
void SetOwner(BView* owner);
|
||||
void SetTarget(BView* target);
|
||||
|
||||
BView* fView;
|
||||
void _LayoutWithinContext(bool force,
|
||||
BLayoutContext* context);
|
||||
|
||||
uint32 fState;
|
||||
bool fAncestorsVisible;
|
||||
int32 fInvalidationDisabled;
|
||||
BLayoutContext* fContext;
|
||||
BView* fOwner;
|
||||
BView* fTarget;
|
||||
BList fItems;
|
||||
BList fNestedLayouts;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ class BLayout;
|
||||
class BView;
|
||||
|
||||
|
||||
class BLayoutItem: public BArchivable {
|
||||
class BLayoutItem : public BArchivable {
|
||||
public:
|
||||
BLayoutItem();
|
||||
BLayoutItem(BMessage* from);
|
||||
@@ -46,7 +46,8 @@ public:
|
||||
|
||||
virtual BView* View();
|
||||
|
||||
virtual void InvalidateLayout();
|
||||
virtual void InvalidateLayout(bool children = false);
|
||||
virtual void Relayout(bool immediate = false);
|
||||
|
||||
void* LayoutData() const;
|
||||
void SetLayoutData(void* data);
|
||||
@@ -57,11 +58,19 @@ public:
|
||||
virtual status_t AllArchived(BMessage* into) const;
|
||||
virtual status_t AllUnarchived(const BMessage* from);
|
||||
|
||||
private:
|
||||
friend class BLayout;
|
||||
protected:
|
||||
|
||||
void SetLayout(BLayout* layout);
|
||||
|
||||
// hook methods
|
||||
virtual void AttachedToLayout();
|
||||
virtual void DetachedFromLayout(BLayout* layout);
|
||||
|
||||
virtual void AncestorVisibilityChanged(bool shown);
|
||||
|
||||
private:
|
||||
friend class BLayout;
|
||||
|
||||
BLayout* fLayout;
|
||||
void* fLayoutData;
|
||||
};
|
||||
|
||||
@@ -6,12 +6,12 @@
|
||||
#define _TWO_DIMENSIONAL_LAYOUT_H
|
||||
|
||||
|
||||
#include <Layout.h>
|
||||
#include <AbstractLayout.h>
|
||||
|
||||
class BLayoutContext;
|
||||
|
||||
|
||||
class BTwoDimensionalLayout : public BLayout {
|
||||
class BTwoDimensionalLayout : public BAbstractLayout {
|
||||
public:
|
||||
BTwoDimensionalLayout();
|
||||
BTwoDimensionalLayout(BMessage* from);
|
||||
@@ -25,18 +25,18 @@ public:
|
||||
void AlignLayoutWith(BTwoDimensionalLayout* other,
|
||||
enum orientation orientation);
|
||||
|
||||
virtual BSize MinSize();
|
||||
virtual BSize MaxSize();
|
||||
virtual BSize PreferredSize();
|
||||
virtual BAlignment Alignment();
|
||||
virtual BSize BaseMinSize();
|
||||
virtual BSize BaseMaxSize();
|
||||
virtual BSize BasePreferredSize();
|
||||
virtual BAlignment BaseAlignment();
|
||||
|
||||
virtual bool HasHeightForWidth();
|
||||
virtual void GetHeightForWidth(float width, float* min,
|
||||
float* max, float* preferred);
|
||||
|
||||
virtual void InvalidateLayout();
|
||||
virtual void SetFrame(BRect frame);
|
||||
|
||||
virtual void LayoutView();
|
||||
virtual void InvalidateLayout(bool children = false);
|
||||
|
||||
virtual status_t Archive(BMessage* into, bool deep = true) const;
|
||||
virtual status_t AllArchived(BMessage* into) const;
|
||||
@@ -56,6 +56,8 @@ protected:
|
||||
int32 height;
|
||||
};
|
||||
|
||||
virtual void DerivedLayoutItems();
|
||||
|
||||
BSize AddInsets(BSize size);
|
||||
void AddInsets(float* minHeight, float* maxHeight,
|
||||
float* preferredHeight);
|
||||
@@ -82,7 +84,6 @@ private:
|
||||
friend class LocalLayouter;
|
||||
|
||||
void _ValidateMinMax();
|
||||
BLayoutContext* _CurrentLayoutContext();
|
||||
|
||||
protected:
|
||||
float fLeftInset;
|
||||
|
||||
@@ -562,6 +562,8 @@ public:
|
||||
void Layout(bool force);
|
||||
void Relayout();
|
||||
|
||||
class Private;
|
||||
|
||||
protected:
|
||||
virtual void DoLayout();
|
||||
|
||||
@@ -580,6 +582,8 @@ protected:
|
||||
|
||||
private:
|
||||
void _Layout(bool force, BLayoutContext* context);
|
||||
void _LayoutLeft(BLayout* deleted);
|
||||
void _InvalidateParentLayout();
|
||||
|
||||
private:
|
||||
// FBC padding and forbidden methods
|
||||
@@ -595,6 +599,7 @@ private:
|
||||
private:
|
||||
struct LayoutData;
|
||||
|
||||
friend class Private;
|
||||
friend class BBitmap;
|
||||
friend class BLayout;
|
||||
friend class BPrintJob;
|
||||
|
||||
@@ -103,6 +103,7 @@ public:
|
||||
void Close() { Quit(); }
|
||||
|
||||
void AddChild(BView* child, BView* before = NULL);
|
||||
void AddChild(BLayoutItem* child);
|
||||
bool RemoveChild(BView* child);
|
||||
int32 CountChildren() const;
|
||||
BView* ChildAt(int32 index) const;
|
||||
|
||||
Reference in New Issue
Block a user