blob: 10fba9eed188982a43a95fdd23eae3d0c98419f7 [file] [log] [blame]
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the Collabora Office 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/.
*/
#pragma once
#include <vector>
#include <memory>
#include "drawdoc.hxx"
class SdrObject;
class SdrPage;
namespace sd
{
/**
* Interface for the visitor class, which handles each visited SdrObject
* in the DOM.
*/
class ModelTraverseHandler
{
public:
virtual ~ModelTraverseHandler() {}
virtual void handleSdrObject(SdrObject* pObject) = 0;
};
/** Options to change how the traverser is traversing the tree, what is included and what not */
struct TraverserOptions
{
bool mbMasterPages = false;
};
/**
* Traverses the DOM and calls a handler for each object (SdrObject) it
* encounters.
*/
class ModelTraverser
{
private:
std::vector<std::shared_ptr<ModelTraverseHandler>> m_pNodeHandler;
SdDrawDocument* m_pDocument;
TraverserOptions m_aTraverserOptions;
void traverseObjects(SdrPage const& rPage);
void traversePages();
void traverseMasterPages();
public:
ModelTraverser(SdDrawDocument* pDocument, TraverserOptions const& rTraverserOptions)
: m_pDocument(pDocument)
, m_aTraverserOptions(rTraverserOptions)
{
}
void traverse();
void addNodeHandler(std::shared_ptr<ModelTraverseHandler> pHandler);
};
} // end sd namespace
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */