From 5ef97c0b5c65a3639dd3c8c0c16ca0ff57b442ec Mon Sep 17 00:00:00 2001 From: mattias Date: Tue, 2 Jul 2013 17:34:04 +0000 Subject: [PATCH] IDE: added menu item Windows / Center a lost window git-svn-id: trunk@41974 - --- components/ideintf/menuintf.pas | 1 + ide/lazarusidestrconsts.pas | 1 + ide/mainbase.pas | 66 +++++++++++++++++++++++++++++---- 3 files changed, 61 insertions(+), 7 deletions(-) diff --git a/components/ideintf/menuintf.pas b/components/ideintf/menuintf.pas index 61d923f836..0ceacecaef 100644 --- a/components/ideintf/menuintf.pas +++ b/components/ideintf/menuintf.pas @@ -364,6 +364,7 @@ var mnuWindow: TIDEMenuSection; itmWindowManagers: TIDEMenuSection; itmWindowLists: TIDEMenuSection; + itmCenterWindowLists: TIDEMenuSection; itmTabLists: TIDEMenuSection; itmTabListProject: TIDEMenuSection; itmTabListOther: TIDEMenuSection; diff --git a/ide/lazarusidestrconsts.pas b/ide/lazarusidestrconsts.pas index d03d16659c..1dc8947cb5 100644 --- a/ide/lazarusidestrconsts.pas +++ b/ide/lazarusidestrconsts.pas @@ -1174,6 +1174,7 @@ resourcestring lisAskBeforeSavingProjectSSession = 'Ask before saving project''s session'; dlgEdFiles = 'Editor Files'; dlgEnvProject = 'Tabs for project'; + lisCenterALostWindow = 'Center a lost window'; lisNumberOfFilesToConvert = 'Number of files to convert: %s'; lisConvertEncoding = 'Convert Encoding'; lisConvertProjectOrPackage = 'Convert project or package'; diff --git a/ide/mainbase.pas b/ide/mainbase.pas index 4a350c05c9..bb533dc9c5 100644 --- a/ide/mainbase.pas +++ b/ide/mainbase.pas @@ -55,8 +55,8 @@ uses {$IFDEF IDE_MEM_CHECK} MemCheck, {$ENDIF} - Classes, LCLType, LCLProc, LCLIntf, StdCtrls, Buttons, Menus, ComCtrls, - SysUtils, Controls, Graphics, ExtCtrls, Dialogs, FileUtil, Forms, + Math, Classes, LCLType, LCLProc, LCLIntf, StdCtrls, Buttons, Menus, ComCtrls, + SysUtils, types, Controls, Graphics, ExtCtrls, Dialogs, FileUtil, Forms, CodeToolManager, CodeCache, AVL_Tree, SynEditKeyCmds, PackageIntf, // IDEIntf IDEImagesIntf, SrcEditorIntf, LazIDEIntf, MenuIntf, @@ -81,8 +81,6 @@ type { TMainIDEBase } TMainIDEBase = class(TMainIDEInterface) - procedure mnuOpenProjectClicked(Sender: TObject); virtual; abstract; - procedure mnuOpenRecentClicked(Sender: TObject); virtual; abstract; private FToolStatus: TIDEToolStatus; FWindowMenuActiveForm: TCustomForm; @@ -127,7 +125,10 @@ type procedure SetToolStatus(const AValue: TIDEToolStatus); virtual; procedure DoMnuWindowClicked(Sender: TObject); + procedure mnuOpenProjectClicked(Sender: TObject); virtual; abstract; + procedure mnuOpenRecentClicked(Sender: TObject); virtual; abstract; procedure mnuWindowItemClick(Sender: TObject); virtual; + procedure mnuCenterWindowItemClick(Sender: TObject); virtual; procedure mnuWindowSourceItemClick(Sender: TObject); virtual; procedure ConnectOutputFilter; @@ -225,12 +226,54 @@ end; procedure TMainIDEBase.mnuWindowItemClick(Sender: TObject); var i: Integer; + Form: TCustomForm; begin i:=Screen.CustomFormCount-1; while (i>=0) do begin - if Screen.CustomForms[i].Caption=(Sender as TIDEMenuCommand).Caption then + Form:=Screen.CustomForms[i]; + if Form.Caption=(Sender as TIDEMenuCommand).Caption then begin - IDEWindowCreators.ShowForm(Screen.CustomForms[i],true); + IDEWindowCreators.ShowForm(Form,true); + break; + end; + dec(i); + end; +end; + +procedure TMainIDEBase.mnuCenterWindowItemClick(Sender: TObject); +var + i: Integer; + Form: TCustomForm; + r, NewBounds: TRect; +begin + i:=Screen.CustomFormCount-1; + while (i>=0) do begin + Form:=Screen.CustomForms[i]; + if Form.Caption=(Sender as TIDEMenuCommand).Caption then + begin + // show + if not Form.IsVisible then + IDEWindowCreators.ShowForm(Form,true); + // move to monitor of main IDE bar + Form:=GetParentForm(Form); + if Form<>MainIDEBar then begin + // center on main IDE + Form.MakeFullyVisible(MainIDEBar.Monitor,true); + debugln(['TMainIDEBase.mnuCenterWindowItemClick ',DbgSName(Form),' ',dbgs(Form.BoundsRect)]); + r:=MainIDEBar.BoundsRect; + if Form.Widthnil) and (WindowsList.IndexOf(AForm)<0) then WindowsList.Add(AForm); end; - // create menuitems + // create menuitems for all windows ItemCount := WindowsList.Count; for i:=0 to WindowsList.Count-1 do begin + // in the 'bring to front' list CurMenuItem := GetMenuItem(i, itmWindowLists); CurMenuItem.Caption:=TCustomForm(WindowsList[i]).Caption; CurMenuItem.MenuItem.Checked := WindowMenuActiveForm = TCustomForm(WindowsList[i]); CurMenuItem.OnClick:=@mnuWindowItemClick; + // in the 'center' list + CurMenuItem := GetMenuItem(i, itmCenterWindowLists); + CurMenuItem.Caption:=TCustomForm(WindowsList[i]).Caption; + CurMenuItem.OnClick:=@mnuCenterWindowItemClick; end; //create source page menuitems itmTabListProject.Visible := False; @@ -1386,6 +1437,7 @@ begin end; // remove unused menuitems ClearMenuItem(ItemCount, itmWindowLists); + ClearMenuItem(ItemCount, itmCenterWindowLists); WindowsList.Free; // clean up end;