1 /*
2 ===========================================================================
3 
4 Doom 3 GPL Source Code
5 Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company.
6 
7 This file is part of the Doom 3 GPL Source Code ("Doom 3 Source Code").
8 
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.
13 
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.
18 
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/>.
21 
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.
23 
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.
25 
26 ===========================================================================
27 */
28 
29 #include "tools/edit_gui_common.h"
30 
31 
32 #include "qe3.h"
33 #include "Radiant.h"
34 #include "GLWidget.h"
35 #include "ConsoleDlg.h"
36 #include "InspectorDialog.h"
37 #include "TabsDlg.h"
38 
39 CInspectorDialog *g_Inspectors = NULL;
40 // CInspectorDialog dialog
41 
InspectorsDockingCallback(bool docked,int ID,CWnd * wnd)42 void InspectorsDockingCallback ( bool docked , int ID , CWnd* wnd )
43 {
44 	g_Inspectors->SetDockedTabs( docked , ID );
45 }
46 
47 
48 // CInspectorDialog dialog
49 //IMPLEMENT_DYNAMIC(CInspectorDialog,CTabsDlg)
CInspectorDialog(CWnd * pParent)50 CInspectorDialog::CInspectorDialog(CWnd* pParent /*=NULL*/)
51 	: CTabsDlg(CInspectorDialog::IDD, pParent)
52 {
53 	initialized = false;
54 	dockedTabs = W_CONSOLE | W_TEXTURE | W_MEDIA;
55 }
56 
~CInspectorDialog()57 CInspectorDialog::~CInspectorDialog()
58 {
59 }
60 
61 
BEGIN_MESSAGE_MAP(CInspectorDialog,CTabsDlg)62 BEGIN_MESSAGE_MAP(CInspectorDialog, CTabsDlg)
63 	ON_NOTIFY(TCN_SELCHANGE, IDC_TAB_INSPECTOR, OnTcnSelchange )
64 	ON_WM_SIZE()
65 	ON_WM_DESTROY()
66 	ON_WM_CLOSE()
67 END_MESSAGE_MAP()
68 
69 
70 // CInspectorDialog message handlers
71 
72 BOOL CInspectorDialog::OnInitDialog()
73 {
74 	CTabsDlg::OnInitDialog();
75 
76 	ASSERT ( m_Tabs.GetSafeHwnd() );
77 
78 	LoadWindowPlacement(GetSafeHwnd() , "radiant_InspectorsWindow" );
79 
80 	consoleWnd.Create(IDD_DIALOG_CONSOLE, this);
81 	texWnd.Create(TEXTURE_WINDOW_CLASS, "", QE3_SPLITTER_STYLE, CRect(5, 5, 10, 10), this, 1299);
82 	mediaDlg.Create(IDD_DIALOG_TEXTURELIST, this);
83 	entityDlg.Create(IDD_DIALOG_ENTITY, this);
84 
85 	dockedTabs = GetCvarInt ( "radiant_InspectorDockedDialogs" , W_CONSOLE | W_TEXTURE | W_MEDIA );
86 
87 	AddDockedWindow ( &consoleWnd , W_CONSOLE , 1 , "Console"	 , (dockedTabs & W_CONSOLE ) != 0 , InspectorsDockingCallback );
88 	AddDockedWindow ( &texWnd	  , W_TEXTURE , 2 , "Textures"   , (dockedTabs & W_TEXTURE ) != 0 , InspectorsDockingCallback );
89 	AddDockedWindow ( &mediaDlg	  , W_MEDIA	  , 3 , "Media"	     , (dockedTabs & W_MEDIA   ) != 0 , InspectorsDockingCallback );
90 	AddDockedWindow ( &entityDlg  , W_ENTITY  , 4 , "Entity"	 , (dockedTabs & W_ENTITY  ) != 0 , InspectorsDockingCallback );
91 
92 	SetMode(W_CONSOLE);
93 	initialized = true;
94 
95 	return TRUE;  // return TRUE unless you set the focus to a control
96 	// EXCEPTION: OCX Property Pages should return FALSE
97 }
98 
SetMode(int mode,bool updateTabs)99 void CInspectorDialog::SetMode(int mode, bool updateTabs) {
100 	FocusWindow ( mode );
101 }
102 
UpdateEntitySel(eclass_t * ent)103 void CInspectorDialog::UpdateEntitySel(eclass_t *ent) {
104 	entityDlg.UpdateEntitySel(ent);
105 }
106 
FillClassList()107 void CInspectorDialog::FillClassList() {
108 	entityDlg.AddClassNames();
109 }
110 
UpdateSelectedEntity()111 void CInspectorDialog::UpdateSelectedEntity() {
112 	entityDlg.SetKeyValPairs();
113 }
114 
GetSelectAllCriteria(idStr & key,idStr & val)115 bool CInspectorDialog::GetSelectAllCriteria(idStr &key, idStr &val) {
116 	CString k, v;
117 	entityDlg.editKey.GetWindowText(k);
118 	entityDlg.editVal.GetWindowText(v);
119 	key = k;
120 	val = v;
121 	return true;
122 }
123 
124 
125 
OnSize(UINT nType,int cx,int cy)126 void CInspectorDialog::OnSize(UINT nType, int cx, int cy)
127 {
128 	CTabsDlg::OnSize(nType, cx, cy);
129 
130 	DockedWindowInfo* info = NULL;
131 	POSITION pos;
132 	WORD wID;
133 
134 	if (!initialized) {
135 		return;
136 	}
137 
138 	CRect rect;
139 	GetClientRect(rect);
140 
141 	CRect tabRect;
142 	m_Tabs.GetWindowRect(tabRect);
143 	// retain vert size but size 4 in from edges and 4 up from bottom
144 	tabRect.left = 4;
145 	tabRect.right = rect.Width() - 4;
146 	tabRect.top = rect.Height() - tabRect.Height() - 4;
147 	tabRect.bottom = rect.Height() - 4;
148 	// adjust rect for children size
149 	rect.bottom -= 5 + tabRect.Height();
150 
151 	m_Tabs.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), 0);
152 
153 	for( pos = m_Windows.GetStartPosition(); pos != NULL ; )
154 	{
155 		m_Windows.GetNextAssoc( pos, wID, (void*&)info );
156 
157 		if ( (info->m_State == DockedWindowInfo::DOCKED) ) {
158 			info->m_Window->SetWindowPos(NULL, rect.left, rect.top, rect.Width(), rect.Height(), 0);
159 		}
160 
161 	}
162 }
163 
OnDestroy()164 void CInspectorDialog::OnDestroy()
165 {
166 	::SaveWindowPlacement(GetSafeHwnd() , "radiant_InspectorsWindow" );
167 	SetCvarInt("radiant_InspectorDockedDialogs" , dockedTabs );
168 
169 	CTabsDlg::OnDestroy();
170 }
171 
OnClose()172 void CInspectorDialog::OnClose()
173 {
174 	CTabsDlg::OnClose();
175 }
176 
PreTranslateMessage(MSG * pMsg)177 BOOL CInspectorDialog::PreTranslateMessage(MSG* pMsg)
178 {
179 	// TODO: Add your specialized code here and/or call the base class
180 	if ( pMsg->message == WM_KEYDOWN || pMsg->message == WM_KEYUP) {
181 		g_pParentWnd->PostMessage(pMsg->message, pMsg->wParam, pMsg->lParam);
182 	}
183 	return CTabsDlg::PreTranslateMessage(pMsg);
184 }
185 
SetDockedTabs(bool docked,int ID)186 void CInspectorDialog::SetDockedTabs ( bool docked , int ID )
187 {
188 	if ( docked ) {
189 		dockedTabs |= ID;
190 	}
191 	else {
192 		dockedTabs &= ~ID;
193 	}
194 }
195 
AssignModel()196 void CInspectorDialog::AssignModel ()
197 {
198 	entityDlg.AssignModel();
199 }
200