// This file (FrmPreferences.cs) is a part of the IBBoard.WarFoundry.GUI.GTK project and is copyright 2011 IBBoard // // The file and the library/program it is in are licensed and distributed, without warranty, under the GNU Affero GPL 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 System; using IBBoard.GtkSharp.Translatable; using IBBoard.Lang; using Gtk; using System.Collections.Generic; using IBBoard.GtkSharp; using System.Globalization; using log4net; namespace IBBoard.WarFoundry.GUI.GTK { public partial class FrmPreferences : TranslatableDialog { private ILog logger = LogManager.GetLogger(typeof(FrmPreferences)); private Preferences prefs; private string initialLang; public FrmPreferences(Preferences preferences) { prefs = preferences; initialLang = Translation.GetTranslationLanguage(); this.Build(); BuildPreferenceCategoryTree(); BuildLanguageList(); Translation.TranslationChanged += Retranslate; Translate(); } private void Retranslate() { Translate(); } public override void Dispose() { Translation.TranslationChanged -= Retranslate; base.Dispose(); } protected override void Translate() { base.Translate(); frameLabel.Text = Translation.GetTranslation("languagesGroup", "languages"); TreeStore model = ((TreeStore)preferencesTree.Model); TreeIter iter; model.GetIterFirst(out iter); model.SetValue(iter, 0, Translation.GetTranslation("languagePrefSection", "Language")); } private void RenderPreference(TreeViewColumn column, CellRenderer cell, TreeModel model, TreeIter iter) { object obj = model.GetValue(iter, 0); if (obj is string) { (cell as CellRendererText).Text = (string)obj; } } private void BuildPreferenceCategoryTree() { TreeViewColumn mainColumn = new TreeViewColumn(); CellRendererText mainCell = new CellRendererText(); mainColumn.PackStart(mainCell, true); preferencesTree.AppendColumn(mainColumn); mainColumn.SetCellDataFunc(mainCell, new TreeCellDataFunc(RenderPreference)); TreeStore model = new TreeStore(typeof(string)); preferencesTree.Model = model; model.AppendValues(Translation.GetTranslation("languagePrefSection", "Language")); } private void BuildLanguageList() { ICollection langs = Translation.GetLanguages(); List sortedLangs = new List(langs); sortedLangs.Sort(CompareLanguages); ComboBoxUtils.FillCombo(languageList, sortedLangs, delegate(TranslationLanguage lang){return lang.Name;}); ComboBoxUtils.SelectItem(languageList, Translation.GetTranslationSet(initialLang).Language); } private int CompareLanguages(TranslationLanguage lang1, TranslationLanguage lang2) { CompareOptions options = CompareOptions.IgnoreCase | CompareOptions.IgnoreKanaType | CompareOptions.IgnoreWidth; return CultureInfo.CurrentCulture.CompareInfo.Compare(lang1.Name, lang2.Name, options); } protected virtual void bttnOkayClicked(object sender, System.EventArgs e) { prefs["language"] = Translation.GetTranslationLanguage(); prefs.Save(); Respond(ResponseType.Ok); } protected virtual void bttnCancelClicked(object sender, System.EventArgs e) { Translation.LoadTranslation(initialLang); Respond(ResponseType.Cancel); } protected virtual void languageListChanged(object sender, System.EventArgs e) { TranslationLanguage selectedLang = ComboBoxUtils.GetSelectedItem(languageList); string code = selectedLang == null ? "" : selectedLang.Code; logger.Debug("New language: " + code); Translation.LoadTranslation(code); bttnOkay.Sensitive = !initialLang.Equals(code); } } }