1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
23 #include <svx/svxdllapi.h>
24 #include <rtl/ustring.hxx>
25 #include <svx/svdhdl.hxx>
27 // Forward declarations
30 namespace svx
{ namespace diagram
{
32 // Helper class to visualize an imminently recognizable
33 // additional visualization for DynamicDiagrams that can also
34 // be used to show/hide the DiagramDialog by the user
35 // Note: is also used as additional drag/move handle
36 class SVXCORE_DLLPUBLIC DiagramFrameHdl final
: public SdrHdl
39 basegfx::B2DHomMatrix maTransformation
;
41 // create marker for this kind
42 virtual void CreateB2dIAObject() override
;
45 DiagramFrameHdl(const basegfx::B2DHomMatrix
& rTransformation
);
47 static void clicked(const Point
& rPnt
);
50 class DiagramDataState
;
52 // Helper class to allow administer advanced Diagram related
53 // data and functionality
54 class SVXCORE_DLLPUBLIC IDiagramHelper
57 // These values define behaviour to where take data from at re-creation time.
58 // Different definitions will have different consequences for re-creation
59 // of Diagram visualization (if needed/triggered).
60 // The style attributes per shape e.g. can be re-stored frm either an
61 // existing Theme, or the preserved key/value list of properties per XShape.
62 // With the current default settings the re-creation uses the preserved
63 // key/value pairs, but re-creation from Theme may also be desirable. It
64 // is also good to preserve both data packages at initial import to allow
65 // alternatively one of these two methods for re-construction
67 // If true, the oox::Theme data from ::DiagramData get/set/ThemeDocument()
68 // aka mxThemeDocument - if it exists - will be used to create the style
69 // attributes for the to-be-created XShapes (theoretically allows re-creation
71 bool mbUseDiagramThemeData
; // false
73 // If true, the UNO API form of attributes per Point as Key/value list
74 // that was secured after initial XShape creation is used to create the
75 // style attributes for the to-be-created XShapes
76 bool mbUseDiagramModelData
; // true
78 // If true and mxThemeDocument exists it will be re-imported to
79 // a newly created oox::drawingml::Theme object
80 bool mbForceThemePtrRecreation
; // false
82 // if true, content was self-created using addTo/addShape
83 // and the layouting stuff
87 void anchorToSdrObjGroup(SdrObjGroup
& rTarget
);
90 IDiagramHelper(bool bSelfCreated
);
91 virtual ~IDiagramHelper();
94 virtual void reLayout(SdrObjGroup
& rTarget
) = 0;
96 // get text representation of data tree
97 virtual OUString
getString() const = 0;
99 // get children of provided data node
100 // use empty string for top-level nodes
101 // returns vector of (id, text)
102 virtual std::vector
<std::pair
<OUString
, OUString
>>
103 getChildren(const OUString
& rParentId
) const = 0;
105 // add/remove new top-level node to data model, returns its id
106 virtual OUString
addNode(const OUString
& rText
) = 0;
107 virtual bool removeNode(const OUString
& rNodeId
) = 0;
109 // Undo/Redo helpers for extracting/restoring Diagram-defining data
110 virtual std::shared_ptr
<svx::diagram::DiagramDataState
> extractDiagramDataState() const = 0;
111 virtual void applyDiagramDataState(const std::shared_ptr
<svx::diagram::DiagramDataState
>& rState
) = 0;
113 bool UseDiagramThemeData() const { return mbUseDiagramThemeData
; }
114 bool UseDiagramModelData() const { return mbUseDiagramModelData
; }
115 bool ForceThemePtrRecreation() const { return mbForceThemePtrRecreation
; };
117 // get/set SelfCreated flag
118 bool isSelfCreated() const { return mbSelfCreated
; }
119 void setSelfCreated() { mbSelfCreated
= true; }
121 static void AddAdditionalVisualization(const SdrObjGroup
& rTarget
, SdrHdlList
& rHdlList
);
124 }} // end of namespace
125 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */