diff --git a/lazproj/coedit.lpi b/lazproj/coedit.lpi
index 5e24ff97..ab0f55db 100644
--- a/lazproj/coedit.lpi
+++ b/lazproj/coedit.lpi
@@ -201,22 +201,19 @@
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
-
-
diff --git a/lazproj/coedit.lpr b/lazproj/coedit.lpr
index a2265302..e791f700 100644
--- a/lazproj/coedit.lpr
+++ b/lazproj/coedit.lpr
@@ -8,8 +8,8 @@ uses
{$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_projinspect, ce_projconf, ce_jsoninfos, jsonparser, ce_project,
+ce_widgettypes;
{$R *.res}
diff --git a/src/ce_common.pas b/src/ce_common.pas
index 546ac3f9..2bbf61d9 100644
--- a/src/ce_common.pas
+++ b/src/ce_common.pas
@@ -5,7 +5,7 @@ unit ce_common;
interface
uses
- Classes, SysUtils, ActnList, dialogs, forms;
+ Classes, SysUtils, ActnList;
(**
* Save a component with a readable aspect.
@@ -29,17 +29,12 @@ uses
(**
* Patches the directory separators from a string.
- * This is used to ensure that a project saved on a plateform can be loaded
+ * This is used to ensure a that project saved on a plateform can be loaded
* on another one.
*)
function patchPlateformPath(const aPath: string): string;
procedure patchPlateformPaths(const sPaths: TStrings);
- (**
- * Ok/Cancel modal dialog
- *)
- function dlgOkCancel(const aMsg: string): TModalResult;
-
implementation
@@ -230,11 +225,4 @@ begin
end;
end;
-function dlgOkCancel(const aMsg: string): TModalResult;
-const
- Btns = [mbOK,mbCancel];
-begin
- exit( MessageDlg('Coedit', aMsg, mtConfirmation, Btns, ''));
-end;
-
end.
diff --git a/src/ce_d2syn.pas b/src/ce_d2syn.pas
index 14631ef0..1c8e3aa9 100644
--- a/src/ce_d2syn.pas
+++ b/src/ce_d2syn.pas
@@ -315,9 +315,8 @@ begin
fKeywdAttrib.Foreground := clNavy;
fCurrIAttrib.Foreground := clBlack;
- fCurrIAttrib.FrameEdges := sfeAround;
- fCurrIAttrib.FrameColor := clGray;
- fCurrIAttrib.Background := cl3dlight;
+ fCurrIAttrib.FrameEdges:= sfeAround;
+ fCurrIAttrib.FrameColor:= clGray;
fCommtAttrib.Style := [fsItalic];
fKeywdAttrib.Style := [fsBold];
diff --git a/src/ce_editor.lfm b/src/ce_editor.lfm
index 3cd8f14e..b7b750d9 100644
--- a/src/ce_editor.lfm
+++ b/src/ce_editor.lfm
@@ -1,5 +1,7 @@
inherited CEEditorWidget: TCEEditorWidget
+ Left = 1159
Height = 382
+ Top = 91
Width = 465
Caption = 'Source editor'
ClientHeight = 382
diff --git a/src/ce_editor.pas b/src/ce_editor.pas
index aa372125..2f394292 100644
--- a/src/ce_editor.pas
+++ b/src/ce_editor.pas
@@ -20,11 +20,11 @@ type
procedure PageControlChange(Sender: TObject);
procedure PageControlCloseTabClicked(Sender: TObject);
protected
- procedure UpdateByDelay; override;
+ procedure autoWidgetUpdate; override;
private
// http://bugs.freepascal.org/view.php?id=26329
- fKeyChanged: boolean;
fSyncEdit: TSynPluginSyncroEdit;
+ procedure focusedEditorChanged;
procedure memoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure memoMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure memoChange(Sender: TObject);
@@ -38,7 +38,6 @@ type
constructor create(aOwner: TComponent); override;
procedure addEditor;
procedure removeEditor(const aIndex: NativeInt);
- procedure focusedEditorChanged;
//
property currentEditor: TCESynMemo read getCurrentEditor;
property editor[index: NativeInt]: TCESynMemo read getEditor;
@@ -103,9 +102,6 @@ begin
md := getModuleName(curr.Lines);
if md = '' then md := extractFileName(curr.fileName);
pageControl.ActivePage.Caption := md;
- //
- if pageControl.ActivePageIndex <> -1 then
- mainForm.docFocusedNotify(Self, pageControl.ActivePageIndex);
end;
procedure TCEEditorWidget.PageControlChange(Sender: TObject);
@@ -125,6 +121,7 @@ var
sheet: TTabSheet;
memo: TCESynMemo;
begin
+ fNeedAutoUpdate := true;
sheet := pageControl.AddTabSheet;
memo := TCESynMemo.Create(sheet);
//
@@ -137,7 +134,6 @@ begin
memo.OnChange := @memoChange;
memo.OnMouseMove := @memoMouseMove;
//
- pageControl.ActivePage := sheet;
//http://bugs.freepascal.org/view.php?id=26320
focusedEditorChanged;
end;
@@ -155,35 +151,34 @@ end;
procedure TCEEditorWidget.memoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
+ fNeedAutoUpdate := true;
if (sender is TCESynMemo) then
identifierToD2Syn(TCESynMemo(Sender));
- fKeyChanged := true;
- beginUpdateByDelay;
end;
procedure TCEEditorWidget.memoMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
+ fNeedAutoUpdate := true;
if (sender is TCESynMemo) then
identifierToD2Syn(TCESynMemo(Sender));
- beginUpdateByDelay;
end;
procedure TCEEditorWidget.memoMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if ssLeft in Shift then
- beginUpdateByDelay;
+ fNeedAutoUpdate := true;
end;
procedure TCEEditorWidget.memoChange(Sender: TObject);
var
ed: TCESynMemo;
begin
+ fNeedAutoUpdate := true;
ed := TCESynMemo(sender);
ed.modified := true;
- beginUpdateByDelay;
end;
-procedure TCEEditorWidget.UpdateByDelay;
+procedure TCEEditorWidget.autoWidgetUpdate;
const
modstr: array[boolean] of string = ('...', 'MODIFIED');
var
@@ -196,10 +191,6 @@ begin
editorStatus.Panels[1].Text := modstr[ed.modified];
editorStatus.Panels[2].Text := ed.fileName;
end;
- //
- if fKeyChanged then if editorIndex <> -1 then
- mainForm.docChangeNotify(Self, editorIndex);
- fKeyChanged := false;
end;
end.
diff --git a/src/ce_jsoninfos.pas b/src/ce_jsoninfos.pas
new file mode 100644
index 00000000..d13d4b1b
--- /dev/null
+++ b/src/ce_jsoninfos.pas
@@ -0,0 +1,147 @@
+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.
+
diff --git a/src/ce_main.lfm b/src/ce_main.lfm
index c6ed69c6..c6306544 100644
--- a/src/ce_main.lfm
+++ b/src/ce_main.lfm
@@ -5,8 +5,7 @@ object CEMainForm: TCEMainForm
Width = 745
AllowDropFiles = True
Caption = 'Coedit'
- ChildSizing.Layout = cclTopToBottomThenLeftToRight
- DockSite = True
+ ChildSizing.Layout = cclLeftToRightThenTopToBottom
Menu = mainMenu
OnDropFiles = FormDropFiles
OnShow = FormShow
diff --git a/src/ce_main.pas b/src/ce_main.pas
index 8b42a54c..8a772c85 100644
--- a/src/ce_main.pas
+++ b/src/ce_main.pas
@@ -7,9 +7,9 @@ interface
uses
Classes, SysUtils, FileUtil, SynEditKeyCmds, SynHighlighterLFM, Forms,
AnchorDocking, AnchorDockStorage, AnchorDockOptionsDlg, Controls, Graphics,
- Dialogs, Menus, ActnList, ExtCtrls, ComCtrls, process,
- ce_common, ce_dmdwrap, ce_project, ce_synmemo, ce_widget, ce_messages,
- ce_editor, ce_projinspect, ce_projconf, ce_staticexplorer;
+ Dialogs, Menus, ActnList, ExtCtrls, process,
+ ce_jsoninfos, ce_common, ce_dmdwrap, ce_project, ce_synmemo,
+ ce_widget, ce_messages, ce_editor, ce_projinspect, ce_projconf, ce_staticexplorer;
type
@@ -174,8 +174,6 @@ type
destructor destroy; override;
//
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 MessageWidget: TCEMessagesWidget read fMesgWidg;
@@ -192,6 +190,8 @@ implementation
uses
SynMacroRecorder;
+// TODO: warnings, OkCancel dialogs
+
{$REGION std comp methods ******************************************************}
constructor TCEMainForm.create(aOwner: TComponent);
var
@@ -206,13 +206,13 @@ begin
fEditWidg := TCEEditorWidget.create(nil);
fProjWidg := TCEProjectInspectWidget.create(nil);
fPrjCfWidg:= TCEProjectConfigurationWidget.create(nil);
- fStExpWidg:= TCEStaticExplorerWidget.create(nil);
+ //fStExpWidg:= TCEStaticExplorerWidget.create(nil);
fWidgList.addWidget(@fMesgWidg);
fWidgList.addWidget(@fEditWidg);
fWidgList.addWidget(@fProjWidg);
fWidgList.addWidget(@fPrjCfWidg);
- fWidgList.addWidget(@fStExpWidg);
+ //fWidgList.addWidget(@fStExpWidg);
for widg in fWidgList do widg.Show;
@@ -373,8 +373,8 @@ begin
j += 1;
end;
fEditWidg.editor[i].fileName := str;
- fEditWidg.editor[i].modified := false;
- fEditWidg.focusedEditorChanged;
+ fEditWidg.editor[i].modified := true;
+ fEditWidg.PageControl.PageIndex := i;
end;
function TCEMainForm.findFile(const aFilename: string): NativeInt;
@@ -403,13 +403,12 @@ begin
fEditWidg.addEditor;
fEditWidg.editor[i].Lines.LoadFromFile(aFilename);
fEditWidg.editor[i].fileName := aFilename;
- fEditWidg.focusedEditorChanged;
+ fEditWidg.PageControl.PageIndex := i;
end;
procedure TCEMainForm.saveFile(const edIndex: NativeInt);
var
str: string;
- i: NativeInt;
begin
if fEditWidg = nil then exit;
if edIndex >= fEditWidg.editorCount then exit;
@@ -427,9 +426,6 @@ begin
finally
fEditWidg.editor[edIndex].modified := false;
end;
- //
- for i := 0 to fWidgList.Count-1 do
- fWidgList.widget[i].docChanged(fEditWidg.editor[edIndex]);
end;
procedure TCEMainForm.saveFileAs(const edIndex: NativeInt; const aFilename: string);
@@ -446,24 +442,6 @@ begin
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);
begin
if fEditWidg = nil then exit;
@@ -543,18 +521,7 @@ begin
end;
procedure TCEMainForm.actFileCloseExecute(Sender: TObject);
-var
- curr: TCESynMemo;
- i: NativeInt;
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);
end;
@@ -572,6 +539,7 @@ begin
for fname in FileNames do
openFile(fname);
end;
+
{$ENDREGION}
{$REGION edit ******************************************************************}
@@ -695,9 +663,6 @@ begin
{$IFDEF DEBUG}{$WARNINGS ON}{$HINTS ON}{$ENDIF}
fEditWidg.editor[edIndex].Lines.SaveToFile(fname + '.d');
- {$IFDEF RELEASE}
- dmdProc.ShowWindow := swoHIDE;
- {$ENDIF}
dmdproc.Options:= [poWaitOnExit, poStdErrToOutput, poUsePipes];
dmdproc.Executable:= 'dmd';
dmdproc.Parameters.Add(fname + '.d');
@@ -773,9 +738,6 @@ begin
prjpath := extractFilePath(aProject.fileName);
if directoryExists(prjpath) then chDir(prjpath);
- {$IFDEF RELEASE}
- dmdProc.ShowWindow := swoHIDE;
- {$ENDIF}
dmdproc.Options :=
procopts[aProject.currentConfiguration.messagesOptions.verbose];
@@ -947,43 +909,40 @@ begin
fProject := TCEProject.Create(self);
for widg in WidgetList do widg.projNew(fProject);
fProject.onChange := @projChange;
+ fProject.beforeChanged;
+ fProject.afterChanged;
end;
procedure TCEMainForm.saveProj;
begin
- fProject.saveToFile(fProject.fileName);
+ saveCompToTxtFile(fProject, fProject.fileName);
end;
procedure TCEMainForm.saveProjAs(const aFilename: string);
begin
fProject.fileName := aFilename;
- fProject.saveToFile(fProject.fileName);
+ saveCompToTxtFile(fProject, aFilename);
end;
procedure TCEMainForm.openProj(const aFilename: string);
begin
closeProj;
newProj;
- fProject.loadFromFile(aFilename);
+ fProject.beforeChanged;
+ fProject.fileName := aFilename;
+ loadCompFromTxtFile(fProject, aFilename);
+ fProject.afterLoad;
+ fProject.afterChanged;
end;
procedure TCEMainForm.actProjNewExecute(Sender: TObject);
begin
- if fProject <> nil then if fProject.modified then if dlgOkCancel(
- 'The latest mdofifications are not saved, continue ?')
- = mrCancel then exit;
-
closeProj;
newProj;
end;
procedure TCEMainForm.actProjCloseExecute(Sender: TObject);
begin
- if fProject = nil then exit;
- if fProject.modified then if dlgOkCancel(
- 'The latest mdofifications are not saved, continue ?')
- = mrCancel then exit;
-
closeProj;
end;
@@ -1011,10 +970,6 @@ end;
procedure TCEMainForm.actProjOpenExecute(Sender: TObject);
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
try
if execute then openProj(filename);
diff --git a/src/ce_projconf.lfm b/src/ce_projconf.lfm
index c7cb2518..9d426827 100644
--- a/src/ce_projconf.lfm
+++ b/src/ce_projconf.lfm
@@ -1,24 +1,24 @@
inherited CEProjectConfigurationWidget: TCEProjectConfigurationWidget
Left = 1160
- Height = 277
- Top = 722
- Width = 463
+ Height = 276
+ Top = 723
+ Width = 474
Caption = 'Project configuration'
- ClientHeight = 277
- ClientWidth = 463
+ ClientHeight = 276
+ ClientWidth = 474
inherited Back: TPanel
- Height = 277
- Width = 463
- ClientHeight = 277
- ClientWidth = 463
+ Height = 276
+ Width = 474
+ ClientHeight = 276
+ ClientWidth = 474
inherited Content: TPanel
- Height = 277
- Width = 463
- ClientHeight = 277
- ClientWidth = 463
+ Height = 276
+ Width = 474
+ ClientHeight = 276
+ ClientWidth = 474
object Tree: TTreeView[0]
Left = 4
- Height = 243
+ Height = 242
Hint = 'filter configuration elements'
Top = 30
Width = 150
@@ -53,19 +53,19 @@ inherited CEProjectConfigurationWidget: TCEProjectConfigurationWidget
Left = 2
Height = 24
Top = 2
- Width = 459
+ Width = 470
Align = alTop
BorderSpacing.Around = 2
BevelOuter = bvNone
ClientHeight = 24
- ClientWidth = 459
+ ClientWidth = 470
TabOrder = 1
object selConf: TComboBox
Left = 0
Height = 23
Hint = 'select a configuration'
Top = 1
- Width = 368
+ Width = 379
Align = alClient
BorderSpacing.Top = 1
BorderSpacing.Right = 1
@@ -75,7 +75,7 @@ inherited CEProjectConfigurationWidget: TCEProjectConfigurationWidget
TabOrder = 0
end
object btnAddConf: TSpeedButton
- Left = 369
+ Left = 380
Height = 24
Hint = 'add an empty configuration'
Top = 0
@@ -121,7 +121,7 @@ inherited CEProjectConfigurationWidget: TCEProjectConfigurationWidget
ShowCaption = False
end
object btnDelConf: TSpeedButton
- Left = 399
+ Left = 410
Height = 24
Hint = 'remove selected configuration'
Top = 0
@@ -167,7 +167,7 @@ inherited CEProjectConfigurationWidget: TCEProjectConfigurationWidget
ShowCaption = False
end
object btnCloneConf: TSpeedButton
- Left = 429
+ Left = 440
Height = 24
Hint = 'clone selected configuration'
Top = 0
@@ -215,15 +215,15 @@ inherited CEProjectConfigurationWidget: TCEProjectConfigurationWidget
end
object Splitter1: TSplitter[2]
Left = 154
- Height = 249
+ Height = 248
Top = 28
Width = 5
end
object Grid: TTIPropertyGrid[3]
Left = 159
- Height = 243
+ Height = 242
Top = 30
- Width = 300
+ Width = 311
Align = alClient
BorderSpacing.Top = 4
BorderSpacing.Right = 4
diff --git a/src/ce_projconf.pas b/src/ce_projconf.pas
index 2a112d81..2dd1b0d5 100644
--- a/src/ce_projconf.pas
+++ b/src/ce_projconf.pas
@@ -32,7 +32,7 @@ type
fProj: TCEProject;
function getGridTarget: TPersistent;
protected
- procedure UpdateByEvent; override;
+ procedure manualWidgetUpdate; override;
public
constructor create(aOwner: TComponent); override;
procedure projNew(const aProject: TCEProject); override;
@@ -52,16 +52,16 @@ end;
procedure TCEProjectConfigurationWidget.projNew(const aProject: TCEProject);
begin
- beginUpdateByEvent;
+ beginManualWidgetUpdate;
fProj := aProject;
- endUpdateByEvent;
+ endManualWidgetUpdate;
end;
procedure TCEProjectConfigurationWidget.projChange(const aProject: TCEProject);
begin
- beginUpdateByEvent;
+ beginManualWidgetUpdate;
fProj := aProject;
- endUpdateByEvent;
+ endManualWidgetUpdate;
end;
procedure TCEProjectConfigurationWidget.projClose(const aProject: TCEProject);
@@ -74,12 +74,12 @@ end;
procedure TCEProjectConfigurationWidget.selConfChange(Sender: TObject);
begin
if fProj = nil then exit;
- if Updating then exit;
+ if isManualUpdating then exit;
if selConf.ItemIndex = -1 then exit;
//
- beginUpdateByEvent;
+ beginManualWidgetUpdate;
fProj.ConfigurationIndex := selConf.ItemIndex;
- endUpdateByEvent;
+ endManualWidgetUpdate;
end;
procedure TCEProjectConfigurationWidget.TreeChange(Sender: TObject;
@@ -102,11 +102,11 @@ begin
if fProj = nil then exit;
//
nme := '';
- beginUpdateByEvent;
+ beginManualWidgetUpdate;
cfg := fProj.addConfiguration;
if InputQuery('Configuration name', '', nme) then cfg.name := nme;
fProj.ConfigurationIndex := cfg.Index;
- endUpdateByEvent;
+ endManualWidgetUpdate;
end;
procedure TCEProjectConfigurationWidget.btnDelConfClick(Sender: TObject);
@@ -114,13 +114,13 @@ begin
if fProj = nil then exit;
if fProj.OptionsCollection.Count = 1 then exit;
//
- beginUpdateByEvent;
+ beginManualWidgetUpdate;
Grid.TIObject := nil;
Grid.Clear;
Invalidate;
fProj.OptionsCollection.Delete(selConf.ItemIndex);
fProj.ConfigurationIndex := 0;
- endUpdateByEvent;
+ endManualWidgetUpdate;
end;
procedure TCEProjectConfigurationWidget.btnCloneCurrClick(Sender: TObject);
@@ -131,13 +131,13 @@ begin
if fProj = nil then exit;
//
nme := '';
- beginUpdateByEvent;
+ beginManualWidgetUpdate;
src := fProj.currentConfiguration;
trg := fProj.addConfiguration;
trg.assign(src);
if InputQuery('Configuration name', '', nme) then trg.name := nme;
fProj.ConfigurationIndex := trg.Index;
- endUpdateByEvent;
+ endManualWidgetUpdate;
end;
function TCEProjectConfigurationWidget.getGridTarget: TPersistent;
@@ -159,7 +159,7 @@ begin
end;
end;
-procedure TCEProjectConfigurationWidget.UpdateByEvent;
+procedure TCEProjectConfigurationWidget.manualWidgetUpdate;
var
i: NativeInt;
begin
diff --git a/src/ce_project.pas b/src/ce_project.pas
index 44e8e119..0be60792 100644
--- a/src/ce_project.pas
+++ b/src/ce_project.pas
@@ -50,14 +50,12 @@ type
procedure addSource(const aFilename: string);
function addConfiguration: TCompilerConfiguration;
procedure getOpts(const aList: TStrings);
- procedure saveToFile(const aFilename: string);
- procedure loadFromFile(const aFilename: string);
+ procedure afterLoad;
//
property configuration[ix: integer]: TCompilerConfiguration read getConfig;
property currentConfiguration: TCompilerConfiguration read getCurrConf;
property fileName: string read fFilename write setFname;
property onChange: TNotifyEvent read fOnChange write fOnChange;
- property modified: boolean read fModified;
end;
implementation
@@ -73,7 +71,6 @@ begin
fSrcsCop := TStringList.Create;
fOptsColl := TCollection.create(TCompilerConfiguration);
reset;
- fModified := false;
end;
destructor TCEProject.destroy;
@@ -143,6 +140,11 @@ begin
afterChanged;
end;
+procedure TCEProject.afterLoad;
+begin
+ patchPlateformPaths(fSrcs);
+end;
+
procedure TCEProject.setConfIx(aValue: Integer);
begin
if fConfIx = aValue then exit;
@@ -223,7 +225,6 @@ begin
fSrcs.Clear;
fFilename := '';
afterChanged;
- fModified := false;
end;
procedure TCEProject.getOpts(const aList: TStrings);
@@ -251,21 +252,6 @@ begin
result := expandFileNameEx(fBasePath, aFilename);
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
RegisterClasses([TCEProject]);
end.
diff --git a/src/ce_projinspect.lfm b/src/ce_projinspect.lfm
index d36d7936..0c040a5b 100644
--- a/src/ce_projinspect.lfm
+++ b/src/ce_projinspect.lfm
@@ -1,28 +1,28 @@
inherited CEProjectInspectWidget: TCEProjectInspectWidget
- Left = 1640
- Height = 383
- Top = 90
- Width = 264
+ Left = 1641
+ Height = 384
+ Top = 89
+ Width = 263
AllowDropFiles = True
Caption = 'Project inspector'
- ClientHeight = 383
- ClientWidth = 264
+ ClientHeight = 384
+ ClientWidth = 263
OnDropFiles = FormDropFiles
inherited Back: TPanel
- Height = 383
- Width = 264
- ClientHeight = 383
- ClientWidth = 264
+ Height = 384
+ Width = 263
+ ClientHeight = 384
+ ClientWidth = 263
inherited Content: TPanel
- Height = 383
- Width = 264
- ClientHeight = 383
- ClientWidth = 264
+ Height = 384
+ Width = 263
+ ClientHeight = 384
+ ClientWidth = 263
object Tree: TTreeView[0]
Left = 2
- Height = 353
+ Height = 354
Top = 28
- Width = 260
+ Width = 259
Align = alClient
AutoExpand = True
BorderSpacing.Around = 2
@@ -44,12 +44,12 @@ inherited CEProjectInspectWidget: TCEProjectInspectWidget
Left = 2
Height = 24
Top = 2
- Width = 260
+ Width = 259
Align = alTop
BorderSpacing.Around = 2
BevelOuter = bvNone
ClientHeight = 24
- ClientWidth = 260
+ ClientWidth = 259
TabOrder = 1
object btnAddFile: TSpeedButton
Left = 0
@@ -190,13 +190,12 @@ inherited CEProjectInspectWidget: TCEProjectInspectWidget
end
object TreeFilterEdit1: TTreeFilterEdit
Left = 114
- Height = 23
- Top = 0
- Width = 114
- ButtonWidth = 28
+ Height = 20
+ Top = 2
+ Width = 143
+ ButtonWidth = 30
NumGlyphs = 1
- Align = alCustom
- Anchors = [akTop, akLeft, akRight]
+ Align = alClient
BorderSpacing.Around = 2
MaxLength = 0
TabOrder = 0
diff --git a/src/ce_projinspect.pas b/src/ce_projinspect.pas
index 08214fe3..38c1ec5f 100644
--- a/src/ce_projinspect.pas
+++ b/src/ce_projinspect.pas
@@ -25,7 +25,7 @@ type
procedure FormDropFiles(Sender: TObject; const FileNames: array of String);
procedure TreeKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
protected
- procedure UpdateByEvent; override;
+ procedure manualWidgetUpdate; override;
private
fProject: TCEProject;
fFileNode, fConfNode: TTreeNode;
@@ -56,19 +56,19 @@ end;
procedure TCEProjectInspectWidget.projNew(const aProject: TCEProject);
begin
fProject := aProject;
- UpdateByEvent;
+ manualWidgetUpdate;
end;
procedure TCEProjectInspectWidget.projChange(const aProject: TCEProject);
begin
fProject := aProject;
- UpdateByEvent;
+ manualWidgetUpdate;
end;
procedure TCEProjectInspectWidget.projClose(const aProject: TCEProject);
begin
fProject := nil;
- UpdateByEvent;
+ manualWidgetUpdate;
end;
procedure TCEProjectInspectWidget.TreeKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
@@ -99,7 +99,7 @@ begin
begin
i := Tree.Selected.Index;
fProject.ConfigurationIndex := i;
- UpdateByEvent;
+ manualWidgetUpdate;
end;
end;
@@ -163,7 +163,7 @@ begin
fname := Tree.Selected.Text;
i := fProject.Sources.IndexOf(fname);
if i > -1 then fProject.Sources.Delete(i);
- UpdateByEvent;
+ manualWidgetUpdate;
end
end;
@@ -176,7 +176,7 @@ begin
for fname in Filenames do fProject.addSource(fname);
end;
-procedure TCEProjectInspectWidget.UpdateByEvent;
+procedure TCEProjectInspectWidget.manualWidgetUpdate;
var
src, conf: string;
itm: TTreeNode;
diff --git a/src/ce_staticexplorer.lfm b/src/ce_staticexplorer.lfm
index 01f4db8b..9e6959d1 100644
--- a/src/ce_staticexplorer.lfm
+++ b/src/ce_staticexplorer.lfm
@@ -1,74 +1,47 @@
inherited CEStaticExplorerWidget: TCEStaticExplorerWidget
- Left = 1640
- Height = 276
- Top = 721
- Width = 261
+ Left = 1569
+ Height = 278
Caption = 'Static explorer'
- ClientHeight = 276
- ClientWidth = 261
+ ClientHeight = 278
inherited Back: TPanel
- Height = 276
- Width = 261
- ClientHeight = 276
- ClientWidth = 261
+ Height = 278
+ ClientHeight = 278
inherited Content: TPanel
- Height = 276
- Width = 261
- ClientHeight = 276
- ClientWidth = 261
+ Height = 278
+ ClientHeight = 278
object Tree: TTreeView[0]
Left = 4
- Height = 240
+ Height = 242
Top = 32
- Width = 253
+ Width = 324
Align = alClient
BorderSpacing.Around = 4
DefaultItemHeight = 18
- ExpandSignType = tvestPlusMinus
HideSelection = False
- Images = imgList
ReadOnly = True
ScrollBars = ssAutoBoth
- SelectionColor = clActiveBorder
TabOrder = 0
- OnDeletion = TreeDeletion
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
object Panel1: TPanel[1]
Left = 2
Height = 26
Top = 2
- Width = 257
+ Width = 328
Align = alTop
BorderSpacing.Around = 2
BevelOuter = bvNone
ClientHeight = 26
- ClientWidth = 257
+ ClientWidth = 328
TabOrder = 1
object TreeFilterEdit1: TTreeFilterEdit
Left = 2
- Height = 23
+ Height = 22
Top = 2
- Width = 226
+ Width = 324
ButtonWidth = 23
NumGlyphs = 1
- Align = alCustom
- Anchors = [akTop, akLeft, akRight]
+ Align = alClient
BorderSpacing.Around = 2
MaxLength = 0
TabOrder = 0
@@ -77,298 +50,4 @@ inherited CEStaticExplorerWidget: TCEStaticExplorerWidget
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
diff --git a/src/ce_staticexplorer.pas b/src/ce_staticexplorer.pas
index 6e9a98a1..a8d7cf1a 100644
--- a/src/ce_staticexplorer.pas
+++ b/src/ce_staticexplorer.pas
@@ -6,222 +6,63 @@ interface
uses
Classes, SysUtils, FileUtil, TreeFilterEdit, Forms, Controls, Graphics,
- Dialogs, ExtCtrls, Menus, ComCtrls, ce_widget, jsonparser, fpjson,
- ce_synmemo, process;
+ Dialogs, ExtCtrls, Menus, ComCtrls, ce_widget, jsonparser, fpjson;
type
{ TCEStaticExplorerWidget }
TCEStaticExplorerWidget = class(TCEWidget)
- imgList: TImageList;
Panel1: TPanel;
Tree: TTreeView;
TreeFilterEdit1: TTreeFilterEdit;
- procedure TreeDeletion(Sender: TObject; Node: TTreeNode);
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
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;
implementation
{$R *.lfm}
+uses
+ ce_jsoninfos;
+
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
inherited;
fID := 'ID_SEXPL';
//
- ndAlias := Tree.Items[0];
- ndClass := Tree.Items[1];
- ndEnum := Tree.Items[2];
- ndFunc := Tree.Items[3];
- ndImp := Tree.Items[4];
- ndMix := Tree.Items[5];
- ndStruct := Tree.Items[6];
- ndTmp := Tree.Items[7];
- ndVar := Tree.Items[8];
- //
- Tree.OnDblClick := @TreeDblClick;
-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
+ for i:= 0 to high(JSonInfos.fData) 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
+ mods := JSonInfos.getFileModule(i);
+ for j := 0 to high(mods) 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);
+
+ rt := Tree.Items.Add(nil, mods[j].infs);
+
+ for memberKind in InfKindNonModule do
+ begin
+ 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;
+
end;
- end;
- if dat <> nil then
- begin
- dat.Clear;
- dat.Free;
end;
end;
diff --git a/src/ce_widget.lfm b/src/ce_widget.lfm
index eb1d964e..b333c192 100644
--- a/src/ce_widget.lfm
+++ b/src/ce_widget.lfm
@@ -1,14 +1,13 @@
object CEWidget: TCEWidget
- Left = 1159
+ Left = 1538
Height = 121
- Top = 91
+ Top = 721
Width = 332
BorderIcons = [biMinimize, biMaximize]
Caption = 'CEWidget'
ClientHeight = 121
ClientWidth = 332
ShowHint = True
- ShowInTaskBar = stNever
LCLVersion = '1.2.4.0'
object Back: TPanel
Left = 0
diff --git a/src/ce_widget.pas b/src/ce_widget.pas
index aaadf8e2..967b7f46 100644
--- a/src/ce_widget.pas
+++ b/src/ce_widget.pas
@@ -7,7 +7,7 @@ interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, ExtCtrls,
AnchorDocking, AnchorDockStorage, ActnList, Menus,
- ce_synmemo, ce_widgettypes, ce_project;
+ ce_widgettypes, ce_project;
type
@@ -17,52 +17,30 @@ type
PTCEWidget = ^TCEWidget;
{ TCEWidget }
- TCEWidget = class(TForm, ICEContextualActions, ICEProjectMonitor, ICEMultiDocMonitor)
+ TCEWidget = class(TForm, ICEContextualActions, ICEProjectMonitor)
Content: TPanel;
Back: TPanel;
contextMenu: TPopupMenu;
private
- fUpdating: boolean;
- fDelayDur: Integer;
- fLoopInter: Integer;
- fUpdaterAuto: TTimer;
- fUpdaterDelay: TTimer;
+ fAutoUpdater: TTimer;
+ fAutoUpdating: boolean;
+ fManuUpdating: boolean;
fWidgUpdateCount: NativeInt;
- procedure setDelayDur(aValue: Integer);
- procedure setLoopInt(aValue: Integer);
- procedure updaterAutoProc(Sender: TObject);
- procedure updaterLatchProc(Sender: TObject);
+ procedure autoUpdaterEvent(Sender: TObject);
protected
fID: string;
- // a descendant overrides to implementi a periodic update.
- procedure UpdateByLoop; 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;
+ fNeedAutoUpdate: boolean;
+ procedure autoWidgetUpdate; virtual;
+ procedure manualWidgetUpdate; virtual;
published
property ID: string read fID write fID;
- property updaterByLoopInterval: Integer read fLoopInter write setLoopInt;
- property updaterByDelayDuration: Integer read fDelayDur write setDelayDur;
public
constructor create(aOwner: TComponent); 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 docNew(const aDoc: TCESynMemo); virtual;
- procedure docFocused(const aDoc: TCESynMemo); virtual;
- procedure docChanged(const aDoc: TCESynMemo); virtual;
- procedure docClose(const aDoc: TCESynMemo); virtual;
+ procedure beginManualWidgetUpdate;
+ procedure endManualWidgetUpdate;
+ procedure forceManualWidgetUpdate;
//
procedure projNew(const aProject: TCEProject); virtual;
procedure projChange(const aProject: TCEProject); virtual;
@@ -71,8 +49,9 @@ type
function contextName: string; virtual;
function contextActionCount: integer; virtual;
function contextAction(index: integer): TAction; virtual;
- // returns true if one of the three updater is processing.
- property updating: boolean read fUpdating;
+ //
+ property isAutoUpdating: boolean read fAutoUpdating;
+ property isManualUpdating: boolean read fManuUpdating;
end;
(**
@@ -106,15 +85,9 @@ constructor TCEWidget.create(aOwner: TComponent);
begin
inherited;
fID := 'ID_XXXX';
-
- fUpdaterAuto := TTimer.Create(self);
- fUpdaterAuto.Interval := 70;
- fUpdaterAuto.OnTimer := @updaterAutoProc;
- fUpdaterDelay := TTimer.Create(self);
-
- updaterByLoopInterval := 50;
- updaterByDelayDuration := 1000;
-
+ fAutoUpdater := TTimer.Create(self);
+ fAutoUpdater.Interval := 50;
+ fAutoUpdater.OnTimer := @autoUpdaterEvent;
DockMaster.MakeDockable(Self, true, true, true);
DockMaster.GetAnchorSite(Self).Header.HeaderPosition := adlhpTop;
end;
@@ -124,76 +97,53 @@ begin
inherited;
end;
-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;
+procedure TCEWidget.beginManualWidgetUpdate;
begin
Inc(fWidgUpdateCount);
end;
-procedure TCEWidget.endUpdateByEvent;
+procedure TCEWidget.endManualWidgetUpdate;
begin
Dec(fWidgUpdateCount);
- if fWidgUpdateCount > 0 then exit;
- fUpdating := true;
- UpdateByEvent;
- fUpdating := false;
+ if fWidgUpdateCount > 0 then
+ begin
+ {$IFDEF DEBUG}
+ writeln('widget update count > 0');
+ {$ENDIF}
+ exit;
+ end;
+
+ fManuUpdating := true;
+ manualWidgetUpdate;
+ fManuUpdating := false;
fWidgUpdateCount := 0;
+
end;
-procedure TCEWidget.forceUpdateByEvent;
+procedure TCEWidget.forceManualWidgetUpdate;
begin
- fUpdating := true;
- UpdateByEvent;
- fUpdating := false;
- fWidgUpdateCount := 0;
+ fManuUpdating := true;
+ manualWidgetUpdate;
+ fManuUpdating := false;
end;
-procedure TCEWidget.beginUpdateByDelay;
+procedure TCEWidget.autoUpdaterEvent(Sender: TObject);
begin
- fUpdaterDelay.Enabled := false;
- fUpdaterDelay.Enabled := true;
- fUpdaterDelay.OnTimer := @updaterLatchProc;
+ if not fNeedAutoUpdate then exit;
+ fAutoUpdating := true;
+ try
+ autoWidgetUpdate;
+ finally
+ fAutoUpdating := false;
+ fNeedAutoUpdate := false;
+ end;
end;
-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;
+procedure TCEWidget.autoWidgetUpdate;
begin
end;
-procedure TCEWidget.UpdateByEvent;
-begin
-end;
-
-procedure TCEWidget.UpdateByDelay;
+procedure TCEWidget.manualWidgetUpdate;
begin
end;
@@ -224,22 +174,6 @@ begin
result := nil;
end;
-procedure TCEWidget.docNew(const aDoc: TCESynMemo);
-begin
-end;
-
-procedure TCEWidget.docFocused(const aDoc: TCESynMemo);
-begin
-end;
-
-procedure TCEWidget.docChanged(const aDoc: TCESynMemo);
-begin
-end;
-
-procedure TCEWidget.docClose(const aDoc: TCESynMemo);
-begin
-end;
-
(*******************************************************************************
* TCEWidgetList
*)
diff --git a/src/ce_widgettypes.pas b/src/ce_widgettypes.pas
index 2f9284ea..8f7163dd 100644
--- a/src/ce_widgettypes.pas
+++ b/src/ce_widgettypes.pas
@@ -5,7 +5,7 @@ unit ce_widgettypes;
interface
uses
- Classes, SysUtils, actnList, ce_synmemo, ce_project;
+ Classes, SysUtils, actnList, ce_project;
type
@@ -13,10 +13,8 @@ type
* An implementer is informed when a new document is added, focused or closed.
*)
ICEMultiDocMonitor = interface
- procedure docNew(const aDoc: TCESynMemo);
- procedure docFocused(const aDoc: TCESynMemo);
- procedure docChanged(const aDoc: TCESynMemo);
- procedure docClose(const aDoc: TCESynMemo);
+ procedure docChange(const aNewIndex: integer);
+ procedure docClose(const aNewIndex: integer);
end;
(**