Prechádzať zdrojové kódy

ADD: Show icons for Network and Recycle Bin

Alexander Koblov 4 rokov pred
rodič
commit
c04e4db72f

+ 7 - 0
src/filesources/recyclebin/urecyclebinfilesource.pas

@@ -26,6 +26,7 @@ type
   public
     class function IsSupportedPath(const Path: String): Boolean; override;
     class function CreateFile(const APath: String): TFile; override;
+    class function GetMainIcon(out Path: String): Boolean; override;
 
     function GetOperationsTypes: TFileSourceOperationTypes; override;
     function GetSupportedFileProperties: TFilePropertiesTypes; override;
@@ -69,6 +70,12 @@ begin
   end;
 end;
 
+class function TRecycleBinFileSource.GetMainIcon(out Path: String): Boolean;
+begin
+  Result:= True;
+  Path:= '%SystemRoot%\System32\shell32.dll,31';
+end;
+
 function TRecycleBinFileSource.GetOperationsTypes: TFileSourceOperationTypes;
 begin
   Result := [fsoList];

+ 6 - 0
src/filesources/ufilesource.pas

@@ -250,6 +250,7 @@ type
                                             var theNewProperties: TFileProperties): TFileSourceOperation; virtual;
     function GetOperationClass(OperationType: TFileSourceOperationType): TFileSourceOperationClass;
 
+    class function GetMainIcon(out Path: String): Boolean; virtual;
     {en
        Returns @true if the given path is supported by the file source,
        @false otherwise.
@@ -718,6 +719,11 @@ begin
   Result := FOperationsClasses[OperationType];
 end;
 
+class function TFileSource.GetMainIcon(out Path: String): Boolean;
+begin
+  Result := False;
+end;
+
 class function TFileSource.IsSupportedPath(const Path: String): Boolean;
 begin
   Result:= True;

+ 9 - 1
src/filesources/vfs/uvfslistoperation.pas

@@ -36,6 +36,8 @@ procedure TVfsListOperation.MainExecute;
 var
   I : Integer;
   aFile: TFile;
+  APath: String;
+  VfsModule: TVfsModule;
 begin
   FFiles.Clear;
 
@@ -55,10 +57,16 @@ begin
   for I:= 0 to gVfsModuleList.Count - 1 do
     begin
       CheckOperationState;
-      if TVfsModule(gVfsModuleList.Objects[I]).Visible then
+      VfsModule:= TVfsModule(gVfsModuleList.Objects[I]);
+      if VfsModule.Visible then
       begin
         aFile := TVfsFileSource.CreateFile(Path);
         aFile.Name:= gVfsModuleList.Strings[I];
+        if VfsModule.FileSourceClass.GetMainIcon(APath) then
+        begin
+          aFile.LinkProperty.LinkTo:= mbExpandFileName(APath);
+          aFile.Attributes:= FILE_ATTRIBUTE_TEMPORARY or FILE_ATTRIBUTE_VIRTUAL;
+        end;
         FFiles.Add(aFile);
       end;
     end;

+ 7 - 0
src/filesources/winnet/uwinnetfilesource.pas

@@ -42,6 +42,7 @@ type
     constructor Create; override;
 
     class function IsSupportedPath(const Path: String): Boolean; override;
+    class function GetMainIcon(out Path: String): Boolean; override;
 
     function GetParentDir(sPath : String): String; override;
     function IsPathAtRoot(Path: String): Boolean; override;
@@ -202,6 +203,12 @@ begin
   Result:= (Pos('\\', Path) = 1);
 end;
 
+class function TWinNetFileSource.GetMainIcon(out Path: String): Boolean;
+begin
+  Result:= True;
+  Path:= '%SystemRoot%\System32\shell32.dll,17';
+end;
+
 function TWinNetFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation;
 var
   TargetFileSource: IFileSource;

+ 19 - 6
src/platform/upixmapmanager.pas

@@ -1867,14 +1867,27 @@ begin
       end;
     end;
 
-    if (DirectAccess = False) and (AFile.Attributes = (FILE_ATTRIBUTE_NORMAL or FILE_ATTRIBUTE_VIRTUAL)) and Assigned(AFile.LinkProperty) then
+    if (DirectAccess = False) then
     begin
-      if not LoadIcon then
-        Result := -1
-      else begin
-        Result := GetPluginIcon(AFile.LinkProperty.LinkTo, FiDirIconID);
+      if (AFile.Attributes = (FILE_ATTRIBUTE_NORMAL or FILE_ATTRIBUTE_VIRTUAL)) and Assigned(AFile.LinkProperty) then
+      begin
+        if not LoadIcon then
+          Result := -1
+        else begin
+          Result := GetPluginIcon(AFile.LinkProperty.LinkTo, FiDirIconID);
+        end;
+        Exit;
+      end
+      else if (AFile.Attributes = (FILE_ATTRIBUTE_TEMPORARY or FILE_ATTRIBUTE_VIRTUAL)) and Assigned(AFile.LinkProperty) then
+      begin
+        if not LoadIcon then
+          Result := -1
+        else begin
+          Result := CheckAddPixmap(AFile.LinkProperty.LinkTo);
+          if Result < 0 then Result := FiDirIconID;
+        end;
+        Exit;
       end;
-      Exit;
     end;
 
     if IsDirectory or IsLinkToDirectory then