Skip to content

Commit

Permalink
优化主列表菜单,支持多选批量删除等操作
Browse files Browse the repository at this point in the history
  • Loading branch information
aiqinxuancai committed Jul 20, 2023
1 parent c0fa619 commit d527d42
Show file tree
Hide file tree
Showing 2 changed files with 193 additions and 92 deletions.
8 changes: 6 additions & 2 deletions WkyFast/View/WkyTaskListView.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
GridLinesVisibility="Horizontal"
CanUserAddRows="False"
BorderBrush="Transparent"
HorizontalScrollBarVisibility="Disabled" LoadingRow="MainDataGrid_LoadingRow" Margin="0,40,0,0">
HorizontalScrollBarVisibility="Disabled" LoadingRow="MainDataGrid_LoadingRow" Margin="0,40,0,0" ContextMenuOpening="MainDataGrid_ContextMenuOpening">

<DataGrid.HorizontalGridLinesBrush>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
Expand All @@ -31,7 +31,11 @@
<GradientStop Color="#00000000" Offset="1"/>
</LinearGradientBrush>
</DataGrid.HorizontalGridLinesBrush>

<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Header="TTT" />
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.CellStyle>
<!--Override Highlighting so that its easy to see what is selected even when the control is not focused-->
<Style TargetType="{x:Type DataGridCell}">
Expand Down
277 changes: 187 additions & 90 deletions WkyFast/View/WkyTaskListView.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
using WkyFast.Service;
using WkyFast.Service.Model;



namespace WkyFast.View
{
/// <summary>
Expand Down Expand Up @@ -57,7 +59,7 @@ public WkyTaskListView(ObservableCollection<TaskModel> viewModel)

}

private WkyApiSharp.Service.Model.RemoteDownloadList.Task _lastMenuTaskData;
private List<TaskModel> _selectedItems;


public static readonly DependencyProperty ViewModelProperty =
Expand Down Expand Up @@ -92,73 +94,24 @@ private void UIElement_OnPreviewMouseWheel(object sender, MouseWheelEventArgs e)

private void MainDataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
ContextMenu menu = new ContextMenu();

e.Row.MouseRightButtonDown += (s, a) => {
a.Handled = true;
TaskModel model = (TaskModel)((DataGridRow)s).DataContext;
_lastMenuTaskData = model.Data;
if (_lastMenuTaskData != null)
{
menu.Items.Clear();
if (_lastMenuTaskData.State == (int)TaskState.Pause ||
_lastMenuTaskData.State == (int)TaskState.LackResources ||
_lastMenuTaskData.State == (int)TaskState.DiskError)
{
MenuItem menuRestart = new MenuItem() { Header = "继续下载" };
menuRestart.Click += MenuRestart_Click;
menu.Items.Add(menuRestart);
menu.Items.Add(new Separator());
}
else if (_lastMenuTaskData.State == (int)TaskState.Completed)
{
//已完成 不处理
}
else
{
MenuItem menuStop = new MenuItem() { Header = "暂停" };
menuStop.Click += MenuStop_Click;
menu.Items.Add(menuStop);
menu.Items.Add(new Separator());
}
MenuItem menuCopyTitle = new MenuItem() { Header = "复制标题" };
menuCopyTitle.Click += MenuCopyTitle_Click;
menu.Items.Add(menuCopyTitle);
MenuItem menuCopyLink = new MenuItem() { Header = "复制链接" };
menuCopyLink.Click += MenuCopyLink_Click;
menu.Items.Add(menuCopyLink);
MenuItem menuDelete = new MenuItem() { Header = "删除任务" };
menuDelete.Click += MenuDelete_Click;
menu.Items.Add(menuDelete);

MenuItem menuDeleteFile = new MenuItem() { Header = "删除任务及文件" };
menuDeleteFile.Click += MenuDeleteFile_Click;
menu.Items.Add(menuDeleteFile);
DataGrid row = sender as DataGrid;
row.ContextMenu = menu;
}
};
}

