From e7a55631dfa3e4011e420dbd22891d4adf98aa7d Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Wed, 18 Jun 2008 22:30:08 +0200 Subject: Handle multiple file extensions Resolves #1120769 --- UFileTypeSettings.pas | 55 +++++++++++++++++++++++---------------------------- 1 file changed, 25 insertions(+), 30 deletions(-) (limited to 'UFileTypeSettings.pas') diff --git a/UFileTypeSettings.pas b/UFileTypeSettings.pas index d6d5eb1..03eda53 100644 --- a/UFileTypeSettings.pas +++ b/UFileTypeSettings.pas @@ -401,7 +401,7 @@ begin for i := 0 to List.Count - 1 do begin Item := TFileAssoc.Create; with Item do begin - Extensions := TFileAssoc(List[i]).Extensions; + CopyArray(TFileAssoc(List[i]).Extensions, Extensions); FileTypeName := TFileAssoc(List[i]).FileTypeName; DefaultAction := TFileAssoc(List[i]).DefaultAction; FileTypeIcon := TFileAssoc(List[i]).FileTypeIcon; @@ -433,7 +433,7 @@ procedure TFFileTypeSettings.FillList; ListItem := ListView.Items.Add; if FileTypeName = ConstFTAMetaDirectory then ListItem.SetValue(0, LANGFileTypeDirectory) else if FileTypeName = ConstFTAMetaFile then ListItem.SetValue(0, LANGFileTypeFile) else - ListItem.SetValue(0, Extensions); + ListItem.SetValue(0, MakeString(';', Extensions)); if (FileTypeName = ConstFTAMetaDirectory) or (FileTypeName = ConstFTAMetaFile) then ListItem.SetValue(1, LANGFileTypeMetafile) else ListItem.SetValue(1, FileTypeName); @@ -520,7 +520,6 @@ end; procedure TFFileTypeSettings.ListViewSelectionChanged(Sender: TObject); var b: boolean; Item: TFileAssoc; - s: string; i: integer; ListItem: TGTKListItem; Color: TGDKColor; @@ -555,14 +554,9 @@ begin end; Item := ListView.Selected.AsPointer(2); FNameExtListView.Items.Clear; - if Length(Item.Extensions) > 0 then begin - s := Item.Extensions; - while Pos(';', s) > 0 do begin - FNameExtListView.Items.Add.SetValue(0, Trim(Copy(s, 1, Pos(';', s) - 1))); - Delete(s, 1, Pos(';', s)); - end; - if Length(Trim(s)) > 0 then FNameExtListView.Items.Add.SetValue(0, Trim(s)); - end; + if Length(Item.Extensions) > 0 then + for i := 0 to Length(Item.Extensions) - 1 do + FNameExtListView.Items.Add.SetValue(0, Item.Extensions[i]); IconEntry.Text := Item.FileTypeIcon; IconEntryChanged(Self); if (TFileAssoc(ListView.Selected.AsPointer(2)).FileTypeName = ConstFTAMetaDirectory) or @@ -597,7 +591,8 @@ end; procedure TFFileTypeSettings.AddExtButtonClick(Sender: TObject); var i: integer; - s, sx: string; + sx: string; + Assoc: TFileAssoc; begin if Length(Trim(FNameExtEntry.Text)) = 0 then Exit; if FNameExtListView.Items.Count > 0 then @@ -606,32 +601,32 @@ begin sx := WideLowerCase(Trim(FNameExtEntry.Text)); if sx[1] = '.' then Delete(sx, 1, 1); FNameExtListView.Items.Add.SetValue(0, sx); - s := TFileAssoc(ListView.Selected.AsPointer(2)).Extensions; - if Length(s) > 0 then s := s + ';'; - s := s + sx; - ListView.Selected.SetValue(0, s); - TFileAssoc(ListView.Selected.AsPointer(2)).Extensions := s; + + Assoc := TFileAssoc(ListView.Selected.AsPointer(2)); + SetLength(Assoc.Extensions, Length(Assoc.Extensions) + 1); + Assoc.Extensions[Length(Assoc.Extensions) - 1] := sx; + ListView.Selected.SetValue(0, MakeString(';', Assoc.Extensions)); + FNameExtEntry.Text := ''; end; procedure TFFileTypeSettings.RemoveExtButtonClick(Sender: TObject); var s: string; i: integer; + Assoc: TFileAssoc; begin try - if (FNameExtListView.Items.Count = 0) or (not Assigned(FNameExtListView.Selected)) or - (not Assigned(ListView.Selected)) or (not Assigned(ListView.Selected.AsPointer(2))) then Exit; - s := TFileAssoc(ListView.Selected.AsPointer(2)).Extensions; - i := Pos(FNameExtListView.Selected.AsString(0), s); - if i = 0 then Exit; - Delete(s, i, Length(FNameExtListView.Selected.AsString(0))); - if s = ';' then s := '' else - if (Length(s) >= i) and (s[i] = ';') then Delete(s, i, 1) else - if (Length(s) >= i - 1) and (i > 1) and (s[i - 1] = ';') then Delete(s, i - 1, 1); - ListView.Selected.SetValue(0, s); - TFileAssoc(ListView.Selected.AsPointer(2)).Extensions := s; - FNameExtListView.Items.Delete(FNameExtListView.Selected.Index); - except end; + if (FNameExtListView.Items.Count = 0) or (not Assigned(FNameExtListView.Selected)) or + (not Assigned(ListView.Selected)) or (not Assigned(ListView.Selected.AsPointer(2))) then Exit; + Assoc := TFileAssoc(ListView.Selected.AsPointer(2)); + if Length(Assoc.Extensions) > 0 then + for i := Length(Assoc.Extensions) - 1 downto 0 do + if Assoc.Extensions[i] = FNameExtListView.Selected.AsString(0) then + DeleteFromArray(i, Assoc.Extensions); + ListView.Selected.SetValue(0, MakeString(';', Assoc.Extensions)); + FNameExtListView.Items.Delete(FNameExtListView.Selected.Index); + except + end; end; procedure TFFileTypeSettings.FNameExtEntryKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean); -- cgit v1.2.3