summaryrefslogtreecommitdiff
path: root/indra/newview/llfloaterpreference.cpp
diff options
context:
space:
mode:
authorKitty Barnett <develop@catznip.com>2012-02-14 21:48:22 +0100
committerKitty Barnett <develop@catznip.com>2012-02-14 21:48:22 +0100
commit60e39343b17f29c65e8a60a415f7ed83ff069a12 (patch)
tree895a454b02b2685bfa91a994d67bb9eea139c1cc /indra/newview/llfloaterpreference.cpp
parent2114e88cd1291ef1dba4b79bcdcca4b2d134262f (diff)
STORM-276 Reworked the spell check preferences to be more robust and less error-prone
Diffstat (limited to 'indra/newview/llfloaterpreference.cpp')
-rwxr-xr-xindra/newview/llfloaterpreference.cpp121
1 files changed, 75 insertions, 46 deletions
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 29b07d2479..c41488ce91 100755
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -448,6 +448,8 @@ BOOL LLFloaterPreference::postBuild()
getChild<LLComboBox>("language_combobox")->setCommitCallback(boost::bind(&LLFloaterPreference::onLanguageChange, this));
+ gSavedSettings.getControl("SpellCheck")->getSignal()->connect(boost::bind(&LLFloaterPreference::refreshDictLists, this, false));
+ getChild<LLUICtrl>("combo_spellcheck_dict")->setCommitCallback(boost::bind(&LLFloaterPreference::refreshDictLists, this, false));
getChild<LLUICtrl>("btn_spellcheck_moveleft")->setCommitCallback(boost::bind(&LLFloaterPreference::onClickDictMove, this, "list_spellcheck_active", "list_spellcheck_available"));
getChild<LLUICtrl>("btn_spellcheck_moveright")->setCommitCallback(boost::bind(&LLFloaterPreference::onClickDictMove, this, "list_spellcheck_available", "list_spellcheck_active"));
@@ -585,14 +587,19 @@ void LLFloaterPreference::apply()
if (hasChild("check_spellcheck"), TRUE)
{
- LLScrollListCtrl* list_ctrl = findChild<LLScrollListCtrl>("list_spellcheck_active");
- std::vector<LLScrollListItem*> list_items = list_ctrl->getAllData();
-
std::list<std::string> list_dict;
- list_dict.push_back(LLSpellChecker::instance().getActiveDictionary());
- for (std::vector<LLScrollListItem*>::const_iterator item_it = list_items.begin(); item_it != list_items.end(); ++item_it)
- list_dict.push_back((*item_it)->getColumn(0)->getValue().asString());
+ LLComboBox* dict_combo = findChild<LLComboBox>("combo_spellcheck_dict");
+ const std::string dict_name = dict_combo->getSelectedItemLabel();
+ if (!dict_name.empty())
+ {
+ list_dict.push_back(dict_name);
+
+ LLScrollListCtrl* list_ctrl = findChild<LLScrollListCtrl>("list_spellcheck_active");
+ std::vector<LLScrollListItem*> list_items = list_ctrl->getAllData();
+ for (std::vector<LLScrollListItem*>::const_iterator item_it = list_items.begin(); item_it != list_items.end(); ++item_it)
+ list_dict.push_back((*item_it)->getColumn(0)->getValue().asString());
+ }
gSavedSettings.setString("SpellCheckDictionary", boost::join(list_dict, ","));
}
@@ -706,7 +713,7 @@ void LLFloaterPreference::onOpen(const LLSD& key)
// Load (double-)click to walk/teleport settings.
updateClickActionControls();
- buildDictLists();
+ refreshDictLists(true);
// Enabled/disabled popups, might have been changed by user actions
// while preferences floater was closed.
@@ -970,58 +977,80 @@ void LLFloaterPreference::refreshSkin(void* data)
self->getChild<LLRadioGroup>("skin_selection", true)->setValue(sSkin);
}
-void LLFloaterPreference::buildDictLists()
+void LLFloaterPreference::refreshDictLists(bool from_settings)
{
+ bool enabled = gSavedSettings.getBOOL("SpellCheck");
+ getChild<LLUICtrl>("btn_spellcheck_moveleft")->setEnabled(enabled);
+ getChild<LLUICtrl>("btn_spellcheck_moveright")->setEnabled(enabled);
+
+ // Populate the dictionary combobox
LLComboBox* dict_combo = findChild<LLComboBox>("combo_spellcheck_dict");
+ std::string dict_cur = dict_combo->getSelectedItemLabel();
+ if ((dict_cur.empty() || from_settings) && (LLSpellChecker::getUseSpellCheck()))
+ dict_cur = LLSpellChecker::instance().getActiveDictionary();
dict_combo->clearRows();
+ dict_combo->setEnabled(enabled);
- LLScrollListCtrl* active_ctrl = findChild<LLScrollListCtrl>("list_spellcheck_active");
- active_ctrl->clearRows();
+ const LLSD& dict_map = LLSpellChecker::getDictionaryMap();
+ if (dict_map.size())
+ {
+ for (LLSD::array_const_iterator dict_it = dict_map.beginArray(); dict_it != dict_map.endArray(); ++dict_it)
+ {
+ const LLSD& dict = *dict_it;
+ if ( (dict["installed"].asBoolean()) && (dict.has("language")) )
+ dict_combo->add(dict["language"].asString());
+ }
+ if (!dict_combo->selectByValue(dict_cur))
+ dict_combo->clear();
+ }
+ // Populate the available and active dictionary list
LLScrollListCtrl* avail_ctrl = findChild<LLScrollListCtrl>("list_spellcheck_available");
- avail_ctrl->clearRows();
+ LLScrollListCtrl* active_ctrl = findChild<LLScrollListCtrl>("list_spellcheck_active");
- if (LLSpellChecker::getUseSpellCheck())
+ LLSpellChecker::dict_list_t active_list;
+ if ( ((!avail_ctrl->getItemCount()) && (!active_ctrl->getItemCount())) || (from_settings) )
{
- // Populate the main dictionary combobox
- const LLSD& dict_map = LLSpellChecker::instance().getDictionaryMap();
- if (dict_map.size())
+ if (LLSpellChecker::getUseSpellCheck())
+ active_list = LLSpellChecker::instance().getSecondaryDictionaries();
+ }
+ else
+ {
+ std::vector<LLScrollListItem*> active_items = active_ctrl->getAllData();
+ for (std::vector<LLScrollListItem*>::const_iterator item_it = active_items.begin(); item_it != active_items.end(); ++item_it)
{
- for (LLSD::array_const_iterator dict_it = dict_map.beginArray(); dict_it != dict_map.endArray(); ++dict_it)
- {
- const LLSD& dict = *dict_it;
- if ( (dict["installed"].asBoolean()) && (dict.has("language")) )
- dict_combo->add(dict["language"].asString());
- }
- dict_combo->selectByValue(LLSpellChecker::instance().getActiveDictionary());
+ std::string dict = (*item_it)->getColumn(0)->getValue().asString();
+ if (dict_cur != dict)
+ active_list.push_back(dict);
}
+ }
- LLSD row;
- row["columns"][0]["column"] = "name";
- row["columns"][0]["font"]["name"] = "SANSSERIF_SMALL";
- row["columns"][0]["font"]["style"] = "NORMAL";
-
- // Populate the active dictionary list
- LLSpellChecker::dict_list_t active_list = LLSpellChecker::instance().getSecondaryDictionaries();
- active_ctrl->sortByColumnIndex(0, true);
- for (LLSpellChecker::dict_list_t::const_iterator it = active_list.begin(); it != active_list.end(); ++it)
- {
- row["columns"][0]["value"] = *it;
- active_ctrl->addElement(row);
- }
- active_list.push_back(LLSpellChecker::instance().getActiveDictionary());
+ LLSD row;
+ row["columns"][0]["column"] = "name";
+ row["columns"][0]["font"]["name"] = "SANSSERIF_SMALL";
+ row["columns"][0]["font"]["style"] = "NORMAL";
- // Populate the available dictionary list
- avail_ctrl->sortByColumnIndex(0, true);
- for (LLSD::array_const_iterator dict_it = dict_map.beginArray(); dict_it != dict_map.endArray(); ++dict_it)
+ active_ctrl->clearRows();
+ active_ctrl->setEnabled(enabled);
+ active_ctrl->sortByColumnIndex(0, true);
+ for (LLSpellChecker::dict_list_t::const_iterator it = active_list.begin(); it != active_list.end(); ++it)
+ {
+ row["columns"][0]["value"] = *it;
+ active_ctrl->addElement(row);
+ }
+ active_list.push_back(dict_cur);
+
+ avail_ctrl->clearRows();
+ avail_ctrl->setEnabled(enabled);
+ avail_ctrl->sortByColumnIndex(0, true);
+ for (LLSD::array_const_iterator dict_it = dict_map.beginArray(); dict_it != dict_map.endArray(); ++dict_it)
+ {
+ const LLSD& dict = *dict_it;
+ if ( (dict["installed"].asBoolean()) && (dict.has("language")) &&
+ (active_list.end() == std::find(active_list.begin(), active_list.end(), dict["language"].asString())) )
{
- const LLSD& dict = *dict_it;
- if ( (dict["installed"].asBoolean()) && (dict.has("language")) &&
- (active_list.end() == std::find(active_list.begin(), active_list.end(), dict["language"].asString())) )
- {
- row["columns"][0]["value"] = dict["language"].asString();
- avail_ctrl->addElement(row);
- }
+ row["columns"][0]["value"] = dict["language"].asString();
+ avail_ctrl->addElement(row);
}
}
}