1 using System;
  
   2 using System.Collections;
  
   3 using System.Windows;
  
   4 
  
   5 namespace FileExplorer
  
   6 {
  
   7     public class DriveNode : Node
  
   8     {
  
   9         public DriveNode(const string& name_) : base(name_)
  
  10         {
  
  11         }
  
  12         public void SetRootDirectory(DirectoryNode* rootDirectory_)
  
  13         {
  
  14             rootDirectory.Reset(rootDirectory_);
  
  15             rootDirectory->SetParent(this);
  
  16             rootDirectory->SetRootDirectory();
  
  17         }
  
  18         public inline DirectoryNode* RootDirectory() const
  
  19         {
  
  20             return rootDirectory.Get();
  
  21         }
  
  22         public override string ImageName() const
  
  23         {
  
  24             return "hard_drive.bitmap";
  
  25         }
  
  26         [nodiscard]
  
  27         public override Result<UniquePtr<TreeViewNode>> ToTreeViewNode(bool createChildren, ImageList* imageList)
  
  28         {
  
  29             UniquePtr<TreeViewNode> treeViewNodePtr(new TreeViewNode(Name()));
  
  30             TreeViewNode* treeViewNode = treeViewNodePtr.Get();
  
  31             auto result = SetTreeViewNode(treeViewNode);
  
  32             if (result.Error())
  
  33             {
  
  34                 return Result<UniquePtr<TreeViewNode>>(ErrorId(result.GetErrorId()));
  
  35             }
  
  36             if (imageList != null)
  
  37             {
  
  38                 int imageIndex = imageList->GetImageIndex(ImageName());
  
  39                 if (imageIndex != -1)
  
  40                 {
  
  41                     auto result = treeViewNode->SetImageIndex(imageIndex);
  
  42                     if (result.Error())
  
  43                     {
  
  44                         return Result<UniquePtr<TreeViewNode>>(ErrorId(result.GetErrorId()));
  
  45                     }
  
  46                 }
  
  47             }
  
  48             return Result<UniquePtr<TreeViewNode>>(Rvalue(treeViewNodePtr));
  
  49         }
  
  50         public override Result<Control*> CreateView(ImageList* imageList)
  
  51         {
  
  52             if (!rootDirectory.IsNull())
  
  53             {
  
  54                 return rootDirectory->CreateView(imageList);
  
  55             }
  
  56             else
  
  57             {
  
  58                 return Result<Control*>();
  
  59             }
  
  60         }
  
  61         private UniquePtr<DirectoryNode> rootDirectory;
  
  62     }
  
  63 }