b9c64630d2
after I missed a bunch of stuff when testing UBSan with
commit 3ba92b5f1e
hide more symbols
Change-Id: I0743a0c0c6abcb2904face8386e26153ae3229a3
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163718
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
159 lines
5.6 KiB
C++
159 lines
5.6 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 .
|
|
*/
|
|
#ifndef INCLUDED_SVX_GRAPHCTL_HXX
|
|
#define INCLUDED_SVX_GRAPHCTL_HXX
|
|
|
|
#include <vcl/graph.hxx>
|
|
#include <vcl/customweld.hxx>
|
|
#include <svx/svxdllapi.h>
|
|
|
|
#include <svx/svdview.hxx>
|
|
#include <svx/svdobj.hxx>
|
|
|
|
class GraphCtrl;
|
|
|
|
class GraphCtrlUserCall final : public SdrObjUserCall
|
|
{
|
|
GraphCtrl& rWin;
|
|
|
|
public:
|
|
|
|
GraphCtrlUserCall(GraphCtrl& rGraphWin)
|
|
: rWin(rGraphWin)
|
|
{}
|
|
|
|
virtual void Changed(const SdrObject& rObj, SdrUserCallType eType, const tools::Rectangle& rOldBoundRect) override;
|
|
};
|
|
|
|
class SvxGraphCtrlAccessibleContext;
|
|
|
|
class SAL_DLLPUBLIC_RTTI GraphCtrl : public weld::CustomWidgetController
|
|
{
|
|
friend class GraphCtrlView;
|
|
friend class GraphCtrlUserCall;
|
|
|
|
Graphic aGraphic;
|
|
ScopedVclPtrInstance<VirtualDevice> xVD;
|
|
Idle aUpdateIdle;
|
|
Link<GraphCtrl*,void> aMousePosLink;
|
|
Link<GraphCtrl*,void> aGraphSizeLink;
|
|
Link<GraphCtrl*,void> aUpdateLink;
|
|
MapMode aMap100;
|
|
Size aGraphSize;
|
|
Point aMousePos;
|
|
std::unique_ptr<GraphCtrlUserCall> pUserCall;
|
|
SdrObjKind eObjKind;
|
|
sal_uInt16 nPolyEdit;
|
|
bool bEditMode;
|
|
bool mbSdrMode;
|
|
bool mbInIdleUpdate;
|
|
weld::Dialog* mpDialog;
|
|
|
|
DECL_LINK( UpdateHdl, Timer*, void );
|
|
|
|
rtl::Reference<SvxGraphCtrlAccessibleContext> mpAccContext;
|
|
|
|
protected:
|
|
|
|
std::unique_ptr<SdrModel> pModel;
|
|
std::unique_ptr<SdrView> pView;
|
|
|
|
virtual void Paint( vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect ) override;
|
|
virtual void Resize() override;
|
|
virtual bool KeyInput(const KeyEvent& rKEvt) override;
|
|
virtual bool MouseButtonDown(const MouseEvent& rMEvt) override;
|
|
virtual bool MouseButtonUp(const MouseEvent& rMEvt) override;
|
|
virtual bool MouseMove(const MouseEvent& rMEvt) override;
|
|
|
|
virtual void InitSdrModel();
|
|
|
|
virtual void SdrObjCreated( const SdrObject& rObj );
|
|
virtual void SdrObjChanged( const SdrObject& rObj );
|
|
virtual void MarkListHasChanged();
|
|
|
|
void GraphicToVD();
|
|
|
|
SdrObjUserCall* GetSdrUserCall() { return pUserCall.get(); }
|
|
|
|
public:
|
|
|
|
SVX_DLLPUBLIC GraphCtrl(weld::Dialog* pDialog);
|
|
virtual void SetDrawingArea(weld::DrawingArea* pDrawingArea) override;
|
|
SVX_DLLPUBLIC virtual ~GraphCtrl() override;
|
|
|
|
SVX_DLLPUBLIC void SetGraphic( const Graphic& rGraphic, bool bNewModel = true );
|
|
const Graphic& GetGraphic() const { return aGraphic; }
|
|
const Size& GetGraphicSize() const { return aGraphSize; }
|
|
|
|
const Point& GetMousePos() const { return aMousePos; }
|
|
|
|
void SetEditMode( const bool bEditMode );
|
|
|
|
void SetPolyEditMode( const sal_uInt16 nPolyEdit );
|
|
sal_uInt16 GetPolyEditMode() const { return nPolyEdit; }
|
|
|
|
void SetObjKind( const SdrObjKind eObjKind );
|
|
|
|
SdrModel* GetSdrModel() const { return pModel.get(); }
|
|
SdrView* GetSdrView() const { return pView.get(); }
|
|
SdrObject* GetSelectedSdrObject() const;
|
|
bool IsChanged() const { return mbSdrMode && pModel->IsChanged(); }
|
|
|
|
void SetMousePosLink( const Link<GraphCtrl*,void>& rLink ) { aMousePosLink = rLink; }
|
|
|
|
void SetGraphSizeLink( const Link<GraphCtrl*,void>& rLink ) { aGraphSizeLink = rLink; }
|
|
|
|
void SetUpdateLink( const Link<GraphCtrl*,void>& rLink ) { aUpdateLink = rLink; }
|
|
void QueueIdleUpdate();
|
|
|
|
void SetSdrMode(bool b);
|
|
|
|
Point GetPositionInDialog() const;
|
|
virtual css::uno::Reference< css::accessibility::XAccessible > CreateAccessible() override;
|
|
};
|
|
|
|
class GraphCtrlView final : public SdrView
|
|
{
|
|
GraphCtrl& rGraphCtrl;
|
|
|
|
virtual void MarkListHasChanged() override
|
|
{
|
|
SdrView::MarkListHasChanged();
|
|
rGraphCtrl.MarkListHasChanged();
|
|
}
|
|
|
|
public:
|
|
GraphCtrlView(SdrModel& rSdrModel, GraphCtrl* pWindow)
|
|
: SdrView(rSdrModel, &pWindow->GetDrawingArea()->get_ref_device())
|
|
, rGraphCtrl(*pWindow)
|
|
{
|
|
}
|
|
|
|
virtual ~GraphCtrlView() override;
|
|
|
|
// override these so we can get the occasions SdrPaintView would call Window::Invalidate on its vcl::Window
|
|
// if it had one, and route to WidgetController::Invalidate instead
|
|
virtual rtl::Reference<sdr::overlay::OverlayManager> CreateOverlayManager(OutputDevice& rDevice) const override;
|
|
virtual void InvalidateOneWin(OutputDevice& rWin) override;
|
|
virtual void InvalidateOneWin(OutputDevice& rWin, const tools::Rectangle& rRect) override;
|
|
};
|
|
|
|
#endif // INCLUDED_SVX_GRAPHCTL_HXX
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|