mirror of
https://github.com/sourcegit-scm/sourcegit.git
synced 2024-10-31 13:03:20 -07:00
style<Welcome>: re-design layout for Welcome page
This commit is contained in:
parent
5712630235
commit
717772c62b
6 changed files with 1402 additions and 1443 deletions
|
@ -208,6 +208,7 @@ namespace SourceGit.Models {
|
|||
public WindowInfo Window { get; set; } = new WindowInfo();
|
||||
public List<Group> Groups { get; set; } = new List<Group>();
|
||||
public List<Repository> Repositories { get; set; } = new List<Repository>();
|
||||
public List<string> Recents { get; set; } = new List<string>();
|
||||
public RestoreTabs Restore { get; set; } = new RestoreTabs();
|
||||
#endregion
|
||||
|
||||
|
@ -355,5 +356,36 @@ namespace SourceGit.Models {
|
|||
if (removedIdx >= 0) Repositories.RemoveAt(removedIdx);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region RECENTS
|
||||
public void AddRecent(string path) {
|
||||
if (Recents.Count == 0) {
|
||||
Recents.Add(path);
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < Recents.Count; i++) {
|
||||
if (Recents[i] == path) {
|
||||
if (i != 0) {
|
||||
Recents.RemoveAt(i);
|
||||
Recents.Insert(0, path);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Recents.Insert(0, path);
|
||||
}
|
||||
|
||||
public void RemoveRecent(string path) {
|
||||
for (int i = 0; i < Recents.Count; i++) {
|
||||
if (Recents[i] == path) {
|
||||
Recents.RemoveAt(i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load diff
|
@ -1,499 +1,501 @@
|
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:sys="clr-namespace:System;assembly=mscorlib">
|
||||
<sys:String x:Key="Text.Start" xml:space="preserve">开 始</sys:String>
|
||||
<sys:String x:Key="Text.Sure" xml:space="preserve">确 定</sys:String>
|
||||
<sys:String x:Key="Text.Save" xml:space="preserve">保 存</sys:String>
|
||||
<sys:String x:Key="Text.Close">关闭</sys:String>
|
||||
<sys:String x:Key="Text.Cancel" xml:space="preserve">取 消</sys:String>
|
||||
<sys:String x:Key="Text.Goto">点击前往</sys:String>
|
||||
<sys:String x:Key="Text.RevealFile">在文件浏览器中查看</sys:String>
|
||||
<sys:String x:Key="Text.SaveAs">另存为...</sys:String>
|
||||
<sys:String x:Key="Text.CopyPath">复制路径</sys:String>
|
||||
<sys:String x:Key="Text.Bytes">{0} 字节</sys:String>
|
||||
<sys:String x:Key="Text.Filter">过滤</sys:String>
|
||||
<sys:String x:Key="Text.Optional">选填</sys:String>
|
||||
<sys:String x:Key="Text.OpenFolder">选择文件夹</sys:String>
|
||||
<sys:String x:Key="Text.ThemeSwitcher">切换主题</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.URL">仓库地址 :</sys:String>
|
||||
<sys:String x:Key="Text.RepositoryURL">远程仓库地址</sys:String>
|
||||
<sys:String x:Key="Text.ParentFolder">本地目录 :</sys:String>
|
||||
<sys:String x:Key="Text.ParentFolder.Placeholder">本地存放的父级目录,选填.</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.About">关于软件</sys:String>
|
||||
<sys:String x:Key="Text.About.Title">SourceGit - 开源Git图形客户端</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Apply">补丁</sys:String>
|
||||
<sys:String x:Key="Text.Apply.Title">应用补丁</sys:String>
|
||||
<sys:String x:Key="Text.Apply.File">补丁文件 :</sys:String>
|
||||
<sys:String x:Key="Text.Apply.File.Placeholder">选择补丁文件</sys:String>
|
||||
<sys:String x:Key="Text.Apply.WS">空白符号处理 :</sys:String>
|
||||
<sys:String x:Key="Text.Apply.IgnoreWS">忽略空白符号</sys:String>
|
||||
<sys:String x:Key="Text.Apply.NoWarn">忽略</sys:String>
|
||||
<sys:String x:Key="Text.Apply.NoWarn.Desc">关闭所有警告</sys:String>
|
||||
<sys:String x:Key="Text.Apply.Warn">警告</sys:String>
|
||||
<sys:String x:Key="Text.Apply.Warn.Desc">应用补丁,输出关于空白符的警告</sys:String>
|
||||
<sys:String x:Key="Text.Apply.Error">错误</sys:String>
|
||||
<sys:String x:Key="Text.Apply.Error.Desc">输出错误,并终止应用补丁</sys:String>
|
||||
<sys:String x:Key="Text.Apply.ErrorAll">更多错误</sys:String>
|
||||
<sys:String x:Key="Text.Apply.ErrorAll.Desc">与【错误】级别相似,但输出内容更多</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Archive">存档 ...</sys:String>
|
||||
<sys:String x:Key="Text.Archive.Title">存档</sys:String>
|
||||
<sys:String x:Key="Text.Archive.Revision">指定的提交:</sys:String>
|
||||
<sys:String x:Key="Text.Archive.File">存档文件路径:</sys:String>
|
||||
<sys:String x:Key="Text.Archive.File.Placeholder">选择存档文件的存放路径</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Blame">逐行追溯</sys:String>
|
||||
<sys:String x:Key="Text.Blame.Tip">右键点击查看所选行修改记录</sys:String>
|
||||
<sys:String x:Key="Text.Blame.SHA">提交指纹</sys:String>
|
||||
<sys:String x:Key="Text.Blame.Author">修改者</sys:String>
|
||||
<sys:String x:Key="Text.Blame.ModifyTime">修改时间</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Submodule">子模块</sys:String>
|
||||
<sys:String x:Key="Text.Submodule.Add">添加子模块</sys:String>
|
||||
<sys:String x:Key="Text.Submodule.FetchNested">拉取子孙模块</sys:String>
|
||||
<sys:String x:Key="Text.Submodule.Open">打开仓库</sys:String>
|
||||
<sys:String x:Key="Text.Submodule.CopyPath">复制路径</sys:String>
|
||||
<sys:String x:Key="Text.Submodule.Remove">删除子模块</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.CherryPick">挑选此提交</sys:String>
|
||||
<sys:String x:Key="Text.CherryPick.Title">挑选提交</sys:String>
|
||||
<sys:String x:Key="Text.CherryPick.Commit">提交ID :</sys:String>
|
||||
<sys:String x:Key="Text.CherryPick.CommitChanges">提交变化</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Clone">克隆远程仓库</sys:String>
|
||||
<sys:String x:Key="Text.Clone.RemoteURL">远程仓库 :</sys:String>
|
||||
<sys:String x:Key="Text.Clone.RemoteURL.Placeholder">远程仓库地址</sys:String>
|
||||
<sys:String x:Key="Text.Clone.Folder">父级目录 :</sys:String>
|
||||
<sys:String x:Key="Text.Clone.Folder.Placeholder">选择存放本仓库的父级文件夹路径</sys:String>
|
||||
<sys:String x:Key="Text.Clone.LocalName">本地仓库名 :</sys:String>
|
||||
<sys:String x:Key="Text.Clone.LocalName.Placeholder">本地仓库目录的名字,选填</sys:String>
|
||||
<sys:String x:Key="Text.Clone.RemoteName">远程名 :</sys:String>
|
||||
<sys:String x:Key="Text.Clone.RemoteName.Placeholder">远程的名字,选填</sys:String>
|
||||
<sys:String x:Key="Text.Clone.AdditionalParam">额外参数 :</sys:String>
|
||||
<sys:String x:Key="Text.Clone.AdditionalParam.Placeholder">其他克隆参数,选填</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.CommitViewer.Info">基本信息</sys:String>
|
||||
<sys:String x:Key="Text.CommitViewer.Info.Author">修改者</sys:String>
|
||||
<sys:String x:Key="Text.CommitViewer.Info.Committer">提交者</sys:String>
|
||||
<sys:String x:Key="Text.CommitViewer.Info.SHA">提交指纹</sys:String>
|
||||
<sys:String x:Key="Text.CommitViewer.Info.Parents">父提交</sys:String>
|
||||
<sys:String x:Key="Text.CommitViewer.Info.Refs">相关引用</sys:String>
|
||||
<sys:String x:Key="Text.CommitViewer.Info.Message">提交信息</sys:String>
|
||||
<sys:String x:Key="Text.CommitViewer.Info.Changed">变更列表</sys:String>
|
||||
<sys:String x:Key="Text.CommitViewer.Changes">变更对比</sys:String>
|
||||
<sys:String x:Key="Text.CommitViewer.Changes.Search">查找文件...</sys:String>
|
||||
<sys:String x:Key="Text.CommitViewer.Files">文件列表</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Configure">仓库配置</sys:String>
|
||||
<sys:String x:Key="Text.Configure.User">用户 :</sys:String>
|
||||
<sys:String x:Key="Text.Configure.User.Placeholder">应用于本仓库的用户名</sys:String>
|
||||
<sys:String x:Key="Text.Configure.Email">邮箱 :</sys:String>
|
||||
<sys:String x:Key="Text.Configure.Email.Placeholder">邮箱地址</sys:String>
|
||||
<sys:String x:Key="Text.Configure.Proxy">代理 :</sys:String>
|
||||
<sys:String x:Key="Text.Configure.Proxy.Placeholder">HTTP网络代理</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.CreateBranch">新建分支</sys:String>
|
||||
<sys:String x:Key="Text.CreateBranch.Title">创建本地分支</sys:String>
|
||||
<sys:String x:Key="Text.CreateBranch.BasedOn">新分支基于 :</sys:String>
|
||||
<sys:String x:Key="Text.CreateBranch.Name">新分支名 :</sys:String>
|
||||
<sys:String x:Key="Text.CreateBranch.Name.Placeholder">填写分支名称</sys:String>
|
||||
<sys:String x:Key="Text.CreateBranch.LocalChanges">未提交更改 :</sys:String>
|
||||
<sys:String x:Key="Text.CreateBranch.LocalChanges.StashAndReply">贮藏并自动恢复</sys:String>
|
||||
<sys:String x:Key="Text.CreateBranch.LocalChanges.Discard">忽略</sys:String>
|
||||
<sys:String x:Key="Text.CreateBranch.Checkout">完成后切换到新分支</sys:String>
|
||||
<sys:String x:Key="Text.CreateBranch.Idle">对于空仓库,只有提交一次有效数据,Git 才会创建第一个分支</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.CreateTag">新建标签</sys:String>
|
||||
<sys:String x:Key="Text.CreateTag.BasedOn">标签位于 :</sys:String>
|
||||
<sys:String x:Key="Text.CreateTag.Name">标签名 :</sys:String>
|
||||
<sys:String x:Key="Text.CreateTag.Name.Placeholder">推荐格式 :v1.0.0-alpha</sys:String>
|
||||
<sys:String x:Key="Text.CreateTag.Message">标签描述 :</sys:String>
|
||||
<sys:String x:Key="Text.CreateTag.Message.Placeholder">选填</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Dashboard.Explore">在文件浏览器中打开</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Terminal">打开GIT终端</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Search">查找提交</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Configure">配置本仓库</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Workspace">工作区</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.LocalBranches">本地分支</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.NewBranch">新建分支</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Remotes">远程列表</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Remotes.Add">添加远程</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Tags">标签列表</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Tags.Add">新建标签</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Submodules">子模块列表</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Submodules.Add">添加子模块</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Submodules.Update">更新子模块</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.SubTrees">子树列表</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.SubTrees.Add">添加子树</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Resolve">解决冲突</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Continue">下一步</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Abort">终止冲突解决</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.GitFlow">GIT工作流</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.Init">初始化GIT工作流</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.ProductionBranch">发布分支 :</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.DevelopBranch">开发分支 :</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.Feature">特性分支 :</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.Release">版本分支 :</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.Hotfix">修复分支 :</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.FeaturePrefix">特性分支名前缀 :</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.ReleasePrefix">版本分支名前缀 :</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.HotfixPrefix">修复分支名前缀 :</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.TagPrefix">版本标签前缀 :</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.StartFeature">开始特性分支...</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.StartRelease">开始版本分支...</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.StartHotfix">开始修复分支...</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.StartFeatureTitle">开始特性分支</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.StartReleaseTitle">开始版本分支</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.StartHotfixTitle">开始修复分支</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.StartPlaceholder">输入分支名</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.FinishFeature">结束特性分支</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.FinishRelease">结束版本分支</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.FinishHotfix">结束修复分支</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.BranchRequired">{0}分支名未填写!</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.BranchInvalid">{0}分支名包含非法字符!</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.PrefixRequired">{0}前缀未填写!</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.PrefixInvalid">{0}前缀包含非法字符!</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.DevSameAsProd">开发分支与发布分支不可相同!</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.KeepBranchAfterFinish">保留分支</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.RepoCM.Bookmark">书签</sys:String>
|
||||
<sys:String x:Key="Text.RepoCM.Open">打开</sys:String>
|
||||
<sys:String x:Key="Text.RepoCM.Explore">在浏览器中查看</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.BranchCM.Push">推送 '{0}'</sys:String>
|
||||
<sys:String x:Key="Text.BranchCM.DiscardAll">放弃所有更改</sys:String>
|
||||
<sys:String x:Key="Text.BranchCM.FastForward">快进到 '{0}'</sys:String>
|
||||
<sys:String x:Key="Text.BranchCM.Pull">拉回 '{0}'</sys:String>
|
||||
<sys:String x:Key="Text.BranchCM.PullInto">拉回 '{0}' 内容至 '{1}'</sys:String>
|
||||
<sys:String x:Key="Text.BranchCM.Checkout">检出 '{0}'</sys:String>
|
||||
<sys:String x:Key="Text.BranchCM.Merge">合并 '{0}' 到 '{1}'</sys:String>
|
||||
<sys:String x:Key="Text.BranchCM.Rebase">变基 '{0}' 分支至 '{1}'</sys:String>
|
||||
<sys:String x:Key="Text.BranchCM.Finish">GIT工作流 - 完成 '{0}'</sys:String>
|
||||
<sys:String x:Key="Text.BranchCM.Rename">重命名 '{0}'</sys:String>
|
||||
<sys:String x:Key="Text.BranchCM.Delete">删除 '{0}'</sys:String>
|
||||
<sys:String x:Key="Text.BranchCM.Tracking">切换上游分支...</sys:String>
|
||||
<sys:String x:Key="Text.BranchCM.CopyName">复制分支名</sys:String>
|
||||
<sys:String x:Key="Text.BranchCM.UnsetUpstream">取消追踪</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.RemoteCM.Fetch">拉取 '{0}' 更新</sys:String>
|
||||
<sys:String x:Key="Text.RemoteCM.Edit">编辑 '{0}'</sys:String>
|
||||
<sys:String x:Key="Text.RemoteCM.Delete">删除 '{0}'</sys:String>
|
||||
<sys:String x:Key="Text.RemoteCM.CopyURL">复制远程地址</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.CommitCM.Reset">重置 '{0}' 到此处</sys:String>
|
||||
<sys:String x:Key="Text.CommitCM.Rebase">变基 '{0}' 到此处</sys:String>
|
||||
<sys:String x:Key="Text.CommitCM.CherryPick">挑选此提交</sys:String>
|
||||
<sys:String x:Key="Text.CommitCM.Reword">编辑提交信息</sys:String>
|
||||
<sys:String x:Key="Text.CommitCM.Squash">合并此提交到上一个提交</sys:String>
|
||||
<sys:String x:Key="Text.CommitCM.Revert">回滚此提交</sys:String>
|
||||
<sys:String x:Key="Text.CommitCM.SaveAsPatch">另存为补丁 ...</sys:String>
|
||||
<sys:String x:Key="Text.CommitCM.CopySHA">复制提交指纹</sys:String>
|
||||
<sys:String x:Key="Text.CommitCM.CopyInfo">复制提交信息</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.TagCM.Push">推送 '{0}'</sys:String>
|
||||
<sys:String x:Key="Text.TagCM.Delete">删除 '{0}'</sys:String>
|
||||
<sys:String x:Key="Text.TagCM.Copy">复制标签名</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.StashCM.Apply">应用</sys:String>
|
||||
<sys:String x:Key="Text.StashCM.Pop">应用并删除</sys:String>
|
||||
<sys:String x:Key="Text.StashCM.Drop">删除</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.FileCM.Unstage">从暂存中移除</sys:String>
|
||||
<sys:String x:Key="Text.FileCM.Stage">暂存...</sys:String>
|
||||
<sys:String x:Key="Text.FileCM.Discard">放弃更改...</sys:String>
|
||||
<sys:String x:Key="Text.FileCM.Stash">贮藏...</sys:String>
|
||||
<sys:String x:Key="Text.FileCM.UnstageMulti">从暂存中移除 {0} 个文件</sys:String>
|
||||
<sys:String x:Key="Text.FileCM.StageMulti">暂存 {0} 个文件...</sys:String>
|
||||
<sys:String x:Key="Text.FileCM.DiscardMulti">放弃 {0} 个文件的更改...</sys:String>
|
||||
<sys:String x:Key="Text.FileCM.StashMulti">贮藏选中的 {0} 个文件...</sys:String>
|
||||
<sys:String x:Key="Text.FileCM.SaveAsPatch">另存为补丁...</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.DeleteBranch">确定要删除此分支吗?</sys:String>
|
||||
<sys:String x:Key="Text.DeleteBranch.Branch">分支名 :</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.DeleteRemote">确定要移除该远程吗?</sys:String>
|
||||
<sys:String x:Key="Text.DeleteRemote.Remote">远程名 :</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.DeleteTag">确定要移除该标签吗?</sys:String>
|
||||
<sys:String x:Key="Text.DeleteTag.Tag">标签名 :</sys:String>
|
||||
<sys:String x:Key="Text.DeleteTag.WithRemote">同时删除远程仓库中的此标签</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.DeleteSubmodule">确定要移除该子模块吗?</sys:String>
|
||||
<sys:String x:Key="Text.DeleteSubmodule.Path">子模块路径 :</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Diff.Next">下一个差异</sys:String>
|
||||
<sys:String x:Key="Text.Diff.Prev">上一个差异</sys:String>
|
||||
<sys:String x:Key="Text.Diff.Mode">切换显示模式</sys:String>
|
||||
<sys:String x:Key="Text.Diff.UseMerger">使用外部合并工具查看</sys:String>
|
||||
<sys:String x:Key="Text.Diff.Welcome">请选择需要对比的文件</sys:String>
|
||||
<sys:String x:Key="Text.Diff.NoChange">没有变更或仅有换行符差异</sys:String>
|
||||
<sys:String x:Key="Text.Diff.Binary">二进制文件</sys:String>
|
||||
<sys:String x:Key="Text.Diff.Binary.Old">原始大小 :</sys:String>
|
||||
<sys:String x:Key="Text.Diff.Binary.New">当前大小 :</sys:String>
|
||||
<sys:String x:Key="Text.Diff.LFS">LFS对象变更</sys:String>
|
||||
<sys:String x:Key="Text.Diff.Copy">复制</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Discard">放弃更改确认</sys:String>
|
||||
<sys:String x:Key="Text.Discard.Changes">需要放弃的变更 :</sys:String>
|
||||
<sys:String x:Key="Text.Discard.Warning">本操作不支持回退,请确认后继续!!!</sys:String>
|
||||
<sys:String x:Key="Text.Discard.All">所有本地址未提交的修改</sys:String>
|
||||
<sys:String x:Key="Text.Discard.Total">总计{0}项选中更改</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Fetch">拉取</sys:String>
|
||||
<sys:String x:Key="Text.Fetch.Title">拉取远程仓库内容</sys:String>
|
||||
<sys:String x:Key="Text.Fetch.Remote">远程仓库 :</sys:String>
|
||||
<sys:String x:Key="Text.Fetch.AllRemotes">拉取所有的远程仓库</sys:String>
|
||||
<sys:String x:Key="Text.Fetch.Prune">自动清理远程已删除分支</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.FileHistory">文件历史</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.ChangeDisplayMode">切换变更显示模式</sys:String>
|
||||
<sys:String x:Key="Text.ChangeDisplayMode.Grid">网格模式</sys:String>
|
||||
<sys:String x:Key="Text.ChangeDisplayMode.List">列表模式</sys:String>
|
||||
<sys:String x:Key="Text.ChangeDisplayMode.Tree">树形模式</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.FolderDialog">选择目录...</sys:String>
|
||||
<sys:String x:Key="Text.FolderDialog.Selected">当前选择 :</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Histories">历史记录</sys:String>
|
||||
<sys:String x:Key="Text.Histories.Search">查询提交指纹、信息、作者。回车键开始,ESC键取消</sys:String>
|
||||
<sys:String x:Key="Text.Histories.SearchClear">清空</sys:String>
|
||||
<sys:String x:Key="Text.Histories.GraphMode">切换曲线/折线显示</sys:String>
|
||||
<sys:String x:Key="Text.Histories.DisplayMode">切换横向/纵向显示</sys:String>
|
||||
<sys:String x:Key="Text.Histories.Selected">已选中 {0} 项提交</sys:String>
|
||||
<sys:String x:Key="Text.Histories.Guide">操作说明</sys:String>
|
||||
<sys:String x:Key="Text.Histories.Guide_1">1. 单选时,显示选中提交的详细信息</sys:String>
|
||||
<sys:String x:Key="Text.Histories.Guide_2">2. 双选时,按选中顺序对比两个提交</sys:String>
|
||||
<sys:String x:Key="Text.Histories.Guide_3">3. 多选时,仅统计选中行数</sys:String>
|
||||
<sys:String x:Key="Text.Histories.Guide_4">4. 右键用于操作选中的某个提交</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Init">初始化新仓库</sys:String>
|
||||
<sys:String x:Key="Text.Init.Path">路径 :</sys:String>
|
||||
<sys:String x:Key="Text.Init.Tip">点击【确定】将在此目录执行`git init`操作</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Launcher">Source Git</sys:String>
|
||||
<sys:String x:Key="Text.Launcher.Preference">偏好设置</sys:String>
|
||||
<sys:String x:Key="Text.Launcher.About">关于</sys:String>
|
||||
<sys:String x:Key="Text.Launcher.Error">出错了</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.PageTabBar.New">新建空白页</sys:String>
|
||||
<sys:String x:Key="Text.PageTabBar.Welcome.Title">新标签页</sys:String>
|
||||
<sys:String x:Key="Text.PageTabBar.Welcome.Tip">起始页</sys:String>
|
||||
<sys:String x:Key="Text.PageTabBar.Tab.Close">关闭标签页</sys:String>
|
||||
<sys:String x:Key="Text.PageTabBar.Tab.CloseOther">关闭其他标签页</sys:String>
|
||||
<sys:String x:Key="Text.PageTabBar.Tab.CloseRight">关闭右侧标签页</sys:String>
|
||||
<sys:String x:Key="Text.PageTabBar.Tab.Bookmark">设置书签</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Merge">合并分支</sys:String>
|
||||
<sys:String x:Key="Text.Merge.Source">合并分支 :</sys:String>
|
||||
<sys:String x:Key="Text.Merge.Into">目标分支 :</sys:String>
|
||||
<sys:String x:Key="Text.Merge.Mode">合并方式 :</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Welcome.Title">欢迎使用本软件</sys:String>
|
||||
<sys:String x:Key="Text.Welcome.OpenOrInit">打开本地仓库</sys:String>
|
||||
<sys:String x:Key="Text.Welcome.Clone">克隆远程仓库</sys:String>
|
||||
<sys:String x:Key="Text.Welcome.Bookmarks">收藏/书签</sys:String>
|
||||
<sys:String x:Key="Text.Welcome.Histories">最近使用</sys:String>
|
||||
<sys:String x:Key="Text.Welcome.NewFolder">新建分组</sys:String>
|
||||
<sys:String x:Key="Text.Welcome.NewSubFolder">新建子分组</sys:String>
|
||||
<sys:String x:Key="Text.Welcome.Rename">重命名</sys:String>
|
||||
<sys:String x:Key="Text.Welcome.Delete">删除</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Pull">拉回</sys:String>
|
||||
<sys:String x:Key="Text.Pull.Title">拉回(拉取并合并)</sys:String>
|
||||
<sys:String x:Key="Text.Pull.Remote">远程 :</sys:String>
|
||||
<sys:String x:Key="Text.Pull.Branch">拉取分支 :</sys:String>
|
||||
<sys:String x:Key="Text.Pull.Into">本地分支 :</sys:String>
|
||||
<sys:String x:Key="Text.Pull.UseRebase">使用变基方式合并分支</sys:String>
|
||||
<sys:String x:Key="Text.Pull.AutoStash">自动贮藏并恢复本地变更</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Push">推送</sys:String>
|
||||
<sys:String x:Key="Text.Push.Title">推送到远程仓库</sys:String>
|
||||
<sys:String x:Key="Text.Push.Local">本地分支 :</sys:String>
|
||||
<sys:String x:Key="Text.Push.Remote">远程仓库 :</sys:String>
|
||||
<sys:String x:Key="Text.Push.To">远程分支 :</sys:String>
|
||||
<sys:String x:Key="Text.Push.WithAllTags">同时推送标签</sys:String>
|
||||
<sys:String x:Key="Text.Push.Force">启用强制推送</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.PushTag">推送标签到远程仓库</sys:String>
|
||||
<sys:String x:Key="Text.PushTag.Tag">标签 :</sys:String>
|
||||
<sys:String x:Key="Text.PushTag.Remote">远程仓库 :</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Rebase">变基操作</sys:String>
|
||||
<sys:String x:Key="Text.Rebase.Target">分支 :</sys:String>
|
||||
<sys:String x:Key="Text.Rebase.On">目标提交 :</sys:String>
|
||||
<sys:String x:Key="Text.Rebase.AutoStash">自动贮藏并恢复本地变更</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Remote.AddTitle">添加远程仓库</sys:String>
|
||||
<sys:String x:Key="Text.Remote.EditTitle">编辑远程仓库</sys:String>
|
||||
<sys:String x:Key="Text.Remote.Name">远程名 :</sys:String>
|
||||
<sys:String x:Key="Text.Remote.Name.Placeholder">唯一远程名</sys:String>
|
||||
<sys:String x:Key="Text.Remote.URL">仓库地址 :</sys:String>
|
||||
<sys:String x:Key="Text.Remote.URL.Placeholder">远程仓库的地址</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.RenameBranch">分支重命名</sys:String>
|
||||
<sys:String x:Key="Text.RenameBranch.Target">分支 :</sys:String>
|
||||
<sys:String x:Key="Text.RenameBranch.Name">新的名称 :</sys:String>
|
||||
<sys:String x:Key="Text.RenameBranch.Name.Placeholder">新的分支名不能与现有分支名相同</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Reset">重置当前分支到指定版本</sys:String>
|
||||
<sys:String x:Key="Text.Reset.Target">当前分支 :</sys:String>
|
||||
<sys:String x:Key="Text.Reset.MoveTo">提交 :</sys:String>
|
||||
<sys:String x:Key="Text.Reset.Mode">重置模式 :</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Revert">确定要回滚吗?</sys:String>
|
||||
<sys:String x:Key="Text.Revert.Commit">目标提交 :</sys:String>
|
||||
<sys:String x:Key="Text.Revert.CommitChanges">回滚后提交更改</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Preference">偏好设置</sys:String>
|
||||
<sys:String x:Key="Text.Preference.General">通用配置</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Locale">显示语言</sys:String>
|
||||
<sys:String x:Key="Text.Preference.FontFamilyWindow">系统字体</sys:String>
|
||||
<sys:String x:Key="Text.Preference.FontFamilyContent">文本字体</sys:String>
|
||||
<sys:String x:Key="Text.Preference.AvatarServer">头像服务</sys:String>
|
||||
<sys:String x:Key="Text.Preference.CheckUpdate">启用检测更新</sys:String>
|
||||
<sys:String x:Key="Text.Preference.AutoFetch">启用定时自动拉取远程更新(重启生效)</sys:String>
|
||||
<sys:String x:Key="Text.Preference.RestoreTabs">启动时恢复上次打开的仓库</sys:String>
|
||||
<sys:String x:Key="Text.Preference.EnableCrashReport">开启崩溃上报(可能涉及上报相关路径)</sys:String>
|
||||
<sys:String x:Key="Text.Preference.UseWindowsTerminal">使用 Windows Terminal 打开 Git 终端</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Git">GIT配置</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Git.Path">安装路径</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Git.Path.Placeholder">填写git.exe所在位置</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Git.Version">Git 版本</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Git.Dir">默认克隆路径</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Git.Dir.Placeholder">默认的仓库本地存放位置</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Git.User">用户名</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Git.User.Placeholder">默认GIT用户名</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Git.Email">邮箱</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Git.Email.Placeholder">默认GIT用户邮箱</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Git.CRLF">自动换行转换</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Merger">外部合并工具</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Merger.Type">工具</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Merger.Path">安装路径</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Merger.Path.Placeholder">填写工具可执行文件所在位置</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Dialog.GitExe">选择git.exe所在位置</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Dialog.Merger">选择{0}所在位置</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Stash">贮藏</sys:String>
|
||||
<sys:String x:Key="Text.Stash.Title">贮藏本地变更</sys:String>
|
||||
<sys:String x:Key="Text.Stash.Message">信息 :</sys:String>
|
||||
<sys:String x:Key="Text.Stash.Message.Placeholder">选填,用于命名此贮藏</sys:String>
|
||||
<sys:String x:Key="Text.Stash.IncludeUntracked">包含未跟踪的文件</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Stashes">贮藏列表</sys:String>
|
||||
<sys:String x:Key="Text.Stashes.Stashes">贮藏列表</sys:String>
|
||||
<sys:String x:Key="Text.Stashes.Changes">查看变更</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.TwoCommitsDiff">对比提交 : {0} -> {1}</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.UpdateAvailable">检测更新</sys:String>
|
||||
<sys:String x:Key="Text.UpdateAvailable.Title">{0}已发布!</sys:String>
|
||||
<sys:String x:Key="Text.UpdateAvailable.Time">发布时间</sys:String>
|
||||
<sys:String x:Key="Text.UpdateAvailable.Based">GIT版本</sys:String>
|
||||
<sys:String x:Key="Text.UpdateAvailable.IsPreRelease">预览版</sys:String>
|
||||
<sys:String x:Key="Text.UpdateAvailable.Download" xml:space="preserve">下 载</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.WorkingCopy">本地更改</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.Unstaged">未暂存</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.Unstaged.Stage">暂存选中</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.Unstaged.StageAll">暂存所有</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.Staged">已暂存</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.Staged.Unstage">从暂存区移除选中</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.Staged.UnstageAll">从暂存区移除所有</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.Conflicts">检测到冲突</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.UseTheirs">使用THEIRS</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.UseMine">使用MINE</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.OpenMerger">打开合并工具</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.CommitMessageTip">填写提交信息</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.MessageHistories">历史提交信息</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.Amend">修补</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.Commit">提交</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.CommitAndPush">提交并推送</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.NoCommitHistories">没有提交信息记录</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.HasCommitHistories">最近输入的提交信息</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Conflict.CherryPick">检测到挑选提交冲突! </sys:String>
|
||||
<sys:String x:Key="Text.Conflict.Rebase">检测到变基冲突!</sys:String>
|
||||
<sys:String x:Key="Text.Conflict.Revert">检测到回滚提交冲突!</sys:String>
|
||||
<sys:String x:Key="Text.Conflict.Merge">检测到分支合并冲突!</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Restart.Title">系统提示</sys:String>
|
||||
<sys:String x:Key="Text.Restart.Content">本次配置变更需要在重启后生效,是否立即重启?</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.AddSubTree">添加子树</sys:String>
|
||||
<sys:String x:Key="Text.AddSubTree.Source">远程地址:</sys:String>
|
||||
<sys:String x:Key="Text.AddSubTree.Branch">分支或提交ID:</sys:String>
|
||||
<sys:String x:Key="Text.AddSubTree.Prefix">本地相对路径:</sys:String>
|
||||
<sys:String x:Key="Text.AddSubTree.Squash">合并提交为单一提交</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.EditSubTree">编辑子树信息</sys:String>
|
||||
<sys:String x:Key="Text.EditSubTree.Source">远程地址:</sys:String>
|
||||
<sys:String x:Key="Text.EditSubTree.Prefix">本地相对路径:</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.UnlinkSubTree">删除子树</sys:String>
|
||||
<sys:String x:Key="Text.UnlinkSubTree.Prefix">本地相对路径:</sys:String>
|
||||
<sys:String x:Key="Text.UnlinkSubTree.Tips">本操作仅将子树信息删除,相关文件及提交不会更改</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.SubTreePullOrPush.Pull">拉取子树更新</sys:String>
|
||||
<sys:String x:Key="Text.SubTreePullOrPush.Push">推送子树更新到远程</sys:String>
|
||||
<sys:String x:Key="Text.SubTreePullOrPush.Prefix">本地相对路径:</sys:String>
|
||||
<sys:String x:Key="Text.SubTreePullOrPush.Source">远程地址:</sys:String>
|
||||
<sys:String x:Key="Text.SubTreePullOrPush.Branch">远程分支:</sys:String>
|
||||
<sys:String x:Key="Text.SubTreePullOrPush.Squash">合并提交为单一提交</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.SubTree.Edit">编辑子树 ...</sys:String>
|
||||
<sys:String x:Key="Text.SubTree.Unlink">删除子树 ...</sys:String>
|
||||
<sys:String x:Key="Text.SubTree.Pull">拉取子树更新</sys:String>
|
||||
<sys:String x:Key="Text.SubTree.Push">推送子树变更</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Hotkeys">快捷键</sys:String>
|
||||
<sys:String x:Key="Text.Hotkeys.Col.Key">快捷键</sys:String>
|
||||
<sys:String x:Key="Text.Hotkeys.Col.Desc">功能说明</sys:String>
|
||||
<sys:String x:Key="Text.Hotkeys.NewTab">新建标签页</sys:String>
|
||||
<sys:String x:Key="Text.Hotkeys.CloseTab">关闭当前浏览标签页</sys:String>
|
||||
<sys:String x:Key="Text.Hotkeys.NextTab">切换到下一个标签页</sys:String>
|
||||
<sys:String x:Key="Text.Hotkeys.SwitchTo">切换到指定位置的标签页</sys:String>
|
||||
<sys:String x:Key="Text.Hotkeys.Search">打开/隐藏搜索框(仅在仓库页起效)</sys:String>
|
||||
<sys:String x:Key="Text.Hotkeys.Refresh">重新加载当前仓库信息(仅在仓库页起效)</sys:String>
|
||||
<sys:String x:Key="Text.Hotkeys.ToggleStage">暂存或从暂存中移除当前选中</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Reword">编辑提交信息</sys:String>
|
||||
<sys:String x:Key="Text.Reword.On">提交:</sys:String>
|
||||
<sys:String x:Key="Text.Reword.Message">提交信息:</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Squash">合并HEAD到上一个提交</sys:String>
|
||||
<sys:String x:Key="Text.Squash.Head">当前提交 :</sys:String>
|
||||
<sys:String x:Key="Text.Squash.To">合并到 :</sys:String>
|
||||
<sys:String x:Key="Text.Squash.Message">修改提交信息:</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.NotConfigured">GIT尚未配置。请打开【偏好设置】配置GIT路径。</sys:String>
|
||||
<sys:String x:Key="Text.PathNotFound">路径({0})不存在或不可读取!</sys:String>
|
||||
<sys:String x:Key="Text.MissingBash">无法找到bash.exe,请确保其在git.exe同目录中!</sys:String>
|
||||
<sys:String x:Key="Text.BinaryNotSupported">二进制文件不支持该操作!!!</sys:String>
|
||||
<sys:String x:Key="Text.BlameTypeNotSupported">选中文件不支持该操作!!!</sys:String>
|
||||
<sys:String x:Key="Text.GitDirNotFound">获取仓库GIT_DIR失败!</sys:String>
|
||||
<sys:String x:Key="Text.InitGitFlowFailed">初始化GIT FLOW失败!</sys:String>
|
||||
<sys:String x:Key="Text.BadGitFlowType">不支持的GIT FLOW分支!</sys:String>
|
||||
<sys:String x:Key="Text.BadCloneFolder">目录不存在或不可写!!!</sys:String>
|
||||
<sys:String x:Key="Text.BadRemoteUri">非法的远程仓库地址!</sys:String>
|
||||
<sys:String x:Key="Text.BadLocalName">非法的本地仓库地址!</sys:String>
|
||||
<sys:String x:Key="Text.EmptyRemoteName">远程仓库地址不可为空</sys:String>
|
||||
<sys:String x:Key="Text.BadRemoteName">远程仓库地址包含非法字符!仅支持字母、数字、下划线、横线或英文点号!</sys:String>
|
||||
<sys:String x:Key="Text.DuplicatedRemoteName">远程仓库名已存在!</sys:String>
|
||||
<sys:String x:Key="Text.EmptyBranchName">分支名不可为空</sys:String>
|
||||
<sys:String x:Key="Text.BadBranchName">分支名包含非法字符!仅支持字母、数字、下划线、横线或英文点号!</sys:String>
|
||||
<sys:String x:Key="Text.DuplicatedBranchName">分支名已存在!</sys:String>
|
||||
<sys:String x:Key="Text.EmptyTagName">标签名不可为空!</sys:String>
|
||||
<sys:String x:Key="Text.BadTagName">标签名包含非法字符!仅支持字母、数字、下划线、横线或英文点号!</sys:String>
|
||||
<sys:String x:Key="Text.DuplicatedTagName">标签名已存在!</sys:String>
|
||||
<sys:String x:Key="Text.EmptyCommitMessage">提交信息未填写!</sys:String>
|
||||
<sys:String x:Key="Text.BadPatchFile">补丁文件不存在或不可访问!</sys:String>
|
||||
<sys:String x:Key="Text.BadRelativePath">非法的子路径!</sys:String>
|
||||
<sys:String x:Key="Text.BadArchiveFile">非法的存档文件路径!</sys:String>
|
||||
<sys:String x:Key="Text.Required">内容未填写!</sys:String>
|
||||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:sys="clr-namespace:System;assembly=mscorlib">
|
||||
<sys:String x:Key="Text.Start" xml:space="preserve">开 始</sys:String>
|
||||
<sys:String x:Key="Text.Sure" xml:space="preserve">确 定</sys:String>
|
||||
<sys:String x:Key="Text.Save" xml:space="preserve">保 存</sys:String>
|
||||
<sys:String x:Key="Text.Close">关闭</sys:String>
|
||||
<sys:String x:Key="Text.Cancel" xml:space="preserve">取 消</sys:String>
|
||||
<sys:String x:Key="Text.Goto">点击前往</sys:String>
|
||||
<sys:String x:Key="Text.RevealFile">在文件浏览器中查看</sys:String>
|
||||
<sys:String x:Key="Text.SaveAs">另存为...</sys:String>
|
||||
<sys:String x:Key="Text.CopyPath">复制路径</sys:String>
|
||||
<sys:String x:Key="Text.Bytes">{0} 字节</sys:String>
|
||||
<sys:String x:Key="Text.Filter">过滤</sys:String>
|
||||
<sys:String x:Key="Text.Optional">选填</sys:String>
|
||||
<sys:String x:Key="Text.OpenFolder">选择文件夹</sys:String>
|
||||
<sys:String x:Key="Text.ThemeSwitcher">切换主题</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.URL">仓库地址 :</sys:String>
|
||||
<sys:String x:Key="Text.RepositoryURL">远程仓库地址</sys:String>
|
||||
<sys:String x:Key="Text.ParentFolder">本地目录 :</sys:String>
|
||||
<sys:String x:Key="Text.ParentFolder.Placeholder">本地存放的父级目录,选填.</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.About">关于软件</sys:String>
|
||||
<sys:String x:Key="Text.About.Title">SourceGit - 开源Git图形客户端</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Apply">补丁</sys:String>
|
||||
<sys:String x:Key="Text.Apply.Title">应用补丁</sys:String>
|
||||
<sys:String x:Key="Text.Apply.File">补丁文件 :</sys:String>
|
||||
<sys:String x:Key="Text.Apply.File.Placeholder">选择补丁文件</sys:String>
|
||||
<sys:String x:Key="Text.Apply.WS">空白符号处理 :</sys:String>
|
||||
<sys:String x:Key="Text.Apply.IgnoreWS">忽略空白符号</sys:String>
|
||||
<sys:String x:Key="Text.Apply.NoWarn">忽略</sys:String>
|
||||
<sys:String x:Key="Text.Apply.NoWarn.Desc">关闭所有警告</sys:String>
|
||||
<sys:String x:Key="Text.Apply.Warn">警告</sys:String>
|
||||
<sys:String x:Key="Text.Apply.Warn.Desc">应用补丁,输出关于空白符的警告</sys:String>
|
||||
<sys:String x:Key="Text.Apply.Error">错误</sys:String>
|
||||
<sys:String x:Key="Text.Apply.Error.Desc">输出错误,并终止应用补丁</sys:String>
|
||||
<sys:String x:Key="Text.Apply.ErrorAll">更多错误</sys:String>
|
||||
<sys:String x:Key="Text.Apply.ErrorAll.Desc">与【错误】级别相似,但输出内容更多</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Archive">存档 ...</sys:String>
|
||||
<sys:String x:Key="Text.Archive.Title">存档</sys:String>
|
||||
<sys:String x:Key="Text.Archive.Revision">指定的提交:</sys:String>
|
||||
<sys:String x:Key="Text.Archive.File">存档文件路径:</sys:String>
|
||||
<sys:String x:Key="Text.Archive.File.Placeholder">选择存档文件的存放路径</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Blame">逐行追溯</sys:String>
|
||||
<sys:String x:Key="Text.Blame.Tip">右键点击查看所选行修改记录</sys:String>
|
||||
<sys:String x:Key="Text.Blame.SHA">提交指纹</sys:String>
|
||||
<sys:String x:Key="Text.Blame.Author">修改者</sys:String>
|
||||
<sys:String x:Key="Text.Blame.ModifyTime">修改时间</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Submodule">子模块</sys:String>
|
||||
<sys:String x:Key="Text.Submodule.Add">添加子模块</sys:String>
|
||||
<sys:String x:Key="Text.Submodule.FetchNested">拉取子孙模块</sys:String>
|
||||
<sys:String x:Key="Text.Submodule.Open">打开仓库</sys:String>
|
||||
<sys:String x:Key="Text.Submodule.CopyPath">复制路径</sys:String>
|
||||
<sys:String x:Key="Text.Submodule.Remove">删除子模块</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.CherryPick">挑选此提交</sys:String>
|
||||
<sys:String x:Key="Text.CherryPick.Title">挑选提交</sys:String>
|
||||
<sys:String x:Key="Text.CherryPick.Commit">提交ID :</sys:String>
|
||||
<sys:String x:Key="Text.CherryPick.CommitChanges">提交变化</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Clone">克隆远程仓库</sys:String>
|
||||
<sys:String x:Key="Text.Clone.RemoteURL">远程仓库 :</sys:String>
|
||||
<sys:String x:Key="Text.Clone.RemoteURL.Placeholder">远程仓库地址</sys:String>
|
||||
<sys:String x:Key="Text.Clone.Folder">父级目录 :</sys:String>
|
||||
<sys:String x:Key="Text.Clone.Folder.Placeholder">选择存放本仓库的父级文件夹路径</sys:String>
|
||||
<sys:String x:Key="Text.Clone.LocalName">本地仓库名 :</sys:String>
|
||||
<sys:String x:Key="Text.Clone.LocalName.Placeholder">本地仓库目录的名字,选填</sys:String>
|
||||
<sys:String x:Key="Text.Clone.RemoteName">远程名 :</sys:String>
|
||||
<sys:String x:Key="Text.Clone.RemoteName.Placeholder">远程的名字,选填</sys:String>
|
||||
<sys:String x:Key="Text.Clone.AdditionalParam">额外参数 :</sys:String>
|
||||
<sys:String x:Key="Text.Clone.AdditionalParam.Placeholder">其他克隆参数,选填</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.CommitViewer.Info">基本信息</sys:String>
|
||||
<sys:String x:Key="Text.CommitViewer.Info.Author">修改者</sys:String>
|
||||
<sys:String x:Key="Text.CommitViewer.Info.Committer">提交者</sys:String>
|
||||
<sys:String x:Key="Text.CommitViewer.Info.SHA">提交指纹</sys:String>
|
||||
<sys:String x:Key="Text.CommitViewer.Info.Parents">父提交</sys:String>
|
||||
<sys:String x:Key="Text.CommitViewer.Info.Refs">相关引用</sys:String>
|
||||
<sys:String x:Key="Text.CommitViewer.Info.Message">提交信息</sys:String>
|
||||
<sys:String x:Key="Text.CommitViewer.Info.Changed">变更列表</sys:String>
|
||||
<sys:String x:Key="Text.CommitViewer.Changes">变更对比</sys:String>
|
||||
<sys:String x:Key="Text.CommitViewer.Changes.Search">查找文件...</sys:String>
|
||||
<sys:String x:Key="Text.CommitViewer.Files">文件列表</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Configure">仓库配置</sys:String>
|
||||
<sys:String x:Key="Text.Configure.User">用户 :</sys:String>
|
||||
<sys:String x:Key="Text.Configure.User.Placeholder">应用于本仓库的用户名</sys:String>
|
||||
<sys:String x:Key="Text.Configure.Email">邮箱 :</sys:String>
|
||||
<sys:String x:Key="Text.Configure.Email.Placeholder">邮箱地址</sys:String>
|
||||
<sys:String x:Key="Text.Configure.Proxy">代理 :</sys:String>
|
||||
<sys:String x:Key="Text.Configure.Proxy.Placeholder">HTTP网络代理</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.CreateBranch">新建分支</sys:String>
|
||||
<sys:String x:Key="Text.CreateBranch.Title">创建本地分支</sys:String>
|
||||
<sys:String x:Key="Text.CreateBranch.BasedOn">新分支基于 :</sys:String>
|
||||
<sys:String x:Key="Text.CreateBranch.Name">新分支名 :</sys:String>
|
||||
<sys:String x:Key="Text.CreateBranch.Name.Placeholder">填写分支名称</sys:String>
|
||||
<sys:String x:Key="Text.CreateBranch.LocalChanges">未提交更改 :</sys:String>
|
||||
<sys:String x:Key="Text.CreateBranch.LocalChanges.StashAndReply">贮藏并自动恢复</sys:String>
|
||||
<sys:String x:Key="Text.CreateBranch.LocalChanges.Discard">忽略</sys:String>
|
||||
<sys:String x:Key="Text.CreateBranch.Checkout">完成后切换到新分支</sys:String>
|
||||
<sys:String x:Key="Text.CreateBranch.Idle">对于空仓库,只有提交一次有效数据,Git 才会创建第一个分支</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.CreateTag">新建标签</sys:String>
|
||||
<sys:String x:Key="Text.CreateTag.BasedOn">标签位于 :</sys:String>
|
||||
<sys:String x:Key="Text.CreateTag.Name">标签名 :</sys:String>
|
||||
<sys:String x:Key="Text.CreateTag.Name.Placeholder">推荐格式 :v1.0.0-alpha</sys:String>
|
||||
<sys:String x:Key="Text.CreateTag.Message">标签描述 :</sys:String>
|
||||
<sys:String x:Key="Text.CreateTag.Message.Placeholder">选填</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Dashboard.Explore">在文件浏览器中打开</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Terminal">打开GIT终端</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Search">查找提交</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Configure">配置本仓库</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Workspace">工作区</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.LocalBranches">本地分支</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.NewBranch">新建分支</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Remotes">远程列表</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Remotes.Add">添加远程</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Tags">标签列表</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Tags.Add">新建标签</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Submodules">子模块列表</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Submodules.Add">添加子模块</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Submodules.Update">更新子模块</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.SubTrees">子树列表</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.SubTrees.Add">添加子树</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Resolve">解决冲突</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Continue">下一步</sys:String>
|
||||
<sys:String x:Key="Text.Dashboard.Abort">终止冲突解决</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.GitFlow">GIT工作流</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.Init">初始化GIT工作流</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.ProductionBranch">发布分支 :</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.DevelopBranch">开发分支 :</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.Feature">特性分支 :</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.Release">版本分支 :</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.Hotfix">修复分支 :</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.FeaturePrefix">特性分支名前缀 :</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.ReleasePrefix">版本分支名前缀 :</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.HotfixPrefix">修复分支名前缀 :</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.TagPrefix">版本标签前缀 :</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.StartFeature">开始特性分支...</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.StartRelease">开始版本分支...</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.StartHotfix">开始修复分支...</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.StartFeatureTitle">开始特性分支</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.StartReleaseTitle">开始版本分支</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.StartHotfixTitle">开始修复分支</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.StartPlaceholder">输入分支名</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.FinishFeature">结束特性分支</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.FinishRelease">结束版本分支</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.FinishHotfix">结束修复分支</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.BranchRequired">{0}分支名未填写!</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.BranchInvalid">{0}分支名包含非法字符!</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.PrefixRequired">{0}前缀未填写!</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.PrefixInvalid">{0}前缀包含非法字符!</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.DevSameAsProd">开发分支与发布分支不可相同!</sys:String>
|
||||
<sys:String x:Key="Text.GitFlow.KeepBranchAfterFinish">保留分支</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.RepoCM.Bookmark">书签</sys:String>
|
||||
<sys:String x:Key="Text.RepoCM.Open">打开</sys:String>
|
||||
<sys:String x:Key="Text.RepoCM.Explore">在浏览器中查看</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.BranchCM.Push">推送 '{0}'</sys:String>
|
||||
<sys:String x:Key="Text.BranchCM.DiscardAll">放弃所有更改</sys:String>
|
||||
<sys:String x:Key="Text.BranchCM.FastForward">快进到 '{0}'</sys:String>
|
||||
<sys:String x:Key="Text.BranchCM.Pull">拉回 '{0}'</sys:String>
|
||||
<sys:String x:Key="Text.BranchCM.PullInto">拉回 '{0}' 内容至 '{1}'</sys:String>
|
||||
<sys:String x:Key="Text.BranchCM.Checkout">检出 '{0}'</sys:String>
|
||||
<sys:String x:Key="Text.BranchCM.Merge">合并 '{0}' 到 '{1}'</sys:String>
|
||||
<sys:String x:Key="Text.BranchCM.Rebase">变基 '{0}' 分支至 '{1}'</sys:String>
|
||||
<sys:String x:Key="Text.BranchCM.Finish">GIT工作流 - 完成 '{0}'</sys:String>
|
||||
<sys:String x:Key="Text.BranchCM.Rename">重命名 '{0}'</sys:String>
|
||||
<sys:String x:Key="Text.BranchCM.Delete">删除 '{0}'</sys:String>
|
||||
<sys:String x:Key="Text.BranchCM.Tracking">切换上游分支...</sys:String>
|
||||
<sys:String x:Key="Text.BranchCM.CopyName">复制分支名</sys:String>
|
||||
<sys:String x:Key="Text.BranchCM.UnsetUpstream">取消追踪</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.RemoteCM.Fetch">拉取 '{0}' 更新</sys:String>
|
||||
<sys:String x:Key="Text.RemoteCM.Edit">编辑 '{0}'</sys:String>
|
||||
<sys:String x:Key="Text.RemoteCM.Delete">删除 '{0}'</sys:String>
|
||||
<sys:String x:Key="Text.RemoteCM.CopyURL">复制远程地址</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.CommitCM.Reset">重置 '{0}' 到此处</sys:String>
|
||||
<sys:String x:Key="Text.CommitCM.Rebase">变基 '{0}' 到此处</sys:String>
|
||||
<sys:String x:Key="Text.CommitCM.CherryPick">挑选此提交</sys:String>
|
||||
<sys:String x:Key="Text.CommitCM.Reword">编辑提交信息</sys:String>
|
||||
<sys:String x:Key="Text.CommitCM.Squash">合并此提交到上一个提交</sys:String>
|
||||
<sys:String x:Key="Text.CommitCM.Revert">回滚此提交</sys:String>
|
||||
<sys:String x:Key="Text.CommitCM.SaveAsPatch">另存为补丁 ...</sys:String>
|
||||
<sys:String x:Key="Text.CommitCM.CopySHA">复制提交指纹</sys:String>
|
||||
<sys:String x:Key="Text.CommitCM.CopyInfo">复制提交信息</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.TagCM.Push">推送 '{0}'</sys:String>
|
||||
<sys:String x:Key="Text.TagCM.Delete">删除 '{0}'</sys:String>
|
||||
<sys:String x:Key="Text.TagCM.Copy">复制标签名</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.StashCM.Apply">应用</sys:String>
|
||||
<sys:String x:Key="Text.StashCM.Pop">应用并删除</sys:String>
|
||||
<sys:String x:Key="Text.StashCM.Drop">删除</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.FileCM.Unstage">从暂存中移除</sys:String>
|
||||
<sys:String x:Key="Text.FileCM.Stage">暂存...</sys:String>
|
||||
<sys:String x:Key="Text.FileCM.Discard">放弃更改...</sys:String>
|
||||
<sys:String x:Key="Text.FileCM.Stash">贮藏...</sys:String>
|
||||
<sys:String x:Key="Text.FileCM.UnstageMulti">从暂存中移除 {0} 个文件</sys:String>
|
||||
<sys:String x:Key="Text.FileCM.StageMulti">暂存 {0} 个文件...</sys:String>
|
||||
<sys:String x:Key="Text.FileCM.DiscardMulti">放弃 {0} 个文件的更改...</sys:String>
|
||||
<sys:String x:Key="Text.FileCM.StashMulti">贮藏选中的 {0} 个文件...</sys:String>
|
||||
<sys:String x:Key="Text.FileCM.SaveAsPatch">另存为补丁...</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.DeleteBranch">确定要删除此分支吗?</sys:String>
|
||||
<sys:String x:Key="Text.DeleteBranch.Branch">分支名 :</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.DeleteRemote">确定要移除该远程吗?</sys:String>
|
||||
<sys:String x:Key="Text.DeleteRemote.Remote">远程名 :</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.DeleteTag">确定要移除该标签吗?</sys:String>
|
||||
<sys:String x:Key="Text.DeleteTag.Tag">标签名 :</sys:String>
|
||||
<sys:String x:Key="Text.DeleteTag.WithRemote">同时删除远程仓库中的此标签</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.DeleteSubmodule">确定要移除该子模块吗?</sys:String>
|
||||
<sys:String x:Key="Text.DeleteSubmodule.Path">子模块路径 :</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Diff.Next">下一个差异</sys:String>
|
||||
<sys:String x:Key="Text.Diff.Prev">上一个差异</sys:String>
|
||||
<sys:String x:Key="Text.Diff.Mode">切换显示模式</sys:String>
|
||||
<sys:String x:Key="Text.Diff.UseMerger">使用外部合并工具查看</sys:String>
|
||||
<sys:String x:Key="Text.Diff.Welcome">请选择需要对比的文件</sys:String>
|
||||
<sys:String x:Key="Text.Diff.NoChange">没有变更或仅有换行符差异</sys:String>
|
||||
<sys:String x:Key="Text.Diff.Binary">二进制文件</sys:String>
|
||||
<sys:String x:Key="Text.Diff.Binary.Old">原始大小 :</sys:String>
|
||||
<sys:String x:Key="Text.Diff.Binary.New">当前大小 :</sys:String>
|
||||
<sys:String x:Key="Text.Diff.LFS">LFS对象变更</sys:String>
|
||||
<sys:String x:Key="Text.Diff.Copy">复制</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Discard">放弃更改确认</sys:String>
|
||||
<sys:String x:Key="Text.Discard.Changes">需要放弃的变更 :</sys:String>
|
||||
<sys:String x:Key="Text.Discard.Warning">本操作不支持回退,请确认后继续!!!</sys:String>
|
||||
<sys:String x:Key="Text.Discard.All">所有本地址未提交的修改</sys:String>
|
||||
<sys:String x:Key="Text.Discard.Total">总计{0}项选中更改</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Fetch">拉取</sys:String>
|
||||
<sys:String x:Key="Text.Fetch.Title">拉取远程仓库内容</sys:String>
|
||||
<sys:String x:Key="Text.Fetch.Remote">远程仓库 :</sys:String>
|
||||
<sys:String x:Key="Text.Fetch.AllRemotes">拉取所有的远程仓库</sys:String>
|
||||
<sys:String x:Key="Text.Fetch.Prune">自动清理远程已删除分支</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.FileHistory">文件历史</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.ChangeDisplayMode">切换变更显示模式</sys:String>
|
||||
<sys:String x:Key="Text.ChangeDisplayMode.Grid">网格模式</sys:String>
|
||||
<sys:String x:Key="Text.ChangeDisplayMode.List">列表模式</sys:String>
|
||||
<sys:String x:Key="Text.ChangeDisplayMode.Tree">树形模式</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.FolderDialog">选择目录...</sys:String>
|
||||
<sys:String x:Key="Text.FolderDialog.Selected">当前选择 :</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Histories">历史记录</sys:String>
|
||||
<sys:String x:Key="Text.Histories.Search">查询提交指纹、信息、作者。回车键开始,ESC键取消</sys:String>
|
||||
<sys:String x:Key="Text.Histories.SearchClear">清空</sys:String>
|
||||
<sys:String x:Key="Text.Histories.GraphMode">切换曲线/折线显示</sys:String>
|
||||
<sys:String x:Key="Text.Histories.DisplayMode">切换横向/纵向显示</sys:String>
|
||||
<sys:String x:Key="Text.Histories.Selected">已选中 {0} 项提交</sys:String>
|
||||
<sys:String x:Key="Text.Histories.Guide">操作说明</sys:String>
|
||||
<sys:String x:Key="Text.Histories.Guide_1">1. 单选时,显示选中提交的详细信息</sys:String>
|
||||
<sys:String x:Key="Text.Histories.Guide_2">2. 双选时,按选中顺序对比两个提交</sys:String>
|
||||
<sys:String x:Key="Text.Histories.Guide_3">3. 多选时,仅统计选中行数</sys:String>
|
||||
<sys:String x:Key="Text.Histories.Guide_4">4. 右键用于操作选中的某个提交</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Init">初始化新仓库</sys:String>
|
||||
<sys:String x:Key="Text.Init.Path">路径 :</sys:String>
|
||||
<sys:String x:Key="Text.Init.Tip">点击【确定】将在此目录执行`git init`操作</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Launcher">Source Git</sys:String>
|
||||
<sys:String x:Key="Text.Launcher.Preference">偏好设置</sys:String>
|
||||
<sys:String x:Key="Text.Launcher.About">关于</sys:String>
|
||||
<sys:String x:Key="Text.Launcher.Error">出错了</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.PageTabBar.New">新建空白页</sys:String>
|
||||
<sys:String x:Key="Text.PageTabBar.Welcome.Title">新标签页</sys:String>
|
||||
<sys:String x:Key="Text.PageTabBar.Welcome.Tip">起始页</sys:String>
|
||||
<sys:String x:Key="Text.PageTabBar.Tab.Close">关闭标签页</sys:String>
|
||||
<sys:String x:Key="Text.PageTabBar.Tab.CloseOther">关闭其他标签页</sys:String>
|
||||
<sys:String x:Key="Text.PageTabBar.Tab.CloseRight">关闭右侧标签页</sys:String>
|
||||
<sys:String x:Key="Text.PageTabBar.Tab.Bookmark">设置书签</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Merge">合并分支</sys:String>
|
||||
<sys:String x:Key="Text.Merge.Source">合并分支 :</sys:String>
|
||||
<sys:String x:Key="Text.Merge.Into">目标分支 :</sys:String>
|
||||
<sys:String x:Key="Text.Merge.Mode">合并方式 :</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Welcome.Title">欢迎使用本软件</sys:String>
|
||||
<sys:String x:Key="Text.Welcome.OpenOrInit">打开本地仓库</sys:String>
|
||||
<sys:String x:Key="Text.Welcome.Clone">克隆远程仓库</sys:String>
|
||||
<sys:String x:Key="Text.Welcome.DragDrop">支持拖放操作</sys:String>
|
||||
<sys:String x:Key="Text.Welcome.Start">开始使用</sys:String>
|
||||
<sys:String x:Key="Text.Welcome.Recent">最近使用</sys:String>
|
||||
<sys:String x:Key="Text.Welcome.Repositories">收藏/书签</sys:String>
|
||||
<sys:String x:Key="Text.Welcome.NewFolder">新建分组</sys:String>
|
||||
<sys:String x:Key="Text.Welcome.NewSubFolder">新建子分组</sys:String>
|
||||
<sys:String x:Key="Text.Welcome.Rename">重命名</sys:String>
|
||||
<sys:String x:Key="Text.Welcome.Delete">删除</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Pull">拉回</sys:String>
|
||||
<sys:String x:Key="Text.Pull.Title">拉回(拉取并合并)</sys:String>
|
||||
<sys:String x:Key="Text.Pull.Remote">远程 :</sys:String>
|
||||
<sys:String x:Key="Text.Pull.Branch">拉取分支 :</sys:String>
|
||||
<sys:String x:Key="Text.Pull.Into">本地分支 :</sys:String>
|
||||
<sys:String x:Key="Text.Pull.UseRebase">使用变基方式合并分支</sys:String>
|
||||
<sys:String x:Key="Text.Pull.AutoStash">自动贮藏并恢复本地变更</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Push">推送</sys:String>
|
||||
<sys:String x:Key="Text.Push.Title">推送到远程仓库</sys:String>
|
||||
<sys:String x:Key="Text.Push.Local">本地分支 :</sys:String>
|
||||
<sys:String x:Key="Text.Push.Remote">远程仓库 :</sys:String>
|
||||
<sys:String x:Key="Text.Push.To">远程分支 :</sys:String>
|
||||
<sys:String x:Key="Text.Push.WithAllTags">同时推送标签</sys:String>
|
||||
<sys:String x:Key="Text.Push.Force">启用强制推送</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.PushTag">推送标签到远程仓库</sys:String>
|
||||
<sys:String x:Key="Text.PushTag.Tag">标签 :</sys:String>
|
||||
<sys:String x:Key="Text.PushTag.Remote">远程仓库 :</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Rebase">变基操作</sys:String>
|
||||
<sys:String x:Key="Text.Rebase.Target">分支 :</sys:String>
|
||||
<sys:String x:Key="Text.Rebase.On">目标提交 :</sys:String>
|
||||
<sys:String x:Key="Text.Rebase.AutoStash">自动贮藏并恢复本地变更</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Remote.AddTitle">添加远程仓库</sys:String>
|
||||
<sys:String x:Key="Text.Remote.EditTitle">编辑远程仓库</sys:String>
|
||||
<sys:String x:Key="Text.Remote.Name">远程名 :</sys:String>
|
||||
<sys:String x:Key="Text.Remote.Name.Placeholder">唯一远程名</sys:String>
|
||||
<sys:String x:Key="Text.Remote.URL">仓库地址 :</sys:String>
|
||||
<sys:String x:Key="Text.Remote.URL.Placeholder">远程仓库的地址</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.RenameBranch">分支重命名</sys:String>
|
||||
<sys:String x:Key="Text.RenameBranch.Target">分支 :</sys:String>
|
||||
<sys:String x:Key="Text.RenameBranch.Name">新的名称 :</sys:String>
|
||||
<sys:String x:Key="Text.RenameBranch.Name.Placeholder">新的分支名不能与现有分支名相同</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Reset">重置当前分支到指定版本</sys:String>
|
||||
<sys:String x:Key="Text.Reset.Target">当前分支 :</sys:String>
|
||||
<sys:String x:Key="Text.Reset.MoveTo">提交 :</sys:String>
|
||||
<sys:String x:Key="Text.Reset.Mode">重置模式 :</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Revert">确定要回滚吗?</sys:String>
|
||||
<sys:String x:Key="Text.Revert.Commit">目标提交 :</sys:String>
|
||||
<sys:String x:Key="Text.Revert.CommitChanges">回滚后提交更改</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Preference">偏好设置</sys:String>
|
||||
<sys:String x:Key="Text.Preference.General">通用配置</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Locale">显示语言</sys:String>
|
||||
<sys:String x:Key="Text.Preference.FontFamilyWindow">系统字体</sys:String>
|
||||
<sys:String x:Key="Text.Preference.FontFamilyContent">文本字体</sys:String>
|
||||
<sys:String x:Key="Text.Preference.AvatarServer">头像服务</sys:String>
|
||||
<sys:String x:Key="Text.Preference.CheckUpdate">启用检测更新</sys:String>
|
||||
<sys:String x:Key="Text.Preference.AutoFetch">启用定时自动拉取远程更新(重启生效)</sys:String>
|
||||
<sys:String x:Key="Text.Preference.RestoreTabs">启动时恢复上次打开的仓库</sys:String>
|
||||
<sys:String x:Key="Text.Preference.EnableCrashReport">开启崩溃上报(可能涉及上报相关路径)</sys:String>
|
||||
<sys:String x:Key="Text.Preference.UseWindowsTerminal">使用 Windows Terminal 打开 Git 终端</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Git">GIT配置</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Git.Path">安装路径</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Git.Path.Placeholder">填写git.exe所在位置</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Git.Version">Git 版本</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Git.Dir">默认克隆路径</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Git.Dir.Placeholder">默认的仓库本地存放位置</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Git.User">用户名</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Git.User.Placeholder">默认GIT用户名</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Git.Email">邮箱</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Git.Email.Placeholder">默认GIT用户邮箱</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Git.CRLF">自动换行转换</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Merger">外部合并工具</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Merger.Type">工具</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Merger.Path">安装路径</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Merger.Path.Placeholder">填写工具可执行文件所在位置</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Dialog.GitExe">选择git.exe所在位置</sys:String>
|
||||
<sys:String x:Key="Text.Preference.Dialog.Merger">选择{0}所在位置</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Stash">贮藏</sys:String>
|
||||
<sys:String x:Key="Text.Stash.Title">贮藏本地变更</sys:String>
|
||||
<sys:String x:Key="Text.Stash.Message">信息 :</sys:String>
|
||||
<sys:String x:Key="Text.Stash.Message.Placeholder">选填,用于命名此贮藏</sys:String>
|
||||
<sys:String x:Key="Text.Stash.IncludeUntracked">包含未跟踪的文件</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Stashes">贮藏列表</sys:String>
|
||||
<sys:String x:Key="Text.Stashes.Stashes">贮藏列表</sys:String>
|
||||
<sys:String x:Key="Text.Stashes.Changes">查看变更</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.TwoCommitsDiff">对比提交 : {0} -> {1}</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.UpdateAvailable">检测更新</sys:String>
|
||||
<sys:String x:Key="Text.UpdateAvailable.Title">{0}已发布!</sys:String>
|
||||
<sys:String x:Key="Text.UpdateAvailable.Time">发布时间</sys:String>
|
||||
<sys:String x:Key="Text.UpdateAvailable.Based">GIT版本</sys:String>
|
||||
<sys:String x:Key="Text.UpdateAvailable.IsPreRelease">预览版</sys:String>
|
||||
<sys:String x:Key="Text.UpdateAvailable.Download" xml:space="preserve">下 载</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.WorkingCopy">本地更改</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.Unstaged">未暂存</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.Unstaged.Stage">暂存选中</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.Unstaged.StageAll">暂存所有</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.Staged">已暂存</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.Staged.Unstage">从暂存区移除选中</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.Staged.UnstageAll">从暂存区移除所有</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.Conflicts">检测到冲突</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.UseTheirs">使用THEIRS</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.UseMine">使用MINE</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.OpenMerger">打开合并工具</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.CommitMessageTip">填写提交信息</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.MessageHistories">历史提交信息</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.Amend">修补</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.Commit">提交</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.CommitAndPush">提交并推送</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.NoCommitHistories">没有提交信息记录</sys:String>
|
||||
<sys:String x:Key="Text.WorkingCopy.HasCommitHistories">最近输入的提交信息</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Conflict.CherryPick">检测到挑选提交冲突! </sys:String>
|
||||
<sys:String x:Key="Text.Conflict.Rebase">检测到变基冲突!</sys:String>
|
||||
<sys:String x:Key="Text.Conflict.Revert">检测到回滚提交冲突!</sys:String>
|
||||
<sys:String x:Key="Text.Conflict.Merge">检测到分支合并冲突!</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Restart.Title">系统提示</sys:String>
|
||||
<sys:String x:Key="Text.Restart.Content">本次配置变更需要在重启后生效,是否立即重启?</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.AddSubTree">添加子树</sys:String>
|
||||
<sys:String x:Key="Text.AddSubTree.Source">远程地址:</sys:String>
|
||||
<sys:String x:Key="Text.AddSubTree.Branch">分支或提交ID:</sys:String>
|
||||
<sys:String x:Key="Text.AddSubTree.Prefix">本地相对路径:</sys:String>
|
||||
<sys:String x:Key="Text.AddSubTree.Squash">合并提交为单一提交</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.EditSubTree">编辑子树信息</sys:String>
|
||||
<sys:String x:Key="Text.EditSubTree.Source">远程地址:</sys:String>
|
||||
<sys:String x:Key="Text.EditSubTree.Prefix">本地相对路径:</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.UnlinkSubTree">删除子树</sys:String>
|
||||
<sys:String x:Key="Text.UnlinkSubTree.Prefix">本地相对路径:</sys:String>
|
||||
<sys:String x:Key="Text.UnlinkSubTree.Tips">本操作仅将子树信息删除,相关文件及提交不会更改</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.SubTreePullOrPush.Pull">拉取子树更新</sys:String>
|
||||
<sys:String x:Key="Text.SubTreePullOrPush.Push">推送子树更新到远程</sys:String>
|
||||
<sys:String x:Key="Text.SubTreePullOrPush.Prefix">本地相对路径:</sys:String>
|
||||
<sys:String x:Key="Text.SubTreePullOrPush.Source">远程地址:</sys:String>
|
||||
<sys:String x:Key="Text.SubTreePullOrPush.Branch">远程分支:</sys:String>
|
||||
<sys:String x:Key="Text.SubTreePullOrPush.Squash">合并提交为单一提交</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.SubTree.Edit">编辑子树 ...</sys:String>
|
||||
<sys:String x:Key="Text.SubTree.Unlink">删除子树 ...</sys:String>
|
||||
<sys:String x:Key="Text.SubTree.Pull">拉取子树更新</sys:String>
|
||||
<sys:String x:Key="Text.SubTree.Push">推送子树变更</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Hotkeys">快捷键</sys:String>
|
||||
<sys:String x:Key="Text.Hotkeys.Col.Key">快捷键</sys:String>
|
||||
<sys:String x:Key="Text.Hotkeys.Col.Desc">功能说明</sys:String>
|
||||
<sys:String x:Key="Text.Hotkeys.NewTab">新建标签页</sys:String>
|
||||
<sys:String x:Key="Text.Hotkeys.CloseTab">关闭当前浏览标签页</sys:String>
|
||||
<sys:String x:Key="Text.Hotkeys.NextTab">切换到下一个标签页</sys:String>
|
||||
<sys:String x:Key="Text.Hotkeys.SwitchTo">切换到指定位置的标签页</sys:String>
|
||||
<sys:String x:Key="Text.Hotkeys.Search">打开/隐藏搜索框(仅在仓库页起效)</sys:String>
|
||||
<sys:String x:Key="Text.Hotkeys.Refresh">重新加载当前仓库信息(仅在仓库页起效)</sys:String>
|
||||
<sys:String x:Key="Text.Hotkeys.ToggleStage">暂存或从暂存中移除当前选中</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Reword">编辑提交信息</sys:String>
|
||||
<sys:String x:Key="Text.Reword.On">提交:</sys:String>
|
||||
<sys:String x:Key="Text.Reword.Message">提交信息:</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Squash">合并HEAD到上一个提交</sys:String>
|
||||
<sys:String x:Key="Text.Squash.Head">当前提交 :</sys:String>
|
||||
<sys:String x:Key="Text.Squash.To">合并到 :</sys:String>
|
||||
<sys:String x:Key="Text.Squash.Message">修改提交信息:</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.NotConfigured">GIT尚未配置。请打开【偏好设置】配置GIT路径。</sys:String>
|
||||
<sys:String x:Key="Text.PathNotFound">路径({0})不存在或不可读取!</sys:String>
|
||||
<sys:String x:Key="Text.MissingBash">无法找到bash.exe,请确保其在git.exe同目录中!</sys:String>
|
||||
<sys:String x:Key="Text.BinaryNotSupported">二进制文件不支持该操作!!!</sys:String>
|
||||
<sys:String x:Key="Text.BlameTypeNotSupported">选中文件不支持该操作!!!</sys:String>
|
||||
<sys:String x:Key="Text.GitDirNotFound">获取仓库GIT_DIR失败!</sys:String>
|
||||
<sys:String x:Key="Text.InitGitFlowFailed">初始化GIT FLOW失败!</sys:String>
|
||||
<sys:String x:Key="Text.BadGitFlowType">不支持的GIT FLOW分支!</sys:String>
|
||||
<sys:String x:Key="Text.BadCloneFolder">目录不存在或不可写!!!</sys:String>
|
||||
<sys:String x:Key="Text.BadRemoteUri">非法的远程仓库地址!</sys:String>
|
||||
<sys:String x:Key="Text.BadLocalName">非法的本地仓库地址!</sys:String>
|
||||
<sys:String x:Key="Text.EmptyRemoteName">远程仓库地址不可为空</sys:String>
|
||||
<sys:String x:Key="Text.BadRemoteName">远程仓库地址包含非法字符!仅支持字母、数字、下划线、横线或英文点号!</sys:String>
|
||||
<sys:String x:Key="Text.DuplicatedRemoteName">远程仓库名已存在!</sys:String>
|
||||
<sys:String x:Key="Text.EmptyBranchName">分支名不可为空</sys:String>
|
||||
<sys:String x:Key="Text.BadBranchName">分支名包含非法字符!仅支持字母、数字、下划线、横线或英文点号!</sys:String>
|
||||
<sys:String x:Key="Text.DuplicatedBranchName">分支名已存在!</sys:String>
|
||||
<sys:String x:Key="Text.EmptyTagName">标签名不可为空!</sys:String>
|
||||
<sys:String x:Key="Text.BadTagName">标签名包含非法字符!仅支持字母、数字、下划线、横线或英文点号!</sys:String>
|
||||
<sys:String x:Key="Text.DuplicatedTagName">标签名已存在!</sys:String>
|
||||
<sys:String x:Key="Text.EmptyCommitMessage">提交信息未填写!</sys:String>
|
||||
<sys:String x:Key="Text.BadPatchFile">补丁文件不存在或不可访问!</sys:String>
|
||||
<sys:String x:Key="Text.BadRelativePath">非法的子路径!</sys:String>
|
||||
<sys:String x:Key="Text.BadArchiveFile">非法的存档文件路径!</sys:String>
|
||||
<sys:String x:Key="Text.Required">内容未填写!</sys:String>
|
||||
</ResourceDictionary>
|
|
@ -315,6 +315,7 @@ namespace SourceGit.Views.Widgets {
|
|||
Models.Exception.Raise(App.Text("MissingBash"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (Models.Preference.Instance.General.UseWindowsTerminal) {
|
||||
Process.Start(new ProcessStartInfo {
|
||||
WorkingDirectory = repo.Path,
|
||||
|
@ -329,6 +330,7 @@ namespace SourceGit.Views.Widgets {
|
|||
UseShellExecute = true,
|
||||
});
|
||||
}
|
||||
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
|
|
|
@ -7,164 +7,165 @@
|
|||
xmlns:widgets="clr-namespace:SourceGit.Views.Widgets"
|
||||
mc:Ignorable="d"
|
||||
d:DesignHeight="800" d:DesignWidth="800">
|
||||
<Grid Background="Transparent" AllowDrop="True" Drop="OnPageDrop" MouseMove="OnPageMouseMove" MouseDown="OnPageMouseDown">
|
||||
<Grid Background="Transparent" AllowDrop="True" DragEnter="OnPageDragEnter" DragLeave="OnPageDragLeave" Drop="OnPageDrop">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="100"/>
|
||||
<RowDefinition Height="80"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<StackPanel Grid.Row="0" Orientation="Vertical" Width="420" HorizontalAlignment="Center">
|
||||
<!-- Logo -->
|
||||
<Path
|
||||
Margin="0,48,0,0"
|
||||
Width="100" Height="100"
|
||||
Data="{StaticResource Icon.Git}"
|
||||
Fill="{DynamicResource Brush.Logo}"/>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="900"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<!-- Welcome -->
|
||||
<TextBlock
|
||||
Margin="0,16"
|
||||
HorizontalAlignment="Center"
|
||||
Text="{DynamicResource Text.Welcome.Title}"
|
||||
FontSize="24pt"
|
||||
FontWeight="ExtraBold"
|
||||
TextOptions.TextFormattingMode="Ideal"
|
||||
TextOptions.TextRenderingMode="ClearType"
|
||||
Foreground="{DynamicResource Brush.FG2}"/>
|
||||
|
||||
</StackPanel>
|
||||
|
||||
<Grid Grid.Row="1" Margin="10,40" HorizontalAlignment="Center">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="32"/>
|
||||
<RowDefinition Height="32"/>
|
||||
<RowDefinition Height="60"/>
|
||||
<RowDefinition Height="32"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<!-- Page Title -->
|
||||
<TextBlock
|
||||
Grid.Row="1"
|
||||
Grid.Column="1"
|
||||
HorizontalAlignment="Left"
|
||||
Text="{DynamicResource Text.Welcome.Title}"
|
||||
FontSize="28pt"
|
||||
TextOptions.TextFormattingMode="Ideal"
|
||||
TextOptions.TextRenderingMode="ClearType"/>
|
||||
|
||||
<Grid x:Name="body" Grid.Row="2" Grid.Column="1" Margin="0,32" FocusManager.IsFocusScope="True">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="350"/>
|
||||
<ColumnDefinition Width="200"/>
|
||||
<ColumnDefinition Width="350"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="64"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<!-- Left Panel -->
|
||||
<Grid Grid.Column="0">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<Button Grid.Column="0" Grid.Row="0" Click="OnOpenClicked" Height="28" Width="240">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<Path Width="16" Height="16" Data="{StaticResource Icon.Folder.Open}"/>
|
||||
<TextBlock Margin="12,0,0,0" Text="{DynamicResource Text.Welcome.OpenOrInit}"/>
|
||||
<!-- Options -->
|
||||
<TextBlock
|
||||
Grid.Row="0"
|
||||
Text="{DynamicResource Text.Welcome.Start}"
|
||||
FontSize="13pt"/>
|
||||
<StackPanel Grid.Row="1" Margin="4,12,0,0" Orientation="Vertical">
|
||||
<Button Grid.Column="0" Grid.Row="0" Click="OnOpenClicked" Height="28" HorizontalAlignment="Left" BorderThickness="0" Opacity="1">
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
|
||||
<Path Width="16" Height="16" Data="{StaticResource Icon.Folder.Open}" Fill="{DynamicResource Brush.Accent1}"/>
|
||||
<TextBlock Margin="12,0,0,0" Text="{DynamicResource Text.Welcome.OpenOrInit}" Foreground="{DynamicResource Brush.Accent1}"/>
|
||||
</StackPanel>
|
||||
</Button>
|
||||
<Button Grid.Column="0" Grid.Row="1" Click="OnCloneClicked" Height="28" HorizontalAlignment="Left" BorderThickness="0" Opacity="1">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<Path Width="16" Height="16" Data="{StaticResource Icon.Pull}" Fill="{DynamicResource Brush.Accent1}"/>
|
||||
<TextBlock Margin="12,0,0,0" Text="{DynamicResource Text.Welcome.Clone}" Foreground="{DynamicResource Brush.Accent1}"/>
|
||||
</StackPanel>
|
||||
</Button>
|
||||
</StackPanel>
|
||||
</Button>
|
||||
|
||||
<Button Grid.Column="0" Grid.Row="1" Click="OnCloneClicked" Height="28" Width="240">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<Path Width="16" Height="16" Data="{StaticResource Icon.Pull}"/>
|
||||
<TextBlock Margin="12,0,0,0" Text="{DynamicResource Text.Welcome.Clone}"/>
|
||||
</StackPanel>
|
||||
</Button>
|
||||
<!-- Recents -->
|
||||
<TextBlock
|
||||
Grid.Row="2" Margin="0,32,0,0"
|
||||
Text="{DynamicResource Text.Welcome.Recent}"
|
||||
FontSize="13pt"/>
|
||||
<DataGrid
|
||||
Grid.Row="3"
|
||||
x:Name="list"
|
||||
Margin="0,12,0,0"
|
||||
SelectionUnit="FullRow"
|
||||
SelectionMode="Single"
|
||||
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
|
||||
ScrollViewer.VerticalScrollBarVisibility="Auto"
|
||||
LostFocus="OnRecentLostFocus">
|
||||
<DataGrid.RowStyle>
|
||||
<Style BasedOn="{StaticResource Style.DataGridRow}" TargetType="{x:Type DataGridRow}">
|
||||
<EventSetter Event="MouseDoubleClick" Handler="OnRecentDoubleClick"/>
|
||||
<EventSetter Event="ContextMenuOpening" Handler="OnRecentContextMenuOpening"/>
|
||||
</Style>
|
||||
</DataGrid.RowStyle>
|
||||
|
||||
<DataGrid.Columns>
|
||||
<DataGridTemplateColumn Width="*">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<Grid Height="32" Margin="4,0,0,0" IsHitTestVisible="False">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="22"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<controls:Bookmark
|
||||
Grid.Column="0"
|
||||
Margin="2,0,0,0"
|
||||
x:Name="BookmarkIcon"
|
||||
Width="16" Height="16"
|
||||
Color="{Binding Bookmark}"
|
||||
IsNewPage="False"/>
|
||||
|
||||
<!-- History -->
|
||||
<TextBlock
|
||||
Grid.Row="3"
|
||||
Grid.Column="0"
|
||||
Text="{DynamicResource Text.Welcome.Histories}"
|
||||
FontSize="13pt" FontWeight="ExtraBold"
|
||||
Foreground="{DynamicResource Brush.FG2}"/>
|
||||
<!-- History Tree -->
|
||||
<controls:Tree
|
||||
Grid.Row="4"
|
||||
Grid.Column="0"
|
||||
x:Name="treeHistory"
|
||||
Margin="0,4"
|
||||
TextElement.FontSize="14"
|
||||
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
|
||||
ScrollViewer.VerticalScrollBarVisibility="Auto"
|
||||
ContextMenuOpening="OnTreeContextMenuOpening">
|
||||
<controls:Tree.ItemContainerStyle>
|
||||
<Style TargetType="{x:Type controls:TreeItem}" BasedOn="{StaticResource Style.TreeItem}">
|
||||
<EventSetter Event="MouseDoubleClick" Handler="OnTreeNodeDoubleClick"/>
|
||||
</Style>
|
||||
</controls:Tree.ItemContainerStyle>
|
||||
<StackPanel Grid.Column="1" Orientation="Horizontal">
|
||||
<TextBlock Margin="8,0" Text="{Binding Name}"/>
|
||||
<TextBlock x:Name="Path" Text="{Binding Path}" Foreground="{DynamicResource Brush.FG2}"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</Grid>
|
||||
|
||||
<!-- Right Panel -->
|
||||
<Grid Grid.Column="2">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<controls:Tree.ItemTemplate>
|
||||
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
|
||||
<Border Height="32">
|
||||
<Grid IsHitTestVisible="False">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="22"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<!-- Repositories Label -->
|
||||
<Grid Grid.Row="0">
|
||||
<TextBlock
|
||||
Text="{DynamicResource Text.Welcome.Repositories}"
|
||||
FontSize="13pt"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Center"/>
|
||||
|
||||
<controls:Bookmark
|
||||
Grid.Column="0"
|
||||
Margin="2,0,0,0"
|
||||
x:Name="BookmarkIcon"
|
||||
Width="16" Height="16"
|
||||
Color="{Binding Bookmark}"
|
||||
IsNewPage="False"/>
|
||||
<TextBlock
|
||||
Text="{DynamicResource Text.Welcome.DragDrop}"
|
||||
FontSize="10pt"
|
||||
HorizontalAlignment="Right" VerticalAlignment="Top"
|
||||
Foreground="{DynamicResource Brush.FG2}"/>
|
||||
</Grid>
|
||||
|
||||
<StackPanel Grid.Column="1" x:Name="ContentsHistory" Orientation="Horizontal">
|
||||
<TextBlock Margin="8,0" Text="{Binding Name}"/>
|
||||
<TextBlock x:Name="Path" Text="{Binding Id}" Foreground="{DynamicResource Brush.FG2}"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Border>
|
||||
</HierarchicalDataTemplate>
|
||||
</controls:Tree.ItemTemplate>
|
||||
</controls:Tree>
|
||||
<!-- Repositories Tree -->
|
||||
<controls:Tree
|
||||
Grid.Row="1"
|
||||
x:Name="tree"
|
||||
Margin="0,8,0,0"
|
||||
AllowDrop="True"
|
||||
TextElement.FontSize="14"
|
||||
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
|
||||
ScrollViewer.VerticalScrollBarVisibility="Auto"
|
||||
ContextMenuOpening="OnTreeContextMenuOpening"
|
||||
MouseMove="OnTreeMouseMove"
|
||||
DragOver="OnTreeDragOver"
|
||||
Drop="OnTreeDrop"
|
||||
LostFocus="OnTreeLostFocus">
|
||||
<controls:Tree.ItemContainerStyle>
|
||||
<Style TargetType="{x:Type controls:TreeItem}" BasedOn="{StaticResource Style.TreeItem}">
|
||||
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}"/>
|
||||
|
||||
<!-- Bookmark -->
|
||||
<TextBlock
|
||||
Grid.Row="0"
|
||||
Grid.Column="2"
|
||||
Text="{DynamicResource Text.Welcome.Bookmarks}"
|
||||
FontSize="13pt" FontWeight="ExtraBold"
|
||||
HorizontalAlignment="Center"
|
||||
Foreground="{DynamicResource Brush.FG2}"/>
|
||||
<EventSetter Event="Expanded" Handler="OnTreeNodeStatusChange"/>
|
||||
<EventSetter Event="Collapsed" Handler="OnTreeNodeStatusChange"/>
|
||||
<EventSetter Event="MouseDoubleClick" Handler="OnTreeNodeDoubleClick"/>
|
||||
</Style>
|
||||
</controls:Tree.ItemContainerStyle>
|
||||
|
||||
<!-- Drop Area -->
|
||||
<Rectangle
|
||||
Grid.Row="1"
|
||||
Grid.RowSpan="4"
|
||||
Grid.Column="2"
|
||||
x:Name="dropArea"
|
||||
Margin="0,2"
|
||||
Stroke="{DynamicResource Brush.Border1}"
|
||||
StrokeThickness="2"
|
||||
StrokeDashArray="4,4"
|
||||
SnapsToDevicePixels="True"
|
||||
Visibility="Hidden"/>
|
||||
<controls:Tree
|
||||
Grid.Row="1"
|
||||
Grid.RowSpan="4"
|
||||
Grid.Column="2"
|
||||
x:Name="treeBookmarks"
|
||||
Margin="0,4"
|
||||
AllowDrop="True"
|
||||
TextElement.FontSize="14"
|
||||
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
|
||||
ScrollViewer.VerticalScrollBarVisibility="Auto"
|
||||
ContextMenuOpening="OnTreeContextMenuOpening"
|
||||
DragEnter="OnTreeBookmarksDragEnter"
|
||||
DragLeave="OnTreeBookmarksDragLeave"
|
||||
DragOver="OnTreeBookmarksDragOver"
|
||||
Drop="OnTreeBookmarksDrop">
|
||||
<controls:Tree.ItemContainerStyle>
|
||||
<Style TargetType="{x:Type controls:TreeItem}" BasedOn="{StaticResource Style.TreeItem}">
|
||||
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}"/>
|
||||
|
||||
<EventSetter Event="Expanded" Handler="OnTreeNodeStatusChange"/>
|
||||
<EventSetter Event="Collapsed" Handler="OnTreeNodeStatusChange"/>
|
||||
<EventSetter Event="MouseDoubleClick" Handler="OnTreeNodeDoubleClick"/>
|
||||
</Style>
|
||||
</controls:Tree.ItemContainerStyle>
|
||||
|
||||
<controls:Tree.ItemTemplate>
|
||||
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
|
||||
<Border Height="32">
|
||||
<Grid IsHitTestVisible="False">
|
||||
<controls:Tree.ItemTemplate>
|
||||
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
|
||||
<Grid Height="32" IsHitTestVisible="False">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
|
@ -199,33 +200,45 @@
|
|||
IsHitTestVisible="True"
|
||||
Visibility="Collapsed"/>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<HierarchicalDataTemplate.Triggers>
|
||||
<DataTrigger Binding="{Binding IsGroup}" Value="True">
|
||||
<Setter TargetName="Path" Property="Visibility" Value="Collapsed"/>
|
||||
<Setter TargetName="Icon" Property="Visibility" Value="Visible"/>
|
||||
<Setter TargetName="BookmarkIcon" Property="Visibility" Value="Collapsed"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding IsGroup}" Value="False">
|
||||
<Setter TargetName="Path" Property="Visibility" Value="Visible"/>
|
||||
<Setter TargetName="Icon" Property="Visibility" Value="Collapsed"/>
|
||||
<Setter TargetName="BookmarkIcon" Property="Visibility" Value="Visible"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type controls:TreeItem}}, Path=IsExpanded}" Value="True">
|
||||
<Setter TargetName="Icon" Property="Data" Value="{StaticResource Icon.Folder.Open}"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding IsEditing}" Value="True">
|
||||
<Setter TargetName="EditorBookmarks" Property="Visibility" Value="Visible"/>
|
||||
<Setter TargetName="ContentsBookmark" Property="Visibility" Value="Collapsed"/>
|
||||
</DataTrigger>
|
||||
</HierarchicalDataTemplate.Triggers>
|
||||
</HierarchicalDataTemplate>
|
||||
</controls:Tree.ItemTemplate>
|
||||
</controls:Tree>
|
||||
<HierarchicalDataTemplate.Triggers>
|
||||
<DataTrigger Binding="{Binding IsGroup}" Value="True">
|
||||
<Setter TargetName="Path" Property="Visibility" Value="Collapsed"/>
|
||||
<Setter TargetName="Icon" Property="Visibility" Value="Visible"/>
|
||||
<Setter TargetName="BookmarkIcon" Property="Visibility" Value="Collapsed"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding IsGroup}" Value="False">
|
||||
<Setter TargetName="Path" Property="Visibility" Value="Visible"/>
|
||||
<Setter TargetName="Icon" Property="Visibility" Value="Collapsed"/>
|
||||
<Setter TargetName="BookmarkIcon" Property="Visibility" Value="Visible"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type controls:TreeItem}}, Path=IsExpanded}" Value="True">
|
||||
<Setter TargetName="Icon" Property="Data" Value="{StaticResource Icon.Folder.Open}"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding IsEditing}" Value="True">
|
||||
<Setter TargetName="EditorBookmarks" Property="Visibility" Value="Visible"/>
|
||||
<Setter TargetName="ContentsBookmark" Property="Visibility" Value="Collapsed"/>
|
||||
</DataTrigger>
|
||||
</HierarchicalDataTemplate.Triggers>
|
||||
</HierarchicalDataTemplate>
|
||||
</controls:Tree.ItemTemplate>
|
||||
</controls:Tree>
|
||||
|
||||
<!-- Drop Area -->
|
||||
<Rectangle
|
||||
Grid.Row="1"
|
||||
x:Name="dropArea"
|
||||
Margin="0,4"
|
||||
Stroke="{DynamicResource Brush.Border1}"
|
||||
StrokeThickness="2"
|
||||
StrokeDashArray="4,4"
|
||||
SnapsToDevicePixels="True"
|
||||
Visibility="Hidden"
|
||||
IsHitTestVisible="False"/>
|
||||
</Grid>
|
||||
</Grid>
|
||||
|
||||
<!-- Popup -->
|
||||
<widgets:PopupPanel x:Name="popup" Grid.Row="0" Grid.RowSpan="2"/>
|
||||
<widgets:PopupPanel x:Name="popup" Grid.Row="0" Grid.RowSpan="3" Grid.Column="0" Grid.ColumnSpan="3"/>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
|
|
|
@ -14,117 +14,130 @@ namespace SourceGit.Views.Widgets {
|
|||
/// 新标签页
|
||||
/// </summary>
|
||||
public partial class Welcome : UserControl, Controls.IPopupContainer {
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 树节点数据
|
||||
/// </summary>
|
||||
public class Node : Controls.BindableBase {
|
||||
public string Id {
|
||||
get;
|
||||
set;
|
||||
}
|
||||
public string ParentId {
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
public string Id { get; set; }
|
||||
public string ParentId { get; set; }
|
||||
|
||||
private string name;
|
||||
public string Name {
|
||||
get => name;
|
||||
set => SetProperty(ref name, value);
|
||||
}
|
||||
|
||||
public bool IsGroup {
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
|
||||
public bool IsGroup { get; set; }
|
||||
|
||||
private bool isEditing = false;
|
||||
public bool IsEditing {
|
||||
get => isEditing;
|
||||
set => SetProperty(ref isEditing, value);
|
||||
}
|
||||
|
||||
public bool IsExpanded {
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
public bool IsExpanded { get; set; }
|
||||
|
||||
private int bookmark = 0;
|
||||
public int Bookmark {
|
||||
get => bookmark;
|
||||
set => SetProperty(ref bookmark, value);
|
||||
}
|
||||
|
||||
public List<Node> Children {
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
public List<Node> Children { get; set; }
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 仓库节点编辑事件参数
|
||||
/// </summary>
|
||||
public event Action<Node> OnNodeEdited;
|
||||
|
||||
private bool clearBookmark = false;
|
||||
|
||||
public Welcome() {
|
||||
InitializeComponent();
|
||||
UpdateTree();
|
||||
UpdateRecents();
|
||||
}
|
||||
|
||||
|
||||
#region POPUP_CONTAINER
|
||||
public void Show(Controls.PopupWidget widget) {
|
||||
popup.Show(widget);
|
||||
}
|
||||
|
||||
|
||||
public void ShowAndStart(Controls.PopupWidget widget) {
|
||||
popup.ShowAndStart(widget);
|
||||
}
|
||||
|
||||
|
||||
public void UpdateProgress(string message) {
|
||||
popup.UpdateProgress(message);
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
#region FUNC_EVENTS
|
||||
private void OnOpenClicked(object sender, RoutedEventArgs e) {
|
||||
var dialog = new Controls.FolderDialog();
|
||||
|
||||
if (dialog.ShowDialog() == true) {
|
||||
CheckAndOpen(dialog.SelectedPath);
|
||||
}
|
||||
if (dialog.ShowDialog() == true) CheckAndOpen(dialog.SelectedPath);
|
||||
}
|
||||
|
||||
|
||||
private void OnCloneClicked(object sender, RoutedEventArgs e) {
|
||||
if (MakeSureReady()) {
|
||||
new Popups.Clone().Show();
|
||||
}
|
||||
if (MakeSureReady()) new Popups.Clone().Show();
|
||||
}
|
||||
|
||||
|
||||
private void OnRecentContextMenuOpening(object sender, ContextMenuEventArgs e) {
|
||||
var repo = (sender as DataGridRow).DataContext as Models.Repository;
|
||||
if (repo != null) {
|
||||
var remove = new MenuItem();
|
||||
remove.Header = App.Text("Welcome.Delete");
|
||||
remove.Click += (o, ev) => {
|
||||
Models.Preference.Instance.RemoveRecent(repo.Path);
|
||||
UpdateRecents();
|
||||
ev.Handled = true;
|
||||
};
|
||||
|
||||
var menu = new ContextMenu();
|
||||
menu.Items.Add(remove);
|
||||
menu.IsOpen = true;
|
||||
e.Handled = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnRecentDoubleClick(object sender, MouseButtonEventArgs e) {
|
||||
var repo = (sender as DataGridRow).DataContext as Models.Repository;
|
||||
if (repo != null) CheckAndOpen(repo.Path);
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
private void OnRecentLostFocus(object sender, RoutedEventArgs e) {
|
||||
list.UnselectAll();
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
private void OnTreeLostFocus(object sender, RoutedEventArgs e) {
|
||||
var child = FocusManager.GetFocusedElement(body);
|
||||
if (child == null) return;
|
||||
|
||||
if (!tree.IsAncestorOf(child as UIElement)) tree.UnselectAll();
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
private void OnTreeNodeStatusChange(object sender, RoutedEventArgs e) {
|
||||
var node = (sender as Controls.TreeItem).DataContext as Node;
|
||||
|
||||
if (node != null) {
|
||||
var group = Models.Preference.Instance.FindGroup(node.Id);
|
||||
group.IsExpanded = node.IsExpanded;
|
||||
e.Handled = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void OnTreeNodeDoubleClick(object sender, MouseButtonEventArgs e) {
|
||||
var node = (sender as Controls.TreeItem).DataContext as Node;
|
||||
|
||||
if (node != null && !node.IsGroup) {
|
||||
CheckAndOpen(node.Id);
|
||||
e.Handled = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void OnTreeContextMenuOpening(object sender, ContextMenuEventArgs e) {
|
||||
var item = treeHistory.FindItem(e.OriginalSource as DependencyObject);
|
||||
|
||||
var item = tree.FindItem(e.OriginalSource as DependencyObject);
|
||||
if (item == null) {
|
||||
var addFolder = new MenuItem();
|
||||
addFolder.Header = App.Text("Welcome.NewFolder");
|
||||
|
@ -133,20 +146,16 @@ namespace SourceGit.Views.Widgets {
|
|||
UpdateTree(group.Id);
|
||||
ev.Handled = true;
|
||||
};
|
||||
|
||||
var menu = new ContextMenu();
|
||||
menu.Items.Add(addFolder);
|
||||
menu.IsOpen = true;
|
||||
e.Handled = true;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
var node = item.DataContext as Node;
|
||||
|
||||
if (node == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (node == null) return;
|
||||
|
||||
var menu = new ContextMenu();
|
||||
|
||||
if (!node.IsGroup) {
|
||||
var open = new MenuItem();
|
||||
open.Header = App.Text("RepoCM.Open");
|
||||
|
@ -154,71 +163,74 @@ namespace SourceGit.Views.Widgets {
|
|||
CheckAndOpen(node.Id);
|
||||
ev.Handled = true;
|
||||
};
|
||||
|
||||
var explore = new MenuItem();
|
||||
explore.Header = App.Text("RepoCM.Explore");
|
||||
explore.Click += (o, ev) => {
|
||||
Process.Start("explorer", node.Id);
|
||||
ev.Handled = true;
|
||||
};
|
||||
|
||||
var iconBookmark = FindResource("Icon.Bookmark") as Geometry;
|
||||
var bookmark = new MenuItem();
|
||||
bookmark.Header = App.Text("RepoCM.Bookmark");
|
||||
|
||||
for (int i = 0; i < Controls.Bookmark.COLORS.Length; i++) {
|
||||
var icon = new System.Windows.Shapes.Path();
|
||||
icon.Data = iconBookmark;
|
||||
icon.Fill = Controls.Bookmark.COLORS[i];
|
||||
icon.Width = 8;
|
||||
|
||||
var mark = new MenuItem();
|
||||
mark.Icon = icon;
|
||||
mark.Header = $"{i}";
|
||||
|
||||
var refIdx = i;
|
||||
mark.Click += (o, ev) => {
|
||||
var repo = Models.Preference.Instance.FindRepository(node.Id);
|
||||
|
||||
if (repo != null) {
|
||||
repo.Bookmark = refIdx;
|
||||
UpdateTree();
|
||||
node.Bookmark = refIdx;
|
||||
UpdateRecents();
|
||||
OnNodeEdited?.Invoke(node);
|
||||
}
|
||||
|
||||
ev.Handled = true;
|
||||
};
|
||||
|
||||
bookmark.Items.Add(mark);
|
||||
}
|
||||
|
||||
|
||||
menu.Items.Add(open);
|
||||
menu.Items.Add(explore);
|
||||
menu.Items.Add(bookmark);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
var addSubFolder = new MenuItem();
|
||||
addSubFolder.Header = App.Text("Welcome.NewSubFolder");
|
||||
addSubFolder.Click += (o, ev) => {
|
||||
var parent = Models.Preference.Instance.FindGroup(node.Id);
|
||||
|
||||
if (parent != null) {
|
||||
parent.IsExpanded = true;
|
||||
}
|
||||
|
||||
if (parent != null) parent.IsExpanded = true;
|
||||
|
||||
var group = Models.Preference.Instance.AddGroup("New Group", node.Id);
|
||||
UpdateTree(group.Id);
|
||||
ev.Handled = true;
|
||||
};
|
||||
|
||||
menu.Items.Add(addSubFolder);
|
||||
}
|
||||
|
||||
|
||||
var rename = new MenuItem();
|
||||
rename.Header = App.Text("Welcome.Rename");
|
||||
rename.Click += (o, ev) => {
|
||||
UpdateTree(node.Id);
|
||||
ev.Handled = true;
|
||||
};
|
||||
|
||||
var delete = new MenuItem();
|
||||
delete.Header = App.Text("Welcome.Delete");
|
||||
delete.Click += (o, ev) => {
|
||||
DeleteNode(node);
|
||||
ev.Handled = true;
|
||||
};
|
||||
|
||||
menu.Items.Add(rename);
|
||||
menu.Items.Add(delete);
|
||||
menu.IsOpen = true;
|
||||
|
@ -226,188 +238,109 @@ namespace SourceGit.Views.Widgets {
|
|||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region DRAP_DROP_EVENTS
|
||||
private void OnPageMouseDown(object sender, MouseButtonEventArgs e) {
|
||||
var itemHistory = treeHistory.FindItem(e.OriginalSource as DependencyObject);
|
||||
|
||||
if (itemHistory == null) {
|
||||
treeHistory.UnselectAll();
|
||||
}
|
||||
|
||||
var itemBookmark = treeBookmarks.FindItem(e.OriginalSource as DependencyObject);
|
||||
|
||||
if (itemBookmark == null) {
|
||||
treeBookmarks.UnselectAll();
|
||||
}
|
||||
|
||||
clearBookmark = false;
|
||||
}
|
||||
|
||||
private void OnPageMouseMove(object sender, MouseEventArgs e) {
|
||||
if (e.LeftButton != MouseButtonState.Pressed) {
|
||||
return;
|
||||
}
|
||||
|
||||
var item = treeHistory.FindItem(e.OriginalSource as DependencyObject);
|
||||
|
||||
if (item == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
treeHistory.UnselectAll();
|
||||
var adorner = new Controls.DragDropAdorner(item);
|
||||
DragDrop.DoDragDrop(item, item.DataContext, DragDropEffects.Move);
|
||||
adorner.Remove();
|
||||
}
|
||||
|
||||
private void OnPageDrop(object sender, DragEventArgs e) {
|
||||
bool rebuild = false;
|
||||
|
||||
if (e.Data.GetDataPresent(DataFormats.FileDrop)) {
|
||||
if (!MakeSureReady()) {
|
||||
return;
|
||||
}
|
||||
|
||||
var paths = e.Data.GetData(DataFormats.FileDrop) as string[];
|
||||
|
||||
foreach (var path in paths) {
|
||||
var dir = new Commands.QueryGitDir(path).Result();
|
||||
|
||||
if (dir != null) {
|
||||
var root = new Commands.GetRepositoryRootPath(path).Result();
|
||||
Models.Preference.Instance.AddRepository(root, dir, "");
|
||||
CheckAndOpen(path);
|
||||
rebuild = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (e.Data.GetDataPresent(typeof(Node))) {
|
||||
var node = e.Data.GetData(typeof(Node)) as Node;
|
||||
|
||||
if (node.IsGroup) {
|
||||
e.Handled = true;
|
||||
return;
|
||||
}
|
||||
else {
|
||||
var repo = Models.Preference.Instance.FindRepository(node.Id);
|
||||
|
||||
if (repo != null && repo.Bookmark != 0 && clearBookmark) {
|
||||
repo.Bookmark = 0;
|
||||
}
|
||||
clearBookmark = false;
|
||||
rebuild = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (rebuild) {
|
||||
UpdateTree();
|
||||
}
|
||||
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
private void OnTreeBookmarksDragEnter(object sender, DragEventArgs e) {
|
||||
#region DRAP_DROP_EVENTS
|
||||
private void OnPageDragEnter(object sender, DragEventArgs e) {
|
||||
if (e.Data.GetDataPresent(DataFormats.FileDrop) || e.Data.GetDataPresent(typeof(Node))) {
|
||||
dropArea.Visibility = Visibility.Visible;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnTreeBookmarksDragLeave(object sender, DragEventArgs e) {
|
||||
|
||||
private void OnPageDragLeave(object sender, DragEventArgs e) {
|
||||
dropArea.Visibility = Visibility.Hidden;
|
||||
}
|
||||
|
||||
private void OnTreeBookmarksDragOver(object sender, DragEventArgs e) {
|
||||
if (!e.Data.GetDataPresent(DataFormats.FileDrop) && !e.Data.GetDataPresent(typeof(Node))) {
|
||||
return;
|
||||
}
|
||||
|
||||
var item = treeBookmarks.FindItem(e.OriginalSource as DependencyObject);
|
||||
|
||||
if (item == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
var node = item.DataContext as Node;
|
||||
|
||||
if (node.IsGroup && !item.IsExpanded) {
|
||||
item.IsExpanded = true;
|
||||
}
|
||||
|
||||
clearBookmark = true;
|
||||
|
||||
private void OnPageDrop(object sender, DragEventArgs e) {
|
||||
dropArea.Visibility = Visibility.Hidden;
|
||||
}
|
||||
|
||||
private void OnTreeMouseMove(object sender, MouseEventArgs e) {
|
||||
if (e.LeftButton != MouseButtonState.Pressed) return;
|
||||
|
||||
var item = tree.FindItem(e.OriginalSource as DependencyObject);
|
||||
if (item == null) return;
|
||||
|
||||
tree.UnselectAll();
|
||||
|
||||
var adorner = new Controls.DragDropAdorner(item);
|
||||
DragDrop.DoDragDrop(item, item.DataContext, DragDropEffects.Move);
|
||||
adorner.Remove();
|
||||
}
|
||||
|
||||
private void OnTreeDragOver(object sender, DragEventArgs e) {
|
||||
if (!e.Data.GetDataPresent(DataFormats.FileDrop) && !e.Data.GetDataPresent(typeof(Node))) return;
|
||||
|
||||
var item = tree.FindItem(e.OriginalSource as DependencyObject);
|
||||
if (item == null) return;
|
||||
|
||||
var node = item.DataContext as Node;
|
||||
if (node.IsGroup && !item.IsExpanded) item.IsExpanded = true;
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
private void OnTreeBookmarksDrop(object sender, DragEventArgs e) {
|
||||
bool rebuild = false;
|
||||
var parent = "";
|
||||
|
||||
clearBookmark = false;
|
||||
private void OnTreeDrop(object sender, DragEventArgs e) {
|
||||
bool rebuild = false;
|
||||
dropArea.Visibility = Visibility.Hidden;
|
||||
var to = treeBookmarks.FindItem(e.OriginalSource as DependencyObject);
|
||||
|
||||
|
||||
var parent = "";
|
||||
var to = tree.FindItem(e.OriginalSource as DependencyObject);
|
||||
if (to != null) {
|
||||
var dst = to.DataContext as Node;
|
||||
parent = dst.IsGroup ? dst.Id : dst.ParentId;
|
||||
}
|
||||
|
||||
|
||||
if (e.Data.GetDataPresent(DataFormats.FileDrop)) {
|
||||
if (!MakeSureReady()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!MakeSureReady()) return;
|
||||
|
||||
var paths = e.Data.GetData(DataFormats.FileDrop) as string[];
|
||||
|
||||
foreach (var path in paths) {
|
||||
var dir = new Commands.QueryGitDir(path).Result();
|
||||
|
||||
if (dir != null) {
|
||||
var root = new Commands.GetRepositoryRootPath(path).Result();
|
||||
Models.Preference.Instance.AddRepository(root, dir, parent).Bookmark = 1; // 默认添加的标签;
|
||||
// CheckAndOpen(path);
|
||||
Models.Preference.Instance.AddRepository(root, dir, parent);
|
||||
rebuild = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (e.Data.GetDataPresent(typeof(Node))) {
|
||||
var node = e.Data.GetData(typeof(Node)) as Node;
|
||||
|
||||
if (node.IsGroup) {
|
||||
if (!Models.Preference.Instance.IsSubGroup(node.Id, parent)) {
|
||||
Models.Preference.Instance.FindGroup(node.Id).Parent = parent;
|
||||
} else if (e.Data.GetDataPresent(typeof(Node))) {
|
||||
var src = e.Data.GetData(typeof(Node)) as Node;
|
||||
if (src.IsGroup) {
|
||||
if (!Models.Preference.Instance.IsSubGroup(src.Id, parent)) {
|
||||
Models.Preference.Instance.FindGroup(src.Id).Parent = parent;
|
||||
rebuild = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
var repo = Models.Preference.Instance.FindRepository(node.Id);
|
||||
|
||||
if (repo != null) {
|
||||
repo.GroupId = parent;
|
||||
|
||||
if (repo.Bookmark == 0) {
|
||||
repo.Bookmark = 1;
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
Models.Preference.Instance.FindRepository(src.Id).GroupId = parent;
|
||||
rebuild = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (rebuild) {
|
||||
UpdateTree();
|
||||
}
|
||||
|
||||
|
||||
if (rebuild) UpdateTree();
|
||||
e.Handled = true;
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
#region DATA
|
||||
private void UpdateRecents() {
|
||||
var repos = new List<Models.Repository>();
|
||||
var dirty = new List<string>();
|
||||
|
||||
foreach (var path in Models.Preference.Instance.Recents) {
|
||||
var repo = Models.Preference.Instance.FindRepository(path);
|
||||
if (repo != null) {
|
||||
repos.Add(repo);
|
||||
} else {
|
||||
dirty.Add(path);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var path in dirty) Models.Preference.Instance.RemoveRecent(path);
|
||||
list.ItemsSource = repos;
|
||||
}
|
||||
|
||||
private void UpdateTree(string editingNodeId = null) {
|
||||
var groupNodes = new Dictionary<string, Node>();
|
||||
var nodesHistory = new List<Node>();
|
||||
var nodesBookmarks = new List<Node>();
|
||||
|
||||
var nodes = new List<Node>();
|
||||
|
||||
foreach (var group in Models.Preference.Instance.Groups) {
|
||||
Node node = new Node() {
|
||||
Id = group.Id,
|
||||
|
@ -419,18 +352,20 @@ namespace SourceGit.Views.Widgets {
|
|||
Bookmark = 0,
|
||||
Children = new List<Node>(),
|
||||
};
|
||||
|
||||
groupNodes.Add(node.Id, node);
|
||||
}
|
||||
|
||||
|
||||
nodes.Clear();
|
||||
|
||||
foreach (var kv in groupNodes) {
|
||||
if (groupNodes.ContainsKey(kv.Value.ParentId)) {
|
||||
groupNodes[kv.Value.ParentId].Children.Add(kv.Value);
|
||||
}
|
||||
else {
|
||||
nodesBookmarks.Add(kv.Value);
|
||||
} else {
|
||||
nodes.Add(kv.Value);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
foreach (var repo in Models.Preference.Instance.Repositories) {
|
||||
Node node = new Node() {
|
||||
Id = repo.Path,
|
||||
|
@ -442,138 +377,111 @@ namespace SourceGit.Views.Widgets {
|
|||
Bookmark = repo.Bookmark,
|
||||
Children = new List<Node>(),
|
||||
};
|
||||
nodesHistory.Add(node);
|
||||
|
||||
if (repo.Bookmark != 0) {
|
||||
if (groupNodes.ContainsKey(repo.GroupId)) {
|
||||
groupNodes[repo.GroupId].Children.Add(node);
|
||||
}
|
||||
else {
|
||||
nodesBookmarks.Add(node);
|
||||
}
|
||||
|
||||
if (groupNodes.ContainsKey(repo.GroupId)) {
|
||||
groupNodes[repo.GroupId].Children.Add(node);
|
||||
} else {
|
||||
nodes.Add(node);
|
||||
}
|
||||
|
||||
OnNodeEdited?.Invoke(node);
|
||||
}
|
||||
|
||||
treeHistory.ItemsSource = nodesHistory;
|
||||
treeBookmarks.ItemsSource = nodesBookmarks;
|
||||
|
||||
tree.ItemsSource = nodes;
|
||||
}
|
||||
|
||||
|
||||
private void DeleteNode(Node node) {
|
||||
if (node.IsGroup) {
|
||||
Models.Preference.Instance.RemoveGroup(node.Id);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
Models.Preference.Instance.RemoveRepository(node.Id);
|
||||
}
|
||||
|
||||
UpdateTree();
|
||||
|
||||
UpdateTree();
|
||||
UpdateRecents();
|
||||
}
|
||||
|
||||
|
||||
private bool MakeSureReady() {
|
||||
if (!Models.Preference.Instance.IsReady) {
|
||||
Models.Exception.Raise(App.Text("NotConfigured"));
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
private void CheckAndOpen(string path) {
|
||||
if (!MakeSureReady()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!MakeSureReady()) return;
|
||||
|
||||
if (!Directory.Exists(path)) {
|
||||
Models.Exception.Raise(App.Text("PathNotFound", path));
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
var root = new Commands.GetRepositoryRootPath(path).Result();
|
||||
|
||||
if (root == null) {
|
||||
new Popups.Init(path).Show();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
var gitDir = new Commands.QueryGitDir(root).Result();
|
||||
var repo = Models.Preference.Instance.AddRepository(root, gitDir, "");
|
||||
Models.Watcher.Open(repo);
|
||||
treeHistory.UnselectAll();
|
||||
treeBookmarks.UnselectAll();
|
||||
Models.Preference.Instance.AddRecent(repo.Path);
|
||||
}
|
||||
|
||||
|
||||
public void UpdateNodes(string id, int bookmark, IEnumerable<Node> nodes = null) {
|
||||
if (nodes == null) {
|
||||
nodes = treeHistory.ItemsSource.OfType<Node>();
|
||||
}
|
||||
|
||||
if (nodes == null) nodes = tree.ItemsSource.OfType<Node>();
|
||||
foreach (var node in nodes) {
|
||||
if (!node.IsGroup) {
|
||||
if (node.Id == id) {
|
||||
Models.Preference.Instance.FindRepository(node.Id).Bookmark = bookmark;
|
||||
UpdateTree();
|
||||
node.Bookmark = bookmark;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (node.Children.Count > 0) {
|
||||
} else if (node.Children.Count > 0) {
|
||||
UpdateNodes(id, bookmark, node.Children);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
#region RENAME_NODES
|
||||
private void RenameStart(object sender, RoutedEventArgs e) {
|
||||
var edit = sender as Controls.TextEdit;
|
||||
|
||||
if (edit == null || !edit.IsVisible) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (edit == null || !edit.IsVisible) return;
|
||||
|
||||
edit.SelectAll();
|
||||
edit.Focus();
|
||||
}
|
||||
|
||||
|
||||
private void RenameKeyDown(object sender, KeyEventArgs e) {
|
||||
if (e.Key == Key.Escape) {
|
||||
UpdateTree();
|
||||
e.Handled = true;
|
||||
}
|
||||
else if (e.Key == Key.Enter) {
|
||||
} else if (e.Key == Key.Enter) {
|
||||
RenameEnd(sender, e);
|
||||
e.Handled = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void RenameEnd(object sender, RoutedEventArgs e) {
|
||||
var edit = sender as Controls.TextEdit;
|
||||
|
||||
if (edit == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (edit == null) return;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(edit.Text)) {
|
||||
UpdateTree();
|
||||
e.Handled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
var node = edit.DataContext as Node;
|
||||
|
||||
if (node != null) {
|
||||
node.Name = edit.Text;
|
||||
node.IsEditing = false;
|
||||
|
||||
if (node.IsGroup) {
|
||||
Models.Preference.Instance.RenameGroup(node.Id, edit.Text);
|
||||
}
|
||||
else {
|
||||
Models.Preference.Instance.RenameRepository(node.Id, node.Name);
|
||||
} else {
|
||||
Models.Preference.Instance.RenameRepository(node.Id, node.Name);
|
||||
UpdateRecents();
|
||||
OnNodeEdited?.Invoke(node);
|
||||
}
|
||||
|
||||
e.Handled = false;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue