mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-02 18:20:30 +02:00
TAChart: Add TChartSeriesLegend.Order property
git-svn-id: trunk@31395 -
This commit is contained in:
parent
1584ede71a
commit
e6b1840fc4
@ -60,8 +60,9 @@ object Form1: TForm1
|
|||||||
Source = ListChartSource2
|
Source = ListChartSource2
|
||||||
end
|
end
|
||||||
object Chart1FuncSeries1: TFuncSeries
|
object Chart1FuncSeries1: TFuncSeries
|
||||||
Legend.OnDraw = Chart1FuncSeries1DrawLegend
|
Legend.Order = 0
|
||||||
Legend.UserItemsCount = 2
|
Legend.UserItemsCount = 2
|
||||||
|
Legend.OnDraw = Chart1FuncSeries1DrawLegend
|
||||||
Extent.XMax = 5
|
Extent.XMax = 5
|
||||||
Extent.UseXMin = True
|
Extent.UseXMin = True
|
||||||
Extent.UseXMax = True
|
Extent.UseXMax = True
|
||||||
|
@ -311,13 +311,18 @@ end;
|
|||||||
|
|
||||||
procedure TCustomChartSeries.GetLegendItemsBasic(AItems: TChartLegendItems);
|
procedure TCustomChartSeries.GetLegendItemsBasic(AItems: TChartLegendItems);
|
||||||
var
|
var
|
||||||
i: Integer;
|
i, oldCount: Integer;
|
||||||
begin
|
begin
|
||||||
|
oldCount := AItems.Count;
|
||||||
if Assigned(Legend.OnDraw) then
|
if Assigned(Legend.OnDraw) then
|
||||||
for i := 0 to Legend.UserItemsCount - 1 do
|
for i := 0 to Legend.UserItemsCount - 1 do
|
||||||
AItems.Add(TLegendItemUserDrawn.Create(i, Legend.OnDraw, Title))
|
AItems.Add(TLegendItemUserDrawn.Create(i, Legend.OnDraw, Title))
|
||||||
else
|
else
|
||||||
GetLegendItems(AItems);
|
GetLegendItems(AItems);
|
||||||
|
for i := oldCount to AItems.Count - 1 do
|
||||||
|
with AItems[i] do
|
||||||
|
if Order = LEGEND_ITEM_ORDER_AS_ADDED then
|
||||||
|
Order := Legend.Order;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCustomChartSeries.GetNearestPoint(
|
function TCustomChartSeries.GetNearestPoint(
|
||||||
|
@ -927,6 +927,7 @@ end;
|
|||||||
function TChart.GetLegendItems(AIncludeHidden: Boolean): TChartLegendItems;
|
function TChart.GetLegendItems(AIncludeHidden: Boolean): TChartLegendItems;
|
||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
|
j: Integer = MaxInt;
|
||||||
begin
|
begin
|
||||||
Result := TChartLegendItems.Create;
|
Result := TChartLegendItems.Create;
|
||||||
try
|
try
|
||||||
@ -934,6 +935,12 @@ begin
|
|||||||
with Series[i] do
|
with Series[i] do
|
||||||
if AIncludeHidden or (Active and GetShowInLegend) then
|
if AIncludeHidden or (Active and GetShowInLegend) then
|
||||||
GetLegendItemsBasic(Result);
|
GetLegendItemsBasic(Result);
|
||||||
|
for i := Result.Count - 1 downto 0 do
|
||||||
|
if Result[i].Order = LEGEND_ITEM_ORDER_AS_ADDED then begin
|
||||||
|
Result[i].Order := j;
|
||||||
|
j -= 1;
|
||||||
|
end;
|
||||||
|
Result.Sort(@LegendItemCompare);
|
||||||
except
|
except
|
||||||
FreeAndNil(Result);
|
FreeAndNil(Result);
|
||||||
raise;
|
raise;
|
||||||
|
@ -27,6 +27,7 @@ const
|
|||||||
DEF_LEGEND_SPACING = 4;
|
DEF_LEGEND_SPACING = 4;
|
||||||
DEF_LEGEND_MARGIN = 4;
|
DEF_LEGEND_MARGIN = 4;
|
||||||
DEF_LEGEND_SYMBOL_WIDTH = 20;
|
DEF_LEGEND_SYMBOL_WIDTH = 20;
|
||||||
|
LEGEND_ITEM_ORDER_AS_ADDED = -1;
|
||||||
|
|
||||||
type
|
type
|
||||||
{ TLegendItem }
|
{ TLegendItem }
|
||||||
@ -34,12 +35,14 @@ type
|
|||||||
TLegendItem = class
|
TLegendItem = class
|
||||||
private
|
private
|
||||||
FColor: TColor;
|
FColor: TColor;
|
||||||
|
FOrder: Integer;
|
||||||
FText: String;
|
FText: String;
|
||||||
public
|
public
|
||||||
constructor Create(const AText: String; AColor: TColor = clTAColor);
|
constructor Create(const AText: String; AColor: TColor = clTAColor);
|
||||||
procedure Draw(ADrawer: IChartDrawer; const ARect: TRect); virtual;
|
procedure Draw(ADrawer: IChartDrawer; const ARect: TRect); virtual;
|
||||||
public
|
public
|
||||||
property Color: TColor read FColor write FColor;
|
property Color: TColor read FColor write FColor;
|
||||||
|
property Order: Integer read FOrder write FOrder;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TLegendItemDrawEvent = procedure (
|
TLegendItemDrawEvent = procedure (
|
||||||
@ -181,9 +184,11 @@ type
|
|||||||
private
|
private
|
||||||
FMultiplicity: TLegendMultiplicity;
|
FMultiplicity: TLegendMultiplicity;
|
||||||
FOnDraw: TLegendItemDrawEvent;
|
FOnDraw: TLegendItemDrawEvent;
|
||||||
|
FOrder: Integer;
|
||||||
FUserItemsCount: Integer;
|
FUserItemsCount: Integer;
|
||||||
procedure SetMultiplicity(AValue: TLegendMultiplicity);
|
procedure SetMultiplicity(AValue: TLegendMultiplicity);
|
||||||
procedure SetOnDraw(AValue: TLegendItemDrawEvent);
|
procedure SetOnDraw(AValue: TLegendItemDrawEvent);
|
||||||
|
procedure SetOrder(AValue: Integer);
|
||||||
procedure SetUserItemsCount(AValue: Integer);
|
procedure SetUserItemsCount(AValue: Integer);
|
||||||
public
|
public
|
||||||
constructor Create(AOwner: TCustomChart);
|
constructor Create(AOwner: TCustomChart);
|
||||||
@ -192,12 +197,18 @@ type
|
|||||||
published
|
published
|
||||||
property Multiplicity: TLegendMultiplicity
|
property Multiplicity: TLegendMultiplicity
|
||||||
read FMultiplicity write SetMultiplicity default lmSingle;
|
read FMultiplicity write SetMultiplicity default lmSingle;
|
||||||
property OnDraw: TLegendItemDrawEvent read FOnDraw write SetOnDraw;
|
property Order: Integer
|
||||||
|
read FOrder write SetOrder default LEGEND_ITEM_ORDER_AS_ADDED;
|
||||||
property UserItemsCount: Integer
|
property UserItemsCount: Integer
|
||||||
read FUserItemsCount write SetUserItemsCount default 1;
|
read FUserItemsCount write SetUserItemsCount default 1;
|
||||||
property Visible default true;
|
property Visible default true;
|
||||||
|
|
||||||
|
published
|
||||||
|
property OnDraw: TLegendItemDrawEvent read FOnDraw write SetOnDraw;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function LegendItemCompare(AItem1, AItem2: Pointer): Integer;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
uses
|
uses
|
||||||
@ -206,6 +217,11 @@ uses
|
|||||||
const
|
const
|
||||||
SYMBOL_TEXT_SPACING = 4;
|
SYMBOL_TEXT_SPACING = 4;
|
||||||
|
|
||||||
|
function LegendItemCompare(AItem1, AItem2: Pointer): Integer;
|
||||||
|
begin
|
||||||
|
Result := Sign(TLegendItem(AItem1).Order - TLegendItem(AItem2).Order);
|
||||||
|
end;
|
||||||
|
|
||||||
{ TChartLegendItems }
|
{ TChartLegendItems }
|
||||||
|
|
||||||
function TChartLegendItems.GetItem(AIndex: Integer): TLegendItem;
|
function TChartLegendItems.GetItem(AIndex: Integer): TLegendItem;
|
||||||
@ -223,6 +239,7 @@ end;
|
|||||||
constructor TLegendItem.Create(const AText: String; AColor: TColor);
|
constructor TLegendItem.Create(const AText: String; AColor: TColor);
|
||||||
begin
|
begin
|
||||||
FColor := AColor;
|
FColor := AColor;
|
||||||
|
FOrder := LEGEND_ITEM_ORDER_AS_ADDED;
|
||||||
FText := AText;
|
FText := AText;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -548,6 +565,7 @@ end;
|
|||||||
constructor TChartSeriesLegend.Create(AOwner: TCustomChart);
|
constructor TChartSeriesLegend.Create(AOwner: TCustomChart);
|
||||||
begin
|
begin
|
||||||
inherited Create(AOwner);
|
inherited Create(AOwner);
|
||||||
|
FOrder := LEGEND_ITEM_ORDER_AS_ADDED;
|
||||||
FVisible := true;
|
FVisible := true;
|
||||||
FUserItemsCount := 1;
|
FUserItemsCount := 1;
|
||||||
end;
|
end;
|
||||||
@ -566,6 +584,13 @@ begin
|
|||||||
StyleChanged(Self);
|
StyleChanged(Self);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TChartSeriesLegend.SetOrder(AValue: Integer);
|
||||||
|
begin
|
||||||
|
if FOrder = AValue then exit;
|
||||||
|
FOrder := AValue;
|
||||||
|
StyleChanged(Self);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TChartSeriesLegend.SetUserItemsCount(AValue: Integer);
|
procedure TChartSeriesLegend.SetUserItemsCount(AValue: Integer);
|
||||||
begin
|
begin
|
||||||
if FUserItemsCount = AValue then exit;
|
if FUserItemsCount = AValue then exit;
|
||||||
|
Loading…
Reference in New Issue
Block a user