unit main;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ColorBox,
  Spin, ExtCtrls, switches, indSliders;

type

  { TForm1 }

  TForm1 = class(TForm)
    cbSliderColor: TColorButton;
    cbVertical: TCheckBox;
    cbAutoRotate: TCheckBox;
    cbColorBelow: TColorButton;
    cbColorBetween: TColorButton;
    cbColorAbove: TColorButton;
    cbFlat: TCheckBox;
    cbEnabled: TCheckBox;
    cbTransparent: TCheckBox;
    cbFormColor: TColorButton;
    cmbThumbStyle: TComboBox;
    cbColorThumb: TColorButton;
    cmbSliderMode: TComboBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    seTrackThickness: TSpinEdit;
    seDefaultSize: TSpinEdit;
    procedure cbAutoRotateChange(Sender: TObject);
    procedure cbColorAboveColorChanged(Sender: TObject);
    procedure cbColorBelowColorChanged(Sender: TObject);
    procedure cbColorBetweenColorChanged(Sender: TObject);
    procedure cbColorThumbColorChanged(Sender: TObject);
    procedure cbEnabledChange(Sender: TObject);
    procedure cbFlatChange(Sender: TObject);
    procedure cbSliderColorColorChanged(Sender: TObject);
    procedure cmbSliderModeChange(Sender: TObject);
    procedure cmbThumbStyleChange(Sender: TObject);
    procedure cbTransparentChange(Sender: TObject);
    procedure cbVerticalChange(Sender: TObject);
    procedure cbFormColorColorChanged(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure seDefaultSizeChange(Sender: TObject);
    procedure seTrackThicknessChange(Sender: TObject);
  private
    slider: TMultiSlider;
    procedure PositionChangeHandler(Sender: TObject; AKind: TThumbKind; AValue: Integer);

  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  slider := TMultiSlider.Create(self);
  slider.Parent := self;
  slider.Align := alTop;
  slider.BorderSpacing.Around := 8;
//  slider.Left := 8;
//  slider.Top := 8;
  slider.Vertical := false;
  slider.OnPositionChange := @PositionChangeHandler;

  cbColorBelow.ButtonColor := slider.ColorBelow;
  cbColorAbove.ButtonColor := slider.ColorAbove;
  cbColorBetween.ButtonColor := slider.ColorBetween;
  cbColorThumb.ButtonColor := slider.ColorThumb;
  cbSliderColor.ButtonColor := slider.Color;
  cbFormColor.ButtonColor := Color;
  cbTransparent.Checked := slider.Color = clNone;
  seTrackThickness.Value := slider.TrackThickness;
  seDefaultSize.Value := slider.DefaultSize;
  cmbSliderMode.ItemIndex := ord(slider.SliderMode);
end;

procedure TForm1.seDefaultSizeChange(Sender: TObject);
begin
  slider.DefaultSize := seDefaultSize.Value;
end;

procedure TForm1.seTrackThicknessChange(Sender: TObject);
begin
  slider.TrackThickness := seTrackThickness.Value;
end;

procedure TForm1.cbVerticalChange(Sender: TObject);
begin
  slider.Vertical := cbVertical.Checked;
  if slider.Vertical then slider.Align := alLeft else slider.Align := alTop;
end;

procedure TForm1.cbFormColorColorChanged(Sender: TObject);
begin
  Color := cbFormColor.ButtonColor;
end;

procedure TForm1.cbColorThumbColorChanged(Sender: TObject);
begin
  slider.ColorThumb := cbColorThumb.ButtonColor;
end;

procedure TForm1.cbAutoRotateChange(Sender: TObject);
begin
  slider.AutoRotate := cbAutoRotate.Checked;
end;

procedure TForm1.cbColorAboveColorChanged(Sender: TObject);
begin
  slider.ColorAbove := cbColorAbove.ButtonColor;
end;

procedure TForm1.cbColorBelowColorChanged(Sender: TObject);
begin
  slider.ColorBelow := cbColorBelow.ButtonColor;
end;

procedure TForm1.cbColorBetweenColorChanged(Sender: TObject);
begin
  slider.ColorBetween := cbColorBetween.ButtonColor;
end;

procedure TForm1.cbSliderColorColorChanged(Sender: TObject);
begin
  slider.Color := cbSliderColor.ButtonColor;
end;

procedure TForm1.cmbSliderModeChange(Sender: TObject);
begin
  slider.SliderMode := TSliderMode(cmbSliderMode.ItemIndex);
end;

procedure TForm1.cbEnabledChange(Sender: TObject);
begin
  slider.Enabled := cbEnabled.Checked;
end;

procedure TForm1.cbFlatChange(Sender: TObject);
begin
  slider.Flat := cbFlat.Checked;
end;

procedure TForm1.cmbThumbStyleChange(Sender: TObject);
begin
  slider.ThumbStyle := TThumbStyle(cmbThumbStyle.ItemIndex);
end;

procedure TForm1.cbTransparentChange(Sender: TObject);
begin
  if cbTransparent.Checked then
    slider.Color := clNone;
end;

procedure TForm1.PositionChangeHandler(Sender: TObject; AKind: TThumbKind;
  AValue: Integer);
begin
  case AKind of
    tkMin: Label1.Caption := 'Min = ' + intToStr(AValue);
    tkValue: Label2.Caption := 'Value = ' + IntToStr(AValue);
    tkMax: Label3.Caption := 'Max = ' + IntToStr(AValue);
  end;
end;

end.