OpenClonk
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros
C4EditCursor Class Reference

#include <C4EditCursor.h>

Collaboration diagram for C4EditCursor:
[legend]

Classes

struct  ObjselItemDt
 

Public Member Functions

 C4EditCursor ()
 
 ~C4EditCursor ()
 
void Default ()
 
void Clear ()
 
void Execute ()
 
void ClearPointers (C4Object *pObj)
 
bool ToggleMode ()
 
void Draw (C4TargetFacet &cgo)
 
int32_t GetMode ()
 
C4ObjectGetTarget ()
 
bool SetMode (int32_t iMode)
 
bool In (const char *szText)
 
bool Duplicate ()
 
bool OpenPropTools ()
 
bool Delete ()
 
void GrabContents ()
 
bool LeftButtonUp (DWORD dwKeyState)
 
bool LeftButtonDown (DWORD dwKeyState)
 
bool RightButtonUp (DWORD dwKeyState)
 
bool RightButtonDown (DWORD dwKeyState)
 
bool KeyDown (C4KeyCode KeyCode, DWORD dwKeyState)
 
bool KeyUp (C4KeyCode KeyCode, DWORD dwKeyState)
 
bool Move (float iX, float iY, float zoom, DWORD dwKeyState)
 
bool Move (DWORD new_key_state)
 
bool Init ()
 
bool EditingOK (bool for_landscape_drawing=false)
 
C4EditCursorSelectionGetSelection ()
 
void SetHold (bool fToState)
 
void OnSelectionChanged (bool by_objectlist=false)
 
bool AltDown ()
 
bool AltUp ()
 
void SetMouseHover (bool h)
 
bool HasTransformCursor () const
 
bool IsHoveringTransformMarker () const
 
void DoContextObjsel (C4Object *, bool clear)
 
void PerformDuplication (int32_t *object_numbers, int32_t object_count, bool local_call)
 
void PerformDuplicationLegacy (int32_t *pObjects, int32_t iObjectNum, bool fLocalCall)
 
void AddToSelection (C4PropList *add_obj)
 
bool RemoveFromSelection (C4PropList *remove_obj)
 
void ClearSelection (C4PropList *next_selection=nullptr)
 
void SetCreatorDef (C4Def *new_def)
 
C4DefGetCreatorDef ()
 
void EMControl (enum C4PacketType eCtrlType, class C4ControlPacket *pCtrl)
 
void InvalidateSelection ()
 
void ValidateSelection ()
 
bool IsSelectionInvalidated () const
 
bool GetCurrentSelectionPosition (int32_t *x, int32_t *y)
 
void SetHighlightedObject (C4Object *new_highlight)
 

Protected Member Functions

void UpdateStatusBar ()
 
void ApplyCreateObject (bool contained)
 
void ApplyToolPicker ()
 
void ToolFailure ()
 
void PutContents ()
 
void UpdateDropTarget (DWORD dwKeyState)
 
bool DoContextMenu (DWORD dwKeyState)
 
void AppendMenuItem (int num, const StdStrBuf &label)
 
void ApplyToolFill ()
 
void ApplyToolRect ()
 
void ApplyToolLine ()
 
void ApplyToolBrush ()
 
void DrawObject (C4TargetFacet &cgo, C4Object *cobj, uint32_t select_mark_color, bool highlight, bool draw_transform_marker)
 
void DrawSelectMark (C4Facet &cgo, FLOAT_RECT r, float width, uint32_t color=0xffffffff)
 
bool HasTransformMarker (float *x, float *y, float zoom) const
 
void FrameSelection ()
 
void MoveSelection (C4Real iXOff, C4Real iYOff, bool drag_finished)
 
void EMMoveObject (enum C4ControlEMObjectAction eAction, C4Real tx, C4Real ty, C4Object *pTargetObj, const C4EditCursorSelection *pObjs=nullptr, const char *szScript=nullptr, bool drag_finished=false)
 
void DoContextObjCommand (C4Object *, const char *cmd)
 
void ObjselectDelItems ()
 

Protected Attributes

bool fAltWasDown
 
bool fShiftWasDown
 
bool has_mouse_hover
 
bool selection_invalid
 
int32_t Mode
 
float X
 
float Y
 
float X2
 
float Y2
 
float Zoom
 
bool Hold
 
bool DragFrame
 
bool DragLine
 
bool DragShape
 
bool DragTransform
 
int32_t DragRot0
 
int32_t DragCon0
 
int32_t DragRotLast
 
int32_t DragConLast
 
C4ObjectTarget
 
C4ObjectDropTarget
 
C4Value highlighted_object
 
class C4Defcreator_def
 
std::unique_ptr
< C4GraphicsOverlay
creator_overlay
 
std::vector< ObjselItemDtitemsObjselect
 
C4EditCursorSelection selection
 

Detailed Description

Definition at line 43 of file C4EditCursor.h.


Class Documentation

struct C4EditCursor::ObjselItemDt

Definition at line 62 of file C4EditCursor.h.

Collaboration diagram for C4EditCursor::ObjselItemDt:
[legend]
Class Members
StdCopyStrBuf Command
C4EditCursor * EditCursor
C4Object * Object

Constructor & Destructor Documentation

C4EditCursor::C4EditCursor ( )

Definition at line 128 of file C4EditCursor.cpp.

130  : shapes(new C4ConsoleQtShapes())
131 #endif
132 {
133  Default();
134 }
C4EditCursor::~C4EditCursor ( )

Definition at line 136 of file C4EditCursor.cpp.

References Clear().

137 {
138  Clear();
139 }

Here is the call graph for this function:

Member Function Documentation

void C4EditCursor::AddToSelection ( C4PropList add_obj)

Definition at line 331 of file C4EditCursor.cpp.

References C4VPropList(), C4PropList::GetObject(), C4EditCursorSelection::IsContained(), selection, and C4PropList::Status.

Referenced by DoContextObjsel(), FrameSelection(), GrabContents(), LeftButtonDown(), and RightButtonDown().

332 {
333  if (!add_proplist) return;
334  C4Object *add_obj = add_proplist->GetObject();
335  if (add_obj && !add_obj->Status) return;
336  if (selection.IsContained(add_proplist)) return;
337  // add object to selection and do script callback
338  selection.push_back(C4VPropList(add_proplist));
339 }
bool IsContained(C4PropList *obj) const
virtual C4Object * GetObject()
Definition: C4PropList.cpp:667
C4Value C4VPropList(C4PropList *p)
Definition: C4Value.h:245
int32_t Status
Definition: C4PropList.h:168
C4EditCursorSelection selection
Definition: C4EditCursor.h:75

Here is the call graph for this function:

Here is the caller graph for this function:

bool C4EditCursor::AltDown ( )

Definition at line 1413 of file C4EditCursor.cpp.

References C4CNS_ModeDraw, Console, Mode, C4ToolsDlg::SetAlternateTool(), and C4Console::ToolsDlg.

Referenced by KeyDown(), KeyUp(), and Move().

1414 {
1415  // alt only has an effect in draw mode (picker)
1416  if (Mode == C4CNS_ModeDraw)
1417  {
1419  }
1420  // key not processed - allow further usages of Alt
1421  return false;
1422 }
C4Console Console
Definition: C4Globals.cpp:45
void SetAlternateTool()
Definition: C4ToolsDlg.cpp:284
C4ToolsDlg ToolsDlg
Definition: C4Console.h:88
const int C4CNS_ModeDraw
Definition: C4Console.h:33
int32_t Mode
Definition: C4EditCursor.h:54

Here is the call graph for this function:

Here is the caller graph for this function:

bool C4EditCursor::AltUp ( )

Definition at line 1424 of file C4EditCursor.cpp.

References C4CNS_ModeDraw, Console, Mode, C4ToolsDlg::ResetAlternateTool(), and C4Console::ToolsDlg.

Referenced by KeyDown(), KeyUp(), and Move().

1425 {
1426  if (Mode == C4CNS_ModeDraw)
1427  {
1429  }
1430  // key not processed - allow further usages of Alt
1431  return false;
1432 }
C4Console Console
Definition: C4Globals.cpp:45
C4ToolsDlg ToolsDlg
Definition: C4Console.h:88
void ResetAlternateTool()
Definition: C4ToolsDlg.cpp:290
const int C4CNS_ModeDraw
Definition: C4Console.h:33
int32_t Mode
Definition: C4EditCursor.h:54

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::AppendMenuItem ( int  num,
const StdStrBuf label 
)
protected

Definition at line 1110 of file C4EditCursor.cpp.

References IDM_VPORTDYN_FIRST, and itemsObjselect.

Referenced by DoContextMenu().

1111 {
1112 #ifdef USE_WIN32_WINDOWS
1113  itemsObjselect[num].ItemId = IDM_VPORTDYN_FIRST + num;
1114  if (num)
1115  AppendMenu(GetSubMenu(hMenu,0), MF_STRING, IDM_VPORTDYN_FIRST + num, label.GetWideChar());
1116  else
1117  AppendMenu(GetSubMenu(hMenu,0), MF_SEPARATOR, IDM_VPORTDYN_FIRST, nullptr);
1118 #endif
1119 }
std::vector< ObjselItemDt > itemsObjselect
Definition: C4EditCursor.h:70
#define IDM_VPORTDYN_FIRST
Definition: resource.h:94

Here is the caller graph for this function:

void C4EditCursor::ApplyCreateObject ( bool  contained)
protected

Definition at line 1069 of file C4EditCursor.cpp.

References CID_EMMoveObj, C4ControlEMMoveObject::CreateObject(), creator_def, DropTarget, EditingOK(), EMControl(), ftofix(), C4Def::id, X, and Y.

Referenced by LeftButtonDown().

1070 {
1071  if (!EditingOK()) return;
1072  if (!creator_def) return;
1073  if (container && !DropTarget) return;
1074  // execute/send control
1076 }
C4ID id
Definition: C4Def.h:101
void EMControl(enum C4PacketType eCtrlType, class C4ControlPacket *pCtrl)
class C4Def * creator_def
Definition: C4EditCursor.h:60
C4Fixed ftofix(float x)
Definition: C4Real.h:258
C4Object * DropTarget
Definition: C4EditCursor.h:58
static C4ControlEMMoveObject * CreateObject(const C4ID &id, C4Real x, C4Real y, C4Object *container)
Definition: C4Control.cpp:1214
bool EditingOK(bool for_landscape_drawing=false)

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::ApplyToolBrush ( )
protected

Definition at line 1078 of file C4EditCursor.cpp.

References C4ToolsDlg::BackMaterial, C4ToolsDlg::BackTexture, CID_EMDrawTool, Console, EditingOK(), EMControl(), EMDT_Brush, C4Landscape::GetMode(), C4ToolsDlg::Grade, Landscape, C4ToolsDlg::Material, C4ToolsDlg::Texture, C4Console::ToolsDlg, X, and Y.

Referenced by LeftButtonDown(), and Move().

1079 {
1080  if (!EditingOK(true)) return;
1081  C4ToolsDlg *pTools=&Console.ToolsDlg;
1082  // execute/send control
1083  EMControl(CID_EMDrawTool, new C4ControlEMDrawTool(EMDT_Brush, ::Landscape.GetMode(), X,Y,0,0, pTools->Grade, pTools->Material, pTools->Texture, pTools->BackMaterial, pTools->BackTexture));
1084 }
C4Console Console
Definition: C4Globals.cpp:45
C4ToolsDlg ToolsDlg
Definition: C4Console.h:88
int32_t Grade
Definition: C4ToolsDlg.h:54
char Texture[C4M_MaxName+1]
Definition: C4ToolsDlg.h:57
void EMControl(enum C4PacketType eCtrlType, class C4ControlPacket *pCtrl)
C4Landscape Landscape
char Material[C4M_MaxName+1]
Definition: C4ToolsDlg.h:56
LandscapeMode GetMode() const
char BackMaterial[C4M_MaxName+1]
Definition: C4ToolsDlg.h:59
char BackTexture[C4M_MaxName+1]
Definition: C4ToolsDlg.h:60
bool EditingOK(bool for_landscape_drawing=false)

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::ApplyToolFill ( )
protected

Definition at line 1102 of file C4EditCursor.cpp.

References CID_EMDrawTool, Console, EditingOK(), EMControl(), EMDT_Fill, C4Landscape::GetMode(), C4ToolsDlg::Grade, Landscape, C4ToolsDlg::Material, C4Console::ToolsDlg, X, Y, and Y2.

Referenced by Execute().

1103 {
1104  if (!EditingOK(true)) return;
1105  C4ToolsDlg *pTools=&Console.ToolsDlg;
1106  // execute/send control
1107  EMControl(CID_EMDrawTool, new C4ControlEMDrawTool(EMDT_Fill, ::Landscape.GetMode(), X,Y,0,Y2, pTools->Grade, pTools->Material, nullptr, nullptr, nullptr));
1108 }
C4Console Console
Definition: C4Globals.cpp:45
C4ToolsDlg ToolsDlg
Definition: C4Console.h:88
int32_t Grade
Definition: C4ToolsDlg.h:54
void EMControl(enum C4PacketType eCtrlType, class C4ControlPacket *pCtrl)
C4Landscape Landscape
char Material[C4M_MaxName+1]
Definition: C4ToolsDlg.h:56
LandscapeMode GetMode() const
bool EditingOK(bool for_landscape_drawing=false)

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::ApplyToolLine ( )
protected

Definition at line 1086 of file C4EditCursor.cpp.

References C4ToolsDlg::BackMaterial, C4ToolsDlg::BackTexture, CID_EMDrawTool, Console, EditingOK(), EMControl(), EMDT_Line, C4Landscape::GetMode(), C4ToolsDlg::Grade, Landscape, C4ToolsDlg::Material, C4ToolsDlg::Texture, C4Console::ToolsDlg, X, X2, Y, and Y2.

Referenced by LeftButtonUp().

1087 {
1088  if (!EditingOK(true)) return;
1089  C4ToolsDlg *pTools=&Console.ToolsDlg;
1090  // execute/send control
1091  EMControl(CID_EMDrawTool, new C4ControlEMDrawTool(EMDT_Line, ::Landscape.GetMode(), X,Y,X2,Y2, pTools->Grade, pTools->Material,pTools->Texture, pTools->BackMaterial, pTools->BackTexture));
1092 }
C4Console Console
Definition: C4Globals.cpp:45
C4ToolsDlg ToolsDlg
Definition: C4Console.h:88
int32_t Grade
Definition: C4ToolsDlg.h:54
char Texture[C4M_MaxName+1]
Definition: C4ToolsDlg.h:57
void EMControl(enum C4PacketType eCtrlType, class C4ControlPacket *pCtrl)
C4Landscape Landscape
char Material[C4M_MaxName+1]
Definition: C4ToolsDlg.h:56
LandscapeMode GetMode() const
char BackMaterial[C4M_MaxName+1]
Definition: C4ToolsDlg.h:59
char BackTexture[C4M_MaxName+1]
Definition: C4ToolsDlg.h:60
bool EditingOK(bool for_landscape_drawing=false)

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::ApplyToolPicker ( )
protected

Definition at line 1307 of file C4EditCursor.cpp.

References C4TLS_MatSky, Console, Exact, GBackMat(), C4Landscape::GetBackMapIndex(), C4Landscape::GetBackPix(), C4TextureMap::GetEntry(), C4Landscape::GetMapIndex(), C4Landscape::GetMapZoom(), C4TexMapEntry::GetMaterialName(), C4Landscape::GetMode(), C4TexMapEntry::GetTextureName(), Hold, C4TexMapEntry::isNull(), Landscape, C4MaterialMap::Map, MaterialMap, MatValid(), C4ToolsDlg::ModeBack, C4MaterialCore::Name, C4ToolsDlg::SelectBackMaterial(), C4ToolsDlg::SelectBackTexture(), C4ToolsDlg::SelectMaterial(), C4ToolsDlg::SelectTexture(), C4ToolsDlg::SetIFT(), Static, TextureMap, C4Console::ToolsDlg, X, and Y.

