summaryrefslogtreecommitdiff
path: root/vgui2/vlocalize/LocalizationDialog.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /vgui2/vlocalize/LocalizationDialog.cpp
downloadarchived-source-engine-2018-hl2-src-3bf9df6b2785fa6d951086978a3e66f49427166a.tar.xz
archived-source-engine-2018-hl2-src-3bf9df6b2785fa6d951086978a3e66f49427166a.zip
Diffstat (limited to 'vgui2/vlocalize/LocalizationDialog.cpp')
-rw-r--r--vgui2/vlocalize/LocalizationDialog.cpp296
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);