diff options
Diffstat (limited to 'sc/source/ui/dbgui/foptmgr.cxx')
-rw-r--r-- | sc/source/ui/dbgui/foptmgr.cxx | 337 |
1 files changed, 337 insertions, 0 deletions
diff --git a/sc/source/ui/dbgui/foptmgr.cxx b/sc/source/ui/dbgui/foptmgr.cxx new file mode 100644 index 000000000000..1e274690c31c --- /dev/null +++ b/sc/source/ui/dbgui/foptmgr.cxx @@ -0,0 +1,337 @@ +/************************************************************************* + * + * 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_sc.hxx" + +// System - Includes --------------------------------------------------------- + + + +// INCLUDE ------------------------------------------------------------------- + +#include <vcl/morebtn.hxx> +#include <svtools/stdctrl.hxx> + +#include "anyrefdg.hxx" +#include "rangeutl.hxx" +#include "dbcolect.hxx" +#include "viewdata.hxx" +#include "document.hxx" +#include "queryparam.hxx" + +#define _FOPTMGR_CXX +#include "foptmgr.hxx" +#undef _FOPTMGR_CXX + +//---------------------------------------------------------------------------- + +ScFilterOptionsMgr::ScFilterOptionsMgr( + Dialog* ptrDlg, + ScViewData* ptrViewData, + const ScQueryParam& refQueryData, + MoreButton& refBtnMore, + CheckBox& refBtnCase, + CheckBox& refBtnRegExp, + CheckBox& refBtnHeader, + CheckBox& refBtnUnique, + CheckBox& refBtnCopyResult, + CheckBox& refBtnDestPers, + ListBox& refLbCopyArea, + Edit& refEdCopyArea, + formula::RefButton& refRbCopyArea, + FixedText& refFtDbAreaLabel, + FixedInfo& refFtDbArea, + FixedLine& refFlOptions, + const String& refStrNoName, + const String& refStrUndefined ) + + : pDlg ( ptrDlg ), + pViewData ( ptrViewData ), + pDoc ( ptrViewData ? ptrViewData->GetDocument() : NULL ), + rBtnMore ( refBtnMore ), + rBtnCase ( refBtnCase ), + rBtnRegExp ( refBtnRegExp ), + rBtnHeader ( refBtnHeader ), + rBtnUnique ( refBtnUnique ), + rBtnCopyResult ( refBtnCopyResult ), + rBtnDestPers ( refBtnDestPers ), + rLbCopyPos ( refLbCopyArea ), + rEdCopyPos ( refEdCopyArea ), + rRbCopyPos ( refRbCopyArea ), + rFtDbAreaLabel ( refFtDbAreaLabel ), + rFtDbArea ( refFtDbArea ), + rFlOptions ( refFlOptions ), + rStrNoName ( refStrNoName ), + rStrUndefined ( refStrUndefined ), + rQueryData ( refQueryData ) +{ + Init(); +} + + +//---------------------------------------------------------------------------- + +ScFilterOptionsMgr::~ScFilterOptionsMgr() +{ + USHORT nEntries = rLbCopyPos.GetEntryCount(); + USHORT i; + + for ( i=2; i<nEntries; i++ ) + delete (String*)rLbCopyPos.GetEntryData( i ); +} + + +//---------------------------------------------------------------------------- + +void ScFilterOptionsMgr::Init() +{ + DBG_ASSERT( pViewData && pDoc, "Init failed :-/" ); + + rLbCopyPos.SetSelectHdl ( LINK( this, ScFilterOptionsMgr, LbPosSelHdl ) ); + rEdCopyPos.SetModifyHdl ( LINK( this, ScFilterOptionsMgr, EdPosModifyHdl ) ); + rBtnCopyResult.SetClickHdl( LINK( this, ScFilterOptionsMgr, BtnCopyResultHdl ) ); + + rBtnMore.AddWindow( &rBtnCase ); + rBtnMore.AddWindow( &rBtnRegExp ); + rBtnMore.AddWindow( &rBtnHeader ); + rBtnMore.AddWindow( &rBtnUnique ); + rBtnMore.AddWindow( &rBtnCopyResult ); + rBtnMore.AddWindow( &rBtnDestPers ); + rBtnMore.AddWindow( &rLbCopyPos ); + rBtnMore.AddWindow( &rEdCopyPos ); + rBtnMore.AddWindow( &rRbCopyPos ); + rBtnMore.AddWindow( &rFtDbAreaLabel ); + rBtnMore.AddWindow( &rFtDbArea ); + rBtnMore.AddWindow( &rFlOptions ); + + rBtnCase .Check( rQueryData.bCaseSens ); + rBtnHeader .Check( rQueryData.bHasHeader ); + rBtnRegExp .Check( rQueryData.bRegExp ); + rBtnUnique .Check( !rQueryData.bDuplicate ); + + if ( pViewData && pDoc ) + { + String theAreaStr; + ScRange theCurArea ( ScAddress( rQueryData.nCol1, + rQueryData.nRow1, + pViewData->GetTabNo() ), + ScAddress( rQueryData.nCol2, + rQueryData.nRow2, + pViewData->GetTabNo() ) ); + ScDBCollection* pDBColl = pDoc->GetDBCollection(); + String theDbArea; + String theDbName = rStrNoName; + const formula::FormulaGrammar::AddressConvention eConv = pDoc->GetAddressConvention(); + + theCurArea.Format( theAreaStr, SCR_ABS_3D, pDoc, eConv ); + + // Zielbereichsliste fuellen + + rLbCopyPos.Clear(); + rLbCopyPos.InsertEntry( rStrUndefined, 0 ); + + ScAreaNameIterator aIter( pDoc ); + String aName; + ScRange aRange; + String aRefStr; + while ( aIter.Next( aName, aRange ) ) + { + USHORT nInsert = rLbCopyPos.InsertEntry( aName ); + + aRange.aStart.Format( aRefStr, SCA_ABS_3D, pDoc, eConv ); + rLbCopyPos.SetEntryData( nInsert, new String( aRefStr ) ); + } + + rBtnDestPers.Check( TRUE ); // beim Aufruf immer an + rLbCopyPos.SelectEntryPos( 0 ); + rEdCopyPos.SetText( EMPTY_STRING ); + + /* + * Ueberpruefen, ob es sich bei dem uebergebenen + * Bereich um einen Datenbankbereich handelt: + */ + + theDbArea = theAreaStr; + + if ( pDBColl ) + { + ScAddress& rStart = theCurArea.aStart; + ScAddress& rEnd = theCurArea.aEnd; + ScDBData* pDBData = pDBColl->GetDBAtArea( rStart.Tab(), + rStart.Col(), rStart.Row(), + rEnd.Col(), rEnd.Row() ); + if ( pDBData ) + { + rBtnHeader.Check( pDBData->HasHeader() ); + pDBData->GetName( theDbName ); + + if ( theDbName != rStrNoName ) + { + rBtnHeader.Disable(); + } + } + } + + theDbArea.AppendAscii(RTL_CONSTASCII_STRINGPARAM(" (")); + theDbArea += theDbName; + theDbArea += ')'; + rFtDbArea.SetText( theDbArea ); + + //------------------------------------------------------ + // Kopierposition: + + if ( !rQueryData.bInplace ) + { + String aString; + + ScAddress( rQueryData.nDestCol, + rQueryData.nDestRow, + rQueryData.nDestTab + ).Format( aString, SCA_ABS_3D, pDoc, eConv ); + + rBtnCopyResult.Check( TRUE ); + rEdCopyPos.SetText( aString ); + EdPosModifyHdl( &rEdCopyPos ); + rLbCopyPos.Enable(); + rEdCopyPos.Enable(); + rRbCopyPos.Enable(); + rBtnDestPers.Enable(); + } + else + { + rBtnCopyResult.Check( FALSE ); + rEdCopyPos.SetText( EMPTY_STRING ); + rLbCopyPos.Disable(); + rEdCopyPos.Disable(); + rRbCopyPos.Disable(); + rBtnDestPers.Disable(); + } + } + else + rEdCopyPos.SetText( EMPTY_STRING ); +} + + +//---------------------------------------------------------------------------- + +BOOL ScFilterOptionsMgr::VerifyPosStr( const String& rPosStr ) const +{ + String aPosStr( rPosStr ); + xub_StrLen nColonPos = aPosStr.Search( ':' ); + + if ( STRING_NOTFOUND != nColonPos ) + aPosStr.Erase( nColonPos ); + + USHORT nResult = ScAddress().Parse( aPosStr, pDoc, pDoc->GetAddressConvention() ); + + return ( SCA_VALID == (nResult & SCA_VALID) ); +} + + +//---------------------------------------------------------------------------- +// Handler: + +//---------------------------------------------------------------------------- + +IMPL_LINK( ScFilterOptionsMgr, LbPosSelHdl, ListBox*, pLb ) +{ + if ( pLb == &rLbCopyPos ) + { + String aString; + USHORT nSelPos = rLbCopyPos.GetSelectEntryPos(); + + if ( nSelPos > 0 ) + aString = *(String*)rLbCopyPos.GetEntryData( nSelPos ); + + rEdCopyPos.SetText( aString ); + } + + return 0; +} + + +//---------------------------------------------------------------------------- + +IMPL_LINK( ScFilterOptionsMgr, EdPosModifyHdl, Edit*, pEd ) +{ + if ( pEd == &rEdCopyPos ) + { + String theCurPosStr = pEd->GetText(); + USHORT nResult = ScAddress().Parse( theCurPosStr, pDoc, pDoc->GetAddressConvention() ); + + if ( SCA_VALID == (nResult & SCA_VALID) ) + { + String* pStr = NULL; + BOOL bFound = FALSE; + USHORT i = 0; + USHORT nCount = rLbCopyPos.GetEntryCount(); + + for ( i=2; i<nCount && !bFound; i++ ) + { + pStr = (String*)rLbCopyPos.GetEntryData( i ); + bFound = (theCurPosStr == *pStr); + } + + if ( bFound ) + rLbCopyPos.SelectEntryPos( --i ); + else + rLbCopyPos.SelectEntryPos( 0 ); + } + else + rLbCopyPos.SelectEntryPos( 0 ); + } + + return 0; +} + + +//---------------------------------------------------------------------------- + +IMPL_LINK( ScFilterOptionsMgr, BtnCopyResultHdl, CheckBox*, pBox ) +{ + if ( pBox == &rBtnCopyResult ) + { + if ( pBox->IsChecked() ) + { + rBtnDestPers.Enable(); + rLbCopyPos.Enable(); + rEdCopyPos.Enable(); + rRbCopyPos.Enable(); + rEdCopyPos.GrabFocus(); + } + else + { + rBtnDestPers.Disable(); + rLbCopyPos.Disable(); + rEdCopyPos.Disable(); + rRbCopyPos.Disable(); + } + } + + return 0; +} |