Clone in a terminal:
OverwriteDialog.vala
/*
	Copyright (C) 2015 Johan Mattsson

	This library is free software; you can redistribute it and/or modify 
	it under the terms of the GNU Lesser General Public License as 
	published by the Free Software Foundation; either version 3 of the 
	License, or (at your option) any later version.

	This library is distributed in the hope that it will be useful, but 
	WITHOUT ANY WARRANTY; without even the implied warranty of 
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 
	Lesser General Public License for more details.
*/

using Cairo;

namespace BirdFont {

public class OverwriteDialog : Dialog {
	
	OverWriteDialogListener listener;
	
	Text question;
	Button overwrite_button;
	Button cancel_button;
	Button dont_ask_again_button;
	
	double width = 0;
	double height;
	
	const double question_font_size = 23;
	
	public OverwriteDialog (OverWriteDialogListener callbacks) {
		double font_size = question_font_size;
		
		listener = callbacks;
		
		question = new Text (callbacks.message, font_size);
		
		overwrite_button = new Button (callbacks.message);
		overwrite_button.action.connect (() => {
			MainWindow.hide_dialog ();
			callbacks.overwrite ();
		});
		
		cancel_button = new Button (callbacks.cancel_message);
		cancel_button.action.connect (() => {
			MainWindow.hide_dialog ();
			callbacks.cancel ();
		});
		
		dont_ask_again_button = new Button (callbacks.dont_ask_again_message);
		dont_ask_again_button.action.connect (() => {
			MainWindow.hide_dialog ();
			callbacks.overwrite_dont_ask_again ();
		});
		
		height = 90;
	}

	public override void layout () {
		double cx = 0;
		double cy = (allocation.height - height) / 2.0;
		double center;
		double qh;
			
		cx = 20;
		overwrite_button.widget_x = cx;

		cx += 10 + overwrite_button.get_width ();
		cancel_button.widget_x = cx;

		cx += 10 + cancel_button.get_width ();
		dont_ask_again_button.widget_x = cx;

		width = cx + 20 + dont_ask_again_button.get_width ();
		
		center = (allocation.width - width) / 2.0;
		
		question.widget_x = overwrite_button.widget_x + center;
		question.widget_y = cy + 15;
		Theme.text_color (question, "Text Tool Box");
		
		qh = (question_font_size + 1);
		
		overwrite_button.widget_x += center;
		overwrite_button.widget_y = cy + qh + 25;
		
		cancel_button.widget_x += center;
		cancel_button.widget_y = cy + qh + 25;
		
		dont_ask_again_button.widget_x += center;
		dont_ask_again_button.widget_y = cy + qh + 25;
	}

	public override void draw (Context cr) {	
		double cx, cy;
		
		layout ();

		cx = (allocation.width - width) / 2.0;
		cy = (allocation.height - height) / 2.0;
		
		cr.save ();
		Theme.color (cr, "Dialog Shadow");
		cr.rectangle (0, 0, allocation.width, allocation.height);
		cr.fill ();
		cr.restore ();
		
		cr.save ();
		Theme.color (cr, "Dialog Background");
		draw_rounded_rectangle (cr, cx, cy, width, height, 10);
		cr.fill ();
		cr.restore ();
		
		cr.save ();
		Theme.color (cr, "Button Border 4");
		cr.set_line_width (1);
		draw_rounded_rectangle (cr, cx, cy, width, height, 10);
		cr.stroke ();
		cr.restore ();

		question.draw (cr);
		overwrite_button.draw (cr);
		cancel_button.draw (cr);
		dont_ask_again_button.draw (cr);
	}

	public override void button_press (uint button, double x, double y) {
		overwrite_button.button_press (button, x, y);
		cancel_button.button_press (button, x, y);
		dont_ask_again_button.button_press (button, x, y);
	}

	public override void button_release (uint button, double x, double y) {
		overwrite_button.button_release (button, x, y);
		cancel_button.button_release (button, x, y);
		dont_ask_again_button.button_release (button, x, y);
	}
}

}

Contact

Email: johan.mattsson.m@gmail.com
Mastodon: typo.social/@birdfont
GitHub: johanmattssonm
LinkedIn: johan-mattsson-2ab324112