2 ===========================================================================
5 Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company.
7 This file is part of the Doom 3 GPL Source Code (?Doom 3 Source Code?).
9 Doom 3 Source Code is free software: you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation, either version 3 of the License, or
12 (at your option) any later version.
14 Doom 3 Source Code is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with Doom 3 Source Code. If not, see <http://www.gnu.org/licenses/>.
22 In addition, the Doom 3 Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 Source Code. If not, please request a copy in writing from id Software at the address below.
24 If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
26 ===========================================================================
29 #include "../../idlib/precompiled.h"
34 #include "PatchDialog.h"
39 static char THIS_FILE[] = __FILE__;
42 /////////////////////////////////////////////////////////////////////////////
43 // CPatchDialog dialog
45 CPatchDialog g_PatchDialog;
47 CPatchDialog::CPatchDialog(CWnd* pParent /*=NULL*/)
48 : CDialog(CPatchDialog::IDD, pParent)
50 //{{AFX_DATA_INIT(CPatchDialog)
67 void CPatchDialog::DoDataExchange(CDataExchange* pDX)
69 CDialog::DoDataExchange(pDX);
70 //{{AFX_DATA_MAP(CPatchDialog)
71 DDX_Control(pDX, IDC_SPIN_VSHIFT, m_wndVShift);
72 DDX_Control(pDX, IDC_SPIN_VSCALE, m_wndVScale);
73 DDX_Control(pDX, IDC_SPIN_ROTATE, m_wndRotate);
74 DDX_Control(pDX, IDC_SPIN_HSHIFT, m_wndHShift);
75 DDX_Control(pDX, IDC_SPIN_HSCALE, m_wndHScale);
76 DDX_Control(pDX, IDC_COMBO_TYPE, m_wndType);
77 DDX_Control(pDX, IDC_COMBO_ROW, m_wndRows);
78 DDX_Control(pDX, IDC_COMBO_COL, m_wndCols);
79 DDX_Text(pDX, IDC_EDIT_NAME, m_strName);
80 DDX_Text(pDX, IDC_EDIT_S, m_fS);
81 DDX_Text(pDX, IDC_EDIT_T, m_fT);
82 DDX_Text(pDX, IDC_EDIT_X, m_fX);
83 DDX_Text(pDX, IDC_EDIT_Y, m_fY);
84 DDX_Text(pDX, IDC_EDIT_Z, m_fZ);
85 DDX_Text(pDX, IDC_HSCALE, m_fHScale);
86 DDX_Text(pDX, IDC_HSHIFT, m_fHShift);
87 DDX_Text(pDX, IDC_ROTATE, m_fRotate);
88 DDX_Text(pDX, IDC_VSCALE, m_fVScale);
89 DDX_Text(pDX, IDC_VSHIFT, m_fVShift);
94 BEGIN_MESSAGE_MAP(CPatchDialog, CDialog)
95 //{{AFX_MSG_MAP(CPatchDialog)
96 ON_BN_CLICKED(IDC_BTN_PATCHDETAILS, OnBtnPatchdetails)
97 ON_BN_CLICKED(IDC_BTN_PATCHFIT, OnBtnPatchfit)
98 ON_BN_CLICKED(IDC_BTN_PATCHNATURAL, OnBtnPatchnatural)
99 ON_BN_CLICKED(IDC_BTN_PATCHRESET, OnBtnPatchreset)
100 ON_CBN_SELCHANGE(IDC_COMBO_COL, OnSelchangeComboCol)
101 ON_CBN_SELCHANGE(IDC_COMBO_ROW, OnSelchangeComboRow)
102 ON_CBN_SELCHANGE(IDC_COMBO_TYPE, OnSelchangeComboType)
103 ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN_HSCALE, OnDeltaposSpin)
104 ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN_ROTATE, OnDeltaposSpin)
105 ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN_VSCALE, OnDeltaposSpin)
106 ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN_VSHIFT, OnDeltaposSpin)
107 ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN_HSHIFT, OnDeltaposSpin)
109 ON_BN_CLICKED(IDC_APPLY, OnApply)
113 /////////////////////////////////////////////////////////////////////////////
114 // CPatchDialog message handlers
116 void CPatchDialog::OnBtnPatchdetails()
118 Patch_NaturalizeSelected(true);
119 Sys_UpdateWindows(W_ALL);
122 void CPatchDialog::OnBtnPatchfit()
124 Patch_FitTexturing();
125 Sys_UpdateWindows(W_ALL);
128 void CPatchDialog::OnBtnPatchnatural()
130 Patch_NaturalizeSelected();
131 Sys_UpdateWindows(W_ALL);
134 void CPatchDialog::OnBtnPatchreset()
136 //CTextureLayout dlg;
137 //if (dlg.DoModal() == IDOK)
139 // Patch_ResetTexturing(dlg.m_fX, dlg.m_fY);
141 //Sys_UpdateWindows(W_ALL);
144 void CPatchDialog::OnSelchangeComboCol()
149 void CPatchDialog::OnSelchangeComboRow()
154 void CPatchDialog::OnSelchangeComboType()
156 // TODO: Add your control notification handler code here
160 void CPatchDialog::OnOK()
167 void CPatchDialog::OnDeltaposSpin(NMHDR* pNMHDR, LRESULT* pResult)
169 NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
170 UpdateSpinners((pNMUpDown->iDelta > 0), pNMUpDown->hdr.idFrom);
174 BOOL CPatchDialog::OnInitDialog()
176 CDialog::OnInitDialog();
178 m_wndHScale.SetRange(0, 1000);
179 m_wndVScale.SetRange(0, 1000);
180 m_wndHShift.SetRange(0, 1000);
181 m_wndVShift.SetRange(0, 1000);
182 m_wndRotate.SetRange(0, 1000);
186 // TODO: Add extra initialization here
188 return TRUE; // return TRUE unless you set the focus to a control
189 // EXCEPTION: OCX Property Pages should return FALSE
194 void CPatchDialog::GetPatchInfo()
196 m_Patch = SinglePatchSelected();
201 m_wndRows.ResetContent();
202 for (i = 0; i < m_Patch->height; i++)
205 m_wndRows.AddString(str);
207 m_wndRows.SetCurSel(0);
208 m_wndCols.ResetContent();
209 for (i = 0; i < m_Patch->width; i++)
212 m_wndCols.AddString(str);
214 m_wndCols.SetCurSel(0);
219 void CPatchDialog::SetPatchInfo()
224 void DoPatchInspector()
226 if (g_PatchDialog.GetSafeHwnd() == NULL)
228 g_PatchDialog.Create(IDD_DIALOG_PATCH);
230 LONG lSize = sizeof(rct);
231 if (LoadRegistryInfo("Radiant::PatchWindow", &rct, &lSize))
233 g_PatchDialog.SetWindowPos(NULL, rct.left, rct.top, 0,0, SWP_NOSIZE);
236 g_PatchDialog.ShowWindow(SW_SHOW);
237 g_PatchDialog.GetPatchInfo();
240 void UpdatePatchInspector()
242 if (g_PatchDialog.GetSafeHwnd() != NULL)
244 g_PatchDialog.UpdateInfo();
249 void CPatchDialog::OnDestroy()
255 SaveRegistryInfo("Radiant::PatchWindow", &rct, sizeof(rct));
257 CDialog::OnDestroy();
260 void CPatchDialog::UpdateRowColInfo()
262 m_fX = m_fY = m_fZ = m_fS = m_fT = 0.0;
266 int r = m_wndRows.GetCurSel();
267 int c = m_wndCols.GetCurSel();
268 if (r >= 0 && r < m_Patch->height && c >= 0 && c < m_Patch->width)
270 m_fX = m_Patch->ctrl(c,r).xyz[0];
271 m_fY = m_Patch->ctrl(c,r).xyz[1];
272 m_fZ = m_Patch->ctrl(c,r).xyz[2];
273 m_fS = m_Patch->ctrl(c,r).st[0];
274 m_fT = m_Patch->ctrl(c,r).st[1];
280 void CPatchDialog::UpdateInfo()
285 void CPatchDialog::OnApply()
290 int r = m_wndRows.GetCurSel();
291 int c = m_wndCols.GetCurSel();
292 if (r >= 0 && r < m_Patch->height && c >= 0 && c < m_Patch->width)
294 m_Patch->ctrl(c,r).xyz[0] = m_fX;
295 m_Patch->ctrl(c,r).xyz[1] = m_fY;
296 m_Patch->ctrl(c,r).xyz[2] = m_fZ;
297 m_Patch->ctrl(c,r).st[0] = m_fS;
298 m_Patch->ctrl(c,r).st[1] = m_fT;
299 Patch_MakeDirty(m_Patch);
300 Sys_UpdateWindows(W_ALL);
305 void CPatchDialog::UpdateSpinners(bool bUp, int nID)
310 td.scale[0] = td.scale[1] = 0.0;
311 td.shift[0] = td.shift[1] = 0.0;
317 if (nID == IDC_SPIN_ROTATE)
320 td.rotate = m_fRotate;
322 td.rotate = -m_fRotate;
324 else if (nID == IDC_SPIN_HSCALE)
327 td.scale[0] = 1 - m_fHScale;
329 td.scale[0] = 1 + m_fHScale;
331 else if (nID == IDC_SPIN_VSCALE)
334 td.scale[1] = 1 - m_fVScale;
336 td.scale[1] = 1 + m_fVScale;
339 else if (nID == IDC_SPIN_HSHIFT)
342 td.shift[0] = m_fHShift;
344 td.shift[0] = -m_fHShift;
346 else if (nID == IDC_SPIN_VSHIFT)
349 td.shift[1] = m_fVShift;
351 td.shift[1] = -m_fVShift;
354 Patch_SetTextureInfo(&td);
355 Sys_UpdateWindows(W_CAMERA);