static void edit_layer_add_ok_callback (GtkWidget *w, gpointer client_data) { EditLayerDialog *dialog = (EditLayerDialog *) client_data; Diagram *dia = ddisplay_active_diagram(); Layer *layer; int pos = data_layer_get_index (dia->data, dia->data->active_layer) + 1; layer = new_layer(g_strdup (gtk_entry_get_text (GTK_ENTRY (dialog->name_entry))), dia->data); data_add_layer_at(dia->data, layer, pos); data_set_active_layer(dia->data, layer); diagram_add_update_all(dia); diagram_flush(dia); undo_layer(dia, layer, TYPE_ADD_LAYER, pos); undo_set_transactionpoint(dia->undo); /* ugly way of updating the layer widget */ if (layer_dialog && layer_dialog->diagram == dia) { layer_dialog_set_diagram(dia); } gtk_widget_destroy (dialog->dialog); g_free (dialog); }
static PyObject * PyDiaDiagramData_SetActiveLayer(PyDiaDiagramData *self, PyObject *args) { PyDiaLayer *layer; if (!PyArg_ParseTuple(args, "O!:DiagramData.set_active_layer", &PyDiaLayer_Type, &layer)) return NULL; data_set_active_layer(self->data, layer->layer); Py_INCREF(Py_None); return Py_None; }
/* imports the given DRS file, returns TRUE if successful */ gboolean import_drs (const gchar *filename, DiagramData *dia, DiaContext *ctx, void* user_data) { GList *item, *items; xmlDocPtr doc = xmlParseFile(filename); xmlNodePtr root = NULL, node; Layer *active_layer = NULL; for (node = doc->children; node; node = node->next) if (xmlStrcmp (node->name, (const xmlChar *)"drs") == 0) root = node; if (!root || !(root = find_child_named (root, "diagram"))) { dia_context_add_message (ctx, _("Broken file?")); return FALSE; } for (node = root->children; node != NULL; node = node->next) { if (xmlStrcmp (node->name, (const xmlChar *)"layer") == 0) { xmlChar *str; xmlChar *name = xmlGetProp (node, (const xmlChar *)"name"); Layer *layer = new_layer (g_strdup (name ? (gchar *)name : _("Layer")), dia); if (name) xmlFree (name); str = xmlGetProp (node, (const xmlChar *)"active"); if (xmlStrcmp (str, (const xmlChar *)"true")) { active_layer = layer; xmlFree (str); } items = read_items (node->children, ctx); for (item = items; item != NULL; item = g_list_next (item)) { DiaObject *obj = (DiaObject *)item->data; layer_add_object(layer, obj); } g_list_free (items); data_add_layer (dia, layer); } } if (active_layer) data_set_active_layer (dia, active_layer); xmlFreeDoc(doc); return TRUE; }
static void _dtv_select_items (GtkAction *action, DiagramTreeView *dtv) { GtkTreeSelection *selection; GtkTreeModel *model; GList *rows, *r; gboolean once = TRUE; selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dtv)); rows = gtk_tree_selection_get_selected_rows (selection, &model); r = rows; while (r) { GtkTreeIter iter; if (gtk_tree_model_get_iter (model, &iter, r->data)) { Diagram *diagram; Layer *layer; DiaObject *object; gtk_tree_model_get (model, &iter, DIAGRAM_COLUMN, &diagram, -1); gtk_tree_model_get (model, &iter, LAYER_COLUMN, &layer, -1); gtk_tree_model_get (model, &iter, OBJECT_COLUMN, &object, -1); if (once) { /* destroy previous selection in first iteration */ diagram_remove_all_selected(diagram, TRUE); once = FALSE; } if (layer) /* fixme: layer dialog update missing */ data_set_active_layer (DIA_DIAGRAM_DATA(diagram), layer); if (object) diagram_select (diagram, object); if (diagram) { diagram_add_update_all (diagram); diagram_flush(diagram); g_object_unref (diagram); } } r = g_list_next (r); } g_list_foreach (rows, (GFunc) gtk_tree_path_free, NULL); g_list_free (rows); }
/*! * BEWARE: we need to notify the DiagramTree somehow - maybe * better make it listen to object-add signal? */ static void move_object_layer_relative(Diagram *dia, GList *objects, gint dist) { /* from the active layer to above or below */ Layer *active, *target; guint pos; g_return_if_fail(dia->data->active_layer); active = dia->data->active_layer; for (pos = 0; pos < dia->data->layers->len; ++pos) if (active == g_ptr_array_index(dia->data->layers, pos)) break; pos = (pos + dia->data->layers->len + dist) % dia->data->layers->len; target = g_ptr_array_index(dia->data->layers, pos); object_add_updates_list(objects, dia); layer_remove_objects(active, objects); diagram_tree_add_objects(diagram_tree(), dia, objects); layer_add_objects(target, g_list_copy(objects)); data_set_active_layer(dia->data, target); diagram_tree_add_objects(diagram_tree(), dia, objects); }
static void dia_layer_select_callback(GtkWidget *widget, gpointer data) { DiaLayerWidget *lw; lw = DIA_LAYER_WIDGET(widget); /* Don't deselect if we're selected the active layer. This can happen * if the window has been defocused. */ if (lw->dia->data->active_layer != lw->layer) { diagram_remove_all_selected(lw->dia, TRUE); } diagram_update_extents(lw->dia); data_set_active_layer(lw->dia->data, lw->layer); diagram_add_update_all(lw->dia); diagram_flush(lw->dia); internal_call = TRUE; if (lw->connect_off) { /* If the user wants this off, it becomes so */ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(lw->connectable), FALSE); } else { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(lw->connectable), TRUE); } internal_call = FALSE; }
/* reads the blocks section of the dxf file */ static void read_section_blocks_dxf(FILE *filedxf, DxfData *data, DiagramData *dia) { int group_items = 0, group = 0; GList *group_list = NULL; DiaObject *obj = NULL; Layer *group_layer = NULL; if (read_dxf_codes(filedxf, data) == FALSE){ return; } do { if((data->code == 0) && (strcmp(data->value, "LINE") == 0)) { obj = read_entity_line_dxf(filedxf, data, dia); } else if((data->code == 0) && (strcmp(data->value, "SOLID") == 0)) { obj = read_entity_solid_dxf(filedxf, data, dia); } else if((data->code == 0) && (strcmp(data->value, "VERTEX") == 0)) { read_entity_line_dxf(filedxf, data, dia); } else if((data->code == 0) && (strcmp(data->value, "POLYLINE") == 0)) { obj = read_entity_polyline_dxf(filedxf, data, dia); } else if((data->code == 0) && (strcmp(data->value, "CIRCLE") == 0)) { obj = read_entity_circle_dxf(filedxf, data, dia); } else if((data->code == 0) && (strcmp(data->value, "ELLIPSE") == 0)) { obj = read_entity_ellipse_dxf(filedxf, data, dia); } else if((data->code == 0) && (strcmp(data->value, "TEXT") == 0)) { obj = read_entity_text_dxf(filedxf, data, dia); } else if((data->code == 0) && (strcmp(data->value, "ARC") == 0)) { obj = read_entity_arc_dxf(filedxf,data,dia); } else if((data->code == 0) && (strcmp(data->value, "BLOCK") == 0)) { /* printf("Begin group\n" ); */ group = TRUE; group_items = 0; group_list = NULL; group_layer = NULL; do { if(read_dxf_codes(filedxf, data) == FALSE) return; if(data->code == 8) { group_layer = layer_find_by_name( data->value, dia ); data_set_active_layer (dia, group_layer); } } while(data->code != 0); } else if((data->code == 0) && (strcmp(data->value, "ENDBLK") == 0)) { /* printf( "End group %d\n", group_items ); */ if( group && group_items > 0 && group_list != NULL ) { obj = group_create( group_list ); if( NULL == group_layer ) layer_add_object( dia->active_layer, obj ); else layer_add_object( group_layer, obj ); } group = FALSE; group_items = 0; group_list = NULL; obj = NULL; if(read_dxf_codes(filedxf, data) == FALSE) return; } else { if(read_dxf_codes(filedxf, data) == FALSE) { return; } } if( group && obj != NULL ) { group_items++; group_list = g_list_prepend( group_list, obj ); obj = NULL; } } while((data->code != 0) || (strcmp(data->value, "ENDSEC") != 0)); }
static gint fnr_respond (GtkWidget *widget, gint response_id, gpointer data) { const gchar *search = gtk_entry_get_text (g_object_get_data (G_OBJECT (widget), "search-entry")); const gchar *replace; DDisplay *ddisp = (DDisplay*)data; SearchData sd = { 0, }; sd.diagram = ddisp->diagram; sd.flags = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON ( g_object_get_data (G_OBJECT (widget), "match-case"))) ? MATCH_CASE : 0; sd.flags |= gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON ( g_object_get_data (G_OBJECT (widget), "match-word"))) ? MATCH_WORD : 0; sd.flags |= gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON ( g_object_get_data (G_OBJECT (widget), "match-all-properties"))) ? MATCH_ALL_PROPERTIES : 0; switch (response_id) { case RESPONSE_FIND : sd.key = search; sd.last = g_object_get_data (G_OBJECT (widget), "last-found"); if (!_matches (sd.last, &sd)) sd.last = NULL; /* reset if we start a new search */ diagram_remove_all_selected (ddisp->diagram, TRUE); data_foreach_object (ddisp->diagram->data, find_func, &sd); /* remember it */ sd.last = sd.found ? sd.found : sd.first; g_object_set_data (G_OBJECT (widget), "last-found", sd.last); if (sd.last) { if (dia_object_get_parent_layer(sd.last) != ddisp->diagram->data->active_layer) { /* can only select objects in the active layer */ data_set_active_layer(ddisp->diagram->data, dia_object_get_parent_layer(sd.last)); diagram_add_update_all(ddisp->diagram); diagram_flush(ddisp->diagram); } diagram_select (ddisp->diagram, sd.last); ddisplay_present_object (ddisp, sd.last); } break; case RESPONSE_REPLACE : replace = gtk_entry_get_text (g_object_get_data (G_OBJECT (widget), "replace-entry")); sd.key = search; sd.last = g_object_get_data (G_OBJECT (widget), "last-found"); if (!_matches (sd.last, &sd)) { sd.last = NULL; /* reset if we start a new search */ data_foreach_object (ddisp->diagram->data, find_func, &sd); } sd.last = sd.found ? sd.found : sd.first; g_object_set_data (G_OBJECT (widget), "last-found", sd.last); if (sd.last) { _replace (sd.last, &sd, replace); undo_set_transactionpoint(ddisp->diagram->undo); } g_object_set_data (G_OBJECT (widget), "last-found", sd.last); break; case RESPONSE_REPLACE_ALL : replace = gtk_entry_get_text (g_object_get_data (G_OBJECT (widget), "replace-entry")); sd.key = search; sd.last = g_object_get_data (G_OBJECT (widget), "last-found"); do { if (!_matches (sd.last, &sd)) { sd.last = NULL; /* reset if we start a new search */ sd.first = NULL; data_foreach_object (ddisp->diagram->data, find_func, &sd); } sd.last = sd.found ? sd.found : sd.first; if (sd.last) if (!_replace (sd.last, &sd, replace)) sd.last = NULL; } while (sd.last); g_object_set_data (G_OBJECT (widget), "last-found", sd.last); undo_set_transactionpoint(ddisp->diagram->undo); break; default: gtk_widget_hide (widget); } return 0; }