Referenced by LeftButtonDown().

1308 {
1309  int32_t iMaterial;
1310  BYTE byIndex;
1311  switch (::Landscape.GetMode())
1312  {
1313  case LandscapeMode::Static:
1314  {
1315  bool material_set = false;
1316  int32_t x = X/::Landscape.GetMapZoom();
1317  int32_t y = Y/::Landscape.GetMapZoom();
1318  // Material-texture from map
1319  if ((byIndex = ::Landscape.GetMapIndex(x, y)))
1320  {
1321  const C4TexMapEntry *pTex = ::TextureMap.GetEntry(byIndex);
1322  if (pTex && pTex->GetMaterialName() && *pTex->GetMaterialName())
1323  {
1324  const BYTE byIndexBkg = Landscape.GetBackMapIndex(x, y);
1327 
1328  // Set background index if GUI backend supports it
1330  {
1331  const C4TexMapEntry *pBgTex = ::TextureMap.GetEntry(byIndexBkg);
1332  if (pBgTex && !pBgTex->isNull())
1333  {
1336  }
1337  else
1338  {
1340  }
1341  }
1342  else
1343  {
1344  Console.ToolsDlg.SetIFT(byIndexBkg != 0);
1345  }
1346 
1347  material_set = true;
1348  }
1349  }
1350  // default to sky, because invalid materials are always rendered as sky
1351  if (!material_set) Console.ToolsDlg.SelectMaterial(C4TLS_MatSky);
1352  break;
1353  }
1354  case LandscapeMode::Exact:
1355  // Material only from landscape
1356  if (MatValid(iMaterial=GBackMat(X,Y)))
1357  {
1360  }
1361  else
1363  break;
1364  }
1365  Hold=false;
1366 }
C4Console Console
Definition: C4Globals.cpp:45
C4ToolsDlg ToolsDlg
Definition: C4Console.h:88
C4Material * Map
Definition: C4Material.h:169
uint8_t BYTE
C4TextureMap TextureMap
Definition: C4Texture.cpp:576
const C4TexMapEntry * GetEntry(int32_t iIndex) const
Definition: C4Texture.h:85
Definition: C4Texture.h:48
const char * GetMaterialName() const
Definition: C4Texture.h:60
char Name[C4M_MaxName+1]
Definition: C4Material.h:89
const char * GetTextureName() const
Definition: C4Texture.h:61
C4Landscape Landscape
bool SetIFT(bool fIFT)
Definition: C4ToolsDlg.cpp:131
BYTE GetBackMapIndex(int32_t iX, int32_t iY) const
bool isNull() const
Definition: C4Texture.h:59
LandscapeMode GetMode() const
bool SelectBackTexture(const char *szTexture, bool by_console_gui=false)
Definition: C4ToolsDlg.cpp:270
BYTE GetMapIndex(int32_t iX, int32_t iY) const
bool ModeBack
Definition: C4ToolsDlg.h:58
BYTE GetBackPix(int32_t x, int32_t y) const
bool SelectBackMaterial(const char *szMaterial, bool by_console_gui=false)
Definition: C4ToolsDlg.cpp:277
int32_t GetMapZoom() const
C4MaterialMap MaterialMap
Definition: C4Material.cpp:970
#define C4TLS_MatSky
Definition: C4ToolsDlg.h:39
bool SelectMaterial(const char *szMaterial, bool by_console_gui=false)
Definition: C4ToolsDlg.cpp:263
bool SelectTexture(const char *szTexture, bool by_console_gui=false)
Definition: C4ToolsDlg.cpp:256
bool MatValid(int32_t mat)
Definition: C4Material.h:210
int32_t GBackMat(int32_t x, int32_t y)
Definition: C4Landscape.h:221

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::ApplyToolRect ( )
protected

Definition at line 1094 of file C4EditCursor.cpp.

References C4ToolsDlg::BackMaterial, C4ToolsDlg::BackTexture, CID_EMDrawTool, Console, EditingOK(), EMControl(), EMDT_Rect, C4Landscape::GetMode(), C4ToolsDlg::Grade, Landscape, C4ToolsDlg::Material, C4ToolsDlg::Texture, C4Console::ToolsDlg, X, X2, Y, and Y2.

Referenced by LeftButtonUp().

1095 {
1096  if (!EditingOK(true)) return;
1097  C4ToolsDlg *pTools=&Console.ToolsDlg;
1098  // execute/send control
1099  EMControl(CID_EMDrawTool, new C4ControlEMDrawTool(EMDT_Rect, ::Landscape.GetMode(), X,Y,X2,Y2, pTools->Grade, pTools->Material, pTools->Texture, pTools->BackMaterial, pTools->BackTexture));
1100 }
C4Console Console
Definition: C4Globals.cpp:45
C4ToolsDlg ToolsDlg
Definition: C4Console.h:88
int32_t Grade
Definition: C4ToolsDlg.h:54
char Texture[C4M_MaxName+1]
Definition: C4ToolsDlg.h:57
void EMControl(enum C4PacketType eCtrlType, class C4ControlPacket *pCtrl)
C4Landscape Landscape
char Material[C4M_MaxName+1]
Definition: C4ToolsDlg.h:56
LandscapeMode GetMode() const
char BackMaterial[C4M_MaxName+1]
Definition: C4ToolsDlg.h:59
char BackTexture[C4M_MaxName+1]
Definition: C4ToolsDlg.h:60
bool EditingOK(bool for_landscape_drawing=false)

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::Clear ( )

Definition at line 988 of file C4EditCursor.cpp.

References Console, creator_overlay, ObjselectDelItems(), C4ConsoleGUI::PropertyDlgUpdate(), and selection.

Referenced by C4Console::Clear(), C4Application::Clear(), C4Game::Clear(), and ~C4EditCursor().

989 {
990 #ifdef USE_WIN32_WINDOWS
991  if (hMenu) DestroyMenu(hMenu); hMenu=nullptr;
992 #endif
993 #ifdef WITH_DEBUG_MODE
995 #endif
996  selection.clear();
998  creator_overlay.reset(nullptr);
999 #ifdef WITH_QT_EDITOR
1000  shapes->ClearShapes(); // Should really be empty already
1001 #endif
1002 }
C4Console Console
Definition: C4Globals.cpp:45
std::unique_ptr< C4GraphicsOverlay > creator_overlay
Definition: C4EditCursor.h:61
void ObjselectDelItems()
void PropertyDlgUpdate(class C4EditCursorSelection &rSelection, bool force_function_update)
Definition: C4Console.cpp:687
C4EditCursorSelection selection
Definition: C4EditCursor.h:75

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::ClearPointers ( C4Object pObj)

Definition at line 182 of file C4EditCursor.cpp.

References C4EditCursorSelection::ClearPointers(), OnSelectionChanged(), selection, and Target.

Referenced by C4Console::ClearPointers().

183 {
184  if (Target==pObj) Target=nullptr;
185  if (selection.ClearPointers(pObj))
187 }
C4Object * Target
Definition: C4EditCursor.h:58
bool ClearPointers(C4Object *obj)
void OnSelectionChanged(bool by_objectlist=false)
C4EditCursorSelection selection
Definition: C4EditCursor.h:75

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::ClearSelection ( C4PropList next_selection = nullptr)

Definition at line 352 of file C4EditCursor.cpp.

References selection.

Referenced by DoContextObjsel(), FrameSelection(), GrabContents(), LeftButtonDown(), and RightButtonDown().

353 {
354  // remove everything from selection
355  selection.clear();
356 }
C4EditCursorSelection selection
Definition: C4EditCursor.h:75

Here is the caller graph for this function:

void C4EditCursor::Default ( )

Definition at line 969 of file C4EditCursor.cpp.

References C4CNS_ModeEdit, creator_def, creator_overlay, DragCon0, DragConLast, DragFrame, DragLine, DragRot0, DragRotLast, DragShape, DragTransform, DropTarget, fAltWasDown, fShiftWasDown, FullCon, has_mouse_hover, Hold, Mode, selection, selection_invalid, Target, X, X2, Y, and Y2.

Referenced by C4Console::Default().

970 {
971  fAltWasDown=false;
972  fShiftWasDown=false;
974  X=Y=X2=Y2=0;
975  Target=DropTarget=nullptr;
976 #ifdef USE_WIN32_WINDOWS
977  hMenu=nullptr;
978 #endif
980  selection.clear();
981  creator_def = nullptr;
982  creator_overlay = nullptr;
983  has_mouse_hover = false;
984  selection_invalid = false;
986 }
int32_t DragCon0
Definition: C4EditCursor.h:57
bool DragTransform
Definition: C4EditCursor.h:56
C4Object * Target
Definition: C4EditCursor.h:58
std::unique_ptr< C4GraphicsOverlay > creator_overlay
Definition: C4EditCursor.h:61
int32_t DragRot0
Definition: C4EditCursor.h:57
bool selection_invalid
Definition: C4EditCursor.h:53
const int C4CNS_ModeEdit
Definition: C4Console.h:31
const int32_t FullCon
Definition: C4Constants.h:181
bool fAltWasDown
Definition: C4EditCursor.h:50
class C4Def * creator_def
Definition: C4EditCursor.h:60
int32_t DragConLast
Definition: C4EditCursor.h:57
C4Object * DropTarget
Definition: C4EditCursor.h:58
bool fShiftWasDown
Definition: C4EditCursor.h:51
int32_t Mode
Definition: C4EditCursor.h:54
C4EditCursorSelection selection
Definition: C4EditCursor.h:75
int32_t DragRotLast
Definition: C4EditCursor.h:57
bool has_mouse_hover
Definition: C4EditCursor.h:52

Here is the caller graph for this function:

bool C4EditCursor::Delete ( )

Definition at line 605 of file C4EditCursor.cpp.

References Control, EditingOK(), EMMO_Remove, EMMoveObject(), Fix0, C4GameControl::isCtrlHost(), OnSelectionChanged(), and selection.

Referenced by DoContextMenu(), and C4Game::InitKeyboard().

606 {
607  if (!EditingOK()) return false;
609  if (::Control.isCtrlHost())
610  {
612  }
613  return true;
614 }
bool isCtrlHost() const
Definition: C4GameControl.h:99
void EMMoveObject(enum C4ControlEMObjectAction eAction, C4Real tx, C4Real ty, C4Object *pTargetObj, const C4EditCursorSelection *pObjs=nullptr, const char *szScript=nullptr, bool drag_finished=false)
void OnSelectionChanged(bool by_objectlist=false)
C4GameControl Control
C4EditCursorSelection selection
Definition: C4EditCursor.h:75
bool EditingOK(bool for_landscape_drawing=false)
const C4Real Fix0
Definition: C4Real.h:312

Here is the call graph for this function:

Here is the caller graph for this function:

bool C4EditCursor::DoContextMenu ( DWORD  dwKeyState)
protected

Definition at line 1121 of file C4EditCursor.cpp.

References AppendMenuItem(), Console, C4Object::Contents, StdStrBuf::Copy(), Delete(), DoContextObjCommand(), DoContextObjsel(), Duplicate(), C4ConsoleGUI::Editing, C4FindObject::FindMany(), StdStrBuf::Format(), FormatString(), C4String::GetData(), StdStrBuf::getData(), C4Value::getFunction(), C4ValueArray::GetItem(), StdStrBuf::getLength(), C4AulFunc::GetName(), C4PropList::GetName(), C4EditCursorSelection::GetObject(), C4PropList::GetPropertyArray(), C4ValueArray::GetSize(), C4Value::getStr(), C4Object::GetX(), C4Object::GetY(), GrabContents(), IDM_VIEWPORT_CONTENTS, IDM_VIEWPORT_DELETE, IDM_VIEWPORT_DUPLICATE, IDM_VPORTDYN_FIRST, itemsObjselect, LoadResStr(), C4PropListNumbered::Number, C4ObjectList::ObjectCount(), Objects, ObjselectDelItems(), P_EditCursorCommands, C4GameObjects::Sectors, selection, SetMenuItemText(), X, and Y.

Referenced by RightButtonUp().

