/* FinalSun/FinalAlert 2 Mission Editor Copyright (C) 1999-2024 Electronic Arts, Inc. Authored by Matthias Wagner 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 . */ // TaskForce.cpp: Implementierungsdatei // #include "stdafx.h" #include "FinalSun.h" #include "TaskForce.h" #include "FinalSunDlg.h" #include "mapdata.h" #include "variables.h" #include "functions.h" #include "inlines.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // Eigenschaftenseite CTaskForce IMPLEMENT_DYNCREATE(CTaskForce, CDialog) CTaskForce::CTaskForce() : CDialog(CTaskForce::IDD) { //{{AFX_DATA_INIT(CTaskForce) m_Group = _T(""); m_Name = _T(""); m_NumberOfUnits = 0; //}}AFX_DATA_INIT } CTaskForce::~CTaskForce() { } void CTaskForce::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CTaskForce) DDX_Control(pDX, IDC_UNITTYPE, m_UnitType); DDX_Control(pDX, IDC_UNITS, m_Units); DDX_Control(pDX, IDC_TASKFORCES, m_TaskForces); DDX_Text(pDX, IDC_GROUP, m_Group); DDX_Text(pDX, IDC_NAME, m_Name); DDX_Text(pDX, IDC_NUMBERUNITS, m_NumberOfUnits); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CTaskForce, CDialog) //{{AFX_MSG_MAP(CTaskForce) ON_CBN_EDITCHANGE(IDC_TASKFORCES, OnEditchangeTaskforces) ON_CBN_SELCHANGE(IDC_TASKFORCES, OnSelchangeTaskforces) ON_LBN_SELCHANGE(IDC_UNITS, OnSelchangeUnits) ON_BN_CLICKED(IDC_DELETEUNIT, OnDeleteunit) ON_EN_CHANGE(IDC_NUMBERUNITS, OnChangeNumberunits) ON_EN_CHANGE(IDC_NAME, OnChangeName) ON_CBN_EDITCHANGE(IDC_UNITTYPE, OnEditchangeUnittype) ON_CBN_SELCHANGE(IDC_UNITTYPE, OnSelchangeUnittype) ON_BN_CLICKED(IDC_ADDUNIT, OnAddunit) ON_BN_CLICKED(IDC_DELETETASKFORCE, OnDeletetaskforce) ON_BN_CLICKED(IDC_ADDTASKFORCE, OnAddtaskforce) ON_EN_CHANGE(IDC_GROUP, OnChangeGroup) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // Behandlungsroutinen für Nachrichten CTaskForce void CTaskForce::UpdateDialog() { CIniFile& ini=Map->GetIniFile(); int sel=m_TaskForces.GetCurSel(); int sel2=m_Units.GetCurSel(); while(m_TaskForces.DeleteString(0)!=CB_ERR); while(m_Units.DeleteString(0)!=LB_ERR); while(m_UnitType.DeleteString(0)!=CB_ERR); // MW 07/24/01: Clear m_Group=""; m_Name=""; m_NumberOfUnits=0; UpdateData(FALSE); int i; CIniFileSection& sec=ini.sections["TaskForces"]; for(i=0;iGetUnitName((char*)(LPCTSTR)type); s+=")"; m_UnitType.AddString(s); } for(i=0;iGetUnitName((char*)(LPCTSTR)type); s+=")"; m_UnitType.AddString(s); } ss="VehicleTypes"; for(i=0;iGetUnitName((char*)(LPCTSTR)type); s+=")"; m_UnitType.AddString(s); } for(i=0;iGetUnitName((char*)(LPCTSTR)type); s+=")"; m_UnitType.AddString(s); } ss="AircraftTypes"; for(i=0;iGetUnitName((char*)(LPCTSTR)type); s+=")"; m_UnitType.AddString(s); } for(i=0;iGetUnitName((char*)(LPCTSTR)type); s+=")"; m_UnitType.AddString(s); } if(sel<0) { if(m_TaskForces.SetCurSel(0)!=CB_ERR) OnSelchangeTaskforces(); } else { if(m_TaskForces.SetCurSel(sel)!=CB_ERR) OnSelchangeTaskforces(); } if(!(sel2<0)) { if(m_Units.SetCurSel(sel2)!=LB_ERR) OnSelchangeUnits(); } } void CTaskForce::OnEditchangeTaskforces() { // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen } void CTaskForce::OnSelchangeTaskforces() { CIniFile& ini=Map->GetIniFile(); CString tf; tf=GetText(&m_TaskForces); TruncSpace(tf); CIniFileSection & sec=ini.sections[(char*)(LPCTSTR)tf]; m_Name=sec.values["Name"]; m_Group=sec.values["Group"]; int i; while(m_Units.DeleteString(0)!=LB_ERR); for(i=0;iGetUnitName(type); //s+=")"; m_Units.SetItemData(m_Units.AddString(s), i); } UpdateData(FALSE); if(m_Units.SetCurSel(0)!=LB_ERR) OnSelchangeUnits(); } void CTaskForce::OnSelchangeUnits() { CIniFile& ini=Map->GetIniFile(); int sel=m_Units.GetCurSel(); int u=m_Units.GetItemData(sel); CString tf; tf=GetText(&m_TaskForces); TruncSpace(tf); CIniFileSection & sec=ini.sections[(char*)(LPCTSTR)tf]; char k[50]; itoa(u, k, 10); CString data=sec.values[k]; CString c=GetParam(data, 0); CString s; CString type=GetParam(data,1); /*if(ini.sections.find((char*)(LPCTSTR)type)!=ini.sections.end() && ini.sections[(char*)(LPCTSTR)type].values.find("Name")!=ini.sections[(char*)(LPCTSTR)type].values.end()) s=ini.sections[(char*)(LPCTSTR)type].values["Name"]; else s=rules.sections[(char*)(LPCTSTR)type].values["Name"];*/ s=Map->GetUnitName(type); m_UnitType.SetWindowText(((CString)(LPCTSTR)type + (CString)" (" + s + (CString)")")); m_NumberOfUnits=atoi(c); UpdateData(FALSE); } void CTaskForce::OnDeleteunit() { CIniFile& ini=Map->GetIniFile(); int sel=m_Units.GetCurSel(); if(sel<0) return; int u=m_Units.GetItemData(sel); CString tf; tf=GetText(&m_TaskForces); TruncSpace(tf); CIniFileSection & sec=ini.sections[(char*)(LPCTSTR)tf]; char k[50]; itoa(u, k, 10); if(sec.values.size()<4) { sec.values.erase(k); m_Units.DeleteString(sel); m_UnitType.SetWindowText(""); m_NumberOfUnits=atoi("0"); UpdateDialog(); return; } int lastpos=sec.values.size()-3; char l[50]; itoa(lastpos, l, 10); sec.values[k]=sec.values[l]; sec.values.erase(l); m_Units.DeleteString(sel); UpdateDialog(); return; } void CTaskForce::OnChangeNumberunits() { CIniFile& ini=Map->GetIniFile(); UpdateData(); int sel=m_Units.GetCurSel(); if(sel<0) return; int u=m_Units.GetItemData(sel); CString tf; tf=GetText(&m_TaskForces); TruncSpace(tf); CIniFileSection & sec=ini.sections[(char*)(LPCTSTR)tf]; char k[50], n[50];; itoa(u, k, 10); itoa(m_NumberOfUnits, n, 10); CString data=sec.values[k]; CString c=GetParam(data, 1); sec.values[k]=n+(CString)","+c; UpdateDialog(); } void CTaskForce::OnChangeName() { CIniFile& ini=Map->GetIniFile(); UpdateData(); CEdit& n=*(CEdit*)GetDlgItem(IDC_NAME); DWORD pos=n.GetSel(); if(m_TaskForces.GetCurSel()<0) return; CString tf; tf=GetText(&m_TaskForces); TruncSpace(tf); CIniFileSection & sec=ini.sections[(char*)(LPCTSTR)tf]; sec.values["Name"]=m_Name; UpdateDialog(); n.SetSel(pos); } void CTaskForce::OnEditchangeUnittype() { CIniFile& ini=Map->GetIniFile(); int sel=m_Units.GetCurSel(); if(sel<0) return; int u=m_Units.GetItemData(sel); CString tf; tf=GetText(&m_TaskForces); TruncSpace(tf); CIniFileSection & sec=ini.sections[(char*)(LPCTSTR)tf]; char k[50]; itoa(u, k, 10); CString count=GetParam(sec.values[k],0); CString type=GetText(&m_UnitType); TruncSpace(type); sec.values[k]=count+","+(char*)(LPCTSTR)type; CString ut; m_UnitType.GetWindowText(ut); UpdateDialog(); m_UnitType.SetWindowText(ut); } void CTaskForce::OnSelchangeUnittype() { CIniFile& ini=Map->GetIniFile(); int sel=m_Units.GetCurSel(); if(sel<0) return; int u=m_Units.GetItemData(sel); CString tf; tf=GetText(&m_TaskForces); TruncSpace(tf); CIniFileSection & sec=ini.sections[(char*)(LPCTSTR)tf]; char k[50]; itoa(u, k, 10); CString count=GetParam(sec.values[k],0); CString type=GetText(&m_UnitType); TruncSpace(type); sec.values[k]=count+","+(char*)(LPCTSTR)type; UpdateDialog(); //m_UnitType.SetWindowText("H"); } void CTaskForce::OnAddunit() { CIniFile& ini=Map->GetIniFile(); CString tf; if(m_TaskForces.GetCurSel()<0) return; tf=GetText(&m_TaskForces); TruncSpace(tf); CIniFileSection & sec=ini.sections[(char*)(LPCTSTR)tf]; char k[50]; int c=m_Units.GetCount(); if(c==LB_ERR) c=0; itoa(c, k, 10); sec.values[k]="1"+(CString)","+*rules.sections["InfantryTypes"].GetValue(0); UpdateDialog(); } void CTaskForce::OnDeletetaskforce() { CIniFile& ini=Map->GetIniFile(); CString tf; if(m_TaskForces.GetCurSel()<0) return; tf=GetText(&m_TaskForces); TruncSpace(tf); CIniFileSection & sec=ini.sections[(char*)(LPCTSTR)tf]; int res; res=MessageBox("Are you sure to delete the selected task force? If you delete it, make sure to eliminate ANY references to this task force in team-types.","Delete task force",MB_YESNO); if(res==IDNO) return; int v=ini.sections["TaskForces"].FindValue((char*)(LPCTSTR)tf); if(v==-1) return; // SHOULD NEVER BE!!!! AND CANNOT BE!!! BUT MAYBE A BUG... ini.sections["TaskForces"].values.erase(*ini.sections["TaskForces"].GetValueName(v)); ini.sections.erase((char*)(LPCTSTR)tf); while(m_Units.DeleteString(0)!=LB_ERR); //UpdateDialog(); ((CFinalSunDlg*)theApp.m_pMainWnd)->UpdateDialogs(TRUE); } CString GetFree(const char* section); void CTaskForce::OnAddtaskforce() { CIniFile& ini=Map->GetIniFile(); CString ID=GetFreeID(); CString tf=GetFree("TaskForces"); ini.sections["TaskForces"].values[tf]=ID; ini.sections[ID].values["Name"]="New task force"; ini.sections[ID].values["Group"]="-1"; //UpdateDialog(); ((CFinalSunDlg*)theApp.m_pMainWnd)->UpdateDialogs(TRUE); int i; for(i=0;iGetIniFile(); UpdateData(); CString tf; if(m_TaskForces.GetCurSel()<0) return; tf=GetText(&m_TaskForces); TruncSpace(tf); CIniFileSection & sec=ini.sections[(char*)(LPCTSTR)tf]; sec.values["Group"]=m_Group; UpdateDialog(); }