unit BCMaterialSpinEdit;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  StdCtrls, Spin;

type

  { TBCMaterialSpinEdit }

  TBCMaterialSpinEdit = class(TCustomPanel)
  private
    FAccentColor: TColor;
    FDisabledColor: TColor;
    Flbl: TLabel;
    Fedt: TSpinEdit;
    Ffocused: boolean;
    FOnChange: TNotifyEvent;
    FTexto: string;
    procedure ChangeEdit(Sender: TObject);
    procedure EnterEdit(Sender: TObject);
    procedure ExitEdit(Sender: TObject);
    procedure SetTexto(AValue: string);
  protected
    procedure Paint; override;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property Color;
    property Text: string read FTexto write SetTexto;
    property Edit: TSpinEdit read Fedt;
    property Title: TLabel read Flbl;
    property DisabledColor: TColor read FDisabledColor write FDisabledColor;
    property AccentColor: TColor read FAccentColor write FAccentColor;
    property OnChange: TNotifyEvent read FOnChange write FOnChange;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('BGRA Controls', [TBCMaterialSpinEdit]);
end;

{ TBCMaterialSpinEdit }

procedure TBCMaterialSpinEdit.EnterEdit(Sender: TObject);
begin
  Ffocused := True;
  Invalidate;
  Flbl.Font.Color := AccentColor;
end;

procedure TBCMaterialSpinEdit.ChangeEdit(Sender: TObject);
begin
  if Assigned(FOnChange) then
    FOnChange(Self);
end;

procedure TBCMaterialSpinEdit.ExitEdit(Sender: TObject);
begin
  Ffocused := False;
  Invalidate;
  Flbl.Font.Color := DisabledColor;
end;

procedure TBCMaterialSpinEdit.SetTexto(AValue: string);
begin
  if FTexto = AValue then
    Exit;
  FTexto := AValue;
  Flbl.Caption := FTexto;
  //Fedt.TextHint := FTexto;
end;

procedure TBCMaterialSpinEdit.Paint;
begin
  inherited Paint;
  Canvas.Brush.Color := Color;
  Canvas.Pen.Color := Color;
  Canvas.Rectangle(0, 0, Width, Height);
  if (fFocused) then
  begin
    Canvas.Pen.Color := AccentColor;
    Canvas.Line(0, Height - 2, Width, Height - 2);
    Canvas.Line(0, Height - 1, Width, Height - 1);
  end
  else
  begin
    Canvas.Pen.Color := DisabledColor;
    Canvas.Line(0, Height - 1, Width, Height - 1);
  end;
end;

constructor TBCMaterialSpinEdit.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Self.BevelOuter := bvNone;
  Self.Color := clWhite;
  AccentColor := clHighlight;
  DisabledColor := $00B8AFA8;
  Flbl := TLabel.Create(Self);
  Flbl.Align := alTop;
  Flbl.Caption := 'Buscar';
  Flbl.BorderSpacing.Around := 4;
  Flbl.Font.Style := [fsBold];
  Flbl.Font.Color := $00B8AFA8;
  Flbl.Parent := Self;
  Fedt := TSpinEdit.Create(Self);
  Fedt.Color := Color;
  Fedt.Font.Color := clBlack;
  Fedt.OnEnter := @EnterEdit;
  Fedt.OnExit := @ExitEdit;
  Fedt.OnChange:=@ChangeEdit;
  Fedt.Align := alClient;
  Fedt.BorderStyle := bsNone;
  //Fedt.TextHint := 'Buscar';
  Fedt.BorderSpacing.Around := 4;
  Fedt.Parent := Self;
  Fedt.MinValue := 0;
  Fedt.MaxValue := MaxInt;
end;

end.
