[gnome-subtitles] Allow to set the fallback encoding in the preferences



commit 8832ba95c3e327785c487b9e5fecf6eb876dc3f4
Author: Pedro Castro <mail>
Date:   Sun Jan 24 21:42:56 2010 +0000

    Allow to set the fallback encoding in the preferences

 data/gnome-subtitles.schemas                       |   44 +++++++++++++++-----
 src/Glade/PreferencesDialog.glade                  |    2 +-
 src/GnomeSubtitles/Core/Config.cs                  |   13 ++++++
 src/GnomeSubtitles/Core/Document.cs                |   16 +++++++-
 src/GnomeSubtitles/Dialog/PreferencesDialog.cs     |   33 +++++++++++++--
 .../Ui/Component/EncodingComboBox.cs               |    7 +++-
 6 files changed, 97 insertions(+), 18 deletions(-)
---
diff --git a/data/gnome-subtitles.schemas b/data/gnome-subtitles.schemas
index 2caf6b6..4cc62f4 100644
--- a/data/gnome-subtitles.schemas
+++ b/data/gnome-subtitles.schemas
@@ -14,17 +14,6 @@
 			</locale>
 		</schema>
 		<schema>
-			<key>/schemas/apps/gnome-subtitles/preferences/encodings/fallback</key>
-			<applyto>/apps/gnome-subtitles/preferences/encodings/fallback</applyto>
-			<owner>gnome-subtitles</owner>
-			<type>string</type>
-			<default>ISO-8859-15</default>
-			<locale name="C">
-				<short>Auto detection fallback encoding</short>
-				<long>Encoding to use when auto detection fails.</long>
-			</locale>
-		</schema>
-		<schema>
 			<key>/schemas/apps/gnome-subtitles/preferences/video/auto_choose_file</key>
 			<applyto>/apps/gnome-subtitles/preferences/video/auto_choose_file</applyto>
 			<owner>gnome-subtitles</owner>
@@ -112,5 +101,38 @@
 				<long>Encoding to use when opening files. Besides the actual encoding, used when "RememberLastUsed" or "Specific" are set in the file_open_encoding_option key, other possible values are "AutoDetect" and "CurrentLocale".</long>
 			</locale>
 		</schema>
+		<schema>
+			<key>/schemas/apps/gnome-subtitles/preferences/defaults/file_open_fallback</key>
+			<applyto>/apps/gnome-subtitles/preferences/defaults/file_open_fallback</applyto>
+			<owner>gnome-subtitles</owner>
+			<type>string</type>
+			<default>ISO-8859-15</default>
+			<locale name="C">
+				<short>Auto detection fallback encoding</short>
+				<long>Encoding to use when auto detection fails.</long>
+			</locale>
+		</schema>
+		<schema>
+			<key>/schemas/apps/gnome-subtitles/preferences/defaults/file_save_encoding_option</key>
+			<applyto>/apps/gnome-subtitles/preferences/defaults/file_save_encoding_option</applyto>
+			<owner>gnome-subtitles</owner>
+			<type>string</type>
+			<default>KeepExisting</default>
+			<locale name="C">
+				<short>File Save encoding option</short>
+				<long>Encoding option to use by default when saving files. Possible values are: "KeepExisting" to use the existing file's encoding, "RememberLastUsed" to remember the last used encoding, "CurrentLocale" to use the current locale, and "Specific" to use a specific encoding. The encoding for "RememberLastUsed" and "Specific" is stored in the file_save_encoding key.</long>
+			</locale>
+		</schema>
+		<schema>
+			<key>/schemas/apps/gnome-subtitles/preferences/defaults/file_save_encoding</key>
+			<applyto>/apps/gnome-subtitles/preferences/defaults/file_save_encoding</applyto>
+			<owner>gnome-subtitles</owner>
+			<type>string</type>
+			<default></default>
+			<locale name="C">
+				<short>File Save encoding</short>
+				<long>Encoding to use when saving files. Besides the actual encoding, used when "RememberLastUsed" or "Specific" are set in the file_save_encoding_option key, another possible value is "CurrentLocale".</long>
+			</locale>
+		</schema>
 	</schemalist>
 </gconfschemafile>
diff --git a/src/Glade/PreferencesDialog.glade b/src/Glade/PreferencesDialog.glade
index 7d7ce21..5a583f4 100644
--- a/src/Glade/PreferencesDialog.glade
+++ b/src/Glade/PreferencesDialog.glade
@@ -121,7 +121,7 @@
                               </packing>
                             </child>
                             <child>
-                              <widget class="GtkComboBox" id="combobox5">
+                              <widget class="GtkComboBox" id="fileOpenFallbackEncodingComboBox">
                                 <property name="visible">True</property>
                               </widget>
                               <packing>
diff --git a/src/GnomeSubtitles/Core/Config.cs b/src/GnomeSubtitles/Core/Config.cs
index b8e34b2..9284750 100644
--- a/src/GnomeSubtitles/Core/Config.cs
+++ b/src/GnomeSubtitles/Core/Config.cs
@@ -25,6 +25,7 @@ namespace GnomeSubtitles.Core {
 /* Enumerations */
 public enum ConfigFileOpenEncodingOption { AutoDetect = 0, RememberLastUsed = 1, CurrentLocale = 3, Specific = 4 }; //Values match ordering where the options are used
 public enum ConfigFileOpenEncoding { AutoDetect = 0, CurrentLocale = 2, Fixed = 3 };
+public enum ConfigFileOpenFallbackEncoding { CurrentLocale = 0, Fixed = 1 };
 public enum ConfigFileSaveEncodingOption { KeepExisting = 0, RememberLastUsed = 1, CurrentLocale = 3, Specific = 4 }; //Values match ordering where the options are used
 public enum ConfigFileSaveEncoding { KeepExisting = -1, CurrentLocale = 0, Fixed = 1 }; //KeepExisting=-1 because it doesn't appear
 
@@ -50,6 +51,7 @@ public class Config {
 	private const string keyPrefsWindowWidth = keyPrefsWindow + "width";
 	private const string keyPrefsDefaultsFileOpenEncodingOption = keyPrefsDefaults + "file_open_encoding_option";
 	private const string keyPrefsDefaultsFileOpenEncoding = keyPrefsDefaults + "file_open_encoding";
+	private const string keyPrefsDefaultsFileOpenFallbackEncoding = keyPrefsDefaults + "file_open_fallback";
 	private const string keyPrefsDefaultsFileSaveEncodingOption = keyPrefsDefaults + "file_save_encoding_option";
 	private const string keyPrefsDefaultsFileSaveEncoding = keyPrefsDefaults + "file_save_encoding";
 
@@ -113,6 +115,17 @@ public class Config {
 		set { Set(keyPrefsDefaultsFileOpenEncoding, value); }
 	}
 
+	public ConfigFileOpenFallbackEncoding PrefsDefaultsFileOpenFallbackEncoding {
+		get { return (ConfigFileOpenFallbackEncoding)GetEnumValueFromSuperset(keyPrefsDefaultsFileOpenFallbackEncoding, ConfigFileOpenFallbackEncoding.Fixed); }
+		set { Set(keyPrefsDefaultsFileOpenFallbackEncoding, value.ToString()); }
+	}
+
+	/* Uses the same key as PrefsDefaultsFileOpenFallbackEncoding but is used when there's a specific encoding set */
+	public string PrefsDefaultsFileOpenFallbackEncodingFixed {
+		get { return GetString(keyPrefsDefaultsFileOpenFallbackEncoding, "ISO-8859-15"); }
+		set { Set(keyPrefsDefaultsFileOpenFallbackEncoding, value); }
+	}
+
 	public ConfigFileSaveEncodingOption PrefsDefaultsFileSaveEncodingOption {
 		get { return (ConfigFileSaveEncodingOption)GetEnumValue(keyPrefsDefaultsFileSaveEncodingOption, ConfigFileSaveEncodingOption.KeepExisting); }
 		set { Set(keyPrefsDefaultsFileSaveEncodingOption, value.ToString()); }
diff --git a/src/GnomeSubtitles/Core/Document.cs b/src/GnomeSubtitles/Core/Document.cs
index 6fe1595..47fcd55 100644
--- a/src/GnomeSubtitles/Core/Document.cs
+++ b/src/GnomeSubtitles/Core/Document.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2009 Pedro Castro
+ * Copyright (C) 2006-2010 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -116,6 +116,7 @@ public class Document {
 		SubtitleFactory factory = new SubtitleFactory();
 		factory.Verbose = true;
 		factory.Encoding = encoding;
+		factory.FallbackEncoding = GetFallbackEncoding();
 
 		SubLib.Core.Domain.Subtitles openedTranslation = factory.Open(path);
 		FileProperties newTranslationFile = factory.FileProperties;
@@ -167,6 +168,7 @@ public class Document {
 		SubtitleFactory factory = new SubtitleFactory();
 		factory.Verbose = true;
 		factory.Encoding = encoding;
+		factory.FallbackEncoding = GetFallbackEncoding();
 
 		SubLib.Core.Domain.Subtitles openedSubtitles = null;
 		try {
@@ -220,6 +222,18 @@ public class Document {
 		if (extraCount > 0)
 			subtitles.AddExtra(extraCount);	
 	}
+
+	private Encoding GetFallbackEncoding () {
+		ConfigFileOpenFallbackEncoding fallbackEncodingConfig = Base.Config.PrefsDefaultsFileOpenFallbackEncoding;
+		if (fallbackEncodingConfig == ConfigFileOpenFallbackEncoding.CurrentLocale)
+			return Encoding.GetEncoding(Encodings.SystemDefault.CodePage);
+		else {
+			string encodingName = Base.Config.PrefsDefaultsFileOpenFallbackEncodingFixed;
+			EncodingDescription encodingDescription = EncodingDescription.Empty;
+			Encodings.Find(encodingName, ref encodingDescription);
+			return Encoding.GetEncoding(encodingDescription.CodePage);
+		}
+	}
 	
 	/* Event members */
 	
diff --git a/src/GnomeSubtitles/Dialog/PreferencesDialog.cs b/src/GnomeSubtitles/Dialog/PreferencesDialog.cs
index d43d48f..a69b4c6 100644
--- a/src/GnomeSubtitles/Dialog/PreferencesDialog.cs
+++ b/src/GnomeSubtitles/Dialog/PreferencesDialog.cs
@@ -33,13 +33,16 @@ public class PreferencesDialog : GladeDialog {
 
 	/* Components */
 	private EncodingComboBox fileOpenEncoding = null;
+	private EncodingComboBox fileOpenFallbackEncoding = null;
 	private EncodingComboBox fileSaveEncoding = null;
 
 	/* Widgets */
 	[WidgetAttribute] private CheckButton videoAutoChooseFileCheckButton = null;
 	[WidgetAttribute] private ComboBox fileOpenEncodingComboBox = null;
+	[WidgetAttribute] private ComboBox fileOpenFallbackEncodingComboBox = null;
 	[WidgetAttribute] private ComboBox fileSaveEncodingComboBox = null;
 
+
 	public PreferencesDialog () : base(gladeFilename, false) {
 		LoadValues();
 		Autoconnect();
@@ -49,14 +52,11 @@ public class PreferencesDialog : GladeDialog {
 	
 	private void LoadValues () {
 		SetDefaultsFileOpenEncoding();
+		SetDefaultsFileOpenFallbackEncoding();
 		SetDefaultsFileSaveEncoding();
 
-
 		/* Video Auto choose file */
 		videoAutoChooseFileCheckButton.Active = Base.Config.PrefsVideoAutoChooseFile;
-
-		
-		
 	}
 
 	private void SetDefaultsFileOpenEncoding () {
@@ -77,6 +77,20 @@ public class PreferencesDialog : GladeDialog {
 		fileOpenEncoding.SelectionChanged += OnDefaultsFileOpenEncodingChanged;
 	}
 
+	private void SetDefaultsFileOpenFallbackEncoding () {
+		int fixedEncoding = -1;
+		ConfigFileOpenFallbackEncoding fileOpenFallbackEncodingConfig = Base.Config.PrefsDefaultsFileOpenFallbackEncoding;
+		if (fileOpenFallbackEncodingConfig == ConfigFileOpenFallbackEncoding.Fixed) {
+			string encodingName = Base.Config.PrefsDefaultsFileOpenFallbackEncodingFixed;
+			EncodingDescription encodingDescription = EncodingDescription.Empty;
+			Encodings.Find(encodingName, ref encodingDescription);
+			fixedEncoding = encodingDescription.CodePage;
+		}
+
+		fileOpenFallbackEncoding = new EncodingComboBox(fileOpenFallbackEncodingComboBox, false, null, fixedEncoding);
+		fileOpenFallbackEncoding.SelectionChanged += OnDefaultsFileOpenFallbackEncodingChanged;
+	}
+
 	private void SetDefaultsFileSaveEncoding () {
 		string[] additionalActions = { Catalog.GetString("Keep Existing"), Catalog.GetString("Remember Last Used") }; //TODO change label
 		int fixedEncoding = -1;
@@ -124,6 +138,17 @@ public class PreferencesDialog : GladeDialog {
 		}
 	}
 
+	private void OnDefaultsFileOpenFallbackEncodingChanged (object o, EventArgs args) {
+		if (fileOpenFallbackEncoding.IsChosenCurrentLocale)
+			Base.Config.PrefsDefaultsFileOpenFallbackEncoding = ConfigFileOpenFallbackEncoding.CurrentLocale;
+		else {
+			EncodingDescription chosenEncoding = fileOpenFallbackEncoding.ChosenEncoding;
+			if (!chosenEncoding.Equals(EncodingDescription.Empty)) {
+				Base.Config.PrefsDefaultsFileOpenFallbackEncodingFixed = chosenEncoding.Name;
+			}
+		}
+	}
+
 	private void OnDefaultsFileSaveEncodingChanged (object o, EventArgs args) {
 		int active = fileSaveEncoding.ActiveSelection;
 		ConfigFileSaveEncodingOption activeOption = (ConfigFileSaveEncodingOption)Enum.ToObject(typeof(ConfigFileSaveEncodingOption), active);
diff --git a/src/GnomeSubtitles/Ui/Component/EncodingComboBox.cs b/src/GnomeSubtitles/Ui/Component/EncodingComboBox.cs
index 3dbcd51..a09120f 100644
--- a/src/GnomeSubtitles/Ui/Component/EncodingComboBox.cs
+++ b/src/GnomeSubtitles/Ui/Component/EncodingComboBox.cs
@@ -75,7 +75,12 @@ public class EncodingComboBox {
 	}
 
 	public bool IsChosenCurrentLocale {
-		get { return comboBox.Active == actionCount + 1; }
+		get {
+			if (actionCount > 0)
+				return comboBox.Active == actionCount + 1;
+			else
+				return comboBox.Active == 0;
+		}
 	}
 
 	public int ActiveSelection {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]