unit main;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls, ExtCtrls, ugradbtn, Buttons, ComCtrls,
  LCLType, ExtDlgs, Menus, urotatebitmap;

type

  { TForm1 }

  TForm1 = class(TForm)
    CheckBox2: TCheckBox;
    DDColorButton: TGradButton;
    DDPressedColorButton: TGradButton;
    BoldCheckBox: TCheckBox;
    CheckBox1: TCheckBox;
    GlyphTransparentCheckBox: TCheckBox;
    GroupBox1: TGroupBox;
    ItalicCheckBox: TCheckBox;
    Label12: TLabel;
    ExamplePopupMenu: TPopupMenu;
    Label13: TLabel;
    Label14: TLabel;
    LabeledEdit2: TLabeledEdit;
    MenuItem1: TMenuItem;
    MenuItem2: TMenuItem;
    RadioGroup5: TRadioGroup;
    RadioGroup6: TRadioGroup;
    TextColorButton: TGradButton;
    UnderlineCheckBox: TCheckBox;
    CheckGroup1: TCheckGroup;
    CheckGroup2: TCheckGroup;
    ColorDialog1: TColorDialog;
    b: TGradButton;
    BaseColorButton: TGradButton;
    NormalBlendColorButton: TGradButton;
    OverBlendButton: TGradButton;
    LoadGlyphButton: TGradButton;
    GlyphBackgroundColorButton: TGradButton;
    ClickColorButton: TGradButton;
    DisabledColorButton: TGradButton;
    Label1: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    LabeledEdit1: TLabeledEdit;
    OpenPictureDialog1: TOpenPictureDialog;
    RadioGroup1: TRadioGroup;
    RadioGroup2: TRadioGroup;
    RadioGroup3: TRadioGroup;
    RadioGroup4: TRadioGroup;
    TrackBar1: TTrackBar;
    TrackBar2: TTrackBar;
    procedure bClick(Sender: TObject);
    procedure BoldCheckBoxChange(Sender: TObject);
    procedure CheckBox1Change(Sender: TObject);
    procedure CheckBox2Change(Sender: TObject);
    procedure CheckGroup1ItemClick(Sender: TObject; Index: integer);
    procedure CheckGroup2ItemClick(Sender: TObject; Index: integer);
    procedure BaseColorClick(Sender: TObject);
    procedure DDPressedColorButtonClick(Sender: TObject);
    procedure DDColorButtonClick(Sender: TObject);
    procedure GlyphTransparentCheckBoxChange(Sender: TObject);
    procedure LabeledEdit2Change(Sender: TObject);
    procedure LoadGlyphButtonClick(Sender: TObject);
    procedure GlyphBackgroundColorButtonClick(Sender: TObject);
    procedure ClickColorButtonClick(Sender: TObject);
    procedure DisabledColorButtonClick(Sender: TObject);
    procedure ItalicCheckBoxChange(Sender: TObject);
    procedure NormalBlendClick(Sender: TObject);
    procedure OverBlendClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);
    procedure RadioGroup2Click(Sender: TObject);
    procedure RadioGroup3Click(Sender: TObject);
    procedure RadioGroup4Click(Sender: TObject);
    procedure RadioGroup5Click(Sender: TObject);
    procedure RadioGroup6Click(Sender: TObject);
    procedure TextColorButtonClick(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
    procedure TrackBar2Change(Sender: TObject);
    procedure LabeledEdit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
    procedure UnderlineCheckBoxChange(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

uses
  GraphType;

procedure UpdateButtonColor(Button: TGradButton; Color: TColor);
begin
  Button.BaseColor := Color;
  Button.Caption := ColorToString(Color);
end;

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  TrackBar1.Position:= trunc(b.NormalBlend * TrackBar1.Max);
  TrackBar1Change(TrackBar1);
  
  TrackBar2.Position:= trunc(b.OverBlend * TrackBar2.Max);
  TrackBar2Change(TrackBar2);

  UpdateButtonColor(BaseColorButton, b.BaseColor);
  UpdateButtonColor(NormalBlendColorButton, b.NormalBlendColor);
  UpdateButtonColor(OverBlendButton, b.OverBlendColor);
  UpdateButtonColor(GlyphBackgroundColorButton, b.GlyphBackgroundColor);
  UpdateButtonColor(ClickColorButton, b.ClickColor);
  UpdateButtonColor(DisabledColorButton, b.DisabledColor);
  UpdateButtonColor(TextColorButton, b.Font.Color);
  UpdateButtonColor(DDColorButton, b.DropDownSettings.Color);
  UpdateButtonColor(DDPressedColorButton, b.DropDownSettings.PressedColor);

  CheckGroup1.Checked[0]:=true;
  CheckGroup1.Checked[1]:=true;
  CheckGroup1.Checked[2]:=true;
  CheckGroup1.Checked[3]:=true;
  
  CheckGroup2.Checked[0]:=b.ShowFocusBorder;
  CheckGroup2.Checked[2]:=true;

  b.Caption:=LabeledEdit1.Text;

  //ImageList1.Add(LoadBitmapFromLazarusResource('script_go'),nil);
  //b.Glyph := LoadBitmapFromLazarusResource('table_gear');

  b.ShowGlyph:=true;
end;

procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
  if RadioGroup1.ItemIndex = 0 then
    b.GradientType := gtHorizontal
  else
    b.GradientType := gtVertical;
end;

procedure TForm1.RadioGroup2Click(Sender: TObject);
begin
  if RadioGroup2.ItemIndex = 0 then
    b.RotateDirection := rdNormal
  else if RadioGroup2.ItemIndex = 1 then
    b.RotateDirection := rdLeft
  else
    b.RotateDirection := rdRight;
end;

procedure TForm1.RadioGroup3Click(Sender: TObject);
begin
  if RadioGroup3.ItemIndex = 0 then
    b.ButtonLayout := blGlyphRight
  else if RadioGroup3.ItemIndex = 1 then
    b.ButtonLayout := blGlyphLeft
  else if RadioGroup3.ItemIndex = 2 then
    b.ButtonLayout := blGlyphTop
  else b.ButtonLayout := blGlyphBottom;
end;

procedure TForm1.RadioGroup4Click(Sender: TObject);
begin
  case RadioGroup4.ItemIndex of
    0 : b.TextAlignment := taCenter;
    1 : b.TextAlignment := taLeftJustify;
    2 : b.TextAlignment := taRightJustify;
  end;
end;

procedure TForm1.RadioGroup5Click(Sender: TObject);
begin
  case RadioGroup5.ItemIndex of                 
    0: b.DropDownSettings.MarkDirection:=mdUp;  
    1: b.DropDownSettings.MarkDirection:=mdLeft;  
    2: b.DropDownSettings.MarkDirection:=mdDown;  
    3: b.DropDownSettings.MarkDirection:=mdRight;  
  end;
end;

procedure TForm1.RadioGroup6Click(Sender: TObject);
begin
  case RadioGroup6.ItemIndex of                 
    0: b.DropDownSettings.MarkPosition:=mpLeft;  
    1: b.DropDownSettings.MarkPosition:=mpRight;    
  end; 
end;

procedure TForm1.TextColorButtonClick(Sender: TObject);
begin
  ColorDialog1.Color := b.Font.Color;
  if ColorDialog1.Execute then
  begin
    b.Font.Color := ColorDialog1.Color;
    UpdateButtonColor(TextColorButton, ColorDialog1.Color);
  end;
end;

procedure TForm1.BaseColorClick(Sender: TObject);
begin
  ColorDialog1.Color:=BaseColorButton.BaseColor;
  if ColorDialog1.Execute then
  begin
    b.BaseColor:=ColorDialog1.Color;
    UpdateButtonColor(BaseColorButton, ColorDialog1.Color);
  end;
end;

procedure TForm1.DDPressedColorButtonClick(Sender: TObject);
begin
  ColorDialog1.Color:=DDPressedColorButton.BaseColor;
  if ColorDialog1.Execute then
  begin
    b.DropDownSettings.PressedColor:=ColorDialog1.Color;
    UpdateButtonColor(DDPressedColorButton, ColorDialog1.Color);
  end;
end;

procedure TForm1.DDColorButtonClick(Sender: TObject);
begin
  ColorDialog1.Color:=DDColorButton.BaseColor;
  if ColorDialog1.Execute then
  begin
    b.DropDownSettings.Color:=ColorDialog1.Color;
    UpdateButtonColor(DDColorButton, ColorDialog1.Color);
  end;
end;

procedure TForm1.GlyphTransparentCheckBoxChange(Sender: TObject);
begin
  b.Glyph.Transparent := GlyphTransparentCheckBox.Checked;
  LoadGlyphButton.Glyph.Transparent := GlyphTransparentCheckBox.Checked;
end;

procedure TForm1.LabeledEdit2Change(Sender: TObject);
var
  i : Integer;
begin
  if TryStrToInt(LabeledEdit2.Text, i) then
  begin
    b.DropDownSettings.Size := i;
  end;
end;

procedure TForm1.LoadGlyphButtonClick(Sender: TObject);
var
   tempPicture : TPicture;
begin
  if OpenPictureDialog1.Execute then
  begin
      tempPicture := TPicture.Create;
      try
          tempPicture.LoadFromFile(OpenPictureDialog1.FileName);
          tempPicture.Graphic.Transparent := GlyphTransparentCheckBox.Checked;

          b.Glyph.Assign(tempPicture.Graphic);

          LoadGlyphButton.Glyph.Assign(tempPicture.Graphic);
          LoadGlyphButton.ShowGlyph := true;
          LoadGlyphButton.Caption := '';
      finally
          tempPicture.Free;
      end;
  end;
end;

procedure TForm1.GlyphBackgroundColorButtonClick(Sender: TObject);
begin
   ColorDialog1.Color:=b.GlyphBackgroundColor;
   if ColorDialog1.Execute then
   begin
       b.GlyphBackgroundColor:=ColorDialog1.Color;
       UpdateButtonColor(GlyphBackgroundColorButton, ColorDialog1.Color);
   end;
end;

procedure TForm1.ClickColorButtonClick(Sender: TObject);
begin
    ColorDialog1.Color:=b.ClickColor;
    if ColorDialog1.Execute then
    begin
        b.ClickColor:=ColorDialog1.Color;
        UpdateButtonColor(ClickColorButton, ColorDialog1.Color);
    end;
end;

procedure TForm1.DisabledColorButtonClick(Sender: TObject);
begin
    ColorDialog1.Color:=b.DisabledColor;
    if ColorDialog1.Execute then
    begin
        b.DisabledColor:=ColorDialog1.Color;
        UpdateButtonColor(DisabledColorButton, ColorDialog1.Color);
    end;
end;

procedure TForm1.ItalicCheckBoxChange(Sender: TObject);
begin
  if ItalicCheckBox.Checked then
    b.Font.Style := b.Font.Style + [fsItalic]
  else
    b.Font.Style := b.Font.Style - [fsItalic];
end;

procedure TForm1.LabeledEdit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  b.Caption:=LabeledEdit1.Text;
end;

procedure TForm1.UnderlineCheckBoxChange(Sender: TObject);
begin
  if UnderlineCheckBox.Checked then
    b.Font.Style := b.Font.Style + [fsUnderline]
  else
    b.Font.Style := b.Font.Style - [fsUnderline];
end;

procedure TForm1.NormalBlendClick(Sender: TObject);
begin
    ColorDialog1.Color:=b.NormalBlendColor;
    if ColorDialog1.Execute then
    begin
        b.NormalBlendColor:=ColorDialog1.Color;
        UpdateButtonColor(NormalBlendColorButton, ColorDialog1.Color);
    end;
end;

procedure TForm1.OverBlendClick(Sender: TObject);
begin
   ColorDialog1.Color:=b.OverBlendColor;
    if ColorDialog1.Execute then
    begin
        b.OverBlendColor:=ColorDialog1.Color;
        UpdateButtonColor(OverBlendButton, ColorDialog1.Color);
    end;
end;

procedure TForm1.BoldCheckBoxChange(Sender: TObject);
begin
  if BoldCheckBox.Checked then
    b.Font.Style := b.Font.Style + [fsBold]
  else
    b.Font.Style := b.Font.Style - [fsBold];
end;

procedure TForm1.CheckBox1Change(Sender: TObject);
begin
  b.DropDownSettings.Show := CheckBox1.Checked;
end;

procedure TForm1.CheckBox2Change(Sender: TObject);
begin
  b.DropDownSettings.SplitButton:= CheckBox2.Checked;
end;

procedure TForm1.bClick(Sender: TObject);
begin

end;

procedure TForm1.CheckGroup1ItemClick(Sender: TObject; Index: integer);
var
   bs : TBorderSides;
begin

  bs := [];

  if CheckGroup1.Checked[0] then bs := bs + [bsBottomLine];
  if CheckGroup1.Checked[1] then bs := bs + [bsTopLine];
  if CheckGroup1.Checked[2] then bs := bs + [bsLeftLine];
  if CheckGroup1.Checked[3] then bs := bs + [bsRightLine];
  
  b.BorderSides:=bs;
end;

procedure TForm1.CheckGroup2ItemClick(Sender: TObject; Index: integer);
begin
  b.ShowFocusBorder:=CheckGroup2.Checked[0];
  b.ShowGlyph:=CheckGroup2.Checked[1];
  b.Enabled:=CheckGroup2.Checked[2];
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
var
   blend : Extended;
begin
   blend := TrackBar1.Position / TrackBar1.Max;
   b.NormalBlend:=blend;
   Label3.Caption:=FloatToStr(blend);
end;

procedure TForm1.TrackBar2Change(Sender: TObject);
var
   blend : Extended;
begin
   blend := TrackBar2.Position / TrackBar2.Max;
   b.OverBlend:=blend;
   Label4.Caption:=FloatToStr(blend);
end;

initialization
  {$I main.lrs}
end.