mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-22 14:42:32 +02:00
LCL-CustomDrawn: Adds initial TScrollBar and SpinEdit implementations
git-svn-id: trunk@36022 -
This commit is contained in:
parent
86916fe2d8
commit
f7ab8832da
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -5640,6 +5640,7 @@ lcl/interfaces/customdrawn/customdrawnwsforms_cocoa.inc svneol=native#text/pasca
|
||||
lcl/interfaces/customdrawn/customdrawnwsforms_win.inc svneol=native#text/pascal
|
||||
lcl/interfaces/customdrawn/customdrawnwsforms_x11.inc svneol=native#text/pascal
|
||||
lcl/interfaces/customdrawn/customdrawnwslazdeviceapis.pas svneol=native#text/pascal
|
||||
lcl/interfaces/customdrawn/customdrawnwsspin.pas svneol=native#text/pascal
|
||||
lcl/interfaces/customdrawn/customdrawnwsstdctrls.pas svneol=native#text/pascal
|
||||
lcl/interfaces/customdrawn/interfaces.pas svneol=native#text/pascal
|
||||
lcl/interfaces/customdrawn/wincallback.inc svneol=native#text/pascal
|
||||
|
@ -9,7 +9,8 @@ uses
|
||||
Types, Classes, SysUtils,
|
||||
// LCL
|
||||
Controls, Graphics, stdctrls, extctrls, comctrls,
|
||||
customdrawnproc, customdrawncontrols, lcltype, lclproc, lclintf;
|
||||
customdrawnproc, customdrawncontrols, lcltype, lclproc, lclintf,
|
||||
spin;
|
||||
|
||||
type
|
||||
|
||||
@ -37,6 +38,11 @@ type
|
||||
LCLControl: TCustomComboBox;
|
||||
end;
|
||||
|
||||
TCDIntfScrollBar = class(TCDScrollBar)
|
||||
public
|
||||
LCLControl: TCustomScrollBar;
|
||||
end;
|
||||
|
||||
// Additional Tab
|
||||
|
||||
TCDIntfStaticText = class(TCDProgressBar)
|
||||
@ -61,6 +67,13 @@ type
|
||||
LCLControl: TCustomTabControl;
|
||||
end;
|
||||
|
||||
// Misc
|
||||
|
||||
TCDIntfSpinEdit = class(TCDSpinEdit)
|
||||
public
|
||||
LCLControl: TCustomFloatSpinEdit;
|
||||
end;
|
||||
|
||||
// These are default message handlers which backends might use to simplify their code
|
||||
// They convert a message sent to the form into a message to the correct sub-control
|
||||
procedure CallbackMouseUp(AWindowHandle: TCDForm; x, y: Integer; Button: TMouseButton; ShiftState: TShiftState = []);
|
||||
|
@ -112,8 +112,8 @@ uses
|
||||
CustomDrawnWSExtCtrls,
|
||||
CustomDrawnWSForms,
|
||||
{ WinCEWSImgList,
|
||||
WinCEWSMenus,
|
||||
WinCEWSSpin,}
|
||||
WinCEWSMenus,}
|
||||
CustomDrawnWSSpin,
|
||||
CustomDrawnWSStdCtrls,
|
||||
CustomDrawnWSLazDeviceAPIs{,
|
||||
WinCEWSGrids};
|
||||
@ -268,8 +268,8 @@ end;
|
||||
// StdCtrls
|
||||
function RegisterCustomScrollBar: Boolean; alias : 'WSRegisterCustomScrollBar';
|
||||
begin
|
||||
// RegisterWSComponent(TCustomScrollBar, TWinCEWSScrollBar);
|
||||
Result := False;
|
||||
RegisterWSComponent(TCustomScrollBar, TCDWSScrollBar);
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
function RegisterCustomGroupBox: Boolean; alias : 'WSRegisterCustomGroupBox';
|
||||
@ -547,8 +547,8 @@ end;
|
||||
|
||||
function RegisterCustomFloatSpinEdit: Boolean; alias : 'WSRegisterCustomFloatSpinEdit';
|
||||
begin
|
||||
// RegisterWSComponent(TCustomFloatSpinEdit, TWinCEWSCustomFloatSpinEdit);
|
||||
Result := False;
|
||||
RegisterWSComponent(TCustomFloatSpinEdit, TCDWSCustomFloatSpinEdit);
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
function RegisterCustomRubberBand: Boolean; alias : 'WSRegisterCustomRubberBand';
|
||||
|
139
lcl/interfaces/customdrawn/customdrawnwsspin.pas
Normal file
139
lcl/interfaces/customdrawn/customdrawnwsspin.pas
Normal file
@ -0,0 +1,139 @@
|
||||
{
|
||||
*****************************************************************************
|
||||
* 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 copyright. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
|
||||
* *
|
||||
*****************************************************************************
|
||||
}
|
||||
unit customdrawnwsspin;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
{$I customdrawndefines.inc}
|
||||
|
||||
uses
|
||||
// RTL
|
||||
|
||||
// LCL
|
||||
Spin, SysUtils, Controls, Classes, 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.
|
@ -42,17 +42,20 @@ type
|
||||
{ TCDWSScrollBar }
|
||||
|
||||
TCDWSScrollBar = class(TWSScrollBar)
|
||||
public
|
||||
class procedure InjectCDControl(const AWinControl: TWinControl; var ACDControlField: TCDControl);
|
||||
published
|
||||
{ class function CreateHandle(const AWinControl: TWinControl;
|
||||
class function CreateHandle(const AWinControl: TWinControl;
|
||||
const AParams: TCreateParams): TLCLIntfHandle; override;
|
||||
class procedure DestroyHandle(const AWinControl: TWinControl); override;
|
||||
class procedure SetKind(const AScrollBar: TCustomScrollBar; const AIsHorizontal: Boolean); override;
|
||||
class procedure SetParams(const AScrollBar: TCustomScrollBar); override;
|
||||
class procedure ShowHide(const AWinControl: TWinControl); override;}
|
||||
class procedure ShowHide(const AWinControl: TWinControl); override;
|
||||
end;
|
||||
|
||||
{ TCDWSCustomGroupBox }
|
||||
|
||||
TCDWSCustomGroupBox = class(TWSCustomGroupBox)
|
||||
TCDWSCustomGroupBox = class(TWSCustomGroupBox) // Receives direct rendering, so no control injection
|
||||
published
|
||||
class function CreateHandle(const AWinControl: TWinControl;
|
||||
const AParams: TCreateParams): TLCLIntfHandle; override;
|
||||
@ -328,33 +331,40 @@ implementation
|
||||
|
||||
{ TCDWSScrollBar }
|
||||
|
||||
(*{------------------------------------------------------------------------------
|
||||
Method: TCDWSCustomScrollBar.CreateHandle
|
||||
Params: None
|
||||
Returns: Nothing
|
||||
------------------------------------------------------------------------------}
|
||||
class function TCDWSScrollBar.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle;
|
||||
var
|
||||
QtScrollBar: TQtScrollBar;
|
||||
class procedure TCDWSScrollBar.InjectCDControl(const AWinControl: TWinControl;
|
||||
var ACDControlField: TCDControl);
|
||||
begin
|
||||
QtScrollBar := TQtScrollBar.Create(AWinControl, AParams);
|
||||
TCDIntfScrollBar(ACDControlField).LCLControl := TCustomScrollBar(AWinControl);
|
||||
ACDControlField.Caption := AWinControl.Caption;
|
||||
ACDControlField.Parent := AWinControl;
|
||||
ACDControlField.Align := alClient;
|
||||
end;
|
||||
|
||||
QtScrollBar.AttachEvents;
|
||||
|
||||
case TScrollBar(AWinControl).Kind of
|
||||
sbHorizontal: QtScrollBar.SetOrientation(QtHorizontal);
|
||||
sbVertical: QtScrollBar.SetOrientation(QtVertical);
|
||||
end;
|
||||
|
||||
Result := TLCLIntfHandle(QtScrollbar);
|
||||
class function TCDWSScrollBar.CreateHandle(const AWinControl: TWinControl;
|
||||
const AParams: TCreateParams): TLCLIntfHandle;
|
||||
var
|
||||
lCDWinControl: TCDWinControl;
|
||||
begin
|
||||
Result := TCDWSWinControl.CreateHandle(AWinControl, AParams);
|
||||
lCDWinControl := TCDWinControl(Result);
|
||||
lCDWinControl.CDControl := TCDIntfScrollBar.Create(AWinControl);
|
||||
end;
|
||||
|
||||
class procedure TCDWSScrollBar.DestroyHandle(const AWinControl: TWinControl);
|
||||
var
|
||||
lCDWinControl: TCDWinControl;
|
||||
begin
|
||||
lCDWinControl := TCDWinControl(AWinControl.Handle);
|
||||
lCDWinControl.CDControl.Free;
|
||||
lCDWinControl.Free;
|
||||
end;
|
||||
|
||||
class procedure TCDWSScrollBar.SetKind(const AScrollBar: TCustomScrollBar;
|
||||
const AIsHorizontal: Boolean);
|
||||
var
|
||||
QtScrollBar: TQtScrollBar;
|
||||
{var
|
||||
QtScrollBar: TQtScrollBar; }
|
||||
begin
|
||||
if not WSCheckHandleAllocated(AScrollBar, 'SetKind') then
|
||||
{if not WSCheckHandleAllocated(AScrollBar, 'SetKind') then
|
||||
Exit;
|
||||
QtScrollBar := TQtScrollBar(AScrollBar.Handle);
|
||||
QtScrollBar.BeginUpdate;
|
||||
@ -381,21 +391,16 @@ begin
|
||||
end;
|
||||
finally
|
||||
QtScrollbar.EndUpdate;
|
||||
end;
|
||||
end;}
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
Method: TCDWSCustomScrollBar.SetParams
|
||||
Params: None
|
||||
Returns: Nothing
|
||||
------------------------------------------------------------------------------}
|
||||
class procedure TCDWSScrollBar.SetParams(const AScrollBar: TCustomScrollBar);
|
||||
var
|
||||
QtScrollBar: TQtScrollBar;
|
||||
{var
|
||||
QtScrollBar: TQtScrollBar; }
|
||||
begin
|
||||
if not WSCheckHandleAllocated(AScrollBar, 'SetParams') then
|
||||
{ if not WSCheckHandleAllocated(AScrollBar, 'SetParams') then
|
||||
Exit;
|
||||
QtScrollBar := TQtScrollBar(AScrollBar.Handle);
|
||||
QtScrollBar := TQtScrollBar(AScrollBar.Handle);
|
||||
|
||||
QtScrollBar.BeginUpdate;
|
||||
try
|
||||
@ -432,27 +437,23 @@ begin
|
||||
end;
|
||||
finally
|
||||
QtScrollbar.EndUpdate;
|
||||
end;
|
||||
end;}
|
||||
end;
|
||||
|
||||
class procedure TCDWSScrollBar.ShowHide(const AWinControl: TWinControl);
|
||||
var
|
||||
Widget: TQtWidget;
|
||||
lCDWinControl: TCDWinControl;
|
||||
begin
|
||||
if not WSCheckHandleAllocated(AWincontrol, 'ShowHide') then
|
||||
Exit;
|
||||
lCDWinControl := TCDWinControl(AWinControl.Handle);
|
||||
|
||||
Widget := TQtWidget(AWinControl.Handle);
|
||||
TCDWSWinControl.ShowHide(AWinControl);
|
||||
|
||||
{reapply params just before visible since slider isn't updated
|
||||
properly sometimes.}
|
||||
if AWinControl.HandleObjectShouldBeVisible then
|
||||
SetParams(TCustomScrollBar(AWinControl));
|
||||
|
||||
Widget.BeginUpdate;
|
||||
Widget.setVisible(AWinControl.HandleObjectShouldBeVisible);
|
||||
Widget.EndUpdate;
|
||||
end;*)
|
||||
if not lCDWinControl.CDControlInjected then
|
||||
begin
|
||||
InjectCDControl(AWinControl, lCDWinControl.CDControl);
|
||||
lCDWinControl.CDControlInjected := True;
|
||||
end;
|
||||
end;
|
||||
|
||||
{ TCDWSCustomGroupBox }
|
||||
|
||||
|
@ -114,7 +114,7 @@ end;"/>
|
||||
<License Value="modified LGPL-2
|
||||
"/>
|
||||
<Version Major="1" Release="1"/>
|
||||
<Files Count="395">
|
||||
<Files Count="396">
|
||||
<Item1>
|
||||
<Filename Value="carbon/agl.pp"/>
|
||||
<AddToUsesPkgSection Value="False"/>
|
||||
@ -1956,6 +1956,11 @@ end;"/>
|
||||
<AddToUsesPkgSection Value="False"/>
|
||||
<UnitName Value="NoGUIWSFactory"/>
|
||||
</Item395>
|
||||
<Item396>
|
||||
<Filename Value="customdrawn/customdrawnwsspin.pas"/>
|
||||
<AddToUsesPkgSection Value="False"/>
|
||||
<UnitName Value="customdrawnwsspin"/>
|
||||
</Item396>
|
||||
</Files>
|
||||
<LazDoc Paths="../../docs/xml/lcl"/>
|
||||
<i18n>
|
||||
|
Loading…
Reference in New Issue
Block a user