Files
odfstudio/oox/source/drawingml/diagram/diagramdefinitioncontext.cxx
T
Armin Le Grand (collabora) bd047bbb9e SmartArt: Preparations for roundtrip
The DiagramModel uses 4 mandatory and three optional XMLDoms
for it's data. These get imported, but to get to a roundtrip
we will need to be able to create & save these again.

Last changes prepared this by deleting XMLDoms which were no
longer valid dependent of changes done to that DiagramModel.
When exporting the availability of these gets checked and if
all are there, it gets exported as Diagram (in MSO format,
not yet in ODF). If nothing was changed the original Doms
get exported - untouched.

That test will now try - if e.g. the most important XMLDom
OOXData is missing - to re-create this in that action. The 1st
one which I now implemented that is the OOXData which homes
the Point/Connections/BGFill data (and some more).

Due to this needing testing I for now encapsulated this
to a EnvVar called ACTIVATE_RECREATE_DIAGRAM_DATADOMS, so
this will for now only happen when this is set. Anyways all
that stuff is still behind the 'experimental features' wall.
This is and stays experimental for now.

These are already deep changes which need to get tested and
get to master, opening the path to experiment with it and
refine it. Due to the EnvVar gate no real changes should
happen in master, but due to the changes around it this
will need to be checked this way.

Change-Id: Iabba69b19387e45f1028843a25f3bae1fc4f8fe8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/197676
Tested-by: Jenkins
Reviewed-by: Armin Le Grand <Armin.Le.Grand@me.com>
2026-01-22 10:59:37 +01:00

99 lines
3.5 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 .
*/
#include "diagramdefinitioncontext.hxx"
#include "datamodel_oox.hxx"
#include "datamodelcontext.hxx"
#include "layoutnodecontext.hxx"
#include <oox/helper/attributelist.hxx>
#include <oox/token/namespaces.hxx>
#include <utility>
using namespace ::oox::core;
namespace oox::drawingml {
// CT_DiagramDefinition
DiagramDefinitionContext::DiagramDefinitionContext( ContextHandler2Helper const & rParent,
const AttributeList& rAttributes,
DiagramLayoutPtr pLayout )
: ContextHandler2( rParent )
, mpLayout(std::move( pLayout ))
{
mpLayout->setDefStyle( rAttributes.getStringDefaulted( XML_defStyle ) );
OUString sValue = rAttributes.getStringDefaulted( XML_minVer );
if( sValue.isEmpty() )
{
sValue = "http://schemas.openxmlformats.org/drawingml/2006/diagram";
}
mpLayout->setMinVer( sValue );
mpLayout->setUniqueId( rAttributes.getStringDefaulted( XML_uniqueId ) );
}
DiagramDefinitionContext::~DiagramDefinitionContext()
{
LayoutNodePtr node = mpLayout->getNode();
if (node)
node->dump();
}
ContextHandlerRef
DiagramDefinitionContext::onCreateContext( ::sal_Int32 aElement,
const AttributeList& rAttribs )
{
switch( aElement )
{
case DGM_TOKEN( title ):
mpLayout->setTitle( rAttribs.getStringDefaulted( XML_val ) );
break;
case DGM_TOKEN( desc ):
mpLayout->setDesc( rAttribs.getStringDefaulted( XML_val ) );
break;
case DGM_TOKEN( layoutNode ):
{
LayoutNodePtr pNode = std::make_shared<LayoutNode>(mpLayout->getDiagram());
mpLayout->getNode() = pNode;
pNode->setChildOrder( rAttribs.getToken( XML_chOrder, XML_b ) );
pNode->setMoveWith( rAttribs.getStringDefaulted( XML_moveWith ) );
pNode->setStyleLabel( rAttribs.getStringDefaulted( XML_styleLbl ) );
return new LayoutNodeContext( *this, rAttribs, pNode );
}
case DGM_TOKEN( clrData ):
// TODO, does not matter for the UI. skip.
return nullptr;
case DGM_TOKEN( sampData ):
mpLayout->getSampData() = std::make_shared<DiagramData_oox>();
return new DataModelContext( *this, mpLayout->getSampData() );
case DGM_TOKEN( styleData ):
mpLayout->getStyleData() = std::make_shared<DiagramData_oox>();
return new DataModelContext( *this, mpLayout->getStyleData() );
case DGM_TOKEN( cat ):
case DGM_TOKEN( catLst ):
// TODO, does not matter for the UI
default:
break;
}
return this;
}
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */