CNC_TS_and_RA2_Mission_Editor/MissionEditor/All.cpp
brbarnesEA a547a31a37 TS_RA2_Mission_Editor_sourcecode_23.02.2023_1
TS_RA2_Mission_Editor_sourcecode_23.02.2023_1
2024-03-05 11:56:45 -08:00

285 lines
6.6 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
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 <https://www.gnu.org/licenses/>.
*/
// All1.cpp: Implementierungsdatei
//
#include "stdafx.h"
#include "FinalSun.h"
#include "All.h"
#include "mapdata.h"
#include "variables.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CFinalSunApp theApp;
#include "ImportIni.h"
/////////////////////////////////////////////////////////////////////////////
// Dialogfeld CAll
CAll::CAll(CWnd* pParent /*=NULL*/)
: CDialog(CAll::IDD, pParent)
{
//{{AFX_DATA_INIT(CAll)
// HINWEIS: Der Klassen-Assistent fügt hier Elementinitialisierung ein
//}}AFX_DATA_INIT
}
void CAll::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAll)
DDX_Control(pDX, IDC_VALUE, m_Value);
DDX_Control(pDX, IDC_KEYS, m_Keys);
DDX_Control(pDX, IDC_INISECTION, m_IniSection);
DDX_Control(pDX, IDC_DELETESECTION, m_DeleteSection);
DDX_Control(pDX, IDC_DELETEKEY, m_DeleteKey);
DDX_Control(pDX, IDC_ADDSECTION, m_AddSection);
DDX_Control(pDX, IDC_ADDKEY, m_AddKey);
DDX_Control(pDX, IDC_SECTIONS, m_Sections);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAll, CDialog)
//{{AFX_MSG_MAP(CAll)
ON_CBN_SELCHANGE(IDC_SECTIONS, OnSelchangeSections)
ON_EN_CHANGE(IDC_VALUE, OnChangeValue)
ON_LBN_SELCHANGE(IDC_KEYS, OnSelchangeKeys)
ON_EN_UPDATE(IDC_VALUE, OnUpdateValue)
ON_BN_CLICKED(IDC_ADDSECTION, OnAddsection)
ON_BN_CLICKED(IDC_DELETESECTION, OnDeletesection)
ON_BN_CLICKED(IDC_DELETEKEY, OnDeletekey)
ON_BN_CLICKED(IDC_ADDKEY, OnAddkey)
ON_BN_CLICKED(IDC_INISECTION, OnInisection)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// Behandlungsroutinen für Nachrichten CAll
void CAll::UpdateDialog()
{
//m_Sections.Clear();
while(m_Sections.DeleteString(0)!=-1);
while(m_Keys.DeleteString(0)!=-1);
CIniFile& ini=Map->GetIniFile();
m_Value.SetWindowText("");
int i;
for(i=ini.sections.size()-1;i>=0;i--)
{
const CString* name=ini.GetSectionName(i);
if(!Map->IsMapSection(*name))
m_Sections.InsertString(0, *name);
}
m_Sections.SetCurSel(1);
OnSelchangeSections();
}
void CAll::OnSelchangeSections()
{
while(m_Keys.DeleteString(0)!=CB_ERR);
CIniFile& ini=Map->GetIniFile();
CString cuSection;
m_Sections.GetWindowText(cuSection);
if(cuSection.GetLength())
{
int i;
m_Keys.SetRedraw(FALSE);
SetCursor(LoadCursor(0,IDC_WAIT));
for(i=0;i<ini.sections[cuSection].values.size();i++)
{
const CString* name=ini.sections[cuSection].GetValueName(i);
m_Keys.InsertString(-1, *name);
}
SetCursor(m_hArrowCursor);
m_Keys.SetRedraw(TRUE);
m_Keys.RedrawWindow();
}
}
void CAll::OnChangeValue()
{
CIniFile& ini=Map->GetIniFile();
CString t;
m_Value.GetWindowText(t);
CString cuSection;
m_Sections.GetWindowText(cuSection);
CString cuKey;
if(m_Keys.GetCurSel()>=0)m_Keys.GetText(m_Keys.GetCurSel(), cuKey) ;
ini.sections[cuSection].values[cuKey]=t;
}
void CAll::OnSelchangeKeys()
{
CIniFile& ini=Map->GetIniFile();
CString cuSection;
m_Sections.GetWindowText(cuSection);
CString cuKey;
m_Keys.GetText(m_Keys.GetCurSel(), cuKey) ;
m_Value.SetWindowText(ini.sections[cuSection].values[cuKey]);
}
void CAll::OnUpdateValue()
{
}
void CAll::OnAddsection()
{
CString name=InputBox("Please set the name of the new section (the section may already exist)", "Insert Section");
CIniFile& ini=Map->GetIniFile();
CIniFileSection stub=ini.sections[(LPCTSTR)name];
UpdateDialog();
}
void CAll::OnDeletesection()
{
CIniFile& ini=Map->GetIniFile();
int cusection;
cusection=m_Sections.GetCurSel();
if(cusection==-1) {
MessageBox("You cannot delete a section without choosing one.");
return;
}
CString str;
m_Sections.GetLBText(cusection, str);
if(MessageBox(CString((CString)"Are you sure you want to delete " + str + "? You should be really careful, you may not be able to use the map afterwards."), "Delete section", MB_YESNO)==IDNO) return;
ini.sections.erase(str);
UpdateDialog();
}
void CAll::OnDeletekey()
{
CIniFile& ini=Map->GetIniFile();
int cukey;
if(m_Sections.GetCurSel()<0) return;
cukey=m_Keys.GetCurSel();
if(cukey==-1) {
MessageBox("You cannot delete a key without choosing one.");
return;
}
CString str;
CString sec;
int cuSection=m_Sections.GetCurSel();
m_Sections.GetLBText(cuSection, sec);
m_Keys.GetText(cukey, str);
if(MessageBox(CString((CString)"Are you sure you want to delete " + str + "? You should be really careful, you may not be able to use the map afterwards."), "Delete key", MB_YESNO)==IDNO) return;
ini.sections[sec].values.erase(str);
UpdateDialog();
m_Sections.SetCurSel(cuSection);
OnSelchangeSections();
}
void CAll::OnAddkey()
{
CIniFile& ini=Map->GetIniFile();
int cusection;
cusection=m_Sections.GetCurSel();
if(cusection==-1) {
MessageBox("You need to specify a section first.");
return;
}
CString sec;
m_Sections.GetLBText(cusection, sec);
CString key, value;
key=InputBox("Please set the name and value for the current key here: (for example, setting a new key ""Strength"" with the value 200 can be written as ""Strength=200"". You don´t need to specify a value.)", "Create key");
if(key.Find("=")!=-1)
{
// value specified
// MW BUGFIX
value=key.Right(key.GetLength()-key.Find("=")-1);
key=key.Left(key.Find("="));
}
ini.sections[sec].values[key]=value;
UpdateDialog();
m_Sections.SetCurSel(cusection);
OnSelchangeSections();
}
void CAll::OnInisection()
{
CFileDialog dlg(FALSE, ".ini", "*.ini", OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, "INI files|*.ini|");
char cuPath[MAX_PATH];
BOOL hidePreview=FALSE;
BOOL previewPrinted=FALSE;
GetCurrentDirectory(MAX_PATH, cuPath);
dlg.m_ofn.lpstrInitialDir=cuPath;
if(theApp.m_Options.TSExe.GetLength()) dlg.m_ofn.lpstrInitialDir=(char*)(LPCTSTR)theApp.m_Options.TSExe;
if(dlg.DoModal()!=IDCANCEL)
{
CImportINI impini;
impini.m_FileName=dlg.GetPathName();
if(impini.DoModal()!=IDCANCEL)
{
UpdateDialog();
}
}
}