diff --git a/Lib/D2006/UnitSwitcherD2006.bpl b/Lib/D2006/UnitSwitcherD2006.bpl index 481fee7..1f15c10 100644 Binary files a/Lib/D2006/UnitSwitcherD2006.bpl and b/Lib/D2006/UnitSwitcherD2006.bpl differ diff --git a/Packages/D2006/UnitSwitcher.bdsproj b/Packages/D2006/UnitSwitcher.bdsproj index 6039fbf..4176c8d 100644 --- a/Packages/D2006/UnitSwitcher.bdsproj +++ b/Packages/D2006/UnitSwitcher.bdsproj @@ -165,8 +165,7 @@ 1.0.0.0 - - + UnitSwitcher diff --git a/Packages/D2006/UnitSwitcher.dpk b/Packages/D2006/UnitSwitcher.dpk index 6519545..1811dae 100644 --- a/Packages/D2006/UnitSwitcher.dpk +++ b/Packages/D2006/UnitSwitcher.dpk @@ -29,7 +29,11 @@ package UnitSwitcher; requires rtl, - designide; + designide, + vcl, + xmlrtl, + vclactnband, + vclx; contains UnSwClient in '..\..\Source\UnSwClient.pas', @@ -38,6 +42,14 @@ contains UnSwFilters in '..\..\Source\UnSwFilters.pas', UnSwConfiguration in '..\..\Source\UnSwConfiguration.pas' {frmUnSwConfiguration}, UnSwSettings in '..\..\Source\UnSwSettings.pas', - UnSwShortcuts in '..\..\Source\UnSwShortcuts.pas' {frmUnSwShortcuts}; + UnSwShortcuts in '..\..\Source\UnSwShortcuts.pas' {frmUnSwShortcuts}, + CmpSwClient in '..\..\Source\CmpSwClient.pas', + BaseSwClient in '..\..\Source\BaseSwClient.pas', + BaseSwDialog in '..\..\Source\BaseSwDialog.pas' {frmBaseSwDialog}, + BaseSwFilters in '..\..\Source\BaseSwFilters.pas', + BaseSwObjects in '..\..\Source\BaseSwObjects.pas', + UnSwReg in '..\..\Source\UnSwReg.pas', + CmpSwDialog in '..\..\Source\CmpSwDialog.pas' {frmCmpSwDialog}, + CmpSwObjects in '..\..\Source\CmpSwObjects.pas'; end. diff --git a/Resources/Component.ico b/Resources/Component.ico new file mode 100644 index 0000000..40209a7 Binary files /dev/null and b/Resources/Component.ico differ diff --git a/Resources/ReadOnly.ico b/Resources/ReadOnly.ico index 06809b3..6da04f8 100644 Binary files a/Resources/ReadOnly.ico and b/Resources/ReadOnly.ico differ diff --git a/Source/BaseSwDialog.dfm b/Source/BaseSwDialog.dfm index 274cf57..8fb3bc3 100644 --- a/Source/BaseSwDialog.dfm +++ b/Source/BaseSwDialog.dfm @@ -1,10 +1,10 @@ object frmBaseSwDialog: TfrmBaseSwDialog Left = 284 Top = 120 - Width = 320 - Height = 425 BorderIcons = [biSystemMenu] Caption = 'UnitSwitcher' + ClientHeight = 398 + ClientWidth = 312 Color = clBtnFace Constraints.MinHeight = 240 Constraints.MinWidth = 290 @@ -27,6 +27,7 @@ object frmBaseSwDialog: TfrmBaseSwDialog OldCreateOrder = False Position = poScreenCenter OnResize = FormResize + OnShow = FormShow PixelsPerInch = 96 TextHeight = 13 object sbStatus: TStatusBar @@ -83,7 +84,7 @@ object frmBaseSwDialog: TfrmBaseSwDialog Align = alClient ItemHeight = 20 MultiSelect = True - PopupMenu = pmnUnits + PopupMenu = pmnItems TabOrder = 1 OnClick = lstItemsClick OnData = lstItemsData @@ -151,409 +152,6 @@ object frmBaseSwDialog: TfrmBaseSwDialog object ilsTypes: TImageList Left = 28 Top = 228 - Bitmap = { - 494C010106000900040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 - 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 - 0000C0C0C000C0C0C000C0C0C000C0C0C0000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000FFFFFF00808080008080 - 8000808080008080800080808000808080008080800080808000808080008080 - 8000808080000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF000000800000008000C0C0C0000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00C0C0 - C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0 - C000808080000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF000000FF0000008000C0C0C0000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000FFFFFF00C0C0C000FFFF - FF00C0C0C000FFFFFF00C0C0C000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF00FFFFFF00FFFFFF00C0C0C0000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00C0C0 - C000FFFFFF00C0C0C000FFFFFF0000000000FFFFFF0080808000808080008080 - 8000808080008080800080808000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF000000800000008000C0C0C0000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000FFFFFF00C0C0C000FFFF - FF00C0C0C000FFFFFF00C0C0C00000000000FFFFFF00FFFFFF00C0C0C000FFFF - FF00C0C0C000FFFFFF0080808000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF000000FF0000008000C0C0C0000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00C0C0 - C000FFFFFF00C0C0C000FFFFFF0000000000FFFFFF00C0C0C000FFFFFF00C0C0 - C000FFFFFF00C0C0C00080808000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF000000FF0000008000C0C0C0000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000FFFFFF00C0C0C000FFFF - FF00C0C0C000FFFFFF00C0C0C00000000000FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF000000FF0000008000C0C0C0000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00C0C0 - C000FFFFFF00C0C0C000FFFFFF00000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF000000FF0000008000C0C0C0000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000FFFFFF00C0C0C000FFFF - FF00C0C0C000FFFFFF00C0C0C00000000000FF000000FF000000FF000000FF00 - 0000FF00000000000000C0C0C000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF000000FF0000008000C0C0C0000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00C0C0 - C000FFFFFF00C0C0C000FFFFFF00000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF00FFFFFF00FFFFFF00C0C0C0000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000FFFFFF00C0C0C000FFFF - FF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFF - FF00808080000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000FF000000FF000000FF00 - 0000FF000000FF000000FF00000000000000C0C0C00000000000C0C0C0000000 - 0000C0C0C0000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000008000 - 0000000000000000000080808000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF008080800080808000808080008080800080808000808080008080 - 8000808080008080800080808000000000000000000000000000000000000000 - 0000FFFFFF008080800080808000808080008080800080808000808080008080 - 8000808080008080800080808000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000080000000800000008000 - 0000800000000000000080808000C0C0C000C0C0C000C0C0C000C0C0C0000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF00FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFF - FF00C0C0C000FFFFFF0080808000000000000000000000000000000000000000 - 0000FFFFFF00FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFF - FF00C0C0C000FFFFFF0080808000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000080000000000000008000 - 0000000000000000000080808000808080008080800000000000808080008080 - 8000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0 - C000FFFFFF00C0C0C00080808000000000000000000000000000000000000000 - 0000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0 - C000FFFFFF00C0C0C000808080000000000000000000FFFFFF00808080008080 - 8000808080008080800080808000808080008080800080808000808080008080 - 8000808080008080800080808000000000000000000080000000000000000000 - 0000000000000000000000000000000000008080800000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF00FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFF - FF00C0C0C000FFFFFF0080808000000000000000000000000000000000000000 - 0000FFFFFF00FFFFFF0000000000000000000000000000000000000000000000 - 000000000000FFFFFF00808080000000000000000000FFFFFF00FFFFFF00C0C0 - C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0 - C000FFFFFF00C0C0C00080808000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0 - C000FFFFFF00C0C0C00080808000000000000000000000000000000000000000 - 0000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0 - C000FFFFFF00C0C0C000808080000000000000000000FFFFFF00C0C0C000FFFF - FF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFF - FF00C0C0C000FFFFFF0080808000000000008080800000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF00FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFF - FF00C0C0C000FFFFFF0080808000000000000000000000000000000000000000 - 0000FFFFFF000000FF000000FF000000FF000000FF000000FF000000FF000000 - FF000000FF000000FF00808080000000000000000000FFFFFF00FFFFFF00C0C0 - C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0 - C000FFFFFF00C0C0C00080808000000000008080800080808000000000000000 - 000000000000FFFFFF0080808000808080008080800080808000808080008080 - 8000808080008080800080808000000000000000000000000000000000000000 - 0000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0 - C000FFFFFF00C0C0C00080808000000000000000000080000000000000000000 - 0000FFFFFF000000FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF000000FF00808080000000000000000000FFFFFF00C0C0C000FFFF - FF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFF - FF00C0C0C000FFFFFF0080808000000000000000000000000000000000000000 - 000000000000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFF - FF00C0C0C000FFFFFF0080808000000000000000000000000000000000000000 - 0000FFFFFF00FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFF - FF00C0C0C000FFFFFF0080808000000000000000000000000000000000000000 - 0000FFFFFF000000FF000000FF000000FF000000FF000000FF000000FF000000 - FF000000FF000000FF00808080000000000000000000FFFFFF00FFFFFF00C0C0 - C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0 - C000FFFFFF00C0C0C00080808000000000000000000000000000000000000000 - 000000000000FFFFFF00FFFFFF00C0C0C0000000FF000000FF000000FF00C0C0 - C000FFFFFF00C0C0C00080808000000000000000000000000000000000000000 - 0000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0 - C000FFFFFF00C0C0C00080808000000000000000000000000000000000000000 - 0000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0 - C000FFFFFF00C0C0C000808080000000000000000000FFFFFF00C0C0C000FFFF - FF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFF - FF00C0C0C000FFFFFF0080808000000000000000000000000000000000000000 - 000000000000FFFFFF00C0C0C000FFFFFF000000FF000000FF00C0C0C000FFFF - FF00C0C0C000FFFFFF0080808000000000000000000000000000000000000000 - 0000FFFFFF00FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFF - FF00C0C0C000FFFFFF0080808000000000000000000000000000000000000000 - 0000FFFFFF00FFFFFF0000000000000000000000000000000000000000000000 - 0000C0C0C000FFFFFF00808080000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 - 000000000000FFFFFF00FFFFFF00C0C0C0000000FF00C0C0C0000000FF000000 - FF00FFFFFF00C0C0C00080808000000000000000000000000000000000000000 - 0000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0 - C000FFFFFF00C0C0C00080808000000000000000000000000000000000000000 - 0000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0 - C000FFFFFF008080800080808000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFF - FF00C0C0C000FFFFFF0080808000000000000000000000000000000000000000 - 0000FFFFFF00FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFF - FF00000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF00FFFFFF0000000000000000000000000000000000C0C0C000FFFF - FF000000000000000000000000000000000000000000FF000000FF000000FF00 - 0000FF000000FF000000FF000000FF000000FF00000000000000C0C0C0000000 - 0000C0C0C00000000000C0C0C000000000000000000000000000000000000000 - 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 - 0000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0 - C00000000000FFFFFF0000000000000000000000000000000000000000000000 - 0000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0 - C00000000000FFFFFF0000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000FF000000FF000000FF000000FF00000000000000C0C0C0000000 - 0000C0C0C00000000000C0C0C000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000424D3E000000000000003E000000 - 2800000040000000300000000100010000000000800100000000000000000000 - 000000000000000000000000FFFFFF0000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000003FFF0000000000003FFF000000000 - 0003FFF0000000000000FFF0000000000000FFF0000000000000FFF000000000 - 0000FFF0000000000000FFF0000000000000FFF0000000000000FFF000000000 - 0000FFF0000000000003FFFF000000000003FFFF000000000003FFFF00000000 - 0003FFFF000000000003FFFF00000000E000E000FFFFEC0FE000E000FFFF840F - E000E0000000AC0FE000E0000000BF3FE000E0000000FFFFE000600000001000 - E000200000001000E00000000000B000E00020000000F000E00060000000F000 - E000E0000000F000E000E0000000F000E000E0000000F000E001E0010000F000 - E003E003FFFFF000E007E007FFFFF00000000000000000000000000000000000 - 000000000000} end object alMain: TActionList Left = 84 @@ -579,58 +177,14 @@ object frmBaseSwDialog: TfrmBaseSwDialog OnExecute = actMRUNextExecute end end - object pmnUnits: TPopupMenu + object pmnItems: TPopupMenu Left = 140 Top = 228 - object pmnUnitsOpen: TMenuItem - Caption = '&Open' - ShortCut = 13 - end - object pmnUnitsOpenDFM: TMenuItem - Caption = 'Open D&FM' - ShortCut = 8205 - end - object pmnUnitsSep1: TMenuItem - Caption = '-' - end - object pmnUnitsSelectAll: TMenuItem + object pmnItemsSelectAll: TMenuItem Action = actSelectAll end - object pmnUnitsSelectInvert: TMenuItem + object pmnItemsSelectInvert: TMenuItem Action = actSelectInvert end - object pmnUnitsSep2: TMenuItem - Caption = '-' - end - object pmnUnitsSortByName: TMenuItem - Caption = 'Sort by &Name' - ShortCut = 49230 - end - object pmnUnitsSortByType: TMenuItem - Caption = 'Sort by &Type' - ShortCut = 49236 - end - object pmnUnitsSep3: TMenuItem - Caption = '-' - end - object pmnUnitsReadOnly: TMenuItem - Caption = '&Read only' - ShortCut = 49234 - end - object pmnUnitsSep4: TMenuItem - Caption = '-' - end - object pmnUnitsOpenFolder: TMenuItem - Caption = 'Open containing &folder' - ShortCut = 49222 - end - object pmnUnitsOpenProperties: TMenuItem - Caption = '.PAS &Properties' - ShortCut = 49165 - end - object pmnUnitsOpenDFMProperties: TMenuItem - Caption = '.&DFM Properties' - ShortCut = 24589 - end end end diff --git a/Source/BaseSwDialog.pas b/Source/BaseSwDialog.pas index 98dacfa..8cd9eef 100644 --- a/Source/BaseSwDialog.pas +++ b/Source/BaseSwDialog.pas @@ -33,7 +33,7 @@ type FImageIndex: Integer; FOverlayIndex: Integer; protected - procedure VisitItem(const AItem: TBaseSwItem); + procedure VisitItem(const AItem: TBaseSwItem); virtual; public property Color: TColor read FColor write FColor; property ImageIndex: Integer read FImageIndex write FImageIndex; @@ -53,21 +53,9 @@ type ilsTypes: TImageList; lblSubFilters: TLabel; lstItems: TListBox; - pmnUnits: TPopupMenu; - pmnUnitsOpen: TMenuItem; - pmnUnitsOpenDFM: TMenuItem; - pmnUnitsOpenDFMProperties: TMenuItem; - pmnUnitsOpenFolder: TMenuItem; - pmnUnitsOpenProperties: TMenuItem; - pmnUnitsReadOnly: TMenuItem; - pmnUnitsSelectAll: TMenuItem; - pmnUnitsSelectInvert: TMenuItem; - pmnUnitsSep1: TMenuItem; - pmnUnitsSep2: TMenuItem; - pmnUnitsSep3: TMenuItem; - pmnUnitsSep4: TMenuItem; - pmnUnitsSortByName: TMenuItem; - pmnUnitsSortByType: TMenuItem; + pmnItems: TPopupMenu; + pmnItemsSelectAll: TMenuItem; + pmnItemsSelectInvert: TMenuItem; pnlButtons: TPanel; pnlMain: TPanel; pnlSearch: TPanel; @@ -82,28 +70,23 @@ type procedure cmbSearchKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure cmbSearchKeyPress(Sender: TObject; var Key: Char); procedure FormResize(Sender: TObject); - procedure FormShow(Sender: TObject); - procedure lstItemsClick(Sender: TObject); procedure lstItemsData(Control: TWinControl; Index: Integer; var Data: string); procedure lstItemsDblClick(Sender: TObject); procedure lstItemsDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); procedure lstItemsMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure lstItemsClick(Sender: TObject); procedure btnOKClick(Sender: TObject); + procedure FormShow(Sender: TObject); private - FLoading: Boolean; FItemList: TBaseSwItemList; FActiveItem: TBaseSwItem; - FFormsOnly: Boolean; FMRUList: TStrings; FMRUIndex: Integer; FSubFilters: TStringList; - FOpenDFM: Boolean; -// FTypeFilteredList: TUnSwUnitList; FSubFilteredList: TBaseSwItemList; FInputFilteredList: TBaseSwItemList; -// FTypeFilter: TUnSwUnitTypeFilter; FSubFilter: TBaseSwItemSimpleFilter; FInputFilter: TBaseSwItemSimpleFilter; FLastFilter: String; @@ -111,9 +94,19 @@ type FStyleVisitor: TBaseSwStyleVisitor; protected function InternalExecute(): TBaseSwItemList; virtual; -// procedure UpdateTypeFilter(); procedure UpdateList(); virtual; + function CreateItemList(): TBaseSwItemList; virtual; + function CreateInputFilter(): TBaseSwItemSimpleFilter; virtual; + function CreateStyleVisitor(): TBaseSwStyleVisitor; virtual; + + function AllowEmptyResult(): Boolean; virtual; abstract; + function ColorsEnabled(): Boolean; virtual; + + function GetBaseItemList(): TBaseSwItemList; virtual; + function GetItemDisplayName(const AItem: TBaseSwItem): String; virtual; + procedure UpdateItemActions(); virtual; + function GetActiveItems(): TBaseSwItemList; procedure SelectMRUItem(); @@ -123,8 +116,10 @@ type procedure LoadSettings(); virtual; procedure SaveSettings(); virtual; - - procedure UpdateUnitActions(); + protected + property ActiveItem: TBaseSwItem read FActiveItem write FActiveItem; + property ItemList: TBaseSwItemList read FItemList write FItemList; + property MRUList: TStrings read FMRUList; public class function Execute(const AItems: TBaseSwItemList; const AActive: TBaseSwItem = nil): TBaseSwItemList; end; @@ -132,7 +127,8 @@ type implementation uses - SysUtils; + Messages, + SysUtils, Dialogs; const @@ -157,8 +153,8 @@ class function TfrmBaseSwDialog.Execute(const AItems: TBaseSwItemList; begin with Self.Create(nil) do try - FItemList := AItems; - FActiveItem := AActive; + ItemList := AItems; + ActiveItem := AActive; Result := InternalExecute(); finally @@ -173,6 +169,13 @@ begin end; +procedure TfrmBaseSwDialog.FormShow(Sender: TObject); +begin + // Setting ListBox.Selected[x] won't work before OnShow... + UpdateSubFilters(); +end; + + function TfrmBaseSwDialog.InternalExecute(): TBaseSwItemList; type TBaseSwItemSimpleFilterClass = class of TBaseSwItemSimpleFilter; @@ -185,33 +188,37 @@ var begin Result := nil; FSubFilters := TStringList.Create(); -// FTypeFilteredList := TUnSwUnitList.Create(); - FSubFilteredList := TBaseSwItemList.Create(); - FInputFilteredList := TBaseSwItemList.Create(); -// FTypeFilter := TUnSwUnitTypeFilter.Create; + FSubFilteredList := CreateItemList(); + FInputFilteredList := CreateItemList(); + FSubFilter := CreateInputFilter(); + FInputFilter := CreateInputFilter(); + + FMRUList := TStringList.Create(); try - FStyleVisitor := TUnSwStyleVisitor.Create(); + LoadSettings(); + + FStyleVisitor := CreateStyleVisitor(); try if Self.ShowModal() = mrOk then begin if Length(Trim(cmbSearch.Text)) > 0 then begin - iIndex := FMRUList.IndexOf(cmbSearch.Text); + iIndex := MRUList.IndexOf(cmbSearch.Text); if iIndex > -1 then - FMRUList.Delete(iIndex); + MRUList.Delete(iIndex); - while FMRUList.Count >= 10 do - FMRUList.Delete(Pred(FMRUList.Count)); + while MRUList.Count >= 10 do + MRUList.Delete(Pred(MRUList.Count)); mruText := cmbSearch.Text; for subFilterIndex := Pred(FSubFilters.Count) downto 0 do mruText := FSubFilters[subFilterIndex] + SubFilterSeparator; - FMRUList.Insert(0, mruText); + MRUList.Insert(0, mruText); end; - Result := GetActiveUnits(); + Result := GetActiveItems(); end; SaveSettings(); @@ -219,96 +226,50 @@ begin FreeAndNil(FStyleVisitor); end; finally + FreeAndNil(FMRUList); FreeAndNil(FInputFilter); FreeAndNil(FSubFilter); -// FreeAndNil(FTypeFilter); FreeAndNil(FSubFilteredList); FreeAndNil(FInputFilteredList); -// FreeAndNil(FTypeFilteredList); FreeAndNil(FSubFilters); end; end; -procedure TfrmBaseSwDialog.UpdateUnitActions(); -var - bDFM: Boolean; - bUnits: Boolean; - iUnit: Integer; - pUnits: TUnSwUnitList; - pVisitor: TUnSwReadOnlyVisitor; - sStatus: String; - +procedure TfrmBaseSwDialog.LoadSettings(); begin - { Read-only status } - pUnits := GetActiveUnits(); - if Assigned(pUnits) then - try - pVisitor := TUnSwReadOnlyVisitor.Create(); - try - pUnits.AcceptVisitor(pVisitor); - actReadOnly.Checked := (pVisitor.ReadOnlyCount > 0); + cmbSearch.Items.Assign(MRUList); +end; - sStatus := ''; - if pVisitor.ReadOnlyCount > 0 then - if pVisitor.ReadOnlyCount = 1 then - sStatus := '1 read-only unit selected' - else - sStatus := Format('%d read-only units selected', - [pVisitor.ReadOnlyCount]); - sbStatus.Panels[0].Text := sStatus; - finally - FreeAndNil(pVisitor); - end; - finally - FreeAndNil(pUnits); - end; +procedure TfrmBaseSwDialog.SaveSettings(); +begin +end; - { Properties } - bDFM := False; - bUnits := False; - pUnits := GetActiveUnits(); - if Assigned(pUnits) then - try - bUnits := (pUnits.Count > 0); - - for iUnit := 0 to Pred(pUnits.Count) do - if (pUnits[iUnit] is TUnSwModuleUnit) and - (TUnSwModuleUnit(pUnits[iUnit]).UnitType in [swutForm, swutDataModule]) then - begin - bDFM := True; - break; - end; - finally - FreeAndNil(pUnits); - end; - - actOpenFolder.Enabled := bUnits; - actOpenProperties.Enabled := bUnits; - actOpenDFMProperties.Enabled := bDFM; +procedure TfrmBaseSwDialog.UpdateItemActions(); +begin end; procedure TfrmBaseSwDialog.UpdateList(); var - activeUnit: TUnSwUnit; - activeUnits: TUnSwUnitList; + activeUnit: TBaseSwItem; + activeUnits: TBaseSwItemList; itemIndex: Integer; listIndex: Integer; - filteredList: TUnSwUnitList; + filteredList: TBaseSwItemList; selStart: Integer; begin - activeUnits := GetActiveUnits(); + activeUnits := GetActiveItems(); - filteredList := TUnSwUnitList.Create(); + filteredList := CreateItemList(); try filteredList.Clone(FSubFilteredList); FInputFilter.FilterList(filteredList); - if (filteredList.Count = 0) and (not Settings.Filter.AllowEmptyResult) then + if (filteredList.Count = 0) and (not AllowEmptyResult) then begin { Only enforce AllowEmptyResult when adding to the filter } if Length(FInputFilter.Filter) > Length(FLastFilter) then @@ -355,80 +316,6 @@ begin end; -function SortByName(Item1, Item2: Pointer): Integer; -begin - Result := CompareText(TUnSwUnit(Item1).Name, TUnSwUnit(Item2).Name) -end; - - -function SortByType(Item1, Item2: Pointer): Integer; -const - Above = -1; - Equal = 0; - Below = 1; - - function SortByModuleType(Item1, Item2: TUnSwUnitType): Integer; - begin - Result := Equal; - if Item1 <> Item2 then - case Item1 of - swutForm: - case Item2 of - swutDataModule: Result := Below; - swutUnit: Result := Above; - end; - swutDataModule: Result := Above; - swutUnit: Result := Below; - end; - end; - -var - pItem1: TUnSwUnit; - pItem2: TUnSwUnit; - -begin - // #ToDo3 Refactor SortByType - - // The following order is assumed: - // Project source, DataModules, Forms, Units - Result := Equal; - pItem1 := TUnSwUnit(Item1); - pItem2 := TUnSwUnit(Item2); - - if pItem1.ClassType <> pItem2.ClassType then - begin - if pItem1 is TUnSwProjectUnit then - Result := Above - else if pItem2 is TUnSwProjectUnit then - Result := Below; - end else if pItem1 is TUnSwModuleUnit then - Result := SortByModuleType(TUnSwModuleUnit(pItem1).UnitType, - TUnSwModuleUnit(pItem2).UnitType); - - if Result = Equal then - Result := SortByName(Item1, Item2); -end; - - -procedure TfrmBaseSwDialog.UpdateTypeFilter(); -begin - FTypeFilter.IncludeUnits := ((not FFormsOnly) and chkUnits.Checked); - FTypeFilter.IncludeProjectSource := ((not FFormsOnly) and chkProjectSource.Checked); - FTypeFilter.IncludeForms := chkForms.Checked; - FTypeFilter.IncludeDataModules := chkDataModules.Checked; - - FTypeFilteredList.Clone(FUnitList); - FTypeFilter.FilterList(FTypeFilteredList); - - if actSortByName.Checked then - FTypeFilteredList.Sort(SortByName) - else - FTypeFilteredList.Sort(SortByType); - - UpdateSubFilters(); -end; - - procedure TfrmBaseSwDialog.PopFilter(); begin if FSubFilters.Count > 0 then @@ -445,7 +332,7 @@ var sFilters: String; begin - FSubFilteredList.Clone(FTypeFilteredList); + FSubFilteredList.Clone(GetBaseItemList()); if FSubFilters.Count > 0 then begin @@ -470,7 +357,7 @@ var sFilter: String; begin - sFilter := Trim(AFilter); + sFilter := Trim(AFilter); Result := (Length(sFilter) > 0) and (FSubFilters.IndexOf(AFilter) = -1); if Result then begin @@ -480,22 +367,22 @@ begin end; -function TfrmBaseSwDialog.GetActiveUnits(): TUnSwUnitList; +function TfrmBaseSwDialog.GetActiveItems(): TBaseSwItemList; var itemIndex: Integer; begin Result := nil; - if Assigned(FActiveUnit) then + if Assigned(ActiveItem) then begin - Result := TUnSwUnitList.Create(); + Result := CreateItemList(); Result.OwnsObjects := False; - Result.Add(FActiveUnit); - FActiveUnit := nil; + Result.Add(ActiveItem); + ActiveItem := nil; end else if lstItems.SelCount > 0 then begin - Result := TUnSwUnitList.Create(); + Result := CreateItemList(); Result.OwnsObjects := False; for itemIndex := 0 to Pred(lstItems.Items.Count) do @@ -505,63 +392,39 @@ begin end; -procedure TfrmBaseSwDialog.LoadSettings(); -var - dialogSettings: TUnSwDialogSettings; - +function TfrmBaseSwDialog.GetBaseItemList(): TBaseSwItemList; begin - if FFormsOnly then - dialogSettings := Settings.FormsDialog - else - dialogSettings := Settings.UnitsDialog; - - FLoading := True; - try - chkDataModules.Checked := dialogSettings.IncludeDataModules; - chkForms.Checked := dialogSettings.IncludeForms; - chkUnits.Checked := dialogSettings.IncludeUnits; - chkProjectSource.Checked := dialogSettings.IncludeProjectSource; - - case dialogSettings.Sort of - dsName: actSortByName.Checked := True; - dsType: actSortByType.Checked := True; - end; - - FMRUList := dialogSettings.MRUList; - cmbSearch.Items.Assign(FMRUList); - - Self.ClientWidth := dialogSettings.Width; - Self.ClientHeight := dialogSettings.Height; - finally - FLoading := False; - end; + Result := ItemList; end; -procedure TfrmBaseSwDialog.SaveSettings(); -var - dialogSettings: TUnSwDialogSettings; - +function TfrmBaseSwDialog.GetItemDisplayName(const AItem: TBaseSwItem): String; begin - if FFormsOnly then - dialogSettings := Settings.FormsDialog - else - dialogSettings := Settings.UnitsDialog; + Result := AItem.Name; +end; - dialogSettings.IncludeDataModules := chkDataModules.Checked; - dialogSettings.IncludeForms := chkForms.Checked; - dialogSettings.IncludeUnits := chkUnits.Checked; - dialogSettings.IncludeProjectSource := chkProjectSource.Checked; - if actSortByName.Checked then - dialogSettings.Sort := dsName - else - dialogSettings.Sort := dsType; +function TfrmBaseSwDialog.ColorsEnabled(): Boolean; +begin + Result := False; +end; - dialogSettings.Width := Self.ClientWidth; - dialogSettings.Height := Self.ClientHeight; - Settings.Save(); +function TfrmBaseSwDialog.CreateItemList(): TBaseSwItemList; +begin + Result := TBaseSwItemList.Create(); +end; + + +function TfrmBaseSwDialog.CreateInputFilter(): TBaseSwItemSimpleFilter; +begin + Result := TBaseSwItemSimpleNameFilter.Create(); +end; + + +function TfrmBaseSwDialog.CreateStyleVisitor(): TBaseSwStyleVisitor; +begin + Result := nil; end; @@ -581,19 +444,14 @@ begin end; -procedure TfrmBaseSwDialog.SortExecute(Sender: TObject); +procedure TfrmBaseSwDialog.btnOKClick(Sender: TObject); begin - (Sender as TAction).Checked := True; - UpdateTypeFilter(); + ModalResult := mrOk; end; procedure TfrmBaseSwDialog.SelectMRUItem(); -var - mruText: String; - begin - mruText := FMRUList[FMRUIndex]; cmbSearch.ItemIndex := FMRUIndex; ActiveControl := cmbSearch; cmbSearch.SelectAll(); @@ -605,7 +463,7 @@ end; procedure TfrmBaseSwDialog.actMRUNextExecute(Sender: TObject); begin - if FMRUIndex < Pred(FMRUList.Count) then + if FMRUIndex < Pred(MRUList.Count) then Inc(FMRUIndex); SelectMRUItem(); @@ -621,58 +479,6 @@ begin end; -procedure TfrmBaseSwDialog.actOpenFolderExecute(Sender: TObject); -var - pUnits: TUnSwUnitList; - -begin - pUnits := GetActiveUnits(); - if Assigned(pUnits) then - try - pUnits.AcceptVisitor(TUnSwOpenFolderVisitor.Create()); - finally - FreeAndNil(pUnits); - end; -end; - - -procedure TfrmBaseSwDialog.actOpenPropertiesExecute(Sender: TObject); -var - pUnits: TUnSwUnitList; - -begin - pUnits := GetActiveUnits(); - if Assigned(pUnits) then - try - pUnits.AcceptVisitor(TUnSwOpenPropertiesVisitor.Create()); - finally - FreeAndNil(pUnits); - end; -end; - - -procedure TfrmBaseSwDialog.actOpenDFMPropertiesExecute(Sender: TObject); -var - pUnits: TUnSwUnitList; - -begin - pUnits := GetActiveUnits(); - if Assigned(pUnits) then - try - pUnits.AcceptVisitor(TUnSwOpenDFMPropertiesVisitor.Create()); - finally - FreeAndNil(pUnits); - end; -end; - - -procedure TfrmBaseSwDialog.btnConfigurationClick(Sender: TObject); -begin - if TfrmUnSwConfiguration.Execute() then - lstItems.Invalidate(); -end; - - procedure TfrmBaseSwDialog.cmbSearchChange(Sender: TObject); begin if cmbSearch.Text <> FInputFilter.Filter then @@ -721,13 +527,6 @@ begin end; -procedure TfrmBaseSwDialog.TypeFilterChange(Sender: TObject); -begin - if not FLoading then - UpdateTypeFilter(); -end; - - procedure TfrmBaseSwDialog.lstItemsDblClick(Sender: TObject); begin btnOK.Click(); @@ -736,7 +535,7 @@ end; procedure TfrmBaseSwDialog.lstItemsClick(Sender: TObject); begin - UpdateUnitActions(); + UpdateItemActions(); end; @@ -750,20 +549,18 @@ end; procedure TfrmBaseSwDialog.lstItemsDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); var - currentUnit: TUnSwUnit; + currentItem: TBaseSwItem; textRect: TRect; text: String; begin with TListBox(Control) do begin - currentUnit := FInputFilteredList[Index]; - currentUnit.AcceptVisitor(FStyleVisitor); - - if FFormsOnly and (currentUnit is TUnSwModuleUnit) then - text := TUnSwModuleUnit(currentUnit).FormName - else - text := currentUnit.Name; + currentItem := FInputFilteredList[Index]; + if Assigned(FStyleVisitor) then + currentItem.AcceptVisitor(FStyleVisitor); + + text := GetItemDisplayName(currentItem); if odSelected in State then begin @@ -772,7 +569,8 @@ begin end else begin Canvas.Brush.Color := clWindow; - if Settings.Colors.Enabled then + + if Assigned(FStyleVisitor) and ColorsEnabled() then Canvas.Font.Color := FStyleVisitor.Color else Canvas.Font.Color := clWindowText; @@ -781,10 +579,14 @@ begin textRect := Rect; InflateRect(textRect, -2, -2); - ilsTypes.Draw(Canvas, textRect.Left, textRect.Top, FStyleVisitor.ImageIndex); - if FStyleVisitor.OverlayIndex > -1 then - ilsTypes.Draw(Canvas, textRect.Left, textRect.Top, FStyleVisitor.OverlayIndex); + if Assigned(FStyleVisitor) then + begin + ilsTypes.Draw(Canvas, textRect.Left, textRect.Top, FStyleVisitor.ImageIndex); + + if FStyleVisitor.OverlayIndex > -1 then + ilsTypes.Draw(Canvas, textRect.Left, textRect.Top, FStyleVisitor.OverlayIndex); + end; Inc(textRect.Left, ilsTypes.Width + 4); DrawText(Canvas.Handle, PChar(text), Length(text), textRect, DT_SINGLELINE or @@ -807,54 +609,9 @@ begin begin lstItems.ClearSelection; lstItems.Selected[itemIndex] := True; - UpdateUnitActions(); + UpdateItemActions(); end; end; end; - -procedure TfrmBaseSwDialog.actReadOnlyExecute(Sender: TObject); -var - pUnits: TUnSwUnitList; - pVisitor: TUnSwSetReadOnlyVisitor; - -begin - pUnits := GetActiveUnits(); - if Assigned(pUnits) then - try - pVisitor := TUnSwSetReadOnlyVisitor.Create(); - try - pVisitor.ReadOnlyFlag := not actReadOnly.Checked; - pUnits.AcceptVisitor(pVisitor); - finally - FreeAndNil(pVisitor); - end; - finally - FreeAndNil(pUnits); - - lstItems.Invalidate(); - UpdateUnitActions(); - end; -end; - - -procedure TfrmBaseSwDialog.actOpenExecute(Sender: TObject); -begin - FOpenDFM := False; - ModalResult := mrOk; -end; - - -procedure TfrmBaseSwDialog.actOpenDFMExecute(Sender: TObject); -begin - FOpenDFM := True; - ModalResult := mrOk; -end; - -procedure TfrmBaseSwDialog.btnOKClick(Sender: TObject); -begin - FOpenDFM := ((GetKeyState(VK_SHIFT) and 128) <> 0); - ModalResult := mrOk; -end; - end. diff --git a/Source/BaseSwFilters.pas b/Source/BaseSwFilters.pas index c12a58c..ca9529a 100644 --- a/Source/BaseSwFilters.pas +++ b/Source/BaseSwFilters.pas @@ -18,7 +18,7 @@ type FList: TBaseSwItemList; protected // IBaseSwVisitor - procedure VisitItem(AItem: TBaseSwItem); virtual; + procedure VisitItem(const AItem: TBaseSwItem); virtual; procedure FilterItem(const AItem: TBaseSwItem); virtual; public @@ -38,7 +38,7 @@ type TBaseSwItemSimpleNameFilter = class(TBaseSwItemSimpleFilter) protected - procedure VisitItem(AItem: TBaseSwItem); override; + procedure VisitItem(const AItem: TBaseSwItem); override; end; @@ -65,7 +65,7 @@ begin end; -procedure TBaseSwItemFilter.VisitItem(AItem: TBaseSwItem); +procedure TBaseSwItemFilter.VisitItem(const AItem: TBaseSwItem); begin end; @@ -78,7 +78,7 @@ end; { TBaseSwItemSimpleNameFilter } -procedure TBaseSwItemSimpleNameFilter.VisitItem(AItem: TBaseSwItem); +procedure TBaseSwItemSimpleNameFilter.VisitItem(const AItem: TBaseSwItem); begin if (Length(Filter) > 0) and (AnsiPos(Filter, LowerCase(AItem.Name)) = 0) then diff --git a/Source/CmpSwClient.pas b/Source/CmpSwClient.pas index 744cec4..b86506d 100644 --- a/Source/CmpSwClient.pas +++ b/Source/CmpSwClient.pas @@ -6,6 +6,9 @@ } unit CmpSwClient; +// #ToDo2 (MvR) 9-12-2007: Ctrl activates the designer guidelines in BDS 2006 +// and up, which get drawn over our dialog. messy. + interface uses ActnList, @@ -16,26 +19,24 @@ uses BaseSwClient; - + type TComponentSwitcherHook = class(TBaseSwitcherHook) protected function ActiveModule(): IOTAModule; function ActiveEditor(): IOTAEditor; -// function ActiveFileName(): String; -// {$IFDEF DELPHI7ORLOWER} -// function ActiveGroup(): IOTAProjectGroup; -// {$ENDIF} -// function ActiveProject(): IOTAProject; - - procedure NewExecute(Sender: TObject); virtual; + procedure NewExecute(Sender: TObject); public constructor Create(); end; implementation +uses + BaseSwObjects, + CmpSwDialog, + CmpSwObjects, Windows; { TComponentSwitcherHook} @@ -52,128 +53,6 @@ begin end; -(* -function TUnitSwitcherHook.ActiveFileName(): String; -var - module: IOTAModule; - -begin - Result := ''; - module := (BorlandIDEServices as IOTAModuleServices).CurrentModule; - if Assigned(module) then - begin - if Assigned(module.CurrentEditor) then - Result := module.FileName; - end; -end; - -{$IFDEF DELPHI7ORLOWER} -function TUnitSwitcherHook.ActiveGroup(): IOTAProjectGroup; -var - module: IOTAModule; - moduleServices: IOTAModuleServices; - moduleIndex: Integer; - -begin - Result := nil; - moduleServices := (BorlandIDEServices as IOTAModuleServices); - for moduleIndex := 0 to Pred(moduleServices.ModuleCount) do - begin - module := moduleServices.Modules[moduleIndex]; - if Supports(module, IOTAProjectGroup, Result) then - break; - end; -end; -{$ENDIF} - -function TUnitSwitcherHook.ActiveProject(): IOTAProject; -{$IFDEF DELPHI7ORLOWER} -var - projectGroup: IOTAProjectGroup; - module: IOTAModule; - moduleServices: IOTAModuleServices; - moduleIndex: Integer; -{$ENDIF} - -begin - {$IFDEF DELPHI7ORLOWER} - Result := nil; - projectGroup := ActiveGroup(); - if not Assigned(projectGroup) then - begin - moduleServices := (BorlandIDEServices as IOTAModuleServices); - for moduleIndex := 0 to Pred(moduleServices.ModuleCount) do - begin - module := moduleServices.Modules[moduleIndex]; - if Supports(module, IOTAProject, Result) then - break; - end; - end else - Result := projectGroup.ActiveProject; - {$ELSE} - Result := (BorlandIDEServices as IOTAModuleServices).GetActiveProject(); - {$ENDIF} -end; - - -procedure TUnitSwitcherHook.NewExecute(Sender: TObject); -var - activeIndex: Integer; - activeUnit: TUnSwUnit; - itemIndex: Integer; - moduleIndex: Integer; - project: IOTAProject; - selectedUnits: TUnSwUnitList; - unitList: TUnSwUnitList; - openDFM: Boolean; - openType: TUnSwActivateType; - fileName: string; - -begin - project := ActiveProject(); - if not Assigned(project) then - exit; - - unitList := TUnSwUnitList.Create(); - try - unitList.Add(TUnSwProjectUnit.Create(project)); - - for moduleIndex := 0 to Pred(project.GetModuleCount) do - unitList.Add(TUnSwModuleUnit.Create(project.GetModule(moduleIndex))); - - activeUnit := nil; - fileName := ActiveFileName(); - - if SameText(ExtractFileExt(fileName), '.dfm') then - fileName := ChangeFileExt(fileName, '.pas'); - - activeIndex := unitList.IndexOfFileName(fileName); - if activeIndex > -1 then - activeUnit := unitList[activeIndex]; - - selectedUnits := TfrmUnSwDialog.Execute(unitList, (Sender = FViewFormAction), - openDFM, activeUnit); - if Assigned(selectedUnits) then - try - openType := atSource; - if openDFM then - openType := atDFM - else if Sender = FViewFormAction then - openType := atForm; - - for itemIndex := 0 to Pred(selectedUnits.Count) do - selectedUnits[itemIndex].Activate(openType); - finally - FreeAndNil(selectedUnits); - end; - finally - FreeAndNil(unitList); - end; -end; -*) - - - function TComponentSwitcherHook.ActiveModule(): IOTAModule; begin Result := (BorlandIDEServices as IOTAModuleServices).CurrentModule; @@ -193,21 +72,66 @@ begin end; +function SortByName(Item1, Item2: Pointer): Integer; +begin + Result := CompareText(TCmpSwComponent(Item1).Name, TCmpSwComponent(Item2).Name) +end; + + procedure TComponentSwitcherHook.NewExecute(Sender: TObject); var - editor: IOTAEditor; - formEditor: IOTAFormEditor; - name: String; + editor: IOTAEditor; + formEditor: IOTAFormEditor; + formComponent: IOTAComponent; + componentIndex: Integer; + component: IOTAComponent; + itemList: TBaseSwItemList; + item: TCmpSwComponent; + selectedItems: TBaseSwItemList; begin editor := ActiveEditor(); - if Supports(editor, IOTAFormEditor, formEditor) then + if Assigned(editor) and Supports(editor, IOTAFormEditor, formEditor) then begin - name := ''; - formEditor.GetRootComponent.GetPropValueByName('Name', name); - ShowMessage(name); - end else - OldActionExecute(Sender); + formComponent := formEditor.GetRootComponent; + itemList := TBaseSwItemList.Create(); + + for componentIndex := Pred(formComponent.GetComponentCount) downto 0 do + begin + component := formComponent.GetComponent(componentIndex); + item := TCmpSwComponent.TryCreate(component); + + if Assigned(item) then + itemList.Add(item); + end; + + if itemList.Count > 0 then + begin + itemList.Sort(SortByName); + + (* + ps := (borlandideservices as IOTAPackageServices); + for pi := 0 to Pred(ps.PackageCount) do + begin + for ci := 0 to Pred(ps.ComponentCount[pi]) do + begin + itemList.Add(TTestItem.Create(ps.PackageNames[pi] + ' - ' + ps.ComponentNames[pi, ci])); + end; + end; + *) + + selectedItems := TfrmCmpSwDialog.Execute(itemList); + + if Assigned(selectedItems) then + begin + for componentIndex := 0 to Pred(selectedItems.Count) do + begin + item := TCmpSwComponent(selectedItems[componentIndex]); + item.Activate(componentIndex = 0); + end; + end; + end; + end; end; end. diff --git a/Source/CmpSwDialog.dfm b/Source/CmpSwDialog.dfm new file mode 100644 index 0000000..ff6598a --- /dev/null +++ b/Source/CmpSwDialog.dfm @@ -0,0 +1,151 @@ +inherited frmCmpSwDialog: TfrmCmpSwDialog + Caption = 'ComponentSwitcher' + PixelsPerInch = 96 + TextHeight = 13 + inherited pnlMain: TPanel + inherited lstItems: TListBox + ExplicitTop = 47 + end + end + inherited ilsTypes: TImageList + Bitmap = { + 494C010101000200040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000400000001000000001002000000000000010 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000002C7C2C001274 + 1200729872000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000005990 + AC0010719F000673A6005A8FB40066A0660018801800007E000000870000078F + 0C00006E00004F8D4F0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000639AB2000679AC000082 + B5000091C3000D84B3000064AD0000811000008F000001970100049E080019AC + 270000720000006E00004E874E00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000218EB500009BCE0000A0 + D40000AADD001B90BA000064AD00059417000CA8150012AB260018B1320030C7 + 52000072000000720000317E3100000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000001A97C50000AFE30000B3 + E60009C3F400249BC200006BB200129C370020BB3D0025BE4A0028C2560044DE + 7500007E0000007E0000257C2500000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000012A3D30000C2F80000C9 + FD000DE5FF0029A0C7000070B60014A24F0032DB6C003FDB760052EB88006AFF + A300078F0C00007E0000187B1800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000BBFE10001F9FF0027FF + FF0036FFFF0029E2FF00007ABA00476A2B00819542005FFF980055FF920051F0 + 7E0053EE7D0020BB3D000D7B0D00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000026B9CD0012DCFD0000D6 + FF003D979C009B591C00CB460000CC510000BA410000A8270000767223002CC5 + 43001AB42D0036B03E0067A46900000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000000048A2 + C700C3660700DC680000D56D0000D9720000BE611800A9410000AA3300009E39 + 1100000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000DC680000E0790000E0790000E67F0000CB702400A9410000A9410000B341 + 0B00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000E7800000EC860000EC860000F38B0000D47F3000B44E0000AE480000B344 + 0400000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000F38B0000FD940000FD940000FF9B0000DE8D3B00B84D0000B44E0000A941 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFB65400FFC77600FFCA8600FFCF9500F6BB7F00D47F2E00BF5C0800B44E + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000C0936B00C9936200CE8B4F00CF813900CB7B3600C57B3B00C07E4C00B77A + 5300000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000424D3E000000000000003E000000 + 2800000040000000100000000100010000000000800000000000000000000000 + 000000000000000000000000FFFFFF00FFFF000000000000FFC7000000000000 + E003000000000000800100000000000080010000000000008001000000000000 + 800100000000000080010000000000008001000000000000E00F000000000000 + F00F000000000000F00F000000000000F00F000000000000F00F000000000000 + F00F000000000000FFFF00000000000000000000000000000000000000000000 + 000000000000} + end +end diff --git a/Source/CmpSwDialog.pas b/Source/CmpSwDialog.pas new file mode 100644 index 0000000..f1bbb04 --- /dev/null +++ b/Source/CmpSwDialog.pas @@ -0,0 +1,52 @@ +unit CmpSwDialog; + +interface +uses + ActnList, + Classes, + ComCtrls, + Controls, + ExtCtrls, + ImgList, + Menus, + StdCtrls, + + BaseSwDialog, + BaseSwObjects; + + +type + TCmpSwStyleVisitor = class(TBaseSwStyleVisitor) + protected + procedure VisitItem(const AItem: TBaseSwItem); override; + end; + + + TfrmCmpSwDialog = class(TfrmBaseSwDialog) + protected + function CreateStyleVisitor(): TBaseSwStyleVisitor; override; + end; + + +implementation + + +{$R *.dfm} + + +{ TCmpSwStyleVisitor } +procedure TCmpSwStyleVisitor.VisitItem(const AItem: TBaseSwItem); +begin + inherited; + + ImageIndex := 0; +end; + + +{ TfrmCmpSwDialog } +function TfrmCmpSwDialog.CreateStyleVisitor(): TBaseSwStyleVisitor; +begin + Result := TCmpSwStyleVisitor.Create(); +end; + +end. diff --git a/Source/CmpSwObjects.pas b/Source/CmpSwObjects.pas new file mode 100644 index 0000000..d56be05 --- /dev/null +++ b/Source/CmpSwObjects.pas @@ -0,0 +1,60 @@ +unit CmpSwObjects; + +interface +uses + ToolsAPI, + + BaseSwObjects; + + +type + TCmpSwComponent = class(TBaseSwItem) + private + FComponent: IOTAComponent; + FName: String; + protected + function GetName(): String; override; + public + constructor Create(AComponent: IOTAComponent); + + procedure Activate(const AClearSelection: Boolean); + + class function TryCreate(AComponent: IOTAComponent): TCmpSwComponent; + end; + + +implementation +uses + SysUtils; + + +{ TCmpSwComponent } +class function TCmpSwComponent.TryCreate(AComponent: IOTAComponent): TCmpSwComponent; +begin + Result := TCmpSwComponent.Create(AComponent); + if Length(Result.Name) = 0 then + FreeAndNil(Result); +end; + + +constructor TCmpSwComponent.Create(AComponent: IOTAComponent); +begin + inherited Create(); + + FComponent := AComponent; + FComponent.GetPropValueByName('Name', FName); +end; + + +procedure TCmpSwComponent.Activate(const AClearSelection: Boolean); +begin + FComponent.Select(not AClearSelection); +end; + + +function TCmpSwComponent.GetName(): String; +begin + Result := FName; +end; + +end. diff --git a/Source/UnSwConfiguration.dfm b/Source/UnSwConfiguration.dfm index eb15acf..db0f315 100644 --- a/Source/UnSwConfiguration.dfm +++ b/Source/UnSwConfiguration.dfm @@ -24,7 +24,7 @@ object frmUnSwConfiguration: TfrmUnSwConfiguration Top = 4 Width = 295 Height = 231 - ActivePage = tsGeneral + ActivePage = tsAbout Anchors = [akLeft, akTop, akRight, akBottom] TabOrder = 0 object tsGeneral: TTabSheet @@ -276,7 +276,7 @@ object frmUnSwConfiguration: TfrmUnSwConfiguration Top = 23 Width = 54 Height = 13 - Caption = 'Version 0.5' + Caption = 'Version 0.6' end object TLabel Left = 135 diff --git a/Source/UnSwConfiguration.pas b/Source/UnSwConfiguration.pas index a6caaf0..80ac698 100644 --- a/Source/UnSwConfiguration.pas +++ b/Source/UnSwConfiguration.pas @@ -104,7 +104,7 @@ end; procedure TfrmUnSwConfiguration.lblBugReportClick(Sender: TObject); begin - ShellExecute(0, 'open', 'http://projects.kamadev.net/', nil, nil, SW_SHOWNORMAL); + ShellExecute(0, 'open', 'mailto:support@x2software.net', nil, nil, SW_SHOWNORMAL); end; diff --git a/Source/UnSwDialog.dfm b/Source/UnSwDialog.dfm index e2deee4..fefc1c7 100644 --- a/Source/UnSwDialog.dfm +++ b/Source/UnSwDialog.dfm @@ -1,153 +1,21 @@ -object frmUnSwDialog: TfrmUnSwDialog - Left = 284 - Top = 120 - Width = 320 - Height = 425 - BorderIcons = [biSystemMenu] - Caption = 'UnitSwitcher' - Color = clBtnFace - Constraints.MinHeight = 240 - Constraints.MinWidth = 290 - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [] - Icon.Data = { - 0000010001001010100001000400280100001600000028000000100000002000 - 0000010004000000000080000000000000000000000000000000000000000000 - 000000008000008000000080800080000000800080008080000080808000C0C0 - C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF000000 - 0000000000000000F777777777700000FF8F8F8F8F700000F8F8F8F8F8700000 - FF0000000F700000F8F8F8F8F8700000F999999999700400F9FFFFFFF9700000 - F999999999700000F8F8F8F8F8700000FF0000008F700000F8F8F8F8F7700000 - FF00008F00000000F8F8F8F80F000000FFFFFFFF00000000000000000000E000 - 0000E0000000E0000000E0000000E00000006000000020000000000000002000 - 000060000000E0000000E0000000E0000000E0010000E0030000E0070000} - OldCreateOrder = False - Position = poScreenCenter - OnResize = FormResize - OnShow = FormShow +inherited frmUnSwDialog: TfrmUnSwDialog + ExplicitHeight = 425 PixelsPerInch = 96 TextHeight = 13 - object sbStatus: TStatusBar - Left = 0 - Top = 379 - Width = 312 - Height = 19 - Panels = < - item - Width = 50 - end> - end - object pnlMain: TPanel - Left = 0 - Top = 0 - Width = 312 + inherited pnlMain: TPanel Height = 307 - Align = alClient - BevelOuter = bvNone - BorderWidth = 4 - TabOrder = 0 - object pnlSearch: TPanel - Left = 4 - Top = 24 - Width = 304 - Height = 25 - Align = alTop - BevelOuter = bvNone - TabOrder = 0 - DesignSize = ( - 304 - 25) - object cmbSearch: TComboBox - Left = 0 - Top = 0 - Width = 304 - Height = 21 - AutoComplete = False - Anchors = [akLeft, akTop, akRight] - DropDownCount = 10 - ItemHeight = 13 - TabOrder = 0 - OnChange = cmbSearchChange - OnKeyDown = cmbSearchKeyDown - OnKeyPress = cmbSearchKeyPress - end - end - object lstUnits: TListBox - Left = 4 - Top = 49 - Width = 304 + ExplicitHeight = 307 + inherited lstItems: TListBox Height = 254 - Style = lbVirtualOwnerDraw - Align = alClient - ItemHeight = 20 - MultiSelect = True - PopupMenu = pmnUnits - TabOrder = 1 - OnClick = lstUnitsClick - OnData = lstUnitsData - OnDblClick = lstUnitsDblClick - OnDrawItem = lstUnitsDrawItem - OnMouseDown = lstUnitsMouseDown - end - object pnlSubFilters: TPanel - Left = 4 - Top = 4 - Width = 304 - Height = 20 - Align = alTop - BevelOuter = bvNone - TabOrder = 2 - Visible = False - DesignSize = ( - 304 - 20) - object lblSubFilters: TLabel - Left = 0 - Top = 1 - Width = 305 - Height = 13 - Anchors = [akLeft, akTop, akRight] - AutoSize = False - Caption = 'frm '#187' Dialog '#187 - end + ExplicitTop = 47 + ExplicitHeight = 254 end end - object pnlButtons: TPanel - Left = 0 - Top = 343 - Width = 312 - Height = 36 - Align = alBottom - BevelOuter = bvNone + inherited pnlButtons: TPanel TabOrder = 2 - DesignSize = ( - 312 - 36) - object btnCancel: TButton - Left = 233 - Top = 5 - Width = 75 - Height = 25 - Anchors = [akRight, akBottom] - Cancel = True - Caption = 'Cancel' - ModalResult = 2 + inherited btnOK: TButton TabOrder = 2 end - object btnOK: TButton - Left = 152 - Top = 5 - Width = 75 - Height = 25 - Anchors = [akRight, akBottom] - Caption = 'OK' - Default = True - TabOrder = 1 - OnClick = btnOKClick - end object btnConfiguration: TButton Left = 4 Top = 5 @@ -158,7 +26,7 @@ object frmUnSwDialog: TfrmUnSwDialog OnClick = btnConfigurationClick end end - object pnlIncludeTypes: TPanel + object pnlIncludeTypes: TPanel [3] Left = 0 Top = 307 Width = 312 @@ -203,11 +71,9 @@ object frmUnSwDialog: TfrmUnSwDialog OnClick = TypeFilterChange end end - object ilsTypes: TImageList - Left = 28 - Top = 228 + inherited ilsTypes: TImageList Bitmap = { - 494C010106000900040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 494C010106000900040010001000FFFFFFFFFF00FFFFFFFFFFFFFFFF424D3600 0000000000003600000028000000400000003000000001002000000000000030 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -340,64 +206,64 @@ object frmUnSwDialog: TfrmUnSwDialog 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000C0C0C000C0C0C000C0C0C000C0C0C0000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000080000000 + 8000000080000000800000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000FFFFFF00808080008080 8000808080008080800080808000808080008080800080808000808080008080 8000808080000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF000000800000008000C0C0C0000000000000000000000000000000 + 00000000000000000000000000000000000000000000000080000000FF000000 + FF000000FF000000FF0000008000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00C0C0 C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0 C000808080000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF000000FF0000008000C0C0C0000000000000000000000000000000 + 0000000000000000000000000000000000000000FF000000FF000000FF00FFFF + FF00FFFFFF000000FF000000FF00000080000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000FFFFFF00C0C0C000FFFF FF00C0C0C000FFFFFF00C0C0C000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF00FFFFFF00FFFFFF00C0C0C0000000000000000000000000000000 + 0000000000000000000000000000000000000000FF000000FF000000FF000000 + FF000000FF000000FF000000FF00000080000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00C0C0 C000FFFFFF00C0C0C000FFFFFF0000000000FFFFFF0080808000808080008080 8000808080008080800080808000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF000000800000008000C0C0C0000000000000000000000000000000 + 0000000000000000000000000000000000000000FF000000FF000000FF00FFFF + FF00FFFFFF000000FF000000FF00000080000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000FFFFFF00C0C0C000FFFF FF00C0C0C000FFFFFF00C0C0C00000000000FFFFFF00FFFFFF00C0C0C000FFFF FF00C0C0C000FFFFFF0080808000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF000000FF0000008000C0C0C0000000000000000000000000000000 + 0000000000000000000000000000000000000000FF000000FF000000FF00FFFF + FF00FFFFFF000000FF000000FF00000080000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00C0C0 C000FFFFFF00C0C0C000FFFFFF0000000000FFFFFF00C0C0C000FFFFFF00C0C0 C000FFFFFF00C0C0C00080808000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF000000FF0000008000C0C0C0000000000000000000000000000000 + 000000000000000000000000000000000000000000000000FF000000FF00FFFF + FF00FFFFFF000000FF0000008000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000FFFFFF00C0C0C000FFFF FF00C0C0C000FFFFFF00C0C0C00000000000FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF000000FF0000008000C0C0C0000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000FF000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -405,7 +271,7 @@ object frmUnSwDialog: TfrmUnSwDialog C000FFFFFF00C0C0C000FFFFFF00000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF000000FF0000008000C0C0C0000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -413,7 +279,7 @@ object frmUnSwDialog: TfrmUnSwDialog FF00C0C0C000FFFFFF00C0C0C00000000000FF000000FF000000FF000000FF00 0000FF00000000000000C0C0C000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF000000FF0000008000C0C0C0000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -421,7 +287,7 @@ object frmUnSwDialog: TfrmUnSwDialog C000FFFFFF00C0C0C000FFFFFF00000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF00FFFFFF00FFFFFF00C0C0C0000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -599,30 +465,17 @@ object frmUnSwDialog: TfrmUnSwDialog 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000003FFF0000000000003FFF000000000 - 0003FFF0000000000000FFF0000000000000FFF0000000000000FFF000000000 - 0000FFF0000000000000FFF0000000000000FFF0000000000000FFF000000000 - 0000FFF0000000000003FFFF000000000003FFFF000000000003FFFF00000000 + 000000000000000000000000000000000003FFC3000000000003FF8100000000 + 0003FF00000000000000FF00000000000000FF00000000000000FF0000000000 + 0000FF81000000000000FFC3000000000000FFFF000000000000FFFF00000000 + 0000FFFF000000000003FFFF000000000003FFFF000000000003FFFF00000000 0003FFFF000000000003FFFF00000000E000E000FFFFEC0FE000E000FFFF840F E000E0000000AC0FE000E0000000BF3FE000E0000000FFFFE000600000001000 E000200000001000E00000000000B000E00020000000F000E00060000000F000 E000E0000000F000E000E0000000F000E000E0000000F000E001E0010000F000 - E003E003FFFFF000E007E007FFFFF00000000000000000000000000000000000 - 000000000000} + E003E003FFFFF000E007E007FFFFF000} end - object alMain: TActionList - Left = 84 - Top = 228 - object actSelectAll: TAction - Caption = 'Select &All' - ShortCut = 16449 - OnExecute = actSelectAllExecute - end - object actSelectInvert: TAction - Caption = '&Invert Selection' - ShortCut = 16457 - OnExecute = actSelectInvertExecute - end + inherited alMain: TActionList object actSortByName: TAction Caption = 'Sort by &Name' GroupIndex = 1 @@ -650,16 +503,6 @@ object frmUnSwDialog: TfrmUnSwDialog ShortCut = 24589 OnExecute = actOpenDFMPropertiesExecute end - object actMRUPrior: TAction - Caption = 'actMRUPrior' - ShortCut = 16422 - OnExecute = actMRUPriorExecute - end - object actMRUNext: TAction - Caption = 'actMRUNext' - ShortCut = 16424 - OnExecute = actMRUNextExecute - end object actReadOnly: TAction Caption = '&Read only' ShortCut = 49234 @@ -676,49 +519,41 @@ object frmUnSwDialog: TfrmUnSwDialog OnExecute = actOpenDFMExecute end end - object pmnUnits: TPopupMenu - Left = 140 - Top = 228 - object pmnUnitsOpen: TMenuItem + inherited pmnItems: TPopupMenu + object pmnItemsOpen: TMenuItem Action = actOpen end - object pmnUnitsOpenDFM: TMenuItem + object pmnItemsOpenDFM: TMenuItem Action = actOpenDFM end - object pmnUnitsSep1: TMenuItem + object pmnItemsSep1: TMenuItem Caption = '-' end - object pmnUnitsSelectAll: TMenuItem - Action = actSelectAll - end - object pmnUnitsSelectInvert: TMenuItem - Action = actSelectInvert - end - object pmnUnitsSep2: TMenuItem + object pmnItemsSep2: TMenuItem Caption = '-' end - object pmnUnitsSortByName: TMenuItem + object pmnItemsSortByName: TMenuItem Action = actSortByName end - object pmnUnitsSortByType: TMenuItem + object pmnItemsSortByType: TMenuItem Action = actSortByType end - object pmnUnitsSep3: TMenuItem + object pmnItemsSep3: TMenuItem Caption = '-' end - object pmnUnitsReadOnly: TMenuItem + object pmnItemsReadOnly: TMenuItem Action = actReadOnly end - object pmnUnitsSep4: TMenuItem + object pmnItemsSep4: TMenuItem Caption = '-' end - object pmnUnitsOpenFolder: TMenuItem + object pmnItemsOpenFolder: TMenuItem Action = actOpenFolder end - object pmnUnitsOpenProperties: TMenuItem + object pmnItemsOpenProperties: TMenuItem Action = actOpenProperties end - object pmnUnitsOpenDFMProperties: TMenuItem + object pmnItemsOpenDFMProperties: TMenuItem Action = actOpenDFMProperties end end diff --git a/Source/UnSwDialog.pas b/Source/UnSwDialog.pas index 31cbb54..1bb4424 100644 --- a/Source/UnSwDialog.pas +++ b/Source/UnSwDialog.pas @@ -22,135 +22,87 @@ uses StdCtrls, Windows, + BaseSwDialog, BaseSwFilters, BaseSwObjects, UnSwObjects, UnSwFilters; type - TUnSwStyleVisitor = class(TInterfacedPersistent, IBaseSwVisitor, IUnSwVisitor) - private - FColor: TColor; - FImageIndex: Integer; - FOverlayIndex: Integer; + TUnSwStyleVisitor = class(TBaseSwStyleVisitor, IBaseSwVisitor, IUnSwVisitor) protected - procedure VisitItem(const AItem: TBaseSwItem); - procedure VisitModule(const AUnit: TUnSwModuleUnit); - procedure VisitProject(const AUnit: TUnSwProjectUnit); - public - property Color: TColor read FColor; - property ImageIndex: Integer read FImageIndex; - property OverlayIndex: Integer read FOverlayIndex; + procedure VisitItem(const AItem: TBaseSwItem); override; + procedure VisitModule(const AUnit: TUnSwModuleUnit); virtual; + procedure VisitProject(const AUnit: TUnSwProjectUnit); virtual; end; - TfrmUnSwDialog = class(TForm) - actMRUNext: TAction; - actMRUPrior: TAction; + TfrmUnSwDialog = class(TfrmBaseSwDialog) actOpen: TAction; actOpenDFM: TAction; actOpenDFMProperties: TAction; actOpenFolder: TAction; actOpenProperties: TAction; actReadOnly: TAction; - actSelectAll: TAction; - actSelectInvert: TAction; actSortByName: TAction; actSortByType: TAction; - alMain: TActionList; - btnCancel: TButton; - btnConfiguration: TButton; - btnOK: TButton; chkDataModules: TCheckBox; chkForms: TCheckBox; chkProjectSource: TCheckBox; chkUnits: TCheckBox; - cmbSearch: TComboBox; - ilsTypes: TImageList; - lblSubFilters: TLabel; - lstUnits: TListBox; - pmnUnits: TPopupMenu; - pmnUnitsOpen: TMenuItem; - pmnUnitsOpenDFM: TMenuItem; - pmnUnitsOpenDFMProperties: TMenuItem; - pmnUnitsOpenFolder: TMenuItem; - pmnUnitsOpenProperties: TMenuItem; - pmnUnitsReadOnly: TMenuItem; - pmnUnitsSelectAll: TMenuItem; - pmnUnitsSelectInvert: TMenuItem; - pmnUnitsSep1: TMenuItem; - pmnUnitsSep2: TMenuItem; - pmnUnitsSep3: TMenuItem; - pmnUnitsSep4: TMenuItem; - pmnUnitsSortByName: TMenuItem; - pmnUnitsSortByType: TMenuItem; - pnlButtons: TPanel; + pmnItemsOpen: TMenuItem; + pmnItemsOpenDFM: TMenuItem; + pmnItemsOpenDFMProperties: TMenuItem; + pmnItemsOpenFolder: TMenuItem; + pmnItemsOpenProperties: TMenuItem; + pmnItemsReadOnly: TMenuItem; + pmnItemsSep1: TMenuItem; + pmnItemsSep2: TMenuItem; + pmnItemsSep3: TMenuItem; + pmnItemsSep4: TMenuItem; + pmnItemsSortByName: TMenuItem; + pmnItemsSortByType: TMenuItem; pnlIncludeTypes: TPanel; - pnlMain: TPanel; - pnlSearch: TPanel; - pnlSubFilters: TPanel; - sbStatus: TStatusBar; - procedure actMRUNextExecute(Sender: TObject); - procedure actMRUPriorExecute(Sender: TObject); procedure actOpenDFMPropertiesExecute(Sender: TObject); procedure actOpenFolderExecute(Sender: TObject); procedure actOpenPropertiesExecute(Sender: TObject); procedure actReadOnlyExecute(Sender: TObject); - procedure actSelectAllExecute(Sender: TObject); - procedure actSelectInvertExecute(Sender: TObject); - procedure btnConfigurationClick(Sender: TObject); - procedure cmbSearchChange(Sender: TObject); - procedure cmbSearchKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); - procedure cmbSearchKeyPress(Sender: TObject; var Key: Char); - procedure FormResize(Sender: TObject); - procedure FormShow(Sender: TObject); - procedure lstUnitsClick(Sender: TObject); - procedure lstUnitsData(Control: TWinControl; Index: Integer; var Data: string); + procedure btnConfigurationClick(Sender: TObject); procedure lstUnitsDblClick(Sender: TObject); - procedure lstUnitsDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); - procedure lstUnitsMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure SortExecute(Sender: TObject); procedure TypeFilterChange(Sender: TObject); procedure actOpenExecute(Sender: TObject); procedure actOpenDFMExecute(Sender: TObject); procedure btnOKClick(Sender: TObject); + procedure FormShow(Sender: TObject); private FLoading: Boolean; - FUnitList: TUnSwUnitList; - FActiveUnit: TUnSwUnit; FFormsOnly: Boolean; - FMRUList: TStrings; - FMRUIndex: Integer; - FSubFilters: TStringList; FOpenDFM: Boolean; FTypeFilteredList: TUnSwUnitList; - FSubFilteredList: TUnSwUnitList; - FInputFilteredList: TUnSwUnitList; - FTypeFilter: TUnSwUnitTypeFilter; - FSubFilter: TBaseSwItemSimpleFilter; - FInputFilter: TBaseSwItemSimpleFilter; - FLastFilter: String; + protected + function InternalExecute(): TBaseSwItemList; override; + procedure UpdateTypeFilter(AUpdateList: Boolean); - FStyleVisitor: TUnSwStyleVisitor; + function CreateItemList(): TBaseSwItemList; override; + function CreateInputFilter(): TBaseSwItemSimpleFilter; override; + function CreateStyleVisitor(): TBaseSwStyleVisitor; override; - function InternalExecute(): TUnSwUnitList; - procedure UpdateTypeFilter(); - procedure UpdateList(); + function AllowEmptyResult(): Boolean; override; + function ColorsEnabled(): Boolean; override; + + function GetBaseItemList(): TBaseSwItemList; override; + function GetItemDisplayName(const AItem: TBaseSwItem): String; override; + + procedure UpdateItemActions(); override; function GetActiveUnits(): TUnSwUnitList; - procedure SelectMRUItem(); - function PushFilter(const AFilter: String): Boolean; - procedure PopFilter(); - procedure UpdateSubFilters(); - - procedure LoadSettings(); - procedure SaveSettings(); - - procedure UpdateUnitActions(); + procedure LoadSettings(); override; + procedure SaveSettings(); override; public class function Execute(const AUnits: TUnSwUnitList; const AFormsOnly: Boolean; @@ -391,9 +343,9 @@ end; procedure TUnSwStyleVisitor.VisitItem(const AItem: TBaseSwItem); begin if (AItem is TUnSwUnit) and IsReadOnly(TUnSwUnit(AItem).FileName) then - FOverlayIndex := 5 + OverlayIndex := 5 else - FOverlayIndex := -1; + OverlayIndex := -1; end; @@ -403,22 +355,22 @@ begin case AUnit.UnitType of swutUnit: begin - FColor := Settings.Colors.Units; - FImageIndex := 1; + Color := Settings.Colors.Units; + ImageIndex := 1; end; swutForm: begin - FColor := Settings.Colors.Forms; - FImageIndex := 2; + Color := Settings.Colors.Forms; + ImageIndex := 2; end; swutDataModule: begin - FColor := Settings.Colors.DataModules; - FImageIndex := 3; - end + Color := Settings.Colors.DataModules; + ImageIndex := 3; + end; else - FColor := clWindowText; - FImageIndex := 0; + Color := clWindowText; + ImageIndex := 0; end; end; @@ -426,8 +378,8 @@ end; procedure TUnSwStyleVisitor.VisitProject(const AUnit: TUnSwProjectUnit); begin VisitItem(AUnit); - FColor := Settings.Colors.ProjectSource; - FImageIndex := 4; + Color := Settings.Colors.ProjectSource; + ImageIndex := 4; end; @@ -439,11 +391,11 @@ class function TfrmUnSwDialog.Execute(const AUnits: TUnSwUnitList; begin with Self.Create(nil) do try - FUnitList := AUnits; - FActiveUnit := AActive; + ItemList := AUnits; + ActiveItem := AActive; FFormsOnly := AFormsOnly; - Result := InternalExecute(); + Result := TUnSwUnitList(InternalExecute()); AOpenDFM := FOpenDFM; finally Free(); @@ -451,48 +403,39 @@ begin end; -procedure TfrmUnSwDialog.FormResize(Sender: TObject); -begin - lstUnits.Invalidate(); -end; - - procedure TfrmUnSwDialog.FormShow(Sender: TObject); begin - // Setting ListBox.Selected[x] won't work before OnShow... - UpdateTypeFilter(); + UpdateTypeFilter(False); + inherited; end; -function TfrmUnSwDialog.InternalExecute(): TUnSwUnitList; -type - TBaseSwItemSimpleFilterClass = class of TBaseSwItemSimpleFilter; - -var - iIndex: Integer; - pClass: TBaseSwItemSimpleFilterClass; - mruText: String; - subFilterIndex: Integer; - +function TfrmUnSwDialog.GetActiveUnits(): TUnSwUnitList; begin - Result := nil; - FSubFilters := TStringList.Create(); - FTypeFilteredList := TUnSwUnitList.Create(); - FSubFilteredList := TUnSwUnitList.Create(); - FInputFilteredList := TUnSwUnitList.Create(); - FTypeFilter := TUnSwUnitTypeFilter.Create; + Result := (GetActiveItems() as TUnSwUnitList); +end; - if FFormsOnly then - pClass := TUnSwUnitSimpleFormNameFilter + +function TfrmUnSwDialog.GetBaseItemList(): TBaseSwItemList; +begin + Result := FTypeFilteredList; +end; + + +function TfrmUnSwDialog.GetItemDisplayName(const AItem: TBaseSwItem): String; +begin + if FFormsOnly and (AItem is TUnSwModuleUnit) then + Result := TUnSwModuleUnit(AItem).FormName else - pClass := TBaseSwItemSimpleNameFilter; + Result := inherited GetItemDisplayName(AItem); +end; - FSubFilter := pClass.Create; - FInputFilter := pClass.Create; +function TfrmUnSwDialog.InternalExecute(): TBaseSwItemList; +begin + FTypeFilteredList := TUnSwUnitList.Create(); + FTypeFilter := TUnSwUnitTypeFilter.Create; try - LoadSettings(); - if FFormsOnly then begin chkProjectSource.Visible := False; @@ -501,46 +444,15 @@ begin end else Self.Caption := 'UnitSwitcher - View Unit'; - FStyleVisitor := TUnSwStyleVisitor.Create(); - try - if Self.ShowModal() = mrOk then - begin - if Length(Trim(cmbSearch.Text)) > 0 then - begin - iIndex := FMRUList.IndexOf(cmbSearch.Text); - if iIndex > -1 then - FMRUList.Delete(iIndex); - - while FMRUList.Count >= 10 do - FMRUList.Delete(Pred(FMRUList.Count)); - - mruText := cmbSearch.Text; - for subFilterIndex := Pred(FSubFilters.Count) downto 0 do - mruText := FSubFilters[subFilterIndex] + SubFilterSeparator; - - FMRUList.Insert(0, mruText); - end; - - Result := GetActiveUnits(); - end; - - SaveSettings(); - finally - FreeAndNil(FStyleVisitor); - end; + Result := inherited InternalExecute(); finally - FreeAndNil(FInputFilter); - FreeAndNil(FSubFilter); FreeAndNil(FTypeFilter); - FreeAndNil(FSubFilteredList); - FreeAndNil(FInputFilteredList); FreeAndNil(FTypeFilteredList); - FreeAndNil(FSubFilters); end; end; -procedure TfrmUnSwDialog.UpdateUnitActions(); +procedure TfrmUnSwDialog.UpdateItemActions(); var bDFM: Boolean; bUnits: Boolean; @@ -601,70 +513,6 @@ begin end; -procedure TfrmUnSwDialog.UpdateList(); -var - activeUnit: TUnSwUnit; - activeUnits: TUnSwUnitList; - itemIndex: Integer; - listIndex: Integer; - filteredList: TUnSwUnitList; - selStart: Integer; - -begin - activeUnits := GetActiveUnits(); - - filteredList := TUnSwUnitList.Create(); - try - filteredList.Clone(FSubFilteredList); - FInputFilter.FilterList(filteredList); - - if (filteredList.Count = 0) and (not Settings.Filter.AllowEmptyResult) then - begin - { Only enforce AllowEmptyResult when adding to the filter } - if Length(FInputFilter.Filter) > Length(FLastFilter) then - begin - FInputFilter.Filter := FLastFilter; - selStart := cmbSearch.SelStart; - cmbSearch.Text := FLastFilter; - cmbSearch.SelStart := selStart; - Exit; - end; - end; - - FLastFilter := FInputFilter.Filter; - FInputFilteredList.Clone(filteredList); - finally - FreeAndNil(filteredList); - end; - - - lstUnits.Count := FInputFilteredList.Count; - if FInputFilteredList.Count > 0 then - begin - lstUnits.ClearSelection(); - - if Assigned(activeUnits) then - try - for itemIndex := 0 to Pred(activeUnits.Count) do - begin - activeUnit := activeUnits[itemIndex]; - listIndex := FInputFilteredList.IndexOf(activeUnit); - if listIndex > -1 then - lstUnits.Selected[listIndex] := True; - end; - finally - FreeAndNil(activeUnits); - end; - - if lstUnits.SelCount = 0 then - lstUnits.Selected[0] := True; - end; - - if Assigned(lstUnits.OnClick) then - lstUnits.OnClick(nil); -end; - - function SortByName(Item1, Item2: Pointer): Integer; begin Result := CompareText(TUnSwUnit(Item1).Name, TUnSwUnit(Item2).Name) @@ -720,14 +568,14 @@ begin end; -procedure TfrmUnSwDialog.UpdateTypeFilter(); +procedure TfrmUnSwDialog.UpdateTypeFilter(AUpdateList: Boolean); begin FTypeFilter.IncludeUnits := ((not FFormsOnly) and chkUnits.Checked); FTypeFilter.IncludeProjectSource := ((not FFormsOnly) and chkProjectSource.Checked); FTypeFilter.IncludeForms := chkForms.Checked; FTypeFilter.IncludeDataModules := chkDataModules.Checked; - FTypeFilteredList.Clone(FUnitList); + FTypeFilteredList.Clone(ItemList); FTypeFilter.FilterList(FTypeFilteredList); if actSortByName.Checked then @@ -735,83 +583,8 @@ begin else FTypeFilteredList.Sort(SortByType); - UpdateSubFilters(); -end; - - -procedure TfrmUnSwDialog.PopFilter(); -begin - if FSubFilters.Count > 0 then - begin - FSubFilters.Delete(Pred(FSubFilters.Count)); + if AUpdateList then UpdateSubFilters(); - end; -end; - - -procedure TfrmUnSwDialog.UpdateSubFilters(); -var - iFilter: Integer; - sFilters: String; - -begin - FSubFilteredList.Clone(FTypeFilteredList); - - if FSubFilters.Count > 0 then - begin - for iFilter := 0 to Pred(FSubFilters.Count) do - begin - sFilters := sFilters + FSubFilters[iFilter] + SubFilterSeparator; - FSubFilter.Filter := FSubFilters[iFilter]; - FSubFilter.FilterList(FSubFilteredList); - end; - - lblSubFilters.Caption := Trim(sFilters); - pnlSubFilters.Visible := True; - end else - pnlSubFilters.Visible := False; - - UpdateList(); -end; - - -function TfrmUnSwDialog.PushFilter(const AFilter: String): Boolean; -var - sFilter: String; - -begin - sFilter := Trim(AFilter); - Result := (Length(sFilter) > 0) and (FSubFilters.IndexOf(AFilter) = -1); - if Result then - begin - FSubFilters.Add(AFilter); - UpdateSubFilters(); - end; -end; - - -function TfrmUnSwDialog.GetActiveUnits(): TUnSwUnitList; -var - itemIndex: Integer; - -begin - Result := nil; - - if Assigned(FActiveUnit) then - begin - Result := TUnSwUnitList.Create(); - Result.OwnsObjects := False; - Result.Add(FActiveUnit); - FActiveUnit := nil; - end else if lstUnits.SelCount > 0 then - begin - Result := TUnSwUnitList.Create(); - Result.OwnsObjects := False; - - for itemIndex := 0 to Pred(lstUnits.Items.Count) do - if lstUnits.Selected[itemIndex] then - Result.Add(FInputFilteredList[itemIndex]); - end; end; @@ -837,11 +610,12 @@ begin dsType: actSortByType.Checked := True; end; - FMRUList := dialogSettings.MRUList; - cmbSearch.Items.Assign(FMRUList); - + MRUList.Assign(dialogSettings.MRUList); + Self.ClientWidth := dialogSettings.Width; Self.ClientHeight := dialogSettings.Height; + + inherited LoadSettings(); finally FLoading := False; end; @@ -871,63 +645,18 @@ begin dialogSettings.Width := Self.ClientWidth; dialogSettings.Height := Self.ClientHeight; + dialogSettings.MRUList.Assign(MRUList); + Settings.Save(); -end; - -procedure TfrmUnSwDialog.actSelectAllExecute(Sender: TObject); -begin - lstUnits.SelectAll(); -end; - - -procedure TfrmUnSwDialog.actSelectInvertExecute(Sender: TObject); -var - iItem: Integer; - -begin - for iItem := Pred(lstUnits.Count) downto 0 do - lstUnits.Selected[iItem] := not lstUnits.Selected[iItem]; + inherited SaveSettings(); end; procedure TfrmUnSwDialog.SortExecute(Sender: TObject); begin (Sender as TAction).Checked := True; - UpdateTypeFilter(); -end; - - -procedure TfrmUnSwDialog.SelectMRUItem(); -var - mruText: String; - -begin - mruText := FMRUList[FMRUIndex]; - cmbSearch.ItemIndex := FMRUIndex; - ActiveControl := cmbSearch; - cmbSearch.SelectAll(); - - if Assigned(cmbSearch.OnChange) then - cmbSearch.OnChange(nil); -end; - - -procedure TfrmUnSwDialog.actMRUNextExecute(Sender: TObject); -begin - if FMRUIndex < Pred(FMRUList.Count) then - Inc(FMRUIndex); - - SelectMRUItem(); -end; - - -procedure TfrmUnSwDialog.actMRUPriorExecute(Sender: TObject); -begin - if FMRUIndex >= -1 then - Dec(FMRUIndex); - - SelectMRUItem(); + UpdateTypeFilter(True); end; @@ -979,62 +708,41 @@ end; procedure TfrmUnSwDialog.btnConfigurationClick(Sender: TObject); begin if TfrmUnSwConfiguration.Execute() then - lstUnits.Invalidate(); + lstItems.Invalidate(); end; -procedure TfrmUnSwDialog.cmbSearchChange(Sender: TObject); +function TfrmUnSwDialog.CreateItemList(): TBaseSwItemList; begin - if cmbSearch.Text <> FInputFilter.Filter then - begin - FInputFilter.Filter := cmbSearch.Text; - UpdateList(); - end; + Result := TUnSwUnitList.Create(); end; -procedure TfrmUnSwDialog.cmbSearchKeyDown(Sender: TObject; var Key: Word; - Shift: TShiftState); +function TfrmUnSwDialog.ColorsEnabled(): Boolean; begin - if not cmbSearch.DroppedDown then - if ((Shift = []) and (Key in [VK_UP, VK_DOWN, VK_PRIOR, VK_NEXT])) or - ((Shift = [ssCtrl]) and (Key in [VK_HOME, VK_END])) or - ((Shift = [ssShift]) and (Key in [VK_UP, VK_DOWN, VK_PRIOR, VK_NEXT])) then - begin - lstUnits.Perform(WM_KEYDOWN, Key, 0); - Key := 0; - end else if Shift = [ssCtrl] then - case Key of - VK_TAB: - begin - if PushFilter(cmbSearch.Text) then - cmbSearch.Text := ''; - - Key := 0; - end; - VK_BACK: - begin - cmbSearch.Text := ''; - FInputFilter.Filter := ''; - PopFilter(); - Key := 0; - end; - end; + Result := Settings.Colors.Enabled; end; -procedure TfrmUnSwDialog.cmbSearchKeyPress(Sender: TObject; var Key: Char); +function TfrmUnSwDialog.CreateStyleVisitor(): TBaseSwStyleVisitor; begin - // Ctrl-Backspace - if Key = #127 then - Key := #0; + Result := TUnSwStyleVisitor.Create(); +end; + + +function TfrmUnSwDialog.CreateInputFilter(): TBaseSwItemSimpleFilter; +begin + if FFormsOnly then + Result := TUnSwUnitSimpleFormNameFilter.Create() + else + Result := TBaseSwItemSimpleNameFilter.Create(); end; procedure TfrmUnSwDialog.TypeFilterChange(Sender: TObject); begin if not FLoading then - UpdateTypeFilter(); + UpdateTypeFilter(True); end; @@ -1044,85 +752,6 @@ begin end; -procedure TfrmUnSwDialog.lstUnitsClick(Sender: TObject); -begin - UpdateUnitActions(); -end; - - -procedure TfrmUnSwDialog.lstUnitsData(Control: TWinControl; Index: Integer; - var Data: string); -begin - Data := FInputFilteredList[Index].Name; -end; - - -procedure TfrmUnSwDialog.lstUnitsDrawItem(Control: TWinControl; Index: Integer; - Rect: TRect; State: TOwnerDrawState); -var - currentUnit: TUnSwUnit; - textRect: TRect; - text: String; - -begin - with TListBox(Control) do - begin - currentUnit := FInputFilteredList[Index]; - currentUnit.AcceptVisitor(FStyleVisitor); - - if FFormsOnly and (currentUnit is TUnSwModuleUnit) then - text := TUnSwModuleUnit(currentUnit).FormName - else - text := currentUnit.Name; - - if odSelected in State then - begin - Canvas.Brush.Color := clHighlight; - Canvas.Font.Color := clHighlightText; - end else - begin - Canvas.Brush.Color := clWindow; - if Settings.Colors.Enabled then - Canvas.Font.Color := FStyleVisitor.Color - else - Canvas.Font.Color := clWindowText; - end; - Canvas.FillRect(Rect); - - textRect := Rect; - InflateRect(textRect, -2, -2); - ilsTypes.Draw(Canvas, textRect.Left, textRect.Top, FStyleVisitor.ImageIndex); - - if FStyleVisitor.OverlayIndex > -1 then - ilsTypes.Draw(Canvas, textRect.Left, textRect.Top, FStyleVisitor.OverlayIndex); - - Inc(textRect.Left, ilsTypes.Width + 4); - DrawText(Canvas.Handle, PChar(text), Length(text), textRect, DT_SINGLELINE or - DT_LEFT or DT_VCENTER or DT_END_ELLIPSIS); - end; -end; - - -procedure TfrmUnSwDialog.lstUnitsMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); -var - itemIndex: Integer; - -begin - { Bij rechtermuisknop het item selecteren indien deze niet al - geselecteerd was } - if Button = mbRight then - begin - itemIndex := lstUnits.ItemAtPos(Point(X, Y), True); - if (itemIndex > -1) and (not lstUnits.Selected[itemIndex]) then - begin - lstUnits.ClearSelection; - lstUnits.Selected[itemIndex] := True; - UpdateUnitActions(); - end; - end; -end; - - procedure TfrmUnSwDialog.actReadOnlyExecute(Sender: TObject); var pUnits: TUnSwUnitList; @@ -1142,12 +771,18 @@ begin finally FreeAndNil(pUnits); - lstUnits.Invalidate(); - UpdateUnitActions(); + lstItems.Invalidate(); + UpdateItemActions(); end; end; +function TfrmUnSwDialog.AllowEmptyResult(): Boolean; +begin + Result := Settings.Filter.AllowEmptyResult; +end; + + procedure TfrmUnSwDialog.actOpenExecute(Sender: TObject); begin FOpenDFM := False; @@ -1164,7 +799,8 @@ end; procedure TfrmUnSwDialog.btnOKClick(Sender: TObject); begin FOpenDFM := ((GetKeyState(VK_SHIFT) and 128) <> 0); - ModalResult := mrOk; + + inherited; end; end. diff --git a/Source/UnSwFilters.pas b/Source/UnSwFilters.pas index 36b2d64..78afc61 100644 --- a/Source/UnSwFilters.pas +++ b/Source/UnSwFilters.pas @@ -23,7 +23,7 @@ type end; - TUnSwUnitTypeFilter = class(TBaseSwItemFilter) + TUnSwUnitTypeFilter = class(TBaseSwItemFilter, IBaseSwVisitor, IUnSwVisitor) private FIncludeDataModules: Boolean; FIncludeForms: Boolean; @@ -33,7 +33,7 @@ type procedure VisitModule(const AUnit: TUnSwModuleUnit); procedure VisitProject(const AUnit: TUnSwProjectUnit); public - constructor Create; + constructor Create(); property IncludeDataModules: Boolean read FIncludeDataModules write FIncludeDataModules; property IncludeForms: Boolean read FIncludeForms write FIncludeForms; @@ -63,7 +63,7 @@ end; { TUnSwUnitTypeFilter } -constructor TUnSwUnitTypeFilter.Create; +constructor TUnSwUnitTypeFilter.Create(); begin inherited; diff --git a/Source/UnSwObjects.pas b/Source/UnSwObjects.pas index 3ffec72..5fd68f3 100644 --- a/Source/UnSwObjects.pas +++ b/Source/UnSwObjects.pas @@ -272,7 +272,7 @@ begin end; end; {$ELSE} - OpenModule(FProject, True); + OpenModule(FProject, atSource); {$ENDIF} end;