lazarus/ide/editoroptions.pp
mattias 953007e494 fixed highlighter list
git-svn-id: trunk@5658 -
2004-07-07 17:21:13 +00:00

5412 lines
166 KiB
ObjectPascal

{ $Id$ }
{
***************************************************************************
* *
* This source is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This code is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* General Public License for more details. *
* *
* A copy of the GNU General Public License is available on the World *
* Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also *
* obtain it by writing to the Free Software Foundation, *
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
* *
***************************************************************************
Author: Mattias Gaertner
Abstract:
Editor options container and editor options dialog.
The editor options are stored in XML format in the
~/.lazarus/editoroptions.xml file.
Currently only for TSynEdit.
ToDo:
- key mapping schemes
- nicer TColorButton
}
unit EditorOptions;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Math, LCLIntf, LCLType,
Forms, ComCtrls, Buttons, StdCtrls, ExtCtrls, LazConf,
FileCtrl, GraphType, Graphics, Controls, Dialogs, LResources, IDEProcs,
SynEdit, SynEditHighlighter, SynEditAutoComplete, SynEditKeyCmds,
SynHighlighterPas, SynHighlighterHTML, SynHighlighterCPP, SynHighlighterXML,
SynHighlighterLFM, SynHighlighterPerl, SynHighlighterJava,
SynHighlighterPython,
SynHighlighterUNIXShellScript, Laz_XMLCfg,
IDECommands, CodeTemplateDialog, KeyMapping, InputHistory, IDEOptionDefs,
LazarusIDEStrConsts, KeymapSchemeDlg;
type
TPreviewEditor = TSynEdit;
TPreviewPasSyn = TSynPasSyn;
TCustomSyn = TSynCustomHighlighter;
TSynHighlightElement = TSynHighlighterAttributes;
TCustomSynClass = class of TCustomSyn;
TLazSyntaxHighlighter =
(lshNone, lshText, lshFreePascal, lshDelphi, lshLFM, lshXML, lshHTML,
lshCPP, lshPerl, lshJava, lshBash, lshPython);
TAdditionalHilightAttribute = (ahaNone, ahaTextBlock, ahaExecutionPoint,
ahaEnabledBreakpoint, ahaDisabledBreakpoint,
ahaInvalidBreakpoint, ahaUnknownBreakpoint,
ahaErrorLine);
const
EditorOptsFormatVersion = 2;
AdditionalHighlightAttributes: array[TAdditionalHilightAttribute] of string =
(
'',
'Text block',
'Execution point',
'Enabled breakpoint',
'Disabled breakpoint',
'Invalid breakpoint',
'Unknown breakpoint',
'Error line'
);
LazSyntaxHighlighterClasses: array[TLazSyntaxHighlighter] of TCustomSynClass =
(nil, nil, TSynPasSyn, TSynPasSyn, TSynLFMSyn, TSynXMLSyn, TSynHTMLSyn,
TSynCPPSyn, TSynPerlSyn, TSynJavaSyn, TSynUNIXShellScriptSyn,
TSynPythonSyn);
{ Comments }
const
DefaultCommentTypes: array[TLazSyntaxHighlighter] of TCommentType = (
comtNone, // lshNone
comtNone, // lshText
comtPascal,// lshFreePascal
comtPascal,// lshDelphi
comtDelphi,// lshLFM
comtHtml, // lshXML
comtHtml, // lshHTML
comtCPP, // lshCPP
comtPerl, // lshPerl
comtCPP, // lshJava
comtPerl, // lshBash
comtPerl // lshPython
);
const
SynEditDefaultOptions = SYNEDIT_DEFAULT_OPTIONS - [eoShowScrollHint];
type
{ TEditOptLanguageInfo stores lazarus IDE additional information
of a highlighter, such as samplesource, which sample lines are special
lines, file extensions
MappedAttributes is a list of the format "AttributName=PascalAttributName"
This mapping attributes are used for default values. For example:
The comment attribute of HTML is mapped to the comment attribute of
pascal "Comment=Comment". If there is no mapping attribute for an
attribute the default values are taken from an untouched highlighter.
For example Symbol in HTML is not mapped and therefore has as default
value fo style [fsBold] as defined in synhighlighterhtml.pp.
}
TEditOptLanguageInfo = class
public
SynClass: TCustomSynClass;
TheType: TLazSyntaxHighlighter;
FileExtensions: string; // divided by semicolon, e.g. 'pas;pp;inc'
ColorScheme: string;
SampleSource: string;
AddAttrSampleLines: array[TAdditionalHilightAttribute] of integer; // first line = 1
MappedAttributes: TStringList; // map attributes to pascal
DefaultCommentType: TCommentType;
constructor Create;
destructor Destroy; override;
function GetDefaultFilextension: string;
function SampleLineToAddAttr(Line: integer): TAdditionalHilightAttribute;
end;
{ list of TEditOptLanguageInfo }
TEditOptLangList = class(TList)
private
function GetInfos(Index: integer): TEditOptLanguageInfo;
public
constructor Create;
procedure Clear; override;
destructor Destroy; override;
function FindByName(const Name: string): integer;
function FindByClass(CustomSynClass: TCustomSynClass): integer;
function FindByHighlighter(Hilighter: TSynCustomHighlighter): integer;
function FindByType(AType: TLazSyntaxHighlighter): integer;
function GetDefaultFilextension(AType: TLazSyntaxHighlighter): string;
property Items[Index: integer]: TEditOptLanguageInfo read GetInfos; default;
end;
{ Editor Options object used to hold the editor options }
TEditorOptions = class(TPersistent)
private
xmlconfig:TXMLConfig;
// general options
fFindTextAtCursor:boolean;
fShowTabCloseButtons: boolean;
fSynEditOptions: TSynEditorOptions;
fCtrlMouseLinks: boolean;
fUndoAfterSave:boolean;
fUseSyntaxHighlight:boolean;
FCopyWordAtCursorOnCopyNone: boolean;
FShowGutterHints: boolean;
fBlockIndent:integer;
fUndoLimit:integer;
fTabWidth:integer;
// Display options
fVisibleRightMargin:boolean;
fVisibleGutter:boolean;
fShowLineNumbers:boolean;
fGutterColor:TColor;
fGutterWidth:integer;
fRightMargin:integer;
fRightMarginColor:TColor;
fEditorFont:Ansistring;
fEditorFontHeight:integer;
fExtraLineSpacing:integer;
// Key Mappings options
fKeyMappingScheme:AnsiString;
fKeyMap:TKeyCommandRelationList;
// Color options
fHighlighterList: TEditOptLangList;
// Code tools options (MG: these will move to an unit of their own)
fAutoIdentifierCompletion:boolean;
fAutoCodeParameters:boolean;
fAutoToolTipExprEval:boolean;
fAutoToolTipSymbTools:boolean;
fAutoDelayInMSec:integer;
fCodeTemplateFileName:Ansistring;
fCTemplIndentToTokenStart: boolean;
public
constructor Create;
destructor Destroy; override;
procedure Load;
procedure Save;
procedure GetHighlighterSettings(Syn: TCustomSyn);// read highlight settings from config file
procedure SetHighlighterSettings(Syn: TCustomSyn);// write highlight settings to config file
procedure GetSynEditSettings(ASynEdit:TSynEdit); // read synedit settings from config file
procedure SetSynEditSettings(ASynEdit:TSynEdit); // write synedit settings to file
procedure GetSynEditSelectedColor(ASynEdit:TSynEdit);
Procedure GetSynEditPreviewSettings(APreviewEditor: TObject);
procedure AddSpecialHilightAttribsToHighlighter(Syn: TCustomSyn);
function CreateSyn(LazSynHilighter: TLazSyntaxHighlighter): TCustomSyn;
function ReadColorScheme(const LanguageName: string): string;
function ReadPascalColorScheme: string;
procedure WriteColorScheme(const LanguageName, SynColorScheme: string);
procedure GetDefaultsForPascalAttribute(Attr: TSynHighlightElement;
const SynColorScheme: string);
procedure ReadHighlighterSettings(Syn: TCustomSyn; SynColorScheme: string);
procedure ReadDefaultsForHighlighterSettings(Syn: TCustomSyn;
SynColorScheme: string; DefaultPascalSyn: TPreviewPasSyn);
procedure WriteHighlighterSettings(Syn: TCustomSyn; SynColorScheme: string);
procedure GetSpecialLineColors(Syn: TCustomSyn;
AddHilightAttr: TAdditionalHilightAttribute; var Special: boolean;
var FG, BG: TColor);
published
// general options
property SynEditOptions:TSynEditorOptions
read fSynEditOptions write fSynEditOptions
default SynEditDefaultOptions;
property CtrlMouseLinks: boolean read fCtrlMouseLinks write fCtrlMouseLinks;
property ShowTabCloseButtons: boolean
read fShowTabCloseButtons write fShowTabCloseButtons;
property UndoAfterSave:boolean
read fUndoAfterSave write fUndoAfterSave default true;
property FindTextAtCursor:boolean
read fFindTextAtCursor write fFindTextAtCursor default true;
property UseSyntaxHighlight:boolean
read fUseSyntaxHighlight write fUseSyntaxHighlight default true;
property CopyWordAtCursorOnCopyNone: boolean read FCopyWordAtCursorOnCopyNone
write FCopyWordAtCursorOnCopyNone;
property ShowGutterHints: boolean read FShowGutterHints write FShowGutterHints;
property BlockIndent:integer read fBlockIndent write fBlockIndent default 2;
property UndoLimit:integer read fUndoLimit write fUndoLimit default 32767;
property TabWidth:integer read fTabWidth write fTabWidth default 8;
// Display options
property VisibleRightMargin:boolean
read fVisibleRightMargin write fVisibleRightMargin default true;
property VisibleGutter:boolean
read fVisibleGutter write fVisibleGutter default true;
property ShowLineNumbers:boolean
read fShowLineNumbers write fShowLineNumbers default false;
property GutterColor:TColor read fGutterColor write fGutterColor default clBtnFace;
property GutterWidth:integer read fGutterWidth write fGutterWidth default 30;
property RightMargin:integer read fRightMargin write fRightMargin default 80;
property RightMarginColor:integer
read fRightMarginColor write fRightMarginColor default clBtnFace;
property EditorFont:Ansistring read fEditorFont write fEditorFont;
property EditorFontHeight:integer read fEditorFontHeight write FEditorFontHeight;
property ExtraLineSpacing:integer
read fExtraLineSpacing write fExtraLineSpacing default 0;
// Key Mappings
property KeyMappingScheme:Ansistring
read fKeyMappingScheme write fKeyMappingScheme;
property KeyMap:TKeyCommandRelationList read fKeyMap;
// Color options
property HighlighterList: TEditOptLangList
read fHighlighterList write fHighlighterList;
// Code Tools options
property AutoIdentifierCompletion:boolean
read fAutoIdentifierCompletion write fAutoIdentifierCompletion default true;
property AutoCodeParameters:boolean
read fAutoCodeParameters write fAutoCodeParameters default true;
property AutoToolTipExprEval:boolean
read fAutoToolTipExprEval write fAutoToolTipExprEval default true;
property AutoToolTipSymbTools:boolean
read fAutoToolTipSymbTools write fAutoToolTipSymbTools default false;
property AutoDelayInMSec:integer
read fAutoDelayInMSec write fAutoDelayInMSec default 1000;
property CodeTemplateFileName:Ansistring
read fCodeTemplateFileName write fCodeTemplateFileName;
property CodeTemplateIndentToTokenStart: boolean
read fCTemplIndentToTokenStart write fCTemplIndentToTokenStart;
end;
{ Editor Options form }
TEditorOptionsForm = class(TForm)
MainNoteBook:TNoteBook;
ImageList: TImageList;
// general options
EditorOptionsGroupBox:TGroupBox;
AltSetsColumnModeCheckBox:TCheckBox;
AutoIndentCheckBox:TCheckBox;
BracketHighlightCheckBox: TCheckBox;
DragDropEditingCheckBox:TCheckBox;
DropFilesCheckBox:TCheckBox;
HalfPageScrollCheckBox:TCheckBox;
KeepCaretXCheckBox:TCheckBox;
PersistentCaretCheckBox:TCheckBox;
ScrollByOneLessCheckBox:TCheckBox;
ScrollPastEofCheckBox:TCheckBox;
ScrollPastEolCheckBox:TCheckBox;
ShowCloseBtnInNoteBookCheckBox:TCheckBox;
ShowScrollHintCheckBox:TCheckBox;
SmartTabsCheckBox:TCheckBox;
TabsToSpacesCheckBox:TCheckBox;
TrimTrailingSpacesCheckBox:TCheckBox;
UndoAfterSaveCheckBox:TCheckBox;
DoubleClickLineCheckBox:TCheckBox;
FindTextAtCursorCheckBox:TCheckBox;
UseSyntaxHighlightCheckBox:TCheckBox;
CopyWordAtCursorOnCopyNoneCheckBox:TCheckBox;
ShowGutterHintsCheckBox:TCheckBox;
MouseLinksCheckBox: TCheckBox;
BlockIndentComboBox:TComboBox;
BlockIndentLabel:TLabel;
UndoLimitComboBox:TComboBox;
UndoLimitLabel:TLabel;
TabWidthsComboBox:TComboBox;
TabWidthsLabel:TLabel;
// Display options
MarginAndGutterGroupBox:TGroupBox;
VisibleRightMarginCheckBox:TCheckBox;
VisibleGutterCheckBox:TCheckBox;
ShowLineNumbersCheckBox:TCheckBox;
GutterColorButton:TColorButton;
GutterColorLabel:TLabel;
GutterWidthComboBox:TComboBox;
GutterWidthLabel:TLabel;
RightMarginComboBox:TComboBox;
RightMarginLabel:TLabel;
RightMarginColorButton:TColorButton;
RightMarginColorLabel:TLabel;
EditorFontGroupBox:TGroupBox;
EditorFontComboBox:TComboBox;
EditorFontButton:TButton;
EditorFontLabel:TLabel;
EditorFontHeightLabel:TLabel;
EditorFontHeightComboBox:TComboBox;
ExtraLineSpacingLabel:TLabel;
ExtraLineSpacingComboBox:TComboBox;
DisplayPreview:TPreviewEditor;
// Key Mappings
KeyMappingChooseSchemeButton:TButton;
KeyMappingHelpLabel:TLabel;
KeyMappingTreeView:TTreeView;
KeyMappingConsistencyCheckButton:TButton;
// Color options
LanguageComboBox:TComboBox;
LanguageLabel:TLabel;
FileExtensionsComboBox:TComboBox;
FileExtensionsLabel:TLabel;
ColorSchemeComboBox:TComboBox;
ColorSchemeLabel:TLabel;
ColorElementLabel:TLabel;
ColorElementListBox:TListBox;
TextAttributesGroupBox:TGroupBox;
TextBoldCheckBox:TCheckBox;
TextItalicCheckBox:TCheckBox;
TextUnderlineCheckBox:TCheckBox;
ForeGroundGroupBox:TGroupBox;
ForeGroundColorButton:TColorButton;
ForeGroundUseDefaultCheckBox:TCheckBox;
BackGroundGroupBox:TGroupBox;
BackGroundColorButton:TColorButton;
BackGroundUseDefaultCheckBox:TCheckBox;
SetAttributeToDefaultButton:TButton;
SetAllAttributesToDefaultButton:TButton;
ColorPreview:TPreviewEditor;
// Code Tools options
AutomaticFeaturesGroupBox:TGroupBox;
AutoIdentifierCompletionCheckBox:TCheckBox;
AutoCodeParametersCheckBox:TCheckBox;
AutoToolTipExprEvalCheckBox:TCheckBox;
AutoToolTipSymbToolsCheckBox:TCheckBox;
AutoDelayLabel:TLabel;
AutoDelayTrackBar:TTrackBar;
AutoDelayMinLabel:TLabel;
AutoDelayMaxLabel:TLabel;
CodeTemplatesGroupBox:TGroupBox;
CodeTemplateFileNameLabel:TLabel;
CodeTemplateFileNameComboBox:TComboBox;
CodeTemplateFileNameButton:TButton;
CodeTemplatesLabel:TLabel;
CodeTemplateListBox:TListBox;
CodeTemplateAddButton:TButton;
CodeTemplateEditButton:TButton;
CodeTemplateDeleteButton:TButton;
CodeTemplateCodeLabel:TLabel;
CodeTemplateCodePreview:TPreviewEditor;
CodeTemplateIndentTypeRadioGroup: TRadioGroup;
SynAutoComplete:TSynEditAutoComplete;
// buttons at bottom
OkButton:TButton;
CancelButton:TButton;
// form
procedure EditorOptionsFormResize(Sender: TObject);
// general
procedure GeneralCheckBoxOnClick(Sender: TObject);
procedure ComboBoxOnChange(Sender:TObject);
procedure ComboBoxOnExit(Sender:TObject);
procedure ComboBoxOnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure ColorButtonColorChanged(Sender:TObject);
// display
procedure FontDialogApplyClicked(Sender: TObject);
procedure EditorFontButtonClick(Sender:TObject);
// key mapping
procedure KeyMappingChooseSchemeButtonClick(Sender: TObject);
procedure KeyMappingTreeViewMouseUp(Sender:TObject;
Button:TMouseButton; Shift:TShiftState; X,Y:integer);
procedure KeyMappingConsistencyCheckButtonClick(Sender: TObject);
// color
procedure ColorElementListBoxMouseUp(Sender:TObject;
Button:TMouseButton; Shift:TShiftState; X,Y:integer);
procedure ColorPreviewMouseUp(Sender:TObject;
Button:TMouseButton; Shift:TShiftState; X,Y:integer);
procedure OnSpecialLineColors(Sender: TObject; Line: integer;
var Special: boolean; var FG, BG: TColor);
procedure SetAttributeToDefaultButtonClick(Sender: TObject);
procedure SetAllAttributesToDefaultButtonClick(Sender: TObject);
// code tools
procedure CodeTemplateListBoxMouseUp(Sender:TObject;
Button:TMouseButton; Shift:TShiftState; X,Y:integer);
procedure CodeTemplateFileNameButtonClick(Sender:TObject);
procedure CodeTemplateButtonClick(Sender:TObject);
procedure CodeTemplatesGroupBoxResize(Sender: TObject);
// buttons at bottom
procedure OkButtonClick(Sender:TObject);
procedure CancelButtonClick(Sender:TObject);
private
FormCreating: boolean;
PreviewSyn: TCustomSyn;
PreviewEdits:array[1..3] of TPreviewEditor;
CurLanguageID: integer; // current index in EditorOpts.EditOptHighlighterList
CurHighlightElement: TSynHighlightElement;
CurCodeTemplate: integer;
UpdatingColor: boolean;
fHighlighterList: TStringList; // list of "ColorScheme" Data=TCustomSyn
fColorSchemes: TStringList; // list of LanguageName=ColorScheme
fFileExtensions: TStringList; // list of LanguageName=FileExtensions
EditingKeyMap: TKeyCommandRelationList;
procedure SetComboBoxText(AComboBox:TComboBox; const AText:AnsiString);
procedure FontDialogNameToFont(FontDialogName:Ansistring;AFont:TFont);
procedure InvalidatePreviews;
procedure SetPreviewSynInAllPreviews;
procedure SetupButtonBar;
procedure ResizeButtonBar;
// general
procedure SetupGeneralPage;
procedure ResizeGeneralPage;
// display
procedure SetupDisplayPage;
procedure ResizeDisplayPage;
// keymapping
procedure SetupKeyMappingsPage;
procedure ResizeKeyMappingsPage;
function KeyMappingRelationToString(Index:integer): String;
function KeyMappingRelationToString(KeyRelation: TKeyCommandRelation): String;
procedure FillKeyMappingTreeView;
// color
procedure SetupColorPage;
procedure ResizeColorPage;
procedure ShowCurAttribute;
procedure FindCurHighlightElement;
function GetHighlighter(SynClass: TCustomSynClass;
const ColorScheme: string; CreateIfNotExists: boolean): TCustomSyn;
procedure ClearHighlighters;
procedure SaveAllHighlighters;
procedure FillColorElementListBox;
function GetCurColorScheme(const LanguageName: string): string;
procedure SetCurColorScheme(const LanguageName, ColorScheme: string);
procedure SaveAllColorSchemes;
function GetCurFileExtension(const LanguageName: string): string;
procedure SetCurFileExtension(const LanguageName, FileExtensions: string);
procedure SaveAllFileExtensions;
procedure SetColorElementsToDefaults(OnlySelected: boolean);
// code tools
procedure SetupCodeToolsPage;
procedure ResizeCodeToolsPage;
procedure FillCodeTemplateListBox;
procedure ShowCurCodeTemplate;
procedure SaveCurCodeTemplate;
public
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
end;
const
LazSyntaxHighlighterNames : array[TLazSyntaxHighlighter] of string = (
'None',
'Text',
'FreePascal',
'Delphi',
'LFM',
'XML',
'HTML',
'C++',
'Perl',
'Java',
'Bash',
'Python'
);
var
EditorOptionsForm: TEditorOptionsForm;
EditorOpts: TEditorOptions;
function ShowEditorOptionsDialog:TModalResult;
function StrToLazSyntaxHighlighter(const s: string): TLazSyntaxHighlighter;
function ExtensionToLazSyntaxHighlighter(Ext:string): TLazSyntaxHighlighter;
implementation
const
ValidAttribChars = ['a'..'z','A'..'Z','_','0'..'9'];
// several language types can be redirected. For example there are FreePascal
// and Delphi, but currently both are hilighted with the FreePascal
// highlighter
CompatibleLazSyntaxHilighter:
array[TLazSyntaxHighlighter] of TLazSyntaxHighlighter= (
lshNone,
lshText,
lshFreePascal,
lshFreePascal,
lshLFM,
lshXML,
lshHTML,
lshCPP,
lshPerl,
lshJava,
lshBash,
lshPython
);
DefaultColorScheme = 'Default';
function ShowEditorOptionsDialog:TModalResult;
var
EditorOptionsForm: TEditorOptionsForm;
begin
Result:=mrCancel;
EditorOptionsForm:=TEditorOptionsForm.Create(Application);
try
Result:=EditorOptionsForm.ShowModal;
finally
EditorOptionsForm.Free;
end;
end;
function StrToLazSyntaxHighlighter(const s: string): TLazSyntaxHighlighter;
begin
for Result:=Low(TLazSyntaxHighlighter) to High(TLazSyntaxHighlighter) do
if (AnsiCompareText(s,LazSyntaxHighlighterNames[Result])=0)
then exit;
Result:=lshFreePascal;
end;
function ExtensionToLazSyntaxHighlighter(Ext: string): TLazSyntaxHighlighter;
var s, CurExt: string;
LangID, StartPos, EndPos: integer;
begin
Result:=lshNone;
if (Ext='') or (Ext='.') or (EditorOpts.HighlighterList=nil) then exit;
Ext:=lowercase(Ext);
if (Ext[1]='.') then Ext:=copy(Ext,2,length(Ext)-1);
LangID:=0;
while LangID<EditorOpts.HighlighterList.Count do begin
s:=EditorOpts.HighlighterList[LangID].FileExtensions;
StartPos:=1;
while StartPos<=length(s) do begin
Endpos:=StartPos;
while (EndPos<=length(s)) and (s[EndPos]<>';') do inc(EndPos);
CurExt:=copy(s,Startpos,EndPos-StartPos);
if (CurExt<>'') and (CurExt[1]='.') then begin
CurExt:=copy(CurExt,2,length(CurExt)-1);
end;
if lowercase(CurExt)=Ext then begin
Result:=EditorOpts.HighlighterList[LangID].TheType;
exit;
end;
Startpos:=EndPos+1;
end;
inc(LangID);
end;
end;
const
EditOptsConfFileName = 'editoroptions.xml';
function BuildBorlandDCIFile(
ACustomSynAutoComplete: TCustomSynAutoComplete):boolean;
// returns if something has changed
var sl: TStringList;
i, sp, ep: integer;
Token, Comment, Value: string;
begin
Result:=false;
sl:=TStringList.Create;
try
for i:=0 to ACustomSynAutoComplete.Completions.Count-1 do begin
Token:=ACustomSynAutoComplete.Completions[i];
Comment:=ACustomSynAutoComplete.CompletionComments[i];
Value:=ACustomSynAutoComplete.CompletionValues[i];
sl.Add('['+Token+' | '+Comment+']');
sp:=1;
ep:=1;
while ep<=length(Value) do begin
if Value[ep] in [#10,#13] then begin
sl.Add(copy(Value,sp,ep-sp));
inc(ep);
if (ep<=length(Value)) and (Value[ep] in [#10,#13])
and (Value[ep]<>Value[ep-1]) then inc(ep);
sp:=ep;
end else inc(ep);
end;
if (ep>sp) or ((Value<>'') and (Value[length(Value)] in [#10,#13])) then
sl.Add(copy(Value,sp,ep-sp));
end;
if ACustomSynAutoComplete.AutoCompleteList.Equals(sl)=false then begin
Result:=true;
ACustomSynAutoComplete.AutoCompleteList:=sl;
end;
finally
sl.Free;
end;
end;
function StrToValidXMLName(const s: string): string;
var i: integer;
begin
Result:=s;
// replace invalid characters
for i:=1 to length(Result) do
if (not (Result[i] in ValidAttribChars)) then
Result[i]:='_';
end;
procedure CopyHiLightAttributeValues(Src, Dest: TSynHighlightElement);
begin
Dest.Background:=Src.Background;
Dest.Foreground:=Src.Foreground;
Dest.Style:=Src.Style;
end;
{ TEditOptLanguageInfo }
constructor TEditOptLanguageInfo.Create;
begin
inherited Create;
end;
destructor TEditOptLanguageInfo.Destroy;
begin
MappedAttributes.Free;
inherited Destroy;
end;
function TEditOptLanguageInfo.SampleLineToAddAttr(
Line: integer): TAdditionalHilightAttribute;
begin
if Line<1 then begin
Result:=ahaNone;
exit;
end;
for Result:=Low(TAdditionalHilightAttribute)
to High(TAdditionalHilightAttribute) do
if (Result<>ahaNone) and (AddAttrSampleLines[Result]=Line) then exit;
Result:=ahaNone;
end;
function TEditOptLanguageInfo.GetDefaultFilextension: string;
var p: integer;
begin
// read the first file extension
p:=1;
while (p<=length(FileExtensions)) and (FileExtensions[p]<>';') do
inc(p);
if p>1 then
Result:='.'+copy(FileExtensions,1,p-1)
else
Result:='';
end;
{ TEditOptLangList }
function TEditOptLangList.GetInfos(
Index: integer): TEditOptLanguageInfo;
begin
if (Index<0) or (Index>=Count) then
raise Exception.Create('TEditOptLangList.GetInfos Index '
+IntToStr(Index)+' out of bounds. Count='+IntToStr(Count));
Result:=TEditOptLanguageInfo(inherited Items[Index]);
end;
procedure TEditOptLangList.Clear;
var i: integer;
begin
for i:=0 to Count-1 do Items[i].Free;
inherited Clear;
end;
constructor TEditOptLangList.Create;
var NewInfo: TEditOptLanguageInfo;
begin
inherited Create;
{ create the meta information for each available highlighter.
Plz keep the pascal highlighter at the top. The rest can be ordered as you
like.
}
// create info for pascal
NewInfo:=TEditOptLanguageInfo.Create;
with NewInfo do begin
TheType:=lshFreePascal;
DefaultCommentType:=DefaultCommentTypes[TheType];
SynClass:=LazSyntaxHighlighterClasses[TheType];
FileExtensions:='pp;pas;inc;lpr;lrs;dpr;dpk';
SampleSource:=
'{ Comment }'#13+
'{$R- compiler directive}'#13+
'procedure TForm1.Button1Click(Sender: TObject);'#13+
'var // Delphi Comment'#13+
' Number, I, X: Integer;'#13+
'begin'#13+
' Number := 12345;'#13+
' Caption := ''The number is '' + IntToStr(Number);'#13+
' asm'#13+
' MOV AX,1234h'#13+
' MOV Number,AX'#13+
' end;'#13+
' X := 10;'#13+
' { Search Match, Text Block }'#13+
' for I := 0 to Number do { execution point }'#13+
' begin'#13+
' Inc(X); { Enabled breakpoint }'#13+
' Dec(X); { Disabled breakpoint }'#13+
' // { Invalid breakpoint }'#13+
' WriteLN(X); { Unknown breakpoint }'#13+
' X := X + 1.0; { Error line }'#13+
' ListBox1.Items.Add(IntToStr(X));'#13+
' end;'#13+
'end;'#13+
#13;
AddAttrSampleLines[ahaDisabledBreakpoint]:=18;
AddAttrSampleLines[ahaEnabledBreakpoint]:=17;
AddAttrSampleLines[ahaInvalidBreakpoint]:=19;
AddAttrSampleLines[ahaUnknownBreakpoint]:=20;
AddAttrSampleLines[ahaErrorLine]:=21;
AddAttrSampleLines[ahaExecutionPoint]:=15;
AddAttrSampleLines[ahaTextBlock]:=14;
end;
Add(NewInfo);
// create info for html
NewInfo:=TEditOptLanguageInfo.Create;
with NewInfo do begin
TheType:=lshHTML;
DefaultCommentType:=DefaultCommentTypes[TheType];
SynClass:=LazSyntaxHighlighterClasses[TheType];
FileExtensions:='htm;html';
SampleSource:=
'<html>'#13+
'<title>Lazarus Sample source for html</title>'#13+
'<body bgcolor=#ffffff background="bg.jpg">'#13+
'<!-- Comment -->'#13+
'<img src="lazarus.jpg">'#13+
'<p>'#13+
' Some Text'#13+
' Ampersands: &nbsp;F&nbsp;P&nbsp;C'#13+
'</p>'#13+
'<invalid_tag>'#13+
'<!-- Text Block -->'#13+
'</body>'#13+
'</html>'#13+
#13;
AddAttrSampleLines[ahaTextBlock]:=11;
MappedAttributes:=TStringList.Create;
with MappedAttributes do begin
Add('Comment=Comment');
Add('Space=Space');
end;
end;
Add(NewInfo);
// create info for cpp
NewInfo:=TEditOptLanguageInfo.Create;
with NewInfo do begin
TheType:=lshCPP;
DefaultCommentType:=DefaultCommentTypes[TheType];
SynClass:=LazSyntaxHighlighterClasses[TheType];
FileExtensions:='c;cc;cpp;h;hpp';
SampleSource:=
'/* Comment */'#13+
'#include <stdio.h>'#13+
'#include <stdlib.h>'#13+
#13+
'static char line_buf[LINE_BUF];'#13+
#13+
'int main(int argc,char **argv){'#13+
' FILE *file;'#13+
' line_buf[0]=0;'#13+
' printf("\n");'#13+
' return 0;'#13+
'}'#13+
''#13+
#13;
AddAttrSampleLines[ahaTextBlock]:=11;
MappedAttributes:=TStringList.Create;
with MappedAttributes do begin
Add('Assembler=Assembler');
Add('Comment=Comment');
Add('Preprocessor=Comment');
Add('Identifier=Identifier');
Add('Reserved_word=Reserved_word');
Add('Number=Number');
Add('Space=Space');
Add('String=String');
Add('Symbol=Symbol');
end;
end;
Add(NewInfo);
// create info for XML
NewInfo:=TEditOptLanguageInfo.Create;
with NewInfo do begin
TheType:=lshXML;
DefaultCommentType:=DefaultCommentTypes[TheType];
SynClass:=LazSyntaxHighlighterClasses[TheType];
FileExtensions:='xml;xsd;xsl;xslt;dtd';
SampleSource:=
'<?xml version="1.0"?>'#13+
'<!DOCTYPE root ['#13+
' ]>'#13+
'<!-- Comment -->'#13+
'<root version="&test;">'#13+
' <![CDATA[ **CDATA section** ]]>'#13+
'</root>'#13+
'<!-- Text Block -->'#13+
''#13+
#13;
AddAttrSampleLines[ahaTextBlock]:=8;
MappedAttributes:=TStringList.Create;
with MappedAttributes do begin
Add('Element=Reserved_word');
Add('Comment=Comment');
Add('Text=Identifier');
Add('Space=Space');
Add('Symbol=Symbol');
end;
end;
Add(NewInfo);
// create info for LFM
NewInfo:=TEditOptLanguageInfo.Create;
with NewInfo do begin
TheType:=lshLFM;
DefaultCommentType:=DefaultCommentTypes[TheType];
SynClass:=LazSyntaxHighlighterClasses[TheType];
FileExtensions:='lfm;dfm;xfm';
SampleSource:=
'{ Lazarus Form Definitions }'#13+
'object TestForm: TTestForm'#13+
' Left = 273'#13+
' Top = 103'#13+
' Caption = ''sample source'''#13+
'end'#13+
'{ Text Block }'#13+
''#13+
#13;
AddAttrSampleLines[ahaTextBlock]:=7;
MappedAttributes:=TStringList.Create;
with MappedAttributes do begin
Add('Element=Reserved_word');
Add('Comment=Comment');
Add('Identifier=Identifier');
Add('Key=Reserved_word');
Add('Number=Number');
Add('Space=Space');
Add('String=String');
Add('Symbol=Symbol');
end;
end;
Add(NewInfo);
// create info for Perl
NewInfo:=TEditOptLanguageInfo.Create;
with NewInfo do begin
TheType:=lshPerl;
DefaultCommentType:=DefaultCommentTypes[TheType];
SynClass:=LazSyntaxHighlighterClasses[TheType];
FileExtensions:='pl;pm;cgi';
SampleSource:=
'#!/usr/bin/perl'#13+
'# Perl sample code'#13+
''#13+
'$i = "10";'#13+
'print "$ENV{PATH}\n";'#13+
'($i =~ /\d+/) || die "Error\n";'#13+
''#13+
'# Text Block'#13+
''#13+
#13;
AddAttrSampleLines[ahaTextBlock]:=8;
MappedAttributes:=TStringList.Create;
with MappedAttributes do begin
Add('Comment=Comment');
Add('Identifier=Identifier');
Add('KeyAttri=Reserved_word');
Add('NumberAttri=Number');
Add('SpaceAttri=Space');
Add('StringAttri=String');
Add('Symbol=Symbol');
end;
end;
Add(NewInfo);
// create info for Java
NewInfo:=TEditOptLanguageInfo.Create;
with NewInfo do begin
TheType:=lshJava;
DefaultCommentType:=DefaultCommentTypes[TheType];
SynClass:=LazSyntaxHighlighterClasses[TheType];
FileExtensions:='java';
SampleSource:=
'/* Java syntax highlighting */'#13#10 +
'import java.util.*;'#13#10 +
#13#10 +
'/** Example class */'#13#10 +
'public class Sample {'#13#10 +
' public static void main(String[] args) {'#13#10 +
' int i = 0;'#13#10 +
' for(i = 0; i < 10; i++)'#13#10 +
' System.out.println("Hello world");'#13#10 +
' }'#13#10 +
'}'#13#10 +
'/* Text Block */'#13#10 +
#13#10;
AddAttrSampleLines[ahaTextBlock]:=12;
MappedAttributes:=TStringList.Create;
with MappedAttributes do begin
Add('Comment=Comment');
Add('Documentation=Comment');
Add('Identifier=Identifier');
Add('Reserved_word=Reserved_word');
Add('Number=Number');
Add('Space=Space');
Add('String=String');
Add('Symbol=Symbol');
end;
end;
Add(NewInfo);
// create info for Bash
NewInfo:=TEditOptLanguageInfo.Create;
with NewInfo do begin
TheType:=lshBash;
DefaultCommentType:=DefaultCommentTypes[TheType];
SynClass:=LazSyntaxHighlighterClasses[TheType];
FileExtensions:='sh';
SampleSource:=
'#!/bin/bash'#13#13+
'# Bash syntax highlighting'#13#10 +
'set -x'#13#10 +
'set -e'#13#10 +
'Usage="Usage: $0 devel|stable"'#13#10 +
'FPCVersion=$1'#13#10 +
'for ver in devel stable; do'#13#10 +
' if [ "x$FPCVersion" = "x$ver" ]; then'#13#10 +
' fi'#13#10 +
'done'#13#10 +
'# Text Block'#13#10+
#13#10;
AddAttrSampleLines[ahaTextBlock]:=12;
MappedAttributes:=TStringList.Create;
with MappedAttributes do begin
Add('Comment=Comment');
Add('Variable=Identifier');
Add('Key=Reserved_word');
Add('Number=Number');
Add('Space=Space');
Add('String=String');
Add('Symbol=Symbol');
end;
end;
// create info for Python
NewInfo:=TEditOptLanguageInfo.Create;
with NewInfo do begin
TheType:=lshPython;
DefaultCommentType:=DefaultCommentTypes[TheType];
SynClass:=LazSyntaxHighlighterClasses[TheType];
FileExtensions:='py';
SampleSource:=
'# Python syntax highlighting'#13#10 +
'import math'#13#10 +
#13#10 +
'""" Documentation """'#13#10 +
'def DoSomething(Liste1,Liste2,param3=3):'#13#10 +
' for i in Liste1:'#13#10 +
' if i in Liste2:'#13#10 +
' Liste1.remove(i)'#13#10 +
'/* Text Block */'#13#10 +
#13#10;
AddAttrSampleLines[ahaTextBlock]:=9;
MappedAttributes:=TStringList.Create;
with MappedAttributes do begin
Add('Comment=Comment');
Add('Identifier=Identifier');
Add('Documentation=Comment');
Add('Reserved_word=Reserved_word');
Add('Number=Number');
Add('Space=Space');
Add('String=String');
Add('Symbol=Symbol');
end;
end;
Add(NewInfo);
end;
destructor TEditOptLangList.Destroy;
begin
Clear;
inherited Destroy;
end;
function TEditOptLangList.FindByName(const Name: string): integer;
begin
Result:=Count-1;
while (Result>=0)
and (AnsiCompareText(Items[Result].SynClass.GetLanguageName,Name)<>0) do
dec(Result);
end;
function TEditOptLangList.FindByClass(
CustomSynClass: TCustomSynClass): integer;
begin
Result:=Count-1;
while (Result>=0)
and (Items[Result].SynClass<>CustomSynClass) do
dec(Result);
end;
function TEditOptLangList.FindByHighlighter(Hilighter: TSynCustomHighlighter
): integer;
begin
if Hilighter<>nil then begin
Result:=FindByClass(TCustomSynClass(Hilighter.ClassType));
end else begin
Result:=-1;
end;
end;
function TEditOptLangList.FindByType(
AType: TLazSyntaxHighlighter): integer;
begin
AType:=CompatibleLazSyntaxHilighter[AType];
Result:=Count-1;
while (Result>=0) and (Items[Result].TheType<>AType) do
dec(Result);
end;
function TEditOptLangList.GetDefaultFilextension(
AType: TLazSyntaxHighlighter): string;
var i: integer;
begin
i:=FindByType(AType);
if i>=0 then
Result:=Items[i].GetDefaultFilextension
else
Result:='';
end;
{ TEditorOptions }
constructor TEditorOptions.Create;
var ConfFileName: string;
fs:TFileStream;
res:TLResource;
begin
inherited Create;
ConfFileName:=SetDirSeparators(GetPrimaryConfigPath+'/'+EditOptsConfFileName);
CopySecondaryConfigFile(EditOptsConfFileName);
try
if (not FileExists(ConfFileName)) then begin
writeln('NOTE: editor options config file not found - using defaults');
XMLConfig:=TXMLConfig.CreateClean(ConfFileName);
end else
XMLConfig:=TXMLConfig.Create(ConfFileName);
except
on E: Exception do begin
writeln('WARNING: unable to read ',ConfFileName,' ',E.Message);
XMLConfig:=nil;
end;
end;
// set defaults
// General options
fCtrlMouseLinks:=true;
fShowTabCloseButtons:=true;
FCopyWordAtCursorOnCopyNone:=true;
FShowGutterHints:=true;
fBlockIndent:=2;
fUndoLimit:=32767;
fTabWidth:=8;
// Display options
fEditorFont:='courier';
// Key Mappings
fKeyMappingScheme:='default';
fKeyMap:=TKeyCommandRelationList.Create;
fKeyMap.CreateDefaultMapping;
// Color options
fHighlighterList:=TEditOptLangList.Create;
// Code Tools options
fCodeTemplateFileName:=SetDirSeparators(GetPrimaryConfigPath+'/lazarus.dci');
CopySecondaryConfigFile('lazarus.dci');
if not FileExists(fCodeTemplateFileName) then begin
res:=LazarusResources.Find('lazarus_dci_file');
if (res<>nil) and (res.Value<>'') and (res.ValueType='DCI') then begin
try
fs:=TFileStream.Create(fCodeTemplateFileName,fmCreate);
try
fs.Write(res.Value[1],length(res.Value));
finally
fs.Free;
end;
except
writeln('WARNING: unable to write code template file "',
fCodeTemplateFileName,'"');
end;
end;
end;
end;
destructor TEditorOptions.Destroy;
begin
fHighlighterList.Free;
fKeyMap.Free;
XMLConfig.Free;
inherited Destroy;
end;
procedure TEditorOptions.Load;
// load options from XML file
var SynEditOpt:TSynEditorOption;
SynEditOptName:ansistring;
i: integer;
begin
try
// general options
for SynEditOpt:=Low(TSynEditorOption) to High(TSynEditorOption) do begin
case SynEditOpt of
eoAltSetsColumnMode:SynEditOptName:='AltSetsColumnMode';
eoAutoIndent:SynEditOptName:='AutoIndent';
eoBracketHighlight:SynEditOptName:='BracketHighlight';
eoDoubleClickSelectsLine:SynEditOptName:='DoubleClickSelectsLine';
eoDragDropEditing:SynEditOptName:='DragDropEditing';
eoDropFiles:SynEditOptName:='DropFiles';
eoHalfPageScroll:SynEditOptName:='HalfPageScroll';
eoKeepCaretX:SynEditOptName:='KeepCaretX';
eoPersistentCaret:SynEditOptName:='PersistentCaret';
eoScrollByOneLess:SynEditOptName:='ScrollByOneLess';
eoScrollPastEof:SynEditOptName:='ScrollPastEof';
eoScrollPastEol:SynEditOptName:='ScrollPastEol';
eoShowScrollHint:SynEditOptName:='ShowScrollHint';
eoSmartTabs:SynEditOptName:='SmartTabs';
eoTabsToSpaces:SynEditOptName:='TabsToSpaces';
eoTrimTrailingSpaces:SynEditOptName:='TrimTrailingSpaces';
else
SynEditOptName:='';
end;
if SynEditOptName<>'' then begin
if XMLConfig.GetValue('EditorOptions/General/Editor/'+SynEditOptName,
SynEditOpt in SynEditDefaultOptions)
then
Include(fSynEditOptions,SynEditOpt)
else
Exclude(fSynEditOptions,SynEditOpt);
end;
end;
fCtrlMouseLinks:=
XMLConfig.GetValue('EditorOptions/General/Editor/CtrlMouseLinks',true);
fShowTabCloseButtons:=
XMLConfig.GetValue('EditorOptions/General/Editor/ShowTabCloseButtons',true);
FCopyWordAtCursorOnCopyNone:=
XMLConfig.GetValue('EditorOptions/General/Editor/CopyWordAtCursorOnCopyNone',true);
FShowGutterHints:=
XMLConfig.GetValue('EditorOptions/General/Editor/ShowGutterHints',true);
fUndoAfterSave:=
XMLConfig.GetValue('EditorOptions/General/Editor/UndoAfterSave',true);
fFindTextAtCursor:=
XMLConfig.GetValue('EditorOptions/General/Editor/FindTextAtCursor',true);
fUseSyntaxHighlight:=
XMLConfig.GetValue('EditorOptions/General/Editor/UseSyntaxHighlight',true);
fBlockIndent:=
XMLConfig.GetValue('EditorOptions/General/Editor/BlockIndent',2);
fUndoLimit:=
XMLConfig.GetValue('EditorOptions/General/Editor/UndoLimit',32767);
fTabWidth:=
XMLConfig.GetValue('EditorOptions/General/Editor/TabWidth',8);
// Display options
fVisibleRightMargin:=
XMLConfig.GetValue('EditorOptions/Display/VisibleRightMargin',true);
fVisibleGutter:=
XMLConfig.GetValue('EditorOptions/Display/VisibleGutter',true);
fShowLineNumbers:=
XMLConfig.GetValue('EditorOptions/Display/ShowLineNumbers',false);
fGutterColor:=
XMLConfig.GetValue('EditorOptions/Display/GutterColor',clBtnFace);
fGutterWidth:=
XMLConfig.GetValue('EditorOptions/Display/GutterWidth',30);
fRightMargin:=
XMLConfig.GetValue('EditorOptions/Display/RightMargin',80);
fRightMarginColor:=
XMLConfig.GetValue('EditorOptions/Display/VisibleRightMarginColor'
,clBtnFace);
fEditorFont:=
XMLConfig.GetValue('EditorOptions/Display/EditorFont','courier');
fEditorFontHeight:=
XMLConfig.GetValue('EditorOptions/Display/EditorFontHeight',12);
fExtraLineSpacing:=
XMLConfig.GetValue('EditorOptions/Display/ExtraLineSpacing',1);
// Key Mappings options
fKeyMappingScheme:=
XMLConfig.GetValue('EditorOptions/KeyMapping/Scheme',
StrToValidXMLName(fKeyMappingScheme));
fKeyMap.LoadFromXMLConfig(XMLConfig
,'EditorOptions/KeyMapping/'+fKeyMappingScheme+'/');
// Color options
for i:=0 to fHighlighterList.Count-1 do begin
fHighlighterList[i].FileExtensions:=
XMLConfig.GetValue('EditorOptions/Color/Lang'
+StrToValidXMLName(fHighlighterList[i].SynClass.GetLanguageName)
+'/FileExtensions/Value',fHighlighterList[i].FileExtensions);
// color attributes are stored in the highlighters
end;
// Code Tools options
fAutoIdentifierCompletion:=
XMLConfig.GetValue('EditorOptions/CodeTools/AutoIdentifierCompletion',true);
fAutoCodeParameters:=
XMLConfig.GetValue('EditorOptions/CodeTools/AutoCodeParameters',true);
fAutoToolTipExprEval:=
XMLConfig.GetValue('EditorOptions/CodeTools/AutoToolTipExprEval',true);
fAutoToolTipSymbTools:=
XMLConfig.GetValue('EditorOptions/CodeTools/AutoToolTipSymbTools',false);
fAutoDelayInMSec:=
XMLConfig.GetValue('EditorOptions/CodeTools/AutoDelayInMSec',1000);
fCodeTemplateFileName:=
XMLConfig.GetValue('EditorOptions/CodeTools/CodeTemplateFileName'
,SetDirSeparators(GetPrimaryConfigPath+'/lazarus.dci'));
fCTemplIndentToTokenStart:=
XMLConfig.GetValue('EditorOptions/CodeTools/CodeTemplateIndentToTokenStart/Value'
,false);
except
on E: Exception do
writeln('[TEditorOptions.Load] ERROR: ',e.Message);
end;
end;
procedure TEditorOptions.Save;
// save options to XML file
var SynEditOpt:TSynEditorOption;
SynEditOptName:ansistring;
i: integer;
begin
try
XMLConfig.SetValue('EditorOptions/Version',EditorOptsFormatVersion);
// general options
for SynEditOpt:=Low(TSynEditorOption) to High(TSynEditorOption) do begin
case SynEditOpt of
eoAltSetsColumnMode:SynEditOptName:='AltSetsColumnMode';
eoAutoIndent:SynEditOptName:='AutoIndent';
eoBracketHighlight:SynEditOptName:='BracketHighlight';
eoDoubleClickSelectsLine:SynEditOptName:='DoubleClickSelectsLine';
eoDragDropEditing:SynEditOptName:='DragDropEditing';
eoDropFiles:SynEditOptName:='DropFiles';
eoHalfPageScroll:SynEditOptName:='HalfPageScroll';
eoKeepCaretX:SynEditOptName:='KeepCaretX';
eoPersistentCaret:SynEditOptName:='PersistentCaret';
eoScrollByOneLess:SynEditOptName:='ScrollByOneLess';
eoScrollPastEof:SynEditOptName:='ScrollPastEof';
eoScrollPastEol:SynEditOptName:='ScrollPastEol';
eoShowScrollHint:SynEditOptName:='ShowScrollHint';
eoSmartTabs:SynEditOptName:='SmartTabs';
eoTabsToSpaces:SynEditOptName:='TabsToSpaces';
eoTrimTrailingSpaces:SynEditOptName:='TrimTrailingSpaces';
else
SynEditOptName:='';
end;
if SynEditOptName<>'' then begin
XMLConfig.SetDeleteValue('EditorOptions/General/Editor/'+SynEditOptName,
SynEditOpt in fSynEditOptions,SynEditOpt in SynEditDefaultOptions);
end;
end;
XMLConfig.SetDeleteValue('EditorOptions/General/Editor/CtrlMouseLinks'
,fCtrlMouseLinks,true);
XMLConfig.SetDeleteValue('EditorOptions/General/Editor/ShowTabCloseButtons'
,fShowTabCloseButtons,true);
XMLConfig.SetDeleteValue(
'EditorOptions/General/Editor/CopyWordAtCursorOnCopyNone',
FCopyWordAtCursorOnCopyNone,true);
XMLConfig.SetDeleteValue(
'EditorOptions/General/Editor/ShowGutterHints',
FShowGutterHints,true);
XMLConfig.SetDeleteValue('EditorOptions/General/Editor/UndoAfterSave'
,fUndoAfterSave,true);
XMLConfig.SetDeleteValue('EditorOptions/General/Editor/FindTextAtCursor'
,fFindTextAtCursor,true);
XMLConfig.SetDeleteValue('EditorOptions/General/Editor/UseSyntaxHighlight'
,fUseSyntaxHighlight,true);
XMLConfig.SetDeleteValue('EditorOptions/General/Editor/BlockIndent'
,fBlockIndent,2);
XMLConfig.SetDeleteValue('EditorOptions/General/Editor/UndoLimit'
,fUndoLimit,32767);
XMLConfig.SetDeleteValue('EditorOptions/General/Editor/TabWidth'
,fTabWidth,8);
// Display options
XMLConfig.SetDeleteValue('EditorOptions/Display/VisibleRightMargin'
,fVisibleRightMargin,true);
XMLConfig.SetDeleteValue('EditorOptions/Display/VisibleGutter',
fVisibleGutter,true);
XMLConfig.SetDeleteValue('EditorOptions/Display/ShowLineNumbers',
fShowLineNumbers,false);
XMLConfig.SetDeleteValue('EditorOptions/Display/GutterColor',
fGutterColor,clBtnFace);
XMLConfig.SetDeleteValue('EditorOptions/Display/GutterWidth',
fGutterWidth,30);
XMLConfig.SetDeleteValue('EditorOptions/Display/RightMargin',
fRightMargin,80);
XMLConfig.SetDeleteValue('EditorOptions/Display/RightMarginColor',
fRightMarginColor,clBtnFace);
XMLConfig.SetDeleteValue('EditorOptions/Display/EditorFont',
fEditorFont,'courier');
XMLConfig.SetDeleteValue('EditorOptions/Display/EditorFontHeight'
,fEditorFontHeight,12);
XMLConfig.SetDeleteValue('EditorOptions/Display/ExtraLineSpacing'
,fExtraLineSpacing,1);
// Key Mappings options
XMLConfig.SetValue('EditorOptions/KeyMapping/Scheme',fKeyMappingScheme);
fKeyMap.SaveToXMLConfig(
XMLConfig,'EditorOptions/KeyMapping/'+fKeyMappingScheme+'/');
// Color options
for i:=0 to fHighlighterList.Count-1 do begin
XMLConfig.SetValue('EditorOptions/Color/Lang'
+StrToValidXMLName(fHighlighterList[i].SynClass.GetLanguageName)
+'/FileExtensions/Value',fHighlighterList[i].FileExtensions);
// color attributes are stored in the highlighters
end;
// Code Tools options
XMLConfig.SetDeleteValue('EditorOptions/CodeTools/AutoIdentifierCompletion'
,fAutoIdentifierCompletion,true);
XMLConfig.SetDeleteValue('EditorOptions/CodeTools/AutoCodeParameters'
,fAutoCodeParameters,true);
XMLConfig.SetDeleteValue('EditorOptions/CodeTools/AutoToolTipExprEval'
,fAutoToolTipExprEval,true);
XMLConfig.SetDeleteValue('EditorOptions/CodeTools/AutoToolTipSymbTools'
,fAutoToolTipSymbTools,false);
XMLConfig.SetDeleteValue('EditorOptions/CodeTools/AutoDelayInMSec'
,fAutoDelayInMSec,1000);
XMLConfig.SetDeleteValue('EditorOptions/CodeTools/CodeTemplateFileName'
,fCodeTemplateFileName,'');
XMLConfig.SetDeleteValue(
'EditorOptions/CodeTools/CodeTemplateIndentToTokenStart/Value'
,fCTemplIndentToTokenStart,false);
XMLConfig.Flush;
except
on E: Exception do
writeln('[TEditorOptions.Save] ERROR: ',e.Message);
end;
end;
function TEditorOptions.CreateSyn(
LazSynHilighter: TLazSyntaxHighlighter): TCustomSyn;
begin
if LazSyntaxHighlighterClasses[LazSynHilighter]<>nil then begin
Result:=LazSyntaxHighlighterClasses[LazSynHilighter].Create(nil);
AddSpecialHilightAttribsToHighlighter(Result);
GetHighlighterSettings(Result);
end else
Result:=nil;
end;
function TEditorOptions.ReadColorScheme(const LanguageName: string): string;
begin
if LanguageName='' then begin
Result:=DefaultColorScheme;
exit;
end;
if LanguageName<>TPreviewPasSyn.GetLanguageName then
Result:=XMLConfig.GetValue(
'EditorOptions/Color/Lang'+StrToValidXMLName(LanguageName)
+'/ColorScheme/Value','')
else
Result:='';
if Result='' then Result:=ReadPascalColorScheme;
end;
function TEditorOptions.ReadPascalColorScheme: string;
var FormatVersion: integer;
begin
FormatVersion:=XMLConfig.GetValue('EditorOptions/Color/Version',0);
if FormatVersion>1 then begin
Result:=XMLConfig.GetValue(
'EditorOptions/Color/Lang'
+StrToValidXMLName(TPreviewPasSyn.GetLanguageName)
+'/ColorScheme/Value','');
end else
Result:=XMLConfig.GetValue('EditorOptions/Color/ColorScheme','');
if Result='' then Result:=DefaultColorScheme;
end;
procedure TEditorOptions.WriteColorScheme(const LanguageName,
SynColorScheme: string);
begin
if (LanguageName='') or (SynColorScheme='') then exit;
XMLConfig.SetValue('EditorOptions/Color/Lang'+StrToValidXMLName(LanguageName)
+'/ColorScheme/Value',SynColorScheme);
XMLConfig.SetValue('EditorOptions/Color/Version',EditorOptsFormatVersion);
end;
procedure TEditorOptions.GetDefaultsForPascalAttribute(
Attr: TSynHighlightElement; const SynColorScheme: string);
var
AttriName:string;
DefBGCol,DefFGCol:TColor;
DefFontStyles:TFontStyles;
begin
AttriName:=Attr.Name;
if AttriName='' then exit;
DefFGCol:=clNone;
DefBGCol:=clNone;
DefFontStyles:=[];
if lowercase(SynColorScheme)='twilight' then begin
// default for twilight color scheme
DefBGCol:=clBlack;
DefFGCol:=clWhite;
if AttriName='Assembler' then begin
DefFGCol:=clLime;
end else if AttriName='Comment' then begin
DefFGCol:=clGray;
end else if AttriName='Directive' then begin
DefFGCol:=clRed;
end else if AttriName='Reserved word' then begin
DefFGCol:=clAqua;
DefFontStyles:=[fsBold];
end else if AttriName='Number' then begin
DefFGCol:=clFuchsia;
end else if AttriName='String' then begin
DefFGCol:=clYellow;
end else if AttriName='Symbol' then begin
DefFGCol:=clAqua;
end else if AttriName=AdditionalHighlightAttributes[ahaTextBlock] then begin
DefBGCol:=clWhite;
DefFGCol:=clBlack
end else if AttriName=AdditionalHighlightAttributes[ahaExecutionPoint]
then begin
DefBGCol:=clBlue;
DefFGCol:=clWhite;
end else if AttriName=AdditionalHighlightAttributes[ahaEnabledBreakpoint]
then begin
DefBGCol:=clRed;
DefFGCol:=clWhite;
end else if AttriName=AdditionalHighlightAttributes[ahaDisabledBreakpoint]
then begin
DefBGCol:=clLime;
DefFGCol:=clRed;
end else if AttriName=AdditionalHighlightAttributes[ahaInvalidBreakpoint]
then begin
DefBGCol:=clOlive;
DefFGCol:=clGreen;
end else if AttriName=AdditionalHighlightAttributes[ahaUnknownBreakpoint]
then begin
DefBGCol:=clRed;
DefFGCol:=clBlack;
end else if AttriName=AdditionalHighlightAttributes[ahaErrorLine] then begin
DefBGCol:=$50a0ff;
DefFGCol:=clBlack;
end;
end
else if lowercase(SynColorScheme)='pascal classic' then begin
// defaults for pascal classic color scheme
DefBGCol:=clNavy;
DefFGCol:=clYellow;
if AttriName='Assembler' then begin
DefBGCol:=clNone;
DefFGCol:=clLime;
end else if AttriName='Comment' then begin
DefBGCol:=clNone;
DefFGCol:=clSilver;
end else if AttriName='Directive' then begin
DefBGCol:=clNone;
DefFGCol:=clSilver;
end else if AttriName='Reserved word' then begin
DefBGCol:=clNone;
DefFGCol:=clWhite;
end else if AttriName='Number' then begin
DefBGCol:=clNone;
DefFGCol:=clYellow;
end else if AttriName='String' then begin
DefBGCol:=clNone;
DefFGCol:=clYellow;
end else if AttriName='Symbol' then begin
DefBGCol:=clNone;
DefFGCol:=clYellow;
end else if AttriName=AdditionalHighlightAttributes[ahaTextBlock] then begin
DefBGCol:=clBlue;
DefFGCol:=clWhite
end else if AttriName=AdditionalHighlightAttributes[ahaExecutionPoint]
then begin
DefBGCol:=clAqua;
DefFGCol:=clBlack;
end else if AttriName=AdditionalHighlightAttributes[ahaEnabledBreakpoint]
then begin
DefBGCol:=clRed;
DefFGCol:=clWhite;
end else if AttriName=AdditionalHighlightAttributes[ahaDisabledBreakpoint]
then begin
DefBGCol:=clLime;
DefFGCol:=clRed;
end else if AttriName=AdditionalHighlightAttributes[ahaInvalidBreakpoint]
then begin
DefBGCol:=clOlive;
DefFGCol:=clLime;
end else if AttriName=AdditionalHighlightAttributes[ahaUnknownBreakpoint]
then begin
DefBGCol:=clNone;
DefFGCol:=clNone;
end else if AttriName=AdditionalHighlightAttributes[ahaErrorLine] then begin
DefBGCol:=clMaroon;
DefFGCol:=clWhite;
end;
end
else if lowercase(SynColorScheme)='ocean' then begin
// default for ocean color scheme
DefBGCol:=clNavy;
DefFGCol:=clYellow;
if AttriName='Assembler' then begin
DefFGCol:=clLime;
end else if AttriName='Comment' then begin
DefFGCol:=clGray;
end else if AttriName='Directive' then begin
DefFGCol:=clRed;
end else if AttriName='Reserved word' then begin
DefFGCol:=clAqua;
DefFontStyles:=[fsBold];
end else if AttriName='Number' then begin
DefFGCol:=clFuchsia;
end else if AttriName='String' then begin
DefFGCol:=clYellow;
end else if AttriName='Symbol' then begin
DefFGCol:=clAqua;
end else if AttriName=AdditionalHighlightAttributes[ahaTextBlock] then begin
DefBGCol:=clWhite;
DefFGCol:=clBlack
end else if AttriName=AdditionalHighlightAttributes[ahaExecutionPoint]
then begin
DefBGCol:=clBlue;
DefFGCol:=clWhite;
end else if AttriName=AdditionalHighlightAttributes[ahaEnabledBreakpoint]
then begin
DefBGCol:=clRed;
DefFGCol:=clWhite;
end else if AttriName=AdditionalHighlightAttributes[ahaDisabledBreakpoint]
then begin
DefBGCol:=clLime;
DefFGCol:=clRed;
end else if AttriName=AdditionalHighlightAttributes[ahaInvalidBreakpoint]
then begin
DefBGCol:=clOlive;
DefFGCol:=clGreen;
end else if AttriName=AdditionalHighlightAttributes[ahaUnknownBreakpoint]
then begin
DefBGCol:=clRed;
DefFGCol:=clBlack;
end else if AttriName=AdditionalHighlightAttributes[ahaErrorLine] then begin
DefBGCol:=$50a0ff;
DefFGCol:=clBlack;
end;
end
else begin
// default for all other color schemes
if AttriName='Assembler' then begin
DefFGCol:=clGreen;
end else if AttriName='Comment' then begin
DefFGCol:=clBlue;
DefFontStyles:=[fsBold];
end else if AttriName='Directive' then begin
DefFGCol:=clRed;
DefFontStyles:=[fsBold];
end else if AttriName='Reserved word' then begin
DefFontStyles:=[fsBold];
end else if AttriName='Number' then begin
DefFGCol:=clNavy;
end else if AttriName='String' then begin
DefFGCol:=clBlue;
end else if AttriName='Symbol' then begin
DefFGCol:=clRed;
end else if AttriName=AdditionalHighlightAttributes[ahaTextBlock] then begin
DefBGCol:=clNavy;
DefFGCol:=clWhite;
end else if AttriName=AdditionalHighlightAttributes[ahaExecutionPoint]
then begin
DefBGCol:=clDKGray;
DefFGCol:=clWhite;
end else if AttriName=AdditionalHighlightAttributes[ahaEnabledBreakpoint]
then begin
DefBGCol:=clRed;
DefFGCol:=clBlack;
end else if AttriName=AdditionalHighlightAttributes[ahaDisabledBreakpoint]
then begin
DefBGCol:=clGreen;
DefFGCol:=clBlack;
end else if AttriName=AdditionalHighlightAttributes[ahaErrorLine] then begin
DefBGCol:=$50a0ff;
DefFGCol:=clBlack;
end;
end;
Attr.Foreground:=DefFGCol;
Attr.Background:=DefBGCol;
Attr.Style:=DefFontStyles;
end;
procedure TEditorOptions.ReadDefaultsForHighlighterSettings(Syn: TCustomSyn;
SynColorScheme: string; DefaultPascalSyn: TPreviewPasSyn);
// if SynColorScheme='' then default ColorScheme will be used
var VirginSyn, DefaultSyn: TCustomSyn;
i, j: integer;
MappedAttriName, AttriName: string;
HilightInfo: TEditOptLanguageInfo;
aha: TAdditionalHilightAttribute;
CustomPascalSyn: boolean;
begin
if SynColorScheme='' then SynColorScheme:=ReadColorScheme(Syn.LanguageName);
if SynColorScheme='' then exit;
CustomPascalSyn:=(DefaultPascalSyn<>nil);
if (Syn is TPreviewPasSyn) then begin
// the defaults for pascal are fix programmed
for i:=0 to Syn.AttrCount-1 do
GetDefaultsForPascalAttribute(Syn.Attribute[i],SynColorScheme);
end else begin
// the defaults of all non pascal languages are the mapped current values of
// pascal or the non mapped values of an untouched highlighter of the same
// type
i:=HighlighterList.FindByClass(TCustomSynClass(Syn.ClassType));
if i<0 then exit;
HilightInfo:=HighlighterList[i];
if not CustomPascalSyn then
DefaultPascalSyn:=TPreviewPasSyn.Create(nil);
VirginSyn:=TCustomSynClass(Syn.ClassType).Create(nil);
try
if not CustomPascalSyn then begin
AddSpecialHilightAttribsToHighlighter(DefaultPascalSyn);
ReadHighlighterSettings(DefaultPascalSyn,SynColorScheme);
end;
// map attributes
for i:=0 to Syn.AttrCount-1 do begin
AttriName:=StrToValidXMLName(Syn.Attribute[i].Name);
if AttriName='' then continue;
// check, if there is a known mapping for this attribute
if HilightInfo.MappedAttributes<>nil then
MappedAttriName:=
HilightInfo.MappedAttributes.Values[AttriName]
else
MappedAttriName:='';
if MappedAttriName='' then begin
// all special line color attributes can be mapped 1:1
for aha:=Low(TAdditionalHilightAttribute)
to High(TAdditionalHilightAttribute) do
if AnsiCompareText(
StrToValidXMLName(AdditionalHighlightAttributes[aha]),AttriName)=0
then
MappedAttriName:=AttriName;
end;
if MappedAttriName<>'' then
DefaultSyn:=DefaultPascalSyn
else
DefaultSyn:=VirginSyn;
// read defaults
j:=DefaultSyn.AttrCount-1;
while (j>=0) do begin
if AnsiCompareText(StrToValidXMLName(DefaultSyn.Attribute[j].Name),
MappedAttriName)=0
then begin
CopyHiLightAttributeValues(DefaultSyn.Attribute[j],Syn.Attribute[i]);
break;
end;
dec(j);
end;
end;
finally
VirginSyn.Free;
if not CustomPascalSyn then
DefaultPascalSyn.Free;
end;
end;
end;
procedure TEditorOptions.ReadHighlighterSettings(Syn: TCustomSyn;
SynColorScheme: string);
// if SynColorScheme='' then default ColorScheme will be used
var FormatVersion: integer;
i: integer;
AttriName: string;
Attri: TSynHighlightElement;
b: boolean;
fs: TFontStyles;
Path: string;
begin
// initialize with defaults
if SynColorScheme='' then SynColorScheme:=ReadColorScheme(Syn.LanguageName);
if (SynColorScheme='') or (Syn.LanguageName='') then exit;
ReadDefaultsForHighlighterSettings(Syn,SynColorScheme,nil);
// read settings, that are different from the defaults
FormatVersion:=XMLConfig.GetValue(
'EditorOptions/Color/Lang'+StrToValidXMLName(Syn.LanguageName)+'/Version',0);
if FormatVersion>1 then begin
// read all attributes
for i:=0 to Syn.AttrCount-1 do begin
Attri:=Syn.Attribute[i];
AttriName:=StrToValidXMLName(Attri.Name);
if AttriName='' then continue;
Path:='EditorOptions/Color/Lang'+StrToValidXMLName(Syn.LanguageName)
+'/Scheme'+StrToValidXMLName(SynColorScheme)
+'/'+StrToValidXMLName(AttriName)+'/';
Attri.BackGround:=XMLConfig.GetValue(Path+'BackgroundColor/Value',
Attri.Background);
Attri.ForeGround:=XMLConfig.GetValue(Path+'ForegroundColor/Value',
Attri.Foreground);
fs:=[];
b:=XMLConfig.GetValue(Path+'Style/Bold',fsBold in Attri.Style);
if b then Include(fs,fsBold);
b:=XMLConfig.GetValue(Path+'Style/Italic',fsItalic in Attri.Style);
if b then Include(fs,fsItalic);
b:=XMLConfig.GetValue(Path+'Style/Underline',fsUnderline in Attri.Style);
if b then Include(fs,fsUnderline);
Attri.Style:=fs;
end;
end else begin
// FormatVersion < 2
// the oldest format only supports pascal
if Syn is TPreviewPasSyn then begin
for i:=0 to Syn.AttrCount-1 do begin
Attri:=Syn.Attribute[i];
AttriName:=StrToValidXMLName(Attri.Name);
if AttriName='' then continue;
Path:='EditorOptions/Color/'+StrToValidXMLName(SynColorScheme)+'/'
+StrToValidXMLName(AttriName)+'/';
Attri.BackGround:=XMLConfig.GetValue(Path+'BackgroundColor',
Attri.Background);
Attri.ForeGround:=XMLConfig.GetValue(Path+'ForegroundColor',
Attri.Foreground);
fs:=[];
b:=XMLConfig.GetValue(Path+'Bold',fsBold in Attri.Style);
if b then Include(fs,fsBold);
b:=XMLConfig.GetValue(Path+'Italic',fsItalic in Attri.Style);
if b then Include(fs,fsItalic);
b:=XMLConfig.GetValue(Path+'Underline',fsUnderline in Attri.Style);
if b then Include(fs,fsUnderline);
Attri.Style:=fs;
end;
end;
end;
end;
procedure TEditorOptions.WriteHighlighterSettings(Syn: TCustomSyn;
SynColorScheme: string);
var OldSyn: TCustomSyn;
i: integer;
AttriName: string;
Attri, OldAttri: TSynHighlightElement;
Path: string;
begin
// read the old settings, compare and write only the differences
if SynColorScheme='' then SynColorScheme:=ReadColorScheme(Syn.LanguageName);
OldSyn:=TCustomSynClass(Syn.ClassType).Create(nil);
try
AddSpecialHilightAttribsToHighlighter(OldSyn);
ReadHighlighterSettings(OldSyn,SynColorScheme);
// write colorscheme
XMLConfig.SetValue('EditorOptions/Color/Lang'
+StrToValidXMLName(Syn.LanguageName)+'/Version',
EditorOptsFormatVersion);
// write all attributes
for i:=0 to Syn.AttrCount-1 do begin
Attri:=Syn.Attribute[i];
OldAttri:=OldSyn.Attribute[i];
AttriName:=StrToValidXMLName(Attri.Name);
if AttriName='' then continue;
Path:='EditorOptions/Color/Lang'+StrToValidXMLName(Syn.LanguageName)
+'/Scheme'+StrToValidXMLName(SynColorScheme)
+'/'+StrToValidXMLName(AttriName)+'/';
if Attri.Background<>OldAttri.Background then
XMLConfig.SetValue(Path+'BackgroundColor/Value',Attri.Background);
if Attri.Foreground<>OldAttri.Foreground then
XMLConfig.SetValue(Path+'ForegroundColor/Value',Attri.Foreground);
if Attri.Style<>OldAttri.Style then begin
XMLConfig.SetValue(Path+'Style/Bold',fsBold in Attri.Style);
XMLConfig.SetValue(Path+'Style/Italic',fsItalic in Attri.Style);
XMLConfig.SetValue(Path+'Style/Underline',fsUnderline in Attri.Style);
end;
end;
finally
OldSyn.Free;
end;
end;
procedure TEditorOptions.GetHighlighterSettings(Syn: TCustomSyn);
// read highlight settings from config file
begin
ReadHighlighterSettings(Syn,'');
end;
procedure TEditorOptions.SetHighlighterSettings(Syn: TCustomSyn);
// write highlight settings to config file
begin
WriteHighlighterSettings(Syn,'');
end;
procedure TEditorOptions.GetSpecialLineColors(Syn: TCustomSyn;
AddHilightAttr: TAdditionalHilightAttribute; var Special: boolean;
var FG, BG: TColor);
var
i: integer;
NewFG, NewBG: TColor;
begin
if Syn<>nil then begin
for i:=0 to Syn.AttrCount-1 do begin
if Syn.Attribute[i].Name='' then continue;
if Syn.Attribute[i].Name=AdditionalHighlightAttributes[AddHilightAttr]
then begin
NewFG:=Syn.Attribute[i].Foreground;
NewBG:=Syn.Attribute[i].Background;
Special:=(NewFG<>clNone) or (NewBG<>clNone);
if NewFG<>clNone then FG:=NewFG;
if NewBG<>clNone then BG:=NewBG;
exit;
end;
end;
end;
// set default
case AddHilightAttr of
ahaTextBlock:
begin
NewBG:=clNavy;
NewFG:=clWhite;
end;
ahaExecutionPoint:
begin
NewBG:=clDKGray;
NewFG:=clWhite;
end;
ahaEnabledBreakpoint:
begin
NewBG:=clRed;
NewFG:=clWhite;
end;
ahaDisabledBreakpoint:
begin
NewBG:=clGreen;
NewFG:=clBlack;
end;
ahaInvalidBreakpoint:
begin
NewBG:=clOlive;
NewFG:=clGreen;
end;
ahaUnknownBreakpoint:
begin
NewBG:=clRed;
NewFG:=clBlack;
end;
ahaErrorLine:
begin
NewBG:=$50a0ff;
NewFG:=clBlack;
end;
else
begin
NewBG:=clWhite;
NewFG:=clBlack;
end;
end;
Special:=(NewFG<>clNone) or (NewBG<>clNone);
if NewFG<>clNone then FG:=NewFG;
if NewBG<>clNone then BG:=NewBG;
end;
procedure TEditorOptions.GetSynEditSelectedColor(ASynEdit:TSynEdit);
var i: integer;
begin
if ASynEdit.Highlighter<>nil then begin
for i:=0 to ASynEdit.Highlighter.AttrCount-1 do begin
with ASynEdit.Highlighter.Attribute[i] do begin
if Name='' then continue;
if AnsiCompareText(StrToValidXMLName(Name),
StrToValidXMLName(AdditionalHighlightAttributes[ahaTextBlock]))=0 then
begin
ASynEdit.SelectedColor.Background:=Background;
ASynEdit.SelectedColor.Foreground:=Foreground;
exit;
end;
end;
end;
end;
// set defaults
ASynEdit.SelectedColor.Background:=clBlue;
ASynEdit.SelectedColor.Foreground:=clWhite;
end;
procedure TEditorOptions.GetSynEditSettings(ASynEdit:TSynEdit);
// read synedit setings from config file
begin
// general options
ASynEdit.Options:=fSynEditOptions;
ASynEdit.BlockIndent:=fBlockIndent;
ASynEdit.TabWidth:=fTabWidth;
// Display options
ASynEdit.Gutter.Visible:=fVisibleGutter;
ASynEdit.Gutter.ShowLineNumbers:=fShowLineNumbers;
ASynEdit.Gutter.Color:=fGutterColor;
ASynEdit.Gutter.Width:=fGutterWidth;
ASynEdit.RightEdge:=fRightMargin;
ASynEdit.RightEdgeColor:=fRightMarginColor;
ASynEdit.Font.Name:=fEditorFont;
ASynEdit.Font.Height:=fEditorFontHeight;
ASynEdit.ExtraLineSpacing:=fExtraLineSpacing;
ASynEdit.MaxUndo:=fUndoLimit;
GetSynEditSelectedColor(ASynEdit);
KeyMap.AssignTo(ASynEdit.KeyStrokes,[caSourceEditor]);
end;
procedure TEditorOptions.SetSynEditSettings(ASynEdit:TSynEdit);
// write synedit settings to file
begin
// general options
fSynEditOptions:=ASynEdit.Options;
fBlockIndent:=ASynEdit.BlockIndent;
fTabWidth:=ASynEdit.TabWidth;
// Display options
fVisibleGutter:=ASynEdit.Gutter.Visible;
fShowLineNumbers:=ASynEdit.Gutter.ShowLineNumbers;
fGutterColor:=ASynEdit.Gutter.Color;
fGutterWidth:=ASynEdit.Gutter.Width;
fRightMargin:=ASynEdit.RightEdge;
fEditorFont:=ASynEdit.Font.Name;
fEditorFontHeight:=ASynEdit.Font.Height;
fExtraLineSpacing:=ASynEdit.ExtraLineSpacing;
fUndoLimit:=ASynEdit.MaxUndo;
// XXX: KeyMap
// XXX: update all checkboxes, comboboxes...
end;
procedure TEditorOptions.AddSpecialHilightAttribsToHighlighter(Syn: TCustomSyn);
type
THasSpecialAttribute = array[TAdditionalHilightAttribute] of boolean;
var
HasSpecialAttribute: THasSpecialAttribute;
a: TAdditionalHilightAttribute;
i: integer;
begin
for a:=Low(TAdditionalHilightAttribute) to High(TAdditionalHilightAttribute)
do
HasSpecialAttribute[a]:=false;
for i:=0 to Syn.AttrCount-1 do begin
with Syn.Attribute[i] do begin
if Name='' then continue;
for a:=Low(TAdditionalHilightAttribute)
to High(TAdditionalHilightAttribute)
do begin
if AdditionalHighlightAttributes[a]=Name then
HasSpecialAttribute[a]:=true;
end;
end;
end;
for a:=Low(TAdditionalHilightAttribute) to High(TAdditionalHilightAttribute)
do
if not HasSpecialAttribute[a] then begin
Syn.AddSpecialAttribute(AdditionalHighlightAttributes[a]);
end;
end;
Procedure TEditorOptions.GetSynEditPreviewSettings(APreviewEditor: TObject);
// read synedit setings from config file
var ASynEdit: TSynEdit;
begin
if not (APreviewEditor is TSynEdit) then exit;
ASynEdit:=TSynEdit(APreviewEditor);
// general options
ASynEdit.Options:=fSynEditOptions-[eoDragDropEditing, eoDropFiles,
eoScrollPastEof]+[eoNoCaret, eoNoSelection];
ASynEdit.BlockIndent:=fBlockIndent;
ASynEdit.TabWidth:=fTabWidth;
// Display options
ASynEdit.Gutter.Visible:=false;
ASynEdit.RightEdge:=fRightMargin;
ASynEdit.RightEdgeColor:=fRightMarginColor;
ASynEdit.Font.Name:=fEditorFont;
ASynEdit.Font.Height:=fEditorFontHeight;
ASynEdit.ExtraLineSpacing:=fExtraLineSpacing;
ASynEdit.ReadOnly:=true;
KeyMap.AssignTo(ASynEdit.KeyStrokes,[caSourceEditor]);
end;
{ TEditorOptionsForm }
constructor TEditorOptionsForm.Create(TheOwner:TComponent);
procedure AddResImg(const ResName: string);
var Pixmap: TPixmap;
begin
Pixmap:=TPixmap.Create;
Pixmap.TransparentColor:=clWhite;
Pixmap.LoadFromLazarusResource(ResName);
ImageList.Add(Pixmap,nil)
end;
var a:integer;
s:Ansistring;
begin
inherited Create(TheOwner);
FormCreating:=true;
Caption:=lismenueditoroptions;
if LazarusResources.Find(ClassName)=nil then
begin
Position:=poScreenCenter;
Caption:=lismenueditoroptions;
IDEDialogLayoutList.ApplyLayout(Self,480,459);
OnResize:=@EditorOptionsFormResize;
SynAutoComplete:=TSynEditAutoComplete.Create(Self);
MainNoteBook:=TNoteBook.Create(Self);
with MainNoteBook do
begin
Parent:=Self;
Top:=0;
Left:=0;
Width:=Self.Width;
Height:=Self.Height-50;
if PageCount>0 then
Pages.Strings[0]:=lisMenuInsertGeneral
else
Pages.Add(lisMenuInsertGeneral);
Pages.Add(dlgEdDisplay);
Pages.Add(dlgKeyMapping);
Pages.Add(dlgEdColor);
Pages.Add(dlgCodeToolsTab);
PageIndex:=0;
end;
ImageList:=TImageList.Create(Self);
with ImageList do begin
Name:='ImageList';
Width:=22;
Height:=22;
AddResImg('keymapcategory');
AddResImg('keymaprelation');
end;
SetupGeneralPage;
SetupDisplayPage;
SetupKeyMappingsPage;
SetupColorPage;
SetupCodeToolsPage;
SetupButtonBar;
end;
UpdatingColor:=false;
CurHighlightElement:=nil;
// create a temporary copy of the keymap for editing
EditingKeyMap:=TKeyCommandRelationList.Create;
EditingKeyMap.Assign(EditorOpts.KeyMap);
// initialize previews
for a:=Low(PreviewEdits) to High(PreviewEdits) do
PreviewEdits[a]:=nil;
s:=GetCurColorScheme(TPreviewPasSyn.GetLanguageName);
PreviewSyn:=GetHighlighter(TPreviewPasSyn,s,true);
CurLanguageID:=EditorOpts.HighlighterList.FindByClass(
TCustomSynClass(PreviewSyn.ClassType));
PreviewEdits[1]:=DisplayPreview;
PreviewEdits[2]:=ColorPreview;
PreviewEdits[3]:=CodeTemplateCodePreview;
for a:=Low(PreviewEdits) to High(PreviewEdits) do
begin
if PreviewEdits[a]<>nil then
with PreviewEdits[a] do
begin
if EditorOpts.UseSyntaxHighlight then
Highlighter:=PreviewSyn;
EditorOpts.GetSynEditSettings(PreviewEdits[a]);
EditingKeyMap.AssignTo(PreviewEdits[a].KeyStrokes,[caSourceEditor]);
if a<>3 then
begin
Lines.Text:=EditorOpts.HighlighterList[CurLanguageID].SampleSource;
PreviewEdits[a].Options:=PreviewEdits[a].Options
+[eoNoCaret, eoNoSelection]
-[eoBracketHighlight];
end;
end;
end;
CodeTemplateCodePreview.Gutter.Visible:=false;
// general options
// display options
// key mappings
FillKeyMappingTreeView;
// color options
LanguageComboBox.Text:=PreviewSyn.LanguageName;
SetComboBoxText(LanguageComboBox,LanguageComboBox.Text);
ColorSchemeComboBox.Text:=GetCurColorScheme(PreviewSyn.LanguageName);
SetComboBoxText(ColorSchemeComboBox,ColorSchemeComboBox.Text);
FillColorElementListBox;
FindCurHighlightElement;
ShowCurAttribute;
// code Tools options
with SynAutoComplete do begin
s:=EditorOpts.CodeTemplateFileName;
if FileExists(s) then
try
AutoCompleteList.LoadFromFile(s);
except
writeln('NOTE: unable to read code template file ''',s,'''');
end;
end;
FillCodeTemplateListBox;
with CodeTemplateListBox do
if Items.Count>0 then begin
Selected[0]:=true;
ShowCurCodeTemplate;
end;
if EditorOpts.CodeTemplateIndentToTokenStart then
CodeTemplateIndentTypeRadioGroup.ItemIndex:=0
else
CodeTemplateIndentTypeRadioGroup.ItemIndex:=1;
MainNoteBook.PageIndex:=0;
FormCreating:=false;
EditorOptionsFormResize(nil);
end;
destructor TEditorOptionsForm.Destroy;
begin
ClearHighlighters;
fColorSchemes.Free;
fFileExtensions.Free;
EditingKeyMap.Free;
inherited Destroy;
end;
// general
procedure TEditorOptionsForm.CodeTemplatesGroupBoxResize(Sender: TObject);
begin
with CodeTemplateFileNameLabel do begin
Top:=5;
Left:=7;
Width:=110;
end;
with CodeTemplateFileNameComboBox do begin
Top:=3;
Left:=CodeTemplateFileNameLabel.Left+CodeTemplateFileNameLabel.Width+2;
Width:=CodeTemplatesGroupBox.Width-12-Left-Height;
end;
with CodeTemplateFileNameButton do begin
Top:=CodeTemplateFileNameComboBox.Top+2;
Width:=CodeTemplateFileNameComboBox.Height-5;
Left:=CodeTemplatesGroupBox.Width-9-Width;
Height:=Width;
end;
with CodeTemplateAddButton do begin
Top:=CodeTemplateFileNameComboBox.Top+CodeTemplateFileNameComboBox.Height+10;
Width:=50;
Left:=CodeTemplateFileNameLabel.Left;
Height:=23;
end;
with CodeTemplateEditButton do begin
Top:=CodeTemplateAddButton.Top+CodeTemplateAddButton.Height+5;
Left:=CodeTemplateAddButton.Left;
Width:=CodeTemplateAddButton.Width;
Height:=CodeTemplateAddButton.Height;
end;
with CodeTemplateDeleteButton do begin
Top:=CodeTemplateEditButton.Top+CodeTemplateEditButton.Height+5;
Left:=CodeTemplateAddButton.Left;
Width:=CodeTemplateAddButton.Width;
Height:=CodeTemplateAddButton.Height;
end;
with CodeTemplatesLabel do begin
Top:=CodeTemplateFileNameLabel.Top+CodeTemplateFileNameLabel.Height+12;
Left:=CodeTemplateAddButton.Left+CodeTemplateAddButton.Width+5;
Width:=60;
end;
with CodeTemplateListBox do begin
Top:=CodeTemplatesLabel.Top;
Left:=CodeTemplatesLabel.Left+CodeTemplatesLabel.Width+5;
Width:=Parent.ClientWidth-8-Left;
Height:=80;
end;
with CodeTemplateCodeLabel do begin
Top:=CodeTemplateListBox.Top+CodeTemplateListBox.Height+5;
Left:=CodeTemplatesLabel.Left;
Width:=CodeTemplatesLabel.Width;
Height:=CodeTemplatesLabel.Height;
end;
with CodeTemplateCodePreview do begin
Top:=CodeTemplateCodeLabel.Top;
Left:=CodeTemplateCodeLabel.Left+CodeTemplateCodeLabel.Width+5;
Width:=CodeTemplateListBox.Width;
Height:=CodeTemplatesGroupBox.ClientHeight-Top;
end;
with CodeTemplateIndentTypeRadioGroup do begin
Left:=CodeTemplateAddButton.Left;
Top:=CodeTemplateCodeLabel.Top+CodeTemplateCodeLabel.Height+15;
Width:=CodeTemplateCodePreview.Left-Left-8;
Height:=70;
end;
end;
procedure TEditorOptionsForm.EditorOptionsFormResize(Sender: TObject);
begin
with MainNoteBook do begin
Top:=0;
Left:=0;
Width:=Self.Width;
Height:=Self.Height-50;
end;
ResizeGeneralPage;
ResizeDisplayPage;
ResizeKeyMappingsPage;
ResizeColorPage;
ResizeCodeToolsPage;
ResizeButtonBar;
end;
procedure TEditorOptionsForm.GeneralCheckBoxOnClick(Sender: TObject);
var a:integer;
NewColor:TColor;
procedure SetOption(ACheckBox:TCheckBox;AnOption:TSynEditorOption);
var a:integer;
begin
if Sender=ACheckBox then
for a:=Low(PreviewEdits) to High(PreviewEdits) do
if PreviewEdits[a]<>nil then
if ACheckBox.Checked then
PreviewEdits[a].Options:=PreviewEdits[a].Options+[AnOption]
else
PreviewEdits[a].Options:=PreviewEdits[a].Options-[AnOption]
end;
// GeneralCheckBoxOnClick
begin
if FormCreating then exit;
// general
SetOption(AltSetsColumnModeCheckBox,eoAltSetsColumnMode);
SetOption(AutoIndentCheckBox,eoAutoIndent);
// not for Preview: SetOption(BracketHighlightCheckBox,eoBracketHighlight);
SetOption(DoubleClickLineCheckBox,eoDoubleClickSelectsLine);
SetOption(DragDropEditingCheckBox,eoDragDropEditing);
SetOption(DropFilesCheckBox,eoDropFiles);
SetOption(HalfPageScrollCheckBox,eoHalfPageScroll);
SetOption(KeepCaretXCheckBox,eoKeepCaretX);
SetOption(PersistentCaretCheckBox,eoPersistentCaret);
// not for Preview: SetOption(NoSelectionCheckBox,eoNoSelection);
SetOption(ScrollByOneLessCheckBox,eoScrollByOneLess);
SetOption(ScrollPastEoFCheckBox,eoScrollPastEoF);
SetOption(ScrollPastEoLCheckBox,eoScrollPastEoL);
SetOption(ShowScrollHintCheckBox,eoShowScrollHint);
SetOption(SmartTabsCheckBox,eoSmartTabs);
SetOption(TabsToSpacesCheckBox,eoTabsToSpaces);
SetOption(TrimTrailingSpacesCheckBox,eoTrimTrailingSpaces);
for a:=Low(PreviewEdits) to High(PreviewEdits) do begin
if PreviewEdits[a]<>nil then begin
// general
if Sender=UseSyntaxHighlightCheckBox then
if UseSyntaxHighlightCheckBox.Checked then
PreviewEdits[a].Highlighter:=PreviewSyn
else
PreviewEdits[a].Highlighter:=nil;
// display
if (a in [1,2]) then
PreviewEdits[a].Gutter.Visible:=VisibleGutterCheckBox.Checked;
PreviewEdits[a].Gutter.ShowLineNumbers:=ShowLineNumbersCheckBox.Checked;
end;
end;
if CurHighlightElement<>nil then begin
if Sender=ForeGroundUseDefaultCheckBox then begin
if UpdatingColor=false then begin
UpdatingColor:=true;
if not ForeGroundUseDefaultCheckBox.Checked then
NewColor:=ForeGroundColorButton.ButtonColor
else
NewColor:=clNone;
ForeGroundColorButton.Visible:=not ForeGroundUseDefaultCheckBox.Checked;
if NewColor<>CurHighlightElement.Foreground then begin
CurHighlightElement.Foreground:=NewColor;
InvalidatePreviews;
end;
UpdatingColor:=false;
end;
end;
if Sender=BackGroundUseDefaultCheckBox then begin
if UpdatingColor=false then begin
if not BackGroundUseDefaultCheckBox.Checked then
NewColor:=BackGroundColorButton.ButtonColor
else
NewColor:=clNone;
BackGroundColorButton.Visible:=not BackGroundUseDefaultCheckBox.Checked;
if NewColor<>CurHighlightElement.Background then begin
CurHighlightElement.Background:=NewColor;
InvalidatePreviews;
end;
end;
end;
if Sender=TextBoldCheckBox then begin
if TextBoldCheckBox.Checked
xor (fsBold in CurHighlightElement.Style) then
begin
if TextBoldCheckBox.Checked then
CurHighlightElement.Style:=CurHighlightElement.Style+[fsBold]
else
CurHighlightElement.Style:=CurHighlightElement.Style-[fsBold];
InvalidatePreviews;
end;
end;
if Sender=TextItalicCheckBox then begin
if TextItalicCheckBox.Checked then begin
if not (fsItalic in CurHighlightElement.Style) then begin
CurHighlightElement.Style:=CurHighlightElement.Style+[fsItalic];
InvalidatePreviews;
end;
end else begin
if (fsItalic in CurHighlightElement.Style) then begin
CurHighlightElement.Style:=CurHighlightElement.Style-[fsItalic];
InvalidatePreviews;
end;
end;
end;
if Sender=TextUnderlineCheckBox then begin
if TextUnderlineCheckBox.Checked then begin
if not (fsUnderline in CurHighlightElement.Style) then begin
CurHighlightElement.Style:=CurHighlightElement.Style+[fsUnderline];
InvalidatePreviews;
end;
end else begin
if (fsUnderline in CurHighlightElement.Style) then begin
CurHighlightElement.Style:=CurHighlightElement.Style-[fsUnderline];
InvalidatePreviews;
end;
end;
end;
end;
end;
procedure TEditorOptionsForm.ColorButtonColorChanged(Sender:TObject);
var a:integer;
begin
if FormCreating then exit;
if Sender=ForeGroundColorButton then begin
if (CurHighlightElement=nil) or UpdatingColor then exit;
if not ForeGroundUseDefaultCheckBox.Checked then begin
CurHighlightElement.Foreground:=ForeGroundColorButton.ButtonColor;
InvalidatePreviews;
end;
end;
if Sender=BackGroundColorButton then begin
if (CurHighlightElement=nil) or UpdatingColor then exit;
if not BackGroundUseDefaultCheckBox.Checked then begin
CurHighlightElement.Background:=BackGroundColorButton.ButtonColor;
InvalidatePreviews;
end;
end;
if Sender=GutterColorButton then begin
for a:=Low(PreviewEdits) to High(PreviewEdits) do begin
if PreviewEdits[a]<>nil then begin
PreviewEdits[a].Gutter.Color:=GutterColorButton.ButtonColor;
PreviewEdits[a].Invalidate;
end;
end;
end;
if Sender=RightMarginColorButton then begin
for a:=Low(PreviewEdits) to High(PreviewEdits) do begin
if PreviewEdits[a]<>nil then begin
PreviewEdits[a].RightEdgeColor:=RightMarginColorButton.ButtonColor;
PreviewEdits[a].Invalidate;
end;
end;
end;
end;
procedure TEditorOptionsForm.FontDialogNameToFont(FontDialogName:Ansistring;
AFont:TFont);
var TmpFont:TFont;
p,p2,index:integer;
s:shortstring;
begin
TmpFont:=TFont.Create;
TmpFont.Assign(AFont);
try
p:=1;
p2:=0;
index:=1;
while (p<=length(FontDialogName)) do begin
if(FontDialogName[p]='-') then begin
s:=copy(FontDialogName,p2+1,p-p2-1);
p2:=p;
case Index of
3:TmpFont.Name:=s;
//8:TmpFont.Height:=StrToIntDef(s,TmpFont.Height);
end;
inc(Index);
end;
inc(p);
end;
AFont.Assign(TmpFont);
finally
TmpFont.Free;
end;
end;
procedure TEditorOptionsForm.FontDialogApplyClicked(Sender: TObject);
var a: integer;
begin
for a:=Low(PreviewEdits) to High(PreviewEdits) do begin
if PreviewEdits[a]<>nil then
PreviewEdits[a].Font.Assign(TFontDialog(Sender).Font);
end;
EditorFontComboBox.Text:=DisplayPreview.Font.Name;
SetComboBoxText(EditorFontHeightComboBox,
IntToStr(DisplayPreview.Font.Height));
end;
procedure TEditorOptionsForm.EditorFontButtonClick(Sender:TObject);
var
FontDialog:TFontDialog;
begin
FontDialog:=TFontDialog.Create(Application);
try
with FontDialog do begin
Options:=Options+[fdApplyButton];
OnApplyClicked:=@FontDialogApplyClicked;
if Execute then begin
FontDialogApplyClicked(FontDialog);
end;
end;
finally
FontDialog.Free;
end;
end;
procedure TEditorOptionsForm.KeyMappingChooseSchemeButtonClick(Sender: TObject);
var
NewScheme: string;
begin
if ShowChooseKeySchemeDialog(NewScheme)<>mrOk then exit;
EditingKeyMap.LoadScheme(NewScheme);
FillKeyMappingTreeView;
end;
procedure TEditorOptionsForm.ComboBoxOnExit(Sender:TObject);
var NewVal,a:integer;
Box: TComboBox;
begin
if FormCreating then exit;
Box:=TComboBox(Sender);
if PreviewEdits[1]<>nil then begin
// general
if Sender=BlockIndentComboBox then begin
NewVal:=StrToIntDef(BlockIndentComboBox.Text
,PreviewEdits[1].BlockIndent);
SetComboBoxText(BlockIndentComboBox,IntToStr(NewVal));
for a:=Low(PreviewEdits) to High(PreviewEdits) do
if PreviewEdits[a]<>nil then
PreviewEdits[a].BlockIndent:=NewVal;
end
else if Sender=TabWidthsComboBox then begin
NewVal:=StrToIntDef(TabWidthsComboBox.Text
,PreviewEdits[1].TabWidth);
SetComboBoxText(TabWidthsComboBox,IntToStr(NewVal));
for a:=Low(PreviewEdits) to High(PreviewEdits) do
if PreviewEdits[a]<>nil then
PreviewEdits[a].TabWidth:=NewVal;
end
// display
else if Sender=EditorFontHeightComboBox then begin
NewVal:=StrToIntDef(EditorFontHeightComboBox.Text
,PreviewEdits[1].Font.Height);
if (NewVal<0) then
if (NewVal>-6) then
NewVal:=-6;
if (NewVal>=0) then
if (NewVal<6) then
NewVal:=6;
if (NewVal>40) then
NewVal:=40;
if (NewVal<-40) then
NewVal:=-40;
SetComboBoxText(EditorFontHeightComboBox,IntToStr(NewVal));
for a:=Low(PreviewEdits) to High(PreviewEdits) do
if PreviewEdits[a]<>nil then
PreviewEdits[a].Font.Height:=NewVal;
end
else if Sender=ExtraLineSpacingComboBox then begin
NewVal:=StrToIntDef(ExtraLineSpacingComboBox.Text
,PreviewEdits[1].ExtraLineSpacing);
SetComboBoxText(ExtraLineSpacingComboBox,IntToStr(NewVal));
for a:=Low(PreviewEdits) to High(PreviewEdits) do
if PreviewEdits[a]<>nil then
PreviewEdits[a].ExtraLineSpacing:=NewVal;
end
else if Sender=GutterWidthComboBox then begin
NewVal:=StrToIntDef(GutterWidthComboBox.Text
,PreviewEdits[1].Gutter.Width);
SetComboBoxText(GutterWidthComboBox,IntToStr(NewVal));
for a:=Low(PreviewEdits) to High(PreviewEdits) do
if PreviewEdits[a]<>nil then
PreviewEdits[a].Gutter.Width:=NewVal;
end
else if Sender=RightMarginComboBox then begin
NewVal:=StrToIntDef(RightMarginComboBox.Text
,PreviewEdits[1].RightEdge);
SetComboBoxText(RightMarginComboBox,IntToStr(NewVal));
for a:=Low(PreviewEdits) to High(PreviewEdits) do
if PreviewEdits[a]<>nil then
PreviewEdits[a].RightEdge:=NewVal;
end
// color
else if Sender=ColorSchemeComboBox then begin
if Box.Items.IndexOf(Box.Text)<0 then begin
// unknown color scheme -> switch back
SetComboBoxText(Box,GetCurColorScheme(PreviewSyn.LanguageName));
end else begin
// change the colorscheme
if Box.Text<>GetCurColorScheme(PreviewSyn.LanguageName) then begin
SetCurColorScheme(PreviewSyn.LanguageName,Box.Text);
SetComboBoxText(Box,Box.Text);
PreviewSyn:=GetHighlighter(TCustomSynClass(PreviewSyn.ClassType),
Box.Text,true);
SetPreviewSynInAllPreviews;
FillColorElementListBox;
FindCurHighlightElement;
end;
end;
end else if Sender=FileExtensionsComboBox then begin
if Box.Text<>GetCurFileExtension(PreviewSyn.LanguageName) then begin
SetCurFileExtension(PreviewSyn.LanguageName,Box.Text);
SetComboBoxText(Box,Box.Text);
end;
end else if Sender=LanguageComboBox then begin
if Box.Items.IndexOf(Box.Text)<0 then begin
// unknown language -> switch back
SetComboBoxText(Box,PreviewSyn.LanguageName);
end else begin
// change language
if Box.Text<>PreviewSyn.LanguageName then begin
NewVal:=EditorOpts.HighlighterList.FindByName(Box.Text);
if NewVal>=0 then begin
SetComboBoxText(Box,Box.Text);
CurLanguageID:=NewVal;
PreviewSyn:=GetHighlighter(
EditorOpts.HighlighterList[CurLanguageID].SynClass,
GetCurColorScheme(
EditorOpts.HighlighterList[CurLanguageID].SynClass.GetLanguageName)
,true);
SetComboBoxText(ColorSchemeComboBox,
GetCurColorScheme(PreviewSyn.LanguageName));
SetComboBoxText(FileExtensionsComboBox,
GetCurFileExtension(PreviewSyn.LanguageName));
for a:=Low(PreviewEdits) to High(PreviewEdits) do
if a<>3 then
PreviewEdits[a].Lines.Text:=
EditorOpts.HighlighterList[CurLanguageID].SampleSource;
SetPreviewSynInAllPreviews;
FillColorElementListBox;
FindCurHighlightElement;
end;
end;
end;
end;
end;
end;
procedure TEditorOptionsForm.ComboBoxOnKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
if (ssCtrl in Shift) and (Key=VK_S) then begin
ComboBoxOnExit(Sender);
end;
end;
procedure TEditorOptionsForm.ComboBoxOnChange(Sender:TObject);
var ComboBox:TComboBox;
begin
ComboBox:=TComboBox(Sender);
if ComboBox.Items.IndexOf(ComboBox.Text)>=0 then
ComboBoxOnExit(Sender);
end;
procedure TEditorOptionsForm.FindCurHighlightElement;
var a, i:integer;
Old:TSynHighlightElement;
begin
Old:=CurHighlightElement;
CurHighlightElement:=nil;
a:=0;
while a<ColorElementListBox.Items.Count do begin
if ColorElementListBox.Selected[a] then begin
i:=PreviewSyn.AttrCount-1;
while (i>=0) do begin
if ColorElementListBox.Items[a]=PreviewSyn.Attribute[i].Name then
break;
dec(i);
end;
if i>=0 then begin
CurHighlightElement:=PreviewSyn.Attribute[i];
break;
end;
end;
inc(a);
end;
if (CurHighlightElement=nil) and (ColorElementListBox.Items.Count>0) then
begin
// none selected -> select one
ColorElementListBox.Selected[0]:=true;
i:=PreviewSyn.AttrCount-1;
while (i>=0) do begin
if ColorElementListBox.Items[0]=PreviewSyn.Attribute[i].Name then begin
CurHighlightElement:=PreviewSyn.Attribute[i];
break;
end;
dec(i);
end;
end;
if Old<>CurHighlightElement then
ShowCurAttribute;
end;
procedure TEditorOptionsForm.InvalidatePreviews;
var a:integer;
begin
for a:=Low(PreviewEdits) to High(PreviewEdits) do
if PreviewEdits[a]<>nil then
PreviewEdits[a].Invalidate;
end;
procedure TEditorOptionsForm.SetPreviewSynInAllPreviews;
var a:integer;
begin
for a:=Low(PreviewEdits) to High(PreviewEdits) do
if PreviewEdits[a]<>nil then
if EditorOpts.UseSyntaxHighlight then
PreviewEdits[a].Highlighter:=PreviewSyn
else
PreviewEdits[a].Highlighter:=nil;
end;
procedure TEditorOptionsForm.ShowCurAttribute;
begin
if (CurHighlightElement=nil) or UpdatingColor then exit;
UpdatingColor:=true;
TextBoldCheckBox.Checked:=fsBold in CurHighlightElement.Style;
TextItalicCheckBox.Checked:=fsItalic in CurHighlightElement.Style;
TextUnderlineCheckBox.Checked:=fsUnderline in CurHighlightElement.Style;
if CurHighlightElement.Foreground=clNone then begin
ForeGroundUseDefaultCheckBox.Checked:=true;
end else begin
ForeGroundUseDefaultCheckBox.Checked:=false;
ForeGroundColorButton.ButtonColor:=CurHighlightElement.Foreground;
end;
ForeGroundColorButton.Visible:=not ForeGroundUseDefaultCheckBox.Checked;
if CurHighlightElement.Background=clNone then begin
BackGroundUseDefaultCheckBox.Checked:=true;
end else begin
BackGroundUseDefaultCheckBox.Checked:=false;
BackGroundColorButton.ButtonColor:=CurHighlightElement.Background;
end;
BackGroundColorButton.Visible:=
not BackGroundUseDefaultCheckBox.Checked;
UpdatingColor:=false;
end;
procedure TEditorOptionsForm.KeyMappingTreeViewMouseUp(Sender:TObject;
Button:TMouseButton; Shift:TShiftState; X,Y:integer);
var i:integer;
ARelation: TKeyCommandRelation;
ANode: TTreeNode;
begin
ANode:=KeyMappingTreeView.GetNodeAt(X,Y);
if (ANode<>nil) and (ANode.Data<>nil)
and (TObject(ANode.Data) is TKeyCommandRelation) then begin
ARelation:=TKeyCommandRelation(ANode.Data);
i:=EditingKeyMap.IndexOf(ARelation);
if (i>=0)
and (ShowKeyMappingEditForm(i,EditingKeyMap)=mrOk) then begin
ANode.Text:=KeyMappingRelationToString(ARelation);
for i:=Low(PreviewEdits) to High(PreviewEdits) do
if PreviewEdits[i]<>nil then
EditingKeyMap.AssignTo(PreviewEdits[i].KeyStrokes,[caSourceEditor]);
end;
end;
end;
type
TKeyMapErrorsForm = class(TForm)
ListBox: TListBox;
BackButton: TButton;
procedure BackButtonClick(Sender: TObject);
public
constructor Create(AnOwner: TComponent); override;
end;
constructor TKeyMapErrorsForm.Create(AnOwner: TComponent);
begin
inherited Create(AnOwner);
if LazarusResources.Find(ClassName)=nil then begin
SetBounds((Screen.Width-410) div 2,(Screen.Height-260) div 2, 400,250);
Caption:=dlgKeyMappingErrors;
ListBox:=TListBox.Create(Self);
with ListBox do begin
Name:='ListBox';
Parent:=Self;
Left:=0;
Top:=0;
Width:=Self.ClientWidth-4;
Height:=Self.ClientHeight-50;
end;
BackButton:=TButton.Create(Self);
with BackButton do begin
Name:='BackButton';
Parent:=Self;
Width:=60;
Height:=25;
Caption:=dlgEdBack;
Left:=((Self.ClientWidth-4)-Width) div 2;
Top:=Self.ClientHeight-38;
OnClick:=@BackButtonClick;
end;
end;
end;
procedure TKeyMapErrorsForm.BackButtonClick(Sender: TObject);
begin
ModalResult:=mrOk;
end;
procedure TEditorOptionsForm.KeyMappingConsistencyCheckButtonClick(
Sender: TObject);
var Protocol:TStringList;
ErrorCount, Index1, Index2:integer;
ACaption,AText:AnsiString;
KeyMapErrorsForm:TKeyMapErrorsForm;
begin
Protocol:=TStringList.Create;
try
ErrorCount:=KeyStrokesConsistencyErrors(DisplayPreview.KeyStrokes
,Protocol, Index1, Index2);
if ErrorCount>0 then begin
KeyMapErrorsForm:=TKeyMapErrorsForm.Create(Application);
try
KeyMapErrorsForm.ListBox.Items.Assign(Protocol);
KeyMapErrorsForm.ShowModal;
finally
KeyMapErrorsForm.Free;
end;
end else begin
ACaption:=dlgReport;
AText:=dlgEdNoErr;
MessageDlg(ACaption,AText,mtInformation,[mbOk],0);
end;
finally
Protocol.Free;
end;
end;
procedure TEditorOptionsForm.ColorElementListBoxMouseUp(Sender:TObject;
Button:TMouseButton; Shift:TShiftState; X,Y:integer);
begin
FindCurHighlightElement;
end;
procedure TEditorOptionsForm.FillColorElementListBox;
var i: integer;
begin
with ColorElementListBox.Items do
begin
BeginUpdate;
Clear;
for i:=0 to PreviewSyn.AttrCount-1 do
if PreviewSyn.Attribute[i].Name<>'' then
Add(PreviewSyn.Attribute[i].Name);
EndUpdate;
end;
CurHighlightElement:=nil;
if ColorElementListBox.Items.Count>0 then
begin
ColorElementListBox.Selected[0]:=true;
end;
FindCurHighlightElement;
end;
procedure TEditorOptionsForm.ColorPreviewMouseUp(Sender:TObject;
Button:TMouseButton; Shift:TShiftState; X,Y:integer);
var NewIndex: integer;
Token: ansistring;
Attri: TSynHighlightElement;
MouseXY, XY: TPoint;
AddAttr: TAdditionalHilightAttribute;
begin
MouseXY:=Point(X,Y);
XY:=ColorPreview.PixelsToRowColumn(MouseXY);
NewIndex:=-1;
if CurLanguageID>=0 then begin
AddAttr:=EditorOpts.HighlighterList[CurLanguageID].SampleLineToAddAttr(XY.Y);
if AddAttr<>ahaNone then
NewIndex:=ColorElementListBox.Items.IndexOf(
AdditionalHighlightAttributes[AddAttr]);
end;
if NewIndex<0 then begin
ColorPreview.GetHighlighterAttriAtRowCol(XY,Token,Attri);
if Attri=nil then
Attri:=PreviewSyn.WhitespaceAttribute;
if Attri<>nil then
NewIndex:=ColorElementListBox.Items.IndexOf(Attri.Name);
end;
if NewIndex>=0 then begin
ColorElementListBox.ItemIndex:=NewIndex;
FindCurHighlightElement;
end;
end;
procedure TEditorOptionsForm.OnSpecialLineColors(Sender: TObject;
Line: integer; var Special: boolean; var FG, BG: TColor);
var e:TSynHighlightElement;
AddAttr: TAdditionalHilightAttribute;
i: integer;
begin
if CurLanguageID>=0 then begin
AddAttr:=EditorOpts.HighlighterList[CurLanguageID].SampleLineToAddAttr(Line);
if AddAttr<>ahaNone then begin
i:=PreviewSyn.AttrCount-1;
while (i>=0) do begin
e:=PreviewSyn.Attribute[i];
if e.Name='' then continue;
if e.Name=AdditionalHighlightAttributes[AddAttr] then begin
Special:=(e.ForeGround<>clNone) or (e.BackGround<>clNone);
if e.ForeGround<>clNone then FG:=e.ForeGround;
if e.BackGround<>clNone then BG:=e.BackGround;
exit;
end;
dec(i);
end;
end;
end;
end;
procedure TEditorOptionsForm.SetAttributeToDefaultButtonClick(Sender: TObject);
begin
SetColorElementsToDefaults(true);
end;
procedure TEditorOptionsForm.SetAllAttributesToDefaultButtonClick(
Sender: TObject);
begin
SetColorElementsToDefaults(false);
end;
procedure TEditorOptionsForm.SetColorElementsToDefaults(OnlySelected: boolean);
var DefaultSyn: TCustomSyn;
PascalSyn: TPreviewPasSyn;
i, j: integer;
CurSynClass: TCustomSynClass;
begin
PascalSyn:=TPreviewPasSyn(GetHighlighter(TPreviewPasSyn,
ColorSchemeComboBox.Text,true));
CurSynClass:=TCustomSynClass(PreviewSyn.ClassType);
DefaultSyn:=CurSynClass.Create(nil);
try
EditorOpts.AddSpecialHilightAttribsToHighlighter(DefaultSyn);
EditorOpts.ReadDefaultsForHighlighterSettings(DefaultSyn,
ColorSchemeComboBox.Text,PascalSyn);
for i:=0 to DefaultSyn.AttrCount-1 do begin
if DefaultSyn.Attribute[i].Name='' then continue;
if OnlySelected then begin
if (DefaultSyn.Attribute[i].Name=CurHighlightElement.Name) then begin
CopyHiLightAttributeValues(DefaultSyn.Attribute[i],
CurHighlightElement);
end;
end else begin
for j:=0 to PreviewSyn.AttrCount-1 do
if PreviewSyn.Attribute[j].Name=DefaultSyn.Attribute[i].Name then
begin
CopyHiLightAttributeValues(DefaultSyn.Attribute[i],
PreviewSyn.Attribute[j]);
end;
end;
end;
finally
DefaultSyn.Free;
end;
ShowCurAttribute;
end;
function TEditorOptionsForm.GetCurColorScheme(
const LanguageName: string): string;
begin
if fColorSchemes=nil then
Result:=''
else
Result:=fColorSchemes.Values[LanguageName];
if Result='' then
Result:=EditorOpts.ReadColorScheme(LanguageName);
end;
procedure TEditorOptionsForm.SetCurColorScheme(
const LanguageName, ColorScheme: string);
begin
if fColorSchemes=nil then fColorSchemes:=TStringList.Create;
fColorSchemes.Values[LanguageName]:=ColorScheme;
end;
procedure TEditorOptionsForm.SaveAllColorSchemes;
var i: integer;
begin
if fColorSchemes=nil then exit;
for i:=0 to fColorSchemes.Count-1 do
EditorOpts.WriteColorScheme(fColorSchemes.Names[i],
fColorSchemes.Values[fColorSchemes.Names[i]]);
end;
function TEditorOptionsForm.GetCurFileExtension(
const LanguageName: string): string;
var i: integer;
begin
if fFileExtensions=nil then
Result:=''
else
Result:=fFileExtensions.Values[LanguageName];
if Result='' then begin
i:=EditorOpts.HighlighterList.FindByName(LanguageName);
if i>=0 then
Result:=EditorOpts.HighlighterList[i].FileExtensions;
end;
end;
procedure TEditorOptionsForm.SetCurFileExtension(
const LanguageName, FileExtensions: string);
begin
if fFileExtensions=nil then fFileExtensions:=TStringList.Create;
fFileExtensions.Values[LanguageName]:=FileExtensions;
end;
procedure TEditorOptionsForm.SaveAllFileExtensions;
var i, j: integer;
begin
if fFileExtensions=nil then exit;
for i:=0 to fFileExtensions.Count-1 do begin
j:=EditorOpts.HighlighterList.FindByName(fFileExtensions.Names[i]);
if j>=0 then
EditorOpts.HighlighterList[i].FileExtensions:=
fFileExtensions.Values[fFileExtensions.Names[i]];
end;
end;
function TEditorOptionsForm.GetHighlighter(SynClass: TCustomSynClass;
const ColorScheme: string; CreateIfNotExists: boolean): TCustomSyn;
var i: integer;
begin
if fHighlighterList=nil then fHighlighterList:=TStringList.Create;
for i:=0 to fHighlighterList.Count-1 do begin
if (fHighlighterList[i]=ColorScheme)
and (TCustomSynClass(TCustomSyn(fHighlighterList.Objects[i]).ClassType)
=SynClass)
then begin
Result:=TCustomSyn(fHighlighterList.Objects[i]);
exit;
end;
end;
if CreateIfNotExists then begin
Result:=SynClass.Create(nil);
EditorOpts.AddSpecialHilightAttribsToHighlighter(Result);
fHighlighterList.AddObject(ColorScheme,Result);
EditorOpts.ReadHighlighterSettings(Result,ColorScheme);
end;
end;
procedure TEditorOptionsForm.ClearHighlighters;
var i: integer;
begin
if fHighlighterList=nil then exit;
for i:=0 to fHighlighterList.Count-1 do
TCustomSyn(fHighlighterList.Objects[i]).Free;
fHighlighterList.Free;
end;
procedure TEditorOptionsForm.SaveAllHighlighters;
var i: integer;
Syn: TCustomSyn;
begin
if fHighlighterList=nil then exit;
for i:=0 to fHighlighterList.Count-1 do begin
Syn:=TCustomSyn(fHighlighterList.Objects[i]);
EditorOpts.WriteHighlighterSettings(Syn,fHighlighterList[i]);
end;
end;
// keymapping ------------------------------------------------------------------
function TEditorOptionsForm.KeyMappingRelationToString(
Index:integer):String;
begin
Result:=KeyMappingRelationToString(EditingKeyMap.Relations[Index]);
end;
function TEditorOptionsForm.KeyMappingRelationToString(
KeyRelation: TKeyCommandRelation): String;
var s:AnsiString;
begin
with KeyRelation do begin
Result:=copy(EditorCommandLocalizedName(Command,Name),1,37);
if length(Result)<37 then begin
SetLength(s,(37-length(Result)));
FillChar(s[1],length(s),' ');
end else
s:='';
Result:=Result+s;
if (KeyA.Key1=VK_UNKNOWN) and (KeyB.Key1=VK_UNKNOWN) then
Result:=Result+'none'
else if (KeyB.Key1=VK_UNKNOWN) then
Result:=Result+KeyAndShiftStateToEditorKeyString(KeyA.Key1,KeyA.Shift1)
else
Result:=Result+KeyAndShiftStateToEditorKeyString(KeyA.Key1,KeyA.Shift1)
+' or '+
KeyAndShiftStateToEditorKeyString(KeyB.Key1,KeyB.Shift1);
end;
end;
procedure TEditorOptionsForm.FillKeyMappingTreeView;
var i, j: integer;
NewCategoryNode, NewKeyNode: TTreeNode;
CurCategory: TKeyCommandCategory;
CurKeyRelation: TKeyCommandRelation;
begin
with KeyMappingTreeView do begin
BeginUpdate;
Items.Clear;
for i:=0 to EditingKeyMap.CategoryCount-1 do begin
CurCategory:=EditingKeyMap.Categories[i];
NewCategoryNode:=Items.AddObject(nil,CurCategory.Description,CurCategory);
NewCategoryNode.ImageIndex:=0;
NewCategoryNode.SelectedIndex:=NewCategoryNode.ImageIndex;
for j:=0 to CurCategory.Count-1 do begin
CurKeyRelation:=TKeyCommandRelation(CurCategory[j]);
NewKeyNode:=Items.AddChildObject(NewCategoryNode,
KeyMappingRelationToString(CurKeyRelation),CurKeyRelation);
NewKeyNode.ImageIndex:=1;
NewKeyNode.SelectedIndex:=NewKeyNode.ImageIndex;
end;
end;
EndUpdate;
end;
end;
procedure TEditorOptionsForm.ShowCurCodeTemplate;
var i,sp,ep:integer;
s:ansistring;
begin
CodeTemplateCodePreview.Lines.BeginUpdate;
CodeTemplateCodePreview.Lines.Clear;
i:=0;
while i<CodeTemplateListBox.Items.Count do begin
if CodeTemplateListBox.Selected[i] then begin
CurCodeTemplate:=i;
s:=SynAutoComplete.CompletionValues[i];
sp:=1;
ep:=1;
while ep<=length(s) do begin
if s[ep] in [#10,#13] then begin
CodeTemplateCodePreview.Lines.Add(copy(s,sp,ep-sp));
inc(ep);
if (ep<=length(s)) and (s[ep] in [#10,#13]) and (s[ep-1]<>s[ep]) then
inc(ep);
sp:=ep;
end else inc(ep);
end;
if (ep>sp) or ((s<>'') and (s[length(s)] in [#10,#13])) then
CodeTemplateCodePreview.Lines.Add(copy(s,sp,ep-sp));
break;
end;
inc(i);
end;
CodeTemplateCodePreview.Lines.EndUpdate;
CodeTemplateCodePreview.Invalidate;
end;
procedure TEditorOptionsForm.SaveCurCodeTemplate;
var
NewValue: string;
l: integer;
begin
if CurCodeTemplate<0 then exit;
NewValue:=CodeTemplateCodePreview.Lines.Text;
// remove last end EOL
if NewValue<>'' then begin
l:=length(NewValue);
if NewValue[l] in [#10,#13] then begin
dec(l);
if (l>0) and (NewValue[l] in [#10,#13])
and (NewValue[l]<>NewValue[l+1]) then
dec(l);
SetLength(NewValue,l);
end;
end;
SynAutoComplete.CompletionValues[CurCodeTemplate]:=NewValue;
end;
procedure TEditorOptionsForm.FillCodeTemplateListBox;
var a:integer;
begin
with CodeTemplateListBox do begin
Items.BeginUpdate;
Items.Clear;
for a:=0 to SynAutoComplete.Completions.Count-1 do begin
Items.Add(SynAutoComplete.Completions[a]
+' - "'+SynAutoComplete.CompletionComments[a]+'"');
end;
Items.EndUpdate;
end;
end;
procedure TEditorOptionsForm.CodeTemplateListBoxMouseUp(Sender:TObject;
Button:TMouseButton; Shift:TShiftState; X,Y:integer);
begin
SaveCurCodeTemplate;
ShowCurCodeTemplate;
end;
procedure TEditorOptionsForm.CodeTemplateButtonClick(Sender:TObject);
var Token,Comment:ansistring;
Index:integer;
begin
SaveCurCodeTemplate;
if Sender=CodeTemplateAddButton then begin
Token:='new';
Comment:='(custom)';
CurCodeTemplate:=-1;
if AddCodeTemplate(SynAutoComplete,Token,Comment)=mrOk then begin
SynAutoComplete.AddCompletion(Token, '', Comment);
FillCodeTemplateListBox;
Index:=SynAutoComplete.Completions.IndexOf(Token);
if (Index>=0) and (Index<CodeTemplateListBox.Items.Count) then begin
CodeTemplateListBox.Selected[Index]:=true;
CodeTemplateListBox.ItemIndex:=Index;
end;
ShowCurCodeTemplate;
end;
end else if Sender=CodeTemplateEditButton then begin
Index:=CurCodeTemplate;
if Index<CodeTemplateListBox.Items.Count then begin
if EditCodeTemplate(SynAutoComplete,Index)=mrOk then begin
CodeTemplateListBox.Items[Index]:=
SynAutoComplete.Completions[Index]
+' - "'+SynAutoComplete.CompletionComments[Index]+'"';
ShowCurCodeTemplate;
end;
end;
end else if Sender=CodeTemplateDeleteButton then begin
if CurCodeTemplate>=0 then begin
if MessageDlg(dlgDelTemplate
+'"'+SynAutoComplete.Completions[CurCodeTemplate]+' - '
+SynAutoComplete.CompletionComments[CurCodeTemplate]+'"'
+'?',mtConfirmation,[mbOk,mbCancel],0)=mrOK then begin
SynAutoComplete.DeleteCompletion(CurCodeTemplate);
dec(CurCodeTemplate);
FillCodeTemplateListBox;
if (CurCodeTemplate>=0)
and (CurCodeTemplate<CodeTemplateListBox.Items.Count) then begin
CodeTemplateListBox.Selected[CurCodeTemplate]:=true;
CodeTemplateListBox.ItemIndex:=CurCodeTemplate;
end;
ShowCurCodeTemplate;
end;
end;
end;
end;
procedure TEditorOptionsForm.CodeTemplateFileNameButtonClick(Sender:TObject);
var OpenDialog:TOpenDialog;
begin
OpenDialog:=TOpenDialog.Create(Application);
try
InputHistories.ApplyFileDialogSettings(OpenDialog);
with OpenDialog do begin
Title:=dlgChsCodeTempl;
Filter:='DCI file (*.dci)|*.dci|'+dlgAllFiles+'|*.*';
if Execute then
CodeTemplateFileNameComboBox.Text:=FileName;
end;
InputHistories.StoreFileDialogSettings(OpenDialog);
finally
OpenDialog.Free;
end;
end;
// useful functions
procedure TEditorOptionsForm.SetComboBoxText(AComboBox:TComboBox;
const AText:AnsiString);
var a:integer;
begin
a:=AComboBox.Items.IndexOf(AText);
if a>=0 then
AComboBox.ItemIndex:=a
else begin
AComboBox.Items.Add(AText);
AComboBox.ItemIndex:=AComboBox.Items.IndexOf(AText);
end;
end;
procedure TEditorOptionsForm.SetupGeneralPage;
var MaxX,ChkBoxW:integer;
begin
MaxX:=Width-5;
ChkBoxW:=(MaxX-20) div 2;
EditorOptionsGroupBox:=TGroupBox.Create(Self);
with EditorOptionsGroupBox do
begin
Name:='EditorOptionsGroupBox';
Parent:=MainNoteBook.Page[0];
Top:=5;
Left:=5;
Width:=MaxX-10;
Height:=24*12; // 24 pixels per line
Caption:=lismenueditoroptions;
end;
// many, many checkboxes ...
// left side
AltSetsColumnModeCheckBox:=TCheckBox.Create(Self);
with AltSetsColumnModeCheckBox do begin
Name:='AltSetsColumnModeCheckBox';
Parent:=EditorOptionsGroupBox;
Top:=5;
Left:=5;
Width:=ChkBoxW;
Height:=16;
Caption:=dlgAltSetClMode;
Checked:=eoAltSetsColumnMode in EditorOpts.SynEditOptions;
OnClick:=@GeneralCheckBoxOnClick;
end;
AutoIndentCheckBox:=TCheckBox.Create(Self);
with AutoIndentCheckBox do begin
Name:='AutoIndentCheckBox';
Parent:=EditorOptionsGroupBox;
Top:=AltSetsColumnModeCheckBox.Top+AltSetsColumnModeCheckBox.Height+5;
Left:=AltSetsColumnModeCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
Caption:=dlgAutoIdent;
Checked:=eoAutoIndent in EditorOpts.SynEditOptions;
OnClick:=@GeneralCheckBoxOnClick;
end;
BracketHighlightCheckBox:=TCheckBox.Create(Self);
with BracketHighlightCheckBox do begin
Name:='BracketHighlightCheckBox';
Parent:=EditorOptionsGroupBox;
Top:=AutoIndentCheckBox.Top+AutoIndentCheckBox.Height+5;
Left:=AutoIndentCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
Caption:=dlgBracHighlight;
Checked:=eoBracketHighlight in EditorOpts.SynEditOptions;
OnClick:=@GeneralCheckBoxOnClick;
end;
DragDropEditingCheckBox:=TCheckBox.Create(Self);
with DragDropEditingCheckBox do begin
Name:='DragDropEditingCheckBox';
Parent:=EditorOptionsGroupBox;
Top:=BracketHighlightCheckBox.Top+BracketHighlightCheckBox.Height+5;
Left:=BracketHighlightCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
Caption:=dlgDragDropEd;
Checked:=eoDragDropEditing in EditorOpts.SynEditOptions;
OnClick:=@GeneralCheckBoxOnClick;
end;
DropFilesCheckBox:=TCheckBox.Create(Self);
with DropFilesCheckBox do begin
Name:='DropFilesCheckBox';
Parent:=EditorOptionsGroupBox;
Top:=DragDropEditingCheckBox.Top+DragDropEditingCheckBox.Height+5;
Left:=AltSetsColumnModeCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
Caption:=dlgDropFiles;
Checked:=eoDropFiles in EditorOpts.SynEditOptions;
OnClick:=@GeneralCheckBoxOnClick;
Enabled:=false;
end;
HalfPageScrollCheckBox:=TCheckBox.Create(Self);
with HalfPageScrollCheckBox do begin
Name:='HalfPageScrollCheckBox';
Parent:=EditorOptionsGroupBox;
Top:=DropFilesCheckBox.Top+DropFilesCheckBox.Height+5;
Left:=AltSetsColumnModeCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
Caption:=dlgHalfPageScroll;
Checked:=eoHalfPageScroll in EditorOpts.SynEditOptions;
OnClick:=@GeneralCheckBoxOnClick;
end;
KeepCaretXCheckBox:=TCheckBox.Create(Self);
with KeepCaretXCheckBox do begin
Name:='KeepCaretXCheckBox';
Parent:=EditorOptionsGroupBox;
Top:=HalfPageScrollCheckBox.Top+HalfPageScrollCheckBox.Height+5;
Left:=AltSetsColumnModeCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
Caption:=dlgKeepCaretX;
Checked:=eoKeepCaretX in EditorOpts.SynEditOptions;
OnClick:=@GeneralCheckBoxOnClick;
end;
PersistentCaretCheckBox:=TCheckBox.Create(Self);
with PersistentCaretCheckBox do begin
Name:='PersistentCaretCheckBox';
Parent:=EditorOptionsGroupBox;
Top:=KeepCaretXCheckBox.Top+KeepCaretXCheckBox.Height+5;
Left:=AltSetsColumnModeCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
Caption:=dlgPersistentCaret;
Checked:=eoPersistentCaret in EditorOpts.SynEditOptions;
OnClick:=@GeneralCheckBoxOnClick;
end;
ScrollByOneLessCheckBox:=TCheckBox.Create(Self);
with ScrollByOneLessCheckBox do begin
Name:='ScrollByOneLessCheckBox';
Parent:=EditorOptionsGroupBox;
Top:=PersistentCaretCheckBox.Top+PersistentCaretCheckBox.Height+5;
Left:=AltSetsColumnModeCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
Caption:=dlgScrollByOneLess;
Checked:=eoScrollByOneLess in EditorOpts.SynEditOptions;
OnClick:=@GeneralCheckBoxOnClick;
end;
ScrollPastEoFCheckBox:=TCheckBox.Create(Self);
with ScrollPastEoFCheckBox do begin
Name:='ScrollPastEoFCheckBox';
Parent:=EditorOptionsGroupBox;
Top:=ScrollByOneLessCheckBox.Top+ScrollByOneLessCheckBox.Height+5;
Left:=ScrollByOneLessCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
Caption:=dlgScrollPastEndFile;
Checked:=eoScrollPastEoF in EditorOpts.SynEditOptions;
OnClick:=@GeneralCheckBoxOnClick;
end;
MouseLinksCheckBox:=TCheckBox.Create(Self);
with MouseLinksCheckBox do begin
Name:='MouseLinksCheckBox';
Parent:=EditorOptionsGroupBox;
Top:=ScrollPastEoFCheckBox.Top+ScrollPastEoFCheckBox.Height+5;
Left:=ScrollPastEoFCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
Caption:=dlgMouseLinks;
Checked:=EditorOpts.CtrlMouseLinks;
end;
ShowGutterHintsCheckBox:=TCheckBox.Create(Self);
with ShowGutterHintsCheckBox do begin
Name:='ShowGutterHintsCheckBox';
Parent:=EditorOptionsGroupBox;
Top:=MouseLinksCheckBox.Top+MouseLinksCheckBox.Height+5;
Left:=MouseLinksCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
Caption:=dlgShowGutterHints;
Checked:=EditorOpts.ShowGutterHints;
end;
// right side
ScrollPastEoLCheckBox:=TCheckBox.Create(Self);
with ScrollPastEoLCheckBox do begin
Name:='ScrollPastEoLCheckBox';
Parent:=EditorOptionsGroupBox;
Left:=AltSetsColumnModeCheckBox.Left+(MaxX div 2)+5;
Left:=ScrollPastEoFCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
Caption:=dlgScrollPastEndLine;
Checked:=eoScrollPastEoL in EditorOpts.SynEditOptions;
OnClick:=@GeneralCheckBoxOnClick;
end;
ShowCloseBtnInNoteBookCheckBox:=TCheckBox.Create(Self);
with ShowCloseBtnInNoteBookCheckBox do begin
Name:='ShowCloseBtnInNoteBookCheckBox';
Parent:=EditorOptionsGroupBox;
Top:=ScrollPastEoLCheckBox.Top+ScrollPastEoLCheckBox.Height+5;
Left:=ScrollPastEoLCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
Caption:=dlgCloseButtonsNotebook;
Checked:=EditorOpts.ShowTabCloseButtons;
OnClick:=@GeneralCheckBoxOnClick;
end;
ShowScrollHintCheckBox:=TCheckBox.Create(Self);
with ShowScrollHintCheckBox do begin
Name:='ShowScrollHintCheckBox';
Parent:=EditorOptionsGroupBox;
Top:=ShowCloseBtnInNoteBookCheckBox.Top
+ShowCloseBtnInNoteBookCheckBox.Height+5;
Left:=ShowCloseBtnInNoteBookCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
Caption:=dlgShowScrollHint;
Checked:=eoShowScrollHint in EditorOpts.SynEditOptions;
OnClick:=@GeneralCheckBoxOnClick;
end;
SmartTabsCheckBox:=TCheckBox.Create(Self);
with SmartTabsCheckBox do begin
Name:='SmartTabsCheckBox';
Parent:=EditorOptionsGroupBox;
Top:=ShowScrollHintCheckBox.Top+ShowScrollHintCheckBox.Height+5;
Left:=ShowScrollHintCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
Caption:=dlgSmartTabs;
Checked:=eoSmartTabs in EditorOpts.SynEditOptions;
OnClick:=@GeneralCheckBoxOnClick;
end;
TabsToSpacesCheckBox:=TCheckBox.Create(Self);
with TabsToSpacesCheckBox do begin
Name:='TabsToSpacesCheckBox';
Parent:=EditorOptionsGroupBox;
Top:=SmartTabsCheckBox.Top+SmartTabsCheckBox.Height+5;
Left:=ShowScrollHintCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
Caption:=dlgTabsToSpaces;
Checked:=eoTabsToSpaces in EditorOpts.SynEditOptions;
OnClick:=@GeneralCheckBoxOnClick;
end;
TrimTrailingSpacesCheckBox:=TCheckBox.Create(Self);
with TrimTrailingSpacesCheckBox do begin
Name:='TrimTrailingSpacesCheckBox';
Parent:=EditorOptionsGroupBox;
Top:=TabsToSpacesCheckBox.Top+TabsToSpacesCheckBox.Height+5;
Left:=ShowScrollHintCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
Caption:=dlgTrimTrailingSpaces;
Checked:=eoTrimTrailingSpaces in EditorOpts.SynEditOptions;
OnClick:=@GeneralCheckBoxOnClick;
end;
UndoAfterSaveCheckBox:=TCheckBox.Create(Self);
with UndoAfterSaveCheckBox do begin
Name:='UndoAfterSaveCheckBox';
Parent:=EditorOptionsGroupBox;
Top:=TrimTrailingSpacesCheckBox.Top+TrimTrailingSpacesCheckBox.Height+5;
Left:=ShowScrollHintCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
Caption:=dlgUndoAfterSave;
Checked:=EditorOpts.UndoAfterSave;
OnClick:=@GeneralCheckBoxOnClick;
end;
DoubleClickLineCheckBox:=TCheckBox.Create(Self);
with DoubleClickLineCheckBox do begin
Name:='DoubleClickLineCheckBox';
Parent:=EditorOptionsGroupBox;
Top:=UndoAfterSaveCheckBox.Top+UndoAfterSaveCheckBox.Height+5;
Left:=ShowScrollHintCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
Caption:=dlgDoubleClickLine;
Checked:=eoDoubleClickSelectsLine in EditorOpts.SynEditOptions;
OnClick:=@GeneralCheckBoxOnClick;
end;
FindTextAtCursorCheckBox:=TCheckBox.Create(Self);
with FindTextAtCursorCheckBox do begin
Name:='FindTextAtCursorCheckBox';
Parent:=EditorOptionsGroupBox;
Top:=DoubleClickLineCheckBox.Top+DoubleClickLineCheckBox.Height+5;
Left:=ShowScrollHintCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
Caption:=dlgFindTextatCursor;
Checked:=EditorOpts.FindTextAtCursor;
OnClick:=@GeneralCheckBoxOnClick;
end;
UseSyntaxHighlightCheckBox:=TCheckBox.Create(Self);
with UseSyntaxHighlightCheckBox do begin
Name:='UseSyntaxHighlightCheckBox';
Parent:=EditorOptionsGroupBox;
Top:=FindTextAtCursorCheckBox.Top+FindTextAtCursorCheckBox.Height+5;
Left:=ShowScrollHintCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
Caption:=dlgUseSyntaxHighlight;
Checked:=EditorOpts.UseSyntaxHighlight;
OnClick:=@GeneralCheckBoxOnClick;
end;
CopyWordAtCursorOnCopyNoneCheckBox:=TCheckBox.Create(Self);
with CopyWordAtCursorOnCopyNoneCheckBox do begin
Name:='CopyWordAtCursorOnCopyNoneCheckBox';
Parent:=EditorOptionsGroupBox;
Top:=UseSyntaxHighlightCheckBox.Top+UseSyntaxHighlightCheckBox.Height+5;
Left:=ShowScrollHintCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
Caption:=dlgCopyWordAtCursorOnCopyNone;
Checked:=EditorOpts.CopyWordAtCursorOnCopyNone;
OnClick:=@GeneralCheckBoxOnClick;
end;
//
BlockIndentComboBox:=TComboBox.Create(Self);
with BlockIndentComboBox do begin
Name:='BlockIndentComboBox';
Parent:=MainNoteBook.Page[0];
Top:=EditorOptionsGroupBox.Top+EditorOptionsGroupBox.Height+8;
Left:=120;
Width:=70;
Items.BeginUpdate;
Items.Add('1');
Items.Add('2');
Items.Add('4');
Items.Add('8');
Items.EndUpdate;
SetComboBoxText(BlockIndentComboBox,IntToStr(EditorOpts.BlockIndent));
OnChange:=@ComboBoxOnChange;
OnKeyDown:=@ComboBoxOnKeyDown;
OnExit:=@ComboBoxOnExit;
end;
BlockIndentLabel:=TLabel.Create(Self);
with BlockIndentLabel do begin
Name:='BlockIndentLabel';
Parent:=MainNoteBook.Page[0];
Top:=BlockIndentComboBox.Top+2;
Left:=EditorOptionsGroupBox.Left+2;
Width:=BlockIndentComboBox.Left-2-Left;
Caption:=dlgBlockIndent;
end;
UndoLimitComboBox:=TComboBox.Create(Self);
with UndoLimitComboBox do begin
Name:='UndoLimitComboBox';
Parent:=MainNoteBook.Page[0];
Top:=BlockIndentComboBox.Top+BlockIndentComboBox.Height+5;
Left:=BlockIndentComboBox.Left;
Width:=70;
Items.BeginUpdate;
Items.Add('32767');
Items.Add('4096');
Items.Add('512');
Items.EndUpdate;
SetComboBoxText(UndoLimitComboBox,IntToStr(EditorOpts.UndoLimit));
OnChange:=@ComboBoxOnChange;
OnKeyDown:=@ComboBoxOnKeyDown;
OnExit:=@ComboBoxOnExit;
end;
UndoLimitLabel:=TLabel.Create(Self);
with UndoLimitLabel do begin
Name:='UndoLimitLabel';
Parent:=MainNoteBook.Page[0];
Top:=UndoLimitComboBox.Top+2;
Left:=EditorOptionsGroupBox.Left+2;
Width:=UndoLimitComboBox.Left-Left-2;
Caption:=dlgUndoLimit;
end;
TabWidthsComboBox:=TComboBox.Create(Self);
with TabWidthsComboBox do begin
Name:='TabWidthsComboBox';
Parent:=MainNoteBook.Page[0];
Top:=UndoLimitComboBox.Top+UndoLimitComboBox.Height+5;
Left:=BlockIndentComboBox.Left;
Width:=70;
Items.BeginUpdate;
Items.Add('1');
Items.Add('2');
Items.Add('4');
Items.Add('8');
Items.EndUpdate;
SetComboBoxText(TabWidthsComboBox,IntToStr(EditorOpts.TabWidth));
OnChange:=@ComboBoxOnChange;
OnKeyDown:=@ComboBoxOnKeyDown;
OnExit:=@ComboBoxOnExit;
end;
TabWidthsLabel:=TLabel.Create(Self);
with TabWidthsLabel do begin
Name:='TabWidthsLabel';
Parent:=MainNoteBook.Page[0];
Top:=TabWidthsComboBox.Top+2;
Left:=EditorOptionsGroupBox.Left+2;
Width:=TabWidthsComboBox.Left-Left-2;
Caption:='Tab widths:';
end;
end;
procedure TEditorOptionsForm.ResizeGeneralPage;
var MaxX,ChkBoxW:integer;
begin
MaxX:=Width-5;
ChkBoxW:=(MaxX-20) div 2;
with EditorOptionsGroupBox do begin
Top:=5;
Left:=5;
Width:=MaxX-10;
Height:=21*12+31; // 21 pixels per option
end;
// many, many checkboxes ...
with AltSetsColumnModeCheckBox do begin
Top:=5;
Left:=5;
Width:=ChkBoxW;
Height:=16;
end;
with AutoIndentCheckBox do begin
Top:=AltSetsColumnModeCheckBox.Top+AltSetsColumnModeCheckBox.Height+5;
Left:=AltSetsColumnModeCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
end;
with BracketHighlightCheckBox do begin
Top:=AutoIndentCheckBox.Top+AutoIndentCheckBox.Height+5;
Left:=AutoIndentCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
end;
with DragDropEditingCheckBox do begin
Top:=BracketHighlightCheckBox.Top+BracketHighlightCheckBox.Height+5;
Left:=BracketHighlightCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
end;
with DropFilesCheckBox do begin
Top:=DragDropEditingCheckBox.Top+DragDropEditingCheckBox.Height+5;
Left:=AltSetsColumnModeCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
end;
with HalfPageScrollCheckBox do begin
Top:=DropFilesCheckBox.Top+DropFilesCheckBox.Height+5;
Left:=AltSetsColumnModeCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
end;
with KeepCaretXCheckBox do begin
Top:=HalfPageScrollCheckBox.Top+HalfPageScrollCheckBox.Height+5;
Left:=AltSetsColumnModeCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
end;
with PersistentCaretCheckBox do begin
Left:=AltSetsColumnModeCheckBox.Left;
Top:=KeepCaretXCheckBox.Top+KeepCaretXCheckBox.Height+5;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
end;
with ScrollByOneLessCheckBox do begin
Top:=PersistentCaretCheckBox.Top+PersistentCaretCheckBox.Height+5;
Left:=AltSetsColumnModeCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
end;
with ScrollPastEoFCheckBox do begin
Top:=ScrollByOneLessCheckBox.Top+ScrollByOneLessCheckBox.Height+5;
Left:=AltSetsColumnModeCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
end;
with MouseLinksCheckBox do begin
Top:=ScrollPastEoFCheckBox.Top+ScrollPastEoFCheckBox.Height+5;
Left:=AltSetsColumnModeCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
end;
with ShowGutterHintsCheckBox do begin
Top:=MouseLinksCheckBox.Top+MouseLinksCheckBox.Height+5;
Left:=AltSetsColumnModeCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
end;
// right side
with ScrollPastEoLCheckBox do begin
Top:=5;
Left:=AltSetsColumnModeCheckBox.Left+(MaxX div 2)+5;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
end;
with ShowCloseBtnInNoteBookCheckBox do begin
Top:=ScrollPastEoLCheckBox.Top+ScrollPastEoLCheckBox.Height+5;
Left:=ScrollPastEoLCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
end;
with ShowScrollHintCheckBox do begin
Top:=ShowCloseBtnInNoteBookCheckBox.Top
+ShowCloseBtnInNoteBookCheckBox.Height+5;
Left:=ShowCloseBtnInNoteBookCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
end;
with SmartTabsCheckBox do begin
Top:=ShowScrollHintCheckBox.Top+ShowScrollHintCheckBox.Height+5;
Left:=ShowScrollHintCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
end;
with TabsToSpacesCheckBox do begin
Top:=SmartTabsCheckBox.Top+SmartTabsCheckBox.Height+5;
Left:=ShowScrollHintCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
end;
with TrimTrailingSpacesCheckBox do begin
Top:=TabsToSpacesCheckBox.Top+TabsToSpacesCheckBox.Height+5;
Left:=ShowScrollHintCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
end;
with UndoAfterSaveCheckBox do begin
Top:=TrimTrailingSpacesCheckBox.Top+TrimTrailingSpacesCheckBox.Height+5;
Left:=ShowScrollHintCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
end;
with DoubleClickLineCheckBox do begin
Top:=UndoAfterSaveCheckBox.Top+UndoAfterSaveCheckBox.Height+5;
Left:=ShowScrollHintCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
end;
with FindTextAtCursorCheckBox do begin
Top:=DoubleClickLineCheckBox.Top+DoubleClickLineCheckBox.Height+5;
Left:=ShowScrollHintCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
end;
with UseSyntaxHighlightCheckBox do begin
Top:=FindTextAtCursorCheckBox.Top+FindTextAtCursorCheckBox.Height+5;
Left:=ShowScrollHintCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
end;
with CopyWordAtCursorOnCopyNoneCheckBox do begin
Top:=UseSyntaxHighlightCheckBox.Top+UseSyntaxHighlightCheckBox.Height+5;
Left:=ShowScrollHintCheckBox.Left;
Width:=ChkBoxW;
Height:=AltSetsColumnModeCheckBox.Height;
end;
//
with BlockIndentComboBox do begin
Top:=EditorOptionsGroupBox.Top+EditorOptionsGroupBox.Height+8;
Left:=120;
Width:=70;
end;
with BlockIndentLabel do begin
Top:=BlockIndentComboBox.Top+2;
Left:=EditorOptionsGroupBox.Left+2;
Width:=BlockIndentComboBox.Left-2-Left;
end;
with TabWidthsComboBox do begin
Top:=BlockIndentComboBox.Top+BlockIndentComboBox.Height+5;
Left:=BlockIndentComboBox.Left;
Width:=70;
end;
with TabWidthsLabel do begin
Top:=TabWidthsComboBox.Top+2;
Left:=EditorOptionsGroupBox.Left+2;
Width:=TabWidthsComboBox.Left-Left-2;
end;
with UndoLimitComboBox do begin
Top:=BlockIndentComboBox.Top;
Left:=BlockIndentComboBox.Left+BlockIndentComboBox.Width+50+70;
Width:=70;
end;
with UndoLimitLabel do begin
Top:=UndoLimitComboBox.Top+2;
Left:=UndoLimitComboBox.Left-70+2;
Width:=UndoLimitComboBox.Left-Left-2;
end;
end;
procedure TEditorOptionsForm.SetupDisplayPage;
var MaxX,MaxY,ChkBoxW:integer;
begin
MaxX:=Width-5;
MaxY:=375;
ChkBoxW:=140;
MarginAndGutterGroupBox:=TGroupBox.Create(Self);
with MarginAndGutterGroupBox do begin
Name:='MarginAndGutterGroupBox';
Parent:=MainNoteBook.Page[1];
Top:=5;
Left:=5;
Width:=MaxX-10;
Height:=109;
Caption:=dlgMarginGutter;
end;
VisibleRightMarginCheckBox:=TCheckBox.Create(Self);
with VisibleRightMarginCheckBox do begin
Name:='VisibleRightMarginCheckBox';
Parent:=MarginAndGutterGroupBox;
Top:=5;
Left:=5;
Width:=ChkBoxW;
Caption:=dlgVisibleRightMargin;
Height:=23;
Checked:=EditorOpts.VisibleRightMargin;
OnClick:=@GeneralCheckBoxOnClick;
Enabled:=false;
end;
VisibleGutterCheckBox:=TCheckBox.Create(Self);
with VisibleGutterCheckBox do begin
Name:='VisibleGutterCheckBox';
Parent:=MarginAndGutterGroupBox;
Top:=VisibleRightMarginCheckBox.Top+VisibleRightMarginCheckBox.Height+7;
Left:=VisibleRightMarginCheckBox.Left;
Width:=ChkBoxW;
Height:=VisibleRightMarginCheckBox.Height;
Caption:=dlgVisibleGutter;
Checked:=EditorOpts.VisibleGutter;
OnClick:=@GeneralCheckBoxOnClick;
end;
ShowLineNumbersCheckBox:=TCheckBox.Create(Self);
with ShowLineNumbersCheckBox do begin
Name:='ShowLineNumbersCheckBox';
Parent:=MarginAndGutterGroupBox;
Top:=VisibleGutterCheckBox.Top+VisibleGutterCheckBox.Height+7;
Left:=VisibleGutterCheckBox.Left;
Width:=ChkBoxW;
Height:=VisibleRightMarginCheckBox.Height;
Caption:=dlgShowLineNumbers;
Checked:=EditorOpts.ShowLineNumbers;
OnClick:=@GeneralCheckBoxOnClick;
end;
RightMarginComboBox:=TComboBox.Create(Self);
with RightMarginComboBox do begin
Name:='RightMarginComboBox';
Parent:=MarginAndGutterGroupBox;
Top:=20;
Left:=180;
Width:=70;
Items.BeginUpdate;
Items.Add('80');
Items.Add('78');
Items.Add('76');
Items.EndUpdate;
SetComboBoxText(RightMarginComboBox,IntToStr(EditorOpts.RightMargin));
OnChange:=@ComboBoxOnChange;
OnKeyDown:=@ComboBoxOnKeyDown;
OnExit:=@ComboBoxOnExit;
end;
RightMarginLabel:=TLabel.Create(Self);
with RightMarginLabel do begin
Name:='RightMarginLabel';
Parent:=MarginAndGutterGroupBox;
Top:=2;
Left:=RightMarginComboBox.Left+2;
Width:=150;
Caption:=dlgRightMargin;
end;
RightMarginColorButton:=TColorButton.Create(Self);
with RightMarginColorButton do begin
Name:='RightMarginColorButton';
Parent:=MarginAndGutterGroupBox;
Top:=RightMarginComboBox.Top+RightMarginComboBox.Height+20;
Left:=RightMarginComboBox.Left;
Width:=35;
Height:=20;
BorderWidth:=2;
ButtonColor:=EditorOpts.RightMarginColor;
OnColorChanged:=@ColorButtonColorChanged;
end;
RightMarginColorLabel:=TLabel.Create(Self);
with RightMarginColorLabel do begin
Name:='RightMarginColorLabel';
Parent:=MarginAndGutterGroupBox;
Top:=RightMarginComboBox.Top+RightMarginComboBox.Height;
Left:=RightMarginComboBox.Left+2;
Width:=150;
Caption:=dlgRightMarginColor;
end;
GutterWidthComboBox:=TComboBox.Create(Self);
with GutterWidthComboBox do begin
Name:='GutterWidthComboBox';
Parent:=MarginAndGutterGroupBox;
Top:=RightMarginComboBox.Top;
Left:=RightMarginComboBox.Left+RightMarginComboBox.Width+80;
Width:=RightMarginComboBox.Width;
Height:=RightMarginComboBox.Height;
Items.BeginUpdate;
Items.Add('40');
Items.Add('35');
Items.Add('30');
Items.Add('25');
Items.Add('20');
Items.EndUpdate;
SetComboBoxText(GutterWidthComboBox,IntToStr(EditorOpts.GutterWidth));
OnChange:=@ComboBoxOnChange;
OnKeyDown:=@ComboBoxOnKeyDown;
OnExit:=@ComboBoxOnExit;
end;
GutterWidthLabel:=TLabel.Create(Self);
with GutterWidthLabel do begin
Name:='GutterWidthLabel';
Parent:=MarginAndGutterGroupBox;
Top:=2;
Left:=GutterWidthComboBox.Left+2;
Width:=130;
Caption:=dlgGutterWidth;
end;
GutterColorButton:=TColorButton.Create(Self);
with GutterColorButton do begin
Name:='GutterColorButton';
Parent:=MarginAndGutterGroupBox;
Top:=GutterWidthComboBox.Top+GutterWidthComboBox.Height+20;
Left:=GutterWidthComboBox.Left;
Width:=35;
Height:=20;
BorderWidth:=2;
ButtonColor:=EditorOpts.GutterColor;
OnColorChanged:=@ColorButtonColorChanged;
end;
GutterColorLabel:=TLabel.Create(Self);
with GutterColorLabel do begin
Name:='GutterColorLabel';
Parent:=MarginAndGutterGroupBox;
Top:=GutterWidthComboBox.Top+GutterWidthComboBox.Height;
Left:=GutterWidthComboBox.Left+2;
Width:=130;
Caption:=dlgGutterColor;
end;
EditorFontGroupBox:=TGroupBox.Create(Self);
with EditorFontGroupBox do begin
Name:='EditorFontGroupBox';
Parent:=MainNoteBook.Page[1];
Top:=MarginAndGutterGroupBox.Left+MarginAndGutterGroupBox.Height+5;
Left:=MarginAndGutterGroupBox.Left;
Width:=MarginAndGutterGroupBox.Width;
Height:=120;
Caption:=dlgDefaultEditorFont;
end;
EditorFontComboBox:=TComboBox.Create(Self);
with EditorFontComboBox do begin
Name:='EditorFontComboBox';
Parent:=EditorFontGroupBox;
Top:=23;
Left:=5;
Width:=EditorFontGroupBox.Width-15-Height;
SetComboBoxText(EditorFontComboBox,EditorOpts.EditorFont);
OnChange:=@ComboBoxOnChange;
OnKeyDown:=@ComboBoxOnKeyDown;
OnExit:=@ComboBoxOnExit;
end;
EditorFontButton:=TButton.Create(Self);
with EditorFontButton do begin
Name:='EditorFontButton';
Parent:=EditorFontGroupBox;
Top:=EditorFontComboBox.Top+2;
Left:=EditorFontComboBox.Left+EditorFontComboBox.Width+3;
Width:=EditorFontComboBox.Height-5;
Height:=Width;
Caption:='...';
OnClick:=@EditorFontButtonClick;
end;
EditorFontLabel:=TLabel.Create(Self);
with EditorFontLabel do begin
Name:='EditorFontLabel';
Parent:=EditorFontGroupBox;
Top:=5;
Left:=EditorFontComboBox.Left+2;
Width:=130;
Caption:=dlgEditorFont;
end;
EditorFontHeightComboBox:=TComboBox.Create(Self);
with EditorFontHeightComboBox do begin
Name:='EditorFontHeightComboBox';
Parent:=EditorFontGroupBox;
Top:=EditorFontComboBox.Top+EditorFontComboBox.Height+23;
Left:=EditorFontComboBox.Left;
Width:=60;
Items.BeginUpdate;
Items.Add('10');
Items.Add('11');
Items.Add('12');
Items.Add('13');
Items.Add('14');
Items.Add('15');
Items.EndUpdate;
SetComboBoxText(EditorFontHeightComboBox
,IntToStr(EditorOpts.EditorFontHeight));
OnChange:=@ComboBoxOnChange;
OnKeyDown:=@ComboBoxOnKeyDown;
OnExit:=@ComboBoxOnExit;
end;
EditorFontHeightLabel:=TLabel.Create(Self);
with EditorFontHeightLabel do begin
Name:='EditorFontHeightLabel';
Parent:=EditorFontGroupBox;
Top:=EditorFontHeightComboBox.Top-18;
Left:=EditorFontHeightComboBox.Left+2;
Width:=150;
Caption:=dlgEditorFontHeight;
end;
ExtraLineSpacingComboBox:=TComboBox.Create(Self);
with ExtraLineSpacingComboBox do begin
Name:='ExtraLineSpacingComboBox';
Parent:=EditorFontGroupBox;
Top:=EditorFontHeightComboBox.Top;
Left:=EditorFontHeightComboBox.Left+EditorFontHeightComboBox.Width+100;
Width:=60;
Items.BeginUpdate;
Items.Add('0');
Items.Add('1');
Items.Add('2');
Items.EndUpdate;
SetComboBoxText(ExtraLineSpacingComboBox
,IntToStr(EditorOpts.ExtraLineSpacing));
OnChange:=@ComboBoxOnChange;
OnKeyDown:=@ComboBoxOnKeyDown;
OnExit:=@ComboBoxOnExit;
end;
ExtraLineSpacingLabel:=TLabel.Create(Self);
with ExtraLineSpacingLabel do begin
Name:='ExtraLineSpacingLabel';
Parent:=EditorFontGroupBox;
Top:=ExtraLineSpacingComboBox.Top-18;
Left:=ExtraLineSpacingComboBox.Left+2;
Width:=150;
Caption:=dlgExtraLineSpacing;
end;
DisplayPreview:=TPreviewEditor.Create(Self);
with DisplayPreview do begin
Name:='DisplayPreview';
Parent:=MainNoteBook.Page[1];
BorderStyle:=bsSingle;
Top:=EditorFontGroupBox.Top+EditorFontGroupBox.Height+5;
Left:=EditorFontGroupBox.Left+2;
Width:=EditorFontGroupBox.Width-2;
Height:=MaxY-Top-2;
OnSpecialLineColors:=@Self.OnSpecialLineColors;
ReadOnly:=true;
end;
end;
procedure TEditorOptionsForm.ResizeDisplayPage;
var MaxX,MaxY,ChkBoxW:integer;
begin
MaxX:=Width-5;
MaxY:=ClientHeight-80;
ChkBoxW:=140;
with MarginAndGutterGroupBox do begin
Top:=5;
Left:=5;
Width:=MaxX-10;
Height:=109;
end;
with VisibleRightMarginCheckBox do begin
Top:=5;
Left:=5;
Width:=ChkBoxW;
end;
with VisibleGutterCheckBox do begin
Top:=VisibleRightMarginCheckBox.Top+VisibleRightMarginCheckBox.Height+7;
Left:=VisibleRightMarginCheckBox.Left;
Width:=ChkBoxW;
Height:=VisibleRightMarginCheckBox.Height;
end;
with ShowLineNumbersCheckBox do begin
Top:=VisibleGutterCheckBox.Top+VisibleGutterCheckBox.Height+7;
Left:=VisibleGutterCheckBox.Left;
Width:=ChkBoxW;
Height:=VisibleRightMarginCheckBox.Height;
end;
with RightMarginComboBox do begin
Top:=20;
Left:=180;
Width:=70;
end;
with RightMarginLabel do begin
Top:=2;
Left:=RightMarginComboBox.Left+2;
Width:=150;
end;
with RightMarginColorButton do begin
Top:=RightMarginComboBox.Top+RightMarginComboBox.Height+20;
Left:=RightMarginComboBox.Left;
Width:=35;
Height:=20;
end;
with RightMarginColorLabel do begin
Top:=RightMarginComboBox.Top+RightMarginComboBox.Height;
Left:=RightMarginComboBox.Left+2;
Width:=150;
end;
with GutterWidthComboBox do begin
Top:=RightMarginComboBox.Top;
Left:=RightMarginComboBox.Left+RightMarginComboBox.Width+80;
Width:=RightMarginComboBox.Width;
Height:=RightMarginComboBox.Height;
end;
with GutterWidthLabel do begin
Top:=2;
Left:=GutterWidthComboBox.Left+2;
Width:=130;
end;
with GutterColorButton do begin
Top:=GutterWidthComboBox.Top+GutterWidthComboBox.Height+20;
Left:=GutterWidthComboBox.Left;
Width:=35;
Height:=20;
end;
with GutterColorLabel do begin
Top:=GutterWidthComboBox.Top+GutterWidthComboBox.Height;
Left:=GutterWidthComboBox.Left+2;
Width:=130;
end;
with EditorFontGroupBox do begin
Top:=MarginAndGutterGroupBox.Left+MarginAndGutterGroupBox.Height+5;
Left:=MarginAndGutterGroupBox.Left;
Width:=MarginAndGutterGroupBox.Width;
Height:=120;
end;
with EditorFontComboBox do begin
Top:=23;
Left:=5;
Width:=EditorFontGroupBox.Width-15-Height;
end;
with EditorFontButton do begin
Top:=EditorFontComboBox.Top+2;
Left:=EditorFontComboBox.Left+EditorFontComboBox.Width+3;
Width:=EditorFontComboBox.Height-5;
Height:=Width;
end;
with EditorFontLabel do begin
Top:=5;
Left:=EditorFontComboBox.Left+2;
Width:=130;
end;
with EditorFontHeightComboBox do begin
Top:=EditorFontComboBox.Top+EditorFontComboBox.Height+23;
Left:=EditorFontComboBox.Left;
Width:=60;
end;
with EditorFontHeightLabel do begin
Top:=EditorFontHeightComboBox.Top-18;
Left:=EditorFontHeightComboBox.Left+2;
Width:=150;
end;
with ExtraLineSpacingComboBox do begin
Top:=EditorFontHeightComboBox.Top;
Left:=EditorFontHeightComboBox.Left+EditorFontHeightComboBox.Width+100;
Width:=60;
end;
with ExtraLineSpacingLabel do begin
Top:=ExtraLineSpacingComboBox.Top-18;
Left:=ExtraLineSpacingComboBox.Left+2;
Width:=150;
end;
with DisplayPreview do begin
Top:=EditorFontGroupBox.Top+EditorFontGroupBox.Height+5;
Left:=EditorFontGroupBox.Left+2;
Width:=EditorFontGroupBox.Width-2;
Height:=MaxY-Top-2;
end;
end;
procedure TEditorOptionsForm.SetupKeyMappingsPage;
var MaxX,MaxY:integer;
begin
MaxX:=Width-9;
MaxY:=374;
KeyMappingChooseSchemeButton:=TButton.Create(Self);
with KeyMappingChooseSchemeButton do begin
Name:='KeyMappingChooseSchemeButton';
Parent:=MainNoteBook.Page[2];
Top:=5;
Left:=100;
Width:=200;
Height:=23;
Text:=lisEdOptsChooseScheme;
OnClick:=@KeyMappingChooseSchemeButtonClick;
end;
KeyMappingConsistencyCheckButton:=TButton.Create(Self);
with KeyMappingConsistencyCheckButton do begin
Name:='KeyMappingConsistencyCheckButton';
Parent:=MainNoteBook.Page[2];
Top:=5;
Left:=Max(KeyMappingChooseSchemeButton.Left+KeyMappingChooseSchemeButton.Width
,MaxX-150);
Width:=130;
Height:=23;
Caption:=dlgCheckConsistency;
OnClick:=@KeyMappingConsistencyCheckButtonClick;
end;
KeyMappingHelpLabel:=TLabel.Create(Self);
with KeyMappingHelpLabel do begin
Name:='KeyMappingHelpLabel';
Parent:=MainNoteBook.Page[2];
Top:=KeyMappingChooseSchemeButton.Top+KeepCaretXCheckBox.Height+10;
Left:=5;
Width:=MaxX-Left-Left;
Height:=16;
Caption:=dlgEdHintCommand;
end;
KeyMappingTreeView:=TTreeView.Create(Self);
with KeyMappingTreeView do begin
Name:='KeyMappingTreeView';
Parent:=MainNoteBook.Page[2];
Top:=KeyMappingHelpLabel.Top+KeyMappingHelpLabel.Height+2;
Left:=0;
Width:=MaxX-Left-Left;
Height:=MaxY-Top;
Options:=Options+[tvoReadOnly, tvoShowButtons, tvoShowRoot,
tvoShowLines, tvoRowSelect, tvoKeepCollapsedNodes, tvoShowSeparators];
OnMouseUp:=@KeyMappingTreeViewMouseUp;
Images:=Self.ImageList;
end;
end;
procedure TEditorOptionsForm.ResizeKeyMappingsPage;
var MaxX,MaxY:integer;
begin
MaxX:=Width-9;
MaxY:=ClientHeight-82;
with KeyMappingChooseSchemeButton do begin
Top:=5;
Left:=170;
Width:=100;
end;
with KeyMappingConsistencyCheckButton do begin
Top:=5;
Left:=Max(KeyMappingChooseSchemeButton.Left+KeyMappingChooseSchemeButton.Width
,MaxX-150);
Width:=130;
Height:=23;
end;
with KeyMappingHelpLabel do begin
Top:=KeyMappingChooseSchemeButton.Top+KeepCaretXCheckBox.Height+10;
Left:=5;
Width:=MaxX-Left-Left;
Height:=16;
end;
with KeyMappingTreeView do begin
Top:=KeyMappingHelpLabel.Top+KeyMappingHelpLabel.Height+2;
Left:=0;
Width:=MaxX-Left-Left;
Height:=MaxY-Top;
end;
end;
procedure TEditorOptionsForm.SetupColorPage;
var a,MaxX,MaxY:integer;
begin
MaxX:=Width-5;
MaxY:=377;
LanguageComboBox:=TComboBox.Create(Self);
with LanguageComboBox do
begin
Name:='LanguageComboBox';
Parent:=MainNoteBook.Page[3];
Top:=5;
Left:=75;
Width:=170;
Height:=20;
with Items do
begin
BeginUpdate;
for a:=0 to EditorOpts.HighlighterList.Count-1 do
Add(EditorOpts.HighlighterList[a].SynClass.GetLanguageName);
//for a:=0 to EditorOpts.HighlighterList.Count-1 do
// writeln('TEditorOptionsForm.SetupColorPage ',a,' ',EditorOpts.HighlighterList[a].SynClass.GetLanguageName
// ,' ',EditorOpts.HighlighterList[a].SynClass.ClassName);
EndUpdate;
end;
OnChange:=@ComboBoxOnChange;
OnKeyDown:=@ComboBoxOnKeyDown;
OnExit:=@ComboBoxOnExit;
end;
LanguageLabel:=TLabel.Create(Self);
with LanguageLabel do
begin
Name:='LanguageLabel';
Parent:=MainNoteBook.Page[3];
Top:=7;
Left:=5;
Width:=LanguageComboBox.Left-Left;
Height:=16;
Caption:=dlgLang;
end;
ColorSchemeComboBox:=TComboBox.Create(Self);
with ColorSchemeComboBox do
begin
Name:='ColorSchemeComboBox';
Parent:=MainNoteBook.Page[3];
Top:=LanguageComboBox.Top;
Left:=LanguageComboBox.Left+LanguageComboBox.Width+110;
Width:=100;
Height:=20;
with Items do begin
BeginUpdate;
// ToDo: fill also with custom color schemes
Add(DefaultColorScheme);
Add('Pascal Classic');
Add('Twilight');
Add('Ocean');
EndUpdate;
end;
Text:=DefaultColorScheme;
OnChange:=@ComboBoxOnChange;
OnKeyDown:=@ComboBoxOnKeyDown;
OnExit:=@ComboBoxOnExit;
end;
ColorSchemeLabel:=TLabel.Create(Self);
with ColorSchemeLabel do begin
Name:='ColorSchemeLabel';
Parent:=MainNoteBook.Page[3];
Top:=ColorSchemeComboBox.Top+2;
Left:=ColorSchemeComboBox.Left-80;
Width:=ColorSchemeComboBox.Left-Left;
Height:=16;
Caption:=dlgClrScheme;
end;
FileExtensionsComboBox:=TComboBox.Create(Self);
with FileExtensionsComboBox do begin
Name:='FileExtensionsComboBox';
Parent:=MainNoteBook.Page[3];
Top:=ColorSchemeComboBox.Top+ColorSchemeComboBox.Height+4;
Left:=103;
Width:=310;
Height:=20;
Items.BeginUpdate;
Items.Add('pp;pas;inc;lpr;lrs;dpr;dpk');
Items.Add('pp;pas;inc;lpr;lrs');
Items.Add('pp;pas;inc');
Items.EndUpdate;
if CurLanguageID>=0 then
SetComboBoxText(FileExtensionsComboBox,
EditorOpts.HighlighterList[CurLanguageID].FileExtensions);
OnChange:=@ComboBoxOnChange;
OnKeyDown:=@ComboBoxOnKeyDown;
OnExit:=@ComboBoxOnExit;
end;
FileExtensionsLabel:=TLabel.Create(Self);
with FileExtensionsLabel do begin
Name:='FileExtensionsLabel';
Parent:=MainNoteBook.Page[3];
Top:=FileExtensionsComboBox.Top+2;
Left:=5;
Width:=FileExtensionsComboBox.Left-Left-2;
Caption:=dlgFileExts;
end;
ColorElementLabel:=TLabel.Create(Self);
with ColorElementLabel do begin
Name:='ColorElementLabel';
Parent:=MainNoteBook.Page[3];
Top:=FileExtensionsComboBox.Top+FileExtensionsComboBox.Height+12;
Left:=5;
Width:=180;
Height:=16;
Caption:=dlgEdElement;
end;
ColorElementListBox:=TListBox.Create(Self);
with ColorElementListBox do
begin
Name:='ColorElementListBox';
Parent:=MainNoteBook.Page[3];
Top:=ColorElementLabel.Top+ColorElementLabel.Height+2;
Left:=ColorElementLabel.Left;
Width:=ColorElementLabel.Width;
Height:=170;
MultiSelect:=false;
OnMouseUp:=@ColorElementListBoxMouseUp;
end;
SetAttributeToDefaultButton:=TButton.Create(Self);
with SetAttributeToDefaultButton do
begin
Name:='SetAttributeToDefaultButton';
Parent:=MainNoteBook.Page[3];
Top:=ColorElementLabel.Top;
Left:=ColorElementListBox.Left+ColorElementListBox.Width+12;
Width:=MaxX-5-Left;
Height:=23;
Caption:=dlgSetElementDefault;
OnClick:=@SetAttributeToDefaultButtonClick;
end;
SetAllAttributesToDefaultButton:=TButton.Create(Self);
with SetAllAttributesToDefaultButton do
begin
Name:='SetAllAttributesToDefaultButton';
Parent:=MainNoteBook.Page[3];
Top:=SetAttributeToDefaultButton.Top+SetAttributeToDefaultButton.Height+2;
Left:=SetAttributeToDefaultButton.Left;
Width:=SetAttributeToDefaultButton.Width;
Height:=SetAttributeToDefaultButton.Height;
Caption:=dlgSetAllElementDefault;
OnClick:=@SetAllAttributesToDefaultButtonClick;
end;
ForeGroundGroupBox:=TGroupBox.Create(Self);
with ForeGroundGroupBox do
begin
Name:='ForeGroundGroupBox';
Parent:=MainNoteBook.Page[3];
Top:=SetAllAttributesToDefaultButton.Top
+SetAllAttributesToDefaultButton.Height+4;
Left:=ColorElementListBox.Left+ColorElementListBox.Width+12;
Width:=MaxX-5-Left;
Height:=43;
Caption:=dlgForecolor;
end;
ForeGroundColorButton:=TColorButton.Create(Self);
with ForegroundColorButton do
begin
Name:='ForegroundColorButton';
Parent:=ForeGroundGroupBox;
BorderWidth:=2;
Top:=2;
Left:=5;
Width:=70;
Height:=20;
Color:=clRed;
OnColorChanged:=@ColorButtonColorChanged;
end;
ForeGroundUseDefaultCheckBox:=TCheckBox.Create(Self);
with ForeGroundUseDefaultCheckBox do
begin
Name:='ForeGroundUseDefaultCheckBox';
Parent:=ForeGroundGroupBox;
Top:=ForeGroundColorButton.Top;
Left:=ForegroundColorButton.Left+ForegroundColorButton.Width+5;
Width:=ForeGroundGroupBox.Width-Left-Left;
Height:=16;
Caption:=dlgEdUseDefColor;
OnClick:=@GeneralCheckBoxOnClick;
end;
BackGroundGroupBox:=TGroupBox.Create(Self);
with BackGroundGroupBox do
begin
Name:='BackGroundGroupBox';
Parent:=MainNoteBook.Page[3];
Top:=ForeGroundGroupBox.Top+ForeGroundGroupBox.Height+5;
Left:=ForeGroundGroupBox.Left;
Width:=ForeGroundGroupBox.Width;
Height:=ForeGroundGroupBox.Height;
Caption:=dlgBackColor;
end;
BackGroundColorButton:=TColorButton.Create(Self);
with BackgroundColorButton do
begin
Name:='BackgroundColorButton';
Parent:=BackGroundGroupBox;
BorderWidth:=2;
Top:=2;
Left:=5;
Width:=70;
Height:=20;
Color:=clBlue;
OnColorChanged:=@ColorButtonColorChanged;
end;
BackGroundUseDefaultCheckBox:=TCheckBox.Create(Self);
with BackGroundUseDefaultCheckBox do
begin
Name:='BackGroundUseDefaultCheckBox';
Parent:=BackGroundGroupBox;
Top:=BackGroundColorButton.Top;
Left:=BackgroundColorButton.Left+BackgroundColorButton.Width+5;
Width:=ForeGroundGroupBox.Width-Left-Left;
Height:=16;
Caption:=dlgEdUseDefColor;
OnClick:=@GeneralCheckBoxOnClick;
end;
TextAttributesGroupBox:=TGroupBox.Create(Self);
with TextAttributesGroupBox do
begin
Name:='TextAttributesGroupBox';
Parent:=MainNoteBook.Page[3];
Top:=BackGroundGroupBox.Top+BackGroundGroupBox.Height+5;
Left:=ForeGroundGroupBox.Left;
Width:=ForeGroundGroupBox.Width;
Height:=43;
Caption:=dlgTextAttributes;
end;
TextBoldCheckBox:=TCheckBox.Create(Self);
with TextBoldCheckBox do
begin
Name:='TextBoldCheckBox';
Parent:=TextAttributesGroupBox;
Top:=5;
Left:=5;
Width:=50;
Height:=16;
Caption:=dlgEdBold;
OnClick:=@GeneralCheckBoxOnClick;
end;
TextItalicCheckBox:=TCheckBox.Create(Self);
with TextItalicCheckBox do
begin
Name:='TextItalicCheckBox';
Parent:=TextAttributesGroupBox;
Top:=TextBoldCheckBox.Top;
Left:=TextBoldCheckBox.Left+TextBoldCheckBox.Width+5;
Width:=95;
Height:=TextBoldCheckBox.Height;
Caption:=dlgEdItal;
OnClick:=@GeneralCheckBoxOnClick;
end;
TextUnderlineCheckBox:=TCheckBox.Create(Self);
with TextUnderlineCheckBox do
begin
Name:='TextUnderlineCheckBox';
Parent:=TextAttributesGroupBox;
Top:=TextBoldCheckBox.Top;
Left:=TextItalicCheckBox.Left+TextItalicCheckBox.Width+20;
Width:=75;
Height:=TextItalicCheckBox.Height;
Caption:=dlgEdUnder;
OnClick:=@GeneralCheckBoxOnClick;
end;
ColorPreview:=TPreviewEditor.Create(Self);
with ColorPreview do
begin
Name:='ColorPreview';
Parent:=MainNoteBook.Page[3];
Left:=5;
Top:=TextAttributesGroupBox.Top+TextAttributesGroupBox.Height+7;
Width:=MaxX-Left-Left;
Height:=MaxY-Top-Left;
OnSpecialLineColors:=@Self.OnSpecialLineColors;
OnMouseDown:=@ColorPreviewMouseUp;
ReadOnly:=true;
end;
end;
procedure TEditorOptionsForm.ResizeColorPage;
var MaxX,MaxY:integer;
w: Integer;
begin
MaxX:=Width-5;
MaxY:=ClientHeight-76;
with LanguageComboBox do begin
Top:=5;
Left:=75;
Width:=170;
Height:=20;
end;
with LanguageLabel do begin
Top:=7;
Left:=5;
Width:=LanguageComboBox.Left-Left;
Height:=16;
end;
with ColorSchemeComboBox do begin
Top:=LanguageComboBox.Top;
Left:=LanguageComboBox.Left+LanguageComboBox.Width+110;
Width:=100;
Height:=20;
end;
with ColorSchemeLabel do begin
Top:=ColorSchemeComboBox.Top+2;
Left:=ColorSchemeComboBox.Left-90;
Width:=ColorSchemeComboBox.Left-Left;
Height:=16;
end;
with FileExtensionsComboBox do begin
Top:=ColorSchemeComboBox.Top+ColorSchemeComboBox.Height+4;
Left:=103;
Width:=310;
Height:=20;
end;
with FileExtensionsLabel do begin
Top:=FileExtensionsComboBox.Top+2;
Left:=5;
Width:=FileExtensionsComboBox.Left-Left-2;
end;
with ColorElementLabel do begin
Top:=FileExtensionsComboBox.Top+FileExtensionsComboBox.Height+12;
Left:=5;
Width:=180;
Height:=16;
end;
with ColorElementListBox do begin
Top:=ColorElementLabel.Top+ColorElementLabel.Height+2;
Left:=ColorElementLabel.Left;
Width:=ColorElementLabel.Width;
Height:=170;
end;
with SetAttributeToDefaultButton do begin
Top:=ColorElementLabel.Top;
Left:=ColorElementListBox.Left+ColorElementListBox.Width+12;
Width:=MaxX-5-Left;
Height:=23;
end;
with SetAllAttributesToDefaultButton do begin
Top:=SetAttributeToDefaultButton.Top+SetAttributeToDefaultButton.Height+2;
Left:=SetAttributeToDefaultButton.Left;
Width:=SetAttributeToDefaultButton.Width;
Height:=SetAttributeToDefaultButton.Height;
end;
with ForeGroundGroupBox do begin
Top:=SetAllAttributesToDefaultButton.Top
+SetAllAttributesToDefaultButton.Height+4;
Left:=ColorElementListBox.Left+ColorElementListBox.Width+12;
Width:=MaxX-5-Left;
Height:=43;
end;
with ForegroundColorButton do begin
Top:=2;
Left:=5;
Width:=70;
Height:=20;
end;
with ForeGroundUseDefaultCheckBox do begin
Top:=ForeGroundColorButton.Top;
Left:=ForegroundColorButton.Left+ForegroundColorButton.Width+5;
Width:=ForeGroundGroupBox.Width-Left-Left;
Height:=16;
end;
with BackGroundGroupBox do begin
Top:=ForeGroundGroupBox.Top+ForeGroundGroupBox.Height+5;
Left:=ForeGroundGroupBox.Left;
Width:=ForeGroundGroupBox.Width;
Height:=ForeGroundGroupBox.Height;
end;
with BackgroundColorButton do begin
Top:=2;
Left:=5;
Width:=70;
Height:=20;
end;
with BackGroundUseDefaultCheckBox do begin
Top:=BackGroundColorButton.Top;
Left:=BackgroundColorButton.Left+BackgroundColorButton.Width+5;
Width:=ForeGroundGroupBox.Width-Left-Left;
Height:=16;
end;
with TextAttributesGroupBox do begin
Top:=BackGroundGroupBox.Top+BackGroundGroupBox.Height+5;
Left:=ForeGroundGroupBox.Left;
Width:=ForeGroundGroupBox.Width;
Height:=43;
end;
w:=(TextBoldCheckBox.Parent.ClientWidth-20) div 3;
with TextBoldCheckBox do begin
Top:=5;
Left:=5;
Width:=w;
Height:=16;
end;
with TextItalicCheckBox do begin
Top:=TextBoldCheckBox.Top;
Left:=TextBoldCheckBox.Left+TextBoldCheckBox.Width+5;
Width:=w;
Height:=TextBoldCheckBox.Height;
end;
with TextUnderlineCheckBox do begin
Top:=TextBoldCheckBox.Top;
Left:=TextItalicCheckBox.Left+TextItalicCheckBox.Width+5;
Width:=w;
Height:=TextItalicCheckBox.Height;
end;
with ColorPreview do begin
Left:=5;
Top:=TextAttributesGroupBox.Top+TextAttributesGroupBox.Height+7;
Width:=MaxX-Left-Left;
Height:=MaxY-Top-Left;
end;
end;
procedure TEditorOptionsForm.SetupCodeToolsPage;
var MaxX:integer;
begin
MaxX:=Width-5;
AutomaticFeaturesGroupBox:=TGroupBox.Create(Self);
with AutomaticFeaturesGroupBox do begin
Name:='AutomaticFeaturesGroupBox';
Parent:=MainNoteBook.Page[4];
Top:=5;
Left:=5;
Width:=MaxX-Left-Left;
Height:=110;
Caption:='Automatic features';
Visible:=true;
end;
AutoIdentifierCompletionCheckBox:=TCheckBox.Create(Self);
with AutoIdentifierCompletionCheckBox do begin
Name:='AutoIdentifierCompletionCheckBox';
Parent:=AutomaticFeaturesGroupBox;
Top:=2;
Left:=5;
Width:=200;
Height:=20;
Caption:=dlgEdIdComlet;
Checked:=EditorOpts.AutoIdentifierCompletion;
Enabled:=false;
Visible:=true;
end;
AutoCodeParametersCheckBox:=TCheckBox.Create(Self);
with AutoCodeParametersCheckBox do begin
Name:='AutoCodeParametersCheckBox';
Parent:=AutomaticFeaturesGroupBox;
Top:=AutoIdentifierCompletionCheckBox.Top
+AutoIdentifierCompletionCheckBox.Height;
Left:=AutoIdentifierCompletionCheckBox.Left;
Width:=AutoIdentifierCompletionCheckBox.Width;
Height:=AutoIdentifierCompletionCheckBox.Height;
Caption:=dlgEdCodeParams;
Checked:=EditorOpts.AutoCodeParameters;
Enabled:=false;
Visible:=true;
end;
AutoToolTipExprEvalCheckBox:=TCheckBox.Create(Self);
with AutoToolTipExprEvalCheckBox do begin
Name:='AutoToolTipExprEvalCheckBox';
Parent:=AutomaticFeaturesGroupBox;
Top:=AutoCodeParametersCheckBox.Top+AutoCodeParametersCheckBox.Height;
Left:=AutoIdentifierCompletionCheckBox.Left;
Width:=AutoIdentifierCompletionCheckBox.Width;
Height:=AutoIdentifierCompletionCheckBox.Height;
Caption:=dlgTooltipEval;
Checked:=EditorOpts.AutoToolTipExprEval;
Enabled:=false;
Visible:=true;
end;
AutoToolTipSymbToolsCheckBox:=TCheckBox.Create(Self);
with AutoToolTipSymbToolsCheckBox do begin
Name:='AutoToolTipSymbToolsCheckBox';
Parent:=AutomaticFeaturesGroupBox;
Top:=AutoToolTipExprEvalCheckBox.Top+AutoToolTipExprEvalCheckBox.Height;
Left:=AutoIdentifierCompletionCheckBox.Left;
Width:=AutoIdentifierCompletionCheckBox.Width;
Height:=AutoIdentifierCompletionCheckBox.Height;
Caption:=dlgTooltipTools;
Checked:=EditorOpts.AutoToolTipSymbTools;
Visible:=true;
end;
AutoDelayLabel:=TLabel.Create(Self);
with AutoDelayLabel do begin
Name:='AutoDelayLabel';
Parent:=AutomaticFeaturesGroupBox;
Top:=10;
Left:=AutoIdentifierCompletionCheckBox.Left
+AutoIdentifierCompletionCheckBox.Width+17;
Width:=70;
Caption:=dlgEdDelay;
Visible:=true;
end;
AutoDelayTrackBar:=TTrackBar.Create(Self);
with AutoDelayTrackBar do begin
Name:='AutoDelayTrackBar';
Parent:=AutomaticFeaturesGroupBox;
Top:=32;
Left:=AutoIdentifierCompletionCheckBox.Left
+AutoIdentifierCompletionCheckBox.Width+15;
Width:=150;
Min:=2;
Max:=6;
Height:=10;
Position:=EditorOpts.AutoDelayInMSec div 250;
TickMarks:=tmBottomRight;
Visible:=true;
end;
AutoDelayMinLabel:=TLabel.Create(Self);
with AutoDelayMinLabel do begin
Name:='AutoDelayMinLabel';
Parent:=AutomaticFeaturesGroupBox;
Top:=AutoDelayTrackBar.Top+AutoDelayTrackBar.Height+5;
Left:=AutoIdentifierCompletionCheckBox.Left
+AutoIdentifierCompletionCheckBox.Width+15;
Width:=70;
Caption:='0.5 ' + DlgTimeSecondUnit;
Visible:=true;
end;
AutoDelayMaxLabel:=TLabel.Create(Self);
with AutoDelayMaxLabel do begin
Name:='AutoDelayMaxLabel';
Parent:=AutomaticFeaturesGroupBox;
Top:=AutoDelayMinLabel.Top;
Left:=AutoDelayTrackBar.Left+AutoDelayTrackBar.Width-30;
Width:=70;
Caption:='1.5 '+ dlgTimeSecondUnit;
Visible:=true;
end;
CodeTemplatesGroupBox:=TGroupBox.Create(Self);
with CodeTemplatesGroupBox do begin
Name:='CodeTemplatesGroupBox';
Parent:=MainNoteBook.Page[4];
Top:=AutomaticFeaturesGroupBox.Top+AutomaticFeaturesGroupBox.Height+5;
Left:=AutomaticFeaturesGroupBox.Left;
Width:=AutomaticFeaturesGroupBox.Width;
Height:=250;
Caption:=dlgEdCodeTempl;
OnResize:=@CodeTemplatesGroupBoxResize;
Visible:=true;
end;
CodeTemplateFileNameLabel:=TLabel.Create(Self);
with CodeTemplateFileNameLabel do begin
Name:='CodeTemplateFileNameLabel';
Parent:=CodeTemplatesGroupBox;
Top:=5;
Left:=7;
Width:=110;
Caption:=dlgTplFName;
Visible:=true;
end;
CodeTemplateFileNameComboBox:=TComboBox.Create(Self);
with CodeTemplateFileNameComboBox do begin
Name:='CodeTemplateFileNameComboBox';
Parent:=CodeTemplatesGroupBox;
Top:=3;
Left:=CodeTemplateFileNameLabel.Left+CodeTemplateFileNameLabel.Width+2;
Width:=CodeTemplatesGroupBox.Width-12-Left-Height;
Text:=EditorOpts.CodeTemplateFileName;
OnChange:=@ComboBoxOnChange;
OnKeyDown:=@ComboBoxOnKeyDown;
OnExit:=@ComboBoxOnExit;
Visible:=true;
end;
CodeTemplateFileNameButton:=TButton.Create(Self);
with CodeTemplateFileNameButton do begin
Name:='CodeTemplateFileNameButton';
Parent:=CodeTemplatesGroupBox;
Top:=CodeTemplateFileNameComboBox.Top+2;
Width:=CodeTemplateFileNameComboBox.Height-5;
Left:=CodeTemplatesGroupBox.Width-9-Width;
Height:=Width;
Caption:='...';
OnClick:=@CodeTemplateFileNameButtonClick;
Visible:=true;
end;
CodeTemplateAddButton:=TButton.Create(Self);
with CodeTemplateAddButton do begin
Name:='CodeTemplateAddButton';
Parent:=CodeTemplatesGroupBox;
Top:=CodeTemplateFileNameComboBox.Top+CodeTemplateFileNameComboBox.Height+10;
Width:=50;
Left:=CodeTemplateFileNameLabel.Left;
Height:=23;
Caption:=dlgEdAdd;
OnClick:=@CodeTemplateButtonClick;
Visible:=true;
end;
CodeTemplateEditButton:=TButton.Create(Self);
with CodeTemplateEditButton do begin
Name:='CodeTemplateEditButton';
Parent:=CodeTemplatesGroupBox;
Top:=CodeTemplateAddButton.Top+CodeTemplateAddButton.Height+5;
Left:=CodeTemplateAddButton.Left;
Width:=CodeTemplateAddButton.Width;
Height:=CodeTemplateAddButton.Height;
Caption:=dlgEdEdit;
OnClick:=@CodeTemplateButtonClick;
Visible:=true;
end;
CodeTemplateDeleteButton:=TButton.Create(Self);
with CodeTemplateDeleteButton do begin
Name:='CodeTemplateDeleteButton';
Parent:=CodeTemplatesGroupBox;
Top:=CodeTemplateEditButton.Top+CodeTemplateEditButton.Height+5;
Left:=CodeTemplateAddButton.Left;
Width:=CodeTemplateAddButton.Width;
Height:=CodeTemplateAddButton.Height;
Caption:=dlgEdDelete;
OnClick:=@CodeTemplateButtonClick;
Visible:=true;
end;
CodeTemplatesLabel:=TLabel.Create(Self);
with CodeTemplatesLabel do begin
Name:='CodeTemplatesLabel';
Parent:=CodeTemplatesGroupBox;
Top:=CodeTemplateFileNameLabel.Top+CodeTemplateFileNameLabel.Height+12;
Left:=CodeTemplateAddButton.Left+CodeTemplateAddButton.Width+5;
Width:=60;
Caption:='Templates';
Visible:=true;
end;
CodeTemplateListBox:=TListBox.Create(Self);
with CodeTemplateListBox do begin
Name:='CodeTemplateListBox';
Parent:=CodeTemplatesGroupBox;
Top:=CodeTemplatesLabel.Top;
Left:=CodeTemplatesLabel.Left+CodeTemplatesLabel.Width+5;
Width:=Parent.ClientWidth-8-Left;
Height:=80;
OnMouseUp:=@CodeTemplateListBoxMouseUp;
Visible:=true;
end;
CodeTemplateCodeLabel:=TLabel.Create(Self);
with CodeTemplateCodeLabel do begin
Name:='CodeTemplateCodeLabel';
Parent:=CodeTemplatesGroupBox;
Top:=CodeTemplateListBox.Top+CodeTemplateListBox.Height+5;
Left:=CodeTemplatesLabel.Left;
Width:=CodeTemplatesLabel.Width;
Height:=CodeTemplatesLabel.Height;
Caption:='Code';
Visible:=true;
end;
CodeTemplateCodePreview:=TPreviewEditor.Create(Self);
with CodeTemplateCodePreview do begin
Name:='CodeTemplateCodePreview';
Parent:=CodeTemplatesGroupBox;
Top:=CodeTemplateCodeLabel.Top;
Left:=CodeTemplateCodeLabel.Left+CodeTemplateCodeLabel.Width+5;
Width:=CodeTemplateListBox.Width;
Height:=CodeTemplatesGroupBox.ClientHeight-20-Top;
Lines.Clear;
Gutter.Visible:=false;
Visible:=true;
end;
CodeTemplateIndentTypeRadioGroup:=TRadioGroup.Create(Self);
with CodeTemplateIndentTypeRadioGroup do begin
Name:='CodeTemplateIndentTypeRadioGroup';
Parent:=CodeTemplatesGroupBox;
Left:=CodeTemplateAddButton.Left;
Top:=CodeTemplateCodeLabel.Top+CodeTemplateCodeLabel.Height+15;
Width:=CodeTemplateCodePreview.Left-Left-8;
Height:=70;
Caption:=dlgIndentCodeTo;
with Items do begin
BeginUpdate;
Add('Token start');
Add('Line start');
EndUpdate;
end;
Visible:=true;
end;
CurCodeTemplate:=-1;
end;
procedure TEditorOptionsForm.ResizeCodeToolsPage;
var MaxX, MaxY:integer;
begin
MaxX:=Width-5;
MaxY:=ClientHeight-76;
with AutomaticFeaturesGroupBox do begin
Top:=5;
Left:=5;
Width:=MaxX-Left-Left;
Height:=110;
end;
with AutoIdentifierCompletionCheckBox do begin
Top:=2;
Left:=5;
Width:=200;
Height:=20;
end;
with AutoCodeParametersCheckBox do begin
Top:=AutoIdentifierCompletionCheckBox.Top
+AutoIdentifierCompletionCheckBox.Height;
Left:=AutoIdentifierCompletionCheckBox.Left;
Width:=AutoIdentifierCompletionCheckBox.Width;
Height:=AutoIdentifierCompletionCheckBox.Height;
end;
with AutoToolTipExprEvalCheckBox do begin
Top:=AutoCodeParametersCheckBox.Top+AutoCodeParametersCheckBox.Height;
Left:=AutoIdentifierCompletionCheckBox.Left;
Width:=AutoIdentifierCompletionCheckBox.Width;
Height:=AutoIdentifierCompletionCheckBox.Height;
end;
with AutoToolTipSymbToolsCheckBox do begin
Top:=AutoToolTipExprEvalCheckBox.Top+AutoToolTipExprEvalCheckBox.Height;
Left:=AutoIdentifierCompletionCheckBox.Left;
Width:=AutoIdentifierCompletionCheckBox.Width;
Height:=AutoIdentifierCompletionCheckBox.Height;
end;
with AutoDelayLabel do begin
Top:=10;
Left:=AutoIdentifierCompletionCheckBox.Left
+AutoIdentifierCompletionCheckBox.Width+17;
Width:=70;
end;
with AutoDelayTrackBar do begin
Top:=32;
Left:=AutoIdentifierCompletionCheckBox.Left
+AutoIdentifierCompletionCheckBox.Width+15;
Width:=150;
Height:=10;
end;
with AutoDelayMinLabel do begin
Top:=AutoDelayTrackBar.Top+AutoDelayTrackBar.Height+5;
Left:=AutoIdentifierCompletionCheckBox.Left
+AutoIdentifierCompletionCheckBox.Width+15;
Width:=70;
end;
with AutoDelayMaxLabel do begin
Top:=AutoDelayMinLabel.Top;
Left:=AutoDelayTrackBar.Left+AutoDelayTrackBar.Width-30;
Width:=70;
end;
with CodeTemplatesGroupBox do begin
Top:=AutomaticFeaturesGroupBox.Top+AutomaticFeaturesGroupBox.Height+5;
Left:=AutomaticFeaturesGroupBox.Left;
Width:=AutomaticFeaturesGroupBox.Width;
Height:=MaxY-Top-10;
end;
end;
procedure TEditorOptionsForm.SetupButtonBar;
begin
CancelButton:=TButton.Create(Self);
with CancelButton do begin
Name:='CancelButton';
Parent:=Self;
Width:=70;
Height:=23;
Top:=Self.Height-Height-15;
Left:=Self.Width-Width-10;
Caption:=dlgCancel;
OnClick:=@CancelButtonClick;
end;
OkButton:=TButton.Create(Self);
with OkButton do begin
Name:='OkButton';
Parent:=Self;
Width:=70;
Height:=23;
Top:=Self.Height-Height-15;
Left:=CancelButton.Left-10-Width;
Caption:='Ok';
OnClick:=@OkButtonClick;
end;
end;
procedure TEditorOptionsForm.ResizeButtonBar;
begin
with CancelButton do begin
Width:=70;
Height:=23;
Top:=Self.Height-Height-15;
Left:=Self.Width-Width-10;
end;
with OkButton do begin
Width:=70;
Height:=23;
Top:=Self.Height-Height-15;
Left:=CancelButton.Left-10-Width;
end;
end;
procedure TEditorOptionsForm.OkButtonClick(Sender:TObject);
var res: TModalResult;
SynOptions: TSynEditorOptions;
i: integer;
begin
IDEDialogLayoutList.SaveLayout(Self);
SaveCurCodeTemplate;
// save all values
EditorOpts.KeyMap.Assign(EditingKeyMap);
SynOptions:=PreviewEdits[1].Options-[eoNoSelection,eoNoCaret];
if BracketHighlightCheckBox.Checked then
Include(SynOptions,eoBracketHighlight)
else
Exclude(SynOptions,eoBracketHighlight);
PreviewEdits[1].Options:=SynOptions;
EditorOpts.SetSynEditSettings(PreviewEdits[1]);
PreviewEdits[1].Options:=SynOptions-[eoBracketHighlight]
+[eoNoCaret,eoNoSelection];
// general
EditorOpts.ShowTabCloseButtons:=ShowCloseBtnInNoteBookCheckBox.Checked;
EditorOpts.UndoAfterSave:=UndoAfterSaveCheckBox.Checked;
EditorOpts.CopyWordAtCursorOnCopyNone:=
CopyWordAtCursorOnCopyNoneCheckBox.Checked;
EditorOpts.ShowGutterHints:=ShowGutterHintsCheckBox.Checked;
EditorOpts.FindTextAtCursor:=FindTextAtCursorCheckBox.Checked;
EditorOpts.UseSyntaxHighlight:=UseSyntaxHighlightCheckBox.Checked;
EditorOpts.CtrlMouseLinks:=MouseLinksCheckBox.Checked;
i:=StrToIntDef(UndoLimitComboBox.Text,32767);
if i<1 then i:=1;
if i>32767 then i:=32767;
EditorOpts.UndoLimit:=i;
i:=StrToIntDef(TabWidthsComboBox.Text,2);
if i<1 then i:=1;
if i>20 then i:=20;
EditorOpts.TabWidth:=i;
i:=StrToIntDef(BlockIndentComboBox.Text,2);
if i<1 then i:=1;
if i>20 then i:=20;
EditorOpts.BlockIndent:=i;
// color
SaveAllFileExtensions;
SaveAllColorSchemes;
SaveAllHighlighters;
// code Tools
EditorOpts.AutoIdentifierCompletion:=AutoIdentifierCompletionCheckBox.Checked;
EditorOpts.AutoCodeParameters:=AutoCodeParametersCheckBox.Checked;
EditorOpts.AutoToolTipExprEval:=AutoToolTipExprEvalCheckBox.Checked;
EditorOpts.AutoToolTipSymbTools:=AutoToolTipSymbToolsCheckBox.Checked;
EditorOpts.AutoDelayInMSec:=AutoDelayTrackBar.Position*250;
EditorOpts.CodeTemplateFileName:=CodeTemplateFileNameComboBox.Text;
EditorOpts.CodeTemplateIndentToTokenStart:=
(CodeTemplateIndentTypeRadioGroup.ItemIndex=0);
EditorOpts.Save;
if BuildBorlandDCIFile(SynAutoComplete) then begin
Res:=mrOk;
repeat
try
SynAutoComplete.AutoCompleteList.SaveToFile(
EditorOpts.CodeTemplateFileName);
except
res:=MessageDlg(' Unable to write code templates to file '''
+EditorOpts.CodeTemplateFileName+'''! ',mtError
,[mbAbort, mbIgnore, mbRetry],0);
if res=mrAbort then exit;
end;
until Res<>mrRetry;
end;
ModalResult:=mrOk;
end;
procedure TEditorOptionsForm.CancelButtonClick(Sender:TObject);
begin
IDEDialogLayoutList.SaveLayout(Self);
EditorOpts.Load;
ModalResult:=mrCancel;
end;
//=============================================================================
initialization
{$I lazarus_dci.lrs}
{$I editoroptions.lrs}
end.