1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sw.hxx"
26 #ifdef SW_DLLIMPLEMENTATION
27 #undef SW_DLLIMPLEMENTATION
28 #endif
29
30
31 #include <com/sun/star/text/XTextFieldsSupplier.hpp>
32 #include <com/sun/star/util/XRefreshable.hpp>
33 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
34 #include <comphelper/processfactory.hxx>
35 #include <swtypes.hxx>
36 #include <labfmt.hxx>
37 #include <unotools.hxx>
38 #include <unoatxt.hxx>
39 #include <unomid.h>
40 #include <unoprnms.hxx>
41
42
43 using namespace ::com::sun::star;
44 using namespace ::com::sun::star::lang;
45 using namespace ::com::sun::star::container;
46 using namespace ::com::sun::star::uno;
47 using namespace ::comphelper;
48 using ::rtl::OUString;
49
50 #ifdef SW_PROP_NAME_STR
51 #undef SW_PROP_NAME_STR
52 #endif
53 #define SW_PROP_NAME_STR(nId) SwGetPropName((nId)).pName
54
55 /* -----------------08.07.99 15:15-------------------
56
57 --------------------------------------------------*/
InitFrameControl()58 void SwVisitingCardPage::InitFrameControl()
59 {
60 Link aLink(LINK(this, SwVisitingCardPage, FrameControlInitializedHdl));
61 pExampleFrame = new SwOneExampleFrame( aExampleWIN,
62 EX_SHOW_BUSINESS_CARDS, &aLink );
63
64 uno::Reference< lang::XMultiServiceFactory > xMgr =
65 getProcessServiceFactory();
66 //now the AutoText ListBoxes have to be filled
67
68 uno::Reference< uno::XInterface > xAText =
69 xMgr->createInstance( C2U("com.sun.star.text.AutoTextContainer") );
70 _xAutoText = uno::Reference< container::XNameAccess >(xAText, uno::UNO_QUERY);
71
72 uno::Sequence<OUString> aNames = _xAutoText->getElementNames();
73 const OUString* pGroups = aNames.getConstArray();
74 OUString uTitleName( C2U(SW_PROP_NAME_STR(UNO_NAME_TITLE)) );
75
76 for(sal_uInt16 i = 0; i < aNames.getLength(); i++)
77 {
78 uno::Any aGroup = _xAutoText->getByName(pGroups[i]);
79 uno::Reference< text::XAutoTextGroup > xGroup;
80 aGroup >>= xGroup;
81 uno::Reference< container::XIndexAccess > xIdxAcc(xGroup, uno::UNO_QUERY);
82 try
83 {
84 if(!xIdxAcc.is() || xIdxAcc->getCount())
85 {
86 uno::Reference< beans::XPropertySet > xPrSet(xGroup, uno::UNO_QUERY);
87 uno::Any aTitle = xPrSet->getPropertyValue( uTitleName );
88 OUString uTitle;
89 aTitle >>= uTitle;
90 String sGroup(pGroups[i]);
91 sal_uInt16 nEntry = aAutoTextGroupLB.InsertEntry(uTitle);
92 aAutoTextGroupLB.SetEntryData(nEntry, new String(sGroup));
93 }
94 }
95 catch(Exception&)
96 {
97 }
98 }
99 if(aAutoTextGroupLB.GetEntryCount())
100 {
101 if(LISTBOX_ENTRY_NOTFOUND == aAutoTextGroupLB.GetSelectEntryPos())
102 aAutoTextGroupLB.SelectEntryPos(0);
103 String sCurGroupName(
104 *(String*)aAutoTextGroupLB.GetEntryData(aAutoTextGroupLB.GetSelectEntryPos()));
105 if(_xAutoText->hasByName(sCurGroupName))
106 {
107 uno::Any aGroup = _xAutoText->getByName(sCurGroupName);
108 try
109 {
110 uno::Reference< text::XAutoTextGroup > xGroup;
111 aGroup >>= xGroup;
112 uno::Sequence< OUString > aBlockNames = xGroup->getElementNames();
113 uno::Sequence< OUString > aTitles = xGroup->getTitles() ;
114
115 SetUserData( aBlockNames.getLength(), aTitles.getConstArray(),
116 aBlockNames.getConstArray() );
117 }
118 catch( uno::RuntimeException& )
119 {
120 // we'll be her if path settings were wrong
121 }
122 }
123 }
124 }
125 /* -----------------01.10.99 13:19-------------------
126
127 --------------------------------------------------*/
IMPL_LINK(SwVisitingCardPage,FrameControlInitializedHdl,void *,EMPTYARG)128 IMPL_LINK( SwVisitingCardPage, FrameControlInitializedHdl, void*, EMPTYARG )
129 {
130 SvLBoxEntry* pSel = aAutoTextLB.FirstSelected();
131 String sEntry;
132 if( pSel )
133 sEntry = *(String*)pSel->GetUserData();
134 uno::Reference< text::XTextCursor > & xCrsr = pExampleFrame->GetTextCursor();
135 OUString uEntry(sEntry);
136
137 if(LISTBOX_ENTRY_NOTFOUND != aAutoTextGroupLB.GetSelectEntryPos())
138 {
139 String sGroup( *(String*)aAutoTextGroupLB.GetEntryData(
140 aAutoTextGroupLB.GetSelectEntryPos() ) );
141 uno::Any aGroup = _xAutoText->getByName(sGroup);
142 uno::Reference< text::XAutoTextGroup > xGroup;
143 aGroup >>= xGroup;
144
145 if( sEntry.Len() && xGroup->hasByName( uEntry ) )
146 {
147 uno::Any aEntry(xGroup->getByName(uEntry));
148 uno::Reference< text::XAutoTextEntry > xEntry;
149 aEntry >>= xEntry;
150 if(xEntry.is())
151 {
152 uno::Reference< text::XTextRange > xRange(xCrsr, uno::UNO_QUERY);
153 xEntry->applyTo(xRange);
154 }
155 UpdateFields();
156 }
157 }
158 return 0;
159 }
160 /* -----------------22.07.99 11:06-------------------
161
162 --------------------------------------------------*/
IMPL_LINK(SwVisitingCardPage,AutoTextSelectHdl,void *,pBox)163 IMPL_LINK( SwVisitingCardPage, AutoTextSelectHdl, void*, pBox )
164 {
165 if(_xAutoText.is())
166 {
167 if( &aAutoTextGroupLB == pBox )
168 {
169 String sGroup( *(String*)aAutoTextGroupLB.GetEntryData(
170 aAutoTextGroupLB.GetSelectEntryPos()));
171 uno::Any aGroup = _xAutoText->getByName(sGroup);
172 uno::Reference< text::XAutoTextGroup > xGroup;
173 aGroup >>= xGroup;
174
175 ClearUserData();
176 aAutoTextLB.Clear();
177
178 uno::Sequence<OUString> aBlockNames = xGroup->getElementNames();
179 uno::Sequence< OUString > aTitles = xGroup->getTitles() ;
180 SetUserData( aBlockNames.getLength(), aTitles.getConstArray(),
181 aBlockNames.getConstArray() );
182 }
183 if(pExampleFrame->IsInitialized())
184 pExampleFrame->ClearDocument( sal_True );
185 }
186 return 0;
187 }
188
189 /* -----------------01.10.99 11:59-------------------
190
191 --------------------------------------------------*/
UpdateFields()192 void SwVisitingCardPage::UpdateFields()
193 {
194 uno::Reference< frame::XModel > xModel;
195 if( pExampleFrame && (xModel = pExampleFrame->GetModel()).is())
196 {
197 SwLabDlg::UpdateFieldInformation(xModel, aLabItem);
198 }
199 }
200 /* -----------------01.10.99 15:16-------------------
201
202 --------------------------------------------------*/
UpdateFieldInformation(uno::Reference<frame::XModel> & xModel,const SwLabItem & rItem)203 void SwLabDlg::UpdateFieldInformation(uno::Reference< frame::XModel > & xModel, const SwLabItem& rItem)
204 {
205 uno::Reference< text::XTextFieldsSupplier > xFlds(xModel, uno::UNO_QUERY);
206 uno::Reference< container::XNameAccess > xFldMasters = xFlds->getTextFieldMasters();
207
208 static const struct _SwLabItemMap {
209 const char* pName;
210 rtl::OUString SwLabItem:: *pValue;
211 } aArr[] = {
212 { "BC_PRIV_FIRSTNAME" , &SwLabItem::aPrivFirstName },
213 { "BC_PRIV_NAME" , &SwLabItem::aPrivName },
214 { "BC_PRIV_INITIALS" , &SwLabItem::aPrivShortCut },
215 { "BC_PRIV_FIRSTNAME_2", &SwLabItem::aPrivFirstName2 },
216 { "BC_PRIV_NAME_2" , &SwLabItem::aPrivName2 },
217 { "BC_PRIV_INITIALS_2" , &SwLabItem::aPrivShortCut2 },
218 { "BC_PRIV_STREET" , &SwLabItem::aPrivStreet },
219 { "BC_PRIV_ZIP" , &SwLabItem::aPrivZip },
220 { "BC_PRIV_CITY" , &SwLabItem::aPrivCity },
221 { "BC_PRIV_COUNTRY" , &SwLabItem::aPrivCountry },
222 { "BC_PRIV_STATE" , &SwLabItem::aPrivState },
223 { "BC_PRIV_TITLE" , &SwLabItem::aPrivTitle },
224 { "BC_PRIV_PROFESSION" , &SwLabItem::aPrivProfession },
225 { "BC_PRIV_PHONE" , &SwLabItem::aPrivPhone },
226 { "BC_PRIV_MOBILE" , &SwLabItem::aPrivMobile },
227 { "BC_PRIV_FAX" , &SwLabItem::aPrivFax },
228 { "BC_PRIV_WWW" , &SwLabItem::aPrivWWW },
229 { "BC_PRIV_MAIL" , &SwLabItem::aPrivMail },
230 { "BC_COMP_COMPANY" , &SwLabItem::aCompCompany },
231 { "BC_COMP_COMPANYEXT" , &SwLabItem::aCompCompanyExt },
232 { "BC_COMP_SLOGAN" , &SwLabItem::aCompSlogan },
233 { "BC_COMP_STREET" , &SwLabItem::aCompStreet },
234 { "BC_COMP_ZIP" , &SwLabItem::aCompZip },
235 { "BC_COMP_CITY" , &SwLabItem::aCompCity },
236 { "BC_COMP_COUNTRY" , &SwLabItem::aCompCountry },
237 { "BC_COMP_STATE" , &SwLabItem::aCompState },
238 { "BC_COMP_POSITION" , &SwLabItem::aCompPosition },
239 { "BC_COMP_PHONE" , &SwLabItem::aCompPhone },
240 { "BC_COMP_MOBILE" , &SwLabItem::aCompMobile },
241 { "BC_COMP_FAX" , &SwLabItem::aCompFax },
242 { "BC_COMP_WWW" , &SwLabItem::aCompWWW },
243 { "BC_COMP_MAIL" , &SwLabItem::aCompMail },
244 { 0, 0 }
245 };
246
247 try
248 {
249 String sFldName( String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM(
250 "com.sun.star.text.FieldMaster.User." )));
251 OUString uCntName( C2U( SW_PROP_NAME_STR(UNO_NAME_CONTENT )));
252 for( const _SwLabItemMap* p = aArr; p->pName; ++p )
253 {
254 String sCurFldName( sFldName );
255 sCurFldName.AppendAscii( p->pName );
256 OUString uFldName( sCurFldName );
257 if( xFldMasters->hasByName( uFldName ))
258 {
259 uno::Any aFirstName = xFldMasters->getByName( uFldName );
260 uno::Reference< beans::XPropertySet > xFld;
261 aFirstName >>= xFld;
262 uno::Any aContent;
263 aContent <<= rItem.*p->pValue;
264 xFld->setPropertyValue( uCntName, aContent );
265 }
266 }
267 }
268 catch( uno::RuntimeException&)
269 {
270 //
271 }
272
273 uno::Reference< container::XEnumerationAccess > xFldAcc = xFlds->getTextFields();
274 uno::Reference< util::XRefreshable > xRefresh(xFldAcc, uno::UNO_QUERY);
275 xRefresh->refresh();
276 }
277
278