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 132 133
|
{
*****************************************************************************
* QtWSSpin.pp *
* ----------- *
* *
* *
*****************************************************************************
*****************************************************************************
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 customdrawnwsspin;
{$mode objfpc}{$H+}
interface
{$I customdrawndefines.inc}
uses
// RTL
Classes,
// LCL
Spin, SysUtils, Controls, LCLType, LCLProc, LCLIntf, Forms,
customdrawncontrols,
// Widgetset
WSProc, WSSpin, WSLCLClasses, CustomDrawnWsControls, customdrawnproc,
customdrawnprivate;
type
{ TCDWSCustomFloatSpinEdit }
TCDWSCustomFloatSpinEdit = class(TWSCustomFloatSpinEdit)
public
class procedure InjectCDControl(const AWinControl: TWinControl; var ACDControlField: TCDControl);
published
class function CreateHandle(const AWinControl: TWinControl;
const AParams: TCreateParams): TLCLIntfHandle; override;
class procedure DestroyHandle(const AWinControl: TWinControl); override;
class procedure ShowHide(const AWinControl: TWinControl); override;
class procedure UpdateControl(const ACustomFloatSpinEdit: TCustomFloatSpinEdit); override;
class function GetValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): Double; override;
(*TODO: seperation into properties instead of bulk update
class procedure SetIncrement(const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewIncrement: Double); virtual;
class procedure SetMinValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewValue: Double); virtual;
class procedure SetMaxValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewValue: Double); virtual;
class procedure SetValueEmpty(const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewEmpty: boolean); virtual;
*)
end;
implementation
class procedure TCDWSCustomFloatSpinEdit.InjectCDControl(
const AWinControl: TWinControl; var ACDControlField: TCDControl);
begin
TCDIntfSpinEdit(ACDControlField).LCLControl := TCustomFloatSpinEdit(AWinControl);
ACDControlField.Caption := AWinControl.Caption;
ACDControlField.Parent := AWinControl;
ACDControlField.Align := alClient;
end;
{------------------------------------------------------------------------------
Method: TCDWSCustomFloatSpinEdit.CreateHandle
Params: None
Returns: Nothing
------------------------------------------------------------------------------}
class function TCDWSCustomFloatSpinEdit.CreateHandle(const AWinControl: TWinControl;
const AParams: TCreateParams): TLCLIntfHandle;
var
lCDWinControl: TCDWinControl;
begin
Result := TCDWSWinControl.CreateHandle(AWinControl, AParams);
lCDWinControl := TCDWinControl(Result);
lCDWinControl.CDControl := TCDIntfSpinEdit.Create(AWinControl);
end;
class procedure TCDWSCustomFloatSpinEdit.DestroyHandle(
const AWinControl: TWinControl);
var
lCDWinControl: TCDWinControl;
begin
lCDWinControl := TCDWinControl(AWinControl.Handle);
lCDWinControl.CDControl.Free;
lCDWinControl.Free;
end;
class procedure TCDWSCustomFloatSpinEdit.ShowHide(const AWinControl: TWinControl);
var
lCDWinControl: TCDWinControl;
begin
lCDWinControl := TCDWinControl(AWinControl.Handle);
TCDWSWinControl.ShowHide(AWinControl);
if not lCDWinControl.CDControlInjected then
begin
InjectCDControl(AWinControl, lCDWinControl.CDControl);
lCDWinControl.CDControlInjected := True;
end;
end;
class function TCDWSCustomFloatSpinEdit.GetValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): Double;
var
lCDWinControl: TCDWinControl;
begin
lCDWinControl := TCDWinControl(ACustomFloatSpinEdit.Handle);
Result := TCDIntfSpinEdit(lCDWinControl.CDControl).Value;
end;
class procedure TCDWSCustomFloatSpinEdit.UpdateControl(const ACustomFloatSpinEdit: TCustomFloatSpinEdit);
{var
CurrentSpinWidget: TQtAbstractSpinBox;}
begin
{ if not WSCheckHandleAllocated(ACustomFloatSpinEdit, 'UpdateControl') then
Exit;
CurrentSpinWidget := TQtAbstractSpinBox(ACustomFloatSpinEdit.Handle);
if ((ACustomFloatSpinEdit.DecimalPlaces > 0) and (CurrentSpinWidget is TQtSpinBox)) or
((ACustomFloatSpinEdit.DecimalPlaces = 0) and (CurrentSpinWidget is TQtFloatSpinBox)) then
RecreateWnd(ACustomFloatSpinEdit)
else
InternalUpdateControl(CurrentSpinWidget, ACustomFloatSpinEdit);}
end;
end.
|