summaryrefslogtreecommitdiff
path: root/sc/source/ui/inc/pvlaydlg.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/ui/inc/pvlaydlg.hxx')
-rw-r--r--sc/source/ui/inc/pvlaydlg.hxx241
1 files changed, 241 insertions, 0 deletions
diff --git a/sc/source/ui/inc/pvlaydlg.hxx b/sc/source/ui/inc/pvlaydlg.hxx
new file mode 100644
index 000000000000..b7a71aebc1fe
--- /dev/null
+++ b/sc/source/ui/inc/pvlaydlg.hxx
@@ -0,0 +1,241 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: pvlaydlg.hxx,v $
+ * $Revision: 1.12 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef SC_PVLAYDLG_HXX
+#define SC_PVLAYDLG_HXX
+
+#include <vector>
+#include <memory>
+#include <boost/shared_ptr.hpp>
+
+#ifndef _LSTBOX_HXX //autogen
+#include <vcl/lstbox.hxx>
+#endif
+#ifndef _SCRBAR_HXX //autogen
+#include <vcl/scrbar.hxx>
+#endif
+#include <svtools/stdctrl.hxx>
+#ifndef _MOREBTN_HXX //autogen
+#include <vcl/morebtn.hxx>
+#endif
+#include "pivot.hxx"
+#include "anyrefdg.hxx"
+#include "fieldwnd.hxx"
+#include "formula/funcutl.hxx"
+
+/*==========================================================================*\
+
+ Eine Instanz der Klasse ScPivotLayoutDlg ist ein (semi-)modaler
+ Dialog, in dem mit der Maus Felder mit Spaltenueberschriften den
+ drei Pivot-Kategorien "Spalte", "Zeile" und "Daten" zugeordnet
+ werden koennen.
+
+ Der Dialog erhaelt in der Struktur LabelData Informationen ueber
+ diese Ueberschriften (Name, Art (Zahl/String) und Funktionsmaske).
+ Weiterhin werden drei PivotFeld-Arrays uebergeben, mit denen die
+ drei Kategorie-Fenster initialisiert werden. Ein Kategorie-Fenster
+ wird durch eine Instanz der Klasse FieldWindow dargestellt. Ein
+ solches Fenster ist fuer die Darstellung der Datenstrukturen am
+ Schirm zustaendig. Es meldet Mausaktionen an den Dialog weiter und
+ bietet entsprechende Methoden zur Veraenderung der Darstellung.
+ Der Dialog sorgt fuer den Abgleich der interenen Datenstrukturen mit
+ der Bildschirmdarstellung. Ein weiteres FieldWindow (Select) bietet
+ alle Tabellenueberschriften zur Auswahl an, ist also "read-only".
+
+\*==========================================================================*/
+
+//============================================================================
+
+class ScViewData;
+class ScDocument;
+class ScRangeData;
+struct ScDPFuncData;
+class ScDPObject;
+
+//============================================================================
+
+#define FUNC_COUNT 11
+
+class ScDPLayoutDlg : public ScAnyRefDlg
+{
+public:
+ ScDPLayoutDlg(
+ SfxBindings* pB,
+ SfxChildWindow* pCW,
+ Window* pParent,
+ const ScDPObject& rDPObject );
+ virtual ~ScDPLayoutDlg();
+
+ virtual void SetReference( const ScRange& rRef, ScDocument* pDoc );
+ virtual BOOL IsRefInputMode() const { return bRefInputMode; }
+ virtual void SetActive();
+ virtual BOOL Close();
+ virtual void StateChanged( StateChangedType nStateChange );
+
+ void NotifyDoubleClick ( ScDPFieldType eType, size_t nFieldIndex );
+ PointerStyle NotifyMouseButtonDown( ScDPFieldType eType, size_t nFieldIndex );
+ void NotifyMouseButtonUp ( const Point& rAt );
+ PointerStyle NotifyMouseMove ( const Point& rAt );
+ void NotifyFieldFocus ( ScDPFieldType eType, BOOL bGotFocus );
+ void NotifyMoveField ( ScDPFieldType eToType );
+ void NotifyRemoveField ( ScDPFieldType eType, size_t nFieldIndex );
+ BOOL NotifyMoveSlider ( USHORT nKeyCode ); // return TRUE, if position changed
+
+protected:
+ virtual void Deactivate();
+
+private:
+ typedef boost::shared_ptr< ScDPFuncData > ScDPFuncDataRef;
+ typedef std::vector< ScDPFuncDataRef > ScDPFuncDataVec;
+ typedef std::auto_ptr< ScDPObject > ScDPObjectPtr;
+
+ FixedLine aFlLayout;
+ FixedText aFtPage;
+ ScDPFieldWindow aWndPage;
+ FixedText aFtCol;
+ ScDPFieldWindow aWndCol;
+ FixedText aFtRow;
+ ScDPFieldWindow aWndRow;
+ FixedText aFtData;
+ ScDPFieldWindow aWndData;
+ ScDPFieldWindow aWndSelect;
+ ScrollBar aSlider;
+ FixedInfo aFtInfo;
+
+ FixedLine aFlAreas;
+
+ // DP source selection
+ FixedText aFtInArea;
+ ::formula::RefEdit aEdInPos;
+ ::formula::RefButton aRbInPos;
+
+ // DP output location
+ ListBox aLbOutPos;
+ FixedText aFtOutArea;
+ formula::RefEdit aEdOutPos;
+ formula::RefButton aRbOutPos;
+
+ CheckBox aBtnIgnEmptyRows;
+ CheckBox aBtnDetectCat;
+ CheckBox aBtnTotalCol;
+ CheckBox aBtnTotalRow;
+ CheckBox aBtnFilter;
+ CheckBox aBtnDrillDown;
+
+ OKButton aBtnOk;
+ CancelButton aBtnCancel;
+ HelpButton aBtnHelp;
+ PushButton aBtnRemove;
+ PushButton aBtnOptions;
+ MoreButton aBtnMore;
+
+ const String aStrUndefined;
+ const String aStrNewTable;
+ std::vector< String > aFuncNameArr;
+
+ ScDPFieldType eDnDFromType;
+ size_t nDnDFromIndex;
+ BOOL bIsDrag;
+
+ ::formula::RefEdit* pEditActive;
+
+ Rectangle aRectPage;
+ Rectangle aRectRow;
+ Rectangle aRectCol;
+ Rectangle aRectData;
+ Rectangle aRectSelect;
+
+ ScDPLabelDataVec aLabelDataArr; // (nCol, Feldname, Zahl/Text)
+
+ ScDPFieldType eLastActiveType; /// Type of last active area.
+ size_t nOffset; /// Offset of first field in TYPE_SELECT area.
+
+ ScDPFuncDataVec aSelectArr;
+ ScDPFuncDataVec aPageArr;
+ ScDPFuncDataVec aColArr;
+ ScDPFuncDataVec aRowArr;
+ ScDPFuncDataVec aDataArr;
+
+ ScDPObjectPtr xDlgDPObject;
+ ScRange aOldRange;
+ ScPivotParam thePivotData;
+ ScViewData* pViewData;
+ ScDocument* pDoc;
+ BOOL bRefInputMode;
+
+private:
+ ScDPFieldWindow& GetFieldWindow ( ScDPFieldType eType );
+ void Init ();
+ void InitWndSelect ( LabelData** ppLabelArr, long nLabels );
+ void InitWnd ( PivotField* pArr, long nCount, ScDPFieldType eType );
+ void InitFocus ();
+ void InitFields ();
+ void CalcWndSizes ();
+ Point DlgPos2WndPos ( const Point& rPt, Window& rWnd );
+ ScDPLabelData* GetLabelData ( SCsCOL nCol, size_t* pPos = NULL );
+ String GetLabelString ( SCsCOL nCol );
+ String GetFuncString ( USHORT& rFuncMask, BOOL bIsValue = TRUE );
+ BOOL Contains ( ScDPFuncDataVec* pArr, SCsCOL nCol, size_t& nAt );
+ void Remove ( ScDPFuncDataVec* pArr, size_t nAt );
+ void Insert ( ScDPFuncDataVec* pArr, const ScDPFuncData& rFData, size_t nAt );
+
+ void AddField ( size_t nFromIndex,
+ ScDPFieldType eToType, const Point& rAtPos );
+ void MoveField ( ScDPFieldType eFromType, size_t nFromIndex,
+ ScDPFieldType eToType, const Point& rAtPos );
+ void RemoveField ( ScDPFieldType eRemType, size_t nRemIndex );
+
+ BOOL GetPivotArrays ( PivotField* pPageArr,
+ PivotField* pColArr,
+ PivotField* pRowArr,
+ PivotField* pDataArr,
+ USHORT& rPageCount,
+ USHORT& rColCount,
+ USHORT& rRowCount,
+ USHORT& rDataCount );
+
+ void UpdateSrcRange();
+
+ // Handler
+ DECL_LINK( ClickHdl, PushButton * );
+ DECL_LINK( ScrollHdl, ScrollBar * );
+ DECL_LINK( SelAreaHdl, ListBox * );
+ DECL_LINK( MoreClickHdl, MoreButton * );
+ DECL_LINK( EdModifyHdl, Edit * );
+ DECL_LINK( EdInModifyHdl, Edit * );
+ DECL_LINK( OkHdl, OKButton * );
+ DECL_LINK( CancelHdl, CancelButton * );
+ DECL_LINK( GetFocusHdl, Control* );
+};
+
+
+
+#endif // SC_PVLAYDLG_HXX
+