LCOV - code coverage report
Current view: top level - sc/source/ui/dbgui - tpsubt.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 0 324 0.0 %
Date: 2015-06-13 12:38:46 Functions: 0 46 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"
      30             : 
      31             : #include "subtdlg.hxx"
      32             : #include "tpsubt.hxx"
      33             : #include <boost/scoped_array.hpp>
      34             : 
      35             : // Subtotals group tabpage:
      36             : 
      37           0 : ScTpSubTotalGroup::ScTpSubTotalGroup( vcl::Window* pParent,
      38             :                                       const SfxItemSet& rArgSet )
      39             :         :   SfxTabPage      ( pParent,
      40             :                               "SubTotalGrpPage", "modules/scalc/ui/subtotalgrppage.ui",
      41             :                               &rArgSet ),
      42             :             aStrNone        ( SC_RESSTR( SCSTR_NONE ) ),
      43             :             aStrColumn      ( SC_RESSTR( SCSTR_COLUMN ) ),
      44             :             pViewData       ( NULL ),
      45             :             pDoc            ( NULL ),
      46           0 :             nWhichSubTotals ( rArgSet.GetPool()->GetWhich( SID_SUBTOTALS ) ),
      47             :             rSubTotalData   ( static_cast<const ScSubTotalItem&>(
      48           0 :                               rArgSet.Get( nWhichSubTotals )).
      49           0 :                                 GetSubTotalData() ),
      50           0 :             nFieldCount     ( 0 )
      51             : {
      52           0 :     get(mpLbGroup, "group_by");
      53           0 :     get(mpLbColumns, "columns");
      54           0 :     get(mpLbFunctions, "functions");
      55             : 
      56           0 :     long nHeight = mpLbColumns->GetTextHeight() * 14;
      57           0 :     mpLbColumns->set_height_request(nHeight);
      58           0 :     mpLbFunctions->set_height_request(nHeight);
      59             : 
      60             :     // Font is correctly initialized by SvTreeListBox ctor
      61           0 :     mpLbColumns->SetSelectionMode( SINGLE_SELECTION );
      62           0 :     mpLbColumns->SetDragDropMode( DragDropMode::NONE );
      63           0 :     mpLbColumns->SetSpaceBetweenEntries( 0 );
      64             : 
      65           0 :     Init ();
      66           0 : }
      67             : 
      68           0 : ScTpSubTotalGroup::~ScTpSubTotalGroup()
      69             : {
      70           0 :     disposeOnce();
      71           0 : }
      72             : 
      73           0 : void ScTpSubTotalGroup::dispose()
      74             : {
      75           0 :     sal_uLong  nCount = mpLbColumns->GetEntryCount();
      76             : 
      77           0 :     if ( nCount > 0 )
      78             :     {
      79           0 :         for ( sal_uLong i=0; i<nCount; i++ )
      80             :         {
      81           0 :             sal_uInt16* pData = static_cast<sal_uInt16*>(mpLbColumns->GetEntryData( i ));
      82             :             OSL_ENSURE( pData, "EntryData not found" );
      83             : 
      84           0 :             delete pData;
      85             :         }
      86             :     }
      87           0 :     mpLbGroup.clear();
      88           0 :     mpLbColumns.clear();
      89           0 :     mpLbFunctions.clear();
      90           0 :     SfxTabPage::dispose();
      91           0 : }
      92             : 
      93           0 : void ScTpSubTotalGroup::Init()
      94             : {
      95             :     const ScSubTotalItem& rSubTotalItem = static_cast<const ScSubTotalItem&>(
      96           0 :                                           GetItemSet().Get( nWhichSubTotals ));
      97             : 
      98           0 :     pViewData   = rSubTotalItem.GetViewData();
      99           0 :     pDoc        = ( pViewData ) ? pViewData->GetDocument() : NULL;
     100             : 
     101             :     OSL_ENSURE( pViewData && pDoc, "ViewData or Document not found :-(" );
     102             : 
     103           0 :     mpLbGroup->SetSelectHdl       ( LINK( this, ScTpSubTotalGroup, SelectHdl ) );
     104           0 :     mpLbColumns->SetSelectHdl     ( LINK( this, ScTpSubTotalGroup, SelectHdl ) );
     105           0 :     mpLbColumns->SetCheckButtonHdl    ( LINK( this, ScTpSubTotalGroup, CheckHdl ) );
     106           0 :     mpLbFunctions->SetSelectHdl   ( LINK( this, ScTpSubTotalGroup, SelectHdl ) );
     107             : 
     108           0 :     nFieldArr[0] = 0;
     109           0 :     FillListBoxes();
     110           0 : }
     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             :     // first we have to clear the listboxes...
     125           0 :     for ( sal_uLong nLbEntry = 0; nLbEntry < mpLbColumns->GetEntryCount(); ++nLbEntry )
     126             :     {
     127           0 :         mpLbColumns->CheckEntryPos( nLbEntry, false );
     128           0 :         *static_cast<sal_uInt16*>(mpLbColumns->GetEntryData( nLbEntry )) = 0;
     129             :     }
     130           0 :     mpLbFunctions->SelectEntryPos( 0 );
     131             : 
     132             :     ScSubTotalParam theSubTotalData( static_cast<const ScSubTotalItem&>(
     133           0 :                                       rArgSet.Get( nWhichSubTotals )).
     134           0 :                                             GetSubTotalData() );
     135             : 
     136           0 :     if ( theSubTotalData.bGroupActive[nGroupIdx] )
     137             :     {
     138           0 :         SCCOL           nField      = theSubTotalData.nField[nGroupIdx];
     139           0 :         SCCOL           nSubTotals  = theSubTotalData.nSubTotals[nGroupIdx];
     140           0 :         SCCOL*          pSubTotals  = theSubTotalData.pSubTotals[nGroupIdx];
     141           0 :         ScSubTotalFunc* pFunctions  = theSubTotalData.pFunctions[nGroupIdx];
     142             : 
     143           0 :         mpLbGroup->SelectEntryPos( GetFieldSelPos( nField )+1 );
     144             : 
     145           0 :         sal_uInt16 nFirstChecked = 0;
     146           0 :         for ( sal_uInt16 i=0; i<nSubTotals; i++ )
     147             :         {
     148           0 :             sal_uInt16  nCheckPos = GetFieldSelPos( pSubTotals[i] );
     149           0 :             sal_uInt16* pFunction = static_cast<sal_uInt16*>(mpLbColumns->GetEntryData( nCheckPos ));
     150             : 
     151           0 :             mpLbColumns->CheckEntryPos( nCheckPos );
     152           0 :             *pFunction = FuncToLbPos( pFunctions[i] );
     153             : 
     154           0 :             if (i == 0 || (i > 0 && nCheckPos < nFirstChecked))
     155           0 :                 nFirstChecked = nCheckPos;
     156             :         }
     157             :         // Select the first checked field from the top.
     158           0 :         mpLbColumns->SelectEntryPos(nFirstChecked);
     159             :     }
     160             :     else
     161             :     {
     162           0 :         mpLbGroup->SelectEntryPos( (nGroupNo == 1) ? 1 : 0 );
     163           0 :         mpLbColumns->SelectEntryPos( 0 );
     164           0 :         mpLbFunctions->SelectEntryPos( 0 );
     165             :     }
     166             : 
     167           0 :     return true;
     168             : }
     169             : 
     170           0 : bool ScTpSubTotalGroup::DoFillItemSet( sal_uInt16       nGroupNo,
     171             :                                        SfxItemSet&  rArgSet  )
     172             : {
     173           0 :     sal_uInt16 nGroupIdx = 0;
     174             : 
     175             :     OSL_ENSURE( (nGroupNo<=3) && (nGroupNo>0), "Invalid group" );
     176             :     OSL_ENSURE(    (mpLbGroup->GetEntryCount() > 0)
     177             :                 && (mpLbColumns->GetEntryCount() > 0)
     178             :                 && (mpLbFunctions->GetEntryCount() > 0),
     179             :                 "Non-initialized Lists" );
     180             : 
     181           0 :     if (  (nGroupNo > 3) || (nGroupNo == 0)
     182           0 :         || (mpLbGroup->GetEntryCount() == 0)
     183           0 :         || (mpLbColumns->GetEntryCount() == 0)
     184           0 :         || (mpLbFunctions->GetEntryCount() == 0)
     185             :        )
     186           0 :         return false;
     187             :     else
     188           0 :         nGroupIdx = nGroupNo-1;
     189             : 
     190           0 :     ScSubTotalParam theSubTotalData;            // auslesen, wenn schon teilweise gefuellt
     191           0 :     SfxTabDialog* pDlg = GetTabDialog();
     192           0 :     if ( pDlg )
     193             :     {
     194           0 :         const SfxItemSet* pExample = pDlg->GetExampleSet();
     195             :         const SfxPoolItem* pItem;
     196           0 :         if ( pExample && pExample->GetItemState( nWhichSubTotals, true, &pItem ) == SfxItemState::SET )
     197           0 :             theSubTotalData = static_cast<const ScSubTotalItem*>(pItem)->GetSubTotalData();
     198             :     }
     199             : 
     200           0 :     boost::scoped_array<ScSubTotalFunc> pFunctions;
     201           0 :     boost::scoped_array<SCCOL>          pSubTotals;
     202           0 :     sal_uInt16          nGroup      = mpLbGroup->GetSelectEntryPos();
     203           0 :     sal_uInt16          nEntryCount = (sal_uInt16)mpLbColumns->GetEntryCount();
     204           0 :     sal_uInt16          nCheckCount = mpLbColumns->GetCheckedEntryCount();
     205             : 
     206           0 :     theSubTotalData.nCol1                   = rSubTotalData.nCol1;
     207           0 :     theSubTotalData.nRow1                   = rSubTotalData.nRow1;
     208           0 :     theSubTotalData.nCol2                   = rSubTotalData.nCol2;
     209           0 :     theSubTotalData.nRow2                   = rSubTotalData.nRow2;
     210           0 :     theSubTotalData.bGroupActive[nGroupIdx] = (nGroup != 0);
     211           0 :     theSubTotalData.nField[nGroupIdx]       = (nGroup != 0)
     212           0 :                                                 ? nFieldArr[nGroup-1]
     213           0 :                                                 : static_cast<SCCOL>(0);
     214             : 
     215           0 :     if ( nEntryCount>0 && nCheckCount>0 && nGroup!=0 )
     216             :     {
     217           0 :         sal_uInt16 nFunction    = 0;
     218             : 
     219           0 :         pSubTotals.reset(new SCCOL          [nCheckCount]);
     220           0 :         pFunctions.reset(new ScSubTotalFunc [nCheckCount]);
     221             : 
     222           0 :         for ( sal_uInt16 i=0, nCheck=0; i<nEntryCount; i++ )
     223             :         {
     224           0 :             if ( mpLbColumns->IsChecked( i ) )
     225             :             {
     226             :                 OSL_ENSURE( nCheck <= nCheckCount,
     227             :                             "Range error :-(" );
     228           0 :                 nFunction = *static_cast<sal_uInt16*>(mpLbColumns->GetEntryData( i ));
     229           0 :                 pSubTotals[nCheck] = nFieldArr[i];
     230           0 :                 pFunctions[nCheck] = LbPosToFunc( nFunction );
     231           0 :                 nCheck++;
     232             :             }
     233             :         }
     234             :         theSubTotalData.SetSubTotals( nGroupNo,      // Gruppen-Nr.
     235           0 :                                       pSubTotals.get(),
     236           0 :                                       pFunctions.get(),
     237           0 :                                       nCheckCount ); // Anzahl der Array-Elemente
     238             : 
     239             :     }
     240             : 
     241           0 :     rArgSet.Put( ScSubTotalItem( SCITEM_SUBTDATA, &theSubTotalData ) );
     242             : 
     243           0 :     return true;
     244             : }
     245             : 
     246           0 : void ScTpSubTotalGroup::FillListBoxes()
     247             : {
     248             :     OSL_ENSURE( pViewData && pDoc, "ViewData or Document not found :-/" );
     249             : 
     250           0 :     if ( pViewData && pDoc )
     251             :     {
     252           0 :         SCCOL   nFirstCol   = rSubTotalData.nCol1;
     253           0 :         SCROW   nFirstRow   = rSubTotalData.nRow1;
     254           0 :         SCTAB   nTab        = pViewData->GetTabNo();
     255           0 :         SCCOL   nMaxCol     = rSubTotalData.nCol2;
     256             :         SCCOL   col;
     257           0 :         OUString  aFieldName;
     258             : 
     259           0 :         mpLbGroup->Clear();
     260           0 :         mpLbColumns->Clear();
     261           0 :         mpLbGroup->InsertEntry( aStrNone, 0 );
     262             : 
     263           0 :         sal_uInt16 i=0;
     264           0 :         for ( col=nFirstCol; col<=nMaxCol && i<SC_MAXFIELDS; col++ )
     265             :         {
     266           0 :             aFieldName = pDoc->GetString(col, nFirstRow, nTab);
     267           0 :             if ( aFieldName.isEmpty() )
     268             :             {
     269           0 :                 aFieldName = ScGlobal::ReplaceOrAppend( aStrColumn, "%1", ScColToAlpha( col ));
     270             :             }
     271           0 :             nFieldArr[i] = col;
     272           0 :             mpLbGroup->InsertEntry( aFieldName, i+1 );
     273           0 :             mpLbColumns->InsertEntry( aFieldName, i );
     274           0 :             mpLbColumns->SetEntryData( i, new sal_uInt16(0) );
     275           0 :             i++;
     276             :         }
     277             :         // subsequent initialization of the constant:
     278           0 :         (sal_uInt16&)nFieldCount = i;
     279             :     }
     280           0 : }
     281             : 
     282           0 : sal_uInt16 ScTpSubTotalGroup::GetFieldSelPos( SCCOL nField )
     283             : {
     284           0 :     sal_uInt16  nFieldPos   = 0;
     285           0 :     bool    bFound      = false;
     286             : 
     287           0 :     for ( sal_uInt16 n=0; n<nFieldCount && !bFound; n++ )
     288             :     {
     289           0 :         if ( nFieldArr[n] == nField )
     290             :         {
     291           0 :             nFieldPos = n;
     292           0 :             bFound = true;
     293             :         }
     294             :     }
     295             : 
     296           0 :     return nFieldPos;
     297             : }
     298             : 
     299           0 : ScSubTotalFunc ScTpSubTotalGroup::LbPosToFunc( sal_uInt16 nPos )
     300             : {
     301           0 :     switch ( nPos )
     302             :     {
     303             : //      case  0:    return SUBTOTAL_FUNC_NONE;
     304           0 :         case  2:    return SUBTOTAL_FUNC_AVE;
     305           0 :         case  6:    return SUBTOTAL_FUNC_CNT;
     306           0 :         case  1:    return SUBTOTAL_FUNC_CNT2;
     307           0 :         case  3:    return SUBTOTAL_FUNC_MAX;
     308           0 :         case  4:    return SUBTOTAL_FUNC_MIN;
     309           0 :         case  5:    return SUBTOTAL_FUNC_PROD;
     310           0 :         case  7:    return SUBTOTAL_FUNC_STD;
     311           0 :         case  8:    return SUBTOTAL_FUNC_STDP;
     312           0 :         case  0:    return SUBTOTAL_FUNC_SUM;
     313           0 :         case  9:    return SUBTOTAL_FUNC_VAR;
     314           0 :         case 10:    return SUBTOTAL_FUNC_VARP;
     315             :         default:
     316             :             OSL_FAIL( "ScTpSubTotalGroup::LbPosToFunc" );
     317           0 :             return SUBTOTAL_FUNC_NONE;
     318             :     }
     319             : }
     320             : 
     321           0 : sal_uInt16 ScTpSubTotalGroup::FuncToLbPos( ScSubTotalFunc eFunc )
     322             : {
     323           0 :     switch ( eFunc )
     324             :     {
     325             : //      case SUBTOTAL_FUNC_NONE:    return 0;
     326           0 :         case SUBTOTAL_FUNC_AVE:     return 2;
     327           0 :         case SUBTOTAL_FUNC_CNT:     return 6;
     328           0 :         case SUBTOTAL_FUNC_CNT2:    return 1;
     329           0 :         case SUBTOTAL_FUNC_MAX:     return 3;
     330           0 :         case SUBTOTAL_FUNC_MIN:     return 4;
     331           0 :         case SUBTOTAL_FUNC_PROD:    return 5;
     332           0 :         case SUBTOTAL_FUNC_STD:     return 7;
     333           0 :         case SUBTOTAL_FUNC_STDP:    return 8;
     334           0 :         case SUBTOTAL_FUNC_SUM:     return 0;
     335           0 :         case SUBTOTAL_FUNC_VAR:     return 9;
     336           0 :         case SUBTOTAL_FUNC_VARP:    return 10;
     337             :         default:
     338             :             OSL_FAIL( "ScTpSubTotalGroup::FuncToLbPos" );
     339           0 :             return 0;
     340             :     }
     341             : }
     342             : 
     343             : // Handler:
     344             : 
     345           0 : IMPL_LINK( ScTpSubTotalGroup, SelectHdl, void *, pLb )
     346             : {
     347           0 :     if (   (mpLbColumns->GetEntryCount() > 0)
     348           0 :         && (mpLbColumns->GetSelectionCount() > 0) )
     349             :     {
     350           0 :         sal_uInt16      nFunction   = mpLbFunctions->GetSelectEntryPos();
     351           0 :         sal_uInt16      nColumn     = mpLbColumns->GetSelectEntryPos();
     352           0 :         sal_uInt16*     pFunction   = static_cast<sal_uInt16*>(mpLbColumns->GetEntryData( nColumn ));
     353             : 
     354             :         OSL_ENSURE( pFunction, "EntryData not found!" );
     355           0 :         if ( !pFunction )
     356           0 :             return 0;
     357             : 
     358           0 :         if ( pLb == mpLbColumns )
     359             :         {
     360           0 :             mpLbFunctions->SelectEntryPos( *pFunction );
     361             :         }
     362           0 :         else if ( pLb == mpLbFunctions )
     363             :         {
     364           0 :             *pFunction = nFunction;
     365           0 :             mpLbColumns->CheckEntryPos( nColumn, true );
     366             :         }
     367             :     }
     368           0 :     return 0;
     369             : }
     370             : 
     371           0 : IMPL_LINK( ScTpSubTotalGroup, CheckHdl, void *, pLb )
     372             : {
     373           0 :     if ( pLb == mpLbColumns )
     374             :     {
     375           0 :         SvTreeListEntry* pEntry = mpLbColumns->GetHdlEntry();
     376             : 
     377           0 :         if ( pEntry )
     378             :         {
     379           0 :             mpLbColumns->SelectEntryPos( (sal_uInt16)mpLbColumns->GetModel()->GetAbsPos( pEntry ) );
     380           0 :             SelectHdl( pLb );
     381             :         }
     382             :     }
     383           0 :     return 0;
     384             : }
     385             : 
     386             : // Derived Group TabPages:
     387             : 
     388           0 : VclPtr<SfxTabPage> ScTpSubTotalGroup1::Create( vcl::Window*         pParent,
     389             :                                                  const SfxItemSet*  rArgSet )
     390             : {
     391           0 :     return VclPtr<ScTpSubTotalGroup1>::Create( pParent, *rArgSet );
     392             : }
     393             : 
     394           0 : VclPtr<SfxTabPage> ScTpSubTotalGroup2::Create( vcl::Window*          pParent,
     395             :                                        const SfxItemSet*    rArgSet )
     396             : {
     397           0 :     return VclPtr<ScTpSubTotalGroup2>::Create( pParent, *rArgSet );
     398             : }
     399             : 
     400           0 : VclPtr<SfxTabPage> ScTpSubTotalGroup3::Create( vcl::Window*          pParent,
     401             :                                        const SfxItemSet*    rArgSet )
     402             : {
     403           0 :     return VclPtr<ScTpSubTotalGroup3>::Create( pParent, *rArgSet );
     404             : }
     405             : 
     406           0 : ScTpSubTotalGroup1::ScTpSubTotalGroup1( vcl::Window* pParent, const SfxItemSet& rArgSet ) :
     407           0 :     ScTpSubTotalGroup( pParent, rArgSet )
     408           0 : {}
     409             : 
     410           0 : ScTpSubTotalGroup2::ScTpSubTotalGroup2( vcl::Window* pParent, const SfxItemSet& rArgSet ) :
     411           0 :     ScTpSubTotalGroup( pParent, rArgSet )
     412           0 : {}
     413             : 
     414           0 : ScTpSubTotalGroup3::ScTpSubTotalGroup3( vcl::Window* pParent, const SfxItemSet& rArgSet ) :
     415           0 :     ScTpSubTotalGroup( pParent, rArgSet )
     416           0 : {}
     417             : 
     418             : #define RESET(i) (ScTpSubTotalGroup::DoReset( (i), *rArgSet ))
     419           0 : void ScTpSubTotalGroup1::Reset( const SfxItemSet* rArgSet ) { RESET(1); }
     420           0 : void ScTpSubTotalGroup2::Reset( const SfxItemSet* rArgSet ) { RESET(2); }
     421           0 : void ScTpSubTotalGroup3::Reset( const SfxItemSet* rArgSet ) { RESET(3); }
     422             : #undef RESET
     423             : 
     424             : #define FILLSET(i) (ScTpSubTotalGroup::DoFillItemSet( (i), *rArgSet ))
     425           0 : bool ScTpSubTotalGroup1::FillItemSet( SfxItemSet* rArgSet ) { return FILLSET(1); }
     426           0 : bool ScTpSubTotalGroup2::FillItemSet( SfxItemSet* rArgSet ) { return FILLSET(2); }
     427           0 : bool ScTpSubTotalGroup3::FillItemSet( SfxItemSet* rArgSet ) { return FILLSET(3); }
     428             : #undef FILL
     429             : 
     430             : // Optionen-Tabpage:
     431             : 
     432           0 : ScTpSubTotalOptions::ScTpSubTotalOptions( vcl::Window*               pParent,
     433             :                                           const SfxItemSet&     rArgSet )
     434             : 
     435             :         :   SfxTabPage      ( pParent,
     436             :                               "SubTotalOptionsPage", "modules/scalc/ui/subtotaloptionspage.ui" ,
     437             :                               &rArgSet ),
     438             :             pViewData       ( NULL ),
     439             :             pDoc            ( NULL ),
     440           0 :             nWhichSubTotals ( rArgSet.GetPool()->GetWhich( SID_SUBTOTALS ) ),
     441             :             rSubTotalData   ( static_cast<const ScSubTotalItem&>(
     442           0 :                               rArgSet.Get( nWhichSubTotals )).
     443           0 :                                 GetSubTotalData() )
     444             : {
     445           0 :     get(pBtnPagebreak,"pagebreak");
     446           0 :     get(pBtnCase,"case");
     447           0 :     get(pBtnSort,"sort");
     448           0 :     get(pFlSort,"label2");
     449           0 :     get(pBtnAscending,"ascending");
     450           0 :     get(pBtnDescending,"descending");
     451           0 :     get(pBtnFormats,"formats");
     452           0 :     get(pBtnUserDef,"btnuserdef");
     453           0 :     get(pLbUserDef,"lbuserdef");
     454             : 
     455           0 :     Init();
     456           0 : }
     457             : 
     458           0 : ScTpSubTotalOptions::~ScTpSubTotalOptions()
     459             : {
     460           0 :     disposeOnce();
     461           0 : }
     462             : 
     463           0 : void ScTpSubTotalOptions::dispose()
     464             : {
     465           0 :     pBtnPagebreak.clear();
     466           0 :     pBtnCase.clear();
     467           0 :     pBtnSort.clear();
     468           0 :     pFlSort.clear();
     469           0 :     pBtnAscending.clear();
     470           0 :     pBtnDescending.clear();
     471           0 :     pBtnFormats.clear();
     472           0 :     pBtnUserDef.clear();
     473           0 :     pLbUserDef.clear();
     474           0 :     SfxTabPage::dispose();
     475           0 : }
     476             : 
     477           0 : void ScTpSubTotalOptions::Init()
     478             : {
     479             :     const ScSubTotalItem& rSubTotalItem = static_cast<const ScSubTotalItem&>(
     480           0 :                                           GetItemSet().Get( nWhichSubTotals ));
     481             : 
     482           0 :     pViewData   = rSubTotalItem.GetViewData();
     483           0 :     pDoc        = ( pViewData ) ? pViewData->GetDocument() : NULL;
     484             : 
     485             :     OSL_ENSURE( pViewData && pDoc, "ViewData or Document not found!" );
     486             : 
     487           0 :     pBtnSort->SetClickHdl    ( LINK( this, ScTpSubTotalOptions, CheckHdl ) );
     488           0 :     pBtnUserDef->SetClickHdl ( LINK( this, ScTpSubTotalOptions, CheckHdl ) );
     489             : 
     490           0 :     FillUserSortListBox();
     491           0 : }
     492             : 
     493           0 : VclPtr<SfxTabPage> ScTpSubTotalOptions::Create( vcl::Window* pParent,
     494             :                                                 const SfxItemSet* rArgSet )
     495             : {
     496           0 :     return VclPtr<ScTpSubTotalOptions>::Create( pParent, *rArgSet );
     497             : }
     498             : 
     499           0 : void ScTpSubTotalOptions::Reset( const SfxItemSet* /* rArgSet */ )
     500             : {
     501           0 :     pBtnPagebreak->Check ( rSubTotalData.bPagebreak );
     502           0 :     pBtnCase->Check      ( rSubTotalData.bCaseSens );
     503           0 :     pBtnFormats->Check   ( rSubTotalData.bIncludePattern );
     504           0 :     pBtnSort->Check      ( rSubTotalData.bDoSort );
     505           0 :     pBtnAscending->Check ( rSubTotalData.bAscending );
     506           0 :     pBtnDescending->Check( !rSubTotalData.bAscending );
     507             : 
     508           0 :     if ( rSubTotalData.bUserDef )
     509             :     {
     510           0 :         pBtnUserDef->Check( true );
     511           0 :         pLbUserDef->Enable();
     512           0 :         pLbUserDef->SelectEntryPos( rSubTotalData.nUserIndex );
     513             :     }
     514             :     else
     515             :     {
     516           0 :         pBtnUserDef->Check( false );
     517           0 :         pLbUserDef->Disable();
     518           0 :         pLbUserDef->SelectEntryPos( 0 );
     519             :     }
     520             : 
     521           0 :     CheckHdl( pBtnSort );
     522           0 : }
     523             : 
     524           0 : bool ScTpSubTotalOptions::FillItemSet( SfxItemSet* rArgSet )
     525             : {
     526           0 :     ScSubTotalParam theSubTotalData;            // auslesen, wenn schon teilweise gefuellt
     527           0 :     SfxTabDialog* pDlg = GetTabDialog();
     528           0 :     if ( pDlg )
     529             :     {
     530           0 :         const SfxItemSet* pExample = pDlg->GetExampleSet();
     531             :         const SfxPoolItem* pItem;
     532           0 :         if ( pExample && pExample->GetItemState( nWhichSubTotals, true, &pItem ) == SfxItemState::SET )
     533           0 :             theSubTotalData = static_cast<const ScSubTotalItem*>(pItem)->GetSubTotalData();
     534             :     }
     535             : 
     536           0 :     theSubTotalData.bPagebreak      = pBtnPagebreak->IsChecked();
     537           0 :     theSubTotalData.bReplace        = true;
     538           0 :     theSubTotalData.bCaseSens       = pBtnCase->IsChecked();
     539           0 :     theSubTotalData.bIncludePattern = pBtnFormats->IsChecked();
     540           0 :     theSubTotalData.bDoSort         = pBtnSort->IsChecked();
     541           0 :     theSubTotalData.bAscending      = pBtnAscending->IsChecked();
     542           0 :     theSubTotalData.bUserDef        = pBtnUserDef->IsChecked();
     543           0 :     theSubTotalData.nUserIndex      = (pBtnUserDef->IsChecked())
     544           0 :                                     ? pLbUserDef->GetSelectEntryPos()
     545           0 :                                     : 0;
     546             : 
     547           0 :     rArgSet->Put( ScSubTotalItem( nWhichSubTotals, &theSubTotalData ) );
     548             : 
     549           0 :     return true;
     550             : }
     551             : 
     552           0 : void ScTpSubTotalOptions::FillUserSortListBox()
     553             : {
     554           0 :     ScUserList* pUserLists = ScGlobal::GetUserList();
     555             : 
     556           0 :     pLbUserDef->Clear();
     557           0 :     if ( pUserLists )
     558             :     {
     559           0 :         size_t nCount = pUserLists->size();
     560           0 :         for ( size_t i=0; i<nCount; ++i )
     561           0 :             pLbUserDef->InsertEntry( (*pUserLists)[i]->GetString() );
     562             :     }
     563           0 : }
     564             : 
     565             : // Handler:
     566             : 
     567           0 : IMPL_LINK( ScTpSubTotalOptions, CheckHdl, CheckBox *, pBox )
     568             : {
     569           0 :     if ( pBox == pBtnSort )
     570             :     {
     571           0 :         if ( pBtnSort->IsChecked() )
     572             :         {
     573           0 :             pFlSort->Enable();
     574           0 :             pBtnFormats->Enable();
     575           0 :             pBtnUserDef->Enable();
     576           0 :             pBtnAscending->Enable();
     577           0 :             pBtnDescending->Enable();
     578             : 
     579           0 :             if ( pBtnUserDef->IsChecked() )
     580           0 :                 pLbUserDef->Enable();
     581             :         }
     582             :         else
     583             :         {
     584           0 :             pFlSort->Disable();
     585           0 :             pBtnFormats->Disable();
     586           0 :             pBtnUserDef->Disable();
     587           0 :             pBtnAscending->Disable();
     588           0 :             pBtnDescending->Disable();
     589           0 :             pLbUserDef->Disable();
     590             :         }
     591             :     }
     592           0 :     else if ( pBox == pBtnUserDef )
     593             :     {
     594           0 :         if ( pBtnUserDef->IsChecked() )
     595             :         {
     596           0 :             pLbUserDef->Enable();
     597           0 :             pLbUserDef->GrabFocus();
     598             :         }
     599             :         else
     600           0 :             pLbUserDef->Disable();
     601             :     }
     602             : 
     603           0 :     return 0;
     604             : }
     605             : 
     606           0 : ScTpSubTotalGroup1::~ScTpSubTotalGroup1()
     607             : {
     608           0 : }
     609             : 
     610           0 : ScTpSubTotalGroup2::~ScTpSubTotalGroup2()
     611             : {
     612           0 : }
     613             : 
     614           0 : ScTpSubTotalGroup3::~ScTpSubTotalGroup3()
     615             : {
     616           0 : }
     617             : 
     618             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11