using System.Collections.ObjectModel;
using System.Reflection.Metadata.Ecma335;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Controls.Primitives;
using Microsoft.UI.Xaml.Media;
using RustTools.muqing;
using RustTools.ViewModels;
namespace RustTools.Views;
///
/// 模组碎片
///
public class DataObject
{
//路径
public string Dri
{
get; set;
}
public string Name
{
get; set;
}
public string Info
{
get; set;
}
public bool IsRwmod
{
get; set;
}
public DataObject()
{
IsRwmod = true;
}
public DataObject(FileInfo fileInfo)
{
Name = fileInfo.Name;
IsRwmod=true;
Info = $"文件大小:{wj.FormatFileSize(fileInfo.Length)}";
Dri = fileInfo.FullName;
}
public DataObject(DirectoryInfo fileInfo)
{
Name = fileInfo.Name;
IsRwmod = false;
Info = $"创建时间:{fileInfo.CreationTime}";
Dri = fileInfo.FullName;
}
// ... Methods ...
}
public sealed partial class ModulePage : Page
{
public ObservableCollection ListMod = new();
public ModuleViewModel ViewModel { get; set; }
public ModulePage()
{
ViewModel = App.GetService();
InitializeComponent();
var iniHelper = new IniHelper();
iniHelper.Load(IniHelper.FILE.Config);
var v = iniHelper.GetValue(IniHelper.CODE.Rust, IniHelper.KEY.ModFileUrl);
var subfolders = Directory.GetDirectories(v);
foreach (var item in subfolders)
{
var info = new DirectoryInfo(item);
ListMod.Add(new DataObject(info));
}
var files = Directory.GetFiles(v);
foreach (var item in files)
{
var info = new FileInfo(item);
if (info.Name.EndsWith(".rwmod"))
{
ListMod.Add(new DataObject(info));
}
}
}
private void ShowMenu(bool isTransient, GridViewItem dataTemplate)
{
FlyoutShowOptions myOption = new FlyoutShowOptions();
myOption.ShowMode = isTransient ? FlyoutShowMode.Transient : FlyoutShowMode.Standard;
CommandBarFlyout1.ShowAt(dataTemplate, myOption);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var button = sender as Button;
if (button != null)
{
var container = VisualTreeHelper.GetParent(button) as FrameworkElement;
if (container != null && container.DataContext is DataObject dataItem)
{
FlyoutShowOptions myOption = new FlyoutShowOptions();
myOption.ShowMode = FlyoutShowMode.Standard;
CommandBarFlyout1.ShowAt(button, myOption);
}
}
}
private void Button_Delete(object sender, RoutedEventArgs e)
{
MenuFlyoutItem menuItem = sender as MenuFlyoutItem;
if (menuItem != null)
{
// 获取相关的文件夹项
var folderItem = menuItem.DataContext as DataObject; // 假设你的文件夹项类型为 FolderItem
if (folderItem != null)
{
// 这里可以添加删除文件夹逻辑
gj.sc("删除文件夹"+folderItem.Dri);
Directory.Delete(folderItem.Dri,true);
}
}
}
private async void Button_Click_RwmodItem(object sender, RoutedEventArgs e)
{
ContentDialog dialog = new ContentDialog();
dialog.XamlRoot=XamlRoot;
dialog.Title = "解压";
//dialog. = "你可以在本次解压中选择是否删除源文件";
dialog.PrimaryButtonText = "确定";
dialog.SecondaryButtonText = "取消";
dialog.Content = CreateCheckboxContent();
var contentDialogResult = await dialog.ShowAsync();
if (contentDialogResult == ContentDialogResult.Primary)
{
var button = sender as Button;
if (button != null)
{
var container = VisualTreeHelper.GetParent(button) as FrameworkElement;
if (container != null && container.DataContext is DataObject dataItem)
{
CheckBox checkbox = (dialog.Content as StackPanel)?.Children[1] as CheckBox;
if (checkbox.IsChecked == true)
{
File.Delete(dataItem.Dri);
ListMod.Remove(dataItem);
}
gj.sc("确定");
// 获取文件的名称(不包括扩展名)
var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(dataItem.Dri);
var GetDirectoryName = Path.GetDirectoryName(dataItem.Dri);
if (Directory.Exists(GetDirectoryName)&& fileNameWithoutExtension!=null)
{
var targetDirectory = Path.Combine(GetDirectoryName, fileNameWithoutExtension);
var v = wj.UnzipFile(dataItem.Dri, targetDirectory);
gj.sc(v);
if (v)
{
ListMod.Add(new DataObject(new DirectoryInfo(targetDirectory)));
}
}
}
}
}
}
private FrameworkElement CreateCheckboxContent()
{
// 创建 CheckBox
var checkbox = new CheckBox
{
Content = "删除源文件",
IsChecked = false, // 默认未选中
Margin=new Thickness(0,16,0,0),
};
var text = new TextBlock
{
Text = "你可以在本次解压中选择是否删除源文件",
};
// 创建 StackPanel 作为容器
var stackPanel = new StackPanel();
stackPanel.Children.Add(text);
stackPanel.Children.Add(checkbox);
return stackPanel;
}
}
public class MyItemTemplateSelector : DataTemplateSelector
{
public DataTemplate Template1
{
get; set;
} = new();
public DataTemplate Template2
{
get; set;
} = new();
protected override DataTemplate SelectTemplateCore(object item)
{
if (item is not DataObject dataObject)
{
return base.SelectTemplateCore(item);
}
if (dataObject.IsRwmod)
return Template1;
else
return Template2;
}
}