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 "SetPropertiesCommand.h"
10
11#include <stdio.h>
12
13#include <Catalog.h>
14#include <Locale.h>
15
16#include "CommonPropertyIDs.h"
17#include "IconObject.h"
18#include "Property.h"
19#include "PropertyObject.h"
20
21
22#undef B_TRANSLATION_CONTEXT
23#define B_TRANSLATION_CONTEXT "Icon-O-Matic-Properties"
24
25
26// constructor
27SetPropertiesCommand::SetPropertiesCommand(IconObject** objects,
28										   int32 objectCount,
29										   PropertyObject* previous,
30										   PropertyObject* current)
31	: Command(),
32	  fObjects(objects),
33	  fObjectCount(objectCount),
34
35	  fOldProperties(previous),
36	  fNewProperties(current)
37{
38}
39
40// destructor
41SetPropertiesCommand::~SetPropertiesCommand()
42{
43	delete[] fObjects;
44	delete fOldProperties;
45	delete fNewProperties;
46}
47
48// InitCheck
49status_t
50SetPropertiesCommand::InitCheck()
51{
52	return fObjects && fOldProperties && fNewProperties
53		   && fObjectCount > 0 && fOldProperties->CountProperties() > 0
54		   && fOldProperties->ContainsSameProperties(*fNewProperties) ?
55		   B_OK : B_NO_INIT;
56}
57
58// Perform
59status_t
60SetPropertiesCommand::Perform()
61{
62	for (int32 i = 0; i < fObjectCount; i++) {
63		if (fObjects[i])
64			fObjects[i]->SetToPropertyObject(fNewProperties);
65	}
66	return B_OK;
67}
68
69// Undo
70status_t
71SetPropertiesCommand::Undo()
72{
73	for (int32 i = 0; i < fObjectCount; i++) {
74		if (fObjects[i])
75			fObjects[i]->SetToPropertyObject(fOldProperties);
76	}
77	return B_OK;
78}
79
80// GetName
81void
82SetPropertiesCommand::GetName(BString& name)
83{
84	if (fOldProperties->CountProperties() > 1) {
85		if (fObjectCount > 1)
86			name << B_TRANSLATE("Multi-paste properties");
87		else
88			name << B_TRANSLATE("Paste properties");
89	} else {
90		BString property = name_for_id(
91			fOldProperties->PropertyAt(0)->Identifier());
92		if (fObjectCount > 1) {
93			name << B_TRANSLATE_COMMENT("Multi-set %property%",
94				"Don't translate %property%");
95		} else {
96			name << B_TRANSLATE_COMMENT("Set %property%",
97				"Don't translate %property%");
98		}
99		name.ReplaceFirst("%property%", property);
100	}
101}
102