a8f1a69ef0da383f9b413c3043a74084e23b75c2mental/*
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental * Inkscape::DocumentSubset - view of a document including only a subset
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental * of nodes
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental *
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental * Copyright 2006 MenTaLguY <mental@rydia.net>
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental *
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental * Released under GNU GPL, read the file 'COPYING' for more information
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental */
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental#ifndef SEEN_INKSCAPE_DOCUMENT_SUBSET_H
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental#define SEEN_INKSCAPE_DOCUMENT_SUBSET_H
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental
364d9045bfd158352b8040721b3e2e2602e921eatheAdib#include <stddef.h>
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental#include <sigc++/connection.h>
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental#include <sigc++/functors/slot.h>
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental
8f8f7c7fe35e8c54bf8ce47fbb4d6021bd7a712dLiam P. White#include "inkgc/gc-managed.h"
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental#include "gc-anchored.h"
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental
a8f1a69ef0da383f9b413c3043a74084e23b75c2mentalclass SPObject;
09ba3247163582bf2e30e17c4c154aa259ce038acilixclass SPDocument;
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental
a8f1a69ef0da383f9b413c3043a74084e23b75c2mentalnamespace Inkscape {
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental
a8f1a69ef0da383f9b413c3043a74084e23b75c2mentalclass DocumentSubset : public GC::Managed<>,
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental public GC::Anchored
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental{
a8f1a69ef0da383f9b413c3043a74084e23b75c2mentalpublic:
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental bool includes(SPObject *obj) const;
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental SPObject *parentOf(SPObject *obj) const;
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental unsigned childCount(SPObject *obj) const;
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental unsigned indexOf(SPObject *obj) const;
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental SPObject *nthChildOf(SPObject *obj, unsigned n) const;
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental sigc::connection connectChanged(sigc::slot<void> slot) const;
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental sigc::connection connectAdded(sigc::slot<void, SPObject *> slot) const;
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental sigc::connection connectRemoved(sigc::slot<void, SPObject *> slot) const;
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental
a8f1a69ef0da383f9b413c3043a74084e23b75c2mentalprotected:
f3823063dfabb21265f42696bacbc66c3ffae606mental DocumentSubset();
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental void _addOne(SPObject *obj);
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental void _removeOne(SPObject *obj) { _remove(obj, false); }
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental void _removeSubtree(SPObject *obj) { _remove(obj, true); }
8dd159d21f0c89ac2a828814284967fc631ab571mental void _clear();
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental
a8f1a69ef0da383f9b413c3043a74084e23b75c2mentalprivate:
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental DocumentSubset(DocumentSubset const &); // no copy
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental void operator=(DocumentSubset const &); // no assign
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental void _remove(SPObject *obj, bool subtree);
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental
a34103bb11674e2d8489be2022aea65ea639c6b9Alex Valavanis struct Relations;
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental Relations *_relations;
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental};
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental}
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental#endif
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental/*
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental Local Variables:
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental mode:c++
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental c-file-style:"stroustrup"
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental indent-tabs-mode:nil
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental fill-column:99
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental End:
a8f1a69ef0da383f9b413c3043a74084e23b75c2mental*/
a4030d5ca449e7e384bc699cd249ee704faaeab0Chris Morgan// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :