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 }