/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
// Original file Copyright Crytek GMBH or its affiliates, used under license.

#pragma once

#include <QWidget>

#include "../../EditorCommon/ManipScene.h"

class QLabel;
class QLineEdit;
class QComboBox;

namespace CharacterTool
{
    class TransformPanel
        : public QWidget
    {
        Q_OBJECT
    public:
        TransformPanel();

        void SetTransform(const QuatT& transform);
        const QuatT& Transform() const{ return m_transform; }

        void SetMode(Manip::ETransformationMode mode);
        void SetEnabled(bool enabled);

        void SetSpace(Manip::ETransformationSpace space);
        Manip::ETransformationSpace Space() const{ return m_space; }

    signals:
        void SignalSpaceChanged();
        void SignalChanged();
        void SignalChangeFinished();

    protected slots:
        void OnSpaceChanged();
        void OnEditXChanged();
        void OnEditXEditingFinished();
        void OnEditYChanged();
        void OnEditYEditingFinished();
        void OnEditZChanged();
        void OnEditZEditingFinished();

    private:
        bool ReadEdit(int axis);
        void WriteEdits();

        Manip::ETransformationSpace m_space;
        Manip::ETransformationMode m_mode;
        QComboBox* m_comboSpace;
        QLabel* m_labelX;
        QLabel* m_labelY;
        QLabel* m_labelZ;
        QLineEdit* m_editX;
        QLineEdit* m_editY;
        QLineEdit* m_editZ;
        QuatT m_transform;
        Ang3 m_rotationAngles;
    };
}