diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.com> | 2014-03-30 21:12:27 +0200 |
---|---|---|
committer | Tomaž Vajngerl <tomaz.vajngerl@collabora.com> | 2014-03-31 09:44:44 +0200 |
commit | 4f1f8b8e993b98095bf50c9e432fb0400d318b1f (patch) | |
tree | 8d24af3abd975baa0924fe28a4dca9f0dfb0c638 /sc/source/ui/dbgui/PivotLayoutTreeListBase.cxx | |
parent | 4b83eb0a08934922cc7aad0b259706b5c5dfadde (diff) |
pivot: new pivot table layout dialog
This commit adds a new pivot table layout dialog which was implemented
from scratch. Instead of custom controls this one uses list boxes
for field entries which greatly reduces the code. It also fixes
some visual and behaviour bugs and adds the possibility to edit the
"Data" field.
Change-Id: I6c01252acee5a2e8910e40e65904504d00e03057
Diffstat (limited to 'sc/source/ui/dbgui/PivotLayoutTreeListBase.cxx')
-rw-r--r-- | sc/source/ui/dbgui/PivotLayoutTreeListBase.cxx | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/sc/source/ui/dbgui/PivotLayoutTreeListBase.cxx b/sc/source/ui/dbgui/PivotLayoutTreeListBase.cxx new file mode 100644 index 000000000000..ee5b44a5dd7c --- /dev/null +++ b/sc/source/ui/dbgui/PivotLayoutTreeListBase.cxx @@ -0,0 +1,151 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + */ + +#include "PivotLayoutTreeListBase.hxx" +#include "PivotLayoutDialog.hxx" + +#include <reffact.hxx> +#include <svtools/treelistentry.hxx> +#include "scabstdlg.hxx" + +using namespace std; + +ScPivotLayoutTreeListBase::ScPivotLayoutTreeListBase(Window* pParent, WinBits nBits, SvPivotTreeListType eType) : + SvTreeListBox(pParent, nBits), + meType(eType) +{ + SetHighlightRange(); + SetDragDropMode(SV_DRAGDROP_CTRL_MOVE | SV_DRAGDROP_APP_MOVE | SV_DRAGDROP_APP_DROP); +} + +ScPivotLayoutTreeListBase::~ScPivotLayoutTreeListBase() +{} + +void ScPivotLayoutTreeListBase::Setup(ScPivotLayoutDialog* pParent) +{ + mpParent = pParent; +} + +DragDropMode ScPivotLayoutTreeListBase::NotifyStartDrag(TransferDataContainer& /*aTransferDataContainer*/, + SvTreeListEntry* /*pEntry*/ ) +{ + return GetDragDropMode(); +} + +void ScPivotLayoutTreeListBase::DragFinished(sal_Int8 /*nDropAction*/) +{} + +sal_Int8 ScPivotLayoutTreeListBase::AcceptDrop(const AcceptDropEvent& rEvent) +{ + return SvTreeListBox::AcceptDrop(rEvent); +} + +bool ScPivotLayoutTreeListBase::NotifyAcceptDrop(SvTreeListEntry* /*pEntry*/) +{ + return true; +} + +sal_Bool ScPivotLayoutTreeListBase::NotifyMoving(SvTreeListEntry* pTarget, SvTreeListEntry* pSource, + SvTreeListEntry*& /*rpNewParent*/, sal_uLong& /*rNewChildPos*/) +{ + InsertEntryForSourceTarget(pSource, pTarget); + return sal_False; +} + +sal_Bool ScPivotLayoutTreeListBase::NotifyCopying(SvTreeListEntry* /*pTarget*/, SvTreeListEntry* /*pSource*/, + SvTreeListEntry*& /*rpNewParent*/, sal_uLong& /*rNewChildPos*/) +{ + return sal_False; +} + +bool ScPivotLayoutTreeListBase::HasEntry(SvTreeListEntry* pEntry) +{ + SvTreeListEntry* pEachEntry; + for (pEachEntry = First(); pEachEntry != NULL; pEachEntry = Next(pEachEntry)) + { + if(pEachEntry == pEntry) + return true; + } + return false; +} + +void ScPivotLayoutTreeListBase::PushEntriesToPivotFieldVector(ScPivotFieldVector& rVector) +{ + SvTreeListEntry* pEachEntry; + for (pEachEntry = First(); pEachEntry != NULL; pEachEntry = Next(pEachEntry)) + { + ScItemValue* pItemValue = (ScItemValue*) pEachEntry->GetUserData(); + ScPivotFuncData& rFunctionData = pItemValue->maFunctionData; + + ScPivotField aField; + + aField.nCol = rFunctionData.mnCol; + aField.mnOriginalDim = rFunctionData.mnOriginalDim; + + if (rFunctionData.mnFuncMask == PIVOT_FUNC_NONE || + rFunctionData.mnFuncMask == PIVOT_FUNC_AUTO) + { + aField.nFuncMask = PIVOT_FUNC_SUM; + } + else + { + aField.nFuncMask = rFunctionData.mnFuncMask; + } + + aField.mnDupCount = rFunctionData.mnDupCount; + aField.maFieldRef = rFunctionData.maFieldRef; + + rVector.push_back(aField); + } +} + +void ScPivotLayoutTreeListBase::InsertEntryForSourceTarget(SvTreeListEntry* /*pSource*/, SvTreeListEntry* /*pTarget*/) +{} + +void ScPivotLayoutTreeListBase::InsertEntryForItem(ScItemValue* /*pItemValue*/, sal_uLong /*nPosition*/) +{} + +void ScPivotLayoutTreeListBase::RemoveEntryForItem(ScItemValue* pItemValue) +{ + SvTreeListEntry* pEachEntry; + for (pEachEntry = First(); pEachEntry != NULL; pEachEntry = Next(pEachEntry)) + { + ScItemValue* pEachItemValue = (ScItemValue*) pEachEntry->GetUserData(); + if (pEachItemValue == pItemValue) + { + GetModel()->Remove(pEachEntry); + return; + } + } +} + +void ScPivotLayoutTreeListBase::GetFocus() +{ + SvTreeListBox::GetFocus(); + + if( GetGetFocusFlags() & GETFOCUS_MNEMONIC ) + { + SvTreeListEntry* pEntry = mpParent->mpPreviouslyFocusedListBox->GetCurEntry(); + InsertEntryForSourceTarget(pEntry, NULL); + + if(mpParent->mpPreviouslyFocusedListBox != NULL) + mpParent->mpPreviouslyFocusedListBox->GrabFocus(); + } + + mpParent->mpCurrentlyFocusedListBox = this; +} + +void ScPivotLayoutTreeListBase::LoseFocus() +{ + SvTreeListBox::LoseFocus(); + mpParent->mpPreviouslyFocusedListBox = this; +} +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |