16 #include "Management.h"
27 #define ID_WING_MENU 9000
31 static char THIS_FILE[] = __FILE__;
73 CDialog::DoDataExchange(pDX);
99 if (pDX->m_bSaveAndValidate) {
146 ON_NOTIFY(TVN_BEGINLABELEDIT, IDC_ARRIVAL_TREE, OnBeginlabeleditArrivalTree)
147 ON_NOTIFY(TVN_BEGINLABELEDIT, IDC_DEPARTURE_TREE, OnBeginlabeleditDepartureTree)
148 ON_NOTIFY(TVN_ENDLABELEDIT, IDC_ARRIVAL_TREE, OnEndlabeleditArrivalTree)
149 ON_NOTIFY(TVN_ENDLABELEDIT, IDC_DEPARTURE_TREE, OnEndlabeleditDepartureTree)
156 ON_NOTIFY(TVN_SELCHANGED, IDC_ARRIVAL_TREE, OnSelchangedArrivalTree)
157 ON_NOTIFY(TVN_SELCHANGED, IDC_DEPARTURE_TREE, OnSelchangedDepartureTree)
162 ON_CBN_SELCHANGE(
IDC_HOTKEY, OnSelchangeHotkey)
179 box = (CComboBox *) GetDlgItem(IDC_ARRIVAL_LOCATION);
184 box = (CComboBox *) GetDlgItem(IDC_DEPARTURE_LOCATION);
190 m_waves_spin.SetRange(1, 99);
191 m_arrival_tree.link_modified(&modified);
192 m_arrival_tree.setup((CEdit *) GetDlgItem(
IDC_HELP_BOX));
193 m_departure_tree.link_modified(&modified);
194 m_departure_tree.setup();
195 m_arrival_delay_spin.SetRange(0, 999);
196 m_departure_delay_spin.SetRange(0, 999);
206 m = pMenu->GetSubMenu(0);
212 CDialog::OnInitMenu(pMenu);
231 SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
237 SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
242 SetWindowPos(
Fred_main_wnd, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_HIDEWINDOW);
243 Fred_main_wnd->SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
249 int i,
enable =
TRUE, player_wing = 0, player_enabled = 1;
250 CComboBox *arrival_box, *departure_box;
252 nprintf((
"Fred routing",
"Wing dialog load safe\n"));
284 player_enabled = enable =
FALSE;
364 departure_box->ResetContent();
413 if (i < Num_reinforcements)
502 nprintf((
"Fred routing",
"Wing dialog load\n"));
539 char *str, old_name[255],
buf[512];
543 nprintf((
"Fred routing",
"Wing dialog save\n"));
560 z =
MessageBox(
"This wing name is already being used by another wing\n"
578 z =
MessageBox(
"This wing name is already being used by a ship\n"
599 z =
MessageBox(
"This wing name is already being used by a team.\n"
617 z =
MessageBox(
"This wing name is already being used by a target priority group.\n"
634 z =
MessageBox(
"This wing name is already being used by a waypoint path\n"
650 z =
MessageBox(
"This wing name is already being used by a jump node\n"
660 if (!
stricmp(m_wing_name.Left(1),
"<")) {
665 z =
MessageBox(
"Wing names not allowed to begin with <\n"
684 if (strcmp(old_name, str)) {
712 char error_message[256];
713 sprintf(error_message,
"Too many reinforcements; could not add wing '%s' to reinforcement list!", str);
745 int i, d, hotkey = -1;
747 nprintf((
"Fred routing",
"Wing dialog save safe\n"));
760 sprintf(buf,
"Wave threshold is set too high. Value has been lowered to %d", (
int)
m_threshold);
768 sprintf(buf,
"Number of waves illegal. Can not have %d waves. Number of waves has as been set to 1.", (
int)
m_waves);
800 sprintf(buf,
"Ship must arrive at least %d meters away from target.\n"
801 "Value has been reset to this. Use with caution!\r\n"
802 "Recommended distance is %d meters.\r\n", d, (
int)(2.0
f *
Objects[
Ships[i].objnum].radius) );
921 return CDialog::OnCommand(wParam, lParam);
927 NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
929 new_pos = pNMUpDown->iPos + pNMUpDown->iDelta;
930 if (new_pos > 0 && new_pos < 100) {
952 TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
964 TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
976 TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
983 TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
990 nprintf((
"Fred routing",
"Wing dialog verify\n"));
1020 dlg_goals.DoModal();
1022 MessageBox(
"One or more ships of this wing also has initial orders",
1023 "Possible conflict");
1043 while (!
Wings[wing].wave_count) {
1069 while (!
Wings[wing].wave_count) {
1090 NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
1091 h = pNMTreeView->itemNew.hItem;
1102 NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
1103 h = pNMTreeView->itemNew.hItem;
1137 GetWindowRect(rect);
1150 GetWindowRect(rect);
1151 if (((CButton *) GetDlgItem(
IDC_HIDE_CUES)) -> GetCheck()) {
1244 if ( i == MAX_STARTING_WINGS )
1248 if ( (set_num >= MAX_STARTING_WINGS) || (set_num != i) ) {
1257 char *Logo_ext =
"Image Files (*.dds, *.pcx)|*.dds;*.pcx|"
1258 "DDS Files (*.dds)|*.dds|"
1259 "PCX Files (*.pcx)|*.pcx|"
1260 "All Files (*.*)|*.*|"
1270 CFileDialog dlg(
TRUE, NULL, NULL, OFN_FILEMUSTEXIST | OFN_NOCHANGEDIR, Logo_ext);
1273 if (dlg.DoModal() == IDOK) {
1289 int arrive_from_ship;
1303 if (box->GetCount() == 0)
1338 if (box->GetCount() == 0)
1360 return min(treshold1, treshold2);
#define IDC_NO_ARRIVAL_MUSIC
char Starting_wing_names[MAX_STARTING_WINGS][NAME_LENGTH]
CSpinButtonCtrl m_arrival_delay_spin
#define IDC_REINFORCEMENT
void wing_bash_ship_name(char *ship_name, const char *wing_name, int index)
afx_msg void OnRclickDepartureTree(NMHDR *pNMHDR, LRESULT *pResult)
afx_msg void OnInitMenu(CMenu *pMenu)
afx_msg void OnBeginlabeleditDepartureTree(NMHDR *pNMHDR, LRESULT *pResult)
afx_msg void OnRclickArrivalTree(NMHDR *pNMHDR, LRESULT *pResult)
sexp_tree m_departure_tree
GLfloat GLfloat GLfloat GLfloat h
afx_msg void OnSelchangeHotkey()
void update_custom_wing_indexes()
afx_msg void OnSelchangeArrivalLocation()
int rename_ship(int ship, char *name)
void remove_wing(int wing_num)
#define SHIPS_2_COMBO_DOCKING_BAY_ONLY
void stuff_special_arrival_anchor_name(char *buf, int iff_index, int restrict_to_players, int retail_format)
virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam)
afx_msg void OnSquadLogo()
wing_editor(CWnd *pParent=NULL)
#define IDC_RESTRICT_ARRIVAL
#define IDC_ARRIVAL_DELAY_MAX
void update_sexp_references(const char *old_name, const char *new_name, int format, int node)
#define WF_NO_ARRIVAL_MUSIC
#define MISSION_TYPE_MULTI
#define END_OF_LIST(head)
#define IDC_DEPARTURE_TARGET
#define IDC_RESTRICT_DEPARTURE
CMainFrame * Fred_main_wnd
#define CF_TYPE_SQUAD_IMAGES
CString m_wing_squad_filename
int edit_label(HTREEITEM h)
UINT WPARAM LPARAM lParam
#define MAX_SHIPS_PER_WING
#define IDC_WING_SPECIAL_SHIP
GLenum GLuint GLenum GLsizei const GLchar * buf
void right_clicked(int mode=0)
#define SPECIAL_ARRIVAL_ANCHOR_FLAG
iff_info Iff_info[MAX_IFFS]
reinforcements Reinforcements[MAX_REINFORCEMENTS]
afx_msg void OnHideCues()
afx_msg void OnSelchangedDepartureTree(NMHDR *pNMHDR, LRESULT *pResult)
int cfile_push_chdir(int type)
Push current directory onto a 'stack' and change to a new directory.
void update_help(HTREEITEM h)
CSpinButtonCtrl m_departure_delay_spin
typedef int(SCP_EXT_CALLCONV *SCPDLL_PFVERSION)(SCPDLL_Version *)
#define IDC_ARRIVAL_DELAY_MIN
#define DEPART_AT_DOCK_BAY
#define IDC_DEPARTURE_TREE
afx_msg void OnSelchangedArrivalTree(NMHDR *pNMHDR, LRESULT *pResult)
GLdouble GLdouble GLdouble r
char * Departure_location_names[MAX_DEPARTURE_NAMES]
int update_data(int redraw=1)
#define MAX_DEPARTURE_NAMES
afx_msg void OnEndlabeleditDepartureTree(NMHDR *pNMHDR, LRESULT *pResult)
#define WF_NO_DEPARTURE_WARP
afx_msg void OnDeleteWing()
#define IDC_ARRIVAL_DELAY
int end_label_edit(TVITEMA &item)
#define MAX_STARTING_WINGS
#define SHIPS_2_COMBO_SPECIAL
sprintf(buf,"(%f,%f,%f)", v3->xyz.x, v3->xyz.y, v3->xyz.z)
#define WF_NO_ARRIVAL_WARP
#define IDC_ARRIVAL_DISTANCE
int wing_objects[MAX_WINGS][MAX_SHIPS_PER_WING]
#define IDC_WING_WAVE_THRESHOLD
void initialize_data(int full)
#define IDC_ARRIVAL_DELAY_SPIN
#define WF_NO_ARRIVAL_MESSAGE
#define ARRIVE_AT_LOCATION
void ai_update_goal_references(ai_goal *goals, int type, const char *old_name, const char *new_name)
object Objects[MAX_OBJECTS]
afx_msg void OnEndlabeleditArrivalTree(NMHDR *pNMHDR, LRESULT *pResult)
void string_copy(char *dest, const CString &src, int max_len, int modify)
BOOL m_no_arrival_message
int TVT_wings[MAX_TVT_WINGS]
wing_editor Wing_editor_dialog
afx_msg void OnSelchangeDepartureLocation()
int Starting_wings[MAX_STARTING_WINGS]
void set_modified(BOOL arg)
GLuint const GLchar * name
#define IDC_NO_ARRIVAL_WARP
CJumpNode * jumpnode_get_by_name(const CString &name)
int calc_max_wave_treshold()
#define IDC_DEPARTURE_DELAY
#define MB_ICONEXCLAMATION
waypoint_list * find_matching_waypoint_list(const char *name)
bool ship_has_dock_bay(int shipnum)
GLubyte GLubyte GLubyte GLubyte w
int delete_wing(int wing_num, int bypass)
afx_msg void OnBeginlabeleditArrivalTree(NMHDR *pNMHDR, LRESULT *pResult)
#define IDC_SPIN_WAVE_THRESHOLD
int save_tree(int node=-1)
int set_reinforcement(char *name, int state)
void generate_wing_popup_menu(CMenu *mptr, int first_id, int state)
#define SHIPS_2_COMBO_ALL_SHIPS
afx_msg void OnDeltaposSpinWaves(NMHDR *pNMHDR, LRESULT *pResult)
#define MAX_REINFORCEMENTS
#define IDC_ARRIVAL_LOCATION
SCP_vector< ship_info > Ship_info
int MessageBox(HWND h, const char *s1, const char *s2, int i)
#define IDC_DEPARTURE_DELAY_SPIN
void load_tree(int index, const char *deflt="true")
int query_initial_orders_conflict(int wing)
virtual void DoDataExchange(CDataExchange *pDX)
void hilite_item(int node)
#define IDC_NO_DEPARTURE_WARP
#define MAX_ARRIVAL_NAMES
int ship_index[MAX_SHIPS_PER_WING]
afx_msg void OnRestrictArrival()
CSpinButtonCtrl m_waves_spin
afx_msg void OnDisbandWing()
void clear_menu(CMenu *ptr)
void show_hide_sexp_help()
#define IDC_NO_ARRIVAL_MESSAGE
#define ARRIVE_FROM_DOCK_BAY
afx_msg void OnReinforcement()
#define SEXP_HELP_BOX_SIZE
#define IDC_WING_SQUAD_LOGO_BUTTON
SCP_vector< ai_target_priority > Ai_tp_list
#define IDC_ARRIVAL_TARGET
void management_add_ships_to_combo(CComboBox *box, int flags)
void initialize_data_safe(int full_update)
#define IDC_WING_SQUAD_LOGO
void update_texture_replacements(const char *old_name, const char *new_name)
afx_msg void OnRestrictDeparture()
char ship_name[NAME_LENGTH]
#define IDC_DEPARTURE_LOCATION
void clear_tree(const char *op=NULL)
CSpinButtonCtrl m_threshold_spin
#define MISSION_TYPE_MULTI_TEAMS
char * Arrival_location_names[MAX_ARRIVAL_NAMES]