📄 synunidesignerform.pas
字号:
Modified();
end;
(*###procedure TfmDesigner.AddingRangeLink(ParentNode: TTreeNode);
var
Node: TTreeNode;
RangeLink: TSynRangeLink;
//i: Integer;
begin
RangeLink := TSynRangeLink.Create(SynUniSyn.MainRules.Ranges[6]);
TSynRange(ParentNode.Data).AddRangeLink(RangeLink);
Node := TreeAddRangeLink(ParentNode, RangeLink);
with Node do begin
Expand(False);
Selected := True;
Tree.SetFocus;
EditText;
end;
{ Range.ClearAttributes();
for i := 0 to SynUniSyn.SchemesList.Count-1 do begin
TSynRange(ParentNode.Data).SetAttributesIndex(i);
Range.AddAttribute();
SetDefaultAttributes(Node);
end;
TSynRange(ParentNode.Data).SetAttributesIndex(SynUniSyn.SchemeIndex);}
SetControlAttributes(Node);
end;*)
//=== Adding Range ===========================================================
procedure TfmDesigner.DoAddRangeToRoot(Sender:TObject); //: Click on button
begin
AddingRange(Tree.Items[1]);
Modified();
end;
procedure TfmDesigner.DoAddRange(Sender: TObject); //: Click on button
begin
AddingRange(Tree.Selected);
Modified();
end;
procedure TfmDesigner.AddingRange(ParentNode: TTreeNode);
var Node: TTreeNode;
Range: TSynRange;
i: Integer;
begin
if ParentNode = nil then begin //Never happened ???
Tree.Items.Clear();
Node := Tree.Items.Add(nil, _Root);
SynUniSyn.MainRules.Name := _Root;
Node.Data := SynUniSyn.MainRules;
Node.ImageIndex := 0;
Node.SelectedIndex := 0;
Exit;
end
else begin
Range := TSynRange.Create();
Range.Name := _New;
TSynRange(ParentNode.Data).AddRange(Range);
Node := TreeAddRange(ParentNode, Range);
with Node do begin
Expand(False);
Selected := True;
Tree.SetFocus();
EditText();
end;
end;
// Range.ClearAttributes();
//###for i := 0 to SynUniSyn.SchemesList.Count-1 do begin
// TSynRange(ParentNode.Data).SetAttributesIndex(i);
// Range.AddAttribute();
SetDefaultAttributes(Node);
//###end;
// TSynRange(ParentNode.Data).SetAttributesIndex(SynUniSyn.SchemeIndex);
SetControlAttributes(Node);
end;
//=== Adding KeyList =========================================================
procedure TfmDesigner.DoAddKeywordToRoot(Sender:TObject); //: Click on button
begin
AddingKeyword(Tree.Items[1]);
Modified();
end;
procedure TfmDesigner.DoAddKeyword(Sender: TObject); //: Click on button
begin
AddingKeyWord(Tree.selected);
Modified();
end;
procedure TfmDesigner.AddingKeyWord(ParentNode: TTreeNode);
var Node: TTreeNode;
Keyword: TSynKeyList;
i: Integer;
begin
Keyword := TSynKeyList.Create();
Keyword.Name := _New;
Node := TreeAddKeyList(ParentNode, Keyword);
with Node do begin
Expand(False);
Selected := True;
Tree.SetFocus;
EditText;
end;
// Keyword.ClearAttributes();
//###for i := 0 to SynUniSyn.SchemesList.Count-1 do begin
// TSynRange(ParentNode.Data).SetAttributesIndex(i);
// Keyword.AddAttribute();
SetDefaultAttributes(Node);
//###end;
// TSynRange(ParentNode.Data).SetAttributesIndex(SynUniSyn.SchemeIndex);
TSynRange(ParentNode.Data).AddKeyList(Keyword);
SetControlAttributes(Node);
end;
//=== Adding Set =============================================================
procedure TfmDesigner.DoAddSetToRoot(Sender:TObject); //: Click on button
begin
AddingSet(Tree.Items[1]);
Modified();
end;
procedure TfmDesigner.DoAddSet(Sender: TObject); //: Click on button
begin
AddingSet(Tree.Selected);
Modified();
end;
procedure TfmDesigner.AddingSet(ParentNode: TTreeNode);
var
Node: TTreeNode;
SymbolSet: TSynSet;
i: Integer;
begin
SymbolSet := TSynSet.Create();
SymbolSet.Name := _New;
TSynRange(ParentNode.data).AddSet(SymbolSet);
Node := TreeAddSet(ParentNode, SymbolSet);
with Node do begin
Expand(False);
Selected := True;
Tree.SetFocus;
EditText;
end;
// SymbolSet.ClearAttributes();
//###for i := 0 to SynUniSyn.SchemesList.Count-1 do begin
// TSynRange(ParentNode.Data).SetAttributesIndex(i);
// SymbolSet.AddAttribute();
SetDefaultAttributes(Node);
//###end;
// TSynRange(ParentNode.Data).SetAttributesIndex(SynUniSyn.SchemeIndex);
SetControlAttributes(Node);
end;
//=== Adding Fold Region =====================================================
procedure TfmDesigner.DoAddFoldRegion(Sender: TObject); //: Click on button
begin
{$IFDEF CODEFOLDING}AddingFoldRegion(Tree.Selected);{$ENDIF}
Modified();
end;
{$IFDEF CODEFOLDING}
procedure TfmDesigner.AddingSkipRegion(ParentNode: TTreeNode);
var
SkipRegion : TSkipRegionItem;
Node: TTreeNode;
begin
SkipRegion := SynUniSyn.FoldRegions.SkipRegions.Add('', '', '', itString);
Node := Tree.Items.AddChild(CodeFoldingNode, 'SkipRegion');
SetNodeData(Node, SkipRegion);
with Node do begin
Expand(False);
Selected := True;
Tree.SetFocus;
end;
SetDefaultAttributes(Node);
SetControlAttributes(Node);
end;
procedure TfmDesigner.AddingFoldRegion(ParentNode: TTreeNode);
var
Node: TTreeNode;
FoldRegion: TFoldRegionItem;
Regions: TFoldRegions;
i: Integer;
begin
if ParentNode.Data = nil then
Regions := SynUniSyn.FoldRegions
else
Regions := TFoldRegionItem(ParentNode.Data).SubFoldRegions;
FoldRegion := Regions.Add(rtChar, False, False, False, '', '', ParentNode.Data);
FoldRegion.RegExpUseOpen := False;
FoldRegion.RegExpUseClose := False;
FoldRegion.Name := _New;
Node := TreeAddFoldRegion(ParentNode, FoldRegion);
with Node do begin
Expand(False);
Selected := True;
Tree.SetFocus;
EditText;
end;
// Range.ClearAttributes();
//###for i := 0 to SynUniSyn.SchemesList.Count-1 do begin
// TSynRange(ParentNode.Data).SetAttributesIndex(i);
// Range.AddAttribute();
SetDefaultAttributes(Node);
//###end;
// TSynRange(ParentNode.Data).SetAttributesIndex(SynUniSyn.SchemeIndex);
SetControlAttributes(Node);
end;
{$ENDIF}
//=== Delete and Rename Rules ================================================
procedure TfmDesigner.DoDeleteNode(Sender: TObject);
begin
if not Tree.IsEditing then
if not ShowDialog or (Application.MessageBox(PChar(Format(_DeleteNode,[Tree.Selected.Text])), PChar(_Confirm), MB_YESNOCANCEL+MB_ICONQUESTION) = ID_YES) then begin
DeleteNode(Tree.Selected);
TotalUpdate();
Modified();
end;
ShowDialog := True;
end;
procedure TfmDesigner.DeleteNode(Node: TTreeNode; OnlyChilds: Boolean);
var
{$IFDEF CODEFOLDING}Regions: TFoldRegions;{$ENDIF}
i: Integer;
begin
//Node.DeleteChildren; - 觐沅?龛螯 桉镳噔栩?
while Node.Count > 0 do
DeleteNode(Node[0]);
if (Node.Data <> SynUniSyn.MainRules) and (Node.Data <> nil) and not OnlyChilds then begin
if TObject(Node.Data) is TSynRange then
TSynRange(Node.Parent.Data).DeleteRange(TSynRange(Node.Data))
else if TObject(Node.Data) is TSynKeyList then
TSynRange(Node.Parent.Data).DeleteKeyList(TSynKeyList(Node.Data))
else if TObject(Node.Data) is TSynSet then
TSynRange(Node.Parent.Data).DeleteSet(TSynSet(Node.Data))
{$IFDEF CODEFOLDING}
else if TObject(Node.Data) is TSkipRegionItem then
TObject(Node.Data).Free
else if TObject(Node.Data) is TFoldRegionItem then
begin
if Node.Parent.Data = nil then
Regions := SynUniSyn.FoldRegions
else
Regions := TFoldRegionItem(Node.Parent.Data).SubFoldRegions;
for i := 0 to Regions.Count-1 do
if Regions[i] = TFoldRegionItem(Node.Data) then
begin
//ShowMessage(TFoldRegionItem(Node.Data).Name);
Regions.Delete(i);
end
end{$ENDIF};
Node.Delete;
end;
end;
procedure TfmDesigner.DoRenameNode(Sender: TObject);
begin
Tree.Selected.EditText;
end;
//=== Usefuk functions... ====================================================
function TfmDesigner.GetNodeType(Node: TTreeNode): TNodeType;
begin
Result := ntNone;
if Node <> nil then
if (TObject(Node.Data) is TSynRange) and (Node.Level = 0) then Result := ntRoot else
//###if (TObject(Node.Data) is TSynRangeLink) then Result := ntRangeLink else
if TObject(Node.Data) is TSynInfo then Result := ntInfo else
{$IFDEF CUSTOMDATA}
if TObject(Node.Data) is TStringList then Result := ntCustomData else
{$ENDIF}
if TObject(Node.Data) is TSynRange then Result := ntRange else
if TObject(Node.Data) is TSynKeyList then Result := ntKeywords else
if TObject(Node.Data) is TSynSet then Result := ntSet else
{$IFDEF CODEFOLDING}
if TObject(Node.Data) is TSkipRegionItem then Result := ntSkipRegion else
if TObject(Node.Data) is TFoldRegionItem then Result := ntFoldRegion else
Result := ntFoldRoot;
{$ENDIF}
end;
procedure TfmDesigner.TotalUpdate();
var
SelStart, SelEnd: Integer;
begin
SelStart := SampleMemo.SelStart;
SelEnd := SampleMemo.SelEnd;
SynUniSyn.Reset;
SynUniSyn.MainRules.Reset;
SynUniSyn.ResetRange;
SynUniSyn.Prepare;
SampleMemo.Highlighter := nil;
SampleMemo.Highlighter := SynUniSyn;
with SynUniSyn.EditorProperties do
begin
{$IFNDEF SYNEDIT11}SampleMemo.ActiveLineColor := ActiveLineColor;{$ENDIF}
SampleMemo.SelectedColor.Foreground := SelectedForeground;
SampleMemo.SelectedColor.Background := SelectedBackground;
end;
{$IFDEF CODEFOLDING}SampleMemo.InitCodeFolding();{$ENDIF}
SampleMemo.Refresh;
SampleMemo.SelStart := SelStart;
SampleMemo.SelEnd := SelEnd;
end;
procedure TfmDesigner.Modified(State: Boolean = True);
begin
if State then begin
btApply.Enabled := True;
StatusBar.Panels.Items[0].Text := _Modified;
end else begin
btApply.Enabled := False;
StatusBar.Panels.Items[0].Text := '';
end;
end;
//=== KeyList Tools ==========================================================
procedure TfmDesigner.btSort_oldClick(Sender: TObject);
var i: Integer;
begin
With TStringList.Create do
try
Sorted := True;
Duplicates := dupIgnore;
for i := 0 to Memo.Lines.Count-1 do
if Trim(Memo.Lines[i]) <> '' then
Add(Trim(Memo.Lines[i]));
Sort;
Memo.Text := Trim(Text);
finally
Free;
end;
end;
procedure TfmDesigner.btLowerCase_oldClick(Sender: TObject);
begin
Memo.text := LowerCase(Memo.Text);
end;
procedure TfmDesigner.btSpacesToEol_oldClick(Sender: TObject);
begin
Memo.text := StringReplace(Memo.Text, ' ', #13#10, [rfReplaceAll]);
end;
//=== Finish buttons =========================================================
procedure TfmDesigner.btOkClick(Sender: TObject);
begin
if Tree.IsEditing then
Tree.Selected.EndEdit(False)
else
if btApply.Enabled then begin
btApplyClick(Sender);
ModalResult := mrOk;
end else
if (btApply.Tag = 1) then
ModalResult := mrOk
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -