mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-22 18:28:18 +02:00
133 lines
5.1 KiB
ObjectPascal
133 lines
5.1 KiB
ObjectPascal
{
|
|
*****************************************************************************
|
|
* CocoaWSSpin.pas *
|
|
* ----------- *
|
|
* *
|
|
* *
|
|
*****************************************************************************
|
|
|
|
*****************************************************************************
|
|
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.
|
|
*****************************************************************************
|
|
}
|
|
unit CocoaWSSpin;
|
|
|
|
{$mode objfpc}{$H+}
|
|
{$modeswitch objectivec1}
|
|
|
|
interface
|
|
|
|
uses
|
|
// rtl+lcl
|
|
Controls, Spin, LCLType,
|
|
// widgetset
|
|
WSSpin, WSLCLClasses,
|
|
// cocoa ws
|
|
CocoaAll, CocoaPrivate, CocoaWSCommon, CocoaTextEdits, Cocoa_Extra;
|
|
|
|
type
|
|
|
|
{ TCocoaWSCustomFloatSpinEdit }
|
|
|
|
TCocoaWSCustomFloatSpinEdit = class(TWSCustomFloatSpinEdit)
|
|
published
|
|
class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLHandle; override;
|
|
class procedure DestroyHandle(const AWinControl: TWinControl); override;
|
|
class function GetValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): Double; override;
|
|
class procedure UpdateControl(const ACustomFloatSpinEdit: TCustomFloatSpinEdit); override;
|
|
class procedure SetBounds(const AWinControl: TWinControl; const ALeft, ATop, AWidth, AHeight: Integer); override;
|
|
end;
|
|
|
|
implementation
|
|
|
|
procedure UpdateControlLCLToCocoa(src: TCustomFloatSpinEdit; dst: TCocoaSpinEdit);
|
|
begin
|
|
dst.UpdateControl(src.MinValue, src.MaxValue, src.Increment, src.Value, src.DecimalPlaces, src.MinValue < src.MaxValue);
|
|
end;
|
|
|
|
{ TCocoaWSCustomFloatSpinEdit }
|
|
|
|
{------------------------------------------------------------------------------
|
|
Method: TCocoaWSCustomFloatSpinEdit.CreateHandle
|
|
Params: AWinControl - LCL control
|
|
AParams - Creation parameters
|
|
Returns: Handle to the control in Carbon interface
|
|
|
|
Creates new spin edit in Carbon interface with the specified parameters
|
|
------------------------------------------------------------------------------}
|
|
class function TCocoaWSCustomFloatSpinEdit.CreateHandle(const AWinControl: TWinControl;
|
|
const AParams: TCreateParams): TLCLHandle;
|
|
var
|
|
lSpin: TCocoaSpinEdit;
|
|
begin
|
|
lSpin := TCocoaSpinEdit.alloc.lclInitWithCreateParams(AParams);
|
|
Result := TLCLHandle(lSpin);
|
|
if Result = 0 then Exit;
|
|
lSpin.decimalPlaces := -1;
|
|
lSpin.lclCreateSubcontrols(AParams);
|
|
lSpin.callback := TLCLCommonCallback.Create(lSpin, AWinControl);
|
|
if (lSpin.Stepper.isKindOfClass(TCocoaSpinEditStepper)) then
|
|
TCocoaSpinEditStepper(lSpin.Stepper).callback:=lSpin.callback;
|
|
UpdateControlFocusRing(lSpin, AWinControl);
|
|
end;
|
|
|
|
class procedure TCocoaWSCustomFloatSpinEdit.DestroyHandle(const AWinControl: TWinControl);
|
|
begin
|
|
if not AWinControl.HandleAllocated then Exit;
|
|
TCocoaSpinEdit(AWinControl.Handle).lclReleaseSubcontrols;
|
|
TCocoaWSWinControl.DestroyHandle(AWinControl);
|
|
end;
|
|
|
|
{------------------------------------------------------------------------------
|
|
Method: TCocoaWSCustomFloatSpinEdit.GetValue
|
|
Params: ACustomFloatSpinEdit - LCL custom float spin edit
|
|
Returns: The float spin edit value
|
|
------------------------------------------------------------------------------}
|
|
class function TCocoaWSCustomFloatSpinEdit.GetValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): Double;
|
|
var
|
|
lSpin: TCocoaSpinEdit;
|
|
begin
|
|
Result := 0;
|
|
if ACustomFloatSpinEdit = nil then Exit;
|
|
if not ACustomFloatSpinEdit.HandleAllocated then Exit;
|
|
lSpin := TCocoaSpinEdit(ACustomFloatSpinEdit.Handle);
|
|
|
|
Result := lSpin.Stepper.doubleValue();
|
|
end;
|
|
|
|
{------------------------------------------------------------------------------
|
|
Method: TCocoaWSCustomFloatSpinEdit.UpdateControl
|
|
Params: ACustomFloatSpinEdit - LCL custom float spin edit
|
|
|
|
Update the value, min, max and increment of custom float spin edit in Cocoa
|
|
interface
|
|
------------------------------------------------------------------------------}
|
|
class procedure TCocoaWSCustomFloatSpinEdit.UpdateControl(const ACustomFloatSpinEdit: TCustomFloatSpinEdit);
|
|
var
|
|
lSpin: TCocoaSpinEdit;
|
|
begin
|
|
if ACustomFloatSpinEdit = nil then Exit;
|
|
if not ACustomFloatSpinEdit.HandleAllocated then Exit;
|
|
lSpin := TCocoaSpinEdit(ACustomFloatSpinEdit.Handle);
|
|
UpdateControlLCLToCocoa(ACustomFloatSpinEdit, lSpin);
|
|
end;
|
|
|
|
class procedure TCocoaWSCustomFloatSpinEdit.SetBounds(
|
|
const AWinControl: TWinControl; const ALeft, ATop, AWidth, AHeight: Integer);
|
|
var
|
|
lSpin: TCocoaSpinEdit;
|
|
ACustomFloatSpinEdit: TCustomFloatSpinEdit absolute AWinControl;
|
|
begin
|
|
if ACustomFloatSpinEdit = nil then Exit;
|
|
if not ACustomFloatSpinEdit.HandleAllocated then Exit;
|
|
lSpin := TCocoaSpinEdit(ACustomFloatSpinEdit.Handle);
|
|
|
|
TCocoaWSWinControl.SetBounds(AWinControl, ALeft, ATop, AWidth, AHeight);
|
|
lSpin.PositionSubcontrols(ALeft, ATop, AWidth, AHeight);
|
|
end;
|
|
|
|
end.
|