1
0
Fork 0
libreoffice/sc/source/ui/inc/drawview.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

179 lines
6.8 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 <svx/fmview.hxx>
#include <global.hxx>
namespace com::sun::star::datatransfer { class XTransferable; }
class ScDocument;
class ScViewData;
class ScDrawObjData;
class SdrUndoManager;
class ScDrawView final : public FmFormView
{
ScViewData* pViewData;
VclPtr<OutputDevice> pDev; //! needed ?
ScDocument& rDoc;
SCTAB nTab;
Fraction aScaleX; // Factor for Drawing-MapMode
Fraction aScaleY;
std::unique_ptr<SdrDropMarkerOverlay> pDropMarker;
SdrObject* pDropMarkObj;
bool bInConstruct;
void Construct();
virtual void ModelHasChanged() override;
// add custom handles (used by other apps, e.g. AnchorPos)
virtual void AddCustomHdl() override;
void ImplClearCalcDropMarker();
// Create a local UndoManager
std::unique_ptr<SdrUndoManager> createLocalTextUndoManager() override;
public:
ScDrawView(
OutputDevice* pOut,
ScViewData* pData);
virtual ~ScDrawView() override;
virtual void MarkListHasChanged() override;
virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override;
virtual void DoConnect(SdrOle2Obj* pOleObj) override;
virtual void MakeVisible( const tools::Rectangle& rRect, vcl::Window& rWin ) override;
virtual void DeleteMarked() override;
virtual bool SdrBeginTextEdit(
SdrObject* pObj,
SdrPageView* pPV = nullptr,
vcl::Window* pWin = nullptr,
bool bIsNewObj = false,
SdrOutliner* pGivenOutliner = nullptr,
OutlinerView* pGivenOutlinerView = nullptr,
bool bDontDeleteOutliner = false,
bool bOnlyOneView = false,
bool bGrabFocus = true) override;
virtual SdrEndTextEditKind SdrEndTextEdit( bool bDontDeleteReally = false ) override;
void MarkDropObj( SdrObject* pObj );
void SetMarkedToLayer( SdrLayerID nLayerNo );
void InvalidateAttribs();
void InvalidateDrawTextAttrs();
void BeginDrag( vcl::Window* pWindow, const Point& rStartPos );
void DoCut();
void DoCopy();
void GetScale( Fraction& rFractX, Fraction& rFractY ) const;
void RecalcScale();
void UpdateWorkArea();
SCTAB GetTab() const { return nTab; }
void CalcNormScale( Fraction& rFractX, Fraction& rFractY ) const;
void SetPageAnchored();
void SetCellAnchored(bool bResizeWithCell);
ScAnchorType GetAnchorType() const;
void UpdateIMap( SdrObject* pObj );
void UpdateUserViewOptions();
void SetMarkedOriginalSize();
void FitToCellSize();
bool SelectObject( std::u16string_view rName );
bool HasMarkedControl() const;
bool HasMarkedInternal() const;
bool InsertObjectSafe(SdrObject* pObj, SdrPageView& rPV);
/** Returns the selected object, if it is the caption object of a cell note.
@param ppCaptData (out-param) If not null, returns the pointer to the caption object data. */
SdrObject* GetMarkedNoteCaption( ScDrawObjData** ppCaptData );
/** Locks/unlocks the specified layer in the draw page.
Unlocked layer is required to be able to edit the contained objects. */
void LockCalcLayer( SdrLayerID nLayer, bool bLock );
/** Locks/unlocks the background layer that contains background objects.
Unlocked layer is required to be able to edit the objects. */
void LockBackgroundLayer( bool bLock ) { LockCalcLayer( SC_LAYER_BACK, bLock ); }
/** Locks/unlocks the internal layer that contains caption objects of cell notes.
Unlocked layer is required to be able to edit the contained objects. */
void LockInternalLayer( bool bLock = true ) { LockCalcLayer( SC_LAYER_INTERN, bLock ); }
/** Unlocks the internal layer that contains caption objects of cell notes. */
void UnlockInternalLayer() { LockInternalLayer( false ); }
SdrEndTextEditKind ScEndTextEdit(); // calls SetDrawTextUndo(0)
css::uno::Reference< css::datatransfer::XTransferable > CopyToTransferable();
SdrObject* GetObjectByName(std::u16string_view rName);
bool GetObjectIsMarked( const SdrObject * pObject );
void SelectCurrentViewObject( std::u16string_view rName );
// #i123922# helper which checks if a Graphic may be applied to an existing
// SdrObject; if it's a SdrGrafObj the fill will be replaced. If it's a
// fillable, non-OLE SdrObject, the FillStyle will be adapted
SdrObject* ApplyGraphicToObject(
SdrObject& rHitObject,
const Graphic& rGraphic,
const OUString& rBeginUndoText,
const OUString& rFile);
static void CheckOle( const SdrMarkList& rMarkList, bool& rAnyOle, bool& rOneOle );
void SyncForGrid( SdrObject* pObj );
bool calculateGridOffsetForSdrObject(
SdrObject& rSdrObject,
basegfx::B2DVector& rTarget) const;
bool calculateGridOffsetForB2DRange(
const basegfx::B2DRange& rB2DRange,
basegfx::B2DVector& rTarget) const;
void resetGridOffsetsForAllSdrPageViews();
/// See SdrMarkView::GetSfxViewShell().
SfxViewShell* GetSfxViewShell() const override;
// Do not create ObjectContact locally, but offer a call to allow override
// and to create own derivations of ObjectContact
virtual sdr::contact::ObjectContact* createViewSpecificObjectContact(
SdrPageWindow& rPageWindow,
const char* pDebugName) const override;
};
extern Point aDragStartDiff;
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */