From ea607d6f7f342e9e7ff706fbc0182046f143a1d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Wed, 28 Oct 2009 09:00:14 +0000 Subject: [PATCH] * Applied a patch by Christof Lutteroth that updates ALM, and brings new test apps. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33805 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/libs/alm/Area.h | 61 +++++----- headers/libs/alm/BALMLayout.h | 12 +- src/libs/alm/Area.cpp | 181 +++++++++++++++++------------- src/libs/alm/BALMLayout.cpp | 16 +-- src/tests/libs/alm/Areas.cpp | 85 ++++++++++++++ src/tests/libs/alm/HelloWorld.cpp | 58 ++++++++++ src/tests/libs/alm/Jamfile | 22 ++-- src/tests/libs/alm/Pinwheel.cpp | 90 +++++++++++++++ src/tests/libs/alm/SimpleTest.cpp | 74 ------------ src/tests/libs/alm/TableDemo.cpp | 72 ++++++++++++ src/tests/libs/alm/TableTest.cpp | 80 ------------- src/tests/libs/alm/Test1.cpp | 84 -------------- src/tests/libs/alm/Test2.cpp | 150 ------------------------- src/tests/libs/alm/TwoViews.cpp | 68 +++++++++++ 14 files changed, 541 insertions(+), 512 deletions(-) create mode 100644 src/tests/libs/alm/Areas.cpp create mode 100644 src/tests/libs/alm/HelloWorld.cpp create mode 100644 src/tests/libs/alm/Pinwheel.cpp delete mode 100644 src/tests/libs/alm/SimpleTest.cpp create mode 100644 src/tests/libs/alm/TableDemo.cpp delete mode 100644 src/tests/libs/alm/TableTest.cpp delete mode 100644 src/tests/libs/alm/Test1.cpp delete mode 100644 src/tests/libs/alm/Test2.cpp create mode 100644 src/tests/libs/alm/TwoViews.cpp diff --git a/headers/libs/alm/Area.h b/headers/libs/alm/Area.h index 10bda8df46..7c6f498486 100644 --- a/headers/libs/alm/Area.h +++ b/headers/libs/alm/Area.h @@ -7,22 +7,23 @@ #ifndef AREA_H #define AREA_H -#include "Constraint.h" - #include #include #include #include #include +#include "XTab.h" +#include "YTab.h" +#include "Area.h" +#include "Row.h" +#include "Column.h" +#include "Constraint.h" + namespace BALM { -class Column; class BALMLayout; -class Row; -class XTab; -class YTab; /** * Rectangular area in the GUI, defined by a tab on each side. @@ -30,9 +31,6 @@ class YTab; class Area { public: - bool AutoPrefContentSize() const; - void SetAutoPrefContentSize(bool value); - XTab* Left() const; void SetLeft(XTab* left); XTab* Right() const; @@ -57,18 +55,21 @@ public: void SetMinContentSize(BSize min); BSize MaxContentSize() const; void SetMaxContentSize(BSize max); - BSize PrefContentSize() const; - void SetPrefContentSize(BSize pref); - BSize ShrinkRigidity() const; - void SetShrinkRigidity(BSize shrink); - BSize ExpandRigidity() const; - void SetExpandRigidity(BSize expand); + BSize PreferredContentSize() const; + void SetPreferredContentSize(BSize preferred); double ContentAspectRatio() const; void SetContentAspectRatio(double ratio); + + BSize ShrinkPenalties() const; + void SetShrinkPenalties(BSize shrink); + BSize GrowPenalties() const; + void SetGrowPenalties(BSize grow); + BAlignment Alignment() const; void SetAlignment(BAlignment alignment); - void SetHAlignment(alignment horizontal); - void SetVAlignment(vertical_alignment vertical); + void SetHorizontalAlignment(alignment horizontal); + void SetVerticalAlignment(vertical_alignment vertical); + int32 LeftInset() const; void SetLeftInset(int32 left); int32 TopInset() const; @@ -77,12 +78,18 @@ public: void SetRightInset(int32 right); int32 BottomInset() const; void SetBottomInset(int32 bottom); - void SetDefaultPrefContentSize(); - //~ string ToString(); + + void SetDefaultBehavior(); + bool AutoPreferredContentSize() const; + void SetAutoPreferredContentSize(bool value); + + BString* ToBString(); + const char* ToString(); Constraint* HasSameWidthAs(Area* area); Constraint* HasSameHeightAs(Area* area); - BList* HasSameSizetAs(Area* area); + BList* HasSameSizeAs(Area* area); + ~Area(); protected: @@ -127,14 +134,14 @@ private: Constraint* fMaxContentWidth; Constraint* fMinContentHeight; Constraint* fMaxContentHeight; - BSize fPrefContentSize; - BSize fShrinkRigidity; - BSize fExpandRigidity; + BSize fPreferredContentSize; + BSize fShrinkPenalties; + BSize fGrowPenalties; double fContentAspectRatio; Constraint* fContentAspectRatioC; - bool fAutoPrefContentSize; - Constraint* fPrefContentWidth; - Constraint* fPrefContentHeight; + bool fAutoPreferredContentSize; + Constraint* fPreferredContentWidth; + Constraint* fPreferredContentHeight; Area* fChildArea; BAlignment fAlignment; int32 fLeftInset; @@ -147,7 +154,7 @@ private: Constraint* fBottomConstraint; public: - friend class BALMLayout; + friend class BALMLayout; }; diff --git a/headers/libs/alm/BALMLayout.h b/headers/libs/alm/BALMLayout.h index 40443ef6b4..575e24cb3e 100644 --- a/headers/libs/alm/BALMLayout.h +++ b/headers/libs/alm/BALMLayout.h @@ -15,16 +15,16 @@ #include #include "LayoutStyleType.h" +#include "XTab.h" +#include "YTab.h" +#include "Area.h" +#include "Row.h" +#include "Column.h" +#include "Constraint.h" #include "LinearSpec.h" namespace BALM { - -class Area; -class Column; -class Row; -class XTab; -class YTab; /** * A GUI layout engine using the ALM. diff --git a/src/libs/alm/Area.cpp b/src/libs/alm/Area.cpp index ee5104b1b7..8a89a59a14 100644 --- a/src/libs/alm/Area.cpp +++ b/src/libs/alm/Area.cpp @@ -34,9 +34,9 @@ BSize Area::kUndefinedSize(-1, -1); * @return the auto preferred content size */ bool -Area::AutoPrefContentSize() const +Area::AutoPreferredContentSize() const { - return fAutoPrefContentSize; + return fAutoPreferredContentSize; } @@ -46,9 +46,9 @@ Area::AutoPrefContentSize() const * @param value the auto preferred content size */ void -Area::SetAutoPrefContentSize(bool value) +Area::SetAutoPreferredContentSize(bool value) { - fAutoPrefContentSize = value; + fAutoPreferredContentSize = value; } @@ -360,38 +360,42 @@ Area::SetMaxContentSize(BSize max) * Gets Preferred size of the area's content. */ BSize -Area::PrefContentSize() const +Area::PreferredContentSize() const { - return (fChildArea == NULL) ? fPrefContentSize : fChildArea->fPrefContentSize; + return (fChildArea == NULL) ? fPreferredContentSize + : fChildArea->fPreferredContentSize; } /** * Sets Preferred size of the area's content. * May be different from the preferred size of the area. - * Manual changes of PrefContentSize are ignored unless autoPrefContentSize is set to false. + * Manual changes of PreferredContentSize are ignored unless + * autoPreferredContentSize is set to false. */ void -Area::SetPrefContentSize(BSize pref) +Area::SetPreferredContentSize(BSize preferred) { if (fChildArea == NULL) { - fPrefContentSize = pref; - if (fPrefContentWidth == NULL) { - fPrefContentWidth = fLS->AddConstraint(-1.0, fLeft, 1.0, fRight, OperatorType(EQ), - fPrefContentSize.Width(), fShrinkRigidity.Width(), - fExpandRigidity.Width()); - fConstraints->AddItem(fPrefContentWidth); + fPreferredContentSize = preferred; + if (fPreferredContentWidth == NULL) { + fPreferredContentWidth = fLS->AddConstraint( + -1.0, fLeft, 1.0, fRight, OperatorType(EQ), + fPreferredContentSize.Width(), fShrinkPenalties.Width(), + fGrowPenalties.Width()); + fConstraints->AddItem(fPreferredContentWidth); - fPrefContentHeight = fLS->AddConstraint(-1.0, fTop, 1.0, fBottom, OperatorType(EQ), - fPrefContentSize.Height(), fShrinkRigidity.Height(), - fExpandRigidity.Height()); - fConstraints->AddItem(fPrefContentHeight); + fPreferredContentHeight = fLS->AddConstraint( + -1.0, fTop, 1.0, fBottom, OperatorType(EQ), + fPreferredContentSize.Height(), fShrinkPenalties.Height(), + fGrowPenalties.Height()); + fConstraints->AddItem(fPreferredContentHeight); } else { - fPrefContentWidth->SetRightSide(pref.Width()); - fPrefContentHeight->SetRightSide(pref.Height()); + fPreferredContentWidth->SetRightSide(preferred.Width()); + fPreferredContentHeight->SetRightSide(preferred.Height()); } } else - fChildArea->SetPrefContentSize(pref); + fChildArea->SetPreferredContentSize(preferred); fLS->InvalidateLayout(); } @@ -401,47 +405,47 @@ Area::SetPrefContentSize(BSize pref) * The bigger the less likely is such shrinking. */ BSize -Area::ShrinkRigidity() const +Area::ShrinkPenalties() const { - return (fChildArea == NULL) ? fShrinkRigidity : fChildArea->fShrinkRigidity; + return (fChildArea == NULL) ? fShrinkPenalties : fChildArea->fShrinkPenalties; } -void Area::SetShrinkRigidity(BSize shrink) { +void Area::SetShrinkPenalties(BSize shrink) { if (fChildArea == NULL) { - fShrinkRigidity = shrink; - if (fPrefContentWidth != NULL) { - fPrefContentWidth->SetPenaltyNeg(shrink.Width()); - fPrefContentHeight->SetPenaltyNeg(shrink.Height()); + fShrinkPenalties = shrink; + if (fPreferredContentWidth != NULL) { + fPreferredContentWidth->SetPenaltyNeg(shrink.Width()); + fPreferredContentHeight->SetPenaltyNeg(shrink.Height()); } } else - fChildArea->SetShrinkRigidity(shrink); + fChildArea->SetShrinkPenalties(shrink); fLS->InvalidateLayout(); } /** - * The reluctance with which the area's content expands over its preferred size. - * The bigger the less likely is such expansion. + * The reluctance with which the area's content grows over its preferred size. + * The bigger the less likely is such growth. */ BSize -Area::ExpandRigidity() const +Area::GrowPenalties() const { - return (fChildArea == NULL) ? fExpandRigidity : fChildArea->fExpandRigidity; + return (fChildArea == NULL) ? fGrowPenalties : fChildArea->fGrowPenalties; } void -Area::SetExpandRigidity(BSize expand) +Area::SetGrowPenalties(BSize grow) { if (fChildArea == NULL) { - fExpandRigidity = expand; - if (fPrefContentWidth != NULL) { - fPrefContentWidth->SetPenaltyPos(expand.Width()); - fPrefContentHeight->SetPenaltyPos(expand.Height()); + fGrowPenalties = grow; + if (fPreferredContentWidth != NULL) { + fPreferredContentWidth->SetPenaltyPos(grow.Width()); + fPreferredContentHeight->SetPenaltyPos(grow.Height()); } } else - fChildArea->SetExpandRigidity(expand); + fChildArea->SetGrowPenalties(grow); fLS->InvalidateLayout(); } @@ -506,7 +510,7 @@ Area::SetAlignment(BAlignment alignment) /** * Sets horizontal alignment of the content in its area. */ -void Area::SetHAlignment(alignment horizontal) { +void Area::SetHorizontalAlignment(alignment horizontal) { fAlignment.SetHorizontal(horizontal); UpdateHorizontal(); fLS->InvalidateLayout(); @@ -517,7 +521,7 @@ void Area::SetHAlignment(alignment horizontal) { * Sets vertical alignment of the content in its area. */ void -Area::SetVAlignment(vertical_alignment vertical) +Area::SetVerticalAlignment(vertical_alignment vertical) { fAlignment.SetVertical(vertical); UpdateVertical(); @@ -613,20 +617,20 @@ Area::SetBottomInset(int32 bottom) /** * Sets the preferred size according to the content's PreferredSize method, - * and the rigidities according to heuristics. + * and the penalties according to heuristics. */ void -Area::SetDefaultPrefContentSize() +Area::SetDefaultBehavior() { if (Content() == NULL) { - SetPrefContentSize(BSize(0, 0)); - SetShrinkRigidity(BSize(0, 0)); - SetExpandRigidity(BSize(0, 0)); + SetPreferredContentSize(BSize(0, 0)); + SetShrinkPenalties(BSize(0, 0)); + SetGrowPenalties(BSize(0, 0)); return; } - if (PrefContentSize() != Content()->PreferredSize()){ - SetPrefContentSize(Content()->PreferredSize()); + if (PreferredContentSize() != Content()->PreferredSize()){ + SetPreferredContentSize(Content()->PreferredSize()); fLS->InvalidateLayout(); } @@ -636,21 +640,44 @@ Area::SetDefaultPrefContentSize() || dynamic_cast(Content()) != NULL || dynamic_cast(Content()) != NULL || dynamic_cast(Content()) != NULL) { - //~ || Content is LinkLabel - //~ || Content is NumericUpDown) { - fShrinkRigidity = BSize(4, 4); - fExpandRigidity = BSize(3, 3); + fShrinkPenalties = BSize(4, 4); + fGrowPenalties = BSize(3, 3); } else { - fShrinkRigidity = BSize(2, 2); - fExpandRigidity = BSize(1, 1); + fShrinkPenalties = BSize(2, 2); + fGrowPenalties = BSize(1, 1); } } -//~ string Area::ToString() { - //~ return "Area(" + fLeft->ToString() + "," + fTop->ToString() + "," - //~ + fRight->ToString() + "," + fBottom->ToString() + ")"; -//~ } +BString* +Area::ToBString() +{ + BString* str = new BString(); + BString* leftStr = fLeft->ToBString(); + BString* topStr = fTop->ToBString(); + BString* rightStr = fRight->ToBString(); + BString* bottomStr = fBottom->ToBString(); + *str << "Area(" << *leftStr << ", " + << *topStr << ", " + << *rightStr << ", " + << *bottomStr << ")"; + delete leftStr; + delete topStr; + delete rightStr; + delete bottomStr; + return str; +} + + +const char* +Area::ToString() +{ + BString* str = new BString(); + char* result = (char*) malloc(str->Length() + 1); + str->CopyInto(result, 0, str->Length()); + delete str; + return result; +} /** @@ -690,7 +717,7 @@ Area::HasSameHeightAs(Area* area) * @return a list containing a same-width and same-height constraint */ BList* -Area::HasSameSizetAs(Area* area) +Area::HasSameSizeAs(Area* area) { BList* constraints = new BList(2); constraints->AddItem(this->HasSameWidthAs(area)); @@ -752,16 +779,16 @@ Area::Init(BALMLayout* ls, XTab* left, YTab* top, XTab* right, YTab* bottom, fMaxContentWidth = NULL; fMaxContentHeight = NULL; - fPrefContentSize = kUndefinedSize; - fShrinkRigidity = BSize(2, 2); - fExpandRigidity = BSize(1, 1); + fPreferredContentSize = kUndefinedSize; + fShrinkPenalties = BSize(2, 2); + fGrowPenalties = BSize(1, 1); fContentAspectRatio = 0; fContentAspectRatioC = NULL; - fAutoPrefContentSize = false; + fAutoPreferredContentSize = false; - fPrefContentWidth = NULL; - fPrefContentHeight = NULL; + fPreferredContentWidth = NULL; + fPreferredContentHeight = NULL; fChildArea = NULL; @@ -855,25 +882,29 @@ Area::InitChildArea() fChildArea->fMaxContentSize = fMaxContentSize; fChildArea->fMaxContentWidth = fMaxContentWidth; - fMaxContentWidth->SetLeftSide(-1.0, fChildArea->Left(), 1.0, fChildArea->Right()); + fMaxContentWidth->SetLeftSide( + -1.0, fChildArea->Left(), 1.0, fChildArea->Right()); fChildArea->fMaxContentHeight = fMaxContentHeight; - fMaxContentHeight->SetLeftSide(-1.0, fChildArea->Top(), 1.0, fChildArea->Bottom()); + fMaxContentHeight->SetLeftSide( + -1.0, fChildArea->Top(), 1.0, fChildArea->Bottom()); } // if there are preferred content size constraints on this area, // change them so that they refer to the tabs of the childArea // and copy the preferred content size settings to the childArea - if (fPrefContentHeight != NULL) { - fChildArea->fPrefContentSize = fPrefContentSize; - fChildArea->fShrinkRigidity = fShrinkRigidity; - fChildArea->fExpandRigidity = fExpandRigidity; + if (fPreferredContentHeight != NULL) { + fChildArea->fPreferredContentSize = fPreferredContentSize; + fChildArea->fShrinkPenalties = fShrinkPenalties; + fChildArea->fGrowPenalties = fGrowPenalties; - fChildArea->fPrefContentWidth = fPrefContentWidth; - fPrefContentWidth->SetLeftSide(-1.0, fChildArea->Left(), 1.0, fChildArea->Right()); + fChildArea->fPreferredContentWidth = fPreferredContentWidth; + fPreferredContentWidth->SetLeftSide( + -1.0, fChildArea->Left(), 1.0, fChildArea->Right()); - fChildArea->fPrefContentHeight = fPrefContentHeight; - fPrefContentHeight->SetLeftSide(-1.0, fChildArea->Top(), 1.0, fChildArea->Bottom()); + fChildArea->fPreferredContentHeight = fPreferredContentHeight; + fPreferredContentHeight->SetLeftSide( + -1.0, fChildArea->Top(), 1.0, fChildArea->Bottom()); } } diff --git a/src/libs/alm/BALMLayout.cpp b/src/libs/alm/BALMLayout.cpp index dfd512991c..95bb1eff7e 100644 --- a/src/libs/alm/BALMLayout.cpp +++ b/src/libs/alm/BALMLayout.cpp @@ -52,14 +52,14 @@ BALMLayout::BALMLayout() void BALMLayout::SolveLayout() { - // if autoPrefContentSize is set on an area, readjust its prefContentSize and - // rigidity settings + // if autoPreferredContentSize is set on an area, + // readjust its preferredContentSize and penalties settings int32 sizeAreas = fAreas->CountItems(); Area* currentArea; for (int32 i = 0; i < sizeAreas; i++) { currentArea = (Area*)fAreas->ItemAt(i); - if (currentArea->AutoPrefContentSize()) - currentArea->SetDefaultPrefContentSize(); + if (currentArea->AutoPreferredContentSize()) + currentArea->SetDefaultBehavior(); } // try to solve the layout until the result is OPTIMAL or INFEASIBLE, maximally @@ -229,8 +229,8 @@ BALMLayout::AddArea(XTab* left, YTab* top, XTab* right, YTab* bottom, if (content != NULL) View()->AddChild(content); Area* area = new Area(this, left, top, right, bottom, content, BSize(0, 0)); - area->SetDefaultPrefContentSize(); - area->SetAutoPrefContentSize(false); + area->SetDefaultBehavior(); + area->SetAutoPreferredContentSize(false); fAreas->AddItem(area); return area; } @@ -251,8 +251,8 @@ BALMLayout::AddArea(Row* row, Column* column, BView* content) if (content != NULL) View()->AddChild(content); Area* area = new Area(this, row, column, content, BSize(0, 0)); - area->SetDefaultPrefContentSize(); - area->SetAutoPrefContentSize(false); + area->SetDefaultBehavior(); + area->SetAutoPreferredContentSize(false); fAreas->AddItem(area); return area; } diff --git a/src/tests/libs/alm/Areas.cpp b/src/tests/libs/alm/Areas.cpp new file mode 100644 index 0000000000..72fb93de85 --- /dev/null +++ b/src/tests/libs/alm/Areas.cpp @@ -0,0 +1,85 @@ +#include +#include +#include +#include + +#include "BALMLayout.h" + + +class AreasWindow : public BWindow { +public: + AreasWindow(BRect frame) + : BWindow(frame, "ALM Areas", + B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE) + { + button1 = new BButton("1"); + button2 = new BButton("2"); + button3 = new BButton("3"); + button4 = new BButton("4"); + + // create a new BALMLayout and use it for this window + BALMLayout* layout = new BALMLayout(); + SetLayout(layout); + + // create extra tabs + YTab* y1 = layout->AddYTab(); + YTab* y2 = layout->AddYTab(); + YTab* y3 = layout->AddYTab(); + + Area* a1 = layout->AddArea( + layout->Left(), layout->Top(), + layout->Right(), y1, + button1); + a1->SetTopInset(10); + a1->SetLeftInset(10); + a1->SetRightInset(10); + + Area* a2 = layout->AddArea( + layout->Left(), y1, + layout->Right(), y2, + button2); + a2->SetHorizontalAlignment(B_ALIGN_LEFT); + + Area* a3 = layout->AddArea( + layout->Left(), y2, + layout->Right(), y3, + button3); + a3->SetHorizontalAlignment(B_ALIGN_HORIZONTAL_CENTER); + a3->HasSameHeightAs(a1); + + Area* a4 = layout->AddArea( + layout->Left(), y3, + layout->Right(), layout->Bottom(), + button4); + a4->SetHorizontalAlignment(B_ALIGN_RIGHT); + } + +private: + BButton* button1; + BButton* button2; + BButton* button3; + BButton* button4; +}; + + +class Areas : public BApplication { +public: + Areas() + : BApplication("application/x-vnd.haiku.Areas") + { + BRect frameRect; + frameRect.Set(100, 100, 300, 300); + AreasWindow* window = new AreasWindow(frameRect); + window->Show(); + } +}; + + +int +main() +{ + Areas app; + app.Run(); + return 0; +} + diff --git a/src/tests/libs/alm/HelloWorld.cpp b/src/tests/libs/alm/HelloWorld.cpp new file mode 100644 index 0000000000..38a4752e9d --- /dev/null +++ b/src/tests/libs/alm/HelloWorld.cpp @@ -0,0 +1,58 @@ +#include +#include +#include +#include + +// include this for ALM +#include "XTab.h" +#include "YTab.h" +#include "Area.h" +#include "BALMLayout.h" + + +class HelloWorldWindow : public BWindow { +public: + HelloWorldWindow(BRect frame) + : BWindow(frame, "ALM Hello World", + B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE) + { + button1 = new BButton("Hello World!"); + + // create a new BALMLayout and use it for this window + fLayout = new BALMLayout(); + SetLayout(fLayout); + + // add an area containing the button + // use the borders of the layout as the borders for the area + Area* a = fLayout->AddArea( + fLayout->Left(), fLayout->Top(), + fLayout->Right(), fLayout->Bottom(), + button1); + } + +private: + BALMLayout* fLayout; + BButton* button1; +}; + + +class HelloWorld : public BApplication { +public: + HelloWorld() + : BApplication("application/x-vnd.haiku.HelloWorld") + { + BRect frameRect; + frameRect.Set(100, 100, 300, 300); + HelloWorldWindow* window = new HelloWorldWindow(frameRect); + window->Show(); + } +}; + + +int +main() +{ + HelloWorld app; + app.Run(); + return 0; +} diff --git a/src/tests/libs/alm/Jamfile b/src/tests/libs/alm/Jamfile index 7469c29bd9..65c3c36798 100644 --- a/src/tests/libs/alm/Jamfile +++ b/src/tests/libs/alm/Jamfile @@ -4,26 +4,32 @@ SetSubDirSupportedPlatformsBeOSCompatible ; UseLibraryHeaders lp_solve linprog alm ; -Application ALMTableTest : - TableTest.cpp +Application ALMHelloWorld : + HelloWorld.cpp : be liblpsolve55.so liblinprog.so libalm.so $(TARGET_LIBSUPC++) ; -Application ALMTest1 : - Test1.cpp +Application ALMTwoViews : + TwoViews.cpp : be liblpsolve55.so be liblinprog.so libalm.so $(TARGET_LIBSUPC++) ; -Application ALMTest2 : - Test2.cpp +Application ALMPinwheel : + Pinwheel.cpp : be liblpsolve55.so be liblinprog.so libalm.so $(TARGET_LIBSUPC++) ; -Application ALMSimpleTest : - SimpleTest.cpp +Application ALMAreas : + Areas.cpp + : + be liblpsolve55.so be liblinprog.so libalm.so $(TARGET_LIBSUPC++) +; + +Application ALMTableDemo : + TableDemo.cpp : be liblpsolve55.so be liblinprog.so libalm.so $(TARGET_LIBSUPC++) ; diff --git a/src/tests/libs/alm/Pinwheel.cpp b/src/tests/libs/alm/Pinwheel.cpp new file mode 100644 index 0000000000..8f589463c8 --- /dev/null +++ b/src/tests/libs/alm/Pinwheel.cpp @@ -0,0 +1,90 @@ +#include +#include +#include +#include +#include + +// include this for ALM +#include "XTab.h" +#include "YTab.h" +#include "Area.h" +#include "BALMLayout.h" + + +class PinwheelWindow : public BWindow { +public: + PinwheelWindow(BRect frame) + : BWindow(frame, "ALM Pinwheel", + B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE) + { + button1 = new BButton("1"); + button2 = new BButton("2"); + button3 = new BButton("3"); + button4 = new BButton("4"); + textView1 = new BTextView("textView1"); + textView1->SetText("5"); + + // create a new BALMLayout and use it for this window + BALMLayout* layout = new BALMLayout(); + SetLayout(layout); + + // create extra tabs + XTab* x1 = layout->AddXTab(); + XTab* x2 = layout->AddXTab(); + YTab* y1 = layout->AddYTab(); + YTab* y2 = layout->AddYTab(); + + Area* a1 = layout->AddArea( + layout->Left(), layout->Top(), + x2, y1, + button1); + Area* a2 = layout->AddArea( + x2, layout->Top(), + layout->Right(), y2, + button2); + Area* a3 = layout->AddArea( + x1, y2, + layout->Right(), layout->Bottom(), + button3); + Area* a4 = layout->AddArea( + layout->Left(), y1, + x1, layout->Bottom(), + button4); + Area* a5 = layout->AddArea( + x1, y1, + x2, y2, + textView1); + + a1->HasSameSizeAs(a3); + } + +private: + BButton* button1; + BButton* button2; + BButton* button3; + BButton* button4; + BTextView* textView1; +}; + + +class Pinwheel : public BApplication { +public: + Pinwheel() + : BApplication("application/x-vnd.haiku.Pinwheel") + { + BRect frameRect; + frameRect.Set(100, 100, 300, 300); + PinwheelWindow* window = new PinwheelWindow(frameRect); + window->Show(); + } +}; + + +int +main() +{ + Pinwheel app; + app.Run(); + return 0; +} + diff --git a/src/tests/libs/alm/SimpleTest.cpp b/src/tests/libs/alm/SimpleTest.cpp deleted file mode 100644 index 266eb7ee08..0000000000 --- a/src/tests/libs/alm/SimpleTest.cpp +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright 2007-2008, Christof Lutteroth, lutteroth@cs.auckland.ac.nz - * Copyright 2007-2008, James Kim, jkim202@ec.auckland.ac.nz - * Distributed under the terms of the MIT License. - */ - -#include -#include -#include -#include - -#include "Area.h" -#include "BALMLayout.h" -#include "OperatorType.h" -#include "XTab.h" -#include "YTab.h" - - -using namespace BALM; - -class SimpleTestWindow : public BWindow { -public: - SimpleTestWindow(BRect frame) - : BWindow(frame, "SimpleTest", B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE) - { - fLS = new BALMLayout(); - SetLayout(fLS); - - button1 = new BButton("button1"); - SetBALMLayout(); - - Show(); - } - - - void - SetBALMLayout() - { - Area* a = fLS->AddArea(fLS->Left(), fLS->Top(), fLS->Right(), fLS->Bottom(), button1); - a->SetLeftInset(10); - fLS->Save("/boot/home/Desktop/test1_ls.txt"); - - -// fLS->AddConstraint(2.0, x1, -1.0, fLS->Right(), OperatorType(EQ), 0.0); -// fLS->AddConstraint(2.0, y1, -1.0, fLS->Bottom(), OperatorType(EQ), 0.0); - } - - -private: - BALMLayout* fLS; - BButton* button1; -}; - - -class SimpleTest : public BApplication { -public: - SimpleTest() - : BApplication("application/x-vnd.haiku.simpletest") - { - BRect frameRect; - frameRect.Set(100, 100, 392, 366); - SimpleTestWindow* theWindow = new SimpleTestWindow(frameRect); - } -}; - - -int -main() -{ - SimpleTest test; - test.Run(); - return 0; -} - diff --git a/src/tests/libs/alm/TableDemo.cpp b/src/tests/libs/alm/TableDemo.cpp new file mode 100644 index 0000000000..0b89bdfe26 --- /dev/null +++ b/src/tests/libs/alm/TableDemo.cpp @@ -0,0 +1,72 @@ +/* + * Copyright 2007-2008, Christof Lutteroth, lutteroth@cs.auckland.ac.nz + * Copyright 2007-2008, James Kim, jkim202@ec.auckland.ac.nz + * Distributed under the terms of the MIT License. + */ + +#include +#include +#include +#include + +#include "BALMLayout.h" + + +class TableDemoWindow : public BWindow { +public: + TableDemoWindow(BRect frame) + : BWindow(frame, "ALM Table Demo", B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE) + { + // create a new BALMLayout and use it for this window + BALMLayout* layout = new BALMLayout(); + SetLayout(layout); + + Column* c1 = layout->AddColumn(layout->Left(), layout->Right()); + Row* r1 = layout->AddRow(layout->Top(), NULL); + Row* r3 = layout->AddRow(NULL, layout->Bottom()); + r1->SetNext(r3); + Row* r2 = layout->AddRow(); + r2->InsertAfter(r1); + + BButton* b1 = new BButton("A1"); + Area* a1 = layout->AddArea(r1, c1, b1); + a1->SetHorizontalAlignment(B_ALIGN_LEFT); + a1->SetVerticalAlignment(B_ALIGN_TOP); + + BButton* b2 = new BButton("A2"); + Area* a2 = layout->AddArea(r2, c1, b2); + a2->SetHorizontalAlignment(B_ALIGN_HORIZONTAL_CENTER); + a2->SetVerticalAlignment(B_ALIGN_VERTICAL_CENTER); + + BButton* b3 = new BButton("A3"); + Area* a3 = layout->AddArea(r3, c1, b3); + a3->SetHorizontalAlignment(B_ALIGN_RIGHT); + a3->SetVerticalAlignment(B_ALIGN_BOTTOM); + + r2->HasSameHeightAs(r1); + r3->HasSameHeightAs(r1); + } +}; + + +class TableDemo : public BApplication { +public: + TableDemo() + : BApplication("application/x-vnd.haiku.table-demo") + { + BRect frameRect; + frameRect.Set(100, 100, 400, 400); + TableDemoWindow* window = new TableDemoWindow(frameRect); + window->Show(); + } +}; + + +int +main() +{ + TableDemo app; + app.Run(); + return 0; +} + diff --git a/src/tests/libs/alm/TableTest.cpp b/src/tests/libs/alm/TableTest.cpp deleted file mode 100644 index 9a35892461..0000000000 --- a/src/tests/libs/alm/TableTest.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright 2007-2008, Christof Lutteroth, lutteroth@cs.auckland.ac.nz - * Copyright 2007-2008, James Kim, jkim202@ec.auckland.ac.nz - * Distributed under the terms of the MIT License. - */ - -#include -#include -#include -#include - -#include "Area.h" -#include "Column.h" -#include "BALMLayout.h" -#include "Row.h" - - -using namespace BALM; - -class TableTestWindow : public BWindow { -public: - TableTestWindow(BRect frame) - : BWindow(frame, "TableTest", B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE) - { - BALMLayout* fLS = new BALMLayout(); - - SetLayout(fLS); - - fLS->SetPerformancePath("/boot/home/Desktop/table_test_performance.txt"); - - Column* c1 = fLS->AddColumn(fLS->Left(), fLS->Right()); - Row* r1 = fLS->AddRow(fLS->Top(), NULL); - Row* r3 = fLS->AddRow(NULL, fLS->Bottom()); - r1->SetNext(r3); - Row* r2 = fLS->AddRow(); - r2->InsertAfter(r1); - - BButton* b1 = new BButton("A1"); - Area* a1 = fLS->AddArea(r1, c1, b1); - a1->SetHAlignment(B_ALIGN_LEFT); - a1->SetVAlignment(B_ALIGN_TOP); - - BButton* b2 = new BButton("A2"); - Area* a2 = fLS->AddArea(r2, c1, b2); - a2->SetHAlignment(B_ALIGN_HORIZONTAL_CENTER); - a2->SetVAlignment(B_ALIGN_VERTICAL_CENTER); - - BButton* b3 = new BButton("A3"); - Area* a3 = fLS->AddArea(r3, c1, b3); - a3->SetHAlignment(B_ALIGN_RIGHT); - a3->SetVAlignment(B_ALIGN_BOTTOM); - - r2->HasSameHeightAs(r1); - r3->HasSameHeightAs(r1); - - Show(); - } -}; - - -class TableTest : public BApplication { -public: - TableTest() - : BApplication("application/x-vnd.haiku.table-test") - { - BRect frameRect; - frameRect.Set(100, 100, 400, 400); - TableTestWindow* theWindow = new TableTestWindow(frameRect); - } -}; - - -int -main() -{ - TableTest test; - test.Run(); - return 0; -} - diff --git a/src/tests/libs/alm/Test1.cpp b/src/tests/libs/alm/Test1.cpp deleted file mode 100644 index 3f23fbf7f9..0000000000 --- a/src/tests/libs/alm/Test1.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright 2007-2008, Christof Lutteroth, lutteroth@cs.auckland.ac.nz - * Copyright 2007-2008, James Kim, jkim202@ec.auckland.ac.nz - * Distributed under the terms of the MIT License. - */ - -#include -#include -#include -#include - -#include "Area.h" -#include "BALMLayout.h" -#include "OperatorType.h" -#include "XTab.h" -#include "YTab.h" - - -using namespace BALM; - -class Test1Window : public BWindow { -public: - Test1Window(BRect frame) - : BWindow(frame, "Test1", B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE) - { - fLS = new BALMLayout(); - - SetLayout(fLS); - - button1 = new BButton("button1"); - button2 = new BButton("button2"); - button3 = new BButton("button3"); - - fLS->SetPerformancePath("/boot/home/Desktop/test1_performance.txt"); - SetBALMLayout(); - - Show(); - } - - - void - SetBALMLayout() - { - XTab* x1 = fLS->AddXTab(); - YTab* y1 = fLS->AddYTab(); - - fLS->AddArea(fLS->Left(), fLS->Top(), x1, y1, button1); - fLS->AddArea(x1, fLS->Top(), fLS->Right(), y1, button2); - fLS->AddArea(fLS->Left(), y1, fLS->Right(), fLS->Bottom(), button3); - - - fLS->AddConstraint(2.0, x1, -1.0, fLS->Right(), OperatorType(EQ), 0.0); - fLS->AddConstraint(2.0, y1, -1.0, fLS->Bottom(), OperatorType(EQ), 0.0); - } - - -private: - BALMLayout* fLS; - BButton* button1; - BButton* button2; - BButton* button3; -}; - - -class Test1 : public BApplication { -public: - Test1() - : BApplication("application/x-vnd.haiku.test1") - { - BRect frameRect; - frameRect.Set(100, 100, 392, 366); - Test1Window* theWindow = new Test1Window(frameRect); - } -}; - - -int -main() -{ - Test1 test; - test.Run(); - return 0; -} - diff --git a/src/tests/libs/alm/Test2.cpp b/src/tests/libs/alm/Test2.cpp deleted file mode 100644 index fda4ce9067..0000000000 --- a/src/tests/libs/alm/Test2.cpp +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright 2007-2008, Christof Lutteroth, lutteroth@cs.auckland.ac.nz - * Copyright 2007-2008, James Kim, jkim202@ec.auckland.ac.nz - * Distributed under the terms of the MIT License. - */ - -#include -#include -#include -#include -#include -#include -#include - -#include "Area.h" -#include "BALMLayout.h" -#include "OperatorType.h" -#include "XTab.h" -#include "YTab.h" - - -using namespace BALM; - -class Test2Window : public BWindow { -public: - Test2Window(BRect frame) - : BWindow(frame, "Test2", B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE) - { - fLS = new BALMLayout(); - - SetLayout(fLS); - - button1 = new BButton("button1"); - button2 = new BButton("button2"); - button3 = new BButton("button3"); - button4 = new BButton("button4"); - button5 = new BButton("button5"); - button6 = new BButton("button6"); - checkedListBox1 = new BButton("checkedListBox1"); - textBox1 = new BButton("textBox1"); - textBox2 = new BButton("textBox2"); - richTextBox1 = new BButton("richTextBox1"); - //~ textBox1 = new BTextView(frame, "textBox1", NULL, NULL); - //~ textBox2 = new BTextView(frame, "textBox2", NULL, NULL); - //~ richTextBox1 = new BTextControl(NULL, "richTextBox1", NULL); - listView1 = new BButton("listView1"); - label1 = new BStringView(frame, "label1", "label1"); - label2 = new BStringView(frame, "label2", "label2"); - label3 = new BStringView(frame, "label3", "label3"); - - fLS->SetPerformancePath("/boot/home/Desktop/test2_performance.txt"); - SetBALMLayout(); - - Show(); - } - - - void - SetBALMLayout() - { - XTab* x1 = fLS->AddXTab(); - XTab* x2 = fLS->AddXTab(); - XTab* x3 = fLS->AddXTab(); - YTab* y1 = fLS->AddYTab(); - YTab* y2 = fLS->AddYTab(); - YTab* y3 = fLS->AddYTab(); - YTab* y4 = fLS->AddYTab(); - YTab* y5 = fLS->AddYTab(); - - fLS->AddArea(fLS->Left(), fLS->Top(), x1, y1, button1); - fLS->AddArea(x1, fLS->Top(), x2, y1, button2); - fLS->AddArea(fLS->Left(), y1, x1, y2, button3); - fLS->AddArea(x1, y1, x2, y2, button4); - fLS->AddArea(fLS->Left(), y2, x1, y3, button5); - fLS->AddArea(x1, y2, x2, y3, button6); - - fLS->AddConstraint(2.0, x1, -1.0, x2, OperatorType(EQ), 0.0); - fLS->AddConstraint(2.0, y1, -1.0, y2, OperatorType(EQ), 0.0); - fLS->AddConstraint(1.0, y1, 1.0, y2, -1.0, y3, OperatorType(EQ), 0.0); - - fLS->AddArea(fLS->Left(), y3, x2, y4, checkedListBox1); - fLS->AddArea(x2, fLS->Top(), fLS->Right(), y2, textBox1); - fLS->AddArea(fLS->Left(), y4, x3, y5, listView1); - fLS->AddArea(x3, y2, fLS->Right(), y5, textBox2); - - Area* richTextBox1Area = fLS->AddArea(x2, y2, x3, y4, richTextBox1); - richTextBox1Area->SetLeftInset(10); - richTextBox1Area->SetTopInset(10); - richTextBox1Area->SetRightInset(10); - richTextBox1Area->SetBottomInset(10); - - Area* label1Area = fLS->AddArea(fLS->Left(), y5, x2, fLS->Bottom(), label1); - label1Area->SetHAlignment(B_ALIGN_LEFT); - label1Area->SetTopInset(4); - label1Area->SetBottomInset(4); - - Area* label2Area = fLS->AddArea(x2, y5, x3, fLS->Bottom(), label2); - label2Area->SetHAlignment(B_ALIGN_HORIZONTAL_CENTER); - label2Area->SetTopInset(4); - label2Area->SetBottomInset(4); - - Area* label3Area = fLS->AddArea(x3, y5, fLS->Right(), fLS->Bottom(), label3); - label3Area->SetHAlignment(B_ALIGN_RIGHT); - label3Area->SetTopInset(4); - label3Area->SetBottomInset(4); - } - - -private: - BALMLayout* fLS; - BButton* button1; - BButton* button2; - BButton* button3; - BButton* button4; - BButton* button5; - BButton* button6; - BButton* checkedListBox1; - BButton* textBox1; - BButton* textBox2; - BButton* richTextBox1; - //~ BTextView* textBox1; - //~ BTextView* textBox2; - //~ BTextControl* richTextBox1; - BButton* listView1; - BStringView* label1; - BStringView* label2; - BStringView* label3; -}; - - -class Test2 : public BApplication { -public: - Test2() - : BApplication("application/x-vnd.haiku.test2") - { - BRect frameRect; - frameRect.Set(100, 100, 610, 456); - Test2Window* theWindow = new Test2Window(frameRect); - } -}; - - -int -main() -{ - Test2 test; - test.Run(); - return 0; -} - diff --git a/src/tests/libs/alm/TwoViews.cpp b/src/tests/libs/alm/TwoViews.cpp new file mode 100644 index 0000000000..a1e7e408c8 --- /dev/null +++ b/src/tests/libs/alm/TwoViews.cpp @@ -0,0 +1,68 @@ +#include +#include +#include +#include +#include + +#include "BALMLayout.h" + + +class TwoViewsWindow : public BWindow { +public: + TwoViewsWindow(BRect frame) + : BWindow(frame, "ALM Two Views", + B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE) + { + button1 = new BButton("View 1"); + textView1 = new BTextView("textView1"); + textView1->SetText("View 2"); + + // create a new BALMLayout and use it for this window + BALMLayout* layout = new BALMLayout(); + SetLayout(layout); + + // create an extra tab + XTab* x1 = layout->AddXTab(); + + Area* a1 = layout->AddArea( + layout->Left(), layout->Top(), + x1, layout->Bottom(), + button1); + Area* a2 = layout->AddArea( + x1, layout->Top(), + layout->Right(), layout->Bottom(), + textView1); + + // add a constraint: 2*x1 == right + // i.e. x1 is in the middle of the layout + layout->AddConstraint(2, x1, -1, layout->Right(), + OperatorType(EQ), 0); + } + +private: + BButton* button1; + BTextView* textView1; +}; + + +class TwoViews : public BApplication { +public: + TwoViews() + : BApplication("application/x-vnd.haiku.TwoViews") + { + BRect frameRect; + frameRect.Set(100, 100, 300, 300); + TwoViewsWindow* window = new TwoViewsWindow(frameRect); + window->Show(); + } +}; + + +int +main() +{ + TwoViews app; + app.Run(); + return 0; +} +