unit PCLayerDlg;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  LayerDial,DlgBase,PCTypesUtils;

type
  TPCLayerDlg = class(TDlgBase)
  private
    { Private declarations }
    Syncing: Boolean;
    Dial : TLayerD;
    Procedure GetCommand( comId: integer; values: string; valueI: integer );
    Function GetVisible:boolean;
  protected
    { Protected declarations }
  public
    { Public declarations }
    constructor create(Aowner: TComponent);override;
    procedure show;override;
    Procedure SyncronizeContext;
    Procedure Syncronize;override;
    Procedure Locate(px,py:Integer);override;
  published
    { Published declarations }

    Property CadControl;
    Property Visible: Boolean read GetVisible;
  end;

implementation
{$R *.DCR}

//uses PowerCad;

constructor TPCLayerDlg.create(Aowner: TComponent);
begin
  inherited create(Aowner);
  dial := TLayerD.create(self);
  oncommand := GetCommand;
  DlgName := 'Layers';
  Syncing := False;
end;

Procedure TPCLayerDlg.GetCommand( comId: integer; values: string; valueI: integer );
begin
  case ComId of
    0 : //new layer
      begin
        CadControl.NewLayer(values);
      end;
    1 : // delete layer
      begin
        CadControl.DeleteLayerwithNbr(CadControl.ActiveLayer);
      end;
    2 : // Merge Visible
      begin
        CadControl.MergeVisibleLayers;
      end;
    3 : // Merge All
      begin
        CadControl.MergeAllLayers;
      end;
    4 : // Flue All Inactives
      begin
        CadControl.ExGrayLayer(CadControl.ActiveLayer);
      end;
    5 : // Hide All Inactives
      begin
        CadControl.ExHideLayer(CadControl.ActiveLayer);
      end;
    6 : // Select Layer
      begin
        if ValueI >= CadControl.Layers.Count then exit;
        CadControl.ActiveLayer := valueI;
      end;
    7 : // Visible
      begin
        if ValueI >= CadControl.Layers.Count then exit;
        if CadControl.GetLayerInfo(valueI).visible = false
        then
          CadControl.ShowLayer(valueI)
        else
          CadControl.HideLayer(valueI);
      end;
    8 : // Gray
      begin
        if ValueI >= CadControl.Layers.Count then exit;
        if CadControl.GetLayerInfo(valueI).visible = false then exit;
        if CadControl.GetLayerInfo(valueI).Grayed = false
        then
          CadControl.GrayLayer(valueI)
        else
          CadControl.ShowLayer(valueI) ;
      end;
    9 : // Show All
      begin
        CadControl.ShowAllLayers;
      end;
  end;
  SyncronizeContext;
end;

Procedure TPCLayerDlg.SyncronizeContext;
var a: integer;
    Info : TLayerInfo;
    Count : Integer;
Begin
  if syncing then exit;
  Syncing := True;
  If assigned(CadControl) then
  begin
    Count := CadControl.LayerCount;
    Dial.Grid.RowCount := Count;
    Dial.ActiveLabel.caption := CadControl.GetLayerInfo(CadControl.ActiveLayer).name;
    For a := 0 to Count - 1 do
    begin
      Info := CadControl.GetLayerInfo(a);
      Dial.Grid.Cells[0,a] := ' '+Info.Name;
      If Info.visible
      then
        Dial.Grid.Cells[1,a] := ' V'
      else
        Dial.Grid.Cells[1,a] := '';
      If Info.Grayed
      then
        Dial.Grid.Cells[2,a] := ' F'
      else
        Dial.Grid.Cells[2,a] := '';
    end;
  end;
  Syncing := False;
end;

Procedure TPCLayerDlg.Show;
begin
  SyncronizeContext;
  dial.show;
end;

Procedure TPCLayerDlg.Locate(px,py:Integer);
begin
  Dial.Left := px;
  Dial.Top := py;
end;

Function TPCLayerDlg.GetVisible: Boolean;
begin
  Result := Dial.Visible;
end;

Procedure TPCLayerDlg.Syncronize;
begin
  If Dial.Visible then SyncronizeContext;
end;

end.
