Code

Clear the mssage context after drag filling
[inkscape.git] / src / sp-namedview.cpp
index a220d8401c2cb259a9039208592c8a0f8ac1132f..a11904570dd626b2e08d61f231460900685f0a6b 100644 (file)
@@ -139,7 +139,6 @@ static void sp_namedview_build(SPObject *object, SPDocument *document, Inkscape:
     sp_object_read_attr(object, "gridtolerance");
     sp_object_read_attr(object, "guidetolerance");
     sp_object_read_attr(object, "objecttolerance");
-    sp_object_read_attr(object, "inkscape:has_abs_tolerance");
     sp_object_read_attr(object, "gridoriginx");
     sp_object_read_attr(object, "gridoriginy");
     sp_object_read_attr(object, "gridspacingx");
@@ -168,12 +167,12 @@ static void sp_namedview_build(SPObject *object, SPDocument *document, Inkscape:
     sp_object_read_attr(object, "inkscape:window-height");
     sp_object_read_attr(object, "inkscape:window-x");
     sp_object_read_attr(object, "inkscape:window-y");
-    sp_object_read_attr(object, "inkscape:grid-bbox");
+/*  sp_object_read_attr(object, "inkscape:grid-bbox");
     sp_object_read_attr(object, "inkscape:guide-bbox");
     sp_object_read_attr(object, "inkscape:object-bbox");
     sp_object_read_attr(object, "inkscape:grid-points");
     sp_object_read_attr(object, "inkscape:guide-points");
-    sp_object_read_attr(object, "inkscape:object-points");
+    sp_object_read_attr(object, "inkscape:object-points");*/
     sp_object_read_attr(object, "inkscape:object-paths");
     sp_object_read_attr(object, "inkscape:object-nodes");
     sp_object_read_attr(object, "inkscape:current-layer");
@@ -268,13 +267,6 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va
             }
             object->requestModified(SP_OBJECT_MODIFIED_FLAG);
             break;
-       case SP_ATTR_ABS_TOLERANCE:
-             if (!value)
-                 nv->has_abs_tolerance = true;
-             else
-                 nv->has_abs_tolerance = (sp_str_to_bool (value) == TRUE);
-             object->requestModified(SP_OBJECT_MODIFIED_FLAG);
-             break;
        case SP_ATTR_GRIDORIGINX:
        case SP_ATTR_GRIDORIGINY:
        {
@@ -443,7 +435,7 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va
             nv->window_y = value ? atoi(value) : -1; // -1 means not set
             object->requestModified(SP_OBJECT_MODIFIED_FLAG);
             break;
-       case SP_ATTR_INKSCAPE_GRID_BBOX:
+/*     case SP_ATTR_INKSCAPE_GRID_BBOX:
             nv->snap_manager.grid.setSnapTo(Inkscape::Snapper::BBOX_POINT, value ? sp_str_to_bool(value) : TRUE);
             object->requestModified(SP_OBJECT_MODIFIED_FLAG);
             break;
@@ -467,6 +459,7 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va
             nv->snap_manager.object.setSnapTo(Inkscape::Snapper::SNAP_POINT, (value) ? sp_str_to_bool(value) : FALSE);
             object->requestModified(SP_OBJECT_MODIFIED_FLAG);
             break;
+*/
         case SP_ATTR_INKSCAPE_OBJECT_PATHS:
             nv->snap_manager.object.setSnapToPaths(value ? sp_str_to_bool(value) : TRUE);
             object->requestModified(SP_OBJECT_MODIFIED_FLAG);
@@ -533,10 +526,49 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va
     }
 }
 
