mainfrm.cpp

来自「quake3工具源码。包括生成bsp文件」· C++ 代码 · 共 1,788 行 · 第 1/5 页

CPP
1,788
字号
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "Radiant.h"
#include "qe3.h"
#include "ZWnd.h"
#include "CamWnd.h"
#include "TexWnd.h"
#include "EditWnd.h"
#include "entityw.h"
#include "PrefsDlg.h"
#include "MapInfo.h"
#include "MainFrm.h"
#include "RotateDlg.h"
#include "EntityListDlg.h"
#include "ScriptDlg.h"
#include "NewProjDlg.h"
#include "CommandsDlg.h"
#include "ScaleDialog.h"
#include "FindTextureDlg.h"
#include "SurfaceDlg.h"
#include "shlobj.h"
#include "DialogTextures.h"
#include "PatchDensityDlg.h"
#include "DialogThick.h"
#include "PatchDialog.h"
#include "Undo.h"
#include "NameDlg.h"
#include "../libs/pakstuff.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


// globals
CString g_strAppPath;                   // holds the full path of the executable
CEdit* g_pEdit = NULL;                  // used originally to make qe4 work with mfc.. still used
CMainFrame* g_pParentWnd = NULL;        // used to precast to CMainFrame
CPrefsDlg g_Preferences;                // global prefs instance
CPrefsDlg& g_PrefsDlg = g_Preferences;  // reference used throughout
int g_nUpdateBits = 0;                  // window update flags
bool g_bScreenUpdates = true;           // whether window painting is active, used in a few places
                                        // to disable updates for speed reasons
                                        // both of the above should be made members of CMainFrame

//bool g_bSnapToGrid = true;              // early use, no longer in use, clamping pref will be used
CString g_strProject;                   // holds the active project filename


/////////////////////////////////////////////////////////////////////////////
// CMainFrame

// command mapping stuff
//
// m_strCommand is the command string
// m_nKey is the windows VK_??? equivelant
// m_nModifiers are key states as follows
//  bit
//    0 - shift
//    1 - alt
//    2 - control
//    4 - press only
//
#define	SPEED_MOVE	32
#define	SPEED_TURN	22.5


