/* -*- 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 <o3tl/any.hxx>
#include <o3tl/string_view.hxx>
#include <osl/diagnose.h>
#include <editeng/paperinf.hxx>
#include <com/sun/star/uno/Sequence.hxx>
#include <rtl/ustrbuf.hxx>
#include <tools/UnitConversion.hxx>
#include <unotools/useroptions.hxx>
#include <swmodule.hxx>
#include <swtypes.hxx>
#include <envimg.hxx>
#include <strings.hrc>
#include <cmdid.h>
#include <unomid.h>
using namespace utl;
using namespace ::com::sun::star::uno;
SfxPoolItem* SwEnvItem::CreateDefault() { return new SwEnvItem; }
OUString MakeSender()
{
SvtUserOptions& rUserOpt = SwModule::get()->GetUserOptions();
const OUString sSenderToken(SwResId(STR_SENDER_TOKENS));
if (sSenderToken.isEmpty())
return OUString();
OUStringBuffer sRet;
sal_Int32 nSttPos = 0 ;
bool bLastLength = true ;
do {
std::u16string_view sToken = o3tl::getToken(sSenderToken, 0 , ';' , nSttPos );
if (sToken == u"COMPANY" )
{
sal_Int32 nOldLen = sRet.getLength();
sRet.append(rUserOpt.GetCompany());
bLastLength = sRet.getLength() != nOldLen;
}
else if (sToken == u"CR" )
{
if (bLastLength)
sRet.append(SAL_NEWLINE_STRING);
bLastLength = true ;
}
else if (sToken == u"FIRSTNAME" )
sRet.append(rUserOpt.GetFirstName());
else if (sToken == u"LASTNAME" )
sRet.append(rUserOpt.GetLastName());
else if (sToken == u"ADDRESS" )
sRet.append(rUserOpt.GetStreet());
else if (sToken == u"COUNTRY" )
sRet.append(rUserOpt.GetCountry());
else if (sToken == u"POSTALCODE" )
sRet.append(rUserOpt.GetZip());
else if (sToken == u"CITY" )
sRet.append(rUserOpt.GetCity());
else if (sToken == u"STATEPROV" )
sRet.append(rUserOpt.GetState());
else if (!sToken.empty()) //spaces
sRet.append(sToken);
} while (nSttPos>=0 );
return sRet.makeStringAndClear();
}
SwEnvItem::SwEnvItem() :
SfxPoolItem(FN_ENVELOP)
{
m_bSend = true ;
m_aSendText = MakeSender();
m_nSendFromLeft = 566 ; // 1 cm
m_nSendFromTop = 566 ; // 1 cm
Size aEnvSz = SvxPaperInfo::GetPaperSize(PAPER_ENV_C65);
m_nWidth = aEnvSz.Width();
m_nHeight = aEnvSz.Height();
m_eAlign = ENV_HOR_LEFT;
m_bPrintFromAbove = true ;
m_nShiftRight = 0 ;
m_nShiftDown = 0 ;
m_nAddrFromLeft = std::max(m_nWidth, m_nHeight) / 2 ;
m_nAddrFromTop = std::min(m_nWidth, m_nHeight) / 2 ;
}
SwEnvItem& SwEnvItem::operator =(const SwEnvItem& rItem)
{
m_aAddrText = rItem.m_aAddrText;
m_bSend = rItem.m_bSend;
m_aSendText = rItem.m_aSendText;
m_nSendFromLeft = rItem.m_nSendFromLeft;
m_nSendFromTop = rItem.m_nSendFromTop;
m_nAddrFromLeft = rItem.m_nAddrFromLeft;
m_nAddrFromTop = rItem.m_nAddrFromTop;
m_nWidth = rItem.m_nWidth;
m_nHeight = rItem.m_nHeight;
m_eAlign = rItem.m_eAlign;
m_bPrintFromAbove = rItem.m_bPrintFromAbove;
m_nShiftRight = rItem.m_nShiftRight;
m_nShiftDown = rItem.m_nShiftDown;
return *this ;
}
bool SwEnvItem::operator ==(const SfxPoolItem& rItem) const
{
assert(SfxPoolItem::operator ==(rItem));
const SwEnvItem& rEnv = static_cast <const SwEnvItem&>( rItem);
return m_aAddrText == rEnv.m_aAddrText &&
m_bSend == rEnv.m_bSend &&
m_aSendText == rEnv.m_aSendText &&
m_nSendFromLeft == rEnv.m_nSendFromLeft &&
m_nSendFromTop == rEnv.m_nSendFromTop &&
m_nAddrFromLeft == rEnv.m_nAddrFromLeft &&
m_nAddrFromTop == rEnv.m_nAddrFromTop &&
m_nWidth == rEnv.m_nWidth &&
m_nHeight == rEnv.m_nHeight &&
m_eAlign == rEnv.m_eAlign &&
m_bPrintFromAbove == rEnv.m_bPrintFromAbove &&
m_nShiftRight == rEnv.m_nShiftRight &&
m_nShiftDown == rEnv.m_nShiftDown;
}
SwEnvItem* SwEnvItem::Clone(SfxItemPool*) const
{
return new SwEnvItem(*this );
}
SwEnvCfgItem::SwEnvCfgItem() :
ConfigItem(u"Office.Writer/Envelope" _ustr)
{
Sequence<OUString> aNames = GetPropertyNames();
Sequence<Any> aValues = GetProperties(aNames);
EnableNotification(aNames);
const Any* pValues = aValues.getConstArray();
OSL_ENSURE(aValues.getLength() == aNames.getLength(), "GetProperties failed" );
if (aValues.getLength() != aNames.getLength())
return ;
for (int nProp = 0 ; nProp < aNames.getLength(); nProp++)
{
if (pValues[nProp].hasValue())
{
switch (nProp)
{
case 0 : pValues[nProp] >>= m_aEnvItem.m_aAddrText; break ;// "Inscription/Addressee",
case 1 : pValues[nProp] >>= m_aEnvItem.m_aSendText; break ;// "Inscription/Sender",
case 2 : m_aEnvItem.m_bSend = *o3tl::doAccess<bool >(pValues[nProp]); break ;// "Inscription/UseSender",
case 3 :
pValues[nProp] >>= m_aEnvItem.m_nAddrFromLeft;// "Format/AddresseeFromLeft",
m_aEnvItem.m_nAddrFromLeft = o3tl::toTwips(m_aEnvItem.m_nAddrFromLeft, o3tl::Length::mm100);
break ;
case 4 :
pValues[nProp] >>= m_aEnvItem.m_nAddrFromTop; // "Format/AddresseeFromTop",
m_aEnvItem.m_nAddrFromTop = o3tl::toTwips(m_aEnvItem.m_nAddrFromTop, o3tl::Length::mm100);
break ;
case 5 :
pValues[nProp] >>= m_aEnvItem.m_nSendFromLeft; // "Format/SenderFromLeft",
m_aEnvItem.m_nSendFromLeft = o3tl::toTwips(m_aEnvItem.m_nSendFromLeft, o3tl::Length::mm100);
break ;
case 6 :
pValues[nProp] >>= m_aEnvItem.m_nSendFromTop;// "Format/SenderFromTop",
m_aEnvItem.m_nSendFromTop = o3tl::toTwips(m_aEnvItem.m_nSendFromTop, o3tl::Length::mm100);
break ;
case 7 :
pValues[nProp] >>= m_aEnvItem.m_nWidth; // "Format/Width",
m_aEnvItem.m_nWidth = o3tl::toTwips(m_aEnvItem.m_nWidth, o3tl::Length::mm100);
break ;
case 8 :
pValues[nProp] >>= m_aEnvItem.m_nHeight; // "Format/Height",
m_aEnvItem.m_nHeight = o3tl::toTwips(m_aEnvItem.m_nHeight, o3tl::Length::mm100);
break ;
case 9 :
{
sal_Int32 nTemp = 0 ;
pValues[nProp] >>= nTemp; m_aEnvItem.m_eAlign = static_cast <SwEnvAlign>(nTemp); break ;// "Print/Alignment",
}
case 10 : m_aEnvItem.m_bPrintFromAbove = *o3tl::doAccess<bool >(pValues[nProp]); break ;// "Print/FromAbove",
case 11 :
pValues[nProp] >>= m_aEnvItem.m_nShiftRight;
m_aEnvItem.m_nShiftRight = o3tl::toTwips(m_aEnvItem.m_nShiftRight, o3tl::Length::mm100);// "Print/Right",
break ;
case 12 :
pValues[nProp] >>= m_aEnvItem.m_nShiftDown;
m_aEnvItem.m_nShiftDown = o3tl::toTwips(m_aEnvItem.m_nShiftDown, o3tl::Length::mm100);
break ;// "Print/Down"
}
}
}
}
SwEnvCfgItem::~SwEnvCfgItem()
{
}
void SwEnvCfgItem::ImplCommit()
{
Sequence<OUString> aNames = GetPropertyNames();
Sequence<Any> aValues(aNames.getLength());
Any* pValues = aValues.getArray();
for (int nProp = 0 ; nProp < aNames.getLength(); nProp++)
{
switch (nProp)
{
case 0 : pValues[nProp] <<= m_aEnvItem.m_aAddrText; break ;// "Inscription/Addressee",
case 1 : pValues[nProp] <<= m_aEnvItem.m_aSendText; break ;// "Inscription/Sender",
case 2 : pValues[nProp] <<= m_aEnvItem.m_bSend; break ;// "Inscription/UseSender",
case 3 : pValues[nProp] <<= static_cast <sal_Int32>(convertTwipToMm100(m_aEnvItem.m_nAddrFromLeft)) ; break ;// "Format/AddresseeFromLeft",
case 4 : pValues[nProp] <<= static_cast <sal_Int32>(convertTwipToMm100(m_aEnvItem.m_nAddrFromTop)) ; break ;// "Format/AddresseeFromTop",
case 5 : pValues[nProp] <<= static_cast <sal_Int32>(convertTwipToMm100(m_aEnvItem.m_nSendFromLeft)) ; break ;// "Format/SenderFromLeft",
case 6 : pValues[nProp] <<= static_cast <sal_Int32>(convertTwipToMm100(m_aEnvItem.m_nSendFromTop)) ; break ;// "Format/SenderFromTop",
case 7 : pValues[nProp] <<= static_cast <sal_Int32>(convertTwipToMm100(m_aEnvItem.m_nWidth)) ; break ;// "Format/Width",
case 8 : pValues[nProp] <<= static_cast <sal_Int32>(convertTwipToMm100(m_aEnvItem.m_nHeight)) ; break ;// "Format/Height",
case 9 : pValues[nProp] <<= sal_Int32(m_aEnvItem.m_eAlign); break ;// "Print/Alignment",
case 10 : pValues[nProp] <<= m_aEnvItem.m_bPrintFromAbove; break ;// "Print/FromAbove",
case 11 : pValues[nProp] <<= static_cast <sal_Int32>(convertTwipToMm100(m_aEnvItem.m_nShiftRight));break ; // "Print/Right",
case 12 : pValues[nProp] <<= static_cast <sal_Int32>(convertTwipToMm100(m_aEnvItem.m_nShiftDown)); break ;// "Print/Down"
}
}
PutProperties(aNames, aValues);
}
void SwEnvCfgItem::Notify( const css::uno::Sequence< OUString >& ) {}
Sequence<OUString> SwEnvCfgItem::GetPropertyNames()
{
static const char * aPropNames[] =
{
"Inscription/Addressee" , // 0
"Inscription/Sender" , // 1
"Inscription/UseSender" , // 2
"Format/AddresseeFromLeft" , // 3
"Format/AddresseeFromTop" , // 4
"Format/SenderFromLeft" , // 5
"Format/SenderFromTop" , // 6
"Format/Width" , // 7
"Format/Height" , // 8
"Print/Alignment" , // 9
"Print/FromAbove" , // 10
"Print/Right" , // 11
"Print/Down" // 12
};
const int nCount = 13 ;
Sequence<OUString> aNames(nCount);
OUString* pNames = aNames.getArray();
for (int i = 0 ; i < nCount; i++)
pNames[i] = OUString::createFromAscii(aPropNames[i]);
return aNames;
}
bool SwEnvItem::QueryValue( Any& rVal, sal_uInt8 nMemberId ) const
{
bool bRet = true ;
switch (nMemberId & ~CONVERT_TWIPS)
{
case MID_ENV_ADDR_TEXT : rVal <<= m_aAddrText; break ;
case MID_ENV_SEND : rVal <<= m_bSend; break ;
case MID_SEND_TEXT : rVal <<= m_aSendText; break ;
case MID_ENV_ADDR_FROM_LEFT : rVal <<= m_nAddrFromLeft; break ;
case MID_ENV_ADDR_FROM_TOP : rVal <<= m_nAddrFromTop; break ;
case MID_ENV_SEND_FROM_LEFT : rVal <<= m_nSendFromLeft; break ;
case MID_ENV_SEND_FROM_TOP : rVal <<= m_nSendFromTop; break ;
case MID_ENV_WIDTH : rVal <<= m_nWidth; break ;
case MID_ENV_HEIGHT : rVal <<= m_nHeight; break ;
case MID_ENV_ALIGN : rVal <<= static_cast <sal_Int16>(m_eAlign); break ;
case MID_ENV_PRINT_FROM_ABOVE : rVal <<= m_bPrintFromAbove; break ;
case MID_ENV_SHIFT_RIGHT : rVal <<= m_nShiftRight; break ;
case MID_ENV_SHIFT_DOWN : rVal <<= m_nShiftDown; break ;
default :
OSL_FAIL("Wrong memberId" );
bRet = false ;
}
return bRet;
}
bool SwEnvItem::PutValue(const Any& rVal, sal_uInt8 nMemberId)
{
bool bRet = false ;
switch (nMemberId & ~CONVERT_TWIPS)
{
case MID_ENV_ADDR_TEXT : bRet = (rVal >>= m_aAddrText); break ;
case MID_ENV_SEND : bRet = (rVal >>= m_bSend); break ;
case MID_SEND_TEXT : bRet = (rVal >>= m_aSendText); break ;
case MID_ENV_ADDR_FROM_LEFT : bRet = (rVal >>= m_nAddrFromLeft); break ;
case MID_ENV_ADDR_FROM_TOP : bRet = (rVal >>= m_nAddrFromTop); break ;
case MID_ENV_SEND_FROM_LEFT : bRet = (rVal >>= m_nSendFromLeft); break ;
case MID_ENV_SEND_FROM_TOP : bRet = (rVal >>= m_nSendFromTop); break ;
case MID_ENV_WIDTH : bRet = (rVal >>= m_nWidth); break ;
case MID_ENV_HEIGHT : bRet = (rVal >>= m_nHeight); break ;
case MID_ENV_ALIGN :
{
sal_Int16 nTemp = 0 ;
bRet = (rVal >>= nTemp);
if (bRet)
m_eAlign = SwEnvAlign(nTemp);
break ;
}
case MID_ENV_PRINT_FROM_ABOVE : bRet = (rVal >>= m_bPrintFromAbove); break ;
case MID_ENV_SHIFT_RIGHT : bRet = (rVal >>= m_nShiftRight); break ;
case MID_ENV_SHIFT_DOWN : bRet = (rVal >>= m_nShiftDown); break ;
default :
OSL_FAIL("Wrong memberId" );
}
return bRet;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Messung V0.5 in Prozent C=94 H=94 G=93
¤ Dauer der Verarbeitung: 0.5 Sekunden
¤
*© Formatika GbR, Deutschland