summaryrefslogtreecommitdiff
path: root/svx/source/dialog/srchdlg.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'svx/source/dialog/srchdlg.cxx')
-rw-r--r--svx/source/dialog/srchdlg.cxx2549
1 files changed, 2549 insertions, 0 deletions
diff --git a/svx/source/dialog/srchdlg.cxx b/svx/source/dialog/srchdlg.cxx
new file mode 100644
index 000000000000..01dc2c0591cc
--- /dev/null
+++ b/svx/source/dialog/srchdlg.cxx
@@ -0,0 +1,2549 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_svx.hxx"
+
+// include ---------------------------------------------------------------
+#include <vcl/wrkwin.hxx>
+#include <vcl/morebtn.hxx>
+#include <vcl/msgbox.hxx>
+#include <svl/slstitm.hxx>
+#include <svl/itemiter.hxx>
+#include <svl/style.hxx>
+#include <unotools/searchopt.hxx>
+#include <sfx2/dispatch.hxx>
+#include <sfx2/objsh.hxx>
+#include <sfx2/module.hxx>
+#include <sfx2/viewsh.hxx>
+#include <sfx2/basedlgs.hxx>
+#include <svl/cjkoptions.hxx>
+#include <com/sun/star/container/XNameAccess.hpp>
+#include <com/sun/star/i18n/TransliterationModules.hpp>
+#include <com/sun/star/frame/XDispatch.hpp>
+#include <com/sun/star/frame/XDispatchProvider.hpp>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/frame/XModuleManager.hpp>
+#include <comphelper/processfactory.hxx>
+#include <svl/itempool.hxx>
+#include <svl/intitem.hxx>
+
+#include <sfx2/app.hxx>
+#include <toolkit/unohlp.hxx>
+
+#define _SVX_SRCHDLG_CXX
+#include "srchdlg.hxx"
+
+#include <svx/dialogs.hrc>
+#include <svx/svxitems.hrc>
+#include "srchdlg.hrc"
+
+
+#define ITEMID_SETITEM 0
+
+#include <svl/srchitem.hxx>
+#include <svx/pageitem.hxx>
+#include "srchctrl.hxx"
+#include <svx/dialmgr.hxx>
+#include "dlgutil.hxx"
+#include <editeng/brshitem.hxx>
+#include <tools/resary.hxx>
+#include <svx/svxdlg.hxx> //CHINA001
+
+#include <sfx2/layout-pre.hxx>
+
+using namespace com::sun::star::i18n;
+using namespace com::sun::star;
+using namespace comphelper;
+
+// -----------------------------------------------------------------------
+
+#define REMEMBER_SIZE 10
+
+#define MODIFY_SEARCH 0x00000001
+#define MODIFY_REPLACE 0x00000002
+#define MODIFY_WORD 0x00000004
+#define MODIFY_EXACT 0x00000008
+#define MODIFY_BACKWARDS 0x00000010
+#define MODIFY_SELECTION 0x00000020
+#define MODIFY_REGEXP 0x00000040
+#define MODIFY_LAYOUT 0x00000080
+#define MODIFY_SIMILARITY 0x00000100
+#define MODIFY_FORMULAS 0x00000200
+#define MODIFY_VALUES 0x00000400
+#define MODIFY_CALC_NOTES 0x00000800
+#define MODIFY_ROWS 0x00001000
+#define MODIFY_COLUMNS 0x00002000
+#define MODIFY_ALLTABLES 0x00004000
+#define MODIFY_NOTES 0x00008000
+
+SV_IMPL_VARARR(SrchAttrItemList, SearchAttrItem);
+
+//#define NotifyApp( nId )
+// rBindings.ExecuteSynchron( nId, (const SfxPoolItem**)&pSearchItem, 0L )
+
+#define GetCheckBoxValue( rBox ) \
+ rBox.IsEnabled() ? rBox.IsChecked() : FALSE
+
+#if ENABLE_LAYOUT
+#undef SVX_RES
+#define SVX_RES(x) #x
+#endif /* ENABLE_LAYOUT */
+
+struct SearchDlg_Impl
+{
+ FixedText aSearchFormats;
+ FixedText aReplaceFormats;
+
+ BOOL bMultiLineEdit : 1,
+ bSaveToModule : 1,
+ bFocusOnSearch : 1,
+ bDeltaCalculated : 1;
+ USHORT* pRanges;
+ Timer aSelectionTimer;
+
+ uno::Reference< frame::XDispatch > xCommand1Dispatch;
+ uno::Reference< frame::XDispatch > xCommand2Dispatch;
+ util::URL aCommand1URL;
+ util::URL aCommand2URL;
+
+#if ENABLE_LAYOUT
+ SearchDlg_Impl( layout::Context* pParent ) :
+#else /* !ENABLE_LAYOUT */
+ SearchDlg_Impl( Window* pParent ) :
+#endif /* !ENABLE_LAYOUT */
+ aSearchFormats ( pParent, SVX_RES( FT_SEARCH_FORMATS ) ),
+ aReplaceFormats ( pParent, SVX_RES( FT_REPLACE_FORMATS ) ),
+ bMultiLineEdit ( FALSE ),
+ bSaveToModule ( TRUE ),
+ bFocusOnSearch ( TRUE ),
+ bDeltaCalculated( FALSE ),
+ pRanges ( NULL )
+ {
+ aCommand1URL.Complete = aCommand1URL.Main = rtl::OUString::createFromAscii("vnd.sun.search:SearchViaComponent1");
+ aCommand1URL.Protocol = rtl::OUString::createFromAscii("vnd.sun.search:");
+ aCommand1URL.Path = rtl::OUString::createFromAscii("SearchViaComponent1");
+ aCommand2URL.Complete = aCommand2URL.Main = rtl::OUString::createFromAscii("vnd.sun.search:SearchViaComponent2");
+ aCommand2URL.Protocol = rtl::OUString::createFromAscii("vnd.sun.search:");
+ aCommand2URL.Path = rtl::OUString::createFromAscii("SearchViaComponent2");
+ }
+ ~SearchDlg_Impl() { delete[] pRanges; }
+};
+
+// -----------------------------------------------------------------------
+
+void ListToStrArr_Impl( USHORT nId, SvStringsDtor& rStrLst, ComboBox& rCBox )
+{
+ SfxStringListItem* pSrchItem =
+ (SfxStringListItem*)SFX_APP()->GetItem( nId );
+ List* pLst = pSrchItem ? pSrchItem->GetList() : 0;
+
+ if ( pLst )
+ for ( USHORT i = 0; i < pLst->Count(); ++i )
+ {
+ String* pTmp = new String( *(String*)( pLst->GetObject(i) ) );
+ rStrLst.Insert( pTmp, rStrLst.Count() );
+ rCBox.InsertEntry( *pTmp );
+ }
+}
+
+// -----------------------------------------------------------------------
+
+void StrArrToList_Impl( USHORT nId, const SvStringsDtor& rStrLst )
+{
+ DBG_ASSERT( rStrLst.Count(), "vorher abpruefen!!" );
+ List aLst;
+
+ for ( USHORT i = 0; i < rStrLst.Count(); ++i )
+ aLst.Insert( rStrLst[ i ], LIST_APPEND );
+
+ SFX_APP()->PutItem( SfxStringListItem( nId, &aLst ) );
+}
+
+// class SearchAttrItemList ----------------------------------------------
+
+SearchAttrItemList::SearchAttrItemList( const SearchAttrItemList& rList ) :
+
+ SrchAttrItemList( (BYTE)rList.Count() )
+
+{
+ SrchAttrItemList::Insert( &rList, 0 );
+ SearchAttrItem* _pData = (SearchAttrItem*)GetData();
+
+ for ( USHORT i = Count(); i; --i, ++_pData )
+ if ( !IsInvalidItem( _pData->pItem ) )
+ _pData->pItem = _pData->pItem->Clone();
+}
+
+// -----------------------------------------------------------------------
+
+SearchAttrItemList::~SearchAttrItemList()
+{
+ Clear();
+}
+
+// -----------------------------------------------------------------------
+
+void SearchAttrItemList::Put( const SfxItemSet& rSet )
+{
+ if ( !rSet.Count() )
+ return;
+
+ SfxItemPool* pPool = rSet.GetPool();
+ SfxItemIter aIter( rSet );
+ SearchAttrItem aItem;
+ const SfxPoolItem* pItem = aIter.GetCurItem();
+ USHORT nWhich;
+
+ while ( TRUE )
+ {
+ // nur testen, ob vorhanden ist ?
+ if( IsInvalidItem( pItem ) )
+ {
+ nWhich = rSet.GetWhichByPos( aIter.GetCurPos() );
+ aItem.pItem = (SfxPoolItem*)pItem;
+ }
+ else
+ {
+ nWhich = pItem->Which();
+ aItem.pItem = pItem->Clone();
+ }
+
+ aItem.nSlot = pPool->GetSlotId( nWhich );
+ Insert( aItem );
+
+ if ( aIter.IsAtEnd() )
+ break;
+ pItem = aIter.NextItem();
+ }
+}
+
+// -----------------------------------------------------------------------
+
+SfxItemSet& SearchAttrItemList::Get( SfxItemSet& rSet )
+{
+ SfxItemPool* pPool = rSet.GetPool();
+ SearchAttrItem* _pData = (SearchAttrItem*)GetData();
+
+ for ( USHORT i = Count(); i; --i, ++_pData )
+ if ( IsInvalidItem( _pData->pItem ) )
+ rSet.InvalidateItem( pPool->GetWhich( _pData->nSlot ) );
+ else
+ rSet.Put( *_pData->pItem );
+ return rSet;
+}
+
+// -----------------------------------------------------------------------
+
+void SearchAttrItemList::Clear()
+{
+ SearchAttrItem* _pData = (SearchAttrItem*)GetData();
+
+ for ( USHORT i = Count(); i; --i, ++_pData )
+ if ( !IsInvalidItem( _pData->pItem ) )
+ delete _pData->pItem;
+ SrchAttrItemList::Remove( 0, Count() );
+}
+
+// -----------------------------------------------------------------------
+
+// l"oscht die Pointer auf die Items
+void SearchAttrItemList::Remove( USHORT nPos, USHORT nLen )
+{
+ if ( nPos + nLen > Count() )
+ nLen = Count() - nPos;
+ SearchAttrItem* _pData = (SearchAttrItem*)GetData() + nPos;
+
+ for ( USHORT n = nLen; n; --n, ++_pData )
+ if ( !IsInvalidItem( _pData->pItem ) )
+ delete _pData->pItem;
+
+ SrchAttrItemList::Remove( nPos, nLen );
+}
+
+#if ENABLE_LAYOUT
+#undef SfxModelessDialog
+#define SfxModelessDialog(bindings, child, parent, id) SfxDialog (parent, "find-and-replace.xml", id, bindings, child)
+#define SVX_RES_PLAIN(x) ResId (x, DIALOG_MGR ())
+#define THIS_SVX_RES(x) this, #x
+#else /* !ENABLE_LAYOUT */
+#define SVX_RES_PLAIN SVX_RES
+#define THIS_SVX_RES SVX_RES
+#endif /* !ENABLE_LAYOUT */
+
+#undef INI_LIST
+#define INI_LIST() \
+ aSearchText ( this, SVX_RES( FT_SEARCH ) ), \
+ aSearchLB ( this, SVX_RES( ED_SEARCH ) ), \
+ aSearchTmplLB ( this, SVX_RES( LB_SEARCH ) ), \
+ aSearchAttrText ( this, SVX_RES( FT_SEARCH_ATTR ) ), \
+ aReplaceText ( this, SVX_RES( FT_REPLACE ) ), \
+ aReplaceLB ( this, SVX_RES( ED_REPLACE ) ), \
+ aReplaceTmplLB ( this, SVX_RES( LB_REPLACE ) ), \
+ aReplaceAttrText( this, SVX_RES( FT_REPLACE_ATTR ) ), \
+ aSearchBtn ( this, SVX_RES( BTN_SEARCH ) ), \
+ aSearchAllBtn ( this, SVX_RES( BTN_SEARCH_ALL ) ), \
+ aSearchCmdLine ( this, SVX_RES( FL_SEARCH_COMMAND ) ), \
+ aReplaceBtn ( this, SVX_RES( BTN_REPLACE ) ), \
+ aReplaceAllBtn ( this, SVX_RES( BTN_REPLACE_ALL ) ), \
+ aSearchComponentFL( this, SVX_RES( FL_SEARCH_COMPONENT ) ), \
+ aSearchComponent1PB( this, SVX_RES( BTN_COMPONENT_1 ) ), \
+ aSearchComponent2PB( this, SVX_RES( BTN_COMPONENT_2 ) ), \
+ aMatchCaseCB ( this, SVX_RES( CB_MATCH_CASE ) ), \
+ aWordBtn ( this, SVX_RES( CB_WHOLE_WORDS ) ), \
+ aButtonsFL ( this, SVX_RES( FL_BUTTONS ) ), \
+ pMoreBtn ( new MoreButton( this, SVX_RES( BTN_MORE ) ) ), \
+ aHelpBtn ( this, SVX_RES( BTN_HELP ) ), \
+ aCloseBtn ( this, SVX_RES( BTN_CLOSE ) ), \
+ aOptionsFL ( this, SVX_RES( FL_OPTIONS ) ), \
+ aSelectionBtn ( this, SVX_RES( CB_SELECTIONS ) ), \
+ aBackwardsBtn ( this, SVX_RES( CB_BACKWARDS ) ), \
+ aRegExpBtn ( this, SVX_RES( CB_REGEXP ) ), \
+ aSimilarityBox ( this, SVX_RES( CB_SIMILARITY) ), \
+ aSimilarityBtn ( this, SVX_RES( PB_SIMILARITY) ), \
+ aLayoutBtn ( this, SVX_RES( CB_LAYOUTS ) ), \
+ aNotesBtn ( this, SVX_RES( CB_NOTES ) ), \
+ aJapMatchFullHalfWidthCB( this, SVX_RES( CB_JAP_MATCH_FULL_HALF_WIDTH ) ),\
+ aJapOptionsCB ( this, SVX_RES( CB_JAP_SOUNDS_LIKE ) ), \
+ aJapOptionsBtn ( this, SVX_RES( PB_JAP_OPTIONS ) ), \
+ aAttributeBtn ( this, SVX_RES( BTN_ATTRIBUTE ) ), \
+ aFormatBtn ( this, SVX_RES( BTN_FORMAT ) ), \
+ aNoFormatBtn ( this, SVX_RES( BTN_NOFORMAT ) ), \
+ aCalcFL ( this, SVX_RES( FL_CALC ) ), \
+ aCalcSearchInFT ( this, SVX_RES( FT_CALC_SEARCHIN ) ), \
+ aCalcSearchInLB ( this, SVX_RES( LB_CALC_SEARCHIN ) ), \
+ aCalcSearchDirFT( this, SVX_RES( FT_CALC_SEARCHDIR ) ), \
+ aRowsBtn ( this, SVX_RES( RB_CALC_ROWS ) ), \
+ aColumnsBtn ( this, SVX_RES( RB_CALC_COLUMNS ) ), \
+ aAllSheetsCB ( this, SVX_RES( CB_ALL_SHEETS ) ), \
+ rBindings ( rBind ), \
+ bWriter ( FALSE ), \
+ bSearch ( TRUE ), \
+ bFormat ( FALSE ), \
+ nOptions ( USHRT_MAX ), \
+ bSet ( FALSE ), \
+ bReadOnly ( FALSE ), \
+ bConstruct ( TRUE ), \
+ nModifyFlag ( 0 ), \
+ aCalcStr ( THIS_SVX_RES( STR_WORDCALC ) ), \
+ pImpl ( NULL ), \
+ pSearchList ( NULL ), \
+ pReplaceList ( new SearchAttrItemList ), \
+ pSearchItem ( NULL ), \
+ pSearchController ( NULL ), \
+ pOptionsController ( NULL ), \
+ pFamilyController ( NULL ), \
+ pSearchSetController ( NULL ), \
+ pReplaceSetController ( NULL ), \
+ nTransliterationFlags ( 0x00000000 )
+
+// class SvxSearchDialog -------------------------------------------------
+
+SvxSearchDialog::SvxSearchDialog( Window* pParent, SfxBindings& rBind ) :
+
+ SfxModelessDialog( &rBind, NULL, pParent, SVX_RES( RID_SVXDLG_SEARCH ) ),
+
+ INI_LIST()
+
+{
+ Construct_Impl();
+}
+
+// -----------------------------------------------------------------------
+
+SvxSearchDialog::SvxSearchDialog( Window* pParent, SfxChildWindow* pChildWin, SfxBindings& rBind ) :
+
+ SfxModelessDialog( &rBind, pChildWin, pParent, SVX_RES( RID_SVXDLG_SEARCH ) ),
+
+ INI_LIST()
+
+{
+ Construct_Impl();
+}
+
+#undef INI_LIST
+#if ENABLE_LAYOUT
+#undef SVX_RES
+#define SVX_RES(x) ResId (x, DIALOG_MGR ())
+#endif
+
+// -----------------------------------------------------------------------
+
+SvxSearchDialog::~SvxSearchDialog()
+{
+ Hide();
+
+ rBindings.EnterRegistrations();
+ delete pSearchController;
+ delete pOptionsController;
+ delete pFamilyController;
+ delete pSearchSetController;
+ delete pReplaceSetController;
+ rBindings.LeaveRegistrations();
+
+ delete pSearchItem;
+ delete pImpl;
+ delete pSearchList;
+ delete pReplaceList;
+ delete pMoreBtn;
+}
+
+#if ENABLE_LAYOUT
+#undef Window
+#define Window layout::Window
+#endif /* ENABLE_LAYOUT */
+
+void lcl_MoveDown( Window& rWindow, sal_Int32 nOffset )
+{
+ Point aPos(rWindow.GetPosPixel());
+ aPos.Y() += nOffset;
+ rWindow.SetPosPixel(aPos);
+}
+
+void SvxSearchDialog::Construct_Impl()
+{
+#if ENABLE_LAYOUT
+ SetHelpId (SID_SEARCH_DLG);
+#endif /* ENABLE_LAYOUT */
+
+ // temporary to avoid incompatibility
+ pImpl = new SearchDlg_Impl( this );
+#if !ENABLE_LAYOUT
+ pImpl->aSelectionTimer.SetTimeout( 500 );
+ pImpl->aSelectionTimer.SetTimeoutHdl(
+ LINK( this, SvxSearchDialog, TimeoutHdl_Impl ) );
+#endif /* !ENABLE_LAYOUT */
+ EnableControls_Impl( 0 );
+
+ // alten Text des aWordBtn's merken
+ aCalcStr += sal_Unicode('#');
+ aCalcStr += aWordBtn.GetText();
+
+ aLayoutStr = SVX_RESSTR( RID_SVXSTR_SEARCH_STYLES );
+ aStylesStr = aLayoutBtn.GetText();
+
+ // gemerkte Such-Strings von der Applikation holen
+ ListToStrArr_Impl( SID_SEARCHDLG_SEARCHSTRINGS,
+ aSearchStrings, aSearchLB );
+ ListToStrArr_Impl( SID_SEARCHDLG_REPLACESTRINGS,
+ aReplaceStrings, aReplaceLB );
+
+ pMoreBtn->SetMoreText( String( SVX_RES( STR_MORE_BTN ) ) );
+ pMoreBtn->SetLessText( String( SVX_RES( STR_LESS_BTN ) ) );
+
+ FreeResource();
+ InitControls_Impl();
+
+ // Attribut-Sets nur einmal im Ctor() besorgen
+ const SfxPoolItem* ppArgs[] = { pSearchItem, 0 };
+ const SvxSetItem* pSrchSetItem =
+ (const SvxSetItem*) rBindings.GetDispatcher()->Execute( FID_SEARCH_SEARCHSET, SFX_CALLMODE_SLOT, ppArgs );
+
+ if ( pSrchSetItem )
+ InitAttrList_Impl( &pSrchSetItem->GetItemSet(), 0 );
+
+ const SvxSetItem* pReplSetItem =
+ (const SvxSetItem*)rBindings.GetDispatcher()->Execute( FID_SEARCH_REPLACESET, SFX_CALLMODE_SLOT, ppArgs );
+
+ if ( pReplSetItem )
+ InitAttrList_Impl( 0, &pReplSetItem->GetItemSet() );
+
+ // Controller erzeugen und gleich aktualisieren
+ rBindings.EnterRegistrations();
+ pSearchController =
+ new SvxSearchController( SID_SEARCH_ITEM, rBindings, *this );
+ pOptionsController =
+ new SvxSearchController( SID_SEARCH_OPTIONS, rBindings, *this );
+ rBindings.LeaveRegistrations();
+ rBindings.GetDispatcher()->Execute( FID_SEARCH_ON, SFX_CALLMODE_SLOT, ppArgs );
+ pImpl->aSelectionTimer.Start();
+
+
+ SvtCJKOptions aCJKOptions;
+ if(!aCJKOptions.IsJapaneseFindEnabled())
+ {
+ aJapOptionsCB.Check( FALSE );
+ aJapOptionsCB.Hide();
+ aJapOptionsBtn.Hide();
+ }
+ if(!aCJKOptions.IsCJKFontEnabled())
+ {
+ aJapMatchFullHalfWidthCB.Hide();
+ }
+ //component extension - show component search buttons if the commands
+ // vnd.sun.star::SearchViaComponent1 and 2 are supported
+ const uno::Reference< frame::XFrame >xFrame = rBindings.GetActiveFrame();
+ const uno::Reference< frame::XDispatchProvider > xDispatchProv(xFrame, uno::UNO_QUERY);
+ rtl::OUString sTarget = rtl::OUString::createFromAscii("_self");
+
+ bool bSearchComponent1 = false;
+ bool bSearchComponent2 = false;
+ if(xDispatchProv.is() &&
+ (pImpl->xCommand1Dispatch = xDispatchProv->queryDispatch(pImpl->aCommand1URL, sTarget, 0)).is())
+ {
+ bSearchComponent1 = true;
+ }
+ if(xDispatchProv.is() &&
+ (pImpl->xCommand2Dispatch = xDispatchProv->queryDispatch(pImpl->aCommand2URL, sTarget, 0)).is())
+ {
+ bSearchComponent2 = true;
+ }
+
+ if( bSearchComponent1 || bSearchComponent2 )
+ {
+ //get the labels of the FixedLine and the buttons
+ // "/org.openoffice.Office.Common/SearchOptions/ComponentSearchGroupLabel
+ // "/org.openoffice.Office.Common/SearchOptions/ComponentSearchCommandLabel1
+ // "/org.openoffice.Office.Common/SearchOptions/ComponentSearchCommandLabel2
+ try
+ {
+ uno::Reference< lang::XMultiServiceFactory > xMgr = getProcessServiceFactory();
+ uno::Reference< lang::XMultiServiceFactory > xConfigurationProvider(xMgr->createInstance(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationProvider"))),
+ uno::UNO_QUERY);
+ uno::Sequence< uno::Any > aArgs(1);
+ ::rtl::OUString sPath(RTL_CONSTASCII_USTRINGPARAM( "/org.openoffice.Office.Common/SearchOptions/"));
+ aArgs[0] <<= sPath;
+
+ uno::Reference< uno::XInterface > xIFace = xConfigurationProvider->createInstanceWithArguments(
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationUpdateAccess")),
+ aArgs);
+ uno::Reference< container::XNameAccess> xDirectAccess(xIFace, uno::UNO_QUERY);
+ if(xDirectAccess.is())
+ {
+ ::rtl::OUString sTemp;
+ ::rtl::OUString sProperty(RTL_CONSTASCII_USTRINGPARAM( "ComponentSearchGroupLabel"));
+ uno::Any aRet = xDirectAccess->getByName(sProperty);
+ aRet >>= sTemp;
+ aSearchComponentFL.SetText( sTemp );
+ aRet = xDirectAccess->getByName(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "ComponentSearchCommandLabel1")));
+ aRet >>= sTemp;
+ aSearchComponent1PB.SetText( sTemp );
+ aRet = xDirectAccess->getByName(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "ComponentSearchCommandLabel2")));
+ aRet >>= sTemp;
+ aSearchComponent2PB.SetText( sTemp );
+ }
+ }
+ catch(uno::Exception&){}
+
+ if(aSearchComponent1PB.GetText().Len() && bSearchComponent1 )
+ {
+ aSearchComponentFL.Show();
+ aSearchComponent1PB.Show();
+ }
+ if( aSearchComponent2PB.GetText().Len() )
+ {
+ if(!aSearchComponent1PB.IsVisible())
+ {
+ aSearchComponent2PB.SetPosPixel(aSearchComponent1PB.GetPosPixel());
+ }
+ aSearchComponentFL.Show();
+ aSearchComponent2PB.Show();
+ }
+ if( aSearchComponentFL.IsVisible() && aSearchComponent1PB.IsVisible() )
+ {
+
+ //dialog must be resized
+ Size aDlgSize(GetSizePixel());
+ sal_Int32 nOffset = aSearchCmdLine.GetPosPixel().Y() - aSearchAllBtn.GetPosPixel().Y()
+ - aButtonsFL.GetPosPixel().Y() + aSearchComponent2PB.GetPosPixel().Y();
+
+ aDlgSize.Height() += nOffset;
+ Window* aWindows[] =
+ {
+ &aOptionsFL,
+ &aSelectionBtn,
+ &aBackwardsBtn,
+ &aRegExpBtn,
+ &aSimilarityBox,
+ &aSimilarityBtn,
+ &aLayoutBtn,
+ &aNotesBtn,
+ &aJapMatchFullHalfWidthCB,
+ &aJapOptionsCB,
+ &aJapOptionsBtn,
+ &aAttributeBtn,
+ &aFormatBtn,
+ &aNoFormatBtn,
+ &aCalcFL,
+ &aCalcSearchInFT,
+ &aCalcSearchInLB,
+ &aCalcSearchDirFT,
+ &aRowsBtn,
+ &aColumnsBtn,
+ &aAllSheetsCB,
+ &aButtonsFL,
+ &aHelpBtn,
+ &aCloseBtn,
+ pMoreBtn,
+ 0
+ };
+ sal_Int32 nWindow = 0;
+ do
+ {
+ lcl_MoveDown( *aWindows[nWindow], nOffset );
+ }
+ while(aWindows[++nWindow]);
+
+ SetSizePixel(aDlgSize);
+ }
+ }
+}
+
+// -----------------------------------------------------------------------
+
+BOOL SvxSearchDialog::Close()
+{
+ // remember strings speichern
+ if ( aSearchStrings.Count() )
+ StrArrToList_Impl( SID_SEARCHDLG_SEARCHSTRINGS, aSearchStrings );
+
+ if ( aReplaceStrings.Count() )
+ StrArrToList_Impl( SID_SEARCHDLG_REPLACESTRINGS, aReplaceStrings );
+
+ // save settings to configuration
+ SvtSearchOptions aOpt;
+ aOpt.SetWholeWordsOnly ( aWordBtn .IsChecked() );
+ aOpt.SetBackwards ( aBackwardsBtn .IsChecked() );
+ aOpt.SetUseRegularExpression ( aRegExpBtn .IsChecked() );
+ //aOpt.SetMatchCase ( aMatchCaseCB .IsChecked() );
+ aOpt.SetSearchForStyles ( aLayoutBtn .IsChecked() );
+ aOpt.SetSimilaritySearch ( aSimilarityBox .IsChecked() );
+ //aOpt.SetMatchFullHalfWidthForms ( !aJapMatchFullHalfWidthCB.IsChecked() );
+ aOpt.SetUseAsianOptions ( aJapOptionsCB .IsChecked() );
+ aOpt.SetNotes ( aNotesBtn .IsChecked() );
+
+ const SfxPoolItem* ppArgs[] = { pSearchItem, 0 };
+ rBindings.GetDispatcher()->Execute( FID_SEARCH_OFF, SFX_CALLMODE_SLOT, ppArgs );
+ rBindings.Execute( SID_SEARCH_DLG );
+
+ return TRUE;
+}
+
+// -----------------------------------------------------------------------
+
+INT32 SvxSearchDialog::GetTransliterationFlags() const
+{
+ if (!aMatchCaseCB.IsChecked())
+ nTransliterationFlags |= TransliterationModules_IGNORE_CASE;
+ else
+ nTransliterationFlags &= ~TransliterationModules_IGNORE_CASE;
+ if ( !aJapMatchFullHalfWidthCB.IsChecked())
+ nTransliterationFlags |= TransliterationModules_IGNORE_WIDTH;
+ else
+ nTransliterationFlags &= ~TransliterationModules_IGNORE_WIDTH;
+ return nTransliterationFlags;
+}
+
+// -----------------------------------------------------------------------
+
+void SvxSearchDialog::ApplyTransliterationFlags_Impl( INT32 nSettings )
+{
+ nTransliterationFlags = nSettings;
+ BOOL bVal = 0 != (nSettings & TransliterationModules_IGNORE_CASE);
+ aMatchCaseCB .Check(!bVal );
+ bVal = 0 != (nSettings & TransliterationModules_IGNORE_WIDTH);
+ aJapMatchFullHalfWidthCB.Check( !bVal );
+}
+
+// -----------------------------------------------------------------------
+
+void SvxSearchDialog::Activate()
+{
+ // apply possible transliteration changes of the SvxSearchItem member
+ DBG_ASSERT( pSearchItem, "SearchItem missing" );
+ if (pSearchItem)
+ {
+ aMatchCaseCB .Check( pSearchItem->GetExact() );
+ aJapMatchFullHalfWidthCB.Check( !pSearchItem->IsMatchFullHalfWidthForms() );
+ }
+}
+
+// -----------------------------------------------------------------------
+
+void SvxSearchDialog::InitControls_Impl()
+{
+ // CaseSensitives AutoComplete
+ aSearchLB.EnableAutocomplete( TRUE, TRUE );
+ aSearchLB.Show();
+ aReplaceLB.EnableAutocomplete( TRUE, TRUE );
+ aReplaceLB.Show();
+
+ aFormatBtn.Disable();
+ aAttributeBtn.Disable();
+
+ aSearchLB.SetModifyHdl( LINK( this, SvxSearchDialog, ModifyHdl_Impl ) );
+ aReplaceLB.SetModifyHdl( LINK( this, SvxSearchDialog, ModifyHdl_Impl ) );
+
+ Link aLink = LINK( this, SvxSearchDialog, FocusHdl_Impl );
+ aSearchLB.SetGetFocusHdl( aLink );
+ pImpl->aSearchFormats.SetGetFocusHdl( aLink );
+
+ aReplaceLB.SetGetFocusHdl( aLink );
+ pImpl->aReplaceFormats.SetGetFocusHdl( aLink );
+
+ aLink = LINK( this, SvxSearchDialog, LoseFocusHdl_Impl );
+ aSearchLB.SetLoseFocusHdl( aLink );
+ aReplaceLB.SetLoseFocusHdl( aLink );
+
+ aSearchTmplLB.SetLoseFocusHdl( aLink );
+ aReplaceTmplLB.SetLoseFocusHdl( aLink );
+
+ aLink = LINK( this, SvxSearchDialog, CommandHdl_Impl );
+ aSearchBtn.SetClickHdl( aLink );
+ aSearchAllBtn.SetClickHdl( aLink );
+ aReplaceBtn.SetClickHdl( aLink );
+ aReplaceAllBtn.SetClickHdl( aLink );
+ aCloseBtn.SetClickHdl( aLink );
+ aSimilarityBtn.SetClickHdl( aLink );
+ aJapOptionsBtn.SetClickHdl( aLink );
+ aSearchComponent1PB.SetClickHdl( aLink );
+ aSearchComponent2PB.SetClickHdl( aLink );
+
+ aLink = LINK( this, SvxSearchDialog, FlagHdl_Impl );
+ aWordBtn.SetClickHdl( aLink );
+ aSelectionBtn.SetClickHdl( aLink );
+ aMatchCaseCB.SetClickHdl( aLink );
+ aRegExpBtn.SetClickHdl( aLink );
+ aBackwardsBtn.SetClickHdl( aLink );
+ aNotesBtn.SetClickHdl( aLink );
+ aSimilarityBox.SetClickHdl( aLink );
+ aJapOptionsCB.SetClickHdl( aLink );
+ aJapMatchFullHalfWidthCB.SetClickHdl( aLink );
+
+ aLayoutBtn.SetClickHdl( LINK( this, SvxSearchDialog, TemplateHdl_Impl ) );
+ aFormatBtn.SetClickHdl( LINK( this, SvxSearchDialog, FormatHdl_Impl ) );
+ aNoFormatBtn.SetClickHdl(
+ LINK( this, SvxSearchDialog, NoFormatHdl_Impl ) );
+ aAttributeBtn.SetClickHdl(
+ LINK( this, SvxSearchDialog, AttributeHdl_Impl ) );
+
+ // check if buttontext is to wide
+ long nTxtW = Max( pMoreBtn->GetCtrlTextWidth( pMoreBtn->GetMoreText() ),
+ pMoreBtn->GetCtrlTextWidth( pMoreBtn->GetLessText() ) );
+ nTxtW += ( pMoreBtn->GetTextHeight() * 2 ); // add image size + offset
+ long nBtnW = pMoreBtn->GetSizePixel().Width();
+ if ( nTxtW > nBtnW )
+ {
+ // broaden the button
+ const long nMinDelta = 10;
+ long nDelta = Max( nTxtW - nBtnW, nMinDelta );
+ Size aNewSize = pMoreBtn->GetSizePixel();
+ aNewSize.Width() += nDelta;
+ pMoreBtn->SetSizePixel( aNewSize );
+ }
+}
+
+// -----------------------------------------------------------------------
+
+void SvxSearchDialog::CalculateDelta_Impl()
+{
+ DBG_ASSERT( pSearchItem, "no search item" );
+
+ bool bDrawApp = false;
+ bool bCalcApp = false;
+ bool bWriterApp = false;
+ bool bImpressApp = false;
+ const uno::Reference< frame::XFrame > xFrame = rBindings.GetActiveFrame();
+ uno::Reference< frame::XModuleManager > xModuleManager(
+ ::comphelper::getProcessServiceFactory()->createInstance(
+ DEFINE_CONST_UNICODE("com.sun.star.frame.ModuleManager") ), uno::UNO_QUERY );
+ if ( xModuleManager.is() )
+ {
+ try
+ {
+ ::rtl::OUString aModuleIdentifier = xModuleManager->identify( xFrame );
+ bCalcApp = aModuleIdentifier.equalsAscii( "com.sun.star.sheet.SpreadsheetDocument" );
+ bDrawApp = aModuleIdentifier.equalsAscii( "com.sun.star.drawing.DrawingDocument" );
+ bImpressApp = aModuleIdentifier.equalsAscii( "com.sun.star.presentation.PresentationDocument" );
+ bWriterApp = aModuleIdentifier.equalsAscii( "com.sun.star.text.TextDocument" );
+ }
+ catch ( uno::Exception& )
+ {
+ }
+ }
+
+ if ( pImpl->bDeltaCalculated )
+ return;
+ else
+ pImpl->bDeltaCalculated = TRUE;
+
+ ULONG nDelta = 187, nOffset = 0;
+ SvtCJKOptions aCJKOptions;
+
+ pMoreBtn->AddWindow( &aOptionsFL );
+ if ( !bDrawApp )
+ pMoreBtn->AddWindow( &aLayoutBtn );
+ if ( bWriterApp )
+ pMoreBtn->AddWindow( &aNotesBtn );
+ else
+ {
+ aNotesBtn.Hide();
+ nOffset = !bDrawApp ? 13 : 0;
+ }
+ pMoreBtn->AddWindow( &aBackwardsBtn );
+ if ( !bDrawApp )
+ pMoreBtn->AddWindow( &aRegExpBtn );
+ pMoreBtn->AddWindow( &aSimilarityBox );
+ pMoreBtn->AddWindow( &aSimilarityBtn );
+ pMoreBtn->AddWindow( &aSelectionBtn );
+
+ if ( aCJKOptions.IsCJKFontEnabled() )
+ pMoreBtn->AddWindow( &aJapMatchFullHalfWidthCB );
+ else
+ nOffset += 13;
+ if ( aCJKOptions.IsJapaneseFindEnabled() )
+ {
+ pMoreBtn->AddWindow( &aJapOptionsCB );
+ pMoreBtn->AddWindow( &aJapOptionsBtn );
+ }
+ else
+ nOffset += 17;
+
+ if ( bWriter )
+ {
+ pMoreBtn->AddWindow( &aAttributeBtn );
+ pMoreBtn->AddWindow( &aFormatBtn );
+ pMoreBtn->AddWindow( &aNoFormatBtn );
+ }
+
+ if (bDrawApp || bImpressApp)
+ {
+ // "Find All" button is hidden--align "Find" vertically to the
+ // search listbox
+ Point aNewPt(aSearchBtn.GetPosPixel());
+ const Size aBtnSz(aSearchBtn.GetSizePixel());
+ const Size aLBSz(aSearchLB.GetSizePixel());
+ const int nOff((aLBSz.Height() - aBtnSz.Height()) / 2);
+ aNewPt.Y() = aSearchLB.GetPosPixel().Y() + nOff;
+ aSearchBtn.SetPosPixel(aNewPt);
+ }
+
+ if ( bDrawApp )
+ {
+ // Draw App: "Regular expressions" and "Search for Styles" check boxes are hidden
+ // so align the other buttons
+ const long nAppFontHeight = 13; // checkbox height + space between in APPFONT
+ long nH = LogicToPixel( Size( 0, nAppFontHeight ), MAP_APPFONT ).Height();
+
+ Point aNewPos = aSimilarityBox.GetPosPixel();
+ aNewPos.Y() -= nH;
+ aSimilarityBox.SetPosPixel( aNewPos );
+ aNewPos = aSimilarityBtn.GetPosPixel();
+ aNewPos.Y() -= nH;
+ aSimilarityBtn.SetPosPixel( aNewPos );
+ nH *= 3;
+ nOffset += ( 3 * nAppFontHeight );
+ if ( aCJKOptions.IsCJKFontEnabled() )
+ {
+ aNewPos = aJapMatchFullHalfWidthCB.GetPosPixel();
+ aNewPos.Y() -= nH;
+ aJapMatchFullHalfWidthCB.SetPosPixel( aNewPos );
+ }
+ if ( aCJKOptions.IsJapaneseFindEnabled() )
+ {
+ aNewPos = aJapOptionsCB.GetPosPixel();
+ aNewPos.Y() -= nH;
+ aJapOptionsCB.SetPosPixel( aNewPos );
+ aNewPos = aJapOptionsBtn.GetPosPixel();
+ aNewPos.Y() -= nH;
+ aJapOptionsBtn.SetPosPixel( aNewPos );
+ }
+ }
+
+ if ( bCalcApp || bImpressApp )
+ {
+ Window* pWins[] =
+ {
+ &aCalcFL, &aCalcSearchInFT, &aCalcSearchInLB, &aCalcSearchDirFT,
+ &aRowsBtn, &aColumnsBtn, &aAllSheetsCB, &aJapMatchFullHalfWidthCB,
+ &aJapOptionsCB, &aJapOptionsBtn
+ };
+ Window** pCurrent = pWins;
+ sal_uInt32 i = 0;
+ const sal_uInt32 nCalcCtrlCount = 7;
+ if ( nOffset > 0 )
+ {
+ long nH = LogicToPixel( Size( 0, nOffset ), MAP_APPFONT ).Height();
+ for ( i = 0; i < sizeof( pWins ) / sizeof( pWins[ 0 ] ); ++i, ++pCurrent )
+ {
+ if ( ( bCalcApp && i < nCalcCtrlCount )
+ || ( i == nCalcCtrlCount && aCJKOptions.IsCJKFontEnabled() )
+ || ( i > nCalcCtrlCount && aCJKOptions.IsJapaneseFindEnabled() ) )
+ {
+ Point aNewPos = (*pCurrent)->GetPosPixel();
+ aNewPos.Y() -= nH;
+ (*pCurrent)->SetPosPixel( aNewPos );
+ }
+ }
+ }
+
+ if ( bCalcApp)
+ {
+ pCurrent = pWins;
+ for ( i = 0; i < nCalcCtrlCount; ++i, ++pCurrent )
+ pMoreBtn->AddWindow( *pCurrent );
+ }
+ else
+ nOffset += 64;
+ }
+ else
+ nOffset += 64;
+
+ pMoreBtn->SetDelta( nDelta - nOffset );
+ pMoreBtn->Show();
+ pMoreBtn->Enable();
+}
+
+#if ENABLE_LAYOUT
+#undef Window
+#define Window ::Window
+#endif /* ENABLE_LAYOUT */
+
+// -----------------------------------------------------------------------
+
+void SvxSearchDialog::Init_Impl( int bSearchPattern )
+{
+ DBG_ASSERT( pSearchItem, "SearchItem == 0" );
+ bWriter = ( pSearchItem->GetAppFlag() == SVX_SEARCHAPP_WRITER );
+
+ pImpl->bMultiLineEdit = FALSE;
+
+ if ( !pImpl->bMultiLineEdit )
+ {
+ pImpl->aSearchFormats.Hide();
+ aSearchAttrText.Show();
+ pImpl->aReplaceFormats.Hide();
+ aReplaceAttrText.Show();
+ }
+ else
+ {
+ String aText = aSearchAttrText.GetText();
+ aSearchAttrText.Hide();
+
+ if ( aText.Len() )
+ pImpl->aSearchFormats.SetText( aText );
+ pImpl->aSearchFormats.Show();
+ aText = aReplaceAttrText.GetText();
+ aReplaceAttrText.Hide();
+
+ if ( aText.Len() )
+ pImpl->aReplaceFormats.SetText( aText );
+ pImpl->aReplaceFormats.Show();
+ }
+
+ if ( ( nModifyFlag & MODIFY_WORD ) == 0 )
+ aWordBtn.Check( pSearchItem->GetWordOnly() );
+ if ( ( nModifyFlag & MODIFY_EXACT ) == 0 )
+ aMatchCaseCB.Check( pSearchItem->GetExact() );
+ if ( ( nModifyFlag & MODIFY_BACKWARDS ) == 0 )
+ aBackwardsBtn.Check( pSearchItem->GetBackward() );
+ if ( ( nModifyFlag & MODIFY_NOTES ) == 0 )
+ aNotesBtn.Check( pSearchItem->GetNotes() );
+ if ( ( nModifyFlag & MODIFY_SELECTION ) == 0 )
+ aSelectionBtn.Check( pSearchItem->GetSelection() );
+ if ( ( nModifyFlag & MODIFY_REGEXP ) == 0 )
+ aRegExpBtn.Check( pSearchItem->GetRegExp() );
+ if ( ( nModifyFlag & MODIFY_LAYOUT ) == 0 )
+ aLayoutBtn.Check( pSearchItem->GetPattern() );
+ if (aNotesBtn.IsChecked())
+ aLayoutBtn.Disable();
+ aSimilarityBox.Check( pSearchItem->IsLevenshtein() );
+ if( aJapOptionsCB.IsVisible() )
+ aJapOptionsCB.Check( pSearchItem->IsUseAsianOptions() );
+ ApplyTransliterationFlags_Impl( pSearchItem->GetTransliterationFlags() );
+
+ CalculateDelta_Impl();
+
+ FASTBOOL bDraw = FALSE;
+ if ( pSearchItem->GetAppFlag() == SVX_SEARCHAPP_CALC )
+ {
+ Link aLink = LINK( this, SvxSearchDialog, FlagHdl_Impl );
+ aCalcSearchInLB.SetSelectHdl( aLink );
+ aRowsBtn.SetClickHdl( aLink );
+ aColumnsBtn.SetClickHdl( aLink );
+ aAllSheetsCB.SetClickHdl( aLink );
+
+ switch ( pSearchItem->GetCellType() )
+ {
+ case SVX_SEARCHIN_FORMULA:
+ if ( ( nModifyFlag & MODIFY_FORMULAS ) == 0 )
+ aCalcSearchInLB.SelectEntryPos( SVX_SEARCHIN_FORMULA );
+ break;
+
+ case SVX_SEARCHIN_VALUE:
+ if ( ( nModifyFlag & MODIFY_VALUES ) == 0 )
+ aCalcSearchInLB.SelectEntryPos( SVX_SEARCHIN_VALUE );
+ break;
+
+ case SVX_SEARCHIN_NOTE:
+ if ( ( nModifyFlag & MODIFY_CALC_NOTES ) == 0 )
+ aCalcSearchInLB.SelectEntryPos( SVX_SEARCHIN_NOTE );
+ break;
+ }
+ aWordBtn.SetText( aCalcStr.GetToken( 0, '#' ) );
+
+ if ( pSearchItem->GetRowDirection() &&
+ ( nModifyFlag & MODIFY_ROWS ) == 0 )
+ aRowsBtn.Check();
+ else if ( !pSearchItem->GetRowDirection() &&
+ ( nModifyFlag & MODIFY_COLUMNS ) == 0 )
+ aColumnsBtn.Check();
+
+ if ( ( nModifyFlag & MODIFY_ALLTABLES ) == 0 )
+ aAllSheetsCB.Check( pSearchItem->IsAllTables() );
+
+ // nur im Writer Suche nach Formatierung
+ aFormatBtn.Hide();
+ aNoFormatBtn.Hide();
+ aAttributeBtn.Hide();
+ }
+ else
+ {
+ aWordBtn.SetText( aCalcStr.GetToken( 1, '#' ) );
+
+ if ( pSearchItem->GetAppFlag() == SVX_SEARCHAPP_DRAW )
+ {
+ aSearchAllBtn.Hide();
+
+ aRegExpBtn.Hide();
+ aLayoutBtn.Hide();
+
+ // nur im Writer Suche nach Formatierung
+ aFormatBtn.Hide();
+ aNoFormatBtn.Hide();
+ aAttributeBtn.Hide();
+ bDraw = TRUE;
+ }
+ else
+ {
+ if ( !pSearchList )
+ {
+ // Attribut-Sets besorgen, wenn noch nicht geschehen
+ const SfxPoolItem* ppArgs[] = { pSearchItem, 0 };
+ const SvxSetItem* pSrchSetItem =
+ (const SvxSetItem*)rBindings.GetDispatcher()->Execute( FID_SEARCH_SEARCHSET, SFX_CALLMODE_SLOT, ppArgs );
+
+ if ( pSrchSetItem )
+ InitAttrList_Impl( &pSrchSetItem->GetItemSet(), 0 );
+
+ const SvxSetItem* pReplSetItem =
+ (const SvxSetItem*)rBindings.GetDispatcher()->Execute( FID_SEARCH_REPLACESET, SFX_CALLMODE_SLOT, ppArgs );
+
+ if ( pReplSetItem )
+ InitAttrList_Impl( 0, &pReplSetItem->GetItemSet() );
+ }
+/*
+ aFormatBtn.Show();
+ aNoFormatBtn.Show();
+ aAttributeBtn.Show();
+*/
+ }
+// pMoreBtn->SetState( FALSE );
+// pMoreBtn->Hide();
+ }
+
+ if ( 0 && !bDraw ) //!!!!!
+ {
+ aRegExpBtn.Show();
+ aLayoutBtn.Show();
+ }
+
+ // "Ahnlichkeitssuche?
+ if ( ( nModifyFlag & MODIFY_SIMILARITY ) == 0 )
+ aSimilarityBox.Check( pSearchItem->IsLevenshtein() );
+ bSet = TRUE;
+
+ pImpl->bSaveToModule = FALSE;
+ FlagHdl_Impl( &aSimilarityBox );
+ FlagHdl_Impl( &aJapOptionsCB );
+ pImpl->bSaveToModule = TRUE;
+
+ FASTBOOL bDisableSearch = FALSE;
+ SfxViewShell* pViewShell = SfxViewShell::Current();
+
+ if ( pViewShell )
+ {
+ BOOL bText = !bSearchPattern;
+
+ if ( pViewShell->HasSelection( bText ) )
+ EnableControl_Impl( &aSelectionBtn );
+ else
+ {
+ aSelectionBtn.Check( FALSE );
+ aSelectionBtn.Disable();
+ }
+ }
+
+ // Patternsuche und es wurden keine AttrSets "ubergeben
+ if ( bSearchPattern )
+ {
+ SfxObjectShell* pShell = SfxObjectShell::Current();
+
+ if ( pShell && pShell->GetStyleSheetPool() )
+ {
+ // Vorlagen beschaffen
+ aSearchTmplLB .Clear();
+ aReplaceTmplLB.Clear();
+ SfxStyleSheetBasePool* pStylePool = pShell->GetStyleSheetPool();
+ pStylePool->SetSearchMask( pSearchItem->GetFamily(),
+ SFXSTYLEBIT_ALL );
+ SfxStyleSheetBase* pBase = pStylePool->First();
+
+ while ( pBase )
+ {
+ if ( pBase->IsUsed() )
+ aSearchTmplLB.InsertEntry( pBase->GetName() );
+ aReplaceTmplLB.InsertEntry( pBase->GetName() );
+ pBase = pStylePool->Next();
+ }
+ aSearchTmplLB.SelectEntry( pSearchItem->GetSearchString() );
+ aReplaceTmplLB.SelectEntry( pSearchItem->GetReplaceString() );
+
+ }
+ aSearchTmplLB.Show();
+
+ if ( bConstruct )
+ // nur nach dem Erzeugen den Fokus grappen
+ aSearchTmplLB.GrabFocus();
+ aReplaceTmplLB.Show();
+ aSearchLB.Hide();
+ aReplaceLB.Hide();
+
+ aWordBtn.Disable();
+ aRegExpBtn.Disable();
+ aMatchCaseCB.Disable();
+
+ bDisableSearch = !aSearchTmplLB.GetEntryCount();
+ }
+ else
+ {
+ FASTBOOL bSetSearch = ( ( nModifyFlag & MODIFY_SEARCH ) == 0 );
+ FASTBOOL bSetReplace = ( ( nModifyFlag & MODIFY_REPLACE ) == 0 );
+
+ if ( pSearchItem->GetSearchString().Len() && bSetSearch )
+ aSearchLB.SetText( pSearchItem->GetSearchString() );
+ else if ( aSearchStrings.Count() )
+ {
+ FASTBOOL bAttributes =
+ ( ( pSearchList && pSearchList->Count() ) ||
+ ( pReplaceList && pReplaceList->Count() ) );
+
+ if ( bSetSearch && !bAttributes )
+ aSearchLB.SetText( *aSearchStrings[ 0 ] );
+
+ String aReplaceTxt = pSearchItem->GetReplaceString();
+
+ if ( aReplaceStrings.Count() )
+ aReplaceTxt = *aReplaceStrings[ 0 ];
+
+ if ( bSetReplace && !bAttributes )
+ aReplaceLB.SetText( aReplaceTxt );
+ }
+ aSearchLB.Show();
+
+ if ( bConstruct )
+ // nur nach dem Erzeugen den Fokus grappen
+ aSearchLB.GrabFocus();
+ aReplaceLB.Show();
+ aSearchTmplLB.Hide();
+ aReplaceTmplLB.Hide();
+
+ EnableControl_Impl( &aRegExpBtn );
+ EnableControl_Impl( &aMatchCaseCB );
+
+ if ( aRegExpBtn.IsChecked() )
+ aWordBtn.Disable();
+ else
+ EnableControl_Impl( &aWordBtn );
+
+ String aSrchAttrTxt;
+
+ if ( pImpl->bMultiLineEdit )
+ aSrchAttrTxt = pImpl->aSearchFormats.GetText();
+ else
+ aSrchAttrTxt = aSearchAttrText.GetText();
+
+ bDisableSearch = !aSearchLB.GetText().Len() && !aSrchAttrTxt.Len();
+ }
+ FocusHdl_Impl( &aSearchLB );
+
+ if ( bDisableSearch )
+ {
+ aSearchBtn.Disable();
+ aSearchAllBtn.Disable();
+ aReplaceBtn.Disable();
+ aReplaceAllBtn.Disable();
+ aSearchComponentFL.Enable(sal_False);
+ aSearchComponent1PB.Enable(sal_False);
+ aSearchComponent2PB.Enable(sal_False);
+ }
+ else
+ {
+ EnableControl_Impl( &aSearchBtn );
+ EnableControl_Impl( &aReplaceBtn );
+ if (!bWriter || (bWriter && !aNotesBtn.IsChecked()))
+ {
+ EnableControl_Impl( &aSearchAllBtn );
+ EnableControl_Impl( &aReplaceAllBtn );
+ }
+ if (bWriter && pSearchItem->GetNotes())
+ {
+ aSearchAllBtn.Disable();
+ aReplaceAllBtn.Disable();
+ }
+ }
+
+ if ( ( !pImpl->bMultiLineEdit && aSearchAttrText.GetText().Len() ) ||
+ ( pImpl->bMultiLineEdit && pImpl->aSearchFormats.GetText().Len() ) )
+ EnableControl_Impl( &aNoFormatBtn );
+ else
+ aNoFormatBtn.Disable();
+
+ if ( !pSearchList )
+ {
+ aAttributeBtn.Disable();
+ aFormatBtn.Disable();
+ }
+
+ if ( aLayoutBtn.IsChecked() )
+ {
+ pImpl->bSaveToModule = FALSE;
+ TemplateHdl_Impl( &aLayoutBtn );
+ pImpl->bSaveToModule = TRUE;
+ }
+}
+
+// -----------------------------------------------------------------------
+
+void SvxSearchDialog::InitAttrList_Impl( const SfxItemSet* pSSet,
+ const SfxItemSet* pRSet )
+{
+ if ( !pSSet && !pRSet )
+ return;
+
+ if ( !pImpl->pRanges && pSSet )
+ {
+ sal_sSize nCnt = 0;
+ const USHORT* pPtr = pSSet->GetRanges();
+ const USHORT* pTmp = pPtr;
+
+ while( *pPtr )
+ {
+ nCnt += ( *(pPtr+1) - *pPtr ) + 1;
+ pPtr += 2;
+ }
+ nCnt = pPtr - pTmp + 1;
+ pImpl->pRanges = new USHORT[nCnt];
+ memcpy( pImpl->pRanges, pTmp, sizeof(USHORT) * nCnt );
+ }
+
+ // sorge daf"ur, das die Texte der Attribute richtig stehen
+ String aDesc;
+
+ if ( pSSet )
+ {
+ delete pSearchList;
+ pSearchList = new SearchAttrItemList;
+
+ if ( pSSet->Count() )
+ {
+ pSearchList->Put( *pSSet );
+
+ if ( !pImpl->bMultiLineEdit )
+ aSearchAttrText.SetText( BuildAttrText_Impl( aDesc, TRUE ) );
+ else
+ pImpl->aSearchFormats.SetText( BuildAttrText_Impl( aDesc, TRUE ) );
+
+ if ( aDesc.Len() )
+ bFormat |= TRUE;
+ }
+ }
+
+ if ( pRSet )
+ {
+ delete pReplaceList;
+ pReplaceList = new SearchAttrItemList;
+
+ if ( pRSet->Count() )
+ {
+ pReplaceList->Put( *pRSet );
+
+ if ( !pImpl->bMultiLineEdit )
+ aReplaceAttrText.SetText( BuildAttrText_Impl( aDesc, FALSE ) );
+ else
+ pImpl->aReplaceFormats.SetText( BuildAttrText_Impl( aDesc, FALSE ) );
+
+ if ( aDesc.Len() )
+ bFormat |= TRUE;
+ }
+ }
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( SvxSearchDialog, FlagHdl_Impl, Control *, pCtrl )
+{
+ if ( pCtrl && !bSet )
+ SetModifyFlag_Impl( pCtrl );
+ else
+ bSet = FALSE;
+
+ if ( pCtrl == &aSimilarityBox )
+ {
+ BOOL bIsChecked = aSimilarityBox.IsChecked();
+
+ if ( bIsChecked )
+ {
+ aSimilarityBtn.Enable();
+ aRegExpBtn.Check( FALSE );
+ aRegExpBtn.Disable();
+ EnableControl_Impl( &aWordBtn );
+
+ if ( aLayoutBtn.IsChecked() )
+ {
+ EnableControl_Impl( &aMatchCaseCB );
+ aLayoutBtn.Check( FALSE );
+ }
+ aRegExpBtn.Disable();
+ aLayoutBtn.Disable();
+ aFormatBtn.Disable();
+ aNoFormatBtn.Disable();
+ aAttributeBtn.Disable();
+ }
+ else
+ {
+ EnableControl_Impl( &aRegExpBtn );
+ if (!aNotesBtn.IsChecked())
+ EnableControl_Impl( &aLayoutBtn );
+ EnableControl_Impl( &aFormatBtn );
+ EnableControl_Impl( &aAttributeBtn );
+ aSimilarityBtn.Disable();
+ }
+ pSearchItem->SetLevenshtein( bIsChecked );
+ }
+ else
+ if ( pCtrl == &aNotesBtn)
+ {
+ if (aNotesBtn.IsChecked())
+ {
+ aLayoutBtn.Disable();
+ aSearchAllBtn.Disable();
+ aReplaceAllBtn.Disable();
+ }
+ else
+ {
+ EnableControl_Impl( &aLayoutBtn );
+ ModifyHdl_Impl( &aSearchLB );
+ }
+ }
+ else
+ {
+ if ( aLayoutBtn.IsChecked() && !bFormat )
+ {
+ aWordBtn.Check( FALSE );
+ aWordBtn.Disable();
+ aRegExpBtn.Check( FALSE );
+ aRegExpBtn.Disable();
+ aMatchCaseCB.Check( FALSE );
+ aMatchCaseCB.Disable();
+ aNotesBtn.Disable();
+
+ if ( aSearchTmplLB.GetEntryCount() )
+ {
+ EnableControl_Impl( &aSearchBtn );
+ EnableControl_Impl( &aSearchAllBtn );
+ EnableControl_Impl( &aReplaceBtn );
+ EnableControl_Impl( &aReplaceAllBtn );
+ }
+ }
+ else
+ {
+ EnableControl_Impl( &aRegExpBtn );
+ EnableControl_Impl( &aMatchCaseCB );
+ EnableControl_Impl( &aNotesBtn );
+
+ if ( aRegExpBtn.IsChecked() )
+ {
+ aWordBtn.Check( FALSE );
+ aWordBtn.Disable();
+ aSimilarityBox.Disable();
+ aSimilarityBtn.Disable();
+ }
+ else
+ {
+ EnableControl_Impl( &aWordBtn );
+ EnableControl_Impl( &aSimilarityBox );
+ }
+
+ // Such-String vorhanden? dann Buttons enablen
+ bSet = TRUE;
+ ModifyHdl_Impl( &aSearchLB );
+ }
+ }
+
+ if ( &aAllSheetsCB == pCtrl )
+ {
+ if ( aAllSheetsCB.IsChecked() )
+ aSearchAllBtn.Disable();
+ else
+ {
+ bSet = TRUE;
+ ModifyHdl_Impl( &aSearchLB );
+ }
+ }
+
+ if ( &aJapOptionsCB == pCtrl )
+ {
+ BOOL bEnableJapOpt = aJapOptionsCB.IsChecked();
+ aMatchCaseCB .Enable(!bEnableJapOpt );
+ aJapMatchFullHalfWidthCB.Enable(!bEnableJapOpt );
+ aJapOptionsBtn .Enable( bEnableJapOpt );
+ }
+
+ if ( pImpl->bSaveToModule )
+ SaveToModule_Impl();
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( SvxSearchDialog, CommandHdl_Impl, Button *, pBtn )
+{
+ FASTBOOL bInclusive = ( aLayoutBtn.GetText() == aLayoutStr );
+
+ if ( ( pBtn == &aSearchBtn ) ||
+ ( pBtn == &aSearchAllBtn ) ||
+ ( pBtn == &aReplaceBtn ) ||
+ ( pBtn == &aReplaceAllBtn ) )
+ {
+ if ( aLayoutBtn.IsChecked() && !bInclusive )
+ {
+ pSearchItem->SetSearchString ( aSearchTmplLB.GetSelectEntry() );
+ pSearchItem->SetReplaceString( aReplaceTmplLB.GetSelectEntry() );
+ }
+ else
+ {
+ pSearchItem->SetSearchString ( aSearchLB.GetText() );
+ pSearchItem->SetReplaceString( aReplaceLB.GetText() );
+
+ if ( pBtn == &aReplaceBtn )
+ Remember_Impl( aReplaceLB.GetText(), FALSE );
+ else
+ {
+ Remember_Impl( aSearchLB.GetText(), TRUE );
+
+ if ( pBtn == &aReplaceAllBtn )
+ Remember_Impl( aReplaceLB.GetText(), FALSE );
+ }
+ }
+
+ pSearchItem->SetRegExp( FALSE );
+ pSearchItem->SetLevenshtein( FALSE );
+ if (GetCheckBoxValue( aRegExpBtn ))
+ pSearchItem->SetRegExp( TRUE );
+ else if (GetCheckBoxValue( aSimilarityBox ))
+ pSearchItem->SetLevenshtein( TRUE );
+
+ pSearchItem->SetWordOnly( GetCheckBoxValue( aWordBtn ) );
+ pSearchItem->SetBackward( GetCheckBoxValue( aBackwardsBtn ) );
+ pSearchItem->SetNotes( GetCheckBoxValue( aNotesBtn ) );
+ pSearchItem->SetPattern( GetCheckBoxValue( aLayoutBtn ) );
+ pSearchItem->SetSelection( GetCheckBoxValue( aSelectionBtn ) );
+
+ pSearchItem->SetUseAsianOptions( GetCheckBoxValue( aJapOptionsCB ) );
+ INT32 nFlags = GetTransliterationFlags();
+ if( !pSearchItem->IsUseAsianOptions())
+ nFlags &= (TransliterationModules_IGNORE_CASE |
+ TransliterationModules_IGNORE_WIDTH );
+ pSearchItem->SetTransliterationFlags( nFlags );
+
+ if ( !bWriter )
+ {
+ if ( aCalcSearchInLB.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND )
+ pSearchItem->SetCellType( aCalcSearchInLB.GetSelectEntryPos() );
+
+ pSearchItem->SetRowDirection( aRowsBtn.IsChecked() );
+ pSearchItem->SetAllTables( aAllSheetsCB.IsChecked() );
+ }
+
+ if ( pBtn == &aSearchBtn )
+ pSearchItem->SetCommand( SVX_SEARCHCMD_FIND );
+ else if ( pBtn == &aSearchAllBtn )
+ pSearchItem->SetCommand( SVX_SEARCHCMD_FIND_ALL );
+ else if ( pBtn == &aReplaceBtn )
+ pSearchItem->SetCommand( SVX_SEARCHCMD_REPLACE );
+ else if ( pBtn == &aReplaceAllBtn )
+ pSearchItem->SetCommand( SVX_SEARCHCMD_REPLACE_ALL );
+
+ // wenn nach Vorlagen gesucht wird, dann Format-Listen l"oschen
+ if ( !bFormat && pSearchItem->GetPattern() )
+ {
+ if ( pSearchList )
+ pSearchList->Clear();
+
+ if ( pReplaceList )
+ pReplaceList->Clear();
+ }
+ nModifyFlag = 0;
+ const SfxPoolItem* ppArgs[] = { pSearchItem, 0 };
+ rBindings.ExecuteSynchron( FID_SEARCH_NOW, ppArgs, 0L );
+ }
+ else if ( pBtn == &aCloseBtn )
+ {
+ if ( !aLayoutBtn.IsChecked() || bInclusive )
+ {
+ String aStr( aSearchLB.GetText() );
+
+ if ( aStr.Len() )
+ Remember_Impl( aStr, TRUE );
+ aStr = aReplaceLB.GetText();
+
+ if ( aStr.Len() )
+ Remember_Impl( aStr, FALSE );
+ }
+ SaveToModule_Impl();
+ Close();
+ }
+ else if ( pBtn == &aSimilarityBtn )
+ {
+//CHINA001 SvxSearchSimilarityDialog* pDlg =
+//CHINA001 new SvxSearchSimilarityDialog( this,
+//CHINA001 pSearchItem->IsLEVRelaxed(),
+//CHINA001 pSearchItem->GetLEVOther(),
+//CHINA001 pSearchItem->GetLEVShorter(),
+//CHINA001 pSearchItem->GetLEVLonger() );
+ SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
+ if(pFact)
+ {
+ AbstractSvxSearchSimilarityDialog* pDlg = pFact->CreateSvxSearchSimilarityDialog( LAYOUT_THIS_WINDOW (this),
+ pSearchItem->IsLEVRelaxed(),
+ pSearchItem->GetLEVOther(),
+ pSearchItem->GetLEVShorter(),
+ pSearchItem->GetLEVLonger() );
+ DBG_ASSERT(pDlg, "Dialogdiet fail!");//CHINA001
+ if ( pDlg && pDlg->Execute() == RET_OK )
+ {
+ pSearchItem->SetLEVRelaxed( pDlg->IsRelaxed() );
+ pSearchItem->SetLEVOther( pDlg->GetOther() );
+ pSearchItem->SetLEVShorter( pDlg->GetShorter() );
+ pSearchItem->SetLEVLonger( pDlg->GetLonger() );
+ SaveToModule_Impl();
+ }
+ delete pDlg;
+ }
+ }
+ else if ( pBtn == &aJapOptionsBtn )
+ {
+ SfxItemSet aSet( SFX_APP()->GetPool() );
+ pSearchItem->SetTransliterationFlags( GetTransliterationFlags() );
+ SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
+ if(pFact)
+ {
+ AbstractSvxJSearchOptionsDialog* aDlg = pFact->CreateSvxJSearchOptionsDialog( LAYOUT_THIS_WINDOW (this), aSet,
+ pSearchItem->GetTransliterationFlags() );
+ DBG_ASSERT(aDlg, "Dialogdiet fail!");//CHINA001
+ int nRet = aDlg->Execute(); //CHINA001 int nRet = aDlg.Execute();
+ if (RET_OK == nRet) //! true only if FillItemSet of SvxJSearchOptionsPage returns true
+ {
+ INT32 nFlags = aDlg->GetTransliterationFlags(); //CHINA001 INT32 nFlags = aDlg.GetTransliterationFlags();
+ pSearchItem->SetTransliterationFlags( nFlags );
+ ApplyTransliterationFlags_Impl( nFlags );
+ }
+ delete aDlg; //add for CHINA001
+ }
+ }
+ else if(pBtn == &aSearchComponent1PB || pBtn == &aSearchComponent2PB )
+ {
+ uno::Sequence < beans::PropertyValue > aArgs(2);
+ beans::PropertyValue* pArgs = aArgs.getArray();
+ pArgs[0].Name = ::rtl::OUString::createFromAscii("SearchString");
+ pArgs[0].Value <<= ::rtl::OUString(aSearchLB.GetText());
+ pArgs[1].Name = ::rtl::OUString::createFromAscii("ParentWindow");
+ pArgs[1].Value <<= VCLUnoHelper::GetInterface( LAYOUT_THIS_WINDOW (this) );
+ if(pBtn == &aSearchComponent1PB)
+ {
+ if ( pImpl->xCommand1Dispatch.is() )
+ pImpl->xCommand1Dispatch->dispatch(pImpl->aCommand1URL, aArgs);
+ }
+ else
+ {
+ if ( pImpl->xCommand2Dispatch.is() )
+ pImpl->xCommand2Dispatch->dispatch(pImpl->aCommand2URL, aArgs);
+ }
+ }
+
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( SvxSearchDialog, ModifyHdl_Impl, ComboBox *, pEd )
+{
+ if ( !bSet )
+ SetModifyFlag_Impl( pEd );
+ else
+ bSet = FALSE;
+
+ if ( pEd == &aSearchLB || pEd == &aReplaceLB )
+ {
+ xub_StrLen nLBTxtLen = aSearchLB.GetText().Len(), nTxtLen;
+
+ if ( !pImpl->bMultiLineEdit )
+ nTxtLen = aSearchAttrText.GetText().Len();
+ else
+ nTxtLen = pImpl->aSearchFormats.GetText().Len();
+
+ if ( nLBTxtLen || nTxtLen )
+ {
+ EnableControl_Impl( &aSearchBtn );
+ EnableControl_Impl( &aReplaceBtn );
+ if (!bWriter || (bWriter && !aNotesBtn.IsChecked()))
+ {
+ EnableControl_Impl( &aSearchAllBtn );
+ EnableControl_Impl( &aReplaceAllBtn );
+ }
+ }
+ else
+ {
+ aSearchComponentFL.Enable(sal_False);
+ aSearchComponent1PB.Enable(sal_False);
+ aSearchComponent2PB.Enable(sal_False);
+ aSearchBtn.Disable();
+ aSearchAllBtn.Disable();
+ aReplaceBtn.Disable();
+ aReplaceAllBtn.Disable();
+ }
+ }
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( SvxSearchDialog, TemplateHdl_Impl, Button *, EMPTYARG )
+{
+ if ( pImpl->bSaveToModule )
+ SaveToModule_Impl();
+
+ if ( bFormat )
+ return 0;
+ String sDesc;
+
+ if ( aLayoutBtn.IsChecked() )
+ {
+ if ( !pFamilyController )
+ {
+ USHORT nId = 0;
+
+ // Vorlagen-Controller enablen
+ switch ( pSearchItem->GetFamily() )
+ {
+ case SFX_STYLE_FAMILY_CHAR:
+ nId = SID_STYLE_FAMILY1; break;
+
+ case SFX_STYLE_FAMILY_PARA:
+ nId = SID_STYLE_FAMILY2; break;
+
+ case SFX_STYLE_FAMILY_FRAME:
+ nId = SID_STYLE_FAMILY3; break;
+
+ case SFX_STYLE_FAMILY_PAGE:
+ nId = SID_STYLE_FAMILY4; break;
+
+ case SFX_STYLE_FAMILY_ALL:
+ break;
+
+ default:
+ DBG_ERROR( "StyleSheetFamily wurde geaendert?" );
+ }
+
+ rBindings.EnterRegistrations();
+ pFamilyController =
+ new SvxSearchController( nId, rBindings, *this );
+ rBindings.LeaveRegistrations();
+ aSearchTmplLB.Clear();
+ aReplaceTmplLB.Clear();
+
+ aSearchTmplLB.Show();
+ aReplaceTmplLB.Show();
+ aSearchLB.Hide();
+ aReplaceLB.Hide();
+
+ if ( !pImpl->bMultiLineEdit )
+ {
+ aSearchAttrText.SetText( sDesc );
+ aReplaceAttrText.SetText( sDesc );
+ }
+ else
+ {
+ pImpl->aSearchFormats.SetText( sDesc );
+ pImpl->aReplaceFormats.SetText( sDesc );
+ }
+ }
+ aFormatBtn.Disable();
+ aNoFormatBtn.Disable();
+ aAttributeBtn.Disable();
+ aSimilarityBox.Disable();
+ aSimilarityBtn.Disable();
+ }
+ else
+ {
+ // Vorlagen-Controller disablen
+ rBindings.EnterRegistrations();
+ DELETEZ( pFamilyController );
+ rBindings.LeaveRegistrations();
+
+ aSearchLB.Show();
+ aReplaceLB.Show();
+ aSearchTmplLB.Hide();
+ aReplaceTmplLB.Hide();
+
+ if ( !pImpl->bMultiLineEdit )
+ {
+ aSearchAttrText.SetText( BuildAttrText_Impl( sDesc, TRUE ) );
+ aReplaceAttrText.SetText( BuildAttrText_Impl( sDesc, FALSE ) );
+ }
+ else
+ {
+ pImpl->aSearchFormats.SetText( BuildAttrText_Impl( sDesc, TRUE ) );
+ pImpl->aReplaceFormats.SetText( BuildAttrText_Impl( sDesc, FALSE ) );
+ }
+
+ EnableControl_Impl( &aFormatBtn );
+ EnableControl_Impl( &aAttributeBtn );
+ EnableControl_Impl( &aSimilarityBox );
+
+ FocusHdl_Impl( bSearch ? &aSearchLB : &aReplaceLB );
+ }
+ bSet = TRUE;
+ pImpl->bSaveToModule = FALSE;
+ FlagHdl_Impl( &aLayoutBtn );
+ pImpl->bSaveToModule = TRUE;
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+void SvxSearchDialog::Remember_Impl( const String &rStr,BOOL _bSearch )
+{
+ if ( !rStr.Len() )
+ return;
+
+ SvStringsDtor* pArr = _bSearch ? &aSearchStrings : &aReplaceStrings;
+ ComboBox* pListBox = _bSearch ? &aSearchLB : &aReplaceLB;
+
+ // identische Strings ignorieren
+ for ( USHORT i = 0; i < pArr->Count(); ++i )
+ {
+ if ( COMPARE_EQUAL == (*pArr)[i]->CompareTo( rStr ) )
+ return;
+ }
+
+ // bei maximaler Belegung "altesten Eintrag l"oschen (ListBox und Array)
+ String* pInsStr;
+
+ if ( pArr->Count() >= REMEMBER_SIZE )
+ {
+ pInsStr = (*pArr)[REMEMBER_SIZE - 1];
+ pListBox->RemoveEntry( USHORT(REMEMBER_SIZE - 1) );
+ pArr->Remove( REMEMBER_SIZE - 1 );
+ *pInsStr = rStr;
+ }
+ else
+ pInsStr = new String( rStr );
+
+ pArr->Insert( pInsStr, 0 );
+ pListBox->InsertEntry( *pInsStr, 0 );
+}
+
+// -----------------------------------------------------------------------
+
+void SvxSearchDialog::TemplatesChanged_Impl( SfxStyleSheetBasePool& rPool )
+{
+// SetUpdateMode( FALSE );
+ String aOldSrch( aSearchTmplLB .GetSelectEntry() );
+ String aOldRepl( aReplaceTmplLB.GetSelectEntry() );
+ aSearchTmplLB .Clear();
+ aReplaceTmplLB.Clear();
+ rPool.SetSearchMask( pSearchItem->GetFamily(), SFXSTYLEBIT_ALL );
+ aSearchTmplLB.SetUpdateMode( FALSE );
+ aReplaceTmplLB.SetUpdateMode( FALSE );
+ SfxStyleSheetBase* pBase = rPool.First();
+
+ while ( pBase )
+ {
+ if ( pBase->IsUsed() )
+ aSearchTmplLB.InsertEntry( pBase->GetName() );
+ aReplaceTmplLB.InsertEntry( pBase->GetName() );
+ pBase = rPool.Next();
+ }
+ aSearchTmplLB.SetUpdateMode( TRUE );
+ aReplaceTmplLB.SetUpdateMode( TRUE );
+ aSearchTmplLB.SelectEntryPos(0);
+
+ if ( aOldSrch.Len() )
+ aSearchTmplLB .SelectEntry( aOldSrch );
+ aReplaceTmplLB.SelectEntryPos(0);
+
+ if ( aOldRepl.Len() )
+ aReplaceTmplLB.SelectEntry( aOldRepl );
+
+ if ( aSearchTmplLB.GetEntryCount() )
+ {
+ EnableControl_Impl( &aSearchBtn );
+ EnableControl_Impl( &aSearchAllBtn );
+ EnableControl_Impl( &aReplaceBtn );
+ EnableControl_Impl( &aReplaceAllBtn );
+ }
+// FlagHdl_Impl(0);
+// SetUpdateMode( TRUE );
+}
+
+// -----------------------------------------------------------------------
+
+void SvxSearchDialog::EnableControls_Impl( const USHORT nFlags )
+{
+ if ( nFlags == nOptions )
+ return;
+ else
+ nOptions = nFlags;
+
+ if ( !nOptions )
+ {
+ if ( IsVisible() )
+ {
+ Hide();
+ return;
+ }
+ }
+ else if ( !IsVisible() )
+ Show();
+ FASTBOOL bNoSearch = TRUE;
+
+ sal_Bool bEnableSearch = ( SEARCH_OPTIONS_SEARCH & nOptions ) != 0;
+ aSearchBtn.Enable(bEnableSearch);
+
+ if( bEnableSearch )
+ bNoSearch = FALSE;
+
+
+ if ( ( SEARCH_OPTIONS_SEARCH_ALL & nOptions ) != 0 )
+ {
+ aSearchAllBtn.Enable();
+ bNoSearch = FALSE;
+ }
+ else
+ aSearchAllBtn.Disable();
+ if ( ( SEARCH_OPTIONS_REPLACE & nOptions ) != 0 )
+ {
+ aReplaceBtn.Enable();
+ aReplaceText.Enable();
+ aReplaceLB.Enable();
+ aReplaceTmplLB.Enable();
+ bNoSearch = FALSE;
+ }
+ else
+ {
+ aReplaceBtn.Disable();
+ aReplaceText.Disable();
+ aReplaceLB.Disable();
+ aReplaceTmplLB.Disable();
+ }
+ if ( ( SEARCH_OPTIONS_REPLACE_ALL & nOptions ) != 0 )
+ {
+ aReplaceAllBtn.Enable();
+ bNoSearch = FALSE;
+ }
+ else
+ aReplaceAllBtn.Disable();
+ aSearchComponentFL.Enable(!bNoSearch);
+ aSearchComponent1PB.Enable(!bNoSearch);
+ aSearchComponent2PB.Enable(!bNoSearch);
+ aSearchBtn.Enable( !bNoSearch );
+ aSearchText.Enable( !bNoSearch );
+ aSearchLB.Enable( !bNoSearch );
+
+ if ( ( SEARCH_OPTIONS_WHOLE_WORDS & nOptions ) != 0 )
+ aWordBtn.Enable();
+ else
+ aWordBtn.Disable();
+ if ( ( SEARCH_OPTIONS_BACKWARDS & nOptions ) != 0 )
+ aBackwardsBtn.Enable();
+ else
+ aBackwardsBtn.Disable();
+ //!if ( ( SEARCH_OPTIONS_NOTES & nOptions ) != 0 )
+ aNotesBtn.Enable();
+ //!else
+ //! aNotesBtn.Disable();
+ if ( ( SEARCH_OPTIONS_REG_EXP & nOptions ) != 0 )
+ aRegExpBtn.Enable();
+ else
+ aRegExpBtn.Disable();
+ if ( ( SEARCH_OPTIONS_EXACT & nOptions ) != 0 )
+ aMatchCaseCB.Enable();
+ else
+ aMatchCaseCB.Disable();
+ if ( ( SEARCH_OPTIONS_SELECTION & nOptions ) != 0 )
+ aSelectionBtn.Enable();
+ else
+ aSelectionBtn.Disable();
+ if ( ( SEARCH_OPTIONS_FAMILIES & nOptions ) != 0 )
+ aLayoutBtn.Enable();
+ else
+ aLayoutBtn.Disable();
+ if ( ( SEARCH_OPTIONS_FORMAT & nOptions ) != 0 )
+ {
+ aAttributeBtn.Enable();
+ aFormatBtn.Enable();
+ aNoFormatBtn.Enable();
+ }
+ else
+ {
+ aAttributeBtn.Disable();
+ aFormatBtn.Disable();
+ aNoFormatBtn.Disable();
+ }
+/*
+ if ( ( SEARCH_OPTIONS_MORE & nOptions ) != 0 &&
+ pSearchItem && pSearchItem->GetAppFlag() == SVX_SEARCHAPP_CALC )
+ pMoreBtn->Enable();
+ else
+ {
+ pMoreBtn->SetState( FALSE );
+ pMoreBtn->Disable();
+ }
+*/
+ if ( ( SEARCH_OPTIONS_SIMILARITY & nOptions ) != 0 )
+ {
+ aSimilarityBox.Enable();
+ aSimilarityBtn.Enable();
+ }
+ else
+ {
+ aSimilarityBox.Disable();
+ aSimilarityBtn.Disable();
+ }
+
+ if ( pSearchItem )
+ Init_Impl( pSearchItem->GetPattern() &&
+ ( !pSearchList || !pSearchList->Count() ) );
+}
+
+// -----------------------------------------------------------------------
+
+void SvxSearchDialog::EnableControl_Impl( Control* pCtrl )
+{
+ if ( &aSearchBtn == pCtrl && ( SEARCH_OPTIONS_SEARCH & nOptions ) != 0 )
+ {
+ aSearchComponentFL.Enable();
+ aSearchComponent1PB.Enable();
+ aSearchComponent2PB.Enable();
+ aSearchBtn.Enable();
+ return;
+ }
+ if ( &aSearchAllBtn == pCtrl &&
+ ( SEARCH_OPTIONS_SEARCH_ALL & nOptions ) != 0 )
+ {
+ aSearchAllBtn.Enable( ( bWriter || !aAllSheetsCB.IsChecked() ) );
+ return;
+ }
+ if ( &aReplaceBtn == pCtrl && ( SEARCH_OPTIONS_REPLACE & nOptions ) != 0 )
+ {
+ aReplaceBtn.Enable();
+ return;
+ }
+ if ( &aReplaceAllBtn == pCtrl &&
+ ( SEARCH_OPTIONS_REPLACE_ALL & nOptions ) != 0 )
+ {
+ aReplaceAllBtn.Enable();
+ return;
+ }
+ if ( &aWordBtn == pCtrl && ( SEARCH_OPTIONS_WHOLE_WORDS & nOptions ) != 0 )
+ {
+ aWordBtn.Enable();
+ return;
+ }
+ if ( &aBackwardsBtn == pCtrl && ( SEARCH_OPTIONS_BACKWARDS & nOptions ) != 0 )
+ {
+ aBackwardsBtn.Enable();
+ return;
+ }
+ if ( &aNotesBtn == pCtrl /*! && ( SEARCH_OPTIONS_NOTES & nOptions ) != 0 */ )
+ {
+ aNotesBtn.Enable();
+ return;
+ }
+ if ( &aRegExpBtn == pCtrl && ( SEARCH_OPTIONS_REG_EXP & nOptions ) != 0
+ && !aSimilarityBox.IsChecked())
+ {
+ aRegExpBtn.Enable();
+ return;
+ }
+ if ( &aMatchCaseCB == pCtrl && ( SEARCH_OPTIONS_EXACT & nOptions ) != 0 )
+ {
+ if (!aJapOptionsCB.IsChecked())
+ aMatchCaseCB.Enable();
+ return;
+ }
+ if ( &aSelectionBtn == pCtrl && ( SEARCH_OPTIONS_SELECTION & nOptions ) != 0 )
+ {
+ aSelectionBtn.Enable();
+ return;
+ }
+ if ( &aLayoutBtn == pCtrl && ( SEARCH_OPTIONS_FAMILIES & nOptions ) != 0 )
+ {
+ aLayoutBtn.Enable();
+ return;
+ }
+ if ( &aAttributeBtn == pCtrl
+ && ( SEARCH_OPTIONS_FORMAT & nOptions ) != 0
+ && pSearchList )
+ {
+ aAttributeBtn.Enable( pImpl->bFocusOnSearch );
+ }
+ if ( &aFormatBtn == pCtrl && ( SEARCH_OPTIONS_FORMAT & nOptions ) != 0 )
+ {
+ aFormatBtn.Enable();
+ return;
+ }
+ if ( &aNoFormatBtn == pCtrl && ( SEARCH_OPTIONS_FORMAT & nOptions ) != 0 )
+ {
+ aNoFormatBtn.Enable();
+ return;
+ }
+ if ( &aSimilarityBox == pCtrl &&
+ ( SEARCH_OPTIONS_SIMILARITY & nOptions ) != 0 )
+ {
+ aSimilarityBox.Enable();
+
+ if ( aSimilarityBox.IsChecked() )
+ aSimilarityBtn.Enable();
+ }
+}
+
+// -----------------------------------------------------------------------
+
+void SvxSearchDialog::SetItem_Impl( const SvxSearchItem* pItem )
+{
+ if ( pItem )
+ {
+ delete pSearchItem;
+ pSearchItem = (SvxSearchItem*)pItem->Clone();
+ Init_Impl( pSearchItem->GetPattern() &&
+ ( !pSearchList || !pSearchList->Count() ) );
+ }
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( SvxSearchDialog, FocusHdl_Impl, Control *, pCtrl )
+{
+ xub_StrLen nTxtLen;
+
+ if ( !pImpl->bMultiLineEdit )
+ nTxtLen = aSearchAttrText.GetText().Len();
+ else
+ nTxtLen = pImpl->aSearchFormats.GetText().Len();
+
+ if ( pCtrl == &aSearchLB || pCtrl == &pImpl->aSearchFormats )
+ {
+ if ( pCtrl->HasChildPathFocus() )
+ pImpl->bFocusOnSearch = TRUE;
+ pCtrl = &aSearchLB;
+ bSearch = TRUE;
+
+ if( nTxtLen )
+ EnableControl_Impl( &aNoFormatBtn );
+ else
+ aNoFormatBtn.Disable();
+ EnableControl_Impl( &aAttributeBtn );
+ }
+ else
+ {
+ pImpl->bFocusOnSearch = FALSE;
+ pCtrl = &aReplaceLB;
+ bSearch = FALSE;
+
+ if ( ( !pImpl->bMultiLineEdit && aReplaceAttrText.GetText().Len() ) ||
+ ( pImpl->bMultiLineEdit && pImpl->aReplaceFormats.GetText().Len() ) )
+ EnableControl_Impl( &aNoFormatBtn );
+ else
+ aNoFormatBtn.Disable();
+ aAttributeBtn.Disable();
+ }
+ bSet = TRUE;
+
+ aSearchLB.SetSelection( Selection( SELECTION_MIN, SELECTION_MAX ) );
+
+ ModifyHdl_Impl( (ComboBox*)pCtrl );
+
+ aLayoutBtn.SetText( bFormat && nTxtLen ? aLayoutStr : aStylesStr );
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( SvxSearchDialog, LoseFocusHdl_Impl, Control *, EMPTYARG )
+{
+ SaveToModule_Impl();
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( SvxSearchDialog, FormatHdl_Impl, Button *, EMPTYARG )
+{
+ SfxObjectShell* pSh = SfxObjectShell::Current();
+
+ DBG_ASSERT( pSh, "no DocShell" );
+
+ if ( !pSh || !pImpl->pRanges )
+ return 0;
+
+ sal_sSize nCnt = 0;
+ const USHORT* pPtr = pImpl->pRanges;
+ const USHORT* pTmp = pPtr;
+
+ while( *pTmp )
+ pTmp++;
+ nCnt = pTmp - pPtr + 7;
+ USHORT* pWhRanges = new USHORT[nCnt];
+ USHORT nPos = 0;
+
+ while( *pPtr )
+ {
+ pWhRanges[nPos++] = *pPtr++;
+ }
+
+ pWhRanges[nPos++] = SID_ATTR_PARA_MODEL;
+ pWhRanges[nPos++] = SID_ATTR_PARA_MODEL;
+
+ USHORT nBrushWhich = pSh->GetPool().GetWhich(SID_ATTR_BRUSH);
+ pWhRanges[nPos++] = nBrushWhich;
+ pWhRanges[nPos++] = nBrushWhich;
+ pWhRanges[nPos++] = SID_PARA_BACKGRND_DESTINATION;
+ pWhRanges[nPos++] = SID_PARA_BACKGRND_DESTINATION;
+ pWhRanges[nPos] = 0;
+ SfxItemPool& rPool = pSh->GetPool();
+ SfxItemSet aSet( rPool, pWhRanges );
+ String aTxt;
+
+ aSet.InvalidateAllItems();
+ aSet.Put(SvxBrushItem(nBrushWhich));
+ aSet.Put(SfxUInt16Item(SID_PARA_BACKGRND_DESTINATION, PARA_DEST_CHAR));
+
+ if ( bSearch )
+ {
+ aTxt = SVX_RESSTR( RID_SVXSTR_SEARCH );
+ pSearchList->Get( aSet );
+ }
+ else
+ {
+ aTxt = SVX_RESSTR( RID_SVXSTR_REPLACE );
+ pReplaceList->Get( aSet );
+ }
+ aSet.DisableItem(SID_ATTR_PARA_MODEL);
+ aSet.DisableItem(rPool.GetWhich(SID_ATTR_PARA_PAGEBREAK));
+ aSet.DisableItem(rPool.GetWhich(SID_ATTR_PARA_KEEP));
+
+ //CHINA001 SvxSearchFormatDialog* pDlg = new SvxSearchFormatDialog( this, aSet );
+ SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
+ if(pFact)
+ {
+ SfxAbstractTabDialog* pDlg = pFact->CreateTabItemDialog( LAYOUT_THIS_WINDOW (this), aSet, RID_SVXDLG_SEARCHFORMAT );
+ DBG_ASSERT(pDlg, "Dialogdiet fail!");//CHINA001
+ aTxt.Insert( pDlg->GetText(), 0 );
+ pDlg->SetText( aTxt );
+
+ if ( pDlg->Execute() == RET_OK )
+ {
+ DBG_ASSERT( pDlg->GetOutputItemSet(), "invalid Output-Set" );
+ SfxItemSet aOutSet( *pDlg->GetOutputItemSet() );
+
+ SearchAttrItemList* pList = bSearch ? pSearchList : pReplaceList;
+
+ SearchAttrItem* pAItem;
+ const SfxPoolItem* pItem;
+ for( USHORT n = 0; n < pList->Count(); ++n )
+ if( !IsInvalidItem( (pAItem = &pList->GetObject(n))->pItem ) &&
+ SFX_ITEM_SET == aOutSet.GetItemState(
+ pAItem->pItem->Which(), FALSE, &pItem ) )
+ {
+ delete pAItem->pItem;
+ pAItem->pItem = pItem->Clone();
+ aOutSet.ClearItem( pAItem->pItem->Which() );
+ }
+
+ if( aOutSet.Count() )
+ pList->Put( aOutSet );
+
+ PaintAttrText_Impl(); // AttributText in GroupBox setzen
+ }
+ delete pDlg;
+ }
+ delete[] pWhRanges;
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( SvxSearchDialog, NoFormatHdl_Impl, Button *, EMPTYARG )
+{
+ aLayoutBtn.SetText( aStylesStr );
+ bFormat = FALSE;
+ aLayoutBtn.Check( FALSE );
+
+ if ( bSearch )
+ {
+ if ( !pImpl->bMultiLineEdit )
+ aSearchAttrText.SetText( String() );
+ else
+ pImpl->aSearchFormats.SetText( String() );
+ pSearchList->Clear();
+ }
+ else
+ {
+ if ( !pImpl->bMultiLineEdit )
+ aReplaceAttrText.SetText( String() );
+ else
+ pImpl->aReplaceFormats.SetText( String() );
+ pReplaceList->Clear();
+ }
+ pImpl->bSaveToModule = FALSE;
+ TemplateHdl_Impl( &aLayoutBtn );
+ pImpl->bSaveToModule = TRUE;
+ aNoFormatBtn.Disable();
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( SvxSearchDialog, AttributeHdl_Impl, Button *, EMPTYARG )
+{
+ if ( !pSearchList || !pImpl->pRanges )
+ return 0;
+
+ //CHINA001 SvxSearchAttributeDialog* pDlg = new SvxSearchAttributeDialog( this, *pSearchList, pImpl->pRanges );
+ SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
+ if(pFact)
+ {
+ VclAbstractDialog* pDlg = pFact->CreateSvxSearchAttributeDialog( LAYOUT_THIS_WINDOW (this), *pSearchList, pImpl->pRanges );
+ DBG_ASSERT(pDlg, "Dialogdiet fail!");//CHINA001
+ pDlg->Execute();
+ delete pDlg;
+ }
+ PaintAttrText_Impl();
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( SvxSearchDialog, TimeoutHdl_Impl, Timer *, pTimer )
+{
+ SfxViewShell* pViewShell = SfxViewShell::Current();
+
+ if ( pViewShell )
+ {
+ if ( pViewShell->HasSelection( aSearchLB.IsVisible() ) )
+ EnableControl_Impl( &aSelectionBtn );
+ else
+ {
+ aSelectionBtn.Check( FALSE );
+ aSelectionBtn.Disable();
+ }
+ }
+
+ pTimer->Start();
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+void SvxSearchDialog::GetSearchItems( SfxItemSet& rSet )
+{
+ xub_StrLen nLen;
+
+ if ( !pImpl->bMultiLineEdit )
+ nLen = aSearchAttrText.GetText().Len();
+ else
+ nLen = pImpl->aSearchFormats.GetText().Len();
+
+ if ( nLen && pSearchList )
+ pSearchList->Get( rSet );
+}
+
+// -----------------------------------------------------------------------
+
+void SvxSearchDialog::GetReplaceItems( SfxItemSet& rSet )
+{
+ xub_StrLen nLen;
+
+ if ( !pImpl->bMultiLineEdit )
+ nLen = aReplaceAttrText.GetText().Len();
+ else
+ nLen = pImpl->aReplaceFormats.GetText().Len();
+
+ if ( nLen && pReplaceList )
+ pReplaceList->Get( rSet );
+}
+
+// -----------------------------------------------------------------------
+
+String& SvxSearchDialog::BuildAttrText_Impl( String& rStr,
+ BOOL bSrchFlag ) const
+{
+ if ( rStr.Len() )
+ rStr.Erase();
+
+ SfxObjectShell* pSh = SfxObjectShell::Current();
+ DBG_ASSERT( pSh, "no DocShell" );
+
+ if ( !pSh )
+ return rStr;
+
+ SfxItemPool& rPool = pSh->GetPool();
+ SearchAttrItemList* pList = bSrchFlag ? pSearchList : pReplaceList;
+
+ if ( !pList )
+ return rStr;
+
+ // Metrik abfragen
+ SfxMapUnit eMapUnit = SFX_MAPUNIT_CM;
+ FieldUnit eFieldUnit = pSh->GetModule()->GetFieldUnit();
+ switch ( eFieldUnit )
+ {
+ case FUNIT_MM: eMapUnit = SFX_MAPUNIT_MM; break;
+ case FUNIT_CM:
+ case FUNIT_M:
+ case FUNIT_KM: eMapUnit = SFX_MAPUNIT_CM; break;
+ case FUNIT_TWIP: eMapUnit = SFX_MAPUNIT_TWIP; break;
+ case FUNIT_POINT:
+ case FUNIT_PICA: eMapUnit = SFX_MAPUNIT_POINT; break;
+ case FUNIT_INCH:
+ case FUNIT_FOOT:
+ case FUNIT_MILE: eMapUnit = SFX_MAPUNIT_INCH; break;
+ case FUNIT_100TH_MM: eMapUnit = SFX_MAPUNIT_100TH_MM; break;
+ default: ;//prevent warning
+ }
+
+ ResStringArray aAttrNames( SVX_RES( RID_ATTR_NAMES ) );
+
+ for ( USHORT i = 0; i < pList->Count(); ++i )
+ {
+ const SearchAttrItem& rItem = pList->GetObject(i);
+
+ if ( rStr.Len() )
+ rStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ", " ) );
+
+ if ( !IsInvalidItem( rItem.pItem ) )
+ {
+ String aStr;
+ rPool.GetPresentation( *rItem.pItem,
+ SFX_ITEM_PRESENTATION_COMPLETE,
+ eMapUnit, aStr );
+ rStr += aStr;
+ }
+ else if ( rItem.nSlot == SID_ATTR_BRUSH_CHAR )
+ {
+ //Sonderbehandlung fuer Zeichenhintergrund
+ rStr += SVX_RESSTR( RID_SVXITEMS_BRUSH_CHAR );
+ }
+ else
+ {
+ sal_uInt32 nId = aAttrNames.FindIndex( rItem.nSlot );
+ if ( RESARRAY_INDEX_NOTFOUND != nId )
+ rStr += aAttrNames.GetString( nId );
+ }
+ }
+ return rStr;
+}
+
+// -----------------------------------------------------------------------
+
+void SvxSearchDialog::PaintAttrText_Impl()
+{
+ String aDesc;
+ BuildAttrText_Impl( aDesc, bSearch );
+
+ if ( !bFormat && aDesc.Len() )
+ bFormat = TRUE;
+
+ if ( bSearch )
+ {
+ if ( !pImpl->bMultiLineEdit )
+ aSearchAttrText.SetText( aDesc );
+ else
+ pImpl->aSearchFormats.SetText( aDesc );
+ FocusHdl_Impl( &aSearchLB );
+ }
+ else
+ {
+ if ( !pImpl->bMultiLineEdit )
+ aReplaceAttrText.SetText( aDesc );
+ else
+ pImpl->aReplaceFormats.SetText( aDesc );
+ FocusHdl_Impl( &aReplaceLB );
+ }
+}
+
+// -----------------------------------------------------------------------
+
+void SvxSearchDialog::SetModifyFlag_Impl( const Control* pCtrl )
+{
+ if ( &aSearchLB == (ComboBox*)pCtrl )
+ nModifyFlag |= MODIFY_SEARCH;
+ else if ( &aReplaceLB == (ComboBox*)pCtrl )
+ nModifyFlag |= MODIFY_REPLACE;
+ else if ( &aWordBtn == (CheckBox*)pCtrl )
+ nModifyFlag |= MODIFY_WORD;
+ else if ( &aMatchCaseCB == (CheckBox*)pCtrl )
+ nModifyFlag |= MODIFY_EXACT;
+ else if ( &aBackwardsBtn == (CheckBox*)pCtrl )
+ nModifyFlag |= MODIFY_BACKWARDS;
+ else if ( &aNotesBtn == (CheckBox*)pCtrl )
+ nModifyFlag |= MODIFY_NOTES;
+ else if ( &aSelectionBtn == (CheckBox*)pCtrl )
+ nModifyFlag |= MODIFY_SELECTION;
+ else if ( &aRegExpBtn == (CheckBox*)pCtrl )
+ nModifyFlag |= MODIFY_REGEXP;
+ else if ( &aLayoutBtn == (CheckBox*)pCtrl )
+ nModifyFlag |= MODIFY_LAYOUT;
+ else if ( &aSimilarityBox == (CheckBox*)pCtrl )
+ nModifyFlag |= MODIFY_SIMILARITY;
+ else if ( &aCalcSearchInLB == (ListBox*)pCtrl )
+ {
+ nModifyFlag |= MODIFY_FORMULAS;
+ nModifyFlag |= MODIFY_VALUES;
+ nModifyFlag |= MODIFY_CALC_NOTES;
+ }
+ else if ( &aRowsBtn == (RadioButton*)pCtrl )
+ nModifyFlag |= MODIFY_ROWS;
+ else if ( &aColumnsBtn == (RadioButton*)pCtrl )
+ nModifyFlag |= MODIFY_COLUMNS;
+ else if ( &aAllSheetsCB == (CheckBox*)pCtrl )
+ nModifyFlag |= MODIFY_ALLTABLES;
+}
+
+// -----------------------------------------------------------------------
+
+void SvxSearchDialog::SaveToModule_Impl()
+{
+ if ( !pSearchItem )
+ return;
+
+ if ( aLayoutBtn.IsChecked() )
+ {
+ pSearchItem->SetSearchString ( aSearchTmplLB.GetSelectEntry() );
+ pSearchItem->SetReplaceString( aReplaceTmplLB.GetSelectEntry() );
+ }
+ else
+ {
+ pSearchItem->SetSearchString ( aSearchLB.GetText() );
+ pSearchItem->SetReplaceString( aReplaceLB.GetText() );
+ Remember_Impl( aSearchLB.GetText(), TRUE );
+ }
+
+ pSearchItem->SetRegExp( FALSE );
+ pSearchItem->SetLevenshtein( FALSE );
+ if (GetCheckBoxValue( aRegExpBtn ))
+ pSearchItem->SetRegExp( TRUE );
+ else if (GetCheckBoxValue( aSimilarityBox ))
+ pSearchItem->SetLevenshtein( TRUE );
+
+ pSearchItem->SetWordOnly( GetCheckBoxValue( aWordBtn ) );
+ pSearchItem->SetBackward( GetCheckBoxValue( aBackwardsBtn ) );
+ pSearchItem->SetNotes( GetCheckBoxValue( aNotesBtn ) );
+ pSearchItem->SetPattern( GetCheckBoxValue( aLayoutBtn ) );
+ pSearchItem->SetSelection( GetCheckBoxValue( aSelectionBtn ) );
+
+ pSearchItem->SetUseAsianOptions( GetCheckBoxValue( aJapOptionsCB ) );
+ INT32 nFlags = GetTransliterationFlags();
+ if( !pSearchItem->IsUseAsianOptions())
+ nFlags &= (TransliterationModules_IGNORE_CASE |
+ TransliterationModules_IGNORE_WIDTH );
+ pSearchItem->SetTransliterationFlags( nFlags );
+
+ if ( !bWriter )
+ {
+ if ( aCalcSearchInLB.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND )
+ pSearchItem->SetCellType( aCalcSearchInLB.GetSelectEntryPos() );
+
+ pSearchItem->SetRowDirection( aRowsBtn.IsChecked() );
+ pSearchItem->SetAllTables( aAllSheetsCB.IsChecked() );
+ }
+
+ pSearchItem->SetCommand( SVX_SEARCHCMD_FIND );
+ nModifyFlag = 0;
+ const SfxPoolItem* ppArgs[] = { pSearchItem, 0 };
+ rBindings.GetDispatcher()->Execute( SID_SEARCH_ITEM, SFX_CALLMODE_SLOT, ppArgs );
+}
+
+// class SvxSearchDialogWrapper ------------------------------------------
+
+SFX_IMPL_CHILDWINDOW(SvxSearchDialogWrapper, SID_SEARCH_DLG);
+
+// -----------------------------------------------------------------------
+
+SvxSearchDialogWrapper::SvxSearchDialogWrapper( Window* _pParent, USHORT nId,
+ SfxBindings* pBindings,
+ SfxChildWinInfo* pInfo )
+ : SfxChildWindow( _pParent, nId )
+ , dialog (new SvxSearchDialog (_pParent, this, *pBindings))
+{
+ pWindow = LAYOUT_THIS_WINDOW (dialog);
+ dialog->Initialize( pInfo );
+
+ pBindings->Update( SID_SEARCH_ITEM );
+ pBindings->Update( SID_SEARCH_OPTIONS );
+ pBindings->Update( SID_SEARCH_SEARCHSET );
+ pBindings->Update( SID_SEARCH_REPLACESET );
+ eChildAlignment = SFX_ALIGN_NOALIGNMENT;
+ dialog->bConstruct = FALSE;
+}
+
+SvxSearchDialogWrapper::~SvxSearchDialogWrapper ()
+{
+#if ENABLE_LAYOUT
+ delete dialog;
+ pWindow = 0;
+#endif /* ENABLE_LAYOUT */
+}
+
+SvxSearchDialog *SvxSearchDialogWrapper::getDialog ()
+{
+ return dialog;
+}
+
+// -----------------------------------------------------------------------
+
+SfxChildWinInfo SvxSearchDialogWrapper::GetInfo() const
+{
+ SfxChildWinInfo aInfo = SfxChildWindow::GetInfo();
+ aInfo.bVisible = sal_False;
+ return aInfo;
+}
+