LCOV - code coverage report
Current view: top level - libreoffice/sc/source/ui/dbgui - tpsubt.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 297 0.0 %
Date: 2012-12-27 Functions: 0 44 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #undef SC_DLLIMPLEMENTATION
      21             : 
      22             : #include "scitems.hxx"
      23             : #include "uiitems.hxx"
      24             : #include "global.hxx"
      25             : #include "userlist.hxx"
      26             : #include "viewdata.hxx"
      27             : #include "document.hxx"
      28             : #include "scresid.hxx"
      29             : #include "sc.hrc"       // -> Slot IDs
      30             : 
      31             : #include "subtdlg.hxx"
      32             : #include "subtdlg.hrc"
      33             : #include "tpsubt.hxx"
      34             : 
      35             : //========================================================================
      36             : // Zwischenergebnisgruppen-Tabpage:
      37             : 
      38           0 : ScTpSubTotalGroup::ScTpSubTotalGroup( Window* pParent, sal_uInt16 nResId,
      39             :                                       const SfxItemSet& rArgSet )
      40             :         :   SfxTabPage      ( pParent,
      41             :                               ScResId( nResId ),
      42             :                               rArgSet ),
      43             :             aFtGroup        ( this, ScResId( FT_GROUP ) ),
      44             :             aLbGroup        ( this, ScResId( LB_GROUP ) ),
      45             :             aFtColumns      ( this, ScResId( FT_COLUMNS ) ),
      46             :             aLbColumns      ( this, ScResId( WND_COLUMNS ) ),
      47             :             aFtFunctions    ( this, ScResId( FT_FUNCTIONS ) ),
      48             :             aLbFunctions    ( this, ScResId( LB_FUNCTIONS ) ),
      49             :             aStrNone        ( SC_RESSTR( SCSTR_NONE ) ),
      50             :             aStrColumn      ( SC_RESSTR( SCSTR_COLUMN ) ),
      51             :             pViewData       ( NULL ),
      52             :             pDoc            ( NULL ),
      53           0 :             nWhichSubTotals ( rArgSet.GetPool()->GetWhich( SID_SUBTOTALS ) ),
      54             :             rSubTotalData   ( ((const ScSubTotalItem&)
      55           0 :                               rArgSet.Get( nWhichSubTotals )).
      56           0 :                                 GetSubTotalData() ),
      57           0 :             nFieldCount     ( 0 )
      58             : {
      59             :     // Font is correctly initialized by SvTreeListBox ctor
      60           0 :     aLbColumns.SetSelectionMode( SINGLE_SELECTION );
      61           0 :     aLbColumns.SetDragDropMode( SV_DRAGDROP_NONE );
      62           0 :     aLbColumns.SetSpaceBetweenEntries( 0 );
      63           0 :     aLbColumns.Show();
      64             : 
      65           0 :     Init ();
      66           0 :     FreeResource();
      67           0 : }
      68             : 
      69             : // -----------------------------------------------------------------------
      70             : 
      71           0 : ScTpSubTotalGroup::~ScTpSubTotalGroup()
      72             : {
      73           0 :     sal_uInt16  nCount = (sal_uInt16)aLbColumns.GetEntryCount();
      74             : 
      75           0 :     if ( nCount > 0 )
      76             :     {
      77           0 :         sal_uInt16* pData = NULL;
      78             : 
      79           0 :         for ( sal_uInt16 i=0; i<nCount; i++ )
      80             :         {
      81           0 :             pData = (sal_uInt16*)(aLbColumns.GetEntryData( i ));
      82             :             OSL_ENSURE( pData, "EntryData not found" );
      83             : 
      84           0 :             delete pData;
      85             :         }
      86             :     }
      87           0 : }
      88             : 
      89             : // -----------------------------------------------------------------------
      90             : 
      91           0 : void ScTpSubTotalGroup::Init()
      92             : {
      93             :     const ScSubTotalItem& rSubTotalItem = (const ScSubTotalItem&)
      94           0 :                                           GetItemSet().Get( nWhichSubTotals );
      95             : 
      96           0 :     pViewData   = rSubTotalItem.GetViewData();
      97           0 :     pDoc        = ( pViewData ) ? pViewData->GetDocument() : NULL;
      98             : 
      99             :     OSL_ENSURE( pViewData && pDoc, "ViewData or Document not found :-(" );
     100             : 
     101           0 :     aLbGroup.SetSelectHdl       ( LINK( this, ScTpSubTotalGroup, SelectHdl ) );
     102           0 :     aLbColumns.SetSelectHdl     ( LINK( this, ScTpSubTotalGroup, SelectHdl ) );
     103           0 :     aLbColumns.SetCheckButtonHdl    ( LINK( this, ScTpSubTotalGroup, CheckHdl ) );
     104           0 :     aLbFunctions.SetSelectHdl   ( LINK( this, ScTpSubTotalGroup, SelectHdl ) );
     105             : 
     106           0 :     nFieldArr[0] = 0;
     107           0 :     FillListBoxes();
     108           0 : }
     109             : 
     110             : // -----------------------------------------------------------------------
     111             : 
     112           0 : bool ScTpSubTotalGroup::DoReset( sal_uInt16             nGroupNo,
     113             :                                  const SfxItemSet&  rArgSet  )
     114             : {
     115           0 :     sal_uInt16 nGroupIdx = 0;
     116             : 
     117             :     OSL_ENSURE( (nGroupNo<=3) && (nGroupNo>0), "Invalid group" );
     118             : 
     119           0 :     if ( (nGroupNo > 3) || (nGroupNo == 0) )
     120           0 :         return false;
     121             :     else
     122           0 :         nGroupIdx = nGroupNo-1;
     123             : 
     124             :     //----------------------------------------------------------
     125             : 
     126             :     // first we have to clear the listboxes...
     127           0 :     for ( sal_uInt16 nLbEntry = 0; nLbEntry < aLbColumns.GetEntryCount(); ++nLbEntry )
     128             :     {
     129           0 :         aLbColumns.CheckEntryPos( nLbEntry, false );
     130           0 :         *((sal_uInt16*)aLbColumns.GetEntryData( nLbEntry )) = 0;
     131             :     }
     132           0 :     aLbFunctions.SelectEntryPos( 0 );
     133             : 
     134             :     ScSubTotalParam theSubTotalData( ((const ScSubTotalItem&)
     135           0 :                                       rArgSet.Get( nWhichSubTotals )).
     136           0 :                                             GetSubTotalData() );
     137             : 
     138           0 :     if ( theSubTotalData.bGroupActive[nGroupIdx] )
     139             :     {
     140           0 :         SCCOL           nField      = theSubTotalData.nField[nGroupIdx];
     141           0 :         SCCOL           nSubTotals  = theSubTotalData.nSubTotals[nGroupIdx];
     142           0 :         SCCOL*          pSubTotals  = theSubTotalData.pSubTotals[nGroupIdx];
     143           0 :         ScSubTotalFunc* pFunctions  = theSubTotalData.pFunctions[nGroupIdx];
     144             : 
     145           0 :         aLbGroup.SelectEntryPos( GetFieldSelPos( nField )+1 );
     146             : 
     147           0 :         sal_uInt16 nFirstChecked = 0;
     148           0 :         for ( sal_uInt16 i=0; i<nSubTotals; i++ )
     149             :         {
     150           0 :             sal_uInt16  nCheckPos = GetFieldSelPos( pSubTotals[i] );
     151           0 :             sal_uInt16* pFunction = (sal_uInt16*)aLbColumns.GetEntryData( nCheckPos );
     152             : 
     153           0 :             aLbColumns.CheckEntryPos( nCheckPos );
     154           0 :             *pFunction = FuncToLbPos( pFunctions[i] );
     155             : 
     156           0 :             if (i == 0 || (i > 0 && nCheckPos < nFirstChecked))
     157           0 :                 nFirstChecked = nCheckPos;
     158             :         }
     159             :         // Select the first checked field from the top.
     160           0 :         aLbColumns.SelectEntryPos(nFirstChecked);
     161             :     }
     162             :     else
     163             :     {
     164           0 :         aLbGroup.SelectEntryPos( (nGroupNo == 1) ? 1 : 0 );
     165           0 :         aLbColumns.SelectEntryPos( 0 );
     166           0 :         aLbFunctions.SelectEntryPos( 0 );
     167             :     }
     168             : 
     169           0 :     return true;
     170             : }
     171             : 
     172             : // -----------------------------------------------------------------------
     173             : 
     174           0 : bool ScTpSubTotalGroup::DoFillItemSet( sal_uInt16       nGroupNo,
     175             :                                        SfxItemSet&  rArgSet  )
     176             : {
     177           0 :     sal_uInt16 nGroupIdx = 0;
     178             : 
     179             :     OSL_ENSURE( (nGroupNo<=3) && (nGroupNo>0), "Invalid group" );
     180             :     OSL_ENSURE(    (aLbGroup.GetEntryCount() > 0)
     181             :                 && (aLbColumns.GetEntryCount() > 0)
     182             :                 && (aLbFunctions.GetEntryCount() > 0),
     183             :                 "Non-initialized Lists" );
     184             : 
     185             : 
     186           0 :     if (  (nGroupNo > 3) || (nGroupNo == 0)
     187           0 :         || (aLbGroup.GetEntryCount() == 0)
     188           0 :         || (aLbColumns.GetEntryCount() == 0)
     189           0 :         || (aLbFunctions.GetEntryCount() == 0)
     190             :        )
     191           0 :         return false;
     192             :     else
     193           0 :         nGroupIdx = nGroupNo-1;
     194             : 
     195             :     //----------------------------------------------------------
     196             : 
     197           0 :     ScSubTotalParam theSubTotalData;            // auslesen, wenn schon teilweise gefuellt
     198           0 :     SfxTabDialog* pDlg = GetTabDialog();
     199           0 :     if ( pDlg )
     200             :     {
     201           0 :         const SfxItemSet* pExample = pDlg->GetExampleSet();
     202             :         const SfxPoolItem* pItem;
     203           0 :         if ( pExample && pExample->GetItemState( nWhichSubTotals, true, &pItem ) == SFX_ITEM_SET )
     204           0 :             theSubTotalData = ((const ScSubTotalItem*)pItem)->GetSubTotalData();
     205             :     }
     206             : 
     207           0 :     ScSubTotalFunc* pFunctions  = NULL;
     208           0 :     SCCOL*          pSubTotals  = NULL;
     209           0 :     sal_uInt16          nGroup      = aLbGroup.GetSelectEntryPos();
     210           0 :     sal_uInt16          nEntryCount = (sal_uInt16)aLbColumns.GetEntryCount();
     211           0 :     sal_uInt16          nCheckCount = aLbColumns.GetCheckedEntryCount();
     212             : 
     213           0 :     theSubTotalData.nCol1                   = rSubTotalData.nCol1;
     214           0 :     theSubTotalData.nRow1                   = rSubTotalData.nRow1;
     215           0 :     theSubTotalData.nCol2                   = rSubTotalData.nCol2;
     216           0 :     theSubTotalData.nRow2                   = rSubTotalData.nRow2;
     217           0 :     theSubTotalData.bGroupActive[nGroupIdx] = (nGroup != 0);
     218           0 :     theSubTotalData.nField[nGroupIdx]       = (nGroup != 0)
     219           0 :                                                 ? nFieldArr[nGroup-1]
     220           0 :                                                 : static_cast<SCCOL>(0);
     221             : 
     222           0 :     if ( nEntryCount>0 && nCheckCount>0 && nGroup!=0 )
     223             :     {
     224           0 :         sal_uInt16 nFunction    = 0;
     225             : 
     226           0 :         pSubTotals = new SCCOL          [nCheckCount];
     227           0 :         pFunctions = new ScSubTotalFunc [nCheckCount];
     228             : 
     229           0 :         for ( sal_uInt16 i=0, nCheck=0; i<nEntryCount; i++ )
     230             :         {
     231           0 :             if ( aLbColumns.IsChecked( i ) )
     232             :             {
     233             :                 OSL_ENSURE( nCheck <= nCheckCount,
     234             :                             "Range error :-(" );
     235           0 :                 nFunction = *((sal_uInt16*)aLbColumns.GetEntryData( i ));
     236           0 :                 pSubTotals[nCheck] = nFieldArr[i];
     237           0 :                 pFunctions[nCheck] = LbPosToFunc( nFunction );
     238           0 :                 nCheck++;
     239             :             }
     240             :         }
     241             :         theSubTotalData.SetSubTotals( nGroupNo,      // Gruppen-Nr.
     242             :                                       pSubTotals,
     243             :                                       pFunctions,
     244           0 :                                       nCheckCount ); // Anzahl der Array-Elemente
     245             : 
     246             :     }
     247             : 
     248           0 :     rArgSet.Put( ScSubTotalItem( SCITEM_SUBTDATA, &theSubTotalData ) );
     249             : 
     250           0 :     if ( pSubTotals ) delete [] pSubTotals;
     251           0 :     if ( pFunctions ) delete [] pFunctions;
     252             : 
     253           0 :     return true;
     254             : }
     255             : 
     256             : // -----------------------------------------------------------------------
     257             : 
     258           0 : void ScTpSubTotalGroup::FillListBoxes()
     259             : {
     260             :     OSL_ENSURE( pViewData && pDoc, "ViewData or Document not found :-/" );
     261             : 
     262           0 :     if ( pViewData && pDoc )
     263             :     {
     264           0 :         SCCOL   nFirstCol   = rSubTotalData.nCol1;
     265           0 :         SCROW   nFirstRow   = rSubTotalData.nRow1;
     266           0 :         SCTAB   nTab        = pViewData->GetTabNo();
     267           0 :         SCCOL   nMaxCol     = rSubTotalData.nCol2;
     268             :         SCCOL   col;
     269           0 :         rtl::OUString  aFieldName;
     270             : 
     271           0 :         aLbGroup.Clear();
     272           0 :         aLbColumns.Clear();
     273           0 :         aLbGroup.InsertEntry( aStrNone, 0 );
     274             : 
     275           0 :         sal_uInt16 i=0;
     276           0 :         for ( col=nFirstCol; col<=nMaxCol && i<SC_MAXFIELDS; col++ )
     277             :         {
     278           0 :             pDoc->GetString( col, nFirstRow, nTab, aFieldName );
     279           0 :             if ( aFieldName.isEmpty() )
     280             :             {
     281           0 :                 rtl::OUStringBuffer aBuf;
     282           0 :                 aBuf.append(aStrColumn);
     283           0 :                 aFieldName = aBuf.makeStringAndClear().replaceAll("%1", ScColToAlpha( col ));
     284             :             }
     285           0 :             nFieldArr[i] = col;
     286           0 :             aLbGroup.InsertEntry( aFieldName, i+1 );
     287           0 :             aLbColumns.InsertEntry( aFieldName, i );
     288           0 :             aLbColumns.SetEntryData( i, new sal_uInt16(0) );
     289           0 :             i++;
     290             :         }
     291             :         // Nachtraegliche "Konstanteninitialisierung":
     292           0 :         (sal_uInt16&)nFieldCount = i;
     293             :     }
     294           0 : }
     295             : 
     296             : // -----------------------------------------------------------------------
     297             : 
     298           0 : sal_uInt16 ScTpSubTotalGroup::GetFieldSelPos( SCCOL nField )
     299             : {
     300           0 :     sal_uInt16  nFieldPos   = 0;
     301           0 :     bool    bFound      = false;
     302             : 
     303           0 :     for ( sal_uInt16 n=0; n<nFieldCount && !bFound; n++ )
     304             :     {
     305           0 :         if ( nFieldArr[n] == nField )
     306             :         {
     307           0 :             nFieldPos = n;
     308           0 :             bFound = true;
     309             :         }
     310             :     }
     311             : 
     312           0 :     return nFieldPos;
     313             : }
     314             : 
     315             : // -----------------------------------------------------------------------
     316             : 
     317           0 : ScSubTotalFunc ScTpSubTotalGroup::LbPosToFunc( sal_uInt16 nPos )
     318             : {
     319           0 :     switch ( nPos )
     320             :     {
     321             : //      case  0:    return SUBTOTAL_FUNC_NONE;
     322           0 :         case  2:    return SUBTOTAL_FUNC_AVE;
     323           0 :         case  6:    return SUBTOTAL_FUNC_CNT;
     324           0 :         case  1:    return SUBTOTAL_FUNC_CNT2;
     325           0 :         case  3:    return SUBTOTAL_FUNC_MAX;
     326           0 :         case  4:    return SUBTOTAL_FUNC_MIN;
     327           0 :         case  5:    return SUBTOTAL_FUNC_PROD;
     328           0 :         case  7:    return SUBTOTAL_FUNC_STD;
     329           0 :         case  8:    return SUBTOTAL_FUNC_STDP;
     330           0 :         case  0:    return SUBTOTAL_FUNC_SUM;
     331           0 :         case  9:    return SUBTOTAL_FUNC_VAR;
     332           0 :         case 10:    return SUBTOTAL_FUNC_VARP;
     333             :         default:
     334             :             OSL_FAIL( "ScTpSubTotalGroup::LbPosToFunc" );
     335           0 :             return SUBTOTAL_FUNC_NONE;
     336             :     }
     337             : }
     338             : 
     339             : // -----------------------------------------------------------------------
     340             : 
     341           0 : sal_uInt16 ScTpSubTotalGroup::FuncToLbPos( ScSubTotalFunc eFunc )
     342             : {
     343           0 :     switch ( eFunc )
     344             :     {
     345             : //      case SUBTOTAL_FUNC_NONE:    return 0;
     346           0 :         case SUBTOTAL_FUNC_AVE:     return 2;
     347           0 :         case SUBTOTAL_FUNC_CNT:     return 6;
     348           0 :         case SUBTOTAL_FUNC_CNT2:    return 1;
     349           0 :         case SUBTOTAL_FUNC_MAX:     return 3;
     350           0 :         case SUBTOTAL_FUNC_MIN:     return 4;
     351           0 :         case SUBTOTAL_FUNC_PROD:    return 5;
     352           0 :         case SUBTOTAL_FUNC_STD:     return 7;
     353           0 :         case SUBTOTAL_FUNC_STDP:    return 8;
     354           0 :         case SUBTOTAL_FUNC_SUM:     return 0;
     355           0 :         case SUBTOTAL_FUNC_VAR:     return 9;
     356           0 :         case SUBTOTAL_FUNC_VARP:    return 10;
     357             :         default:
     358             :             OSL_FAIL( "ScTpSubTotalGroup::FuncToLbPos" );
     359           0 :             return 0;
     360             :     }
     361             : }
     362             : 
     363             : // -----------------------------------------------------------------------
     364             : // Handler:
     365             : //---------
     366             : 
     367           0 : IMPL_LINK( ScTpSubTotalGroup, SelectHdl, ListBox *, pLb )
     368             : {
     369           0 :     if (   (aLbColumns.GetEntryCount() > 0)
     370           0 :         && (aLbColumns.GetSelectionCount() > 0) )
     371             :     {
     372           0 :         sal_uInt16      nFunction   = aLbFunctions.GetSelectEntryPos();
     373           0 :         sal_uInt16      nColumn     = aLbColumns.GetSelectEntryPos();
     374           0 :         sal_uInt16*     pFunction   = (sal_uInt16*)aLbColumns.GetEntryData( nColumn );
     375             : 
     376             :         OSL_ENSURE( pFunction, "EntryData nicht gefunden!" );
     377           0 :         if ( !pFunction )
     378           0 :             return 0;
     379             : 
     380           0 :         if ( ((SvxCheckListBox*)pLb) == &aLbColumns )
     381             :         {
     382           0 :             aLbFunctions.SelectEntryPos( *pFunction );
     383             :         }
     384           0 :         else if ( pLb == &aLbFunctions )
     385             :         {
     386           0 :             *pFunction = nFunction;
     387           0 :             aLbColumns.CheckEntryPos( nColumn, true );
     388             :         }
     389             :     }
     390           0 :     return 0;
     391             : }
     392             : 
     393             : // -----------------------------------------------------------------------
     394             : 
     395           0 : IMPL_LINK( ScTpSubTotalGroup, CheckHdl, ListBox *, pLb )
     396             : {
     397           0 :     if ( ((SvxCheckListBox*)pLb) == &aLbColumns )
     398             :     {
     399           0 :         SvTreeListEntry* pEntry = aLbColumns.GetHdlEntry();
     400             : 
     401           0 :         if ( pEntry )
     402             :         {
     403           0 :             aLbColumns.SelectEntryPos( (sal_uInt16)aLbColumns.GetModel()->GetAbsPos( pEntry ) );
     404           0 :             SelectHdl( pLb );
     405             :         }
     406             :     }
     407           0 :     return 0;
     408             : }
     409             : 
     410             : //========================================================================
     411             : // Abgeleitete Gruppen-TabPages:
     412             : 
     413           0 : SfxTabPage* ScTpSubTotalGroup1::Create( Window*         pParent,
     414             :                                                  const SfxItemSet&  rArgSet )
     415           0 :     { return ( new ScTpSubTotalGroup1( pParent, rArgSet ) ); }
     416             : 
     417             : // -----------------------------------------------------------------------
     418             : 
     419           0 : SfxTabPage* ScTpSubTotalGroup2::Create( Window*          pParent,
     420             :                                        const SfxItemSet&    rArgSet )
     421           0 :     { return ( new ScTpSubTotalGroup2( pParent, rArgSet ) ); }
     422             : 
     423             : // -----------------------------------------------------------------------
     424             : 
     425           0 : SfxTabPage* ScTpSubTotalGroup3::Create( Window*          pParent,
     426             :                                        const SfxItemSet&    rArgSet )
     427           0 :     { return ( new ScTpSubTotalGroup3( pParent, rArgSet ) ); }
     428             : 
     429             : // -----------------------------------------------------------------------
     430             : 
     431           0 : ScTpSubTotalGroup1::ScTpSubTotalGroup1( Window* pParent, const SfxItemSet& rArgSet ) :
     432           0 :     ScTpSubTotalGroup( pParent, RID_SCPAGE_SUBT_GROUP1, rArgSet )
     433           0 : {}
     434             : 
     435           0 : ScTpSubTotalGroup2::ScTpSubTotalGroup2( Window* pParent, const SfxItemSet& rArgSet ) :
     436           0 :     ScTpSubTotalGroup( pParent, RID_SCPAGE_SUBT_GROUP2, rArgSet )
     437           0 : {}
     438             : 
     439           0 : ScTpSubTotalGroup3::ScTpSubTotalGroup3( Window* pParent, const SfxItemSet& rArgSet ) :
     440           0 :     ScTpSubTotalGroup( pParent, RID_SCPAGE_SUBT_GROUP3, rArgSet )
     441           0 : {}
     442             : 
     443             : // -----------------------------------------------------------------------
     444             : 
     445             : 
     446             : #define RESET(i) (ScTpSubTotalGroup::DoReset( (i), rArgSet ))
     447           0 : void ScTpSubTotalGroup1::Reset( const SfxItemSet& rArgSet ) { RESET(1); }
     448           0 : void ScTpSubTotalGroup2::Reset( const SfxItemSet& rArgSet ) { RESET(2); }
     449           0 : void ScTpSubTotalGroup3::Reset( const SfxItemSet& rArgSet ) { RESET(3); }
     450             : #undef RESET
     451             : 
     452             : // -----------------------------------------------------------------------
     453             : 
     454             : #define FILLSET(i) (ScTpSubTotalGroup::DoFillItemSet( (i), rArgSet ))
     455           0 : sal_Bool ScTpSubTotalGroup1::FillItemSet( SfxItemSet& rArgSet ) { return FILLSET(1); }
     456           0 : sal_Bool ScTpSubTotalGroup2::FillItemSet( SfxItemSet& rArgSet ) { return FILLSET(2); }
     457           0 : sal_Bool ScTpSubTotalGroup3::FillItemSet( SfxItemSet& rArgSet ) { return FILLSET(3); }
     458             : #undef FILL
     459             : 
     460             : //========================================================================
     461             : // Optionen-Tabpage:
     462             : 
     463           0 : ScTpSubTotalOptions::ScTpSubTotalOptions( Window*               pParent,
     464             :                                           const SfxItemSet&     rArgSet )
     465             : 
     466             :         :   SfxTabPage      ( pParent,
     467             :                               ScResId( RID_SCPAGE_SUBT_OPTIONS ),
     468             :                               rArgSet ),
     469             :             aFlGroup        ( this, ScResId( FL_GROUP ) ),
     470             :             aBtnPagebreak   ( this, ScResId( BTN_PAGEBREAK ) ),
     471             :             aBtnCase        ( this, ScResId( BTN_CASE ) ),
     472             :             aBtnSort        ( this, ScResId( BTN_SORT ) ),
     473             :             aFlSort         ( this, ScResId( FL_SORT ) ),
     474             :             aBtnAscending   ( this, ScResId( BTN_ASCENDING ) ),
     475             :             aBtnDescending  ( this, ScResId( BTN_DESCENDING ) ),
     476             :             aBtnFormats     ( this, ScResId( BTN_FORMATS ) ),
     477             :             aBtnUserDef     ( this, ScResId( BTN_USERDEF ) ),
     478             :             aLbUserDef      ( this, ScResId( LB_USERDEF ) ),
     479             :             pViewData       ( NULL ),
     480             :             pDoc            ( NULL ),
     481           0 :             nWhichSubTotals ( rArgSet.GetPool()->GetWhich( SID_SUBTOTALS ) ),
     482             :             rSubTotalData   ( ((const ScSubTotalItem&)
     483           0 :                               rArgSet.Get( nWhichSubTotals )).
     484           0 :                                 GetSubTotalData() )
     485             : {
     486           0 :     Init();
     487           0 :     FreeResource();
     488             : 
     489           0 :     aLbUserDef.SetAccessibleRelationLabeledBy(&aBtnUserDef);
     490           0 :     aLbUserDef.SetAccessibleName(aBtnUserDef.GetText());
     491           0 : }
     492             : 
     493             : // -----------------------------------------------------------------------
     494             : 
     495           0 : ScTpSubTotalOptions::~ScTpSubTotalOptions()
     496             : {
     497           0 : }
     498             : 
     499             : // -----------------------------------------------------------------------
     500             : 
     501           0 : void ScTpSubTotalOptions::Init()
     502             : {
     503             :     const ScSubTotalItem& rSubTotalItem = (const ScSubTotalItem&)
     504           0 :                                           GetItemSet().Get( nWhichSubTotals );
     505             : 
     506           0 :     pViewData   = rSubTotalItem.GetViewData();
     507           0 :     pDoc        = ( pViewData ) ? pViewData->GetDocument() : NULL;
     508             : 
     509             :     OSL_ENSURE( pViewData && pDoc, "ViewData oder Document nicht gefunden!" );
     510             : 
     511           0 :     aBtnSort.SetClickHdl    ( LINK( this, ScTpSubTotalOptions, CheckHdl ) );
     512           0 :     aBtnUserDef.SetClickHdl ( LINK( this, ScTpSubTotalOptions, CheckHdl ) );
     513             : 
     514           0 :     FillUserSortListBox();
     515           0 : }
     516             : 
     517             : // -----------------------------------------------------------------------
     518             : 
     519           0 : SfxTabPage* ScTpSubTotalOptions::Create( Window*                 pParent,
     520             :                                           const SfxItemSet&     rArgSet )
     521             : {
     522           0 :     return ( new ScTpSubTotalOptions( pParent, rArgSet ) );
     523             : }
     524             : 
     525             : // -----------------------------------------------------------------------
     526             : 
     527           0 : void ScTpSubTotalOptions::Reset( const SfxItemSet& /* rArgSet */ )
     528             : {
     529           0 :     aBtnPagebreak.Check ( rSubTotalData.bPagebreak );
     530           0 :     aBtnCase.Check      ( rSubTotalData.bCaseSens );
     531           0 :     aBtnFormats.Check   ( rSubTotalData.bIncludePattern );
     532           0 :     aBtnSort.Check      ( rSubTotalData.bDoSort );
     533           0 :     aBtnAscending.Check ( rSubTotalData.bAscending );
     534           0 :     aBtnDescending.Check( !rSubTotalData.bAscending );
     535             : 
     536           0 :     if ( rSubTotalData.bUserDef )
     537             :     {
     538           0 :         aBtnUserDef.Check( true );
     539           0 :         aLbUserDef.Enable();
     540           0 :         aLbUserDef.SelectEntryPos( rSubTotalData.nUserIndex );
     541             :     }
     542             :     else
     543             :     {
     544           0 :         aBtnUserDef.Check( false );
     545           0 :         aLbUserDef.Disable();
     546           0 :         aLbUserDef.SelectEntryPos( 0 );
     547             :     }
     548             : 
     549           0 :     CheckHdl( &aBtnSort );
     550           0 : }
     551             : 
     552             : // -----------------------------------------------------------------------
     553             : 
     554           0 : sal_Bool ScTpSubTotalOptions::FillItemSet( SfxItemSet& rArgSet )
     555             : {
     556           0 :     ScSubTotalParam theSubTotalData;            // auslesen, wenn schon teilweise gefuellt
     557           0 :     SfxTabDialog* pDlg = GetTabDialog();
     558           0 :     if ( pDlg )
     559             :     {
     560           0 :         const SfxItemSet* pExample = pDlg->GetExampleSet();
     561             :         const SfxPoolItem* pItem;
     562           0 :         if ( pExample && pExample->GetItemState( nWhichSubTotals, true, &pItem ) == SFX_ITEM_SET )
     563           0 :             theSubTotalData = ((const ScSubTotalItem*)pItem)->GetSubTotalData();
     564             :     }
     565             : 
     566           0 :     theSubTotalData.bPagebreak      = aBtnPagebreak.IsChecked();
     567           0 :     theSubTotalData.bReplace        = true;
     568           0 :     theSubTotalData.bCaseSens       = aBtnCase.IsChecked();
     569           0 :     theSubTotalData.bIncludePattern = aBtnFormats.IsChecked();
     570           0 :     theSubTotalData.bDoSort         = aBtnSort.IsChecked();
     571           0 :     theSubTotalData.bAscending      = aBtnAscending.IsChecked();
     572           0 :     theSubTotalData.bUserDef        = aBtnUserDef.IsChecked();
     573           0 :     theSubTotalData.nUserIndex      = (aBtnUserDef.IsChecked())
     574           0 :                                     ? aLbUserDef.GetSelectEntryPos()
     575           0 :                                     : 0;
     576             : 
     577           0 :     rArgSet.Put( ScSubTotalItem( nWhichSubTotals, &theSubTotalData ) );
     578             : 
     579           0 :     return true;
     580             : }
     581             : 
     582             : // -----------------------------------------------------------------------
     583             : 
     584           0 : void ScTpSubTotalOptions::FillUserSortListBox()
     585             : {
     586           0 :     ScUserList* pUserLists = ScGlobal::GetUserList();
     587             : 
     588           0 :     aLbUserDef.Clear();
     589           0 :     if ( pUserLists )
     590             :     {
     591           0 :         size_t nCount = pUserLists->size();
     592           0 :         for ( size_t i=0; i<nCount; ++i )
     593           0 :             aLbUserDef.InsertEntry( (*pUserLists)[i]->GetString() );
     594             :     }
     595           0 : }
     596             : 
     597             : // -----------------------------------------------------------------------
     598             : // Handler:
     599             : 
     600           0 : IMPL_LINK( ScTpSubTotalOptions, CheckHdl, CheckBox *, pBox )
     601             : {
     602           0 :     if ( pBox == &aBtnSort )
     603             :     {
     604           0 :         if ( aBtnSort.IsChecked() )
     605             :         {
     606           0 :             aFlSort         .Enable();
     607           0 :             aBtnFormats     .Enable();
     608           0 :             aBtnUserDef     .Enable();
     609           0 :             aBtnAscending   .Enable();
     610           0 :             aBtnDescending  .Enable();
     611             : 
     612           0 :             if ( aBtnUserDef.IsChecked() )
     613           0 :                 aLbUserDef.Enable();
     614             :         }
     615             :         else
     616             :         {
     617           0 :             aFlSort         .Disable();
     618           0 :             aBtnFormats     .Disable();
     619           0 :             aBtnUserDef     .Disable();
     620           0 :             aBtnAscending   .Disable();
     621           0 :             aBtnDescending  .Disable();
     622           0 :             aLbUserDef      .Disable();
     623             :         }
     624             :     }
     625           0 :     else if ( pBox == &aBtnUserDef )
     626             :     {
     627           0 :         if ( aBtnUserDef.IsChecked() )
     628             :         {
     629           0 :             aLbUserDef.Enable();
     630           0 :             aLbUserDef.GrabFocus();
     631             :         }
     632             :         else
     633           0 :             aLbUserDef.Disable();
     634             :     }
     635             : 
     636           0 :     return 0;
     637             : }
     638             : 
     639           0 : ScTpSubTotalGroup1::~ScTpSubTotalGroup1()
     640             : {
     641           0 : }
     642             : 
     643           0 : ScTpSubTotalGroup2::~ScTpSubTotalGroup2()
     644             : {
     645           0 : }
     646             : 
     647           0 : ScTpSubTotalGroup3::~ScTpSubTotalGroup3()
     648             : {
     649           0 : }
     650             : 
     651             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10