1 // NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
2 // Copyright (C) 2010 Winch Gate Property Limited
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.
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
21 #include "object_viewer.h"
22 #include "ribbon_dlg.h"
23 #include "editable_range.h"
25 #include "nel/3d/ps_particle2.h"
28 /////////////////////////////////////////////////////////////////////////////
32 CRibbonDlg::CRibbonDlg(CParticleWorkspace::CNode
*ownerNode
, NL3D::CPSRibbonBase
*ribbon
, CWnd
* pParent
/* = NULL*/)
33 : CDialog(CRibbonDlg::IDD
, pParent
),
36 _RibbonLengthDlg(NULL
)
39 //{{AFX_DATA_INIT(CRibbonDlg)
40 m_UseHermitteInterpolation
= _Ribbon
->getInterpolationMode() == NL3D::CPSRibbonBase::Hermitte
;
41 m_ConstantLength
= _Ribbon
->getRibbonMode() == NL3D::CPSRibbonBase::FixedSize
;
45 ///==================================
46 CRibbonDlg::~CRibbonDlg()
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
);
66 r
.top
+= y
; r
.bottom
+= y
;
67 r
.right
+= x
; r
.left
+= x
;
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
);
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
)
92 /////////////////////////////////////////////////////////////////////////////
93 // CRibbonDlg message handlers
95 ///=========================================================
96 void CRibbonDlg::OnUseHermitteInterpolation()
99 _Ribbon
->setInterpolationMode(m_UseHermitteInterpolation
?
100 NL3D::CPSRibbonBase::Hermitte
:
101 NL3D::CPSRibbonBase::Linear
);
102 updateModifiedFlag();
105 ///=========================================================
106 void CRibbonDlg::OnConstantLength()
109 _Ribbon
->setRibbonMode(m_ConstantLength
?
110 NL3D::CPSRibbonBase::FixedSize
:
111 NL3D::CPSRibbonBase::VariableSize
);
113 updateModifiedFlag();
117 ///=========================================================
118 BOOL
CRibbonDlg::OnInitDialog()
120 CDialog::OnInitDialog();
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);
128 GetDlgItem(IDC_RIBBON_LENGTH
)->GetWindowRect(&r
);
130 erf
->init(r
.left
, r
.top
, this);
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
);
142 erf
->init(r
.left
, r
.top
, this);
145 ((CComboBox
*) GetDlgItem(IDC_TRAIL_COORD_SYSTEM
))->SetCurSel((int) _Ribbon
->getMatrixMode());
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);