/*
** Command & Conquer Generals Zero Hour(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see .
*/
// FILE: LayersList.h
/*---------------------------------------------------------------------------*/
/* EA Pacific */
/* Confidential Information */
/* Copyright (C) 2001 - All Rights Reserved */
/* DO NOT DISTRIBUTE */
/*---------------------------------------------------------------------------*/
/* Project: RTS3 */
/* File name: LayersList.h */
/* Created: John K. McDonald, Jr., 5/10/2002 */
/* Desc: Layers List Declarations */
/* Revision History: */
/* 5/10/2002 : Initial creation */
/*---------------------------------------------------------------------------*/
#pragma once
#ifndef _H_LAYERSLIST_
#define _H_LAYERSLIST_
// INCLUDES ///////////////////////////////////////////////////////////////////
#include "Common/AsciiString.h"
#include
#include
// DEFINES ////////////////////////////////////////////////////////////////////
// FORWARD DECLARATIONS ///////////////////////////////////////////////////////
class MapObject;
class PolygonTrigger;
// TYPE DEFINES ///////////////////////////////////////////////////////////////
typedef std::list ListMapObjectPtr;
typedef ListMapObjectPtr::iterator ListMapObjectPtrIt;
typedef std::list ListPolygonTriggerPtr;
typedef ListPolygonTriggerPtr::iterator ListPolygonTriggerPtrIt;
struct Layer
{
AsciiString layerName;
ListMapObjectPtr objectsInLayer;
ListPolygonTriggerPtr polygonTriggersInLayer;
Bool show;
};
typedef std::list ListLayer;
typedef ListLayer::iterator ListLayerIt;
// Class Definition for overridden Tree control that supports Right-click context sensitive menu.
class CLLTreeCtrl : public CTreeCtrl
{
public:
AsciiString getLastClickedLayer(void) { return mLastClickedLayer; }
AsciiString getLastClickedObject(void) { return mLastClickedObject; }
protected:
AsciiString mLastClickedLayer;
AsciiString mLastClickedObject;
void buildMoveMenu(CMenu* pPopup, UINT firstID);
virtual void OnRButtonDown(UINT nFlags, CPoint point);
DECLARE_MESSAGE_MAP()
};
// Class Definition
class LayersList : public CDialog
{
public:
enum { IDD = IDD_LAYERSLIST };
LayersList(UINT nIDTemplate = LayersList::IDD, CWnd *parentWnd = NULL);
virtual ~LayersList();
void resetLayers();
void addMapObjectToLayersList(IN MapObject *objToAdd, AsciiString layerToAddTo = AsciiString(TheDefaultLayerName.c_str()));
void addPolygonTriggerToLayersList(IN PolygonTrigger *triggerToAdd, AsciiString layerToAddTo = AsciiString(TheDefaultLayerName.c_str()));
AsciiString removeMapObjectFromLayersList(IN MapObject *objToRemove);
AsciiString removePolygonTriggerFromLayersList(IN PolygonTrigger *triggerToRemove);
void changeMapObjectLayer(IN MapObject *objToChange, AsciiString layerToPlaceOn);
void changePolygonTriggerLayer(IN PolygonTrigger *triggerToChange, AsciiString layerToPlaceOn);
void addLayerNamed(IN AsciiString layerToAdd);
void removeLayerNamed(IN AsciiString layerToRemove);
void changeLayerName(IN AsciiString oldLayerName, IN AsciiString newLayerName);
void mergeLayerInto(IN ListLayerIt src, IN ListLayerIt dst);
Bool isLayerHidden(IN AsciiString layerToTest);
void updateUIFromList(void);
void disableUpdates() { m_performUpdates = false; }
void enableUpdates() { m_performUpdates = true; updateUIFromList(); }
const ListLayer& GetAllLayers(void) const { return mLayers; }
static MapObject *findObjectByUID(AsciiString objectIDToFind);
static PolygonTrigger *findPolygonTriggerByUID(AsciiString objectIDToFind);
static Bool findAndSelectMapObject(AsciiString selectedItemAsciiString);
static Bool findAndSelectPolygonTrigger(AsciiString selectedItemAsciiString);
static void unselectAllMapObjects(void);
static void unselectAllPolygonTriggers(void);
public:
// This is a string because making it an AsciiString makes us barf on construction. :-(
static std::string TheDefaultLayerName;
static std::string ThePolygonTriggerLayerName;
static std::string TheDefaultNewLayerName;
static std::string TheActiveLayerName;
static const std::string TheUnmutableDefaultLayerName;
protected:
AsciiString mCurrentlyEditingLabel;
ListLayer mLayers;
CLLTreeCtrl *mTree;
CImageList mImageList;
Bool m_performUpdates;
Bool m_activatedLayer;
HTREEITEM findTreeLayerNamed(const AsciiString& nameToFind);
HTREEITEM findTreeObjectNamed(const AsciiString& objectToFind, HTREEITEM layerItem);
// This function takes an MapObject, and does one of the following:
// 1) Return true if the MapObject can be found, and
// layerIt points to a valid layer iterator in which the MapObject was found
// MapObjectIt points to a valid MapObject iterator on the layerIts MapObjectsInLayer member
// 2) Returns false if the MapObject cannot be found.
Bool findMapObjectAndList(IN MapObject *MapObjectToFind, OUT ListLayerIt *layerIt = NULL, OUT ListMapObjectPtrIt *MapObjectIt = NULL);
Bool findPolygonTriggerAndList(IN PolygonTrigger *PolygonTriggerToFind, OUT ListLayerIt *layerIt = NULL, OUT ListPolygonTriggerPtrIt *PolygonTriggerIt = NULL);
// This function takes a layer name, and does one of the following:
// 1) Return true if the layer can be found, and
// layerIt points to a valid layer iterator named layerName
// 2) Returns false if the layer cannot be found.
Bool findLayerNamed(IN AsciiString layerName, OUT ListLayerIt *layerIt = NULL);
void addMapObjectToLayer(IN MapObject *objToAdd, IN ListLayerIt *layerIt);
void addPolygonTriggerToLayer(IN PolygonTrigger *objToAdd, IN ListLayerIt *layerIt);
void removeMapObjectFromLayer(IN MapObject *objToRemove, IN ListLayerIt *layerIt = NULL, IN ListMapObjectPtrIt *MapObjectIt = NULL);
void removePolygonTriggerFromLayer(IN PolygonTrigger *triggerToRemove, IN ListLayerIt *layerIt = NULL, IN ListPolygonTriggerPtrIt *PolygonTriggerIt = NULL);
void updateObjectRenderFlags(IN ListLayerIt *layerIt);
void updateTreeImages();
protected:
virtual void OnOK();
virtual void OnCancel();
virtual BOOL OnInitDialog();
afx_msg void OnBeginEditLabel(NMHDR *pNotifyStruct, LRESULT* pResult);
afx_msg void OnEndEditLabel(NMHDR *pNotifyStruct, LRESULT* pResult);
afx_msg void OnMergeLayer(UINT commandID);
afx_msg void OnMergeObject(UINT commandID);
afx_msg void OnMergeViewSelection(UINT commandID);
afx_msg void OnSelectActiveLayer();
afx_msg void OnSelectLayerObject();
afx_msg void OnNewLayer();
afx_msg void OnDeleteLayer();
afx_msg void OnHideShowLayer();
DECLARE_MESSAGE_MAP()
};
extern LayersList *TheLayersList;
#endif /* _H_LAYERSLIST_ */