diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..99a1b50 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "MaddoLibrary"] + path = MaddoLibrary + url = git@gitlab.com:MaddoTools/MaddoLibrary.git diff --git a/Catalog.sln b/Catalog.sln index 7108485..f6e15ec 100644 --- a/Catalog.sln +++ b/Catalog.sln @@ -17,6 +17,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MaddoShared", "MaddoShared\MaddoShared.csproj", "{AEBFE9E3-277C-4A7B-8448-145D1B11998B}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MaddoLibrary.Base.NET46", "MaddoLibrary\MaddoLibrary.Base.NET46\MaddoLibrary.Base.NET46.csproj", "{E93DAAE6-4AA9-4A45-AFB6-58209B3AD3C9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MaddoLibrary.WPF.NET46", "MaddoLibrary\MaddoLibrary.WPF.NET46\MaddoLibrary.WPF.NET46.csproj", "{73DA19D7-196D-4B16-B610-93250978A607}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU diff --git a/CatalogLib/CatalogLib.csproj b/CatalogLib/CatalogLib.csproj index c88f86e..f90a343 100644 --- a/CatalogLib/CatalogLib.csproj +++ b/CatalogLib/CatalogLib.csproj @@ -60,28 +60,33 @@ ..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll True - - ..\packages\SixLabors.Core.0.1.0-alpha0002\lib\netstandard1.1\SixLabors.Core.dll + + ..\packages\SixLabors.Core.1.0.0-beta0002\lib\netstandard1.1\SixLabors.Core.dll - ..\packages\SixLabors.Fonts.0.1.0-alpha0014\lib\netstandard1.3\SixLabors.Fonts.dll + ..\packages\SixLabors.Fonts.1.0.0-beta0001\lib\netstandard1.3\SixLabors.Fonts.dll + + + ..\packages\SixLabors.ImageSharp.1.0.0-beta0001\lib\netstandard1.3\SixLabors.ImageSharp.dll + + + ..\packages\SixLabors.ImageSharp.Drawing.1.0.0-beta0001\lib\netstandard1.1\SixLabors.ImageSharp.Drawing.dll - ..\packages\SixLabors.Shapes.0.1.0-alpha0018\lib\netstandard1.1\SixLabors.Shapes.dll + ..\packages\SixLabors.Shapes.1.0.0-beta0001\lib\netstandard1.1\SixLabors.Shapes.dll - ..\packages\SixLabors.Shapes.Text.0.1.0-alpha0018\lib\netstandard1.1\SixLabors.Shapes.Text.dll + ..\packages\SixLabors.Shapes.Text.1.0.0-beta0001\lib\netstandard1.1\SixLabors.Shapes.Text.dll ..\packages\System.AppContext.4.3.0\lib\net46\System.AppContext.dll - - ..\packages\System.Buffers.4.3.0\lib\netstandard1.1\System.Buffers.dll + + ..\packages\System.Buffers.4.4.0\lib\netstandard1.1\System.Buffers.dll - - ..\packages\System.Collections.Immutable.1.3.1\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll - True + + ..\packages\System.Collections.Immutable.1.4.0\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll @@ -109,7 +114,7 @@ ..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll - ..\packages\System.Memory.4.4.0-preview1-25305-02\lib\netstandard1.0\System.Memory.dll + ..\packages\System.Memory.4.4.0-preview2-25405-01\lib\netstandard1.0\System.Memory.dll ..\packages\System.Net.Http.4.3.0\lib\net46\System.Net.Http.dll @@ -118,11 +123,11 @@ ..\packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll - - ..\packages\System.Numerics.Vectors.4.3.0\lib\net46\System.Numerics.Vectors.dll + + ..\packages\System.Numerics.Vectors.4.4.0\lib\net46\System.Numerics.Vectors.dll - ..\packages\System.Runtime.CompilerServices.Unsafe.4.4.0-preview1-25305-02\lib\netstandard1.0\System.Runtime.CompilerServices.Unsafe.dll + ..\packages\System.Runtime.CompilerServices.Unsafe.4.4.0\lib\netstandard1.0\System.Runtime.CompilerServices.Unsafe.dll ..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll @@ -140,7 +145,7 @@ ..\packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net46\System.Security.Cryptography.X509Certificates.dll - ..\packages\System.ValueTuple.4.4.0-preview1-25305-02\lib\netstandard1.0\System.ValueTuple.dll + ..\packages\System.ValueTuple.4.4.0\lib\netstandard1.0\System.ValueTuple.dll @@ -153,11 +158,11 @@ + - @@ -167,10 +172,15 @@ {44465926-240d-473f-90b8-786ba4384406} CatalogVbLib + + {e93daae6-4aa9-4a45-afb6-58209b3ad3c9} + MaddoLibrary.Base.NET46 + + diff --git a/CatalogLib/Enums.cs b/CatalogLib/Enums.cs new file mode 100644 index 0000000..831a7c4 --- /dev/null +++ b/CatalogLib/Enums.cs @@ -0,0 +1,41 @@ +namespace CatalogLib +{ + public enum Positions + { + Alto, + Centro, + Basso + } + + public enum Alignments + { + Sinistra, + Centro, + Destra + } + + public enum ResizeModes + { + Bicubic, + Box, + CatmullRom, + Hermite, + Lanczos2, + Lanczos3, + Lanczos5, + Lanczos8, + MitchellNetravali, + NearestNeighbor, + Robidoux, + Spline, + Triangle, + Welch + + } + + public enum ResizeDimensions + { + LatoLungo, + LatoCorto + } +} \ No newline at end of file diff --git a/CatalogLib/ImageCreator.cs b/CatalogLib/ImageCreator.cs index d338c95..869544b 100644 --- a/CatalogLib/ImageCreator.cs +++ b/CatalogLib/ImageCreator.cs @@ -394,7 +394,7 @@ namespace CatalogLib } - switch (_picSettings.Posizione.ToUpper()) + switch (_picSettings.TextPosition.ToString().ToUpper()) { case "ALTO": yPosFromBottom1 = _picSettings.Margine; diff --git a/CatalogLib/ImgSharpCreator.cs b/CatalogLib/ImgSharpCreator.cs index 1f5ac0d..aa053a6 100644 --- a/CatalogLib/ImgSharpCreator.cs +++ b/CatalogLib/ImgSharpCreator.cs @@ -1,41 +1,76 @@ using System; using System.Collections.Generic; using System.Diagnostics; -using System.Drawing; using System.IO; using System.Linq; using System.Numerics; -using System.Text; using System.Threading.Tasks; -using ImageSharp; -using ImageSharp.Drawing; -using ImageSharp.PixelFormats; -using ImageSharp.Processing; +using MaddoLibrary.Base.Log; using SixLabors.Fonts; +using SixLabors.ImageSharp; +using SixLabors.ImageSharp.Drawing; +using SixLabors.ImageSharp.Formats.Jpeg; +using SixLabors.ImageSharp.MetaData.Profiles.Exif; +using SixLabors.ImageSharp.Processing; +using SixLabors.Primitives; using Font = SixLabors.Fonts.Font; using FontFamily = SixLabors.Fonts.FontFamily; using FontStyle = SixLabors.Fonts.FontStyle; -using Image = ImageSharp.Image; - +using Rgba32 = SixLabors.ImageSharp.Rgba32; +using Image = SixLabors.ImageSharp.Image; namespace CatalogLib { public class ImgSharpCreator : IImageProcessor { + private Image _logo; + public ImgSharpCreator() + { + if (!PicSettings.Instance.EnableLogo) return; + if (string.IsNullOrWhiteSpace(PicSettings.Instance.LogoPath)) return; + if (!File.Exists(PicSettings.Instance.LogoPath)) return; + + _logo = Image.Load(PicSettings.Instance.LogoPath); + + } private FileInfo _currentFile; public void Start(FileInfo workFile) { + + Stopwatch s = new Stopwatch(); + s.Start(); + _currentFile = workFile; using (Image image = Image.Load(workFile.FullName)/* new Image(workFile.FullName)*/) { + MaddoLogger.Log("Loaded Image: {0}", workFile.FullName); //image.Rotate(-90); + bool isRotated; + + var orientation = image.MetaData.ExifProfile.GetValue(ExifTag.Orientation); + if ((ushort)orientation.Value != 1) + { + isRotated = true; + } + else + { + isRotated = false; + } + + if (PicSettings.Instance.FotoRidimensiona) + { + Resize(image); + } + if (PicSettings.Instance.GeneraleRotazioneAutomatica) { - image.AutoOrient(); + image.Mutate(img => img.AutoOrient()); + MaddoLogger.Log("Rotated Image: {0}", workFile.FullName); + //image.AutoOrient(); //var exif = image.MetaData.ExifProfile; //if (exif != null) @@ -98,25 +133,134 @@ namespace CatalogLib if (PicSettings.Instance.EnableText) { - SetExtraText(image); + //SetTextTest(image); + SetExtraText(image, isRotated); + + + MaddoLogger.Log("Drawn text on Image: {0}", workFile.FullName); } //JpegDecoder j = new JpegDecoder(); var va = Vector.IsHardwareAccelerated; + MaddoLogger.Log("Hardware Accelerated: {0}", va); //image.Resize(PicSettings.Instance.FotoLarghezza, PicSettings.Instance.FotoAltezza); //image.Resize(2240, 2240); //var fff = FontCollection.SystemFonts.Find(PicSettings.Instance.NomeFont); //var font = new Font(fff, (float)PicSettings.Instance.DimensioneFont, FontStyle.Regular); //image.DrawText("sssssssssssssssssssssssssssssssssssssssssssssss", font, Color.Black, new Vector2(200, 200)); - image.Save(Path.Combine(PicSettings.Instance.DirectoryDestinazione, workFile.Name)); + image.Save(Path.Combine(PicSettings.Instance.DirectoryDestinazione, workFile.Name), new JpegEncoder() { Quality = PicSettings.Instance.CompressioneJpeg }); //image.Resize(200, 200).Save(""); + + MaddoLogger.Log("Saved Image: {0} to: {1}", workFile.FullName, Path.Combine(PicSettings.Instance.DirectoryDestinazione, workFile.Name)); + } + s.Stop(); + MaddoLogger.Log("Time Taken for {0}: {1}", workFile.FullName, s.Elapsed); + } + + private void Resize(Image image) + { + IResampler resampler; + switch (PicSettings.Instance.ResizeMode) + { + case ResizeModes.Bicubic: + resampler = new BicubicResampler(); + break; + case ResizeModes.Box: + resampler = new BoxResampler(); + break; + case ResizeModes.CatmullRom: + resampler = new CatmullRomResampler(); + break; + case ResizeModes.Hermite: + resampler = new HermiteResampler(); + break; + case ResizeModes.Lanczos2: + resampler = new Lanczos2Resampler(); + break; + case ResizeModes.Lanczos3: + resampler = new Lanczos3Resampler(); + break; + case ResizeModes.Lanczos5: + resampler = new Lanczos5Resampler(); + break; + case ResizeModes.Lanczos8: + resampler = new Lanczos8Resampler(); + break; + case ResizeModes.MitchellNetravali: + resampler = new MitchellNetravaliResampler(); + break; + case ResizeModes.NearestNeighbor: + resampler = new NearestNeighborResampler(); + break; + case ResizeModes.Robidoux: + resampler = new RobidouxResampler(); + break; + case ResizeModes.Spline: + resampler = new SplineResampler(); + break; + case ResizeModes.Triangle: + resampler = new TriangleResampler(); + break; + case ResizeModes.Welch: + resampler = new WelchResampler(); + break; + default: + throw new ArgumentOutOfRangeException(); + } + // todo calcolare ridimensionamento + var size = new Size(PicSettings.Instance.FotoLarghezza, PicSettings.Instance.FotoAltezza); + if (PicSettings.Instance.FotoMantieniDimensioni) + { + size = ResizeImage(image, size, PicSettings.Instance.ResizeDimension); + image.Mutate(x => x.Resize((size.Width), (size.Height), resampler)); + + //Width Formula: + //original height / original width * new width = new height + //Height Formula: + //orignal width / orignal height * new height = new width + } + else + { + + image.Mutate(x => x.Resize(PicSettings.Instance.FotoAltezza, PicSettings.Instance.FotoLarghezza, resampler)); } } - private void SetExtraText(Image image) + private Size ResizeImage(Image image, Size size, ResizeDimensions side) + { + switch (side) + { + case ResizeDimensions.LatoLungo: + size = GetResizeDimensions(new Size(image.Width, image.Height), size, image.Width > image.Height); + break; + case ResizeDimensions.LatoCorto: + size = GetResizeDimensions(new Size(image.Width, image.Height), size, image.Width <= image.Height); + break; + default: + throw new ArgumentOutOfRangeException(); + } + return size; + } + + private Size GetResizeDimensions(Size originalSize, Size newSize, bool adjustHeight) + { + return adjustHeight ? new Size(newSize.Width, originalSize.Height / originalSize.Width * newSize.Height) : new Size(originalSize.Width / originalSize.Height * newSize.Height, newSize.Height); + } + + private void SetTextTest(Image image) + { + string text = "test test test test test testtest test test test test test test"; + Font font = new Font(SystemFonts.Find("verdana"), 300, FontStyle.Regular); + image.Mutate(x => x.DrawText(text, font, Rgba32.Yellow, new PointF(2760, 3295.54932f), new TextGraphicsOptions() + { + HorizontalAlignment = HorizontalAlignment.Center + })); + } + + private void SetExtraText(Image image, bool isRotated) { if (string.IsNullOrWhiteSpace(PicSettings.Instance.TestoApplicareOrizzontale)) { @@ -124,6 +268,24 @@ namespace CatalogLib return; } + string text; + if (isRotated) + { + if (PicSettings.Instance.TestoApplicareOrizzontale.Contains("$_")) + { + text = PicSettings.Instance.TestoApplicareOrizzontale.Replace("$_", "\r\n"); + } + else + { + text = PicSettings.Instance.TestoApplicareOrizzontale.Replace("$_", ""); + } + + } + else + { + text = PicSettings.Instance.TestoApplicareOrizzontale.Replace("$_", ""); + } + var fo = SixLabors.Fonts.SystemFonts.Find(PicSettings.Instance.NomeFont); @@ -131,12 +293,27 @@ namespace CatalogLib //var fff = FontCollection.SystemFonts.Find(PicSettings.Instance.NomeFont); //var fff = FontCollection.SystemFonts.Find("Segoe Print"); - var font = new Font(fo, (float)PicSettings.Instance.DimensioneFont, FontStyle.Regular); + Font font; + + if (!PicSettings.Instance.Grassetto) + { + font = new Font(fo, (float)PicSettings.Instance.DimensioneFont, FontStyle.Regular); + } + else + { + font = new Font(fo, (float)PicSettings.Instance.DimensioneFont, FontStyle.Bold); + } + // todo corsivo + + + //var font = new Font(fff, 8f, FontStyle.Regular); //Color c = Color.FromHex(FlipRgbString(PicSettings.Instance.ColoreTestoRGB)); Rgba32 g = Rgba32.FromHex(FlipRgbString(PicSettings.Instance.ColoreTestoRGB)); + + Rgba32 gBack = Rgba32.Black; // todo alpha //TextMeasurer measurer = new TextMeasurer(); //var size = measurer.MeasureText(PicSettings.Instance.TestoApplicareOrizzontale, font, 72); @@ -147,13 +324,197 @@ namespace CatalogLib Vector2 center = new Vector2(image.Width / 2, image.Height / 2); //center horizontally, 10px down - var size = TextMeasurer.Measure(PicSettings.Instance.TestoApplicareOrizzontale, new RendererOptions(font)); + var size = TextMeasurer.Measure(text, new RendererOptions(font)); + + var larghezzaStandard = size.Width; + var dimensioneStandard = (int)Math.Round(PicSettings.Instance.DimensioneFont); + if (size.Width > image.Width) + { + var c = dimensioneStandard; + do + { + if (c > 20) + { + c -= 5; + } + else + { + c -= 1; + } + + if (PicSettings.Instance.Grassetto) + { + font = new Font(fo, c, FontStyle.Bold); + } + else + { + font = new Font(fo, c, FontStyle.Regular); + } + size = TextMeasurer.Measure(text, + new RendererOptions(font)); + if (size.Width < image.Width) + { + larghezzaStandard = (int)Math.Round(size.Width); + break; + } + if (c <= 5) + { + break; + } + } while (dimensioneStandard == c); + } + + float yPosFromBottom = 0; + + switch (PicSettings.Instance.TextPosition) + { + case Positions.Alto: + yPosFromBottom = PicSettings.Instance.Margine; + break; + case Positions.Basso: + yPosFromBottom = image.Height - size.Height - (image.Height * PicSettings.Instance.Margine / 100); + break; + } + + float xCenterofImg = 0; + + // stringformat + + switch (PicSettings.Instance.TextAlignment) + { + case Alignments.Sinistra: + xCenterofImg = PicSettings.Instance.Margine + (larghezzaStandard / 2); + if ((larghezzaStandard / 2) > (image.Width / 2) - PicSettings.Instance.Margine) + { + xCenterofImg = image.Width / 2; + } + break; + case Alignments.Centro: + xCenterofImg = image.Width / 2; + break; + case Alignments.Destra: + xCenterofImg = image.Width - PicSettings.Instance.Margine - larghezzaStandard / 2; + + if (larghezzaStandard / 2 > image.Width / 2 - PicSettings.Instance.Margine) + { + xCenterofImg = image.Width / 2; + } + + break; + } + // stringformat alignment center + + if (PicSettings.Instance.Grassetto) + { + font = new Font(fo, dimensioneStandard, FontStyle.Bold); + } + else + { + font = new Font(fo, dimensioneStandard, FontStyle.Regular); + } + + image.Mutate(x => x.DrawText(text, font, gBack, new PointF((float)Math.Round(xCenterofImg + 1), (float)Math.Round(yPosFromBottom + 1)), new TextGraphicsOptions() + { + HorizontalAlignment = HorizontalAlignment.Center + })); + + image.Mutate(x => x.DrawText(text, font, g, new PointF((float)Math.Round(xCenterofImg), (float)Math.Round(yPosFromBottom)), new TextGraphicsOptions() + { + HorizontalAlignment = HorizontalAlignment.Center + })); + + return; + + float scalingFactor = Math.Min(image.Width / size.Width, image.Height / size.Height); Font scaledFont = new Font(font, scalingFactor * font.Size); + image.Mutate(x => + x.DrawText(PicSettings.Instance.TestoApplicareOrizzontale, scaledFont, g, center, + new TextGraphicsOptions(true) + { + HorizontalAlignment = HorizontalAlignment.Center, + VerticalAlignment = VerticalAlignment.Bottom + })); + //image.DrawText(PicSettings.Instance.TestoApplicareOrizzontale, scaledFont, g, center, new TextGraphicsOptions(true) { HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Bottom }); - image.DrawText(PicSettings.Instance.TestoApplicareOrizzontale, scaledFont, g, center, new TextGraphicsOptions(true) { HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Bottom }); + } + + private void AddLogo(Image image) + { + //if (string.IsNullOrWhiteSpace(PicSettings.Instance.LogoPath)) return; + //if (!File.Exists(PicSettings.Instance.LogoPath)) return; + //using (Image logo = Image.Load(PicSettings.Instance.LogoPath)) + //{ + // Size size = new Size(); + // Point location = new Point(); + // image.Mutate(x => x.DrawImage(logo, size, location, new GraphicsOptions() + // { + + // })); + + //} + + Size size = new Size(); + Point location = new Point(); + + if (_logo != null) + { + var width = PicSettings.Instance.LogoWidth; + var height = PicSettings.Instance.LogoHeight; + var heightFactor = _logo.Height / height; + var widthFactor = _logo.Width / width; + var newLogoSize = new Size(); + + newLogoSize = GetResizeDimensions(new Size(_logo.Width, _logo.Height), new Size(width, height), PicSettings.Instance.LogoResizeSide.Equals(ResizeDimensions.LatoCorto)); + //todo riguardare perché non torna cosa ho fatto + + int margineUsato = 0; + int margineL; + bool inPercentualeL; + + inPercentualeL = PicSettings.Instance.LogoMargin.EndsWith("%"); + if (inPercentualeL) + { + margineL = int.Parse(PicSettings.Instance.LogoMargin.Replace("%", "")); + } + else + { + margineL = int.Parse(PicSettings.Instance.LogoMargin); + } + + switch (PicSettings.Instance.LogoPosition) + { + case Positions.Alto: + break; + case Positions.Centro: + break; + case Positions.Basso: + break; + default: + throw new ArgumentOutOfRangeException(); + } + + switch (PicSettings.Instance.LogoAlignment) + { + case Alignments.Sinistra: + location.X = margineUsato; + break; + case Alignments.Centro: + //location.X = image.Width - + break; + case Alignments.Destra: + break; + default: + throw new ArgumentOutOfRangeException(); + } + image.Mutate(x => x.DrawImage(_logo, size, location, new GraphicsOptions())); + + + + + } } @@ -166,7 +527,7 @@ namespace CatalogLib var size = TextMeasurer.Measure("Test test test test test", new RendererOptions(font)); float scalingFactor = Math.Min(image.Width / size.Width, image.Height / size.Height); Font scaledFont = new Font(font, scalingFactor * font.Size); - image.DrawText("Test test test test test", scaledFont, g, center, new TextGraphicsOptions(true) { HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Bottom }); + image.Mutate(x => x.DrawText("Test test test test test", scaledFont, g, center, new TextGraphicsOptions(true) { HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Bottom })); } private string FlipRgbString(string originalString) diff --git a/CatalogLib/MaddoLogger.cs b/CatalogLib/MaddoLogger.cs deleted file mode 100644 index 3eba4b7..0000000 --- a/CatalogLib/MaddoLogger.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace CatalogLib -{ - public class MaddoLogger - { - public void AddToLog(string data) - { - string dest = Path.Combine(PicSettings.Instance.DirectoryDestinazione, "log.txt"); - - } - } -} diff --git a/CatalogLib/PicSettings.cs b/CatalogLib/PicSettings.cs index 9453628..795b004 100644 --- a/CatalogLib/PicSettings.cs +++ b/CatalogLib/PicSettings.cs @@ -6,7 +6,7 @@ using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; - +using MaddoLibrary.Base.Log; using Newtonsoft.Json; namespace CatalogLib @@ -71,6 +71,11 @@ namespace CatalogLib SetBase(key, value); } + public void SetFloat(string key, float value) + { + SetBase(key, value); + } + public void Set(string key, T value) { SetBase(key, value); @@ -134,6 +139,23 @@ namespace CatalogLib return (double)_settingsDict[key]; } + public float GetFloat(string key, float defaultValue = 0) + { + if (!_settingsDict.ContainsKey(key)) + { + SetFloat(key, defaultValue); + } + + if (_settingsDict[key] is float f) return f; + MaddoLogger.LogError("Error while parsing {0}", key); + + float fl = 0; + SetFloat(key, float.TryParse(_settingsDict[key].ToString(), out f) ? fl : defaultValue); + return (float)_settingsDict[key]; + } + + + public T Get(string key, T defaultValue) { if (!_settingsDict.ContainsKey(key)) @@ -146,6 +168,8 @@ namespace CatalogLib } + + public string GetString(string key, string defaultValue = "") { if (!_settingsDict.ContainsKey(key)) @@ -184,7 +208,10 @@ namespace CatalogLib //return _settingsDict.ContainsKey(key) ? _settingsDict[key] : defaultValue; } - + public T GetEnum(string name, T defaultValue) + { + return (T)Enum.Parse(typeof(T), GetString(name, defaultValue.ToString())); + } public void SetDefaults() { @@ -193,8 +220,8 @@ namespace CatalogLib public bool DirAggiornaSottoDirectory { - get { return this.GetBool("DirAggiornaSottoDirectory", true); } - set { this.SetBool("DirAggiornaSottoDirectory", value); } + get => this.GetBool("DirAggiornaSottoDirectory", true); + set => this.SetBool("DirAggiornaSottoDirectory", value); } public bool Grassetto @@ -262,12 +289,8 @@ namespace CatalogLib get { return 0; } } - public string Posizione - { - get { return string.Empty; } - } - + public DateTime DataPartenza { get; set; } public string TestoOrario { get; internal set; } public int DimStandard { get; internal set; } @@ -290,7 +313,11 @@ namespace CatalogLib set { SetString("DirDestinazione", value); } } - public float Margine { get; set; } + public int Margine + { + get => GetInt("Margin", 1); + set => SetInt("Margin", value); + } public float MargVert { get; set; } public string Allineamento { get; set; } @@ -432,8 +459,90 @@ namespace CatalogLib } } + public bool FotoRidimensiona + { + get => GetBool("FotoRidimensiona", false); + set => Set("FotoRidimensiona", value); + } + + public Positions TextPosition + { + get => GetEnum("TextPosition", Positions.Alto); //(Positions)Enum.Parse(typeof(Positions), GetString("TextPosition", Positions.Alto.ToString())); + set => SetString("TextPosition", value.ToString()); + } + + public Alignments TextAlignment + { + get => GetEnum("TextAlignment", Alignments.Centro); + set => SetString("TextAlignment", value.ToString()); + } + + public bool Threading + { + get => GetBool("Threading", true); + set => SetBool("Threading", value); + } + + public ResizeModes ResizeMode + { + get => GetEnum("ResizeMode", ResizeModes.Bicubic); + set => SetString("ResizeMode", value.ToString()); + } + + public ResizeDimensions ResizeDimension + { + get => GetEnum("ResizeDimension", CatalogLib.ResizeDimensions.LatoCorto); + set => SetString("ResizeDimension", value.ToString()); + } + + public string LogoPath + { + get => GetString("LogoPath"); + set => SetString("LogoPath", value); + } + + public int LogoWidth + { + get => GetInt("LogoWidth"); + set => SetInt("LogoWidth", value); + } + + public int LogoHeight + { + get => GetInt("LogoHeight"); + set => SetInt("LogoHeight", value); + } + + public string LogoMargin + { + get => GetString("LogoMargin"); + set => SetString("LogoMargin", value); + } + + public Positions LogoPosition + { + get => GetEnum("LogoPositions", Positions.Alto); + set => SetString("LogoPositions", value.ToString()); + } + + public Alignments LogoAlignment + { + get => GetEnum("LogoAlignments", Alignments.Centro); + set => SetString("LogoAlignments", value.ToString()); + } + + public ResizeDimensions LogoResizeSide + { + get => GetEnum("LogoResizeMode", ResizeDimensions.LatoCorto); + set => SetString("LogoResizeMode", value.ToString()); + } + #endregion + #region Enums + + + #endregion } } \ No newline at end of file diff --git a/CatalogLib/app.config b/CatalogLib/app.config index b5d559f..3fcefdf 100644 --- a/CatalogLib/app.config +++ b/CatalogLib/app.config @@ -16,11 +16,11 @@ - + - + diff --git a/CatalogLib/packages.config b/CatalogLib/packages.config index 8beea34..3740a21 100644 --- a/CatalogLib/packages.config +++ b/CatalogLib/packages.config @@ -1,20 +1,20 @@  - - - - - - + + + + + + - + - + @@ -29,18 +29,18 @@ - + - + - + @@ -57,7 +57,7 @@ - + \ No newline at end of file diff --git a/CatalogLib/stylecop.json b/CatalogLib/stylecop.json new file mode 100644 index 0000000..c67c0db --- /dev/null +++ b/CatalogLib/stylecop.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://raw.githubusercontent.com/DotNetAnalyzers/StyleCopAnalyzers/master/StyleCop.Analyzers/StyleCop.Analyzers/Settings/stylecop.schema.json", + "settings": + { + "orderingRules": + { + "usingDirectivesPlacement": "outsideNamespace" + }, + "documentationRules": + { + "xmlHeader": false, + "copyrightText": "Copyright (c) Six Labors and contributors.\nLicensed under the Apache License, Version 2.0." + } + } +} \ No newline at end of file diff --git a/MaddoLibrary b/MaddoLibrary new file mode 160000 index 0000000..5987cc2 --- /dev/null +++ b/MaddoLibrary @@ -0,0 +1 @@ +Subproject commit 5987cc26521d839bf81bdaab19d101488294da19 diff --git a/WPFCatalog/App.config b/WPFCatalog/App.config index ff1c544..ca0daff 100644 --- a/WPFCatalog/App.config +++ b/WPFCatalog/App.config @@ -20,11 +20,11 @@ - + - + @@ -38,6 +38,14 @@ + + + + + + + + diff --git a/WPFCatalog/Controls/GeneralSettingsControl.xaml b/WPFCatalog/Controls/GeneralSettingsControl.xaml index 9f511c8..bfa637d 100644 --- a/WPFCatalog/Controls/GeneralSettingsControl.xaml +++ b/WPFCatalog/Controls/GeneralSettingsControl.xaml @@ -7,10 +7,24 @@ xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro" xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks" + xmlns:System="clr-namespace:System;assembly=mscorlib" + xmlns:catalogLib="clr-namespace:CatalogLib;assembly=CatalogLib" mc:Ignorable="d" d:DesignHeight="900" d:DesignWidth="500" d:DataContext="{d:DesignInstance wpfCatalog:MainWindowViewModel}" > + + + + + + + + + + + + @@ -65,6 +79,7 @@ + @@ -80,6 +95,7 @@ + @@ -112,6 +128,8 @@ + + @@ -125,16 +143,19 @@ - diff --git a/WPFCatalog/Controls/TextSettingsControl.xaml b/WPFCatalog/Controls/TextSettingsControl.xaml index 27566c6..7d7ac19 100644 --- a/WPFCatalog/Controls/TextSettingsControl.xaml +++ b/WPFCatalog/Controls/TextSettingsControl.xaml @@ -6,12 +6,24 @@ xmlns:wpfCatalog="clr-namespace:WPFCatalog" xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro" - mc:Ignorable="d" + xmlns:System="clr-namespace:System;assembly=mscorlib" + xmlns:catalogLib="clr-namespace:CatalogLib;assembly=CatalogLib" + mc:Ignorable="d" d:DesignHeight="900" d:DesignWidth="500" d:DataContext="{d:DesignInstance wpfCatalog:MainWindowViewModel}" > + + + + + + + + + + @@ -42,8 +54,8 @@ Text="{Binding FontName}" > - - + + @@ -81,28 +93,8 @@ - - - - - - - - - - - - - - - - - - + + @@ -117,9 +109,19 @@ @@ -135,28 +137,28 @@ - + diff --git a/WPFCatalog/MainWindow.xaml b/WPFCatalog/MainWindow.xaml index e9fb26c..c7cd8fe 100644 --- a/WPFCatalog/MainWindow.xaml +++ b/WPFCatalog/MainWindow.xaml @@ -24,7 +24,7 @@ - + @@ -67,7 +67,7 @@ - + @@ -182,12 +182,15 @@ - - + + - +