1
0
Fork 0
libreoffice/sc/source/ui/inc/preview.hxx
Daniel Baumann 8e63e14cf6
Adding upstream version 4:25.2.3.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 16:20:04 +02:00

163 lines
6.3 KiB
C++

/* -*- 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: */