[gnome-subtitles] Allow to set the encoding to use when saving files
- 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 encoding to use when saving files
- Date: Tue, 19 Jan 2010 23:30:32 +0000 (UTC)
commit d96291eeb367b7ff7b04513380b522cba342890a
Author: Pedro Castro <mail>
Date: Tue Jan 19 23:29:41 2010 +0000
Allow to set the encoding to use when saving files
data/gnome-subtitles.schemas | 11 ----
src/Glade/PreferencesDialog.glade | 4 +-
src/GnomeSubtitles/Core/Config.cs | 22 ++++++++
src/GnomeSubtitles/Dialog/PreferencesDialog.cs | 53 ++++++++++++++++++--
.../Dialog/SubtitleFileSaveAsDialog.cs | 42 ++++++++++++++--
.../Ui/Component/EncodingComboBox.cs | 6 +-
6 files changed, 113 insertions(+), 25 deletions(-)
---
diff --git a/data/gnome-subtitles.schemas b/data/gnome-subtitles.schemas
index 2d4005c..2caf6b6 100644
--- a/data/gnome-subtitles.schemas
+++ b/data/gnome-subtitles.schemas
@@ -112,16 +112,5 @@
<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/file_save/file_save_subtitle_format</key>
- <applyto>/apps/gnome-subtitles/preferences/file_save/file_save_subtitle_format</applyto>
- <owner>gnome-subtitles</owner>
- <type>string</type>
- <default>SubRip</default>
- <locale name="C">
- <short>File save subtitle format</short>
- <long>Subtitle format to choose by default in the File Save As dialog.</long>
- </locale>
- </schema>
</schemalist>
</gconfschemafile>
diff --git a/src/Glade/PreferencesDialog.glade b/src/Glade/PreferencesDialog.glade
index 26681f2..7d7ce21 100644
--- a/src/Glade/PreferencesDialog.glade
+++ b/src/Glade/PreferencesDialog.glade
@@ -211,7 +211,7 @@
</packing>
</child>
<child>
- <widget class="GtkComboBox" id="combobox1">
+ <widget class="GtkComboBox" id="subtitleFormatComboBox">
<property name="visible">True</property>
</widget>
<packing>
@@ -220,7 +220,7 @@
</packing>
</child>
<child>
- <widget class="GtkComboBox" id="combobox2">
+ <widget class="GtkComboBox" id="fileSaveEncodingComboBox">
<property name="visible">True</property>
</widget>
<packing>
diff --git a/src/GnomeSubtitles/Core/Config.cs b/src/GnomeSubtitles/Core/Config.cs
index a04d0cf..b8e34b2 100644
--- a/src/GnomeSubtitles/Core/Config.cs
+++ b/src/GnomeSubtitles/Core/Config.cs
@@ -25,6 +25,8 @@ 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 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
public class Config {
private Client client = null;
@@ -48,6 +50,8 @@ 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 keyPrefsDefaultsFileSaveEncodingOption = keyPrefsDefaults + "file_save_encoding_option";
+ private const string keyPrefsDefaultsFileSaveEncoding = keyPrefsDefaults + "file_save_encoding";
public Config () {
client = new Client();
@@ -108,6 +112,24 @@ public class Config {
get { return GetString(keyPrefsDefaultsFileOpenEncoding, "ISO-8859-15"); }
set { Set(keyPrefsDefaultsFileOpenEncoding, value); }
}
+
+ public ConfigFileSaveEncodingOption PrefsDefaultsFileSaveEncodingOption {
+ get { return (ConfigFileSaveEncodingOption)GetEnumValue(keyPrefsDefaultsFileSaveEncodingOption, ConfigFileSaveEncodingOption.KeepExisting); }
+ set { Set(keyPrefsDefaultsFileSaveEncodingOption, value.ToString()); }
+ }
+
+ public ConfigFileSaveEncoding PrefsDefaultsFileSaveEncoding {
+ get { return (ConfigFileSaveEncoding)GetEnumValueFromSuperset(keyPrefsDefaultsFileSaveEncoding, ConfigFileSaveEncoding.Fixed); }
+ set { Set(keyPrefsDefaultsFileSaveEncoding, value.ToString()); }
+ }
+
+ /* Uses the same key as PrefsDefaultsFileSaveEncoding but is used when there's a specific encoding set */
+ public string PrefsDefaultsFileSaveEncodingFixed {
+ get { return GetString(keyPrefsDefaultsFileSaveEncoding, "ISO-8859-15"); }
+ set { Set(keyPrefsDefaultsFileSaveEncoding, value); }
+ }
+
+
/* Private members */
diff --git a/src/GnomeSubtitles/Dialog/PreferencesDialog.cs b/src/GnomeSubtitles/Dialog/PreferencesDialog.cs
index b49beca..d43d48f 100644
--- a/src/GnomeSubtitles/Dialog/PreferencesDialog.cs
+++ b/src/GnomeSubtitles/Dialog/PreferencesDialog.cs
@@ -33,10 +33,12 @@ public class PreferencesDialog : GladeDialog {
/* Components */
private EncodingComboBox fileOpenEncoding = null;
+ private EncodingComboBox fileSaveEncoding = null;
/* Widgets */
[WidgetAttribute] private CheckButton videoAutoChooseFileCheckButton = null;
[WidgetAttribute] private ComboBox fileOpenEncodingComboBox = null;
+ [WidgetAttribute] private ComboBox fileSaveEncodingComboBox = null;
public PreferencesDialog () : base(gladeFilename, false) {
LoadValues();
@@ -47,6 +49,7 @@ public class PreferencesDialog : GladeDialog {
private void LoadValues () {
SetDefaultsFileOpenEncoding();
+ SetDefaultsFileSaveEncoding();
/* Video Auto choose file */
@@ -57,7 +60,7 @@ public class PreferencesDialog : GladeDialog {
}
private void SetDefaultsFileOpenEncoding () {
- string[] fileOpenAdditionalActions = { Catalog.GetString("Remember Last Used") };
+ string[] additionalActions = { Catalog.GetString("Remember Last Used") };
int fixedEncoding = -1;
ConfigFileOpenEncodingOption fileOpenEncodingOption = Base.Config.PrefsDefaultsFileOpenEncodingOption;
if (fileOpenEncodingOption == ConfigFileOpenEncodingOption.Specific) {
@@ -67,13 +70,31 @@ public class PreferencesDialog : GladeDialog {
fixedEncoding = encodingDescription.CodePage;
}
- fileOpenEncoding = new EncodingComboBox(fileOpenEncodingComboBox, true, fileOpenAdditionalActions, fixedEncoding);
+ fileOpenEncoding = new EncodingComboBox(fileOpenEncodingComboBox, true, additionalActions, fixedEncoding);
if (fileOpenEncodingOption != ConfigFileOpenEncodingOption.Specific) {
fileOpenEncoding.ActiveSelection = (int)fileOpenEncodingOption;
}
fileOpenEncoding.SelectionChanged += OnDefaultsFileOpenEncodingChanged;
}
+ private void SetDefaultsFileSaveEncoding () {
+ string[] additionalActions = { Catalog.GetString("Keep Existing"), Catalog.GetString("Remember Last Used") }; //TODO change label
+ int fixedEncoding = -1;
+ ConfigFileSaveEncodingOption fileSaveEncodingOption = Base.Config.PrefsDefaultsFileSaveEncodingOption;
+ if (fileSaveEncodingOption == ConfigFileSaveEncodingOption.Specific) {
+ string encodingName = Base.Config.PrefsDefaultsFileSaveEncodingFixed;
+ EncodingDescription encodingDescription = EncodingDescription.Empty;
+ Encodings.Find(encodingName, ref encodingDescription);
+ fixedEncoding = encodingDescription.CodePage;
+ }
+
+ fileSaveEncoding = new EncodingComboBox(fileSaveEncodingComboBox, false, additionalActions, fixedEncoding);
+ if (fileSaveEncodingOption != ConfigFileSaveEncodingOption.Specific) {
+ fileSaveEncoding.ActiveSelection = (int)fileSaveEncodingOption;
+ }
+ fileSaveEncoding.SelectionChanged += OnDefaultsFileSaveEncodingChanged;
+ }
+
/* Event members */
@@ -82,7 +103,7 @@ public class PreferencesDialog : GladeDialog {
private void OnDefaultsFileOpenEncodingChanged (object o, EventArgs args) {
int active = fileOpenEncoding.ActiveSelection;
ConfigFileOpenEncodingOption activeOption = (ConfigFileOpenEncodingOption)Enum.ToObject(typeof(ConfigFileOpenEncodingOption), active);
- if (((int)activeOption) > ((int)ConfigFileOpenEncodingOption.Specific))
+ if (((int)activeOption) > ((int)ConfigFileOpenEncodingOption.Specific)) //Positions higher than specific are always specific too
activeOption = ConfigFileOpenEncodingOption.Specific;
Base.Config.PrefsDefaultsFileOpenEncodingOption = activeOption;
@@ -94,7 +115,7 @@ public class PreferencesDialog : GladeDialog {
}
}
else {
- /* If encoding option is current locale, encoding holds current locale too, otherwise it just holds auto detect */
+ /* If encoding is current locale, encoding holds current locale too, otherwise it just holds auto detect */
ConfigFileOpenEncoding encodingToStore = ConfigFileOpenEncoding.AutoDetect;
if (activeOption == ConfigFileOpenEncodingOption.CurrentLocale) {
encodingToStore = ConfigFileOpenEncoding.CurrentLocale;
@@ -103,6 +124,30 @@ public class PreferencesDialog : GladeDialog {
}
}
+ private void OnDefaultsFileSaveEncodingChanged (object o, EventArgs args) {
+ int active = fileSaveEncoding.ActiveSelection;
+ ConfigFileSaveEncodingOption activeOption = (ConfigFileSaveEncodingOption)Enum.ToObject(typeof(ConfigFileSaveEncodingOption), active);
+ if (((int)activeOption) > ((int)ConfigFileOpenEncodingOption.Specific)) //Positions higher than specific are always specific too
+ activeOption = ConfigFileSaveEncodingOption.Specific;
+
+ Base.Config.PrefsDefaultsFileSaveEncodingOption = activeOption;
+ /* If encoding is specific, encodingOption=Specific and encoding holds the encoding name */
+ if (activeOption == ConfigFileSaveEncodingOption.Specific) {
+ EncodingDescription chosenEncoding = fileSaveEncoding.ChosenEncoding;
+ if (!chosenEncoding.Equals(EncodingDescription.Empty)) {
+ Base.Config.PrefsDefaultsFileSaveEncodingFixed = chosenEncoding.Name;
+ }
+ }
+ else {
+ /* If encoding option is current locale, encoding holds current locale too, otherwise it just holds keep existing */
+ ConfigFileSaveEncoding encodingToStore = ConfigFileSaveEncoding.KeepExisting;
+ if (activeOption == ConfigFileSaveEncodingOption.CurrentLocale) {
+ encodingToStore = ConfigFileSaveEncoding.CurrentLocale;
+ }
+ Base.Config.PrefsDefaultsFileSaveEncoding = encodingToStore;
+ }
+ }
+
private void OnVideoAutoChooseFileToggled (object o, EventArgs args) {
Base.Config.PrefsVideoAutoChooseFile = videoAutoChooseFileCheckButton.Active;
}
diff --git a/src/GnomeSubtitles/Dialog/SubtitleFileSaveAsDialog.cs b/src/GnomeSubtitles/Dialog/SubtitleFileSaveAsDialog.cs
index 5b76663..d6490f0 100644
--- a/src/GnomeSubtitles/Dialog/SubtitleFileSaveAsDialog.cs
+++ b/src/GnomeSubtitles/Dialog/SubtitleFileSaveAsDialog.cs
@@ -56,17 +56,35 @@ public abstract class SubtitleFileSaveAsDialog : GladeDialog {
this.textType = textType;
SetTitle();
- this.encodingComboBox = new EncodingComboBox(fileEncodingComboBox, false, null, GetFixedEncoding());
+
+ InitEncodingComboBox();
FillFormatComboBox();
FillNewlineTypeComboBox();
}
+ private void InitEncodingComboBox () {
+ int fixedEncoding = GetFixedEncoding();
+ ConfigFileSaveEncoding encodingConfig = Base.Config.PrefsDefaultsFileSaveEncoding;
+ if (encodingConfig == ConfigFileSaveEncoding.Fixed) {
+ string encodingName = Base.Config.PrefsDefaultsFileSaveEncodingFixed;
+ EncodingDescription encodingDescription = EncodingDescription.Empty;
+ Encodings.Find(encodingName, ref encodingDescription);
+ fixedEncoding = encodingDescription.CodePage;
+ }
+
+ this.encodingComboBox = new EncodingComboBox(fileEncodingComboBox, false, null, fixedEncoding);
+
+ /* Only need to handle the case of currentLocale, as Fixed and Keep Existent is handled before */
+ if (encodingConfig == ConfigFileSaveEncoding.CurrentLocale)
+ encodingComboBox.ActiveSelection = (int)encodingConfig;
+ }
+
/* Overriden members */
- public override DialogScope Scope {
+ /*public override DialogScope Scope {
get { return DialogScope.Document; }
- }
+ }*/
/* Public properties */
@@ -316,9 +334,23 @@ public abstract class SubtitleFileSaveAsDialog : GladeDialog {
chosenFilename = AddExtensionIfNeeded(chosenSubtitleType);
chosenEncoding = encodingComboBox.ChosenEncoding;
- SetReturnValue(true);
-
+ if (Base.Config.PrefsDefaultsFileSaveEncodingOption == ConfigFileSaveEncodingOption.RememberLastUsed) {
+ int activeAction = encodingComboBox.ActiveSelection;
+ System.Console.WriteLine("Active action: " + activeAction);
+ ConfigFileSaveEncoding activeOption = (ConfigFileSaveEncoding)Enum.ToObject(typeof(ConfigFileSaveEncoding), activeAction);
+ if (((int)activeOption) >= ((int)ConfigFileSaveEncoding.Fixed)) {
+ System.Console.WriteLine("Chosen encoding: " + chosenEncoding.Name);
+ Base.Config.PrefsDefaultsFileSaveEncodingFixed = chosenEncoding.Name;
+ }
+ else {
+ System.Console.WriteLine("Active option: " + activeOption);
+ Base.Config.PrefsDefaultsFileSaveEncoding = activeOption;
+ }
+ }
+
chosenNewlineType = GetChosenNewlineType();
+
+ SetReturnValue(true);
}
return false;
}
diff --git a/src/GnomeSubtitles/Ui/Component/EncodingComboBox.cs b/src/GnomeSubtitles/Ui/Component/EncodingComboBox.cs
index 23842e1..3dbcd51 100644
--- a/src/GnomeSubtitles/Ui/Component/EncodingComboBox.cs
+++ b/src/GnomeSubtitles/Ui/Component/EncodingComboBox.cs
@@ -67,10 +67,10 @@ public class EncodingComboBox {
public EncodingDescription ChosenEncoding {
get {
int active = comboBox.Active;
- if (hasAutoDetect)
- return (active == 0 ? EncodingDescription.Empty : (EncodingDescription)encodings[active - (actionCount + 1)]); //1 for break line
+ if (active < actionCount) //An action is active
+ return EncodingDescription.Empty;
else
- return (EncodingDescription)encodings[active];
+ return (EncodingDescription)encodings[active - (actionCount > 0 ? actionCount + 1 : 0)]; //1 for break line
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]