mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-06 18:24:26 +08:00
198 lines
5.9 KiB
ObjectPascal
198 lines
5.9 KiB
ObjectPascal
unit customize_highlighter;
|
|
|
|
{$mode delphi}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
SysUtils, Variants, Classes, Graphics, EditBtn,
|
|
Controls, Forms, Dialogs, StdCtrls, ExtCtrls,
|
|
StrUtils, SynEditHighlighter, apphelpers, extra_controls;
|
|
|
|
type
|
|
TfrmCustomizeHighlighter = class(TExtForm)
|
|
comboHighlighter: TComboBox;
|
|
listboxAttributes: TListBox;
|
|
lblBackground: TLabel;
|
|
lblForeground: TLabel;
|
|
lblStyle: TLabel;
|
|
chkBold: TCheckBox;
|
|
chkItalic: TCheckBox;
|
|
btnCancel: TButton;
|
|
btnOK: TButton;
|
|
editBackground: TEditButton;
|
|
editForeground: TEditButton;
|
|
btnApply: TButton;
|
|
procedure listboxAttributesClick(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure comboHighlighterSelect(Sender: TObject);
|
|
procedure SaveSettings(Sender: TObject);
|
|
procedure editColorRightButtonClick(Sender: TObject);
|
|
procedure Modified(Sender: TObject);
|
|
procedure FormDestroy(Sender: TObject);
|
|
procedure FormShow(Sender: TObject);
|
|
private
|
|
{ Private-Deklarationen }
|
|
FHighlighter: TSynCustomHighlighter;
|
|
FAttr: TSynHighlighterAttributes;
|
|
FOnChange: TNotifyEvent;
|
|
procedure SetFriendlyLanguageName(FriendlyLanguageName: String);
|
|
function GetFriendlyLanguageName: String;
|
|
public
|
|
{ Public-Deklarationen }
|
|
property FriendlyLanguageName: String read GetFriendlyLanguageName write SetFriendlyLanguageName;
|
|
property OnChange: TNotifyEvent read FOnChange write FOnChange;
|
|
end;
|
|
|
|
|
|
implementation
|
|
|
|
uses main;
|
|
|
|
{$R *.lfm}
|
|
|
|
procedure TfrmCustomizeHighlighter.SaveSettings(Sender: TObject);
|
|
begin
|
|
// Save highlighter settings
|
|
FHighlighter.SaveToFile(AppSettings.DirnameHighlighters + FHighlighter.LanguageName + '.ini');
|
|
if Assigned(FOnChange) then
|
|
FOnChange(Self);
|
|
end;
|
|
|
|
procedure TfrmCustomizeHighlighter.Modified(Sender: TObject);
|
|
begin
|
|
// Apply modification to current attribute
|
|
// Silence exception caused by invalid color strings
|
|
FAttr.Background := StringToColorDef(editBackground.Text, clNone);
|
|
FAttr.Foreground := StringToColorDef(editForeground.Text, clNone);
|
|
if chkBold.Checked then
|
|
FAttr.Style := FAttr.Style + [fsBold]
|
|
else
|
|
FAttr.Style := FAttr.Style - [fsBold];
|
|
if chkItalic.Checked then
|
|
FAttr.Style := FAttr.Style + [fsItalic]
|
|
else
|
|
FAttr.Style := FAttr.Style - [fsItalic];
|
|
end;
|
|
|
|
procedure TfrmCustomizeHighlighter.comboHighlighterSelect(Sender: TObject);
|
|
var
|
|
i: Integer;
|
|
Highlighters: TSynHighlighterList;
|
|
begin
|
|
// Highlighter selected
|
|
listboxAttributes.Clear;
|
|
if Assigned(FHighlighter) then
|
|
FHighlighter.Free;
|
|
Highlighters := SynEditHighlighter.GetPlaceableHighlighters;
|
|
for i:=0 to Highlighters.Count-1 do begin
|
|
if Highlighters[i].GetLanguageName = comboHighlighter.Text then begin
|
|
FHighlighter := Highlighters[i].Create(Self);
|
|
Break;
|
|
end;
|
|
end;
|
|
FHighlighter.LoadFromFile(AppSettings.DirnameHighlighters + FHighlighter.GetLanguageName + '.ini');
|
|
for i:=0 to FHighlighter.AttrCount-1 do begin
|
|
listboxAttributes.Items.Add(FHighlighter.Attribute[i].Name);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmCustomizeHighlighter.editColorRightButtonClick(
|
|
Sender: TObject);
|
|
var
|
|
Dialog: TColorDialog;
|
|
Edit: TEditButton;
|
|
begin
|
|
// Color picker
|
|
Edit := Sender as TEditButton;
|
|
Dialog := TColorDialog.Create(Self);
|
|
//Dialog.Options := [cdFullOpen, cdAnyColor];
|
|
Dialog.Color := StringToColorDef(Edit.Text, clNone);
|
|
if Dialog.Execute then begin
|
|
Edit.Text := ColorToString(Dialog.Color);
|
|
end;
|
|
Dialog.Free;
|
|
Modified(Sender);
|
|
end;
|
|
|
|
procedure TfrmCustomizeHighlighter.FormCreate(Sender: TObject);
|
|
var
|
|
Highlighters: TSynHighlighterList;
|
|
i: Integer;
|
|
begin
|
|
// Form created
|
|
FHighlighter := nil;
|
|
FAttr := nil;
|
|
FOnChange := nil;
|
|
Highlighters := SynEditHighlighter.GetPlaceableHighlighters;
|
|
for i:=0 to Highlighters.Count-1 do begin
|
|
comboHighlighter.Items.Add(Highlighters[i].GetLanguageName);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmCustomizeHighlighter.FormDestroy(Sender: TObject);
|
|
begin
|
|
// Form destroyed
|
|
if Assigned(FHighlighter) then
|
|
FHighlighter.Free;
|
|
// causes an exception when closing:
|
|
//if Assigned(FAttr) then
|
|
// FAttr.Free;
|
|
end;
|
|
|
|
procedure TfrmCustomizeHighlighter.FormShow(Sender: TObject);
|
|
begin
|
|
// Ensure controls are disabled as long as no attribute is selected
|
|
listboxAttributes.OnClick(Sender);
|
|
end;
|
|
|
|
procedure TfrmCustomizeHighlighter.listboxAttributesClick(Sender: TObject);
|
|
var
|
|
i: Integer;
|
|
AttrSelected: Boolean;
|
|
begin
|
|
// Attribute selected
|
|
FAttr := nil;
|
|
if listboxAttributes.ItemIndex > -1 then begin
|
|
for i:=0 to FHighlighter.AttrCount-1 do begin
|
|
if listboxAttributes.Items[listboxAttributes.ItemIndex] = FHighlighter.Attribute[i].Name then begin
|
|
FAttr := FHighlighter.Attribute[i];
|
|
end;
|
|
end;
|
|
end;
|
|
// Enable/disable controls
|
|
AttrSelected := FAttr <> nil;
|
|
editBackground.Enabled := AttrSelected;
|
|
editForeground.Enabled := AttrSelected;
|
|
chkBold.Enabled := AttrSelected;
|
|
chkItalic.Enabled := AttrSelected;
|
|
// Overtake values
|
|
if AttrSelected then begin
|
|
editBackground.Text := IfThen(FAttr.Background <> clNone, ColorToString(FAttr.Background), '');
|
|
editForeground.Text := IfThen(FAttr.Foreground <> clNone, ColorToString(FAttr.Foreground), '');
|
|
chkBold.Checked := fsBold in FAttr.Style;
|
|
chkItalic.Checked := fsItalic in FAttr.Style;
|
|
end
|
|
else begin
|
|
editBackground.Text := '';
|
|
editForeground.Text := '';
|
|
chkBold.Checked := False;
|
|
chkItalic.Checked := False;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmCustomizeHighlighter.SetFriendlyLanguageName(FriendlyLanguageName: String);
|
|
begin
|
|
// Set current highlighter by its language name
|
|
comboHighlighter.ItemIndex := comboHighlighter.Items.IndexOf(FriendlyLanguageName);
|
|
comboHighlighter.OnSelect(comboHighlighter);
|
|
end;
|
|
|
|
function TfrmCustomizeHighlighter.GetFriendlyLanguageName: String;
|
|
begin
|
|
Result := FHighlighter.GetLanguageName;
|
|
end;
|
|
|
|
|
|
end.
|