From 52c07497235d833c3438bf42c2472f0fb7d45283 Mon Sep 17 00:00:00 2001 From: Markus Himmel Date: Sun, 27 Dec 2015 00:12:01 +0100 Subject: [PATCH] BLayoutBuilder: Add support for BCardLayout Signed-off-by: Augustin Cavalier --- headers/os/interface/LayoutBuilder.h | 457 +++++++++++++++++++++++++++ 1 file changed, 457 insertions(+) diff --git a/headers/os/interface/LayoutBuilder.h b/headers/os/interface/LayoutBuilder.h index 5f7c721834..1c54716748 100644 --- a/headers/os/interface/LayoutBuilder.h +++ b/headers/os/interface/LayoutBuilder.h @@ -8,6 +8,8 @@ #include +#include +#include #include #include #include @@ -27,6 +29,7 @@ template class Base; template class Group; template class Grid; template class Split; +template class Cards; template class Menu; template class MenuItem; @@ -53,6 +56,7 @@ public: typedef Group GroupBuilder; typedef Grid GridBuilder; typedef Split SplitBuilder; + typedef Cards CardBuilder; public: inline Group(orientation orientation = B_HORIZONTAL, @@ -99,6 +103,12 @@ public: inline SplitBuilder AddSplit(BSplitView* splitView, float weight = 1.0f); + inline CardBuilder AddCards(float weight = 1.0f); + inline CardBuilder AddCards(BCardLayout* cardLayout, + float weight = 1.0f); + inline CardBuilder AddCards(BCardView* cardView, + float weight = 1.0f); + inline ThisBuilder& AddGlue(float weight = 1.0f); inline ThisBuilder& AddStrut(float size); @@ -126,6 +136,7 @@ public: typedef Group GroupBuilder; typedef Grid GridBuilder; typedef Split SplitBuilder; + typedef Cards CardBuilder; public: inline Grid(float horizontal @@ -192,6 +203,15 @@ public: int32 row, int32 columnCount = 1, int32 rowCount = 1); + inline CardBuilder AddCards(int32 column, int32 row, + int32 columnCount = 1, int32 rowCount = 1); + inline CardBuilder AddCards(BCardLayout* cardLayout, int32 column, + int32 row, int32 columnCount = 1, + int32 rowCount = 1); + inline CardBuilder AddCards(BCardView* cardView, int32 column, + int32 row, int32 columnCount = 1, + int32 rowCount = 1); + inline ThisBuilder& AddGlue(int32 column, int32 row, int32 columnCount = 1, int32 rowCount = 1); @@ -226,6 +246,7 @@ public: typedef Group GroupBuilder; typedef Grid GridBuilder; typedef Split SplitBuilder; + typedef Cards CardBuilder; public: inline Split(orientation orientation = B_HORIZONTAL, @@ -264,6 +285,12 @@ public: inline SplitBuilder AddSplit(BSplitView* splitView, float weight = 1.0f); + inline CardBuilder AddCards(float weight = 1.0f); + inline CardBuilder AddCards(BCardLayout* cardLayout, + float weight = 1.0f); + inline CardBuilder AddCards(BCardView* cardView, + float weight = 1.0f); + inline ThisBuilder& SetCollapsible(bool collapsible); inline ThisBuilder& SetCollapsible(int32 index, bool collapsible); inline ThisBuilder& SetCollapsible(int32 first, int32 last, @@ -280,6 +307,62 @@ private: BSplitView* fView; }; +template +class Cards : public Base { +public: + typedef Cards ThisBuilder; + typedef Group GroupBuilder; + typedef Grid GridBuilder; + typedef Split SplitBuilder; + typedef Cards CardBuilder; + +public: + inline Cards(); + inline Cards(BWindow* window); + inline Cards(BView* view); + inline Cards(BCardLayout* layout); + inline Cards(BCardView* view); + + inline BCardLayout* Layout() const; + inline BView* View() const; + inline ThisBuilder& GetLayout(BCardLayout** _layout); + inline ThisBuilder& GetView(BView** _view); + + inline ThisBuilder& Add(BView* view); + inline ThisBuilder& Add(BLayoutItem* item); + + inline GroupBuilder AddGroup(orientation orientation, + float spacing = B_USE_DEFAULT_SPACING); + inline GroupBuilder AddGroup(BGroupView* groupView); + inline GroupBuilder AddGroup(BGroupLayout* groupLayout); + + inline GridBuilder AddGrid(float horizontal + = B_USE_DEFAULT_SPACING, + float vertical = B_USE_DEFAULT_SPACING); + inline GridBuilder AddGrid(BGridLayout* gridLayout); + inline GridBuilder AddGrid(BGridView* gridView); + + inline SplitBuilder AddSplit(orientation orientation, + float spacing = B_USE_DEFAULT_SPACING); + inline SplitBuilder AddSplit(BSplitView* splitView); + + inline CardBuilder AddCards(); + inline CardBuilder AddCards(BCardLayout* cardLayout); + inline CardBuilder AddCards(BCardView* cardView); + + inline ThisBuilder& SetExplicitMinSize(BSize size); + inline ThisBuilder& SetExplicitMaxSize(BSize size); + inline ThisBuilder& SetExplicitPreferredSize(BSize size); + inline ThisBuilder& SetExplicitAlignment(BAlignment alignment); + + inline ThisBuilder& SetVisibleItem(int32 index); + + inline operator BCardLayout*(); + +private: + BCardLayout* fLayout; +}; + template class Menu : public Base { @@ -569,6 +652,39 @@ Group::AddSplit(BSplitView* splitView, float weight) } +template +typename Group::CardBuilder +Group::AddCards(float weight) +{ + CardBuilder builder; + builder.SetParent(this); + fLayout->AddView(builder.View(), weight); + return builder; +} + + +template +typename Group::CardBuilder +Group::AddCards(BCardLayout* cardLayout, float weight) +{ + CardBuilder builder(cardLayout); + builder.SetParent(this); + fLayout->AddView(builder.View(), weight); + return builder; +} + + +template +typename Group::CardBuilder +Group::AddCards(BCardView* cardView, float weight) +{ + CardBuilder builder(cardView); + builder.SetParent(this); + fLayout->AddView(builder.View(), weight); + return builder; +} + + template typename Group::ThisBuilder& Group::AddGlue(float weight) @@ -884,6 +1000,42 @@ Grid::AddSplit(BSplitView* splitView, int32 column, int32 row, } +template +typename Grid::CardBuilder +Grid::AddCards(int32 column, int32 row, int32 columnCount, + int32 rowCount) +{ + CardBuilder builder; + builder.SetParent(this); + fLayout->AddView(builder.View(), column, row, columnCount, rowCount); + return builder; +} + + +template +typename Grid::CardBuilder +Grid::AddCards(BCardLayout* cardLayout, int32 column, int32 row, + int32 columnCount, int32 rowCount) +{ + CardBuilder builder(cardLayout); + builder.SetParent(this); + fLayout->AddView(builder.View(), column, row, columnCount, rowCount); + return builder; +} + + +template +typename Grid::CardBuilder +Grid::AddCards(BCardView* cardView, int32 column, int32 row, + int32 columnCount, int32 rowCount) +{ + CardBuilder builder(cardView); + builder.SetParent(this); + fLayout->AddView(builder.View(), column, row, columnCount, rowCount); + return builder; +} + + template typename Grid::ThisBuilder& Grid::AddGlue(int32 column, int32 row, int32 columnCount, @@ -1172,6 +1324,39 @@ Split::AddSplit(orientation orientation, float spacing, } +template +typename Split::CardBuilder +Split::AddCards(float weight) +{ + CardBuilder builder; + builder.SetParent(this); + fView->AddChild(builder.View(), weight); + return builder; +} + + +template +typename Split::CardBuilder +Split::AddCards(BCardLayout* cardLayout, float weight) +{ + CardBuilder builder(cardLayout); + builder.SetParent(this); + fView->AddChild(builder.View(), weight); + return builder; +} + + +template +typename Split::CardBuilder +Split::AddCards(BCardView* cardView, float weight) +{ + CardBuilder builder(cardView); + builder.SetParent(this); + fView->AddChild(builder.View(), weight); + return builder; +} + + template typename Split::ThisBuilder& Split::SetCollapsible(bool collapsible) @@ -1234,6 +1419,278 @@ Split::operator BSplitView*() } +// #pragma mark - Cards + + +template +Cards::Cards() + : + fLayout((new BCardView())->CardLayout()) +{ +} + + +template +Cards::Cards(BWindow* window) + : + fLayout(new BCardLayout()) +{ + window->SetLayout(fLayout); + + fLayout->Owner()->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); +} + + +template +Cards::Cards(BView* view) + : + fLayout(new BCardLayout()) +{ + view->SetLayout(fLayout); + view->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); +} + + +template +Cards::Cards(BCardLayout* layout) + : + fLayout(layout) +{ +} + + +template +Cards::Cards(BCardView* view) + : + fLayout(view->CardLayout()) +{ +} + + +template +BCardLayout* +Cards::Layout() const +{ + return fLayout; +} + + +template +BView* +Cards::View() const +{ + return fLayout->Owner(); +} + + +template +typename Cards::ThisBuilder& +Cards::GetLayout(BCardLayout** _layout) +{ + *_layout = fLayout; + return *this; +} + + +template +typename Cards::ThisBuilder& +Cards::GetView(BView** _view) +{ + *_view = fLayout->Owner(); + return *this; +} + + +template +typename Cards::ThisBuilder& +Cards::Add(BView* view) +{ + fLayout->AddView(view); + return *this; +} + + +template +typename Cards::ThisBuilder& +Cards::Add(BLayoutItem* item) +{ + fLayout->AddItem(item); + return *this; +} + + +template +typename Cards::GroupBuilder +Cards::AddGroup(orientation orientation, float spacing) +{ + GroupBuilder builder(new BGroupLayout(orientation, spacing)); + builder.SetParent(this); + fLayout->AddItem(builder.Layout()); + return builder; +} + + +template +typename Cards::GroupBuilder +Cards::AddGroup(BGroupView* groupView) +{ + GroupBuilder builder(groupView); + builder.SetParent(this); + fLayout->AddItem(builder.Layout()); + return builder; +} + + +template +typename Cards::GroupBuilder +Cards::AddGroup(BGroupLayout* groupLayout) +{ + GroupBuilder builder(groupLayout); + builder.SetParent(this); + fLayout->AddItem(builder.Layout()); + return builder; +} + + +template +typename Cards::GridBuilder +Cards::AddGrid(float horizontal, float vertical) +{ + GridBuilder builder(horizontal, vertical); + builder.SetParent(this); + fLayout->AddItem(builder.Layout()); + return builder; +} + + +template +typename Cards::GridBuilder +Cards::AddGrid(BGridLayout* gridLayout) +{ + GridBuilder builder(gridLayout); + builder.SetParent(this); + fLayout->AddItem(builder.Layout()); + return builder; +} + + +template +typename Cards::GridBuilder +Cards::AddGrid(BGridView* gridView) +{ + GridBuilder builder(gridView); + builder.SetParent(this); + fLayout->AddItem(builder.Layout()); + return builder; +} + + +template +typename Cards::SplitBuilder +Cards::AddSplit(orientation orientation, float spacing) +{ + SplitBuilder builder(orientation, spacing); + builder.SetParent(this); + fLayout->AddView(builder.View()); + return builder; +} + + +template +typename Cards::SplitBuilder +Cards::AddSplit(BSplitView* splitView) +{ + SplitBuilder builder(splitView); + builder.SetParent(this); + fLayout->AddView(builder.View()); + return builder; +} + + +template +typename Cards::CardBuilder +Cards::AddCards() +{ + CardBuilder builder; + builder.SetParent(this); + fLayout->AddView(builder.View()); + return builder; +} + + +template +typename Cards::CardBuilder +Cards::AddCards(BCardLayout* cardLayout) +{ + CardBuilder builder(cardLayout); + builder.SetParent(this); + fLayout->AddView(builder.View()); + return builder; +} + +template +typename Cards::CardBuilder +Cards::AddCards(BCardView* cardView) +{ + CardBuilder builder(cardView); + builder.SetParent(this); + fLayout->AddView(builder.View()); + return builder; +} + + +template +typename Cards::ThisBuilder& +Cards::SetExplicitMinSize(BSize size) +{ + fLayout->SetExplicitMinSize(size); + return *this; +} + + +template +typename Cards::ThisBuilder& +Cards::SetExplicitMaxSize(BSize size) +{ + fLayout->SetExplicitMaxSize(size); + return *this; +} + + +template +typename Cards::ThisBuilder& +Cards::SetExplicitPreferredSize(BSize size) +{ + fLayout->SetExplicitPreferredSize(size); + return *this; +} + + +template +typename Cards::ThisBuilder& +Cards::SetExplicitAlignment(BAlignment alignment) +{ + fLayout->SetExplicitAlignment(alignment); + return *this; +} + + +template +typename Cards::ThisBuilder& +Cards::SetVisibleItem(int32 item) +{ + fLayout->SetVisibleItem(item); + return *this; +} + + +template +Cards::operator BCardLayout*() +{ + return fLayout; +} + + // #pragma mark - Menu