Files
libreoffice/sc/source/ui/dbgui/foptmgr.cxx

285 lines
9.2 KiB
C++
Raw Normal View History

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
re-base on ALv2 code. Includes: Patches contributed by Herbert Duerr i#118735 prevent endless loop if vlookup/hlookup doesn't find anything http://svn.apache.org/viewvc?view=revision&revision=1239673 Patches contributed by Andre Fischer remove lp_solver http://svn.apache.org/viewvc?view=revision&revision=1199180 i#118160: Added external CoinMP library. http://svn.apache.org/viewvc?view=revision&revision=1233909 Patches contributed by Armin Le-Grand i#118485 - Styles for OLEs are not saved. http://svn.apache.org/viewvc?view=revision&revision=1182166 i#118524: apply patch, followup fixes to 118485 http://svn.apache.org/viewvc?view=revision&revision=1186077 Patches contributed by lihuiibm i#108860 - Fix range validation. http://svn.apache.org/viewvc?view=revision&revision=1242846 i#118954 Chart data will lost after copy to different file http://svn.apache.org/viewvc?view=revision&revision=1301345 Patches contributed by Ariel Constenla-Haile Fix Linux build breaker: extra qualification on member http://svn.apache.org/viewvc?view=revision&revision=1301591 i#118696 - i#118697 - Fix some Sheet Tab Color API issues http://svn.apache.org/viewvc?view=revision&revision=1225428 i#118697 - Fix uninitialized variable http://svn.apache.org/viewvc?view=revision&revision=1225859 i#118771 - ScUndoImportTab should preserve tab background color http://svn.apache.org/viewvc?view=revision&revision=1230356 i#118921 - Repaint linked sheet tab background color after updating link http://svn.apache.org/viewvc?view=revision&revision=1245177 i#118927 - Undo/Redo "Update Link" does not reset sheet tab color http://svn.apache.org/viewvc?view=revision&revision=1245241 i#118747 - Copy tab color when transferring sheets across documents http://svn.apache.org/viewvc?view=revision&revision=1230355 Patch contributed by Oliver Rainer-Wittman i#118012 - methods <ScBroadcastAreaSlot::AreaBroadcast(..)> and <ScBroadcastAreaSlot::AreaBroadcastInRange(..)> adapt stl-container iteration in order to avoid destroyed iterators during iteration. http://svn.apache.org/viewvc?view=revision&revision=1297916 Patches contributed by Mathias Bauer gnumake4 work variously http://svn.apache.org/viewvc?view=revision&revision=1394707 http://svn.apache.org/viewvc?view=revision&revision=1394326 http://svn.apache.org/viewvc?view=revision&revision=1396797 http://svn.apache.org/viewvc?view=revision&revision=1397315 Patch contributed by Daniel Rentz calc69: #i116936# fix VBA symbol Cells http://svn.apache.org/viewvc?view=revision&revision=1172135 Patches contributed by leiw: i#118546 CPU 100% on switched off AutoCalculate with Conditional Formatting on date values http://svn.apache.org/viewvc?view=revision&revision=1301380 Re-add new function documentation. Many various cleanups. Add missing calc66: #o11817313# also look at formula result number format, remove redundant binaries.
2012-11-30 12:23:25 +00:00
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
2000-09-18 16:07:07 +00:00
#include <svtools/stdctrl.hxx>
#include "anyrefdg.hxx"
#include "rangeutl.hxx"
#include "dbdata.hxx"
2000-09-18 16:07:07 +00:00
#include "viewdata.hxx"
#include "document.hxx"
#include "queryparam.hxx"
#include "globalnames.hxx"
2000-09-18 16:07:07 +00:00
#include "foptmgr.hxx"
// ScFilterOptionsMgr (.ui's option helper)
ScFilterOptionsMgr::ScFilterOptionsMgr(
ScViewData* ptrViewData,
const ScQueryParam& refQueryData,
CheckBox* refBtnCase,
CheckBox* refBtnRegExp,
CheckBox* refBtnHeader,
CheckBox* refBtnUnique,
CheckBox* refBtnCopyResult,
CheckBox* refBtnDestPers,
ListBox* refLbCopyArea,
Edit* refEdCopyArea,
formula::RefButton* refRbCopyArea,
FixedText* refFtDbAreaLabel,
FixedText* refFtDbArea,
const OUString& refStrUndefined )
: pViewData ( ptrViewData ),
pDoc ( ptrViewData ? ptrViewData->GetDocument() : NULL ),
pBtnCase ( refBtnCase ),
pBtnRegExp ( refBtnRegExp ),
pBtnHeader ( refBtnHeader ),
pBtnUnique ( refBtnUnique ),
pBtnCopyResult ( refBtnCopyResult ),
pBtnDestPers ( refBtnDestPers ),
pLbCopyArea ( refLbCopyArea ),
pEdCopyArea ( refEdCopyArea ),
pRbCopyArea ( refRbCopyArea ),
pFtDbAreaLabel ( refFtDbAreaLabel ),
pFtDbArea ( refFtDbArea ),
rStrUndefined ( refStrUndefined ),
rQueryData ( refQueryData )
{
Init();
}
ScFilterOptionsMgr::~ScFilterOptionsMgr()
{
sal_uInt16 nEntries = pLbCopyArea->GetEntryCount();
sal_uInt16 i;
for ( i=2; i<nEntries; i++ )
delete static_cast<OUString*>(pLbCopyArea->GetEntryData( i ));
}
void ScFilterOptionsMgr::Init()
{
//moggi:TODO
OSL_ENSURE( pViewData && pDoc, "Init failed :-/" );
pLbCopyArea->SetSelectHdl ( LINK( this, ScFilterOptionsMgr, LbAreaSelHdl ) );
pEdCopyArea->SetModifyHdl ( LINK( this, ScFilterOptionsMgr, EdAreaModifyHdl ) );
pBtnCopyResult->SetToggleHdl ( LINK( this, ScFilterOptionsMgr, BtnCopyResultHdl ) );
pBtnCase ->Check( rQueryData.bCaseSens );
pBtnHeader ->Check( rQueryData.bHasHeader );
pBtnRegExp ->Check( rQueryData.bRegExp );
pBtnUnique ->Check( !rQueryData.bDuplicate );
if ( pViewData && pDoc )
{
OUString theAreaStr;
ScRange theCurArea ( ScAddress( rQueryData.nCol1,
rQueryData.nRow1,
pViewData->GetTabNo() ),
ScAddress( rQueryData.nCol2,
rQueryData.nRow2,
pViewData->GetTabNo() ) );
ScDBCollection* pDBColl = pDoc->GetDBCollection();
OUStringBuffer theDbArea;
OUString theDbName(STR_DB_LOCAL_NONAME);
const formula::FormulaGrammar::AddressConvention eConv = pDoc->GetAddressConvention();
theAreaStr = theCurArea.Format(SCR_ABS_3D, pDoc, eConv);
// Zielbereichsliste fuellen
pLbCopyArea->Clear();
pLbCopyArea->InsertEntry( rStrUndefined, 0 );
ScAreaNameIterator aIter( pDoc );
OUString aName;
ScRange aRange;
while ( aIter.Next( aName, aRange ) )
{
sal_uInt16 nInsert = pLbCopyArea->InsertEntry( aName );
OUString aRefStr(aRange.aStart.Format(SCA_ABS_3D, pDoc, eConv));
pLbCopyArea->SetEntryData( nInsert, new OUString( aRefStr ) );
}
pBtnDestPers->Check( true ); // beim Aufruf immer an
pLbCopyArea->SelectEntryPos( 0 );
pEdCopyArea->SetText( EMPTY_OUSTRING );
/*
* Ueberpruefen, ob es sich bei dem uebergebenen
* Bereich um einen Datenbankbereich handelt:
*/
theDbArea = theAreaStr;
if ( pDBColl )
{
ScAddress& rStart = theCurArea.aStart;
ScAddress& rEnd = theCurArea.aEnd;
const ScDBData* pDBData = pDBColl->GetDBAtArea(
rStart.Tab(), rStart.Col(), rStart.Row(), rEnd.Col(), rEnd.Row());
if ( pDBData )
{
pBtnHeader->Check( pDBData->HasHeader() );
theDbName = pDBData->GetName();
if ( theDbName == STR_DB_LOCAL_NONAME )
pBtnHeader->Enable();
else
pBtnHeader->Disable();
}
}
if ( theDbName != STR_DB_LOCAL_NONAME )
{
theDbArea.append(" (");
theDbArea.append(theDbName).append(')');
pFtDbArea->SetText( theDbArea.makeStringAndClear() );
}
else
{
pFtDbAreaLabel->SetText( OUString() );
pFtDbArea->SetText( OUString() );
}
// Kopierposition:
if ( !rQueryData.bInplace )
{
OUString aString =
ScAddress( rQueryData.nDestCol,
rQueryData.nDestRow,
rQueryData.nDestTab
).Format(SCA_ABS_3D, pDoc, eConv);
pBtnCopyResult->Check( true );
pEdCopyArea->SetText( aString );
EdAreaModifyHdl( pEdCopyArea );
pLbCopyArea->Enable();
pEdCopyArea->Enable();
pRbCopyArea->Enable();
pBtnDestPers->Enable();
}
else
{
pBtnCopyResult->Check( false );
pEdCopyArea->SetText( EMPTY_OUSTRING );
pLbCopyArea->Disable();
pEdCopyArea->Disable();
pRbCopyArea->Disable();
pBtnDestPers->Disable();
}
}
else
pEdCopyArea->SetText( EMPTY_OUSTRING );
}
bool ScFilterOptionsMgr::VerifyPosStr( const OUString& rPosStr ) const
{
OUString aPosStr( rPosStr );
sal_Int32 nColonPos = aPosStr.indexOf( ':' );
if ( -1 != nColonPos )
aPosStr = aPosStr.copy( 0, nColonPos );
sal_uInt16 nResult = ScAddress().Parse( aPosStr, pDoc, pDoc->GetAddressConvention() );
return ( SCA_VALID == (nResult & SCA_VALID) );
}
// Handler:
IMPL_LINK( ScFilterOptionsMgr, LbAreaSelHdl, ListBox*, pLb )
{
if ( pLb == pLbCopyArea )
{
OUString aString;
sal_uInt16 nSelPos = pLbCopyArea->GetSelectEntryPos();
if ( nSelPos > 0 )
aString = *static_cast<OUString*>(pLbCopyArea->GetEntryData( nSelPos ));
pEdCopyArea->SetText( aString );
}
return 0;
}
IMPL_LINK( ScFilterOptionsMgr, EdAreaModifyHdl, Edit*, pEd )
{
if ( pEd == pEdCopyArea )
{
OUString theCurPosStr = pEd->GetText();
sal_uInt16 nResult = ScAddress().Parse( theCurPosStr, pDoc, pDoc->GetAddressConvention() );
if ( SCA_VALID == (nResult & SCA_VALID) )
{
bool bFound = false;
sal_uInt16 i = 0;
sal_uInt16 nCount = pLbCopyArea->GetEntryCount();
for ( i=2; i<nCount && !bFound; i++ )
{
OUString* pStr = static_cast<OUString*>(pLbCopyArea->GetEntryData( i ));
bFound = (theCurPosStr == *pStr);
}
if ( bFound )
pLbCopyArea->SelectEntryPos( --i );
else
pLbCopyArea->SelectEntryPos( 0 );
}
else
pLbCopyArea->SelectEntryPos( 0 );
}
return 0;
}
IMPL_LINK( ScFilterOptionsMgr, BtnCopyResultHdl, CheckBox*, pBox )
{
if ( pBox == pBtnCopyResult )
{
if ( pBox->IsChecked() )
{
pBtnDestPers->Enable();
pLbCopyArea->Enable();
pEdCopyArea->Enable();
pRbCopyArea->Enable();
pEdCopyArea->GrabFocus();
}
else
{
pBtnDestPers->Disable();
pLbCopyArea->Disable();
pEdCopyArea->Disable();
pRbCopyArea->Disable();
}
}
return 0;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */