
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2312 8e941d3f-bd1b-0410-a28a-d453659cc2b4
290 lines
8.8 KiB
ObjectPascal
290 lines
8.8 KiB
ObjectPascal
unit Options;
|
|
|
|
{$include lazhexeditor.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
{$IFDEF FPC}
|
|
LCLType, LCLIntf, LResources,
|
|
{$ELSE}
|
|
Windows, Messages,
|
|
{$ENDIF}
|
|
SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
|
StdCtrls, ComCtrls, ExtCtrls, KControls, KHexEditor, Basic;
|
|
|
|
type
|
|
|
|
{ TOptionsForm }
|
|
|
|
TOptionsForm = class(TForm)
|
|
BUOk: TButton;
|
|
BuCancel: TButton;
|
|
PCMain: TPageControl;
|
|
TSEditorOptions: TTabSheet;
|
|
TSColors: TTabSheet;
|
|
LiBColors: TListBox;
|
|
LBAttributes: TLabel;
|
|
GBGeneral: TGroupBox;
|
|
CBDropFiles: TCheckBox;
|
|
CBUndoAfterSave: TCheckBox;
|
|
GBColors: TGroupBox;
|
|
LBHighFG: TLabel;
|
|
TSEditorFont: TTabSheet;
|
|
CoBFontName: TComboBox;
|
|
LBFontName: TLabel;
|
|
PNFontSample: TPanel;
|
|
LBSample: TLabel;
|
|
BUDefault: TButton;
|
|
CBGroupUndo: TCheckBox;
|
|
RGAddressMode: TRadioGroup;
|
|
RGDisabledDrawStyle: TRadioGroup;
|
|
GBAppearance: TGroupBox;
|
|
CBShowAddress: TCheckBox;
|
|
CBShowDigits: TCheckBox;
|
|
CBShowText: TCheckBox;
|
|
CBShowHorzLines: TCheckBox;
|
|
CBShowVertLines: TCheckBox;
|
|
CBShowSeparators: TCheckBox;
|
|
CBShowInactiveCaret: TCheckBox;
|
|
BUColorChange: TButton;
|
|
LBAddressPrefix: TLabel;
|
|
EDAddressPrefix: TEdit;
|
|
EDAddressSize: TEdit;
|
|
LBAddressSize: TLabel;
|
|
LBCharSpacing: TLabel;
|
|
EDCharSpacing: TEdit;
|
|
LBDigitGrouping: TLabel;
|
|
EDDigitGrouping: TEdit;
|
|
EDLineSize: TEdit;
|
|
LBLineSize: TLabel;
|
|
LBbytes: TLabel;
|
|
LBpoints: TLabel;
|
|
LBbytes2: TLabel;
|
|
LBLineHeightPercent: TLabel;
|
|
EDLineHeightPercent: TEdit;
|
|
LBpercent: TLabel;
|
|
LBUndoLimit: TLabel;
|
|
EDUndoLimit: TEdit;
|
|
LBFontSize: TLabel;
|
|
EDFontSize: TEdit;
|
|
SHColor: TShape;
|
|
CBFontStyleBold: TCheckBox;
|
|
CBFontStyleItalic: TCheckBox;
|
|
CDChange: TColorDialog;
|
|
procedure CoBFontNameClick(Sender: TObject);
|
|
procedure BUDefaultClick(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure EDFontSizeExit(Sender: TObject);
|
|
procedure LiBColorsClick(Sender: TObject);
|
|
procedure BUColorChangeClick(Sender: TObject);
|
|
procedure LiBColorsDrawItem(Control: TWinControl; Index: Integer;
|
|
Rect: TRect; State: TOwnerDrawState);
|
|
procedure LiBColorsMouseMove(Sender: TObject; Shift: TShiftState; X,
|
|
Y: Integer);
|
|
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
|
|
private
|
|
FColors: TKColorArray;
|
|
procedure UpdateFontSample;
|
|
public
|
|
procedure SetData(const Data: TEnvironment; AColors: TKColorArray);
|
|
procedure GetData(var Data: TEnvironment; AColors: TKColorArray);
|
|
end;
|
|
|
|
var
|
|
OptionsForm: TOptionsForm;
|
|
|
|
implementation
|
|
|
|
uses
|
|
Math;
|
|
|
|
{ TOptionsForm }
|
|
|
|
procedure TOptionsForm.FormCreate(Sender: TObject);
|
|
var
|
|
I: TKHexEditorColorIndex;
|
|
begin
|
|
PCMain.ActivePageIndex := 0;
|
|
InitColors(FColors);
|
|
for I := 0 to Length(FColors) - 1 do
|
|
LiBColors.Items.Add(GetColorSpec(I).Name);
|
|
end;
|
|
|
|
procedure TOptionsForm.GetData(var Data: TEnvironment; AColors: TKColorArray);
|
|
begin
|
|
with Data do
|
|
begin
|
|
P.DropFiles := CBDropFiles.Checked;
|
|
P.GroupUndo := CBGroupUndo.Checked;
|
|
P.UndoAfterSave := CBUndoAfterSave.Checked;
|
|
P.ShowAddress := CBShowAddress.Checked;
|
|
P.ShowDigits := CBShowDigits.Checked;
|
|
P.ShowText := CBShowText.Checked;
|
|
P.ShowHorzLines := CBShowHorzLines.Checked;
|
|
P.ShowVertLines := CBShowVertLines.Checked;
|
|
P.ShowSeparators := CBShowSeparators.Checked;
|
|
P.ShowInactiveCaret := CBShowInactiveCaret.Checked;
|
|
P.AddressMode := RGAddressMode.ItemIndex;
|
|
AddressPrefix := EDAddressPrefix.Text;
|
|
P.AddressSize := StrToIntDef(EDAddressSize.Text, P.AddressSize);
|
|
P.CharSpacing := StrToIntDef(EDCharSpacing.Text, P.CharSpacing);
|
|
P.DigitGrouping := StrToIntDef(EDDigitGrouping.Text, P.DigitGrouping);
|
|
P.DisabledDrawStyle := RGDisabledDrawStyle.ItemIndex;
|
|
P.LineHeightPercent := StrToIntDef(EDLineHeightPercent.Text, P.LineHeightPercent);
|
|
P.LineSize := StrToIntDef(EDLineSize.Text, P.LineSize);
|
|
P.UndoLimit := StrToIntDef(EDUndoLimit.Text, P.UndoLimit);
|
|
FontName := CoBFontName.Text;
|
|
P.FontSize := StrToIntDef(EDFontSize.Text, P.FontSize);
|
|
P.FontStyle := [];
|
|
if CBFontStyleBold.Checked then Include(P.FontStyle, fsBold);
|
|
if CBFontStyleItalic.Checked then Include(P.FontStyle, fsItalic);
|
|
CopyColors(FColors, AColors);
|
|
end;
|
|
end;
|
|
|
|
procedure TOptionsForm.SetData(const Data: TEnvironment; AColors: TKColorArray);
|
|
begin
|
|
with Data do
|
|
begin
|
|
CBDropFiles.Checked := P.DropFiles;
|
|
CBGroupUndo.Checked := P.GroupUndo;
|
|
CBUndoAfterSave.Checked := P.UndoAfterSave;
|
|
CBShowAddress.Checked := P.ShowAddress;
|
|
CBShowDigits.Checked := P.ShowDigits;
|
|
CBShowText.Checked := P.ShowText;
|
|
CBShowHorzLines.Checked := P.ShowHorzLines;
|
|
CBShowVertLines.Checked := P.ShowVertLines;
|
|
CBShowSeparators.Checked := P.ShowSeparators;
|
|
CBShowInactiveCaret.Checked := P.ShowInactiveCaret;
|
|
RGAddressMode.ItemIndex := P.AddressMode;
|
|
EDAddressPrefix.Text := AddressPrefix;
|
|
EDAddressSize.Text := IntToStr(P.AddressSize);
|
|
EDCharSpacing.Text := IntToStr(P.CharSpacing);
|
|
EDDigitGrouping.Text := IntToStr(P.DigitGrouping);
|
|
RGDisabledDrawStyle.ItemIndex := P.DisabledDrawStyle;
|
|
EDLineHeightPercent.Text := IntToSTr(P.LineHeightPercent);
|
|
EDLineSize.Text := IntToStr(P.LineSize);
|
|
EDUndoLimit.Text := IntToStr(P.UndoLimit);
|
|
CobFontName.Items.Clear;
|
|
AddFontsToList(Canvas.Handle, CoBFontName.Items, fpFixed);
|
|
CoBFontName.ItemIndex := Max(CoBFontName.Items.IndexOf(FontName), Min(0, CobFontName.Items.Count - 1));
|
|
EDFontSize.Text := IntToStr(P.FontSize);
|
|
CBFontStyleBold.Checked := fsBold in P.FontStyle;
|
|
CBFontStyleItalic.Checked := fsItalic in P.FontStyle;
|
|
UpdateFontSample;
|
|
CopyColors(AColors, FColors);
|
|
LiBColors.Invalidate;
|
|
if LiBColors.ItemIndex < 0 then LiBColors.ItemIndex := 0;
|
|
LiBColorsClick(nil);
|
|
end;
|
|
end;
|
|
|
|
procedure TOptionsForm.UpdateFontSample;
|
|
var
|
|
Ok: Boolean;
|
|
FontStyle: TFontStyles;
|
|
begin
|
|
if CoBFontName.Text <> '' then
|
|
begin
|
|
Ok := True;
|
|
with PNFontSample.Font do
|
|
begin
|
|
Name := CoBFontName.Text;
|
|
Size := EditStrToInt(Self.Handle, EDFontSize, cFontSizeMin, cFontSizeMax, cFontSizeDef, Ok);
|
|
FontStyle := [];
|
|
if CBFontStyleBold.Checked then Include(FontStyle, fsBold);
|
|
if CBFontStyleItalic.Checked then Include(FontStyle, fsItalic);
|
|
Style := FontStyle;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TOptionsForm.CoBFontNameClick(Sender: TObject);
|
|
begin
|
|
UpdateFontSample;
|
|
end;
|
|
|
|
procedure TOptionsForm.EDFontSizeExit(Sender: TObject);
|
|
begin
|
|
UpdateFontSample;
|
|
end;
|
|
|
|
procedure TOptionsForm.BUDefaultClick(Sender: TObject);
|
|
var
|
|
AEnv: TEnvironment;
|
|
AColors: TKColorArray;
|
|
begin
|
|
InitEnvironment(AEnv);
|
|
InitColors(AColors);
|
|
SetData(AEnv, AColors);
|
|
end;
|
|
|
|
procedure TOptionsForm.BUColorChangeClick(Sender: TObject);
|
|
begin
|
|
CDChange.Color := FColors[TKHexEditorColorIndex(LiBColors.ItemIndex)];
|
|
if CDChange.Execute then
|
|
begin
|
|
FColors[TKHexEditorColorIndex(LiBColors.ItemIndex)] := CDChange.Color;
|
|
LiBColors.Invalidate;
|
|
LiBColorsClick(nil);
|
|
end;
|
|
end;
|
|
|
|
procedure TOptionsForm.LiBColorsClick(Sender: TObject);
|
|
begin
|
|
SHColor.Brush.Color := FColors[TKHexEditorColorIndex(LiBColors.ItemIndex)];
|
|
end;
|
|
|
|
procedure TOptionsForm.LiBColorsDrawItem(Control: TWinControl;
|
|
Index: Integer; Rect: TRect; State: TOwnerDrawState);
|
|
begin
|
|
with (Control as TListBox).Canvas do
|
|
begin
|
|
FillRect(Rect);
|
|
Brush.Color := FColors[TKHexEditorColorIndex(Index)];
|
|
Pen.Color := clWindowText;
|
|
Rectangle(Rect.Left + 2, Rect.Top + 1, Rect.Left + 16, Rect.Bottom - 1);
|
|
SetBKMode(Handle, TRANSPARENT);
|
|
TextOut(Rect.Left + 20, Rect.Top, LiBColors.Items[Index]);
|
|
// to ensure coming DrawFocusRect will be painted correctly:
|
|
SetBkColor(Handle, ColorToRGB(clWindow));
|
|
SetTextColor(Handle, ColorToRGB(clWindowText));
|
|
end;
|
|
end;
|
|
|
|
procedure TOptionsForm.LiBColorsMouseMove(Sender: TObject;
|
|
Shift: TShiftState; X, Y: Integer);
|
|
begin
|
|
if (ssLeft in Shift) then
|
|
LiBColorsClick(nil);
|
|
end;
|
|
|
|
procedure TOptionsForm.FormCloseQuery(Sender: TObject;
|
|
var CanClose: Boolean);
|
|
var
|
|
Ok: Boolean;
|
|
begin
|
|
if ModalResult = mrOk then
|
|
begin
|
|
Ok := True;
|
|
EditStrToInt(Handle, EDAddressSize, cAddressSizeMin, cAddressSizeMax, cAddressSizeDef, Ok);
|
|
EditStrToInt(Handle, EDCharSpacing, cCharSpacingMin, cCharSpacingMax, cCharSpacingDef, Ok);
|
|
EditStrToInt(Handle, EDDigitGrouping, cDigitGroupingMin, cDigitGroupingMax, cDigitGroupingDef, Ok);
|
|
EditStrToInt(Handle, EDLineHeightPercent, cLineHeightPercentMin, cLineHeightPercentMax, cLineHeightPercentDef, Ok);
|
|
EditStrToInt(Handle, EDLineSize, cLineSizeMin, cLineSizeMax, cLineSizeDef, Ok);
|
|
EditStrToInt(Handle, EDUndoLimit, cUndoLimitMin, cUndoLimitMax, cUndoLimitDef, Ok);
|
|
EditStrToInt(Handle, EDFontSize, cFontSizeMin, cFontSizeMax, cFontSizeDef, Ok);
|
|
CanClose := Ok;
|
|
end;
|
|
end;
|
|
|
|
{$IFDEF FPC}
|
|
initialization
|
|
{$i options.lrs}
|
|
{$ELSE}
|
|
{$R *.dfm}
|
|
{$ENDIF}
|
|
end.
|
|
|