Mercurial > repos > IBBoard.GtkSharp
view NotebookUtil.cs @ 30:c9e1ad81afbe
Re #26: Add GTK wrapper methods
* Make notebook tabs closable with middle-click
* Add extra util class with enumerations in - mouse buttons in events are just uint, not enumerated
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sat, 08 Jan 2011 16:37:41 +0000 |
parents | 0a466c011016 |
children | 50d774f164dd |
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) { return notebook.AppendPage(page, CreateNotebookTabLabelWithClose(notebook, page, title)); } /// <summary> /// Creates a widget to be used as the label for a notebook tab with text and a close button /// </summary> /// <param name="notebook"> /// The <see cref="Notebook"/> the page is on /// </param> /// <param name="page"> /// The <see cref="Widget"/> that is the content of the page /// </param> /// <param name="title"> /// The text to display on the tab /// </param> /// <returns> /// A <see cref="Widget"/> that can be used as a tab label that contains the label with the title text and a close button /// </returns> public static Widget CreateNotebookTabLabelWithClose(Notebook notebook, Widget page, String title) { EventBox eventBox = new EventBox(); HBox hbox = new HBox(); eventBox.Add(hbox); eventBox.ButtonPressEvent += delegate(object o, ButtonPressEventArgs args) { if (args.Event.Button == (uint)MouseButton.Middle) { notebook.Remove(page); } }; hbox.PackStart(new Label(title)); Button close = new Button(); Gtk.Rc.ParseString("style \"NotebookTab.CloseButton\" {\n GtkWidget::focus-padding = 0\n GtkWidget::focus-line-width = 0\n xthickness = 0\n ythickness = 0\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 { notebook.Remove(page); }; hbox.PackStart(close); hbox.ShowAll(); return eventBox; } } }