diff --git a/GreenshotEditor/Configuration/EditorConfiguration.cs b/GreenshotEditor/Configuration/EditorConfiguration.cs index 67c158043..2b6bff1cc 100644 --- a/GreenshotEditor/Configuration/EditorConfiguration.cs +++ b/GreenshotEditor/Configuration/EditorConfiguration.cs @@ -48,20 +48,7 @@ namespace Greenshot.Editor { public Font Editor_Font = null; [IniProperty("LastFieldValue", Description="Field values, make sure the last used settings are re-used")] - public Dictionary LastUsedFieldValues; - - public void UpdateLastUsedFieldValue(IField f) { - if(f.Value != null) { - LastUsedFieldValues[f.FieldType] = f.Value; - } - } - - public IField GetLastUsedValueForField(IField f) { - if(LastUsedFieldValues.ContainsKey(f.FieldType)) { - f.Value = LastUsedFieldValues[f.FieldType]; - } - return f; - } + public Dictionary LastUsedFieldValues; /// /// Supply values we can't put as defaults @@ -71,29 +58,36 @@ namespace Greenshot.Editor { public override object GetDefault(string property) { switch(property) { case "LastFieldValue": - Dictionary fieldDefaults = new Dictionary(); - fieldDefaults.Add(FieldType.ARROWHEADS, ArrowContainer.ArrowHeadCombination.END_POINT); - fieldDefaults.Add(FieldType.BLUR_RADIUS, 3); - fieldDefaults.Add(FieldType.BRIGHTNESS, 0.9d); - fieldDefaults.Add(FieldType.FILL_COLOR, Color.Transparent); - fieldDefaults.Add(FieldType.FLAGS, null); - fieldDefaults.Add(FieldType.FONT_BOLD, false); - fieldDefaults.Add(FieldType.FONT_FAMILY, FontFamily.GenericSansSerif.Name); - fieldDefaults.Add(FieldType.FONT_ITALIC, false); - fieldDefaults.Add(FieldType.FONT_SIZE, 11f); - fieldDefaults.Add(FieldType.HIGHLIGHT_COLOR, Color.Yellow); - fieldDefaults.Add(FieldType.LINE_COLOR, Color.Red); - fieldDefaults.Add(FieldType.LINE_THICKNESS, 1); - fieldDefaults.Add(FieldType.MAGNIFICATION_FACTOR, 2); - fieldDefaults.Add(FieldType.PIXEL_SIZE, 5); - fieldDefaults.Add(FieldType.PREVIEW_QUALITY, 1.0d); - fieldDefaults.Add(FieldType.SHADOW, false); - fieldDefaults.Add(FieldType.PREPARED_FILTER_OBFUSCATE, FilterContainer.PreparedFilter.PIXELIZE); - fieldDefaults.Add(FieldType.PREPARED_FILTER_HIGHLIGHT, FilterContainer.PreparedFilter.TEXT_HIGHTLIGHT); - return fieldDefaults; + return new Dictionary(); } return null; } + public void UpdateLastUsedFieldValue(IField f) { + string key = GetKeyForField(f); + if(f.Value != null) { + if (LastUsedFieldValues.ContainsKey(key)) { + LastUsedFieldValues[key] = f.Value; + } else { + LastUsedFieldValues.Add(key, f.Value); + } + } + } + + public IField GetLastUsedValueForField(IField f) { + string key = GetKeyForField(f); + if(LastUsedFieldValues.ContainsKey(key)) { + f.Value = LastUsedFieldValues[key]; + } + return f; + } + + private string GetKeyForField(IField f) { + if(f.Scope == null) { + return f.FieldType.ToString(); + } else { + return f.FieldType.ToString() + "-" + f.Scope; + } + } } } diff --git a/GreenshotEditor/Drawing/Fields/FieldAggregator.cs b/GreenshotEditor/Drawing/Fields/FieldAggregator.cs index dc71abca0..c4e1e1c36 100644 --- a/GreenshotEditor/Drawing/Fields/FieldAggregator.cs +++ b/GreenshotEditor/Drawing/Fields/FieldAggregator.cs @@ -178,7 +178,6 @@ namespace Greenshot.Drawing.Fields { // update last used from DC field, so that scope is honored config.UpdateLastUsedFieldValue(dcf); } - } } } diff --git a/GreenshotEditor/Drawing/Fields/FieldFactory.cs b/GreenshotEditor/Drawing/Fields/FieldFactory.cs index 3aeda6268..29ce3b38d 100644 --- a/GreenshotEditor/Drawing/Fields/FieldFactory.cs +++ b/GreenshotEditor/Drawing/Fields/FieldFactory.cs @@ -34,6 +34,29 @@ namespace Greenshot.Drawing.Fields { /// public class FieldFactory { private static EditorConfiguration config = IniConfig.GetIniSection(); + private static Dictionary DEFAULT_VALUES; + + static FieldFactory() { + DEFAULT_VALUES = new Dictionary(); + DEFAULT_VALUES.Add(FieldType.ARROWHEADS, ArrowContainer.ArrowHeadCombination.END_POINT); + DEFAULT_VALUES.Add(FieldType.BLUR_RADIUS, 3); + DEFAULT_VALUES.Add(FieldType.BRIGHTNESS, 0.9d); + DEFAULT_VALUES.Add(FieldType.FILL_COLOR, Color.Transparent); + DEFAULT_VALUES.Add(FieldType.FLAGS, null); + DEFAULT_VALUES.Add(FieldType.FONT_BOLD, false); + DEFAULT_VALUES.Add(FieldType.FONT_FAMILY, FontFamily.GenericSansSerif.Name); + DEFAULT_VALUES.Add(FieldType.FONT_ITALIC, false); + DEFAULT_VALUES.Add(FieldType.FONT_SIZE, 11f); + DEFAULT_VALUES.Add(FieldType.HIGHLIGHT_COLOR, Color.Yellow); + DEFAULT_VALUES.Add(FieldType.LINE_COLOR, Color.Red); + DEFAULT_VALUES.Add(FieldType.LINE_THICKNESS, 1); + DEFAULT_VALUES.Add(FieldType.MAGNIFICATION_FACTOR, 2); + DEFAULT_VALUES.Add(FieldType.PIXEL_SIZE, 5); + DEFAULT_VALUES.Add(FieldType.PREVIEW_QUALITY, 1.0d); + DEFAULT_VALUES.Add(FieldType.SHADOW, false); + DEFAULT_VALUES.Add(FieldType.PREPARED_FILTER_OBFUSCATE, FilterContainer.PreparedFilter.PIXELIZE); + DEFAULT_VALUES.Add(FieldType.PREPARED_FILTER_HIGHLIGHT, FilterContainer.PreparedFilter.TEXT_HIGHTLIGHT); + } private FieldFactory() {} @@ -66,7 +89,8 @@ namespace Greenshot.Drawing.Fields { public static Field CreateField(FieldType fieldType, Type scope) { return CreateField(fieldType, scope, null); } - + + /// FieldType of the field to construct /// overwrites the original default value being defined in FieldType /// a new Field of the given fieldType and preferredDefaultValue, with the scope of it's value being restricted to the Type scope @@ -81,16 +105,29 @@ namespace Greenshot.Drawing.Fields { if(ret.Value == null) { if(preferredDefaultValue != null) { ret.Value = preferredDefaultValue; + } else { + ret.Value = GetDefaultValueForField(ret); } } return ret; } + private static object GetDefaultValueForField(Field f) { + if(DEFAULT_VALUES.ContainsKey(f.FieldType)) { + return DEFAULT_VALUES[f.FieldType]; + } else { + throw new KeyNotFoundException("No default value has been defined for "+f.FieldType); + } + } + + /// a List of all available fields with their respective default value public static List GetDefaultFields() { List ret = new List(); foreach(FieldType ft in FieldType.GetValues(typeof(FieldType))) { - ret.Add(CreateField(ft)); + Field f = CreateField(ft); + f.Value = GetDefaultValueForField(f); + ret.Add(f); } return ret; }