diff options
| -rw-r--r-- | indra/newview/app_settings/settings_per_account.xml | 13 | ||||
| -rw-r--r-- | indra/newview/llfloaterimcontainer.cpp | 33 | ||||
| -rw-r--r-- | indra/newview/llfloaterimcontainer.h | 1 | ||||
| -rw-r--r-- | indra/newview/llfloaterimsession.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llfloaterimsession.h | 2 | ||||
| -rw-r--r-- | indra/newview/llfloaterimsessiontab.cpp | 20 | ||||
| -rw-r--r-- | indra/newview/llfloaterimsessiontab.h | 4 | ||||
| -rw-r--r-- | indra/newview/llfloatertranslationsettings.cpp | 18 | ||||
| -rw-r--r-- | indra/newview/llfloatertranslationsettings.h | 1 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/menu_im_session_showmodes.xml | 20 | 
10 files changed, 94 insertions, 22 deletions
diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml index 4ff494fbfb..6864328339 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/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp index a17b89af0d..8264a90325 100644 --- a/indra/newview/llfloaterimcontainer.cpp +++ b/indra/newview/llfloaterimcontainer.cpp @@ -238,6 +238,9 @@ BOOL LLFloaterIMContainer::postBuild()  	// Init the sort order now that the root had been created  	setSortOrder(LLConversationSort(gSavedSettings.getU32("ConversationSortOrder"))); +	// Keep the xml set title around for when we have to overwrite it +	mGeneralTitle = getTitle(); +	  	mInitialized = true;  	// Add callbacks: @@ -502,10 +505,10 @@ void LLFloaterIMContainer::draw()  		collapseMessagesPane(true);  	} -	//Update moderator options visibility  	const LLConversationItem *current_session = getCurSelectedViewModelItem();  	if (current_session)  	{ +		// Update moderator options visibility  		LLFolderViewModelItemCommon::child_list_t::const_iterator current_participant_model = current_session->getChildrenBegin();  		LLFolderViewModelItemCommon::child_list_t::const_iterator end_participant_model = current_session->getChildrenEnd();  		while (current_participant_model != end_participant_model) @@ -515,6 +518,9 @@ void LLFloaterIMContainer::draw()  			current_participant_model++;  		} +		// Update floater's title as required by the currently selected session or use the default title +		LLFloaterIMSession * conversation_floaterp = LLFloaterIMSession::findInstance(current_session->getUUID()); +		setTitle(conversation_floaterp && conversation_floaterp->needsTitleOverwrite() ? conversation_floaterp->getTitle() : mGeneralTitle);  	}  	LLFloater::draw(); @@ -893,7 +899,18 @@ void LLFloaterIMContainer::getSelectedUUIDs(uuid_vec_t& selected_uuids)      for (; it != it_end; ++it)      {          conversationItem = static_cast<LLConversationItem *>((*it)->getViewModelItem()); -        selected_uuids.push_back(conversationItem->getUUID()); +       +		//When a one-on-one conversation exists, retrieve the participant id from the conversation floater +		if(conversationItem->getType() == LLConversationItem::CONV_SESSION_1_ON_1) +		{ +			LLFloaterIMSession * conversation_floaterp = LLFloaterIMSession::findInstance(conversationItem->getUUID()); +			LLUUID participant_id = conversation_floaterp->getOtherParticipantUUID(); +			selected_uuids.push_back(participant_id); +		} +		else +		{ +			selected_uuids.push_back(conversationItem->getUUID()); +		}      }  } @@ -929,17 +946,7 @@ void LLFloaterIMContainer::getParticipantUUIDs(uuid_vec_t& selected_uuids)  		return;  	} -    if (conversation_item->getType() == LLConversationItem::CONV_PARTICIPANT) -    { -        getSelectedUUIDs(selected_uuids); -    } -    //When a one-on-one conversation exists, retrieve the participant id from the conversation floater -    else if(conversation_item->getType() == LLConversationItem::CONV_SESSION_1_ON_1) -    { -        LLFloaterIMSession * conversation_floaterp = LLFloaterIMSession::findInstance(conversation_item->getUUID()); -        LLUUID participant_id = conversation_floaterp->getOtherParticipantUUID(); -        selected_uuids.push_back(participant_id); -    }     +	getSelectedUUIDs(selected_uuids);    }  void LLFloaterIMContainer::doToParticipants(const std::string& command, uuid_vec_t& selectedIDS) diff --git a/indra/newview/llfloaterimcontainer.h b/indra/newview/llfloaterimcontainer.h index 85d950c58b..06af6c7b51 100644 --- a/indra/newview/llfloaterimcontainer.h +++ b/indra/newview/llfloaterimcontainer.h @@ -169,6 +169,7 @@ private:  	bool mInitialized;  	LLUUID mSelectedSession; +	std::string mGeneralTitle;  	// Conversation list implementation  public: diff --git a/indra/newview/llfloaterimsession.cpp b/indra/newview/llfloaterimsession.cpp index d36b138c21..a09dc1914f 100644 --- a/indra/newview/llfloaterimsession.cpp +++ b/indra/newview/llfloaterimsession.cpp @@ -70,6 +70,7 @@ LLFloaterIMSession::LLFloaterIMSession(const LLUUID& session_id)  	mShouldSendTypingState(false),  	mMeTyping(false),  	mOtherTyping(false), +	mSessionNameUpdatedForTyping(false),  	mTypingTimer(),  	mTypingTimeoutTimer(),  	mPositioned(false), @@ -556,6 +557,7 @@ void LLFloaterIMSession::updateSessionName(const std::string& name)  		LLFloaterIMSessionTab::updateSessionName(name);  		mTypingStart.setArg("[NAME]", name);  		setTitle (mOtherTyping ? mTypingStart.getString() : name); +		mSessionNameUpdatedForTyping = mOtherTyping;  	}  } @@ -705,7 +707,7 @@ BOOL LLFloaterIMSession::getVisible()  		// getVisible() returns TRUE when Tabbed IM window is minimized.  			visible = is_active && !im_container->isMinimized()  						&& im_container->getVisible(); -	} +		}  	}  	else  	{ diff --git a/indra/newview/llfloaterimsession.h b/indra/newview/llfloaterimsession.h index 6a2f4b29eb..2049cedfd7 100644 --- a/indra/newview/llfloaterimsession.h +++ b/indra/newview/llfloaterimsession.h @@ -132,6 +132,7 @@ public:  	static boost::signals2::connection setIMFloaterShowedCallback(const floater_showed_signal_t::slot_type& cb);  	static floater_showed_signal_t sIMFloaterShowedSignal; +	bool needsTitleOverwrite() { return mSessionNameUpdatedForTyping && mOtherTyping; }  private:  	/*virtual*/ void refresh(); @@ -182,6 +183,7 @@ private:  	bool mShouldSendTypingState;  	LLFrameTimer mTypingTimer;  	LLFrameTimer mTypingTimeoutTimer; +	bool mSessionNameUpdatedForTyping;  	bool mSessionInitialized;  	LLSD mQueuedMsgsForInit; diff --git a/indra/newview/llfloaterimsessiontab.cpp b/indra/newview/llfloaterimsessiontab.cpp index d4eb03f95d..06a79836db 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 0fa99a46be..05da0f98bc 100644 --- a/indra/newview/llfloaterimsessiontab.h +++ b/indra/newview/llfloaterimsessiontab.h @@ -109,8 +109,12 @@ protected:  	//  	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 6a9236ce0c..33f2c35239 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 9b47ad72ed..b9bfd6265a 100644 --- a/indra/newview/llfloatertranslationsettings.h +++ b/indra/newview/llfloatertranslationsettings.h @@ -44,6 +44,7 @@ public:  	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 483f24afd0..f2a8b39b04 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>  | 
