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 createChildrenImageList* 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 }