mirror of https://gitlab.com/basile.b/dexed.git
#59, add a preset editor
This commit is contained in:
parent
7c041b5bb9
commit
d2fc677f97
|
@ -5,9 +5,9 @@ interface
|
|||
|
||||
uses
|
||||
Classes, SysUtils, SynEditMiscClasses, Graphics, Controls, StdCtrls, ExtCtrls,
|
||||
SynEditHighlighter, SynEditTypes,
|
||||
SynEditHighlighter, SynEditTypes, SynEdit, RTTIGrids, Buttons,
|
||||
ce_interfaces, ce_common, ce_writableComponent, ce_d2syn, ce_observer,
|
||||
ce_editoroptions;
|
||||
ce_editoroptions, ce_sharedres;
|
||||
|
||||
type
|
||||
|
||||
|
@ -34,7 +34,7 @@ type
|
|||
fIdentifierMarkup: TSynSelectedColor;
|
||||
fMouseLinkAttribs: TSynSelectedColor;
|
||||
fSelAttribs: TSynSelectedColor;
|
||||
fd2syn: TSynD2Syn;
|
||||
fd2syn: TPersistent;
|
||||
fName: string;
|
||||
procedure setBracketMatchColor(value: TSynSelectedColor);
|
||||
procedure setCurrLineAttribs(value: TSynSelectedColor);
|
||||
|
@ -42,10 +42,11 @@ type
|
|||
procedure setIdentifierMarkup(value: TSynSelectedColor);
|
||||
procedure setMouseLinkColor(value: TSynSelectedColor);
|
||||
procedure setSelCol(value: TSynSelectedColor);
|
||||
procedure setD2syn(value: TSynD2Syn);
|
||||
procedure setD2syn(value: TPersistent);
|
||||
function getHl: TSynD2Syn;
|
||||
published
|
||||
property name: string read fName write fName;
|
||||
property highlighter: TSynD2Syn read fd2syn write setD2Syn;
|
||||
property highlighter: TPersistent read fd2syn write setD2Syn;
|
||||
property background: TColor read fBackground write fBackground default clWhite;
|
||||
property bracketMatch: TSynSelectedColor read fBracketMatchAttribs write setBracketMatchColor;
|
||||
property currentLine: TSynSelectedColor read fCurrLineAttribs write setCurrLineAttribs;
|
||||
|
@ -65,10 +66,13 @@ type
|
|||
fCollection: TCollection;
|
||||
procedure setCollection(value: TCollection);
|
||||
function getPreset(index: integer): TCED2SynPreset;
|
||||
published
|
||||
property presets: TCollection read fCollection write setCollection;
|
||||
public
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
destructor Destroy; override;
|
||||
function addPreset: TCED2SynPreset;
|
||||
function count: integer;
|
||||
property preset[index: integer]: TCED2SynPreset read getPreset ; default;
|
||||
end;
|
||||
|
||||
|
@ -78,14 +82,21 @@ type
|
|||
TCED2SynPresetsLoaderForm = class(TWinControl, ICEEditableOptions)
|
||||
private
|
||||
fPresets: TCED2SynPresets;
|
||||
flstBox: TListBox;
|
||||
fList: TComboBox;
|
||||
fEditor: TSynEdit;
|
||||
fPropEd: TTIPropertyGrid;
|
||||
fBackup: TCED2SynPreset;
|
||||
function optionedWantCategory(): string;
|
||||
function optionedWantEditorKind: TOptionEditorKind;
|
||||
function optionedWantContainer: TPersistent;
|
||||
procedure optionedEvent(anEvent: TOptionEditorEvent);
|
||||
function optionedOptionsModified: boolean;
|
||||
procedure lstBoxChange(sender: TObject);
|
||||
procedure lstBoxSelChange(Sender: TObject);
|
||||
procedure btnAddClick(sender: TObject);
|
||||
procedure btnDelClick(sender: TObject);
|
||||
procedure propEdModified(sender: TObject);
|
||||
procedure updateList;
|
||||
procedure updateEditor;
|
||||
public
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
destructor Destroy; override;
|
||||
|
@ -124,11 +135,16 @@ begin
|
|||
inherited;
|
||||
end;
|
||||
|
||||
procedure TCED2SynPreset.setD2syn(value: TSynD2Syn);
|
||||
procedure TCED2SynPreset.setD2syn(value: TPersistent);
|
||||
begin
|
||||
fd2syn.Assign(value);
|
||||
end;
|
||||
|
||||
function TCED2SynPreset.getHl: TSynD2Syn;
|
||||
begin
|
||||
exit(TSynD2Syn(fd2syn));
|
||||
end;
|
||||
|
||||
procedure TCED2SynPreset.setBracketMatchColor(value: TSynSelectedColor);
|
||||
begin
|
||||
fBracketMatchAttribs.Assign(value);
|
||||
|
@ -208,6 +224,11 @@ begin
|
|||
exit(TCED2SynPreset(fCollection.Add));
|
||||
end;
|
||||
|
||||
function TCED2SynPresets.count: integer;
|
||||
begin
|
||||
exit(fCollection.Count);
|
||||
end;
|
||||
|
||||
function TCED2SynPresets.getPreset(index: integer): TCED2SynPreset;
|
||||
begin
|
||||
exit(TCED2SynPreset(fCollection.Items[index]));
|
||||
|
@ -231,49 +252,50 @@ end;
|
|||
constructor TCED2SynPresetsLoaderForm.Create(AOwner: TComponent);
|
||||
var
|
||||
fname: string;
|
||||
i: integer;
|
||||
pnl: TPanel;
|
||||
btn: TBitBtn;
|
||||
begin
|
||||
inherited;
|
||||
fBackup:= TCED2SynPreset.Create(nil);
|
||||
fPresets:= TCED2SynPresets.Create(self);
|
||||
fname := getCoeditDocPath + optfname;
|
||||
if fname.fileExists then
|
||||
fPresets.loadFromFile(fname)
|
||||
else begin
|
||||
// Default
|
||||
//if fname.fileExists then
|
||||
//fPresets.loadFromFile(fname)
|
||||
//else
|
||||
begin
|
||||
with fPresets.addPreset do
|
||||
begin
|
||||
fName :='bright';
|
||||
fBackground := clWhite;
|
||||
fd2syn.whites.define(clNone);
|
||||
fd2syn.numbers.define($000079F2);
|
||||
fd2syn.symbols.define(clMaroon);
|
||||
fd2syn.identifiers.define(clBlack);
|
||||
fd2syn.comments.define(clGreen,[fsItalic]);
|
||||
fd2syn.strings.define(clBlue);
|
||||
fd2syn.keywords.define(clNavy,[fsBold]);
|
||||
fd2syn.ddoc.define(clTeal);
|
||||
fd2syn.inlineAsm.define(clGray,[fsBold]);
|
||||
fd2syn.special.define(clNavy,[fsBold]);
|
||||
fd2syn.errors.define(clBlack,[],clNone,clRed,slsWaved,sfeBottom,[]);
|
||||
fd2syn.attributes.define(clNavy,[fsBold]);
|
||||
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]);
|
||||
end;
|
||||
with fPresets.addPreset do
|
||||
begin
|
||||
fName :='dark';
|
||||
fBackground := $00404040;
|
||||
fd2syn.whites.define(clNone);
|
||||
fd2syn.numbers.define($000079F2,[fsBold]);
|
||||
fd2syn.symbols.define(clMaroon);
|
||||
fd2syn.identifiers.define($00F0EFE1);
|
||||
fd2syn.comments.define($00C7C7C7,[fsItalic]);
|
||||
fd2syn.strings.define($ECD284);
|
||||
fd2syn.keywords.define($0097C793,[fsBold]);
|
||||
fd2syn.ddoc.define(clTeal);
|
||||
fd2syn.inlineAsm.define($00CB84EC,[fsBold]);
|
||||
fd2syn.special.define($0097C793,[fsBold]);
|
||||
fd2syn.errors.define($00F0EFE1,[],clNone,clRed,slsWaved,sfeBottom,[]);
|
||||
fd2syn.attributes.define($0097C793,[fsBold]);
|
||||
getHl.whites.define(clNone);
|
||||
getHl.numbers.define($F27900,[fsBold]);
|
||||
getHl.symbols.define(clMaroon);
|
||||
getHl.identifiers.define($E1EFF0);
|
||||
getHl.comments.define($C7C7C7,[fsItalic]);
|
||||
getHl.strings.define($84D2EC);
|
||||
getHl.keywords.define($93C797,[fsBold]);
|
||||
getHl.ddoc.define(clTeal);
|
||||
getHl.inlineAsm.define($EC84CB,[fsBold]);
|
||||
getHl.special.define($93C797,[fsBold]);
|
||||
getHl.errors.define($E1EFF0,[],clNone,clRed,slsWaved,sfeBottom,[]);
|
||||
getHl.attributes.define($93C797,[fsBold]);
|
||||
end;
|
||||
with fPresets.addPreset do
|
||||
begin
|
||||
|
@ -287,25 +309,97 @@ begin
|
|||
end;
|
||||
with fPresets.addPreset do
|
||||
begin
|
||||
fBackground :=clWhite;
|
||||
fName :='Mustard';
|
||||
fBackground := $78C8D3;
|
||||
getHl.whites.define(clNone);
|
||||
getHl.numbers.define($000079F2,[fsBold]);
|
||||
getHl.symbols.define(clMaroon);
|
||||
getHl.identifiers.define($1E2331);
|
||||
getHl.comments.define($4F7184,[fsItalic]);
|
||||
getHl.strings.define($6D82BA);
|
||||
getHl.keywords.define($313A5A,[fsBold]);
|
||||
getHl.ddoc.define($5F8194);
|
||||
getHl.inlineAsm.define($98B7B4,[fsBold]);
|
||||
getHl.special.define($313A5A,[fsBold]);
|
||||
getHl.errors.define($1E2331,[],clNone,clRed,slsWaved,sfeBottom,[]);
|
||||
getHl.attributes.define($313A5A,[fsBold]);
|
||||
end;
|
||||
end;
|
||||
//
|
||||
flstBox := TListBox.Create(self);
|
||||
flstBox.Align:= alClient;
|
||||
flstBox.BorderSpacing.Around:= 4;
|
||||
flstBox.Parent := self;
|
||||
flstbox.OnClick:=@lstBoxChange;
|
||||
for i:= 0 to fPresets.fCollection.Count-1 do
|
||||
flstBox.AddItem(fPresets[i].name, fPresets[i]);
|
||||
fEditor := TSynEdit.Create(self);
|
||||
fEditor.Parent:= self;
|
||||
fEditor.Height:= 200;
|
||||
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('}');
|
||||
pnl := TPanel.Create(self);
|
||||
pnl.Parent := self;
|
||||
pnl.BevelOuter:= bvNone;
|
||||
pnl.BevelInner:= bvNone;
|
||||
pnl.Align:=alTop;
|
||||
pnl.BorderSpacing.Around:= 4;
|
||||
pnl.Height:=30;
|
||||
//
|
||||
fList := TComboBox.Create(self);
|
||||
fList.Align:= alClient;
|
||||
fList.BorderSpacing.Around:= 4;
|
||||
fList.Parent := pnl;
|
||||
fList.ReadOnly:=true;
|
||||
fList.OnSelect:= @lstBoxSelChange;
|
||||
updateList;
|
||||
//
|
||||
btn := TBitBtn.Create(self);
|
||||
btn.Parent := pnl;
|
||||
btn.Width:= 26;
|
||||
btn.Align:= alRight;
|
||||
btn.BorderSpacing.Around:=2;
|
||||
btn.OnClick:=@btnAddClick;
|
||||
btn.Hint:='add preset';
|
||||
AssignPng(btn, 'document_add');
|
||||
//
|
||||
btn := TBitBtn.Create(self);
|
||||
btn.Parent := pnl;
|
||||
btn.Width:= 26;
|
||||
btn.Align:= alRight;
|
||||
btn.BorderSpacing.Around:=2;
|
||||
btn.OnClick:=@btnDelClick;
|
||||
btn.Hint:='delete preset';
|
||||
AssignPng(btn, 'document_delete');
|
||||
//
|
||||
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;
|
||||
lstBoxSelChange(nil);
|
||||
EntitiesConnector.addObserver(self);
|
||||
end;
|
||||
|
||||
destructor TCED2SynPresetsLoaderForm.Destroy;
|
||||
begin
|
||||
//fPresets.saveToFile(getCoeditDocPath + optfname);
|
||||
fPresets.saveToFile(getCoeditDocPath + optfname);
|
||||
fBackup.Free;
|
||||
EntitiesConnector.removeObserver(self);
|
||||
inherited;
|
||||
|
@ -329,7 +423,11 @@ end;
|
|||
procedure TCED2SynPresetsLoaderForm.optionedEvent(anEvent: TOptionEditorEvent);
|
||||
begin
|
||||
case anEvent of
|
||||
oeeAccept: fBackup.assignFromOptions;
|
||||
oeeAccept:
|
||||
begin
|
||||
fPresets[fList.ItemIndex].assignToOptions;
|
||||
fBackup.assignFromOptions;
|
||||
end;
|
||||
oeeCancel: fBackup.assignToOptions;
|
||||
oeeSelectCat: fBackup.assignFromOptions;
|
||||
end;
|
||||
|
@ -340,11 +438,70 @@ begin
|
|||
exit(false);
|
||||
end;
|
||||
|
||||
procedure TCED2SynPresetsLoaderForm.lstBoxChange(sender: TObject);
|
||||
procedure TCED2SynPresetsLoaderForm.lstBoxSelChange(Sender: TObject);
|
||||
begin
|
||||
if flstBox.ItemIndex = -1 then
|
||||
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 TCED2SynPresetsLoaderForm.btnAddClick(sender: TObject);
|
||||
var
|
||||
prs: TCED2SynPreset;
|
||||
begin
|
||||
prs := fPresets.addPreset;
|
||||
prs.name := format('preset %d', [fPresets.count]);
|
||||
updateList;
|
||||
fList.ItemIndex := prs.Index;
|
||||
lstBoxSelChange(nil);
|
||||
end;
|
||||
|
||||
procedure TCED2SynPresetsLoaderForm.btnDelClick(sender: TObject);
|
||||
begin
|
||||
fPresets.fCollection.Delete(fList.ItemIndex);
|
||||
updateList;
|
||||
lstBoxSelChange(nil);
|
||||
end;
|
||||
|
||||
procedure TCED2SynPresetsLoaderForm.propEdModified(sender: TObject);
|
||||
begin
|
||||
updateEditor;
|
||||
end;
|
||||
|
||||
procedure TCED2SynPresetsLoaderForm.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 TCED2SynPresetsLoaderForm.updateEditor;
|
||||
var
|
||||
p: TCED2SynPreset;
|
||||
begin
|
||||
if fList.ItemIndex = -1 then
|
||||
exit;
|
||||
fPresets[flstBox.ItemIndex].assignToOptions;
|
||||
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;
|
||||
end;
|
||||
{$ENDREGION}
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ inherited CEOptionEditorWidget: TCEOptionEditorWidget
|
|||
Left = 0
|
||||
Height = 451
|
||||
Top = 0
|
||||
Width = 140
|
||||
Width = 150
|
||||
Align = alLeft
|
||||
AutoExpand = True
|
||||
DefaultItemHeight = 16
|
||||
|
@ -48,20 +48,20 @@ inherited CEOptionEditorWidget: TCEOptionEditorWidget
|
|||
Options = [tvoAutoExpand, tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw]
|
||||
end
|
||||
object pnlEd: TPanel
|
||||
Left = 146
|
||||
Left = 156
|
||||
Height = 451
|
||||
Top = 0
|
||||
Width = 405
|
||||
Width = 395
|
||||
Align = alClient
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 451
|
||||
ClientWidth = 405
|
||||
ClientWidth = 395
|
||||
TabOrder = 1
|
||||
object inspector: TTIPropertyGrid
|
||||
Left = 0
|
||||
Height = 451
|
||||
Top = 0
|
||||
Width = 405
|
||||
Width = 395
|
||||
Align = alClient
|
||||
CheckboxForBoolean = False
|
||||
DefaultValueFont.Color = clWindowText
|
||||
|
@ -76,7 +76,7 @@ inherited CEOptionEditorWidget: TCEOptionEditorWidget
|
|||
end
|
||||
end
|
||||
object Splitter1: TSplitter
|
||||
Left = 140
|
||||
Left = 150
|
||||
Height = 451
|
||||
Top = 0
|
||||
Width = 6
|
||||
|
|
Loading…
Reference in New Issue