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
31 namespace svx
{ namespace diagram
{
33 // Helper class to visualize an imminently recognizable
34 // additional visualization for DynamicDiagrams that can also
35 // be used to show/hide the DiagramDialog by the user
36 // Note: is also used as additional drag/move handle
37 class SVXCORE_DLLPUBLIC DiagramFrameHdl final
: public SdrHdl
40 basegfx::B2DHomMatrix maTransformation
;
42 // create marker for this kind
43 virtual void CreateB2dIAObject() override
;
46 DiagramFrameHdl(const basegfx::B2DHomMatrix
& rTransformation
);
48 static void clicked(const Point
& rPnt
);
51 class DiagramDataState
;
53 // Helper class to allow administer advanced Diagram related
54 // data and functionality
55 class SVXCORE_DLLPUBLIC IDiagramHelper
58 // These values define behaviour to where take data from at re-creation time.
59 // Different definitions will have different consequences for re-creation
60 // of Diagram visualization (if needed/triggered).
61 // The style attributes per shape e.g. can be re-stored frm either an
62 // existing Theme, or the preserved key/value list of properties per XShape.
63 // With the current default settings the re-creation uses the preserved
64 // key/value pairs, but re-creation from Theme may also be desirable. It
65 // is also good to preserve both data packages at initial import to allow
66 // alternatively one of these two methods for re-construction
68 // If true, the oox::Theme data from ::DiagramData get/set/ThemeDocument()
69 // aka mxThemeDocument - if it exists - will be used to create the style
70 // attributes for the to-be-created XShapes (theoretically allows re-creation
72 bool mbUseDiagramThemeData
; // false
74 // If true, the UNO API form of attributes per Point as Key/value list
75 // that was secured after initial XShape creation is used to create the
76 // style attributes for the to-be-created XShapes
77 bool mbUseDiagramModelData
; // true
79 // If true and mxThemeDocument exists it will be re-imported to
80 // a newly created oox::drawingml::Theme object
81 bool mbForceThemePtrRecreation
; // false
84 void anchorToSdrObjGroup(SdrObjGroup
& rTarget
);
88 virtual ~IDiagramHelper();
91 virtual void reLayout(SdrObjGroup
& rTarget
) = 0;
93 // get text representation of data tree
94 virtual OUString
getString() const = 0;
96 // get children of provided data node
97 // use empty string for top-level nodes
98 // returns vector of (id, text)
99 virtual std::vector
<std::pair
<OUString
, OUString
>>
100 getChildren(const OUString
& rParentId
) const = 0;
102 // add/remove new top-level node to data model, returns its id
103 virtual OUString
addNode(const OUString
& rText
) = 0;
104 virtual bool removeNode(const OUString
& rNodeId
) = 0;
106 // Undo/Redo helpers for extracting/restoring Diagram-defining data
107 virtual std::shared_ptr
<svx::diagram::DiagramDataState
> extractDiagramDataState() const = 0;
108 virtual void applyDiagramDataState(const std::shared_ptr
<svx::diagram::DiagramDataState
>& rState
) = 0;
110 bool UseDiagramThemeData() const { return mbUseDiagramThemeData
; }
111 bool UseDiagramModelData() const { return mbUseDiagramModelData
; }
112 bool ForceThemePtrRecreation() const { return mbForceThemePtrRecreation
; };
114 static void AddAdditionalVisualization(const SdrObjGroup
& rTarget
, SdrHdlList
& rHdlList
);
117 }} // end of namespace
118 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */