164d80db6SStephan Aßmus/*
264d80db6SStephan Aßmus * Copyright 2006, Haiku.
364d80db6SStephan Aßmus * Distributed under the terms of the MIT License.
464d80db6SStephan Aßmus *
564d80db6SStephan Aßmus * Authors:
664d80db6SStephan Aßmus *		Stephan A��mus <superstippi@gmx.de>
764d80db6SStephan Aßmus */
864d80db6SStephan Aßmus
964d80db6SStephan Aßmus#include "IconProperty.h"
1064d80db6SStephan Aßmus
1164d80db6SStephan Aßmus#include <new>
120e1ba39fSStephan Aßmus#include <stdio.h>
1364d80db6SStephan Aßmus
1464d80db6SStephan Aßmus#include <Message.h>
1564d80db6SStephan Aßmus
1664d80db6SStephan Aßmususing std::nothrow;
1764d80db6SStephan Aßmus
1864d80db6SStephan Aßmus// constructor
1964d80db6SStephan AßmusIconProperty::IconProperty(uint32 identifier,
2064d80db6SStephan Aßmus						   const uchar* icon,
2164d80db6SStephan Aßmus						   uint32 width, uint32 height,
2264d80db6SStephan Aßmus						   color_space format,
2364d80db6SStephan Aßmus						   BMessage* message)
2464d80db6SStephan Aßmus	: Property(identifier),
2564d80db6SStephan Aßmus	  fMessage(message),
2664d80db6SStephan Aßmus	  fIcon(icon),
2764d80db6SStephan Aßmus	  fWidth(width),
2864d80db6SStephan Aßmus	  fHeight(height),
2964d80db6SStephan Aßmus	  fFormat(format)
3064d80db6SStephan Aßmus{
3164d80db6SStephan Aßmus}
3264d80db6SStephan Aßmus
3364d80db6SStephan Aßmus// archive constructor
3464d80db6SStephan AßmusIconProperty::IconProperty(const IconProperty& other)
3564d80db6SStephan Aßmus	: Property(other),
3664d80db6SStephan Aßmus	  fMessage(other.fMessage ? new BMessage(*other.fMessage) : NULL),
3764d80db6SStephan Aßmus	  fIcon(other.fIcon),
3864d80db6SStephan Aßmus	  fWidth(other.fWidth),
3964d80db6SStephan Aßmus	  fHeight(other.fHeight),
4064d80db6SStephan Aßmus	  fFormat(other.fFormat)
4164d80db6SStephan Aßmus{
4264d80db6SStephan Aßmus}
4364d80db6SStephan Aßmus
4464d80db6SStephan Aßmus// archive constructor
4564d80db6SStephan AßmusIconProperty::IconProperty(BMessage* archive)
4664d80db6SStephan Aßmus	: Property(archive),
4764d80db6SStephan Aßmus	  fMessage(new BMessage())
4864d80db6SStephan Aßmus{
4964d80db6SStephan Aßmus	if (archive->FindMessage("message", fMessage) < B_OK) {
5064d80db6SStephan Aßmus		delete fMessage;
5164d80db6SStephan Aßmus		fMessage = NULL;
5264d80db6SStephan Aßmus	}
5364d80db6SStephan Aßmus}
5464d80db6SStephan Aßmus
5564d80db6SStephan Aßmus// destrucor
5664d80db6SStephan AßmusIconProperty::~IconProperty()
5764d80db6SStephan Aßmus{
5864d80db6SStephan Aßmus	delete fMessage;
5964d80db6SStephan Aßmus}
6064d80db6SStephan Aßmus
6164d80db6SStephan Aßmus// Archive
6264d80db6SStephan Aßmusstatus_t
6364d80db6SStephan AßmusIconProperty::Archive(BMessage* into, bool deep) const
6464d80db6SStephan Aßmus{
6564d80db6SStephan Aßmus	status_t status = Property::Archive(into, deep);
6664d80db6SStephan Aßmus
6764d80db6SStephan Aßmus	if (status >= B_OK && fMessage)
6864d80db6SStephan Aßmus		status = into->AddMessage("message", fMessage);
6964d80db6SStephan Aßmus
7064d80db6SStephan Aßmus	// finish off
7164d80db6SStephan Aßmus	if (status >= B_OK)
7264d80db6SStephan Aßmus		status = into->AddString("class", "IconProperty");
7364d80db6SStephan Aßmus
7464d80db6SStephan Aßmus	return status;
7564d80db6SStephan Aßmus}
7664d80db6SStephan Aßmus
7764d80db6SStephan Aßmus// Instantiate
7864d80db6SStephan AßmusBArchivable*
7964d80db6SStephan AßmusIconProperty::Instantiate(BMessage* archive)
8064d80db6SStephan Aßmus{
8164d80db6SStephan Aßmus	if (validate_instantiation(archive, "IconProperty"))
8264d80db6SStephan Aßmus		return new IconProperty(archive);
8364d80db6SStephan Aßmus	return NULL;
8464d80db6SStephan Aßmus}
8564d80db6SStephan Aßmus
8664d80db6SStephan Aßmus// #pragma mark -
8764d80db6SStephan Aßmus
8864d80db6SStephan Aßmus// Clone
8964d80db6SStephan AßmusProperty*
9064d80db6SStephan AßmusIconProperty::Clone() const
9164d80db6SStephan Aßmus{
9264d80db6SStephan Aßmus	return new (nothrow) IconProperty(*this);
9364d80db6SStephan Aßmus}
9464d80db6SStephan Aßmus
9564d80db6SStephan Aßmus// SetValue
9664d80db6SStephan Aßmusbool
9764d80db6SStephan AßmusIconProperty::SetValue(const char* str)
9864d80db6SStephan Aßmus{
9964d80db6SStephan Aßmus	return false;
10064d80db6SStephan Aßmus}
10164d80db6SStephan Aßmus
10264d80db6SStephan Aßmus// SetValue
10364d80db6SStephan Aßmusbool
10464d80db6SStephan AßmusIconProperty::SetValue(const Property* other)
10564d80db6SStephan Aßmus{
10664d80db6SStephan Aßmus	const IconProperty* i = dynamic_cast<const IconProperty*>(other);
10764d80db6SStephan Aßmus	if (i) {
10864d80db6SStephan Aßmus		SetMessage(i->Message());
10964d80db6SStephan Aßmus		return true;
11064d80db6SStephan Aßmus	}
11164d80db6SStephan Aßmus	return false;
11264d80db6SStephan Aßmus}
11364d80db6SStephan Aßmus
11464d80db6SStephan Aßmus// GetValue
11564d80db6SStephan Aßmusvoid
11664d80db6SStephan AßmusIconProperty::GetValue(BString& string)
11764d80db6SStephan Aßmus{
11864d80db6SStephan Aßmus	string << "dummy";
11964d80db6SStephan Aßmus}
12064d80db6SStephan Aßmus
12164d80db6SStephan Aßmus// InterpolateTo
12264d80db6SStephan Aßmusbool
12364d80db6SStephan AßmusIconProperty::InterpolateTo(const Property* other, float scale)
12464d80db6SStephan Aßmus{
12564d80db6SStephan Aßmus	return false;
12664d80db6SStephan Aßmus}
12764d80db6SStephan Aßmus
12864d80db6SStephan Aßmus// #pragma mark -
12964d80db6SStephan Aßmus
13064d80db6SStephan Aßmus// SetMessage
13164d80db6SStephan Aßmusvoid
13264d80db6SStephan AßmusIconProperty::SetMessage(const BMessage* message)
13364d80db6SStephan Aßmus{
13464d80db6SStephan Aßmus	if (message && fMessage) {
13564d80db6SStephan Aßmus		*fMessage = *message;
13664d80db6SStephan Aßmus	}
13764d80db6SStephan Aßmus}
13864d80db6SStephan Aßmus
139