X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Finterface.cpp;h=fa41e5898bbe81268ce036ee0cab0ab34b375bfb;hb=589de22f01b0975fcd36bbc99c06013e971c85b8;hp=2f4a4d033b4693e60931aa9f8bc305658bd8a55a;hpb=e1f71125d0e37dbbab6c19b6c23724dbdd49e933;p=inkscape.git diff --git a/src/interface.cpp b/src/interface.cpp index 2f4a4d033..fa41e5898 100644 --- a/src/interface.cpp +++ b/src/interface.cpp @@ -112,24 +112,26 @@ static void sp_ui_drag_data_received(GtkWidget *widget, static void sp_ui_menu_item_set_sensitive(SPAction *action, unsigned int sensitive, void *data); +static void sp_ui_menu_item_set_name(SPAction *action, + Glib::ustring name, + void *data); SPActionEventVector menu_item_event_vector = { {NULL}, NULL, NULL, /* set_active */ sp_ui_menu_item_set_sensitive, /* set_sensitive */ - NULL /* set_shortcut */ + NULL, /* set_shortcut */ + sp_ui_menu_item_set_name /* set_name */ }; void sp_create_window(SPViewWidget *vw, gboolean editable) { - GtkWidget *w, *hb; - g_return_if_fail(vw != NULL); g_return_if_fail(SP_IS_VIEW_WIDGET(vw)); - w = sp_window_new("", TRUE); + GtkWidget *w = sp_window_new("", TRUE); if (editable) { g_object_set_data(G_OBJECT(vw), "window", w); @@ -137,13 +139,8 @@ sp_create_window(SPViewWidget *vw, gboolean editable) static_cast((void*)w); } - hb = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hb); - gtk_container_add(GTK_CONTAINER(w), hb); - g_object_set_data(G_OBJECT(w), "hbox", hb); - - /* fixme: */ if (editable) { + /* fixme: */ gtk_window_set_default_size((GtkWindow *) w, 640, 480); g_object_set_data(G_OBJECT(w), "desktop", SP_DESKTOP_WIDGET(vw)->desktop); g_object_set_data(G_OBJECT(w), "desktopwidget", vw); @@ -153,10 +150,9 @@ sp_create_window(SPViewWidget *vw, gboolean editable) gtk_window_set_policy(GTK_WINDOW(w), TRUE, TRUE, TRUE); } - gtk_box_pack_end(GTK_BOX(hb), GTK_WIDGET(vw), TRUE, TRUE, 0); + gtk_container_add(GTK_CONTAINER(w), GTK_WIDGET(vw)); gtk_widget_show(GTK_WIDGET(vw)); - if ( completeDropTargets == 0 || completeDropTargetsCount == 0 ) { std::vector types; @@ -217,6 +213,7 @@ sp_ui_new_view() sp_create_window(dtw, TRUE); sp_namedview_window_from_document(static_cast(dtw->view)); + sp_namedview_update_layers_from_document(static_cast(dtw->view)); } /* TODO: not yet working */ @@ -695,7 +692,7 @@ sp_menu_append_new_templates(GtkWidget *menu, Inkscape::UI::View::View *view) if (dir) { for (gchar const *file = g_dir_read_name(dir); file != NULL; file = g_dir_read_name(dir)) { - if (!g_str_has_suffix(file, ".svg")) + if (!g_str_has_suffix(file, ".svg") && !g_str_has_suffix(file, ".svgz")) continue; // skip non-svg files gchar *basename = g_path_get_basename(file); @@ -939,7 +936,8 @@ sp_ui_context_menu(Inkscape::UI::View::View *view, SPItem *item) } if (( group && group != dt->currentLayer() ) || - ( dt->currentLayer() != dt->currentRoot() ) ) { + ( dt->currentLayer() != dt->currentRoot() && SP_OBJECT_PARENT(dt->currentLayer()) != dt->currentRoot() ) ) { + /* Separator */ sp_ui_menu_append_item(GTK_MENU(m), NULL, NULL, NULL, NULL, NULL, NULL); } @@ -977,11 +975,13 @@ sp_ui_drag_data_received(GtkWidget *widget, guint event_time, gpointer user_data) { + SPDocument *doc = SP_ACTIVE_DOCUMENT; + SPDesktop *desktop = SP_ACTIVE_DESKTOP; + switch (info) { #if ENABLE_MAGIC_COLORS case APP_X_INKY_COLOR: { - SPDesktop *desktop = SP_ACTIVE_DESKTOP; int destX = 0; int destY = 0; gtk_widget_translate_coordinates( widget, &(desktop->canvas->widget), x, y, &destX, &destY ); @@ -1042,8 +1042,8 @@ sp_ui_drag_data_received(GtkWidget *widget, sp_desktop_apply_css_recursive( item, css, true ); item->updateRepr(); - SPDocument *doc = SP_ACTIVE_DOCUMENT; - sp_document_done( doc ); + sp_document_done( doc , SP_VERB_NONE, + _("Drop color")); if ( srgbProf ) { cmsCloseProfile( srgbProf ); @@ -1056,7 +1056,6 @@ sp_ui_drag_data_received(GtkWidget *widget, case APP_X_COLOR: { - SPDesktop *desktop = SP_ACTIVE_DESKTOP; int destX = 0; int destY = 0; gtk_widget_translate_coordinates( widget, &(desktop->canvas->widget), x, y, &destX, &destY ); @@ -1083,8 +1082,8 @@ sp_ui_drag_data_received(GtkWidget *widget, sp_desktop_apply_css_recursive( item, css, true ); item->updateRepr(); - SPDocument *doc = SP_ACTIVE_DOCUMENT; - sp_document_done( doc ); + sp_document_done( doc , SP_VERB_NONE, + _("Drop color")); } } } @@ -1094,8 +1093,6 @@ sp_ui_drag_data_received(GtkWidget *widget, case SVG_XML_DATA: { gchar *svgdata = (gchar *)data->data; - SPDocument *doc = SP_ACTIVE_DOCUMENT; - Inkscape::XML::Document *rnewdoc = sp_repr_read_mem(svgdata, data->length, SP_SVG_NS_URI); if (rnewdoc == NULL) { @@ -1103,20 +1100,20 @@ sp_ui_drag_data_received(GtkWidget *widget, return; } - Inkscape::XML::Node *repr = sp_repr_document_root(rnewdoc); + Inkscape::XML::Node *repr = rnewdoc->root(); gchar const *style = repr->attribute("style"); - Inkscape::XML::Node *newgroup = sp_repr_new("svg:g"); + Inkscape::XML::Node *newgroup = rnewdoc->createElement("svg:g"); newgroup->setAttribute("style", style); + Inkscape::XML::Document * xml_doc = sp_document_repr_doc(doc); for (Inkscape::XML::Node *child = repr->firstChild(); child != NULL; child = child->next()) { - Inkscape::XML::Node *newchild = child->duplicate(); + Inkscape::XML::Node *newchild = child->duplicate(xml_doc); newgroup->appendChild(newchild); } Inkscape::GC::release(rnewdoc); - SPDesktop *desktop = SP_ACTIVE_DESKTOP; // Add it to the current layer // Greg's edits to add intelligent positioning of svg drops @@ -1131,13 +1128,17 @@ sp_ui_drag_data_received(GtkWidget *widget, int const saved_pref = prefs_get_int_attribute("options.transform", "pattern", 1); prefs_set_int_attribute("options.transform", "pattern", 1); sp_document_ensure_up_to_date(sp_desktop_document(desktop)); - NR::Point m( desktop->point() - selection->bounds().midpoint() ); - sp_selection_move_relative(selection, m); + NR::Maybe sel_bbox = selection->bounds(); + if (sel_bbox) { + NR::Point m( desktop->point() - sel_bbox->midpoint() ); + sp_selection_move_relative(selection, m); + } prefs_set_int_attribute("options.transform", "pattern", saved_pref); } Inkscape::GC::release(newgroup); - sp_document_done(doc); + sp_document_done(doc, SP_VERB_NONE, + _("Drop SVG")); break; } @@ -1156,9 +1157,9 @@ sp_ui_drag_data_received(GtkWidget *widget, Base64OutputStream b64out(outs); b64out.setColumnWidth(0); - SPDocument *doc = SP_ACTIVE_DOCUMENT; + Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc); - Inkscape::XML::Node *newImage = sp_repr_new("svg:image"); + Inkscape::XML::Node *newImage = xml_doc->createElement("svg:image"); for ( int i = 0; i < data->length; i++ ) { b64out.put( data->data[i] ); @@ -1190,13 +1191,12 @@ sp_ui_drag_data_received(GtkWidget *widget, } } - SPDesktop *desktop = SP_ACTIVE_DESKTOP; - // Add it to the current layer desktop->currentLayer()->appendChildRepr(newImage); Inkscape::GC::release(newImage); - sp_document_done( doc ); + sp_document_done( doc , SP_VERB_NONE, + _("Drop bitmap image")); break; } } @@ -1242,7 +1242,7 @@ sp_ui_error_dialog(gchar const *message) gchar *safeMsg = Inkscape::IO::sanitizeString(message); dlg = gtk_message_dialog_new(NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, - GTK_BUTTONS_CLOSE, safeMsg); + GTK_BUTTONS_CLOSE, "%s", safeMsg); sp_transientize(dlg); gtk_window_set_resizable(GTK_WINDOW(dlg), FALSE); gtk_dialog_run(GTK_DIALOG(dlg)); @@ -1254,52 +1254,39 @@ bool sp_ui_overwrite_file(gchar const *filename) { bool return_value = FALSE; - GtkWidget *dialog; - GtkWidget *hbox; - GtkWidget *boxdata; - gchar *title; - gchar *text; if (Inkscape::IO::file_test(filename, G_FILE_TEST_EXISTS)) { - - title = g_strdup_printf(_("Overwrite %s"), filename); - dialog = gtk_dialog_new_with_buttons(title, - NULL, - (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT), - GTK_STOCK_NO, - GTK_RESPONSE_NO, - GTK_STOCK_YES, - GTK_RESPONSE_YES, - NULL); - gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_YES); - - sp_transientize(dialog); - gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); - - hbox = gtk_hbox_new(FALSE, 5); - - // TODO - replace with Inkscape-specific call - boxdata = gtk_image_new_from_stock(GTK_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG); - - gtk_widget_show(boxdata); - gtk_box_pack_start(GTK_BOX(hbox), boxdata, TRUE, TRUE, 5); - text = g_strdup_printf(_("The file %s already exists. Do you want to overwrite that file with the current document?"), filename); - boxdata = gtk_label_new(text); - gtk_label_set_line_wrap(GTK_LABEL(boxdata), TRUE); - gtk_widget_show(boxdata); - gtk_box_pack_start(GTK_BOX(hbox), boxdata, FALSE, FALSE, 5); - gtk_widget_show(hbox); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, TRUE, TRUE, 5); - - if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_YES) { + GtkWidget* ancestor = 0; + SPDesktop *desktop = SP_ACTIVE_DESKTOP; + if ( desktop ) { + desktop->getToplevel( ancestor ); + } + GtkWindow *window = GTK_WIDGET_TOPLEVEL(ancestor) ? GTK_WINDOW( ancestor ) : 0; + gchar* baseName = g_path_get_basename( filename ); + gchar* dirName = g_path_get_dirname( filename ); + GtkWidget* dialog = gtk_message_dialog_new_with_markup( window, + (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT), + GTK_MESSAGE_QUESTION, + GTK_BUTTONS_NONE, + _( "A file named \"%s\" already exists. Do you want to replace it?\n\n" + "The file already exists in \"%s\". Replacing it will overwrite its contents." ), + baseName, + dirName + ); + gtk_dialog_add_buttons( GTK_DIALOG(dialog), + GTK_STOCK_CANCEL, GTK_RESPONSE_NO, + _("Replace"), GTK_RESPONSE_YES, + NULL ); + gtk_dialog_set_default_response( GTK_DIALOG(dialog), GTK_RESPONSE_YES ); + + if ( gtk_dialog_run( GTK_DIALOG(dialog) ) == GTK_RESPONSE_YES ) { return_value = TRUE; } else { return_value = FALSE; } - gtk_widget_destroy(dialog); - g_free(title); - g_free(text); + g_free( baseName ); + g_free( dirName ); } else { return_value = TRUE; } @@ -1313,6 +1300,15 @@ sp_ui_menu_item_set_sensitive(SPAction *action, unsigned int sensitive, void *da return gtk_widget_set_sensitive(GTK_WIDGET(data), sensitive); } +static void +sp_ui_menu_item_set_name(SPAction *action, Glib::ustring name, void *data) +{ + gtk_label_set_markup_with_mnemonic( + GTK_LABEL (gtk_container_get_children(GTK_CONTAINER (GTK_BIN (data)->child))->data), + name.c_str()); +} + + /* Local Variables: mode:c++