1122 {
1123  bool fObjectSelected = !!selection.GetObject();
1124 #ifdef USE_WIN32_WINDOWS
1125  POINT point; GetCursorPos(&point);
1126  HMENU hContext = GetSubMenu(hMenu,0);
1127  SetMenuItemEnable(hContext, IDM_VIEWPORT_DELETE, fObjectSelected && Console.Editing);
1128  SetMenuItemEnable(hContext, IDM_VIEWPORT_DUPLICATE, fObjectSelected && Console.Editing);
1129  SetMenuItemEnable(hContext, IDM_VIEWPORT_CONTENTS, fObjectSelected && selection.GetObject()->Contents.ObjectCount() && Console.Editing);
1130  SetMenuItemText(hContext,IDM_VIEWPORT_DELETE,LoadResStr("IDS_MNU_DELETE"));
1131  SetMenuItemText(hContext,IDM_VIEWPORT_DUPLICATE,LoadResStr("IDS_MNU_DUPLICATE"));
1132  SetMenuItemText(hContext,IDM_VIEWPORT_CONTENTS,LoadResStr("IDS_MNU_CONTENTS"));
1133 #endif
1134 
1135  // Add selection and custom command entries for any objects at the cursor
1136  ObjselectDelItems(); // clear previous entries
1137  C4FindObjectAtPoint pFO(X,Y);
1138  C4ValueArray * atcursor; atcursor = pFO.FindMany(::Objects, ::Objects.Sectors); // needs freeing (single object ptr)
1139  int itemcount = atcursor->GetSize();
1140  if(itemcount > 0)
1141  {
1142  // Count required entries for all objects and their custom commands
1143  int entrycount = itemcount;
1144  for (int i_item = 0; i_item < itemcount; ++i_item)
1145  {
1146  C4Object *pObj = (*atcursor)[i_item].getObj(); assert(pObj);
1147  C4ValueArray *custom_commands = pObj->GetPropertyArray(P_EditCursorCommands);
1148  if (custom_commands) entrycount += custom_commands->GetSize();
1149  }
1150 #ifdef USE_WIN32_WINDOWS
1151  // If too many entries would be shown, add a "..." in the end
1152  const int maxentries = 25; // Maximum displayed objects. if you raise it, also change note with IDM_VPORTDYN_FIRST in resource.h
1153  bool has_too_many_entries = (entrycount > maxentries);
1154  if (has_too_many_entries) entrycount = maxentries + 1;
1155 #else
1156  const int maxentries = std::numeric_limits<int>::max();
1157 #endif
1158  itemsObjselect.resize(entrycount + 1); // +1 for a separator
1159  // Add a separator bar
1160  itemsObjselect[0].Object = nullptr;
1161  itemsObjselect[0].Command.Clear();
1162  itemsObjselect[0].EditCursor = this;
1163  AppendMenuItem(0, StdStrBuf());
1164  // Add all objects
1165  int i_entry = 0;
1166  for (int i_item = 0; i_item < itemcount; ++i_item)
1167  {
1168  ++i_entry; if (i_entry >= maxentries) break;
1169  // Add selection entry
1170  C4Object *obj = (*atcursor)[i_item].getObj();
1171  assert(obj);
1172  itemsObjselect[i_entry].Object = obj;
1173  itemsObjselect[i_entry].Command.Clear();
1174  itemsObjselect[i_entry].EditCursor = this;
1175  AppendMenuItem(i_entry, FormatString("%s #%i (%i/%i)", obj->GetName(), obj->Number, obj->GetX(), obj->GetY()));
1176 
1177  // Add custom command entries
1178  C4ValueArray *custom_commands = obj->GetPropertyArray(P_EditCursorCommands);
1179  if (custom_commands) for (int i_cmd = 0; i_cmd < custom_commands->GetSize(); ++i_cmd)
1180  {
1181  ++i_entry; if (i_entry >= maxentries) break;
1182  const C4Value &cmd = custom_commands->GetItem(i_cmd);
1183  StdStrBuf custom_command_szstr; C4AulFunc *custom_command; C4String *custom_command_string;
1184  // Custom command either by string or by function pointer
1185  if ((custom_command = cmd.getFunction()))
1186  custom_command_szstr.Format("%s()", custom_command->GetName());
1187  else if ((custom_command_string = cmd.getStr()))
1188  custom_command_szstr.Copy(custom_command_string->GetData()); // copy just in case script get reloaded inbetween
1189  if (custom_command_szstr.getLength())
1190  {
1191  itemsObjselect[i_entry].Object = obj;
1192  itemsObjselect[i_entry].Command.Take(custom_command_szstr);
1193  itemsObjselect[i_entry].EditCursor = this;
1194  AppendMenuItem(i_entry, FormatString("%s->%s", obj->GetName(), custom_command_szstr.getData()));
1195  }
1196  }
1197  }
1198 #ifdef USE_WIN32_WINDOWS
1199  if (has_too_many_entries)
1200  {
1201  AppendMenu(hContext, MF_GRAYED, IDM_VPORTDYN_FIRST + maxentries + 1, L"...");
1202  itemsObjselect[maxentries + 1].ItemId = IDM_VPORTDYN_FIRST + maxentries + 1;
1203  itemsObjselect[maxentries + 1].Object = nullptr;
1204  itemsObjselect[maxentries + 1].Command.Clear();
1205  }
1206 #endif
1207  }
1208  delete atcursor;
1209 
1210 #ifdef USE_WIN32_WINDOWS
1211  int32_t iItem = TrackPopupMenu(
1212  hContext,
1213  TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RETURNCMD | TPM_LEFTBUTTON | TPM_NONOTIFY,
1214  point.x,point.y, 0,
1215  Console.hWindow,
1216  nullptr);
1217  switch (iItem)
1218  {
1219  case IDM_VIEWPORT_DELETE: Delete(); break;
1220  case IDM_VIEWPORT_DUPLICATE: Duplicate(); break;
1221  case IDM_VIEWPORT_CONTENTS: GrabContents(); break;
1222  case 0: break;
1223  default:
1224  for(std::vector<ObjselItemDt>::iterator it = itemsObjselect.begin() + 1; it != itemsObjselect.end(); ++it)
1225  if(it->ItemId == iItem)
1226  {
1227  if (it->Command.getLength())
1228  DoContextObjCommand(it->Object, it->Command.getData());
1229  else
1230  DoContextObjsel(it->Object, (dwKeyState & MK_SHIFT) == 0);
1231  break;
1232  }
1233  break;
1234  }
1236 #endif
1237  return true;
1238 }
const char * getData() const
Definition: StdBuf.h:442
int32_t GetY() const
Definition: C4Object.h:287
StdStrBuf GetData() const
Definition: C4StringTable.h:50
void DoContextObjCommand(C4Object *, const char *cmd)
C4Console Console
Definition: C4Globals.cpp:45
C4String * getStr() const
Definition: C4Value.h:117
#define IDM_VIEWPORT_CONTENTS
Definition: resource.h:90
const char * GetName() const
Definition: C4AulFunc.h:56
void Format(const char *szFmt,...) GNUC_FORMAT_ATTRIBUTE_O
Definition: StdBuf.cpp:174
void ObjselectDelItems()
void DoContextObjsel(C4Object *, bool clear)
const char * LoadResStr(const char *id)
Definition: C4Language.h:83
const C4Value & GetItem(int32_t iElem) const
Definition: C4ValueArray.h:38
C4Object * GetObject(int32_t index=0) const
#define IDM_VIEWPORT_DELETE
Definition: resource.h:91
C4NotifyingObjectList Contents
Definition: C4Object.h:152
bool SetMenuItemText(HMENU hMenu, WORD id, const char *szText)
void AppendMenuItem(int num, const StdStrBuf &label)
virtual const char * GetName() const
Definition: C4PropList.cpp:649
int32_t GetX() const
Definition: C4Object.h:286
int32_t GetSize() const
Definition: C4ValueArray.h:36
C4ValueArray * GetPropertyArray(C4PropertyName n) const
Definition: C4PropList.cpp:789
C4LSectors Sectors
Definition: C4GameObjects.h:42
std::vector< ObjselItemDt > itemsObjselect
Definition: C4EditCursor.h:70
int ObjectCount(C4ID id=C4ID::None) const
#define IDM_VIEWPORT_DUPLICATE
Definition: resource.h:92
size_t getLength() const
Definition: StdBuf.h:445
C4EditCursorSelection selection
Definition: C4EditCursor.h:75
void Copy()
Definition: StdBuf.h:467
#define IDM_VPORTDYN_FIRST
Definition: resource.h:94
C4AulFunc * getFunction() const
Definition: C4Value.h:119
C4GameObjects Objects
Definition: C4Globals.cpp:48
StdStrBuf FormatString(const char *szFmt,...)
Definition: StdBuf.cpp:270

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::DoContextObjCommand ( C4Object obj,
const char *  cmd 
)
protected

Definition at line 1441 of file C4EditCursor.cpp.

References FormatString(), StdStrBuf::getData(), In(), and C4PropListNumbered::Number.

Referenced by DoContextMenu().

1442 {
1443  // Command going through queue for sync
1444  if (!obj || !cmd) return;
1445  In(FormatString("Object(%d)->%s", obj->Number, cmd).getData());
1446 }
const char * getData() const
Definition: StdBuf.h:442
bool In(const char *szText)
StdStrBuf FormatString(const char *szFmt,...)
Definition: StdBuf.cpp:270

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::DoContextObjsel ( C4Object obj,
bool  clear 
)

Definition at line 1434 of file C4EditCursor.cpp.

References AddToSelection(), ClearSelection(), and OnSelectionChanged().

Referenced by DoContextMenu().

1435 {
1436  if (clear) ClearSelection(obj);
1437  AddToSelection(obj);
1439 }
void ClearSelection(C4PropList *next_selection=nullptr)
void OnSelectionChanged(bool by_objectlist=false)
void AddToSelection(C4PropList *add_obj)

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::Draw ( C4TargetFacet cgo)

Definition at line 839 of file C4EditCursor.cpp.

References C4CNS_ModeCreateObject, C4CNS_ModeDraw, C4GFXBLIT_ADDITIVE, C4MC_Cursor_DropInto, Console, creator_def, creator_overlay, DragFrame, DragLine, C4Draw::DrawCircleDw(), C4Draw::DrawFrameDw(), C4Draw::DrawLineDw(), DrawObject(), C4Facet::DrawX(), DropTarget, C4GraphicsResource::fctMouseCursor, fShiftWasDown, C4Value::getObj(), C4Object::GetX(), C4Object::GetY(), C4ToolsDlg::Grade, C4Def::Graphics, GraphicsResource, has_mouse_hover, C4Rect::Hgt, C4Facet::Hgt, highlighted_object, C4ToolsDlg::IsGradedTool(), Mode, NO_OWNER, pDraw, selection, C4TargetFacet::Set(), C4Def::Shape, C4Object::Shape, C4Facet::Surface, C4TargetFacet::TargetX, C4TargetFacet::TargetY, C4Console::ToolsDlg, C4Rect::Wdt, C4Facet::Wdt, X, C4Facet::X, X2, C4Rect::y, Y, C4Facet::Y, Y2, and C4TargetFacet::Zoom.

Referenced by C4Viewport::Draw().

840 {
841  ZoomDataStackItem zdsi(cgo.X, cgo.Y, cgo.Zoom);
842  float line_width = std::max<float>(1.0f, 1.0f / cgo.Zoom);
843 #ifdef WITH_QT_EDITOR
844  // Draw shapes of selection
845  shapes->Draw(cgo);
846 #endif
847  // Draw selection marks
848  for (C4Value &obj : selection)
849  {
850  C4Object *cobj = obj.getObj();
851  if (!cobj) continue;
852  DrawObject(cgo, cobj, 0xffffffff, fShiftWasDown, true); // highlight selection if shift is pressed
853  }
854  // Draw drag frame
855  if (DragFrame)
857  std::min(X, X2) + cgo.X - cgo.TargetX, std::min(Y, Y2) + cgo.Y - cgo.TargetY,
858  std::max(X, X2) + cgo.X - cgo.TargetX, std::max(Y, Y2) + cgo.Y - cgo.TargetY, 0xffffffff, line_width);
859  // Draw drag line
860  if (DragLine)
861  pDraw->DrawLineDw(cgo.Surface,
862  X + cgo.X - cgo.TargetX, Y + cgo.Y - cgo.TargetY,
863  X2 + cgo.X - cgo.TargetX, Y2 + cgo.Y - cgo.TargetY, 0xffffffff, line_width);
864  // Draw drop target
865  if (DropTarget)
867  DropTarget->GetX() + cgo.X - cgo.TargetX - ::GraphicsResource.fctMouseCursor.Wdt / 2 / cgo.Zoom,
869  float(::GraphicsResource.fctMouseCursor.Wdt) / cgo.Zoom,
871  // Draw paint circle
873  {
874  // shadow for recognition on white background/material
875  pDraw->DrawCircleDw(cgo.Surface, X + cgo.X - cgo.TargetX + 1.0f/cgo.Zoom, Y + cgo.Y - cgo.TargetY + 1.0f / cgo.Zoom, ::Console.ToolsDlg.Grade, 0xff000000, line_width);
876  // actual circle
877  pDraw->DrawCircleDw(cgo.Surface, X + cgo.X - cgo.TargetX, Y + cgo.Y - cgo.TargetY, ::Console.ToolsDlg.Grade, 0xffffffff, line_width);
878  }
879  // Draw creator preview
881  {
882  C4TargetFacet cgo_creator;
883  cgo_creator.Set(cgo.Surface, X + cgo.X - cgo.TargetX, Y + cgo.Y - cgo.TargetY,
884  creator_def->Shape.Wdt, creator_def->Shape.Hgt, 0, 0, cgo.Zoom, 0, 0);
885  if (!creator_overlay)
886  {
887  creator_overlay = std::make_unique<C4GraphicsOverlay>();
889  }
890  creator_overlay->Draw(cgo_creator, nullptr, NO_OWNER);
891  }
892  // Draw object highlight
893  C4Object *highlight = highlighted_object.getObj();
894  if (highlight) DrawObject(cgo, highlight, 0xffff8000, true, false); // highlight selection if shift is pressed
895 }
int32_t GetY() const
Definition: C4Object.h:287
float Y
Definition: C4Facet.h:118
float Zoom
Definition: C4Facet.h:165
C4Console Console
Definition: C4Globals.cpp:45
std::unique_ptr< C4GraphicsOverlay > creator_overlay
Definition: C4EditCursor.h:61
C4ToolsDlg ToolsDlg
Definition: C4Console.h:88
#define C4GFXBLIT_ADDITIVE
Definition: C4Surface.h:26
C4GraphicsResource GraphicsResource
void DrawLineDw(C4Surface *sfcTarget, float x1, float y1, float x2, float y2, DWORD dwClr, float width=1.0f)
Definition: C4Draw.cpp:614
int32_t Grade
Definition: C4ToolsDlg.h:54
int32_t Wdt
Definition: C4Rect.h:30
bool IsGradedTool() const
Definition: C4ToolsDlg.h:81
void DrawFrameDw(C4Surface *sfcDest, int x1, int y1, int x2, int y2, DWORD dwClr, float width=1.0f)
Definition: C4Draw.cpp:641
void DrawCircleDw(C4Surface *sfcTarget, float cx, float cy, float r, DWORD dwClr, float width=1.0f)
Definition: C4Draw.cpp:624
C4Shape Shape
Definition: C4Def.h:104
int32_t y
Definition: C4Rect.h:30
void DrawX(C4Surface *sfcTarget, float iX, float iY, float iWdt, float iHgt, int32_t iPhaseX=0, int32_t iPhaseY=0) const
Definition: C4Facet.cpp:358
void Set(const C4Facet &cpy)
Definition: C4Facet.h:182
int32_t GetX() const
Definition: C4Object.h:286
const int NO_OWNER
Definition: C4Constants.h:137
const int32_t C4MC_Cursor_DropInto
class C4Def * creator_def
Definition: C4EditCursor.h:60
C4Draw * pDraw
Definition: C4Draw.cpp:42
const int C4CNS_ModeDraw
Definition: C4Console.h:33
float TargetX
Definition: C4Facet.h:165
C4Object * DropTarget
Definition: C4EditCursor.h:58
float Hgt
Definition: C4Facet.h:118
bool fShiftWasDown
Definition: C4EditCursor.h:51
const int C4CNS_ModeCreateObject
Definition: C4Console.h:32
void DrawObject(C4TargetFacet &cgo, C4Object *cobj, uint32_t select_mark_color, bool highlight, bool draw_transform_marker)
int32_t Mode
Definition: C4EditCursor.h:54
int32_t Hgt
Definition: C4Rect.h:30
C4EditCursorSelection selection
Definition: C4EditCursor.h:75
C4Shape Shape
Definition: C4Object.h:148
C4Surface * Surface
Definition: C4Facet.h:117
float TargetY
Definition: C4Facet.h:165
float Wdt
Definition: C4Facet.h:118
C4DefGraphics Graphics
Definition: C4Def.h:191
C4Value highlighted_object
Definition: C4EditCursor.h:59
float X
Definition: C4Facet.h:118
C4Object * getObj() const
Definition: C4Value.cpp:68
bool has_mouse_hover
Definition: C4EditCursor.h:52

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::DrawObject ( C4TargetFacet cgo,
C4Object cobj,
uint32_t  select_mark_color,
bool  highlight,
bool  draw_transform_marker 
)
protected

Definition at line 761 of file C4EditCursor.cpp.

References C4Object::BlitMode, C4GFXBLIT_ADDITIVE, C4GFXBLIT_CLRSFC_MOD2, C4Object::ColorMod, DragTransform, C4Facet::Draw(), C4Object::Draw(), DrawSelectMark(), C4Object::DrawTopFace(), C4GraphicsResource::fctTransformKnob, StdSubMeshInstance::FO_NearestToFarthest, C4Object::GetDrawPosition(), GraphicsResource, HasTransformMarker(), C4Rect::Hgt, C4Facet::Hgt, pDraw, C4Object::pMeshInstance, C4Draw::ResetBlitMode(), C4Draw::SetBlitMode(), StdMeshInstance::SetFaceOrdering(), StdMeshInstance::SetFaceOrderingForClrModulation(), C4Object::Shape, C4Facet::Surface, C4Rect::Wdt, C4Rect::x, X, C4Facet::X, X2, C4Rect::y, Y, C4Facet::Y, Y2, and C4TargetFacet::Zoom.

Referenced by Draw().

