239
242
gtk_label_set_mnemonic_widget (GTK_LABEL(l), sb);
243
246
gtk_signal_connect (a, "value_changed", cb, dlg);
246
249
} // end of sp_export_spinbutton_new()
250
sp_export_dialog_area_frame (GtkWidget * dlg)
253
sp_export_dialog_area_box (GtkWidget * dlg)
252
GtkWidget * f, * t, * hb, * b, * us, * l, * vb, * unitbox;
255
Gtk::VBox* vb = new Gtk::VBox(false, 3);
254
f = gtk_frame_new (_("Export area"));
255
vb = gtk_vbox_new (FALSE, 2);
256
gtk_container_add (GTK_CONTAINER (f), vb);
257
Gtk::Label* lbl = new Gtk::Label(_("<big><b>Export area</b></big>"), Gtk::ALIGN_LEFT);
258
lbl->set_use_markup(true);
259
vb->pack_start(*lbl);
259
unitbox = gtk_hbox_new (FALSE, 0);
260
gtk_container_set_border_width (GTK_CONTAINER (unitbox), 4);
262
Gtk::HBox* unitbox = new Gtk::HBox(false, 0);
261
263
/* gets added to the vbox later, but the unit selector is needed
262
264
earlier than that */
264
us = sp_unit_selector_new (SP_UNIT_ABSOLUTE | SP_UNIT_DEVICE);
266
Gtk::Widget* us = Glib::wrap(sp_unit_selector_new (SP_UNIT_ABSOLUTE | SP_UNIT_DEVICE));
265
267
SPDesktop *desktop = SP_ACTIVE_DESKTOP;
267
sp_unit_selector_set_unit (SP_UNIT_SELECTOR(us), SP_DT_NAMEDVIEW(desktop)->doc_units);
268
gtk_box_pack_end (GTK_BOX (unitbox), us, FALSE, FALSE, 0);
269
l = gtk_label_new (_("Units:"));
270
gtk_box_pack_end (GTK_BOX (unitbox), l, FALSE, FALSE, 3);
271
gtk_object_set_data (GTK_OBJECT (dlg), "units", us);
273
hb = gtk_hbox_new (TRUE, 0);
274
gtk_container_set_border_width (GTK_CONTAINER (hb), 4);
275
gtk_box_pack_start(GTK_BOX(vb), hb, FALSE, FALSE, 3);
269
sp_unit_selector_set_unit (SP_UNIT_SELECTOR(us->gobj()), sp_desktop_namedview(desktop)->doc_units);
270
unitbox->pack_end(*us, false, false, 0);
271
Gtk::Label* l = new Gtk::Label(_("Units:"));
272
unitbox->pack_end(*l, false, false, 3);
273
gtk_object_set_data (GTK_OBJECT (dlg), "units", us->gobj());
275
Gtk::HBox* togglebox = new Gtk::HBox(true, 0);
277
Gtk::ToggleButton* b;
277
278
for (int i = 0; i < SELECTION_NUMBER_OF; i++) {
278
b = gtk_toggle_button_new_with_mnemonic (_(selection_labels[i]));
279
gtk_object_set_data (GTK_OBJECT (b), "key", GINT_TO_POINTER(i));
280
gtk_object_set_data (GTK_OBJECT (dlg), selection_names[i], b);
281
gtk_box_pack_start (GTK_BOX (hb), b, FALSE, TRUE, 0);
282
gtk_signal_connect ( GTK_OBJECT (b), "clicked",
279
b = new Gtk::ToggleButton(_(selection_labels[i]), true);
280
b->set_data("key", GINT_TO_POINTER(i));
281
gtk_object_set_data (GTK_OBJECT (dlg), selection_names[i], b->gobj());
282
togglebox->pack_start(*b, false, true, 0);
283
gtk_signal_connect ( GTK_OBJECT (b->gobj()), "clicked",
283
284
GTK_SIGNAL_FUNC (sp_export_area_toggled), dlg );
290
291
g_signal_connect ( G_OBJECT (INKSCAPE), "activate_desktop",
291
292
G_CALLBACK (sp_export_selection_changed), dlg );
293
t = gtk_table_new (2, 6, FALSE);
294
gtk_box_pack_start(GTK_BOX(vb), t, FALSE, FALSE, 0);
295
gtk_table_set_row_spacings (GTK_TABLE (t), 4);
296
gtk_table_set_col_spacings (GTK_TABLE (t), 4);
297
gtk_container_set_border_width (GTK_CONTAINER (t), 4);
294
Gtk::Table* t = new Gtk::Table(2, 6, FALSE);
295
t->set_row_spacings (4);
296
t->set_col_spacings (4);
299
sp_export_spinbutton_new ( "x0", 0.0, -1000000.0, 1000000.0, 0.1, 1.0, us,
300
t, 0, 0, _("_x0:"), NULL, EXPORT_COORD_PRECISION, 1,
298
sp_export_spinbutton_new ( "x0", 0.0, -1000000.0, 1000000.0, 0.1, 1.0, us->gobj(),
299
GTK_WIDGET(t->gobj()), 0, 0, _("_x0:"), NULL, EXPORT_COORD_PRECISION, 1,
301
300
G_CALLBACK ( sp_export_area_x_value_changed),
304
sp_export_spinbutton_new ( "x1", 0.0, -1000000.0, 1000000.0, 0.1, 1.0, us,
305
t, 2, 0, _("x_1:"), NULL, EXPORT_COORD_PRECISION, 1,
303
sp_export_spinbutton_new ( "x1", 0.0, -1000000.0, 1000000.0, 0.1, 1.0, us->gobj(),
304
GTK_WIDGET(t->gobj()), 2, 0, _("x_1:"), NULL, EXPORT_COORD_PRECISION, 1,
306
305
G_CALLBACK (sp_export_area_x_value_changed),
309
308
sp_export_spinbutton_new ( "width", 0.0, -1000000.0, 1000000.0, 0.1, 1.0,
310
us, t, 4, 0, _("Width:"), NULL, EXPORT_COORD_PRECISION, 1,
309
us->gobj(), GTK_WIDGET(t->gobj()), 4, 0, _("Width:"), NULL, EXPORT_COORD_PRECISION, 1,
312
311
(sp_export_area_width_value_changed),
315
sp_export_spinbutton_new ( "y0", 0.0, -1000000.0, 1000000.0, 0.1, 1.0, us,
316
t, 0, 1, _("_y0:"), NULL, EXPORT_COORD_PRECISION, 1,
314
sp_export_spinbutton_new ( "y0", 0.0, -1000000.0, 1000000.0, 0.1, 1.0, us->gobj(),
315
GTK_WIDGET(t->gobj()), 0, 1, _("_y0:"), NULL, EXPORT_COORD_PRECISION, 1,
317
316
G_CALLBACK (sp_export_area_y_value_changed),
320
sp_export_spinbutton_new ( "y1", 0.0, -1000000.0, 1000000.0, 0.1, 1.0, us,
321
t, 2, 1, _("y_1:"), NULL, EXPORT_COORD_PRECISION, 1,
319
sp_export_spinbutton_new ( "y1", 0.0, -1000000.0, 1000000.0, 0.1, 1.0, us->gobj(),
320
GTK_WIDGET(t->gobj()), 2, 1, _("y_1:"), NULL, EXPORT_COORD_PRECISION, 1,
322
321
G_CALLBACK (sp_export_area_y_value_changed),
325
324
sp_export_spinbutton_new ( "height", 0.0, -1000000.0, 1000000.0, 0.1, 1.0,
326
us, t, 4, 1, _("Height:"), NULL, EXPORT_COORD_PRECISION, 1,
325
us->gobj(), GTK_WIDGET(t->gobj()), 4, 1, _("Height:"), NULL, EXPORT_COORD_PRECISION, 1,
327
326
G_CALLBACK (sp_export_area_height_value_changed),
330
/* Adding in the unit box */
331
gtk_box_pack_start(GTK_BOX(vb), unitbox, FALSE, FALSE, 0);
329
vb->pack_start(*togglebox, false, false, 3);
330
vb->pack_start(*t, false, false, 0);
331
vb->pack_start(*unitbox, false, false, 0);
334
} // end of sp_export_dialog_area_frame
334
} // end of sp_export_dialog_area_box
338
338
sp_export_dialog (void)
343
344
gchar title[500];
344
345
sp_ui_dialog_title_string (Inkscape::Verb::get(SP_VERB_FILE_EXPORT), title);
346
347
dlg = sp_window_new (title, TRUE);
348
349
if (x == -1000 || y == -1000) {
349
350
x = prefs_get_int_attribute (prefs_path, "x", 0);
350
351
y = prefs_get_int_attribute (prefs_path, "y", 0);
353
354
if (w ==0 || h == 0) {
354
355
w = prefs_get_int_attribute (prefs_path, "w", 0);
355
356
h = prefs_get_int_attribute (prefs_path, "h", 0);
358
362
if (x != 0 || y != 0) {
359
363
gtk_window_move ((GtkWindow *) dlg, x, y);
361
365
gtk_window_set_position(GTK_WINDOW(dlg), GTK_WIN_POS_CENTER);
365
369
gtk_window_resize ((GtkWindow *) dlg, w, h);
367
371
sp_transientize (dlg);
371
g_signal_connect ( G_OBJECT (INKSCAPE), "activate_desktop",
375
g_signal_connect ( G_OBJECT (INKSCAPE), "activate_desktop",
372
376
G_CALLBACK (sp_transientize_callback), &wd);
374
gtk_signal_connect ( GTK_OBJECT (dlg), "event",
378
gtk_signal_connect ( GTK_OBJECT (dlg), "event",
375
379
GTK_SIGNAL_FUNC (sp_dialog_event_handler), dlg);
377
gtk_signal_connect ( GTK_OBJECT (dlg), "destroy",
381
gtk_signal_connect ( GTK_OBJECT (dlg), "destroy",
378
382
G_CALLBACK (sp_export_dialog_destroy), dlg);
380
gtk_signal_connect ( GTK_OBJECT (dlg), "delete_event",
381
G_CALLBACK (sp_export_dialog_delete), dlg);
383
g_signal_connect ( G_OBJECT (INKSCAPE), "shut_down",
384
G_CALLBACK (sp_export_dialog_delete), dlg);
386
g_signal_connect ( G_OBJECT (INKSCAPE), "dialogs_hide",
384
gtk_signal_connect ( GTK_OBJECT (dlg), "delete_event",
385
G_CALLBACK (sp_export_dialog_delete), dlg);
387
g_signal_connect ( G_OBJECT (INKSCAPE), "shut_down",
388
G_CALLBACK (sp_export_dialog_delete), dlg);
390
g_signal_connect ( G_OBJECT (INKSCAPE), "dialogs_hide",
387
391
G_CALLBACK (sp_dialog_hide), dlg);
389
g_signal_connect ( G_OBJECT (INKSCAPE), "dialogs_unhide",
393
g_signal_connect ( G_OBJECT (INKSCAPE), "dialogs_unhide",
390
394
G_CALLBACK (sp_dialog_unhide), dlg);
392
396
GtkTooltips *tt = gtk_tooltips_new();
394
vb = gtk_vbox_new (FALSE, 4);
395
gtk_container_set_border_width (GTK_CONTAINER (vb), 0);
396
gtk_container_add (GTK_CONTAINER (dlg), vb);
398
vb = new Gtk::VBox(false, 3);
399
vb->set_border_width(3);
400
gtk_container_add (GTK_CONTAINER (dlg), GTK_WIDGET(vb->gobj()));
398
402
/* Export area frame */
400
GtkWidget *f = sp_export_dialog_area_frame(dlg);
401
gtk_box_pack_start (GTK_BOX (vb), f, FALSE, FALSE, 0);
404
Gtk::VBox *area_box = sp_export_dialog_area_box(dlg);
405
area_box->set_border_width(3);
406
vb->pack_start(*area_box, false, false, 0);
404
409
/* Bitmap size frame */
406
GtkWidget *f = gtk_frame_new (_("Bitmap size"));
407
gtk_box_pack_start (GTK_BOX (vb), f, FALSE, FALSE, 0);
408
GtkWidget *t = gtk_table_new (2, 5, FALSE);
409
gtk_table_set_row_spacings (GTK_TABLE (t), 4);
410
gtk_table_set_col_spacings (GTK_TABLE (t), 4);
411
gtk_container_set_border_width (GTK_CONTAINER (t), 4);
412
gtk_container_add (GTK_CONTAINER (f), t);
411
Gtk::VBox *size_box = new Gtk::VBox(false, 3);
412
size_box->set_border_width(3);
414
Gtk::Label* lbl = new Gtk::Label(_("<big><b>Bitmap size</b></big>"), Gtk::ALIGN_LEFT);
415
lbl->set_use_markup(true);
416
size_box->pack_start(*lbl, false, false, 0);
419
const bool homogeneous = false;
420
Gtk::Table *t = new Gtk::Table(rows, cols, homogeneous);
421
t->set_row_spacings (4);
422
t->set_col_spacings (4);
423
size_box->pack_start(*t);
414
425
sp_export_spinbutton_new ( "bmwidth", 16.0, 1.0, 1000000.0, 1.0, 10.0,
426
NULL, GTK_WIDGET(t->gobj()), 0, 0,
416
427
_("_Width:"), _("pixels at"), 0, 1,
418
429
(sp_export_bitmap_width_value_changed),
488
507
extension_point[0] = '\0';
490
509
final_name = g_strconcat(uri_copy, ".png", NULL);
491
gtk_entry_set_text (GTK_ENTRY (fe), final_name);
510
fe->set_text(final_name);
493
512
g_free(final_name);
494
513
g_free(uri_copy);
497
516
name = g_strconcat(uri, ".png", NULL);
498
gtk_entry_set_text (GTK_ENTRY (fe), name);
502
doc_export_name = g_strdup(gtk_entry_get_text(GTK_ENTRY(fe)));
521
doc_export_name = g_strdup(fe->get_text().c_str());
504
g_signal_connect ( G_OBJECT (fe), "changed",
523
g_signal_connect ( G_OBJECT (fe->gobj()), "changed",
505
524
G_CALLBACK (sp_export_filename_modified), dlg);
507
hb = gtk_hbox_new (FALSE, 5);
508
gtk_container_add (GTK_CONTAINER (frame), hb);
509
gtk_container_set_border_width (GTK_CONTAINER (hb), 4);
526
hb = new Gtk::HBox(FALSE, 5);
512
GtkWidget *b = gtk_button_new_with_mnemonic (_("_Browse..."));
513
gtk_box_pack_end (GTK_BOX (hb), b, FALSE, FALSE, 4);
514
g_signal_connect ( G_OBJECT (b), "clicked",
529
// true = has mnemonic
530
Gtk::Button *b = new Gtk::Button();
532
Gtk::HBox* pixlabel = new Gtk::HBox(false, 3);
533
Gtk::Image *im = new Gtk::Image(Gtk::StockID(Gtk::Stock::INDEX),
534
Gtk::ICON_SIZE_BUTTON);
535
pixlabel->pack_start(*im);
537
Gtk::Label *l = new Gtk::Label();
538
l->set_markup_with_mnemonic(_("_Browse..."));
539
pixlabel->pack_start(*l);
543
hb->pack_end (*b, false, false, 4);
544
g_signal_connect ( G_OBJECT (b->gobj()), "clicked",
515
545
G_CALLBACK (sp_export_browse_clicked), NULL );
518
gtk_box_pack_start (GTK_BOX (hb), fe, TRUE, TRUE, 0);
519
gtk_object_set_data (GTK_OBJECT (dlg), "filename", fe);
548
hb->pack_start (*fe, true, true, 0);
550
gtk_object_set_data (GTK_OBJECT (dlg), "filename", fe->gobj());
520
551
gtk_object_set_data (GTK_OBJECT (dlg), "filename-modified", (gpointer)FALSE);
521
original_name = g_strdup(gtk_entry_get_text (GTK_ENTRY (fe)));
552
original_name = g_strdup(fe->get_text().c_str());
522
553
// pressing enter in the filename field is the same as clicking export:
523
g_signal_connect ( G_OBJECT (fe), "activate",
554
g_signal_connect ( G_OBJECT (fe->gobj()), "activate",
524
555
G_CALLBACK (sp_export_export_clicked), dlg );
525
556
// focus is in the filename initially:
526
gtk_widget_grab_focus (GTK_WIDGET (fe));
528
559
// mnemonic in frame label moves focus to filename:
529
gtk_label_set_mnemonic_widget (GTK_LABEL(flabel), fe);
560
flabel->set_mnemonic_widget(*fe);
562
vb->pack_start(*file_box);
533
hb = gtk_hbox_new (FALSE, 0);
534
gtk_box_pack_end (GTK_BOX (vb), hb, FALSE, FALSE, 0);
566
Gtk::HButtonBox* bb = new Gtk::HButtonBox(Gtk::BUTTONBOX_END);
567
bb->set_border_width(3);
537
GtkWidget *b = gtk_button_new ();
538
GtkWidget *l = gtk_label_new ("");
539
gtk_label_set_markup_with_mnemonic (GTK_LABEL(l), _(" <b>_Export</b> "));
540
gtk_container_add (GTK_CONTAINER(b), l);
541
gtk_tooltips_set_tip (tt, b, _("Export the bitmap file with these settings"), NULL);
542
gtk_signal_connect ( GTK_OBJECT (b), "clicked",
570
Gtk::Button *b = new Gtk::Button();
571
Gtk::HBox* image_label = new Gtk::HBox(false, 3);
572
Gtk::Image *im = new Gtk::Image(Gtk::StockID(Gtk::Stock::APPLY),
573
Gtk::ICON_SIZE_BUTTON);
574
image_label->pack_start(*im);
576
Gtk::Label *l = new Gtk::Label();
577
l->set_markup_with_mnemonic(_("_Export"));
578
image_label->pack_start(*l);
580
b->add(*image_label);
581
gtk_tooltips_set_tip (tt, GTK_WIDGET(b->gobj()), _("Export the bitmap file with these settings"), NULL);
582
gtk_signal_connect ( GTK_OBJECT (b->gobj()), "clicked",
543
583
GTK_SIGNAL_FUNC (sp_export_export_clicked), dlg );
544
gtk_box_pack_end (GTK_BOX (hb), b, FALSE, FALSE, 0);
584
bb->pack_end(*b, false, false, 0);
547
gtk_widget_show_all (vb);
587
vb->pack_end(*bb, false, false, 0);
549
590
} // end of if (!dlg)
551
592
sp_export_find_default_selection(dlg);
553
594
gtk_window_present ((GtkWindow *) dlg);
556
597
} // end of sp_export_dialog()
1147
1200
filename = homedir_path(NULL);
1150
gtk_file_selection_set_filename (GTK_FILE_SELECTION (fs), filename);
1152
g_signal_connect ( GTK_OBJECT (GTK_FILE_SELECTION (fs)->ok_button),
1154
G_CALLBACK (sp_export_browse_store),
1157
g_signal_connect_swapped ( GTK_OBJECT (GTK_FILE_SELECTION (fs)->ok_button),
1159
G_CALLBACK (gtk_widget_destroy),
1162
g_signal_connect_swapped ( GTK_OBJECT
1163
(GTK_FILE_SELECTION (fs)->cancel_button),
1165
G_CALLBACK (gtk_widget_destroy),
1168
gtk_widget_show (fs);
1203
gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (fs), filename);
1205
if (gtk_dialog_run (GTK_DIALOG (fs)) == GTK_RESPONSE_ACCEPT)
1209
file = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (fs));
1210
gchar * utf8file = g_filename_to_utf8( file, -1, NULL, NULL, NULL );
1211
gtk_entry_set_text (GTK_ENTRY (fe), utf8file);
1214
g_object_set_data (G_OBJECT (dlg), "filename", fe);
1218
gtk_widget_destroy (fs);
1171
1221
} // end of sp_export_browse_clicked()
1173
/// Called when OK clicked in file dialog
1175
sp_export_browse_store (GtkButton *button, gpointer userdata)
1177
GtkWidget *fs = (GtkWidget *)userdata, *fe;
1180
fe = (GtkWidget *)g_object_get_data (G_OBJECT (dlg), "filename");
1182
file = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
1183
gchar * utf8file = g_filename_to_utf8( file, -1, NULL, NULL, NULL );
1184
gtk_entry_set_text (GTK_ENTRY (fe), utf8file);
1187
g_object_set_data (G_OBJECT (dlg), "filename", fe);
1190
} // end of sp_export_browse_store()
1223
// TODO: Move this to nr-rect-fns.h.
1193
sp_export_bbox_equal(NR::Rect &one, NR::Rect &two)
1225
sp_export_bbox_equal(NR::Rect const &one, NR::Rect const &two)
1195
// FIXME: make this an NR::Rect method
1196
double epsilon = 1.0 / pow (10, EXPORT_COORD_PRECISION);
1227
double const epsilon = pow(10.0, -EXPORT_COORD_PRECISION);
1198
1229
(fabs(one.min()[NR::X] - two.min()[NR::X]) < epsilon) &&
1199
1230
(fabs(one.min()[NR::Y] - two.min()[NR::Y]) < epsilon) &&