unit States;

{$MODE Delphi}
{$H+}

interface

uses
  LCLIntf, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Laz.VirtualTrees, LResources, ExtCtrls;

type

  { TStateForm }

  TStateForm = class(TForm)
    EnableCheckBox: TCheckBox;
    GroupBox1: TGroupBox;
    CheckBox1: TCheckBox;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    CheckBox32: TCheckBox;
    GroupBox2: TGroupBox;
    CheckBox8: TCheckBox;
    CheckBox9: TCheckBox;
    CheckBox19: TCheckBox;
    CheckBox20: TCheckBox;
    CheckBox21: TCheckBox;
    CheckBox27: TCheckBox;
    CheckBox43: TCheckBox;
    CheckBox44: TCheckBox;
    GroupBox3: TGroupBox;
    CheckBox10: TCheckBox;
    CheckBox11: TCheckBox;
    CheckBox15: TCheckBox;
    CheckBox16: TCheckBox;
    CheckBox18: TCheckBox;
    GroupBox4: TGroupBox;
    CheckBox5: TCheckBox;
    CheckBox6: TCheckBox;
    CheckBox7: TCheckBox;
    CheckBox24: TCheckBox;
    CheckBox25: TCheckBox;
    CheckBox37: TCheckBox;
    CheckBox41: TCheckBox;
    CheckBox42: TCheckBox;
    GroupBox5: TGroupBox;
    CheckBox31: TCheckBox;
    CheckBox36: TCheckBox;
    CheckBox39: TCheckBox;
    CheckBox40: TCheckBox;
    GroupBox6: TGroupBox;
    CheckBox2: TCheckBox;
    CheckBox12: TCheckBox;
    CheckBox28: TCheckBox;
    CheckBox29: TCheckBox;
    GroupBox7: TGroupBox;
    CheckBox13: TCheckBox;
    CheckBox14: TCheckBox;
    CheckBox17: TCheckBox;
    CheckBox23: TCheckBox;
    CheckBox33: TCheckBox;
    GroupBox8: TGroupBox;
    CheckBox22: TCheckBox;
    CheckBox26: TCheckBox;
    CheckBox30: TCheckBox;
    CheckBox34: TCheckBox;
    CheckBox35: TCheckBox;
    CheckBox38: TCheckBox;
    CheckBox45: TCheckBox;
    CheckBox46: TCheckBox;
    procedure EnableCheckBoxClick(Sender: TObject);
  protected
    procedure SetActiveState(CheckBox: TCheckBox; Active: Boolean);
  end;

var
  StateForm: TStateForm;

procedure UpdateStateDisplay(CurrentStates, Enter, Leave: TVirtualTreeStates);

//----------------------------------------------------------------------------------------------------------------------

implementation

{$R *.lfm}


//----------------------------------------------------------------------------------------------------------------------

procedure UpdateStateDisplay(CurrentStates, Enter, Leave: TVirtualTreeStates);

var
  NewStates: TVirtualTreeStates;

begin
  with StateForm do
    if EnableCheckBox.Checked then
    begin
      // At this point the new states are not yet set. So construct the new set here.
      NewStates := CurrentStates + Enter - Leave;
      SetActiveState(CheckBox1, tsChangePending in NewStates);
      SetActiveState(CheckBox2, tsCollapsing in NewStates);
      SetActiveState(CheckBox3, tsToggleFocusedSelection in NewStates);
      SetActiveState(CheckBox4, tsClearPending in NewStates);
      SetActiveState(CheckBox5, tsClipboardFlushing in NewStates);
      SetActiveState(CheckBox6, tsCopyPending in NewStates);
      SetActiveState(CheckBox7, tsCutPending in NewStates);
      SetActiveState(CheckBox8, tsDrawSelPending in NewStates);
      SetActiveState(CheckBox9, tsDrawSelecting in NewStates);
      SetActiveState(CheckBox10, tsEditing in NewStates);
      SetActiveState(CheckBox11, tsEditPending in NewStates);
      SetActiveState(CheckBox12, tsExpanding in NewStates);
      SetActiveState(CheckBox13, tsHint in NewStates);
      SetActiveState(CheckBox14, tsInAnimation in NewStates);
      SetActiveState(CheckBox15, tsIncrementalSearching in NewStates);
      SetActiveState(CheckBox16, tsIncrementalSearchPending in NewStates);
      SetActiveState(CheckBox17, tsIterating in NewStates);
      SetActiveState(CheckBox18, tsKeyCheckPending in NewStates);
      SetActiveState(CheckBox19, tsLeftButtonDown in NewStates);
      SetActiveState(CheckBox20, tsMouseCheckPending in NewStates);
      SetActiveState(CheckBox21, tsMiddleButtonDown in NewStates);
      {$if VTMajorVersion < 5}
      SetActiveState(CheckBox22, tsNeedScale in NewStates);
      {$endif}
      SetActiveState(CheckBox23, tsNeedRootCountUpdate in NewStates);
      SetActiveState(CheckBox24, tsOLEDragging in NewStates);
      SetActiveState(CheckBox25, tsOLEDragPending in NewStates);
      SetActiveState(CheckBox26, tsPainting in NewStates);
      SetActiveState(CheckBox27, tsRightButtonDown in NewStates);
      SetActiveState(CheckBox28, tsScrolling in NewStates);
      SetActiveState(CheckBox29, tsScrollPending in NewStates);
      SetActiveState(CheckBox30, tsSizing in NewStates);
      SetActiveState(CheckBox31, tsStopValidation in NewStates);
      SetActiveState(CheckBox32, tsStructureChangePending in NewStates);
      SetActiveState(CheckBox33, tsSynchMode in NewStates);
      SetActiveState(CheckBox34, tsThumbTracking in NewStates);
      SetActiveState(CheckBox35, tsUpdating in NewStates);
      SetActiveState(CheckBox36, tsUseCache in NewStates);
      SetActiveState(CheckBox37, tsUserDragObject in NewStates);
      SetActiveState(CheckBox38, tsUseThemes in NewStates);
      SetActiveState(CheckBox39, tsValidating in NewStates);
      SetActiveState(CheckBox40, tsValidationNeeded in NewStates);
      SetActiveState(CheckBox41, tsVCLDragging in NewStates);
      SetActiveState(CheckBox42, tsVCLDragPending in NewStates);
      SetActiveState(CheckBox43, tsWheelPanning in NewStates);
      SetActiveState(CheckBox44, tsWheelScrolling in NewStates);
      SetActiveState(CheckBox45, tsWindowCreating in NewStates);
      SetActiveState(CheckBox46, tsPopupMenuShown in NewStates);

      Update;
    end;
