Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #include <hintids.hxx>
30 : : #include <comphelper/string.hxx>
31 : : #include <tools/stream.hxx>
32 : : #include <tools/resid.hxx>
33 : : #include <sfx2/app.hxx>
34 : : #include <editeng/paperinf.hxx>
35 : : #include <com/sun/star/uno/Sequence.hxx>
36 : : #include <unotools/useroptions.hxx>
37 : : #include <tools/shl.hxx>
38 : : #include <swmodule.hxx>
39 : : #include <swtypes.hxx>
40 : : #include <envimg.hxx>
41 : :
42 : : #include <cmdid.h>
43 : : #include <envelp.hrc>
44 : :
45 : : #include <unomid.h>
46 : :
47 : : #ifdef WNT
48 : : #define NEXTLINE rtl::OUString("\r\n")
49 : : #else
50 : : #define NEXTLINE '\n'
51 : : #endif
52 : :
53 : : using namespace utl;
54 : : using namespace ::com::sun::star::uno;
55 : :
56 : : using ::rtl::OUString;
57 : :
58 : :
59 [ # # ][ # # ]: 73 : TYPEINIT1_AUTOFACTORY( SwEnvItem, SfxPoolItem );
[ # # ]
60 : :
61 : 0 : SW_DLLPUBLIC String MakeSender()
62 : : {
63 [ # # ][ # # ]: 0 : SvtUserOptions& rUserOpt = SW_MOD()->GetUserOptions();
64 : :
65 [ # # ]: 0 : String sRet;
66 [ # # ]: 0 : String sSenderToken(SW_RES(STR_SENDER_TOKENS));
67 [ # # ][ # # ]: 0 : xub_StrLen nSttPos = 0, nTokenCount = comphelper::string::getTokenCount(sSenderToken, ';');
68 : 0 : sal_Bool bLastLength = sal_True;
69 [ # # ]: 0 : for( xub_StrLen i = 0; i < nTokenCount; i++ )
70 : : {
71 [ # # ]: 0 : String sToken = sSenderToken.GetToken( 0, ';', nSttPos );
72 [ # # ][ # # ]: 0 : if(sToken.EqualsAscii("COMPANY"))
73 : : {
74 : 0 : xub_StrLen nOldLen = sRet.Len();
75 [ # # ][ # # ]: 0 : sRet += (String)rUserOpt.GetCompany();
[ # # ][ # # ]
76 : 0 : bLastLength = sRet.Len() != nOldLen;
77 : : }
78 [ # # ][ # # ]: 0 : else if(sToken.EqualsAscii("CR"))
79 : : {
80 [ # # ]: 0 : if(bLastLength)
81 [ # # ]: 0 : sRet +=NEXTLINE;
82 : 0 : bLastLength = sal_True;
83 : : }
84 [ # # ][ # # ]: 0 : else if(sToken.EqualsAscii("FIRSTNAME"))
85 [ # # ][ # # ]: 0 : sRet += (String)rUserOpt.GetFirstName();
[ # # ][ # # ]
86 [ # # ][ # # ]: 0 : else if(sToken.EqualsAscii("LASTNAME"))
87 [ # # ][ # # ]: 0 : sRet += (String)rUserOpt.GetLastName();
[ # # ][ # # ]
88 [ # # ][ # # ]: 0 : else if(sToken.EqualsAscii("ADDRESS"))
89 [ # # ][ # # ]: 0 : sRet += (String)rUserOpt.GetStreet();
[ # # ][ # # ]
90 [ # # ][ # # ]: 0 : else if(sToken.EqualsAscii("COUNTRY"))
91 [ # # ][ # # ]: 0 : sRet += (String)rUserOpt.GetCountry();
[ # # ][ # # ]
92 [ # # ][ # # ]: 0 : else if(sToken.EqualsAscii("POSTALCODE"))
93 [ # # ][ # # ]: 0 : sRet += (String)rUserOpt.GetZip();
[ # # ][ # # ]
94 [ # # ][ # # ]: 0 : else if(sToken.EqualsAscii("CITY"))
95 [ # # ][ # # ]: 0 : sRet += (String)rUserOpt.GetCity();
[ # # ][ # # ]
96 [ # # ][ # # ]: 0 : else if(sToken.EqualsAscii("STATEPROV"))
97 [ # # ][ # # ]: 0 : sRet += (String)rUserOpt.GetState();
[ # # ][ # # ]
98 [ # # ]: 0 : else if(sToken.Len()) //spaces
99 [ # # ]: 0 : sRet += sToken;
100 [ # # ]: 0 : }
101 [ # # ]: 0 : return sRet;
102 : : }
103 : :
104 : 0 : SwEnvItem::SwEnvItem() :
105 : 0 : SfxPoolItem(FN_ENVELOP)
106 : : {
107 [ # # ]: 0 : aAddrText = aEmptyStr;
108 : 0 : bSend = sal_True;
109 [ # # ][ # # ]: 0 : aSendText = MakeSender();
[ # # ]
110 : 0 : lSendFromLeft = 566; // 1 cm
111 : 0 : lSendFromTop = 566; // 1 cm
112 [ # # ]: 0 : Size aEnvSz = SvxPaperInfo::GetPaperSize(PAPER_ENV_C65);
113 : 0 : lWidth = aEnvSz.Width();
114 : 0 : lHeight = aEnvSz.Height();
115 : 0 : eAlign = ENV_HOR_LEFT;
116 : 0 : bPrintFromAbove = sal_True;
117 : 0 : lShiftRight = 0;
118 : 0 : lShiftDown = 0;
119 : :
120 : 0 : lAddrFromLeft = Max(lWidth, lHeight) / 2;
121 : 0 : lAddrFromTop = Min(lWidth, lHeight) / 2;
122 : 0 : }
123 : :
124 : 0 : SwEnvItem::SwEnvItem(const SwEnvItem& rItem) :
125 : : SfxPoolItem(FN_ENVELOP),
126 : : aAddrText (rItem.aAddrText),
127 : : bSend (rItem.bSend),
128 : : aSendText (rItem.aSendText),
129 : : lAddrFromLeft (rItem.lAddrFromLeft),
130 : : lAddrFromTop (rItem.lAddrFromTop),
131 : : lSendFromLeft (rItem.lSendFromLeft),
132 : : lSendFromTop (rItem.lSendFromTop),
133 : : lWidth (rItem.lWidth),
134 : : lHeight (rItem.lHeight),
135 : : eAlign (rItem.eAlign),
136 : : bPrintFromAbove(rItem.bPrintFromAbove),
137 : : lShiftRight (rItem.lShiftRight),
138 : 0 : lShiftDown (rItem.lShiftDown)
139 : : {
140 : 0 : }
141 : :
142 : 0 : SwEnvItem& SwEnvItem::operator =(const SwEnvItem& rItem)
143 : : {
144 : 0 : aAddrText = rItem.aAddrText;
145 : 0 : bSend = rItem.bSend;
146 : 0 : aSendText = rItem.aSendText;
147 : 0 : lSendFromLeft = rItem.lSendFromLeft;
148 : 0 : lSendFromTop = rItem.lSendFromTop;
149 : 0 : lAddrFromLeft = rItem.lAddrFromLeft;
150 : 0 : lAddrFromTop = rItem.lAddrFromTop;
151 : 0 : lWidth = rItem.lWidth;
152 : 0 : lHeight = rItem.lHeight;
153 : 0 : eAlign = rItem.eAlign;
154 : 0 : bPrintFromAbove = rItem.bPrintFromAbove;
155 : 0 : lShiftRight = rItem.lShiftRight;
156 : 0 : lShiftDown = rItem.lShiftDown;
157 : 0 : return *this;
158 : : }
159 : :
160 : 0 : int SwEnvItem::operator ==(const SfxPoolItem& rItem) const
161 : : {
162 : 0 : const SwEnvItem& rEnv = (const SwEnvItem&) rItem;
163 : :
164 : 0 : return aAddrText == rEnv.aAddrText &&
165 : : bSend == rEnv.bSend &&
166 : 0 : aSendText == rEnv.aSendText &&
167 : : lSendFromLeft == rEnv.lSendFromLeft &&
168 : : lSendFromTop == rEnv.lSendFromTop &&
169 : : lAddrFromLeft == rEnv.lAddrFromLeft &&
170 : : lAddrFromTop == rEnv.lAddrFromTop &&
171 : : lWidth == rEnv.lWidth &&
172 : : lHeight == rEnv.lHeight &&
173 : : eAlign == rEnv.eAlign &&
174 : : bPrintFromAbove == rEnv.bPrintFromAbove &&
175 : : lShiftRight == rEnv.lShiftRight &&
176 [ # # # # ]: 0 : lShiftDown == rEnv.lShiftDown;
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
177 : : }
178 : :
179 : 0 : SfxPoolItem* SwEnvItem::Clone(SfxItemPool*) const
180 : : {
181 [ # # ]: 0 : return new SwEnvItem(*this);
182 : : }
183 : :
184 : 0 : SwEnvCfgItem::SwEnvCfgItem() :
185 [ # # ][ # # ]: 0 : ConfigItem(C2U("Office.Writer/Envelope"))
186 : : {
187 [ # # ]: 0 : Sequence<OUString> aNames = GetPropertyNames();
188 [ # # ]: 0 : Sequence<Any> aValues = GetProperties(aNames);
189 [ # # ]: 0 : EnableNotification(aNames);
190 : 0 : const Any* pValues = aValues.getConstArray();
191 : : OSL_ENSURE(aValues.getLength() == aNames.getLength(), "GetProperties failed");
192 [ # # ]: 0 : if(aValues.getLength() == aNames.getLength())
193 : : {
194 [ # # ]: 0 : for(int nProp = 0; nProp < aNames.getLength(); nProp++)
195 : : {
196 [ # # ]: 0 : if(pValues[nProp].hasValue())
197 : : {
198 [ # # # # : 0 : switch(nProp)
# # # # #
# # # #
# ]
199 : : {
200 : 0 : case 0: pValues[nProp] >>= aEnvItem.aAddrText; break;// "Inscription/Addressee",
201 : 0 : case 1: pValues[nProp] >>= aEnvItem.aSendText; break;// "Inscription/Sender",
202 : 0 : case 2: aEnvItem.bSend = *(sal_Bool*)pValues[nProp].getValue(); break;// "Inscription/UseSender",
203 : : case 3:
204 : 0 : pValues[nProp] >>= aEnvItem.lAddrFromLeft;// "Format/AddresseeFromLeft",
205 [ # # ]: 0 : aEnvItem.lAddrFromLeft = MM100_TO_TWIP(aEnvItem.lAddrFromLeft);
206 : 0 : break;
207 : : case 4:
208 : 0 : pValues[nProp] >>= aEnvItem.lAddrFromTop; // "Format/AddresseeFromTop",
209 [ # # ]: 0 : aEnvItem.lAddrFromTop = MM100_TO_TWIP(aEnvItem.lAddrFromTop);
210 : 0 : break;
211 : : case 5:
212 : 0 : pValues[nProp] >>= aEnvItem.lSendFromLeft; // "Format/SenderFromLeft",
213 [ # # ]: 0 : aEnvItem.lSendFromLeft = MM100_TO_TWIP(aEnvItem.lSendFromLeft);
214 : 0 : break;
215 : : case 6:
216 : 0 : pValues[nProp] >>= aEnvItem.lSendFromTop;// "Format/SenderFromTop",
217 [ # # ]: 0 : aEnvItem.lSendFromTop = MM100_TO_TWIP(aEnvItem.lSendFromTop);
218 : 0 : break;
219 : : case 7:
220 : 0 : pValues[nProp] >>= aEnvItem.lWidth; // "Format/Width",
221 [ # # ]: 0 : aEnvItem.lWidth = MM100_TO_TWIP(aEnvItem.lWidth);
222 : 0 : break;
223 : : case 8:
224 : 0 : pValues[nProp] >>= aEnvItem.lHeight; // "Format/Height",
225 [ # # ]: 0 : aEnvItem.lHeight = MM100_TO_TWIP(aEnvItem.lHeight);
226 : 0 : break;
227 : : case 9:
228 : : {
229 : 0 : sal_Int32 nTemp = 0;
230 : 0 : pValues[nProp] >>= nTemp; aEnvItem.eAlign = (SwEnvAlign)nTemp; break;// "Print/Alignment",
231 : : }
232 : 0 : case 10: aEnvItem.bPrintFromAbove = *(sal_Bool*)pValues[nProp].getValue(); break;// "Print/FromAbove",
233 : : case 11:
234 : 0 : pValues[nProp] >>= aEnvItem.lShiftRight;
235 [ # # ]: 0 : aEnvItem.lShiftRight = MM100_TO_TWIP(aEnvItem.lShiftRight);// "Print/Right",
236 : 0 : break;
237 : : case 12:
238 : 0 : pValues[nProp] >>= aEnvItem.lShiftDown;
239 [ # # ]: 0 : aEnvItem.lShiftDown = MM100_TO_TWIP(aEnvItem.lShiftDown);
240 : 0 : break;// "Print/Down"
241 : : }
242 : : }
243 : : }
244 [ # # ][ # # ]: 0 : }
245 : 0 : }
246 : :
247 [ # # ]: 0 : SwEnvCfgItem::~SwEnvCfgItem()
248 : : {
249 [ # # ]: 0 : }
250 : :
251 : 0 : void SwEnvCfgItem::Commit()
252 : : {
253 [ # # ]: 0 : Sequence<OUString> aNames = GetPropertyNames();
254 [ # # ]: 0 : Sequence<Any> aValues(aNames.getLength());
255 [ # # ]: 0 : Any* pValues = aValues.getArray();
256 : :
257 [ # # ]: 0 : const Type& rType = ::getBooleanCppuType();
258 [ # # ]: 0 : for(int nProp = 0; nProp < aNames.getLength(); nProp++)
259 : : {
260 [ # # # # : 0 : switch(nProp)
# # # # #
# # # #
# ]
261 : : {
262 [ # # ]: 0 : case 0: pValues[nProp] <<= aEnvItem.aAddrText; break;// "Inscription/Addressee",
263 [ # # ]: 0 : case 1: pValues[nProp] <<= aEnvItem.aSendText; break;// "Inscription/Sender",
264 : 0 : case 2: pValues[nProp].setValue(&aEnvItem.bSend, rType);break;// "Inscription/UseSender",
265 [ # # ][ # # ]: 0 : case 3: pValues[nProp] <<= static_cast <sal_Int32>(TWIP_TO_MM100(aEnvItem.lAddrFromLeft)) ; break;// "Format/AddresseeFromLeft",
266 [ # # ][ # # ]: 0 : case 4: pValues[nProp] <<= static_cast <sal_Int32>(TWIP_TO_MM100(aEnvItem.lAddrFromTop)) ; break;// "Format/AddresseeFromTop",
267 [ # # ][ # # ]: 0 : case 5: pValues[nProp] <<= static_cast <sal_Int32>(TWIP_TO_MM100(aEnvItem.lSendFromLeft)) ; break;// "Format/SenderFromLeft",
268 [ # # ][ # # ]: 0 : case 6: pValues[nProp] <<= static_cast <sal_Int32>(TWIP_TO_MM100(aEnvItem.lSendFromTop)) ; break;// "Format/SenderFromTop",
269 [ # # ][ # # ]: 0 : case 7: pValues[nProp] <<= static_cast <sal_Int32>(TWIP_TO_MM100(aEnvItem.lWidth)) ; break;// "Format/Width",
270 [ # # ][ # # ]: 0 : case 8: pValues[nProp] <<= static_cast <sal_Int32>(TWIP_TO_MM100(aEnvItem.lHeight)) ; break;// "Format/Height",
271 [ # # ]: 0 : case 9: pValues[nProp] <<= sal_Int32(aEnvItem.eAlign); break;// "Print/Alignment",
272 : 0 : case 10: pValues[nProp].setValue(&aEnvItem.bPrintFromAbove, rType); break;// "Print/FromAbove",
273 [ # # ][ # # ]: 0 : case 11: pValues[nProp] <<= static_cast <sal_Int32>(TWIP_TO_MM100(aEnvItem.lShiftRight));break; // "Print/Right",
274 [ # # ][ # # ]: 0 : case 12: pValues[nProp] <<= static_cast <sal_Int32>(TWIP_TO_MM100(aEnvItem.lShiftDown)); break;// "Print/Down"
275 : : }
276 : : }
277 [ # # ][ # # ]: 0 : PutProperties(aNames, aValues);
[ # # ]
278 : 0 : }
279 : :
280 : 0 : void SwEnvCfgItem::Notify( const ::com::sun::star::uno::Sequence< rtl::OUString >& ) {}
281 : :
282 : 0 : Sequence<rtl::OUString> SwEnvCfgItem::GetPropertyNames()
283 : : {
284 : : static const char* aPropNames[] =
285 : : {
286 : : "Inscription/Addressee", // 0
287 : : "Inscription/Sender", // 1
288 : : "Inscription/UseSender", // 2
289 : : "Format/AddresseeFromLeft", // 3
290 : : "Format/AddresseeFromTop", // 4
291 : : "Format/SenderFromLeft", // 5
292 : : "Format/SenderFromTop", // 6
293 : : "Format/Width", // 7
294 : : "Format/Height", // 8
295 : : "Print/Alignment", // 9
296 : : "Print/FromAbove", // 10
297 : : "Print/Right", // 11
298 : : "Print/Down" // 12
299 : : };
300 : 0 : const int nCount = 13;
301 : 0 : Sequence<OUString> aNames(nCount);
302 [ # # ]: 0 : OUString* pNames = aNames.getArray();
303 : :
304 [ # # ]: 0 : for(int i = 0; i < nCount; i++)
305 : 0 : pNames[i] = OUString::createFromAscii(aPropNames[i]);
306 : :
307 : 0 : return aNames;
308 : : }
309 : :
310 : 0 : bool SwEnvItem::QueryValue( Any& rVal, sal_uInt8 nMemberId ) const
311 : : {
312 : 0 : sal_Bool bRet = true;
313 [ # # # # : 0 : switch(nMemberId & ~CONVERT_TWIPS)
# # # # #
# # # #
# ]
314 : : {
315 : 0 : case MID_ENV_ADDR_TEXT : rVal <<= aAddrText; break;
316 : 0 : case MID_ENV_SEND : rVal <<= bSend; break;
317 : 0 : case MID_SEND_TEXT : rVal <<= aSendText; break;
318 : 0 : case MID_ENV_ADDR_FROM_LEFT : rVal <<= lAddrFromLeft; break;
319 : 0 : case MID_ENV_ADDR_FROM_TOP : rVal <<= lAddrFromTop; break;
320 : 0 : case MID_ENV_SEND_FROM_LEFT : rVal <<= lSendFromLeft; break;
321 : 0 : case MID_ENV_SEND_FROM_TOP : rVal <<= lSendFromTop; break;
322 : 0 : case MID_ENV_WIDTH : rVal <<= lWidth; break;
323 : 0 : case MID_ENV_HEIGHT : rVal <<= lHeight; break;
324 [ # # ]: 0 : case MID_ENV_ALIGN : rVal <<= (sal_Int16) eAlign; break;
325 : 0 : case MID_ENV_PRINT_FROM_ABOVE : rVal <<= bPrintFromAbove; break;
326 : 0 : case MID_ENV_SHIFT_RIGHT : rVal <<= lShiftRight; break;
327 : 0 : case MID_ENV_SHIFT_DOWN : rVal <<= lShiftDown; break;
328 : : default:
329 : : OSL_FAIL("Wrong memberId");
330 : 0 : bRet = false;
331 : : }
332 : 0 : return bRet;
333 : : }
334 : :
335 : 0 : bool SwEnvItem::PutValue(const Any& rVal, sal_uInt8 nMemberId)
336 : : {
337 : 0 : bool bRet = false;
338 [ # # # # : 0 : switch(nMemberId & ~CONVERT_TWIPS)
# # # # #
# # # #
# ]
339 : : {
340 : 0 : case MID_ENV_ADDR_TEXT : bRet = (rVal >>= aAddrText); break;
341 : 0 : case MID_ENV_SEND : bRet = (rVal >>= bSend); break;
342 : 0 : case MID_SEND_TEXT : bRet = (rVal >>= aSendText); break;
343 : 0 : case MID_ENV_ADDR_FROM_LEFT : bRet = (rVal >>= lAddrFromLeft); break;
344 : 0 : case MID_ENV_ADDR_FROM_TOP : bRet = (rVal >>= lAddrFromTop); break;
345 : 0 : case MID_ENV_SEND_FROM_LEFT : bRet = (rVal >>= lSendFromLeft); break;
346 : 0 : case MID_ENV_SEND_FROM_TOP : bRet = (rVal >>= lSendFromTop); break;
347 : 0 : case MID_ENV_WIDTH : bRet = (rVal >>= lWidth); break;
348 : 0 : case MID_ENV_HEIGHT : bRet = (rVal >>= lHeight); break;
349 : : case MID_ENV_ALIGN :
350 : : {
351 : 0 : sal_Int16 nTemp = 0;
352 : 0 : bRet = (rVal >>= nTemp);
353 [ # # ]: 0 : if (bRet)
354 : 0 : eAlign = SwEnvAlign(nTemp);
355 : : break;
356 : : }
357 : 0 : case MID_ENV_PRINT_FROM_ABOVE : bRet = (rVal >>= bPrintFromAbove); break;
358 : 0 : case MID_ENV_SHIFT_RIGHT : bRet = (rVal >>= lShiftRight); break;
359 : 0 : case MID_ENV_SHIFT_DOWN : bRet = (rVal >>= lShiftDown); break;
360 : : default:
361 : : OSL_FAIL("Wrong memberId");
362 : : }
363 : 0 : return bRet;
364 : : }
365 : :
366 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|