From a49d3b14254fa5cfac3900e86b2287a016eaf9cc Mon Sep 17 00:00:00 2001
From: "maxim@mnikolenko" <maxim@mnikolenko>
Date: Tue, 15 Jan 2013 14:07:55 +0200
Subject: [PATCH] CHUI-567 FIXED "Translate chat", "Translation settings..."
 menu items are added.

---
 .../app_settings/settings_per_account.xml     | 13 +++++++++++-
 indra/newview/llfloaterimsessiontab.cpp       | 20 +++++++++++++++++++
 indra/newview/llfloaterimsessiontab.h         |  4 ++++
 .../newview/llfloatertranslationsettings.cpp  | 18 ++++++++++++-----
 indra/newview/llfloatertranslationsettings.h  |  1 +
 .../xui/en/menu_im_session_showmodes.xml      | 20 +++++++++++++++++--
 6 files changed, 68 insertions(+), 8 deletions(-)

diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml
index 4ff494fbfb3..68643283398 100644
--- a/indra/newview/app_settings/settings_per_account.xml
+++ b/indra/newview/app_settings/settings_per_account.xml
@@ -270,7 +270,18 @@
         <key>Value</key>
             <integer>0</integer>
         </map>
-      <key>ShowFavoritesOnLogin</key>
+    <key>TranslatingEnabled</key>
+        <map>
+        <key>Comment</key>
+            <string>Translation prefs are set</string>
+        <key>Persist</key>
+            <integer>1</integer>
+        <key>Type</key>
+            <string>Boolean</string>
+        <key>Value</key>
+            <integer>0</integer>
+        </map>
+    <key>ShowFavoritesOnLogin</key>
         <map>
         <key>Comment</key>
              <string>Determines whether favorites of last logged in user will be saved on exit from viewer and shown on login screen</string>
diff --git a/indra/newview/llfloaterimsessiontab.cpp b/indra/newview/llfloaterimsessiontab.cpp
index d4eb03f95d1..06a79836db1 100644
--- a/indra/newview/llfloaterimsessiontab.cpp
+++ b/indra/newview/llfloaterimsessiontab.cpp
@@ -72,6 +72,12 @@ LLFloaterIMSessionTab::LLFloaterIMSessionTab(const LLSD& session_id)
 			boost::bind(&LLFloaterIMSessionTab::onIMShowModesMenuItemCheck,   this, _2));
 	mEnableCallbackRegistrar.add("IMSession.Menu.ShowModes.Enable",
 			boost::bind(&LLFloaterIMSessionTab::onIMShowModesMenuItemEnable,  this, _2));
+	mEnableCallbackRegistrar.add("Translating.Enabled",
+				boost::bind(&LLFloaterIMSessionTab::isTranslatingEnabled,  this, _2));
+	mEnableCallbackRegistrar.add("Translating.On",
+					boost::bind(&LLFloaterIMSessionTab::isTranslationOn,  this, _2));
+	mCommitCallbackRegistrar.add("Translating.Toggle",
+				boost::bind(&LLFloaterIMSessionTab::toggleTranslation,  this, _2));
 
 	// Right click menu handling
     mEnableCallbackRegistrar.add("Avatar.CheckItem",  boost::bind(&LLFloaterIMSessionTab::checkContextMenuItem,	this, _2));
@@ -552,6 +558,10 @@ void LLFloaterIMSessionTab::onIMSessionMenuItemClicked(const LLSD& userdata)
 	LLFloaterIMSessionTab::processChatHistoryStyleUpdate();
 }
 
+void LLFloaterIMSessionTab::toggleTranslation(const LLSD& userdata)
+{
+	gSavedSettings.setBOOL("TranslateChat", !gSavedSettings.getBOOL("TranslateChat"));
+}
 
 bool LLFloaterIMSessionTab::onIMCompactExpandedMenuItemCheck(const LLSD& userdata)
 {
@@ -576,6 +586,16 @@ bool LLFloaterIMSessionTab::onIMShowModesMenuItemEnable(const LLSD& userdata)
 	return (plain_text && (is_not_names || mIsP2PChat));
 }
 
