Skip to content

Commit d83fca1

Browse files
authored
[GEN][ZH] Improve product title information for Window title, Options Menu (and Main Menu) (#1309)
1 parent 4cc109a commit d83fca1

File tree

10 files changed

+323
-132
lines changed

10 files changed

+323
-132
lines changed

Generals/Code/GameEngine/Include/Common/version.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ class Version
4747

4848
UnsignedInt getVersionNumber() const; ///< Return a 4-byte integer suitable for WOLAPI
4949

50-
AsciiString getAsciiVersion() const; ///< Return a human-readable version number
51-
UnicodeString getUnicodeVersion() const; ///< Return a human-readable version number. Is decorated with localized string
50+
AsciiString getAsciiVersion() const; ///< Return a human-readable game version number
51+
UnicodeString getUnicodeVersion() const; ///< Return a human-readable game version number. Is decorated with localized string
5252

5353
AsciiString getAsciiBuildTime() const; ///< Return a formated date/time string for build time
5454
UnicodeString getUnicodeBuildTime() const; ///< Return a formated date/time string for build time. Is decorated with localized string
@@ -72,12 +72,18 @@ class Version
7272
AsciiString getAsciiGitCommitTime() const; ///< Returns the git head commit time in YYYY-mm-dd HH:MM:SS format
7373
UnicodeString getUnicodeGitCommitTime() const; ///< Returns the git head commit time in YYYY-mm-dd HH:MM:SS format
7474

75-
AsciiString getAsciiGameAndGitVersion() const; ///< Returns the game and git version
76-
UnicodeString getUnicodeGameAndGitVersion() const; ///< Returns the game and git version. Is decorated with localized string
75+
AsciiString getAsciiGitVersion() const; ///< Returns the git version
76+
UnicodeString getUnicodeGitVersion() const; ///< Returns the git version
7777

7878
AsciiString getAsciiBuildUserOrGitCommitAuthorName() const;
7979
UnicodeString getUnicodeBuildUserOrGitCommitAuthorName() const; ///< Is decorated with localized string
8080

81+
UnicodeString getUnicodeProductTitle() const;
82+
UnicodeString getUnicodeProductVersion() const;
83+
UnicodeString getUnicodeProductAuthor() const; ///< Is decorated with localized string
84+
UnicodeString getUnicodeProductString() const; ///< Returns a string that contains product title, version and other, if specified. Is decorated with localized string
85+
UnicodeString getUnicodeProductVersionHashString() const; ///< Returns a string that contains the product string, game version and hashes. Is decorated with localized string
86+
8187
Bool showFullVersion() const { return m_showFullVersion; }
8288
void setShowFullVersion( Bool val ) { m_showFullVersion = val; }
8389

Generals/Code/GameEngine/Source/Common/version.cpp

Lines changed: 70 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -245,39 +245,35 @@ UnicodeString Version::getUnicodeGitCommitTime() const
245245
return m_unicodeGitCommitTime;
246246
}
247247

248-
AsciiString Version::getAsciiGameAndGitVersion() const
248+
AsciiString Version::getAsciiGitVersion() const
249249
{
250250
AsciiString str;
251251
if (m_showFullVersion)
252252
{
253-
str.format("%s R %s %s",
254-
getAsciiVersion().str(),
253+
str.format("%s %s",
255254
getAsciiGitCommitCount().str(),
256255
getAsciiGitTagOrHash().str());
257256
}
258257
else
259258
{
260-
str.format("%s R %s",
261-
getAsciiVersion().str(),
259+
str.format("%s",
262260
getAsciiGitCommitCount().str());
263261
}
264262
return str;
265263
}
266264

267-
UnicodeString Version::getUnicodeGameAndGitVersion() const
265+
UnicodeString Version::getUnicodeGitVersion() const
268266
{
269267
UnicodeString str;
270268
if (m_showFullVersion)
271269
{
272-
str.format(L"%s R %s %s",
273-
getUnicodeVersion().str(),
270+
str.format(L"%s %s",
274271
getUnicodeGitCommitCount().str(),
275272
getUnicodeGitTagOrHash().str());
276273
}
277274
else
278275
{
279-
str.format(L"%s R %s",
280-
getUnicodeVersion().str(),
276+
str.format(L"%s",
281277
getUnicodeGitCommitCount().str());
282278
}
283279
return str;
@@ -310,6 +306,70 @@ UnicodeString Version::getUnicodeBuildUserOrGitCommitAuthorName() const
310306
return str;
311307
}
312308

309+
UnicodeString Version::getUnicodeProductTitle() const
310+
{
311+
// @todo Make configurable
312+
return UnicodeString(L"Community Patch");
313+
}
314+
315+
UnicodeString Version::getUnicodeProductVersion() const
316+
{
317+
return getUnicodeGitVersion();
318+
}
319+
320+
UnicodeString Version::getUnicodeProductAuthor() const
321+
{
322+
return getUnicodeBuildUserOrGitCommitAuthorName();
323+
}
324+
325+
UnicodeString Version::getUnicodeProductString() const
326+
{
327+
UnicodeString str;
328+
UnicodeString productTitle = TheGameText->FETCH_OR_SUBSTITUTE("Version:ProductTitle", getUnicodeProductTitle().str());
329+
330+
if (!productTitle.isEmpty())
331+
{
332+
UnicodeString productVersion = TheGameText->FETCH_OR_SUBSTITUTE("Version:ProductVersion", getUnicodeProductVersion().str());
333+
UnicodeString productAuthor = TheGameText->FETCH_OR_SUBSTITUTE("Version:ProductAuthor", getUnicodeProductAuthor().str());
334+
335+
str.concat(productTitle);
336+
337+
if (!productVersion.isEmpty())
338+
{
339+
str.concat(L" ");
340+
str.concat(productVersion);
341+
}
342+
343+
if (!productAuthor.isEmpty())
344+
{
345+
str.concat(L" ");
346+
str.concat(productAuthor);
347+
}
348+
}
349+
350+
return str;
351+
}
352+
353+
UnicodeString Version::getUnicodeProductVersionHashString() const
354+
{
355+
UnicodeString str;
356+
UnicodeString productString = getUnicodeProductString();
357+
UnicodeString gameVersion = getUnicodeVersion();
358+
UnicodeString gameHash;
359+
gameHash.format(L"exe:%08X ini:%08X", TheGlobalData->m_exeCRC, TheGlobalData->m_iniCRC);
360+
361+
if (!productString.isEmpty())
362+
{
363+
str.concat(productString);
364+
str.concat(L" | ");
365+
}
366+
str.concat(gameHash);
367+
str.concat(L" ");
368+
str.concat(gameVersion);
369+
370+
return str;
371+
}
372+
313373
AsciiString Version::buildAsciiGitCommitCount()
314374
{
315375
AsciiString str;

Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/MainMenu.cpp

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -419,16 +419,8 @@ static void initLabelVersion()
419419
{
420420
if (TheVersion && TheGlobalData)
421421
{
422-
UnicodeString version;
423-
version.format(
424-
L"%s %s exe:%08X ini:%08X %s",
425-
TheVersion->getUnicodeGameAndGitVersion().str(),
426-
TheVersion->getUnicodeGitCommitTime().str(),
427-
TheGlobalData->m_exeCRC,
428-
TheGlobalData->m_iniCRC,
429-
TheVersion->getUnicodeBuildUserOrGitCommitAuthorName().str()
430-
);
431-
GadgetStaticTextSetText( labelVersion, version );
422+
UnicodeString text = TheVersion->getUnicodeProductVersionHashString();
423+
GadgetStaticTextSetText( labelVersion, text );
432424
}
433425
else
434426
{

Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1350,16 +1350,8 @@ static void initLabelVersion()
13501350
{
13511351
if (TheVersion && TheGlobalData)
13521352
{
1353-
UnicodeString version;
1354-
version.format(
1355-
L"%s %s exe:%08X ini:%08X %s",
1356-
TheVersion->getUnicodeGameAndGitVersion().str(),
1357-
TheVersion->getUnicodeGitCommitTime().str(),
1358-
TheGlobalData->m_exeCRC,
1359-
TheGlobalData->m_iniCRC,
1360-
TheVersion->getUnicodeBuildUserOrGitCommitAuthorName().str()
1361-
);
1362-
GadgetStaticTextSetText( labelVersion, version );
1353+
UnicodeString text = TheVersion->getUnicodeProductVersionHashString();
1354+
GadgetStaticTextSetText( labelVersion, text );
13631355
}
13641356
else
13651357
{

Generals/Code/GameEngine/Source/GameClient/GameText.cpp

Lines changed: 77 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,8 @@ class GameTextManager : public GameTextInterface
141141
GameTextManager();
142142
virtual ~GameTextManager();
143143

144-
virtual void init( void ); ///< Initlaizes the text system
145-
virtual void deinit( void ); ///< De-initlaizes the text system
144+
virtual void init( void ); ///< Initializes the text system
145+
virtual void deinit( void ); ///< Shuts down the text system
146146
virtual void update( void ) {}; ///< update text manager
147147
virtual void reset( void ); ///< Resets the text system
148148

@@ -198,6 +198,8 @@ class GameTextManager : public GameTextInterface
198198
Bool parseMapStringFile( const char *filename );
199199
Bool readLine( char *buffer, Int max, File *file );
200200
Char readChar( File *file );
201+
202+
void updateWindowTitle();
201203
};
202204

203205
static int _cdecl compareLUT ( const void *, const void*);
@@ -371,35 +373,7 @@ void GameTextManager::init( void )
371373

372374
qsort( m_stringLUT, m_textCount, sizeof(StringLookUp), compareLUT );
373375

374-
UnicodeString ourName = fetch("GUI:Command&ConquerGenerals");
375-
376-
if (rts::ClientInstance::getInstanceId() > 1u)
377-
{
378-
UnicodeString s;
379-
s.format(L"Instance:%.2u - %s", rts::ClientInstance::getInstanceId(), ourName.str());
380-
ourName = s;
381-
}
382-
383-
if (TheVersion != NULL)
384-
{
385-
// TheSuperHackers @tweak Now prints version information in the Window title.
386-
UnicodeString version;
387-
version.format(L" %s %s",
388-
TheVersion->getUnicodeGameAndGitVersion().str(),
389-
TheVersion->getUnicodeBuildUserOrGitCommitAuthorName().str()
390-
);
391-
ourName.concat(version);
392-
}
393-
394-
AsciiString ourNameA;
395-
ourNameA.translate(ourName); //get ASCII version for Win 9x
396-
397-
extern HWND ApplicationHWnd; ///< our application window handle
398-
if (ApplicationHWnd) {
399-
//Set it twice because Win 9x does not support SetWindowTextW.
400-
::SetWindowText(ApplicationHWnd, ourNameA.str());
401-
::SetWindowTextW(ApplicationHWnd, ourName.str());
402-
}
376+
updateWindowTitle();
403377

404378
}
405379

@@ -1495,7 +1469,78 @@ Char GameTextManager::readChar( File *file )
14951469
}
14961470

14971471
//============================================================================
1498-
// GameTextManager::compareLUT
1472+
// GameTextManager::updateWindowTitle
1473+
//============================================================================
1474+
1475+
void GameTextManager::updateWindowTitle()
1476+
{
1477+
// TheSuperHackers @tweak Now prints product and version information in the Window title.
1478+
1479+
DEBUG_ASSERTCRASH(TheVersion != NULL, ("TheVersion is NULL"));
1480+
1481+
UnicodeString title;
1482+
1483+
if (rts::ClientInstance::getInstanceId() > 1u)
1484+
{
1485+
UnicodeString str;
1486+
str.format(L"Instance:%.2u", rts::ClientInstance::getInstanceId());
1487+
title.concat(str);
1488+
}
1489+
1490+
UnicodeString productString = TheVersion->getUnicodeProductString();
1491+
1492+
if (!productString.isEmpty())
1493+
{
1494+
if (!title.isEmpty())
1495+
title.concat(L" ");
1496+
title.concat(productString);
1497+
}
1498+
1499+
#if RTS_GENERALS
1500+
const WideChar* defaultGameTitle = L"Command and Conquer Generals";
1501+
#elif RTS_ZEROHOUR
1502+
const WideChar* defaultGameTitle = L"Command and Conquer Generals Zero Hour";
1503+
#endif
1504+
UnicodeString gameTitle = FETCH_OR_SUBSTITUTE("GUI:Command&ConquerGenerals", defaultGameTitle);
1505+
1506+
if (!gameTitle.isEmpty())
1507+
{
1508+
UnicodeString gameTitleFinal;
1509+
UnicodeString gameVersion = TheVersion->getUnicodeVersion();
1510+
1511+
if (productString.isEmpty())
1512+
{
1513+
gameTitleFinal = gameTitle;
1514+
}
1515+
else
1516+
{
1517+
UnicodeString gameTitleFormat = FETCH_OR_SUBSTITUTE("Version:GameTitle", L"for %ls");
1518+
gameTitleFinal.format(gameTitleFormat.str(), gameTitle.str());
1519+
}
1520+
1521+
if (!title.isEmpty())
1522+
title.concat(L" ");
1523+
title.concat(gameTitleFinal.str());
1524+
title.concat(L" ");
1525+
title.concat(gameVersion.str());
1526+
}
1527+
1528+
if (!title.isEmpty())
1529+
{
1530+
AsciiString titleA;
1531+
titleA.translate(title); //get ASCII version for Win 9x
1532+
1533+
extern HWND ApplicationHWnd; ///< our application window handle
1534+
if (ApplicationHWnd) {
1535+
//Set it twice because Win 9x does not support SetWindowTextW.
1536+
::SetWindowText(ApplicationHWnd, titleA.str());
1537+
::SetWindowTextW(ApplicationHWnd, title.str());
1538+
}
1539+
}
1540+
}
1541+
1542+
//============================================================================
1543+
// compareLUT
14991544
//============================================================================
15001545

15011546
static int __cdecl compareLUT ( const void *i1, const void*i2)

GeneralsMD/Code/GameEngine/Include/Common/version.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ class Version
4747

4848
UnsignedInt getVersionNumber() const; ///< Return a 4-byte integer suitable for WOLAPI
4949

50-
AsciiString getAsciiVersion() const; ///< Return a human-readable version number
51-
UnicodeString getUnicodeVersion() const; ///< Return a human-readable version number. Is decorated with localized string
50+
AsciiString getAsciiVersion() const; ///< Return a human-readable game version number
51+
UnicodeString getUnicodeVersion() const; ///< Return a human-readable game version number. Is decorated with localized string
5252

5353
AsciiString getAsciiBuildTime() const; ///< Return a formated date/time string for build time
5454
UnicodeString getUnicodeBuildTime() const; ///< Return a formated date/time string for build time. Is decorated with localized string
@@ -72,12 +72,18 @@ class Version
7272
AsciiString getAsciiGitCommitTime() const; ///< Returns the git head commit time in YYYY-mm-dd HH:MM:SS format
7373
UnicodeString getUnicodeGitCommitTime() const; ///< Returns the git head commit time in YYYY-mm-dd HH:MM:SS format
7474

75-
AsciiString getAsciiGameAndGitVersion() const; ///< Returns the game and git version
76-
UnicodeString getUnicodeGameAndGitVersion() const; ///< Returns the game and git version. Is decorated with localized string
75+
AsciiString getAsciiGitVersion() const; ///< Returns the git version
76+
UnicodeString getUnicodeGitVersion() const; ///< Returns the git version
7777

7878
AsciiString getAsciiBuildUserOrGitCommitAuthorName() const;
7979
UnicodeString getUnicodeBuildUserOrGitCommitAuthorName() const; ///< Is decorated with localized string
8080

81+
UnicodeString getUnicodeProductTitle() const;
82+
UnicodeString getUnicodeProductVersion() const;
83+
UnicodeString getUnicodeProductAuthor() const; ///< Is decorated with localized string
84+
UnicodeString getUnicodeProductString() const; ///< Returns a string that contains product title, version and other, if specified. Is decorated with localized string
85+
UnicodeString getUnicodeProductVersionHashString() const; ///< Returns a string that contains the product string, game version and hashes. Is decorated with localized string
86+
8187
Bool showFullVersion() const { return m_showFullVersion; }
8288
void setShowFullVersion( Bool val ) { m_showFullVersion = val; }
8389

0 commit comments

Comments
 (0)