ModelPanel.h

#pragma once


#include "SelectEventArgs.h"
#include "ExpressionModel.h"


namespace Core
{
    ref class Model;
    ref class Draw;


    /// <summary>
    /// モデル パネル
    /// </summary>
    public ref class ModelPanel : public WeifenLuo::WinFormsUI::Docking::DockContent
    {
    // Construction --------------------------------------------------------
    public:
        ModelPanel( void );

    protected:
        ~ModelPanel();


    // Operation -----------------------------------------------------------
    public:
        void ChangeExpressionMode();

    protected:
        virtual void OnLoad( System::EventArgs^ e ) override;

    private:
        void InitializeComponent(void);

        void RotateViewpoint( System::Drawing::Point location );
        void TranslateViewpoint( System::Drawing::Point location );

        void SelecetObject( System::Drawing::Point location );


    // Event Handler -------------------------------------------------------
    private:
        void Redraw( System::Object^ sender, System::EventArgs^ e );

        System::Void PanelPaint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e);
        System::Void PanelResize(System::Object^ sender, System::EventArgs^ e);
        System::Void PanelMouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e);
        System::Void PanelMouseDoubleClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e);
        System::Void PanelMouseMove(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e);
        System::Void PanelMouseWheel(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e);


    // Event ---------------------------------------------------------------
    public:
        event SelectEventHandler^ Selected;     ///< 選択イベント


    // Attribute ===========================================================
    private:
        Model^ m_model; ///< モデル
        Draw^ m_draw;   ///< 描画

        System::Drawing::Point m_mousePosition;         ///< マウス位置


    // Property ------------------------------------------------------------
    public:
        /// モデル
        property Model^ Model
        {
            Core::Model^ get()
            {
                return m_model;
            }
        }

        /// 表示モード
        property ExpressionModel ExpressionMode
        {
            ExpressionModel get();
        }


        //
        // 以降は デザイナによって自動生成されたコード
        //


    private:
        System::ComponentModel::Container ^components;
        System::Windows::Forms::Panel^ m_drawPanel;


        /// @note
        /// ドッキングパネル上には、DirectXで直接の描画が出来ない。
        /// よってパネルを作成し、そこに描画するようにしている。

    };
}