summaryrefslogtreecommitdiff
path: root/toolkit/workben/layout/tpsort.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/workben/layout/tpsort.cxx')
-rw-r--r--toolkit/workben/layout/tpsort.cxx1107
1 files changed, 0 insertions, 1107 deletions
diff --git a/toolkit/workben/layout/tpsort.cxx b/toolkit/workben/layout/tpsort.cxx
deleted file mode 100644
index f5826a9cc9..0000000000
--- a/toolkit/workben/layout/tpsort.cxx
+++ /dev/null
@@ -1,1107 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-#if !TEST_LAYOUT
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sc.hxx"
-#endif /* !TEST_LAYOUT */
-
-#undef SC_DLLIMPLEMENTATION
-
-
-
-#include <vcl/msgbox.hxx>
-#include <i18npool/mslangid.hxx>
-#include <svtools/collatorres.hxx>
-#include <unotools/collatorwrapper.hxx>
-#include <unotools/localedatawrapper.hxx>
-#include <comphelper/processfactory.hxx>
-
-#include "scitems.hxx"
-#include "uiitems.hxx"
-#include "viewdata.hxx"
-#include "document.hxx"
-#include "global.hxx"
-#include "dbcolect.hxx"
-#include "userlist.hxx"
-#include "rangeutl.hxx"
-#include "scresid.hxx"
-#include "sc.hrc" // -> Slot IDs
-#include "globstr.hrc"
-
-#include "sortdlg.hxx"
-#include "sortdlg.hrc"
-
-#define _TPSORT_CXX
-#include "tpsort.hxx"
-#undef _TPSORT_CXX
-
-using namespace com::sun::star;
-
-// STATIC DATA -----------------------------------------------------------
-
-static USHORT pSortRanges[] =
-{
- SID_SORT,
- SID_SORT,
- 0
-};
-
-// -----------------------------------------------------------------------
-
-/*
- * Da sich Einstellungen auf der zweiten TabPage (Optionen) auf
- * die erste TabPage auswirken, muss es die Moeglichkeit geben,
- * dies der jeweils anderen Seite mitzuteilen.
- *
- * Im Moment wird dieses Problem ueber zwei Datenmember des TabDialoges
- * geloest. Wird eine Seite Aktiviert/Deaktiviert, so gleicht sie diese
- * Datenmember mit dem eigenen Zustand ab (->Activate()/Deactivate()).
- *
- * 31.01.95:
- * Die Klasse SfxTabPage bietet mittlerweile ein Verfahren an:
- *
- * virtual BOOL HasExchangeSupport() const; -> return TRUE;
- * virtual void ActivatePage(const SfxItemSet &);
- * virtual int DeactivatePage(SfxItemSet * = 0);
- *
- * muss noch geaendert werden!
- */
-
-//========================================================================
-//========================================================================
-// Sortierkriterien-Tabpage:
-
-ScTabPageSortFields::ScTabPageSortFields( Window* pParent,
- const SfxItemSet& rArgSet )
-
- : SfxTabPage ( pParent,
- ScResId( RID_SCPAGE_SORT_FIELDS ),
- rArgSet ),
- //
- aFlSort1 ( this, ScResId( FL_SORT1 ) ),
- aLbSort1 ( this, ScResId( LB_SORT1 ) ),
- aBtnUp1 ( this, ScResId( BTN_UP1 ) ),
- aBtnDown1 ( this, ScResId( BTN_DOWN1 ) ),
- //
- aFlSort2 ( this, ScResId( FL_SORT2 ) ),
- aLbSort2 ( this, ScResId( LB_SORT2 ) ),
- aBtnUp2 ( this, ScResId( BTN_UP2 ) ),
- aBtnDown2 ( this, ScResId( BTN_DOWN2 ) ),
- //
- aFlSort3 ( this, ScResId( FL_SORT3 ) ),
- aLbSort3 ( this, ScResId( LB_SORT3 ) ),
- aBtnUp3 ( this, ScResId( BTN_UP3 ) ),
- aBtnDown3 ( this, ScResId( BTN_DOWN3 ) ),
-
- aStrUndefined ( ScResId( SCSTR_UNDEFINED ) ),
- aStrColumn ( ScResId( SCSTR_COLUMN ) ),
- aStrRow ( ScResId( SCSTR_ROW ) ),
- //
-#if !TEST_LAYOUT
- nWhichSort ( rArgSet.GetPool()->GetWhich( SID_SORT ) ),
-#else /* TEST_LAYOUT */
- nWhichSort ( 0 ),
-#endif /* TEST_LAYOUT */
- pDlg ( (ScSortDlg*)(GetParent()->GetParent()) ),
- pViewData ( NULL ),
-#if !TEST_LAYOUT
- rSortData ( ((const ScSortItem&)
- rArgSet.Get( nWhichSort )).
- GetSortData() ),
-#else /* TEST_LAYOUT */
- rSortData ( *new ScSortParam() ),
-#endif /* TEST_LAYOUT */
- nFieldCount ( 0 ),
- bHasHeader ( FALSE ),
- bSortByRows ( FALSE )
-{
- Init();
- FreeResource();
- SetExchangeSupport();
-}
-
-// -----------------------------------------------------------------------
-
-ScTabPageSortFields::~ScTabPageSortFields()
-{
-}
-
-// -----------------------------------------------------------------------
-
-void ScTabPageSortFields::Init()
-{
-#if !TEST_LAYOUT
- const ScSortItem& rSortItem = (const ScSortItem&)
- GetItemSet().Get( nWhichSort );
-
- pViewData = rSortItem.GetViewData();
-
- DBG_ASSERT( pViewData, "ViewData not found!" );
-#endif /* !TEST_LAYOUT */
-
- nFieldArr[0] = 0;
- nFirstCol = 0;
- nFirstRow = 0;
-
- aLbSort1.SetSelectHdl( LINK( this, ScTabPageSortFields, SelectHdl ) );
- aLbSort2.SetSelectHdl( LINK( this, ScTabPageSortFields, SelectHdl ) );
- aLbSort3.SetSelectHdl( LINK( this, ScTabPageSortFields, SelectHdl ) );
- aLbSort1.Clear();
- aLbSort2.Clear();
- aLbSort3.Clear();
-
- aSortLbArr[0] = &aLbSort1;
- aSortLbArr[1] = &aLbSort2;
- aSortLbArr[2] = &aLbSort3;
- aDirBtnArr[0][0] = &aBtnUp1;
- aDirBtnArr[0][1] = &aBtnDown1;
- aDirBtnArr[1][0] = &aBtnUp2;
- aDirBtnArr[1][1] = &aBtnDown2;
- aDirBtnArr[2][0] = &aBtnUp3;
- aDirBtnArr[2][1] = &aBtnDown3;
- aFlArr[0] = &aFlSort1;
- aFlArr[1] = &aFlSort2;
- aFlArr[2] = &aFlSort3;
-}
-
-//------------------------------------------------------------------------
-
-USHORT* ScTabPageSortFields::GetRanges()
-{
- return pSortRanges;
-}
-
-// -----------------------------------------------------------------------
-
-SfxTabPage* ScTabPageSortFields::Create( Window* pParent,
- const SfxItemSet& rArgSet )
-{
- return ( new ScTabPageSortFields( pParent, rArgSet ) );
-}
-
-// -----------------------------------------------------------------------
-
-void ScTabPageSortFields::Reset( const SfxItemSet& /* rArgSet */ )
-{
- bSortByRows = rSortData.bByRow;
- bHasHeader = rSortData.bHasHeader;
-
- if ( aLbSort1.GetEntryCount() == 0 )
- FillFieldLists();
-
- // Selektieren der ListBoxen:
-
- if ( rSortData.bDoSort[0] )
- {
- for ( USHORT i=0; i<3; i++ )
- {
- if ( rSortData.bDoSort[i] )
- {
- aSortLbArr[i]->SelectEntryPos(
- GetFieldSelPos( rSortData.nField[i] ) );
-
- (rSortData.bAscending[i])
- ? aDirBtnArr[i][0]->Check() // Up
- : aDirBtnArr[i][1]->Check(); // Down
- }
- else
- {
- aSortLbArr[i]->SelectEntryPos( 0 ); // "keiner" selektieren
- aDirBtnArr[i][0]->Check(); // Up
- }
- }
-
- EnableField( 1 );
- EnableField( 2 );
- EnableField( 3 );
- if ( aLbSort1.GetSelectEntryPos() == 0 )
- DisableField( 2 );
- if ( aLbSort2.GetSelectEntryPos() == 0 )
- DisableField( 3 );
- }
- else
- {
- aLbSort1.SelectEntryPos( 1 );
- aLbSort2.SelectEntryPos( 0 );
- aLbSort3.SelectEntryPos( 0 );
- aBtnUp1.Check();
- aBtnUp2.Check();
- aBtnUp3.Check();
- EnableField ( 1 );
- EnableField ( 2 );
- DisableField( 3 );
- }
-
- if ( pDlg )
- {
- pDlg->SetByRows ( bSortByRows );
- pDlg->SetHeaders( bHasHeader );
- }
-}
-
-// -----------------------------------------------------------------------
-
-BOOL ScTabPageSortFields::FillItemSet( SfxItemSet& rArgSet )
-{
- ScSortParam theSortData = rSortData;
- if (pDlg)
- {
- const SfxItemSet* pExample = pDlg->GetExampleSet();
- const SfxPoolItem* pItem;
- if ( pExample && pExample->GetItemState( nWhichSort, TRUE, &pItem ) == SFX_ITEM_SET )
- theSortData = ((const ScSortItem*)pItem)->GetSortData();
- }
-
- USHORT nSort1Pos = aLbSort1.GetSelectEntryPos();
- USHORT nSort2Pos = aLbSort2.GetSelectEntryPos();
- USHORT nSort3Pos = aLbSort3.GetSelectEntryPos();
-
- DBG_ASSERT( (nSort1Pos <= SC_MAXFIELDS)
- && (nSort2Pos <= SC_MAXFIELDS)
- && (nSort3Pos <= SC_MAXFIELDS),
- "Array-Range Fehler!" );
-
- if ( nSort1Pos == LISTBOX_ENTRY_NOTFOUND ) nSort1Pos = 0;
- if ( nSort2Pos == LISTBOX_ENTRY_NOTFOUND ) nSort2Pos = 0;
- if ( nSort3Pos == LISTBOX_ENTRY_NOTFOUND ) nSort3Pos = 0;
-
- if ( nSort1Pos > 0 )
- {
- theSortData.bDoSort[0] = (nSort1Pos > 0);
- theSortData.bDoSort[1] = (nSort2Pos > 0);
- theSortData.bDoSort[2] = (nSort3Pos > 0);
-
- // wenn auf Optionen-Seite "OK" gewaehlt wurde und
- // dabei die Sortierrichtung umgestellt wurde, so
- // wird das erste Feld der jeweiligen Richtung als
- // Sortierkriterium gewaehlt (steht in nFieldArr[0]):
- if ( bSortByRows != pDlg->GetByRows() )
- {
- theSortData.nField[0] =
- theSortData.nField[1] =
- theSortData.nField[2] = ( bSortByRows ?
- static_cast<SCCOLROW>(nFirstRow) :
- static_cast<SCCOLROW>(nFirstCol) );
- }
- else
- {
- theSortData.nField[0] = nFieldArr[nSort1Pos];
- theSortData.nField[1] = nFieldArr[nSort2Pos];
- theSortData.nField[2] = nFieldArr[nSort3Pos];
- }
-
- theSortData.bAscending[0] = aBtnUp1.IsChecked();
- theSortData.bAscending[1] = aBtnUp2.IsChecked();
- theSortData.bAscending[2] = aBtnUp3.IsChecked();
- // bHasHeader ist in ScTabPageSortOptions::FillItemSet, wo es hingehoert
- }
- else
- {
- theSortData.bDoSort[0] =
- theSortData.bDoSort[1] =
- theSortData.bDoSort[2] = FALSE;
- }
-
- rArgSet.Put( ScSortItem( SCITEM_SORTDATA, NULL, &theSortData ) );
-
- return TRUE;
-}
-
-// -----------------------------------------------------------------------
-
-// fuer Datenaustausch ohne Dialog-Umweg: (! noch zu tun !)
-// void ScTabPageSortFields::ActivatePage( const SfxItemSet& rSet )
-
-void ScTabPageSortFields::ActivatePage()
-{
- if ( pDlg )
- {
- if ( bHasHeader != pDlg->GetHeaders()
- || bSortByRows != pDlg->GetByRows() )
- {
- USHORT nCurSel1 = aLbSort1.GetSelectEntryPos();
- USHORT nCurSel2 = aLbSort2.GetSelectEntryPos();
- USHORT nCurSel3 = aLbSort3.GetSelectEntryPos();
-
- bHasHeader = pDlg->GetHeaders();
- bSortByRows = pDlg->GetByRows();
- FillFieldLists();
- aLbSort1.SelectEntryPos( nCurSel1 );
- aLbSort2.SelectEntryPos( nCurSel2 );
- aLbSort3.SelectEntryPos( nCurSel3 );
- }
- }
-}
-
-// -----------------------------------------------------------------------
-
-int ScTabPageSortFields::DeactivatePage( SfxItemSet* pSetP )
-{
- if ( pDlg )
- {
- if ( bHasHeader != pDlg->GetHeaders() )
- pDlg->SetHeaders( bHasHeader );
-
- if ( bSortByRows != pDlg->GetByRows() )
- pDlg->SetByRows( bSortByRows );
- }
-
- if ( pSetP )
- FillItemSet( *pSetP );
-
- return SfxTabPage::LEAVE_PAGE;
-}
-
-// -----------------------------------------------------------------------
-
-void ScTabPageSortFields::DisableField( USHORT nField )
-{
- nField--;
-
- if ( nField<=2 )
- {
- aSortLbArr[nField] ->Disable();
- aDirBtnArr[nField][0]->Disable();
- aDirBtnArr[nField][1]->Disable();
- aFlArr[nField] ->Disable();
- }
-}
-
-// -----------------------------------------------------------------------
-
-void ScTabPageSortFields::EnableField( USHORT nField )
-{
- nField--;
-
- if ( nField<=2 )
- {
- aSortLbArr[nField] ->Enable();
- aDirBtnArr[nField][0]->Enable();
- aDirBtnArr[nField][1]->Enable();
- aFlArr[nField] ->Enable();
- }
-}
-
-// -----------------------------------------------------------------------
-
-void ScTabPageSortFields::FillFieldLists()
-{
- if ( pViewData )
- {
- ScDocument* pDoc = pViewData->GetDocument();
-
- if ( pDoc )
- {
- aLbSort1.Clear();
- aLbSort2.Clear();
- aLbSort3.Clear();
- aLbSort1.InsertEntry( aStrUndefined, 0 );
- aLbSort2.InsertEntry( aStrUndefined, 0 );
- aLbSort3.InsertEntry( aStrUndefined, 0 );
-
- SCCOL nFirstSortCol = rSortData.nCol1;
- SCROW nFirstSortRow = rSortData.nRow1;
- SCTAB nTab = pViewData->GetTabNo();
- USHORT i = 1;
-
- if ( bSortByRows )
- {
- String aFieldName;
- SCCOL nMaxCol = rSortData.nCol2;
- SCCOL col;
-
- for ( col=nFirstSortCol; col<=nMaxCol && i<SC_MAXFIELDS; col++ )
- {
- pDoc->GetString( col, nFirstSortRow, nTab, aFieldName );
- if ( !bHasHeader || (aFieldName.Len() == 0) )
- {
- aFieldName = aStrColumn;
- aFieldName += ' ';
- aFieldName += ColToAlpha( col );
- }
- nFieldArr[i] = col;
- aLbSort1.InsertEntry( aFieldName, i );
- aLbSort2.InsertEntry( aFieldName, i );
- aLbSort3.InsertEntry( aFieldName, i );
- i++;
- }
- }
- else
- {
- String aFieldName;
- SCROW nMaxRow = rSortData.nRow2;
- SCROW row;
-
- for ( row=nFirstSortRow; row<=nMaxRow && i<SC_MAXFIELDS; row++ )
- {
- pDoc->GetString( nFirstSortCol, row, nTab, aFieldName );
- if ( !bHasHeader || (aFieldName.Len() == 0) )
- {
- aFieldName = aStrRow;
- aFieldName += ' ';
- aFieldName += String::CreateFromInt32( row+1 );
- }
- nFieldArr[i] = row;
- aLbSort1.InsertEntry( aFieldName, i );
- aLbSort2.InsertEntry( aFieldName, i );
- aLbSort3.InsertEntry( aFieldName, i );
- i++;
- }
- }
- nFieldCount = i;
- }
- }
-}
-
-//------------------------------------------------------------------------
-
-USHORT ScTabPageSortFields::GetFieldSelPos( SCCOLROW nField )
-{
- USHORT nFieldPos = 0;
- BOOL bFound = FALSE;
-
- for ( USHORT n=1; n<nFieldCount && !bFound; n++ )
- {
- if ( nFieldArr[n] == nField )
- {
- nFieldPos = n;
- bFound = TRUE;
- }
- }
-
- return nFieldPos;
-}
-
-// -----------------------------------------------------------------------
-// Handler:
-//---------
-
-IMPL_LINK( ScTabPageSortFields, SelectHdl, ListBox *, pLb )
-{
- String aSelEntry = pLb->GetSelectEntry();
-
- if ( pLb == &aLbSort1 )
- {
- if ( aSelEntry == aStrUndefined )
- {
- aLbSort2.SelectEntryPos( 0 );
- aLbSort3.SelectEntryPos( 0 );
-
- if ( aFlSort2.IsEnabled() )
- DisableField( 2 );
-
- if ( aFlSort3.IsEnabled() )
- DisableField( 3 );
- }
- else
- {
- if ( !aFlSort2.IsEnabled() )
- EnableField( 2 );
- }
- }
- else if ( pLb == &aLbSort2 )
- {
- if ( aSelEntry == aStrUndefined )
- {
- aLbSort3.SelectEntryPos( 0 );
- if ( aFlSort3.IsEnabled() )
- DisableField( 3 );
- }
- else
- {
- if ( !aFlSort3.IsEnabled() )
- EnableField( 3 );
- }
- }
- return 0;
-}
-
-//========================================================================
-// Sortieroptionen-Tabpage:
-//========================================================================
-
-#include <layout/layout-pre.hxx>
-
-#if ENABLE_LAYOUT
-#undef ScResId
-#define ScResId(x) #x
-#undef SfxTabPage
-#define SfxTabPage( parent, id, args ) SfxTabPage( parent, "sort-options.xml", id, &args )
-#endif /* ENABLE_LAYOUT */
-
-ScTabPageSortOptions::ScTabPageSortOptions( Window* pParent,
- const SfxItemSet& rArgSet )
-
- : SfxTabPage ( pParent,
- ScResId( RID_SCPAGE_SORT_OPTIONS ),
- rArgSet ),
- //
- aBtnCase ( this, ScResId( BTN_CASESENSITIVE ) ),
- aBtnHeader ( this, ScResId( BTN_LABEL ) ),
- aBtnFormats ( this, ScResId( BTN_FORMATS ) ),
- aBtnCopyResult ( this, ScResId( BTN_COPYRESULT ) ),
- aBtnNaturalSort ( this, ScResId( BTN_NATURALSORT ) ),
- aLbOutPos ( this, ScResId( LB_OUTAREA ) ),
- aEdOutPos ( this, ScResId( ED_OUTAREA ) ),
- aBtnSortUser ( this, ScResId( BTN_SORT_USER ) ),
- aLbSortUser ( this, ScResId( LB_SORT_USER ) ),
- aFtLanguage ( this, ScResId( FT_LANGUAGE ) ),
- aLbLanguage ( this, ScResId( LB_LANGUAGE ) ),
- aFtAlgorithm ( this, ScResId( FT_ALGORITHM ) ),
- aLbAlgorithm ( this, ScResId( LB_ALGORITHM ) ),
- aLineDirection ( this, ScResId( FL_DIRECTION ) ),
- aBtnTopDown ( this, ScResId( BTN_TOP_DOWN ) ),
- aBtnLeftRight ( this, ScResId( BTN_LEFT_RIGHT ) ),
-// aFtAreaLabel ( this, ScResId( FT_AREA_LABEL ) ),
-// aFtArea ( this, ScResId( FT_AREA ) ),
- //
-#if ENABLE_LAYOUT
-#undef this
-#undef ScResId
-#define ScResId(x) this, #x
-#endif /* ENABLE_LAYOUT */
- aStrRowLabel ( ScResId( STR_ROW_LABEL ) ),
- aStrColLabel ( ScResId( STR_COL_LABEL ) ),
- aStrUndefined ( ScResId( SCSTR_UNDEFINED ) ),
- aStrNoName ( ScGlobal::GetRscString(STR_DB_NONAME) ),
- //
-#if !TEST_LAYOUT
- nWhichSort ( rArgSet.GetPool()->GetWhich( SID_SORT ) ),
- rSortData ( ((const ScSortItem&)
- rArgSet.Get( nWhichSort )).GetSortData() ),
-#else /* TEST_LAYOUT */
- nWhichSort ( 0 ),
- rSortData ( *new ScSortParam() ),
-#endif /* TEST_LAYOUT */
- pViewData ( NULL ),
- pDoc ( NULL ),
- pDlg ( (ScSortDlg*)(GetParent() ? GetParent()->GetParent() : 0 ) ),
- pColRes ( NULL ),
- pColWrap ( NULL )
-{
-#if TEST_LAYOUT
- (void) rArgSet;
-#endif /* TEST_LAYOUT */
- Init();
- FreeResource();
- SetExchangeSupport();
-}
-
-// -----------------------------------------------------------------------
-
-ScTabPageSortOptions::~ScTabPageSortOptions()
-{
-#if !TEST_LAYOUT
- USHORT nEntries = aLbOutPos.GetEntryCount();
-
- for ( USHORT i=1; i<nEntries; i++ )
- delete (String*)aLbOutPos.GetEntryData( i );
-#endif /* !TEST_LAYOUT */
-
- delete pColRes;
- delete pColWrap; //! not if from document
-}
-
-// -----------------------------------------------------------------------
-
-void ScTabPageSortOptions::Init()
-{
-// aStrAreaLabel = aFtAreaLabel.GetText();
-// aStrAreaLabel.Append( (sal_Unicode) ' ' );
-
- // CollatorRessource has user-visible names for sort algorithms
- pColRes = new CollatorRessource();
-
- //! use CollatorWrapper from document?
- pColWrap = new CollatorWrapper( comphelper::getProcessServiceFactory() );
-
-#if !TEST_LAYOUT
- const ScSortItem& rSortItem = (const ScSortItem&)
- GetItemSet().Get( nWhichSort );
-#endif /* !TEST_LAYOUT */
-
- aLbOutPos.SetSelectHdl ( LINK( this, ScTabPageSortOptions, SelOutPosHdl ) );
- aBtnCopyResult.SetClickHdl( LINK( this, ScTabPageSortOptions, EnableHdl ) );
- aBtnSortUser.SetClickHdl ( LINK( this, ScTabPageSortOptions, EnableHdl ) );
- aBtnTopDown.SetClickHdl ( LINK( this, ScTabPageSortOptions, SortDirHdl ) );
- aBtnLeftRight.SetClickHdl ( LINK( this, ScTabPageSortOptions, SortDirHdl ) );
- aLbLanguage.SetSelectHdl ( LINK( this, ScTabPageSortOptions, FillAlgorHdl ) );
-
-#if !TEST_LAYOUT
- pViewData = rSortItem.GetViewData();
-#endif /* TEST_LAYOUT */
- pDoc = pViewData ? pViewData->GetDocument() : NULL;
-
- DBG_ASSERT( pViewData, "ViewData not found! :-/" );
-
-#if !TEST_LAYOUT
- if ( pViewData && pDoc )
- {
- String theArea;
- ScDBCollection* pDBColl = pDoc->GetDBCollection();
- String theDbArea;
- String theDbName = aStrNoName;
- const SCTAB nCurTab = pViewData->GetTabNo();
- const ScAddress::Convention eConv = pDoc->GetAddressConvention();
-#endif /* !TEST_LAYOUT */
-
- aLbOutPos.Clear();
- aLbOutPos.InsertEntry( aStrUndefined, 0 );
- aLbOutPos.Disable();
-
-#if !TEST_LAYOUT
- ScAreaNameIterator aIter( pDoc );
- String aName;
- ScRange aRange;
- String aRefStr;
- while ( aIter.Next( aName, aRange ) )
- {
- USHORT nInsert = aLbOutPos.InsertEntry( aName );
-
- aRange.aStart.Format( aRefStr, SCA_ABS_3D, pDoc, eConv );
- aLbOutPos.SetEntryData( nInsert, new String( aRefStr ) );
- }
-#endif /* !TEST_LAYOUT */
-
- aLbOutPos.SelectEntryPos( 0 );
- aEdOutPos.SetText( EMPTY_STRING );
-
-#if !TEST_LAYOUT
- /*
- * Ueberpruefen, ob es sich bei dem uebergebenen
- * Bereich um einen Datenbankbereich handelt:
- */
-
- ScAddress aScAddress( rSortData.nCol1, rSortData.nRow1, nCurTab );
- ScRange( aScAddress,
- ScAddress( rSortData.nCol2, rSortData.nRow2, nCurTab )
- ).Format( theArea, SCR_ABS, pDoc, eConv );
-
- if ( pDBColl )
- {
- ScDBData* pDBData
- = pDBColl->GetDBAtArea( nCurTab,
- rSortData.nCol1, rSortData.nRow1,
- rSortData.nCol2, rSortData.nRow2 );
- if ( pDBData )
- {
- pDBData->GetName( theDbName );
- aBtnHeader.Check( pDBData->HasHeader() );
- }
- }
-
- theArea.AppendAscii(RTL_CONSTASCII_STRINGPARAM(" ("));
- theArea += theDbName;
- theArea += ')';
-
- //aFtArea.SetText( theArea );
- //theArea.Insert( aStrAreaLabel, 0 );
- //aFtAreaLabel.SetText( theArea );
-
- aBtnHeader.SetText( aStrColLabel );
- }
-#endif /* TEST_LAYOUT */
-
- FillUserSortListBox();
-
- // get available languages
-
- aLbLanguage.SetLanguageList( LANG_LIST_ALL | LANG_LIST_ONLY_KNOWN, FALSE );
- aLbLanguage.InsertLanguage( LANGUAGE_SYSTEM );
-}
-
-//------------------------------------------------------------------------
-
-USHORT* ScTabPageSortOptions::GetRanges()
-{
- return pSortRanges;
-}
-
-// -----------------------------------------------------------------------
-
-#if ENABLE_LAYOUT
-#undef SfxTabPage
-#endif /* ENABLE_LAYOUT */
-SfxTabPage* ScTabPageSortOptions::Create(
- Window* pParent,
- const SfxItemSet& rArgSet )
-{
- return ( new ScTabPageSortOptions( pParent, rArgSet ) );
-}
-
-// -----------------------------------------------------------------------
-
-void ScTabPageSortOptions::Reset( const SfxItemSet& /* rArgSet */ )
-{
- if ( rSortData.bUserDef )
- {
- aBtnSortUser.Check( TRUE );
- aLbSortUser.Enable();
- aLbSortUser.SelectEntryPos( rSortData.nUserIndex );
- }
- else
- {
- aBtnSortUser.Check( FALSE );
- aLbSortUser.Disable();
- aLbSortUser.SelectEntryPos( 0 );
- }
-
- aBtnCase.Check ( rSortData.bCaseSens );
- aBtnFormats.Check ( rSortData.bIncludePattern );
- aBtnHeader.Check ( rSortData.bHasHeader );
- aBtnNaturalSort.Check ( rSortData.bNaturalSort );
-
- if ( rSortData.bByRow )
- {
- aBtnTopDown.Check();
- aBtnHeader.SetText( aStrColLabel );
- }
- else
- {
- aBtnLeftRight.Check();
- aBtnHeader.SetText( aStrRowLabel );
- }
-
- LanguageType eLang = MsLangId::convertLocaleToLanguage( rSortData.aCollatorLocale );
- if ( eLang == LANGUAGE_DONTKNOW )
- eLang = LANGUAGE_SYSTEM;
- aLbLanguage.SelectLanguage( eLang );
- FillAlgorHdl( &aLbLanguage ); // get algorithms, select default
- if ( rSortData.aCollatorAlgorithm.Len() )
- aLbAlgorithm.SelectEntry( pColRes->GetTranslation( rSortData.aCollatorAlgorithm ) );
-
- if ( pDoc && !rSortData.bInplace )
- {
- String aStr;
- USHORT nFormat = (rSortData.nDestTab != pViewData->GetTabNo())
- ? SCR_ABS_3D
- : SCR_ABS;
-
- theOutPos.Set( rSortData.nDestCol,
- rSortData.nDestRow,
- rSortData.nDestTab );
-
- theOutPos.Format( aStr, nFormat, pDoc, pDoc->GetAddressConvention() );
- aBtnCopyResult.Check();
- aLbOutPos.Enable();
- aEdOutPos.Enable();
- aEdOutPos.SetText( aStr );
- EdOutPosModHdl( &aEdOutPos );
- aEdOutPos.GrabFocus();
- aEdOutPos.SetSelection( Selection( 0, SELECTION_MAX ) );
- }
- else
- {
- aBtnCopyResult.Check( FALSE );
- aLbOutPos.Disable();
- aEdOutPos.Disable();
- aEdOutPos.SetText( EMPTY_STRING );
- }
-}
-
-// -----------------------------------------------------------------------
-
-BOOL ScTabPageSortOptions::FillItemSet( SfxItemSet& rArgSet )
-{
- ScSortParam theSortData = rSortData;
- if (pDlg)
- {
- const SfxItemSet* pExample = pDlg->GetExampleSet();
- const SfxPoolItem* pItem;
- if ( pExample && pExample->GetItemState( nWhichSort, TRUE, &pItem ) == SFX_ITEM_SET )
- theSortData = ((const ScSortItem*)pItem)->GetSortData();
- }
-
- theSortData.bByRow = aBtnTopDown.IsChecked();
- theSortData.bHasHeader = aBtnHeader.IsChecked();
- theSortData.bCaseSens = aBtnCase.IsChecked();
- theSortData.bNaturalSort = aBtnNaturalSort.IsChecked();
- theSortData.bIncludePattern = aBtnFormats.IsChecked();
- theSortData.bInplace = !aBtnCopyResult.IsChecked();
- theSortData.nDestCol = theOutPos.Col();
- theSortData.nDestRow = theOutPos.Row();
- theSortData.nDestTab = theOutPos.Tab();
- theSortData.bUserDef = aBtnSortUser.IsChecked();
- theSortData.nUserIndex = (aBtnSortUser.IsChecked())
- ? aLbSortUser.GetSelectEntryPos()
- : 0;
-
- // get locale
- LanguageType eLang = aLbLanguage.GetSelectLanguage();
- theSortData.aCollatorLocale = MsLangId::convertLanguageToLocale( eLang, false );
-
- // get algorithm
- String sAlg;
- if ( eLang != LANGUAGE_SYSTEM )
- {
- uno::Sequence<rtl::OUString> aAlgos = pColWrap->listCollatorAlgorithms(
- theSortData.aCollatorLocale );
- USHORT nSel = aLbAlgorithm.GetSelectEntryPos();
- if ( nSel < aAlgos.getLength() )
- sAlg = aAlgos[nSel];
- }
- theSortData.aCollatorAlgorithm = sAlg;
-
-#if !TEST_LAYOUT
- rArgSet.Put( ScSortItem( SCITEM_SORTDATA, &theSortData ) );
-#endif /* TEST_LAYOUT */
- return TRUE;
-}
-
-// -----------------------------------------------------------------------
-
-// fuer Datenaustausch ohne Dialog-Umweg: (! noch zu tun !)
-// void ScTabPageSortOptions::ActivatePage( const SfxItemSet& rSet )
-void ScTabPageSortOptions::ActivatePage()
-{
- if ( pDlg )
- {
- if ( aBtnHeader.IsChecked() != pDlg->GetHeaders() )
- {
- aBtnHeader.Check( pDlg->GetHeaders() );
- }
-
- if ( aBtnTopDown.IsChecked() != pDlg->GetByRows() )
- {
- aBtnTopDown.Check( pDlg->GetByRows() );
- aBtnLeftRight.Check( !pDlg->GetByRows() );
- }
-
- aBtnHeader.SetText( (pDlg->GetByRows())
- ? aStrColLabel
- : aStrRowLabel );
- }
-}
-
-// -----------------------------------------------------------------------
-
-int ScTabPageSortOptions::DeactivatePage( SfxItemSet* pSetP )
-{
- BOOL bPosInputOk = TRUE;
-
- if ( aBtnCopyResult.IsChecked() )
- {
- String thePosStr = aEdOutPos.GetText();
- ScAddress thePos;
- xub_StrLen nColonPos = thePosStr.Search( ':' );
-
- if ( STRING_NOTFOUND != nColonPos )
- thePosStr.Erase( nColonPos );
-
- if ( pViewData )
- {
- // visible table is default for input without table
- // must be changed to GetRefTabNo when sorting has RefInput!
- thePos.SetTab( pViewData->GetTabNo() );
- }
-
- USHORT nResult = thePos.Parse( thePosStr, pDoc, pDoc->GetAddressConvention() );
-
- bPosInputOk = ( SCA_VALID == (nResult & SCA_VALID) );
-
- if ( !bPosInputOk )
- {
-#if !ENABLE_LAYOUT
- ErrorBox( this, WinBits( WB_OK | WB_DEF_OK ),
- ScGlobal::GetRscString( STR_INVALID_TABREF )
- ).Execute();
-#endif /* ENABLE_LAYOUT */
- aEdOutPos.GrabFocus();
- aEdOutPos.SetSelection( Selection( 0, SELECTION_MAX ) );
- theOutPos.Set(0,0,0);
- }
- else
- {
- aEdOutPos.SetText( thePosStr );
- theOutPos = thePos;
- }
- }
-
- if ( pDlg && bPosInputOk )
- {
- pDlg->SetHeaders( aBtnHeader.IsChecked() );
- pDlg->SetByRows ( aBtnTopDown.IsChecked() );
- }
-
- if ( pSetP && bPosInputOk )
- FillItemSet( *pSetP );
-
- return bPosInputOk ? SfxTabPage::LEAVE_PAGE : SfxTabPage::KEEP_PAGE;
-}
-
-// -----------------------------------------------------------------------
-
-void ScTabPageSortOptions::FillUserSortListBox()
-{
- ScUserList* pUserLists = ScGlobal::GetUserList();
-
- aLbSortUser.Clear();
- if ( pUserLists )
- {
- USHORT nCount = pUserLists->GetCount();
- if ( nCount > 0 )
- for ( USHORT i=0; i<nCount; i++ )
- aLbSortUser.InsertEntry( (*pUserLists)[i]->GetString() );
- }
-}
-
-// -----------------------------------------------------------------------
-// Handler:
-
-IMPL_LINK( ScTabPageSortOptions, EnableHdl, CheckBox *, pBox )
-{
- if ( pBox == &aBtnCopyResult )
- {
- if ( pBox->IsChecked() )
- {
- aLbOutPos.Enable();
- aEdOutPos.Enable();
- aEdOutPos.GrabFocus();
- }
- else
- {
- aLbOutPos.Disable();
- aEdOutPos.Disable();
- }
- }
- else if ( pBox == &aBtnSortUser )
- {
- if ( pBox->IsChecked() )
- {
- aLbSortUser.Enable();
- aLbSortUser.GrabFocus();
- }
- else
- aLbSortUser.Disable();
- }
- return 0;
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( ScTabPageSortOptions, SelOutPosHdl, ListBox *, pLb )
-{
- if ( pLb == &aLbOutPos )
- {
- String aString;
- USHORT nSelPos = aLbOutPos.GetSelectEntryPos();
-
- if ( nSelPos > 0 )
- aString = *(String*)aLbOutPos.GetEntryData( nSelPos );
-
- aEdOutPos.SetText( aString );
- }
- return 0;
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( ScTabPageSortOptions, SortDirHdl, RadioButton *, pBtn )
-{
- if ( pBtn == &aBtnTopDown )
- {
- aBtnHeader.SetText( aStrColLabel );
- }
- else if ( pBtn == &aBtnLeftRight )
- {
- aBtnHeader.SetText( aStrRowLabel );
- }
- return 0;
-}
-
-// -----------------------------------------------------------------------
-
-void ScTabPageSortOptions::EdOutPosModHdl( Edit* pEd )
-{
- if ( pEd == &aEdOutPos )
- {
- String theCurPosStr = aEdOutPos.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 = aLbOutPos.GetEntryCount();
-
- for ( i=2; i<nCount && !bFound; i++ )
- {
- pStr = (String*)aLbOutPos.GetEntryData( i );
- bFound = (theCurPosStr == *pStr);
- }
-
- if ( bFound )
- aLbOutPos.SelectEntryPos( --i );
- else
- aLbOutPos.SelectEntryPos( 0 );
- }
- }
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( ScTabPageSortOptions, FillAlgorHdl, void *, EMPTYARG )
-{
- aLbAlgorithm.SetUpdateMode( FALSE );
- aLbAlgorithm.Clear();
-
- LanguageType eLang = aLbLanguage.GetSelectLanguage();
- if ( eLang == LANGUAGE_SYSTEM )
- {
- // for LANGUAGE_SYSTEM no algorithm can be selected because
- // it wouldn't necessarily exist for other languages
- // -> leave list box empty if LANGUAGE_SYSTEM is selected
- aFtAlgorithm.Enable( FALSE ); // nothing to select
- aLbAlgorithm.Enable( FALSE ); // nothing to select
- }
- else
- {
- lang::Locale aLocale( MsLangId::convertLanguageToLocale( eLang ));
- uno::Sequence<rtl::OUString> aAlgos = pColWrap->listCollatorAlgorithms( aLocale );
-
- long nCount = aAlgos.getLength();
- const rtl::OUString* pArray = aAlgos.getConstArray();
- for (long i=0; i<nCount; i++)
- {
- String sAlg = pArray[i];
- String sUser = pColRes->GetTranslation( sAlg );
- aLbAlgorithm.InsertEntry( sUser, LISTBOX_APPEND );
- }
- aLbAlgorithm.SelectEntryPos( 0 ); // first entry is default
- aFtAlgorithm.Enable( nCount > 1 ); // enable only if there is a choice
- aLbAlgorithm.Enable( nCount > 1 ); // enable only if there is a choice
- }
-
- aLbAlgorithm.SetUpdateMode( TRUE );
- return 0;
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */