summaryrefslogtreecommitdiffstats
path: root/svx/source/items/pageitem.cxx
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--svx/source/items/pageitem.cxx289
1 files changed, 289 insertions, 0 deletions
diff --git a/svx/source/items/pageitem.cxx b/svx/source/items/pageitem.cxx
new file mode 100644
index 000000000..a715543e8
--- /dev/null
+++ b/svx/source/items/pageitem.cxx
@@ -0,0 +1,289 @@
+/* -*- 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 <utility>
+
+#include <osl/diagnose.h>
+#include <comphelper/processfactory.hxx>
+#include <tools/resary.hxx>
+#include <svx/pageitem.hxx>
+#include <svx/strarray.hxx>
+#include <editeng/itemtype.hxx>
+#include <svx/unomid.hxx>
+#include <com/sun/star/text/DefaultNumberingProvider.hpp>
+#include <com/sun/star/text/XNumberingTypeInfo.hpp>
+#include <com/sun/star/style/NumberingType.hpp>
+#include <com/sun/star/style/PageStyleLayout.hpp>
+#include <svl/itemset.hxx>
+#include <svx/strings.hrc>
+#include <svx/dialmgr.hxx>
+
+using namespace ::com::sun::star;
+
+SfxPoolItem* SvxPageItem::CreateDefault() { return new SvxPageItem(0);}
+
+SvxPageItem::SvxPageItem( const sal_uInt16 nId ) : SfxPoolItem( nId ),
+
+ eNumType ( SVX_NUM_ARABIC ),
+ bLandscape ( false ),
+ eUse ( SvxPageUsage::All )
+{
+}
+
+// Copy-Ctor
+SvxPageItem::SvxPageItem( const SvxPageItem& rItem )
+ : SfxPoolItem( rItem )
+{
+ eNumType = rItem.eNumType;
+ bLandscape = rItem.bLandscape;
+ eUse = rItem.eUse;
+}
+
+SvxPageItem::~SvxPageItem() {}
+
+// Clone
+SvxPageItem* SvxPageItem::Clone( SfxItemPool * ) const
+{
+ return new SvxPageItem( *this );
+}
+
+// Test for equality
+bool SvxPageItem::operator==( const SfxPoolItem& rAttr ) const
+{
+ assert(SfxPoolItem::operator==(rAttr));
+ const SvxPageItem& rItem = static_cast<const SvxPageItem&>(rAttr);
+ return ( eNumType == rItem.eNumType &&
+ bLandscape == rItem.bLandscape &&
+ eUse == rItem.eUse );
+}
+
+static OUString GetUsageText( const SvxPageUsage eU )
+{
+ switch( eU )
+ {
+ case SvxPageUsage::Left : return SvxResId(RID_SVXITEMS_PAGE_USAGE_LEFT);
+ case SvxPageUsage::Right : return SvxResId(RID_SVXITEMS_PAGE_USAGE_RIGHT);
+ case SvxPageUsage::All : return SvxResId(RID_SVXITEMS_PAGE_USAGE_ALL);
+ case SvxPageUsage::Mirror: return SvxResId(RID_SVXITEMS_PAGE_USAGE_MIRROR);
+ default: return OUString();
+ }
+}
+
+static const char* RID_SVXITEMS_PAGE_NUMS[] =
+{
+ RID_SVXITEMS_PAGE_NUM_CHR_UPPER,
+ RID_SVXITEMS_PAGE_NUM_CHR_LOWER,
+ RID_SVXITEMS_PAGE_NUM_ROM_UPPER,
+ RID_SVXITEMS_PAGE_NUM_ROM_LOWER,
+ RID_SVXITEMS_PAGE_NUM_ARABIC,
+ RID_SVXITEMS_PAGE_NUM_NONE
+};
+
+namespace
+{
+ OUString GetNumberingDescription(SvxNumType eNumType)
+ {
+ // classic ones, keep displaying the old name
+ if (eNumType <= css::style::NumberingType::NUMBER_NONE)
+ return SvxResId(RID_SVXITEMS_PAGE_NUMS[eNumType]);
+ // new ones, reuse the text used in the numbering dropdown list
+ sal_uInt32 n = SvxNumberingTypeTable::FindIndex(eNumType);
+ if (n != RESARRAY_INDEX_NOTFOUND)
+ return SvxNumberingTypeTable::GetString(n);
+ css::uno::Reference<css::uno::XComponentContext> xContext = comphelper::getProcessComponentContext();
+ css::uno::Reference<css::text::XDefaultNumberingProvider> xDefNum = css::text::DefaultNumberingProvider::create(xContext);
+ css::uno::Reference<css::text::XNumberingTypeInfo> xInfo(xDefNum, css::uno::UNO_QUERY);
+ if (!xInfo.is())
+ return OUString();
+ return xInfo->getNumberingIdentifier(eNumType);
+ }
+}
+
+bool SvxPageItem::GetPresentation
+(
+ SfxItemPresentation ePres,
+ MapUnit /*eCoreUnit*/,
+ MapUnit /*ePresUnit*/,
+ OUString& rText, const IntlWrapper&
+) const
+{
+ rText.clear();
+ OUString cpDelimTmp(cpDelim);
+
+ switch ( ePres )
+ {
+ case SfxItemPresentation::Nameless:
+ {
+ if ( !aDescName.isEmpty() )
+ {
+ rText = aDescName + cpDelimTmp;
+ }
+ rText += GetNumberingDescription(eNumType) + cpDelimTmp;
+ if ( bLandscape )
+ rText += SvxResId(RID_SVXITEMS_PAGE_LAND_TRUE);
+ else
+ rText += SvxResId(RID_SVXITEMS_PAGE_LAND_FALSE);
+ OUString aUsageText = GetUsageText( eUse );
+ if (!aUsageText.isEmpty())
+ {
+ rText += cpDelimTmp + aUsageText;
+ }
+ return true;
+ }
+ case SfxItemPresentation::Complete:
+ {
+ rText += SvxResId(RID_SVXITEMS_PAGE_COMPLETE);
+ if ( !aDescName.isEmpty() )
+ {
+ rText += aDescName + cpDelimTmp;
+ }
+ rText += GetNumberingDescription(eNumType) + cpDelimTmp;
+ if ( bLandscape )
+ rText += SvxResId(RID_SVXITEMS_PAGE_LAND_TRUE);
+ else
+ rText += SvxResId(RID_SVXITEMS_PAGE_LAND_FALSE);
+ OUString aUsageText = GetUsageText( eUse );
+ if (!aUsageText.isEmpty())
+ {
+ rText += cpDelimTmp + aUsageText;
+ }
+ return true;
+ }
+ default: ;//prevent warning
+ }
+ return false;
+}
+
+
+bool SvxPageItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
+{
+// sal_Bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
+ nMemberId &= ~CONVERT_TWIPS;
+ switch( nMemberId )
+ {
+ case MID_PAGE_NUMTYPE:
+ {
+ //! constants aren't in IDLs any more ?!?
+ rVal <<= static_cast<sal_Int16>( eNumType );
+ }
+ break;
+ case MID_PAGE_ORIENTATION:
+ rVal <<= bLandscape;
+ break;
+ case MID_PAGE_LAYOUT :
+ {
+ style::PageStyleLayout eRet;
+ switch(eUse)
+ {
+ case SvxPageUsage::Left : eRet = style::PageStyleLayout_LEFT; break;
+ case SvxPageUsage::Right : eRet = style::PageStyleLayout_RIGHT; break;
+ case SvxPageUsage::All : eRet = style::PageStyleLayout_ALL; break;
+ case SvxPageUsage::Mirror: eRet = style::PageStyleLayout_MIRRORED; break;
+ default:
+ OSL_FAIL("what layout is this?");
+ return false;
+ }
+ rVal <<= eRet;
+ }
+ break;
+ }
+
+ return true;
+}
+
+bool SvxPageItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
+{
+ switch( nMemberId & ~CONVERT_TWIPS )
+ {
+ case MID_PAGE_NUMTYPE:
+ {
+ sal_Int32 nValue = 0;
+ if(!(rVal >>= nValue))
+ return false;
+
+ eNumType = static_cast<SvxNumType>(nValue);
+ }
+ break;
+ case MID_PAGE_ORIENTATION:
+ bLandscape = Any2Bool(rVal);
+ break;
+ case MID_PAGE_LAYOUT :
+ {
+ style::PageStyleLayout eLayout;
+ if(!(rVal >>= eLayout))
+ {
+ sal_Int32 nValue = 0;
+ if(!(rVal >>= nValue))
+ return false;
+ eLayout = static_cast<style::PageStyleLayout>(nValue);
+ }
+ switch( eLayout )
+ {
+ case style::PageStyleLayout_LEFT : eUse = SvxPageUsage::Left ; break;
+ case style::PageStyleLayout_RIGHT : eUse = SvxPageUsage::Right; break;
+ case style::PageStyleLayout_ALL : eUse = SvxPageUsage::All ; break;
+ case style::PageStyleLayout_MIRRORED: eUse = SvxPageUsage::Mirror;break;
+ default: ;//prevent warning
+ }
+ }
+ break;
+ }
+ return true;
+}
+
+// HeaderFooterSet
+SvxSetItem::SvxSetItem( const sal_uInt16 nId, const SfxItemSet& rSet ) :
+
+ SfxSetItem( nId, rSet )
+{
+}
+
+SvxSetItem::SvxSetItem( const SvxSetItem& rItem ) :
+
+ SfxSetItem( rItem )
+{
+}
+
+SvxSetItem::SvxSetItem( const sal_uInt16 nId, std::unique_ptr<SfxItemSet>&& _pSet ) :
+
+ SfxSetItem( nId, std::move(_pSet) )
+{
+}
+
+SvxSetItem* SvxSetItem::Clone( SfxItemPool * ) const
+{
+ return new SvxSetItem(*this);
+}
+
+bool SvxSetItem::GetPresentation
+(
+ SfxItemPresentation /*ePres*/,
+ MapUnit /*eCoreUnit*/,
+ MapUnit /*ePresUnit*/,
+ OUString& rText, const IntlWrapper&
+) const
+{
+ rText.clear();
+ return false;
+}
+
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */