diff --git a/Packages/D7/X2CLMB.dpk b/Packages/D7/X2CLMB.dpk index 79a932b..7aa9a8b 100644 --- a/Packages/D7/X2CLMB.dpk +++ b/Packages/D7/X2CLMB.dpk @@ -38,7 +38,8 @@ contains X2CLGraphics in '..\..\Source\X2CLGraphics.pas', X2CLMenuBarAnimators in '..\..\Source\X2CLMenuBarAnimators.pas', X2CLMenuBar in '..\..\Source\X2CLMenuBar.pas', - X2CLmusikCubeMenuBarPainter in '..\..\Source\X2CLmusikCubeMenuBarPainter.pas'; + X2CLmusikCubeMenuBarPainter in '..\..\Source\X2CLmusikCubeMenuBarPainter.pas', + X2CLMenuBarActions in '..\..\Source\X2CLMenuBarActions.pas'; end. diff --git a/Packages/X2CLMBEditors.pas b/Packages/X2CLMBEditors.pas index 39557a0..92a7078 100644 --- a/Packages/X2CLMBEditors.pas +++ b/Packages/X2CLMBEditors.pas @@ -10,6 +10,7 @@ unit X2CLMBEditors; interface uses DesignEditors; + type TX2MenuBarComponentEditor = class(TComponentEditor) @@ -20,12 +21,14 @@ type function GetVerbCount(): Integer; override; end; + implementation uses X2CLMenuBar, X2CLMenuBarEditor; + { TX2MenuBarComponentEditor } procedure TX2MenuBarComponentEditor.Edit(); begin @@ -33,16 +36,19 @@ begin TfrmMenuBarEditor.Execute(TX2CustomMenuBar(Component), Designer); end; + procedure TX2MenuBarComponentEditor.ExecuteVerb(Index: Integer); begin Edit(); end; + function TX2MenuBarComponentEditor.GetVerb(Index: Integer): string; begin Result := 'Edit...'; end; + function TX2MenuBarComponentEditor.GetVerbCount(): Integer; begin Result := 1; diff --git a/Packages/X2CLMenuBarEditor.dfm b/Packages/X2CLMenuBarEditor.dfm index cef4d80..4794541 100644 --- a/Packages/X2CLMenuBarEditor.dfm +++ b/Packages/X2CLMenuBarEditor.dfm @@ -1,10 +1,10 @@ object frmMenuBarEditor: TfrmMenuBarEditor - Left = 0 - Top = 0 + Left = 271 + Top = 101 + Width = 394 + Height = 469 BorderIcons = [biSystemMenu] Caption = 'Editing' - ClientHeight = 376 - ClientWidth = 276 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText @@ -22,20 +22,21 @@ object frmMenuBarEditor: TfrmMenuBarEditor TextHeight = 13 object tvMenu: TTreeView Left = 0 - Top = 26 - Width = 276 - Height = 331 + Top = 28 + Width = 386 + Height = 395 Align = alClient HideSelection = False Indent = 19 ReadOnly = True TabOrder = 0 OnChange = tvMenuChange + OnKeyPress = tvMenuKeyPress end object sbStatus: TStatusBar Left = 0 - Top = 357 - Width = 276 + Top = 423 + Width = 386 Height = 19 Panels = < item @@ -45,40 +46,307 @@ object frmMenuBarEditor: TfrmMenuBarEditor object tbMenu: TToolBar Left = 0 Top = 0 - Width = 276 - Height = 26 + Width = 386 + Height = 28 AutoSize = True - ButtonWidth = 84 EdgeBorders = [ebTop, ebBottom] Images = ilsActions - List = True - ShowCaptions = True TabOrder = 2 object tbAddGroup: TToolButton Left = 0 - Top = 0 + Top = 2 Action = actAddGroup - AutoSize = True end object tbAddItem: TToolButton - Left = 81 - Top = 0 + Left = 23 + Top = 2 Action = actAddItem - AutoSize = True end object tbDelete: TToolButton - Left = 154 - Top = 0 + Left = 46 + Top = 2 Action = actDelete - AutoSize = True + end + object tbSep1: TToolButton + Left = 69 + Top = 2 + Width = 8 + ImageIndex = 3 + Style = tbsSeparator + end + object tbMoveUp: TToolButton + Left = 77 + Top = 2 + Action = actMoveUp + end + object tbMoveDown: TToolButton + Left = 100 + Top = 2 + Action = actMoveDown end end object ilsActions: TImageList - Left = 8 - Top = 32 + Left = 24 + Top = 44 Bitmap = { - 494C010103000400040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 - 0000000000003600000028000000400000001000000001002000000000000010 + 494C010105000900040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000400000003000000001002000000000000030 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000069AC69005EAB5E0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000022AD350028B13E0071AF7100000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000020B7300069FFA30056D588001AA22700000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000001EAC240067FFA2005BF6900057F48D004CCB7E00169C1F000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00001DA1210063FF9C005AF5900055EF890052ED860051EC860045C576001795 + 1C00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000000028A0 + 2B0068FFA20079FFA9006AF39A0051EB850050EA83004CE781004EEA860043C4 + 7500219426000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000228D23001093 + 1A001C97260049CA63008BF8B1004BE87F004DE7800049DD7D0028A946000D87 + 18000B8714001C831D0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000199B270086F8B00047E57C0049E47D004ADF7F00128A1F000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000001A9B290083F6AE0044E2790046E17A0047DE7C00138A21000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000001A9929007FF3A90041DF760043DD770044DC7B00138921000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000001996260076F0A3003CDC71003FDA730041D97600118720000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000001997280097FCC2006BEC9B005BE98F004BE28400128923000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000077B0B0010881D000D8318001081180014851F0009750D000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -102,7 +370,7 @@ object frmMenuBarEditor: TfrmMenuBarEditor 770000750000BDA99D000000000000000000000000004E4EAB001844F600194D F8001031D2002427AE000000000000000000000000004E4EAB000928D700092E D7000313B3004E4EAB0000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000A7B0E00128A1E000F8018000E791600117919000E7510000000 0000000000000000000000000000000000000000000000000000689BAF001989 B700007EB10090EFFF0030E0FF007AEEFF0000860000008600000086000048E1 7B00007500000075000000750000000000000000000000000000A27F6F00FFFF @@ -110,7 +378,7 @@ object frmMenuBarEditor: TfrmMenuBarEditor 7B0000750000007500000075000000000000000000002022B1002451F9001F51 FF00194DF8001744E8001017AF00000000004545AD00092ED7001142F9000D3D F5000D3DF500041ABC006F6FAA00000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000025A93C0069F59E0044E47E0045E57F0045E17F00189230000000 00000000000000000000000000000000000000000000000000003B92B4003B9F C600007EB1009FF1FF0046E2FF0090EFFF00008D00005EF791005AF38D0053EC 860048E17B0045DE780000750000000000000000000000000000A3807000FFFF @@ -118,7 +386,7 @@ object frmMenuBarEditor: TfrmMenuBarEditor 860048E17B0045DE7800007500000000000000000000000000001832DB00285A FF002451F9002451F9001A4AF100060EAF000F30DD00164AFE001142F9001041 F6000D3DF5000D3DF5002C2CA200000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000022A7370077EFA40040DC750041DB740042DB7900188D2B000000 0000000000000000000000000000000000000000000074A0B1000E84B700B6F5 FB000081B400B6F5FB005EECFF00A3F3FF0000910000008D0000008D00005AF3 8D0000860000007D0000007D0000000000000000000000000000A9877800FFFF @@ -126,7 +394,7 @@ object frmMenuBarEditor: TfrmMenuBarEditor 8D0000860000007D0000007D000000000000000000007777B3001832DB004170 FF002D5DFF00285AFF00285AFF001F51FF00194DF800194DF8001142F9001142 F9000F3DF200161CAC0000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000025AC3A007DF3A90042DF770043DE770045DE7C0018902B000000 000000000000000000000000000000000000000000004596B40044A5C900DDFF FF000084B700C0FBFF0077F4FF00B6F5FB00ADF6FF00ADF6FF00008D00005EF7 910000860000C3F1F80061A8C700000000000000000000000000AB897A00FFFF @@ -134,7 +402,7 @@ object frmMenuBarEditor: TfrmMenuBarEditor 910000860000C8B7AE00000000000000000000000000000000006969B8001A25 C5003A6DFF003668FF00285AFF00285AFF002451F900194DF8001F51FF00123D ED002427AE000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000026AF3C0085F6AE0044E2790046E0790048E17E001B942E000000 000000000000000000000000000000000000000000002790B800ABDCEA00E6FE FE000084B700D2FFFF008EFDFF0089FAFF0082F6FF00B0F7FF00009100000091 0000008D0000C1FDFF000072A500000000000000000000000000AB897A00FFFF @@ -142,39 +410,39 @@ object frmMenuBarEditor: TfrmMenuBarEditor 0000008D0000BFABA10000000000000000000000000000000000000000000000 00002F2FB3002E4EE7003668FF00285AFF00285AFF002451F900123DED002C2C A200000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000028B03A008CF8B50048E57C0049E37D004AE2810019932B000000 000000000000000000000000000000000000000000000A8CBC00C9F6FA00F1FF FF000088BB00DDFFFF00A1FFFF00A1FFFF0094F8FF00C0FBFF00C0FBFF00B0F7 FF00C3EDF500DDFFFF000072A500000000000000000000000000B1908000FFFF FF00FFFFFF00FFFFFF00FFFFFF00FCF8F100FFFFFF00FCF8F100FFFFFF00FCF8 F100FCF6ED009B7C6B0000000000000000000000000000000000000000000000 000000000000253FDF003A6DFF003668FF002D5DFF00285AFF001B46EA002427 - AE00000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000018DC0000F92C1007EC4 + AE000000000000000000000000000000000000000000000000003397330015A7 + 23001BB02E0035C9550063F3960050EA83004DE780004BE27F00249A3D001293 + 210011981E002B8C2B00000000000000000000000000018DC0000F92C1007EC4 DD000088BB00C3EDF5007ADBEA0085E3EF0092F0F800A1FFFF0094F8FF0065D2 E700ADF6FF00DDFFFF000079AC00000000000000000000000000AF8F8000FFFF FF00DFCDCB00DFCDCB00DBC6C200DECAC600DDC1B400DDC1B400DEBEAD00DEBE AD00FCF6ED009B7C6B0000000000000000000000000000000000000000000000 00002B2CC0004B7CFF004170FF003A6DFF003A6DFF00285AFF00285AFF001031 - D2004A4AB2000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + D2004A4AB200000000000000000000000000000000000000000000000000279E + 2A009EFFC7007DFFAD0053F1890052EB850050E983004CE580004DE583004FEC + 8A00229628000000000000000000000000000000000000000000000000000000 0000018DC000F1FFFF00C3F1F800ABE7F10081D4E60065C6DF0065C6DF005FC2 DB00D2FFFF00E6FEFE000079AC00000000000000000000000000B1908000FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FCF8F100FCF8F100F9F4 EE00F0E8E0009C7D6D0000000000000000000000000000000000000000000000 0000253FDF00527CFA004170FF003668FF000C13C1003A6DFF00285AFF002451 F9000B1DC2000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 00001AA11F00A0FFC50062F7960053EF880051EB840050EA860051ED8A001A99 + 2000000000000000000000000000000000000000000000000000000000000000 00001A96C50031A5CD004AB0D30083CDE200D0EFF600E6FEFE00F1FFFF00E6FE FE00DDFFFF00F1FFFF000079AC00000000000000000000000000B1908000FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A3807000A782 7000A7827000A380700000000000000000000000000000000000000000004F4F BD00527CFA005080FF004B7CFF00181FC500000000001B22C4003A6DFF00285A FF001A4AF1001419B10000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000001AA82200A4FFC9005CF3900053EF890059F5930019A624000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000589FBA003298BE002390BC00158FBF00FFFF FF00FFFFFF00FFFFFF00007EB100000000000000000000000000B8988800FFFF @@ -182,7 +450,7 @@ object frmMenuBarEditor: TfrmMenuBarEditor D900B1908000AB9E98000000000000000000000000000000000000000000252D D6006A9CFF005788FF002E4EE7007070B90000000000000000001621C7002D5D FF002451F9001439DD004545AD00000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000021B42D00A4FFCC0072FEA9001DB32C00000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000088BB00EDF6 FA00FFFFFF00FFFFFF00007EB100000000000000000000000000B8988800FFFF @@ -190,7 +458,7 @@ object frmMenuBarEditor: TfrmMenuBarEditor 7D00AB9E98000000000000000000000000000000000000000000000000004B4B C8003951E2005080FF002929C600000000000000000000000000000000001628 D300285AFF000F2EE3002123B500000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000035C84A0037CD500074AC7400000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000002F99C3000084 B7000084B7000081B4004388A900000000000000000000000000B8988800B898 @@ -198,7 +466,7 @@ object frmMenuBarEditor: TfrmMenuBarEditor 9800000000000000000000000000000000000000000000000000000000000000 0000000000003E3EB90000000000000000000000000000000000000000006B6B B6002E2EB5000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000006EAC6E0063AB630000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -208,18 +476,26 @@ object frmMenuBarEditor: TfrmMenuBarEditor 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000424D3E000000000000003E000000 - 2800000040000000100000000100010000000000800000000000000000000000 - 000000000000000000000000FFFFFF00FFFFFFFFFFFF0000E1C7C003C7CF0000 - E007C00383830000C001C00181010000C001C001C00100008001C00180030000 - 8001C003C00700008001C003F00F00008001C003F80F00008001C003F0070000 - F001C003F0070000F001C003E0830000FE01C003E0C10000FFC1C007E1E10000 - FFC1C00FFBE70000FFFFFFFFFFFF000000000000000000000000000000000000 + 2800000040000000300000000100010000000000800100000000000000000000 + 000000000000000000000000FFFFFF0000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FFFF000000000000FE7F000000000000 + FE3F000000000000FC3F000000000000F81F000000000000F00F000000000000 + E007000000000000C003000000000000F81F000000000000F81F000000000000 + F81F000000000000F81F000000000000F81F000000000000F81F000000000000 + FFFF000000000000FFFF000000000000FFFFFFFFFFFFFFFFE1C7C003C7CFFFFF + E007C0038383F81FC001C0018101F81FC001C001C001F81F8001C0018003F81F + 8001C003C007F81F8001C003F00FF81F8001C003F80FC0038001C003F007E007 + F001C003F007F00FF001C003E083F81FFE01C003E0C1FC3FFFC1C007E1E1FE3F + FFC1C00FFBE7FE7FFFFFFFFFFFFFFFFF00000000000000000000000000000000 000000000000} end object alMenu: TActionList Images = ilsActions - Left = 36 - Top = 32 + Left = 80 + Top = 44 object actAddGroup: TAction Caption = '&Add group' ImageIndex = 0 @@ -244,5 +520,17 @@ object frmMenuBarEditor: TfrmMenuBarEditor 'Ctrl+Del') OnExecute = actDeleteExecute end + object actMoveUp: TAction + Caption = 'Move &Up' + ImageIndex = 3 + ShortCut = 16422 + OnExecute = actMoveUpExecute + end + object actMoveDown: TAction + Caption = 'Move &Down' + ImageIndex = 4 + ShortCut = 16424 + OnExecute = actMoveDownExecute + end end end diff --git a/Packages/X2CLMenuBarEditor.pas b/Packages/X2CLMenuBarEditor.pas index caeddde..d7bf145 100644 --- a/Packages/X2CLMenuBarEditor.pas +++ b/Packages/X2CLMenuBarEditor.pas @@ -7,17 +7,21 @@ uses ComCtrls, Controls, DesignIntf, + DesignWindows, Forms, ImgList, ToolWin, X2CLMenuBar; + type - TfrmMenuBarEditor = class(TForm, IX2MenuBarDesigner) + TfrmMenuBarEditor = class(TDesignWindow, IX2MenuBarDesigner) actAddGroup: TAction; actAddItem: TAction; actDelete: TAction; + actMoveDown: TAction; + actMoveUp: TAction; alMenu: TActionList; ilsActions: TImageList; sbStatus: TStatusBar; @@ -25,6 +29,9 @@ type tbAddItem: TToolButton; tbDelete: TToolButton; tbMenu: TToolBar; + tbMoveDown: TToolButton; + tbMoveUp: TToolButton; + tbSep1: TToolButton; tvMenu: TTreeView; procedure actDeleteExecute(Sender: TObject); @@ -36,8 +43,10 @@ type procedure FormDestroy(Sender: TObject); procedure tvMenuChange(Sender: TObject; Node: TTreeNode); procedure FormActivate(Sender: TObject); + procedure actMoveUpExecute(Sender: TObject); + procedure actMoveDownExecute(Sender: TObject); + procedure tvMenuKeyPress(Sender: TObject; var Key: Char); private - FDesigner: IDesigner; FMenuBar: TX2CustomMenuBar; FDesignerAttached: Boolean; @@ -48,6 +57,7 @@ type function GetSelectedItem(): TX2CustomMenuBarItem; function GetItemNode(AItem: TX2CustomMenuBarItem): TTreeNode; + procedure MoveSelectedItem(ADown: Boolean); protected procedure Notification(AComponent: TComponent; Operation: TOperation); override; procedure ItemAdded(AItem: TX2CustomMenuBarItem); @@ -62,26 +72,29 @@ type procedure UpdateUI(); procedure Modified(); - property Designer: IDesigner read FDesigner write FDesigner; property MenuBar: TX2CustomMenuBar read FMenuBar write SetMenuBar; public class procedure Execute(AMenuBar: TX2CustomMenuBar; ADesigner: IDesigner); end; + implementation uses Contnrs, SysUtils; + var GEditors: TObjectBucketList; + type TProtectedX2CustomMenuBar = class(TX2CustomMenuBar); {$R *.dfm} + { TfrmMenuBarEditor } class procedure TfrmMenuBarEditor.Execute(AMenuBar: TX2CustomMenuBar; ADesigner: IDesigner); var @@ -106,6 +119,7 @@ begin editorForm.Show(); end; + procedure TfrmMenuBarEditor.FormCreate(Sender: TObject); begin {$IFDEF VER180} @@ -117,6 +131,7 @@ begin {$ENDIF} end; + procedure TfrmMenuBarEditor.FormActivate(Sender: TObject); var item: TX2CustomMenuBarItem; @@ -133,6 +148,7 @@ begin UpdateUI(); end; + procedure TfrmMenuBarEditor.FormClose(Sender: TObject; var Action: TCloseAction); begin if Assigned(Designer) and Assigned(MenuBar) then @@ -141,6 +157,7 @@ begin Action := caFree; end; + procedure TfrmMenuBarEditor.FormDestroy(Sender: TObject); begin if Assigned(MenuBar) then @@ -170,6 +187,12 @@ begin end; +procedure TfrmMenuBarEditor.tvMenuKeyPress(Sender: TObject; var Key: Char); +begin + ActivateInspector(Key); +end; + + procedure TfrmMenuBarEditor.RefreshMenu(); var groupIndex: Integer; @@ -195,11 +218,12 @@ begin Modified(); end; + procedure TfrmMenuBarEditor.actAddItemExecute(Sender: TObject); var menuItem: TX2CustomMenuBarItem; group: TX2MenuBarGroup; - + begin menuItem := GetSelectedItem(); if Assigned(menuItem) then @@ -222,6 +246,7 @@ begin end; end; + procedure TfrmMenuBarEditor.actDeleteExecute(Sender: TObject); var menuItem: TX2CustomMenuBarItem; @@ -236,6 +261,18 @@ begin end; +procedure TfrmMenuBarEditor.actMoveUpExecute(Sender: TObject); +begin + MoveSelectedItem(False); +end; + + +procedure TfrmMenuBarEditor.actMoveDownExecute(Sender: TObject); +begin + MoveSelectedItem(True); +end; + + function TfrmMenuBarEditor.AddGroup(AGroup: TX2MenuBarGroup): TTreeNode; var itemIndex: Integer; @@ -286,6 +323,7 @@ begin end; end; + function TfrmMenuBarEditor.AddItem(ANode: TTreeNode; AItem: TX2MenuBarItem): TTreeNode; var siblingItem: TX2MenuBarItem; @@ -328,6 +366,7 @@ begin end; end; + procedure TfrmMenuBarEditor.UpdateNode(ANode: TTreeNode); var menuItem: TX2CustomMenuBarItem; @@ -339,22 +378,56 @@ begin ANode.SelectedIndex := ANode.ImageIndex; end; + procedure TfrmMenuBarEditor.UpdateUI(); var + canMoveDown: Boolean; + canMoveUp: Boolean; itemSelected: Boolean; + menuItem: TX2CustomMenuBarItem; + group: TX2MenuBarGroup; begin itemSelected := Assigned(tvMenu.Selected); actAddGroup.Enabled := Assigned(MenuBar); actAddItem.Enabled := itemSelected; actDelete.Enabled := itemSelected; + + canMoveUp := False; + canMoveDown := False; + + if itemSelected then + begin + menuItem := GetSelectedItem(); + + if Assigned(menuItem.Collection) then + begin + canMoveUp := (menuItem.Index > 0); + canMoveDown := (menuItem.Index < Pred(menuItem.Collection.Count)); + + if menuItem is TX2MenuBarItem then + begin + group := TX2MenuBarItem(menuItem).Group; + + if Assigned(group) then + begin + canMoveUp := canMoveUp or (group.Index > 0); + canMoveDown := canMoveDown or (group.Index < Pred(MenuBar.Groups.Count)); + end; + end; + end; + end; + + actMoveUp.Enabled := canMoveUp; + actMoveDown.Enabled := canMoveDown; end; + procedure TfrmMenuBarEditor.Modified(); begin if Assigned(Designer) then Designer.Modified(); - + UpdateUI(); end; @@ -370,6 +443,7 @@ begin inherited; end; + procedure TfrmMenuBarEditor.ItemAdded(AItem: TX2CustomMenuBarItem); var group: TX2MenuBarGroup; @@ -397,6 +471,7 @@ begin tvMenu.Selected := treeNode; end; + procedure TfrmMenuBarEditor.ItemModified(AItem: TX2CustomMenuBarItem); var treeNode: TTreeNode; @@ -415,6 +490,7 @@ begin end; end; + procedure TfrmMenuBarEditor.ItemDeleting(AItem: TX2CustomMenuBarItem); var treeNode: TTreeNode; @@ -435,6 +511,7 @@ begin FDesignerAttached := True; end; + procedure TfrmMenuBarEditor.DetachDesigner(); begin if not FDesignerAttached then @@ -446,6 +523,67 @@ begin end; + +procedure TfrmMenuBarEditor.MoveSelectedItem(ADown: Boolean); +var + selectedItem: TX2CustomMenuBarItem; + group: TX2MenuBarGroup; + refresh: Boolean; + +begin + if not Assigned(MenuBar) then + Exit; + + selectedItem := GetSelectedItem(); + if not Assigned(selectedItem) then + Exit; + + refresh := False; + group := nil; + + if selectedItem is TX2MenuBarItem then + group := TX2MenuBarItem(selectedItem).Group; + + if ADown then + begin + if selectedItem.Index < Pred(selectedItem.Collection.Count) then + begin + selectedItem.Index := Succ(selectedItem.Index); + refresh := True; + end else if Assigned(group) then + begin + { Move down to another group } + if group.Index < Pred(MenuBar.Groups.Count) then + begin + selectedItem.Collection := MenuBar.Groups[Succ(group.Index)].Items; + refresh := True; + end; + end; + end else + begin + if selectedItem.Index > 0 then + begin + selectedItem.Index := Pred(selectedItem.Index); + refresh := True; + end else if Assigned(group) then + begin + { Move up to another group } + if group.Index > 0 then + begin + selectedItem.Collection := MenuBar.Groups[Pred(group.Index)].Items; + refresh := True; + end; + end; + end; + + if refresh then + begin + ItemDeleting(selectedItem); + ItemAdded(selectedItem); + end; +end; + + function TfrmMenuBarEditor.GetSelectedItem(): TX2CustomMenuBarItem; begin Result := nil; @@ -453,6 +591,7 @@ begin Result := TX2CustomMenuBarItem(tvMenu.Selected.Data); end; + function TfrmMenuBarEditor.GetItemNode(AItem: TX2CustomMenuBarItem): TTreeNode; var treeNode: TTreeNode; @@ -512,6 +651,7 @@ begin end; end; + initialization finalization if Assigned(GEditors) then diff --git a/Resources/Icons/MenuBar/Down.ico b/Resources/Icons/MenuBar/Down.ico new file mode 100644 index 0000000..c0b02a8 Binary files /dev/null and b/Resources/Icons/MenuBar/Down.ico differ diff --git a/Resources/Icons/MenuBar/Up.ico b/Resources/Icons/MenuBar/Up.ico new file mode 100644 index 0000000..d5c88d0 Binary files /dev/null and b/Resources/Icons/MenuBar/Up.ico differ diff --git a/Source/X2CLMenuBar.pas b/Source/X2CLMenuBar.pas index 1813f0e..0196576 100644 --- a/Source/X2CLMenuBar.pas +++ b/Source/X2CLMenuBar.pas @@ -123,6 +123,8 @@ type constructor Create(AItemsBuffer: Graphics.TBitmap); virtual; destructor Destroy(); override; + procedure ResetStartTime(); + procedure Update(); virtual; procedure Draw(ACanvas: TCanvas; const ABounds: TRect); virtual; abstract; @@ -184,6 +186,7 @@ type TX2CustomMenuBarAction = class(TObject) private FMenuBar: TX2CustomMenuBar; + FStarted: Boolean; FTerminated: Boolean; protected function GetTerminated(): Boolean; virtual; @@ -193,6 +196,9 @@ type public constructor Create(AMenuBar: TX2CustomMenuBar); + function AllowUpdateScrollbar(): Boolean; virtual; + function AllowInteraction(): Boolean; virtual; + procedure Start(); virtual; procedure Stop(); virtual; @@ -204,6 +210,7 @@ type var AHandled: Boolean); virtual; procedure AfterPaint(); virtual; + property Started: Boolean read FStarted; property Terminated: Boolean read GetTerminated; end; @@ -507,6 +514,9 @@ type property OnSelectedChanged: TX2MenuBarSelectedChangedEvent read FOnSelectedChanged write FOnSelectedChanged; property OnSelectedChanging: TX2MenuBarSelectedChangingEvent read FOnSelectedChanging write FOnSelectedChanging; protected + procedure InternalSetExpanded(AGroup: TX2MenuBarGroup; AExpanded: Boolean); virtual; + procedure InternalSetSelected(AItem: TX2CustomMenuBarItem); virtual; + function DoAutoCollapse(AGroup: TX2MenuBarGroup): Boolean; virtual; function DoAutoSelectItem(AGroup: TX2MenuBarGroup): Boolean; virtual; function DoExpand(AGroup: TX2MenuBarGroup; AExpanding: Boolean): Boolean; virtual; @@ -643,6 +653,7 @@ begin FMenuBar := TX2CustomMenuBar(AOwner); end; + destructor TX2CustomMenuBarPainter.Destroy(); begin FreeAndNil(FObservers); @@ -672,12 +683,14 @@ begin FMenuBar := AMenuBar; end; + procedure TX2CustomMenuBarPainter.EndPaint(); begin Assert(Assigned(FMenuBar), 'EndPaint without BeginPaint'); FMenuBar := nil; end; + procedure TX2CustomMenuBarPainter.NotifyObservers(); var observerIndex: Integer; @@ -694,6 +707,7 @@ begin Result := ABounds; end; + function TX2CustomMenuBarPainter.GetGroupHeight(AGroup: TX2MenuBarGroup): Integer; var itemIndex: Integer; @@ -719,6 +733,7 @@ begin Abort := PtInRect(ItemBounds, hitPoint^); end; + function TX2CustomMenuBarPainter.HitTest(const APoint: TPoint): TX2MenuBarHitTest; var hitPoint: TPoint; @@ -735,6 +750,7 @@ begin Result.HitTestCode := htItem; end; + function TX2CustomMenuBarPainter.HitTest(AX, AY: Integer): TX2MenuBarHitTest; begin Result := HitTest(Point(AX, AY)); @@ -747,6 +763,7 @@ begin Result := FMenuBar; end; + function TX2CustomMenuBarPainter.GetSpacing(AElement: TX2MenuBarSpacingElement): Integer; begin Result := 0; @@ -758,7 +775,7 @@ constructor TX2CustomMenuBarAnimator.Create(AItemsBuffer: Graphics.TBitmap); begin inherited Create(); - FStartTime := GetTickCount(); + ResetStartTime(); FItemsBuffer := Graphics.TBitmap.Create(); FItemsBuffer.Assign(AItemsBuffer); end; @@ -771,11 +788,18 @@ begin end; +procedure TX2CustomMenuBarAnimator.ResetStartTime(); +begin + FStartTime := GetTickCount(); +end; + + function TX2CustomMenuBarAnimator.GetHeight(): Integer; begin Result := ItemsBuffer.Height; end; + function TX2CustomMenuBarAnimator.GetTimeElapsed(): Cardinal; var currentTime: Cardinal; @@ -788,6 +812,7 @@ begin Inc(Result, High(Cardinal)); end; + procedure TX2CustomMenuBarAnimator.SetExpanding(const Value: Boolean); begin FExpanding := Value; @@ -821,13 +846,27 @@ begin end; +function TX2CustomMenuBarAction.AllowInteraction(): Boolean; +begin + Result := False; +end; + + +function TX2CustomMenuBarAction.AllowUpdateScrollbar(): Boolean; +begin + Result := False; +end; + + procedure TX2CustomMenuBarAction.Start(); begin + FStarted := True; end; procedure TX2CustomMenuBarAction.Stop(); begin + FStarted := False; end; @@ -866,48 +905,56 @@ begin FClient := (AClient as TX2CustomMenuBarItem); end; + function TX2MenuBarActionLink.IsCaptionLinked(): Boolean; begin Result := inherited IsCaptionLinked() and (Client.Caption = (Action as TCustomAction).Caption); end; + function TX2MenuBarActionLink.IsEnabledLinked(): Boolean; begin Result := inherited IsCaptionLinked() and (Client.Enabled = (Action as TCustomAction).Enabled); end; + function TX2MenuBarActionLink.IsImageIndexLinked(): Boolean; begin Result := inherited IsCaptionLinked() and (Client.ImageIndex = (Action as TCustomAction).ImageIndex); end; + function TX2MenuBarActionLink.IsVisibleLinked(): Boolean; begin Result := inherited IsCaptionLinked() and (Client.Visible = (Action as TCustomAction).Visible); end; + procedure TX2MenuBarActionLink.SetCaption(const Value: string); begin if IsCaptionLinked() then Client.Caption := Value; end; + procedure TX2MenuBarActionLink.SetEnabled(Value: Boolean); begin if IsEnabledLinked() then Client.Enabled := Value; end; + procedure TX2MenuBarActionLink.SetImageIndex(Value: Integer); begin if IsImageIndexLinked() then Client.ImageIndex := Value; end; + procedure TX2MenuBarActionLink.SetVisible(Value: Boolean); begin if IsVisibleLinked() then @@ -967,6 +1014,7 @@ begin ActionChange(Sender, False); end; + procedure TX2CustomMenuBarItem.ActionChange(Sender: TObject; CheckDefaults: Boolean); begin @@ -993,6 +1041,7 @@ begin Result := (Length(Caption) > 0); end; + function TX2CustomMenuBarItem.GetMenuBar(): TX2CustomMenuBar; var parentCollection: TCollection; @@ -1020,6 +1069,7 @@ begin end; end; + procedure TX2CustomMenuBarItem.SetAction(const Value: TBasicAction); begin if Value <> FAction then @@ -1052,6 +1102,7 @@ begin end; end; + procedure TX2CustomMenuBarItem.SetCaption(const Value: String); begin if Value <> FCaption then @@ -1061,6 +1112,7 @@ begin end; end; + procedure TX2CustomMenuBarItem.SetData(const Value: TObject); begin if Value <> FData then @@ -1072,6 +1124,7 @@ begin end; end; + procedure TX2CustomMenuBarItem.SetEnabled(const Value: Boolean); begin if Value <> FEnabled then @@ -1081,6 +1134,7 @@ begin end; end; + procedure TX2CustomMenuBarItem.SetImageIndex(const Value: TImageIndex); begin if Value <> FImageIndex then @@ -1090,6 +1144,7 @@ begin end; end; + procedure TX2CustomMenuBarItem.SetVisible(const Value: Boolean); begin if Value <> FVisible then @@ -1109,6 +1164,7 @@ begin inherited; end; + procedure TX2CustomMenuBarItems.Update(Item: TCollectionItem); begin inherited; @@ -1164,6 +1220,7 @@ begin Result := TX2MenuBarItem(inherited GetItem(Index)); end; + procedure TX2MenuBarItems.SetItem(Index: Integer; const Value: TX2MenuBarItem); begin inherited SetItem(Index, Value); @@ -1183,6 +1240,7 @@ begin inherited; end; + destructor TX2MenuBarGroup.Destroy(); begin FreeAndNil(FItems); @@ -1217,28 +1275,24 @@ begin end; end; -procedure TX2MenuBarGroup.InternalSetExpanded(const Value: Boolean); -var - menu: TX2CustomMenuBar; +procedure TX2MenuBarGroup.InternalSetExpanded(const Value: Boolean); begin if Value <> FExpanded then begin FExpanded := Value; Changed(False); - - menu := MenuBar; - if Assigned(menu) then - menu.DoExpandedChanged(Self); end; end; + procedure TX2MenuBarGroup.ItemsNotify(Sender: TObject; Item: TCollectionItem; Action: TCollectionNotification); begin if Assigned(Self.Collection) then TProtectedCollection(Self.Collection).Notify(Item, Action); end; + procedure TX2MenuBarGroup.ItemsUpdate(Sender: TObject; Item: TCollectionItem); var groupCollection: TProtectedCollection; @@ -1250,11 +1304,13 @@ begin groupCollection.Update(Item); end; + function TX2MenuBarGroup.IsCaptionStored(): Boolean; begin Result := (Caption <> SDefaultGroupCaption); end; + procedure TX2MenuBarGroup.SetEnabled(const Value: Boolean); begin inherited; @@ -1263,6 +1319,7 @@ begin Expanded := False; end; + procedure TX2MenuBarGroup.SetExpanded(const Value: Boolean); var menu: TX2CustomMenuBar; @@ -1279,6 +1336,7 @@ begin end; end; + procedure TX2MenuBarGroup.SetItems(const Value: TX2MenuBarItems); begin if Value <> FItems then @@ -1310,6 +1368,7 @@ begin Result := TX2MenuBarGroup(inherited GetItem(Index)); end; + procedure TX2MenuBarGroups.SetItem(Index: Integer; const Value: TX2MenuBarGroup); begin inherited SetItem(Index, Value); @@ -1377,6 +1436,7 @@ begin inherited; end; + procedure TX2CustomMenuBar.WMEraseBkgnd(var Msg: TWMEraseBkgnd); begin Msg.Result := 0; @@ -1411,7 +1471,12 @@ begin { Update action } currentAction := GetCurrentAction(); if Assigned(currentAction) then + begin + if not currentAction.Started then + currentAction.Start(); + currentAction.BeforePaint(); + end; UpdateScrollbar(); @@ -1432,21 +1497,15 @@ begin { Action queue } if Assigned(currentAction) then begin + { Make sure Paint is called again while there's an action queue } + Invalidate(); + currentAction.AfterPaint(); if currentAction.Terminated then begin currentAction.Stop(); PopCurrentAction(); - - currentAction := GetCurrentAction(); - if Assigned(currentAction) then - begin - currentAction.Start(); - - { Make sure Paint is called again while there's an action queue } - Invalidate(); - end; end; end; end @@ -1479,6 +1538,7 @@ begin Include(Result, mdsGroupSelected); end; + procedure TX2CustomMenuBar.DrawMenuItem(Sender: TObject; Item: TX2CustomMenuBarItem; const MenuBounds, ItemBounds: TRect; @@ -1514,6 +1574,7 @@ begin end; end; + procedure TX2CustomMenuBar.DrawMenuItems(ACanvas: TCanvas; AGroup: TX2MenuBarGroup; const ABounds: TRect); var itemBounds: TRect; @@ -1542,11 +1603,13 @@ begin end; end; + procedure TX2CustomMenuBar.DrawMenu(ACanvas: TCanvas); begin IterateItemBounds(DrawMenuItem, Pointer(ACanvas)); end; + procedure TX2CustomMenuBar.DrawNoPainter(ACanvas: TCanvas; const ABounds: TRect); const XorColor = $00FFD8CE; // RGB(206, 216, 255) @@ -1759,6 +1822,7 @@ begin { Pretend to auto select item - required for proper functioning of the OnSelectedChanging event } + // #ToDo1 (MvR) 20-4-2007: check OnSelectedChanging behaviour // if AutoSelectItem then // if not DoAutoSelectItem(AGroup, saBefore) then // exit; @@ -1793,14 +1857,11 @@ begin end; end; + procedure TX2CustomMenuBar.DoExpandedChanged(AGroup: TX2MenuBarGroup); begin if AGroup.Expanded then begin - { Auto select item } -// if AutoSelectItem then -// DoAutoSelectItem(AGroup, saAfter); - if Assigned(FOnExpanded) then FOnExpanded(Self, AGroup); end else @@ -1808,6 +1869,7 @@ begin FOnCollapsed(Self, AGroup); end; + procedure TX2CustomMenuBar.DoSelectedChanging(ANewItem: TX2CustomMenuBarItem; var AAllowed: Boolean); begin @@ -1815,6 +1877,7 @@ begin FOnSelectedChanging(Self, SelectedItem, ANewItem, AAllowed); end; + procedure TX2CustomMenuBar.DoSelectedChanged(); begin if Assigned(FOnSelectedChanged) then @@ -1852,15 +1915,24 @@ end; function TX2CustomMenuBar.AllowInteraction(): Boolean; +var + currentAction: TX2CustomMenuBarAction; + begin - Result := (ActionQueue.Count = 0); + Result := True; + + currentAction := GetCurrentAction(); + if Assigned(currentAction) then + Result := currentAction.AllowInteraction(); end; + function TX2CustomMenuBar.ItemEnabled(AItem: TX2CustomMenuBarItem): Boolean; begin Result := AItem.Enabled and AItem.Visible; end; + function TX2CustomMenuBar.ItemVisible(AItem: TX2CustomMenuBarItem): Boolean; begin Result := AItem.Visible or (csDesigning in ComponentState); @@ -1890,6 +1962,24 @@ begin end; +procedure TX2CustomMenuBar.InternalSetExpanded(AGroup: TX2MenuBarGroup; + AExpanded: Boolean); +begin + AGroup.InternalSetExpanded(AExpanded); + DoExpandedChanged(AGroup); +end; + + +procedure TX2CustomMenuBar.InternalSetSelected(AItem: TX2CustomMenuBarItem); +begin + FSelectedItem := AItem; + DoSelectedChanged(); + + if Assigned(SelectedItem) and Assigned(SelectedItem.Action) then + SelectedItem.ActionLink.Execute(Self); +end; + + function TX2CustomMenuBar.DoAutoCollapse(AGroup: TX2MenuBarGroup): Boolean; var possibleGroup: TX2MenuBarGroup; @@ -2011,6 +2101,7 @@ var itemIndex: Integer; begin + Result := True; group := AGroup; if not Assigned(group) then @@ -2047,14 +2138,8 @@ begin end; end; -// if Assigned(newItem) and (newItem <> SelectedItem) then -// begin -// if AAction in [saBefore, saBoth] then -// DoSelectedChanging(newItem, Result); -// -// if Result and (AAction in [saAfter, saBoth]) then -// SelectedItem := newItem; -// end; + if Assigned(newItem) and (newItem <> SelectedItem) then + PerformSelectItem(newItem); end; end; @@ -2076,14 +2161,19 @@ begin if not allowed then Exit; - if not AExpanding then - begin - // #ToDo1 (MvR) 22-3-2007: - end else - begin - PerformAutoCollapse(AGroup); - PerformAutoSelectItem(AGroup); - end; + if AExpanding then + if not PerformAutoCollapse(AGroup) then + Exit; + + // if not AExpanding then +// begin +// // #ToDo1 (MvR) 22-3-2007: ? anything ? +// end else +// begin +// if not (PerformAutoCollapse(AGroup) and +// PerformAutoSelectItem(AGroup)) then +// Result := False; +// end; Result := True; expandAction := TX2MenuBarAnimateAction(GetAnimateAction(AGroup, AExpanding)); @@ -2096,11 +2186,8 @@ end; function TX2CustomMenuBar.DoSelectItem(AItem: TX2CustomMenuBarItem): Boolean; begin + PushAction(TX2MenuBarSelectAction.Create(Self, AItem)); Result := True; - DoSelectedChanging(AItem, Result); - - if Result then - PushAction( end; @@ -2168,6 +2255,7 @@ begin end; end; + function TX2CustomMenuBar.HitTest(AX, AY: Integer): TX2MenuBarHitTest; begin Result := HitTest(Point(AX, AY)); @@ -2278,6 +2366,7 @@ begin end; end; + function TX2CustomMenuBar.SelectLast(): TX2CustomMenuBarItem; begin Result := nil; @@ -2290,25 +2379,27 @@ begin end; end; + function TX2CustomMenuBar.SelectNext(): TX2CustomMenuBarItem; begin Result := nil; if AllowInteraction then begin - Result := Iterate(FindEnabledItem, mbdDown, nil, FSelectedItem); + Result := Iterate(FindEnabledItem, mbdDown, nil, SelectedItem); if Assigned(Result) then SelectedItem := Result; end; end; + function TX2CustomMenuBar.SelectPrior(): TX2CustomMenuBarItem; begin Result := nil; if AllowInteraction then begin - Result := Iterate(FindEnabledItem, mbdUp, nil, FSelectedItem); + Result := Iterate(FindEnabledItem, mbdUp, nil, SelectedItem); if Assigned(Result) then SelectedItem := Result; end; @@ -2329,6 +2420,7 @@ begin end; end; + function TX2CustomMenuBar.SelectItem(AIndex: Integer; AGroup: TX2MenuBarGroup): TX2CustomMenuBarItem; var @@ -2366,6 +2458,7 @@ begin end; end; + function TX2CustomMenuBar.SelectItem(AIndex, AGroup: Integer): TX2CustomMenuBarItem; var group: TX2MenuBarGroup; @@ -2401,11 +2494,13 @@ begin inherited; end; + procedure TX2CustomMenuBar.PainterUpdate(Sender: TX2CustomMenuBarPainter); begin Invalidate(); end; + procedure TX2CustomMenuBar.GroupsNotify(Sender: TObject; Item: TCollectionItem; Action: TCollectionNotification); begin if Action = cnDeleting then @@ -2424,6 +2519,7 @@ begin Invalidate(); end; + procedure TX2CustomMenuBar.GroupsUpdate(Sender: TObject; Item: TCollectionItem); begin if Assigned(SelectedItem) and (not ItemEnabled(SelectedItem)) then @@ -2482,6 +2578,7 @@ begin inherited; end; + procedure TX2CustomMenuBar.CMMouseLeave(var Msg: TMessage); begin FLastMousePos := Point(-1, -1); @@ -2640,18 +2737,18 @@ begin end; end; + procedure TX2CustomMenuBar.UpdateScrollbar(); var + currentAction: TX2CustomMenuBarAction; scrollInfo: TScrollInfo; begin { Don't update the scrollbar while animating, prevents issues with the items buffer width if the scrollbar happens to show/hide during animation. } - // #ToDo1 (MvR) 13-3-2007: actionqueue - (* - if Assigned(Animator) then + currentAction := GetCurrentAction(); + if Assigned(currentAction) and (not currentAction.AllowUpdateScrollbar()) then exit; - *) FillChar(scrollInfo, SizeOf(TScrollInfo), #0); scrollInfo.cbSize := SizeOf(TScrollInfo); @@ -2712,8 +2809,8 @@ begin begin FAutoSelectItem := Value; -// if Value and (not Assigned(SelectedItem)) then -// DoAutoSelectItem(nil, saBoth); + if Value and (not Assigned(SelectedItem)) then + DoAutoSelectItem(nil); end; end; @@ -2824,51 +2921,17 @@ begin end else begin if group.Items.Count > 0 then - PerformExpand(group, True) - else - PerformSelectItem(group); + begin + PerformExpand(group, True); + PerformAutoSelectItem(group); + end else + begin + if PerformAutoCollapse(group) then + PerformSelectItem(group); + end; end; end else PerformSelectItem(selectItem); - - - // #ToDo1 (MvR) 13-3-2007: check -// if Assigned(Value) then -// begin -// if Value is TX2MenuBarGroup then -// begin -// group := TX2MenuBarGroup(Value); -// -// if group.Items.Count > 0 then -// begin -// // Item is a group, expand it (triggers autoselect too if appropriate) -// group.Expanded := True; -// Exit; -// end else -// DoAutoCollapse(group); -// end; -// -// FSelectedItem := Value; -// -// if Value is TX2MenuBarItem then -// begin -// group := TX2MenuBarItem(Value).Group; -// if Assigned(group) then -// begin -// group.SelectedItem := Value.Index; -// -// if not group.Expanded then -// group.Expanded := True; -// end; -// end; -// -// if Assigned(FSelectedItem) and Assigned(FSelectedItem.Action) then -// FSelectedItem.ActionLink.Execute(Self); -// end; -// end; -// -// DoSelectedChanged(); -// Invalidate(); end; end; end; diff --git a/Source/X2CLMenuBarActions.pas b/Source/X2CLMenuBarActions.pas index 3708520..9ebc803 100644 --- a/Source/X2CLMenuBarActions.pas +++ b/Source/X2CLMenuBarActions.pas @@ -26,6 +26,8 @@ type constructor Create(AMenuBar: TX2CustomMenuBar; AGroup: TX2MenuBarGroup; AAnimator: TX2CustomMenuBarAnimator); + procedure Start(); override; + procedure BeforePaint(); override; procedure GetItemHeight(AItem: TX2CustomMenuBarItem; var AHeight: Integer; var AHandled: Boolean); override; @@ -99,8 +101,7 @@ type private FItem: TX2CustomMenuBarItem; public - constructor Create(AMenuBar: TX2CustomMenuBar; AGroup: TX2MenuBarGroup; - AExpanding: Boolean); + constructor Create(AMenuBar: TX2CustomMenuBar; AItem: TX2CustomMenuBarItem); procedure Start(); override; end; @@ -116,7 +117,7 @@ type TProtectedX2CustomMenuBar = class(TX2CustomMenuBar); TProtectedX2MenuBarGroup = class(TX2MenuBarGroup); - + { TX2MenuBarAnimateAction } constructor TX2MenuBarAnimateAction.Create(AMenuBar: TX2CustomMenuBar; AGroup: TX2MenuBarGroup; @@ -129,6 +130,14 @@ begin end; +procedure TX2MenuBarAnimateAction.Start(); +begin + inherited; + + Animator.ResetStartTime(); +end; + + procedure TX2MenuBarAnimateAction.BeforePaint(); begin inherited; @@ -330,11 +339,29 @@ procedure TX2MenuBarExpandAction.Start(); begin inherited; - // #ToDo1 (MvR) 22-3-2007: via MenuBar t.b.v. OnExpandedChanged - TProtectedX2MenuBarGroup(FGroup).InternalSetExpanded(FExpanding); + TProtectedX2CustomMenuBar(MenuBar).InternalSetExpanded(FGroup, FExpanding); MenuBar.Invalidate(); Terminate(); end; + +{ TX2MenuBarSelectAction } +constructor TX2MenuBarSelectAction.Create(AMenuBar: TX2CustomMenuBar; + AItem: TX2CustomMenuBarItem); +begin + inherited Create(AMenuBar); + + FItem := AItem; +end; + + +procedure TX2MenuBarSelectAction.Start(); +begin + inherited; + + TProtectedX2CustomMenuBar(MenuBar).InternalSetSelected(FItem); + Terminate(); +end; + end. diff --git a/Test/MenuBar/MainForm.dfm b/Test/MenuBar/MainForm.dfm index 840294e..9638381 100644 --- a/Test/MenuBar/MainForm.dfm +++ b/Test/MenuBar/MainForm.dfm @@ -1,9 +1,9 @@ object frmMain: TfrmMain Left = 300 Top = 219 + Width = 613 + Height = 406 Caption = 'X2MenuBar Test' - ClientHeight = 379 - ClientWidth = 589 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText @@ -22,8 +22,6 @@ object frmMain: TfrmMain Height = 379 Align = alLeft Shape = bsLeftLine - ExplicitLeft = 148 - ExplicitTop = -4 end object lblAnimationTime: TLabel Left = 424 @@ -32,24 +30,13 @@ object frmMain: TfrmMain Height = 13 Caption = 'Animation time (ms):' end - object seAnimationTime: TJvSpinEdit - Left = 424 - Top = 36 - Width = 81 - Height = 21 - CheckMinValue = True - ButtonKind = bkStandard - Value = 250.000000000000000000 - TabOrder = 0 - OnChange = seAnimationTimeChange - end object Panel1: TPanel Left = 280 Top = 68 Width = 133 Height = 77 BevelOuter = bvNone - TabOrder = 1 + TabOrder = 0 object rbmusikCube: TRadioButton Left = 0 Top = 0 @@ -86,7 +73,7 @@ object frmMain: TfrmMain Width = 153 Height = 101 BevelOuter = bvNone - TabOrder = 2 + TabOrder = 1 object rbSliding: TRadioButton Left = 0 Top = 20 @@ -141,7 +128,7 @@ object frmMain: TfrmMain Width = 89 Height = 17 Caption = 'Auto collapse' - TabOrder = 3 + TabOrder = 2 OnClick = chkAutoCollapseClick end object chkAllowCollapseAll: TCheckBox @@ -150,7 +137,7 @@ object frmMain: TfrmMain Width = 101 Height = 17 Caption = 'Allow collapse all' - TabOrder = 5 + TabOrder = 4 OnClick = chkAllowCollapseAllClick end object chkAutoSelectItem: TCheckBox @@ -159,7 +146,7 @@ object frmMain: TfrmMain Width = 101 Height = 17 Caption = 'Auto select item' - TabOrder = 4 + TabOrder = 3 OnClick = chkAutoSelectItemClick end object chkScrollbar: TCheckBox @@ -170,7 +157,7 @@ object frmMain: TfrmMain Caption = 'Scrollbar' Checked = True State = cbChecked - TabOrder = 6 + TabOrder = 5 OnClick = chkScrollbarClick end object chkHideScrollbar: TCheckBox @@ -181,7 +168,7 @@ object frmMain: TfrmMain Caption = 'Hide Scrollbar' Checked = True State = cbChecked - TabOrder = 7 + TabOrder = 6 OnClick = chkHideScrollbarClick end object lbEvents: TListBox @@ -190,7 +177,7 @@ object frmMain: TfrmMain Width = 421 Height = 93 ItemHeight = 13 - TabOrder = 8 + TabOrder = 7 end object Button1: TButton Left = 152 @@ -199,7 +186,7 @@ object frmMain: TfrmMain Height = 25 Caption = 'SelectFirst' Enabled = False - TabOrder = 9 + TabOrder = 8 end object Button2: TButton Left = 152 @@ -208,7 +195,7 @@ object frmMain: TfrmMain Height = 25 Caption = 'SelectPrior' Enabled = False - TabOrder = 10 + TabOrder = 9 end object Button3: TButton Left = 152 @@ -217,7 +204,7 @@ object frmMain: TfrmMain Height = 25 Caption = 'SelectNext' Enabled = False - TabOrder = 11 + TabOrder = 10 end object Button4: TButton Left = 152 @@ -226,7 +213,7 @@ object frmMain: TfrmMain Height = 25 Caption = 'SelectLast' Enabled = False - TabOrder = 12 + TabOrder = 11 end object Button5: TButton Left = 152 @@ -235,7 +222,7 @@ object frmMain: TfrmMain Height = 25 Caption = 'SelectGroupByIndex' Enabled = False - TabOrder = 13 + TabOrder = 12 end object Button6: TButton Left = 152 @@ -244,7 +231,7 @@ object frmMain: TfrmMain Height = 25 Caption = 'SelectItemByIndex' Enabled = False - TabOrder = 14 + TabOrder = 13 end object chkHotHand: TCheckBox Left = 424 @@ -304,8 +291,9 @@ object frmMain: TfrmMain end> end item + Action = actTest2 Caption = 'Group without items' - ImageIndex = 2 + ImageIndex = 3 Expanded = False Items = <> end @@ -376,115 +364,113 @@ object frmMain: TfrmMain OnSelectedChanged = mbTestSelectedChanged OnSelectedChanging = mbTestSelectedChanging Painter = mcPainter - ExplicitLeft = -6 end object gcMenu: TX2GraphicContainer - Graphics = < - item - Name = 'ShareFile' - Picture.Data = { - 0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000001000 - 00001008060000001FF3FF61000001844944415478DAA5D2CD4B02411400F0B7 - DB2DA27FAB4EE22102A1A0C0FCA0837A4989683734C7A072A12C45502902FB00 - E95487FEA20E1D24337777E635B33BBB389B5E6A60F6ED1EDE6FDE9BB71AFC73 - 69C14BADF98A223A8EEB7DDB41B4FD38B11D1112D661A23F1728A657E69E5428 - F761796911869F5F0A32174044102551E6BF17C90364B76270F7F4A6202140AE - 5FB09459554E1589942B8CF9C0F4E280A600A6F58C462E3613A01C70F9B61DCA - 4F1F83D51CA0656EEB2A501FA0918FAB2D88646FA3D74A108D6A0F2E2A496D26 - 20127D80972E93998208A00B97951D1530CE076816E2E052FFF238E125B228C4 - 1F06E941230AEC9F3CE2F1DE1A7CBB2CAC00652B4CB6C2E49D1C912E07522A50 - 22F7484AEB30B2250018224C2607509974A0719C5681BC798B75630386131AA9 - 80274B2C68A5C22BB8AA46809C71C347B3091F631ACC414564152E8FD55A079A - 24A302A9621B5BB524BC8F9CA951AA80F72FF07D76DA8516C9AAC0EE411B755D - 0790339045841719DC8BA86241D37F4FE1AFEB07F8392D2050E7313500000000 - 49454E44AE426082} - end - item - Name = 'ShareFolder' - Picture.Data = { - 0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000001000 - 00001008060000001FF3FF610000025B4944415478DAAD936D48535118C7FF77 - 775BEAD8ACA123CB2834EC9B2DB2B0328CCC284B461192146A48040505D36A05 - 154826A64D53A490303F6510C528421B6B2CC4C0E5170317ABA859099ACEBBF7 - B6BBFBD2F172433F680875E0CF797BFE3FCE79CE7928FC63A3961B38D201BB3F - 82524100E6140AA0A7D28ADA65039C2D88159DF3A7AA52F5D2FCF90D0AA60650 - 4B02BCBDD8C504512288284CB23088EA0C63F18569FACFFE92007727BCB47E4B - 9E5A9385F4753B9091530EB5D6009AD690DD28519C2813B66B5A1CB9B908C075 - 0762B139042EEE412CF01D51BF0789F04F4064C1712C36EEAE275119787A350B - C79A64C0609B2209958E5E633C4FF9DE36A0B07610D1D97EA8523448D56AB122 - 2D8D642E8EC98FA3D0E79442AD31E289250F15CD32C0D942058ACE0EA7ABD236 - C1D19C8E7D973F93D521804B4A4649624292CFF3151B0AEAF1F8E26654B6CA00 - C76DA53BFF68DFB6CCDC9DB037ADC5FE2BA3C4F41AE009804BCC03F8047E787D - C8DE5E8547751538619501F62674AF5A5F525350D9AD1A68CCC5018B8BE4AA5F - 324060E57EEE041CC4A40026A6C3CBAE07A8BA2B03061A5141F1F4BDBD752FF4 - AF5ACB70E8928D24FC1931B20B00736312ACA010F42760EB79839ACE05AF3070 - 2BC5A6CBDA6A9AF10DA1DCFC1008F649999704228508669605331E86776C06D3 - 939189EA0E6453F31F0367D49AD55DF1F0246D32B713402F3125C04C45C8BD43 - 98188F89D15032405E72F8781B0E2E5A0BCEAE7C8E99784F97551FC627B70BDF - BEFCE2E3117E4AE031625809CB9EEBF8F0D7627A77BFE0D4D8D88855A9440022 - 1C27DB71FABF55E352ED373075032024CD24170000000049454E44AE426082} - end - item - Name = 'ShareWebcam' - Picture.Data = { - 0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000001000 - 00001008060000001FF3FF61000002C14944415478DABD935D48935118C7FF9B - DB9CD38913155CB586D008C30F9A95A8217927A14157DE441FE88521A4828108 - 0A8992621745A80C477AB3A048D44A08A18589BA959AE0D4A09CBAE936F7E55E - 759B7BDFB91EDF20E82E283A70381CCE797EFFE739E7FF08F09743F04F00D5D5 - BA94C4C4E47A954AA171BB0F6452292B92CB25C24824088E63A32C1BE658F630 - B2BFBF175E5B5B5B0F0643AF8DC6E79F7F011A1B87DE3435555C0D8582181F37 - 637BFB3BEAEA6ED28918BBBB3EC4C589F8AB1C071C1C846136CFC52626DE0D8D - 8E0EDEE6011D1D2F772A2B0BD2392E0A936915878711C46231088502582C6FB1 - B4B44CC0079899998048C48132A1A8D42D9DAEEB240F686919F017179F4D6118 - 8ED4BD9048E22016FF9C16CB14525353A056E7C26AB5109C4166A692A0566F6F - EFC3341ED0DDFDC25759A9552C2CAC8061F6715C7B2C968868D405AD36076EB7 - 874A0990BA020A453A8145181B1BF1F7F575A7F280F6F621574D4D4586DDEE81 - D7CBC066B3D2EA446E6E16BABA9E906A0C39392AE4E79F874A758E32946078F8 - 95BBBFBF278307B4B50D6CD6D65E3FB5B9E982CFC7606BCB4EEA3EACAE2E2110 - 5042A3C9C6E4A40EA5A525042A444282140683C1A6D33D56F180E6E6A75F1B1A - 6E683636B649790F3B3B0E04832EACAF7F83D13887B4B44CC8E52C0A0B8B9097 - 7701F1F1F1D0EBF52B7A7D6F360FA8AFEFFAD4DA7AB7C06ADD86C7B34BC10C1C - 0E3BA4D2E35F311F7B014AE50994945C21F544242727D1BB3D9A32189E5DE601 - 55558D239D9DF7AE310C4BEA7EAA5100A7D3857098A1E010EDC5C8CA3A43CA32 - BACD61717131363030747F76F6430F0F282FBF73A9ACACE47D51915666B3B9C8 - 386421B11432593C418294CD163DAC2DE2743AE697972DC66834326A327D34FD - D60BE5E5B72EAAD5A7079392E41AB2AE9BCC6275B91CCB3E5FE08B40C0CE1F1D - F917A6A767427FD24C429A47FFAD1B7F00ED1B51200D4AE2740000000049454E - 44AE426082} - end - item - Name = 'ShareWebcamVideo' - Picture.Data = { - 0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000001000 - 00001008060000001FF3FF61000002EA4944415478DAA5935D48935118C7FFF3 - DDAB6BCEF9FDED44DC4CA15E8761412A1296A121285ED595DD7521298C125341 - E9622B584CE6BCF122454891AE9424432B3FC8A4FC203F32D1E9FCAA95D36DCD - B5BDAF7BB78E2B040BA2E8DC9CAFE7FC9EE7FCCFF90BF09F4DF0EB82CFE713E8 - F5FA149AA6198FC7C3884422262C2C8C118BC5A91CC7EDBBDDAE75ABD5BAC4B2 - 9C4EA5524D1E03747777574B2492A688888830D2432A952238580C9AA6C82E8F - 830316DBDB7632077A7B7B5FD7D737E41C017A7A7A8A939393FB188611DA6C36 - 2426268265DDB05A2D9899716373D30BA39187CD7608FA86ADCD06D7E0D0A0D8 - 0F50ABD585342D7CEA703828A55289E8E818242424203C5C82AE2E0789909183 - FB70BB59389D2E02F66274F4BA6361615CEA075455DD1C11894EE43FEC7C8C2B - C59791794A8EA2A26212ECC4F47436380EE430878D8D31D8ED6FC93A199BDEAC - 4FCD0CA4F801776A6B9D731F56C553CB1C3EED72A82C4FC2A5C2622814C99898 - 9061656519F3F3F7B1B7B785A8A818040444212DEDCCAC56AB52FA013535B7ED - E65D56FA688405EF0DC5D59CAF60329290937B0E7373720C0CA840511C76763E - FB01F1F1371014343B6B3034FE005456560E9D4C935FACD6AF03541CCAB35791 - 9A1082D34C3A9697F33035A5267A444128CC464848162C163BD1A97FB2B5557D - F667053525F0F17D2C1527E81B36212B6E1D79F917E0724988FAB9100804F078 - 78A2C5A1802EA2831B1919CFFB753A6DC9D133D6D5D5DD22719AF434B9D0E9E2 - 488981E4B942313C1C47EECCC3EBF591B9070E871B4AA58FC09E7536371B2A8E - 7DA4F6F6F677A5A5A59966B39964B1C164B2A0A34388C04090CC3C2223BD2828 - A0C978D16B327D2CD56A1F3C3906D0E974E3656565E7799EF7976DB57E415BDB - 26C46211C94A932A8CBEA5A5B5171415D8A8D1685EFDE605F2A1AE51146590C9 - 64110A8582F8C2EBBFF7E2E27B9FD1B8F6322040D8A4D1DC1BFBA39988418288 - 894A481515B1B1B185168BE51531D8DD969696D1BF72E3BFB6EF2C065120000A - A5C30000000049454E44AE426082} - end> Left = 180 Top = 8 + object gcMenuShareFile: TX2GraphicContainerItem + Picture.Data = { + 0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000001000 + 00001008060000001FF3FF61000001844944415478DAA5D2CD4B02411400F0B7 + DB2DA27FAB4EE22102A1A0C0FCA0837A4989683734C7A072A12C45502902FB00 + E95487FEA20E1D24337777E635B33BBB389B5E6A60F6ED1EDE6FDE9BB71AFC73 + 69C14BADF98A223A8EEB7DDB41B4FD38B11D1112D661A23F1728A657E69E5428 + F761796911869F5F0A32174044102551E6BF17C90364B76270F7F4A6202140AE + 5FB09459554E1589942B8CF9C0F4E280A600A6F58C462E3613A01C70F9B61DCA + 4F1F83D51CA0656EEB2A501FA0918FAB2D88646FA3D74A108D6A0F2E2A496D26 + 20127D80972E93998208A00B97951D1530CE076816E2E052FFF238E125B228C4 + 1F06E941230AEC9F3CE2F1DE1A7CBB2CAC00652B4CB6C2E49D1C912E07522A50 + 22F7484AEB30B2250018224C2607509974A0719C5681BC798B75630386131AA9 + 80274B2C68A5C22BB8AA46809C71C347B3091F631ACC414564152E8FD55A079A + 24A302A9621B5BB524BC8F9CA951AA80F72FF07D76DA8516C9AAC0EE411B755D + 0790339045841719DC8BA86241D37F4FE1AFEB07F8392D2050E7313500000000 + 49454E44AE426082} + PictureName = 'ShareFile' + end + object gcMenuShareFolder: TX2GraphicContainerItem + Picture.Data = { + 0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000001000 + 00001008060000001FF3FF610000025B4944415478DAAD936D48535118C7FF77 + 775BEAD8ACA123CB2834EC9B2DB2B0328CCC284B461192146A48040505D36A05 + 154826A64D53A490303F6510C528421B6B2CC4C0E5170317ABA859099ACEBBF7 + B6BBFBD2F172433F680875E0CF797BFE3FCE79CE7928FC63A3961B38D201BB3F + 82524100E6140AA0A7D28ADA65039C2D88159DF3A7AA52F5D2FCF90D0AA60650 + 4B02BCBDD8C504512288284CB23088EA0C63F18569FACFFE92007727BCB47E4B + 9E5A9385F4753B9091530EB5D6009AD690DD28519C2813B66B5A1CB9B908C075 + 0762B139042EEE412CF01D51BF0789F04F4064C1712C36EEAE275119787A350B + C79A64C0609B2209958E5E633C4FF9DE36A0B07610D1D97EA8523448D56AB122 + 2D8D642E8EC98FA3D0E79442AD31E289250F15CD32C0D942058ACE0EA7ABD236 + C1D19C8E7D973F93D521804B4A4649624292CFF3151B0AEAF1F8E26654B6CA00 + C76DA53BFF68DFB6CCDC9DB037ADC5FE2BA3C4F41AE009804BCC03F8047E787D + C8DE5E8547751538619501F62674AF5A5F525350D9AD1A68CCC5018B8BE4AA5F + 324060E57EEE041CC4A40026A6C3CBAE07A8BA2B03061A5141F1F4BDBD752FF4 + AF5ACB70E8928D24FC1931B20B00736312ACA010F42760EB79839ACE05AF3070 + 2BC5A6CBDA6A9AF10DA1DCFC1008F649999704228508669605331E86776C06D3 + 939189EA0E6453F31F0367D49AD55DF1F0246D32B713402F3125C04C45C8BD43 + 98188F89D15032405E72F8781B0E2E5A0BCEAE7C8E99784F97551FC627B70BDF + BEFCE2E3117E4AE031625809CB9EEBF8F0D7627A77BFE0D4D8D88855A9440022 + 1C27DB71FABF55E352ED373075032024CD24170000000049454E44AE426082} + PictureName = 'ShareFolder' + end + object gcMenuShareWebcam: TX2GraphicContainerItem + Picture.Data = { + 0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000001000 + 00001008060000001FF3FF61000002C14944415478DABD935D48935118C7FF9B + DB9CD38913155CB586D008C30F9A95A8217927A14157DE441FE88521A4828108 + 0A8992621745A80C477AB3A048D44A08A18589BA959AE0D4A09CBAE936F7E55E + 759B7BDFB91EDF20E82E283A70381CCE797EFFE739E7FF08F09743F04F00D5D5 + BA94C4C4E47A954AA171BB0F6452292B92CB25C24824088E63A32C1BE658F630 + B2BFBF175E5B5B5B0F0643AF8DC6E79F7F011A1B87DE3435555C0D8582181F37 + 637BFB3BEAEA6ED28918BBBB3EC4C589F8AB1C071C1C846136CFC52626DE0D8D + 8E0EDEE6011D1D2F772A2B0BD2392E0A936915878711C46231088502582C6FB1 + B4B44CC0079899998048C48132A1A8D42D9DAEEB240F686919F017179F4D6118 + 8ED4BD9048E22016FF9C16CB14525353A056E7C26AB5109C4166A692A0566F6F + EFC3341ED0DDFDC25759A9552C2CAC8061F6715C7B2C968868D405AD36076EB7 + 874A0990BA020A453A8145181B1BF1F7F575A7F280F6F621574D4D4586DDEE81 + D7CBC066B3D2EA446E6E16BABA9E906A0C39392AE4E79F874A758E32946078F8 + 95BBBFBF278307B4B50D6CD6D65E3FB5B9E982CFC7606BCB4EEA3EACAE2E2110 + 5042A3C9C6E4A40EA5A525042A444282140683C1A6D33D56F180E6E6A75F1B1A + 6E683636B649790F3B3B0E04832EACAF7F83D13887B4B44CC8E52C0A0B8B9097 + 7701F1F1F1D0EBF52B7A7D6F360FA8AFEFFAD4DA7AB7C06ADD86C7B34BC10C1C + 0E3BA4D2E35F311F7B014AE50994945C21F544242727D1BB3D9A32189E5DE601 + 55558D239D9DF7AE310C4BEA7EAA5100A7D3857098A1E010EDC5C8CA3A43CA32 + BACD61717131363030747F76F6430F0F282FBF73A9ACACE47D51915666B3B9C8 + 386421B11432593C418294CD163DAC2DE2743AE697972DC66834326A327D34FD + D60BE5E5B72EAAD5A7079392E41AB2AE9BCC6275B91CCB3E5FE08B40C0CE1F1D + F917A6A767427FD24C429A47FFAD1B7F00ED1B51200D4AE2740000000049454E + 44AE426082} + PictureName = 'ShareWebcam' + end + object gcMenuShareWebcamVideo: TX2GraphicContainerItem + Picture.Data = { + 0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000001000 + 00001008060000001FF3FF61000002EA4944415478DAA5935D48935118C7FFF3 + DDAB6BCEF9FDED44DC4CA15E8761412A1296A121285ED595DD7521298C125341 + E9622B584CE6BCF122454891AE9424432B3FC8A4FC203F32D1E9FCAA95D36DCD + B5BDAF7BB78E2B040BA2E8DC9CAFE7FC9EE7FCCFF90BF09F4DF0EB82CFE713E8 + F5FA149AA6198FC7C3884422262C2C8C118BC5A91CC7EDBBDDAE75ABD5BAC4B2 + 9C4EA5524D1E03747777574B2492A688888830D2432A952238580C9AA6C82E8F + 830316DBDB7632077A7B7B5FD7D737E41C017A7A7A8A939393FB188611DA6C36 + 2426268265DDB05A2D9899716373D30BA39187CD7608FA86ADCD06D7E0D0A0D8 + 0F50ABD585342D7CEA703828A55289E8E818242424203C5C82AE2E0789909183 + FB70BB59389D2E02F66274F4BA6361615CEA075455DD1C11894EE43FEC7C8C2B + C59791794A8EA2A26212ECC4F47436380EE430878D8D31D8ED6FC93A199BDEAC + 4FCD0CA4F801776A6B9D731F56C553CB1C3EED72A82C4FC2A5C2622814C99898 + 9061656519F3F3F7B1B7B785A8A818040444212DEDCCAC56AB52FA013535B7ED + E65D56FA688405EF0DC5D59CAF60329290937B0E7373720C0CA840511C76763E + FB01F1F1371014343B6B3034FE005456560E9D4C935FACD6AF03541CCAB35791 + 9A1082D34C3A9697F33035A5267A444128CC464848162C163BD1A97FB2B5557D + F667053525F0F17D2C1527E81B36212B6E1D79F917E0724988FAB9100804F078 + 78A2C5A1802EA2831B1919CFFB753A6DC9D133D6D5D5DD22719AF434B9D0E9E2 + 488981E4B942313C1C47EECCC3EBF591B9070E871B4AA58FC09E7536371B2A8E + 7DA4F6F6F677A5A5A59966B39964B1C164B2A0A34388C04090CC3C2223BD2828 + A0C978D16B327D2CD56A1F3C3906D0E974E3656565E7799EF7976DB57E415BDB + 26C46211C94A932A8CBEA5A5B5171415D8A8D1685EFDE605F2A1AE51146590C9 + 64110A8582F8C2EBBFF7E2E27B9FD1B8F6322040D8A4D1DC1BFBA39988418288 + 894A481515B1B1B185168BE51531D8DD969696D1BF72E3BFB6EF2C065120000A + A5C30000000049454E44AE426082} + PictureName = 'ShareWebcamVideo' + end end object glMenu: TX2GraphicList Container = gcMenu @@ -509,5 +495,10 @@ object frmMain: TfrmMain ImageIndex = 1 OnExecute = actTestExecute end + object actTest2: TAction + Caption = 'Group without items' + ImageIndex = 3 + OnExecute = actTest2Execute + end end end diff --git a/Test/MenuBar/MainForm.pas b/Test/MenuBar/MainForm.pas index bf558d1..db5ebac 100644 --- a/Test/MenuBar/MainForm.pas +++ b/Test/MenuBar/MainForm.pas @@ -11,8 +11,8 @@ uses StdCtrls, XPMan, - JvExMask, - JvSpin, +// JvExMask, +// JvSpin, PNGImage, X2CLGraphicList, X2CLMenuBar, @@ -28,7 +28,6 @@ type rbmusikCube: TRadioButton; rbSliding: TRadioButton; lblAnimationTime: TLabel; - seAnimationTime: TJvSpinEdit; Panel1: TPanel; Panel2: TPanel; rbNoAnimation: TRadioButton; @@ -53,6 +52,7 @@ type mbTest: TX2MenuBar; alMenu: TActionList; actTest: TAction; + actTest2: TAction; procedure mbTestSelectedChanging(Sender: TObject; Item, NewItem: TX2CustomMenuBarItem; var Allowed: Boolean); procedure mbTestSelectedChanged(Sender: TObject; @@ -73,6 +73,7 @@ type procedure AnimationClick(Sender: TObject); procedure seAnimationTimeChange(Sender: TObject); procedure actTestExecute(Sender: TObject); + procedure actTest2Execute(Sender: TObject); private procedure Event(const AMsg: String); end; @@ -81,7 +82,7 @@ implementation uses Dialogs, - X2UtHandCursor; + Windows; {$R *.dfm} @@ -164,6 +165,8 @@ begin chkAllowCollapseAll.Checked := mbTest.AllowCollapseAll; chkScrollbar.Checked := mbTest.Scrollbar; chkHideScrollbar.Checked := mbTest.HideScrollbar; + + rbUnameIT.Checked := True; end; procedure TfrmMain.mbTestCollapsed(Sender: TObject; Group: TX2MenuBarGroup); @@ -228,7 +231,12 @@ end; procedure TfrmMain.seAnimationTimeChange(Sender: TObject); begin - mbTest.AnimationTime := seAnimationTime.AsInteger; +// mbTest.AnimationTime := seAnimationTime.AsInteger; +end; + +procedure TfrmMain.actTest2Execute(Sender: TObject); +begin + Sleep(200); end; end. diff --git a/Test/MenuBar/MenuBarTest.cfg b/Test/MenuBar/MenuBarTest.cfg index 30e5130..f627b81 100644 --- a/Test/MenuBar/MenuBarTest.cfg +++ b/Test/MenuBar/MenuBarTest.cfg @@ -31,12 +31,12 @@ -M -$M16384,1048576 -K$00400000 --LE"C:\Documents and Settings\PsychoMark\My Documents\Borland Studio Projects\Bpl" --LN"C:\Documents and Settings\PsychoMark\My Documents\Borland Studio Projects\Bpl" --U"..\..\Source" --O"..\..\Source" --I"..\..\Source" --R"..\..\Source" +-LE"c:\program files\borland\delphi7\Projects\Bpl" +-LN"c:\program files\borland\delphi7\Projects\Bpl" +-U"P:\Algemeen\Indy10;P:\Algemeen\Indy10\Core;P:\Algemeen\Indy10\Protocols;P:\Algemeen\Indy10\SuperCore;P:\Algemeen\Indy10\System" +-O"P:\Algemeen\Indy10;P:\Algemeen\Indy10\Core;P:\Algemeen\Indy10\Protocols;P:\Algemeen\Indy10\SuperCore;P:\Algemeen\Indy10\System" +-I"P:\Algemeen\Indy10;P:\Algemeen\Indy10\Core;P:\Algemeen\Indy10\Protocols;P:\Algemeen\Indy10\SuperCore;P:\Algemeen\Indy10\System" +-R"P:\Algemeen\Indy10;P:\Algemeen\Indy10\Core;P:\Algemeen\Indy10\Protocols;P:\Algemeen\Indy10\SuperCore;P:\Algemeen\Indy10\System" -w-UNSAFE_TYPE -w-UNSAFE_CODE -w-UNSAFE_CAST diff --git a/Test/MenuBar/MenuBarTest.dpr b/Test/MenuBar/MenuBarTest.dpr index 51051f7..ed40526 100644 --- a/Test/MenuBar/MenuBarTest.dpr +++ b/Test/MenuBar/MenuBarTest.dpr @@ -4,7 +4,11 @@ uses Forms, MainForm in 'MainForm.pas' {frmMain}, X2CLMenuBarAnimators in '..\..\Source\X2CLMenuBarAnimators.pas', - X2CLGraphics in '..\..\Source\X2CLGraphics.pas'; + X2CLGraphics in '..\..\Source\X2CLGraphics.pas', + X2CLunaMenuBarPainter in '..\..\Source\X2CLunaMenuBarPainter.pas', + X2CLMenuBar in '..\..\Source\X2CLMenuBar.pas', + X2CLmusikCubeMenuBarPainter in '..\..\Source\X2CLmusikCubeMenuBarPainter.pas', + X2CLMenuBarActions in '..\..\Source\X2CLMenuBarActions.pas'; {$R *.res}