#ifndef SEEN_INKSCAPE_SELECTION_H
#define SEEN_INKSCAPE_SELECTION_H
/*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
* MenTaLguY <mental@rydia.net>
* bulia byak <buliabyak@users.sf.net>
*
* Copyright (C) 2004-2005 MenTaLguY
* Copyright (C) 1999-2002 Lauris Kaplinski
* Copyright (C) 2001-2002 Ximian, Inc.
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
#include <vector>
#include <map>
#include <list>
#include <set>
#include <stddef.h>
#include "inkgc/gc-managed.h"
#include "gc-finalized.h"
#include "gc-anchored.h"
#include "inkgc/gc-soft-ptr.h"
#include "sp-item.h"
}
}
/**
* The set of selected SPObjects for a given document and layer model.
*
* This class represents the set of selected SPItems for a given
* document (referenced in LayerModel).
*
* An SPObject and its parent cannot be simultaneously selected;
* selecting an SPObjects has the side-effect of unselecting any of
* its children which might have been selected.
*
* This is a per-desktop object that keeps the list of selected objects
* at the given desktop. Both SPItem and SPRepr lists can be retrieved
* from the selection. Many actions operate on the selection, so it is
* widely used throughout the code.
* It also implements its own asynchronous notification signals that
* UI elements can listen to.
*/
{
/**
* Constructs an selection object, bound to a particular
* layer model
*
* @param layers the layer model (for the SPDesktop, if GUI)
* @param desktop the desktop associated with the layer model, or NULL if in console mode
*/
~Selection();
/**
* Returns the layer model the selection is bound to (works in console or GUI mode)
*
* @return the layer model the selection is bound to, which is the same as the desktop
* layer model for GUI mode
*/
/**
* Returns the desktop the selection is bound to
*
* @return the desktop the selection is bound to, or NULL if in console mode
*/
/**
* Returns active layer for selection (currentLayer or its parent).
*
* @return layer item the selection is bound to
*/
/**
* Add an SPObject to the set of selected objects.
*
* @param obj the SPObject to add
*/
/**
* Add an XML node's SPObject to the set of selected objects.
*
* @param the xml node of the item to add
*/
/**
* Set the selection to a single specific object.
*
* @param obj the object to select
*/
/**
* Set the selection to an XML node's SPObject.
*
* @param repr the xml node of the item to select
*/
/**
* Removes an item from the set of selected objects.
*
* It is ok to call this method for an unselected item.
*
* @param item the item to unselect
*/
/**
* Removes an item if selected, adds otherwise.
*
* @param item the item to unselect
*/
/**
* Removes an item from the set of selected objects.
*
* It is ok to call this method for an unselected item.
*
* @param repr the xml node of the item to remove
*/
/**
* Selects exactly the specified objects.
*
* @param objs the objects to select
*/
/**
* Adds the specified objects to selection, without deselecting first.
*
* @param objs the objects to select
*/
/**
* Clears the selection and selects the specified objects.
*
* @param repr a list of xml nodes for the items to select
*/
/** Add items from an STL iterator range to the selection.
* \param from the begin iterator
* \param to the end iterator
*/
++from;
}
_emitChanged();
}
/**
* Unselects all selected objects..
*/
void clear();
/**
* Returns true if no items are selected.
*/
/**
* Returns true if the given object is selected.
*/
/**
* Returns true if the given item is selected.
*/
}
/**
* Returns a single selected object.
*
* @return NULL unless exactly one object is selected
*/
/**
* Returns a single selected item.
*
* @return NULL unless exactly one object is selected
*/
SPItem *singleItem();
/**
* Returns the smallest item from this selection.
*/
/**
* Returns the largest item from this selection.
*/
/**
* Returns a single selected object's xml node.
*
* @return NULL unless exactly one object is selected
*/
/** Returns the list of selected objects. */
/** Returns the list of selected SPItems. */
/** Returns a list of the xml nodes of all selected objects. */
/// \todo only returns reprs of SPItems currently; need a separate
/// method for that
/** Returns a list of all perspectives which have a 3D box in the current selection.
(these may also be nested in groups) */
/**
* Returns a list of all 3D boxes in the current selection which are associated to @c
* persp. If @c pers is @c NULL, return all selected boxes.
*/
/** Returns the number of layers in which there are selected objects. */
/** Returns the number of parents to which the selected objects belong. */
/** Returns the bounding rectangle of the selection. */
/**
* Returns either the visual or geometric bounding rectangle of the selection, based on the
* preferences specified for the selector tool
*/
/// Returns the bounding rectangle of the selectionin document coordinates.
/**
*/
/**
* Compute the list of points in the selection that are to be considered for snapping from.
*
* @return Selection's snap points
*/
/**
* Connects a slot to be notified of selection changes.
*
* This method connects the given slot such that it will
* be called upon any change in the set of selected objects.
*
* @param slot the slot to connect
*
* @return the resulting connection
*/
}
{
}
/**
* Connects a slot to be notified of selected object modifications.
*
* This method connects the given slot such that it will
* receive notifications whenever any selected item is
* modified.
*
* @param slot the slot to connect
*
* @return the resulting connection
*
*/
{
}
{
}
/** no copy. */
/** no assign. */
/** Issues modification notification signals. */
/** Schedules an item modification signal to be sent. */
/** Issues modified selection signal. */
void _emitModified(unsigned int flags);
/** Issues changed selection signal. */
void _emitChanged(bool persist_selection_context = false);
void _invalidateCachedLists();
/** unselect all descendants of the given item. */
/** unselect all ancestors of the given item. */
/** clears the selection (without issuing a notification). */
void _clear();
/** adds an object (without issuing a notification). */
/** removes an object (without issuing a notification). */
/** returns the SPObject corresponding to an xml node (if any). */
/** Releases an active layer object that is being removed. */
unsigned int _flags;
unsigned int _idle;
};
}
#endif
/*
Local Variables:
mode:c++
c-file-style:"stroustrup"
c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
indent-tabs-mode:nil
fill-column:99
End:
*/
// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :