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