lazarus/components/dockedformeditor/source/dockedoptionsframe.pas

266 lines
10 KiB
ObjectPascal

{
*****************************************************************************
See the file COPYING.modifiedLGPL.txt, included in this distribution,
for details about the license.
*****************************************************************************
Author: Michael W. Vogel
}
unit DockedOptionsFrame;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils,
// LCL
Forms, StdCtrls, Dialogs, ComCtrls, ColorBox, Controls, Graphics, Spin,
ExtCtrls,
// LazUtils
LazFileCache, LazFileUtils, LazLoggerBase,
// IdeIntf
IDEOptionsIntf, IDEOptEditorIntf, LazIDEIntf, DividerBevel,
// DockedFormEditor
DockedStrConsts, DockedOptionsIDE, DockedMainIDE;
type
{ TFrameDockedOptions }
TFrameDockedOptions = class(TAbstractIDEOptionsEditor)
cbEnableDockFormEd: TCheckBox;
CheckBoxAnchorTabVisible: TCheckBox;
CheckBoxForceRefreshing: TCheckBox;
CheckBoxTreatAlign: TCheckBox;
CheckBoxTreatBorder: TCheckBox;
CheckBoxAllowSizing: TCheckBox;
ColorBoxResizer: TColorBox;
ComboBoxTabPosition: TComboBox;
DividerBevelAnchors: TDividerBevel;
DividerBevel1: TDividerBevel;
LabelColors: TLabel;
LabelCaptureDistance: TLabel;
LabelMouseBorderFactor: TLabel;
LabelResizerColor: TLabel;
LabelTabPosition: TLabel;
AnchorsColorBox: TColorBox;
AnchorsColorListBox: TColorListBox;
Panel1: TPanel;
SpinEditCaptureDistance: TSpinEdit;
SpinEditMouseBorderFactor: TSpinEdit;
procedure cbEnableDockFormEdChange(Sender: TObject);
procedure CheckBoxAnchorTabVisibleChange(Sender: TObject);
procedure AnchorsColorBoxChange(Sender: TObject);
procedure AnchorsColorListBoxGetColors(Sender: TCustomColorListBox; Items: TStrings);
procedure AnchorsColorListBoxSelectionChange(Sender: TObject; User: Boolean);
private
FLastAllowSizing: Boolean;
FLastAnchorBorderColor: TColor;
FLastAnchorControlColor: TColor;
FLastAnchorTabsVisible: Boolean;
FLastAnchorTargetColor: TColor;
FLastAnchorTopColor: TColor;
FLastAnchorLeftColor: TColor;
FLastAnchorRightColor: TColor;
FLastAnchorBottomColor: TColor;
FLastCaptureDistance: Integer;
FLastForceRefreshing: Boolean;
FLastMouseBorderFactor: Integer;
FLastResizerColor: TColor;
FLastTabPosition: TTabPosition;
FLastTreatAlign: Boolean;
FLastTreatBorder: Boolean;
FReady: Boolean;
FDisableChanged: Boolean;
public
function GetTitle: String; override;
procedure Setup({%H-}ADialog: TAbstractOptionsEditorDialog); override;
procedure ReadSettings({%H-}AOptions: TAbstractIDEOptions); override;
procedure WriteSettings({%H-}AOptions: TAbstractIDEOptions); override;
procedure RestoreSettings({%H-}AOptions: TAbstractIDEOptions); override;
class function SupportedOptionsClass: TAbstractIDEOptionsClass; override;
end;
{ TFrameDisabledDockedOptions }
TFrameDisabledDockedOptions = class(TFrameDockedOptions)
constructor Create(AnOwner: TComponent); override;
end;
implementation
{$R *.lfm}
{ TFrameDockedOptions }
procedure TFrameDockedOptions.CheckBoxAnchorTabVisibleChange(Sender: TObject);
begin
CheckBoxAllowSizing.Enabled := CheckBoxAnchorTabVisible.Checked;
CheckBoxTreatAlign.Enabled := CheckBoxAnchorTabVisible.Checked;
CheckBoxTreatBorder.Enabled := CheckBoxAnchorTabVisible.Checked;
LabelColors.Enabled := CheckBoxAnchorTabVisible.Checked;
LabelCaptureDistance.Enabled := CheckBoxAnchorTabVisible.Checked;
LabelMouseBorderFactor.Enabled := CheckBoxAnchorTabVisible.Checked;
SpinEditCaptureDistance.Enabled := CheckBoxAnchorTabVisible.Checked;
SpinEditMouseBorderFactor.Enabled := CheckBoxAnchorTabVisible.Checked;
end;
procedure TFrameDockedOptions.cbEnableDockFormEdChange(Sender: TObject);
begin
FDisableChanged := True;
end;
procedure TFrameDockedOptions.AnchorsColorBoxChange(Sender: TObject);
var
i: Integer;
begin
i := AnchorsColorListBox.ItemIndex;
if not FReady or (i < 0) then Exit;
AnchorsColorListBox.Colors[i] := AnchorsColorBox.Selected;
end;
procedure TFrameDockedOptions.AnchorsColorListBoxGetColors(Sender: TCustomColorListBox; Items: TStrings);
var
LStr: String;
begin
for LStr in AnchorColorStr do
Items.Add(LStr);
end;
procedure TFrameDockedOptions.AnchorsColorListBoxSelectionChange(Sender: TObject; User: Boolean);
begin
if not (FReady and User) then
Exit;
AnchorsColorBox.Selected := AnchorsColorListBox.Selected;
end;
function TFrameDockedOptions.GetTitle: String;
begin
Result := SCaptionDockedFormEditor;
end;
procedure TFrameDockedOptions.Setup(ADialog: TAbstractOptionsEditorDialog);
var
ATabPosition: TTabPosition;
begin
FReady := false;
ComboBoxTabPosition.Items.Clear;
for ATabPosition := Low(TTabPosition) to High(TTabPosition) do
ComboBoxTabPosition.Items.Add(STabPosition[ATabPosition]);
CheckBoxAllowSizing.Caption := SAllowSizingCaption;
CheckBoxAnchorTabVisible.Caption := SAnchorTabVisibleCaption;
CheckBoxForceRefreshing.Caption := SForceRefreshingCaption;
CheckBoxTreatAlign.Caption := STreatAlignCaption;
CheckBoxTreatBorder.Caption := STreatBorderCaption;
DividerBevelAnchors.Caption := SAnchors;
LabelColors.Caption := SColorsCaption;
LabelResizerColor.Caption := SResizerColorCaption;
LabelTabPosition.Caption := STabPositionCaption;
LabelCaptureDistance.Caption := SCaptureDistanceCaption;
LabelMouseBorderFactor.Caption := SMouseBorderFactorCaption;
cbEnableDockFormEd.Caption := SEnableDockedDsgner;
CheckBoxAllowSizing.Hint := SAllowSizingHint;
CheckBoxAnchorTabVisible.Hint := SAnchorTabVisibleHint;
CheckBoxTreatAlign.Hint := STreatAlignHint;
CheckBoxTreatBorder.Hint := StreatBorderHint;
CheckBoxForceRefreshing.Hint := SForceRefreshingHint;
ColorBoxResizer.Hint := SResizerColorHint;
ComboBoxTabPosition.Hint := STabPositionHint;
SpinEditCaptureDistance.Hint := SCaptureDistanceHint;
SpinEditMouseBorderFactor.Hint := SMouseBorderFactorHint;
end;
procedure TFrameDockedOptions.ReadSettings(AOptions: TAbstractIDEOptions);
begin
FLastAllowSizing := DockedOptions.AllowSizing;
FLastAnchorBorderColor := DockedOptions.AnchorBorderColor;
FLastAnchorControlColor := DockedOptions.AnchorControlColor;
FLastAnchorTabsVisible := DockedOptions.AnchorTabVisible;
FLastAnchorTargetColor := DockedOptions.AnchorTargetColor;
FLastAnchorTopColor := DockedOptions.AnchorTopColor;
FLastAnchorLeftColor := DockedOptions.AnchorLeftColor;
FLastAnchorRightColor := DockedOptions.AnchorRightColor;
FLastAnchorBottomColor := DockedOptions.AnchorBottomColor;
FLastCaptureDistance := DockedOptions.CaptureDistance;
FLastForceRefreshing := DockedOptions.ForceRefreshing;
FLastMouseBorderFactor := DockedOptions.MouseBorderFactor;
FLastResizerColor := DockedOptions.ResizerColor;
FLastTabPosition := DockedOptions.TabPosition;
FLastTreatAlign := DockedOptions.TreatAlign;
FLastTreatBorder := DockedOptions.TreatBorder;
cbEnableDockFormEd.Checked := DockedOptions.EnableDockedDesigner;
FDisableChanged := False;
RestoreSettings(AOptions);
FReady := true;
end;
procedure TFrameDockedOptions.WriteSettings(AOptions: TAbstractIDEOptions);
begin
DockedOptions.AllowSizing := CheckBoxAllowSizing.Checked;
DockedOptions.AnchorBorderColor := AnchorsColorListBox.Colors[ord(acControlBorder)];
DockedOptions.AnchorControlColor := AnchorsColorListBox.Colors[ord(acControl)];
DockedOptions.AnchorTopColor := AnchorsColorListBox.Colors[ord(acAnchorTop)];
DockedOptions.AnchorLeftColor := AnchorsColorListBox.Colors[ord(acAnchorLeft)];
DockedOptions.AnchorRightColor := AnchorsColorListBox.Colors[ord(acAnchorRight)];
DockedOptions.AnchorBottomColor := AnchorsColorListBox.Colors[ord(acAnchorBottom)];
DockedOptions.AnchorTargetColor := AnchorsColorListBox.Colors[ord(acAnchorTarget)];
DockedOptions.AnchorTabVisible := CheckBoxAnchorTabVisible.Checked;
DockedOptions.CaptureDistance := SpinEditCaptureDistance.Value;
DockedOptions.ForceRefreshing := CheckBoxForceRefreshing.Checked;
DockedOptions.MouseBorderFactor := SpinEditMouseBorderFactor.Value;
DockedOptions.ResizerColor := ColorBoxResizer.Selected;
DockedOptions.TabPosition := TTabPosition(ComboBoxTabPosition.ItemIndex);
DockedOptions.TreatAlign := CheckBoxTreatAlign.Checked;
DockedOptions.TreatBorder := CheckBoxTreatBorder.Checked;
if FDisableChanged then
DockedOptions.DoneAskUserEnableDockedDesigner := True;
DockedOptions.EnableDockedDesigner := cbEnableDockFormEd.Checked;
if DockedOptions.Modified then
begin
DockedOptions.SaveSafe;
if Assigned(DockedTabMaster) then
DockedTabMaster.OptionsModified;
end;
end;
procedure TFrameDockedOptions.RestoreSettings(AOptions: TAbstractIDEOptions);
begin
AnchorsColorListBox.Colors[ord(acControlBorder)] := DockedOptions.AnchorBorderColor;
AnchorsColorListBox.Colors[ord(acControl)] := DockedOptions.AnchorControlColor;
AnchorsColorListBox.Colors[ord(acAnchorTop)] := DockedOptions.AnchorTopColor;
AnchorsColorListBox.Colors[ord(acAnchorLeft)] := DockedOptions.AnchorLeftColor;
AnchorsColorListBox.Colors[ord(acAnchorRight)] := DockedOptions.AnchorRightColor;
AnchorsColorListBox.Colors[ord(acAnchorBottom)] := DockedOptions.AnchorBottomColor;
AnchorsColorListBox.Colors[ord(acAnchorTarget)] := DockedOptions.AnchorTargetColor;
CheckBoxAnchorTabVisible.Checked := FLastAnchorTabsVisible;
CheckBoxAnchorTabVisible.OnChange(nil);
CheckBoxAllowSizing.Checked := FLastAllowSizing;
CheckBoxForceRefreshing.Checked := FLastForceRefreshing;
CheckBoxTreatAlign.Checked := FLastTreatAlign;
CheckBoxTreatBorder.Checked := FLastTreatBorder;
ColorBoxResizer.Selected := FLastResizerColor;
ComboBoxTabPosition.ItemIndex := Integer(FLastTabPosition);
SpinEditCaptureDistance.Value := FLastCaptureDistance;
SpinEditMouseBorderFactor.Value := FLastMouseBorderFactor;
end;
class function TFrameDockedOptions.SupportedOptionsClass: TAbstractIDEOptionsClass;
begin
Result := IDEEditorGroups.GetByIndex(GroupEnvironment)^.GroupClass;
end;
{ TFrameDisabledDockedOptions }
constructor TFrameDisabledDockedOptions.Create(AnOwner: TComponent);
begin
inherited Create(AnOwner);
Panel1.Visible := False;
end;
end.