summaryrefslogtreecommitdiffstats
path: root/sc/source/ui/inc/preview.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/ui/inc/preview.hxx')
-rw-r--r--sc/source/ui/inc/preview.hxx163
1 files changed, 163 insertions, 0 deletions
diff --git a/sc/source/ui/inc/preview.hxx b/sc/source/ui/inc/preview.hxx
new file mode 100644
index 0000000000..606454d992
--- /dev/null
+++ b/sc/source/ui/inc/preview.hxx
@@ -0,0 +1,163 @@
+/* -*- 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:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#pragma once
+
+#include <vcl/window.hxx>
+#include "printfun.hxx"
+#include <markdata.hxx>
+
+#include <vector>
+
+class ScDocShell;
+class ScPreviewShell;
+class FmFormView;
+
+class SAL_DLLPUBLIC_RTTI ScPreview : public vcl::Window
+{
+private:
+ ScMarkData::MarkedTabsType maSelectedTabs;
+ // set:
+ tools::Long nPageNo; // Pages in document
+ sal_uInt16 nZoom; // set Zoom
+ Point aOffset; // positive
+
+ // calculated:
+ SCTAB nTabCount;
+ SCTAB nTabsTested; // for how many sheets is nPages valid?
+ std::vector<tools::Long> nPages;
+ std::vector<tools::Long> nFirstAttr;
+ SCTAB nTab; // Sheet
+ tools::Long nTabPage; // Page of sheet
+ tools::Long nTabStart; // First (real) page of the sheet
+ tools::Long nDisplayStart; // same as above, relative to the start of counting
+ DateTime aDateTime;
+ tools::Long nTotalPages;
+ ScPrintState aState;
+ std::unique_ptr<ScPreviewLocationData> pLocationData; // stores table layout for accessibility API
+ std::unique_ptr<FmFormView> pDrawView;
+
+ // internal:
+ ScDocShell* pDocShell;
+ ScPreviewShell* pViewShell;
+
+ bool bInGetState:1;
+ bool bValid:1; // the following values true
+ bool bStateValid:1;
+ bool bLocationValid:1;
+ bool bInPaint:1;
+ bool bInSetZoom:1;
+ bool bLeftRulerMove:1;
+ bool bRightRulerMove:1;
+ bool bTopRulerMove:1;
+ bool bBottomRulerMove:1;
+ bool bHeaderRulerMove:1;
+ bool bFooterRulerMove:1;
+ bool bLeftRulerChange:1;
+ bool bRightRulerChange:1;
+ bool bTopRulerChange:1;
+ bool bBottomRulerChange:1;
+ bool bHeaderRulerChange:1;
+ bool bFooterRulerChange:1;
+ bool bPageMargin:1;
+ bool bColRulerMove:1;
+ bool mbHasEmptyRangeTable:1; /// we have at least one sheet with empty print range (print range set to '- none -').
+
+ ScRange aPageArea;
+ std::vector<tools::Long> mvRight;
+ tools::Long nLeftPosition;
+ tools::Long mnScale;
+ SCCOL nColNumberButtonDown;
+ Point aButtonDownChangePoint;
+ Point aButtonDownPt;
+ Point aButtonUpPt;
+ tools::Long nHeaderHeight;
+ tools::Long nFooterHeight;
+
+ void TestLastPage();
+ void CalcPages();
+ void RecalcPages();
+ void UpdateDrawView();
+ void DoPrint( ScPreviewLocationData* pFillLocation );
+
+ void InvalidateLocationData( SfxHintId nId );
+
+ using Window::SetZoom;
+
+protected:
+ virtual void Paint( vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect ) override;
+ virtual void Command( const CommandEvent& rCEvt ) override;
+ virtual void KeyInput( const KeyEvent& rKEvt ) override;
+ virtual void MouseMove( const MouseEvent& rMEvt ) override;
+ virtual void MouseButtonDown( const MouseEvent& rMEvt ) override;
+ virtual void MouseButtonUp( const MouseEvent& rMEvt ) override;
+
+ virtual void GetFocus() override;
+ virtual void LoseFocus() override;
+
+ virtual css::uno::Reference< css::accessibility::XAccessible > CreateAccessible() override;
+
+public:
+ ScPreview( vcl::Window* pParent, ScDocShell* pDocSh, ScPreviewShell* pViewSh );
+ virtual ~ScPreview() override;
+ virtual void dispose() override;
+
+ virtual void DataChanged( const DataChangedEvent& rDCEvt ) override;
+
+ SC_DLLPUBLIC void DataChanged(bool bNewTime); // Instead of calling Invalidate
+ void DoInvalidate();
+
+ void SetXOffset( tools::Long nX );
+ void SetYOffset( tools::Long nY );
+ void SetZoom(sal_uInt16 nNewZoom);
+ SC_DLLPUBLIC void SetPageNo( tools::Long nPage );
+
+ bool GetPageMargins() const { return bPageMargin; }
+ void SetPageMargins( bool bVal ) { bPageMargin = bVal; }
+ void DrawInvert( tools::Long nDragPos, PointerStyle nFlags );
+ void DragMove( tools::Long nDragMovePos, PointerStyle nFlags );
+
+ const ScPreviewLocationData& GetLocationData();
+
+ OUString GetPosString();
+
+ tools::Long GetPageNo() const { return nPageNo; }
+ sal_uInt16 GetZoom() const { return nZoom; }
+ const Point& GetOffset() const { return aOffset; }
+
+ SCTAB GetTab() { if (!bValid) { CalcPages(); RecalcPages(); } return nTab; }
+ tools::Long GetTotalPages() { if (!bValid) { CalcPages(); RecalcPages(); } return nTotalPages; }
+
+ bool AllTested() const { return bValid && nTabsTested >= nTabCount; }
+
+ sal_uInt16 GetOptimalZoom(bool bWidthOnly);
+ SC_DLLPUBLIC tools::Long GetFirstPage(SCTAB nTab);
+
+ void CalcAll() { CalcPages(); }
+ void SetInGetState(bool bSet) { bInGetState = bSet; }
+
+ DECL_DLLPRIVATE_STATIC_LINK( ScPreview, InvalidateHdl, void*, void );
+ static void StaticInvalidate();
+
+ FmFormView* GetDrawView() { return pDrawView.get(); }
+
+ SC_DLLPUBLIC void SetSelectedTabs(const ScMarkData& rMark);
+ const ScMarkData::MarkedTabsType& GetSelectedTabs() const { return maSelectedTabs; }
+};
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */