diff --git a/debugger/breakpointsdlg.pp b/debugger/breakpointsdlg.pp index e314e9fa6f..b404cb79f6 100644 --- a/debugger/breakpointsdlg.pp +++ b/debugger/breakpointsdlg.pp @@ -134,7 +134,9 @@ type procedure JumpToCurrentBreakPoint; procedure ShowProperties; protected + procedure DoBeginUpdate; override; procedure DoEndUpdate; override; + procedure DisableAllActions; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; @@ -351,11 +353,16 @@ var n: Integer; Item: TListItem; begin - for n := 0 to lvBreakPoints.Items.Count -1 do - begin - Item := lvBreakPoints.Items[n]; - if Item.Selected then - TIDEBreakPoint(Item.Data).Enabled := True; + try + DisableAllActions; + for n := 0 to lvBreakPoints.Items.Count -1 do + begin + Item := lvBreakPoints.Items[n]; + if Item.Selected then + TIDEBreakPoint(Item.Data).Enabled := True; + end; + finally + lvBreakPointsSelectItem(nil, nil, False); end; end; @@ -364,11 +371,16 @@ var n: Integer; Item: TListItem; begin - for n := 0 to lvBreakPoints.Items.Count -1 do - begin - Item := lvBreakPoints.Items[n]; - if Item.Selected then - TIDEBreakPoint(Item.Data).Enabled := False; + try + DisableAllActions; + for n := 0 to lvBreakPoints.Items.Count -1 do + begin + Item := lvBreakPoints.Items[n]; + if Item.Selected then + TIDEBreakPoint(Item.Data).Enabled := False; + end; + finally + lvBreakPointsSelectItem(nil, nil, False); end; end; @@ -484,19 +496,24 @@ var CurBreakPoint: TIDEBreakPoint; Filename: String; begin - CurItem:=lvBreakPoints.Selected; - if (CurItem=nil) then exit; - Filename:=TIDEBreakpoint(CurItem.Data).Source; - if MessageDlg(lisDeleteAllBreakpoints, - Format(lisDeleteAllBreakpoints2, ['"', Filename, '"']), - mtConfirmation,[mbYes,mbCancel],0)<>mrYes - then exit; - for n := lvBreakPoints.Items.Count - 1 downto 0 do - begin - Item := lvBreakPoints.Items[n]; - CurBreakPoint:=TIDEBreakPoint(Item.Data); - if CompareFilenames(CurBreakPoint.Source,Filename)=0 - then CurBreakPoint.Free; + try + DisableAllActions; + CurItem:=lvBreakPoints.Selected; + if (CurItem=nil) then exit; + Filename:=TIDEBreakpoint(CurItem.Data).Source; + if MessageDlg(lisDeleteAllBreakpoints, + Format(lisDeleteAllBreakpoints2, ['"', Filename, '"']), + mtConfirmation,[mbYes,mbCancel],0)<>mrYes + then exit; + for n := lvBreakPoints.Items.Count - 1 downto 0 do + begin + Item := lvBreakPoints.Items[n]; + CurBreakPoint:=TIDEBreakPoint(Item.Data); + if CompareFilenames(CurBreakPoint.Source,Filename)=0 + then CurBreakPoint.Free; + end; + finally + lvBreakPointsSelectItem(nil, nil, False); end; end; @@ -508,15 +525,20 @@ var CurBreakPoint: TIDEBreakPoint; Filename: String; begin - CurItem:=lvBreakPoints.Selected; - if (CurItem=nil) then exit; - Filename:=TIDEBreakpoint(CurItem.Data).Source; - for n := 0 to lvBreakPoints.Items.Count - 1 do - begin - Item := lvBreakPoints.Items[n]; - CurBreakPoint:=TIDEBreakPoint(Item.Data); - if CompareFilenames(CurBreakPoint.Source,Filename)=0 - then CurBreakPoint.Enabled := False; + try + DisableAllActions; + CurItem:=lvBreakPoints.Selected; + if (CurItem=nil) then exit; + Filename:=TIDEBreakpoint(CurItem.Data).Source; + for n := 0 to lvBreakPoints.Items.Count - 1 do + begin + Item := lvBreakPoints.Items[n]; + CurBreakPoint:=TIDEBreakPoint(Item.Data); + if CompareFilenames(CurBreakPoint.Source,Filename)=0 + then CurBreakPoint.Enabled := False; + end; + finally + lvBreakPointsSelectItem(nil, nil, False); end; end; @@ -528,15 +550,20 @@ var CurBreakPoint: TIDEBreakPoint; Filename: String; begin - CurItem:=lvBreakPoints.Selected; - if (CurItem=nil) then exit; - Filename:=TIDEBreakpoint(CurItem.Data).Source; - for n := 0 to lvBreakPoints.Items.Count - 1 do - begin - Item := lvBreakPoints.Items[n]; - CurBreakPoint:=TIDEBreakPoint(Item.Data); - if CompareFilenames(CurBreakPoint.Source,Filename)=0 - then CurBreakPoint.Enabled := True; + try + DisableAllActions; + CurItem:=lvBreakPoints.Selected; + if (CurItem=nil) then exit; + Filename:=TIDEBreakpoint(CurItem.Data).Source; + for n := 0 to lvBreakPoints.Items.Count - 1 do + begin + Item := lvBreakPoints.Items[n]; + CurBreakPoint:=TIDEBreakPoint(Item.Data); + if CompareFilenames(CurBreakPoint.Source,Filename)=0 + then CurBreakPoint.Enabled := True; + end; + finally + lvBreakPointsSelectItem(nil, nil, False); end; end; @@ -544,16 +571,21 @@ procedure TBreakPointsDlg.popDeleteAllClick(Sender: TObject); var n: Integer; begin - if MessageDlg(lisDeleteAllBreakpoints, - lisDeleteAllBreakpoints, - mtConfirmation,[mbYes,mbCancel],0)<>mrYes - then exit; - lvBreakPoints.BeginUpdate; try - for n := lvBreakPoints.Items.Count - 1 downto 0 do - TIDEBreakPoint(lvBreakPoints.Items[n].Data).Free; + DisableAllActions; + if MessageDlg(lisDeleteAllBreakpoints, + lisDeleteAllBreakpoints, + mtConfirmation,[mbYes,mbCancel],0)<>mrYes + then exit; + lvBreakPoints.BeginUpdate; + try + for n := lvBreakPoints.Items.Count - 1 downto 0 do + TIDEBreakPoint(lvBreakPoints.Items[n].Data).Free; + finally + lvBreakPoints.EndUpdate; + end; finally - lvBreakPoints.EndUpdate; + lvBreakPointsSelectItem(nil, nil, False); end; end; @@ -564,7 +596,12 @@ end; procedure TBreakPointsDlg.popDeleteClick(Sender: TObject); begin - DeleteSelectedBreakpoints + try + DisableAllActions; + DeleteSelectedBreakpoints + finally + lvBreakPointsSelectItem(nil, nil, False); + end; end; procedure TBreakPointsDlg.popDisableAllClick(Sender: TObject); @@ -572,11 +609,16 @@ var n: Integer; Item: TListItem; begin - for n := 0 to lvBreakPoints.Items.Count - 1 do - begin - Item := lvBreakPoints.Items[n]; - if Item.Data <> nil - then TIDEBreakPoint(Item.Data).Enabled := False; + try + DisableAllActions; + for n := 0 to lvBreakPoints.Items.Count - 1 do + begin + Item := lvBreakPoints.Items[n]; + if Item.Data <> nil + then TIDEBreakPoint(Item.Data).Enabled := False; + end; + finally + lvBreakPointsSelectItem(nil, nil, False); end; end; @@ -585,11 +627,16 @@ var n: Integer; Item: TListItem; begin - for n := 0 to lvBreakPoints.Items.Count - 1 do - begin - Item := lvBreakPoints.Items[n]; - if Item.Data <> nil - then TIDEBreakPoint(Item.Data).Enabled := True; + try + DisableAllActions; + for n := 0 to lvBreakPoints.Items.Count - 1 do + begin + Item := lvBreakPoints.Items[n]; + if Item.Data <> nil + then TIDEBreakPoint(Item.Data).Enabled := True; + end; + finally + lvBreakPointsSelectItem(nil, nil, False); end; end; @@ -599,34 +646,53 @@ var Item: TListItem; Enable: Boolean; begin - Item:=lvBreakPoints.Selected; - if (Item=nil) then exit; + try + DisableAllActions; + Item:=lvBreakPoints.Selected; + if (Item=nil) then exit; - Enable := not TIDEBreakPoint(Item.Data).Enabled; + Enable := not TIDEBreakPoint(Item.Data).Enabled; - if lvBreakPoints.SelCount > 1 - then begin - for n := 0 to lvBreakPoints.Items.Count -1 do - begin - Item := lvBreakPoints.Items[n]; - if Item.Selected then - TIDEBreakPoint(Item.Data).Enabled := Enable; + if lvBreakPoints.SelCount > 1 + then begin + for n := 0 to lvBreakPoints.Items.Count -1 do + begin + Item := lvBreakPoints.Items[n]; + if Item.Selected then + TIDEBreakPoint(Item.Data).Enabled := Enable; + end; + end + else begin + TIDEBreakPoint(Item.Data).Enabled:= Enable; end; - end - else begin - TIDEBreakPoint(Item.Data).Enabled:= Enable; + finally + lvBreakPointsSelectItem(nil, nil, False); end; end; procedure TBreakPointsDlg.popPropertiesClick(Sender: TObject); begin - ShowProperties; + try + DisableAllActions; + ShowProperties; + finally + lvBreakPointsSelectItem(nil, nil, False); + end; end; procedure TBreakPointsDlg.DoEndUpdate; begin inherited DoEndUpdate; if bpdsItemsNeedUpdate in FStates then UpdateAll; + lvBreakPointsSelectItem(nil, nil, False); +end; + +procedure TBreakPointsDlg.DisableAllActions; +var + i: Integer; +begin + for i := 0 to ActionList1.ActionCount - 1 do + (ActionList1.Actions[i] as TAction).Enabled := False; end; procedure TBreakPointsDlg.UpdateItem(const AnItem: TListItem; @@ -761,5 +827,11 @@ begin DebugBoss.ShowBreakPointProperties(CurBreakPoint); end; +procedure TBreakPointsDlg.DoBeginUpdate; +begin + inherited DoBeginUpdate; + DisableAllActions; +end; + end. diff --git a/debugger/callstackdlg.pp b/debugger/callstackdlg.pp index f012cf8e8c..8ed22ce3a5 100644 --- a/debugger/callstackdlg.pp +++ b/debugger/callstackdlg.pp @@ -126,6 +126,8 @@ type protected procedure DoBeginUpdate; override; procedure DoEndUpdate; override; + procedure DisableAllActions; + procedure EnableAllActions; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; @@ -307,12 +309,30 @@ end; procedure TCallStackDlg.DoBeginUpdate; begin + DisableAllActions; lvCallStack.BeginUpdate; end; procedure TCallStackDlg.DoEndUpdate; begin lvCallStack.EndUpdate; + EnableAllActions; +end; + +procedure TCallStackDlg.DisableAllActions; +var + i: Integer; +begin + for i := 0 to aclActions.ActionCount - 1 do + (aclActions.Actions[i] as TAction).Enabled := False; +end; + +procedure TCallStackDlg.EnableAllActions; +var + i: Integer; +begin + for i := 0 to aclActions.ActionCount - 1 do + (aclActions.Actions[i] as TAction).Enabled := True; end; function TCallStackDlg.GetCurrentEntry: TCallStackEntry; @@ -381,19 +401,24 @@ var BreakPoint: TIDEBreakPoint; FileName: String; begin - if (Item <> nil) and (BreakPoints <> nil) then - begin - idx := FViewStart + Item.Index; - if idx >= CallStack.Count then Exit; - Entry := CallStack.Entries[idx]; - FileName := Entry.Source; - if (FileName = '') or not DebugBoss.GetFullFilename(FileName, False) then - Exit; - BreakPoint := BreakPoints.Find(FileName, Entry.Line); - if BreakPoint <> nil then - DebugBoss.DoDeleteBreakPoint(BreakPoint.Source, BreakPoint.Line) - else - DebugBoss.DoCreateBreakPoint(FileName, Entry.Line, False); + try + DisableAllActions; + if (Item <> nil) and (BreakPoints <> nil) then + begin + idx := FViewStart + Item.Index; + if idx >= CallStack.Count then Exit; + Entry := CallStack.Entries[idx]; + FileName := Entry.Source; + if (FileName = '') or not DebugBoss.GetFullFilename(FileName, False) then + Exit; + BreakPoint := BreakPoints.Find(FileName, Entry.Line); + if BreakPoint <> nil then + DebugBoss.DoDeleteBreakPoint(BreakPoint.Source, BreakPoint.Line) + else + DebugBoss.DoCreateBreakPoint(FileName, Entry.Line, False); + end; + finally + EnableAllActions; end; end; @@ -439,10 +464,15 @@ procedure TCallStackDlg.actSetAsCurrentClick(Sender : TObject); var Entry: TCallStackEntry; begin - Entry := GetCurrentEntry; - if Entry = nil then Exit; + try + DisableAllActions; + Entry := GetCurrentEntry; + if Entry = nil then Exit; - CallStack.Current := Entry; + CallStack.Current := Entry; + finally + EnableAllActions; + end; end; procedure TCallStackDlg.actShowClick(Sender: TObject); @@ -452,9 +482,14 @@ end; procedure TCallStackDlg.actViewBottomExecute(Sender: TObject); begin - if CallStack <> nil - then SetViewStart(CallStack.Count - FViewLimit) - else SetViewStart(0); + try + DisableAllActions; + if CallStack <> nil + then SetViewStart(CallStack.Count - FViewLimit) + else SetViewStart(0); + finally + EnableAllActions; + end; end; procedure TCallStackDlg.actToggleBreakPointExecute(Sender: TObject); @@ -464,21 +499,36 @@ end; procedure TCallStackDlg.actViewGotoExecute(Sender: TObject); begin - SetViewStart(StrToIntDef(txtGoto.Text, 0)); + try + DisableAllActions; + SetViewStart(StrToIntDef(txtGoto.Text, 0)); + finally + EnableAllActions; + end; end; procedure TCallStackDlg.actViewMoreExecute(Sender: TObject); begin - ToolButtonPower.Down := True; - ToolButtonPowerClick(nil); - ViewLimit := ViewLimit + FViewCount; + try + DisableAllActions; + ToolButtonPower.Down := True; + ToolButtonPowerClick(nil); + ViewLimit := ViewLimit + FViewCount; + finally + EnableAllActions; + end; end; procedure TCallStackDlg.actViewTopExecute(Sender: TObject); begin - ToolButtonPower.Down := True; - ToolButtonPowerClick(nil); - SetViewStart(0); + try + DisableAllActions; + ToolButtonPower.Down := True; + ToolButtonPowerClick(nil); + SetViewStart(0); + finally + EnableAllActions; + end; end; procedure TCallStackDlg.BreakPointChanged(const ASender: TIDEBreakPoints; @@ -571,9 +621,14 @@ end; procedure TCallStackDlg.actViewLimitExecute(Sender: TObject); begin - ToolButtonPower.Down := True; - ToolButtonPowerClick(nil); - ViewLimit := FViewCount; + try + DisableAllActions; + ToolButtonPower.Down := True; + ToolButtonPowerClick(nil); + ViewLimit := FViewCount; + finally + EnableAllActions; + end; end; procedure TCallStackDlg.SetViewStart(AStart: Integer); diff --git a/debugger/watchesdlg.pp b/debugger/watchesdlg.pp index 826a5893ea..21029f9680 100644 --- a/debugger/watchesdlg.pp +++ b/debugger/watchesdlg.pp @@ -111,6 +111,7 @@ type procedure UpdateItem(const AItem: TListItem; const AWatch: TIDEWatch); procedure UpdateAll; + procedure DisableAllActions; protected public constructor Create(AOwner: TComponent); override; @@ -276,6 +277,8 @@ begin actDeleteAll.Enabled := lvWatches.Items.Count > 0; actProperties.Enabled := ItemSelected; + + actPower.Enabled := True; end; procedure TWatchesDlg.lvWatchesDblClick(Sender: TObject); @@ -320,11 +323,16 @@ var n: Integer; Item: TListItem; begin - for n := 0 to lvWatches.Items.Count -1 do - begin - Item := lvWatches.Items[n]; - if Item.Selected then - TIDEWatch(Item.Data).Enabled := True; + try + DisableAllActions; + for n := 0 to lvWatches.Items.Count -1 do + begin + Item := lvWatches.Items[n]; + if Item.Selected then + TIDEWatch(Item.Data).Enabled := True; + end; + finally + lvWatchesSelectItem(nil, nil, False); end; end; @@ -333,11 +341,16 @@ var n: Integer; Item: TListItem; begin - for n := 0 to lvWatches.Items.Count -1 do - begin - Item := lvWatches.Items[n]; - if Item.Selected then - TIDEWatch(Item.Data).Enabled := False; + try + DisableAllActions; + for n := 0 to lvWatches.Items.Count -1 do + begin + Item := lvWatches.Items[n]; + if Item.Selected then + TIDEWatch(Item.Data).Enabled := False; + end; + finally + lvWatchesSelectItem(nil, nil, False); end; end; @@ -357,26 +370,41 @@ end; procedure TWatchesDlg.popAddClick(Sender: TObject); begin - DebugBoss.ShowWatchProperties(nil); + try + DisableAllActions; + DebugBoss.ShowWatchProperties(nil); + finally + lvWatchesSelectItem(nil, nil, False); + end; end; procedure TWatchesDlg.popDeleteAllClick(Sender: TObject); var n: Integer; begin - for n := lvWatches.Items.Count - 1 downto 0 do - TIDEWatch(lvWatches.Items[n].Data).Free; + try + DisableAllActions; + for n := lvWatches.Items.Count - 1 downto 0 do + TIDEWatch(lvWatches.Items[n].Data).Free; + finally + lvWatchesSelectItem(nil, nil, False); + end; end; procedure TWatchesDlg.popDeleteClick(Sender: TObject); var Item: TIDEWatch; begin - repeat - Item := GetSelected; - Item.Free; - until Item = nil; - //GetSelected.Free; + try + DisableAllActions; + repeat + Item := GetSelected; + Item.Free; + until Item = nil; + //GetSelected.Free; + finally + lvWatchesSelectItem(nil, nil, False); + end; end; procedure TWatchesDlg.popDisableAllClick(Sender: TObject); @@ -384,11 +412,16 @@ var n: Integer; Item: TListItem; begin - for n := 0 to lvWatches.Items.Count - 1 do - begin - Item := lvWatches.Items[n]; - if Item.Data <> nil - then TIDEWatch(Item.Data).Enabled := False; + try + DisableAllActions; + for n := 0 to lvWatches.Items.Count - 1 do + begin + Item := lvWatches.Items[n]; + if Item.Data <> nil + then TIDEWatch(Item.Data).Enabled := False; + end; + finally + lvWatchesSelectItem(nil, nil, False); end; end; @@ -397,11 +430,16 @@ var n: Integer; Item: TListItem; begin - for n := 0 to lvWatches.Items.Count - 1 do - begin - Item := lvWatches.Items[n]; - if Item.Data <> nil - then TIDEWatch(Item.Data).Enabled := True; + try + DisableAllActions; + for n := 0 to lvWatches.Items.Count - 1 do + begin + Item := lvWatches.Items[n]; + if Item.Data <> nil + then TIDEWatch(Item.Data).Enabled := True; + end; + finally + lvWatchesSelectItem(nil, nil, False); end; end; @@ -409,15 +447,25 @@ procedure TWatchesDlg.popEnabledClick(Sender: TObject); var Watch: TIDEWatch; begin - Watch := GetSelected; - if Watch = nil then Exit; - popEnabled.Checked := not popEnabled.Checked; - Watch.Enabled := popEnabled.Checked; + try + DisableAllActions; + Watch := GetSelected; + if Watch = nil then Exit; + popEnabled.Checked := not popEnabled.Checked; + Watch.Enabled := popEnabled.Checked; + finally + lvWatchesSelectItem(nil, nil, False); + end; end; procedure TWatchesDlg.popPropertiesClick(Sender: TObject); begin - DebugBoss.ShowWatchProperties(GetSelected); + try + DisableAllActions; + DebugBoss.ShowWatchProperties(GetSelected); + finally + lvWatchesSelectItem(nil, nil, False); + end; end; procedure TWatchesDlg.UpdateItem(const AItem: TListItem; const AWatch: TIDEWatch); @@ -467,6 +515,14 @@ begin WatchUpdate(FWatches, FWatches.Items[i]); end; +procedure TWatchesDlg.DisableAllActions; +var + i: Integer; +begin + for i := 0 to ActionList1.ActionCount - 1 do + (ActionList1.Actions[i] as TAction).Enabled := False; +end; + procedure TWatchesDlg.WatchAdd(const ASender: TIDEWatches; const AWatch: TIDEWatch); var Item: TListItem;