root/src/apps/icon-o-matic/transformable/TransformCommand.h
/*
 * Copyright 2006, Haiku.
 * Distributed under the terms of the MIT License.
 *
 * Authors:
 *              Stephan Aßmus <superstippi@gmx.de>
 */

#ifndef TRANSFORM_COMMAND_H
#define TRANSFORM_COMMAND_H

#include <Point.h>
#include <String.h>

#include "Command.h"

class TransformCommand : public Command {
 public:
                                                                TransformCommand(BPoint pivot,
                                                                                                 BPoint translation,
                                                                                                 double rotation,
                                                                                                 double xScale,
                                                                                                 double yScale,

                                                                                                 const char* actionName);

                                                                TransformCommand(const char* actionName);

        virtual                                         ~TransformCommand();

        // Command interface    
        virtual status_t                        InitCheck();

        virtual status_t                        Perform();
        virtual status_t                        Undo();
        virtual status_t                        Redo();

        virtual void                            GetName(BString& name);

        // TransformCommand
                        void                            SetNewTransformation(BPoint pivot,
                                                                                                         BPoint translation,
                                                                                                         double rotation,
                                                                                                         double xScale,
                                                                                                         double yScale);

                        void                            SetNewTranslation(BPoint translation);
                                // convinience for "nudging"

                        void                            SetName(const char* actionName);

 protected:
        virtual status_t                        _SetTransformation(BPoint pivot,
                                                                                                   BPoint translation,
                                                                                                   double rotation,
                                                                                                   double xScale,
                                                                                                   double yScale) const = 0;

                        BPoint                          fOldPivot;
                        BPoint                          fOldTranslation;
                        double                          fOldRotation;
                        double                          fOldXScale;
                        double                          fOldYScale;

                        BPoint                          fNewPivot;
                        BPoint                          fNewTranslation;
                        double                          fNewRotation;
                        double                          fNewXScale;
                        double                          fNewYScale;

                        BString                         fName;
};

#endif // TRANSFORM_COMMAND_H