view NotebookUtil.cs @ 6:49307b998555

Re #23: Add easy creation of "tab with close" * Fix spacing to make tab smaller (ugly hack that involves making GTK parse gtkrc properties)
author IBBoard <dev@ibboard.co.uk>
date Wed, 22 Jul 2009 20:58:19 +0000
parents 10df433db2ac
children d92d11bd4808
line wrap: on
line source

//  This file (NotebookUtil.cs) is a part of the IBBoard.Gtk project and is copyright 2009 IBBoard
// 
//  The file and the library/program it is in are licensed under the GNU LGPL license, either version 3 of the License or (at your option) any later version. Please see COPYING.LGPL for more information and the full license.
// 

using System;
using Gtk;

namespace IBBoard.GtkSharp
{
	public class NotebookUtil
	{
		/// <summary>
		/// Adds a page to a notebook, but also includes a close button in the tab. Returns the page number added
		/// </summary>
		/// <param name="notebook">
		/// The <see cref="Notebook"/> to add a page to
		/// </param>
		/// <param name="page">
		/// The <see cref="Widget"/> to use as the content of the page
		/// </param>
		/// <param name="title">
		/// The title of the tab
		/// </param>
		/// <returns>
		/// The page number created
		/// </returns>
		public static int AddPageToNotebookWithCloseButton(Notebook notebook, Widget page, string title)
		{
			HBox hbox = new HBox();
			hbox.PackStart(new Label(title));			
			Button close = new Button();
			Gtk.Rc.ParseString ("style \"NotebookTab.CloseButton\" {\n GtkButton::inner-border = {0,0,0,0}\n }\n");
			Gtk.Rc.ParseString ("widget \"*.NotebookTab.CloseButton\" style  \"NotebookTab.CloseButton\"\n");
			Image icon = Image.NewFromIconName("gtk-close", IconSize.Menu);
			icon.SetPadding(0, 0);
			close.Image = icon;
			close.Relief = ReliefStyle.None;
			close.FocusOnClick = false;
			close.BorderWidth = 0;
			close.Name = "NotebookTab.CloseButton";			
			close.Clicked += delegate {
			    hbox.Destroy();
			    page.Destroy();
			};
			hbox.PackStart(close);			
			hbox.ShowAll();			
			return notebook.AppendPage(page, hbox); 
		}
	}
}