SCommandInfo g_Commands[] = 
{
  {"ToggleOutlineDraw", 'J', 0x00, ID_SELECTION_NOOUTLINE},
  {"CSGMerge", 'U', 0x04, ID_SELECTION_CSGMERGE},
  {"CSGSubtract", 'U', 0x01, ID_SELECTION_CSGSUBTRACT},
  {"ViewGroups", 'G', 0x00, ID_VIEW_GROUPS},
  {"HideSelected", 'H', 0x00, ID_VIEW_HIDESHOW_HIDESELECTED},
  {"ShowHidden", 'H', 0x01, ID_VIEW_HIDESHOW_SHOWHIDDEN},
  {"BendMode", 'B', 0x00, ID_PATCH_BEND},
  {"FitFace", 'B', 0x04, ID_FITFACE},
  {"FitBrush", 'B', 0x01, ID_FITBRUSH},
  {"FreezePatchVertices", 'F', 0x00, ID_CURVE_FREEZE},
  {"UnFreezePatchVertices", 'F', 0x04, ID_CURVE_UNFREEZE},
  {"UnFreezeAllPatchVertices", 'F', 0x05, ID_CURVE_UNFREEZEALL},
  {"ViewTextures", 'T', 0, ID_VIEW_TEXTURE},
  {"ThickenPatch", 'T', 0x04, ID_CURVE_THICKEN},
  {"MakeOverlayPatch", 'Y', 0, ID_CURVE_OVERLAY_SET},
  {"ClearPatchOverlays", 'Y', 0x02, ID_CURVE_OVERLAY_CLEAR},
  {"SurfaceInspector", 'S', 0, ID_TEXTURES_INSPECTOR},
  {"PatchInspector", 'S', 0x01, ID_PATCH_INSPECTOR},
  {"ToggleShowPatches", 'P', 0x05, ID_CURVE_CYCLECAP},
  {"ToggleShowPatches", 'P', 0x04, ID_VIEW_SHOWCURVES},
  {"RedisperseRows", 'E', 0x04, ID_CURVE_REDISPERSE_ROWS},
  {"RedisperseCols", 'E', 0x05, ID_CURVE_REDISPERSE_COLS},
  {"InvertCurveTextureX", 'I', 0x05, ID_CURVE_NEGATIVETEXTUREY},
  {"InvertCurveTextureY", 'I', 0x01, ID_CURVE_NEGATIVETEXTUREX},
  {"InvertCurve", 'I', 0x04, ID_CURVE_NEGATIVE},
  {"IncPatchColumn", VK_ADD, 0x05, ID_CURVE_INSERTCOLUMN},
  {"IncPatchRow", VK_ADD, 0x04, ID_CURVE_INSERTROW},
  {"DecPatchColumn", VK_SUBTRACT, 0x05, ID_CURVE_DELETECOLUMN},
  {"DecPatchRow", VK_SUBTRACT, 0x04, ID_CURVE_DELETEROW},
  {"Patch TAB", VK_TAB, 0x00, ID_PATCH_TAB},
  {"Patch TAB", VK_TAB, 0x01, ID_PATCH_TAB},
  {"SelectNudgeDown", VK_DOWN, 0x02, ID_SELECTION_SELECT_NUDGEDOWN},
  {"EntityColor",'K', 0, ID_MISC_SELECTENTITYCOLOR},
  {"CameraForward", VK_UP, 0, ID_CAMERA_FORWARD},
  {"CameraBack", VK_DOWN, 0, ID_CAMERA_BACK},
  {"CameraLeft", VK_LEFT, 0, ID_CAMERA_LEFT},
  {"CameraRight", VK_RIGHT, 0, ID_CAMERA_RIGHT},
  {"CameraUp", 'D', 0, ID_CAMERA_UP},
  {"CameraDown", 'C', 0, ID_CAMERA_DOWN},
  {"CameraAngleUp", 'A', 0, ID_CAMERA_ANGLEUP},
  {"CameraAngleDown", 'Z', 0, ID_CAMERA_ANGLEDOWN},
  {"CameraStrafeRight", VK_PERIOD, 0, ID_CAMERA_STRAFERIGHT},
  {"CameraStrafeLeft", VK_COMMA, 0, ID_CAMERA_STRAFELEFT},
  {"ToggleGrid", '0', 0, ID_GRID_TOGGLE},
  {"SetGrid1", '1', 0, ID_GRID_1},
  {"SetGrid2", '2', 0, ID_GRID_2},
  {"SetGrid4", '3', 0, ID_GRID_4},
  {"SetGrid8", '4', 0, ID_GRID_8},
  {"SetGrid16", '5', 0, ID_GRID_16},
  {"SetGrid32", '6', 0, ID_GRID_32},
  {"SetGrid64", '7', 0, ID_GRID_64},
  {"DragEdges", 'E', 0, ID_SELECTION_DRAGEDGES},
  {"DragVertices", 'V', 0, ID_SELECTION_DRAGVERTECIES},
  {"ViewEntityInfo", 'N', 0, ID_VIEW_ENTITY},
  {"ViewConsole", 'O', 0, ID_VIEW_CONSOLE},
  {"CloneSelection", VK_SPACE, 0, ID_SELECTION_CLONE},
  {"DeleteSelection", VK_BACK, 0, ID_SELECTION_DELETE},
  {"UnSelectSelection", VK_ESCAPE, 0, ID_SELECTION_DESELECT},
  {"CenterView", VK_END, 0, ID_VIEW_CENTER},
  {"ZoomOut", VK_INSERT, 0, ID_VIEW_ZOOMOUT},
  {"ZoomIn", VK_DELETE, 0, ID_VIEW_ZOOMIN},
  {"UpFloor", VK_PRIOR, 0, ID_VIEW_UPFLOOR},
  {"DownFloor", VK_NEXT, 0, ID_VIEW_DOWNFLOOR},
  {"ToggleClipper", 'X', 0, ID_VIEW_CLIPPER},
  {"ToggleCrosshairs", 'X', 0x01, ID_VIEW_CROSSHAIR},
  {"TogTexLock", 'T', 0x01, ID_TOGGLE_LOCK},
  {"TogTexRotLock", 'R', 0x01, ID_TOGGLE_ROTATELOCK},
  {"ToggleRealtime", 'R', 0x04, ID_VIEW_CAMERAUPDATE},
  {"EntityList", 'L', 0, ID_EDIT_ENTITYINFO},
  {"Preferences", 'P', 0, ID_PREFS},
  {"ToggleCamera", 'C', 0x05, ID_TOGGLECAMERA},
  {"ToggleConsole", 'O', 0, ID_TOGGLECONSOLE},
  {"ToggleView", 'V', 0x05, ID_TOGGLEVIEW},
  {"ToggleZ", 'Z', 0x05, ID_TOGGLEZ},
  {"ConnectSelection", 'K', 0x04, ID_SELECTION_CONNECT},
  {"Brush3Sided", '3', 0x04, ID_BRUSH_3SIDED},
  {"Brush4Sided", '4', 0x04, ID_BRUSH_4SIDED},
  {"Brush5Sided", '5', 0x04, ID_BRUSH_5SIDED},
  {"Brush6Sided", '6', 0x04, ID_BRUSH_6SIDED},
  {"Brush7Sided", '7', 0x04, ID_BRUSH_7SIDED},
  {"Brush8Sided", '8', 0x04, ID_BRUSH_8SIDED},
  {"Brush9Sided", '9', 0x04, ID_BRUSH_9SIDED},
  {"ShowDetail", 'D', 0x04, ID_VIEW_SHOWDETAIL},
  {"MakeDetail", 'M', 0x05, ID_CURVE_MATRIX_TRANSPOSE},
  {"MakeDetail", 'M', 0x04, ID_SELECTION_MAKE_DETAIL},
  {"MapInfo", 'M', 0, ID_EDIT_MAPINFO},
  {"NextLeakSpot", 'K', 0x05, ID_MISC_NEXTLEAKSPOT},
  {"PrevLeakSpot", 'L', 0x05, ID_MISC_PREVIOUSLEAKSPOT},
  {"FileOpen", 'O', 0x04, ID_FILE_OPEN},
  {"FileSave", 'S', 0x04, ID_FILE_SAVE},
  {"Exit", 'X', 0x04, ID_FILE_EXIT},
  {"NextView", VK_TAB, 0x04, ID_VIEW_NEXTVIEW},
  {"ClipSelected", VK_RETURN, 0x00, ID_CLIP_SELECTED},
  {"SplitSelected", VK_RETURN, 0x01, ID_SPLIT_SELECTED},
  {"FlipClip", VK_RETURN, 0x04, ID_FLIP_CLIP},
  {"MouseRotate", 'R', 0x00, ID_SELECT_MOUSEROTATE},
  {"Copy", 'C', 0x04, ID_EDIT_COPYBRUSH},
  {"Paste", 'V', 0x04, ID_EDIT_PASTEBRUSH},
  {"Undo", 'Z', 0x04, ID_EDIT_UNDO},
  {"Redo", 'Y', 0x04, ID_EDIT_REDO}, 
  {"ZZoomOut", VK_INSERT, 0x04, ID_VIEW_ZZOOMOUT},
  {"ZZoomIn", VK_DELETE, 0x04, ID_VIEW_ZZOOMIN},
  {"TexDecrement", VK_SUBTRACT, 0x01, ID_SELECTION_TEXTURE_DEC},
  {"TexIncrement", VK_ADD, 0x01, ID_SELECTION_TEXTURE_INC},
  {"TextureFit", '5', 0x01, ID_SELECTION_TEXTURE_FIT},
  {"TexRotateClock", VK_NEXT, 0x01, ID_SELECTION_TEXTURE_ROTATECLOCK},
  {"TexRotateCounter", VK_PRIOR, 0x01, ID_SELECTION_TEXTURE_ROTATECOUNTER},
  {"TexScaleUp", VK_UP, 0x04, ID_SELECTION_TEXTURE_SCALEUP},
  {"TexScaleDown", VK_DOWN, 0x04, ID_SELECTION_TEXTURE_SCALEDOWN},
  {"TexShiftLeft", VK_LEFT, 0x01, ID_SELECTION_TEXTURE_SHIFTLEFT},
  {"TexShiftRight", VK_RIGHT, 0x01, ID_SELECTION_TEXTURE_SHIFTRIGHT},
  {"TexShiftUp", VK_UP, 0x01, ID_SELECTION_TEXTURE_SHIFTUP},
  {"TexShiftDown", VK_DOWN, 0x01, ID_SELECTION_TEXTURE_SHIFTDOWN},
  {"GridDown", 219, 0x00, ID_GRID_PREV},
  {"GridUp", 221, 0x00, ID_GRID_NEXT},
  {"TexScaleLeft", VK_LEFT, 0x04, ID_SELECTION_TEXTURE_SCALELEFT},
  {"TexScaleRight", VK_RIGHT, 0x04, ID_SELECTION_TEXTURE_SCALERIGHT},
  {"CubicClipZoomOut", 219, 0x04, ID_VIEW_CUBEOUT},
  {"CubicClipZoomIn", 221, 0x04, ID_VIEW_CUBEIN},
  {"ToggleCubicClip", 220, 0x04, ID_VIEW_CUBICCLIPPING},
//  {"ToggleCubicClip", '\\', 0x04, ID_VIEW_CUBICCLIPPING},
  {"MoveSelectionDOWN", VK_SUBTRACT, 0x00, ID_SELECTION_MOVEDOWN},
  {"MoveSelectionUP", VK_ADD, 0x00, ID_SELECTION_MOVEUP},
  {"DumpSelectedBrush", 'D', 0x01, ID_SELECTION_PRINT},
  {"ToggleSizePaint", 'Q', 0x08, ID_SELECTION_TOGGLESIZEPAINT},
  {"SelectNudgeLeft", VK_LEFT, 0x02, ID_SELECTION_SELECT_NUDGELEFT},
  {"SelectNudgeRight", VK_RIGHT, 0x02, ID_SELECTION_SELECT_NUDGERIGHT},
  {"SelectNudgeUp", VK_UP, 0x02, ID_SELECTION_SELECT_NUDGEUP},
  {"CycleCapTexturePatch", 'N', 0x05, ID_CURVE_CYCLECAP},
  {"NaturalizePatch", 'N', 0x04, ID_PATCH_NATURALIZE},
  {"SnapPatchToGrid", 'G', 0x04, ID_SELECT_SNAPTOGRID},
  {"ShowAllTextures", 'A', 0x04, ID_TEXTURES_SHOWALL},
  {"SelectAllOfType", 'A', 0x01, ID_SELECT_ALL},
  {"CapCurrentCurve", 'C', 0x01, ID_CURVE_CAP},
  {"MakeStructural", 'S', 0x05, ID_SELECTION_MAKE_STRUCTURAL}
  //{"ForceCameraWalk", 'Q', 0x08, ID_CAMERA_ACTIVE}
};

