summaryrefslogtreecommitdiff
path: root/svl/source/config/srchcfg.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'svl/source/config/srchcfg.cxx')
-rw-r--r--svl/source/config/srchcfg.cxx287
1 files changed, 287 insertions, 0 deletions
diff --git a/svl/source/config/srchcfg.cxx b/svl/source/config/srchcfg.cxx
new file mode 100644
index 000000000000..cf9fd1799650
--- /dev/null
+++ b/svl/source/config/srchcfg.cxx
@@ -0,0 +1,287 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_svl.hxx"
+
+#include <svl/srchcfg.hxx>
+#include <svl/svarray.hxx>
+#include <com/sun/star/uno/Any.hxx>
+#include <com/sun/star/uno/Sequence.hxx>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <tools/debug.hxx>
+#include <unotools/configpathes.hxx>
+
+//-----------------------------------------------------------------------------
+using namespace utl;
+using namespace rtl;
+using namespace com::sun::star;
+using namespace com::sun::star::uno;
+using namespace com::sun::star::beans;
+
+#define C2U(cChar) OUString::createFromAscii(cChar)
+
+//-----------------------------------------------------------------------------
+typedef SvxSearchEngineData* SvxSearchEngineDataPtr;
+SV_DECL_PTRARR_DEL(SvxSearchEngineArr, SvxSearchEngineDataPtr, 2, 2)
+SV_IMPL_PTRARR(SvxSearchEngineArr, SvxSearchEngineDataPtr);
+//-----------------------------------------------------------------------------
+struct SvxSearchConfig_Impl
+{
+ SvxSearchEngineArr aEngineArr;
+};
+/* -----------------------------19.03.01 14:00--------------------------------
+
+ ---------------------------------------------------------------------------*/
+sal_Bool SvxSearchEngineData::operator==(const SvxSearchEngineData& rData)
+{
+ return sEngineName == rData.sEngineName &&
+ sAndPrefix == rData.sAndPrefix &&
+ sAndSuffix == rData.sAndSuffix &&
+ sAndSeparator == rData.sAndSeparator &&
+ nAndCaseMatch == rData.nAndCaseMatch &&
+ sOrPrefix == rData.sOrPrefix &&
+ sOrSuffix == rData.sOrSuffix &&
+ sOrSeparator == rData.sOrSeparator &&
+ nOrCaseMatch == rData.nOrCaseMatch &&
+ sExactPrefix == rData.sExactPrefix &&
+ sExactSuffix == rData.sExactSuffix &&
+ sExactSeparator == rData.sExactSeparator &&
+ nExactCaseMatch == rData.nExactCaseMatch;
+}
+/* -----------------------------16.01.01 15:36--------------------------------
+
+ ---------------------------------------------------------------------------*/
+const Sequence<OUString>& lcl_GetSearchPropertyNames_Impl()
+{
+ static Sequence<OUString> aNames;
+ if(!aNames.getLength())
+ {
+ aNames.realloc(12);
+ OUString* pNames = aNames.getArray();
+ pNames[0] = C2U("And/ooInetPrefix");
+ pNames[1] = C2U("And/ooInetSuffix");
+ pNames[2] = C2U("And/ooInetSeparator");
+ pNames[3] = C2U("And/ooInetCaseMatch");
+ pNames[4] = C2U("Or/ooInetPrefix");
+ pNames[5] = C2U("Or/ooInetSuffix");
+ pNames[6] = C2U("Or/ooInetSeparator");
+ pNames[7] = C2U("Or/ooInetCaseMatch");
+ pNames[8] = C2U("Exact/ooInetPrefix");
+ pNames[9] = C2U("Exact/ooInetSuffix");
+ pNames[10] = C2U("Exact/ooInetSeparator");
+ pNames[11] = C2U("Exact/ooInetCaseMatch");
+ }
+ return aNames;
+}
+// ---------------------------------------------------------------------------
+SvxSearchConfig::SvxSearchConfig(sal_Bool bEnableNotify) :
+ utl::ConfigItem(C2U("Inet/SearchEngines"), CONFIG_MODE_DELAYED_UPDATE),
+ pImpl(new SvxSearchConfig_Impl)
+{
+ if(bEnableNotify)
+ {
+ //request notifications from the node
+ Sequence<OUString> aEnable(1);
+ EnableNotification(aEnable);
+ }
+ Load();
+}
+/* -----------------------------16.01.01 15:36--------------------------------
+
+ ---------------------------------------------------------------------------*/
+SvxSearchConfig::~SvxSearchConfig()
+{
+ delete pImpl;
+}
+/* -----------------------------17.01.01 09:57--------------------------------
+
+ ---------------------------------------------------------------------------*/
+void SvxSearchConfig::Load()
+{
+ pImpl->aEngineArr.DeleteAndDestroy(0, pImpl->aEngineArr.Count());
+ Sequence<OUString> aNodeNames = GetNodeNames(OUString());
+ const OUString* pNodeNames = aNodeNames.getConstArray();
+ for(sal_Int32 nNode = 0; nNode < aNodeNames.getLength(); nNode++)
+ {
+ SvxSearchEngineDataPtr pNew = new SvxSearchEngineData;
+ pNew->sEngineName = pNodeNames[nNode];
+ const Sequence<OUString>& rPropNames = lcl_GetSearchPropertyNames_Impl();
+ const OUString* pPropNames = rPropNames.getConstArray();
+ Sequence<OUString> aPropertyNames(rPropNames.getLength());
+ OUString* pPropertyNames = aPropertyNames.getArray();
+ const OUString sSlash(C2U("/"));
+ sal_Int32 nProp;
+ for(nProp = 0; nProp < rPropNames.getLength(); nProp++)
+ {
+ pPropertyNames[nProp] = wrapConfigurationElementName(pNodeNames[nNode]);
+ pPropertyNames[nProp] += sSlash;
+ pPropertyNames[nProp] += pPropNames[nProp];
+ }
+ Sequence<Any> aValues = GetProperties(aPropertyNames);
+ const Any* pValues = aValues.getConstArray();
+ for(nProp = 0; nProp < rPropNames.getLength(); nProp++)
+ {
+ switch(nProp)
+ {
+ case 0 : pValues[nProp] >>= pNew->sAndPrefix; break;
+ case 1 : pValues[nProp] >>= pNew->sAndSuffix; break;
+ case 2 : pValues[nProp] >>= pNew->sAndSeparator; break;
+ case 3 : pValues[nProp] >>= pNew->nAndCaseMatch; break;
+
+ case 4 : pValues[nProp] >>= pNew->sOrPrefix; break;
+ case 5 : pValues[nProp] >>= pNew->sOrSuffix; break;
+ case 6 : pValues[nProp] >>= pNew->sOrSeparator; break;
+ case 7 : pValues[nProp] >>= pNew->nOrCaseMatch; break;
+
+ case 8 : pValues[nProp] >>= pNew->sExactPrefix; break;
+ case 9 : pValues[nProp] >>= pNew->sExactSuffix; break;
+ case 10: pValues[nProp] >>= pNew->sExactSeparator; break;
+ case 11: pValues[nProp] >>= pNew->nExactCaseMatch; break;
+ }
+ }
+ pImpl->aEngineArr.Insert(pNew, pImpl->aEngineArr.Count());
+ }
+}
+/* -----------------------------17.01.01 09:57--------------------------------
+
+ ---------------------------------------------------------------------------*/
+void SvxSearchConfig::Notify( const Sequence<OUString>& )
+{
+ Load();
+}
+/* -----------------------------16.01.01 15:36--------------------------------
+
+ ---------------------------------------------------------------------------*/
+void SvxSearchConfig::Commit()
+{
+ OUString sNode;
+ if(!pImpl->aEngineArr.Count())
+ ClearNodeSet(sNode);
+ else
+ {
+ Sequence<PropertyValue> aSetValues(12 * pImpl->aEngineArr.Count());
+ PropertyValue* pSetValues = aSetValues.getArray();
+
+ const Sequence<OUString>& rPropNames = lcl_GetSearchPropertyNames_Impl();
+ const OUString* pPropNames = rPropNames.getConstArray();
+ const OUString sSlash(C2U("/"));
+ for(sal_uInt16 i = 0; i < pImpl->aEngineArr.Count(); i++)
+ {
+ SvxSearchEngineDataPtr pSave = pImpl->aEngineArr[i];
+ for(sal_Int16 nProp = 0; nProp < rPropNames.getLength(); nProp++)
+ {
+ OUString sTmpName = sSlash;
+ sTmpName += wrapConfigurationElementName(pSave->sEngineName);
+ sTmpName += sSlash;
+ sTmpName += pPropNames[nProp];
+ pSetValues[nProp].Name = sTmpName;
+ switch(nProp)
+ {
+ case 0 : pSetValues[nProp].Value <<= pSave->sAndPrefix; break;
+ case 1 : pSetValues[nProp].Value <<= pSave->sAndSuffix; break;
+ case 2 : pSetValues[nProp].Value <<= pSave->sAndSeparator; break;
+ case 3 : pSetValues[nProp].Value <<= pSave->nAndCaseMatch; break;
+
+ case 4 : pSetValues[nProp].Value <<= pSave->sOrPrefix; break;
+ case 5 : pSetValues[nProp].Value <<= pSave->sOrSuffix; break;
+ case 6 : pSetValues[nProp].Value <<= pSave->sOrSeparator; break;
+ case 7 : pSetValues[nProp].Value <<= pSave->nOrCaseMatch; break;
+
+ case 8 : pSetValues[nProp].Value <<= pSave->sExactPrefix; break;
+ case 9 : pSetValues[nProp].Value <<= pSave->sExactSuffix; break;
+ case 10: pSetValues[nProp].Value <<= pSave->sExactSeparator; break;
+ case 11: pSetValues[nProp].Value <<= pSave->nExactCaseMatch; break;
+ }
+ }
+ pSetValues+= 12;
+ }
+ ReplaceSetProperties(sNode, aSetValues);
+ }
+}
+/* -----------------------------19.03.01 10:02--------------------------------
+
+ ---------------------------------------------------------------------------*/
+sal_uInt16 SvxSearchConfig::Count()
+{
+ return pImpl->aEngineArr.Count();
+}
+/* -----------------------------19.03.01 10:02--------------------------------
+
+ ---------------------------------------------------------------------------*/
+const SvxSearchEngineData& SvxSearchConfig::GetData(sal_uInt16 nPos)
+{
+ DBG_ASSERT(nPos < pImpl->aEngineArr.Count(), "wrong array index");
+ return *pImpl->aEngineArr[nPos];
+}
+/* -----------------------------19.03.01 10:38--------------------------------
+
+ ---------------------------------------------------------------------------*/
+const SvxSearchEngineData* SvxSearchConfig::GetData(const rtl::OUString& rEngineName)
+{
+ for(sal_uInt16 nPos = 0; nPos < pImpl->aEngineArr.Count(); nPos++)
+ {
+ if(pImpl->aEngineArr[nPos]->sEngineName == rEngineName)
+ return pImpl->aEngineArr[nPos];
+ }
+ return 0;
+}
+/* -----------------------------19.03.01 10:02--------------------------------
+
+ ---------------------------------------------------------------------------*/
+void SvxSearchConfig::SetData(const SvxSearchEngineData& rData)
+{
+ for(sal_uInt16 nPos = 0; nPos < pImpl->aEngineArr.Count(); nPos++)
+ {
+ if(pImpl->aEngineArr[nPos]->sEngineName == rData.sEngineName)
+ {
+ if((*pImpl->aEngineArr[nPos]) == rData)
+ return;
+ pImpl->aEngineArr.DeleteAndDestroy(nPos, 1);
+ break;
+ }
+ }
+ SvxSearchEngineDataPtr pInsert = new SvxSearchEngineData(rData);
+ pImpl->aEngineArr.Insert(pInsert, pImpl->aEngineArr.Count());
+ SetModified();
+}
+/* -----------------------------19.03.01 10:38--------------------------------
+
+ ---------------------------------------------------------------------------*/
+void SvxSearchConfig::RemoveData(const rtl::OUString& rEngineName)
+{
+ for(sal_uInt16 nPos = 0; nPos < pImpl->aEngineArr.Count(); nPos++)
+ {
+ if(pImpl->aEngineArr[nPos]->sEngineName == rEngineName)
+ {
+ pImpl->aEngineArr.DeleteAndDestroy(nPos, 1);
+ SetModified();
+ return ;
+ }
+ }
+}
+