diff --git a/components/tdi/Demo/TDIDemo.lps b/components/tdi/Demo/TDIDemo.lps index bbffe1f0a..c14fd3295 100644 --- a/components/tdi/Demo/TDIDemo.lps +++ b/components/tdi/Demo/TDIDemo.lps @@ -4,7 +4,7 @@ - + @@ -12,7 +12,7 @@ - + @@ -23,7 +23,7 @@ - + @@ -32,13 +32,10 @@ - - - - - - + + + @@ -49,9 +46,9 @@ - - - + + + @@ -61,28 +58,28 @@ + - - - + + + - - + - - - + + + - - - - + + + + @@ -92,20 +89,20 @@ - + - - - + + + - - + + @@ -114,7 +111,7 @@ - + @@ -125,7 +122,7 @@ - + @@ -133,7 +130,7 @@ - + @@ -141,14 +138,14 @@ - + - + @@ -157,37 +154,39 @@ - + - - + + - - + + - + + - - + + + - - - + + + @@ -195,30 +194,30 @@ - + - - + + - - - + + + - + @@ -226,7 +225,7 @@ - + @@ -234,36 +233,36 @@ - + - + - - - + + + - + - + @@ -271,7 +270,7 @@ - + @@ -279,14 +278,14 @@ - + - + @@ -294,7 +293,7 @@ - + @@ -302,7 +301,7 @@ - + @@ -310,7 +309,7 @@ - + @@ -318,7 +317,7 @@ - + @@ -326,7 +325,7 @@ - + @@ -334,21 +333,21 @@ - + - + - + @@ -356,7 +355,7 @@ - + @@ -364,14 +363,14 @@ - + - + @@ -379,7 +378,7 @@ - + @@ -387,7 +386,7 @@ - + @@ -395,14 +394,14 @@ - + - - - + + + @@ -413,29 +412,29 @@ - + - - - + + + - + - - - + + + @@ -443,14 +442,14 @@ - + - + @@ -458,7 +457,7 @@ - + @@ -466,7 +465,7 @@ - + @@ -474,28 +473,28 @@ - + - + - + - + @@ -504,51 +503,51 @@ - - - + + + - + - + - + - + - - - + + + - + @@ -556,7 +555,7 @@ - + @@ -564,7 +563,7 @@ - + @@ -572,14 +571,14 @@ - + - + @@ -587,14 +586,14 @@ - + - + @@ -602,112 +601,186 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - - + + - + - - + + - - + + - - + + - - + + - - + + - + - - + + - + - + - + - + - + - + - + - + + + + + + + + + + + + + diff --git a/components/tdi/Demo/uform2.lfm b/components/tdi/Demo/uform2.lfm index b9bf7b75c..0c18b37bb 100644 --- a/components/tdi/Demo/uform2.lfm +++ b/components/tdi/Demo/uform2.lfm @@ -16,8 +16,8 @@ object Form2: TForm2 LCLVersion = '1.1' object Edit1: TEdit Left = 48 - Height = 27 - Top = 80 + Height = 23 + Top = 72 Width = 403 Anchors = [akTop, akLeft, akRight] TabOrder = 0 @@ -25,47 +25,42 @@ object Form2: TForm2 end object Edit2: TEdit Left = 48 - Height = 27 - Top = 120 + Height = 23 + Top = 128 Width = 403 Anchors = [akTop, akLeft, akRight] - TabOrder = 1 + TabOrder = 2 Text = 'Edit2' end object CheckBox1: TCheckBox Left = 48 - Height = 21 - Top = 152 - Width = 89 - Caption = 'CheckBox1' - TabOrder = 2 - end - object CheckBox2: TCheckBox - Left = 48 - Height = 21 - Top = 184 - Width = 89 - Caption = 'CheckBox2' - TabOrder = 3 + Height = 19 + Top = 98 + Width = 90 + Caption = 'Disable Edit 1' + Checked = True + OnChange = CheckBox1Change + State = cbChecked + TabOrder = 1 end object bClose: TButton - Left = 374 - Height = 29 - Top = 188 - Width = 77 + Left = 365 + Height = 25 + Top = 192 + Width = 86 Anchors = [akRight, akBottom] AutoSize = True Caption = 'Close Form' OnClick = bCloseClick - TabOrder = 4 + TabOrder = 5 end object Label2: TLabel AnchorSideLeft.Control = Owner AnchorSideLeft.Side = asrCenter - Left = 12 - Height = 39 + Left = 44 + Height = 31 Top = 16 - Width = 474 + Width = 411 Alignment = taCenter Caption = 'This Form does NOT have Max Constraints. It will be Aligned by "alClient". '#13#10'Design forms like this using Anchors to expand controls all over the Page' Font.Style = [fsBold] @@ -77,12 +72,31 @@ object Form2: TForm2 AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = bClose AnchorSideTop.Side = asrBottom - Left = 346 - Height = 18 + Left = 349 + Height = 16 Top = 223 - Width = 133 + Width = 118 BorderSpacing.Top = 6 Caption = 'This Form is not Freed' ParentColor = False end + object bToggle1: TButton + Left = 48 + Height = 25 + Top = 192 + Width = 75 + Caption = 'Toggle 1' + OnClick = bToggle1Click + TabOrder = 3 + end + object bToggle2: TButton + Left = 144 + Height = 25 + Top = 192 + Width = 75 + Caption = 'Toggle 2' + Enabled = False + OnClick = bToggle1Click + TabOrder = 4 + end end diff --git a/components/tdi/Demo/uform2.pas b/components/tdi/Demo/uform2.pas index 1a255159b..a99caf737 100644 --- a/components/tdi/Demo/uform2.pas +++ b/components/tdi/Demo/uform2.pas @@ -14,13 +14,16 @@ type TForm2 = class(TForm) bClose : TButton ; + bToggle1 : TButton ; + bToggle2 : TButton ; CheckBox1 : TCheckBox ; - CheckBox2 : TCheckBox ; Edit1 : TEdit ; Edit2 : TEdit ; Label1 : TLabel ; Label2 : TLabel ; procedure bCloseClick(Sender : TObject) ; + procedure bToggle1Click(Sender : TObject) ; + procedure CheckBox1Change(Sender : TObject) ; procedure FormClose(Sender : TObject ; var CloseAction : TCloseAction) ; procedure FormCloseQuery(Sender : TObject ; var CanClose : boolean) ; procedure FormDestroy(Sender : TObject) ; @@ -53,6 +56,17 @@ begin ClientRect; end; +procedure TForm2.bToggle1Click(Sender : TObject) ; +begin + bToggle1.Enabled := not bToggle1.Enabled; + bToggle2.Enabled := not bToggle1.Enabled; +end; + +procedure TForm2.CheckBox1Change(Sender : TObject) ; +begin + Edit1.Enabled := CheckBox1.Checked; +end; + procedure TForm2.FormCloseQuery(Sender : TObject ; var CanClose : boolean) ; begin fMainForm.mEvents.Lines.Add( 'Form2.CloseQuery: '+BoolToStr(CanClose,'True','False') ); diff --git a/components/tdi/Demo/umainform.lfm b/components/tdi/Demo/umainform.lfm index 9bb45cd7e..cc5210ec9 100644 --- a/components/tdi/Demo/umainform.lfm +++ b/components/tdi/Demo/umainform.lfm @@ -1,10 +1,10 @@ object fMainForm: TfMainForm - Left = 374 + Left = 428 Height = 484 - Top = 155 + Top = 154 Width = 799 Caption = 'fMainForm' - ClientHeight = 461 + ClientHeight = 464 ClientWidth = 799 KeyPreview = True Menu = MainMenu1 @@ -16,8 +16,8 @@ object fMainForm: TfMainForm LCLVersion = '1.1' object StatusBar1: TStatusBar Left = 0 - Height = 17 - Top = 444 + Height = 23 + Top = 441 Width = 799 Panels = < item @@ -31,9 +31,10 @@ object fMainForm: TfMainForm end object TDINoteBook1: TTDINoteBook Left = 0 - Height = 394 + Height = 391 Top = 0 Width = 579 + TabStop = False ActivePage = tsFixed Align = alClient Constraints.MinHeight = 300 @@ -52,24 +53,32 @@ object fMainForm: TfMainForm MainMenu = MainMenu1 TDIActions.TabsMenu.Caption = 'Tabs' TDIActions.TabsMenu.ImageIndex = 0 + TDIActions.TabsMenu.Visible = False TDIActions.CloseTab.Caption = 'Close Tab' TDIActions.CloseTab.ImageIndex = 1 + TDIActions.CloseTab.Visible = True TDIActions.CloseAllTabs.Caption = 'Close All Tabs' TDIActions.CloseAllTabs.ImageIndex = 2 - ClosePageShortCut = 16499 + TDIActions.CloseAllTabs.Visible = True + TDIActions.NextTab.Caption = 'Next Tab' + TDIActions.NextTab.ImageIndex = 6 + TDIActions.NextTab.Visible = True + TDIActions.PreviousTab.Caption = 'Previous Tab' + TDIActions.PreviousTab.ImageIndex = 7 + TDIActions.PreviousTab.Visible = True FixedPages = 1 object tsFixed: TTabSheet Caption = 'TTDINotebook Demo' - ClientHeight = 364 - ClientWidth = 577 + ClientHeight = 363 + ClientWidth = 571 ImageIndex = 5 object Label2: TLabel AnchorSideLeft.Control = tsFixed AnchorSideLeft.Side = asrCenter - Left = 152 - Height = 39 + Left = 163 + Height = 31 Top = 312 - Width = 272 + Width = 244 Alignment = taCenter Caption = 'This is a Fixed Page, and cannot be closed.'#13#10'You can configure it on "FixedPages" Property' ParentColor = False @@ -78,7 +87,7 @@ object fMainForm: TfMainForm Left = 0 Height = 267 Top = 0 - Width = 577 + Width = 571 Align = alTop FixedTypeface = 'Courier New' DefaultTypeFace = 'default' @@ -95,7 +104,7 @@ object fMainForm: TfMainForm object pBottom: TPanel Left = 0 Height = 50 - Top = 394 + Top = 391 Width = 799 Align = alBottom ClientHeight = 50 @@ -103,10 +112,10 @@ object fMainForm: TfMainForm TabOrder = 2 object cbxBackgroundCorner: TComboBox Left = 21 - Height = 31 + Height = 23 Top = 18 Width = 115 - ItemHeight = 0 + ItemHeight = 15 Items.Strings = ( 'coTopLeft' 'coTopRight' @@ -119,19 +128,19 @@ object fMainForm: TfMainForm end object Label1: TLabel Left = 22 - Height = 18 + Height = 16 Top = 1 - Width = 114 + Width = 101 Caption = 'BackgroundCorner' ParentColor = False end object bToggleLog: TButton AnchorSideTop.Control = pBottom AnchorSideTop.Side = asrCenter - Left = 688 - Height = 29 - Top = 11 - Width = 72 + Left = 675 + Height = 25 + Top = 13 + Width = 85 Anchors = [akTop, akRight] AutoSize = True Caption = 'Hide Log >' @@ -140,15 +149,15 @@ object fMainForm: TfMainForm end object Label3: TLabel Left = 182 - Height = 18 + Height = 16 Top = 1 - Width = 68 + Width = 59 Caption = 'FixedPages' ParentColor = False end object seFixedPages: TSpinEdit Left = 184 - Height = 27 + Height = 23 Top = 17 Width = 50 MaxValue = 10 @@ -159,7 +168,7 @@ object fMainForm: TfMainForm end object mEvents: TMemo Left = 584 - Height = 394 + Height = 391 Top = 0 Width = 215 Align = alRight @@ -171,7 +180,7 @@ object fMainForm: TfMainForm end object Splitter1: TSplitter Left = 579 - Height = 394 + Height = 391 Top = 0 Width = 5 Align = alRight @@ -182,7 +191,7 @@ object fMainForm: TfMainForm AnchorSideBottom.Side = asrBottom Left = 538 Height = 94 - Top = 266 + Top = 269 Width = 94 Anchors = [akRight, akBottom] AutoSize = True @@ -697,7 +706,7 @@ object fMainForm: TfMainForm left = 416 top = 400 Bitmap = { - 4C69060000001000000010000000000000000000000000000000000000000000 + 4C69080000001000000010000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -889,7 +898,71 @@ object fMainForm: TfMainForm FFFF1818FFFF1818FFFF1818FFFF1010E7FF5A215AFFAD4A18FFA54218FFA539 10FF9C3110FF942910FF841008FFFF00FF001818DEFF1818DEFF1818D6FF1818 D6FF1818D6FF1818CEFF1818CEFF1818CEFF42428CFFFF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00 + FF00FF00FF00FF00FF00FF00FF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000B18B7132D2B099908A4E2517000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00008349227FEFDEC3FFB98A65E8904E22490000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00006636157FE7D4B6FFE5D0B0FFCAA988FD9B5C308E733E1A06000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000522B117FDAC2A4FFD9C0A1FFD8BFA0FFD2B596FFB0764CCE955123270000 + 000000000000000000000000000000000000A3846DF19B7556FF9A7455FF9370 + 53FF8B6B51FFD1B495FFD1B494FFD0B293FFCEB091FFCBAE8FFFB88A65F4A35C + 2B63000000000000000000000000000000008A664AFFB59778FFBF9F80FFC6A5 + 85FFCBA989FFCDAB8AFFCDAB8AFFCBA989FFC7A686FFC2A182FFBB9C7DFFB38E + 6DFFA56538A981451D1000000000000000007F5A3EFFAC896AFFBA9575FFC39E + 7DFFCAA381FFCCA583FFCCA483FFC9A280FFC49E7DFFBB9575FFAD8565FF996F + 50FF7E5031FF82451DDF914E2030000000006A4023FF926241FFAC7B57FFBB8A + 65FFC2906CFFC4926EFFC2906BFFBD8A65FFB57F5AFFA7724DFF986440FF8755 + 32FF764524FF7B4520DF87491E3000000000653D1FFF8F5B38FFAE7752FFBE88 + 63FFC6906CFFC9936FFFC7926DFFC28C67FFBA845EFFAE7852FF9D6844FF8A59 + 36FF7D4924A66134160F000000000000000078593BF1744B2AFF835A38FF8660 + 41FF886446FFD5A17BFFD09B77FFC9936FFFBE8863FFB27B55FF8E603BF16C3E + 1C5E000000000000000000000000000000000000000000000000000000000000 + 0000301A0A7FDFAD85FFD7A37FFFCE9874FFBB8961FF7A522FC8502B12230000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000341C097FE7B78CFFDBA784FFAE8359FC57371A8430190A04000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00003B220C7FE1B480FF88663CE13B210C3F0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000644B274A6E552F932B160611000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000084492117D1AE9690BE957A32000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000008E4C2049B98A65E8EEDBBEFF8C4E257F000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00006D3B19069B5B2F8EC7A787FDE2CDAEFFE1CDADFF6D39177F000000000000 + 000000000000000000000000000000000000000000000000000000000000914E + 2127AE7449CECCB193FFD3BB9CFFD4BB9DFFD4BB9DFF542C127F000000000000 + 0000000000000000000000000000000000000000000000000000A1592863B285 + 60F4C3A98BFFC8AD8EFFCCB091FFCDB192FFCDB192FF8B6D54FF917054FF9872 + 53FF977051FF9E7E66F100000000000000007C421C10A05F32A9A98565FFB396 + 78FFBC9E7FFFC4A485FFCAA989FFCDAC8CFFCDAC8BFFCAA888FFC3A283FFBA9A + 7CFFB09173FF866144FF0000000088491F30966139DF967558FFA07F61FFAD8B + 6CFFBA9676FFC6A07FFFCEA786FFD1AB8AFFD1AB8AFFCEA785FFC59F7EFFB894 + 73FFAB886AFF866348FF000000007E441C30865430DF7A5335FF91694AFFA77F + 5FFFBA9171FFCAA07FFFD3AB8AFFD9B191FFD9B191FFD3A989FFC89C7BFFB689 + 68FF9B6D4DFF6C4123FF00000000000000005C31140F784420A67F4F2DFF9561 + 3EFFAE7853FFC18B66FFD29D78FFDEAA87FFDFAB88FFD39E7AFFC38D68FFB07A + 54FF97633FFF6E4526FF00000000000000000000000000000000683A195E8A5C + 38F1B27C56FFC48E6AFFD6A17EFFE6B391FFE8B792FF8B694BFF866040FF8359 + 38FF78502EFF7E5E3FF100000000000000000000000000000000000000004C28 + 1023764E2CC8BB8961FFD09B77FFDBA784FFDEAC85FF351E0C7F000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00002C16080452321784A67B51FCCB9671FFCF9C71FF3B220C7F000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000371D0A3F7A582FE1C0905BFF42270F7F000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000271305116A512D936B502B4A000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000 } end end diff --git a/components/tdi/tdiclass.pas b/components/tdi/tdiclass.pas index 5195b62d4..33761ce30 100644 --- a/components/tdi/tdiclass.pas +++ b/components/tdi/tdiclass.pas @@ -6,7 +6,7 @@ interface uses Classes, SysUtils, Forms, Controls, ComCtrls, ExtCtrls, Menus, - ExtendedNotebook, Buttons, Graphics ; + ExtendedNotebook, Buttons, Graphics ; type @@ -21,11 +21,13 @@ type private FCaption : String ; FImageIndex : Integer ; + FVisible : Boolean ; public Constructor Create ; published property Caption : String read FCaption write FCaption ; property ImageIndex : Integer read FImageIndex write FImageIndex ; + property Visible : Boolean read FVisible write FVisible; end ; { TTDIActions } @@ -34,6 +36,8 @@ type private FCloseAllTabs : TTDIAction ; FCloseTab : TTDIAction ; + FNextTab : TTDIAction ; + FPreviousTab : TTDIAction ; FTabsMenu : TTDIAction ; public Constructor Create ; @@ -42,6 +46,8 @@ type property TabsMenu : TTDIAction read FTabsMenu write FTabsMenu ; property CloseTab : TTDIAction read FCloseTab write FCloseTab ; property CloseAllTabs : TTDIAction read FCloseAllTabs write FCloseAllTabs ; + property NextTab : TTDIAction read FNextTab write FNextTab ; + property PreviousTab : TTDIAction read FPreviousTab write FPreviousTab ; end ; { TTDIPage } @@ -75,6 +81,10 @@ type property LastActiveControl : TWinControl read fsLastActiveControl write fsLastActiveControl ; end ; + + TTDIOption = ( tdiMiddleButtomClosePage, tdiRestoreLastActiveControl, + tdiVerifyIfCanChangePage ) ; + TTDIOptions = set of TTDIOption ; { TTDINoteBook } TTDINoteBook = class(TExtendedNotebook) @@ -85,8 +95,8 @@ type FMainMenu : TMainMenu ; FBackgroundCorner : TTDIBackgroundCorner ; FTDIActions : TTDIActions ; - FClosePageShortCut: TShortCut; - FClosePageMouseMiddleButtom: Boolean; + FTDIOptions : TTDIOptions ; + FShortCutClosePage: TShortCut; procedure SetBackgroundImage(AValue : TImage) ; procedure SetBackgroundCorner(AValue : TTDIBackgroundCorner) ; @@ -98,10 +108,8 @@ type FCloseMenuItem : TMenuItem ; FCloseMenuItem2 : TMenuItem ; FCloseAllTabsMenuItem : TMenuItem ; - FRestoreActiveControl : Boolean ; FTabsMenuItem : TMenuItem ; FTimerRestoreLastControl : TTimer; - FVerifyIfCanChangePage : Boolean ; FIsRemovingAPage : Boolean; procedure CreateCloseBitBtn ; @@ -116,6 +124,8 @@ type procedure CloseAllTabsClicked( Sender: TObject ); procedure SelectTabByMenu( Sender: TObject ); procedure DropDownTabsMenu( Sender: TObject ); + procedure NextPageClicked( Sender: TObject ); + procedure PreviousPageClicked( Sender: TObject ); procedure TimerRestoreLastFocus( Sender: TObject ); @@ -142,6 +152,8 @@ type Function CanCloseAllPages: Boolean ; Function CanCloseAPage( APageIndex: Integer): Boolean; + + procedure ScrollPage( ToForward: Boolean ); procedure CheckInterface; published @@ -155,22 +167,19 @@ type property TDIActions : TTDIActions read FTDIActions write FTDIActions ; - property ClosePageMouseMiddleButtom : Boolean read FClosePageMouseMiddleButtom - write FClosePageMouseMiddleButtom default True; - property ClosePageShortCut: TShortCut read FClosePageShortCut - write FClosePageShortCut default 0; + property TDIOptions : TTDIOptions read FTDIOptions write FTDIOptions + default [ tdiMiddleButtomClosePage, tdiRestoreLastActiveControl, + tdiVerifyIfCanChangePage ]; + property ShortCutClosePage: TShortCut read FShortCutClosePage + write FShortCutClosePage default 16499; // Ctrl+F4 - property RestoreActiveControl : Boolean read FRestoreActiveControl - write FRestoreActiveControl default True; - property VerifyIfCanChangePage : Boolean read FVerifyIfCanChangePage - write FVerifyIfCanChangePage default True; property FixedPages : Integer read FFixedPages write SetFixedPages default 0; end ; implementation -Uses TDIConst ; +Uses LCLType, TDIConst; { TTDIAction } @@ -178,6 +187,7 @@ constructor TTDIAction.Create ; begin FCaption := ''; FImageIndex := -1; + FVisible := True; end ; { TTDIActions } @@ -192,6 +202,14 @@ begin FTabsMenu := TTDIAction.Create; FTabsMenu.Caption := sActionTabsMenu; + + FNextTab := TTDIAction.Create; + FNextTab.Caption := sActionNextTab; + FNextTab.Visible := False; + + FPreviousTab := TTDIAction.Create; + FPreviousTab.Caption := sActionPreviousTab; + FPreviousTab.Visible := False; end ; destructor TTDIActions.Destroy ; @@ -368,21 +386,21 @@ constructor TTDINoteBook.Create(TheOwner : TComponent) ; begin inherited Create(TheOwner) ; - FCloseTabButtom := tbMenu; - FBackgroundCorner := coBottomRight; - FFixedPages := 0; - FRestoreActiveControl := True; - FVerifyIfCanChangePage := True; - FIsRemovingAPage := False; - FClosePageMouseMiddleButtom:= True; - FClosePageShortCut := 0; - FBackgroundImage := nil; - FCloseBitBtn := nil; - FCloseMenuItem := nil; - FCloseMenuItem2 := nil; - FCloseAllTabsMenuItem := nil; - FTabsMenuItem := nil; - FTDIActions := TTDIActions.Create; + FCloseTabButtom := tbMenu; + FBackgroundCorner := coBottomRight; + FFixedPages := 0; + FIsRemovingAPage := False; + FShortCutClosePage := 16499; + FBackgroundImage := nil; + FCloseBitBtn := nil; + FCloseMenuItem := nil; + FCloseMenuItem2 := nil; + FCloseAllTabsMenuItem := nil; + FTabsMenuItem := nil; + FTDIActions := TTDIActions.Create; + FTDIOptions := [ tdiMiddleButtomClosePage, + tdiRestoreLastActiveControl, + tdiVerifyIfCanChangePage ] ; { This is ugly, I know... but I didn't found a best solution to restore Last Focused Control of TDIPage } @@ -510,6 +528,7 @@ begin begin Name := 'miTDITabsMenuItem'; Caption := TDIActions.TabsMenu.Caption; + Visible := TDIActions.TabsMenu.Visible; ImageIndex := TDIActions.TabsMenu.ImageIndex; RightJustify := True ; OnClick := @DropDownTabsMenu; @@ -523,19 +542,60 @@ begin NewMenuItem := TMenuItem.Create( FTabsMenuItem ); with NewMenuItem do begin - Name := 'miTDISeparator'; + Name := 'miTDISeparator1'; Caption := '-'; end ; FTabsMenuItem.Add(NewMenuItem); + if (nboKeyboardTabSwitch in Options) then + begin + NewMenuItem := TMenuItem.Create( FTabsMenuItem ); + with NewMenuItem do + begin + Name := 'miTDINextPage'; + Caption := TDIActions.NextTab.Caption; + Visible := TDIActions.NextTab.Visible; + ImageIndex := TDIActions.NextTab.ImageIndex; + ShortCut := Menus.ShortCut(VK_TAB, [ssCtrl] ); + OnClick := @NextPageClicked; + end ; + FTabsMenuItem.Add(NewMenuItem); + + NewMenuItem := TMenuItem.Create( FTabsMenuItem ); + with NewMenuItem do + begin + Name := 'miTDIPreviousPage'; + Caption := TDIActions.PreviousTab.Caption; + Visible := TDIActions.PreviousTab.Visible; + ImageIndex := TDIActions.PreviousTab.ImageIndex; + ShortCut := Menus.ShortCut(VK_TAB, [ssCtrl,ssShift] ); + OnClick := @PreviousPageClicked; + end ; + FTabsMenuItem.Add(NewMenuItem); + + if TDIActions.NextTab.Visible or TDIActions.PreviousTab.Visible then + begin + // Creating a Separator // + NewMenuItem := TMenuItem.Create( FTabsMenuItem ); + with NewMenuItem do + begin + Name := 'miTDISeparator2'; + Caption := '-'; + end ; + FTabsMenuItem.Add(NewMenuItem); + end; + end ; + // Creating Close Tab MenuItem // FCloseMenuItem2 := TMenuItem.Create( FTabsMenuItem ); with FCloseMenuItem2 do begin Name := 'miTDICloseTab'; Caption := TDIActions.CloseTab.Caption; + Visible := TDIActions.CloseTab.Visible; ImageIndex := TDIActions.CloseTab.ImageIndex; OnClick := @CloseTabClicked; + ShortCut := FShortCutClosePage; end ; FTabsMenuItem.Add(FCloseMenuItem2); @@ -545,6 +605,7 @@ begin begin Name := 'miTDICloseAllTabs'; Caption := TDIActions.CloseAllTabs.Caption; + Visible := TDIActions.CloseAllTabs.Visible; ImageIndex := TDIActions.CloseAllTabs.ImageIndex; OnClick := @CloseAllTabsClicked; end ; @@ -765,6 +826,26 @@ begin end ; end ; +procedure TTDINoteBook.ScrollPage(ToForward : Boolean) ; +var + NewPage : Integer ; +begin + if ToForward then + begin + NewPage := PageIndex + 1 ; + if NewPage >= PageCount then + NewPage := 0; + end + else + begin + NewPage := PageIndex - 1 ; + if NewPage < 0 then + NewPage := PageCount-1 ; + end ; + + PageIndex := NewPage; +end ; + procedure TTDINoteBook.SelectTabByMenu(Sender : TObject) ; begin @@ -804,6 +885,16 @@ begin FCloseAllTabsMenuItem.Enabled := (PageCount > 0); end ; +procedure TTDINoteBook.NextPageClicked(Sender : TObject) ; +begin + ScrollPage( True ); +end ; + +procedure TTDINoteBook.PreviousPageClicked(Sender : TObject) ; +begin + ScrollPage( False ); +end ; + procedure TTDINoteBook.TimerRestoreLastFocus(Sender : TObject) ; begin FTimerRestoreLastControl.Enabled := False; @@ -832,7 +923,7 @@ begin begin TTDIPage( ActivePage ).LastActiveControl := AWinControl; - if FVerifyIfCanChangePage then + if tdiVerifyIfCanChangePage in FTDIOptions then begin { Try to detect if occurs some exception when leaving current control focus. This may occurs in TWinControl.OnExit Validation } @@ -866,7 +957,8 @@ begin } // This is a ugly workaround.. but it works :) // - FTimerRestoreLastControl.Enabled := True; + if tdiRestoreLastActiveControl in FTDIOptions then + FTimerRestoreLastControl.Enabled := True; end ; procedure TTDINoteBook.Loaded ; @@ -927,7 +1019,7 @@ procedure TTDINoteBook.MouseDown(Button: TMouseButton; Shift: TShiftState; X, var APageIndex : Integer ; begin - if FClosePageMouseMiddleButtom and (Button = mbMiddle) then + if (tdiMiddleButtomClosePage in FTDIOptions) and (Button = mbMiddle) then begin APageIndex := TabIndexAtClientPos( Point(X,Y) ); if (APageIndex >= 0) and (APageIndex >= FixedPages) then @@ -940,18 +1032,33 @@ begin inherited MouseDown(Button, Shift, X, Y); end; -procedure TTDINoteBook.KeyDown(var Key: Word; Shift: TShiftState); +procedure TTDINoteBook.KeyDown(var Key : Word; Shift : TShiftState) ; begin - // TODO: HiJack TDIPage.Form.OnKeyDown to detect ShortCut inside the Form // - - if ShortCut(Key, Shift) = FClosePageShortCut then - if PageIndex >= FFixedPages then + if (FTabsMenuItem = nil) then // Is already Handled by TabsMenu itens? + begin + if (PageIndex >= FFixedPages) and + (ShortCut(Key, Shift) = FShortCutClosePage) then begin + Key := 0; RemovePage( PageIndex ); exit; end; + end + else if (Key = VK_TAB) and (ssCtrl in Shift) then // TabsMenu will do it... + exit ; - inherited KeyDown(Key, Shift); + if ActivePage is TTDIPage then + begin + with TTDIPage( ActivePage ) do + begin + RestoreLastFocusedControl; + + // TODO: Propagate Key Pressed to FormInPage // + //FormInPage.OnKeyDown(Self,Key,Shift); + end ; + end + else + inherited KeyDown(Key, Shift); end; procedure TTDINoteBook.Notification(AComponent : TComponent ; diff --git a/components/tdi/tdiconst.pas b/components/tdi/tdiconst.pas index 0712b96e3..863737ad1 100644 --- a/components/tdi/tdiconst.pas +++ b/components/tdi/tdiconst.pas @@ -13,6 +13,8 @@ resourcestring sActionTabsMenu = 'Tabs'; sActionCloseTab = 'Close Tab'; sActionCloseAllTabs = 'Close All Tabs'; + sActionNextTab = 'Next Tab'; + sActionPreviousTab = 'Previous Tab'; implementation