1/*
2 * Copyright 2006, Haiku.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Stephan A��mus <superstippi@gmx.de>
7 */
8
9#include "IconProperty.h"
10
11#include <new>
12#include <stdio.h>
13
14#include <Message.h>
15
16using std::nothrow;
17
18// constructor
19IconProperty::IconProperty(uint32 identifier,
20						   const uchar* icon,
21						   uint32 width, uint32 height,
22						   color_space format,
23						   BMessage* message)
24	: Property(identifier),
25	  fMessage(message),
26	  fIcon(icon),
27	  fWidth(width),
28	  fHeight(height),
29	  fFormat(format)
30{
31}
32
33// archive constructor
34IconProperty::IconProperty(const IconProperty& other)
35	: Property(other),
36	  fMessage(other.fMessage ? new BMessage(*other.fMessage) : NULL),
37	  fIcon(other.fIcon),
38	  fWidth(other.fWidth),
39	  fHeight(other.fHeight),
40	  fFormat(other.fFormat)
41{
42}
43
44// archive constructor
45IconProperty::IconProperty(BMessage* archive)
46	: Property(archive),
47	  fMessage(new BMessage())
48{
49	if (archive->FindMessage("message", fMessage) < B_OK) {
50		delete fMessage;
51		fMessage = NULL;
52	}
53}
54
55// destrucor
56IconProperty::~IconProperty()
57{
58	delete fMessage;
59}
60
61// Archive
62status_t
63IconProperty::Archive(BMessage* into, bool deep) const
64{
65	status_t status = Property::Archive(into, deep);
66
67	if (status >= B_OK && fMessage)
68		status = into->AddMessage("message", fMessage);
69
70	// finish off
71	if (status >= B_OK)
72		status = into->AddString("class", "IconProperty");
73
74	return status;
75}
76
77// Instantiate
78BArchivable*
79IconProperty::Instantiate(BMessage* archive)
80{
81	if (validate_instantiation(archive, "IconProperty"))
82		return new IconProperty(archive);
83	return NULL;
84}
85
86// #pragma mark -
87
88// Clone
89Property*
90IconProperty::Clone() const
91{
92	return new (nothrow) IconProperty(*this);
93}
94
95// SetValue
96bool
97IconProperty::SetValue(const char* str)
98{
99	return false;
100}
101
102// SetValue
103bool
104IconProperty::SetValue(const Property* other)
105{
106	const IconProperty* i = dynamic_cast<const IconProperty*>(other);
107	if (i) {
108		SetMessage(i->Message());
109		return true;
110	}
111	return false;
112}
113
114// GetValue
115void
116IconProperty::GetValue(BString& string)
117{
118	string << "dummy";
119}
120
121// InterpolateTo
122bool
123IconProperty::InterpolateTo(const Property* other, float scale)
124{
125	return false;
126}
127
128// #pragma mark -
129
130// SetMessage
131void
132IconProperty::SetMessage(const BMessage* message)
133{
134	if (message && fMessage) {
135		*fMessage = *message;
136	}
137}
138
139