1a744b2c6SStephan Aßmus/*
2a744b2c6SStephan Aßmus * Copyright 2006, Haiku.
3a744b2c6SStephan Aßmus * Distributed under the terms of the MIT License.
4a744b2c6SStephan Aßmus *
5a744b2c6SStephan Aßmus * Authors:
6a744b2c6SStephan Aßmus *		Stephan A��mus <superstippi@gmx.de>
7a744b2c6SStephan Aßmus */
8a744b2c6SStephan Aßmus
9a744b2c6SStephan Aßmus#include "IconObject.h"
10a744b2c6SStephan Aßmus
110e1ba39fSStephan Aßmus#include <Message.h>
120e1ba39fSStephan Aßmus
13e2a31283SStephan Aßmus#include "CommonPropertyIDs.h"
14e2a31283SStephan Aßmus#include "Property.h"
15e2a31283SStephan Aßmus#include "PropertyObject.h"
16e2a31283SStephan Aßmus
17a744b2c6SStephan Aßmus// constructor
18e2a31283SStephan AßmusIconObject::IconObject(const char* name)
19a744b2c6SStephan Aßmus	: Observable(),
200cbb6c11SStephan Aßmus	  BReferenceable(),
21e2a31283SStephan Aßmus	  Selectable(),
22e2a31283SStephan Aßmus
23e2a31283SStephan Aßmus	  fName(name)
24e2a31283SStephan Aßmus{
25e2a31283SStephan Aßmus}
26e2a31283SStephan Aßmus
27e2a31283SStephan Aßmus// copy constructor
28e2a31283SStephan AßmusIconObject::IconObject(const IconObject& other)
29e2a31283SStephan Aßmus	: Observable(),
300cbb6c11SStephan Aßmus	  BReferenceable(),
31e2a31283SStephan Aßmus	  Selectable(),
32e2a31283SStephan Aßmus
33e2a31283SStephan Aßmus	  fName(other.fName)
34a744b2c6SStephan Aßmus{
35a744b2c6SStephan Aßmus}
36a744b2c6SStephan Aßmus
370e1ba39fSStephan Aßmus// archive constructor
380e1ba39fSStephan AßmusIconObject::IconObject(BMessage* archive)
390e1ba39fSStephan Aßmus	: Observable(),
400cbb6c11SStephan Aßmus	  BReferenceable(),
410e1ba39fSStephan Aßmus	  Selectable(),
420e1ba39fSStephan Aßmus
430e1ba39fSStephan Aßmus	  fName()
440e1ba39fSStephan Aßmus{
450e1ba39fSStephan Aßmus	// NOTE: uses IconObject version, not overridden
460e1ba39fSStephan Aßmus	Unarchive(archive);
470e1ba39fSStephan Aßmus}
480e1ba39fSStephan Aßmus
49a744b2c6SStephan Aßmus// destructor
50a744b2c6SStephan AßmusIconObject::~IconObject()
51a744b2c6SStephan Aßmus{
52a744b2c6SStephan Aßmus}
53a744b2c6SStephan Aßmus
54a744b2c6SStephan Aßmus// SelectedChanged
55a744b2c6SStephan Aßmusvoid
56a744b2c6SStephan AßmusIconObject::SelectedChanged()
57a744b2c6SStephan Aßmus{
58a744b2c6SStephan Aßmus	// simply pass on the event for now
59e2a31283SStephan Aßmus//	Notify();
60a744b2c6SStephan Aßmus}
61a744b2c6SStephan Aßmus
62a744b2c6SStephan Aßmus// #pragma mark -
63a744b2c6SStephan Aßmus
640e1ba39fSStephan Aßmus// Unarchive
650e1ba39fSStephan Aßmusstatus_t
660e1ba39fSStephan AßmusIconObject::Unarchive(const BMessage* archive)
670e1ba39fSStephan Aßmus{
680e1ba39fSStephan Aßmus	if (!archive)
690e1ba39fSStephan Aßmus		return B_BAD_VALUE;
700e1ba39fSStephan Aßmus
710e1ba39fSStephan Aßmus	const char* name;
720e1ba39fSStephan Aßmus	status_t ret = archive->FindString("name", &name);
730e1ba39fSStephan Aßmus
740e1ba39fSStephan Aßmus	if (ret == B_OK)
750e1ba39fSStephan Aßmus		fName = name;
760e1ba39fSStephan Aßmus
770e1ba39fSStephan Aßmus	return ret;
780e1ba39fSStephan Aßmus}
790e1ba39fSStephan Aßmus
800e1ba39fSStephan Aßmus// Archive
810e1ba39fSStephan Aßmusstatus_t
820e1ba39fSStephan AßmusIconObject::Archive(BMessage* into, bool deep) const
830e1ba39fSStephan Aßmus{
840e1ba39fSStephan Aßmus	if (!into)
850e1ba39fSStephan Aßmus		return B_BAD_VALUE;
860e1ba39fSStephan Aßmus
870e1ba39fSStephan Aßmus	return into->AddString("name", fName.String());
880e1ba39fSStephan Aßmus}
890e1ba39fSStephan Aßmus
90a744b2c6SStephan Aßmus// MakePropertyObject
91a744b2c6SStephan AßmusPropertyObject*
92a744b2c6SStephan AßmusIconObject::MakePropertyObject() const
93a744b2c6SStephan Aßmus{
94e2a31283SStephan Aßmus	PropertyObject* object = new PropertyObject();
95e2a31283SStephan Aßmus
96e2a31283SStephan Aßmus	object->AddProperty(new StringProperty(PROPERTY_NAME, fName.String()));
97e2a31283SStephan Aßmus
98e2a31283SStephan Aßmus	return object;
99a744b2c6SStephan Aßmus}
100a744b2c6SStephan Aßmus
101a744b2c6SStephan Aßmus// SetToPropertyObject
102a744b2c6SStephan Aßmusbool
103a744b2c6SStephan AßmusIconObject::SetToPropertyObject(const PropertyObject* object)
104a744b2c6SStephan Aßmus{
105e2a31283SStephan Aßmus	AutoNotificationSuspender _(this);
106e2a31283SStephan Aßmus
107e2a31283SStephan Aßmus	BString name;
108e2a31283SStephan Aßmus	if (object->GetValue(PROPERTY_NAME, name))
109e2a31283SStephan Aßmus		SetName(name.String());
110e2a31283SStephan Aßmus
111e2a31283SStephan Aßmus	return HasPendingNotifications();
112a744b2c6SStephan Aßmus}
113a744b2c6SStephan Aßmus
114e2a31283SStephan Aßmus// SetName
115e2a31283SStephan Aßmusvoid
116e2a31283SStephan AßmusIconObject::SetName(const char* name)
117e2a31283SStephan Aßmus{
118e2a31283SStephan Aßmus	if (fName == name)
119e2a31283SStephan Aßmus		return;
120e2a31283SStephan Aßmus
121e2a31283SStephan Aßmus	fName = name;
122e2a31283SStephan Aßmus	Notify();
123e2a31283SStephan Aßmus}
124