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