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);
}