~iwarford/do-plugins/fart-plugin-fwiw

« back to all changes in this revision

Viewing changes to Translate/src/UI/ConfigUI.cs

  • Committer: Jason Jones
  • Date: 2008-12-24 04:45:02 UTC
  • mfrom: (335.1.9 do-plugins)
  • Revision ID: jasonedwardjones@gmail.com-20081224044502-ra56ym06cp1iqs7t
MergedĀ fromĀ trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// ConfigUI.cs
 
2
// 
 
3
// Copyright (C) 2008 Chris Szikszoy
 
4
//
 
5
// This program is free software: you can redistribute it and/or modify
 
6
// it under the terms of the GNU General Public License as published by
 
7
// the Free Software Foundation, either version 3 of the License, or
 
8
// (at your option) any later version.
 
9
//
 
10
// This program is distributed in the hope that it will be useful,
 
11
// but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
13
// GNU General Public License for more details.
 
14
//
 
15
// You should have received a copy of the GNU General Public License
 
16
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
17
//
 
18
 
 
19
using System;
 
20
using System.Linq;
 
21
using System.Reflection;
 
22
using System.Collections.Generic;
 
23
using System.Threading;
 
24
using Do.Platform;
 
25
 
 
26
using Mono.Unix;
 
27
 
 
28
namespace Translate
 
