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 void layer_dialog_delete_callback(GtkWidget *widget, gpointer gdata) { Diagram *dia; GtkWidget *selected; Layer *layer; int pos; dia = layer_dialog->diagram; if ((dia != NULL) && (dia->data->layers->len>1)) { assert(GTK_LIST(layer_dialog->layer_list)->selection != NULL); selected = GTK_LIST(layer_dialog->layer_list)->selection->data; layer = dia->data->active_layer; data_remove_layer(dia->data, layer); diagram_add_update_all(dia); diagram_flush(dia); pos = gtk_list_child_position(GTK_LIST(layer_dialog->layer_list), selected); gtk_container_remove(GTK_CONTAINER(layer_dialog->layer_list), selected); undo_layer(dia, layer, TYPE_DELETE_LAYER, dia->data->layers->len - pos); undo_set_transactionpoint(dia->undo); if (--pos<0) pos = 0; gtk_list_select_item(GTK_LIST(layer_dialog->layer_list), pos); } }
void diagram_update_extents(Diagram *dia) { gfloat cur_scale = dia->data->paper.scaling; /* anropar update_scrollbars() */ if (data_update_extents(dia->data)) { /* Update scrollbars because extents were changed: */ GSList *l; DDisplay *ddisp; l = dia->displays; while (l!=NULL) { ddisp = (DDisplay *) l->data; ddisplay_update_scrollbars(ddisp); l = g_slist_next(l); } if (cur_scale != dia->data->paper.scaling) { diagram_add_update_all(dia); diagram_flush(dia); } } }
static void dia_layer_widget_connectable_toggled(GtkToggleButton *widget, gpointer userdata) { DiaLayerWidget *lw = DIA_LAYER_WIDGET(userdata); if (!lw->layer) return; if (shifted) { shifted = FALSE; internal_call = TRUE; dia_layer_widget_exclusive_connectable(lw); internal_call = FALSE; } else { lw->layer->connectable = gtk_toggle_button_get_active(widget); } if (lw->layer == lw->dia->data->active_layer) { lw->connect_off = !gtk_toggle_button_get_active(widget); if (lw->connect_off) lw->connect_on = FALSE; } else { lw->connect_on = gtk_toggle_button_get_active(widget); if (lw->connect_on) lw->connect_off = FALSE; } gtk_widget_queue_draw(GTK_WIDGET(lw)); if (!internal_call) { diagram_add_update_all(lw->dia); diagram_flush(lw->dia); } }
static void layer_change_revert(struct LayerChange *change, Diagram *dia) { switch (change->type) { case TYPE_DELETE_LAYER: data_add_layer_at(dia->data, change->layer, change->index); break; case TYPE_ADD_LAYER: data_remove_layer(dia->data, change->layer); break; case TYPE_RAISE_LAYER: data_lower_layer(dia->data, change->layer); break; case TYPE_LOWER_LAYER: data_raise_layer(dia->data, change->layer); break; } diagram_add_update_all(dia); if (layer_dialog->diagram == dia) { layer_dialog_set_diagram(dia); } change->applied = 0; }
static PyObject * PyDiaDiagram_AddUpdateAll(PyDiaDiagram *self, PyObject *args) { if (!PyArg_ParseTuple(args, ":Diagram.add_update_all")) return NULL; diagram_add_update_all(self->dia); Py_INCREF(Py_None); return Py_None; }
static void edit_layer_rename_ok_callback (GtkWidget *w, gpointer client_data) { EditLayerDialog *dialog = (EditLayerDialog *) client_data; Diagram *dia = ddisplay_active_diagram(); Layer *layer = dia->data->active_layer; g_free (layer->name); layer->name = g_strdup (gtk_entry_get_text (GTK_ENTRY (dialog->name_entry))); diagram_add_update_all(dia); diagram_flush(dia); /* FIXME: undo handling */ gtk_widget_destroy (dialog->dialog); g_free (dialog); }
void diagram_redraw_all() { GList *list; Diagram *dia; list = open_diagrams; while (list != NULL) { dia = (Diagram *) list->data; diagram_add_update_all(dia); diagram_flush(dia); list = g_list_next(list); } return; }
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); }
static void layer_dialog_lower_callback(GtkWidget *widget, gpointer gdata) { Layer *layer; Diagram *dia; GtkWidget *selected; GList *list = NULL; int pos; dia = layer_dialog->diagram; if ((dia != NULL) && (dia->data->layers->len>1)) { assert(GTK_LIST(layer_dialog->layer_list)->selection != NULL); selected = GTK_LIST(layer_dialog->layer_list)->selection->data; pos = gtk_list_child_position(GTK_LIST(layer_dialog->layer_list), selected); if (pos < dia->data->layers->len-1) { layer = DIA_LAYER_WIDGET(selected)->layer; data_lower_layer(dia->data, layer); list = g_list_prepend(list, selected); g_object_ref(selected); gtk_list_remove_items(GTK_LIST(layer_dialog->layer_list), list); gtk_list_insert_items(GTK_LIST(layer_dialog->layer_list), list, pos + 1); g_object_unref(selected); gtk_list_select_item(GTK_LIST(layer_dialog->layer_list), pos+1); diagram_add_update_all(dia); diagram_flush(dia); undo_layer(dia, layer, TYPE_LOWER_LAYER, 0); undo_set_transactionpoint(dia->undo); } } }
static void plugin_callback (GtkWidget *widget, gpointer data) { DiaCallbackFilter *cbf = data; /* check if the callback filter is still available */ if (!g_list_find (filter_get_callbacks (), cbf)) { message_error (_("The function is not available anymore.")); return; } /* and finally invoke it */ if (cbf->callback) { DDisplay *ddisp = NULL; DiagramData* diadata = NULL; ObjectChange *change; /* stuff from the toolbox menu should never get a diagram to modify */ if (strncmp (cbf->menupath, TOOLBOX_MENU, strlen (TOOLBOX_MENU)) != 0) { ddisp = ddisplay_active(); diadata = ddisp ? ddisp->diagram->data : NULL; } change = cbf->callback (diadata, ddisp ? ddisp->diagram->filename : NULL, 0, cbf->user_data); if (change != NULL) { if (ddisp) { undo_object_change(ddisp->diagram, NULL, change); /* * - can not call object_add_update() w/o object * - could call object_add_updates_list() with the selected objects, * but that would just be an educated guess (layout working on selection) */ diagram_add_update_all(ddisp->diagram); diagram_modified(ddisp->diagram); diagram_update_extents(ddisp->diagram); undo_set_transactionpoint(ddisp->diagram->undo); } else { /* no diagram to keep the change, throw it away */ if (change->free) change->free(change); g_free(change); } } } }
static void layer_dialog_new_callback(GtkWidget *widget, gpointer gdata) { Layer *layer; Diagram *dia; GtkWidget *selected; GList *list = NULL; GtkWidget *layer_widget; int pos; static int next_layer_num = 1; dia = layer_dialog->diagram; if (dia != NULL) { gchar* new_layer_name = g_strdup_printf(_("New layer %d"), next_layer_num++); layer = new_layer(new_layer_name, dia->data); assert(GTK_LIST(layer_dialog->layer_list)->selection != NULL); selected = GTK_LIST(layer_dialog->layer_list)->selection->data; pos = gtk_list_child_position(GTK_LIST(layer_dialog->layer_list), selected); data_add_layer_at(dia->data, layer, dia->data->layers->len - pos); diagram_add_update_all(dia); diagram_flush(dia); layer_widget = dia_layer_widget_new(dia, layer); gtk_widget_show(layer_widget); list = g_list_prepend(list, layer_widget); gtk_list_insert_items(GTK_LIST(layer_dialog->layer_list), list, pos); gtk_list_select_item(GTK_LIST(layer_dialog->layer_list), pos); undo_layer(dia, layer, TYPE_ADD_LAYER, dia->data->layers->len - pos); undo_set_transactionpoint(dia->undo); } }
/* called from the layer widget for rename */ static void edit_layer_ok_callback (GtkWidget *w, gpointer client_data) { EditLayerDialog *dialog = (EditLayerDialog *) client_data; Layer *layer; g_return_if_fail (dialog->layer_widget != NULL); layer = dialog->layer_widget->layer; g_free (layer->name); layer->name = g_strdup (gtk_entry_get_text (GTK_ENTRY (dialog->name_entry))); diagram_add_update_all (dialog->layer_widget->dia); diagram_flush (dialog->layer_widget->dia); dia_layer_update_from_layer (dialog->layer_widget); dialog->layer_widget->edit_dialog = NULL; gtk_widget_destroy (dialog->dialog); g_free (dialog); }
static void layer_visibility_change_apply(struct LayerVisibilityChange *change, Diagram *dia) { GPtrArray *layers; Layer *layer = change->layer; int visible = FALSE; int i; if (change->is_exclusive) { /* First determine if _any_ other layer widgets are set to visible. * If there is, exclusive switching turns all off. */ for (i=0;i<dia->data->layers->len;i++) { Layer *temp_layer = g_ptr_array_index(dia->data->layers, i); if (temp_layer != layer) { visible |= temp_layer->visible; } } /* Now, toggle the visibility for all layers except the specified one */ layers = dia->data->layers; for (i = 0; i < layers->len; i++) { Layer *temp_layer = (Layer *) g_ptr_array_index(layers, i); if (temp_layer == layer) { temp_layer->visible = TRUE; } else { temp_layer->visible = !visible; } } } else { layer->visible = !layer->visible; } diagram_add_update_all(dia); if (layer_dialog->diagram == dia) { layer_dialog_set_diagram(dia); } }
static void diagram_properties_respond(GtkWidget *widget, gint response_id, gpointer user_data) { Diagram *active_diagram = ddisplay_active_diagram(); if (response_id == GTK_RESPONSE_OK || response_id == GTK_RESPONSE_APPLY) { if (active_diagram) { active_diagram->grid.dynamic = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dynamic_check)); active_diagram->grid.width_x = gtk_spin_button_get_value(GTK_SPIN_BUTTON(width_x_entry)); active_diagram->grid.width_y = gtk_spin_button_get_value(GTK_SPIN_BUTTON(width_y_entry)); active_diagram->grid.visible_x = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(visible_x_entry)); active_diagram->grid.visible_y = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(visible_y_entry)); active_diagram->grid.hex = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(hex_check)); active_diagram->grid.hex_size = gtk_spin_button_get_value(GTK_SPIN_BUTTON(hex_size_entry)); dia_color_selector_get_color(bg_colour, &active_diagram->data->bg_color); dia_color_selector_get_color(grid_colour, &active_diagram->grid.colour); dia_color_selector_get_color(pagebreak_colour, &active_diagram->pagebreak_color); diagram_add_update_all(active_diagram); diagram_flush(active_diagram); diagram_set_modified(active_diagram, TRUE); } } if (response_id != GTK_RESPONSE_APPLY) gtk_widget_hide(dialog); }
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; }
/** Revert to the visibility before this change was applied. */ static void layer_visibility_change_revert(struct LayerVisibilityChange *change, Diagram *dia) { GList *vis = change->original_visibility; GPtrArray *layers = dia->data->layers; int i; for (i = 0; vis != NULL && i < layers->len; vis = g_list_next(vis), i++) { Layer *layer = (Layer*) g_ptr_array_index(layers, i); layer->visible = (gboolean)vis->data; } if (vis != NULL || i < layers->len) { printf("Internal error: visibility undo has %d visibilities, but %d layers\n", g_list_length(change->original_visibility), layers->len); } diagram_add_update_all(dia); if (layer_dialog->diagram == dia) { layer_dialog_set_diagram(dia); } }
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; }