mirror of https://gitlab.com/basile.b/dexed.git
r22
This commit is contained in:
parent
3b2b8362fc
commit
305d64f6d9
|
@ -114,22 +114,25 @@
|
||||||
<FormatVersion Value="1"/>
|
<FormatVersion Value="1"/>
|
||||||
</local>
|
</local>
|
||||||
</RunParams>
|
</RunParams>
|
||||||
<RequiredPackages Count="5">
|
<RequiredPackages Count="6">
|
||||||
<Item1>
|
<Item1>
|
||||||
<PackageName Value="FCL"/>
|
<PackageName Value="AnchorDocking"/>
|
||||||
</Item1>
|
</Item1>
|
||||||
<Item2>
|
<Item2>
|
||||||
<PackageName Value="RunTimeTypeInfoControls"/>
|
<PackageName Value="FCL"/>
|
||||||
</Item2>
|
</Item2>
|
||||||
<Item3>
|
<Item3>
|
||||||
<PackageName Value="SynEdit"/>
|
<PackageName Value="RunTimeTypeInfoControls"/>
|
||||||
</Item3>
|
</Item3>
|
||||||
<Item4>
|
<Item4>
|
||||||
<PackageName Value="LazControls"/>
|
<PackageName Value="SynEdit"/>
|
||||||
</Item4>
|
</Item4>
|
||||||
<Item5>
|
<Item5>
|
||||||
<PackageName Value="LCL"/>
|
<PackageName Value="LazControls"/>
|
||||||
</Item5>
|
</Item5>
|
||||||
|
<Item6>
|
||||||
|
<PackageName Value="LCL"/>
|
||||||
|
</Item6>
|
||||||
</RequiredPackages>
|
</RequiredPackages>
|
||||||
<Units Count="17">
|
<Units Count="17">
|
||||||
<Unit0>
|
<Unit0>
|
||||||
|
|
|
@ -6,17 +6,18 @@ uses
|
||||||
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
||||||
cthreads,
|
cthreads,
|
||||||
{$ENDIF}{$ENDIF}
|
{$ENDIF}{$ENDIF}
|
||||||
Interfaces, Forms, lazcontrols, runtimetypeinfocontrols, ce_widget,
|
Interfaces, Forms, lazcontrols, runtimetypeinfocontrols, anchordockpkg,
|
||||||
ce_dmdwrap, ce_common, ce_synmemo, ce_main, ce_messages, ce_editor,
|
AnchorDocking, AnchorDockStorage, AnchorDockOptionsDlg,
|
||||||
ce_projinspect, ce_projconf, jsonparser, ce_project,
|
ce_widget, ce_dmdwrap, ce_common, ce_synmemo, ce_main, ce_messages, ce_editor,
|
||||||
ce_widgettypes, ce_staticexplorer, ce_search, ce_dlang, ce_dlangutils;
|
ce_projinspect, ce_projconf, jsonparser, ce_project, ce_widgettypes,
|
||||||
|
ce_staticexplorer, ce_search, ce_dlang, ce_dlangutils;
|
||||||
|
|
||||||
{$R *.res}
|
{$R *.res}
|
||||||
|
|
||||||
begin
|
begin
|
||||||
RequireDerivedFormResource := True;
|
RequireDerivedFormResource := True;
|
||||||
Application.Initialize;
|
Application.Initialize;
|
||||||
Application.CreateForm(TCEMainForm, mainForm);
|
Application.CreateForm(TCEMainForm, CEMainForm);
|
||||||
Application.Run;
|
Application.Run;
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,11 @@ unit ce_common;
|
||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, ActnList, dialogs, forms, process;
|
Classes, SysUtils,
|
||||||
|
{$IFDEF WINDOWS}
|
||||||
|
Windows,
|
||||||
|
{$ENDIF}
|
||||||
|
ActnList, dialogs, forms, process;
|
||||||
|
|
||||||
const
|
const
|
||||||
|
|
||||||
|
@ -40,6 +44,8 @@ type
|
||||||
TMRUFileList = class(TMRUList)
|
TMRUFileList = class(TMRUList)
|
||||||
protected
|
protected
|
||||||
function checkItem(const S: string): boolean; override;
|
function checkItem(const S: string): boolean; override;
|
||||||
|
public
|
||||||
|
procedure assign(src: TPersistent); override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
(**
|
(**
|
||||||
|
@ -107,6 +113,11 @@ type
|
||||||
*)
|
*)
|
||||||
function shortenPath(const aPath: string; charThresh: Word = 80): string;
|
function shortenPath(const aPath: string; charThresh: Word = 80): string;
|
||||||
|
|
||||||
|
(**
|
||||||
|
* Returns the folder Coedit documents and settings.
|
||||||
|
*)
|
||||||
|
function getDocPath: string;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
procedure TProcessEx.Assign(aValue: TPersistent);
|
procedure TProcessEx.Assign(aValue: TPersistent);
|
||||||
|
@ -183,6 +194,15 @@ begin
|
||||||
clearOutOfRange;
|
clearOutOfRange;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TMRUFileList.assign(src: TPersistent);
|
||||||
|
var
|
||||||
|
i: NativeInt;
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
for i := Count-1 downto 0 do
|
||||||
|
if not fileExists(Strings[i]) then Delete(i);
|
||||||
|
end;
|
||||||
|
|
||||||
function TMRUFileList.checkItem(const S: string): boolean;
|
function TMRUFileList.checkItem(const S: string): boolean;
|
||||||
begin
|
begin
|
||||||
exit( inherited checkItem(S) and fileExists(S));
|
exit( inherited checkItem(S) and fileExists(S));
|
||||||
|
@ -390,4 +410,24 @@ begin
|
||||||
exit( format('%s%s...%s',[drv,directorySeparator,pth1]) );
|
exit( format('%s%s...%s',[drv,directorySeparator,pth1]) );
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function getDocPath: string;
|
||||||
|
{$IFDEF WINDOWS}
|
||||||
|
var
|
||||||
|
PIDL : PItemIDList;
|
||||||
|
Folder : array[0..MAX_PATH] of Char;
|
||||||
|
const
|
||||||
|
CSIDL_APPDATA = $001A;
|
||||||
|
{$ENDIF}
|
||||||
|
begin
|
||||||
|
{$IFDEF WINDOWS}
|
||||||
|
SHGetSpecialFolderLocation(0, CSIDL_APPDATA, PIDL);
|
||||||
|
SHGetPathFromIDList(PIDL, Folder);
|
||||||
|
result:=Folder;
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF UNIX}
|
||||||
|
result := ExpandFileName('~/'));
|
||||||
|
{$ENDIF}
|
||||||
|
result += directorySeparator + 'Coedit' + directorySeparator;
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
|
@ -8,8 +8,8 @@ uses
|
||||||
Classes, SysUtils, FileUtil, ExtendedNotebook, Forms, Controls, lcltype,
|
Classes, SysUtils, FileUtil, ExtendedNotebook, Forms, Controls, lcltype,
|
||||||
Graphics, SynEditKeyCmds, ComCtrls, SynEditHighlighter, ExtCtrls, Menus,
|
Graphics, SynEditKeyCmds, ComCtrls, SynEditHighlighter, ExtCtrls, Menus,
|
||||||
SynEditHighlighterFoldBase, SynMacroRecorder, SynPluginSyncroEdit, SynEdit,
|
SynEditHighlighterFoldBase, SynMacroRecorder, SynPluginSyncroEdit, SynEdit,
|
||||||
SynHighlighterLFM, ce_widget, ce_d2syn, ce_synmemo, ce_common, AnchorDocking,
|
SynHighlighterLFM, AnchorDocking, ce_widget, ce_d2syn, ce_synmemo, ce_dlang,
|
||||||
ce_dlang, ce_project;
|
ce_project;
|
||||||
|
|
||||||
type
|
type
|
||||||
{ TCEEditorWidget }
|
{ TCEEditorWidget }
|
||||||
|
@ -67,7 +67,6 @@ var
|
||||||
bmp: TBitmap;
|
bmp: TBitmap;
|
||||||
begin
|
begin
|
||||||
inherited;
|
inherited;
|
||||||
fID := 'ID_EDIT';
|
|
||||||
//
|
//
|
||||||
tokLst := TLexTokenList.Create;
|
tokLst := TLexTokenList.Create;
|
||||||
errLst := TLexErrorList.Create;
|
errLst := TLexErrorList.Create;
|
||||||
|
@ -80,7 +79,6 @@ begin
|
||||||
finally
|
finally
|
||||||
bmp.Free;
|
bmp.Free;
|
||||||
end;
|
end;
|
||||||
DockMaster.GetAnchorSite(Self).Name := ID;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TCEEditorWidget.destroy;
|
destructor TCEEditorWidget.destroy;
|
||||||
|
@ -122,7 +120,7 @@ begin
|
||||||
fSyncEdit.Editor := curr;
|
fSyncEdit.Editor := curr;
|
||||||
//
|
//
|
||||||
if pageControl.ActivePageIndex <> -1 then
|
if pageControl.ActivePageIndex <> -1 then
|
||||||
mainForm.docFocusedNotify(Self, pageControl.ActivePageIndex);
|
CEMainForm.docFocusedNotify(Self, pageControl.ActivePageIndex);
|
||||||
//
|
//
|
||||||
if (pageControl.ActivePage.Caption = '') then
|
if (pageControl.ActivePage.Caption = '') then
|
||||||
begin
|
begin
|
||||||
|
@ -139,8 +137,8 @@ end;
|
||||||
|
|
||||||
procedure TCEEditorWidget.PageControlCloseTabClicked(Sender: TObject);
|
procedure TCEEditorWidget.PageControlCloseTabClicked(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
// closeBtn not implemented
|
// closeBtn not implemented (Win.)
|
||||||
mainForm.actFileClose.Execute;
|
CEMainForm.actFileClose.Execute;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEEditorWidget.addEditor;
|
procedure TCEEditorWidget.addEditor;
|
||||||
|
@ -158,9 +156,7 @@ begin
|
||||||
memo.OnKeyUp := @memoKeyDown;
|
memo.OnKeyUp := @memoKeyDown;
|
||||||
memo.OnKeyPress := @memoKeyPress;
|
memo.OnKeyPress := @memoKeyPress;
|
||||||
memo.OnMouseDown := @memoMouseDown;
|
memo.OnMouseDown := @memoMouseDown;
|
||||||
|
memo.OnChange := @memoChange;
|
||||||
// http://forum.lazarus.freepascal.org/index.php/topic,25213.0.html
|
|
||||||
//memo.OnChange := @memoChange;
|
|
||||||
|
|
||||||
memo.OnMouseMove := @memoMouseMove;
|
memo.OnMouseMove := @memoMouseMove;
|
||||||
//
|
//
|
||||||
|
@ -172,7 +168,7 @@ end;
|
||||||
|
|
||||||
procedure TCEEditorWidget.removeEditor(const aIndex: NativeInt);
|
procedure TCEEditorWidget.removeEditor(const aIndex: NativeInt);
|
||||||
begin
|
begin
|
||||||
mainForm.MessageWidget.ClearMessages(msEditor);
|
CEMainForm.MessageWidget.ClearMessages(msEditor);
|
||||||
editor[aIndex].OnChange:= nil;
|
editor[aIndex].OnChange:= nil;
|
||||||
pageControl.Pages[aIndex].Free;
|
pageControl.Pages[aIndex].Free;
|
||||||
end;
|
end;
|
||||||
|
@ -249,15 +245,15 @@ begin
|
||||||
if not fKeyChanged then exit;
|
if not fKeyChanged then exit;
|
||||||
//
|
//
|
||||||
fKeyChanged := false;
|
fKeyChanged := false;
|
||||||
mainForm.docChangeNotify(Self, editorIndex);
|
CEMainForm.docChangeNotify(Self, editorIndex);
|
||||||
if ed.Lines.Count = 0 then exit;
|
if ed.Lines.Count = 0 then exit;
|
||||||
//
|
//
|
||||||
mainForm.MessageWidget.ClearMessages(msEditor);
|
CEMainForm.MessageWidget.ClearMessages(msEditor);
|
||||||
lex( ed.Lines.Text, tokLst );
|
lex(ed.Lines.Text, tokLst);
|
||||||
|
|
||||||
checkSyntacticErrors( tokLst, errLst);
|
checkSyntacticErrors(tokLst, errLst);
|
||||||
for err in errLst do
|
for err in errLst do
|
||||||
mainForm.MessageWidget.addMessage(format( '%s (@line:%4.d @char:%.4d)',
|
CEMainForm.MessageWidget.addMessage(format( '%s (@line:%4.d @char:%.4d)',
|
||||||
[err.msg, err.position.y, err.position.x]), msEditor);
|
[err.msg, err.position.y, err.position.x]), msEditor);
|
||||||
|
|
||||||
md := '';
|
md := '';
|
||||||
|
@ -266,7 +262,7 @@ begin
|
||||||
if md = '' then md := extractFileName(ed.fileName);
|
if md = '' then md := extractFileName(ed.fileName);
|
||||||
pageControl.ActivePage.Caption := md;
|
pageControl.ActivePage.Caption := md;
|
||||||
|
|
||||||
mainForm.MessageWidget.scrollToBack;
|
CEMainForm.MessageWidget.scrollToBack;
|
||||||
tokLst.Clear;
|
tokLst.Clear;
|
||||||
errLst.Clear;
|
errLst.Clear;
|
||||||
end;
|
end;
|
||||||
|
|
148
src/ce_main.lfm
148
src/ce_main.lfm
|
@ -1,16 +1,14 @@
|
||||||
object CEMainForm: TCEMainForm
|
object CEMainForm: TCEMainForm
|
||||||
Left = 1435
|
Left = 1071
|
||||||
Height = 53
|
Height = 49
|
||||||
Top = 140
|
Top = 187
|
||||||
Width = 745
|
Width = 745
|
||||||
AllowDropFiles = True
|
AllowDropFiles = True
|
||||||
Caption = 'Coedit'
|
Caption = 'Coedit'
|
||||||
ChildSizing.Layout = cclTopToBottomThenLeftToRight
|
ChildSizing.Layout = cclLeftToRightThenTopToBottom
|
||||||
DockSite = True
|
|
||||||
Menu = mainMenu
|
Menu = mainMenu
|
||||||
OnCloseQuery = FormCloseQuery
|
OnCloseQuery = FormCloseQuery
|
||||||
OnDropFiles = FormDropFiles
|
OnDropFiles = FormDropFiles
|
||||||
Position = poMainFormCenter
|
|
||||||
ShowHint = True
|
ShowHint = True
|
||||||
LCLVersion = '1.2.4.0'
|
LCLVersion = '1.2.4.0'
|
||||||
object mainMenu: TMainMenu
|
object mainMenu: TMainMenu
|
||||||
|
@ -824,9 +822,81 @@ object CEMainForm: TCEMainForm
|
||||||
end
|
end
|
||||||
object MenuItem57: TMenuItem
|
object MenuItem57: TMenuItem
|
||||||
Action = actEdFind
|
Action = actEdFind
|
||||||
|
Bitmap.Data = {
|
||||||
|
36040000424D3604000000000000360000002800000010000000100000000100
|
||||||
|
2000000000000004000064000000640000000000000000000000000000000000
|
||||||
|
0033000000330000003300000033000000330000000000000000000000000000
|
||||||
|
0000000000330000003300000033000000330000003300000000716F6DC07674
|
||||||
|
72FF706D6CFF6D6A69FF696765FF666362FF5A5756C0605D5C007E7C7A00716F
|
||||||
|
6DC0767472FF706D6CFF6D6A69FF696765FF666362FF5A5756C07A7876FF817E
|
||||||
|
7DFF9C9996FF898583FF716F6CFF595756FF605D5CFF605D5C007F7D7B007A78
|
||||||
|
76FF817E7DFF9C9996FF898583FF716F6CFF595756FF615E5DFF777573FFCFCF
|
||||||
|
CFFFD9D7D6FFD0CFCEFFC8C8C7FFC3C1C1FF5E5A59FF5F5C5B007E7C7A007775
|
||||||
|
73FFD0CFCFFFD9D7D6FFD0CFCEFFC8C8C7FFC3C1C1FF5E5B5AFF767472FFB3B1
|
||||||
|
AFFFCAC9C7FFB0AEADFF91908EFF757472FF5E5A59FF00000033000000337775
|
||||||
|
73FFB3B1AFFFCAC9C7FFB0AEADFF91908EFF757572FF5F5C5BFF767472FFB3B1
|
||||||
|
AFFFCAC9C7FFB1AEAEFF939290FF777674FF5E5A59FF7A7876FF646260FF7775
|
||||||
|
73FFB3B1AFFFCAC9C7FFB1AEAEFF939290FF777674FF605D5CFF767472FFB3B0
|
||||||
|
AEFFCAC9C7FFB0ADADFF91908EFF757472FF5B5857FF767472FF615F5DFF7674
|
||||||
|
72FFB3B1AFFFCAC9C7FFB0ADADFF91908EFF757573FF5F5C5BFF777472FFDEDD
|
||||||
|
DDFFEBEBE9FFDBDAD9FFCAC9C8FFBBBAB9FF575453FFD6D5D3FF8C8B89FF7573
|
||||||
|
71FFDEDDDCFFEBEBE9FFDBDAD9FFCAC9C8FFBCBCBBFF5E5B5AFF7A7876FF6F6D
|
||||||
|
6BFF666261FF605D5CFF5E5C5AFF5E5A5AFF4946469BD3D2D0FF8A8987FF6261
|
||||||
|
5F9B6C6A68FF646160FF625F5EFF615F5DFF615E5DFF615E5DA87B7977007774
|
||||||
|
73FFBCBAB8FFCDCBCAFFA5A3A2FF7E7C7BFF595655FFD6D5D3FF8C8C89FF7673
|
||||||
|
72FFBCBAB7FFCCCAC9FFA4A2A1FF7E7C7BFF5F5C5BFF625F5E007B7877007774
|
||||||
|
73FFB9B7B5FFC9C7C6FFA2A09FFF7D7B7AFF5C5858FF777472FF615F5DFF7774
|
||||||
|
73FFB9B8B5FFC9C7C6FFA2A09FFF7E7C7BFF605D5CFF63605F007C7978007875
|
||||||
|
74FFBDBBB9FFCECCCBFFA5A3A2FF7E7C7BFF5E5B5AFF7B7977FF646260FF7976
|
||||||
|
75FFBCBBB8FFCECCCBFFA6A4A3FF807E7DFF605D5CFF63605F007B7977007978
|
||||||
|
75AE716E6DFF696665FF64605FFF625E5DFF545251AA7B7A7700656361006A69
|
||||||
|
67AA6F6C6BFF696665FF676463FF656261FF63605FAE646160007B7977007B79
|
||||||
|
770000000033787574FFCBCAC7FF9B9A99FF625E5DFF625F5E007D7A79007875
|
||||||
|
74FFCAC8C6FF989796FF605D5CFF0000003364616000646160007B7977007B79
|
||||||
|
77007A7976FF908D8CFF908E8CFF656461FF615E5DFF615E5D007D7B79007977
|
||||||
|
75FF8E8B8AFF918F8DFF686664FF63605FFF64616000646160007B7977007B79
|
||||||
|
77007B7977FF73716FFF6D6B69FF696665FF625F5EFF615E5D007E7C7A007B79
|
||||||
|
77FF73716FFF6D6B69FF696665FF63605FFF6461600064616000
|
||||||
|
}
|
||||||
end
|
end
|
||||||
object MenuItem58: TMenuItem
|
object MenuItem58: TMenuItem
|
||||||
Action = actEdFindNext
|
Action = actEdFindNext
|
||||||
|
Bitmap.Data = {
|
||||||
|
36040000424D3604000000000000360000002800000010000000100000000100
|
||||||
|
2000000000000004000064000000640000000000000000000000000000000000
|
||||||
|
0033000000330000003300000033000000330000000000000000000000000000
|
||||||
|
0000000000330000003300000033000000330000003300000000716F6DC07674
|
||||||
|
72FF706D6CFF6D6A69FF696765FF666362FF5A5756C0605D5C007E7C7A00716F
|
||||||
|
6DC0767472FF706D6CFF6D6A69FF696765FF666362FF5A5756C07A7876FF817E
|
||||||
|
7DFF9C9996FF898583FF716F6CFF595756FF605D5CFF605D5C007F7D7B007A78
|
||||||
|
76FF817E7DFF9C9996FF898583FF716F6CFF595756FF615E5DFF777573FFCFCF
|
||||||
|
CFFFD9D7D6FFD0CFCEFFC8C8C7FFC3C1C1FF5E5A59FF5F5C5B007E7C7A007775
|
||||||
|
73FFD0CFCFFFD9D7D6FFD0CFCEFFC8C8C7FFC3C1C1FF5E5B5AFF767472FFB3B1
|
||||||
|
AFFFCAC9C7FFB0AEADFF91908EFF757472FF5E5A59FF00000033000000337775
|
||||||
|
73FFB3B1AFFFCAC9C7FFB0AEADFF91908EFF757572FF5F5C5BFF767472FFB3B1
|
||||||
|
AFFFCAC9C7FFB1AEAEFF939290FF777674FF5E5A59FF7A7876FF646260FF7775
|
||||||
|
73FFB3B1AFFFCAC9C7FFB1AEAEFF939290FF777674FF605D5CFF767472FFB3B0
|
||||||
|
AEFFCAC9C7FFB0ADADFF91908EFF757472FF5B5857FF767472FF615F5DFF7674
|
||||||
|
72FFB3B1AFFFCAC9C7FFB0ADADFF91908EFF757573FF5F5C5BFF777472FFDEDD
|
||||||
|
DDFFEBEBE9FFDBDAD9FFCAC9C8FFBBBAB9FF575453FFD6D5D3FF8C8B89FF7573
|
||||||
|
71FFDEDDDCFFEBEBE9FFDBDAD9FFCAC9C8FFBCBCBBFF5E5B5AFF7A7876FF6F6D
|
||||||
|
6BFF666261FF605D5CFF5E5C5AFF5E5A5AFF4946469BD3D2D0FF8A8987FF6261
|
||||||
|
5F9B6C6A68FF646160FF625F5EFF615F5DFF615E5DFF615E5DA87B7977007774
|
||||||
|
73FFBCBAB8FFCDCBCAFFA5A3A2FF7E7C7BFF595655FFD6D5D3FF8C8C89FF7673
|
||||||
|
72FFBCBAB7FFCCCAC9FFA4A2A1FF7E7C7BFF5F5C5BFF625F5E007B7877007774
|
||||||
|
73FFB9B7B5FFC9C7C6FFA2A09FFF7D7B7AFF5C5858FF777472FF615F5DFF7774
|
||||||
|
73FFB9B8B5FFC9C7C6FFA2A09FFF7E7C7BFF605D5CFF63605F007C7978007875
|
||||||
|
74FFBDBBB9FFCECCCBFFA5A3A2FF7E7C7BFF5E5B5AFF7B7977FF646260FF7976
|
||||||
|
75FFBCBBB8FFCECCCBFFA6A4A3FF807E7DFF605D5CFF63605F007B7977007978
|
||||||
|
75AE716E6DFF696665FF64605FFF625E5DFF545251AA7B7A7700656361006A69
|
||||||
|
67AA6F6C6BFF696665FF676463FF656261FF63605FAE646160007B7977007B79
|
||||||
|
770000000033787574FFCBCAC7FF9B9A99FF625E5DFF625F5E007D7A79007875
|
||||||
|
74FFCAC8C6FF989796FF605D5CFF0000003364616000646160007B7977007B79
|
||||||
|
77007A7976FF908D8CFF908E8CFF656461FF615E5DFF615E5D007D7B79007977
|
||||||
|
75FF8E8B8AFF918F8DFF686664FF63605FFF64616000646160007B7977007B79
|
||||||
|
77007B7977FF73716FFF6D6B69FF696665FF625F5EFF615E5D007E7C7A007B79
|
||||||
|
77FF73716FFF6D6B69FF696665FF63605FFF6461600064616000
|
||||||
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
object MenuItem14: TMenuItem
|
object MenuItem14: TMenuItem
|
||||||
|
@ -2006,39 +2076,39 @@ object CEMainForm: TCEMainForm
|
||||||
0033000000330000003300000033000000330000003300000033000000330000
|
0033000000330000003300000033000000330000003300000033000000330000
|
||||||
00330000002C0000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
00330000002C0000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
FF00FFFFFF00FFFFFF00FFFFFF00B782187CB78114FFB57E0FFFB57C0BFFB57C
|
||||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
09FFB57C09FFB57C09FFB57C09FFB57C09FFB57C09FFB57C09FFB57C09FFB57C
|
||||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
0BFFB57E0FFFB78114FFB782187CB78115FFFFECCDFFFCE7C3FFFFFFFFFFFFFF
|
||||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B9851BB0B781
|
FFFFFCE7C3FFFFECCDFFB78115FFB68012FFFDECD1FFDA8600FFFFFFFFFFF1E5
|
||||||
14FFB57E0FFFB57D0CFFB57C0AFFB57C0AFFB57C0AFFB57D0CFFB57E0FFFB781
|
D8FFF2E5D8FFF2E5D7FFF0E3D6FFEFE2D5FFF1E4D7FFF1E4D6FFEFE3D6FFFFFF
|
||||||
14FFB9851BB0FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B78114FFFFEC
|
FFFFDA8600FFFDECD1FFB68012FFB68012FFFEE9C6FF714100FFFFFFFFFF7979
|
||||||
CEFFFCE6C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE6C4FFFFEC
|
7AFF7A7A7AFFA2A1A1FF9F9F9FFFF6ECDEFF777777FFA1A1A1FF9E9FA0FFFFFF
|
||||||
CEFFB78114FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B67F12FFFCEA
|
FFFF704100FFFEE9C6FFB68012FFB68113FFFCE3BCFF9B6104FFFDFCF9FFFDF5
|
||||||
D1FFD88700FFF1F1EEFFB2AFAAFFB4B0A9FFB2AFAAFFF1F1EEFFD88700FFFCEA
|
E8FFFEF4E7FFFBF2E5FFFCF2E5FFFBF2E5FFFBF2E5FFFAF1E3FFF9F1E5FFFCFA
|
||||||
D1FFB67F12FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B68012FFF8E3
|
F7FF9A6104FFFCE3BCFFB68113FFB68014FFF8DCB0FFE0981CFFFBFBF8FF7978
|
||||||
BFFFDD9112FFEFEDE9FFF2EBE0FFF4EBDFFFF2EBE0FFEFEDE9FFDD9112FFF8E3
|
7BFFA2A0A2FFFCF6EAFF797879FFA3A1A3FFA09FA1FFFAF4E9FF9D9DA0FFF9F9
|
||||||
BFFFB68012FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B68014FFF7DB
|
F6FFE0981CFFF8DCB0FFB68014FFB68014FFF6D8A7FFE09C27FFFBFFFFFFFCFB
|
||||||
B0FFE09925FFEEE9E8FFB1AAA4FFB2AAA2FFB1AAA4FFEEE9E8FFE09925FFF7DB
|
F3FFFCF9EFFFFBF8EEFFFCFAF0FFFCFAF0FFFBF9EEFFF9F8EDFFFAF9F1FFFAFE
|
||||||
B0FFB68014FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B68114FFF4D5
|
FEFFE09B27FFF6D8A7FFB68014FFB68114FFF4D4A0FFE1A136FFF2DEB7FFFCFF
|
||||||
A2FFE2A237FFE8CCA4FFECE4E0FFEDE3DDFFECE4E0FFE8CCA4FFE2A237FFF4D5
|
FFFFFBFFFDFFFBFFFCFFFBFFFDFFFBFFFDFFFBFFFDFFFBFFFDFFFBFFFFFFF2DE
|
||||||
A2FFB68114FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B68115FFF3D1
|
B7FFE1A136FFF4D4A0FFB68114FFB68115FFF3D09AFFE5A845FFE3A640FFE2A1
|
||||||
99FFE5AB47FFE5A840FFE5A538FFE4A435FFE4A538FFE4A840FFE5AA47FFF3D1
|
36FFE29E2FFFE19D2DFFE19D2CFFE19D2CFFE19D2DFFE29E2FFFE2A136FFE3A6
|
||||||
99FFB68115FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B68115FFF3CD
|
40FFE5A845FFF3D09AFFB68115FFB68115FFF3CE94FFE6AE51FFE5AB4BFFE6C9
|
||||||
90FFE7B052FFEACFABFFFFFFFFFFFCFDFFFFFBFDFFFFE7CDA9FFE7AF52FFF3CD
|
A4FFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFDFFFFFFFEFFFFFFE6C9A4FFE5AC
|
||||||
90FFB68115FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B68116FFF3CB
|
4BFFE6AE51FFF3CE94FFB68115FFB68116FFF3CC8EFFE8B25AFFE7AE51FFFCFF
|
||||||
8AFFECB760FFF2EDECFF7F7977FFF1E8DFFFEDE5DEFFEDE8E8FFEBB65FFFF3CB
|
FFFFECE0D7FFF1E4DAFFF1E5DAFFEDE0D5FFEADDD3FFE9DED5FFFBFFFFFFE7AE
|
||||||
8AFFB68116FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B78218FFF6CD
|
51FFE8B25AFFF3CC8EFFB68116FFB68116FFF1CB89FFE9B762FFE7B257FFF9F8
|
||||||
8BFFF2C476FFF9FCFFFF8B8D90FFF8F9F7FFF4F5F5FFF4F7FBFFF2C375FFF6CD
|
FBFFFDF7F2FF877F79FF4A4441FFFEF7F2FFEEE3D8FFEDE2D9FFF8F7FBFFE8B2
|
||||||
8BFFB78218FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B7831CF2B782
|
57FFE9B762FFF1CB89FFB68116FFB68116FFF3CA87FFEDBC6DFFEBB761FFF8F5
|
||||||
18FFB68114FFB88010FFB9810FFFB87F0DFFB67E0CFFB67E0EFFB68013FFB782
|
F7FFFFFFFFFF4A4541FF948C88FFFFFFFFFFF1E8E0FFF0E7E0FFF7F4F7FFEBB7
|
||||||
18FFB7831CF2FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000300000
|
61FFEDBC6DFFF3CA87FFB68116FFB78218FFF6CD8BFFF2C67DFFF0C171FFFAF7
|
||||||
0033000000330000003300000033000000330000003300000033000000330000
|
FBFFFFFFFFFF4C4848FF989392FFFFFFFFFFF7EFEAFFF6EFEBFFF9F6FAFFF0C1
|
||||||
003300000030FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
71FFF2C67DFFF6CD8BFFB78218FF976C1496B78218FFB68014FFB37A06FFD7CF
|
||||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
D2FFD8CEC9FF6C676653593A0053D9CFCEFFD5CAC3FFD4CAC4FFD6CFD2FFB37A
|
||||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
06FFB68014FFB78218FF976C1496000000000000003300000033000000330000
|
||||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
0033000000330000000800000008000000330000003300000033000000330000
|
||||||
FF00FFFFFF00FFFFFF00FFFFFF00B3B3B1EFB0B0ADFFAEAEACFFAEAEABFFADAD
|
0033000000330000003300000000B3B3B1EFB0B0ADFFAEAEACFFAEAEABFFADAD
|
||||||
ABFFAEAEABFFAFAFADFFB0B0AED5000000000000000000000000000000000000
|
ABFFAEAEABFFAFAFADFFB0B0AED5000000000000000000000000000000000000
|
||||||
0000000000000000000000000000AFAFADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
0000000000000000000000000000AFAFADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
FFFFFFFFFFFFFFFFFFFFE9E9E9FFAFAFADA70000000000000000000000000000
|
FFFFFFFFFFFFFFFFFFFFE9E9E9FFAFAFADA70000000000000000000000000000
|
||||||
|
|
245
src/ce_main.pas
245
src/ce_main.pas
|
@ -7,7 +7,7 @@ interface
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, FileUtil, SynEditKeyCmds, SynHighlighterLFM, Forms,
|
Classes, SysUtils, FileUtil, SynEditKeyCmds, SynHighlighterLFM, Forms,
|
||||||
AnchorDocking, AnchorDockStorage, AnchorDockOptionsDlg, Controls, Graphics,
|
AnchorDocking, AnchorDockStorage, AnchorDockOptionsDlg, Controls, Graphics,
|
||||||
Dialogs, Menus, ActnList, ExtCtrls, process, XMLPropStorage, asyncprocess,
|
Dialogs, Menus, ActnList, ExtCtrls, process, XMLPropStorage, ComCtrls,
|
||||||
ce_common, ce_dmdwrap, ce_project, ce_synmemo, ce_widget, ce_messages,
|
ce_common, ce_dmdwrap, ce_project, ce_synmemo, ce_widget, ce_messages,
|
||||||
ce_editor, ce_projinspect, ce_projconf, ce_staticexplorer, ce_search;
|
ce_editor, ce_projinspect, ce_projconf, ce_staticexplorer, ce_search;
|
||||||
|
|
||||||
|
@ -19,17 +19,21 @@ type
|
||||||
//TODO-cwidget: options editor
|
//TODO-cwidget: options editor
|
||||||
(**
|
(**
|
||||||
* Encapsulates the options in a writable component.
|
* Encapsulates the options in a writable component.
|
||||||
* note: likely to change however needed to test correctly Coedit.
|
|
||||||
*)
|
*)
|
||||||
TCEOptions = class(TComponent)
|
TCEOptions = class(TComponent)
|
||||||
private
|
private
|
||||||
fFileMru, fProjMru: TMruFileList;
|
fFileMru, fProjMru: TMruFileList;
|
||||||
fWidgUpdDel, fWidgUpdPer: Integer;
|
|
||||||
fLeft, FTop, fWidth, fHeight: Integer;
|
fLeft, FTop, fWidth, fHeight: Integer;
|
||||||
|
fErrorFlg: boolean;
|
||||||
procedure setFileMru(aValue: TMruFileList);
|
procedure setFileMru(aValue: TMruFileList);
|
||||||
procedure setProjMru(aValue: TMruFileList);
|
procedure setProjMru(aValue: TMruFileList);
|
||||||
procedure saveLayout(str: TStream);
|
procedure saveLayout(str: TStream);
|
||||||
procedure loadLayout(str: TStream);
|
procedure loadLayout(str: TStream);
|
||||||
|
//
|
||||||
|
procedure readerPropNoFound(Reader: TReader; Instance: TPersistent;
|
||||||
|
var PropName: string; IsPath: boolean; var Handled, Skip: Boolean);
|
||||||
|
procedure readerError(Reader: TReader; const Message: string;
|
||||||
|
var Handled: Boolean);
|
||||||
published
|
published
|
||||||
property APP_Left: Integer read fLeft write fLeft;
|
property APP_Left: Integer read fLeft write fLeft;
|
||||||
property APP_Top: Integer read fTop write fTop;
|
property APP_Top: Integer read fTop write fTop;
|
||||||
|
@ -38,17 +42,16 @@ type
|
||||||
//
|
//
|
||||||
property MRU_Files: TMruFileList read fFileMru write setFileMru;
|
property MRU_Files: TMruFileList read fFileMru write setFileMru;
|
||||||
property MRU_Projects: TMruFileList read fProjMru write setProjMru;
|
property MRU_Projects: TMruFileList read fProjMru write setProjMru;
|
||||||
//
|
|
||||||
property WIDG_UpdateDelay: Integer read fWidgUpdDel write fWidgUpdDel;
|
|
||||||
property WIDG_UpdatePeriod: Integer read fWidgUpdPer write fWidgUpdPer;
|
|
||||||
public
|
public
|
||||||
constructor create(aOwner: TComponent); override;
|
constructor create(aOwner: TComponent); override;
|
||||||
destructor destroy; override;
|
destructor destroy; override;
|
||||||
|
procedure defineProperties(Filer: TFiler); override;
|
||||||
procedure saveToFile(const aFilename: string);
|
procedure saveToFile(const aFilename: string);
|
||||||
procedure loadFromFile(const aFilename: string);
|
procedure loadFromFile(const aFilename: string);
|
||||||
procedure beforeSave;
|
procedure beforeSave;
|
||||||
procedure afterLoad;
|
procedure afterLoad;
|
||||||
procedure DefineProperties(Filer: TFiler); override;
|
//
|
||||||
|
property hasLoaded: boolean read fErrorFlg;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TCEMainForm }
|
{ TCEMainForm }
|
||||||
|
@ -204,6 +207,14 @@ type
|
||||||
fProjMru: TMruFileList;
|
fProjMru: TMruFileList;
|
||||||
fFileMru: TMruFileList;
|
fFileMru: TMruFileList;
|
||||||
|
|
||||||
|
//Init - Fina
|
||||||
|
procedure InitMRUs;
|
||||||
|
procedure InitWidgets;
|
||||||
|
procedure InitDocking;
|
||||||
|
procedure InitSettings;
|
||||||
|
procedure SaveSettings;
|
||||||
|
procedure SaveDocking;
|
||||||
|
|
||||||
// widget interfaces subroutines
|
// widget interfaces subroutines
|
||||||
procedure checkWidgetActions(const aWidget: TCEWidget);
|
procedure checkWidgetActions(const aWidget: TCEWidget);
|
||||||
procedure widgetShowFromAction(sender: TObject);
|
procedure widgetShowFromAction(sender: TObject);
|
||||||
|
@ -239,6 +250,8 @@ type
|
||||||
public
|
public
|
||||||
constructor create(aOwner: TComponent); override;
|
constructor create(aOwner: TComponent); override;
|
||||||
destructor destroy; override;
|
destructor destroy; override;
|
||||||
|
procedure DockMasterCreateControl(Sender: TObject; aName: string; var
|
||||||
|
AControl: TControl; DoDisableAutoSizing: boolean);
|
||||||
//
|
//
|
||||||
procedure openFile(const aFilename: string);
|
procedure openFile(const aFilename: string);
|
||||||
procedure docChangeNotify(Sender: TObject; const aIndex: Integer);
|
procedure docChangeNotify(Sender: TObject; const aIndex: Integer);
|
||||||
|
@ -252,7 +265,7 @@ type
|
||||||
end;
|
end;
|
||||||
|
|
||||||
var
|
var
|
||||||
mainForm: TCEMainForm;
|
CEMainForm: TCEMainForm;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
{$R *.lfm}
|
{$R *.lfm}
|
||||||
|
@ -260,23 +273,34 @@ implementation
|
||||||
uses
|
uses
|
||||||
SynMacroRecorder;
|
SynMacroRecorder;
|
||||||
|
|
||||||
{$REGION std comp methods ******************************************************}
|
{$REGION Standard Comp/Obj------------------------------------------------------}
|
||||||
constructor TCEMainForm.create(aOwner: TComponent);
|
constructor TCEMainForm.create(aOwner: TComponent);
|
||||||
var
|
|
||||||
act: TAction;
|
|
||||||
itm: TMenuItem;
|
|
||||||
widg: TCEWidget;
|
|
||||||
opts: TCEOptions;
|
|
||||||
begin
|
begin
|
||||||
inherited create(aOwner);
|
inherited create(aOwner);
|
||||||
|
InitMRUs;
|
||||||
|
InitWidgets;
|
||||||
|
InitDocking;
|
||||||
|
InitSettings;
|
||||||
//
|
//
|
||||||
|
newProj;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEMainForm.InitMRUs;
|
||||||
|
begin
|
||||||
fProjMru := TMruFileList.Create;
|
fProjMru := TMruFileList.Create;
|
||||||
fFileMru := TMruFileList.Create;
|
fFileMru := TMruFileList.Create;
|
||||||
fProjMru.objectTag := mnuItemMruProj;
|
fProjMru.objectTag := mnuItemMruProj;
|
||||||
fFileMru.objectTag := mnuItemMruFile;
|
fFileMru.objectTag := mnuItemMruFile;
|
||||||
fProjMru.OnChange := @mruChange;
|
fProjMru.OnChange := @mruChange;
|
||||||
fFileMru.OnChange := @mruChange;
|
fFileMru.OnChange := @mruChange;
|
||||||
//
|
end;
|
||||||
|
|
||||||
|
procedure TCEMainForm.InitWidgets;
|
||||||
|
var
|
||||||
|
widg: TCEWidget;
|
||||||
|
act: TAction;
|
||||||
|
itm: TMenuItem;
|
||||||
|
begin
|
||||||
fWidgList := TCEWidgetList.Create;
|
fWidgList := TCEWidgetList.Create;
|
||||||
fMesgWidg := TCEMessagesWidget.create(nil);
|
fMesgWidg := TCEMessagesWidget.create(nil);
|
||||||
fEditWidg := TCEEditorWidget.create(nil);
|
fEditWidg := TCEEditorWidget.create(nil);
|
||||||
|
@ -304,47 +328,101 @@ begin
|
||||||
itm.Action := act;
|
itm.Action := act;
|
||||||
itm.Tag := ptrInt(widg);
|
itm.Tag := ptrInt(widg);
|
||||||
mnuItemWin.Add(itm);
|
mnuItemWin.Add(itm);
|
||||||
widg.Show
|
|
||||||
end;
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
Height := 0;
|
procedure TCEMainForm.InitDocking;
|
||||||
DockMaster.MakeDockSite(Self, [akBottom], admrpChild, true);
|
var
|
||||||
|
i: NativeInt;
|
||||||
|
aManager: TAnchorDockManager;
|
||||||
|
begin
|
||||||
|
DockMaster.MakeDockSite(Self, [akBottom], admrpChild);
|
||||||
|
DockMaster.OnCreateControl := @DockMasterCreateControl;
|
||||||
DockMaster.OnShowOptions := @ShowAnchorDockOptions;
|
DockMaster.OnShowOptions := @ShowAnchorDockOptions;
|
||||||
DockMaster.HeaderStyle := adhsPoints;
|
DockMaster.HeaderStyle := adhsPoints;
|
||||||
DockMaster.ManualDock(DockMaster.GetAnchorSite(fEditWidg), Self, alBottom);
|
if DockManager is TAnchorDockManager then begin
|
||||||
DockMaster.ManualDock(DockMaster.GetAnchorSite(fMesgWidg), Self, alBottom);
|
aManager:=TAnchorDockManager(DockManager);
|
||||||
DockMaster.ManualDock(DockMaster.GetAnchorSite(fStExpWidg), Self, alLeft);
|
aManager.PreferredSiteSizeAsSiteMinimum:=false;
|
||||||
|
end;
|
||||||
|
Height := 0;
|
||||||
|
|
||||||
|
for i := 0 to fWidgList.Count-1 do
|
||||||
|
begin
|
||||||
|
DockMaster.MakeDockable(fWidgList.widget[i],true);
|
||||||
|
DockMaster.GetAnchorSite(fWidgList.widget[i]).Header.HeaderPosition := adlhpTop;
|
||||||
|
end;
|
||||||
|
|
||||||
|
DockMaster.ManualDock(DockMaster.GetAnchorSite(fEditWidg), DockMaster.GetSite(Self), alBottom);
|
||||||
|
DockMaster.ManualDock(DockMaster.GetAnchorSite(fMesgWidg), DockMaster.GetSite(Self), alBottom);
|
||||||
|
DockMaster.ManualDock(DockMaster.GetAnchorSite(fStExpWidg), DockMaster.GetSite(Self), alLeft);
|
||||||
DockMaster.ManualDock(DockMaster.GetAnchorSite(fFindWidg),
|
DockMaster.ManualDock(DockMaster.GetAnchorSite(fFindWidg),
|
||||||
DockMaster.GetAnchorSite(fStExpWidg), alBottom, fStExpWidg);
|
DockMaster.GetAnchorSite(fStExpWidg), alBottom, fStExpWidg);
|
||||||
width := width - fProjWidg.Width;
|
width := width - fProjWidg.Width;
|
||||||
DockMaster.ManualDock(DockMaster.GetAnchorSite(fProjWidg), Self, alRight);
|
DockMaster.ManualDock(DockMaster.GetAnchorSite(fProjWidg), DockMaster.GetSite(Self), alRight);
|
||||||
DockMaster.ManualDock(DockMaster.GetAnchorSite(fPrjCfWidg),
|
DockMaster.ManualDock(DockMaster.GetAnchorSite(fPrjCfWidg),
|
||||||
DockMaster.GetAnchorSite(fProjWidg), alBottom, fProjWidg);
|
DockMaster.GetAnchorSite(fProjWidg), alBottom, fProjWidg);
|
||||||
DockMaster.GetAnchorSite(fEditWidg).Header.HeaderPosition := adlhpTop;
|
DockMaster.GetAnchorSite(fEditWidg).Header.HeaderPosition := adlhpTop;
|
||||||
|
//
|
||||||
|
SaveDocking;
|
||||||
|
end;
|
||||||
|
|
||||||
newProj;
|
procedure TCEMainForm.InitSettings;
|
||||||
|
var
|
||||||
|
fname1: string;
|
||||||
|
fname2: string;
|
||||||
|
opts: TCEOptions;
|
||||||
|
begin
|
||||||
|
fname1 := getDocPath + 'options.txt';
|
||||||
|
fname2 := getDocPath + 'options.bak';
|
||||||
opts := TCEOptions.create(nil);
|
opts := TCEOptions.create(nil);
|
||||||
try
|
try
|
||||||
if fileExists('temp_coedit_options.txt') then
|
if fileExists(fname1) then
|
||||||
opts.loadFromFile('temp_coedit_options.txt');
|
begin
|
||||||
|
opts.loadFromFile(fname1);
|
||||||
|
if opts.hasLoaded then
|
||||||
|
begin
|
||||||
|
if fileExists(fname2) then
|
||||||
|
deleteFile(fname2);
|
||||||
|
if not fileExists(fname2) then
|
||||||
|
copyFile(fname1, fname2, false);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
finally
|
finally
|
||||||
opts.Free;
|
opts.Free;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TCEMainForm.destroy;
|
procedure TCEMainForm.SaveSettings;
|
||||||
var
|
var
|
||||||
opts: TCEOptions;
|
opts: TCEOptions;
|
||||||
begin
|
begin
|
||||||
opts := TCEOptions.create(nil);
|
opts := TCEOptions.create(nil);
|
||||||
try
|
try
|
||||||
opts.saveToFile('temp_coedit_options.txt');
|
forceDirectory(getDocPath);
|
||||||
|
opts.saveToFile(getDocPath + 'options.txt');
|
||||||
finally
|
finally
|
||||||
opts.Free;
|
opts.Free;
|
||||||
end;
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEMainForm.SaveDocking;
|
||||||
|
var
|
||||||
|
xcfg: TXMLConfigStorage;
|
||||||
|
begin
|
||||||
|
xcfg := TXMLConfigStorage.Create(getDocPath + 'docking.xml',true);
|
||||||
|
try
|
||||||
|
// <Item1 Name="CEMainForm" Type="CustomSite" ChildCount="..."> is always missing
|
||||||
|
DockMaster.SaveLayoutToConfig(xcfg);
|
||||||
|
xcfg.WriteToDisk;
|
||||||
|
finally
|
||||||
|
xcfg.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TCEMainForm.destroy;
|
||||||
|
begin
|
||||||
|
SaveSettings;
|
||||||
|
SaveDocking;
|
||||||
//
|
//
|
||||||
fWidgList.Free;
|
fWidgList.Free;
|
||||||
fMesgWidg.Free;
|
fMesgWidg.Free;
|
||||||
|
@ -538,7 +616,7 @@ begin
|
||||||
end;
|
end;
|
||||||
{$ENDREGION}
|
{$ENDREGION}
|
||||||
|
|
||||||
{$REGION file ******************************************************************}
|
{$REGION file ------------------------------------------------------------------}
|
||||||
procedure TCEMainForm.newFile;
|
procedure TCEMainForm.newFile;
|
||||||
begin
|
begin
|
||||||
if fEditWidg = nil then exit;
|
if fEditWidg = nil then exit;
|
||||||
|
@ -740,7 +818,7 @@ begin
|
||||||
end;
|
end;
|
||||||
{$ENDREGION}
|
{$ENDREGION}
|
||||||
|
|
||||||
{$REGION edit ******************************************************************}
|
{$REGION edit ------------------------------------------------------------------}
|
||||||
procedure TCEMainForm.actEdCopyExecute(Sender: TObject);
|
procedure TCEMainForm.actEdCopyExecute(Sender: TObject);
|
||||||
var
|
var
|
||||||
curr: TCESynMemo;
|
curr: TCESynMemo;
|
||||||
|
@ -844,7 +922,7 @@ end;
|
||||||
|
|
||||||
{$ENDREGION}
|
{$ENDREGION}
|
||||||
|
|
||||||
{$REGION run ******************************************************************}
|
{$REGION run -------------------------------------------------------------------}
|
||||||
procedure TCEMainForm.ProcessOutputToMsg(const aProcess: TProcess; aCtxt: TMessageContext = msUnknown);
|
procedure TCEMainForm.ProcessOutputToMsg(const aProcess: TProcess; aCtxt: TMessageContext = msUnknown);
|
||||||
var
|
var
|
||||||
str: TMemoryStream;
|
str: TMemoryStream;
|
||||||
|
@ -1157,7 +1235,7 @@ begin
|
||||||
end;
|
end;
|
||||||
{$ENDREGION}
|
{$ENDREGION}
|
||||||
|
|
||||||
{$REGION view ******************************************************************}
|
{$REGION view ------------------------------------------------------------------}
|
||||||
procedure TCEMainForm.widgetShowFromAction(sender: TObject);
|
procedure TCEMainForm.widgetShowFromAction(sender: TObject);
|
||||||
var
|
var
|
||||||
widg: TCEWidget;
|
widg: TCEWidget;
|
||||||
|
@ -1170,9 +1248,21 @@ begin
|
||||||
win.Show;
|
win.Show;
|
||||||
win.BringToFront;
|
win.BringToFront;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCEMainForm.DockMasterCreateControl(Sender: TObject; aName: string; var
|
||||||
|
AControl: TControl; DoDisableAutoSizing: boolean);
|
||||||
|
var
|
||||||
|
i: NativeInt;
|
||||||
|
begin
|
||||||
|
for i := 0 to fWidgList.Count-1 do if fWidgList.widget[i].Name = aName then
|
||||||
|
begin
|
||||||
|
AControl := fWidgList.widget[i];
|
||||||
|
if DoDisableAutoSizing then AControl.DisableAutoSizing;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
{$ENDREGION}
|
{$ENDREGION}
|
||||||
|
|
||||||
{$REGION project ***************************************************************}
|
{$REGION project ---------------------------------------------------------------}
|
||||||
procedure TCEMainForm.projChange(sender: TObject);
|
procedure TCEMainForm.projChange(sender: TObject);
|
||||||
var
|
var
|
||||||
widg: TCEWidget;
|
widg: TCEWidget;
|
||||||
|
@ -1323,15 +1413,13 @@ begin
|
||||||
end;
|
end;
|
||||||
{$ENDREGION}
|
{$ENDREGION}
|
||||||
|
|
||||||
{$REGION options ***************************************************************}
|
{$REGION options ---------------------------------------------------------------}
|
||||||
constructor TCEOptions.create(aOwner: TComponent);
|
constructor TCEOptions.create(aOwner: TComponent);
|
||||||
begin
|
begin
|
||||||
inherited;
|
inherited;
|
||||||
fFileMru := TMruFileList.Create;
|
fFileMru := TMruFileList.Create;
|
||||||
fProjMru := TMruFileList.Create;
|
fProjMru := TMruFileList.Create;
|
||||||
//
|
//
|
||||||
fWidgUpdDel := 70;
|
|
||||||
fWidgUpdPer := 1000;
|
|
||||||
fLeft := 0;
|
fLeft := 0;
|
||||||
fTop := 0;
|
fTop := 0;
|
||||||
fWidth := 800;
|
fWidth := 800;
|
||||||
|
@ -1345,6 +1433,20 @@ begin
|
||||||
inherited;
|
inherited;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCEOptions.readerPropNoFound(Reader: TReader; Instance: TPersistent;
|
||||||
|
var PropName: string; IsPath: boolean; var Handled, Skip: Boolean);
|
||||||
|
begin
|
||||||
|
Skip := true;
|
||||||
|
Handled := true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEOptions.readerError(Reader: TReader; const Message: string;
|
||||||
|
var Handled: Boolean);
|
||||||
|
begin
|
||||||
|
Handled := true;
|
||||||
|
fErrorFlg := false;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCEOptions.setFileMru(aValue: TMruFileList);
|
procedure TCEOptions.setFileMru(aValue: TMruFileList);
|
||||||
begin
|
begin
|
||||||
fFileMru.Assign(aValue);
|
fFileMru.Assign(aValue);
|
||||||
|
@ -1388,59 +1490,66 @@ begin
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCEOptions.defineProperties(Filer: TFiler);
|
||||||
procedure TCEOptions.DefineProperties(Filer: TFiler);
|
|
||||||
begin
|
begin
|
||||||
//Filer.DefineBinaryProperty('APP_Docking', @loadLayout, @saveLayout, true);
|
inherited;
|
||||||
|
// Filer is either a TReader or a TWriter
|
||||||
|
CEMainForm.fEditWidg.declareProperties(Filer);
|
||||||
|
CEMainForm.fFindWidg.declareProperties(Filer);
|
||||||
|
CEMainForm.fMesgWidg.declareProperties(Filer);
|
||||||
|
CEMainForm.fPrjCfWidg.declareProperties(Filer);
|
||||||
|
CEMainForm.fProjWidg.declareProperties(Filer);
|
||||||
|
CEMainForm.fStExpWidg.declareProperties(Filer);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEOptions.beforeSave;
|
procedure TCEOptions.beforeSave;
|
||||||
begin
|
begin
|
||||||
fLeft := mainForm.Left;
|
fLeft := CEMainForm.Left;
|
||||||
fTop := mainForm.Top;
|
fTop := CEMainForm.Top;
|
||||||
fWidth := mainForm.Width;
|
fWidth := CEMainForm.Width;
|
||||||
fHeight := mainForm.Height;
|
fHeight := CEMainForm.Height;
|
||||||
//
|
//
|
||||||
fFileMru.Assign(mainForm.fFileMru);
|
fFileMru.Assign(CEMainForm.fFileMru);
|
||||||
fProjMru.Assign(mainForm.fProjMru);
|
fProjMru.Assign(CEMainForm.fProjMru);
|
||||||
//
|
//
|
||||||
fWidgUpdPer := mainForm.fEditWidg.updaterByLoopInterval;
|
CEMainForm.fEditWidg.beforeSave(nil);
|
||||||
fWidgUpdDel := mainForm.fEditWidg.updaterByDelayDuration;
|
CEMainForm.fFindWidg.beforeSave(nil);
|
||||||
|
CEMainForm.fMesgWidg.beforeSave(nil);
|
||||||
|
CEMainForm.fPrjCfWidg.beforeSave(nil);
|
||||||
|
CEMainForm.fProjWidg.beforeSave(nil);
|
||||||
|
CEMainForm.fStExpWidg.beforeSave(nil);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEOptions.saveToFile(const aFilename: string);
|
procedure TCEOptions.saveToFile(const aFilename: string);
|
||||||
begin
|
begin
|
||||||
|
fErrorFlg := true;
|
||||||
beforeSave;
|
beforeSave;
|
||||||
saveCompToTxtFile(Self, aFilename);
|
ce_common.saveCompToTxtFile(self, aFilename);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEOptions.loadFromFile(const aFilename: string);
|
procedure TCEOptions.loadFromFile(const aFilename: string);
|
||||||
begin
|
begin
|
||||||
try
|
fErrorFlg := true;
|
||||||
loadCompFromTxtFile(Self, aFilename);
|
loadCompFromTxtFile(self, aFilename, @readerPropNoFound, @readerError);
|
||||||
except
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
afterLoad;
|
afterLoad;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEOptions.afterLoad;
|
procedure TCEOptions.afterLoad;
|
||||||
var
|
|
||||||
widg: TCEWidget;
|
|
||||||
begin
|
begin
|
||||||
mainForm.Left := fLeft;
|
CEMainForm.Left := fLeft;
|
||||||
mainForm.Top := fTop;
|
CEMainForm.Top := fTop;
|
||||||
mainForm.Width := fWidth;
|
CEMainForm.Width := fWidth;
|
||||||
mainForm.Height := fHeight;
|
CEMainForm.Height := fHeight;
|
||||||
//
|
//
|
||||||
mainForm.fFileMru.Assign(fFileMru);
|
CEMainForm.fFileMru.Assign(fFileMru);
|
||||||
mainForm.fProjMru.Assign(fProjMru);
|
CEMainForm.fProjMru.Assign(fProjMru);
|
||||||
//
|
//
|
||||||
for widg in mainForm.fWidgList do
|
CEMainForm.fEditWidg.afterLoad(nil);
|
||||||
begin
|
CEMainForm.fFindWidg.afterLoad(nil);
|
||||||
widg.updaterByDelayDuration := fWidgUpdDel;
|
CEMainForm.fMesgWidg.afterLoad(nil);
|
||||||
widg.updaterByLoopInterval := fWidgUpdPer;
|
CEMainForm.fPrjCfWidg.afterLoad(nil);
|
||||||
end;
|
CEMainForm.fProjWidg.afterLoad(nil);
|
||||||
|
CEMainForm.fStExpWidg.afterLoad(nil);
|
||||||
end;
|
end;
|
||||||
{$ENDREGION}
|
{$ENDREGION}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ interface
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, ComCtrls,
|
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, ComCtrls,
|
||||||
lcltype, ce_widget, ActnList, Menus, clipbrd, AnchorDocking, ce_project,
|
lcltype, ce_widget, ActnList, Menus, clipbrd, AnchorDocking, ce_project,
|
||||||
ce_synmemo, LMessages;
|
ce_synmemo;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
|
@ -103,11 +103,9 @@ begin
|
||||||
fActSaveMsg.caption := 'Save selected message(s) to...';
|
fActSaveMsg.caption := 'Save selected message(s) to...';
|
||||||
//
|
//
|
||||||
inherited;
|
inherited;
|
||||||
fID := 'ID_MSGS';
|
|
||||||
//
|
//
|
||||||
List.PopupMenu := contextMenu;
|
List.PopupMenu := contextMenu;
|
||||||
List.OnDeletion := @ListDeletion;
|
List.OnDeletion := @ListDeletion;
|
||||||
DockMaster.GetAnchorSite(Self).Name := ID;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEMessagesWidget.clearOutOfRangeMessg;
|
procedure TCEMessagesWidget.clearOutOfRangeMessg;
|
||||||
|
|
|
@ -47,9 +47,7 @@ implementation
|
||||||
constructor TCEProjectConfigurationWidget.create(aOwner: TComponent);
|
constructor TCEProjectConfigurationWidget.create(aOwner: TComponent);
|
||||||
begin
|
begin
|
||||||
inherited;
|
inherited;
|
||||||
fID := 'PROJ_CONF';
|
|
||||||
Tree.Selected := Tree.Items.GetLastNode;
|
Tree.Selected := Tree.Items.GetLastNode;
|
||||||
DockMaster.GetAnchorSite(Self).Name := ID;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEProjectConfigurationWidget.projNew(const aProject: TCEProject);
|
procedure TCEProjectConfigurationWidget.projNew(const aProject: TCEProject);
|
||||||
|
@ -106,7 +104,7 @@ begin
|
||||||
nme := '';
|
nme := '';
|
||||||
beginUpdateByEvent;
|
beginUpdateByEvent;
|
||||||
cfg := fProj.addConfiguration;
|
cfg := fProj.addConfiguration;
|
||||||
// note: Cancel is actually related to the conf name not to the adding operation.
|
// note: Cancel is actually related to the conf. name not to the add operation.
|
||||||
if InputQuery('Configuration name', '', nme) then cfg.name := nme;
|
if InputQuery('Configuration name', '', nme) then cfg.name := nme;
|
||||||
fProj.ConfigurationIndex := cfg.Index;
|
fProj.ConfigurationIndex := cfg.Index;
|
||||||
endUpdateByEvent;
|
endUpdateByEvent;
|
||||||
|
|
|
@ -240,7 +240,7 @@ begin
|
||||||
for rel in fSrcs do if rel <> '' then
|
for rel in fSrcs do if rel <> '' then
|
||||||
begin
|
begin
|
||||||
abs := expandFilenameEx(fBasePath,rel);
|
abs := expandFilenameEx(fBasePath,rel);
|
||||||
aList.Add(abs); // process.inc ln 249. double quotes are added anyway if there's a space...
|
aList.Add(abs); // process.inc ln 249. double quotes are added if there's a space.
|
||||||
end;
|
end;
|
||||||
TCompilerConfiguration(fOptsColl.Items[fConfIx]).getOpts(aList);
|
TCompilerConfiguration(fOptsColl.Items[fConfIx]).getOpts(aList);
|
||||||
end;
|
end;
|
||||||
|
|
|
@ -209,7 +209,7 @@ inherited CEProjectInspectWidget: TCEProjectInspectWidget
|
||||||
object btnRemFile: TSpeedButton
|
object btnRemFile: TSpeedButton
|
||||||
Left = 28
|
Left = 28
|
||||||
Height = 24
|
Height = 24
|
||||||
Hint = 'remove a source file from the project'
|
Hint = 'remove selected sources file(s) from the project'
|
||||||
Top = 0
|
Top = 0
|
||||||
Width = 28
|
Width = 28
|
||||||
Align = alLeft
|
Align = alLeft
|
||||||
|
|
|
@ -65,13 +65,11 @@ begin
|
||||||
fActSelConf.OnUpdate := @actUpdate;
|
fActSelConf.OnUpdate := @actUpdate;
|
||||||
//
|
//
|
||||||
inherited;
|
inherited;
|
||||||
fID := 'ID_PROJ';
|
|
||||||
Tree.OnDblClick := @TreeDblClick;
|
Tree.OnDblClick := @TreeDblClick;
|
||||||
fFileNode := Tree.Items[0];
|
fFileNode := Tree.Items[0];
|
||||||
fConfNode := Tree.Items[1];
|
fConfNode := Tree.Items[1];
|
||||||
//
|
//
|
||||||
Tree.PopupMenu := contextMenu;
|
Tree.PopupMenu := contextMenu;
|
||||||
DockMaster.GetAnchorSite(Self).Name := ID;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCEProjectInspectWidget.contextName: string;
|
function TCEProjectInspectWidget.contextName: string;
|
||||||
|
@ -137,7 +135,7 @@ begin
|
||||||
begin
|
begin
|
||||||
fname := fProject.getAbsoluteSourceName(i);
|
fname := fProject.getAbsoluteSourceName(i);
|
||||||
if fileExists(fname) then
|
if fileExists(fname) then
|
||||||
mainForm.openFile(fname);
|
CEMainForm.openFile(fname);
|
||||||
end;
|
end;
|
||||||
end
|
end
|
||||||
else if Tree.Selected.Parent = fConfNode then
|
else if Tree.Selected.Parent = fConfNode then
|
||||||
|
@ -195,7 +193,7 @@ begin
|
||||||
if fileExists(fProject.fileName) then
|
if fileExists(fProject.fileName) then
|
||||||
dir := extractFilePath(fProject.fileName)
|
dir := extractFilePath(fProject.fileName)
|
||||||
else dir := '';
|
else dir := '';
|
||||||
if selectDirectory(dir, [], 0) then
|
if selectDirectory('sources', dir, dir, true, 0) then
|
||||||
begin
|
begin
|
||||||
if FindFirst(dir + DirectorySeparator + '*.*', faAnyFile, sr ) = 0 then
|
if FindFirst(dir + DirectorySeparator + '*.*', faAnyFile, sr ) = 0 then
|
||||||
try
|
try
|
||||||
|
@ -218,19 +216,19 @@ begin
|
||||||
if Tree.Selected = nil then exit;
|
if Tree.Selected = nil then exit;
|
||||||
//
|
//
|
||||||
if Tree.Selected.Parent = fFileNode then
|
if Tree.Selected.Parent = fFileNode then
|
||||||
begin
|
begin
|
||||||
fname := Tree.Selected.Text;
|
fname := Tree.Selected.Text;
|
||||||
i := fProject.Sources.IndexOf(fname);
|
i := fProject.Sources.IndexOf(fname);
|
||||||
if i > -1 then fProject.Sources.Delete(i);
|
if i > -1 then fProject.Sources.Delete(i);
|
||||||
UpdateByEvent;
|
UpdateByEvent;
|
||||||
end
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEProjectInspectWidget.FormDropFiles(Sender: TObject; const FileNames: array of String);
|
procedure TCEProjectInspectWidget.FormDropFiles(Sender: TObject; const FileNames: array of String);
|
||||||
var
|
var
|
||||||
fname: string;
|
fname: string;
|
||||||
begin
|
begin
|
||||||
mainForm.FormDropFiles(Sender, Filenames);
|
CEMainForm.FormDropFiles(Sender, Filenames);
|
||||||
if fProject = nil then exit;
|
if fProject = nil then exit;
|
||||||
for fname in Filenames do fProject.addSource(fname);
|
for fname in Filenames do fProject.addSource(fname);
|
||||||
end;
|
end;
|
||||||
|
|
|
@ -39,9 +39,12 @@ type
|
||||||
fSearchMru, fReplaceMru: TMruList;
|
fSearchMru, fReplaceMru: TMruList;
|
||||||
fCancelAll: boolean;
|
fCancelAll: boolean;
|
||||||
fHasSearched: boolean;
|
fHasSearched: boolean;
|
||||||
|
procedure optset_SearchMru(aReader: TReader);
|
||||||
|
procedure optget_SearchMru(aWriter: TWriter);
|
||||||
|
procedure optset_ReplaceMru(aReader: TReader);
|
||||||
|
procedure optget_ReplaceMru(aWriter: TWriter);
|
||||||
function getOptions: TSynSearchOptions;
|
function getOptions: TSynSearchOptions;
|
||||||
procedure actReplaceAllExecute(sender: TObject);
|
procedure actReplaceAllExecute(sender: TObject);
|
||||||
|
|
||||||
procedure replaceEvent(Sender: TObject; const ASearch, AReplace:
|
procedure replaceEvent(Sender: TObject; const ASearch, AReplace:
|
||||||
string; Line, Column: integer; var ReplaceAction: TSynReplaceAction);
|
string; Line, Column: integer; var ReplaceAction: TSynReplaceAction);
|
||||||
protected
|
protected
|
||||||
|
@ -57,6 +60,8 @@ type
|
||||||
function contextActionCount: integer; override;
|
function contextActionCount: integer; override;
|
||||||
function contextAction(index: integer): TAction; override;
|
function contextAction(index: integer): TAction; override;
|
||||||
//
|
//
|
||||||
|
procedure declareProperties(aFiler: TFiler); override;
|
||||||
|
//
|
||||||
procedure actFindNextExecute(sender: TObject);
|
procedure actFindNextExecute(sender: TObject);
|
||||||
procedure actReplaceNextExecute(sender: TObject);
|
procedure actReplaceNextExecute(sender: TObject);
|
||||||
end;
|
end;
|
||||||
|
@ -64,6 +69,7 @@ type
|
||||||
implementation
|
implementation
|
||||||
{$R *.lfm}
|
{$R *.lfm}
|
||||||
|
|
||||||
|
{$REGION Standard Comp/Obj------------------------------------------------------}
|
||||||
constructor TCESearchWidget.Create(aOwner: TComponent);
|
constructor TCESearchWidget.Create(aOwner: TComponent);
|
||||||
begin
|
begin
|
||||||
fActFindNext := TAction.Create(self);
|
fActFindNext := TAction.Create(self);
|
||||||
|
@ -76,7 +82,6 @@ begin
|
||||||
fActReplaceAll.Caption := 'Replace all';
|
fActReplaceAll.Caption := 'Replace all';
|
||||||
fActReplaceAll.OnExecute := @actReplaceAllExecute;
|
fActReplaceAll.OnExecute := @actReplaceAllExecute;
|
||||||
inherited;
|
inherited;
|
||||||
fID := 'ID_FIND';
|
|
||||||
//
|
//
|
||||||
btnFind.Action := fActFindNext;
|
btnFind.Action := fActFindNext;
|
||||||
btnReplace.Action := fActReplaceNext;
|
btnReplace.Action := fActReplaceNext;
|
||||||
|
@ -84,7 +89,6 @@ begin
|
||||||
//
|
//
|
||||||
fSearchMru := TMruList.Create;
|
fSearchMru := TMruList.Create;
|
||||||
fReplaceMru:= TMruList.Create;
|
fReplaceMru:= TMruList.Create;
|
||||||
DockMaster.GetAnchorSite(Self).Name := ID;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TCESearchWidget.Destroy;
|
destructor TCESearchWidget.Destroy;
|
||||||
|
@ -93,19 +97,39 @@ begin
|
||||||
fReplaceMru.Free;
|
fReplaceMru.Free;
|
||||||
inherited;
|
inherited;
|
||||||
end;
|
end;
|
||||||
|
{$ENDREGION}
|
||||||
|
|
||||||
procedure TCESearchWidget.docFocused(const aDoc: TCESynMemo);
|
{$REGION ICEWidgetPersist ------------------------------------------------------}
|
||||||
|
procedure TCESearchWidget.declareProperties(aFiler: TFiler);
|
||||||
begin
|
begin
|
||||||
fEditor := aDoc;
|
inherited;
|
||||||
UpdateByEvent;
|
aFiler.DefineProperty(Name + '_FindMRU', @optset_SearchMru, @optget_SearchMru, true);
|
||||||
|
aFiler.DefineProperty(Name + '_ReplaceMRU', @optset_ReplaceMru, @optget_ReplaceMru, true);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCESearchWidget.docClose(const aDoc: TCESynMemo);
|
procedure TCESearchWidget.optset_SearchMru(aReader: TReader);
|
||||||
begin
|
begin
|
||||||
if fEditor = aDoc then fEditor := nil;
|
fSearchMru.DelimitedText := aReader.ReadString;
|
||||||
UpdateByEvent;
|
cbToFind.Items.DelimitedText := fSearchMru.DelimitedText;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCESearchWidget.optget_SearchMru(aWriter: TWriter);
|
||||||
|
begin
|
||||||
|
aWriter.WriteString(fSearchMru.DelimitedText);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCESearchWidget.optset_ReplaceMru(aReader: TReader);
|
||||||
|
begin
|
||||||
|
fReplaceMru.DelimitedText := aReader.ReadString;
|
||||||
|
cbReplaceWth.Items.DelimitedText := fReplaceMru.DelimitedText ;
|
||||||
|
end;
|
||||||
|
procedure TCESearchWidget.optget_ReplaceMru(aWriter: TWriter);
|
||||||
|
begin
|
||||||
|
aWriter.WriteString(fReplaceMru.DelimitedText);
|
||||||
|
end;
|
||||||
|
{$ENDREGION}
|
||||||
|
|
||||||
|
{$REGION ICEContextualActions---------------------------------------------------}
|
||||||
function TCESearchWidget.contextName: string;
|
function TCESearchWidget.contextName: string;
|
||||||
begin
|
begin
|
||||||
exit('Search');
|
exit('Search');
|
||||||
|
@ -126,26 +150,6 @@ begin
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCESearchWidget.cbToFindChange(Sender: TObject);
|
|
||||||
begin
|
|
||||||
if Updating then exit;
|
|
||||||
fToFind := cbToFind.Text;
|
|
||||||
fHasSearched := false;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCESearchWidget.chkEnableRepChange(Sender: TObject);
|
|
||||||
begin
|
|
||||||
if Updating then exit;
|
|
||||||
UpdateByEvent;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCESearchWidget.cbReplaceWthChange(Sender: TObject);
|
|
||||||
begin
|
|
||||||
if Updating then exit;
|
|
||||||
fReplaceWth := cbReplaceWth.Text;
|
|
||||||
fHasSearched := false;
|
|
||||||
end;
|
|
||||||
|
|
||||||
function TCESearchWidget.getOptions: TSynSearchOptions;
|
function TCESearchWidget.getOptions: TSynSearchOptions;
|
||||||
begin
|
begin
|
||||||
result := [ssoRegExpr];
|
result := [ssoRegExpr];
|
||||||
|
@ -155,6 +159,28 @@ begin
|
||||||
if chkPrompt.Checked then result += [ssoPrompt];
|
if chkPrompt.Checked then result += [ssoPrompt];
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function dlgReplaceAll: TModalResult;
|
||||||
|
const
|
||||||
|
Btns = [mbYes, mbNo, mbYesToAll, mbNoToAll];
|
||||||
|
begin
|
||||||
|
exit( MessageDlg('Coedit', 'Replace this match ?', mtConfirmation, Btns, ''));
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCESearchWidget.replaceEvent(Sender: TObject; const ASearch, AReplace:
|
||||||
|
string; Line, Column: integer; var ReplaceAction: TSynReplaceAction);
|
||||||
|
begin
|
||||||
|
case dlgReplaceAll of
|
||||||
|
mrYes: ReplaceAction := raReplace;
|
||||||
|
mrNo: ReplaceAction := raSkip;
|
||||||
|
mrYesToAll: ReplaceAction := raReplaceAll;
|
||||||
|
mrCancel, mrClose, mrNoToAll:
|
||||||
|
begin
|
||||||
|
ReplaceAction := raCancel;
|
||||||
|
fCancelAll := true;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCESearchWidget.actFindNextExecute(sender: TObject);
|
procedure TCESearchWidget.actFindNextExecute(sender: TObject);
|
||||||
begin
|
begin
|
||||||
if fEditor = nil then exit;
|
if fEditor = nil then exit;
|
||||||
|
@ -233,27 +259,40 @@ begin
|
||||||
fEditor.OnReplaceText := nil;
|
fEditor.OnReplaceText := nil;
|
||||||
UpdateByEvent;
|
UpdateByEvent;
|
||||||
end;
|
end;
|
||||||
|
{$ENDREGION}
|
||||||
|
|
||||||
function dlgReplaceAll: TModalResult;
|
{$REGION ICEMultiDocMonitor ----------------------------------------------------}
|
||||||
const
|
procedure TCESearchWidget.docFocused(const aDoc: TCESynMemo);
|
||||||
Btns = [mbYes, mbNo, mbYesToAll, mbNoToAll];
|
|
||||||
begin
|
begin
|
||||||
exit( MessageDlg('Coedit', 'Replace this match ?', mtConfirmation, Btns, ''));
|
fEditor := aDoc;
|
||||||
|
UpdateByEvent;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCESearchWidget.replaceEvent(Sender: TObject; const ASearch, AReplace:
|
procedure TCESearchWidget.docClose(const aDoc: TCESynMemo);
|
||||||
string; Line, Column: integer; var ReplaceAction: TSynReplaceAction);
|
|
||||||
begin
|
begin
|
||||||
case dlgReplaceAll of
|
if fEditor = aDoc then fEditor := nil;
|
||||||
mrYes: ReplaceAction := raReplace;
|
UpdateByEvent;
|
||||||
mrNo: ReplaceAction := raSkip;
|
end;
|
||||||
mrYesToAll: ReplaceAction := raReplaceAll;
|
{$ENDREGION}
|
||||||
mrCancel, mrClose, mrNoToAll:
|
|
||||||
begin
|
procedure TCESearchWidget.cbToFindChange(Sender: TObject);
|
||||||
ReplaceAction := raCancel;
|
begin
|
||||||
fCancelAll := true;
|
if Updating then exit;
|
||||||
end;
|
fToFind := cbToFind.Text;
|
||||||
end;
|
fHasSearched := false;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCESearchWidget.chkEnableRepChange(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if Updating then exit;
|
||||||
|
UpdateByEvent;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCESearchWidget.cbReplaceWthChange(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if Updating then exit;
|
||||||
|
fReplaceWth := cbReplaceWth.Text;
|
||||||
|
fHasSearched := false;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCESearchWidget.UpdateByEvent;
|
procedure TCESearchWidget.UpdateByEvent;
|
||||||
|
|
|
@ -22,22 +22,37 @@ type
|
||||||
procedure TreeKeyPress(Sender: TObject; var Key: char);
|
procedure TreeKeyPress(Sender: TObject; var Key: char);
|
||||||
private
|
private
|
||||||
fActRefresh: TAction;
|
fActRefresh: TAction;
|
||||||
|
fActRefreshOnChange: TAction;
|
||||||
|
fActRefreshOnFocus: TAction;
|
||||||
fActAutoRefresh: TAction;
|
fActAutoRefresh: TAction;
|
||||||
fActSelectInSource: TAction;
|
fActSelectInSource: TAction;
|
||||||
fDoc: TCESynMemo;
|
fDoc: TCESynMemo;
|
||||||
fProj: TCEProject;
|
fProj: TCEProject;
|
||||||
fAutoRefresh: boolean;
|
fAutoRefresh: boolean;
|
||||||
|
fRefreshOnChange: boolean;
|
||||||
|
fRefreshOnFocus: boolean;
|
||||||
ndAlias, ndClass, ndEnum, ndFunc: TTreeNode;
|
ndAlias, ndClass, ndEnum, ndFunc: TTreeNode;
|
||||||
ndImp, ndIntf, ndMix, ndStruct, ndTmp, ndVar: TTreeNode;
|
ndImp, ndIntf, ndMix, ndStruct, ndTmp, ndVar: TTreeNode;
|
||||||
procedure Rescan;
|
procedure Rescan;
|
||||||
procedure TreeDblClick(Sender: TObject);
|
procedure TreeDblClick(Sender: TObject);
|
||||||
procedure actRefreshExecute(Sender: TObject);
|
procedure actRefreshExecute(Sender: TObject);
|
||||||
procedure actAutoRefreshExecute(Sender: TObject);
|
procedure actAutoRefreshExecute(Sender: TObject);
|
||||||
|
procedure actRefreshOnChangeExecute(Sender: TObject);
|
||||||
|
procedure actRefreshOnFocusExecute(Sender: TObject);
|
||||||
procedure updateVisibleCat;
|
procedure updateVisibleCat;
|
||||||
|
//
|
||||||
|
procedure optget_AutoRefresh(aWriter: TWriter);
|
||||||
|
procedure optset_AutoRefresh(aReader: TReader);
|
||||||
|
procedure optget_RefreshOnChange(aWriter: TWriter);
|
||||||
|
procedure optset_RefreshOnChange(aReader: TReader);
|
||||||
|
procedure optget_RefreshOnFocus(aWriter: TWriter);
|
||||||
|
procedure optset_RefreshOnFocus(aReader: TReader);
|
||||||
protected
|
protected
|
||||||
procedure UpdateByDelay; override;
|
procedure UpdateByDelay; override;
|
||||||
published
|
published
|
||||||
property autoRefresh: boolean read fAutoRefresh write fAutoRefresh;
|
property autoRefresh: boolean read fAutoRefresh write fAutoRefresh;
|
||||||
|
property refreshOnChange: boolean read fRefreshOnChange write fRefreshOnChange;
|
||||||
|
property refreshOnFocus: boolean read fRefreshOnFocus write fRefreshOnFocus;
|
||||||
public
|
public
|
||||||
constructor create(aOwner: TComponent); override;
|
constructor create(aOwner: TComponent); override;
|
||||||
//
|
//
|
||||||
|
@ -54,14 +69,19 @@ type
|
||||||
procedure projClose(const aProject: TCEProject); override;
|
procedure projClose(const aProject: TCEProject); override;
|
||||||
procedure projCompile(const aProject: TCEProject); override;
|
procedure projCompile(const aProject: TCEProject); override;
|
||||||
procedure projRun(const aProject: TCEProject); override;
|
procedure projRun(const aProject: TCEProject); override;
|
||||||
|
//
|
||||||
|
procedure declareProperties(aFiler: TFiler); override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
{$R *.lfm}
|
{$R *.lfm}
|
||||||
|
|
||||||
|
{$REGION Standard Comp/Obj------------------------------------------------------}
|
||||||
constructor TCEStaticExplorerWidget.create(aOwner: TComponent);
|
constructor TCEStaticExplorerWidget.create(aOwner: TComponent);
|
||||||
begin
|
begin
|
||||||
fAutoRefresh := true;
|
fAutoRefresh := true;
|
||||||
|
fRefreshOnFocus := true;
|
||||||
|
fRefreshOnChange := true;
|
||||||
fActRefresh := TAction.Create(self);
|
fActRefresh := TAction.Create(self);
|
||||||
fActRefresh.OnExecute := @actRefreshExecute;
|
fActRefresh.OnExecute := @actRefreshExecute;
|
||||||
fActRefresh.Caption := 'Refresh';
|
fActRefresh.Caption := 'Refresh';
|
||||||
|
@ -70,12 +90,21 @@ begin
|
||||||
fActAutoRefresh.Caption := 'Auto-refresh';
|
fActAutoRefresh.Caption := 'Auto-refresh';
|
||||||
fActAutoRefresh.AutoCheck := true;
|
fActAutoRefresh.AutoCheck := true;
|
||||||
fActAutoRefresh.Checked := fAutoRefresh;
|
fActAutoRefresh.Checked := fAutoRefresh;
|
||||||
|
fActRefreshOnChange := TAction.Create(self);
|
||||||
|
fActRefreshOnChange.OnExecute := @actRefreshOnChangeExecute;
|
||||||
|
fActRefreshOnChange.Caption := 'Refresh on change';
|
||||||
|
fActRefreshOnChange.AutoCheck := true;
|
||||||
|
fActRefreshOnChange.Checked := fRefreshOnChange;
|
||||||
|
fActRefreshOnFocus := TAction.Create(self);
|
||||||
|
fActRefreshOnFocus.OnExecute := @actRefreshOnFocusExecute;
|
||||||
|
fActRefreshOnFocus.Caption := 'Refresh on focused';
|
||||||
|
fActRefreshOnFocus.AutoCheck := true;
|
||||||
|
fActRefreshOnFocus.Checked := fRefreshOnFocus;
|
||||||
fActSelectInSource := TAction.Create(self);
|
fActSelectInSource := TAction.Create(self);
|
||||||
fActSelectInSource.OnExecute := @TreeDblClick;
|
fActSelectInSource.OnExecute := @TreeDblClick;
|
||||||
fActSelectInSource.Caption := 'Select in source';
|
fActSelectInSource.Caption := 'Select in source';
|
||||||
//
|
//
|
||||||
inherited;
|
inherited;
|
||||||
fID := 'ID_SEXPL';
|
|
||||||
//
|
//
|
||||||
ndAlias := Tree.Items[0];
|
ndAlias := Tree.Items[0];
|
||||||
ndClass := Tree.Items[1];
|
ndClass := Tree.Items[1];
|
||||||
|
@ -90,9 +119,53 @@ begin
|
||||||
//
|
//
|
||||||
Tree.OnDblClick := @TreeDblClick;
|
Tree.OnDblClick := @TreeDblClick;
|
||||||
Tree.PopupMenu := contextMenu;
|
Tree.PopupMenu := contextMenu;
|
||||||
DockMaster.GetAnchorSite(Self).Name := ID;
|
end;
|
||||||
|
{$ENDREGION}
|
||||||
|
|
||||||
|
{$REGION ICEWidgetPersist ------------------------------------------------------}
|
||||||
|
procedure TCEStaticExplorerWidget.optget_AutoRefresh(aWriter: TWriter);
|
||||||
|
begin
|
||||||
|
aWriter.WriteBoolean(fAutoRefresh);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCEStaticExplorerWidget.optset_AutoRefresh(aReader: TReader);
|
||||||
|
begin
|
||||||
|
fAutoRefresh := aReader.ReadBoolean;
|
||||||
|
fActAutoRefresh.Checked := fAutoRefresh;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEStaticExplorerWidget.optget_RefreshOnChange(aWriter: TWriter);
|
||||||
|
begin
|
||||||
|
aWriter.WriteBoolean(fRefreshOnChange);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEStaticExplorerWidget.optset_RefreshOnChange(aReader: TReader);
|
||||||
|
begin
|
||||||
|
fRefreshOnChange := aReader.ReadBoolean;
|
||||||
|
fActRefreshOnChange.Checked := fRefreshOnChange;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEStaticExplorerWidget.optget_RefreshOnFocus(aWriter: TWriter);
|
||||||
|
begin
|
||||||
|
aWriter.WriteBoolean(fRefreshOnFocus);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEStaticExplorerWidget.optset_RefreshOnFocus(aReader: TReader);
|
||||||
|
begin
|
||||||
|
fRefreshOnFocus := aReader.ReadBoolean;
|
||||||
|
fActRefreshOnFocus.Checked := fRefreshOnFocus;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEStaticExplorerWidget.declareProperties(aFiler: TFiler);
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
aFiler.DefineProperty(Name + '_AutoRefresh', @optset_AutoRefresh, @optget_AutoRefresh, true);
|
||||||
|
aFiler.DefineProperty(Name + '_RefreshOnChange', @optset_RefreshOnChange, @optget_RefreshOnChange, true);
|
||||||
|
aFiler.DefineProperty(Name + '_RefreshOnFocus', @optset_RefreshOnFocus, @optget_RefreshOnFocus, true);
|
||||||
|
end;
|
||||||
|
{$ENDREGION}
|
||||||
|
|
||||||
|
{$REGION ICEContextualActions---------------------------------------------------}
|
||||||
function TCEStaticExplorerWidget.contextName: string;
|
function TCEStaticExplorerWidget.contextName: string;
|
||||||
begin
|
begin
|
||||||
result := 'Static explorer';
|
result := 'Static explorer';
|
||||||
|
@ -100,15 +173,17 @@ end;
|
||||||
|
|
||||||
function TCEStaticExplorerWidget.contextActionCount: integer;
|
function TCEStaticExplorerWidget.contextActionCount: integer;
|
||||||
begin
|
begin
|
||||||
result := 3;
|
result := 5;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCEStaticExplorerWidget.contextAction(index: integer): TAction;
|
function TCEStaticExplorerWidget.contextAction(index: integer): TAction;
|
||||||
begin
|
begin
|
||||||
case index of
|
case index of
|
||||||
0: result := fActSelectInSource;
|
0: exit(fActSelectInSource);
|
||||||
1: result := fActRefresh;
|
1: exit(fActRefresh);
|
||||||
2: result := fActAutoRefresh;
|
2: exit(fActAutoRefresh);
|
||||||
|
3: exit(fActRefreshOnChange);
|
||||||
|
4: exit(fActRefreshOnFocus);
|
||||||
else result := nil;
|
else result := nil;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
@ -121,9 +196,44 @@ end;
|
||||||
|
|
||||||
procedure TCEStaticExplorerWidget.actAutoRefreshExecute(Sender: TObject);
|
procedure TCEStaticExplorerWidget.actAutoRefreshExecute(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
AutoRefresh := not AutoRefresh;
|
autoRefresh := not autoRefresh;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCEStaticExplorerWidget.actRefreshOnChangeExecute(Sender: TObject);
|
||||||
|
begin
|
||||||
|
refreshOnChange := not refreshOnChange;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEStaticExplorerWidget.actRefreshOnFocusExecute(Sender: TObject);
|
||||||
|
begin
|
||||||
|
refreshOnFocus := not refreshOnFocus;
|
||||||
|
end;
|
||||||
|
{$ENDREGION}
|
||||||
|
|
||||||
|
{$REGION ICEMultiDocMonitor ----------------------------------------------------}
|
||||||
|
procedure TCEStaticExplorerWidget.docFocused(const aDoc: TCESynMemo);
|
||||||
|
begin
|
||||||
|
fDoc := aDoc;
|
||||||
|
if fAutoRefresh then beginUpdateByDelay
|
||||||
|
else if fRefreshOnFocus then Rescan;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEStaticExplorerWidget.docChanged(const aDoc: TCESynMemo);
|
||||||
|
begin
|
||||||
|
if fDoc <> aDoc then exit;
|
||||||
|
if fAutoRefresh then beginUpdateByDelay
|
||||||
|
else if fRefreshOnChange then Rescan;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEStaticExplorerWidget.docClose(const aDoc: TCESynMemo);
|
||||||
|
begin
|
||||||
|
if fDoc <> aDoc then exit;
|
||||||
|
fDoc := nil;
|
||||||
|
beginUpdateByDelay;
|
||||||
|
end;
|
||||||
|
{$ENDREGION}
|
||||||
|
|
||||||
|
{$REGION ICEProjectMonitor -----------------------------------------------------}
|
||||||
procedure TCEStaticExplorerWidget.projNew(const aProject: TCEProject);
|
procedure TCEStaticExplorerWidget.projNew(const aProject: TCEProject);
|
||||||
begin
|
begin
|
||||||
fProj := aProject;
|
fProj := aProject;
|
||||||
|
@ -139,25 +249,6 @@ begin
|
||||||
fProj := nil;
|
fProj := nil;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEStaticExplorerWidget.docFocused(const aDoc: TCESynMemo);
|
|
||||||
begin
|
|
||||||
fDoc := aDoc;
|
|
||||||
beginUpdateByDelay;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCEStaticExplorerWidget.docChanged(const aDoc: TCESynMemo);
|
|
||||||
begin
|
|
||||||
if fDoc <> aDoc then exit;
|
|
||||||
beginUpdateByDelay;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCEStaticExplorerWidget.docClose(const aDoc: TCESynMemo);
|
|
||||||
begin
|
|
||||||
if fDoc <> aDoc then exit;
|
|
||||||
fDoc := nil;
|
|
||||||
beginUpdateByDelay;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCEStaticExplorerWidget.projCompile(const aProject: TCEProject);
|
procedure TCEStaticExplorerWidget.projCompile(const aProject: TCEProject);
|
||||||
begin
|
begin
|
||||||
stopUpdateByDelay;
|
stopUpdateByDelay;
|
||||||
|
@ -167,6 +258,7 @@ procedure TCEStaticExplorerWidget.projRun(const aProject: TCEProject);
|
||||||
begin
|
begin
|
||||||
stopUpdateByDelay;
|
stopUpdateByDelay;
|
||||||
end;
|
end;
|
||||||
|
{$ENDREGION}
|
||||||
|
|
||||||
procedure TCEStaticExplorerWidget.UpdateByDelay;
|
procedure TCEStaticExplorerWidget.UpdateByDelay;
|
||||||
begin
|
begin
|
||||||
|
|
|
@ -5,9 +5,8 @@ unit ce_synmemo;
|
||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, SynEdit, SynMemo, ce_d2syn, SynEditTextBuffer,
|
Classes, SysUtils, SynEdit, SynMemo, ce_d2syn, SynEditHighlighter, controls,
|
||||||
SynEditHighlighter, controls, LazSynEditText, SynPluginSyncroEdit,
|
LazSynEditText, SynPluginSyncroEdit, SynEditKeyCmds, ce_project, ce_common;
|
||||||
SynEditKeyCmds, ce_project, ce_common;
|
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
|
@ -78,9 +77,7 @@ begin
|
||||||
fFilename := '<new document>';
|
fFilename := '<new document>';
|
||||||
fModified := false;
|
fModified := false;
|
||||||
|
|
||||||
// http://forum.lazarus.freepascal.org/index.php/topic,25213.0.html
|
TextBuffer.AddNotifyHandler(senrUndoRedoAdded, @changeNotify);
|
||||||
//TSynEditStringList(Lines).AddNotifyHandler(senrUndoRedoAdded, @changeNotify);
|
|
||||||
onChange := @changeNotify;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCESynMemo.setFocus;
|
procedure TCESynMemo.setFocus;
|
||||||
|
@ -102,7 +99,7 @@ procedure TCESynMemo.SetHighlighter(const Value: TSynCustomHighlighter);
|
||||||
begin
|
begin
|
||||||
inherited;
|
inherited;
|
||||||
fIsDSource := Highlighter = D2Syn;
|
fIsDSource := Highlighter = D2Syn;
|
||||||
fIsConfig := Highlighter = mainForm.LfmSyn;
|
fIsConfig := Highlighter = CEMainForm.LfmSyn;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCESynMemo.identifierToD2Syn;
|
procedure TCESynMemo.identifierToD2Syn;
|
||||||
|
|
|
@ -17,7 +17,7 @@ type
|
||||||
PTCEWidget = ^TCEWidget;
|
PTCEWidget = ^TCEWidget;
|
||||||
|
|
||||||
{ TCEWidget }
|
{ TCEWidget }
|
||||||
TCEWidget = class(TForm, ICEContextualActions, ICEProjectMonitor, ICEMultiDocMonitor)
|
TCEWidget = class(TForm, ICEContextualActions, ICEProjectMonitor, ICEMultiDocMonitor, ICEWidgetPersist)
|
||||||
Content: TPanel;
|
Content: TPanel;
|
||||||
Back: TPanel;
|
Back: TPanel;
|
||||||
contextMenu: TPopupMenu;
|
contextMenu: TPopupMenu;
|
||||||
|
@ -32,6 +32,11 @@ type
|
||||||
procedure setLoopInt(aValue: Integer);
|
procedure setLoopInt(aValue: Integer);
|
||||||
procedure updaterAutoProc(Sender: TObject);
|
procedure updaterAutoProc(Sender: TObject);
|
||||||
procedure updaterLatchProc(Sender: TObject);
|
procedure updaterLatchProc(Sender: TObject);
|
||||||
|
//
|
||||||
|
procedure optget_LoopInterval(aWriter: TWriter);
|
||||||
|
procedure optset_LoopInterval(aReader: TReader);
|
||||||
|
procedure optget_UpdaterDelay(aWriter: TWriter);
|
||||||
|
procedure optset_UpdaterDelay(aReader: TReader);
|
||||||
protected
|
protected
|
||||||
fID: string;
|
fID: string;
|
||||||
// a descendant overrides to implementi a periodic update.
|
// a descendant overrides to implementi a periodic update.
|
||||||
|
@ -78,9 +83,13 @@ type
|
||||||
function contextName: string; virtual;
|
function contextName: string; virtual;
|
||||||
function contextActionCount: integer; virtual;
|
function contextActionCount: integer; virtual;
|
||||||
function contextAction(index: integer): TAction; virtual;
|
function contextAction(index: integer): TAction; virtual;
|
||||||
|
//
|
||||||
|
procedure beforeSave(sender: TObject); virtual;
|
||||||
|
procedure declareProperties(aFiler: TFiler); virtual;
|
||||||
|
procedure afterLoad(sender: TObject); virtual;
|
||||||
|
//
|
||||||
// returns true if one of the three updater is processing.
|
// returns true if one of the three updater is processing.
|
||||||
property updating: boolean read fUpdating;
|
property updating: boolean read fUpdating;
|
||||||
property ID: string read fID write fID;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
(**
|
(**
|
||||||
|
@ -110,14 +119,14 @@ implementation
|
||||||
(*******************************************************************************
|
(*******************************************************************************
|
||||||
* TCEWidget
|
* TCEWidget
|
||||||
*)
|
*)
|
||||||
|
|
||||||
|
{$REGION Standard Comp/Obj------------------------------------------------------}
|
||||||
constructor TCEWidget.create(aOwner: TComponent);
|
constructor TCEWidget.create(aOwner: TComponent);
|
||||||
var
|
var
|
||||||
i: NativeInt;
|
i: NativeInt;
|
||||||
itm: TmenuItem;
|
itm: TmenuItem;
|
||||||
begin
|
begin
|
||||||
inherited;
|
inherited;
|
||||||
fID := 'ID_XXXX';
|
|
||||||
|
|
||||||
fUpdaterAuto := TTimer.Create(self);
|
fUpdaterAuto := TTimer.Create(self);
|
||||||
fUpdaterAuto.Interval := 70;
|
fUpdaterAuto.Interval := 70;
|
||||||
fUpdaterAuto.OnTimer := @updaterAutoProc;
|
fUpdaterAuto.OnTimer := @updaterAutoProc;
|
||||||
|
@ -126,10 +135,6 @@ begin
|
||||||
updaterByLoopInterval := 70;
|
updaterByLoopInterval := 70;
|
||||||
updaterByDelayDuration := 1250;
|
updaterByDelayDuration := 1250;
|
||||||
|
|
||||||
DockMaster.MakeDockable(Self, true, true, true);
|
|
||||||
DockMaster.GetAnchorSite(Self).Header.HeaderPosition := adlhpTop;
|
|
||||||
DockMaster.GetAnchorSite(Self).Name := ID;
|
|
||||||
|
|
||||||
for i := 0 to contextActionCount-1 do
|
for i := 0 to contextActionCount-1 do
|
||||||
begin
|
begin
|
||||||
itm := TMenuItem.Create(self);
|
itm := TMenuItem.Create(self);
|
||||||
|
@ -144,7 +149,107 @@ destructor TCEWidget.destroy;
|
||||||
begin
|
begin
|
||||||
inherited;
|
inherited;
|
||||||
end;
|
end;
|
||||||
|
{$ENDREGION}
|
||||||
|
|
||||||
|
{$REGION ICEWidgetPersist ------------------------------------------------------}
|
||||||
|
procedure TCEWidget.beforeSave(sender: TObject);
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEWidget.declareProperties(aFiler: TFiler);
|
||||||
|
begin
|
||||||
|
// override rules: inhertied must be called. No dots in the property name, property name prefixed with the widget Name
|
||||||
|
aFiler.DefineProperty(Name + '_updaterByLoopInterval', @optset_LoopInterval, @optget_LoopInterval, true);
|
||||||
|
aFiler.DefineProperty(Name + '_updaterByDelayDuration', @optset_UpdaterDelay, @optget_UpdaterDelay, true);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEWidget.afterLoad(sender: TObject);
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEWidget.optget_LoopInterval(aWriter: TWriter);
|
||||||
|
begin
|
||||||
|
aWriter.WriteInteger(fLoopInter);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEWidget.optset_LoopInterval(aReader: TReader);
|
||||||
|
begin
|
||||||
|
updaterByLoopInterval := aReader.ReadInteger;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEWidget.optget_UpdaterDelay(aWriter: TWriter);
|
||||||
|
begin
|
||||||
|
aWriter.WriteInteger(fDelayDur);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEWidget.optset_UpdaterDelay(aReader: TReader);
|
||||||
|
begin
|
||||||
|
updaterByDelayDuration := aReader.ReadInteger;
|
||||||
|
end;
|
||||||
|
{$ENDREGION}
|
||||||
|
|
||||||
|
{$REGION ICEContextualActions---------------------------------------------------}
|
||||||
|
function TCEWidget.contextName: string;
|
||||||
|
begin
|
||||||
|
result := '';
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TCEWidget.contextActionCount: integer;
|
||||||
|
begin
|
||||||
|
result := 0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TCEWidget.contextAction(index: integer): TAction;
|
||||||
|
begin
|
||||||
|
result := nil;
|
||||||
|
end;
|
||||||
|
{$ENDREGION}
|
||||||
|
|
||||||
|
{$REGION ICEMultiDocMonitor ----------------------------------------------------}
|
||||||
|
procedure TCEWidget.docNew(const aDoc: TCESynMemo);
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEWidget.docFocused(const aDoc: TCESynMemo);
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEWidget.docChanged(const aDoc: TCESynMemo);
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEWidget.docClose(const aDoc: TCESynMemo);
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
{$ENDREGION}
|
||||||
|
|
||||||
|
{$REGION ICEProjectMonitor -----------------------------------------------------}
|
||||||
|
procedure TCEWidget.projNew(const aProject: TCEProject);
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEWidget.projChange(const aProject: TCEProject);
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEWidget.projClose(const aProject: TCEProject);
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEWidget.projCompile(const aProject: TCEProject);
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEWidget.projRun(const aProject: TCEProject);
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEWidget.projFocused(const aProject: TCEProject);
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
{$ENDREGION}
|
||||||
|
|
||||||
|
{$REGION Updaters---------------------------------------------------------------}
|
||||||
procedure TCEWidget.setDelayDur(aValue: Integer);
|
procedure TCEWidget.setDelayDur(aValue: Integer);
|
||||||
begin
|
begin
|
||||||
if aValue < 100 then aValue := 100;
|
if aValue < 100 then aValue := 100;
|
||||||
|
@ -227,61 +332,7 @@ end;
|
||||||
procedure TCEWidget.UpdateByDelay;
|
procedure TCEWidget.UpdateByDelay;
|
||||||
begin
|
begin
|
||||||
end;
|
end;
|
||||||
|
{$ENDREGION}
|
||||||
procedure TCEWidget.projNew(const aProject: TCEProject);
|
|
||||||
begin
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCEWidget.projChange(const aProject: TCEProject);
|
|
||||||
begin
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCEWidget.projClose(const aProject: TCEProject);
|
|
||||||
begin
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCEWidget.projCompile(const aProject: TCEProject);
|
|
||||||
begin
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCEWidget.projRun(const aProject: TCEProject);
|
|
||||||
begin
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCEWidget.projFocused(const aProject: TCEProject);
|
|
||||||
begin
|
|
||||||
end;
|
|
||||||
|
|
||||||
function TCEWidget.contextName: string;
|
|
||||||
begin
|
|
||||||
result := '';
|
|
||||||
end;
|
|
||||||
|
|
||||||
function TCEWidget.contextActionCount: integer;
|
|
||||||
begin
|
|
||||||
result := 0;
|
|
||||||
end;
|
|
||||||
|
|
||||||
function TCEWidget.contextAction(index: integer): TAction;
|
|
||||||
begin
|
|
||||||
result := nil;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCEWidget.docNew(const aDoc: TCESynMemo);
|
|
||||||
begin
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCEWidget.docFocused(const aDoc: TCESynMemo);
|
|
||||||
begin
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCEWidget.docChanged(const aDoc: TCESynMemo);
|
|
||||||
begin
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCEWidget.docClose(const aDoc: TCESynMemo);
|
|
||||||
begin
|
|
||||||
end;
|
|
||||||
|
|
||||||
(*******************************************************************************
|
(*******************************************************************************
|
||||||
* TCEWidgetList
|
* TCEWidgetList
|
||||||
|
|
|
@ -12,36 +12,59 @@ type
|
||||||
// TODO-cinterface: document content access/modification
|
// TODO-cinterface: document content access/modification
|
||||||
|
|
||||||
(**
|
(**
|
||||||
* An implementer is informed when a new document is added, focused or closed.
|
* An implementer can save and load some stuffs on application start/quit
|
||||||
*)
|
*)
|
||||||
ICEMultiDocMonitor = interface
|
ICEWidgetPersist = interface
|
||||||
procedure docNew(const aDoc: TCESynMemo);
|
// Coedit options are about to be saved.
|
||||||
procedure docFocused(const aDoc: TCESynMemo); // docSelected or docActivated
|
procedure beforeSave(sender: TObject);
|
||||||
procedure docChanged(const aDoc: TCESynMemo);
|
// some custom properties can be declared to aFiler.
|
||||||
procedure docClose(const aDoc: TCESynMemo);
|
procedure declareProperties(aFiler: TFiler);
|
||||||
|
// Coedit options has just been reloaded.
|
||||||
|
procedure afterLoad(sender: TObject);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
(**
|
(**
|
||||||
* An implementer declares some actions on demand.
|
* An implementer declares some actions on demand.
|
||||||
*)
|
*)
|
||||||
ICEContextualActions = interface
|
ICEContextualActions = interface
|
||||||
|
// declares a context name for the actions
|
||||||
function contextName: string;
|
function contextName: string;
|
||||||
|
// action count, called before contextAction()
|
||||||
function contextActionCount: integer;
|
function contextActionCount: integer;
|
||||||
|
// declares actions, called in loop, from 0 to contextActionCount-1
|
||||||
function contextAction(index: integer): TAction;
|
function contextAction(index: integer): TAction;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
(**
|
||||||
|
* An implementer is informed when a new document is added, focused or closed.
|
||||||
|
*)
|
||||||
|
ICEMultiDocMonitor = interface
|
||||||
|
// the new document aDoc has been created (empty, runnable, project source, ...).
|
||||||
|
procedure docNew(const aDoc: TCESynMemo);
|
||||||
|
// aDoc is the document being edited.
|
||||||
|
procedure docFocused(const aDoc: TCESynMemo); // rename to: docSelected or docActivated
|
||||||
|
// aDoc content has just been modified (edited, saved).
|
||||||
|
procedure docChanged(const aDoc: TCESynMemo);
|
||||||
|
// aDoc is about to be closed.
|
||||||
|
procedure docClose(const aDoc: TCESynMemo);
|
||||||
|
end;
|
||||||
|
|
||||||
(**
|
(**
|
||||||
* An implementer is informed when a project changes.
|
* An implementer is informed when a project changes.
|
||||||
*)
|
*)
|
||||||
ICEProjectMonitor = interface
|
ICEProjectMonitor = interface
|
||||||
|
// the new project aProject has been created/opened
|
||||||
procedure projNew(const aProject: TCEProject);
|
procedure projNew(const aProject: TCEProject);
|
||||||
|
// aProject has been modified: switches, source name, ...
|
||||||
procedure projChange(const aProject: TCEProject);
|
procedure projChange(const aProject: TCEProject);
|
||||||
|
// aProject is about to be closed.
|
||||||
procedure projClose(const aProject: TCEProject);
|
procedure projClose(const aProject: TCEProject);
|
||||||
|
// aProject is about to be compiled.
|
||||||
procedure projCompile(const aProject: TCEProject);
|
procedure projCompile(const aProject: TCEProject);
|
||||||
|
// aProject is about to be executed.
|
||||||
procedure projRun(const aProject: TCEProject);
|
procedure projRun(const aProject: TCEProject);
|
||||||
|
// not used yet: the active project is now aProject
|
||||||
// not used yet: (project group)
|
procedure projFocused(const aProject: TCEProject); // rename: projSelected or projActivated
|
||||||
procedure projFocused(const aProject: TCEProject); // projSelected or projActivated
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
Loading…
Reference in New Issue