From: Erik B. <eb...@us...> - 2005-04-11 06:51:54
|
Update of /cvsroot/gexperts/gexperts/unstable/Src/OpenFile In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31405/OpenFile Modified Files: GX_OpenFile.dfm GX_OpenFile.pas GX_OpenFileConfig.dfm GX_OpenFileConfig.pas Log Message: Bugfixes Delphi 2005 support Fix memory leaks Store all settings in only one shared class Use actions in UI Index: GX_OpenFile.dfm =================================================================== RCS file: /cvsroot/gexperts/gexperts/unstable/Src/OpenFile/GX_OpenFile.dfm,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- GX_OpenFile.dfm 10 Apr 2005 21:21:21 -0000 1.3 +++ GX_OpenFile.dfm 11 Apr 2005 06:51:40 -0000 1.4 @@ -44,7 +44,6 @@ Height = 344 ActivePage = tabSearchPath Align = alClient - TabIndex = 0 TabOrder = 1 OnChange = pcUnitsChange object tabSearchPath: TTabSheet @@ -64,9 +63,8 @@ Top = 3 Width = 125 Height = 25 - Caption = 'A&dd to Favorites' + Action = actAddToFavorites TabOrder = 0 - OnClick = AddUnitToFavoritesClick end end object pnlSearchPath: TPanel @@ -153,9 +151,8 @@ Top = 3 Width = 125 Height = 25 - Caption = 'A&dd to Favorites' + Action = actAddToFavorites TabOrder = 0 - OnClick = AddUnitToFavoritesClick end end end @@ -203,9 +200,8 @@ Top = 3 Width = 125 Height = 25 - Caption = 'A&dd to Favorites' + Action = actAddToFavorites TabOrder = 0 - OnClick = AddUnitToFavoritesClick end end end @@ -253,18 +249,16 @@ Top = 3 Width = 125 Height = 25 - Caption = 'D&elete from Favorites' + Action = actFavDeleteFromFavorites TabOrder = 0 - OnClick = actFavDeleteExecute end object btnFavoriteAddToFavorites: TButton Left = 4 Top = 3 Width = 125 Height = 25 - Caption = 'A&dd to Favorites...' + Action = actFavAddToFavorites TabOrder = 1 - OnClick = btnFavoriteAddToFavoritesClick end end end @@ -285,18 +279,16 @@ Top = 3 Width = 125 Height = 25 - Caption = '&Clear Recent List' + Action = actClearRecentList TabOrder = 0 - OnClick = btnClearRecentClick end object btnRecentAddToFavorites: TButton Left = 4 Top = 3 Width = 125 Height = 25 - Caption = 'A&dd to Favorites' + Action = actAddToFavorites TabOrder = 1 - OnClick = AddUnitToFavoritesClick end end object pnlRecent: TPanel @@ -375,7 +367,7 @@ Height = 21 Style = csDropDownList Anchors = [akTop, akRight] - ItemHeight = 13 + ItemHeight = 0 TabOrder = 1 OnChange = cbxTypeChange end @@ -415,10 +407,10 @@ TabOrder = 1 OnClick = btnOKClick end - object cbDefault: TCheckBox + object chkDefault: TCheckBox Left = 8 Top = 10 - Width = 73 + Width = 185 Height = 17 Caption = 'Default' TabOrder = 0 @@ -519,4 +511,39 @@ Left = 16 Top = 112 end + object ActionList: TActionList + Left = 16 + Top = 144 + object actAddToFavorites: TAction + Caption = 'A&dd to Favorites' + OnExecute = actAddToFavoritesExecute + end + object actMatchPrefix: TAction + Caption = 'actMatchPrefix' + end + object actMatchAnywhere: TAction + Caption = 'actMatchAnywhere' + end + object actConfig: TAction + Caption = 'actConfig' + end + object sctHelp: TAction + Caption = 'sctHelp' + end + object sctOpenFile: TAction + Caption = 'sctOpenFile' + end + object actFavAddToFavorites: TAction + Caption = 'A&dd to Favorites...' + OnExecute = actFavAddToFavoritesExecute + end + object actFavDeleteFromFavorites: TAction + Caption = 'Delete from Favorites' + OnExecute = actFavDeleteFromFavoritesExecute + end + object actClearRecentList: TAction + Caption = '&Clear Recent List' + OnExecute = actClearRecentListExecute + end + end end Index: GX_OpenFileConfig.pas =================================================================== RCS file: /cvsroot/gexperts/gexperts/unstable/Src/OpenFile/GX_OpenFileConfig.pas,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- GX_OpenFileConfig.pas 10 Apr 2005 21:21:21 -0000 1.4 +++ GX_OpenFileConfig.pas 11 Apr 2005 06:51:42 -0000 1.5 @@ -4,10 +4,10 @@ uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, Buttons, ComCtrls, ExtCtrls, SpinIntEdit; + StdCtrls, Buttons, ComCtrls, ExtCtrls, GX_ConfigurationInfo; type - //TODO 3 -cCleanup -oAnyone: Move configuration main storage to a single place in the expert class TIDEOverride = class(TStringList) + TIDEOverride = class(TStringList) private function GetOverrideOpenUnit: Boolean; procedure SetOverrideOpenUnit(Value: Boolean); @@ -55,6 +55,28 @@ end; TFileTypes = class(TCollection) + private + function GetItem(Index: Integer): TFileType; + public + property Items[Index: Integer]: TFileType read GetItem; default; + end; + + TOpenFileSettings = class(TObject) + private + procedure LoadDefaultSettings(FileTypes: TFileTypes); + function FileTypeKey: string; + public + MatchAnywhere: Boolean; + DefaultFileType: string; + IDEOverride: TIDEOverride; + FileTypes: TFileTypes; + ConfigurationKey: string; + LastTabIndex: Integer; + constructor Create; + destructor Destroy; override; + procedure LoadFromRegistry(Settings: TGExpertsSettings); + procedure SaveToRegistry; overload; + procedure SaveToRegistry(Settings: TGExpertsSettings); overload; end; TfmOpenFileConfig = class(TForm) @@ -94,7 +116,6 @@ edtMaxRecentFiles: TEdit; procedure cbxCustomDirectoryListClick(Sender: TObject); procedure btnTypeAddClick(Sender: TObject); - procedure FormShow(Sender: TObject); procedure lbxTypeListClick(Sender: TObject); procedure btnOKClick(Sender: TObject); procedure btnTypeDeleteClick(Sender: TObject); @@ -103,33 +124,28 @@ procedure btnDirectoryDeleteClick(Sender: TObject); procedure btnDirectoryReplaceClick(Sender: TObject); procedure lbxDirectoryListClick(Sender: TObject); - procedure cbxDefaultFileTypesChange(Sender: TObject); private - FFileTypes: TFileTypes; FCurrentFileType: TFileType; - FDefaultFileType: string; - FIDEOverride: TIDEOverride; + FSettings: TOpenFileSettings; procedure SaveConfigValue; - function GetMatchAnywhere: Boolean; - procedure SetMatchAnywhere(Value: Boolean); function SelectDirectory: Boolean; + procedure UseSettings(Settings: TOpenFileSettings); + procedure SaveSettings(Settings: TOpenFileSettings); + function GetFileTypes: TFileTypes; + function IDEOverride: TIDEOverride; public - function LoadSettings(const ConfigurationKey: string; var FileTypes: TFileTypes): TFileTypes; - procedure SaveSettings(const ConfigurationKey: string; ftFileTypes: TFileTypes; - const SaveRecent: Boolean = False); - procedure LoadDefaultSettings(ftFileTypes: TFileTypes); - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - property FileTypes: TFileTypes read FFileTypes write FFileTypes; - property DefaultFileType: string read FDefaultFileType write FDefaultFileType; - property MatchAnywhere: Boolean read GetMatchAnywhere write SetMatchAnywhere; - property IDEOverride: TIDEOverride read FIDEOverride write FIDEOverride; + class function ExecuteWithSettings(Settings: TOpenFileSettings): Boolean; + property FileTypes: TFileTypes read GetFileTypes; end; implementation uses - GX_GenericUtils, GX_ConfigurationInfo; + GX_GenericUtils, IniFiles; + +{$R *.DFM} + +{ TFileType } constructor TFileType.Create(Collection: TCollection); begin @@ -151,7 +167,253 @@ inherited; end; -{$R *.DFM} +{ TFileTypes } + +function TFileTypes.GetItem(Index: Integer): TFileType; +begin + Assert((Index > -1) and (Index < Count)); + Result := inherited GetItem(Index) as TFileType; +end; + +{TIDEOverride} + +function TIDEOverride.GetOverrideOpenUnit: Boolean; +begin + Result := (Values['OverrideOpenUnit'] = 'True'); +end; + +procedure TIDEOverride.SetOverrideOpenUnit(Value: Boolean); +begin + if Values['OverrideOpenUnit'] = '' then + Add('OverrideOpenUnit=' + BooleanString(Value)) + else + Values['OverrideOpenUnit'] := BooleanString(Value); +end; + +function TIDEOverride.GetOverrideOpenForm: Boolean; +begin + Result := (Values['OverrideOpenForm'] = 'True'); +end; + +procedure TIDEOverride.SetOverrideOpenForm(Value: Boolean); +begin + if Values['OverrideOpenForm'] = '' then + Add('OverrideOpenForm=' + BooleanString(Value)) + else + Values['OverrideOpenForm'] := BooleanString(Value); +end; + +function TIDEOverride.GetOverrideOpenProject: Boolean; +begin + Result := (Values['OverrideOpenProject'] = 'True'); +end; + +procedure TIDEOverride.SetOverrideOpenProject(Value: Boolean); +begin + if Values['OverrideOpenProject'] = '' then + Add('OverrideOpenProject=' + BooleanString(Value)) + else + Values['OverrideOpenProject'] := BooleanString(Value); +end; + +function TIDEOverride.BooleanString(Value: Boolean): string; +begin + if Value then + Result := 'True' + else + Result := 'False'; +end; + +function TIDEOverride.GetOpenUnitDefaultType: string; +begin + Result := Values['OverrideOpenUnitDefault']; +end; + +procedure TIDEOverride.SetOpenUnitDefaultType(const Value: string); +begin + if Values['OverrideOpenUnitDefault'] = '' then + Add('OverrideOpenUnitDefault=' + Value) + else + Values['OverrideOpenUnitDefault'] := Value; +end; + +function TIDEOverride.GetOpenProjectDefaultType: string; +begin + Result := Values['OverrideOpenProjectDefault']; +end; + +procedure TIDEOverride.SetOpenProjectDefaultType(const Value: string); +begin + if Values['OverrideOpenProjectDefault'] = '' then + Add('OverrideOpenProjectDefault=' + Value) + else + Values['OverrideOpenProjectDefault'] := Value; +end; + +function TIDEOverride.GetOpenFormDefaultType: string; +begin + Result := Values['OverrideOpenFormDefault']; +end; + +procedure TIDEOverride.SetOpenFormDefaultType(const Value: string); +begin + if Values['OverrideOpenFormDefault'] = '' then + Add('OverrideOpenFormDefault=' + Value) + else + Values['OverrideOpenFormDefault'] := Value; +end; + +{ TOpenFileSettings } + +constructor TOpenFileSettings.Create; +begin + inherited; + IDEOverride := TIDEOverride.Create; + FileTypes := TFileTypes.Create(TFileType); +end; + +destructor TOpenFileSettings.Destroy; +begin + FreeAndNil(IDEOverride); + FreeAndNil(FileTypes); + inherited; +end; + +function TOpenFileSettings.FileTypeKey: string; +begin + Result := ConfigurationKey + '\FileTypes'; +end; + +procedure TOpenFileSettings.LoadDefaultSettings(FileTypes: TFileTypes); +var + FileType: TFileType; +begin + FileTypes.Clear; + FileType := TFileType.Create(FileTypes); + FileType.FileTypeName := 'Delphi Units'; + FileType.Paths.Text := ''; + FileType.Extensions := '*.pas;*.inc'; + FileType.CustomDirectories := False; + FileType.Recursive := False; + FileType.RecentFiles.Text := ''; + FileType.MaxRecentFiles := 20; + + FileType := TFileType.Create(FileTypes); + FileType.FileTypeName := 'Delphi Forms'; + FileType.Paths.Text := ''; + FileType.Extensions := '*.dfm;*.nfm;*.xfm'; + FileType.CustomDirectories := False; + FileType.Recursive := False; + FileType.RecentFiles.Text := ''; + FileType.MaxRecentFiles := 20; + + FileType := TFileType.Create(FileTypes); + FileType.FileTypeName := 'Delphi Projects'; + FileType.Paths.Text := ''; + FileType.Extensions := '*.dpr;*.dpk;*.bpg;*.bdsproj'; + FileType.CustomDirectories := False; + FileType.Recursive := False; + FileType.RecentFiles.Text := ''; + FileType.MaxRecentFiles := 20; +end; + +procedure TOpenFileSettings.LoadFromRegistry(Settings: TGExpertsSettings); +const + InvalidTypeName = '<invalid>'; +var + NumFileTypes: Integer; + i: Integer; + KeyString: string; + FileType: TFileType; + TypeName: string; +begin + Assert(Assigned(Settings)); + FileTypes.Clear; + MatchAnywhere := Settings.ReadBool(ConfigurationKey, 'MatchAnywhere', True); + IDEOverride.Text := Settings.ReadString(ConfigurationKey, 'IDEOverride', ''); + DefaultFileType := Settings.ReadString(ConfigurationKey, 'DefaultFileType', ''); + NumFileTypes := Settings.ReadInteger(ConfigurationKey, 'NumberFileTypes', 0); + LastTabIndex := Settings.ReadInteger(ConfigurationKey, 'LastTabIndex', 0); + IDEOverride.CommaText := Settings.ReadString(ConfigurationKey, 'IDEOverride', ''); + if NumFileTypes > 0 then + begin + for i := 0 to NumFileTypes - 1 do + begin + KeyString := IntToStr(i); + TypeName := Settings.ReadString(FileTypeKey, 'FileType' + KeyString, InvalidTypeName); + if TypeName = InvalidTypeName then + Continue; + FileType := TFileType.Create(FileTypes); + FileType.FileTypeName := TypeName; + FileType.Paths.Text := Settings.ReadString(FileTypeKey, 'Paths' + KeyString, ''); + FileType.Extensions := Settings.ReadString(FileTypeKey, 'Extensions' + KeyString, '*.*'); + FileType.CustomDirectories := Settings.ReadBool(FileTypeKey, 'CustomDirectory' + KeyString, False); + FileType.Recursive := Settings.ReadBool(FileTypeKey, 'RecursiveDirectory' + KeyString, False); + FileType.RecentFiles.Text := Settings.ReadString(FileTypeKey, 'RecentFiles' + KeyString, ''); + FileType.Favorites.Text := Settings.ReadString(FileTypeKey, 'Favorites' + KeyString, ''); + FileType.MaxRecentFiles := Settings.ReadInteger(FileTypeKey, 'MaxRecentFiles' + KeyString, 20); + end; + end; + if FileTypes.Count < 1 then + LoadDefaultSettings(FileTypes); +end; + +procedure TOpenFileSettings.SaveToRegistry(Settings: TGExpertsSettings); +var + j: Integer; + i: Integer; + FileType: TFileType; + KeyString: string; +begin + // Do not localize any of the following lines + Settings.WriteBool(ConfigurationKey, 'MatchAnywhere', MatchAnywhere); + Settings.WriteString(ConfigurationKey, 'DefaultFileType', DefaultFileType); + Settings.WriteInteger(ConfigurationKey, 'NumberFileTypes', FileTypes.Count); + Settings.WriteString(ConfigurationKey, 'IDEOverride', IDEOverride.CommaText); + Settings.WriteInteger(ConfigurationKey, 'LastTabIndex', LastTabIndex); + for i := 0 to FileTypes.Count - 1 do + begin + FileType := FileTypes[i]; + KeyString := IntToStr(i); + Settings.WriteString(FileTypeKey, 'FileType' + KeyString, FileType.FileTypeName); + Settings.WriteString(FileTypeKey, 'Paths' + KeyString, FileType.Paths.Text); + Settings.WriteString(FileTypeKey, 'Extensions' + KeyString, FileType.Extensions); + Settings.WriteBool(FileTypeKey, 'CustomDirectory' + KeyString, FileType.CustomDirectories); + Settings.WriteBool(FileTypeKey, 'RecursiveDirectory' + KeyString, FileType.Recursive); + Settings.WriteInteger(FileTypeKey, 'MaxRecentFiles' + KeyString, FileType.MaxRecentFiles); + Settings.WriteString(FileTypeKey, 'Favorites' + KeyString, FileType.Favorites.Text); + for j := FileType.RecentFiles.Count - 1 downto FileType.MaxRecentFiles do + FileType.RecentFiles.Delete(j); + Settings.WriteString(FileTypeKey, 'RecentFiles' + KeyString, FileType.RecentFiles.Text); + end; +end; + +procedure TOpenFileSettings.SaveToRegistry; +var + Registry: TGExpertsSettings; +begin + Registry := TGExpertsSettings.Create(''); + try + SaveToRegistry(Registry); + finally + FreeAndNil(Registry); + end; +end; + +{ TfmOpenFileConfig } + +function TfmOpenFileConfig.GetFileTypes: TFileTypes; +begin + Assert(Assigned(FSettings)); + Result := FSettings.FileTypes; +end; + +function TfmOpenFileConfig.IDEOverride: TIDEOverride; +begin + Assert(Assigned(FSettings)); + Assert(Assigned(FSettings.IDEOverride)); + Result := FSettings.IDEOverride; +end; procedure TfmOpenFileConfig.cbxCustomDirectoryListClick(Sender: TObject); begin @@ -168,55 +430,30 @@ procedure TfmOpenFileConfig.btnTypeAddClick(Sender: TObject); var GroupName: string; - ftFileType: TFileType; + FileType: TFileType; begin if InputQuery('File Group Name', 'File Group Name', GroupName) and (GroupName <> '') then begin if lbxTypeList.Items.IndexOf(GroupName) = -1 then begin - ftFileType := TFileType(FFileTypes.Add); - ftFileType.FileTypeName := GroupName; - lbxTypeList.Items.Add(ftFileType.FileTypeName); - lbxTypeList.ItemIndex := lbxTypeList.Items.IndexOf(ftFileType.FileTypeName); + FileType := TFileType.Create(FileTypes); + FileType.FileTypeName := GroupName; + lbxTypeList.Items.Add(FileType.FileTypeName); + lbxTypeList.ItemIndex := lbxTypeList.Items.IndexOf(FileType.FileTypeName); lbxTypeList.OnClick(lbxTypeList); end; end; end; -procedure TfmOpenFileConfig.FormShow(Sender: TObject); -var - i: Integer; -begin - for i := 0 to FFileTypes.Count - 1 do - lbxTypeList.Items.Add(TFileType(FFileTypes.Items[i]).FileTypeName); - lbxTypeList.ItemIndex := 0; - lbxTypeList.OnClick(lbxTypeList); - - for i := 0 to FFileTypes.Count - 1 do - begin - cbxDefaultFileTypes.Items.Add(TFileType(FFileTypes.Items[i]).FileTypeName); - cbxViewUnitType.Items.Add(TFileType(FFileTypes.Items[i]).FileTypeName); - cbxViewFormType.Items.Add(TFileType(FFileTypes.Items[i]).FileTypeName); - cbxOpenProjectType.Items.Add(TFileType(FFileTypes.Items[i]).FileTypeName); - end; - cbxDefaultFileTypes.ItemIndex := cbxDefaultFileTypes.Items.IndexOf(FDefaultFileType); - cbxViewUnitType.ItemIndex := cbxViewUnitType.Items.IndexOf(FIDEOverride.OpenUnitDefaultType); - cbxViewFormType.ItemIndex := cbxViewFormType.Items.IndexOf(FIDEOverride.OpenFormDefaultType); - cbxOpenProjectType.ItemIndex := cbxOpenProjectType.Items.IndexOf(FIDEOverride.OpenProjectDefaultType); - chkOverrideViewUnit.Checked := FIDEOverride.OverrideOpenUnit; - chkOverrideViewForm.Checked := FIDEOverride.OverrideOpenForm; - chkOverrideOpenProject.Checked := FIDEOverride.OverrideOpenProject; -end; - procedure TfmOpenFileConfig.lbxTypeListClick(Sender: TObject); var i: Integer; begin SaveConfigValue; - for i := 0 to FFileTypes.Count - 1 do - if lbxTypeList.Items[lbxTypeList.ItemIndex] = TFileType(FFileTypes.Items[i]).FileTypeName then + for i := 0 to FileTypes.Count - 1 do + if lbxTypeList.Items[lbxTypeList.ItemIndex] = FileTypes[i].FileTypeName then begin - FCurrentFileType := TFileType(FFileTypes.Items[i]); + FCurrentFileType := FileTypes[i]; Break; end; edtExtension.Text := FCurrentFileType.Extensions; @@ -242,31 +479,17 @@ procedure TfmOpenFileConfig.btnOKClick(Sender: TObject); begin if chkOverrideViewUnit.Checked and (cbxViewUnitType.ItemIndex = -1) then - begin - MessageDlg('A default Type must be assigned for overriding the View Unit', mtError, [mbOK], 0); - Abort; - end; + raise Exception.Create('A default type must be assigned to override View Unit'); if chkOverrideViewForm.Checked and (cbxViewFormType.ItemIndex = -1) then - begin - MessageDlg('A default Type must be assigned for overriding the View Form', mtError, [mbOK], 0); - Abort; - end; + raise Exception.Create('A default type must be assigned to override View Form'); if chkOverrideOpenProject.Checked and (cbxOpenProjectType.ItemIndex = -1) then - begin - MessageDlg('A default Type must be assigned for overriding the OpenProject', mtError, [mbOK], 0); - Abort; - end; + raise Exception.Create('A default type must be assigned to override Open Project'); SaveConfigValue; - FIDEOverride.Clear; - FIDEOverride.OverrideOpenUnit := chkOverrideViewUnit.Checked; - FIDEOverride.OpenUnitDefaultType := cbxViewUnitType.Text; - FIDEOverride.OverrideOpenForm := chkOverrideViewForm.Checked; - FIDEOverride.OpenFormDefaultType := cbxViewFormType.Text; - FIDEOverride.OverrideOpenProject := chkOverrideOpenProject.Checked; - FIDEOverride.OpenProjectDefaultType := cbxOpenProjectType.Text; + SaveSettings(FSettings); + ModalResult := mrOK; end; procedure TfmOpenFileConfig.btnTypeDeleteClick(Sender: TObject); @@ -276,10 +499,10 @@ if (lbxTypeList.Items.Count > 0) and (MessageDlg('Delete selected item?', mtConfirmation, [mbYes, mbNo], 0) = mrYes) then begin - for i := 0 to FFileTypes.Count - 1 do - if lbxTypeList.Items[lbxTypeList.ItemIndex] = TFileType(FFileTypes.Items[i]).FileTypeName then + for i := 0 to FileTypes.Count - 1 do + if lbxTypeList.Items[lbxTypeList.ItemIndex] = FileTypes[i].FileTypeName then begin - FFileTypes.Delete(i); + FileTypes.Delete(i); lbxTypeList.Items.Delete(lbxTypeList.ItemIndex); FCurrentFileType := nil; if lbxTypeList.Items.Count > 0 then @@ -330,237 +553,75 @@ edtDirectory.Text := lbxDirectoryList.Items[lbxDirectoryList.ItemIndex]; end; -function TfmOpenFileConfig.LoadSettings(const ConfigurationKey: string; var FileTypes: TFileTypes): TFileTypes; +function TfmOpenFileConfig.SelectDirectory: Boolean; var - i: Integer; - Settings: TGExpertsSettings; - ftFileType: TFileType; - NumFileTypes: Integer; - KeyString: string; + NewDirectory: string; begin - // Do not localize any of the following lines - //TODO 3 -cCleanup -oAnyone: Don't .Create here, to discourage leaks FileTypes := TFileTypes.Create(TFileType); - IDEOverride := TIDEOverride.Create; - Settings := TGExpertsSettings.Create(ConfigInfo.GExpertsIdeRootRegistryKey); - try - chkMatchAnywhere.Checked := Settings.ReadBool(ConfigurationKey, 'MatchAnywhere', True); - FIDEOverride.CommaText := Settings.ReadString(ConfigurationKey, 'IDEOverride', ''); - FDefaultFileType := Settings.ReadString(ConfigurationKey, 'DefaultFileType', ''); - NumFileTypes := Settings.ReadInteger(ConfigurationKey, 'NumberFileTypes', 0); - if NumFileTypes > 0 then - for i := 0 to NumFileTypes - 1 do - begin - KeyString := IntToStr(i); - ftFileType := TFileType(FileTypes.add); - ftFileType.FileTypeName := Settings.ReadString(ConfigurationKey, 'FileType' + KeyString, 'Default ' + KeyString); - ftFileType.Paths.Text := Settings.ReadString(ConfigurationKey, 'Paths' + KeyString, 'C:\'); - ftFileType.Extensions := Settings.ReadString(ConfigurationKey, 'Extensions' + KeyString, '*.*'); - ftFileType.CustomDirectories := Settings.ReadBool(ConfigurationKey, 'CustomDirectory' + KeyString, False); - ftFileType.Recursive := Settings.ReadBool(ConfigurationKey, 'RecursiveDirectory' + KeyString, False); - ftFileType.RecentFiles.Text := Settings.ReadString(ConfigurationKey, 'RecentFiles' + KeyString, ''); - ftFileType.Favorites.Text := Settings.ReadString(ConfigurationKey, 'Favorites' + KeyString, ''); - ftFileType.MaxRecentFiles := Settings.ReadInteger(ConfigurationKey, 'MaxRecentFiles' + KeyString, 20); - end - else - LoadDefaultSettings(FileTypes); - Result := FileTypes; - finally - FreeAndNil(Settings); - end; + NewDirectory := Trim(edtDirectory.Text); + Result := GetDirectory(NewDirectory); + if Result then + edtDirectory.Text := AddTrailingPathDelimiter(NewDirectory); end; -procedure TfmOpenFileConfig.SaveSettings(const ConfigurationKey: string; - ftFileTypes: TFileTypes; const SaveRecent: Boolean = False); +class function TfmOpenFileConfig.ExecuteWithSettings(Settings: TOpenFileSettings): Boolean; var - j: Integer; - Settings: TGExpertsSettings; - i: Integer; - ftFileType: TFileType; - KeyString: string; + Form: TfmOpenFileConfig; begin - // Do not localize any of the following lines - Settings := TGExpertsSettings.Create(ConfigInfo.GExpertsIdeRootRegistryKey); + Assert(Assigned(Settings)); + Form := TfmOpenFileConfig.Create(nil); try - Settings.WriteBool(ConfigurationKey, 'MatchAnywhere', chkMatchAnywhere.Checked); - Settings.WriteString(ConfigurationKey, 'DefaultFileType', FDefaultFileType); - Settings.WriteInteger(ConfigurationKey, 'NumberFileTypes', ftFileTypes.Count); - Settings.WriteString(ConfigurationKey, 'IDEOverride', FIDEOverride.CommaText); - for i := 0 to ftFileTypes.Count - 1 do + Form.UseSettings(Settings); + Result := Form.ShowModal = mrOK; + if Result then begin - ftFileType := TFileType(ftFileTypes.Items[i]); - KeyString := IntToStr(i); - Settings.WriteString(ConfigurationKey, 'FileType' + KeyString, ftFileType.FileTypeName); - Settings.WriteString(ConfigurationKey, 'Paths' + KeyString, ftFileType.Paths.Text); - Settings.WriteString(ConfigurationKey, 'Extensions' + KeyString, ftFileType.Extensions); - Settings.WriteBool(ConfigurationKey, 'CustomDirectory' + KeyString, ftFileType.CustomDirectories); - Settings.WriteBool(ConfigurationKey, 'RecursiveDirectory' + KeyString, ftFileType.Recursive); - Settings.WriteInteger(ConfigurationKey, 'MaxRecntFiles' + KeyString, ftFileType.MaxRecentFiles); - Settings.WriteString(ConfigurationKey, 'Favorites' + KeyString, ftFileType.Favorites.Text); - if SaveRecent then - begin - for j := ftFileType.RecentFiles.Count - 1 downto ftFileType.MaxRecentFiles do - ftFileType.RecentFiles.Delete(j); - Settings.WriteString(ConfigurationKey, 'RecentFiles' + KeyString, ftFileType.RecentFiles.Text); - end; + Form.SaveSettings(Settings); + Settings.SaveToRegistry; end; finally - FreeAndNil(Settings); + FreeAndNil(Form); end; end; -procedure TfmOpenFileConfig.cbxDefaultFileTypesChange(Sender: TObject); -begin - FDefaultFileType := cbxDefaultFileTypes.Items[cbxDefaultFileTypes.ItemIndex]; -end; - -function TfmOpenFileConfig.GetMatchAnywhere: Boolean; -begin - Result := chkMatchAnywhere.Checked; -end; - -procedure TfmOpenFileConfig.SetMatchAnywhere(Value: Boolean); -begin - chkMatchAnywhere.Checked := Value; -end; - -procedure TfmOpenFileConfig.LoadDefaultSettings(ftFileTypes: TFileTypes); -var - ftFileType: TFileType; +procedure TfmOpenFileConfig.SaveSettings(Settings: TOpenFileSettings); begin - ftFileType := TFileType(ftFileTypes.Add); - ftFileType.FileTypeName := 'Delphi Units'; - ftFileType.Paths.Text := ''; - ftFileType.Extensions := '*.pas;*.inc'; - ftFileType.CustomDirectories := False; - ftFileType.Recursive := False; - ftFileType.RecentFiles.Text := ''; - ftFileType.MaxRecentFiles := 20; - - ftFileType := TFileType(ftFileTypes.Add); - ftFileType.FileTypeName := 'Delphi Forms'; - ftFileType.Paths.Text := ''; - ftFileType.Extensions := '*.dfm;*.nfm;*.xfm'; - ftFileType.CustomDirectories := False; - ftFileType.Recursive := False; - ftFileType.RecentFiles.Text := ''; - ftFileType.MaxRecentFiles := 20; + Assert(Assigned(Settings)); + Settings.MatchAnywhere := chkMatchAnywhere.Checked; + Settings.DefaultFileType := cbxDefaultFileTypes.Text; - ftFileType := TFileType(ftFileTypes.Add); - ftFileType.FileTypeName := 'Delphi Projects'; - ftFileType.Paths.Text := ''; - ftFileType.Extensions := '*.dpr;*.dpk;*.bpg;*.bdsproj'; - ftFileType.CustomDirectories := False; - ftFileType.Recursive := False; - ftFileType.RecentFiles.Text := ''; - ftFileType.MaxRecentFiles := 20; + IDEOverride.Clear; + IDEOverride.OverrideOpenUnit := chkOverrideViewUnit.Checked; + IDEOverride.OpenUnitDefaultType := cbxViewUnitType.Text; + IDEOverride.OverrideOpenForm := chkOverrideViewForm.Checked; + IDEOverride.OpenFormDefaultType := cbxViewFormType.Text; + IDEOverride.OverrideOpenProject := chkOverrideOpenProject.Checked; + IDEOverride.OpenProjectDefaultType := cbxOpenProjectType.Text; end; -function TfmOpenFileConfig.SelectDirectory: Boolean; +procedure TfmOpenFileConfig.UseSettings(Settings: TOpenFileSettings); var - NewDirectory: string; -begin - NewDirectory := Trim(edtDirectory.Text); - Result := GetDirectory(NewDirectory); - if Result then - edtDirectory.Text := AddTrailingPathDelimiter(NewDirectory); -end; - -constructor TfmOpenFileConfig.Create(AOwner: TComponent); -begin - inherited; - FIDEOverride := TIDEOverride.Create; -end; - -destructor TfmOpenFileConfig.Destroy; -begin - FIDEOverride.Free; - inherited; -end; - -function TIDEOverride.GetOverrideOpenUnit: Boolean; -begin - Result := (Values['OverrideOpenUnit'] = 'True'); -end; - -procedure TIDEOverride.SetOverrideOpenUnit(Value: Boolean); -begin - if Values['OverrideOpenUnit'] = '' then - Add('OverrideOpenUnit=' + BooleanString(Value)) - else - Values['OverrideOpenUnit'] := BooleanString(Value); -end; - -function TIDEOverride.GetOverrideOpenForm: Boolean; -begin - Result := (Values['OverrideOpenForm'] = 'True'); -end; - -procedure TIDEOverride.SetOverrideOpenForm(Value: Boolean); -begin - if Values['OverrideOpenForm'] = '' then - Add('OverrideOpenForm=' + BooleanString(Value)) - else - Values['OverrideOpenForm'] := BooleanString(Value); -end; - -function TIDEOverride.GetOverrideOpenProject: Boolean; -begin - Result := (Values['OverrideOpenProject'] = 'True'); -end; - -procedure TIDEOverride.SetOverrideOpenProject(Value: Boolean); -begin - if Values['OverrideOpenProject'] = '' then - Add('OverrideOpenProject=' + BooleanString(Value)) - else - Values['OverrideOpenProject'] := BooleanString(Value); -end; - -function TIDEOverride.BooleanString(Value: Boolean): string; -begin - if Value then - Result := 'True' - else - Result := 'False'; -end; - -function TIDEOverride.GetOpenUnitDefaultType: string; -begin - Result := Values['OverrideOpenUnitDefault']; -end; - -procedure TIDEOverride.SetOpenUnitDefaultType(const Value: string); -begin - if Values['OverrideOpenUnitDefault'] = '' then - Add('OverrideOpenUnitDefault=' + Value) - else - Values['OverrideOpenUnitDefault'] := Value; -end; - -function TIDEOverride.GetOpenProjectDefaultType: string; + i: Integer; begin - Result := Values['OverrideOpenProjectDefault']; -end; + Assert(Assigned(Settings)); + FSettings := Settings; + chkMatchAnywhere.Checked := Settings.MatchAnywhere; -procedure TIDEOverride.SetOpenProjectDefaultType(const Value: string); -begin - if Values['OverrideOpenProjectDefault'] = '' then - Add('OverrideOpenProjectDefault=' + Value) - else - Values['OverrideOpenProjectDefault'] := Value; -end; + for i := 0 to FileTypes.Count - 1 do + lbxTypeList.Items.Add(FileTypes[i].FileTypeName); + lbxTypeList.ItemIndex := 0; + lbxTypeList.OnClick(lbxTypeList); -function TIDEOverride.GetOpenFormDefaultType: string; -begin - Result := Values['OverrideOpenFormDefault']; -end; + cbxDefaultFileTypes.Items.Assign(lbxTypeList.Items); + cbxViewUnitType.Items.Assign(cbxDefaultFileTypes.Items); + cbxViewFormType.Items.Assign(cbxDefaultFileTypes.Items); + cbxOpenProjectType.Items.Assign(cbxDefaultFileTypes.Items); -procedure TIDEOverride.SetOpenFormDefaultType(const Value: string); -begin - if Values['OverrideOpenFormDefault'] = '' then - Add('OverrideOpenFormDefault=' + Value) - else - Values['OverrideOpenFormDefault'] := Value; + cbxDefaultFileTypes.ItemIndex := cbxDefaultFileTypes.Items.IndexOf(Settings.DefaultFileType); + cbxViewUnitType.ItemIndex := cbxViewUnitType.Items.IndexOf(IDEOverride.OpenUnitDefaultType); + cbxViewFormType.ItemIndex := cbxViewFormType.Items.IndexOf(IDEOverride.OpenFormDefaultType); + cbxOpenProjectType.ItemIndex := cbxOpenProjectType.Items.IndexOf(IDEOverride.OpenProjectDefaultType); + chkOverrideViewUnit.Checked := IDEOverride.OverrideOpenUnit; + chkOverrideViewForm.Checked := IDEOverride.OverrideOpenForm; + chkOverrideOpenProject.Checked := IDEOverride.OverrideOpenProject; end; end. Index: GX_OpenFileConfig.dfm =================================================================== RCS file: /cvsroot/gexperts/gexperts/unstable/Src/OpenFile/GX_OpenFileConfig.dfm,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- GX_OpenFileConfig.dfm 10 Apr 2005 21:13:32 -0000 1.3 +++ GX_OpenFileConfig.dfm 11 Apr 2005 06:51:41 -0000 1.4 @@ -1,10 +1,10 @@ object fmOpenFileConfig: TfmOpenFileConfig Left = 332 Top = 206 + Width = 621 + Height = 488 BorderIcons = [biSystemMenu] Caption = 'Open Unit Configuration' - ClientHeight = 459 - ClientWidth = 613 Color = clBtnFace Constraints.MinHeight = 400 Constraints.MinWidth = 550 @@ -15,7 +15,6 @@ Font.Style = [] OldCreateOrder = False Position = poScreenCenter - OnShow = FormShow DesignSize = ( 613 459) @@ -28,6 +27,7 @@ Height = 412 ActivePage = tsTypes Anchors = [akLeft, akTop, akRight, akBottom] + TabIndex = 0 TabOrder = 2 object tsTypes: TTabSheet Caption = 'File Groups' @@ -57,7 +57,7 @@ Height = 304 Anchors = [akLeft, akTop, akRight, akBottom] Caption = 'Custom Search Path' - TabOrder = 0 + TabOrder = 5 DesignSize = ( 409 304) @@ -77,7 +77,7 @@ Height = 175 Anchors = [akLeft, akTop, akRight, akBottom] ItemHeight = 13 - TabOrder = 1 + TabOrder = 2 OnClick = lbxDirectoryListClick end object btnDirectoryAdd: TBitBtn @@ -87,7 +87,7 @@ Height = 25 Anchors = [akLeft, akBottom] Caption = 'Add' - TabOrder = 4 + TabOrder = 5 OnClick = btnDirectoryAddClick end object btnDirectoryDelete: TBitBtn @@ -97,7 +97,7 @@ Height = 25 Anchors = [akLeft, akBottom] Caption = 'Delete' - TabOrder = 5 + TabOrder = 6 OnClick = btnDirectoryDeleteClick end object cbxRecursive: TCheckBox @@ -106,7 +106,7 @@ Width = 250 Height = 17 Caption = 'Include subdirectories' - TabOrder = 0 + TabOrder = 1 end object btnDirectoryReplace: TBitBtn Left = 10 @@ -115,7 +115,7 @@ Height = 25 Anchors = [akLeft, akBottom] Caption = 'Replace' - TabOrder = 3 + TabOrder = 4 OnClick = btnDirectoryReplaceClick end object edtDirectory: TEdit @@ -124,7 +124,16 @@ Width = 368 Height = 21 Anchors = [akLeft, akRight, akBottom] - TabOrder = 2 + TabOrder = 3 + end + object cbxCustomDirectoryList: TCheckBox + Left = 12 + Top = 21 + Width = 250 + Height = 17 + Caption = 'Add custom directories to search path' + TabOrder = 0 + OnClick = cbxCustomDirectoryListClick end end object lbxTypeList: TListBox @@ -135,7 +144,7 @@ Anchors = [akLeft, akTop, akBottom] ItemHeight = 13 Sorted = True - TabOrder = 1 + TabOrder = 0 OnClick = lbxTypeListClick end object edtExtension: TEdit @@ -143,16 +152,7 @@ Top = 8 Width = 265 Height = 21 - TabOrder = 2 - end - object cbxCustomDirectoryList: TCheckBox - Left = 185 - Top = 94 - Width = 250 - Height = 17 - Caption = 'Add custom directories to search path' TabOrder = 3 - OnClick = cbxCustomDirectoryListClick end object btnTypeAdd: TBitBtn Left = 8 @@ -161,7 +161,7 @@ Height = 25 Anchors = [akLeft, akBottom] Caption = 'Add' - TabOrder = 4 + TabOrder = 1 OnClick = btnTypeAddClick end object btnTypeDelete: TBitBtn @@ -171,7 +171,7 @@ Height = 25 Anchors = [akLeft, akBottom] Caption = 'Delete' - TabOrder = 5 + TabOrder = 2 OnClick = btnTypeDeleteClick end object edtMaxRecentFiles: TEdit @@ -179,7 +179,7 @@ Top = 40 Width = 56 Height = 21 - TabOrder = 6 + TabOrder = 4 Text = '20' end end @@ -192,7 +192,7 @@ Width = 313 Height = 141 Caption = 'IDE Menu Item Overrides' - TabOrder = 0 + TabOrder = 1 object lblMenuItem: TLabel Left = 20 Top = 20 @@ -228,7 +228,7 @@ Width = 110 Height = 17 Caption = 'View forms' - TabOrder = 1 + TabOrder = 2 end object cbxViewUnitType: TComboBox Left = 136 @@ -236,8 +236,8 @@ Width = 160 Height = 21 Style = csDropDownList - ItemHeight = 0 - TabOrder = 2 + ItemHeight = 13 + TabOrder = 1 end object cbxViewFormType: TComboBox Left = 136 @@ -245,7 +245,7 @@ Width = 160 Height = 21 Style = csDropDownList - ItemHeight = 0 + ItemHeight = 13 TabOrder = 3 end object chkOverrideOpenProject: TCheckBox @@ -262,7 +262,7 @@ Width = 160 Height = 21 Style = csDropDownList - ItemHeight = 0 + ItemHeight = 13 TabOrder = 5 end end @@ -272,7 +272,7 @@ Width = 313 Height = 87 Caption = 'General Settings' - TabOrder = 1 + TabOrder = 0 object lblDefault: TLabel Left = 20 Top = 56 @@ -286,9 +286,8 @@ Width = 160 Height = 21 Style = csDropDownList - ItemHeight = 0 - TabOrder = 0 - OnChange = cbxDefaultFileTypesChange + ItemHeight = 13 + TabOrder = 1 end object chkMatchAnywhere: TCheckBox Left = 20 @@ -296,7 +295,7 @@ Width = 281 Height = 17 Caption = 'Match typed string anywhere in the file names' - TabOrder = 1 + TabOrder = 0 end end end @@ -309,7 +308,6 @@ Anchors = [akRight, akBottom] Caption = 'OK' Default = True - ModalResult = 1 TabOrder = 1 OnClick = btnOKClick end Index: GX_OpenFile.pas =================================================================== RCS file: /cvsroot/gexperts/gexperts/unstable/Src/OpenFile/GX_OpenFile.pas,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- GX_OpenFile.pas 10 Apr 2005 21:21:21 -0000 1.4 +++ GX_OpenFile.pas 11 Apr 2005 06:51:41 -0000 1.5 @@ -92,7 +92,7 @@ tbnSep3: TToolButton; pnlRecentFooter: TPanel; btnClearRecent: TButton; - cbDefault: TCheckBox; + chkDefault: TCheckBox; tbnOpenFile: TToolButton; tbnSep2: TToolButton; pnlRecent: TPanel; @@ -100,14 +100,22 @@ btnFavoriteAddToFavorites: TButton; OpenDialog: TOpenDialog; [...994 lines suppressed...] + TypeIndex := cbxType.Items.IndexOf(SelectType); + if TypeIndex > -1 then + cbxType.ItemIndex := TypeIndex + else if cbxType.Items.Count > 0 then + cbxType.ItemIndex := 0; + cbxType.OnChange(cbxType); +end; + +function TfmOpenFile.FileTypes: TFileTypes; +begin + Assert(Assigned(Settings.FileTypes)); + Result := Settings.FileTypes; +end; + +function TfmOpenFile.FileType(Index: Integer): TFileType; +begin + Result := FileTypes.Items[Index]; end; initialization |