int g_nCommandCount = sizeof(g_Commands) / sizeof(SCommandInfo);

SKeyInfo g_Keys[] =
{
  {"Space", VK_SPACE},
  {"Backspace", VK_BACK},
  {"Escape", VK_ESCAPE},
  {"End", VK_END},
  {"Insert", VK_INSERT},
  {"Delete", VK_DELETE},
  {"PageUp", VK_PRIOR},
  {"PageDown", VK_NEXT},
  {"Up", VK_UP},
  {"Down", VK_DOWN},
  {"Left", VK_LEFT},
  {"Right", VK_RIGHT},
  {"F1", VK_F1},
  {"F2", VK_F2},
  {"F3", VK_F3},
  {"F4", VK_F4},
  {"F5", VK_F5},
  {"F6", VK_F6},
  {"F7", VK_F7},
  {"F8", VK_F8},
  {"F9", VK_F9},
  {"F10", VK_F10},
  {"F11", VK_F11},
  {"F12", VK_F12},
  {"Tab", VK_TAB},
  {"Return", VK_RETURN},                           
  {"Comma", VK_COMMA},
  {"Period", VK_PERIOD},
  {"Plus", VK_ADD},
  {"Multiply", VK_MULTIPLY},
  {"Subtract", VK_SUBTRACT},
  {"NumPad0", VK_NUMPAD0},
  {"NumPad1", VK_NUMPAD1},
  {"NumPad2", VK_NUMPAD2},
  {"NumPad3", VK_NUMPAD3},
  {"NumPad4", VK_NUMPAD4},
  {"NumPad5", VK_NUMPAD5},
  {"NumPad6", VK_NUMPAD6},
  {"NumPad7", VK_NUMPAD7},
  {"NumPad8", VK_NUMPAD8},
  {"NumPad9", VK_NUMPAD9},
  {"[", 219},
  {"]", 221},
  {"\\", 220}
};

