From 1967be171bc52de1b7927e07717da301834153f1 Mon Sep 17 00:00:00 2001 From: FastReports-bot Date: Fri, 22 Mar 2024 13:13:06 +0300 Subject: [PATCH] * sync 3/22/2024 version: 2024.1.10 --- .../FastReport.OpenSource.Demos.sln | 7 - .../Controllers/HomeController.cs | 138 ------- .../FastReport.OpenSource.MVC.3.1.csproj | 17 - .../FastReport.OpenSource.MVC.3.1.sln | 25 -- .../Models/HomeModel.cs | 11 - .../FastReport.OpenSource.MVC.3.1/Program.cs | 20 - .../Properties/launchSettings.json | 27 -- .../FastReport.OpenSource.MVC.3.1/Startup.cs | 56 --- .../Views/Home/Index.cshtml | 27 -- .../Views/Shared/_Layout.cshtml | 13 - .../Views/_ViewImports.cshtml | 3 - .../Views/_ViewStart.cshtml | 3 - .../appsettings.Development.json | 9 - .../appsettings.json | 10 - .../wwwroot/css/site.css | 96 ----- .../wwwroot/favicon.ico | Bin 5430 -> 0 bytes .../wwwroot/logo.png | Bin 16446 -> 0 bytes Extras/Core/FastReport.Data/Avalonia.props | 26 ++ .../FastReport.Avalonia.Data.Cassandra.csproj | 12 + ...astReport.OpenSource.Data.Cassandra.csproj | 2 +- ...FastReport.Avalonia.Data.ClickHouse.csproj | 12 + ...stReport.OpenSource.Data.ClickHouse.csproj | 2 +- .../FastReport.Avalonia.Data.Couchbase.csproj | 12 + ...astReport.OpenSource.Data.Couchbase.csproj | 2 +- ...tReport.Avalonia.Data.ElasticSearch.csproj | 12 + ...eport.OpenSource.Data.ElasticSearch.csproj | 2 +- .../FastReport.Avalonia.Data.Excel.csproj | 12 + .../FastReport.OpenSource.Data.Excel.csproj | 2 +- .../FastReport.Avalonia.Data.Firebird.csproj | 12 + ...FastReport.OpenSource.Data.Firebird.csproj | 2 +- .../FastReport.Avalonia.Data.Json.csproj | 16 + .../FastReport.OpenSource.Data.Json.csproj | 2 +- .../FastReport.Avalonia.Data.Linter.csproj | 12 + .../FastReport.OpenSource.Data.Linter.csproj | 2 +- .../FastReport.Avalonia.Data.MongoDB.csproj | 12 + .../FastReport.OpenSource.Data.MongoDB.csproj | 2 +- .../FastReport.OpenSource.Data.MsSql.csproj | 2 +- .../FastReport.Avalonia.Data.MySql.csproj | 12 + .../FastReport.OpenSource.Data.MySql.csproj | 2 +- .../FastReport.Avalonia.Data.Odbc.csproj | 12 + .../FastReport.OpenSource.Data.Odbc.csproj | 2 +- ...tReport.Avalonia.Data.OracleODPCore.csproj | 12 + ...eport.OpenSource.Data.OracleODPCore.csproj | 2 +- .../FastReport.Avalonia.Data.Postgres.csproj | 12 + ...FastReport.OpenSource.Data.Postgres.csproj | 2 +- .../FastReport.Avalonia.Data.RavenDB.csproj | 12 + .../FastReport.OpenSource.Data.RavenDB.csproj | 2 +- .../FastReport.Avalonia.Data.SQLite.csproj | 12 + .../FastReport.OpenSource.Data.SQLite.csproj | 2 +- Extras/Core/FastReport.Data/WPF.props | 4 +- .../FastReport.Core.Plugins.WebP.csproj | 2 +- .../FastReport.CoreWin.Plugins.WebP.csproj | 23 -- .../FastReport.OpenSource.Plugins.WebP.csproj | 2 +- .../FastReport.Plugins.WebP.csproj | 4 +- ...t.OpenSource.Export.PdfSimple.Tests.csproj | 2 +- ...tReport.OpenSource.Export.PdfSimple.csproj | 2 +- FastReport.Base/AssemblyInitializer.cs | 2 +- FastReport.Base/Barcode/BarcodeDatamatrix.cs | 4 +- FastReport.Base/Barcode/BarcodeGS1.cs | 6 +- FastReport.Base/Code/AssemblyDescriptor.cs | 2 +- FastReport.Base/Engine/ReportEngine.Pages.cs | 4 +- FastReport.Base/Export/ExportBase.cs | 2 +- FastReport.Base/Preview/PreparedPages.cs | 25 +- FastReport.Base/Report.cs | 33 +- FastReport.Base/ReportPage.cs | 32 +- FastReport.Base/Table/TableBase.cs | 8 +- FastReport.Base/Utils/Config.cs | 12 +- FastReport.Base/Utils/Converter.cs | 37 +- FastReport.Base/Utils/DrawUtils.Win32.cs | 55 --- FastReport.Base/Utils/DrawUtils.cs | 81 ++--- .../Utils/FRPrivateFontCollection.cs | 192 +--------- FastReport.Base/Utils/FontManager.Gdi.cs | 43 +++ .../Utils/FontManager.Internals.cs | 66 ++++ FastReport.Base/Utils/FontManager.cs | 143 ++++++++ .../{src => }/Directory.Build.props | 11 +- FastReport.Compat/FastReport.Compat.sln | 51 --- .../FastReport.Compat.csproj | 39 ++ FastReport.Compat/FastReport.OpenSource.snk | Bin 596 -> 0 bytes .../netcoreapp3.0/FastReport.Compat.targets | 3 - FastReport.Compat/Nuget/_._ | 0 FastReport.Compat/Nuget/template.nuspec | 10 - FastReport.Compat/UsedPackages.version | 17 - FastReport.Compat/_Build_Compat_Packages.bat | 14 - FastReport.Compat/build_WPF.bat | 2 - FastReport.Compat/frlogo192.png | Bin 25992 -> 0 bytes .../shared/Compiler/CSharpCodeProvider.cs | 0 .../shared/Compiler/CodeDomProvider.cs | 0 .../shared/Compiler/CodeGenerator.cs | 0 .../shared/Compiler/CompilationEventArgs.cs | 0 .../shared/Compiler/CompilerError.cs | 0 .../shared/Compiler/CompilerParameters.cs | 0 .../shared/Compiler/CompilerResults.cs | 0 .../shared/Compiler/IAssemblyLoadResolver.cs | 0 .../shared/Compiler/TempFileCollection.cs | 0 .../shared/Compiler/VBCodeProvider.cs | 0 .../shared/DotNetClasses/Color.Full.cs | 0 .../shared/DotNetClasses/GdiGraphics.cs | 0 .../shared/DotNetClasses/IGraphics.cs | 0 .../shared/DotNetClasses/UITypeEditor.cs | 0 .../shared/TypeConverters/Color.Core.cs | 0 .../shared/TypeConverters/ColorConverter.cs | 0 .../FontConverter.IFontFamilyMatcher.cs | 25 ++ .../shared/TypeConverters/FontConverter.cs | 101 +----- .../shared/TypeConverters/SizeConverter.cs | 0 .../WindowsForms/ComboBox.ObjectCollection.cs | 0 .../shared/WindowsForms/ItemArray.cs | 0 .../WindowsForms/ListBox.ObjectCollection.cs | 0 .../ListBox.SelectedIndexCollection.cs | 0 .../ListBox.SelectedObjectCollection.cs | 0 .../WindowsFormsReplacement.BindingSource.cs | 0 ...ndowsFormsReplacement.ListBindingHelper.cs | 0 .../WindowsForms/WindowsFormsReplacement.cs | 0 .../FastReport.Compat-Windows.csproj | 42 --- .../FastReport.Compat.csproj | 23 -- .../FastReport.OpenSource.Web.csproj | 2 +- FastReport.OpenSource.sln | 11 +- .../FastReport.OpenSource.csproj | 33 +- FastReport.OpenSource/Report.Core.cs | 10 - .../FRPrivateFontCollection.OpenSource.cs | 34 -- FastReport/Resources/bo.png | Bin 0 -> 905 bytes FastReport/Resources/en.xml | 1 + Localization/Russian.frl | 1 + Pack/BuildScripts/CakeAPI/CakeAPI.cs | 26 +- Pack/BuildScripts/Tasks/BaseTasks.cs | 307 +++++++++------- Pack/BuildScripts/Tasks/Constants.cs | 6 +- .../BuildScripts/Tasks/LocalizationPackage.cs | 112 +++--- Pack/BuildScripts/Tasks/OpenSourceTasks.cs | 173 ++++----- Pack/BuildScripts/Tasks/Tests.cs | 19 +- Pack/BuildScripts/Tools/DebugAttribute.cs | 26 +- Pack/BuildScripts/Tools/DependsOnAttribute.cs | 27 +- Pack/BuildScripts/Tools/Graph.cs | 171 +++++---- Pack/BuildScripts/Tools/Startup.cs | 343 +++++++++--------- Pack/BuildScripts/buildScript.csproj | 20 +- .../build/FastReport.OpenSource.props | 1 + .../FastReport.Tests.OpenSource.csproj | 2 +- UsedPackages.version | 49 +-- 136 files changed, 1343 insertions(+), 1859 deletions(-) delete mode 100644 Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Controllers/HomeController.cs delete mode 100644 Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/FastReport.OpenSource.MVC.3.1.csproj delete mode 100644 Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/FastReport.OpenSource.MVC.3.1.sln delete mode 100644 Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Models/HomeModel.cs delete mode 100644 Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Program.cs delete mode 100644 Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Properties/launchSettings.json delete mode 100644 Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Startup.cs delete mode 100644 Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Views/Home/Index.cshtml delete mode 100644 Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Views/Shared/_Layout.cshtml delete mode 100644 Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Views/_ViewImports.cshtml delete mode 100644 Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Views/_ViewStart.cshtml delete mode 100644 Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/appsettings.Development.json delete mode 100644 Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/appsettings.json delete mode 100644 Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/wwwroot/css/site.css delete mode 100644 Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/wwwroot/favicon.ico delete mode 100644 Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/wwwroot/logo.png create mode 100644 Extras/Core/FastReport.Data/Avalonia.props create mode 100644 Extras/Core/FastReport.Data/FastReport.Data.Cassandra/FastReport.Avalonia.Data.Cassandra.csproj create mode 100644 Extras/Core/FastReport.Data/FastReport.Data.ClickHouse/FastReport.Avalonia.Data.ClickHouse.csproj create mode 100644 Extras/Core/FastReport.Data/FastReport.Data.Couchbase/FastReport.Avalonia.Data.Couchbase.csproj create mode 100644 Extras/Core/FastReport.Data/FastReport.Data.ElasticSearch/FastReport.Avalonia.Data.ElasticSearch.csproj create mode 100644 Extras/Core/FastReport.Data/FastReport.Data.Excel/FastReport.Avalonia.Data.Excel.csproj create mode 100644 Extras/Core/FastReport.Data/FastReport.Data.Firebird/FastReport.Avalonia.Data.Firebird.csproj create mode 100644 Extras/Core/FastReport.Data/FastReport.Data.Json/FastReport.Avalonia.Data.Json.csproj create mode 100644 Extras/Core/FastReport.Data/FastReport.Data.Linter/FastReport.Avalonia.Data.Linter.csproj create mode 100644 Extras/Core/FastReport.Data/FastReport.Data.MongoDB/FastReport.Avalonia.Data.MongoDB.csproj create mode 100644 Extras/Core/FastReport.Data/FastReport.Data.MySql/FastReport.Avalonia.Data.MySql.csproj create mode 100644 Extras/Core/FastReport.Data/FastReport.Data.Odbc/FastReport.Avalonia.Data.Odbc.csproj create mode 100644 Extras/Core/FastReport.Data/FastReport.Data.OracleODPCore/FastReport.Avalonia.Data.OracleODPCore.csproj create mode 100644 Extras/Core/FastReport.Data/FastReport.Data.Postgres/FastReport.Avalonia.Data.Postgres.csproj create mode 100644 Extras/Core/FastReport.Data/FastReport.Data.RavenDB/FastReport.Avalonia.Data.RavenDB.csproj create mode 100644 Extras/Core/FastReport.Data/FastReport.Data.SQLite/FastReport.Avalonia.Data.SQLite.csproj delete mode 100644 Extras/Core/FastReport.Plugin/FastReport.Plugins.WebP/FastReport.CoreWin.Plugins.WebP.csproj delete mode 100644 FastReport.Base/Utils/DrawUtils.Win32.cs create mode 100644 FastReport.Base/Utils/FontManager.Gdi.cs create mode 100644 FastReport.Base/Utils/FontManager.Internals.cs create mode 100644 FastReport.Base/Utils/FontManager.cs rename FastReport.Compat/{src => }/Directory.Build.props (80%) delete mode 100644 FastReport.Compat/FastReport.Compat.sln create mode 100644 FastReport.Compat/FastReport.Compat/FastReport.Compat.csproj delete mode 100644 FastReport.Compat/FastReport.OpenSource.snk delete mode 100644 FastReport.Compat/Nuget/FastReport.Compat/buildTransitive/netcoreapp3.0/FastReport.Compat.targets delete mode 100644 FastReport.Compat/Nuget/_._ delete mode 100644 FastReport.Compat/Nuget/template.nuspec delete mode 100644 FastReport.Compat/UsedPackages.version delete mode 100644 FastReport.Compat/_Build_Compat_Packages.bat delete mode 100644 FastReport.Compat/build_WPF.bat delete mode 100644 FastReport.Compat/frlogo192.png rename FastReport.Compat/{src => }/shared/Compiler/CSharpCodeProvider.cs (100%) rename FastReport.Compat/{src => }/shared/Compiler/CodeDomProvider.cs (100%) rename FastReport.Compat/{src => }/shared/Compiler/CodeGenerator.cs (100%) rename FastReport.Compat/{src => }/shared/Compiler/CompilationEventArgs.cs (100%) rename FastReport.Compat/{src => }/shared/Compiler/CompilerError.cs (100%) rename FastReport.Compat/{src => }/shared/Compiler/CompilerParameters.cs (100%) rename FastReport.Compat/{src => }/shared/Compiler/CompilerResults.cs (100%) rename FastReport.Compat/{src => }/shared/Compiler/IAssemblyLoadResolver.cs (100%) rename FastReport.Compat/{src => }/shared/Compiler/TempFileCollection.cs (100%) rename FastReport.Compat/{src => }/shared/Compiler/VBCodeProvider.cs (100%) rename FastReport.Compat/{src => }/shared/DotNetClasses/Color.Full.cs (100%) rename FastReport.Compat/{src => }/shared/DotNetClasses/GdiGraphics.cs (100%) rename FastReport.Compat/{src => }/shared/DotNetClasses/IGraphics.cs (100%) rename FastReport.Compat/{src => }/shared/DotNetClasses/UITypeEditor.cs (100%) rename FastReport.Compat/{src => }/shared/TypeConverters/Color.Core.cs (100%) rename FastReport.Compat/{src => }/shared/TypeConverters/ColorConverter.cs (100%) create mode 100644 FastReport.Compat/shared/TypeConverters/FontConverter.IFontFamilyMatcher.cs rename FastReport.Compat/{src => }/shared/TypeConverters/FontConverter.cs (83%) rename FastReport.Compat/{src => }/shared/TypeConverters/SizeConverter.cs (100%) rename FastReport.Compat/{src => }/shared/WindowsForms/ComboBox.ObjectCollection.cs (100%) rename FastReport.Compat/{src => }/shared/WindowsForms/ItemArray.cs (100%) rename FastReport.Compat/{src => }/shared/WindowsForms/ListBox.ObjectCollection.cs (100%) rename FastReport.Compat/{src => }/shared/WindowsForms/ListBox.SelectedIndexCollection.cs (100%) rename FastReport.Compat/{src => }/shared/WindowsForms/ListBox.SelectedObjectCollection.cs (100%) rename FastReport.Compat/{src => }/shared/WindowsForms/WindowsFormsReplacement.BindingSource.cs (100%) rename FastReport.Compat/{src => }/shared/WindowsForms/WindowsFormsReplacement.ListBindingHelper.cs (100%) rename FastReport.Compat/{src => }/shared/WindowsForms/WindowsFormsReplacement.cs (100%) delete mode 100644 FastReport.Compat/src/FastReport.Compat-Windows/FastReport.Compat-Windows.csproj delete mode 100644 FastReport.Compat/src/FastReport.Compat/FastReport.Compat.csproj delete mode 100644 FastReport.OpenSource/Utils/FRPrivateFontCollection.OpenSource.cs create mode 100644 FastReport/Resources/bo.png diff --git a/Demos/OpenSource/FastReport.OpenSource.Demos.sln b/Demos/OpenSource/FastReport.OpenSource.Demos.sln index 9a1a5f94..9b6bd567 100644 --- a/Demos/OpenSource/FastReport.OpenSource.Demos.sln +++ b/Demos/OpenSource/FastReport.OpenSource.Demos.sln @@ -19,8 +19,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FastReport.OpenSource.Angul EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FastReport.OpenSource.Angular.OnlineDesigner", "SPA\FastReport.OpenSource.Angular.OnlineDesigner\FastReport.OpenSource.Angular.OnlineDesigner.csproj", "{3ECD074B-F901-4652-A5F8-9A75C1742A01}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FastReport.OpenSource.MVC.3.1", "MVC\FastReport.OpenSource.MVC.3.1\FastReport.OpenSource.MVC.3.1.csproj", "{1FC3D63E-3330-4682-86B1-B8AC33148434}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FastReport.OpenSource.MVC.6.0", "MVC\FastReport.OpenSource.MVC.6.0\FastReport.OpenSource.MVC.6.0.csproj", "{46EBA444-E129-4DE0-AAAC-D0B70A2B2C50}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FastReport.OpenSource.MVC.DataBase", "MVC\FastReport.OpenSource.MVC.DataBase\FastReport.OpenSource.MVC.DataBase.csproj", "{EE936C85-E2CB-4C60-99BD-D9C97EB512AA}" @@ -65,10 +63,6 @@ Global {3ECD074B-F901-4652-A5F8-9A75C1742A01}.Debug|Any CPU.Build.0 = Debug|Any CPU {3ECD074B-F901-4652-A5F8-9A75C1742A01}.Release|Any CPU.ActiveCfg = Release|Any CPU {3ECD074B-F901-4652-A5F8-9A75C1742A01}.Release|Any CPU.Build.0 = Release|Any CPU - {1FC3D63E-3330-4682-86B1-B8AC33148434}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1FC3D63E-3330-4682-86B1-B8AC33148434}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1FC3D63E-3330-4682-86B1-B8AC33148434}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1FC3D63E-3330-4682-86B1-B8AC33148434}.Release|Any CPU.Build.0 = Release|Any CPU {46EBA444-E129-4DE0-AAAC-D0B70A2B2C50}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {46EBA444-E129-4DE0-AAAC-D0B70A2B2C50}.Debug|Any CPU.Build.0 = Debug|Any CPU {46EBA444-E129-4DE0-AAAC-D0B70A2B2C50}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -110,7 +104,6 @@ Global {FBE1BD2F-6CDA-445A-AA80-BFA5B751605A} = {3BA9736B-3803-4CFB-B785-FDCC807CBEA4} {2FC677B2-A00D-46E2-B59B-91303739D0B3} = {3BA9736B-3803-4CFB-B785-FDCC807CBEA4} {3ECD074B-F901-4652-A5F8-9A75C1742A01} = {3BA9736B-3803-4CFB-B785-FDCC807CBEA4} - {1FC3D63E-3330-4682-86B1-B8AC33148434} = {BABE4B9D-8D3C-408C-A33E-3DC0C0F48A70} {46EBA444-E129-4DE0-AAAC-D0B70A2B2C50} = {BABE4B9D-8D3C-408C-A33E-3DC0C0F48A70} {EE936C85-E2CB-4C60-99BD-D9C97EB512AA} = {BABE4B9D-8D3C-408C-A33E-3DC0C0F48A70} {3379CA52-56E8-48F3-B94F-75612FA72E0B} = {7A3BB37B-9F8C-4E29-AF23-740BC51EAAF3} diff --git a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Controllers/HomeController.cs b/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Controllers/HomeController.cs deleted file mode 100644 index cd1cebba..00000000 --- a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Controllers/HomeController.cs +++ /dev/null @@ -1,138 +0,0 @@ -using Demo.MVC.NetCore31.Models; -using FastReport.Web; -using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.Mvc; -using System.IO; -using MVC.Service; - -namespace Demo.MVC.NetCore31.Controllers -{ - [Route("")] - public class HomeController : Controller - { - readonly IWebHostEnvironment _hostingEnvironment; - readonly DataSetService _dataSetService; - public HomeController(IWebHostEnvironment hostingEnvironment, DataSetService dataSetService) - { - _hostingEnvironment = hostingEnvironment; - _dataSetService = dataSetService; - } - - [HttpGet("{reportIndex:int?}")] - public IActionResult Index(int? reportIndex = 0) - { - var model = new HomeModel() - { - WebReport = new WebReport(), - ReportsList = new[] - { - "Simple List", - "Labels", - "Master-Detail", - "Badges", - "Interactive Report, 2-in-1", - "Hyperlinks, Bookmarks", - "Outline", - "Complex (Hyperlinks, Outline, TOC)", - "Drill-Down Groups", - "Polygon", - "Barcode", - }, - }; - - var reportToLoad = model.ReportsList[0]; - if (reportIndex >= 0 && reportIndex < model.ReportsList.Length) - reportToLoad = model.ReportsList[reportIndex.Value]; - - model.WebReport.Report.Load(Path.Combine(_dataSetService.ReportsPath, $"{reportToLoad}.frx")); - - model.WebReport.Report.RegisterData(_dataSetService.DataSet, "NorthWind"); - - //model.WebReport.SinglePage = true; - - model.WebReport.Designer.Path = "/WebReportDesigner/index.html"; - //model.WebReport.Designer.SaveCallBack = "/SaveDesignedReport"; - model.WebReport.Designer.SaveMethod = (string reportID, string filename, string report) => - { - string webRootPath = _hostingEnvironment.WebRootPath; - - string pathToSave = Path.Combine(webRootPath, "DesignedReports", filename); - if (!Directory.Exists(pathToSave)) - Directory.CreateDirectory(Path.GetDirectoryName(pathToSave)); - - System.IO.File.WriteAllTextAsync(pathToSave, report); - - return "OK"; - }; - - - //Uncomment to use ToolbarCustomization - //ToolbarSettings toolbar = new ToolbarSettings() - //{ - // Color = Color.Red, - // DropDownMenuColor = Color.Red, - // DropDownMenuTextColor = Color.White, - // IconColor = IconColors.White, - // Position = Positions.Right, - // FontSettings = new Font("Arial", 14, FontStyle.Bold), - // Exports = new ExportMenuSettings() - // { - // ExportTypes = Exports.Pdf | Exports.Excel97 | Exports.Rtf - // } - //}; - //model.WebReport.Toolbar = toolbar; - - - // Uncomment to use Online Designer - //model.WebReport.Width = "1000"; - //model.WebReport.Height = "1000"; - //model.WebReport.Mode = WebReportMode.Designer; - - return View(model); - } - - [HttpGet("prepared/{file}")] - public IActionResult Prepared(string file) - { - var model = new HomeModel() - { - WebReport = new WebReport(), - ReportsList = new[] - { - "Simple List", - "Labels", - "Master-Detail", - "Badges", - "Interactive Report, 2-in-1", - "Hyperlinks, Bookmarks", - "Outline", - "Complex (Hyperlinks, Outline, TOC)", - "Drill-Down Groups", - "Mail Merge" - }, - }; - - model.WebReport.LoadPrepared(file); - - return View("Index", model); - } - - - // Call-back for save the designed report - [HttpPost("/SaveDesignedReport")] - public ActionResult SaveDesignedReport(string reportID, [FromQuery(Name = "reportUUID")] string reportName) - { - string webRootPath = _hostingEnvironment.WebRootPath; - - Stream reportForSave = Request.Body; - string pathToSave = Path.Combine(webRootPath, "DesignedReports", reportName); - if (!Directory.Exists(pathToSave)) - Directory.CreateDirectory(Path.GetDirectoryName(pathToSave)); - using (FileStream file = new FileStream(pathToSave, FileMode.Create)) - { - reportForSave.CopyToAsync(file); - } - return new OkResult(); - } - } -} diff --git a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/FastReport.OpenSource.MVC.3.1.csproj b/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/FastReport.OpenSource.MVC.3.1.csproj deleted file mode 100644 index 4fd3a97e..00000000 --- a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/FastReport.OpenSource.MVC.3.1.csproj +++ /dev/null @@ -1,17 +0,0 @@ - - - - netcoreapp3.1 - Demo.MVC.NetCore31 - Debug;Release - - - - - - - - - - - diff --git a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/FastReport.OpenSource.MVC.3.1.sln b/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/FastReport.OpenSource.MVC.3.1.sln deleted file mode 100644 index e01dde2b..00000000 --- a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/FastReport.OpenSource.MVC.3.1.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.4.33205.214 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FastReport.OpenSource.MVC.3.1", "FastReport.OpenSource.MVC.3.1.csproj", "{8B31C484-671A-4A3E-A5AA-A8AFC8462C89}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {8B31C484-671A-4A3E-A5AA-A8AFC8462C89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8B31C484-671A-4A3E-A5AA-A8AFC8462C89}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8B31C484-671A-4A3E-A5AA-A8AFC8462C89}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8B31C484-671A-4A3E-A5AA-A8AFC8462C89}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {BFDB90B7-7FA2-4CF9-B6E6-175C83E41D75} - EndGlobalSection -EndGlobal diff --git a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Models/HomeModel.cs b/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Models/HomeModel.cs deleted file mode 100644 index 0a09aefc..00000000 --- a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Models/HomeModel.cs +++ /dev/null @@ -1,11 +0,0 @@ -using FastReport.Web; - -namespace Demo.MVC.NetCore31.Models -{ - public class HomeModel - { - public WebReport WebReport { get; set; } - public string[] ReportsList { get; set; } - - } -} diff --git a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Program.cs b/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Program.cs deleted file mode 100644 index ec2c1c3f..00000000 --- a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Program.cs +++ /dev/null @@ -1,20 +0,0 @@ -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Hosting; - -namespace Demo.MVC.NetCore31 -{ - public class Program - { - public static void Main(string[] args) - { - CreateHostBuilder(args).Build().Run(); - } - - public static IHostBuilder CreateHostBuilder(string[] args) => - Host.CreateDefaultBuilder(args) - .ConfigureWebHostDefaults(webBuilder => - { - webBuilder.UseStartup(); - }); - } -} diff --git a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Properties/launchSettings.json b/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Properties/launchSettings.json deleted file mode 100644 index 5fbd0a61..00000000 --- a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Properties/launchSettings.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:59578", - "sslPort": 44324 - } - }, - "profiles": { - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "Demo.MVC.NetCore31": { - "commandName": "Project", - "launchBrowser": true, - "applicationUrl": "https://localhost:5001;http://localhost:5000", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} diff --git a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Startup.cs b/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Startup.cs deleted file mode 100644 index e23b4903..00000000 --- a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Startup.cs +++ /dev/null @@ -1,56 +0,0 @@ -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; -using MVC.Service; - -namespace Demo.MVC.NetCore31 -{ - public class Startup - { - public Startup(IConfiguration configuration) - { - Configuration = configuration; - } - - public IConfiguration Configuration { get; } - - // This method gets called by the runtime. Use this method to add services to the container. - public void ConfigureServices(IServiceCollection services) - { - services.AddControllersWithViews(); - services.AddSingleton(); - } - - // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IWebHostEnvironment env) - { - if (env.IsDevelopment()) - { - app.UseDeveloperExceptionPage(); - } - else - { - app.UseExceptionHandler("/Home/Error"); - // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. - app.UseHsts(); - } - app.UseHttpsRedirection(); - app.UseStaticFiles(); - - app.UseFastReport(); - - app.UseRouting(); - - app.UseAuthorization(); - - app.UseEndpoints(endpoints => - { - endpoints.MapControllerRoute( - name: "default", - pattern: "{controller=Home}/{action=Index}/{id?}"); - }); - } - } -} diff --git a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Views/Home/Index.cshtml b/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Views/Home/Index.cshtml deleted file mode 100644 index 987ef8ef..00000000 --- a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Views/Home/Index.cshtml +++ /dev/null @@ -1,27 +0,0 @@ -@model HomeModel - - - - - -
-
- @foreach (var item in Model.ReportsList.Select((value, i) => new { value, i })) - { - @item.value - } -
-
- @await Model.WebReport.Render() -
-
© @DateTime.Now.Year - Fast Reports, Inc.
-
\ No newline at end of file diff --git a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Views/Shared/_Layout.cshtml b/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Views/Shared/_Layout.cshtml deleted file mode 100644 index 3e4d8b40..00000000 --- a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Views/Shared/_Layout.cshtml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - FastReport.Web for ASP.NET Core demo application NET5.0 - - - - -@RenderBody() - - \ No newline at end of file diff --git a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Views/_ViewImports.cshtml b/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Views/_ViewImports.cshtml deleted file mode 100644 index 90ab686e..00000000 --- a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Views/_ViewImports.cshtml +++ /dev/null @@ -1,3 +0,0 @@ -@using Demo.MVC.NetCore31 -@using Demo.MVC.NetCore31.Models -@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers diff --git a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Views/_ViewStart.cshtml b/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Views/_ViewStart.cshtml deleted file mode 100644 index a5f10045..00000000 --- a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/Views/_ViewStart.cshtml +++ /dev/null @@ -1,3 +0,0 @@ -@{ - Layout = "_Layout"; -} diff --git a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/appsettings.Development.json b/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/appsettings.Development.json deleted file mode 100644 index 8983e0fc..00000000 --- a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/appsettings.Development.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft": "Warning", - "Microsoft.Hosting.Lifetime": "Information" - } - } -} diff --git a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/appsettings.json b/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/appsettings.json deleted file mode 100644 index d9d9a9bf..00000000 --- a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/appsettings.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft": "Warning", - "Microsoft.Hosting.Lifetime": "Information" - } - }, - "AllowedHosts": "*" -} diff --git a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/wwwroot/css/site.css b/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/wwwroot/css/site.css deleted file mode 100644 index eee9e3d2..00000000 --- a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/wwwroot/css/site.css +++ /dev/null @@ -1,96 +0,0 @@ -body { - margin: 0px; - padding: 20px; - width: intrinsic; - width: -webkit-max-content; - width: -moz-max-content; - width: max-content; -} - -.title { - display: flex; - flex-direction: row; - justify-content: flex-start; - align-content: space-between; - align-items: center; - font-family: "Segoe UI",Arial,sans-serif; - font-size: 42px; - font-weight: 100; - padding-left: 20px; - padding-right: 20px; -} - -.title > a { - color: black; - text-decoration: none; - white-space: nowrap; -} - -.menu { - background-color: rgba(0, 0, 0, 0.65); - display: flex; - flex-wrap: wrap; - margin-top: 20px; - margin-bottom: 20px; - margin-right: 60px; - box-shadow: 0px 2px 20px -2px rgba(0, 0, 0, 0.2); -} - -.menu > a { - font-family: "Segoe UI",Arial,sans-serif; - font-size: 20px; - text-decoration: none; - padding: 3px 24px 5px 24px; - color: white; - white-space: nowrap; -} - -.menu > a:hover { - background-color: rgb(239, 67, 67); - box-shadow: 0px 2px 10px -2px rgba(0, 0, 0, 0.2); -} - -.container { - display: flex; -} - -.reports { - display: flex; - flex-direction: column; - flex-shrink: 0; -} - -.reports > a { - font-family: "Segoe UI",Arial,sans-serif; - font-size: 17px; - text-decoration: none; - padding: 3px 24px 4px 24px; - color: black; -} - -.reports > a:hover { - background-color: rgb(54, 173, 244); - box-shadow: 0px 2px 10px -2px rgba(0, 0, 0, 0.2); - color: white; -} - -.webreport { - padding-left: 20px; - padding-right: 24px; -} - -footer { - text-align: center; - font-family: "Segoe UI",Arial,sans-serif; - font-size: 13px; - padding-top: 15px; - margin-top: 20px; - opacity: 0.6; - border-top: 1px solid lightgray; -} - -.fr-logo { - margin-left: 175px; - margin-top: 0px; - height: 64px; -} \ No newline at end of file diff --git a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/wwwroot/favicon.ico b/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/wwwroot/favicon.ico deleted file mode 100644 index 8a1185497991af726bd9537325727f7662729be5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5430 zcmeI0{Yzw37{_nXA0R5C>)Z58n^E?%EJ(DX6fDcaz-p8PlK!xe*6fB3EaPN}3hpYn zEQKT_{Sp;IWfZ28ZlamZ_EX51qKO-syY7f+bLZ{O{dS)_oO561dUGzmKy={YIrrT8 zp3n2#d(Ybl!b8HtLROZbc$e_TBZBalAP6p3>iTn~yBX^FyJKswI7Xem>%H8JqWIoPRaKxi{XA zD_Y()f9BL;)?f8UxsJtM|7H~Heli%VaWr_gcwgt-A|%N^ ze#${_9`6{}Q!Gm>sTlU-leVIw0+p4Os`)zuTz^W@|8>uvpO=@1{tsig_*z7@Co5C$ zjo2;kMh}$#$DcmHwa#$Ly25C`5yKbXCLkrX7ho5^K7Xo@jErzDtLXK~WD!R7lUpAnPj=Pg=`KA%jMmXIzR^DMs_rer0HA2q$d|3k%rT*f>@r zCd-@H$6bi|U*^-8e&U5NF1JLnyQht9_MDG0|F1?9D12I*o2oB~xcjFzKT`}x#s6j^ zfud(LHd`ZJxg24stN!2kv$L}p7#J`Zt)X`1yGaSf&!)2}hMrq7gVc_{v$F%5>&3SVd^ZUs+j6V^b_8B_(Wjbo0n$vfrG%pZ(TF`X(8x3x zE;VTTN%Qmg=#x0Za_@vsW1z0C4nCjHV1B<}-Cw)wtz$U-d>Eo=90X4J<~e~~Q%v+6 z%(=7c+doP?cd8r-UwJ2tXZD|cnL1mrAP$?~*4Cze6J{>E9{v7s__ejQXliOgb91x7 zrlzJ)(`fzvipaWV>{~mGYY)ZYgirH-CgY#t zxKJ0t-rvUDo$`x{iZFNQVDnFTl?Xalijj1-Q$CHg`T3s_TnZ!jTe>YSi}-y#iH%L! za?K+yD^8w28|!x7>-92(t+(T^uC7|H|8`t<&+T^Ga@kEgemour^+W#`WMVWvIyyQS g!q(gIZH0$)^MAf}{yORNCp!n8gx~Lff#Yib2TwV8#{d8T diff --git a/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/wwwroot/logo.png b/Demos/OpenSource/MVC/FastReport.OpenSource.MVC.3.1/wwwroot/logo.png deleted file mode 100644 index 8204972e81b2bcd3cb49d0b0a44e26c76d35a166..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16446 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 diff --git a/Extras/Core/FastReport.Data/Avalonia.props b/Extras/Core/FastReport.Data/Avalonia.props new file mode 100644 index 00000000..b9437052 --- /dev/null +++ b/Extras/Core/FastReport.Data/Avalonia.props @@ -0,0 +1,26 @@ + + + + https://www.fast-report.com/en/product/fast-report-avalonia/license + Debug;Release; + + + + + + ..\..\..\..\FastReport.Avalonia\FastReport.Avalonia.csproj + FastReport.Avalonia + + ..\..\..\..\FastReport.Forms.Avalonia\FastReport.Forms.Avalonia.csproj + FastReport.Forms.Avalonia + + + + + + + + + + + \ No newline at end of file diff --git a/Extras/Core/FastReport.Data/FastReport.Data.Cassandra/FastReport.Avalonia.Data.Cassandra.csproj b/Extras/Core/FastReport.Data/FastReport.Data.Cassandra/FastReport.Avalonia.Data.Cassandra.csproj new file mode 100644 index 00000000..1f05f8e7 --- /dev/null +++ b/Extras/Core/FastReport.Data/FastReport.Data.Cassandra/FastReport.Avalonia.Data.Cassandra.csproj @@ -0,0 +1,12 @@ + + + net6.0 + + + + + + + + + diff --git a/Extras/Core/FastReport.Data/FastReport.Data.Cassandra/FastReport.OpenSource.Data.Cassandra.csproj b/Extras/Core/FastReport.Data/FastReport.Data.Cassandra/FastReport.OpenSource.Data.Cassandra.csproj index 0880ce1d..52794dcc 100644 --- a/Extras/Core/FastReport.Data/FastReport.Data.Cassandra/FastReport.OpenSource.Data.Cassandra.csproj +++ b/Extras/Core/FastReport.Data/FastReport.Data.Cassandra/FastReport.OpenSource.Data.Cassandra.csproj @@ -1,6 +1,6 @@  - netstandard2.0;$(NetFrameworkMinimum);netcoreapp3.1 + $(NetFrameworkMinimum);net6.0 true diff --git a/Extras/Core/FastReport.Data/FastReport.Data.ClickHouse/FastReport.Avalonia.Data.ClickHouse.csproj b/Extras/Core/FastReport.Data/FastReport.Data.ClickHouse/FastReport.Avalonia.Data.ClickHouse.csproj new file mode 100644 index 00000000..1f05f8e7 --- /dev/null +++ b/Extras/Core/FastReport.Data/FastReport.Data.ClickHouse/FastReport.Avalonia.Data.ClickHouse.csproj @@ -0,0 +1,12 @@ + + + net6.0 + + + + + + + + + diff --git a/Extras/Core/FastReport.Data/FastReport.Data.ClickHouse/FastReport.OpenSource.Data.ClickHouse.csproj b/Extras/Core/FastReport.Data/FastReport.Data.ClickHouse/FastReport.OpenSource.Data.ClickHouse.csproj index 23f5eba6..95659cc4 100644 --- a/Extras/Core/FastReport.Data/FastReport.Data.ClickHouse/FastReport.OpenSource.Data.ClickHouse.csproj +++ b/Extras/Core/FastReport.Data/FastReport.Data.ClickHouse/FastReport.OpenSource.Data.ClickHouse.csproj @@ -1,7 +1,7 @@  - net472;netstandard2.1;netcoreapp3.1 + net472;net6.0 true diff --git a/Extras/Core/FastReport.Data/FastReport.Data.Couchbase/FastReport.Avalonia.Data.Couchbase.csproj b/Extras/Core/FastReport.Data/FastReport.Data.Couchbase/FastReport.Avalonia.Data.Couchbase.csproj new file mode 100644 index 00000000..129e5b8b --- /dev/null +++ b/Extras/Core/FastReport.Data/FastReport.Data.Couchbase/FastReport.Avalonia.Data.Couchbase.csproj @@ -0,0 +1,12 @@ + + + net6.0 + + + + + + + + + diff --git a/Extras/Core/FastReport.Data/FastReport.Data.Couchbase/FastReport.OpenSource.Data.Couchbase.csproj b/Extras/Core/FastReport.Data/FastReport.Data.Couchbase/FastReport.OpenSource.Data.Couchbase.csproj index f51db75b..19b02718 100644 --- a/Extras/Core/FastReport.Data/FastReport.Data.Couchbase/FastReport.OpenSource.Data.Couchbase.csproj +++ b/Extras/Core/FastReport.Data/FastReport.Data.Couchbase/FastReport.OpenSource.Data.Couchbase.csproj @@ -1,6 +1,6 @@ - netstandard2.0;$(NetFrameworkMinimum);netcoreapp3.1 + $(NetFrameworkMinimum);net6.0 true diff --git a/Extras/Core/FastReport.Data/FastReport.Data.ElasticSearch/FastReport.Avalonia.Data.ElasticSearch.csproj b/Extras/Core/FastReport.Data/FastReport.Data.ElasticSearch/FastReport.Avalonia.Data.ElasticSearch.csproj new file mode 100644 index 00000000..3e398e89 --- /dev/null +++ b/Extras/Core/FastReport.Data/FastReport.Data.ElasticSearch/FastReport.Avalonia.Data.ElasticSearch.csproj @@ -0,0 +1,12 @@ + + + net6.0 + + + + + + + + + diff --git a/Extras/Core/FastReport.Data/FastReport.Data.ElasticSearch/FastReport.OpenSource.Data.ElasticSearch.csproj b/Extras/Core/FastReport.Data/FastReport.Data.ElasticSearch/FastReport.OpenSource.Data.ElasticSearch.csproj index d0c9ec48..fee9aa70 100644 --- a/Extras/Core/FastReport.Data/FastReport.Data.ElasticSearch/FastReport.OpenSource.Data.ElasticSearch.csproj +++ b/Extras/Core/FastReport.Data/FastReport.Data.ElasticSearch/FastReport.OpenSource.Data.ElasticSearch.csproj @@ -1,6 +1,6 @@ - netstandard2.0;$(NetFrameworkMinimum);netcoreapp3.1 + $(NetFrameworkMinimum);net6.0 true diff --git a/Extras/Core/FastReport.Data/FastReport.Data.Excel/FastReport.Avalonia.Data.Excel.csproj b/Extras/Core/FastReport.Data/FastReport.Data.Excel/FastReport.Avalonia.Data.Excel.csproj new file mode 100644 index 00000000..1f05f8e7 --- /dev/null +++ b/Extras/Core/FastReport.Data/FastReport.Data.Excel/FastReport.Avalonia.Data.Excel.csproj @@ -0,0 +1,12 @@ + + + net6.0 + + + + + + + + + diff --git a/Extras/Core/FastReport.Data/FastReport.Data.Excel/FastReport.OpenSource.Data.Excel.csproj b/Extras/Core/FastReport.Data/FastReport.Data.Excel/FastReport.OpenSource.Data.Excel.csproj index bf6856d5..e3ee1964 100644 --- a/Extras/Core/FastReport.Data/FastReport.Data.Excel/FastReport.OpenSource.Data.Excel.csproj +++ b/Extras/Core/FastReport.Data/FastReport.Data.Excel/FastReport.OpenSource.Data.Excel.csproj @@ -1,6 +1,6 @@  - netstandard2.0;$(NetFrameworkMinimum);netcoreapp3.1 + $(NetFrameworkMinimum);net6.0 true diff --git a/Extras/Core/FastReport.Data/FastReport.Data.Firebird/FastReport.Avalonia.Data.Firebird.csproj b/Extras/Core/FastReport.Data/FastReport.Data.Firebird/FastReport.Avalonia.Data.Firebird.csproj new file mode 100644 index 00000000..3e398e89 --- /dev/null +++ b/Extras/Core/FastReport.Data/FastReport.Data.Firebird/FastReport.Avalonia.Data.Firebird.csproj @@ -0,0 +1,12 @@ + + + net6.0 + + + + + + + + + diff --git a/Extras/Core/FastReport.Data/FastReport.Data.Firebird/FastReport.OpenSource.Data.Firebird.csproj b/Extras/Core/FastReport.Data/FastReport.Data.Firebird/FastReport.OpenSource.Data.Firebird.csproj index 6b4ce8c2..92256e31 100644 --- a/Extras/Core/FastReport.Data/FastReport.Data.Firebird/FastReport.OpenSource.Data.Firebird.csproj +++ b/Extras/Core/FastReport.Data/FastReport.Data.Firebird/FastReport.OpenSource.Data.Firebird.csproj @@ -1,6 +1,6 @@ - netstandard2.0;$(NetFrameworkMinimum);netcoreapp3.1 + $(NetFrameworkMinimum);net6.0 true diff --git a/Extras/Core/FastReport.Data/FastReport.Data.Json/FastReport.Avalonia.Data.Json.csproj b/Extras/Core/FastReport.Data/FastReport.Data.Json/FastReport.Avalonia.Data.Json.csproj new file mode 100644 index 00000000..36a1ef63 --- /dev/null +++ b/Extras/Core/FastReport.Data/FastReport.Data.Json/FastReport.Avalonia.Data.Json.csproj @@ -0,0 +1,16 @@ + + + net6.0 + + + + + + + FRCORE; + + + + + + diff --git a/Extras/Core/FastReport.Data/FastReport.Data.Json/FastReport.OpenSource.Data.Json.csproj b/Extras/Core/FastReport.Data/FastReport.Data.Json/FastReport.OpenSource.Data.Json.csproj index 73ad2ca8..21ae298e 100644 --- a/Extras/Core/FastReport.Data/FastReport.Data.Json/FastReport.OpenSource.Data.Json.csproj +++ b/Extras/Core/FastReport.Data/FastReport.Data.Json/FastReport.OpenSource.Data.Json.csproj @@ -1,6 +1,6 @@ - netstandard2.0;$(NetFrameworkMinimum);netcoreapp3.1 + $(NetFrameworkMinimum);net6.0 true diff --git a/Extras/Core/FastReport.Data/FastReport.Data.Linter/FastReport.Avalonia.Data.Linter.csproj b/Extras/Core/FastReport.Data/FastReport.Data.Linter/FastReport.Avalonia.Data.Linter.csproj new file mode 100644 index 00000000..3e398e89 --- /dev/null +++ b/Extras/Core/FastReport.Data/FastReport.Data.Linter/FastReport.Avalonia.Data.Linter.csproj @@ -0,0 +1,12 @@ + + + net6.0 + + + + + + + + + diff --git a/Extras/Core/FastReport.Data/FastReport.Data.Linter/FastReport.OpenSource.Data.Linter.csproj b/Extras/Core/FastReport.Data/FastReport.Data.Linter/FastReport.OpenSource.Data.Linter.csproj index f339d2e0..c423f252 100644 --- a/Extras/Core/FastReport.Data/FastReport.Data.Linter/FastReport.OpenSource.Data.Linter.csproj +++ b/Extras/Core/FastReport.Data/FastReport.Data.Linter/FastReport.OpenSource.Data.Linter.csproj @@ -1,6 +1,6 @@  - netstandard2.1;$(NetFrameworkMinimum);netcoreapp3.1 + $(NetFrameworkMinimum);net6.0 true diff --git a/Extras/Core/FastReport.Data/FastReport.Data.MongoDB/FastReport.Avalonia.Data.MongoDB.csproj b/Extras/Core/FastReport.Data/FastReport.Data.MongoDB/FastReport.Avalonia.Data.MongoDB.csproj new file mode 100644 index 00000000..3e398e89 --- /dev/null +++ b/Extras/Core/FastReport.Data/FastReport.Data.MongoDB/FastReport.Avalonia.Data.MongoDB.csproj @@ -0,0 +1,12 @@ + + + net6.0 + + + + + + + + + diff --git a/Extras/Core/FastReport.Data/FastReport.Data.MongoDB/FastReport.OpenSource.Data.MongoDB.csproj b/Extras/Core/FastReport.Data/FastReport.Data.MongoDB/FastReport.OpenSource.Data.MongoDB.csproj index 5ac5b8f7..eea2feb8 100644 --- a/Extras/Core/FastReport.Data/FastReport.Data.MongoDB/FastReport.OpenSource.Data.MongoDB.csproj +++ b/Extras/Core/FastReport.Data/FastReport.Data.MongoDB/FastReport.OpenSource.Data.MongoDB.csproj @@ -1,6 +1,6 @@ - netstandard2.0;$(NetFrameworkMinimum);netcoreapp3.1 + $(NetFrameworkMinimum);net6.0 true diff --git a/Extras/Core/FastReport.Data/FastReport.Data.MsSql/FastReport.OpenSource.Data.MsSql.csproj b/Extras/Core/FastReport.Data/FastReport.Data.MsSql/FastReport.OpenSource.Data.MsSql.csproj index db5863be..eea2feb8 100644 --- a/Extras/Core/FastReport.Data/FastReport.Data.MsSql/FastReport.OpenSource.Data.MsSql.csproj +++ b/Extras/Core/FastReport.Data/FastReport.Data.MsSql/FastReport.OpenSource.Data.MsSql.csproj @@ -1,6 +1,6 @@ - netstandard2.0;$(NetFrameworkMinimum) + $(NetFrameworkMinimum);net6.0 true diff --git a/Extras/Core/FastReport.Data/FastReport.Data.MySql/FastReport.Avalonia.Data.MySql.csproj b/Extras/Core/FastReport.Data/FastReport.Data.MySql/FastReport.Avalonia.Data.MySql.csproj new file mode 100644 index 00000000..1f05f8e7 --- /dev/null +++ b/Extras/Core/FastReport.Data/FastReport.Data.MySql/FastReport.Avalonia.Data.MySql.csproj @@ -0,0 +1,12 @@ + + + net6.0 + + + + + + + + + diff --git a/Extras/Core/FastReport.Data/FastReport.Data.MySql/FastReport.OpenSource.Data.MySql.csproj b/Extras/Core/FastReport.Data/FastReport.Data.MySql/FastReport.OpenSource.Data.MySql.csproj index 4f2bc35f..da8b0640 100644 --- a/Extras/Core/FastReport.Data/FastReport.Data.MySql/FastReport.OpenSource.Data.MySql.csproj +++ b/Extras/Core/FastReport.Data/FastReport.Data.MySql/FastReport.OpenSource.Data.MySql.csproj @@ -1,6 +1,6 @@ - $(NetFrameworkMinimum);netstandard2.0;netcoreapp3.1 + $(NetFrameworkMinimum);net6.0 true diff --git a/Extras/Core/FastReport.Data/FastReport.Data.Odbc/FastReport.Avalonia.Data.Odbc.csproj b/Extras/Core/FastReport.Data/FastReport.Data.Odbc/FastReport.Avalonia.Data.Odbc.csproj new file mode 100644 index 00000000..c3418810 --- /dev/null +++ b/Extras/Core/FastReport.Data/FastReport.Data.Odbc/FastReport.Avalonia.Data.Odbc.csproj @@ -0,0 +1,12 @@ + + + net6.0 + + + + + + + + + diff --git a/Extras/Core/FastReport.Data/FastReport.Data.Odbc/FastReport.OpenSource.Data.Odbc.csproj b/Extras/Core/FastReport.Data/FastReport.Data.Odbc/FastReport.OpenSource.Data.Odbc.csproj index db5863be..eea2feb8 100644 --- a/Extras/Core/FastReport.Data/FastReport.Data.Odbc/FastReport.OpenSource.Data.Odbc.csproj +++ b/Extras/Core/FastReport.Data/FastReport.Data.Odbc/FastReport.OpenSource.Data.Odbc.csproj @@ -1,6 +1,6 @@ - netstandard2.0;$(NetFrameworkMinimum) + $(NetFrameworkMinimum);net6.0 true diff --git a/Extras/Core/FastReport.Data/FastReport.Data.OracleODPCore/FastReport.Avalonia.Data.OracleODPCore.csproj b/Extras/Core/FastReport.Data/FastReport.Data.OracleODPCore/FastReport.Avalonia.Data.OracleODPCore.csproj new file mode 100644 index 00000000..d416e900 --- /dev/null +++ b/Extras/Core/FastReport.Data/FastReport.Data.OracleODPCore/FastReport.Avalonia.Data.OracleODPCore.csproj @@ -0,0 +1,12 @@ + + + net6.0 + + + + + + + + + diff --git a/Extras/Core/FastReport.Data/FastReport.Data.OracleODPCore/FastReport.OpenSource.Data.OracleODPCore.csproj b/Extras/Core/FastReport.Data/FastReport.Data.OracleODPCore/FastReport.OpenSource.Data.OracleODPCore.csproj index 5ac5b8f7..eea2feb8 100644 --- a/Extras/Core/FastReport.Data/FastReport.Data.OracleODPCore/FastReport.OpenSource.Data.OracleODPCore.csproj +++ b/Extras/Core/FastReport.Data/FastReport.Data.OracleODPCore/FastReport.OpenSource.Data.OracleODPCore.csproj @@ -1,6 +1,6 @@ - netstandard2.0;$(NetFrameworkMinimum);netcoreapp3.1 + $(NetFrameworkMinimum);net6.0 true diff --git a/Extras/Core/FastReport.Data/FastReport.Data.Postgres/FastReport.Avalonia.Data.Postgres.csproj b/Extras/Core/FastReport.Data/FastReport.Data.Postgres/FastReport.Avalonia.Data.Postgres.csproj new file mode 100644 index 00000000..bca893fb --- /dev/null +++ b/Extras/Core/FastReport.Data/FastReport.Data.Postgres/FastReport.Avalonia.Data.Postgres.csproj @@ -0,0 +1,12 @@ + + + net6.0 + + + + + + + + + diff --git a/Extras/Core/FastReport.Data/FastReport.Data.Postgres/FastReport.OpenSource.Data.Postgres.csproj b/Extras/Core/FastReport.Data/FastReport.Data.Postgres/FastReport.OpenSource.Data.Postgres.csproj index db08fa04..061e00a6 100644 --- a/Extras/Core/FastReport.Data/FastReport.Data.Postgres/FastReport.OpenSource.Data.Postgres.csproj +++ b/Extras/Core/FastReport.Data/FastReport.Data.Postgres/FastReport.OpenSource.Data.Postgres.csproj @@ -1,6 +1,6 @@ - $(NetFrameworkMinimum);netstandard2.0;netcoreapp3.1 + $(NetFrameworkMinimum);net6.0 true diff --git a/Extras/Core/FastReport.Data/FastReport.Data.RavenDB/FastReport.Avalonia.Data.RavenDB.csproj b/Extras/Core/FastReport.Data/FastReport.Data.RavenDB/FastReport.Avalonia.Data.RavenDB.csproj new file mode 100644 index 00000000..d416e900 --- /dev/null +++ b/Extras/Core/FastReport.Data/FastReport.Data.RavenDB/FastReport.Avalonia.Data.RavenDB.csproj @@ -0,0 +1,12 @@ + + + net6.0 + + + + + + + + + diff --git a/Extras/Core/FastReport.Data/FastReport.Data.RavenDB/FastReport.OpenSource.Data.RavenDB.csproj b/Extras/Core/FastReport.Data/FastReport.Data.RavenDB/FastReport.OpenSource.Data.RavenDB.csproj index d375c3a4..86caa3fc 100644 --- a/Extras/Core/FastReport.Data/FastReport.Data.RavenDB/FastReport.OpenSource.Data.RavenDB.csproj +++ b/Extras/Core/FastReport.Data/FastReport.Data.RavenDB/FastReport.OpenSource.Data.RavenDB.csproj @@ -1,6 +1,6 @@ - $(NetFrameworkMinimum);netstandard2.0;netcoreapp3.1 + $(NetFrameworkMinimum);net6.0 true diff --git a/Extras/Core/FastReport.Data/FastReport.Data.SQLite/FastReport.Avalonia.Data.SQLite.csproj b/Extras/Core/FastReport.Data/FastReport.Data.SQLite/FastReport.Avalonia.Data.SQLite.csproj new file mode 100644 index 00000000..d416e900 --- /dev/null +++ b/Extras/Core/FastReport.Data/FastReport.Data.SQLite/FastReport.Avalonia.Data.SQLite.csproj @@ -0,0 +1,12 @@ + + + net6.0 + + + + + + + + + diff --git a/Extras/Core/FastReport.Data/FastReport.Data.SQLite/FastReport.OpenSource.Data.SQLite.csproj b/Extras/Core/FastReport.Data/FastReport.Data.SQLite/FastReport.OpenSource.Data.SQLite.csproj index 5ac5b8f7..eea2feb8 100644 --- a/Extras/Core/FastReport.Data/FastReport.Data.SQLite/FastReport.OpenSource.Data.SQLite.csproj +++ b/Extras/Core/FastReport.Data/FastReport.Data.SQLite/FastReport.OpenSource.Data.SQLite.csproj @@ -1,6 +1,6 @@ - netstandard2.0;$(NetFrameworkMinimum);netcoreapp3.1 + $(NetFrameworkMinimum);net6.0 true diff --git a/Extras/Core/FastReport.Data/WPF.props b/Extras/Core/FastReport.Data/WPF.props index 02fa6b4f..bb5e5076 100644 --- a/Extras/Core/FastReport.Data/WPF.props +++ b/Extras/Core/FastReport.Data/WPF.props @@ -9,10 +9,10 @@ - ..\..\..\FastReport.WPF\FastReport.WPF.csproj + ..\..\..\..\FastReport.WPF\FastReport.WPF.csproj FastReport.WPF.Demo - ..\..\..\FastReport.Forms.WPF\src\FastReport.Forms.WPF.csproj + ..\..\..\..\FastReport.Forms.WPF\FastReport.Forms.WPF.csproj FastReport.Forms.WPF.Demo diff --git a/Extras/Core/FastReport.Plugin/FastReport.Plugins.WebP/FastReport.Core.Plugins.WebP.csproj b/Extras/Core/FastReport.Plugin/FastReport.Plugins.WebP/FastReport.Core.Plugins.WebP.csproj index cc9062d3..89c4dbf7 100644 --- a/Extras/Core/FastReport.Plugin/FastReport.Plugins.WebP/FastReport.Core.Plugins.WebP.csproj +++ b/Extras/Core/FastReport.Plugin/FastReport.Plugins.WebP/FastReport.Core.Plugins.WebP.csproj @@ -1,6 +1,6 @@ - $(NetFrameworkMinimum);netstandard2.0;netcoreapp3.1 + $(NetFrameworkMinimum);net6.0 https://www.fast-report.com/en/product/fast-report-net/license Represents a plugin to extend PictureObject supports formats, for FastReport.Core. diff --git a/Extras/Core/FastReport.Plugin/FastReport.Plugins.WebP/FastReport.CoreWin.Plugins.WebP.csproj b/Extras/Core/FastReport.Plugin/FastReport.Plugins.WebP/FastReport.CoreWin.Plugins.WebP.csproj deleted file mode 100644 index 34e10fe3..00000000 --- a/Extras/Core/FastReport.Plugin/FastReport.Plugins.WebP/FastReport.CoreWin.Plugins.WebP.csproj +++ /dev/null @@ -1,23 +0,0 @@ - - - netcoreapp3.1 - https://www.fast-report.com/en/product/fast-report-net/license - - Represents a plugin to extend PictureObject supports formats, for FastReport.Net for .Net Core 3.1 and .Net 5 Windows. - This package will not be updated. The $(AssemblyName) package now includes a plugin for all versions of the FastReport product: FastReport .NET, FastReport.Core, FastReport.OpenSource, FastReport.CoreWin (.Net Core 3.1 and .Net 5 Windows). - - reporting, webp, image, reports - 1.0.0 - Debug;Release; - - - - - - - - - all - - - diff --git a/Extras/Core/FastReport.Plugin/FastReport.Plugins.WebP/FastReport.OpenSource.Plugins.WebP.csproj b/Extras/Core/FastReport.Plugin/FastReport.Plugins.WebP/FastReport.OpenSource.Plugins.WebP.csproj index 54b1042d..f6d4b520 100644 --- a/Extras/Core/FastReport.Plugin/FastReport.Plugins.WebP/FastReport.OpenSource.Plugins.WebP.csproj +++ b/Extras/Core/FastReport.Plugin/FastReport.Plugins.WebP/FastReport.OpenSource.Plugins.WebP.csproj @@ -1,6 +1,6 @@ - $(NetFrameworkMinimum);netstandard2.0;netcoreapp3.1 + $(NetFrameworkMinimum);net6.0 https://www.fast-report.com/en/product/fast-report-net/license Represents a plugin to extend PictureObject supports formats, for FastReport.OpenSource. diff --git a/Extras/Core/FastReport.Plugin/FastReport.Plugins.WebP/FastReport.Plugins.WebP.csproj b/Extras/Core/FastReport.Plugin/FastReport.Plugins.WebP/FastReport.Plugins.WebP.csproj index 51383d46..978f5adc 100644 --- a/Extras/Core/FastReport.Plugin/FastReport.Plugins.WebP/FastReport.Plugins.WebP.csproj +++ b/Extras/Core/FastReport.Plugin/FastReport.Plugins.WebP/FastReport.Plugins.WebP.csproj @@ -1,9 +1,9 @@ - $(NetFrameworkMinimum) + $(NetFrameworkMinimum);net6.0-windows https://www.fast-report.com/en/product/fast-report-net/license - Represents a plugin to extend PictureObject supports formats. Shared Plugin for all versions of FastReport product: FastReport .NET, FastReport.Core, FastReport.OpenSource, FastReport.CoreWin (.Net Core 3.1 and .Net 5 Windows). + Represents a plugin to extend PictureObject supports formats. Shared Plugin for all versions of FastReport product: FastReport .NET, FastReport.Core, FastReport.OpenSource. Requirements: Any FastReport $(Version)+ package, NuGet Client 3.4.4+ diff --git a/Extras/OpenSource/FastReport.OpenSource.Export.PdfSimple/FastReport.OpenSource.Export.PdfSimple.Tests/FastReport.OpenSource.Export.PdfSimple.Tests.csproj b/Extras/OpenSource/FastReport.OpenSource.Export.PdfSimple/FastReport.OpenSource.Export.PdfSimple.Tests/FastReport.OpenSource.Export.PdfSimple.Tests.csproj index 472985cd..0f0769c0 100644 --- a/Extras/OpenSource/FastReport.OpenSource.Export.PdfSimple/FastReport.OpenSource.Export.PdfSimple.Tests/FastReport.OpenSource.Export.PdfSimple.Tests.csproj +++ b/Extras/OpenSource/FastReport.OpenSource.Export.PdfSimple/FastReport.OpenSource.Export.PdfSimple.Tests/FastReport.OpenSource.Export.PdfSimple.Tests.csproj @@ -1,7 +1,7 @@  - netcoreapp3.1 + net6.0 false diff --git a/Extras/OpenSource/FastReport.OpenSource.Export.PdfSimple/FastReport.OpenSource.Export.PdfSimple/FastReport.OpenSource.Export.PdfSimple.csproj b/Extras/OpenSource/FastReport.OpenSource.Export.PdfSimple/FastReport.OpenSource.Export.PdfSimple/FastReport.OpenSource.Export.PdfSimple.csproj index b80afb87..77ad6bfb 100644 --- a/Extras/OpenSource/FastReport.OpenSource.Export.PdfSimple/FastReport.OpenSource.Export.PdfSimple/FastReport.OpenSource.Export.PdfSimple.csproj +++ b/Extras/OpenSource/FastReport.OpenSource.Export.PdfSimple/FastReport.OpenSource.Export.PdfSimple/FastReport.OpenSource.Export.PdfSimple.csproj @@ -1,7 +1,7 @@  - netstandard2.0 + net6.0 diff --git a/FastReport.Base/AssemblyInitializer.cs b/FastReport.Base/AssemblyInitializer.cs index 09420d4f..8cbce047 100644 --- a/FastReport.Base/AssemblyInitializer.cs +++ b/FastReport.Base/AssemblyInitializer.cs @@ -110,7 +110,7 @@ public AssemblyInitializer() #if !COMMUNITY RegisteredObjects.AddCategory("ReportPage,Matrix", 142, 7, "Objects,Matrix"); RegisteredObjects.InternalAdd(typeof(MatrixObject), "ReportPage,Matrix", 142, 1); -#if !WPF +#if !(WPF || AVALONIA) RegisteredObjects.InternalAdd(typeof(CrossViewObject), "ReportPage,Matrix", 247, 2); #endif #else diff --git a/FastReport.Base/Barcode/BarcodeDatamatrix.cs b/FastReport.Base/Barcode/BarcodeDatamatrix.cs index bee658eb..04e5b8ea 100644 --- a/FastReport.Base/Barcode/BarcodeDatamatrix.cs +++ b/FastReport.Base/Barcode/BarcodeDatamatrix.cs @@ -1107,6 +1107,7 @@ internal override void Draw2DBarcode(IGraphics g, float kx, float ky) if (image == null) return; + Brush dark = new SolidBrush(Color); int stride = (width + 7) / 8; for (int k = 0; k < height; ++k) @@ -1117,11 +1118,12 @@ internal override void Draw2DBarcode(IGraphics g, float kx, float ky) int b = image[p + (j / 8)] & 0xff; b <<= j % 8; - Brush brush = (b & 0x80) == 0 ? Brushes.White : Brushes.Black; + Brush brush = (b & 0x80) == 0 ? Brushes.White : dark; g.FillRectangle(brush, j * PixelSize * kx, k * PixelSize * ky, PixelSize * kx, PixelSize * ky); } } + dark.Dispose(); } #endregion diff --git a/FastReport.Base/Barcode/BarcodeGS1.cs b/FastReport.Base/Barcode/BarcodeGS1.cs index 1bf1757d..38bf0359 100644 --- a/FastReport.Base/Barcode/BarcodeGS1.cs +++ b/FastReport.Base/Barcode/BarcodeGS1.cs @@ -142,19 +142,19 @@ protected void DrawLineBars(string data, IGraphics g, float zoom, RectangleF rec pen.Width = width; if (reversColor) - pen.Color = Color.Black; + pen.Color = Color; else pen.Color = Color.Transparent; if (separatorLine) { if (data[x] != '0') - pen.Color = Color.Black; + pen.Color = Color; } else { if ((x % 2 != 0 && !reversColor)) - pen.Color = Color.Black; + pen.Color = Color; if ((x % 2 != 0 && reversColor)) pen.Color = Color.Transparent; } diff --git a/FastReport.Base/Code/AssemblyDescriptor.cs b/FastReport.Base/Code/AssemblyDescriptor.cs index d5bb2227..67981c65 100644 --- a/FastReport.Base/Code/AssemblyDescriptor.cs +++ b/FastReport.Base/Code/AssemblyDescriptor.cs @@ -203,7 +203,7 @@ private void AddReferencedAssemblies(StringCollection assemblies, string default // fix for old reports with "System.Windows.Forms.DataVisualization" in referenced assemblies if (s.IndexOf("System.Windows.Forms.DataVisualization") != -1) s = "FastReport.DataVisualization"; -#if SKIA +#if (SKIA && !AVALONIA) if (s.IndexOf("FastReport.Compat") != -1) s = "FastReport.Compat.Skia"; if (s.IndexOf("FastReport.DataVisualization") != -1) diff --git a/FastReport.Base/Engine/ReportEngine.Pages.cs b/FastReport.Base/Engine/ReportEngine.Pages.cs index 4f38b41d..abb2918a 100644 --- a/FastReport.Base/Engine/ReportEngine.Pages.cs +++ b/FastReport.Base/Engine/ReportEngine.Pages.cs @@ -205,6 +205,7 @@ private bool StartFirstPage() CurY = PreparedPages.GetLastY(); else { + page.OnCreatePage(EventArgs.Empty); PreparedPages.AddPage(page); if (page.StartOnOddPage && (CurPage % 2) == 1) PreparedPages.AddPage(page); @@ -345,6 +346,7 @@ private void EndPage() private void StartPage() { + page.OnCreatePage(EventArgs.Empty); // apply Right to Left layout if needed if (Config.RightToLeft) { @@ -365,7 +367,7 @@ private void StartPage() ShowBand(page.Overlay); ShowPageHeader(); OnStateChanged(page, EngineState.PageStarted); - + columnStartY = CurY; StartColumn(); diff --git a/FastReport.Base/Export/ExportBase.cs b/FastReport.Base/Export/ExportBase.cs index 25330f6b..64f88418 100644 --- a/FastReport.Base/Export/ExportBase.cs +++ b/FastReport.Base/Export/ExportBase.cs @@ -278,7 +278,7 @@ private void OpenFile() Process proc = new Process(); proc.EnableRaisingEvents = false; -#if NETCOREAPP +#if (NETCOREAPP && !AVALONIA) proc.StartInfo.FileName = "cmd"; proc.StartInfo.Arguments = $"/c \"{fileName}\""; proc.StartInfo.CreateNoWindow = true; diff --git a/FastReport.Base/Preview/PreparedPages.cs b/FastReport.Base/Preview/PreparedPages.cs index 37132488..3bac06c7 100644 --- a/FastReport.Base/Preview/PreparedPages.cs +++ b/FastReport.Base/Preview/PreparedPages.cs @@ -236,20 +236,23 @@ public void AddSourcePage(ReportPage page) /// public void AddPage(ReportPage page) { - CurPage++; - if (CurPage >= Count || AddPageAction != AddPageAction.WriteOver) + if (page.Visible) { - PreparedPage preparedPage = new PreparedPage(page, this); - preparedPages.Add(preparedPage); + CurPage++; + if (CurPage >= Count || AddPageAction != AddPageAction.WriteOver) + { + PreparedPage preparedPage = new PreparedPage(page, this); + preparedPages.Add(preparedPage); - // upload previous page to the file cache if enabled - if (CanUploadToCache && Count > 1) - preparedPages[Count - 2].Upload(); + // upload previous page to the file cache if enabled + if (CanUploadToCache && Count > 1) + preparedPages[Count - 2].Upload(); - AddPageAction = AddPageAction.WriteOver; - CurPage = Count - 1; - Report.Engine.IncLogicalPageNumber(); - PageAdded?.Invoke(this, EventArgs.Empty); + AddPageAction = AddPageAction.WriteOver; + CurPage = Count - 1; + Report.Engine.IncLogicalPageNumber(); + PageAdded?.Invoke(this, EventArgs.Empty); + } } } diff --git a/FastReport.Base/Report.cs b/FastReport.Base/Report.cs index 7d37caeb..ad9c05b4 100644 --- a/FastReport.Base/Report.cs +++ b/FastReport.Base/Report.cs @@ -881,7 +881,7 @@ private string[] DefaultAssemblies "System.Xml.dll", "FastReport.Compat.dll", -#if !CROSSPLATFORM && !WPF +#if !CROSSPLATFORM && !(WPF || AVALONIA) "System.Windows.Forms.dll", #endif @@ -889,6 +889,10 @@ private string[] DefaultAssemblies "FastReport.Forms.WPF.dll", #endif +#if AVALONIA + "FastReport.Forms.Avalonia.dll", +#endif + #if CROSSPLATFORM || COREWIN "System.Drawing.Primitives", #endif @@ -2012,15 +2016,29 @@ public void SaveWithRandomData(string fileName) /// /// The stream to load from. /// - /// When you try to load the password-protected report, you will be asked - /// for a password. You also may specify the password in the - /// property before loading the report. In this case the report will load silently. + /// The stream must be seekable. + /// When you load a password-protected report, you should specify a password in the property, + /// otherwise you will get the . In this case you should ask for a password and try again: + /// + /// try + /// { + /// report.Load(stream); + /// } + /// catch (DecryptException) + /// { + /// report.Password = report.ShowPasswordForm(); // or use your own form to do this + /// report.Load(stream); + /// } + /// /// public void Load(Stream stream) { string password = Password; Clear(); + var saveStream = stream; + var saveStreamPos = stream.Position; + using (FRReader reader = new FRReader(this)) { List disposeList = new List(); @@ -2032,10 +2050,6 @@ public void Load(Stream stream) bool crypted = Crypter.IsStreamEncrypted(stream); if (crypted) { - if (String.IsNullOrEmpty(password)) - { - password = ShowPaswordForm(password); - } stream = Crypter.Decrypt(stream, password); disposeList.Add(stream); } @@ -2047,7 +2061,10 @@ public void Load(Stream stream) catch (Exception e) { if (crypted) + { + saveStream.Position = saveStreamPos; throw new DecryptException(); + } throw e; } finally diff --git a/FastReport.Base/ReportPage.cs b/FastReport.Base/ReportPage.cs index 0f4c9f09..ce0181e9 100644 --- a/FastReport.Base/ReportPage.cs +++ b/FastReport.Base/ReportPage.cs @@ -85,6 +85,7 @@ public partial class ReportPage : PageBase, IParent private ColumnFooterBand columnFooter; private PageFooterBand pageFooter; private OverlayBand overlay; + private string createPageEvent; private string startPageEvent; private string finishPageEvent; private string manualBuildEvent; @@ -102,6 +103,11 @@ public partial class ReportPage : PageBase, IParent #endregion #region Properties + + /// + /// This event occurs when the report engine create new page. On this stage can be modified page properties. + /// + public event EventHandler CreatePage; /// /// This event occurs when the report engine starts this page. /// @@ -658,6 +664,17 @@ public SubreportObject Subreport set { subreport = value; } } + /// + /// Gets or sets a script event name that will be fired when the report engine create new page. + /// On this stage can be modified page properties. + /// + [Category("Build")] + public string CreatePageEvent + { + get { return createPageEvent; } + set { createPageEvent = value; } + } + /// /// Gets or sets a script event name that will be fired when the report engine starts this page. /// @@ -955,6 +972,7 @@ public override void Assign(Base source) ResetPageNumber = src.ResetPageNumber; ExtraDesignWidth = src.ExtraDesignWidth; BackPage = src.BackPage; + CreatePageEvent = src.CreatePageEvent; StartOnOddPage = src.StartOnOddPage; StartPageEvent = src.StartPageEvent; FinishPageEvent = src.FinishPageEvent; @@ -1011,6 +1029,8 @@ public override void Serialize(FRWriter writer) writer.WriteBool("StartOnOddPage", StartOnOddPage); if (BackPage != c.BackPage) writer.WriteBool("BackPage", BackPage); + if (CreatePageEvent != c.CreatePageEvent) + writer.WriteStr("CreatePageEvent", CreatePageEvent); if (StartPageEvent != c.StartPageEvent) writer.WriteStr("StartPageEvent", StartPageEvent); if (FinishPageEvent != c.FinishPageEvent) @@ -1092,7 +1112,7 @@ public override void Draw(FRPaintEventArgs e) ReportComponentBase obj = c as ReportComponentBase; if (!IsPrinting) { -#if !MONO +#if !MONO || (WPF || AVALONIA) if (!obj.IsVisible(e)) continue; #endif @@ -1163,6 +1183,16 @@ public override void ExtractMacros() Watermark.Text = ExtractDefaultMacros(Watermark.Text); } + /// + /// This method fires the CreatePage event and the script code connected to the CreatePageEvent. + /// + public void OnCreatePage(EventArgs e) + { + if (CreatePage != null) + CreatePage(this, e); + InvokeEvent(CreatePageEvent, e); + } + /// /// This method fires the StartPage event and the script code connected to the StartPageEvent. /// diff --git a/FastReport.Base/Table/TableBase.cs b/FastReport.Base/Table/TableBase.cs index 1106ca06..656ec095 100644 --- a/FastReport.Base/Table/TableBase.cs +++ b/FastReport.Base/Table/TableBase.cs @@ -344,6 +344,9 @@ private void DrawCells(FRPaintEventArgs e, DrawCellProc proc) if (!IsInsideSpan(cell) && (!IsPrinting || cell.Printable)) { cell.SetPrinting(IsPrinting); +#if !MONO || (WPF || AVALONIA) + if (cell.IsVisible(e)) +#endif proc(e, cell); } @@ -490,15 +493,12 @@ public override void Draw(FRPaintEventArgs e) if (Config.RightToLeft) { DrawTableRtl(e); - // !! ����������� ������ !! - //Border.Draw(e, new RectangleF(FLeftRtl - Width + AbsLeft, AbsTop, Width, Height)); - Border.Draw(e, new RectangleF(AbsLeft, AbsTop, Width, Height)); } else { DrawTable(e); - Border.Draw(e, new RectangleF(AbsLeft, AbsTop, Width, Height)); } + Border.Draw(e, new RectangleF(AbsLeft, AbsTop, Width, Height)); DrawDesign(e); } diff --git a/FastReport.Base/Utils/Config.cs b/FastReport.Base/Utils/Config.cs index 046eee6f..600d7f02 100644 --- a/FastReport.Base/Utils/Config.cs +++ b/FastReport.Base/Utils/Config.cs @@ -20,6 +20,8 @@ public static partial class Config #elif MONO #if WPF const string CONFIG_NAME = "FastReport.WPF.config"; +#elif AVALONIA + const string CONFIG_NAME = "FastReport.Avalonia.config"; #else const string CONFIG_NAME = "FastReport.Mono.config"; #endif @@ -205,6 +207,7 @@ public static string Version /// /// Gets a PrivateFontCollection instance. /// + [Obsolete("Use FastReport.FontManager instead")] public static FRPrivateFontCollection PrivateFontCollection { get { return privateFontCollection; } @@ -267,6 +270,7 @@ public static CompilerSettings CompilerSettings /// public static async void CompilerWarmup() { + Report.EnsureInit(); await Task.Run(() => { new Report() { ScriptText = "using System; namespace FastReport { public class ReportScript {\r\n} }" }.Compile(); @@ -291,13 +295,9 @@ internal static string GetTempFolder() internal static void Init() { FIsRunningOnMono = Type.GetType("Mono.Runtime") != null; -#if SKIA - Topten.RichTextKit.FontFallback.CharacterMatcher = characterMatcher; -#endif - CheckWebMode(); -#if !CROSSPLATFORM +#if !CROSSPLATFORM || AVALONIA if (!WebMode) LoadConfig(); #endif @@ -535,7 +535,7 @@ private static void LoadPlugins() } // For CoreWin -#if COREWIN +#if (COREWIN || AVALONIA) LoadPluginsInCurrentFolder(); #endif } diff --git a/FastReport.Base/Utils/Converter.cs b/FastReport.Base/Utils/Converter.cs index aec102b0..c0eef714 100644 --- a/FastReport.Base/Utils/Converter.cs +++ b/FastReport.Base/Utils/Converter.cs @@ -72,12 +72,10 @@ public static string ToString(object value) return type.FullName; return type.AssemblyQualifiedName; } -#if true// | CROSSPLATFORM if (value is Font) { return new TypeConverters.FontConverter().ConvertToInvariantString(value); } -#endif if (value is System.Drawing.Imaging.ImageFormat) { var imageFormat = value as System.Drawing.Imaging.ImageFormat; @@ -131,40 +129,7 @@ public static object FromString(Type type, string value) return value.Split('\r'); } if (type == typeof(Font)) - { - Font font; - -#if FRCORE || COREWIN - // This patch made for "Wix Madefor Text" font - // We manually parse font description and create font - - String[] fontNameFields = value.Split(','); - if (Config.PrivateFontCollection.HasFont(fontNameFields[0])) - { - FontFamily fontFamily = new FontFamily(fontNameFields[0], Config.PrivateFontCollection.Collection); - fontNameFields[1] = fontNameFields[1].Replace("pt", ""); - float size = float.Parse(fontNameFields[1]); - if(fontNameFields.Length == 3) - { - fontNameFields[2] = fontNameFields[2].Replace("style=", ""); - FontStyle style = ((FontStyle)Enum.Parse(typeof(FontStyle), fontNameFields[2])); - font = new Font(fontFamily, size, style); - } - else - { - font = new Font(fontFamily, size); - } - } - else -#endif - { - font = new TypeConverters.FontConverter().ConvertFromInvariantString(value) as Font; - font = Config.PrivateFontCollection.CheckFamily(font); - } - - return font; - } - + return new TypeConverters.FontConverter().ConvertFromInvariantString(value) as Font; if (type == typeof(Color)) return new ColorConverter().ConvertFromInvariantString(value); return TypeDescriptor.GetConverter(type).ConvertFromInvariantString(value); diff --git a/FastReport.Base/Utils/DrawUtils.Win32.cs b/FastReport.Base/Utils/DrawUtils.Win32.cs deleted file mode 100644 index b809bf39..00000000 --- a/FastReport.Base/Utils/DrawUtils.Win32.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System; -using System.Drawing; -using System.Runtime.InteropServices; -using System.Windows.Forms; - -namespace FastReport.Utils -{ - partial class DrawUtils - { -#if CROSSPLATFORM - static IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, DrawingOptions drawingOptions) - { - return IntPtr.Zero; - } -#else - [DllImport("user32.dll")] - static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, DrawingOptions drawingOptions); -#endif - - const int WM_PRINT = 0x317; - - [Flags] - enum DrawingOptions - { - PRF_CHECKVISIBLE = 0x01, - PRF_NONCLIENT = 0x02, - PRF_CLIENT = 0x04, - PRF_ERASEBKGND = 0x08, - PRF_CHILDREN = 0x10, - PRF_OWNED = 0x20 - } - - /// - /// Draws control to a bitmap. - /// - /// Control to draw. - /// Determines whether to draw control's children or not. - /// The bitmap. - public static Bitmap DrawToBitmap(Control control, bool children) - { - Bitmap bitmap = new Bitmap(control.Width, control.Height); - using (Graphics gr = Graphics.FromImage(bitmap)) - { - IntPtr hdc = gr.GetHdc(); - DrawingOptions options = DrawingOptions.PRF_ERASEBKGND | - DrawingOptions.PRF_CLIENT | DrawingOptions.PRF_NONCLIENT; - if (children) - options |= DrawingOptions.PRF_CHILDREN; - SendMessage(control.Handle, WM_PRINT, hdc, options); - gr.ReleaseHdc(hdc); - } - return bitmap; - } - } -} \ No newline at end of file diff --git a/FastReport.Base/Utils/DrawUtils.cs b/FastReport.Base/Utils/DrawUtils.cs index b8decd79..52ab86d3 100644 --- a/FastReport.Base/Utils/DrawUtils.cs +++ b/FastReport.Base/Utils/DrawUtils.cs @@ -14,7 +14,6 @@ internal enum MonoRendering public static partial class DrawUtils { private static Font FDefaultFont; - private static Font FDefault96Font; private static Font FDefaultReportFont; private static Font FDefaultTextObjectFont; private static Font FFixedFont; @@ -57,6 +56,20 @@ public static Font DefaultFont { if (FDefaultFont == null) { +#if AVALONIA + if (OperatingSystem.IsWindows()) + { + FDefaultFont = new Font("Segoe UI", 8.5f); + } + else if (OperatingSystem.IsMacOS()) + { + FDefaultFont = new Font("Helvetica Neue", 8.5f); + } + else if (OperatingSystem.IsLinux()) + { + FDefaultFont = new Font("Liberation Sans", 8.5f); + } +#else switch (System.Globalization.CultureInfo.CurrentCulture.TwoLetterISOLanguageName) { case "ja": @@ -75,9 +88,14 @@ public static Font DefaultFont #endif break; } +#endif } return FDefaultFont; } + set + { + FDefaultFont = value; + } } public static Font DefaultReportFont @@ -122,6 +140,19 @@ public static Font FixedFont if (FFixedFont == null) #if WPF FFixedFont = CreateFont("Consolas", 9); +#elif AVALONIA + if (OperatingSystem.IsWindows()) + { + FFixedFont = CreateFont("Lucida Console", 9); + } + else if (OperatingSystem.IsMacOS()) + { + FFixedFont = CreateFont("PT Mono", 9); + } + else if (OperatingSystem.IsLinux()) + { + FFixedFont = CreateFont("Liberation Mono", 9); + } #else FFixedFont = CreateFont("Courier New", 10); #endif @@ -129,36 +160,6 @@ public static Font FixedFont } } - public static Font Default96Font - { - get - { - if (FDefault96Font == null) - { - float sz = 96f / ScreenDpi; - switch (System.Globalization.CultureInfo.CurrentCulture.TwoLetterISOLanguageName) - { - case "ja": - FDefault96Font = CreateFont("MS UI Gothic", 9 * sz); - break; - - case "zh": - FDefault96Font = CreateFont("SimSun", 9 * sz); - break; - - default: -#if WPF - FDefault96Font = CreateFont("Segoe UI", 8.5f * sz); -#else - FDefault96Font = CreateFont("Tahoma", 8 * sz); -#endif - break; - } - } - return FDefault96Font; - } - } - internal static Font CreateFont(string familyName, float emSize, FontStyle style = FontStyle.Regular, GraphicsUnit unit = GraphicsUnit.Point, @@ -167,14 +168,15 @@ internal static Font CreateFont(string familyName, float emSize, { Font font = new Font(familyName, emSize, style, unit, gdiCharSet, gdiVerticalFont); -#if SKIA +// skia now handles Font instantiation correctly +/*#if SKIA if (font.Name != familyName) { // font family not found in installed fonts, search in the user fonts font = new Font(familyName, emSize, style, unit, gdiCharSet, gdiVerticalFont, Config.PrivateFontCollection.Collection); } -#endif - return font; +#endif*/ + return font; } public static SizeF MeasureString(string text) @@ -212,17 +214,6 @@ public static SizeF MeasureString(Graphics g, string text, Font font, RectangleF return rect.Size; } - public static void FloodFill(Bitmap bmp, int x, int y, Color color, Color replacementColor) - { - if (x < 0 || y < 0 || x >= bmp.Width || y >= bmp.Height || bmp.GetPixel(x, y) != color) - return; - bmp.SetPixel(x, y, replacementColor); - FloodFill(bmp, x - 1, y, color, replacementColor); - FloodFill(bmp, x + 1, y, color, replacementColor); - FloodFill(bmp, x, y - 1, color, replacementColor); - FloodFill(bmp, x, y + 1, color, replacementColor); - } - internal static MonoRendering GetMonoRendering(IGraphics printerGraphics) { if (FMonoRendering == MonoRendering.Undefined) diff --git a/FastReport.Base/Utils/FRPrivateFontCollection.cs b/FastReport.Base/Utils/FRPrivateFontCollection.cs index 51d3ea0b..f9053a4f 100644 --- a/FastReport.Base/Utils/FRPrivateFontCollection.cs +++ b/FastReport.Base/Utils/FRPrivateFontCollection.cs @@ -1,201 +1,15 @@ using System; -using System.Collections.Generic; -using System.IO; -using System.Runtime.InteropServices; -using System.Drawing.Text; -using System.Drawing; -using System.Linq; -#if SKIA -using static SkiaSharp.HarfBuzz.SKShaper; -using System.Diagnostics; -using FastReport.Fonts; -#endif namespace FastReport.Utils { /// /// A wrapper around PrivateFontCollection. /// + [Obsolete("Use FastReport.FontManager instead")] public partial class FRPrivateFontCollection { - private readonly PrivateFontCollection collection = TypeConverters.FontConverter.PrivateFontCollection; - private readonly Dictionary _fonts = new Dictionary(); + public bool AddFontFile(string filename) => FontManager.AddFont(filename); - - internal PrivateFontCollection Collection { get { return collection; } } - - /// - /// Gets the array of FontFamily objects associated with this collection. - /// - public FontFamily[] Families { get { return collection.Families; } } - - /// - /// Checks if the font name is contained in this collection. - /// - /// The name of the font. - /// true if the font is contained in this collection. - public bool HasFont(string fontName) - { - return _fonts.ContainsKey(fontName); - } - - /// - /// Returns the font's stream. - /// - /// The name of the font. - /// Either FileStream or MemoryStream containing font data. - public Stream GetFontStream(string fontName) - { - if (_fonts.TryGetValue(fontName, out var font)) - { - return font.GetFontStream(); - } - - return null; - } - - /// - /// Adds a font from the specified file to this collection. - /// - /// A System.String that contains the file name of the font to add. - /// true if the font is registered by application. - public bool AddFontFile(string filename) - { - bool success = false; - if (File.Exists(filename)) - { - // if (!FontFiles.ContainsValue(filename)) - if (!_fonts.Values.OfType().Any(fontFile => fontFile._filepath == filename)) - { - collection.AddFontFile(filename); - RegisterFontInternal(filename); - success = true; - } -#if DEBUG // Not so important information - else - { - Console.WriteLine("Font file '{0}' already present in collection", filename); - } -#endif - } -#if DEBUG - else - { - Console.WriteLine("Font file '{0}' not found", filename); - } -#endif - return success; - } - -#if SKIA - public void AddFontFromStream(Stream stream) - { - using (FontStream fs = new FontStream(stream)) - { - FontType font_type = TrueTypeCollection.CheckFontType(fs); - IList list = TrueTypeCollection.AddFontData(font_type, fs); - foreach (var ttf in list) - { - if (!_fonts.ContainsKey(ttf.FastName)) - { - stream.Position = 0; - var ms = new MemoryStream(); - stream.CopyTo(ms); - ms.Position = 0; - _fonts.Add(ttf.FastName, new FontFromStream(ms)); - } - else - Console.WriteLine("Font {0} already registered\n", ttf.FastName); - } - fs.LeaveOpen = true; - } - - stream.Position = 0; - collection.AddFont(stream); - stream.Position = 0; - } - - public void AddTempFontStream(Stream stream) - { - - } - -#endif - - /// - /// Adds a font contained in system memory to this collection. - /// - /// The memory address of the font to add. - /// The memory length of the font to add. - public void AddMemoryFont(IntPtr memory, int length) - { - collection.AddMemoryFont(memory, length); - string fontName = Families[Families.Length - 1].Name; - if (!_fonts.ContainsKey(fontName)) - _fonts.Add(fontName, new MemoryFont(memory, length)); - } - - private abstract class DictionaryFont - { - public abstract Stream GetFontStream(); - } - - private sealed class FontFromFile : DictionaryFont - { - internal readonly string _filepath; - - public FontFromFile(string filepath) - { - _filepath = filepath; - } - - public override Stream GetFontStream() - { - return new FileStream(_filepath, FileMode.Open, FileAccess.Read); - } - - public override string ToString() - { - return _filepath; - } - } - - private sealed class FontFromStream : DictionaryFont - { - private readonly Stream _stream; - - public FontFromStream(Stream stream) - { - _stream = stream; - } - - public override Stream GetFontStream() - { - var newStream = new MemoryStream(); - _stream.CopyTo(newStream); - _stream.Position = 0; - newStream.Position = 0; - return newStream; - } - } - - private sealed class MemoryFont : DictionaryFont - { - private readonly IntPtr Memory; - private readonly int Length; - - public MemoryFont(IntPtr memory, int length) - { - Memory = memory; - Length = length; - } - - public override Stream GetFontStream() - { - byte[] buffer = new byte[Length]; - Marshal.Copy(Memory, buffer, 0, Length); - return new MemoryStream(buffer); - } - } + public void AddMemoryFont(IntPtr memory, int length) => FontManager.AddFont(memory, length); } } diff --git a/FastReport.Base/Utils/FontManager.Gdi.cs b/FastReport.Base/Utils/FontManager.Gdi.cs new file mode 100644 index 00000000..6e7ce128 --- /dev/null +++ b/FastReport.Base/Utils/FontManager.Gdi.cs @@ -0,0 +1,43 @@ +// available in FR.OS, FR.NET, FR.WPF +#if !SKIA && !FRCORE && (!MONO || WPF) +using System; +using System.Diagnostics; +using System.Drawing.Text; +using System.IO; + +namespace FastReport +{ + public static partial class FontManager + { + /// + /// Adds a font from the specified file to this collection. + /// + /// A System.String that contains the file name of the font to add. + /// true if the font is registered by application. + public static bool AddFont(string filename) + { + bool success = false; + if (File.Exists(filename)) + { + PrivateFontCollection.AddFontFile(filename); + success = true; + } + else + { + Debug.WriteLine($"Font file '{filename}' not found"); + } + return success; + } + + /// + /// Adds a font contained in system memory to this collection. + /// + /// The memory address of the font to add. + /// The memory length of the font to add. + public static void AddFont(IntPtr memory, int length) + { + PrivateFontCollection.AddMemoryFont(memory, length); + } + } +} +#endif \ No newline at end of file diff --git a/FastReport.Base/Utils/FontManager.Internals.cs b/FastReport.Base/Utils/FontManager.Internals.cs new file mode 100644 index 00000000..bf00536f --- /dev/null +++ b/FastReport.Base/Utils/FontManager.Internals.cs @@ -0,0 +1,66 @@ +using System; +using System.Drawing; + +namespace FastReport +{ + public static partial class FontManager + { + // do not remove + private static readonly FontFamilyMatcher fontFamilyMatcher = new FontFamilyMatcher(); + + [Flags] + private enum SearchScope + { + Temporary = 0x1, + Private = 0x2, + Installed = 0x4, + + NonInstalled = Temporary | Private, + All = Temporary | Private | Installed + } + + // Defines a font substitute item. + private class FontSubstitute + { + private string[] _substituteList; + private FontFamily _substituteFamily; + + public string Name { get; } + + // null value indicates that no substitute found + public FontFamily SubstituteFamily => _substituteFamily ?? FindSubstituteFamily(SearchScope.NonInstalled); + + private FontFamily FindSubstituteFamily(SearchScope searchScope) + { + foreach (var item in _substituteList) + { + var family = FindFontFamily(item, searchScope); + if (family != null) + { + return family; + } + } + return null; + } + + public FontSubstitute(string name, params string[] substituteList) + { + Name = name; + _substituteList = substituteList; + // do initial search in installed fonts. Other collections should be checked later. + _substituteFamily = FindSubstituteFamily(SearchScope.Installed); + } + } + + // used in the FR FontConverter to look up family name in all font collections + private class FontFamilyMatcher : FastReport.TypeConverters.FontConverter.IFontFamilyMatcher + { + public FontFamilyMatcher() + { + FastReport.TypeConverters.FontConverter.FontFamilyMatcher = this; + } + + public FontFamily GetFontFamilyOrDefault(string name) => FontManager.GetFontFamilyOrDefault(name); + } + } +} diff --git a/FastReport.Base/Utils/FontManager.cs b/FastReport.Base/Utils/FontManager.cs new file mode 100644 index 00000000..ffaf2da0 --- /dev/null +++ b/FastReport.Base/Utils/FontManager.cs @@ -0,0 +1,143 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Text; +using System.Linq; + +namespace FastReport +{ + /// + /// Contains font management methods and properties. + /// + public static partial class FontManager + { + // NOT THREAD SAFE! + private static PrivateFontCollection PrivateFontCollection { get; } = new PrivateFontCollection(); + + // NOT THREAD SAFE! + // Do not update PrivateFontCollection at realtime, you must update property value then dispose previous. + private static PrivateFontCollection TemporaryFontCollection { get; set; } = null; + + private static InstalledFontCollection InstalledFontCollection { get; } = new InstalledFontCollection(); + + private static List SubstituteFonts { get; } = new List(); + + /// + /// Gets all installed font families. + /// + /// + /// This method enumerates all font collections (PrivateFontCollection, TemporaryFontCollection, InstalledFontCollection) + /// and sorts the result. + /// + public static FontFamily[] AllFamilies + { + get + { + var families = new List(); + + families.AddRange(InstalledFontCollection.Families); + families.AddRange(PrivateFontCollection.Families); + if (TemporaryFontCollection != null) + { + families.AddRange(TemporaryFontCollection.Families); + } + + families.Sort((x, y) => x.Name.CompareTo(y.Name)); + return families.ToArray(); + } + } + + /// + /// Adds a new substitute font item. + /// + /// The original font name, e.g. "Arial" + /// The alternatives list, e.g. "Ubuntu Sans", "Liberation Sans", "Helvetica" + /// + /// Substitute font replaces the original font if it is not present on a machine. + /// For example, you may define "Helvetica Neue" substitute for "Arial". + /// + public static void AddSubstituteFont(string originalFontName, params string[] substituteFonts) + { + SubstituteFonts.Add(new FontSubstitute(originalFontName, substituteFonts)); + } + + /// + /// Removes substitute fonts for the given font. + /// + /// The original font name, e.g. "Arial" + public static void RemoveSubstituteFont(string originalFontName) + { + for (int i = 0; i < SubstituteFonts.Count; i++) + { + if (SubstituteFonts[i].Name == originalFontName) + { + SubstituteFonts.RemoveAt(i); + i--; + } + } + } + + /// + /// Clears all substitute fonts. + /// + public static void ClearSubstituteFonts() + { + SubstituteFonts.Clear(); + } + + /// + /// Finds a FontFamily by its name in specified font collections. + /// + /// The family name, e.g. "Arial". + /// Search scope. + /// The FontFamily instance if found; otherwise null. + private static FontFamily FindFontFamily(string name, SearchScope searchScope = SearchScope.All) + { + FontFamily family = null; + + if ((searchScope & SearchScope.Temporary) != 0) + { + family = Find(TemporaryFontCollection); + } + if ((searchScope & SearchScope.Private) != 0) + { + family ??= Find(PrivateFontCollection); + } + if ((searchScope & SearchScope.Installed) != 0) + { + family ??= Find(InstalledFontCollection); + } + return family; + + FontFamily Find(FontCollection collection) => + collection?.Families.Where(f => f.Name.Equals(name, StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); + } + + /// + /// Finds a FontFamily by its name. + /// + /// The family name, e.g. "Arial". + /// The FontFamily instance if found; otherwise default FontFamily.GenericSansSerif. + internal static FontFamily GetFontFamilyOrDefault(string name) + { + var fontFamily = FindFontFamily(name); + + if (fontFamily == null) + { + // try to substitute + foreach (var item in SubstituteFonts) + { + if (item.Name == name) + { + // may be null! + fontFamily = item.SubstituteFamily; + break; + } + } + } + + // return default if not found + return fontFamily ?? FontFamily.GenericSansSerif; + } + } +} diff --git a/FastReport.Compat/src/Directory.Build.props b/FastReport.Compat/Directory.Build.props similarity index 80% rename from FastReport.Compat/src/Directory.Build.props rename to FastReport.Compat/Directory.Build.props index 3e2c97b2..0c96b5b1 100644 --- a/FastReport.Compat/src/Directory.Build.props +++ b/FastReport.Compat/Directory.Build.props @@ -3,7 +3,6 @@ $(MSBuildThisFileDirectory).. - $(MSBuildProjectDirectory)\bin Fast Reports Inc. FastReport FastReport.Compat @@ -11,14 +10,14 @@ LICENSE.md https://www.fast-report.com/en/product/fast-report-net reporting, reports, pdf, html, mvc, core - https://github.com/FastReports/FastReport.Compat + https://github.com/FastReports/FastReport GIT true Common compatible types for FastReport .Net, Core and Mono frlogo192.png true - $(SlnDir)\FastReport.OpenSource.snk + ..\..\FastReport.OpenSource.snk $(MSBuildThisFileDirectory)shared @@ -35,15 +34,15 @@ - + True - + True - + True false diff --git a/FastReport.Compat/FastReport.Compat.sln b/FastReport.Compat/FastReport.Compat.sln deleted file mode 100644 index 22ad9956..00000000 --- a/FastReport.Compat/FastReport.Compat.sln +++ /dev/null @@ -1,51 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.2.32519.379 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{C137F644-DCB8-424D-A49D-4ABE28E4BA72}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FastReport.Compat", "src\FastReport.Compat\FastReport.Compat.csproj", "{9A315AD7-3470-426C-B0B2-B9ECFA76C64B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FastReport.Compat-Windows", "src\FastReport.Compat-Windows\FastReport.Compat-Windows.csproj", "{AB9F228F-5B37-436D-968F-37266B445B64}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FastReport.Compat.Skia", "src\FastReport.Compat.Skia\FastReport.Compat.Skia.csproj", "{C0A7385F-9AC6-4CC7-8BAA-E740F0C726D4}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Demo|Any CPU = Demo|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {9A315AD7-3470-426C-B0B2-B9ECFA76C64B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9A315AD7-3470-426C-B0B2-B9ECFA76C64B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9A315AD7-3470-426C-B0B2-B9ECFA76C64B}.Demo|Any CPU.ActiveCfg = Release|Any CPU - {9A315AD7-3470-426C-B0B2-B9ECFA76C64B}.Demo|Any CPU.Build.0 = Release|Any CPU - {9A315AD7-3470-426C-B0B2-B9ECFA76C64B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9A315AD7-3470-426C-B0B2-B9ECFA76C64B}.Release|Any CPU.Build.0 = Release|Any CPU - {AB9F228F-5B37-436D-968F-37266B445B64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AB9F228F-5B37-436D-968F-37266B445B64}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AB9F228F-5B37-436D-968F-37266B445B64}.Demo|Any CPU.ActiveCfg = Release|Any CPU - {AB9F228F-5B37-436D-968F-37266B445B64}.Demo|Any CPU.Build.0 = Release|Any CPU - {AB9F228F-5B37-436D-968F-37266B445B64}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AB9F228F-5B37-436D-968F-37266B445B64}.Release|Any CPU.Build.0 = Release|Any CPU - {C0A7385F-9AC6-4CC7-8BAA-E740F0C726D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C0A7385F-9AC6-4CC7-8BAA-E740F0C726D4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C0A7385F-9AC6-4CC7-8BAA-E740F0C726D4}.Demo|Any CPU.ActiveCfg = Demo|Any CPU - {C0A7385F-9AC6-4CC7-8BAA-E740F0C726D4}.Demo|Any CPU.Build.0 = Demo|Any CPU - {C0A7385F-9AC6-4CC7-8BAA-E740F0C726D4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C0A7385F-9AC6-4CC7-8BAA-E740F0C726D4}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {9A315AD7-3470-426C-B0B2-B9ECFA76C64B} = {C137F644-DCB8-424D-A49D-4ABE28E4BA72} - {AB9F228F-5B37-436D-968F-37266B445B64} = {C137F644-DCB8-424D-A49D-4ABE28E4BA72} - {C0A7385F-9AC6-4CC7-8BAA-E740F0C726D4} = {C137F644-DCB8-424D-A49D-4ABE28E4BA72} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {C3FF3494-9BB7-4A9B-BE84-B3A9AA93C2D3} - EndGlobalSection -EndGlobal diff --git a/FastReport.Compat/FastReport.Compat/FastReport.Compat.csproj b/FastReport.Compat/FastReport.Compat/FastReport.Compat.csproj new file mode 100644 index 00000000..5c9c8861 --- /dev/null +++ b/FastReport.Compat/FastReport.Compat/FastReport.Compat.csproj @@ -0,0 +1,39 @@ + + + + net462;net6.0;net6.0-windows7.0 + false + + true + false + + + + true + + + + + + + + + + + + + + + + + + + + WindowsForms/%(RecursiveDir)%(Filename)%(Extension) + + + DotNetClasses\UITypeEditor.cs + + + + \ No newline at end of file diff --git a/FastReport.Compat/FastReport.OpenSource.snk b/FastReport.Compat/FastReport.OpenSource.snk deleted file mode 100644 index 43376c7e5071e374564c876c7fb46569dd6d9f0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50098i4@{_KP`fOMtG*S<11lT$c8+3Y0dbQK zM)HWD@!z6JG|-UO?>#yA^t;?eRfvl}-l?McnQ|HCyujJ6cFt+L)%cyYm~!z+b^U%# zTWo3CP|EtVa{&0-pxT|;q+qK1!H_#)zUlL)61p`ao{Fh3HDWX`Xs(*#lbUnd_;kb< z?34cEKYocU=wc~JZnKTg+H))Tr(cgfH#=ih(a+(XV_m=n-CauR%ou{E{ywWwi(U<#yveTK&m>Hv#9P7ozDf!!WQ_ZBr#}8 zg&6XCbs0@QK8NG0%^RUk2Tz<5Hd`}-%)B27n&A+9i#v6X1mr`vx?MVF7~~kgxQ<8t ziJ4s7qj;TEk%Hn}r2^PvaQz4`eC*70_(&_cdnHzHRT#VZ2WcQfhR0n|Z~3 zhf`HJ=qiml9vsvKYkY}2;(nfODcZuy8SSIEq)ktF%tHn0ME|16SK{*7xM!2ayZi;u zex!g}xG$=?x}d8Y9)(RTMSs0Z?ZjS+(a^lV*!P~SOP=Z*c%l6;)+ iXsAV6`XU|nQ5t(zSzxbAcPM89`|BQ=zHx}q(KWJ0R4D@h diff --git a/FastReport.Compat/Nuget/FastReport.Compat/buildTransitive/netcoreapp3.0/FastReport.Compat.targets b/FastReport.Compat/Nuget/FastReport.Compat/buildTransitive/netcoreapp3.0/FastReport.Compat.targets deleted file mode 100644 index eac500f5..00000000 --- a/FastReport.Compat/Nuget/FastReport.Compat/buildTransitive/netcoreapp3.0/FastReport.Compat.targets +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/FastReport.Compat/Nuget/_._ b/FastReport.Compat/Nuget/_._ deleted file mode 100644 index e69de29b..00000000 diff --git a/FastReport.Compat/Nuget/template.nuspec b/FastReport.Compat/Nuget/template.nuspec deleted file mode 100644 index f87989fa..00000000 --- a/FastReport.Compat/Nuget/template.nuspec +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/FastReport.Compat/UsedPackages.version b/FastReport.Compat/UsedPackages.version deleted file mode 100644 index 179a2d26..00000000 --- a/FastReport.Compat/UsedPackages.version +++ /dev/null @@ -1,17 +0,0 @@ - - - - - 2024.1.0 - - 2024.1.0 - - [4.7.3,) - - [3.3.1,) - - [3.3.1,) - - - - \ No newline at end of file diff --git a/FastReport.Compat/_Build_Compat_Packages.bat b/FastReport.Compat/_Build_Compat_Packages.bat deleted file mode 100644 index e0cb91b2..00000000 --- a/FastReport.Compat/_Build_Compat_Packages.bat +++ /dev/null @@ -1,14 +0,0 @@ -@echo off -setlocal ENABLEDELAYEDEXPANSION -rem HELP FOR THIS FILE -rem CLONE the fr if need -rem clear the fr if need -rem next run scripts from the fr tools -rem that's all - -ECHO TRY TO BUILD FR.Compat - -pushd .\build\Cake - dotnet run --target=PackCompat --solution-filename=FastReport.Compat.sln --config=Release --vers=2024.1.0 - dotnet run --target=PackCompatSkia --solution-filename=FastReport.Compat.sln --config=Release --vers=2024.1.0 -popd \ No newline at end of file diff --git a/FastReport.Compat/build_WPF.bat b/FastReport.Compat/build_WPF.bat deleted file mode 100644 index 1f66efc4..00000000 --- a/FastReport.Compat/build_WPF.bat +++ /dev/null @@ -1,2 +0,0 @@ -dotnet pack src\FastReport.Compat-Windows\FastReport.Compat.WPF.csproj --configuration=Release /p:Version=2024.1.0 -dotnet pack src\FastReport.Compat-Windows\FastReport.Compat.WPF.csproj --configuration=Demo /p:Version=2024.1.0 diff --git a/FastReport.Compat/frlogo192.png b/FastReport.Compat/frlogo192.png deleted file mode 100644 index 3d34b5802285eea65c5849cf11c8fcfd3d6e0b54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25992 zcmV)mK%T#eP)004R=004l4008;_004mL004C`008P>0026e000+nl3&F}00006 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 Hu0mjfLHC;p diff --git a/FastReport.Compat/src/shared/Compiler/CSharpCodeProvider.cs b/FastReport.Compat/shared/Compiler/CSharpCodeProvider.cs similarity index 100% rename from FastReport.Compat/src/shared/Compiler/CSharpCodeProvider.cs rename to FastReport.Compat/shared/Compiler/CSharpCodeProvider.cs diff --git a/FastReport.Compat/src/shared/Compiler/CodeDomProvider.cs b/FastReport.Compat/shared/Compiler/CodeDomProvider.cs similarity index 100% rename from FastReport.Compat/src/shared/Compiler/CodeDomProvider.cs rename to FastReport.Compat/shared/Compiler/CodeDomProvider.cs diff --git a/FastReport.Compat/src/shared/Compiler/CodeGenerator.cs b/FastReport.Compat/shared/Compiler/CodeGenerator.cs similarity index 100% rename from FastReport.Compat/src/shared/Compiler/CodeGenerator.cs rename to FastReport.Compat/shared/Compiler/CodeGenerator.cs diff --git a/FastReport.Compat/src/shared/Compiler/CompilationEventArgs.cs b/FastReport.Compat/shared/Compiler/CompilationEventArgs.cs similarity index 100% rename from FastReport.Compat/src/shared/Compiler/CompilationEventArgs.cs rename to FastReport.Compat/shared/Compiler/CompilationEventArgs.cs diff --git a/FastReport.Compat/src/shared/Compiler/CompilerError.cs b/FastReport.Compat/shared/Compiler/CompilerError.cs similarity index 100% rename from FastReport.Compat/src/shared/Compiler/CompilerError.cs rename to FastReport.Compat/shared/Compiler/CompilerError.cs diff --git a/FastReport.Compat/src/shared/Compiler/CompilerParameters.cs b/FastReport.Compat/shared/Compiler/CompilerParameters.cs similarity index 100% rename from FastReport.Compat/src/shared/Compiler/CompilerParameters.cs rename to FastReport.Compat/shared/Compiler/CompilerParameters.cs diff --git a/FastReport.Compat/src/shared/Compiler/CompilerResults.cs b/FastReport.Compat/shared/Compiler/CompilerResults.cs similarity index 100% rename from FastReport.Compat/src/shared/Compiler/CompilerResults.cs rename to FastReport.Compat/shared/Compiler/CompilerResults.cs diff --git a/FastReport.Compat/src/shared/Compiler/IAssemblyLoadResolver.cs b/FastReport.Compat/shared/Compiler/IAssemblyLoadResolver.cs similarity index 100% rename from FastReport.Compat/src/shared/Compiler/IAssemblyLoadResolver.cs rename to FastReport.Compat/shared/Compiler/IAssemblyLoadResolver.cs diff --git a/FastReport.Compat/src/shared/Compiler/TempFileCollection.cs b/FastReport.Compat/shared/Compiler/TempFileCollection.cs similarity index 100% rename from FastReport.Compat/src/shared/Compiler/TempFileCollection.cs rename to FastReport.Compat/shared/Compiler/TempFileCollection.cs diff --git a/FastReport.Compat/src/shared/Compiler/VBCodeProvider.cs b/FastReport.Compat/shared/Compiler/VBCodeProvider.cs similarity index 100% rename from FastReport.Compat/src/shared/Compiler/VBCodeProvider.cs rename to FastReport.Compat/shared/Compiler/VBCodeProvider.cs diff --git a/FastReport.Compat/src/shared/DotNetClasses/Color.Full.cs b/FastReport.Compat/shared/DotNetClasses/Color.Full.cs similarity index 100% rename from FastReport.Compat/src/shared/DotNetClasses/Color.Full.cs rename to FastReport.Compat/shared/DotNetClasses/Color.Full.cs diff --git a/FastReport.Compat/src/shared/DotNetClasses/GdiGraphics.cs b/FastReport.Compat/shared/DotNetClasses/GdiGraphics.cs similarity index 100% rename from FastReport.Compat/src/shared/DotNetClasses/GdiGraphics.cs rename to FastReport.Compat/shared/DotNetClasses/GdiGraphics.cs diff --git a/FastReport.Compat/src/shared/DotNetClasses/IGraphics.cs b/FastReport.Compat/shared/DotNetClasses/IGraphics.cs similarity index 100% rename from FastReport.Compat/src/shared/DotNetClasses/IGraphics.cs rename to FastReport.Compat/shared/DotNetClasses/IGraphics.cs diff --git a/FastReport.Compat/src/shared/DotNetClasses/UITypeEditor.cs b/FastReport.Compat/shared/DotNetClasses/UITypeEditor.cs similarity index 100% rename from FastReport.Compat/src/shared/DotNetClasses/UITypeEditor.cs rename to FastReport.Compat/shared/DotNetClasses/UITypeEditor.cs diff --git a/FastReport.Compat/src/shared/TypeConverters/Color.Core.cs b/FastReport.Compat/shared/TypeConverters/Color.Core.cs similarity index 100% rename from FastReport.Compat/src/shared/TypeConverters/Color.Core.cs rename to FastReport.Compat/shared/TypeConverters/Color.Core.cs diff --git a/FastReport.Compat/src/shared/TypeConverters/ColorConverter.cs b/FastReport.Compat/shared/TypeConverters/ColorConverter.cs similarity index 100% rename from FastReport.Compat/src/shared/TypeConverters/ColorConverter.cs rename to FastReport.Compat/shared/TypeConverters/ColorConverter.cs diff --git a/FastReport.Compat/shared/TypeConverters/FontConverter.IFontFamilyMatcher.cs b/FastReport.Compat/shared/TypeConverters/FontConverter.IFontFamilyMatcher.cs new file mode 100644 index 00000000..11dd5513 --- /dev/null +++ b/FastReport.Compat/shared/TypeConverters/FontConverter.IFontFamilyMatcher.cs @@ -0,0 +1,25 @@ +using System.ComponentModel; +using System.Drawing; +using System.Linq; + +namespace FastReport.TypeConverters +{ + public partial class FontConverter : TypeConverter + { + public static IFontFamilyMatcher FontFamilyMatcher { get; set; } = new DefaultFontFamilyMatcher(); + + public interface IFontFamilyMatcher + { + FontFamily GetFontFamilyOrDefault(string name); + } + + private class DefaultFontFamilyMatcher : IFontFamilyMatcher + { + public FontFamily GetFontFamilyOrDefault(string name) + { + var fontFamily = FontFamily.Families.Where(f => f.Name == name).FirstOrDefault(); + return fontFamily ?? FontFamily.GenericSansSerif; + } + } + } +} diff --git a/FastReport.Compat/src/shared/TypeConverters/FontConverter.cs b/FastReport.Compat/shared/TypeConverters/FontConverter.cs similarity index 83% rename from FastReport.Compat/src/shared/TypeConverters/FontConverter.cs rename to FastReport.Compat/shared/TypeConverters/FontConverter.cs index a213a541..14b28cd7 100644 --- a/FastReport.Compat/src/shared/TypeConverters/FontConverter.cs +++ b/FastReport.Compat/shared/TypeConverters/FontConverter.cs @@ -17,35 +17,15 @@ using System.Reflection; using System.Text; using System.Drawing; +using System.Linq; namespace FastReport.TypeConverters { - public class FontConverter : TypeConverter + public partial class FontConverter : TypeConverter { private const string StylePrefix = "style="; - [Obsolete] - public static FontConverter Instance = new FontConverter(); - - /// - /// Gets a PrivateFontCollection instance. - /// - /// - /// NOT THREAD SAFE! - /// - public static PrivateFontCollection PrivateFontCollection { get; } = new PrivateFontCollection(); - - /// - /// Do not update PrivateFontCollection at realtime, you must update property value then dispose previous. - /// - /// - /// NOT THREAD SAFE! - /// - public static PrivateFontCollection TemporaryFontCollection { get; set; } = null; - - public static InstalledFontCollection InstalledFontCollection { get; } = new InstalledFontCollection(); - /// public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { @@ -246,11 +226,8 @@ public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo c } } - var fontFamily = FindFontFamily(fontName, null); - - Font result = new Font(fontFamily, fontSize, fontStyle, units); - - return result; + var fontFamily = FontFamilyMatcher.GetFontFamilyOrDefault(fontName); + return new Font(fontFamily, fontSize, fontStyle, units); } private void ParseSizeTokens(string text, char separator, ref string size, ref string units) @@ -358,80 +335,12 @@ public override object CreateInstance(ITypeDescriptorContext context, IDictionar } else { - fontFamily = FindFontFamily(name, fontFamily); + fontFamily = FontFamilyMatcher.GetFontFamilyOrDefault(name); } return new Font(fontFamily, size, style, unit, charSet, vertical); } - private static FontFamily FindFontFamily(string name, FontFamily fontFamily) - { - FontCollection collection; - -#if SKIA - collection = TemporaryFontCollection; - - if (collection != null) - { - fontFamily = collection.FindInternalByGDIFontFamilyName(name); - } - - // font family not found in temp list - if (fontFamily == null) - { - collection = PrivateFontCollection; - fontFamily = collection.FindInternalByGDIFontFamilyName(name); - - // font family not found in private list - if (fontFamily == null) - { - collection = InstalledFontCollection; - fontFamily = collection.FindInternalByGDIFontFamilyName(name); - } - } -#else - collection = TemporaryFontCollection; - - if (collection != null) - { - foreach (FontFamily font in collection.Families) - { - if (name.Equals(font.Name, StringComparison.OrdinalIgnoreCase)) - { - return font; - } - } - } - - // font family not found in temp list - collection = PrivateFontCollection; - foreach (FontFamily font in collection.Families) - { - if (name.Equals(font.Name, StringComparison.OrdinalIgnoreCase)) - { - return font; - } - } - - // font family not found in private list - collection = InstalledFontCollection; - FontFamily[] privateFontList = collection.Families; - foreach (FontFamily font in privateFontList) - { - if (name.Equals(font.Name, StringComparison.OrdinalIgnoreCase)) - { - return font; - } - } - -#endif - - // font family not found in private fonts also - if (fontFamily == null) - fontFamily = FontFamily.GenericSansSerif; - return fontFamily; - } - /// public override bool GetCreateInstanceSupported(ITypeDescriptorContext context) { diff --git a/FastReport.Compat/src/shared/TypeConverters/SizeConverter.cs b/FastReport.Compat/shared/TypeConverters/SizeConverter.cs similarity index 100% rename from FastReport.Compat/src/shared/TypeConverters/SizeConverter.cs rename to FastReport.Compat/shared/TypeConverters/SizeConverter.cs diff --git a/FastReport.Compat/src/shared/WindowsForms/ComboBox.ObjectCollection.cs b/FastReport.Compat/shared/WindowsForms/ComboBox.ObjectCollection.cs similarity index 100% rename from FastReport.Compat/src/shared/WindowsForms/ComboBox.ObjectCollection.cs rename to FastReport.Compat/shared/WindowsForms/ComboBox.ObjectCollection.cs diff --git a/FastReport.Compat/src/shared/WindowsForms/ItemArray.cs b/FastReport.Compat/shared/WindowsForms/ItemArray.cs similarity index 100% rename from FastReport.Compat/src/shared/WindowsForms/ItemArray.cs rename to FastReport.Compat/shared/WindowsForms/ItemArray.cs diff --git a/FastReport.Compat/src/shared/WindowsForms/ListBox.ObjectCollection.cs b/FastReport.Compat/shared/WindowsForms/ListBox.ObjectCollection.cs similarity index 100% rename from FastReport.Compat/src/shared/WindowsForms/ListBox.ObjectCollection.cs rename to FastReport.Compat/shared/WindowsForms/ListBox.ObjectCollection.cs diff --git a/FastReport.Compat/src/shared/WindowsForms/ListBox.SelectedIndexCollection.cs b/FastReport.Compat/shared/WindowsForms/ListBox.SelectedIndexCollection.cs similarity index 100% rename from FastReport.Compat/src/shared/WindowsForms/ListBox.SelectedIndexCollection.cs rename to FastReport.Compat/shared/WindowsForms/ListBox.SelectedIndexCollection.cs diff --git a/FastReport.Compat/src/shared/WindowsForms/ListBox.SelectedObjectCollection.cs b/FastReport.Compat/shared/WindowsForms/ListBox.SelectedObjectCollection.cs similarity index 100% rename from FastReport.Compat/src/shared/WindowsForms/ListBox.SelectedObjectCollection.cs rename to FastReport.Compat/shared/WindowsForms/ListBox.SelectedObjectCollection.cs diff --git a/FastReport.Compat/src/shared/WindowsForms/WindowsFormsReplacement.BindingSource.cs b/FastReport.Compat/shared/WindowsForms/WindowsFormsReplacement.BindingSource.cs similarity index 100% rename from FastReport.Compat/src/shared/WindowsForms/WindowsFormsReplacement.BindingSource.cs rename to FastReport.Compat/shared/WindowsForms/WindowsFormsReplacement.BindingSource.cs diff --git a/FastReport.Compat/src/shared/WindowsForms/WindowsFormsReplacement.ListBindingHelper.cs b/FastReport.Compat/shared/WindowsForms/WindowsFormsReplacement.ListBindingHelper.cs similarity index 100% rename from FastReport.Compat/src/shared/WindowsForms/WindowsFormsReplacement.ListBindingHelper.cs rename to FastReport.Compat/shared/WindowsForms/WindowsFormsReplacement.ListBindingHelper.cs diff --git a/FastReport.Compat/src/shared/WindowsForms/WindowsFormsReplacement.cs b/FastReport.Compat/shared/WindowsForms/WindowsFormsReplacement.cs similarity index 100% rename from FastReport.Compat/src/shared/WindowsForms/WindowsFormsReplacement.cs rename to FastReport.Compat/shared/WindowsForms/WindowsFormsReplacement.cs diff --git a/FastReport.Compat/src/FastReport.Compat-Windows/FastReport.Compat-Windows.csproj b/FastReport.Compat/src/FastReport.Compat-Windows/FastReport.Compat-Windows.csproj deleted file mode 100644 index 170ec86c..00000000 --- a/FastReport.Compat/src/FastReport.Compat-Windows/FastReport.Compat-Windows.csproj +++ /dev/null @@ -1,42 +0,0 @@ - - - - net462;$(CustomTargetFrameworks) - $(DefineConstants);NETCOREWIN - true - FastReport.Compat - $(AssemblyName) - false - - - - $(TargetFrameworks);netcoreapp3.0;net5.0-windows7.0; - - - - - - - $(BaseOutputPath)\lib - - - - true - - - - $(BaseOutputPath)\build\$(TargetFramework)\lib\Win - - - - - - - - - - - - - - diff --git a/FastReport.Compat/src/FastReport.Compat/FastReport.Compat.csproj b/FastReport.Compat/src/FastReport.Compat/FastReport.Compat.csproj deleted file mode 100644 index 88c1572d..00000000 --- a/FastReport.Compat/src/FastReport.Compat/FastReport.Compat.csproj +++ /dev/null @@ -1,23 +0,0 @@ - - - - netstandard2.0;netstandard2.1;netcoreapp3.0 - true - - - - $(BaseOutputPath)\lib - - - - $(BaseOutputPath)\build\$(TargetFramework)\lib\Any - - - - - - - - - - diff --git a/FastReport.Core.Web/FastReport.OpenSource.Web.csproj b/FastReport.Core.Web/FastReport.OpenSource.Web.csproj index 2e602b61..37197b9c 100644 --- a/FastReport.Core.Web/FastReport.OpenSource.Web.csproj +++ b/FastReport.Core.Web/FastReport.OpenSource.Web.csproj @@ -5,7 +5,7 @@ true - netcoreapp3.1;net6.0 + net6.0 OPENSOURCE; 1.0.0 FastReport MIT license.md diff --git a/FastReport.OpenSource.sln b/FastReport.OpenSource.sln index 26f5e20d..f5f65b45 100644 --- a/FastReport.OpenSource.sln +++ b/FastReport.OpenSource.sln @@ -51,15 +51,13 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FastReport.OpenSource.MVC.6 EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FastReport.OpenSource.Angular", "Demos\OpenSource\SPA\FastReport.OpenSource.Angular\FastReport.OpenSource.Angular.csproj", "{C2DF96FD-5AED-47A8-99BD-696919ABFE0A}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FastReport.OpenSource.MVC.3.1", "Demos\OpenSource\MVC\FastReport.OpenSource.MVC.3.1\FastReport.OpenSource.MVC.3.1.csproj", "{320FE53B-1775-4DD2-8D2B-AB468B2839FA}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{A1827297-EAD4-413D-BA8D-811F5FF6125D}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FastReport.OpenSource.Plugins.WebP", "Extras\Core\FastReport.Plugin\FastReport.Plugins.WebP\FastReport.OpenSource.Plugins.WebP.csproj", "{28005ED3-3E5B-443F-A054-C74A45BE3C4C}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FastReport.OpenSource.Data.Odbc", "Extras\Core\FastReport.Data\FastReport.Data.Odbc\FastReport.OpenSource.Data.Odbc.csproj", "{7C97A904-620B-49A5-9000-41452DA11BB3}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FastReport.Compat", "FastReport.Compat\src\FastReport.Compat\FastReport.Compat.csproj", "{00AF18F4-89D0-434A-82C2-C8A8A43F008C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FastReport.Compat", "FastReport.Compat\FastReport.Compat\FastReport.Compat.csproj", "{00AF18F4-89D0-434A-82C2-C8A8A43F008C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -194,12 +192,6 @@ Global {C2DF96FD-5AED-47A8-99BD-696919ABFE0A}.Debug|Any CPU.Build.0 = Debug|Any CPU {C2DF96FD-5AED-47A8-99BD-696919ABFE0A}.Release|Any CPU.ActiveCfg = Release|Any CPU {C2DF96FD-5AED-47A8-99BD-696919ABFE0A}.Release|Any CPU.Build.0 = Release|Any CPU - {320FE53B-1775-4DD2-8D2B-AB468B2839FA}.Academic|Any CPU.ActiveCfg = Debug|Any CPU - {320FE53B-1775-4DD2-8D2B-AB468B2839FA}.Academic|Any CPU.Build.0 = Debug|Any CPU - {320FE53B-1775-4DD2-8D2B-AB468B2839FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {320FE53B-1775-4DD2-8D2B-AB468B2839FA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {320FE53B-1775-4DD2-8D2B-AB468B2839FA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {320FE53B-1775-4DD2-8D2B-AB468B2839FA}.Release|Any CPU.Build.0 = Release|Any CPU {28005ED3-3E5B-443F-A054-C74A45BE3C4C}.Academic|Any CPU.ActiveCfg = Debug|Any CPU {28005ED3-3E5B-443F-A054-C74A45BE3C4C}.Academic|Any CPU.Build.0 = Debug|Any CPU {28005ED3-3E5B-443F-A054-C74A45BE3C4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU @@ -242,7 +234,6 @@ Global {43BC1122-E846-406F-AA7D-737E8AC5AA6E} = {898AF8DC-11C3-4640-B60C-5D8CBF2F29CF} {477DA8DC-5CF9-4DCC-B616-3182735048A3} = {8E9E75EB-2ABC-4CC1-8AA0-C11DEE54A152} {C2DF96FD-5AED-47A8-99BD-696919ABFE0A} = {8E9E75EB-2ABC-4CC1-8AA0-C11DEE54A152} - {320FE53B-1775-4DD2-8D2B-AB468B2839FA} = {8E9E75EB-2ABC-4CC1-8AA0-C11DEE54A152} {A1827297-EAD4-413D-BA8D-811F5FF6125D} = {CCF32DAC-85D9-43D4-A4A7-72626A13D806} {28005ED3-3E5B-443F-A054-C74A45BE3C4C} = {A1827297-EAD4-413D-BA8D-811F5FF6125D} {7C97A904-620B-49A5-9000-41452DA11BB3} = {898AF8DC-11C3-4640-B60C-5D8CBF2F29CF} diff --git a/FastReport.OpenSource/FastReport.OpenSource.csproj b/FastReport.OpenSource/FastReport.OpenSource.csproj index d59f5b2f..78081f32 100644 --- a/FastReport.OpenSource/FastReport.OpenSource.csproj +++ b/FastReport.OpenSource/FastReport.OpenSource.csproj @@ -1,17 +1,14 @@  - - netstandard2.0 - + + net6.0 + 9.0 + $(TargetFrameworks);net462 - - $(TargetFrameworks);netstandard2.1 - - true true @@ -60,7 +57,7 @@ - TRACE;DOTNET_4 + TRACE;DOTNET_4;READONLY_STRUCTS $(DefineConstants);DEBUG; @@ -70,10 +67,6 @@ $(DefineConstants);CROSSPLATFORM - - - $(DefineConstants);READONLY_STRUCTS - @@ -82,17 +75,6 @@ - - - - - - - - - - - @@ -130,4 +112,9 @@ + + + + + \ No newline at end of file diff --git a/FastReport.OpenSource/Report.Core.cs b/FastReport.OpenSource/Report.Core.cs index a12addab..a18353cc 100644 --- a/FastReport.OpenSource/Report.Core.cs +++ b/FastReport.OpenSource/Report.Core.cs @@ -14,16 +14,6 @@ private void ClearPreparedPages() preparedPages.Clear(); } - /// - /// Does nothing - /// - /// - /// password - private string ShowPaswordForm(string password) - { - return password; - } - /// /// Does nothing /// diff --git a/FastReport.OpenSource/Utils/FRPrivateFontCollection.OpenSource.cs b/FastReport.OpenSource/Utils/FRPrivateFontCollection.OpenSource.cs deleted file mode 100644 index e0de5e60..00000000 --- a/FastReport.OpenSource/Utils/FRPrivateFontCollection.OpenSource.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Drawing; - -namespace FastReport.Utils -{ - /// - /// A wrapper around PrivateFontCollection. - /// - partial class FRPrivateFontCollection - { - private void RegisterFontInternal(string filename) - { - string fontName = Families[Families.Length - 1].Name; - if (!_fonts.ContainsKey(fontName)) - _fonts.Add(fontName, new FontFromFile(filename)); -#if DEBUG - else - Console.WriteLine("Font \"{0}\" already present in collection.\n Files:\n {1}\n {2}\n", fontName, _fonts[fontName], filename); -#endif - } - - internal Font CheckFamily(Font font) - { -#if DEBUG - if (font.OriginalFontName != null && font.Name != font.OriginalFontName) - { - Console.WriteLine("Font '{0}' was substituted with {1}", font.OriginalFontName, font.Name); - } -#endif - return font; - } - } -} diff --git a/FastReport/Resources/bo.png b/FastReport/Resources/bo.png new file mode 100644 index 0000000000000000000000000000000000000000..51861d49443c279ea91d749875770c9e6a1b1c15 GIT binary patch literal 905 zcmV;419tq0P)BZp3 z2@)@qn>XbzupB%~;z7d+j*AzK@zfacq=z0PL}E0l6%8Daq4MFDez0b6Y7DU3?e0vA zNq^VQ&OFcbednEh*JBt4M5C!n62Rohhi{#{m-33#uBl3#3J1_9Y7HRjhl&OBn9(*C;UPc2q&LG+2ptB^kB4goJjxf*6%IEZ-_TqOe7t2D{5Ne>xC%uT3osy8b8)85t zEd$M_WuV!#3^bdTfo5~m4bYxY(rSR|`@rk%(t9D2?D3U$E28Plvs$BtexY%|Pud@f zrZXwKj~*ohGi=xM^*m&n1B8${0OM>|L_*_yAezo3>lJTlfSI7}z6jeL-q1K7i>5R2 zXgV|Jbncp`5FsQ_2%#szCCj-$!zBUA%vbvaaoq#d?R?y;ymZz z*+X&sp<9;a6l=_e?TjBe6&`>5@yn!J!TWLbrCyfh29`HBgMllqDls7>$MR!< zQ-0J9m#YNbSwaZyI*)lho?ri+fhvTM>9S$;uv4ZXaKFs4W0&T|1$OEPMc8eWjui6sG=*4lOV00000NkvXXu0mjfG~Te| literal 0 HcmV?d00001 diff --git a/FastReport/Resources/en.xml b/FastReport/Resources/en.xml index 8e90021f..1d968074 100644 --- a/FastReport/Resources/en.xml +++ b/FastReport/Resources/en.xml @@ -2897,6 +2897,7 @@ + diff --git a/Localization/Russian.frl b/Localization/Russian.frl index f1400884..482e0caa 100644 --- a/Localization/Russian.frl +++ b/Localization/Russian.frl @@ -2664,6 +2664,7 @@ + diff --git a/Pack/BuildScripts/CakeAPI/CakeAPI.cs b/Pack/BuildScripts/CakeAPI/CakeAPI.cs index 0521d151..ee30c62b 100644 --- a/Pack/BuildScripts/CakeAPI/CakeAPI.cs +++ b/Pack/BuildScripts/CakeAPI/CakeAPI.cs @@ -1,15 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.CompilerServices; +using System.Runtime.CompilerServices; using Cake.Core; using Cake.Core.IO; using Cake.Core.Diagnostics; using Cake.Core.Tooling; -using Cake.Common.IO; using Cake.Common.Tools.NuGet; -using Cake.Common.Tools.NuGet.Pack; -using Cake.Common.Tools.MSBuild; using Cake.Common.Solution.Project; using Cake.Common.Xml; using Cake.Core.Configuration; @@ -22,16 +16,12 @@ using Cake.Incubator.GlobbingExtensions; using static Cake.Incubator.Project.ProjectParserExtensions; #endif -using Cake.Common.Tools.DotNet.Pack; using Cake.Common.Tools.DotNet.Test; using Cake.Common.Tools.DotNet.Restore; -using Cake.Common.Tools.DotNet; -using Cake.Common.Tools.DotNet.MSBuild; using Cake.Common.Tools.NuGet.Restore; -using Cake.Core.Annotations; using Cake.Common; using Cake.Common.Tools.SignTool; -using Cake.Common.Tools.DotNet.Build; +using Cake.Common.Tools.DotNet.Run; namespace CakeScript; @@ -70,6 +60,18 @@ public static void MSBuild(FilePath solution, Action configurat public static void MSBuild(FilePath solution, MSBuildSettings settings) => Context.MSBuild(solution, settings); + public static void DotNetRun(string project) + => Context.DotNetRun(project); + + public static void DotNetRun(string project, ProcessArgumentBuilder arguments) + => Context.DotNetRun(project, arguments); + + public static void DotNetRun(string project, ProcessArgumentBuilder arguments, DotNetRunSettings settings) + => Context.DotNetRun(project, arguments, settings); + + public static void DotNetRun(string project, DotNetRunSettings settings) + => Context.DotNetRun(project, settings); + public static void DotNetClean(string project) => Context.DotNetClean(project); diff --git a/Pack/BuildScripts/Tasks/BaseTasks.cs b/Pack/BuildScripts/Tasks/BaseTasks.cs index fb9f47f4..053a1c1d 100644 --- a/Pack/BuildScripts/Tasks/BaseTasks.cs +++ b/Pack/BuildScripts/Tasks/BaseTasks.cs @@ -1,158 +1,209 @@ -using System; -using System.IO; -using System.Collections.Generic; -using System.Linq; -using static CakeScript.Startup; +using static CakeScript.Startup; using static CakeScript.CakeAPI; -using Cake.Common.Tools.DotNet.MSBuild; -namespace CakeScript +namespace CakeScript; + +partial class Program { - partial class Program + bool IsDemo = true; + bool IsRelease = false; + bool IsProfessional = false; + bool IsDebug = false; + bool IsTest = false; + + string config = Argument("config", "Debug"); + string solutionDirectory = Argument("solution-directory", ""); + readonly string solutionFilename = Argument("solution-filename", "FastReport.Net.sln"); + readonly string version = Argument("vers", "1.0.0.0"); + string outdir = Argument("out-dir", ""); + readonly string pluginsRelativePath = Path.Combine("Extras", "Core", "FastReport.Data"); + readonly bool NuGetSpecialDirectorySort = Argument("nugetSpecialDirectorySort", false); + + readonly string[] Plugins_Core = new[] + { + "Postgres", + "MsSql", + "MySql", + "Json", + "Couchbase", + "MongoDB", + "OracleODPCore", + "RavenDB", + "SQLite", + "ClickHouse", + "Firebird", + "Excel", + "Cassandra", + "Odbc", + }; + + internal string SolutionFile => Path.Combine(solutionDirectory, solutionFilename); + + string PackDir => Path.Combine(solutionDirectory, "Pack"); + + internal string PluginsDir => Path.Combine(solutionDirectory, pluginsRelativePath); + + public Program(string[] args) { - bool IsDemo = true; - bool IsRelease = false; - bool IsProfessional = false; - bool IsDebug = false; - bool IsTest = false; - - string config = Argument("config", "Debug"); - string solutionDirectory = Argument("solution-directory", ""); - readonly string solutionFilename = Argument("solution-filename", "FastReport.Net.sln"); - readonly string version = Argument("vers", "1.0.0.0"); - string outdir = Argument("out-dir", ""); - readonly string pluginsRelativePath = Path.Combine("Extras", "Core", "FastReport.Data"); - - readonly string[] Plugins_Core = new[] - { - "Postgres", - "MsSql", - "MySql", - "Json", - "Couchbase", - "MongoDB", - "OracleODPCore", - "RavenDB", - "SQLite", - "ClickHouse", - "Firebird", - "Excel", - "Cassandra", - "Odbc", - }; - - internal string SolutionFile => Path.Combine(solutionDirectory, solutionFilename); - - string PackDir => Path.Combine(solutionDirectory, "Pack"); - - internal string PluginsDir => Path.Combine(solutionDirectory, pluginsRelativePath); - - public Program(string[] args) - { - - } - public void Init() - { - IsDebug = config.ToLower() == "debug"; - IsDemo = config.ToLower() == "demo"; - IsRelease = config.ToLower() == "release"; - IsProfessional = config.ToLower() == "professional"; - IsTest = config.ToLower() == "test"; + } + + public void Init() + { + IsDebug = config.ToLower() == "debug"; + IsDemo = config.ToLower() == "demo"; + IsRelease = config.ToLower() == "release"; + IsProfessional = config.ToLower() == "professional"; + IsTest = config.ToLower() == "test"; - Information($"CONFIG: {config}"); - } + Information($"CONFIG: {config}"); + } - [DependsOn(nameof(Init))] - public void Prepare() + [DependsOn(nameof(Init))] + public void Prepare() + { + if (String.IsNullOrWhiteSpace(solutionDirectory)) { - if (String.IsNullOrWhiteSpace(solutionDirectory)) - { - var dir = Directory.GetCurrentDirectory(); + var dir = Directory.GetCurrentDirectory(); - try + try + { + for (int i = 0; i < 7; i++) { - for (int i = 0; i < 7; i++) + var find_path = Path.Combine(dir, solutionFilename); + if (File.Exists(find_path)) { - var find_path = Path.Combine(dir, solutionFilename); - if (File.Exists(find_path)) - { - solutionDirectory = dir; - break; - } - dir = Path.GetDirectoryName(dir); + solutionDirectory = dir; + break; } - } - catch - { + dir = Path.GetDirectoryName(dir); } } - if (String.IsNullOrWhiteSpace(solutionDirectory)) - throw new FileNotFoundException($"File `{solutionFilename}` was not found!"); - solutionDirectory = Path.GetFullPath(solutionDirectory); - if (!solutionDirectory.EndsWith(Path.DirectorySeparatorChar)) - solutionDirectory += Path.DirectorySeparatorChar.ToString(); - - Information($"solutionDirectory: {solutionDirectory}"); - } - - - [DependsOn(nameof(Prepare))] - public void PrepareNuget() - { - if (String.IsNullOrWhiteSpace(outdir)) - { - outdir = Path.Combine(solutionDirectory, "fr_nuget"); - } - else if (!Path.IsPathRooted(outdir)) + catch { - outdir = Path.Combine(solutionDirectory, outdir); } + } + if (String.IsNullOrWhiteSpace(solutionDirectory)) + throw new FileNotFoundException($"File `{solutionFilename}` was not found!"); + solutionDirectory = Path.GetFullPath(solutionDirectory); + if (!solutionDirectory.EndsWith(Path.DirectorySeparatorChar)) + solutionDirectory += Path.DirectorySeparatorChar.ToString(); - if (!Directory.Exists(outdir)) - Directory.CreateDirectory(outdir); + Information($"solutionDirectory: {solutionDirectory}"); + } - Information($"outdir: {outdir}"); - } - [DependsOn(nameof(Prepare))] - public void Clean() + [DependsOn(nameof(Prepare))] + public void PrepareNuget() + { + if (String.IsNullOrWhiteSpace(outdir)) { - string solutionFile = SolutionFile; - DotNetMSBuild(solutionFile, new DotNetMSBuildSettings() - .SetConfiguration(config) - .WithTarget("CleanObjAndBin") - .WithProperty("SolutionDir", solutionDirectory) - .WithProperty("SolutionFileName", solutionFilename)); - - DotNetClean(solutionFile); + outdir = Path.Combine(solutionDirectory, "fr_nuget"); } - - public static void Default() + else if (!Path.IsPathRooted(outdir)) { - Information("Use: "); - Information(" --name=value"); + outdir = Path.Combine(solutionDirectory, outdir); + } + + if (!Directory.Exists(outdir)) + Directory.CreateDirectory(outdir); - Information(""); + Information($"outdir: {outdir}"); + } - Information("|> --target= - change task, see the task with command cake --tree. Core, Plugins, Test-Connectors."); - Information("|> --config= - change config. Debug, Release, Demo."); - Information("|> --vers= - change version"); - Information("|> --solution-directory= - change solution directory"); - Information("|> --solution-filename= - change solution file name"); - Information("|> --out-dir= - change output dir for packages"); - Information(""); - Information("OR: if you want to run 'Debug' mode, please add [Debug] attribute to your method"); + [DependsOn(nameof(Prepare))] + public void Clean() + { + string solutionFile = SolutionFile; + DotNetMSBuild(solutionFile, new DotNetMSBuildSettings() + .SetConfiguration(config) + .WithTarget("CleanObjAndBin") + .WithProperty("SolutionDir", solutionDirectory) + .WithProperty("SolutionFileName", solutionFilename)); + + DotNetClean(solutionFile); + } - } + public static void Default() + { + Information("Use: "); + Information(" --name=value"); + + Information(""); + + Information("|> --target= - change task, see the task with command cake --tree. Core, Plugins, Test-Connectors."); + Information("|> --config= - change config. Debug, Release, Demo."); + Information("|> --vers= - change version"); + Information("|> --solution-directory= - change solution directory"); + Information("|> --solution-filename= - change solution file name"); + Information("|> --out-dir= - change output dir for packages"); + Information(""); + Information("OR: if you want to run 'Debug' mode, please add [Debug] attribute to your method"); + + } + + internal string GetVersion() + { + string versionNum = $"{version}-{GetVersionSuffix()}"; + if (IsRelease) + versionNum = version; + return versionNum; + } + + + internal string GetVersionSuffix() + { + if (IsRelease) + return string.Empty; - internal string GetVersion() + return config.ToLower(); + } + + + private string GetDirNameByProject(string project) + { + const string DEMO_DIR = "forAll"; + const string NET_STD_DIR = "net"; + const string NET_ENT_DIR = "net_ent"; + const string MONO_DIR = "mono"; + + if (IsDemo) + return DEMO_DIR; + + return project switch { - string versionNum = version + "-" + config.ToLower(); - if (IsRelease) - versionNum = version; - return versionNum; - } + "FastReport.Localization" => DEMO_DIR, + "FastReport.Compat" => DEMO_DIR, + "FastReport.DataVisualization" => DEMO_DIR, + //"FastReport.Core" => NET_STD_DIR, + //"FastReport.Web" => NET_STD_DIR, + //"FastReport.SkiaDrawing" => NET_STD_DIR, + //"FastReport.Compat.Skia" => NET_STD_DIR, + //"FastReport.DataVisualization.Skia" => NET_STD_DIR, + //"FastReport.Core.Skia" => NET_STD_DIR, + //"FastReport.Web.Skia" => NET_STD_DIR, + "FastReport.Blazor.Wasm" => NET_ENT_DIR, + "FastReport.Mono" => MONO_DIR, + _ => NET_STD_DIR, + //_ => throw new NotImplementedException($"Unknown project {project}") + }; + } + + internal string GetOutdir(string projectOrPath) + { + if (!NuGetSpecialDirectorySort) + return outdir; + + string project; + var firstExtSymbol = Path.GetExtension(projectOrPath)[1]; // ".csproj" or ".**" + if (char.IsUpper(firstExtSymbol)) + // it's a project + project = projectOrPath; + else + project = Path.GetFileNameWithoutExtension(projectOrPath); + + var additionDir = GetDirNameByProject(project); + return Path.Combine(outdir, additionDir); } } diff --git a/Pack/BuildScripts/Tasks/Constants.cs b/Pack/BuildScripts/Tasks/Constants.cs index 640f02dc..1cd3f8dd 100644 --- a/Pack/BuildScripts/Tasks/Constants.cs +++ b/Pack/BuildScripts/Tasks/Constants.cs @@ -1,5 +1,4 @@ - -namespace CakeScript; +namespace CakeScript; partial class Program { @@ -19,10 +18,11 @@ partial class Program const string tfmNet5win7 = "net5.0-windows7.0"; const string tfmNet6win7 = "net6.0-windows7.0"; const string tfmNet6 = "net6.0"; + const string tfmNet8 = "net8.0"; const string tfmNet40 = "net40"; const string tfmNet45 = "net45"; const string tfmNet452 = "net452"; const string tfmNet462 = "net462"; - + const string tfmNet472 = "net472"; } diff --git a/Pack/BuildScripts/Tasks/LocalizationPackage.cs b/Pack/BuildScripts/Tasks/LocalizationPackage.cs index b37242b1..adfd7f6f 100644 --- a/Pack/BuildScripts/Tasks/LocalizationPackage.cs +++ b/Pack/BuildScripts/Tasks/LocalizationPackage.cs @@ -1,83 +1,65 @@ #region USING -using System; -using System.IO; -using Cake.Core.IO; -using Cake.Core.Diagnostics; -using Cake.Core.Tooling; -using Cake.Common.IO; -using Cake.Common.Solution.Project; using Path = System.IO.Path; - -using System.Collections.Generic; -using System.Linq; - using static CakeScript.CakeAPI; using static CakeScript.Startup; -using Cake.Common.Tools.NuGet.Pack; -using Cake.Common.Tools.MSBuild; #endregion -namespace CakeScript +namespace CakeScript; + +partial class Program { - partial class Program + [DependsOn(nameof(PrepareNuget))] + public void FastReportLocalization() { - [DependsOn(nameof(PrepareNuget))] - public void FastReportLocalization() - { - string packDir = PackDir; - string packFRLocalizationDir = Path.Combine(packDir, "FastReport.Localization"); - string localizationDir = Path.Combine(solutionDirectory, "Localization"); + const string projName = "FastReport.Localization"; + string packDir = PackDir; + string packFRLocalizationDir = Path.Combine(packDir, projName); + string localizationDir = Path.Combine(solutionDirectory, "Localization"); - if (!Directory.Exists(localizationDir)) - throw new Exception("'Localization' directory wasn't found on path: " + localizationDir); + if (!Directory.Exists(localizationDir)) + throw new Exception("'Localization' directory wasn't found on path: " + localizationDir); - string tempDir = Path.Combine(packFRLocalizationDir, "tmp"); - if (DirectoryExists(tempDir)) + string tempDir = Path.Combine(packFRLocalizationDir, "tmp"); + if (DirectoryExists(tempDir)) + { + DeleteDirectory(tempDir, new DeleteDirectorySettings { - DeleteDirectory(tempDir, new DeleteDirectorySettings - { - Force = true, - Recursive = true - }); - } - CreateDirectory(tempDir); - - Information($"{Environment.NewLine}FastReport.Localization pack...", ConsoleColor.DarkMagenta); - - var packFiles = new[] { - //new NuSpecContent{Source = Path.Combine(packDir, NET_LICENSE), Target = ""}, - new NuSpecContent{Source = Path.Combine(packDir, FRLOGO192PNG), Target = ""}, - new NuSpecContent{Source = Path.Combine(packDir, MIT_LICENSE), Target = ""}, - new NuSpecContent{Source = Path.Combine(packFRLocalizationDir, "**", "*.*"), Target = ""}, - new NuSpecContent{Source = Path.Combine(localizationDir, "*.frl"), - Target = Path.Combine("build", "Localization")} - }; + Force = true, + Recursive = true + }); + } + CreateDirectory(tempDir); - // generate nuspec - var nuGetPackSettings = new NuGetPackSettings - { - Id = "FastReport.Localization", - Authors = new[] { "Fast Reports Inc." }, - Owners = new[] { "Fast Reports Inc." }, - Description = "FastReport.Localization includes localization files for FastReport .NET, FastReport.Core, FastReport.CoreWin, FastReport.Mono and FastReport.OpenSource", - ProjectUrl = new Uri("https://www.fast-report.com/en/product/fast-report-net"), - Icon = FRLOGO192PNG, - //IconUrl = new Uri("https://www.fast-report.com/download/images/frlogo-big.png"), - License = new NuSpecLicense { Type = "file", Value = MIT_LICENSE }, - //LicenseUrl = new Uri(project.PackageLicenseUrl), // The licenseUrl and license elements cannot be used together. - Tags = new[] { "fastreport", "localization" , "frl"}, - //FrameworkAssemblies = frameworkAssemblies, - }; + Information($"{Environment.NewLine}FastReport.Localization pack...", ConsoleColor.DarkMagenta); - nuGetPackSettings.Version = version; - nuGetPackSettings.BasePath = tempDir; - nuGetPackSettings.OutputDirectory = outdir; - nuGetPackSettings.Files = packFiles; + var packFiles = new[] { + new NuSpecContent{Source = Path.Combine(packDir, FRLOGO192PNG), Target = ""}, + new NuSpecContent{Source = Path.Combine(packDir, MIT_LICENSE), Target = ""}, + new NuSpecContent{Source = Path.Combine(packFRLocalizationDir, "**", "*.*"), Target = ""}, + new NuSpecContent{Source = Path.Combine(localizationDir, "*.frl"), + Target = Path.Combine("build", "Localization")} + }; - // pack - NuGetPack(nuGetPackSettings); - } + // generate nuspec + var nuGetPackSettings = new NuGetPackSettings + { + Id = projName, + Authors = new[] { "Fast Reports Inc." }, + Owners = new[] { "Fast Reports Inc." }, + Description = "FastReport.Localization includes localization files for FastReport .NET, FastReport.Core, FastReport.WPF, FastReport.Mono and FastReport.OpenSource", + ProjectUrl = new Uri("https://www.fast-report.com/en/product/fast-report-net"), + Icon = FRLOGO192PNG, + License = new NuSpecLicense { Type = "file", Value = MIT_LICENSE }, + Tags = new[] { "fastreport", "localization" , "frl"}, + Version = version, + BasePath = tempDir, + OutputDirectory = GetOutdir(projName), + Files = packFiles, + }; + // pack + NuGetPack(nuGetPackSettings); } + } diff --git a/Pack/BuildScripts/Tasks/OpenSourceTasks.cs b/Pack/BuildScripts/Tasks/OpenSourceTasks.cs index 506ee45f..161f30ab 100644 --- a/Pack/BuildScripts/Tasks/OpenSourceTasks.cs +++ b/Pack/BuildScripts/Tasks/OpenSourceTasks.cs @@ -1,121 +1,100 @@ -#region USING -using System; -using System.IO; -using Cake.Core.IO; -using Cake.Core.Diagnostics; -using Cake.Core.Tooling; -using Cake.Common.IO; -using Cake.Common.Solution.Project; -using Path = System.IO.Path; - -using System.Collections.Generic; -using System.Linq; - +using Path = System.IO.Path; using static CakeScript.CakeAPI; -using static CakeScript.Startup; -using Cake.Common.Tools.NuGet.Pack; -using Cake.Common.Tools.MSBuild; -using Cake.Common.Tools.DotNet.MSBuild; -using Cake.Common.Tools.DotNet.Pack; -#endregion +namespace CakeScript; -namespace CakeScript +partial class Program { - partial class Program + readonly string[] projects_OpenSource = new [] { - readonly string[] projects_OpenSource = new [] - { - Path.Combine("FastReport.OpenSource", "FastReport.OpenSource.csproj"), - Path.Combine("FastReport.Core.Web", "FastReport.OpenSource.Web.csproj"), - Path.Combine("Extras", "OpenSource", "FastReport.OpenSource.Export.PdfSimple", "FastReport.OpenSource.Export.PdfSimple", "FastReport.OpenSource.Export.PdfSimple.csproj") - }; + Path.Combine("FastReport.OpenSource", "FastReport.OpenSource.csproj"), + Path.Combine("FastReport.Core.Web", "FastReport.OpenSource.Web.csproj"), + Path.Combine("Extras", "OpenSource", "FastReport.OpenSource.Export.PdfSimple", "FastReport.OpenSource.Export.PdfSimple", "FastReport.OpenSource.Export.PdfSimple.csproj") + }; + + //[Debug] + [DependsOn(nameof(Prepare))] + public void BuildOpenSource() + { + string versionNum = GetVersion(); - //[Debug] - [DependsOn(nameof(Prepare))] - public void BuildOpenSource() + foreach (var csproj in projects_OpenSource) { - string versionNum = GetVersion(); + var proj_path = Path.Combine(solutionDirectory, csproj); - foreach (var csproj in projects_OpenSource) - { - var proj_path = Path.Combine(solutionDirectory, csproj); - - DotNetClean(proj_path); - } + DotNetClean(proj_path); + } - foreach (var csproj in projects_OpenSource) - { - var proj_path = Path.Combine(solutionDirectory, csproj); + foreach (var csproj in projects_OpenSource) + { + var proj_path = Path.Combine(solutionDirectory, csproj); - DotNetRestore(proj_path); + DotNetRestore(proj_path); - DotNetMSBuild(proj_path, new DotNetMSBuildSettings() - .SetConfiguration(config) - .WithTarget("Build") - .WithProperty("SolutionDir", solutionDirectory) - .WithProperty("SolutionFileName", solutionFilename) - .WithProperty("Version", versionNum) - ); - } + DotNetMSBuild(proj_path, new DotNetMSBuildSettings() + .SetConfiguration(config) + .WithTarget("Build") + .WithProperty("SolutionDir", solutionDirectory) + .WithProperty("SolutionFileName", solutionFilename) + .WithProperty("Version", versionNum) + ); } + } - [DependsOn(nameof(BuildOpenSource))] - [DependsOn(nameof(PrepareNuget))] - public void PackOpenSource() + [DependsOn(nameof(BuildOpenSource))] + [DependsOn(nameof(PrepareNuget))] + public void PackOpenSource() + { + string versionNum = GetVersion(); + + DotNetPackSettings settings = new DotNetPackSettings { - string versionNum = GetVersion(); - - DotNetPackSettings settings = new DotNetPackSettings - { - Configuration = config, - NoBuild = true, - NoRestore = true, - OutputDirectory = outdir, - IncludeSymbols = true, - SymbolPackageFormat = "snupkg" - }; - - if (IsDebug) - { - settings.IncludeSource = true; - } - - settings.MSBuildSettings = new DotNetMSBuildSettings() - .WithProperty("SolutionDir", solutionDirectory) - .WithProperty("SolutionFileName", solutionFilename) - .WithProperty("Version", versionNum); + Configuration = config, + NoBuild = true, + NoRestore = true, + OutputDirectory = outdir, + IncludeSymbols = true, + SymbolPackageFormat = "snupkg" + }; - foreach (var proj in projects_OpenSource) - { - DotNetPack(Path.Combine(solutionDirectory, proj), settings); - } + if (IsDebug) + { + settings.IncludeSource = true; } - [Obsolete] - [DependsOn(nameof(BuildOpenSource))] - [DependsOn(nameof(PrepareNuget))] - public void PackOpenSourcePlugins() + settings.MSBuildSettings = new DotNetMSBuildSettings() + .WithProperty("SolutionDir", solutionDirectory) + .WithProperty("SolutionFileName", solutionFilename) + .WithProperty("Version", versionNum); + + foreach (var proj in projects_OpenSource) { - DotNetPackSettings settings = new DotNetPackSettings - { - Configuration = config, - NoRestore = true, - OutputDirectory = outdir - }; - - string pluginsDirPath = PluginsDir; - foreach (var proj in Plugins_Core) - { - string proj_path = Path.Combine(pluginsDirPath, $"FastReport.Data.{proj}", $"FastReport.OpenSource.Data.{proj}.csproj"); - - DotNetRestore(proj_path); - - DotNetPack(proj_path, settings); - } + DotNetPack(Path.Combine(solutionDirectory, proj), settings); } + } + [Obsolete] + [DependsOn(nameof(BuildOpenSource))] + [DependsOn(nameof(PrepareNuget))] + public void PackOpenSourcePlugins() + { + DotNetPackSettings settings = new DotNetPackSettings + { + Configuration = config, + NoRestore = true, + OutputDirectory = outdir + }; + + string pluginsDirPath = PluginsDir; + foreach (var proj in Plugins_Core) + { + string proj_path = Path.Combine(pluginsDirPath, $"FastReport.Data.{proj}", $"FastReport.OpenSource.Data.{proj}.csproj"); + DotNetRestore(proj_path); + + DotNetPack(proj_path, settings); + } } + } diff --git a/Pack/BuildScripts/Tasks/Tests.cs b/Pack/BuildScripts/Tasks/Tests.cs index 58d73651..58fdacd8 100644 --- a/Pack/BuildScripts/Tasks/Tests.cs +++ b/Pack/BuildScripts/Tasks/Tests.cs @@ -1,21 +1,5 @@ -#region USING -using System.IO; -using Cake.Core.IO; -using Cake.Core.Diagnostics; -using Cake.Core.Tooling; -using Cake.Common.IO; -using Cake.Common.Solution.Project; -using Path = System.IO.Path; - -using static CakeScript.CakeAPI; -using static CakeScript.Startup; -using Cake.Common.Tools.NuGet.Pack; -using Cake.Common.Tools.MSBuild; -using Cake.Common.Tools.DotNet.MSBuild; -using Cake.Common.Tools.DotNet.Pack; +using static CakeScript.CakeAPI; using Cake.Common.Tools.DotNet.Test; -#endregion - namespace CakeScript; @@ -48,6 +32,5 @@ public void Tests() //dotnet build "%~dp0..\FastReport.Tests.Data.Core.sln" - c Release //pushd % ~dp0FastReport.Tests.Data.Core //dotnet test FastReport.Tests.Data.Core.sln - } } diff --git a/Pack/BuildScripts/Tools/DebugAttribute.cs b/Pack/BuildScripts/Tools/DebugAttribute.cs index ee9dd630..97412059 100644 --- a/Pack/BuildScripts/Tools/DebugAttribute.cs +++ b/Pack/BuildScripts/Tools/DebugAttribute.cs @@ -1,21 +1,17 @@ -using System; -using System.Reflection; + +namespace CakeScript; -namespace CakeScript +[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] +internal class DebugAttribute : Attribute { - [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] - internal class DebugAttribute : Attribute - { - public string Args { get; set; } - - public DebugAttribute() - { - } + public string Args { get; init; } - public DebugAttribute(string args) - { - Args = args; - } + public DebugAttribute() + { + } + public DebugAttribute(string args) + { + Args = args; } } \ No newline at end of file diff --git a/Pack/BuildScripts/Tools/DependsOnAttribute.cs b/Pack/BuildScripts/Tools/DependsOnAttribute.cs index 72a5ee4e..0647fc30 100644 --- a/Pack/BuildScripts/Tools/DependsOnAttribute.cs +++ b/Pack/BuildScripts/Tools/DependsOnAttribute.cs @@ -1,22 +1,19 @@ -using System; -using System.Reflection; + +namespace CakeScript; -namespace CakeScript +[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)] +internal class DependsOnAttribute : Attribute { - [AttributeUsage(AttributeTargets.Method, AllowMultiple = true)] - internal class DependsOnAttribute : Attribute - { - public string DependsTask { get; } + public string DependsTask { get; } - public DependsOnAttribute(string dependsTask) - { - DependsTask = dependsTask; - } + public DependsOnAttribute(string dependsTask) + { + DependsTask = dependsTask; + } - //public DependsOnAttribute(string dependsTask, bool condition) - //{ + //public DependsOnAttribute(string dependsTask, bool condition) + //{ - //} + //} - } } \ No newline at end of file diff --git a/Pack/BuildScripts/Tools/Graph.cs b/Pack/BuildScripts/Tools/Graph.cs index 64b006e6..de1247ec 100644 --- a/Pack/BuildScripts/Tools/Graph.cs +++ b/Pack/BuildScripts/Tools/Graph.cs @@ -1,123 +1,118 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Xml.Linq; -using System.Reflection; +using System.Reflection; -namespace CakeScript +namespace CakeScript; + +internal class Graph { - internal class Graph + internal sealed class GraphTask : IEquatable { - internal class GraphTask : IEquatable - { - public string Name { get; } - - public MethodInfo Method { get; } + public string Name { get; } - public ICollection Parents { get; } = new List(); + public MethodInfo Method { get; } - public GraphTask(string name, MethodInfo method, IEnumerable parents) - { - Name = name; - Method = method; - foreach (var parent in parents) - Parents.Add(parent); - } + public ICollection Parents { get; } = new List(); - public override bool Equals(object obj) - { - if (obj is GraphTask graphTask) - return Equals(graphTask); + public GraphTask(string name, MethodInfo method, IEnumerable parents) + { + Name = name; + Method = method; + foreach (var parent in parents) + Parents.Add(parent); + } - return base.Equals(obj); - } + public override bool Equals(object obj) + { + if (obj is GraphTask graphTask) + return Equals(graphTask); - public override int GetHashCode() - { - return Name.GetHashCode(); - } + return base.Equals(obj); + } - public bool Equals(GraphTask other) - { - if (other is null) - return false; - return Name.Equals(other.Name); - } + public override int GetHashCode() + { + return Name.GetHashCode(); } - public static Graph CreateTree(MethodInfo startMethod) + public bool Equals(GraphTask other) { - ArgumentNullException.ThrowIfNull(startMethod, nameof(startMethod)); + if (other is null) + return false; + return Name.Equals(other.Name); + } + } - var startTask = GetTask(startMethod); + public static Graph CreateTree(MethodInfo startMethod) + { + ArgumentNullException.ThrowIfNull(startMethod, nameof(startMethod)); - return new Graph(startTask); - } + var startTask = GetTask(startMethod); + + return new Graph(startTask); + } - private static GraphTask GetTask(MethodInfo method) + private static GraphTask GetTask(MethodInfo method) + { + var dependencies = GetDependencies(method); + var graphTaskList = new List(); + foreach(var dependencyMethod in dependencies) { - var dependencies = GetDependencies(method); - var graphTaskList = new List(); - foreach(var dependencyMethod in dependencies) - { - graphTaskList.Add(GetTask(dependencyMethod)); - } - return new GraphTask(method.Name, method, graphTaskList); + graphTaskList.Add(GetTask(dependencyMethod)); } + return new GraphTask(method.Name, method, graphTaskList); + } - private static IEnumerable GetDependencies(MethodInfo method) + private static IEnumerable GetDependencies(MethodInfo method) + { + var attributes = method.GetCustomAttributes(); + foreach(var attribute in attributes) { - var attributes = method.GetCustomAttributes(); - foreach(var attribute in attributes) - { - var dependsTask = attribute.DependsTask; - yield return Startup.GetMethod(dependsTask); + var dependsTask = attribute.DependsTask; + yield return Startup.GetMethod(dependsTask); - } } + } - public IEnumerable Run() + public IEnumerable Run() + { + if(sortedTasks == null) { - if(sortedTasks == null) - { - SpreadRays(StartTask, 0); + SpreadRays(StartTask, 0); - sortedTasks = tasks - .OrderByDescending(task => task.Item2) - .Select(task => task.Item1); - } - return sortedTasks; + sortedTasks = tasks + .OrderByDescending(task => task.Item2) + .Select(task => task.Item1); } + return sortedTasks; + } - - readonly List<(GraphTask, int)> tasks = new List<(GraphTask, int)>(); - private IEnumerable sortedTasks; + + readonly List<(GraphTask, int)> tasks = new List<(GraphTask, int)>(); + private IEnumerable sortedTasks; - private readonly GraphTask StartTask; + private readonly GraphTask StartTask; - void SpreadRays(GraphTask task, int depth) - { - tasks.Add((task, depth)); + void SpreadRays(GraphTask task, int depth) + { + tasks.Add((task, depth)); - foreach (var parent in task.Parents) + foreach (var parent in task.Parents) + { + // check if this parent exist => we try rewrite + var existItem = tasks.Find(taskWithDepth => taskWithDepth.Item1.Equals(parent)); + if (existItem != (null, default)) { - // check if this parent exist => we try rewrite - var existItem = tasks.Find(taskWithDepth => taskWithDepth.Item1.Equals(parent)); - if (existItem != (null, default)) - { - if (existItem.Item2 < depth + 1) - tasks.Remove(existItem); // remove - else // they are equals or greater => do nothing - continue; - } - - SpreadRays(parent, depth + 1); + if (existItem.Item2 < depth + 1) + tasks.Remove(existItem); // remove + else // they are equals or greater => do nothing + continue; } - } - private Graph(GraphTask startTask) - { - StartTask = startTask; + SpreadRays(parent, depth + 1); } } + + private Graph(GraphTask startTask) + { + StartTask = startTask; + } } diff --git a/Pack/BuildScripts/Tools/Startup.cs b/Pack/BuildScripts/Tools/Startup.cs index 4896a07c..3fbaf401 100644 --- a/Pack/BuildScripts/Tools/Startup.cs +++ b/Pack/BuildScripts/Tools/Startup.cs @@ -1,237 +1,246 @@ -using Cake.Common.Tools.NuGet.Pack; -using System; -using System.Reflection; -using System.Linq; -using System.Collections.Generic; -using System.Text; +using System.Reflection; using System.Diagnostics; using Cake.Core; -namespace CakeScript +namespace CakeScript; + +static class Startup { - static class Startup - { - static readonly Dictionary Args = new Dictionary(); + static readonly Dictionary Args = new Dictionary(); - private static MethodInfo targetMethod; + private static MethodInfo targetMethod; - public static bool IsTargetMethod + public static bool IsTargetMethod + { + get { - get - { - var stackTrace = new StackTrace(false); - var frame = stackTrace.GetFrame(1); - var callMethod = frame.GetMethod(); + var stackTrace = new StackTrace(false); + var frame = stackTrace.GetFrame(1); + var callMethod = frame.GetMethod(); - bool result = callMethod == targetMethod; - return result; - } + bool result = callMethod == targetMethod; + return result; } + } - public static async Task Main(string[] args) - { - ParseArgs(args); + public static async Task Main(string[] args) + { + ParseArgs(args); - var target = string.Empty; - if (Args.ContainsKey("target")) - { - target = Args["target"]; - } + var target = string.Empty; + if (Args.TryGetValue("target", out string value)) + { + target = value; + } #if DEBUG - if(string.IsNullOrEmpty(target)) - { - targetMethod = GetDebugTask(); - if (targetMethod != null) - { - var debugArgs = GetDebugArgs(targetMethod); - ParseArgs(debugArgs); - var graph = Graph.CreateTree(targetMethod); - - await RunTree(graph, args); - return; - } - } -#endif - - if (!string.IsNullOrEmpty(target)) + if(string.IsNullOrEmpty(target)) + { + targetMethod = GetDebugTask(); + if (targetMethod != null) { - targetMethod = GetMethod(target); - + var debugArgs = GetDebugArgs(targetMethod); + ParseArgs(debugArgs); var graph = Graph.CreateTree(targetMethod); await RunTree(graph, args); + return; } - else - Program.Default(); - } +#endif - private static string[] GetDebugArgs(MethodInfo method) + if (!string.IsNullOrEmpty(target)) { - var args = method.GetCustomAttribute().Args; - if (string.IsNullOrEmpty(args)) - return Array.Empty(); + targetMethod = GetMethod(target); - //TODO: whitespace in path, for example "path="D:/Program Files"" - return args.Split(' '); - } + var graph = Graph.CreateTree(targetMethod); - private static void ParseArgs(string[] args) - { - foreach (var argument in args) - { - if (string.IsNullOrEmpty(argument) || !argument.StartsWith("--")) - continue; + await RunTree(graph, args); + } + else + Program.Default(); - if (argument == "--tree") - { - ViewAllTasks(); - return; - } + } - var splitted = argument.Split('=', 2); + private static string[] GetDebugArgs(MethodInfo method) + { + var args = method.GetCustomAttribute().Args; + if (string.IsNullOrEmpty(args)) + return Array.Empty(); - var arg = splitted[0].Remove(0, 2); - var value = splitted[1].Trim('"'); - Args.Add(arg, value); - } - } + //TODO: whitespace in path, for example "path="D:/Program Files"" + return args.Split(' '); + } - private static void ViewAllTasks() + private static void ParseArgs(string[] args) + { + foreach (var argument in args) { - var allTasks = typeof(Program) - .GetMethods(BindingFlags.Public | BindingFlags.Instance) - .Where(methodInfo => methodInfo.DeclaringType == typeof(Program)) - .OrderBy(methodInfo => methodInfo.Name[0]); + if (string.IsNullOrEmpty(argument) || !argument.StartsWith("--")) + continue; - foreach(var task in allTasks) + if (argument == "--tree") { - Information(task.Name); + ViewAllTasks(); + return; } - } - private static MethodInfo GetDebugTask() - { - var debugTask = typeof(Program) - .GetMethods() - .Where(method => method.GetCustomAttribute() != null) - .FirstOrDefault(); + var splitted = argument.Split('=', 2); - return debugTask; + var arg = splitted[0].Remove(0, 2); + var value = splitted[1]?.Trim('"'); + Args.Add(arg, value); } + } - public static MethodInfo GetMethod(string methodName) - { - var methods = typeof(Program).GetMethods(); - foreach (var method in methods) - { - if (method.Name.Equals(methodName)) - { - return method; - } - } + private static void ViewAllTasks() + { + var allTasks = typeof(Program) + .GetMethods(BindingFlags.Public | BindingFlags.Instance) + .Where(methodInfo => methodInfo.DeclaringType == typeof(Program)) + .OrderBy(methodInfo => methodInfo.Name[0]); - throw new Exception($"Method with {methodName} name wasn't found!"); + foreach(var task in allTasks) + { + Information(task.Name); } + } - private static async Task RunTree(Graph graph, string[] args) - { - var sortedTasks = graph.Run(); - var prog = new Program(args); + private static MethodInfo GetDebugTask() + { + var debugTask = typeof(Program) + .GetMethods() + .Where(method => method.GetCustomAttribute() != null) + .FirstOrDefault(); + + return debugTask; + } - foreach (var sortedTask in sortedTasks) + public static MethodInfo GetMethod(string methodName) + { + var methods = typeof(Program).GetMethods(); + foreach (var method in methods) + { + if (method.Name.Equals(methodName)) { - await RunTaskWrapper(sortedTask, prog); + return method; } } - private static async Task RunTaskWrapper(Graph.GraphTask sortedTask, object instance) - { - const string separator = "============================="; - Console.WriteLine(separator); - Console.WriteLine($" {sortedTask.Name}"); - - try - { - object result = sortedTask.Method.Invoke(instance, Array.Empty()); + throw new Exception($"Method with {methodName} name wasn't found!"); + } - if (result is Task taskResult) - { - await taskResult.ConfigureAwait(false); - } - } - catch (CakeException e) - { - Environment.Exit(e.ExitCode); - } + private static async Task RunTree(Graph graph, string[] args) + { + var sortedTasks = graph.Run(); + var prog = new Program(args); - Information($" {sortedTask.Name} finished", ConsoleColor.Green); - Console.WriteLine(separator); - Console.WriteLine(); + foreach (var sortedTask in sortedTasks) + { + await RunTaskWrapper(sortedTask, prog); } + } + private static async Task RunTaskWrapper(Graph.GraphTask sortedTask, object instance) + { + const string separator = "============================="; + Console.WriteLine(separator); + Console.WriteLine($" {sortedTask.Name}"); - public static void Information(object info) + try { - if (info is NuSpecDependency dep) + object result = sortedTask.Method.Invoke(instance, Array.Empty()); + + if (result is Task taskResult) { - Console.WriteLine($"ID: {dep.Id}, VERSION: {dep.Version}, TFM: {dep.TargetFramework}"); + await taskResult.ConfigureAwait(false); } - else - Information(info.ToString()); } - - public static void Information(string info) + catch (CakeException e) { - Console.WriteLine(info); + Environment.Exit(e.ExitCode); } - public static void Information(object info, ConsoleColor color) - { - Console.ForegroundColor = color; - Information(info); - Console.ResetColor(); - } + Information($" {sortedTask.Name} finished", ConsoleColor.Green); + Console.WriteLine(separator); + Console.WriteLine(); + } + - public static void Information(string info, ConsoleColor color) + public static void Information(object info) + { + if (info is NuSpecDependency dep) { - Console.ForegroundColor = color; - Information(info); - Console.ResetColor(); + Console.WriteLine($"ID: {dep.Id}, VERSION: {dep.Version}, TFM: {dep.TargetFramework}"); } + else + Information(info.ToString()); + } - public static void Warning(object info) - => Information(info, ConsoleColor.Yellow); + public static void Information(string info) + { + Console.WriteLine(info); + } - public static void Warning(string info) - => Information(info, ConsoleColor.Yellow); + public static void Information(object info, ConsoleColor color) + { + Console.ForegroundColor = color; + Information(info); + Console.ResetColor(); + } - public static void Error(string info) - => Information(info, ConsoleColor.Red); + public static void Information(string info, ConsoleColor color) + { + Console.ForegroundColor = color; + Information(info); + Console.ResetColor(); + } - public static bool HasArgument(string argument) - { - if (Args.ContainsKey(argument)) - return true; + public static void Warning(object info) + => Information(info, ConsoleColor.Yellow); - return false; - } + public static void Warning(string info) + => Information(info, ConsoleColor.Yellow); - public static string Argument(string argument) - { - if (Args.ContainsKey(argument)) - return Args[argument]; + public static void Error(string info) + => Information(info, ConsoleColor.Red); - throw new Exception($"Argument '{argument}' not found"); - } + public static bool HasArgument(string argument) + { + if (Args.ContainsKey(argument)) + return true; - public static string Argument(string argument, string defaultValue) + return false; + } + + public static string Argument(string argument) + { + if (Args.TryGetValue(argument, out string value)) + return value; + + throw new Exception($"Argument '{argument}' not found"); + } + + public static string Argument(string argument, string defaultValue) + { + if (Args.TryGetValue(argument, out string value)) + return value; + else + return defaultValue; + } + + public static T Argument(string argument, T defaultValue) + { + if (Args.TryGetValue(argument, out string value)) { - if (Args.ContainsKey(argument)) - return Args[argument]; - else - return defaultValue; + var type = typeof(T); + // special case for bool + if (defaultValue is bool && string.IsNullOrEmpty(value)) + return (T)(object)true; + + return (T)Convert.ChangeType(value, type); } + else + return defaultValue; } } diff --git a/Pack/BuildScripts/buildScript.csproj b/Pack/BuildScripts/buildScript.csproj index f589e2ba..389a5b64 100644 --- a/Pack/BuildScripts/buildScript.csproj +++ b/Pack/BuildScripts/buildScript.csproj @@ -2,18 +2,28 @@ Exe - net7.0 + net8.0 enable - - - + + + - + + + + + + + + + + + diff --git a/Pack/FastReport.OpenSource/build/FastReport.OpenSource.props b/Pack/FastReport.OpenSource/build/FastReport.OpenSource.props index 0156899c..4547d33d 100644 --- a/Pack/FastReport.OpenSource/build/FastReport.OpenSource.props +++ b/Pack/FastReport.OpenSource/build/FastReport.OpenSource.props @@ -4,6 +4,7 @@ <_FRProductType>FastReport.OpenSource <_FR_GraphicsEngine>GDIPlus + <_FRProductTypeWithEngine>$(_FRProductType).$(_FR_GraphicsEngine) \ No newline at end of file diff --git a/Tools/FastReport.Tests.OpenSource/FastReport.Tests.OpenSource.csproj b/Tools/FastReport.Tests.OpenSource/FastReport.Tests.OpenSource.csproj index 526bcf69..245acb3b 100644 --- a/Tools/FastReport.Tests.OpenSource/FastReport.Tests.OpenSource.csproj +++ b/Tools/FastReport.Tests.OpenSource/FastReport.Tests.OpenSource.csproj @@ -1,7 +1,7 @@  - netcoreapp3.1 + net6.0 false diff --git a/UsedPackages.version b/UsedPackages.version index 17f8513e..ebdafb95 100644 --- a/UsedPackages.version +++ b/UsedPackages.version @@ -1,53 +1,40 @@  - + + + + 2024.1.9 + 2024.1.9 + 2024.1.9 + 2024.1.9 - [2024.1.0] + 2.88.6 + 2.88.6 - [2024.1.0] - [2024.1.6] + + [11.0.6,) + 2024.1.9 - [2024.1.0] - [2024.1.6] - - - 2024.1.5 - 2024.1.5 - 2024.1.2 - 2024.1.0 - 2024.1.0 + [4.0.1,) + [4.0.1,) - [4.7.3,) - - - [4.5.0,) - 4.7.0 - - 4.7.0 - - - 4.7.0 - - - 4.7.0 - - 2024.1.5 + 2024.1.9 - 2024.1.5 + 2024.1.9 - 2023.2.16 + 2024.1.7 - 2023.2.16 + 2024.1.7