2 * Copyright 2011, Clemens Zeidler <haiku@clemens-zeidler.de>
3 * Distributed under the terms of the MIT License.
10 #include <ALMLayout.h>
17 struct TabBase::BALMLayoutList
{
18 BALMLayoutList(BALMLayout
* _layout
, BALMLayoutList
* _next
= NULL
)
30 bool HasLayout(BALMLayout
* search
)
34 return next
? next
->HasLayout(search
) : false;
37 BALMLayoutList
* Remove(BALMLayout
* remove
)
39 if (layout
== remove
) {
40 BALMLayoutList
* _next
= next
;
45 next
= next
->Remove(remove
);
61 TabBase::TabBase(BMessage
* archive
)
63 BArchivable(BUnarchiver::PrepareArchive(archive
)),
66 BUnarchiver(archive
).Finish(B_OK
);
76 TabBase::IsInLayout(BALMLayout
* layout
)
78 return fLayouts
? fLayouts
->HasLayout(layout
) : false;
83 TabBase::AddedToLayout(BALMLayout
* layout
)
85 BALMLayoutList
* newHead
= new (nothrow
) BALMLayoutList(layout
, fLayouts
);
94 TabBase::LayoutLeaving(BALMLayout
* layout
)
96 fLayouts
= fLayouts
->Remove(layout
);
101 TabBase::IsSuitableFor(BALMLayout
* layout
)
103 return (fLayouts
->layout
->Solver() == layout
->Solver());
107 XTab::XTab(BALMLayout
* layout
)
109 Variable(layout
->Solver())
111 AddedToLayout(layout
);
115 XTab::XTab(BMessage
* archive
)
118 TabBase(BUnarchiver::PrepareArchive(archive
))
120 BUnarchiver(archive
).Finish(B_OK
);
126 TabBase::BALMLayoutList
* layouts
= fLayouts
;
128 layouts
->layout
->fXTabList
.RemoveItem(this);
129 layouts
= layouts
->next
;
136 XTab::Instantiate(BMessage
* archive
)
138 if (validate_instantiation(archive
, "BALM::XTab"))
139 return new XTab(archive
);
144 YTab::YTab(BALMLayout
* layout
)
146 Variable(layout
->Solver())
148 AddedToLayout(layout
);
152 YTab::YTab(BMessage
* archive
)
155 TabBase(BUnarchiver::PrepareArchive(archive
))
157 BUnarchiver(archive
).Finish(B_OK
);
163 TabBase::BALMLayoutList
* layouts
= fLayouts
;
165 layouts
->layout
->fYTabList
.RemoveItem(this);
166 layouts
= layouts
->next
;
173 YTab::Instantiate(BMessage
* archive
)
175 if (validate_instantiation(archive
, "BALM::YTab"))
176 return new YTab(archive
);