summaryrefslogtreecommitdiff
path: root/sc/source/ui/dbgui/PivotLayoutTreeListBase.cxx
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.com>2014-03-30 21:12:27 +0200
committerTomaž Vajngerl <tomaz.vajngerl@collabora.com>2014-03-31 09:44:44 +0200
commit4f1f8b8e993b98095bf50c9e432fb0400d318b1f (patch)
tree8d24af3abd975baa0924fe28a4dca9f0dfb0c638 /sc/source/ui/dbgui/PivotLayoutTreeListBase.cxx
parent4b83eb0a08934922cc7aad0b259706b5c5dfadde (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.cxx151
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: */