mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-22 08:19:28 +02:00
128 lines
3.5 KiB
PHP
128 lines
3.5 KiB
PHP
{%MainUnit ../stdctrls.pp}
|
|
|
|
{******************************************************************************
|
|
TRadioButton
|
|
******************************************************************************
|
|
|
|
*****************************************************************************
|
|
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:
|
|
|
|
- derived from TCustomCheckBox instead of TButtonControl
|
|
|
|
Delphi compatibility:
|
|
|
|
- derived from TCustomCheckBox instead of TButtonControl
|
|
- alignment property is missing
|
|
- lots of unknown issues
|
|
|
|
TODO:
|
|
|
|
- check for Delphi compatibility
|
|
* Who's responsible for the fGroup - pointer and who'll free the
|
|
memory allocated for it?????? - automatically managed by GTK+ when
|
|
destroying widget, no worry (MB)
|
|
* make serious tests
|
|
|
|
- GTK interface : handle reparenting
|
|
|
|
Bugs:
|
|
|
|
- s.a. TCustomCheckbox
|
|
}
|
|
|
|
{------------------------------------------------------------------------------
|
|
Method: TRadioButton.Create
|
|
Params: aOwner : owner of this object
|
|
Returns: Nothing
|
|
|
|
Create a new TRadioButton
|
|
------------------------------------------------------------------------------}
|
|
constructor TRadioButton.Create(TheOwner : TComponent);
|
|
begin
|
|
inherited Create(TheOwner);
|
|
fCompStyle := csRadioButton;
|
|
AutoSize := True;
|
|
end;
|
|
|
|
{------------------------------------------------------------------------------
|
|
Method: TRadioButton.RealSetText
|
|
Params: Value: TCaption
|
|
Returns: nothing
|
|
|
|
Change the caption, and then recreate to update, then call to AutoSize
|
|
------------------------------------------------------------------------------}
|
|
procedure TRadioButton.RealSetText(const Value: TCaption);
|
|
begin
|
|
if Text = Value then
|
|
Exit;
|
|
inherited RealSetText(Value);
|
|
InvalidatePreferredSize;
|
|
AdjustSize;
|
|
end;
|
|
|
|
procedure TRadioButton.DoClickOnChange;
|
|
begin
|
|
TabStop := FState = cbChecked;
|
|
//inherited calls DoOnChange
|
|
if FState = cbChecked then
|
|
inherited DoClickOnChange
|
|
else
|
|
DoOnChange;
|
|
end;
|
|
|
|
procedure TRadioButton.CreateParams(var Params: TCreateParams);
|
|
begin
|
|
inherited CreateParams(Params);
|
|
// BS_AUTORADIOBUTTON may hang the application,
|
|
// if the radiobuttons are not consecutive controls.
|
|
Params.Style := (Params.Style and not BS_3STATE) or BS_RADIOBUTTON;
|
|
end;
|
|
|
|
class procedure TRadioButton.WSRegisterClass;
|
|
begin
|
|
inherited WSRegisterClass;
|
|
RegisterRadioButton;
|
|
end;
|
|
|
|
procedure TRadioButton.ApplyChanges;
|
|
var
|
|
Sibling: TControl;
|
|
i: Integer;
|
|
begin
|
|
inherited ApplyChanges;
|
|
//the siblings are unchecked by the widgetset. When the handle is not allocated,
|
|
//the widgetset is not notified so it cannot update the siblings
|
|
if not HandleAllocated and (FState = cbChecked) and
|
|
(Parent <> nil) and (not (csLoading in ComponentState)) then
|
|
begin
|
|
for i := 0 to Parent.ControlCount - 1 do
|
|
begin
|
|
Sibling := Parent.Controls[i];
|
|
if (Sibling is TRadioButton) and (Sibling <> Self) then
|
|
TRadioButton(Sibling).Checked := False;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function TRadioButton.DialogChar(var Message: TLMKey): boolean;
|
|
begin
|
|
if IsAccel(Message.CharCode, Caption) and CanFocus then
|
|
begin
|
|
SetFocus;
|
|
if Focused then
|
|
Checked := True;
|
|
Result := True;
|
|
end else
|
|
Result := inherited;
|
|
end;
|
|
|
|
// included by stdctrls.pp
|
|
|
|
|