int g_nKeyCount = sizeof(g_Keys) / sizeof(SKeyInfo);

const int CMD_TEXTUREWAD_END = CMD_TEXTUREWAD + 127;
const int CMD_BSPCOMMAND_END = CMD_BSPCOMMAND + 127;
const int IDMRU_END = IDMRU+9;

const int g_msgBSPDone = RegisterWindowMessage("_BSPDone");
const int g_msgBSPStatus = RegisterWindowMessage("_BSPStatus");

IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_PARENTNOTIFY()
	ON_WM_CREATE()
	ON_WM_TIMER()
	ON_WM_DESTROY()
	ON_WM_CLOSE()
	ON_WM_KEYDOWN()
	ON_WM_SIZE()
  ON_COMMAND(ID_VIEW_CAMERATOGGLE, ToggleCamera)
	ON_COMMAND(ID_FILE_CLOSE, OnFileClose)
	ON_COMMAND(ID_FILE_EXIT, OnFileExit)
	ON_COMMAND(ID_FILE_LOADPROJECT, OnFileLoadproject)
	ON_COMMAND(ID_FILE_NEW, OnFileNew)
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
	ON_COMMAND(ID_FILE_POINTFILE, OnFilePointfile)
	ON_COMMAND(ID_FILE_PRINT, OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, OnFilePrintPreview)
	ON_COMMAND(ID_FILE_SAVE, OnFileSave)
	ON_COMMAND(ID_FILE_SAVEAS, OnFileSaveas)
	ON_COMMAND(ID_VIEW_100, OnView100)
	ON_COMMAND(ID_VIEW_CENTER, OnViewCenter)
	ON_COMMAND(ID_VIEW_CONSOLE, OnViewConsole)
	ON_COMMAND(ID_VIEW_DOWNFLOOR, OnViewDownfloor)
	ON_COMMAND(ID_VIEW_ENTITY, OnViewEntity)
	ON_COMMAND(ID_VIEW_FRONT, OnViewFront)
	ON_COMMAND(ID_VIEW_SHOWBLOCKS, OnViewShowblocks)
	ON_COMMAND(ID_VIEW_SHOWCLIP, OnViewShowclip)
	ON_COMMAND(ID_VIEW_SHOWCOORDINATES, OnViewShowcoordinates)
	ON_COMMAND(ID_VIEW_SHOWDETAIL, OnViewShowdetail)
	ON_COMMAND(ID_VIEW_SHOWENT, OnViewShowent)
	ON_COMMAND(ID_VIEW_SHOWLIGHTS, OnViewShowlights)
	ON_COMMAND(ID_VIEW_SHOWNAMES, OnViewShownames)
	ON_COMMAND(ID_VIEW_SHOWPATH, OnViewShowpath)
	ON_COMMAND(ID_VIEW_SHOWWATER, OnViewShowwater)
	ON_COMMAND(ID_VIEW_SHOWWORLD, OnViewShowworld)
	ON_COMMAND(ID_VIEW_TEXTURE, OnViewTexture)
	ON_COMMAND(ID_VIEW_UPFLOOR, OnViewUpfloor)
	ON_COMMAND(ID_VIEW_XY, OnViewXy)
	ON_COMMAND(ID_VIEW_Z100, OnViewZ100)
	ON_COMMAND(ID_VIEW_ZOOMIN, OnViewZoomin)
	ON_COMMAND(ID_VIEW_ZOOMOUT, OnViewZoomout)
	ON_COMMAND(ID_VIEW_ZZOOMIN, OnViewZzoomin)
	ON_COMMAND(ID_VIEW_ZZOOMOUT, OnViewZzoomout)
	ON_COMMAND(ID_VIEW_SIDE, OnViewSide)
	ON_COMMAND(ID_TEXTURES_SHOWINUSE, OnTexturesShowinuse)
	ON_COMMAND(ID_TEXTURES_INSPECTOR, OnTexturesInspector)
	ON_COMMAND(ID_MISC_BENCHMARK, OnMiscBenchmark)
	ON_COMMAND(ID_MISC_FINDBRUSH, OnMiscFindbrush)
	ON_COMMAND(ID_MISC_GAMMA, OnMiscGamma)
	ON_COMMAND(ID_MISC_NEXTLEAKSPOT, OnMiscNextleakspot)
	ON_COMMAND(ID_MISC_PREVIOUSLEAKSPOT, OnMiscPreviousleakspot)
	ON_COMMAND(ID_MISC_PRINTXY, OnMiscPrintxy)
	ON_COMMAND(ID_MISC_SELECTENTITYCOLOR, OnMiscSelectentitycolor)
	ON_COMMAND(ID_TEXTUREBK, OnTexturebk)
	ON_COMMAND(ID_COLORS_MAJOR, OnColorsMajor)
	ON_COMMAND(ID_COLORS_MINOR, OnColorsMinor)
	ON_COMMAND(ID_COLORS_XYBK, OnColorsXybk)
	ON_COMMAND(ID_BRUSH_3SIDED, OnBrush3sided)
	ON_COMMAND(ID_BRUSH_4SIDED, OnBrush4sided)
	ON_COMMAND(ID_BRUSH_5SIDED, OnBrush5sided)
	ON_COMMAND(ID_BRUSH_6SIDED, OnBrush6sided)
	ON_COMMAND(ID_BRUSH_7SIDED, OnBrush7sided)
	ON_COMMAND(ID_BRUSH_8SIDED, OnBrush8sided)
	ON_COMMAND(ID_BRUSH_9SIDED, OnBrush9sided)
	ON_COMMAND(ID_BRUSH_ARBITRARYSIDED, OnBrushArbitrarysided)
	ON_COMMAND(ID_BRUSH_FLIPX, OnBrushFlipx)
	ON_COMMAND(ID_BRUSH_FLIPY, OnBrushFlipy)
	ON_COMMAND(ID_BRUSH_FLIPZ, OnBrushFlipz)
	ON_COMMAND(ID_BRUSH_ROTATEX, OnBrushRotatex)
	ON_COMMAND(ID_BRUSH_ROTATEY, OnBrushRotatey)
	ON_COMMAND(ID_BRUSH_ROTATEZ, OnBrushRotatez)
	ON_COMMAND(ID_REGION_OFF, OnRegionOff)
	ON_COMMAND(ID_REGION_SETBRUSH, OnRegionSetbrush)
	ON_COMMAND(ID_REGION_SETSELECTION, OnRegionSetselection)
	ON_COMMAND(ID_REGION_SETTALLBRUSH, OnRegionSettallbrush)
	ON_COMMAND(ID_REGION_SETXY, OnRegionSetxy)
	ON_COMMAND(ID_SELECTION_ARBITRARYROTATION, OnSelectionArbitraryrotation)
	ON_COMMAND(ID_SELECTION_CLONE, OnSelectionClone)
	ON_COMMAND(ID_SELECTION_CONNECT, OnSelectionConnect)
	ON_COMMAND(ID_SELECTION_CSGSUBTRACT, OnSelectionCsgsubtract)
	ON_COMMAND(ID_SELECTION_CSGMERGE, OnSelectionCsgmerge)
	ON_COMMAND(ID_SELECTION_NOOUTLINE, OnSelectionNoOutline)
	ON_COMMAND(ID_SELECTION_DELETE, OnSelectionDelete)
	ON_COMMAND(ID_SELECTION_DESELECT, OnSelectionDeselect)
	ON_COMMAND(ID_SELECTION_DRAGEDGES, OnSelectionDragedges)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?