jvcllaz: Fix lclscaling of TJvTimeLine. Adjust demo to scaled imagelist.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7265 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2020-01-11 16:56:46 +00:00
parent 9f75a78968
commit d5aff07ca7
10 changed files with 7747 additions and 3456 deletions

View File

@ -24,7 +24,6 @@
</PublishOptions> </PublishOptions>
<RunParams> <RunParams>
<FormatVersion Value="2"/> <FormatVersion Value="2"/>
<Modes Count="0"/>
</RunParams> </RunParams>
<RequiredPackages Count="3"> <RequiredPackages Count="3">
<Item1> <Item1>
@ -37,7 +36,7 @@
<PackageName Value="LCL"/> <PackageName Value="LCL"/>
</Item3> </Item3>
</RequiredPackages> </RequiredPackages>
<Units Count="3"> <Units Count="4">
<Unit0> <Unit0>
<Filename Value="TimeLineDemo.lpr"/> <Filename Value="TimeLineDemo.lpr"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
@ -56,6 +55,10 @@
<HasResources Value="True"/> <HasResources Value="True"/>
<ResourceBaseClass Value="Form"/> <ResourceBaseClass Value="Form"/>
</Unit2> </Unit2>
<Unit3>
<Filename Value="TimelineDemo.inc"/>
<IsPartOfProject Value="True"/>
</Unit3>
</Units> </Units>
</ProjectOptions> </ProjectOptions>
<CompilerOptions> <CompilerOptions>

View File

@ -3,7 +3,7 @@
{$mode objfpc}{$H+} {$mode objfpc}{$H+}
uses uses
Forms, datetimectrls, Interfaces, Forms, Interfaces, LCLVersion,
TimelineNotesFormU in 'TimelineNotesFormU.pas' {TimelineNotesForm}, TimelineNotesFormU in 'TimelineNotesFormU.pas' {TimelineNotesForm},
TimelineMainFormU in 'TimelineMainFormU.pas' {TimelineMainForm}; TimelineMainFormU in 'TimelineMainFormU.pas' {TimelineMainForm};

View File

@ -0,0 +1,3 @@
{ Define HIGH_RES_IMAGELIST if you use Laz v2.0+ which introduces a
high-resolution imagelist }
{$DEFINE HIGH_RES_IMAGELIST}

File diff suppressed because it is too large Load Diff

View File

@ -26,12 +26,14 @@
{$mode objfpc}{$H+} {$mode objfpc}{$H+}
{$I TimelineDemo.inc}
unit TimelineMainFormU; unit TimelineMainFormU;
interface interface
uses uses
LCLIntf, LCLType, LCLIntf, LCLType, LCLVersion,
SysUtils, Classes, Graphics, Controls, Forms, Dialogs, DateTimePicker, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, DateTimePicker,
ComCtrls, StdCtrls, ExtCtrls, Menus, ImgList, ComboEx, JvTimeLine; ComCtrls, StdCtrls, ExtCtrls, Menus, ImgList, ComboEx, JvTimeLine;
@ -42,14 +44,12 @@ type
TTimelineMainForm = class(TForm) TTimelineMainForm = class(TForm)
Bevel1: TBevel; Bevel1: TBevel;
CbImgIndex: TComboBoxEx; CbImgIndex: TComboBoxEx;
ImageList1: TImageList;
Splitter1: TSplitter; Splitter1: TSplitter;
PopupMenu1: TPopupMenu; PopupMenu1: TPopupMenu;
Changecaption1: TMenuItem; Changecaption1: TMenuItem;
remove1: TMenuItem; remove1: TMenuItem;
Move1: TMenuItem; Move1: TMenuItem;
N1: TMenuItem; N1: TMenuItem;
ImageList2: TImageList;
StatusBar1: TStatusBar; StatusBar1: TStatusBar;
Notes1: TMenuItem; Notes1: TMenuItem;
N2: TMenuItem; N2: TMenuItem;
@ -104,6 +104,9 @@ type
procedure chkMultiClick(Sender: TObject); procedure chkMultiClick(Sender: TObject);
procedure btnFontClick(Sender: TObject); procedure btnFontClick(Sender: TObject);
procedure btnYrFontClick(Sender: TObject); procedure btnYrFontClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormShow(Sender: TObject); procedure FormShow(Sender: TObject);
procedure TimeLine1Click(Sender: TObject); procedure TimeLine1Click(Sender: TObject);
procedure Changecaption1Click(Sender: TObject); procedure Changecaption1Click(Sender: TObject);
@ -121,7 +124,6 @@ type
procedure udItemHeightClick(Sender: TObject; Button: TUDBtnType); procedure udItemHeightClick(Sender: TObject; Button: TUDBtnType);
procedure chkOwnerDrawClick(Sender: TObject); procedure chkOwnerDrawClick(Sender: TObject);
procedure Notes1Click(Sender: TObject); procedure Notes1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure TimeLine1SaveItem(Sender: TObject; Item: TJvTimeItem; Stream: TStream); procedure TimeLine1SaveItem(Sender: TObject; Item: TJvTimeItem; Stream: TStream);
procedure TimeLine1LoadItem(Sender: TObject; Item: TJvTimeItem; Stream: TStream); procedure TimeLine1LoadItem(Sender: TObject; Item: TJvTimeItem; Stream: TStream);
procedure TimeLine1DrawItem(Sender: TObject; ACanvas: TCanvas; procedure TimeLine1DrawItem(Sender: TObject; ACanvas: TCanvas;
@ -133,7 +135,6 @@ type
procedure btnAutoClick(Sender: TObject); procedure btnAutoClick(Sender: TObject);
procedure btnLoadClick(Sender: TObject); procedure btnLoadClick(Sender: TObject);
procedure btnSaveClick(Sender: TObject); procedure btnSaveClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure chkFlatClick(Sender: TObject); procedure chkFlatClick(Sender: TObject);
procedure Exit1Click(Sender: TObject); procedure Exit1Click(Sender: TObject);
procedure chkHelpYearClick(Sender: TObject); procedure chkHelpYearClick(Sender: TObject);
@ -160,7 +161,13 @@ var
implementation implementation
uses TimelineNotesFormU; uses
{$IFDEF HIGH_RES_IMAGELIST}
TimelineImageModuleU,
{$ELSE}
TimelineImageModule_old,
{$ENDIF}
TimelineNotesFormU;
{$R *.lfm} {$R *.lfm}
@ -172,7 +179,8 @@ type
end; end;
procedure TTimelineMainForm.btnAddClick(Sender: TObject); procedure TTimelineMainForm.btnAddClick(Sender: TObject);
var aItem: TJvTimeItem; var
aItem: TJvTimeItem;
begin begin
aItem := TimeLine1.Items.Add; aItem := TimeLine1.Items.Add;
aItem.Caption := edCaption.Text; aItem.Caption := edCaption.Text;
@ -318,21 +326,27 @@ begin
end; end;
procedure TTimelineMainForm.chkLargeClick(Sender: TObject); procedure TTimelineMainForm.chkLargeClick(Sender: TObject);
var
itemHeight: Integer;
begin begin
if chkNoImages.Checked then if chkNoImages.Checked then
Exit; Exit;
if chkLarge.Checked then if chkLarge.Checked then
begin begin
TimeLine1.Images := ImageList2; TimeLine1.Images := ImageModule.ImageList2;
TimeLine1.ItemHeight := 60; itemHeight := 60;
udItemHeight.Position := 60;
end end
else else
begin begin
TimeLine1.Images := ImageList1; TimeLine1.Images := ImageModule.ImageList1;
TimeLine1.ItemHeight := 40; itemHeight := 40;
udItemHeight.Position := 40;
end; end;
{$IF LCL_FullVersion >= 1080000}
TimeLine1.ItemHeight := Scale96ToFont(itemHeight);
{$ELSE}
TimeLine1.ItemHeight := itemHeight;
{$IFEND}
udItemHeight.Position := TimeLine1.ItemHeight;
end; end;
procedure TTimelineMainForm.udYrSizeClick(Sender: TObject; Button: TUDBtnType); procedure TTimelineMainForm.udYrSizeClick(Sender: TObject; Button: TUDBtnType);
@ -395,6 +409,12 @@ procedure TTimelineMainForm.FormCreate(Sender: TObject);
var var
i: Integer; i: Integer;
begin begin
if ImageModule = nil then
Application.CreateForm(TImageModule, ImageModule);
TimeLine1.Images := ImageModule.ImageList1;
CbImgIndex.Images := ImageModule.ImageList1;
FCurColor := TimeLine1.Color; FCurColor := TimeLine1.Color;
cbDragging.ItemIndex := 0; cbDragging.ItemIndex := 0;
TimelineNotesForm := TTimelineNotesForm.Create(nil); TimelineNotesForm := TTimelineNotesForm.Create(nil);
@ -403,9 +423,10 @@ begin
TimeLine1.ShowSelection := false; TimeLine1.ShowSelection := false;
TimeLine1.DoubleBuffered := false; TimeLine1.DoubleBuffered := false;
for i := 0 to ImageList1.Count-1 do for i := 0 to ImageModule.ImageList1.Count-1 do
CbImgIndex.Add(IntToStr(i), 0, i); CbImgIndex.Add(IntToStr(i), 0, i);
CbImgIndex.ItemIndex := 0; CbImgIndex.ItemIndex := 0;
end; end;
@ -597,6 +618,12 @@ begin
Close; Close;
end; end;
procedure TTimelineMainForm.FormActivate(Sender: TObject);
begin
udYrSize.Position := TimeLine1.YearWidth;
udItemHeight.Position := TimeLine1.ItemHeight;
end;
procedure TTimelineMainForm.chkHelpYearClick(Sender: TObject); procedure TTimelineMainForm.chkHelpYearClick(Sender: TObject);
begin begin
TimeLine1.HelperYears := chkHelpYear.Checked; TimeLine1.HelperYears := chkHelpYear.Checked;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,31 @@
unit TimelineImageModule_old;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Controls;
type
{ TImageModuleOld }
TImageModule = class(TDataModule)
ImageList1: TImageList;
ImageList2: TImageList;
private
public
end;
var
ImageModule: TImageModule;
implementation
{$R *.lfm}
end.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,31 @@
unit TimelineImageModuleU;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Controls;
type
{ TImageModule }
TImageModule = class(TDataModule)
ImageList1: TImageList;
ImageList2: TImageList;
private
public
end;
var
ImageModule: TImageModule;
implementation
{$R *.lfm}
end.

View File

@ -42,11 +42,12 @@ unit JvTimeLine;
{$mode objfpc}{$H+} {$mode objfpc}{$H+}
{$WARN 5024 off : Parameter "$1" not used} {$WARN 5024 off : Parameter "$1" not used}
interface interface
uses uses
SysUtils, Classes, SysUtils, Classes,
LCLType, LCLIntf, LMessages, LCLType, LCLIntf, LMessages, LCLVersion,
Graphics, Controls, Forms, StdCtrls, ExtCtrls, ImgList, Graphics, Controls, Forms, StdCtrls, ExtCtrls, ImgList,
JvConsts, JvComponent; JvConsts, JvComponent;
@ -76,6 +77,7 @@ type
FSelected: Boolean; FSelected: Boolean;
FEnabled: Boolean; FEnabled: Boolean;
FOnDestroy: TNotifyEvent; FOnDestroy: TNotifyEvent;
function IsStoredWidth: Boolean;
procedure SetEnabled(Value: Boolean); procedure SetEnabled(Value: Boolean);
procedure SetImageOffset(Value: Integer); procedure SetImageOffset(Value: Integer);
procedure SetStyle(Value: TJvTimeItemType); procedure SetStyle(Value: TJvTimeItemType);
@ -113,7 +115,7 @@ type
property Selected: Boolean read FSelected write SetSelected default False; property Selected: Boolean read FSelected write SetSelected default False;
property TextColor: TColor read FTextColor write SetTextColor default clBlack; property TextColor: TColor read FTextColor write SetTextColor default clBlack;
property WidthAs: TJvTimeItemType read FStyle write SetStyle default asPixels; property WidthAs: TJvTimeItemType read FStyle write SetStyle default asPixels;
property Width: Integer read FWidth write SetWidth default 50; property Width: Integer read FWidth write SetWidth stored IsStoredWidth;
property OnDestroy: TNotifyEvent read FOnDestroy write FOnDestroy; property OnDestroy: TNotifyEvent read FOnDestroy write FOnDestroy;
end; end;
@ -206,16 +208,25 @@ type
FHelperYears: Boolean; FHelperYears: Boolean;
FDragLine: Boolean; FDragLine: Boolean;
FLineVisible: Boolean; FLineVisible: Boolean;
FYearLineLength: Integer;
FMonthLineLength: Integer;
FDayLineLength: Integer;
FYearTextTop: Integer;
FMonthTextTop: Integer;
FDayTextTop: Integer;
FItemMargin: Integer;
//--FMouseDown: Boolean; //--FMouseDown: Boolean;
FNewHeight: Integer; FNewHeight: Integer;
FOldX: Integer; FOldX: Integer;
FOldHint: string; FOldHint: string;
FStyle: TJvTimeLineStyle; FStyle: TJvTimeLineStyle;
FScrollArrows: TJvScrollArrows; FScrollArrows: TJvScrollArrows;
FScrollEdgeOffset: Integer;
FTimeItems: TJvTimeItems; FTimeItems: TJvTimeItems;
FItemHeight: Integer; FItemHeight: Integer;
FTopLevel: Integer; FTopLevel: Integer;
FImages: TCustomImageList; FImages: TCustomImageList;
FImagesWidth: Integer;
FYearFont: TFont; FYearFont: TFont;
FSelectedItem: TJvTimeItem; FSelectedItem: TJvTimeItem;
//FYearList: TList; //FYearList: TList;
@ -246,6 +257,9 @@ type
FShowSelection: Boolean; FShowSelection: Boolean;
FOnItemMouseMove: TJvItemMouseMove; FOnItemMouseMove: TJvItemMouseMove;
FSupportsColor: TColor; FSupportsColor: TColor;
function IsStoredTopOffset: Boolean;
function IsStoredYearFont: Boolean;
function IsStoredYearWidth: Boolean;
procedure SetHelperYears(Value: Boolean); procedure SetHelperYears(Value: Boolean);
procedure SetFlat(Value: Boolean); procedure SetFlat(Value: Boolean);
procedure SetScrollArrows(Value: TJvScrollArrows); procedure SetScrollArrows(Value: TJvScrollArrows);
@ -255,6 +269,9 @@ type
procedure SetFirstDate(Value: TDate); procedure SetFirstDate(Value: TDate);
procedure SetTimeItems(Value: TJvTimeItems); procedure SetTimeItems(Value: TJvTimeItems);
procedure SetImages(Value: TCustomImageList); procedure SetImages(Value: TCustomImageList);
{$IF LCL_FullVersion >= 2000000}
procedure SetImagesWidth(Value: Integer);
{$IFEND}
procedure SetShowMonths(Value: Boolean); procedure SetShowMonths(Value: Boolean);
procedure SetShowDays(Value: Boolean); procedure SetShowDays(Value: Boolean);
procedure SetSelectedItem(Value: TJvTimeItem); procedure SetSelectedItem(Value: TJvTimeItem);
@ -364,14 +381,17 @@ type
property MultiSelect: Boolean read FMultiSelect write SetMultiSelect default False; property MultiSelect: Boolean read FMultiSelect write SetMultiSelect default False;
property Flat: Boolean read FFlat write SetFlat default False; property Flat: Boolean read FFlat write SetFlat default False;
// property Hint: TTranslateString read GetHint write SetHint; // property Hint: TTranslateString read GetHint write SetHint;
property YearFont: TFont read FYearFont write SetYearFont; property YearFont: TFont read FYearFont write SetYearFont stored IsStoredYearFont;
property YearWidth: TJvYearWidth read FYearWidth write SetYearWidth default 140; property YearWidth: TJvYearWidth read FYearWidth write SetYearWidth stored IsStoredYearWidth;
property TopOffset: Integer read FTopOffset write SetTopOffset default 21; property TopOffset: Integer read FTopOffset write SetTopOffset stored IsStoredTopOffset;
property ShowMonthNames: Boolean read FShowMonths write SetShowMonths; property ShowMonthNames: Boolean read FShowMonths write SetShowMonths;
property ShowSelection: Boolean read FShowSelection write SetShowSelection default False; property ShowSelection: Boolean read FShowSelection write SetShowSelection default False;
property ShowDays: Boolean read FShowDays write SetShowDays default False; property ShowDays: Boolean read FShowDays write SetShowDays default False;
property FirstVisibleDate: TDate read FFirstDate write SetFirstDate; property FirstVisibleDate: TDate read FFirstDate write SetFirstDate;
property Images: TCustomImageList read FImages write SetImages; property Images: TCustomImageList read FImages write SetImages;
{$IF LCL_FullVersion >= 2000000}
property ImagesWidth: Integer read FImagesWidth write SetImagesWidth default 0;
{$IFEND}
property Items: TJvTimeItems read FTimeItems write SetTimeItems; property Items: TJvTimeItems read FTimeItems write SetTimeItems;
property ItemHeight: Integer read FItemHeight write SetItemHeight default 0; property ItemHeight: Integer read FItemHeight write SetItemHeight default 0;
// property ItemAlign: TItemAlign read FItemAlign write SetItemAlign default tiCenter; // property ItemAlign: TItemAlign read FItemAlign write SetItemAlign default tiCenter;
@ -394,6 +414,20 @@ type
property OnItemMoved: TJvItemMovedEvent read FOnItemMoved write FOnItemMoved; property OnItemMoved: TJvItemMovedEvent read FOnItemMoved write FOnItemMoved;
property OnItemMouseMove: TJvItemMouseMove read FOnItemMouseMove write FOnItemMouseMove; property OnItemMouseMove: TJvItemMouseMove read FOnItemMouseMove write FOnItemMouseMove;
property OnItemMoving: TJvItemMovingEvent read FOnItemMoving write FOnItemMoving; property OnItemMoving: TJvItemMovingEvent read FOnItemMoving write FOnItemMoving;
{ LCL scaling }
{$IF LCL_FullVersion >= 1080000}
protected
procedure DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy;
const AXProportion, AYProportion: Double); override;
public
procedure ScaleFontsPPI({$IF LCL_FullVersion >= 1080100}const AToPPI: Integer;{$IFEND}
const AProportion: Double); override;
{$IF LCL_FullVersion >= 2010000}
procedure FixDesignFontsPPI(const ADesignTimePPI: Integer); override;
{$IFEND}
{$IFEND}
public public
constructor Create(AOwner: TComponent); override; constructor Create(AOwner: TComponent); override;
destructor Destroy; override; destructor Destroy; override;
@ -414,6 +448,7 @@ type
procedure EndUpdate; virtual; procedure EndUpdate; virtual;
procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override; procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
procedure BeginDrag(Immediate: Boolean; Threshold: Integer = -1); procedure BeginDrag(Immediate: Boolean; Threshold: Integer = -1);
property ScrollEdgeOffset: Integer read FScrollEdgeOffset;
end; end;
TJvTimeLine = class(TJvCustomTimeLine) TJvTimeLine = class(TJvCustomTimeLine)
@ -440,6 +475,9 @@ type
property Hint; property Hint;
property HorzSupports; property HorzSupports;
property Images; property Images;
{$IF LCL_FullVersion >= 2000000}
property ImagesWidth;
{$IFEND}
// property ItemAlign; // property ItemAlign;
property ItemHeight; property ItemHeight;
property Items; property Items;
@ -502,15 +540,18 @@ uses
JvJCLUtils, JvJVCLUtils; JvJCLUtils, JvJVCLUtils;
const const
FDayLineLength = 4; DEFAULT_ITEM_MARGIN = 2;
FDayTextTop = 5; DEFAULT_ITEM_WIDTH = 50;
FMonthLineLength = 10; DEFAULT_DAY_LINELENGTH = 4;
FMonthTextTop = 24; DEFAULT_DAY_TEXT_TOP = 5;
FYearLineLength = 24; DEFAULT_MONTH_LINELENGTH = 10;
FYearTextTop = 32; DEFAULT_MONTH_TEXT_TOP = 24;
FScrollEdgeOffset = 8; DEFAULT_TOP_OFFSET = 21;
DEFAULT_YEAR_WIDTH = 140;
ITEM_MARGIN = 2; DEFAULT_YEAR_LINELENGTH = 24;
DEFAULT_YEAR_FONT_SIZE = 18;
DEFAULT_YEAR_TEXT_TOP = 32;
DEFAULT_SCROLL_EDGE_OFFSET = 8;
var var
FInitRepeatPause: Cardinal = 140; FInitRepeatPause: Cardinal = 140;
@ -563,7 +604,7 @@ begin
FSelected := False; FSelected := False;
FImageIndex := ACollection.Count - 1; FImageIndex := ACollection.Count - 1;
FLevel := FImageIndex; FLevel := FImageIndex;
FWidth := 50; FWidth := DEFAULT_ITEM_WIDTH; // will be scaled by TimeLine
FStyle := asPixels; FStyle := asPixels;
FImageOffset := 0; FImageOffset := 0;
Update; Update;
@ -702,6 +743,12 @@ begin
end; end;
end; end;
function TJvTimeItem.IsStoredWidth: Boolean;
begin
Result := (WidthAs = asDays) or
(FWidth <> FParent.FTimeLine.Scale96ToFont(DEFAULT_ITEM_WIDTH));
end;
procedure TJvTimeItem.SetWidth(Value: Integer); procedure TJvTimeItem.SetWidth(Value: Integer);
begin begin
if FWidth <> Value then if FWidth <> Value then
@ -766,6 +813,8 @@ end;
function TJvTimeItems.Add: TJvTimeItem; function TJvTimeItems.Add: TJvTimeItem;
begin begin
Result := TJvTimeItem(inherited Add); Result := TJvTimeItem(inherited Add);
if Result.WidthAs = asPixels then
Result.Width := FTimeLine.Scale96ToFont(Result.Width);
Update(Result); Update(Result);
end; end;
@ -882,31 +931,43 @@ begin
case FDirection of case FDirection of
scrollLeft: scrollLeft:
begin begin
SetBounds(FScrollEdgeOffset, TimeLine.Height - FScrollEdgeOffset - SetBounds(
TimeLine.FScrollEdgeOffset,
TimeLine.Height - TimeLine.ScrollEdgeOffset -
TimeLine.FScrollHeight, TimeLine.FScrollHeight,
TimeLine.FScrollWidth, TimeLine.FScrollHeight); TimeLine.FScrollWidth,
TimeLine.FScrollHeight
);
Anchors := [akLeft, akBottom]; Anchors := [akLeft, akBottom];
end; end;
scrollRight: scrollRight:
begin begin
SetBounds(TimeLine.Width - FScrollEdgeOffset - TimeLine.FScrollWidth * 2, SetBounds(
TimeLine.Height - FScrollEdgeOffset - TimeLine.FScrollHeight, TimeLine.Width - TimeLine.ScrollEdgeOffset - TimeLine.FScrollWidth * 2,
TimeLine.FScrollWidth, TimeLine.FScrollHeight); TimeLine.Height - TimeLine.ScrollEdgeOffset - TimeLine.FScrollHeight,
TimeLine.FScrollWidth,
TimeLine.FScrollHeight
);
Anchors := [akRight, akBottom]; Anchors := [akRight, akBottom];
end; end;
scrollUp: scrollUp:
begin begin
Anchors := []; Anchors := [];
SetBounds(TimeLine.Width - FScrollEdgeOffset - TimeLine.FScrollWidth, SetBounds(
TimeLine.FItemOffset + FScrollEdgeOffset, TimeLine.Width - TimeLine.ScrollEdgeOffset - TimeLine.FScrollWidth,
TimeLine.FScrollWidth, TimeLine.FScrollHeight); TimeLine.FItemOffset + TimeLine.ScrollEdgeOffset,
TimeLine.FScrollWidth,
TimeLine.FScrollHeight);
Anchors := [akRight, akTop]; Anchors := [akRight, akTop];
end; end;
scrollDown: scrollDown:
begin begin
SetBounds(TimeLine.Width - FScrollEdgeOffset - TimeLine.FScrollWidth, SetBounds(
TimeLine.Height - FScrollEdgeOffset - TimeLine.FScrollHeight * 2, TimeLine.Width - TimeLine.ScrollEdgeOffset - TimeLine.FScrollWidth,
TimeLine.FScrollWidth, TimeLine.FScrollHeight); TimeLine.Height - TimeLine.ScrollEdgeOffset - TimeLine.FScrollHeight * 2,
TimeLine.FScrollWidth,
TimeLine.FScrollHeight
);
Anchors := [akRight, akBottom]; Anchors := [akRight, akBottom];
end; end;
end; end;
@ -1097,7 +1158,7 @@ begin
// FYearList := TList.Create; // FYearList := TList.Create;
FScrollArrows := [scrollLeft..scrollDown]; FScrollArrows := [scrollLeft..scrollDown];
FSupportLines := False; FSupportLines := False;
FTopOffset := 21; FTopOffset := Scale96ToFont(DEFAULT_TOP_OFFSET);
FShowDays := False; FShowDays := False;
FItemHeight := 0; FItemHeight := 0;
FTopLevel := 0; FTopLevel := 0;
@ -1105,18 +1166,26 @@ begin
FShowItemHint := False; FShowItemHint := False;
FShowHiddenItemHints := True; FShowHiddenItemHints := True;
FFlat := False; FFlat := False;
FYearWidth := 140; FYearWidth := Scale96ToFont(DEFAULT_YEAR_WIDTH);
FMonthWidth := 12; FYearTextTop := Scale96ToFont(DEFAULT_YEAR_TEXT_TOP);
FMonthTextTop := Scale96ToFont(DEFAULT_MONTH_TEXT_TOP);
FDayTextTop := Scale96ToFont(DEFAULT_DAY_TEXT_TOP);
FMonthWidth := FYearWidth / 12;
FMultiSelect := False; FMultiSelect := False;
FDragLine := True; FDragLine := True;
FTimeItems := TJvTimeItems.Create(Self); FTimeItems := TJvTimeItems.Create(Self);
FImageChangeLink := TChangeLink.Create; FImageChangeLink := TChangeLink.Create;
FImageChangeLink.OnChange := @ImagesChanged; FImageChangeLink.OnChange := @ImagesChanged;
FYearFont := TFont.Create; FYearFont := TFont.Create;
FYearFont.Size := 18; FYearFont.Size := DEFAULT_YEAR_FONT_SIZE; // is scaled automatically
FYearFont.OnChange := @DoYearFontChange; FYearFont.OnChange := @DoYearFontChange;
FYearLineLength := Scale96ToFont(DEFAULT_YEAR_LINELENGTH);
FMonthLineLength := Scale96ToFont(DEFAULT_MONTH_LINELENGTH);
FDayLineLength := Scale96ToFont(DEFAULT_DAY_LINELENGTH);
FItemMargin := Scale96ToFont(DEFAULT_ITEM_MARGIN);
FNewHeight := 0; FNewHeight := 0;
FAutoSize := False; FAutoSize := False;
FScrollEdgeOffset := Scale96ToFont(DEFAULT_SCROLL_EDGE_OFFSET);
FScrollWidth := GetSystemMetrics(SM_CXHSCROLL); FScrollWidth := GetSystemMetrics(SM_CXHSCROLL);
FScrollHeight := GetSystemMetrics(SM_CXVSCROLL); FScrollHeight := GetSystemMetrics(SM_CXVSCROLL);
UpdateOffset; UpdateOffset;
@ -1140,6 +1209,60 @@ begin
inherited Destroy; inherited Destroy;
end; end;
{$IF LCL_FullVersion >= 1080000}
procedure TJvCustomTimeLine.DoAutoAdjustLayout(
const AMode: TLayoutAdjustmentPolicy;
const AXProportion, AYProportion: Double);
var
i: Integer;
item: TJvTimeItem;
begin
inherited;
if AMode in [lapAutoAdjustWithoutHorizontalScrolling, lapAutoAdjustForDPI] then
begin
if FItemHeight <> 0 then
FItemHeight := round(FItemHeight * AYProportion);
if IsStoredTopOffset then
FTopOffset := round(FTopOffset * AYProportion);
if IsStoredYearWidth then
FYearWidth := round(FYearWidth * AYProportion);
for i := 0 to FTimeItems.Count - 1 do
begin
item := TJvTimeItem(FTimeItems[i]);
if item.IsStoredWidth and (item.WidthAs = asPixels) then
item.Width := round(item.Width * AXProportion);
end;
// geometries, not stored
FYearLineLength := round(DEFAULT_YEAR_LINELENGTH * AYProportion);
FMonthLineLength := round(DEFAULT_MONTH_LINELENGTH * AYProportion);
FDayLineLength := round(DEFAULT_DAY_LINELENGTH * AYProportion);
FYearTextTop := round(DEFAULT_YEAR_TEXT_TOP * AYProportion);
FMonthTextTop := round(DEFAULT_MONTH_TEXT_TOP * AYProportion);
FDayTextTop := round(DEFAULT_DAY_TEXT_TOP * AYProportion);
FScrollEdgeOffset := round(DEFAULT_SCROLL_EDGE_OFFSET * AXProportion);
FItemMargin := round(DEFAULT_ITEM_MARGIN * AXProportion);
end;
end;
{$IF LCL_FullVersion >= 2010000}
procedure TJvCustomTimeLine.FixDesignFontsPPI(const ADesignTimePPI: Integer);
begin
inherited;
DoFixDesignFontPPI(FYearFont, ADesignTimePPI);
end;
{$IFEND}
procedure TJvCustomTimeLine.ScaleFontsPPI(
{$IF LCL_FullVersion >= 1080100}const AToPPI: Integer;{$IFEND}
const AProportion: Double);
begin
inherited;
DoScaleFontPPI(FYearFont, AToPPI, AProportion);
end;
{$IFEND}
procedure TJvCustomTimeLine.DoYearFontChange(Sender: TObject); procedure TJvCustomTimeLine.DoYearFontChange(Sender: TObject);
begin begin
Invalidate; Invalidate;
@ -1166,7 +1289,7 @@ begin
FArrows[I].UpdatePlacement; FArrows[I].UpdatePlacement;
end; end;
if FItemHeight = 0 then if FItemHeight = 0 then
FItemHeight := Canvas.TextHeight('Tg') + ITEM_MARGIN; FItemHeight := Canvas.TextHeight('Tg') + FItemMargin;
end; end;
procedure TJvCustomTimeLine.UpdateOffset; procedure TJvCustomTimeLine.UpdateOffset;
@ -1214,7 +1337,7 @@ begin
FArrows[scrollUp].Visible := FArrows[scrollUp].Visible :=
(scrollUp in ScrollArrows) and (FTopLevel > 0); (scrollUp in ScrollArrows) and (FTopLevel > 0);
FArrows[scrollDown].Visible := FArrows[scrollDown].Visible :=
(scrollDown in ScrollArrows) and (FNewHeight >= Height) and not AutoSize ; (scrollDown in ScrollArrows) and (FNewHeight >= Height) and not AutoSize;
end; end;
{ {
procedure TJvCustomTimeLine.SetBorderStyle(Value: TBorderStyle); procedure TJvCustomTimeLine.SetBorderStyle(Value: TBorderStyle);
@ -1302,6 +1425,15 @@ begin
Invalidate; Invalidate;
end; end;
{$IF LCL_FullVersion >= 2000000}
procedure TJvCustomTimeLine.SetImagesWidth(Value: Integer);
begin
if FImagesWidth = Value then Exit;
FImagesWidth := Value;
Invalidate;
end;
{$IFEND}
procedure TJvCustomTimeLine.SetSelectedItem(Value: TJvTimeItem); procedure TJvCustomTimeLine.SetSelectedItem(Value: TJvTimeItem);
begin begin
if FSelectedItem <> Value then if FSelectedItem <> Value then
@ -2000,6 +2132,11 @@ end;
procedure TJvCustomTimeLine.DrawItem(Item: TJvTimeItem; ACanvas: TCanvas; var R: TRect); procedure TJvCustomTimeLine.DrawItem(Item: TJvTimeItem; ACanvas: TCanvas; var R: TRect);
var var
ts: TTextStyle; ts: TTextStyle;
{$IF LCL_FullVersion >= 2000000}
imgList: TScaledImageListResolution;
{$ELSE}
imgList: TCustomImageList;
{$IFEND}
begin begin
if Assigned(FOnDrawItem) and (FStyle in [tlOwnerDrawVariable, tlOwnerDrawFixed]) then if Assigned(FOnDrawItem) and (FStyle in [tlOwnerDrawVariable, tlOwnerDrawFixed]) then
FOnDrawItem(Self, ACanvas, Item, R) FOnDrawItem(Self, ACanvas, Item, R)
@ -2010,16 +2147,23 @@ begin
if Assigned(FImages) and (Item.ImageIndex > -1) then if Assigned(FImages) and (Item.ImageIndex > -1) then
begin begin
{$IF LCL_FullVersion >= 2000000}
imgList := FImages.ResolutionForPPI[FImagesWidth, Font.PixelsPerInch, GetCanvasScaleFactor];
{$ELSE}
imgList := FImages;
{$IFEND}
if FUpdate = 0 then if FUpdate = 0 then
begin begin
ACanvas.Brush.Color := Color; ACanvas.Brush.Color := Color;
ACanvas.FillRect(Rect(R.Left + Item.ImageOffset, ACanvas.FillRect(Rect(
R.Top, R.Left + Item.ImageOffset + FImages.Width, R.Left + Item.ImageOffset,
R.Top + FImages.Height)); R.Top, R.Left + Item.ImageOffset + imgList.Width,
with FImages do R.Top + imgList.Height
Draw(ACanvas, R.Left + Item.ImageOffset, R.Top, Item.ImageIndex, Item.Enabled); ));
with imgList do
Draw(ACanvas, R.Left + Item.ImageOffset, R.Top, Item.ImageIndex, Item.Enabled);
end; end;
Inc(R.Top, FImages.Height + 4); { adjust top to make room for text drawing } Inc(R.Top, imgList.Height + 4); { adjust top to make room for text drawing }
end; end;
if FUpdate = 0 then if FUpdate = 0 then
@ -2624,6 +2768,21 @@ begin
Result := False; Result := False;
end; end;
function TJvCustomTimeLine.IsStoredTopOffset: Boolean;
begin
Result := FTopOffset <> Scale96ToFont(DEFAULT_TOP_OFFSET);
end;
function TJvCustomTimeLine.IsStoredYearFont: Boolean;
begin
Result := true;
end;
function TJvCustomTimeLine.IsStoredYearWidth: Boolean;
begin
Result := FYearWidth <> Scale96ToFont(DEFAULT_YEAR_WIDTH);
end;
procedure TJvCustomTimeLine.SetHorzSupport(const Value: Boolean); procedure TJvCustomTimeLine.SetHorzSupport(const Value: Boolean);
begin begin
if FHorzSupport <> Value then if FHorzSupport <> Value then