762 {
763  // target pos (parallax)
764  float line_width = std::max<float>(1.0f, 1.0f / cgo.Zoom);
765  float offX, offY, newzoom;
766  cobj->GetDrawPosition(cgo, offX, offY, newzoom);
767  ZoomDataStackItem zdsi(cgo.X, cgo.Y, newzoom);
768  if (select_mark_color)
769  {
770  FLOAT_RECT frame =
771  {
772  offX + cobj->Shape.x,
773  offX + cobj->Shape.x + cobj->Shape.Wdt,
774  offY + cobj->Shape.y,
775  offY + cobj->Shape.y + cobj->Shape.Hgt
776  };
777  DrawSelectMark(cgo, frame, line_width, select_mark_color);
778  }
779  if (highlight)
780  {
781  uint32_t dwOldMod = cobj->ColorMod;
782  uint32_t dwOldBlitMode = cobj->BlitMode;
783  cobj->ColorMod = 0xffffffff;
785 
786  if (cobj->pMeshInstance)
788 
789  cobj->Draw(cgo, -1);
790  cobj->DrawTopFace(cgo, -1);
791 
792  if (cobj->pMeshInstance)
794 
795  cobj->ColorMod = dwOldMod;
796  cobj->BlitMode = dwOldBlitMode;
797  }
798  // Transformer knob
799  if (draw_transform_marker)
800  {
801  float transform_marker_x = 0.0f, transform_marker_y = 0.0f;
802  if (HasTransformMarker(&transform_marker_x, &transform_marker_y, cgo.Zoom))
803  {
804  transform_marker_x += offX; transform_marker_y += offY;
805  float sz = float(::GraphicsResource.fctTransformKnob.Hgt) / cgo.Zoom;
806  C4Facet transform_target_sfc(cgo.Surface, transform_marker_x-sz/2, transform_marker_y-sz/2, sz, sz);
807  ::GraphicsResource.fctTransformKnob.Draw(transform_target_sfc);
808  // Transform knob while dragging
809  if (DragTransform)
810  {
812  transform_target_sfc.X += X - X2;
813  transform_target_sfc.Y += Y - Y2;
814  ::GraphicsResource.fctTransformKnob.Draw(transform_target_sfc);
815  pDraw->ResetBlitMode();
816  }
817  }
818  }
819 }
float Y
Definition: C4Facet.h:118
float Zoom
Definition: C4Facet.h:165
bool DragTransform
Definition: C4EditCursor.h:56
void ResetBlitMode()
Definition: C4Draw.h:192
void Draw(C4TargetFacet &cgo, int32_t iByPlayer=-1, DrawMode eDrawMode=ODM_Normal, float offX=0, float offY=0)
Definition: C4Object.cpp:1785
void SetFaceOrderingForClrModulation(uint32_t clrmod)
Definition: StdMesh.cpp:1133
#define C4GFXBLIT_ADDITIVE
Definition: C4Surface.h:26
void DrawSelectMark(C4Facet &cgo, FLOAT_RECT r, float width, uint32_t color=0xffffffff)
void DrawTopFace(C4TargetFacet &cgo, int32_t iByPlayer=-1, DrawMode eDrawMode=ODM_Normal, float offX=0, float offY=0)
Definition: C4Object.cpp:2045
C4GraphicsResource GraphicsResource
void SetBlitMode(DWORD dwBlitMode)
Definition: C4Draw.h:191
int32_t Wdt
Definition: C4Rect.h:30
int32_t y
Definition: C4Rect.h:30
void Draw(C4Facet &cgo, bool fAspect=true, int32_t iPhaseX=0, int32_t iPhaseY=0, bool fTransparent=true)
Definition: C4Facet.cpp:154
C4Draw * pDraw
Definition: C4Draw.cpp:42
int32_t x
Definition: C4Rect.h:30
#define C4GFXBLIT_CLRSFC_MOD2
Definition: C4Surface.h:29
void SetFaceOrdering(FaceOrdering ordering)
Definition: StdMesh.cpp:1116
uint32_t ColorMod
Definition: C4Object.h:161
float Hgt
Definition: C4Facet.h:118
uint32_t BlitMode
Definition: C4Object.h:162
int32_t Hgt
Definition: C4Rect.h:30
C4Shape Shape
Definition: C4Object.h:148
C4Surface * Surface
Definition: C4Facet.h:117
StdMeshInstance * pMeshInstance
Definition: C4Object.h:155
float X
Definition: C4Facet.h:118
bool HasTransformMarker(float *x, float *y, float zoom) const
bool GetDrawPosition(const C4TargetFacet &cgo, float &resultx, float &resulty, float &resultzoom) const
Definition: C4Object.cpp:4330

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::DrawSelectMark ( C4Facet cgo,
FLOAT_RECT  r,
float  width,
uint32_t  color = 0xffffffff 
)
protected

Definition at line 898 of file C4EditCursor.cpp.

References FLOAT_RECT::bottom, C4Facet::Hgt, FLOAT_RECT::left, pDraw, C4Draw::PerformMultiLines(), FLOAT_RECT::right, C4Facet::Surface, FLOAT_RECT::top, and C4Facet::Wdt.

Referenced by DrawObject().

899 {
900  if ((cgo.Wdt<1) || (cgo.Hgt<1)) return;
901 
902  if (!cgo.Surface) return;
903 
904  const float EDGE_WIDTH = 2.f;
905 
906  unsigned char c[4] = {
907  static_cast<unsigned char>((color >> 16) & 0xff),
908  static_cast<unsigned char>((color >> 8) & 0xff),
909  static_cast<unsigned char>((color >> 0) & 0xff),
910  static_cast<unsigned char>((color >> 24) & 0xff)
911  };
912 
913  const C4BltVertex vertices[] = {
914  { 0.f, 0.f, { c[0], c[1], c[2], c[3] }, frame.left + EDGE_WIDTH, frame.top, 0.f },
915  { 0.f, 0.f, { c[0], c[1], c[2], c[3] }, frame.left, frame.top, 0.f },
916  { 0.f, 0.f, { c[0], c[1], c[2], c[3] }, frame.left, frame.top, 0.f },
917  { 0.f, 0.f, { c[0], c[1], c[2], c[3] }, frame.left, frame.top+EDGE_WIDTH, 0.f },
918 
919  { 0.f, 0.f, { c[0], c[1], c[2], c[3] }, frame.left+EDGE_WIDTH, frame.bottom-1, 0.f },
920  { 0.f, 0.f, { c[0], c[1], c[2], c[3] }, frame.left, frame.bottom-1, 0.f },
921  { 0.f, 0.f, { c[0], c[1], c[2], c[3] }, frame.left, frame.bottom-1, 0.f },
922  { 0.f, 0.f, { c[0], c[1], c[2], c[3] }, frame.left, frame.bottom-1-EDGE_WIDTH, 0.f },
923 
924  { 0.f, 0.f, { c[0], c[1], c[2], c[3] }, frame.right-1-EDGE_WIDTH, frame.top, 0.f },
925  { 0.f, 0.f, { c[0], c[1], c[2], c[3] }, frame.right-1, frame.top, 0.f },
926  { 0.f, 0.f, { c[0], c[1], c[2], c[3] }, frame.right-1, frame.top, 0.f },
927  { 0.f, 0.f, { c[0], c[1], c[2], c[3] }, frame.right-1, frame.top+EDGE_WIDTH, 0.f },
928 
929  { 0.f, 0.f, { c[0], c[1], c[2], c[3] }, frame.right-1-EDGE_WIDTH, frame.bottom-1, 0.f },
930  { 0.f, 0.f, { c[0], c[1], c[2], c[3] }, frame.right-1, frame.bottom-1, 0.f },
931  { 0.f, 0.f, { c[0], c[1], c[2], c[3] }, frame.right-1, frame.bottom-1, 0.f },
932  { 0.f, 0.f, { c[0], c[1], c[2], c[3] }, frame.right-1, frame.bottom-1-EDGE_WIDTH, 0.f },
933  };
934 
935  const unsigned int n_vertices = sizeof(vertices) / sizeof(vertices[0]);
936 
937  pDraw->PerformMultiLines(cgo.Surface, vertices, n_vertices, width, nullptr);
938 }
C4Draw * pDraw
Definition: C4Draw.cpp:42
virtual void PerformMultiLines(C4Surface *sfcTarget, const C4BltVertex *vertices, unsigned int n_vertices, float width, C4ShaderCall *shader_call)=0
float Hgt
Definition: C4Facet.h:118
C4Surface * Surface
Definition: C4Facet.h:117
float Wdt
Definition: C4Facet.h:118

Here is the call graph for this function:

Here is the caller graph for this function:

bool C4EditCursor::Duplicate ( )

Definition at line 631 of file C4EditCursor.cpp.

References EMMO_Duplicate, EMMoveObject(), Fix0, and selection.

Referenced by DoContextMenu().

632 {
634  return true;
635 }
void EMMoveObject(enum C4ControlEMObjectAction eAction, C4Real tx, C4Real ty, C4Object *pTargetObj, const C4EditCursorSelection *pObjs=nullptr, const char *szScript=nullptr, bool drag_finished=false)
C4EditCursorSelection selection
Definition: C4EditCursor.h:75
const C4Real Fix0
Definition: C4Real.h:312

Here is the call graph for this function:

Here is the caller graph for this function:

bool C4EditCursor::EditingOK ( bool  for_landscape_drawing = false)

Definition at line 1284 of file C4EditCursor.cpp.

References Console, C4ConsoleGUI::Editing, Hold, LoadResStr(), and C4Console::Message().

Referenced by ApplyCreateObject(), ApplyToolBrush(), ApplyToolFill(), ApplyToolLine(), ApplyToolRect(), Delete(), C4Console::In(), and ToggleMode().

1285 {
1286  if (!Console.Editing)
1287  {
1288  Hold=false;
1289  Console.Message(LoadResStr("IDS_CNS_NONETEDIT"));
1290  return false;
1291  }
1292  return true;
1293 }
C4Console Console
Definition: C4Globals.cpp:45
const char * LoadResStr(const char *id)
Definition: C4Language.h:83
bool Message(const char *szMessage, bool fQuery=false)
Definition: C4Console.cpp:292

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::EMControl ( enum C4PacketType  eCtrlType,
class C4ControlPacket pCtrl 
)

Definition at line 1393 of file C4EditCursor.cpp.

References CDT_Decide, Control, and C4GameControl::DoInput().

Referenced by ApplyCreateObject(), ApplyToolBrush(), ApplyToolFill(), ApplyToolLine(), ApplyToolRect(), C4PropertyPath::DoCall(), EMMoveObject(), and C4PropertyPath::SetProperty().

1394 {
1395  ::Control.DoInput(eCtrlType, pCtrl, CDT_Decide);
1396 }
C4GameControl Control
void DoInput(C4PacketType eCtrlType, C4ControlPacket *pPkt, C4ControlDeliveryType eDelivery)

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::EMMoveObject ( enum C4ControlEMObjectAction  eAction,
C4Real  tx,
C4Real  ty,
C4Object pTargetObj,
const C4EditCursorSelection pObjs = nullptr,
const char *  szScript = nullptr,
bool  drag_finished = false 
)
protected

Definition at line 1368 of file C4EditCursor.cpp.

References CID_EMMoveObj, EMControl(), C4PropListNumbered::Number, C4EditCursorSelection::ObjectCount(), and C4PropList::Status.

Referenced by Delete(), Duplicate(), Execute(), GrabContents(), In(), Move(), MoveSelection(), and PutContents().

1369 {
1370  // construct object list
1371  int32_t iObjCnt = 0; int32_t *pObjIDs = nullptr;
1372  if (pObjs && (iObjCnt = pObjs->ObjectCount()))
1373  {
1374  pObjIDs = new int32_t [iObjCnt];
1375  // fill
1376  int32_t i = 0;
1377  for (const C4Value &vobj : *pObjs)
1378  {
1379  C4Object *obj = vobj.getObj();
1380  if (!obj) continue;
1381  if (obj && obj->Status)
1382  pObjIDs[i++] = obj->Number;
1383  else
1384  pObjIDs[i++] = 0;
1385  }
1386  }
1387 
1388  // execute control
1389  EMControl(CID_EMMoveObj, new C4ControlEMMoveObject(eAction, tx, ty, pTargetObj, iObjCnt, pObjIDs, szScript, drag_finished));
1390 
1391 }
int32_t ObjectCount() const
void EMControl(enum C4PacketType eCtrlType, class C4ControlPacket *pCtrl)
int32_t Status
Definition: C4PropList.h:168

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::Execute ( )

Definition at line 141 of file C4EditCursor.cpp.

References ApplyToolFill(), C4CNS_ModeDraw, C4CNS_ModeEdit, C4TLS_Fill, Console, C4EditCursorSelection::ConsolidateEmpty(), C4Console::EditCursor, C4ConsoleGUI::Editing, EMMO_Move, EMMO_MoveForced, EMMoveObject(), Fix0, fShiftWasDown, Game, C4Game::HaltCount, Hold, IsSelectionInvalidated(), C4Game::iTick35, Mode, C4ConsoleGUI::PropertyDlgUpdate(), selection, C4ToolsDlg::Tool, and C4Console::ToolsDlg.

Referenced by C4Console::Execute().

142 {
143  // drawing
144  switch (Mode)
145  {
146  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
147  case C4CNS_ModeEdit:
148  // Hold selection
149  if (Hold)
150  EMMoveObject(fShiftWasDown ? EMMO_MoveForced : EMMO_Move, Fix0, Fix0, nullptr, &selection, nullptr, false);
151  break;
152  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
153  case C4CNS_ModeDraw:
154  switch (Console.ToolsDlg.Tool)
155  {
156  case C4TLS_Fill:
157  if (Hold) if (!Game.HaltCount) if (Console.Editing) ApplyToolFill();
158  break;
159  }
160  break;
161  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
162  }
164  {
167  }
168 }
C4EditCursor EditCursor
Definition: C4Console.h:90
C4Console Console
Definition: C4Globals.cpp:45
C4Game Game
Definition: C4Globals.cpp:52
int32_t iTick35
Definition: C4Game.h:129
C4ToolsDlg ToolsDlg
Definition: C4Console.h:88
void EMMoveObject(enum C4ControlEMObjectAction eAction, C4Real tx, C4Real ty, C4Object *pTargetObj, const C4EditCursorSelection *pObjs=nullptr, const char *szScript=nullptr, bool drag_finished=false)
const int C4CNS_ModeEdit
Definition: C4Console.h:31
void PropertyDlgUpdate(class C4EditCursorSelection &rSelection, bool force_function_update)
Definition: C4Console.cpp:687
bool IsSelectionInvalidated() const
Definition: C4EditCursor.h:154
const int C4CNS_ModeDraw
Definition: C4Console.h:33
const int32_t C4TLS_Fill
Definition: C4ToolsDlg.h:31
bool fShiftWasDown
Definition: C4EditCursor.h:51
int32_t Mode
Definition: C4EditCursor.h:54
int32_t HaltCount
Definition: C4Game.h:112
C4EditCursorSelection selection
Definition: C4EditCursor.h:75
void ApplyToolFill()
int32_t Tool
Definition: C4ToolsDlg.h:53
const C4Real Fix0
Definition: C4Real.h:312

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::FrameSelection ( )
protected

Definition at line 946 of file C4EditCursor.cpp.

References AddToSelection(), ClearSelection(), Inside(), Objects, OCF_NotContained, OnSelectionChanged(), X, X2, Y, and Y2.

Referenced by LeftButtonUp().

947 {
948  ClearSelection();
949  for (C4Object *cobj : Objects)
950  {
951  if (cobj->Status && cobj->OCF & OCF_NotContained)
952  {
953  if (Inside(cobj->GetX(),std::min(X,X2),std::max(X,X2)) && Inside(cobj->GetY(),std::min(Y,Y2),std::max(Y,Y2)))
954  AddToSelection(cobj);
955  }
956  }
958 }
const uint32_t OCF_NotContained
Definition: C4Constants.h:96
void ClearSelection(C4PropList *next_selection=nullptr)
void OnSelectionChanged(bool by_objectlist=false)
void AddToSelection(C4PropList *add_obj)
bool Inside(T ival, U lbound, V rbound)
Definition: Standard.h:43
C4GameObjects Objects
Definition: C4Globals.cpp:48

