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>
99 lines
3.5 KiB
C++
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: */
|