diff --git a/components/tvplanit/examples/dayview_wrapstyle/dvwsmain.lfm b/components/tvplanit/examples/dayview_wrapstyle/dvwsmain.lfm index 18fe78e83..56481d19a 100644 --- a/components/tvplanit/examples/dayview_wrapstyle/dvwsmain.lfm +++ b/components/tvplanit/examples/dayview_wrapstyle/dvwsmain.lfm @@ -132,13 +132,14 @@ object Form1: TForm1 Printer.Granularity = gr30Min Printer.MarginUnits = imAbsolutePixel Printer.PrintFormats = <> - Left = 147 - Top = 66 + Left = 248 + Top = 118 end object VpIniDatastore1: TVpIniDatastore CategoryColorMap.Category0.Description = 'Category 0' CategoryColorMap.Category0.ImageIndex = 0 CategoryColorMap.Category1.Description = 'Category 1' + CategoryColorMap.Category1.ImageIndex = 9 CategoryColorMap.Category2.Description = 'Category 2' CategoryColorMap.Category3.Description = 'Category 3' CategoryColorMap.Category4.Description = 'Category 4' @@ -152,11 +153,11 @@ object Form1: TForm1 Images = ImageList2 AutoConnect = True FileName = 'data.ini' - Left = 147 - Top = 120 + Left = 248 + Top = 184 end object ImageList1: TImageList - Left = 256 + Left = 344 Top = 118 Bitmap = { 4C7A0400000010000000100000003E0300000000000078DAED574D485451143E @@ -191,8 +192,8 @@ object Form1: TForm1 object ImageList2: TImageList Height = 24 Width = 24 - Left = 216 - Top = 228 + Left = 344 + Top = 184 Bitmap = { 4C7A040000001800000018000000960500000000000078DAED595D685C45143E F5A7E2BF2F2A8AE243157D525111C420C67F04ADD65A412CF82A1524B6D4DF87 diff --git a/components/tvplanit/examples/fulldemo/bufdsdatamodule.lfm b/components/tvplanit/examples/fulldemo/bufdsdatamodule.lfm index ed89e3420..0f6a3ba71 100644 --- a/components/tvplanit/examples/fulldemo/bufdsdatamodule.lfm +++ b/components/tvplanit/examples/fulldemo/bufdsdatamodule.lfm @@ -5,33 +5,21 @@ object DemoDM: TDemoDM VerticalOffset = 519 Width = 277 object Datastore: TVpBufDSDataStore - CategoryColorMap.Category0.Color = clNavy CategoryColorMap.Category0.Description = 'Category 0' - CategoryColorMap.Category1.Color = clRed CategoryColorMap.Category1.Description = 'Category 1' - CategoryColorMap.Category2.Color = clYellow CategoryColorMap.Category2.Description = 'Category 2' - CategoryColorMap.Category3.Color = clLime CategoryColorMap.Category3.Description = 'Category 3' - CategoryColorMap.Category4.Color = clPurple CategoryColorMap.Category4.Description = 'Category 4' - CategoryColorMap.Category5.Color = clTeal CategoryColorMap.Category5.Description = 'Category 5' - CategoryColorMap.Category6.Color = clFuchsia CategoryColorMap.Category6.Description = 'Category 6' - CategoryColorMap.Category7.Color = clOlive CategoryColorMap.Category7.Description = 'Category 7' - CategoryColorMap.Category8.Color = clAqua CategoryColorMap.Category8.Description = 'Category 8' - CategoryColorMap.Category9.Color = clMaroon CategoryColorMap.Category9.Description = 'Category 9' - EnableEventTimer = True - PlayEventSounds = True + HiddenCategories.BackgroundColor = clSilver + HiddenCategories.Color = clGray AutoConnect = True - AutoCreate = True - DayBuffer = 31 Directory = 'data' - left = 87 - top = 32 + Left = 87 + Top = 32 end end diff --git a/components/tvplanit/examples/fulldemo/bufdsdatamodule.pas b/components/tvplanit/examples/fulldemo/bufdsdatamodule.pas index 2eef3f5bd..2bdc4d315 100644 --- a/components/tvplanit/examples/fulldemo/bufdsdatamodule.pas +++ b/components/tvplanit/examples/fulldemo/bufdsdatamodule.pas @@ -5,7 +5,7 @@ unit bufdsdatamodule; interface uses - Classes, SysUtils, FileUtil, VpBufDS; + Classes, SysUtils, Controls, VpBufDS; type diff --git a/components/tvplanit/source/vpdayview.pas b/components/tvplanit/source/vpdayview.pas index 4c3986705..fdd26f343 100644 --- a/components/tvplanit/source/vpdayview.pas +++ b/components/tvplanit/source/vpdayview.pas @@ -115,7 +115,7 @@ type { Forward Declarations } TVpDayView = class; - TVpDvInplaceEdit = class(TCustomEdit) + TVpDvInplaceEdit = class(TCustomMemo) //TCustomEdit) protected procedure CreateParams(var Params: TCreateParams); override; procedure KeyDown(var Key: Word; Shift: TShiftState); override; @@ -560,13 +560,15 @@ begin inherited Create(AOwner); TabStop := False; BorderStyle := bsNone; + WantReturns := false; + WantTabs := false; // DoubleBuffered := False; end; procedure TVpDvInPlaceEdit.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); - Params.Style := Params.Style{$IFNDEF LCL} or ES_MULTILINE{$ENDIF}; +// Params.Style := Params.Style{$IFNDEF LCL} or ES_MULTILINE{$ENDIF}; end; procedure TVpDvInPlaceEdit.KeyDown(var Key: Word; Shift: TShiftState); @@ -2294,12 +2296,21 @@ begin HeightOf(dvActiveEventRec) ) else + { dvInPlaceEditor.SetBounds( dvActiveIconRec.Right + TextMargin, dvActiveEventRec.Top + TextMargin, WidthOf(dvActiveEventRec) - dvActiveIconRec.Right - TextMargin*2, HeightOf(dvActiveEventRec) - TextMargin ); + } + dvInplaceEditor.SetBounds( + dvActiveEventRec.Left, + dvActiveEventRec.Top, + WidthOf(dvActiveEventRec), + HeightOf(dvActiveEventRec) + ); + dvInPlaceEditor.Show; dvInPlaceEditor.Text := FActiveEvent.Description; Invalidate; diff --git a/components/tvplanit/source/vpdayviewpainter.pas b/components/tvplanit/source/vpdayviewpainter.pas index 0a4cc4b40..21fd23ce7 100644 --- a/components/tvplanit/source/vpdayviewpainter.pas +++ b/components/tvplanit/source/vpdayviewpainter.pas @@ -1119,13 +1119,13 @@ begin begin {$IFDEF REGION_SUPPORT} WorkRegion1 := CreateRectRgn(AIconRect.Right + FScaledTextMargin, AEventRect.Top, AEventRect.Right, AIconRect.Bottom); - WorkRegion2 := CreateRectRgn(AEventRect.Left + FScaledGutterWidth, AIconRect.Bottom, AEventRect.Right, AEventRect.Bottom); + WorkRegion2 := CreateRectRgn(AEventRect.Left + FScaledIconMargin, AIconRect.Bottom, AEventRect.Right, AEventRect.Bottom); TextRegion := CreateRectRgn(AIconRect.Right, AEventRect.Top, AEventRect.Right, AIconRect.Bottom); CombineRgn(TextRegion, WorkRegion1, WorkRegion2, RGN_OR); {$ELSE} SetLength(TextRects, 2); TextRects[0] := Rect(AIconRect.Right + FScaledTextMargin, AEventRect.Top, AEventRect.Right, AIconRect.Bottom); - TextRects[1] := Rect(AEventRect.Left + FScaledGutterWidth, AIconRect.Bottom, AEventRect.Right, AEventRect.Bottom); + TextRects[1] := Rect(AEventRect.Left + FScaledIconMargin, AIconRect.Bottom, AEventRect.Right, AEventRect.Bottom); {$ENDIF} end else begin @@ -1661,7 +1661,7 @@ begin {$ENDIF} if Event.AlarmSet then begin - if (FDayView.IconAttributes.AlarmImageIndex > -1) and (imgList <> nil) then + if (imgList <> nil) and Between(FDayView.IconAttributes.AlarmImageIndex, 0, imgList.Count-1) then begin {$IFDEF LCL} {$IF LCL_FullVersion >= 1090000} @@ -1680,7 +1680,7 @@ begin if Event.RepeatCode <> rtNone then begin - if (FDayView.IconAttributes.RecurringImageIndex > -1) and (imgList <> nil) then + if (imgList <> nil) and Between(FDayView.IconAttributes.RecurringImageIndex, 0, imgList.Count-1) then begin {$IFDEF LCL} {$IF LCL_FullVersion >= 1090000} @@ -1709,7 +1709,7 @@ begin if Event.Category < 10 then begin cat := FDayView.Datastore.CategoryColorMap.GetCategory(Event.Category); - if (cat.ImageIndex > -1) and (imgList <> nil) then + if (imgList <> nil) and Between(cat.ImageIndex, 0, imgList.Count-1) then begin {$IFDEF LCL} {$IF LCL_FullVersion >= 1090000} diff --git a/components/tvplanit/source/vpevnteditdlg.lfm b/components/tvplanit/source/vpevnteditdlg.lfm index dc266a659..03ada18dd 100644 --- a/components/tvplanit/source/vpevnteditdlg.lfm +++ b/components/tvplanit/source/vpevnteditdlg.lfm @@ -11,7 +11,7 @@ object DlgEventEdit: TDlgEventEdit OnCreate = FormCreate OnShow = FormShow Position = poScreenCenter - LCLVersion = '2.3.0.0' + LCLVersion = '3.99.0.0' object ButtonPanel: TPanel Left = 0 Height = 37 diff --git a/components/tvplanit/source/vpevnteditdlg.pas b/components/tvplanit/source/vpevnteditdlg.pas index 8c79aa4af..9a40538e3 100644 --- a/components/tvplanit/source/vpevnteditdlg.pas +++ b/components/tvplanit/source/vpevnteditdlg.pas @@ -333,10 +333,9 @@ var bmp: TBitmap; ColorRect: TRect; IconX, IconY: Integer; - hTxt, hGutter, hDist, hMargin: Integer; + hTxt, hGutter, hDist, hMargin, hItem, hImg, wImg: Integer; SavedStyle: TBrushStyle; imgIndex: Integer; - h: Integer = 0; {$IFDEF LCL} {$IF LCL_FullVersion >= 1090000} imgres: TScaledImageListResolution; @@ -357,7 +356,6 @@ begin lDesc := Description; lBkColor := BackgroundColor; imgIndex := ImageIndex; - if Bitmap <> nil then h := Bitmap.Height; end; SavedColor := Category.Canvas.Brush.Color; @@ -369,26 +367,46 @@ begin Category.Canvas.Brush.Color := lGutterColor; Category.Canvas.Pen.Color := clBlack; - ColorRect.Left := ARect.Left; // + hMargin; - ColorRect.Top := ARect.Top; // + vMargin; - ColorRect.Bottom := ARect.Bottom; //- vMargin; + ColorRect.Left := ARect.Left+2; // + hMargin; + ColorRect.Top := ARect.Top+2; // + vMargin; + ColorRect.Bottom := ARect.Bottom-1; //- vMargin; ColorRect.Right := ColorRect.Left + hGutter; Category.Canvas.FillRect(ColorRect); Category.Canvas.Rectangle(ColorRect); + hItem := HeightOf(ColorRect); IconX := ColorRect.Right + hMargin; - IconY := (ARect.Top + ARect.Bottom - h) div 2; - if (imgIndex > -1) and (FDataStore <> nil) and (FDataStore.Images <> nil) then + if (FDataStore <> nil) and (FDataStore.Images <> nil) and Between(imgIndex, 0, FDatastore.Images.Count-1) then begin {$IFDEF LCL} {$IF LCL_FullVersion >= 1090000} ppi := Category.Font.PixelsPerInch; f := Category.GetCanvasScaleFactor; imgres := FDatastore.Images.ResolutionForPPI[FDatastore.ImagesWidth, ppi, f]; - h := imgRes.Height; - IconY := (ARect.Top + ARect.Bottom - h) div 2; - imgres.Draw(Category.Canvas, IconX, IconY, imgIndex, true); - inc(ColorRect.Right, imgres.Width); + hImg := imgRes.Height; + // If image is too high scale it down to row height + if hImg > hItem then + begin + bmp := TBitmap.Create; + try + bmp.PixelFormat := pf32Bit; + bmp.SetSize(imgRes.Width, imgRes.Height); + imgRes.Draw(bmp.Canvas, 0, 0, imgIndex, true); + hImg := hItem; + wImg := round(imgRes.Width / imgRes.Height * hImg); + ScaleImg(bmp, wImg, hImg); + IconY := (ARect.Top + ARect.Bottom - hItem) div 2; + Category.Canvas.Draw(IconX, IconY, bmp); + finally + bmp.Free; + end; + end else + begin + IconY := (ARect.Top + ARect.Bottom - hImg) div 2; + wImg := imgRes.Width; + imgres.Draw(Category.Canvas, IconX, IconY, imgIndex, true); + end; + inc(ColorRect.Right, wImg); {$ELSE} FDatastore.Images.Draw(Category.Canvas, IconX, IconY, imgIndex, true); {$IFEND} @@ -397,19 +415,22 @@ begin bmp := TBitmap.Create; try bmp.Assign(CatColorMap.GetCategory(Index).Bitmap); + hImg := bmp.Height; + {$IFDEF LCL} + if hImg > hItem then + begin + wImg := round(bmp.Width / bmp.Height * hItem); + hImg := hItem; + ScaleImg(bmp, wImg, hImg); + end; + {$ENDIF} + IconY := (ARect.Top + ARect.Bottom - hImg) div 2; Category.Canvas.Draw(IconX, IconY, bmp); inc(ColorRect.Right, bmp.Width); finally bmp.Free; end; end; - (* - if lBmp <> nil then begin - IconX := ColorRect.Right + hMargin; - IconY := (ARect.Top + ARect.Bottom - lBmp.Height) div 2; - Category.Canvas.Draw(IconX, IconY, lBmp); - inc(ColorRect.Right, lBmp.Width); - end; *) ARect.Left := ColorRect.Right + hDist; Category.Canvas.Brush.Style := bsClear; diff --git a/components/tvplanit/source/vpmisc.pas b/components/tvplanit/source/vpmisc.pas index 630a54f9c..82e1ff26c 100644 --- a/components/tvplanit/source/vpmisc.pas +++ b/components/tvplanit/source/vpmisc.pas @@ -207,11 +207,15 @@ procedure LoadGlyphFromRCDATA(AGlyph: TBitmap; ABaseResName: String; procedure LoadImageFromRCDATA(AImage: TImage; ABaseResName: String; ALowRes, AMedRes, AHighRes: Integer; AdjustSize: Boolean = true); +procedure ScaleImg(AImage: TCustomBitmap; ANewWidth, ANewHeight: Integer); + function GetScrollbarHeight: Integer; function GetScrollbarWidth: Integer; procedure FixLabels({%H-}AForm: TCustomForm); +function Between(x, min, max: Integer): Boolean; + procedure Unused(const A1); overload; procedure Unused(const A1, A2); overload; procedure Unused(const A1, A2, A3); overload; @@ -222,7 +226,7 @@ implementation uses Math, {$IFDEF LCL} - DateUtils, StrUtils, LazUTF8, EditBtn, ButtonPanel, + FPCanvas, IntfGraphics, LazCanvas, DateUtils, StrUtils, LazUTF8, EditBtn, ButtonPanel, {$ENDIF} VpSR, VpBaseDS; @@ -1286,6 +1290,30 @@ begin end; end; +{$IFDEF LCL} +procedure ScaleImg(AImage: TCustomBitmap; ANewWidth, ANewHeight: Integer); +var + srcImg: TLazIntfImage = nil; + destCanvas: TLazCanvas = nil; +begin + try + // Create the source LazIntfImage + srcImg := AImage.CreateIntfImage; + // Create the destination LazCanvas + destCanvas := TLazCanvas.Create(srcImg); + destCanvas.Interpolation := TFPBaseInterpolation.Create; + // Execute the canvas.StretchDraw + destCanvas.StretchDraw(0, 0, ANewWidth, ANewHeight, srcImg); + // Reload the stretched image into the CustomBitmap + AImage.LoadFromIntfImage(srcImg); + AImage.SetSize(ANewWidth, ANewHeight); + finally + destCanvas.Free; + srcImg.Free; + end; +end; +{$ENDIF} + function GetScrollbarHeight: Integer; begin Result := GetSystemMetrics(SM_CYHSCROLL); @@ -1310,6 +1338,12 @@ begin {$IFEND} end; +{ Returns true if x is between min and min, including limits. } +function Between(x, min, max: Integer): Boolean; +begin + Result := (x >= min) and (x <= max); +end; + {$PUSH}{$HINTS OFF} procedure Unused(const A1); begin