1 /* 2 * Copyright 2010, Haiku, Inc. 3 * Copyright 2006, Ingo Weinhold <bonefish@cs.tu-berlin.de>. 4 * All rights reserved. Distributed under the terms of the MIT License. 5 */ 6 7 8 #include <AbstractLayoutItem.h> 9 10 #include <LayoutUtils.h> 11 #include <Message.h> 12 13 14 namespace { 15 const char* const kSizesField = "BAbstractLayoutItem:sizes"; 16 // kSizesField == {min, max, preferred} 17 const char* const kAlignmentField = "BAbstractLayoutItem:alignment"; 18 } 19 20 21 BAbstractLayoutItem::BAbstractLayoutItem() 22 : 23 fMinSize(), 24 fMaxSize(), 25 fPreferredSize(), 26 fAlignment() 27 { 28 } 29 30 31 BAbstractLayoutItem::BAbstractLayoutItem(BMessage* from) 32 : 33 BLayoutItem(from), 34 fMinSize(), 35 fMaxSize(), 36 fPreferredSize(), 37 fAlignment() 38 { 39 from->FindSize(kSizesField, 0, &fMinSize); 40 from->FindSize(kSizesField, 1, &fMaxSize); 41 from->FindSize(kSizesField, 2, &fPreferredSize); 42 from->FindAlignment(kAlignmentField, &fAlignment); 43 } 44 45 46 BAbstractLayoutItem::~BAbstractLayoutItem() 47 { 48 } 49 50 51 BSize 52 BAbstractLayoutItem::MinSize() 53 { 54 return BLayoutUtils::ComposeSize(fMinSize, BaseMinSize()); 55 } 56 57 58 BSize 59 BAbstractLayoutItem::MaxSize() 60 { 61 return BLayoutUtils::ComposeSize(fMaxSize, BaseMaxSize()); 62 } 63 64 65 BSize 66 BAbstractLayoutItem::PreferredSize() 67 { 68 return BLayoutUtils::ComposeSize(fMaxSize, BasePreferredSize()); 69 } 70 71 72 BAlignment 73 BAbstractLayoutItem::Alignment() 74 { 75 return BLayoutUtils::ComposeAlignment(fAlignment, BaseAlignment()); 76 } 77 78 79 void 80 BAbstractLayoutItem::SetExplicitMinSize(BSize size) 81 { 82 fMinSize = size; 83 } 84 85 86 void 87 BAbstractLayoutItem::SetExplicitMaxSize(BSize size) 88 { 89 fMaxSize = size; 90 } 91 92 93 void 94 BAbstractLayoutItem::SetExplicitPreferredSize(BSize size) 95 { 96 fPreferredSize = size; 97 } 98 99 100 void 101 BAbstractLayoutItem::SetExplicitAlignment(BAlignment alignment) 102 { 103 fAlignment = alignment; 104 } 105 106 107 BSize 108 BAbstractLayoutItem::BaseMinSize() 109 { 110 return BSize(0, 0); 111 } 112 113 114 BSize 115 BAbstractLayoutItem::BaseMaxSize() 116 { 117 return BSize(B_SIZE_UNLIMITED, B_SIZE_UNLIMITED); 118 } 119 120 121 BSize 122 BAbstractLayoutItem::BasePreferredSize() 123 { 124 return BSize(0, 0); 125 } 126 127 128 BAlignment 129 BAbstractLayoutItem::BaseAlignment() 130 { 131 return BAlignment(B_ALIGN_HORIZONTAL_CENTER, B_ALIGN_VERTICAL_CENTER); 132 } 133 134 135 status_t 136 BAbstractLayoutItem::Archive(BMessage* into, bool deep) const 137 { 138 BArchiver archiver(into); 139 status_t err = BLayoutItem::Archive(into, deep); 140 141 if (err == B_OK) 142 err = into->AddSize(kSizesField, fMinSize); 143 144 if (err == B_OK) 145 err = into->AddSize(kSizesField, fMaxSize); 146 147 if (err == B_OK) 148 err = into->AddSize(kSizesField, fPreferredSize); 149 150 if (err == B_OK) 151 err = into->AddAlignment(kAlignmentField, fAlignment); 152 153 return archiver.Finish(err); 154 } 155 156 157 status_t 158 BAbstractLayoutItem::AllUnarchived(const BMessage* archive) 159 { 160 return BLayoutItem::AllUnarchived(archive); 161 } 162 163 164 status_t 165 BAbstractLayoutItem::AllArchived(BMessage* archive) const 166 { 167 return BLayoutItem::AllArchived(archive); 168 } 169 170 171 void 172 BAbstractLayoutItem::LayoutInvalidated(bool children) 173 { 174 BLayoutItem::LayoutInvalidated(children); 175 } 176 177 178 void 179 BAbstractLayoutItem::AttachedToLayout() 180 { 181 BLayoutItem::AttachedToLayout(); 182 } 183 184 185 void 186 BAbstractLayoutItem::DetachedFromLayout(BLayout* layout) 187 { 188 BLayoutItem::DetachedFromLayout(layout); 189 } 190 191 192 void 193 BAbstractLayoutItem::AncestorVisibilityChanged(bool shown) 194 { 195 BLayoutItem::AncestorVisibilityChanged(shown); 196 } 197 198 199 status_t 200 BAbstractLayoutItem::Perform(perform_code d, void* arg) 201 { 202 return BLayoutItem::Perform(d, arg); 203 } 204 205 206 void BAbstractLayoutItem::_ReservedAbstractLayoutItem1() {} 207 void BAbstractLayoutItem::_ReservedAbstractLayoutItem2() {} 208 void BAbstractLayoutItem::_ReservedAbstractLayoutItem3() {} 209 void BAbstractLayoutItem::_ReservedAbstractLayoutItem4() {} 210 void BAbstractLayoutItem::_ReservedAbstractLayoutItem5() {} 211 void BAbstractLayoutItem::_ReservedAbstractLayoutItem6() {} 212 void BAbstractLayoutItem::_ReservedAbstractLayoutItem7() {} 213 void BAbstractLayoutItem::_ReservedAbstractLayoutItem8() {} 214 void BAbstractLayoutItem::_ReservedAbstractLayoutItem9() {} 215 void BAbstractLayoutItem::_ReservedAbstractLayoutItem10() {} 216 217