Mercurial > repos > IBBoard.GtkSharp
view Translatable/ControlTranslator.cs @ 33:70c46caee508
* Resolve conflicts between System.Action and Gtk.Action
no-open-ticket
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sun, 13 Feb 2011 16:18:09 +0000 |
parents | bcb437c04685 |
children | f04e973e5ea0 |
line wrap: on
line source
// This file (ControlTranslator.cs) is a part of the IBBoard.GtkSharp project and is copyright 2010 IBBoard // // // The file and the library/program it is in are licensed and distributed, without warranty, under the GNU LGPL license, either version 3 of the License or (at your option) any later version. Please see COPYING for more information and the full license. using Gtk; using IBBoard.Lang; namespace IBBoard.GtkSharp.Translatable { /// <summary> /// A custom cascading translator. It takes any widget type and translates them if they implement <see>ITranslatable</see> /// and optionally cascades the process to translate all children. /// </summary> public class ControlTranslator { public static void TranslateWidget(Widget toTranslate) { TranslateWidget(toTranslate, true); } public static void TranslateWidget(Widget toTranslate, bool cascade) { if (toTranslate is ITranslatable) { Translation.Translate((ITranslatable)toTranslate); } else if (toTranslate is MenuItem || toTranslate is ToolButton) { TranslateWidgetWithAction((Widget)toTranslate); } if (cascade && toTranslate is Container) { CascadeTranslations((Container)toTranslate, cascade); } } private static void TranslateWidgetWithAction(Widget widget) { Action action = widget.Action; string translation = Translation.GetTranslation(widget.Name, ""); if (translation == "") { widget.TooltipText = translation; } else if (action != null) { widget.TooltipText = action.Label; } } private static void CascadeTranslations(Container container, bool cascade) { if (container is ITranslatableWithActions) { TranslateActions((ITranslatableWithActions)container); } foreach (Widget childWidget in container.AllChildren) { TranslateWidget(childWidget, cascade); } } private static void TranslateActions(ITranslatableWithActions actionContainer) { foreach (Action action in actionContainer.Actions) { TranslateAction(action); } } private static void TranslateAction(Gtk.Action action) { action.Label = Translation.GetTranslation(action.Name, action.Label); } public static void TranslateButtons(params Button[] buttons) { foreach (Button button in buttons) { TranslateButton(button); } } public static void TranslateButton(Button button) { Widget image = button.Image; button.Label = Translation.GetTranslation(button.Name, button.Label); button.Image = image; } } }