diff --git a/build.bat b/build.bat index b055284c..2e7a27c0 100644 --- a/build.bat +++ b/build.bat @@ -6,7 +6,7 @@ cd src rmdir /s /q bin rmdir /s /q obj dotnet publish SourceGit_48.csproj --nologo -c Release -r win-x86 -o ..\publish\net48 -ilrepack /ndebug /out:..\publish\SourceGit.exe ..\publish\net48\SourceGit.exe ..\publish\net48\Newtonsoft.Json.dll +ilrepack /ndebug /out:..\publish\SourceGit.exe ..\publish\net48\SourceGit.exe ..\publish\net48\Newtonsoft.Json.dll ..\publish\net48\Ookii.Dialogs.Wpf.dll cd ..\publish ren SourceGit.exe SourceGit_48.exe rmdir /s /q net48 diff --git a/src/Resources/Locales/en_US.xaml b/src/Resources/Locales/en_US.xaml index 83d3fc03..02d1a10a 100644 --- a/src/Resources/Locales/en_US.xaml +++ b/src/Resources/Locales/en_US.xaml @@ -305,7 +305,6 @@ Clone Remote Repository REPOSITORIES DRAG-DROP YOUR FOLDER - Open or init local repository Add Folder Add Sub-Folder Rename @@ -381,7 +380,6 @@ Input path for merge tool Command : Select Git Executable File - Select default clone path Select {0} Install Path Stash diff --git a/src/Resources/Locales/zh_CN.xaml b/src/Resources/Locales/zh_CN.xaml index 1ed704fb..7e4d742c 100644 --- a/src/Resources/Locales/zh_CN.xaml +++ b/src/Resources/Locales/zh_CN.xaml @@ -9,7 +9,6 @@ 点击前往 在文件浏览器中查看 另存为... - 另存文件到... 复制路径 {0} 字节 过滤 @@ -305,7 +304,6 @@ 克隆远程仓库 仓库列表 支持拖放操作 - 打开/初始化本地仓库 新建分组 新建子分组 重命名 @@ -381,7 +379,6 @@ 填写工具可执行文件所在位置 命令行参数 : 选择git.exe所在位置 - 选择仓库本地存放位置 选择{0}所在位置 贮藏 diff --git a/src/SourceGit.csproj b/src/SourceGit.csproj index 4f1517ad..5438ff73 100644 --- a/src/SourceGit.csproj +++ b/src/SourceGit.csproj @@ -17,4 +17,7 @@ true none + + + \ No newline at end of file diff --git a/src/SourceGit_48.csproj b/src/SourceGit_48.csproj index c93b022f..2ff7608c 100644 --- a/src/SourceGit_48.csproj +++ b/src/SourceGit_48.csproj @@ -21,5 +21,6 @@ + \ No newline at end of file diff --git a/src/Views/Controls/FolderDialog.cs b/src/Views/Controls/FolderDialog.cs deleted file mode 100644 index 5172901e..00000000 --- a/src/Views/Controls/FolderDialog.cs +++ /dev/null @@ -1,137 +0,0 @@ -using System; -using System.Runtime.InteropServices; -using System.Security; - -namespace SourceGit.Views.Controls { - - [SuppressUnmanagedCodeSecurity] - internal delegate Int32 BrowseCallbackProc(IntPtr hwnd, Int32 msg, IntPtr lParam, IntPtr lpData); - - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] - [SuppressUnmanagedCodeSecurity] - internal class BrowseInfo { - public IntPtr hwndOwner; - public IntPtr pidlRoot; - public IntPtr pszDisplayName; - public String lpszTitle; - public Int32 ulFlags; - public BrowseCallbackProc lpfn; - public IntPtr lParam; - public Int32 iImage; - } - - /// - /// Win32 API封装(user32.dll) - /// - [SuppressUnmanagedCodeSecurity] - internal static class User32 { - [DllImport("user32.dll", CharSet = CharSet.Auto)] - public static extern IntPtr SendMessage(HandleRef hWnd, Int32 msg, Int32 wParam, String lParam); - - [DllImport("user32.dll", CharSet = CharSet.Auto)] - public static extern IntPtr SendMessage(HandleRef hWnd, Int32 msg, Int32 wParam, Int32 lParam); - } - - /// - /// Win32 API封装(ole32.dll) - /// - [SuppressUnmanagedCodeSecurity] - internal static class Ole32 { - [DllImport("ole32.dll", CharSet = CharSet.Auto, ExactSpelling = true, SetLastError = true)] - internal static extern void CoTaskMemFree(IntPtr pv); - } - - /// - /// Win32 API封装(shell32.dll) - /// - [SuppressUnmanagedCodeSecurity] - internal static class Shell32 { - [DllImport("shell32.dll", CharSet = CharSet.Auto)] - public static extern Boolean SHGetPathFromIDList(IntPtr pidl, IntPtr pszPath); - - [DllImport("shell32.dll", CharSet = CharSet.Auto)] - public static extern IntPtr SHBrowseForFolder([In] BrowseInfo lpbi); - } - - /// - /// 调用WindowsAPI打开对话目录对话框 - /// - public class FolderDialog : Microsoft.Win32.CommonDialog { - /// - /// 描述信息 - /// - public string Description { get; set; } - - /// - /// 选中的目录 - /// - public string SelectedPath { get; private set; } - - public FolderDialog(string descKey) { - Description = App.Text(descKey); - SelectedPath = string.Empty; - } - - public override void Reset() { - Description = string.Empty; - SelectedPath = string.Empty; - } - - protected override bool RunDialog(IntPtr hwndOwner) { - BrowseCallbackProc callback = new BrowseCallbackProc(BrowseCallbackHandler); - IntPtr displayName = Marshal.AllocHGlobal(260 * Marshal.SystemDefaultCharSize); - bool ok = false; - try { - var info = new BrowseInfo(); - info.pidlRoot = IntPtr.Zero; - info.hwndOwner = hwndOwner; - info.pszDisplayName = displayName; - info.lpszTitle = Description; - info.ulFlags = 0x0040; - info.lpfn = callback; - info.lParam = IntPtr.Zero; - info.iImage = 0; - - IntPtr result = Shell32.SHBrowseForFolder(info); - if (result != IntPtr.Zero) { - IntPtr pathPtr = Marshal.AllocHGlobal(260 * Marshal.SystemDefaultCharSize); - Shell32.SHGetPathFromIDList(result, pathPtr); - - if (pathPtr != IntPtr.Zero) { - SelectedPath = Marshal.PtrToStringAuto(pathPtr); - ok = true; - Marshal.FreeHGlobal(pathPtr); - } - - Ole32.CoTaskMemFree(result); - } - } finally { - if (displayName != IntPtr.Zero) Marshal.FreeHGlobal(displayName); - callback = null; - } - - return ok; - } - - private Int32 BrowseCallbackHandler(IntPtr hwnd, Int32 msg, IntPtr lParam, IntPtr lpData) { - switch (msg) { - case 1: - if (!string.IsNullOrEmpty(SelectedPath)) { - Int32 flag = Marshal.SystemDefaultCharSize == 1 ? 1126 : 1127; - User32.SendMessage(new HandleRef(null, hwnd), flag, 1, SelectedPath); - } - break; - case 2: - if (lParam != IntPtr.Zero) { - IntPtr pathPtr = Marshal.AllocHGlobal(260 * Marshal.SystemDefaultCharSize); - bool flag = Shell32.SHGetPathFromIDList(lParam, pathPtr); - Marshal.FreeHGlobal(pathPtr); - User32.SendMessage(new HandleRef(null, hwnd), 1125, 0, flag ? 1 : 0); - } - break; - } - - return 0; - } - } -} diff --git a/src/Views/Popups/Clone.xaml.cs b/src/Views/Popups/Clone.xaml.cs index 2269fd30..db8becbc 100644 --- a/src/Views/Popups/Clone.xaml.cs +++ b/src/Views/Popups/Clone.xaml.cs @@ -1,3 +1,4 @@ +using Ookii.Dialogs.Wpf; using System.Threading.Tasks; using System.Windows.Controls; @@ -54,7 +55,7 @@ namespace SourceGit.Views.Popups { } private void OnFolderSelectorClick(object sender, System.Windows.RoutedEventArgs e) { - var dialog = new Controls.FolderDialog("Clone.Folder.Placeholder"); + var dialog = new VistaFolderBrowserDialog(); if (dialog.ShowDialog() == true) { Folder = dialog.SelectedPath; txtFolder.GetBindingExpression(TextBox.TextProperty).UpdateTarget(); diff --git a/src/Views/Preference.xaml.cs b/src/Views/Preference.xaml.cs index f47d6d26..ceeca412 100644 --- a/src/Views/Preference.xaml.cs +++ b/src/Views/Preference.xaml.cs @@ -1,4 +1,5 @@ using Microsoft.Win32; +using Ookii.Dialogs.Wpf; using System; using System.Windows; using System.Windows.Controls; @@ -61,7 +62,7 @@ namespace SourceGit.Views { } private void SelectGitCloneDir(object sender, RoutedEventArgs e) { - var dialog = new Controls.FolderDialog("Preference.Dialog.GitDir"); + var dialog = new VistaFolderBrowserDialog(); if (dialog.ShowDialog() == true) { Models.Preference.Instance.Git.DefaultCloneDir = dialog.SelectedPath; txtGitCloneDir?.GetBindingExpression(TextBox.TextProperty).UpdateTarget(); diff --git a/src/Views/Widgets/Histories.xaml.cs b/src/Views/Widgets/Histories.xaml.cs index be900ac1..a28eac78 100644 --- a/src/Views/Widgets/Histories.xaml.cs +++ b/src/Views/Widgets/Histories.xaml.cs @@ -1,3 +1,4 @@ +using Ookii.Dialogs.Wpf; using System; using System.Collections.Generic; using System.Threading.Tasks; @@ -348,7 +349,7 @@ namespace SourceGit.Views.Widgets { var saveToPatch = new MenuItem(); saveToPatch.Header = App.Text("CommitCM.SaveAsPatch"); saveToPatch.Click += (o, e) => { - var dialog = new Controls.FolderDialog("SaveFileTo"); + var dialog = new VistaFolderBrowserDialog(); if (dialog.ShowDialog() == true) { new Commands.FormatPatch(repo.Path, commit.SHA, dialog.SelectedPath).Exec(); } diff --git a/src/Views/Widgets/RevisionFiles.xaml.cs b/src/Views/Widgets/RevisionFiles.xaml.cs index 7811a8d7..9ac98301 100644 --- a/src/Views/Widgets/RevisionFiles.xaml.cs +++ b/src/Views/Widgets/RevisionFiles.xaml.cs @@ -1,3 +1,4 @@ +using Ookii.Dialogs.Wpf; using System; using System.Collections.Generic; using System.Diagnostics; @@ -295,7 +296,7 @@ namespace SourceGit.Views.Widgets { saveAs.Header = App.Text("SaveAs"); saveAs.IsEnabled = node.Type == Models.ObjectType.Blob; saveAs.Click += (obj, ev) => { - var dialog = new Controls.FolderDialog("SaveFileTo"); + var dialog = new VistaFolderBrowserDialog(); if (dialog.ShowDialog() == true) { var full = Path.Combine(dialog.SelectedPath, Path.GetFileName(node.Path)); new Commands.SaveRevisionFile(repo, node.Path, sha, full).Exec(); diff --git a/src/Views/Widgets/Welcome.xaml.cs b/src/Views/Widgets/Welcome.xaml.cs index 2b610fdb..154afa0a 100644 --- a/src/Views/Widgets/Welcome.xaml.cs +++ b/src/Views/Widgets/Welcome.xaml.cs @@ -1,3 +1,4 @@ +using Ookii.Dialogs.Wpf; using System.Collections.Generic; using System.Diagnostics; using System.IO; @@ -47,7 +48,7 @@ namespace SourceGit.Views.Widgets { #region FUNC_EVENTS private void OnOpenClicked(object sender, RoutedEventArgs e) { - var dialog = new Controls.FolderDialog("Welcome.OpenOrInitDialog"); + var dialog = new VistaFolderBrowserDialog(); if (dialog.ShowDialog() == true) CheckAndOpen(dialog.SelectedPath); }