Mercurial > projects > doodle
view doodle/gtk/palette.d @ 54:30ecedfe2ce2
Partial palette support
author | "David Bryant <bagnose@gmail.com>" |
---|---|
date | Sun, 08 Aug 2010 21:07:47 +0930 |
parents | 4dadc3c03b7e |
children | 4922e746dd76 |
line wrap: on
line source
module doodle.gtk.palette; public { import doodle.tk.palette; import gtk.Toolbar; } private { import doodle.core.logging; import gtk.ToolButton; import gtk.RadioToolButton; import gtk.Image; import glib.ListSG; import std.stdio; } class Palette : Toolbar, IPalette { this() { setIconSize(GtkIconSize.LARGE_TOOLBAR); setStyle(GtkToolbarStyle.ICONS); setOrientation(GtkOrientation.HORIZONTAL); setTooltips(true); } override void configure(in Item[] items) { _items = items.dup; ListSG group; foreach(index, item; _items) { auto button = new RadioToolButton(group); if (index == 0) group = button.getGroup; auto image = new Image(_iconBase ~ "/" ~ item.iconPath); button.setLabelWidget(image); button.setTooltipText(item.tooltipText); int * i = new int; *i = index; button.objectGSetDataFull(_indexStr, cast(gpointer)i); button.addOnClicked(&onClicked); insert(button); } } override void activate(in int index) { warning("Not yet implemented"); } private { immutable _iconBase = "/home/daveb/source/d/doodle/doodle/gtk/data"; immutable _indexStr = "index"; Item[] _items; void onClicked(ToolButton toolButton) { RadioToolButton button = cast(RadioToolButton)toolButton; if (button.getActive) { int * i = cast(int *)button.getData(_indexStr); _items[*i].callback(*i); } } } }