CNC_TS_and_RA2_Mission_Editor/MissionEditor/GlobalsDlg.cpp
Zero Fanker f0d808a912
L10n/chinese translation (#5)
* hotkey tips using \t .
* simplified edit menu translation (ZH_CN)
* refactored GetLanguageStringACP and implemented 'TranslateDlgItem' and 'TranslateWindowCaption' helper function .
---------

Co-authored-by: shuiping233 <49360196+shuiping233@users.noreply.github.com>
2024-10-29 00:22:39 -04:00

230 lines
5.1 KiB
C++
Raw 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/>.
*/
// GlobalsDlg.cpp: Implementierungsdatei
//
#include "stdafx.h"
#include "finalsun.h"
#include "GlobalsDlg.h"
#include "mapdata.h"
#include "variables.h"
#include "inlines.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// Dialogfeld CGlobalsDlg
CGlobalsDlg::CGlobalsDlg(CWnd* pParent /*=NULL*/)
: CDialog(CGlobalsDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CGlobalsDlg)
m_Description = _T("");
//}}AFX_DATA_INIT
}
void CGlobalsDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CGlobalsDlg)
DDX_Control(pDX, IDC_VALUE, m_Value);
DDX_Control(pDX, IDC_GLOBAL, m_Global);
DDX_Text(pDX, IDC_DESCRIPTION, m_Description);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CGlobalsDlg, CDialog)
//{{AFX_MSG_MAP(CGlobalsDlg)
ON_EN_CHANGE(IDC_DESCRIPTION, OnChangeDescription)
ON_CBN_SELCHANGE(IDC_GLOBAL, OnSelchangeGlobal)
ON_CBN_SELCHANGE(IDC_VALUE, OnSelchangeValue)
ON_CBN_EDITCHANGE(IDC_VALUE, OnEditchangeValue)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// Behandlungsroutinen für Nachrichten CGlobalsDlg
void CGlobalsDlg::OnOK()
{
// CDialog::OnOK();
}
void CGlobalsDlg::OnCancel()
{
// TODO: Zusätzlichen Bereinigungscode hier einfügen
CDialog::OnCancel();
}
void CGlobalsDlg::UpdateDialog()
{
int oldsel = m_Global.GetCurSel();
if (oldsel < 0) oldsel = 0;
while (m_Global.DeleteString(0) != CB_ERR);
int i;
BOOL bFailFind = FALSE;
CIniFile& ini = Map->GetIniFile();
for (i = 0; i < 100; i++) {
char c[50];
itoa(i, c, 10);
CString added = c;
added += " ";
auto const& variableStr = ini.GetString("VariableNames", c);
if (!variableStr.IsEmpty()) {
added += variableStr;
} else {
bFailFind = TRUE;
added += " No name";
}
m_Global.SetItemData(m_Global.AddString(added), i);
if (bFailFind) {
break;
}
}
m_Global.SetCurSel(oldsel);
OnSelchangeGlobal();
}
void CGlobalsDlg::OnChangeDescription()
{
CIniFile& ini = Map->GetIniFile();
int cursel = m_Global.GetCurSel();
if (cursel < 0) {
return;
}
int curglob = m_Global.GetItemData(cursel);
char c[50];
itoa(curglob, c, 10);
UpdateData(TRUE);
if (m_Description.Find(",") >= 0) {
m_Description.SetAt(m_Description.Find(","), 0);
}
if (ini.GetString("VariableNames", c).IsEmpty()) {
ini.SetString("VariableNames", c, "text,0");
}
ini.SetString("VariableNames", c, SetParam(ini.GetString("VariableNames", c), 0, m_Description));
// do not remove, Tiberian Sun seems to don´t like probably unused global numbers
//if(m_Description.GetLength()==0)
// ini.sections["VariableNames"].values.erase(c);
UpdateDialog();
}
void CGlobalsDlg::OnSelchangeGlobal()
{
CIniFile& ini = Map->GetIniFile();
int cursel = m_Global.GetCurSel();
if (cursel < 0) {
return;
}
int curglob = m_Global.GetItemData(cursel);
char c[50];
itoa(curglob, c, 10);
auto const& variable = ini.GetString("VariableNames", c);
if (!variable.IsEmpty()) {
m_Description = GetParam(variable, 0);
m_Value.SetWindowText(GetParam(variable, 1));
} else {
m_Description = "";
}
UpdateData(FALSE);
}
BOOL CGlobalsDlg::OnInitDialog()
{
CDialog::OnInitDialog();
translateUI();
UpdateDialog();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX-Eigenschaftenseiten sollten FALSE zurückgeben
}
void CGlobalsDlg::translateUI()
{
TranslateWindowCaption(*this, "LocalVariableCaption");
TranslateDlgItem(*this, IDC_LOCAL_VAR_CUR_TXT, "LocalVariableCurrent");
TranslateDlgItem(*this, IDC_DESC, "LocalVariableDesc");
TranslateDlgItem(*this, IDC_LOCAL_VAR_INIT_TXT, "LocalVariableInitValue");
m_Value.InsertString(0, TranslateStringACP("0 - Clear"));
m_Value.InsertString(1, TranslateStringACP("1 - Set"));
}
void CGlobalsDlg::OnSelchangeValue()
{
}
void CGlobalsDlg::OnEditchangeValue()
{
CIniFile& ini = Map->GetIniFile();
CString str;
m_Value.GetWindowText(str);
if (str.GetLength() == 0) return;
int cursel = m_Global.GetCurSel();
if (cursel < 0) return;
int curglob = m_Global.GetItemData(cursel);
char c[50];
itoa(curglob, c, 10);
auto const& variable = ini.GetString("VariableNames", c);
if (variable.IsEmpty()) {
return;
}
UpdateData(TRUE);
str = GetParam(str, 0);
TruncSpace(str);
ini.SetString("VariableNames", c, SetParam(variable, 1, str));
UpdateDialog();
}