summaryrefslogtreecommitdiffstats
path: root/svtools/source/config/helpopt.cxx
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--svtools/source/config/helpopt.cxx305
1 files changed, 305 insertions, 0 deletions
diff --git a/svtools/source/config/helpopt.cxx b/svtools/source/config/helpopt.cxx
new file mode 100644
index 000000000..1137caaef
--- /dev/null
+++ b/svtools/source/config/helpopt.cxx
@@ -0,0 +1,305 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <svtools/helpopt.hxx>
+#include <unotools/configitem.hxx>
+#include <tools/debug.hxx>
+#include <com/sun/star/uno/Any.hxx>
+#include <com/sun/star/uno/Sequence.hxx>
+#include <comphelper/sequence.hxx>
+#include <vcl/help.hxx>
+#include <osl/mutex.hxx>
+#include <sal/log.hxx>
+
+#include "itemholder2.hxx"
+
+using namespace utl;
+using namespace com::sun::star::uno;
+using namespace com::sun::star;
+
+namespace {
+ //global
+ std::weak_ptr<SvtHelpOptions_Impl> g_pHelpOptions;
+
+enum class HelpProperty
+{
+ ExtendedHelp = 0,
+ HelpTips = 1,
+ Locale = 2,
+ System = 3,
+ StyleSheet = 4,
+ OfflineHelpPopUp = 5
+};
+
+}
+
+class SvtHelpOptions_Impl : public utl::ConfigItem
+{
+ bool bExtendedHelp;
+ bool bHelpTips;
+ bool bOfflineHelpPopUp;
+ OUString aLocale;
+ OUString aSystem;
+ OUString sHelpStyleSheet;
+
+ static Sequence< OUString > const & GetPropertyNames();
+
+ virtual void ImplCommit() final override;
+
+public:
+ SvtHelpOptions_Impl();
+ ~SvtHelpOptions_Impl() override;
+
+ virtual void Notify( const css::uno::Sequence< OUString >& aPropertyNames ) override;
+ void Load( const css::uno::Sequence< OUString>& aPropertyNames);
+
+ void SetExtendedHelp( bool b ) { bExtendedHelp= b; SetModified(); }
+ bool IsExtendedHelp() const { return bExtendedHelp; }
+ void SetHelpTips( bool b ) { bHelpTips = b; SetModified(); }
+ bool IsHelpTips() const { return bHelpTips; }
+ void SetOfflineHelpPopUp(bool b) { bOfflineHelpPopUp = b; SetModified();}
+ bool IsOfflineHelpPopUp() const { return bOfflineHelpPopUp;}
+ const OUString& GetSystem() const { return aSystem; }
+
+ const OUString& GetHelpStyleSheet()const{return sHelpStyleSheet;}
+ void SetHelpStyleSheet(const OUString& rStyleSheet){sHelpStyleSheet = rStyleSheet; SetModified();}
+
+ static ::osl::Mutex & getInitMutex();
+};
+
+Sequence< OUString > const & SvtHelpOptions_Impl::GetPropertyNames()
+{
+ static Sequence<OUString> const aNames
+ {
+ "ExtendedTip",
+ "Tip",
+ "Locale",
+ "System",
+ "HelpStyleSheet",
+ "BuiltInHelpNotInstalledPopUp"
+ };
+
+ return aNames;
+}
+
+::osl::Mutex & SvtHelpOptions_Impl::getInitMutex()
+{
+ static ::osl::Mutex ourMutex;
+
+ return ourMutex;
+}
+
+SvtHelpOptions_Impl::SvtHelpOptions_Impl()
+ : ConfigItem( "Office.Common/Help" )
+ , bExtendedHelp( false )
+ , bHelpTips( true )
+ , bOfflineHelpPopUp( true)
+{
+ Sequence< OUString > aNames = GetPropertyNames();
+ Load( aNames );
+ EnableNotification( aNames );
+}
+
+SvtHelpOptions_Impl::~SvtHelpOptions_Impl()
+{
+ if ( IsModified() )
+ Commit();
+}
+
+void SvtHelpOptions_Impl::Load(const uno::Sequence< OUString>& rPropertyNames)
+{
+ const uno::Sequence< OUString> aInternalPropertyNames( GetPropertyNames());
+ Sequence< Any > aValues = GetProperties( rPropertyNames );
+ const Any* pValues = aValues.getConstArray();
+ DBG_ASSERT( aValues.getLength() == rPropertyNames.getLength(), "GetProperties failed" );
+ if ( aValues.getLength() != rPropertyNames.getLength() )
+ return;
+
+ for ( int nProp = 0; nProp < rPropertyNames.getLength(); nProp++ )
+ {
+ assert(pValues[nProp].hasValue() && "property value missing");
+ if ( pValues[nProp].hasValue() )
+ {
+ bool bTmp;
+ OUString aTmpStr;
+ sal_Int32 nTmpInt = 0;
+ if ( pValues[nProp] >>= bTmp )
+ {
+ switch ( static_cast< HelpProperty >(
+ comphelper::findValue(aInternalPropertyNames, rPropertyNames[nProp]) ) )
+ {
+ case HelpProperty::ExtendedHelp:
+ bExtendedHelp = bTmp;
+ break;
+ case HelpProperty::HelpTips:
+ bHelpTips = bTmp;
+ break;
+ case HelpProperty::OfflineHelpPopUp:
+ bOfflineHelpPopUp = bTmp;
+ break;
+ default:
+ SAL_WARN( "svtools.config", "Wrong Member!" );
+ break;
+ }
+ }
+ else if ( pValues[nProp] >>= aTmpStr )
+ {
+ switch ( static_cast< HelpProperty >(nProp) )
+ {
+ case HelpProperty::Locale:
+ aLocale = aTmpStr;
+ break;
+
+ case HelpProperty::System:
+ aSystem = aTmpStr;
+ break;
+ case HelpProperty::StyleSheet:
+ sHelpStyleSheet = aTmpStr;
+ break;
+ default:
+ SAL_WARN( "svtools.config", "Wrong Member!" );
+ break;
+ }
+ }
+ else if ( pValues[nProp] >>= nTmpInt )
+ {
+ SAL_WARN( "svtools.config", "Wrong Member!" );
+ }
+ else
+ {
+ SAL_WARN( "svtools.config", "Wrong Type!" );
+ }
+ }
+ }
+ if ( IsHelpTips() != Help::IsQuickHelpEnabled() )
+ IsHelpTips() ? Help::EnableQuickHelp() : Help::DisableQuickHelp();
+ if ( IsExtendedHelp() != Help::IsBalloonHelpEnabled() )
+ IsExtendedHelp() ? Help::EnableBalloonHelp() : Help::DisableBalloonHelp();
+}
+
+void SvtHelpOptions_Impl::ImplCommit()
+{
+ Sequence< OUString > aNames = GetPropertyNames();
+ Sequence< Any > aValues( aNames.getLength() );
+ Any* pValues = aValues.getArray();
+ for ( int nProp = 0; nProp < aNames.getLength(); nProp++ )
+ {
+ switch ( static_cast< HelpProperty >(nProp) )
+ {
+ case HelpProperty::ExtendedHelp:
+ pValues[nProp] <<= bExtendedHelp;
+ break;
+
+ case HelpProperty::HelpTips:
+ pValues[nProp] <<= bHelpTips;
+ break;
+
+ case HelpProperty::Locale:
+ pValues[nProp] <<= aLocale;
+ break;
+
+ case HelpProperty::System:
+ pValues[nProp] <<= aSystem;
+ break;
+ case HelpProperty::StyleSheet:
+ pValues[nProp] <<= sHelpStyleSheet;
+ break;
+ case HelpProperty::OfflineHelpPopUp:
+ pValues[nProp] <<= bOfflineHelpPopUp;
+ break;
+
+ }
+ }
+
+ PutProperties( aNames, aValues );
+}
+
+void SvtHelpOptions_Impl::Notify( const Sequence<OUString>& aPropertyNames )
+{
+ Load( aPropertyNames );
+}
+
+SvtHelpOptions::SvtHelpOptions()
+{
+ // Global access, must be guarded (multithreading)
+ ::osl::MutexGuard aGuard( SvtHelpOptions_Impl::getInitMutex() );
+
+ pImpl = g_pHelpOptions.lock();
+ if ( !pImpl )
+ {
+ pImpl = std::make_shared<SvtHelpOptions_Impl>();
+ g_pHelpOptions = pImpl;
+ svtools::ItemHolder2::holdConfigItem(EItem::HelpOptions);
+ }
+}
+
+SvtHelpOptions::~SvtHelpOptions()
+{
+ // Global access, must be guarded (multithreading)
+ ::osl::MutexGuard aGuard( SvtHelpOptions_Impl::getInitMutex() );
+
+ pImpl.reset();
+}
+
+void SvtHelpOptions::SetExtendedHelp( bool b )
+{
+ pImpl->SetExtendedHelp( b );
+}
+
+bool SvtHelpOptions::IsExtendedHelp() const
+{
+ return pImpl->IsExtendedHelp();
+}
+void SvtHelpOptions::SetOfflineHelpPopUp (bool b )
+{
+ pImpl->SetOfflineHelpPopUp( b );
+}
+
+bool SvtHelpOptions::IsOfflineHelpPopUp() const
+{
+ return pImpl->IsOfflineHelpPopUp();
+}
+void SvtHelpOptions::SetHelpTips( bool b )
+{
+ pImpl->SetHelpTips( b );
+}
+
+bool SvtHelpOptions::IsHelpTips() const
+{
+ return pImpl->IsHelpTips();
+}
+
+OUString const & SvtHelpOptions::GetSystem() const
+{
+ return pImpl->GetSystem();
+}
+
+const OUString& SvtHelpOptions::GetHelpStyleSheet()const
+{
+ return pImpl->GetHelpStyleSheet();
+}
+
+void SvtHelpOptions::SetHelpStyleSheet(const OUString& rStyleSheet)
+{
+ pImpl->SetHelpStyleSheet(rStyleSheet);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */