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