+bool LLFloaterIMSessionTab::isTranslatingEnabled(const LLSD& userdata)
+{
+	return gSavedPerAccountSettings.getBOOL("TranslatingEnabled");
+}
+
+bool LLFloaterIMSessionTab::isTranslationOn(const LLSD& userdata)
+{
+	return gSavedSettings.getBOOL("TranslateChat");
+}
+
 void LLFloaterIMSessionTab::hideOrShowTitle()
 {
 	const LLFloater::Params& default_params = LLFloater::getDefaultParams();
diff --git a/indra/newview/llfloaterimsessiontab.h b/indra/newview/llfloaterimsessiontab.h
index 0fa99a46bea..05da0f98bc9 100644
--- a/indra/newview/llfloaterimsessiontab.h
+++ b/indra/newview/llfloaterimsessiontab.h
@@ -109,8 +109,12 @@ class LLFloaterIMSessionTab
 	//
 	bool onIMShowModesMenuItemCheck(const LLSD& userdata);
 	bool onIMShowModesMenuItemEnable(const LLSD& userdata);
+	bool isTranslatingEnabled(const LLSD& userdata);
+	bool isTranslationOn(const LLSD& userdata);
 	static void onSlide(LLFloaterIMSessionTab *self);
 
+	void toggleTranslation(const LLSD& userdata);
+
 	// refresh a visual state of the Call button
 	void updateCallBtnState(bool callIsActive);
 
diff --git a/indra/newview/llfloatertranslationsettings.cpp b/indra/newview/llfloatertranslationsettings.cpp
index 6a9236ce0c1..33f2c352398 100644
--- a/indra/newview/llfloatertranslationsettings.cpp
+++ b/indra/newview/llfloatertranslationsettings.cpp
@@ -225,11 +225,10 @@ void LLFloaterTranslationSettings::updateControlsEnabledState()
 	mGoogleVerifyBtn->setEnabled(on && google_selected &&
 		!mGoogleKeyVerified && !getEnteredGoogleKey().empty());
 
-	mOKBtn->setEnabled(
-		!on || (
-		(bing_selected && mBingKeyVerified) ||
-		(google_selected && mGoogleKeyVerified)
-	));
+	bool service_verified = (bing_selected && mBingKeyVerified) || (google_selected && mGoogleKeyVerified);
+	gSavedPerAccountSettings.setBOOL("TranslatingEnabled", service_verified);
+
+	mOKBtn->setEnabled(!on || service_verified);
 }
 
 void LLFloaterTranslationSettings::verifyKey(int service, const std::string& key, bool alert)
@@ -285,7 +284,16 @@ void LLFloaterTranslationSettings::onBtnGoogleVerify()
 		verifyKey(LLTranslate::SERVICE_GOOGLE, key);
 	}
 }
+void LLFloaterTranslationSettings::onClose(bool app_quitting)
+{
+	std::string service = gSavedSettings.getString("TranslationService");
+	bool bing_selected = service == "bing";
+	bool google_selected = service == "google";
+
+	bool service_verified = (bing_selected && mBingKeyVerified) || (google_selected && mGoogleKeyVerified);
+	gSavedPerAccountSettings.setBOOL("TranslatingEnabled", service_verified);
 
+}
 void LLFloaterTranslationSettings::onBtnOK()
 {
 	gSavedSettings.setBOOL("TranslateChat", mMachineTranslationCB->getValue().asBoolean());
diff --git a/indra/newview/llfloatertranslationsettings.h b/indra/newview/llfloatertranslationsettings.h
index 9b47ad72ed2..b9bfd6265af 100644
--- a/indra/newview/llfloatertranslationsettings.h
+++ b/indra/newview/llfloatertranslationsettings.h
@@ -44,6 +44,7 @@ class LLFloaterTranslationSettings : public LLFloater
 
 	void setBingVerified(bool ok, bool alert);
 	void setGoogleVerified(bool ok, bool alert);
+	void onClose(bool app_quitting);
 
 private:
 	std::string getSelectedService() const;
diff --git a/indra/newview/skins/default/xui/en/menu_im_session_showmodes.xml b/indra/newview/skins/default/xui/en/menu_im_session_showmodes.xml
index 483f24afd06..f2a8b39b046 100644
--- a/indra/newview/skins/default/xui/en/menu_im_session_showmodes.xml
+++ b/indra/newview/skins/default/xui/en/menu_im_session_showmodes.xml
@@ -44,7 +44,23 @@
          parameter="IMShowNamesForP2PConv" />
         <menu_item_check.on_enable
          function="IMSession.Menu.ShowModes.Enable"
-         parameter="IMShowNamesForP2PConv" />
-         
+         parameter="IMShowNamesForP2PConv" />    
     </menu_item_check>
+    <menu_item_separator layout="topleft" />
+    <menu_item_check name="Translate_chat" label="Translate chat">
+        <menu_item_check.on_click
+         function="Translating.Toggle" />
+        <menu_item_check.on_check
+         function="Translating.On" />
+        <menu_item_check.on_enable
+         function="Translating.Enabled" />
+    </menu_item_check>
+    <menu_item_check name="Translation_settings" label="Translation settings...">
+    <menu_item_check.on_check
+         function="Floater.Visible"
+         parameter="prefs_translation" />
+        <menu_item_check.on_click
+         function="Floater.Toggle"
+         parameter="prefs_translation" />
+    </menu_item_check>     
 </toggleable_menu>
-- 
GitLab