1efeef26fSAndrew Rist /************************************************************** 2efeef26fSAndrew Rist * 3efeef26fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4efeef26fSAndrew Rist * or more contributor license agreements. See the NOTICE file 5efeef26fSAndrew Rist * distributed with this work for additional information 6efeef26fSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7efeef26fSAndrew Rist * to you under the Apache License, Version 2.0 (the 8efeef26fSAndrew Rist * "License"); you may not use this file except in compliance 9efeef26fSAndrew Rist * with the License. You may obtain a copy of the License at 10efeef26fSAndrew Rist * 11efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12efeef26fSAndrew Rist * 13efeef26fSAndrew Rist * Unless required by applicable law or agreed to in writing, 14efeef26fSAndrew Rist * software distributed under the License is distributed on an 15efeef26fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16efeef26fSAndrew Rist * KIND, either express or implied. See the License for the 17efeef26fSAndrew Rist * specific language governing permissions and limitations 18efeef26fSAndrew Rist * under the License. 19efeef26fSAndrew Rist * 20efeef26fSAndrew Rist *************************************************************/ 21efeef26fSAndrew Rist 22efeef26fSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_sw.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir 28cdf0e10cSrcweir #include <string> // HACK: prevent conflict between STLPORT and Workshop headers 29cdf0e10cSrcweir #include <hintids.hxx> 30cdf0e10cSrcweir #include <com/sun/star/util/SearchOptions.hpp> 31cdf0e10cSrcweir #include <svl/cjkoptions.hxx> 32cdf0e10cSrcweir #include <svl/ctloptions.hxx> 33cdf0e10cSrcweir #include <svx/pageitem.hxx> 34cdf0e10cSrcweir #include <svl/whiter.hxx> 35cdf0e10cSrcweir #include <sfx2/dispatch.hxx> 36cdf0e10cSrcweir #include <svl/stritem.hxx> 37cdf0e10cSrcweir #include <svtools/txtcmp.hxx> 38cdf0e10cSrcweir #include <svl/itempool.hxx> 39cdf0e10cSrcweir #include <svl/eitem.hxx> 40cdf0e10cSrcweir #include <svl/srchitem.hxx> 41cdf0e10cSrcweir #include <sfx2/request.hxx> 42cdf0e10cSrcweir #include <svx/srchdlg.hxx> 43cdf0e10cSrcweir #include <vcl/msgbox.hxx> 44cdf0e10cSrcweir #include <vcl/wrkwin.hxx> 45cdf0e10cSrcweir #include "editeng/unolingu.hxx" 46cdf0e10cSrcweir #include <swmodule.hxx> 47cdf0e10cSrcweir #include <swwait.hxx> 48cdf0e10cSrcweir #include <workctrl.hxx> 49cdf0e10cSrcweir #include <view.hxx> 50cdf0e10cSrcweir #include <wrtsh.hxx> 51cdf0e10cSrcweir #include <swundo.hxx> // fuer Undo-Ids 52cdf0e10cSrcweir #include <uitool.hxx> 53cdf0e10cSrcweir #include <cmdid.h> 54cdf0e10cSrcweir #include <docsh.hxx> 55cdf0e10cSrcweir 56cdf0e10cSrcweir #include <view.hrc> 57cdf0e10cSrcweir #include <SwRewriter.hxx> 58cdf0e10cSrcweir #include <comcore.hrc> 59cdf0e10cSrcweir 60cdf0e10cSrcweir #include "PostItMgr.hxx" 61cdf0e10cSrcweir 62cdf0e10cSrcweir using namespace com::sun::star; 63cdf0e10cSrcweir using namespace ::com::sun::star::i18n; 64cdf0e10cSrcweir using namespace ::com::sun::star::lang; 65cdf0e10cSrcweir using namespace ::com::sun::star::util; 66cdf0e10cSrcweir using namespace ::com::sun::star::i18n; 67cdf0e10cSrcweir 68cdf0e10cSrcweir #define SRCH_ATTR_OFF 0 69cdf0e10cSrcweir #define SRCH_ATTR_ON 1 70cdf0e10cSrcweir #define SRCH_ATTR_SET 2 71cdf0e10cSrcweir 72cdf0e10cSrcweir /*-------------------------------------------------------------------- 73cdf0e10cSrcweir Beschreibung: Search Parameter 74cdf0e10cSrcweir --------------------------------------------------------------------*/ 75cdf0e10cSrcweir 76cdf0e10cSrcweir struct SwSearchOptions 77cdf0e10cSrcweir { 78cdf0e10cSrcweir SwDocPositions eStart, eEnd; 79cdf0e10cSrcweir sal_Bool bDontWrap; 80cdf0e10cSrcweir 81cdf0e10cSrcweir SwSearchOptions( SwWrtShell* pSh, sal_Bool bBackward ); 82cdf0e10cSrcweir }; 83cdf0e10cSrcweir 84cdf0e10cSrcweir 85cdf0e10cSrcweir inline Window* GetParentWindow( SvxSearchDialog* pSrchDlg ) 86cdf0e10cSrcweir { 87cdf0e10cSrcweir Window* pWin; 88cdf0e10cSrcweir if( pSrchDlg && pSrchDlg->IsVisible() ) 89cdf0e10cSrcweir pWin = LAYOUT_THIS_WINDOW (pSrchDlg); 90cdf0e10cSrcweir else 91cdf0e10cSrcweir pWin = 0; 92cdf0e10cSrcweir return pWin; 93cdf0e10cSrcweir } 94cdf0e10cSrcweir 95cdf0e10cSrcweir 96cdf0e10cSrcweir /*-----------------12.04.97 13:04------------------- 97cdf0e10cSrcweir 98cdf0e10cSrcweir --------------------------------------------------*/ 99cdf0e10cSrcweir 100cdf0e10cSrcweir 101cdf0e10cSrcweir void SwView::ExecSearch(SfxRequest& rReq, sal_Bool bNoMessage) 102cdf0e10cSrcweir { 103cdf0e10cSrcweir const SfxItemSet* pArgs = rReq.GetArgs(); 104cdf0e10cSrcweir const SfxPoolItem* pItem = 0; 105cdf0e10cSrcweir const sal_uInt16 nId = SvxSearchDialogWrapper::GetChildWindowId(); 106cdf0e10cSrcweir SvxSearchDialogWrapper *pWrp = (SvxSearchDialogWrapper*)GetViewFrame()->GetChildWindow(nId); 107cdf0e10cSrcweir sal_Bool bQuiet = sal_False; 108cdf0e10cSrcweir if(pArgs && SFX_ITEM_SET == pArgs->GetItemState(SID_SEARCH_QUIET, sal_False, &pItem)) 109cdf0e10cSrcweir bQuiet = ((const SfxBoolItem*) pItem)->GetValue(); 110cdf0e10cSrcweir 111cdf0e10cSrcweir sal_Bool bApi = bQuiet | bNoMessage; 112cdf0e10cSrcweir 113cdf0e10cSrcweir sal_uInt16 nSlot = rReq.GetSlot(); 114cdf0e10cSrcweir if (nSlot == FN_REPEAT_SEARCH && !pSrchItem) 115cdf0e10cSrcweir { 116cdf0e10cSrcweir if(bApi) 117cdf0e10cSrcweir { 118cdf0e10cSrcweir rReq.SetReturnValue(SfxBoolItem(nSlot, sal_False)); 119cdf0e10cSrcweir nSlot = 0; 120cdf0e10cSrcweir } 121cdf0e10cSrcweir } 122cdf0e10cSrcweir if( pWrtShell->IsBlockMode() ) 123cdf0e10cSrcweir pWrtShell->LeaveBlockMode(); 124cdf0e10cSrcweir switch (nSlot) 125cdf0e10cSrcweir { 126cdf0e10cSrcweir // erstmal Nichts tun 127cdf0e10cSrcweir case SID_SEARCH_ITEM: 128cdf0e10cSrcweir { 129cdf0e10cSrcweir delete pSrchItem; 130cdf0e10cSrcweir pSrchItem = (SvxSearchItem*) pArgs->Get(SID_SEARCH_ITEM).Clone(); 131cdf0e10cSrcweir } 132cdf0e10cSrcweir break; 133cdf0e10cSrcweir 134cdf0e10cSrcweir case FID_SEARCH_ON: 135cdf0e10cSrcweir bJustOpened = sal_True; 136cdf0e10cSrcweir GetViewFrame()->GetBindings().Invalidate(SID_SEARCH_ITEM); 137cdf0e10cSrcweir break; 138cdf0e10cSrcweir 139cdf0e10cSrcweir case FID_SEARCH_OFF: 140cdf0e10cSrcweir if(pArgs) 141cdf0e10cSrcweir { 142cdf0e10cSrcweir // Dialog abmelden 143cdf0e10cSrcweir delete pSrchItem; 144cdf0e10cSrcweir pSrchItem = (SvxSearchItem*) pArgs->Get(SID_SEARCH_ITEM).Clone(); 145cdf0e10cSrcweir 146cdf0e10cSrcweir DELETEZ( pSrchList ); 147cdf0e10cSrcweir DELETEZ( pReplList ); 148cdf0e10cSrcweir 149cdf0e10cSrcweir if ( pWrp ) 150cdf0e10cSrcweir { 151cdf0e10cSrcweir pSrchDlg = static_cast <SvxSearchDialog*> (pWrp->getDialog ()); 152cdf0e10cSrcweir // die Search / Replace -Items merken wir uns 153cdf0e10cSrcweir const SearchAttrItemList* pList = pSrchDlg->GetSearchItemList(); 154cdf0e10cSrcweir if( pList && pList->Count() ) 155cdf0e10cSrcweir pSrchList = new SearchAttrItemList( *pList ); 156cdf0e10cSrcweir 157cdf0e10cSrcweir if( 0 != (pList = pSrchDlg->GetReplaceItemList() ) && 158cdf0e10cSrcweir pList->Count() ) 159cdf0e10cSrcweir pReplList = new SearchAttrItemList( *pList ); 160cdf0e10cSrcweir } 161cdf0e10cSrcweir } 162cdf0e10cSrcweir break; 163cdf0e10cSrcweir 164cdf0e10cSrcweir case FN_REPEAT_SEARCH: 165cdf0e10cSrcweir case FID_SEARCH_NOW: 166cdf0e10cSrcweir { 167cdf0e10cSrcweir { 168cdf0e10cSrcweir if(FID_SEARCH_NOW == nSlot && !rReq.IsAPI()) 169cdf0e10cSrcweir SwView::SetMoveType(NID_SRCH_REP); 170cdf0e10cSrcweir if ( pWrp ) 171cdf0e10cSrcweir { 172cdf0e10cSrcweir pSrchDlg = static_cast <SvxSearchDialog*> (pWrp->getDialog ()); 173cdf0e10cSrcweir } 174cdf0e10cSrcweir else 175cdf0e10cSrcweir pSrchDlg = 0; 176cdf0e10cSrcweir } 177cdf0e10cSrcweir 178cdf0e10cSrcweir if (pSrchDlg) 179cdf0e10cSrcweir { 180cdf0e10cSrcweir DELETEZ( pSrchList ); 181cdf0e10cSrcweir DELETEZ( pReplList ); 182cdf0e10cSrcweir 183cdf0e10cSrcweir const SearchAttrItemList* pList = pSrchDlg->GetSearchItemList(); 184cdf0e10cSrcweir if( pList && pList->Count() ) 185cdf0e10cSrcweir pSrchList = new SearchAttrItemList( *pList ); 186cdf0e10cSrcweir 187cdf0e10cSrcweir if( 0 != (pList = pSrchDlg->GetReplaceItemList() ) && 188cdf0e10cSrcweir pList->Count() ) 189cdf0e10cSrcweir pReplList = new SearchAttrItemList( *pList ); 190cdf0e10cSrcweir } 191cdf0e10cSrcweir 192cdf0e10cSrcweir if (nSlot == FN_REPEAT_SEARCH) 193cdf0e10cSrcweir { 194cdf0e10cSrcweir ASSERT(pSrchItem, "Search-Item fehlt"); 195cdf0e10cSrcweir if( !pSrchItem ) 196cdf0e10cSrcweir pSrchItem = new SvxSearchItem(SID_SEARCH_ITEM); 197cdf0e10cSrcweir } 198cdf0e10cSrcweir else 199cdf0e10cSrcweir { 200cdf0e10cSrcweir // SearchItem aus Request besorgen 201cdf0e10cSrcweir ASSERT(pArgs, "Args fehlen"); 202cdf0e10cSrcweir if ( pArgs ) 203cdf0e10cSrcweir { 204cdf0e10cSrcweir delete pSrchItem; 205cdf0e10cSrcweir pSrchItem = (SvxSearchItem*) pArgs->Get(SID_SEARCH_ITEM).Clone(); 206cdf0e10cSrcweir } 207cdf0e10cSrcweir } 208cdf0e10cSrcweir switch (pSrchItem->GetCommand()) 209cdf0e10cSrcweir { 210cdf0e10cSrcweir case SVX_SEARCHCMD_FIND: 211cdf0e10cSrcweir { 212cdf0e10cSrcweir sal_Bool bRet = SearchAndWrap(bApi); 213cdf0e10cSrcweir if( bRet ) 214cdf0e10cSrcweir Scroll(pWrtShell->GetCharRect().SVRect()); 215cdf0e10cSrcweir rReq.SetReturnValue(SfxBoolItem(nSlot, bRet)); 216*ca62e2c2SSteve Yin //IAccessibility2 Implementation 2009----- 217*ca62e2c2SSteve Yin if ( Application::IsAccessibilityEnabled() ) 218*ca62e2c2SSteve Yin { 219*ca62e2c2SSteve Yin const sal_uInt16 nId = SvxSearchDialogWrapper::GetChildWindowId(); 220*ca62e2c2SSteve Yin SvxSearchDialogWrapper *pWrp = (SvxSearchDialogWrapper*)GetViewFrame()->GetChildWindow(nId); 221*ca62e2c2SSteve Yin if ( pWrp ) 222*ca62e2c2SSteve Yin { 223*ca62e2c2SSteve Yin pSrchDlg = (SvxSearchDialog*)(pWrp->GetWindow()); 224*ca62e2c2SSteve Yin pSrchDlg->SetDocWin( (Window*)pEditWin ); 225*ca62e2c2SSteve Yin pSrchDlg->SetSrchFlag(); 226*ca62e2c2SSteve Yin } 227*ca62e2c2SSteve Yin } 228*ca62e2c2SSteve Yin //-----IAccessibility2 Implementation 2009 229cdf0e10cSrcweir } 230cdf0e10cSrcweir break; 231cdf0e10cSrcweir case SVX_SEARCHCMD_FIND_ALL: 232cdf0e10cSrcweir { 233cdf0e10cSrcweir sal_Bool bRet = SearchAll(); 234cdf0e10cSrcweir if( !bRet ) 235cdf0e10cSrcweir { 236cdf0e10cSrcweir if( !bApi ) 237cdf0e10cSrcweir { 238cdf0e10cSrcweir Window* pParentWindow = GetParentWindow( pSrchDlg ); 239cdf0e10cSrcweir InfoBox( pParentWindow, SW_RES(MSG_NOT_FOUND)).Execute(); 240cdf0e10cSrcweir } 241cdf0e10cSrcweir bFound = sal_False; 242cdf0e10cSrcweir } 243cdf0e10cSrcweir rReq.SetReturnValue(SfxBoolItem(nSlot, bRet)); 244*ca62e2c2SSteve Yin //IAccessibility2 Implementation 2009----- 245*ca62e2c2SSteve Yin if ( Application::IsAccessibilityEnabled() ) 246*ca62e2c2SSteve Yin { 247*ca62e2c2SSteve Yin const sal_uInt16 nId = SvxSearchDialogWrapper::GetChildWindowId(); 248*ca62e2c2SSteve Yin SvxSearchDialogWrapper *pWrp = (SvxSearchDialogWrapper*)GetViewFrame()->GetChildWindow(nId); 249*ca62e2c2SSteve Yin 250*ca62e2c2SSteve Yin if ( pWrp ) 251*ca62e2c2SSteve Yin { 252*ca62e2c2SSteve Yin pSrchDlg = (SvxSearchDialog*)(pWrp->GetWindow()); 253*ca62e2c2SSteve Yin pSrchDlg->SetDocWin( (Window*)pEditWin ); 254*ca62e2c2SSteve Yin pSrchDlg->SetSrchFlag(); 255*ca62e2c2SSteve Yin } 256*ca62e2c2SSteve Yin } 257*ca62e2c2SSteve Yin //-----IAccessibility2 Implementation 2009 258cdf0e10cSrcweir } 259cdf0e10cSrcweir break; 260cdf0e10cSrcweir case SVX_SEARCHCMD_REPLACE: 261cdf0e10cSrcweir { 262cdf0e10cSrcweir 263cdf0e10cSrcweir // 1) Selektion ersetzen (nicht. wenn nur Attribute ersetzt 264cdf0e10cSrcweir // werden sollen) 265cdf0e10cSrcweir //JP 27.04.95: warum ? 266cdf0e10cSrcweir // was ist, wenn man das gefundene nur attributieren will?? 267cdf0e10cSrcweir 268cdf0e10cSrcweir sal_uInt16 nCmd = SVX_SEARCHCMD_FIND; 269cdf0e10cSrcweir if( pSrchItem->GetReplaceString().Len() || 270cdf0e10cSrcweir !pReplList ) 271cdf0e10cSrcweir { 272cdf0e10cSrcweir // Verhindern, dass - falls der Suchstring im 273cdf0e10cSrcweir // Ersetzungsstring enthalten ist - der ersetzte String 274cdf0e10cSrcweir // noch einmal gefunden wird. 275cdf0e10cSrcweir 276cdf0e10cSrcweir sal_Bool bBack = pSrchItem->GetBackward(); 277cdf0e10cSrcweir if (bBack) 278cdf0e10cSrcweir pWrtShell->Push(); 279cdf0e10cSrcweir String aReplace( pSrchItem->GetReplaceString() ); 280cdf0e10cSrcweir SearchOptions aTmp( pSrchItem->GetSearchOptions() ); 281cdf0e10cSrcweir String *pBackRef = ReplaceBackReferences( aTmp, pWrtShell->GetCrsr() ); 282cdf0e10cSrcweir if( pBackRef ) 283cdf0e10cSrcweir pSrchItem->SetReplaceString( *pBackRef ); 284cdf0e10cSrcweir Replace(); 285cdf0e10cSrcweir if( pBackRef ) 286cdf0e10cSrcweir { 287cdf0e10cSrcweir pSrchItem->SetReplaceString( aReplace ); 288cdf0e10cSrcweir delete pBackRef; 289cdf0e10cSrcweir } 290cdf0e10cSrcweir if (bBack) 291cdf0e10cSrcweir { 292cdf0e10cSrcweir pWrtShell->Pop(); 293cdf0e10cSrcweir pWrtShell->SwapPam(); 294cdf0e10cSrcweir } 295cdf0e10cSrcweir } 296cdf0e10cSrcweir else if( pReplList ) 297cdf0e10cSrcweir nCmd = SVX_SEARCHCMD_REPLACE; 298cdf0e10cSrcweir 299cdf0e10cSrcweir // 2) Weiter suchen (ohne zu ersetzen!) 300cdf0e10cSrcweir 301cdf0e10cSrcweir sal_uInt16 nOldCmd = pSrchItem->GetCommand(); 302cdf0e10cSrcweir pSrchItem->SetCommand( nCmd ); 303cdf0e10cSrcweir sal_Bool bRet = SearchAndWrap(bApi); 304cdf0e10cSrcweir if( bRet ) 305cdf0e10cSrcweir Scroll( pWrtShell->GetCharRect().SVRect()); 306cdf0e10cSrcweir pSrchItem->SetCommand( nOldCmd ); 307cdf0e10cSrcweir rReq.SetReturnValue(SfxBoolItem(nSlot, bRet)); 308cdf0e10cSrcweir } 309*ca62e2c2SSteve Yin //IAccessibility2 Implementation 2009----- 310*ca62e2c2SSteve Yin { 311*ca62e2c2SSteve Yin const sal_uInt16 nId = SvxSearchDialogWrapper::GetChildWindowId(); 312*ca62e2c2SSteve Yin SvxSearchDialogWrapper *pWrp = (SvxSearchDialogWrapper*)GetViewFrame()->GetChildWindow(nId); 313*ca62e2c2SSteve Yin 314*ca62e2c2SSteve Yin if ( pWrp ) 315*ca62e2c2SSteve Yin { 316*ca62e2c2SSteve Yin pSrchDlg = (SvxSearchDialog*)(pWrp->GetWindow()); 317*ca62e2c2SSteve Yin pSrchDlg->SetDocWin( (Window*)pEditWin ); 318*ca62e2c2SSteve Yin pSrchDlg->SetSrchFlag(); 319*ca62e2c2SSteve Yin } 320*ca62e2c2SSteve Yin } 321*ca62e2c2SSteve Yin //-----IAccessibility2 Implementation 2009 322cdf0e10cSrcweir break; 323cdf0e10cSrcweir 324cdf0e10cSrcweir case SVX_SEARCHCMD_REPLACE_ALL: 325cdf0e10cSrcweir { 326cdf0e10cSrcweir SwSearchOptions aOpts( pWrtShell, pSrchItem->GetBackward() ); 327cdf0e10cSrcweir 328cdf0e10cSrcweir 329cdf0e10cSrcweir if( !pSrchItem->GetSelection() ) 330cdf0e10cSrcweir { 331cdf0e10cSrcweir // bestehende Selektionen aufheben, 332cdf0e10cSrcweir // wenn nicht in selektierten Bereichen gesucht werden soll 333cdf0e10cSrcweir (pWrtShell->*pWrtShell->fnKillSel)(0, sal_False); 334cdf0e10cSrcweir if( DOCPOS_START == aOpts.eEnd ) 335cdf0e10cSrcweir pWrtShell->EndDoc(); 336cdf0e10cSrcweir else 337cdf0e10cSrcweir pWrtShell->SttDoc(); 338cdf0e10cSrcweir } 339cdf0e10cSrcweir 340cdf0e10cSrcweir bExtra = sal_False; 341cdf0e10cSrcweir sal_uLong nFound; 342cdf0e10cSrcweir 343cdf0e10cSrcweir { //Scope for SwWait-Object 344cdf0e10cSrcweir SwWait aWait( *GetDocShell(), sal_True ); 345cdf0e10cSrcweir pWrtShell->StartAllAction(); 346cdf0e10cSrcweir nFound = FUNC_Search( aOpts ); 347cdf0e10cSrcweir pWrtShell->EndAllAction(); 348cdf0e10cSrcweir } 349cdf0e10cSrcweir rReq.SetReturnValue(SfxBoolItem(nSlot, nFound != 0 && ULONG_MAX != nFound)); 350cdf0e10cSrcweir if( !nFound ) 351cdf0e10cSrcweir { 352cdf0e10cSrcweir if( !bApi ) 353cdf0e10cSrcweir { 354cdf0e10cSrcweir Window* pParentWindow = GetParentWindow( pSrchDlg ); 355cdf0e10cSrcweir InfoBox( pParentWindow, SW_RES(MSG_NOT_FOUND)).Execute(); 356cdf0e10cSrcweir } 357cdf0e10cSrcweir bFound = sal_False; 358cdf0e10cSrcweir return; 359cdf0e10cSrcweir } 360cdf0e10cSrcweir 361cdf0e10cSrcweir if( !bApi && ULONG_MAX != nFound) 362cdf0e10cSrcweir { 363cdf0e10cSrcweir String aText( SW_RES( STR_NB_REPLACED ) ); 364cdf0e10cSrcweir const xub_StrLen nPos = aText.Search( String::CreateFromAscii("XX") ); 365cdf0e10cSrcweir aText.Erase( nPos, 2 ); 366cdf0e10cSrcweir aText.Insert( String::CreateFromInt32( nFound ), nPos ); 367cdf0e10cSrcweir Window* pParentWindow = GetParentWindow( pSrchDlg ); 368cdf0e10cSrcweir InfoBox( pParentWindow, aText ).Execute(); 369cdf0e10cSrcweir } 370cdf0e10cSrcweir } 371*ca62e2c2SSteve Yin //IAccessibility2 Implementation 2009----- 372*ca62e2c2SSteve Yin const sal_uInt16 nId = SvxSearchDialogWrapper::GetChildWindowId(); 373*ca62e2c2SSteve Yin SvxSearchDialogWrapper *pWrp = (SvxSearchDialogWrapper*)GetViewFrame()->GetChildWindow(nId); 374*ca62e2c2SSteve Yin 375*ca62e2c2SSteve Yin if ( pWrp ) 376*ca62e2c2SSteve Yin { 377*ca62e2c2SSteve Yin pSrchDlg = (SvxSearchDialog*)(pWrp->GetWindow()); 378*ca62e2c2SSteve Yin pSrchDlg->SetDocWin( (Window*)pEditWin ); 379*ca62e2c2SSteve Yin pSrchDlg->SetSrchFlag(); 380*ca62e2c2SSteve Yin } 381*ca62e2c2SSteve Yin //-----IAccessibility2 Implementation 2009 382cdf0e10cSrcweir break; 383cdf0e10cSrcweir } 384cdf0e10cSrcweir 385cdf0e10cSrcweir uno::Reference< frame::XDispatchRecorder > xRecorder = 386cdf0e10cSrcweir GetViewFrame()->GetBindings().GetRecorder(); 387cdf0e10cSrcweir //prevent additional dialogs in recorded macros 388cdf0e10cSrcweir if ( xRecorder.is() ) 389cdf0e10cSrcweir rReq.AppendItem(SfxBoolItem(SID_SEARCH_QUIET, sal_True)); 390cdf0e10cSrcweir 391cdf0e10cSrcweir rReq.Done(); 392cdf0e10cSrcweir } 393cdf0e10cSrcweir break; 394cdf0e10cSrcweir case FID_SEARCH_SEARCHSET: 395cdf0e10cSrcweir case FID_SEARCH_REPLACESET: 396cdf0e10cSrcweir { 397cdf0e10cSrcweir static const sal_uInt16 aNormalAttr[] = 398cdf0e10cSrcweir { 399cdf0e10cSrcweir /* 0 */ RES_CHRATR_CASEMAP, RES_CHRATR_CASEMAP, 400cdf0e10cSrcweir /* 2 */ RES_CHRATR_COLOR, RES_CHRATR_POSTURE, 401cdf0e10cSrcweir /* 4 */ RES_CHRATR_SHADOWED, RES_CHRATR_WORDLINEMODE, 402cdf0e10cSrcweir /* 6 */ RES_CHRATR_BLINK, RES_CHRATR_BLINK, 403cdf0e10cSrcweir /* 8 */ RES_CHRATR_BACKGROUND, RES_CHRATR_BACKGROUND, 404cdf0e10cSrcweir /*10 */ RES_CHRATR_ROTATE, RES_CHRATR_ROTATE, 405cdf0e10cSrcweir /*12 */ RES_CHRATR_SCALEW, RES_CHRATR_RELIEF, 406cdf0e10cSrcweir // insert position for CJK/CTL attributes! 407cdf0e10cSrcweir /*14 */ RES_PARATR_LINESPACING, RES_PARATR_HYPHENZONE, 408cdf0e10cSrcweir /*16 */ RES_PARATR_REGISTER, RES_PARATR_REGISTER, 409cdf0e10cSrcweir /*18 */ RES_PARATR_VERTALIGN, RES_PARATR_VERTALIGN, 410cdf0e10cSrcweir /*20 */ RES_LR_SPACE, RES_UL_SPACE, 411cdf0e10cSrcweir /*22 */ SID_ATTR_PARA_MODEL, SID_ATTR_PARA_KEEP, 412cdf0e10cSrcweir /*24 */ 0 413cdf0e10cSrcweir }; 414cdf0e10cSrcweir 415cdf0e10cSrcweir static const sal_uInt16 aCJKAttr[] = 416cdf0e10cSrcweir { 417cdf0e10cSrcweir RES_CHRATR_CJK_FONT, RES_CHRATR_CJK_WEIGHT, 418cdf0e10cSrcweir RES_CHRATR_EMPHASIS_MARK, RES_CHRATR_TWO_LINES, 419cdf0e10cSrcweir RES_PARATR_SCRIPTSPACE, RES_PARATR_FORBIDDEN_RULES 420cdf0e10cSrcweir }; 421cdf0e10cSrcweir static const sal_uInt16 aCTLAttr[] = 422cdf0e10cSrcweir { 423cdf0e10cSrcweir RES_CHRATR_CTL_FONT, RES_CHRATR_CTL_WEIGHT 424cdf0e10cSrcweir }; 425cdf0e10cSrcweir 426cdf0e10cSrcweir SvUShorts aArr( 0, 16 ); 427cdf0e10cSrcweir aArr.Insert( aNormalAttr, 428cdf0e10cSrcweir sizeof( aNormalAttr ) / sizeof( aNormalAttr[0] ), 429cdf0e10cSrcweir 0 ); 430cdf0e10cSrcweir if( SW_MOD()->GetCTLOptions().IsCTLFontEnabled() ) 431cdf0e10cSrcweir aArr.Insert( aCTLAttr, 432cdf0e10cSrcweir sizeof( aCTLAttr ) / sizeof( aCTLAttr[0] ), 433cdf0e10cSrcweir 14 ); 434cdf0e10cSrcweir SvtCJKOptions aCJKOpt; 435cdf0e10cSrcweir if( aCJKOpt.IsAnyEnabled() ) 436cdf0e10cSrcweir aArr.Insert( aCJKAttr, 437cdf0e10cSrcweir sizeof( aCJKAttr ) / sizeof( aCJKAttr[0] ), 438cdf0e10cSrcweir 14 ); 439cdf0e10cSrcweir 440cdf0e10cSrcweir SfxItemSet aSet( pWrtShell->GetAttrPool(), aArr.GetData() ); 441cdf0e10cSrcweir sal_uInt16 nWhich = SID_SEARCH_SEARCHSET; 442cdf0e10cSrcweir 443cdf0e10cSrcweir if ( FID_SEARCH_REPLACESET == nSlot ) 444cdf0e10cSrcweir { 445cdf0e10cSrcweir nWhich = SID_SEARCH_REPLACESET; 446cdf0e10cSrcweir 447cdf0e10cSrcweir if ( pReplList ) 448cdf0e10cSrcweir { 449cdf0e10cSrcweir pReplList->Get( aSet ); 450cdf0e10cSrcweir DELETEZ( pReplList ); 451cdf0e10cSrcweir } 452cdf0e10cSrcweir } 453cdf0e10cSrcweir else if ( pSrchList ) 454cdf0e10cSrcweir { 455cdf0e10cSrcweir pSrchList->Get( aSet ); 456cdf0e10cSrcweir DELETEZ( pSrchList ); 457cdf0e10cSrcweir } 458cdf0e10cSrcweir rReq.SetReturnValue( SvxSetItem( nWhich, aSet ) ); 459cdf0e10cSrcweir } 460cdf0e10cSrcweir break; 461cdf0e10cSrcweir default: 462cdf0e10cSrcweir #ifdef DBG_UTIL 463cdf0e10cSrcweir if(nSlot) 464cdf0e10cSrcweir { 465cdf0e10cSrcweir ByteString sStr( "nSlot: " ); 466cdf0e10cSrcweir sStr += ByteString::CreateFromInt32( nSlot ); 467cdf0e10cSrcweir sStr += " falscher Dispatcher (viewsrch.cxx)"; 468cdf0e10cSrcweir DBG_ERROR( sStr.GetBuffer() ); 469cdf0e10cSrcweir } 470cdf0e10cSrcweir #endif 471cdf0e10cSrcweir return; 472cdf0e10cSrcweir } 473cdf0e10cSrcweir } 474cdf0e10cSrcweir 475cdf0e10cSrcweir 476cdf0e10cSrcweir sal_Bool SwView::SearchAndWrap(sal_Bool bApi) 477cdf0e10cSrcweir { 478cdf0e10cSrcweir SwSearchOptions aOpts( pWrtShell, pSrchItem->GetBackward() ); 479cdf0e10cSrcweir 480cdf0e10cSrcweir // Startposition der Suche fuer WrapAround merken 481cdf0e10cSrcweir // Start- / EndAction wegen vielleicht bestehender Selektionen 482cdf0e10cSrcweir // aus 'Suche alle' 483cdf0e10cSrcweir pWrtShell->StartAllAction(); 484cdf0e10cSrcweir pWrtShell->Push(); 485cdf0e10cSrcweir // falls in selektierten Bereichen gesucht werden soll, duerfen sie 486cdf0e10cSrcweir // nicht aufgehoben werden 487cdf0e10cSrcweir if (!pSrchItem->GetSelection()) 488cdf0e10cSrcweir (pWrtShell->*pWrtShell->fnKillSel)(0, sal_False); 489cdf0e10cSrcweir 490cdf0e10cSrcweir SwWait *pWait = new SwWait( *GetDocShell(), sal_True ); 491cdf0e10cSrcweir if( FUNC_Search( aOpts ) ) 492cdf0e10cSrcweir { 493cdf0e10cSrcweir bFound = sal_True; 494cdf0e10cSrcweir if(pWrtShell->IsSelFrmMode()) 495cdf0e10cSrcweir { 496cdf0e10cSrcweir pWrtShell->UnSelectFrm(); 497cdf0e10cSrcweir pWrtShell->LeaveSelFrmMode(); 498cdf0e10cSrcweir } 499cdf0e10cSrcweir pWrtShell->Pop(); 500cdf0e10cSrcweir pWrtShell->EndAllAction(); 501cdf0e10cSrcweir delete pWait; 502cdf0e10cSrcweir return sal_True; 503cdf0e10cSrcweir } 504cdf0e10cSrcweir delete pWait, pWait = 0; 505cdf0e10cSrcweir 506cdf0e10cSrcweir // Suchen in den Sonderbereichen, wenn keine 507cdf0e10cSrcweir // Suche in Selektionen vorliegt. Bei Suche in Selektionen 508cdf0e10cSrcweir // wird ohnehin in diesen Sonderbereichen gesucht 509cdf0e10cSrcweir sal_Bool bHasSrchInOther = bExtra; 510cdf0e10cSrcweir if (!pSrchItem->GetSelection() && !bExtra ) 511cdf0e10cSrcweir { 512cdf0e10cSrcweir bExtra = sal_True; 513cdf0e10cSrcweir if( FUNC_Search( aOpts ) ) 514cdf0e10cSrcweir { 515cdf0e10cSrcweir bFound = sal_True; 516cdf0e10cSrcweir pWrtShell->Pop(); 517cdf0e10cSrcweir pWrtShell->EndAllAction(); 518cdf0e10cSrcweir return sal_True; 519cdf0e10cSrcweir } 520cdf0e10cSrcweir bExtra = sal_False; 521cdf0e10cSrcweir } 522cdf0e10cSrcweir else 523cdf0e10cSrcweir bExtra = !bExtra; 524cdf0e10cSrcweir 525cdf0e10cSrcweir const sal_uInt16 nId = SvxSearchDialogWrapper::GetChildWindowId(); 526cdf0e10cSrcweir SvxSearchDialogWrapper *pWrp = (SvxSearchDialogWrapper*)GetViewFrame()->GetChildWindow(nId); 527cdf0e10cSrcweir pSrchDlg = pWrp ? static_cast <SvxSearchDialog*> (pWrp->getDialog ()) : 0; 528cdf0e10cSrcweir 529cdf0e10cSrcweir // falls Startposition am Dokumentende / -anfang 530cdf0e10cSrcweir if (aOpts.bDontWrap) 531cdf0e10cSrcweir { 532cdf0e10cSrcweir pWrtShell->EndAllAction(); 533cdf0e10cSrcweir if( !bApi ) 534cdf0e10cSrcweir { 535cdf0e10cSrcweir Window* pParentWindow = GetParentWindow( pSrchDlg ); 536cdf0e10cSrcweir InfoBox( pParentWindow, SW_RES(MSG_NOT_FOUND)).Execute(); 537cdf0e10cSrcweir } 538cdf0e10cSrcweir bFound = sal_False; 539cdf0e10cSrcweir pWrtShell->Pop(); 540cdf0e10cSrcweir return sal_False; 541cdf0e10cSrcweir } 542cdf0e10cSrcweir pWrtShell->EndAllAction(); 543cdf0e10cSrcweir // noch mal mit WrapAround versuchen? 544cdf0e10cSrcweir 545cdf0e10cSrcweir if( bApi || RET_NO == QueryBox( GetParentWindow( pSrchDlg ), 546cdf0e10cSrcweir SW_RES( DOCPOS_START == aOpts.eEnd 547cdf0e10cSrcweir ? MSG_SEARCH_START 548cdf0e10cSrcweir : MSG_SEARCH_END ) 549cdf0e10cSrcweir ).Execute() ) 550cdf0e10cSrcweir { 551cdf0e10cSrcweir bFound = sal_False; 552cdf0e10cSrcweir pWrtShell->Pop(); 553cdf0e10cSrcweir return sal_False; 554cdf0e10cSrcweir } 555cdf0e10cSrcweir pWrtShell->StartAllAction(); 556cdf0e10cSrcweir pWrtShell->Pop(sal_False); 557cdf0e10cSrcweir pWait = new SwWait( *GetDocShell(), sal_True ); 558cdf0e10cSrcweir 559cdf0e10cSrcweir sal_Bool bSrchBkwrd = DOCPOS_START == aOpts.eEnd; 560cdf0e10cSrcweir 561cdf0e10cSrcweir aOpts.eEnd = bSrchBkwrd ? DOCPOS_START : DOCPOS_END; 562cdf0e10cSrcweir aOpts.eStart = bSrchBkwrd ? DOCPOS_END : DOCPOS_START; 563cdf0e10cSrcweir 564cdf0e10cSrcweir if (bHasSrchInOther) 565cdf0e10cSrcweir { 566cdf0e10cSrcweir pWrtShell->ClearMark(); 567cdf0e10cSrcweir if (bSrchBkwrd) 568cdf0e10cSrcweir pWrtShell->EndDoc(); 569cdf0e10cSrcweir else 570cdf0e10cSrcweir pWrtShell->SttDoc(); 571cdf0e10cSrcweir } 572cdf0e10cSrcweir 573cdf0e10cSrcweir bFound = 0 != FUNC_Search( aOpts ); 574cdf0e10cSrcweir pWrtShell->EndAllAction(); 575cdf0e10cSrcweir delete pWait; 576cdf0e10cSrcweir if ( bFound ) 577cdf0e10cSrcweir return bFound; 578cdf0e10cSrcweir if(!bApi) 579cdf0e10cSrcweir { 580cdf0e10cSrcweir Window* pParentWindow = GetParentWindow( pSrchDlg ); 581cdf0e10cSrcweir InfoBox( pParentWindow, SW_RES(MSG_NOT_FOUND)).Execute(); 582cdf0e10cSrcweir } 583cdf0e10cSrcweir return bFound = sal_False; 584cdf0e10cSrcweir } 585cdf0e10cSrcweir 586cdf0e10cSrcweir 587cdf0e10cSrcweir sal_Bool SwView::SearchAll(sal_uInt16* pFound) 588cdf0e10cSrcweir { 589cdf0e10cSrcweir SwWait aWait( *GetDocShell(), sal_True ); 590cdf0e10cSrcweir pWrtShell->StartAllAction(); 591cdf0e10cSrcweir 592cdf0e10cSrcweir SwSearchOptions aOpts( pWrtShell, pSrchItem->GetBackward() ); 593cdf0e10cSrcweir 594cdf0e10cSrcweir if (!pSrchItem->GetSelection()) 595cdf0e10cSrcweir { 596cdf0e10cSrcweir // bestehende Selektionen aufheben, 597cdf0e10cSrcweir // wenn nicht in selektierten Bereichen gesucht werden soll 598cdf0e10cSrcweir (pWrtShell->*pWrtShell->fnKillSel)(0, sal_False); 599cdf0e10cSrcweir 600cdf0e10cSrcweir if( DOCPOS_START == aOpts.eEnd ) 601cdf0e10cSrcweir pWrtShell->EndDoc(); 602cdf0e10cSrcweir else 603cdf0e10cSrcweir pWrtShell->SttDoc(); 604cdf0e10cSrcweir } 605cdf0e10cSrcweir bExtra = sal_False; 606cdf0e10cSrcweir sal_uInt16 nFound = (sal_uInt16)FUNC_Search( aOpts ); 607cdf0e10cSrcweir if(pFound) 608cdf0e10cSrcweir *pFound = nFound; 609cdf0e10cSrcweir bFound = 0 != nFound; 610cdf0e10cSrcweir 611cdf0e10cSrcweir pWrtShell->EndAllAction(); 612cdf0e10cSrcweir return bFound; 613cdf0e10cSrcweir } 614cdf0e10cSrcweir 615cdf0e10cSrcweir 616cdf0e10cSrcweir void SwView::Replace() 617cdf0e10cSrcweir { 618cdf0e10cSrcweir SwWait aWait( *GetDocShell(), sal_True ); 619cdf0e10cSrcweir 620cdf0e10cSrcweir pWrtShell->StartAllAction(); 621cdf0e10cSrcweir 622cdf0e10cSrcweir if( pSrchItem->GetPattern() ) // Vorlagen? 623cdf0e10cSrcweir { 624cdf0e10cSrcweir SwRewriter aRewriter; 625cdf0e10cSrcweir aRewriter.AddRule(UNDO_ARG1, pSrchItem->GetSearchString()); 626cdf0e10cSrcweir aRewriter.AddRule(UNDO_ARG2, SW_RES(STR_YIELDS)); 627cdf0e10cSrcweir aRewriter.AddRule(UNDO_ARG3, pSrchItem->GetReplaceString()); 628cdf0e10cSrcweir 629cdf0e10cSrcweir pWrtShell->StartUndo(UNDO_UI_REPLACE_STYLE, &aRewriter); // #111827# 630cdf0e10cSrcweir 631cdf0e10cSrcweir pWrtShell->SetTxtFmtColl( pWrtShell->GetParaStyle( 632cdf0e10cSrcweir pSrchItem->GetReplaceString(), 633cdf0e10cSrcweir SwWrtShell::GETSTYLE_CREATESOME )); 634cdf0e10cSrcweir 635cdf0e10cSrcweir pWrtShell->EndUndo(); // #111827# 636cdf0e10cSrcweir } 637cdf0e10cSrcweir else 638cdf0e10cSrcweir { 639cdf0e10cSrcweir if (GetPostItMgr()->HasActiveSidebarWin()) 640cdf0e10cSrcweir GetPostItMgr()->Replace(pSrchItem); 641cdf0e10cSrcweir sal_Bool bReplaced = pWrtShell->SwEditShell::Replace( pSrchItem->GetReplaceString(), 642cdf0e10cSrcweir pSrchItem->GetRegExp()); 643cdf0e10cSrcweir 644cdf0e10cSrcweir if( bReplaced && pReplList && pReplList->Count() && pWrtShell->HasSelection() ) 645cdf0e10cSrcweir { 646cdf0e10cSrcweir SfxItemSet aReplSet( pWrtShell->GetAttrPool(), 647cdf0e10cSrcweir aTxtFmtCollSetRange ); 648cdf0e10cSrcweir if( pReplList->Get( aReplSet ).Count() ) 649cdf0e10cSrcweir { 650cdf0e10cSrcweir ::SfxToSwPageDescAttr( *pWrtShell, aReplSet ); 651cdf0e10cSrcweir pWrtShell->SwEditShell::SetAttr( aReplSet ); 652cdf0e10cSrcweir } 653cdf0e10cSrcweir } 654cdf0e10cSrcweir } 655cdf0e10cSrcweir 656cdf0e10cSrcweir pWrtShell->EndAllAction(); 657cdf0e10cSrcweir } 658cdf0e10cSrcweir 659cdf0e10cSrcweir 660cdf0e10cSrcweir 661cdf0e10cSrcweir SwSearchOptions::SwSearchOptions( SwWrtShell* pSh, sal_Bool bBackward ) 662cdf0e10cSrcweir { 663cdf0e10cSrcweir eStart = DOCPOS_CURR; 664cdf0e10cSrcweir if( bBackward ) 665cdf0e10cSrcweir { 666cdf0e10cSrcweir eEnd = DOCPOS_START; 667cdf0e10cSrcweir bDontWrap = pSh->IsEndOfDoc(); 668cdf0e10cSrcweir } 669cdf0e10cSrcweir else 670cdf0e10cSrcweir { 671cdf0e10cSrcweir eEnd = DOCPOS_END; 672cdf0e10cSrcweir bDontWrap = pSh->IsStartOfDoc(); 673cdf0e10cSrcweir } 674cdf0e10cSrcweir } 675cdf0e10cSrcweir 676cdf0e10cSrcweir sal_uLong SwView::FUNC_Search( const SwSearchOptions& rOptions ) 677cdf0e10cSrcweir { 678cdf0e10cSrcweir sal_Bool bDoReplace = pSrchItem->GetCommand() == SVX_SEARCHCMD_REPLACE || 679cdf0e10cSrcweir pSrchItem->GetCommand() == SVX_SEARCHCMD_REPLACE_ALL; 680cdf0e10cSrcweir 681cdf0e10cSrcweir int eRanges = pSrchItem->GetSelection() ? 682cdf0e10cSrcweir FND_IN_SEL : bExtra ? FND_IN_OTHER : FND_IN_BODY; 683cdf0e10cSrcweir if (pSrchItem->GetCommand() == SVX_SEARCHCMD_FIND_ALL || 684cdf0e10cSrcweir pSrchItem->GetCommand() == SVX_SEARCHCMD_REPLACE_ALL) 685cdf0e10cSrcweir eRanges |= FND_IN_SELALL; 686cdf0e10cSrcweir 687cdf0e10cSrcweir pWrtShell->SttSelect(); 688cdf0e10cSrcweir 689cdf0e10cSrcweir static sal_uInt16 __READONLY_DATA aSearchAttrRange[] = { 690cdf0e10cSrcweir RES_FRMATR_BEGIN, RES_FRMATR_END-1, 691cdf0e10cSrcweir RES_CHRATR_BEGIN, RES_CHRATR_END-1, 692cdf0e10cSrcweir RES_PARATR_BEGIN, RES_PARATR_END-1, 693cdf0e10cSrcweir SID_ATTR_PARA_MODEL, SID_ATTR_PARA_KEEP, 694cdf0e10cSrcweir 0 }; 695cdf0e10cSrcweir 696cdf0e10cSrcweir SfxItemSet aSrchSet( pWrtShell->GetAttrPool(), aSearchAttrRange); 697cdf0e10cSrcweir if( pSrchList && pSrchList->Count() ) 698cdf0e10cSrcweir { 699cdf0e10cSrcweir pSrchList->Get( aSrchSet ); 700cdf0e10cSrcweir 701cdf0e10cSrcweir /* -- Seitenumbruch mit Seitenvorlage */ 702cdf0e10cSrcweir ::SfxToSwPageDescAttr( *pWrtShell, aSrchSet ); 703cdf0e10cSrcweir } 704cdf0e10cSrcweir 705cdf0e10cSrcweir SfxItemSet* pReplSet = 0; 706cdf0e10cSrcweir if( bDoReplace && pReplList && pReplList->Count() ) 707cdf0e10cSrcweir { 708cdf0e10cSrcweir pReplSet = new SfxItemSet( pWrtShell->GetAttrPool(), 709cdf0e10cSrcweir aSearchAttrRange ); 710cdf0e10cSrcweir pReplList->Get( *pReplSet ); 711cdf0e10cSrcweir 712cdf0e10cSrcweir /* -- Seitenumbruch mit Seitenvorlage */ 713cdf0e10cSrcweir ::SfxToSwPageDescAttr( *pWrtShell, *pReplSet ); 714cdf0e10cSrcweir 715cdf0e10cSrcweir if( !pReplSet->Count() ) // schade, die Attribute 716cdf0e10cSrcweir DELETEZ( pReplSet ); // kennen wir nicht 717cdf0e10cSrcweir } 718cdf0e10cSrcweir 719cdf0e10cSrcweir // 720cdf0e10cSrcweir // build SearchOptions to be used 721cdf0e10cSrcweir // 722cdf0e10cSrcweir SearchOptions aSearchOpt( pSrchItem->GetSearchOptions() ); 723cdf0e10cSrcweir aSearchOpt.Locale = SvxCreateLocale( (sal_uInt16)GetAppLanguage() ); 724cdf0e10cSrcweir if( !bDoReplace ) 725cdf0e10cSrcweir aSearchOpt.replaceString = aEmptyStr; 726cdf0e10cSrcweir 727cdf0e10cSrcweir sal_uLong nFound; 728cdf0e10cSrcweir if( aSrchSet.Count() || ( pReplSet && pReplSet->Count() )) 729cdf0e10cSrcweir { 730cdf0e10cSrcweir nFound = pWrtShell->SearchAttr( 731cdf0e10cSrcweir aSrchSet, 732cdf0e10cSrcweir !pSrchItem->GetPattern(), 733cdf0e10cSrcweir rOptions.eStart, 734cdf0e10cSrcweir rOptions.eEnd, 735cdf0e10cSrcweir FindRanges(eRanges), 736cdf0e10cSrcweir pSrchItem->GetSearchString().Len() ? &aSearchOpt : 0, 737cdf0e10cSrcweir pReplSet ); 738cdf0e10cSrcweir } 739cdf0e10cSrcweir else if( pSrchItem->GetPattern() ) 740cdf0e10cSrcweir { 741cdf0e10cSrcweir // Suchen (und ersetzen) von Vorlagen 742cdf0e10cSrcweir const String sRplStr( pSrchItem->GetReplaceString() ); 743cdf0e10cSrcweir nFound = pWrtShell->SearchTempl( pSrchItem->GetSearchString(), 744cdf0e10cSrcweir rOptions.eStart, 745cdf0e10cSrcweir rOptions.eEnd, 746cdf0e10cSrcweir FindRanges(eRanges), 747cdf0e10cSrcweir bDoReplace ? &sRplStr : 0 ); 748cdf0e10cSrcweir } 749cdf0e10cSrcweir else 750cdf0e10cSrcweir { 751cdf0e10cSrcweir // Normale Suche 752cdf0e10cSrcweir nFound = pWrtShell->SearchPattern(aSearchOpt, pSrchItem->GetNotes(), 753cdf0e10cSrcweir rOptions.eStart, 754cdf0e10cSrcweir rOptions.eEnd, 755cdf0e10cSrcweir FindRanges(eRanges), 756cdf0e10cSrcweir bDoReplace ); 757cdf0e10cSrcweir } 758cdf0e10cSrcweir pWrtShell->EndSelect(); 759cdf0e10cSrcweir return nFound; 760cdf0e10cSrcweir } 761cdf0e10cSrcweir 762cdf0e10cSrcweir LAYOUT_NS Dialog* SwView::GetSearchDialog() 763cdf0e10cSrcweir { 764cdf0e10cSrcweir const sal_uInt16 nId = SvxSearchDialogWrapper::GetChildWindowId(); 765cdf0e10cSrcweir SvxSearchDialogWrapper *pWrp = (SvxSearchDialogWrapper*)SfxViewFrame::Current()->GetChildWindow(nId); 766cdf0e10cSrcweir if ( pWrp ) 767cdf0e10cSrcweir pSrchDlg = pWrp->getDialog (); 768cdf0e10cSrcweir else 769cdf0e10cSrcweir pSrchDlg = 0; 770cdf0e10cSrcweir return pSrchDlg; 771cdf0e10cSrcweir } 772cdf0e10cSrcweir 773cdf0e10cSrcweir void SwView::StateSearch(SfxItemSet &rSet) 774cdf0e10cSrcweir { 775cdf0e10cSrcweir SfxWhichIter aIter(rSet); 776cdf0e10cSrcweir sal_uInt16 nWhich = aIter.FirstWhich(); 777cdf0e10cSrcweir 778cdf0e10cSrcweir while(nWhich) 779cdf0e10cSrcweir { 780cdf0e10cSrcweir switch(nWhich) 781cdf0e10cSrcweir { 782cdf0e10cSrcweir case SID_SEARCH_OPTIONS: 783cdf0e10cSrcweir { 784cdf0e10cSrcweir sal_uInt16 nOpt = 0xFFFF; 785cdf0e10cSrcweir if( GetDocShell()->IsReadOnly() ) 786cdf0e10cSrcweir nOpt &= ~( SEARCH_OPTIONS_REPLACE | 787cdf0e10cSrcweir SEARCH_OPTIONS_REPLACE_ALL ); 788cdf0e10cSrcweir rSet.Put( SfxUInt16Item( SID_SEARCH_OPTIONS, nOpt)); 789cdf0e10cSrcweir } 790cdf0e10cSrcweir break; 791cdf0e10cSrcweir case SID_SEARCH_ITEM: 792cdf0e10cSrcweir { 793cdf0e10cSrcweir if ( !pSrchItem ) 794cdf0e10cSrcweir { 795cdf0e10cSrcweir pSrchItem = new SvxSearchItem( SID_SEARCH_ITEM ); 796cdf0e10cSrcweir pSrchItem->SetFamily(SFX_STYLE_FAMILY_PARA); 797cdf0e10cSrcweir pSrchItem->SetSearchString( pWrtShell->GetSelTxt() ); 798cdf0e10cSrcweir } 799cdf0e10cSrcweir 800cdf0e10cSrcweir if( bJustOpened && pWrtShell->IsSelection() ) 801cdf0e10cSrcweir { 802cdf0e10cSrcweir String aTxt; 803cdf0e10cSrcweir if( 1 == pWrtShell->GetCrsrCnt() && 804cdf0e10cSrcweir ( aTxt = pWrtShell->SwCrsrShell::GetSelTxt() ).Len() ) 805cdf0e10cSrcweir { 806cdf0e10cSrcweir pSrchItem->SetSearchString( aTxt ); 807cdf0e10cSrcweir pSrchItem->SetSelection( sal_False ); 808cdf0e10cSrcweir } 809cdf0e10cSrcweir else 810cdf0e10cSrcweir pSrchItem->SetSelection( sal_True ); 811cdf0e10cSrcweir } 812cdf0e10cSrcweir 813cdf0e10cSrcweir bJustOpened = sal_False; 814cdf0e10cSrcweir rSet.Put( *pSrchItem ); 815cdf0e10cSrcweir } 816cdf0e10cSrcweir break; 817cdf0e10cSrcweir 818cdf0e10cSrcweir /* case SID_SEARCH_REPLACESET: 819cdf0e10cSrcweir case SID_SEARCH_SEARCHSET: 820cdf0e10cSrcweir { 821cdf0e10cSrcweir static sal_uInt16 __READONLY_DATA aSearchAttrRange[] = 822cdf0e10cSrcweir { 823cdf0e10cSrcweir RES_CHRATR_CASEMAP, RES_CHRATR_POSTURE, 824cdf0e10cSrcweir RES_CHRATR_SHADOWED, RES_CHRATR_WORDLINEMODE, 825cdf0e10cSrcweir RES_PARATR_LINESPACING, RES_PARATR_HYPHENZONE, 826cdf0e10cSrcweir RES_LR_SPACE, RES_UL_SPACE, 827cdf0e10cSrcweir SID_ATTR_PARA_MODEL, SID_ATTR_PARA_KEEP, 828cdf0e10cSrcweir 0 829cdf0e10cSrcweir }; 830cdf0e10cSrcweir 831cdf0e10cSrcweir SfxItemSet aSet(pWrtShell->GetAttrPool(), aSearchAttrRange ); 832cdf0e10cSrcweir if( SID_SEARCH_REPLACESET==nWhich ) 833cdf0e10cSrcweir { 834cdf0e10cSrcweir if( pReplList ) 835cdf0e10cSrcweir { 836cdf0e10cSrcweir pReplList->Get( aSet ); 837cdf0e10cSrcweir DELETEZ( pReplList ); 838cdf0e10cSrcweir } 839cdf0e10cSrcweir } 840cdf0e10cSrcweir else if( pSrchList ) 841cdf0e10cSrcweir { 842cdf0e10cSrcweir pSrchList->Get( aSet ); 843cdf0e10cSrcweir DELETEZ( pSrchList ); 844cdf0e10cSrcweir } 845cdf0e10cSrcweir rSet.Put( SvxSetItem( nWhich, aSet )); 846cdf0e10cSrcweir } 847cdf0e10cSrcweir break; 848cdf0e10cSrcweir */ 849cdf0e10cSrcweir } 850cdf0e10cSrcweir nWhich = aIter.NextWhich(); 851cdf0e10cSrcweir } 852cdf0e10cSrcweir } 853cdf0e10cSrcweir 854cdf0e10cSrcweir 855cdf0e10cSrcweir 856