Added aqua_speed for rite geo 50 tryker
[ryzomcore.git] / nel / tools / 3d / object_viewer / ribbon_dlg.cpp
blobbde7684c81e0f77fba7ccbb39ee1d669194db7da
1 // NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
2 // Copyright (C) 2010 Winch Gate Property Limited
3 //
4 // This program is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU Affero General Public License as
6 // published by the Free Software Foundation, either version 3 of the
7 // License, or (at your option) any later version.
8 //
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU Affero General Public License for more details.
14 // You should have received a copy of the GNU Affero General Public License
15 // along with this program. If not, see <http://www.gnu.org/licenses/>.
17 // ribbon_dlg.cpp : implementation file
20 #include "std_afx.h"
21 #include "object_viewer.h"
22 #include "ribbon_dlg.h"
23 #include "editable_range.h"
25 #include "nel/3d/ps_particle2.h"
28 /////////////////////////////////////////////////////////////////////////////
29 // CRibbonDlg dialog
32 CRibbonDlg::CRibbonDlg(CParticleWorkspace::CNode *ownerNode, NL3D::CPSRibbonBase *ribbon, CWnd* pParent /* = NULL*/)
33 : CDialog(CRibbonDlg::IDD, pParent),
34 _Node(ownerNode),
35 _Ribbon(ribbon),
36 _RibbonLengthDlg(NULL)
38 nlassert(ribbon);
39 //{{AFX_DATA_INIT(CRibbonDlg)
40 m_UseHermitteInterpolation = _Ribbon->getInterpolationMode() == NL3D::CPSRibbonBase::Hermitte;
41 m_ConstantLength = _Ribbon->getRibbonMode() == NL3D::CPSRibbonBase::FixedSize;
42 //}}AFX_DATA_INIT
45 ///==================================
46 CRibbonDlg::~CRibbonDlg()
48 if (_RibbonLengthDlg)
50 _RibbonLengthDlg->DestroyWindow();
51 delete _RibbonLengthDlg;
53 if (_LODDegradationDlg)
55 _LODDegradationDlg->DestroyWindow();
56 delete _LODDegradationDlg;
60 ///==================================
61 void CRibbonDlg::init(CWnd *pParent, sint x, sint y)
63 Create(IDD_RIBBON_DLG, pParent);
64 RECT r;
65 GetClientRect(&r);
66 r.top += y; r.bottom += y;
67 r.right += x; r.left += x;
68 MoveWindow(&r);
69 ShowWindow(SW_SHOW);
73 ///==================================
74 void CRibbonDlg::DoDataExchange(CDataExchange* pDX)
76 CDialog::DoDataExchange(pDX);
77 //{{AFX_DATA_MAP(CRibbonDlg)
78 DDX_Check(pDX, IDC_USE_HERMITTE_INTERPOLATION, m_UseHermitteInterpolation);
79 DDX_Check(pDX, IDC_CONSTANT_LENGTH, m_ConstantLength);
80 //}}AFX_DATA_MAP
84 BEGIN_MESSAGE_MAP(CRibbonDlg, CDialog)
85 //{{AFX_MSG_MAP(CRibbonDlg)
86 ON_BN_CLICKED(IDC_USE_HERMITTE_INTERPOLATION, OnUseHermitteInterpolation)
87 ON_BN_CLICKED(IDC_CONSTANT_LENGTH, OnConstantLength)
88 ON_CBN_SELCHANGE(IDC_TRAIL_COORD_SYSTEM, OnSelchangeTrailCoordSystem)
89 //}}AFX_MSG_MAP
90 END_MESSAGE_MAP()
92 /////////////////////////////////////////////////////////////////////////////
93 // CRibbonDlg message handlers
95 ///=========================================================
96 void CRibbonDlg::OnUseHermitteInterpolation()
98 UpdateData();
99 _Ribbon->setInterpolationMode(m_UseHermitteInterpolation ?
100 NL3D::CPSRibbonBase::Hermitte :
101 NL3D::CPSRibbonBase::Linear);
102 updateModifiedFlag();
105 ///=========================================================
106 void CRibbonDlg::OnConstantLength()
108 UpdateData();
109 _Ribbon->setRibbonMode(m_ConstantLength ?
110 NL3D::CPSRibbonBase::FixedSize :
111 NL3D::CPSRibbonBase::VariableSize);
112 updateState();
113 updateModifiedFlag();
117 ///=========================================================
118 BOOL CRibbonDlg::OnInitDialog()
120 CDialog::OnInitDialog();
121 // Length
122 CEditableRangeFloat *erf = new CEditableRangeFloat("RIBBON_LENGTH", _Node, 0.1f, 10.1f);
123 _RibbonLengthDlg = erf;
124 _RibbonLengthWrapper.R = _Ribbon;
125 erf->setWrapper(&_RibbonLengthWrapper);
126 erf->enableLowerBound(0.f, true);
127 RECT r;
128 GetDlgItem(IDC_RIBBON_LENGTH)->GetWindowRect(&r);
129 ScreenToClient(&r);
130 erf->init(r.left, r.top, this);
133 // Lod degradation
134 erf = new CEditableRangeFloat("LOD_DEGRADATION", _Node, 0.f, 1.f);
135 _LODDegradationDlg = erf;
136 _LODDegradationWrapper.R = _Ribbon;
137 erf->setWrapper(&_LODDegradationWrapper);
138 erf->enableLowerBound(0.f, false);
139 erf->enableUpperBound(0.f, false);
140 GetDlgItem(IDC_LOD_DEGRADATION)->GetWindowRect(&r);
141 ScreenToClient(&r);
142 erf->init(r.left, r.top, this);
144 // Coord system
145 ((CComboBox *) GetDlgItem(IDC_TRAIL_COORD_SYSTEM))->SetCurSel((int) _Ribbon->getMatrixMode());
147 updateState();
148 return TRUE; // return TRUE unless you set the focus to a control
149 // EXCEPTION: OCX Property Pages should return FALSE
152 ///=========================================================
153 void CRibbonDlg::updateState()
155 _RibbonLengthDlg->EnableWindow(_Ribbon->getRibbonMode() == NL3D::CPSRibbonBase::FixedSize);
158 ///=========================================================
159 float CRibbonDlg::CRibbonLengthWrapper::get() const
161 return R->getRibbonLength();
164 ///=========================================================
165 void CRibbonDlg::CRibbonLengthWrapper::set(const float &v)
167 R->setRibbonLength(v);
171 ///=========================================================
172 float CRibbonDlg::CLODDegradationWrapper::get() const
174 return R->getLODDegradation();
177 ///=========================================================
178 void CRibbonDlg::CLODDegradationWrapper::set(const float &v)
180 R->setLODDegradation(v);
184 ///=========================================================
185 void CRibbonDlg::OnSelchangeTrailCoordSystem()
187 _Ribbon->setMatrixMode((NL3D::CPSRibbonBase::TMatrixMode) ((CComboBox *) GetDlgItem(IDC_TRAIL_COORD_SYSTEM))->GetCurSel());
188 _Node->setModified(true);