Here is the call graph for this function:

Here is the caller graph for this function:

C4Def* C4EditCursor::GetCreatorDef ( )
inline

Definition at line 149 of file C4EditCursor.h.

References creator_def.

149 { return creator_def; }
class C4Def * creator_def
Definition: C4EditCursor.h:60
bool C4EditCursor::GetCurrentSelectionPosition ( int32_t *  x,
int32_t *  y 
)

Definition at line 1448 of file C4EditCursor.cpp.

References C4EditCursorSelection::GetObject(), C4Object::GetX(), C4Object::GetY(), selection, and C4PropList::Status.

1449 {
1450  C4Object *obj = selection.GetObject();
1451  if (!obj || !obj->Status) return false;
1452  *x = obj->GetX();
1453  *y = obj->GetY();
1454  return true;
1455 }
int32_t GetY() const
Definition: C4Object.h:287
C4Object * GetObject(int32_t index=0) const
int32_t GetX() const
Definition: C4Object.h:286
int32_t Status
Definition: C4PropList.h:168
C4EditCursorSelection selection
Definition: C4EditCursor.h:75

Here is the call graph for this function:

int32_t C4EditCursor::GetMode ( )

Definition at line 1295 of file C4EditCursor.cpp.

References Mode.

Referenced by ViewportWinProc().

1296 {
1297  return Mode;
1298 }
int32_t Mode
Definition: C4EditCursor.h:54

Here is the caller graph for this function:

C4EditCursorSelection& C4EditCursor::GetSelection ( )
inline

Definition at line 104 of file C4EditCursor.h.

References selection.

Referenced by PropertyDlgProc().

104 { return selection; }
C4EditCursorSelection selection
Definition: C4EditCursor.h:75

Here is the caller graph for this function:

C4Object * C4EditCursor::GetTarget ( )

Definition at line 1279 of file C4EditCursor.cpp.

References Target.

1280 {
1281  return Target;
1282 }
C4Object * Target
Definition: C4EditCursor.h:58
void C4EditCursor::GrabContents ( )

Definition at line 1240 of file C4EditCursor.cpp.

References AddToSelection(), ClearSelection(), C4Object::Contents, EMMO_Exit, EMMoveObject(), Fix0, C4EditCursorSelection::GetObject(), Hold, OnSelectionChanged(), and selection.

Referenced by DoContextMenu().

1241 {
1242  // Set selection
1243  C4Object *pFrom;
1244  if (!( pFrom = selection.GetObject() )) return;
1245  ClearSelection();
1246  for (C4Object *cont : pFrom->Contents) AddToSelection(cont);
1248  Hold=true;
1249 
1250  // Exit all objects
1251  EMMoveObject(EMMO_Exit, Fix0, Fix0, nullptr, &selection);
1252 }
void EMMoveObject(enum C4ControlEMObjectAction eAction, C4Real tx, C4Real ty, C4Object *pTargetObj, const C4EditCursorSelection *pObjs=nullptr, const char *szScript=nullptr, bool drag_finished=false)
void ClearSelection(C4PropList *next_selection=nullptr)
C4Object * GetObject(int32_t index=0) const
C4NotifyingObjectList Contents
Definition: C4Object.h:152
void OnSelectionChanged(bool by_objectlist=false)
void AddToSelection(C4PropList *add_obj)
C4EditCursorSelection selection
Definition: C4EditCursor.h:75
const C4Real Fix0
Definition: C4Real.h:312

Here is the call graph for this function:

Here is the caller graph for this function:

bool C4EditCursor::HasTransformCursor ( ) const
inline

Definition at line 113 of file C4EditCursor.h.

References IsHoveringTransformMarker().

bool DragTransform
Definition: C4EditCursor.h:56
bool IsHoveringTransformMarker() const

Here is the call graph for this function:

bool C4EditCursor::HasTransformMarker ( float *  x,
float *  y,
float  zoom 
) const
protected

Definition at line 821 of file C4EditCursor.cpp.

References C4Object::Def, C4GraphicsResource::fctTransformKnob, FullCon, C4Object::GetCon(), C4EditCursorSelection::GetObject(), GraphicsResource, C4Def::GrowthType, C4Rect::Hgt, C4Facet::Hgt, C4Def::Rotateable, selection, C4Def::Shape, C4Object::Shape, C4Rect::Wdt, and C4Rect::y.

Referenced by DrawObject(), and IsHoveringTransformMarker().

822 {
823  // Single selection only (assume obj is in selection)
824  if (selection.size() != 1) return false;
825  C4Object *obj = selection.GetObject();
826  if (!obj) return false;
827  // Show knob only for objects that can be scaled or rotated
828  if (!obj->Def->GrowthType && !obj->Def->Rotateable) return false;
829  // Show knob only if the shape has a certain minimum size in either extent (so small objects can still be moved)
830  float vis_wdt = float(obj->Shape.Wdt) * zoom;
831  float vis_hgt = float(obj->Shape.Wdt) * zoom;
832  if (vis_wdt < ::GraphicsResource.fctTransformKnob.Hgt && vis_hgt < ::GraphicsResource.fctTransformKnob.Hgt) return false;
833  // It's visible: Put it to the bottom of the shape without the shape expansion through rotation
834  *x = 0;
835  *y = float(obj->Def->Shape.y + obj->Def->Shape.Hgt) * obj->GetCon() / FullCon - float(::GraphicsResource.fctTransformKnob.Hgt) / (zoom*2);
836  return true;
837 }
int32_t GetCon() const
Definition: C4Object.h:272
C4GraphicsResource GraphicsResource
const int32_t FullCon
Definition: C4Constants.h:181
int32_t Rotateable
Definition: C4Def.h:119
int32_t Wdt
Definition: C4Rect.h:30
C4Object * GetObject(int32_t index=0) const
int32_t GrowthType
Definition: C4Def.h:111
C4Shape Shape
Definition: C4Def.h:104
C4Def * Def
Definition: C4Object.h:143
int32_t y
Definition: C4Rect.h:30
float Hgt
Definition: C4Facet.h:118
int32_t Hgt
Definition: C4Rect.h:30
C4EditCursorSelection selection
Definition: C4EditCursor.h:75
C4Shape Shape
Definition: C4Object.h:148

Here is the call graph for this function:

Here is the caller graph for this function:

bool C4EditCursor::In ( const char *  szText)

Definition at line 960 of file C4EditCursor.cpp.

References Console, C4EditCursorSelection::ConsolidateEmpty(), EMMO_Script, EMMoveObject(), Fix0, C4Console::MRU_Object, C4ConsoleGUI::PropertyDlgUpdate(), C4Console::RegisterRecentInput(), and selection.

Referenced by DoContextObjCommand(), and PropertyDlgProc().

961 {
963  EMMoveObject(EMMO_Script, Fix0, Fix0, nullptr, &selection, szText);
966  return true;
967 }
C4Console Console
Definition: C4Globals.cpp:45
void EMMoveObject(enum C4ControlEMObjectAction eAction, C4Real tx, C4Real ty, C4Object *pTargetObj, const C4EditCursorSelection *pObjs=nullptr, const char *szScript=nullptr, bool drag_finished=false)
void RegisterRecentInput(const char *input, RecentScriptInputLists section)
Definition: C4Console.cpp:639
void PropertyDlgUpdate(class C4EditCursorSelection &rSelection, bool force_function_update)
Definition: C4Console.cpp:687
C4EditCursorSelection selection
Definition: C4EditCursor.h:75
const C4Real Fix0
Definition: C4Real.h:312

Here is the call graph for this function:

Here is the caller graph for this function:

bool C4EditCursor::Init ( )

Definition at line 170 of file C4EditCursor.cpp.

References Application, Console, IDR_CONTEXTMENUS, Mode, and C4ConsoleGUI::UpdateModeCtrls().

Referenced by C4Console::InitGame().

171 {
172 
173 #ifdef USE_WIN32_WINDOWS
174  if (!(hMenu = LoadMenu(Application.GetInstance(),MAKEINTRESOURCE(IDR_CONTEXTMENUS))))
175  return false;
176 #endif
178 
179  return true;
180 }
C4Console Console
Definition: C4Globals.cpp:45
#define IDR_CONTEXTMENUS
Definition: resource.h:97
bool UpdateModeCtrls(int iMode)
Definition: C4Console.cpp:699
int32_t Mode
Definition: C4EditCursor.h:54
C4Application Application
Definition: C4Globals.cpp:44

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::InvalidateSelection ( )
inline

Definition at line 152 of file C4EditCursor.h.

152 { selection_invalid = true; }
bool selection_invalid
Definition: C4EditCursor.h:53
bool C4EditCursor::IsHoveringTransformMarker ( ) const

Definition at line 1462 of file C4EditCursor.cpp.

References C4GraphicsResource::fctTransformKnob, C4EditCursorSelection::GetObject(), C4Object::GetX(), C4Object::GetY(), GraphicsResource, HasTransformMarker(), C4Facet::Hgt, selection, X, Y, and Zoom.

Referenced by HasTransformCursor(), and LeftButtonDown().

1463 {
1464  float trf_marker_x, trf_marker_y;
1465  if (HasTransformMarker(&trf_marker_x, &trf_marker_y, Zoom))
1466  {
1467  C4Object *obj = selection.GetObject();
1468  float dx = (float(X - obj->GetX()) - trf_marker_x) * Zoom;
1469  float dy = (float(Y - obj->GetY()) - trf_marker_y) * Zoom;
1471  return true;
1472  }
1473  return false;
1474 }
int32_t GetY() const
Definition: C4Object.h:287
C4GraphicsResource GraphicsResource
C4Object * GetObject(int32_t index=0) const
int32_t GetX() const
Definition: C4Object.h:286
float Hgt
Definition: C4Facet.h:118
C4EditCursorSelection selection
Definition: C4EditCursor.h:75
bool HasTransformMarker(float *x, float *y, float zoom) const

Here is the call graph for this function:

Here is the caller graph for this function:

bool C4EditCursor::IsSelectionInvalidated ( ) const
inline

Definition at line 154 of file C4EditCursor.h.

References selection_invalid.

Referenced by Execute().

154 { return selection_invalid; }
bool selection_invalid
Definition: C4EditCursor.h:53

Here is the caller graph for this function:

bool C4EditCursor::KeyDown ( C4KeyCode  KeyCode,
DWORD  dwKeyState 
)

Definition at line 528 of file C4EditCursor.cpp.

References AltDown(), AltUp(), fAltWasDown, and fShiftWasDown.

Referenced by ViewportWinProc().

529 {
530  // alt check
531  bool fAltIsDown = (dwKeyState & MK_ALT) != 0;
532  fAltIsDown = fAltIsDown || KeyCode == K_ALT_L || KeyCode == K_ALT_R;
533  if (fAltIsDown != fAltWasDown)
534  {
535  if ((fAltWasDown = fAltIsDown))
536  AltDown();
537  else
538  AltUp();
539  }
540 
541  // shift check
542  bool fShiftIsDown = (dwKeyState & MK_SHIFT) != 0;
543  fShiftIsDown = fShiftIsDown || KeyCode == K_SHIFT_L || KeyCode == K_SHIFT_R;
544  if(fShiftIsDown != fShiftWasDown)
545  fShiftWasDown = fShiftIsDown;
546 
547  return true;
548 }
bool fAltWasDown
Definition: C4EditCursor.h:50
bool fShiftWasDown
Definition: C4EditCursor.h:51

Here is the call graph for this function:

Here is the caller graph for this function:

bool C4EditCursor::KeyUp ( C4KeyCode  KeyCode,
DWORD  dwKeyState 
)

Definition at line 550 of file C4EditCursor.cpp.

References AltDown(), AltUp(), fAltWasDown, and fShiftWasDown.

Referenced by ViewportWinProc().

551 {
552  // alt check
553  bool fAltIsDown = (dwKeyState & MK_ALT) != 0;
554  fAltIsDown = fAltIsDown && !( KeyCode == K_ALT_L || KeyCode == K_ALT_R);
555  if (fAltIsDown != fAltWasDown)
556  {
557  if ((fAltWasDown = fAltIsDown))
558  AltDown();
559  else
560  AltUp();
561  }
562 
563  // shift check
564  bool fShiftIsDown = (dwKeyState & MK_SHIFT) != 0;
565  fShiftIsDown = fShiftIsDown && !(KeyCode == K_SHIFT_L || KeyCode == K_SHIFT_R);
566  if(fShiftIsDown != fShiftWasDown)
567  fShiftWasDown = fShiftIsDown;
568 
569  return true;
570 }
bool fAltWasDown
Definition: C4EditCursor.h:50
bool fShiftWasDown
Definition: C4EditCursor.h:51

Here is the call graph for this function:

Here is the caller graph for this function:

bool C4EditCursor::LeftButtonDown ( DWORD  dwKeyState)

Definition at line 358 of file C4EditCursor.cpp.

References AddToSelection(), ApplyCreateObject(), ApplyToolBrush(), ApplyToolPicker(), C4CNS_ModeCreateObject, C4CNS_ModeDraw, C4CNS_ModeEdit, C4TLS_Brush, C4TLS_Fill, C4TLS_Line, C4TLS_Picker, C4TLS_Rect, ClearSelection(), Console, DragCon0, DragConLast, DragFrame, DragLine, DragRot0, DragRotLast, DragShape, DragTransform, DropTarget, Game, C4Object::GetCon(), C4EditCursorSelection::GetObject(), C4Object::GetR(), C4Game::HaltCount, Hold, IsHoveringTransformMarker(), LoadResStr(), C4Console::Message(), Mode, OnSelectionChanged(), RemoveFromSelection(), selection, Target, C4ToolsDlg::Tool, C4Console::ToolsDlg, X, X2, Y, Y2, and Zoom.

Referenced by ViewportWinProc().

