aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra
diff options
context:
space:
mode:
authorelektrahesse2010-09-16 20:46:49 +0200
committerelektrahesse2010-09-16 20:46:49 +0200
commitff945e2da422446dc8ada6bf801f44cb8f6b1f9b (patch)
tree80bb8ffc00332c8e41beb9cd05cf12c5834f3c5c /linden/indra
parentAdded nicknames support for chat highlighting (up to 3) in prefs->adv->extra (diff)
parentFixed up the logic for the Hide Misspellings/Show Misspellings menu options. ... (diff)
downloadmeta-impy-ff945e2da422446dc8ada6bf801f44cb8f6b1f9b.zip
meta-impy-ff945e2da422446dc8ada6bf801f44cb8f6b1f9b.tar.gz
meta-impy-ff945e2da422446dc8ada6bf801f44cb8f6b1f9b.tar.bz2
meta-impy-ff945e2da422446dc8ada6bf801f44cb8f6b1f9b.tar.xz
Merge branch 'weekly' of git://github.com/mccabe/imprudence into weekly
Diffstat (limited to 'linden/indra')
-rw-r--r--linden/indra/llui/lllineeditor.cpp215
-rw-r--r--linden/indra/llui/lllineeditor.h5
-rw-r--r--linden/indra/llui/lltexteditor.cpp282
-rw-r--r--linden/indra/llui/lltexteditor.h5
-rw-r--r--linden/indra/newview/app_settings/dictionaries/en_sl.dic2
-rw-r--r--linden/indra/newview/lggdicdownload.cpp75
-rw-r--r--linden/indra/newview/lgghunspell_wrapper.cpp327
-rw-r--r--linden/indra/newview/lgghunspell_wrapper.h11
-rw-r--r--linden/indra/newview/llprefsadvanced.cpp33
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_about_land.xml6
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_animation_preview.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_area_search.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_busy.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_buy_land.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_chat_history.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_directory.xml14
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_group_info.xml8
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_image_preview.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_instant_message.xml4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_instant_message_ad_hoc.xml4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_instant_message_group.xml4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_inventory_item_properties.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_name_description.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_new_outfit_dialog.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_pay.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_postcard.xml4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_preview_animation.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_preview_gesture.xml6
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_preview_notecard.xml4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_preview_notecard_keep_discard.xml4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_preview_sound.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_preview_texture.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_preview_texture_keep_discard.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_report_abuse.xml4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_report_bug.xml4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_script_ed_panel.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_script_preview.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_search_replace.xml4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_sound_preview.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_tools.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_avatar.xml12
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_avatar_classified.xml4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_avatar_pick.xml4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_chat_bar.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_classified.xml4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_event.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_group_general.xml4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_group_notices.xml9
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_group_roles.xml8
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_group_voting.xml4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_place.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_place_small.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_preferences_advanced.xml59
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_preferences_im.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_region_covenant.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_status_bar.xml4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_top_pick.xml4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_voice_enable.xml37
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_voice_options.xml43
59 files changed, 676 insertions, 593 deletions
diff --git a/linden/indra/llui/lllineeditor.cpp b/linden/indra/llui/lllineeditor.cpp
index c1d8efa..66ef4c6 100644
--- a/linden/indra/llui/lllineeditor.cpp
+++ b/linden/indra/llui/lllineeditor.cpp
@@ -171,7 +171,8 @@ LLLineEditor::LLLineEditor(const std::string& name, const LLRect& rect,
171 mHaveHistory(FALSE), 171 mHaveHistory(FALSE),
172 mImage( sImage ), 172 mImage( sImage ),
173 mReplaceNewlinesWithSpaces( TRUE ), 173 mReplaceNewlinesWithSpaces( TRUE ),
174 mOverRideAndShowMisspellings( FALSE ) 174 mSpellCheckable( FALSE ),
175 mShowMisspellings(FALSE)
175{ 176{
176 llassert( max_length_bytes > 0 ); 177 llassert( max_length_bytes > 0 );
177 178
@@ -209,6 +210,13 @@ LLLineEditor::LLLineEditor(const std::string& name, const LLRect& rect,
209 sImage = LLUI::getUIImage("sm_rounded_corners_simple.tga"); 210 sImage = LLUI::getUIImage("sm_rounded_corners_simple.tga");
210 } 211 }
211 mImage = sImage; 212 mImage = sImage;
213
214 // in other words, highlighting requires a restart
215 if (glggHunSpell->getSpellCheckHighlight())
216 {
217 mShowMisspellings = TRUE;
218 }
219
212 // make the popup menu available 220 // make the popup menu available
213 //LLMenuGL* menu = LLUICtrlFactory::getInstance()->buildMenu("menu_texteditor.xml", parent_view); 221 //LLMenuGL* menu = LLUICtrlFactory::getInstance()->buildMenu("menu_texteditor.xml", parent_view);
214 LLMenuGL* menu = new LLMenuGL("wot"); 222 LLMenuGL* menu = new LLMenuGL("wot");
@@ -546,19 +554,19 @@ void LLLineEditor::spell_show(void * data)
546 SpellMenuBind* tempBind = (SpellMenuBind*)data; 554 SpellMenuBind* tempBind = (SpellMenuBind*)data;
547 LLLineEditor* line = tempBind->origin; 555 LLLineEditor* line = tempBind->origin;
548 556
549 if(tempBind && line) 557 if( tempBind && line)
550 { 558 {
551 if(tempBind->word=="Show Misspellings") 559 if (tempBind->word == "Show Misspellings")
552 { 560 {
553 line->setOverRideAndShowMisspellings(TRUE); 561 line->mShowMisspellings = TRUE;
554 }else 562 }
563 else
555 { 564 {
556 line->setOverRideAndShowMisspellings(FALSE); 565 line->mShowMisspellings = FALSE;
557 } 566 }
558 } 567 }
559
560
561} 568}
569
562std::vector<S32> LLLineEditor::getMisspelledWordsPositions() 570std::vector<S32> LLLineEditor::getMisspelledWordsPositions()
563{ 571{
564 std::vector<S32> thePosesOfBadWords; 572 std::vector<S32> thePosesOfBadWords;
@@ -604,25 +612,29 @@ std::vector<S32> LLLineEditor::getMisspelledWordsPositions()
604 } 612 }
605 return thePosesOfBadWords; 613 return thePosesOfBadWords;
606} 614}
615
607void LLLineEditor::spell_add(void* data) 616void LLLineEditor::spell_add(void* data)
608{ 617{
609 SpellMenuBind* tempBind = (SpellMenuBind*)data; 618 SpellMenuBind* tempBind = (SpellMenuBind*)data;
610 if(tempBind) 619 if (tempBind)
611 { 620 {
612 glggHunSpell->addWordToCustomDictionary(tempBind->word); 621 glggHunSpell->addWordToCustomDictionary(tempBind->word);
613 tempBind->origin->mPrevSpelledText="";//make it update 622 tempBind->origin->mPrevSpelledText="";//make it update
614 } 623 }
615} 624}
625
616void LLLineEditor::context_paste(void* data) 626void LLLineEditor::context_paste(void* data)
617{ 627{
618 LLLineEditor* line = (LLLineEditor*)data; 628 LLLineEditor* line = (LLLineEditor*)data;
619 if(line)line->paste(); 629 if(line)line->paste();
620} 630}
631
621void LLLineEditor::context_delete(void* data) 632void LLLineEditor::context_delete(void* data)
622{ 633{
623 LLLineEditor* line = (LLLineEditor*)data; 634 LLLineEditor* line = (LLLineEditor*)data;
624 if(line)line->doDelete(); 635 if(line)line->doDelete();
625} 636}
637
626void LLLineEditor::context_selectall(void* data) 638void LLLineEditor::context_selectall(void* data)
627{ 639{
628 LLLineEditor* line = (LLLineEditor*)data; 640 LLLineEditor* line = (LLLineEditor*)data;
@@ -728,16 +740,17 @@ BOOL LLLineEditor::handleRightMouseDown( S32 x, S32 y, MASK mask )
728 S32 wordStart = 0; 740 S32 wordStart = 0;
729 S32 wordEnd = calculateCursorFromMouse(x); 741 S32 wordEnd = calculateCursorFromMouse(x);
730 742
731
732 LLMenuGL* menu = (LLMenuGL*)mPopupMenuHandle.get(); 743 LLMenuGL* menu = (LLMenuGL*)mPopupMenuHandle.get();
733 if (menu) 744 if (menu)
734 { 745 {
735 if(menu->isOpen()) 746 if(menu->isOpen())
747 {
736 menu->setVisible(FALSE); 748 menu->setVisible(FALSE);
737 for(int i = 0;i<(int)suggestionMenuItems.size();i++) 749 }
750 for (int i = 0;i<(int)suggestionMenuItems.size();i++)
738 { 751 {
739 SpellMenuBind * tempBind = suggestionMenuItems[i]; 752 SpellMenuBind * tempBind = suggestionMenuItems[i];
740 if(tempBind) 753 if (tempBind)
741 { 754 {
742 menu->remove((LLMenuItemCallGL *)tempBind->menuItem); 755 menu->remove((LLMenuItemCallGL *)tempBind->menuItem);
743 ((LLMenuItemCallGL *)tempBind->menuItem)->die(); 756 ((LLMenuItemCallGL *)tempBind->menuItem)->die();
@@ -748,69 +761,74 @@ BOOL LLLineEditor::handleRightMouseDown( S32 x, S32 y, MASK mask )
748 } 761 }
749 suggestionMenuItems.clear(); 762 suggestionMenuItems.clear();
750 763
751 menu->setItemVisible("Translate To",!mReadOnly); 764 menu->setItemVisible("Translate To", !mReadOnly);
752 menu->setItemVisible("Transep",!mReadOnly); 765 menu->setItemVisible("Transep", !mReadOnly);
753 766
754 const LLWString& text = mText.getWString(); 767 // spell_check="true" in xui
755 if(( LLTextEditor::isPartOfWord( text[wordEnd] ) ) 768 if (!mReadOnly && mSpellCheckable)
756 &&(!mReadOnly))
757 { 769 {
758 // Select word the cursor is over 770 const LLWString& text = mText.getWString();
759 while ((wordEnd > 0) && LLTextEditor::isPartOfWord(text[wordEnd-1]))
760 {
761 wordEnd--;
762 }
763 wordStart=wordEnd;
764 //startSelection();
765 771
766 while ((wordEnd < (S32)text.length()) && LLTextEditor::isPartOfWord( text[wordEnd] ) ) 772 // search for word matches
773 if (LLTextEditor::isPartOfWord(text[wordEnd]))
767 { 774 {
768 wordEnd++; 775 // Select word the cursor is over
769 } 776 while ((wordEnd > 0) && LLTextEditor::isPartOfWord(text[wordEnd-1]))
770 std::string selectedWord(std::string(text.begin(), 777 {
771 text.end()).substr(wordStart,wordEnd-wordStart)); 778 wordEnd--;
772 if(!glggHunSpell->isSpelledRight(selectedWord)) 779 }
773 { 780 wordStart = wordEnd;
774 //misspelled word here, and you have just right clicked on it! 781 //startSelection();
775 std::vector<std::string> suggs = glggHunSpell->getSuggestionList(selectedWord);
776 //menu->setItemVisible("Transep",(suggs.size()>0));
777 782
778 for(int i = 0;i<(int)suggs.size();i++) 783 while ((wordEnd < (S32)text.length()) && LLTextEditor::isPartOfWord( text[wordEnd] ) )
779 { 784 {
785 wordEnd++;
786 }
787 std::string selectedWord(std::string(text.begin(), text.end()).substr(wordStart,wordEnd-wordStart));
788
789 if (!glggHunSpell->isSpelledRight(selectedWord))
790 {
791 //misspelled word here, and you have just right clicked on it!
792 std::vector<std::string> suggs = glggHunSpell->getSuggestionList(selectedWord);
793 //menu->setItemVisible("Transep",(suggs.size()>0));
794
795 for (int i = 0; i<(int)suggs.size() ;i++)
796 {
797 SpellMenuBind * tempStruct = new SpellMenuBind;
798 tempStruct->origin = this;
799 tempStruct->word = suggs[i];
800 tempStruct->wordPositionEnd = wordEnd;
801 tempStruct->wordPositionStart=wordStart;
802 LLMenuItemCallGL * suggMenuItem = new LLMenuItemCallGL(
803 tempStruct->word, spell_correct, NULL, tempStruct);
804 //new LLMenuItemCallGL("Select All", context_selectall, NULL, this));
805 tempStruct->menuItem = suggMenuItem;
806 suggestionMenuItems.push_back(tempStruct);
807 menu->append(suggMenuItem);
808 }
780 SpellMenuBind * tempStruct = new SpellMenuBind; 809 SpellMenuBind * tempStruct = new SpellMenuBind;
781 tempStruct->origin = this; 810 tempStruct->origin = this;
782 tempStruct->word = suggs[i]; 811 tempStruct->word = selectedWord;
783 tempStruct->wordPositionEnd = wordEnd; 812 tempStruct->wordPositionEnd = wordEnd;
784 tempStruct->wordPositionStart=wordStart; 813 tempStruct->wordPositionStart=wordStart;
785 LLMenuItemCallGL * suggMenuItem = new LLMenuItemCallGL( 814 LLMenuItemCallGL * suggMenuItem = new LLMenuItemCallGL(
786 tempStruct->word, spell_correct, NULL, tempStruct); 815 "Add Word", spell_add, NULL, tempStruct);
787 //new LLMenuItemCallGL("Select All", context_selectall, NULL, this));
788 tempStruct->menuItem = suggMenuItem; 816 tempStruct->menuItem = suggMenuItem;
789 suggestionMenuItems.push_back(tempStruct); 817 suggestionMenuItems.push_back(tempStruct);
790 menu->append(suggMenuItem); 818 menu->append(suggMenuItem);
791 } 819 }
792 SpellMenuBind * tempStruct = new SpellMenuBind;
793 tempStruct->origin = this;
794 tempStruct->word = selectedWord;
795 tempStruct->wordPositionEnd = wordEnd;
796 tempStruct->wordPositionStart=wordStart;
797 LLMenuItemCallGL * suggMenuItem = new LLMenuItemCallGL(
798 "Add Word", spell_add, NULL, tempStruct);
799 tempStruct->menuItem = suggMenuItem;
800 suggestionMenuItems.push_back(tempStruct);
801 menu->append(suggMenuItem);
802 } 820 }
803 821
804 }
805 if((!mReadOnly)&&((!glggHunSpell->highlightInRed)
806 ||(mOverRideAndShowMisspellings)))
807 {
808 SpellMenuBind * tempStruct = new SpellMenuBind; 822 SpellMenuBind * tempStruct = new SpellMenuBind;
809 tempStruct->origin = this; 823 tempStruct->origin = this;
810 if(mOverRideAndShowMisspellings) 824 if (mShowMisspellings)
825 {
811 tempStruct->word = "Hide Misspellings"; 826 tempStruct->word = "Hide Misspellings";
827 }
812 else 828 else
829 {
813 tempStruct->word = "Show Misspellings"; 830 tempStruct->word = "Show Misspellings";
831 }
814 LLMenuItemCallGL * suggMenuItem = new LLMenuItemCallGL( 832 LLMenuItemCallGL * suggMenuItem = new LLMenuItemCallGL(
815 tempStruct->word, spell_show, NULL, tempStruct); 833 tempStruct->word, spell_show, NULL, tempStruct);
816 tempStruct->menuItem = suggMenuItem; 834 tempStruct->menuItem = suggMenuItem;
@@ -1838,36 +1856,43 @@ void LLLineEditor::doDelete()
1838 } 1856 }
1839 } 1857 }
1840} 1858}
1859
1841void LLLineEditor::autoCorrectText() 1860void LLLineEditor::autoCorrectText()
1842{ 1861{
1843 static BOOL *doAnything = rebind_llcontrol<BOOL>("EmeraldEnableAutoCorrect", &gSavedSettings, true); 1862 static BOOL *doAnything = rebind_llcontrol<BOOL>("EmeraldEnableAutoCorrect", &gSavedSettings, true);
1844 if( (!mReadOnly) && (*doAnything) && (isSpellDirty())) 1863 if (!mReadOnly && *doAnything && isSpellDirty())
1845 { 1864 {
1846 S32 wordStart = 0; 1865 S32 wordStart = 0;
1847 S32 wordEnd = mCursorPos-1; 1866 S32 wordEnd = mCursorPos-1;
1848 //llinfos <<"Checking Word, Cursor is at "<<mCursorPos<<" and text is "<<mText.getString().c_str()<<llendl; 1867 //llinfos <<"Checking Word, Cursor is at "<<mCursorPos<<" and text is "<<mText.getString().c_str()<<llendl;
1849 if(wordEnd<1)return; 1868 if (wordEnd < 1)
1869 {
1870 return;
1871 }
1850 const LLWString& text = mText.getWString(); 1872 const LLWString& text = mText.getWString();
1851 if(text.size()<1)return; 1873 if (text.size() < 1 || LLTextEditor::isPartOfWord(text[wordEnd]))
1852 if( LLTextEditor::isPartOfWord( text[wordEnd] )) return;//we only check on word breaks 1874 {
1875 return;//we only check on word breaks
1876 }
1877
1853 wordEnd--; 1878 wordEnd--;
1854 if( LLTextEditor::isPartOfWord( text[wordEnd] ) ) 1879 if (LLTextEditor::isPartOfWord(text[wordEnd]))
1855 { 1880 {
1856 while ((wordEnd > 0) && (' '!=text[wordEnd-1])) 1881 while ((wordEnd > 0) && (' '!=text[wordEnd-1]))
1857 { 1882 {
1858 wordEnd--; 1883 wordEnd--;
1859 } 1884 }
1860 wordStart=wordEnd; 1885 wordStart = wordEnd;
1861 while ((wordEnd < (S32)text.length()) && (' '!=text[wordEnd] ) ) 1886 while ((wordEnd < (S32)text.length()) && (' '!=text[wordEnd] ) )
1862 { 1887 {
1863 wordEnd++; 1888 wordEnd++;
1864 } 1889 }
1865 std::string lastTypedWord(std::string(text.begin(), 1890 std::string lastTypedWord(std::string(text.begin(),
1866 text.end()).substr(wordStart,wordEnd-wordStart)); 1891 text.end()).substr(wordStart, wordEnd-wordStart));
1867 //llinfos << " The last typed word has been chosen, it is "<<lastTypedWord.c_str()<<llendl; 1892 //llinfos << " The last typed word has been chosen, it is "<<lastTypedWord.c_str()<<llendl;
1868 1893
1869 std::string correctedWord(LGGAutoCorrect::getInstance()->replaceWord(lastTypedWord)); 1894 std::string correctedWord(LGGAutoCorrect::getInstance()->replaceWord(lastTypedWord));
1870 if(correctedWord!=lastTypedWord) 1895 if(correctedWord != lastTypedWord)
1871 { 1896 {
1872 int dif = correctedWord.length()-lastTypedWord.length(); 1897 int dif = correctedWord.length()-lastTypedWord.length();
1873 std::string regText(mText); 1898 std::string regText(mText);
@@ -1879,53 +1904,56 @@ void LLLineEditor::autoCorrectText()
1879 } 1904 }
1880 } 1905 }
1881} 1906}
1907
1882void LLLineEditor::drawMisspelled(LLRect background) 1908void LLLineEditor::drawMisspelled(LLRect background)
1883{ 1909{
1884 if((glggHunSpell->highlightInRed || mOverRideAndShowMisspellings) 1910 if (!mReadOnly && mSpellCheckable)
1885 &&(!mReadOnly))
1886 { 1911 {
1887 S32 newStartSpellHere =mScrollHPos; 1912 S32 newStartSpellHere = mScrollHPos;
1888 S32 cursorloc =calculateCursorFromMouse(mMaxHPixels); 1913 S32 cursorloc = calculateCursorFromMouse(mMaxHPixels);
1889 S32 newStopSpellHere = ( ((S32)mText.length())>cursorloc)?cursorloc:(S32)mText.length(); 1914 S32 newStopSpellHere = (((S32)mText.length())>cursorloc) ? cursorloc : (S32)mText.length();
1890 1915
1891 F32 elapsed = mSpellTimer.getElapsedTimeF32(); 1916 F32 elapsed = mSpellTimer.getElapsedTimeF32();
1892 if(S32(elapsed / 1) & 1) 1917 if (S32(elapsed / 1) & 1)
1893 { 1918 {
1894 if(isSpellDirty()||(newStartSpellHere!=mStartSpellHere)||(newStopSpellHere!=mEndSpellHere)) 1919 if (isSpellDirty() || (newStartSpellHere != mStartSpellHere) || ( newStopSpellHere != mEndSpellHere))
1895 { 1920 {
1896 mStartSpellHere=newStartSpellHere; 1921 mStartSpellHere = newStartSpellHere;
1897 mEndSpellHere= newStopSpellHere; 1922 mEndSpellHere = newStopSpellHere;
1898 resetSpellDirty(); 1923 resetSpellDirty();
1899 misspellLocations=getMisspelledWordsPositions(); 1924 misspellLocations=getMisspelledWordsPositions();
1900 } 1925 }
1901 } 1926 }
1902 for(int i =0;i<(int)misspellLocations.size();i++)
1903 {
1904 S32 wstart =findPixelNearestPos( misspellLocations[i]-getCursor());
1905 S32 wend = findPixelNearestPos(misspellLocations[++i]-getCursor());
1906 S32 maxw = getRect().getWidth();
1907 1927
1908 if(wend > maxw) 1928 if (mShowMisspellings)
1909 { 1929 {
1910 wend=maxw; 1930 for (int i =0; i<(int)misspellLocations.size(); i++)
1911 }
1912 if(wstart > maxw)
1913 {
1914 wstart=maxw;
1915 }
1916 gGL.color4ub(255,0,0,200);
1917 //3 line zig zags..
1918 while(wstart<wend)
1919 { 1931 {
1920 gl_line_2d(wstart,background.mBottom-1,wstart+3,background.mBottom+2); 1932 S32 wstart =findPixelNearestPos( misspellLocations[i]-getCursor());
1921 gl_line_2d(wstart+3,background.mBottom+2,wstart+6,background.mBottom-1); 1933 S32 wend = findPixelNearestPos(misspellLocations[++i]-getCursor());
1922 wstart+=6; 1934 S32 maxw = getRect().getWidth();
1923 }
1924 1935
1936 if (wend > maxw)
1937 {
1938 wend = maxw;
1939 }
1940 if (wstart > maxw)
1941 {
1942 wstart = maxw;
1943 }
1944 gGL.color4ub(255,0,0,200);
1945 //3 line zig zags..
1946 while (wstart < wend)
1947 {
1948 gl_line_2d(wstart, background.mBottom-1, wstart+3, background.mBottom+2);
1949 gl_line_2d(wstart+3, background.mBottom+2, wstart+6, background.mBottom-1);
1950 wstart+=6;
1951 }
1952 }
1925 } 1953 }
1926 } 1954 }
1927
1928} 1955}
1956
1929void LLLineEditor::draw() 1957void LLLineEditor::draw()
1930{ 1958{
1931 autoCorrectText(); 1959 autoCorrectText();
@@ -2797,6 +2825,11 @@ LLView* LLLineEditor::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory
2797 { 2825 {
2798 line_editor->setCommitOnFocusLost(commit_on_focus_lost); 2826 line_editor->setCommitOnFocusLost(commit_on_focus_lost);
2799 } 2827 }
2828 BOOL spell_checking = FALSE;
2829 if (node->getAttributeBOOL("spell_check", spell_checking))
2830 {
2831 line_editor->setSpellCheckable(spell_checking);
2832 }
2800 2833
2801 line_editor->setColorParameters(node); 2834 line_editor->setColorParameters(node);
2802 2835
diff --git a/linden/indra/llui/lllineeditor.h b/linden/indra/llui/lllineeditor.h
index 6de57ec..147b232 100644
--- a/linden/indra/llui/lllineeditor.h
+++ b/linden/indra/llui/lllineeditor.h
@@ -198,7 +198,7 @@ public:
198 void setWriteableBgColor( const LLColor4& c ) { mWriteableBgColor = c; } 198 void setWriteableBgColor( const LLColor4& c ) { mWriteableBgColor = c; }
199 void setReadOnlyBgColor( const LLColor4& c ) { mReadOnlyBgColor = c; } 199 void setReadOnlyBgColor( const LLColor4& c ) { mReadOnlyBgColor = c; }
200 void setFocusBgColor(const LLColor4& c) { mFocusBgColor = c; } 200 void setFocusBgColor(const LLColor4& c) { mFocusBgColor = c; }
201 void setOverRideAndShowMisspellings(BOOL b) { mOverRideAndShowMisspellings =b;} 201 void setSpellCheckable(BOOL b) { mSpellCheckable = b; }
202 202
203 const LLColor4& getFgColor() const { return mFgColor; } 203 const LLColor4& getFgColor() const { return mFgColor; }
204 const LLColor4& getReadOnlyFgColor() const { return mReadOnlyFgColor; } 204 const LLColor4& getReadOnlyFgColor() const { return mReadOnlyFgColor; }
@@ -293,7 +293,8 @@ protected:
293 std::vector<S32> misspellLocations; // where all the mispelled words are 293 std::vector<S32> misspellLocations; // where all the mispelled words are
294 S32 mStartSpellHere; // the position of the first char on the screen, stored so we know when to update 294 S32 mStartSpellHere; // the position of the first char on the screen, stored so we know when to update
295 S32 mEndSpellHere; // the location of the last char on the screen 295 S32 mEndSpellHere; // the location of the last char on the screen
296 BOOL mOverRideAndShowMisspellings; 296 BOOL mSpellCheckable; // set in xui as "spell_check". Default value for a field
297 BOOL mShowMisspellings; // show misspellings as highlighted (initialized in the ctor)
297 LLFrameTimer mSpellTimer; 298 LLFrameTimer mSpellTimer;
298 //to keep track of what we have to remove before showing menu 299 //to keep track of what we have to remove before showing menu
299 std::vector<SpellMenuBind* > suggestionMenuItems; 300 std::vector<SpellMenuBind* > suggestionMenuItems;
diff --git a/linden/indra/llui/lltexteditor.cpp b/linden/indra/llui/lltexteditor.cpp
index 6e5cdc4..b101588 100644
--- a/linden/indra/llui/lltexteditor.cpp
+++ b/linden/indra/llui/lltexteditor.cpp
@@ -323,7 +323,8 @@ LLTextEditor::LLTextEditor(
323 mLastSelectionY(-1), 323 mLastSelectionY(-1),
324 mReflowNeeded(FALSE), 324 mReflowNeeded(FALSE),
325 mScrollNeeded(FALSE), 325 mScrollNeeded(FALSE),
326 mOverRideAndShowMisspellings(FALSE) 326 mSpellCheckable(FALSE),
327 mShowMisspellings(FALSE)
327{ 328{
328 mSourceID.generate(); 329 mSourceID.generate();
329 330
@@ -375,6 +376,13 @@ LLTextEditor::LLTextEditor(
375 376
376 mParseHTML=FALSE; 377 mParseHTML=FALSE;
377 mHTML.clear(); 378 mHTML.clear();
379
380 // in other words, highlighting requires a restart
381 if (glggHunSpell->getSpellCheckHighlight())
382 {
383 mShowMisspellings = TRUE;
384 }
385
378 // make the popup menu available 386 // make the popup menu available
379 //LLMenuGL* menu = LLUICtrlFactory::getInstance()->buildMenu("menu_texteditor.xml", parent_view); 387 //LLMenuGL* menu = LLUICtrlFactory::getInstance()->buildMenu("menu_texteditor.xml", parent_view);
380 LLMenuGL* menu = new LLMenuGL("wot"); 388 LLMenuGL* menu = new LLMenuGL("wot");
@@ -486,14 +494,15 @@ void LLTextEditor::spell_show(void * data)
486 SpellMenuBind* tempBind = (SpellMenuBind*)data; 494 SpellMenuBind* tempBind = (SpellMenuBind*)data;
487 LLTextEditor* line = tempBind->origin; 495 LLTextEditor* line = tempBind->origin;
488 496
489 if(tempBind && line) 497 if (tempBind && line)
490 { 498 {
491 if(tempBind->word=="Show Misspellings") 499 if (tempBind->word == "Show Misspellings")
492 { 500 {
493 line->setOverRideAndShowMisspellings(TRUE); 501 glggHunSpell->setSpellCheckHighlight(TRUE);
494 }else 502 }
503 else
495 { 504 {
496 line->setOverRideAndShowMisspellings(FALSE); 505 glggHunSpell->setSpellCheckHighlight(FALSE);
497 } 506 }
498 } 507 }
499} 508}
@@ -1426,7 +1435,6 @@ BOOL LLTextEditor::handleMouseDown(S32 x, S32 y, MASK mask)
1426} 1435}
1427BOOL LLTextEditor::handleRightMouseDown( S32 x, S32 y, MASK mask ) 1436BOOL LLTextEditor::handleRightMouseDown( S32 x, S32 y, MASK mask )
1428{ 1437{
1429
1430 setFocus(TRUE); 1438 setFocus(TRUE);
1431 1439
1432 //setCursorAtLocalPos( x, y, TRUE ); 1440 //setCursorAtLocalPos( x, y, TRUE );
@@ -1450,69 +1458,73 @@ BOOL LLTextEditor::handleRightMouseDown( S32 x, S32 y, MASK mask )
1450 } 1458 }
1451 suggestionMenuItems.clear(); 1459 suggestionMenuItems.clear();
1452 1460
1453 menu->setItemVisible("Translate To",!mReadOnly); 1461 menu->setItemVisible("Translate To", !mReadOnly);
1454 menu->setItemVisible("Transep",!mReadOnly); 1462 menu->setItemVisible("Transep", !mReadOnly);
1455 1463
1456 const LLWString &text = mWText; 1464 // spell_check="true" in xui
1457 1465 if (!mReadOnly && mSpellCheckable)
1458 if(( isPartOfWord( text[wordEnd] ) )&&(!mReadOnly))
1459 { 1466 {
1460 // Select word the cursor is over 1467 const LLWString &text = mWText;
1461 while ((wordEnd > 0) && isPartOfWord(text[wordEnd-1])) 1468
1462 { 1469 if (isPartOfWord(text[wordEnd]) && !mReadOnly)
1463 wordEnd--;
1464 }
1465 wordStart=wordEnd;
1466 //startSelection();
1467
1468 while ((wordEnd < (S32)text.length()) && isPartOfWord( text[wordEnd] ) )
1469 {
1470 wordEnd++;
1471 }
1472 std::string selectedWord(std::string(text.begin(), text.end()).substr(wordStart,wordEnd-wordStart));
1473 if(!glggHunSpell->isSpelledRight(selectedWord))
1474 { 1470 {
1475 //misspelled word here, and you have just right clicked on it! 1471 // Select word the cursor is over
1476 std::vector<std::string> suggs = glggHunSpell->getSuggestionList(selectedWord); 1472 while ((wordEnd > 0) && isPartOfWord(text[wordEnd-1]))
1473 {
1474 wordEnd--;
1475 }
1476 wordStart = wordEnd;
1477 //startSelection();
1477 1478
1478 //menu->setItemVisible("Transep",(suggs.size()>0)); 1479 while ((wordEnd < (S32)text.length()) && isPartOfWord( text[wordEnd] ) )
1479 for(int i = 0;i<(int)suggs.size();i++)
1480 { 1480 {
1481 wordEnd++;
1482 }
1483 std::string selectedWord(std::string(text.begin(), text.end()).substr(wordStart,wordEnd-wordStart));
1484 if (!glggHunSpell->isSpelledRight(selectedWord))
1485 {
1486 //misspelled word here, and you have just right clicked on it!
1487 std::vector<std::string> suggs = glggHunSpell->getSuggestionList(selectedWord);
1488
1489 //menu->setItemVisible("Transep",(suggs.size()>0));
1490 for (int i = 0; i<(int)suggs.size(); i++)
1491 {
1492 SpellMenuBind * tempStruct = new SpellMenuBind;
1493 tempStruct->origin = this;
1494 tempStruct->word = suggs[i];
1495 tempStruct->wordPositionEnd = wordEnd;
1496 tempStruct->wordPositionStart=wordStart;
1497 tempStruct->wordY=y;
1498 LLMenuItemCallGL * suggMenuItem = new LLMenuItemCallGL(
1499 tempStruct->word, spell_correct, NULL, tempStruct);
1500 tempStruct->menuItem = suggMenuItem;
1501 suggestionMenuItems.push_back(tempStruct);
1502 menu->append(suggMenuItem);
1503 }
1481 SpellMenuBind * tempStruct = new SpellMenuBind; 1504 SpellMenuBind * tempStruct = new SpellMenuBind;
1482 tempStruct->origin = this; 1505 tempStruct->origin = this;
1483 tempStruct->word = suggs[i]; 1506 tempStruct->word = selectedWord;
1484 tempStruct->wordPositionEnd = wordEnd; 1507 tempStruct->wordPositionEnd = wordEnd;
1485 tempStruct->wordPositionStart=wordStart; 1508 tempStruct->wordPositionStart=wordStart;
1486 tempStruct->wordY=y; 1509 tempStruct->wordY=y;
1487 LLMenuItemCallGL * suggMenuItem = new LLMenuItemCallGL( 1510 LLMenuItemCallGL * suggMenuItem = new LLMenuItemCallGL(
1488 tempStruct->word, spell_correct, NULL, tempStruct); 1511 "Add Word", spell_add, NULL, tempStruct);
1489 tempStruct->menuItem = suggMenuItem; 1512 tempStruct->menuItem = suggMenuItem;
1490 suggestionMenuItems.push_back(tempStruct); 1513 suggestionMenuItems.push_back(tempStruct);
1491 menu->append(suggMenuItem); 1514 menu->append(suggMenuItem);
1492 } 1515 }
1493 SpellMenuBind * tempStruct = new SpellMenuBind;
1494 tempStruct->origin = this;
1495 tempStruct->word = selectedWord;
1496 tempStruct->wordPositionEnd = wordEnd;
1497 tempStruct->wordPositionStart=wordStart;
1498 tempStruct->wordY=y;
1499 LLMenuItemCallGL * suggMenuItem = new LLMenuItemCallGL(
1500 "Add Word", spell_add, NULL, tempStruct);
1501 tempStruct->menuItem = suggMenuItem;
1502 suggestionMenuItems.push_back(tempStruct);
1503 menu->append(suggMenuItem);
1504 } 1516 }
1505 1517
1506 }
1507 if((!mReadOnly)&&((!glggHunSpell->highlightInRed)
1508 ||(mOverRideAndShowMisspellings)||(mShowLineNumbers)))
1509 {
1510 SpellMenuBind * tempStruct = new SpellMenuBind; 1518 SpellMenuBind * tempStruct = new SpellMenuBind;
1511 tempStruct->origin = this; 1519 tempStruct->origin = this;
1512 if(mOverRideAndShowMisspellings) 1520 if (mShowMisspellings)
1521 {
1513 tempStruct->word = "Hide Misspellings"; 1522 tempStruct->word = "Hide Misspellings";
1523 }
1514 else 1524 else
1525 {
1515 tempStruct->word = "Show Misspellings"; 1526 tempStruct->word = "Show Misspellings";
1527 }
1516 LLMenuItemCallGL * suggMenuItem = new LLMenuItemCallGL( 1528 LLMenuItemCallGL * suggMenuItem = new LLMenuItemCallGL(
1517 tempStruct->word, spell_show, NULL, tempStruct); 1529 tempStruct->word, spell_show, NULL, tempStruct);
1518 tempStruct->menuItem = suggMenuItem; 1530 tempStruct->menuItem = suggMenuItem;
@@ -3077,51 +3089,57 @@ void LLTextEditor::drawSelectionBackground()
3077 } 3089 }
3078 } 3090 }
3079} 3091}
3092
3080void LLTextEditor::autoCorrectText() 3093void LLTextEditor::autoCorrectText()
3081{ 3094{
3082
3083 static BOOL *doAnything = rebind_llcontrol<BOOL>("EmeraldEnableAutoCorrect", &gSavedSettings, true); 3095 static BOOL *doAnything = rebind_llcontrol<BOOL>("EmeraldEnableAutoCorrect", &gSavedSettings, true);
3084 if( (!mReadOnly) && (*doAnything) && (isSpellDirty()) ) 3096 if (!mReadOnly && *doAnything && isSpellDirty())
3085 { 3097 {
3086 S32 wordStart = 0; 3098 S32 wordStart = 0;
3087 S32 wordEnd = mCursorPos-1; 3099 S32 wordEnd = mCursorPos-1;
3088 if(wordEnd<1)return; 3100 if (wordEnd < 1)
3101 {
3102 return;
3103 }
3089 LLWString& text = mWText; 3104 LLWString& text = mWText;
3090 if(text.size()<1)return; 3105 if (text.size() < 1 || LLTextEditor::isPartOfWord(text[wordEnd]))
3091 if( LLTextEditor::isPartOfWord( text[wordEnd] )) return;//we only check on word breaks 3106 {
3107 return;//we only check on word breaks
3108 }
3109
3092 wordEnd--; 3110 wordEnd--;
3093 if( LLTextEditor::isPartOfWord( text[wordEnd] ) ) 3111 if (LLTextEditor::isPartOfWord(text[wordEnd]))
3094 { 3112 {
3095 while ((wordEnd > 0) && (text[wordEnd-1]!=' ')) 3113 while ((wordEnd > 0) && (text[wordEnd-1]!=' '))
3096 { 3114 {
3097 wordEnd--; 3115 wordEnd--;
3098 } 3116 }
3099 wordStart=wordEnd; 3117 wordStart = wordEnd;
3100 while ((wordEnd < (S32)text.length()) && (' '!= text[wordEnd] ) ) 3118 while ((wordEnd < (S32)text.length()) && (' '!= text[wordEnd] ) )
3101 { 3119 {
3102 wordEnd++; 3120 wordEnd++;
3103 } 3121 }
3104 std::string lastTypedWord(std::string(text.begin(), 3122 std::string lastTypedWord(std::string(text.begin(),
3105 text.end()).substr(wordStart,wordEnd-wordStart)); 3123 text.end()).substr(wordStart, wordEnd-wordStart));
3106 3124
3107 std::string regText(text.begin(),text.end()); 3125 std::string regText(text.begin(), text.end());
3108 3126
3109 std::string correctedWord(LGGAutoCorrect::getInstance()->replaceWord(lastTypedWord)); 3127 std::string correctedWord(LGGAutoCorrect::getInstance()->replaceWord(lastTypedWord));
3110 if(correctedWord!=lastTypedWord) 3128 if (correctedWord != lastTypedWord)
3111 { 3129 {
3112 int dif = correctedWord.length()-lastTypedWord.length(); 3130 int dif = correctedWord.length() - lastTypedWord.length();
3113 regText.replace(wordStart,lastTypedWord.length(),correctedWord); 3131 regText.replace(wordStart, lastTypedWord.length(), correctedWord);
3114 mWText=utf8str_to_wstring(regText); 3132 mWText = utf8str_to_wstring(regText);
3115 mCursorPos+=dif; 3133 mCursorPos += dif;
3116 needsReflow(); 3134 needsReflow();
3117 } 3135 }
3118 } 3136 }
3119 } 3137 }
3120} 3138}
3139
3121void LLTextEditor::drawMisspelled() 3140void LLTextEditor::drawMisspelled()
3122{ 3141{
3123 if(mReadOnly)return; 3142 if (!mReadOnly && mSpellCheckable)
3124 if(glggHunSpell->highlightInRed || mOverRideAndShowMisspellings)
3125 { 3143 {
3126 if( 3144 if(
3127 ( ((getLength()<400)||(false)) &&( (S32(mSpellTimer.getElapsedTimeF32() / 1) & 1) )) 3145 ( ((getLength()<400)||(false)) &&( (S32(mSpellTimer.getElapsedTimeF32() / 1) & 1) ))
@@ -3132,80 +3150,86 @@ void LLTextEditor::drawMisspelled()
3132 S32 newSpellStart = getLineStart(mScrollbar->getDocPos());//start at the scroll start 3150 S32 newSpellStart = getLineStart(mScrollbar->getDocPos());//start at the scroll start
3133 S32 newSpellEnd = getLineStart(mScrollbar->getDocPos() + 1 + mScrollbar->getDocSize()-mScrollbar->getDocPosMax());//end at the end o.o 3151 S32 newSpellEnd = getLineStart(mScrollbar->getDocPos() + 1 + mScrollbar->getDocSize()-mScrollbar->getDocPosMax());//end at the end o.o
3134 3152
3135 if(mScrollbar->getDocPos() == mScrollbar->getDocPosMax()) 3153 if (mScrollbar->getDocPos() == mScrollbar->getDocPosMax())
3136 { 3154 {
3137 newSpellEnd=(S32)mWText.length(); 3155 newSpellEnd = (S32)mWText.length();
3138 } 3156 }
3139 if((isSpellDirty())||(newSpellEnd!=spellEnd || newSpellStart!=spellStart)) 3157 if (isSpellDirty() || (newSpellEnd!=spellEnd || newSpellStart!=spellStart))
3140 { 3158 {
3141 spellEnd = newSpellEnd; 3159 spellEnd = newSpellEnd;
3142 spellStart = newSpellStart; 3160 spellStart = newSpellStart;
3143 misspellLocations=getMisspelledWordsPositions(); 3161 misspellLocations = getMisspelledWordsPositions();
3144 } 3162 }
3145 } 3163 }
3146 //draw 3164 //draw
3147 for(int i =0;i<(int)misspellLocations.size();i++) 3165 if (mShowMisspellings)
3148 { 3166 {
3149 S32 wstart = misspellLocations[i]; 3167 for (int i = 0; i<(int)misspellLocations.size() ;i++)
3150 S32 wend = misspellLocations[++i];
3151 //start curor code mod
3152 const LLWString &text = mWText;
3153 const S32 text_len = getLength();
3154 // Skip through the lines we aren't drawing.
3155 S32 search_pos = mScrollbar->getDocPos();
3156 S32 num_lines = getLineCount();
3157 if (search_pos >= num_lines)return;
3158 S32 line_start = getLineStart(search_pos);
3159 F32 line_height = mGLFont->getLineHeight();
3160 F32 text_y = (F32)(mTextRect.mTop) - line_height;
3161
3162 F32 word_left = 0.f;
3163 F32 word_right = 0.f;
3164 F32 word_bottom = 0.f;
3165 BOOL word_visible = FALSE;
3166
3167 S32 line_end = 0;
3168 // Determine if the cursor is visible and if so what its coordinates are.
3169 while( (mTextRect.mBottom <= llround(text_y)) && (search_pos < num_lines))
3170 { 3168 {
3171 line_end = text_len + 1; 3169 S32 wstart = misspellLocations[i];
3172 S32 next_line = -1; 3170 S32 wend = misspellLocations[++i];
3173 3171 //start curor code mod
3174 if ((search_pos + 1) < num_lines) 3172 const LLWString &text = mWText;
3173 const S32 text_len = getLength();
3174 // Skip through the lines we aren't drawing.
3175 S32 search_pos = mScrollbar->getDocPos();
3176 S32 num_lines = getLineCount();
3177 if (search_pos >= num_lines)
3175 { 3178 {
3176 next_line = getLineStart(search_pos + 1); 3179 return;
3177 line_end = next_line - 1;
3178 } 3180 }
3179 const llwchar* line = text.c_str() + line_start; 3181 S32 line_start = getLineStart(search_pos);
3180 // Find the cursor and selection bounds 3182 F32 line_height = mGLFont->getLineHeight();
3181 if( line_start <= wstart && wend <= line_end ) 3183 F32 text_y = (F32)(mTextRect.mTop) - line_height;
3184
3185 F32 word_left = 0.f;
3186 F32 word_right = 0.f;
3187 F32 word_bottom = 0.f;
3188 BOOL word_visible = FALSE;
3189
3190 S32 line_end = 0;
3191 // Determine if the cursor is visible and if so what its coordinates are.
3192 while( (mTextRect.mBottom <= llround(text_y)) && (search_pos < num_lines))
3182 { 3193 {
3183 word_visible = TRUE; 3194 line_end = text_len + 1;
3184 word_left = (F32)mTextRect.mLeft + mGLFont->getWidthF32(line, 0, wstart - line_start, mAllowEmbeddedItems )-1.f; 3195 S32 next_line = -1;
3185 word_right = (F32)mTextRect.mLeft + mGLFont->getWidthF32(line, 0, wend - line_start, mAllowEmbeddedItems )+1.f; 3196
3186 word_bottom = text_y; 3197 if ((search_pos + 1) < num_lines)
3187 break; 3198 {
3199 next_line = getLineStart(search_pos + 1);
3200 line_end = next_line - 1;
3201 }
3202 const llwchar* line = text.c_str() + line_start;
3203 // Find the cursor and selection bounds
3204 if( line_start <= wstart && wend <= line_end )
3205 {
3206 word_visible = TRUE;
3207 word_left = (F32)mTextRect.mLeft + mGLFont->getWidthF32(line, 0, wstart - line_start, mAllowEmbeddedItems )-1.f;
3208 word_right = (F32)mTextRect.mLeft + mGLFont->getWidthF32(line, 0, wend - line_start, mAllowEmbeddedItems )+1.f;
3209 word_bottom = text_y;
3210 break;
3211 }
3212 // move down one line
3213 text_y -= line_height;
3214 line_start = next_line;
3215 search_pos++;
3188 } 3216 }
3189 // move down one line 3217 if (mShowLineNumbers)
3190 text_y -= line_height; 3218 {
3191 line_start = next_line; 3219 word_left += UI_TEXTEDITOR_LINE_NUMBER_MARGIN;
3192 search_pos++; 3220 word_right += UI_TEXTEDITOR_LINE_NUMBER_MARGIN;
3193 } 3221 }
3194 if(mShowLineNumbers) 3222 // Draw the cursor
3195 { 3223 if (word_visible)
3196 word_left += UI_TEXTEDITOR_LINE_NUMBER_MARGIN;
3197 word_right += UI_TEXTEDITOR_LINE_NUMBER_MARGIN;
3198 }
3199 // Draw the cursor
3200 if( word_visible )
3201 {
3202 //end cursos code mod
3203 gGL.color4ub(255,0,0,200);
3204 while(word_left<word_right)
3205 { 3224 {
3206 gl_line_2d(word_left,word_bottom-2,word_left+3,word_bottom+1); 3225 //end cursor code mod
3207 gl_line_2d(word_left+3,word_bottom+1,word_left+6,word_bottom-2); 3226 gGL.color4ub(255,0,0,200);
3208 word_left+=6; 3227 while (word_left<word_right)
3228 {
3229 gl_line_2d(word_left,word_bottom-2, word_left+3,word_bottom+1);
3230 gl_line_2d(word_left+3,word_bottom+1, word_left+6,word_bottom-2);
3231 word_left += 6;
3232 }
3209 } 3233 }
3210 } 3234 }
3211 } 3235 }
@@ -3214,8 +3238,7 @@ void LLTextEditor::drawMisspelled()
3214 3238
3215void LLTextEditor::drawCursor() 3239void LLTextEditor::drawCursor()
3216{ 3240{
3217 if( gFocusMgr.getKeyboardFocus() == this 3241 if (!mReadOnly && gFocusMgr.getKeyboardFocus() == this && gShowTextEditCursor)
3218 && gShowTextEditCursor && !mReadOnly)
3219 { 3242 {
3220 const LLWString &text = mWText; 3243 const LLWString &text = mWText;
3221 const S32 text_len = getLength(); 3244 const S32 text_len = getLength();
@@ -3696,10 +3719,7 @@ void LLTextEditor::draw()
3696 drawPreeditMarker(); 3719 drawPreeditMarker();
3697 drawText(); 3720 drawText();
3698 drawCursor(); 3721 drawCursor();
3699 if(!mShowLineNumbers || mOverRideAndShowMisspellings) 3722 drawMisspelled();
3700 {
3701 drawMisspelled();
3702 }
3703 resetSpellDirty(); 3723 resetSpellDirty();
3704 unbindEmbeddedChars(mGLFont); 3724 unbindEmbeddedChars(mGLFont);
3705 3725
@@ -4879,6 +4899,8 @@ void LLTextEditor::setTextEditorParameters(LLXMLNodePtr node)
4879 4899
4880 node->getAttributeBOOL("track_bottom", mTrackBottom); 4900 node->getAttributeBOOL("track_bottom", mTrackBottom);
4881 4901
4902 node->getAttributeBOOL("spell_check", mSpellCheckable);
4903
4882 LLColor4 color; 4904 LLColor4 color;
4883 if (LLUICtrlFactory::getAttributeColor(node,"cursor_color", color)) 4905 if (LLUICtrlFactory::getAttributeColor(node,"cursor_color", color))
4884 { 4906 {
diff --git a/linden/indra/llui/lltexteditor.h b/linden/indra/llui/lltexteditor.h
index 6b372d7..57a6bbd 100644
--- a/linden/indra/llui/lltexteditor.h
+++ b/linden/indra/llui/lltexteditor.h
@@ -229,7 +229,7 @@ public:
229 void setThumbColor( const LLColor4& color ); 229 void setThumbColor( const LLColor4& color );
230 void setHighlightColor( const LLColor4& color ); 230 void setHighlightColor( const LLColor4& color );
231 void setShadowColor( const LLColor4& color ); 231 void setShadowColor( const LLColor4& color );
232 void setOverRideAndShowMisspellings(BOOL b){ mOverRideAndShowMisspellings =b;} 232 void setSpellCheckable(BOOL b) { mSpellCheckable = b; }
233 233
234 // Hacky methods to make it into a word-wrapping, potentially scrolling, 234 // Hacky methods to make it into a word-wrapping, potentially scrolling,
235 // read-only text box. 235 // read-only text box.
@@ -526,7 +526,8 @@ private:
526 S32 spellStart; 526 S32 spellStart;
527 S32 spellEnd; 527 S32 spellEnd;
528 std::vector<S32> misspellLocations; // where all the mispelled words are 528 std::vector<S32> misspellLocations; // where all the mispelled words are
529 BOOL mOverRideAndShowMisspellings; 529 BOOL mSpellCheckable; // set in xui as "spell_check". Default value for a field
530 BOOL mShowMisspellings; // show misspellings as highlighted (initialized in the ctor)
530 531
531 S32 mMaxTextByteLength; // Maximum length mText is allowed to be in bytes 532 S32 mMaxTextByteLength; // Maximum length mText is allowed to be in bytes
532 533
diff --git a/linden/indra/newview/app_settings/dictionaries/en_sl.dic b/linden/indra/newview/app_settings/dictionaries/en_sl.dic
index c5de03f..f37b60d 100644
--- a/linden/indra/newview/app_settings/dictionaries/en_sl.dic
+++ b/linden/indra/newview/app_settings/dictionaries/en_sl.dic
@@ -1719,6 +1719,8 @@ login
1719logins 1719logins
1720logout 1720logout
1721lscript 1721lscript
1722lsl
1723lsl2
1722mac_crash_logger 1724mac_crash_logger
1723mac_updater 1725mac_updater
1724mapto 1726mapto
diff --git a/linden/indra/newview/lggdicdownload.cpp b/linden/indra/newview/lggdicdownload.cpp
index 5b8b13a..8cd9795 100644
--- a/linden/indra/newview/lggdicdownload.cpp
+++ b/linden/indra/newview/lggdicdownload.cpp
@@ -49,10 +49,11 @@
49#include "llbufferstream.h" 49#include "llbufferstream.h"
50 50
51class lggDicDownloadFloater; 51class lggDicDownloadFloater;
52
52class EmeraldDicDownloader : public LLHTTPClient::Responder 53class EmeraldDicDownloader : public LLHTTPClient::Responder
53{ 54{
54public: 55public:
55 EmeraldDicDownloader(lggDicDownloadFloater * spanel,std::string sname); 56 EmeraldDicDownloader(lggDicDownloadFloater* spanel, std::string sname);
56 ~EmeraldDicDownloader() { } 57 ~EmeraldDicDownloader() { }
57 void completedRaw( 58 void completedRaw(
58 U32 status, 59 U32 status,
@@ -77,9 +78,11 @@ public:
77 std::vector<std::string> lNames; 78 std::vector<std::string> lNames;
78 LLPrefsAdvanced * empanel; 79 LLPrefsAdvanced * empanel;
79}; 80};
81
80lggDicDownloadFloater::~lggDicDownloadFloater() 82lggDicDownloadFloater::~lggDicDownloadFloater()
81{ 83{
82} 84}
85
83lggDicDownloadFloater::lggDicDownloadFloater(const LLSD& seed) 86lggDicDownloadFloater::lggDicDownloadFloater(const LLSD& seed)
84{ 87{
85 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_dictionaries.xml"); 88 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_dictionaries.xml");
@@ -89,96 +92,96 @@ lggDicDownloadFloater::lggDicDownloadFloater(const LLSD& seed)
89 { 92 {
90 center(); 93 center();
91 } 94 }
92
93} 95}
94 96
95BOOL lggDicDownloadFloater::postBuild(void) 97BOOL lggDicDownloadFloater::postBuild(void)
96{ 98{
97 childSetAction("Emerald_dic_download",onClickDownload,this); 99 childSetAction("Emerald_dic_download", onClickDownload, this);
98 return true; 100 return true;
99} 101}
100void lggDicDownloadFloater::setData(std::vector<std::string> shortNames, std::vector<std::string> longNames, void * data) 102
103void lggDicDownloadFloater::setData(std::vector<std::string> shortNames, std::vector<std::string> longNames, void* data)
101{ 104{
102 sNames=shortNames; 105 sNames = shortNames;
103 lNames=longNames; 106 lNames = longNames;
104 empanel = (LLPrefsAdvanced*)data; 107 empanel = (LLPrefsAdvanced*)data;
105 108
106 LLComboBox* comboBox = getChild<LLComboBox>("Emerald_combo_dics"); 109 LLComboBox* comboBox = getChild<LLComboBox>("Emerald_combo_dics");
107 if(comboBox != NULL) 110 if (comboBox != NULL)
108 { 111 {
109 comboBox->removeall(); 112 comboBox->removeall();
110 comboBox->add(""); 113 for (int i = 0; i < (int)lNames.size(); i++)
111 for(int i = 0; i < (int)lNames.size(); i++)
112 { 114 {
113 comboBox->add(lNames[i]); 115 comboBox->add(lNames[i], ADD_BOTTOM);
114 } 116 }
115 comboBox->setCurrentByIndex(0); 117 comboBox->setCurrentByIndex(0);
118 comboBox->add("", ADD_BOTTOM);
116 } 119 }
117} 120}
121
118void lggDicDownloadFloater::onClickDownload(void* data) 122void lggDicDownloadFloater::onClickDownload(void* data)
119{ 123{
120 lggDicDownloadFloater* self = (lggDicDownloadFloater*)data; 124 lggDicDownloadFloater* self = (lggDicDownloadFloater*)data;
121 if(self) 125 if (self)
122 { 126 {
123 //std::string selection = self->childGetValue("Emerald_combo_dics").asString(); 127 //std::string selection = self->childGetValue("Emerald_combo_dics").asString();
124 LLComboBox* comboBox = self->getChild<LLComboBox>("Emerald_combo_dics"); 128 LLComboBox* comboBox = self->getChild<LLComboBox>("Emerald_combo_dics");
125 if(comboBox != NULL) 129 if (comboBox != NULL)
126 { 130 {
127 int index = comboBox->getCurrentIndex(); 131 if (!comboBox->getSelectedItemLabel().empty())
128 if(index!=0)
129 { 132 {
130 index--; 133 std::string newDict(self->sNames[comboBox->getCurrentIndex()]);
131 std::string newDict(self->sNames[index]);
132 LLHTTPClient::get(gSavedSettings.getString("DicDownloadBaseURL")+newDict+".aff", new EmeraldDicDownloader(self,newDict+".aff")); 134 LLHTTPClient::get(gSavedSettings.getString("DicDownloadBaseURL")+newDict+".aff", new EmeraldDicDownloader(self,newDict+".aff"));
133 LLHTTPClient::get(gSavedSettings.getString("DicDownloadBaseURL")+newDict+".dic", new EmeraldDicDownloader(NULL,newDict+".dic")); 135 LLHTTPClient::get(gSavedSettings.getString("DicDownloadBaseURL")+newDict+".dic", new EmeraldDicDownloader(NULL,newDict+".dic"));
134 136
135 LLButton* butt = self->getChild<LLButton>("Emerald_dic_download"); 137 LLButton* button = self->getChild<LLButton>("Emerald_dic_download");
136 if(butt) 138 if (button)
137 { 139 {
138 butt->setLabel(LLStringExplicit("Downloading... Please Wait")); 140 // TODO: move this to xml
139 butt->setEnabled(FALSE); 141 button->setLabel(LLStringExplicit("Downloading... Please Wait"));
142 button->setEnabled(FALSE);
140 } 143 }
141
142 } 144 }
143 } 145 }
144 } 146 }
145
146
147} 147}
148 148
149void LggDicDownload::show(BOOL showin, std::vector<std::string> shortNames, std::vector<std::string> longNames, void * data) 149void LggDicDownload::show(BOOL showin, std::vector<std::string> shortNames, std::vector<std::string> longNames, void * data)
150{ 150{
151 if(showin) 151 if (showin)
152 { 152 {
153 lggDicDownloadFloater* dic_floater = lggDicDownloadFloater::showInstance(); 153 lggDicDownloadFloater* dic_floater = lggDicDownloadFloater::showInstance();
154 dic_floater->setData(shortNames,longNames,data); 154 dic_floater->setData(shortNames,longNames,data);
155 } 155 }
156} 156}
157EmeraldDicDownloader::EmeraldDicDownloader(lggDicDownloadFloater* spanel, std::string sname): 157
158panel(spanel),name(sname){} 158EmeraldDicDownloader::EmeraldDicDownloader(lggDicDownloadFloater* spanel, std::string sname)
159 :
160 panel(spanel),
161 name(sname)
162{
163}
159 164
160 165
161void EmeraldDicDownloader::completedRaw(U32 status, const std::string& reason, const LLChannelDescriptors& channels, const LLIOPipe::buffer_ptr_t& buffer) 166void EmeraldDicDownloader::completedRaw(U32 status, const std::string& reason, const LLChannelDescriptors& channels, const LLIOPipe::buffer_ptr_t& buffer)
162{ 167{
163 if(status < 200 || status >= 300) 168 if (status < 200 || status >= 300)
164 { 169 {
165 return; 170 return;
166 } 171 }
167 LLBufferStream istr(channels, buffer.get()); 172 LLBufferStream istr(channels, buffer.get());
168 std::string dicpath(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "dictionaries", 173 std::string dicpath(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "dictionaries", name.c_str()));
169 name.c_str())); 174
170
171
172 llofstream ostr(dicpath, std::ios::binary); 175 llofstream ostr(dicpath, std::ios::binary);
173 176
174 while(istr.good() && ostr.good()) 177 while (istr.good() && ostr.good())
178 {
175 ostr << istr.rdbuf(); 179 ostr << istr.rdbuf();
180 }
176 ostr.close(); 181 ostr.close();
177 if(panel) 182 if (panel)
178 { 183 {
179 panel->empanel->refresh(); 184 panel->empanel->refresh();
180 panel->close(); 185 panel->close();
181 } 186 }
182
183
184} 187}
diff --git a/linden/indra/newview/lgghunspell_wrapper.cpp b/linden/indra/newview/lgghunspell_wrapper.cpp
index 5879bac..f800043 100644
--- a/linden/indra/newview/lgghunspell_wrapper.cpp
+++ b/linden/indra/newview/lgghunspell_wrapper.cpp
@@ -468,53 +468,64 @@ static char * languageCodesraw[]={
468}; 468};
469//#define LANGUAGE_CODES_RAW_SIZE ((__LINE__ - 1 - LANGUAGE_CODES_RAW_START_LINE) * 2) 469//#define LANGUAGE_CODES_RAW_SIZE ((__LINE__ - 1 - LANGUAGE_CODES_RAW_START_LINE) * 2)
470#define LANGUAGE_CODES_RAW_SIZE 368 470#define LANGUAGE_CODES_RAW_SIZE 368
471
471lggHunSpell_Wrapper::lggHunSpell_Wrapper() 472lggHunSpell_Wrapper::lggHunSpell_Wrapper()
473 :
474 mSpellCheckHighlight(false)
472{ 475{
473 highlightInRed=false;
474 //languageCodes(begin(languageCodesraw), end(languageCodesraw)); 476 //languageCodes(begin(languageCodesraw), end(languageCodesraw));
475} 477}
476lggHunSpell_Wrapper::~lggHunSpell_Wrapper(){} 478
479lggHunSpell_Wrapper::~lggHunSpell_Wrapper()
480{
481}
482
477std::string lggHunSpell_Wrapper::getCorrectPath(std::string file) 483std::string lggHunSpell_Wrapper::getCorrectPath(std::string file)
478{ 484{
479 //finds out if it is in user dir, if not, takes it from app dir 485 //finds out if it is in user dir, if not, takes it from app dir
480 std::string dicpath1(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "dictionaries", file).c_str()); 486 std::string dicpath1(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "dictionaries", file).c_str());
481 if(!gDirUtilp->fileExists(dicpath1)) 487 if (!gDirUtilp->fileExists(dicpath1))
488 {
482 dicpath1=gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "dictionaries", file).c_str(); 489 dicpath1=gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "dictionaries", file).c_str();
483 490 }
484 return dicpath1; 491 return dicpath1;
485} 492}
493
486void lggHunSpell_Wrapper::setNewDictionary(std::string newDict) 494void lggHunSpell_Wrapper::setNewDictionary(std::string newDict)
487{ 495{
488 496
489 llinfos << "Setting new base dictionary long name is-> " << newDict.c_str() << llendl; 497 llinfos << "Setting new base dictionary long name is-> " << newDict.c_str() << llendl;
490 498
491 currentBaseDic=newDict; 499 currentBaseDic = newDict;
492 500
493 //expecting a full name comming in 501 //expecting a full name comming in
494 newDict = fullName2DictName(newDict); 502 newDict = fullName2DictName(newDict);
495 503
496 if(myHunspell)delete myHunspell; 504 if (myHunspell)
505 {
506 delete myHunspell;
507 }
497 508
498 std::string dicaffpath=getCorrectPath(newDict+".aff"); 509 std::string dicaffpath = getCorrectPath(newDict+".aff");
499 std::string dicdicpath=getCorrectPath(newDict+".dic"); 510 std::string dicdicpath = getCorrectPath(newDict+".dic");
500 511
501 llinfos << "Setting new base dictionary -> " << dicaffpath.c_str() << llendl; 512 llinfos << "Setting new base dictionary -> " << dicaffpath.c_str() << llendl;
502 513
503 myHunspell = new Hunspell(dicaffpath.c_str(),dicdicpath.c_str()); 514 myHunspell = new Hunspell(dicaffpath.c_str(), dicdicpath.c_str());
504 llinfos << "Adding custom dictionary " << llendl; 515 llinfos << "Adding custom dictionary " << llendl;
505 createCustomDic(); 516 createCustomDic();
506 addDictionary("custom"); 517 addDictionary("custom");
507 std::vector<std::string> toInstall = getInstalledDicts(); 518 std::vector<std::string> toInstall = getInstalledDicts();
508 for(int i =0;i<(int)toInstall.size();i++) 519 for (int i = 0; i < (int)toInstall.size(); i++)
520 {
509 addDictionary(toInstall[i]); 521 addDictionary(toInstall[i]);
510 522 }
511
512} 523}
524
513void lggHunSpell_Wrapper::createCustomDic() 525void lggHunSpell_Wrapper::createCustomDic()
514{ 526{
515 std::string filename(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, 527 std::string filename(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "dictionaries", "custom.dic"));
516 "dictionaries", "custom.dic")); 528 if (!gDirUtilp->fileExists(filename))
517 if(!gDirUtilp->fileExists(filename))
518 { 529 {
519 llofstream export_file; 530 llofstream export_file;
520 export_file.open(filename); 531 export_file.open(filename);
@@ -523,49 +534,67 @@ void lggHunSpell_Wrapper::createCustomDic()
523 export_file.close(); 534 export_file.close();
524 } 535 }
525} 536}
537
526void lggHunSpell_Wrapper::addWordToCustomDictionary(std::string wordToAdd) 538void lggHunSpell_Wrapper::addWordToCustomDictionary(std::string wordToAdd)
527{ 539{
528 if(!myHunspell)return; 540 if (!myHunspell)
541 {
542 return;
543 }
544
529 myHunspell->add(wordToAdd.c_str()); 545 myHunspell->add(wordToAdd.c_str());
530 std::string filename(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "dictionaries", "custom.dic")); 546 std::string filename(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "dictionaries", "custom.dic"));
531 std::vector<std::string> lines; 547 std::vector<std::string> lines;
532 if(gDirUtilp->fileExists(filename)) 548 if (gDirUtilp->fileExists(filename))
533 { 549 {
534 //get words already there.. 550 //get words already there..
535 llifstream importer(filename); 551 llifstream importer(filename);
536 std::string line; 552 std::string line;
537 if(getline( importer, line ))//ignored the size 553 if (getline( importer, line ))//ignored the size
538 { 554 {
539 while( getline( importer, line ) ) lines.push_back(line); 555 while ( getline( importer, line ) ) lines.push_back(line);
540 } 556 }
541 importer.close(); 557 importer.close();
542 } 558 }
559
543 llofstream export_file; 560 llofstream export_file;
544 export_file.open(filename); 561 export_file.open(filename);
545 std::string sizePart(llformat("%i",(int)(lines.size()+1))+"\n"); 562 std::string sizePart(llformat("%i", (int)(lines.size()+1)) + "\n");
546 export_file.write(sizePart.c_str(),sizePart.length()); 563 export_file.write(sizePart.c_str(), sizePart.length());
547 for(int i=0;i<(int)lines.size();i++) 564 for (int i = 0; i < (int)lines.size() ;i++)
565 {
548 export_file.write(std::string(lines[i]+"\n").c_str(),lines[i].length()+1); 566 export_file.write(std::string(lines[i]+"\n").c_str(),lines[i].length()+1);
567 }
549 //LLStringUtil::toLower(wordToAdd); 568 //LLStringUtil::toLower(wordToAdd);
550 wordToAdd=wordToAdd+std::string("\n"); 569 wordToAdd = wordToAdd+std::string("\n");
551 export_file.write(wordToAdd.c_str(),wordToAdd.length()); 570 export_file.write(wordToAdd.c_str(), wordToAdd.length());
552 //export_file << std::hex << 10 ; 571 //export_file << std::hex << 10 ;
553 export_file.close(); 572 export_file.close();
554} 573}
574
555BOOL lggHunSpell_Wrapper::isSpelledRight(std::string wordToCheck) 575BOOL lggHunSpell_Wrapper::isSpelledRight(std::string wordToCheck)
556{ 576{
557 if(!myHunspell)return TRUE; 577 if (!myHunspell || wordToCheck.length() < 3)
558 if(wordToCheck.length()<3)return TRUE; 578 {
579 return TRUE;
580 }
559 return myHunspell->spell(wordToCheck.c_str()); 581 return myHunspell->spell(wordToCheck.c_str());
560} 582}
583
561std::vector<std::string> lggHunSpell_Wrapper::getSuggestionList(std::string badWord) 584std::vector<std::string> lggHunSpell_Wrapper::getSuggestionList(std::string badWord)
562{ 585{
563 std::vector<std::string> toReturn; 586 std::vector<std::string> toReturn;
564 if(!myHunspell)return toReturn; 587 if (!myHunspell)
565 char ** suggestionList; 588 {
589 return toReturn;
590 }
591
592 char** suggestionList;
566 int numberOfSuggestions = myHunspell->suggest(&suggestionList, badWord.c_str()); 593 int numberOfSuggestions = myHunspell->suggest(&suggestionList, badWord.c_str());
567 if(numberOfSuggestions <= 0) 594 if (numberOfSuggestions <= 0)
568 return toReturn; 595 {
596 return toReturn;
597 }
569 for (int i = 0; i < numberOfSuggestions; i++) 598 for (int i = 0; i < numberOfSuggestions; i++)
570 { 599 {
571 std::string tempSugg(suggestionList[i]); 600 std::string tempSugg(suggestionList[i]);
@@ -574,14 +603,16 @@ std::vector<std::string> lggHunSpell_Wrapper::getSuggestionList(std::string badW
574 myHunspell->free_list(&suggestionList,numberOfSuggestions); 603 myHunspell->free_list(&suggestionList,numberOfSuggestions);
575 return toReturn; 604 return toReturn;
576} 605}
606
577void lggHunSpell_Wrapper::debugTest(std::string testWord) 607void lggHunSpell_Wrapper::debugTest(std::string testWord)
578{ 608{
579 llinfos << "Testing to see if " << testWord.c_str() << " is spelled correct" << llendl; 609 llinfos << "Testing to see if " << testWord.c_str() << " is spelled correct" << llendl;
580 610
581 if( isSpelledRight(testWord)) 611 if (isSpelledRight(testWord))
582 { 612 {
583 llinfos << testWord.c_str() << " is spelled correctly" << llendl; 613 llinfos << testWord.c_str() << " is spelled correctly" << llendl;
584 }else 614 }
615 else
585 { 616 {
586 llinfos << testWord.c_str() << " is not spelled correctly, getting suggestions" << llendl; 617 llinfos << testWord.c_str() << " is not spelled correctly, getting suggestions" << llendl;
587 std::vector<std::string> suggList; 618 std::vector<std::string> suggList;
@@ -589,148 +620,167 @@ void lggHunSpell_Wrapper::debugTest(std::string testWord)
589 suggList = getSuggestionList(testWord); 620 suggList = getSuggestionList(testWord);
590 llinfos << "Got suggestions.. " << llendl; 621 llinfos << "Got suggestions.. " << llendl;
591 622
592 for(int i = 0; i<(int)suggList.size();i++) 623 for (int i = 0; i < (int)suggList.size(); i++)
593 { 624 {
594 llinfos << "Suggestion for " << testWord.c_str() << ":" << suggList[i].c_str() << llendl; 625 llinfos << "Suggestion for " << testWord.c_str() << ":" << suggList[i].c_str() << llendl;
595 } 626 }
596
597 } 627 }
598
599} 628}
629
600void lggHunSpell_Wrapper::initSettings() 630void lggHunSpell_Wrapper::initSettings()
601{ 631{
602 glggHunSpell = new lggHunSpell_Wrapper(); 632 glggHunSpell = new lggHunSpell_Wrapper();
603 glggHunSpell->processSettings(); 633 glggHunSpell->processSettings();
604} 634}
635
605void lggHunSpell_Wrapper::processSettings() 636void lggHunSpell_Wrapper::processSettings()
606{ 637{
607 //expects everything to already be in saved settings 638 //expects everything to already be in saved settings
608 //this will also reload and read the installed dicts 639 //this will also reload and read the installed dicts
609 setNewDictionary(gSavedSettings.getString("EmeraldSpellBase")); 640 setNewDictionary(gSavedSettings.getString("EmeraldSpellBase"));
610 highlightInRed= gSavedSettings.getBOOL("EmeraldSpellDisplay"); 641 mSpellCheckHighlight = gSavedSettings.getBOOL("EmeraldSpellDisplay");
611 642
612} 643}
644
613void lggHunSpell_Wrapper::addDictionary(std::string additionalDictionary) 645void lggHunSpell_Wrapper::addDictionary(std::string additionalDictionary)
614{ 646{
615 if(!myHunspell)return; 647 if (!myHunspell || additionalDictionary.empty())
616 if(additionalDictionary=="")return; 648 {
649 return;
650 }
651
617 //expecting a full name here 652 //expecting a full name here
618 std::string dicpath=getCorrectPath(fullName2DictName(additionalDictionary)+".dic"); 653 std::string dicpath = getCorrectPath(fullName2DictName(additionalDictionary)+".dic");
619 if(gDirUtilp->fileExists(dicpath)) 654 if (gDirUtilp->fileExists(dicpath))
620 { 655 {
621 llinfos << "Adding additional dictionary -> " << dicpath.c_str() << llendl; 656 llinfos << "Adding additional dictionary -> " << dicpath.c_str() << llendl;
622 myHunspell->add_dic(dicpath.c_str()); 657 myHunspell->add_dic(dicpath.c_str());
623 } 658 }
624} 659}
660
625std::string lggHunSpell_Wrapper::dictName2FullName(std::string dictName) 661std::string lggHunSpell_Wrapper::dictName2FullName(std::string dictName)
626{ 662{
627 if(dictName==std::string(""))return std::string(""); 663 if (dictName.empty())
628 std::string countryCode=""; 664 {
629 std::string languageCode=""; 665 return dictName;
666 }
667
668 std::string countryCode("");
669 std::string languageCode("");
670
630 //remove extension 671 //remove extension
631 dictName = dictName.substr(0,dictName.find(".")); 672 dictName = dictName.substr(0,dictName.find("."));
673
632 //break it up by - or _ 674 //break it up by - or _
633 S32 breakPoint = dictName.find("-"); 675 S32 breakPoint = dictName.find("-");
634 if(breakPoint==std::string::npos) 676 if (breakPoint == std::string::npos)
677 {
635 breakPoint = dictName.find("_"); 678 breakPoint = dictName.find("_");
636 if(breakPoint==std::string::npos) 679 }
680 if (breakPoint == std::string::npos)
637 { 681 {
638 //no country code given 682 //no country code given
639 languageCode=dictName; 683 languageCode = dictName;
640 }else 684 }
685 else
641 { 686 {
642 languageCode=dictName.substr(0,breakPoint); 687 languageCode = dictName.substr(0,breakPoint);
643 countryCode=dictName.substr(breakPoint+1); 688 countryCode = dictName.substr(breakPoint+1);
644 } 689 }
690
645 //get long language code 691 //get long language code
646 for(int i =0;i<LANGUAGE_CODES_RAW_SIZE;i++) 692 for (int i = 0; i<LANGUAGE_CODES_RAW_SIZE; i++)
647 { 693 {
648 if(0==LLStringUtil::compareInsensitive(languageCode,std::string(languageCodesraw[i]))) 694 if (0 == LLStringUtil::compareInsensitive(languageCode, std::string(languageCodesraw[i])))
649 { 695 {
650 languageCode=languageCodesraw[i+1]; 696 languageCode = languageCodesraw[i+1];
651 break; 697 break;
652 } 698 }
653 } 699 }
700
654 //get long country code 701 //get long country code
655 if(countryCode!="") 702 if (!countryCode.empty())
656 { 703 {
657 for(int i =0;i<COUNTRY_CODES_RAW_SIZE;i++) 704 for (int i =0; i<COUNTRY_CODES_RAW_SIZE; i++)
658 { 705 {
659 //llinfos << i << llendl; 706 //llinfos << i << llendl;
660 if(0==LLStringUtil::compareInsensitive(countryCode,std::string(countryCodesraw[i]))) 707 if (0 == LLStringUtil::compareInsensitive(countryCode, std::string(countryCodesraw[i])))
661 { 708 {
662 countryCode=countryCodesraw[i+1]; 709 countryCode = countryCodesraw[i+1];
663 break; 710 break;
664 } 711 }
665 } 712 }
666 countryCode=" ("+countryCode+")"; 713 countryCode = " (" + countryCode + ")";
667 } 714 }
668 715
669 return std::string(languageCode+countryCode); 716 return std::string(languageCode+countryCode);
670} 717}
718
671std::string lggHunSpell_Wrapper::fullName2DictName(std::string fullName) 719std::string lggHunSpell_Wrapper::fullName2DictName(std::string fullName)
672{ 720{
673 std::string countryCode(""); 721 std::string countryCode("");
674 std::string languageCode(""); 722 std::string languageCode("");
675 S32 breakPoint = fullName.find(" ("); 723 S32 breakPoint = fullName.find(" (");
676 if(breakPoint==std::string::npos) 724 if (breakPoint == std::string::npos)
677 { 725 {
678 languageCode=fullName; 726 languageCode = fullName;
679 }else 727 }
728 else
680 { 729 {
681 languageCode=fullName.substr(0,breakPoint); 730 languageCode = fullName.substr(0, breakPoint);
682 countryCode=fullName.substr(breakPoint+2,fullName.length()-3-breakPoint); 731 countryCode = fullName.substr(breakPoint+2, fullName.length()-3-breakPoint);
683 } 732 }
684 //get long language code 733 //get long language code
685 for(int i =1;i<LANGUAGE_CODES_RAW_SIZE;i+=2) 734 for (int i = 1; i<LANGUAGE_CODES_RAW_SIZE; i+=2)
686 { 735 {
687 //llinfos << i << llendl; 736 //llinfos << i << llendl;
688 if(0==LLStringUtil::compareInsensitive(languageCode,std::string(languageCodesraw[i]))) 737 if (0 == LLStringUtil::compareInsensitive(languageCode, std::string(languageCodesraw[i])))
689 { 738 {
690 languageCode=std::string(languageCodesraw[i-1]); 739 languageCode = std::string(languageCodesraw[i-1]);
691 break; 740 break;
692 } 741 }
693 } 742 }
694 //get long country code 743 //get long country code
695 if(countryCode!="") 744 std::string toReturn = languageCode;
696 for(int i =1;i<COUNTRY_CODES_RAW_SIZE;i+=2) 745 if (!countryCode.empty())
746 {
747 for (int i = 1; i<COUNTRY_CODES_RAW_SIZE; i+=2)
697 { 748 {
698 //llinfos << i << " comparing " <<countryCode<<" and "<<std::string(countryCodesraw[i]).c_str()<< llendl; 749 //llinfos << i << " comparing " <<countryCode<<" and "<<std::string(countryCodesraw[i]).c_str()<< llendl;
699 if(0==LLStringUtil::compareInsensitive(countryCode,std::string(countryCodesraw[i]))) 750 if (0 == LLStringUtil::compareInsensitive(countryCode, std::string(countryCodesraw[i])))
700 { 751 {
701 countryCode=std::string(countryCodesraw[i-1]); 752 countryCode = std::string(countryCodesraw[i-1]);
702 break; 753 break;
703 } 754 }
704 } 755 }
705 std::string toReturn = languageCode; 756 toReturn += "_" + countryCode;
706 if(countryCode!="") 757 }
707 { 758
708 toReturn+="_"+countryCode; 759 LLStringUtil::toLower(toReturn);
709 } 760 return toReturn;
710 LLStringUtil::toLower(toReturn);
711 return toReturn;
712} 761}
762
713std::vector <std::string> lggHunSpell_Wrapper::getDicts() 763std::vector <std::string> lggHunSpell_Wrapper::getDicts()
714{ 764{
715 std::vector<std::string> names; 765 std::vector<std::string> names;
716 std::string path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "dictionaries", "")); 766 std::string path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "dictionaries", ""));
717 bool found = true; 767 bool found = true;
718 while(found) 768 while (found)
719 { 769 {
720 std::string name; 770 std::string name;
721 found = gDirUtilp->getNextFileInDir(path_name, "*.aff", name, false); 771 found = gDirUtilp->getNextFileInDir(path_name, "*.aff", name, false);
722 if(found) 772 if (found)
723 { 773 {
724 names.push_back(dictName2FullName(name)); 774 names.push_back(dictName2FullName(name));
725 } 775 }
726 } 776 }
727 path_name=gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "dictionaries", ""); 777 path_name = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "dictionaries", "");
728 found=true; 778 found = true;
729 while(found) 779 while (found)
730 { 780 {
731 std::string name; 781 std::string name;
732 found = gDirUtilp->getNextFileInDir(path_name, "*.aff", name, false); 782 found = gDirUtilp->getNextFileInDir(path_name, "*.aff", name, false);
733 if(found) 783 if (found)
734 { 784 {
735 names.push_back(dictName2FullName(name)); 785 names.push_back(dictName2FullName(name));
736 } 786 }
@@ -738,123 +788,159 @@ std::vector <std::string> lggHunSpell_Wrapper::getDicts()
738 788
739 return names; 789 return names;
740} 790}
791
741std::vector <std::string> lggHunSpell_Wrapper::getExtraDicts() 792std::vector <std::string> lggHunSpell_Wrapper::getExtraDicts()
742{ 793{
743 std::vector<std::string> names; 794 std::vector<std::string> names;
744 std::string path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "dictionaries", "")); 795 std::string path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "dictionaries", ""));
745 bool found = true; 796 bool found = true;
746 while(found) 797 while (found)
747 { 798 {
748 std::string name; 799 std::string name;
749 found = gDirUtilp->getNextFileInDir(path_name, "*.dic", name, false); 800 found = gDirUtilp->getNextFileInDir(path_name, "*.dic", name, false);
750 if(found) 801 if (found)
751 { 802 {
752 names.push_back(dictName2FullName(name)); 803 names.push_back(dictName2FullName(name));
753 } 804 }
754 } 805 }
755 path_name=gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "dictionaries", ""); 806 path_name = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "dictionaries", "");
756 found=true; 807 found = true;
757 while(found) 808 while (found)
758 { 809 {
759 std::string name; 810 std::string name;
760 found = gDirUtilp->getNextFileInDir(path_name, "*.dic", name, false); 811 found = gDirUtilp->getNextFileInDir(path_name, "*.dic", name, false);
761 if(found) 812 if (found)
762 { 813 {
763 names.push_back(dictName2FullName(name)); 814 names.push_back(dictName2FullName(name));
764 } 815 }
765 } 816 }
766 return names; 817 return names;
767} 818}
819
768std::vector<std::string> lggHunSpell_Wrapper::getInstalledDicts() 820std::vector<std::string> lggHunSpell_Wrapper::getInstalledDicts()
769{ 821{
770 std::vector<std::string> toReturn; 822 std::vector<std::string> toReturn;
771 //expecting short names to be stored... 823 //expecting short names to be stored...
772 std::vector<std::string> shortNames = CSV2VEC(gSavedSettings.getString("EmeraldSpellInstalled")); 824 std::vector<std::string> shortNames = CSV2VEC(gSavedSettings.getString("EmeraldSpellInstalled"));
773 for(int i =0;i<(int)shortNames.size();i++) 825 for (int i =0; i < (int)shortNames.size(); i++)
826 {
774 toReturn.push_back(dictName2FullName(shortNames[i])); 827 toReturn.push_back(dictName2FullName(shortNames[i]));
828 }
775 return toReturn; 829 return toReturn;
776} 830}
831
777std::vector<std::string> lggHunSpell_Wrapper::getAvailDicts() 832std::vector<std::string> lggHunSpell_Wrapper::getAvailDicts()
778{ 833{
779 std::vector<std::string> toReturn; 834 std::vector<std::string> toReturn;
780 std::vector<std::string> dics = getExtraDicts(); 835 std::vector<std::string> dics = getExtraDicts();
781 std::vector<std::string> installedDics = getInstalledDicts(); 836 std::vector<std::string> installedDics = getInstalledDicts();
782 for(int i =0;i<(int)dics.size();i++) 837 for (int i = 0; i < (int)dics.size(); i++)
783 { 838 {
784 bool found = false; 839 bool found = false;
785 for(int j=0;j<(int)installedDics.size();j++) 840 for (int j = 0; j < (int)installedDics.size(); j++)
841 {
842 if (0 == LLStringUtil::compareInsensitive(dics[i], installedDics[j]))
843 {
844 found = true;//this dic is already installed
845 }
846 }
847 if (0 == LLStringUtil::compareInsensitive(dics[i], currentBaseDic))
786 { 848 {
787 if(0==LLStringUtil::compareInsensitive(dics[i],installedDics[j])) 849 found = true;
788 found=true;//this dic is already installed 850 }
851 if (0 == LLStringUtil::compareInsensitive(dics[i], "Emerald (CUSTOM)"))
852 {
853 found = true;
854 }
855 if (!found)
856 {
857 toReturn.push_back(dics[i]);
789 } 858 }
790 if(0==LLStringUtil::compareInsensitive(dics[i],currentBaseDic))
791 found=true;
792 if(0==LLStringUtil::compareInsensitive(dics[i],"Emerald (CUSTOM)"))
793 found=true;
794 if(!found)toReturn.push_back(dics[i]);
795 } 859 }
796 return toReturn; 860 return toReturn;
797} 861}
862
798std::vector<std::string> lggHunSpell_Wrapper::CSV2VEC(std::string csv) 863std::vector<std::string> lggHunSpell_Wrapper::CSV2VEC(std::string csv)
799{ 864{
800 std::vector<std::string> toReturn; 865 std::vector<std::string> toReturn;
801 boost::regex re(","); 866 boost::regex re(",");
802 boost::sregex_token_iterator i(csv.begin(), csv.end(), re, -1); 867 boost::sregex_token_iterator i(csv.begin(), csv.end(), re, -1);
803 boost::sregex_token_iterator j; 868 boost::sregex_token_iterator j;
804 while(i != j) 869 while (i != j)
870 {
805 toReturn.push_back(*i++); 871 toReturn.push_back(*i++);
872 }
806 return toReturn; 873 return toReturn;
807} 874}
875
808std::string lggHunSpell_Wrapper::VEC2CSV(std::vector<std::string> vec) 876std::string lggHunSpell_Wrapper::VEC2CSV(std::vector<std::string> vec)
809{ 877{
810 std::string toReturn=""; 878 std::string toReturn("");
811 if(vec.size()<1)return toReturn; 879 if (vec.size() < 1)
812 for(int i = 0;i<(int)vec.size();i++) 880 {
813 toReturn+=vec[i]+","; 881 return toReturn;
882 }
883
884 for (int i = 0;i < (int)vec.size() ;i++)
885 {
886 toReturn += vec[i] + ",";
887 }
814 return toReturn.erase(toReturn.length()-1); 888 return toReturn.erase(toReturn.length()-1);
815} 889}
890
816void lggHunSpell_Wrapper::addButton(std::string selection) 891void lggHunSpell_Wrapper::addButton(std::string selection)
817{ 892{
818 if(selection=="")return; 893 if (selection.empty())
894 {
895 return;
896 }
819 addDictionary(selection); 897 addDictionary(selection);
820 std::vector<std::string> alreadyInstalled = CSV2VEC(gSavedSettings.getString("EmeraldSpellInstalled")); 898 std::vector<std::string> alreadyInstalled = CSV2VEC(gSavedSettings.getString("EmeraldSpellInstalled"));
821 alreadyInstalled.push_back(fullName2DictName(selection)); 899 alreadyInstalled.push_back(fullName2DictName(selection));
822 gSavedSettings.setString("EmeraldSpellInstalled",VEC2CSV(alreadyInstalled)); 900 gSavedSettings.setString("EmeraldSpellInstalled", VEC2CSV(alreadyInstalled));
823} 901}
902
824void lggHunSpell_Wrapper::removeButton(std::string selection) 903void lggHunSpell_Wrapper::removeButton(std::string selection)
825{ 904{
826 if(selection=="")return; 905 if (selection.empty())
906 {
907 return;
908 }
827 std::vector<std::string> newInstalledDics; 909 std::vector<std::string> newInstalledDics;
828 std::vector<std::string> currentlyInstalled = getInstalledDicts(); 910 std::vector<std::string> currentlyInstalled = getInstalledDicts();
829 for(int i =0;i<(int)currentlyInstalled.size();i++) 911 for (int i = 0; i < (int)currentlyInstalled.size(); i++)
830 { 912 {
831 if(0!=LLStringUtil::compareInsensitive(selection,currentlyInstalled[i])) 913 if (0 != LLStringUtil::compareInsensitive(selection, currentlyInstalled[i]))
914 {
832 newInstalledDics.push_back(fullName2DictName(currentlyInstalled[i])); 915 newInstalledDics.push_back(fullName2DictName(currentlyInstalled[i]));
916 }
833 } 917 }
834 gSavedSettings.setString("EmeraldSpellInstalled",VEC2CSV(newInstalledDics)); 918 gSavedSettings.setString("EmeraldSpellInstalled", VEC2CSV(newInstalledDics));
835 processSettings(); 919 processSettings();
836} 920}
921
837void lggHunSpell_Wrapper::newDictSelection(std::string selection) 922void lggHunSpell_Wrapper::newDictSelection(std::string selection)
838{ 923{
839 currentBaseDic=selection; 924 currentBaseDic = selection;
840 gSavedSettings.setString("EmeraldSpellBase",selection); 925 gSavedSettings.setString("EmeraldSpellBase", selection);
841 //better way to do this would be to check and see if there is a installed conflict 926 //better way to do this would be to check and see if there is a installed conflict
842 //and then only remove that one.. messy 927 //and then only remove that one.. messy
843 gSavedSettings.setString("EmeraldSpellInstalled","en_sl"); 928 gSavedSettings.setString("EmeraldSpellInstalled", "en_sl");
844 processSettings(); 929 processSettings();
845} 930}
846void lggHunSpell_Wrapper::getMoreButton(void * data) 931
932void lggHunSpell_Wrapper::getMoreButton(void* data)
847{ 933{
848 std::vector<std::string> shortNames; 934 std::vector<std::string> shortNames;
849 std::vector<std::string> longNames; 935 std::vector<std::string> longNames;
850 LLSD response = LLHTTPClient::blockingGet(gSavedSettings.getString("DicDownloadBaseURL")+"dic_list.xml"); 936 LLSD response = LLHTTPClient::blockingGet(gSavedSettings.getString("DicDownloadBaseURL")+"dic_list.xml");
851 if(response.has("body")) 937 if (response.has("body"))
852 { 938 {
853 const LLSD &dict_list = response["body"]; 939 const LLSD &dict_list = response["body"];
854 if(dict_list.has("isComplete")) 940 if (dict_list.has("isComplete"))
855 { 941 {
856 LLSD dics = dict_list["data"]; 942 LLSD dics = dict_list["data"];
857 for(int i = 0; i < dics.size(); i++) 943 for (int i = 0; i < dics.size(); i++)
858 { 944 {
859 std::string dicFullName = dictName2FullName(dics[i].asString()); 945 std::string dicFullName = dictName2FullName(dics[i].asString());
860 longNames.push_back(dicFullName); 946 longNames.push_back(dicFullName);
@@ -864,11 +950,12 @@ void lggHunSpell_Wrapper::getMoreButton(void * data)
864 } 950 }
865 } 951 }
866} 952}
953
867void lggHunSpell_Wrapper::editCustomButton() 954void lggHunSpell_Wrapper::editCustomButton()
868{ 955{
869 std::string dicdicpath(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "dictionaries", std::string("custom.dic")).c_str()); 956 std::string dicdicpath(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "dictionaries", std::string("custom.dic")).c_str());
870 957
871 if(!gDirUtilp->fileExists(dicdicpath)) 958 if (!gDirUtilp->fileExists(dicdicpath))
872 { 959 {
873 createCustomDic(); 960 createCustomDic();
874 //glggHunSpell->addWordToCustomDictionary("temp"); 961 //glggHunSpell->addWordToCustomDictionary("temp");
@@ -877,7 +964,7 @@ void lggHunSpell_Wrapper::editCustomButton()
877 gViewerWindow->getWindow()->ShellEx(dicdicpath); 964 gViewerWindow->getWindow()->ShellEx(dicdicpath);
878} 965}
879 966
880void lggHunSpell_Wrapper::setNewHighlightSetting( BOOL highlight ) 967void lggHunSpell_Wrapper::setSpellCheckHighlight(BOOL highlight)
881{ 968{
882 highlightInRed=highlight; 969 mSpellCheckHighlight = highlight;
883} 970}
diff --git a/linden/indra/newview/lgghunspell_wrapper.h b/linden/indra/newview/lgghunspell_wrapper.h
index 348f479..b5f3ddb 100644
--- a/linden/indra/newview/lgghunspell_wrapper.h
+++ b/linden/indra/newview/lgghunspell_wrapper.h
@@ -28,9 +28,7 @@ class lggHunSpell_Wrapper
28{ 28{
29 29
30public: 30public:
31 static Hunspell * myHunspell; 31 static Hunspell* myHunspell;
32
33 BOOL highlightInRed;
34 32
35 static void initSettings(); 33 static void initSettings();
36 void processSettings(); 34 void processSettings();
@@ -49,7 +47,6 @@ public:
49 static std::string dictName2FullName(std::string dictName); 47 static std::string dictName2FullName(std::string dictName);
50 static std::string fullName2DictName(std::string fullName); 48 static std::string fullName2DictName(std::string fullName);
51 void setNewDictionary(std::string newDict); 49 void setNewDictionary(std::string newDict);
52 void setNewHighlightSetting(BOOL highlight);
53 BOOL isSpelledRight(std::string wordToCheck); 50 BOOL isSpelledRight(std::string wordToCheck);
54 std::vector<std::string> getSuggestionList(std::string badWord); 51 std::vector<std::string> getSuggestionList(std::string badWord);
55 S32 findNextError(std::string haystack, int startAt); 52 S32 findNextError(std::string haystack, int startAt);
@@ -57,6 +54,9 @@ public:
57 std::vector<std::string> CSV2VEC(std::string csv); 54 std::vector<std::string> CSV2VEC(std::string csv);
58 std::string VEC2CSV(std::vector<std::string> vec); 55 std::string VEC2CSV(std::vector<std::string> vec);
59 56
57 void setSpellCheckHighlight(BOOL highlight);
58 BOOL getSpellCheckHighlight() { return mSpellCheckHighlight; }
59
60private: 60private:
61 void createCustomDic(); 61 void createCustomDic();
62 std::string getCorrectPath(std::string file); 62 std::string getCorrectPath(std::string file);
@@ -67,8 +67,9 @@ private:
67 std::string currentBaseDic; 67 std::string currentBaseDic;
68 //std::vector<std::string> languageCodes; 68 //std::vector<std::string> languageCodes;
69 //std::vector<std::string> countryCodes; 69 //std::vector<std::string> countryCodes;
70 BOOL mSpellCheckHighlight;
70}; 71};
71 72
72extern lggHunSpell_Wrapper *glggHunSpell; // the singleton hunspell wrapper 73extern lggHunSpell_Wrapper* glggHunSpell; // the singleton hunspell wrapper
73 74
74#endif 75#endif
diff --git a/linden/indra/newview/llprefsadvanced.cpp b/linden/indra/newview/llprefsadvanced.cpp
index ed0b432..cb0416e 100644
--- a/linden/indra/newview/llprefsadvanced.cpp
+++ b/linden/indra/newview/llprefsadvanced.cpp
@@ -256,41 +256,39 @@ void LLPrefsAdvanced::refresh()
256 } 256 }
257 257
258 LLComboBox* comboBox = getChild<LLComboBox>("EmeraldSpellBase"); 258 LLComboBox* comboBox = getChild<LLComboBox>("EmeraldSpellBase");
259 if(comboBox != NULL) 259 if (comboBox != NULL)
260 { 260 {
261 comboBox->removeall(); 261 comboBox->removeall();
262 std::vector<std::string> names = glggHunSpell->getDicts(); 262 std::vector<std::string> names = glggHunSpell->getDicts();
263 for(int i=0; i<(int)names.size(); i++) 263 for (int i = 0; i < (int)names.size(); i++)
264 { 264 {
265 comboBox->add(names[i]); 265 comboBox->add(names[i]);
266 } 266 }
267 comboBox->setSimple(gSavedSettings.getString("EmeraldSpellBase")); 267 comboBox->setSimple(gSavedSettings.getString("EmeraldSpellBase"));
268 } 268 }
269 comboBox = getChild<LLComboBox>("EmSpell_Avail"); 269 comboBox = getChild<LLComboBox>("EmSpell_Avail");
270 if(comboBox != NULL) 270 if (comboBox != NULL)
271 { 271 {
272 LLSD selected = comboBox->getSelectedValue();
272 comboBox->removeall(); 273 comboBox->removeall();
273
274 comboBox->add("");
275 std::vector<std::string> names = glggHunSpell->getAvailDicts(); 274 std::vector<std::string> names = glggHunSpell->getAvailDicts();
276 for(int i=0; i<(int)names.size(); i++) 275 for (int i = 0; i < (int)names.size(); i++)
277 { 276 {
278 comboBox->add(names[i]); 277 comboBox->add(names[i]);
279 } 278 }
280 comboBox->setSimple(std::string("")); 279 comboBox->selectByValue(selected);
281 } 280 }
282 comboBox = getChild<LLComboBox>("EmSpell_Installed"); 281 comboBox = getChild<LLComboBox>("EmSpell_Installed");
283 if(comboBox != NULL) 282 if (comboBox != NULL)
284 { 283 {
284 LLSD selected = comboBox->getSelectedValue();
285 comboBox->removeall(); 285 comboBox->removeall();
286
287 comboBox->add("");
288 std::vector<std::string> names = glggHunSpell->getInstalledDicts(); 286 std::vector<std::string> names = glggHunSpell->getInstalledDicts();
289 for(int i=0; i<(int)names.size(); i++) 287 for (int i = 0; i < (int)names.size(); i++)
290 { 288 {
291 comboBox->add(names[i]); 289 comboBox->add(names[i]);
292 } 290 }
293 comboBox->setSimple(std::string("")); 291 comboBox->selectByValue(selected);
294 } 292 }
295} 293}
296 294
@@ -328,6 +326,7 @@ void LLPrefsAdvanced::onSpellAdd(void* data)
328 } 326 }
329 panel->refresh(); 327 panel->refresh();
330} 328}
329
331void LLPrefsAdvanced::onSpellRemove(void* data) 330void LLPrefsAdvanced::onSpellRemove(void* data)
332{ 331{
333 LLPrefsAdvanced* panel = (LLPrefsAdvanced*)data; 332 LLPrefsAdvanced* panel = (LLPrefsAdvanced*)data;
@@ -337,23 +336,29 @@ void LLPrefsAdvanced::onSpellRemove(void* data)
337 } 336 }
338 panel->refresh(); 337 panel->refresh();
339} 338}
339
340void LLPrefsAdvanced::onSpellGetMore(void* data) 340void LLPrefsAdvanced::onSpellGetMore(void* data)
341{ 341{
342 glggHunSpell->getMoreButton(data); 342 glggHunSpell->getMoreButton(data);
343} 343}
344
344void LLPrefsAdvanced::onSpellEditCustom(void* data) 345void LLPrefsAdvanced::onSpellEditCustom(void* data)
345{ 346{
346 glggHunSpell->editCustomButton(); 347 glggHunSpell->editCustomButton();
347} 348}
349
348void LLPrefsAdvanced::onSpellBaseComboBoxCommit(LLUICtrl* ctrl, void* userdata) 350void LLPrefsAdvanced::onSpellBaseComboBoxCommit(LLUICtrl* ctrl, void* userdata)
349{ 351{
350 352
351 LLComboBox* box = (LLComboBox*)ctrl; 353 LLComboBox* box = (LLComboBox*)ctrl;
352 if(box) 354 if (box)
353 { 355 {
354 glggHunSpell->newDictSelection(box->getValue().asString()); 356 glggHunSpell->newDictSelection(box->getValue().asString());
355 //LLPanelEmerald* panel = (LLPanelEmerald*)userdata;//box->getParent(); 357 //LLPanelEmerald* panel = (LLPanelEmerald*)userdata;//box->getParent();
356 if(sInstance)sInstance->refresh(); 358 if (sInstance)
359 {
360 sInstance->refresh();
361 }
357 } 362 }
358 //LLPanelEmerald* panel = (LLPanelEmerald*)userdata; 363 //LLPanelEmerald* panel = (LLPanelEmerald*)userdata;
359 //if(panel)panel->refresh(); 364 //if(panel)panel->refresh();
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_about_land.xml b/linden/indra/newview/skins/default/xui/en-us/floater_about_land.xml
index 966dc2d..9bc91e7 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_about_land.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_about_land.xml
@@ -32,7 +32,7 @@
32 font="SansSerifSmall" handle_edit_keys_directly="false" height="52" 32 font="SansSerifSmall" handle_edit_keys_directly="false" height="52"
33 left="96" max_length="255" mouse_opaque="true" name="Description" 33 left="96" max_length="255" mouse_opaque="true" name="Description"
34 select_all_on_focus_received="false" select_on_focus="false" 34 select_all_on_focus_received="false" select_on_focus="false"
35 width="350" word_wrap="true" /> 35 width="350" word_wrap="true" spell_check="true" />
36 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 36 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
37 bottom="-100" drop_shadow_visible="true" enabled="true" follows="left|top" 37 bottom="-100" drop_shadow_visible="true" enabled="true" follows="left|top"
38 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4" 38 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4"
@@ -292,7 +292,7 @@ Go to World menu > About Land or select another parcel to show its details.
292 <text_editor type="string" length="1" bottom="-175" embedded_items="false" enabled="false" 292 <text_editor type="string" length="1" bottom="-175" embedded_items="false" enabled="false"
293 follows="left|top|right|bottom" font="SansSerifSmall" height="115" 293 follows="left|top|right|bottom" font="SansSerifSmall" height="115"
294 left="120" max_length="65535" mouse_opaque="true" name="covenant_editor" 294 left="120" max_length="65535" mouse_opaque="true" name="covenant_editor"
295 width="330" word_wrap="true"> 295 width="330" word_wrap="true" spell_check="true">
296 There is no Covenant provided for this Estate. 296 There is no Covenant provided for this Estate.
297 </text_editor> 297 </text_editor>
298 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 298 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
@@ -832,7 +832,7 @@ Only large parcels can be listed in search.
832 follows="left|top" font="SansSerifSmall" height="16" left="80" 832 follows="left|top" font="SansSerifSmall" height="16" left="80"
833 max_length="255" name="url_description" right="-80" 833 max_length="255" name="url_description" right="-80"
834 select_all_on_focus_received="true" select_on_focus="true" 834 select_all_on_focus_received="true" select_on_focus="true"
835 tool_tip="Text displayed next to play/load button" /> 835 tool_tip="Text displayed next to play/load button" spell_check="true" />
836 <text type="string" length="1" bottom_delta="-20" follows="left|top" font="SansSerifSmall" halign="left" 836 <text type="string" length="1" bottom_delta="-20" follows="left|top" font="SansSerifSmall" halign="left"
837 height="16" left="10" name="Media texture:" width="364"> 837 height="16" left="10" name="Media texture:" width="364">
838 Replace 838 Replace
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_animation_preview.xml b/linden/indra/newview/skins/default/xui/en-us/floater_animation_preview.xml
index f2c5d34..80a0468 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_animation_preview.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_animation_preview.xml
@@ -13,7 +13,7 @@
13 Description: 13 Description:
14 </text> 14 </text>
15 <line_editor bottom_delta="-2" follows="top|left|right" height="19" left="85" 15 <line_editor bottom_delta="-2" follows="top|left|right" height="19" left="85"
16 max_length="254" name="description_form" right="-10" /> 16 max_length="254" name="description_form" right="-10" spell_check="true" />
17 <pad height="0" /> 17 <pad height="0" />
18 <spinner decimal_digits="0" follows="left|top" height="18" increment="1" initial_val="0" 18 <spinner decimal_digits="0" follows="left|top" height="18" increment="1" initial_val="0"
19 label="Priority" label_width="50" left="10" max_val="4" min_val="0" 19 label="Priority" label_width="50" left="10" max_val="4" min_val="0"
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_area_search.xml b/linden/indra/newview/skins/default/xui/en-us/floater_area_search.xml
index a3ec84f..9022c25 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_area_search.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_area_search.xml
@@ -15,7 +15,7 @@
15 <line_editor name="Description query chunk" tool_tip="" 15 <line_editor name="Description query chunk" tool_tip=""
16 bevel_style="in" border_style="line" border_thickness="1" 16 bevel_style="in" border_style="line" border_thickness="1"
17 height="20" width="200" left_delta="206" bottom_delta="0" follows="left|top" 17 height="20" width="200" left_delta="206" bottom_delta="0" follows="left|top"
18 font="SansSerifSmall" max_length="256" mouse_opaque="true" /> 18 font="SansSerifSmall" max_length="256" mouse_opaque="true" spell_check="true" />
19 <text name="owner_label" bottom_delta="-20" follows="top|left" height="15" left="12"> 19 <text name="owner_label" bottom_delta="-20" follows="top|left" height="15" left="12">
20 Owner search string: 20 Owner search string:
21 </text> 21 </text>
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_busy.xml b/linden/indra/newview/skins/default/xui/en-us/floater_busy.xml
index 6d74882..9f55f67 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_busy.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_busy.xml
@@ -61,7 +61,7 @@
61 61
62 <text_editor type="string" length="1" bottom_delta="-85" embedded_items="false" enabled="true" 62 <text_editor type="string" length="1" bottom_delta="-85" embedded_items="false" enabled="true"
63 follows="left|top" font="SansSerifSmall" height="75" left_delta="-15" max_length="1100" 63 follows="left|top" font="SansSerifSmall" height="75" left_delta="-15" max_length="1100"
64 mouse_opaque="true" name="im_response" width="245" word_wrap="true"/> 64 mouse_opaque="true" name="im_response" width="245" word_wrap="true" spell_check="true" />
65 65
66 <check_box bottom_delta="-30" enabled="true" follows="left|top" font="SansSerifSmall" height="16" 66 <check_box bottom_delta="-30" enabled="true" follows="left|top" font="SansSerifSmall" height="16"
67 initial_value="false" label="Send an item along with the response" left_delta="0" 67 initial_value="false" label="Send an item along with the response" left_delta="0"
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_buy_land.xml b/linden/indra/newview/skins/default/xui/en-us/floater_buy_land.xml
index 7cd895f..3370ea8 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_buy_land.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_buy_land.xml
@@ -67,7 +67,7 @@
67 <text_editor bottom_delta="-242" enabled="false" 67 <text_editor bottom_delta="-242" enabled="false"
68 follows="top|right" font="SansSerifSmall" height="237" left="444" 68 follows="top|right" font="SansSerifSmall" height="237" left="444"
69 max_length="65535" name="covenant_editor" right="725" 69 max_length="65535" name="covenant_editor" right="725"
70 width="271" word_wrap="true"> 70 width="271" word_wrap="true" spell_check="true">
71 Loading... 71 Loading...
72 </text_editor> 72 </text_editor>
73 <check_box follows="left|top" height="20" label="I Agree to the Covenant Defined Above." 73 <check_box follows="left|top" height="20" label="I Agree to the Covenant Defined Above."
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_chat_history.xml b/linden/indra/newview/skins/default/xui/en-us/floater_chat_history.xml
index 74fe708..e83a930 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_chat_history.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_chat_history.xml
@@ -111,7 +111,7 @@
111 handle_edit_keys_directly="false" height="20" label="Click here to chat." 111 handle_edit_keys_directly="false" height="20" label="Click here to chat."
112 left="0" max_length="2147483647" mouse_opaque="true" name="Chat Editor" 112 left="0" max_length="2147483647" mouse_opaque="true" name="Chat Editor"
113 right="-70" select_all_on_focus_received="false" select_on_focus="false" 113 right="-70" select_all_on_focus_received="false" select_on_focus="false"
114 tab_group="1" /> 114 tab_group="1" spell_check="true" />
115 <flyout_button bottom="0" follows="right|bottom" height="20" label="Say" left="-65" 115 <flyout_button bottom="0" follows="right|bottom" height="20" label="Say" left="-65"
116 list_position="above" mouse_opaque="true" name="Say" tool_tip="(Enter)" 116 list_position="above" mouse_opaque="true" name="Say" tool_tip="(Enter)"
117 width="70"> 117 width="70">
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_directory.xml b/linden/indra/newview/skins/default/xui/en-us/floater_directory.xml
index 3e300da..0424b72 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_directory.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_directory.xml
@@ -27,7 +27,7 @@
27 </text> 27 </text>
28 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-24" 28 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-24"
29 follows="left|top" font="SansSerif" height="18" left_delta="38" 29 follows="left|top" font="SansSerif" height="18" left_delta="38"
30 max_length="63" mouse_opaque="true" name="name" width="128" /> 30 max_length="63" mouse_opaque="true" name="name" width="128" spell_check="true" />
31 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20" 31 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20"
32 label="Search" label_selected="Search" left_delta="136" mouse_opaque="true" 32 label="Search" label_selected="Search" left_delta="136" mouse_opaque="true"
33 name="Search" width="70" /> 33 name="Search" width="70" />
@@ -83,7 +83,7 @@
83 label="Search" left_delta="56" max_length="254" mouse_opaque="true" 83 label="Search" left_delta="56" max_length="254" mouse_opaque="true"
84 name="search_editor" select_all_on_focus_received="false" 84 name="search_editor" select_all_on_focus_received="false"
85 select_on_focus="false" tab_group="1" tool_tip="Search the web" 85 select_on_focus="false" tab_group="1" tool_tip="Search the web"
86 width="160" /> 86 width="160" spell_check="true" />
87 <button bottom="-26" follows="top|right" font="SansSerifSmall" height="20" label="Back" 87 <button bottom="-26" follows="top|right" font="SansSerifSmall" height="20" label="Back"
88 left="230" name="back_btn" width="70" /> 88 left="230" name="back_btn" width="70" />
89 <button bottom="-26" follows="top|right" font="SansSerifSmall" height="20" 89 <button bottom="-26" follows="top|right" font="SansSerifSmall" height="20"
@@ -159,7 +159,7 @@
159 </text> 159 </text>
160 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-24" 160 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-24"
161 follows="left|right|top" font="SansSerif" height="18" left="56" 161 follows="left|right|top" font="SansSerif" height="18" left="56"
162 max_length="63" mouse_opaque="true" name="name" width="160" /> 162 max_length="63" mouse_opaque="true" name="name" width="160" spell_check="true" />
163 <check_box bottom="-22" control_name="ShowPGClassifieds" follows="right|top" 163 <check_box bottom="-22" control_name="ShowPGClassifieds" follows="right|top"
164 font="SansSerifSmall" height="16" initial_value="true" 164 font="SansSerifSmall" height="16" initial_value="true"
165 label="PG content" left="420" mouse_opaque="true" 165 label="PG content" left="420" mouse_opaque="true"
@@ -253,7 +253,7 @@
253 </text> 253 </text>
254 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-24" 254 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-24"
255 follows="left|right|top" font="SansSerif" height="18" left="56" 255 follows="left|right|top" font="SansSerif" height="18" left="56"
256 max_length="63" mouse_opaque="true" name="event_search_text" width="160" /> 256 max_length="63" mouse_opaque="true" name="event_search_text" width="160" spell_check="true" />
257 <radio_group bottom="-40" draw_border="false" follows="right|top" height="40" left="560" 257 <radio_group bottom="-40" draw_border="false" follows="right|top" height="40" left="560"
258 mouse_opaque="true" name="date_mode" width="300"> 258 mouse_opaque="true" name="date_mode" width="300">
259 <radio_item bottom="-20" follows="left|top" height="20" left="0" mouse_opaque="true" 259 <radio_item bottom="-20" follows="left|top" height="20" left="0" mouse_opaque="true"
@@ -508,7 +508,7 @@ To buy direct, visit the land and click on the place name in the title bar.
508 </text> 508 </text>
509 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-24" 509 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-24"
510 follows="left|right|top" font="SansSerif" height="18" left="56" 510 follows="left|right|top" font="SansSerif" height="18" left="56"
511 max_length="63" mouse_opaque="true" name="name" width="160" /> 511 max_length="63" mouse_opaque="true" name="name" width="160" spell_check="true" />
512 <check_box bottom="-22" control_name="ShowPGSims" follows="right|top" 512 <check_box bottom="-22" control_name="ShowPGSims" follows="right|top"
513 font="SansSerifSmall" height="16" initial_value="true" 513 font="SansSerifSmall" height="16" initial_value="true"
514 label="PG content" left="420" mouse_opaque="true" 514 label="PG content" left="420" mouse_opaque="true"
@@ -646,7 +646,7 @@ To buy direct, visit the land and click on the place name in the title bar.
646 </text> 646 </text>
647 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-24" 647 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-24"
648 follows="left|right|top" font="SansSerif" height="18" left="56" 648 follows="left|right|top" font="SansSerif" height="18" left="56"
649 max_length="63" mouse_opaque="true" name="name" width="160" /> 649 max_length="63" mouse_opaque="true" name="name" width="160" spell_check="true" />
650 <button bottom="-48" follows="right|top" font="SansSerif" halign="center" height="20" 650 <button bottom="-48" follows="right|top" font="SansSerif" halign="center" height="20"
651 label="Search" label_selected="Search" left="121" mouse_opaque="true" 651 label="Search" label_selected="Search" left="121" mouse_opaque="true"
652 name="Search" width="95" /> 652 name="Search" width="95" />
@@ -694,7 +694,7 @@ To buy direct, visit the land and click on the place name in the title bar.
694 </text> 694 </text>
695 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-24" 695 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-24"
696 follows="left|top" font="SansSerif" height="18" left_delta="38" 696 follows="left|top" font="SansSerif" height="18" left_delta="38"
697 max_length="63" mouse_opaque="true" name="name" width="200" /> 697 max_length="63" mouse_opaque="true" name="name" width="200" spell_check="true" />
698 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20" 698 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20"
699 label="Search" label_selected="Search" left_delta="210" mouse_opaque="true" 699 label="Search" label_selected="Search" left_delta="210" mouse_opaque="true"
700 name="Search" width="70" /> 700 name="Search" width="70" />
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_group_info.xml b/linden/indra/newview/skins/default/xui/en-us/floater_group_info.xml
index d0e11d6..282a2f5 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_group_info.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_group_info.xml
@@ -71,7 +71,7 @@
71 <text_editor bg_readonly_color="0, 0, 0, 0" bottom="-206" embedded_items="false" 71 <text_editor bg_readonly_color="0, 0, 0, 0" bottom="-206" embedded_items="false"
72 follows="left|top" font="SansSerifSmall" height="48" left="87" 72 follows="left|top" font="SansSerifSmall" height="48" left="87"
73 max_length="511" mouse_opaque="true" name="charter" 73 max_length="511" mouse_opaque="true" name="charter"
74 text_readonly_color="1, 1, 1, 1" width="361" word_wrap="true" /> 74 text_readonly_color="1, 1, 1, 1" width="361" word_wrap="true" spell_check="true" />
75 <check_box bottom_delta="-18" follows="left|top" font="SansSerifSmall" height="16" 75 <check_box bottom_delta="-18" follows="left|top" font="SansSerifSmall" height="16"
76 initial_value="true" label="Show In Group List" left="87" 76 initial_value="true" label="Show In Group List" left="87"
77 mouse_opaque="true" name="sho" radio_style="false" width="361" /> 77 mouse_opaque="true" name="sho" radio_style="false" width="361" />
@@ -119,7 +119,7 @@
119 <line_editor bevel_style="in" bg_readonly_color="0, 0, 0, 0" border_style="line" 119 <line_editor bevel_style="in" bg_readonly_color="0, 0, 0, 0" border_style="line"
120 border_thickness="1" bottom="-90" follows="left|top" font="SansSerifSmall" 120 border_thickness="1" bottom="-90" follows="left|top" font="SansSerifSmall"
121 height="16" left_delta="75" max_length="20" mouse_opaque="true" name="ohon" 121 height="16" left_delta="75" max_length="20" mouse_opaque="true" name="ohon"
122 text_readonly_color="1, 1, 1, 1" width="105" /> 122 text_readonly_color="1, 1, 1, 1" width="105" spell_check="true" />
123 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 123 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
124 bottom="-90" drop_shadow_visible="true" follows="left|top" 124 bottom="-90" drop_shadow_visible="true" follows="left|top"
125 font="SansSerifSmall" h_pad="0" halign="right" height="16" left_delta="110" 125 font="SansSerifSmall" h_pad="0" halign="right" height="16" left_delta="110"
@@ -129,7 +129,7 @@
129 <line_editor bevel_style="in" bg_readonly_color="0, 0, 0, 0" border_style="line" 129 <line_editor bevel_style="in" bg_readonly_color="0, 0, 0, 0" border_style="line"
130 border_thickness="1" bottom="-90" follows="left|top" font="SansSerifSmall" 130 border_thickness="1" bottom="-90" follows="left|top" font="SansSerifSmall"
131 height="16" left_delta="75" max_length="20" mouse_opaque="true" name="mhon" 131 height="16" left_delta="75" max_length="20" mouse_opaque="true" name="mhon"
132 text_readonly_color="1, 1, 1, 1" width="105" /> 132 text_readonly_color="1, 1, 1, 1" width="105" spell_check="true" />
133 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 133 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
134 bottom="-124" drop_shadow_visible="true" follows="left|top" 134 bottom="-124" drop_shadow_visible="true" follows="left|top"
135 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12" 135 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
@@ -332,7 +332,7 @@ create a new proposal.
332 bottom_delta="40" embedded_items="false" follows="left|top" 332 bottom_delta="40" embedded_items="false" follows="left|top"
333 font="SansSerif" height="94" left="87" max_length="255" mouse_opaque="true" 333 font="SansSerif" height="94" left="87" max_length="255" mouse_opaque="true"
334 name="proposal_text" text_readonly_color="1, 1, 1, 1" width="290" 334 name="proposal_text" text_readonly_color="1, 1, 1, 1" width="290"
335 word_wrap="false" /> 335 word_wrap="false" spell_check="true" />
336 <button bottom_delta="-22" follows="top" font="SansSerif" halign="center" height="20" 336 <button bottom_delta="-22" follows="top" font="SansSerif" halign="center" height="20"
337 label="Yes" label_selected="Yes" left="87" mouse_opaque="true" 337 label="Yes" label_selected="Yes" left="87" mouse_opaque="true"
338 name="btn_yes" width="60" /> 338 name="btn_yes" width="60" />
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_image_preview.xml b/linden/indra/newview/skins/default/xui/en-us/floater_image_preview.xml
index 32a715e..6e72dee 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_image_preview.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_image_preview.xml
@@ -11,7 +11,7 @@
11 Description: 11 Description:
12 </text> 12 </text>
13 <line_editor bottom_delta="-24" follows="top|left|right" height="19" max_length="254" 13 <line_editor bottom_delta="-24" follows="top|left|right" height="19" max_length="254"
14 name="description_form" width="280" /> 14 name="description_form" width="280" spell_check="true" />
15 <text bottom_delta="-20" follows="top|left" height="15" name="preview_label"> 15 <text bottom_delta="-20" follows="top|left" height="15" name="preview_label">
16 Preview image as: 16 Preview image as:
17 </text> 17 </text>
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_instant_message.xml b/linden/indra/newview/skins/default/xui/en-us/floater_instant_message.xml
index 5e81525..4ccfe60 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_instant_message.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_instant_message.xml
@@ -77,13 +77,13 @@
77 follows="left|top|right|bottom" font="SansSerif" height="221" left="5" 77 follows="left|top|right|bottom" font="SansSerif" height="221" left="5"
78 max_length="2147483647" mouse_opaque="true" name="im_history" 78 max_length="2147483647" mouse_opaque="true" name="im_history"
79 text_color="ChatHistoryTextColor" 79 text_color="ChatHistoryTextColor"
80 track_bottom="true" 80 track_bottom="true"
81 text_readonly_color="ChatHistoryTextColor" width="487" word_wrap="true" /> 81 text_readonly_color="ChatHistoryTextColor" width="487" word_wrap="true" />
82 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="7" 82 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="7"
83 follows="left|right|bottom" font="SansSerif" height="20" 83 follows="left|right|bottom" font="SansSerif" height="20"
84 label="Click here to instant message" left="5" max_length="1022" 84 label="Click here to instant message" left="5" max_length="1022"
85 mouse_opaque="true" name="chat_editor" select_all_on_focus_received="false" 85 mouse_opaque="true" name="chat_editor" select_all_on_focus_received="false"
86 select_on_focus="false" tab_group="1" width="423" /> 86 select_on_focus="false" tab_group="1" width="423" spell_check="true" />
87 <button bottom="7" follows="right|bottom" font="SansSerif" halign="center" height="20" 87 <button bottom="7" follows="right|bottom" font="SansSerif" halign="center" height="20"
88 label="Send" left="433" mouse_opaque="true" name="send_btn" 88 label="Send" left="433" mouse_opaque="true" name="send_btn"
89 scale_image="true" width="60" /> 89 scale_image="true" width="60" />
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_instant_message_ad_hoc.xml b/linden/indra/newview/skins/default/xui/en-us/floater_instant_message_ad_hoc.xml
index cac33d7..a059cde 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_instant_message_ad_hoc.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_instant_message_ad_hoc.xml
@@ -48,7 +48,7 @@
48 bottom="-265" embedded_items="false" enabled="false" 48 bottom="-265" embedded_items="false" enabled="false"
49 follows="left|top|right|bottom" font="SansSerif" height="239" left="5" 49 follows="left|top|right|bottom" font="SansSerif" height="239" left="5"
50 max_length="2147483647" mouse_opaque="true" name="im_history" 50 max_length="2147483647" mouse_opaque="true" name="im_history"
51 track_bottom="true" 51 track_bottom="true"
52 text_color="ChatHistoryTextColor" 52 text_color="ChatHistoryTextColor"
53 text_readonly_color="ChatHistoryTextColor" width="490" word_wrap="true" /> 53 text_readonly_color="ChatHistoryTextColor" width="490" word_wrap="true" />
54 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="7" 54 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="7"
@@ -56,7 +56,7 @@
56 handle_edit_keys_directly="false" height="20" 56 handle_edit_keys_directly="false" height="20"
57 label="Click here to instant message" left="5" max_length="1022" 57 label="Click here to instant message" left="5" max_length="1022"
58 mouse_opaque="true" name="chat_editor" select_all_on_focus_received="false" 58 mouse_opaque="true" name="chat_editor" select_all_on_focus_received="false"
59 select_on_focus="false" tab_group="1" width="426" /> 59 select_on_focus="false" tab_group="1" width="426" spell_check="true" />
60 <button bottom_delta="0" enabled="true" follows="right|bottom" font="SansSerif" 60 <button bottom_delta="0" enabled="true" follows="right|bottom" font="SansSerif"
61 halign="center" height="20" label="Send" left="436" mouse_opaque="true" 61 halign="center" height="20" label="Send" left="436" mouse_opaque="true"
62 name="send_btn" scale_image="true" width="60" /> 62 name="send_btn" scale_image="true" width="60" />
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_instant_message_group.xml b/linden/indra/newview/skins/default/xui/en-us/floater_instant_message_group.xml
index 072ac14..82311cd 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_instant_message_group.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_instant_message_group.xml
@@ -67,14 +67,14 @@
67 follows="left|top|right|bottom" font="SansSerif" left="4" 67 follows="left|top|right|bottom" font="SansSerif" left="4"
68 max_length="2147483647" mouse_opaque="true" name="im_history" 68 max_length="2147483647" mouse_opaque="true" name="im_history"
69 text_color="ChatHistoryTextColor" 69 text_color="ChatHistoryTextColor"
70 track_bottom="true" 70 track_bottom="true"
71 text_readonly_color="ChatHistoryTextColor" top="104" width="170" 71 text_readonly_color="ChatHistoryTextColor" top="104" width="170"
72 word_wrap="true" /> 72 word_wrap="true" />
73 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="7" 73 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="7"
74 enabled="true" follows="left|right|bottom" font="SansSerif" height="20" 74 enabled="true" follows="left|right|bottom" font="SansSerif" height="20"
75 left="5" max_length="1022" mouse_opaque="true" name="chat_editor" 75 left="5" max_length="1022" mouse_opaque="true" name="chat_editor"
76 select_all_on_focus_received="false" select_on_focus="false" tab_group="1" 76 select_all_on_focus_received="false" select_on_focus="false" tab_group="1"
77 width="106" /> 77 width="106" spell_check="true" />
78 <button bottom="7" enabled="true" follows="right|bottom" font="SansSerif" 78 <button bottom="7" enabled="true" follows="right|bottom" font="SansSerif"
79 halign="center" height="20" label="Send" left="116" mouse_opaque="true" 79 halign="center" height="20" label="Send" left="116" mouse_opaque="true"
80 name="send_btn" scale_image="true" width="60" /> 80 name="send_btn" scale_image="true" width="60" />
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_inventory_item_properties.xml b/linden/indra/newview/skins/default/xui/en-us/floater_inventory_item_properties.xml
index 5b111eb..88992a2 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_inventory_item_properties.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_inventory_item_properties.xml
@@ -24,7 +24,7 @@
24 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-61" 24 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-61"
25 enabled="true" follows="left|top|right" font="SansSerifSmall" height="16" 25 enabled="true" follows="left|top|right" font="SansSerifSmall" height="16"
26 is_unicode="false" left="88" max_length="127" mouse_opaque="true" 26 is_unicode="false" left="88" max_length="127" mouse_opaque="true"
27 name="LabelItemDesc" width="252" /> 27 name="LabelItemDesc" width="252" spell_check="true" />
28 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 28 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
29 bottom="-81" drop_shadow_visible="true" follows="left|top" 29 bottom="-81" drop_shadow_visible="true" follows="left|top"
30 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10" 30 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10"
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_name_description.xml b/linden/indra/newview/skins/default/xui/en-us/floater_name_description.xml
index a91d9e2..e319293 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_name_description.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_name_description.xml
@@ -11,7 +11,7 @@
11 Description: 11 Description:
12 </text> 12 </text>
13 <line_editor follows="top|left|right" height="19" max_length="254" name="description_form" 13 <line_editor follows="top|left|right" height="19" max_length="254" name="description_form"
14 width="280" /> 14 width="280" spell_check="true" />
15 <button bottom="10" follows="bottom|right" height="20" label="Cancel" left="182" 15 <button bottom="10" follows="bottom|right" height="20" label="Cancel" left="182"
16 name="cancel_btn" width="64" /> 16 name="cancel_btn" width="64" />
17 <button bottom="10" follows="bottom|left" height="20" label="Upload ([UPLOADFEE])" left="31" 17 <button bottom="10" follows="bottom|left" height="20" label="Upload ([UPLOADFEE])" left="31"
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_new_outfit_dialog.xml b/linden/indra/newview/skins/default/xui/en-us/floater_new_outfit_dialog.xml
index 51cd2f5..81dd05a 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_new_outfit_dialog.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_new_outfit_dialog.xml
@@ -265,7 +265,7 @@ now wearing into it.
265 enabled="true" follows="left|top" font="SansSerif" 265 enabled="true" follows="left|top" font="SansSerif"
266 handle_edit_keys_directly="true" height="20" left="13" max_length="63" 266 handle_edit_keys_directly="true" height="20" left="13" max_length="63"
267 mouse_opaque="true" name="name ed" select_all_on_focus_received="false" 267 mouse_opaque="true" name="name ed" select_all_on_focus_received="false"
268 select_on_focus="false" width="489"> 268 select_on_focus="false" width="489" spell_check="true">
269 New Outfit 269 New Outfit
270 </line_editor> 270 </line_editor>
271</floater> 271</floater>
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_pay.xml b/linden/indra/newview/skins/default/xui/en-us/floater_pay.xml
index be53b41..3938a90 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_pay.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_pay.xml
@@ -43,7 +43,7 @@
43 <line_editor name="message" max_length="140" 43 <line_editor name="message" max_length="140"
44 bottom_delta="1" left="80" height="18" right="-15" 44 bottom_delta="1" left="80" height="18" right="-15"
45 bevel_style="in" border_style="line" border_thickness="1" 45 bevel_style="in" border_style="line" border_thickness="1"
46 follows="left|top|right" font="SansSerif" /> 46 follows="left|top|right" font="SansSerif" spell_check="true" />
47 47
48 48
49 <text name="amount text" 49 <text name="amount text"
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_postcard.xml b/linden/indra/newview/skins/default/xui/en-us/floater_postcard.xml
index 97cbeb8..fd2ad39 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_postcard.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_postcard.xml
@@ -25,13 +25,13 @@
25 </text> 25 </text>
26 <line_editor bottom_delta="-6" follows="left|top" height="20" 26 <line_editor bottom_delta="-6" follows="left|top" height="20"
27 label="Type your subject here." left="120" max_length="100" 27 label="Type your subject here." left="120" max_length="100"
28 name="subject_form" width="150" /> 28 name="subject_form" width="150" spell_check="true" />
29 <text bottom_delta="-23" follows="top|left" font="SansSerif" left="12" 29 <text bottom_delta="-23" follows="top|left" font="SansSerif" left="12"
30 name="msg_label"> 30 name="msg_label">
31 Message: 31 Message:
32 </text> 32 </text>
33 <text_editor bottom_delta="-150" follows="left|top|right|bottom" height="140" left="12" 33 <text_editor bottom_delta="-150" follows="left|top|right|bottom" height="140" left="12"
34 max_length="700" name="msg_form" width="420"> 34 max_length="700" name="msg_form" width="420" spell_check="true">
35 Type your message here. 35 Type your message here.
36 </text_editor> 36 </text_editor>
37 <text bottom_delta="-37" follows="left|bottom" font="SansSerifSmall" left="12" 37 <text bottom_delta="-37" follows="left|bottom" font="SansSerifSmall" left="12"
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_preview_animation.xml b/linden/indra/newview/skins/default/xui/en-us/floater_preview_animation.xml
index 657898a..3eef081 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_preview_animation.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_preview_animation.xml
@@ -6,7 +6,7 @@
6 enabled="true" follows="left|top|right" font="SansSerif" 6 enabled="true" follows="left|top|right" font="SansSerif"
7 handle_edit_keys_directly="false" height="19" left="93" max_length="127" 7 handle_edit_keys_directly="false" height="19" left="93" max_length="127"
8 mouse_opaque="true" name="desc" select_all_on_focus_received="false" 8 mouse_opaque="true" name="desc" select_all_on_focus_received="false"
9 select_on_focus="false" width="194" /> 9 select_on_focus="false" width="194" spell_check="true" />
10 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 10 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
11 bottom="-38" drop_shadow_visible="true" enabled="true" follows="left|top" 11 bottom="-38" drop_shadow_visible="true" enabled="true" follows="left|top"
12 font="SansSerif" h_pad="0" halign="left" height="19" left="13" 12 font="SansSerif" h_pad="0" halign="left" height="19" left="13"
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_preview_gesture.xml b/linden/indra/newview/skins/default/xui/en-us/floater_preview_gesture.xml
index 09fe2c0..590ff32 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_preview_gesture.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_preview_gesture.xml
@@ -19,7 +19,7 @@
19 Description: 19 Description:
20 </text> 20 </text>
21 <line_editor bottom_delta="-6" follows="left|top" height="20" left="100" max_length="254" 21 <line_editor bottom_delta="-6" follows="left|top" height="20" left="100" max_length="254"
22 name="desc" width="330" /> 22 name="desc" width="330" spell_check="true" />
23 <text bottom_delta="-23" follows="top|left" font="SansSerif" left="16" 23 <text bottom_delta="-23" follows="top|left" font="SansSerif" left="16"
24 name="trigger_label"> 24 name="trigger_label">
25 Trigger: 25 Trigger:
@@ -34,7 +34,7 @@
34 <line_editor bottom_delta="-6" follows="left|top" height="20" left="300" max_length="31" 34 <line_editor bottom_delta="-6" follows="left|top" height="20" left="300" max_length="31"
35 name="replace_editor" 35 name="replace_editor"
36 tool_tip="Replace the trigger word(s) with these words. For example, trigger &apos;hello&apos; replace with &apos;howdy&apos; will turn the chat &apos;I wanted to say hello&apos; into &apos;I wanted to say howdy&apos; as well as playing the gesture" 36 tool_tip="Replace the trigger word(s) with these words. For example, trigger &apos;hello&apos; replace with &apos;howdy&apos; will turn the chat &apos;I wanted to say hello&apos; into &apos;I wanted to say howdy&apos; as well as playing the gesture"
37 width="130" /> 37 width="130" spell_check="true" />
38 <text bottom_delta="-23" follows="top|left" font="SansSerif" left="16" 38 <text bottom_delta="-23" follows="top|left" font="SansSerif" left="16"
39 name="key_label"> 39 name="key_label">
40 Shortcut Key: 40 Shortcut Key:
@@ -78,7 +78,7 @@ unless you add wait steps.
78 <combo_box bottom_delta="0" follows="top|left" height="20" left_delta="0" 78 <combo_box bottom_delta="0" follows="top|left" height="20" left_delta="0"
79 name="sound_list" width="100" /> 79 name="sound_list" width="100" />
80 <line_editor bottom_delta="0" follows="top|left" height="20" left_delta="0" max_length="127" 80 <line_editor bottom_delta="0" follows="top|left" height="20" left_delta="0" max_length="127"
81 name="chat_editor" width="100" /> 81 name="chat_editor" width="100" spell_check="true" />
82 <radio_group bottom_delta="-20" draw_border="false" follows="top|left" height="40" 82 <radio_group bottom_delta="-20" draw_border="false" follows="top|left" height="40"
83 left="340" name="animation_trigger_type" width="80"> 83 left="340" name="animation_trigger_type" width="80">
84 <radio_item bottom_delta="-5" follows="left|top" height="16" left="3" mouse_opaque="true" 84 <radio_item bottom_delta="-5" follows="left|top" height="16" left="3" mouse_opaque="true"
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_preview_notecard.xml b/linden/indra/newview/skins/default/xui/en-us/floater_preview_notecard.xml
index a625598..fe2d977 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_preview_notecard.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_preview_notecard.xml
@@ -16,7 +16,7 @@
16 enabled="true" follows="left|top|right" font="SansSerif" 16 enabled="true" follows="left|top|right" font="SansSerif"
17 handle_edit_keys_directly="false" height="19" left="93" max_length="127" 17 handle_edit_keys_directly="false" height="19" left="93" max_length="127"
18 mouse_opaque="true" name="desc" select_all_on_focus_received="false" 18 mouse_opaque="true" name="desc" select_all_on_focus_received="false"
19 select_on_focus="false" width="294" /> 19 select_on_focus="false" width="294" spell_check="true" />
20 <menu_bar bottom="-56" drop_shadow="false" enabled="true" follows="left|top|right" 20 <menu_bar bottom="-56" drop_shadow="false" enabled="true" follows="left|top|right"
21 height="18" left="8" mouse_opaque="false" name="motecard_menu" opaque="false" 21 height="18" left="8" mouse_opaque="false" name="motecard_menu" opaque="false"
22 tear_off="false" width="220"> 22 tear_off="false" width="220">
@@ -55,7 +55,7 @@
55 <text_editor type="string" length="1" bottom="-344" embedded_items="true" enabled="true" 55 <text_editor type="string" length="1" bottom="-344" embedded_items="true" enabled="true"
56 follows="left|top|right|bottom" font="SansSerif" height="285" 56 follows="left|top|right|bottom" font="SansSerif" height="285"
57 ignore_tab="false" left="4" max_length="65536" mouse_opaque="true" 57 ignore_tab="false" left="4" max_length="65536" mouse_opaque="true"
58 name="Notecard Editor" width="392" word_wrap="true"> 58 name="Notecard Editor" width="392" word_wrap="true" spell_check="true">
59 Loading... 59 Loading...
60 </text_editor> 60 </text_editor>
61 <button bottom="-370" enabled="false" follows="left|bottom" font="SansSerif" 61 <button bottom="-370" enabled="false" follows="left|bottom" font="SansSerif"
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_preview_notecard_keep_discard.xml b/linden/indra/newview/skins/default/xui/en-us/floater_preview_notecard_keep_discard.xml
index ec3ce5a..f2be796 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_preview_notecard_keep_discard.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_preview_notecard_keep_discard.xml
@@ -16,7 +16,7 @@
16 enabled="true" follows="left|top|right" font="SansSerif" 16 enabled="true" follows="left|top|right" font="SansSerif"
17 handle_edit_keys_directly="false" height="19" left="93" max_length="127" 17 handle_edit_keys_directly="false" height="19" left="93" max_length="127"
18 mouse_opaque="true" name="desc" select_all_on_focus_received="false" 18 mouse_opaque="true" name="desc" select_all_on_focus_received="false"
19 select_on_focus="false" width="294" /> 19 select_on_focus="false" width="294" spell_check="true" />
20 <menu_bar bottom="-56" drop_shadow="false" enabled="true" follows="left|top|right" 20 <menu_bar bottom="-56" drop_shadow="false" enabled="true" follows="left|top|right"
21 height="18" left="8" mouse_opaque="false" name="motecard_menu" opaque="false" 21 height="18" left="8" mouse_opaque="false" name="motecard_menu" opaque="false"
22 tear_off="false" width="220"> 22 tear_off="false" width="220">
@@ -55,7 +55,7 @@
55 <text_editor type="string" length="1" bottom="-344" embedded_items="true" enabled="true" 55 <text_editor type="string" length="1" bottom="-344" embedded_items="true" enabled="true"
56 follows="left|top|right|bottom" font="SansSerif" height="285" 56 follows="left|top|right|bottom" font="SansSerif" height="285"
57 ignore_tab="false" left="4" max_length="65536" mouse_opaque="true" 57 ignore_tab="false" left="4" max_length="65536" mouse_opaque="true"
58 name="Notecard Editor" width="392" word_wrap="true"> 58 name="Notecard Editor" width="392" word_wrap="true" spell_check="true">
59 Loading... 59 Loading...
60 </text_editor> 60 </text_editor>
61 <button bottom="-370" enabled="true" follows="left|bottom" font="SansSerif" 61 <button bottom="-370" enabled="true" follows="left|bottom" font="SansSerif"
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_preview_sound.xml b/linden/indra/newview/skins/default/xui/en-us/floater_preview_sound.xml
index 9ac36d3..0c422f1 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_preview_sound.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_preview_sound.xml
@@ -6,7 +6,7 @@
6 enabled="true" follows="left|top|right" font="SansSerif" 6 enabled="true" follows="left|top|right" font="SansSerif"
7 handle_edit_keys_directly="false" height="19" left="95" max_length="127" 7 handle_edit_keys_directly="false" height="19" left="95" max_length="127"
8 mouse_opaque="true" name="desc" select_all_on_focus_received="false" 8 mouse_opaque="true" name="desc" select_all_on_focus_received="false"
9 select_on_focus="false" width="192" /> 9 select_on_focus="false" width="192" spell_check="true" />
10 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 10 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
11 bottom="-38" drop_shadow_visible="true" enabled="true" follows="left|top" 11 bottom="-38" drop_shadow_visible="true" enabled="true" follows="left|top"
12 font="SansSerif" h_pad="0" halign="left" height="19" left="13" 12 font="SansSerif" h_pad="0" halign="left" height="19" left="13"
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_preview_texture.xml b/linden/indra/newview/skins/default/xui/en-us/floater_preview_texture.xml
index f52b1b6..2ca2197 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_preview_texture.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_preview_texture.xml
@@ -13,7 +13,7 @@
13 enabled="true" follows="left|top|right" font="SansSerif" 13 enabled="true" follows="left|top|right" font="SansSerif"
14 handle_edit_keys_directly="false" height="19" left="93" max_length="127" 14 handle_edit_keys_directly="false" height="19" left="93" max_length="127"
15 mouse_opaque="true" name="desc" select_all_on_focus_received="false" 15 mouse_opaque="true" name="desc" select_all_on_focus_received="false"
16 select_on_focus="false" width="229" /> 16 select_on_focus="false" width="229" spell_check="true" />
17 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 17 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
18 bottom="10" drop_shadow_visible="true" enabled="true" follows="left|bottom" 18 bottom="10" drop_shadow_visible="true" enabled="true" follows="left|bottom"
19 font="SansSerifSmall" h_pad="0" halign="left" height="14" left="13" 19 font="SansSerifSmall" h_pad="0" halign="left" height="14" left="13"
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_preview_texture_keep_discard.xml b/linden/indra/newview/skins/default/xui/en-us/floater_preview_texture_keep_discard.xml
index 3c4a44d..2c24f45 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_preview_texture_keep_discard.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_preview_texture_keep_discard.xml
@@ -12,7 +12,7 @@
12 enabled="true" follows="left|top|right" font="SansSerif" 12 enabled="true" follows="left|top|right" font="SansSerif"
13 handle_edit_keys_directly="false" height="19" left="93" max_length="127" 13 handle_edit_keys_directly="false" height="19" left="93" max_length="127"
14 mouse_opaque="true" name="desc" select_all_on_focus_received="false" 14 mouse_opaque="true" name="desc" select_all_on_focus_received="false"
15 select_on_focus="false" width="194" /> 15 select_on_focus="false" width="194" spell_check="true" />
16 <button bottom="-322" enabled="true" follows="left|bottom" font="SansSerif" 16 <button bottom="-322" enabled="true" follows="left|bottom" font="SansSerif"
17 halign="center" height="20" label="Keep" label_selected="Keep" left="9" 17 halign="center" height="20" label="Keep" label_selected="Keep" left="9"
18 mouse_opaque="true" name="Keep" scale_image="true" width="100" /> 18 mouse_opaque="true" name="Keep" scale_image="true" width="100" />
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_report_abuse.xml b/linden/indra/newview/skins/default/xui/en-us/floater_report_abuse.xml
index ca1cfb1..7dad867 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_report_abuse.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_report_abuse.xml
@@ -206,7 +206,7 @@ Other
206 border_thickness="1" bottom_delta="-18" follows="left|top" 206 border_thickness="1" bottom_delta="-18" follows="left|top"
207 font="SansSerifSmall" height="16" left="16" max_length="64" 207 font="SansSerifSmall" height="16" left="16" max_length="64"
208 mouse_opaque="true" name="summary_edit" 208 mouse_opaque="true" name="summary_edit"
209 width="356" /> 209 width="356" spell_check="true" />
210 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 210 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
211 bottom_delta="-24" drop_shadow_visible="true" follows="left|top" 211 bottom_delta="-24" drop_shadow_visible="true" follows="left|top"
212 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="16" 212 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="16"
@@ -224,7 +224,7 @@ if possible.
224 <text_editor bottom_delta="-152" embedded_items="false" 224 <text_editor bottom_delta="-152" embedded_items="false"
225 follows="left|top" font="SansSerifSmall" height="146" left="16" 225 follows="left|top" font="SansSerifSmall" height="146" left="16"
226 max_length="800" mouse_opaque="false" name="details_edit" 226 max_length="800" mouse_opaque="false" name="details_edit"
227 width="356" word_wrap="true" /> 227 width="356" word_wrap="true" spell_check="true" />
228 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 228 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
229 bottom_delta="-24" drop_shadow_visible="true" follows="left|top" 229 bottom_delta="-24" drop_shadow_visible="true" follows="left|top"
230 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="16" 230 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="16"
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_report_bug.xml b/linden/indra/newview/skins/default/xui/en-us/floater_report_bug.xml
index 9499690..83d7a5c 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_report_bug.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_report_bug.xml
@@ -141,7 +141,7 @@
141 border_thickness="1" bottom_delta="-16" follows="left|top" 141 border_thickness="1" bottom_delta="-16" follows="left|top"
142 font="SansSerifSmall" height="16" left="16" max_length="64" 142 font="SansSerifSmall" height="16" left="16" max_length="64"
143 mouse_opaque="true" name="summary_edit" 143 mouse_opaque="true" name="summary_edit"
144 width="356" /> 144 width="356" spell_check="true" />
145 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 145 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
146 bottom_delta="-20" drop_shadow_visible="true" follows="left|top" 146 bottom_delta="-20" drop_shadow_visible="true" follows="left|top"
147 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="16" 147 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="16"
@@ -151,7 +151,7 @@
151 <text_editor bottom_delta="-112" embedded_items="false" 151 <text_editor bottom_delta="-112" embedded_items="false"
152 follows="left|top" font="SansSerifSmall" height="112" left="16" 152 follows="left|top" font="SansSerifSmall" height="112" left="16"
153 max_length="900" mouse_opaque="false" name="details_edit" 153 max_length="900" mouse_opaque="false" name="details_edit"
154 width="356" word_wrap="true"> 154 width="356" word_wrap="true" spell_check="true">
155 Steps to reproduce the bug: 155 Steps to reproduce the bug:
156 156
157Observed results: 157Observed results:
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_script_ed_panel.xml b/linden/indra/newview/skins/default/xui/en-us/floater_script_ed_panel.xml
index 82a65b8..50721ab 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_script_ed_panel.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_script_ed_panel.xml
@@ -5,7 +5,7 @@
5 embedded_items="false" enabled="true" follows="left|top|right|bottom" 5 embedded_items="false" enabled="true" follows="left|top|right|bottom"
6 font="Monospace" height="376" ignore_tab="false" left="4" 6 font="Monospace" height="376" ignore_tab="false" left="4"
7 max_length="65536" mouse_opaque="true" name="Script Editor" width="492" border_drop_shadow_visible="false" border_visible="false" bevel_style="none" border_style="line" border_thickness="0" 7 max_length="65536" mouse_opaque="true" name="Script Editor" width="492" border_drop_shadow_visible="false" border_visible="false" bevel_style="none" border_style="line" border_thickness="0"
8 word_wrap="true" show_line_numbers="true"> 8 word_wrap="true" show_line_numbers="true" spell_check="true">
9 Loading... 9 Loading...
10 </text_editor> 10 </text_editor>
11 <button bottom="-499" enabled="true" follows="right|bottom" font="SansSerif" 11 <button bottom="-499" enabled="true" follows="right|bottom" font="SansSerif"
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_script_preview.xml b/linden/indra/newview/skins/default/xui/en-us/floater_script_preview.xml
index 167aeb7..2e79da2 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_script_preview.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_script_preview.xml
@@ -19,5 +19,5 @@
19 enabled="true" follows="left|top|right" font="SansSerif" 19 enabled="true" follows="left|top|right" font="SansSerif"
20 handle_edit_keys_directly="false" height="19" left="93" max_length="127" 20 handle_edit_keys_directly="false" height="19" left="93" max_length="127"
21 mouse_opaque="true" name="desc" select_all_on_focus_received="false" 21 mouse_opaque="true" name="desc" select_all_on_focus_received="false"
22 select_on_focus="false" width="394" /> 22 select_on_focus="false" width="394" spell_check="true" />
23</floater> 23</floater>
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_search_replace.xml b/linden/indra/newview/skins/default/xui/en-us/floater_search_replace.xml
index 930cf37..f31f357 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_search_replace.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_search_replace.xml
@@ -31,10 +31,10 @@
31 enabled="true" follows="left|top" font="SansSerifSmall" 31 enabled="true" follows="left|top" font="SansSerifSmall"
32 handle_edit_keys_directly="false" height="16" left="55" max_length="254" 32 handle_edit_keys_directly="false" height="16" left="55" max_length="254"
33 mouse_opaque="true" name="search_text" select_all_on_focus_received="false" 33 mouse_opaque="true" name="search_text" select_all_on_focus_received="false"
34 select_on_focus="false" width="240" /> 34 select_on_focus="false" width="240" spell_check="true" />
35 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-58" 35 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-58"
36 enabled="true" follows="left|top" font="SansSerifSmall" 36 enabled="true" follows="left|top" font="SansSerifSmall"
37 handle_edit_keys_directly="false" height="16" left="55" max_length="254" 37 handle_edit_keys_directly="false" height="16" left="55" max_length="254"
38 mouse_opaque="true" name="replace_text" 38 mouse_opaque="true" name="replace_text"
39 select_all_on_focus_received="false" select_on_focus="false" width="240" /> 39 select_all_on_focus_received="false" select_on_focus="false" width="240" spell_check="true" />
40</floater> 40</floater>
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_sound_preview.xml b/linden/indra/newview/skins/default/xui/en-us/floater_sound_preview.xml
index 3738077..0a755e8 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_sound_preview.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_sound_preview.xml
@@ -19,7 +19,7 @@
19 </text> 19 </text>
20 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="-23" 20 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="-23"
21 follows="left|top|right" font="SansSerifSmall" height="19" left="10" 21 follows="left|top|right" font="SansSerifSmall" height="19" left="10"
22 max_length="127" mouse_opaque="true" name="description_form" width="280" /> 22 max_length="127" mouse_opaque="true" name="description_form" width="280" spell_check="true" />
23 <button bottom="-180" follows="right|bottom" font="SansSerif" halign="center" 23 <button bottom="-180" follows="right|bottom" font="SansSerif" halign="center"
24 height="20" label="Cancel" label_selected="Cancel" left="200" 24 height="20" label="Cancel" label_selected="Cancel" left="200"
25 mouse_opaque="true" name="cancel_btn" width="90" /> 25 mouse_opaque="true" name="cancel_btn" width="90" />
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml b/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml
index e473ad7..0cb4a59 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml
@@ -348,7 +348,7 @@
348 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-46" 348 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-46"
349 follows="left|top|right" font="SansSerifSmall" height="16" left="88" 349 follows="left|top|right" font="SansSerifSmall" height="16" left="88"
350 max_length="127" mouse_opaque="true" name="Object Description" 350 max_length="127" mouse_opaque="true" name="Object Description"
351 select_all_on_focus_received="true" width="172" /> 351 select_all_on_focus_received="true" width="172" spell_check="true" />
352 352
353 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 353 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
354 bottom="-66" drop_shadow_visible="true" follows="left|top" 354 bottom="-66" drop_shadow_visible="true" follows="left|top"
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_avatar.xml b/linden/indra/newview/skins/default/xui/en-us/panel_avatar.xml
index 5c794c0..9bc4d7e 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_avatar.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_avatar.xml
@@ -143,7 +143,7 @@
143 <text_editor bottom_delta="-137" embedded_items="false" 143 <text_editor bottom_delta="-137" embedded_items="false"
144 enabled="true" follows="left|top" font="SansSerifSmall" height="137" 144 enabled="true" follows="left|top" font="SansSerifSmall" height="137"
145 is_unicode="false" left_delta="0" max_length="511" mouse_opaque="true" 145 is_unicode="false" left_delta="0" max_length="511" mouse_opaque="true"
146 name="about" width="235" word_wrap="true" /> 146 name="about" width="235" word_wrap="true" spell_check="true" />
147 147
148 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 148 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
149 bottom_delta="-20" drop_shadow_visible="true" follows="left|top" 149 bottom_delta="-20" drop_shadow_visible="true" follows="left|top"
@@ -243,7 +243,7 @@
243 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" 243 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16"
244 initial_value="false" label="Hire" left_delta="170" mouse_opaque="true" 244 initial_value="false" label="Hire" left_delta="170" mouse_opaque="true"
245 name="chk7" width="92" /> 245 name="chk7" width="92" />
246 <line_editor bevel_style="in" border_style="line" 246 <line_editor bevel_style="in" border_style="line" spell_check="true"
247 border_thickness="1" bottom_delta="-20" enabled="true" follows="left|top" 247 border_thickness="1" bottom_delta="-20" enabled="true" follows="left|top"
248 font="SansSerifSmall" height="16" is_unicode="false" left="80" 248 font="SansSerifSmall" height="16" is_unicode="false" left="80"
249 max_length="254" mouse_opaque="true" name="want_to_edit" 249 max_length="254" mouse_opaque="true" name="want_to_edit"
@@ -272,7 +272,7 @@
272 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" 272 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16"
273 initial_value="false" label="Custom Characters" left_delta="170" 273 initial_value="false" label="Custom Characters" left_delta="170"
274 mouse_opaque="true" name="schk5" width="127" /> 274 mouse_opaque="true" name="schk5" width="127" />
275 <line_editor bevel_style="in" border_style="line" 275 <line_editor bevel_style="in" border_style="line" spell_check="true"
276 border_thickness="1" bottom_delta="-20" enabled="true" follows="left|top" 276 border_thickness="1" bottom_delta="-20" enabled="true" follows="left|top"
277 font="SansSerifSmall" height="16" is_unicode="false" left="80" 277 font="SansSerifSmall" height="16" is_unicode="false" left="80"
278 max_length="254" mouse_opaque="true" name="skills_edit" 278 max_length="254" mouse_opaque="true" name="skills_edit"
@@ -283,7 +283,7 @@
283 mouse_opaque="true" name="Languages:" v_pad="0" width="70"> 283 mouse_opaque="true" name="Languages:" v_pad="0" width="70">
284 Languages: 284 Languages:
285 </text> 285 </text>
286 <line_editor bevel_style="in" border_style="line" 286 <line_editor bevel_style="in" border_style="line" spell_check="true"
287 border_thickness="1" bottom_delta="0" enabled="true" follows="left|top" 287 border_thickness="1" bottom_delta="0" enabled="true" follows="left|top"
288 font="SansSerifSmall" height="16" is_unicode="false" left="80" 288 font="SansSerifSmall" height="16" is_unicode="false" left="80"
289 max_length="254" mouse_opaque="true" name="languages_edit" 289 max_length="254" mouse_opaque="true" name="languages_edit"
@@ -355,7 +355,7 @@
355 <text_editor bottom_delta="-179" embedded_items="false" 355 <text_editor bottom_delta="-179" embedded_items="false"
356 enabled="true" follows="left|top" font="SansSerifSmall" height="178" 356 enabled="true" follows="left|top" font="SansSerifSmall" height="178"
357 is_unicode="false" left="12" max_length="254" mouse_opaque="false" 357 is_unicode="false" left="12" max_length="254" mouse_opaque="false"
358 name="about" width="378" word_wrap="true" /> 358 name="about" width="378" word_wrap="true" spell_check="true" />
359 </panel> 359 </panel>
360 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" 360 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466"
361 label="My Notes" left="1" mouse_opaque="true" name="My Notes" width="418"> 361 label="My Notes" left="1" mouse_opaque="true" name="My Notes" width="418">
@@ -373,7 +373,7 @@
373 <text_editor bottom_delta="-260" embedded_items="false" enabled="true" follows="left|top" 373 <text_editor bottom_delta="-260" embedded_items="false" enabled="true" follows="left|top"
374 font="SansSerif" height="256" is_unicode="false" left="10" 374 font="SansSerif" height="256" is_unicode="false" left="10"
375 max_length="1023" mouse_opaque="true" name="notes edit" width="400" 375 max_length="1023" mouse_opaque="true" name="notes edit" width="400"
376 word_wrap="false" /> 376 word_wrap="false" spell_check="true" />
377 </panel> 377 </panel>
378 </tab_container> 378 </tab_container>
379 <button bottom="-508" font="SansSerif" halign="center" height="20" label="OK" 379 <button bottom="-508" font="SansSerif" halign="center" height="20" label="OK"
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_avatar_classified.xml b/linden/indra/newview/skins/default/xui/en-us/panel_avatar_classified.xml
index 5789474..f985b35 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_avatar_classified.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_avatar_classified.xml
@@ -3,13 +3,13 @@
3 name="Classified" title="Classified" width="350"> 3 name="Classified" title="Classified" width="350">
4 <texture_picker bottom="-165" follows="left|top" height="155" left="10" name="snapshot_ctrl" 4 <texture_picker bottom="-165" follows="left|top" height="155" left="10" name="snapshot_ctrl"
5 width="207" /> 5 width="207" />
6 <line_editor bottom_delta="-8" enabled="false" follows="left|top" 6 <line_editor bottom_delta="-8" enabled="false" follows="left|top" spell_check="true"
7 font="SansSerif" height="20" left="10" name="given_name_editor" 7 font="SansSerif" height="20" left="10" name="given_name_editor"
8 tool_tip="Name must begin with a letter or number, not punctuation." 8 tool_tip="Name must begin with a letter or number, not punctuation."
9 width="280" /> 9 width="280" />
10 <text_editor enabled="false" follows="left|top" 10 <text_editor enabled="false" follows="left|top"
11 font="SansSerifSmall" height="70" left="10" max_length="1023" 11 font="SansSerifSmall" height="70" left="10" max_length="1023"
12 name="desc_editor" width="280" word_wrap="true" /> 12 name="desc_editor" width="280" word_wrap="true" spell_check="true" />
13 <line_editor enabled="false" follows="left|top" 13 <line_editor enabled="false" follows="left|top"
14 font="SansSerifSmall" height="20" left="10" name="location_editor" 14 font="SansSerifSmall" height="20" left="10" name="location_editor"
15 tool_tip="Set the location for this classified to your current position." 15 tool_tip="Set the location for this classified to your current position."
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_avatar_pick.xml b/linden/indra/newview/skins/default/xui/en-us/panel_avatar_pick.xml
index af8b58c..9e67252 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_avatar_pick.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_avatar_pick.xml
@@ -8,7 +8,7 @@
8 width="290" /> 8 width="290" />
9 <text_editor enabled="false" follows="left|top" 9 <text_editor enabled="false" follows="left|top"
10 font="SansSerifSmall" height="100" left="10" max_length="1023" 10 font="SansSerifSmall" height="100" left="10" max_length="1023"
11 name="desc_editor" width="290" word_wrap="true" /> 11 name="desc_editor" width="290" word_wrap="true" spell_check="true" />
12 <line_editor enabled="false" follows="left|top" 12 <line_editor enabled="false" follows="left|top"
13 font="SansSerifSmall" height="20" left="10" name="location_editor" 13 font="SansSerifSmall" height="20" left="10" name="location_editor"
14 width="290" /> 14 width="290" />
@@ -23,7 +23,7 @@
23 Sort: 23 Sort:
24 </text> 24 </text>
25 <line_editor bottom_delta="5" follows="left|top" height="16" left="280" 25 <line_editor bottom_delta="5" follows="left|top" height="16" left="280"
26 name="sort_order_editor" width="25" /> 26 name="sort_order_editor" width="25" spell_check="true" />
27 <check_box bottom_delta="0" follows="left|top" height="20" label="Enabled" left="360" 27 <check_box bottom_delta="0" follows="left|top" height="20" label="Enabled" left="360"
28 name="enabled_check" width="80" /> 28 name="enabled_check" width="80" />
29</panel> 29</panel>
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_chat_bar.xml b/linden/indra/newview/skins/default/xui/en-us/panel_chat_bar.xml
index 780da86..dd5bf2d 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_chat_bar.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_chat_bar.xml
@@ -13,7 +13,7 @@
13 max_val="1000000" min_val="0" mouse_opaque="true" name="channel_control" 13 max_val="1000000" min_val="0" mouse_opaque="true" name="channel_control"
14 width="100" tool_tip="Set the default channel for inworld chat"/> 14 width="100" tool_tip="Set the default channel for inworld chat"/>
15 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-23" 15 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-23"
16 follows="left|right|bottom" font="SansSerif" 16 follows="left|right|bottom" font="SansSerif" spell_check="true"
17 handle_edit_keys_directly="false" height="20" label="Click here to chat." 17 handle_edit_keys_directly="false" height="20" label="Click here to chat."
18 left="212" max_length="254" name="Chat Editor" 18 left="212" max_length="254" name="Chat Editor"
19 select_all_on_focus_received="false" select_on_focus="false" tab_group="1" 19 select_all_on_focus_received="false" select_on_focus="false" tab_group="1"
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_classified.xml b/linden/indra/newview/skins/default/xui/en-us/panel_classified.xml
index 3c292e9..ecfa468 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_classified.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_classified.xml
@@ -6,10 +6,10 @@
6 <line_editor bottom_delta="-8" enabled="false" follows="left|top" 6 <line_editor bottom_delta="-8" enabled="false" follows="left|top"
7 font="SansSerif" height="20" left="20" name="given_name_editor" 7 font="SansSerif" height="20" left="20" name="given_name_editor"
8 tool_tip="Name must begin with a letter or number, not punctuation." 8 tool_tip="Name must begin with a letter or number, not punctuation."
9 width="400" /> 9 width="400" spell_check="true" />
10 <text_editor enabled="false" follows="left|top" 10 <text_editor enabled="false" follows="left|top"
11 font="SansSerifSmall" height="90" left="20" max_length="1023" 11 font="SansSerifSmall" height="90" left="20" max_length="1023"
12 name="desc_editor" width="400" word_wrap="true" /> 12 name="desc_editor" width="400" word_wrap="true" spell_check="true" />
13 <line_editor enabled="false" follows="left|top" font="SansSerif" 13 <line_editor enabled="false" follows="left|top" font="SansSerif"
14 height="20" left="20" name="location_editor" 14 height="20" left="20" name="location_editor"
15 tool_tip="Set the location for this classified to your current position." 15 tool_tip="Set the location for this classified to your current position."
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_event.xml b/linden/indra/newview/skins/default/xui/en-us/panel_event.xml
index 99156ee..6fa8904 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_event.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_event.xml
@@ -75,7 +75,7 @@
75 Description: 75 Description:
76 </text> 76 </text>
77 <text_editor bottom_delta="-230" follows="left|top" height="220" left="20" max_length="1024" 77 <text_editor bottom_delta="-230" follows="left|top" height="220" left="20" max_length="1024"
78 name="event_desc" width="400" /> 78 name="event_desc" width="400" spell_check="true" />
79 <button bottom_delta="-24" follows="left|top" height="20" label="Teleport" left="20" 79 <button bottom_delta="-24" follows="left|top" height="20" label="Teleport" left="20"
80 name="teleport_btn" width="140" /> 80 name="teleport_btn" width="140" />
81 <button bottom_delta="0" follows="left|top" height="20" label="Show on Map" left="165" 81 <button bottom_delta="0" follows="left|top" height="20" label="Show on Map" left="165"
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_group_general.xml b/linden/indra/newview/skins/default/xui/en-us/panel_group_general.xml
index a967a90..3e69d15 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_group_general.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_group_general.xml
@@ -18,7 +18,7 @@ Hover your mouse over the options for more help.
18 bottom="-24" drop_shadow_visible="true" follows="left|top" font="SansSerif" 18 bottom="-24" drop_shadow_visible="true" follows="left|top" font="SansSerif"
19 h_pad="0" halign="left" height="16" label="Type your new group name here" 19 h_pad="0" halign="left" height="16" label="Type your new group name here"
20 left="7" max_length="35" mouse_opaque="true" name="group_name_editor" 20 left="7" max_length="35" mouse_opaque="true" name="group_name_editor"
21 prevalidate="ascii" v_pad="0" width="300" /> 21 prevalidate="ascii" v_pad="0" width="300" spell_check="true" />
22 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 22 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
23 bottom="-20" drop_shadow_visible="true" follows="left|top" 23 bottom="-20" drop_shadow_visible="true" follows="left|top"
24 font="SansSerifBig" h_pad="0" halign="left" height="16" left="7" 24 font="SansSerifBig" h_pad="0" halign="left" height="16" left="7"
@@ -47,7 +47,7 @@ Hover your mouse over the options for more help.
47 font="SansSerifSmall" h_pad="0" halign="left" height="160" 47 font="SansSerifSmall" h_pad="0" halign="left" height="160"
48 hide_scrollbar="true" max_length="511" mouse_opaque="true" name="charter" 48 hide_scrollbar="true" max_length="511" mouse_opaque="true" name="charter"
49 right="410" v_pad="0" 49 right="410" v_pad="0"
50 width="265" word_wrap="true"> 50 width="265" word_wrap="true" spell_check="true">
51 Group Charter 51 Group Charter
52 </text_editor> 52 </text_editor>
53 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" 53 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_group_notices.xml b/linden/indra/newview/skins/default/xui/en-us/panel_group_notices.xml
index 0e5e84d..bca87d9 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_group_notices.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_group_notices.xml
@@ -74,7 +74,8 @@ and you can&apos;t send a folder.
74 <line_editor bevel_style="in" border_style="line" 74 <line_editor bevel_style="in" border_style="line"
75 border_thickness="1" bottom_delta="0" font="SansSerifSmall" height="16" 75 border_thickness="1" bottom_delta="0" font="SansSerifSmall" height="16"
76 is_unicode="false" left_delta="58" max_length="63" mouse_opaque="true" 76 is_unicode="false" left_delta="58" max_length="63" mouse_opaque="true"
77 name="create_subject" prevalidate="printable_not_pipe" width="264" /> 77 name="create_subject" prevalidate="printable_not_pipe" width="264"
78 spell_check="true" />
78 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 79 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
79 bottom_delta="-18" drop_shadow_visible="true" font="SansSerifSmall" 80 bottom_delta="-18" drop_shadow_visible="true" font="SansSerifSmall"
80 h_pad="0" halign="right" height="16" left="7" mouse_opaque="true" 81 h_pad="0" halign="right" height="16" left="7" mouse_opaque="true"
@@ -84,7 +85,7 @@ and you can&apos;t send a folder.
84 <text_editor bottom_delta="-106" embedded_items="false" 85 <text_editor bottom_delta="-106" embedded_items="false"
85 font="SansSerifSmall" height="120" hide_scrollbar="true" is_unicode="false" 86 font="SansSerifSmall" height="120" hide_scrollbar="true" is_unicode="false"
86 left_delta="58" max_length="511" mouse_opaque="true" name="create_message" 87 left_delta="58" max_length="511" mouse_opaque="true" name="create_message"
87 width="346" word_wrap="true" /> 88 width="346" word_wrap="true" spell_check="true" />
88 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 89 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
89 bottom_delta="-19" drop_shadow_visible="true" font="SansSerifSmall" 90 bottom_delta="-19" drop_shadow_visible="true" font="SansSerifSmall"
90 h_pad="0" halign="right" height="16" left="7" mouse_opaque="true" 91 h_pad="0" halign="right" height="16" left="7" mouse_opaque="true"
@@ -94,7 +95,7 @@ and you can&apos;t send a folder.
94 <line_editor bg_visible="false" border_visible="false" bottom_delta="-2" enabled="false" 95 <line_editor bg_visible="false" border_visible="false" bottom_delta="-2" enabled="false"
95 font="SansSerifSmall" height="16" is_unicode="false" left_delta="59" 96 font="SansSerifSmall" height="16" is_unicode="false" left_delta="59"
96 max_length="63" mouse_opaque="false" name="create_inventory_name" 97 max_length="63" mouse_opaque="false" name="create_inventory_name"
97 width="211" /> 98 width="211" spell_check="true" />
98 <icon bottom_delta="0" height="16" left_delta="0" mouse_opaque="false" 99 <icon bottom_delta="0" height="16" left_delta="0" mouse_opaque="false"
99 name="create_inv_icon" width="16" /> 100 name="create_inv_icon" width="16" />
100 <button bottom_delta="0" font="SansSerif" halign="center" height="20" 101 <button bottom_delta="0" font="SansSerif" halign="center" height="20"
@@ -146,7 +147,7 @@ and you can&apos;t send a folder.
146 enabled="false" font="SansSerifSmall" height="206" hide_scrollbar="true" 147 enabled="false" font="SansSerifSmall" height="206" hide_scrollbar="true"
147 is_unicode="false" left_delta="0" max_length="511" mouse_opaque="true" 148 is_unicode="false" left_delta="0" max_length="511" mouse_opaque="true"
148 name="view_message" width="404" 149 name="view_message" width="404"
149 word_wrap="true" /> 150 word_wrap="true" spell_check="true" />
150 <button bottom_delta="-24" font="SansSerif" halign="center" height="20" 151 <button bottom_delta="-24" font="SansSerif" halign="center" height="20"
151 label="Open Attachment" label_selected="Open Attachment" left="7" 152 label="Open Attachment" label_selected="Open Attachment" left="7"
152 mouse_opaque="true" name="open_attachment" width="110" /> 153 mouse_opaque="true" name="open_attachment" width="110" />
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_group_roles.xml b/linden/indra/newview/skins/default/xui/en-us/panel_group_roles.xml
index bd64622..e5b621e 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_group_roles.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_group_roles.xml
@@ -95,7 +95,7 @@ clicking on their names.
95 <line_editor bevel_style="in" border_style="line" 95 <line_editor bevel_style="in" border_style="line"
96 border_thickness="1" bottom="143" follows="left|top" font="SansSerifSmall" 96 border_thickness="1" bottom="143" follows="left|top" font="SansSerifSmall"
97 height="16" is_unicode="false" left="4" max_length="63" mouse_opaque="true" 97 height="16" is_unicode="false" left="4" max_length="63" mouse_opaque="true"
98 name="search_text" width="100" /> 98 name="search_text" width="100" spell_check="true" />
99 <button bottom_delta="-2" font="SansSerifSmall" halign="center" height="20" 99 <button bottom_delta="-2" font="SansSerifSmall" halign="center" height="20"
100 label="Search" left_delta="105" name="search_button" width="60" /> 100 label="Search" left_delta="105" name="search_button" width="60" />
101 <button bottom_delta="0" enabled="false" font="SansSerifSmall" halign="center" 101 <button bottom_delta="0" enabled="false" font="SansSerifSmall" halign="center"
@@ -135,7 +135,7 @@ including the Everyone and Owner Roles.
135 <line_editor bevel_style="in" border_style="line" 135 <line_editor bevel_style="in" border_style="line"
136 border_thickness="1" bottom="143" follows="left|top" font="SansSerifSmall" 136 border_thickness="1" bottom="143" follows="left|top" font="SansSerifSmall"
137 height="16" is_unicode="false" left="6" max_length="63" mouse_opaque="true" 137 height="16" is_unicode="false" left="6" max_length="63" mouse_opaque="true"
138 name="search_text" width="100" /> 138 name="search_text" width="100" spell_check="true" />
139 <button bottom_delta="-2" font="SansSerifSmall" halign="center" height="20" 139 <button bottom_delta="-2" font="SansSerifSmall" halign="center" height="20"
140 label="Search" left_delta="105" name="search_button" width="60" /> 140 label="Search" left_delta="105" name="search_button" width="60" />
141 <button bottom_delta="0" enabled="false" font="SansSerifSmall" halign="center" 141 <button bottom_delta="0" enabled="false" font="SansSerifSmall" halign="center"
@@ -212,7 +212,7 @@ things in this group. There&apos;s a broad variety of Abilities.
212 bottom_delta="-16" drop_shadow_visible="false" follows="left|top" 212 bottom_delta="-16" drop_shadow_visible="false" follows="left|top"
213 font="SansSerifSmall" height="16" is_unicode="false" left="0" 213 font="SansSerifSmall" height="16" is_unicode="false" left="0"
214 max_length="20" mouse_opaque="true" name="role_title" 214 max_length="20" mouse_opaque="true" name="role_title"
215 width="145"> 215 width="145" spell_check="true">
216 (waiting) 216 (waiting)
217 </line_editor> 217 </line_editor>
218 <text_editor bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 218 <text_editor bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
@@ -220,7 +220,7 @@ things in this group. There&apos;s a broad variety of Abilities.
220 h_pad="0" halign="left" height="48" hide_scrollbar="true" left="150" 220 h_pad="0" halign="left" height="48" hide_scrollbar="true" left="150"
221 max_length="254" name="role_description" 221 max_length="254" name="role_description"
222 v_pad="0" width="254" 222 v_pad="0" width="254"
223 word_wrap="true"> 223 word_wrap="true" spell_check="true">
224 (waiting) 224 (waiting)
225 </text_editor> 225 </text_editor>
226 <text bottom_delta="-26" font="SansSerif" halign="left" height="16" left="0" 226 <text bottom_delta="-26" font="SansSerif" halign="left" height="16" left="0"
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_group_voting.xml b/linden/indra/newview/skins/default/xui/en-us/panel_group_voting.xml
index e044f34..168b60b 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_group_voting.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_group_voting.xml
@@ -57,7 +57,7 @@ vote on open proposals, and view old proposals.
57 border_visible="false" bottom="300" drop_shadow_visible="false" 57 border_visible="false" bottom="300" drop_shadow_visible="false"
58 embedded_items="false" follows="left|top" font="SansSerif" height="90" 58 embedded_items="false" follows="left|top" font="SansSerif" height="90"
59 is_unicode="false" left="11" max_length="254" mouse_opaque="true" 59 is_unicode="false" left="11" max_length="254" mouse_opaque="true"
60 name="proposal_text" width="289" word_wrap="true" /> 60 name="proposal_text" width="289" word_wrap="true" spell_check="true" />
61 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" 61 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
62 height="20" label="View List" label_selected="View List" left="304" 62 height="20" label="View List" label_selected="View List" left="304"
63 mouse_opaque="true" name="btn_view_proposal_list" width="101" /> 63 mouse_opaque="true" name="btn_view_proposal_list" width="101" />
@@ -180,7 +180,7 @@ vote on open proposals, and view old proposals.
180 hide_scrollbar="true" is_unicode="false" left="10" max_length="1024" 180 hide_scrollbar="true" is_unicode="false" left="10" max_length="1024"
181 mouse_opaque="true" name="vote_text" 181 mouse_opaque="true" name="vote_text"
182 text_wrap="true" v_pad="0" 182 text_wrap="true" v_pad="0"
183 width="396" word_wrap="false" /> 183 width="396" word_wrap="false" spell_check="true" />
184 <button bottom_delta="-25" follows="top" font="SansSerif" halign="center" height="20" 184 <button bottom_delta="-25" follows="top" font="SansSerif" halign="center" height="20"
185 label="View List" label_selected="View List" left="287" mouse_opaque="true" 185 label="View List" label_selected="View List" left="287" mouse_opaque="true"
186 name="btn_view_history_list" width="120" /> 186 name="btn_view_history_list" width="120" />
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_place.xml b/linden/indra/newview/skins/default/xui/en-us/panel_place.xml
index d50aa53..96d9dd5 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_place.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_place.xml
@@ -14,7 +14,7 @@
14 </text> 14 </text>
15 <text_editor bottom_delta="-68" enabled="false" follows="left|top" 15 <text_editor bottom_delta="-68" enabled="false" follows="left|top"
16 font="SansSerif" height="70" left="20" max_length="1023" name="desc_editor" 16 font="SansSerif" height="70" left="20" max_length="1023" name="desc_editor"
17 width="400" word_wrap="true" /> 17 width="400" word_wrap="true" spell_check="true" />
18 <text bottom_delta="-25" follows="left|top" font="SansSerif" height="20" left="20" name="information_label"> 18 <text bottom_delta="-25" follows="left|top" font="SansSerif" height="20" left="20" name="information_label">
19 Information: 19 Information:
20 </text> 20 </text>
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_place_small.xml b/linden/indra/newview/skins/default/xui/en-us/panel_place_small.xml
index 94024f9..64ab9f3 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_place_small.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_place_small.xml
@@ -14,7 +14,7 @@
14 </text> 14 </text>
15 <text_editor bg_readonly_color="clear" bottom_delta="-68" enabled="false" follows="left|top" 15 <text_editor bg_readonly_color="clear" bottom_delta="-68" enabled="false" follows="left|top"
16 font="SansSerif" height="70" left="20" max_length="1023" name="desc_editor" 16 font="SansSerif" height="70" left="20" max_length="1023" name="desc_editor"
17 width="360" word_wrap="true" /> 17 width="360" word_wrap="true" spell_check="true" />
18 <text bottom_delta="-20" follows="left|top" font="SansSerif" height="20" left="20" name="information_label"> 18 <text bottom_delta="-20" follows="left|top" font="SansSerif" height="20" left="20" name="information_label">
19 Information: 19 Information:
20 </text> 20 </text>
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_advanced.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_advanced.xml
index cac3ef1..a0c9e28 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_advanced.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_advanced.xml
@@ -138,39 +138,46 @@
138 <button bottom="-25" follows="left|top" font="SansSerifSmall" height="18" label="?" 138 <button bottom="-25" follows="left|top" font="SansSerifSmall" height="18" label="?"
139 name="EmeraldHelp_SpellCheck" tool_tip="Click here for help regarding the settings in this page." 139 name="EmeraldHelp_SpellCheck" tool_tip="Click here for help regarding the settings in this page."
140 right="490" width="18"/> 140 right="490" width="18"/>
141 <text bottom="-20" follows="left|top" font="SansSerifSmall" height="16" left="210" 141 <check_box bottom="-25" enabled="true" follows="left|top" font="SansSerifSmall" height="16"
142 name="EmSpell_txt1" width="512">Base Language</text> 142 label="Show misspelled words in red (requires restart)" left="12" mouse_opaque="true" name="EmeraldSpellDisplay"
143 <combo_box allow_text_entry="false" bottom_delta="-20" left_delta="-110" follows="left|top" height="18" 143 control_name="EmeraldSpellDisplay" width="126"/>
144 max_chars="200" mouse_opaque="true" name="EmeraldSpellBase" width="300" 144 <text bottom_delta="-30" follows="left|top" font="SansSerifSmall" height="16" left="12"
145 name="EmSpell_txt1" width="512">
146 Current language (dictionary):
147 </text>
148 <combo_box allow_text_entry="false" bottom_delta="-20" left_delta="0" follows="left|top" height="18"
149 max_chars="200" mouse_opaque="true" name="EmeraldSpellBase" width="250"
145 control_name="EmeraldSpellBase" tool_tip=""/> 150 control_name="EmeraldSpellBase" tool_tip=""/>
146 <text bottom_delta="-30" follows="left|top" font="SansSerifSmall" height="16" left="5" 151 <text bottom_delta="-30" follows="left|top" font="SansSerifSmall" height="16" left="12"
147 name="EmSpell_txt2" width="512">Additional installed dictionaries</text> 152 name="EmSpell_txt3" width="512">
153 Downloaded languages (dictionaries):
154 </text>
148 <combo_box allow_text_entry="false" bottom_delta="-20" left_delta="0" follows="left|top" height="18" 155 <combo_box allow_text_entry="false" bottom_delta="-20" left_delta="0" follows="left|top" height="18"
149 max_chars="200" mouse_opaque="true" name="EmSpell_Installed" width="180" 156 max_chars="200" mouse_opaque="true" name="EmSpell_Avail" width="250"
150 control_name="EmSpell_Installed" tool_tip=""/>
151 <button bottom_delta="-0" follows="left|top" font="SansSerifSmall" height="18" label="Remove"
152 name="EmSpell_Remove" tool_tip="" left_delta="182" width="60"/>
153 <text bottom_delta="20" follows="left|top" font="SansSerifSmall" height="16" left="270"
154 name="EmSpell_txt3" width="512">Available dictionaries</text>
155 <combo_box allow_text_entry="false" bottom_delta="-20" left_delta="-10" follows="left|top" height="18"
156 max_chars="200" mouse_opaque="true" name="EmSpell_Avail" width="180"
157 control_name="EmSpell_Avail" tool_tip=""/> 157 control_name="EmSpell_Avail" tool_tip=""/>
158 <button bottom_delta="-0" follows="left|top" font="SansSerifSmall" height="18" label="Install" 158 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" height="20" label="Install"
159 name="EmSpell_Add" tool_tip="" left_delta="182" width="50"/> 159 name="EmSpell_Add" tool_tip="" left_delta="255" width="80"/>
160 <button bottom_delta="20" follows="left|top" font="SansSerifSmall" height="18" label="Get More!" 160 <button bottom_delta="-22" follows="left|top" font="SansSerifSmall" height="20" label="Download More..."
161 name="EmSpell_GetMore" tool_tip="" left_delta="-20" width="70"/> 161 name="EmSpell_GetMore" tool_tip="Get more dictionaries availabe online" left="12" width="250"/>
162 <check_box bottom_delta="-50" enabled="true" follows="left|top" font="SansSerifSmall" height="16" 162 <text bottom_delta="-30" follows="left|top" font="SansSerifSmall" height="16" left="12"
163 label="Show misspelled words in red (requires restart)" left="5" mouse_opaque="true" name="EmeraldSpellDisplay" 163 name="EmSpell_txt2" width="512">
164 control_name="EmeraldSpellDisplay" width="126"/> 164 Additional custom languages (dictionaries):
165 </text>
166 <combo_box allow_text_entry="false" bottom_delta="-20" left_delta="0" follows="left|top" height="18"
167 max_chars="200" mouse_opaque="true" name="EmSpell_Installed" width="250"
168 control_name="EmSpell_Installed" tool_tip=""/>
169 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" height="20" label="Remove"
170 name="EmSpell_Remove" tool_tip="" left_delta="255" width="80"/>
165 <!--<button bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="18" label="Edit Custom dictionary" 171 <!--<button bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="18" label="Edit Custom dictionary"
166 name="EmSpell_EditCustom" tool_tip="" left_delta="20" width="130"/>--> 172 name="EmSpell_EditCustom" tool_tip="" left_delta="20" width="130"/>-->
167 <text bottom_delta="-30" follows="left|top" font="SansSerifSmall" height="16" left="5" 173 <text bottom_delta="-30" follows="left|top" font="SansSerifSmall" height="16" left="12"
168 name="EmSpell_txt4" width="512"> 174 name="EmSpell_txt4" width="512">
169 To spellcheck, right click a misspelled word 175To use spellcheck, right-click a misspelled word
170 (red or not) and click on its replacement 176(red or otherwise) and select its replacement
171 </text> 177 </text>
172 <button name="ac_button" label="AutoCorrect Options…" halign="center" tool_tip="Modify the AutoCorrect word list and settings" left="5" 178 <button name="ac_button" label="AutoCorrect Options..." halign="center"
173 bottom_delta="-64" width="180" height="20" font="SansSerifSmall" follows="left|top"/> 179 tool_tip="Modify the AutoCorrect word list and settings" left="12"
180 bottom_delta="-50" width="180" height="20" font="SansSerifSmall" follows="left|top"/>
174 </panel> 181 </panel>
175 182
176 <panel border="true" bottom="-580" follows="left|top|right|bottom" height="525" label="Extra" 183 <panel border="true" bottom="-580" follows="left|top|right|bottom" height="525" label="Extra"
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_im.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_im.xml
index c2b8c2b..bb5002b 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_im.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_im.xml
@@ -61,7 +61,7 @@
61 </text> 61 </text>
62 <text_editor type="string" length="1" bottom_delta="-60" embedded_items="false" enabled="true" follows="left|top" 62 <text_editor type="string" length="1" bottom_delta="-60" embedded_items="false" enabled="true" follows="left|top"
63 font="SansSerifSmall" height="70" left="148" max_length="255" 63 font="SansSerifSmall" height="70" left="148" max_length="255"
64 mouse_opaque="true" name="busy_response" width="330" word_wrap="true" /> 64 mouse_opaque="true" name="busy_response" width="330" word_wrap="true" spell_check="true" />
65 <button bottom_delta="-25" follows="top|right" height="22" label="IM Response Options" 65 <button bottom_delta="-25" follows="top|right" height="22" label="IM Response Options"
66 left="164" name="busy_adv_btn" tool_tip="Instant message Auto-Response options" 66 left="164" name="busy_adv_btn" tool_tip="Instant message Auto-Response options"
67 width="180" /> 67 width="180" />
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_region_covenant.xml b/linden/indra/newview/skins/default/xui/en-us/panel_region_covenant.xml
index 5e28bdc..9bbdbd3 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_region_covenant.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_region_covenant.xml
@@ -48,7 +48,7 @@
48 <text_editor type="string" length="1" bottom="-279" embedded_items="false" enabled="false" 48 <text_editor type="string" length="1" bottom="-279" embedded_items="false" enabled="false"
49 follows="left|top" font="SansSerifSmall" height="194" 49 follows="left|top" font="SansSerifSmall" height="194"
50 left="120" max_length="65535" mouse_opaque="true" name="covenant_editor" 50 left="120" max_length="65535" mouse_opaque="true" name="covenant_editor"
51 width="340" word_wrap="true"> 51 width="340" word_wrap="true" spell_check="true">
52 There is no Covenant provided for this Estate. 52 There is no Covenant provided for this Estate.
53 </text_editor> 53 </text_editor>
54 <button bottom_delta="-25" follows="left|top" font="SansSerifSmall" height="18" 54 <button bottom_delta="-25" follows="left|top" font="SansSerifSmall" height="18"
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_status_bar.xml b/linden/indra/newview/skins/default/xui/en-us/panel_status_bar.xml
index 1ef815e..46ba64a 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_status_bar.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_status_bar.xml
@@ -96,8 +96,8 @@
96 font="SansSerifSmall" handle_edit_keys_directly="false" height="11" 96 font="SansSerifSmall" handle_edit_keys_directly="false" height="11"
97 label="Search" left="-94" max_length="254" mouse_opaque="true" 97 label="Search" left="-94" max_length="254" mouse_opaque="true"
98 name="search_editor" select_all_on_focus_received="false" 98 name="search_editor" select_all_on_focus_received="false"
99 select_on_focus="false" tab_group="1" tool_tip="Search Second Life" 99 select_on_focus="false" tab_group="1" tool_tip="Inworld search"
100 width="78"/> 100 width="78" spell_check="true"/>
101 <button bottom="-17" enabled="true" follows="right|bottom" font="SansSerifSmall" 101 <button bottom="-17" enabled="true" follows="right|bottom" font="SansSerifSmall"
102 halign="center" height="16" image_unselected="status_search_btn.png" image_selected="status_search_btn_pressed.png" image_disabled_selected="status_search_btn_pressed.png" image_disabled="status_search_btn.png" 102 halign="center" height="16" image_unselected="status_search_btn.png" image_selected="status_search_btn_pressed.png" image_disabled_selected="status_search_btn_pressed.png" image_disabled="status_search_btn.png"
103 label="" label_selected="" left="-16" mouse_opaque="true" name="search_btn" 103 label="" label_selected="" left="-16" mouse_opaque="true" name="search_btn"
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_top_pick.xml b/linden/indra/newview/skins/default/xui/en-us/panel_top_pick.xml
index 03d0919..85ad350 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_top_pick.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_top_pick.xml
@@ -8,7 +8,7 @@
8 width="400" /> 8 width="400" />
9 <text_editor enabled="false" follows="left|top" font="SansSerif" 9 <text_editor enabled="false" follows="left|top" font="SansSerif"
10 height="90" left="20" max_length="1023" name="desc_editor" 10 height="90" left="20" max_length="1023" name="desc_editor"
11 width="400" word_wrap="true" /> 11 width="400" word_wrap="true" spell_check="true" />
12 <line_editor enabled="false" follows="left|top" font="SansSerif" 12 <line_editor enabled="false" follows="left|top" font="SansSerif"
13 height="20" left="20" name="location_editor" 13 height="20" left="20" name="location_editor"
14 width="400" /> 14 width="400" />
@@ -23,7 +23,7 @@
23 Sort: 23 Sort:
24 </text> 24 </text>
25 <line_editor bottom_delta="5" follows="left|top" height="16" left="320" 25 <line_editor bottom_delta="5" follows="left|top" height="16" left="320"
26 name="sort_order_editor" width="25" /> 26 name="sort_order_editor" width="25" spell_check="true" />
27 <check_box bottom_delta="0" follows="left|top" height="20" label="Enabled" left="360" 27 <check_box bottom_delta="0" follows="left|top" height="20" label="Enabled" left="360"
28 name="enabled_check" width="80" /> 28 name="enabled_check" width="80" />
29</panel> 29</panel>
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_voice_enable.xml b/linden/indra/newview/skins/default/xui/en-us/panel_voice_enable.xml
deleted file mode 100644
index a5de96c..0000000
--- a/linden/indra/newview/skins/default/xui/en-us/panel_voice_enable.xml
+++ /dev/null
@@ -1,37 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel border="false" bottom="4" enabled="true" height="240" left="8"
3 mouse_opaque="true" name="content_panel" width="404">
4 <text_editor type="string" length="1" allow_html="false" bg_readonly_color="0 0 0 0" embedded_items="false"
5 enabled="false" font="SansSerifSmall" height="85" hide_border="true"
6 hide_scrollbar="true" left_delta="0" max_length="65535" mouse_opaque="true"
7 name="voice_intro_text1" tab_stop="false" width="400" word_wrap="true">
8 Welcome to Second Life Voice Chat! Voice Chat enables you to speak with other Residents. This wizard will guide you through the steps necessary to set up Voice Chat. Using Voice Chat requires audio speakers and, if you wish to speak with others, a microphone or stereo headset with microphone.
9 </text_editor>
10 <text_editor type="string" length="1" allow_html="false" bg_readonly_color="0 0 0 0" embedded_items="false"
11 enabled="false" font="SansSerifSmall" height="50" hide_border="true"
12 hide_scrollbar="true" left_delta="0" max_length="65535" mouse_opaque="true"
13 name="voice_intro_text2" tab_stop="false" width="400" word_wrap="true">
14 Voice Chat is enabled by default. Do you wish to continue using Voice Chat?
15 </text_editor>
16 <radio_group bottom_delta="-30" draw_border="false" enabled="true" follows="left|top"
17 height="40" left="10" mouse_opaque="true" name="voice_enable" width="364">
18 <radio_item type="string" length="1" bottom="-19" follows="left|top" height="16" left="3" name="1" width="315">
19 Yes, continue using Voice Chat.
20 </radio_item>
21 <radio_item type="string" length="1" bottom="-35" follows="left|top" height="16" left="3" name="0" width="315">
22 No, disable Voice Chat.
23 </radio_item>
24 </radio_group>
25 <text_editor length="1" allow_html="false" bg_readonly_color="0 0 0 0" bottom_delta="-50"
26 embedded_items="false" enabled="false" font="SansSerifSmall" height="40"
27 hide_border="true" hide_scrollbar="true" left="0" max_length="65535"
28 name="voice_intro_text3" tab_stop="false" width="400" word_wrap="true">
29 You can enable Voice Chat at any time by going to the Voice Chat tab in Preferences.
30 </text_editor>
31 <text_editor length="1" allow_html="false" bg_readonly_color="0 0 0 0" bottom_delta="0"
32 embedded_items="false" enabled="false" font="SansSerifSmall" height="40"
33 hide_border="true" hide_scrollbar="true" left="0" max_length="65535"
34 name="voice_intro_text4" tab_stop="false" width="400" word_wrap="true">
35 Click the Next button to configure Voice Chat preferences or click Finish to continue using Second Life.
36 </text_editor>
37</panel> \ No newline at end of file
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_voice_options.xml b/linden/indra/newview/skins/default/xui/en-us/panel_voice_options.xml
deleted file mode 100644
index 4c6edfd..0000000
--- a/linden/indra/newview/skins/default/xui/en-us/panel_voice_options.xml
+++ /dev/null
@@ -1,43 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel border="false" bottom="36" height="240" left="8" name="content_panel"
3 width="404">
4 <text_editor type="string" length="1" allow_html="false" bg_readonly_color="0 0 0 0" embedded_items="false"
5 enabled="false" font="SansSerifSmall" height="30" hide_border="true"
6 hide_scrollbar="true" left_delta="0" max_length="65535"
7 name="voice_intro_text1" tab_stop="false" width="414" word_wrap="true">
8 Use the options below to configure your Voice Chat experience.
9 </text_editor>
10 <radio_group bottom_delta="-40" draw_border="false" follows="left|top" height="40" left="10"
11 name="ear_location" width="364">
12 <radio_item type="string" length="1" bottom="-19" follows="left|top" height="16" left="3" name="0" width="315">
13 Hear Voice Chat from camera position.
14 </radio_item>
15 <radio_item type="string" length="1" bottom="-35" follows="left|top" height="16" left="3" name="1" width="315">
16 Hear Voice Chat from avatar position.
17 </radio_item>
18 </radio_group>
19 <check_box bottom_delta="-20" control_name="VoiceCallsFriendsOnly" follows="left|top"
20 font="SansSerifSmall" height="16" initial_value="false"
21 label="Only allow Friends to initiate Voice Calls with me" left="20"
22 left_delta="2" name="friends_only_check" width="200" />
23 <check_box bottom_delta="-20" control_name="PushToTalkToggle" follows="left|top"
24 font="SansSerifSmall" height="16" initial_value="false"
25 label="Use Push-to-Talk in toggle mode" left_delta="0"
26 name="push_to_talk_toggle_check" width="200" />
27 <text type="string" length="1" allow_html="false" bg_readonly_color="0 0 0 0" bottom_delta="-20"
28 embedded_items="false" follows="left|top" font="SansSerifSmall" height="16"
29 hide_border="true" hide_scrollbar="true" left_delta="4" max_length="65535"
30 name="push_to_talk_label" width="445" word_wrap="true">
31 Push-to-Talk trigger:
32 </text>
33 <line_editor border_drop_shadow_visible="false" border_visible="false" bottom_delta="-20"
34 control_name="PushToTalkButton" drop_shadow_visible="true" enabled="false"
35 follows="top|left" font="SansSerifSmall" halign="right" height="19"
36 left_delta="0" max_length="254" name="modifier_combo" width="280" />
37 <button bottom_delta="-25" follows="left|top" font="SansSerif" halign="center"
38 height="20" label="Set Key" left_delta="0" name="set_voice_hotkey_button"
39 width="115" />
40 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
41 height="20" label="Middle Mouse Button" left_delta="120"
42 name="set_voice_middlemouse_button" width="160" />
43</panel>