/*
===========================================================================
Doom 3 GPL Source Code
Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company.
This file is part of the Doom 3 GPL Source Code ("Doom 3 Source Code").
Doom 3 Source Code is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Doom 3 Source Code is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Doom 3 Source Code. If not, see .
In addition, the Doom 3 Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 Source Code. If not, please request a copy in writing from id Software at the address below.
If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
===========================================================================
*/
#include "tools/edit_gui_common.h"
#include "qe3.h"
#include "Radiant.h"
#include "ZWnd.h"
#include "CamWnd.h"
#include "MapInfo.h"
#include "MainFrm.h"
#include "RotateDlg.h"
#include "EntityListDlg.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 "NewTexWnd.h"
#include "splines.h"
#include "dlgcamera.h"
#include "mmsystem.h"
#include "LightDlg.h"
#include "GetString.h"
#include "EntKeyFindReplace.h"
#include "InspectorDialog.h"
#include "autocaulk.h"
#include "../../sys/win32/rc/common_resource.h"
#include "../comafx/DialogName.h"
#include "../comafx/DialogColorPicker.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
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
#define D3XP_ID_FILE_SAVE_COPY ( WM_USER + 28476 )
#define D3XP_ID_SHOW_MODELS ( WM_USER + 28477 )
//
// 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.0f
#define SPEED_TURN 22.5f
#define MAX_GRID 64.0f
#define MIN_GRID 0.125f
SCommandInfo g_Commands[] = {
{ "Texture_AxialByHeight", 'U', 0, ID_SELECT_AXIALTEXTURE_BYHEIGHT },
{ "Texture_AxialArbitrary", 'U', RAD_SHIFT, ID_SELECT_AXIALTEXTURE_ARBITRARY },
{ "Texture_AxialByWidth", 'U', RAD_CONTROL, ID_SELECT_AXIALTEXTURE_BYWIDTH },
{ "Texture_Decrement", VK_SUBTRACT, RAD_SHIFT, ID_SELECTION_TEXTURE_DEC },
{ "Texture_Increment", VK_ADD, RAD_SHIFT, ID_SELECTION_TEXTURE_INC },
{ "Texture_Fit", '5', RAD_SHIFT, ID_SELECTION_TEXTURE_FIT },
{ "Texture_RotateClock", VK_NEXT, RAD_SHIFT, ID_SELECTION_TEXTURE_ROTATECLOCK },
{ "Texture_RotateCounter", VK_PRIOR, RAD_SHIFT, ID_SELECTION_TEXTURE_ROTATECOUNTER },
{ "Texture_ScaleUp", VK_UP, RAD_CONTROL, ID_SELECTION_TEXTURE_SCALEUP },
{ "Texture_ScaleDown", VK_DOWN, RAD_CONTROL, ID_SELECTION_TEXTURE_SCALEDOWN },
{ "Texture_ShiftLeft", VK_LEFT, RAD_SHIFT, ID_SELECTION_TEXTURE_SHIFTLEFT },
{ "Texture_ShiftRight", VK_RIGHT, RAD_SHIFT, ID_SELECTION_TEXTURE_SHIFTRIGHT },
{ "Texture_ShiftUp", VK_UP, RAD_SHIFT, ID_SELECTION_TEXTURE_SHIFTUP },
{ "Texture_ShiftDown", VK_DOWN, RAD_SHIFT, ID_SELECTION_TEXTURE_SHIFTDOWN },
{ "Texture_ScaleLeft", VK_LEFT, RAD_CONTROL, ID_SELECTION_TEXTURE_SCALELEFT },
{ "Texture_ScaleRight", VK_RIGHT, RAD_CONTROL, ID_SELECTION_TEXTURE_SCALERIGHT },
{ "Texture_InvertX", 'I', RAD_CONTROL|RAD_SHIFT, ID_CURVE_NEGATIVETEXTUREY },
{ "Texture_InvertY", 'I', RAD_SHIFT, ID_CURVE_NEGATIVETEXTUREX },
{ "Texture_ToggleLock", 'T', RAD_SHIFT, ID_TOGGLE_LOCK },
{ "Texture_ShowAllTextures", 'A', RAD_CONTROL, ID_TEXTURES_SHOWALL },
{ "Edit_Copy", 'C', RAD_CONTROL, ID_EDIT_COPYBRUSH },
{ "Edit_Paste", 'V', RAD_CONTROL, ID_EDIT_PASTEBRUSH },
{ "Edit_Undo", 'Z', RAD_CONTROL, ID_EDIT_UNDO },
{ "Edit_Redo", 'Y', RAD_CONTROL, ID_EDIT_REDO },
{ "Camera_Forward", VK_UP, 0, ID_CAMERA_FORWARD },
{ "Camera_Back", VK_DOWN, 0, ID_CAMERA_BACK },
{ "Camera_Left", VK_LEFT, 0, ID_CAMERA_LEFT },
{ "Camera_Right", VK_RIGHT, 0, ID_CAMERA_RIGHT },
{ "Camera_Up", 'D', 0, ID_CAMERA_UP },
{ "Camera_Down", 'C', 0, ID_CAMERA_DOWN },
{ "Camera_AngleUp", 'A', 0, ID_CAMERA_ANGLEUP },
{ "Camera_AngleDown", 'Z', 0, ID_CAMERA_ANGLEDOWN },
// FIXME: DG: SteelStorm2 has bindings for Camera_Left and Camera_StrafeLeft switched (same for Right)
{ "Camera_StrafeRight", VK_PERIOD, 0, ID_CAMERA_STRAFERIGHT },
{ "Camera_StrafeLeft", VK_COMMA, 0, ID_CAMERA_STRAFELEFT },
{ "Camera_UpFloor", VK_PRIOR, 0, ID_VIEW_UPFLOOR },
{ "Camera_DownFloor", VK_NEXT, 0, ID_VIEW_DOWNFLOOR },
{ "Camera_CenterView", VK_END, 0, ID_VIEW_CENTER },
{ "Grid_ZoomOut", VK_INSERT, 0, ID_VIEW_ZOOMOUT },
{ "FileSaveCopy", 'C', RAD_CONTROL|RAD_ALT|RAD_SHIFT, D3XP_ID_FILE_SAVE_COPY },
{ "ShowHideModels", 'M', RAD_CONTROL, D3XP_ID_SHOW_MODELS },
{ "NextView", VK_HOME, 0, ID_VIEW_NEXTVIEW },
{ "Grid_ZoomIn", VK_DELETE, 0, ID_VIEW_ZOOMIN },
{ "Grid_SetPoint5", '4', RAD_SHIFT, ID_GRID_POINT5 },
{ "Grid_SetPoint25", '3', RAD_SHIFT, ID_GRID_POINT25 },
{ "Grid_SetPoint125", '2', RAD_SHIFT, ID_GRID_POINT125 },
//{ "Grid_SetPoint0625", '1', RAD_SHIFT, ID_GRID_POINT0625 },
{ "Grid_Set1", '1', 0, ID_GRID_1 },
{ "Grid_Set2", '2', 0, ID_GRID_2 },
{ "Grid_Set4", '3', 0, ID_GRID_4 },
{ "Grid_Set8", '4', 0, ID_GRID_8 },
{ "Grid_Set16", '5', 0, ID_GRID_16 },
{ "Grid_Set32", '6', 0, ID_GRID_32 },
{ "Grid_Set64", '7', 0, ID_GRID_64 },
{ "Grid_Down", VK_OEM_4, 0, ID_GRID_PREV }, /* [{ in us layout */
{ "Grid_Up", VK_OEM_6, 0, ID_GRID_NEXT }, /* ]} in US layouts */
{ "Grid_Toggle", '0', 0, ID_GRID_TOGGLE },
{ "Grid_ToggleSizePaint", 'Q', RAD_PRESS, ID_SELECTION_TOGGLESIZEPAINT },
{ "Grid_PrecisionCursorMode",VK_F11, 0 , ID_PRECISION_CURSOR_CYCLE},
/* Begin SS2 Changes */
{ "Grid_SetViewTop", VK_NUMPAD7, 0, ID_SET_VIEW_TOP },
{ "Grid_SetViewSide", VK_NUMPAD3, 0, ID_SET_VIEW_SIDE },
{ "Grid_SetViewFront", VK_NUMPAD1, 0, ID_SET_VIEW_FRONT },
/* End SS2 Changes */
{ "Grid_NextView", VK_TAB, RAD_CONTROL, ID_VIEW_NEXTVIEW },
{ "Grid_ToggleCrosshairs", 'X', RAD_SHIFT, ID_VIEW_CROSSHAIR },
{ "Grid_ZZoomOut", VK_INSERT, RAD_CONTROL, ID_VIEW_ZZOOMOUT },
{ "Grid_ZZoomIn", VK_DELETE, RAD_CONTROL, ID_VIEW_ZZOOMIN },
{ "Brush_Make3Sided", '3', RAD_CONTROL, ID_BRUSH_3SIDED },
{ "Brush_Make4Sided", '4', RAD_CONTROL, ID_BRUSH_4SIDED },
{ "Brush_Make5Sided", '5', RAD_CONTROL, ID_BRUSH_5SIDED },
{ "Brush_Make6Sided", '6', RAD_CONTROL, ID_BRUSH_6SIDED },
{ "Brush_Make7Sided", '7', RAD_CONTROL, ID_BRUSH_7SIDED },
{ "Brush_Make8Sided", '8', RAD_CONTROL, ID_BRUSH_8SIDED },
{ "Brush_Make9Sided", '9', RAD_CONTROL, ID_BRUSH_9SIDED },
{ "Leak_NextSpot", 'K', RAD_CONTROL|RAD_SHIFT, ID_MISC_NEXTLEAKSPOT },
{ "Leak_PrevSpot", 'L', RAD_CONTROL|RAD_SHIFT, ID_MISC_PREVIOUSLEAKSPOT },
{ "File_Open", 'O', RAD_CONTROL, ID_FILE_OPEN },
{ "File_Save", 'S', RAD_CONTROL, ID_FILE_SAVE },
{ "TAB", VK_TAB, 0, ID_PATCH_TAB },
{ "TAB", VK_TAB, RAD_SHIFT, ID_PATCH_TAB },
{ "Patch_BendMode", 'B', 0, ID_PATCH_BEND },
{ "Patch_FreezeVertices", 'F', 0, ID_CURVE_FREEZE },
{ "Patch_UnFreezeVertices", 'F', RAD_CONTROL, ID_CURVE_UNFREEZE },
{ "Patch_UnFreezeAllVertices",'F', RAD_CONTROL|RAD_SHIFT, ID_CURVE_UNFREEZEALL },
{ "Patch_Thicken", 'T', RAD_CONTROL, ID_CURVE_THICKEN },
{ "Patch_ClearOverlays", 'Y', RAD_SHIFT, ID_CURVE_OVERLAY_CLEAR },
{ "Patch_MakeOverlay", 'Y', 0, ID_CURVE_OVERLAY_SET },
{ "Patch_CycleCapTexturing", 'P', RAD_CONTROL|RAD_SHIFT, ID_CURVE_CYCLECAP },
{ "Patch_CycleCapTexturingAlt",'P', RAD_SHIFT, ID_CURVE_CYCLECAPALT },
{ "Patch_InvertCurve", 'I', RAD_CONTROL, ID_CURVE_NEGATIVE },
{ "Patch_IncPatchColumn", VK_ADD, RAD_CONTROL|RAD_SHIFT, ID_CURVE_INSERTCOLUMN },
{ "Patch_IncPatchRow", VK_ADD, RAD_CONTROL, ID_CURVE_INSERTROW },
{ "Patch_DecPatchColumn", VK_SUBTRACT, RAD_CONTROL|RAD_SHIFT, ID_CURVE_DELETECOLUMN },
{ "Patch_DecPatchRow", VK_SUBTRACT, RAD_CONTROL, ID_CURVE_DELETEROW },
{ "Patch_RedisperseRows", 'E', RAD_CONTROL, ID_CURVE_REDISPERSE_ROWS },
{ "Patch_RedisperseCols", 'E', RAD_CONTROL|RAD_SHIFT, ID_CURVE_REDISPERSE_COLS },
{ "Patch_Naturalize", 'N', RAD_CONTROL, ID_PATCH_NATURALIZE },
{ "Patch_SnapToGrid", 'G', RAD_CONTROL, ID_SELECT_SNAPTOGRID },
{ "Patch_CapCurrentCurve", 'C', RAD_SHIFT, ID_CURVE_CAP },
{ "Clipper_Toggle", 'X', 0, ID_VIEW_CLIPPER },
{ "Clipper_ClipSelected", VK_RETURN, 0, ID_CLIP_SELECTED },
{ "Clipper_SplitSelected", VK_RETURN, RAD_SHIFT, ID_SPLIT_SELECTED },
{ "Clipper_FlipClip", VK_RETURN, RAD_CONTROL, ID_FLIP_CLIP },
{ "CameraClip_ZoomOut", VK_OEM_4, RAD_CONTROL, ID_VIEW_CUBEOUT },
{ "CameraClip_ZoomIn", VK_OEM_5, RAD_CONTROL, ID_VIEW_CUBEIN },
{ "CameraClip_Toggle", VK_OEM_6, RAD_CONTROL, ID_VIEW_CUBICCLIPPING },
{ "ViewTab_EntityInfo", 'N', 0, ID_VIEW_ENTITY },
{ "ViewTab_Console", 'O', 0, ID_VIEW_CONSOLE },
{ "ViewTab_Textures", 'T', 0, ID_VIEW_TEXTURE },
{ "ViewTab_MediaBrowser", 'M', 0, ID_VIEW_MEDIABROWSER },
{ "Window_SurfaceInspector",'S', 0, ID_TEXTURES_INSPECTOR },
{ "Window_PatchInspector", 'S', RAD_SHIFT, ID_PATCH_INSPECTOR },
{ "Window_EntityList", 'I', 0, ID_EDIT_ENTITYINFO },
{ "Window_Preferences", 'P', 0, ID_PREFS },
{ "Window_ToggleCamera", 'C', RAD_CONTROL|RAD_SHIFT, ID_TOGGLECAMERA },
{ "Window_ToggleView", 'V', RAD_CONTROL|RAD_SHIFT, ID_TOGGLEVIEW },
{ "Window_ToggleZ", 'Z', RAD_CONTROL|RAD_SHIFT, ID_TOGGLEZ },
{ "Window_LightEditor", 'J', 0, ID_PROJECTED_LIGHT },
{ "Window_EntityColor", 'K', 0, ID_MISC_SELECTENTITYCOLOR },
{ "Selection_DragEdges", 'E', 0, ID_SELECTION_DRAGEDGES },
{ "Selection_DragVertices", 'V', 0, ID_SELECTION_DRAGVERTECIES },
{ "Selection_Clone", VK_SPACE, 0, ID_SELECTION_CLONE },
{ "Selection_Delete", VK_BACK, 0, ID_SELECTION_DELETE },
{ "Selection_UnSelect", VK_ESCAPE, 0, ID_SELECTION_DESELECT },
{ "Selection_Invert", 'I' , 0 , ID_SELECTION_INVERT },
{ "Selection_ToggleMoveOnly",'W', 0, ID_SELECTION_MOVEONLY },
{ "Selection_MoveDown", VK_SUBTRACT, 0, ID_SELECTION_MOVEDOWN },
{ "Selection_MoveUp", VK_ADD, 0, ID_SELECTION_MOVEUP },
{ "Selection_DumpBrush", 'D', RAD_SHIFT, ID_SELECTION_PRINT },
{ "Selection_NudgeLeft", VK_LEFT, RAD_ALT, ID_SELECTION_SELECT_NUDGELEFT },
{ "Selection_NudgeRight", VK_RIGHT, RAD_ALT, ID_SELECTION_SELECT_NUDGERIGHT },
{ "Selection_NudgeUp", VK_UP, RAD_ALT, ID_SELECTION_SELECT_NUDGEUP },
{ "Selection_NudgeDown", VK_DOWN, RAD_ALT, ID_SELECTION_SELECT_NUDGEDOWN },
{ "Selection_Combine", 'K', RAD_SHIFT, ID_SELECTION_COMBINE },
{ "Selection_Connect", 'K', RAD_CONTROL, ID_SELECTION_CONNECT },
{ "Selection_Ungroup", 'G', RAD_SHIFT, ID_SELECTION_UNGROUPENTITY },
{ "Selection_CSGMerge", 'M', RAD_SHIFT, ID_SELECTION_CSGMERGE },
{ "Selection_CenterOrigin", 'O', RAD_SHIFT, ID_SELECTION_CENTER_ORIGIN },
{ "Selection_SelectCompleteEntity", 'E' , RAD_CONTROL|RAD_ALT|RAD_SHIFT , ID_SELECT_COMPLETE_ENTITY },
{ "Selection_SelectAllOfType", 'A', RAD_SHIFT, ID_SELECT_ALL },
{ "Show_ToggleLights", '0' , RAD_ALT , ID_VIEW_SHOWLIGHTS },
{ "Show_TogglePatches", 'P', RAD_CONTROL, ID_VIEW_SHOWCURVES },
{ "Show_ToggleClip", 'L', RAD_CONTROL, ID_VIEW_SHOWCLIP },
{ "Show_HideSelected", 'H', 0, ID_VIEW_HIDESHOW_HIDESELECTED },
{ "Show_ShowHidden", 'H', RAD_SHIFT, ID_VIEW_HIDESHOW_SHOWHIDDEN },
{ "Show_HideNotSelected", 'H', RAD_CONTROL|RAD_SHIFT, ID_VIEW_HIDESHOW_HIDENOTSELECTED },
{ "Render_ToggleSound", VK_F9, 0, ID_VIEW_RENDERSOUND },
{ "Render_ToggleSelections", VK_F8, 0, ID_VIEW_RENDERSELECTION },
{ "Render_RebuildData", VK_F7, 0, ID_VIEW_REBUILDRENDERDATA },
{ "Render_ToggleAnimation", VK_F6, 0, ID_VIEW_MATERIALANIMATION},
{ "Render_ToggleEntityOutlines", VK_F5, 0, ID_VIEW_RENDERENTITYOUTLINES },
{ "Render_ToggleRealtimeBuild", VK_F4, 0, ID_VIEW_REALTIMEREBUILD },
{ "Render_Toggle", VK_F3, 0, ID_VIEW_RENDERMODE },
{ "Find_Textures", 'F', RAD_SHIFT, ID_TEXTURE_REPLACEALL },
{ "Find_Entity", VK_F3, RAD_CONTROL, ID_MISC_FINDORREPLACEENTITY},
{ "Find_NextEntity", VK_F3,RAD_SHIFT, ID_MISC_FINDNEXTENT},
{ "_ShowDOOM", VK_F2, 0, ID_SHOW_DOOM },
{ "Rotate_MouseRotate", 'R', 0, ID_SELECT_MOUSEROTATE },
{ "Rotate_ToggleFlatRotation", 'R', RAD_CONTROL, ID_VIEW_CAMERAUPDATE },
{ "Rotate_CycleRotationAxis", 'R', RAD_SHIFT, ID_TOGGLE_ROTATELOCK },
{ "_AutoCaulk", 'A', RAD_CONTROL|RAD_SHIFT, ID_AUTOCAULK }, // ctrl-shift-a, since SHIFT-A is already taken
};
int g_nCommandCount = sizeof(g_Commands) / sizeof(SCommandInfo);
SKeyInfo g_Keys[] = {
/* To understand the VK_* information, please read the MSDN:
http://msdn.microsoft.com/en-us/library/ms927178.aspx
*/
{ "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 },
{ "[", VK_OEM_4 }, /* Was 219, 0xDB */
{ "\\", VK_OEM_5 }, /* Was 220, 0xDC */
{ "]", VK_OEM_6 }, /* Was 221, 0xDD */
};
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(DMAP_DONE);
const int g_msgBSPStatus = RegisterWindowMessage(DMAP_MSGID);
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(D3XP_ID_FILE_SAVE_COPY, OnFileSaveCopy)
ON_COMMAND(D3XP_ID_SHOW_MODELS, OnViewShowModels )
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_MEDIABROWSER, OnViewMediaBrowser)
ON_COMMAND(ID_VIEW_FRONT, OnViewFront)
ON_COMMAND(ID_VIEW_SHOWBLOCKS, OnViewShowblocks)
ON_COMMAND(ID_VIEW_SHOWCLIP, OnViewShowclip)
ON_COMMAND(ID_VIEW_SHOWTRIGGERS, OnViewShowTriggers)
ON_COMMAND(ID_VIEW_SHOWCOORDINATES, OnViewShowcoordinates)
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_SHOWCOMBATNODES, OnViewShowCombatNodes)
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_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_MISC_FINDORREPLACEENTITY, OnMiscFindOrReplaceEntity)
ON_COMMAND(ID_MISC_FINDNEXTENT, OnMiscFindNextEntity)
ON_COMMAND(ID_MISC_SETVIEWPOS, OnMiscSetViewPos)
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_DELETE, OnSelectionDelete)
ON_COMMAND(ID_SELECTION_DESELECT, OnSelectionDeselect)
ON_COMMAND(ID_SELECTION_DRAGEDGES, OnSelectionDragedges)
ON_COMMAND(ID_SELECTION_DRAGVERTECIES, OnSelectionDragvertecies)
ON_COMMAND(ID_SELECTION_CENTER_ORIGIN, OnSelectionCenterOrigin)
ON_COMMAND(ID_SELECTION_MAKEHOLLOW, OnSelectionMakehollow)
ON_COMMAND(ID_SELECTION_SELECTCOMPLETETALL, OnSelectionSelectcompletetall)
ON_COMMAND(ID_SELECTION_SELECTINSIDE, OnSelectionSelectinside)
ON_COMMAND(ID_SELECTION_SELECTPARTIALTALL, OnSelectionSelectpartialtall)
ON_COMMAND(ID_SELECTION_SELECTTOUCHING, OnSelectionSelecttouching)
ON_COMMAND(ID_SELECTION_UNGROUPENTITY, OnSelectionUngroupentity)
ON_COMMAND(ID_TEXTURES_POPUP, OnTexturesPopup)
ON_COMMAND(ID_SPLINES_POPUP, OnSplinesPopup)
ON_COMMAND(ID_SPLINES_EDITPOINTS, OnSplinesEditPoints)
ON_COMMAND(ID_SPLINES_ADDPOINTS, OnSplinesAddPoints)
ON_COMMAND(ID_SPLINES_INSERTPOINTS, OnSplinesInsertPoint)
ON_COMMAND(ID_SPLINES_DELETEPOINTS, OnSplinesDeletePoint)
ON_COMMAND(ID_POPUP_SELECTION, OnPopupSelection)
ON_COMMAND(ID_VIEW_CHANGE, OnViewChange)
ON_COMMAND(ID_VIEW_CAMERAUPDATE, OnViewCameraupdate)
ON_WM_SIZING()
ON_COMMAND(ID_HELP_ABOUT, OnHelpAbout)
ON_COMMAND(ID_VIEW_CLIPPER, OnViewClipper)
ON_COMMAND(ID_CAMERA_ANGLEDOWN, OnCameraAngledown)
ON_COMMAND(ID_CAMERA_ANGLEUP, OnCameraAngleup)
ON_COMMAND(ID_CAMERA_BACK, OnCameraBack)
ON_COMMAND(ID_CAMERA_DOWN, OnCameraDown)
ON_COMMAND(ID_CAMERA_FORWARD, OnCameraForward)
ON_COMMAND(ID_CAMERA_LEFT, OnCameraLeft)
ON_COMMAND(ID_CAMERA_RIGHT, OnCameraRight)
ON_COMMAND(ID_CAMERA_STRAFELEFT, OnCameraStrafeleft)
ON_COMMAND(ID_CAMERA_STRAFERIGHT, OnCameraStraferight)
ON_COMMAND(ID_CAMERA_UP, OnCameraUp)
ON_COMMAND(ID_GRID_TOGGLE, OnGridToggle)
ON_COMMAND(ID_PREFS, OnPrefs)
ON_COMMAND(ID_TOGGLECAMERA, OnTogglecamera)
ON_COMMAND(ID_TOGGLEVIEW, OnToggleview)
ON_COMMAND(ID_TOGGLEZ, OnTogglez)
ON_COMMAND(ID_TOGGLE_LOCK, OnToggleLock)
ON_COMMAND(ID_EDIT_MAPINFO, OnEditMapinfo)
ON_COMMAND(ID_EDIT_ENTITYINFO, OnEditEntityinfo)
ON_COMMAND(ID_VIEW_NEXTVIEW, OnViewNextview)
ON_COMMAND(ID_SET_VIEW_TOP, OnSetViewTop)
ON_COMMAND(ID_SET_VIEW_SIDE, OnSetViewSide)
ON_COMMAND(ID_SET_VIEW_FRONT, OnSetViewFront)
ON_COMMAND(ID_HELP_COMMANDLIST, OnHelpCommandlist)
ON_COMMAND(ID_FILE_NEWPROJECT, OnFileNewproject)
ON_COMMAND(ID_FLIP_CLIP, OnFlipClip)
ON_COMMAND(ID_CLIP_SELECTED, OnClipSelected)
ON_COMMAND(ID_SPLIT_SELECTED, OnSplitSelected)
ON_COMMAND(ID_TOGGLEVIEW_XZ, OnToggleviewXz)
ON_COMMAND(ID_TOGGLEVIEW_YZ, OnToggleviewYz)
ON_COMMAND(ID_COLORS_BRUSH, OnColorsBrush)
ON_COMMAND(ID_COLORS_CLIPPER, OnColorsClipper)
ON_COMMAND(ID_COLORS_GRIDTEXT, OnColorsGridtext)
ON_COMMAND(ID_COLORS_SELECTEDBRUSH, OnColorsSelectedbrush)
ON_COMMAND(ID_COLORS_GRIDBLOCK, OnColorsGridblock)
ON_COMMAND(ID_COLORS_VIEWNAME, OnColorsViewname)
ON_COMMAND(ID_COLOR_SETORIGINAL, OnColorSetoriginal)
ON_COMMAND(ID_COLOR_SETQER, OnColorSetqer)
ON_COMMAND(ID_COLOR_SUPERMAL, OnColorSetSuperMal)
ON_COMMAND(ID_THEMES_MAX , OnColorSetMax )
ON_COMMAND(ID_COLOR_SETBLACK, OnColorSetblack)
ON_COMMAND(ID_SNAPTOGRID, OnSnaptogrid)
ON_COMMAND(ID_SELECT_SCALE, OnSelectScale)
ON_COMMAND(ID_SELECT_MOUSEROTATE, OnSelectMouserotate)
ON_COMMAND(ID_EDIT_COPYBRUSH, OnEditCopybrush)
ON_COMMAND(ID_EDIT_PASTEBRUSH, OnEditPastebrush)
ON_COMMAND(ID_EDIT_UNDO, OnEditUndo)
ON_COMMAND(ID_EDIT_REDO, OnEditRedo)
ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdateEditUndo)
ON_UPDATE_COMMAND_UI(ID_EDIT_REDO, OnUpdateEditRedo)
ON_COMMAND(ID_SELECTION_INVERT, OnSelectionInvert)
ON_COMMAND(ID_SELECTION_TEXTURE_DEC, OnSelectionTextureDec)
ON_COMMAND(ID_SELECTION_TEXTURE_FIT, OnSelectionTextureFit)
ON_COMMAND(ID_SELECTION_TEXTURE_INC, OnSelectionTextureInc)
ON_COMMAND(ID_SELECTION_TEXTURE_ROTATECLOCK, OnSelectionTextureRotateclock)
ON_COMMAND(ID_SELECTION_TEXTURE_ROTATECOUNTER, OnSelectionTextureRotatecounter)
ON_COMMAND(ID_SELECTION_TEXTURE_SCALEDOWN, OnSelectionTextureScaledown)
ON_COMMAND(ID_SELECTION_TEXTURE_SCALEUP, OnSelectionTextureScaleup)
ON_COMMAND(ID_SELECTION_TEXTURE_SHIFTDOWN, OnSelectionTextureShiftdown)
ON_COMMAND(ID_SELECTION_TEXTURE_SHIFTLEFT, OnSelectionTextureShiftleft)
ON_COMMAND(ID_SELECTION_TEXTURE_SHIFTRIGHT, OnSelectionTextureShiftright)
ON_COMMAND(ID_SELECTION_TEXTURE_SHIFTUP, OnSelectionTextureShiftup)
ON_COMMAND(ID_GRID_NEXT, OnGridNext)
ON_COMMAND(ID_GRID_PREV, OnGridPrev)
ON_COMMAND(ID_SELECTION_TEXTURE_SCALELEFT, OnSelectionTextureScaleLeft)
ON_COMMAND(ID_SELECTION_TEXTURE_SCALERIGHT, OnSelectionTextureScaleRight)
ON_COMMAND(ID_TEXTURE_REPLACEALL, OnTextureReplaceall)
ON_COMMAND(ID_SCALELOCKX, OnScalelockx)
ON_COMMAND(ID_SCALELOCKY, OnScalelocky)
ON_COMMAND(ID_SCALELOCKZ, OnScalelockz)
ON_COMMAND(ID_SELECT_MOUSESCALE, OnSelectMousescale)
ON_COMMAND(ID_VIEW_CUBICCLIPPING, OnViewCubicclipping)
ON_COMMAND(ID_FILE_IMPORT, OnFileImport)
ON_COMMAND(ID_FILE_PROJECTSETTINGS, OnFileProjectsettings)
ON_UPDATE_COMMAND_UI(ID_FILE_IMPORT, OnUpdateFileImport)
ON_COMMAND(ID_VIEW_CUBEIN, OnViewCubein)
ON_COMMAND(ID_VIEW_CUBEOUT, OnViewCubeout)
ON_COMMAND(ID_FILE_SAVEREGION, OnFileSaveregion)
ON_UPDATE_COMMAND_UI(ID_FILE_SAVEREGION, OnUpdateFileSaveregion)
ON_COMMAND(ID_SELECTION_MOVEDOWN, OnSelectionMovedown)
ON_COMMAND(ID_SELECTION_MOVEUP, OnSelectionMoveup)
ON_COMMAND(ID_TOOLBAR_MAIN, OnToolbarMain)
ON_COMMAND(ID_TOOLBAR_TEXTURE, OnToolbarTexture)
ON_COMMAND(ID_SELECTION_PRINT, OnSelectionPrint)
ON_COMMAND(ID_SELECTION_TOGGLESIZEPAINT, OnSelectionTogglesizepaint)
ON_COMMAND(ID_BRUSH_MAKECONE, OnBrushMakecone)
ON_COMMAND(ID_TEXTURES_LOAD, OnTexturesLoad)
ON_COMMAND(ID_TOGGLE_ROTATELOCK, OnToggleRotatelock)
ON_COMMAND(ID_CURVE_BEVEL, OnCurveBevel)
ON_COMMAND(ID_CURVE_INCREASE_VERT, OnCurveIncreaseVert)
ON_COMMAND(ID_CURVE_DECREASE_VERT, OnCurveDecreaseVert)
ON_COMMAND(ID_CURVE_INCREASE_HORZ, OnCurveIncreaseHorz)
ON_COMMAND(ID_CURVE_DECREASE_HORZ, OnCurveDecreaseHorz)
ON_COMMAND(ID_CURVE_CYLINDER, OnCurveCylinder)
ON_COMMAND(ID_CURVE_EIGHTHSPHERE, OnCurveEighthsphere)
ON_COMMAND(ID_CURVE_ENDCAP, OnCurveEndcap)
ON_COMMAND(ID_CURVE_HEMISPHERE, OnCurveHemisphere)
ON_COMMAND(ID_CURVE_INVERTCURVE, OnCurveInvertcurve)
ON_COMMAND(ID_CURVE_QUARTER, OnCurveQuarter)
ON_COMMAND(ID_CURVE_SPHERE, OnCurveSphere)
ON_COMMAND(ID_FILE_IMPORTMAP, OnFileImportmap)
ON_COMMAND(ID_FILE_EXPORTMAP, OnFileExportmap)
ON_COMMAND(ID_EDIT_LOADPREFAB, OnEditLoadprefab)
ON_COMMAND(ID_VIEW_SHOWCURVES, OnViewShowcurves)
ON_COMMAND(ID_SELECTION_SELECT_NUDGEDOWN, OnSelectionSelectNudgedown)
ON_COMMAND(ID_SELECTION_SELECT_NUDGELEFT, OnSelectionSelectNudgeleft)
ON_COMMAND(ID_SELECTION_SELECT_NUDGERIGHT, OnSelectionSelectNudgeright)
ON_COMMAND(ID_SELECTION_SELECT_NUDGEUP, OnSelectionSelectNudgeup)
ON_WM_SYSKEYDOWN()
ON_COMMAND(ID_TEXTURES_LOADLIST, OnTexturesLoadlist)
ON_COMMAND(ID_DYNAMIC_LIGHTING, OnDynamicLighting)
ON_COMMAND(ID_CURVE_SIMPLEPATCHMESH, OnCurveSimplepatchmesh)
ON_COMMAND(ID_PATCH_SHOWBOUNDINGBOX, OnPatchToggleBox)
ON_COMMAND(ID_PATCH_WIREFRAME, OnPatchWireframe)
ON_COMMAND(ID_CURVE_PATCHCONE, OnCurvePatchcone)
ON_COMMAND(ID_CURVE_PATCHTUBE, OnCurvePatchtube)
ON_COMMAND(ID_PATCH_WELD, OnPatchWeld)
ON_COMMAND(ID_CURVE_PATCHBEVEL, OnCurvePatchbevel)
ON_COMMAND(ID_CURVE_PATCHENDCAP, OnCurvePatchendcap)
ON_COMMAND(ID_CURVE_PATCHINVERTEDBEVEL, OnCurvePatchinvertedbevel)
ON_COMMAND(ID_CURVE_PATCHINVERTEDENDCAP, OnCurvePatchinvertedendcap)
ON_COMMAND(ID_PATCH_DRILLDOWN, OnPatchDrilldown)
ON_COMMAND(ID_CURVE_INSERTCOLUMN, OnCurveInsertcolumn)
ON_COMMAND(ID_CURVE_INSERTROW, OnCurveInsertrow)
ON_COMMAND(ID_CURVE_DELETECOLUMN, OnCurveDeletecolumn)
ON_COMMAND(ID_CURVE_DELETEROW, OnCurveDeleterow)
ON_COMMAND(ID_CURVE_INSERT_ADDCOLUMN, OnCurveInsertAddcolumn)
ON_COMMAND(ID_CURVE_INSERT_ADDROW, OnCurveInsertAddrow)
ON_COMMAND(ID_CURVE_INSERT_INSERTCOLUMN, OnCurveInsertInsertcolumn)
ON_COMMAND(ID_CURVE_INSERT_INSERTROW, OnCurveInsertInsertrow)
ON_COMMAND(ID_CURVE_NEGATIVE, OnCurveNegative)
ON_COMMAND(ID_CURVE_NEGATIVETEXTUREX, OnCurveNegativeTextureX)
ON_COMMAND(ID_CURVE_NEGATIVETEXTUREY, OnCurveNegativeTextureY)
ON_COMMAND(ID_CURVE_DELETE_FIRSTCOLUMN, OnCurveDeleteFirstcolumn)
ON_COMMAND(ID_CURVE_DELETE_FIRSTROW, OnCurveDeleteFirstrow)
ON_COMMAND(ID_CURVE_DELETE_LASTCOLUMN, OnCurveDeleteLastcolumn)
ON_COMMAND(ID_CURVE_DELETE_LASTROW, OnCurveDeleteLastrow)
ON_COMMAND(ID_PATCH_BEND, OnPatchBend)
ON_COMMAND(ID_PATCH_INSDEL, OnPatchInsdel)
ON_COMMAND(ID_PATCH_ENTER, OnPatchEnter)
ON_COMMAND(ID_PATCH_TAB, OnPatchTab)
ON_COMMAND(ID_CURVE_PATCHDENSETUBE, OnCurvePatchdensetube)
ON_COMMAND(ID_CURVE_PATCHVERYDENSETUBE, OnCurvePatchverydensetube)
ON_COMMAND(ID_CURVE_CAP, OnCurveCap)
ON_COMMAND(ID_CURVE_CAP_INVERTEDBEVEL, OnCurveCapInvertedbevel)
ON_COMMAND(ID_CURVE_CAP_INVERTEDENDCAP, OnCurveCapInvertedendcap)
ON_COMMAND(ID_CURVE_REDISPERSE_COLS, OnCurveRedisperseCols)
ON_COMMAND(ID_CURVE_REDISPERSE_ROWS, OnCurveRedisperseRows)
ON_COMMAND(ID_PATCH_NATURALIZE, OnPatchNaturalize)
ON_COMMAND(ID_PATCH_NATURALIZEALT, OnPatchNaturalizeAlt)
ON_COMMAND(ID_SELECT_SNAPTOGRID, OnSnapToGrid)
ON_COMMAND(ID_CURVE_PATCHSQUARE, OnCurvePatchsquare)
ON_COMMAND(ID_TEXTURES_TEXTUREWINDOWSCALE_10, OnTexturesTexturewindowscale10)
ON_COMMAND(ID_TEXTURES_TEXTUREWINDOWSCALE_100, OnTexturesTexturewindowscale100)
ON_COMMAND(ID_TEXTURES_TEXTUREWINDOWSCALE_200, OnTexturesTexturewindowscale200)
ON_COMMAND(ID_TEXTURES_TEXTUREWINDOWSCALE_25, OnTexturesTexturewindowscale25)
ON_COMMAND(ID_TEXTURES_TEXTUREWINDOWSCALE_50, OnTexturesTexturewindowscale50)
ON_COMMAND(ID_TEXTURES_FLUSH, OnTexturesFlush)
ON_COMMAND(ID_CURVE_OVERLAY_CLEAR, OnCurveOverlayClear)
ON_COMMAND(ID_CURVE_OVERLAY_SET, OnCurveOverlaySet)
ON_COMMAND(ID_CURVE_THICKEN, OnCurveThicken)
ON_COMMAND(ID_CURVE_CYCLECAP, OnCurveCyclecap)
ON_COMMAND(ID_CURVE_CYCLECAPALT, OnCurveCyclecapAlt)
ON_COMMAND(ID_CURVE_MATRIX_TRANSPOSE, OnCurveMatrixTranspose)
ON_COMMAND(ID_TEXTURES_RELOADSHADERS, OnTexturesReloadshaders)
ON_COMMAND(ID_SHOW_ENTITIES, OnShowEntities)
ON_COMMAND(ID_VIEW_ENTITIESAS_SKINNED, OnViewEntitiesasSkinned)
ON_COMMAND(ID_VIEW_ENTITIESAS_WIREFRAME, OnViewEntitiesasWireframe)
ON_COMMAND(ID_VIEW_SHOWHINT, OnViewShowhint)
ON_UPDATE_COMMAND_UI(ID_TEXTURES_SHOWINUSE, OnUpdateTexturesShowinuse)
ON_COMMAND(ID_TEXTURES_SHOWALL, OnTexturesShowall)
ON_COMMAND(ID_TEXTURES_HIDEALL, OnTexturesHideall)
ON_COMMAND(ID_PATCH_INSPECTOR, OnPatchInspector)
ON_COMMAND(ID_VIEW_OPENGLLIGHTING, OnViewOpengllighting)
ON_COMMAND(ID_SELECT_ALL, OnSelectAll)
ON_COMMAND(ID_VIEW_SHOWCAULK, OnViewShowcaulk)
ON_COMMAND(ID_CURVE_FREEZE, OnCurveFreeze)
ON_COMMAND(ID_CURVE_UNFREEZE, OnCurveUnFreeze)
ON_COMMAND(ID_CURVE_UNFREEZEALL, OnCurveUnFreezeAll)
ON_COMMAND(ID_SELECT_RESELECT, OnSelectReselect)
ON_COMMAND(ID_VIEW_SHOWANGLES, OnViewShowangles)
ON_COMMAND(ID_EDIT_SAVEPREFAB, OnEditSaveprefab)
ON_COMMAND(ID_CURVE_MOREENDCAPSBEVELS_SQUAREBEVEL, OnCurveMoreendcapsbevelsSquarebevel)
ON_COMMAND(ID_CURVE_MOREENDCAPSBEVELS_SQUAREENDCAP, OnCurveMoreendcapsbevelsSquareendcap)
ON_COMMAND(ID_BRUSH_PRIMITIVES_SPHERE, OnBrushPrimitivesSphere)
ON_COMMAND(ID_VIEW_CROSSHAIR, OnViewCrosshair)
ON_COMMAND(ID_VIEW_HIDESHOW_HIDESELECTED, OnViewHideshowHideselected)
ON_COMMAND(ID_VIEW_HIDESHOW_HIDENOTSELECTED, OnViewHideshowHideNotselected)
ON_COMMAND(ID_VIEW_HIDESHOW_SHOWHIDDEN, OnViewHideshowShowhidden)
ON_COMMAND(ID_TEXTURES_SHADERS_SHOW, OnTexturesShadersShow)
ON_COMMAND(ID_TEXTURES_FLUSH_UNUSED, OnTexturesFlushUnused)
ON_COMMAND(ID_PROJECTED_LIGHT, OnProjectedLight)
ON_COMMAND(ID_SHOW_LIGHTTEXTURES, OnShowLighttextures)
ON_COMMAND(ID_SHOW_LIGHTVOLUMES, OnShowLightvolumes)
ON_WM_ACTIVATE()
ON_COMMAND(ID_SPLINES_MODE, OnSplinesMode)
ON_COMMAND(ID_SPLINES_LOAD, OnSplinesLoad)
ON_COMMAND(ID_SPLINES_SAVE, OnSplinesSave)
//ON_COMMAND(ID_SPLINES_EDIT, OnSplinesEdit)
ON_COMMAND(ID_SPLINE_TEST, OnSplineTest)
ON_COMMAND(ID_POPUP_NEWCAMERA_INTERPOLATED, OnPopupNewcameraInterpolated)
ON_COMMAND(ID_POPUP_NEWCAMERA_SPLINE, OnPopupNewcameraSpline)
ON_COMMAND(ID_POPUP_NEWCAMERA_FIXED, OnPopupNewcameraFixed)
ON_COMMAND(ID_SELECTION_MOVEONLY, OnSelectionMoveonly)
ON_COMMAND(ID_SELECT_BRUSHESONLY, OnSelectBrushesOnly)
ON_COMMAND(ID_SELECT_BYBOUNDINGBRUSH, OnSelectByBoundingBrush)
ON_COMMAND(ID_SELECTION_COMBINE, OnSelectionCombine)
ON_COMMAND(ID_PATCH_COMBINE, OnPatchCombine)
ON_COMMAND(ID_SHOW_DOOM, OnShowDoom)
ON_COMMAND(ID_VIEW_RENDERMODE, OnViewRendermode)
ON_COMMAND(ID_VIEW_REBUILDRENDERDATA, OnViewRebuildrenderdata)
ON_COMMAND(ID_VIEW_REALTIMEREBUILD, OnViewRealtimerebuild)
ON_COMMAND(ID_VIEW_RENDERENTITYOUTLINES, OnViewRenderentityoutlines)
ON_COMMAND(ID_VIEW_MATERIALANIMATION, OnViewMaterialanimation)
ON_COMMAND(ID_SELECT_AXIALTEXTURE_BYWIDTH, OnAxialTextureByWidth)
ON_COMMAND(ID_SELECT_AXIALTEXTURE_BYHEIGHT, OnAxialTextureByHeight)
ON_COMMAND(ID_SELECT_AXIALTEXTURE_ARBITRARY, OnAxialTextureArbitrary)
ON_COMMAND(ID_SELECTION_EXPORT_TOOBJ, OnSelectionExportToobj)
ON_COMMAND(ID_SELECTION_EXPORT_TOCM, OnSelectionExportToCM)
ON_COMMAND(ID_VIEW_RENDERSELECTION, OnViewRenderselection)
ON_COMMAND(ID_SELECT_NOMODELS, OnSelectNomodels)
ON_COMMAND(ID_VIEW_SHOW_SHOWVISPORTALS, OnViewShowShowvisportals)
ON_COMMAND(ID_VIEW_SHOW_NODRAW, OnViewShowNoDraw)
ON_COMMAND(ID_VIEW_RENDERSOUND, OnViewRendersound)
ON_COMMAND(ID_SOUND_SHOWSOUNDVOLUMES, OnSoundShowsoundvolumes)
ON_COMMAND(ID_SOUND_SHOWSELECTEDSOUNDVOLUMES, OnSoundShowselectedsoundvolumes)
ON_COMMAND(ID_PATCH_NURBEDITOR, OnNurbEditor)
ON_COMMAND(ID_SELECT_COMPLETE_ENTITY, OnSelectCompleteEntity)
ON_COMMAND(ID_PRECISION_CURSOR_CYCLE , OnPrecisionCursorCycle)
ON_COMMAND(ID_MATERIALS_GENERATEMATERIALSLIST,OnGenerateMaterialsList)
ON_COMMAND(ID_SELECTION_VIEW_WIREFRAMEON, OnSelectionWireFrameOn)
ON_COMMAND(ID_SELECTION_VIEW_WIREFRAMEOFF, OnSelectionWireFrameOff)
ON_COMMAND(ID_SELECTION_VIEW_VISIBLEON, OnSelectionVisibleOn)
ON_COMMAND(ID_SELECTION_VIEW_VISIBLEOFF, OnSelectionVisibleOff)
//}}AFX_MSG_MAP
ON_COMMAND_RANGE(CMD_TEXTUREWAD, CMD_TEXTUREWAD_END, OnTextureWad)
ON_COMMAND_RANGE(CMD_BSPCOMMAND, CMD_BSPCOMMAND_END, OnBspCommand)
ON_COMMAND_RANGE(IDMRU, IDMRU_END, OnMru)
ON_COMMAND_RANGE(ID_VIEW_NEAREST, ID_TEXTURES_FLATSHADE, OnViewNearest)
ON_COMMAND_RANGE(ID_GRID_POINT0625, ID_GRID_64, OnGrid1)
#if _MSC_VER < 1300
ON_REGISTERED_MESSAGE(g_msgBSPDone, OnBSPDone)
ON_REGISTERED_MESSAGE(g_msgBSPStatus, OnBSPStatus)
ON_MESSAGE(WM_DISPLAYCHANGE, OnDisplayChange)
#endif
ON_COMMAND(ID_AUTOCAULK, OnAutocaulk)
ON_UPDATE_COMMAND_UI(ID_AUTOCAULK, OnUpdateAutocaulk)
ON_COMMAND(ID_SELECT_ALLTARGETS, OnSelectAlltargets)
END_MESSAGE_MAP()
static UINT indicators[] = {
ID_SEPARATOR, // status line indicator
ID_SEPARATOR, // status line indicator
ID_SEPARATOR, // status line indicator
ID_SEPARATOR, // status line indicator
ID_SEPARATOR, // status line indicator
ID_SEPARATOR, // status line indicator
};
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnDisplayChange( WPARAM wp, LPARAM lp ) {
// int n = wp;
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnBSPStatus(UINT wParam, long lParam) {
// lparam is an atom contain the text
char buff[1024];
if (::GlobalGetAtomName(static_cast(lParam), buff, sizeof(buff))) {
common->Printf("%s", buff);
::GlobalDeleteAtom(static_cast(lParam));
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnBSPDone(UINT wParam, long lParam) {
idStr str = cvarSystem->GetCVarString( "radiant_bspdone" );
if (str.Length()) {
sndPlaySound(str.c_str(), SND_FILENAME | SND_ASYNC);
}
}
//
// =======================================================================================================================
// CMainFrame construction/destruction
// =======================================================================================================================
//
CMainFrame::CMainFrame() {
m_bDoLoop = false;
g_pParentWnd = this;
m_pXYWnd = NULL;
m_pCamWnd = NULL;
m_pZWnd = NULL;
m_pYZWnd = NULL;
m_pXZWnd = NULL;
m_pActiveXY = NULL;
m_bCamPreview = true;
nurbMode = 0;
}
/*
=======================================================================================================================
=======================================================================================================================
*/
CMainFrame::~CMainFrame() {
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void HandlePopup(CWnd *pWindow, unsigned int uId) {
// Get the current position of the mouse
CPoint ptMouse;
GetCursorPos(&ptMouse);
// Load up a menu that has the options we are looking for in it
CMenu mnuPopup;
VERIFY(mnuPopup.LoadMenu(uId));
mnuPopup.GetSubMenu(0)->TrackPopupMenu
(
TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON,
ptMouse.x,
ptMouse.y,
pWindow
);
mnuPopup.DestroyMenu();
// Set focus back to window
pWindow->SetFocus();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnParentNotify(UINT message, LPARAM lParam) {
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::SetButtonMenuStates() {
CMenu *pMenu = GetMenu();
if (pMenu) {
//
pMenu->CheckMenuItem(ID_VIEW_SHOWNAMES, MF_BYCOMMAND | MF_CHECKED);
pMenu->CheckMenuItem(ID_VIEW_SHOWCOORDINATES, MF_BYCOMMAND | MF_CHECKED);
pMenu->CheckMenuItem(ID_VIEW_SHOWLIGHTS, MF_BYCOMMAND | MF_CHECKED);
pMenu->CheckMenuItem(ID_VIEW_SHOWCOMBATNODES, MF_BYCOMMAND | MF_CHECKED);
pMenu->CheckMenuItem(ID_VIEW_ENTITY, MF_BYCOMMAND | MF_CHECKED);
pMenu->CheckMenuItem(ID_VIEW_SHOWPATH, MF_BYCOMMAND | MF_CHECKED);
pMenu->CheckMenuItem(ID_VIEW_SHOWWATER, MF_BYCOMMAND | MF_CHECKED);
pMenu->CheckMenuItem(ID_VIEW_SHOWWORLD, MF_BYCOMMAND | MF_CHECKED);
pMenu->CheckMenuItem(ID_VIEW_SHOWCLIP, MF_BYCOMMAND | MF_CHECKED);
pMenu->CheckMenuItem(ID_VIEW_SHOWTRIGGERS, MF_BYCOMMAND | MF_CHECKED);
pMenu->CheckMenuItem(ID_VIEW_SHOWHINT, MF_BYCOMMAND | MF_CHECKED);
pMenu->CheckMenuItem(ID_VIEW_SHOWCAULK, MF_BYCOMMAND | MF_CHECKED);
pMenu->CheckMenuItem(ID_VIEW_SHOW_SHOWVISPORTALS, MF_BYCOMMAND | MF_CHECKED);
pMenu->CheckMenuItem(ID_VIEW_SHOW_NODRAW, MF_BYCOMMAND | MF_CHECKED);
pMenu->CheckMenuItem(ID_VIEW_SHOWANGLES, MF_BYCOMMAND | MF_CHECKED);
if (!g_qeglobals.d_savedinfo.show_names) {
pMenu->CheckMenuItem(ID_VIEW_SHOWNAMES, MF_BYCOMMAND | MF_UNCHECKED);
}
if (!g_qeglobals.d_savedinfo.show_coordinates) {
pMenu->CheckMenuItem(ID_VIEW_SHOWCOORDINATES, MF_BYCOMMAND | MF_UNCHECKED);
}
if (g_qeglobals.d_savedinfo.exclude & EXCLUDE_LIGHTS) {
pMenu->CheckMenuItem(ID_VIEW_SHOWLIGHTS, MF_BYCOMMAND | MF_UNCHECKED);
}
if (g_qeglobals.d_savedinfo.exclude & EXCLUDE_COMBATNODES) {
pMenu->CheckMenuItem(ID_VIEW_SHOWCOMBATNODES, MF_BYCOMMAND | MF_UNCHECKED);
}
if (g_qeglobals.d_savedinfo.exclude & EXCLUDE_ENT) {
pMenu->CheckMenuItem(ID_VIEW_ENTITY, MF_BYCOMMAND | MF_UNCHECKED);
}
if (g_qeglobals.d_savedinfo.exclude & EXCLUDE_PATHS) {
pMenu->CheckMenuItem(ID_VIEW_SHOWPATH, MF_BYCOMMAND | MF_UNCHECKED);
}
if (g_qeglobals.d_savedinfo.exclude & EXCLUDE_DYNAMICS) {
pMenu->CheckMenuItem(ID_VIEW_SHOWWATER, MF_BYCOMMAND | MF_UNCHECKED);
}
if (g_qeglobals.d_savedinfo.exclude & EXCLUDE_WORLD) {
pMenu->CheckMenuItem(ID_VIEW_SHOWWORLD, MF_BYCOMMAND | MF_UNCHECKED);
}
if (g_qeglobals.d_savedinfo.exclude & EXCLUDE_CLIP) {
pMenu->CheckMenuItem(ID_VIEW_SHOWCLIP, MF_BYCOMMAND | MF_UNCHECKED);
}
if (g_qeglobals.d_savedinfo.exclude & EXCLUDE_TRIGGERS) {
pMenu->CheckMenuItem(ID_VIEW_SHOWTRIGGERS, MF_BYCOMMAND | MF_UNCHECKED);
}
if (g_qeglobals.d_savedinfo.exclude & EXCLUDE_HINT) {
pMenu->CheckMenuItem(ID_VIEW_SHOWHINT, MF_BYCOMMAND | MF_UNCHECKED);
}
if (g_qeglobals.d_savedinfo.exclude & EXCLUDE_CAULK) {
pMenu->CheckMenuItem(ID_VIEW_SHOWCAULK, MF_BYCOMMAND | MF_UNCHECKED);
}
if (g_qeglobals.d_savedinfo.exclude & EXCLUDE_VISPORTALS) {
pMenu->CheckMenuItem(ID_VIEW_SHOW_SHOWVISPORTALS, MF_BYCOMMAND | MF_UNCHECKED);
}
if (g_qeglobals.d_savedinfo.exclude & EXCLUDE_NODRAW) {
pMenu->CheckMenuItem(ID_VIEW_SHOW_NODRAW, MF_BYCOMMAND | MF_UNCHECKED);
}
if (g_qeglobals.d_savedinfo.exclude & EXCLUDE_ANGLES) {
pMenu->CheckMenuItem(ID_VIEW_SHOWANGLES, MF_BYCOMMAND | MF_UNCHECKED);
}
pMenu->CheckMenuItem(ID_TOGGLE_LOCK, MF_BYCOMMAND | (g_PrefsDlg.m_bTextureLock) ? MF_CHECKED : MF_UNCHECKED);
pMenu->CheckMenuItem
(
ID_TOGGLE_ROTATELOCK,
MF_BYCOMMAND | (g_PrefsDlg.m_bRotateLock) ? MF_CHECKED : MF_UNCHECKED
);
pMenu->CheckMenuItem
(
ID_VIEW_CUBICCLIPPING,
MF_BYCOMMAND | (g_PrefsDlg.m_bCubicClipping) ? MF_CHECKED : MF_UNCHECKED
);
pMenu->CheckMenuItem
(
ID_VIEW_OPENGLLIGHTING,
MF_BYCOMMAND | (g_PrefsDlg.m_bGLLighting) ? MF_CHECKED : MF_UNCHECKED
);
pMenu->CheckMenuItem(ID_SNAPTOGRID, MF_BYCOMMAND | (!g_PrefsDlg.m_bNoClamp) ? MF_CHECKED : MF_UNCHECKED);
if (m_wndToolBar.GetSafeHwnd()) {
m_wndToolBar.GetToolBarCtrl().CheckButton
(
ID_VIEW_CUBICCLIPPING,
(g_PrefsDlg.m_bCubicClipping) ? TRUE : FALSE
);
}
int n = g_PrefsDlg.m_nTextureScale;
int id;
switch (n)
{
case 10:
id = ID_TEXTURES_TEXTUREWINDOWSCALE_10;
break;
case 25:
id = ID_TEXTURES_TEXTUREWINDOWSCALE_25;
break;
case 50:
id = ID_TEXTURES_TEXTUREWINDOWSCALE_50;
break;
case 200:
id = ID_TEXTURES_TEXTUREWINDOWSCALE_200;
break;
default:
id = ID_TEXTURES_TEXTUREWINDOWSCALE_100;
break;
}
CheckTextureScale(id);
}
if (g_qeglobals.d_project_entity) {
// FillTextureMenu(); // redundant but i'll clean it up later.. yeah right..
FillBSPMenu();
LoadMruInReg(g_qeglobals.d_lpMruMenu, "Software\\" EDITOR_REGISTRY_KEY "\\MRU" );
PlaceMenuMRUItem(g_qeglobals.d_lpMruMenu, ::GetSubMenu(::GetMenu(GetSafeHwnd()), 0), ID_FILE_EXIT);
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::ShowMenuItemKeyBindings(CMenu *pMenu) {
int i, j;
char key[1024], *ptr;
MENUITEMINFO MenuItemInfo;
// return;
for (i = 0; i < g_nCommandCount; i++) {
memset(&MenuItemInfo, 0, sizeof(MENUITEMINFO));
MenuItemInfo.cbSize = sizeof(MENUITEMINFO);
MenuItemInfo.fMask = MIIM_TYPE;
MenuItemInfo.dwTypeData = key;
MenuItemInfo.cch = sizeof(key);
if (!pMenu->GetMenuItemInfo(g_Commands[i].m_nCommand, &MenuItemInfo)) {
continue;
}
if (MenuItemInfo.fType != MFT_STRING) {
continue;
}
ptr = strchr(key, '\t');
if (ptr) {
*ptr = '\0';
}
strcat(key, "\t");
if (g_Commands[i].m_nModifiers) { // are there modifiers present?
if (g_Commands[i].m_nModifiers & RAD_SHIFT) {
strcat(key, "Shift-");
}
if (g_Commands[i].m_nModifiers & RAD_ALT) {
strcat(key, "Alt-");
}
if (g_Commands[i].m_nModifiers & RAD_CONTROL) {
strcat(key, "Ctrl-");
}
}
for (j = 0; j < g_nKeyCount; j++) {
if (g_Commands[i].m_nKey == g_Keys[j].m_nVKKey) {
strcat(key, g_Keys[j].m_strName);
break;
}
}
if (j >= g_nKeyCount) {
sprintf(&key[strlen(key)], "%c", g_Commands[i].m_nKey);
}
memset(&MenuItemInfo, 0, sizeof(MENUITEMINFO));
MenuItemInfo.cbSize = sizeof(MENUITEMINFO);
MenuItemInfo.fMask = MIIM_TYPE;
MenuItemInfo.fType = MFT_STRING;
MenuItemInfo.dwTypeData = key;
MenuItemInfo.cch = strlen(key);
SetMenuItemInfo(pMenu->m_hMenu, g_Commands[i].m_nCommand, FALSE, &MenuItemInfo);
}
}
/*
==============
MFCCreate
==============
*/
void MFCCreate( HINSTANCE hInstance )
{
int i = sizeof(g_qeglobals.d_savedinfo);
long l = i;
g_qeglobals.d_savedinfo.exclude |= (EXCLUDE_HINT | EXCLUDE_CLIP);
LoadRegistryInfo("radiant_SavedInfo", &g_qeglobals.d_savedinfo, &l);
int nOldSize = g_qeglobals.d_savedinfo.iSize;
if (g_qeglobals.d_savedinfo.iSize != sizeof(g_qeglobals.d_savedinfo)) {
// fill in new defaults
g_qeglobals.d_savedinfo.iSize = sizeof(g_qeglobals.d_savedinfo);
g_qeglobals.d_savedinfo.fGamma = 1.0;
g_qeglobals.d_savedinfo.iTexMenu = ID_VIEW_BILINEARMIPMAP;
g_qeglobals.d_savedinfo.m_nTextureTweak = 1.0;
//g_qeglobals.d_savedinfo.exclude = INCLUDE_EASY | INCLUDE_NORMAL | INCLUDE_HARD | INCLUDE_DEATHMATCH;
g_qeglobals.d_savedinfo.show_coordinates = true;
g_qeglobals.d_savedinfo.show_names = false;
for (i=0 ; i<3 ; i++) {
g_qeglobals.d_savedinfo.colors[COLOR_TEXTUREBACK][i] = 0;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDBACK][i] = 1.0;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDMINOR][i] = 0.75;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDMAJOR][i] = 0.5;
g_qeglobals.d_savedinfo.colors[COLOR_CAMERABACK][i] = 0.25;
}
g_qeglobals.d_savedinfo.colors[COLOR_GRIDBLOCK][0] = 0.0;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDBLOCK][1] = 0.0;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDBLOCK][2] = 1.0;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][0] = 0.0;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][1] = 0.0;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][2] = 0.0;
g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][0] = 1.0;
g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][1] = 0.0;
g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][2] = 0.0;
g_qeglobals.d_savedinfo.colors[COLOR_CLIPPER][0] = 0.0;
g_qeglobals.d_savedinfo.colors[COLOR_CLIPPER][1] = 0.0;
g_qeglobals.d_savedinfo.colors[COLOR_CLIPPER][2] = 1.0;
g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][0] = 0.0;
g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][1] = 0.0;
g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][2] = 0.0;
g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][0] = 0.5;
g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][1] = 0.0;
g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][2] = 0.75;
// old size was smaller, reload original prefs
if (nOldSize > 0 && nOldSize < sizeof(g_qeglobals.d_savedinfo)) {
long lOldSize = nOldSize;
LoadRegistryInfo("radiant_SavedInfo", &g_qeglobals.d_savedinfo, &lOldSize);
}
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {
char *pBuffer = g_strAppPath.GetBufferSetLength(_MAX_PATH + 1);
int nResult = ::GetModuleFileName(NULL, pBuffer, _MAX_PATH);
ASSERT(nResult != 0);
pBuffer[g_strAppPath.ReverseFind('\\') + 1] = '\0';
g_strAppPath.ReleaseBuffer();
com_editors |= EDITOR_RADIANT;
InitCommonControls();
g_qeglobals.d_hInstance = AfxGetInstanceHandle();
MFCCreate(AfxGetInstanceHandle());
// g_PrefsDlg.LoadPrefs();
if (CFrameWnd::OnCreate(lpCreateStruct) == -1) {
return -1;
}
UINT nID = (g_PrefsDlg.m_bWideToolbar) ? IDR_TOOLBAR_ADVANCED : IDR_TOOLBAR1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(nID)) {
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators) / sizeof(UINT))) {
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
m_bCamPreview = true;
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SCALELOCKX, FALSE);
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SCALELOCKY, FALSE);
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SCALELOCKZ, FALSE);
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SELECT_BYBOUNDINGBRUSH, FALSE);
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SELECT_BRUSHESONLY, FALSE);
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_PATCH_SHOWBOUNDINGBOX, FALSE);
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_PATCH_WELD, TRUE);
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_PATCH_DRILLDOWN, TRUE);
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SHOW_LIGHTVOLUMES, FALSE);
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SHOW_LIGHTTEXTURES, FALSE);
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SELECTION_MOVEONLY, FALSE);
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SOUND_SHOWSOUNDVOLUMES,g_qeglobals.d_savedinfo.showSoundAlways);
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SOUND_SHOWSELECTEDSOUNDVOLUMES,g_qeglobals.d_savedinfo.showSoundWhenSelected);
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
g_nScaleHow = 0;
m_wndTextureBar.Create(this, IDD_TEXTUREBAR, CBRS_BOTTOM, 7433);
m_wndTextureBar.EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndTextureBar);
g_qeglobals.d_lpMruMenu = CreateMruMenuDefault();
m_bAutoMenuEnable = FALSE;
LoadCommandMap();
CMenu *pMenu = GetMenu();
ShowMenuItemKeyBindings(pMenu);
CFont *pFont = new CFont();
pFont->CreatePointFont(g_PrefsDlg.m_nStatusSize * 10, "Arial");
m_wndStatusBar.SetFont(pFont);
if (g_PrefsDlg.m_bRunBefore == FALSE) {
g_PrefsDlg.m_bRunBefore = TRUE;
g_PrefsDlg.SavePrefs();
/*
* 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) { OnFileNewproject(); }
*/
}
else
{
// load plugins before the first Map_LoadFile required for model plugins
if (g_PrefsDlg.m_bLoadLastMap && g_PrefsDlg.m_strLastMap.GetLength() > 0) {
Map_LoadFile(g_PrefsDlg.m_strLastMap.GetBuffer(0));
}
}
SetGridStatus();
SetTexValStatus();
SetButtonMenuStates();
LoadBarState("RadiantToolBars2");
SetActiveXY(m_pXYWnd);
m_pXYWnd->SetFocus();
PostMessage(WM_KEYDOWN, 'O', NULL);
if ( radiant_entityMode.GetBool() ) {
g_qeglobals.d_savedinfo.exclude |= (EXCLUDE_PATHS | EXCLUDE_CLIP | EXCLUDE_CAULK | EXCLUDE_VISPORTALS | EXCLUDE_NODRAW | EXCLUDE_TRIGGERS);
}
Sys_UpdateWindows ( W_ALL );
return 0;
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void FindReplace(CString& strContents, const char* pTag, const char* pValue) {
if (strcmp(pTag, pValue) == 0)
return;
for (int nPos = strContents.Find(pTag); nPos >= 0; nPos = strContents.Find(pTag)) {
int nRightLen = strContents.GetLength() - strlen(pTag) - nPos;
CString strLeft = strContents.Left(nPos);
CString strRight = strContents.Right(nRightLen);
strLeft += pValue;
strLeft += strRight;
strContents = strLeft;
}
}
void CMainFrame::LoadCommandMap() {
CString strINI;
char pBuff[1024];
strINI = g_strAppPath;
strINI += "\\radiant.ini";
for (int i = 0; i < g_nCommandCount; i++) {
int nLen = GetPrivateProfileString("Commands", g_Commands[i].m_strCommand, "", pBuff, 1024, strINI);
if (nLen > 0) {
CString strBuff = pBuff;
strBuff.TrimLeft();
strBuff.TrimRight();
int nSpecial = strBuff.Find("+alt");
g_Commands[i].m_nModifiers = 0;
if (nSpecial >= 0) {
g_Commands[i].m_nModifiers |= RAD_ALT;
FindReplace(strBuff, "+alt", "");
}
nSpecial = strBuff.Find("+ctrl");
if (nSpecial >= 0) {
g_Commands[i].m_nModifiers |= RAD_CONTROL;
FindReplace(strBuff, "+ctrl", "");
}
nSpecial = strBuff.Find("+shift");
if (nSpecial >= 0) {
g_Commands[i].m_nModifiers |= RAD_SHIFT;
FindReplace(strBuff, "+shift", "");
}
strBuff.TrimLeft();
strBuff.TrimRight();
strBuff.MakeUpper();
if (nLen == 1) { // most often case.. deal with first
g_Commands[i].m_nKey = __toascii(strBuff.GetAt(0));
}
else { // special key
for (int j = 0; j < g_nKeyCount; j++) {
if (strBuff.CompareNoCase(g_Keys[j].m_strName) == 0) {
g_Commands[i].m_nKey = g_Keys[j].m_nVKKey;
break;
}
}
}
}
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT &cs) {
// TODO: Modify the Window class or styles here by modifying the CREATESTRUCT cs
return CFrameWnd::PreCreateWindow(cs);
}
// CMainFrame diagnostics
#ifdef _DEBUG
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::AssertValid() const {
CFrameWnd::AssertValid();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::Dump(CDumpContext &dc) const {
CFrameWnd::Dump(dc);
}
#endif // _DEBUG
//
// =======================================================================================================================
// CMainFrame message handlers
// =======================================================================================================================
//
void CMainFrame::CreateQEChildren() {
//
// the project file can be specified on the command line, or implicitly found in
// the basedir directory
//
bool bProjectLoaded = false;
if (g_PrefsDlg.m_bLoadLast && g_PrefsDlg.m_strLastProject.GetLength() > 0) {
bProjectLoaded = QE_LoadProject(g_PrefsDlg.m_strLastProject.GetBuffer(0));
}
if (!bProjectLoaded) {
bProjectLoaded = QE_LoadProject( EDITOR_DEFAULT_PROJECT );
}
if (!bProjectLoaded) {
CFileDialog dlgFile( true, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, EDITOR_WINDOWTEXT " Project files (*.qe4, *.prj)|*.qe4|*.prj||", this );
if (dlgFile.DoModal() == IDOK) {
bProjectLoaded = QE_LoadProject(dlgFile.GetPathName().GetBuffer(0));
}
}
if (!bProjectLoaded) {
Error("Unable to load project file. It was unavailable in the scripts path and the default could not be found");
}
QE_Init();
common->Printf("Entering message loop\n");
m_bDoLoop = true;
SetTimer(QE_TIMER0, 100, NULL);
SetTimer(QE_TIMER1, g_PrefsDlg.m_nAutoSave * 60 * 1000, NULL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam) {
return CFrameWnd::OnCommand(wParam, lParam);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
LRESULT CMainFrame::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) {
//RoutineProcessing();
return CFrameWnd::DefWindowProc(message, wParam, lParam);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::RoutineProcessing() {
if (m_bDoLoop) {
double time = 0.0;
static double oldtime = 0.0;
double delta = 0.0;
time = Sys_DoubleTime();
delta = time - oldtime;
oldtime = time;
if (delta > 0.2) {
delta = 0.2;
}
// run time dependant behavior
if (m_pCamWnd) {
m_pCamWnd->Cam_MouseControl(delta);
}
if (g_PrefsDlg.m_bQE4Painting && g_nUpdateBits) {
int nBits = g_nUpdateBits; // this is done to keep this routine from being
g_nUpdateBits = 0; // re-entered due to the paint process.. only
UpdateWindows(nBits); // happens in rare cases but causes a stack overflow
}
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) {
return CFrameWnd::WindowProc(message, wParam, lParam);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
bool MouseDown() {
if (::GetAsyncKeyState(VK_LBUTTON)) {
return true;
}
if (::GetAsyncKeyState(VK_RBUTTON)) {
return true;
}
if (::GetAsyncKeyState(VK_MBUTTON)) {
return true;
}
return false;
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnTimer(UINT_PTR nIDEvent) {
static bool autoSavePending = false;
if ( nIDEvent == QE_TIMER0 && !MouseDown() ) {
QE_CountBrushesAndUpdateStatusBar();
}
if ( nIDEvent == QE_TIMER1 || autoSavePending ) {
if ( MouseDown() ) {
autoSavePending = true;
return;
}
if ( Sys_Waiting() ) {
autoSavePending = true;
return;
}
QE_CheckAutoSave();
autoSavePending = false;
}
}
struct SplitInfo {
int m_nMin;
int m_nCur;
};
/*
=======================================================================================================================
=======================================================================================================================
*/
bool LoadWindowPlacement(HWND hwnd, const char *pName) {
WINDOWPLACEMENT wp;
wp.length = sizeof(WINDOWPLACEMENT);
LONG lSize = sizeof(wp);
if (LoadRegistryInfo(pName, &wp, &lSize)) {
::SetWindowPlacement(hwnd, &wp);
return true;
}
return false;
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void SaveWindowPlacement(HWND hwnd, const char *pName) {
WINDOWPLACEMENT wp;
wp.length = sizeof(WINDOWPLACEMENT);
if (::GetWindowPlacement(hwnd, &wp)) {
SaveRegistryInfo(pName, &wp, sizeof(wp));
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnDestroy() {
KillTimer(QE_TIMER0);
SaveBarState("RadiantToolBars2");
// FIXME original mru stuff needs replaced with mfc stuff
SaveMruInReg(g_qeglobals.d_lpMruMenu, "Software\\" EDITOR_REGISTRY_KEY "\\MRU");
DeleteMruMenu(g_qeglobals.d_lpMruMenu);
SaveRegistryInfo("radiant_SavedInfo", &g_qeglobals.d_savedinfo, sizeof(g_qeglobals.d_savedinfo));
SaveWindowPlacement(GetSafeHwnd(), "radiant_MainWindowPlace");
SaveWindowPlacement(m_pXYWnd->GetSafeHwnd(), "radiant_xywindow");
SaveWindowPlacement(m_pXZWnd->GetSafeHwnd(), "radiant_xzwindow");
SaveWindowPlacement(m_pYZWnd->GetSafeHwnd(), "radiant_yzwindow");
SaveWindowPlacement(m_pCamWnd->GetSafeHwnd(), "radiant_camerawindow");
SaveWindowPlacement(m_pZWnd->GetSafeHwnd(), "radiant_zwindow");
SaveWindowState(g_Inspectors->texWnd.GetSafeHwnd(), "radiant_texwindow");
if (m_pXYWnd->GetSafeHwnd()) {
m_pXYWnd->SendMessage(WM_DESTROY, 0, 0);
}
delete m_pXYWnd;
m_pXYWnd = NULL;
if (m_pYZWnd->GetSafeHwnd()) {
m_pYZWnd->SendMessage(WM_DESTROY, 0, 0);
}
delete m_pYZWnd;
m_pYZWnd = NULL;
if (m_pXZWnd->GetSafeHwnd()) {
m_pXZWnd->SendMessage(WM_DESTROY, 0, 0);
}
delete m_pXZWnd;
m_pXZWnd = NULL;
if (m_pZWnd->GetSafeHwnd()) {
m_pZWnd->SendMessage(WM_DESTROY, 0, 0);
}
delete m_pZWnd;
m_pZWnd = NULL;
if (m_pCamWnd->GetSafeHwnd()) {
m_pCamWnd->SendMessage(WM_DESTROY, 0, 0);
}
delete m_pCamWnd;
m_pCamWnd = NULL;
if ( idStr::Icmp(currentmap, "unnamed.map") != 0 ) {
g_PrefsDlg.m_strLastMap = currentmap;
g_PrefsDlg.SavePrefs();
}
CleanUpEntities();
while (active_brushes.next != &active_brushes) {
Brush_Free(active_brushes.next, false);
}
while (selected_brushes.next != &selected_brushes) {
Brush_Free(selected_brushes.next, false);
}
while (filtered_brushes.next != &filtered_brushes) {
Brush_Free(filtered_brushes.next, false);
}
while (entities.next != &entities) {
Entity_Free(entities.next);
}
g_qeglobals.d_project_entity->epairs.Clear();
entity_t *pEntity = g_qeglobals.d_project_entity->next;
while (pEntity != NULL && pEntity != g_qeglobals.d_project_entity) {
entity_t *pNextEntity = pEntity->next;
Entity_Free(pEntity);
pEntity = pNextEntity;
}
Texture_Cleanup();
if (world_entity) {
Entity_Free(world_entity);
}
//
// FIXME: idMaterial
// if (notexture) { // Timo // Surface properties plugin #ifdef _DEBUG if (
// !notexture->pData ) common->Printf("WARNING: found a qtexture_t* with no
// IPluginQTexture\n"); #endif if ( notexture->pData )
// GETPLUGINTEXDEF(notexture)->DecRef(); Mem_Free(notexture); }
// if (current_texture) free(current_texture);
//
// FIXME: idMaterial FreeShaders();
CFrameWnd::OnDestroy();
AfxGetApp()->ExitInstance();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnClose() {
if (ConfirmModified()) {
g_Inspectors->SaveWindowPlacement ();
CFrameWnd::OnClose();
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) {
// run through our list to see if we have a handler for nChar
for (int i = 0; i < g_nCommandCount; i++) {
if (g_Commands[i].m_nKey == nChar) { // find a match?
bool bGo = true;
if (g_Commands[i].m_nModifiers & RAD_PRESS) {
int nModifiers = g_Commands[i].m_nModifiers &~RAD_PRESS;
if (nModifiers) { // are there modifiers present?
if (nModifiers & RAD_ALT) {
if (!(GetAsyncKeyState(VK_MENU) & 0x8000)) {
bGo = false;
}
}
if (nModifiers & RAD_CONTROL) {
if (!(GetAsyncKeyState(VK_CONTROL) & 0x8000)) {
bGo = false;
}
}
if (nModifiers & RAD_SHIFT) {
if (!(GetAsyncKeyState(VK_SHIFT) & 0x8000)) {
bGo = false;
}
}
}
else { // no modifiers make sure none of those keys are pressed
if (GetAsyncKeyState(VK_MENU) & 0x8000) {
bGo = false;
}
if (GetAsyncKeyState(VK_CONTROL) & 0x8000) {
bGo = false;
}
if (GetAsyncKeyState(VK_SHIFT) & 0x8000) {
bGo = false;
}
}
if (bGo) {
SendMessage(WM_COMMAND, g_Commands[i].m_nCommand, 0);
break;
}
}
}
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
bool CamOK(unsigned int nKey) {
if (nKey == VK_UP || nKey == VK_LEFT || nKey == VK_RIGHT || nKey == VK_DOWN) {
if (::GetAsyncKeyState(nKey)) {
return true;
}
else {
return false;
}
}
return true;
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) {
// OnKeyDown(nChar, nRepCnt, nFlags);
if (nChar == VK_DOWN) {
OnKeyDown(nChar, nRepCnt, nFlags);
}
CFrameWnd::OnSysKeyDown(nChar, nRepCnt, nFlags);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) {
for (int i = 0; i < g_nCommandCount; i++) {
if (g_Commands[i].m_nKey == nChar) { // find a match?
// check modifiers
unsigned int nState = 0;
if (GetAsyncKeyState(VK_MENU) & 0x8000) {
nState |= RAD_ALT;
}
if (GetAsyncKeyState(VK_CONTROL) & 0x8000) {
nState |= RAD_CONTROL;
}
if (GetAsyncKeyState(VK_SHIFT) & 0x8000) {
nState |= RAD_SHIFT;
}
if ((g_Commands[i].m_nModifiers & 0x7) == nState) {
SendMessage(WM_COMMAND, g_Commands[i].m_nCommand, 0);
break;
}
}
}
CFrameWnd::OnKeyDown(nChar, nRepCnt, nFlags);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext *pContext) {
g_Inspectors = new CInspectorDialog( this );
g_Inspectors->Create(IDD_DIALOG_INSPECTORS, this);
LoadWindowPlacement(g_Inspectors->GetSafeHwnd(), "radiant_InspectorsWindow");
g_Inspectors->ShowWindow(SW_SHOW);
CRect r;
g_Inspectors->GetWindowRect ( r );
//stupid hack to get the window resize itself properly
r.DeflateRect(0,0,0,1);
g_Inspectors->MoveWindow(r);
r.InflateRect(0,0,0,1);
g_Inspectors->MoveWindow(r);
if (!LoadWindowPlacement(GetSafeHwnd(), "radiant_MainWindowPlace")) {
}
CRect rect(5, 25, 100, 100);
CRect rctParent;
GetClientRect(rctParent);
m_pCamWnd = new CCamWnd();
m_pCamWnd->Create(CAMERA_WINDOW_CLASS, "", QE3_CHILDSTYLE, rect, this, 1234);
m_pZWnd = new CZWnd();
m_pZWnd->Create(Z_WINDOW_CLASS, "", QE3_CHILDSTYLE, rect, this, 1238);
m_pXYWnd = new CXYWnd();
m_pXYWnd->Create(XY_WINDOW_CLASS, "", QE3_CHILDSTYLE, rect, this, 1235);
m_pXYWnd->SetViewType(XY);
m_pXZWnd = new CXYWnd();
m_pXZWnd->Create(XY_WINDOW_CLASS, "", QE3_CHILDSTYLE, rect, this, 1236);
m_pXZWnd->SetViewType(XZ);
m_pYZWnd = new CXYWnd();
m_pYZWnd->Create(XY_WINDOW_CLASS, "", QE3_CHILDSTYLE, rect, this, 1237);
m_pYZWnd->SetViewType(YZ);
m_pCamWnd->SetXYFriend(m_pXYWnd);
CRect rctWork;
LoadWindowPlacement(m_pXYWnd->GetSafeHwnd(), "radiant_xywindow");
LoadWindowPlacement(m_pXZWnd->GetSafeHwnd(), "radiant_xzwindow");
LoadWindowPlacement(m_pYZWnd->GetSafeHwnd(), "radiant_yzwindow");
LoadWindowPlacement(m_pCamWnd->GetSafeHwnd(), "radiant_camerawindow");
LoadWindowPlacement(m_pZWnd->GetSafeHwnd(), "radiant_zwindow");
if (!g_PrefsDlg.m_bXZVis) {
m_pXZWnd->ShowWindow(SW_HIDE);
}
if (!g_PrefsDlg.m_bYZVis) {
m_pYZWnd->ShowWindow(SW_HIDE);
}
if (!g_PrefsDlg.m_bZVis) {
m_pZWnd->ShowWindow(SW_HIDE);
}
CreateQEChildren();
if (m_pXYWnd) {
m_pXYWnd->SetActive(true);
}
Texture_SetMode(g_qeglobals.d_savedinfo.iTexMenu);
g_Inspectors->SetMode(W_CONSOLE);
return TRUE;
}
CRect g_rctOld(0, 0, 0, 0);
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSize(UINT nType, int cx, int cy) {
CFrameWnd::OnSize(nType, cx, cy);
CRect rctParent;
GetClientRect(rctParent);
float scaling_factor = Win_GetWindowScalingFactor(GetSafeHwnd());
UINT nID;
UINT nStyle;
int nWidth;
if (m_wndStatusBar.GetSafeHwnd()) {
m_wndStatusBar.GetPaneInfo( 0, nID, nStyle, nWidth);
m_wndStatusBar.SetPaneInfo( 0, nID, nStyle, rctParent.Width() * 0.15f * scaling_factor);
m_wndStatusBar.GetPaneInfo( 1, nID, nStyle, nWidth);
m_wndStatusBar.SetPaneInfo( 1, nID, nStyle, rctParent.Width() * 0.15f * scaling_factor);
m_wndStatusBar.GetPaneInfo( 2, nID, nStyle, nWidth);
m_wndStatusBar.SetPaneInfo( 2, nID, nStyle, rctParent.Width() * 0.15f * scaling_factor);
m_wndStatusBar.GetPaneInfo( 3, nID, nStyle, nWidth);
m_wndStatusBar.SetPaneInfo( 3, nID, nStyle, rctParent.Width() * 0.39f * scaling_factor);
m_wndStatusBar.GetPaneInfo( 4, nID, nStyle, nWidth);
m_wndStatusBar.SetPaneInfo( 4, nID, nStyle, rctParent.Width() * 0.15f * scaling_factor);
m_wndStatusBar.GetPaneInfo( 5, nID, nStyle, nWidth);
m_wndStatusBar.SetPaneInfo( 5, nID, nStyle, rctParent.Width() * 0.01f * scaling_factor);
}
}
void OpenDialog(void);
void SaveAsDialog(bool bRegion);
void Select_Ungroup();
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::ToggleCamera() {
if (m_bCamPreview) {
m_bCamPreview = false;
}
else {
m_bCamPreview = true;
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnFileClose() {
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnFileExit() {
PostMessage(WM_CLOSE, 0, 0L);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnFileLoadproject() {
if (ConfirmModified()) {
ProjectDialog();
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnFileNew() {
if (ConfirmModified()) {
Map_New();
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnFileOpen() {
if (ConfirmModified()) {
OpenDialog();
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnFilePointfile() {
if (g_qeglobals.d_pointfile_display_list) {
Pointfile_Clear();
}
else {
Pointfile_Check();
}
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnFilePrint() {
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnFilePrintPreview() {
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnFileSave() {
if (!strcmp(currentmap, "unnamed.map")) {
SaveAsDialog(false);
}
else {
Map_SaveFile(currentmap, false);
}
// DHM - _D3XP
SetTimer(QE_TIMER1, g_PrefsDlg.m_nAutoSave * 60 * 1000, NULL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnFileSaveas() {
SaveAsDialog(false);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnFileSaveCopy() {
char aFile[260] = "\0";
char aFilter[260] = "Map\0*.map\0\0";
char aTitle[260] = "Save a Copy\0";
OPENFILENAME afn;
memset( &afn, 0, sizeof(OPENFILENAME) );
CString strPath = ValueForKey(g_qeglobals.d_project_entity, "basepath");
AddSlash(strPath);
strPath += "maps";
if (g_PrefsDlg.m_strMaps.GetLength() > 0) {
strPath += va("\\%s", g_PrefsDlg.m_strMaps.GetString());
}
/* Place the terminating null character in the szFile. */
aFile[0] = '\0';
/* Set the members of the OPENFILENAME structure. */
afn.lStructSize = sizeof(OPENFILENAME);
afn.hwndOwner = g_pParentWnd->GetSafeHwnd();
afn.lpstrFilter = aFilter;
afn.nFilterIndex = 1;
afn.lpstrFile = aFile;
afn.nMaxFile = sizeof(aFile);
afn.lpstrFileTitle = NULL;
afn.nMaxFileTitle = 0;
afn.lpstrInitialDir = strPath;
afn.lpstrTitle = aTitle;
afn.Flags = OFN_SHOWHELP | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_OVERWRITEPROMPT;
/* Display the Open dialog box. */
if (!GetSaveFileName(&afn)) {
return; // canceled
}
DefaultExtension(afn.lpstrFile, ".map");
Map_SaveFile(afn.lpstrFile, false); // ignore region
// Set the title back to the current working map
Sys_SetTitle(currentmap);
}
/*
==================================================================================================
*/
void CMainFrame::OnViewShowModels() {
g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_MODELS;
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnView100() {
if (m_pXYWnd) {
m_pXYWnd->SetScale(1);
}
if (m_pXZWnd) {
m_pXZWnd->SetScale(1);
}
if (m_pYZWnd) {
m_pYZWnd->SetScale(1);
}
Sys_UpdateWindows(W_XY | W_XY_OVERLAY);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewCenter() {
m_pCamWnd->Camera().angles[ROLL] = m_pCamWnd->Camera().angles[PITCH] = 0;
m_pCamWnd->Camera().angles[YAW] = 22.5 * floor((m_pCamWnd->Camera().angles[YAW] + 11) / 22.5);
Sys_UpdateWindows(W_CAMERA | W_XY_OVERLAY);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewConsole() {
g_Inspectors->SetMode(W_CONSOLE);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewDownfloor() {
m_pCamWnd->Cam_ChangeFloor(false);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewEntity() {
g_Inspectors->SetMode(W_ENTITY);
}
void CMainFrame::OnViewMediaBrowser() {
g_Inspectors->SetMode(W_MEDIA);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewFront() {
m_pXYWnd->SetViewType(YZ);
m_pXYWnd->PositionView();
Sys_UpdateWindows(W_XY);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
BOOL DoMru(HWND hWnd,WORD wId)
{
char szFileName[128];
OFSTRUCT of;
BOOL fExist;
GetMenuItem(g_qeglobals.d_lpMruMenu, wId, TRUE, szFileName, sizeof(szFileName));
// Test if the file exists.
fExist = OpenFile(szFileName ,&of,OF_EXIST) != HFILE_ERROR;
if (fExist) {
// Place the file on the top of MRU.
AddNewItem(g_qeglobals.d_lpMruMenu,(LPSTR)szFileName);
// Now perform opening this file !!!
Map_LoadFile (szFileName);
}
else
// Remove the file on MRU.
DelMenuItem(g_qeglobals.d_lpMruMenu,wId,TRUE);
// Refresh the File menu.
PlaceMenuMRUItem(g_qeglobals.d_lpMruMenu,GetSubMenu(GetMenu(hWnd),0),
ID_FILE_EXIT);
return fExist;
}
void CMainFrame::OnMru(unsigned int nID) {
// DHM - _D3XP
if (ConfirmModified()) {
DoMru(GetSafeHwnd(), nID);
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewNearest(unsigned int nID) {
Texture_SetMode(nID);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnTextureWad(unsigned int nID) {
Sys_BeginWait();
// FIXME: idMaterial Texture_ShowDirectory (nID);
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
/*
============
RunBsp
This is the new all-internal bsp
============
*/
void RunBsp (const char *command) {
char system[2048];
char name[2048];
char *in;
// bring the console window forward for feedback
g_Inspectors->SetMode(W_CONSOLE);
// decide if we are doing a .map or a .reg
strcpy (name, currentmap);
if ( region_active ) {
Map_SaveFile (name, false);
StripExtension (name);
strcat (name, ".reg");
}
if ( !Map_SaveFile ( name, region_active ) ) {
return;
}
// name should be a full pathname, but we only
// want to pass the maps/ part to dmap
in = strstr(name, "maps/");
if ( !in ) {
in = strstr(name, "maps\\");
}
if ( !in ) {
in = name;
}
if (idStr::Icmpn(command, "bspext", strlen("runbsp")) == 0) {
PROCESS_INFORMATION ProcessInformation;
STARTUPINFO startupinfo;
char buff[2048];
idStr base = cvarSystem->GetCVarString( "fs_basepath" );
idStr cd = cvarSystem->GetCVarString( "fs_cdpath" );
idStr paths;
if (base.Length()) {
paths += "+set fs_basepath ";
paths += base;
}
if (cd.Length()) {
paths += "+set fs_cdpath ";
paths += cd;
}
::GetModuleFileName(AfxGetApp()->m_hInstance, buff, sizeof(buff));
if (strlen(command) > strlen("bspext")) {
idStr::snPrintf( system, sizeof(system), "%s %s +set r_fullscreen 0 +dmap editorOutput %s %s +quit", buff, paths.c_str(), command + strlen("bspext"), in );
} else {
idStr::snPrintf( system, sizeof(system), "%s %s +set r_fullscreen 0 +dmap editorOutput %s +quit", buff, paths.c_str(), in );
}
::GetStartupInfo (&startupinfo);
if (!CreateProcess(NULL, system, NULL, NULL, FALSE, 0, NULL, NULL, &startupinfo, &ProcessInformation)) {
common->Printf("Could not start bsp process %s %s/n", buff, sys);
}
g_pParentWnd->SetFocus();
} else { // assumes bsp is the command
if (strlen(command) > strlen("bsp")) {
idStr::snPrintf( system, sizeof(system), "dmap %s %s", command + strlen("bsp"), in );
} else {
idStr::snPrintf( system, sizeof(system), "dmap %s", in );
}
cmdSystem->BufferCommandText( CMD_EXEC_NOW, "disconnect\n" );
// issue the bsp command
Dmap_f( idCmdArgs( system, false ) );
}
}
void CMainFrame::OnBspCommand(unsigned int nID) {
if (g_PrefsDlg.m_bSnapShots && stricmp(currentmap, "unnamed.map") != 0) {
Map_Snapshot();
}
RunBsp(bsp_commands[LOWORD(nID - CMD_BSPCOMMAND)]);
// DHM - _D3XP
SetTimer(QE_TIMER1, g_PrefsDlg.m_nAutoSave * 60 * 1000, NULL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewShowblocks() {
g_qeglobals.show_blocks = !(g_qeglobals.show_blocks);
CheckMenuItem
(
::GetMenu(GetSafeHwnd()),
ID_VIEW_SHOWBLOCKS,
MF_BYCOMMAND | (g_qeglobals.show_blocks ? MF_CHECKED : MF_UNCHECKED)
);
Sys_UpdateWindows(W_XY);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewShowclip() {
if ((g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_CLIP) & EXCLUDE_CLIP) {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOWCLIP, MF_BYCOMMAND | MF_UNCHECKED);
}
else {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOWCLIP, MF_BYCOMMAND | MF_CHECKED);
}
Sys_UpdateWindows(W_XY | W_CAMERA);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewShowTriggers() {
if ((g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_TRIGGERS) & EXCLUDE_TRIGGERS) {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOWTRIGGERS, MF_BYCOMMAND | MF_UNCHECKED);
}
else {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOWTRIGGERS, MF_BYCOMMAND | MF_CHECKED);
}
Sys_UpdateWindows(W_XY | W_CAMERA);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewShowcoordinates() {
g_qeglobals.d_savedinfo.show_coordinates ^= 1;
CheckMenuItem
(
::GetMenu(GetSafeHwnd()),
ID_VIEW_SHOWCOORDINATES,
MF_BYCOMMAND | (g_qeglobals.d_savedinfo.show_coordinates ? MF_CHECKED : MF_UNCHECKED)
);
Sys_UpdateWindows(W_XY);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewShowent() {
if ((g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_ENT) & EXCLUDE_ENT) {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOWENT, MF_BYCOMMAND | MF_UNCHECKED);
}
else {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOWENT, MF_BYCOMMAND | MF_CHECKED);
}
Sys_UpdateWindows(W_XY | W_CAMERA);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewShowlights() {
if ((g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_LIGHTS) & EXCLUDE_LIGHTS) {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOWLIGHTS, MF_BYCOMMAND | MF_UNCHECKED);
}
else {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOWLIGHTS, MF_BYCOMMAND | MF_CHECKED);
}
Sys_UpdateWindows(W_XY | W_CAMERA);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewShownames() {
g_qeglobals.d_savedinfo.show_names = !(g_qeglobals.d_savedinfo.show_names);
CheckMenuItem
(
::GetMenu(GetSafeHwnd()),
ID_VIEW_SHOWNAMES,
MF_BYCOMMAND | (g_qeglobals.d_savedinfo.show_names ? MF_CHECKED : MF_UNCHECKED)
);
Map_BuildBrushData();
Sys_UpdateWindows(W_XY);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewShowpath() {
if ((g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_PATHS) & EXCLUDE_PATHS) {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOWPATH, MF_BYCOMMAND | MF_UNCHECKED);
}
else {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOWPATH, MF_BYCOMMAND | MF_CHECKED);
}
Sys_UpdateWindows(W_XY | W_CAMERA);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewShowCombatNodes() {
if ((g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_COMBATNODES) & EXCLUDE_COMBATNODES) {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOWCOMBATNODES, MF_BYCOMMAND | MF_UNCHECKED);
}
else {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOWCOMBATNODES, MF_BYCOMMAND | MF_CHECKED);
}
Sys_UpdateWindows(W_XY | W_CAMERA);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewShowwater() {
if ((g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_DYNAMICS) & EXCLUDE_DYNAMICS) {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOWWATER, MF_BYCOMMAND | MF_UNCHECKED);
}
else {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOWWATER, MF_BYCOMMAND | MF_CHECKED);
}
Sys_UpdateWindows(W_XY | W_CAMERA);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewShowworld() {
if ((g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_WORLD) & EXCLUDE_WORLD) {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOWWORLD, MF_BYCOMMAND | MF_UNCHECKED);
}
else {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOWWORLD, MF_BYCOMMAND | MF_CHECKED);
}
Sys_UpdateWindows(W_XY | W_CAMERA);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewTexture() {
g_Inspectors->SetMode(W_TEXTURE);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewUpfloor() {
m_pCamWnd->Cam_ChangeFloor(true);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewXy() {
m_pXYWnd->SetViewType(XY);
m_pXYWnd->PositionView();
Sys_UpdateWindows(W_XY);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewZ100() {
z.scale = 1;
Sys_UpdateWindows(W_Z | W_Z_OVERLAY);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewZoomin() {
if ( m_pXYWnd && m_pXYWnd->Active() ) {
m_pXYWnd->SetScale( m_pXYWnd->Scale() * 5.0f / 4.0f );
if ( m_pXYWnd->Scale() > 256.0f ) {
m_pXYWnd->SetScale( 256.0f );
}
}
if ( m_pXZWnd && m_pXZWnd->Active() ) {
m_pXZWnd->SetScale( m_pXZWnd->Scale() * 5.0f / 4.0f );
if ( m_pXZWnd->Scale() > 256.0f ) {
m_pXZWnd->SetScale( 256.0f );
}
}
if ( m_pYZWnd && m_pYZWnd->Active() ) {
m_pYZWnd->SetScale( m_pYZWnd->Scale() * 5.0f / 4.0f );
if ( m_pYZWnd->Scale() > 256.0f ) {
m_pYZWnd->SetScale( 256.0f );
}
}
Sys_UpdateWindows( W_XY | W_XY_OVERLAY );
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewZoomout() {
if ( m_pXYWnd && m_pXYWnd->Active() ) {
m_pXYWnd->SetScale( m_pXYWnd->Scale() * 4.0f / 5.0f );
if ( m_pXYWnd->Scale() < 0.1f / 32.0f ) {
m_pXYWnd->SetScale( 0.1f / 32.0f );
}
}
if ( m_pXZWnd && m_pXZWnd->Active() ) {
m_pXZWnd->SetScale( m_pXZWnd->Scale() * 4.0f / 5.0f );
if ( m_pXZWnd->Scale() < 0.1f / 32.0f ) {
m_pXZWnd->SetScale( 0.1f / 32.0f );
}
}
if ( m_pYZWnd && m_pYZWnd->Active() ) {
m_pYZWnd->SetScale( m_pYZWnd->Scale() * 4.0f / 5.0f );
if ( m_pYZWnd->Scale() < 0.1f / 32.0f ) {
m_pYZWnd->SetScale( 0.1f / 32.0f );
}
}
Sys_UpdateWindows(W_XY | W_XY_OVERLAY);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewZzoomin() {
z.scale *= 5.0f / 4.0f;
if ( z.scale > 4.0f ) {
z.scale = 4.0f;
}
Sys_UpdateWindows(W_Z | W_Z_OVERLAY);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewZzoomout() {
z.scale *= 4.0f / 5.0f;
if ( z.scale < 0.125f ) {
z.scale = 0.125f;
}
Sys_UpdateWindows(W_Z | W_Z_OVERLAY);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewSide() {
m_pXYWnd->SetViewType(XZ);
m_pXYWnd->PositionView();
Sys_UpdateWindows(W_XY);
}
static void UpdateGrid(void)
{
// g_qeglobals.d_gridsize = 1 << g_qeglobals.d_gridsize;
if (g_PrefsDlg.m_bSnapTToGrid) {
g_qeglobals.d_savedinfo.m_nTextureTweak = g_qeglobals.d_gridsize;
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnGrid1(unsigned int nID) {
switch (nID)
{
case ID_GRID_1:
g_qeglobals.d_gridsize = 1;
break;
case ID_GRID_2:
g_qeglobals.d_gridsize = 2;
break;
case ID_GRID_4:
g_qeglobals.d_gridsize = 4;
break;
case ID_GRID_8:
g_qeglobals.d_gridsize = 8;
break;
case ID_GRID_16:
g_qeglobals.d_gridsize = 16;
break;
case ID_GRID_32:
g_qeglobals.d_gridsize = 32;
break;
case ID_GRID_64:
g_qeglobals.d_gridsize = 64;
break;
case ID_GRID_POINT5:
g_qeglobals.d_gridsize = 0.5f;
break;
case ID_GRID_POINT25:
g_qeglobals.d_gridsize = 0.25f;
break;
case ID_GRID_POINT125:
g_qeglobals.d_gridsize = 0.125f;
break;
//case ID_GRID_POINT0625:
// g_qeglobals.d_gridsize = 0.0625f;
// break;
}
UpdateGrid();
SetGridStatus();
SetGridChecks(nID);
Sys_UpdateWindows(W_XY | W_Z);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnTexturesShowinuse() {
Sys_BeginWait();
Texture_ShowInuse();
g_Inspectors->texWnd.RedrawWindow();
}
// from TexWnd.cpp
extern bool texture_showinuse;
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnUpdateTexturesShowinuse(CCmdUI *pCmdUI) {
pCmdUI->SetCheck(texture_showinuse);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnTexturesInspector() {
DoSurface();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnMiscFindbrush() {
DoFind();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnMiscGamma() {
float fSave = g_qeglobals.d_savedinfo.fGamma;
DoGamma();
if (fSave != g_qeglobals.d_savedinfo.fGamma) {
MessageBox("You must restart Q3Radiant for Gamma settings to take place");
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnMiscNextleakspot() {
Pointfile_Next();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnMiscPreviousleakspot() {
Pointfile_Prev();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnMiscPrintxy() {
WXY_Print();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void UpdateRadiantColor( float r, float g, float b, float a ) {
if ( g_pParentWnd ) {
g_pParentWnd->RoutineProcessing();
}
}
bool DoColor( int iIndex ) {
COLORREF cr = (int)(g_qeglobals.d_savedinfo.colors[iIndex][0]*255) +
(((int)(g_qeglobals.d_savedinfo.colors[iIndex][1]*255))<<8) +
(((int)(g_qeglobals.d_savedinfo.colors[iIndex][2]*255))<<16);
CDialogColorPicker dlg(cr);
dlg.UpdateParent = UpdateRadiantColor;
if ( dlg.DoModal() == IDOK ) {
g_qeglobals.d_savedinfo.colors[iIndex][0] = (dlg.GetColor() & 255)/255.0;
g_qeglobals.d_savedinfo.colors[iIndex][1] = ((dlg.GetColor() >> 8)&255)/255.0;
g_qeglobals.d_savedinfo.colors[iIndex][2] = ((dlg.GetColor() >> 16)&255)/255.0;
Sys_UpdateWindows (W_ALL);
return true;
} else {
return false;
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
extern void Select_SetKeyVal(const char *key, const char *val);
void CMainFrame::OnMiscSelectentitycolor() {
entity_t *ent = NULL;
if (QE_SingleBrush(true, true)) {
ent = selected_brushes.next->owner;
CString strColor = ValueForKey(ent, "_color");
if (strColor.GetLength() > 0) {
float fR, fG, fB;
int n = sscanf(strColor, "%f %f %f", &fR, &fG, &fB);
if (n == 3) {
g_qeglobals.d_savedinfo.colors[COLOR_ENTITY][0] = fR;
g_qeglobals.d_savedinfo.colors[COLOR_ENTITY][1] = fG;
g_qeglobals.d_savedinfo.colors[COLOR_ENTITY][2] = fB;
}
}
}
if (DoColor(COLOR_ENTITY)) {
char buffer[100];
sprintf(buffer, "%f %f %f", g_qeglobals.d_savedinfo.colors[COLOR_ENTITY][0], g_qeglobals.d_savedinfo.colors[COLOR_ENTITY][1],g_qeglobals.d_savedinfo.colors[COLOR_ENTITY][2]);
Select_SetKeyVal("_color", buffer);
if (ent) {
g_Inspectors->UpdateEntitySel(ent->eclass);
}
Sys_UpdateWindows(W_ALL);
}
}
CString strFindKey;
CString strFindValue;
CString strReplaceKey;
CString strReplaceValue;
bool gbWholeStringMatchOnly = true;
bool gbSelectAllMatchingEnts= false;
brush_t* gpPrevEntBrushFound = NULL;
// all this because there's no ansi stristr(), sigh...
//
LPCSTR String_ToLower(LPCSTR psString)
{
const int iBufferSize = 4096;
static char sString[8][iBufferSize];
static int iIndex=0;
if (strlen(psString)>=iBufferSize)
{
assert(0);
common->Printf("String_ToLower(): Warning, input string was %d bytes too large, performing strlwr() inline!\n",strlen(psString)-(iBufferSize-1));
return strlwr(const_cast(psString));
}
iIndex = ++ iIndex & 7;
strcpy(sString[iIndex],psString);
strlwr(sString[iIndex]);
return sString[iIndex];
}
bool FindNextBrush(brush_t* pPrevFoundBrush) // can be NULL for fresh search
{
bool bFoundSomething = false;
entity_t *pLastFoundEnt = NULL;
brush_t *pLastFoundBrush = NULL;
CWaitCursor waitcursor;
Select_Deselect(true); // bool bDeSelectToListBack
// see whether to start search from prev_brush->next by checking if prev_brush is still in the active list...
//
brush_t *pStartBrush = active_brushes.next;
if (pPrevFoundBrush && !gbSelectAllMatchingEnts)
{
brush_t *pPrev = NULL;
for (brush_t* b = active_brushes.next ; b != &active_brushes ; b = b->next)
{
if (pPrev == pPrevFoundBrush && pPrevFoundBrush)
{
pStartBrush = b;
break;
}
pPrev = b;
}
}
// now do the search proper...
//
int iBrushesScanned = 0;
int iBrushesSelected=0;
int iEntsScanned = 0;
brush_t* pNextBrush;
for (brush_t* b = pStartBrush; b != &active_brushes ; b = pNextBrush)
{
// setup the ptr before going any further (because selecting a brush down below moves it to a
// different link list), but we need to ensure that the next brush has a different ent-owner than the current
// one, or multi-brush ents will confuse the list process if they get selected (infinite loop badness)...
//
// pNextBrush = &active_brushes; // default to loop-stop condition
pNextBrush = b->next;
while (pNextBrush->owner == b->owner && pNextBrush!=&active_brushes)
{
pNextBrush = pNextBrush->next;
}
iBrushesScanned++;
// a simple progress bar so they don't think it's locked up on long searches...
//
static int iDotBodge=0;
if (!(++iDotBodge&15))
common->Printf("."); // cut down on printing
bool bMatch = false;
entity_t* ent = b->owner;
if (ent && ent!= world_entity) // needed!
{
iEntsScanned++;
if (FilterBrush (b))
continue;
// only check the find-key if there was one specified...
//
if (!strFindKey.IsEmpty())
{
const char *psEntFoundValue = ValueForKey(ent, strFindKey);
if (strlen(psEntFoundValue)
&&
(
// (stricmp(strFindValue, psEntFoundValue)==0) // found this exact key/value
(
(gbWholeStringMatchOnly && stricmp(psEntFoundValue, strFindValue)==0)
||
(!gbWholeStringMatchOnly && strstr(String_ToLower(psEntFoundValue), String_ToLower(strFindValue)))
)
|| // or
(strFindValue.IsEmpty()) // any value for this key if blank value search specified
)
)
{
bMatch = true;
}
}
else
{
// no FIND key specified, so just scan all of them...
//
int iNumEntKeys = GetNumKeys(ent);
for (int i=0; i search specified then any found-value is ok
||
(gbWholeStringMatchOnly && stricmp(psEntFoundValue, strFindValue)==0)
||
(!gbWholeStringMatchOnly && strstr(String_ToLower(psEntFoundValue), String_ToLower(strFindValue)))
)
{
if (!gbWholeStringMatchOnly && strstr(String_ToLower(psEntFoundValue), String_ToLower(strFindValue)))
{
// OutputDebugString(va("Matching because: psEntFoundValue '%s' & strFindValue '%s'\n",psEntFoundValue, strFindValue));
// Sys_Printf("Matching because: psEntFoundValue '%s' & strFindValue '%s'\n",psEntFoundValue, strFindValue);
// if (strstr(psEntFoundValue,"killsplat"))
// {
// DebugBreak();
// }
}
bMatch = true;
break;
}
}
}
}
if (bMatch)
{
bFoundSomething = true;
pLastFoundEnt = ent;
pLastFoundBrush = b;
iBrushesSelected++;
g_bScreenUpdates = false; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!
Select_Brush(b);
g_bScreenUpdates = true; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!
if (!gbSelectAllMatchingEnts)
break;
}
}
}
if (gbSelectAllMatchingEnts)
{
common->Printf("\nBrushes Selected: %d (Brushes Scanned %d, Ents Scanned %d)\n", iBrushesSelected, iBrushesScanned, iEntsScanned);
}
if (bFoundSomething)
{
idVec3 v3Origin;
if (pLastFoundEnt->origin[0] != 0.0f || pLastFoundEnt->origin[1] != 0.0f || pLastFoundEnt->origin[2] != 0.0f)
{
VectorCopy(pLastFoundEnt->origin,v3Origin);
}
else
{
// pLastFoundEnt's origin is zero, so use average point of brush mins maxs instead...
//
v3Origin[0] = (pLastFoundBrush->mins[0] + pLastFoundBrush->maxs[0])/2;
v3Origin[1] = (pLastFoundBrush->mins[1] + pLastFoundBrush->maxs[1])/2;
v3Origin[2] = (pLastFoundBrush->mins[2] + pLastFoundBrush->maxs[2])/2;
}
// got one, jump the camera to it...
//
VectorCopy(v3Origin, g_pParentWnd->GetCamera()->Camera().origin);
g_pParentWnd->GetCamera()->Camera().origin[1] -= 32; // back off a touch to look at it
g_pParentWnd->GetCamera()->Camera().angles[0] = 0;
g_pParentWnd->GetCamera()->Camera().angles[1] = 90;
g_pParentWnd->GetCamera()->Camera().angles[2] = 0;
// force main screen into XY camera mode (just in case)...
//
g_pParentWnd->SetActiveXY(g_pParentWnd->GetXYWnd());
g_pParentWnd->GetXYWnd()->PositionView();
Sys_UpdateWindows (W_ALL);
//
// and record for next find request (F3)...
//
gpPrevEntBrushFound = pLastFoundBrush;
}
return bFoundSomething;
}
void CMainFrame::OnMiscFindOrReplaceEntity()
{
CEntKeyFindReplace FindReplace(&strFindKey, &strFindValue, &strReplaceKey, &strReplaceValue, &gbWholeStringMatchOnly, &gbSelectAllMatchingEnts);
switch (FindReplace.DoModal())
{
case ID_RET_REPLACE:
{
brush_t* next = NULL;
int iOccurences = 0;
for (brush_t* b = active_brushes.next ; b != &active_brushes ; b = next)
{
next = b->next; // important to do this here, in case brush gets linked to a different list
entity_t* ent = b->owner;
if (ent) // needed!
{
if (FilterBrush (b))
continue;
const char *psEntFoundValue = ValueForKey(ent, strFindKey);
if (stricmp(strFindValue, psEntFoundValue)==0 || // found this exact key/value
(strlen(psEntFoundValue) && strFindValue.IsEmpty()) // or any value for this key if blank value search specified
)
{
// found this search key/value, so delete it...
//
DeleteKey(ent,strFindKey);
//
// and replace with the new key/value (if specified)...
//
if (!strReplaceKey.IsEmpty() && !strReplaceValue.IsEmpty())
{
SetKeyValue (ent, strReplaceKey, strReplaceValue);
}
iOccurences++;
}
}
}
if (iOccurences)
{
common->Printf("%d occurence(s) replaced\n",iOccurences);
}
else
{
common->Printf("Nothing found to replace\n");
}
}
break;
case ID_RET_FIND:
{
gpPrevEntBrushFound = NULL;
FindNextBrush(NULL);
}
break;
}
}
void CMainFrame::OnMiscFindNextEntity()
{
// try it once, if it fails, try it again from top, and give up if still failed after that...
//
if (!FindNextBrush(gpPrevEntBrushFound))
{
gpPrevEntBrushFound = NULL;
FindNextBrush(NULL);
}
}
void CMainFrame::OnMiscSetViewPos()
{
CString psNewCoords = GetString("Input coords (x y z [rot])\n\nUse spaces to seperate numbers");
if (!psNewCoords.IsEmpty())
{
idVec3 v3Viewpos;
float fYaw = 0;
psNewCoords.Remove(',');
int iArgsFound = sscanf(psNewCoords,"%f %f %f",&v3Viewpos[0], &v3Viewpos[1], &v3Viewpos[2]);
if (iArgsFound == 3)
{
// try for an optional 4th (note how this wasn't part of the sscanf() above, so I can check 1st-3, not just any 3)
iArgsFound = sscanf(psNewCoords,"%f %f %f %f", &v3Viewpos[0], &v3Viewpos[1], &v3Viewpos[2], &fYaw);
if (iArgsFound != 4)
{
fYaw = 0; // jic
}
g_pParentWnd->GetCamera()->Camera().angles[YAW] = fYaw;
VectorCopy (v3Viewpos, g_pParentWnd->GetCamera()->Camera().origin);
VectorCopy (v3Viewpos, g_pParentWnd->GetXYWnd()->GetOrigin());
Sys_UpdateWindows (W_ALL);
}
else
{
ErrorBox(va("\"%s\" wasn't 3 valid floats with spaces",psNewCoords.GetString()));
}
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnTexturebk() {
DoColor(COLOR_TEXTUREBACK);
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnColorsMajor() {
DoColor(COLOR_GRIDMAJOR);
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnColorsMinor() {
DoColor(COLOR_GRIDMINOR);
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnColorsXybk() {
DoColor(COLOR_GRIDBACK);
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnBrush3sided() {
Undo_Start("3 sided");
Undo_AddBrushList(&selected_brushes);
Brush_MakeSided(3);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnBrush4sided() {
Undo_Start("4 sided");
Undo_AddBrushList(&selected_brushes);
Brush_MakeSided(4);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnBrush5sided() {
Undo_Start("5 sided");
Undo_AddBrushList(&selected_brushes);
Brush_MakeSided(5);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnBrush6sided() {
Undo_Start("6 sided");
Undo_AddBrushList(&selected_brushes);
Brush_MakeSided(6);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnBrush7sided() {
Undo_Start("7 sided");
Undo_AddBrushList(&selected_brushes);
Brush_MakeSided(7);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnBrush8sided() {
Undo_Start("8 sided");
Undo_AddBrushList(&selected_brushes);
Brush_MakeSided(8);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnBrush9sided() {
Undo_Start("9 sided");
Undo_AddBrushList(&selected_brushes);
Brush_MakeSided(9);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnBrushArbitrarysided() {
Undo_Start("arbitrary sided");
Undo_AddBrushList(&selected_brushes);
DoSides();
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnBrushFlipx() {
Undo_Start("flip X");
Undo_AddBrushList(&selected_brushes);
Select_FlipAxis(0);
for (brush_t * b = selected_brushes.next; b != &selected_brushes; b = b->next) {
if (b->owner->eclass->fixedsize) {
char buf[16];
float a = FloatForKey(b->owner, "angle");
a = div((180 - a), 180).rem;
SetKeyValue(b->owner, "angle", itoa(a, buf, 10));
Brush_Build(b);
}
}
Patch_ToggleInverted();
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnBrushFlipy() {
Undo_Start("flip Y");
Undo_AddBrushList(&selected_brushes);
Select_FlipAxis(1);
for (brush_t * b = selected_brushes.next; b != &selected_brushes; b = b->next) {
if (b->owner->eclass->fixedsize) {
float a = FloatForKey(b->owner, "angle");
if (a == 0 || a == 180 || a == 360) {
continue;
}
if (a == 90 || a == 270) {
a += 180;
}
else if (a > 270) {
a += 90;
}
else if (a > 180) {
a -= 90;
}
else if (a > 90) {
a += 90;
}
else {
a -= 90;
}
a = (int)a % 360;
char buf[16];
SetKeyValue(b->owner, "angle", itoa(a, buf, 10));
Brush_Build(b);
}
}
Patch_ToggleInverted();
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnBrushFlipz() {
Undo_Start("flip Z");
Undo_AddBrushList(&selected_brushes);
Select_FlipAxis(2);
Patch_ToggleInverted();
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnBrushRotatex() {
Undo_Start("rotate X");
Undo_AddBrushList(&selected_brushes);
Select_RotateAxis(0, 90);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnBrushRotatey() {
Undo_Start("rotate Y");
Undo_AddBrushList(&selected_brushes);
Select_RotateAxis(1, 90);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnBrushRotatez() {
Undo_Start("rotate Z");
Undo_AddBrushList(&selected_brushes);
Select_RotateAxis(2, 90);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnRegionOff() {
Map_RegionOff();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnRegionSetbrush() {
Map_RegionBrush();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnRegionSetselection() {
Map_RegionSelectedBrushes();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnRegionSettallbrush() {
Map_RegionTallBrush();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnRegionSetxy() {
Map_RegionXY();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionArbitraryrotation() {
// if (ActiveXY()) ActiveXY()->UndoCopy();
Undo_Start("arbitrary rotation");
Undo_AddBrushList(&selected_brushes);
CRotateDlg dlg;
dlg.DoModal();
// DoRotate ();
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionClone() {
// if (ActiveXY()) ActiveXY()->UndoCopy();
Select_Clone();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionConnect() {
ConnectEntities();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionMakehollow() {
// if (ActiveXY()) ActiveXY()->UndoCopy();
Undo_Start("hollow");
Undo_AddBrushList(&selected_brushes);
CSG_MakeHollow();
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionCsgsubtract() {
// if (ActiveXY()) ActiveXY()->UndoCopy();
Undo_Start("CSG subtract");
CSG_Subtract();
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionCsgmerge() {
// if (ActiveXY()) ActiveXY()->UndoCopy();
Undo_Start("CSG merge");
Undo_AddBrushList(&selected_brushes);
CSG_Merge();
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionDelete() {
brush_t *brush;
// if (ActiveXY()) ActiveXY()->UndoCopy();
Undo_Start("delete");
Undo_AddBrushList(&selected_brushes);
// add all deleted entities to the undo
for (brush = selected_brushes.next; brush != &selected_brushes; brush = brush->next) {
Undo_AddEntity(brush->owner);
}
// NOTE: Select_Delete does NOT delete entities
Select_Delete();
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionDeselect() {
if (!ByeByeSurfaceDialog()) {
if (g_bClipMode) {
OnViewClipper();
} else if (g_bRotateMode) {
OnSelectMouserotate();
} else if (g_bScaleMode) {
OnSelectMousescale();
} else if (g_bPathMode) {
if (ActiveXY()) {
ActiveXY()->KillPathMode();
}
} else if (g_bAxialMode) {
g_bAxialMode = false;
Sys_UpdateWindows(W_CAMERA);
} else {
if (g_qeglobals.d_select_mode == sel_curvepoint && g_qeglobals.d_num_move_points > 0) {
g_qeglobals.d_num_move_points = 0;
Sys_UpdateWindows(W_ALL);
} else {
Select_Deselect();
SetStatusText(2, " ");
}
}
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionDragedges() {
if (g_qeglobals.d_select_mode == sel_edge) {
g_qeglobals.d_select_mode = sel_brush;
Sys_UpdateWindows(W_ALL);
}
else {
SetupVertexSelection();
if (g_qeglobals.d_numpoints) {
g_qeglobals.d_select_mode = sel_edge;
}
Sys_UpdateWindows(W_ALL);
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionDragvertecies() {
if (g_qeglobals.d_select_mode == sel_vertex || g_qeglobals.d_select_mode == sel_curvepoint) {
g_qeglobals.d_select_mode = sel_brush;
Sys_UpdateWindows(W_ALL);
}
else {
// --if (QE_SingleBrush() && selected_brushes.next->patchBrush)
if (OnlyPatchesSelected()) {
Patch_EditPatch();
}
else if (!AnyPatchesSelected()) {
SetupVertexSelection();
if (g_qeglobals.d_numpoints) {
g_qeglobals.d_select_mode = sel_vertex;
}
}
Sys_UpdateWindows(W_ALL);
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionCenterOrigin() {
Undo_Start("center origin");
Undo_AddBrushList(&selected_brushes);
Select_CenterOrigin();
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionSelectcompletetall() {
//if (ActiveXY()) {
// ActiveXY()->UndoCopy();
//}
Select_CompleteTall();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionSelectinside() {
Select_Inside();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionSelectpartialtall() {
Select_PartialTall();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionSelecttouching() {
Select_Touching();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionUngroupentity() {
Select_Ungroup();
}
void CMainFrame::OnAutocaulk()
{
Select_AutoCaulk();
}
void CMainFrame::OnUpdateAutocaulk(CCmdUI* pCmdUI)
{
pCmdUI->Enable( selected_brushes.next != &selected_brushes);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnTexturesPopup() {
HandlePopup(this, IDR_POPUP_TEXTURE);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSplinesPopup() {
HandlePopup(this, IDR_POPUP_SPLINE);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnPopupSelection() {
HandlePopup(this, IDR_POPUP_SELECTION);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewChange() {
OnViewNextview();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewCameraupdate() {
g_qeglobals.flatRotation++;
if (g_qeglobals.flatRotation > 2) {
g_qeglobals.flatRotation = 0;
}
if (g_qeglobals.flatRotation) {
g_qeglobals.rotateAxis = 0;
if (ActiveXY()->GetViewType() == XY) {
g_qeglobals.rotateAxis = 2;
} else if (ActiveXY()->GetViewType() == XZ) {
g_qeglobals.rotateAxis = 1;
}
}
Select_InitializeRotation();
Sys_UpdateWindows(W_CAMERA | W_XY);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSizing(UINT fwSide, LPRECT pRect) {
CFrameWnd::OnSizing(fwSide, pRect);
GetClientRect(g_rctOld);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnHelpAbout() {
DoAbout();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewClipper() {
if (ActiveXY()) {
if (ActiveXY()->ClipMode()) {
ActiveXY()->SetClipMode(false);
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_VIEW_CLIPPER, FALSE);
}
else {
if (ActiveXY()->RotateMode()) {
OnSelectMouserotate();
}
ActiveXY()->SetClipMode(true);
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_VIEW_CLIPPER);
}
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCameraAngledown() {
m_pCamWnd->Camera().angles[0] -= SPEED_TURN;
if (m_pCamWnd->Camera().angles[0] < -85) {
m_pCamWnd->Camera().angles[0] = -85;
}
Sys_UpdateWindows(W_CAMERA | W_XY_OVERLAY);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCameraAngleup() {
m_pCamWnd->Camera().angles[0] += SPEED_TURN;
if (m_pCamWnd->Camera().angles[0] > 85) {
m_pCamWnd->Camera().angles[0] = 85;
}
Sys_UpdateWindows(W_CAMERA | W_XY_OVERLAY);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCameraBack() {
VectorMA(m_pCamWnd->Camera().origin, -SPEED_MOVE, m_pCamWnd->Camera().forward, m_pCamWnd->Camera().origin);
int nUpdate = (g_PrefsDlg.m_bCamXYUpdate) ? (W_CAMERA | W_XY) : (W_CAMERA);
Sys_UpdateWindows(nUpdate);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCameraDown() {
m_pCamWnd->Camera().origin[2] -= SPEED_MOVE;
Sys_UpdateWindows(W_CAMERA | W_XY | W_Z);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCameraForward() {
VectorMA(m_pCamWnd->Camera().origin, SPEED_MOVE, m_pCamWnd->Camera().forward, m_pCamWnd->Camera().origin);
int nUpdate = (g_PrefsDlg.m_bCamXYUpdate) ? (W_CAMERA | W_XY) : (W_CAMERA);
Sys_UpdateWindows(nUpdate);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCameraLeft() {
m_pCamWnd->Camera().angles[1] += SPEED_TURN;
int nUpdate = (g_PrefsDlg.m_bCamXYUpdate) ? (W_CAMERA | W_XY) : (W_CAMERA);
Sys_UpdateWindows(nUpdate);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCameraRight() {
m_pCamWnd->Camera().angles[1] -= SPEED_TURN;
int nUpdate = (g_PrefsDlg.m_bCamXYUpdate) ? (W_CAMERA | W_XY) : (W_CAMERA);
Sys_UpdateWindows(nUpdate);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCameraStrafeleft() {
VectorMA(m_pCamWnd->Camera().origin, -SPEED_MOVE, m_pCamWnd->Camera().right, m_pCamWnd->Camera().origin);
int nUpdate = (g_PrefsDlg.m_bCamXYUpdate) ? (W_CAMERA | W_XY) : (W_CAMERA);
Sys_UpdateWindows(nUpdate);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCameraStraferight() {
VectorMA(m_pCamWnd->Camera().origin, SPEED_MOVE, m_pCamWnd->Camera().right, m_pCamWnd->Camera().origin);
int nUpdate = (g_PrefsDlg.m_bCamXYUpdate) ? (W_CAMERA | W_XY) : (W_CAMERA);
Sys_UpdateWindows(nUpdate);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCameraUp() {
m_pCamWnd->Camera().origin[2] += SPEED_MOVE;
Sys_UpdateWindows(W_CAMERA | W_XY | W_Z);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnGridToggle() {
g_qeglobals.d_showgrid ^= 1;
Sys_UpdateWindows(W_XY | W_Z);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnPrefs() {
BOOL bToolbar = g_PrefsDlg.m_bWideToolbar;
g_PrefsDlg.LoadPrefs();
if (g_PrefsDlg.DoModal() == IDOK) {
if (g_PrefsDlg.m_bWideToolbar != bToolbar) {
MessageBox("You need to restart Q3Radiant for the view changes to take place.");
}
g_Inspectors->texWnd.UpdatePrefs();
CMenu *pMenu = GetMenu();
if (pMenu) {
pMenu->CheckMenuItem(ID_SNAPTOGRID, MF_BYCOMMAND | (!g_PrefsDlg.m_bNoClamp) ? MF_CHECKED : MF_UNCHECKED);
}
}
}
//
// =======================================================================================================================
// 0 = radiant styel 1 = qe4 style
// =======================================================================================================================
//
void CMainFrame::SetWindowStyle(int nStyle) {
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnTogglecamera() {
if (m_pCamWnd->IsWindowVisible()) {
m_pCamWnd->ShowWindow(SW_HIDE);
} else {
m_pCamWnd->ShowWindow(SW_SHOW);
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnToggleview() {
if (m_pXYWnd && m_pXYWnd->GetSafeHwnd()) {
if (m_pXYWnd->IsWindowVisible()) {
m_pXYWnd->ShowWindow(SW_HIDE);
} else {
m_pXYWnd->ShowWindow(SW_SHOW);
}
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnTogglez() {
if (m_pZWnd && m_pZWnd->GetSafeHwnd()) {
if (m_pZWnd->IsWindowVisible()) {
m_pZWnd->ShowWindow(SW_HIDE);
} else {
m_pZWnd->ShowWindow(SW_SHOW);
}
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnToggleLock() {
g_PrefsDlg.m_bTextureLock = !g_PrefsDlg.m_bTextureLock;
CMenu *pMenu = GetMenu();
if (pMenu) {
pMenu->CheckMenuItem(ID_TOGGLE_LOCK, MF_BYCOMMAND | (g_PrefsDlg.m_bTextureLock) ? MF_CHECKED : MF_UNCHECKED);
}
g_PrefsDlg.SavePrefs();
SetGridStatus();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnEditMapinfo() {
CMapInfo dlg;
dlg.DoModal();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnEditEntityinfo() {
CEntityListDlg::ShowDialog();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewNextview() {
if (m_pXYWnd->GetViewType() == XY) {
m_pXYWnd->SetViewType(XZ);
}
else if (m_pXYWnd->GetViewType() == XZ) {
m_pXYWnd->SetViewType(YZ);
}
else {
m_pXYWnd->SetViewType(XY);
}
m_pXYWnd->PositionView();
if (g_qeglobals.flatRotation) {
g_qeglobals.rotateAxis = 0;
if (ActiveXY()->GetViewType() == XY) {
g_qeglobals.rotateAxis = 2;
} else if (ActiveXY()->GetViewType() == XZ) {
g_qeglobals.rotateAxis = 1;
}
}
Sys_UpdateWindows(W_XY | W_CAMERA);
}
/* Begin SS2 Changes */
void CMainFrame::OnSetViewTop() {
if (m_pXYWnd->GetViewType() != XY) {
m_pXYWnd->SetViewType(XY);
m_pXYWnd->PositionView();
if (g_qeglobals.flatRotation) {
g_qeglobals.rotateAxis = 2;
}
Sys_UpdateWindows(W_XY | W_CAMERA);
}
}
void CMainFrame::OnSetViewSide() {
if (m_pXYWnd->GetViewType() != YZ) {
m_pXYWnd->SetViewType(YZ);
m_pXYWnd->PositionView();
if (g_qeglobals.flatRotation) {
g_qeglobals.rotateAxis = 0;
}
Sys_UpdateWindows(W_XY | W_CAMERA);
}
}
void CMainFrame::OnSetViewFront() {
if (m_pXYWnd->GetViewType() != XZ) {
m_pXYWnd->SetViewType(XZ);
m_pXYWnd->PositionView();
if (g_qeglobals.flatRotation) {
g_qeglobals.rotateAxis = 1;
}
Sys_UpdateWindows(W_XY | W_CAMERA);
}
}
/* End SS2 Changes */
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnHelpCommandlist() {
CCommandsDlg dlg;
dlg.DoModal();
#if 0
if (g_b3Dfx) {
C3DFXCamWnd *pWnd = new C3DFXCamWnd();
CRect rect(50, 50, 400, 400);
pWnd->Create(_3DFXCAMERA_WINDOW_CLASS, "", QE3_CHILDSTYLE, rect, this, 1234);
pWnd->ShowWindow(SW_SHOW);
}
#endif
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnFileNewproject()
{
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::UpdateStatusText() {
for (int n = 0; n < 6; n++) {
if (m_strStatus[n].GetLength() >= 0 && m_wndStatusBar.GetSafeHwnd()) {
m_wndStatusBar.SetPaneText(n, m_strStatus[n]);
}
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::SetStatusText(int nPane, const char *pText) {
if (pText && nPane <= 5 && nPane >= 0) {
m_strStatus[nPane] = pText;
UpdateStatusText();
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::UpdateWindows(int nBits) {
if (!g_bScreenUpdates) {
return;
}
if (nBits & (W_XY | W_XY_OVERLAY)) {
if (m_pXYWnd) {
m_pXYWnd->RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW);
}
if (m_pXZWnd) {
m_pXZWnd->RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW);
}
if (m_pYZWnd) {
m_pYZWnd->RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW);
}
}
if (nBits & W_CAMERA || ((nBits & W_CAMERA_IFON) && m_bCamPreview)) {
if (m_pCamWnd) {
m_pCamWnd->RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW);
}
}
if (nBits & (W_Z | W_Z_OVERLAY)) {
if (m_pZWnd) {
m_pZWnd->RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW);
}
}
if (nBits & W_TEXTURE) {
g_Inspectors->texWnd.RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW);
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void WINAPI Sys_UpdateWindows(int nBits) {
if (g_PrefsDlg.m_bQE4Painting) {
g_nUpdateBits |= nBits;
}
else if ( g_pParentWnd ) {
g_pParentWnd->UpdateWindows(nBits);
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnFlipClip() {
if (m_pActiveXY) {
m_pActiveXY->FlipClip();
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnClipSelected() {
if (m_pActiveXY && m_pActiveXY->ClipMode()) {
Undo_Start("clip selected");
Undo_AddBrushList(&selected_brushes);
m_pActiveXY->Clip();
Undo_EndBrushList(&selected_brushes);
Undo_End();
} else {
if (g_bPatchBendMode) {
Patch_BendHandleENTER();
} else if (g_bAxialMode) {
}
//else if (g_bPatchBendMode) {
// Patch_InsDelHandleENTER();
//}
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSplitSelected() {
if (m_pActiveXY) {
Undo_Start("split selected");
Undo_AddBrushList(&selected_brushes);
m_pActiveXY->SplitClip();
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
CXYWnd *CMainFrame::ActiveXY() {
return m_pActiveXY;
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnToggleviewXz() {
if (m_pXZWnd && m_pXZWnd->GetSafeHwnd()) {
// get windowplacement doesn't actually save this so we will here
g_PrefsDlg.m_bXZVis = m_pXZWnd->IsWindowVisible();
if (g_PrefsDlg.m_bXZVis) {
m_pXZWnd->ShowWindow(SW_HIDE);
} else {
m_pXZWnd->ShowWindow(SW_SHOW);
}
g_PrefsDlg.m_bXZVis ^= 1;
g_PrefsDlg.SavePrefs();
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnToggleviewYz() {
if (m_pYZWnd && m_pYZWnd->GetSafeHwnd()) {
g_PrefsDlg.m_bYZVis = m_pYZWnd->IsWindowVisible();
if (g_PrefsDlg.m_bYZVis) {
m_pYZWnd->ShowWindow(SW_HIDE);
} else {
m_pYZWnd->ShowWindow(SW_SHOW);
}
g_PrefsDlg.m_bYZVis ^= 1;
g_PrefsDlg.SavePrefs();
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnToggleToolbar()
{
ShowControlBar(&m_wndToolBar, !m_wndToolBar.IsWindowVisible(), false);
}
void CMainFrame::OnToggleTextureBar()
{
ShowControlBar(&m_wndTextureBar, !m_wndTextureBar.IsWindowVisible(), false);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnColorsBrush() {
DoColor(COLOR_BRUSHES);
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnColorsClipper() {
DoColor(COLOR_CLIPPER);
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnColorsGridtext() {
DoColor(COLOR_GRIDTEXT);
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnColorsSelectedbrush() {
DoColor(COLOR_SELBRUSHES);
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnColorsGridblock() {
DoColor(COLOR_GRIDBLOCK);
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnColorsViewname() {
DoColor(COLOR_VIEWNAME);
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnColorSetoriginal() {
for (int i = 0; i < 3; i++) {
g_qeglobals.d_savedinfo.colors[COLOR_TEXTUREBACK][i] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDBACK][i] = 1.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDMINOR][i] = 0.75f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDMAJOR][i] = 0.5f;
g_qeglobals.d_savedinfo.colors[COLOR_CAMERABACK][i] = 0.25f;
}
g_qeglobals.d_savedinfo.colors[COLOR_GRIDBLOCK][0] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDBLOCK][1] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDBLOCK][2] = 1.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][0] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][1] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][2] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][0] = 1.0f;
g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][1] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][2] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_CLIPPER][0] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_CLIPPER][1] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_CLIPPER][2] = 1.0f;
g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][0] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][1] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][2] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][0] = 0.5f;
g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][1] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][2] = 0.75f;
g_qeglobals.d_savedinfo.colors[COLOR_PRECISION_CROSSHAIR][0] = 1.0;
g_qeglobals.d_savedinfo.colors[COLOR_PRECISION_CROSSHAIR][1] = 0.0;
g_qeglobals.d_savedinfo.colors[COLOR_PRECISION_CROSSHAIR][2] = 1.0;
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnColorSetqer() {
for (int i = 0; i < 3; i++) {
g_qeglobals.d_savedinfo.colors[COLOR_TEXTUREBACK][i] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDBACK][i] = 1.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDMINOR][i] = 1.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDMAJOR][i] = 0.5f;
g_qeglobals.d_savedinfo.colors[COLOR_CAMERABACK][i] = 0.25f;
}
g_qeglobals.d_savedinfo.colors[COLOR_GRIDBLOCK][0] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDBLOCK][1] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDBLOCK][2] = 1.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][0] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][1] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][2] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][0] = 1.0f;
g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][1] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][2] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_CLIPPER][0] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_CLIPPER][1] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_CLIPPER][2] = 1.0f;
g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][0] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][1] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][2] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][0] = 0.5f;
g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][1] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][2] = 0.75f;
g_qeglobals.d_savedinfo.colors[COLOR_PRECISION_CROSSHAIR][0] = 1.0;
g_qeglobals.d_savedinfo.colors[COLOR_PRECISION_CROSSHAIR][1] = 0.0;
g_qeglobals.d_savedinfo.colors[COLOR_PRECISION_CROSSHAIR][2] = 1.0;
Sys_UpdateWindows(W_ALL);
}
//FIXME: these just need to be read from a def file
void CMainFrame::OnColorSetSuperMal() {
OnColorSetqer();
g_qeglobals.d_savedinfo.colors[COLOR_TEXTUREBACK][0] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_TEXTUREBACK][1] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_TEXTUREBACK][2] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDBACK][0] = 0.35f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDBACK][1] = 0.35f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDBACK][2] = 0.35f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDMAJOR][0] = 0.5f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDMAJOR][1] = 0.5f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDMAJOR][2] = 0.5f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDMINOR][0] = 0.39f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDMINOR][1] = 0.39f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDMINOR][2] = 0.39f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][0] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][1] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][2] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][0] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][1] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][2] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][0] = 1.0f;
g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][1] = 0.90f;
g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][2] = 0.90f;
g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][0] = 0.5f;
g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][1] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][2] = 0.74f;
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnColorSetblack() {
for (int i = 0; i < 3; i++) {
g_qeglobals.d_savedinfo.colors[COLOR_TEXTUREBACK][i] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDBACK][i] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDMINOR][i] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_CAMERABACK][i] = 0.25f;
}
g_qeglobals.d_savedinfo.colors[COLOR_GRIDMAJOR][0] = 0.3f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDMAJOR][1] = 0.5f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDMAJOR][2] = 0.5f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDBLOCK][0] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDBLOCK][1] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDBLOCK][2] = 1.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][0] = 1.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][1] = 1.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][2] = 1.0f;
g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][0] = 1.0f;
g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][1] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][2] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_CLIPPER][0] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_CLIPPER][1] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_CLIPPER][2] = 1.0f;
g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][0] = 1.0f;
g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][1] = 1.0f;
g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][2] = 1.0f;
g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][0] = 0.7f;
g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][1] = 0.7f;
g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][2] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_PRECISION_CROSSHAIR][0] = 1.0;
g_qeglobals.d_savedinfo.colors[COLOR_PRECISION_CROSSHAIR][1] = 0.0;
g_qeglobals.d_savedinfo.colors[COLOR_PRECISION_CROSSHAIR][2] = 1.0;
Sys_UpdateWindows(W_ALL);
}
void CMainFrame::OnColorSetMax() {
for (int i=0 ; i<3 ; i++) {
g_qeglobals.d_savedinfo.colors[COLOR_TEXTUREBACK][i] = 0.25f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDBACK][i] = 0.77f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDMINOR][i] = 0.83f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDMAJOR][i] = 0.89f;
g_qeglobals.d_savedinfo.colors[COLOR_CAMERABACK][i] = 0.25f;
}
g_qeglobals.d_savedinfo.colors[COLOR_GRIDBLOCK][0] = 1.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDBLOCK][1] = 1.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDBLOCK][2] = 1.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][0] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][1] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_GRIDTEXT][2] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][0] = 1.0f;
g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][1] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_SELBRUSHES][2] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_CLIPPER][0] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_CLIPPER][1] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_CLIPPER][2] = 1.0f;
g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][0] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][1] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_BRUSHES][2] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][0] = 0.5f;
g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][1] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_VIEWNAME][2] = 0.75f;
//g_qeglobals.d_savedinfo.colors[COLOR_CAMERABACK][0] = 0.0f;
//g_qeglobals.d_savedinfo.colors[COLOR_CAMERABACK][1] = 1.0f;
//g_qeglobals.d_savedinfo.colors[COLOR_CAMERABACK][2] = 1.0f;
g_qeglobals.d_savedinfo.colors[COLOR_PRECISION_CROSSHAIR][0] = 1.0f;
g_qeglobals.d_savedinfo.colors[COLOR_PRECISION_CROSSHAIR][1] = 0.0f;
g_qeglobals.d_savedinfo.colors[COLOR_PRECISION_CROSSHAIR][2] = 1.0f;
Sys_UpdateWindows (W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSnaptogrid() {
g_PrefsDlg.m_bNoClamp ^= 1;
g_PrefsDlg.SavePrefs();
CMenu *pMenu = GetMenu();
if (pMenu) {
pMenu->CheckMenuItem(ID_SNAPTOGRID, MF_BYCOMMAND | (!g_PrefsDlg.m_bNoClamp) ? MF_CHECKED : MF_UNCHECKED);
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectScale() {
// if (ActiveXY()) ActiveXY()->UndoCopy();
Undo_Start("scale");
Undo_AddBrushList(&selected_brushes);
CScaleDialog dlg;
if (dlg.DoModal() == IDOK) {
if (dlg.m_fX > 0 && dlg.m_fY > 0 && dlg.m_fZ > 0) {
Select_Scale(dlg.m_fX, dlg.m_fY, dlg.m_fZ);
Sys_UpdateWindows(W_ALL);
}
else {
common->Printf("Warning.. Tried to scale by a zero value.");
}
}
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectMouserotate() {
if (ActiveXY()) {
if (ActiveXY()->ClipMode()) {
OnViewClipper();
}
if (ActiveXY()->RotateMode()) {
ActiveXY()->SetRotateMode(false);
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SELECT_MOUSEROTATE, FALSE);
Map_BuildBrushData();
}
else {
// may not work if no brush selected, see return value
if (ActiveXY()->SetRotateMode(true)) {
g_qeglobals.rotateAxis = 0;
if (ActiveXY()->GetViewType() == XY) {
g_qeglobals.rotateAxis = 2;
} else if (ActiveXY()->GetViewType() == XZ) {
g_qeglobals.rotateAxis = 1;
}
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SELECT_MOUSEROTATE, TRUE);
}
else { // if MFC called, we need to set back to FALSE ourselves
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SELECT_MOUSEROTATE, FALSE);
}
}
}
Sys_UpdateWindows(W_CAMERA | W_XY);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnEditCopybrush() {
if (ActiveXY()) {
ActiveXY()->Copy();
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnEditPastebrush() {
if (ActiveXY()) {
ActiveXY()->Paste();
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnEditUndo() {
// if (ActiveXY()) ActiveXY()->Undo();
Undo_Undo();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnEditRedo() {
Undo_Redo();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnUpdateEditUndo(CCmdUI *pCmdUI) {
/*
* BOOL bEnable = false; if (ActiveXY()) bEnable = ActiveXY()->UndoAvailable();
* pCmdUI->Enable(bEnable);
*/
pCmdUI->Enable(Undo_UndoAvailable());
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnUpdateEditRedo(CCmdUI *pCmdUI) {
pCmdUI->Enable(Undo_RedoAvailable());
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionTextureDec() {
g_qeglobals.d_savedinfo.m_nTextureTweak -= 1.0f;
if ( g_qeglobals.d_savedinfo.m_nTextureTweak == 0.0f ) {
g_qeglobals.d_savedinfo.m_nTextureTweak -= 1.0f;
}
SetTexValStatus();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionTextureFit() {
Select_FitTexture( 1.0f, 1.0f );
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionTextureInc() {
g_qeglobals.d_savedinfo.m_nTextureTweak += 1.0f;
if ( g_qeglobals.d_savedinfo.m_nTextureTweak == 0.0f ) {
g_qeglobals.d_savedinfo.m_nTextureTweak += 1.0f;
}
SetTexValStatus();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionTextureRotateclock() {
Select_RotateTexture(abs(g_PrefsDlg.m_nRotation));
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionTextureRotatecounter() {
Select_RotateTexture(-abs(g_PrefsDlg.m_nRotation));
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionTextureScaledown() {
Select_ScaleTexture(0, -g_qeglobals.d_savedinfo.m_nTextureTweak);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionTextureScaleup() {
Select_ScaleTexture(0, g_qeglobals.d_savedinfo.m_nTextureTweak);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionTextureScaleLeft() {
Select_ScaleTexture(g_qeglobals.d_savedinfo.m_nTextureTweak, 0);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionTextureScaleRight() {
Select_ScaleTexture(g_qeglobals.d_savedinfo.m_nTextureTweak, 0);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionTextureShiftdown() {
Select_ShiftTexture(0, -g_qeglobals.d_savedinfo.m_nTextureTweak, true);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionTextureShiftleft() {
Select_ShiftTexture(-g_qeglobals.d_savedinfo.m_nTextureTweak, 0, true);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionTextureShiftright() {
Select_ShiftTexture(g_qeglobals.d_savedinfo.m_nTextureTweak, 0, true);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionTextureShiftup() {
Select_ShiftTexture(0, g_qeglobals.d_savedinfo.m_nTextureTweak, true);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::SetGridChecks(int id) {
HMENU hMenu = ::GetMenu(GetSafeHwnd());
CheckMenuItem(hMenu, ID_GRID_1, MF_BYCOMMAND | MF_UNCHECKED);
CheckMenuItem(hMenu, ID_GRID_2, MF_BYCOMMAND | MF_UNCHECKED);
CheckMenuItem(hMenu, ID_GRID_4, MF_BYCOMMAND | MF_UNCHECKED);
CheckMenuItem(hMenu, ID_GRID_8, MF_BYCOMMAND | MF_UNCHECKED);
CheckMenuItem(hMenu, ID_GRID_16, MF_BYCOMMAND | MF_UNCHECKED);
CheckMenuItem(hMenu, ID_GRID_32, MF_BYCOMMAND | MF_UNCHECKED);
CheckMenuItem(hMenu, ID_GRID_64, MF_BYCOMMAND | MF_UNCHECKED);
CheckMenuItem(hMenu, ID_GRID_POINT5, MF_BYCOMMAND | MF_UNCHECKED);
CheckMenuItem(hMenu, ID_GRID_POINT25, MF_BYCOMMAND | MF_UNCHECKED);
CheckMenuItem(hMenu, ID_GRID_POINT125, MF_BYCOMMAND | MF_UNCHECKED);
CheckMenuItem(hMenu, ID_GRID_POINT0625, MF_BYCOMMAND | MF_UNCHECKED);
CheckMenuItem(hMenu, id, MF_BYCOMMAND | MF_CHECKED);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnGridNext() {
if (g_qeglobals.d_gridsize >= MAX_GRID) {
return;
}
g_qeglobals.d_gridsize *= 2.0f;
float minGrid = MIN_GRID;
int id = ID_GRID_START;
while (minGrid < g_qeglobals.d_gridsize && id < ID_GRID_END) {
minGrid *= 2.0f;
id++;
}
UpdateGrid();
SetGridChecks(id);
SetGridStatus();
Sys_UpdateWindows(W_XY | W_Z);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnGridPrev() {
if (g_qeglobals.d_gridsize <= MIN_GRID) {
return;
}
g_qeglobals.d_gridsize /= 2;
float maxGrid = MAX_GRID;
int id = ID_GRID_END;
while (maxGrid > g_qeglobals.d_gridsize && id > ID_GRID_START) {
maxGrid /= 2.0f;
id--;
}
UpdateGrid();
SetGridChecks(id);
SetGridStatus();
Sys_UpdateWindows(W_XY | W_Z);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::SetGridStatus() {
CString strStatus;
char c1;
char c2;
c1 = (g_PrefsDlg.m_bTextureLock) ? 'M' : ' ';
c2 = (g_PrefsDlg.m_bRotateLock) ? 'R' : ' ';
strStatus.Format
(
"G:%1.2f T:%1.2f 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
);
SetStatusText(4, strStatus);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::SetTexValStatus() {
//
// CString strStatus; strStatus.Format("T: %i C: %i", g_nTextureTweak,
// g_nCubicScale); SetStatusText(5, strStatus.GetBuffer(0));
//
SetGridStatus();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnTextureReplaceall() {
CFindTextureDlg::show();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnScalelockx() {
if (g_nScaleHow & SCALE_X) {
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SCALELOCKX, FALSE);
}
else {
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SCALELOCKX);
}
g_nScaleHow ^= SCALE_X;
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnScalelocky() {
if (g_nScaleHow & SCALE_Y) {
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SCALELOCKY, FALSE);
}
else {
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SCALELOCKY);
}
g_nScaleHow ^= SCALE_Y;
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnScalelockz() {
if (g_nScaleHow & SCALE_Z) {
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SCALELOCKZ, FALSE);
}
else {
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SCALELOCKZ);
}
g_nScaleHow ^= SCALE_Z;
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectMousescale() {
if (ActiveXY()) {
if (ActiveXY()->ClipMode()) {
OnViewClipper();
}
if (ActiveXY()->RotateMode()) {
// SetRotateMode(false) always works
ActiveXY()->SetRotateMode(false);
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SELECT_MOUSESCALE, FALSE);
}
if (ActiveXY()->ScaleMode()) {
ActiveXY()->SetScaleMode(false);
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SELECT_MOUSESCALE, FALSE);
}
else {
ActiveXY()->SetScaleMode(true);
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SELECT_MOUSESCALE);
}
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnFileImport() {
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnFileProjectsettings() {
DoProjectSettings();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnUpdateFileImport(CCmdUI *pCmdUI) {
pCmdUI->Enable(FALSE);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewCubein() {
g_PrefsDlg.m_nCubicScale--;
if (g_PrefsDlg.m_nCubicScale < 1) {
g_PrefsDlg.m_nCubicScale = 1;
}
g_PrefsDlg.SavePrefs();
Sys_UpdateWindows(W_CAMERA);
SetTexValStatus();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewCubeout() {
g_PrefsDlg.m_nCubicScale++;
if (g_PrefsDlg.m_nCubicScale > 99) {
g_PrefsDlg.m_nCubicScale = 99;
}
g_PrefsDlg.SavePrefs();
Sys_UpdateWindows(W_CAMERA);
SetTexValStatus();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewCubicclipping() {
g_PrefsDlg.m_bCubicClipping ^= 1;
CMenu *pMenu = GetMenu();
if (pMenu) {
pMenu->CheckMenuItem
(
ID_VIEW_CUBICCLIPPING,
MF_BYCOMMAND | (g_PrefsDlg.m_bCubicClipping) ? MF_CHECKED : MF_UNCHECKED
);
}
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_VIEW_CUBICCLIPPING, (g_PrefsDlg.m_bCubicClipping) ? TRUE : FALSE);
g_PrefsDlg.SavePrefs();
Map_BuildBrushData();
Sys_UpdateWindows(W_CAMERA);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnFileSaveregion() {
SaveAsDialog(true);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnUpdateFileSaveregion(CCmdUI *pCmdUI) {
pCmdUI->Enable (static_cast(region_active));
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionMovedown() {
Undo_Start("move up");
Undo_AddBrushList(&selected_brushes);
idVec3 vAmt;
vAmt[0] = vAmt[1] = 0.0f;
vAmt[2] = -g_qeglobals.d_gridsize;
Select_Move(vAmt);
Sys_UpdateWindows(W_CAMERA | W_XY | W_Z);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionMoveup() {
idVec3 vAmt;
vAmt[0] = vAmt[1] = 0.0f;
vAmt[2] = g_qeglobals.d_gridsize;
Select_Move(vAmt);
Sys_UpdateWindows(W_CAMERA | W_XY | W_Z);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnToolbarMain() {
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnToolbarTexture() {
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionPrint() {
for (brush_t * b = selected_brushes.next; b != &selected_brushes; b = b->next) {
Brush_Print(b);
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::UpdateTextureBar() {
if (m_wndTextureBar.GetSafeHwnd()) {
m_wndTextureBar.GetSurfaceAttributes();
}
}
bool g_bTABDown = false;
bool g_bOriginalFlag;
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionTogglesizepaint() {
if (::GetAsyncKeyState('Q')) {
if (!g_bTABDown) {
g_bTABDown = true;
g_bOriginalFlag = ( g_PrefsDlg.m_bSizePaint != FALSE );
g_PrefsDlg.m_bSizePaint = !g_bOriginalFlag;
Sys_UpdateWindows(W_XY);
return;
}
}
else {
g_bTABDown = false;
g_PrefsDlg.m_bSizePaint = g_bOriginalFlag;
Sys_UpdateWindows(W_XY);
return;
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnBrushMakecone() {
Undo_Start("make cone");
Undo_AddBrushList(&selected_brushes);
DoSides(true);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnTexturesLoad() {
BROWSEINFO bi;
CString strPath;
char *p = strPath.GetBuffer(MAX_PATH + 1);
bi.hwndOwner = GetSafeHwnd();
bi.pidlRoot = NULL;
bi.pszDisplayName = p;
bi.lpszTitle = "Load textures from path";
bi.ulFlags = 0;
bi.lpfn = NULL;
bi.lParam = NULL;
bi.iImage = 0;
LPITEMIDLIST pidlBrowse;
pidlBrowse = SHBrowseForFolder(&bi);
if (pidlBrowse) {
SHGetPathFromIDList(pidlBrowse, p);
strPath.ReleaseBuffer();
AddSlash(strPath);
//FIXME: idMaterial
//Texture_ShowDirectory(strPath.GetBuffer(0));
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnToggleRotatelock() {
g_qeglobals.flatRotation = false;
g_qeglobals.rotateAxis++;
if (g_qeglobals.rotateAxis > 2) {
g_qeglobals.rotateAxis = 0;
}
Select_InitializeRotation();
Sys_UpdateWindows(W_CAMERA | W_XY);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveBevel() {
// Curve_MakeCurvedBrush (false, false, false, false, false, true, true);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveCylinder() {
// Curve_MakeCurvedBrush (false, false, false, true, true, true, true);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveEighthsphere() {
// Curve_MakeCurvedBrush (false, true, false, true, true, false, false);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveEndcap() {
// Curve_MakeCurvedBrush (false, false, false, false, true, true, true);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveHemisphere() {
// Curve_MakeCurvedBrush (false, true, false, true, true, true, true);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveInvertcurve() {
// Curve_Invert ();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveQuarter() {
// Curve_MakeCurvedBrush (false, true, false, true, true, true, false);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveSphere() {
// Curve_MakeCurvedBrush (false, true, true, true, true, true, true);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnFileImportmap() {
CFileDialog dlgFile(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Map files (*.map)|*.map||", this);
if (dlgFile.DoModal() == IDOK) {
Map_ImportFile(dlgFile.GetPathName().GetBuffer(0));
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnFileExportmap() {
CFileDialog dlgFile(FALSE, "map", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Map files (*.map)|*.map||", this);
if (dlgFile.DoModal() == IDOK) {
Map_SaveSelected(dlgFile.GetPathName().GetBuffer(0));
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewShowcurves() {
if ((g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_CURVES) & EXCLUDE_CURVES) {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOWCURVES, MF_BYCOMMAND | MF_UNCHECKED);
}
else {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOWCURVES, MF_BYCOMMAND | MF_CHECKED);
}
Sys_UpdateWindows(W_XY | W_CAMERA);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionSelectNudgedown() {
NudgeSelection(3, g_qeglobals.d_savedinfo.m_nTextureTweak);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionSelectNudgeleft() {
NudgeSelection(0, g_qeglobals.d_savedinfo.m_nTextureTweak);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionSelectNudgeright() {
NudgeSelection(2, g_qeglobals.d_savedinfo.m_nTextureTweak);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionSelectNudgeup() {
NudgeSelection(1, g_qeglobals.d_savedinfo.m_nTextureTweak);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::NudgeSelection(int nDirection, float fAmount) {
if (ActiveXY()->RotateMode()) {
int nAxis = 0;
if (ActiveXY()->GetViewType() == XY) {
nAxis = 2;
} else if (g_pParentWnd->ActiveXY()->GetViewType() == XZ) {
nAxis = 1;
fAmount = -fAmount;
}
if (nDirection == 2 || nDirection == 3) {
fAmount = -fAmount;
}
float fDeg = -fAmount;
g_pParentWnd->ActiveXY()->Rotation()[nAxis] += fAmount;
CString strStatus;
strStatus.Format
(
"Rotation x:: %.1f y:: %.1f z:: %.1f",
g_pParentWnd->ActiveXY()->Rotation()[0],
g_pParentWnd->ActiveXY()->Rotation()[1],
g_pParentWnd->ActiveXY()->Rotation()[2]
);
g_pParentWnd->SetStatusText(2, strStatus);
Select_RotateAxis(nAxis, fDeg, false, true);
Sys_UpdateWindows(W_ALL);
}
else if (ActiveXY()->ScaleMode()) {
if (nDirection == 0 || nDirection == 3) {
fAmount = -fAmount;
}
idVec3 v;
v[0] = v[1] = v[2] = 1.0f;
if (fAmount > 0) {
v[0] = 1.1f;
v[1] = 1.1f;
v[2] = 1.1f;
}
else {
v[0] = 0.9f;
v[1] = 0.9f;
v[2] = 0.9f;
}
Select_Scale
(
(g_nScaleHow & SCALE_X) ? v[0] : 1.0f,
(g_nScaleHow & SCALE_Y) ? v[1] : 1.0f,
(g_nScaleHow & SCALE_Z) ? v[2] : 1.0f
);
Sys_UpdateWindows(W_ALL);
}
else {
// 0 - left, 1 - up, 2 - right, 3 - down
int nDim;
if (nDirection == 0) {
nDim = ActiveXY()->GetViewType() == YZ ? 1 : 0;
fAmount = -fAmount;
}
else if (nDirection == 1) {
nDim = ActiveXY()->GetViewType() == XY ? 1 : 2;
}
else if (nDirection == 2) {
nDim = ActiveXY()->GetViewType() == YZ ? 1 : 0;
}
else {
nDim = ActiveXY()->GetViewType() == XY ? 1 : 2;
fAmount = -fAmount;
}
Nudge(nDim, fAmount);
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
BOOL CMainFrame::PreTranslateMessage(MSG *pMsg) {
return CFrameWnd::PreTranslateMessage(pMsg);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::Nudge(int nDim, float fNudge) {
idVec3 vMove;
vMove[0] = vMove[1] = vMove[2] = 0;
vMove[nDim] = fNudge;
Select_Move(vMove, true);
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnTexturesLoadlist() {
CDialogTextures dlg;
dlg.DoModal();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectByBoundingBrush() {
g_PrefsDlg.m_selectByBoundingBrush ^= 1;
m_wndToolBar.GetToolBarCtrl().CheckButton
(
ID_SELECT_BYBOUNDINGBRUSH,
(g_PrefsDlg.m_selectByBoundingBrush) ? TRUE : FALSE
);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectBrushesOnly() {
g_PrefsDlg.m_selectOnlyBrushes ^= 1;
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SELECT_BRUSHESONLY, (g_PrefsDlg.m_selectOnlyBrushes) ? TRUE : FALSE);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnDynamicLighting() {
CCamWnd *pCam = new CCamWnd();
CRect rect(100, 100, 300, 300);
pCam->Create(CAMERA_WINDOW_CLASS, "", WS_OVERLAPPEDWINDOW, rect, GetDesktopWindow(), 12345);
pCam->ShowWindow(SW_SHOW);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveSimplepatchmesh() {
Undo_Start("make simpe patch mesh");
Undo_AddBrushList(&selected_brushes);
CPatchDensityDlg dlg;
dlg.DoModal();
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnPatchToggleBox() {
g_bPatchShowBounds ^= 1;
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_PATCH_SHOWBOUNDINGBOX, (g_bPatchShowBounds) ? TRUE : FALSE);
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnPatchWireframe() {
g_bPatchWireFrame ^= 1;
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_PATCH_WIREFRAME, (g_bPatchWireFrame) ? TRUE : FALSE);
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurvePatchcone() {
Undo_Start("make curve cone");
Undo_AddBrushList(&selected_brushes);
Patch_BrushToMesh(true);
Sys_UpdateWindows(W_ALL);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurvePatchtube() {
Undo_Start("make curve cylinder");
Undo_AddBrushList(&selected_brushes);
Patch_BrushToMesh(false);
Sys_UpdateWindows(W_ALL);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnPatchWeld() {
g_bPatchWeld ^= 1;
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_PATCH_WELD, (g_bPatchWeld) ? TRUE : FALSE);
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurvePatchbevel() {
Undo_Start("make bevel");
Undo_AddBrushList(&selected_brushes);
Patch_BrushToMesh(false, true, false);
Sys_UpdateWindows(W_ALL);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurvePatchendcap() {
Undo_Start("make end cap");
Undo_AddBrushList(&selected_brushes);
Patch_BrushToMesh(false, false, true);
Sys_UpdateWindows(W_ALL);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurvePatchinvertedbevel() {
// Patch_BrushToMesh(false, true, false, true); Sys_UpdateWindows (W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurvePatchinvertedendcap() {
// Patch_BrushToMesh(false, false, true, true); Sys_UpdateWindows (W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnPatchDrilldown() {
g_bPatchDrillDown ^= 1;
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_PATCH_DRILLDOWN, (g_bPatchDrillDown) ? TRUE : FALSE);
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveInsertcolumn() {
Undo_Start("insert colum");
Undo_AddBrushList(&selected_brushes);
// Patch_AdjustSelectedRowCols(0, 2);
Patch_AdjustSelected(true, true, true);
Sys_UpdateWindows(W_ALL);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveInsertrow() {
Undo_Start("insert row");
Undo_AddBrushList(&selected_brushes);
// Patch_AdjustSelectedRowCols(2, 0);
Patch_AdjustSelected(true, false, true);
Sys_UpdateWindows(W_ALL);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveDeletecolumn() {
Undo_Start("delete column");
Undo_AddBrushList(&selected_brushes);
Patch_AdjustSelected(false, true, true);
Sys_UpdateWindows(W_ALL);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveDeleterow() {
Undo_Start("delete row");
Undo_AddBrushList(&selected_brushes);
Patch_AdjustSelected(false, false, true);
Sys_UpdateWindows(W_ALL);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveInsertAddcolumn() {
Undo_Start("add (2) columns");
Undo_AddBrushList(&selected_brushes);
Patch_AdjustSelected(true, true, true);
Sys_UpdateWindows(W_ALL);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveInsertAddrow() {
Undo_Start("add (2) rows");
Undo_AddBrushList(&selected_brushes);
Patch_AdjustSelected(true, false, true);
Sys_UpdateWindows(W_ALL);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveInsertInsertcolumn() {
Undo_Start("insert (2) columns");
Undo_AddBrushList(&selected_brushes);
Patch_AdjustSelected(true, true, false);
Sys_UpdateWindows(W_ALL);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveInsertInsertrow() {
Undo_Start("insert (2) rows");
Undo_AddBrushList(&selected_brushes);
Patch_AdjustSelected(true, false, false);
Sys_UpdateWindows(W_ALL);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveNegative() {
Patch_ToggleInverted();
// Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveNegativeTextureX() {
Select_FlipTexture(false);
// Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveNegativeTextureY() {
Select_FlipTexture(true);
// Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveDeleteFirstcolumn() {
Undo_Start("delete first (2) columns");
Undo_AddBrushList(&selected_brushes);
Patch_AdjustSelected(false, true, true);
Sys_UpdateWindows(W_ALL);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveDeleteFirstrow() {
Undo_Start("delete first (2) rows");
Undo_AddBrushList(&selected_brushes);
Patch_AdjustSelected(false, false, true);
Sys_UpdateWindows(W_ALL);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveDeleteLastcolumn() {
Undo_Start("delete last (2) columns");
Undo_AddBrushList(&selected_brushes);
Patch_AdjustSelected(false, true, false);
Sys_UpdateWindows(W_ALL);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveDeleteLastrow() {
Undo_Start("delete last (2) rows");
Undo_AddBrushList(&selected_brushes);
Patch_AdjustSelected(false, false, false);
Sys_UpdateWindows(W_ALL);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnPatchBend() {
Patch_BendToggle();
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_PATCH_BEND, (g_bPatchBendMode) ? TRUE : FALSE);
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnPatchInsdel() {
Patch_InsDelToggle();
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_PATCH_INSDEL, (g_bPatchInsertMode) ? TRUE : FALSE);
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnPatchEnter() {
}
/*
=======================================================================================================================
=======================================================================================================================
*/
extern bool Sys_KeyDown(int key);
void CMainFrame::OnPatchTab() {
if (g_bPatchBendMode) {
Patch_BendHandleTAB();
}
else if (g_bPatchInsertMode) {
Patch_InsDelHandleTAB();
}
else if (g_bAxialMode) {
int faceCount = g_ptrSelectedFaces.GetSize();
if (faceCount > 0) {
face_t *selFace = reinterpret_cast < face_t * > (g_ptrSelectedFaces.GetAt(0));
int *ip = (Sys_KeyDown(VK_SHIFT)) ? &g_axialAnchor : &g_axialDest;
(*ip)++;
if ( *ip >= selFace->face_winding->GetNumPoints() ) {
*ip = 0;
}
}
Sys_UpdateWindows(W_CAMERA);
} else {
//
// check to see if the selected brush is part of a func group if it is, deselect
// everything and reselect the next brush in the group
//
brush_t *b = selected_brushes.next;
entity_t *e;
if (b != &selected_brushes) {
if ( idStr::Icmp(b->owner->eclass->name, "worldspawn") != 0 ) {
e = b->owner;
Select_Deselect();
brush_t *b2;
for (b2 = e->brushes.onext; b2 != &e->brushes; b2 = b2->onext) {
if (b == b2) {
b2 = b2->onext;
break;
}
}
if (b2 == &e->brushes) {
b2 = b2->onext;
}
Select_Brush(b2, false);
Sys_UpdateWindows(W_ALL);
}
}
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::UpdatePatchToolbarButtons() {
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_PATCH_BEND, (g_bPatchBendMode) ? TRUE : FALSE);
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_PATCH_INSDEL, (g_bPatchInsertMode) ? TRUE : FALSE);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurvePatchdensetube() {
Undo_Start("dense cylinder");
Undo_AddBrushList(&selected_brushes);
Patch_BrushToMesh(false);
OnCurveInsertAddrow();
OnCurveInsertInsertrow();
Sys_UpdateWindows(W_ALL);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurvePatchverydensetube() {
Undo_Start("very dense cylinder");
Undo_AddBrushList(&selected_brushes);
Patch_BrushToMesh(false);
OnCurveInsertAddrow();
OnCurveInsertInsertrow();
OnCurveInsertAddrow();
OnCurveInsertInsertrow();
Sys_UpdateWindows(W_ALL);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveCap() {
Patch_CapCurrent();
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveCapInvertedbevel() {
Patch_CapCurrent(true);
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveCapInvertedendcap() {
Patch_CapCurrent(false, true);
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveRedisperseCols() {
Patch_DisperseColumns();
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveRedisperseRows() {
Patch_DisperseRows();
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnPatchNaturalize() {
Patch_NaturalizeSelected();
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnPatchNaturalizeAlt() {
Patch_NaturalizeSelected(false, false, true);
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSnapToGrid() {
Select_SnapToGrid();
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurvePatchsquare() {
Undo_Start("square cylinder");
Undo_AddBrushList(&selected_brushes);
Patch_BrushToMesh(false, false, false, true);
Sys_UpdateWindows(W_ALL);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::CheckTextureScale(int id) {
CMenu *pMenu = GetMenu();
if (pMenu) {
pMenu->CheckMenuItem(ID_TEXTURES_TEXTUREWINDOWSCALE_10, MF_BYCOMMAND | MF_UNCHECKED);
pMenu->CheckMenuItem(ID_TEXTURES_TEXTUREWINDOWSCALE_25, MF_BYCOMMAND | MF_UNCHECKED);
pMenu->CheckMenuItem(ID_TEXTURES_TEXTUREWINDOWSCALE_50, MF_BYCOMMAND | MF_UNCHECKED);
pMenu->CheckMenuItem(ID_TEXTURES_TEXTUREWINDOWSCALE_100, MF_BYCOMMAND | MF_UNCHECKED);
pMenu->CheckMenuItem(ID_TEXTURES_TEXTUREWINDOWSCALE_200, MF_BYCOMMAND | MF_UNCHECKED);
pMenu->CheckMenuItem(id, MF_BYCOMMAND | MF_CHECKED);
}
g_PrefsDlg.SavePrefs();
//FIXME: idMaterial
//Texture_ResetPosition();
Sys_UpdateWindows(W_TEXTURE);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnTexturesTexturewindowscale10() {
g_PrefsDlg.m_nTextureScale = 10;
CheckTextureScale(ID_TEXTURES_TEXTUREWINDOWSCALE_10);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnTexturesTexturewindowscale100() {
g_PrefsDlg.m_nTextureScale = 100;
CheckTextureScale(ID_TEXTURES_TEXTUREWINDOWSCALE_100);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnTexturesTexturewindowscale200() {
g_PrefsDlg.m_nTextureScale = 200;
CheckTextureScale(ID_TEXTURES_TEXTUREWINDOWSCALE_200);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnTexturesTexturewindowscale25() {
g_PrefsDlg.m_nTextureScale = 25;
CheckTextureScale(ID_TEXTURES_TEXTUREWINDOWSCALE_25);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnTexturesTexturewindowscale50() {
g_PrefsDlg.m_nTextureScale = 50;
CheckTextureScale(ID_TEXTURES_TEXTUREWINDOWSCALE_50);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnTexturesFlush() {
//FIXME: idMaterial
//Texture_Flush();
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveOverlayClear() {
Patch_ClearOverlays();
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveOverlaySet() {
Patch_SetOverlays();
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveThicken() {
Undo_Start("curve thicken");
Undo_AddBrushList(&selected_brushes);
CDialogThick dlg;
if ( dlg.DoModal() == IDOK ) {
Patch_Thicken( dlg.m_nAmount, ( dlg.m_bSeams != FALSE ) );
Sys_UpdateWindows(W_ALL);
}
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveCyclecap() {
Patch_NaturalizeSelected(true, true);
Sys_UpdateWindows(W_ALL);
}
void CMainFrame::OnCurveCyclecapAlt() {
Patch_NaturalizeSelected(true, true, true);
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveMatrixTranspose() {
Patch_Transpose();
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnTexturesReloadshaders() {
CWaitCursor wait;
declManager->Reload( false );
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::SetEntityCheck() {
CMenu *pMenu = GetMenu();
if (pMenu) {
pMenu->CheckMenuItem(ID_VIEW_ENTITIESAS_WIREFRAME, MF_BYCOMMAND | (g_PrefsDlg.m_nEntityShowState == ENTITY_WIRE) ? MF_CHECKED : MF_UNCHECKED);
pMenu->CheckMenuItem(ID_VIEW_ENTITIESAS_SKINNED, MF_BYCOMMAND | (g_PrefsDlg.m_nEntityShowState == ENTITY_SKINNED) ? MF_CHECKED : MF_UNCHECKED);
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnShowEntities() {
HandlePopup(this, IDR_POPUP_ENTITY);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewEntitiesasSkinned() {
g_PrefsDlg.m_nEntityShowState = ENTITY_SKINNED;
SetEntityCheck();
g_PrefsDlg.SavePrefs();
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewEntitiesasWireframe() {
g_PrefsDlg.m_nEntityShowState = ENTITY_WIRE;
SetEntityCheck();
g_PrefsDlg.SavePrefs();
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewShowhint() {
if ((g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_HINT) & EXCLUDE_HINT) {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOWHINT, MF_BYCOMMAND | MF_UNCHECKED);
}
else {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOWHINT, MF_BYCOMMAND | MF_CHECKED);
}
Sys_UpdateWindows(W_XY | W_CAMERA);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnTexturesShowall() {
Texture_ShowAll();
}
void CMainFrame::OnTexturesHideall() {
Texture_HideAll();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnPatchInspector() {
DoPatchInspector();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewOpengllighting() {
g_PrefsDlg.m_bGLLighting ^= 1;
g_PrefsDlg.SavePrefs();
CheckMenuItem
(
::GetMenu(GetSafeHwnd()),
ID_VIEW_OPENGLLIGHTING,
MF_BYCOMMAND | (g_PrefsDlg.m_bGLLighting) ? MF_CHECKED : MF_UNCHECKED
);
Sys_UpdateWindows(W_XY | W_CAMERA);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectAll() {
Select_AllOfType();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewShowcaulk() {
if ((g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_CAULK) & EXCLUDE_CAULK) {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOWCAULK, MF_BYCOMMAND | MF_UNCHECKED);
}
else {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOWCAULK, MF_BYCOMMAND | MF_CHECKED);
}
Sys_UpdateWindows(W_XY | W_CAMERA);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveFreeze() {
Patch_Freeze();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveUnFreeze() {
Patch_UnFreeze(false);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveUnFreezeAll() {
Patch_UnFreeze(true);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectReselect() {
Select_Reselect();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewShowangles() {
if ((g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_ANGLES) & EXCLUDE_ANGLES) {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOWANGLES, MF_BYCOMMAND | MF_UNCHECKED);
}
else {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOWANGLES, MF_BYCOMMAND | MF_CHECKED);
}
Sys_UpdateWindows(W_XY | W_CAMERA);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnEditSaveprefab() {
CFileDialog dlgFile
(
FALSE,
"pfb",
NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"Prefab files (*.pfb)|*.pfb||",
this
);
char CurPath[1024];
::GetCurrentDirectory(1024, CurPath);
dlgFile.m_ofn.lpstrInitialDir = CurPath;
if (dlgFile.DoModal() == IDOK) {
Map_SaveSelected(dlgFile.GetPathName().GetBuffer(0));
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnEditLoadprefab() {
CFileDialog dlgFile
(
TRUE,
"pfb",
NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"Prefab files (*.pfb)|*.pfb||",
this
);
char CurPath[1024];
::GetCurrentDirectory(1024, CurPath);
dlgFile.m_ofn.lpstrInitialDir = CurPath;
if (dlgFile.DoModal() == IDOK) {
Map_ImportFile(dlgFile.GetPathName().GetBuffer(0));
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveMoreendcapsbevelsSquarebevel() {
Undo_Start("square bevel");
Undo_AddBrushList(&selected_brushes);
Patch_BrushToMesh(false, true, false, true);
Sys_UpdateWindows(W_ALL);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveMoreendcapsbevelsSquareendcap() {
Undo_Start("square endcap");
Undo_AddBrushList(&selected_brushes);
Patch_BrushToMesh(false, false, true, true);
Sys_UpdateWindows(W_ALL);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnBrushPrimitivesSphere() {
Undo_Start("make sphere");
Undo_AddBrushList(&selected_brushes);
DoSides(false, true);
Undo_EndBrushList(&selected_brushes);
Undo_End();
}
extern bool g_bCrossHairs;
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewCrosshair() {
g_bCrossHairs ^= 1;
Sys_UpdateWindows(W_XY);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewHideshowHideselected() {
Select_Hide();
Select_Deselect();
}
void CMainFrame::OnViewHideshowHideNotselected() {
Select_Hide(true);
Select_Deselect();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnViewHideshowShowhidden() {
Select_ShowAllHidden();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnTexturesShadersShow() {
//
// g_PrefsDlg.m_bShowShaders ^= 1; CheckMenuItem (
// ::GetMenu(GetSafeHwnd()), ID_TEXTURES_SHADERS_SHOW, MF_BYCOMMAND |
// ((g_PrefsDlg.m_bShowShaders) ? MF_CHECKED : MF_UNCHECKED ));
// Sys_UpdateWindows(W_TEXTURE);
//
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnTexturesFlushUnused() {
//FIXME: idMaterial
//Texture_FlushUnused();
Sys_UpdateWindows(W_TEXTURE);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionInvert() {
Select_Invert();
Sys_UpdateWindows(W_XY | W_Z | W_CAMERA);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnProjectedLight() {
LightEditorInit( NULL );
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnShowLighttextures() {
g_bShowLightTextures ^= 1;
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SHOW_LIGHTTEXTURES, (g_bShowLightTextures) ? TRUE : FALSE);
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnShowLightvolumes() {
g_bShowLightVolumes ^= 1;
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SHOW_LIGHTVOLUMES, (g_bShowLightVolumes) ? TRUE : FALSE);
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnActivate(UINT nState, CWnd *pWndOther, BOOL bMinimized) {
CFrameWnd::OnActivate(nState, pWndOther, bMinimized);
if ( nState != WA_INACTIVE ) {
common->ActivateTool(true);
if (::IsWindowVisible(win32.hWnd)) {
::ShowWindow(win32.hWnd, SW_HIDE);
}
// start playing the editor sound world
soundSystem->SetPlayingSoundWorld( g_qeglobals.sw );
}
else {
//com_editorActive = false;
}
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSplinesMode() {
g_qeglobals.d_select_mode = sel_addpoint;
g_splineList->clear();
g_splineList->startEdit(true);
showCameraInspector();
Sys_UpdateWindows(W_ALL);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSplinesLoad() {
g_splineList->load("maps/test.camera");
g_splineList->buildCamera();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSplinesSave() {
g_splineList->save("maps/test.camera");
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSplinesEdit() {
showCameraInspector();
Sys_UpdateWindows(W_ALL);
}
extern void testCamSpeed();
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSplineTest() {
long start = GetTickCount();
g_splineList->startCamera(start);
float cycle = g_splineList->getTotalTime();
long msecs = cycle * 1000;
long current = start;
idVec3 lookat(0, 0, 0);
idVec3 dir;
while (current < start + msecs) {
float fov;
g_splineList->getCameraInfo(current, g_pParentWnd->GetCamera()->Camera().origin, dir, &fov);
g_pParentWnd->GetCamera()->Camera().angles[1] = atan2(dir[1], dir[0]) * 180 / 3.14159;
g_pParentWnd->GetCamera()->Camera().angles[0] = asin(dir[2]) * 180 / 3.14159;
g_pParentWnd->UpdateWindows(W_XY | W_CAMERA);
current = GetTickCount();
}
g_splineList->setRunning(false);
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSplinesTargetPoints() {
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSplinesCameraPoints() {
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnPopupNewcameraInterpolated() {
g_qeglobals.d_select_mode = sel_addpoint;
g_qeglobals.selectObject = g_splineList->startNewCamera(idCameraPosition::INTERPOLATED);
OnSplinesEdit();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnPopupNewcameraSpline() {
g_qeglobals.d_select_mode = sel_addpoint;
g_qeglobals.selectObject = g_splineList->startNewCamera(idCameraPosition::SPLINE);
OnSplinesEdit();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnPopupNewcameraFixed() {
g_qeglobals.d_select_mode = sel_addpoint;
g_qeglobals.selectObject = g_splineList->startNewCamera(idCameraPosition::FIXED);
OnSplinesEdit();
}
extern void Patch_AdjustSubdivisions(float hadj, float vadj);
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveIncreaseVert() {
Patch_AdjustSubdivisions( 0.0f, -0.5f );
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveDecreaseVert() {
Patch_AdjustSubdivisions( 0.0f, 0.5f );
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveIncreaseHorz() {
Patch_AdjustSubdivisions( -0.5f, 0.0f );
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnCurveDecreaseHorz() {
Patch_AdjustSubdivisions( 0.5f, 0.0f );
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSelectionMoveonly() {
g_moveOnly ^= 1;
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SELECTION_MOVEONLY, (g_moveOnly) ? TRUE : FALSE);
}
void CMainFrame::OnSelectBrushlight()
{
// TODO: Add your command handler code here
}
void CMainFrame::OnSelectionCombine()
{
if (g_qeglobals.d_select_count < 2) {
Sys_Status("Must have at least two things selected.", 0);
Sys_Beep();
return;
}
entity_t *e1 = g_qeglobals.d_select_order[0]->owner;
if (e1 == world_entity) {
Sys_Status("First selection must not be world.", 0);
Sys_Beep();
return;
}
idStr str;
idMat3 mat;
idVec3 v;
if (e1->eclass->nShowFlags & ECLASS_LIGHT) {
// copy the lights origin and rotation matrix to
// light_origin and light_rotation
e1->trackLightOrigin = true;
e1->brushes.onext->trackLightOrigin = true;
if (GetVectorForKey(e1, "origin", v)) {
SetKeyVec3(e1, "light_origin", v);
e1->lightOrigin = v;
}
if (!GetMatrixForKey(e1, "rotation", mat)) {
mat.Identity();
}
sprintf(str, "%g %g %g %g %g %g %g %g %g", mat[0][0], mat[0][1], mat[0][2], mat[1][0], mat[1][1], mat[1][2], mat[2][0], mat[2][1], mat[2][2]);
SetKeyValue(e1, "light_rotation", str, false);
e1->lightRotation = mat;
}
bool setModel = true;
for (brush_t *b = selected_brushes.next; b != &selected_brushes; b = b->next) {
if (b->owner != e1) {
if (e1->eclass->nShowFlags & ECLASS_LIGHT) {
if (GetVectorForKey(b->owner, "origin", v)) {
e1->origin = b->owner->origin;
SetKeyVec3(e1, "origin", b->owner->origin);
}
if (GetMatrixForKey(b->owner, "rotation", mat)) {
e1->rotation = b->owner->rotation;
mat = b->owner->rotation;
sprintf(str, "%g %g %g %g %g %g %g %g %g", mat[0][0], mat[0][1], mat[0][2], mat[1][0], mat[1][1], mat[1][2], mat[2][0], mat[2][1], mat[2][2]);
SetKeyValue(e1, "rotation", str, false);
}
if (b->modelHandle) {
SetKeyValue(e1, "model", ValueForKey(b->owner, "model"));
setModel = false;
} else {
b->entityModel = true;
}
}
Entity_UnlinkBrush(b);
Entity_LinkBrush(e1, b);
}
}
if (setModel) {
SetKeyValue(e1, "model", ValueForKey(e1, "name"));
}
Select_Deselect();
Select_Brush(g_qeglobals.d_select_order[0]);
Sys_UpdateWindows(W_XY | W_CAMERA);
}
extern void Patch_Weld(patchMesh_t *p, patchMesh_t *p2);
void CMainFrame::OnPatchCombine() {
patchMesh_t *p, *p2;
p = p2 = NULL;
for (brush_t *b = selected_brushes.next; b != &selected_brushes; b = b->next) {
if (b->pPatch) {
if (p == NULL) {
p = b->pPatch;
} else if (p2 == NULL) {
p2 = b->pPatch;
Patch_Weld(p, p2);
return;
}
}
}
}
void CMainFrame::OnShowDoom()
{
int show = ::IsWindowVisible(win32.hWnd) ? SW_HIDE : SW_NORMAL;
if (show == SW_NORMAL) {
g_Inspectors->SetMode(W_TEXTURE);
}
::ShowWindow(win32.hWnd, show);
}
void CMainFrame::OnViewRendermode()
{
m_pCamWnd->ToggleRenderMode();
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_RENDERMODE, MF_BYCOMMAND | (m_pCamWnd->GetRenderMode()) ? MF_CHECKED : MF_UNCHECKED);
Sys_UpdateWindows(W_ALL);
}
void CMainFrame::OnViewRebuildrenderdata()
{
m_pCamWnd->BuildRendererState();
if (!m_pCamWnd->GetRenderMode()) {
OnViewRendermode();
}
Sys_UpdateWindows(W_ALL);
}
void CMainFrame::OnViewRealtimerebuild()
{
m_pCamWnd->ToggleRebuildMode();
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_REALTIMEREBUILD, MF_BYCOMMAND | (m_pCamWnd->GetRebuildMode()) ? MF_CHECKED : MF_UNCHECKED);
Sys_UpdateWindows(W_ALL);
}
void CMainFrame::OnViewRenderentityoutlines()
{
m_pCamWnd->ToggleEntityMode();
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_RENDERENTITYOUTLINES, MF_BYCOMMAND | (m_pCamWnd->GetEntityMode()) ? MF_CHECKED : MF_UNCHECKED);
Sys_UpdateWindows(W_ALL);
}
void CMainFrame::OnViewMaterialanimation()
{
m_pCamWnd->ToggleAnimationMode();
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_MATERIALANIMATION, MF_BYCOMMAND | (m_pCamWnd->GetAnimationMode()) ? MF_CHECKED : MF_UNCHECKED);
Sys_UpdateWindows(W_ALL);
}
extern void Face_SetAxialScale_BrushPrimit(face_t *face, bool y);
void CMainFrame::OnAxialTextureByWidth() {
// temp test code
int faceCount = g_ptrSelectedFaces.GetSize();
if (faceCount > 0) {
for (int i = 0; i < faceCount; i++) {
face_t *selFace = reinterpret_cast < face_t * > (g_ptrSelectedFaces.GetAt(i));
Face_SetAxialScale_BrushPrimit(selFace, false);
}
Sys_UpdateWindows(W_CAMERA);
}
}
void CMainFrame::OnAxialTextureByHeight() {
// temp test code
int faceCount = g_ptrSelectedFaces.GetSize();
if (faceCount > 0) {
for (int i = 0; i < faceCount; i++) {
face_t *selFace = reinterpret_cast < face_t * > (g_ptrSelectedFaces.GetAt(i));
Face_SetAxialScale_BrushPrimit(selFace, true);
}
Sys_UpdateWindows(W_CAMERA);
}
}
void CMainFrame::OnAxialTextureArbitrary() {
if (g_bAxialMode) {
g_bAxialMode = false;
}
int faceCount = g_ptrSelectedFaces.GetSize();
if (faceCount > 0) {
g_axialAnchor = 0;
g_axialDest = 1;
g_bAxialMode = true;
}
Sys_UpdateWindows(W_CAMERA);
}
extern void Select_ToOBJ();
void CMainFrame::OnSelectionExportToobj()
{
Select_ToOBJ();
}
extern void Select_ToCM();
void CMainFrame::OnSelectionExportToCM()
{
Select_ToCM();
}
void CMainFrame::OnSelectionWireFrameOff() {
Select_WireFrame( false );
}
void CMainFrame::OnSelectionWireFrameOn() {
Select_WireFrame( true );
}
void CMainFrame::OnSelectionVisibleOn() {
Select_ForceVisible( true );
}
void CMainFrame::OnSelectionVisibleOff() {
Select_ForceVisible( false );
}
void CMainFrame::OnViewRenderselection()
{
m_pCamWnd->ToggleSelectMode();
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_RENDERSELECTION, MF_BYCOMMAND | (m_pCamWnd->GetSelectMode()) ? MF_CHECKED : MF_UNCHECKED);
Sys_UpdateWindows(W_CAMERA);
}
void CMainFrame::OnSelectNomodels()
{
g_PrefsDlg.m_selectNoModels ^= 1;
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SELECT_NOMODELS, (g_PrefsDlg.m_selectNoModels) ? TRUE : FALSE);
}
void CMainFrame::OnViewShowShowvisportals()
{
if ((g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_VISPORTALS) & EXCLUDE_VISPORTALS) {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOW_SHOWVISPORTALS, MF_BYCOMMAND | MF_UNCHECKED);
}
else {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOW_SHOWVISPORTALS, MF_BYCOMMAND | MF_CHECKED);
}
Sys_UpdateWindows(W_XY | W_CAMERA);
}
void CMainFrame::OnViewShowNoDraw()
{
if ((g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_NODRAW) & EXCLUDE_NODRAW) {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOW_NODRAW, MF_BYCOMMAND | MF_UNCHECKED);
}
else {
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_SHOW_NODRAW, MF_BYCOMMAND | MF_CHECKED);
}
Sys_UpdateWindows(W_XY | W_CAMERA);
}
void CMainFrame::OnViewRendersound()
{
m_pCamWnd->ToggleSoundMode();
CheckMenuItem(::GetMenu(GetSafeHwnd()), ID_VIEW_RENDERSOUND, MF_BYCOMMAND | (m_pCamWnd->GetSoundMode()) ? MF_CHECKED : MF_UNCHECKED);
Sys_UpdateWindows(W_CAMERA);
}
void CMainFrame::OnSoundShowsoundvolumes()
{
g_qeglobals.d_savedinfo.showSoundAlways ^= 1;
if (g_qeglobals.d_savedinfo.showSoundAlways) {
g_qeglobals.d_savedinfo.showSoundWhenSelected = false;
}
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SOUND_SHOWSOUNDVOLUMES,g_qeglobals.d_savedinfo.showSoundAlways);
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SOUND_SHOWSELECTEDSOUNDVOLUMES,g_qeglobals.d_savedinfo.showSoundWhenSelected);
Sys_UpdateWindows(W_XY | W_CAMERA);
}
void CMainFrame::OnNurbEditor() {
nurbMode ^= 1;
if (nurbMode) {
int num = nurb.GetNumValues();
idStr temp = va("%i 3 ", num);
for (int i = 0; i < num; i++) {
temp += va("(%i %i) ", (int)nurb.GetValue(i).x, (int)nurb.GetValue(i).y);
}
temp += "\r\n";
if (OpenClipboard()) {
::EmptyClipboard();
HGLOBAL clip;
char* buff;
clip = ::GlobalAlloc(GMEM_DDESHARE, temp.Length()+1);
buff = (char*)::GlobalLock(clip);
strcpy(buff, temp);
::GlobalUnlock(clip);
::SetClipboardData(CF_TEXT, clip);
::CloseClipboard();
}
nurb.Clear();
}
}
void CMainFrame::OnSoundShowselectedsoundvolumes()
{
g_qeglobals.d_savedinfo.showSoundWhenSelected ^= 1;
if (g_qeglobals.d_savedinfo.showSoundWhenSelected) {
g_qeglobals.d_savedinfo.showSoundAlways = false;
}
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SOUND_SHOWSOUNDVOLUMES,g_qeglobals.d_savedinfo.showSoundAlways);
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_SOUND_SHOWSELECTEDSOUNDVOLUMES,g_qeglobals.d_savedinfo.showSoundWhenSelected);
Sys_UpdateWindows(W_XY | W_CAMERA);
}
void CMainFrame::OnSelectAlltargets()
{
Select_AllTargets();
}
void CMainFrame::OnSelectCompleteEntity()
{
brush_t* b = NULL;
entity_t* e = NULL;
b = selected_brushes.next;
if ( b == &selected_brushes )
{
return; //no brushes selected
}
e = b->owner;
if ( b->owner == world_entity )
{
return; //don't select the world entity
}
for (b = e->brushes.onext; b != &e->brushes; b = b->onext)
{
Select_Brush ( b , false );
}
Sys_UpdateWindows ( W_ALL );
}
//---------------------------------------------------------------------------
// OnPrecisionCursorCycle
//
// Called when the user presses the "cycle precision cursor mode" key.
// Cycles the precision cursor among the following three modes:
// PRECISION_CURSOR_NONE
// PRECISION_CURSOR_SNAP
// PRECISION_CURSOR_FREE
//---------------------------------------------------------------------------
void CMainFrame::OnPrecisionCursorCycle()
{
m_pActiveXY->CyclePrecisionCrosshairMode();
}
void CMainFrame::OnGenerateMaterialsList()
{
idStrList mtrList;
idStr mtrName,mtrFileName;
g_Inspectors->consoleWnd.ExecuteCommand ( "clear" );
Sys_BeginWait ();
common->Printf ( "Generating list of active materials...\n" );
for ( brush_t* b = active_brushes.next ; b != &active_brushes ; b=b->next ) {
if ( b->pPatch ){
mtrName = b->pPatch->d_texture->GetName();
if ( !mtrList.Find( mtrName) ) {
mtrList.Insert ( mtrName );
}
}
else {
for ( face_t* f = b->brush_faces ; f != NULL ; f=f->next)
{
mtrName = f->d_texture->GetName();
if ( !mtrList.Find( mtrName) ) {
mtrList.Insert ( mtrName );
}
}
}
}
mtrList.Sort();
for ( int i = 0 ; i < mtrList.Num() ; i++ ) {
common->Printf ( "%s\n" , mtrList[i].c_str());
}
mtrFileName = currentmap;
// mtrFileName.ExtractFileName( mtrFileName );
mtrFileName = mtrFileName.StripPath();
common->Printf ( "Done...found %i unique materials\n" , mtrList.Num());
mtrFileName = mtrFileName + idStr ( "_Materials.txt" );
g_Inspectors->SetMode ( W_CONSOLE , true );
g_Inspectors->consoleWnd.SetConsoleText ( va ( "condump %s" , mtrFileName.c_str()) );
Sys_EndWait ();
}
/*
=======================================================================================================================
=======================================================================================================================
*/
void CMainFrame::OnSplinesAddPoints() {
g_Inspectors->entityDlg.AddCurvePoints();
}
void CMainFrame::OnSplinesEditPoints() {
g_Inspectors->entityDlg.EditCurvePoints();
}
void CMainFrame::OnSplinesDeletePoint() {
g_Inspectors->entityDlg.DeleteCurvePoint();
}
void CMainFrame::OnSplinesInsertPoint() {
g_Inspectors->entityDlg.InsertCurvePoint();
}