From 5b02fa6fa6cb3786a74fcb5a30ac626054cebfee Mon Sep 17 00:00:00 2001 From: Basile Burg Date: Sun, 22 Jun 2014 22:21:14 +0200 Subject: [PATCH] Revert "r8" This reverts commit ae31885fe3d7e1649deaf5ff56c66bb1c1f8dbdc. --- lazproj/coedit.lpi | 17 +- lazproj/coedit.lpr | 4 +- src/ce_common.pas | 16 +- src/ce_d2syn.pas | 5 +- src/ce_editor.lfm | 2 + src/ce_editor.pas | 25 +-- src/ce_jsoninfos.pas | 147 ++++++++++++++++ src/ce_main.lfm | 3 +- src/ce_main.pas | 85 +++------- src/ce_projconf.lfm | 46 ++--- src/ce_projconf.pas | 30 ++-- src/ce_project.pas | 26 +-- src/ce_projinspect.lfm | 47 +++-- src/ce_projinspect.pas | 14 +- src/ce_staticexplorer.lfm | 349 ++------------------------------------ src/ce_staticexplorer.pas | 217 ++++-------------------- src/ce_widget.lfm | 5 +- src/ce_widget.pas | 160 +++++------------ src/ce_widgettypes.pas | 8 +- 19 files changed, 360 insertions(+), 846 deletions(-) create mode 100644 src/ce_jsoninfos.pas 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; (**