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 diagram_properties_update_sensitivity(GtkToggleButton *widget, gpointer userdata) { Diagram *dia = ddisplay_active_diagram(); gboolean dyn_grid, square_grid, hex_grid; if (!dia) return; /* safety first */ dia->grid.dynamic = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dynamic_check)); dyn_grid = dia->grid.dynamic; if (!dyn_grid) dia->grid.hex = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(hex_check)); square_grid = !dyn_grid && !dia->grid.hex; hex_grid = !dyn_grid && dia->grid.hex; gtk_widget_set_sensitive(width_x_entry, square_grid); gtk_widget_set_sensitive(width_y_entry, square_grid); gtk_widget_set_sensitive(visible_x_entry, square_grid); gtk_widget_set_sensitive(visible_y_entry, square_grid); gtk_widget_set_sensitive(hex_check, !dyn_grid); gtk_widget_set_sensitive(hex_size_entry, hex_grid); }
static gboolean _dtv_button_press (GtkWidget *widget, GdkEventButton *event) { GtkTreeSelection *selection; GtkTreeModel *model; GtkTreePath *path = NULL; GtkTreeIter iter; DiaObject *object; Diagram *diagram; if (event->button == 3) { selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)); model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget)); if (!gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL)) { return TRUE; } if (gtk_tree_selection_count_selected_rows (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget))) < 2) { gtk_tree_selection_unselect_all (selection); gtk_tree_selection_select_path (selection, path); /* FIXME: for multiple selection we should check all object selected being compatible */ gtk_tree_model_get_iter (model, &iter, path); gtk_tree_model_get (model, &iter, OBJECT_COLUMN, &object, -1); gtk_tree_path_free (path); } gtk_menu_popup (DIAGRAM_TREE_VIEW(widget)->popup, NULL, NULL, NULL, NULL, event->button, event->time); } else { GTK_WIDGET_CLASS (_dtv_parent_class)->button_press_event (widget, event); if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL)) { model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget)); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_model_get (model, &iter, OBJECT_COLUMN, &object, -1); gtk_tree_model_get (model, &iter, DIAGRAM_COLUMN, &diagram, -1); if (object && diagram && ddisplay_active_diagram() == diagram) { if (event->button == 1 && event->type == GDK_2BUTTON_PRESS) /* double-click 'locates' */ ddisplay_present_object (ddisplay_active(), object); } if (diagram) g_object_unref(diagram); gtk_tree_path_free (path); } } return TRUE; }
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); }
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 GtkWidget * file_save_as_dialog_prepare (Diagram *dia, DDisplay *ddisp) { gchar *filename = NULL; if (!savedlg) { GtkWidget *compressbutton; savedlg = gtk_file_chooser_dialog_new(_("Save Diagram"), GTK_WINDOW(ddisp->shell), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); /* vfs saving is as easy - if you see 'bad file descriptor' there is * something wrong with the permissions of the share ;) */ gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER(savedlg), FALSE); gtk_dialog_set_default_response(GTK_DIALOG(savedlg), GTK_RESPONSE_ACCEPT); gtk_window_set_role(GTK_WINDOW(savedlg), "save_diagram"); /* Need better way to make it a reasonable size. Isn't there some*/ /* standard look for them (or is that just Gnome?)*/ compressbutton = gtk_check_button_new_with_label(_("Compress diagram files")); gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER(savedlg), compressbutton); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(compressbutton), dia->data->is_compressed); g_signal_connect(G_OBJECT(compressbutton), "toggled", G_CALLBACK(toggle_compress_callback), NULL); gtk_widget_show(compressbutton); gtk_widget_set_tooltip_text (compressbutton, _("Compression reduces file size to less than 1/10th " "size and speeds up loading and saving. Some text " "programs cannot manipulate compressed files.")); g_signal_connect (GTK_FILE_CHOOSER(savedlg), "response", G_CALLBACK(file_save_as_response_callback), compressbutton); g_signal_connect(G_OBJECT(savedlg), "destroy", G_CALLBACK(gtk_widget_destroyed), &savedlg); } else { GtkWidget *compressbutton = gtk_file_chooser_get_extra_widget(GTK_FILE_CHOOSER(savedlg)); gtk_widget_set_sensitive(savedlg, TRUE); g_signal_handlers_block_by_func(G_OBJECT(compressbutton), toggle_compress_callback, NULL); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(compressbutton), dia->data->is_compressed); g_signal_handlers_unblock_by_func(G_OBJECT(compressbutton), toggle_compress_callback, NULL); if (g_object_get_data (G_OBJECT (savedlg), "user_data") != NULL) g_object_unref (g_object_get_data (G_OBJECT (savedlg), "user_data")); #if GTK_CHECK_VERSION(2,20,0) if (gtk_widget_get_visible(savedlg)) { #else if (GTK_WIDGET_VISIBLE(savedlg)) { #endif /* keep a refernce to the diagram */ g_object_ref(dia); g_object_set_data (G_OBJECT (savedlg), "user_data", dia); gtk_window_present (GTK_WINDOW(savedlg)); return savedlg; } } if (dia && dia->filename) filename = g_filename_from_utf8(dia->filename, -1, NULL, NULL, NULL); if (filename != NULL) { char* fnabs = dia_get_absolute_filename (filename); if (fnabs) { gchar *base = g_path_get_basename(dia->filename); gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(savedlg), fnabs); /* FileChooser api insist on exiting files for set_filename */ /* ... and does not use filename encoding on this one. */ gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(savedlg), base); g_free(base); } g_free(fnabs); g_free(filename); } g_object_ref(dia); g_object_set_data (G_OBJECT (savedlg), "user_data", dia); return savedlg; } /** * Respond to the File/Save menu entry. * * Delegates to Save As if there is no filename set yet. */ void file_save_callback(GtkAction *action) { Diagram *diagram; diagram = ddisplay_active_diagram(); if (!diagram) return; if (diagram->unsaved) { file_save_as_callback(action); } else { gchar *filename = g_filename_from_utf8(diagram->filename, -1, NULL, NULL, NULL); DiaContext *ctx = dia_context_new (_("Save")); diagram_update_extents(diagram); if (diagram_save(diagram, filename, ctx)) recent_file_history_add(filename); g_free (filename); dia_context_release (ctx); } }