diff options
author | Henry Castro <hcastro@collabora.com> | 2017-10-19 22:47:17 -0400 |
---|---|---|
committer | Henry Castro <hcastro@collabora.com> | 2017-10-22 17:18:17 +0200 |
commit | 2fa424f40a185eb43d862a29abce07345695fcf3 (patch) | |
tree | 6d770158526a66d893e171cf56d53a31a6d1fcc6 /sc/source/ui/docshell | |
parent | 2460e7637f635727f4596f3e3d799eed434df082 (diff) |
sc lok: fix spell checking languages in Calc
Change-Id: Iadcc3b55a30ce2a2c785366fb3807ff6e4bda1fe
Reviewed-on: https://gerrit.libreoffice.org/43581
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Henry Castro <hcastro@collabora.com>
Diffstat (limited to 'sc/source/ui/docshell')
-rw-r--r-- | sc/source/ui/docshell/docsh4.cxx | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/sc/source/ui/docshell/docsh4.cxx b/sc/source/ui/docshell/docsh4.cxx index 2067d04761e7..8cfb5fc81a2a 100644 --- a/sc/source/ui/docshell/docsh4.cxx +++ b/sc/source/ui/docshell/docsh4.cxx @@ -30,11 +30,13 @@ using namespace ::com::sun::star; #include "scitems.hxx" #include <editeng/flstitem.hxx> +#include <editeng/langitem.hxx> #include <sfx2/fcontnr.hxx> #include <sfx2/linkmgr.hxx> #include <sfx2/objface.hxx> #include <sfx2/docfile.hxx> #include <svtools/ehdl.hxx> +#include <svtools/langtab.hxx> #include <basic/sbxcore.hxx> #include <basic/sberrors.hxx> #include <svtools/sfxecode.hxx> @@ -52,6 +54,7 @@ using namespace ::com::sun::star; #include <svl/PasswordHelper.hxx> #include <svl/documentlockfile.hxx> #include <svl/sharecontrolfile.hxx> +#include <svl/slstitm.hxx> #include <unotools/securityoptions.hxx> #include <LibreOfficeKit/LibreOfficeKitEnums.h> @@ -1120,6 +1123,83 @@ void ScDocShell::Execute( SfxRequest& rReq ) sfx2::SfxNotebookBar::CloseMethod(*pBindings); } break; + case SID_LANGUAGE_STATUS: + { + sal_Int32 nPos = 0; + OUString aLangText; + const SfxStringItem* pItem = rReq.GetArg<SfxStringItem>(nSlot); + if ( pItem ) + aLangText = pItem->GetValue(); + + if ( !aLangText.isEmpty() ) + { + LanguageType eLang, eLatin, eCjk, eCtl; + const OUString aDocLangPrefix("Default_"); + const OUString aNoLang("LANGUAGE_NONE"); + const OUString aResetLang("RESET_LANGUAGES"); + + ScDocument& rDoc = GetDocument(); + rDoc.GetLanguage( eLatin, eCjk, eCtl ); + + if ( aLangText == "*" ) + { + SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create(); + if (pFact) + { + ScopedVclPtr<VclAbstractDialog> pDlg(pFact->CreateVclDialog(GetActiveDialogParent(), SID_LANGUAGE_OPTIONS)); + pDlg->Execute(); + } + + rDoc.GetLanguage( eLang, eCjk, eCtl ); + } + else if ( (nPos = aLangText.indexOf(aDocLangPrefix)) != -1 ) + { + aLangText = aLangText.replaceAt(nPos, aDocLangPrefix.getLength(), ""); + + if ( aLangText == aNoLang ) + { + eLang = LANGUAGE_NONE; + rDoc.SetLanguage( eLang, eCjk, eCtl ); + } + else if ( aLangText == aResetLang ) + { + bool bAutoSpell; + + ScModule::GetSpellSettings(eLang, eCjk, eCtl, bAutoSpell); + rDoc.SetLanguage(eLang, eCjk, eCtl); + } + else + { + eLang = SvtLanguageTable::GetLanguageType( aLangText ); + if ( eLang != LANGUAGE_DONTKNOW && SvtLanguageOptions::GetScriptTypeOfLanguage(eLang) == SvtScriptType::LATIN ) + { + rDoc.SetLanguage( eLang, eCjk, eCtl ); + } + else + { + eLang = eLatin; + } + } + } + + if ( eLang != eLatin ) + { + if ( ScTabViewShell* pViewSh = ScTabViewShell::GetActiveViewShell() ) + { + ScInputHandler* pInputHandler = SC_MOD()->GetInputHdl(pViewSh); + if ( pInputHandler ) + pInputHandler->UpdateSpellSettings(); + + pViewSh->UpdateDrawTextOutliner(); + } + + SetDocumentModified(); + Broadcast(SfxHint(SfxHintId::LanguageChanged)); + PostPaintGridAll(); + } + } + } + break; default: { // small (?) hack -> forwarding of the slots to TabViewShell @@ -1881,6 +1961,15 @@ void ScDocShell::GetState( SfxItemSet &rSet ) } break; + case SID_LANGUAGE_STATUS: + { + LanguageType eLatin, eCjk, eCtl; + + GetDocument().GetLanguage( eLatin, eCjk, eCtl ); + rSet.Put(SfxStringItem(nWhich, SvtLanguageTable::GetLanguageString(eLatin))); + } + break; + default: { } |