⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 optionsdialog.pas

📁 此软件支持多文档打开
💻 PAS
📖 第 1 页 / 共 4 页
字号:
      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 + -