mirror of https://gitlab.com/basile.b/dexed.git
This commit is contained in:
parent
ca50a3a51c
commit
ae31885fe3
|
@ -201,19 +201,22 @@
|
||||||
<UnitName Value="ce_projinspect"/>
|
<UnitName Value="ce_projinspect"/>
|
||||||
</Unit10>
|
</Unit10>
|
||||||
<Unit11>
|
<Unit11>
|
||||||
<Filename Value="..\src\ce_jsoninfos.pas"/>
|
|
||||||
<IsPartOfProject Value="True"/>
|
|
||||||
<UnitName Value="ce_jsoninfos"/>
|
|
||||||
</Unit11>
|
|
||||||
<Unit12>
|
|
||||||
<Filename Value="..\src\ce_project.pas"/>
|
<Filename Value="..\src\ce_project.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="ce_project"/>
|
<UnitName Value="ce_project"/>
|
||||||
</Unit12>
|
</Unit11>
|
||||||
<Unit13>
|
<Unit12>
|
||||||
<Filename Value="..\src\ce_widgettypes.pas"/>
|
<Filename Value="..\src\ce_widgettypes.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="ce_widgettypes"/>
|
<UnitName Value="ce_widgettypes"/>
|
||||||
|
</Unit12>
|
||||||
|
<Unit13>
|
||||||
|
<Filename Value="..\src\ce_staticexplorer.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<ComponentName Value="CEStaticExplorerWidget"/>
|
||||||
|
<HasResources Value="True"/>
|
||||||
|
<ResourceBaseClass Value="Form"/>
|
||||||
|
<UnitName Value="ce_staticexplorer"/>
|
||||||
</Unit13>
|
</Unit13>
|
||||||
</Units>
|
</Units>
|
||||||
</ProjectOptions>
|
</ProjectOptions>
|
||||||
|
|
|
@ -8,8 +8,8 @@ uses
|
||||||
{$ENDIF}{$ENDIF}
|
{$ENDIF}{$ENDIF}
|
||||||
Interfaces, Forms, lazcontrols, runtimetypeinfocontrols, ce_widget,
|
Interfaces, Forms, lazcontrols, runtimetypeinfocontrols, ce_widget,
|
||||||
ce_dmdwrap, ce_common, ce_synmemo, ce_main, ce_messages, ce_editor,
|
ce_dmdwrap, ce_common, ce_synmemo, ce_main, ce_messages, ce_editor,
|
||||||
ce_projinspect, ce_projconf, ce_jsoninfos, jsonparser, ce_project,
|
ce_projinspect, ce_projconf, jsonparser, ce_project,
|
||||||
ce_widgettypes;
|
ce_widgettypes, ce_staticexplorer;
|
||||||
|
|
||||||
{$R *.res}
|
{$R *.res}
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ unit ce_common;
|
||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, ActnList;
|
Classes, SysUtils, ActnList, dialogs, forms;
|
||||||
|
|
||||||
(**
|
(**
|
||||||
* Save a component with a readable aspect.
|
* Save a component with a readable aspect.
|
||||||
|
@ -29,12 +29,17 @@ uses
|
||||||
|
|
||||||
(**
|
(**
|
||||||
* Patches the directory separators from a string.
|
* Patches the directory separators from a string.
|
||||||
* This is used to ensure a that project saved on a plateform can be loaded
|
* This is used to ensure that a project saved on a plateform can be loaded
|
||||||
* on another one.
|
* on another one.
|
||||||
*)
|
*)
|
||||||
function patchPlateformPath(const aPath: string): string;
|
function patchPlateformPath(const aPath: string): string;
|
||||||
procedure patchPlateformPaths(const sPaths: TStrings);
|
procedure patchPlateformPaths(const sPaths: TStrings);
|
||||||
|
|
||||||
|
(**
|
||||||
|
* Ok/Cancel modal dialog
|
||||||
|
*)
|
||||||
|
function dlgOkCancel(const aMsg: string): TModalResult;
|
||||||
|
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
|
@ -225,4 +230,11 @@ begin
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function dlgOkCancel(const aMsg: string): TModalResult;
|
||||||
|
const
|
||||||
|
Btns = [mbOK,mbCancel];
|
||||||
|
begin
|
||||||
|
exit( MessageDlg('Coedit', aMsg, mtConfirmation, Btns, ''));
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
|
@ -317,6 +317,7 @@ begin
|
||||||
fCurrIAttrib.Foreground := clBlack;
|
fCurrIAttrib.Foreground := clBlack;
|
||||||
fCurrIAttrib.FrameEdges := sfeAround;
|
fCurrIAttrib.FrameEdges := sfeAround;
|
||||||
fCurrIAttrib.FrameColor := clGray;
|
fCurrIAttrib.FrameColor := clGray;
|
||||||
|
fCurrIAttrib.Background := cl3dlight;
|
||||||
|
|
||||||
fCommtAttrib.Style := [fsItalic];
|
fCommtAttrib.Style := [fsItalic];
|
||||||
fKeywdAttrib.Style := [fsBold];
|
fKeywdAttrib.Style := [fsBold];
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
inherited CEEditorWidget: TCEEditorWidget
|
inherited CEEditorWidget: TCEEditorWidget
|
||||||
Left = 1159
|
|
||||||
Height = 382
|
Height = 382
|
||||||
Top = 91
|
|
||||||
Width = 465
|
Width = 465
|
||||||
Caption = 'Source editor'
|
Caption = 'Source editor'
|
||||||
ClientHeight = 382
|
ClientHeight = 382
|
||||||
|
|
|
@ -20,11 +20,11 @@ type
|
||||||
procedure PageControlChange(Sender: TObject);
|
procedure PageControlChange(Sender: TObject);
|
||||||
procedure PageControlCloseTabClicked(Sender: TObject);
|
procedure PageControlCloseTabClicked(Sender: TObject);
|
||||||
protected
|
protected
|
||||||
procedure autoWidgetUpdate; override;
|
procedure UpdateByDelay; override;
|
||||||
private
|
private
|
||||||
// http://bugs.freepascal.org/view.php?id=26329
|
// http://bugs.freepascal.org/view.php?id=26329
|
||||||
|
fKeyChanged: boolean;
|
||||||
fSyncEdit: TSynPluginSyncroEdit;
|
fSyncEdit: TSynPluginSyncroEdit;
|
||||||
procedure focusedEditorChanged;
|
|
||||||
procedure memoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
procedure memoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||||
procedure memoMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
procedure memoMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
||||||
procedure memoChange(Sender: TObject);
|
procedure memoChange(Sender: TObject);
|
||||||
|
@ -38,6 +38,7 @@ type
|
||||||
constructor create(aOwner: TComponent); override;
|
constructor create(aOwner: TComponent); override;
|
||||||
procedure addEditor;
|
procedure addEditor;
|
||||||
procedure removeEditor(const aIndex: NativeInt);
|
procedure removeEditor(const aIndex: NativeInt);
|
||||||
|
procedure focusedEditorChanged;
|
||||||
//
|
//
|
||||||
property currentEditor: TCESynMemo read getCurrentEditor;
|
property currentEditor: TCESynMemo read getCurrentEditor;
|
||||||
property editor[index: NativeInt]: TCESynMemo read getEditor;
|
property editor[index: NativeInt]: TCESynMemo read getEditor;
|
||||||
|
@ -102,6 +103,9 @@ begin
|
||||||
md := getModuleName(curr.Lines);
|
md := getModuleName(curr.Lines);
|
||||||
if md = '' then md := extractFileName(curr.fileName);
|
if md = '' then md := extractFileName(curr.fileName);
|
||||||
pageControl.ActivePage.Caption := md;
|
pageControl.ActivePage.Caption := md;
|
||||||
|
//
|
||||||
|
if pageControl.ActivePageIndex <> -1 then
|
||||||
|
mainForm.docFocusedNotify(Self, pageControl.ActivePageIndex);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEEditorWidget.PageControlChange(Sender: TObject);
|
procedure TCEEditorWidget.PageControlChange(Sender: TObject);
|
||||||
|
@ -121,7 +125,6 @@ var
|
||||||
sheet: TTabSheet;
|
sheet: TTabSheet;
|
||||||
memo: TCESynMemo;
|
memo: TCESynMemo;
|
||||||
begin
|
begin
|
||||||
fNeedAutoUpdate := true;
|
|
||||||
sheet := pageControl.AddTabSheet;
|
sheet := pageControl.AddTabSheet;
|
||||||
memo := TCESynMemo.Create(sheet);
|
memo := TCESynMemo.Create(sheet);
|
||||||
//
|
//
|
||||||
|
@ -134,6 +137,7 @@ begin
|
||||||
memo.OnChange := @memoChange;
|
memo.OnChange := @memoChange;
|
||||||
memo.OnMouseMove := @memoMouseMove;
|
memo.OnMouseMove := @memoMouseMove;
|
||||||
//
|
//
|
||||||
|
pageControl.ActivePage := sheet;
|
||||||
//http://bugs.freepascal.org/view.php?id=26320
|
//http://bugs.freepascal.org/view.php?id=26320
|
||||||
focusedEditorChanged;
|
focusedEditorChanged;
|
||||||
end;
|
end;
|
||||||
|
@ -151,34 +155,35 @@ end;
|
||||||
|
|
||||||
procedure TCEEditorWidget.memoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
procedure TCEEditorWidget.memoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||||
begin
|
begin
|
||||||
fNeedAutoUpdate := true;
|
|
||||||
if (sender is TCESynMemo) then
|
if (sender is TCESynMemo) then
|
||||||
identifierToD2Syn(TCESynMemo(Sender));
|
identifierToD2Syn(TCESynMemo(Sender));
|
||||||
|
fKeyChanged := true;
|
||||||
|
beginUpdateByDelay;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEEditorWidget.memoMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
procedure TCEEditorWidget.memoMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
||||||
begin
|
begin
|
||||||
fNeedAutoUpdate := true;
|
|
||||||
if (sender is TCESynMemo) then
|
if (sender is TCESynMemo) then
|
||||||
identifierToD2Syn(TCESynMemo(Sender));
|
identifierToD2Syn(TCESynMemo(Sender));
|
||||||
|
beginUpdateByDelay;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEEditorWidget.memoMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
|
procedure TCEEditorWidget.memoMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
|
||||||
begin
|
begin
|
||||||
if ssLeft in Shift then
|
if ssLeft in Shift then
|
||||||
fNeedAutoUpdate := true;
|
beginUpdateByDelay;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEEditorWidget.memoChange(Sender: TObject);
|
procedure TCEEditorWidget.memoChange(Sender: TObject);
|
||||||
var
|
var
|
||||||
ed: TCESynMemo;
|
ed: TCESynMemo;
|
||||||
begin
|
begin
|
||||||
fNeedAutoUpdate := true;
|
|
||||||
ed := TCESynMemo(sender);
|
ed := TCESynMemo(sender);
|
||||||
ed.modified := true;
|
ed.modified := true;
|
||||||
|
beginUpdateByDelay;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEEditorWidget.autoWidgetUpdate;
|
procedure TCEEditorWidget.UpdateByDelay;
|
||||||
const
|
const
|
||||||
modstr: array[boolean] of string = ('...', 'MODIFIED');
|
modstr: array[boolean] of string = ('...', 'MODIFIED');
|
||||||
var
|
var
|
||||||
|
@ -191,6 +196,10 @@ begin
|
||||||
editorStatus.Panels[1].Text := modstr[ed.modified];
|
editorStatus.Panels[1].Text := modstr[ed.modified];
|
||||||
editorStatus.Panels[2].Text := ed.fileName;
|
editorStatus.Panels[2].Text := ed.fileName;
|
||||||
end;
|
end;
|
||||||
|
//
|
||||||
|
if fKeyChanged then if editorIndex <> -1 then
|
||||||
|
mainForm.docChangeNotify(Self, editorIndex);
|
||||||
|
fKeyChanged := false;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
|
@ -1,147 +0,0 @@
|
||||||
unit ce_jsoninfos;
|
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
|
||||||
|
|
||||||
interface
|
|
||||||
|
|
||||||
uses
|
|
||||||
Classes, SysUtils, jsonparser, fpjson;
|
|
||||||
|
|
||||||
type
|
|
||||||
|
|
||||||
TJSonLoader = class(TThread)
|
|
||||||
private
|
|
||||||
parser: TJSONParser;
|
|
||||||
public
|
|
||||||
Filename: string;
|
|
||||||
Data: TJsonData;
|
|
||||||
procedure Execute; override;
|
|
||||||
end;
|
|
||||||
|
|
||||||
TDSourceInfo = record
|
|
||||||
line: integer;
|
|
||||||
infs: string;
|
|
||||||
end;
|
|
||||||
|
|
||||||
TDSourceInfos = array of TDSourceInfo;
|
|
||||||
|
|
||||||
TInfKind = (ikModule, ikImport, ikFunction, ikAlias, ikClass, ikStruct,
|
|
||||||
ikMixin, ikEnum, ikTemplate);
|
|
||||||
|
|
||||||
const
|
|
||||||
InfKindStr: array[TInfKind] of string = ('module', 'import', 'function', 'alias',
|
|
||||||
'class', 'structure', 'mixin', 'enum', 'template');
|
|
||||||
|
|
||||||
InfKindNonModule = [ikImport..ikTemplate];
|
|
||||||
|
|
||||||
type
|
|
||||||
TJSonInfos = class
|
|
||||||
private
|
|
||||||
fFilenames: TStringList;
|
|
||||||
|
|
||||||
procedure FilesChanged(Sender: TObject);
|
|
||||||
procedure scan;
|
|
||||||
public
|
|
||||||
fData: array of TJsonData;
|
|
||||||
constructor create;
|
|
||||||
destructor destroy; override;
|
|
||||||
//
|
|
||||||
function getFileModule(const index: integer): TDSourceInfos;
|
|
||||||
function getMembers(const aFileIndex, aModuleIndex: integer; const aKind: TInfKind): TDSourceInfos;
|
|
||||||
property Files: TStringList read fFilenames;
|
|
||||||
end;
|
|
||||||
|
|
||||||
var
|
|
||||||
JSONInfos: TJSonInfos;
|
|
||||||
|
|
||||||
implementation
|
|
||||||
|
|
||||||
procedure TJSonLoader.Execute;
|
|
||||||
var
|
|
||||||
str: TMemoryStream;
|
|
||||||
begin
|
|
||||||
str := TMemoryStream.create;
|
|
||||||
parser := TJSONParser.Create(str);
|
|
||||||
try
|
|
||||||
str.LoadFromFile(Filename);
|
|
||||||
Data := parser.parse;
|
|
||||||
finally
|
|
||||||
str.free;
|
|
||||||
parser.free;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
constructor TJSonInfos.create;
|
|
||||||
begin
|
|
||||||
fFilenames := TStringList.Create;
|
|
||||||
fFilenames.OnChange := @FilesChanged;
|
|
||||||
end;
|
|
||||||
|
|
||||||
destructor TJSonInfos.destroy;
|
|
||||||
begin
|
|
||||||
fFilenames.Free;
|
|
||||||
inherited;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TJSonInfos.FilesChanged(Sender: TObject);
|
|
||||||
begin
|
|
||||||
scan;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TJSonInfos.scan;
|
|
||||||
var
|
|
||||||
fname: string;
|
|
||||||
str: TmemoryStream;
|
|
||||||
begin
|
|
||||||
setLength(fData,0);
|
|
||||||
str := tMemoryStream.Create;
|
|
||||||
for fname in fFilenames do
|
|
||||||
begin
|
|
||||||
str.LoadFromFile(fname);
|
|
||||||
str.Position := 0;
|
|
||||||
setLength(fData, length(fData)+1);
|
|
||||||
fData[high(fData)] := GetJSON(str);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
function TJSonInfos.getFileModule(const index: integer): TDSourceInfos;
|
|
||||||
var
|
|
||||||
memb: TJsonData;
|
|
||||||
i: nativeInt;
|
|
||||||
begin
|
|
||||||
setlength(result,0);
|
|
||||||
memb := fData[index].GetPath('');
|
|
||||||
for i := 0 to memb.Count-1 do
|
|
||||||
begin
|
|
||||||
if memb.Items[i].GetPath('kind').AsString <> 'module' then continue;
|
|
||||||
setlength(result, length(result) + 1);
|
|
||||||
result[high(result)].infs := memb.Items[i].GetPath('name').AsString;
|
|
||||||
result[high(result)].line := 0;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
function TJSonInfos.getMembers(const aFileIndex, aModuleIndex: integer; const aKind: TInfKind): TDSourceInfos;
|
|
||||||
var
|
|
||||||
memb: TJsonData;
|
|
||||||
i: nativeInt;
|
|
||||||
begin
|
|
||||||
setlength(result,0);
|
|
||||||
memb := fData[aFileIndex].items[aModuleIndex].GetPath('members');
|
|
||||||
for i := 0 to memb.Count-1 do
|
|
||||||
begin
|
|
||||||
if memb.Items[i].GetPath('kind').AsString <> InfKindStr[aKind]
|
|
||||||
then continue;
|
|
||||||
setlength(result, length(result) + 1);
|
|
||||||
result[high(result)].infs := memb.Items[i].GetPath('name').AsString;
|
|
||||||
if (aKind = ikModule) then result[high(result)].line := 0
|
|
||||||
else result[high(result)].line := memb.Items[i].GetPath('line').AsInt64;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
|
|
||||||
initialization
|
|
||||||
JSONInfos := TJSonInfos.create;
|
|
||||||
finalization
|
|
||||||
JSONInfos.Free;
|
|
||||||
end.
|
|
||||||
|
|
|
@ -5,7 +5,8 @@ object CEMainForm: TCEMainForm
|
||||||
Width = 745
|
Width = 745
|
||||||
AllowDropFiles = True
|
AllowDropFiles = True
|
||||||
Caption = 'Coedit'
|
Caption = 'Coedit'
|
||||||
ChildSizing.Layout = cclLeftToRightThenTopToBottom
|
ChildSizing.Layout = cclTopToBottomThenLeftToRight
|
||||||
|
DockSite = True
|
||||||
Menu = mainMenu
|
Menu = mainMenu
|
||||||
OnDropFiles = FormDropFiles
|
OnDropFiles = FormDropFiles
|
||||||
OnShow = FormShow
|
OnShow = FormShow
|
||||||
|
|
|
@ -7,9 +7,9 @@ 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,
|
Dialogs, Menus, ActnList, ExtCtrls, ComCtrls, process,
|
||||||
ce_jsoninfos, ce_common, ce_dmdwrap, ce_project, ce_synmemo,
|
ce_common, ce_dmdwrap, ce_project, ce_synmemo, ce_widget, ce_messages,
|
||||||
ce_widget, ce_messages, ce_editor, ce_projinspect, ce_projconf, ce_staticexplorer;
|
ce_editor, ce_projinspect, ce_projconf, ce_staticexplorer;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
|
@ -174,6 +174,8 @@ type
|
||||||
destructor destroy; override;
|
destructor destroy; override;
|
||||||
//
|
//
|
||||||
procedure openFile(const aFilename: string);
|
procedure openFile(const aFilename: string);
|
||||||
|
procedure docChangeNotify(Sender: TObject; const aIndex: Integer);
|
||||||
|
procedure docFocusedNotify(Sender: TObject; const aIndex: Integer);
|
||||||
//
|
//
|
||||||
property WidgetList: TCEWidgetList read fWidgList;
|
property WidgetList: TCEWidgetList read fWidgList;
|
||||||
property MessageWidget: TCEMessagesWidget read fMesgWidg;
|
property MessageWidget: TCEMessagesWidget read fMesgWidg;
|
||||||
|
@ -190,8 +192,6 @@ implementation
|
||||||
uses
|
uses
|
||||||
SynMacroRecorder;
|
SynMacroRecorder;
|
||||||
|
|
||||||
// TODO: warnings, OkCancel dialogs
|
|
||||||
|
|
||||||
{$REGION std comp methods ******************************************************}
|
{$REGION std comp methods ******************************************************}
|
||||||
constructor TCEMainForm.create(aOwner: TComponent);
|
constructor TCEMainForm.create(aOwner: TComponent);
|
||||||
var
|
var
|
||||||
|
@ -206,13 +206,13 @@ begin
|
||||||
fEditWidg := TCEEditorWidget.create(nil);
|
fEditWidg := TCEEditorWidget.create(nil);
|
||||||
fProjWidg := TCEProjectInspectWidget.create(nil);
|
fProjWidg := TCEProjectInspectWidget.create(nil);
|
||||||
fPrjCfWidg:= TCEProjectConfigurationWidget.create(nil);
|
fPrjCfWidg:= TCEProjectConfigurationWidget.create(nil);
|
||||||
//fStExpWidg:= TCEStaticExplorerWidget.create(nil);
|
fStExpWidg:= TCEStaticExplorerWidget.create(nil);
|
||||||
|
|
||||||
fWidgList.addWidget(@fMesgWidg);
|
fWidgList.addWidget(@fMesgWidg);
|
||||||
fWidgList.addWidget(@fEditWidg);
|
fWidgList.addWidget(@fEditWidg);
|
||||||
fWidgList.addWidget(@fProjWidg);
|
fWidgList.addWidget(@fProjWidg);
|
||||||
fWidgList.addWidget(@fPrjCfWidg);
|
fWidgList.addWidget(@fPrjCfWidg);
|
||||||
//fWidgList.addWidget(@fStExpWidg);
|
fWidgList.addWidget(@fStExpWidg);
|
||||||
|
|
||||||
for widg in fWidgList do widg.Show;
|
for widg in fWidgList do widg.Show;
|
||||||
|
|
||||||
|
@ -373,8 +373,8 @@ begin
|
||||||
j += 1;
|
j += 1;
|
||||||
end;
|
end;
|
||||||
fEditWidg.editor[i].fileName := str;
|
fEditWidg.editor[i].fileName := str;
|
||||||
fEditWidg.editor[i].modified := true;
|
fEditWidg.editor[i].modified := false;
|
||||||
fEditWidg.PageControl.PageIndex := i;
|
fEditWidg.focusedEditorChanged;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCEMainForm.findFile(const aFilename: string): NativeInt;
|
function TCEMainForm.findFile(const aFilename: string): NativeInt;
|
||||||
|
@ -403,12 +403,13 @@ begin
|
||||||
fEditWidg.addEditor;
|
fEditWidg.addEditor;
|
||||||
fEditWidg.editor[i].Lines.LoadFromFile(aFilename);
|
fEditWidg.editor[i].Lines.LoadFromFile(aFilename);
|
||||||
fEditWidg.editor[i].fileName := aFilename;
|
fEditWidg.editor[i].fileName := aFilename;
|
||||||
fEditWidg.PageControl.PageIndex := i;
|
fEditWidg.focusedEditorChanged;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEMainForm.saveFile(const edIndex: NativeInt);
|
procedure TCEMainForm.saveFile(const edIndex: NativeInt);
|
||||||
var
|
var
|
||||||
str: string;
|
str: string;
|
||||||
|
i: NativeInt;
|
||||||
begin
|
begin
|
||||||
if fEditWidg = nil then exit;
|
if fEditWidg = nil then exit;
|
||||||
if edIndex >= fEditWidg.editorCount then exit;
|
if edIndex >= fEditWidg.editorCount then exit;
|
||||||
|
@ -426,6 +427,9 @@ begin
|
||||||
finally
|
finally
|
||||||
fEditWidg.editor[edIndex].modified := false;
|
fEditWidg.editor[edIndex].modified := false;
|
||||||
end;
|
end;
|
||||||
|
//
|
||||||
|
for i := 0 to fWidgList.Count-1 do
|
||||||
|
fWidgList.widget[i].docChanged(fEditWidg.editor[edIndex]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEMainForm.saveFileAs(const edIndex: NativeInt; const aFilename: string);
|
procedure TCEMainForm.saveFileAs(const edIndex: NativeInt; const aFilename: string);
|
||||||
|
@ -442,6 +446,24 @@ begin
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCEMainForm.docChangeNotify(Sender: TObject; const aIndex: Integer);
|
||||||
|
var
|
||||||
|
i: NativeInt;
|
||||||
|
begin
|
||||||
|
for i := 0 to fWidgList.Count-1 do
|
||||||
|
if fWidgList.widget[i] <> Sender then
|
||||||
|
fWidgList.widget[i].docChanged(fEditWidg.editor[aIndex]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEMainForm.docFocusedNotify(Sender: TObject; const aIndex: Integer);
|
||||||
|
var
|
||||||
|
i: NativeInt;
|
||||||
|
begin
|
||||||
|
for i := 0 to fWidgList.Count-1 do
|
||||||
|
if fWidgList.widget[i] <> Sender then
|
||||||
|
fWidgList.widget[i].docFocused(fEditWidg.editor[aIndex]);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCEMainForm.actFileOpenExecute(Sender: TObject);
|
procedure TCEMainForm.actFileOpenExecute(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
if fEditWidg = nil then exit;
|
if fEditWidg = nil then exit;
|
||||||
|
@ -521,7 +543,18 @@ begin
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEMainForm.actFileCloseExecute(Sender: TObject);
|
procedure TCEMainForm.actFileCloseExecute(Sender: TObject);
|
||||||
|
var
|
||||||
|
curr: TCESynMemo;
|
||||||
|
i: NativeInt;
|
||||||
begin
|
begin
|
||||||
|
curr := fEditWidg.currentEditor;
|
||||||
|
if curr.modified then if dlgOkCancel(
|
||||||
|
'The latest mdofifications are not saved, continue ?') = mrCancel
|
||||||
|
then exit;
|
||||||
|
//
|
||||||
|
for i := 0 to fWidgList.Count-1 do
|
||||||
|
fWidgList.widget[i].docClose(fEditWidg.editor[fEditWidg.editorIndex]);
|
||||||
|
//
|
||||||
fEditWidg.removeEditor(fEditWidg.editorIndex);
|
fEditWidg.removeEditor(fEditWidg.editorIndex);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -539,7 +572,6 @@ begin
|
||||||
for fname in FileNames do
|
for fname in FileNames do
|
||||||
openFile(fname);
|
openFile(fname);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{$ENDREGION}
|
{$ENDREGION}
|
||||||
|
|
||||||
{$REGION edit ******************************************************************}
|
{$REGION edit ******************************************************************}
|
||||||
|
@ -663,6 +695,9 @@ begin
|
||||||
{$IFDEF DEBUG}{$WARNINGS ON}{$HINTS ON}{$ENDIF}
|
{$IFDEF DEBUG}{$WARNINGS ON}{$HINTS ON}{$ENDIF}
|
||||||
fEditWidg.editor[edIndex].Lines.SaveToFile(fname + '.d');
|
fEditWidg.editor[edIndex].Lines.SaveToFile(fname + '.d');
|
||||||
|
|
||||||
|
{$IFDEF RELEASE}
|
||||||
|
dmdProc.ShowWindow := swoHIDE;
|
||||||
|
{$ENDIF}
|
||||||
dmdproc.Options:= [poWaitOnExit, poStdErrToOutput, poUsePipes];
|
dmdproc.Options:= [poWaitOnExit, poStdErrToOutput, poUsePipes];
|
||||||
dmdproc.Executable:= 'dmd';
|
dmdproc.Executable:= 'dmd';
|
||||||
dmdproc.Parameters.Add(fname + '.d');
|
dmdproc.Parameters.Add(fname + '.d');
|
||||||
|
@ -738,6 +773,9 @@ begin
|
||||||
prjpath := extractFilePath(aProject.fileName);
|
prjpath := extractFilePath(aProject.fileName);
|
||||||
if directoryExists(prjpath) then chDir(prjpath);
|
if directoryExists(prjpath) then chDir(prjpath);
|
||||||
|
|
||||||
|
{$IFDEF RELEASE}
|
||||||
|
dmdProc.ShowWindow := swoHIDE;
|
||||||
|
{$ENDIF}
|
||||||
dmdproc.Options :=
|
dmdproc.Options :=
|
||||||
procopts[aProject.currentConfiguration.messagesOptions.verbose];
|
procopts[aProject.currentConfiguration.messagesOptions.verbose];
|
||||||
|
|
||||||
|
@ -909,40 +947,43 @@ begin
|
||||||
fProject := TCEProject.Create(self);
|
fProject := TCEProject.Create(self);
|
||||||
for widg in WidgetList do widg.projNew(fProject);
|
for widg in WidgetList do widg.projNew(fProject);
|
||||||
fProject.onChange := @projChange;
|
fProject.onChange := @projChange;
|
||||||
fProject.beforeChanged;
|
|
||||||
fProject.afterChanged;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEMainForm.saveProj;
|
procedure TCEMainForm.saveProj;
|
||||||
begin
|
begin
|
||||||
saveCompToTxtFile(fProject, fProject.fileName);
|
fProject.saveToFile(fProject.fileName);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEMainForm.saveProjAs(const aFilename: string);
|
procedure TCEMainForm.saveProjAs(const aFilename: string);
|
||||||
begin
|
begin
|
||||||
fProject.fileName := aFilename;
|
fProject.fileName := aFilename;
|
||||||
saveCompToTxtFile(fProject, aFilename);
|
fProject.saveToFile(fProject.fileName);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEMainForm.openProj(const aFilename: string);
|
procedure TCEMainForm.openProj(const aFilename: string);
|
||||||
begin
|
begin
|
||||||
closeProj;
|
closeProj;
|
||||||
newProj;
|
newProj;
|
||||||
fProject.beforeChanged;
|
fProject.loadFromFile(aFilename);
|
||||||
fProject.fileName := aFilename;
|
|
||||||
loadCompFromTxtFile(fProject, aFilename);
|
|
||||||
fProject.afterLoad;
|
|
||||||
fProject.afterChanged;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEMainForm.actProjNewExecute(Sender: TObject);
|
procedure TCEMainForm.actProjNewExecute(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
|
if fProject <> nil then if fProject.modified then if dlgOkCancel(
|
||||||
|
'The latest mdofifications are not saved, continue ?')
|
||||||
|
= mrCancel then exit;
|
||||||
|
|
||||||
closeProj;
|
closeProj;
|
||||||
newProj;
|
newProj;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEMainForm.actProjCloseExecute(Sender: TObject);
|
procedure TCEMainForm.actProjCloseExecute(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
|
if fProject = nil then exit;
|
||||||
|
if fProject.modified then if dlgOkCancel(
|
||||||
|
'The latest mdofifications are not saved, continue ?')
|
||||||
|
= mrCancel then exit;
|
||||||
|
|
||||||
closeProj;
|
closeProj;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -970,6 +1011,10 @@ end;
|
||||||
|
|
||||||
procedure TCEMainForm.actProjOpenExecute(Sender: TObject);
|
procedure TCEMainForm.actProjOpenExecute(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
|
if fProject <> nil then if fProject.modified then if dlgOkCancel(
|
||||||
|
'The latest mdofifications are not saved, continue ?')
|
||||||
|
= mrCancel then exit;
|
||||||
|
|
||||||
with TOpenDialog.Create(nil) do
|
with TOpenDialog.Create(nil) do
|
||||||
try
|
try
|
||||||
if execute then openProj(filename);
|
if execute then openProj(filename);
|
||||||
|
|
|
@ -1,24 +1,24 @@
|
||||||
inherited CEProjectConfigurationWidget: TCEProjectConfigurationWidget
|
inherited CEProjectConfigurationWidget: TCEProjectConfigurationWidget
|
||||||
Left = 1160
|
Left = 1160
|
||||||
Height = 276
|
Height = 277
|
||||||
Top = 723
|
Top = 722
|
||||||
Width = 474
|
Width = 463
|
||||||
Caption = 'Project configuration'
|
Caption = 'Project configuration'
|
||||||
ClientHeight = 276
|
ClientHeight = 277
|
||||||
ClientWidth = 474
|
ClientWidth = 463
|
||||||
inherited Back: TPanel
|
inherited Back: TPanel
|
||||||
Height = 276
|
Height = 277
|
||||||
Width = 474
|
Width = 463
|
||||||
ClientHeight = 276
|
ClientHeight = 277
|
||||||
ClientWidth = 474
|
ClientWidth = 463
|
||||||
inherited Content: TPanel
|
inherited Content: TPanel
|
||||||
Height = 276
|
Height = 277
|
||||||
Width = 474
|
Width = 463
|
||||||
ClientHeight = 276
|
ClientHeight = 277
|
||||||
ClientWidth = 474
|
ClientWidth = 463
|
||||||
object Tree: TTreeView[0]
|
object Tree: TTreeView[0]
|
||||||
Left = 4
|
Left = 4
|
||||||
Height = 242
|
Height = 243
|
||||||
Hint = 'filter configuration elements'
|
Hint = 'filter configuration elements'
|
||||||
Top = 30
|
Top = 30
|
||||||
Width = 150
|
Width = 150
|
||||||
|
@ -53,19 +53,19 @@ inherited CEProjectConfigurationWidget: TCEProjectConfigurationWidget
|
||||||
Left = 2
|
Left = 2
|
||||||
Height = 24
|
Height = 24
|
||||||
Top = 2
|
Top = 2
|
||||||
Width = 470
|
Width = 459
|
||||||
Align = alTop
|
Align = alTop
|
||||||
BorderSpacing.Around = 2
|
BorderSpacing.Around = 2
|
||||||
BevelOuter = bvNone
|
BevelOuter = bvNone
|
||||||
ClientHeight = 24
|
ClientHeight = 24
|
||||||
ClientWidth = 470
|
ClientWidth = 459
|
||||||
TabOrder = 1
|
TabOrder = 1
|
||||||
object selConf: TComboBox
|
object selConf: TComboBox
|
||||||
Left = 0
|
Left = 0
|
||||||
Height = 23
|
Height = 23
|
||||||
Hint = 'select a configuration'
|
Hint = 'select a configuration'
|
||||||
Top = 1
|
Top = 1
|
||||||
Width = 379
|
Width = 368
|
||||||
Align = alClient
|
Align = alClient
|
||||||
BorderSpacing.Top = 1
|
BorderSpacing.Top = 1
|
||||||
BorderSpacing.Right = 1
|
BorderSpacing.Right = 1
|
||||||
|
@ -75,7 +75,7 @@ inherited CEProjectConfigurationWidget: TCEProjectConfigurationWidget
|
||||||
TabOrder = 0
|
TabOrder = 0
|
||||||
end
|
end
|
||||||
object btnAddConf: TSpeedButton
|
object btnAddConf: TSpeedButton
|
||||||
Left = 380
|
Left = 369
|
||||||
Height = 24
|
Height = 24
|
||||||
Hint = 'add an empty configuration'
|
Hint = 'add an empty configuration'
|
||||||
Top = 0
|
Top = 0
|
||||||
|
@ -121,7 +121,7 @@ inherited CEProjectConfigurationWidget: TCEProjectConfigurationWidget
|
||||||
ShowCaption = False
|
ShowCaption = False
|
||||||
end
|
end
|
||||||
object btnDelConf: TSpeedButton
|
object btnDelConf: TSpeedButton
|
||||||
Left = 410
|
Left = 399
|
||||||
Height = 24
|
Height = 24
|
||||||
Hint = 'remove selected configuration'
|
Hint = 'remove selected configuration'
|
||||||
Top = 0
|
Top = 0
|
||||||
|
@ -167,7 +167,7 @@ inherited CEProjectConfigurationWidget: TCEProjectConfigurationWidget
|
||||||
ShowCaption = False
|
ShowCaption = False
|
||||||
end
|
end
|
||||||
object btnCloneConf: TSpeedButton
|
object btnCloneConf: TSpeedButton
|
||||||
Left = 440
|
Left = 429
|
||||||
Height = 24
|
Height = 24
|
||||||
Hint = 'clone selected configuration'
|
Hint = 'clone selected configuration'
|
||||||
Top = 0
|
Top = 0
|
||||||
|
@ -215,15 +215,15 @@ inherited CEProjectConfigurationWidget: TCEProjectConfigurationWidget
|
||||||
end
|
end
|
||||||
object Splitter1: TSplitter[2]
|
object Splitter1: TSplitter[2]
|
||||||
Left = 154
|
Left = 154
|
||||||
Height = 248
|
Height = 249
|
||||||
Top = 28
|
Top = 28
|
||||||
Width = 5
|
Width = 5
|
||||||
end
|
end
|
||||||
object Grid: TTIPropertyGrid[3]
|
object Grid: TTIPropertyGrid[3]
|
||||||
Left = 159
|
Left = 159
|
||||||
Height = 242
|
Height = 243
|
||||||
Top = 30
|
Top = 30
|
||||||
Width = 311
|
Width = 300
|
||||||
Align = alClient
|
Align = alClient
|
||||||
BorderSpacing.Top = 4
|
BorderSpacing.Top = 4
|
||||||
BorderSpacing.Right = 4
|
BorderSpacing.Right = 4
|
||||||
|
|
|
@ -32,7 +32,7 @@ type
|
||||||
fProj: TCEProject;
|
fProj: TCEProject;
|
||||||
function getGridTarget: TPersistent;
|
function getGridTarget: TPersistent;
|
||||||
protected
|
protected
|
||||||
procedure manualWidgetUpdate; override;
|
procedure UpdateByEvent; override;
|
||||||
public
|
public
|
||||||
constructor create(aOwner: TComponent); override;
|
constructor create(aOwner: TComponent); override;
|
||||||
procedure projNew(const aProject: TCEProject); override;
|
procedure projNew(const aProject: TCEProject); override;
|
||||||
|
@ -52,16 +52,16 @@ end;
|
||||||
|
|
||||||
procedure TCEProjectConfigurationWidget.projNew(const aProject: TCEProject);
|
procedure TCEProjectConfigurationWidget.projNew(const aProject: TCEProject);
|
||||||
begin
|
begin
|
||||||
beginManualWidgetUpdate;
|
beginUpdateByEvent;
|
||||||
fProj := aProject;
|
fProj := aProject;
|
||||||
endManualWidgetUpdate;
|
endUpdateByEvent;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEProjectConfigurationWidget.projChange(const aProject: TCEProject);
|
procedure TCEProjectConfigurationWidget.projChange(const aProject: TCEProject);
|
||||||
begin
|
begin
|
||||||
beginManualWidgetUpdate;
|
beginUpdateByEvent;
|
||||||
fProj := aProject;
|
fProj := aProject;
|
||||||
endManualWidgetUpdate;
|
endUpdateByEvent;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEProjectConfigurationWidget.projClose(const aProject: TCEProject);
|
procedure TCEProjectConfigurationWidget.projClose(const aProject: TCEProject);
|
||||||
|
@ -74,12 +74,12 @@ end;
|
||||||
procedure TCEProjectConfigurationWidget.selConfChange(Sender: TObject);
|
procedure TCEProjectConfigurationWidget.selConfChange(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
if fProj = nil then exit;
|
if fProj = nil then exit;
|
||||||
if isManualUpdating then exit;
|
if Updating then exit;
|
||||||
if selConf.ItemIndex = -1 then exit;
|
if selConf.ItemIndex = -1 then exit;
|
||||||
//
|
//
|
||||||
beginManualWidgetUpdate;
|
beginUpdateByEvent;
|
||||||
fProj.ConfigurationIndex := selConf.ItemIndex;
|
fProj.ConfigurationIndex := selConf.ItemIndex;
|
||||||
endManualWidgetUpdate;
|
endUpdateByEvent;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEProjectConfigurationWidget.TreeChange(Sender: TObject;
|
procedure TCEProjectConfigurationWidget.TreeChange(Sender: TObject;
|
||||||
|
@ -102,11 +102,11 @@ begin
|
||||||
if fProj = nil then exit;
|
if fProj = nil then exit;
|
||||||
//
|
//
|
||||||
nme := '';
|
nme := '';
|
||||||
beginManualWidgetUpdate;
|
beginUpdateByEvent;
|
||||||
cfg := fProj.addConfiguration;
|
cfg := fProj.addConfiguration;
|
||||||
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;
|
||||||
endManualWidgetUpdate;
|
endUpdateByEvent;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEProjectConfigurationWidget.btnDelConfClick(Sender: TObject);
|
procedure TCEProjectConfigurationWidget.btnDelConfClick(Sender: TObject);
|
||||||
|
@ -114,13 +114,13 @@ begin
|
||||||
if fProj = nil then exit;
|
if fProj = nil then exit;
|
||||||
if fProj.OptionsCollection.Count = 1 then exit;
|
if fProj.OptionsCollection.Count = 1 then exit;
|
||||||
//
|
//
|
||||||
beginManualWidgetUpdate;
|
beginUpdateByEvent;
|
||||||
Grid.TIObject := nil;
|
Grid.TIObject := nil;
|
||||||
Grid.Clear;
|
Grid.Clear;
|
||||||
Invalidate;
|
Invalidate;
|
||||||
fProj.OptionsCollection.Delete(selConf.ItemIndex);
|
fProj.OptionsCollection.Delete(selConf.ItemIndex);
|
||||||
fProj.ConfigurationIndex := 0;
|
fProj.ConfigurationIndex := 0;
|
||||||
endManualWidgetUpdate;
|
endUpdateByEvent;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEProjectConfigurationWidget.btnCloneCurrClick(Sender: TObject);
|
procedure TCEProjectConfigurationWidget.btnCloneCurrClick(Sender: TObject);
|
||||||
|
@ -131,13 +131,13 @@ begin
|
||||||
if fProj = nil then exit;
|
if fProj = nil then exit;
|
||||||
//
|
//
|
||||||
nme := '';
|
nme := '';
|
||||||
beginManualWidgetUpdate;
|
beginUpdateByEvent;
|
||||||
src := fProj.currentConfiguration;
|
src := fProj.currentConfiguration;
|
||||||
trg := fProj.addConfiguration;
|
trg := fProj.addConfiguration;
|
||||||
trg.assign(src);
|
trg.assign(src);
|
||||||
if InputQuery('Configuration name', '', nme) then trg.name := nme;
|
if InputQuery('Configuration name', '', nme) then trg.name := nme;
|
||||||
fProj.ConfigurationIndex := trg.Index;
|
fProj.ConfigurationIndex := trg.Index;
|
||||||
endManualWidgetUpdate;
|
endUpdateByEvent;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCEProjectConfigurationWidget.getGridTarget: TPersistent;
|
function TCEProjectConfigurationWidget.getGridTarget: TPersistent;
|
||||||
|
@ -159,7 +159,7 @@ begin
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEProjectConfigurationWidget.manualWidgetUpdate;
|
procedure TCEProjectConfigurationWidget.UpdateByEvent;
|
||||||
var
|
var
|
||||||
i: NativeInt;
|
i: NativeInt;
|
||||||
begin
|
begin
|
||||||
|
|
|
@ -50,12 +50,14 @@ type
|
||||||
procedure addSource(const aFilename: string);
|
procedure addSource(const aFilename: string);
|
||||||
function addConfiguration: TCompilerConfiguration;
|
function addConfiguration: TCompilerConfiguration;
|
||||||
procedure getOpts(const aList: TStrings);
|
procedure getOpts(const aList: TStrings);
|
||||||
procedure afterLoad;
|
procedure saveToFile(const aFilename: string);
|
||||||
|
procedure loadFromFile(const aFilename: string);
|
||||||
//
|
//
|
||||||
property configuration[ix: integer]: TCompilerConfiguration read getConfig;
|
property configuration[ix: integer]: TCompilerConfiguration read getConfig;
|
||||||
property currentConfiguration: TCompilerConfiguration read getCurrConf;
|
property currentConfiguration: TCompilerConfiguration read getCurrConf;
|
||||||
property fileName: string read fFilename write setFname;
|
property fileName: string read fFilename write setFname;
|
||||||
property onChange: TNotifyEvent read fOnChange write fOnChange;
|
property onChange: TNotifyEvent read fOnChange write fOnChange;
|
||||||
|
property modified: boolean read fModified;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
@ -71,6 +73,7 @@ begin
|
||||||
fSrcsCop := TStringList.Create;
|
fSrcsCop := TStringList.Create;
|
||||||
fOptsColl := TCollection.create(TCompilerConfiguration);
|
fOptsColl := TCollection.create(TCompilerConfiguration);
|
||||||
reset;
|
reset;
|
||||||
|
fModified := false;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TCEProject.destroy;
|
destructor TCEProject.destroy;
|
||||||
|
@ -140,11 +143,6 @@ begin
|
||||||
afterChanged;
|
afterChanged;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEProject.afterLoad;
|
|
||||||
begin
|
|
||||||
patchPlateformPaths(fSrcs);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCEProject.setConfIx(aValue: Integer);
|
procedure TCEProject.setConfIx(aValue: Integer);
|
||||||
begin
|
begin
|
||||||
if fConfIx = aValue then exit;
|
if fConfIx = aValue then exit;
|
||||||
|
@ -225,6 +223,7 @@ begin
|
||||||
fSrcs.Clear;
|
fSrcs.Clear;
|
||||||
fFilename := '';
|
fFilename := '';
|
||||||
afterChanged;
|
afterChanged;
|
||||||
|
fModified := false;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEProject.getOpts(const aList: TStrings);
|
procedure TCEProject.getOpts(const aList: TStrings);
|
||||||
|
@ -252,6 +251,21 @@ begin
|
||||||
result := expandFileNameEx(fBasePath, aFilename);
|
result := expandFileNameEx(fBasePath, aFilename);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCEProject.saveToFile(const aFilename: string);
|
||||||
|
begin
|
||||||
|
saveCompToTxtFile(self, aFilename);
|
||||||
|
fModified := false;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEProject.loadFromFile(const aFilename: string);
|
||||||
|
begin
|
||||||
|
Filename := aFilename;
|
||||||
|
loadCompFromTxtFile(self, aFilename);
|
||||||
|
patchPlateformPaths(fSrcs);
|
||||||
|
doChanged;
|
||||||
|
fModified := false;
|
||||||
|
end;
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
RegisterClasses([TCEProject]);
|
RegisterClasses([TCEProject]);
|
||||||
end.
|
end.
|
||||||
|
|
|
@ -1,28 +1,28 @@
|
||||||
inherited CEProjectInspectWidget: TCEProjectInspectWidget
|
inherited CEProjectInspectWidget: TCEProjectInspectWidget
|
||||||
Left = 1641
|
Left = 1640
|
||||||
Height = 384
|
Height = 383
|
||||||
Top = 89
|
Top = 90
|
||||||
Width = 263
|
Width = 264
|
||||||
AllowDropFiles = True
|
AllowDropFiles = True
|
||||||
Caption = 'Project inspector'
|
Caption = 'Project inspector'
|
||||||
ClientHeight = 384
|
ClientHeight = 383
|
||||||
ClientWidth = 263
|
ClientWidth = 264
|
||||||
OnDropFiles = FormDropFiles
|
OnDropFiles = FormDropFiles
|
||||||
inherited Back: TPanel
|
inherited Back: TPanel
|
||||||
Height = 384
|
Height = 383
|
||||||
Width = 263
|
Width = 264
|
||||||
ClientHeight = 384
|
ClientHeight = 383
|
||||||
ClientWidth = 263
|
ClientWidth = 264
|
||||||
inherited Content: TPanel
|
inherited Content: TPanel
|
||||||
Height = 384
|
Height = 383
|
||||||
Width = 263
|
Width = 264
|
||||||
ClientHeight = 384
|
ClientHeight = 383
|
||||||
ClientWidth = 263
|
ClientWidth = 264
|
||||||
object Tree: TTreeView[0]
|
object Tree: TTreeView[0]
|
||||||
Left = 2
|
Left = 2
|
||||||
Height = 354
|
Height = 353
|
||||||
Top = 28
|
Top = 28
|
||||||
Width = 259
|
Width = 260
|
||||||
Align = alClient
|
Align = alClient
|
||||||
AutoExpand = True
|
AutoExpand = True
|
||||||
BorderSpacing.Around = 2
|
BorderSpacing.Around = 2
|
||||||
|
@ -44,12 +44,12 @@ inherited CEProjectInspectWidget: TCEProjectInspectWidget
|
||||||
Left = 2
|
Left = 2
|
||||||
Height = 24
|
Height = 24
|
||||||
Top = 2
|
Top = 2
|
||||||
Width = 259
|
Width = 260
|
||||||
Align = alTop
|
Align = alTop
|
||||||
BorderSpacing.Around = 2
|
BorderSpacing.Around = 2
|
||||||
BevelOuter = bvNone
|
BevelOuter = bvNone
|
||||||
ClientHeight = 24
|
ClientHeight = 24
|
||||||
ClientWidth = 259
|
ClientWidth = 260
|
||||||
TabOrder = 1
|
TabOrder = 1
|
||||||
object btnAddFile: TSpeedButton
|
object btnAddFile: TSpeedButton
|
||||||
Left = 0
|
Left = 0
|
||||||
|
@ -190,12 +190,13 @@ inherited CEProjectInspectWidget: TCEProjectInspectWidget
|
||||||
end
|
end
|
||||||
object TreeFilterEdit1: TTreeFilterEdit
|
object TreeFilterEdit1: TTreeFilterEdit
|
||||||
Left = 114
|
Left = 114
|
||||||
Height = 20
|
Height = 23
|
||||||
Top = 2
|
Top = 0
|
||||||
Width = 143
|
Width = 114
|
||||||
ButtonWidth = 30
|
ButtonWidth = 28
|
||||||
NumGlyphs = 1
|
NumGlyphs = 1
|
||||||
Align = alClient
|
Align = alCustom
|
||||||
|
Anchors = [akTop, akLeft, akRight]
|
||||||
BorderSpacing.Around = 2
|
BorderSpacing.Around = 2
|
||||||
MaxLength = 0
|
MaxLength = 0
|
||||||
TabOrder = 0
|
TabOrder = 0
|
||||||
|
|
|
@ -25,7 +25,7 @@ type
|
||||||
procedure FormDropFiles(Sender: TObject; const FileNames: array of String);
|
procedure FormDropFiles(Sender: TObject; const FileNames: array of String);
|
||||||
procedure TreeKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
procedure TreeKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||||
protected
|
protected
|
||||||
procedure manualWidgetUpdate; override;
|
procedure UpdateByEvent; override;
|
||||||
private
|
private
|
||||||
fProject: TCEProject;
|
fProject: TCEProject;
|
||||||
fFileNode, fConfNode: TTreeNode;
|
fFileNode, fConfNode: TTreeNode;
|
||||||
|
@ -56,19 +56,19 @@ end;
|
||||||
procedure TCEProjectInspectWidget.projNew(const aProject: TCEProject);
|
procedure TCEProjectInspectWidget.projNew(const aProject: TCEProject);
|
||||||
begin
|
begin
|
||||||
fProject := aProject;
|
fProject := aProject;
|
||||||
manualWidgetUpdate;
|
UpdateByEvent;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEProjectInspectWidget.projChange(const aProject: TCEProject);
|
procedure TCEProjectInspectWidget.projChange(const aProject: TCEProject);
|
||||||
begin
|
begin
|
||||||
fProject := aProject;
|
fProject := aProject;
|
||||||
manualWidgetUpdate;
|
UpdateByEvent;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEProjectInspectWidget.projClose(const aProject: TCEProject);
|
procedure TCEProjectInspectWidget.projClose(const aProject: TCEProject);
|
||||||
begin
|
begin
|
||||||
fProject := nil;
|
fProject := nil;
|
||||||
manualWidgetUpdate;
|
UpdateByEvent;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEProjectInspectWidget.TreeKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
|
procedure TCEProjectInspectWidget.TreeKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
|
||||||
|
@ -99,7 +99,7 @@ begin
|
||||||
begin
|
begin
|
||||||
i := Tree.Selected.Index;
|
i := Tree.Selected.Index;
|
||||||
fProject.ConfigurationIndex := i;
|
fProject.ConfigurationIndex := i;
|
||||||
manualWidgetUpdate;
|
UpdateByEvent;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -163,7 +163,7 @@ 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);
|
||||||
manualWidgetUpdate;
|
UpdateByEvent;
|
||||||
end
|
end
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -176,7 +176,7 @@ begin
|
||||||
for fname in Filenames do fProject.addSource(fname);
|
for fname in Filenames do fProject.addSource(fname);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEProjectInspectWidget.manualWidgetUpdate;
|
procedure TCEProjectInspectWidget.UpdateByEvent;
|
||||||
var
|
var
|
||||||
src, conf: string;
|
src, conf: string;
|
||||||
itm: TTreeNode;
|
itm: TTreeNode;
|
||||||
|
|
|
@ -1,47 +1,74 @@
|
||||||
inherited CEStaticExplorerWidget: TCEStaticExplorerWidget
|
inherited CEStaticExplorerWidget: TCEStaticExplorerWidget
|
||||||
Left = 1569
|
Left = 1640
|
||||||
Height = 278
|
Height = 276
|
||||||
|
Top = 721
|
||||||
|
Width = 261
|
||||||
Caption = 'Static explorer'
|
Caption = 'Static explorer'
|
||||||
ClientHeight = 278
|
ClientHeight = 276
|
||||||
|
ClientWidth = 261
|
||||||
inherited Back: TPanel
|
inherited Back: TPanel
|
||||||
Height = 278
|
Height = 276
|
||||||
ClientHeight = 278
|
Width = 261
|
||||||
|
ClientHeight = 276
|
||||||
|
ClientWidth = 261
|
||||||
inherited Content: TPanel
|
inherited Content: TPanel
|
||||||
Height = 278
|
Height = 276
|
||||||
ClientHeight = 278
|
Width = 261
|
||||||
|
ClientHeight = 276
|
||||||
|
ClientWidth = 261
|
||||||
object Tree: TTreeView[0]
|
object Tree: TTreeView[0]
|
||||||
Left = 4
|
Left = 4
|
||||||
Height = 242
|
Height = 240
|
||||||
Top = 32
|
Top = 32
|
||||||
Width = 324
|
Width = 253
|
||||||
Align = alClient
|
Align = alClient
|
||||||
BorderSpacing.Around = 4
|
BorderSpacing.Around = 4
|
||||||
DefaultItemHeight = 18
|
DefaultItemHeight = 18
|
||||||
|
ExpandSignType = tvestPlusMinus
|
||||||
HideSelection = False
|
HideSelection = False
|
||||||
|
Images = imgList
|
||||||
ReadOnly = True
|
ReadOnly = True
|
||||||
ScrollBars = ssAutoBoth
|
ScrollBars = ssAutoBoth
|
||||||
|
SelectionColor = clActiveBorder
|
||||||
TabOrder = 0
|
TabOrder = 0
|
||||||
|
OnDeletion = TreeDeletion
|
||||||
Options = [tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw]
|
Options = [tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw]
|
||||||
|
Items.Data = {
|
||||||
|
F9FFFFFF020009000000000000000000000000000000FFFFFFFF000000000000
|
||||||
|
00000005000000416C6961730100000001000000FFFFFFFFFFFFFFFF00000000
|
||||||
|
000000000007000000436C6173736573020000000200000002000000FFFFFFFF
|
||||||
|
00000000000000000005000000456E756D730300000003000000FFFFFFFFFFFF
|
||||||
|
FFFF0000000000000000000800000046756E6374696F6E0400000004000000FF
|
||||||
|
FFFFFFFFFFFFFF00000000000000000007000000496D706F7274730500000005
|
||||||
|
000000FFFFFFFFFFFFFFFF000000000000000000050000004D6978696E060000
|
||||||
|
0006000000FFFFFFFFFFFFFFFF00000000000000000007000000537472756374
|
||||||
|
730700000007000000FFFFFFFFFFFFFFFF000000000000000000090000005465
|
||||||
|
6D706C617465730800000008000000FFFFFFFFFFFFFFFF000000000000000000
|
||||||
|
080000005661726961626C65
|
||||||
|
}
|
||||||
|
TreeLineColor = 14671839
|
||||||
|
TreeLinePenStyle = psSolid
|
||||||
end
|
end
|
||||||
object Panel1: TPanel[1]
|
object Panel1: TPanel[1]
|
||||||
Left = 2
|
Left = 2
|
||||||
Height = 26
|
Height = 26
|
||||||
Top = 2
|
Top = 2
|
||||||
Width = 328
|
Width = 257
|
||||||
Align = alTop
|
Align = alTop
|
||||||
BorderSpacing.Around = 2
|
BorderSpacing.Around = 2
|
||||||
BevelOuter = bvNone
|
BevelOuter = bvNone
|
||||||
ClientHeight = 26
|
ClientHeight = 26
|
||||||
ClientWidth = 328
|
ClientWidth = 257
|
||||||
TabOrder = 1
|
TabOrder = 1
|
||||||
object TreeFilterEdit1: TTreeFilterEdit
|
object TreeFilterEdit1: TTreeFilterEdit
|
||||||
Left = 2
|
Left = 2
|
||||||
Height = 22
|
Height = 23
|
||||||
Top = 2
|
Top = 2
|
||||||
Width = 324
|
Width = 226
|
||||||
ButtonWidth = 23
|
ButtonWidth = 23
|
||||||
NumGlyphs = 1
|
NumGlyphs = 1
|
||||||
Align = alClient
|
Align = alCustom
|
||||||
|
Anchors = [akTop, akLeft, akRight]
|
||||||
BorderSpacing.Around = 2
|
BorderSpacing.Around = 2
|
||||||
MaxLength = 0
|
MaxLength = 0
|
||||||
TabOrder = 0
|
TabOrder = 0
|
||||||
|
@ -50,4 +77,298 @@ inherited CEStaticExplorerWidget: TCEStaticExplorerWidget
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
object imgList: TImageList[2]
|
||||||
|
left = 32
|
||||||
|
Bitmap = {
|
||||||
|
4C69090000001000000010000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF000000000064646497626262FF616161FF626262FF6464649700000000FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00646464976F6E6EFFA6A5A4FFA9A8A9FFA6A5A4FF6D6E6EFF64646497FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00626363FFA7A5A5FF7D7B7AFF787675FF7D7B7AFFA7A5A5FF626363FFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00626363FF8E8C8BFF767371FF767371FF767371FF8E8C8BFF626363FFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00636464FF858381FF878481FF868381FF878481FF858381FF636464FFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00585858AC6F6E6EFF95918FFF989492FF95918FFF6F6E6EFF585858ACFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF000000001E585858AC636363FF626263FF636363FF585858AC0000001EFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00000000000000001E0000003300000033000000330000001E00000000FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF0000000000B9851C97B78319FFB68217FFB78319FFB9851C9700000000FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00B9851C97C6922EFFECC482FFEFC886FFECC482FFC6912CFFB9851C97FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00B78319FFEEC684FFE5AA49FFE2A641FFE5AA49FFEEC684FFB78319FFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00B78219FFEBB964FFE3A641FFE3A641FFE3A641FFEBB964FFB78219FFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00B7841AFFEAB45CFFE9B45CFFE8B35BFFE9B45CFFEAB45CFFB7841AFFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00A37519ACC5922FFFEDC074FFF1C47AFFEDC074FFC5922FFFA37519ACFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF000000001EA37519ACB78319FFB68218FFB78319FFA37519AC0000001EFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00000000000000001E0000003300000033000000330000001E00000000FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF0000000000008C4B97008A48FF008946FF008A48FF008C4B9700000000FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00008C4B97109F63FF74DAB7FF7ADEBDFF74DAB7FF109F63FF008C4B97FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00008A49FF66DAB4FF1EC68EFF16C388FF1EC68EFF66DAB4FF008A49FFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00008948FF25CF99FF00C07FFF00BE7EFF00C07FFF25CF99FF008948FFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00008A4AFF00C789FF00C88AFF00C689FF00C88AFF00C789FF008A4AFFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00007B43AC009B5CFF00CE90FF00D194FF00CE90FF009B5CFF007B43ACFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF000000001E007B43AC008A4AFF008949FF008A4AFF007B43AC0000001EFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00000000000000001E0000003300000033000000330000001E00000000FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00000000002C70DC97296DDBFF286CDBFF296DDBFF2C70DC9700000000FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF002D70DC974083E7FF95C2FFFF9BC7FFFF95C2FFFF4081E7FF2D70DC97FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF002B6EDBFF8FC3FFFF5AA4FFFF53A1FFFF5AA4FFFF8FC3FFFF2B6EDBFFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF002B6DDBFF65B2FFFF449EFFFF449DFFFF449EFFFF65B2FFFF2B6DDBFFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF002D6FDBFF4FA9FFFF4FA9FFFF4EA7FFFF4FA9FFFF4FA9FFFF2D6FDBFFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF002863C1AC387FE4FF56B2FFFF58B6FFFF56B2FFFF387FE4FF2863C1ACFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF000000001E2862C1AC2D6EDBFF2D6DDBFF2D6EDBFF2862C1AC0000001EFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00000000000000001E0000003300000033000000330000001E00000000FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00000000009A6BDC979968DBFF9968DBFF9968DBFF9A6BDC9700000000FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF009A6BDC97A17DE7FFC6BCFFFFC9C1FFFFC6BCFFFFA17DE7FF9A6BDC97FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF009A69DBFFC5BDFFFFAA9DFFFFA798FFFFAA9DFFFFC5BDFFFF9A69DBFFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF009A68DBFFB3ACFFFFA396FFFFA396FFFFA396FFFFB3ACFFFF9A68DBFFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF009A69DBFFACA5FFFFACA5FFFFABA3FFFFACA5FFFFACA5FFFF9A69DBFFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00885EC1ACA17BE4FFB3B1FFFFB4B6FFFFB3B1FFFFA17BE4FF885EC1ACFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF000000001E885EC1AC9A69DBFF9A68DBFF9A69DBFF885EC1AC0000001EFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00000000000000001E0000003300000033000000330000001E00000000FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF0000000000AB499C97AA459AFFA94499FFAA459AFFAB499C9700000000FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00AB499C97B462AAFFD8B8D9FFDBBEDDFFD8B8D9FFB462AAFFAB499C97FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00AA469AFFDCB6DAFFCA91C9FFC78CC5FFCA91C9FFDCB6DAFFAA469AFFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00A94699FFD69ED4FFCA83C7FFCA83C6FFCA83C7FFD69ED4FFA94699FFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00AA489AFFD68ED1FFD68ED2FFD58DD1FFD68ED2FFD68ED1FFAA489AFFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00964189ACB85CAAFFE195DAFFE499DEFFE195DAFFB85CAAFF964189ACFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF000000001E964189ACA94899FFA84799FFA94899FF964189AC0000001EFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00000000000000001E0000003300000033000000330000001E00000000FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF0000000000354CCD973249CCFF3148CBFF3249CCFF354CCD9700000000FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00354CCD97455DDBFF90A6FCFF95ACFFFF90A6FCFF445DDBFF354CCD97FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00334ACCFF90A5FDFF5A79FAFF5573F9FF5A79FAFF90A5FDFF334ACCFFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00334ACBFF6D88FFFF4D6DFBFF4D6DFAFF4D6DFBFF6D88FFFF334ACBFFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00354BCBFF5F7CFFFF607CFFFF5F7BFDFF607CFFFF5F7CFFFF354BCBFFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF002F44B4AC425AD9FF6F88FFFF738CFFFF6F88FFFF425AD9FF2F44B4ACFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF000000001E2F44B4AC344BCBFF334ACAFF344BCBFF2F44B4AC0000001EFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00000000000000001E0000003300000033000000330000001E00000000FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00000000002CC1FF9729C0FFFF28C0FFFF29C0FFFF2CC1FF9700000000FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF002DC1FF9741C6FFFF96DCFFFF9CDDFFFF96DCFFFF41C5FFFF2DC1FF97FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF002AC0FFFF95DDFFFF62CDFFFF5CCBFFFF62CDFFFF95DDFFFF2AC0FFFFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF002AC0FFFF75D7FFFF56CEFFFF56CEFFFF56CEFFFF75D7FFFF2AC0FFFFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF002BC0FFFF68D8FFFF69D8FFFF68D8FFFF69D8FFFF68D8FFFF2BC0FFFFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF0028AAE0AC3EC9FFFF76E0FFFF7BE2FFFF76E0FFFF3EC9FFFF28AAE0ACFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF000000001E28AAE0AC2BC0FFFF2ABFFFFF2BC0FFFF28AAE0AC0000001EFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00000000000000001E0000003300000033000000330000001E00000000FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF0000000000DADADA97D9D9DAFFD9D9D9FFD9D9DAFFDADADA9700000000FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00DADADA97DADADBFFE5E5E4FFE6E6E4FFE5E5E4FFDADAD9FFDADADA97FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00D9DADAFFE6E6E5FFDBDBD9FFDADAD8FFDBDBD9FFE6E6E5FFD9DADAFFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00D9DADAFFE2E1E0FFDBDAD9FFDBDAD9FFDBDAD9FFE2E1E0FFD9DADAFFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00D9DADAFFE2E1E0FFE3E2E0FFE2E1E0FFE3E2E0FFE2E1E0FFD9DADAFFFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00BFBFBFACDDDDDDFFE8E7E6FFE9E8E7FFE8E7E6FFDDDDDDFFBFBFBFACFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF000000001EBFBFBFACD9D9D9FFD9D9D9FFD9D9D9FFBFBFBFAC0000001EFFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00000000000000001E0000003300000033000000330000001E00000000FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
FF00FFFFFF00FFFFFF00FFFFFF00
|
||||||
|
}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,63 +6,222 @@ interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, FileUtil, TreeFilterEdit, Forms, Controls, Graphics,
|
Classes, SysUtils, FileUtil, TreeFilterEdit, Forms, Controls, Graphics,
|
||||||
Dialogs, ExtCtrls, Menus, ComCtrls, ce_widget, jsonparser, fpjson;
|
Dialogs, ExtCtrls, Menus, ComCtrls, ce_widget, jsonparser, fpjson,
|
||||||
|
ce_synmemo, process;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
{ TCEStaticExplorerWidget }
|
{ TCEStaticExplorerWidget }
|
||||||
TCEStaticExplorerWidget = class(TCEWidget)
|
TCEStaticExplorerWidget = class(TCEWidget)
|
||||||
|
imgList: TImageList;
|
||||||
Panel1: TPanel;
|
Panel1: TPanel;
|
||||||
Tree: TTreeView;
|
Tree: TTreeView;
|
||||||
TreeFilterEdit1: TTreeFilterEdit;
|
TreeFilterEdit1: TTreeFilterEdit;
|
||||||
|
procedure TreeDeletion(Sender: TObject; Node: TTreeNode);
|
||||||
private
|
private
|
||||||
|
fDoc: TCESynMemo;
|
||||||
|
ndAlias, ndClass, ndEnum, ndFunc: TTreeNode;
|
||||||
|
ndImp, ndMix, ndStruct, ndTmp, ndVar: TTreeNode;
|
||||||
|
procedure Rescan;
|
||||||
|
procedure TreeDblClick(Sender: TObject);
|
||||||
|
protected
|
||||||
|
procedure UpdateByDelay; override;
|
||||||
public
|
public
|
||||||
constructor create(aOwner: TComponent); override;
|
constructor create(aOwner: TComponent); override;
|
||||||
|
//
|
||||||
|
procedure docNew(const aDoc: TCESynMemo); override;
|
||||||
|
procedure docFocused(const aDoc: TCESynMemo); override;
|
||||||
|
procedure docChanged(const aDoc: TCESynMemo); override;
|
||||||
|
procedure docClose(const aDoc: TCESynMemo); override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
{$R *.lfm}
|
{$R *.lfm}
|
||||||
|
|
||||||
uses
|
|
||||||
ce_jsoninfos;
|
|
||||||
|
|
||||||
constructor TCEStaticExplorerWidget.create(aOwner: TComponent);
|
constructor TCEStaticExplorerWidget.create(aOwner: TComponent);
|
||||||
var
|
|
||||||
rt, nd, mb: TTreeNode;
|
|
||||||
infs: TDSourceInfos;
|
|
||||||
mods: TDSourceInfos;
|
|
||||||
dt: TJsonData;
|
|
||||||
memberKind: TInfKind;
|
|
||||||
i,j,k: Integer;
|
|
||||||
membinfs: TDSourceInfos;
|
|
||||||
begin
|
begin
|
||||||
inherited;
|
inherited;
|
||||||
fID := 'ID_SEXPL';
|
fID := 'ID_SEXPL';
|
||||||
//
|
//
|
||||||
for i:= 0 to high(JSonInfos.fData) do
|
ndAlias := Tree.Items[0];
|
||||||
begin
|
ndClass := Tree.Items[1];
|
||||||
|
ndEnum := Tree.Items[2];
|
||||||
mods := JSonInfos.getFileModule(i);
|
ndFunc := Tree.Items[3];
|
||||||
for j := 0 to high(mods) do
|
ndImp := Tree.Items[4];
|
||||||
begin
|
ndMix := Tree.Items[5];
|
||||||
|
ndStruct := Tree.Items[6];
|
||||||
rt := Tree.Items.Add(nil, mods[j].infs);
|
ndTmp := Tree.Items[7];
|
||||||
|
ndVar := Tree.Items[8];
|
||||||
for memberKind in InfKindNonModule do
|
//
|
||||||
begin
|
Tree.OnDblClick := @TreeDblClick;
|
||||||
membinfs := JSonInfos.getMembers(i, j, memberKind);
|
|
||||||
nd := Tree.Items.AddChild(rt, InfKindStr[memberKind]);
|
|
||||||
for k := 0 to high(membinfs) do
|
|
||||||
begin
|
|
||||||
mb := Tree.Items.AddChild(nd, membinfs[k].infs);
|
|
||||||
mb.Data := @membinfs[k];
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCEStaticExplorerWidget.docNew(const aDoc: TCESynMemo);
|
||||||
|
begin
|
||||||
|
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.UpdateByDelay;
|
||||||
|
begin
|
||||||
|
Rescan;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEStaticExplorerWidget.TreeDeletion(Sender: TObject; Node: TTreeNode);
|
||||||
|
begin
|
||||||
|
if (node.Data <> nil) then
|
||||||
|
FreeMem(node.Data)
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEStaticExplorerWidget.TreeDblClick(Sender: TObject);
|
||||||
|
var
|
||||||
|
line: Int64;
|
||||||
|
begin
|
||||||
|
if fDoc = nil then exit;
|
||||||
|
if Tree.Selected = nil then exit;
|
||||||
|
if Tree.Selected.Data = nil then exit;
|
||||||
|
//
|
||||||
|
line := PInt64(Tree.Selected.Data)^;
|
||||||
|
fDoc.CaretY := line;
|
||||||
|
fDoc.SelectLine();
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEStaticExplorerWidget.Rescan;
|
||||||
|
var
|
||||||
|
dmdproc: TProcess;
|
||||||
|
lines: TStringList;
|
||||||
|
str: TMemoryStream;
|
||||||
|
prs: TJsonParser;
|
||||||
|
dat: TJsonData;
|
||||||
|
memb: TJsonData;
|
||||||
|
submemb: TJsonData;
|
||||||
|
jsf, scf: string;
|
||||||
|
ndCat: TTreeNode;
|
||||||
|
ln: PInt64;
|
||||||
|
nme: string;
|
||||||
|
i, j: NativeInt;
|
||||||
|
begin
|
||||||
|
if ndAlias = nil then exit;
|
||||||
|
|
||||||
|
ndAlias.DeleteChildren;
|
||||||
|
ndClass.DeleteChildren;
|
||||||
|
ndEnum.DeleteChildren;
|
||||||
|
ndFunc.DeleteChildren;
|
||||||
|
ndImp.DeleteChildren;
|
||||||
|
ndMix.DeleteChildren;
|
||||||
|
ndStruct.DeleteChildren;
|
||||||
|
ndTmp.DeleteChildren;
|
||||||
|
ndVar.DeleteChildren;
|
||||||
|
|
||||||
|
if fDoc = nil then exit;
|
||||||
|
if fDoc.Lines.Count = 0 then exit;
|
||||||
|
subMemb := nil;
|
||||||
|
memb := nil;
|
||||||
|
|
||||||
|
// generate json
|
||||||
|
dmdproc := TProcess.Create(nil);
|
||||||
|
lines := TStringList.Create;
|
||||||
|
try
|
||||||
|
jsf := GetTempDir(false);
|
||||||
|
jsf += format('%.8X.json',[NativeUint(@dmdproc)]);
|
||||||
|
scf := GetTempDir(false);
|
||||||
|
scf += format('%.8X.d',[NativeUint(@dmdproc)]);
|
||||||
|
//
|
||||||
|
lines.Assign(fDoc.Lines);
|
||||||
|
lines.SaveToFile(scf);
|
||||||
|
//
|
||||||
|
dmdProc.ShowWindow := swoHIDE;
|
||||||
|
dmdproc.Options := [];
|
||||||
|
dmdproc.Executable := 'dmd';
|
||||||
|
dmdproc.Parameters.Add(scf);
|
||||||
|
dmdproc.Parameters.Add('-c');
|
||||||
|
dmdproc.Parameters.Add('-o-');
|
||||||
|
dmdproc.Parameters.Add('-X');
|
||||||
|
dmdproc.Parameters.Add('-Xf' + jsf );
|
||||||
|
dmdproc.Execute;
|
||||||
|
while dmdproc.Running do;
|
||||||
|
finally
|
||||||
|
i := dmdproc.ExitStatus;
|
||||||
|
dmdproc.Free;
|
||||||
|
lines.Free;
|
||||||
|
DeleteFile(scf);
|
||||||
|
end;
|
||||||
|
|
||||||
|
if i <> 0 then
|
||||||
|
exit;
|
||||||
|
|
||||||
|
// load json
|
||||||
|
str := TMemoryStream.Create;
|
||||||
|
try
|
||||||
|
str.LoadFromFile(jsf);
|
||||||
|
str.Position := 0;
|
||||||
|
prs := TJsonParser.Create(str);
|
||||||
|
try
|
||||||
|
dat := prs.Parse;
|
||||||
|
finally
|
||||||
|
prs.Free;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
str.Free;
|
||||||
|
DeleteFile(jsf);
|
||||||
|
end;
|
||||||
|
|
||||||
|
// update tree
|
||||||
|
memb := dat.items[0].FindPath('members');
|
||||||
|
if memb <> nil then for i := 0 to memb.Count-1 do
|
||||||
|
begin
|
||||||
|
|
||||||
|
// category
|
||||||
|
ln := new(PInt64);
|
||||||
|
ln^ := memb.Items[i].GetPath('line').AsInt64;
|
||||||
|
nme := memb.Items[i].GetPath('name').AsString;
|
||||||
|
|
||||||
|
case memb.Items[i].GetPath('kind').AsString of
|
||||||
|
'alias' :ndCat := Tree.Items.AddChildObject(ndAlias, nme, ln);
|
||||||
|
'class' :ndCat := Tree.Items.AddChildObject(ndClass, nme, ln);
|
||||||
|
'enum' :ndCat := Tree.Items.AddChildObject(ndEnum, nme, ln);
|
||||||
|
'function':ndCat := Tree.Items.AddChildObject(ndFunc, nme, ln);
|
||||||
|
'import' :ndCat := Tree.Items.AddChildObject(ndImp, nme, ln);
|
||||||
|
'mixin' :ndCat := Tree.Items.AddChildObject(ndMix, nme, ln);
|
||||||
|
'struct' :ndCat := Tree.Items.AddChildObject(ndStruct, nme, ln);
|
||||||
|
'template':ndCat := Tree.Items.AddChildObject(ndTmp, nme, ln);
|
||||||
|
'variable':ndCat := Tree.Items.AddChildObject(ndVar, nme, ln);
|
||||||
|
end;
|
||||||
|
|
||||||
|
// optional item members
|
||||||
|
submemb := memb.Items[i].FindPath('members');
|
||||||
|
if subMemb <> nil then for j := 0 to submemb.Count-1 do
|
||||||
|
begin
|
||||||
|
ln := new(PInt64);
|
||||||
|
ln^ := submemb.Items[j].GetPath('line').AsInt64;
|
||||||
|
nme := submemb.Items[j].GetPath('name').AsString;
|
||||||
|
Tree.Items.AddChildObject(ndCat, nme, ln);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
if dat <> nil then
|
||||||
|
begin
|
||||||
|
dat.Clear;
|
||||||
|
dat.Free;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
object CEWidget: TCEWidget
|
object CEWidget: TCEWidget
|
||||||
Left = 1538
|
Left = 1159
|
||||||
Height = 121
|
Height = 121
|
||||||
Top = 721
|
Top = 91
|
||||||
Width = 332
|
Width = 332
|
||||||
BorderIcons = [biMinimize, biMaximize]
|
BorderIcons = [biMinimize, biMaximize]
|
||||||
Caption = 'CEWidget'
|
Caption = 'CEWidget'
|
||||||
ClientHeight = 121
|
ClientHeight = 121
|
||||||
ClientWidth = 332
|
ClientWidth = 332
|
||||||
ShowHint = True
|
ShowHint = True
|
||||||
|
ShowInTaskBar = stNever
|
||||||
LCLVersion = '1.2.4.0'
|
LCLVersion = '1.2.4.0'
|
||||||
object Back: TPanel
|
object Back: TPanel
|
||||||
Left = 0
|
Left = 0
|
||||||
|
|
|
@ -7,7 +7,7 @@ interface
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, FileUtil, Forms, Controls, ExtCtrls,
|
Classes, SysUtils, FileUtil, Forms, Controls, ExtCtrls,
|
||||||
AnchorDocking, AnchorDockStorage, ActnList, Menus,
|
AnchorDocking, AnchorDockStorage, ActnList, Menus,
|
||||||
ce_widgettypes, ce_project;
|
ce_synmemo, ce_widgettypes, ce_project;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
|
@ -17,30 +17,52 @@ type
|
||||||
PTCEWidget = ^TCEWidget;
|
PTCEWidget = ^TCEWidget;
|
||||||
|
|
||||||
{ TCEWidget }
|
{ TCEWidget }
|
||||||
TCEWidget = class(TForm, ICEContextualActions, ICEProjectMonitor)
|
TCEWidget = class(TForm, ICEContextualActions, ICEProjectMonitor, ICEMultiDocMonitor)
|
||||||
Content: TPanel;
|
Content: TPanel;
|
||||||
Back: TPanel;
|
Back: TPanel;
|
||||||
contextMenu: TPopupMenu;
|
contextMenu: TPopupMenu;
|
||||||
private
|
private
|
||||||
fAutoUpdater: TTimer;
|
fUpdating: boolean;
|
||||||
fAutoUpdating: boolean;
|
fDelayDur: Integer;
|
||||||
fManuUpdating: boolean;
|
fLoopInter: Integer;
|
||||||
|
fUpdaterAuto: TTimer;
|
||||||
|
fUpdaterDelay: TTimer;
|
||||||
fWidgUpdateCount: NativeInt;
|
fWidgUpdateCount: NativeInt;
|
||||||
procedure autoUpdaterEvent(Sender: TObject);
|
procedure setDelayDur(aValue: Integer);
|
||||||
|
procedure setLoopInt(aValue: Integer);
|
||||||
|
procedure updaterAutoProc(Sender: TObject);
|
||||||
|
procedure updaterLatchProc(Sender: TObject);
|
||||||
protected
|
protected
|
||||||
fID: string;
|
fID: string;
|
||||||
fNeedAutoUpdate: boolean;
|
// a descendant overrides to implementi a periodic update.
|
||||||
procedure autoWidgetUpdate; virtual;
|
procedure UpdateByLoop; virtual;
|
||||||
procedure manualWidgetUpdate; virtual;
|
// a descendant overrides to implement an event driven update.
|
||||||
|
procedure UpdateByEvent; virtual;
|
||||||
|
// a descendant overrides to implement a delayed update event.
|
||||||
|
procedure UpdateByDelay; virtual;
|
||||||
published
|
published
|
||||||
property ID: string read fID write fID;
|
property ID: string read fID write fID;
|
||||||
|
property updaterByLoopInterval: Integer read fLoopInter write setLoopInt;
|
||||||
|
property updaterByDelayDuration: Integer read fDelayDur write setDelayDur;
|
||||||
public
|
public
|
||||||
constructor create(aOwner: TComponent); override;
|
constructor create(aOwner: TComponent); override;
|
||||||
destructor destroy; override;
|
destructor destroy; override;
|
||||||
|
// restarts the wait period to the delayed update event.
|
||||||
|
// if not re-called during 'updaterByDelayDuration' ms then
|
||||||
|
// 'UpdateByDelay' is called once.
|
||||||
|
procedure beginUpdateByDelay;
|
||||||
|
// increments the updates count.
|
||||||
|
procedure beginUpdateByEvent;
|
||||||
|
// decrements the update count and call 'UpdateByEvent' if the
|
||||||
|
// counter value is null.
|
||||||
|
procedure endUpdateByEvent;
|
||||||
|
// immediate call the 'UpdateByEvent'
|
||||||
|
procedure forceUpdateByEvent;
|
||||||
//
|
//
|
||||||
procedure beginManualWidgetUpdate;
|
procedure docNew(const aDoc: TCESynMemo); virtual;
|
||||||
procedure endManualWidgetUpdate;
|
procedure docFocused(const aDoc: TCESynMemo); virtual;
|
||||||
procedure forceManualWidgetUpdate;
|
procedure docChanged(const aDoc: TCESynMemo); virtual;
|
||||||
|
procedure docClose(const aDoc: TCESynMemo); virtual;
|
||||||
//
|
//
|
||||||
procedure projNew(const aProject: TCEProject); virtual;
|
procedure projNew(const aProject: TCEProject); virtual;
|
||||||
procedure projChange(const aProject: TCEProject); virtual;
|
procedure projChange(const aProject: TCEProject); virtual;
|
||||||
|
@ -49,9 +71,8 @@ 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;
|
||||||
//
|
// returns true if one of the three updater is processing.
|
||||||
property isAutoUpdating: boolean read fAutoUpdating;
|
property updating: boolean read fUpdating;
|
||||||
property isManualUpdating: boolean read fManuUpdating;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
(**
|
(**
|
||||||
|
@ -85,9 +106,15 @@ constructor TCEWidget.create(aOwner: TComponent);
|
||||||
begin
|
begin
|
||||||
inherited;
|
inherited;
|
||||||
fID := 'ID_XXXX';
|
fID := 'ID_XXXX';
|
||||||
fAutoUpdater := TTimer.Create(self);
|
|
||||||
fAutoUpdater.Interval := 50;
|
fUpdaterAuto := TTimer.Create(self);
|
||||||
fAutoUpdater.OnTimer := @autoUpdaterEvent;
|
fUpdaterAuto.Interval := 70;
|
||||||
|
fUpdaterAuto.OnTimer := @updaterAutoProc;
|
||||||
|
fUpdaterDelay := TTimer.Create(self);
|
||||||
|
|
||||||
|
updaterByLoopInterval := 50;
|
||||||
|
updaterByDelayDuration := 1000;
|
||||||
|
|
||||||
DockMaster.MakeDockable(Self, true, true, true);
|
DockMaster.MakeDockable(Self, true, true, true);
|
||||||
DockMaster.GetAnchorSite(Self).Header.HeaderPosition := adlhpTop;
|
DockMaster.GetAnchorSite(Self).Header.HeaderPosition := adlhpTop;
|
||||||
end;
|
end;
|
||||||
|
@ -97,53 +124,76 @@ begin
|
||||||
inherited;
|
inherited;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEWidget.beginManualWidgetUpdate;
|
procedure TCEWidget.setDelayDur(aValue: Integer);
|
||||||
|
begin
|
||||||
|
if aValue < 100 then aValue := 100;
|
||||||
|
if fDelayDur = aValue then exit;
|
||||||
|
fDelayDur := aValue;
|
||||||
|
fUpdaterDelay.Interval := fDelayDur;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEWidget.setLoopInt(aValue: Integer);
|
||||||
|
begin
|
||||||
|
if aValue < 30 then aValue := 30;
|
||||||
|
if fLoopInter = aValue then exit;
|
||||||
|
fLoopInter := aValue;
|
||||||
|
fUpdaterAuto.Interval := fLoopInter;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEWidget.beginUpdateByEvent;
|
||||||
begin
|
begin
|
||||||
Inc(fWidgUpdateCount);
|
Inc(fWidgUpdateCount);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEWidget.endManualWidgetUpdate;
|
procedure TCEWidget.endUpdateByEvent;
|
||||||
begin
|
begin
|
||||||
Dec(fWidgUpdateCount);
|
Dec(fWidgUpdateCount);
|
||||||
if fWidgUpdateCount > 0 then
|
if fWidgUpdateCount > 0 then exit;
|
||||||
begin
|
fUpdating := true;
|
||||||
{$IFDEF DEBUG}
|
UpdateByEvent;
|
||||||
writeln('widget update count > 0');
|
fUpdating := false;
|
||||||
{$ENDIF}
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
|
|
||||||
fManuUpdating := true;
|
|
||||||
manualWidgetUpdate;
|
|
||||||
fManuUpdating := false;
|
|
||||||
fWidgUpdateCount := 0;
|
fWidgUpdateCount := 0;
|
||||||
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEWidget.forceManualWidgetUpdate;
|
procedure TCEWidget.forceUpdateByEvent;
|
||||||
begin
|
begin
|
||||||
fManuUpdating := true;
|
fUpdating := true;
|
||||||
manualWidgetUpdate;
|
UpdateByEvent;
|
||||||
fManuUpdating := false;
|
fUpdating := false;
|
||||||
|
fWidgUpdateCount := 0;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEWidget.autoUpdaterEvent(Sender: TObject);
|
procedure TCEWidget.beginUpdateByDelay;
|
||||||
begin
|
begin
|
||||||
if not fNeedAutoUpdate then exit;
|
fUpdaterDelay.Enabled := false;
|
||||||
fAutoUpdating := true;
|
fUpdaterDelay.Enabled := true;
|
||||||
try
|
fUpdaterDelay.OnTimer := @updaterLatchProc;
|
||||||
autoWidgetUpdate;
|
|
||||||
finally
|
|
||||||
fAutoUpdating := false;
|
|
||||||
fNeedAutoUpdate := false;
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEWidget.autoWidgetUpdate;
|
procedure TCEWidget.updaterAutoProc(Sender: TObject);
|
||||||
|
begin
|
||||||
|
fUpdating := true;
|
||||||
|
UpdateByLoop;
|
||||||
|
fUpdating := false;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEWidget.updaterLatchProc(Sender: TObject);
|
||||||
|
begin
|
||||||
|
fUpdating := true;
|
||||||
|
UpdateByDelay;
|
||||||
|
fUpdating := false;
|
||||||
|
fUpdaterDelay.OnTimer := nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEWidget.UpdateByLoop;
|
||||||
begin
|
begin
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEWidget.manualWidgetUpdate;
|
procedure TCEWidget.UpdateByEvent;
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEWidget.UpdateByDelay;
|
||||||
begin
|
begin
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -174,6 +224,22 @@ begin
|
||||||
result := nil;
|
result := nil;
|
||||||
end;
|
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
|
||||||
*)
|
*)
|
||||||
|
|
|
@ -5,7 +5,7 @@ unit ce_widgettypes;
|
||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, actnList, ce_project;
|
Classes, SysUtils, actnList, ce_synmemo, ce_project;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
|
@ -13,8 +13,10 @@ type
|
||||||
* An implementer is informed when a new document is added, focused or closed.
|
* An implementer is informed when a new document is added, focused or closed.
|
||||||
*)
|
*)
|
||||||
ICEMultiDocMonitor = interface
|
ICEMultiDocMonitor = interface
|
||||||
procedure docChange(const aNewIndex: integer);
|
procedure docNew(const aDoc: TCESynMemo);
|
||||||
procedure docClose(const aNewIndex: integer);
|
procedure docFocused(const aDoc: TCESynMemo);
|
||||||
|
procedure docChanged(const aDoc: TCESynMemo);
|
||||||
|
procedure docClose(const aDoc: TCESynMemo);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
(**
|
(**
|
||||||
|
|
Loading…
Reference in New Issue