Skip to content

Commit b4c0566

Browse files
committed
feat: display some known file type icons in file open/save dialog
1 parent 637d2d6 commit b4c0566

File tree

5 files changed

+76
-36
lines changed

5 files changed

+76
-36
lines changed

source/exportgrid.pas

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ interface
88
SysUtils, Variants, Classes, Graphics, Controls, Forms,
99
Dialogs, StdCtrls, ExtCtrls, Menus, ComCtrls, laz.VirtualTrees, SynExportHTML,
1010
extra_controls, dbstructures, lazaruscompat, RegExpr, StrUtils, comboex, EditBtn, Buttons, LCLIntf,
11-
extfiledialog;
11+
extfiledialog, generic_types;
1212

1313
type
1414
TGridExportFormat = (
@@ -147,25 +147,6 @@ TfrmExportGrid = class(TExtForm)
147147
('JSON'),
148148
('JSON Lines')
149149
);
150-
const FormatToImageIndex: Array[TGridExportFormat] of Integer =
151-
(
152-
49, // Excel
153-
50, // CSV
154-
32, // HTML
155-
48, // XML
156-
201, // SQL
157-
201, // SQL
158-
201, // SQL
159-
201, // SQL
160-
201, // SQL
161-
153, // Latex
162-
154, // Textile
163-
154, // Jira
164-
202, // PHP
165-
199, // Markdown
166-
200, // JSON
167-
200 // JSON Lines
168-
);
169150
const CopyAsActionPrefix = 'actCopyAs';
170151
property Grid: TLazVirtualStringTree read FGrid write FGrid;
171152
property ExportFormat: TGridExportFormat read GetExportFormat write SetExportFormat;
@@ -199,7 +180,7 @@ procedure TfrmExportGrid.FormCreate(Sender: TObject);
199180
for ef:=Low(TGridExportFormat) to High(TGridExportFormat) do begin
200181
comboItem := TComboExItem.Create(comboFormat.ItemsEx);
201182
comboItem.Caption := FormatToDescription[ef];
202-
comboItem.ImageIndex := FormatToImageIndex[ef];
183+
comboItem.ImageIndex := GetFileExtImageIndex(FormatToFileExtension[ef]);
203184
end;
204185
SenderName := Owner.Name;
205186
FHiddenCopyMode := SenderName.StartsWith(CopyAsActionPrefix);

source/extfiledialog.lfm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ object frmExtFileDialog: TfrmExtFileDialog
198198
Align = alClient
199199
BorderSpacing.Right = 10
200200
Color = clDefault
201+
RowSelect = True
201202
SortType = stText
202203
TabOrder = 1
203204
ObjectTypes = [otNonFolders, otHidden]

source/extfiledialog.pas

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ interface
66

77
uses
88
Classes, SysUtils, LCLType, Forms, Controls, Graphics, Dialogs,
9-
ExtCtrls, StdCtrls, ShellCtrls, ComCtrls, apphelpers, extra_controls, Math;
9+
ExtCtrls, StdCtrls, ShellCtrls, ComCtrls, apphelpers, extra_controls, Math, generic_types;
1010

1111
type
1212

@@ -44,6 +44,7 @@ TfrmExtFileDialog = class(TExtForm)
4444
Y: Integer);
4545
procedure ShellListViewClick(Sender: TObject);
4646
procedure ShellListViewDblClick(Sender: TObject);
47+
procedure ShellListViewFileAdded(Sender: TObject; Item: TListItem);
4748
procedure ShellListViewSelectItem(Sender: TObject; Item: TListItem;
4849
Selected: Boolean);
4950
procedure ShellTreeViewChange(Sender: TObject; Node: TTreeNode);
@@ -126,6 +127,8 @@ procedure TfrmExtFileDialog.FormCreate(Sender: TObject);
126127
ShellTreeView.Images := MainForm.ImageListMain;
127128
ShellTreeView.OnGetImageIndex := ShellTreeViewGetImageIndex;
128129
ShellTreeView.OnGetSelectedIndex := ShellTreeViewGetSelectedIndex;
130+
ShellListView.SmallImages := MainForm.ImageListMain;
131+
ShellListView.OnFileAdded := ShellListViewFileAdded;
129132
{$ENDIF}
130133
FFilterNames := TStringList.Create;
131134
FFilterMasks := TStringList.Create;
@@ -314,6 +317,21 @@ procedure TfrmExtFileDialog.ShellListViewDblClick(Sender: TObject);
314317
ModalResult := mrOK;
315318
end;
316319

