Main Page | Class Hierarchy | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

MainFrm.cpp

Go to the documentation of this file.
00001 /*
00002 ===========================================================================
00003 Copyright (C) 1999-2005 Id Software, Inc.
00004 
00005 This file is part of Quake III Arena source code.
00006 
00007 Quake III Arena source code is free software; you can redistribute it
00008 and/or modify it under the terms of the GNU General Public License as
00009 published by the Free Software Foundation; either version 2 of the License,
00010 or (at your option) any later version.
00011 
00012 Quake III Arena source code is distributed in the hope that it will be
00013 useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015 GNU General Public License for more details.
00016 
00017 You should have received a copy of the GNU General Public License
00018 along with Foobar; if not, write to the Free Software
00019 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
00020 ===========================================================================
00021 */
00022 // MainFrm.cpp : implementation of the CMainFrame class
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 // globals
00063 CString g_strAppPath;                   // holds the full path of the executable
00064 CEdit* g_pEdit = NULL;                  // used originally to make qe4 work with mfc.. still used
00065 CMainFrame* g_pParentWnd = NULL;        // used to precast to CMainFrame
00066 CPrefsDlg g_Preferences;                // global prefs instance
00067 CPrefsDlg& g_PrefsDlg = g_Preferences;  // reference used throughout
00068 int g_nUpdateBits = 0;                  // window update flags
00069 bool g_bScreenUpdates = true;           // whether window painting is active, used in a few places
00070                                         // to disable updates for speed reasons
00071                                         // both of the above should be made members of CMainFrame
00072 
00073 //bool g_bSnapToGrid = true;              // early use, no longer in use, clamping pref will be used
00074 CString g_strProject;                   // holds the active project filename
00075 
00076 
00078 // CMainFrame
00079 
00080 // command mapping stuff
00081 //
00082 // m_strCommand is the command string
00083 // m_nKey is the windows VK_??? equivelant
00084 // m_nModifiers are key states as follows
00085 //  bit
00086 //    0 - shift
00087 //    1 - alt
00088 //    2 - control
00089 //    4 - press only
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 //  {"ToggleCubicClip", '\\', 0x04, ID_VIEW_CUBICCLIPPING},
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   //{"ForceCameraWalk", 'Q', 0x08, ID_CAMERA_ACTIVE}
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     //{{AFX_MSG_MAP(CMainFrame)
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     //}}AFX_MSG_MAP
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,           // status line indicator
00618     ID_SEPARATOR,           // status line indicator
00619     ID_SEPARATOR,           // status line indicator
00620     ID_SEPARATOR,           // status line indicator
00621     ID_SEPARATOR,           // status line indicator
00622     ID_SEPARATOR,           // status line indicator
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 // CMainFrame construction/destruction
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   // Get the current position of the mouse
00670   CPoint ptMouse;
00671   GetCursorPos(&ptMouse);
00672 
00673   // Load up a menu that has the options we are looking for in it
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   // Set focus back to window
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         // by default all of these are checked because that's how they're defined in the menu editor
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();      // redundant but i'll clean it up later.. yeah right.. 
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     //return;
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)     // are there modifiers present?
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   //Init3Dfx();
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   //g_PrefsDlg.LoadPrefs();
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;      // fail to create
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;      // fail to create
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;      // fail to create
00847     }
00848 #endif
00849 
00850     // TODO: Remove this if you don't want tool tips or a resizeable toolbar
00851     m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
00852         CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
00853 
00854     // TODO: Delete these three lines if you don't want the toolbar to
00855     //  be dockable
00856     m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
00857     EnableDocking(CBRS_ALIGN_ANY);
00858     DockControlBar(&m_wndToolBar);
00859 
00860     //m_wndScaleBar.SetBarStyle(m_wndScaleBar.GetBarStyle() |   CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
00861     //m_wndScaleBar.EnableDocking(CBRS_ALIGN_ANY);
00862   //m_wndScaleBar.ShowWindow(SW_HIDE);
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     if (MessageBox("Would you like QERadiant to build and load a default project? If this is the first time you have run QERadiant or you are not familiar with editing QE4 project files directly, this is HIGHLY recommended", "Create a default project?", MB_YESNO) == IDYES)
01012     {
01013       OnFileNewproject();
01014     }
01015 */
01016   }
01017   else
01018   {
01019     // hack that keeps SGI OpenGL from crashing on texture load with no map
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       // load plugins before the first Map_LoadFile
01036       // required for model plugins
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) // most often case.. deal with first
01103       {
01104         g_Commands[i].m_nKey = __toascii(strBuff.GetAt(0));
01105       }
01106       else // special key
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     // TODO: Modify the Window class or styles here by modifying
01125     //  the CREATESTRUCT cs
01126     return CFrameWnd::PreCreateWindow(cs);
01127 }
01128 
01130 // CMainFrame diagnostics
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 // CMainFrame message handlers
01147 void CMainFrame::CreateQEChildren()
01148 {
01149     // the project file can be specified on the command line,
01150     // or implicitly found in the scripts directory
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     // let's try the default project directory..
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         // setup auto load stuff for the default map
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     // FIXME: pay attention to Q3 pref
01231     //InitPakFile(ValueForKey(g_qeglobals.d_project_entity, "basepath"), g_PrefsDlg.m_strPAKFile);
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     // run time dependant behavior
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;      // this is done to keep this routine from being
01278       g_nUpdateBits = 0;              // re-entered due to the paint process.. only
01279       UpdateWindows(nBits);           // happens in rare cases but causes a stack overflow
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   // FIXME
01347   // original mru stuff needs replaced with mfc stuff
01348     SaveMruInReg(g_qeglobals.d_lpMruMenu,"Software\\id\\QuakeEd4\\MRU");
01349 
01350     DeleteMruMenu(g_qeglobals.d_lpMruMenu);
01351 
01352   SaveWindowPlacement(GetSafeHwnd(), "Radiant::MainWindowPlace");
01353   //SaveWindowState(GetSafeHwnd(), "Radiant::MainWindow");
01354   //if (m_nCurrentStyle == QR_QE4)
01355     //SaveWindowPlacement(g_qeglobals.d_hwndEntity, "EntityWindowPlace");
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   w