summaryrefslogtreecommitdiffstats
path: root/sfx2/source/appl/imestatuswindow.cxx
diff options
context:
space:
mode:
authorJens-Heiner Rechtien <hr@openoffice.org>2003-03-27 10:29:38 +0000
committerJens-Heiner Rechtien <hr@openoffice.org>2003-03-27 10:29:38 +0000
commit5be98eba1fddb559194066c511b53412009c2d5d (patch)
tree538903c2049093b623e6bd26fd2d0c0396fa43a0 /sfx2/source/appl/imestatuswindow.cxx
parentMWS_SRX644: migrate branch mws_srx644 -> HEAD (diff)
downloadcore-5be98eba1fddb559194066c511b53412009c2d5d.tar.gz
core-5be98eba1fddb559194066c511b53412009c2d5d.zip
MWS_SRX644: migrate branch mws_srx644 -> HEAD
Diffstat (limited to 'sfx2/source/appl/imestatuswindow.cxx')
-rw-r--r--sfx2/source/appl/imestatuswindow.cxx262
1 files changed, 262 insertions, 0 deletions
diff --git a/sfx2/source/appl/imestatuswindow.cxx b/sfx2/source/appl/imestatuswindow.cxx
new file mode 100644
index 000000000000..9c2673147801
--- /dev/null
+++ b/sfx2/source/appl/imestatuswindow.cxx
@@ -0,0 +1,262 @@
+/*************************************************************************
+ *
+ * $RCSfile: imestatuswindow.cxx,v $
+ *
+ * $Revision: 1.2 $
+ *
+ * last change: $Author: hr $ $Date: 2003-03-27 11:27:39 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (the "License"); You may not use this file
+ * except in compliance with the License. You may obtain a copy of the
+ * License at http://www.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2002 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+
+#include "imestatuswindow.hxx"
+
+#include "app.hxx"
+#include "sfxsids.hrc"
+
+#include "com/sun/star/beans/PropertyState.hpp"
+#include "com/sun/star/beans/PropertyValue.hpp"
+#include "com/sun/star/beans/XPropertySet.hpp"
+#include "com/sun/star/lang/DisposedException.hpp"
+#include "com/sun/star/lang/XMultiServiceFactory.hpp"
+#include "com/sun/star/uno/Any.hxx"
+#include "com/sun/star/uno/Exception.hpp"
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/uno/Sequence.hxx"
+#include "com/sun/star/util/XChangesBatch.hpp"
+#include "osl/diagnose.h"
+#include "osl/mutex.hxx"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+#include "sal/types.h"
+#include "vcl/svapp.hxx"
+#include "vos/mutex.hxx"
+
+namespace css = com::sun::star;
+
+using sfx2::appl::ImeStatusWindow;
+
+ImeStatusWindow::ImeStatusWindow(
+ SfxApplication & rApplication,
+ css::uno::Reference< css::lang::XMultiServiceFactory > const &
+ rServiceFactory):
+ m_rApplication(rApplication),
+ m_xServiceFactory(rServiceFactory),
+ m_bDisposed(false)
+{}
+
+void ImeStatusWindow::init()
+{
+ if (Application::CanToggleImeStatusWindow())
+ try
+ {
+ sal_Bool bShow;
+ if (getConfig()->getPropertyValue(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
+ "ShowStatusWindow")))
+ >>= bShow)
+ Application::ShowImeStatusWindow(bShow);
+ }
+ catch (css::uno::Exception &)
+ {
+ OSL_ENSURE(false, "com.sun.star.uno.Exception");
+ // Degrade gracefully and use the VCL-supplied default if no
+ // configuration is available.
+ }
+}
+
+bool ImeStatusWindow::isShowing()
+{
+ try
+ {
+ sal_Bool bShow;
+ if (getConfig()->getPropertyValue(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ShowStatusWindow")))
+ >>= bShow)
+ return bShow;
+ }
+ catch (css::uno::Exception &)
+ {
+ OSL_ENSURE(false, "com.sun.star.uno.Exception");
+ // Degrade gracefully and use the VCL-supplied default if no
+ // configuration is available.
+ }
+ return Application::GetShowImeStatusWindowDefault();
+}
+
+void ImeStatusWindow::show(bool bShow)
+{
+ try
+ {
+ css::uno::Reference< css::beans::XPropertySet > xConfig(getConfig());
+ xConfig->setPropertyValue(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ShowStatusWindow")),
+ css::uno::makeAny(static_cast< sal_Bool >(bShow)));
+ css::uno::Reference< css::util::XChangesBatch > xCommit(
+ xConfig, css::uno::UNO_QUERY);
+ // Degrade gracefully by not saving the settings permanently:
+ if (xCommit.is())
+ xCommit->commitChanges();
+ // Alternatively, setting the VCL status could be done even if updating
+ // the configuration failed:
+ Application::ShowImeStatusWindow(bShow);
+ }
+ catch (css::uno::Exception &)
+ {
+ OSL_ENSURE(false, "com.sun.star.uno.Exception");
+ }
+}
+
+bool ImeStatusWindow::canToggle() const
+{
+ return Application::CanToggleImeStatusWindow();
+}
+
+ImeStatusWindow::~ImeStatusWindow()
+{
+ if (m_xConfig.is())
+ // We should never get here, but just in case...
+ try
+ {
+ m_xConfig->removePropertyChangeListener(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ShowStatusWindow")),
+ this);
+ }
+ catch (css::uno::Exception &)
+ {
+ OSL_ENSURE(false, "com.sun.star.uno.RuntimeException");
+ }
+}
+
+void SAL_CALL ImeStatusWindow::disposing(css::lang::EventObject const & rSource)
+ throw (css::uno::RuntimeException)
+{
+ osl::MutexGuard aGuard(m_aMutex);
+ m_xConfig = 0;
+ m_bDisposed = true;
+}
+
+void SAL_CALL
+ImeStatusWindow::propertyChange(css::beans::PropertyChangeEvent const & rEvent)
+ throw (css::uno::RuntimeException)
+{
+ vos::OGuard aGuard(Application::GetSolarMutex());
+ m_rApplication.Invalidate(SID_SHOW_IME_STATUS_WINDOW);
+}
+
+css::uno::Reference< css::beans::XPropertySet > ImeStatusWindow::getConfig()
+{
+ css::uno::Reference< css::beans::XPropertySet > xConfig;
+ bool bAdd = false;
+ {
+ osl::MutexGuard aGuard(m_aMutex);
+ if (!m_xConfig.is())
+ {
+ if (m_bDisposed)
+ throw css::lang::DisposedException();
+ if (!m_xServiceFactory.is())
+ throw css::uno::RuntimeException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "null comphelper::getProcessServiceFactory")),
+ 0);
+ css::uno::Reference< css::lang::XMultiServiceFactory > xProvider(
+ m_xServiceFactory->createInstance(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.ConfigurationProvider"))),
+ css::uno::UNO_QUERY);
+ if (!xProvider.is())
+ throw css::uno::RuntimeException(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
+ "null com.sun.star.configuration."
+ "ConfigurationProvider")),
+ 0);
+ css::beans::PropertyValue aArg(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("nodepath")), -1,
+ css::uno::makeAny(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "/org.openoffice.Office.Common/I18N/InputMethod"))),
+ css::beans::PropertyState_DIRECT_VALUE);
+ css::uno::Sequence< css::uno::Any > aArgs(1);
+ aArgs[0] <<= aArg;
+ m_xConfig
+ = css::uno::Reference< css::beans::XPropertySet >(
+ xProvider->createInstanceWithArguments(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.ConfigurationUpdateAccess")),
+ aArgs),
+ css::uno::UNO_QUERY);
+ if (!m_xConfig.is())
+ throw css::uno::RuntimeException(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
+ "null com.sun.star.configuration."
+ "ConfigurationUpdateAccess")),
+ 0);
+ bAdd = true;
+ }
+ xConfig = m_xConfig;
+ }
+ if (bAdd)
+ // Exceptions here could be handled individually, to support graceful
+ // degradation (no update notification mechanism in this case---but also
+ // no dispose notifications):
+ xConfig->addPropertyChangeListener(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ShowStatusWindow")),
+ this);
+ return xConfig;
+}
+