320+
procedure TfrmExtFileDialog.ShellListViewFileAdded(Sender: TObject;
321+
Item: TListItem);
322+
var
323+
Ext: String;
324+
begin
325+
if TShellListItem(Item).IsFolder then
326+
Item.ImageIndex := 51
327+
else begin
328+
Ext := ExtractFileExt(ShellListView.GetPathFromItem(Item));
329+
Item.ImageIndex := GetFileExtImageIndex(Ext);
330+
if Item.ImageIndex = -1 then
331+
Item.ImageIndex := 66; // page with question mark
332+
end;
333+
end;
334+
317335
procedure TfrmExtFileDialog.ShellListViewSelectItem(Sender: TObject;
318336
Item: TListItem; Selected: Boolean);
319337
var

source/generic_types.pas

Lines changed: 53 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,53 @@
1-
unit generic_types;
2-
3-
{$mode delphi}{$H+}
4-
5-
interface
6-
7-
type
8-
TThreeStateBoolean = (nbUnset, nbFalse, nbTrue);
9-
10-
11-
implementation
12-
13-
end.
1+
unit generic_types;
2+
3+
{$mode ObjFPC}
4+
5+
interface
6+
7+
type
8+
TThreeStateBoolean = (nbUnset, nbFalse, nbTrue);
9+
10+
TFileExtImageIndex = record
11+
Ext: String;
12+
ImageIndex: Integer;
13+
end;
14+
15+
function GetFileExtImageIndex(Ext: String): Integer;
16+
17+
const FileExtImageIndex: array[0..16] of TFileExtImageIndex = (
18+
(Ext: 'csv'; ImageIndex: 50),
19+
(Ext: 'html'; ImageIndex: 32),
20+
(Ext: 'xml'; ImageIndex: 48),
21+
(Ext: 'sql'; ImageIndex: 201),
22+
(Ext: 'LaTeX'; ImageIndex: 153),
23+
(Ext: 'textile'; ImageIndex: 154),
24+
(Ext: 'jira-textile'; ImageIndex: 154),
25+
(Ext: 'php'; ImageIndex: 202),
26+
(Ext: 'md'; ImageIndex: 199),
27+
(Ext: 'json'; ImageIndex: 200),
28+
(Ext: 'jsonl'; ImageIndex: 200),
29+
(Ext: 'txt'; ImageIndex: 67),
30+
(Ext: 'zip'; ImageIndex: 53),
31+
(Ext: 'png'; ImageIndex: 47),
32+
(Ext: 'jpg'; ImageIndex: 47),
33+
(Ext: 'pdf'; ImageIndex: 44),
34+
(Ext: 'sqlite3'; ImageIndex: 196)
35+
);
36+
37+
38+
implementation
39+
40+
function GetFileExtImageIndex(Ext: String): Integer;
41+
var
42+
i: Integer;
43+
begin
44+
Result := -1;
45+
for i:=Low(FileExtImageIndex) to High(FileExtImageIndex) do begin
46+
if (FileExtImageIndex[i].Ext = Ext) or ('.'+FileExtImageIndex[i].Ext = Ext) then begin
47+
Result := FileExtImageIndex[i].ImageIndex;
48+
break;
49+
end;
50+
end;
51+
end;
52+
53+
end.

source/main.pas

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1914,7 +1914,7 @@ procedure TMainForm.FormCreate(Sender: TObject);
19141914
CopyAsAction.Category := actExportData.Category;
19151915
CopyAsAction.Name := TfrmExportGrid.CopyAsActionPrefix + Integer(ExportFormat).ToString;
19161916
CopyAsAction.Caption := TfrmExportGrid.FormatToDescription[ExportFormat];
1917-
CopyAsAction.ImageIndex := TfrmExportGrid.FormatToImageIndex[ExportFormat];
1917+
CopyAsAction.ImageIndex := GetFileExtImageIndex(TfrmExportGrid.FormatToFileExtension[ExportFormat]);
19181918
CopyAsAction.Tag := Integer(ExportFormat);
19191919
CopyAsAction.OnExecute := actCopyOrCutExecute;
19201920
CopyAsMenu := TMenuItem.Create(popupDataGrid);

0 commit comments

Comments
 (0)