end;

//----------------------------------------------------------------------------------------------------------------------

procedure TStateForm.EnableCheckBoxClick(Sender: TObject);

begin
  CheckBox1.Enabled := EnableCheckBox.Checked;
  CheckBox2.Enabled := EnableCheckBox.Checked;
  CheckBox3.Enabled := EnableCheckBox.Checked;
  CheckBox4.Enabled := EnableCheckBox.Checked;
  CheckBox5.Enabled := EnableCheckBox.Checked;
  CheckBox6.Enabled := EnableCheckBox.Checked;
  CheckBox7.Enabled := EnableCheckBox.Checked;
  CheckBox8.Enabled := EnableCheckBox.Checked;
  CheckBox9.Enabled := EnableCheckBox.Checked;
  CheckBox10.Enabled := EnableCheckBox.Checked;
  CheckBox11.Enabled := EnableCheckBox.Checked;
  CheckBox12.Enabled := EnableCheckBox.Checked;
  CheckBox13.Enabled := EnableCheckBox.Checked;
  CheckBox14.Enabled := EnableCheckBox.Checked;
  CheckBox15.Enabled := EnableCheckBox.Checked;
  CheckBox16.Enabled := EnableCheckBox.Checked;
  CheckBox17.Enabled := EnableCheckBox.Checked;
  CheckBox18.Enabled := EnableCheckBox.Checked;
  CheckBox19.Enabled := EnableCheckBox.Checked;
  CheckBox20.Enabled := EnableCheckBox.Checked;
  CheckBox21.Enabled := EnableCheckBox.Checked;
  CheckBox22.Enabled := EnableCheckBox.Checked;
  CheckBox23.Enabled := EnableCheckBox.Checked;
  CheckBox24.Enabled := EnableCheckBox.Checked;
  CheckBox25.Enabled := EnableCheckBox.Checked;
  CheckBox26.Enabled := EnableCheckBox.Checked;
  CheckBox27.Enabled := EnableCheckBox.Checked;
  CheckBox28.Enabled := EnableCheckBox.Checked;
  CheckBox29.Enabled := EnableCheckBox.Checked;
  CheckBox30.Enabled := EnableCheckBox.Checked;
  CheckBox31.Enabled := EnableCheckBox.Checked;
  CheckBox32.Enabled := EnableCheckBox.Checked;
  CheckBox33.Enabled := EnableCheckBox.Checked;
  CheckBox34.Enabled := EnableCheckBox.Checked;
  CheckBox35.Enabled := EnableCheckBox.Checked;
  CheckBox36.Enabled := EnableCheckBox.Checked;
  CheckBox37.Enabled := EnableCheckBox.Checked;
  CheckBox38.Enabled := EnableCheckBox.Checked;
  CheckBox39.Enabled := EnableCheckBox.Checked;
  CheckBox40.Enabled := EnableCheckBox.Checked;
  CheckBox41.Enabled := EnableCheckBox.Checked;
  CheckBox42.Enabled := EnableCheckBox.Checked;
  CheckBox43.Enabled := EnableCheckBox.Checked;
  CheckBox44.Enabled := EnableCheckBox.Checked;
  CheckBox45.Enabled := EnableCheckBox.Checked;
  CheckBox46.Enabled := EnableCheckBox.Checked;
end;

//----------------------------------------------------------------------------------------------------------------------

procedure TStateForm.SetActiveState(CheckBox: TCheckBox; Active: Boolean);

begin
  CheckBox.Checked := Active;
  if Active then
    CheckBox.Font.Style := [fsBold]
  else
    CheckBox.Font.Style := [];
end;

//----------------------------------------------------------------------------------------------------------------------


end.
