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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 } 277cdf0e10cSrcweir 278