mirror of https://gitlab.com/basile.b/dexed.git
819 lines
25 KiB
Plaintext
819 lines
25 KiB
Plaintext
unit u_d2synpresets;
|
|
{$I u_defines.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, SynEditMiscClasses, Graphics, Forms, Controls, StdCtrls,
|
|
ExtCtrls, SynEditHighlighter, SynEditTypes, SynEdit, RTTIGrids, Buttons,
|
|
u_interfaces, u_common, u_writableComponent, u_d2syn, u_observer,
|
|
u_editoroptions, u_sharedres, u_txtsyn;
|
|
|
|
type
|
|
|
|
TAttribHelper = class helper for TSynHighlighterAttributes
|
|
procedure define(
|
|
fore: TColor;
|
|
Stl: TFontStyles = [];
|
|
bck: TColor = clNone;
|
|
frCol: TColor = clNone;
|
|
frStyle: TSynLineStyle = slsSolid;
|
|
frEdges: TSynFrameEdges = sfeNone;
|
|
stlMsk: TFontStyles = []);
|
|
end;
|
|
|
|
(**
|
|
* persistent class used to store a highlighter preset.
|
|
*)
|
|
TD2SynPreset = class(TCollectionItem)
|
|
private
|
|
fBackground: TColor;
|
|
fBracketMatchAttribs: TSynSelectedColor;
|
|
fCurrLineAttribs: TSynSelectedColor;
|
|
fFoldedColor: TSynSelectedColor;
|
|
fIdentifierMarkup: TSynSelectedColor;
|
|
fMouseLinkAttribs: TSynSelectedColor;
|
|
fSelAttribs: TSynSelectedColor;
|
|
fd2syn: TPersistent;
|
|
fName: string;
|
|
fIsHardcoded: boolean;
|
|
procedure setBracketMatchColor(value: TSynSelectedColor);
|
|
procedure setCurrLineAttribs(value: TSynSelectedColor);
|
|
procedure setFoldedColor(value: TSynSelectedColor);
|
|
procedure setIdentifierMarkup(value: TSynSelectedColor);
|
|
procedure setMouseLinkColor(value: TSynSelectedColor);
|
|
procedure setSelCol(value: TSynSelectedColor);
|
|
procedure setD2syn(value: TPersistent);
|
|
function getHl: TSynD2Syn;
|
|
published
|
|
property name: string read fName write fName stored true;
|
|
property highlighter: TPersistent read fd2syn write setD2Syn stored true;
|
|
property background: TColor read fBackground write fBackground stored true;
|
|
property bracketMatch: TSynSelectedColor read fBracketMatchAttribs write setBracketMatchColor stored true;
|
|
property currentLine: TSynSelectedColor read fCurrLineAttribs write setCurrLineAttribs stored true;
|
|
property folding: TSynSelectedColor read fFoldedColor write setFoldedColor stored true;
|
|
property identifierMatch: TSynSelectedColor read fIdentifierMarkup write setIdentifierMarkup stored true;
|
|
property mouseLink: TSynSelectedColor read fMouseLinkAttribs write setMouseLinkColor stored true;
|
|
property selection: TSynSelectedColor read fSelAttribs write setSelCol stored true;
|
|
property isHardCoded: boolean read fIsHardcoded stored false;
|
|
public
|
|
constructor Create(ACollection: TCollection); override;
|
|
destructor destroy; override;
|
|
procedure assignToOptions;
|
|
procedure assignFromOptions;
|
|
procedure Assign(source: TPersistent); override;
|
|
end;
|
|
|
|
TD2SynPresets = class(TWritableLfmTextComponent)
|
|
private
|
|
fCollection: TCollection;
|
|
procedure setCollection(value: TCollection);
|
|
function getPreset(index: integer): TD2SynPreset;
|
|
published
|
|
property presets: TCollection read fCollection write setCollection;
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
function addPreset: TD2SynPreset;
|
|
function insertPreset(index: integer): TD2SynPreset;
|
|
function count: integer;
|
|
property preset[index: integer]: TD2SynPreset read getPreset ; default;
|
|
end;
|
|
|
|
(**
|
|
* UI for loading highlighter presets in the options editor.
|
|
*)
|
|
TD2SynPresetsLoaderForm = class(TWinControl, IEditableOptions)
|
|
private
|
|
fPresets: TD2SynPresets;
|
|
fList: TComboBox;
|
|
fEditor: TSynEdit;
|
|
fPropEd: TTIPropertyGrid;
|
|
fBackup: TD2SynPreset;
|
|
function optionedWantCategory(): string;
|
|
function optionedWantEditorKind: TOptionEditorKind;
|
|
function optionedWantContainer: TPersistent;
|
|
procedure optionedEvent(event: TOptionEditorEvent);
|
|
function optionedOptionsModified: boolean;
|
|
procedure lstBoxSelChange(Sender: TObject);
|
|
procedure btnAddClick(sender: TObject);
|
|
procedure btnDelClick(sender: TObject);
|
|
procedure btnCloneClick(sender: TObject);
|
|
procedure propEdModified(sender: TObject);
|
|
procedure updateList;
|
|
procedure updateEditor;
|
|
protected
|
|
procedure SetVisible(Value: Boolean); override;
|
|
private
|
|
fCloneBtn: TBitBtn;
|
|
fAddBtn: TBitBtn;
|
|
fDelBtn: TBitBtn;
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
end;
|
|
|
|
implementation
|
|
|
|
const
|
|
optfname = 'highlighterPresets.txt';
|
|
|
|
var
|
|
presetsLoaderForm: TD2SynPresetsLoaderForm;
|
|
|
|
{$REGION TD2SynPreset -------------------------------------------------------}
|
|
constructor TD2SynPreset.create(ACollection: TCollection);
|
|
begin
|
|
inherited Create(ACOllection);
|
|
fBracketMatchAttribs:= TSynSelectedColor.Create;
|
|
fCurrLineAttribs:= TSynSelectedColor.Create;
|
|
fFoldedColor:= TSynSelectedColor.Create;
|
|
fIdentifierMarkup:= TSynSelectedColor.Create;
|
|
fMouseLinkAttribs:= TSynSelectedColor.Create;
|
|
fSelAttribs:= TSynSelectedColor.Create;
|
|
fd2syn := TSynD2Syn.create(nil);
|
|
end;
|
|
|
|
destructor TD2SynPreset.destroy;
|
|
begin
|
|
fBracketMatchAttribs.free;
|
|
fCurrLineAttribs.free;
|
|
fFoldedColor.free;
|
|
fIdentifierMarkup.free;
|
|
fMouseLinkAttribs.free;
|
|
fSelAttribs.free;
|
|
fd2syn.Free;
|
|
inherited;
|
|
end;
|
|
|
|
procedure TD2SynPreset.setD2syn(value: TPersistent);
|
|
begin
|
|
fd2syn.Assign(value);
|
|
end;
|
|
|
|
function TD2SynPreset.getHl: TSynD2Syn;
|
|
begin
|
|
exit(TSynD2Syn(fd2syn));
|
|
end;
|
|
|
|
procedure TD2SynPreset.setBracketMatchColor(value: TSynSelectedColor);
|
|
begin
|
|
fBracketMatchAttribs.Assign(value);
|
|
end;
|
|
|
|
procedure TD2SynPreset.setCurrLineAttribs(value: TSynSelectedColor);
|
|
begin
|
|
fCurrLineAttribs.Assign(value);
|
|
end;
|
|
|
|
procedure TD2SynPreset.setFoldedColor(value: TSynSelectedColor);
|
|
begin
|
|
fFoldedColor.Assign(value);
|
|
end;
|
|
|
|
procedure TD2SynPreset.setIdentifierMarkup(value: TSynSelectedColor);
|
|
begin
|
|
fIdentifierMarkup.Assign(value);
|
|
end;
|
|
|
|
procedure TD2SynPreset.setMouseLinkColor(value: TSynSelectedColor);
|
|
begin
|
|
fMouseLinkAttribs.Assign(value);
|
|
end;
|
|
|
|
procedure TD2SynPreset.setSelCol(value: TSynSelectedColor);
|
|
begin
|
|
fSelAttribs.Assign(value);
|
|
end;
|
|
|
|
procedure TD2SynPreset.assignToOptions;
|
|
begin
|
|
EditorOptions.background:=background;
|
|
EditorOptions.highlighterDlang.Assign(highlighter);
|
|
EditorOptions.bracketMatch.Assign(bracketMatch);
|
|
EditorOptions.currentLine.Assign(currentLine);
|
|
EditorOptions.folding.Assign(folding);
|
|
EditorOptions.identifierMatch.Assign(identifierMatch);
|
|
EditorOptions.mouseLink.Assign(mouseLink);
|
|
EditorOptions.selection.Assign(selection);
|
|
TSynTxtSyn(EditorOptions.highlighterGeneric).whites.Assign(getHl.whites);
|
|
TSynTxtSyn(EditorOptions.highlighterGeneric).text.Assign(getHl.identifiers);
|
|
TSynTxtSyn(EditorOptions.highlighterGeneric).symbols.Assign(getHl.symbols);
|
|
EditorOptions.applyChangesFromSelf;
|
|
end;
|
|
|
|
procedure TD2SynPreset.assignFromOptions;
|
|
begin
|
|
background:=EditorOptions.background;
|
|
highlighter.Assign(EditorOptions.highlighterDlang);
|
|
bracketMatch.Assign(EditorOptions.bracketMatch);
|
|
currentLine.Assign(EditorOptions.currentLine);
|
|
folding.Assign(EditorOptions.folding);
|
|
identifierMatch.Assign(EditorOptions.identifierMatch);
|
|
mouseLink.Assign(EditorOptions.mouseLink);
|
|
selection.Assign(EditorOptions.selection);
|
|
end;
|
|
|
|
procedure TD2SynPreset.Assign(source: TPersistent);
|
|
var
|
|
src: TD2SynPreset;
|
|
begin
|
|
if source is TD2SynPreset then
|
|
begin
|
|
src := TD2SynPreset(source);
|
|
background:=src.background;
|
|
highlighter.Assign(src.highlighter);
|
|
bracketMatch.Assign(src.bracketMatch);
|
|
currentLine.Assign(src.currentLine);
|
|
folding.Assign(src.folding);
|
|
identifierMatch.Assign(src.identifierMatch);
|
|
mouseLink.Assign(src.mouseLink);
|
|
selection.Assign(src.selection);
|
|
end else
|
|
inherited;
|
|
end;
|
|
{$ENDREGION}
|
|
|
|
{$REGION TD2SynPresets ------------------------------------------------------}
|
|
constructor TD2SynPresets.Create(AOwner: TComponent);
|
|
begin
|
|
inherited;
|
|
fCollection := TCollection.Create(TD2SynPreset);
|
|
end;
|
|
|
|
destructor TD2SynPresets.Destroy;
|
|
begin
|
|
fCollection.Free;
|
|
inherited;
|
|
end;
|
|
|
|
procedure TD2SynPresets.setCollection(value: TCollection);
|
|
begin
|
|
fCollection.Assign(value);
|
|
end;
|
|
|
|
function TD2SynPresets.addPreset: TD2SynPreset;
|
|
begin
|
|
exit(TD2SynPreset(fCollection.Add));
|
|
end;
|
|
|
|
function TD2SynPresets.insertPreset(index: integer): TD2SynPreset;
|
|
begin
|
|
exit(TD2SynPreset(fCollection.Insert(index)));
|
|
end;
|
|
|
|
function TD2SynPresets.count: integer;
|
|
begin
|
|
exit(fCollection.Count);
|
|
end;
|
|
|
|
function TD2SynPresets.getPreset(index: integer): TD2SynPreset;
|
|
begin
|
|
exit(TD2SynPreset(fCollection.Items[index]));
|
|
end;
|
|
{$ENDREGION}
|
|
|
|
{$REGION TD2SynPresetsLoaderForm --------------------------------------------}
|
|
procedure TAttribHelper.define(fore: TColor;Stl: TFontStyles = [];
|
|
bck: TColor = clNone; frCol: TColor = clNone; frStyle: TSynLineStyle = slsSolid;
|
|
frEdges: TSynFrameEdges = sfeNone; stlMsk: TFontStyles = []);
|
|
begin
|
|
Background:=bck;
|
|
Foreground:=fore;
|
|
FrameColor:=frCol;
|
|
FrameStyle:=frStyle;
|
|
FrameEdges:=frEdges;
|
|
Style:=stl;
|
|
StyleMask:=stlMsk;
|
|
end;
|
|
|
|
procedure TD2SynPresetsLoaderForm.SetVisible(Value: Boolean);
|
|
var
|
|
firstTime: boolean;
|
|
begin
|
|
inherited;
|
|
fPropEd.DefaultItemHeight:= scaleY(22, 96);
|
|
// extracted from the ctor : lazarus 1.8 regression
|
|
firstTime := fList.ItemIndex = -1;
|
|
if value and (firstTime or (fList.Items.Count >= 0)) then
|
|
begin
|
|
fEditor.Font.Assign(EditorOptions.font);
|
|
fEditor.Font.Size:=12;
|
|
fEditor.Font.Name:=EditorOptions.font.Name;
|
|
fEditor.Height:= scaleY(160,96);
|
|
if firstTime then
|
|
fList.ItemIndex := 0;
|
|
lstBoxSelChange(nil);
|
|
case GetIconScaledSize of
|
|
iss16:
|
|
begin
|
|
AssignPng(fAddBtn, 'DOCUMENT_ADD');
|
|
AssignPng(fDelBtn, 'DOCUMENT_DELETE');
|
|
AssignPng(fCloneBtn, 'DOCUMENT_PLUS');
|
|
end;
|
|
iss24:
|
|
begin
|
|
AssignPng(fAddBtn, 'DOCUMENT_ADD24');
|
|
AssignPng(fDelBtn, 'DOCUMENT_DELETE24');
|
|
AssignPng(fCloneBtn, 'DOCUMENT_PLUS24');
|
|
end;
|
|
iss32:
|
|
begin
|
|
AssignPng(fAddBtn, 'DOCUMENT_ADD32');
|
|
AssignPng(fDelBtn, 'DOCUMENT_DELETE32');
|
|
AssignPng(fCloneBtn, 'DOCUMENT_PLUS32');
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
constructor TD2SynPresetsLoaderForm.Create(AOwner: TComponent);
|
|
var
|
|
fname: string;
|
|
pnl: TPanel;
|
|
begin
|
|
inherited;
|
|
fBackup:= TD2SynPreset.Create(nil);
|
|
fPresets:= TD2SynPresets.Create(self);
|
|
fname := getDocPath + optfname;
|
|
if fname.fileExists then
|
|
fPresets.loadFromFile(fname);
|
|
|
|
with fPresets.insertPreset(0) do
|
|
begin
|
|
fIsHardcoded := true;
|
|
fName :='bright';
|
|
fBackground := clWhite;
|
|
getHl.whites.define(clNone);
|
|
getHl.numbers.define($000079F2);
|
|
getHl.symbols.define(clMaroon);
|
|
getHl.identifiers.define(clBlack);
|
|
getHl.comments.define(clGreen,[fsItalic]);
|
|
getHl.strings.define(clBlue);
|
|
getHl.keywords.define(clNavy,[fsBold]);
|
|
getHl.ddoc.define(clTeal);
|
|
getHl.inlineAsm.define(clGray,[fsBold]);
|
|
getHl.special.define(clNavy,[fsBold]);
|
|
getHl.errors.define(clBlack,[],clNone,clRed,slsWaved,sfeBottom,[]);
|
|
getHl.attributes.define(clNavy,[fsBold]);
|
|
//
|
|
folding.Background := clNone;
|
|
folding.Foreground := clDkGray;
|
|
folding.FrameColor := clDkGray;
|
|
//
|
|
mouseLink.Style := [fsUnderline, fsBold];
|
|
mouseLink.StyleMask := [];
|
|
mouseLink.Foreground := clNone;
|
|
mouseLink.Background := clNone;
|
|
//
|
|
bracketMatch.Foreground := clRed;
|
|
bracketMatch.Background := clNone;
|
|
//
|
|
identifierMatch.Foreground:= clNone;
|
|
identifierMatch.Background:= clSilver;
|
|
identifierMatch.BackAlpha:=70;
|
|
identifierMatch.BackPriority:= 10;
|
|
//
|
|
selection.Background:= 15984598;
|
|
selection.Foreground:= clNone;
|
|
//
|
|
currentLine.Background:= 15789545;
|
|
currentLine.Foreground:= clNone;
|
|
//
|
|
getHl.types.Background:=clNone;
|
|
getHl.types.Foreground:=clBlack;
|
|
getHl.types.Style:=[fsBold];
|
|
getHl.phobosStyleType := True;
|
|
//
|
|
getHl.calls.Assign(getHl.identifiers);
|
|
end;
|
|
with fPresets.insertPreset(1) do
|
|
begin
|
|
fIsHardcoded := true;
|
|
fName :='dark';
|
|
getHl.whites.FrameEdges := sfeNone;
|
|
getHl.numbers.Foreground := 16761218;
|
|
getHl.numbers.FrameEdges := sfeNone;
|
|
getHl.numbers.Style := [];
|
|
getHl.symbols.Foreground := clYellow;
|
|
getHl.symbols.FrameEdges := sfeNone;
|
|
getHl.identifiers.Foreground := 14807024;
|
|
getHl.identifiers.FrameEdges := sfeNone;
|
|
getHl.comments.Foreground := 13092807;
|
|
getHl.comments.FrameEdges := sfeNone;
|
|
getHl.strings.Foreground := 5157104;
|
|
getHl.strings.FrameEdges := sfeNone;
|
|
getHl.keywords.Foreground := 9684887;
|
|
getHl.keywords.FrameEdges := sfeNone;
|
|
getHl.ddoc.Foreground := 14671730;
|
|
getHl.ddoc.FrameEdges := sfeNone;
|
|
getHl.inlineAsm.Foreground := 15500491;
|
|
getHl.inlineAsm.FrameEdges := sfeNone;
|
|
getHl.special.Foreground := 9684887;
|
|
getHl.special.FrameEdges := sfeNone;
|
|
getHl.errors.Foreground := 14807024;
|
|
getHl.attributes.Foreground := 9684887;
|
|
getHl.attributes.FrameEdges := sfeNone;
|
|
getHl.types.Background:=clNone;
|
|
getHl.types.Foreground:=14807024;
|
|
getHl.types.Style:=[fsBold];
|
|
background := 4210752;
|
|
bracketMatch.Background := clNone;
|
|
bracketMatch.Foreground := clFuchsia;
|
|
currentLine.Background := 6184542;
|
|
currentLine.Foreground := clNone;
|
|
folding.Background := 7303023;
|
|
folding.Foreground := clYellow;
|
|
identifierMatch.Background := 7697781;
|
|
identifierMatch.BackPriority:= 2;
|
|
identifierMatch.Foreground := clNone;
|
|
selection.Background := 10132122;
|
|
selection.Foreground := clNone;
|
|
selection.BackPriority:= 2;
|
|
getHl.phobosStyleType := True;
|
|
getHl.calls.Assign(getHl.identifiers);
|
|
end;
|
|
with fPresets.insertPreset(2) do
|
|
begin
|
|
fIsHardcoded := true;
|
|
fName :='Mustard';
|
|
getHl.whites.FrameEdges := sfeNone;
|
|
getHl.numbers.FrameEdges := sfeNone;
|
|
getHl.symbols.Foreground := 3487083;
|
|
getHl.symbols.FrameEdges := sfeNone;
|
|
getHl.identifiers.Foreground := 1975089;
|
|
getHl.identifiers.FrameEdges := sfeNone;
|
|
getHl.comments.Foreground := 5206404;
|
|
getHl.comments.FrameEdges := sfeNone;
|
|
getHl.strings.Foreground := 6056852;
|
|
getHl.strings.FrameEdges := sfeNone;
|
|
getHl.keywords.Foreground := 3226202;
|
|
getHl.keywords.FrameEdges := sfeNone;
|
|
getHl.ddoc.Foreground := 6259092;
|
|
getHl.ddoc.FrameEdges := sfeNone;
|
|
getHl.inlineAsm.Foreground := 3379344;
|
|
getHl.inlineAsm.FrameEdges := sfeNone;
|
|
getHl.special.Foreground := 3226202;
|
|
getHl.special.FrameEdges := sfeNone;
|
|
getHl.errors.Foreground := 1975089;
|
|
getHl.attributes.Foreground := 3226202;
|
|
getHl.attributes.FrameEdges := sfeNone;
|
|
getHl.types.Background:=clNone;
|
|
getHl.types.Foreground:=1975089;
|
|
getHl.types.Style:=[fsBold];
|
|
background := 9818842;
|
|
currentLine.Background := 9030871;
|
|
currentLine.Foreground := clNone;
|
|
folding.Background := clNone;
|
|
folding.Foreground := clYellow;
|
|
folding.FrameColor := clYellow;
|
|
identifierMatch.Background := 10278890;
|
|
identifierMatch.BackPriority:= 2;
|
|
identifierMatch.Foreground := clNone;
|
|
selection.Background := 8448232;
|
|
selection.Foreground := clNone;
|
|
selection.BackPriority := 1;
|
|
getHl.phobosStyleType := True;
|
|
getHl.calls.Assign(getHl.identifiers);
|
|
end;
|
|
with fPresets.insertPreset(3) do
|
|
begin
|
|
fIsHardcoded := true;
|
|
name := 'Mars bright';
|
|
getHl.identifiers.Foreground := clBlack;
|
|
getHl.identifiers.FrameEdges := sfeNone;
|
|
getHl.numbers.Foreground := 7763655;
|
|
getHl.comments.Foreground := clMedGray;
|
|
getHl.strings.Foreground := 3750276;
|
|
getHl.keywords.Foreground := 2631874;
|
|
getHl.ddoc.Foreground := 7105644;
|
|
getHl.special.Foreground := 2631874;
|
|
getHl.attributes.Foreground := 2631874;
|
|
getHl.types.Background:=clNone;
|
|
getHl.types.Foreground:=clBlack;
|
|
getHl.types.Style:=[fsBold];
|
|
background := 16579836;
|
|
bracketMatch.Background := 12698077;
|
|
bracketMatch.Foreground := clNone;
|
|
currentLine.Background := 15263976;
|
|
currentLine.Foreground := clNone;
|
|
folding.Background := clNone;
|
|
folding.Foreground := clNone;
|
|
folding.FrameColor := clBlack;
|
|
identifierMatch.Background := clNone;
|
|
identifierMatch.Foreground := clNone;
|
|
identifierMatch.FrameColor := clGray;
|
|
identifierMatch.BackPriority := 10;
|
|
mouseLink.Background := clNone;
|
|
mouseLink.Foreground := clNone;
|
|
mouseLink.FrameColor := 3166415;
|
|
mouseLink.FrameEdges := sfeBottom;
|
|
selection.Background := $C3E1E1;
|
|
selection.Foreground := clNone;
|
|
selection.BackPriority := 10;
|
|
getHl.phobosStyleType := True;
|
|
getHl.calls.Assign(getHl.identifiers);
|
|
end;
|
|
with fPresets.insertPreset(4) do
|
|
begin
|
|
fIsHardcoded := true;
|
|
name := 'Mars dark';
|
|
getHl.numbers.Foreground := 7763655;
|
|
getHl.symbols.Foreground := 5460961;
|
|
getHl.identifiers.Foreground := clCream;
|
|
getHl.comments.Foreground := 5095359;
|
|
getHl.strings.Foreground := 10790107;
|
|
getHl.keywords.Foreground := 4539883;
|
|
getHl.ddoc.Foreground := 10540501;
|
|
getHl.inlineAsm.Foreground := 12303291;
|
|
getHl.special.Foreground := 2631874;
|
|
getHl.errors.Foreground := clCream;
|
|
getHl.attributes.Foreground := 2631874;
|
|
getHl.types.Background:=clNone;
|
|
getHl.types.Foreground:=clCream;
|
|
getHl.types.Style:=[fsBold];
|
|
background := 5263440;
|
|
bracketMatch.Background := 9276865;
|
|
bracketMatch.Foreground := clNone;
|
|
currentLine.Background := 4013373;
|
|
currentLine.Foreground := clNone;
|
|
folding.Background := clNone;
|
|
folding.Foreground := clNone;
|
|
folding.FrameColor := clBlack;
|
|
identifierMatch.Background := 6381928;
|
|
identifierMatch.Foreground := clNone;
|
|
identifierMatch.BackPriority := 10;
|
|
mouseLink.Background := clNone;
|
|
mouseLink.Foreground := clNone;
|
|
mouseLink.FrameColor := clRed;
|
|
mouseLink.FrameEdges := sfeBottom;
|
|
selection.Background := 12837345;
|
|
selection.Foreground := clNone;
|
|
getHl.phobosStyleType := True;
|
|
getHl.calls.Assign(getHl.identifiers);
|
|
end;
|
|
with fPresets.insertPreset(5) do
|
|
begin
|
|
fIsHardcoded := true;
|
|
name := 'Soft dust';
|
|
getHl.phobosStyleType := True;
|
|
getHl.foldKinds := [fkBrackets, fkRegion];
|
|
getHl.whites.FrameEdges := sfeNone;
|
|
getHl.numbers.Foreground := 8618785;
|
|
getHl.numbers.FrameEdges := sfeNone;
|
|
getHl.symbols.Foreground := 5120546;
|
|
getHl.symbols.FrameEdges := sfeNone;
|
|
getHl.identifiers.FrameEdges := sfeNone;
|
|
getHl.comments.FrameEdges := sfeNone;
|
|
getHl.comments.Style := [];
|
|
getHl.strings.Foreground := 7171346;
|
|
getHl.strings.FrameEdges := sfeNone;
|
|
getHl.keywords.Foreground := 6498601;
|
|
getHl.keywords.FrameEdges := sfeNone;
|
|
getHl.ddoc.Foreground := clGreen;
|
|
getHl.ddoc.FrameEdges := sfeNone;
|
|
getHl.ddoc.Style := [fsBold];
|
|
getHl.inlineAsm.FrameEdges := sfeNone;
|
|
getHl.special.FrameEdges := sfeNone;
|
|
getHl.attributes.FrameEdges := sfeNone;
|
|
background := 15395049;
|
|
bracketMatch.Background := clNone;
|
|
bracketMatch.Foreground := clRed;
|
|
currentLine.Background := 14801617;
|
|
currentLine.Foreground := clNone;
|
|
folding.Background := clNone;
|
|
folding.Foreground := clGray;
|
|
folding.FrameColor := clGray;
|
|
identifierMatch.Background := clSilver;
|
|
identifierMatch.Foreground := clNone;
|
|
identifierMatch.BackPriority := 10;
|
|
identifierMatch.BackAlpha := 70;
|
|
mouseLink.Background := clNone;
|
|
mouseLink.Foreground := clNone;
|
|
mouseLink.Style := [fsBold, fsUnderline];
|
|
selection.Background := $9DAABC;
|
|
selection.Foreground := clNone;
|
|
getHl.calls.Assign(getHl.identifiers);
|
|
end;
|
|
|
|
fEditor := TSynEdit.Create(self);
|
|
fEditor.Parent:= self;
|
|
fEditor.Height:= ScaleY(200,96);
|
|
fEditor.Align:= alTop;
|
|
fEditor.ReadOnly:=true;
|
|
fEditor.Font.Assign(EditorOptions.font);
|
|
fEditor.Font.Size:=12;
|
|
fEditor.Font.Name:=EditorOptions.font.Name;
|
|
fEditor.BorderSpacing.Around:= 4;
|
|
fEditor.ScrollBars:= ssAutoBoth;
|
|
fEditor.Options:= fEditor.Options - [eoScrollPastEof, eoScrollPastEol];
|
|
fEditor.SetHighlightSearch('writeln',[]);
|
|
fEditor.lines.Add('module preview;');
|
|
fEditor.lines.Add('import std.stdio;');
|
|
fEditor.lines.Add('/// ddoc comment');
|
|
fEditor.lines.Add('@safe void main(string[] args)');
|
|
fEditor.lines.Add('{');
|
|
fEditor.lines.Add(' // writeln is the current identifier');
|
|
fEditor.lines.Add(' writeln("this is a string");');
|
|
fEditor.lines.Add(' writeln(__DATE__);');
|
|
fEditor.lines.Add(' int number = 0xDEADBEEF;');
|
|
fEditor.lines.Add(' asm{ xor RAX, RAX; }');
|
|
fEditor.lines.Add(' int error = 12G;');
|
|
fEditor.lines.Add(' alias fun = () => {};');
|
|
fEditor.lines.Add('}');
|
|
pnl := TPanel.Create(self);
|
|
pnl.Parent := self;
|
|
pnl.AutoSize := true;
|
|
pnl.BevelOuter:= bvNone;
|
|
pnl.BevelInner:= bvNone;
|
|
pnl.Align:=alTop;
|
|
pnl.BorderSpacing.Around:= 2;
|
|
pnl.Height:=30;
|
|
|
|
fList := TComboBox.Create(self);
|
|
fList.Align:= alClient;
|
|
fList.BorderSpacing.Around:= 2;
|
|
fList.Parent := pnl;
|
|
fList.Style:=csDropDownList;
|
|
fList.OnSelect:= @lstBoxSelChange;
|
|
fList.AutoSize := true;
|
|
updateList;
|
|
|
|
fAddBtn := TBitBtn.Create(self);
|
|
fAddBtn.Parent := pnl;
|
|
fAddBtn.AutoSize := true;
|
|
fAddBtn.Width:= ScaleX(28,96);
|
|
fAddBtn.Align:= alRight;
|
|
fAddBtn.OnClick:=@btnAddClick;
|
|
fAddBtn.Hint:='add preset';
|
|
|
|
fDelBtn := TBitBtn.Create(self);
|
|
fDelBtn.Parent := pnl;
|
|
fDelBtn.AutoSize := true;
|
|
fDelBtn.Width:= ScaleX(28,96);
|
|
fDelBtn.Align:= alRight;
|
|
fDelBtn.OnClick:=@btnDelClick;
|
|
fDelBtn.Hint:='delete preset';
|
|
|
|
fCloneBtn := TBitBtn.Create(self);
|
|
fCloneBtn.Parent := pnl;
|
|
fCloneBtn.AutoSize := true;
|
|
fCloneBtn.Width:= ScaleX(28,96);
|
|
fCloneBtn.Align:= alRight;
|
|
fCloneBtn.OnClick:=@btnCloneClick;
|
|
fCloneBtn.Hint:='clone preset';
|
|
|
|
fPropEd := TTIPropertyGrid.Create(self);
|
|
fPropEd.Parent := self;
|
|
fPropEd.Align:= alClient;
|
|
fPropEd.DefaultValueFont.Color := clGreen;
|
|
fPropEd.OnModified:=@propEdModified;
|
|
fPropEd.CheckboxForBoolean:=true;
|
|
fPropEd.PropertyEditorHook.AddHandlerModified(@propEdModified);
|
|
|
|
fList.ItemIndex := 0;
|
|
EntitiesConnector.addObserver(self);
|
|
end;
|
|
|
|
destructor TD2SynPresetsLoaderForm.Destroy;
|
|
var
|
|
i: integer;
|
|
begin
|
|
for i:= fPresets.count-1 downto 0 do
|
|
if fPresets.preset[i].isHardCoded then
|
|
fPresets.fCollection.Delete(i);
|
|
fPresets.saveToFile(getDocPath + optfname);
|
|
fBackup.Free;
|
|
EntitiesConnector.removeObserver(self);
|
|
inherited;
|
|
end;
|
|
|
|
function TD2SynPresetsLoaderForm.optionedWantCategory(): string;
|
|
begin
|
|
exit('Highlighter presets');
|
|
end;
|
|
|
|
function TD2SynPresetsLoaderForm.optionedWantEditorKind: TOptionEditorKind;
|
|
begin
|
|
exit(oekControl);
|
|
end;
|
|
|
|
function TD2SynPresetsLoaderForm.optionedWantContainer: TPersistent;
|
|
begin
|
|
exit(self);
|
|
end;
|
|
|
|
procedure TD2SynPresetsLoaderForm.optionedEvent(event: TOptionEditorEvent);
|
|
begin
|
|
case event of
|
|
oeeAccept:
|
|
begin
|
|
fPresets[fList.ItemIndex].assignToOptions;
|
|
fBackup.assignFromOptions;
|
|
end;
|
|
oeeCancel: fBackup.assignToOptions;
|
|
oeeSelectCat: fBackup.assignFromOptions;
|
|
end;
|
|
end;
|
|
|
|
function TD2SynPresetsLoaderForm.optionedOptionsModified: boolean;
|
|
begin
|
|
exit(false);
|
|
end;
|
|
|
|
procedure TD2SynPresetsLoaderForm.lstBoxSelChange(Sender: TObject);
|
|
begin
|
|
if fList.ItemIndex <> -1 then
|
|
begin
|
|
fPropEd.TIObject := fPresets[fList.ItemIndex];
|
|
fPropEd.SplitterX:= (fPropEd.Width - 20) div 2;
|
|
fPropEd.PreferredSplitterX:= fPropEd.SplitterX;
|
|
fEditor.Highlighter := fPresets[fList.ItemIndex].getHl;
|
|
updateEditor;
|
|
end else
|
|
fPropEd.TIObject := nil;
|
|
end;
|
|
|
|
procedure TD2SynPresetsLoaderForm.btnAddClick(sender: TObject);
|
|
var
|
|
prs: TD2SynPreset;
|
|
begin
|
|
prs := fPresets.addPreset;
|
|
prs.name := format('preset %d', [fPresets.count]);
|
|
updateList;
|
|
fList.ItemIndex := prs.Index;
|
|
lstBoxSelChange(nil);
|
|
end;
|
|
|
|
procedure TD2SynPresetsLoaderForm.btnDelClick(sender: TObject);
|
|
var
|
|
o: integer;
|
|
begin
|
|
if (fPresets.preset[fList.ItemIndex].isHardCoded) then
|
|
exit;
|
|
o := fList.ItemIndex;
|
|
fPropEd.TIObject := nil;
|
|
fPresets.fCollection.Delete(fList.ItemIndex);
|
|
if o >= fPresets.count then
|
|
o -= 1 ;
|
|
fList.ItemIndex:=o;
|
|
updateList;
|
|
lstBoxSelChange(nil);
|
|
end;
|
|
|
|
procedure TD2SynPresetsLoaderForm.btnCloneClick(sender: TObject);
|
|
var
|
|
old: TD2SynPreset;
|
|
begin
|
|
if fList.ItemIndex.equals(-1) then
|
|
exit;
|
|
old := fPresets[fList.ItemIndex];
|
|
btnAddClick(nil);
|
|
fPresets[fList.ItemIndex].Assign(old);
|
|
updateEditor;
|
|
end;
|
|
|
|
procedure TD2SynPresetsLoaderForm.propEdModified(sender: TObject);
|
|
begin
|
|
updateEditor;
|
|
end;
|
|
|
|
procedure TD2SynPresetsLoaderForm.updateList;
|
|
var
|
|
i, j: integer;
|
|
begin
|
|
fList.OnChange:=nil;
|
|
j := fList.ItemIndex;
|
|
fList.Clear;
|
|
for i:= 0 to fPresets.count-1 do
|
|
fList.AddItem(fPresets[i].name, fPresets[i]);
|
|
if (j <> -1) and (j < fPresets.count) then
|
|
fList.ItemIndex := j;
|
|
fList.OnChange:=@lstBoxSelChange;
|
|
end;
|
|
|
|
procedure TD2SynPresetsLoaderForm.updateEditor;
|
|
var
|
|
p: TD2SynPreset;
|
|
begin
|
|
if fList.ItemIndex.equals(-1) then
|
|
exit;
|
|
p := fPresets[fList.ItemIndex];
|
|
fEditor.Color := p.background;
|
|
fEditor.SelectedColor := p.selection;
|
|
fEditor.HighlightAllColor := p.identifierMatch;
|
|
fEditor.LineHighlightColor := p.currentLine;
|
|
fEditor.FoldedCodeColor := p.folding;
|
|
fEditor.MouseLinkColor := p.mouseLink;
|
|
fEditor.BracketMatchColor := p.bracketMatch;
|
|
fList.Items[fList.ItemIndex] := fPresets[fList.ItemIndex].name;
|
|
end;
|
|
{$ENDREGION}
|
|
|
|
initialization
|
|
presetsLoaderForm:= TD2SynPresetsLoaderForm.Create(nil);
|
|
finalization
|
|
presetsLoaderForm.Free;
|
|
end.
|
|
|