00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "stdafx.h"
00026 #include "Radiant.h"
00027 #include "qe3.h"
00028 #include "ZWnd.h"
00029 #include "CamWnd.h"
00030 #include "TexWnd.h"
00031 #include "EditWnd.h"
00032 #include "entityw.h"
00033 #include "PrefsDlg.h"
00034 #include "MapInfo.h"
00035 #include "MainFrm.h"
00036 #include "RotateDlg.h"
00037 #include "EntityListDlg.h"
00038 #include "ScriptDlg.h"
00039 #include "NewProjDlg.h"
00040 #include "CommandsDlg.h"
00041 #include "ScaleDialog.h"
00042 #include "FindTextureDlg.h"
00043 #include "SurfaceDlg.h"
00044 #include "shlobj.h"
00045 #include "DialogTextures.h"
00046 #include "PatchDensityDlg.h"
00047 #include "DialogThick.h"
00048 #include "PatchDialog.h"
00049 #include "Undo.h"
00050 #include "NameDlg.h"
00051 #include "../libs/pakstuff.h"
00052 #include "splines/splines.h"
00053 #include "dlgcamera.h"
00054
00055 #ifdef _DEBUG
00056 #define new DEBUG_NEW
00057 #undef THIS_FILE
00058 static char THIS_FILE[] = __FILE__;
00059 #endif
00060
00061
00062
00063 CString g_strAppPath;
00064 CEdit* g_pEdit = NULL;
00065 CMainFrame* g_pParentWnd = NULL;
00066 CPrefsDlg g_Preferences;
00067 CPrefsDlg& g_PrefsDlg = g_Preferences;
00068 int g_nUpdateBits = 0;
00069 bool g_bScreenUpdates = true;
00070
00071
00072
00073
00074 CString g_strProject;
00075
00076
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091 #define SPEED_MOVE 32
00092 #define SPEED_TURN 22.5
00093
00094
00095 SCommandInfo g_Commands[] =
00096 {
00097 {"ToggleOutlineDraw", 'J', 0x00, ID_SELECTION_NOOUTLINE},
00098 {"CSGMerge", 'U', 0x04, ID_SELECTION_CSGMERGE},
00099 {"CSGSubtract", 'U', 0x01, ID_SELECTION_CSGSUBTRACT},
00100 {"ViewGroups", 'G', 0x00, ID_VIEW_GROUPS},
00101 {"HideSelected", 'H', 0x00, ID_VIEW_HIDESHOW_HIDESELECTED},
00102 {"ShowHidden", 'H', 0x01, ID_VIEW_HIDESHOW_SHOWHIDDEN},
00103 {"BendMode", 'B', 0x00, ID_PATCH_BEND},
00104 {"FitFace", 'B', 0x04, ID_FITFACE},
00105 {"FitBrush", 'B', 0x01, ID_FITBRUSH},
00106 {"FreezePatchVertices", 'F', 0x00, ID_CURVE_FREEZE},
00107 {"UnFreezePatchVertices", 'F', 0x04, ID_CURVE_UNFREEZE},
00108 {"UnFreezeAllPatchVertices", 'F', 0x05, ID_CURVE_UNFREEZEALL},
00109 {"ViewTextures", 'T', 0, ID_VIEW_TEXTURE},
00110 {"ThickenPatch", 'T', 0x04, ID_CURVE_THICKEN},
00111 {"MakeOverlayPatch", 'Y', 0, ID_CURVE_OVERLAY_SET},
00112 {"ClearPatchOverlays", 'Y', 0x02, ID_CURVE_OVERLAY_CLEAR},
00113 {"SurfaceInspector", 'S', 0, ID_TEXTURES_INSPECTOR},
00114 {"PatchInspector", 'S', 0x01, ID_PATCH_INSPECTOR},
00115 {"ToggleShowPatches", 'P', 0x05, ID_CURVE_CYCLECAP},
00116 {"ToggleShowPatches", 'P', 0x04, ID_VIEW_SHOWCURVES},
00117 {"RedisperseRows", 'E', 0x04, ID_CURVE_REDISPERSE_ROWS},
00118 {"RedisperseCols", 'E', 0x05, ID_CURVE_REDISPERSE_COLS},
00119 {"InvertCurveTextureX", 'I', 0x05, ID_CURVE_NEGATIVETEXTUREY},
00120 {"InvertCurveTextureY", 'I', 0x01, ID_CURVE_NEGATIVETEXTUREX},
00121 {"InvertCurve", 'I', 0x04, ID_CURVE_NEGATIVE},
00122 {"IncPatchColumn", VK_ADD, 0x05, ID_CURVE_INSERTCOLUMN},
00123 {"IncPatchRow", VK_ADD, 0x04, ID_CURVE_INSERTROW},
00124 {"DecPatchColumn", VK_SUBTRACT, 0x05, ID_CURVE_DELETECOLUMN},
00125 {"DecPatchRow", VK_SUBTRACT, 0x04, ID_CURVE_DELETEROW},
00126 {"Patch TAB", VK_TAB, 0x00, ID_PATCH_TAB},
00127 {"Patch TAB", VK_TAB, 0x01, ID_PATCH_TAB},
00128 {"SelectNudgeDown", VK_DOWN, 0x02, ID_SELECTION_SELECT_NUDGEDOWN},
00129 {"EntityColor",'K', 0, ID_MISC_SELECTENTITYCOLOR},
00130 {"CameraForward", VK_UP, 0, ID_CAMERA_FORWARD},
00131 {"CameraBack", VK_DOWN, 0, ID_CAMERA_BACK},
00132 {"CameraLeft", VK_LEFT, 0, ID_CAMERA_LEFT},
00133 {"CameraRight", VK_RIGHT, 0, ID_CAMERA_RIGHT},
00134 {"CameraUp", 'D', 0, ID_CAMERA_UP},
00135 {"CameraDown", 'C', 0, ID_CAMERA_DOWN},
00136 {"CameraAngleUp", 'A', 0, ID_CAMERA_ANGLEUP},
00137 {"CameraAngleDown", 'Z', 0, ID_CAMERA_ANGLEDOWN},
00138 {"CameraStrafeRight", VK_PERIOD, 0, ID_CAMERA_STRAFERIGHT},
00139 {"CameraStrafeLeft", VK_COMMA, 0, ID_CAMERA_STRAFELEFT},
00140 {"ToggleGrid", '0', 0, ID_GRID_TOGGLE},
00141 {"SetGrid1", '1', 0, ID_GRID_1},
00142 {"SetGrid2", '2', 0, ID_GRID_2},
00143 {"SetGrid4", '3', 0, ID_GRID_4},
00144 {"SetGrid8", '4', 0, ID_GRID_8},
00145 {"SetGrid16", '5', 0, ID_GRID_16},
00146 {"SetGrid32", '6', 0, ID_GRID_32},
00147 {"SetGrid64", '7', 0, ID_GRID_64},
00148 {"DragEdges", 'E', 0, ID_SELECTION_DRAGEDGES},
00149 {"DragVertices", 'V', 0, ID_SELECTION_DRAGVERTECIES},
00150 {"ViewEntityInfo", 'N', 0, ID_VIEW_ENTITY},
00151 {"ViewConsole", 'O', 0, ID_VIEW_CONSOLE},
00152 {"CloneSelection", VK_SPACE, 0, ID_SELECTION_CLONE},
00153 {"DeleteSelection", VK_BACK, 0, ID_SELECTION_DELETE},
00154 {"UnSelectSelection", VK_ESCAPE, 0, ID_SELECTION_DESELECT},
00155 {"CenterView", VK_END, 0, ID_VIEW_CENTER},
00156 {"ZoomOut", VK_INSERT, 0, ID_VIEW_ZOOMOUT},
00157 {"ZoomIn", VK_DELETE, 0, ID_VIEW_ZOOMIN},
00158 {"UpFloor", VK_PRIOR, 0, ID_VIEW_UPFLOOR},
00159 {"DownFloor", VK_NEXT, 0, ID_VIEW_DOWNFLOOR},
00160 {"ToggleClipper", 'X', 0, ID_VIEW_CLIPPER},
00161 {"ToggleCrosshairs", 'X', 0x01, ID_VIEW_CROSSHAIR},
00162 {"TogTexLock", 'T', 0x01, ID_TOGGLE_LOCK},
00163 {"TogTexRotLock", 'R', 0x01, ID_TOGGLE_ROTATELOCK},
00164 {"ToggleRealtime", 'R', 0x04, ID_VIEW_CAMERAUPDATE},
00165 {"RaiseLowerTerrain", 'T', 0x06, ID_TERRAIN_RAISELOWERTERRAIN},
00166 {"EntityList", 'L', 0, ID_EDIT_ENTITYINFO},
00167 {"Preferences", 'P', 0, ID_PREFS},
00168 {"ToggleCamera", 'C', 0x05, ID_TOGGLECAMERA},
00169 {"ToggleConsole", 'O', 0, ID_TOGGLECONSOLE},
00170 {"ToggleView", 'V', 0x05, ID_TOGGLEVIEW},
00171 {"ToggleZ", 'Z', 0x05, ID_TOGGLEZ},
00172 {"ConnectSelection", 'K', 0x04, ID_SELECTION_CONNECT},
00173 {"Brush3Sided", '3', 0x04, ID_BRUSH_3SIDED},
00174 {"Brush4Sided", '4', 0x04, ID_BRUSH_4SIDED},
00175 {"Brush5Sided", '5', 0x04, ID_BRUSH_5SIDED},
00176 {"Brush6Sided", '6', 0x04, ID_BRUSH_6SIDED},
00177 {"Brush7Sided", '7', 0x04, ID_BRUSH_7SIDED},
00178 {"Brush8Sided", '8', 0x04, ID_BRUSH_8SIDED},
00179 {"Brush9Sided", '9', 0x04, ID_BRUSH_9SIDED},
00180 {"ShowDetail", 'D', 0x04, ID_VIEW_SHOWDETAIL},
00181 {"MakeDetail", 'M', 0x05, ID_CURVE_MATRIX_TRANSPOSE},
00182 {"MakeDetail", 'M', 0x04, ID_SELECTION_MAKE_DETAIL},
00183 {"MapInfo", 'M', 0, ID_EDIT_MAPINFO},
00184 {"NextLeakSpot", 'K', 0x05, ID_MISC_NEXTLEAKSPOT},
00185 {"PrevLeakSpot", 'L', 0x05, ID_MISC_PREVIOUSLEAKSPOT},
00186 {"FileOpen", 'O', 0x04, ID_FILE_OPEN},
00187 {"FileSave", 'S', 0x04, ID_FILE_SAVE},
00188 {"Exit", 'X', 0x04, ID_FILE_EXIT},
00189 {"NextView", VK_TAB, 0x04, ID_VIEW_NEXTVIEW},
00190 {"ClipSelected", VK_RETURN, 0x00, ID_CLIP_SELECTED},
00191 {"SplitSelected", VK_RETURN, 0x01, ID_SPLIT_SELECTED},
00192 {"FlipClip", VK_RETURN, 0x04, ID_FLIP_CLIP},
00193 {"MouseRotate", 'R', 0x00, ID_SELECT_MOUSEROTATE},
00194 {"Copy", 'C', 0x04, ID_EDIT_COPYBRUSH},
00195 {"Paste", 'V', 0x04, ID_EDIT_PASTEBRUSH},
00196 {"Undo", 'Z', 0x04, ID_EDIT_UNDO},
00197 {"Redo", 'Y', 0x04, ID_EDIT_REDO},
00198 {"ZZoomOut", VK_INSERT, 0x04, ID_VIEW_ZZOOMOUT},
00199 {"ZZoomIn", VK_DELETE, 0x04, ID_VIEW_ZZOOMIN},
00200 {"TexDecrement", VK_SUBTRACT, 0x01, ID_SELECTION_TEXTURE_DEC},
00201 {"TexIncrement", VK_ADD, 0x01, ID_SELECTION_TEXTURE_INC},
00202 {"TextureFit", '5', 0x01, ID_SELECTION_TEXTURE_FIT},
00203 {"TexRotateClock", VK_NEXT, 0x01, ID_SELECTION_TEXTURE_ROTATECLOCK},
00204 {"TexRotateCounter", VK_PRIOR, 0x01, ID_SELECTION_TEXTURE_ROTATECOUNTER},
00205 {"TexScaleUp", VK_UP, 0x04, ID_SELECTION_TEXTURE_SCALEUP},
00206 {"TexScaleDown", VK_DOWN, 0x04, ID_SELECTION_TEXTURE_SCALEDOWN},
00207 {"TexShiftLeft", VK_LEFT, 0x01, ID_SELECTION_TEXTURE_SHIFTLEFT},
00208 {"TexShiftRight", VK_RIGHT, 0x01, ID_SELECTION_TEXTURE_SHIFTRIGHT},
00209 {"TexShiftUp", VK_UP, 0x01, ID_SELECTION_TEXTURE_SHIFTUP},
00210 {"TexShiftDown", VK_DOWN, 0x01, ID_SELECTION_TEXTURE_SHIFTDOWN},
00211 {"GridDown", 219, 0x00, ID_GRID_PREV},
00212 {"GridUp", 221, 0x00, ID_GRID_NEXT},
00213 {"TexScaleLeft", VK_LEFT, 0x04, ID_SELECTION_TEXTURE_SCALELEFT},
00214 {"TexScaleRight", VK_RIGHT, 0x04, ID_SELECTION_TEXTURE_SCALERIGHT},
00215 {"CubicClipZoomOut", 219, 0x04, ID_VIEW_CUBEOUT},
00216 {"CubicClipZoomIn", 221, 0x04, ID_VIEW_CUBEIN},
00217 {"ToggleCubicClip", 220, 0x04, ID_VIEW_CUBICCLIPPING},
00218
00219 {"MoveSelectionDOWN", VK_SUBTRACT, 0x00, ID_SELECTION_MOVEDOWN},
00220 {"MoveSelectionUP", VK_ADD, 0x00, ID_SELECTION_MOVEUP},
00221 {"DumpSelectedBrush", 'D', 0x01, ID_SELECTION_PRINT},
00222 {"ToggleSizePaint", 'Q', 0x08, ID_SELECTION_TOGGLESIZEPAINT},
00223 {"SelectNudgeLeft", VK_LEFT, 0x02, ID_SELECTION_SELECT_NUDGELEFT},
00224 {"SelectNudgeRight", VK_RIGHT, 0x02, ID_SELECTION_SELECT_NUDGERIGHT},
00225 {"SelectNudgeUp", VK_UP, 0x02, ID_SELECTION_SELECT_NUDGEUP},
00226 {"CycleCapTexturePatch", 'N', 0x05, ID_CURVE_CYCLECAP},
00227 {"NaturalizePatch", 'N', 0x04, ID_PATCH_NATURALIZE},
00228 {"SnapPatchToGrid", 'G', 0x04, ID_SELECT_SNAPTOGRID},
00229 {"ShowAllTextures", 'A', 0x04, ID_TEXTURES_SHOWALL},
00230 {"SelectAllOfType", 'A', 0x01, ID_SELECT_ALL},
00231 {"CapCurrentCurve", 'C', 0x01, ID_CURVE_CAP},
00232 {"MakeStructural", 'S', 0x05, ID_SELECTION_MAKE_STRUCTURAL}
00233
00234 };
00235
00236 int g_nCommandCount = sizeof(g_Commands) / sizeof(SCommandInfo);
00237
00238 SKeyInfo g_Keys[] =
00239 {
00240 {"Space", VK_SPACE},
00241 {"Backspace", VK_BACK},
00242 {"Escape", VK_ESCAPE},
00243 {"End", VK_END},
00244 {"Insert", VK_INSERT},
00245 {"Delete", VK_DELETE},
00246 {"PageUp", VK_PRIOR},
00247 {"PageDown", VK_NEXT},
00248 {"Up", VK_UP},
00249 {"Down", VK_DOWN},
00250 {"Left", VK_LEFT},
00251 {"Right", VK_RIGHT},
00252 {"F1", VK_F1},
00253 {"F2", VK_F2},
00254 {"F3", VK_F3},
00255 {"F4", VK_F4},
00256 {"F5", VK_F5},
00257 {"F6", VK_F6},
00258 {"F7", VK_F7},
00259 {"F8", VK_F8},
00260 {"F9", VK_F9},
00261 {"F10", VK_F10},
00262 {"F11", VK_F11},
00263 {"F12", VK_F12},
00264 {"Tab", VK_TAB},
00265 {"Return", VK_RETURN},
00266 {"Comma", VK_COMMA},
00267 {"Period", VK_PERIOD},
00268 {"Plus", VK_ADD},
00269 {"Multiply", VK_MULTIPLY},
00270 {"Subtract", VK_SUBTRACT},
00271 {"NumPad0", VK_NUMPAD0},
00272 {"NumPad1", VK_NUMPAD1},
00273 {"NumPad2", VK_NUMPAD2},
00274 {"NumPad3", VK_NUMPAD3},
00275 {"NumPad4", VK_NUMPAD4},
00276 {"NumPad5", VK_NUMPAD5},
00277 {"NumPad6", VK_NUMPAD6},
00278 {"NumPad7", VK_NUMPAD7},
00279 {"NumPad8", VK_NUMPAD8},
00280 {"NumPad9", VK_NUMPAD9},
00281 {"[", 219},
00282 {"]", 221},
00283 {"\\", 220}
00284 };
00285
00286 int g_nKeyCount = sizeof(g_Keys) / sizeof(SKeyInfo);
00287
00288 const int CMD_TEXTUREWAD_END = CMD_TEXTUREWAD + 127;
00289 const int CMD_BSPCOMMAND_END = CMD_BSPCOMMAND + 127;
00290 const int IDMRU_END = IDMRU+9;
00291
00292 const int g_msgBSPDone = RegisterWindowMessage("_BSPDone");
00293 const int g_msgBSPStatus = RegisterWindowMessage("_BSPStatus");
00294
00295 IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd)
00296
00297 BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
00298
00299 ON_WM_PARENTNOTIFY()
00300 ON_WM_CREATE()
00301 ON_WM_TIMER()
00302 ON_WM_DESTROY()
00303 ON_WM_CLOSE()
00304 ON_WM_KEYDOWN()
00305 ON_WM_SIZE()
00306 ON_COMMAND(ID_VIEW_CAMERATOGGLE, ToggleCamera)
00307 ON_COMMAND(ID_FILE_CLOSE, OnFileClose)
00308 ON_COMMAND(ID_FILE_EXIT, OnFileExit)
00309 ON_COMMAND(ID_FILE_LOADPROJECT, OnFileLoadproject)
00310 ON_COMMAND(ID_FILE_NEW, OnFileNew)
00311 ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
00312 ON_COMMAND(ID_FILE_POINTFILE, OnFilePointfile)
00313 ON_COMMAND(ID_FILE_PRINT, OnFilePrint)
00314 ON_COMMAND(ID_FILE_PRINT_PREVIEW, OnFilePrintPreview)
00315 ON_COMMAND(ID_FILE_SAVE, OnFileSave)
00316 ON_COMMAND(ID_FILE_SAVEAS, OnFileSaveas)
00317 ON_COMMAND(ID_VIEW_100, OnView100)
00318 ON_COMMAND(ID_VIEW_CENTER, OnViewCenter)
00319 ON_COMMAND(ID_VIEW_CONSOLE, OnViewConsole)
00320 ON_COMMAND(ID_VIEW_DOWNFLOOR, OnViewDownfloor)
00321 ON_COMMAND(ID_VIEW_ENTITY, OnViewEntity)
00322 ON_COMMAND(ID_VIEW_FRONT, OnViewFront)
00323 ON_COMMAND(ID_VIEW_SHOWBLOCKS, OnViewShowblocks)
00324 ON_COMMAND(ID_VIEW_SHOWCLIP, OnViewShowclip)
00325 ON_COMMAND(ID_VIEW_SHOWCOORDINATES, OnViewShowcoordinates)
00326 ON_COMMAND(ID_VIEW_SHOWDETAIL, OnViewShowdetail)
00327 ON_COMMAND(ID_VIEW_SHOWENT, OnViewShowent)
00328 ON_COMMAND(ID_VIEW_SHOWLIGHTS, OnViewShowlights)
00329 ON_COMMAND(ID_VIEW_SHOWNAMES, OnViewShownames)
00330 ON_COMMAND(ID_VIEW_SHOWPATH, OnViewShowpath)
00331 ON_COMMAND(ID_VIEW_SHOWWATER, OnViewShowwater)
00332 ON_COMMAND(ID_VIEW_SHOWWORLD, OnViewShowworld)
00333 ON_COMMAND(ID_VIEW_TEXTURE, OnViewTexture)
00334 ON_COMMAND(ID_VIEW_UPFLOOR, OnViewUpfloor)
00335 ON_COMMAND(ID_VIEW_XY, OnViewXy)
00336 ON_COMMAND(ID_VIEW_Z100, OnViewZ100)
00337 ON_COMMAND(ID_VIEW_ZOOMIN, OnViewZoomin)
00338 ON_COMMAND(ID_VIEW_ZOOMOUT, OnViewZoomout)
00339 ON_COMMAND(ID_VIEW_ZZOOMIN, OnViewZzoomin)
00340 ON_COMMAND(ID_VIEW_ZZOOMOUT, OnViewZzoomout)
00341 ON_COMMAND(ID_VIEW_SIDE, OnViewSide)
00342 ON_COMMAND(ID_TEXTURES_SHOWINUSE, OnTexturesShowinuse)
00343 ON_COMMAND(ID_TEXTURES_INSPECTOR, OnTexturesInspector)
00344 ON_COMMAND(ID_MISC_BENCHMARK, OnMiscBenchmark)
00345 ON_COMMAND(ID_MISC_FINDBRUSH, OnMiscFindbrush)
00346 ON_COMMAND(ID_MISC_GAMMA, OnMiscGamma)
00347 ON_COMMAND(ID_MISC_NEXTLEAKSPOT, OnMiscNextleakspot)
00348 ON_COMMAND(ID_MISC_PREVIOUSLEAKSPOT, OnMiscPreviousleakspot)
00349 ON_COMMAND(ID_MISC_PRINTXY, OnMiscPrintxy)
00350 ON_COMMAND(ID_MISC_SELECTENTITYCOLOR, OnMiscSelectentitycolor)
00351 ON_COMMAND(ID_TEXTUREBK, OnTexturebk)
00352 ON_COMMAND(ID_COLORS_MAJOR, OnColorsMajor)
00353 ON_COMMAND(ID_COLORS_MINOR, OnColorsMinor)
00354 ON_COMMAND(ID_COLORS_XYBK, OnColorsXybk)
00355 ON_COMMAND(ID_BRUSH_3SIDED, OnBrush3sided)
00356 ON_COMMAND(ID_BRUSH_4SIDED, OnBrush4sided)
00357 ON_COMMAND(ID_BRUSH_5SIDED, OnBrush5sided)
00358 ON_COMMAND(ID_BRUSH_6SIDED, OnBrush6sided)
00359 ON_COMMAND(ID_BRUSH_7SIDED, OnBrush7sided)
00360 ON_COMMAND(ID_BRUSH_8SIDED, OnBrush8sided)
00361 ON_COMMAND(ID_BRUSH_9SIDED, OnBrush9sided)
00362 ON_COMMAND(ID_BRUSH_ARBITRARYSIDED, OnBrushArbitrarysided)
00363 ON_COMMAND(ID_BRUSH_FLIPX, OnBrushFlipx)
00364 ON_COMMAND(ID_BRUSH_FLIPY, OnBrushFlipy)
00365 ON_COMMAND(ID_BRUSH_FLIPZ, OnBrushFlipz)
00366 ON_COMMAND(ID_BRUSH_ROTATEX, OnBrushRotatex)
00367 ON_COMMAND(ID_BRUSH_ROTATEY, OnBrushRotatey)
00368 ON_COMMAND(ID_BRUSH_ROTATEZ, OnBrushRotatez)
00369 ON_COMMAND(ID_REGION_OFF, OnRegionOff)
00370 ON_COMMAND(ID_REGION_SETBRUSH, OnRegionSetbrush)
00371 ON_COMMAND(ID_REGION_SETSELECTION, OnRegionSetselection)
00372 ON_COMMAND(ID_REGION_SETTALLBRUSH, OnRegionSettallbrush)
00373 ON_COMMAND(ID_REGION_SETXY, OnRegionSetxy)
00374 ON_COMMAND(ID_SELECTION_ARBITRARYROTATION, OnSelectionArbitraryrotation)
00375 ON_COMMAND(ID_SELECTION_CLONE, OnSelectionClone)
00376 ON_COMMAND(ID_SELECTION_CONNECT, OnSelectionConnect)
00377 ON_COMMAND(ID_SELECTION_CSGSUBTRACT, OnSelectionCsgsubtract)
00378 ON_COMMAND(ID_SELECTION_CSGMERGE, OnSelectionCsgmerge)
00379 ON_COMMAND(ID_SELECTION_NOOUTLINE, OnSelectionNoOutline)
00380 ON_COMMAND(ID_SELECTION_DELETE, OnSelectionDelete)
00381 ON_COMMAND(ID_SELECTION_DESELECT, OnSelectionDeselect)
00382 ON_COMMAND(ID_SELECTION_DRAGEDGES, OnSelectionDragedges)
00383 ON_COMMAND(ID_SELECTION_DRAGVERTECIES, OnSelectionDragvertecies)
00384 ON_COMMAND(ID_SELECTION_MAKE_DETAIL, OnSelectionMakeDetail)
00385 ON_COMMAND(ID_SELECTION_MAKE_STRUCTURAL, OnSelectionMakeStructural)
00386 ON_COMMAND(ID_SELECTION_MAKEHOLLOW, OnSelectionMakehollow)
00387 ON_COMMAND(ID_SELECTION_SELECTCOMPLETETALL, OnSelectionSelectcompletetall)
00388 ON_COMMAND(ID_SELECTION_SELECTINSIDE, OnSelectionSelectinside)
00389 ON_COMMAND(ID_SELECTION_SELECTPARTIALTALL, OnSelectionSelectpartialtall)
00390 ON_COMMAND(ID_SELECTION_SELECTTOUCHING, OnSelectionSelecttouching)
00391 ON_COMMAND(ID_SELECTION_UNGROUPENTITY, OnSelectionUngroupentity)
00392 ON_COMMAND(ID_TEXTURES_POPUP, OnTexturesPopup)
00393 ON_COMMAND(ID_SPLINES_POPUP, OnSplinesPopup)
00394 ON_COMMAND(ID_POPUP_SELECTION, OnPopupSelection)
00395 ON_COMMAND(ID_VIEW_CHANGE, OnViewChange)
00396 ON_COMMAND(ID_VIEW_CAMERAUPDATE, OnViewCameraupdate)
00397 ON_COMMAND(ID_TERRAIN_RAISELOWERTERRAIN, OnRaiseLowerTerrain)
00398 ON_UPDATE_COMMAND_UI(ID_VIEW_CAMERAUPDATE, OnUpdateViewCameraupdate)
00399 ON_WM_SIZING()
00400 ON_COMMAND(ID_HELP_ABOUT, OnHelpAbout)
00401 ON_COMMAND(ID_VIEW_CLIPPER, OnViewClipper)
00402 ON_COMMAND(ID_CAMERA_ANGLEDOWN, OnCameraAngledown)
00403 ON_COMMAND(ID_CAMERA_ANGLEUP, OnCameraAngleup)
00404 ON_COMMAND(ID_CAMERA_BACK, OnCameraBack)
00405 ON_COMMAND(ID_CAMERA_DOWN, OnCameraDown)
00406 ON_COMMAND(ID_CAMERA_FORWARD, OnCameraForward)
00407 ON_COMMAND(ID_CAMERA_LEFT, OnCameraLeft)
00408 ON_COMMAND(ID_CAMERA_RIGHT, OnCameraRight)
00409 ON_COMMAND(ID_CAMERA_STRAFELEFT, OnCameraStrafeleft)
00410 ON_COMMAND(ID_CAMERA_STRAFERIGHT, OnCameraStraferight)
00411 ON_COMMAND(ID_CAMERA_UP, OnCameraUp)
00412 ON_COMMAND(ID_GRID_TOGGLE, OnGridToggle)
00413 ON_COMMAND(ID_PREFS, OnPrefs)
00414 ON_COMMAND(ID_TOGGLECAMERA, OnTogglecamera)
00415 ON_COMMAND(ID_TOGGLECONSOLE, OnToggleconsole)
00416 ON_COMMAND(ID_TOGGLEVIEW, OnToggleview)
00417 ON_COMMAND(ID_TOGGLEZ, OnTogglez)
00418 ON_COMMAND(ID_TOGGLE_LOCK, OnToggleLock)
00419 ON_COMMAND(ID_EDIT_MAPINFO, OnEditMapinfo)
00420 ON_COMMAND(ID_EDIT_ENTITYINFO, OnEditEntityinfo)
00421 ON_COMMAND(ID_BRUSH_SCRIPTS, OnBrushScripts)
00422 ON_COMMAND(ID_VIEW_NEXTVIEW, OnViewNextview)
00423 ON_COMMAND(ID_HELP_COMMANDLIST, OnHelpCommandlist)
00424 ON_COMMAND(ID_FILE_NEWPROJECT, OnFileNewproject)
00425 ON_COMMAND(ID_FLIP_CLIP, OnFlipClip)
00426 ON_COMMAND(ID_CLIP_SELECTED, OnClipSelected)
00427 ON_COMMAND(ID_SPLIT_SELECTED, OnSplitSelected)
00428 ON_COMMAND(ID_TOGGLEVIEW_XZ, OnToggleviewXz)
00429 ON_COMMAND(ID_TOGGLEVIEW_YZ, OnToggleviewYz)
00430 ON_COMMAND(ID_COLORS_BRUSH, OnColorsBrush)
00431 ON_COMMAND(ID_COLORS_CLIPPER, OnColorsClipper)
00432 ON_COMMAND(ID_COLORS_GRIDTEXT, OnColorsGridtext)
00433 ON_COMMAND(ID_COLORS_SELECTEDBRUSH, OnColorsSelectedbrush)
00434 ON_COMMAND(ID_COLORS_GRIDBLOCK, OnColorsGridblock)
00435 ON_COMMAND(ID_COLORS_VIEWNAME, OnColorsViewname)
00436 ON_COMMAND(ID_COLOR_SETORIGINAL, OnColorSetoriginal)
00437 ON_COMMAND(ID_COLOR_SETQER, OnColorSetqer)
00438 ON_COMMAND(ID_COLOR_SETBLACK, OnColorSetblack)
00439 ON_COMMAND(ID_SNAPTOGRID, OnSnaptogrid)
00440 ON_COMMAND(ID_SELECT_SCALE, OnSelectScale)
00441 ON_COMMAND(ID_SELECT_MOUSEROTATE, OnSelectMouserotate)
00442 ON_COMMAND(ID_EDIT_COPYBRUSH, OnEditCopybrush)
00443 ON_COMMAND(ID_EDIT_PASTEBRUSH, OnEditPastebrush)
00444 ON_COMMAND(ID_EDIT_UNDO, OnEditUndo)
00445 ON_COMMAND(ID_EDIT_REDO, OnEditRedo)
00446 ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdateEditUndo)
00447 ON_UPDATE_COMMAND_UI(ID_EDIT_REDO, OnUpdateEditRedo)
00448 ON_COMMAND(ID_SELECTION_INVERT, OnSelectionInvert)
00449 ON_COMMAND(ID_SELECTION_TEXTURE_DEC, OnSelectionTextureDec)
00450 ON_COMMAND(ID_SELECTION_TEXTURE_FIT, OnSelectionTextureFit)
00451 ON_COMMAND(ID_SELECTION_TEXTURE_INC, OnSelectionTextureInc)
00452 ON_COMMAND(ID_SELECTION_TEXTURE_ROTATECLOCK, OnSelectionTextureRotateclock)
00453 ON_COMMAND(ID_SELECTION_TEXTURE_ROTATECOUNTER, OnSelectionTextureRotatecounter)
00454 ON_COMMAND(ID_SELECTION_TEXTURE_SCALEDOWN, OnSelectionTextureScaledown)
00455 ON_COMMAND(ID_SELECTION_TEXTURE_SCALEUP, OnSelectionTextureScaleup)
00456 ON_COMMAND(ID_SELECTION_TEXTURE_SHIFTDOWN, OnSelectionTextureShiftdown)
00457 ON_COMMAND(ID_SELECTION_TEXTURE_SHIFTLEFT, OnSelectionTextureShiftleft)
00458 ON_COMMAND(ID_SELECTION_TEXTURE_SHIFTRIGHT, OnSelectionTextureShiftright)
00459 ON_COMMAND(ID_SELECTION_TEXTURE_SHIFTUP, OnSelectionTextureShiftup)
00460 ON_COMMAND(ID_GRID_NEXT, OnGridNext)
00461 ON_COMMAND(ID_GRID_PREV, OnGridPrev)
00462 ON_COMMAND(ID_SELECTION_TEXTURE_SCALELEFT, OnSelectionTextureScaleLeft)
00463 ON_COMMAND(ID_SELECTION_TEXTURE_SCALERIGHT, OnSelectionTextureScaleRight)
00464 ON_COMMAND(ID_TEXTURE_REPLACEALL, OnTextureReplaceall)
00465 ON_COMMAND(ID_SCALELOCKX, OnScalelockx)
00466 ON_COMMAND(ID_SCALELOCKY, OnScalelocky)
00467 ON_COMMAND(ID_SCALELOCKZ, OnScalelockz)
00468 ON_COMMAND(ID_SELECT_MOUSESCALE, OnSelectMousescale)
00469 ON_COMMAND(ID_VIEW_CUBICCLIPPING, OnViewCubicclipping)
00470 ON_COMMAND(ID_FILE_IMPORT, OnFileImport)
00471 ON_COMMAND(ID_FILE_PROJECTSETTINGS, OnFileProjectsettings)
00472 ON_UPDATE_COMMAND_UI(ID_FILE_IMPORT, OnUpdateFileImport)
00473 ON_COMMAND(ID_VIEW_CUBEIN, OnViewCubein)
00474 ON_COMMAND(ID_VIEW_CUBEOUT, OnViewCubeout)
00475 ON_COMMAND(ID_FILE_SAVEREGION, OnFileSaveregion)
00476 ON_UPDATE_COMMAND_UI(ID_FILE_SAVEREGION, OnUpdateFileSaveregion)
00477 ON_COMMAND(ID_SELECTION_MOVEDOWN, OnSelectionMovedown)
00478 ON_COMMAND(ID_SELECTION_MOVEUP, OnSelectionMoveup)
00479 ON_COMMAND(ID_TOOLBAR_MAIN, OnToolbarMain)
00480 ON_COMMAND(ID_TOOLBAR_TEXTURE, OnToolbarTexture)
00481 ON_COMMAND(ID_SELECTION_PRINT, OnSelectionPrint)
00482 ON_COMMAND(ID_SELECTION_TOGGLESIZEPAINT, OnSelectionTogglesizepaint)
00483 ON_COMMAND(ID_BRUSH_MAKECONE, OnBrushMakecone)
00484 ON_COMMAND(ID_TEXTURES_LOAD, OnTexturesLoad)
00485 ON_COMMAND(ID_TOGGLE_ROTATELOCK, OnToggleRotatelock)
00486 ON_COMMAND(ID_CURVE_BEVEL, OnCurveBevel)
00487 ON_COMMAND(ID_CURVE_CYLINDER, OnCurveCylinder)
00488 ON_COMMAND(ID_CURVE_EIGHTHSPHERE, OnCurveEighthsphere)
00489 ON_COMMAND(ID_CURVE_ENDCAP, OnCurveEndcap)
00490 ON_COMMAND(ID_CURVE_HEMISPHERE, OnCurveHemisphere)
00491 ON_COMMAND(ID_CURVE_INVERTCURVE, OnCurveInvertcurve)
00492 ON_COMMAND(ID_CURVE_QUARTER, OnCurveQuarter)
00493 ON_COMMAND(ID_CURVE_SPHERE, OnCurveSphere)
00494 ON_COMMAND(ID_FILE_IMPORTMAP, OnFileImportmap)
00495 ON_COMMAND(ID_FILE_EXPORTMAP, OnFileExportmap)
00496 ON_COMMAND(ID_EDIT_LOADPREFAB, OnEditLoadprefab)
00497 ON_COMMAND(ID_VIEW_SHOWCURVES, OnViewShowcurves)
00498 ON_COMMAND(ID_SELECTION_SELECT_NUDGEDOWN, OnSelectionSelectNudgedown)
00499 ON_COMMAND(ID_SELECTION_SELECT_NUDGELEFT, OnSelectionSelectNudgeleft)
00500 ON_COMMAND(ID_SELECTION_SELECT_NUDGERIGHT, OnSelectionSelectNudgeright)
00501 ON_COMMAND(ID_SELECTION_SELECT_NUDGEUP, OnSelectionSelectNudgeup)
00502 ON_WM_SYSKEYDOWN()
00503 ON_COMMAND(ID_TEXTURES_LOADLIST, OnTexturesLoadlist)
00504 ON_COMMAND(ID_DONTSELECTCURVE, OnDontselectcurve)
00505 ON_COMMAND(ID_CONVERTCURVES, OnConvertcurves)
00506 ON_COMMAND(ID_DYNAMIC_LIGHTING, OnDynamicLighting)
00507 ON_COMMAND(ID_CURVE_SIMPLEPATCHMESH, OnCurveSimplepatchmesh)
00508 ON_COMMAND(ID_PATCH_SHOWBOUNDINGBOX, OnPatchToggleBox)
00509 ON_COMMAND(ID_PATCH_WIREFRAME, OnPatchWireframe)
00510 ON_COMMAND(ID_CURVE_PATCHCONE, OnCurvePatchcone)
00511 ON_COMMAND(ID_CURVE_PATCHTUBE, OnCurvePatchtube)
00512 ON_COMMAND(ID_PATCH_WELD, OnPatchWeld)
00513 ON_COMMAND(ID_CURVE_PATCHBEVEL, OnCurvePatchbevel)
00514 ON_COMMAND(ID_CURVE_PATCHENDCAP, OnCurvePatchendcap)
00515 ON_COMMAND(ID_CURVE_PATCHINVERTEDBEVEL, OnCurvePatchinvertedbevel)
00516 ON_COMMAND(ID_CURVE_PATCHINVERTEDENDCAP, OnCurvePatchinvertedendcap)
00517 ON_COMMAND(ID_PATCH_DRILLDOWN, OnPatchDrilldown)
00518 ON_COMMAND(ID_CURVE_INSERTCOLUMN, OnCurveInsertcolumn)
00519 ON_COMMAND(ID_CURVE_INSERTROW, OnCurveInsertrow)
00520 ON_COMMAND(ID_CURVE_DELETECOLUMN, OnCurveDeletecolumn)
00521 ON_COMMAND(ID_CURVE_DELETEROW, OnCurveDeleterow)
00522 ON_COMMAND(ID_CURVE_INSERT_ADDCOLUMN, OnCurveInsertAddcolumn)
00523 ON_COMMAND(ID_CURVE_INSERT_ADDROW, OnCurveInsertAddrow)
00524 ON_COMMAND(ID_CURVE_INSERT_INSERTCOLUMN, OnCurveInsertInsertcolumn)
00525 ON_COMMAND(ID_CURVE_INSERT_INSERTROW, OnCurveInsertInsertrow)
00526 ON_COMMAND(ID_CURVE_NEGATIVE, OnCurveNegative)
00527 ON_COMMAND(ID_CURVE_NEGATIVETEXTUREX, OnCurveNegativeTextureX)
00528 ON_COMMAND(ID_CURVE_NEGATIVETEXTUREY, OnCurveNegativeTextureY)
00529 ON_COMMAND(ID_CURVE_DELETE_FIRSTCOLUMN, OnCurveDeleteFirstcolumn)
00530 ON_COMMAND(ID_CURVE_DELETE_FIRSTROW, OnCurveDeleteFirstrow)
00531 ON_COMMAND(ID_CURVE_DELETE_LASTCOLUMN, OnCurveDeleteLastcolumn)
00532 ON_COMMAND(ID_CURVE_DELETE_LASTROW, OnCurveDeleteLastrow)
00533 ON_COMMAND(ID_PATCH_BEND, OnPatchBend)
00534 ON_COMMAND(ID_PATCH_INSDEL, OnPatchInsdel)
00535 ON_COMMAND(ID_PATCH_ENTER, OnPatchEnter)
00536 ON_COMMAND(ID_PATCH_TAB, OnPatchTab)
00537 ON_COMMAND(ID_CURVE_PATCHDENSETUBE, OnCurvePatchdensetube)
00538 ON_COMMAND(ID_CURVE_PATCHVERYDENSETUBE, OnCurvePatchverydensetube)
00539 ON_COMMAND(ID_CURVE_CAP, OnCurveCap)
00540 ON_COMMAND(ID_CURVE_CAP_INVERTEDBEVEL, OnCurveCapInvertedbevel)
00541 ON_COMMAND(ID_CURVE_CAP_INVERTEDENDCAP, OnCurveCapInvertedendcap)
00542 ON_COMMAND(ID_CURVE_REDISPERSE_COLS, OnCurveRedisperseCols)
00543 ON_COMMAND(ID_CURVE_REDISPERSE_ROWS, OnCurveRedisperseRows)
00544 ON_COMMAND(ID_PATCH_NATURALIZE, OnPatchNaturalize)
00545 ON_COMMAND(ID_SELECT_SNAPTOGRID, OnSnapToGrid)
00546 ON_COMMAND(ID_CURVE_PATCHSQUARE, OnCurvePatchsquare)
00547 ON_COMMAND(ID_TERRAIN_CREATETERRAINFROMBRUSH, OnTerrainCreateFromBrush)
00548 ON_COMMAND(ID_TEXTURES_TEXTUREWINDOWSCALE_10, OnTexturesTexturewindowscale10)
00549 ON_COMMAND(ID_TEXTURES_TEXTUREWINDOWSCALE_100, OnTexturesTexturewindowscale100)
00550 ON_COMMAND(ID_TEXTURES_TEXTUREWINDOWSCALE_200, OnTexturesTexturewindowscale200)
00551 ON_COMMAND(ID_TEXTURES_TEXTUREWINDOWSCALE_25, OnTexturesTexturewindowscale25)
00552 ON_COMMAND(ID_TEXTURES_TEXTUREWINDOWSCALE_50, OnTexturesTexturewindowscale50)
00553 ON_COMMAND(ID_TEXTURES_FLUSH, OnTexturesFlush)
00554 ON_COMMAND(ID_CURVE_OVERLAY_CLEAR, OnCurveOverlayClear)
00555 ON_COMMAND(ID_CURVE_OVERLAY_SET, OnCurveOverlaySet)
00556 ON_COMMAND(ID_CURVE_THICKEN, OnCurveThicken)
00557 ON_COMMAND(ID_CURVE_CYCLECAP, OnCurveCyclecap)
00558 ON_COMMAND(ID_CURVE_MATRIX_TRANSPOSE, OnCurveMatrixTranspose)
00559 ON_COMMAND(ID_TEXTURES_RELOADSHADERS, OnTexturesReloadshaders)
00560 ON_COMMAND(ID_SHOW_ENTITIES, OnShowEntities)
00561 ON_COMMAND(ID_VIEW_ENTITIESAS_BOUNDINGBOX, OnViewEntitiesasBoundingbox)
00562 ON_COMMAND(ID_VIEW_ENTITIESAS_SELECTEDSKINNED, OnViewEntitiesasSelectedskinned)
00563 ON_COMMAND(ID_VIEW_ENTITIESAS_SELECTEDWIREFRAME, OnViewEntitiesasSelectedwireframe)
00564 ON_COMMAND(ID_VIEW_ENTITIESAS_SKINNED, OnViewEntitiesasSkinned)
00565 ON_COMMAND(ID_VIEW_ENTITIESAS_SKINNEDANDBOXED, OnViewEntitiesasSkinnedandboxed)
00566 ON_COMMAND(ID_VIEW_ENTITIESAS_WIREFRAME, OnViewEntitiesasWireframe)
00567 ON_COMMAND(ID_PLUGINS_REFRESH, OnPluginsRefresh)
00568 ON_COMMAND(ID_VIEW_SHOWHINT, OnViewShowhint)
00569 ON_UPDATE_COMMAND_UI(ID_TEXTURES_SHOWINUSE, OnUpdateTexturesShowinuse)
00570 ON_COMMAND(ID_TEXTURES_SHOWALL, OnTexturesShowall)
00571 ON_COMMAND(ID_PATCH_INSPECTOR, OnPatchInspector)
00572 ON_COMMAND(ID_VIEW_OPENGLLIGHTING, OnViewOpengllighting)
00573 ON_COMMAND(ID_SELECT_ALL, OnSelectAll)
00574 ON_COMMAND(ID_VIEW_SHOWCAULK, OnViewShowcaulk)
00575 ON_COMMAND(ID_CURVE_FREEZE, OnCurveFreeze)
00576 ON_COMMAND(ID_CURVE_UNFREEZE, OnCurveUnFreeze)
00577 ON_COMMAND(ID_CURVE_UNFREEZEALL, OnCurveUnFreezeAll)
00578 ON_COMMAND(ID_SELECT_RESELECT, OnSelectReselect)
00579 ON_COMMAND(ID_VIEW_SHOWANGLES, OnViewShowangles)
00580 ON_COMMAND(ID_EDIT_SAVEPREFAB, OnEditSaveprefab)
00581 ON_COMMAND(ID_CURVE_MOREENDCAPSBEVELS_SQUAREBEVEL, OnCurveMoreendcapsbevelsSquarebevel)
00582 ON_COMMAND(ID_CURVE_MOREENDCAPSBEVELS_SQUAREENDCAP, OnCurveMoreendcapsbevelsSquareendcap)
00583 ON_COMMAND(ID_BRUSH_PRIMITIVES_SPHERE, OnBrushPrimitivesSphere)
00584 ON_COMMAND(ID_VIEW_CROSSHAIR, OnViewCrosshair)
00585 ON_COMMAND(ID_VIEW_HIDESHOW_HIDESELECTED, OnViewHideshowHideselected)
00586 ON_COMMAND(ID_VIEW_HIDESHOW_SHOWHIDDEN, OnViewHideshowShowhidden)
00587 ON_COMMAND(ID_TEXTURES_SHADERS_SHOW, OnTexturesShadersShow)
00588 ON_COMMAND(ID_TEXTURES_FLUSH_UNUSED, OnTexturesFlushUnused)
00589 ON_COMMAND(ID_VIEW_GROUPS, OnViewGroups)
00590 ON_COMMAND(ID_DROP_GROUP_ADDTO_WORLD, OnDropGroupAddtoWorld)
00591 ON_COMMAND(ID_DROP_GROUP_NAME, OnDropGroupName)
00592 ON_COMMAND(ID_DROP_GROUP_NEWGROUP, OnDropGroupNewgroup)
00593 ON_COMMAND(ID_DROP_GROUP_REMOVE, OnDropGroupRemove)
00594 ON_COMMAND(ID_SPLINES_MODE, OnSplinesMode)
00595 ON_COMMAND(ID_SPLINES_LOAD, OnSplinesLoad)
00596 ON_COMMAND(ID_SPLINES_SAVE, OnSplinesSave)
00597 ON_COMMAND(ID_SPLINES_EDIT, OnSplinesEdit)
00598 ON_COMMAND(ID_SPLINE_TEST, OnSplineTest)
00599 ON_COMMAND(ID_POPUP_NEWCAMERA_INTERPOLATED, OnPopupNewcameraInterpolated)
00600 ON_COMMAND(ID_POPUP_NEWCAMERA_SPLINE, OnPopupNewcameraSpline)
00601 ON_COMMAND(ID_POPUP_NEWCAMERA_FIXED, OnPopupNewcameraFixed)
00602
00603 ON_COMMAND_RANGE(CMD_TEXTUREWAD, CMD_TEXTUREWAD_END, OnTextureWad)
00604 ON_COMMAND_RANGE(CMD_BSPCOMMAND, CMD_BSPCOMMAND_END, OnBspCommand)
00605 ON_COMMAND_RANGE(IDMRU, IDMRU_END, OnMru)
00606 ON_COMMAND_RANGE(ID_VIEW_NEAREST, ID_TEXTURES_FLATSHADE, OnViewNearest)
00607 ON_COMMAND_RANGE(ID_GRID_1, ID_GRID_64, OnGrid1)
00608 ON_COMMAND_RANGE(ID_PLUGIN_START, ID_PLUGIN_END, OnPlugIn)
00609 ON_REGISTERED_MESSAGE(g_msgBSPDone, OnBSPDone)
00610 ON_REGISTERED_MESSAGE(g_msgBSPStatus, OnBSPStatus)
00611 ON_MESSAGE(WM_DISPLAYCHANGE, OnDisplayChange)
00612
00613 END_MESSAGE_MAP()
00614
00615 static UINT indicators[] =
00616 {
00617 ID_SEPARATOR,
00618 ID_SEPARATOR,
00619 ID_SEPARATOR,
00620 ID_SEPARATOR,
00621 ID_SEPARATOR,
00622 ID_SEPARATOR,
00623 };
00624
00625 LRESULT CMainFrame::OnDisplayChange(UINT wParam, long lParam)
00626 {
00627 int n = wParam;
00628 return 0;
00629 }
00630
00631
00632 LRESULT CMainFrame::OnBSPStatus(UINT wParam, long lParam)
00633 {
00634 return 0;
00635 }
00636
00637 LRESULT CMainFrame::OnBSPDone(UINT wParam, long lParam)
00638 {
00639 DLLBuildDone();
00640 return 0;
00641 }
00642
00643
00645
00646
00647 CMainFrame::CMainFrame()
00648 {
00649 m_bDoLoop = false;
00650 m_bSplittersOK = false;
00651 g_pParentWnd = this;
00652 m_pXYWnd = NULL;
00653 m_pCamWnd = NULL;
00654 m_pTexWnd = NULL;
00655 m_pZWnd = NULL;
00656 m_pEditWnd = NULL;
00657 m_pYZWnd = NULL;
00658 m_pXZWnd = NULL;
00659 m_pActiveXY = NULL;
00660 m_bCamPreview = true;
00661 }
00662
00663 CMainFrame::~CMainFrame()
00664 {
00665 }
00666
00667 void HandlePopup(CWnd* pWindow, unsigned int uId)
00668 {
00669
00670 CPoint ptMouse;
00671 GetCursorPos(&ptMouse);
00672
00673
00674 CMenu mnuPopup;
00675 VERIFY(mnuPopup.LoadMenu(uId));
00676 mnuPopup.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON |
00677 TPM_RIGHTBUTTON, ptMouse.x, ptMouse.y,pWindow);
00678 mnuPopup.DestroyMenu();
00679
00680
00681 pWindow->SetFocus();
00682 }
00683
00684
00685 void CMainFrame::OnParentNotify(UINT message, LPARAM lParam)
00686 {
00687 }
00688
00689 void CMainFrame::SetButtonMenuStates()
00690 {
00691 CMenu* pMenu = GetMenu();
00692 if (pMenu)
00693 {
00694
00695 if ( !g_qeglobals.d_savedinfo.show_names )
00696 pMenu->CheckMenuItem(ID_VIEW_SHOWNAMES, MF_BYCOMMAND | MF_UNCHECKED);
00697 if ( !g_qeglobals.d_savedinfo.show_coordinates )
00698 pMenu->CheckMenuItem(ID_VIEW_SHOWCOORDINATES, MF_BYCOMMAND | MF_UNCHECKED );
00699
00700 if ( g_qeglobals.d_savedinfo.exclude & EXCLUDE_LIGHTS )
00701 pMenu->CheckMenuItem(ID_VIEW_SHOWLIGHTS, MF_BYCOMMAND | MF_UNCHECKED );
00702 if ( g_qeglobals.d_savedinfo.exclude & EXCLUDE_ENT )
00703 pMenu->CheckMenuItem(ID_VIEW_ENTITY, MF_BYCOMMAND | MF_UNCHECKED );
00704 if ( g_qeglobals.d_savedinfo.exclude & EXCLUDE_PATHS )
00705 pMenu->CheckMenuItem(ID_VIEW_SHOWPATH, MF_BYCOMMAND | MF_UNCHECKED );
00706 if ( g_qeglobals.d_savedinfo.exclude & EXCLUDE_WATER )
00707 pMenu->CheckMenuItem(ID_VIEW_SHOWWATER, MF_BYCOMMAND | MF_UNCHECKED );
00708 if ( g_qeglobals.d_savedinfo.exclude & EXCLUDE_WORLD )
00709 pMenu->CheckMenuItem(ID_VIEW_SHOWWORLD, MF_BYCOMMAND | MF_UNCHECKED );
00710 if ( g_qeglobals.d_savedinfo.exclude & EXCLUDE_CLIP )
00711 pMenu->CheckMenuItem(ID_VIEW_SHOWCLIP, MF_BYCOMMAND | MF_UNCHECKED );
00712 if ( g_qeglobals.d_savedinfo.exclude & EXCLUDE_HINT )
00713 pMenu->CheckMenuItem(ID_VIEW_SHOWHINT, MF_BYCOMMAND | MF_UNCHECKED );
00714 if ( g_qeglobals.d_savedinfo.exclude & EXCLUDE_CAULK )
00715 pMenu->CheckMenuItem(ID_VIEW_SHOWCAULK, MF_BYCOMMAND | MF_UNCHECKED );
00716 if ( g_qeglobals.d_savedinfo.exclude & EXCLUDE_ANGLES )
00717 pMenu->CheckMenuItem(ID_VIEW_SHOWANGLES, MF_BYCOMMAND | MF_UNCHECKED );
00718
00719
00720 pMenu->CheckMenuItem(ID_TOGGLE_LOCK, MF_BYCOMMAND | (g_PrefsDlg.m_bTextureLock) ? MF_CHECKED : MF_UNCHECKED);
00721 pMenu->CheckMenuItem(ID_TOGGLE_ROTATELOCK, MF_BYCOMMAND | (g_PrefsDlg.m_bRotateLock) ? MF_CHECKED : MF_UNCHECKED);
00722 pMenu->CheckMenuItem(ID_VIEW_CUBICCLIPPING, MF_BYCOMMAND | (g_PrefsDlg.m_bCubicClipping) ? MF_CHECKED : MF_UNCHECKED);
00723 pMenu->CheckMenuItem (ID_VIEW_OPENGLLIGHTING, MF_BYCOMMAND | (g_PrefsDlg.m_bGLLighting) ? MF_CHECKED : MF_UNCHECKED );
00724 pMenu->CheckMenuItem (ID_SNAPTOGRID, MF_BYCOMMAND | (!g_PrefsDlg.m_bNoClamp) ? MF_CHECKED : MF_UNCHECKED );
00725 if (m_wndToolBar.GetSafeHwnd())
00726 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_VIEW_CUBICCLIPPING, (g_PrefsDlg.m_bCubicClipping) ? TRUE : FALSE);
00727
00728 int n = g_PrefsDlg.m_nTextureScale;
00729 int id;
00730 switch (n)
00731 {
00732 case 10 : id = ID_TEXTURES_TEXTUREWINDOWSCALE_10; break;
00733 case 25 : id = ID_TEXTURES_TEXTUREWINDOWSCALE_25; break;
00734 case 50 : id = ID_TEXTURES_TEXTUREWINDOWSCALE_50; break;
00735 case 200 : id = ID_TEXTURES_TEXTUREWINDOWSCALE_200; break;
00736 default : id = ID_TEXTURES_TEXTUREWINDOWSCALE_100; break;
00737 }
00738 CheckTextureScale(id);
00739
00740
00741 }
00742 if (g_qeglobals.d_project_entity)
00743 {
00744 FillTextureMenu();
00745 FillBSPMenu();
00746 LoadMruInReg(g_qeglobals.d_lpMruMenu,"Software\\id\\QuakeEd4\\MRU");
00747 PlaceMenuMRUItem(g_qeglobals.d_lpMruMenu,::GetSubMenu(::GetMenu(GetSafeHwnd()),0), ID_FILE_EXIT);
00748 }
00749 }
00750
00751 void CMainFrame::ShowMenuItemKeyBindings(CMenu *pMenu)
00752 {
00753 int i, j;
00754 char key[1024], *ptr;
00755 MENUITEMINFO MenuItemInfo;
00756
00757
00758 for (i = 0; i < g_nCommandCount; i++)
00759 {
00760 memset(&MenuItemInfo, 0, sizeof(MENUITEMINFO));
00761 MenuItemInfo.cbSize = sizeof(MENUITEMINFO);
00762 MenuItemInfo.fMask = MIIM_TYPE;
00763 MenuItemInfo.dwTypeData = key;
00764 MenuItemInfo.cch = sizeof(key);
00765 if (!pMenu->GetMenuItemInfo(g_Commands[i].m_nCommand, &MenuItemInfo))
00766 continue;
00767 if (MenuItemInfo.fType != MFT_STRING)
00768 continue;
00769 ptr = strchr(key, '\t');
00770 if (ptr) *ptr = '\0';
00771 strcat(key, "\t");
00772 if (g_Commands[i].m_nModifiers)
00773 {
00774 if (g_Commands[i].m_nModifiers & RAD_SHIFT)
00775 strcat(key, "Shift-");
00776 if (g_Commands[i].m_nModifiers & RAD_ALT)
00777 strcat(key, "Alt-");
00778 if (g_Commands[i].m_nModifiers & RAD_CONTROL)
00779 strcat(key, "Ctrl-");
00780 }
00781 for (j = 0; j < g_nKeyCount; j++)
00782 {
00783 if (g_Commands[i].m_nKey == g_Keys[j].m_nVKKey)
00784 {
00785 strcat(key, g_Keys[j].m_strName);
00786 break;
00787 }
00788 }
00789 if (j >= g_nKeyCount)
00790 {
00791 sprintf(&key[strlen(key)], "%c", g_Commands[i].m_nKey);
00792 }
00793 memset(&MenuItemInfo, 0, sizeof(MENUITEMINFO));
00794 MenuItemInfo.cbSize = sizeof(MENUITEMINFO);
00795 MenuItemInfo.fMask = MIIM_TYPE;
00796 MenuItemInfo.fType = MFT_STRING;
00797 MenuItemInfo.dwTypeData = key;
00798 MenuItemInfo.cch = strlen(key);
00799 SetMenuItemInfo(pMenu->m_hMenu, g_Commands[i].m_nCommand, FALSE, &MenuItemInfo);
00800 }
00801 }
00802
00803 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
00804 {
00805
00806
00807
00808 char* pBuffer = g_strAppPath.GetBufferSetLength(_MAX_PATH + 1);
00809 int nResult = ::GetModuleFileName(NULL, pBuffer, _MAX_PATH);
00810 ASSERT(nResult != 0);
00811 pBuffer[g_strAppPath.ReverseFind('\\') + 1] = '\0';
00812 g_strAppPath.ReleaseBuffer();
00813
00814 InitCommonControls ();
00815 g_qeglobals.d_hInstance = AfxGetInstanceHandle();
00816 MFCCreate(AfxGetInstanceHandle());
00817
00818
00819
00820 if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
00821 return -1;
00822
00823 UINT nStyle;
00824 UINT nID = (g_PrefsDlg.m_bWideToolbar) ? IDR_TOOLBAR_ADVANCED : IDR_TOOLBAR1;
00825
00826 if (!m_wndToolBar.Create(this) ||
00827 !m_wndToolBar.LoadToolBar(nID))
00828 {
00829 TRACE0("Failed to create toolbar\n");
00830 return -1;
00831 }
00832
00833 if (!m_wndStatusBar.Create(this) ||
00834 !m_wndStatusBar.SetIndicators(indicators,
00835 sizeof(indicators)/sizeof(UINT)))
00836 {
00837 TRACE0("Failed to create status bar\n");
00838 return -1;
00839 }
00840
00841 #if 0
00842 if (!m_wndScaleBar.Create(this) ||
00843 !m_wndScaleBar.LoadToolBar(IDR_TOOLBAR_SCALELOCK))
00844 {
00845 TRACE0("Failed to create scaling toolbar\n");
00846 return -1;
00847 }
00848 #endif
00849
00850
00851 m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
00852 CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
00853
00854
00855
00856 m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
00857 EnableDocking(CBRS_ALIGN_ANY);
00858 DockControlBar(&m_wndToolBar);
00859
00860
00861
00862
00863
00864 int nImage;
00865 int nIndex = m_wndToolBar.CommandToIndex(ID_VIEW_CAMERATOGGLE);
00866 if (nIndex >= 0)
00867 {
00868 m_wndToolBar.GetButtonInfo(nIndex, nID, nStyle, nImage);
00869 m_wndToolBar.SetButtonInfo(nIndex, nID, TBBS_CHECKBOX, nImage);
00870 m_wndToolBar.GetToolBarCtrl().CheckButton(nID);
00871 }
00872 m_bCamPreview = true;
00873
00874 nIndex = m_wndToolBar.CommandToIndex(ID_VIEW_CUBICCLIPPING);
00875 if (nIndex >= 0)
00876 {
00877 m_wndToolBar.GetButtonInfo(nIndex, nID, nStyle, nImage);
00878 m_wndToolBar.SetButtonInfo(nIndex, nID, TBBS_CHECKBOX, nImage);
00879 }
00880 nIndex = m_wndToolBar.CommandToIndex(ID_VIEW_ENTITY);
00881 if (nIndex >= 0)
00882 {
00883 m_wndToolBar.GetButtonInfo(nIndex, nID, nStyle, nImage);
00884 m_wndToolBar.SetButtonInfo(nIndex, nID, TBBS_CHECKBOX, nImage);
00885 }
00886 nIndex = m_wndToolBar.CommandToIndex(ID_VIEW_CLIPPER);
00887 if (nIndex >= 0)
00888 {
00889 m_wndToolBar.GetButtonInfo(nIndex, nID, nStyle, nImage);
00890 m_wndToolBar.SetButtonInfo(nIndex, nID, TBBS_CHECKBOX, nImage);
00891 }
00892 nIndex = m_wndToolBar.CommandToIndex(ID_SELECT_MOUSEROTATE);
00893 if (nIndex >= 0)
00894 {
00895 m_wndToolBar.GetButtonInfo(nIndex, nID, nStyle, nImage);
00896 m_wndToolBar.SetButtonInfo(nIndex, nID, TBBS_CHECKBOX, nImage);
00897 }
00898
00899 nIndex = m_wndToolBar.CommandToIndex(ID_SELECT_MOUSESCALE);
00900 if (nIndex >= 0)
00901 {
00902 m_wndToolBar.GetButtonInfo(nIndex, nID, nStyle, nImage);
00903 m_wndToolBar.SetButtonInfo(nIndex, nID, TBBS_CHECKBOX, nImage);
00904 }
00905
00906 nIndex = m_wndToolBar.CommandToIndex(ID_SCALELOCKX);
00907 if (nIndex >= 0)
00908 {
00909 m_wndToolBar.GetButtonInfo(nIndex, nID, nStyle, nImage);
00910 m_wndToolBar.SetButtonInfo(nIndex, nID, TBBS_CHECKBOX, nImage);
00911 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SCALELOCKX, FALSE);
00912 }
00913
00914 nIndex = m_wndToolBar.CommandToIndex(ID_SCALELOCKY);
00915 if (nIndex >= 0)
00916 {
00917 m_wndToolBar.GetButtonInfo(nIndex, nID, nStyle, nImage);
00918 m_wndToolBar.SetButtonInfo(nIndex, nID, TBBS_CHECKBOX, nImage);
00919 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SCALELOCKY, FALSE);
00920 }
00921
00922 nIndex = m_wndToolBar.CommandToIndex(ID_SCALELOCKZ);
00923 if (nIndex >= 0)
00924 {
00925 m_wndToolBar.GetButtonInfo(nIndex, nID, nStyle, nImage);
00926 m_wndToolBar.SetButtonInfo(nIndex, nID, TBBS_CHECKBOX, nImage);
00927 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SCALELOCKZ, FALSE);
00928 }
00929
00930 #ifdef QUAKE3
00931 nIndex = m_wndToolBar.CommandToIndex(ID_DONTSELECTCURVE);
00932 if (nIndex >= 0)
00933 {
00934 m_wndToolBar.GetButtonInfo(nIndex, nID, nStyle, nImage);
00935 m_wndToolBar.SetButtonInfo(nIndex, nID, TBBS_CHECKBOX, nImage);
00936 }
00937 nIndex = m_wndToolBar.CommandToIndex(ID_PATCH_SHOWBOUNDINGBOX);
00938 if (nIndex >= 0)
00939 {
00940 m_wndToolBar.GetButtonInfo(nIndex, nID, nStyle, nImage);
00941 m_wndToolBar.SetButtonInfo(nIndex, nID, TBBS_CHECKBOX, nImage);
00942 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_PATCH_SHOWBOUNDINGBOX, TRUE);
00943 }
00944 nIndex = m_wndToolBar.CommandToIndex(ID_PATCH_WELD);
00945 if (nIndex >= 0)
00946 {
00947 m_wndToolBar.GetButtonInfo(nIndex, nID, nStyle, nImage);
00948 m_wndToolBar.SetButtonInfo(nIndex, nID, TBBS_CHECKBOX, nImage);
00949 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_PATCH_WELD, TRUE);
00950 }
00951 nIndex = m_wndToolBar.CommandToIndex(ID_PATCH_DRILLDOWN);
00952 if (nIndex >= 0)
00953 {
00954 m_wndToolBar.GetButtonInfo(nIndex, nID, nStyle, nImage);
00955 m_wndToolBar.SetButtonInfo(nIndex, nID, TBBS_CHECKBOX, nImage);
00956 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_PATCH_DRILLDOWN, TRUE);
00957 }
00958 nIndex = m_wndToolBar.CommandToIndex(ID_PATCH_BEND);
00959 if (nIndex >= 0)
00960 {
00961 m_wndToolBar.GetButtonInfo(nIndex, nID, nStyle, nImage);
00962 m_wndToolBar.SetButtonInfo(nIndex, nID, TBBS_CHECKBOX, nImage);
00963 }
00964 nIndex = m_wndToolBar.CommandToIndex(ID_PATCH_INSDEL);
00965 if (nIndex >= 0)
00966 {
00967 m_wndToolBar.GetButtonInfo(nIndex, nID, nStyle, nImage);
00968 m_wndToolBar.SetButtonInfo(nIndex, nID, TBBS_CHECKBOX, nImage);
00969 }
00970 #else
00971 m_wndToolBar.GetToolBarCtrl().HideButton(ID_DONTSELECTCURVE);
00972 m_wndToolBar.GetToolBarCtrl().HideButton(ID_PATCH_SHOWBOUNDINGBOX);
00973 m_wndToolBar.GetToolBarCtrl().HideButton(ID_PATCH_WELD);
00974 m_wndToolBar.GetToolBarCtrl().HideButton(ID_PATCH_WIREFRAME);
00975 #endif
00976 g_nScaleHow = 0;
00977
00978
00979 #ifdef QUAKE3
00980 g_pParentWnd->GetMenu()->DestroyMenu();
00981 CMenu* pMenu = new CMenu();
00982 pMenu->LoadMenu(IDR_MENU_QUAKE3);
00983 g_pParentWnd->SetMenu(pMenu);
00984 #else
00985 CMenu* pMenu = GetMenu();
00986 #endif
00987
00988 m_wndTextureBar.Create(this, IDD_TEXTUREBAR, CBRS_BOTTOM, 7433);
00989 m_wndTextureBar.EnableDocking(CBRS_ALIGN_ANY);
00990 DockControlBar(&m_wndTextureBar);
00991
00992 g_qeglobals.d_lpMruMenu = CreateMruMenuDefault();
00993
00994 m_bAutoMenuEnable = FALSE;
00995
00996 LoadCommandMap();
00997
00998 ShowMenuItemKeyBindings(pMenu);
00999
01000 CFont* pFont = new CFont();
01001 pFont->CreatePointFont(g_PrefsDlg.m_nStatusSize * 10, "Arial");
01002 m_wndStatusBar.SetFont(pFont);
01003
01004 OnPluginsRefresh();
01005
01006 if (g_PrefsDlg.m_bRunBefore == FALSE)
01007 {
01008 g_PrefsDlg.m_bRunBefore = TRUE;
01009 g_PrefsDlg.SavePrefs();
01010
01011
01012
01013
01014
01015
01016 }
01017 else
01018 {
01019
01020 #if 0
01021 if (g_PrefsDlg.m_bSGIOpenGL)
01022 {
01023 vec3_t vMin, vMax;
01024 vMin[0] = vMin[1] = vMin[2] = 0;
01025 vMax[0] = vMax[1] = vMax[2] = 8;
01026 brush_t* pBrush = Brush_Create(vMin, vMax, &g_qeglobals.d_texturewin.texdef);
01027 Entity_LinkBrush (world_entity, pBrush);
01028 Brush_Build(pBrush);
01029 Brush_AddToList (pBrush, &active_brushes);
01030 Select_Brush(pBrush);
01031 Sys_UpdateWindows(W_ALL);
01032 PostMessage(WM_COMMAND, ID_SELECTION_DELETE, 0);
01033 }
01034 #endif
01035
01036
01037 if (g_PrefsDlg.m_bLoadLastMap && g_PrefsDlg.m_strLastMap.GetLength() > 0)
01038 Map_LoadFile(g_PrefsDlg.m_strLastMap.GetBuffer(0));
01039 }
01040
01041 SetGridStatus();
01042 SetTexValStatus();
01043 SetButtonMenuStates();
01044 LoadBarState("RadiantToolBars2");
01045 if (!g_PrefsDlg.m_bTextureBar)
01046 ShowControlBar(&m_wndTextureBar, FALSE, TRUE);
01047 else
01048 ShowControlBar(&m_wndTextureBar, TRUE, TRUE);
01049
01050 ShowControlBar(&m_wndToolBar, (m_wndToolBar.GetStyle() & WS_VISIBLE), TRUE);
01051
01052 SetActiveXY(m_pXYWnd);
01053 m_pXYWnd->SetFocus();
01054
01055 PostMessage(WM_KEYDOWN, 'O', NULL);
01056
01057 return 0;
01058 }
01059
01060 void CMainFrame::LoadCommandMap()
01061 {
01062 CString strINI;
01063 char* pBuff = new char[1024];
01064 if (g_PrefsDlg.m_strUserPath.GetLength() > 0)
01065 strINI = g_PrefsDlg.m_strUserPath;
01066 else
01067 {
01068 strINI = g_strAppPath;
01069 strINI += "\\radiant.ini";
01070 }
01071
01072 for (int i = 0; i < g_nCommandCount; i++)
01073 {
01074 int nLen = GetPrivateProfileString("Commands", g_Commands[i].m_strCommand, "", pBuff, 1024, strINI);
01075 if (nLen > 0)
01076 {
01077 CString strBuff = pBuff;
01078 strBuff.TrimLeft();
01079 strBuff.TrimRight();
01080 int nSpecial = strBuff.Find("+alt");
01081 g_Commands[i].m_nModifiers = 0;
01082 if (nSpecial >= 0)
01083 {
01084 g_Commands[i].m_nModifiers |= RAD_ALT;
01085 FindReplace(strBuff, "+alt", "");
01086 }
01087 nSpecial = strBuff.Find("+ctrl");
01088 if (nSpecial >= 0)
01089 {
01090 g_Commands[i].m_nModifiers |= RAD_CONTROL;
01091 FindReplace(strBuff, "+ctrl", "");
01092 }
01093 nSpecial = strBuff.Find("+shift");
01094 if (nSpecial >= 0)
01095 {
01096 g_Commands[i].m_nModifiers |= RAD_SHIFT;
01097 FindReplace(strBuff, "+shift", "");
01098 }
01099 strBuff.TrimLeft();
01100 strBuff.TrimRight();
01101 strBuff.MakeUpper();
01102 if (nLen == 1)
01103 {
01104 g_Commands[i].m_nKey = __toascii(strBuff.GetAt(0));
01105 }
01106 else
01107 {
01108 for (int j = 0; j < g_nKeyCount; j++)
01109 {
01110 if (strBuff.CompareNoCase(g_Keys[j].m_strName) == 0)
01111 {
01112 g_Commands[i].m_nKey = g_Keys[j].m_nVKKey;
01113 break;
01114 }
01115 }
01116 }
01117 }
01118 }
01119 delete []pBuff;
01120 }
01121
01122 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
01123 {
01124
01125
01126 return CFrameWnd::PreCreateWindow(cs);
01127 }
01128
01130
01131
01132 #ifdef _DEBUG
01133 void CMainFrame::AssertValid() const
01134 {
01135 CFrameWnd::AssertValid();
01136 }
01137
01138 void CMainFrame::Dump(CDumpContext& dc) const
01139 {
01140 CFrameWnd::Dump(dc);
01141 }
01142
01143 #endif //_DEBUG
01144
01146
01147 void CMainFrame::CreateQEChildren()
01148 {
01149
01150
01151 bool bProjectLoaded = false;
01152 if (AfxGetApp()->m_lpCmdLine && strlen(AfxGetApp()->m_lpCmdLine))
01153 {
01154 ParseCommandLine (AfxGetApp()->m_lpCmdLine);
01155 bProjectLoaded = QE_LoadProject(argv[1]);
01156 }
01157 else
01158 {
01159 if (g_PrefsDlg.m_bLoadLast && g_PrefsDlg.m_strLastProject.GetLength() > 0)
01160 {
01161 bProjectLoaded = QE_LoadProject(g_PrefsDlg.m_strLastProject.GetBuffer(0));
01162 }
01163 if (!bProjectLoaded)
01164 {
01165 CString str = g_strAppPath;
01166 AddSlash(str);
01167 str += "../baseq3/scripts/quake.qe4";
01168 char cWork[1024];
01169 char *pFile = NULL;
01170 GetFullPathName(str, 1024, cWork, &pFile);
01171 bProjectLoaded = QE_LoadProject(cWork);
01172 }
01173 if (!bProjectLoaded)
01174 {
01175 bProjectLoaded = QE_LoadProject("scripts/quake.qe4");
01176 }
01177 }
01178
01179 if (!bProjectLoaded)
01180 {
01181 #if 0
01182
01183 char* pBuff = new char[1024];
01184 ::GetCurrentDirectory(1024, pBuff);
01185 CString strDefProj = g_strAppPath;
01186 AddSlash(strDefProj);
01187 strDefProj += "defproj";
01188 if (::SetCurrentDirectory(strDefProj))
01189 {
01190 bProjectLoaded = QE_LoadProject("scripts/quake.qe4");
01191 if (bProjectLoaded)
01192 {
01193
01194 g_PrefsDlg.m_bLoadLast = TRUE;
01195 AddSlash(strDefProj);
01196 strDefProj += "maps\\defproj.map";
01197 g_PrefsDlg.m_strLastMap = strDefProj;
01198 g_PrefsDlg.SavePrefs();
01199 }
01200 }
01201 else
01202 {
01203 ::SetCurrentDirectory(pBuff);
01204 }
01205 delete []pBuff;
01206 #endif
01207
01208 if (!bProjectLoaded)
01209 {
01210 Sys_Printf ("Using default.qe4. You may experience problems. See the readme.txt\n");
01211 CString strProj = g_strAppPath;
01212 strProj += "\\default.qe4";
01213 bProjectLoaded = QE_LoadProject(strProj.GetBuffer(0));
01214
01215 if (!bProjectLoaded)
01216 {
01217 CFileDialog dlgFile(true, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Q3Radiant Project files (*.qe4, *.prj)|*.qe4|*.prj||", this);
01218 if (dlgFile.DoModal() == IDOK)
01219 bProjectLoaded = QE_LoadProject(dlgFile.GetPathName().GetBuffer(0));
01220 }
01221 }
01222 }
01223
01224 if (!bProjectLoaded)
01225 Error("Unable to load project file. It was unavailable in the scripts path and the default could not be found");
01226
01227
01228 if (g_PrefsDlg.m_bPAK == TRUE)
01229 {
01230
01231
01232 InitPakFile(ValueForKey(g_qeglobals.d_project_entity, "basepath"), NULL);
01233 }
01234
01235 QE_Init ();
01236
01237 Sys_Printf ("Entering message loop\n");
01238
01239 m_bDoLoop = true;
01240 SetTimer(QE_TIMER0, 1000, NULL);
01241
01242 }
01243
01244 BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam)
01245 {
01246 return CFrameWnd::OnCommand(wParam, lParam);
01247 }
01248
01249 LRESULT CMainFrame::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
01250 {
01251 RoutineProcessing();
01252 return CFrameWnd::DefWindowProc(message, wParam, lParam);
01253 }
01254
01255
01256 void CMainFrame::RoutineProcessing()
01257 {
01258 if (m_bDoLoop)
01259 {
01260 double time = 0.0;
01261 double oldtime = 0.0;
01262 double delta= 0.0;
01263
01264 CheckBspProcess ();
01265 time = Sys_DoubleTime ();
01266 delta = time - oldtime;
01267 oldtime = time;
01268 if (delta > 0.2)
01269 delta = 0.2;
01270
01271
01272 if (m_pCamWnd)
01273 m_pCamWnd->Cam_MouseControl(delta);
01274
01275 if (g_PrefsDlg.m_bQE4Painting && g_nUpdateBits)
01276 {
01277 int nBits = g_nUpdateBits;
01278 g_nUpdateBits = 0;
01279 UpdateWindows(nBits);
01280 }
01281
01282 }
01283 }
01284
01285 LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
01286 {
01287 return CFrameWnd::WindowProc(message, wParam, lParam);
01288 }
01289
01290 bool MouseDown()
01291 {
01292 if (::GetAsyncKeyState(VK_LBUTTON))
01293 return true;
01294 if (::GetAsyncKeyState(VK_RBUTTON))
01295 return true;
01296 if (::GetAsyncKeyState(VK_MBUTTON))
01297 return true;
01298 return false;
01299 }
01300
01301
01302 void CMainFrame::OnTimer(UINT nIDEvent)
01303 {
01304 if (!MouseDown())
01305 {
01306 QE_CountBrushesAndUpdateStatusBar();
01307 QE_CheckAutoSave();
01308 }
01309 }
01310 struct SplitInfo
01311 {
01312 int m_nMin;
01313 int m_nCur;
01314 };
01315
01316 bool LoadWindowPlacement(HWND hwnd, const char* pName)
01317 {
01318 WINDOWPLACEMENT wp;
01319 wp.length = sizeof(WINDOWPLACEMENT);
01320 LONG lSize = sizeof(wp);
01321 if (LoadRegistryInfo(pName, &wp, &lSize))
01322 {
01323 ::SetWindowPlacement(hwnd, &wp);
01324 return true;
01325 }
01326 return false;
01327 }
01328
01329 void SaveWindowPlacement(HWND hwnd, const char* pName)
01330 {
01331 WINDOWPLACEMENT wp;
01332 wp.length = sizeof(WINDOWPLACEMENT);
01333 if (::GetWindowPlacement(hwnd, &wp))
01334 {
01335 SaveRegistryInfo(pName, &wp, sizeof(wp));
01336 }
01337 }
01338
01339
01340 void CMainFrame::OnDestroy()
01341 {
01342 KillTimer(QE_TIMER0);
01343
01344 SaveBarState("RadiantToolBars2");
01345
01346
01347
01348 SaveMruInReg(g_qeglobals.d_lpMruMenu,"Software\\id\\QuakeEd4\\MRU");
01349
01350 DeleteMruMenu(g_qeglobals.d_lpMruMenu);
01351
01352 SaveWindowPlacement(GetSafeHwnd(), "Radiant::MainWindowPlace");
01353
01354
01355
01356
01357 if (m_nCurrentStyle == 0 || m_nCurrentStyle == 3)
01358 {
01359 SaveWindowState(m_wndSplit.GetSafeHwnd(), "Radiant::Split");
01360 SaveWindowState(m_wndSplit2.GetSafeHwnd(), "Radiant::Split2");
01361 SaveWindowState(m_wndSplit3.GetSafeHwnd(), "Radiant::Split3");
01362
01363 SplitInfo spinfo;
01364 m_wndSplit.GetRowInfo(0, spinfo.m_nCur, spinfo.m_nMin);
01365 SaveRegistryInfo("Radiant::Split::Row_0", &spinfo, sizeof(spinfo));
01366 m_wndSplit.GetRowInfo(1, spinfo.m_nCur, spinfo.m_nMin);
01367 SaveRegistryInfo("Radiant::Split::Row_1", &spinfo, sizeof(spinfo));
01368
01369 m_wndSplit2.GetColumnInfo(0, spinfo.m_nCur, spinfo.m_nMin);
01370 SaveRegistryInfo("Radiant::Split2::Col_0", &spinfo, sizeof(spinfo));
01371 m_wndSplit2.GetColumnInfo(1, spinfo.m_nCur, spinfo.m_nMin);
01372 SaveRegistryInfo("Radiant::Split2::Col_1", &spinfo, sizeof(spinfo));
01373 m_wndSplit2.GetColumnInfo(2, spinfo.m_nCur, spinfo.m_nMin);
01374 SaveRegistryInfo("Radiant::Split2::Col_2", &spinfo, sizeof(spinfo));
01375
01376 m_wndSplit3.GetRowInfo(0, spinfo.m_nCur, spinfo.m_nMin);
01377 SaveRegistryInfo("Radiant::Split3::Row_0", &spinfo, sizeof(spinfo));
01378 m_wndSplit3.GetRowInfo(1, spinfo.m_nCur, spinfo.m_nMin);
01379 SaveRegistryInfo("Radiant::Split3::Row_1", &spinfo, sizeof(spinfo));
01380 }
01381 else
01382 {
01383 SaveWindowPlacement(m_pXYWnd->GetSafeHwnd(), "xywindow");
01384 SaveWindowPlacement(m_pXZWnd->GetSafeHwnd(), "xzwindow");
01385 SaveWindowPlacement(m_pYZWnd->GetSafeHwnd(), "yzwindow");
01386 SaveWindowPlacement(m_pCamWnd->GetSafeHwnd(), "camerawindow");
01387 SaveWindowPlacement(m_pZWnd->GetSafeHwnd(), "zwindow");
01388 SaveWindowState(m_pTexWnd->GetSafeHwnd(), "texwindow");
01389 SaveWindowState(m_pEditWnd->GetSafeHwnd(), "editwindow");
01390 }
01391
01392 if (m_pXYWnd->GetSafeHwnd())
01393 m_pXYWnd->SendMessage(WM_DESTROY, 0, 0);
01394 delete m_pXYWnd; m_pXYWnd = NULL;
01395
01396 if (m_pYZWnd->GetSafeHwnd())
01397 m_pYZWnd->SendMessage(WM_DESTROY, 0, 0);
01398 delete m_pYZWnd; m_pYZWnd = NULL;
01399
01400 if (m_pXZWnd->GetSafeHwnd())
01401 m_pXZWnd->SendMessage(WM_DESTROY, 0, 0);
01402 delete m_pXZWnd; m_pXZWnd = NULL;
01403
01404 if (m_pZWnd->GetSafeHwnd())
01405 m_pZWnd->SendMessage(WM_DESTROY, 0, 0);
01406 delete m_pZWnd; m_pZWnd = NULL;
01407
01408 if (m_pTexWnd->GetSafeHwnd())
01409 m_pTexWnd->SendMessage(WM_DESTROY, 0, 0);
01410 delete m_pTexWnd; m_pTexWnd = NULL;
01411
01412 if (m_pEditWnd->GetSafeHwnd())
01413 m_pEditWnd->SendMessage(WM_DESTROY, 0, 0);
01414 delete m_pEditWnd; m_pEditWnd = NULL;
01415
01416 if (m_pCamWnd->GetSafeHwnd())
01417 m_pCamWnd->SendMessage(WM_DESTROY, 0, 0);
01418 delete m_pCamWnd;m_pCamWnd = NULL;
01419
01420 SaveRegistryInfo("SavedInfo", &g_qeglobals.d_savedinfo, sizeof(g_qeglobals.d_savedinfo));
01421
01422 if (strcmpi(currentmap, "unnamed.map") != 0)
01423 {
01424 g_PrefsDlg.m_strLastMap = currentmap;
01425 g_PrefsDlg.SavePrefs();
01426 }
01427 CleanUpEntities();
01428
01429 while (active_brushes.next != &active_brushes)
01430 Brush_Free (active_brushes.next, false);
01431 while (selected_brushes.next != &selected_brushes)
01432 Brush_Free (selected_brushes.next, false);
01433 while (filtered_brushes.next != &filtered_brushes)
01434 Brush_Free (filtered_brushes.next, false);
01435
01436 while (entities.next != &entities)
01437 Entity_Free (entities.next);
01438
01439 epair_t* pEPair = g_qeglobals.d_project_entity->epairs;
01440 while (pEPair)
01441 {
01442 epair_t* pNextEPair = pEPair->next;
01443 free (pEPair->key);
01444 free (pEPair->value);
01445 free (pEPair);
01446 pEPair = pNextEPair;
01447 }
01448
01449 entity_t* pEntity = g_qeglobals.d_project_entity->next;
01450 while (pEntity != NULL && pEntity != g_qeglobals.d_project_entity)
01451 {
01452 entity_t* pNextEntity = pEntity->next;
01453 Entity_Free(pEntity);
01454 pEntity = pNextEntity;
01455 }
01456
01457 Texture_Cleanup();
01458
01459 if (world_entity)
01460 Entity_Free(world_entity);
01461
01462 if (notexture)
01463 {
01464
01465
01466 #ifdef _DEBUG
01467 if ( !notexture->pData )
01468 Sys_Printf("WARNING: found a qtexture_t* with no IPluginQTexture\n");
01469 #endif
01470 if ( notexture->pData )
01471 GETPLUGINTEXDEF(notexture)->DecRef();
01472
01473 free(notexture);
01474 }
01475
01476
01477
01478 ClosePakFile();
01479
01480 FreeShaders();
01481
01482 CFrameWnd::OnDestroy();
01483 }
01484
01485 void CMainFrame::OnClose()
01486 {
01487 if (ConfirmModified())
01488 {
01489 CFrameWnd::OnClose();
01490 }
01491 }
01492
01493 void CMainFrame::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
01494 {
01495
01496
01497 for (int i = 0; i < g_nCommandCount; i++)
01498 {
01499 if (g_Commands[i].m_nKey == nChar)
01500 {
01501 bool bGo = true;
01502 if (g_Commands[i].m_nModifiers & RAD_PRESS)
01503 {
01504 int nModifiers = g_Commands[i].m_nModifiers & ~RAD_PRESS;
01505 if (nModifiers)
01506 {
01507 if (nModifiers & RAD_ALT)
01508 if (!(GetKeyState(VK_MENU) & 0x8000))
01509 bGo = false;
01510 if (nModifiers & RAD_CONTROL)
01511 if (!(GetKeyState(VK_CONTROL) & 0x8000))
01512 bGo = false;
01513 if (nModifiers & RAD_SHIFT)
01514 if (!(GetKeyState(VK_SHIFT) & 0x8000))
01515 bGo = false;
01516 }
01517 else
01518 {
01519 if (GetKeyState(VK_MENU) & 0x8000)
01520 bGo = false;
01521 if (GetKeyState(VK_CONTROL) & 0x8000)
01522 bGo = false;
01523 if (GetKeyState(VK_SHIFT) & 0x8000)
01524 bGo = false;
01525 }
01526 if (bGo)
01527 {
01528 SendMessage(WM_COMMAND, g_Commands[i].m_nCommand, 0);
01529 break;
01530 }
01531 }
01532 }
01533 }
01534 }
01535
01536 bool CamOK(unsigned int nKey)
01537 {
01538 if (nKey == VK_UP || nKey == VK_LEFT || nKey == VK_RIGHT || nKey == VK_DOWN)
01539 {
01540 if (::GetAsyncKeyState(nKey))
01541 return true;
01542 else
01543 return false;
01544 }
01545 return true;
01546 }
01547
01548
01549 void CMainFrame::OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
01550 {
01551
01552 if (nChar == VK_DOWN)
01553 {
01554 OnKeyDown(nChar, nRepCnt, nFlags);
01555 }
01556 CFrameWnd::OnSysKeyDown(nChar, nRepCnt, nFlags);
01557 }
01558
01559 void CMainFrame::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
01560 {
01561 for (int i = 0; i < g_nCommandCount; i++)
01562 {
01563 if (g_Commands[i].m_nKey == nChar)
01564 {
01565
01566 unsigned int nState = 0;
01567 if (GetKeyState(VK_MENU) & 0x8000)
01568 nState |= RAD_ALT;
01569 if (GetKeyState(VK_CONTROL) & 0x8000)
01570 nState |= RAD_CONTROL;
01571 if (GetKeyState(VK_SHIFT) & 0x8000)
01572 nState |= RAD_SHIFT;
01573 if ((g_Commands[i].m_nModifiers & 0x7) == nState)
01574 {
01575 SendMessage(WM_COMMAND, g_Commands[i].m_nCommand, 0);
01576 break;
01577 }
01578 }
01579 }
01580 CFrameWnd::OnKeyDown(nChar, nRepCnt, nFlags);
01581 }
01582
01583 BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
01584 {
01585 g_qeglobals.d_hwndMain = GetSafeHwnd();
01586 g_qeglobals.d_hwndStatus = GetMessageBar()->GetSafeHwnd();
01587
01588
01589
01590
01591
01592
01593
01594
01595
01596 m_nCurrentStyle = g_PrefsDlg.m_nView;
01597
01598 CreateEntityWindow(AfxGetInstanceHandle());
01599
01600 g_pGroupDlg->Create( IDD_DLG_GROUP, this);
01601 g_qeglobals.d_hwndGroup = g_pGroupDlg->GetSafeHwnd();
01602 ::SetParent(g_qeglobals.d_hwndGroup, g_qeglobals.d_hwndEntity);
01603 g_pGroupDlg->ShowWindow(SW_SHOW);
01604
01605 if (!LoadWindowPlacement(GetSafeHwnd(), "Radiant::MainWindowPlace"))
01606 {
01607 LoadWindowState(GetSafeHwnd(), "Radiant::MainWindow");
01608 }
01609
01610
01611
01612
01613 CRect rect(5,25, 100, 100);
01614 CRect rctParent;
01615 GetClientRect(rctParent);
01616
01617 if (g_PrefsDlg.m_nView == 0 || g_PrefsDlg.m_nView == 3)
01618 {
01619 m_wndSplit.CreateStatic(this, 2, 1);
01620 m_wndSplit2.CreateStatic(&m_wndSplit, 1, 3);
01621 m_wndSplit3.CreateStatic(&m_wndSplit2, 2,1);
01622
01623 m_wndSplit.CreateView(1,0,RUNTIME_CLASS(CEditWnd), CSize(25, 100), pContext);
01624 g_pEdit = dynamic_cast<CEdit*>(m_wndSplit.GetPane(1,0));
01625 if (g_pEdit)
01626 g_qeglobals.d_hwndEdit = g_pEdit->GetSafeHwnd();
01627
01628 m_wndSplit3.CreateView(0,0,RUNTIME_CLASS(CCamWnd), CSize(25, 100), pContext);
01629 m_pCamWnd = dynamic_cast<CCamWnd*>(m_wndSplit3.GetPane(0,0));
01630
01631 m_wndSplit2.CreateView(0,1,RUNTIME_CLASS(CXYWnd), CSize(25, 100), pContext);
01632 m_pXYWnd = dynamic_cast<CXYWnd*>(m_wndSplit2.GetPane(0,1));
01633 m_pXYWnd->SetViewType(XY);
01634
01635 m_pCamWnd->SetXYFriend(m_pXYWnd);
01636
01637 m_wndSplit2.CreateView(0,2,RUNTIME_CLASS(CZWnd), CSize(25, 100), pContext);
01638 m_pZWnd = dynamic_cast<CZWnd*>(m_wndSplit2.GetPane(0,2));
01639
01640 m_wndSplit3.CreateView(1,0,RUNTIME_CLASS(CTexWnd), CSize(25, 100), pContext);
01641 m_pTexWnd = dynamic_cast<CTexWnd*>(m_wndSplit3.GetPane(1,0));
01642
01643 CreateQEChildren();
01644
01645 if (g_PrefsDlg.m_nView == 0)
01646 {
01647
01648 CWnd* pRight = m_wndSplit2.GetPane(0,2);
01649 long lRightID = ::GetWindowLong(pRight->GetSafeHwnd(), GWL_ID);
01650 long lLeftID = ::GetWindowLong(m_wndSplit3.GetSafeHwnd(), GWL_ID);
01651 ::SetWindowLong(pRight->GetSafeHwnd(), GWL_ID, lLeftID);
01652 ::SetWindowLong(m_wndSplit3.GetSafeHwnd(), GWL_ID, lRightID);
01653 }
01654
01655 m_wndSplit.SetRowInfo(0, rctParent.Height() * .85, 50);
01656 m_wndSplit.SetRowInfo(1, rctParent.Height() * .15, 5);
01657
01658 float fLeft = (g_PrefsDlg.m_nView == 0) ? .05 : .25;
01659 float fRight = (g_PrefsDlg.m_nView == 0) ? .25 : .05;
01660 int nMin1 = (g_PrefsDlg.m_nView == 0) ? 10 : 25;
01661 int nMin2 = (nMin1 == 10) ? 25 : 10;
01662
01663 m_wndSplit2.SetColumnInfo(0, rctParent.Width() * fLeft, nMin1);
01664 m_wndSplit2.SetColumnInfo(1, rctParent.Width() * .70, 100);
01665 m_wndSplit2.SetColumnInfo(2, rctParent.Width() * fRight, nMin2);
01666
01667 m_wndSplit3.SetRowInfo(1, (rctParent.Height() * .85) * .40, 15);
01668 m_wndSplit3.SetRowInfo(0, (rctParent.Height() * .85) * .60, 15);
01669
01670 LoadWindowState(m_wndSplit.GetSafeHwnd(), "Radiant::Split");
01671 LoadWindowState(m_wndSplit2.GetSafeHwnd(), "Radiant::Split2");
01672 LoadWindowState(m_wndSplit3.GetSafeHwnd(), "Radiant::Split3");
01673 ::ShowWindow(g_qeglobals.d_hwndEntity, SW_HIDE);
01674
01675 SplitInfo spinfo;
01676 long lSize = sizeof(spinfo);
01677 if (LoadRegistryInfo("Radiant::Split::Row_0", &spinfo, &lSize))
01678 m_wndSplit.SetRowInfo(0, spinfo.m_nCur, spinfo.m_nMin);
01679 if (LoadRegistryInfo("Radiant::Split::Row_1", &spinfo, &lSize))
01680 m_wndSplit.SetRowInfo(1, spinfo.m_nCur, spinfo.m_nMin);
01681
01682 if (LoadRegistryInfo("Radiant::Split2::Col_0", &spinfo, &lSize))
01683 m_wndSplit2.SetColumnInfo(0, spinfo.m_nCur, spinfo.m_nMin);
01684 if (LoadRegistryInfo("Radiant::Split2::Col_1", &spinfo, &lSize))
01685 m_wndSplit2.SetColumnInfo(1, spinfo.m_nCur, spinfo.m_nMin);
01686 if (LoadRegistryInfo("Radiant::Split2::Col_2", &spinfo, &lSize))
01687 m_wndSplit2.SetColumnInfo(2, spinfo.m_nCur, spinfo.m_nMin);
01688
01689 if (LoadRegistryInfo("Radiant::Split3::Row_0", &spinfo, &lSize))
01690 m_wndSplit3.SetRowInfo(0, spinfo.m_nCur, spinfo.m_nMin);
01691 if (LoadRegistryInfo("Radiant::Split3::Row_1", &spinfo, &lSize))
01692 m_wndSplit3.SetRowInfo(1, spinfo.m_nCur, spinfo.m_nMin);
01693
01694 m_wndSplit.RecalcLayout();
01695 m_wndSplit2.RecalcLayout();
01696 m_wndSplit3.RecalcLayout();
01697 }
01698 else if (g_PrefsDlg.m_nView == 1)
01699 {
01700 m_pCamWnd = new CCamWnd();
01701 m_pCamWnd->Create(CAMERA_WINDOW_CLASS, "", QE3_CHILDSTYLE, rect, this, 1234);
01702
01703 m_pZWnd = new CZWnd();
01704 m_pZWnd->Create(Z_WINDOW_CLASS, "", QE3_CHILDSTYLE, rect, this, 1238);
01705
01706 m_pXYWnd = new CXYWnd();
01707 m_pXYWnd->Create(XY_WINDOW_CLASS, "", QE3_CHILDSTYLE, rect, this, 1235);
01708 m_pXYWnd->SetViewType(XY);
01709
01710 m_pXZWnd = new CXYWnd();
01711 m_pXZWnd->Create(XY_WINDOW_CLASS, "", QE3_CHILDSTYLE, rect, this, 1236);
01712 m_pXZWnd->SetViewType(XZ);
01713
01714 m_pYZWnd = new CXYWnd();
01715 m_pYZWnd->Create(XY_WINDOW_CLASS, "", QE3_CHILDSTYLE, rect, this, 1237);
01716 m_pYZWnd->SetViewType(YZ);
01717
01718 m_pCamWnd->SetXYFriend(m_pXYWnd);
01719
01720 m_pTexWnd = new CTexWnd();
01721 m_pTexWnd->Create(TEXTURE_WINDOW_CLASS, "", QE3_SPLITTER_STYLE, rect, this, 1239);
01722 ::SetParent(m_pTexWnd->GetSafeHwnd(), g_qeglobals.d_hwndEntity);
01723
01724 CRect rctWork;
01725
01726
01727
01728
01729 #if 0
01730 int xTex = 1;
01731 int xXY = 1 + xTex + ((float)rctParent.Width()) * .30;
01732 int xZ = 1 + xXY + ((float)rctParent.Width()) * .60;
01733 int yXY = 1;
01734 int yTex = 1 + ((float)rctParent.Height()) * .45;
01735 m_pXYWnd->SetWindowPos(NULL, xXY, yXY, ((float)rctParent.Width()) * .60, rctParent.Height() - 2, SWP_SHOWWINDOW);
01736 m_pXZWnd->SetWindowPos(NULL, xXY, yXY, ((float)rctParent.Width()) * .60, rctParent.Height() - 2, SWP_SHOWWINDOW);
01737 m_pYZWnd->SetWindowPos(NULL, xXY, yXY, ((float)rctParent.Width()) * .60, rctParent.Height() - 2, SWP_SHOWWINDOW);
01738 m_pCamWnd->SetWindowPos(NULL, xTex, yXY, ((float)rctParent.Width()) *.30, ((float)rctParent.Height()) * .45, SWP_SHOWWINDOW);
01739 m_pTexWnd->SetWindowPos(NULL, xTex, yTex, ((float)rctParent.Width()) *.30, ((float)rctParent.Height()) * .45, SWP_SHOWWINDOW);
01740 #endif
01741
01742 LoadWindowPlacement(m_pXYWnd->GetSafeHwnd(), "xywindow");
01743 LoadWindowPlacement(m_pXZWnd->GetSafeHwnd(), "xzwindow");
01744 LoadWindowPlacement(m_pYZWnd->GetSafeHwnd(), "yzwindow");
01745 LoadWindowPlacement(m_pCamWnd->GetSafeHwnd(), "camerawindow");
01746 LoadWindowPlacement(m_pZWnd->GetSafeHwnd(), "zwindow");
01747
01748 if (!g_PrefsDlg.m_bXZVis)
01749 m_pXZWnd->ShowWindow(SW_HIDE);
01750 if (!g_PrefsDlg.m_bYZVis)
01751 m_pYZWnd->ShowWindow(SW_HIDE);
01752 if (!g_PrefsDlg.m_bZVis)
01753 m_pZWnd->ShowWindow(SW_HIDE);
01754
01755 CreateQEChildren();
01756 }
01757 else
01758 {
01759 m_wndSplit.CreateStatic(this, 2, 2);
01760
01761 m_wndSplit.CreateView(0,0,RUNTIME_CLASS(CCamWnd), CSize(25, 100), pContext);
01762 m_pCamWnd = dynamic_cast<CCamWnd*>(m_wndSplit.GetPane(0,0));
01763
01764 m_wndSplit.CreateView(0,1,RUNTIME_CLASS(CXYWnd), CSize(25, 100), pContext);
01765 m_pXYWnd = dynamic_cast<CXYWnd*>(m_wndSplit.GetPane(0,1));
01766 m_pXYWnd->SetViewType(XY);
01767
01768 m_wndSplit.CreateView(1,0,RUNTIME_CLASS(CXYWnd), CSize(25, 100), pContext);
01769 m_pYZWnd = dynamic_cast<CXYWnd*>(m_wndSplit.GetPane(1,0));
01770 m_pYZWnd->SetViewType(YZ);
01771
01772 m_wndSplit.CreateView(1,1,RUNTIME_CLASS(CXYWnd), CSize(25, 100), pContext);
01773 m_pXZWnd = dynamic_cast<CXYWnd*>(m_wndSplit.GetPane(1,1));
01774 m_pXZWnd->SetViewType(XZ);
01775
01776 m_pCamWnd->SetXYFriend(m_pXYWnd);
01777
01778 m_pTexWnd = new CTexWnd();
01779 m_pTexWnd->Create(TEXTURE_WINDOW_CLASS, "", QE3_SPLITTER_STYLE, rect, this, 1237);
01780 ::SetParent(m_pTexWnd->GetSafeHwnd(), g_qeglobals.d_hwndEntity);
01781
01782 m_pZWnd = new CZWnd();
01783 m_pZWnd->Create(Z_WINDOW_CLASS, "", QE3_CHILDSTYLE, rect, this, 1236);
01784 m_pZWnd->ShowWindow(SW_HIDE);
01785
01786
01787
01788
01789
01790
01791
01792
01793 LoadWindowState(m_pTexWnd->GetSafeHwnd(), "texwindow");
01794 LoadWindowState(m_pEditWnd->GetSafeHwnd(), "editwindow");
01795 ::ShowWindow(g_qeglobals.d_hwndEntity, SW_HIDE);
01796
01797 CreateQEChildren();
01798
01799 CRect rctParent;
01800 GetClientRect(rctParent);
01801
01802 m_wndSplit.SetRowInfo(0, rctParent.Height() * .5, 50);
01803 m_wndSplit.SetRowInfo(1, rctParent.Height() * .5, 50);
01804
01805 m_wndSplit.SetColumnInfo(0, rctParent.Width() * .5, 50);
01806 m_wndSplit.SetColumnInfo(1, rctParent.Width() * .5, 50);
01807
01808 LoadWindowState(m_wndSplit.GetSafeHwnd(), "Radiant::SplitSPLIT");
01809
01810 m_wndSplit.RecalcLayout();
01811 }
01812
01813 if (g_pEdit)
01814 g_pEdit->SendMessage(WM_SETFONT, (WPARAM)::GetStockObject(DEFAULT_GUI_FONT), (LPARAM)TRUE);
01815
01816
01817 if (m_pXYWnd)
01818 m_pXYWnd->SetActive(true);
01819 m_bSplittersOK = true;
01820 Texture_SetMode(g_qeglobals.d_savedinfo.iTexMenu);
01821
01822 return TRUE;
01823 }
01824
01825 CRect g_rctOld(0,0,0,0);
01826 void CMainFrame::OnSize(UINT nType, int cx, int cy)
01827 {
01828 CFrameWnd::OnSize(nType, cx, cy);
01829
01830 CRect rctParent;
01831 GetClientRect(rctParent);
01832
01833 UINT nID;
01834 UINT nStyle;
01835 int nWidth;
01836 if (m_wndStatusBar.GetSafeHwnd())
01837 {
01838 m_wndStatusBar.GetPaneInfo(0, nID, nStyle, nWidth);
01839 m_wndStatusBar.SetPaneInfo(0, nID, nStyle, rctParent.Width() * .19);
01840 m_wndStatusBar.GetPaneInfo(1, nID, nStyle, nWidth);
01841 m_wndStatusBar.SetPaneInfo(1, nID, nStyle, rctParent.Width() * .19);
01842 m_wndStatusBar.GetPaneInfo(2, nID, nStyle, nWidth);
01843 m_wndStatusBar.SetPaneInfo(2, nID, nStyle, rctParent.Width() * .19);
01844 m_wndStatusBar.GetPaneInfo(3, nID, nStyle, nWidth);
01845 m_wndStatusBar.SetPaneInfo(3, nID, nStyle, rctParent.Width() * .19);
01846 m_wndStatusBar.GetPaneInfo(4, nID, nStyle, nWidth);
01847 m_wndStatusBar.SetPaneInfo(4, nID, nStyle, rctParent.Width() * .13);
01848 m_wndStatusBar.GetPaneInfo(5, nID, nStyle, nWidth);
01849 m_wndStatusBar.SetPaneInfo(5, nID, nStyle, rctParent.Width() * .01);
01850 }
01851
01852 if (nType == SIZE_RESTORED && m_bSplittersOK && g_rctOld.Width() > 0)
01853 {
01854 if (m_nCurrentStyle == 0 || m_nCurrentStyle == 3)
01855 {
01856 SplitInfo spinfo;
01857 m_wndSplit.GetRowInfo(0, spinfo.m_nCur, spinfo.m_nMin);
01858 float fpc1 = (float)spinfo.m_nCur / g_rctOld.Height();
01859 m_wndSplit.GetRowInfo(1, spinfo.m_nCur, spinfo.m_nMin);
01860 float fpc2 = (float)spinfo.m_nCur / g_rctOld.Height();
01861 m_wndSplit2.GetColumnInfo(0, spinfo.m_nCur, spinfo.m_nMin);
01862 float fpc3 = (float)spinfo.m_nCur / g_rctOld.Width();
01863 m_wndSplit2.GetColumnInfo(1, spinfo.m_nCur, spinfo.m_nMin);
01864 float fpc4 = (float)spinfo.m_nCur / g_rctOld.Width();
01865 m_wndSplit2.GetColumnInfo(2, spinfo.m_nCur, spinfo.m_nMin);
01866 float fpc5 = (float)spinfo.m_nCur / g_rctOld.Width();
01867 m_wndSplit3.GetRowInfo(0, spinfo.m_nCur, spinfo.m_nMin);
01868 float fpc6 = (float)spinfo.m_nCur / g_rctOld.Height();
01869 m_wndSplit3.GetRowInfo(1, spinfo.m_nCur, spinfo.m_nMin);
01870 float fpc7 = (float)spinfo.m_nCur / g_rctOld.Height();
01871
01872 m_wndSplit.SetRowInfo(0, rctParent.Height() * fpc1, 100);
01873 m_wndSplit.SetRowInfo(1, rctParent.Height() * fpc2, 25);
01874
01875 int nMin1 = (m_nCurrentStyle == 0) ? 10 : 25;
01876 int nMin2 = (nMin1 == 10) ? 25 : 10;
01877
01878 m_wndSplit2.SetColumnInfo(0, rctParent.Width() * fpc3, nMin1);
01879 m_wndSplit2.SetColumnInfo(1, rctParent.Width() * fpc4, 100);
01880 m_wndSplit2.SetColumnInfo(2, rctParent.Width() * fpc5, nMin2);
01881
01882 m_wndSplit3.SetRowInfo(0, rctParent.Height() * fpc6, 50);
01883 m_wndSplit3.SetRowInfo(1, rctParent.Height() * fpc7, 50);
01884
01885 m_wndSplit.RecalcLayout();
01886 m_wndSplit2.RecalcLayout();
01887 m_wndSplit3.RecalcLayout();
01888 }
01889 }
01890
01891
01892 }
01893
01894
01895 void OpenDialog (void);
01896 void SaveAsDialog (bool bRegion);
01897 void Select_Ungroup (void);
01898
01899 void CMainFrame::ToggleCamera()
01900 {
01901 if (m_bCamPreview)
01902 m_bCamPreview = false;
01903 else
01904 m_bCamPreview = true;
01905 }
01906
01907 void CMainFrame::OnFileClose()
01908 {
01909
01910 }
01911
01912 void CMainFrame::OnFileExit()
01913 {
01914 PostMessage (WM_CLOSE, 0, 0L);
01915 }
01916
01917 void CMainFrame::OnFileLoadproject()
01918 {
01919 if (ConfirmModified())
01920 ProjectDialog ();
01921 }
01922
01923 void CMainFrame::OnFileNew()
01924 {
01925 if (ConfirmModified())
01926 Map_New ();
01927 }
01928
01929 void CMainFrame::OnFileOpen()
01930 {
01931 if (ConfirmModified())
01932 OpenDialog ();
01933 }
01934
01935 void CMainFrame::OnFilePointfile()
01936 {
01937 if (g_qeglobals.d_pointfile_display_list)
01938 Pointfile_Clear ();
01939 else
01940 Pointfile_Check ();
01941 }
01942
01943 void CMainFrame::OnFilePrint()
01944 {
01945
01946 }
01947
01948 void CMainFrame::OnFilePrintPreview()
01949 {
01950
01951 }
01952
01953 void CMainFrame::OnFileSave()
01954 {
01955 if (!strcmp(currentmap, "unnamed.map"))
01956 {
01957 SaveAsDialog (false);
01958 }
01959 else
01960 {
01961 Map_SaveFile (currentmap, false);
01962 }
01963 }
01964
01965 void CMainFrame::OnFileSaveas()
01966 {
01967 SaveAsDialog(false);
01968 }
01969
01970 void CMainFrame::OnView100()
01971 {
01972 if (m_pXYWnd)
01973 m_pXYWnd->SetScale(1);
01974 if (m_pXZWnd)
01975 m_pXZWnd->SetScale(1);
01976 if (m_pYZWnd)
01977 m_pYZWnd->SetScale(1);
01978 Sys_UpdateWindows (W_XY|W_XY_OVERLAY);
01979 }
01980
01981 void CMainFrame::OnViewCenter()
01982 {
01983 m_pCamWnd->Camera().angles[ROLL] = m_pCamWnd->Camera().angles[PITCH] = 0;
01984 m_pCamWnd->Camera().angles[YAW] = 22.5 *
01985 floor( (m_pCamWnd->Camera().angles[YAW]+11)/22.5 );
01986 Sys_UpdateWindows (W_CAMERA | W_XY_OVERLAY);
01987 }
01988
01989 void CMainFrame::OnViewConsole()
01990 {
01991 if (m_nCurrentStyle > 0 && m_nCurrentStyle < 3)
01992 {
01993 if (inspector_mode == W_CONSOLE && m_nCurrentStyle != QR_QE4)
01994 {
01995 if (::IsWindowVisible(g_qeglobals.d_hwndEntity))
01996 ::ShowWindow(g_qeglobals.d_hwndEntity, SW_HIDE);
01997 else
01998 ::ShowWindow(g_qeglobals.d_hwndEntity, SW_NORMAL);
01999 }
02000 else
02001 {
02002 ::ShowWindow(g_qeglobals.d_hwndEntity, SW_NORMAL);
02003 SetInspectorMode(W_CONSOLE);
02004 }
02005 }
02006 }
02007
02008 void CMainFrame::OnViewDownfloor()
02009 {
02010 m_pCamWnd->Cam_ChangeFloor (false);
02011 }
02012
02013 void CMainFrame::OnViewEntity()
02014 {
02015 if (m_nCurrentStyle == 0 || m_nCurrentStyle == 3)
02016 {
02017 if (::IsWindowVisible(g_qeglobals.d_hwndEntity) && inspector_mode == W_ENTITY)
02018 ::ShowWindow(g_qeglobals.d_hwndEntity, SW_HIDE);
02019 else
02020 {
02021 ::ShowWindow(g_qeglobals.d_hwndEntity, SW_NORMAL);
02022 SetInspectorMode(W_ENTITY);
02023 }
02024 }
02025 else
02026 {
02027 if (inspector_mode == W_ENTITY && m_nCurrentStyle != QR_QE4)
02028 {
02029 if (::IsWindowVisible(g_qeglobals.d_hwndEntity))
02030 ::ShowWindow(g_qeglobals.d_hwndEntity, SW_HIDE);
02031 else
02032 ::ShowWindow(g_qeglobals.d_hwndEntity, SW_NORMAL);
02033 }
02034 else
02035 {
02036 ::ShowWindow(g_qeglobals.d_hwndEntity, SW_NORMAL);
02037 SetInspectorMode(W_ENTITY);
02038 }
02039 }
02040 }
02041
02042 void CMainFrame::OnViewFront()
02043 {
02044 if (m_nCurrentStyle != 2)
02045 {
02046 m_pXYWnd->SetViewType(YZ);
02047 m_pXYWnd->PositionView();
02048 }
02049 Sys_UpdateWindows (W_XY);
02050 }
02051
02052 void CMainFrame::OnMru(unsigned int nID)
02053 {
02054 DoMru(GetSafeHwnd(),nID);
02055 }
02056
02057 void CMainFrame::OnViewNearest(unsigned int nID)
02058 {
02059 Texture_SetMode(nID);
02060 }
02061
02062 void CMainFrame::OnTextureWad(unsigned int nID)
02063 {
02064 Sys_BeginWait ();
02065 Texture_ShowDirectory (nID);
02066 Sys_UpdateWindows (W_ALL);
02067 }
02068
02069 void CMainFrame::OnBspCommand(unsigned int nID)
02070 {
02071 if (g_PrefsDlg.m_bSnapShots && stricmp(currentmap, "unnamed.map") != 0)
02072 Map_Snapshot();
02073
02074 if (g_qeglobals.bBSPFrontendPlugin)
02075 {
02076 CString foo = g_BSPFrontendCommands.GetAt(nID-CMD_BSPCOMMAND);
02077 g_BSPFrontendTable.m_pfnDispatchBSPCommand( foo.GetBuffer(0) );
02078 }
02079 else
02080 {
02081 RunBsp (bsp_commands[LOWORD(nID-CMD_BSPCOMMAND)]);
02082 }
02083 }
02084
02085
02086
02087 void CMainFrame::OnViewShowblocks()
02088 {
02089 g_qeglobals.show_blocks ^= 1;
02090 CheckMenuItem ( ::GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWBLOCKS, MF_BYCOMMAND | (g_qeglobals.show_blocks ? MF_CHECKED : MF_UNCHECKED) );
02091 Sys_UpdateWindows (W_XY);
02092 }
02093
02094 void CMainFrame::OnViewShowclip()
02095 {
02096 if ( ( g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_CLIP ) & EXCLUDE_CLIP )
02097 CheckMenuItem ( ::GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWCLIP, MF_BYCOMMAND | MF_UNCHECKED );
02098 else
02099 CheckMenuItem ( ::GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWCLIP, MF_BYCOMMAND | MF_CHECKED );
02100 Sys_UpdateWindows (W_XY|W_CAMERA);
02101 }
02102
02103 void CMainFrame::OnViewShowcoordinates()
02104 {
02105 g_qeglobals.d_savedinfo.show_coordinates ^= 1;
02106 CheckMenuItem ( ::GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWCOORDINATES, MF_BYCOMMAND | (g_qeglobals.d_savedinfo.show_coordinates ? MF_CHECKED : MF_UNCHECKED) );
02107 Sys_UpdateWindows (W_XY);
02108 }
02109
02110 void CMainFrame::OnViewShowdetail()
02111 {
02112 if ( ( g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_DETAIL ) & EXCLUDE_DETAIL )
02113 {
02114 CheckMenuItem ( ::GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWDETAIL, MF_BYCOMMAND | MF_UNCHECKED );
02115 ::SetWindowText (g_qeglobals.d_hwndCamera, "Camera View (DETAIL EXCLUDED)");
02116 }
02117 else
02118 {
02119 CheckMenuItem ( ::GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWDETAIL, MF_BYCOMMAND | MF_CHECKED );
02120 ::SetWindowText (g_qeglobals.d_hwndCamera, "Camera View");
02121 }
02122 Sys_UpdateWindows (W_XY|W_CAMERA);
02123 }
02124
02125 void CMainFrame::OnViewShowent()
02126 {
02127 if ( ( g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_ENT ) & EXCLUDE_ENT )
02128 CheckMenuItem( ::GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWENT, MF_BYCOMMAND | MF_UNCHECKED);
02129 else
02130 CheckMenuItem( ::GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWENT, MF_BYCOMMAND | MF_CHECKED);
02131 Sys_UpdateWindows (W_XY|W_CAMERA);
02132 }
02133
02134 void CMainFrame::OnViewShowlights()
02135 {
02136 if ( ( g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_LIGHTS ) & EXCLUDE_LIGHTS )
02137 CheckMenuItem ( ::GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWLIGHTS, MF_BYCOMMAND | MF_UNCHECKED );
02138 else
02139 CheckMenuItem ( ::GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWLIGHTS, MF_BYCOMMAND | MF_CHECKED );
02140 Sys_UpdateWindows (W_XY|W_CAMERA);
02141 }
02142
02143 void CMainFrame::OnViewShownames()
02144 {
02145 g_qeglobals.d_savedinfo.show_names = !g_qeglobals.d_savedinfo.show_names;
02146 CheckMenuItem ( ::GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWNAMES, MF_BYCOMMAND | (g_qeglobals.d_savedinfo.show_names ? MF_CHECKED : MF_UNCHECKED) );
02147 Map_BuildBrushData();
02148 Sys_UpdateWindows (W_XY);
02149 }
02150
02151 void CMainFrame::OnViewShowpath()
02152 {
02153 if ( ( g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_PATHS ) & EXCLUDE_PATHS )
02154 CheckMenuItem ( ::GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWPATH, MF_BYCOMMAND | MF_UNCHECKED );
02155 else
02156 CheckMenuItem ( ::GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWPATH, MF_BYCOMMAND | MF_CHECKED );
02157 Sys_UpdateWindows (W_XY|W_CAMERA);
02158 }
02159
02160 void CMainFrame::OnViewShowwater()
02161 {
02162 if ( ( g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_WATER ) & EXCLUDE_WATER )
02163 CheckMenuItem ( ::GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWWATER, MF_BYCOMMAND | MF_UNCHECKED );
02164 else
02165 CheckMenuItem ( ::GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWWATER, MF_BYCOMMAND | MF_CHECKED );
02166 Sys_UpdateWindows (W_XY|W_CAMERA);
02167 }
02168
02169 void CMainFrame::OnViewShowworld()
02170 {
02171 if ( ( g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_WORLD ) & EXCLUDE_WORLD )
02172 CheckMenuItem ( ::GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWWORLD, MF_BYCOMMAND | MF_UNCHECKED );
02173 else
02174 CheckMenuItem ( ::GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWWORLD, MF_BYCOMMAND | MF_CHECKED );
02175 Sys_UpdateWindows (W_XY|W_CAMERA);
02176 }
02177
02178 void CMainFrame::OnViewTexture()
02179 {
02180 if (m_nCurrentStyle > 0 && m_nCurrentStyle < 3)
02181 {
02182 if (inspector_mode == W_TEXTURE && m_nCurrentStyle != QR_QE4)
02183 {
02184 if (::IsWindowVisible(g_qeglobals.d_hwndEntity))
02185 ::ShowWindow(g_qeglobals.d_hwndEntity, SW_HIDE);
02186 else
02187 ::ShowWindow(g_qeglobals.d_hwndEntity, SW_SHOW);
02188 }
02189 else
02190 {
02191 ::ShowWindow(g_qeglobals.d_hwndEntity, SW_SHOW);
02192 SetInspectorMode(W_TEXTURE);
02193 }
02194 }
02195 }
02196
02197 void CMainFrame::OnViewUpfloor()
02198 {
02199 m_pCamWnd->Cam_ChangeFloor (true);
02200 }
02201
02202 void CMainFrame::OnViewXy()
02203 {
02204 if (m_nCurrentStyle != 2)
02205 {
02206 m_pXYWnd->SetViewType(XY);
02207 m_pXYWnd->PositionView();
02208 }
02209 Sys_UpdateWindows (W_XY);
02210 }
02211
02212 void CMainFrame::OnViewZ100()
02213 {
02214 z.scale = 1;
02215 Sys_UpdateWindows (W_Z|W_Z_OVERLAY);
02216 }
02217
02218 void CMainFrame::OnViewZoomin()
02219 {
02220 if (m_pXYWnd && m_pXYWnd->Active())
02221 {
02222 m_pXYWnd->SetScale(m_pXYWnd->Scale() * 5.0 / 4);
02223 if (m_pXYWnd->Scale() > 20)
02224 m_pXYWnd->SetScale(20);
02225 }
02226
02227 if (m_pXZWnd && m_pXZWnd->Active())
02228 {
02229 m_pXZWnd->SetScale(m_pXZWnd->Scale() * 5.0 / 4);
02230 if (m_pXZWnd->Scale() > 20)
02231 m_pXZWnd->SetScale(20);
02232 }
02233
02234 if (m_pYZWnd && m_pYZWnd->Active())
02235 {
02236 m_pYZWnd->SetScale(m_pYZWnd->Scale() * 5.0 / 4);
02237 if (m_pYZWnd->Scale() > 20)
02238 m_pYZWnd->SetScale(20);
02239 }
02240
02241
02242 Sys_UpdateWindows (W_XY|W_XY_OVERLAY);
02243 }
02244
02245 void CMainFrame::OnViewZoomout()
02246 {
02247
02248 if (m_pXYWnd && m_pXYWnd->Active())
02249 {
02250 m_pXYWnd->SetScale(m_pXYWnd->Scale() * 4.0 / 5);
02251 if (m_pXYWnd->Scale() < 0.1 / 32)
02252 m_pXYWnd->SetScale(0.1 /32);
02253 }
02254
02255 if (m_pXZWnd && m_pXZWnd->Active())
02256 {
02257 m_pXZWnd->SetScale(m_pXZWnd->Scale() * 4.0 / 5);
02258 if (m_pXZWnd->Scale() < 0.1 / 32)
02259 m_pXZWnd->SetScale(0.1 / 32);
02260 }
02261
02262 if (m_pYZWnd && m_pYZWnd->Active())
02263 {
02264 m_pYZWnd->SetScale(m_pYZWnd->Scale() * 4.0 / 5);
02265 if (m_pYZWnd->Scale() < 0.1 / 32)
02266 m_pYZWnd->SetScale(0.1 / 32);
02267 }
02268 Sys_UpdateWindows (W_XY|W_XY_OVERLAY);
02269 }
02270
02271 void CMainFrame::OnViewZzoomin()
02272 {
02273 z.scale *= 5.0/4;
02274 if (z.scale > 4)
02275 z.scale = 4;
02276 Sys_UpdateWindows (W_Z|W_Z_OVERLAY);
02277 }
02278
02279 void CMainFrame::OnViewZzoomout()
02280 {
02281 z.scale *= 4.0/5;
02282 if (z.scale < 0.125)
02283 z.scale = 0.125;
02284 Sys_UpdateWindows (W_Z|W_Z_OVERLAY);
02285 }
02286
02287 void CMainFrame::OnViewSide()
02288 {
02289 if (m_nCurrentStyle != 2)
02290 {
02291 m_pXYWnd->SetViewType(XZ);
02292 m_pXYWnd->PositionView();
02293 }
02294 Sys_UpdateWindows (W_XY);
02295 }
02296
02297 void CMainFrame::OnGrid1(unsigned int nID)
02298 {
02299 HMENU hMenu = ::GetMenu(GetSafeHwnd());
02300
02301 CheckMenuItem(hMenu, ID_GRID_1, MF_BYCOMMAND | MF_UNCHECKED);
02302 CheckMenuItem(hMenu, ID_GRID_2, MF_BYCOMMAND | MF_UNCHECKED);
02303 CheckMenuItem(hMenu, ID_GRID_4, MF_BYCOMMAND | MF_UNCHECKED);
02304 CheckMenuItem(hMenu, ID_GRID_8, MF_BYCOMMAND | MF_UNCHECKED);
02305 CheckMenuItem(hMenu, ID_GRID_16, MF_BYCOMMAND | MF_UNCHECKED);
02306 CheckMenuItem(hMenu, ID_GRID_32, MF_BYCOMMAND | MF_UNCHECKED);
02307 CheckMenuItem(hMenu, ID_GRID_64, MF_BYCOMMAND | MF_UNCHECKED);
02308
02309 switch (nID)
02310 {
02311 case ID_GRID_1: g_qeglobals.d_gridsize = 0; break;
02312 case ID_GRID_2: g_qeglobals.d_gridsize = 1; break;
02313 case ID_GRID_4: g_qeglobals.d_gridsize = 2; break;
02314 case ID_GRID_8: g_qeglobals.d_gridsize = 3; break;
02315 case ID_GRID_16: g_qeglobals.d_gridsize = 4; break;
02316 case ID_GRID_32: g_qeglobals.d_gridsize = 5; break;
02317 case ID_GRID_64: g_qeglobals.d_gridsize = 6; break;
02318 }
02319 g_qeglobals.d_gridsize = 1 << g_qeglobals.d_gridsize;
02320
02321 if (g_PrefsDlg.m_bSnapTToGrid)
02322 g_qeglobals.d_savedinfo.m_nTextureTweak = g_qeglobals.d_gridsize;
02323
02324 SetGridStatus();
02325 CheckMenuItem(hMenu, nID, MF_BYCOMMAND | MF_CHECKED);
02326 Sys_UpdateWindows (W_XY|W_Z);
02327
02328 }
02329
02330 void CMainFrame::OnTexturesShowinuse()
02331 {
02332 Sys_BeginWait ();
02333 Texture_ShowInuse ();
02334 if (m_pTexWnd)
02335 {
02336 m_pTexWnd->RedrawWindow();
02337 }
02338 }
02339
02340
02341 extern qboolean texture_showinuse;
02342 void CMainFrame::OnUpdateTexturesShowinuse(CCmdUI* pCmdUI)
02343 {
02344 pCmdUI->SetCheck(texture_showinuse);
02345 }
02346
02347 void CMainFrame::OnTexturesInspector()
02348 {
02349 DoSurface ();
02350 }
02351
02352 void CMainFrame::OnMiscBenchmark()
02353 {
02354 m_pCamWnd->BenchMark();
02355 }
02356
02357 void CMainFrame::OnMiscFindbrush()
02358 {
02359 DoFind();
02360 }
02361
02362 void CMainFrame::OnMiscGamma()
02363 {
02364 float fSave = g_qeglobals.d_savedinfo.fGamma;
02365 DoGamma();
02366 if (fSave != g_qeglobals.d_savedinfo.fGamma)
02367 {
02368 MessageBox("You must restart Q3Radiant for Gamma settings to take place");
02369 }
02370 }
02371
02372 void CMainFrame::OnMiscNextleakspot()
02373 {
02374 Pointfile_Next();
02375 }
02376
02377 void CMainFrame::OnMiscPreviousleakspot()
02378 {
02379 Pointfile_Prev();
02380 }
02381
02382 void CMainFrame::OnMiscPrintxy()
02383 {
02384 WXY_Print();
02385 }
02386
02387 void CMainFrame::OnMiscSelectentitycolor()
02388 {
02389 if (edit_entity)
02390 {
02391 CString strColor = ValueForKey(edit_entity, "_color");
02392 if (strColor.GetLength() > 0)
02393 {
02394 float fR, fG, fB;
02395 int n = sscanf(strColor,"%f %f %f", &fR, &fG, &fB);
02396 if (n == 3)
02397 {
02398 g_qeglobals.d_savedinfo.colors[COLOR_ENTITY][0] = fR;
02399 g_qeglobals.d_savedinfo.colors[COLOR_ENTITY][1] = fG;
02400 g_qeglobals.d_savedinfo.colors[COLOR_ENTITY][2] = fB;
02401 }
02402 }
02403
02404 if (inspector_mode == W_ENTITY && (DoColor(COLOR_ENTITY)))
02405 {
02406 char buffer[100];
02407 sprintf(buffer, "%f %f %f", g_qeglobals.d_savedinfo.colors[COLOR_ENTITY][0],
02408 g_qeglobals.d_savedinfo.colors[COLOR_ENTITY][1],
02409 g_qeglobals.d_savedinfo.colors[COLOR_ENTITY][2]);
02410
02411 ::SetWindowText( hwndEnt[EntValueField], buffer );
02412 ::SetWindowText( hwndEnt[EntKeyField], "_color" );
02413 AddProp();
02414
02415
02416
02417
02418 }
02419 Sys_UpdateWindows( W_ALL );
02420 }
02421 }
02422
02423 void CMainFrame::OnTexturebk()
02424 {
02425 DoColor(COLOR_TEXTUREBACK);
02426 Sys_UpdateWindows (W_ALL);
02427 }
02428
02429 void CMainFrame::OnColorsMajor()
02430 {
02431 DoColor(COLOR_GRIDMAJOR);
02432 Sys_UpdateWindows (W_ALL);
02433 }
02434
02435 void CMainFrame::OnColorsMinor()
02436 {
02437 DoColor(COLOR_GRIDMINOR);
02438 Sys_UpdateWindows (W_ALL);
02439 }
02440
02441 void CMainFrame::OnColorsXybk()
02442 {
02443 DoColor(COLOR_GRIDBACK);
02444 Sys_UpdateWindows (W_ALL);
02445 }
02446
02447 void CMainFrame::OnBrush3sided()
02448 {
02449 Undo_Start("3 sided");
02450 Undo_AddBrushList(&selected_brushes);
02451 Brush_MakeSided(3);
02452 Undo_EndBrushList(&selected_brushes);
02453 Undo_End();
02454 }
02455
02456 void CMainFrame::OnBrush4sided()
02457 {
02458 Undo_Start("4 sided");
02459 Undo_AddBrushList(&selected_brushes);
02460 Brush_MakeSided(4);
02461 Undo_EndBrushList(&selected_brushes);
02462 Undo_End();
02463 }
02464
02465 void CMainFrame::OnBrush5sided()
02466 {
02467 Undo_Start("5 sided");
02468 Undo_AddBrushList(&selected_brushes);
02469 Brush_MakeSided(5);
02470 Undo_EndBrushList(&selected_brushes);
02471 Undo_End();
02472 }
02473
02474 void CMainFrame::OnBrush6sided()
02475 {
02476 Undo_Start("6 sided");
02477 Undo_AddBrushList(&selected_brushes);
02478 Brush_MakeSided(6);
02479 Undo_EndBrushList(&selected_brushes);
02480 Undo_End();
02481 }
02482
02483 void CMainFrame::OnBrush7sided()
02484 {
02485 Undo_Start("7 sided");
02486 Undo_AddBrushList(&selected_brushes);
02487 Brush_MakeSided(7);
02488 Undo_EndBrushList(&selected_brushes);
02489 Undo_End();
02490 }
02491
02492 void CMainFrame::OnBrush8sided()
02493 {
02494 Undo_Start("8 sided");
02495 Undo_AddBrushList(&selected_brushes);
02496 Brush_MakeSided(8);
02497 Undo_EndBrushList(&selected_brushes);
02498 Undo_End();
02499 }
02500
02501 void CMainFrame::OnBrush9sided()
02502 {
02503 Undo_Start("9 sided");
02504 Undo_AddBrushList(&selected_brushes);
02505 Brush_MakeSided(9);
02506 Undo_EndBrushList(&selected_brushes);
02507 Undo_End();
02508 }
02509
02510 void CMainFrame::OnBrushArbitrarysided()
02511 {
02512 Undo_Start("arbitrary sided");
02513 Undo_AddBrushList(&selected_brushes);
02514 DoSides();
02515 Undo_EndBrushList(&selected_brushes);
02516 Undo_End();
02517 }
02518
02519 void CMainFrame::OnBrushFlipx()
02520 {
02521 Undo_Start("flip X");
02522 Undo_AddBrushList(&selected_brushes);
02523
02524 Select_FlipAxis (0);
02525 for (brush_t *b=selected_brushes.next ; b != &selected_brushes ; b=b->next)
02526 {
02527 if(b->owner->eclass->fixedsize)
02528 {
02529 char buf[16];
02530 float a = FloatForKey(b->owner, "angle");
02531 a = div( ( 180 - a ) , 180 ).rem;
02532 SetKeyValue(b->owner, "angle", itoa(a, buf, 10));
02533 Brush_Build(b);
02534 }
02535 }
02536
02537 Undo_EndBrushList(&selected_brushes);
02538 Undo_End();
02539 }
02540
02541 void CMainFrame::OnBrushFlipy()
02542 {
02543 Undo_Start("flip Y");
02544 Undo_AddBrushList(&selected_brushes);
02545
02546 Select_FlipAxis (1);
02547 for (brush_t *b=selected_brushes.next ; b != &selected_brushes ; b=b->next)
02548 {
02549 if(b->owner->eclass->fixedsize)
02550 {
02551 float a = FloatForKey(b->owner, "angle");
02552 if (a == 0 || a == 180 || a == 360)
02553 continue;
02554 if ( a == 90 || a == 270)
02555 {
02556 a += 180;
02557 }
02558 else if (a > 270)
02559 a += 90;
02560 else if (a > 180)
02561 a -= 90;
02562 else if (a > 90)
02563 a += 90;
02564 else
02565 a -= 90;
02566 a = (int)a % 360;
02567 char buf[16];
02568 SetKeyValue(b->owner, "angle", itoa(a, buf, 10));
02569 Brush_Build(b);
02570 }
02571 }
02572
02573 Undo_EndBrushList(&selected_brushes);
02574 Undo_End();
02575 }
02576
02577 void CMainFrame::OnBrushFlipz()
02578 {
02579 Undo_Start("flip Z");
02580 Undo_AddBrushList(&selected_brushes);
02581 Select_FlipAxis (2);
02582 Undo_EndBrushList(&selected_brushes);
02583 Undo_End();
02584 }
02585
02586 void CMainFrame::OnBrushRotatex()
02587 {
02588 Undo_Start("rotate X");
02589 Undo_AddBrushList(&selected_brushes);
02590 Select_RotateAxis (0, 90);
02591 Undo_EndBrushList(&selected_brushes);
02592 Undo_End();
02593 }
02594
02595 void CMainFrame::OnBrushRotatey()
02596 {
02597 Undo_Start("rotate Y");
02598 Undo_AddBrushList(&selected_brushes);
02599 Select_RotateAxis (1, 90);
02600 Undo_EndBrushList(&selected_brushes);
02601 Undo_End();
02602 }
02603
02604 void CMainFrame::OnBrushRotatez()
02605 {
02606 Undo_Start("rotate Z");
02607 Undo_AddBrushList(&selected_brushes);
02608 Select_RotateAxis (2, 90);
02609 Undo_EndBrushList(&selected_brushes);
02610 Undo_End();
02611 }
02612
02613 void CMainFrame::OnRegionOff()
02614 {
02615 Map_RegionOff ();
02616 }
02617
02618 void CMainFrame::OnRegionSetbrush()
02619 {
02620 Map_RegionBrush ();
02621 }
02622
02623 void CMainFrame::OnRegionSetselection()
02624 {
02625 Map_RegionSelectedBrushes ();
02626 }
02627
02628 void CMainFrame::OnRegionSettallbrush()
02629 {
02630 Map_RegionTallBrush ();
02631 }
02632
02633 void CMainFrame::OnRegionSetxy()
02634 {
02635 Map_RegionXY ();
02636 }
02637
02638 void CMainFrame::OnSelectionArbitraryrotation()
02639 {
02640
02641
02642 Undo_Start("arbitrary rotation");
02643 Undo_AddBrushList(&selected_brushes);
02644
02645 CRotateDlg dlg;
02646 dlg.DoModal();
02647
02648
02649 Undo_EndBrushList(&selected_brushes);
02650 Undo_End();
02651 }
02652
02653 void CMainFrame::OnSelectionClone()
02654 {
02655
02656
02657 Select_Clone();
02658 }
02659
02660 void CMainFrame::OnSelectionConnect()
02661 {
02662 ConnectEntities();
02663 }
02664
02665 void CMainFrame::OnSelectionMakehollow()
02666 {
02667
02668
02669 Undo_Start("hollow");
02670 Undo_AddBrushList(&selected_brushes);
02671 CSG_MakeHollow ();
02672 Undo_EndBrushList(&selected_brushes);
02673 Undo_End();
02674 }
02675
02676 void CMainFrame::OnSelectionCsgsubtract()
02677 {
02678
02679
02680 Undo_Start("CSG subtract");
02681 CSG_Subtract();
02682 Undo_End();
02683 }
02684
02685 void CMainFrame::OnSelectionCsgmerge()
02686 {
02687
02688
02689 Undo_Start("CSG merge");
02690 Undo_AddBrushList(&selected_brushes);
02691 CSG_Merge();
02692 Undo_EndBrushList(&selected_brushes);
02693 Undo_End();
02694 }
02695
02696 void CMainFrame::OnSelectionNoOutline()
02697 {
02698 g_qeglobals.dontDrawSelectedOutlines ^= 1;
02699 Sys_UpdateWindows(W_ALL);
02700 }
02701
02702 void CMainFrame::OnSelectionDelete()
02703 {
02704 brush_t *brush;
02705
02706
02707 Undo_Start("delete");
02708 Undo_AddBrushList(&selected_brushes);
02709
02710 for (brush = selected_brushes.next; brush != &selected_brushes; brush = brush->next)
02711 {
02712 Undo_AddEntity(brush->owner);
02713 }
02714
02715 Select_Delete();
02716 Undo_EndBrushList(&selected_brushes);
02717 Undo_End();
02718 }
02719
02720 void CMainFrame::OnSelectionDeselect()
02721 {
02722 if (!ByeByeSurfaceDialog())
02723 {
02724 if (g_bClipMode)
02725 OnViewClipper();
02726 else if (g_bRotateMode)
02727 OnSelectMouserotate();
02728 else if (g_bScaleMode)
02729 OnSelectMousescale();
02730 else if (g_bPathMode)
02731 {
02732 if (ActiveXY())
02733 ActiveXY()->KillPathMode();
02734 }
02735 else
02736 {
02737 if (g_qeglobals.d_select_mode == sel_curvepoint && g_qeglobals.d_num_move_points > 0)
02738 {
02739 g_qeglobals.d_num_move_points = 0;
02740 Sys_UpdateWindows(W_ALL);
02741 }
02742 else if ( g_qeglobals.d_select_mode == sel_terrainpoint && g_qeglobals.d_numterrapoints > 0 )
02743 {
02744 g_qeglobals.d_numterrapoints = 0;
02745 Sys_UpdateWindows( W_ALL );
02746 }
02747 else
02748 {
02749 Select_Deselect ();
02750 SetStatusText(2, " ");
02751 }
02752 }
02753 }
02754 }
02755
02756 void CMainFrame::OnSelectionDragedges()
02757 {
02758 if (g_qeglobals.d_select_mode == sel_edge)
02759 {
02760 clearSelection();
02761 Sys_UpdateWindows (W_ALL);
02762 }
02763 else
02764 {
02765 SetupVertexSelection ();
02766 if (g_qeglobals.d_numpoints)
02767 g_qeglobals.d_select_mode = sel_edge;
02768 Sys_UpdateWindows (W_ALL);
02769 }
02770 }
02771
02772 void CMainFrame::OnSelectionDragvertecies()
02773 {
02774 if (g_qeglobals.d_select_mode == sel_vertex || g_qeglobals.d_select_mode == sel_curvepoint ||
02775 g_qeglobals.d_select_mode == sel_terrainpoint )
02776 {
02777 clearSelection();
02778 Sys_UpdateWindows (W_ALL);
02779 }
02780 else
02781 {
02782
02783 if ( OnlyTerrainSelected() )
02784 {
02785
02786 }
02787 else if (OnlyPatchesSelected())
02788 {
02789 Patch_EditPatch();
02790 }
02791 else if ( !AnyPatchesSelected() && !AnyTerrainSelected() )
02792 {
02793 SetupVertexSelection ();
02794 if (g_qeglobals.d_numpoints)
02795 g_qeglobals.d_select_mode = sel_vertex;
02796 }
02797 Sys_UpdateWindows (W_ALL);
02798 }
02799 }
02800
02801 void CMainFrame::OnRaiseLowerTerrain()
02802 {
02803
02804
02805 if ( g_qeglobals.d_select_mode == sel_terrainpoint ) {
02806 clearSelection();
02807 Sys_UpdateWindows (W_ALL);
02808 }
02809 else if ( g_qeglobals.d_select_mode == sel_terraintexture ) {
02810 clearSelection();
02811 g_qeglobals.d_select_mode = sel_terrainpoint;
02812 Sys_UpdateWindows (W_ALL);
02813 }
02814 else
02815 {
02816
02817 clearSelection();
02818 g_qeglobals.d_select_mode = sel_terraintexture;
02819 Sys_UpdateWindows (W_ALL);
02820
02821 }
02822 }
02823
02824 void CMainFrame::OnSelectionMakeDetail()
02825 {
02826 Undo_Start("make detail");
02827 Undo_AddBrushList(&selected_brushes);
02828 Select_MakeDetail ();
02829 Undo_EndBrushList(&selected_brushes);
02830 Undo_End();
02831 }
02832
02833 void CMainFrame::OnSelectionMakeStructural()
02834 {
02835 Undo_Start("make structural");
02836 Undo_AddBrushList(&selected_brushes);
02837 Select_MakeStructural ();
02838 Undo_EndBrushList(&selected_brushes);
02839 Undo_End();
02840 }
02841
02842 void CMainFrame::OnSelectionSelectcompletetall()
02843 {
02844 if (ActiveXY())
02845 ActiveXY()->UndoCopy();
02846 Select_CompleteTall ();
02847 }
02848
02849 void CMainFrame::OnSelectionSelectinside()
02850 {
02851 Select_Inside ();
02852 }
02853
02854 void CMainFrame::OnSelectionSelectpartialtall()
02855 {
02856 Select_PartialTall();
02857 }
02858
02859 void CMainFrame::OnSelectionSelecttouching()
02860 {
02861 Select_Touching();
02862 }
02863
02864 void CMainFrame::OnSelectionUngroupentity()
02865 {
02866 Select_Ungroup();
02867 }
02868
02869 void CMainFrame::OnTexturesPopup()
02870 {
02871 HandlePopup(this, IDR_POPUP_TEXTURE);
02872 }
02873
02874 void CMainFrame::OnSplinesPopup()
02875 {
02876 HandlePopup(this, IDR_POPUP_SPLINE);
02877 }
02878
02879 void CMainFrame::OnPopupSelection()
02880 {
02881 HandlePopup(this, IDR_POPUP_SELECTION);
02882 }
02883
02884 void CMainFrame::OnViewChange()
02885 {
02886 OnViewNextview();
02887
02888 }
02889
02890 void CMainFrame::OnViewCameraupdate()
02891 {
02892 Sys_UpdateWindows(W_CAMERA);
02893 }
02894
02895 void CMainFrame::OnUpdateViewCameraupdate(CCmdUI* pCmdUI)
02896 {
02897 pCmdUI->Enable(m_bCamPreview == false);
02898 }
02899
02900 void CMainFrame::OnSizing(UINT fwSide, LPRECT pRect)
02901 {
02902 CFrameWnd::OnSizing(fwSide, pRect);
02903 GetClientRect(g_rctOld);
02904 }
02905
02906 void CMainFrame::OnHelpAbout()
02907 {
02908 DoAbout();
02909 }
02910
02911 void CMainFrame::OnViewClipper()
02912 {
02913 if (ActiveXY())
02914 {
02915 if (ActiveXY()->ClipMode())
02916 {
02917 ActiveXY()->SetClipMode(false);
02918 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_VIEW_CLIPPER, FALSE);
02919 }
02920 else
02921 {
02922 if (ActiveXY()->RotateMode())
02923 OnSelectMouserotate();
02924 ActiveXY()->SetClipMode(true);
02925 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_VIEW_CLIPPER);
02926 }
02927 }
02928 }
02929
02930 void CMainFrame::OnCameraAngledown()
02931 {
02932 m_pCamWnd->Camera().angles[0] -= SPEED_TURN;
02933 if (m_pCamWnd->Camera().angles[0] < -85)
02934 m_pCamWnd->Camera().angles[0] = -85;
02935 Sys_UpdateWindows (W_CAMERA|W_XY_OVERLAY);
02936 }
02937
02938 void CMainFrame::OnCameraAngleup()
02939 {
02940 m_pCamWnd->Camera().angles[0] += SPEED_TURN;
02941 if (m_pCamWnd->Camera().angles[0] > 85)
02942 m_pCamWnd->Camera().angles[0] = 85;
02943 Sys_UpdateWindows (W_CAMERA|W_XY_OVERLAY);
02944 }
02945
02946 void CMainFrame::OnCameraBack()
02947 {
02948 VectorMA (m_pCamWnd->Camera().origin, -SPEED_MOVE, m_pCamWnd->Camera().forward, m_pCamWnd->Camera().origin);
02949 int nUpdate = (g_PrefsDlg.m_bCamXYUpdate) ? (W_CAMERA | W_XY) : (W_CAMERA);
02950 Sys_UpdateWindows (nUpdate);
02951 }
02952
02953 void CMainFrame::OnCameraDown()
02954 {
02955 m_pCamWnd->Camera().origin[2] -= SPEED_MOVE;
02956 int nUpdate = (g_PrefsDlg.m_bCamXYUpdate) ? (W_CAMERA | W_XY) : (W_CAMERA);
02957 Sys_UpdateWindows (nUpdate);
02958 }
02959
02960 void CMainFrame::OnCameraForward()
02961 {
02962 VectorMA (m_pCamWnd->Camera().origin, SPEED_MOVE, m_pCamWnd->Camera().forward, m_pCamWnd->Camera().origin);
02963 int nUpdate = (g_PrefsDlg.m_bCamXYUpdate) ? (W_CAMERA | W_XY) : (W_CAMERA);
02964 Sys_UpdateWindows (nUpdate);
02965 }
02966
02967 void CMainFrame::OnCameraLeft()
02968 {
02969 m_pCamWnd->Camera().angles[1] += SPEED_TURN;
02970 int nUpdate = (g_PrefsDlg.m_bCamXYUpdate) ? (W_CAMERA | W_XY) : (W_CAMERA);
02971 Sys_UpdateWindows (nUpdate);
02972 }
02973
02974 void CMainFrame::OnCameraRight()
02975 {
02976 m_pCamWnd->Camera().angles[1] -= SPEED_TURN;
02977 int nUpdate = (g_PrefsDlg.m_bCamXYUpdate) ? (W_CAMERA | W_XY) : (W_CAMERA);
02978 Sys_UpdateWindows (nUpdate);
02979 }
02980
02981 void CMainFrame::OnCameraStrafeleft()
02982 {
02983 VectorMA (m_pCamWnd->Camera().origin, -SPEED_MOVE, m_pCamWnd->Camera().right, m_pCamWnd->Camera().origin);
02984 int nUpdate = (g_PrefsDlg.m_bCamXYUpdate) ? (W_CAMERA | W_XY) : (W_CAMERA);
02985 Sys_UpdateWindows (nUpdate);
02986 }
02987
02988 void CMainFrame::OnCameraStraferight()
02989 {
02990 VectorMA (m_pCamWnd->Camera().origin, SPEED_MOVE, m_pCamWnd->Camera().right, m_pCamWnd->Camera().origin);
02991 int nUpdate = (g_PrefsDlg.m_bCamXYUpdate) ? (W_CAMERA | W_XY) : (W_CAMERA);
02992 Sys_UpdateWindows (nUpdate);
02993 }
02994
02995 void CMainFrame::OnCameraUp()
02996 {
02997 m_pCamWnd->Camera().origin[2] += SPEED_MOVE;
02998 int nUpdate = (g_PrefsDlg.m_bCamXYUpdate) ? (W_CAMERA | W_XY) : (W_CAMERA);
02999 Sys_UpdateWindows (nUpdate);
03000 }
03001
03002 void CMainFrame::OnGridToggle()
03003 {
03004 g_qeglobals.d_showgrid = !g_qeglobals.d_showgrid;
03005 Sys_UpdateWindows (W_XY|W_Z);
03006 }
03007
03008 void CMainFrame::OnPrefs()
03009 {
03010 int nView = g_PrefsDlg.m_nView;
03011 BOOL bToolbar = g_PrefsDlg.m_bWideToolbar;
03012 BOOL bTextureBar = g_PrefsDlg.m_bTextureBar;
03013 BOOL bSGIOpenGL = g_PrefsDlg.m_bSGIOpenGL;
03014 BOOL bBuggyICD = g_PrefsDlg.m_bBuggyICD;
03015 int nShader = g_PrefsDlg.m_nShader;
03016 g_PrefsDlg.LoadPrefs();
03017 if (g_PrefsDlg.DoModal() == IDOK)
03018 {
03019 if (g_PrefsDlg.m_nView != nView || g_PrefsDlg.m_bWideToolbar != bToolbar
03020 || g_PrefsDlg.m_bSGIOpenGL != bSGIOpenGL || g_PrefsDlg.m_bBuggyICD != bBuggyICD || nShader != g_PrefsDlg.m_nShader)
03021 MessageBox("You need to restart Q3Radiant for the view changes to take place.");
03022 if (m_pTexWnd)
03023 m_pTexWnd->UpdatePrefs();
03024 if (bTextureBar != g_PrefsDlg.m_bTextureBar)
03025 {
03026 if (bTextureBar)
03027 ShowControlBar(&m_wndTextureBar, TRUE, TRUE);
03028 else
03029 ShowControlBar(&m_wndTextureBar, FALSE, TRUE);
03030 m_wndTextureBar.Invalidate();
03031 }
03032 CMenu* pMenu = GetMenu();
03033 if (pMenu)
03034 pMenu->CheckMenuItem(ID_SNAPTOGRID, MF_BYCOMMAND | (!g_PrefsDlg.m_bNoClamp) ? MF_CHECKED : MF_UNCHECKED);
03035 }
03036 }
03037
03038
03039
03040 void CMainFrame::SetWindowStyle(int nStyle)
03041 {
03042 }
03043
03044 void CMainFrame::OnTogglecamera()
03045 {
03046 if (m_nCurrentStyle > 0 && m_nCurrentStyle < 3)
03047 {
03048 if (m_pCamWnd && m_pCamWnd->GetSafeHwnd())
03049 {
03050 if (m_pCamWnd->IsWindowVisible())
03051 m_pCamWnd->ShowWindow(SW_HIDE);
03052 else
03053 m_pCamWnd->ShowWindow(SW_SHOW);
03054 }
03055 }
03056 }
03057
03058 void CMainFrame::OnToggleconsole()
03059 {
03060 if (m_nCurrentStyle > 0 && m_nCurrentStyle < 3)
03061 {
03062 if (m_pEditWnd && m_pEditWnd->GetSafeHwnd())
03063 {
03064 if (m_pEditWnd->IsWindowVisible())
03065 m_pEditWnd->ShowWindow(SW_HIDE);
03066 else
03067 m_pEditWnd->ShowWindow(SW_SHOW);
03068 }
03069 }
03070 }
03071
03072 void CMainFrame::OnToggleview()
03073 {
03074 if (m_nCurrentStyle == 1)
03075 {
03076 if (m_pXYWnd && m_pXYWnd->GetSafeHwnd())
03077 {
03078 if (m_pXYWnd->IsWindowVisible())
03079 m_pXYWnd->ShowWindow(SW_HIDE);
03080 else
03081 m_pXYWnd->ShowWindow(SW_SHOW);
03082 }
03083 }
03084 }
03085
03086 void CMainFrame::OnTogglez()
03087 {
03088 if (m_nCurrentStyle == 1 || m_nCurrentStyle == 2)
03089 {
03090 if (m_pZWnd && m_pZWnd->GetSafeHwnd())
03091 {
03092 if (m_pZWnd->IsWindowVisible())
03093 m_pZWnd->ShowWindow(SW_HIDE);
03094 else
03095 m_pZWnd->ShowWindow(SW_SHOW);
03096 }
03097 }
03098 else
03099 {
03100 Undo_Redo();
03101 }
03102 }
03103
03104 void CMainFrame::OnToggleLock()
03105 {
03106 g_PrefsDlg.m_bTextureLock = !g_PrefsDlg.m_bTextureLock;
03107 CMenu* pMenu = GetMenu();
03108 if (pMenu)
03109 pMenu->CheckMenuItem(ID_TOGGLE_LOCK, MF_BYCOMMAND | (g_PrefsDlg.m_bTextureLock) ? MF_CHECKED : MF_UNCHECKED);
03110 g_PrefsDlg.SavePrefs();
03111 SetGridStatus();
03112 }
03113
03114 void CMainFrame::OnEditMapinfo()
03115 {
03116 CMapInfo dlg;
03117 dlg.DoModal();
03118 }
03119
03120 void CMainFrame::OnEditEntityinfo()
03121 {
03122 CEntityListDlg dlg;
03123 dlg.DoModal();
03124 }
03125
03126
03127
03128 void CMainFrame::OnBrushScripts()
03129 {
03130 CScriptDlg dlg;
03131 dlg.DoModal();
03132 }
03133
03134 void CMainFrame::OnViewNextview()
03135 {
03136 if (m_nCurrentStyle != 2)
03137 {
03138 if (m_pXYWnd->GetViewType() == XY)
03139 m_pXYWnd->SetViewType(XZ);
03140 else
03141 if (m_pXYWnd->GetViewType() == XZ)
03142 m_pXYWnd->SetViewType(YZ);
03143 else
03144 m_pXYWnd->SetViewType(XY);
03145 m_pXYWnd->PositionView();
03146 Sys_UpdateWindows (W_XY);
03147 }
03148 }
03149
03150 void CMainFrame::OnHelpCommandlist()
03151 {
03152 CCommandsDlg dlg;
03153 dlg.DoModal();
03154 #if 0
03155 if (g_b3Dfx)
03156 {
03157 C3DFXCamWnd* pWnd = new C3DFXCamWnd();
03158 CRect rect(50,50,400, 400);
03159 pWnd->Create(_3DFXCAMERA_WINDOW_CLASS, "", QE3_CHILDSTYLE, rect, this, 1234);
03160 pWnd->ShowWindow(SW_SHOW);
03161 }
03162 #endif
03163 }
03164
03165 void CMainFrame::OnFileNewproject()
03166 {
03167 CNewProjDlg dlg;
03168 if (dlg.DoModal() == IDOK && dlg.m_strName.GetLength() > 0)
03169 {
03170 CString strQ2;
03171 CString strQ2File;
03172 ExtractPath_and_Filename(g_PrefsDlg.m_strQuake2, strQ2, strQ2File);
03173
03174
03175 AddSlash(strQ2);
03176 strQ2 += dlg.m_strName;
03177 CString strProjToLoad;
03178 CString strMapToLoad;
03179 bool bGood = true;
03180 if (::CreateDirectory(strQ2, NULL))
03181 {
03182 CString strDir = strQ2;
03183 strDir += "\\maps";
03184 if (::CreateDirectory(strDir, NULL))
03185 {
03186 CString strSource = g_strAppPath;
03187 AddSlash(strSource);
03188 strSource += "projmap.dat";
03189 CString strDest = strDir;
03190 AddSlash(strDest);
03191 CString strName;
03192 strName.Format("%s.map", dlg.m_strName);
03193 strDest += strName;
03194 strMapToLoad = strDest;
03195 if (!::CopyFile(strSource, strDest, FALSE))
03196 bGood = false;
03197 }
03198 else bGood = false;
03199
03200 strDir = strQ2;
03201 strDir += "\\pics";
03202 if (::CreateDirectory(strDir, NULL))
03203 {
03204 CString strSource = g_strAppPath;
03205 AddSlash(strSource);
03206 strSource += "colormap.pcx";
03207 CString strDest = strDir;
03208 AddSlash(strDest);
03209 strDest += "colormap.pcx";
03210 if (!::CopyFile(strSource, strDest, FALSE))
03211 bGood = false;
03212 }
03213 else bGood = false;
03214
03215 strDir = strQ2;
03216 strDir += "\\scripts";
03217 if (::CreateDirectory(strDir, NULL))
03218 {
03219 CString strSource = g_strAppPath;
03220 AddSlash(strSource);
03221 strSource += "projqe4.dat";
03222 CString strDest = strDir;
03223 AddSlash(strDest);
03224 strDest += "quake.qe4";
03225 if (!::CopyFile(strSource, strDest, FALSE))
03226 bGood = false;
03227 else
03228 strProjToLoad = strDest;
03229 }
03230 else bGood = false;
03231 if (bGood && strProjToLoad.GetLength() > 0)
03232 {
03233 if (QE_LoadProject(strProjToLoad.GetBuffer(0)))
03234 {
03235 if (strMapToLoad.GetLength() > 0)
03236 Map_LoadFile(strMapToLoad.GetBuffer(0));
03237 }
03238 }
03239 }
03240 else
03241 {
03242 CString strMsg;
03243 strMsg.Format("Unable to create directory %s", strQ2);
03244 MessageBox(strMsg);
03245 }
03246
03247 }
03248 }
03249
03250 void CMainFrame::UpdateStatusText()
03251 {
03252 for (int n = 0; n < 6; n++)
03253 {
03254 if (m_strStatus[n].GetLength() >= 0 && m_wndStatusBar.GetSafeHwnd())
03255 m_wndStatusBar.SetPaneText(n, m_strStatus[n]);
03256 }
03257 }
03258
03259 void CMainFrame::SetStatusText(int nPane, const char * pText)
03260 {
03261 if (pText && nPane <= 5 && nPane > 0)
03262 {
03263 m_strStatus[nPane] = pText;
03264 UpdateStatusText();
03265 }
03266 }
03267
03268 void CMainFrame::UpdateWindows(int nBits)
03269 {
03270
03271 if (!g_bScreenUpdates)
03272 return;
03273
03274 if (nBits & (W_XY | W_XY_OVERLAY))
03275 {
03276 if (m_pXYWnd)
03277 m_pXYWnd->RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW);
03278 if (m_pXZWnd)
03279 m_pXZWnd->RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW);
03280 if (m_pYZWnd)
03281 m_pYZWnd->RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW);
03282 }
03283
03284 if (nBits & W_CAMERA || ((nBits & W_CAMERA_IFON) && m_bCamPreview))
03285 {
03286 if (m_pCamWnd)
03287 {
03288 m_pCamWnd->RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW);
03289 }
03290 }
03291
03292 if (nBits & (W_Z | W_Z_OVERLAY))
03293 {
03294 if (m_pZWnd)
03295 m_pZWnd->RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW);
03296 }
03297
03298 if (nBits & W_TEXTURE)
03299 {
03300 if (m_pTexWnd)
03301 m_pTexWnd->RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW);
03302 }
03303 }
03304
03305 void WINAPI Sys_UpdateWindows (int nBits)
03306 {
03307 if (g_PrefsDlg.m_bQE4Painting)
03308 g_nUpdateBits |= nBits;
03309 else
03310 g_pParentWnd->UpdateWindows(nBits);
03311 }
03312
03313
03314
03315 void CMainFrame::OnFlipClip()
03316 {
03317 if (m_pActiveXY)
03318 m_pActiveXY->FlipClip();
03319 }
03320
03321 void CMainFrame::OnClipSelected()
03322 {
03323 if (m_pActiveXY && m_pActiveXY->ClipMode())
03324 {
03325 Undo_Start("clip selected");
03326 Undo_AddBrushList(&selected_brushes);
03327 m_pActiveXY->Clip();
03328 Undo_EndBrushList(&selected_brushes);
03329 Undo_End();
03330 }
03331 else
03332 {
03333 if (g_bPatchBendMode)
03334 Patch_BendHandleENTER();
03335 else if (g_bPatchBendMode)
03336 Patch_InsDelHandleENTER();
03337 }
03338 }
03339
03340 void CMainFrame::OnSplitSelected()
03341 {
03342 if (m_pActiveXY)
03343 {
03344 Undo_Start("split selected");
03345 Undo_AddBrushList(&selected_brushes);
03346 m_pActiveXY->SplitClip();
03347 Undo_EndBrushList(&selected_brushes);
03348 Undo_End();
03349 }
03350 }
03351
03352 CXYWnd* CMainFrame::ActiveXY()
03353 {
03354 return m_pActiveXY;
03355 }
03356
03357
03358 void CMainFrame::OnToggleviewXz()
03359 {
03360 if (m_nCurrentStyle == 1)
03361 {
03362 if (m_pXZWnd && m_pXZWnd->GetSafeHwnd())
03363 {
03364
03365 g_PrefsDlg.m_bXZVis = m_pXZWnd->IsWindowVisible();
03366 if (g_PrefsDlg.m_bXZVis)
03367 m_pXZWnd->ShowWindow(SW_HIDE);
03368 else
03369 m_pXZWnd->ShowWindow(SW_SHOW);
03370 g_PrefsDlg.m_bXZVis ^= 1;
03371 g_PrefsDlg.SavePrefs();
03372 }
03373 }
03374 }
03375
03376 void CMainFrame::OnToggleviewYz()
03377 {
03378 if (m_nCurrentStyle == 1)
03379 {
03380 if (m_pYZWnd && m_pYZWnd->GetSafeHwnd())
03381 {
03382 g_PrefsDlg.m_bYZVis = m_pYZWnd->IsWindowVisible();
03383 if (g_PrefsDlg.m_bYZVis)
03384 m_pYZWnd->ShowWindow(SW_HIDE);
03385 else
03386 m_pYZWnd->ShowWindow(SW_SHOW);
03387 g_PrefsDlg.m_bYZVis ^= 1;
03388 g_PrefsDlg.SavePrefs();
03389 }
03390 }
03391 }
03392
03393 void CMainFrame::OnColorsBrush()
03394 {
03395 DoColor(COLOR_BRUSHES);
03396 Sys_UpdateWindows (W_ALL);
03397 }
03398
03399 void CMainFrame::OnColorsClipper()
03400 {
03401 DoColor(COLOR_CLIPPER);
03402 Sys_UpdateWindows (W_ALL);
03403 }
03404
03405 void CMainFrame::OnColorsGridtext()
03406 {
03407 DoColor(COLOR_GRIDTEXT);
03408 Sys_UpdateWindows (W_ALL);
03409 }
03410
03411 void CMainFrame::OnColorsSelectedbrush()
03412 {
03413 DoColor(COLOR_SELBRUSHES);
03414 Sys_UpdateWindows (W_ALL);
03415 }
03416
03417 void CMainFrame::OnColorsGridblock()
03418 {
03419 DoColor(COLOR_GRIDBLOCK);
03420 Sys_UpdateWindows (W_ALL);
03421 }
03422
03423
03424
03425 void CMainFrame::OnColorsViewname()
03426 {
03427 DoColor(COLOR_VIEWNAME);
03428 Sys_UpdateWindows (W_ALL);
03429 }
03430
03431 void CMainFrame::OnColorSetoriginal()
03432 {
03433 for (int i=0 ; i<3 ; i++)
03434 {
03435 g_qeglobals.d_savedinfo.colors[COLOR_TEXTUREBACK][i] = 0.25;
03436 g_qeglobals.d_savedinfo.colors[COLOR_GRIDBACK][i] = 1.0;
03437 g_qeglobals.d_savedinfo.colors[COLOR_GRIDMINOR][i] = 0.75;
03438 g_qeglobals.d_savedinfo.colors[COLOR_GRIDMAJOR][i] = 0.5;
03439 g_qeglobals.d_savedinfo.colors[COLOR_CAMERABACK][i] = 0.25;
03440 }
03441
03442 g_qeglobals.d_savedinfo.colors[COLOR_GRIDBLOCK][0] = 0.0;
03443 g_qeglobals.d_savedinfo.colors[COLOR_GRIDBLOCK][1] = 0.0;
03444 g_qeglobals.d_savedinfo.colors[COLOR_GRIDBLOCK][2] = 1.0;
03445
03446 g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][0] = 0.0;
03447 g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][1] = 0.0;
03448 g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][2] = 0.0;
03449
03450 g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][0] = 1.0;
03451 g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][1] = 0.0;
03452 g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][2] = 0.0;
03453
03454 g_qeglobals.d_savedinfo.colors[COLOR_CLIPPER][0] = 0.0;
03455 g_qeglobals.d_savedinfo.colors[COLOR_CLIPPER][1] = 0.0;
03456 g_qeglobals.d_savedinfo.colors[COLOR_CLIPPER][2] = 1.0;
03457
03458 g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][0] = 0.0;
03459 g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][1] = 0.0;
03460 g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][2] = 0.0;
03461
03462 g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][0] = 0.5;
03463 g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][1] = 0.0;
03464 g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][2] = 0.75;
03465 Sys_UpdateWindows (W_ALL);
03466 }
03467
03468 void CMainFrame::OnColorSetqer()
03469 {
03470 for (int i=0 ; i<3 ; i++)
03471 {
03472 g_qeglobals.d_savedinfo.colors[COLOR_TEXTUREBACK][i] = 0.25;
03473 g_qeglobals.d_savedinfo.colors[COLOR_GRIDBACK][i] = 1.0;
03474 g_qeglobals.d_savedinfo.colors[COLOR_GRIDMINOR][i] = 1.0;
03475 g_qeglobals.d_savedinfo.colors[COLOR_GRIDMAJOR][i] = 0.5;
03476 g_qeglobals.d_savedinfo.colors[COLOR_CAMERABACK][i] = 0.25;
03477 }
03478
03479 g_qeglobals.d_savedinfo.colors[COLOR_GRIDBLOCK][0] = 0.0;
03480 g_qeglobals.d_savedinfo.colors[COLOR_GRIDBLOCK][1] = 0.0;
03481 g_qeglobals.d_savedinfo.colors[COLOR_GRIDBLOCK][2] = 1.0;
03482
03483 g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][0] = 0.0;
03484 g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][1] = 0.0;
03485 g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][2] = 0.0;
03486
03487 g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][0] = 1.0;
03488 g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][1] = 0.0;
03489 g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][2] = 0.0;
03490
03491 g_qeglobals.d_savedinfo.colors[COLOR_CLIPPER][0] = 0.0;
03492 g_qeglobals.d_savedinfo.colors[COLOR_CLIPPER][1] = 0.0;
03493 g_qeglobals.d_savedinfo.colors[COLOR_CLIPPER][2] = 1.0;
03494
03495 g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][0] = 0.0;
03496 g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][1] = 0.0;
03497 g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][2] = 0.0;
03498
03499 g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][0] = 0.5;
03500 g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][1] = 0.0;
03501 g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][2] = 0.75;
03502 Sys_UpdateWindows (W_ALL);
03503 }
03504
03505 void CMainFrame::OnColorSetblack()
03506 {
03507 for (int i=0 ; i<3 ; i++)
03508 {
03509 g_qeglobals.d_savedinfo.colors[COLOR_TEXTUREBACK][i] = 0.25;
03510 g_qeglobals.d_savedinfo.colors[COLOR_GRIDBACK][i] = 0.0;
03511 g_qeglobals.d_savedinfo.colors[COLOR_GRIDMINOR][i] = 0.0;
03512 g_qeglobals.d_savedinfo.colors[COLOR_CAMERABACK][i] = 0.25;
03513 }
03514
03515 g_qeglobals.d_savedinfo.colors[COLOR_GRIDMAJOR][0] = 0.3;
03516 g_qeglobals.d_savedinfo.colors[COLOR_GRIDMAJOR][1] = 0.5;
03517 g_qeglobals.d_savedinfo.colors[COLOR_GRIDMAJOR][2] = 0.5;
03518
03519 g_qeglobals.d_savedinfo.colors[COLOR_GRIDBLOCK][0] = 0.0;
03520 g_qeglobals.d_savedinfo.colors[COLOR_GRIDBLOCK][1] = 0.0;
03521 g_qeglobals.d_savedinfo.colors[COLOR_GRIDBLOCK][2] = 1.0;
03522
03523 g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][0] = 1.0;
03524 g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][1] = 1.0;
03525 g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][2] = 1.0;
03526
03527 g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][0] = 1.0;
03528 g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][1] = 0.0;
03529 g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][2] = 0.0;
03530
03531 g_qeglobals.d_savedinfo.colors[COLOR_CLIPPER][0] = 0.0;
03532 g_qeglobals.d_savedinfo.colors[COLOR_CLIPPER][1] = 0.0;
03533 g_qeglobals.d_savedinfo.colors[COLOR_CLIPPER][2] = 1.0;
03534
03535 g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][0] = 1.0;
03536 g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][1] = 1.0;
03537 g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][2] = 1.0;
03538
03539 g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][0] = 0.7;
03540 g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][1] = 0.7;
03541 g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][2] = 0.0;
03542 Sys_UpdateWindows (W_ALL);
03543 }
03544
03545 void CMainFrame::OnSnaptogrid()
03546 {
03547 g_PrefsDlg.m_bNoClamp ^= 1;
03548 g_PrefsDlg.SavePrefs();
03549 CMenu* pMenu = GetMenu();
03550 if (pMenu)
03551 pMenu->CheckMenuItem(ID_SNAPTOGRID, MF_BYCOMMAND | (!g_PrefsDlg.m_bNoClamp) ? MF_CHECKED : MF_UNCHECKED);
03552 }
03553
03554
03555 void CMainFrame::OnSelectScale()
03556 {
03557
03558
03559 Undo_Start("scale");
03560 Undo_AddBrushList(&selected_brushes);
03561
03562 CScaleDialog dlg;
03563 if (dlg.DoModal() == IDOK)
03564 {
03565 if (dlg.m_fX > 0 && dlg.m_fY > 0 && dlg.m_fZ > 0)
03566 {
03567 Select_Scale(dlg.m_fX, dlg.m_fY, dlg.m_fZ);
03568 Sys_UpdateWindows (W_ALL);
03569 }
03570 else
03571 Sys_Printf("Warning.. Tried to scale by a zero value.");
03572 }
03573
03574 Undo_EndBrushList(&selected_brushes);
03575 Undo_End();
03576 }
03577
03578 void CMainFrame::OnSelectMouserotate()
03579 {
03580 if (ActiveXY())
03581 {
03582 if (ActiveXY()->ClipMode())
03583 OnViewClipper();
03584 if (ActiveXY()->RotateMode())
03585 {
03586
03587 ActiveXY()->SetRotateMode(false);
03588 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SELECT_MOUSEROTATE, FALSE);
03589 Map_BuildBrushData();
03590 }
03591 else
03592 {
03593
03594 if (ActiveXY()->SetRotateMode(true))
03595 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SELECT_MOUSEROTATE, TRUE);
03596 else
03597
03598 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SELECT_MOUSEROTATE, FALSE);
03599 }
03600
03601 }
03602 }
03603
03604 void CMainFrame::OnEditCopybrush()
03605 {
03606 if (ActiveXY())
03607 ActiveXY()->Copy();
03608 }
03609
03610 void CMainFrame::OnEditPastebrush()
03611 {
03612 if (ActiveXY())
03613 ActiveXY()->Paste();
03614 }
03615
03616 void CMainFrame::OnEditUndo()
03617 {
03618
03619
03620 Undo_Undo();
03621 }
03622
03623 void CMainFrame::OnEditRedo()
03624 {
03625 Undo_Redo();
03626 }
03627
03628 void CMainFrame::OnUpdateEditUndo(CCmdUI* pCmdUI)
03629 {
03630
03631
03632
03633
03634
03635
03636 pCmdUI->Enable(Undo_UndoAvailable());
03637 }
03638
03639 void CMainFrame::OnUpdateEditRedo(CCmdUI* pCmdUI)
03640 {
03641 pCmdUI->Enable(Undo_RedoAvailable());
03642 }
03643
03644 void CMainFrame::OnSelectionTextureDec()
03645 {
03646 g_qeglobals.d_savedinfo.m_nTextureTweak--;
03647 if (g_qeglobals.d_savedinfo.m_nTextureTweak == 0)
03648 g_qeglobals.d_savedinfo.m_nTextureTweak--;
03649 SetTexValStatus();
03650 }
03651
03652 void CMainFrame::OnSelectionTextureFit()
03653 {
03654
03655
03656 }
03657
03658 void CMainFrame::OnSelectionTextureInc()
03659 {
03660 g_qeglobals.d_savedinfo.m_nTextureTweak++;
03661 if (g_qeglobals.d_savedinfo.m_nTextureTweak == 0)
03662 g_qeglobals.d_savedinfo.m_nTextureTweak++;
03663 SetTexValStatus();
03664 }
03665
03666 void CMainFrame::OnSelectionTextureRotateclock()
03667 {
03668 Select_RotateTexture(abs(g_PrefsDlg.m_nRotation));
03669 }
03670
03671 void CMainFrame::OnSelectionTextureRotatecounter()
03672 {
03673 Select_RotateTexture(-abs(g_PrefsDlg.m_nRotation));
03674 }
03675
03676 void CMainFrame::OnSelectionTextureScaledown()
03677 {
03678 Select_ScaleTexture(0, -abs(g_qeglobals.d_savedinfo.m_nTextureTweak));
03679 }
03680
03681 void CMainFrame::OnSelectionTextureScaleup()
03682 {
03683 Select_ScaleTexture(0, abs(g_qeglobals.d_savedinfo.m_nTextureTweak));
03684 }
03685
03686 void CMainFrame::OnSelectionTextureScaleLeft()
03687 {
03688 Select_ScaleTexture(-abs(g_qeglobals.d_savedinfo.m_nTextureTweak),0);
03689 }
03690
03691 void CMainFrame::OnSelectionTextureScaleRight()
03692 {
03693 Select_ScaleTexture(abs(g_qeglobals.d_savedinfo.m_nTextureTweak),0);
03694 }
03695
03696 void CMainFrame::OnSelectionTextureShiftdown()
03697 {
03698 Select_ShiftTexture(0, -abs(g_qeglobals.d_savedinfo.m_nTextureTweak));
03699 }
03700
03701 void CMainFrame::OnSelectionTextureShiftleft()
03702 {
03703 Select_ShiftTexture(-abs(g_qeglobals.d_savedinfo.m_nTextureTweak), 0);
03704 }
03705
03706 void CMainFrame::OnSelectionTextureShiftright()
03707 {
03708 Select_ShiftTexture(abs(g_qeglobals.d_savedinfo.m_nTextureTweak), 0);
03709 }
03710
03711 void CMainFrame::OnSelectionTextureShiftup()
03712 {
03713 Select_ShiftTexture(0, abs(g_qeglobals.d_savedinfo.m_nTextureTweak));
03714 }
03715
03716 void CMainFrame::OnGridNext()
03717 {
03718 if (g_qeglobals.d_gridsize < 64)
03719 {
03720 g_qeglobals.d_gridsize = g_qeglobals.d_gridsize << 1;
03721 Sys_UpdateWindows(W_XY | W_Z);
03722 SetGridStatus();
03723
03724 HMENU hMenu = ::GetMenu(GetSafeHwnd());
03725 CheckMenuItem(hMenu, ID_GRID_1, MF_BYCOMMAND | MF_UNCHECKED);
03726 CheckMenuItem(hMenu, ID_GRID_2, MF_BYCOMMAND | MF_UNCHECKED);
03727 CheckMenuItem(hMenu, ID_GRID_4, MF_BYCOMMAND | MF_UNCHECKED);
03728 CheckMenuItem(hMenu, ID_GRID_8, MF_BYCOMMAND | MF_UNCHECKED);
03729 CheckMenuItem(hMenu, ID_GRID_16, MF_BYCOMMAND | MF_UNCHECKED);
03730 CheckMenuItem(hMenu, ID_GRID_32, MF_BYCOMMAND | MF_UNCHECKED);
03731 CheckMenuItem(hMenu, ID_GRID_64, MF_BYCOMMAND | MF_UNCHECKED);
03732
03733 int nID;
03734 switch (g_qeglobals.d_gridsize)
03735 {
03736 case 1: nID = ID_GRID_1; break;
03737 case 2: nID = ID_GRID_2; break;
03738 case 4: nID = ID_GRID_4; break;
03739 case 8: nID = ID_GRID_8; break;
03740 case 16: nID = ID_GRID_16; break;
03741 case 32: nID = ID_GRID_32; break;
03742 case 64: nID = ID_GRID_64; break;
03743 }
03744 CheckMenuItem(hMenu, nID, MF_BYCOMMAND | MF_CHECKED);
03745 }
03746 }
03747
03748 void CMainFrame::OnGridPrev()
03749 {
03750 if (g_qeglobals.d_gridsize > 1)
03751 {
03752 g_qeglobals.d_gridsize = g_qeglobals.d_gridsize >> 1;
03753 Sys_UpdateWindows(W_XY | W_Z);
03754 SetGridStatus();
03755 HMENU hMenu = ::GetMenu(GetSafeHwnd());
03756 CheckMenuItem(hMenu, ID_GRID_1, MF_BYCOMMAND | MF_UNCHECKED);
03757 CheckMenuItem(hMenu, ID_GRID_2, MF_BYCOMMAND | MF_UNCHECKED);
03758 CheckMenuItem(hMenu, ID_GRID_4, MF_BYCOMMAND | MF_UNCHECKED);
03759 CheckMenuItem(hMenu, ID_GRID_8, MF_BYCOMMAND | MF_UNCHECKED);
03760 CheckMenuItem(hMenu, ID_GRID_16, MF_BYCOMMAND | MF_UNCHECKED);
03761 CheckMenuItem(hMenu, ID_GRID_32, MF_BYCOMMAND | MF_UNCHECKED);
03762 CheckMenuItem(hMenu, ID_GRID_64, MF_BYCOMMAND | MF_UNCHECKED);
03763
03764 int nID;
03765 switch (g_qeglobals.d_gridsize)
03766 {
03767 case 1: nID = ID_GRID_1; break;
03768 case 2: nID = ID_GRID_2; break;
03769 case 4: nID = ID_GRID_4; break;
03770 case 8: nID = ID_GRID_8; break;
03771 case 16: nID = ID_GRID_16; break;
03772 case 32: nID = ID_GRID_32; break;
03773 case 64: nID = ID_GRID_64; break;
03774 }
03775 CheckMenuItem(hMenu, nID, MF_BYCOMMAND | MF_CHECKED);
03776 }
03777 }
03778
03779 void CMainFrame::SetGridStatus()
03780 {
03781 CString strStatus;
03782 char c1;
03783 char c2;
03784 c1 = (g_PrefsDlg.m_bTextureLock) ? 'M' : ' ';
03785 c2 = (g_PrefsDlg.m_bRotateLock) ? 'R' : ' ';
03786 strStatus.Format("G:%i T:%i R:%i C:%i L:%c%c", g_qeglobals.d_gridsize, g_qeglobals.d_savedinfo.m_nTextureTweak, g_PrefsDlg.m_nRotation, g_PrefsDlg.m_nCubicScale, c1, c2);
03787 SetStatusText(4, strStatus);
03788 }
03789
03790 void CMainFrame::SetTexValStatus()
03791 {
03792
03793
03794
03795 SetGridStatus();
03796 }
03797
03798 void CMainFrame::OnTextureReplaceall()
03799 {
03800 CFindTextureDlg::show();
03801 }
03802
03803
03804 void CMainFrame::OnScalelockx()
03805 {
03806 if (g_nScaleHow & SCALE_X)
03807 {
03808 g_nScaleHow ^= SCALE_X;
03809 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SCALELOCKX, FALSE);
03810 }
03811 else
03812 {
03813 g_nScaleHow |= SCALE_X;
03814 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SCALELOCKX);
03815 }
03816 }
03817
03818 void CMainFrame::OnScalelocky()
03819 {
03820 if (g_nScaleHow & SCALE_Y)
03821 {
03822 g_nScaleHow ^= SCALE_Y;
03823 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SCALELOCKY, FALSE);
03824 }
03825 else
03826 {
03827 g_nScaleHow |= SCALE_Y;
03828 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SCALELOCKY);
03829 }
03830 }
03831
03832 void CMainFrame::OnScalelockz()
03833 {
03834 if (g_nScaleHow & SCALE_Z)
03835 {
03836 g_nScaleHow ^= SCALE_Z;
03837 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SCALELOCKZ, FALSE);
03838 }
03839 else
03840 {
03841 g_nScaleHow |= SCALE_Z;
03842 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SCALELOCKZ);
03843 }
03844 }
03845
03846 void CMainFrame::OnSelectMousescale()
03847 {
03848 if (ActiveXY())
03849 {
03850 if (ActiveXY()->ClipMode())
03851 OnViewClipper();
03852 if (ActiveXY()->RotateMode())
03853 {
03854
03855 ActiveXY()->SetRotateMode(false);
03856 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SELECT_MOUSESCALE, FALSE);
03857 }
03858 if (ActiveXY()->ScaleMode())
03859 {
03860 ActiveXY()->SetScaleMode(false);
03861 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SELECT_MOUSESCALE, FALSE);
03862 }
03863 else
03864 {
03865 ActiveXY()->SetScaleMode(true);
03866 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SELECT_MOUSESCALE);
03867 }
03868 }
03869 }
03870
03871 void CMainFrame::OnFileImport()
03872 {
03873 }
03874
03875 void CMainFrame::OnFileProjectsettings()
03876 {
03877 DoProjectSettings();
03878 }
03879
03880 void CMainFrame::OnUpdateFileImport(CCmdUI* pCmdUI)
03881 {
03882 pCmdUI->Enable(FALSE);
03883 }
03884
03885 void CMainFrame::OnViewCubein()
03886 {
03887 g_PrefsDlg.m_nCubicScale--;
03888 if (g_PrefsDlg.m_nCubicScale < 1)
03889 g_PrefsDlg.m_nCubicScale = 1;
03890 g_PrefsDlg.SavePrefs();
03891 Sys_UpdateWindows(W_CAMERA);
03892 SetTexValStatus();
03893 }
03894
03895 void CMainFrame::OnViewCubeout()
03896 {
03897 g_PrefsDlg.m_nCubicScale++;
03898 if (g_PrefsDlg.m_nCubicScale > 22)
03899 g_PrefsDlg.m_nCubicScale = 22;
03900 g_PrefsDlg.SavePrefs();
03901 Sys_UpdateWindows(W_CAMERA);
03902 SetTexValStatus();
03903 }
03904
03905 void CMainFrame::OnViewCubicclipping()
03906 {
03907 g_PrefsDlg.m_bCubicClipping ^= 1;
03908 CMenu* pMenu = GetMenu();
03909 if (pMenu)
03910 pMenu->CheckMenuItem(ID_VIEW_CUBICCLIPPING, MF_BYCOMMAND | (g_PrefsDlg.m_bCubicClipping) ? MF_CHECKED : MF_UNCHECKED);
03911 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_VIEW_CUBICCLIPPING, (g_PrefsDlg.m_bCubicClipping) ? TRUE : FALSE);
03912 g_PrefsDlg.SavePrefs();
03913 Map_BuildBrushData ();
03914 Sys_UpdateWindows(W_CAMERA);
03915 }
03916
03917
03918 void CMainFrame::OnFileSaveregion()
03919 {
03920 SaveAsDialog (true);
03921 }
03922
03923 void CMainFrame::OnUpdateFileSaveregion(CCmdUI* pCmdUI)
03924 {
03925 pCmdUI->Enable(static_cast<BOOL>(region_active));
03926 }
03927
03928 void CMainFrame::OnSelectionMovedown()
03929 {
03930 Undo_Start("move up");
03931 Undo_AddBrushList(&selected_brushes);
03932
03933 vec3_t vAmt;
03934 vAmt[0] = vAmt[1] = 0.0;
03935 vAmt[2] = -g_qeglobals.d_gridsize;
03936 Select_Move (vAmt);
03937 Sys_UpdateWindows(W_CAMERA | W_XY | W_Z);
03938
03939 Undo_EndBrushList(&selected_brushes);
03940 Undo_End();
03941 }
03942
03943 void CMainFrame::OnSelectionMoveup()
03944 {
03945 vec3_t vAmt;
03946 vAmt[0] = vAmt[1] = 0.0;
03947 vAmt[2] = g_qeglobals.d_gridsize;
03948 Select_Move (vAmt);
03949 Sys_UpdateWindows(W_CAMERA | W_XY | W_Z);
03950 }
03951
03952 void CMainFrame::OnToolbarMain()
03953 {
03954
03955 }
03956
03957 void CMainFrame::OnToolbarTexture()
03958 {
03959
03960 }
03961
03962 void CMainFrame::OnSelectionPrint()
03963 {
03964 for (brush_t* b=selected_brushes.next ; b != &selected_brushes ; b=b->next)
03965 Brush_Print(b);
03966 }
03967
03968 void CMainFrame::UpdateTextureBar()
03969 {
03970 if (m_wndTextureBar.GetSafeHwnd())
03971 m_wndTextureBar.GetSurfaceAttributes();
03972 }
03973
03974 bool g_bTABDown = false;
03975 bool g_bOriginalFlag;
03976 void CMainFrame::OnSelectionTogglesizepaint()
03977 {
03978 if (::GetAsyncKeyState('Q'))
03979 {
03980 if (!g_bTABDown)
03981 {
03982 g_bTABDown = true;
03983 g_bOriginalFlag = g_PrefsDlg.m_bSizePaint;
03984 g_PrefsDlg.m_bSizePaint = !g_bOriginalFlag;
03985 Sys_UpdateWindows(W_XY);
03986 return;
03987 }
03988 }
03989 else
03990 {
03991 g_bTABDown = false;
03992 g_PrefsDlg.m_bSizePaint = g_bOriginalFlag;
03993 Sys_UpdateWindows(W_XY);
03994 return;
03995 }
03996 }
03997
03998 void CMainFrame::OnBrushMakecone()
03999 {
04000 Undo_Start("make cone");
04001 Undo_AddBrushList(&selected_brushes);
04002 DoSides(true);
04003 Undo_EndBrushList(&selected_brushes);
04004 Undo_End();
04005 }
04006
04007
04008 void CMainFrame::OnTexturesLoad()
04009 {
04010 BROWSEINFO bi;
04011 CString strPath;
04012 char* p = strPath.GetBuffer(MAX_PATH+1);
04013 bi.hwndOwner = GetSafeHwnd();
04014 bi.pidlRoot = NULL;
04015 bi.pszDisplayName = p;
04016 bi.lpszTitle = "Load textures from path";
04017 bi.ulFlags = 0;
04018 bi.lpfn = NULL;
04019 bi.lParam = NULL;
04020 bi.iImage = 0;
04021 LPITEMIDLIST pidlBrowse;
04022 pidlBrowse = SHBrowseForFolder(&bi);
04023 if (pidlBrowse)
04024 {
04025 SHGetPathFromIDList(pidlBrowse, p);
04026 strPath.ReleaseBuffer();
04027 AddSlash(strPath);
04028 Texture_ShowDirectory(strPath.GetBuffer(0));
04029 }
04030 }
04031
04032 void CMainFrame::OnToggleRotatelock()
04033 {
04034 g_PrefsDlg.m_bRotateLock ^= 1;
04035 CMenu* pMenu = GetMenu();
04036 if (pMenu)
04037 pMenu->CheckMenuItem(ID_TOGGLE_ROTATELOCK, MF_BYCOMMAND | (g_PrefsDlg.m_bRotateLock) ? MF_CHECKED : MF_UNCHECKED);
04038 g_PrefsDlg.SavePrefs();
04039 SetGridStatus();
04040 }
04041
04042
04043 void CMainFrame::OnCurveBevel()
04044 {
04045
04046 }
04047
04048 void CMainFrame::OnCurveCylinder()
04049 {
04050
04051 }
04052
04053 void CMainFrame::OnCurveEighthsphere()
04054 {
04055
04056 }
04057
04058 void CMainFrame::OnCurveEndcap()
04059 {
04060
04061 }
04062
04063 void CMainFrame::OnCurveHemisphere()
04064 {
04065
04066 }
04067
04068 void CMainFrame::OnCurveInvertcurve()
04069 {
04070
04071 }
04072
04073 void CMainFrame::OnCurveQuarter()
04074 {
04075
04076 }
04077
04078 void CMainFrame::OnCurveSphere()
04079 {
04080
04081 }
04082
04083 void CMainFrame::OnFileImportmap()
04084 {
04085 CFileDialog dlgFile(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Map files (*.map)|*.map||", this);
04086 if (dlgFile.DoModal() == IDOK)
04087 {
04088 Map_ImportFile(dlgFile.GetPathName().GetBuffer(0));
04089 }
04090 }
04091
04092 void CMainFrame::OnFileExportmap()
04093 {
04094 CFileDialog dlgFile(FALSE, "map", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Map files (*.map)|*.map||", this);
04095 if (dlgFile.DoModal() == IDOK)
04096 {
04097 Map_SaveSelected(dlgFile.GetPathName().GetBuffer(0));
04098 }
04099 }
04100
04101 void CMainFrame::OnViewShowcurves()
04102 {
04103 if ( ( g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_CURVES ) & EXCLUDE_CURVES )
04104 CheckMenuItem ( ::GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWCURVES, MF_BYCOMMAND | MF_UNCHECKED );
04105 else
04106 CheckMenuItem ( ::GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWCURVES, MF_BYCOMMAND | MF_CHECKED );
04107 Sys_UpdateWindows (W_XY|W_CAMERA);
04108 }
04109
04110 void CMainFrame::OnSelectionSelectNudgedown()
04111 {
04112 NudgeSelection(3, g_qeglobals.d_savedinfo.m_nTextureTweak);
04113 }
04114
04115 void CMainFrame::OnSelectionSelectNudgeleft()
04116 {
04117 NudgeSelection(0, g_qeglobals.d_savedinfo.m_nTextureTweak);
04118 }
04119
04120 void CMainFrame::OnSelectionSelectNudgeright()
04121 {
04122 NudgeSelection(2, g_qeglobals.d_savedinfo.m_nTextureTweak);
04123 }
04124
04125 void CMainFrame::OnSelectionSelectNudgeup()
04126 {
04127 NudgeSelection(1, g_qeglobals.d_savedinfo.m_nTextureTweak);
04128 }
04129
04130 void CMainFrame::NudgeSelection(int nDirection, int nAmount)
04131 {
04132 if (ActiveXY()->RotateMode())
04133 {
04134 int nAxis = 0;
04135 if (ActiveXY()->GetViewType() == XY)
04136 {
04137 nAxis = 2;
04138 }
04139 else
04140 if (g_pParentWnd->ActiveXY()->GetViewType() == XZ)
04141 {
04142 nAxis = 1;
04143 nAmount = -nAmount;
04144 }
04145
04146 if (nDirection == 2 || nDirection == 3)
04147 {
04148 nAmount = -nAmount;
04149 }
04150
04151 float fDeg = -nAmount;
04152 float fAdj = nAmount;
04153
04154 g_pParentWnd->ActiveXY()->Rotation()[nAxis] += fAdj;
04155 CString strStatus;
04156 strStatus.Format("Rotation x:: %.1f y:: %.1f z:: %.1f", g_pParentWnd->ActiveXY()->Rotation()[0], g_pParentWnd->ActiveXY()->Rotation()[1], g_pParentWnd->ActiveXY()->Rotation()[2]);
04157 g_pParentWnd->SetStatusText(2, strStatus);
04158 Select_RotateAxis(nAxis, fDeg, false, true);
04159 Sys_UpdateWindows (W_ALL);
04160 }
04161 else
04162 if (ActiveXY()->ScaleMode())
04163 {
04164 if (nDirection == 0 || nDirection == 3)
04165 {
04166 nAmount = -nAmount;
04167 }
04168 vec3_t v;
04169 v[0] = v[1] = v[2] = 1.0;
04170 if (nAmount > 0)
04171 {
04172 v[0] = 1.1;
04173 v[1] = 1.1;
04174 v[2] = 1.1;
04175 }
04176 else
04177 {
04178 v[0] = 0.9;
04179 v[1] = 0.9;
04180 v[2] = 0.9;
04181 }
04182
04183 Select_Scale((g_nScaleHow & SCALE_X) ? v[0] : 1.0,
04184 (g_nScaleHow & SCALE_Y) ? v[1] : 1.0,
04185 (g_nScaleHow & SCALE_Z) ? v[2] : 1.0);
04186 Sys_UpdateWindows (W_ALL);
04187 }
04188 else
04189 {
04190
04191 int nDim;
04192 if (nDirection == 0)
04193 {
04194 nDim = ActiveXY()->GetViewType() == YZ ? 1 : 0;
04195 nAmount = -nAmount;
04196 }
04197 else if (nDirection == 1)
04198 {
04199 nDim = ActiveXY()->GetViewType() == XY ? 1 : 2;
04200 }
04201 else if (nDirection == 2)
04202 {
04203 nDim = ActiveXY()->GetViewType() == YZ ? 1 : 0;
04204 }
04205 else
04206 {
04207 nDim = ActiveXY()->GetViewType() == XY ? 1 : 2;
04208 nAmount = -nAmount;
04209 }
04210 Nudge(nDim, nAmount);
04211 }
04212 }
04213
04214
04215 BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
04216 {
04217 return CFrameWnd::PreTranslateMessage(pMsg);
04218 }
04219
04220 void CMainFrame::Nudge(int nDim, float fNudge)
04221 {
04222 vec3_t vMove;
04223 vMove[0] = vMove[1] = vMove[2] = 0;
04224 vMove[nDim] = fNudge;
04225 Select_Move(vMove, true);
04226 Sys_UpdateWindows (W_ALL);
04227 }
04228
04229 void CMainFrame::OnTexturesLoadlist()
04230 {
04231 CDialogTextures dlg;
04232 if (dlg.DoModal() == IDOK && dlg.m_nSelection >= 0)
04233 {
04234 Texture_ShowDirectory(dlg.m_nSelection + CMD_TEXTUREWAD);
04235 }
04236 }
04237
04238 void CMainFrame::OnDontselectcurve()
04239 {
04240 g_PrefsDlg.m_bSelectCurves ^= 1;
04241 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_DONTSELECTCURVE, (g_PrefsDlg.m_bSelectCurves) ? FALSE : TRUE);
04242 }
04243
04244 void CMainFrame::OnConvertcurves()
04245 {
04246 #if 0
04247 Select_Deselect();
04248 for (brush_t* pb = active_brushes.next ; pb != &active_brushes ; pb = pb->next)
04249 {
04250 if (pb->curveBrush)
04251 {
04252 for (face_t* f = pb->brush_faces ; f ; f=f->next)
04253 {
04254 if (f->texdef.contents & CONTENTS_LADDER)
04255 {
04256 f->texdef.contents &= ~CONTENTS_LADDER;
04257 f->texdef.contents |= CONTENTS_NEGATIVE_CURVE;
04258 }
04259 }
04260 }
04261 }
04262 Map_BuildBrushData();
04263 #endif
04264
04265 }
04266
04267 void CMainFrame::OnDynamicLighting()
04268 {
04269 CCamWnd* pCam = new CCamWnd();
04270 CRect rect(100, 100, 300, 300);
04271 pCam->Create(CAMERA_WINDOW_CLASS, "", WS_OVERLAPPEDWINDOW, rect, GetDesktopWindow(), 12345);
04272 pCam->ShowWindow(SW_SHOW);
04273 }
04274
04275
04276 void CMainFrame::OnCurveSimplepatchmesh()
04277 {
04278 Undo_Start("make simpe patch mesh");
04279 Undo_AddBrushList(&selected_brushes);
04280
04281 CPatchDensityDlg dlg;
04282 dlg.DoModal();
04283
04284 Undo_EndBrushList(&selected_brushes);
04285 Undo_End();
04286 }
04287
04288
04289 void CMainFrame::OnPatchToggleBox()
04290 {
04291 g_bPatchShowBounds ^= 1;
04292 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_PATCH_SHOWBOUNDINGBOX, (g_bPatchShowBounds) ? TRUE : FALSE);
04293 Sys_UpdateWindows(W_ALL);
04294 }
04295
04296 void CMainFrame::OnPatchWireframe()
04297 {
04298 g_bPatchWireFrame ^= 1;
04299 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_PATCH_WIREFRAME, (g_bPatchWireFrame) ? TRUE : FALSE);
04300 Sys_UpdateWindows(W_ALL);
04301 }
04302
04303 void CMainFrame::OnCurvePatchcone()
04304 {
04305 Undo_Start("make curve cone");
04306 Undo_AddBrushList(&selected_brushes);
04307 Patch_BrushToMesh(true);
04308 Sys_UpdateWindows (W_ALL);
04309 Undo_EndBrushList(&selected_brushes);
04310 Undo_End();
04311 }
04312
04313 void CMainFrame::OnCurvePatchtube()
04314 {
04315 Undo_Start("make curve cylinder");
04316 Undo_AddBrushList(&selected_brushes);
04317 Patch_BrushToMesh(false);
04318 Sys_UpdateWindows (W_ALL);
04319 Undo_EndBrushList(&selected_brushes);
04320 Undo_End();
04321 }
04322
04323 void CMainFrame::OnPatchWeld()
04324 {
04325 g_bPatchWeld ^= 1;
04326 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_PATCH_WELD, (g_bPatchWeld) ? TRUE : FALSE);
04327 Sys_UpdateWindows(W_ALL);
04328 }
04329
04330 void CMainFrame::OnCurvePatchbevel()
04331 {
04332 Undo_Start("make bevel");
04333 Undo_AddBrushList(&selected_brushes);
04334 Patch_BrushToMesh(false, true, false);
04335 Sys_UpdateWindows (W_ALL);
04336 Undo_EndBrushList(&selected_brushes);
04337 Undo_End();
04338 }
04339
04340 void CMainFrame::OnCurvePatchendcap()
04341 {
04342 Undo_Start("make end cap");
04343 Undo_AddBrushList(&selected_brushes);
04344 Patch_BrushToMesh(false, false, true);
04345 Sys_UpdateWindows (W_ALL);
04346 Undo_EndBrushList(&selected_brushes);
04347 Undo_End();
04348 }
04349
04350 void CMainFrame::OnCurvePatchinvertedbevel()
04351 {
04352
04353
04354 }
04355
04356 void CMainFrame::OnCurvePatchinvertedendcap()
04357 {
04358
04359
04360 }
04361
04362 void CMainFrame::OnPatchDrilldown()
04363 {
04364 g_bPatchDrillDown ^= 1;
04365 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_PATCH_DRILLDOWN, (g_bPatchDrillDown) ? TRUE : FALSE);
04366 Sys_UpdateWindows(W_ALL);
04367 }
04368
04369
04370 void CMainFrame::OnCurveInsertcolumn()
04371 {
04372 Undo_Start("insert colum");
04373 Undo_AddBrushList(&selected_brushes);
04374
04375 Patch_AdjustSelected(true, true, true);
04376 Sys_UpdateWindows(W_ALL);
04377 Undo_EndBrushList(&selected_brushes);
04378 Undo_End();
04379 }
04380
04381 void CMainFrame::OnCurveInsertrow()
04382 {
04383 Undo_Start("insert row");
04384 Undo_AddBrushList(&selected_brushes);
04385
04386 Patch_AdjustSelected(true, false, true);
04387 Sys_UpdateWindows(W_ALL);
04388 Undo_EndBrushList(&selected_brushes);
04389 Undo_End();
04390 }
04391
04392 void CMainFrame::OnCurveDeletecolumn()
04393 {
04394 Undo_Start("delete column");
04395 Undo_AddBrushList(&selected_brushes);
04396 Patch_AdjustSelected(false, true, true);
04397 Sys_UpdateWindows(W_ALL);
04398 Undo_EndBrushList(&selected_brushes);
04399 Undo_End();
04400 }
04401
04402 void CMainFrame::OnCurveDeleterow()
04403 {
04404 Undo_Start("delete row");
04405 Undo_AddBrushList(&selected_brushes);
04406 Patch_AdjustSelected(false, false, true);
04407 Sys_UpdateWindows(W_ALL);
04408 Undo_EndBrushList(&selected_brushes);
04409 Undo_End();
04410 }
04411
04412 void CMainFrame::OnCurveInsertAddcolumn()
04413 {
04414 Undo_Start("add (2) columns");
04415 Undo_AddBrushList(&selected_brushes);
04416 Patch_AdjustSelected(true, true, true);
04417 Sys_UpdateWindows(W_ALL);
04418 Undo_EndBrushList(&selected_brushes);
04419 Undo_End();
04420 }
04421
04422 void CMainFrame::OnCurveInsertAddrow()
04423 {
04424 Undo_Start("add (2) rows");
04425 Undo_AddBrushList(&selected_brushes);
04426 Patch_AdjustSelected(true, false, true);
04427 Sys_UpdateWindows(W_ALL);
04428 Undo_EndBrushList(&selected_brushes);
04429 Undo_End();
04430 }
04431
04432 void CMainFrame::OnCurveInsertInsertcolumn()
04433 {
04434 Undo_Start("insert (2) columns");
04435 Undo_AddBrushList(&selected_brushes);
04436 Patch_AdjustSelected(true, true, false);
04437 Sys_UpdateWindows(W_ALL);
04438 Undo_EndBrushList(&selected_brushes);
04439 Undo_End();
04440 }
04441
04442 void CMainFrame::OnCurveInsertInsertrow()
04443 {
04444 Undo_Start("insert (2) rows");
04445 Undo_AddBrushList(&selected_brushes);
04446 Patch_AdjustSelected(true, false, false);
04447 Sys_UpdateWindows(W_ALL);
04448 Undo_EndBrushList(&selected_brushes);
04449 Undo_End();
04450 }
04451
04452 void CMainFrame::OnCurveNegative()
04453 {
04454 Patch_ToggleInverted();
04455
04456 }
04457
04458 void CMainFrame::OnCurveNegativeTextureX()
04459 {
04460 Patch_InvertTexture(false);
04461
04462 }
04463
04464 void CMainFrame::OnCurveNegativeTextureY()
04465 {
04466 Patch_InvertTexture(true);
04467
04468 }
04469
04470
04471 void CMainFrame::OnCurveDeleteFirstcolumn()
04472 {
04473 Undo_Start("delete first (2) columns");
04474 Undo_AddBrushList(&selected_brushes);
04475 Patch_AdjustSelected(false, true, true);
04476 Sys_UpdateWindows(W_ALL);
04477 Undo_EndBrushList(&selected_brushes);
04478 Undo_End();
04479 }
04480
04481 void CMainFrame::OnCurveDeleteFirstrow()
04482 {
04483 Undo_Start("delete first (2) rows");
04484 Undo_AddBrushList(&selected_brushes);
04485 Patch_AdjustSelected(false, false, true);
04486 Sys_UpdateWindows(W_ALL);
04487 Undo_EndBrushList(&selected_brushes);
04488 Undo_End();
04489 }
04490
04491 void CMainFrame::OnCurveDeleteLastcolumn()
04492 {
04493 Undo_Start("delete last (2) columns");
04494 Undo_AddBrushList(&selected_brushes);
04495 Patch_AdjustSelected(false, true, false);
04496 Sys_UpdateWindows(W_ALL);
04497 Undo_EndBrushList(&selected_brushes);
04498 Undo_End();
04499 }
04500
04501 void CMainFrame::OnCurveDeleteLastrow()
04502 {
04503 Undo_Start("delete last (2) rows");
04504 Undo_AddBrushList(&selected_brushes);
04505 Patch_AdjustSelected(false, false, false);
04506 Sys_UpdateWindows(W_ALL);
04507 Undo_EndBrushList(&selected_brushes);
04508 Undo_End();
04509 }
04510
04511 void CMainFrame::OnPatchBend()
04512 {
04513 Patch_BendToggle();
04514 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_PATCH_BEND, (g_bPatchBendMode) ? TRUE : FALSE);
04515 Sys_UpdateWindows(W_ALL);
04516 }
04517
04518 void CMainFrame::OnPatchInsdel()
04519 {
04520 Patch_InsDelToggle();
04521 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_PATCH_INSDEL, (g_bPatchInsertMode) ? TRUE : FALSE);
04522 Sys_UpdateWindows(W_ALL);
04523 }
04524
04525 void CMainFrame::OnPatchEnter()
04526 {
04527
04528 }
04529
04530 void CMainFrame::OnPatchTab()
04531 {
04532 if (g_bPatchBendMode)
04533 Patch_BendHandleTAB();
04534 else if (g_bPatchInsertMode)
04535 Patch_InsDelHandleTAB();
04536 else
04537 {
04538
04539
04540
04541 brush_t *b = selected_brushes.next;
04542 entity_t * e;
04543 if (b != &selected_brushes)
04544 {
04545 if (strcmpi(b->owner->eclass->name, "worldspawn") != 0)
04546 {
04547 e = b->owner;
04548 Select_Deselect();
04549 for (brush_t * b2 = e->brushes.onext ; b2 != &e->brushes ; b2 = b2->onext)
04550 {
04551 if (b == b2)
04552 {
04553 b2 = b2->onext;
04554 break;
04555 }
04556 }
04557 if (b2 == &e->brushes)
04558 b2 = b2->onext;
04559
04560 Select_Brush(b2, false);
04561 Sys_UpdateWindows(W_ALL);
04562 }
04563 }
04564 }
04565 }
04566
04567 void CMainFrame::UpdatePatchToolbarButtons()
04568 {
04569 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_PATCH_BEND, (g_bPatchBendMode) ? TRUE : FALSE);
04570 m_wndToolBar.GetToolBarCtrl().CheckButton(ID_PATCH_INSDEL, (g_bPatchInsertMode) ? TRUE : FALSE);
04571 }
04572
04573 void CMainFrame::OnCurvePatchdensetube()
04574 {
04575 Undo_Start("dense cylinder");
04576 Undo_AddBrushList(&selected_brushes);
04577
04578 Patch_BrushToMesh(false);
04579 OnCurveInsertAddrow();
04580 OnCurveInsertInsertrow();
04581 Sys_UpdateWindows (W_ALL);
04582
04583 Undo_EndBrushList(&selected_brushes);
04584 Undo_End();
04585 }
04586
04587 void CMainFrame::OnCurvePatchverydensetube()
04588 {
04589 Undo_Start("very dense cylinder");
04590 Undo_AddBrushList(&selected_brushes);
04591
04592 Patch_BrushToMesh(false);
04593 OnCurveInsertAddrow();
04594 OnCurveInsertInsertrow();
04595 OnCurveInsertAddrow();
04596 OnCurveInsertInsertrow();
04597 Sys_UpdateWindows (W_ALL);
04598
04599 Undo_EndBrushList(&selected_brushes);
04600 Undo_End();
04601 }
04602
04603 void CMainFrame::OnCurveCap()
04604 {
04605 Patch_CapCurrent();
04606 Sys_UpdateWindows (W_ALL);
04607 }
04608
04609
04610 void CMainFrame::OnCurveCapInvertedbevel()
04611 {
04612 Patch_CapCurrent(true);
04613 Sys_UpdateWindows (W_ALL);
04614 }
04615
04616 void CMainFrame::OnCurveCapInvertedendcap()
04617 {
04618 Patch_CapCurrent(false, true);
04619 Sys_UpdateWindows (W_ALL);
04620 }
04621
04622 void CMainFrame::OnCurveRedisperseCols()
04623 {
04624 Patch_DisperseColumns();
04625 Sys_UpdateWindows (W_ALL);
04626 }
04627
04628 void CMainFrame::OnCurveRedisperseRows()
04629 {
04630 Patch_DisperseRows();
04631 Sys_UpdateWindows (W_ALL);
04632 }
04633
04634 void CMainFrame::OnPatchNaturalize()
04635 {
04636 Patch_NaturalizeSelected();
04637 Sys_UpdateWindows (W_ALL);
04638 }
04639
04640 void CMainFrame::OnSnapToGrid()
04641 {
04642 Select_SnapToGrid();
04643 Sys_UpdateWindows (W_ALL);
04644 }
04645
04646 void CMainFrame::OnCurvePatchsquare()
04647 {
04648 Undo_Start("square cylinder");
04649 Undo_AddBrushList(&selected_brushes);
04650
04651 Patch_BrushToMesh(false, false, false, true);
04652 Sys_UpdateWindows (W_ALL);
04653
04654 Undo_EndBrushList(&selected_brushes);
04655 Undo_End();
04656 }
04657
04658 void CMainFrame::OnTerrainCreateFromBrush()
04659 {
04660 Terrain_BrushToMesh();
04661 Sys_UpdateWindows (W_ALL);
04662 }
04663
04664 void CMainFrame::CheckTextureScale(int id)
04665 {
04666 CMenu* pMenu = GetMenu();
04667 if (pMenu)
04668 {
04669 pMenu->CheckMenuItem(ID_TEXTURES_TEXTUREWINDOWSCALE_10, MF_BYCOMMAND | MF_UNCHECKED);
04670 pMenu->CheckMenuItem(ID_TEXTURES_TEXTUREWINDOWSCALE_25, MF_BYCOMMAND | MF_UNCHECKED);
04671 pMenu->CheckMenuItem(ID_TEXTURES_TEXTUREWINDOWSCALE_50, MF_BYCOMMAND | MF_UNCHECKED);
04672 pMenu->CheckMenuItem(ID_TEXTURES_TEXTUREWINDOWSCALE_100, MF_BYCOMMAND | MF_UNCHECKED);
04673 pMenu->CheckMenuItem(ID_TEXTURES_TEXTUREWINDOWSCALE_200, MF_BYCOMMAND | MF_UNCHECKED);
04674 pMenu->CheckMenuItem(id, MF_BYCOMMAND | MF_CHECKED);
04675 }
04676 g_PrefsDlg.SavePrefs();
04677 Texture_ResetPosition();
04678 Sys_UpdateWindows(W_TEXTURE);
04679 }
04680
04681 void CMainFrame::OnTexturesTexturewindowscale10()
04682 {
04683 g_PrefsDlg.m_nTextureScale = 10;
04684 CheckTextureScale(ID_TEXTURES_TEXTUREWINDOWSCALE_10);
04685 }
04686
04687 void CMainFrame::OnTexturesTexturewindowscale100()
04688 {
04689 g_PrefsDlg.m_nTextureScale = 100;
04690 CheckTextureScale(ID_TEXTURES_TEXTUREWINDOWSCALE_100);
04691 }
04692
04693 void CMainFrame::OnTexturesTexturewindowscale200()
04694 {
04695 g_PrefsDlg.m_nTextureScale = 200;
04696 CheckTextureScale(ID_TEXTURES_TEXTUREWINDOWSCALE_200);
04697 }
04698
04699 void CMainFrame::OnTexturesTexturewindowscale25()
04700 {
04701 g_PrefsDlg.m_nTextureScale = 25;
04702 CheckTextureScale(ID_TEXTURES_TEXTUREWINDOWSCALE_25);
04703 }
04704
04705 void CMainFrame::OnTexturesTexturewindowscale50()
04706 {
04707 g_PrefsDlg.m_nTextureScale = 50;
04708 CheckTextureScale(ID_TEXTURES_TEXTUREWINDOWSCALE_50);
04709 }
04710
04711
04712
04713 void CMainFrame::OnTexturesFlush()
04714 {
04715 Texture_Flush();
04716 Sys_UpdateWindows(W_ALL);
04717 }
04718
04719 void CMainFrame::OnCurveOverlayClear()
04720 {
04721 Patch_ClearOverlays();
04722 Sys_UpdateWindows(W_ALL);
04723 }
04724
04725 void CMainFrame::OnCurveOverlaySet()
04726 {
04727 Patch_SetOverlays();
04728 Sys_UpdateWindows(W_ALL);
04729 }
04730
04731 void CMainFrame::OnCurveThicken()
04732 {
04733 Undo_Start("curve thicken");
04734 Undo_AddBrushList(&selected_brushes);
04735
04736 CDialogThick dlg;
04737 if (dlg.DoModal() == IDOK)
04738 {
04739 Patch_Thicken(dlg.m_nAmount, dlg.m_bSeams);
04740 Sys_UpdateWindows(W_ALL);
04741 }
04742
04743 Undo_EndBrushList(&selected_brushes);
04744 Undo_End();
04745 }
04746
04747 void CMainFrame::OnCurveCyclecap()
04748 {
04749 Patch_NaturalizeSelected(true, true);
04750 Sys_UpdateWindows (W_ALL);
04751 }
04752
04753 void CMainFrame::OnCurveMatrixTranspose()
04754 {
04755 Patch_Transpose();
04756 Sys_UpdateWindows (W_ALL);
04757 }
04758
04759 void CMainFrame::OnTexturesReloadshaders()
04760 {
04761 CWaitCursor wait;
04762 ReloadShaders();
04763 Sys_UpdateWindows (W_ALL);
04764 }
04765
04766 void CMainFrame::SetEntityCheck()
04767 {
04768 CMenu* pMenu = GetMenu();
04769 if (pMenu)
04770 {
04771 pMenu->CheckMenuItem(ID_VIEW_ENTITIESAS_BOUNDINGBOX, MF_BYCOMMAND | (g_PrefsDlg.m_nEntityShowState == ENTITY_BOX) ? MF_CHECKED : MF_UNCHECKED);
04772 pMenu->CheckMenuItem(ID_VIEW_ENTITIESAS_WIREFRAME, MF_BYCOMMAND | (g_PrefsDlg.m_nEntityShowState == ENTITY_WIRE) ? MF_CHECKED : MF_UNCHECKED);
04773 pMenu->CheckMenuItem(ID_VIEW_ENTITIESAS_SELECTEDWIREFRAME, MF_BYCOMMAND | (g_PrefsDlg.m_nEntityShowState == ENTITY_SELECTED) ? MF_CHECKED : MF_UNCHECKED);
04774 pMenu->CheckMenuItem(ID_VIEW_ENTITIESAS_SELECTEDSKINNED, MF_BYCOMMAND | (g_PrefsDlg.m_nEntityShowState == ENTITY_SELECTED_SKIN) ? MF_CHECKED : MF_UNCHECKED);
04775 pMenu->CheckMenuItem(ID_VIEW_ENTITIESAS_SKINNED, MF_BYCOMMAND | (g_PrefsDlg.m_nEntityShowState == ENTITY_SKINNED) ? MF_CHECKED : MF_UNCHECKED);
04776 pMenu->CheckMenuItem(ID_VIEW_ENTITIESAS_SKINNEDANDBOXED, MF_BYCOMMAND | (g_PrefsDlg.m_nEntityShowState == ENTITY_SKINNED_BOXED) ? MF_CHECKED : MF_UNCHECKED);
04777 }
04778 }
04779
04780
04781 void CMainFrame::OnShowEntities()
04782 {
04783 HandlePopup(this, IDR_POPUP_ENTITY);
04784 }
04785
04786 void CMainFrame::OnViewEntitiesasBoundingbox()
04787 {
04788 g_PrefsDlg.m_nEntityShowState = ENTITY_BOX;
04789 SetEntityCheck();
04790 g_PrefsDlg.SavePrefs();
04791 Sys_UpdateWindows (W_ALL);
04792 }
04793
04794 void CMainFrame::OnViewEntitiesasSelectedskinned()
04795 {
04796 g_PrefsDlg.m_nEntityShowState = ENTITY_SELECTED_SKIN;
04797 SetEntityCheck();
04798 g_PrefsDlg.SavePrefs();
04799 Sys_UpdateWindows (W_ALL);
04800 }
04801
04802 void CMainFrame::OnViewEntitiesasSelectedwireframe()
04803 {
04804 g_PrefsDlg.m_nEntityShowState = ENTITY_SELECTED;
04805 SetEntityCheck();
04806 g_PrefsDlg.SavePrefs();
04807 Sys_UpdateWindows (W_ALL);
04808 }
04809
04810 void CMainFrame::OnViewEntitiesasSkinned()
04811 {
04812 g_PrefsDlg.m_nEntityShowState = ENTITY_SKINNED;
04813 SetEntityCheck();
04814 g_PrefsDlg.SavePrefs();
04815 Sys_UpdateWindows (W_ALL);
04816 }
04817
04818 void CMainFrame::OnViewEntitiesasSkinnedandboxed()
04819 {
04820 g_PrefsDlg.m_nEntityShowState = ENTITY_SKINNED_BOXED;
04821 SetEntityCheck();
04822 g_PrefsDlg.SavePrefs();
04823 Sys_UpdateWindows (W_ALL);
04824 }
04825
04826 void CMainFrame::OnViewEntitiesasWireframe()
04827 {
04828 g_PrefsDlg.m_nEntityShowState = ENTITY_WIRE;
04829 SetEntityCheck();
04830 g_PrefsDlg.SavePrefs();
04831 Sys_UpdateWindows (W_ALL);
04832 }
04833
04834
04835
04836
04837
04838
04839
04840 void CMainFrame::OnPluginsRefresh()
04841 {
04842 CleanPlugInMenu();
04843 CString str(g_strAppPath);
04844 AddSlash(str);
04845 str += "plugins\\";
04846 m_PlugInMgr.Init(str);
04847 }
04848
04849 void CMainFrame::CleanPlugInMenu()
04850 {
04851 m_nNextPlugInID = ID_PLUGIN_START;
04852 CMenu* pMenu = GetMenu();
04853
04854
04855
04856 CMenu* pSub = pMenu->GetSubMenu(MENU_PLUGIN);
04857 if (pSub)
04858 {
04859 int n = pSub->GetMenuItemCount();
04860 for (int i = n; i > 1 ; i--)
04861 {
04862 pSub->RemoveMenu(i, MF_BYPOSITION);
04863 }
04864 }
04865 }
04866
04867 void CMainFrame::AddPlugInMenuItem(CPlugIn* pPlugIn)
04868 {
04869 const char *menuText;
04870 CMenu* pMenu = GetMenu();
04871 CMenu* pSub = pMenu->GetSubMenu(MENU_PLUGIN);
04872 if (pSub)
04873 {
04874 CMenu* pChild = new CMenu();
04875 pChild->CreateMenu();
04876 int nCount = pPlugIn->getCommandCount();
04877 if (nCount > 0)
04878 {
04879 while (nCount > 0)
04880 {
04881 menuText = pPlugIn->getCommand(--nCount);
04882 if (menuText != NULL && strlen(menuText) > 0)
04883 {
04884 if(!strcmp(menuText, "-"))
04885 pChild->AppendMenu(MF_SEPARATOR, NULL);
04886 else
04887 pChild->AppendMenu(MF_STRING, m_nNextPlugInID, menuText);
04888 pPlugIn->addMenuID(m_nNextPlugInID++);
04889 }
04890 }
04891 pSub->AppendMenu(MF_POPUP, reinterpret_cast<unsigned int>(pChild->GetSafeHmenu()), pPlugIn->getMenuName());
04892 }
04893 }
04894 }
04895
04896 void CMainFrame::OnPlugIn(unsigned int nID)
04897 {
04898 CMenu* pMenu = GetMenu();
04899 CString str;
04900 pMenu->GetMenuString(nID, str, MF_BYCOMMAND);
04901 m_PlugInMgr.Dispatch(nID, str);
04902 }
04903
04904 void CMainFrame::OnViewShowhint()
04905 {
04906 if ( ( g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_HINT ) & EXCLUDE_HINT )
04907 CheckMenuItem ( ::GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWHINT, MF_BYCOMMAND | MF_UNCHECKED );
04908 else
04909 CheckMenuItem ( ::GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWHINT, MF_BYCOMMAND | MF_CHECKED );
04910 Sys_UpdateWindows (W_XY|W_CAMERA);
04911 }
04912
04913 void CMainFrame::OnTexturesShowall()
04914 {
04915 Texture_ShowAll();
04916 }
04917
04918 void CMainFrame::OnPatchInspector()
04919 {
04920 DoPatchInspector();
04921 }
04922
04923 void CMainFrame::OnViewOpengllighting()
04924 {
04925 g_PrefsDlg.m_bGLLighting ^= 1;
04926 g_PrefsDlg.SavePrefs();
04927 CheckMenuItem ( ::GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_OPENGLLIGHTING, MF_BYCOMMAND | (g_PrefsDlg.m_bGLLighting) ? MF_CHECKED : MF_UNCHECKED );
04928 Sys_UpdateWindows (W_XY|W_CAMERA);
04929 }
04930
04931 void CMainFrame::OnSelectAll()
04932 {
04933 Select_AllOfType();
04934 }
04935
04936 void CMainFrame::OnViewShowcaulk()
04937 {
04938 if ( ( g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_CAULK ) & EXCLUDE_CAULK )
04939 CheckMenuItem ( ::GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWCAULK, MF_BYCOMMAND | MF_UNCHECKED );
04940 else
04941 CheckMenuItem ( ::GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWCAULK, MF_BYCOMMAND | MF_CHECKED );
04942 Sys_UpdateWindows (W_XY|W_CAMERA);
04943
04944 }
04945
04946 void CMainFrame::OnCurveFreeze()
04947 {
04948 Patch_Freeze();
04949 }
04950
04951 void CMainFrame::OnCurveUnFreeze()
04952 {
04953 Patch_UnFreeze(false);
04954 }
04955
04956 void CMainFrame::OnCurveUnFreezeAll()
04957 {
04958 Patch_UnFreeze(true);
04959 }
04960
04961 void CMainFrame::OnSelectReselect()
04962 {
04963 Select_Reselect();
04964 }
04965
04966 void CMainFrame::OnViewShowangles()
04967 {
04968 if ( ( g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_ANGLES ) & EXCLUDE_ANGLES )
04969 CheckMenuItem ( ::GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWANGLES, MF_BYCOMMAND | MF_UNCHECKED );
04970 else
04971 CheckMenuItem ( ::GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWANGLES, MF_BYCOMMAND | MF_CHECKED );
04972 Sys_UpdateWindows (W_XY|W_CAMERA);
04973 }
04974
04975 void CMainFrame::OnEditSaveprefab()
04976 {
04977 CFileDialog dlgFile(FALSE, "pfb", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Prefab files (*.pfb)|*.pfb||", this);
04978 char CurPath[1024];
04979 if (g_PrefsDlg.m_strPrefabPath.GetLength() > 0)
04980 {
04981 strcpy(CurPath, g_PrefsDlg.m_strPrefabPath);
04982 }
04983 else
04984 {
04985 ::GetCurrentDirectory(1024, CurPath);
04986 }
04987 dlgFile.m_ofn.lpstrInitialDir = CurPath;
04988 if (dlgFile.DoModal() == IDOK)
04989 {
04990 Map_SaveSelected(dlgFile.GetPathName().GetBuffer(0));
04991 }
04992 }
04993
04994
04995 void CMainFrame::OnEditLoadprefab()
04996 {
04997 CFileDialog dlgFile(TRUE, "pfb", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Prefab files (*.pfb)|*.pfb||", this);
04998 char CurPath[1024];
04999 if (g_PrefsDlg.m_strPrefabPath.GetLength() > 0)
05000 {
05001 strcpy(CurPath, g_PrefsDlg.m_strPrefabPath);
05002 }
05003 else
05004 {
05005 ::GetCurrentDirectory(1024, CurPath);
05006 }
05007 dlgFile.m_ofn.lpstrInitialDir = CurPath;
05008 if (dlgFile.DoModal() == IDOK)
05009 {
05010 Map_ImportFile(dlgFile.GetPathName().GetBuffer(0));
05011 }
05012 }
05013
05014 void CMainFrame::OnCurveMoreendcapsbevelsSquarebevel()
05015 {
05016 Undo_Start("square bevel");
05017 Undo_AddBrushList(&selected_brushes);
05018
05019 Patch_BrushToMesh(false, true, false, true);
05020 Sys_UpdateWindows (W_ALL);
05021
05022 Undo_EndBrushList(&selected_brushes);
05023 Undo_End();
05024 }
05025
05026 void CMainFrame::OnCurveMoreendcapsbevelsSquareendcap()
05027 {
05028 Undo_Start("square endcap");
05029 Undo_AddBrushList(&selected_brushes);
05030
05031 Patch_BrushToMesh(false, false, true, true);
05032 Sys_UpdateWindows (W_ALL);
05033
05034 Undo_EndBrushList(&selected_brushes);
05035 Undo_End();
05036 }
05037
05038 void CMainFrame::OnBrushPrimitivesSphere()
05039 {
05040 Undo_Start("make sphere");
05041 Undo_AddBrushList(&selected_brushes);
05042
05043 DoSides(false, true);
05044
05045 Undo_EndBrushList(&selected_brushes);
05046 Undo_End();
05047 }
05048
05049 extern bool g_bCrossHairs;
05050 void CMainFrame::OnViewCrosshair()
05051 {
05052 g_bCrossHairs ^= 1;
05053 Sys_UpdateWindows (W_XY);
05054 }
05055
05056 void CMainFrame::OnViewHideshowHideselected()
05057 {
05058 Select_Hide();
05059 Select_Deselect();
05060 }
05061
05062 void CMainFrame::OnViewHideshowShowhidden()
05063 {
05064 Select_ShowAllHidden();
05065 }
05066
05067 void CMainFrame::OnTexturesShadersShow()
05068 {
05069 g_PrefsDlg.m_bShowShaders ^= 1;
05070 CheckMenuItem ( ::GetMenu(g_qeglobals.d_hwndMain), ID_TEXTURES_SHADERS_SHOW, MF_BYCOMMAND | ((g_PrefsDlg.m_bShowShaders) ? MF_CHECKED : MF_UNCHECKED ));
05071 Sys_UpdateWindows(W_TEXTURE);
05072
05073 }
05074
05075 void CMainFrame::OnTexturesFlushUnused()
05076 {
05077 Texture_FlushUnused();
05078 Sys_UpdateWindows(W_TEXTURE);
05079 }
05080
05081 void CMainFrame::OnSelectionInvert()
05082 {
05083 Select_Invert();
05084 Sys_UpdateWindows(W_XY | W_Z | W_CAMERA);
05085 }
05086
05087
05088 void CMainFrame::OnViewGroups()
05089 {
05090 if (m_nCurrentStyle == 0 || m_nCurrentStyle == 3)
05091 {
05092 if (::IsWindowVisible(g_qeglobals.d_hwndEntity) && inspector_mode == W_GROUP)
05093 ::ShowWindow(g_qeglobals.d_hwndEntity, SW_HIDE);
05094 else
05095 {
05096 ::ShowWindow(g_qeglobals.d_hwndEntity, SW_NORMAL);
05097 SetInspectorMode(W_GROUP);
05098 }
05099 }
05100 else
05101 {
05102 if (inspector_mode == W_GROUP && m_nCurrentStyle != QR_QE4)
05103 {
05104 if (::IsWindowVisible(g_qeglobals.d_hwndEntity))
05105 ::ShowWindow(g_qeglobals.d_hwndEntity, SW_HIDE);
05106 else
05107 ::ShowWindow(g_qeglobals.d_hwndEntity, SW_NORMAL);
05108 }
05109 else
05110 {
05111 ::ShowWindow(g_qeglobals.d_hwndEntity, SW_NORMAL);
05112 SetInspectorMode(W_GROUP);
05113 }
05114 }
05115 }
05116
05117 void CMainFrame::OnDropGroupAddtoWorld()
05118 {
05119 Select_AddToGroup("World");
05120 Sys_UpdateWindows (W_ALL);
05121 }
05122
05123 void CMainFrame::OnDropGroupName()
05124 {
05125 CNameDlg dlg("Name Selection", this);
05126 if (dlg.DoModal() == IDOK)
05127 {
05128 Select_Name(dlg.m_strName);
05129 Sys_UpdateWindows (W_ALL);
05130 }
05131 }
05132
05133 void CMainFrame::OnDropGroupNewgroup()
05134 {
05135
05136 }
05137
05138 void CMainFrame::OnDropGroupRemove()
05139 {
05140 Select_AddToGroup("World");
05141 Sys_UpdateWindows (W_ALL);
05142 }
05143
05144 void CMainFrame::OnSplinesMode()
05145 {
05146 g_qeglobals.d_select_mode = sel_addpoint;
05147 g_qeglobals.selectObject = g_splineList->getPositionObj();
05148 g_splineList->clear();
05149 g_splineList->startEdit(true);
05150 showCameraInspector();
05151 Sys_UpdateWindows(W_ALL);
05152 }
05153
05154 void CMainFrame::OnSplinesLoad()
05155 {
05156 g_splineList->load("maps/test.camera");
05157 g_splineList->buildCamera();
05158 }
05159
05160 void CMainFrame::OnSplinesSave()
05161 {
05162 g_splineList->save("maps/test.camera");
05163 }
05164
05165 void CMainFrame::OnSplinesEdit()
05166 {
05167 showCameraInspector();
05168 Sys_UpdateWindows(W_ALL);
05169 }
05170
05171 extern void testCamSpeed();
05172 void CMainFrame::OnSplineTest()
05173 {
05174 long start = GetTickCount();
05175 g_splineList->startCamera(start);
05176 float cycle = g_splineList->getTotalTime();
05177 long msecs = cycle * 1000;
05178 long current = start;
05179 vec3_t lookat;
05180 VectorClear(lookat);
05181 vec3_t dir;
05182 while (current < start + msecs) {
05183 float fov;
05184 g_splineList->getCameraInfo(current, &g_pParentWnd->GetCamera()->Camera().origin[0], &dir[0], &fov);
05185 g_pParentWnd->GetCamera()->Camera().angles[1] = atan2 (dir[1], dir[0])*180/3.14159;
05186 g_pParentWnd->GetCamera()->Camera().angles[0] = asin (dir[2])*180/3.14159;
05187 g_pParentWnd->UpdateWindows(W_XY | W_CAMERA);
05188 current = GetTickCount();
05189 }
05190 g_splineList->setRunning(false);
05191 }
05192
05193 void CMainFrame::OnSplinesTarget()
05194 {
05195 }
05196
05197 void CMainFrame::OnSplinesTargetPoints()
05198 {
05199 }
05200
05201 void CMainFrame::OnSplinesCameraPoints()
05202 {
05203 }
05204
05205 void CMainFrame::OnPopupNewcameraInterpolated()
05206 {
05207 g_qeglobals.d_select_mode = sel_addpoint;
05208 g_qeglobals.selectObject = g_splineList->startNewCamera(idCameraPosition::INTERPOLATED);
05209 OnSplinesEdit();
05210 }
05211
05212 void CMainFrame::OnPopupNewcameraSpline()
05213 {
05214 g_qeglobals.d_select_mode = sel_addpoint;
05215 g_qeglobals.selectObject = g_splineList->startNewCamera(idCameraPosition::SPLINE);
05216 OnSplinesEdit();
05217 }
05218
05219 void CMainFrame::OnPopupNewcameraFixed()
05220 {
05221 g_qeglobals.d_select_mode = sel_addpoint;
05222 g_qeglobals.selectObject = g_splineList->startNewCamera(idCameraPosition::FIXED);
05223 OnSplinesEdit();
05224 }