29
{
 
30
        
 
31
        public partial class ConfigUI : Gtk.Bin
 
32
        {
 
33
                static IPreferences TranslatePluginPrefs;
 
34
                
 
35
                public ConfigUI()
 
36
                {
 
37
                        this.Build();
 
38
                        SetupColumns();
 
39
                        FillProviderCmb();      
 
40
                }
 
41
                static ConfigUI()
 
42
                {
 
43
                        TranslatePluginPrefs = Services.Preferences.Get<Translate.ConfigUI> ();
 
44
                }
 
45
                
 
46
                public void SetupColumns()
 
47
                {               
 
48
                        //setup columns
 
49
                        Gtk.TreeViewColumn FlagCol = new Gtk.TreeViewColumn();
 
50
                        Gtk.CellRendererPixbuf pixbuf = new Gtk.CellRendererPixbuf ();  
 
51
                        FlagCol.PackStart(pixbuf, false);
 
52
                        treeEnableLang.AppendColumn(FlagCol);
 
53
                        FlagCol.AddAttribute(pixbuf, "pixbuf", 0);
 
54
                        
 
55
                        Gtk.TreeViewColumn LanguageCol = new Gtk.TreeViewColumn();
 
56
                        Gtk.CellRendererText text = new Gtk.CellRendererText();
 
57
                        LanguageCol.PackStart(text, true);
 
58
                        treeEnableLang.AppendColumn(LanguageCol);
 
59
                        LanguageCol.AddAttribute(text, "text", 1);
 
60
                        
 
61
                        Gtk.TreeViewColumn IsEnabled = new Gtk.TreeViewColumn();
 
62
                        Gtk.CellRendererToggle EnabledToggle = new Gtk.CellRendererToggle();
 
63
                        EnabledToggle.Activatable = true;
 
64
                        EnabledToggle.Toggled += CheckEnable;
 
65
                        IsEnabled.PackStart(EnabledToggle, false);
 
66
                        treeEnableLang.AppendColumn(IsEnabled);
 
67
                        IsEnabled.AddAttribute(EnabledToggle, "active", 2);
 
68
                        
 
69
                        //add a dummy column to fill the rest
 
70
                        Gtk.TreeViewColumn DummyCol = new Gtk.TreeViewColumn();
 
71
                        Gtk.CellRendererText DummyText = new Gtk.CellRendererText();
 
72
                        DummyCol.PackStart(DummyText, true);
 
73
                        treeEnableLang.AppendColumn(DummyCol);
 
74
                        DummyCol.AddAttribute(DummyText, "text", 3);
 
75
                }
 
76
                public void FillProviderCmb()
 
77
                {               
 
78
                        cmbProvider.Clear();
 
79
                        
 
80
                Gtk.CellRendererText cell = new Gtk.CellRendererText();
 
81
                        Gtk.CellRendererPixbuf pixbuf = new Gtk.CellRendererPixbuf ();
 
82
                        cmbProvider.PackStart(pixbuf, true);
 
83
                        cmbProvider.PackStart(cell, true);
 
84
                        cmbProvider.AddAttribute(pixbuf, "pixbuf" , 0);
 
85
                cmbProvider.AddAttribute(cell, "text", 1);      
 
86
                        
 
87
                        Gtk.ListStore ProvidersList = new Gtk.ListStore(typeof (Gdk.Pixbuf), typeof (string));
 
88
                        
 
89
                        // Get an instance of each pastebin provider in this assembly.
 
90
                        var providers = from type in Assembly.GetExecutingAssembly().GetTypes()
 
91
                                        where type.GetInterface("Translate.ITranslateProvider") != null
 
92
                                        select Activator.CreateInstance(type);
 
93
                        
 
94
                        Gdk.Pixbuf pb = null;
 
95
                        string[] Icon = null;
 
96
                        foreach (ITranslateProvider provider in providers)
 
97
                        {
 
98
                                Icon = provider.Icon.Split(new char[] {'@'});
 
99
                                using (Gdk.Pixbuf temp = Gdk.Pixbuf.LoadFromResource(Icon[0]))
 
100
                                {
 
101
                                        pb = temp.ScaleSimple((20 * temp.Width)/temp.Height, 20, Gdk.InterpType.Bilinear);
 
102
                                }                   
 
103
                        ProvidersList.AppendValues (pb, provider.Name);
 
104
                        }
 
105
                        cmbProvider.Model = ProvidersList;
 
106
                        //set selection to what's in GConf, if we can
 
107
                        Gtk.TreeIter ti;
 
108
                        if (SearchCombobox(out ti, cmbProvider, SelectedProvider,1))
 
109
                                cmbProvider.SetActiveIter(ti);
 
110
                }
 
111
                
 
112
                public void FillSourceCmb(ITranslateProvider Translator)
 
113
                {
 
114
                        cmbDefaultSource.Clear();
 
115
                        
 
116
                Gtk.CellRendererText cell = new Gtk.CellRendererText();
 
117
                        Gtk.CellRendererPixbuf pixbuf = new Gtk.CellRendererPixbuf ();
 
118
                        cmbDefaultSource.PackStart(pixbuf, true);
 
119
                        cmbDefaultSource.PackStart(cell, true);
 
120
                        cmbDefaultSource.AddAttribute(pixbuf, "pixbuf" , 0);
 
121
                cmbDefaultSource.AddAttribute(cell, "text", 1); 
 
122
                        
 
123
                        
 
124
                        Gtk.ListStore SourceList = new Gtk.ListStore(typeof (Gdk.Pixbuf), typeof (string), typeof (string));
 
125
 
 
126
                        Gdk.Pixbuf LanguageFlag = null;
 
127
                        const int scale_height = 20;
 
128
                        string[] Icon = null;
 
129
                        if (Translator.SupportsAutoDetect)
 
130
                                SourceList.AppendValues(null, Catalog.GetString("Auto Detect (Recommended)"), Translator.AutoDetectCode);
 
131
                        foreach (LanguageItem Lang in Translator.SupportedLanguages)
 
132
                        {
 
133
                                Icon = Lang.Icon.Split(new char[] {'@'});
 
134
                                using (Gdk.Pixbuf temp = Gdk.Pixbuf.LoadFromResource(Icon[0]))
 
135
                                {
 
136
                                        LanguageFlag = temp.ScaleSimple((scale_height * temp.Width) / temp.Height, scale_height, Gdk.InterpType.Bilinear);
 
137
                                }
 
138
                                SourceList.AppendValues(LanguageFlag, Lang.Name, Lang.Code);
 
139
                        }
 
140
 
 
141
                        cmbDefaultSource.Model = SourceList;
 
142
                        //set default source to auto if it's enabled, else try what's in gconf, else, just the first in the list
 
143
                        Gtk.TreeIter ti;
 
144
                        if ((Translator.SupportsAutoDetect) && (SearchCombobox(out ti, cmbDefaultSource, Translator.AutoDetectCode, 2)))
 
145
                                cmbDefaultSource.SetActiveIter(ti);
 
146
                        else if (SearchCombobox(out ti, cmbDefaultSource, SelectedSourceLang, 2))
 
147
                                cmbDefaultSource.SetActiveIter(ti);
 
148
                        else
 
149
                        {
 
150
                                cmbDefaultSource.Model.GetIterFirst(out ti);
 
151
                                cmbDefaultSource.SetActiveIter(ti);
 
152
                        }
 
153
                }
 
154
                
 
155
                private void FillIfaceCmb(ITranslateProvider Translator)
 
156
                {
 
157
                        cmbDefaultIface.Clear();
 
158
                        
 
159
                Gtk.CellRendererText cell = new Gtk.CellRendererText();
 
160
                        Gtk.CellRendererPixbuf pixbuf = new Gtk.CellRendererPixbuf ();
 
161
                        cmbDefaultIface.PackStart(pixbuf, true);
 
162
                        cmbDefaultIface.PackStart(cell, true);
 
163
                        cmbDefaultIface.AddAttribute(pixbuf, "pixbuf" , 0);
 
164
                cmbDefaultIface.AddAttribute(cell, "text", 1);  
 
165
                        
 
166
                        Gtk.ListStore IfaceList = new Gtk.ListStore(typeof (Gdk.Pixbuf), typeof (string), typeof (string));
 
167
 
 
168
                        Gdk.Pixbuf LanguageFlag = null;
 
169
                        const int scale_height = 20;
 
170
                        string[] Icon = null;
 
171
                        foreach (LanguageItem Lang in Translator.SupportedLanguages)
 
172
                        {
 
173
                                Icon = Lang.Icon.Split(new char[] {'@'});
 
174
                                using (Gdk.Pixbuf temp = Gdk.Pixbuf.LoadFromResource(Icon[0]))
 
175
                                {
 
176
                                        LanguageFlag = temp.ScaleSimple((scale_height * temp.Width) / temp.Height, scale_height, Gdk.InterpType.Bilinear);
 
177
                                }
 
178
                                IfaceList.AppendValues(LanguageFlag, Lang.Name, Lang.Code);
 
179
                        }
 
180
 
 
181
                        cmbDefaultIface.Model = IfaceList;
 
182
                        //set selection to what's in GConf, if we can
 
183
                        Gtk.TreeIter ti;
 
184
                        if (SearchCombobox(out ti, cmbDefaultIface, SelectedIfaceLang, 2))
 
185
                                cmbDefaultIface.SetActiveIter(ti);
 
186
                        else
 
187
                        {
 
188
                                cmbDefaultIface.Model.GetIterFirst(out ti);
 
189
                                cmbDefaultIface.SetActiveIter(ti);
 
190
                        }
 
191
                }
 
192
                
 
193
                private void FillEnableBox(ITranslateProvider Translator)
 
194
                {
 
195
                        Gtk.ListStore LanguageList = new Gtk.ListStore(typeof (Gdk.Pixbuf), typeof (string), typeof (bool), typeof (string), typeof (LanguageNode));
 
196
                        const int scale_height = 25;
 
197
                        Gdk.Pixbuf LanguageFlag = null;
 
198
                        string[] Icon = null;
 
199
                        LanguageNode LanguageTreeNode = null;
 
200
 
 
201
                        foreach (LanguageItem Lang in Translator.SupportedLanguages)
 
202
                        {
 
203
                                Icon = Lang.Icon.Split(new char[] {'@'});
 
204
                                using (Gdk.Pixbuf temp = Gdk.Pixbuf.LoadFromResource(Icon[0]))
 
205
                                {
 
206
                                        LanguageFlag = temp.ScaleSimple((scale_height * temp.Width) / temp.Height, scale_height, Gdk.InterpType.Bilinear);
 
207
                                }
 
208
                                LanguageTreeNode = new LanguageNode(LanguageFlag, Lang.Name, Lang.Code);
 
209
                                LanguageList.AppendValues(LanguageTreeNode.Icon, LanguageTreeNode.Name, LanguageTreeNode.IsEnabled, string.Empty, LanguageTreeNode);
 
210
                        }
 
211
 
 
212
                        treeEnableLang.HeadersVisible = false;
 
213
                        treeEnableLang.Model = LanguageList;
 
214
                }
 
215
                
 
216
                private void CheckEnable(object sender, Gtk.ToggledArgs e)
 
217
                {
 
218
                        Gtk.TreeIter iter;
 
219
                        Gtk.TreeModel model = treeEnableLang.Model;
 
220
                        
 
221
                        if(model.GetIter(out iter, new Gtk.TreePath(e.Path))) 
 
222
                        {
 
223
                                LanguageNode SelectedLanguage = (LanguageNode)model.GetValue(iter, 4);
 
224
                                if (SelectedLanguage.Name != "Auto Detect Language")
 
225
                                {
 
226
                                        bool currentState = SelectedLanguage.IsEnabled;
 
227
                                        SelectedLanguage.IsEnabled = !currentState;
 
228
                                        model.SetValue(iter, 2, SelectedLanguage.IsEnabled);
 
229
                                }
 
230
                        }
 
231
                }
 
232
 
 
233
                public bool SearchCombobox(out Gtk.TreeIter ti, Gtk.ComboBox box, string val, int col)
 
234
                {
 
235
                        box.Model.GetIterFirst(out ti);
 
236
                        do 
 
237
                        {
 
238
                                if ((string)box.Model.GetValue(ti,col) == val)
 
239
                                        return true;
 
240
                        } while (box.Model.IterNext(ref ti));
 
241
                        //haven't found it
 
242
                        return false;
 
243
                }
 
244
 
 
245
                protected virtual void ProviderSelectionChanged (object sender, System.EventArgs e)
 
246
                {
 
247
                        Gtk.ComboBox ProviderBox = (Gtk.ComboBox)sender;
 
248
                        Gtk.TreeIter ti;
 
249
                        ProviderBox.GetActiveIter(out ti);
 
250
                        SelectedProvider = (string)ProviderBox.Model.GetValue(ti,1);
 
251
                        ITranslateProvider Translator = TranslateProviderFactory.GetProviderFromPreferences();
 
252
                        
 
253
                        //fill boxes
 
254
                        FillSourceCmb(Translator);
 
255
                        if (Translator.SupportsIfaceLang)
 
256
                                FillIfaceCmb(Translator);
 
257
                        else
 
258
                        {
 
259
                                cmbDefaultIface.Clear();
 
260
                                cmbDefaultIface.Model = null;
 
261
                        }
 
262
                        FillEnableBox(Translator);
 
263
                        
 
264
                }
 
265
 
 
266
                protected virtual void SourceSelectionChanged (object sender, System.EventArgs e)
 
267
                {
 
268
                        Gtk.ComboBox SourceBox = (Gtk.ComboBox)sender;
 
269
                        Gtk.TreeIter ti;
 
270
                        SourceBox.GetActiveIter(out ti);
 
271
                        //column 2 holds the language "code"
 
272
                        SelectedSourceLang = (string)SourceBox.Model.GetValue(ti,2);
 
273
                }
 
274
 
 
275
                protected virtual void IfaceSelectionChanged (object sender, System.EventArgs e)
 
276
                {
 
277
                        Gtk.ComboBox IfaceBox = (Gtk.ComboBox)sender;
 
278
                        Gtk.TreeIter ti;
 
279
                        IfaceBox.GetActiveIter(out ti);
 
280
                        //column 2 holds the language "code"
 
281
                        SelectedIfaceLang = (string)IfaceBox.Model.GetValue(ti,2);
 
282
                }
 
283
                
 
284
                public static string SelectedProvider 
 
285
                {
 
286
                        get 
 
287
                        { 
 
288
                                ITranslateProvider DefaultProvider = new Google();
 
289
                                return TranslatePluginPrefs.Get<string> ("SelectedProvider", DefaultProvider.Name);
 
290
                        }
 
291
                        set { TranslatePluginPrefs.Set<string> ("SelectedProvider", value); }
 
292
                }
 
293
                public static string SelectedSourceLang {
 
294
                        get 
 
295
                        { 
 
296
                                ITranslateProvider Translator = TranslateProviderFactory.GetProviderFromPreferences();                          
 
297
                                return TranslatePluginPrefs.Get<string> ("SelectedSourceLanguage", Translator.DefaultSourceCode); 
 
298
                        }
 
299
                        set { TranslatePluginPrefs.Set<string> ("SelectedSourceLanguage", value); }
 
300
                }
 
301
                public static string SelectedIfaceLang {
 
302
                        get 
 
303
                        { 
 
304
                                ITranslateProvider Translator = TranslateProviderFactory.GetProviderFromPreferences();
 
305
                                return TranslatePluginPrefs.Get<string> ("SelectedIfaceLanguage", Translator.DefaultIfaceCode); 
 
306
                        }
 
307
                        set { TranslatePluginPrefs.Set<string> ("SelectedIfaceLanguage", value); }
 
308
                }
 
309
        }
 
310
}