From a858d685fa48e608fd393ebc8c4bf078700064d6 Mon Sep 17 00:00:00 2001 From: alexs75 Date: Thu, 17 Jan 2019 08:37:42 +0000 Subject: [PATCH] RxFPC:RxMDI - new property RxMDIPanel1.WindowMenu - show MDI windows in main menu git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@6792 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- components/rx/trunk/demos/RxMDI/project1.lpi | 5 +- components/rx/trunk/demos/RxMDI/project1.res | Bin 139052 -> 139092 bytes components/rx/trunk/demos/RxMDI/unit1.lfm | 25 +++- components/rx/trunk/demos/RxMDI/unit1.pas | 9 ++ components/rx/trunk/rxcontrols/rxmdi.pas | 131 ++++++++++++++++++- components/rx/trunk/rxdb/rxdbgrid.pas | 6 + 6 files changed, 165 insertions(+), 11 deletions(-) diff --git a/components/rx/trunk/demos/RxMDI/project1.lpi b/components/rx/trunk/demos/RxMDI/project1.lpi index 6aa7ea19e..4a9041770 100644 --- a/components/rx/trunk/demos/RxMDI/project1.lpi +++ b/components/rx/trunk/demos/RxMDI/project1.lpi @@ -19,8 +19,6 @@ - - @@ -85,6 +83,9 @@ + + + diff --git a/components/rx/trunk/demos/RxMDI/project1.res b/components/rx/trunk/demos/RxMDI/project1.res index f6e8499568f21121986c715951291349244aeef3..4133fe048bfc96eac220bd2dbc2c6057417f565b 100644 GIT binary patch delta 67 zcmZ3pkK@WdjtL5kcQz_cW0O~~$;r=44@fM@a4b(OO0`Q%%qdQ_(T536HfB?ue2Go5 R`3qb77dFQ2U)Y!|Bmi?086W@v delta 33 pcmcbzk7La~jtL5kn>Q*>W1IYd&4!VoS%$q`hMjS{3_FvB1OU{s3K9SS diff --git a/components/rx/trunk/demos/RxMDI/unit1.lfm b/components/rx/trunk/demos/RxMDI/unit1.lfm index 56758a5eb..b43f5c265 100644 --- a/components/rx/trunk/demos/RxMDI/unit1.lfm +++ b/components/rx/trunk/demos/RxMDI/unit1.lfm @@ -4,12 +4,12 @@ object Form1: TForm1 Top = 222 Width = 613 Caption = 'MainForm' - ClientHeight = 407 + ClientHeight = 410 ClientWidth = 613 Menu = MainMenu1 OnCreate = FormCreate Position = poScreenCenter - LCLVersion = '1.9.0.0' + LCLVersion = '2.1.0.0' WindowState = wsMaximized object ToolPanel1: TToolPanel Left = 0 @@ -59,7 +59,7 @@ object Form1: TForm1 object RxMDITasks1: TRxMDITasks Left = 0 Height = 25 - Top = 360 + Top = 364 Width = 613 Align = alBottom FlatButton = True @@ -67,8 +67,8 @@ object Form1: TForm1 end object StatusBar1: TStatusBar Left = 0 - Height = 22 - Top = 385 + Height = 21 + Top = 389 Width = 613 Panels = < item @@ -81,15 +81,17 @@ object Form1: TForm1 end object RxMDIPanel1: TRxMDIPanel Left = 0 - Height = 329 + Height = 333 Top = 31 Width = 613 CloseButton = RxMDICloseButton1 TaskPanel = RxMDITasks1 Align = alClient BevelOuter = bvLowered + Options = [] HideCloseButton = False OnChangeCurrentChild = RxMDIPanel1ChangeCurrentChild + WindowMenu = WindowItems end object ActionList1: TActionList Left = 440 @@ -132,6 +134,11 @@ object Form1: TForm1 Checked = True OnExecute = optHideCloseButtonExecute end + object wndCloseAll: TAction + Category = 'Windows' + Caption = 'Close all...' + OnExecute = wndCloseAllExecute + end end object MainMenu1: TMainMenu Left = 408 @@ -169,6 +176,12 @@ object Form1: TForm1 Action = Action3 end end + object WindowItems: TMenuItem + Caption = 'Window' + object MenuItem13: TMenuItem + Action = wndCloseAll + end + end end object Timer1: TTimer Interval = 500 diff --git a/components/rx/trunk/demos/RxMDI/unit1.pas b/components/rx/trunk/demos/RxMDI/unit1.pas index 4d4b4085e..cc67861b2 100644 --- a/components/rx/trunk/demos/RxMDI/unit1.pas +++ b/components/rx/trunk/demos/RxMDI/unit1.pas @@ -16,6 +16,9 @@ type Action1: TAction; Action2: TAction; Action3: TAction; + WindowItems: TMenuItem; + MenuItem13: TMenuItem; + wndCloseAll: TAction; MenuItem11: TMenuItem; optHideCloseButton: TAction; MenuItem10: TMenuItem; @@ -49,6 +52,7 @@ type procedure RxMDIPanel1ChangeCurrentChild(Sender: TRxMDIPanel; AForm: TForm); procedure sysCloseExecute(Sender: TObject); procedure Timer1Timer(Sender: TObject); + procedure wndCloseAllExecute(Sender: TObject); private procedure UpdateOptions; public @@ -80,6 +84,11 @@ begin ; end; +procedure TForm1.wndCloseAllExecute(Sender: TObject); +begin + RxMDIPanel1.CloseAll; +end; + procedure TForm1.UpdateOptions; begin RxMDICloseButton1.ShowInfoLabel:=optShowInfoLabel.Checked; diff --git a/components/rx/trunk/rxcontrols/rxmdi.pas b/components/rx/trunk/rxcontrols/rxmdi.pas index b6e465e82..e30c3bc8d 100644 --- a/components/rx/trunk/rxcontrols/rxmdi.pas +++ b/components/rx/trunk/rxcontrols/rxmdi.pas @@ -153,6 +153,10 @@ type FOnChangeCurrentChild: TRxMDIPanelChangeCurrentChild; FOptions: TRxMDIPanelOptions; FTaskPanel: TRxMDITasks; + FWindowMenu: TMenuItem; + FWindowMenuSeparator1: TMenuItem; + FWindowMenuSeparator2: TMenuItem; + FWindowMenuDialogBox: TMenuItem; procedure SetCurrentChildWindow(AValue: TForm); procedure navCloseButtonClick(Sender: TObject); procedure SetHideCloseButton(AValue: boolean); @@ -163,6 +167,11 @@ type procedure ScreenEventRemoveForm(Sender: TObject; Form: TCustomForm); procedure DoOnChangeCurrentChild(AForm:TForm); procedure DoKeyDownHandler(Sender: TObject; var Key: Word; Shift: TShiftState); + procedure RefreshMDIMenu; + procedure ClearMDIMenu; + procedure ClearMDIMenuSystemItems; + procedure DoMDIMenuClick(Sender: TObject); + procedure SetWindowMenu(AValue: TMenuItem); protected procedure Notification(AComponent: TComponent; Operation: TOperation); override; procedure Loaded; override; @@ -189,6 +198,7 @@ type property Options:TRxMDIPanelOptions read FOptions write FOptions; property HideCloseButton:boolean read FHideCloseButton write SetHideCloseButton; property OnChangeCurrentChild:TRxMDIPanelChangeCurrentChild read FOnChangeCurrentChild write FOnChangeCurrentChild; + property WindowMenu: TMenuItem read FWindowMenu write SetWindowMenu; end; implementation @@ -409,7 +419,10 @@ begin FCloseButton := nil else if (AComponent = FTaskPanel) and (Operation = opRemove) then - FTaskPanel:=nil; + FTaskPanel:=nil + else + if (AComponent = FWindowMenuSeparator1) and (Operation = opRemove) then + FWindowMenuSeparator1:=nil; end; procedure TRxMDIPanel.Loaded; @@ -436,6 +449,116 @@ begin end; end; +procedure TRxMDIPanel.RefreshMDIMenu; + +function GetNextMenuItem(var K:Integer):TMenuItem; +begin + Result:=nil; + while K