1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
{
*****************************************************************************
* 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
CocoaPrivate, CocoaWSCommon, CocoaTextEdits;
type
{ TCocoaWSCustomFloatSpinEdit }
TCocoaWSCustomFloatSpinEdit = class(TWSCustomFloatSpinEdit)
published
class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; 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);
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): TLCLIntfHandle;
var
lSpin: TCocoaSpinEdit;
begin
lSpin := TCocoaSpinEdit.alloc.lclInitWithCreateParams(AParams);
Result := TLCLIntfHandle(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;
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.
|