diff --git a/lazproj/coedit.lpi b/lazproj/coedit.lpi
index d8c15036..ee5ed635 100644
--- a/lazproj/coedit.lpi
+++ b/lazproj/coedit.lpi
@@ -114,22 +114,25 @@
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
diff --git a/lazproj/coedit.lpr b/lazproj/coedit.lpr
index 85d751c0..f56281e4 100644
--- a/lazproj/coedit.lpr
+++ b/lazproj/coedit.lpr
@@ -6,17 +6,18 @@ uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
- Interfaces, Forms, lazcontrols, runtimetypeinfocontrols, ce_widget,
- ce_dmdwrap, ce_common, ce_synmemo, ce_main, ce_messages, ce_editor,
- ce_projinspect, ce_projconf, jsonparser, ce_project,
- ce_widgettypes, ce_staticexplorer, ce_search, ce_dlang, ce_dlangutils;
+ Interfaces, Forms, lazcontrols, runtimetypeinfocontrols, anchordockpkg,
+ AnchorDocking, AnchorDockStorage, AnchorDockOptionsDlg,
+ ce_widget, ce_dmdwrap, ce_common, ce_synmemo, ce_main, ce_messages, ce_editor,
+ ce_projinspect, ce_projconf, jsonparser, ce_project, ce_widgettypes,
+ ce_staticexplorer, ce_search, ce_dlang, ce_dlangutils;
{$R *.res}
begin
RequireDerivedFormResource := True;
Application.Initialize;
- Application.CreateForm(TCEMainForm, mainForm);
+ Application.CreateForm(TCEMainForm, CEMainForm);
Application.Run;
end.
diff --git a/src/ce_common.pas b/src/ce_common.pas
index 11d2f3f5..fb333433 100644
--- a/src/ce_common.pas
+++ b/src/ce_common.pas
@@ -5,7 +5,11 @@ unit ce_common;
interface
uses
- Classes, SysUtils, ActnList, dialogs, forms, process;
+ Classes, SysUtils,
+ {$IFDEF WINDOWS}
+ Windows,
+ {$ENDIF}
+ ActnList, dialogs, forms, process;
const
@@ -40,6 +44,8 @@ type
TMRUFileList = class(TMRUList)
protected
function checkItem(const S: string): boolean; override;
+ public
+ procedure assign(src: TPersistent); override;
end;
(**
@@ -107,6 +113,11 @@ type
*)
function shortenPath(const aPath: string; charThresh: Word = 80): string;
+ (**
+ * Returns the folder Coedit documents and settings.
+ *)
+ function getDocPath: string;
+
implementation
procedure TProcessEx.Assign(aValue: TPersistent);
@@ -183,6 +194,15 @@ begin
clearOutOfRange;
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;
begin
exit( inherited checkItem(S) and fileExists(S));
@@ -390,4 +410,24 @@ begin
exit( format('%s%s...%s',[drv,directorySeparator,pth1]) );
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.
diff --git a/src/ce_editor.pas b/src/ce_editor.pas
index a383decd..305e7a0f 100644
--- a/src/ce_editor.pas
+++ b/src/ce_editor.pas
@@ -8,8 +8,8 @@ uses
Classes, SysUtils, FileUtil, ExtendedNotebook, Forms, Controls, lcltype,
Graphics, SynEditKeyCmds, ComCtrls, SynEditHighlighter, ExtCtrls, Menus,
SynEditHighlighterFoldBase, SynMacroRecorder, SynPluginSyncroEdit, SynEdit,
- SynHighlighterLFM, ce_widget, ce_d2syn, ce_synmemo, ce_common, AnchorDocking,
- ce_dlang, ce_project;
+ SynHighlighterLFM, AnchorDocking, ce_widget, ce_d2syn, ce_synmemo, ce_dlang,
+ ce_project;
type
{ TCEEditorWidget }
@@ -67,7 +67,6 @@ var
bmp: TBitmap;
begin
inherited;
- fID := 'ID_EDIT';
//
tokLst := TLexTokenList.Create;
errLst := TLexErrorList.Create;
@@ -80,7 +79,6 @@ begin
finally
bmp.Free;
end;
- DockMaster.GetAnchorSite(Self).Name := ID;
end;
destructor TCEEditorWidget.destroy;
@@ -122,7 +120,7 @@ begin
fSyncEdit.Editor := curr;
//
if pageControl.ActivePageIndex <> -1 then
- mainForm.docFocusedNotify(Self, pageControl.ActivePageIndex);
+ CEMainForm.docFocusedNotify(Self, pageControl.ActivePageIndex);
//
if (pageControl.ActivePage.Caption = '') then
begin
@@ -139,8 +137,8 @@ end;
procedure TCEEditorWidget.PageControlCloseTabClicked(Sender: TObject);
begin
- // closeBtn not implemented
- mainForm.actFileClose.Execute;
+ // closeBtn not implemented (Win.)
+ CEMainForm.actFileClose.Execute;
end;
procedure TCEEditorWidget.addEditor;
@@ -158,9 +156,7 @@ begin
memo.OnKeyUp := @memoKeyDown;
memo.OnKeyPress := @memoKeyPress;
memo.OnMouseDown := @memoMouseDown;
-
- // http://forum.lazarus.freepascal.org/index.php/topic,25213.0.html
- //memo.OnChange := @memoChange;
+ memo.OnChange := @memoChange;
memo.OnMouseMove := @memoMouseMove;
//
@@ -172,7 +168,7 @@ end;
procedure TCEEditorWidget.removeEditor(const aIndex: NativeInt);
begin
- mainForm.MessageWidget.ClearMessages(msEditor);
+ CEMainForm.MessageWidget.ClearMessages(msEditor);
editor[aIndex].OnChange:= nil;
pageControl.Pages[aIndex].Free;
end;
@@ -249,15 +245,15 @@ begin
if not fKeyChanged then exit;
//
fKeyChanged := false;
- mainForm.docChangeNotify(Self, editorIndex);
+ CEMainForm.docChangeNotify(Self, editorIndex);
if ed.Lines.Count = 0 then exit;
//
- mainForm.MessageWidget.ClearMessages(msEditor);
- lex( ed.Lines.Text, tokLst );
+ CEMainForm.MessageWidget.ClearMessages(msEditor);
+ lex(ed.Lines.Text, tokLst);
- checkSyntacticErrors( tokLst, errLst);
+ checkSyntacticErrors(tokLst, errLst);
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);
md := '';
@@ -266,7 +262,7 @@ begin
if md = '' then md := extractFileName(ed.fileName);
pageControl.ActivePage.Caption := md;
- mainForm.MessageWidget.scrollToBack;
+ CEMainForm.MessageWidget.scrollToBack;
tokLst.Clear;
errLst.Clear;
end;
diff --git a/src/ce_main.lfm b/src/ce_main.lfm
index bef1ffac..0fd3802d 100644
--- a/src/ce_main.lfm
+++ b/src/ce_main.lfm
@@ -1,16 +1,14 @@
object CEMainForm: TCEMainForm
- Left = 1435
- Height = 53
- Top = 140
+ Left = 1071
+ Height = 49
+ Top = 187
Width = 745
AllowDropFiles = True
Caption = 'Coedit'
- ChildSizing.Layout = cclTopToBottomThenLeftToRight
- DockSite = True
+ ChildSizing.Layout = cclLeftToRightThenTopToBottom
Menu = mainMenu
OnCloseQuery = FormCloseQuery
OnDropFiles = FormDropFiles
- Position = poMainFormCenter
ShowHint = True
LCLVersion = '1.2.4.0'
object mainMenu: TMainMenu
@@ -824,9 +822,81 @@ object CEMainForm: TCEMainForm
end
object MenuItem57: TMenuItem
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
object MenuItem58: TMenuItem
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
object MenuItem14: TMenuItem
@@ -2006,39 +2076,39 @@ object CEMainForm: TCEMainForm
0033000000330000003300000033000000330000003300000033000000330000
00330000002C0000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B9851BB0B781
- 14FFB57E0FFFB57D0CFFB57C0AFFB57C0AFFB57C0AFFB57D0CFFB57E0FFFB781
- 14FFB9851BB0FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B78114FFFFEC
- CEFFFCE6C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE6C4FFFFEC
- CEFFB78114FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B67F12FFFCEA
- D1FFD88700FFF1F1EEFFB2AFAAFFB4B0A9FFB2AFAAFFF1F1EEFFD88700FFFCEA
- D1FFB67F12FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B68012FFF8E3
- BFFFDD9112FFEFEDE9FFF2EBE0FFF4EBDFFFF2EBE0FFEFEDE9FFDD9112FFF8E3
- BFFFB68012FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B68014FFF7DB
- B0FFE09925FFEEE9E8FFB1AAA4FFB2AAA2FFB1AAA4FFEEE9E8FFE09925FFF7DB
- B0FFB68014FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B68114FFF4D5
- A2FFE2A237FFE8CCA4FFECE4E0FFEDE3DDFFECE4E0FFE8CCA4FFE2A237FFF4D5
- A2FFB68114FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B68115FFF3D1
- 99FFE5AB47FFE5A840FFE5A538FFE4A435FFE4A538FFE4A840FFE5AA47FFF3D1
- 99FFB68115FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B68115FFF3CD
- 90FFE7B052FFEACFABFFFFFFFFFFFCFDFFFFFBFDFFFFE7CDA9FFE7AF52FFF3CD
- 90FFB68115FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B68116FFF3CB
- 8AFFECB760FFF2EDECFF7F7977FFF1E8DFFFEDE5DEFFEDE8E8FFEBB65FFFF3CB
- 8AFFB68116FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B78218FFF6CD
- 8BFFF2C476FFF9FCFFFF8B8D90FFF8F9F7FFF4F5F5FFF4F7FBFFF2C375FFF6CD
- 8BFFB78218FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B7831CF2B782
- 18FFB68114FFB88010FFB9810FFFB87F0DFFB67E0CFFB67E0EFFB68013FFB782
- 18FFB7831CF2FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000300000
- 0033000000330000003300000033000000330000003300000033000000330000
- 003300000030FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
- FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
- FF00FFFFFF00FFFFFF00FFFFFF00B3B3B1EFB0B0ADFFAEAEACFFAEAEABFFADAD
+ FF00FFFFFF00FFFFFF00FFFFFF00B782187CB78114FFB57E0FFFB57C0BFFB57C
+ 09FFB57C09FFB57C09FFB57C09FFB57C09FFB57C09FFB57C09FFB57C09FFB57C
+ 0BFFB57E0FFFB78114FFB782187CB78115FFFFECCDFFFCE7C3FFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFCE7C3FFFFECCDFFB78115FFB68012FFFDECD1FFDA8600FFFFFFFFFFF1E5
+ D8FFF2E5D8FFF2E5D7FFF0E3D6FFEFE2D5FFF1E4D7FFF1E4D6FFEFE3D6FFFFFF
+ FFFFDA8600FFFDECD1FFB68012FFB68012FFFEE9C6FF714100FFFFFFFFFF7979
+ 7AFF7A7A7AFFA2A1A1FF9F9F9FFFF6ECDEFF777777FFA1A1A1FF9E9FA0FFFFFF
+ FFFF704100FFFEE9C6FFB68012FFB68113FFFCE3BCFF9B6104FFFDFCF9FFFDF5
+ E8FFFEF4E7FFFBF2E5FFFCF2E5FFFBF2E5FFFBF2E5FFFAF1E3FFF9F1E5FFFCFA
+ F7FF9A6104FFFCE3BCFFB68113FFB68014FFF8DCB0FFE0981CFFFBFBF8FF7978
+ 7BFFA2A0A2FFFCF6EAFF797879FFA3A1A3FFA09FA1FFFAF4E9FF9D9DA0FFF9F9
+ F6FFE0981CFFF8DCB0FFB68014FFB68014FFF6D8A7FFE09C27FFFBFFFFFFFCFB
+ F3FFFCF9EFFFFBF8EEFFFCFAF0FFFCFAF0FFFBF9EEFFF9F8EDFFFAF9F1FFFAFE
+ FEFFE09B27FFF6D8A7FFB68014FFB68114FFF4D4A0FFE1A136FFF2DEB7FFFCFF
+ FFFFFBFFFDFFFBFFFCFFFBFFFDFFFBFFFDFFFBFFFDFFFBFFFDFFFBFFFFFFF2DE
+ B7FFE1A136FFF4D4A0FFB68114FFB68115FFF3D09AFFE5A845FFE3A640FFE2A1
+ 36FFE29E2FFFE19D2DFFE19D2CFFE19D2CFFE19D2DFFE29E2FFFE2A136FFE3A6
+ 40FFE5A845FFF3D09AFFB68115FFB68115FFF3CE94FFE6AE51FFE5AB4BFFE6C9
+ A4FFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFDFFFFFFFEFFFFFFE6C9A4FFE5AC
+ 4BFFE6AE51FFF3CE94FFB68115FFB68116FFF3CC8EFFE8B25AFFE7AE51FFFCFF
+ FFFFECE0D7FFF1E4DAFFF1E5DAFFEDE0D5FFEADDD3FFE9DED5FFFBFFFFFFE7AE
+ 51FFE8B25AFFF3CC8EFFB68116FFB68116FFF1CB89FFE9B762FFE7B257FFF9F8
+ FBFFFDF7F2FF877F79FF4A4441FFFEF7F2FFEEE3D8FFEDE2D9FFF8F7FBFFE8B2
+ 57FFE9B762FFF1CB89FFB68116FFB68116FFF3CA87FFEDBC6DFFEBB761FFF8F5
+ F7FFFFFFFFFF4A4541FF948C88FFFFFFFFFFF1E8E0FFF0E7E0FFF7F4F7FFEBB7
+ 61FFEDBC6DFFF3CA87FFB68116FFB78218FFF6CD8BFFF2C67DFFF0C171FFFAF7
+ FBFFFFFFFFFF4C4848FF989392FFFFFFFFFFF7EFEAFFF6EFEBFFF9F6FAFFF0C1
+ 71FFF2C67DFFF6CD8BFFB78218FF976C1496B78218FFB68014FFB37A06FFD7CF
+ D2FFD8CEC9FF6C676653593A0053D9CFCEFFD5CAC3FFD4CAC4FFD6CFD2FFB37A
+ 06FFB68014FFB78218FF976C1496000000000000003300000033000000330000
+ 0033000000330000000800000008000000330000003300000033000000330000
+ 0033000000330000003300000000B3B3B1EFB0B0ADFFAEAEACFFAEAEABFFADAD
ABFFAEAEABFFAFAFADFFB0B0AED5000000000000000000000000000000000000
0000000000000000000000000000AFAFADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFE9E9E9FFAFAFADA70000000000000000000000000000
diff --git a/src/ce_main.pas b/src/ce_main.pas
index b5f6c078..601fcb10 100644
--- a/src/ce_main.pas
+++ b/src/ce_main.pas
@@ -7,7 +7,7 @@ interface
uses
Classes, SysUtils, FileUtil, SynEditKeyCmds, SynHighlighterLFM, Forms,
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_editor, ce_projinspect, ce_projconf, ce_staticexplorer, ce_search;
@@ -19,17 +19,21 @@ type
//TODO-cwidget: options editor
(**
* Encapsulates the options in a writable component.
- * note: likely to change however needed to test correctly Coedit.
*)
TCEOptions = class(TComponent)
private
fFileMru, fProjMru: TMruFileList;
- fWidgUpdDel, fWidgUpdPer: Integer;
fLeft, FTop, fWidth, fHeight: Integer;
+ fErrorFlg: boolean;
procedure setFileMru(aValue: TMruFileList);
procedure setProjMru(aValue: TMruFileList);
procedure saveLayout(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
property APP_Left: Integer read fLeft write fLeft;
property APP_Top: Integer read fTop write fTop;
@@ -38,17 +42,16 @@ type
//
property MRU_Files: TMruFileList read fFileMru write setFileMru;
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
constructor create(aOwner: TComponent); override;
destructor destroy; override;
+ procedure defineProperties(Filer: TFiler); override;
procedure saveToFile(const aFilename: string);
procedure loadFromFile(const aFilename: string);
procedure beforeSave;
procedure afterLoad;
- procedure DefineProperties(Filer: TFiler); override;
+ //
+ property hasLoaded: boolean read fErrorFlg;
end;
{ TCEMainForm }
@@ -204,6 +207,14 @@ type
fProjMru: TMruFileList;
fFileMru: TMruFileList;
+ //Init - Fina
+ procedure InitMRUs;
+ procedure InitWidgets;
+ procedure InitDocking;
+ procedure InitSettings;
+ procedure SaveSettings;
+ procedure SaveDocking;
+
// widget interfaces subroutines
procedure checkWidgetActions(const aWidget: TCEWidget);
procedure widgetShowFromAction(sender: TObject);
@@ -239,6 +250,8 @@ type
public
constructor create(aOwner: TComponent); override;
destructor destroy; override;
+ procedure DockMasterCreateControl(Sender: TObject; aName: string; var
+ AControl: TControl; DoDisableAutoSizing: boolean);
//
procedure openFile(const aFilename: string);
procedure docChangeNotify(Sender: TObject; const aIndex: Integer);
@@ -252,7 +265,7 @@ type
end;
var
- mainForm: TCEMainForm;
+ CEMainForm: TCEMainForm;
implementation
{$R *.lfm}
@@ -260,23 +273,34 @@ implementation
uses
SynMacroRecorder;
-{$REGION std comp methods ******************************************************}
+{$REGION Standard Comp/Obj------------------------------------------------------}
constructor TCEMainForm.create(aOwner: TComponent);
-var
- act: TAction;
- itm: TMenuItem;
- widg: TCEWidget;
- opts: TCEOptions;
begin
inherited create(aOwner);
+ InitMRUs;
+ InitWidgets;
+ InitDocking;
+ InitSettings;
//
+ newProj;
+end;
+
+procedure TCEMainForm.InitMRUs;
+begin
fProjMru := TMruFileList.Create;
fFileMru := TMruFileList.Create;
fProjMru.objectTag := mnuItemMruProj;
fFileMru.objectTag := mnuItemMruFile;
fProjMru.OnChange := @mruChange;
fFileMru.OnChange := @mruChange;
- //
+end;
+
+procedure TCEMainForm.InitWidgets;
+var
+ widg: TCEWidget;
+ act: TAction;
+ itm: TMenuItem;
+begin
fWidgList := TCEWidgetList.Create;
fMesgWidg := TCEMessagesWidget.create(nil);
fEditWidg := TCEEditorWidget.create(nil);
@@ -304,47 +328,101 @@ begin
itm.Action := act;
itm.Tag := ptrInt(widg);
mnuItemWin.Add(itm);
- widg.Show
end;
+end;
- Height := 0;
- DockMaster.MakeDockSite(Self, [akBottom], admrpChild, true);
+procedure TCEMainForm.InitDocking;
+var
+ i: NativeInt;
+ aManager: TAnchorDockManager;
+begin
+ DockMaster.MakeDockSite(Self, [akBottom], admrpChild);
+ DockMaster.OnCreateControl := @DockMasterCreateControl;
DockMaster.OnShowOptions := @ShowAnchorDockOptions;
DockMaster.HeaderStyle := adhsPoints;
- DockMaster.ManualDock(DockMaster.GetAnchorSite(fEditWidg), Self, alBottom);
- DockMaster.ManualDock(DockMaster.GetAnchorSite(fMesgWidg), Self, alBottom);
- DockMaster.ManualDock(DockMaster.GetAnchorSite(fStExpWidg), Self, alLeft);
+ if DockManager is TAnchorDockManager then begin
+ aManager:=TAnchorDockManager(DockManager);
+ 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.GetAnchorSite(fStExpWidg), alBottom, fStExpWidg);
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.GetAnchorSite(fProjWidg), alBottom, fProjWidg);
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);
try
- if fileExists('temp_coedit_options.txt') then
- opts.loadFromFile('temp_coedit_options.txt');
+ if fileExists(fname1) then
+ 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
opts.Free;
end;
-
-
end;
-destructor TCEMainForm.destroy;
+procedure TCEMainForm.SaveSettings;
var
opts: TCEOptions;
begin
opts := TCEOptions.create(nil);
try
- opts.saveToFile('temp_coedit_options.txt');
+ forceDirectory(getDocPath);
+ opts.saveToFile(getDocPath + 'options.txt');
finally
opts.Free;
end;
+end;
+
+procedure TCEMainForm.SaveDocking;
+var
+ xcfg: TXMLConfigStorage;
+begin
+ xcfg := TXMLConfigStorage.Create(getDocPath + 'docking.xml',true);
+ try
+ // is always missing
+ DockMaster.SaveLayoutToConfig(xcfg);
+ xcfg.WriteToDisk;
+ finally
+ xcfg.Free;
+ end;
+end;
+
+destructor TCEMainForm.destroy;
+begin
+ SaveSettings;
+ SaveDocking;
//
fWidgList.Free;
fMesgWidg.Free;
@@ -538,7 +616,7 @@ begin
end;
{$ENDREGION}
-{$REGION file ******************************************************************}
+{$REGION file ------------------------------------------------------------------}
procedure TCEMainForm.newFile;
begin
if fEditWidg = nil then exit;
@@ -740,7 +818,7 @@ begin
end;
{$ENDREGION}
-{$REGION edit ******************************************************************}
+{$REGION edit ------------------------------------------------------------------}
procedure TCEMainForm.actEdCopyExecute(Sender: TObject);
var
curr: TCESynMemo;
@@ -844,7 +922,7 @@ end;
{$ENDREGION}
-{$REGION run ******************************************************************}
+{$REGION run -------------------------------------------------------------------}
procedure TCEMainForm.ProcessOutputToMsg(const aProcess: TProcess; aCtxt: TMessageContext = msUnknown);
var
str: TMemoryStream;
@@ -1157,7 +1235,7 @@ begin
end;
{$ENDREGION}
-{$REGION view ******************************************************************}
+{$REGION view ------------------------------------------------------------------}
procedure TCEMainForm.widgetShowFromAction(sender: TObject);
var
widg: TCEWidget;
@@ -1170,9 +1248,21 @@ begin
win.Show;
win.BringToFront;
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}
-{$REGION project ***************************************************************}
+{$REGION project ---------------------------------------------------------------}
procedure TCEMainForm.projChange(sender: TObject);
var
widg: TCEWidget;
@@ -1323,15 +1413,13 @@ begin
end;
{$ENDREGION}
-{$REGION options ***************************************************************}
+{$REGION options ---------------------------------------------------------------}
constructor TCEOptions.create(aOwner: TComponent);
begin
inherited;
fFileMru := TMruFileList.Create;
fProjMru := TMruFileList.Create;
//
- fWidgUpdDel := 70;
- fWidgUpdPer := 1000;
fLeft := 0;
fTop := 0;
fWidth := 800;
@@ -1345,6 +1433,20 @@ begin
inherited;
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);
begin
fFileMru.Assign(aValue);
@@ -1388,59 +1490,66 @@ begin
end;
end;
-
-procedure TCEOptions.DefineProperties(Filer: TFiler);
+procedure TCEOptions.defineProperties(Filer: TFiler);
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;
procedure TCEOptions.beforeSave;
begin
- fLeft := mainForm.Left;
- fTop := mainForm.Top;
- fWidth := mainForm.Width;
- fHeight := mainForm.Height;
+ fLeft := CEMainForm.Left;
+ fTop := CEMainForm.Top;
+ fWidth := CEMainForm.Width;
+ fHeight := CEMainForm.Height;
//
- fFileMru.Assign(mainForm.fFileMru);
- fProjMru.Assign(mainForm.fProjMru);
+ fFileMru.Assign(CEMainForm.fFileMru);
+ fProjMru.Assign(CEMainForm.fProjMru);
//
- fWidgUpdPer := mainForm.fEditWidg.updaterByLoopInterval;
- fWidgUpdDel := mainForm.fEditWidg.updaterByDelayDuration;
+ CEMainForm.fEditWidg.beforeSave(nil);
+ CEMainForm.fFindWidg.beforeSave(nil);
+ CEMainForm.fMesgWidg.beforeSave(nil);
+ CEMainForm.fPrjCfWidg.beforeSave(nil);
+ CEMainForm.fProjWidg.beforeSave(nil);
+ CEMainForm.fStExpWidg.beforeSave(nil);
end;
procedure TCEOptions.saveToFile(const aFilename: string);
begin
+ fErrorFlg := true;
beforeSave;
- saveCompToTxtFile(Self, aFilename);
+ ce_common.saveCompToTxtFile(self, aFilename);
end;
procedure TCEOptions.loadFromFile(const aFilename: string);
begin
- try
- loadCompFromTxtFile(Self, aFilename);
- except
- exit;
- end;
+ fErrorFlg := true;
+ loadCompFromTxtFile(self, aFilename, @readerPropNoFound, @readerError);
afterLoad;
end;
procedure TCEOptions.afterLoad;
-var
- widg: TCEWidget;
begin
- mainForm.Left := fLeft;
- mainForm.Top := fTop;
- mainForm.Width := fWidth;
- mainForm.Height := fHeight;
+ CEMainForm.Left := fLeft;
+ CEMainForm.Top := fTop;
+ CEMainForm.Width := fWidth;
+ CEMainForm.Height := fHeight;
//
- mainForm.fFileMru.Assign(fFileMru);
- mainForm.fProjMru.Assign(fProjMru);
+ CEMainForm.fFileMru.Assign(fFileMru);
+ CEMainForm.fProjMru.Assign(fProjMru);
//
- for widg in mainForm.fWidgList do
- begin
- widg.updaterByDelayDuration := fWidgUpdDel;
- widg.updaterByLoopInterval := fWidgUpdPer;
- end;
+ CEMainForm.fEditWidg.afterLoad(nil);
+ CEMainForm.fFindWidg.afterLoad(nil);
+ CEMainForm.fMesgWidg.afterLoad(nil);
+ CEMainForm.fPrjCfWidg.afterLoad(nil);
+ CEMainForm.fProjWidg.afterLoad(nil);
+ CEMainForm.fStExpWidg.afterLoad(nil);
end;
{$ENDREGION}
diff --git a/src/ce_messages.pas b/src/ce_messages.pas
index 5cdb78c5..240ca4cd 100644
--- a/src/ce_messages.pas
+++ b/src/ce_messages.pas
@@ -7,7 +7,7 @@ interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, ComCtrls,
lcltype, ce_widget, ActnList, Menus, clipbrd, AnchorDocking, ce_project,
- ce_synmemo, LMessages;
+ ce_synmemo;
type
@@ -103,11 +103,9 @@ begin
fActSaveMsg.caption := 'Save selected message(s) to...';
//
inherited;
- fID := 'ID_MSGS';
//
List.PopupMenu := contextMenu;
List.OnDeletion := @ListDeletion;
- DockMaster.GetAnchorSite(Self).Name := ID;
end;
procedure TCEMessagesWidget.clearOutOfRangeMessg;
diff --git a/src/ce_projconf.pas b/src/ce_projconf.pas
index e2d3bea4..4951ad2f 100644
--- a/src/ce_projconf.pas
+++ b/src/ce_projconf.pas
@@ -47,9 +47,7 @@ implementation
constructor TCEProjectConfigurationWidget.create(aOwner: TComponent);
begin
inherited;
- fID := 'PROJ_CONF';
Tree.Selected := Tree.Items.GetLastNode;
- DockMaster.GetAnchorSite(Self).Name := ID;
end;
procedure TCEProjectConfigurationWidget.projNew(const aProject: TCEProject);
@@ -106,7 +104,7 @@ begin
nme := '';
beginUpdateByEvent;
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;
fProj.ConfigurationIndex := cfg.Index;
endUpdateByEvent;
diff --git a/src/ce_project.pas b/src/ce_project.pas
index 9b7e9a12..25b10c7c 100644
--- a/src/ce_project.pas
+++ b/src/ce_project.pas
@@ -240,7 +240,7 @@ begin
for rel in fSrcs do if rel <> '' then
begin
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;
TCompilerConfiguration(fOptsColl.Items[fConfIx]).getOpts(aList);
end;
diff --git a/src/ce_projinspect.lfm b/src/ce_projinspect.lfm
index 388df53c..758bc7f8 100644
--- a/src/ce_projinspect.lfm
+++ b/src/ce_projinspect.lfm
@@ -209,7 +209,7 @@ inherited CEProjectInspectWidget: TCEProjectInspectWidget
object btnRemFile: TSpeedButton
Left = 28
Height = 24
- Hint = 'remove a source file from the project'
+ Hint = 'remove selected sources file(s) from the project'
Top = 0
Width = 28
Align = alLeft
diff --git a/src/ce_projinspect.pas b/src/ce_projinspect.pas
index 48ad9f3f..e2a52f28 100644
--- a/src/ce_projinspect.pas
+++ b/src/ce_projinspect.pas
@@ -65,13 +65,11 @@ begin
fActSelConf.OnUpdate := @actUpdate;
//
inherited;
- fID := 'ID_PROJ';
Tree.OnDblClick := @TreeDblClick;
fFileNode := Tree.Items[0];
fConfNode := Tree.Items[1];
//
Tree.PopupMenu := contextMenu;
- DockMaster.GetAnchorSite(Self).Name := ID;
end;
function TCEProjectInspectWidget.contextName: string;
@@ -137,7 +135,7 @@ begin
begin
fname := fProject.getAbsoluteSourceName(i);
if fileExists(fname) then
- mainForm.openFile(fname);
+ CEMainForm.openFile(fname);
end;
end
else if Tree.Selected.Parent = fConfNode then
@@ -195,7 +193,7 @@ begin
if fileExists(fProject.fileName) then
dir := extractFilePath(fProject.fileName)
else dir := '';
- if selectDirectory(dir, [], 0) then
+ if selectDirectory('sources', dir, dir, true, 0) then
begin
if FindFirst(dir + DirectorySeparator + '*.*', faAnyFile, sr ) = 0 then
try
@@ -218,19 +216,19 @@ begin
if Tree.Selected = nil then exit;
//
if Tree.Selected.Parent = fFileNode then
- begin
- fname := Tree.Selected.Text;
- i := fProject.Sources.IndexOf(fname);
- if i > -1 then fProject.Sources.Delete(i);
- UpdateByEvent;
- end
+ begin
+ fname := Tree.Selected.Text;
+ i := fProject.Sources.IndexOf(fname);
+ if i > -1 then fProject.Sources.Delete(i);
+ UpdateByEvent;
+ end;
end;
procedure TCEProjectInspectWidget.FormDropFiles(Sender: TObject; const FileNames: array of String);
var
fname: string;
begin
- mainForm.FormDropFiles(Sender, Filenames);
+ CEMainForm.FormDropFiles(Sender, Filenames);
if fProject = nil then exit;
for fname in Filenames do fProject.addSource(fname);
end;
diff --git a/src/ce_search.pas b/src/ce_search.pas
index 576d4989..457ef2e9 100644
--- a/src/ce_search.pas
+++ b/src/ce_search.pas
@@ -39,9 +39,12 @@ type
fSearchMru, fReplaceMru: TMruList;
fCancelAll: 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;
procedure actReplaceAllExecute(sender: TObject);
-
procedure replaceEvent(Sender: TObject; const ASearch, AReplace:
string; Line, Column: integer; var ReplaceAction: TSynReplaceAction);
protected
@@ -57,6 +60,8 @@ type
function contextActionCount: integer; override;
function contextAction(index: integer): TAction; override;
//
+ procedure declareProperties(aFiler: TFiler); override;
+ //
procedure actFindNextExecute(sender: TObject);
procedure actReplaceNextExecute(sender: TObject);
end;
@@ -64,6 +69,7 @@ type
implementation
{$R *.lfm}
+{$REGION Standard Comp/Obj------------------------------------------------------}
constructor TCESearchWidget.Create(aOwner: TComponent);
begin
fActFindNext := TAction.Create(self);
@@ -76,7 +82,6 @@ begin
fActReplaceAll.Caption := 'Replace all';
fActReplaceAll.OnExecute := @actReplaceAllExecute;
inherited;
- fID := 'ID_FIND';
//
btnFind.Action := fActFindNext;
btnReplace.Action := fActReplaceNext;
@@ -84,7 +89,6 @@ begin
//
fSearchMru := TMruList.Create;
fReplaceMru:= TMruList.Create;
- DockMaster.GetAnchorSite(Self).Name := ID;
end;
destructor TCESearchWidget.Destroy;
@@ -93,19 +97,39 @@ begin
fReplaceMru.Free;
inherited;
end;
+{$ENDREGION}
-procedure TCESearchWidget.docFocused(const aDoc: TCESynMemo);
+{$REGION ICEWidgetPersist ------------------------------------------------------}
+procedure TCESearchWidget.declareProperties(aFiler: TFiler);
begin
- fEditor := aDoc;
- UpdateByEvent;
+ inherited;
+ aFiler.DefineProperty(Name + '_FindMRU', @optset_SearchMru, @optget_SearchMru, true);
+ aFiler.DefineProperty(Name + '_ReplaceMRU', @optset_ReplaceMru, @optget_ReplaceMru, true);
end;
-procedure TCESearchWidget.docClose(const aDoc: TCESynMemo);
+procedure TCESearchWidget.optset_SearchMru(aReader: TReader);
begin
- if fEditor = aDoc then fEditor := nil;
- UpdateByEvent;
+ fSearchMru.DelimitedText := aReader.ReadString;
+ cbToFind.Items.DelimitedText := fSearchMru.DelimitedText;
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;
begin
exit('Search');
@@ -126,26 +150,6 @@ begin
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;
begin
result := [ssoRegExpr];
@@ -155,6 +159,28 @@ begin
if chkPrompt.Checked then result += [ssoPrompt];
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);
begin
if fEditor = nil then exit;
@@ -233,27 +259,40 @@ begin
fEditor.OnReplaceText := nil;
UpdateByEvent;
end;
+{$ENDREGION}
-function dlgReplaceAll: TModalResult;
-const
- Btns = [mbYes, mbNo, mbYesToAll, mbNoToAll];
+{$REGION ICEMultiDocMonitor ----------------------------------------------------}
+procedure TCESearchWidget.docFocused(const aDoc: TCESynMemo);
begin
- exit( MessageDlg('Coedit', 'Replace this match ?', mtConfirmation, Btns, ''));
+ fEditor := aDoc;
+ UpdateByEvent;
end;
-procedure TCESearchWidget.replaceEvent(Sender: TObject; const ASearch, AReplace:
- string; Line, Column: integer; var ReplaceAction: TSynReplaceAction);
+procedure TCESearchWidget.docClose(const aDoc: TCESynMemo);
begin
- case dlgReplaceAll of
- mrYes: ReplaceAction := raReplace;
- mrNo: ReplaceAction := raSkip;
- mrYesToAll: ReplaceAction := raReplaceAll;
- mrCancel, mrClose, mrNoToAll:
- begin
- ReplaceAction := raCancel;
- fCancelAll := true;
- end;
- end;
+ if fEditor = aDoc then fEditor := nil;
+ UpdateByEvent;
+end;
+{$ENDREGION}
+
+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;
procedure TCESearchWidget.UpdateByEvent;
diff --git a/src/ce_staticexplorer.pas b/src/ce_staticexplorer.pas
index 16cf8caf..ab28c26e 100644
--- a/src/ce_staticexplorer.pas
+++ b/src/ce_staticexplorer.pas
@@ -22,22 +22,37 @@ type
procedure TreeKeyPress(Sender: TObject; var Key: char);
private
fActRefresh: TAction;
+ fActRefreshOnChange: TAction;
+ fActRefreshOnFocus: TAction;
fActAutoRefresh: TAction;
fActSelectInSource: TAction;
fDoc: TCESynMemo;
fProj: TCEProject;
fAutoRefresh: boolean;
+ fRefreshOnChange: boolean;
+ fRefreshOnFocus: boolean;
ndAlias, ndClass, ndEnum, ndFunc: TTreeNode;
ndImp, ndIntf, ndMix, ndStruct, ndTmp, ndVar: TTreeNode;
procedure Rescan;
procedure TreeDblClick(Sender: TObject);
procedure actRefreshExecute(Sender: TObject);
procedure actAutoRefreshExecute(Sender: TObject);
+ procedure actRefreshOnChangeExecute(Sender: TObject);
+ procedure actRefreshOnFocusExecute(Sender: TObject);
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
procedure UpdateByDelay; override;
published
property autoRefresh: boolean read fAutoRefresh write fAutoRefresh;
+ property refreshOnChange: boolean read fRefreshOnChange write fRefreshOnChange;
+ property refreshOnFocus: boolean read fRefreshOnFocus write fRefreshOnFocus;
public
constructor create(aOwner: TComponent); override;
//
@@ -54,14 +69,19 @@ type
procedure projClose(const aProject: TCEProject); override;
procedure projCompile(const aProject: TCEProject); override;
procedure projRun(const aProject: TCEProject); override;
+ //
+ procedure declareProperties(aFiler: TFiler); override;
end;
implementation
{$R *.lfm}
+{$REGION Standard Comp/Obj------------------------------------------------------}
constructor TCEStaticExplorerWidget.create(aOwner: TComponent);
begin
fAutoRefresh := true;
+ fRefreshOnFocus := true;
+ fRefreshOnChange := true;
fActRefresh := TAction.Create(self);
fActRefresh.OnExecute := @actRefreshExecute;
fActRefresh.Caption := 'Refresh';
@@ -70,12 +90,21 @@ begin
fActAutoRefresh.Caption := 'Auto-refresh';
fActAutoRefresh.AutoCheck := true;
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.OnExecute := @TreeDblClick;
fActSelectInSource.Caption := 'Select in source';
//
inherited;
- fID := 'ID_SEXPL';
//
ndAlias := Tree.Items[0];
ndClass := Tree.Items[1];
@@ -90,9 +119,53 @@ begin
//
Tree.OnDblClick := @TreeDblClick;
Tree.PopupMenu := contextMenu;
- DockMaster.GetAnchorSite(Self).Name := ID;
+end;
+{$ENDREGION}
+
+{$REGION ICEWidgetPersist ------------------------------------------------------}
+procedure TCEStaticExplorerWidget.optget_AutoRefresh(aWriter: TWriter);
+begin
+ aWriter.WriteBoolean(fAutoRefresh);
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;
begin
result := 'Static explorer';
@@ -100,15 +173,17 @@ end;
function TCEStaticExplorerWidget.contextActionCount: integer;
begin
- result := 3;
+ result := 5;
end;
function TCEStaticExplorerWidget.contextAction(index: integer): TAction;
begin
case index of
- 0: result := fActSelectInSource;
- 1: result := fActRefresh;
- 2: result := fActAutoRefresh;
+ 0: exit(fActSelectInSource);
+ 1: exit(fActRefresh);
+ 2: exit(fActAutoRefresh);
+ 3: exit(fActRefreshOnChange);
+ 4: exit(fActRefreshOnFocus);
else result := nil;
end;
end;
@@ -121,9 +196,44 @@ end;
procedure TCEStaticExplorerWidget.actAutoRefreshExecute(Sender: TObject);
begin
- AutoRefresh := not AutoRefresh;
+ autoRefresh := not autoRefresh;
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);
begin
fProj := aProject;
@@ -139,25 +249,6 @@ begin
fProj := nil;
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);
begin
stopUpdateByDelay;
@@ -167,6 +258,7 @@ procedure TCEStaticExplorerWidget.projRun(const aProject: TCEProject);
begin
stopUpdateByDelay;
end;
+{$ENDREGION}
procedure TCEStaticExplorerWidget.UpdateByDelay;
begin
diff --git a/src/ce_synmemo.pas b/src/ce_synmemo.pas
index 55ebdb78..e1eb0ca1 100644
--- a/src/ce_synmemo.pas
+++ b/src/ce_synmemo.pas
@@ -5,9 +5,8 @@ unit ce_synmemo;
interface
uses
- Classes, SysUtils, SynEdit, SynMemo, ce_d2syn, SynEditTextBuffer,
- SynEditHighlighter, controls, LazSynEditText, SynPluginSyncroEdit,
- SynEditKeyCmds, ce_project, ce_common;
+ Classes, SysUtils, SynEdit, SynMemo, ce_d2syn, SynEditHighlighter, controls,
+ LazSynEditText, SynPluginSyncroEdit, SynEditKeyCmds, ce_project, ce_common;
type
@@ -78,9 +77,7 @@ begin
fFilename := '';
fModified := false;
- // http://forum.lazarus.freepascal.org/index.php/topic,25213.0.html
- //TSynEditStringList(Lines).AddNotifyHandler(senrUndoRedoAdded, @changeNotify);
- onChange := @changeNotify;
+ TextBuffer.AddNotifyHandler(senrUndoRedoAdded, @changeNotify);
end;
procedure TCESynMemo.setFocus;
@@ -102,7 +99,7 @@ procedure TCESynMemo.SetHighlighter(const Value: TSynCustomHighlighter);
begin
inherited;
fIsDSource := Highlighter = D2Syn;
- fIsConfig := Highlighter = mainForm.LfmSyn;
+ fIsConfig := Highlighter = CEMainForm.LfmSyn;
end;
procedure TCESynMemo.identifierToD2Syn;
diff --git a/src/ce_widget.pas b/src/ce_widget.pas
index 5cb7640e..91d4dcaf 100644
--- a/src/ce_widget.pas
+++ b/src/ce_widget.pas
@@ -17,7 +17,7 @@ type
PTCEWidget = ^TCEWidget;
{ TCEWidget }
- TCEWidget = class(TForm, ICEContextualActions, ICEProjectMonitor, ICEMultiDocMonitor)
+ TCEWidget = class(TForm, ICEContextualActions, ICEProjectMonitor, ICEMultiDocMonitor, ICEWidgetPersist)
Content: TPanel;
Back: TPanel;
contextMenu: TPopupMenu;
@@ -32,6 +32,11 @@ type
procedure setLoopInt(aValue: Integer);
procedure updaterAutoProc(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
fID: string;
// a descendant overrides to implementi a periodic update.
@@ -78,9 +83,13 @@ type
function contextName: string; virtual;
function contextActionCount: integer; 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.
property updating: boolean read fUpdating;
- property ID: string read fID write fID;
end;
(**
@@ -110,14 +119,14 @@ implementation
(*******************************************************************************
* TCEWidget
*)
+
+{$REGION Standard Comp/Obj------------------------------------------------------}
constructor TCEWidget.create(aOwner: TComponent);
var
i: NativeInt;
itm: TmenuItem;
begin
inherited;
- fID := 'ID_XXXX';
-
fUpdaterAuto := TTimer.Create(self);
fUpdaterAuto.Interval := 70;
fUpdaterAuto.OnTimer := @updaterAutoProc;
@@ -126,10 +135,6 @@ begin
updaterByLoopInterval := 70;
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
begin
itm := TMenuItem.Create(self);
@@ -144,7 +149,107 @@ destructor TCEWidget.destroy;
begin
inherited;
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);
begin
if aValue < 100 then aValue := 100;
@@ -227,61 +332,7 @@ end;
procedure TCEWidget.UpdateByDelay;
begin
end;
-
-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;
+{$ENDREGION}
(*******************************************************************************
* TCEWidgetList
diff --git a/src/ce_widgettypes.pas b/src/ce_widgettypes.pas
index 60750f61..a25b78ef 100644
--- a/src/ce_widgettypes.pas
+++ b/src/ce_widgettypes.pas
@@ -12,36 +12,59 @@ type
// 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
- procedure docNew(const aDoc: TCESynMemo);
- procedure docFocused(const aDoc: TCESynMemo); // docSelected or docActivated
- procedure docChanged(const aDoc: TCESynMemo);
- procedure docClose(const aDoc: TCESynMemo);
+ ICEWidgetPersist = interface
+ // Coedit options are about to be saved.
+ procedure beforeSave(sender: TObject);
+ // some custom properties can be declared to aFiler.
+ procedure declareProperties(aFiler: TFiler);
+ // Coedit options has just been reloaded.
+ procedure afterLoad(sender: TObject);
end;
(**
* An implementer declares some actions on demand.
*)
ICEContextualActions = interface
+ // declares a context name for the actions
function contextName: string;
+ // action count, called before contextAction()
function contextActionCount: integer;
+ // declares actions, called in loop, from 0 to contextActionCount-1
function contextAction(index: integer): TAction;
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.
*)
ICEProjectMonitor = interface
+ // the new project aProject has been created/opened
procedure projNew(const aProject: TCEProject);
+ // aProject has been modified: switches, source name, ...
procedure projChange(const aProject: TCEProject);
+ // aProject is about to be closed.
procedure projClose(const aProject: TCEProject);
+ // aProject is about to be compiled.
procedure projCompile(const aProject: TCEProject);
+ // aProject is about to be executed.
procedure projRun(const aProject: TCEProject);
-
- // not used yet: (project group)
- procedure projFocused(const aProject: TCEProject); // projSelected or projActivated
+ // not used yet: the active project is now aProject
+ procedure projFocused(const aProject: TCEProject); // rename: projSelected or projActivated
end;
implementation