[banshee] [Equalizer] support read-only presets
- From: Aaron Bockover <abock src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [banshee] [Equalizer] support read-only presets
- Date: Thu, 11 Feb 2010 00:18:35 +0000 (UTC)
commit ec4f5099d55c9428bc1d020293862c024c0e1ea1
Author: Aaron Bockover <abockover novell com>
Date: Wed Feb 10 19:16:20 2010 -0500
[Equalizer] support read-only presets
The default preset equalizers will now always be available, whether or not a user
has defined a preset of the same name. Default presets cannot be edited or as they
are read-only, but they will show up at the bottom of the preset list, and below
a separator, so user-defined presets are always sorted at the top of the list.
Additionally, a bug is fixed in the JSON format allowing users to have any number
of presets with the same name.
.../Banshee.Equalizer/EqualizerManager.cs | 150 ++++++++++---------
.../Banshee.Equalizer/EqualizerSetting.cs | 7 +-
.../EqualizerPresetComboBox.cs | 52 ++++++-
.../Banshee.Equalizer.Gui/EqualizerView.cs | 9 +-
.../Banshee.Equalizer.Gui/EqualizerWindow.cs | 5 +-
5 files changed, 138 insertions(+), 85 deletions(-)
---
diff --git a/src/Core/Banshee.Services/Banshee.Equalizer/EqualizerManager.cs b/src/Core/Banshee.Services/Banshee.Equalizer/EqualizerManager.cs
index bede9f7..97d8119 100644
--- a/src/Core/Banshee.Services/Banshee.Equalizer/EqualizerManager.cs
+++ b/src/Core/Banshee.Services/Banshee.Equalizer/EqualizerManager.cs
@@ -98,7 +98,7 @@ namespace Banshee.Equalizer
private void Remove (EqualizerSetting eq, bool shouldQueueSave)
{
- if (eq == null) {
+ if (eq == null || eq.IsReadOnly) {
return;
}
@@ -194,17 +194,22 @@ namespace Banshee.Equalizer
{
var timer = Log.DebugTimerStart ();
- Clear ();
+ if (equalizers.Count > 0) {
+ Clear ();
+ }
try {
if (File.Exists (Path)) {
using (var reader = new StreamReader (path)) {
var deserializer = new Deserializer (reader);
- foreach (var node in (JsonObject)deserializer.Deserialize ()) {
- var eq_data = (JsonObject)node.Value;
- var eq = new EqualizerSetting (this, node.Key);
- eq.SetAmplifierLevel (Convert.ToDouble (eq_data["preamp"]), false);
+ foreach (var node in (JsonArray)deserializer.Deserialize ()) {
+ var eq_data = (JsonObject)node;
+ var name = (string)eq_data["name"];
+ var preamp = Convert.ToDouble (eq_data["preamp"]);
var bands = (JsonArray)eq_data["bands"];
+
+ var eq = new EqualizerSetting (this, name);
+ eq.SetAmplifierLevel (preamp, false);
for (uint band = 0; band < bands.Count; band++) {
eq.SetGain (band, Convert.ToDouble (bands[(int)band]), false);
}
@@ -242,70 +247,68 @@ namespace Banshee.Equalizer
Log.Exception ("Could not load equalizers.json", e);
}
- if (equalizers.Count == 0) {
- LoadDefaults ();
- }
-
Log.DebugTimerPrint (timer, "Loaded equalizer presets: {0}");
+
+ bool any_user_defined = equalizers.Count > 0;
+ equalizers.AddRange (GetDefaultEqualizers ());
+ if (!any_user_defined) {
+ Select ("Pop");
+ }
}
- private void LoadDefaults ()
+ private IEnumerable<EqualizerSetting> GetDefaultEqualizers ()
{
- equalizers = new List<EqualizerSetting> () {
- new EqualizerSetting (this, Catalog.GetString ("Classical"), 0, new [] {
- 0, 0, 0, 0, 0, 0, -7.2, -7.2, -7.2, -9.6
- }),
- new EqualizerSetting (this, Catalog.GetString ("Club"), 0, new [] {
- 0, 0, 8, 5.6, 5.6, 5.6, 3.2, 0, 0, 0
- }),
- new EqualizerSetting (this, Catalog.GetString ("Dance"), -1.1, new [] {
- 9.6, 7.2, 2.4, -1.1, -1.1, -5.6, -7.2, -7.2, -1.1, -1.1
- }),
- new EqualizerSetting (this, Catalog.GetString ("Full Bass"), -1.1, new [] {
- -8, 9.6, 9.6, 5.6, 1.6, -4, -8, -10.4, -11.2, -11.2
- }),
- new EqualizerSetting (this, Catalog.GetString ("Full Bass and Treble"), -1.1, new [] {
- 7.2, 5.6, -1.1, -7.2, -4.8, 1.6, 8, 11.2, 12, 12
- }),
- new EqualizerSetting (this, Catalog.GetString ("Full Treble"), -1.1, new [] {
- -9.6, -9.6, -9.6, -4, 2.4, 11.2, 11.5, 11.8, 11.8, 12
- }),
- new EqualizerSetting (this, Catalog.GetString ("Laptop Speakers and Headphones"), -1.1, new [] {
- 4.8, 11.2, 5.6, -3.2, -2.4, 1.6, 4.8, 9.6, 11.9, 11.9
- }),
- new EqualizerSetting (this, Catalog.GetString ("Large Hall"), -1.1, new [] {
- 10.4, 10.4, 5.6, 5.6, -1.1, -4.8, -4.8, -4.8, -1.1, -1.1
- }),
- new EqualizerSetting (this, Catalog.GetString ("Live"), -1.1, new [] {
- -4.8, -1.1, 4, 5.6, 5.6, 5.6, 4, 2.4, 2.4, 2.4
- }),
- new EqualizerSetting (this, Catalog.GetString ("Party"), -1.1, new [] {
- 7.2, 7.2, -1.1, -1.1, -1.1, -1.1, -1.1, -1.1, 7.2, 7.2
- }),
- new EqualizerSetting (this, Catalog.GetString ("Pop"), -1.1, new [] {
- -1.6, 4.8, 7.2, 8, 5.6, -1.1, -2.4, -2.4, -1.6, -1.6
- }),
- new EqualizerSetting (this, Catalog.GetString ("Reggae"), -1.1, new [] {
- -1.1, -1.1, -1.1, -5.6, -1.1, 6.4, 6.4, -1.1, -1.1, -1.1
- }),
- new EqualizerSetting (this, Catalog.GetString ("Rock"), -1.1, new [] {
- 8, 4.8, -5.6, -8, -3.2, 4, 8.8, 11.2, 11.2, 11.2
- }),
- new EqualizerSetting (this, Catalog.GetString ("Ska"), -1.1, new [] {
- -2.4, -4.8, -4, -1.1, 4, 5.6, 8.8, 9.6, 11.2, 9.6
- }),
- new EqualizerSetting (this, Catalog.GetString ("Soft"), -1.1, new [] {
- 4.8, 1.6, -1.1, -2.4, -1.1, 4, 8, 9.6, 11.2, 12,
- }),
- new EqualizerSetting (this, Catalog.GetString ("Soft Rock"), -1.1, new [] {
- 4, 4, 2.4, -1.1, -4, -5.6, -3.2, -1.1, 2.4, 8.8,
- }),
- new EqualizerSetting (this, Catalog.GetString ("Techno"), -1.1, new [] {
- 8, 5.6, -1.1, -5.6, -4.8, -1.1, 8, 9.6, 9.6, 8.8
- })
- };
-
- Select ("Pop");
+ yield return new EqualizerSetting (this, Catalog.GetString ("Classical"), 0, new [] {
+ 0, 0, 0, 0, 0, 0, -7.2, -7.2, -7.2, -9.6
+ });
+ yield return new EqualizerSetting (this, Catalog.GetString ("Club"), 0, new [] {
+ 0, 0, 8, 5.6, 5.6, 5.6, 3.2, 0, 0, 0
+ });
+ yield return new EqualizerSetting (this, Catalog.GetString ("Dance"), -1.1, new [] {
+ 9.6, 7.2, 2.4, -1.1, -1.1, -5.6, -7.2, -7.2, -1.1, -1.1
+ });
+ yield return new EqualizerSetting (this, Catalog.GetString ("Full Bass"), -1.1, new [] {
+ -8, 9.6, 9.6, 5.6, 1.6, -4, -8, -10.4, -11.2, -11.2
+ });
+ yield return new EqualizerSetting (this, Catalog.GetString ("Full Bass and Treble"), -1.1, new [] {
+ 7.2, 5.6, -1.1, -7.2, -4.8, 1.6, 8, 11.2, 12, 12
+ });
+ yield return new EqualizerSetting (this, Catalog.GetString ("Full Treble"), -1.1, new [] {
+ -9.6, -9.6, -9.6, -4, 2.4, 11.2, 11.5, 11.8, 11.8, 12
+ });
+ yield return new EqualizerSetting (this, Catalog.GetString ("Laptop Speakers and Headphones"), -1.1, new [] {
+ 4.8, 11.2, 5.6, -3.2, -2.4, 1.6, 4.8, 9.6, 11.9, 11.9
+ });
+ yield return new EqualizerSetting (this, Catalog.GetString ("Large Hall"), -1.1, new [] {
+ 10.4, 10.4, 5.6, 5.6, -1.1, -4.8, -4.8, -4.8, -1.1, -1.1
+ });
+ yield return new EqualizerSetting (this, Catalog.GetString ("Live"), -1.1, new [] {
+ -4.8, -1.1, 4, 5.6, 5.6, 5.6, 4, 2.4, 2.4, 2.4
+ });
+ yield return new EqualizerSetting (this, Catalog.GetString ("Party"), -1.1, new [] {
+ 7.2, 7.2, -1.1, -1.1, -1.1, -1.1, -1.1, -1.1, 7.2, 7.2
+ });
+ yield return new EqualizerSetting (this, Catalog.GetString ("Pop"), -1.1, new [] {
+ -1.6, 4.8, 7.2, 8, 5.6, -1.1, -2.4, -2.4, -1.6, -1.6
+ });
+ yield return new EqualizerSetting (this, Catalog.GetString ("Reggae"), -1.1, new [] {
+ -1.1, -1.1, -1.1, -5.6, -1.1, 6.4, 6.4, -1.1, -1.1, -1.1
+ });
+ yield return new EqualizerSetting (this, Catalog.GetString ("Rock"), -1.1, new [] {
+ 8, 4.8, -5.6, -8, -3.2, 4, 8.8, 11.2, 11.2, 11.2
+ });
+ yield return new EqualizerSetting (this, Catalog.GetString ("Ska"), -1.1, new [] {
+ -2.4, -4.8, -4, -1.1, 4, 5.6, 8.8, 9.6, 11.2, 9.6
+ });
+ yield return new EqualizerSetting (this, Catalog.GetString ("Soft"), -1.1, new [] {
+ 4.8, 1.6, -1.1, -2.4, -1.1, 4, 8, 9.6, 11.2, 12,
+ });
+ yield return new EqualizerSetting (this, Catalog.GetString ("Soft Rock"), -1.1, new [] {
+ 4, 4, 2.4, -1.1, -4, -5.6, -3.2, -1.1, 2.4, 8.8,
+ });
+ yield return new EqualizerSetting (this, Catalog.GetString ("Techno"), -1.1, new [] {
+ 8, 5.6, -1.1, -5.6, -4.8, -1.1, 8, 9.6, 9.6, 8.8
+ });
}
public void Save ()
@@ -317,14 +320,19 @@ namespace Banshee.Equalizer
{
try {
using (var writer = new StreamWriter (Path)) {
- writer.Write ("{");
+ writer.Write ("[");
writer.WriteLine ();
- foreach (var eq in this) {
- writer.Write (eq);
- writer.Write (",");
+ for (int i = 0; i < equalizers.Count; i++) {
+ if (equalizers[i].IsReadOnly) {
+ continue;
+ }
+ writer.Write (equalizers[i]);
+ if (i < equalizers.Count - 1) {
+ writer.Write (",");
+ }
writer.WriteLine ();
}
- writer.Write ("}");
+ writer.Write ("]");
}
Log.Debug ("EqualizerManager", "Saved equalizers to disk");
} catch (Exception e) {
diff --git a/src/Core/Banshee.Services/Banshee.Equalizer/EqualizerSetting.cs b/src/Core/Banshee.Services/Banshee.Equalizer/EqualizerSetting.cs
index 0a381ae..7f2cd7d 100644
--- a/src/Core/Banshee.Services/Banshee.Equalizer/EqualizerSetting.cs
+++ b/src/Core/Banshee.Services/Banshee.Equalizer/EqualizerSetting.cs
@@ -50,6 +50,7 @@ namespace Banshee.Equalizer
internal EqualizerSetting (EqualizerManager manager,
string name, double amp, double [] gains) : this (manager, name)
{
+ IsReadOnly = true;
for (uint i = 0; i < gains.Length; i++) {
SetGain (i, gains[i], false);
}
@@ -61,6 +62,8 @@ namespace Banshee.Equalizer
this.name = name;
}
+ public bool IsReadOnly { get; private set; }
+
public string Name {
get { return name; }
set {
@@ -144,7 +147,9 @@ namespace Banshee.Equalizer
public override string ToString ()
{
var builder = new System.Text.StringBuilder ();
- builder.AppendFormat (" \"{0}\": {{", Name.Replace ("\"", "\\\""));
+ builder.Append (" {");
+ builder.AppendLine ();
+ builder.AppendFormat (" \"name\": \"{0}\",", Name.Replace ("\"", "\\\""));
builder.AppendLine ();
builder.AppendFormat (" \"preamp\": {0},", AmplifierLevel);
builder.AppendLine ();
diff --git a/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerPresetComboBox.cs b/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerPresetComboBox.cs
index 2588f08..b4d25ed 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerPresetComboBox.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerPresetComboBox.cs
@@ -37,6 +37,8 @@ namespace Banshee.Equalizer.Gui
private EqualizerManager manager;
private ListStore store;
private EqualizerSetting active_eq;
+ private int user_count;
+ private TreeIter separator_iter = TreeIter.Zero;
public EqualizerPresetComboBox () : this (EqualizerManager.Instance)
{
@@ -58,17 +60,36 @@ namespace Banshee.Equalizer.Gui
Model = store;
TextColumn = 0;
+ store.SetSortColumnId (1, SortType.Ascending);
+ store.SetSortFunc (1, (model, ia, ib) => {
+ var a = GetEqualizerSettingForIter (ia);
+ var b = GetEqualizerSettingForIter (ib);
+ if (a != null && b != null) {
+ if ((!a.IsReadOnly && !b.IsReadOnly) ||
+ (a.IsReadOnly && b.IsReadOnly)) {
+ return a.Name.CompareTo (b.Name);
+ }
+ return a.IsReadOnly.CompareTo (b.IsReadOnly);
+ } else if (a == null && b == null) {
+ return 0;
+ } else if ((a == null && b.IsReadOnly) || (b == null && !a.IsReadOnly)) {
+ return -1;
+ } else if ((a == null && !b.IsReadOnly) || (b == null && a.IsReadOnly)) {
+ return 1;
+ }
+ return 0;
+ });
+
+ RowSeparatorFunc = (model, iter) =>
+ store.GetValue (iter, 0) == null &&
+ store.GetValue (iter, 1) == null;
+
foreach (EqualizerSetting eq in manager) {
AddEqualizerSetting(eq);
}
- manager.EqualizerAdded += delegate (object o, EventArgs<EqualizerSetting> args) {
- AddEqualizerSetting (args.Value);
- };
-
- manager.EqualizerRemoved += delegate (object o, EventArgs<EqualizerSetting> args) {
- RemoveEqualizerSetting (args.Value);
- };
+ manager.EqualizerAdded += (o, e) => AddEqualizerSetting (e.Value);
+ manager.EqualizerRemoved += (o, e) => RemoveEqualizerSetting (e.Value);
}
protected override void OnChanged ()
@@ -83,7 +104,7 @@ namespace Banshee.Equalizer.Gui
eq = active_eq;
}
- if (Entry == null) {
+ if (Entry == null || eq.IsReadOnly) {
return;
}
@@ -114,6 +135,13 @@ namespace Banshee.Equalizer.Gui
private void AddEqualizerSetting (EqualizerSetting eq)
{
+ if (!eq.IsReadOnly) {
+ user_count++;
+ if (separator_iter.Equals (TreeIter.Zero)) {
+ separator_iter = store.AppendValues (null, null);
+ }
+ }
+
store.AppendValues (eq.Name, eq);
}
@@ -121,6 +149,11 @@ namespace Banshee.Equalizer.Gui
{
TreeIter iter;
if (GetIterForEqualizerSetting (eq, out iter)) {
+ if (!eq.IsReadOnly && --user_count <= 0) {
+ user_count = 0;
+ store.Remove (ref separator_iter);
+ separator_iter = TreeIter.Zero;
+ }
store.Remove (ref iter);
}
@@ -157,6 +190,9 @@ namespace Banshee.Equalizer.Gui
set {
active_eq = value;
+ if (value != null) {
+ Entry.IsEditable = !active_eq.IsReadOnly;
+ }
TreeIter iter;
if (GetIterForEqualizerSetting (value, out iter)) {
diff --git a/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerView.cs b/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerView.cs
index 2379df2..d2cb3be 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerView.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerView.cs
@@ -185,7 +185,7 @@ namespace Banshee.Equalizer.Gui
}
}
- public void SetBand(uint band, double value)
+ public void SetBand (uint band, double value)
{
band_scales[band].Value = (int) (value * 10);
}
@@ -211,11 +211,12 @@ namespace Banshee.Equalizer.Gui
return;
}
+ amplifier_scale.Sensitive = !value.IsReadOnly;
AmplifierLevel = active_eq.AmplifierLevel;
- for (int i = 0; i < active_eq.BandCount; i++) {
- uint x = (uint) i;
- SetBand (x, active_eq[x]);
+ for (uint i = 0; i < active_eq.BandCount; i++) {
+ band_scales[i].Sensitive = !value.IsReadOnly;
+ SetBand (i, active_eq[i]);
}
loading = false;
diff --git a/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerWindow.cs b/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerWindow.cs
index e43d04e..748bba6 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerWindow.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerWindow.cs
@@ -43,6 +43,7 @@ namespace Banshee.Equalizer.Gui
private EqualizerPresetComboBox eq_preset_combo;
private CheckButton eq_enabled_checkbox;
private HBox header_box;
+ private Button delete_preset_button;
private static EqualizerWindow instance;
public static EqualizerWindow Instance {
@@ -88,7 +89,7 @@ namespace Banshee.Equalizer.Gui
new_preset_button.Relief = ReliefStyle.None;
new_preset_button.Clicked += OnNewPreset;
- Button delete_preset_button = new Button (new Image (Stock.Remove, IconSize.Button));
+ delete_preset_button = new Button (new Image (Stock.Remove, IconSize.Button));
delete_preset_button.Relief = ReliefStyle.None;
delete_preset_button.Clicked += OnDeletePreset;
@@ -157,6 +158,8 @@ namespace Banshee.Equalizer.Gui
if (eq_preset_combo.ActiveEqualizer != eq_view.EqualizerSetting) {
eq_view.EqualizerSetting = eq_preset_combo.ActiveEqualizer;
EqualizerManager.Instance.Select (eq_preset_combo.ActiveEqualizer);
+ delete_preset_button.Sensitive = eq_preset_combo.ActiveEqualizer != null &&
+ !eq_preset_combo.ActiveEqualizer.IsReadOnly;
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]