xref: /haiku/src/apps/icon-o-matic/style/SetColorCommand.cpp (revision a4e4beafe528e4bf368158a1876fe78eea755941)
161b0e9e3SStephan Aßmus /*
261b0e9e3SStephan Aßmus  * Copyright 2006, Haiku.
361b0e9e3SStephan Aßmus  * Distributed under the terms of the MIT License.
461b0e9e3SStephan Aßmus  *
561b0e9e3SStephan Aßmus  * Authors:
661b0e9e3SStephan Aßmus  *		Stephan Aßmus <superstippi@gmx.de>
761b0e9e3SStephan Aßmus  */
861b0e9e3SStephan Aßmus 
961b0e9e3SStephan Aßmus #include "SetColorCommand.h"
1061b0e9e3SStephan Aßmus 
1161b0e9e3SStephan Aßmus #include <new>
1261b0e9e3SStephan Aßmus #include <stdio.h>
1361b0e9e3SStephan Aßmus 
14518852fcSAdrien Destugues #include <Catalog.h>
15518852fcSAdrien Destugues #include <Locale.h>
16518852fcSAdrien Destugues 
17991547efSStephan Aßmus #include "GradientTransformable.h"
1861b0e9e3SStephan Aßmus #include "Style.h"
1961b0e9e3SStephan Aßmus 
20518852fcSAdrien Destugues 
21546208a5SOliver Tappe #undef B_TRANSLATION_CONTEXT
22546208a5SOliver Tappe #define B_TRANSLATION_CONTEXT "Icon-O-Matic-SetColorCmd"
23518852fcSAdrien Destugues 
24518852fcSAdrien Destugues 
2561b0e9e3SStephan Aßmus using std::nothrow;
2661b0e9e3SStephan Aßmus 
2761b0e9e3SStephan Aßmus // constructor
SetColorCommand(Style * style,const rgb_color & color)2861b0e9e3SStephan Aßmus SetColorCommand::SetColorCommand(Style* style,
2961b0e9e3SStephan Aßmus 								 const rgb_color& color)
3061b0e9e3SStephan Aßmus 	: Command(),
3161b0e9e3SStephan Aßmus 	  fStyle(style),
3261b0e9e3SStephan Aßmus 	  fColor(color)
3361b0e9e3SStephan Aßmus {
3461b0e9e3SStephan Aßmus }
3561b0e9e3SStephan Aßmus 
3661b0e9e3SStephan Aßmus // destructor
~SetColorCommand()3761b0e9e3SStephan Aßmus SetColorCommand::~SetColorCommand()
3861b0e9e3SStephan Aßmus {
3961b0e9e3SStephan Aßmus }
4061b0e9e3SStephan Aßmus 
4161b0e9e3SStephan Aßmus // InitCheck
4261b0e9e3SStephan Aßmus status_t
InitCheck()4361b0e9e3SStephan Aßmus SetColorCommand::InitCheck()
4461b0e9e3SStephan Aßmus {
456e3b3b09SStephan Aßmus #ifdef __HAIKU__
466e3b3b09SStephan Aßmus 	return fStyle && fStyle->Color() != fColor ? B_OK : B_NO_INIT;
476e3b3b09SStephan Aßmus #else
48a8745d98SStephan Aßmus 	rgb_color color = fStyle->Color();
49a8745d98SStephan Aßmus 	return fStyle && *(uint32*)&color != *(uint32*)&fColor ?
500e1ba39fSStephan Aßmus 		B_OK : B_NO_INIT;
51463c8198SAxel Dörfler #endif
5261b0e9e3SStephan Aßmus }
5361b0e9e3SStephan Aßmus 
5461b0e9e3SStephan Aßmus // Perform
5561b0e9e3SStephan Aßmus status_t
Perform()5661b0e9e3SStephan Aßmus SetColorCommand::Perform()
5761b0e9e3SStephan Aßmus {
5861b0e9e3SStephan Aßmus 	// toggle the color
5961b0e9e3SStephan Aßmus 	rgb_color previous = fStyle->Color();
6061b0e9e3SStephan Aßmus 	fStyle->SetColor(fColor);
6161b0e9e3SStephan Aßmus 	fColor = previous;
6261b0e9e3SStephan Aßmus 
6361b0e9e3SStephan Aßmus 	return B_OK;
6461b0e9e3SStephan Aßmus }
6561b0e9e3SStephan Aßmus 
6661b0e9e3SStephan Aßmus // Undo
6761b0e9e3SStephan Aßmus status_t
Undo()6861b0e9e3SStephan Aßmus SetColorCommand::Undo()
6961b0e9e3SStephan Aßmus {
7061b0e9e3SStephan Aßmus 	return Perform();
7161b0e9e3SStephan Aßmus }
7261b0e9e3SStephan Aßmus 
7361b0e9e3SStephan Aßmus // GetName
7461b0e9e3SStephan Aßmus void
GetName(BString & name)7561b0e9e3SStephan Aßmus SetColorCommand::GetName(BString& name)
7661b0e9e3SStephan Aßmus {
77*a4e4beafSHumdinger 	name << B_TRANSLATE("Change color");
7861b0e9e3SStephan Aßmus }
7961b0e9e3SStephan Aßmus 
8061b0e9e3SStephan Aßmus // CombineWithNext
8161b0e9e3SStephan Aßmus bool
CombineWithNext(const Command * command)8261b0e9e3SStephan Aßmus SetColorCommand::CombineWithNext(const Command* command)
8361b0e9e3SStephan Aßmus {
8461b0e9e3SStephan Aßmus 	const SetColorCommand* next
8561b0e9e3SStephan Aßmus 		= dynamic_cast<const SetColorCommand*>(command);
8661b0e9e3SStephan Aßmus 
8761b0e9e3SStephan Aßmus 	if (next && next->fTimeStamp - fTimeStamp < 1000000) {
8861b0e9e3SStephan Aßmus 		fTimeStamp = next->fTimeStamp;
8961b0e9e3SStephan Aßmus 		// NOTE: next was already performed, but
9061b0e9e3SStephan Aßmus 		// when undoing, we want to use our
9161b0e9e3SStephan Aßmus 		// remembered color
9261b0e9e3SStephan Aßmus 		return true;
9361b0e9e3SStephan Aßmus 	}
9461b0e9e3SStephan Aßmus 	return false;
9561b0e9e3SStephan Aßmus }
9661b0e9e3SStephan Aßmus 
97