📄 optionsdialog.pas
字号:
if FirstLine = CaretY then ImgIndex := 1
else ImgIndex := -1;
if ImgIndex >= 0 then
ilGutterGlyphs.Draw(Canvas, X, Y, ImgIndex);
Inc(FirstLine);
Inc(Y, LH);
end;
end;
end;
procedure TMySynEdit.SetShowCurrentLine(const Value: Boolean);
begin
if Value <> FShowCurrentLine then
begin
FShowCurrentLine := Value;
Refresh;
end;
end;
{ TdlgOption }
Procedure TdlgOption.EnumerateHighlighters;
Var
I: Integer;
strLst: TStringList;
Begin
lbLanguage.Items.Clear;
For i := 0 To ComponentCount - 1 Do
If Components[i] Is TSynCustomHighLighter Then
lbLanguage.Items.AddObject(
(Components[i] As TSynCustomHighLighter).LanguageName,
Components[i]);
lbLanguage.ItemIndex := 0;
lbLanguageClick(Self);
cboLanguage.Items.Clear;
With lbLanguage Do
For i := 0 To Items.Count - 1 Do Begin
strLst := TIniStrings.Create;
LoadTemplate(Items[i], StrLst);
cboLanguage.Items.AddObject(Items[i], StrLst);
End; //for
cboLanguage.ItemIndex := 0;
CurrentTemplateIndex := 0;
edtCode.Modified := False;
TemplateModified := False;
ToolsLstModified := False;
cboLanguageChange(Self);
End;
Procedure TdlgOption.FormShow(Sender: TObject);
Begin
EnumerateHighlighters;
GetCurrentSettings;
LoadToolsList;
With EditorDataModule Do Begin
LoadSupportedExts(cboExts.Items);
lstAsso.Items.Assign(RegistedExtsList);
End;
tran.LanguageFile := CurrentLan;
tran.Translate;
End;
Procedure TdlgOption.lbLanguageClick(Sender: TObject);
Var
i: Integer;
h: TSynCustomHighLighter;
Begin
If lbLanguage.ItemIndex >= 0 Then Begin
If LastLan <> -1 Then Begin
//update Default Filter
h := lbLanguage.Items.Objects[LastLan] As TSynCustomHighLighter;
If h.DefaultFilter <> edtFilter.Text Then
h.DefaultFilter := edtFilter.Text;
End;
LastLan := lbLanguage.ItemIndex;
h := lbLanguage.Items.Objects[lbLanguage.ItemIndex] As TSynCustomHighLighter;
edtFilter.Text := h.DefaultFilter;
lbElement.Items.Clear;
For i := 0 To h.AttrCount - 1 Do
lbElement.Items.Add(h.Attribute[i].Name);
lbElement.ItemIndex := 0;
End;
lbElementClick(Self);
End;
Procedure TdlgOption.lbElementClick(Sender: TObject);
Var
h: TSynCustomHighLighter;
Attr: TSynHighlighterAttributes;
Begin
If lbLanguage.ItemIndex >= 0 Then Begin
h := lbLanguage.Items.Objects[lbLanguage.ItemIndex] As TSynCustomHighLighter;
Attr := TSynHighlighterAttributes.Create('');
Try
Attr.Assign(h.Attribute[lbElement.ItemIndex]);
ColorGrid.ForeGroundIndex := ColorGrid.ColorToIndex(Attr.ForegRound);
ColorGrid.BackGroundIndex := ColorGrid.ColorToIndex(Attr.BackGround);
cbBold.Checked := (FsBOld In Attr.Style);
cbItalic.Checked := (FsItalic In Attr.Style);
cbUnderLine.Checked := (FsUnderLine In Attr.Style);
cbStrikeOut.Checked := (FsStrikeOut In Attr.Style);
Finally
Attr.Free;
End;
End;
End;
Procedure TdlgOption.ElementChange(Sender: TObject);
Var
h: TSynCustomHighLighter;
Attr: TSynHighlighterAttributes;
AttrStyle: TFontstyles;
Begin
If lbLanguage.ItemIndex >= 0 Then Begin
h := lbLanguage.Items.Objects[lbLanguage.ItemIndex] As TSynCustomHighLighter;
Attr := TSynHighlighterAttributes.Create(lbElement.Items[lbElement.ItemIndex]);
Try
AttrStyle := [];
Attr.ForegRound := ColorGrid.ForegroundColor;
Attr.BackGround := ColorGrid.BackGroundColor;
If cbBold.Checked Then
Include(AttrStyle, FsBOld);
If cbItalic.Checked Then
Include(AttrStyle, FsItalic);
If cbUnderLine.Checked Then
Include(AttrStyle, FsUnderLine);
If cbStrikeOut.Checked Then
Include(AttrStyle, FsStrikeOut);
Attr.Style := AttrStyle;
h.Attribute[lbElement.ItemIndex].Assign(Attr);
Finally
Attr.Free;
End;
End;
End;
Procedure TdlgOption.GetCurrentSettings;
Procedure AssignAttrs(FromHL, ToHL: TSynCustomHighLighter);
Var
I: Integer;
Begin
ToHL.DefaultFilter := FromHL.DefaultFilter;
For I := 0 To FromHL.AttrCount - 1 Do
ToHL.Attribute[I].Assign(FromHL.Attribute[I]);
End;
Var
I: Integer;
Idx: Integer;
Edit: TMySynEdit;
Begin
For i := 0 To EditorDataModule.ComponentCount - 1 Do
If EditorDataModule.Components[i] Is TSynCustomHighLighter Then Begin
Idx := lbLanguage.Items.IndexOf(
(EditorDataModule.Components[i] As TSynCustomHighLighter).LanguageName);
If Idx >= 0 Then
AssignAttrs(EditorDataModule.Components[i] As TSynCustomHighLighter,
lbLanguage.Items.Objects[Idx] As TSynCustomHighLighter);
End;
Edit := frmJediEdit.CurrentEditor;
UpdateKeystrokesList(Edit);
edtCode.Keystrokes := Edit.Keystrokes;
// edtMRUCount.Value := frmJediEdit.MRUManager.Capacity;
chkAllowDocking.Checked := frmJediEdit.AllowDocking;
cbDropFiles.Checked := frmJediEdit.AllowDroping;
cboDateTimeFormat.Text := sDateTimeFormat;
edtUndoCount.Value := Edit.MaxUndo;
cboBackColor.ColorValue := Edit.Color;
cboFontName.FontName := Edit.Font.Name;
edtFontSize.Value := Edit.Font.Size;
cboFontColor.ColorValue := Edit.Font.Color;
cbAutoIndent.Checked := eoAutoIndent In Edit.Options;
cbDropFiles.Checked := eoDropFiles In Edit.Options;
cbHalfPageScroll.Checked := eoHalfPageScroll In Edit.Options;
cbScrollPastEol.Checked := eoScrollPastEol In Edit.Options;
cbTabsToSpaces.Checked := eoTabsToSpaces In Edit.Options;
cbSmartTabs.Checked := eoSmartTabs In Edit.Options;
cbGutterVisible.Checked := Edit.Gutter.Width > 0;
cbShowLineNumbers.Checked := Edit.Gutter.ShowLineNumbers;
cbxGutterSize.Text := IntToStr(Edit.Gutter.Width);
End;
Procedure TdlgOption.AssignOptions(Edit: TMySynEdit);
var
i: integer;
Begin
Edit.MaxUndo := edtUndoCount.AsInteger;
Edit.Color := cboBackColor.ColorValue;
Edit.Font.Name := cboFontName.FontName;
Edit.Font.Size := edtFontSize.AsInteger;
Edit.Font.Color := cboFontColor.ColorValue;
if not EditorDataModule.AutoComplete1.AddEditor(Edit) then ShowMessage('AutoComplete AddEditor Failer!');
Edit.Keystrokes := edtCode.Keystrokes;
with Edit.Keystrokes do begin
i := FindCommand(ecAutoCompletion);
if (i > -1) and (i < Count) then Items[i].ShortCut := scAutoCompletion;
end;
If cbAutoIndent.Checked Then
Edit.Options := Edit.Options + [eoAutoIndent]
Else
Edit.Options := Edit.Options - [eoAutoIndent];
If cbDragDropEditing.Checked Then
Edit.Options := Edit.Options + [eoDragDropEditing]
Else
Edit.Options := Edit.Options - [eoDragDropEditing];
If cbDropFiles.Checked Then
Edit.Options := Edit.Options + [eoDropFiles]
Else
Edit.Options := Edit.Options - [eoDropFiles];
If cbHalfPageScroll.Checked Then
Edit.Options := Edit.Options + [eoHalfPageScroll]
Else
Edit.Options := Edit.Options - [eoHalfPageScroll];
If cbScrollPastEol.Checked Then
Edit.Options := Edit.Options + [eoScrollPastEol]
Else
Edit.Options := Edit.Options - [eoScrollPastEol];
If cbTabsToSpaces.Checked Then Begin
Edit.Options := Edit.Options + [eoTabsToSpaces];
Edit.TabWidth := edtSpaces.AsInteger;
End Else
Edit.Options := Edit.Options - [eoTabsToSpaces];
If cbSmartTabs.Checked Then
Edit.Options := Edit.Options + [eoSmartTabs]
Else
Edit.Options := Edit.Options - [eoSmartTabs];
If Not cbGutterVisible.Checked Then
Edit.Gutter.Width := 0
Else Begin
Edit.Gutter.ShowLineNumbers := cbShowLineNumbers.Checked;
Edit.ShowCurrentLine := chkShowCurrentLine.Checked;
Edit.Gutter.Width := StrToInt(cbxGutterSize.Text);
End;
End;
Procedure TdlgOption.ApplyCurrentSettings;
Procedure AssignAttrs(FromHL, ToHL: TSynCustomHighLighter);
Var
I: Integer;
Begin
ToHL.DefaultFilter := FromHL.DefaultFilter;
For I := 0 To FromHL.AttrCount - 1 Do
ToHL.Attribute[I].Assign(FromHL.Attribute[I]);
End;
Var
I: Integer;
Idx: Integer;
Begin
TimeAMString := tran.TMsg(sTimeAMString);
TimePMString := tran.TMsg(sTimePMString);
//Week Names:
LongDayNames[1] := tran.TMsg(sMonday);
LongDayNames[2] := tran.TMsg(sTuesday);
LongDayNames[3] := tran.TMsg(sWednesday);
LongDayNames[4] := tran.TMsg(sThursday);
LongDayNames[5] := tran.TMsg(sFriday);
LongDayNames[6] := tran.TMsg(sSaturday);
LongDayNames[7] := tran.TMsg(sSunday);
sDateTimeFormat := cboDateTimeFormat.Text;
frmJediEdit.StatusBar.Panels[stDatePanel].Width :=
frmJediEdit.Canvas.TextWidth(FormatDateTime(sDateTimeFormat, Now)) + 8;
CanUndoAfterSave := chkUndoAfterSave.Checked;
BackupFile := chkBackupFile.Checked;
OverwriteBackup := chkOverwriteBackup.Checked;
KeepLastOpen := chkLastOpen.Checked;
// frmJediEdit.MRUManager.Capacity := edtMRUCount.AsInteger;
If chkShowCurrentLine.Checked Then
ShowSpecialLineColor := True
Else
ShowSpecialLineColor := False;
frmJediEdit.AllowDroping := cbDropFiles.Checked;
If edtCode.Modified Then Begin
UpdateCode(lvTemplate.ItemFocused);
End; //if
If TemplateModified Then Begin
UpdateTemplate(lbLanguage.Items[CurrentTemplateIndex], CurrentTemplate);
End; //if
If ToolsLstModified Then Begin
SaveToolsList;
End; //if
If LastLan <> -1 Then Begin
//update Default Filter
If (lbLanguage.Items.Objects[LastLan] As TSynCustomHighLighter).DefaultFilter <> edtFilter.Text Then
(lbLanguage.Items.Objects[LastLan] As TSynCustomHighLighter).DefaultFilter := edtFilter.Text;
End;
For i := 0 To EditorDataModule.ComponentCount - 1 Do
If EditorDataModule.Components[i] Is TSynCustomHighLighter Then Begin
Idx := lbLanguage.Items.IndexOf(
(EditorDataModule.Components[i] As TSynCustomHighLighter).LanguageName);
If Idx >= 0 Then
AssignAttrs(lbLanguage.Items.Objects[Idx] As TSynCustomHighLighter,
EditorDataModule.Components[i] As TSynCustomHighLighter);
End;
scAutoCompletion := hkCodeTemplate.Hotkey;
For I := 0 To frmJediEdit.EditorCount - 1 Do
AssignOptions(frmJediEdit.Editor[I]);
frmJediEdit.AllowDocking := chkAllowDocking.Checked;
End;
Procedure TdlgOption.BtnOKClick(Sender: TObject);
Begin
ApplyCurrentSettings;
End;
//Template
Procedure TdlgOption.cboLanguageChange(Sender: TObject);
Var
i, j: Integer;
ListItem: TListItem;
s: string;
sl: TStringList;
Begin
With cboLanguage Do If ItemIndex >= 0 Then Begin
If TemplateModified Then
UpdateTemplate(lbLanguage.Items[CurrentTemplateIndex], CurrentTemplate);
edtCode.highlighter := lbLanguage.Items.Objects[ItemIndex] As TSynCustomHighLighter;
CurrentTemplateIndex := ItemIndex;
CurrentTemplate := Items.Objects[ItemIndex] As TIniStrings;
lvTemplate.Items.Clear;
If Assigned(CurrentTemplate) Then With CurrentTemplate as TIniStrings Do if Count > 0 then Begin
sl := TStringList.Create;
try
ReadSections(sl);
for i := 0 to sl.Count -1 do
begin
s := sl[i];
ListItem := lvTemplate.Items.Add;
ReadWholeSection(s, ListItem.SubItems);
j := Pos('|', s);
if j > 0 then
begin
ListItem.Caption := Trim(Copy(s, 1, j-1));
ListItem.SubItems.Insert(0, Trim(Copy(s, j+1, Length(s))));
end
else begin ListItem.Caption := s; ListItem.SubItems.Insert(0, '');end;
end;
finally
sl.Free;
end;
End;
If lvTemplate.Items.Count > 0 Then lvTemplate.Items[0].Focused := True;
End; //if with
End;
Procedure TdlgOption.LoadTemplate(LanName: String; Const TemplateLst: TStringList);
Var
s: String;
// i: Integer;
Begin
s := GetTemplateFileName(LanName);
If FileExists(s) Then Begin
TemplateLst.LoadFromFile(s);
End; //if
End;
Procedure TdlgOption.SaveTemplate(LanName: String; Const TemplateLst: TStringList);
Var
s: String;
Begin
s := GetTemplateFileName(LanName);
If Not DirectoryExists(ExtractFilePath(s)) Then
ForceDirectories(ExtractFilePath(s));
TemplateLst.SaveToFile(s);
End;
Procedure TdlgOption.lvTemplateChange(Sender: TObject; Item: TListItem;
Change: TItemChange);
Var
i: integer;
Begin
If (Assigned(CurrentTemplate)) Then Begin
If Change = CtState Then Begin //Focus Change
edtCode.Lines.Clear;
for i := 1 to Item.SubItems.Count - 1 do
edtCode.Lines.Add(Item.SubItems[i]);
edtCode.Modified := False;
End
Else If Change = ctText Then Begin
If Not TemplateModified Then TemplateModified := True;
End;
End; //if
End;
Procedure TdlgOption.ClearTemplateLists;
Var
i: Integer;
Begin
With cboLanguage Do
For i := 0 To Items.Count - 1 Do Begin
If Assigned(Items.Objects[i]) Then (Items.Objects[i] As TIniStrings).Free;
End; //for
End;
Procedure TdlgOption.UpdateTemplate(LanName: String; Const TemplateLst: TStringList);
Var
I, J: Integer;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -