mirror of https://gitlab.com/basile.b/dexed.git
parent
4903e37542
commit
c91e8e47f8
|
@ -29,8 +29,8 @@ type
|
|||
procedure completionExecute(Sender: TObject);
|
||||
procedure PageControlChange(Sender: TObject);
|
||||
protected
|
||||
procedure UpdateByDelay; override;
|
||||
procedure UpdateByEvent; override;
|
||||
procedure updateDelayed; override;
|
||||
procedure updateImperative; override;
|
||||
private
|
||||
fKeyChanged: boolean;
|
||||
fDoc: TCESynMemo;
|
||||
|
@ -167,8 +167,8 @@ begin
|
|||
fDoc := aDoc;
|
||||
pageControl.ActivePage := sheet;
|
||||
focusedEditorChanged;
|
||||
beginUpdateByDelay;
|
||||
UpdateByEvent;
|
||||
beginDelayedUpdate;
|
||||
updateImperative;
|
||||
end;
|
||||
|
||||
procedure TCEEditorWidget.docClosing(aDoc: TCESynMemo);
|
||||
|
@ -180,7 +180,7 @@ begin
|
|||
fDoc.Parent := nil;
|
||||
fDoc := nil;
|
||||
if sheet <> nil then sheet.Free;
|
||||
UpdateByEvent;
|
||||
updateImperative;
|
||||
end;
|
||||
|
||||
procedure TCEEditorWidget.docFocused(aDoc: TCESynMemo);
|
||||
|
@ -188,16 +188,16 @@ begin
|
|||
if aDoc = fDoc then exit;
|
||||
fDoc := aDoc;
|
||||
focusedEditorChanged;
|
||||
beginUpdateByDelay;
|
||||
UpdateByEvent;
|
||||
beginDelayedUpdate;
|
||||
updateImperative;
|
||||
end;
|
||||
|
||||
procedure TCEEditorWidget.docChanged(aDoc: TCESynMemo);
|
||||
begin
|
||||
if fDoc <> aDoc then exit;
|
||||
fKeyChanged := true;
|
||||
beginUpdateByDelay;
|
||||
UpdateByEvent;
|
||||
beginDelayedUpdate;
|
||||
updateImperative;
|
||||
end;
|
||||
{$ENDREGION}
|
||||
|
||||
|
@ -300,13 +300,13 @@ begin
|
|||
if (pageControl.ActivePage.Caption = '') then
|
||||
begin
|
||||
fKeyChanged := true;
|
||||
beginUpdateByDelay;
|
||||
beginDelayedUpdate;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCEEditorWidget.PageControlChange(Sender: TObject);
|
||||
begin
|
||||
UpdateByEvent;
|
||||
updateImperative;
|
||||
end;
|
||||
|
||||
procedure TCEEditorWidget.completionExecute(Sender: TObject);
|
||||
|
@ -325,12 +325,12 @@ end;
|
|||
|
||||
procedure TCEEditorWidget.memoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||
begin
|
||||
UpdateByEvent;
|
||||
updateImperative;
|
||||
case Byte(Key) of
|
||||
VK_CLEAR,VK_RETURN,VK_BACK : fKeyChanged := true;
|
||||
end;
|
||||
if fKeyChanged then
|
||||
beginUpdateByDelay;
|
||||
beginDelayedUpdate;
|
||||
//
|
||||
if (Key = VK_UP) and (shift = [ssShift,ssCtrl]) then
|
||||
getSymbolLoc;
|
||||
|
@ -339,19 +339,19 @@ end;
|
|||
procedure TCEEditorWidget.memoKeyPress(Sender: TObject; var Key: char);
|
||||
begin
|
||||
fKeyChanged := true;
|
||||
beginUpdateByDelay;
|
||||
beginDelayedUpdate;
|
||||
end;
|
||||
|
||||
procedure TCEEditorWidget.memoMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
||||
begin
|
||||
beginUpdateByDelay;
|
||||
UpdateByEvent;
|
||||
beginDelayedUpdate;
|
||||
updateImperative;
|
||||
end;
|
||||
|
||||
procedure TCEEditorWidget.memoMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
|
||||
begin
|
||||
if not (ssLeft in Shift) then exit;
|
||||
beginUpdateByDelay;
|
||||
beginDelayedUpdate;
|
||||
end;
|
||||
|
||||
procedure TCEEditorWidget.memoCtrlClick(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
||||
|
@ -402,7 +402,7 @@ begin
|
|||
DcdWrapper.getComplAtCursor(completion.ItemList);
|
||||
end;
|
||||
|
||||
procedure TCEEditorWidget.UpdateByEvent;
|
||||
procedure TCEEditorWidget.updateImperative;
|
||||
const
|
||||
modstr: array[boolean] of string = ('...', 'MODIFIED');
|
||||
begin
|
||||
|
@ -429,12 +429,12 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
procedure TCEEditorWidget.UpdateByDelay;
|
||||
procedure TCEEditorWidget.updateDelayed;
|
||||
var
|
||||
md: string;
|
||||
begin
|
||||
if fDoc = nil then exit;
|
||||
UpdateByEvent;
|
||||
updateImperative;
|
||||
if not fKeyChanged then exit;
|
||||
//
|
||||
fKeyChanged := false;
|
||||
|
|
|
@ -47,7 +47,7 @@ type
|
|||
procedure projFocused(aProject: TCEProject);
|
||||
procedure projCompiling(aProject: TCEProject);
|
||||
protected
|
||||
procedure UpdateByEvent; override;
|
||||
procedure updateImperative; override;
|
||||
procedure SetVisible(Value: boolean); override;
|
||||
public
|
||||
constructor create(aOwner: TComponent); override;
|
||||
|
@ -92,7 +92,7 @@ end;
|
|||
procedure TCEProjectConfigurationWidget.SetVisible(Value: boolean);
|
||||
begin
|
||||
inherited;
|
||||
if Visible then UpdateByEvent;
|
||||
if Visible then updateImperative;
|
||||
end;
|
||||
|
||||
{$ENDREGION --------------------------------------------------------------------}
|
||||
|
@ -100,9 +100,9 @@ end;
|
|||
{$REGION ICEProjectObserver ----------------------------------------------------}
|
||||
procedure TCEProjectConfigurationWidget.projNew(aProject: TCEProject);
|
||||
begin
|
||||
beginUpdateByEvent;
|
||||
beginImperativeUpdate;
|
||||
fProj := aProject;
|
||||
if Visible then UpdateByEvent;
|
||||
if Visible then updateImperative;
|
||||
syncroMode := false;
|
||||
end;
|
||||
|
||||
|
@ -121,13 +121,13 @@ procedure TCEProjectConfigurationWidget.projChanged(aProject: TCEProject);
|
|||
begin
|
||||
if fProj <> aProject then exit;
|
||||
fProj := aProject;
|
||||
if Visible then UpdateByEvent;
|
||||
if Visible then updateImperative;
|
||||
end;
|
||||
|
||||
procedure TCEProjectConfigurationWidget.projFocused(aProject: TCEProject);
|
||||
begin
|
||||
fProj := aProject;
|
||||
if Visible then UpdateByEvent;
|
||||
if Visible then updateImperative;
|
||||
end;
|
||||
|
||||
procedure TCEProjectConfigurationWidget.projCompiling(aProject: TCEProject);
|
||||
|
@ -142,9 +142,9 @@ begin
|
|||
if Updating then exit;
|
||||
if selConf.ItemIndex = -1 then exit;
|
||||
//
|
||||
beginUpdateByEvent;
|
||||
beginImperativeUpdate;
|
||||
fProj.ConfigurationIndex := selConf.ItemIndex;
|
||||
endUpdateByEvent;
|
||||
endImperativeUpdate;
|
||||
end;
|
||||
|
||||
procedure TCEProjectConfigurationWidget.TreeChange(Sender: TObject;
|
||||
|
@ -261,12 +261,12 @@ begin
|
|||
if fProj = nil then exit;
|
||||
//
|
||||
nme := '';
|
||||
beginUpdateByEvent;
|
||||
beginImperativeUpdate;
|
||||
cfg := fProj.addConfiguration;
|
||||
// note: Cancel is actually related to the conf. name not to the add operation.
|
||||
if InputQuery('Configuration name', '', nme) then cfg.name := nme;
|
||||
fProj.ConfigurationIndex := cfg.Index;
|
||||
endUpdateByEvent;
|
||||
endImperativeUpdate;
|
||||
end;
|
||||
|
||||
procedure TCEProjectConfigurationWidget.btnDelConfClick(Sender: TObject);
|
||||
|
@ -274,13 +274,13 @@ begin
|
|||
if fProj = nil then exit;
|
||||
if fProj.OptionsCollection.Count = 1 then exit;
|
||||
//
|
||||
beginUpdateByEvent;
|
||||
beginImperativeUpdate;
|
||||
inspector.TIObject := nil;
|
||||
inspector.Clear;
|
||||
Invalidate;
|
||||
fProj.OptionsCollection.Delete(selConf.ItemIndex);
|
||||
fProj.ConfigurationIndex := 0;
|
||||
endUpdateByEvent;
|
||||
endImperativeUpdate;
|
||||
end;
|
||||
|
||||
procedure TCEProjectConfigurationWidget.btnCloneCurrClick(Sender: TObject);
|
||||
|
@ -291,13 +291,13 @@ begin
|
|||
if fProj = nil then exit;
|
||||
//
|
||||
nme := '';
|
||||
beginUpdateByEvent;
|
||||
beginImperativeUpdate;
|
||||
src := fProj.currentConfiguration;
|
||||
trg := fProj.addConfiguration;
|
||||
trg.assign(src);
|
||||
if InputQuery('Configuration name', '', nme) then trg.name := nme;
|
||||
fProj.ConfigurationIndex := trg.Index;
|
||||
endUpdateByEvent;
|
||||
endImperativeUpdate;
|
||||
end;
|
||||
|
||||
procedure TCEProjectConfigurationWidget.btnSyncEditClick(Sender: TObject);
|
||||
|
@ -365,7 +365,7 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
procedure TCEProjectConfigurationWidget.UpdateByEvent;
|
||||
procedure TCEProjectConfigurationWidget.updateImperative;
|
||||
var
|
||||
i: NativeInt;
|
||||
begin
|
||||
|
|
|
@ -51,7 +51,7 @@ type
|
|||
procedure replaceEvent(Sender: TObject; const ASearch, AReplace:
|
||||
string; Line, Column: integer; var ReplaceAction: TSynReplaceAction);
|
||||
protected
|
||||
procedure UpdateByEvent; override;
|
||||
procedure updateImperative; override;
|
||||
public
|
||||
constructor Create(aOwner: TComponent); override;
|
||||
destructor Destroy; override;
|
||||
|
@ -221,7 +221,7 @@ begin
|
|||
fHasRestarted := false;
|
||||
chkFromCur.Checked := true;
|
||||
end;
|
||||
UpdateByEvent;
|
||||
updateImperative;
|
||||
end;
|
||||
|
||||
procedure TCESearchWidget.actReplaceNextExecute(sender: TObject);
|
||||
|
@ -249,7 +249,7 @@ begin
|
|||
if fDoc.SearchReplace(fToFind, fReplaceWth, getOptions + [ssoReplace]) <> 0 then
|
||||
fHasSearched := true;
|
||||
fDoc.OnReplaceText := nil;
|
||||
UpdateByEvent;
|
||||
updateImperative;
|
||||
end;
|
||||
|
||||
procedure TCESearchWidget.actReplaceAllExecute(sender: TObject);
|
||||
|
@ -275,7 +275,7 @@ begin
|
|||
end;
|
||||
end;
|
||||
fDoc.OnReplaceText := nil;
|
||||
UpdateByEvent;
|
||||
updateImperative;
|
||||
end;
|
||||
{$ENDREGION}
|
||||
|
||||
|
@ -283,20 +283,20 @@ end;
|
|||
procedure TCESearchWidget.docNew(aDoc: TCESynMemo);
|
||||
begin
|
||||
fDoc := aDoc;
|
||||
UpdateByEvent;
|
||||
updateImperative;
|
||||
end;
|
||||
|
||||
procedure TCESearchWidget.docClosing(aDoc: TCESynMemo);
|
||||
begin
|
||||
if fDoc = aDoc then fDoc := nil;
|
||||
UpdateByEvent;
|
||||
updateImperative;
|
||||
end;
|
||||
|
||||
procedure TCESearchWidget.docFocused(aDoc: TCESynMemo);
|
||||
begin
|
||||
if fDoc = aDoc then exit;
|
||||
fDoc := aDoc;
|
||||
UpdateByEvent;
|
||||
updateImperative;
|
||||
end;
|
||||
|
||||
procedure TCESearchWidget.docChanged(aDoc: TCESynMemo);
|
||||
|
@ -315,7 +315,7 @@ end;
|
|||
procedure TCESearchWidget.chkEnableRepChange(Sender: TObject);
|
||||
begin
|
||||
if Updating then exit;
|
||||
UpdateByEvent;
|
||||
updateImperative;
|
||||
end;
|
||||
|
||||
procedure TCESearchWidget.cbReplaceWthChange(Sender: TObject);
|
||||
|
@ -325,7 +325,7 @@ begin
|
|||
fHasSearched := false;
|
||||
end;
|
||||
|
||||
procedure TCESearchWidget.UpdateByEvent;
|
||||
procedure TCESearchWidget.updateImperative;
|
||||
begin
|
||||
fActFindNext.Enabled := fDoc <> nil;
|
||||
fActReplaceNext.Enabled := (fDoc <> nil) and (chkEnableRep.Checked);
|
||||
|
|
|
@ -102,8 +102,7 @@ type
|
|||
procedure btnRefreshClick(Sender: TObject);
|
||||
procedure TreeDeletion(Sender: TObject; Node: TTreeNode);
|
||||
procedure TreeFilterEdit1AfterFilter(Sender: TObject);
|
||||
function TreeFilterEdit1FilterItem(Item: TObject; out Done: Boolean
|
||||
): Boolean;
|
||||
function TreeFilterEdit1FilterItem(Item: TObject; out Done: Boolean): Boolean;
|
||||
procedure TreeFilterEdit1MouseEnter(Sender: TObject);
|
||||
procedure TreeKeyPress(Sender: TObject; var Key: char);
|
||||
private
|
||||
|
@ -149,7 +148,7 @@ type
|
|||
function optionedWantContainer: TPersistent;
|
||||
procedure optionedEvent(anEvent: TOptionEditorEvent);
|
||||
protected
|
||||
procedure UpdateByDelay; override;
|
||||
procedure updateDelayed; override;
|
||||
//
|
||||
function contextName: string; override;
|
||||
function contextActionCount: integer; override;
|
||||
|
@ -411,17 +410,17 @@ end;
|
|||
|
||||
procedure TCESymbolListWidget.actAutoRefreshExecute(Sender: TObject);
|
||||
begin
|
||||
autoRefresh := not autoRefresh;
|
||||
autoRefresh := fActAutoRefresh.Checked;
|
||||
end;
|
||||
|
||||
procedure TCESymbolListWidget.actRefreshOnChangeExecute(Sender: TObject);
|
||||
begin
|
||||
refreshOnChange := not refreshOnChange;
|
||||
refreshOnChange := fActRefreshOnChange.Checked;
|
||||
end;
|
||||
|
||||
procedure TCESymbolListWidget.actRefreshOnFocusExecute(Sender: TObject);
|
||||
begin
|
||||
refreshOnFocus := not refreshOnFocus;
|
||||
refreshOnFocus := fActRefreshOnFocus.Checked;
|
||||
end;
|
||||
|
||||
procedure TCESymbolListWidget.actCopyIdentExecute(Sender: TObject);
|
||||
|
@ -460,7 +459,7 @@ end;
|
|||
procedure TCESymbolListWidget.docNew(aDoc: TCESynMemo);
|
||||
begin
|
||||
fDoc := aDoc;
|
||||
beginUpdateByDelay;
|
||||
beginDelayedUpdate;
|
||||
end;
|
||||
|
||||
procedure TCESymbolListWidget.docClosing(aDoc: TCESynMemo);
|
||||
|
@ -477,7 +476,7 @@ begin
|
|||
fDoc := aDoc;
|
||||
if not Visible then exit;
|
||||
//
|
||||
if fAutoRefresh then beginUpdateByDelay
|
||||
if fAutoRefresh then beginDelayedUpdate
|
||||
else if fRefreshOnFocus then callToolProc;
|
||||
end;
|
||||
|
||||
|
@ -486,13 +485,13 @@ begin
|
|||
if fDoc <> aDoc then exit;
|
||||
if not Visible then exit;
|
||||
//
|
||||
if fAutoRefresh then beginUpdateByDelay
|
||||
if fAutoRefresh then beginDelayedUpdate
|
||||
else if fRefreshOnChange then callToolProc;
|
||||
end;
|
||||
{$ENDREGION}
|
||||
|
||||
{$REGION Symbol-tree things ----------------------------------------------------}
|
||||
procedure TCESymbolListWidget.UpdateByDelay;
|
||||
procedure TCESymbolListWidget.updateDelayed;
|
||||
begin
|
||||
if not fAutoRefresh then exit;
|
||||
callToolProc;
|
||||
|
|
|
@ -24,7 +24,8 @@ type
|
|||
fLoopInter: Integer;
|
||||
fUpdaterAuto: TTimer;
|
||||
fUpdaterDelay: TTimer;
|
||||
fWidgUpdateCount: NativeInt;
|
||||
fImperativeUpdateCount: Integer;
|
||||
fLoopUpdateCount: Integer;
|
||||
procedure setDelayDur(aValue: Integer);
|
||||
procedure setLoopInt(aValue: Integer);
|
||||
procedure updaterAutoProc(Sender: TObject);
|
||||
|
@ -39,11 +40,11 @@ type
|
|||
fModal: boolean;
|
||||
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;
|
||||
procedure updateLoop; virtual;
|
||||
// a descendant overrides to implement an imperative update.
|
||||
procedure updateImperative; virtual;
|
||||
// a descendant overrides to implement a delayed update.
|
||||
procedure updateDelayed; virtual;
|
||||
//
|
||||
function contextName: string; virtual;
|
||||
function contextActionCount: integer; virtual;
|
||||
|
@ -63,19 +64,23 @@ type
|
|||
// restarts the wait period to the delayed update event.
|
||||
// if not re-called during 'updaterByDelayDuration' ms then
|
||||
// 'UpdateByDelay' is called once.
|
||||
procedure beginUpdateByDelay;
|
||||
procedure beginDelayedUpdate;
|
||||
// prevent any pending update.
|
||||
procedure stopUpdateByDelay;
|
||||
// immediate call any pending update.
|
||||
procedure endUpdatebyDelay;
|
||||
// increments the updates count.
|
||||
procedure beginUpdateByEvent;
|
||||
// decrements the update count and call 'UpdateByEvent' if the
|
||||
// counter value is null.
|
||||
procedure endUpdateByEvent;
|
||||
// immediate call 'UpdateByEvent'
|
||||
procedure forceUpdateByEvent;
|
||||
//
|
||||
procedure stopDelayedUpdate;
|
||||
// immediate call any pending delayed update.
|
||||
procedure forceDelayedUpdate;
|
||||
|
||||
// increments the imperative updates count.
|
||||
procedure beginImperativeUpdate;
|
||||
// decrements the imperative updates count and call updateImperative() if the
|
||||
// counter value is equal to zero.
|
||||
procedure endImperativeUpdate;
|
||||
// calls updateImperative() immediatly
|
||||
procedure forceImperativeUpdate;
|
||||
|
||||
// increment a flag used to indicate if updateLoop has to be called
|
||||
procedure IncLoopUpdate;
|
||||
|
||||
// returns true if one of the three updater is processing.
|
||||
property updating: boolean read fUpdating;
|
||||
// true by default, allow a widget to be docked.
|
||||
|
@ -223,42 +228,47 @@ begin
|
|||
fUpdaterAuto.Interval := fLoopInter;
|
||||
end;
|
||||
|
||||
procedure TCEWidget.beginUpdateByEvent;
|
||||
procedure TCEWidget.IncLoopUpdate;
|
||||
begin
|
||||
Inc(fWidgUpdateCount);
|
||||
inc(fLoopUpdateCount);
|
||||
end;
|
||||
|
||||
procedure TCEWidget.endUpdateByEvent;
|
||||
procedure TCEWidget.beginImperativeUpdate;
|
||||
begin
|
||||
Dec(fWidgUpdateCount);
|
||||
if fWidgUpdateCount > 0 then exit;
|
||||
Inc(fImperativeUpdateCount);
|
||||
end;
|
||||
|
||||
procedure TCEWidget.endImperativeUpdate;
|
||||
begin
|
||||
Dec(fImperativeUpdateCount);
|
||||
if fImperativeUpdateCount > 0 then exit;
|
||||
fUpdating := true;
|
||||
UpdateByEvent;
|
||||
updateImperative;
|
||||
fUpdating := false;
|
||||
fWidgUpdateCount := 0;
|
||||
fImperativeUpdateCount := 0;
|
||||
end;
|
||||
|
||||
procedure TCEWidget.forceUpdateByEvent;
|
||||
procedure TCEWidget.forceImperativeUpdate;
|
||||
begin
|
||||
fUpdating := true;
|
||||
UpdateByEvent;
|
||||
updateImperative;
|
||||
fUpdating := false;
|
||||
fWidgUpdateCount := 0;
|
||||
fImperativeUpdateCount := 0;
|
||||
end;
|
||||
|
||||
procedure TCEWidget.beginUpdateByDelay;
|
||||
procedure TCEWidget.beginDelayedUpdate;
|
||||
begin
|
||||
fUpdaterDelay.Enabled := false;
|
||||
fUpdaterDelay.Enabled := true;
|
||||
fUpdaterDelay.OnTimer := @updaterLatchProc;
|
||||
end;
|
||||
|
||||
procedure TCEWidget.stopUpdateByDelay;
|
||||
procedure TCEWidget.stopDelayedUpdate;
|
||||
begin
|
||||
fUpdaterDelay.OnTimer := nil;
|
||||
end;
|
||||
|
||||
procedure TCEWidget.endUpdateByDelay;
|
||||
procedure TCEWidget.forceDelayedUpdate;
|
||||
begin
|
||||
updaterLatchProc(nil);
|
||||
end;
|
||||
|
@ -266,27 +276,29 @@ end;
|
|||
procedure TCEWidget.updaterAutoProc(Sender: TObject);
|
||||
begin
|
||||
fUpdating := true;
|
||||
UpdateByLoop;
|
||||
if fLoopUpdateCount > 0 then
|
||||
updateLoop;
|
||||
fLoopUpdateCount := 0;
|
||||
fUpdating := false;
|
||||
end;
|
||||
|
||||
procedure TCEWidget.updaterLatchProc(Sender: TObject);
|
||||
begin
|
||||
fUpdating := true;
|
||||
UpdateByDelay;
|
||||
updateDelayed;
|
||||
fUpdating := false;
|
||||
fUpdaterDelay.OnTimer := nil;
|
||||
end;
|
||||
|
||||
procedure TCEWidget.UpdateByLoop;
|
||||
procedure TCEWidget.updateLoop;
|
||||
begin
|
||||
end;
|
||||
|
||||
procedure TCEWidget.UpdateByEvent;
|
||||
procedure TCEWidget.updateImperative;
|
||||
begin
|
||||
end;
|
||||
|
||||
procedure TCEWidget.UpdateByDelay;
|
||||
procedure TCEWidget.updateDelayed;
|
||||
begin
|
||||
end;
|
||||
{$ENDREGION}
|
||||
|
|
Loading…
Reference in New Issue