summaryrefslogtreecommitdiff
path: root/framework/source
diff options
context:
space:
mode:
authorRüdiger Timm <rt@openoffice.org>2008-01-29 15:09:41 +0000
committerRüdiger Timm <rt@openoffice.org>2008-01-29 15:09:41 +0000
commit282c75becd801620eaa0946ae5389d8cd73fb2eb (patch)
treec370e86aeb5bbc0eaca1f74e7ce4ad4e8f21b2a2 /framework/source
parentb421533c4a1fa1d071b774feead323f46c66d811 (diff)
INTEGRATION: CWS fwk82_SRC680 (1.2.24); FILE MERGED
2008/01/15 08:33:01 tl 1.2.24.1: #i85162#, #i84940#, #i84939# fix language guessing and disbale menus for non-text content
Diffstat (limited to 'framework/source')
-rw-r--r--framework/source/uielement/langselectionmenucontroller.cxx70
-rw-r--r--framework/source/uielement/langselectionstatusbarcontroller.cxx37
2 files changed, 75 insertions, 32 deletions
diff --git a/framework/source/uielement/langselectionmenucontroller.cxx b/framework/source/uielement/langselectionmenucontroller.cxx
index 0c96c572a26b..ee637460a90b 100644
--- a/framework/source/uielement/langselectionmenucontroller.cxx
+++ b/framework/source/uielement/langselectionmenucontroller.cxx
@@ -4,9 +4,9 @@
*
* $RCSfile: langselectionmenucontroller.cxx,v $
*
- * $Revision: 1.2 $
+ * $Revision: 1.3 $
*
- * last change: $Author: ihi $ $Date: 2007-11-23 16:47:08 $
+ * last change: $Author: rt $ $Date: 2008-01-29 16:09:25 $
*
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1.
@@ -103,6 +103,10 @@
#include <com/sun/star/awt/XMenuExtended.hpp>
#endif
+#ifndef _COMPHELPER_PROCESSFACTORY_HXX_
+#include <comphelper/processfactory.hxx>
+#endif
+
#include <com/sun/star/document/XDocumentLanguages.hpp>
#include <com/sun/star/frame/XPopupMenuController.hpp>
#include <com/sun/star/linguistic2/XLanguageGuessing.hpp>
@@ -148,8 +152,20 @@ DEFINE_XSERVICEINFO_MULTISERVICE ( LanguageSelectionMenuController
DEFINE_INIT_SERVICE ( LanguageSelectionMenuController, {} )
LanguageSelectionMenuController::LanguageSelectionMenuController( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceManager ) :
- PopupMenuControllerBase( xServiceManager )
+ PopupMenuControllerBase( xServiceManager ),
+ m_bShowMenu( sal_True )
{
+ if (!m_xLanguageGuesser.is())
+ {
+ uno::Reference< lang::XMultiServiceFactory > xMgr ( comphelper::getProcessServiceFactory() );
+ if (xMgr.is())
+ {
+ m_xLanguageGuesser = uno::Reference< linguistic2::XLanguageGuessing >(
+ xMgr->createInstance(
+ rtl::OUString::createFromAscii( "com.sun.star.linguistic2.LanguageGuessing" ) ),
+ uno::UNO_QUERY );
+ }
+ }
}
LanguageSelectionMenuController::~LanguageSelectionMenuController()
@@ -180,7 +196,8 @@ void SAL_CALL LanguageSelectionMenuController::statusChanged( const FeatureState
if ( m_bDisposed )
return;
- nScriptType=7;//set the default value
+ m_bShowMenu = sal_True;
+ m_nScriptType=7;//set the default value
rtl::OUString aStrValue;
Sequence< ::rtl::OUString > aSeq;
@@ -195,15 +212,15 @@ void SAL_CALL LanguageSelectionMenuController::statusChanged( const FeatureState
{
// Retrieve all other values from the sequence and
// store it members!
- curLang=aSeq[0];
- nScriptType= static_cast< sal_Int16 >(aSeq[1].toInt32());
- keyboardLang=aSeq[2];
- guessedText=aSeq[3];
+ m_aCurLang=aSeq[0];
+ m_nScriptType= static_cast< sal_Int16 >(aSeq[1].toInt32());
+ m_aKeyboardLang=aSeq[2];
+ m_aGuessedText=aSeq[3];
}
}
else if ( !Event.State.hasValue() )
{
-
+ m_bShowMenu = sal_False; // no language -> no sub-menu entries -> disable menu
}
}
@@ -345,6 +362,9 @@ void LanguageSelectionMenuController::fillPopupMenu( Reference< css::awt::XPopup
vos::OGuard aSolarMutexGuard( Application::GetSolarMutex() );
resetPopupMenu( rPopupMenu );
+ if (!m_bShowMenu)
+ return;
+
if ( pVCLPopupMenu )
pPopupMenu = (PopupMenu *)pVCLPopupMenu->GetMenu();
@@ -374,9 +394,9 @@ void LanguageSelectionMenuController::fillPopupMenu( Reference< css::awt::XPopup
USHORT nItemId = 1;
//1--add current language
- if(curLang!=OUString::createFromAscii(""))
+ if(m_aCurLang!=OUString::createFromAscii(""))
{
- LangItems[curLang]=curLang;
+ LangItems[m_aCurLang]=m_aCurLang;
}
SvtLanguageTable aLangTable;
@@ -385,7 +405,7 @@ void LanguageSelectionMenuController::fillPopupMenu( Reference< css::awt::XPopup
LanguageType rSystemLanguage = rAllSettings.GetLanguage();
if(rSystemLanguage!=LANGUAGE_DONTKNOW)
{
- if (lcl_checkScriptType(nScriptType,rSystemLanguage ))
+ if (lcl_checkScriptType(m_nScriptType,rSystemLanguage ))
LangItems[OUString(aLangTable.GetString(rSystemLanguage))]=OUString(aLangTable.GetString(rSystemLanguage));
}
@@ -393,25 +413,25 @@ void LanguageSelectionMenuController::fillPopupMenu( Reference< css::awt::XPopup
LanguageType rUILanguage = rAllSettings.GetUILanguage();
if(rUILanguage!=LANGUAGE_DONTKNOW)
{
- if (lcl_checkScriptType(nScriptType, rUILanguage ))
+ if (lcl_checkScriptType(m_nScriptType, rUILanguage ))
LangItems[OUString(aLangTable.GetString(rUILanguage))]=OUString(aLangTable.GetString(rUILanguage));
}
//4--guessed language
- uno::Reference< linguistic2::XLanguageGuessing > xLangGuess;
- if (xLangGuess.is() && guessedText!=OUString::createFromAscii(""))
+ if (m_xLanguageGuesser.is() && m_aGuessedText.getLength() > 0)
{
- ::com::sun::star::lang::Locale aLocale(xLangGuess->guessPrimaryLanguage( guessedText, 0, guessedText.getLength()) );
+ ::com::sun::star::lang::Locale aLocale(m_xLanguageGuesser->guessPrimaryLanguage( m_aGuessedText, 0, m_aGuessedText.getLength()) );
LanguageType nLang = MsLangId::convertLocaleToLanguageWithFallback( aLocale );
- if((nLang!=LANGUAGE_DONTKNOW) && (lcl_checkScriptType(nScriptType, nLang )))
- LangItems[keyboardLang]=aLangTable.GetString(nLang);
+ if ((nLang != LANGUAGE_DONTKNOW) && (nLang != LANGUAGE_NONE) && (nLang != LANGUAGE_SYSTEM)
+ && (lcl_checkScriptType( m_nScriptType, nLang )))
+ LangItems[aLangTable.GetString(nLang)]=aLangTable.GetString(nLang);
}
//5--keyboard language
- if(keyboardLang!=OUString::createFromAscii(""))
+ if(m_aKeyboardLang!=OUString::createFromAscii(""))
{
- if (lcl_checkScriptType(nScriptType, aLanguageTable.GetType(keyboardLang)))
- LangItems[keyboardLang]=keyboardLang;
+ if (lcl_checkScriptType(m_nScriptType, aLanguageTable.GetType(m_aKeyboardLang)))
+ LangItems[m_aKeyboardLang] = m_aKeyboardLang;
}
//6--all languages used in current document
@@ -423,7 +443,7 @@ void LanguageSelectionMenuController::fillPopupMenu( Reference< css::awt::XPopup
xModel = xController->getModel();
}
Reference< document::XDocumentLanguages > xDocumentLanguages( xModel, UNO_QUERY );
- /*the description of nScriptType
+ /*the description of m_nScriptType
LATIN : 1
ASIAN : 2
COMPLEX:4
@@ -436,7 +456,7 @@ void LanguageSelectionMenuController::fillPopupMenu( Reference< css::awt::XPopup
sal_Int16 nCount=7;
if(xDocumentLanguages.is())
{
- Sequence< Locale > rLocales(xDocumentLanguages->getDocumentLanguages(nScriptType,nCount));
+ Sequence< Locale > rLocales(xDocumentLanguages->getDocumentLanguages(m_nScriptType,nCount));
if(rLocales.getLength()>0)
{
for(USHORT i = 0; i<rLocales.getLength();++i)
@@ -444,7 +464,7 @@ void LanguageSelectionMenuController::fillPopupMenu( Reference< css::awt::XPopup
if (LangItems.size()==7)
break;
const Locale& rLocale=rLocales[i];
- if(lcl_checkScriptType(nScriptType, aLanguageTable.GetType(rLocale.Language)))
+ if(lcl_checkScriptType(m_nScriptType, aLanguageTable.GetType(rLocale.Language)))
LangItems[OUString(rLocale.Language)]=OUString(rLocale.Language);
}
}
@@ -460,7 +480,7 @@ void LanguageSelectionMenuController::fillPopupMenu( Reference< css::awt::XPopup
++nItemId;
pPopupMenu->InsertItem( nItemId,it->first);
LangTable[nItemId] = it->first;
- if(it->first == curLang && eMode == MODE_SetLanguageSelectionMenu )
+ if(it->first == m_aCurLang && eMode == MODE_SetLanguageSelectionMenu )
{
//make a sign for the current language
pPopupMenu->CheckItem(nItemId,TRUE);
diff --git a/framework/source/uielement/langselectionstatusbarcontroller.cxx b/framework/source/uielement/langselectionstatusbarcontroller.cxx
index f22d3f36a51f..4594a48acbbc 100644
--- a/framework/source/uielement/langselectionstatusbarcontroller.cxx
+++ b/framework/source/uielement/langselectionstatusbarcontroller.cxx
@@ -4,9 +4,9 @@
*
* $RCSfile: langselectionstatusbarcontroller.cxx,v $
*
- * $Revision: 1.2 $
+ * $Revision: 1.3 $
*
- * last change: $Author: ihi $ $Date: 2007-11-23 16:47:20 $
+ * last change: $Author: rt $ $Date: 2008-01-29 16:09:41 $
*
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1.
@@ -109,6 +109,10 @@
#include <com/sun/star/util/XURLTransformer.hpp>
#endif
+#ifndef _COMPHELPER_PROCESSFACTORY_HXX_
+#include <comphelper/processfactory.hxx>
+#endif
+
#include <toolkit/unohlp.hxx>
#include <tools/gen.hxx>
#include <com/sun/star/awt/Command.hpp>
@@ -137,8 +141,20 @@ DEFINE_INIT_SERVICE ( LangSelectionStatusbarController, {}
LangSelectionStatusbarController::LangSelectionStatusbarController( const uno::Reference< lang::XMultiServiceFactory >& xServiceManager ) :
svt::StatusbarController( xServiceManager, uno::Reference< frame::XFrame >(), rtl::OUString(), 0 ),
+ m_bShowMenu( sal_True ),
m_nScriptType( 7 )
{
+ if (!m_xLanguageGuesser.is())
+ {
+ uno::Reference< lang::XMultiServiceFactory > xMgr ( comphelper::getProcessServiceFactory() );
+ if (xMgr.is())
+ {
+ m_xLanguageGuesser = uno::Reference< linguistic2::XLanguageGuessing >(
+ xMgr->createInstance(
+ rtl::OUString::createFromAscii( "com.sun.star.linguistic2.LanguageGuessing" ) ),
+ uno::UNO_QUERY );
+ }
+ }
}
// XInterface
@@ -220,6 +236,9 @@ bool checkScriptType( sal_Int16 nScriptType, LanguageType nLang )
void LangSelectionStatusbarController::LangMenu()throw (::com::sun::star::uno::RuntimeException)
{
+ if (!m_bShowMenu)
+ return;
+
//add context menu
Reference< awt::XPopupMenu > xPopupMenu( m_xServiceManager->createInstance( ::rtl::OUString::createFromAscii( "com.sun.star.awt.PopupMenu" ) ), UNO_QUERY );
//sub menu that contains all items except the last two items: Separator + Set Language for Paragraph
@@ -231,7 +250,8 @@ void LangSelectionStatusbarController::LangMenu()throw (::com::sun::star::uno::R
USHORT nItemId=1;
//1--add current language
- if( m_aCurLang != OUString::createFromAscii( "" ))
+ if( m_aCurLang != OUString::createFromAscii( "" ) &&
+ LANGUAGE_DONTKNOW != aLanguageTable.GetType( m_aCurLang ))
LangItems.insert( m_aCurLang );
//2--System
@@ -253,12 +273,12 @@ void LangSelectionStatusbarController::LangMenu()throw (::com::sun::star::uno::R
}
//4--guessed language
- uno::Reference< linguistic2::XLanguageGuessing > xLangGuess;
- if ( xLangGuess.is() && m_aGuessedText!=OUString::createFromAscii( "" ))
+ if ( m_xLanguageGuesser.is() && m_aGuessedText.getLength() > 0)
{
- ::com::sun::star::lang::Locale aLocale(xLangGuess->guessPrimaryLanguage( m_aGuessedText, 0, m_aGuessedText.getLength()) );
+ ::com::sun::star::lang::Locale aLocale(m_xLanguageGuesser->guessPrimaryLanguage( m_aGuessedText, 0, m_aGuessedText.getLength()) );
LanguageType nLang = MsLangId::convertLocaleToLanguageWithFallback( aLocale );
- if (( nLang != LANGUAGE_DONTKNOW ) && ( checkScriptType( m_nScriptType, nLang )))
+ if (( nLang != LANGUAGE_DONTKNOW ) && ( nLang != LANGUAGE_NONE ) && (nLang != LANGUAGE_SYSTEM)
+ && ( checkScriptType( m_nScriptType, nLang )))
LangItems.insert( aLangTable.GetString( nLang ));
}
@@ -468,6 +488,8 @@ throw ( RuntimeException )
if ( m_bDisposed )
return;
+ m_bShowMenu = sal_True;
+
m_nScriptType=7;//set the default value
Window* pWindow = VCLUnoHelper::GetWindow( m_xParentWindow );
if ( pWindow && pWindow->GetType() == WINDOW_STATUSBAR && m_nID != 0 )
@@ -502,6 +524,7 @@ throw ( RuntimeException )
else if ( !Event.State.hasValue() )
{
pStatusBar->SetItemText( m_nID, String() );
+ m_bShowMenu = sal_False; // no language -> no menu
}
}
}