private async void MenuCopyTitle_Click(object sender, RoutedEventArgs e)
{
try
{
//_lastMenuTaskData.Url
WkyApiSharp.Service.Model.RemoteDownloadList.Task t = _lastMenuTaskData;

Clipboard.SetDataObject(t.Name);

MainWindow.Instance.ShowSnackbar("已复制标题", $"{t.Name}");
var title = "";
foreach (var item in _selectedItems)
{
title += item.Data.Name;
if (item != _selectedItems.Last())
{
title += "\n";
}
}
Clipboard.SetDataObject(title);
MainWindow.Instance.ShowSnackbar("已复制标题", $"{title}");
}
catch (Exception ex)
{
Expand All @@ -168,15 +121,19 @@ private async void MenuCopyTitle_Click(object sender, RoutedEventArgs e)

private async void MenuRestart_Click(object sender, RoutedEventArgs e)
{
WkyApiSharp.Service.Model.RemoteDownloadList.Task t = _lastMenuTaskData;
try
{
bool result = await WkyApiManager.Instance.API.StartTask(WkyApiManager.Instance.NowDevice.PeerId, t.GetOperationCode());
if (result)
foreach (var item in _selectedItems)
{
WkyApiManager.Instance.API.UpdateTask();
if (item.Data.State == (int)TaskState.Pause ||
item.Data.State == (int)TaskState.LackResources ||
item.Data.State == (int)TaskState.DiskError)
{
await WkyApiManager.Instance.API.StartTask(WkyApiManager.Instance.NowDevice.PeerId, item.Data.GetOperationCode());
}
}

WkyApiManager.Instance.API.UpdateTask();

}
catch (Exception ex)
{
Expand All @@ -186,15 +143,19 @@ private async void MenuRestart_Click(object sender, RoutedEventArgs e)

private async void MenuStop_Click(object sender, RoutedEventArgs e)
{
WkyApiSharp.Service.Model.RemoteDownloadList.Task t = _lastMenuTaskData;
try
{
bool result = await WkyApiManager.Instance.API.PauseTask(WkyApiManager.Instance.NowDevice.PeerId, t.GetOperationCode());
if (result)

foreach (var item in _selectedItems)
{
WkyApiManager.Instance.API.UpdateTask();
if (item.Data.State == (int)TaskState.Completed)
{
await WkyApiManager.Instance.API.PauseTask(WkyApiManager.Instance.NowDevice.PeerId, item.Data.GetOperationCode());
}
}


WkyApiManager.Instance.API.UpdateTask();

}
catch (Exception ex)
{
Expand All @@ -204,17 +165,38 @@ private async void MenuStop_Click(object sender, RoutedEventArgs e)

private async void MenuDelete_Click(object sender, RoutedEventArgs e)
{
WkyApiSharp.Service.Model.RemoteDownloadList.Task t = _lastMenuTaskData;
MainWindow.Instance.ShowMessageBox("提示", $"是否确认删除任务\r\n{t.Name}", async () => {
var title = "";
foreach (var item in _selectedItems)
{
title += item.Data.Name;
if (item != _selectedItems.Last())
{
title += "\n";
}
}

var content = "";
if (_selectedItems.Count == 1)
{
content = $"是否确认删除任务:\r\n{title}";
}
else
{
content = $"是否确认删除{_selectedItems.Count}个任务?";
}

MainWindow.Instance.ShowMessageBox("提示", content, async () => {
try
{
//status
bool result = await WkyApiManager.Instance.API.DeleteTask(WkyApiManager.Instance.NowDevice.PeerId, t.GetOperationCode());
if (result)
foreach (var item in _selectedItems)
{
MainWindow.Instance.ShowSnackbar("成功", $"已删除{t.Name}");
WkyApiManager.Instance.API.UpdateTask();
}
if (item.Data.State == (int)TaskState.Completed)
{
await WkyApiManager.Instance.API.DeleteTask(WkyApiManager.Instance.NowDevice.PeerId, item.Data.GetOperationCode());
}
}
WkyApiManager.Instance.API.UpdateTask();
}
catch (Exception ex)
{
Expand All @@ -230,22 +212,47 @@ private async void MenuDelete_Click(object sender, RoutedEventArgs e)

private async void MenuDeleteFile_Click(object sender, RoutedEventArgs e)
{
WkyApiSharp.Service.Model.RemoteDownloadList.Task t = _lastMenuTaskData;
var title = "";
foreach (var item in _selectedItems)
{
title += item.Data.Name;
if (item != _selectedItems.Last())
{
title += "\n";
}
}


MainWindow.Instance.ShowMessageBox("提示", $"是否确认删除任务及文件:\r\n{t.Name}", async () => {
var content = "";
if (_selectedItems.Count == 1)
{
content = $"是否确认删除任务及文件:\r\n{title}";
}
else
{
content = $"是否确认删除{_selectedItems.Count}个任务及文件?";
}



MainWindow.Instance.ShowMessageBox("提示", content, async () => {
try
{
bool result = await WkyApiManager.Instance.API.DeleteTask(WkyApiManager.Instance.NowDevice.PeerId, t.GetOperationCode(), true);
if (result)
foreach (var item in _selectedItems)
{
MainWindow.Instance.ShowSnackbar("成功", $"已删除{t.Name}");
WkyApiManager.Instance.API.UpdateTask();
if (item.Data.State == (int)TaskState.Completed)
{
await WkyApiManager.Instance.API.DeleteTask(WkyApiManager.Instance.NowDevice.PeerId, item.Data.GetOperationCode(), true);
}
}
WkyApiManager.Instance.API.UpdateTask();
}
catch (Exception ex)
{
EasyLogManager.Logger.Error(ex);
}
}, () => {
//没有操作
Expand All @@ -256,18 +263,26 @@ private async void MenuCopyLink_Click(object sender, RoutedEventArgs e)
{
try
{
//_lastMenuTaskData.Url
WkyApiSharp.Service.Model.RemoteDownloadList.Task t = _lastMenuTaskData;

Clipboard.SetDataObject(t.Url);
var url = "";
foreach (var item in _selectedItems)
{
url += item.Data.Url;
if (item != _selectedItems.Last())
{
url += "\n";
}
}
Clipboard.SetDataObject(url);
MainWindow.Instance.ShowSnackbar("已复制链接", $"{url}");

MainWindow.Instance.ShowSnackbar("已复制链接", $"{t.Url}");
}
catch (Exception ex)
{
EasyLogManager.Logger.Error(ex);
}
}

private void AddTaskButton_Click(object sender, RoutedEventArgs e)
{
if (WkyApiManager.Instance.NowDevice != null)
Expand All @@ -279,5 +294,87 @@ private void AddTaskButton_Click(object sender, RoutedEventArgs e)
MainWindow.Instance.ShowSnackbar("无法添加任务", $"当前没有选中任何设备");
}
}

private void MainDataGrid_ContextMenuOpening(object sender, ContextMenuEventArgs e)
{
var contextMenu = MainDataGrid.ContextMenu;
contextMenu.Items.Clear();

var selectedItems = new List<TaskModel>();
foreach (var item in MainDataGrid.SelectedItems)
{
var myItem = item as TaskModel;
if (myItem != null)
{
selectedItems.Add(myItem);
}
}

_selectedItems = selectedItems;

contextMenu.Items.Clear();

if (selectedItems.Count > 0)
{
var showRestartMenu = selectedItems.Any(a =>
{
if (a.Data.State == (int)TaskState.Pause ||
a.Data.State == (int)TaskState.LackResources ||
a.Data.State == (int)TaskState.DiskError)
{
return true;
}
return false;
});

var showStopMenu = selectedItems.Any(a =>
{
if (a.Data.State == (int)TaskState.Completed)
{
return true;
}
return false;
});

if (showRestartMenu)
{
var menuRestart = new MenuItem() { Header = "继续下载" };
menuRestart.Click += MenuRestart_Click;
contextMenu.Items.Add(menuRestart);
contextMenu.Items.Add(new Separator());
}
else if (showStopMenu)
{
//已完成
}
else
{
MenuItem menuStop = new MenuItem() { Header = "暂停" };
menuStop.Click += MenuStop_Click;
contextMenu.Items.Add(menuStop);
contextMenu.Items.Add(new Separator());
}


MenuItem menuCopyTitle = new MenuItem() { Header = "复制标题" };
menuCopyTitle.Click += MenuCopyTitle_Click;
contextMenu.Items.Add(menuCopyTitle);

MenuItem menuCopyLink = new MenuItem() { Header = "复制链接" };
menuCopyLink.Click += MenuCopyLink_Click;
contextMenu.Items.Add(menuCopyLink);

MenuItem menuDelete = new MenuItem() { Header = $"删除任务({selectedItems.Count})" };
menuDelete.Click += MenuDelete_Click;
contextMenu.Items.Add(menuDelete);

MenuItem menuDeleteFile = new MenuItem() { Header = $"删除任务及文件({selectedItems.Count})" };
menuDeleteFile.Click += MenuDeleteFile_Click;
contextMenu.Items.Add(menuDeleteFile);

DataGrid row = sender as DataGrid;
row.ContextMenu = contextMenu;
}
}
}
}

0 comments on commit d527d42

Please sign in to comment.