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 "IconObject.h"
10
11#include <Message.h>
12
13#include "CommonPropertyIDs.h"
14#include "Property.h"
15#include "PropertyObject.h"
16
17// constructor
18IconObject::IconObject(const char* name)
19	: Observable(),
20	  BReferenceable(),
21	  Selectable(),
22
23	  fName(name)
24{
25}
26
27// copy constructor
28IconObject::IconObject(const IconObject& other)
29	: Observable(),
30	  BReferenceable(),
31	  Selectable(),
32
33	  fName(other.fName)
34{
35}
36
37// archive constructor
38IconObject::IconObject(BMessage* archive)
39	: Observable(),
40	  BReferenceable(),
41	  Selectable(),
42
43	  fName()
44{
45	// NOTE: uses IconObject version, not overridden
46	Unarchive(archive);
47}
48
49// destructor
50IconObject::~IconObject()
51{
52}
53
54// SelectedChanged
55void
56IconObject::SelectedChanged()
57{
58	// simply pass on the event for now
59//	Notify();
60}
61
62// #pragma mark -
63
64// Unarchive
65status_t
66IconObject::Unarchive(const BMessage* archive)
67{
68	if (!archive)
69		return B_BAD_VALUE;
70
71	const char* name;
72	status_t ret = archive->FindString("name", &name);
73
74	if (ret == B_OK)
75		fName = name;
76
77	return ret;
78}
79
80// Archive
81status_t
82IconObject::Archive(BMessage* into, bool deep) const
83{
84	if (!into)
85		return B_BAD_VALUE;
86
87	return into->AddString("name", fName.String());
88}
89
90// MakePropertyObject
91PropertyObject*
92IconObject::MakePropertyObject() const
93{
94	PropertyObject* object = new PropertyObject();
95
96	object->AddProperty(new StringProperty(PROPERTY_NAME, fName.String()));
97
98	return object;
99}
100
101// SetToPropertyObject
102bool
103IconObject::SetToPropertyObject(const PropertyObject* object)
104{
105	AutoNotificationSuspender _(this);
106
107	BString name;
108	if (object->GetValue(PROPERTY_NAME, name))
109		SetName(name.String());
110
111	return HasPendingNotifications();
112}
113
114// SetName
115void
116IconObject::SetName(const char* name)
117{
118	if (fName == name)
119		return;
120
121	fName = name;
122	Notify();
123}
124