lazarus/lcl/include/progressbar.inc

320 lines
9.5 KiB
PHP

{%MainUnit ../comctrls.pp}
{******************************************************************************
TCustomProgressBar
******************************************************************************
*****************************************************************************
This file is part of the Lazarus Component Library (LCL)
See the file COPYING.modifiedLGPL.txt, included in this distribution,
for details about the license.
*****************************************************************************
current design flaws:
- I decided to support some gtk-specific properties in this class. This
won't break Delphi compatibility but for 100% Delphi compatibility
a better approach would be to derive another class.
BTW: When porting to another widget library you can safely ignore
FBarShowText
FBarTextFormat
- FBarTextFormat is a fixed string by now, hard-coded in the gtk-interface
- lot's of properties are missing
- I spend no thought on the usage of type integer for the range for the bar,
maybe this can cause trouble some day (and already will when FMin < 0!)
}
{------------------------------------------------------------------------------
Method: TCustomProgressBar.Create
Params: AOwner: the owner of the class
Returns: Nothing
Constructor for the progressbar.
------------------------------------------------------------------------------}
constructor TCustomProgressBar.Create (AOwner : TComponent);
begin
inherited Create(AOwner);
fCompStyle := csProgressBar;
FPosition := 0;
FStep := 10;
FMin := 0;
FMax := 100;
FSmooth := False;
FOrientation := pbHorizontal;
FBarShowText := False;
FBarTextFormat := '%v from [%l-%u] (=%p%%)';
FStyle := pbstNormal;
with GetControlClassDefaultSize do
SetInitialBounds(0, 0, CX, CY);
end;
{------------------------------------------------------------------------------
Method: TCustomProgressBar.InitializeWnd
Params: none
Returns: Nothing
Set all properties after visual component has been created. Will be called
from TWinControl.
------------------------------------------------------------------------------}
procedure TCustomProgressBar.InitializeWnd;
begin
inherited InitializeWnd;
ApplyChanges;
end;
procedure TCustomProgressBar.Loaded;
begin
inherited Loaded;
ApplyChanges;
end;
class function TCustomProgressBar.GetControlClassDefaultSize: TSize;
begin
Result.CX := 100;
Result.CY := 20;
end;
{------------------------------------------------------------------------------
Method: TCustomProgressBar.GetMin
Params: Nothing
Returns: actual minimum value of the progressbar
Retrieve the actual minimum value of the progressbar.
------------------------------------------------------------------------------}
function TCustomProgressBar.GetMin: Integer;
begin
Result := FMin;
end;
{------------------------------------------------------------------------------
Method: TCustomProgressBar.GetMax
Params: Nothing
Returns: actual maximum value of the progressbar
Retrieve the actual maximum value of the progressbar.
------------------------------------------------------------------------------}
function TCustomProgressBar.GetMax: Integer;
begin
Result := FMax;
end;
{------------------------------------------------------------------------------
Method: TCustomProgressBar.GetPosition
Params: Nothing
Returns: actual position of the progressbar
Retrieve the position of the progressbar.
------------------------------------------------------------------------------}
function TCustomProgressBar.GetPosition: Integer;
begin
Result := FPosition;
end;
{------------------------------------------------------------------------------
Method: TCustomProgressBar.SetParams
Params: Min & Max for the progressbar
Returns: Nothing
Set new minimum and maximum values for the progressbar.
------------------------------------------------------------------------------}
procedure TCustomProgressBar.SetParams(AMin, AMax: Integer);
begin
SetMax(AMax);
SetMin(AMin);
end;
{------------------------------------------------------------------------------
Method: TCustomProgressBar.SetMin
Params: Minimum value for the progressbar
Returns: Nothing
Set new minimum value for the progressbar.
------------------------------------------------------------------------------}
procedure TCustomProgressBar.SetMin(Value: Integer);
begin
if FMin <> Value then
begin
FMin := Value;
ApplyChanges;
end;
end;
{------------------------------------------------------------------------------
Method: TCustomProgressBar.SetMax
Params: Maximum value for the progressbar
Returns: Nothing
Set new maximum value for the progressbar.
------------------------------------------------------------------------------}
procedure TCustomProgressBar.SetMax(Value: Integer);
begin
if FMax <> Value then
begin
FMax := Value;
ApplyChanges;
end;
end;
{------------------------------------------------------------------------------
Method: TCustomProgressBar.SetPosition
Params: New acutal position for the progressbar
Returns: Nothing
Set new new acutal position for the progressbar
------------------------------------------------------------------------------}
procedure TCustomProgressBar.SetPosition(Value: Integer);
begin
if FPosition <> Value then
begin
FPosition := Value;
ApplyChanges;
end;
end;
{------------------------------------------------------------------------------
Method: TCustomProgressBar.SetPosition
Params: New stepping value for the progressbar
Returns: Nothing
Set new stepping value for the progressbar
------------------------------------------------------------------------------}
procedure TCustomProgressBar.SetStep(Value: Integer);
begin
if FStep <> Value then
begin
FStep := Value;
ApplyChanges;
end;
end;
{------------------------------------------------------------------------------
Method: TCustomProgressBar.SetPosition
Params: New orientation of the progressbar
Returns: Nothing
Set new orientation.
------------------------------------------------------------------------------}
procedure TCustomProgressBar.SetOrientation (Value : TProgressBarOrientation);
begin
if FOrientation <> Value then
begin
Forientation := Value;
ApplyChanges;
end;
end;
procedure TCustomProgressBar.SetStyle(const AValue: TProgressBarStyle);
begin
if FStyle <> AValue then
begin
FStyle := AValue;
if HandleAllocated then
TWSProgressBarClass(WidgetSetClass).SetStyle(Self, AValue);
end;
end;
class procedure TCustomProgressBar.WSRegisterClass;
begin
inherited WSRegisterClass;
RegisterCustomProgressBar;
end;
{------------------------------------------------------------------------------
Method: TCustomProgressBar.StepIt
Params: Nothing
Returns: Nothing
Let the progressbar proceed from actual position to actualposition + Step
------------------------------------------------------------------------------}
procedure TCustomProgressBar.StepIt;
begin
inc(FPosition, FStep);
if FPosition > FMax then FPosition := FMax;
if FPosition < FMin then FPosition := FMin;
if HandleAllocated then
TWSProgressBarClass(WidgetSetClass).SetPosition(Self, FPosition);
end;
{------------------------------------------------------------------------------
Method: TCustomProgressBar.StepIt
Params: Delta : the value to add to actual position
Returns: Nothing
Let the progressbar proceed from actual position to actualposition + Delta
Implementation detail:
StepBy is realized by faking the current position to get a solution
which is independant from the widget set in use.
------------------------------------------------------------------------------}
procedure TCustomProgressBar.StepBy(Delta: Integer);
begin
FPosition := FPosition + Delta - FStep;
StepIt;
end;
{------------------------------------------------------------------------------
Method: TCustomProgressBar.ApplyChanges
Params: Nothing
Returns: Nothing
Apply the current parameters to the object
------------------------------------------------------------------------------}
procedure TCustomProgressBar.ApplyChanges;
begin
if not (csLoading in ComponentState) then
begin
if FMin > Max then FMin := Max;
if Position < Min then FPosition := Min;
if Position > Max then FPosition := Max;
if HandleAllocated then
TWSProgressBarClass(WidgetSetClass).ApplyChanges(Self);
end;
end;
{------------------------------------------------------------------------------
Method: TCustomProgressBar.SetSmooth
Params: Value : Smoothing on or off
Returns: Nothing
Set the style of the progressbar
------------------------------------------------------------------------------}
procedure TCustomProgressBar.SetSmooth (Value : boolean);
begin
if FSmooth <> value then
begin
FSmooth := value;
ApplyChanges;
end;
end;
{------------------------------------------------------------------------------
Method: TCustomProgressBar.SetBarShowText
Params: Value : ShowText on or off
Returns: Nothing
Some widget sets can put a label on the progressbar which shows the
current position
Implementation detail:
This functionality is not Delphi-compatible
------------------------------------------------------------------------------}
procedure TCustomProgressBar.SetBarShowText (Value : boolean);
begin
if FBarShowText <> Value then
begin
FBarShowText := Value;
ApplyChanges;
end;
end;
// included by comctrls.pp