X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fdocument.h;h=4f5f045c5566fb5819fcb59a5898740637b844a3;hb=3410aa1a9f9cb90fe886b982d114e213d3d1fc03;hp=8a4e65bb373fe57541f868a79aca6c9aafcf1838;hpb=1e595ddc34dd7090b285ed9f6fc8e125b9a264d9;p=inkscape.git diff --git a/src/document.h b/src/document.h index 8a4e65bb3..4f5f045c5 100644 --- a/src/document.h +++ b/src/document.h @@ -3,8 +3,8 @@ /** \file * SPDocument: Typed SVG document implementation - * - * Authors: + */ +/* Authors: * Lauris Kaplinski * MenTaLguY * @@ -21,7 +21,7 @@ #include #include "libcroco/cr-cascade.h" -#include "libnr/nr-forward.h" +#include <2geom/forward.h> #include "gc-managed.h" #include "gc-finalized.h" @@ -55,9 +55,10 @@ namespace Inkscape { class SP3DBox; class Persp3D; +class Persp3DImpl; namespace Proj { - class TransfMat3x4; + class TransfMat3x4; } class SPDocumentPrivate; @@ -88,29 +89,46 @@ struct SPDocument : public Inkscape::GC::Managed<>, SPObject *root; ///< Our SPRoot CRCascade *style_cascade; - gchar *uri; ///< URI string or NULL - gchar *base; - gchar *name; + gchar *uri; ///< A filename (not a URI yet), or NULL + gchar *base; ///< To be used for resolving relative hrefs. + gchar *name; ///< basename(uri) or other human-readable label for the document. SPDocumentPrivate *priv; /// Last action key - const gchar *actionkey; + Glib::ustring actionkey; + /// Handler ID guint modified_id; + + /// Connector rerouting handler ID + guint rerouting_handler_id; Inkscape::ProfileManager* profileManager; // Instance of the connector router Avoid::Router *router; - GSList *perspectives; + GSList *_collection_queue; - Persp3D *current_persp3d; // "currently active" perspective (e.g., newly created boxes are attached to this one) - std::set persps_sel; // perspectives associated to currently selected boxes + bool oldSignalsConnected; + + void setCurrentPersp3D(Persp3D * const persp); + inline void setCurrentPersp3DImpl(Persp3DImpl * const persp_impl) { current_persp3d_impl = persp_impl; } + /* + * getCurrentPersp3D returns current_persp3d (if non-NULL) or the first + * perspective in the defs. If no perspective exists, returns NULL. + */ + Persp3D * getCurrentPersp3D(); + Persp3DImpl * getCurrentPersp3DImpl(); + void getPerspectivesInDefs(std::vector &list); + unsigned int numPerspectivesInDefs() { + std::vector list; + getPerspectivesInDefs(list); + return list.size(); + } - void add_persp3d (Persp3D * const persp); - void remove_persp3d (Persp3D * const persp); + //void initialize_current_persp3d(); sigc::connection connectModified(ModifiedSignal::slot_type slot); sigc::connection connectURISet(URISetSignal::slot_type slot); @@ -131,8 +149,6 @@ sigc::connection connectCommit(CommitSignal::slot_type slot); void _emitModified(); - GSList *_collection_queue; - void addUndoObserver(Inkscape::UndoStackObserver& observer); void removeUndoObserver(Inkscape::UndoStackObserver& observer); @@ -142,7 +158,7 @@ sigc::connection connectCommit(CommitSignal::slot_type slot); bool isSeeking() const; bool isModifiedSinceSave() const { return modified_since_save; } - void setModifiedSinceSave(bool modified=true) { + void setModifiedSinceSave(bool modified = true) { modified_since_save = modified; } @@ -150,25 +166,28 @@ private: SPDocument(SPDocument const &); // no copy void operator=(SPDocument const &); // no assign + Persp3D *current_persp3d; /**< Currently 'active' perspective (to which, e.g., newly created boxes are attached) */ + Persp3DImpl *current_persp3d_impl; + public: sigc::connection connectReconstructionStart(ReconstructionStart::slot_type slot); - sigc::connection connectReconstructionFinish (ReconstructionFinish::slot_type slot); - void emitReconstructionStart (void); - void emitReconstructionFinish (void); + sigc::connection connectReconstructionFinish(ReconstructionFinish::slot_type slot); + void emitReconstructionStart(void); + void emitReconstructionFinish(void); unsigned long serial() const; - void reset_key (void *dummy); + void reset_key(void *dummy); sigc::connection _selection_changed_connection; sigc::connection _desktop_activated_connection; - void fitToRect(NR::Rect const &rect); + void fitToRect(Geom::Rect const &rect, bool with_margins = false); }; -SPDocument *sp_document_new (const gchar *uri, unsigned int keepalive, bool make_new = false); -SPDocument *sp_document_new_from_mem (const gchar *buffer, gint length, unsigned int keepalive); +SPDocument *sp_document_new(const gchar *uri, unsigned int keepalive, bool make_new = false); +SPDocument *sp_document_new_from_mem(const gchar *buffer, gint length, unsigned int keepalive); -SPDocument *sp_document_ref (SPDocument *doc); -SPDocument *sp_document_unref (SPDocument *doc); +SPDocument *sp_document_ref(SPDocument *doc); +SPDocument *sp_document_unref(SPDocument *doc); SPDocument *sp_document_create(Inkscape::XML::Document *rdoc, gchar const *uri, gchar const *base, gchar const *name, unsigned int keepalive); @@ -180,17 +199,18 @@ SPDocument *sp_document_create(Inkscape::XML::Document *rdoc, gchar const *uri, #define sp_document_repr_doc(d) (d->rdoc) #define sp_document_repr_root(d) (d->rroot) #define sp_document_root(d) (d->root) -#define SP_DOCUMENT_ROOT(d) (d->root) +#define SP_DOCUMENT_ROOT(d) (d->root) -gdouble sp_document_width (SPDocument * document); -gdouble sp_document_height (SPDocument * document); +gdouble sp_document_width(SPDocument *document); +gdouble sp_document_height(SPDocument *document); +Geom::Point sp_document_dimensions(SPDocument *document); struct SPUnit; -void sp_document_set_width (SPDocument * document, gdouble width, const SPUnit *unit); -void sp_document_set_height (SPDocument * document, gdouble height, const SPUnit *unit); +void sp_document_set_width(SPDocument *document, gdouble width, const SPUnit *unit); +void sp_document_set_height(SPDocument *document, gdouble height, const SPUnit *unit); -#define SP_DOCUMENT_URI(d) (d->uri) +#define SP_DOCUMENT_URI(d) (d->uri) #define SP_DOCUMENT_NAME(d) (d->name) #define SP_DOCUMENT_BASE(d) (d->base) @@ -202,38 +222,38 @@ void sp_document_set_height (SPDocument * document, gdouble height, const SPUnit * Undo & redo */ -void sp_document_set_undo_sensitive (SPDocument * document, bool sensitive); -bool sp_document_get_undo_sensitive (SPDocument const * document); +void sp_document_set_undo_sensitive(SPDocument *document, bool sensitive); +bool sp_document_get_undo_sensitive(SPDocument const *document); -void sp_document_clear_undo (SPDocument * document); -void sp_document_clear_redo (SPDocument * document); +void sp_document_clear_undo(SPDocument *document); +void sp_document_clear_redo(SPDocument *document); -void sp_document_child_added (SPDocument *doc, SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref); -void sp_document_child_removed (SPDocument *doc, SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref); -void sp_document_attr_changed (SPDocument *doc, SPObject *object, const gchar *key, const gchar *oldval, const gchar *newval); -void sp_document_content_changed (SPDocument *doc, SPObject *object, const gchar *oldcontent, const gchar *newcontent); -void sp_document_order_changed (SPDocument *doc, SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *oldref, Inkscape::XML::Node *newref); +void sp_document_child_added(SPDocument *doc, SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref); +void sp_document_child_removed(SPDocument *doc, SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref); +void sp_document_attr_changed(SPDocument *doc, SPObject *object, const gchar *key, const gchar *oldval, const gchar *newval); +void sp_document_content_changed(SPDocument *doc, SPObject *object, const gchar *oldcontent, const gchar *newcontent); +void sp_document_order_changed(SPDocument *doc, SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *oldref, Inkscape::XML::Node *newref); /* Object modification root handler */ -void sp_document_request_modified (SPDocument *doc); -gint sp_document_ensure_up_to_date (SPDocument *doc); +void sp_document_request_modified(SPDocument *doc); +gint sp_document_ensure_up_to_date(SPDocument *doc); /* Save all previous actions to stack, as one undo step */ -void sp_document_done (SPDocument *document, unsigned int event_type, Glib::ustring event_description); -void sp_document_maybe_done (SPDocument *document, const gchar *keyconst, unsigned int event_type, Glib::ustring event_description); -void sp_document_reset_key (Inkscape::Application *inkscape, SPDesktop *desktop, GtkObject *base); +void sp_document_done(SPDocument *document, unsigned int event_type, Glib::ustring event_description); +void sp_document_maybe_done(SPDocument *document, const gchar *keyconst, unsigned int event_type, Glib::ustring event_description); +void sp_document_reset_key(Inkscape::Application *inkscape, SPDesktop *desktop, GtkObject *base); /* Cancel (and revert) current unsaved actions */ -void sp_document_cancel (SPDocument *document); +void sp_document_cancel(SPDocument *document); /* Undo and redo */ -gboolean sp_document_undo (SPDocument * document); -gboolean sp_document_redo (SPDocument * document); +gboolean sp_document_undo(SPDocument *document); +gboolean sp_document_redo(SPDocument *document); /* Resource management */ -gboolean sp_document_add_resource (SPDocument *document, const gchar *key, SPObject *object); -gboolean sp_document_remove_resource (SPDocument *document, const gchar *key, SPObject *object); -const GSList *sp_document_get_resource_list (SPDocument *document, const gchar *key); +gboolean sp_document_add_resource(SPDocument *document, const gchar *key, SPObject *object); +gboolean sp_document_remove_resource(SPDocument *document, const gchar *key, SPObject *object); +const GSList *sp_document_get_resource_list(SPDocument *document, const gchar *key); sigc::connection sp_document_resources_changed_connect(SPDocument *document, const gchar *key, SPDocument::ResourcesChangedSignal::slot_type slot); @@ -255,17 +275,20 @@ sigc::connection sp_document_resources_changed_connect(SPDocument *document, con * Misc */ -GSList * sp_document_items_in_box(SPDocument *document, unsigned int dkey, NR::Rect const &box); -GSList * sp_document_partial_items_in_box(SPDocument *document, unsigned int dkey, NR::Rect const &box); -SPItem* sp_document_item_from_list_at_point_bottom (unsigned int dkey, SPGroup *group, const GSList *list, NR::Point const p, bool take_insensitive = false); -SPItem * sp_document_item_at_point (SPDocument *document, unsigned int key, NR::Point const p, gboolean into_groups, SPItem *upto = NULL); -GSList *sp_document_items_at_points(SPDocument *document, unsigned const key, std::vector points); -SPItem *sp_document_group_at_point (SPDocument *document, unsigned int key, NR::Point const p); +GSList *sp_document_items_in_box(SPDocument *document, unsigned int dkey, Geom::Rect const &box); +GSList *sp_document_partial_items_in_box(SPDocument *document, unsigned int dkey, Geom::Rect const &box); +SPItem *sp_document_item_from_list_at_point_bottom(unsigned int dkey, SPGroup *group, const GSList *list, Geom::Point const p, bool take_insensitive = false); +SPItem *sp_document_item_at_point (SPDocument *document, unsigned int key, Geom::Point const p, gboolean into_groups, SPItem *upto = NULL); +GSList *sp_document_items_at_points(SPDocument *document, unsigned const key, std::vector points); +SPItem *sp_document_group_at_point (SPDocument *document, unsigned int key, Geom::Point const p); + +void sp_document_set_uri(SPDocument *document, gchar const *uri); +void sp_document_change_uri_and_hrefs(SPDocument *document, gchar const *uri); + +void sp_document_resized_signal_emit(SPDocument *doc, gdouble width, gdouble height); -void sp_document_set_uri (SPDocument *document, const gchar *uri); -void sp_document_resized_signal_emit (SPDocument *doc, gdouble width, gdouble height); +unsigned int vacuum_document(SPDocument *document); -unsigned int vacuum_document (SPDocument *document); #endif @@ -278,4 +301,4 @@ unsigned int vacuum_document (SPDocument *document); fill-column:99 End: */ -// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 : +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :