diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /vgui2/vlocalize/LocalizationDialog.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'vgui2/vlocalize/LocalizationDialog.cpp')
| -rw-r--r-- | vgui2/vlocalize/LocalizationDialog.cpp | 296 |
1 files changed, 296 insertions, 0 deletions
diff --git a/vgui2/vlocalize/LocalizationDialog.cpp b/vgui2/vlocalize/LocalizationDialog.cpp new file mode 100644 index 0000000..84232eb --- /dev/null +++ b/vgui2/vlocalize/LocalizationDialog.cpp @@ -0,0 +1,296 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + + +#include "LocalizationDialog.h" +#include "CreateTokenDialog.h" + +#include "vgui_controls/Button.h" +#include "vgui_controls/ListPanel.h" +#include"vgui_controls/TextEntry.h" +#include "VGUI/IVGui.h" +#include "VGUI/ILocalize.h" +#include "VGUI/ISurface.h" +#include "tier1/KeyValues.h" +#include "vgui_controls/Menu.h" +#include "vgui_controls/MenuButton.h" +#include "vgui_controls/MessageBox.h" +#include "vgui_controls/FileOpenDialog.h" + +#include <stdio.h> + +using namespace vgui; + +//----------------------------------------------------------------------------- +// Purpose: Constructor +//----------------------------------------------------------------------------- +CLocalizationDialog::CLocalizationDialog(const char *fileName) : Frame(NULL, "LocalizationDialog") +{ + m_iCurrentToken = -1; + + m_pTokenList = new ListPanel(this, "TokenList"); + + m_pTokenList->AddColumnHeader(0, "Token", "Token Name", 128, 128, 1024, 0 ); + + m_pLanguageEdit = new TextEntry(this, "LanguageEdit"); + m_pLanguageEdit->SetMultiline(true); + m_pLanguageEdit->SetVerticalScrollbar(true); + m_pLanguageEdit->SetCatchEnterKey(true); + m_pEnglishEdit = new TextEntry(this, "EnglishEdit"); + m_pEnglishEdit->SetMultiline(true); + m_pEnglishEdit->SetVerticalScrollbar(true); + m_pEnglishEdit->SetVerticalScrollbar(true); + + m_pFileMenu = new Menu(this, "FileMenu"); + + m_pFileMenu->AddMenuItem(" &Open File ", new KeyValues("FileOpen"), this); + m_pFileMenu->AddMenuItem(" &Save File ", new KeyValues("FileSave"), this); + m_pFileMenu->AddMenuItem(" E&xit Localizer ", new KeyValues("Close"), this); + m_pFileMenuButton = new MenuButton(this, "FileMenuButton", "File"); + m_pFileMenuButton->SetMenu(m_pFileMenu); + m_pApplyButton = new Button(this, "ApplyButton", "Apply"); + m_pApplyButton->SetCommand(new KeyValues("ApplyChanges")); + m_pTestLabel = new Label(this, "TestLabel", ""); + + LoadControlSettings("Resource/LocalizationDialog.res"); + + strcpy(m_szFileName, fileName); + + char buf[512]; + Q_snprintf(buf, sizeof( buf ), "%s - Localization Editor", m_szFileName); + SetTitle(buf, true); + + // load in the string table + if (!g_pVGuiLocalize->AddFile( m_szFileName ) ) + { + MessageBox *msg = new MessageBox("Fatal error", "couldn't load specified file"); + msg->SetCommand("Close"); + msg->AddActionSignalTarget(this); + msg->DoModal(); + return; + } + + // populate the dialog with the strings + StringIndex_t idx = g_pVGuiLocalize->GetFirstStringIndex(); + while ( idx != INVALID_LOCALIZE_STRING_INDEX ) + { + // adds the strings into the table, along with the indexes + m_pTokenList->AddItem(new KeyValues("LString", "Token", g_pVGuiLocalize->GetNameByIndex(idx)), idx, false, false); + + // move to the next string + idx = g_pVGuiLocalize->GetNextStringIndex(idx); + } + + // sort the table + m_pTokenList->SetSortColumn(0); + m_pTokenList->SortList(); +} + +//----------------------------------------------------------------------------- +// Purpose: Destructor +//----------------------------------------------------------------------------- +CLocalizationDialog::~CLocalizationDialog() +{ +} + +//----------------------------------------------------------------------------- +// Purpose: Handles closing of the dialog - shuts down the whole app +//----------------------------------------------------------------------------- +void CLocalizationDialog::OnClose() +{ + BaseClass::OnClose(); + + // Stop vgui running + vgui::ivgui()->Stop(); +} + +//----------------------------------------------------------------------------- +// Purpose: lays out the dialog +//----------------------------------------------------------------------------- +void CLocalizationDialog::PerformLayout() +{ + OnTextChanged(); + + BaseClass::PerformLayout(); +} + +//----------------------------------------------------------------------------- +// Purpose: Sets the currently selected token +//----------------------------------------------------------------------------- +void CLocalizationDialog::OnTokenSelected() +{ + if (m_pTokenList->GetSelectedItemsCount() != 1) + { + // clear the list + m_pLanguageEdit->SetText(""); + m_pEnglishEdit->SetText(""); + + //!! unicode test label + m_pTestLabel->SetText(""); + + m_iCurrentToken = -1; + } + else + { + // get the data + int itemId = m_pTokenList->GetSelectedItem(0); + vgui::ListPanelItem *data = m_pTokenList->GetItemData( itemId ); + Assert( data ); + m_iCurrentToken = data->userData; + wchar_t *unicodeString = g_pVGuiLocalize->GetValueByIndex(m_iCurrentToken); + + char value[2048]; + g_pVGuiLocalize->ConvertUnicodeToANSI(unicodeString, value, sizeof(value)); + + //!! unicode test label + m_pTestLabel->SetText(unicodeString); + + // set the text + m_pLanguageEdit->SetText(value); + m_pEnglishEdit->SetText(value); + } + + m_pApplyButton->SetEnabled(false); +} + +//----------------------------------------------------------------------------- +// Purpose: Checks to see if any text has changed +//----------------------------------------------------------------------------- +void CLocalizationDialog::OnTextChanged() +{ + static char buf1[1024], buf2[1024]; + + m_pLanguageEdit->GetText( buf1, sizeof( buf1 ) ); + m_pEnglishEdit->GetText( buf2, sizeof( buf2 ) ); + + if (!strcmp(buf1, buf2)) + { + m_pApplyButton->SetEnabled(false); + } + else + { + m_pApplyButton->SetEnabled(true); + } +} + +//----------------------------------------------------------------------------- +// Purpose: Copies any changes made into the main database +//----------------------------------------------------------------------------- +void CLocalizationDialog::OnApplyChanges() +{ + if (m_iCurrentToken < 0) + return; + + static char buf1[1024]; + static wchar_t unicodeString[1024]; + m_pLanguageEdit->GetText( buf1, sizeof( buf1 ) ); + g_pVGuiLocalize->ConvertANSIToUnicode(buf1, unicodeString, sizeof(unicodeString) / sizeof(wchar_t)); + + //!! unicode test label + m_pTestLabel->SetText(unicodeString); + + // apply the text change to the database + g_pVGuiLocalize->SetValueByIndex(m_iCurrentToken, unicodeString); + + // disable the apply button + m_pApplyButton->SetEnabled(false); + + // reselect the token + OnTokenSelected(); +} + +//----------------------------------------------------------------------------- +// Purpose: Message handler for saving current file +//----------------------------------------------------------------------------- +void CLocalizationDialog::OnFileSave() +{ + if (g_pVGuiLocalize->SaveToFile( m_szFileName ) ) + { + // success + MessageBox *box = new MessageBox("Save Successful - VLocalize", "File was successfully saved.", false); + box->DoModal(); + } + else + { + // failure + MessageBox *box = new MessageBox("Error during save - VLocalize", "Error - File was not successfully saved.", false); + box->DoModal(); + } +} + +//----------------------------------------------------------------------------- +// Purpose: Message handler for loading a file +//----------------------------------------------------------------------------- +void CLocalizationDialog::OnFileOpen() +{ + FileOpenDialog *box = new FileOpenDialog( this, "Open", true ); + + box->SetStartDirectory("u:\\"); + box->AddFilter("*.*", "All Files (*.*)", true ); + box->DoModal(false); +} + +//----------------------------------------------------------------------------- +// Purpose: Handles a token created message +// Input : *tokenName - the name of the newly created token +//----------------------------------------------------------------------------- +void CLocalizationDialog::OnTokenCreated(const char *tokenName) +{ + // add the new string table token to the token list + int idx = g_pVGuiLocalize->FindIndex(tokenName); + int itemId = m_pTokenList->AddItem(new KeyValues("LString", "Token", g_pVGuiLocalize->GetNameByIndex(idx)), idx, true, true ); + + // make that currently selected + m_pTokenList->SetSingleSelectedItem( itemId ); + OnTokenSelected(); +} + +//----------------------------------------------------------------------------- +// Purpose: Creates a new token +//----------------------------------------------------------------------------- +void CLocalizationDialog::OnCreateToken() +{ + CCreateTokenDialog *dlg = new CCreateTokenDialog( this ); + dlg->AddActionSignalTarget(this); + dlg->CreateSingleToken(); +} + +char const *CLocalizationDialog::GetFileName() const +{ + return m_szFileName; +} + +//----------------------------------------------------------------------------- +// Purpose: +// Input : *command - +//----------------------------------------------------------------------------- +void CLocalizationDialog::OnCommand(const char *command) +{ + if (!stricmp(command, "CreateToken")) + { + OnCreateToken(); + } + else + { + BaseClass::OnCommand(command); + } +} + + +//----------------------------------------------------------------------------- +// Purpose: empty message map +//----------------------------------------------------------------------------- +MessageMapItem_t CLocalizationDialog::m_MessageMap[] = +{ + MAP_MESSAGE( CLocalizationDialog, "RowSelected", OnTokenSelected ), // message from the m_pTokenList + MAP_MESSAGE( CLocalizationDialog, "TextChanged", OnTextChanged ), // message from the text entry + MAP_MESSAGE( CLocalizationDialog, "ApplyChanges", OnApplyChanges ), // message from the text entry + MAP_MESSAGE( CLocalizationDialog, "FileSave", OnFileSave ), + MAP_MESSAGE( CLocalizationDialog, "FileOpen", OnFileOpen ), + MAP_MESSAGE_CONSTCHARPTR( CLocalizationDialog, "TokenCreated", OnTokenCreated, "name" ), +}; +IMPLEMENT_PANELMAP(CLocalizationDialog, BaseClass); |