+/**
+* add a grid item from SVG-repr. Check if this namedview already has a gridobject for this one! If desktop=null, add grid-canvasitem to all desktops of this namedview,
+* otherwise only add it to the specified desktop.
+*/
+static Inkscape::CanvasGrid* 
+sp_namedview_add_grid(SPNamedView *nv, Inkscape::XML::Node *repr, SPDesktop *desktop) {
+    Inkscape::CanvasGrid* grid = NULL;
+    //check if namedview already has an object for this grid
+    for (GSList *l = nv->grids; l != NULL; l = l->next) {
+        Inkscape::CanvasGrid* g = (Inkscape::CanvasGrid*) l->data;
+        if (repr == g->repr) {
+            grid = g;
+            break;
+        }
+    }
+    
+    if (!grid) {
+        //create grid object
+        const char * gridtype = repr->attribute("type");
+        if (!gridtype) {
+            gridtype = "xygrid"; // use this as default gridtype when none is specified
+            repr->setAttribute("type", gridtype);
+        }
+        grid = Inkscape::CanvasGrid::NewGrid(nv, repr, gridtype);
+        nv->grids = g_slist_append(nv->grids, grid);
+    }
+    
+    if (!desktop) {
+        //add canvasitem to all desktops
+        for (GSList *l = nv->views; l != NULL; l = l->next) {
+            SPDesktop *dt = static_cast<SPDesktop*>(l->data);
+            grid->createCanvasItem(dt);
+        }
+    } else {
+        //add canvasitem only for specified desktop
+        grid->createCanvasItem(desktop);
+    }
+
+    return grid;
+}
+
 static void sp_namedview_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref)
 {
-g_message("named view:: child added");
-
     SPNamedView *nv = (SPNamedView *) object;
 
     if (((SPObjectClass *) (parent_class))->child_added) {
@@ -545,18 +577,7 @@ g_message("named view:: child added");
 
     const gchar *id = child->attribute("id");
     if (!strcmp(child->name(), "inkscape:grid")) {
-        // check for which grid-type
-        Inkscape::CanvasGrid* addedgrid;
-        const char * gridtype = child->attribute("type");
-        if (!gridtype) {
-            gridtype = "xygrid"; // use this as default gridtype when none is specified
-            child->setAttribute("type", gridtype);
-        }
-        addedgrid = Inkscape::CanvasGrid::NewGrid( (SPDesktop*) nv->views->data, child, gridtype);
-        if (addedgrid) {
-            nv->grids = g_slist_append(nv->grids, addedgrid);
-            addedgrid->show();
-        }
+        sp_namedview_add_grid(nv, child, NULL);
     } else {
         SPObject *no = object->document->getObjectById(id);
         g_assert(SP_IS_OBJECT(no));
@@ -589,7 +610,6 @@ g_message("named view:: child added");
 
 static void sp_namedview_remove_child(SPObject *object, Inkscape::XML::Node *child)
 {
-g_message("named view:: child removed");
     SPNamedView *nv = (SPNamedView *) object;
 
     if (!strcmp(child->name(), "inkscape:grid")) {
@@ -655,7 +675,7 @@ void SPNamedView::show(SPDesktop *desktop)
 
     views = g_slist_prepend(views, desktop);
 
-    SPCanvasItem * item = sp_canvas_item_new(sp_desktop_grid(desktop), INKSCAPE_TYPE_CXYGRID, NULL);
+    SPCanvasItem * item = sp_canvas_item_new(sp_desktop_gridgroup(desktop), INKSCAPE_TYPE_CXYGRID, NULL);
     // since we're keeping a copy, we need to bump up the ref count
     gtk_object_ref(GTK_OBJECT(item));
     gridviews = g_slist_prepend(gridviews, item);
@@ -665,17 +685,11 @@ void SPNamedView::show(SPDesktop *desktop)
     if (repr) {
         for (Inkscape::XML::Node * child = repr->firstChild() ; child != NULL; child = child->next() ) {
             if (!strcmp(child->name(), "inkscape:grid")) {
-                Inkscape::CanvasXYGrid* addedgrid = new Inkscape::CanvasXYGrid(desktop, child);
-                if (addedgrid) {
-                    grids = g_slist_append(grids, addedgrid);
-                    addedgrid->enabled = true;
-                    addedgrid->show();
-                }
+                sp_namedview_add_grid(this, child, desktop);
             }
         }
     }
-
-
+    
     sp_namedview_setup_grid(this);
 }