359 {
360 
361  // Hold
362  Hold=true;
363 
364  switch (Mode)
365  {
366  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
367  case C4CNS_ModeEdit:
368  // Click on shape?
369 #ifdef WITH_QT_EDITOR
370  if (shapes->MouseDown(X, Y, 3.0f / Zoom, !!(dwKeyState & MK_SHIFT), !!(dwKeyState & MK_CONTROL)))
371  {
372  DragShape = shapes->IsDragging();
373  break;
374  }
375 #endif
376  if (dwKeyState & MK_CONTROL)
377  {
378  // Toggle target
379  if (Target)
382  }
383  else
384  {
385  // Click rotate/scale marker?
387  {
388  DragTransform = true;
389  X2 = X; Y2 = Y;
390  C4Object *dragged_obj = selection.GetObject();
391  DragRot0 = DragRotLast = dragged_obj->GetR();
392  DragCon0 = DragConLast = dragged_obj->GetCon();
393  break;
394  }
395  // Click on unselected: select single
396  if (Target)
397  {
398  bool found = false;
399  for (C4Value &obj : selection)
400  {
401  if(obj.getObj() && obj.getObj()->At(X, Y))
402  {
403  found = true;
404  break;
405  }
406  }
407  if(!found) // means loop didn't break
408  {
411  }
412  }
413  // Click on nothing: drag frame
414  if (!Target)
415  { ClearSelection(); DragFrame=true; X2=X; Y2=Y; }
416  }
418  break;
419  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
421  ApplyCreateObject(!!(dwKeyState & MK_CONTROL));
422  break;
423  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
424  case C4CNS_ModeDraw:
425  switch (Console.ToolsDlg.Tool)
426  {
427  case C4TLS_Brush: ApplyToolBrush(); break;
428  case C4TLS_Line: DragLine=true; X2=X; Y2=Y; break;
429  case C4TLS_Rect: DragFrame=true; X2=X; Y2=Y; break;
430  case C4TLS_Fill:
431  if (Game.HaltCount)
432  { Hold=false; Console.Message(LoadResStr("IDS_CNS_FILLNOHALT")); return false; }
433  break;
434  case C4TLS_Picker: ApplyToolPicker(); break;
435  }
436  break;
437  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
438  }
439 
440  DropTarget=nullptr;
441 
442  return true;
443 }
int32_t DragCon0
Definition: C4EditCursor.h:57
void ApplyToolPicker()
int32_t GetCon() const
Definition: C4Object.h:272
C4Console Console
Definition: C4Globals.cpp:45
bool DragTransform
Definition: C4EditCursor.h:56
C4Game Game
Definition: C4Globals.cpp:52
C4Object * Target
Definition: C4EditCursor.h:58
C4ToolsDlg ToolsDlg
Definition: C4Console.h:88
int32_t DragRot0
Definition: C4EditCursor.h:57
const int C4CNS_ModeEdit
Definition: C4Console.h:31
const char * LoadResStr(const char *id)
Definition: C4Language.h:83
void ClearSelection(C4PropList *next_selection=nullptr)
const int32_t C4TLS_Rect
Definition: C4ToolsDlg.h:30
C4Object * GetObject(int32_t index=0) const
void ApplyToolBrush()
const int32_t C4TLS_Picker
Definition: C4ToolsDlg.h:32
void OnSelectionChanged(bool by_objectlist=false)
int32_t GetR() const
Definition: C4Object.h:288
const int C4CNS_ModeDraw
Definition: C4Console.h:33
bool IsHoveringTransformMarker() const
void ApplyCreateObject(bool contained)
int32_t DragConLast
Definition: C4EditCursor.h:57
bool RemoveFromSelection(C4PropList *remove_obj)
const int32_t C4TLS_Brush
Definition: C4ToolsDlg.h:28
C4Object * DropTarget
Definition: C4EditCursor.h:58
const int32_t C4TLS_Fill
Definition: C4ToolsDlg.h:31
const int C4CNS_ModeCreateObject
Definition: C4Console.h:32
int32_t Mode
Definition: C4EditCursor.h:54
int32_t HaltCount
Definition: C4Game.h:112
void AddToSelection(C4PropList *add_obj)
C4EditCursorSelection selection
Definition: C4EditCursor.h:75
int32_t DragRotLast
Definition: C4EditCursor.h:57
const int32_t C4TLS_Line
Definition: C4ToolsDlg.h:29
int32_t Tool
Definition: C4ToolsDlg.h:53
bool Message(const char *szMessage, bool fQuery=false)
Definition: C4Console.cpp:292

Here is the call graph for this function:

Here is the caller graph for this function:

bool C4EditCursor::LeftButtonUp ( DWORD  dwKeyState)

Definition at line 483 of file C4EditCursor.cpp.

References ApplyToolLine(), ApplyToolRect(), C4CNS_ModeDraw, C4CNS_ModeEdit, C4TLS_Line, C4TLS_Rect, Console, DragFrame, DragLine, DragShape, DragTransform, DropTarget, Fix0, FrameSelection(), Hold, Mode, MoveSelection(), PutContents(), C4ToolsDlg::Tool, C4Console::ToolsDlg, UpdateStatusBar(), X, and Y.

Referenced by ViewportWinProc().

484 {
485  // Finish edit/tool
486  switch (Mode)
487  {
488  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
489  case C4CNS_ModeEdit:
490  // Finish object drag
491  if (!DragFrame && Hold && !DragShape && !DragTransform)
492  {
493  MoveSelection(Fix0, Fix0, true);
494  }
495  if (DragFrame) FrameSelection();
496  if (DropTarget) PutContents();
497  break;
498  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
499  case C4CNS_ModeDraw:
500  switch (Console.ToolsDlg.Tool)
501  {
502  case C4TLS_Line:
503  if (DragLine) ApplyToolLine();
504  break;
505  case C4TLS_Rect:
506  if (DragFrame) ApplyToolRect();
507  break;
508  }
509  break;
510  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
511  }
512 
513  // Release
514 #ifdef WITH_QT_EDITOR
515  shapes->MouseUp(X, Y, !!(dwKeyState & MK_SHIFT), !!(dwKeyState & MK_CONTROL));
516 #endif
517  Hold=false;
518  DragFrame=false;
519  DragLine=false;
520  DragShape = false;
521  DragTransform = false;
522  DropTarget=nullptr;
523  // Update
524  UpdateStatusBar();
525  return true;
526 }
C4Console Console
Definition: C4Globals.cpp:45
bool DragTransform
Definition: C4EditCursor.h:56
void UpdateStatusBar()
void ApplyToolLine()
C4ToolsDlg ToolsDlg
Definition: C4Console.h:88
void FrameSelection()
void ApplyToolRect()
const int C4CNS_ModeEdit
Definition: C4Console.h:31
const int32_t C4TLS_Rect
Definition: C4ToolsDlg.h:30
const int C4CNS_ModeDraw
Definition: C4Console.h:33
void MoveSelection(C4Real iXOff, C4Real iYOff, bool drag_finished)
C4Object * DropTarget
Definition: C4EditCursor.h:58
int32_t Mode
Definition: C4EditCursor.h:54
const int32_t C4TLS_Line
Definition: C4ToolsDlg.h:29
int32_t Tool
Definition: C4ToolsDlg.h:53
const C4Real Fix0
Definition: C4Real.h:312

Here is the call graph for this function:

Here is the caller graph for this function:

bool C4EditCursor::Move ( float  iX,
float  iY,
float  zoom,
DWORD  dwKeyState 
)

Definition at line 189 of file C4EditCursor.cpp.

References AltDown(), AltUp(), ApplyToolBrush(), C4CNS_ModeCreateObject, C4CNS_ModeDraw, C4CNS_ModeEdit, C4TLS_Brush, C4TLS_Line, C4TLS_Rect, Console, C4Object::Def, DragCon0, DragConLast, DragFrame, DragRot0, DragRotLast, DragShape, DragTransform, EMMO_Transform, EMMoveObject(), fAltWasDown, C4Game::FindObject(), fShiftWasDown, ftofix(), FullCon, Game, C4EditCursorSelection::GetLastObject(), C4EditCursorSelection::GetObject(), C4Def::GrowthType, Hold, C4EditCursorSelection::IsContained(), itofix(), Mode, MoveSelection(), OCF_NotContained, C4Def::Oversize, C4Def::Rotateable, selection, Target, C4ToolsDlg::Tool, C4Console::ToolsDlg, UpdateDropTarget(), UpdateStatusBar(), X, X2, Y, Y2, and Zoom.

Referenced by C4ViewportWindow::EditCursorMove(), Move(), and PerformDuplication().

190 {
191  // alt check
192  bool fAltIsDown = (dwKeyState & MK_ALT) != 0;
193  if (fAltIsDown != fAltWasDown)
194  {
195  if ((fAltWasDown = fAltIsDown))
196  AltDown();
197  else
198  AltUp();
199  }
200 
201  // shift check
202  bool fShiftIsDown = (dwKeyState & MK_SHIFT) != 0;
203  if(fShiftIsDown != fShiftWasDown)
204  fShiftWasDown = fShiftIsDown;
205 
206  // Offset movement
207  float xoff = iX-X; float yoff = iY-Y;
208  X = iX; Y = iY; Zoom = iZoom;
209 
210  // Drag rotation/scale of object
211  if (DragTransform)
212  {
213  C4Object *obj = selection.GetObject();
214  if (obj)
215  {
216  int32_t new_rot = (DragRot0 + int32_t(float(X - X2)*Zoom)) % 360;
217  if (new_rot < 0) new_rot += 360;
218  if (fShiftIsDown) new_rot = (new_rot + 23) / 45 * 45;
219  int32_t new_con = DragCon0 + int32_t(float(Y2 - Y)*Zoom*(FullCon / 200));
220  int32_t con_step = FullCon / 5;
221  if (fShiftIsDown) new_con = (new_con + con_step/2) / con_step * con_step;
222  if (!obj->Def->Oversize) new_con = std::min<int32_t>(new_con, FullCon);
223  new_con = std::max<int32_t>(new_con, fShiftIsDown ? 1 : con_step);
224  bool any_change = false;
225  if (obj->Def->Rotateable)
226  if (new_rot != DragRotLast)
227  any_change = true;
228  if (obj->Def->GrowthType)
229  if (new_con != DragConLast)
230  any_change = true;
231  if (any_change)
232  {
233  EMMoveObject(EMMO_Transform, itofix(new_rot, 1), itofix(new_con, FullCon/100), obj, nullptr);
234  DragRotLast = new_rot;
235  DragConLast = new_con;
236  }
237  }
238 
239  }
240 
241  switch (Mode)
242  {
243  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
244  case C4CNS_ModeEdit:
245 #ifdef WITH_QT_EDITOR
246  shapes->MouseMove(X, Y, Hold, 3.0f/Zoom, !!(dwKeyState & MK_SHIFT), !!(dwKeyState & MK_CONTROL));
247 #endif
248  // Hold
249  if (!DragFrame && Hold && !DragShape && !DragTransform)
250  {
251  MoveSelection(ftofix(xoff),ftofix(yoff), false);
252  UpdateDropTarget(dwKeyState);
253  }
254  // Update target
255  // Shift always indicates a target outside the current selection
256  else
257  {
258  Target = (dwKeyState & MK_SHIFT) ? selection.GetLastObject() : nullptr;
259  do
260  {
261  Target = Game.FindObject(nullptr,X,Y,0,0,OCF_NotContained, Target);
262  }
263  while ((dwKeyState & MK_SHIFT) && Target && selection.IsContained(Target));
264  }
265  break;
266  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
268  // Drop target for contained object creation
269  UpdateDropTarget(dwKeyState);
270  break;
271  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
272  case C4CNS_ModeDraw:
273  switch (Console.ToolsDlg.Tool)
274  {
275  case C4TLS_Brush:
276  if (Hold) ApplyToolBrush();
277  break;
278  case C4TLS_Line: case C4TLS_Rect:
279  break;
280  }
281  break;
282  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
283  }
284 
285  // Update
286  UpdateStatusBar();
287  return true;
288 }
int32_t DragCon0
Definition: C4EditCursor.h:57
void UpdateDropTarget(DWORD dwKeyState)
bool IsContained(C4PropList *obj) const
C4Console Console
Definition: C4Globals.cpp:45
bool DragTransform
Definition: C4EditCursor.h:56
void UpdateStatusBar()
C4Game Game
Definition: C4Globals.cpp:52
const uint32_t OCF_NotContained
Definition: C4Constants.h:96
C4Object * Target
Definition: C4EditCursor.h:58
C4ToolsDlg ToolsDlg
Definition: C4Console.h:88
void EMMoveObject(enum C4ControlEMObjectAction eAction, C4Real tx, C4Real ty, C4Object *pTargetObj, const C4EditCursorSelection *pObjs=nullptr, const char *szScript=nullptr, bool drag_finished=false)
int32_t DragRot0
Definition: C4EditCursor.h:57
const int C4CNS_ModeEdit
Definition: C4Console.h:31
C4Object * GetLastObject() const
const int32_t FullCon
Definition: C4Constants.h:181
int32_t Rotateable
Definition: C4Def.h:119
const int32_t C4TLS_Rect
Definition: C4ToolsDlg.h:30
C4Object * GetObject(int32_t index=0) const
void ApplyToolBrush()
int32_t GrowthType
Definition: C4Def.h:111
C4Object * FindObject(C4Def *pDef, int32_t iX=0, int32_t iY=0, int32_t iWdt=0, int32_t iHgt=0, DWORD ocf=OCF_All, C4Object *pFindNext=nullptr)
Definition: C4Game.cpp:1158
C4Def * Def
Definition: C4Object.h:143
bool fAltWasDown
Definition: C4EditCursor.h:50
C4Fixed itofix(int32_t x)
Definition: C4Real.h:261
const int C4CNS_ModeDraw
Definition: C4Console.h:33
C4Fixed ftofix(float x)
Definition: C4Real.h:258
int32_t Oversize
Definition: C4Def.h:129
int32_t DragConLast
Definition: C4EditCursor.h:57
const int32_t C4TLS_Brush
Definition: C4ToolsDlg.h:28
void MoveSelection(C4Real iXOff, C4Real iYOff, bool drag_finished)
bool fShiftWasDown
Definition: C4EditCursor.h:51
const int C4CNS_ModeCreateObject
Definition: C4Console.h:32
int32_t Mode
Definition: C4EditCursor.h:54
C4EditCursorSelection selection
Definition: C4EditCursor.h:75
int32_t DragRotLast
Definition: C4EditCursor.h:57
const int32_t C4TLS_Line
Definition: C4ToolsDlg.h:29
int32_t Tool
Definition: C4ToolsDlg.h:53

Here is the call graph for this function:

Here is the caller graph for this function:

bool C4EditCursor::Move ( DWORD  new_key_state)

Definition at line 290 of file C4EditCursor.cpp.

References Move(), X, Y, and Zoom.

291 {
292  // Move at last position with new key state
293  return Move(X, Y, Zoom, new_key_state);
294 }
bool Move(float iX, float iY, float zoom, DWORD dwKeyState)

Here is the call graph for this function:

void C4EditCursor::MoveSelection ( C4Real  iXOff,
C4Real  iYOff,
bool  drag_finished 
)
protected

Definition at line 941 of file C4EditCursor.cpp.

References EMMO_Move, EMMO_MoveForced, EMMoveObject(), fShiftWasDown, and selection.

Referenced by LeftButtonUp(), and Move().

942 {
943  EMMoveObject(fShiftWasDown ? EMMO_MoveForced : EMMO_Move, XOff, YOff, nullptr, &selection, nullptr, drag_finished);
944 }
void EMMoveObject(enum C4ControlEMObjectAction eAction, C4Real tx, C4Real ty, C4Object *pTargetObj, const C4EditCursorSelection *pObjs=nullptr, const char *szScript=nullptr, bool drag_finished=false)
bool fShiftWasDown
Definition: C4EditCursor.h:51
C4EditCursorSelection selection
Definition: C4EditCursor.h:75

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::ObjselectDelItems ( )
protected

Definition at line 1399 of file C4EditCursor.cpp.

References itemsObjselect.

Referenced by Clear(), and DoContextMenu().

1399  {
1400  if(!itemsObjselect.size()) return;
1401  std::vector<ObjselItemDt>::iterator it = itemsObjselect.begin();
1402  while(it != itemsObjselect.end()) {
1403  #if defined(USE_WIN32_WINDOWS)
1404  if(!it->ItemId) { ++it; continue; }
1405  HMENU hContext = GetSubMenu(hMenu,0);
1406  DeleteMenu(hContext, it->ItemId, MF_BYCOMMAND);
1407  #endif
1408  ++it;
1409  }
1410  itemsObjselect.resize(0);
1411 }
std::vector< ObjselItemDt > itemsObjselect
Definition: C4EditCursor.h:70

Here is the caller graph for this function:

void C4EditCursor::OnSelectionChanged ( bool  by_objectlist = false)

Definition at line 325 of file C4EditCursor.cpp.

References Console, C4Console::ObjectListDlg, C4ConsoleGUI::PropertyDlgUpdate(), selection, and C4ObjectListDlg::Update().

Referenced by ClearPointers(), Delete(), DoContextObjsel(), FrameSelection(), GrabContents(), LeftButtonDown(), PerformDuplication(), PerformDuplicationLegacy(), and RightButtonDown().

326 {
328  if (!by_objectlist) ::Console.ObjectListDlg.Update(selection);
329 }
C4Console Console
Definition: C4Globals.cpp:45
void PropertyDlgUpdate(class C4EditCursorSelection &rSelection, bool force_function_update)
Definition: C4Console.cpp:687
C4ObjectListDlg ObjectListDlg
Definition: C4Console.h:89
C4EditCursorSelection selection
Definition: C4EditCursor.h:75
void Update(class C4EditCursorSelection &rSelection)

Here is the call graph for this function:

Here is the caller graph for this function:

bool C4EditCursor::OpenPropTools ( )

Definition at line 616 of file C4EditCursor.cpp.

References C4CNS_ModeDraw, C4CNS_ModeEdit, C4CNS_ModePlay, Console, Mode, C4ToolsDlg::Open(), C4ConsoleGUI::PropertyDlgOpen(), C4ConsoleGUI::PropertyDlgUpdate(), selection, and C4Console::ToolsDlg.

Referenced by C4AppDelegate::openPropTools:, and SetMode().

617 {
618  switch (Mode)
619  {
620  case C4CNS_ModeEdit: case C4CNS_ModePlay:
623  break;
624  case C4CNS_ModeDraw:
626  break;
627  }
628  return true;
629 }
C4Console Console
Definition: C4Globals.cpp:45
C4ToolsDlg ToolsDlg
Definition: C4Console.h:88
const int C4CNS_ModeEdit
Definition: C4Console.h:31
void PropertyDlgUpdate(class C4EditCursorSelection &rSelection, bool force_function_update)
Definition: C4Console.cpp:687
bool PropertyDlgOpen()
Definition: C4Console.cpp:685
const int C4CNS_ModePlay
Definition: C4Console.h:30
const int C4CNS_ModeDraw
Definition: C4Console.h:33
bool Open()
Definition: C4ToolsDlg.cpp:28
int32_t Mode
Definition: C4EditCursor.h:54
C4EditCursorSelection selection
Definition: C4EditCursor.h:75

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::PerformDuplication ( int32_t *  object_numbers,
int32_t  object_count,
bool  local_call 
)

Definition at line 637 of file C4EditCursor.cpp.

References C4Object::AddObjectAndContentsToArray(), AulExec, C4V_Nil, C4VArray(), C4VInt(), C4VObj(), C4PropList::Call(), C4AulScriptEngine::CloseUserFile(), C4AulScriptEngine::CreateUserFile(), C4AulExec::DirectExec(), fAltWasDown, fShiftWasDown, C4RefCntPointer< T >::Get(), StdStrBuf::getData(), C4PropListNumbered::GetEnumerationIndex(), C4AulUserFile::GetFileLength(), C4AulScriptEngine::GetPropList(), C4AulScriptEngine::GetUserFile(), C4AulUserFile::GrabFileContents(), LogF(), Move(), Objects, OnSelectionChanged(), PerformDuplicationLegacy(), PSF_SaveScenarioObjects, C4GameObjects::SafeObjectPointer(), ScriptEngine, selection, SetHold(), C4ValueArray::SetSize(), X, Y, and Zoom.

638 {
639  if (!object_count) return;
640  // Remember last OEI so duplicated objects can be determined
641  int32_t prev_oei = C4PropListNumbered::GetEnumerationIndex();
642  // Get serialized objects
643  C4RefCntPointer<C4ValueArray> object_numbers_c4v = new C4ValueArray();
644  object_numbers_c4v->SetSize(object_count);
645  int32_t total_object_count = 0;
646  for (int32_t i = 0; i < object_count; ++i)
647  {
648  C4Object *obj = ::Objects.SafeObjectPointer(object_numbers[i]);
649  if (!obj) continue;
650  total_object_count = obj->AddObjectAndContentsToArray(object_numbers_c4v, total_object_count);
651  }
652  object_numbers_c4v->SetSize(total_object_count);
653  int32_t objects_file_handle = ::ScriptEngine.CreateUserFile();
654  C4AulParSet pars(C4VInt(objects_file_handle), C4VArray(object_numbers_c4v.Get()));
656  bool result = !!result_c4v;
657  if (result_c4v.GetType() == C4V_Nil)
658  {
659  // Function returned nil: This usually means there was a script error during object writing.
660  // It could also mean the scripter overloaded global func SaveScenarioObjects and returned nil.
661  // In either case, no the objects file will contain garbage so no objects were duplicated.
662  LogF("ERROR: No valid result from global func " PSF_SaveScenarioObjects ". Regular object duplication failed.");
663  }
664  else
665  {
666  // Function completed successfully (returning true or false)
667  C4AulUserFile *file = ::ScriptEngine.GetUserFile(objects_file_handle);
668  if (!result || !file || !file->GetFileLength())
669  {
670  // Nothing written? Then we don't have objects.
671  // That's OK; not an error.
672  }
673  else
674  {
675  // Create copy of objects by executing duplication script
676  StdStrBuf data = file->GrabFileContents();
677  AulExec.DirectExec(&::ScriptEngine, data.getData(), "object duplication", false, nullptr, true);
678  }
679  }
680  ::ScriptEngine.CloseUserFile(objects_file_handle);
681  // Did duplication work?
682  bool any_duplicates = false;
683  for (C4Object *obj : ::Objects)
684  {
685  if (obj->Number > prev_oei)
686  {
687  any_duplicates = true;
688  break;
689  }
690  }
691  // If duplication created no objects, the user probably tried to copy a non-saved object
692  // Just copy the old way then
693  if (!any_duplicates)
694  {
695  PerformDuplicationLegacy(object_numbers, object_count, local_call);
696  return;
697  }
698  // Update local client status: Put new objects into selection
699  if (local_call)
700  {
701  selection.clear();
702  int64_t X_all = 0, Y_all = 0, n_selected = 0;
703  float old_x = X, old_y = Y;
704  for (C4Object *obj : ::Objects)
705  {
706  if (obj->Number > prev_oei)
707  {
708  selection.push_back(C4VObj(obj));
709  X_all += obj->GetX();
710  Y_all += obj->GetY();
711  ++n_selected;
712  }
713  }
714  // Reset EditCursor pos to center of duplicated objects, so they will be dragged along with the cursor
715  if (n_selected)
716  {
717  X = X_all / n_selected;
718  Y = Y_all / n_selected;
719  }
720  SetHold(true);
722  // Ensure duplicated objects moved to the cursor without extra mouse movement
723  // Move with shift key pressed to allow initial shift of HorizontalFixed items
724  DWORD last_key_state = MK_SHIFT;
725  if (fAltWasDown) last_key_state |= MK_ALT;
726  bool shift_was_down = fShiftWasDown;
727  Move(old_x, old_y, Zoom, last_key_state);
728  fShiftWasDown = shift_was_down;
729  }
730 }
const char * getData() const
Definition: StdBuf.h:442
int32_t GetY() const
Definition: C4Object.h:287
StdStrBuf GrabFileContents()
Definition: C4Aul.h:99
C4PropListStatic * GetPropList()
Definition: C4Aul.h:151
C4AulScriptEngine ScriptEngine
Definition: C4Globals.cpp:43
void PerformDuplicationLegacy(int32_t *pObjects, int32_t iObjectNum, bool fLocalCall)
C4Value C4VInt(int32_t i)
Definition: C4Value.h:242
C4AulExec AulExec
Definition: C4AulExec.cpp:29
C4AulUserFile * GetUserFile(int32_t handle)
C4Value C4VObj(C4Object *pObj)
Definition: C4Value.cpp:88
void CloseUserFile(int32_t handle)
static int32_t GetEnumerationIndex()
Definition: C4PropList.h:225
bool fAltWasDown
Definition: C4EditCursor.h:50
void OnSelectionChanged(bool by_objectlist=false)
T * Get() const
int32_t GetX() const
Definition: C4Object.h:286
#define PSF_SaveScenarioObjects
Definition: C4GameScript.h:101
void SetSize(int32_t inSize)
C4Value C4VArray(C4ValueArray *pArray)
Definition: C4Value.h:249
bool Move(float iX, float iY, float zoom, DWORD dwKeyState)
size_t GetFileLength()
Definition: C4Aul.h:100
bool fShiftWasDown
Definition: C4EditCursor.h:51
C4Object * SafeObjectPointer(int32_t iNumber)
int32_t AddObjectAndContentsToArray(C4ValueArray *target_array, int32_t index=0)
Definition: C4Object.cpp:4298
C4EditCursorSelection selection
Definition: C4EditCursor.h:75
void SetHold(bool fToState)
Definition: C4EditCursor.h:105
uint32_t DWORD
int32_t CreateUserFile()
bool LogF(const char *strMessage,...)
Definition: C4Log.cpp:250
C4Value DirectExec(C4PropList *p, const char *szScript, const char *szContext, bool fPassErrors=false, C4AulScriptContext *context=nullptr, bool parse_function=false)
Definition: C4AulExec.cpp:1013
C4GameObjects Objects
Definition: C4Globals.cpp:48
C4Value Call(C4PropertyName k, C4AulParSet *pPars=nullptr, bool fPassErrors=false)
Definition: C4PropList.h:110

Here is the call graph for this function:

void C4EditCursor::PerformDuplicationLegacy ( int32_t *  pObjects,
int32_t  iObjectNum,
bool  fLocalCall 
)

Definition at line 732 of file C4EditCursor.cpp.

References C4VObj(), C4PropList::Call(), C4Game::CreateObject(), Game, C4PropList::GetPrototype(), C4Object::GetX(), C4Object::GetY(), Objects, OnSelectionChanged(), C4Object::Owner, PSF_EditCursorDeselection, PSF_EditCursorSelection, C4GameObjects::SafeObjectPointer(), selection, SetHold(), and C4PropList::Status.

Referenced by PerformDuplication().

733 {
734  // Old-style object copying: Just create new objects at old object position with same prototype
735  C4Object *pOldObj, *pObj;
736  for (int i = 0; i<iObjectNum; ++i)
737  if ((pOldObj = ::Objects.SafeObjectPointer(pObjects[i])))
738  {
739  pObj = Game.CreateObject(pOldObj->GetPrototype(), pOldObj, pOldObj->Owner, pOldObj->GetX(), pOldObj->GetY());
740  if (pObj && pObj->Status)
741  {
742  // local call? adjust selection then
743  // do callbacks for all clients for sync reasons
744  if (fLocalCall) selection.push_back(C4VObj(pObj));
745  C4AulParSet pars(C4VObj(pObj));
746  if (pOldObj->Status) pOldObj->Call(PSF_EditCursorDeselection, &pars);
747  if (pObj->Status) pObj->Call(PSF_EditCursorSelection);
748  }
749  }
750  // update status
751  if (fLocalCall)
752  {
753  for (int i = 0; i<iObjectNum; ++i)
754  if ((pOldObj = ::Objects.SafeObjectPointer(pObjects[i])))
755  selection.remove(C4VObj(pOldObj));
756  SetHold(true);
758  }
759 }
int32_t GetY() const
Definition: C4Object.h:287
C4Game Game
Definition: C4Globals.cpp:52
C4Value C4VObj(C4Object *pObj)
Definition: C4Value.cpp:88
void OnSelectionChanged(bool by_objectlist=false)
C4PropList * GetPrototype() const
Definition: C4PropList.h:81
int32_t Owner
Definition: C4Object.h:110
int32_t GetX() const
Definition: C4Object.h:286
int32_t Status
Definition: C4PropList.h:168
#define PSF_EditCursorDeselection
Definition: C4GameScript.h:97
C4Object * SafeObjectPointer(int32_t iNumber)
C4EditCursorSelection selection
Definition: C4EditCursor.h:75
void SetHold(bool fToState)
Definition: C4EditCursor.h:105
#define PSF_EditCursorSelection
Definition: C4GameScript.h:96
C4Object * CreateObject(C4PropList *type, C4Object *pCreator, int32_t owner=NO_OWNER, int32_t x=50, int32_t y=50, int32_t r=0, bool grow_from_center=false, C4Real xdir=Fix0, C4Real ydir=Fix0, C4Real rdir=Fix0, int32_t iController=NO_OWNER)
Definition: C4Game.cpp:1072
C4GameObjects Objects
Definition: C4Globals.cpp:48
C4Value Call(C4PropertyName k, C4AulParSet *pPars=nullptr, bool fPassErrors=false)
Definition: C4PropList.h:110

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::PutContents ( )
protected

Definition at line 1273 of file C4EditCursor.cpp.

References DropTarget, EMMO_Enter, EMMoveObject(), Fix0, and selection.

Referenced by LeftButtonUp().

1274 {
1275  if (!DropTarget) return;
1277 }
void EMMoveObject(enum C4ControlEMObjectAction eAction, C4Real tx, C4Real ty, C4Object *pTargetObj, const C4EditCursorSelection *pObjs=nullptr, const char *szScript=nullptr, bool drag_finished=false)
C4Object * DropTarget
Definition: C4EditCursor.h:58
C4EditCursorSelection selection
Definition: C4EditCursor.h:75
const C4Real Fix0
Definition: C4Real.h:312

Here is the call graph for this function:

Here is the caller graph for this function:

bool C4EditCursor::RemoveFromSelection ( C4PropList remove_obj)

Definition at line 341 of file C4EditCursor.cpp.

References C4VPropList(), C4PropList::GetObject(), C4EditCursorSelection::IsContained(), selection, and C4PropList::Status.

Referenced by LeftButtonDown().

342 {
343  if (!remove_proplist) return false;
344  C4Object *remove_obj = remove_proplist->GetObject();
345  if (remove_obj && !remove_obj->Status) return false;
346  // remove object from selection and do script callback
347  if (!selection.IsContained(remove_proplist)) return false;
348  selection.remove(C4VPropList(remove_proplist));
349  return true;
350 }
bool IsContained(C4PropList *obj) const
virtual C4Object * GetObject()
Definition: C4PropList.cpp:667
C4Value C4VPropList(C4PropList *p)
Definition: C4Value.h:245
int32_t Status
Definition: C4PropList.h:168
C4EditCursorSelection selection
Definition: C4EditCursor.h:75

Here is the call graph for this function:

Here is the caller graph for this function:

bool C4EditCursor::RightButtonDown ( DWORD  dwKeyState)

Definition at line 445 of file C4EditCursor.cpp.

References AddToSelection(), C4CNS_ModeEdit, ClearSelection(), Mode, OnSelectionChanged(), selection, Target, X, and Y.

Referenced by ViewportWinProc().

446 {
447 
448  switch (Mode)
449  {
450  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
451  case C4CNS_ModeEdit:
452  if ( (dwKeyState & MK_CONTROL) == 0)
453  {
454  // Check whether cursor is on anything in the selection
455  bool fCursorIsOnSelection = false;
456  for (C4Value &obj : selection)
457  {
458  if (obj.getObj() && obj.getObj()->At(X,Y))
459  {
460  fCursorIsOnSelection = true;
461  break;
462  }
463  }
464  if (!fCursorIsOnSelection)
465  {
466  // Click on unselected
467  if (Target && !selection.IsContained(Target))
468  {
470  }
471  // Click on nothing
472  if (!Target) ClearSelection();
473  }
474  }
476  break;
477  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
478  }
479 
480  return true;
481 }
C4Object * Target
Definition: C4EditCursor.h:58
const int C4CNS_ModeEdit
Definition: C4Console.h:31
void ClearSelection(C4PropList *next_selection=nullptr)
void OnSelectionChanged(bool by_objectlist=false)
int32_t Mode
Definition: C4EditCursor.h:54
void AddToSelection(C4PropList *add_obj)
C4EditCursorSelection selection
Definition: C4EditCursor.h:75

