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ßmusSetColorCommand::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ßmusSetColorCommand::~SetColorCommand() 3861b0e9e3SStephan Aßmus { 3961b0e9e3SStephan Aßmus } 4061b0e9e3SStephan Aßmus 4161b0e9e3SStephan Aßmus // InitCheck 4261b0e9e3SStephan Aßmus status_t InitCheck()4361b0e9e3SStephan AßmusSetColorCommand::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ßmusSetColorCommand::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ßmusSetColorCommand::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ßmusSetColorCommand::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ßmusSetColorCommand::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