From a1762e05e8f747703235d8f2274e8d4442685919 Mon Sep 17 00:00:00 2001 From: Mark van Renswoude Date: Fri, 1 May 2009 08:44:18 +0000 Subject: [PATCH] Added support for Wildchars --- Lib/D7/UnitSwitcherD7.bpl | Bin 148992 -> 152064 bytes Source/BaseSwDialog.pas | 10 ++++++ Source/BaseSwFilters.pas | 49 +++++++++++++++++++++++---- Source/CmpSwConfiguration.dfm | 13 ++++++-- Source/CmpSwConfiguration.pas | 19 ++++++----- Source/CmpSwDialog.pas | 19 +++++++++-- Source/CmpSwSettings.pas | 61 ++++++++++++++++++++++++++-------- Source/UnSwConfiguration.dfm | 30 +++++++++++------ Source/UnSwConfiguration.pas | 3 ++ Source/UnSwDialog.pas | 18 +++++++++- Source/UnSwSettings.pas | 9 ++++- 11 files changed, 186 insertions(+), 45 deletions(-) diff --git a/Lib/D7/UnitSwitcherD7.bpl b/Lib/D7/UnitSwitcherD7.bpl index f38bd9e639f7147a49dc2edb608eca4feb8cf8ba..bfa80405c590835239e8a8b0a6b6a08b17db9a17 100644 GIT binary patch delta 43375 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 Bb3p(A delta 40599 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 SLEhwsM+SMzr@*2~@BagCohse{ diff --git a/Source/BaseSwDialog.pas b/Source/BaseSwDialog.pas index 7493684..5b14098 100644 --- a/Source/BaseSwDialog.pas +++ b/Source/BaseSwDialog.pas @@ -101,6 +101,7 @@ type function CreateStyleVisitor(): TBaseSwStyleVisitor; virtual; function AllowEmptyResult(): Boolean; virtual; abstract; + function Wildchars(): Boolean; virtual; abstract; function ColorsEnabled(): Boolean; virtual; function GetBaseItemList(): TBaseSwItemList; virtual; @@ -116,6 +117,7 @@ type procedure LoadSettings(); virtual; procedure SaveSettings(); virtual; + procedure SettingsChanged(); virtual; procedure DrawItemText(ACanvas: TCanvas; AItem: TBaseSwItem; ARect: TRect; AState: TOwnerDrawState); virtual; protected @@ -241,6 +243,7 @@ end; procedure TfrmBaseSwDialog.LoadSettings(); begin cmbSearch.Items.Assign(MRUList); + SettingsChanged(); end; @@ -249,6 +252,13 @@ begin end; +procedure TfrmBaseSwDialog.SettingsChanged(); +begin + FInputFilter.Wildchars := Wildchars; + FSubFilter.Wildchars := Wildchars; +end; + + procedure TfrmBaseSwDialog.UpdateItemActions(); begin end; diff --git a/Source/BaseSwFilters.pas b/Source/BaseSwFilters.pas index ca9529a..58a8685 100644 --- a/Source/BaseSwFilters.pas +++ b/Source/BaseSwFilters.pas @@ -9,6 +9,7 @@ unit BaseSwFilters; interface uses Classes, + Masks, BaseSwObjects; @@ -29,10 +30,16 @@ type TBaseSwItemSimpleFilter = class(TBaseSwItemFilter) private FFilter: String; + FFilterMask: TMask; + FWildchars: Boolean; + function GetFilterMask(): TMask; procedure SetFilter(const Value: String); + protected + property FilterMask: TMask read GetFilterMask; public - property Filter: String read FFilter write SetFilter; + property Filter: String read FFilter write SetFilter; + property Wildchars: Boolean read FWildchars write FWildchars; end; @@ -71,18 +78,48 @@ end; { TBaseSwItemSimpleFilter } -procedure TBaseSwItemSimpleFilter.SetFilter(const Value: String); +function TBaseSwItemSimpleFilter.GetFilterMask(): TMask; begin - FFilter := LowerCase(Value); + if not Assigned(FFilterMask) then + FFilterMask := TMask.Create('*' + FFilter + '*'); + + Result := FFilterMask; +end; + + +procedure TBaseSwItemSimpleFilter.SetFilter(const Value: String); +var + newValue: string; + +begin + newValue := LowerCase(Value); + if newValue <> FFilter then + begin + FFilter := newValue; + FreeAndNil(FFilterMask); + end; end; { TBaseSwItemSimpleNameFilter } procedure TBaseSwItemSimpleNameFilter.VisitItem(const AItem: TBaseSwItem); +var + matches: Boolean; + itemName: string; + begin - if (Length(Filter) > 0) and - (AnsiPos(Filter, LowerCase(AItem.Name)) = 0) then - FilterItem(AItem); + if Length(Filter) > 0 then + begin + itemName := LowerCase(AItem.Name); + + if Wildchars then + matches := FilterMask.Matches(itemName) + else + matches := (AnsiPos(Filter, itemName) > 0); + + if not matches then + FilterItem(AItem); + end; end; end. diff --git a/Source/CmpSwConfiguration.dfm b/Source/CmpSwConfiguration.dfm index 8d8883b..1dbf24a 100644 --- a/Source/CmpSwConfiguration.dfm +++ b/Source/CmpSwConfiguration.dfm @@ -35,7 +35,7 @@ object frmCmpSwConfiguration: TfrmCmpSwConfiguration 338) object chkAllowEmptyResults: TCheckBox Left = 0 - Top = 320 + Top = 300 Width = 273 Height = 17 Anchors = [akLeft, akBottom] @@ -46,7 +46,7 @@ object frmCmpSwConfiguration: TfrmCmpSwConfiguration Left = 0 Top = 29 Width = 296 - Height = 280 + Height = 264 Style = lbVirtual Align = alTop ItemHeight = 16 @@ -85,6 +85,15 @@ object frmCmpSwConfiguration: TfrmCmpSwConfiguration Action = actRemove end end + object chkWildchars: TCheckBox + Left = 0 + Top = 320 + Width = 273 + Height = 17 + Anchors = [akLeft, akBottom] + Caption = 'Allow &wildchars in search criteria' + TabOrder = 3 + end end object tsAbout: TTabSheet Caption = 'About...' diff --git a/Source/CmpSwConfiguration.pas b/Source/CmpSwConfiguration.pas index 83da239..37a71e3 100644 --- a/Source/CmpSwConfiguration.pas +++ b/Source/CmpSwConfiguration.pas @@ -33,6 +33,7 @@ type btnDefault: TButton; btnOk: TButton; chkAllowEmptyResults: TCheckBox; + chkWildchars: TCheckBox; dlgColor: TColorDialog; ilsFilters: TImageList; imgAbout: TImage; @@ -116,13 +117,15 @@ end; procedure TfrmCmpSwConfiguration.LoadSettings(); begin - chkAllowEmptyResults.Checked := Settings.AllowEmptyResult; + chkAllowEmptyResults.Checked := Settings.Filter.AllowEmptyResult; + chkWildchars.Checked := Settings.Filter.Wildchars; end; procedure TfrmCmpSwConfiguration.SaveSettings(); begin - Settings.AllowEmptyResult := chkAllowEmptyResults.Checked; + Settings.Filter.AllowEmptyResult := chkAllowEmptyResults.Checked; + Settings.Filter.Wildchars := chkWildchars.Checked; Settings.Save(); end; @@ -157,7 +160,7 @@ begin try if TfrmCmpSwFilterConfiguration.Execute(newGroup) then begin - newGroup.Collection := Settings.Filter; + newGroup.Collection := Settings.FilterGroups; RefreshFilters(); end; finally @@ -219,21 +222,21 @@ end; procedure TfrmCmpSwConfiguration.RefreshFilters(); begin - lbFilters.Count := Settings.Filter.Count; + lbFilters.Count := Settings.FilterGroups.Count; end; procedure TfrmCmpSwConfiguration.lbFiltersData(Control: TWinControl; Index: Integer; var Data: String); begin - if (Index >= 0) and (Index < Settings.Filter.Count) then - Data := Settings.Filter[Index].Name; + if (Index >= 0) and (Index < Settings.FilterGroups.Count) then + Data := Settings.FilterGroups[Index].Name; end; procedure TfrmCmpSwConfiguration.lbFiltersDataObject(Control: TWinControl; Index: Integer; var DataObject: TObject); begin - if (Index >= 0) and (Index < Settings.Filter.Count) then - DataObject := Settings.Filter[Index]; + if (Index >= 0) and (Index < Settings.FilterGroups.Count) then + DataObject := Settings.FilterGroups[Index]; end; diff --git a/Source/CmpSwDialog.pas b/Source/CmpSwDialog.pas index b815ab0..f5dff9d 100644 --- a/Source/CmpSwDialog.pas +++ b/Source/CmpSwDialog.pas @@ -71,9 +71,11 @@ type function AllowEmptyResult(): Boolean; override; function ColorsEnabled(): Boolean; override; + function Wildchars(): Boolean; override; procedure LoadSettings(); override; procedure SaveSettings(); override; + procedure SettingsChanged(); override; procedure DrawItemText(ACanvas: TCanvas; AItem: TBaseSwItem; ARect: TRect; AState: TOwnerDrawState); override; procedure UpdateClassFilter(); @@ -252,7 +254,7 @@ begin FFilterCheckBoxes := TObjectList.Create(); FOtherGroup := TCmpSwFilterGroup.Create(nil); try - ClassFilter.Groups := Settings.Filter; + ClassFilter.Groups := Settings.FilterGroups; FOtherGroup.Name := 'Other'; FOtherGroup.Enabled := False; @@ -503,7 +505,7 @@ end; function TfrmCmpSwDialog.AllowEmptyResult(): Boolean; begin - Result := Settings.AllowEmptyResult; + Result := Settings.Filter.AllowEmptyResult; end; @@ -513,6 +515,12 @@ begin end; +function TfrmCmpSwDialog.Wildchars(): Boolean; +begin + Result := Settings.Filter.Wildchars; +end; + + procedure TfrmCmpSwDialog.SortExecute(Sender: TObject); begin (Sender as TAction).Checked := True; @@ -546,9 +554,16 @@ procedure TfrmCmpSwDialog.btnConfigurationClick(Sender: TObject); begin if TfrmCmpSwConfiguration.Execute() then begin + SettingsChanged(); UpdateClassFilter(); UpdateSubFilters(); end; end; +procedure TfrmCmpSwDialog.SettingsChanged; +begin + inherited; + +end; + end. diff --git a/Source/CmpSwSettings.pas b/Source/CmpSwSettings.pas index bbc5b05..5cbb6b5 100644 --- a/Source/CmpSwSettings.pas +++ b/Source/CmpSwSettings.pas @@ -34,11 +34,24 @@ type end; - TCmpSwSettings = class(TObject) + TCmpSwFilterSettings = class(TBaseSwSettings) private FAllowEmptyResult: Boolean; + FWildchars: Boolean; + protected + procedure Load(const ARegistry: TRegistry); override; + procedure Save(const ARegistry: TRegistry); override; + public + property AllowEmptyResult: Boolean read FAllowEmptyResult write FAllowEmptyResult; + property Wildchars: Boolean read FWildchars write FWildchars; + end; + + + TCmpSwSettings = class(TObject) + private FDialog: TCmpSwDialogSettings; - FFilter: TCmpSwFilterGroups; + FFilter: TCmpSwFilterSettings; + FFilterGroups: TCmpSwFilterGroups; FRegistryKey: String; protected @@ -56,9 +69,9 @@ type procedure ResetDefaults(); procedure Save(); - property AllowEmptyResult: Boolean read FAllowEmptyResult write FAllowEmptyResult; property Dialog: TCmpSwDialogSettings read FDialog write FDialog; - property Filter: TCmpSwFilterGroups read FFilter; + property Filter: TCmpSwFilterSettings read FFilter; + property FilterGroups: TCmpSwFilterGroups read FFilterGroups; end; function Settings(): TCmpSwSettings; @@ -105,7 +118,7 @@ end; procedure TCmpSwDialogSettings.Load(const ARegistry: TRegistry); var sMRU: String; - + begin ReadIntegerDef(ARegistry, FWidth, 'Width'); ReadIntegerDef(ARegistry, FHeight, 'Height'); @@ -139,6 +152,21 @@ begin end; +{ TCmpSwFilterSettings } +procedure TCmpSwFilterSettings.Load(const ARegistry: TRegistry); +begin + ReadBoolDef(ARegistry, FAllowEmptyResult, 'AllowEmptyResult'); + ReadBoolDef(ARegistry, FWildchars, 'Wildchars'); +end; + + +procedure TCmpSwFilterSettings.Save(const ARegistry: TRegistry); +begin + WriteBool(ARegistry, FAllowEmptyResult, 'AllowEmptyResult'); + WriteBool(ARegistry, FWildchars, 'Wildchars'); +end; + + { TCmpSwSettings } constructor TCmpSwSettings.Create(); begin @@ -148,7 +176,8 @@ begin '\ComponentSwitcher'; FDialog := TCmpSwDialogSettings.Create(); - FFilter := TCmpSwFilterGroups.Create(); + FFilter := TCmpSwFilterSettings.Create(); + FFilterGroups := TCmpSwFilterGroups.Create(); ResetDefaults(); Load(); @@ -157,6 +186,7 @@ end; destructor TCmpSwSettings.Destroy(); begin + FreeAndNil(FFilterGroups); FreeAndNil(FFilter); FreeAndNil(FDialog); @@ -177,7 +207,8 @@ begin if OpenKey(FRegistryKey, False) then begin FDialog.Load(ideRegistry); - LoadFilter('\Filter', Filter); + FFilter.Load(ideRegistry); + LoadFilter('\Filter', FilterGroups); CloseKey(); end; @@ -189,14 +220,15 @@ end; procedure TCmpSwSettings.ResetDefaults(); begin - AllowEmptyResult := True; + Filter.AllowEmptyResult := True; + Filter.Wildchars := True; Dialog.Width := 350; Dialog.Height := 530; { Fill default groups } - Filter.Clear(); - with Filter.Add() do + FilterGroups.Clear(); + with FilterGroups.Add() do begin Name := 'Actions'; @@ -205,7 +237,7 @@ begin Visible := True; end; - with Filter.Add() do + with FilterGroups.Add() do begin Name := 'Menu items'; @@ -213,7 +245,7 @@ begin Visible := True; end; - with Filter.Add() do + with FilterGroups.Add() do begin Name := 'Dataset fields'; @@ -222,7 +254,7 @@ begin Visible := True; end; - with Filter.Add() do + with FilterGroups.Add() do begin Name := 'DevEx Grid columns'; @@ -245,7 +277,8 @@ begin if OpenKey(FRegistryKey, True) then begin FDialog.Save(ideRegistry); - SaveFilter('\Filter', Filter); + FFilter.Save(ideRegistry); + SaveFilter('\Filter', FilterGroups); CloseKey(); end; diff --git a/Source/UnSwConfiguration.dfm b/Source/UnSwConfiguration.dfm index db0f315..d63ce8c 100644 --- a/Source/UnSwConfiguration.dfm +++ b/Source/UnSwConfiguration.dfm @@ -4,7 +4,7 @@ object frmUnSwConfiguration: TfrmUnSwConfiguration BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'UnitSwitcher Configuration' - ClientHeight = 272 + ClientHeight = 286 ClientWidth = 303 Color = clBtnFace Font.Charset = DEFAULT_CHARSET @@ -16,15 +16,15 @@ object frmUnSwConfiguration: TfrmUnSwConfiguration Position = poScreenCenter DesignSize = ( 303 - 272) + 286) PixelsPerInch = 96 TextHeight = 13 object pcConfiguration: TPageControl Left = 4 Top = 4 Width = 295 - Height = 231 - ActivePage = tsAbout + Height = 245 + ActivePage = tsGeneral Anchors = [akLeft, akTop, akRight, akBottom] TabOrder = 0 object tsGeneral: TTabSheet @@ -204,11 +204,11 @@ object frmUnSwConfiguration: TfrmUnSwConfiguration end object btnDefault: TButton Left = 8 - Top = 167 + Top = 183 Width = 109 Height = 25 Caption = 'Reset to &default' - TabOrder = 2 + TabOrder = 4 OnClick = btnDefaultClick end object chkAllowEmptyResults: TCheckBox @@ -217,6 +217,14 @@ object frmUnSwConfiguration: TfrmUnSwConfiguration Width = 273 Height = 17 Caption = 'Allow &empty results' + TabOrder = 2 + end + object chkWildchars: TCheckBox + Left = 8 + Top = 156 + Width = 273 + Height = 17 + Caption = 'Allow &wildchars in search criteria' TabOrder = 3 end end @@ -225,7 +233,7 @@ object frmUnSwConfiguration: TfrmUnSwConfiguration ImageIndex = 1 DesignSize = ( 287 - 203) + 217) object imgAbout: TImage Left = 8 Top = 8 @@ -311,7 +319,7 @@ object frmUnSwConfiguration: TfrmUnSwConfiguration end object lblBugReport: TLabel Left = 56 - Top = 177 + Top = 191 Width = 75 Height = 13 Cursor = crHandPoint @@ -327,7 +335,7 @@ object frmUnSwConfiguration: TfrmUnSwConfiguration end object lblShortcutKeys: TLabel Left = 56 - Top = 162 + Top = 176 Width = 127 Height = 13 Cursor = crHandPoint @@ -345,7 +353,7 @@ object frmUnSwConfiguration: TfrmUnSwConfiguration end object btnCancel: TButton Left = 224 - Top = 241 + Top = 255 Width = 75 Height = 25 Anchors = [akRight, akBottom] @@ -356,7 +364,7 @@ object frmUnSwConfiguration: TfrmUnSwConfiguration end object btnOk: TButton Left = 143 - Top = 241 + Top = 255 Width = 75 Height = 25 Anchors = [akRight, akBottom] diff --git a/Source/UnSwConfiguration.pas b/Source/UnSwConfiguration.pas index 80ac698..8585254 100644 --- a/Source/UnSwConfiguration.pas +++ b/Source/UnSwConfiguration.pas @@ -28,6 +28,7 @@ type btnUnitColor: TButton; chkAllowEmptyResults: TCheckBox; chkCustomColor: TCheckBox; + chkWildchars: TCheckBox; dlgColor: TColorDialog; imgAbout: TImage; lblBugReport: TLabel; @@ -122,6 +123,7 @@ begin lblProjectColor.Font.Color := Settings.Colors.ProjectSource; lblUnitColor.Font.Color := Settings.Colors.Units; chkAllowEmptyResults.Checked := Settings.Filter.AllowEmptyResult; + chkWildchars.Checked := Settings.Filter.Wildchars; end; @@ -133,6 +135,7 @@ begin Settings.Colors.ProjectSource := lblProjectColor.Font.Color; Settings.Colors.Units := lblUnitColor.Font.Color; Settings.Filter.AllowEmptyResult := chkAllowEmptyResults.Checked; + Settings.Filter.Wildchars := chkWildchars.Checked; Settings.Save(); end; diff --git a/Source/UnSwDialog.pas b/Source/UnSwDialog.pas index 1bb4424..c20fc2a 100644 --- a/Source/UnSwDialog.pas +++ b/Source/UnSwDialog.pas @@ -93,6 +93,7 @@ type function AllowEmptyResult(): Boolean; override; function ColorsEnabled(): Boolean; override; + function Wildchars(): Boolean; override; function GetBaseItemList(): TBaseSwItemList; override; function GetItemDisplayName(const AItem: TBaseSwItem): String; override; @@ -103,6 +104,7 @@ type procedure LoadSettings(); override; procedure SaveSettings(); override; + procedure SettingsChanged(); override; public class function Execute(const AUnits: TUnSwUnitList; const AFormsOnly: Boolean; @@ -653,6 +655,14 @@ begin end; +procedure TfrmUnSwDialog.SettingsChanged(); +begin + inherited; + + lstItems.Invalidate(); +end; + + procedure TfrmUnSwDialog.SortExecute(Sender: TObject); begin (Sender as TAction).Checked := True; @@ -708,7 +718,7 @@ end; procedure TfrmUnSwDialog.btnConfigurationClick(Sender: TObject); begin if TfrmUnSwConfiguration.Execute() then - lstItems.Invalidate(); + SettingsChanged(); end; @@ -724,6 +734,12 @@ begin end; +function TfrmUnSwDialog.Wildchars(): Boolean; +begin + Result := Settings.Filter.Wildchars; +end; + + function TfrmUnSwDialog.CreateStyleVisitor(): TBaseSwStyleVisitor; begin Result := TUnSwStyleVisitor.Create(); diff --git a/Source/UnSwSettings.pas b/Source/UnSwSettings.pas index 644cd07..3011c93 100644 --- a/Source/UnSwSettings.pas +++ b/Source/UnSwSettings.pas @@ -70,11 +70,13 @@ type TUnSwFilterSettings = class(TBaseSwSettings) private FAllowEmptyResults: Boolean; + FWildchars: Boolean; protected procedure Load(const ARegistry: TRegistry); override; procedure Save(const ARegistry: TRegistry); override; public property AllowEmptyResult: Boolean read FAllowEmptyResults write FAllowEmptyResults; + property Wildchars: Boolean read FWildchars write FWildchars; end; TUnSwResetSetting = (rsColors, rsFilter, rsForms, rsUnits); @@ -94,7 +96,7 @@ type constructor Create(); destructor Destroy(); override; - procedure ResetDefaults(const ASettings: TUnSwResetSettings = [rsColors, rsFilter]); + procedure ResetDefaults(const ASettings: TUnSwResetSettings = [rsColors, rsFilter, rsForms, rsUnits]); procedure Save(); property Colors: TUnSwColorSettings read FColors write FColors; @@ -244,12 +246,14 @@ end; procedure TUnSwFilterSettings.Load(const ARegistry: TRegistry); begin ReadBoolDef(ARegistry, FAllowEmptyResults, 'AllowEmptyResults'); + ReadBoolDef(ARegistry, FWildchars, 'Wildchars'); end; procedure TUnSwFilterSettings.Save(const ARegistry: TRegistry); begin WriteBool(ARegistry, FAllowEmptyResults, 'AllowEmptyResults'); + WriteBool(ARegistry, FWildchars, 'Wildchars'); end; @@ -313,7 +317,10 @@ begin end; if rsFilter in ASettings then + begin FFilter.AllowEmptyResult := False; + FFilter.Wildchars := True; + end; end; procedure TUnSwSettings.Load();