1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Tango.Core.Commands;
namespace Tango.Explorer
{
public class ExplorerControl : Control
{
private bool _changing_current_path;
public String CurrentPath
{
get { return (String)GetValue(CurrentPathProperty); }
set { SetValue(CurrentPathProperty, value); }
}
public static readonly DependencyProperty CurrentPathProperty =
DependencyProperty.Register("CurrentPath", typeof(String), typeof(ExplorerControl), new PropertyMetadata(null, (d, e) => (d as ExplorerControl).OnCurrentPathChanged()));
public ExplorerFolderItem CurrentFolder
{
get { return (ExplorerFolderItem)GetValue(CurrentFolderProperty); }
set { SetValue(CurrentFolderProperty, value); }
}
public static readonly DependencyProperty CurrentFolderProperty =
DependencyProperty.Register("CurrentFolder", typeof(ExplorerFolderItem), typeof(ExplorerControl), new PropertyMetadata(null, (d, e) => (d as ExplorerControl).OnCurrentFolderChanged()));
public ExplorerItem SelectedItem
{
get { return (ExplorerItem)GetValue(SelectedItemProperty); }
set { SetValue(SelectedItemProperty, value); }
}
public static readonly DependencyProperty SelectedItemProperty =
DependencyProperty.Register("SelectedItem", typeof(ExplorerItem), typeof(ExplorerControl), new PropertyMetadata(null, (d, e) => (d as ExplorerControl).OnSelectedItemChanged()));
public RelayCommand BackCommand
{
get { return (RelayCommand)GetValue(BackCommandProperty); }
set { SetValue(BackCommandProperty, value); }
}
public static readonly DependencyProperty BackCommandProperty =
DependencyProperty.Register("BackCommand", typeof(RelayCommand), typeof(ExplorerControl), new PropertyMetadata(null));
public RelayCommand<ExplorerFileItem> FileSelectedCommand
{
get { return (RelayCommand<ExplorerFileItem>)GetValue(FileSelectedCommandProperty); }
set { SetValue(FileSelectedCommandProperty, value); }
}
public static readonly DependencyProperty FileSelectedCommandProperty =
DependencyProperty.Register("FileSelectedCommand", typeof(RelayCommand<ExplorerFileItem>), typeof(ExplorerControl), new PropertyMetadata(null));
static ExplorerControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(ExplorerControl), new FrameworkPropertyMetadata(typeof(ExplorerControl)));
}
public ExplorerControl()
{
BackCommand = new RelayCommand(NavigateBack);
}
private void OnCurrentPathChanged()
{
if (_changing_current_path) return;
_changing_current_path = true;
if (Directory.Exists(CurrentPath))
{
CurrentFolder = ExplorerFolderItem.LoadFromPath(CurrentPath);
}
_changing_current_path = false;
}
private void OnCurrentFolderChanged()
{
if (_changing_current_path) return;
_changing_current_path = true;
CurrentPath = CurrentFolder.Path;
_changing_current_path = false;
}
private void OnSelectedItemChanged()
{
if (SelectedItem != null)
{
if (SelectedItem is ExplorerFolderItem)
{
var folder = SelectedItem as ExplorerFolderItem;
folder = ExplorerFolderItem.LoadFromPath(folder.Path);
CurrentFolder = folder;
SelectedItem = null;
}
else if (SelectedItem is ExplorerFileItem)
{
FileSelectedCommand?.Execute(SelectedItem);
}
}
}
public void NavigateBack()
{
if (CurrentFolder != null)
{
var parentPath = CurrentFolder.GetParentPath();
if (parentPath != null)
{
CurrentFolder = ExplorerFolderItem.LoadFromPath(parentPath);
}
}
}
}
}
|