68
68
protected Gtk.Widget progress_page {get; private set;}
70
70
protected Gtk.Label summary_label;
71
Gtk.Widget error_widget;
72
Gtk.TextView error_text_view;
71
protected Gtk.Widget detail_widget;
72
Gtk.TextView detail_text_view;
73
73
protected Gtk.Widget summary_page {get; private set;}
75
75
protected Gdk.Pixbuf op_icon {get; private set;}
270
void show_detail(string detail)
272
page_box.set_size_request(300, 200);
273
detail_widget.no_show_all = false;
274
detail_widget.show_all();
275
detail_text_view.buffer.set_text(detail, -1);
270
278
public virtual void show_error(string error, string? detail)
272
280
error_occurred = true;
274
282
summary_label.label = error;
275
summary_label.wrap = true;
276
283
summary_label.selectable = true;
277
summary_label.max_width_chars = 25;
279
if (detail != null) {
280
page_box.set_size_request(300, 200);
281
error_widget.no_show_all = false;
282
error_widget.show_all();
283
error_text_view.buffer.set_text(detail, -1);
286
288
go_to_page(summary_page);
287
289
set_header_icon(Gtk.Stock.DIALOG_ERROR);
409
411
summary_label = new Gtk.Label("");
410
412
summary_label.set("xalign", 0.0f);
413
summary_label.wrap = true;
414
summary_label.max_width_chars = 25;
412
error_text_view = new Gtk.TextView();
413
error_text_view.editable = false;
414
error_text_view.wrap_mode = Gtk.WrapMode.WORD;
415
error_text_view.height_request = 150;
416
detail_text_view = new Gtk.TextView();
417
detail_text_view.editable = false;
418
detail_text_view.wrap_mode = Gtk.WrapMode.WORD;
419
detail_text_view.height_request = 150;
417
421
var scroll = new Gtk.ScrolledWindow(null, null);
418
scroll.add(error_text_view);
422
scroll.add(detail_text_view);
419
423
scroll.no_show_all = true; // only will be shown if an error occurs
420
error_widget = scroll;
424
detail_widget = scroll;
422
426
var page = new Gtk.Box(Gtk.Orientation.VERTICAL, 6);
423
427
page.set("child", summary_label,
424
"child", error_widget,
428
"child", detail_widget,
425
429
"border-width", 12);
426
430
page.child_set(summary_label, "expand", false);
427
page.child_set(error_widget, "expand", true);
431
page.child_set(detail_widget, "expand", true);
472
476
summary_page = page;
475
protected virtual void apply_finished(DejaDup.Operation op, bool success, bool cancelled)
479
protected virtual void apply_finished(DejaDup.Operation op, bool success, bool cancelled, string? detail)
477
481
if (status_icon != null) {
478
status_icon.done(success, cancelled);
482
status_icon.done(success, cancelled, detail);
479
483
status_icon = null;
491
495
succeeded = true;
497
if (detail != null) {
498
// Expect one paragraph followed by a blank line. The first paragraph
499
// is an explanation before the full detail content. So split it out
500
// into a proper label to look nice.
501
var halves = detail.split("\n\n", 2);
502
if (halves.length == 1) // no full detail content
503
summary_label.label = detail;
504
else if (halves.length == 2) {
505
summary_label.label = halves[0];
506
show_detail(halves[1]);
492
510
go_to_page(summary_page);
494
512
else // show error
581
599
if (status_icon != null) {
582
status_icon.done(false, true);
600
status_icon.done(false, true, null);
583
601
status_icon = null; // hide immediately to seem responsive