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   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   // Timo
01465   // Surface properties plugin
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   //if (current_texture)
01477   //  free(current_texture);
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   // run through our list to see if we have a handler for nChar
01496   //
01497   for (int i = 0; i < g_nCommandCount; i++)
01498   {
01499     if (g_Commands[i].m_nKey == nChar)    // find a match?
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)     // are there modifiers present?
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  // no modifiers make sure none of those keys are pressed
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     //OnKeyDown(nChar, nRepCnt, nFlags);
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)    // find a match?
01564         {
01565             // check modifiers
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   if (g_PrefsDlg.m_bRunBefore == FALSE)
01590   {
01591     MessageBox("In the following dialog, please make sure the Quake2 .exe information is correct.\nQERadiant will NOT run correctly without this information");
01592     g_PrefsDlg.DoModal();
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   //if (m_nCurrentStyle == QR_QE4)
01611   //  LoadWindowPlacement(g_qeglobals.d_hwndEntity, "EntityWindowPlace");
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       // the following bit switches the left and right views
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     // XY and Z windows are 2 pixels off of the height and one down from top so one pixel spacing vertically
01726     // Z window takes up 10% of right edge
01727     // XY window takes up 60% of middle
01728     // TEX and CAM windows take up 30% of left
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 // 4 way
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     //m_pEditWnd = new CRADEditWnd();
01788     //m_pEditWnd->Create(NULL, "Console", QE3_STYLE, rect, this, 1238);
01789     //g_pEdit = m_pEditWnd->GetEditWnd();
01790     //if (g_pEdit)
01791       //  g_qeglobals.d_hwndEdit = g_pEdit->GetSafeHwnd();
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) // QE4 style
01992   {
01993     if (inspector_mode == W_CONSOLE && m_nCurrentStyle != QR_QE4) // are we in console mode already?
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) // QE4 style
02181   {
02182     if (inspector_mode == W_TEXTURE && m_nCurrentStyle != QR_QE4) // are we in console mode already?
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 //from TexWnd.cpp
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 //DK - SOF change to get color to entity quickly
02415         //--::SetWindowText( hwndEnt[EntValueField], buffer );
02416 //--        ::SetWindowText( hwndEnt[EntKeyField], "color" );
02417 //--        AddProp();
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     //if (ActiveXY())
02641     //  ActiveXY()->UndoCopy();
02642     Undo_Start("arbitrary rotation");
02643     Undo_AddBrushList(&selected_brushes);
02644 
02645     CRotateDlg dlg;
02646     dlg.DoModal();
02647     //DoRotate ();
02648 
02649     Undo_EndBrushList(&selected_brushes);
02650     Undo_End();
02651 }
02652 
02653 void CMainFrame::OnSelectionClone() 
02654 {
02655     //if (ActiveXY())
02656     //  ActiveXY()->UndoCopy();
02657     Select_Clone();
02658 }
02659 
02660 void CMainFrame::OnSelectionConnect() 
02661 {
02662     ConnectEntities();
02663 }
02664 
02665 void CMainFrame::OnSelectionMakehollow() 
02666 {
02667     //if (ActiveXY())
02668     //  ActiveXY()->UndoCopy();
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     //if (ActiveXY())
02679     //  ActiveXY()->UndoCopy();
02680     Undo_Start("CSG subtract");
02681     CSG_Subtract();
02682     Undo_End();
02683 }
02684 
02685 void CMainFrame::OnSelectionCsgmerge()
02686 {
02687     //if (ActiveXY())
02688     //  ActiveXY()->UndoCopy();
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     //if (ActiveXY())
02706     //  ActiveXY()->UndoCopy();
02707     Undo_Start("delete");
02708     Undo_AddBrushList(&selected_brushes);
02709     //add all deleted entities to the undo
02710     for (brush = selected_brushes.next; brush != &selected_brushes; brush = brush->next)
02711     {
02712         Undo_AddEntity(brush->owner);
02713     }
02714     // NOTE: Select_Delete does NOT delete entities
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       //--if (QE_SingleBrush() && selected_brushes.next->patchBrush)
02783     if ( OnlyTerrainSelected() )
02784     {
02785         //Terrain_Edit();
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     //if ( !OnlyTerrainSelected() || ( g_qeglobals.d_select_mode == sel_terrainpoint ) )
02804     //if ( ( g_qeglobals.d_select_mode == sel_terrainpoint ) || ( g_qeglobals.d_select_mode == sel_terraintexture ) )
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         //g_qeglobals.d_select_mode = sel_terrainpoint;
02817         clearSelection();
02818         g_qeglobals.d_select_mode = sel_terraintexture;
02819         Sys_UpdateWindows (W_ALL);
02820 //      Terrain_Edit();
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     //HandlePopup(this, IDR_POPUP_VIEW); 
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) // was turned on
03027         ShowControlBar(&m_wndTextureBar, TRUE, TRUE);
03028       else // was turned off
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 // 0 = radiant styel
03039 // 1 = qe4 style
03040 void CMainFrame::SetWindowStyle(int nStyle)
03041 {
03042 }
03043 
03044 void CMainFrame::OnTogglecamera() 
03045 {
03046   if (m_nCurrentStyle > 0 && m_nCurrentStyle < 3) // QE4 style
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) // QE4 style
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) // QE4 style
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) // QE4 style
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) // QE4 style
03361   {
03362     if (m_pXZWnd && m_pXZWnd->GetSafeHwnd())
03363     {
03364        // get windowplacement doesn't actually save this so we will here
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) // QE4 style
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     //if (ActiveXY())
03558     //  ActiveXY()->UndoCopy();
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       // SetRotateMode(false) always works
03587       ActiveXY()->SetRotateMode(false);
03588       m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SELECT_MOUSEROTATE, FALSE);
03589       Map_BuildBrushData();
03590     }
03591     else
03592     {
03593       // may not work if no brush selected, see return value
03594       if (ActiveXY()->SetRotateMode(true))
03595         m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SELECT_MOUSEROTATE, TRUE);
03596       else
03597         // if MFC called, we need to set back to FALSE ourselves
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 //  if (ActiveXY())
03619 //      ActiveXY()->Undo();
03620     Undo_Undo();
03621 }
03622 
03623 void CMainFrame::OnEditRedo() 
03624 {
03625     Undo_Redo();
03626 }
03627 
03628 void CMainFrame::OnUpdateEditUndo(CCmdUI* pCmdUI) 
03629 {
03630     /*
03631   BOOL bEnable = false;
03632   if (ActiveXY())
03633     bEnable = ActiveXY()->UndoAvailable();
03634   pCmdUI->Enable(bEnable);
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     // TODO: Add your command handler code here
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   //CString strStatus;
03793   //strStatus.Format("T: %i C: %i", g_nTextureTweak, g_nCubicScale);
03794   //SetStatusText(5, strStatus.GetBuffer(0));
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       // SetRotateMode(false) always works
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   //Curve_MakeCurvedBrush (false,   false, false,   false, false, true, true);
04046 }
04047 
04048 void CMainFrame::OnCurveCylinder() 
04049 {
04050   //Curve_MakeCurvedBrush (false,   false, false,   true, true, true, true);
04051 }
04052 
04053 void CMainFrame::OnCurveEighthsphere() 
04054 {
04055   //Curve_MakeCurvedBrush (false,   true, false, true, true, false, false);
04056 }
04057 
04058 void CMainFrame::OnCurveEndcap() 
04059 {
04060   //Curve_MakeCurvedBrush (false,   false, false,   false, true, true, true);
04061 }
04062 
04063 void CMainFrame::OnCurveHemisphere() 
04064 {
04065   //Curve_MakeCurvedBrush (false,   true, false, true, true, true, true);
04066 }
04067 
04068 void CMainFrame::OnCurveInvertcurve() 
04069 {
04070   //Curve_Invert ();
04071 }
04072 
04073 void CMainFrame::OnCurveQuarter() 
04074 {
04075   //Curve_MakeCurvedBrush (false,   true, false, true, true, true, false);
04076 }
04077 
04078 void CMainFrame::OnCurveSphere() 
04079 {
04080     //Curve_MakeCurvedBrush (false, true, true, true, true, true, true);
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     // 0 - left, 1 - up, 2 - right, 3 - down
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   //Patch_BrushToMesh(false, true, false, true);
04353   //Sys_UpdateWindows (W_ALL);
04354 }
04355 
04356 void CMainFrame::OnCurvePatchinvertedendcap() 
04357 {
04358   //Patch_BrushToMesh(false, false, true, true);
04359   //Sys_UpdateWindows (W_ALL);
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     //Patch_AdjustSelectedRowCols(0, 2);
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     //Patch_AdjustSelectedRowCols(2, 0);
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     //Sys_UpdateWindows(W_ALL);
04456 }
04457 
04458 void CMainFrame::OnCurveNegativeTextureX() 
04459 {
04460     Patch_InvertTexture(false);
04461     //Sys_UpdateWindows(W_ALL);
04462 }
04463 
04464 void CMainFrame::OnCurveNegativeTextureY() 
04465 {
04466     Patch_InvertTexture(true);
04467     //Sys_UpdateWindows(W_ALL);
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     // check to see if the selected brush is part of a func group
04539     // if it is, deselect everything and reselect the next brush 
04540     // in the group
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     //--pMenu->RemoveMenu(MENU_PLUGIN, MF_BYPOSITION);
04854     //--pMenu->InsertMenu(MENU_PLUGIN, MF_BYPOSITION, 0, "Plugins");
04855     //--DrawMenuBar();
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;      //PGM
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 }

Generated on Thu Aug 25 12:38:32 2005 for Quake III Arena by  doxygen 1.3.9.1