IDE: use Sender sourceeditor instead of last active sourceeditor

git-svn-id: trunk@39707 -
This commit is contained in:
mattias 2013-01-01 11:33:01 +00:00
parent aa5d98ecb4
commit 9f25516ea6
2 changed files with 61 additions and 19 deletions

View File

@ -2887,19 +2887,25 @@ end;
procedure TMainIDE.mnuSetFreeBookmark(Sender: TObject);
begin
OnSrcNotebookEditorDoSetBookmark(SourceEditorManager.ActiveEditor, -1, False);
OnSrcNotebookEditorDoSetBookmark(SourceEditorManager.SenderToEditor(Sender), -1, False);
end;
procedure TMainIDE.mnuSaveClicked(Sender: TObject);
var
SrcEdit: TSourceEditor;
begin
if SourceEditorManager.ActiveEditor = nil then exit;
DoSaveEditorFile(SourceEditorManager.ActiveEditor, [sfCheckAmbiguousFiles]);
SrcEdit:=SourceEditorManager.SenderToEditor(Sender);
if SrcEdit = nil then exit;
DoSaveEditorFile(SrcEdit, [sfCheckAmbiguousFiles]);
end;
procedure TMainIDE.mnuSaveAsClicked(Sender: TObject);
var
SrcEdit: TSourceEditor;
begin
if SourceEditorManager.ActiveEditor = nil then exit;
DoSaveEditorFile(SourceEditorManager.ActiveEditor, [sfSaveAs, sfCheckAmbiguousFiles]);
SrcEdit:=SourceEditorManager.SenderToEditor(Sender);
if SrcEdit = nil then exit;
DoSaveEditorFile(SrcEdit, [sfSaveAs, sfCheckAmbiguousFiles]);
end;
procedure TMainIDE.mnuSaveAllClicked(Sender: TObject);
@ -10508,6 +10514,7 @@ var
begin
GetCurrentUnit(ActiveSrcEdit,ActiveUnitInfo);
if ActiveSrcEdit=nil then exit;
debugln(['TMainIDE.DoFindDeclarationAtCursor ',ActiveSrcEdit.Filename,' ',GetParentForm(ActiveSrcEdit.EditorComponent).Name]);
DoFindDeclarationAtCaret(ActiveSrcEdit.EditorComponent.LogicalCaretXY);
end;
@ -11218,16 +11225,15 @@ var
ActiveUnitInfo: TUnitInfo;
ASrcEdit: TSourceEditor;
begin
if SourceEditorManager.SourceEditorCount = 0 then Exit;
ASrcEdit := TSourceEditor(Sender);
ASrcEdit := SourceEditorManager.SenderToEditor(Sender);
if ASrcEdit=nil then exit;
if Sender <> nil then
Project1.UpdateVisibleUnit(ASrcEdit,
SourceEditorManager.IndexOfSourceWindow(ASrcEdit.SourceNotebook));
Project1.UpdateVisibleUnit(ASrcEdit,
SourceEditorManager.IndexOfSourceWindow(ASrcEdit.SourceNotebook));
ActiveUnitInfo := Project1.UnitWithEditorComponent(SourceEditorManager.ActiveEditor);
ActiveUnitInfo := Project1.UnitWithEditorComponent(ASrcEdit);
if ActiveUnitInfo = nil then Exit;
ActiveUnitInfo.SetLastUsedEditor(SourceEditorManager.ActiveEditor);
ActiveUnitInfo.SetLastUsedEditor(ASrcEdit);
UpdateSaveMenuItemsAndButtons(false);
MainIDEBar.itmViewToggleFormUnit.Enabled := Assigned(ActiveUnitInfo.Component)
@ -11402,10 +11408,10 @@ var
AnEditorInfo: TUnitEditorInfo;
NewXY: TPoint;
begin
AnEditor := SourceEditorManager.SenderToEditor(Sender);
if ID < 0 then begin
// ID < 0 => next/prev
if Project1.BookMarks.Count = 0 then exit;
AnEditor := SourceEditorManager.ActiveEditor;
if AnEditor = nil then exit;
CurWin := SourceEditorManager.IndexOfSourceWindow(AnEditor.SourceNotebook);

View File

@ -1080,6 +1080,7 @@ type
destructor Destroy; override;
function CreateNewWindow(Activate: Boolean= False;
DoDisableAutoSizing: boolean = False): TSourceNotebook;
function SenderToEditor(Sender: TObject): TSourceEditor;
private
// Context-Menu
procedure CloseOtherPagesClicked(Sender: TObject);
@ -1259,6 +1260,7 @@ var
procedure RegisterStandardSourceTabMenuItems;
procedure RegisterStandardSourceEditorMenuItems;
function dbgSourceNoteBook(snb: TSourceNotebook): string;
var
Highlighters: array[TLazSyntaxHighlighter] of TSynCustomHighlighter;
@ -1586,6 +1588,25 @@ begin
'EditorProperties', dlgFROpts, nil, nil, nil, 'menu_environment_options');
end;
function dbgSourceNoteBook(snb: TSourceNotebook): string;
var
i: Integer;
begin
Result:='';
if snb=nil then begin
Result:='nil';
end else if snb.Count=0 then begin
Result:='empty';
end else begin
for i:=0 to 4 do begin
if i>=snb.Count then break;
Result+='"'+ExtractFilename(snb.Items[i].FileName)+'",';
end;
end;
if RightStr(Result,1)=',' then Result:=LeftStr(Result,length(Result)-1);
Result:='['+Result+']';
end;
{ TSourceEditCompletion }
@ -8335,14 +8356,19 @@ end;
procedure TSourceEditorManagerBase.SetActiveSourceWindow(
const AValue: TSourceEditorWindowInterface);
var
NewWindow: TSourceNotebook;
begin
if AValue = FActiveWindow then exit;
if (FActiveWindow <> nil) and (AValue <> nil) and (FActiveWindow.Focused) then
AValue.SetFocus;
NewWindow:= AValue as TSourceNotebook;
if NewWindow = FActiveWindow then exit;
FActiveWindow := AValue as TSourceNotebook;
FSourceWindowByFocusList.Remove(AValue);
FSourceWindowByFocusList.Insert(0, AValue);
//debugln(['TSourceEditorManagerBase.SetActiveSourceWindow ',dbgSourceNoteBook(FActiveWindow),' ',dbgSourceNoteBook(NewWindow)]);
if (FActiveWindow <> nil) and (NewWindow <> nil) and (FActiveWindow.Focused) then
NewWindow.SetFocus;
FActiveWindow := NewWindow;
FSourceWindowByFocusList.Remove(NewWindow);
FSourceWindowByFocusList.Insert(0, NewWindow);
if Assigned(OnCurrentCodeBufferChanged) then
OnCurrentCodeBufferChanged(nil);
@ -9882,6 +9908,16 @@ begin
Result.EnableAutoSizing;
end;
function TSourceEditorManager.SenderToEditor(Sender: TObject): TSourceEditor;
begin
if Sender is TSourceEditor then
Result:=TSourceEditor(Sender)
else if Sender is TSourceNotebook then
Result:=TSourceNotebook(Sender).ActiveEditor as TSourceEditor
else
Result:=ActiveEditor;
end;
procedure TSourceEditorManager.RemoveWindow(AWindow: TSourceNotebook);
var
i: Integer;