Here is the call graph for this function:

Here is the caller graph for this function:

bool C4EditCursor::RightButtonUp ( DWORD  dwKeyState)

Definition at line 593 of file C4EditCursor.cpp.

References DoContextMenu(), Target, and UpdateStatusBar().

Referenced by ViewportWinProc().

594 {
595  Target=nullptr;
596 #ifndef WITH_QT_EDITOR
597  DoContextMenu(dwKeyState);
598 #endif
599  // Update
600  UpdateStatusBar();
601 
602  return true;
603 }
void UpdateStatusBar()
C4Object * Target
Definition: C4EditCursor.h:58
bool DoContextMenu(DWORD dwKeyState)

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::SetCreatorDef ( C4Def new_def)
inline

Definition at line 148 of file C4EditCursor.h.

148 { creator_def = new_def; creator_overlay.reset(nullptr); }
std::unique_ptr< C4GraphicsOverlay > creator_overlay
Definition: C4EditCursor.h:61
class C4Def * creator_def
Definition: C4EditCursor.h:60
void C4EditCursor::SetHighlightedObject ( C4Object new_highlight)

Definition at line 1457 of file C4EditCursor.cpp.

References C4VObj(), and highlighted_object.

1458 {
1459  highlighted_object = C4VObj(new_highlight);
1460 }
C4Value C4VObj(C4Object *pObj)
Definition: C4Value.cpp:88
C4Value highlighted_object
Definition: C4EditCursor.h:59

Here is the call graph for this function:

void C4EditCursor::SetHold ( bool  fToState)
inline

Definition at line 105 of file C4EditCursor.h.

Referenced by PerformDuplication(), and PerformDuplicationLegacy().

105 { Hold = fToState; }

Here is the caller graph for this function:

bool C4EditCursor::SetMode ( int32_t  iMode)

Definition at line 1004 of file C4EditCursor.cpp.

References C4CNS_ModeCreateObject, C4CNS_ModeDraw, C4CNS_ModeEdit, C4CNS_ModePlay, Console, C4MouseControl::HideCursor(), Mode, MouseControl, OpenPropTools(), C4ConsoleGUI::PropertyDlgClose(), C4MouseControl::ShowCursor(), C4ConsoleGUI::ToolsDlgClose(), and C4ConsoleGUI::UpdateModeCtrls().

Referenced by ConsoleDlgProc(), and ToggleMode().

1005 {
1006  // Store focus
1007 #ifdef USE_WIN32_WINDOWS
1008  HWND hFocus=GetFocus();
1009 #endif
1010  // Update console buttons (always)
1011  Console.UpdateModeCtrls(iMode);
1012  // No change
1013  if (iMode==Mode) return true;
1014  // Set mode
1015  Mode = iMode;
1016  // Update prop tools by mode
1017  switch (Mode)
1018  {
1021  break;
1022  case C4CNS_ModeDraw:
1024  break;
1025  }
1026  if (Mode == C4CNS_ModePlay)
1027  {
1029  }
1030  else
1031  {
1032  OpenPropTools();
1034  }
1035  // Restore focus
1036 #ifdef USE_WIN32_WINDOWS
1037  SetFocus(hFocus);
1038 #endif
1039  // Done
1040  return true;
1041 }
C4Console Console
Definition: C4Globals.cpp:45
bool OpenPropTools()
C4MouseControl MouseControl
Definition: C4Globals.cpp:47
const int C4CNS_ModeEdit
Definition: C4Console.h:31
const int C4CNS_ModePlay
Definition: C4Console.h:30
const int C4CNS_ModeDraw
Definition: C4Console.h:33
bool UpdateModeCtrls(int iMode)
Definition: C4Console.cpp:699
const int C4CNS_ModeCreateObject
Definition: C4Console.h:32
void ToolsDlgClose()
Definition: C4Console.cpp:666
int32_t Mode
Definition: C4EditCursor.h:54
void PropertyDlgClose()
Definition: C4Console.cpp:686

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::SetMouseHover ( bool  h)
inline

Definition at line 109 of file C4EditCursor.h.

109 { has_mouse_hover = h; }
bool has_mouse_hover
Definition: C4EditCursor.h:52
bool C4EditCursor::ToggleMode ( )

Definition at line 1043 of file C4EditCursor.cpp.

References C4CNS_ModeCreateObject, C4CNS_ModeDraw, C4CNS_ModeEdit, C4CNS_ModePlay, EditingOK(), Mode, and SetMode().

Referenced by C4Game::InitKeyboard().

1044 {
1045 
1046  if (!EditingOK()) return false;
1047 
1048  // Step through modes
1049  int32_t iNewMode;
1050  switch (Mode)
1051  {
1052  case C4CNS_ModePlay: iNewMode=C4CNS_ModeEdit; break;
1053 #ifdef WITH_QT_EDITOR
1054  case C4CNS_ModeEdit: iNewMode=C4CNS_ModeCreateObject; break;
1055 #else
1056  case C4CNS_ModeEdit: iNewMode = C4CNS_ModeDraw; break;
1057 #endif
1058  case C4CNS_ModeCreateObject: iNewMode = C4CNS_ModeDraw; break;
1059  case C4CNS_ModeDraw: iNewMode=C4CNS_ModePlay; break;
1060  default: iNewMode=C4CNS_ModePlay; break;
1061  }
1062 
1063  // Set new mode
1064  SetMode(iNewMode);
1065 
1066  return true;
1067 }
bool SetMode(int32_t iMode)
const int C4CNS_ModeEdit
Definition: C4Console.h:31
const int C4CNS_ModePlay
Definition: C4Console.h:30
const int C4CNS_ModeDraw
Definition: C4Console.h:33
const int C4CNS_ModeCreateObject
Definition: C4Console.h:32
int32_t Mode
Definition: C4EditCursor.h:54
bool EditingOK(bool for_landscape_drawing=false)

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::ToolFailure ( )
protected

Definition at line 1300 of file C4EditCursor.cpp.

References Console, FormatString(), StdStrBuf::getData(), Hold, LoadResStr(), C4ToolsDlg::Material, C4Console::Message(), C4ToolsDlg::Texture, and C4Console::ToolsDlg.

1301 {
1302  C4ToolsDlg *pTools=&Console.ToolsDlg;
1303  Hold=false;
1304  Console.Message(FormatString(LoadResStr("IDS_CNS_NOMATDEF"),pTools->Material,pTools->Texture).getData());
1305 }
const char * getData() const
Definition: StdBuf.h:442
C4Console Console
Definition: C4Globals.cpp:45
C4ToolsDlg ToolsDlg
Definition: C4Console.h:88
const char * LoadResStr(const char *id)
Definition: C4Language.h:83
char Texture[C4M_MaxName+1]
Definition: C4ToolsDlg.h:57
char Material[C4M_MaxName+1]
Definition: C4ToolsDlg.h:56
bool Message(const char *szMessage, bool fQuery=false)
Definition: C4Console.cpp:292
StdStrBuf FormatString(const char *szFmt,...)
Definition: StdBuf.cpp:270

Here is the call graph for this function:

void C4EditCursor::UpdateDropTarget ( DWORD  dwKeyState)
protected

Definition at line 1254 of file C4EditCursor.cpp.

References C4CNS_ModeCreateObject, creator_def, DropTarget, C4EditCursorSelection::GetObject(), C4EditCursorSelection::IsContained(), Mode, Objects, selection, X, and Y.

Referenced by Move().

1255 {
1256  // A drop target is set if holding down control either while moving an object or in object creation mode
1257  DropTarget=nullptr;
1258 
1259  if (dwKeyState & MK_CONTROL)
1261  for (C4Object *cobj : Objects)
1262  {
1263  if (cobj->Status)
1264  if (!cobj->Contained)
1265  if (Inside<int32_t>(X-(cobj->GetX()+cobj->Shape.x),0,cobj->Shape.Wdt-1))
1266  if (Inside<int32_t>(Y-(cobj->GetY()+cobj->Shape.y),0,cobj->Shape.Hgt-1))
1267  if (!selection.IsContained(cobj))
1268  { DropTarget=cobj; break; }
1269  }
1270 
1271 }
bool IsContained(C4PropList *obj) const
C4Object * GetObject(int32_t index=0) const
class C4Def * creator_def
Definition: C4EditCursor.h:60
C4Object * DropTarget
Definition: C4EditCursor.h:58
const int C4CNS_ModeCreateObject
Definition: C4Console.h:32
int32_t Mode
Definition: C4EditCursor.h:54
C4EditCursorSelection selection
Definition: C4EditCursor.h:75
C4GameObjects Objects
Definition: C4Globals.cpp:48

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::UpdateStatusBar ( )
protected

Definition at line 296 of file C4EditCursor.cpp.

References C4CNS_ModeCreateObject, C4CNS_ModeDraw, C4CNS_ModeEdit, C4CNS_ModePlay, Console, C4ConsoleGUI::CONSOLE_Cursor, StdStrBuf::CopyUntil(), creator_def, C4ConsoleGUI::DisplayInfoText(), StdStrBuf::Format(), C4Landscape::GetBackMat(), C4MouseControl::GetCaption(), C4Landscape::GetMat(), C4PropList::GetName(), C4PropListStatic::GetName(), Landscape, LoadResStr(), C4MaterialMap::Map, MaterialMap, MatValid(), Mode, MouseControl, C4MaterialCore::Name, Target, X, and Y.

Referenced by LeftButtonUp(), Move(), and RightButtonUp().

297 {
298  int32_t X=this->X, Y=this->Y;
299  StdStrBuf str;
300  switch (Mode)
301  {
302  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
303  case C4CNS_ModePlay:
305  break;
306  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
307  case C4CNS_ModeEdit:
308  str.Format("%i/%i (%s)",X,Y,Target ? (Target->GetName()) : LoadResStr("IDS_CNS_NOTHING") );
309  break;
310  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
312  str.Format(LoadResStr("IDS_CNS_CREATESTATUS"), creator_def ? (creator_def->GetName()) : LoadResStr("IDS_CNS_NOTHING"));
313  break;
314  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
315  case C4CNS_ModeDraw:
316  str.Format("%i/%i (fg: %s, bg: %s)",X,Y,
317  MatValid(::Landscape.GetMat(X,Y)) ? ::MaterialMap.Map[::Landscape.GetMat(X,Y)].Name : LoadResStr("IDS_CNS_NOTHING"),
318  MatValid(::Landscape.GetBackMat(X,Y)) ? ::MaterialMap.Map[::Landscape.GetBackMat(X,Y)].Name : LoadResStr("IDS_CNS_NOTHING") );
319  break;
320  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
321  }
323 }
C4Console Console
Definition: C4Globals.cpp:45
C4Object * Target
Definition: C4EditCursor.h:58
C4Material * Map
Definition: C4Material.h:169
void Format(const char *szFmt,...) GNUC_FORMAT_ATTRIBUTE_O
Definition: StdBuf.cpp:174
C4MouseControl MouseControl
Definition: C4Globals.cpp:47
const int C4CNS_ModeEdit
Definition: C4Console.h:31
const char * LoadResStr(const char *id)
Definition: C4Language.h:83
const char * GetName() const override
Definition: C4PropList.cpp:267
char Name[C4M_MaxName+1]
Definition: C4Material.h:89
C4Landscape Landscape
virtual const char * GetName() const
Definition: C4PropList.cpp:649
const int C4CNS_ModePlay
Definition: C4Console.h:30
class C4Def * creator_def
Definition: C4EditCursor.h:60
const int C4CNS_ModeDraw
Definition: C4Console.h:33
int32_t GetMat(int32_t x, int32_t y) const
void CopyUntil(const char *szString, char cUntil)
Definition: StdBuf.h:613
int32_t GetBackMat(int32_t x, int32_t y) const
const int C4CNS_ModeCreateObject
Definition: C4Console.h:32
C4MaterialMap MaterialMap
Definition: C4Material.cpp:970
int32_t Mode
Definition: C4EditCursor.h:54
void DisplayInfoText(InfoTextType type, StdStrBuf &text)
Definition: C4Console.cpp:679
const char * GetCaption()
bool MatValid(int32_t mat)
Definition: C4Material.h:210

Here is the call graph for this function:

Here is the caller graph for this function:

void C4EditCursor::ValidateSelection ( )
inline

Definition at line 153 of file C4EditCursor.h.

153 { selection_invalid = false; }
bool selection_invalid
Definition: C4EditCursor.h:53

Member Data Documentation

class C4Def* C4EditCursor::creator_def
protected
std::unique_ptr<C4GraphicsOverlay> C4EditCursor::creator_overlay
protected

Definition at line 61 of file C4EditCursor.h.

Referenced by Clear(), Default(), and Draw().

int32_t C4EditCursor::DragCon0
protected

Definition at line 57 of file C4EditCursor.h.

Referenced by Default(), LeftButtonDown(), and Move().

int32_t C4EditCursor::DragConLast
protected

Definition at line 57 of file C4EditCursor.h.

Referenced by Default(), LeftButtonDown(), and Move().

bool C4EditCursor::DragFrame
protected

Definition at line 56 of file C4EditCursor.h.

Referenced by Default(), Draw(), LeftButtonDown(), LeftButtonUp(), and Move().

bool C4EditCursor::DragLine
protected

Definition at line 56 of file C4EditCursor.h.

Referenced by Default(), Draw(), LeftButtonDown(), and LeftButtonUp().

int32_t C4EditCursor::DragRot0
protected

Definition at line 57 of file C4EditCursor.h.

Referenced by Default(), LeftButtonDown(), and Move().

int32_t C4EditCursor::DragRotLast
protected

Definition at line 57 of file C4EditCursor.h.

Referenced by Default(), LeftButtonDown(), and Move().

bool C4EditCursor::DragShape
protected

Definition at line 56 of file C4EditCursor.h.

Referenced by Default(), LeftButtonDown(), LeftButtonUp(), and Move().

bool C4EditCursor::DragTransform
protected

Definition at line 56 of file C4EditCursor.h.

Referenced by Default(), DrawObject(), LeftButtonDown(), LeftButtonUp(), and Move().

C4Object * C4EditCursor::DropTarget
protected
bool C4EditCursor::fAltWasDown
protected

Definition at line 50 of file C4EditCursor.h.

Referenced by Default(), KeyDown(), KeyUp(), Move(), and PerformDuplication().

bool C4EditCursor::fShiftWasDown
protected

Definition at line 51 of file C4EditCursor.h.

Referenced by Default(), Draw(), Execute(), KeyDown(), KeyUp(), Move(), MoveSelection(), and PerformDuplication().

bool C4EditCursor::has_mouse_hover
protected

Definition at line 52 of file C4EditCursor.h.

Referenced by Default(), and Draw().

C4Value C4EditCursor::highlighted_object
protected

Definition at line 59 of file C4EditCursor.h.

Referenced by Draw(), and SetHighlightedObject().

bool C4EditCursor::Hold
protected
std::vector<ObjselItemDt> C4EditCursor::itemsObjselect
protected

Definition at line 70 of file C4EditCursor.h.

Referenced by AppendMenuItem(), DoContextMenu(), and ObjselectDelItems().

bool C4EditCursor::selection_invalid
protected

Definition at line 53 of file C4EditCursor.h.

Referenced by Default(), and IsSelectionInvalidated().

C4Object* C4EditCursor::Target
protected
float C4EditCursor::X2
protected
float C4EditCursor::Y2
protected
float C4EditCursor::Zoom
protected

Definition at line 55 of file C4EditCursor.h.

Referenced by IsHoveringTransformMarker(), LeftButtonDown(), Move(), and PerformDuplication().


The documentation for this class was generated from the following files: