/*
** 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 .
*/
#if !defined(AFX_MAPOBJECTPROPS_H__44517B9E_12AB_4E2C_B49B_D6BB65C59649__INCLUDED_)
#define AFX_MAPOBJECTPROPS_H__44517B9E_12AB_4E2C_B49B_D6BB65C59649__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// mapobjectprops.h : header file
//
#include "OptionsPanel.h"
#include "Common/Dict.h"
#include "WBPopupSlider.h"
class MapObject;
class ModifyObjectUndoable;
class MultipleUndoable;
class CWorldBuilderDoc;
class MapObject;
/////////////////////////////////////////////////////////////////////////////
// External Defines
extern const char* NEUTRAL_TEAM_UI_STR;
extern const char* NEUTRAL_TEAM_INTERNAL_STR;
/////////////////////////////////////////////////////////////////////////////
// MapObjectProps dialog
class MapObjectProps : public COptionsPanel, public PopupSliderOwner
{
// Construction
public:
MapObjectProps(Dict* dictToEdit = NULL, const char* title = NULL, CWnd* pParent = NULL); // standard constructor
~MapObjectProps();
void makeMain();
// Dialog Data
//{{AFX_DATA(MapObjectProps)
enum { IDD = IDD_MAPOBJECT_PROPS };
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(MapObjectProps)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
void getAllSelectedDicts(void);
static MapObjectProps *TheMapObjectProps;
// Data common to all property pages
Dict* m_dictToEdit;
std::vector m_allSelectedDicts;
const char* m_title;
MapObject *m_selectedObject;
MapObject *m_dictSource; // Source object for m_dictToEdit. m_selectedObject is not always the current source
// of m_dictToEdit, and I don't understand why, so I'm making another MapObject pointer
// which is always kept in sync.
Real m_angle;
Real m_height;
Real m_scale;
WBPopupSliderButton m_heightSlider;
WBPopupSliderButton m_angleSlider;
WBPopupSliderButton m_scaleSlider;
Int m_defaultEntryIndex; //< Index in the sound combobox of the entry labelled "default"
Bool m_defaultIsNone; //< The default for this object is no sound
AsciiString m_defaultEntryName; //< The original name of the default entry
ModifyObjectUndoable *m_posUndoable;
Coord3D m_position;
void deletePages();
void updateTheUI(void);
void enableButtons();
int getSel();
// Generated message map functions
//{{AFX_MSG(MapObjectProps)
virtual BOOL OnInitDialog();
virtual void OnOK();
virtual void OnCancel();
afx_msg void OnSelchangeProperties();
afx_msg void OnEditprop();
afx_msg void OnNewprop();
afx_msg void OnRemoveprop();
afx_msg void OnDblclkProperties();
afx_msg void _TeamToDict(void);
afx_msg void _NameToDict(void);
afx_msg void _ScriptToDict(void);
afx_msg void _WeatherToDict(void);
afx_msg void _TimeToDict(void);
afx_msg void _ScaleToDict(void);
afx_msg void SetZOffset(void);
afx_msg void SetAngle(void);
afx_msg void SetPosition(void);
afx_msg void OnScaleOn();
afx_msg void OnScaleOff();
afx_msg void OnKillfocusMAPOBJECTXYPosition();
afx_msg void _PrebuiltUpgradesToDict(void);
afx_msg void _HealthToDict(void);
afx_msg void _EnabledToDict(void);
afx_msg void _IndestructibleToDict(void);
afx_msg void _UnsellableToDict(void);
afx_msg void _TargetableToDict();
afx_msg void _PoweredToDict(void);
afx_msg void _AggressivenessToDict(void);
afx_msg void _VisibilityToDict(void);
afx_msg void _VeterancyToDict(void);
afx_msg void _ShroudClearingDistanceToDict(void);
afx_msg void _RecruitableAIToDict(void);
afx_msg void _SelectableToDict(void);
afx_msg void _HPsToDict();
afx_msg void _StoppingDistanceToDict(void);
afx_msg void attachedSoundToDict(void);
afx_msg void customizeToDict(void);
afx_msg void enabledToDict(void);
afx_msg void loopingToDict(void);
afx_msg void loopCountToDict(void);
afx_msg void minVolumeToDict(void);
afx_msg void volumeToDict(void);
afx_msg void minRangeToDict(void);
afx_msg void maxRangeToDict(void);
afx_msg void priorityToDict(void);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
void _DictToName(void);
void _DictToTeam(void);
void _DictToScript(void);
void _DictToScale(void);
void _DictToWeather(void);
void _DictToTime(void);
void _DictToPrebuiltUpgrades(void);
void _DictToHealth(void);
void _DictToHPs(void);
void _DictToEnabled(void);
void _DictToDestructible(void);
void _DictToUnsellable(void);
void _DictToTargetable(void);
void _DictToPowered(void);
void _DictToAggressiveness(void);
void _DictToVisibilityRange(void);
void _DictToVeterancy(void);
void _DictToShroudClearingDistance(void);
void _DictToRecruitableAI();
void _DictToSelectable(void);
void _DictToStoppingDistance(void);
void ShowZOffset(MapObject* pMapObj);
void ShowAngle(MapObject* pMapObj);
void ShowPosition(MapObject* pMapObj);
void dictToAttachedSound(void);
void dictToCustomize(void);
void dictToEnabled(void);
void dictToLooping(void);
void dictToLoopCount(void);
void dictToMinVolume(void);
void dictToVolume(void);
void dictToMinRange(void);
void dictToMaxRange(void);
void dictToPriority(void);
void clearCustomizeFlag( CWorldBuilderDoc* pDoc, MultipleUndoable * ownerUndoable );
// Implementation of PopupSliderOwner callbacks
virtual void GetPopSliderInfo(const long sliderID, long *pMin, long *pMax, long *pLineSize, long *pInitial);
virtual void PopSliderChanged(const long sliderID, long theVal);
virtual void PopSliderFinished(const long sliderID, long theVal);
public:
static MapObject *getSingleSelectedMapObject(void);
static void update(void);
private:
/// Disallow copying: Object is not set up to be copied
MapObjectProps( const MapObjectProps & other ); // Deliberately undefined
MapObjectProps & operator=( const MapObjectProps & other ); // Deliberately undefined
void updateTheUI(MapObject *pMapObj);
void InitSound(void);
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_MAPOBJECTPROPS_H__44517B9E_12AB_4E2C_B49B_D6BB65C59649__INCLUDED_)