LCOV - code coverage report
Current view: top level - sc/source/ui/dbgui - PivotLayoutDialog.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 1 400 0.2 %
Date: 2015-06-13 12:38:46 Functions: 2 42 4.8 %
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             : 
      12             : #include "PivotLayoutTreeList.hxx"
      13             : #include "PivotLayoutDialog.hxx"
      14             : #include <reffact.hxx>
      15             : #include <svtools/treelistentry.hxx>
      16             : 
      17             : #include "rangeutl.hxx"
      18             : #include "uiitems.hxx"
      19             : #include "dputil.hxx"
      20             : 
      21             : #include <vector>
      22             : 
      23             : #include <com/sun/star/sheet/DataPilotFieldOrientation.hpp>
      24             : #include <com/sun/star/sheet/DataPilotFieldSortMode.hpp>
      25             : 
      26             : using namespace css::uno;
      27             : using namespace css::sheet;
      28             : 
      29           0 : ScItemValue::ScItemValue(OUString const & aName, SCCOL nColumn, sal_uInt16 nFunctionMask) :
      30             :     maName(aName),
      31             :     maFunctionData(nColumn, nFunctionMask),
      32           0 :     mpOriginalItemValue(this)
      33           0 : {}
      34             : 
      35           0 : ScItemValue::ScItemValue(ScItemValue* pInputItemValue) :
      36             :     maName(pInputItemValue->maName),
      37             :     maFunctionData(pInputItemValue->maFunctionData),
      38           0 :     mpOriginalItemValue(this)
      39           0 : {}
      40             : 
      41           0 : ScItemValue::~ScItemValue()
      42           0 : {}
      43             : 
      44             : namespace
      45             : {
      46             : 
      47           0 : ScRange lclGetRangeForNamedRange(OUString const & aName, ScDocument* pDocument)
      48             : {
      49           0 :     ScRange aInvalidRange(ScAddress::INITIALIZE_INVALID);
      50           0 :     ScRangeName* pRangeName = pDocument->GetRangeName();
      51           0 :     if (pRangeName == NULL)
      52           0 :         return aInvalidRange;
      53             : 
      54           0 :     const ScRangeData* pData = pRangeName->findByUpperName(aName.toAsciiUpperCase());
      55           0 :     if (pData == NULL)
      56           0 :         return aInvalidRange;
      57             : 
      58           0 :     ScRange aRange;
      59           0 :     if (pData->IsReference(aRange))
      60           0 :         return aRange;
      61             : 
      62           0 :     return aInvalidRange;
      63             : }
      64             : 
      65             : }
      66             : 
      67           0 : ScPivotLayoutDialog::ScPivotLayoutDialog(
      68             :                             SfxBindings* pSfxBindings, SfxChildWindow* pChildWindow, vcl::Window* pParent,
      69             :                             ScViewData* pViewData, const ScDPObject* pPivotTableObject, bool bNewPivotTable) :
      70             :     ScAnyRefDlg           (pSfxBindings, pChildWindow, pParent, "PivotTableLayout", "modules/scalc/ui/pivottablelayoutdialog.ui"),
      71             :     maPivotTableObject    (*pPivotTableObject),
      72             :     mpPreviouslyFocusedListBox(NULL),
      73             :     mpCurrentlyFocusedListBox(NULL),
      74             :     mpViewData            (pViewData),
      75           0 :     mpDocument            (pViewData->GetDocument()),
      76             :     mbNewPivotTable       (bNewPivotTable),
      77             :     mpActiveEdit          (NULL),
      78             :     maAddressDetails      (mpDocument->GetAddressConvention(), 0, 0),
      79           0 :     mbDialogLostFocus     (false)
      80             : {
      81           0 :     Link<> aLink;
      82             : 
      83           0 :     get(mpListBoxField,    "listbox-fields");
      84           0 :     get(mpListBoxPage,     "listbox-page");
      85           0 :     get(mpListBoxColumn,   "listbox-column");
      86           0 :     get(mpListBoxRow,      "listbox-row");
      87           0 :     get(mpListBoxData,     "listbox-data");
      88             : 
      89           0 :     get(mpCheckIgnoreEmptyRows,     "check-ignore-empty-rows");
      90           0 :     get(mpCheckTotalColumns,        "check-total-columns");
      91           0 :     get(mpCheckAddFilter,           "check-add-filter");
      92           0 :     get(mpCheckIdentifyCategories,  "check-identify-categories");
      93           0 :     get(mpCheckTotalRows,           "check-total-rows");
      94           0 :     get(mpCheckDrillToDetail,       "check-drill-to-details");
      95             : 
      96           0 :     get(mpBtnOK,  "ok");
      97           0 :     get(mpBtnCancel,  "cancel");
      98             : 
      99           0 :     get(mpSourceRadioNamedRange, "source-radio-named-range");
     100           0 :     get(mpSourceRadioSelection,  "source-radio-selection");
     101           0 :     get(mpSourceListBox,         "source-list");
     102           0 :     get(mpSourceEdit,            "source-edit");
     103           0 :     get(mpSourceButton,          "source-button");
     104             : 
     105           0 :     get(mpDestinationRadioNewSheet,   "destination-radio-new-sheet");
     106           0 :     get(mpDestinationRadioNamedRange, "destination-radio-named-range");
     107           0 :     get(mpDestinationRadioSelection,  "destination-radio-selection");
     108           0 :     get(mpDestinationListBox,         "destination-list");
     109           0 :     get(mpDestinationEdit,            "destination-edit");
     110           0 :     get(mpDestinationButton,          "destination-button");
     111             : 
     112             :     // Source UI
     113           0 :     aLink = LINK(this, ScPivotLayoutDialog, ToggleSource);
     114           0 :     mpSourceRadioNamedRange->SetToggleHdl(aLink);
     115           0 :     mpSourceRadioSelection->SetToggleHdl(aLink);
     116             : 
     117           0 :     mpSourceEdit->SetReferences(this, mpSourceRadioSelection);
     118           0 :     mpSourceButton->SetReferences(this, mpSourceEdit);
     119             : 
     120           0 :     aLink = LINK(this, ScPivotLayoutDialog, GetFocusHandler);
     121           0 :     mpSourceEdit->SetGetFocusHdl(aLink);
     122           0 :     mpSourceButton->SetGetFocusHdl(aLink);
     123             : 
     124           0 :     aLink = LINK(this, ScPivotLayoutDialog, LoseFocusHandler);
     125           0 :     mpSourceEdit->SetLoseFocusHdl(aLink);
     126           0 :     mpSourceButton->SetLoseFocusHdl(aLink);
     127             : 
     128           0 :     mpSourceEdit->SetModifyHdl(LINK(this, ScPivotLayoutDialog, SourceEditModified));
     129           0 :     mpSourceListBox->SetSelectHdl(LINK(this, ScPivotLayoutDialog, SourceEditModified));
     130             : 
     131             :     // Destination UI
     132           0 :     aLink = LINK(this, ScPivotLayoutDialog, ToggleDestination);
     133           0 :     mpDestinationRadioNewSheet->SetToggleHdl(aLink);
     134           0 :     mpDestinationRadioNamedRange->SetToggleHdl(aLink);
     135           0 :     mpDestinationRadioSelection->SetToggleHdl(aLink);
     136             : 
     137           0 :     mpDestinationEdit->SetReferences(this, mpDestinationRadioNewSheet);
     138           0 :     mpDestinationButton->SetReferences(this, mpDestinationEdit);
     139             : 
     140           0 :     aLink = LINK(this, ScPivotLayoutDialog, GetFocusHandler);
     141           0 :     mpDestinationEdit->SetGetFocusHdl(aLink);
     142           0 :     mpDestinationButton->SetGetFocusHdl(aLink);
     143             : 
     144           0 :     aLink = LINK(this, ScPivotLayoutDialog, LoseFocusHandler);
     145           0 :     mpDestinationEdit->SetLoseFocusHdl(aLink);
     146           0 :     mpDestinationButton->SetLoseFocusHdl(aLink);
     147             : 
     148             :     // Buttons
     149           0 :     mpBtnCancel->SetClickHdl(LINK(this, ScPivotLayoutDialog, CancelClicked));
     150           0 :     mpBtnOK->SetClickHdl(LINK(this, ScPivotLayoutDialog, OKClicked));
     151             : 
     152             :     // Initialize Data
     153           0 :     maPivotTableObject.FillOldParam(maPivotParameters);
     154           0 :     maPivotTableObject.FillLabelData(maPivotParameters);
     155             : 
     156           0 :     mpListBoxField->Setup (this);
     157           0 :     mpListBoxPage->Setup  (this, ScPivotLayoutTreeList::PAGE_LIST);
     158           0 :     mpListBoxColumn->Setup(this, ScPivotLayoutTreeList::COLUMN_LIST);
     159           0 :     mpListBoxRow->Setup   (this, ScPivotLayoutTreeList::ROW_LIST);
     160           0 :     mpListBoxData->Setup  (this);
     161             : 
     162           0 :     FillValuesToListBoxes();
     163             : 
     164             :     // Initialize Options
     165           0 :     const ScDPSaveData* pSaveData = maPivotTableObject.GetSaveData();
     166           0 :     if (pSaveData == NULL)
     167             :     {
     168           0 :         mpCheckAddFilter->Check(false);
     169           0 :         mpCheckDrillToDetail->Check(false);
     170             :     }
     171             :     else
     172             :     {
     173           0 :         mpCheckAddFilter->Check(pSaveData->GetFilterButton());
     174           0 :         mpCheckDrillToDetail->Check(pSaveData->GetDrillDown());
     175             :     }
     176             : 
     177           0 :     mpCheckIgnoreEmptyRows->Check(maPivotParameters.bIgnoreEmptyRows);
     178           0 :     mpCheckIdentifyCategories->Check(maPivotParameters.bDetectCategories);
     179           0 :     mpCheckTotalColumns->Check(maPivotParameters.bMakeTotalCol);
     180           0 :     mpCheckTotalRows->Check(maPivotParameters.bMakeTotalRow);
     181             : 
     182           0 :     SetupSource();
     183           0 :     SetupDestination();
     184           0 : }
     185             : 
     186           0 : ScPivotLayoutDialog::~ScPivotLayoutDialog()
     187             : {
     188           0 :     disposeOnce();
     189           0 : }
     190             : 
     191           0 : void ScPivotLayoutDialog::dispose()
     192             : {
     193           0 :     mpPreviouslyFocusedListBox.clear();
     194           0 :     mpCurrentlyFocusedListBox.clear();
     195           0 :     mpListBoxField.clear();
     196           0 :     mpListBoxPage.clear();
     197           0 :     mpListBoxColumn.clear();
     198           0 :     mpListBoxRow.clear();
     199           0 :     mpListBoxData.clear();
     200           0 :     mpCheckIgnoreEmptyRows.clear();
     201           0 :     mpCheckTotalColumns.clear();
     202           0 :     mpCheckAddFilter.clear();
     203           0 :     mpCheckIdentifyCategories.clear();
     204           0 :     mpCheckTotalRows.clear();
     205           0 :     mpCheckDrillToDetail.clear();
     206           0 :     mpSourceRadioNamedRange.clear();
     207           0 :     mpSourceRadioSelection.clear();
     208           0 :     mpSourceListBox.clear();
     209           0 :     mpSourceEdit.clear();
     210           0 :     mpSourceButton.clear();
     211           0 :     mpDestinationRadioNewSheet.clear();
     212           0 :     mpDestinationRadioNamedRange.clear();
     213           0 :     mpDestinationRadioSelection.clear();
     214           0 :     mpDestinationListBox.clear();
     215           0 :     mpDestinationEdit.clear();
     216           0 :     mpDestinationButton.clear();
     217           0 :     mpBtnOK.clear();
     218           0 :     mpBtnCancel.clear();
     219           0 :     mpActiveEdit.clear();
     220           0 :     ScAnyRefDlg::dispose();
     221           0 : }
     222             : 
     223           0 : void ScPivotLayoutDialog::SetupSource()
     224             : {
     225           0 :     mpSourceListBox->Clear();
     226             : 
     227           0 :     ScRange aSourceRange;
     228           0 :     OUString sSourceNamedRangeName;
     229             : 
     230           0 :     if (maPivotTableObject.GetSheetDesc())
     231             :     {
     232           0 :         const ScSheetSourceDesc* pSheetSourceDesc = maPivotTableObject.GetSheetDesc();
     233           0 :         aSourceRange = pSheetSourceDesc->GetSourceRange();
     234             : 
     235           0 :         if(!aSourceRange.IsValid())
     236             :         {
     237             :             // Source is probably a DB Range
     238           0 :             mpSourceRadioNamedRange->Disable();
     239           0 :             mpSourceRadioSelection->Disable();
     240           0 :             ToggleSource(NULL);
     241           0 :             return;
     242             :         }
     243             :         else
     244             :         {
     245           0 :             OUString aSourceRangeName = aSourceRange.Format(SCR_ABS_3D, mpDocument, maAddressDetails);
     246           0 :             mpSourceEdit->SetText(aSourceRangeName);
     247             :         }
     248             :     }
     249             :     else
     250             :     {
     251           0 :         mpSourceRadioNamedRange->Disable();
     252           0 :         mpSourceRadioSelection->Disable();
     253           0 :         ToggleSource(NULL);
     254           0 :         return;
     255             :     }
     256             : 
     257             :     // Setup Named Ranges
     258           0 :     bool bIsNamedRange = false;
     259             : 
     260           0 :     ScAreaNameIterator aIterator(mpDocument);
     261           0 :     OUString aEachName;
     262           0 :     ScRange aEachRange;
     263             : 
     264           0 :     while (aIterator.Next(aEachName, aEachRange))
     265             :     {
     266           0 :         if (!aIterator.WasDBName())
     267             :         {
     268           0 :             mpSourceListBox->InsertEntry(aEachName);
     269           0 :             if (aEachRange == aSourceRange)
     270             :             {
     271           0 :                 sSourceNamedRangeName = aEachName;
     272           0 :                 bIsNamedRange = true;
     273             :             }
     274             :         }
     275             :     }
     276             : 
     277           0 :     if (bIsNamedRange)
     278             :     {
     279           0 :         mpSourceListBox->SelectEntry(sSourceNamedRangeName, true);
     280           0 :         mpSourceRadioNamedRange->Check(true);
     281             :     }
     282             :     else
     283             :     {
     284           0 :         mpSourceListBox->SelectEntryPos(0, true);
     285           0 :         mpSourceRadioSelection->Check(true);
     286             :     }
     287             : 
     288             :     // If entries - select first entry, otherwise disable the radio button.
     289           0 :     if (mpSourceListBox->GetEntryCount() <= 0)
     290           0 :         mpSourceRadioNamedRange->Disable();
     291             : 
     292           0 :     ToggleSource(NULL);
     293             : }
     294             : 
     295           0 : void ScPivotLayoutDialog::SetupDestination()
     296             : {
     297           0 :     mpDestinationListBox->Clear();
     298             : 
     299             :     // Fill up named ranges
     300           0 :     ScAreaNameIterator aIterator(mpDocument);
     301           0 :     OUString aName;
     302           0 :     ScRange aRange;
     303             : 
     304           0 :     while (aIterator.Next(aName, aRange))
     305             :     {
     306           0 :         if (!aIterator.WasDBName())
     307             :         {
     308           0 :             mpDestinationListBox->InsertEntry(aName);
     309             :         }
     310             :     }
     311             : 
     312             :     // If entries - select first entry, otherwise disable the radio button.
     313           0 :     if (mpDestinationListBox->GetEntryCount() > 0)
     314           0 :         mpDestinationListBox->SelectEntryPos(0, true);
     315             :     else
     316           0 :         mpDestinationRadioNamedRange->Disable();
     317             : 
     318             :     //
     319           0 :     if (mbNewPivotTable)
     320             :     {
     321           0 :         mpDestinationRadioNewSheet->Check(true);
     322             :     }
     323             :     else
     324             :     {
     325           0 :         if (maPivotParameters.nTab != MAXTAB + 1)
     326             :         {
     327           0 :             ScAddress aAddress(maPivotParameters.nCol, maPivotParameters.nRow, maPivotParameters.nTab);
     328           0 :             OUString aAddressString = aAddress.Format(SCA_VALID | SCA_TAB_3D | SCA_COL_ABSOLUTE | SCA_ROW_ABSOLUTE | SCA_TAB_ABSOLUTE, mpDocument, maAddressDetails);
     329           0 :             mpDestinationEdit->SetText(aAddressString);
     330           0 :             mpDestinationRadioSelection->Check(true);
     331             :         }
     332             :     }
     333             : 
     334           0 :     ToggleDestination(NULL);
     335           0 : }
     336             : 
     337           0 : void ScPivotLayoutDialog::FillValuesToListBoxes()
     338             : {
     339           0 :     mpListBoxField->FillLabelFields(maPivotParameters.maLabelArray);
     340           0 :     mpListBoxData->FillDataField(maPivotParameters.maDataFields);
     341           0 :     mpListBoxColumn->FillFields(maPivotParameters.maColFields);
     342           0 :     mpListBoxRow->FillFields(maPivotParameters.maRowFields);
     343           0 :     mpListBoxPage->FillFields(maPivotParameters.maPageFields);
     344           0 : }
     345             : 
     346           0 : void ScPivotLayoutDialog::SetActive()
     347             : {
     348           0 :     if (mbDialogLostFocus)
     349             :     {
     350           0 :         mbDialogLostFocus = false;
     351           0 :         if(mpActiveEdit != nullptr)
     352             :         {
     353           0 :             mpActiveEdit->GrabFocus();
     354           0 :             if (mpActiveEdit == mpSourceEdit)
     355           0 :                 UpdateSourceRange();
     356             :         }
     357             :     }
     358             :     else
     359             :     {
     360           0 :         GrabFocus();
     361             :     }
     362             : 
     363           0 :     RefInputDone();
     364           0 : }
     365             : 
     366           0 : void ScPivotLayoutDialog::SetReference(const ScRange& rReferenceRange, ScDocument* pDocument)
     367             : {
     368           0 :     if (!mbDialogLostFocus)
     369           0 :         return;
     370             : 
     371           0 :     if (mpActiveEdit == nullptr)
     372           0 :         return;
     373             : 
     374           0 :     if (rReferenceRange.aStart != rReferenceRange.aEnd)
     375           0 :         RefInputStart(mpActiveEdit);
     376             : 
     377           0 :     OUString aReferenceString = rReferenceRange.Format(SCR_ABS_3D, pDocument, maAddressDetails);
     378             : 
     379           0 :     if (mpActiveEdit == mpSourceEdit)
     380             :     {
     381           0 :         mpSourceEdit->SetRefString(aReferenceString);
     382             :     }
     383           0 :     else if (mpActiveEdit == mpDestinationEdit)
     384             :     {
     385           0 :         mpDestinationEdit->SetRefString(aReferenceString);
     386           0 :     }
     387             : }
     388             : 
     389           0 : bool ScPivotLayoutDialog::IsRefInputMode() const
     390             : {
     391           0 :     return mbDialogLostFocus;
     392             : }
     393             : 
     394           0 : void ScPivotLayoutDialog::ItemInserted(ScItemValue* pItemValue, ScPivotLayoutTreeList::SvPivotTreeListType eType)
     395             : {
     396           0 :     if (pItemValue == NULL)
     397           0 :         return;
     398             : 
     399           0 :     switch (eType)
     400             :     {
     401             :         case ScPivotLayoutTreeList::ROW_LIST:
     402             :         case ScPivotLayoutTreeList::COLUMN_LIST:
     403             :         case ScPivotLayoutTreeList::PAGE_LIST:
     404             :         {
     405           0 :             mpListBoxRow->RemoveEntryForItem(pItemValue);
     406           0 :             mpListBoxColumn->RemoveEntryForItem(pItemValue);
     407           0 :             mpListBoxPage->RemoveEntryForItem(pItemValue);
     408             :         }
     409             :         case ScPivotLayoutTreeList::LABEL_LIST:
     410             :         {
     411           0 :             mpListBoxRow->RemoveEntryForItem(pItemValue);
     412           0 :             mpListBoxColumn->RemoveEntryForItem(pItemValue);
     413           0 :             mpListBoxPage->RemoveEntryForItem(pItemValue);
     414           0 :             mpListBoxData->RemoveEntryForItem(pItemValue);
     415             :         }
     416           0 :         break;
     417             :         default:
     418           0 :             break;
     419             :     }
     420             : }
     421             : 
     422           0 : void ScPivotLayoutDialog::UpdateSourceRange()
     423             : {
     424           0 :     if (!maPivotTableObject.GetSheetDesc())
     425           0 :        return;
     426             : 
     427           0 :     ScSheetSourceDesc aSourceSheet = *maPivotTableObject.GetSheetDesc();
     428             : 
     429           0 :     if (mpSourceRadioNamedRange->IsChecked())
     430             :     {
     431           0 :         OUString aEntryString = mpSourceListBox->GetSelectEntry();
     432           0 :         ScRange aSourceRange = lclGetRangeForNamedRange(aEntryString, mpDocument);
     433           0 :         if (!aSourceRange.IsValid() || aSourceSheet.GetSourceRange() == aSourceRange)
     434           0 :             return;
     435           0 :         aSourceSheet.SetRangeName(aEntryString);
     436             :     }
     437           0 :     else if (mpSourceRadioSelection->IsChecked())
     438             :     {
     439           0 :         OUString aSourceString = mpSourceEdit->GetText();
     440           0 :         ScRange aSourceRange;
     441           0 :         sal_uInt16 nResult = aSourceRange.Parse(aSourceString, mpDocument, maAddressDetails);
     442             : 
     443           0 :         bool bIsValid = (nResult & SCA_VALID) == SCA_VALID; // aSourceString is valid
     444             : 
     445           0 :         mpSourceEdit->SetRefValid(true);
     446             : 
     447           0 :         if (bIsValid)
     448             :         {
     449           0 :             ScRefAddress aStart;
     450           0 :             ScRefAddress aEnd;
     451             : 
     452           0 :             ConvertDoubleRef(mpDocument, aSourceString, 1, aStart, aEnd, maAddressDetails);
     453           0 :             aSourceRange.aStart = aStart.GetAddress();
     454           0 :             aSourceRange.aEnd = aEnd.GetAddress();
     455             :         }
     456             :         else
     457             :         {
     458           0 :             aSourceRange = lclGetRangeForNamedRange(aSourceString, mpDocument);
     459             :         }
     460             : 
     461           0 :         if (!aSourceRange.IsValid())
     462             :         {
     463           0 :             mpSourceEdit->SetRefValid(false);
     464           0 :             return;
     465             :         }
     466             : 
     467           0 :         if (aSourceSheet.GetSourceRange() == aSourceRange)
     468           0 :                 return;
     469             : 
     470           0 :         aSourceSheet.SetSourceRange(aSourceRange);
     471           0 :         if (aSourceSheet.CheckSourceRange() != 0)
     472             :         {
     473           0 :             mpSourceEdit->SetRefValid(false);
     474           0 :             return;
     475           0 :         }
     476             :     }
     477             :     else
     478             :     {
     479           0 :         return;
     480             :     }
     481             : 
     482           0 :     maPivotTableObject.SetSheetDesc(aSourceSheet);
     483           0 :     maPivotTableObject.FillOldParam(maPivotParameters);
     484           0 :     maPivotTableObject.FillLabelData(maPivotParameters);
     485             : 
     486           0 :     FillValuesToListBoxes();
     487             : }
     488             : 
     489           0 : bool ScPivotLayoutDialog::ApplyChanges()
     490             : {
     491           0 :     ScDPSaveData aSaveData;
     492           0 :     ApplySaveData(aSaveData);
     493           0 :     ApplyLabelData(aSaveData);
     494             : 
     495           0 :     ScRange aDestinationRange;
     496           0 :     bool bToNewSheet = false;
     497             : 
     498           0 :     if (!GetDestination(aDestinationRange, bToNewSheet))
     499           0 :         return false;
     500             : 
     501           0 :     SetDispatcherLock(false);
     502           0 :     SwitchToDocument();
     503             : 
     504           0 :     sal_uInt16 nWhichPivot = SC_MOD()->GetPool().GetWhich(SID_PIVOT_TABLE);
     505           0 :     ScPivotItem aPivotItem(nWhichPivot, &aSaveData, &aDestinationRange, bToNewSheet);
     506           0 :     mpViewData->GetViewShell()->SetDialogDPObject(&maPivotTableObject);
     507             : 
     508           0 :     SfxDispatcher* pDispatcher = GetBindings().GetDispatcher();
     509           0 :     SfxCallMode nCallMode = SfxCallMode::SLOT | SfxCallMode::RECORD;
     510           0 :     const SfxPoolItem* pResult = pDispatcher->Execute(SID_PIVOT_TABLE, nCallMode, &aPivotItem, NULL, 0);
     511             : 
     512           0 :     if (pResult != NULL)
     513             :     {
     514           0 :         const SfxBoolItem* pItem = reinterpret_cast<const SfxBoolItem*>(pResult);
     515           0 :         if (pItem)
     516             :         {
     517           0 :             return pItem->GetValue();
     518             :         }
     519             :     }
     520             : 
     521           0 :     SetDispatcherLock(true);
     522           0 :     return true;
     523             : }
     524             : 
     525           0 : void ScPivotLayoutDialog::ApplySaveData(ScDPSaveData& rSaveData)
     526             : {
     527           0 :     rSaveData.SetIgnoreEmptyRows(mpCheckIgnoreEmptyRows->IsChecked());
     528           0 :     rSaveData.SetRepeatIfEmpty(mpCheckIdentifyCategories->IsChecked());
     529           0 :     rSaveData.SetColumnGrand(mpCheckTotalColumns->IsChecked());
     530           0 :     rSaveData.SetRowGrand(mpCheckTotalRows->IsChecked());
     531           0 :     rSaveData.SetFilterButton(mpCheckAddFilter->IsChecked());
     532           0 :     rSaveData.SetDrillDown(mpCheckDrillToDetail->IsChecked());
     533             : 
     534           0 :     Reference<XDimensionsSupplier> xSource = maPivotTableObject.GetSource();
     535             : 
     536           0 :     ScPivotFieldVector aPageFieldVector;
     537           0 :     mpListBoxPage->PushEntriesToPivotFieldVector(aPageFieldVector);
     538             :     ScDPObject::ConvertOrientation(rSaveData, aPageFieldVector, DataPilotFieldOrientation_PAGE,
     539           0 :                                    xSource, maPivotParameters.maLabelArray);
     540             : 
     541           0 :     ScPivotFieldVector aColFieldVector;
     542           0 :     mpListBoxColumn->PushEntriesToPivotFieldVector(aColFieldVector);
     543             :     ScDPObject::ConvertOrientation(rSaveData, aColFieldVector, DataPilotFieldOrientation_COLUMN,
     544           0 :                                    xSource, maPivotParameters.maLabelArray);
     545             : 
     546           0 :     ScPivotFieldVector aRowFieldVector;
     547           0 :     mpListBoxRow->PushEntriesToPivotFieldVector(aRowFieldVector);
     548             :     ScDPObject::ConvertOrientation(rSaveData, aRowFieldVector, DataPilotFieldOrientation_ROW,
     549           0 :                                    xSource, maPivotParameters.maLabelArray);
     550             : 
     551           0 :     ScPivotFieldVector aDataFieldVector;
     552           0 :     mpListBoxData->PushEntriesToPivotFieldVector(aDataFieldVector);
     553             :     ScDPObject::ConvertOrientation(rSaveData, aDataFieldVector, DataPilotFieldOrientation_DATA,
     554             :                                    xSource, maPivotParameters.maLabelArray,
     555           0 :                                    &aColFieldVector, &aRowFieldVector, &aPageFieldVector);
     556           0 : }
     557             : 
     558           0 : void ScPivotLayoutDialog::ApplyLabelData(ScDPSaveData& rSaveData)
     559             : {
     560           0 :     ScDPLabelDataVector::const_iterator it;
     561           0 :     ScDPLabelDataVector& rLabelDataVector = GetLabelDataVector();
     562             : 
     563           0 :     for (it = rLabelDataVector.begin(); it != rLabelDataVector.end(); ++it)
     564             :     {
     565           0 :         const ScDPLabelData& pLabelData = *it;
     566             : 
     567           0 :         OUString aUnoName = ScDPUtil::createDuplicateDimensionName(pLabelData.maName, pLabelData.mnDupCount);
     568           0 :         ScDPSaveDimension* pSaveDimensions = rSaveData.GetExistingDimensionByName(aUnoName);
     569             : 
     570           0 :         if (pSaveDimensions == NULL)
     571           0 :             continue;
     572             : 
     573           0 :         pSaveDimensions->SetUsedHierarchy(pLabelData.mnUsedHier);
     574           0 :         pSaveDimensions->SetShowEmpty(pLabelData.mbShowAll);
     575           0 :         pSaveDimensions->SetRepeatItemLabels(pLabelData.mbRepeatItemLabels);
     576           0 :         pSaveDimensions->SetSortInfo(&pLabelData.maSortInfo);
     577           0 :         pSaveDimensions->SetLayoutInfo(&pLabelData.maLayoutInfo);
     578           0 :         pSaveDimensions->SetAutoShowInfo(&pLabelData.maShowInfo);
     579             : 
     580           0 :         bool bManualSort = (pLabelData.maSortInfo.Mode == DataPilotFieldSortMode::MANUAL);
     581             : 
     582           0 :         std::vector<ScDPLabelData::Member>::const_iterator itMember;
     583           0 :         for (itMember = pLabelData.maMembers.begin(); itMember != pLabelData.maMembers.end(); ++itMember)
     584             :         {
     585           0 :             const ScDPLabelData::Member& rLabelMember = *itMember;
     586           0 :             ScDPSaveMember* pMember = pSaveDimensions->GetMemberByName(rLabelMember.maName);
     587             : 
     588           0 :             if (bManualSort || !rLabelMember.mbVisible || !rLabelMember.mbShowDetails)
     589             :             {
     590           0 :                 pMember->SetIsVisible(rLabelMember.mbVisible);
     591           0 :                 pMember->SetShowDetails(rLabelMember.mbShowDetails);
     592             :             }
     593             :         }
     594           0 :     }
     595           0 : }
     596             : 
     597           0 : bool ScPivotLayoutDialog::GetDestination(ScRange& aDestinationRange, bool& bToNewSheet)
     598             : {
     599           0 :     bToNewSheet = false;
     600             : 
     601           0 :     if (mpDestinationRadioNamedRange->IsChecked())
     602             :     {
     603           0 :         OUString aName = mpDestinationListBox->GetSelectEntry();
     604           0 :         aDestinationRange = lclGetRangeForNamedRange(aName, mpDocument);
     605           0 :         if (!aDestinationRange.IsValid())
     606           0 :             return false;
     607             :     }
     608           0 :     else if (mpDestinationRadioSelection->IsChecked())
     609             :     {
     610           0 :         ScAddress aAddress;
     611           0 :         aAddress.Parse(mpDestinationEdit->GetText(), mpDocument, maAddressDetails);
     612           0 :         aDestinationRange = ScRange(aAddress);
     613             :     }
     614             :     else
     615             :     {
     616           0 :         bToNewSheet = true;
     617           0 :         aDestinationRange = ScRange(maPivotParameters.nCol, maPivotParameters.nRow, maPivotParameters.nTab);
     618             :     }
     619           0 :     return true;
     620             : }
     621             : 
     622           0 : ScItemValue* ScPivotLayoutDialog::GetItem(SCCOL nColumn)
     623             : {
     624           0 :     return mpListBoxField->GetItem(nColumn);
     625             : }
     626             : 
     627           0 : bool ScPivotLayoutDialog::IsDataElement(SCCOL nColumn)
     628             : {
     629           0 :     return mpListBoxField->IsDataElement(nColumn);
     630             : }
     631             : 
     632           0 : ScDPLabelData* ScPivotLayoutDialog::GetLabelData(SCCOL nColumn)
     633             : {
     634           0 :     return &maPivotParameters.maLabelArray[nColumn];
     635             : }
     636             : 
     637           0 : void ScPivotLayoutDialog::PushDataFieldNames(std::vector<ScDPName>& rDataFieldNames)
     638             : {
     639           0 :     return mpListBoxData->PushDataFieldNames(rDataFieldNames);
     640             : }
     641             : 
     642           0 : bool ScPivotLayoutDialog::Close()
     643             : {
     644           0 :     return DoClose( ScPivotLayoutWrapper::GetChildWindowId() );
     645             : }
     646             : 
     647           0 : IMPL_LINK( ScPivotLayoutDialog, OKClicked, PushButton*, /*pButton*/ )
     648             : {
     649           0 :     ApplyChanges();
     650           0 :     Close();
     651           0 :     return 0;
     652             : }
     653             : 
     654           0 : IMPL_LINK( ScPivotLayoutDialog, CancelClicked, PushButton*, /*pButton*/ )
     655             : {
     656           0 :     Close();
     657           0 :     return 0;
     658             : }
     659             : 
     660           0 : IMPL_LINK(ScPivotLayoutDialog, GetFocusHandler, Control*, pCtrl)
     661             : {
     662           0 :     mpActiveEdit = NULL;
     663             : 
     664           0 :     if (pCtrl == static_cast<Control*>(mpSourceEdit)  ||
     665           0 :         pCtrl == static_cast<Control*>(mpSourceButton))
     666             :     {
     667           0 :         mpActiveEdit = mpSourceEdit;
     668             :     }
     669           0 :     else if (pCtrl == static_cast<Control*>(mpDestinationEdit)  ||
     670           0 :              pCtrl == static_cast<Control*>(mpDestinationButton))
     671             :     {
     672           0 :         mpActiveEdit = mpDestinationEdit;
     673             :     }
     674             : 
     675           0 :     if (mpActiveEdit)
     676           0 :         mpActiveEdit->SetSelection(Selection(0, SELECTION_MAX));
     677             : 
     678           0 :     return 0;
     679             : }
     680             : 
     681           0 : IMPL_LINK_NOARG(ScPivotLayoutDialog, LoseFocusHandler)
     682             : {
     683           0 :     mbDialogLostFocus = !IsActive();
     684           0 :     return 0;
     685             : }
     686             : 
     687           0 : IMPL_LINK_NOARG(ScPivotLayoutDialog, SourceEditModified)
     688             : {
     689           0 :     UpdateSourceRange();
     690           0 :     return 0;
     691             : }
     692             : 
     693           0 : IMPL_LINK_NOARG(ScPivotLayoutDialog, ToggleSource)
     694             : {
     695           0 :     bool bNamedRange = mpSourceRadioNamedRange->IsChecked();
     696           0 :     bool bSelection = mpSourceRadioSelection->IsChecked();
     697           0 :     mpSourceListBox->Enable(bNamedRange);
     698           0 :     mpSourceButton->Enable(bSelection);
     699           0 :     mpSourceEdit->Enable(bSelection);
     700           0 :     UpdateSourceRange();
     701           0 :     return 0;
     702             : }
     703             : 
     704           0 : IMPL_LINK_NOARG(ScPivotLayoutDialog, ToggleDestination)
     705             : {
     706           0 :     bool bNamedRange = mpDestinationRadioNamedRange->IsChecked();
     707           0 :     bool bSelection = mpDestinationRadioSelection->IsChecked();
     708           0 :     mpDestinationListBox->Enable(bNamedRange);
     709           0 :     mpDestinationButton->Enable(bSelection);
     710           0 :     mpDestinationEdit->Enable(bSelection);
     711           0 :     return 0;
     712         156 : }
     713             : 
     714             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11