1*b3f79822SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*b3f79822SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*b3f79822SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*b3f79822SAndrew Rist * distributed with this work for additional information 6*b3f79822SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*b3f79822SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*b3f79822SAndrew Rist * "License"); you may not use this file except in compliance 9*b3f79822SAndrew Rist * with the License. You may obtain a copy of the License at 10*b3f79822SAndrew Rist * 11*b3f79822SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*b3f79822SAndrew Rist * 13*b3f79822SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*b3f79822SAndrew Rist * software distributed under the License is distributed on an 15*b3f79822SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b3f79822SAndrew Rist * KIND, either express or implied. See the License for the 17*b3f79822SAndrew Rist * specific language governing permissions and limitations 18*b3f79822SAndrew Rist * under the License. 19*b3f79822SAndrew Rist * 20*b3f79822SAndrew Rist *************************************************************/ 21*b3f79822SAndrew Rist 22*b3f79822SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_sc.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir // System - Includes --------------------------------------------------------- 28cdf0e10cSrcweir 29cdf0e10cSrcweir 30cdf0e10cSrcweir 31cdf0e10cSrcweir // INCLUDE ------------------------------------------------------------------- 32cdf0e10cSrcweir 33cdf0e10cSrcweir #include <vcl/morebtn.hxx> 34cdf0e10cSrcweir #include <svtools/stdctrl.hxx> 35cdf0e10cSrcweir 36cdf0e10cSrcweir #include "anyrefdg.hxx" 37cdf0e10cSrcweir #include "rangeutl.hxx" 38cdf0e10cSrcweir #include "dbcolect.hxx" 39cdf0e10cSrcweir #include "viewdata.hxx" 40cdf0e10cSrcweir #include "document.hxx" 41cdf0e10cSrcweir #include "queryparam.hxx" 42cdf0e10cSrcweir 43cdf0e10cSrcweir #define _FOPTMGR_CXX 44cdf0e10cSrcweir #include "foptmgr.hxx" 45cdf0e10cSrcweir #undef _FOPTMGR_CXX 46cdf0e10cSrcweir 47cdf0e10cSrcweir //---------------------------------------------------------------------------- 48cdf0e10cSrcweir 49cdf0e10cSrcweir ScFilterOptionsMgr::ScFilterOptionsMgr( 50cdf0e10cSrcweir Dialog* ptrDlg, 51cdf0e10cSrcweir ScViewData* ptrViewData, 52cdf0e10cSrcweir const ScQueryParam& refQueryData, 53cdf0e10cSrcweir MoreButton& refBtnMore, 54cdf0e10cSrcweir CheckBox& refBtnCase, 55cdf0e10cSrcweir CheckBox& refBtnRegExp, 56cdf0e10cSrcweir CheckBox& refBtnHeader, 57cdf0e10cSrcweir CheckBox& refBtnUnique, 58cdf0e10cSrcweir CheckBox& refBtnCopyResult, 59cdf0e10cSrcweir CheckBox& refBtnDestPers, 60cdf0e10cSrcweir ListBox& refLbCopyArea, 61cdf0e10cSrcweir Edit& refEdCopyArea, 62cdf0e10cSrcweir formula::RefButton& refRbCopyArea, 63cdf0e10cSrcweir FixedText& refFtDbAreaLabel, 64cdf0e10cSrcweir FixedInfo& refFtDbArea, 65cdf0e10cSrcweir FixedLine& refFlOptions, 66cdf0e10cSrcweir const String& refStrNoName, 67cdf0e10cSrcweir const String& refStrUndefined ) 68cdf0e10cSrcweir 69cdf0e10cSrcweir : pDlg ( ptrDlg ), 70cdf0e10cSrcweir pViewData ( ptrViewData ), 71cdf0e10cSrcweir pDoc ( ptrViewData ? ptrViewData->GetDocument() : NULL ), 72cdf0e10cSrcweir rBtnMore ( refBtnMore ), 73cdf0e10cSrcweir rBtnCase ( refBtnCase ), 74cdf0e10cSrcweir rBtnRegExp ( refBtnRegExp ), 75cdf0e10cSrcweir rBtnHeader ( refBtnHeader ), 76cdf0e10cSrcweir rBtnUnique ( refBtnUnique ), 77cdf0e10cSrcweir rBtnCopyResult ( refBtnCopyResult ), 78cdf0e10cSrcweir rBtnDestPers ( refBtnDestPers ), 79cdf0e10cSrcweir rLbCopyPos ( refLbCopyArea ), 80cdf0e10cSrcweir rEdCopyPos ( refEdCopyArea ), 81cdf0e10cSrcweir rRbCopyPos ( refRbCopyArea ), 82cdf0e10cSrcweir rFtDbAreaLabel ( refFtDbAreaLabel ), 83cdf0e10cSrcweir rFtDbArea ( refFtDbArea ), 84cdf0e10cSrcweir rFlOptions ( refFlOptions ), 85cdf0e10cSrcweir rStrNoName ( refStrNoName ), 86cdf0e10cSrcweir rStrUndefined ( refStrUndefined ), 87cdf0e10cSrcweir rQueryData ( refQueryData ) 88cdf0e10cSrcweir { 89cdf0e10cSrcweir Init(); 90cdf0e10cSrcweir } 91cdf0e10cSrcweir 92cdf0e10cSrcweir 93cdf0e10cSrcweir //---------------------------------------------------------------------------- 94cdf0e10cSrcweir 95cdf0e10cSrcweir ScFilterOptionsMgr::~ScFilterOptionsMgr() 96cdf0e10cSrcweir { 97cdf0e10cSrcweir sal_uInt16 nEntries = rLbCopyPos.GetEntryCount(); 98cdf0e10cSrcweir sal_uInt16 i; 99cdf0e10cSrcweir 100cdf0e10cSrcweir for ( i=2; i<nEntries; i++ ) 101cdf0e10cSrcweir delete (String*)rLbCopyPos.GetEntryData( i ); 102cdf0e10cSrcweir } 103cdf0e10cSrcweir 104cdf0e10cSrcweir 105cdf0e10cSrcweir //---------------------------------------------------------------------------- 106cdf0e10cSrcweir 107cdf0e10cSrcweir void ScFilterOptionsMgr::Init() 108cdf0e10cSrcweir { 109cdf0e10cSrcweir DBG_ASSERT( pViewData && pDoc, "Init failed :-/" ); 110cdf0e10cSrcweir 111cdf0e10cSrcweir rLbCopyPos.SetSelectHdl ( LINK( this, ScFilterOptionsMgr, LbPosSelHdl ) ); 112cdf0e10cSrcweir rEdCopyPos.SetModifyHdl ( LINK( this, ScFilterOptionsMgr, EdPosModifyHdl ) ); 113cdf0e10cSrcweir rBtnCopyResult.SetClickHdl( LINK( this, ScFilterOptionsMgr, BtnCopyResultHdl ) ); 114cdf0e10cSrcweir 115cdf0e10cSrcweir rBtnMore.AddWindow( &rBtnCase ); 116cdf0e10cSrcweir rBtnMore.AddWindow( &rBtnRegExp ); 117cdf0e10cSrcweir rBtnMore.AddWindow( &rBtnHeader ); 118cdf0e10cSrcweir rBtnMore.AddWindow( &rBtnUnique ); 119cdf0e10cSrcweir rBtnMore.AddWindow( &rBtnCopyResult ); 120cdf0e10cSrcweir rBtnMore.AddWindow( &rBtnDestPers ); 121cdf0e10cSrcweir rBtnMore.AddWindow( &rLbCopyPos ); 122cdf0e10cSrcweir rBtnMore.AddWindow( &rEdCopyPos ); 123cdf0e10cSrcweir rBtnMore.AddWindow( &rRbCopyPos ); 124cdf0e10cSrcweir rBtnMore.AddWindow( &rFtDbAreaLabel ); 125cdf0e10cSrcweir rBtnMore.AddWindow( &rFtDbArea ); 126cdf0e10cSrcweir rBtnMore.AddWindow( &rFlOptions ); 127cdf0e10cSrcweir 128cdf0e10cSrcweir rBtnCase .Check( rQueryData.bCaseSens ); 129cdf0e10cSrcweir rBtnHeader .Check( rQueryData.bHasHeader ); 130cdf0e10cSrcweir rBtnRegExp .Check( rQueryData.bRegExp ); 131cdf0e10cSrcweir rBtnUnique .Check( !rQueryData.bDuplicate ); 132cdf0e10cSrcweir 133cdf0e10cSrcweir if ( pViewData && pDoc ) 134cdf0e10cSrcweir { 135cdf0e10cSrcweir String theAreaStr; 136cdf0e10cSrcweir ScRange theCurArea ( ScAddress( rQueryData.nCol1, 137cdf0e10cSrcweir rQueryData.nRow1, 138cdf0e10cSrcweir pViewData->GetTabNo() ), 139cdf0e10cSrcweir ScAddress( rQueryData.nCol2, 140cdf0e10cSrcweir rQueryData.nRow2, 141cdf0e10cSrcweir pViewData->GetTabNo() ) ); 142cdf0e10cSrcweir ScDBCollection* pDBColl = pDoc->GetDBCollection(); 143cdf0e10cSrcweir String theDbArea; 144cdf0e10cSrcweir String theDbName = rStrNoName; 145cdf0e10cSrcweir const formula::FormulaGrammar::AddressConvention eConv = pDoc->GetAddressConvention(); 146cdf0e10cSrcweir 147cdf0e10cSrcweir theCurArea.Format( theAreaStr, SCR_ABS_3D, pDoc, eConv ); 148cdf0e10cSrcweir 149cdf0e10cSrcweir // Zielbereichsliste fuellen 150cdf0e10cSrcweir 151cdf0e10cSrcweir rLbCopyPos.Clear(); 152cdf0e10cSrcweir rLbCopyPos.InsertEntry( rStrUndefined, 0 ); 153cdf0e10cSrcweir 154cdf0e10cSrcweir ScAreaNameIterator aIter( pDoc ); 155cdf0e10cSrcweir String aName; 156cdf0e10cSrcweir ScRange aRange; 157cdf0e10cSrcweir String aRefStr; 158cdf0e10cSrcweir while ( aIter.Next( aName, aRange ) ) 159cdf0e10cSrcweir { 160cdf0e10cSrcweir sal_uInt16 nInsert = rLbCopyPos.InsertEntry( aName ); 161cdf0e10cSrcweir 162cdf0e10cSrcweir aRange.aStart.Format( aRefStr, SCA_ABS_3D, pDoc, eConv ); 163cdf0e10cSrcweir rLbCopyPos.SetEntryData( nInsert, new String( aRefStr ) ); 164cdf0e10cSrcweir } 165cdf0e10cSrcweir 166cdf0e10cSrcweir rBtnDestPers.Check( sal_True ); // beim Aufruf immer an 167cdf0e10cSrcweir rLbCopyPos.SelectEntryPos( 0 ); 168cdf0e10cSrcweir rEdCopyPos.SetText( EMPTY_STRING ); 169cdf0e10cSrcweir 170cdf0e10cSrcweir /* 171cdf0e10cSrcweir * Ueberpruefen, ob es sich bei dem uebergebenen 172cdf0e10cSrcweir * Bereich um einen Datenbankbereich handelt: 173cdf0e10cSrcweir */ 174cdf0e10cSrcweir 175cdf0e10cSrcweir theDbArea = theAreaStr; 176cdf0e10cSrcweir 177cdf0e10cSrcweir if ( pDBColl ) 178cdf0e10cSrcweir { 179cdf0e10cSrcweir ScAddress& rStart = theCurArea.aStart; 180cdf0e10cSrcweir ScAddress& rEnd = theCurArea.aEnd; 181cdf0e10cSrcweir ScDBData* pDBData = pDBColl->GetDBAtArea( rStart.Tab(), 182cdf0e10cSrcweir rStart.Col(), rStart.Row(), 183cdf0e10cSrcweir rEnd.Col(), rEnd.Row() ); 184cdf0e10cSrcweir if ( pDBData ) 185cdf0e10cSrcweir { 186cdf0e10cSrcweir rBtnHeader.Check( pDBData->HasHeader() ); 187cdf0e10cSrcweir pDBData->GetName( theDbName ); 188cdf0e10cSrcweir 189cdf0e10cSrcweir if ( theDbName != rStrNoName ) 190cdf0e10cSrcweir { 191cdf0e10cSrcweir rBtnHeader.Disable(); 192cdf0e10cSrcweir } 193cdf0e10cSrcweir } 194cdf0e10cSrcweir } 195cdf0e10cSrcweir 196cdf0e10cSrcweir theDbArea.AppendAscii(RTL_CONSTASCII_STRINGPARAM(" (")); 197cdf0e10cSrcweir theDbArea += theDbName; 198cdf0e10cSrcweir theDbArea += ')'; 199cdf0e10cSrcweir rFtDbArea.SetText( theDbArea ); 200cdf0e10cSrcweir 201cdf0e10cSrcweir //------------------------------------------------------ 202cdf0e10cSrcweir // Kopierposition: 203cdf0e10cSrcweir 204cdf0e10cSrcweir if ( !rQueryData.bInplace ) 205cdf0e10cSrcweir { 206cdf0e10cSrcweir String aString; 207cdf0e10cSrcweir 208cdf0e10cSrcweir ScAddress( rQueryData.nDestCol, 209cdf0e10cSrcweir rQueryData.nDestRow, 210cdf0e10cSrcweir rQueryData.nDestTab 211cdf0e10cSrcweir ).Format( aString, SCA_ABS_3D, pDoc, eConv ); 212cdf0e10cSrcweir 213cdf0e10cSrcweir rBtnCopyResult.Check( sal_True ); 214cdf0e10cSrcweir rEdCopyPos.SetText( aString ); 215cdf0e10cSrcweir EdPosModifyHdl( &rEdCopyPos ); 216cdf0e10cSrcweir rLbCopyPos.Enable(); 217cdf0e10cSrcweir rEdCopyPos.Enable(); 218cdf0e10cSrcweir rRbCopyPos.Enable(); 219cdf0e10cSrcweir rBtnDestPers.Enable(); 220cdf0e10cSrcweir } 221cdf0e10cSrcweir else 222cdf0e10cSrcweir { 223cdf0e10cSrcweir rBtnCopyResult.Check( sal_False ); 224cdf0e10cSrcweir rEdCopyPos.SetText( EMPTY_STRING ); 225cdf0e10cSrcweir rLbCopyPos.Disable(); 226cdf0e10cSrcweir rEdCopyPos.Disable(); 227cdf0e10cSrcweir rRbCopyPos.Disable(); 228cdf0e10cSrcweir rBtnDestPers.Disable(); 229cdf0e10cSrcweir } 230cdf0e10cSrcweir } 231cdf0e10cSrcweir else 232cdf0e10cSrcweir rEdCopyPos.SetText( EMPTY_STRING ); 233cdf0e10cSrcweir } 234cdf0e10cSrcweir 235cdf0e10cSrcweir 236cdf0e10cSrcweir //---------------------------------------------------------------------------- 237cdf0e10cSrcweir 238cdf0e10cSrcweir sal_Bool ScFilterOptionsMgr::VerifyPosStr( const String& rPosStr ) const 239cdf0e10cSrcweir { 240cdf0e10cSrcweir String aPosStr( rPosStr ); 241cdf0e10cSrcweir xub_StrLen nColonPos = aPosStr.Search( ':' ); 242cdf0e10cSrcweir 243cdf0e10cSrcweir if ( STRING_NOTFOUND != nColonPos ) 244cdf0e10cSrcweir aPosStr.Erase( nColonPos ); 245cdf0e10cSrcweir 246cdf0e10cSrcweir sal_uInt16 nResult = ScAddress().Parse( aPosStr, pDoc, pDoc->GetAddressConvention() ); 247cdf0e10cSrcweir 248cdf0e10cSrcweir return ( SCA_VALID == (nResult & SCA_VALID) ); 249cdf0e10cSrcweir } 250cdf0e10cSrcweir 251cdf0e10cSrcweir 252cdf0e10cSrcweir //---------------------------------------------------------------------------- 253cdf0e10cSrcweir // Handler: 254cdf0e10cSrcweir 255cdf0e10cSrcweir //---------------------------------------------------------------------------- 256cdf0e10cSrcweir 257cdf0e10cSrcweir IMPL_LINK( ScFilterOptionsMgr, LbPosSelHdl, ListBox*, pLb ) 258cdf0e10cSrcweir { 259cdf0e10cSrcweir if ( pLb == &rLbCopyPos ) 260cdf0e10cSrcweir { 261cdf0e10cSrcweir String aString; 262cdf0e10cSrcweir sal_uInt16 nSelPos = rLbCopyPos.GetSelectEntryPos(); 263cdf0e10cSrcweir 264cdf0e10cSrcweir if ( nSelPos > 0 ) 265cdf0e10cSrcweir aString = *(String*)rLbCopyPos.GetEntryData( nSelPos ); 266cdf0e10cSrcweir 267cdf0e10cSrcweir rEdCopyPos.SetText( aString ); 268cdf0e10cSrcweir } 269cdf0e10cSrcweir 270cdf0e10cSrcweir return 0; 271cdf0e10cSrcweir } 272cdf0e10cSrcweir 273cdf0e10cSrcweir 274cdf0e10cSrcweir //---------------------------------------------------------------------------- 275cdf0e10cSrcweir 276cdf0e10cSrcweir IMPL_LINK( ScFilterOptionsMgr, EdPosModifyHdl, Edit*, pEd ) 277cdf0e10cSrcweir { 278cdf0e10cSrcweir if ( pEd == &rEdCopyPos ) 279cdf0e10cSrcweir { 280cdf0e10cSrcweir String theCurPosStr = pEd->GetText(); 281cdf0e10cSrcweir sal_uInt16 nResult = ScAddress().Parse( theCurPosStr, pDoc, pDoc->GetAddressConvention() ); 282cdf0e10cSrcweir 283cdf0e10cSrcweir if ( SCA_VALID == (nResult & SCA_VALID) ) 284cdf0e10cSrcweir { 285cdf0e10cSrcweir String* pStr = NULL; 286cdf0e10cSrcweir sal_Bool bFound = sal_False; 287cdf0e10cSrcweir sal_uInt16 i = 0; 288cdf0e10cSrcweir sal_uInt16 nCount = rLbCopyPos.GetEntryCount(); 289cdf0e10cSrcweir 290cdf0e10cSrcweir for ( i=2; i<nCount && !bFound; i++ ) 291cdf0e10cSrcweir { 292cdf0e10cSrcweir pStr = (String*)rLbCopyPos.GetEntryData( i ); 293cdf0e10cSrcweir bFound = (theCurPosStr == *pStr); 294cdf0e10cSrcweir } 295cdf0e10cSrcweir 296cdf0e10cSrcweir if ( bFound ) 297cdf0e10cSrcweir rLbCopyPos.SelectEntryPos( --i ); 298cdf0e10cSrcweir else 299cdf0e10cSrcweir rLbCopyPos.SelectEntryPos( 0 ); 300cdf0e10cSrcweir } 301cdf0e10cSrcweir else 302cdf0e10cSrcweir rLbCopyPos.SelectEntryPos( 0 ); 303cdf0e10cSrcweir } 304cdf0e10cSrcweir 305cdf0e10cSrcweir return 0; 306cdf0e10cSrcweir } 307cdf0e10cSrcweir 308cdf0e10cSrcweir 309cdf0e10cSrcweir //---------------------------------------------------------------------------- 310cdf0e10cSrcweir 311cdf0e10cSrcweir IMPL_LINK( ScFilterOptionsMgr, BtnCopyResultHdl, CheckBox*, pBox ) 312cdf0e10cSrcweir { 313cdf0e10cSrcweir if ( pBox == &rBtnCopyResult ) 314cdf0e10cSrcweir { 315cdf0e10cSrcweir if ( pBox->IsChecked() ) 316cdf0e10cSrcweir { 317cdf0e10cSrcweir rBtnDestPers.Enable(); 318cdf0e10cSrcweir rLbCopyPos.Enable(); 319cdf0e10cSrcweir rEdCopyPos.Enable(); 320cdf0e10cSrcweir rRbCopyPos.Enable(); 321cdf0e10cSrcweir rEdCopyPos.GrabFocus(); 322cdf0e10cSrcweir } 323cdf0e10cSrcweir else 324cdf0e10cSrcweir { 325cdf0e10cSrcweir rBtnDestPers.Disable(); 326cdf0e10cSrcweir rLbCopyPos.Disable(); 327cdf0e10cSrcweir rEdCopyPos.Disable(); 328cdf0e10cSrcweir rRbCopyPos.Disable(); 329cdf0e10cSrcweir } 330cdf0e10cSrcweir } 331cdf0e10cSrcweir 332cdf0e10cSrcweir return 0; 333cdf0e10cSrcweir } 334