sp-item-group.h revision 804ac6d80f744681705361c407a9ee11aaed685b
69879b63ae4fb3da90263808c133a39ed2b770f8glimmer#ifndef __SP_ITEM_GROUP_H__
69879b63ae4fb3da90263808c133a39ed2b770f8glimmer#define __SP_ITEM_GROUP_H__
69879b63ae4fb3da90263808c133a39ed2b770f8glimmer
69879b63ae4fb3da90263808c133a39ed2b770f8glimmer/*
69879b63ae4fb3da90263808c133a39ed2b770f8glimmer * SVG <g> implementation
69879b63ae4fb3da90263808c133a39ed2b770f8glimmer *
69879b63ae4fb3da90263808c133a39ed2b770f8glimmer * Authors:
69879b63ae4fb3da90263808c133a39ed2b770f8glimmer * Lauris Kaplinski <lauris@kaplinski.com>
69879b63ae4fb3da90263808c133a39ed2b770f8glimmer *
69879b63ae4fb3da90263808c133a39ed2b770f8glimmer * Copyright (C) 1999-2002 authors
69879b63ae4fb3da90263808c133a39ed2b770f8glimmer * Copyright (C) 2000-2001 Ximian, Inc.
69879b63ae4fb3da90263808c133a39ed2b770f8glimmer *
69879b63ae4fb3da90263808c133a39ed2b770f8glimmer * Released under GNU GPL, read the file 'COPYING' for more information
69879b63ae4fb3da90263808c133a39ed2b770f8glimmer */
69879b63ae4fb3da90263808c133a39ed2b770f8glimmer
69879b63ae4fb3da90263808c133a39ed2b770f8glimmer#include <map>
69879b63ae4fb3da90263808c133a39ed2b770f8glimmer#include "sp-lpe-item.h"
c596be6d145df956e779f427dde5aabc8559dd6cglimmer
c596be6d145df956e779f427dde5aabc8559dd6cglimmer#define SP_GROUP(obj) (dynamic_cast<SPGroup*>((SPObject*)obj))
c596be6d145df956e779f427dde5aabc8559dd6cglimmer#define SP_IS_GROUP(obj) (dynamic_cast<const SPGroup*>((SPObject*)obj) != NULL)
c596be6d145df956e779f427dde5aabc8559dd6cglimmer
c596be6d145df956e779f427dde5aabc8559dd6cglimmer#define SP_IS_LAYER(obj) (SP_IS_GROUP(obj) && SP_GROUP(obj)->layerMode() == SPGroup::LAYER)
c596be6d145df956e779f427dde5aabc8559dd6cglimmer
c596be6d145df956e779f427dde5aabc8559dd6cglimmernamespace Inkscape {
c596be6d145df956e779f427dde5aabc8559dd6cglimmer
c596be6d145df956e779f427dde5aabc8559dd6cglimmerclass Drawing;
c596be6d145df956e779f427dde5aabc8559dd6cglimmerclass DrawingItem;
c596be6d145df956e779f427dde5aabc8559dd6cglimmer
c596be6d145df956e779f427dde5aabc8559dd6cglimmer} // namespace Inkscape
c596be6d145df956e779f427dde5aabc8559dd6cglimmer
c596be6d145df956e779f427dde5aabc8559dd6cglimmerclass SPGroup : public SPLPEItem {
c596be6d145df956e779f427dde5aabc8559dd6cglimmerpublic:
c596be6d145df956e779f427dde5aabc8559dd6cglimmer SPGroup();
c596be6d145df956e779f427dde5aabc8559dd6cglimmer virtual ~SPGroup();
c596be6d145df956e779f427dde5aabc8559dd6cglimmer
c596be6d145df956e779f427dde5aabc8559dd6cglimmer enum LayerMode { GROUP, LAYER, MASK_HELPER };
c596be6d145df956e779f427dde5aabc8559dd6cglimmer
c596be6d145df956e779f427dde5aabc8559dd6cglimmer LayerMode _layer_mode;
c596be6d145df956e779f427dde5aabc8559dd6cglimmer std::map<unsigned int, LayerMode> _display_modes;
c596be6d145df956e779f427dde5aabc8559dd6cglimmer
c596be6d145df956e779f427dde5aabc8559dd6cglimmer LayerMode layerMode() const { return _layer_mode; }
c596be6d145df956e779f427dde5aabc8559dd6cglimmer void setLayerMode(LayerMode mode);
c596be6d145df956e779f427dde5aabc8559dd6cglimmer
c596be6d145df956e779f427dde5aabc8559dd6cglimmer LayerMode effectiveLayerMode(unsigned int display_key) const {
c596be6d145df956e779f427dde5aabc8559dd6cglimmer if ( _layer_mode == LAYER ) {
c596be6d145df956e779f427dde5aabc8559dd6cglimmer return LAYER;
c596be6d145df956e779f427dde5aabc8559dd6cglimmer } else {
c596be6d145df956e779f427dde5aabc8559dd6cglimmer return layerDisplayMode(display_key);
c596be6d145df956e779f427dde5aabc8559dd6cglimmer }
c596be6d145df956e779f427dde5aabc8559dd6cglimmer }
c596be6d145df956e779f427dde5aabc8559dd6cglimmer
c596be6d145df956e779f427dde5aabc8559dd6cglimmer LayerMode layerDisplayMode(unsigned int display_key) const;
c596be6d145df956e779f427dde5aabc8559dd6cglimmer void setLayerDisplayMode(unsigned int display_key, LayerMode mode);
c596be6d145df956e779f427dde5aabc8559dd6cglimmer void translateChildItems(Geom::Translate const &tr);
c596be6d145df956e779f427dde5aabc8559dd6cglimmer void scaleChildItemsRec(Geom::Scale const &sc, Geom::Point const &p, bool noRecurse);
c596be6d145df956e779f427dde5aabc8559dd6cglimmer
c596be6d145df956e779f427dde5aabc8559dd6cglimmer gint getItemCount() const;
c596be6d145df956e779f427dde5aabc8559dd6cglimmer virtual void _showChildren (Inkscape::Drawing &drawing, Inkscape::DrawingItem *ai, unsigned int key, unsigned int flags);
c596be6d145df956e779f427dde5aabc8559dd6cglimmer
c596be6d145df956e779f427dde5aabc8559dd6cglimmerprivate:
c596be6d145df956e779f427dde5aabc8559dd6cglimmer void _updateLayerMode(unsigned int display_key=0);
c596be6d145df956e779f427dde5aabc8559dd6cglimmer
c596be6d145df956e779f427dde5aabc8559dd6cglimmerpublic:
c596be6d145df956e779f427dde5aabc8559dd6cglimmer virtual void build(SPDocument *document, Inkscape::XML::Node *repr);
c596be6d145df956e779f427dde5aabc8559dd6cglimmer virtual void release();
c596be6d145df956e779f427dde5aabc8559dd6cglimmer
c596be6d145df956e779f427dde5aabc8559dd6cglimmer virtual void child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* ref);
c596be6d145df956e779f427dde5aabc8559dd6cglimmer virtual void remove_child(Inkscape::XML::Node *child);
c596be6d145df956e779f427dde5aabc8559dd6cglimmer virtual void order_changed(Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref);
c596be6d145df956e779f427dde5aabc8559dd6cglimmer
c596be6d145df956e779f427dde5aabc8559dd6cglimmer virtual void update(SPCtx *ctx, unsigned int flags);
c596be6d145df956e779f427dde5aabc8559dd6cglimmer virtual void modified(guint flags);
c596be6d145df956e779f427dde5aabc8559dd6cglimmer virtual void set(unsigned int key, gchar const* value);
c596be6d145df956e779f427dde5aabc8559dd6cglimmer
c596be6d145df956e779f427dde5aabc8559dd6cglimmer virtual Inkscape::XML::Node* write(Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags);
c596be6d145df956e779f427dde5aabc8559dd6cglimmer
c596be6d145df956e779f427dde5aabc8559dd6cglimmer virtual Geom::OptRect bbox(Geom::Affine const &transform, SPItem::BBoxType bboxtype) const;
c596be6d145df956e779f427dde5aabc8559dd6cglimmer virtual void print(SPPrintContext *ctx);
c596be6d145df956e779f427dde5aabc8559dd6cglimmer virtual const char* displayName() const;
c596be6d145df956e779f427dde5aabc8559dd6cglimmer virtual gchar *description() const;
c596be6d145df956e779f427dde5aabc8559dd6cglimmer virtual Inkscape::DrawingItem *show (Inkscape::Drawing &drawing, unsigned int key, unsigned int flags);
c596be6d145df956e779f427dde5aabc8559dd6cglimmer virtual void hide (unsigned int key);
c596be6d145df956e779f427dde5aabc8559dd6cglimmer
c596be6d145df956e779f427dde5aabc8559dd6cglimmer virtual void snappoints(std::vector<Inkscape::SnapCandidatePoint> &p, Inkscape::SnapPreferences const *snapprefs) const;
c596be6d145df956e779f427dde5aabc8559dd6cglimmer
c596be6d145df956e779f427dde5aabc8559dd6cglimmer virtual void update_patheffect(bool write);
c596be6d145df956e779f427dde5aabc8559dd6cglimmer};
c596be6d145df956e779f427dde5aabc8559dd6cglimmer
c596be6d145df956e779f427dde5aabc8559dd6cglimmervoid sp_item_group_ungroup (SPGroup *group, GSList **children, bool do_done = true);
c596be6d145df956e779f427dde5aabc8559dd6cglimmer
c596be6d145df956e779f427dde5aabc8559dd6cglimmer
c596be6d145df956e779f427dde5aabc8559dd6cglimmerGSList *sp_item_group_item_list (SPGroup *group);
c596be6d145df956e779f427dde5aabc8559dd6cglimmerSPObject *sp_item_group_get_child_by_name (SPGroup *group, SPObject *ref, const gchar *name);
c596be6d145df956e779f427dde5aabc8559dd6cglimmer
c596be6d145df956e779f427dde5aabc8559dd6cglimmer#endif
c596be6d145df956e779f427dde5aabc8559dd6cglimmer
c596be6d145df956e779f427dde5aabc8559dd6cglimmer/*
c596be6d145df956e779f427dde5aabc8559dd6cglimmer Local Variables:
c596be6d145df956e779f427dde5aabc8559dd6cglimmer mode:c++
c596be6d145df956e779f427dde5aabc8559dd6cglimmer c-file-style:"stroustrup"
c596be6d145df956e779f427dde5aabc8559dd6cglimmer c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
c596be6d145df956e779f427dde5aabc8559dd6cglimmer indent-tabs-mode:nil
c596be6d145df956e779f427dde5aabc8559dd6cglimmer fill-column:99
c596be6d145df956e779f427dde5aabc8559dd6cglimmer End:
c596be6d145df956e779f427dde5aabc8559dd6cglimmer*/
c596be6d145df956e779f427dde5aabc8559dd6cglimmer// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
c596be6d145df956e779f427dde5aabc8559dd6cglimmer