mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-24 02:59:28 +02:00
320 lines
9.5 KiB
PHP
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
|