From 6dd76868966d0105655087ee1db42d76c72e8335 Mon Sep 17 00:00:00 2001 From: Vladislav Bogdanov Date: Fri, 18 Jul 2025 09:59:28 +0400 Subject: [PATCH 1/3] Use the released XAF PdfViewerPropertyEditor --- .../Editors/PdfViewer/PdfViewerModel.cs | 26 ------ .../PdfViewer/PdfViewerPropertyEditor.cs | 26 ------ .../Features/WelcomeController.cs | 4 +- .../BusinessObjects/Order.cs | 82 +++++++++---------- .../BusinessObjects/Product.cs | 77 +++++++++-------- .../BusinessObjects/Quote.cs | 2 +- .../BusinessObjects/Welcome.cs | 20 +++-- CS/OutlookInspired.Module/EditorAliases.cs | 1 - .../Controllers/PdfViewerController.cs | 15 ++++ .../Editors/PdfViewerEditor.cs | 26 ------ 10 files changed, 107 insertions(+), 172 deletions(-) delete mode 100644 CS/OutlookInspired.Blazor.Server/Editors/PdfViewer/PdfViewerModel.cs delete mode 100644 CS/OutlookInspired.Blazor.Server/Editors/PdfViewer/PdfViewerPropertyEditor.cs create mode 100644 CS/OutlookInspired.Win/Controllers/PdfViewerController.cs delete mode 100644 CS/OutlookInspired.Win/Editors/PdfViewerEditor.cs diff --git a/CS/OutlookInspired.Blazor.Server/Editors/PdfViewer/PdfViewerModel.cs b/CS/OutlookInspired.Blazor.Server/Editors/PdfViewer/PdfViewerModel.cs deleted file mode 100644 index d98f947d..00000000 --- a/CS/OutlookInspired.Blazor.Server/Editors/PdfViewer/PdfViewerModel.cs +++ /dev/null @@ -1,26 +0,0 @@ -using DevExpress.Blazor.PdfViewer; -using DevExpress.Blazor.Reporting.Models; -using DevExpress.ExpressApp.Blazor.Components.Models; -using Microsoft.AspNetCore.Components; - -namespace OutlookInspired.Blazor.Server.Editors.PdfViewer { - public class PdfViewerModel : ComponentModelBase { - public byte[] DocumentContent { - get => GetPropertyValue(); - set => SetPropertyValue(value); - } - public string CssClass { - get => GetPropertyValue(); - set => SetPropertyValue(value); - } - public bool IsSinglePagePreview { - get => GetPropertyValue(); - set => SetPropertyValue(value); - } - public EventCallback CustomizeToolbar { - get => GetPropertyValue>(); - set => SetPropertyValue(value); - } - public override Type ComponentType => typeof(DxPdfViewer); - } -} diff --git a/CS/OutlookInspired.Blazor.Server/Editors/PdfViewer/PdfViewerPropertyEditor.cs b/CS/OutlookInspired.Blazor.Server/Editors/PdfViewer/PdfViewerPropertyEditor.cs deleted file mode 100644 index c3c5c826..00000000 --- a/CS/OutlookInspired.Blazor.Server/Editors/PdfViewer/PdfViewerPropertyEditor.cs +++ /dev/null @@ -1,26 +0,0 @@ -using DevExpress.Blazor.Reporting.Models; -using DevExpress.ExpressApp.Blazor.Components.Models; -using DevExpress.ExpressApp.Blazor.Editors; -using DevExpress.ExpressApp.Editors; -using DevExpress.ExpressApp.Model; -using Microsoft.AspNetCore.Components; -using EditorAliases = OutlookInspired.Module.EditorAliases; - -namespace OutlookInspired.Blazor.Server.Editors.PdfViewer { - [PropertyEditor(typeof(byte[]), EditorAliases.PdfViewerEditor)] - public class PdfViewerPropertyEditor(Type objectType, IModelMemberViewItem model) - : BlazorPropertyEditorBase(objectType, model){ - public override PdfViewerModel ComponentModel => (PdfViewerModel)base.ComponentModel; - protected override IComponentModel CreateComponentModel() - => new PdfViewerModel { - CssClass = "pe-pdf-viewer", - CustomizeToolbar = EventCallback.Factory.Create(this, m => m.AllItems.Clear()) - }; - protected override void ReadValueCore() { - base.ReadValueCore(); - ComponentModel.DocumentContent = (byte[])PropertyValue; - } - } - - -} \ No newline at end of file diff --git a/CS/OutlookInspired.Blazor.Server/Features/WelcomeController.cs b/CS/OutlookInspired.Blazor.Server/Features/WelcomeController.cs index 53e1f55e..3b259a74 100644 --- a/CS/OutlookInspired.Blazor.Server/Features/WelcomeController.cs +++ b/CS/OutlookInspired.Blazor.Server/Features/WelcomeController.cs @@ -1,5 +1,5 @@ using DevExpress.ExpressApp; -using OutlookInspired.Blazor.Server.Editors.PdfViewer; +using DevExpress.ExpressApp.Office.Blazor.Editors; using OutlookInspired.Module.BusinessObjects; namespace OutlookInspired.Blazor.Server.Features { @@ -12,4 +12,4 @@ protected override void OnActivated() { }); } } -} \ No newline at end of file +} diff --git a/CS/OutlookInspired.Module/BusinessObjects/Order.cs b/CS/OutlookInspired.Module/BusinessObjects/Order.cs index 2572df59..c102b165 100644 --- a/CS/OutlookInspired.Module/BusinessObjects/Order.cs +++ b/CS/OutlookInspired.Module/BusinessObjects/Order.cs @@ -3,7 +3,6 @@ using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Text.Json.Serialization; -using DevExpress.ExpressApp; using DevExpress.ExpressApp.DC; using DevExpress.ExpressApp.Utils; using DevExpress.Persistent.Base; @@ -11,73 +10,74 @@ using OutlookInspired.Module.Features; using OutlookInspired.Module.Features.CloneView; using OutlookInspired.Module.Features.Maps; +using BaseEditorAliases = DevExpress.ExpressApp.Editors.EditorAliases; - -namespace OutlookInspired.Module.BusinessObjects{ +namespace OutlookInspired.Module.BusinessObjects { [XafDefaultProperty(nameof(InvoiceNumber))] [CloneView(CloneViewType.DetailView, ChildDetailView)] [CloneView(CloneViewType.DetailView, MapsDetailView)] [CloneView(CloneViewType.DetailView, InvoiceDetailView)] [CloneView(CloneViewType.ListView, ListViewDetail)] - [ImageName("BO_Order")][VisibleInReports(true)] - public class Order :OutlookInspiredBaseObject, IViewFilter,IRouteMapsMarker{ + [ImageName("BO_Order")] + [VisibleInReports(true)] + public class Order : OutlookInspiredBaseObject, IViewFilter, IRouteMapsMarker { public const string MapsDetailView = "Order_DetailView_Maps"; public const string InvoiceDetailView = "Order_Invoice_DetailView"; public const string ChildDetailView = "Order_DetailView_Child"; public const string ListViewDetail = "Order_ListView_Detail"; - + [XafDisplayName("Invoice #")] - [FontSizeDelta(4)][MaxLength(100)] - public virtual string InvoiceNumber { get; set; } - + [FontSizeDelta(4)] + [MaxLength(100)] + public virtual string InvoiceNumber { get; set; } + public virtual Customer Customer { get; set; } public virtual CustomerStore Store { get; set; } [MaxLength(100)] - public virtual string PONumber { get; set; } + public virtual string PONumber { get; set; } public virtual Employee Employee { get; set; } - public virtual DateOnly OrderDate { get; set; } + public virtual DateOnly OrderDate { get; set; } [Column(TypeName = CurrencyType)] - public virtual decimal SaleAmount { get; set; } + public virtual decimal SaleAmount { get; set; } [Column(TypeName = CurrencyType)] - public virtual decimal ShippingAmount { get; set; } + public virtual decimal ShippingAmount { get; set; } [Column(TypeName = CurrencyType)] - public virtual decimal TotalAmount { get; set; } + public virtual decimal TotalAmount { get; set; } [Browsable(false)] public virtual int Year => OrderDate.Year; - public virtual DateTime? ShipDate { get; set; } - public virtual OrderShipMethod ShipMethod { get; set; } + public virtual DateTime? ShipDate { get; set; } + public virtual OrderShipMethod ShipMethod { get; set; } [EditorAlias(EditorAliases.DxHtmlPropertyEditor)] - public virtual byte[] OrderTerms { get; set; } + public virtual byte[] OrderTerms { get; set; } [Aggregated] - public virtual ObservableCollection OrderItems{ get; set; } = new(); - public virtual ShipmentCourier ShipmentCourier { get; set; } + public virtual ObservableCollection OrderItems { get; set; } = new(); + public virtual ShipmentCourier ShipmentCourier { get; set; } [EditorAlias(EditorAliases.EnumImageOnlyEditor)] - public virtual ShipmentStatus ShipmentStatus { get; set; } + public virtual ShipmentStatus ShipmentStatus { get; set; } [HideInUI(HideInUI.DetailView)] [XafDisplayName(nameof(ShipmentStatus))] [ImageEditor(ListViewImageEditorMode = ImageEditorMode.PictureEdit, - DetailViewImageEditorMode = ImageEditorMode.PictureEdit,ImageSizeMode = ImageSizeMode.Zoom)] + DetailViewImageEditorMode = ImageEditorMode.PictureEdit, ImageSizeMode = ImageSizeMode.Zoom)] public virtual byte[] ShipmentStatusImage => ImageLoader.Instance.GetEnumValueImageInfo(@ShipmentStatus).ImageBytes; - [EditorAlias(EditorAliases.PdfViewerEditor)] + [EditorAlias(BaseEditorAliases.PdfViewerPropertyEditor)] [HideInUI(HideInUI.DetailView)] [NotMapped] - public virtual byte[] ShipmentDetail{ get; set; } = []; - - - [EditorAlias(EditorAliases.PdfViewerEditor)] + public virtual byte[] ShipmentDetail { get; set; } = []; + + [EditorAlias(BaseEditorAliases.PdfViewerPropertyEditor)] // [HideInUI(HideInUI.DetailView)] [VisibleInDetailView(false)] [NotMapped] - public virtual byte[] InvoiceDocument{ get; set; } = []; + public virtual byte[] InvoiceDocument { get; set; } = []; [EditorAlias(EditorAliases.DxHtmlPropertyEditor)] - public virtual byte[] Comments { get; set; } + public virtual byte[] Comments { get; set; } [Column(TypeName = CurrencyType)] - public virtual decimal RefundTotal { get; set; } + public virtual decimal RefundTotal { get; set; } [Column(TypeName = CurrencyType)] - public virtual decimal PaymentTotal { get; set; } + public virtual decimal PaymentTotal { get; set; } [HideInUI(HideInUI.ListView)] [PersistentAlias("[][State = ^.Customer.BillingAddressState].Single(Rate) * TotalAmount")] @@ -86,29 +86,27 @@ public class Order :OutlookInspiredBaseObject, IViewFilter,IRouteMapsMarker{ [PersistentAlias("Iif(" + nameof(PaymentTotal) + "=0 AND " + nameof(RefundTotal) + "=0,0,Iif(" + nameof(RefundTotal) + "=" + nameof(TotalAmount) + ",3,Iif(" + nameof(PaymentTotal) + "=" + nameof(TotalAmount) + ",1,2)))")] - public PaymentStatus PaymentStatus + public PaymentStatus PaymentStatus => Enum.TryParse(EvaluateAlias() as string, out PaymentStatus result) ? result : PaymentStatus.Other; [HideInUI(HideInUI.DetailView)] [XafDisplayName(nameof(ShipmentStatus))] [ImageEditor(ListViewImageEditorMode = ImageEditorMode.PictureEdit, - DetailViewImageEditorMode = ImageEditorMode.PictureEdit,ImageSizeMode = ImageSizeMode.Zoom)] + DetailViewImageEditorMode = ImageEditorMode.PictureEdit, ImageSizeMode = ImageSizeMode.Zoom)] public byte[] PaymentStatusImage => ImageLoader.Instance.GetEnumValueImageInfo(PaymentStatus).ImageBytes; - - public double ActualWeight + public double ActualWeight => OrderItems == null ? 0 : OrderItems.Where(item => item.Product != null) .Sum(item => item.Product.Weight * item.ProductUnits); [EditorAlias(EditorAliases.MapHomeOfficePropertyEditor)] - public Location Location => new(){Latitude = ((IBaseMapsMarker)this).Latitude, Longitude = ((IBaseMapsMarker)this).Longitude }; + public Location Location => new() { Latitude = ((IBaseMapsMarker)this).Latitude, Longitude = ((IBaseMapsMarker)this).Longitude }; string IBaseMapsMarker.Title => Store?.Customer.Name; - double IBaseMapsMarker.Latitude => Store?.Latitude??0; - - double IBaseMapsMarker.Longitude => Store?.Longitude??0; + double IBaseMapsMarker.Latitude => Store?.Latitude ?? 0; + double IBaseMapsMarker.Longitude => Store?.Longitude ?? 0; } - + [JsonConverter(typeof(JsonStringEnumConverter))] public enum OrderShipMethod { Ground, Air @@ -129,11 +127,11 @@ public enum ShipmentStatus { [JsonConverter(typeof(JsonStringEnumConverter))] public enum PaymentStatus { [ImageName("PaymentUnPaid")] - Unpaid, + Unpaid, [ImageName("PaymentPaid")] - PaidInFull, + PaidInFull, [ImageName("PaymentRefund")] RefundInFull, Other } -} \ No newline at end of file +} diff --git a/CS/OutlookInspired.Module/BusinessObjects/Product.cs b/CS/OutlookInspired.Module/BusinessObjects/Product.cs index 9541b497..5880e4f2 100644 --- a/CS/OutlookInspired.Module/BusinessObjects/Product.cs +++ b/CS/OutlookInspired.Module/BusinessObjects/Product.cs @@ -10,84 +10,84 @@ using OutlookInspired.Module.Features; using OutlookInspired.Module.Features.CloneView; using OutlookInspired.Module.Features.Maps; +using BaseEditorAliases = DevExpress.ExpressApp.Editors.EditorAliases; - - -namespace OutlookInspired.Module.BusinessObjects{ +namespace OutlookInspired.Module.BusinessObjects { [ImageName("BO_Product")] [CloneView(CloneViewType.DetailView, BrochureDetailView)] [CloneView(CloneViewType.ListView, LayoutViewListView)] [CloneView(CloneViewType.DetailView, MapsDetailView)] - [Appearance("UnAvailable",AppearanceItemType.ViewItem, "!"+nameof(Available),TargetItems = "*",FontStyle = DevExpress.Drawing.DXFontStyle.Strikeout)] + [Appearance("UnAvailable", AppearanceItemType.ViewItem, "!" + nameof(Available), TargetItems = "*", FontStyle = DevExpress.Drawing.DXFontStyle.Strikeout)] [XafDefaultProperty(nameof(Name))] - public class Product :OutlookInspiredBaseObject, IViewFilter,ISalesMapsMarker{ + public class Product : OutlookInspiredBaseObject, IViewFilter, ISalesMapsMarker { private static readonly RichEditDocumentServer RichEditDocumentServer = new(); public const string LayoutViewListView = "ProductLayoutView_ListView"; public const string BrochureDetailView = "Product_Brochure_DetailView"; public const string MapsDetailView = "Product_DetailView_Maps"; - - [FontSizeDelta(8)][MaxLength(100)] - public virtual string Name { get; set; } + + [FontSizeDelta(8)] + [MaxLength(100)] + public virtual string Name { get; set; } [EditorAlias(EditorAliases.DxHtmlPropertyEditor)] - public virtual byte[] Description { get; set; } + public virtual byte[] Description { get; set; } - [HideInUI(HideInUI.All)] - public virtual string DescriptionString{ - get{ - RichEditDocumentServer.LoadDocument(Description,DocumentFormat.OpenXml); + public virtual string DescriptionString { + get { + RichEditDocumentServer.LoadDocument(Description, DocumentFormat.OpenXml); return RichEditDocumentServer.Text; } } - public virtual DateTime ProductionStart { get; set; } - public virtual bool Available { get; set; } + public virtual DateTime ProductionStart { get; set; } + public virtual bool Available { get; set; } [ImageEditor(ListViewImageEditorMode = ImageEditorMode.PictureEdit, - DetailViewImageEditorMode = ImageEditorMode.PictureEdit,ImageSizeMode = ImageSizeMode.Zoom)] - public virtual byte[] Image { get; set; } + DetailViewImageEditorMode = ImageEditorMode.PictureEdit, ImageSizeMode = ImageSizeMode.Zoom)] + public virtual byte[] Image { get; set; } public virtual Employee Support { get; set; } public virtual Employee Engineer { get; set; } [Browsable(false)] public virtual Guid? EngineerId { get; set; } [XafDisplayName("Inventory")] - public virtual int? CurrentInventory { get; set; } - public virtual int Backorder { get; set; } - public virtual int Manufacturing { get; set; } + public virtual int? CurrentInventory { get; set; } + public virtual int Backorder { get; set; } + public virtual int Manufacturing { get; set; } [NotMapped] public ObservableCollection Sales { get; set; } = new(); - [NotMapped][HideInUI(HideInUI.DetailView)] - public virtual ObservableCollection CitySales{ get; set; } = new(); + [NotMapped] + [HideInUI(HideInUI.DetailView)] + public virtual ObservableCollection CitySales { get; set; } = new(); public virtual Picture PrimaryImage { get; set; } [Column(TypeName = CurrencyType)] - public virtual decimal Cost { get; set; } + public virtual decimal Cost { get; set; } [Column(TypeName = CurrencyType)] - public virtual decimal SalePrice { get; set; } + public virtual decimal SalePrice { get; set; } [Column(TypeName = CurrencyType)] - public virtual decimal RetailPrice { get; set; } - public virtual double Weight { get; set; } - public virtual double ConsumerRating { get; set; } - public virtual ProductCategory Category { get; set; } + public virtual decimal RetailPrice { get; set; } + public virtual double Weight { get; set; } + public virtual double ConsumerRating { get; set; } + public virtual ProductCategory Category { get; set; } - [InverseProperty(nameof(ProductCatalog.Product))][Aggregated] - public virtual ObservableCollection Catalogs{ get; set; } = new(); - + [InverseProperty(nameof(ProductCatalog.Product))] + [Aggregated] + public virtual ObservableCollection Catalogs { get; set; } = new(); [Aggregated] - public virtual ObservableCollection Images{ get; set; } = new(); + public virtual ObservableCollection Images { get; set; } = new(); [Aggregated] - public virtual ObservableCollection QuoteItems{ get; set; } = new(); - [EditorAlias(EditorAliases.PdfViewerEditor)] + public virtual ObservableCollection QuoteItems { get; set; } = new(); + [EditorAlias(BaseEditorAliases.PdfViewerPropertyEditor)] public byte[] Brochure => Catalogs.Select(catalog => catalog.PDF).FirstOrDefault(); string IBaseMapsMarker.Title => Name; double IBaseMapsMarker.Latitude => throw new NotImplementedException(); double IBaseMapsMarker.Longitude => throw new NotImplementedException(); - [InverseProperty(nameof(OrderItem.Product))][Aggregated] - - public virtual ObservableCollection OrderItems{ get; set; } = new(); + [InverseProperty(nameof(OrderItem.Product))] + [Aggregated] + public virtual ObservableCollection OrderItems { get; set; } = new(); IEnumerable ISalesMapsMarker.Orders => OrderItems.Select(item => item.Order).Distinct(); } @@ -104,5 +104,4 @@ public enum ProductCategory { [ImageName(nameof(VideoPlayers))] VideoPlayers } - -} \ No newline at end of file +} diff --git a/CS/OutlookInspired.Module/BusinessObjects/Quote.cs b/CS/OutlookInspired.Module/BusinessObjects/Quote.cs index e1dcb9b1..7d5c7630 100644 --- a/CS/OutlookInspired.Module/BusinessObjects/Quote.cs +++ b/CS/OutlookInspired.Module/BusinessObjects/Quote.cs @@ -50,4 +50,4 @@ public class Quote :OutlookInspiredBaseObject, IViewFilter,IMapsMarker{ -} \ No newline at end of file +} diff --git a/CS/OutlookInspired.Module/BusinessObjects/Welcome.cs b/CS/OutlookInspired.Module/BusinessObjects/Welcome.cs index aee2e9ed..94449ebd 100644 --- a/CS/OutlookInspired.Module/BusinessObjects/Welcome.cs +++ b/CS/OutlookInspired.Module/BusinessObjects/Welcome.cs @@ -2,18 +2,21 @@ using DevExpress.ExpressApp.DC; using DevExpress.Persistent.Base; using OutlookInspired.Module.Attributes.Appearance; +using BaseEditorAliases = DevExpress.ExpressApp.Editors.EditorAliases; -namespace OutlookInspired.Module.BusinessObjects{ - [DomainComponent][ForbidCRUD][ForbidNavigation] +namespace OutlookInspired.Module.BusinessObjects { + [DomainComponent] + [ForbidCRUD] + [ForbidNavigation] [ImageName("About")] public class Welcome : NonPersistentBaseObject { - public Welcome(){ + public Welcome() { var assembly = GetType().Assembly; About = Bytes(assembly.GetManifestResourceStream(assembly.GetManifestResourceNames().First(s => s.EndsWith("Welcome.pdf")))); } - byte[] Bytes( Stream stream){ - if (stream is MemoryStream memoryStream){ + byte[] Bytes(Stream stream) { + if(stream is MemoryStream memoryStream) { return memoryStream.ToArray(); } @@ -22,8 +25,7 @@ byte[] Bytes( Stream stream){ return ms.ToArray(); } - - [EditorAlias(EditorAliases.PdfViewerEditor)] - public byte[] About{ get; set; } + [EditorAlias(BaseEditorAliases.PdfViewerPropertyEditor)] + public byte[] About { get; set; } } -} \ No newline at end of file +} diff --git a/CS/OutlookInspired.Module/EditorAliases.cs b/CS/OutlookInspired.Module/EditorAliases.cs index f0542e49..6334969b 100644 --- a/CS/OutlookInspired.Module/EditorAliases.cs +++ b/CS/OutlookInspired.Module/EditorAliases.cs @@ -3,7 +3,6 @@ public struct EditorAliases { public const string EnumImageOnlyEditor = "EnumImageOnlyEditor"; public const string PrintLayoutRichTextEditor = "PrintLayoutRichTextEditor"; - public const string PdfViewerEditor = "PdfViewerEditor"; public const string LabelPropertyEditor = "LabelPropertyEditor"; public const string HyperLinkPropertyEditor = "HyperLinkPropertyEditor"; public const string DxHtmlPropertyEditor = "DxHtmlPropertyEditor"; diff --git a/CS/OutlookInspired.Win/Controllers/PdfViewerController.cs b/CS/OutlookInspired.Win/Controllers/PdfViewerController.cs new file mode 100644 index 00000000..d3fc7d71 --- /dev/null +++ b/CS/OutlookInspired.Win/Controllers/PdfViewerController.cs @@ -0,0 +1,15 @@ +using DevExpress.ExpressApp; +using DevExpress.ExpressApp.Office.Win; +using DevExpress.XtraPdfViewer; + +namespace OutlookInspired.Win.Features { + public class PdfViewerController : ViewController { + protected override void OnActivated() { + base.OnActivated(); + View.CustomizeViewItemControl(this, editor => { + editor.Control.NavigationPaneVisibility = PdfNavigationPaneVisibility.Hidden; + editor.Control.NavigationPaneInitialVisibility = PdfNavigationPaneVisibility.Hidden; + }); + } + } +} diff --git a/CS/OutlookInspired.Win/Editors/PdfViewerEditor.cs b/CS/OutlookInspired.Win/Editors/PdfViewerEditor.cs deleted file mode 100644 index 26205329..00000000 --- a/CS/OutlookInspired.Win/Editors/PdfViewerEditor.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.IO; -using DevExpress.ExpressApp.Editors; -using DevExpress.ExpressApp.Model; -using DevExpress.ExpressApp.Win.Editors; -using DevExpress.XtraPdfViewer; -using EditorAliases = OutlookInspired.Module.EditorAliases; - -namespace OutlookInspired.Win.Editors{ - [PropertyEditor(typeof(byte[]), EditorAliases.PdfViewerEditor, false)] - public class PdfViewerEditor(Type objectType, IModelMemberViewItem info) : WinPropertyEditor(objectType, info){ - public new PdfViewer Control => (PdfViewer)base.Control; - protected override object CreateControlCore() - => new PdfViewer{ - Dock = DockStyle.Fill, DetachStreamAfterLoadComplete = true, ZoomMode = PdfZoomMode.PageLevel, - NavigationPaneVisibility = PdfNavigationPaneVisibility.Hidden, - NavigationPaneInitialVisibility = PdfNavigationPaneVisibility.Hidden - }; - - protected override void ReadValueCore(){ - if (PropertyValue is not byte[]{ Length: > 0 } bytes) return; - using var memoryStream = new MemoryStream(bytes); - Control?.LoadDocument(memoryStream); - - } - } -} \ No newline at end of file From 9eb201403df44dabb7e6bbfe4a88f3078d09b1de Mon Sep 17 00:00:00 2001 From: Vladislav Bogdanov Date: Fri, 18 Jul 2025 09:59:38 +0400 Subject: [PATCH 2/3] Fix add the $ sign to Opportunity pie chart labels --- .../Charts/OpportunityPieChart.razor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CS/OutlookInspired.Blazor.Server/Charts/OpportunityPieChart.razor b/CS/OutlookInspired.Blazor.Server/Charts/OpportunityPieChart.razor index d7b38f61..f735e0e8 100644 --- a/CS/OutlookInspired.Blazor.Server/Charts/OpportunityPieChart.razor +++ b/CS/OutlookInspired.Blazor.Server/Charts/OpportunityPieChart.razor @@ -8,7 +8,7 @@ - + From f3122196b675f38d160915d6abb17aa0aa0af66c Mon Sep 17 00:00:00 2001 From: Vladislav Bogdanov Date: Fri, 18 Jul 2025 10:26:00 +0400 Subject: [PATCH 3/3] Fix pdf viewer style --- .../Features/WelcomeController.cs | 5 ++++- CS/OutlookInspired.Blazor.Server/wwwroot/css/site.css | 8 -------- CS/OutlookInspired.Win/Controllers/PdfViewerController.cs | 1 + 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/CS/OutlookInspired.Blazor.Server/Features/WelcomeController.cs b/CS/OutlookInspired.Blazor.Server/Features/WelcomeController.cs index 3b259a74..c7fa409c 100644 --- a/CS/OutlookInspired.Blazor.Server/Features/WelcomeController.cs +++ b/CS/OutlookInspired.Blazor.Server/Features/WelcomeController.cs @@ -1,5 +1,7 @@ -using DevExpress.ExpressApp; +using DevExpress.Blazor.Reporting.Models; +using DevExpress.ExpressApp; using DevExpress.ExpressApp.Office.Blazor.Editors; +using Microsoft.AspNetCore.Components; using OutlookInspired.Module.BusinessObjects; namespace OutlookInspired.Blazor.Server.Features { @@ -9,6 +11,7 @@ protected override void OnActivated() { View.CustomizeViewItemControl(this, item => { item.ComponentModel.CssClass = "welcome-pdf-viewer"; item.ComponentModel.IsSinglePagePreview = true; + item.ComponentModel.CustomizeToolbar = EventCallback.Factory.Create(this, toolbar => toolbar.AllItems.Clear()); }); } } diff --git a/CS/OutlookInspired.Blazor.Server/wwwroot/css/site.css b/CS/OutlookInspired.Blazor.Server/wwwroot/css/site.css index 0cd37b66..3f3d6cf7 100644 --- a/CS/OutlookInspired.Blazor.Server/wwwroot/css/site.css +++ b/CS/OutlookInspired.Blazor.Server/wwwroot/css/site.css @@ -39,11 +39,3 @@ app { height: 2rem; } -.pe-pdf-viewer .dxbrv-toolbar { - height: 2rem; -} - -.pe-pdf-viewer { - width: 100%; - height: 100vh; -} diff --git a/CS/OutlookInspired.Win/Controllers/PdfViewerController.cs b/CS/OutlookInspired.Win/Controllers/PdfViewerController.cs index d3fc7d71..a7751ec1 100644 --- a/CS/OutlookInspired.Win/Controllers/PdfViewerController.cs +++ b/CS/OutlookInspired.Win/Controllers/PdfViewerController.cs @@ -7,6 +7,7 @@ public class PdfViewerController : ViewController { protected override void OnActivated() { base.OnActivated(); View.CustomizeViewItemControl(this, editor => { + editor.Control.ZoomMode = PdfZoomMode.PageLevel; editor.Control.NavigationPaneVisibility = PdfNavigationPaneVisibility.Hidden; editor.Control.NavigationPaneInitialVisibility = PdfNavigationPaneVisibility.Hidden; });