[gnome-subtitles] Allow to set the fallback encoding in the preferences
- From: Pedro Daniel da Rocha Melo e Castro <pcastro src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-subtitles] Allow to set the fallback encoding in the preferences
- Date: Sun, 24 Jan 2010 21:43:10 +0000 (UTC)
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]