mirror of
https://github.com/sourcegit-scm/sourcegit.git
synced 2024-12-25 21:07:20 -08:00
Compare commits
34 commits
0e37e018ef
...
f3adb25c82
Author | SHA1 | Date | |
---|---|---|---|
|
f3adb25c82 | ||
|
9603f2b5aa | ||
|
ae2ffd5b40 | ||
|
2e838840e0 | ||
|
dbf12ff88e | ||
|
1862428a0f | ||
|
50892f7401 | ||
|
fec13cdc87 | ||
|
ed229166ee | ||
|
6c795e1238 | ||
|
7ee7964799 | ||
|
7acd6e42fe | ||
|
9a6d6bb68a | ||
|
37bf6dec5e | ||
|
ed3e7cbfaf | ||
|
df6f2f3585 | ||
|
b2ca6480b8 | ||
|
a899de2b98 | ||
|
31ad317a57 | ||
|
5ec8279d38 | ||
|
7526def448 | ||
|
e4fb9eeb52 | ||
|
cb3727b524 | ||
|
39dff8a93f | ||
|
23326d179a | ||
|
6768a2c1fe | ||
|
1c345df37d | ||
|
c768b1750e | ||
|
707a227aca | ||
|
f418b72c64 | ||
|
5425fa64fe | ||
|
e4cfca0ffd | ||
|
dd85760b7a | ||
|
819602f77c |
43 changed files with 639 additions and 373 deletions
|
@ -47,7 +47,7 @@
|
||||||
|
|
||||||
## Translation Status
|
## Translation Status
|
||||||
|
|
||||||
[![en_US](https://img.shields.io/badge/en__US-100%25-brightgreen)](TRANSLATION.md) [![de__DE](https://img.shields.io/badge/de__DE-97.50%25-yellow)](TRANSLATION.md) [![es__ES](https://img.shields.io/badge/es__ES-97.78%25-yellow)](TRANSLATION.md) [![fr__FR](https://img.shields.io/badge/fr__FR-95.00%25-yellow)](TRANSLATION.md) [![it__IT](https://img.shields.io/badge/it__IT-95.56%25-yellow)](TRANSLATION.md) [![pt__BR](https://img.shields.io/badge/pt__BR-96.81%25-yellow)](TRANSLATION.md) [![ru__RU](https://img.shields.io/badge/ru__RU-97.92%25-yellow)](TRANSLATION.md) [![zh__CN](https://img.shields.io/badge/zh__CN-100.00%25-brightgreen)](TRANSLATION.md) [![zh__TW](https://img.shields.io/badge/zh__TW-100.00%25-brightgreen)](TRANSLATION.md)
|
[![en_US](https://img.shields.io/badge/en__US-100%25-brightgreen)](TRANSLATION.md) [![de__DE](https://img.shields.io/badge/de__DE-100.00%25-brightgreen)](TRANSLATION.md) [![es__ES](https://img.shields.io/badge/es__ES-97.78%25-yellow)](TRANSLATION.md) [![fr__FR](https://img.shields.io/badge/fr__FR-95.00%25-yellow)](TRANSLATION.md) [![it__IT](https://img.shields.io/badge/it__IT-95.56%25-yellow)](TRANSLATION.md) [![pt__BR](https://img.shields.io/badge/pt__BR-96.81%25-yellow)](TRANSLATION.md) [![ru__RU](https://img.shields.io/badge/ru__RU-100.00%25-brightgreen)](TRANSLATION.md) [![zh__CN](https://img.shields.io/badge/zh__CN-100.00%25-brightgreen)](TRANSLATION.md) [![zh__TW](https://img.shields.io/badge/zh__TW-100.00%25-brightgreen)](TRANSLATION.md)
|
||||||
|
|
||||||
## How to Use
|
## How to Use
|
||||||
|
|
||||||
|
|
|
@ -1,27 +1,10 @@
|
||||||
### de_DE.axaml: 97.50%
|
### de_DE.axaml: 100.00%
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Missing Keys</summary>
|
<summary>Missing Keys</summary>
|
||||||
|
|
||||||
- Text.BranchCM.MergeMultiBranches
|
|
||||||
- Text.CommitCM.Merge
|
|
||||||
- Text.CommitCM.MergeMultiple
|
|
||||||
- Text.CommitDetail.Files.Search
|
|
||||||
- Text.Diff.UseBlockNavigation
|
|
||||||
- Text.FileCM.ResolveUsing
|
|
||||||
- Text.Hotkeys.Global.Clone
|
|
||||||
- Text.InProgress.CherryPick.Head
|
|
||||||
- Text.InProgress.Merge.Operating
|
|
||||||
- Text.InProgress.Rebase.StoppedAt
|
|
||||||
- Text.InProgress.Revert.Head
|
|
||||||
- Text.Merge.Source
|
|
||||||
- Text.MergeMultiple
|
|
||||||
- Text.MergeMultiple.CommitChanges
|
|
||||||
- Text.MergeMultiple.Strategy
|
|
||||||
- Text.MergeMultiple.Targets
|
|
||||||
- Text.Repository.Skip
|
|
||||||
- Text.WorkingCopy.CommitToEdit
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
@ -168,27 +151,13 @@
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### ru_RU.axaml: 97.92%
|
### ru_RU.axaml: 100.00%
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Missing Keys</summary>
|
<summary>Missing Keys</summary>
|
||||||
|
|
||||||
- Text.BranchCM.MergeMultiBranches
|
|
||||||
- Text.CommitCM.Merge
|
|
||||||
- Text.CommitCM.MergeMultiple
|
|
||||||
- Text.FileCM.ResolveUsing
|
|
||||||
- Text.Hotkeys.Global.Clone
|
|
||||||
- Text.InProgress.CherryPick.Head
|
|
||||||
- Text.InProgress.Merge.Operating
|
|
||||||
- Text.InProgress.Rebase.StoppedAt
|
|
||||||
- Text.InProgress.Revert.Head
|
|
||||||
- Text.Merge.Source
|
|
||||||
- Text.MergeMultiple
|
|
||||||
- Text.MergeMultiple.CommitChanges
|
|
||||||
- Text.MergeMultiple.Strategy
|
|
||||||
- Text.MergeMultiple.Targets
|
|
||||||
- Text.Repository.Skip
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
||||||
8.43
|
8.44
|
|
@ -25,6 +25,18 @@ namespace SourceGit
|
||||||
private Action<object> _action = null;
|
private Action<object> _action = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static bool IsCheckForUpdateCommandVisible
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
#if DISABLE_UPDATE_DETECTION
|
||||||
|
return false;
|
||||||
|
#else
|
||||||
|
return true;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static readonly Command OpenPreferenceCommand = new Command(_ => OpenDialog(new Views.Preference()));
|
public static readonly Command OpenPreferenceCommand = new Command(_ => OpenDialog(new Views.Preference()));
|
||||||
public static readonly Command OpenHotkeysCommand = new Command(_ => OpenDialog(new Views.Hotkeys()));
|
public static readonly Command OpenHotkeysCommand = new Command(_ => OpenDialog(new Views.Hotkeys()));
|
||||||
public static readonly Command OpenAppDataDirCommand = new Command(_ => Native.OS.OpenInFileManager(Native.OS.DataDir));
|
public static readonly Command OpenAppDataDirCommand = new Command(_ => Native.OS.OpenInFileManager(Native.OS.DataDir));
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
<NativeMenu>
|
<NativeMenu>
|
||||||
<NativeMenuItem Header="{DynamicResource Text.About.Menu}" Command="{x:Static s:App.OpenAboutCommand}"/>
|
<NativeMenuItem Header="{DynamicResource Text.About.Menu}" Command="{x:Static s:App.OpenAboutCommand}"/>
|
||||||
<NativeMenuItem Header="{DynamicResource Text.Hotkeys}" Command="{x:Static s:App.OpenHotkeysCommand}"/>
|
<NativeMenuItem Header="{DynamicResource Text.Hotkeys}" Command="{x:Static s:App.OpenHotkeysCommand}"/>
|
||||||
<NativeMenuItem Header="{DynamicResource Text.SelfUpdate}" Command="{x:Static s:App.CheckForUpdateCommand}"/>
|
<NativeMenuItem Header="{DynamicResource Text.SelfUpdate}" Command="{x:Static s:App.CheckForUpdateCommand}" IsVisible="{x:Static s:App.IsCheckForUpdateCommandVisible}"/>
|
||||||
<NativeMenuItemSeparator/>
|
<NativeMenuItemSeparator/>
|
||||||
<NativeMenuItem Header="{DynamicResource Text.Preference}" Command="{x:Static s:App.OpenPreferenceCommand}" Gesture="⌘+,"/>
|
<NativeMenuItem Header="{DynamicResource Text.Preference}" Command="{x:Static s:App.OpenPreferenceCommand}" Gesture="⌘+,"/>
|
||||||
<NativeMenuItem Header="{DynamicResource Text.OpenAppDataDir}" Command="{x:Static s:App.OpenAppDataDirCommand}"/>
|
<NativeMenuItem Header="{DynamicResource Text.OpenAppDataDir}" Command="{x:Static s:App.OpenAppDataDirCommand}"/>
|
||||||
|
|
|
@ -548,9 +548,11 @@ namespace SourceGit
|
||||||
_launcher = new ViewModels.Launcher(startupRepo);
|
_launcher = new ViewModels.Launcher(startupRepo);
|
||||||
desktop.MainWindow = new Views.Launcher() { DataContext = _launcher };
|
desktop.MainWindow = new Views.Launcher() { DataContext = _launcher };
|
||||||
|
|
||||||
|
#if !DISABLE_UPDATE_DETECTION
|
||||||
var pref = ViewModels.Preference.Instance;
|
var pref = ViewModels.Preference.Instance;
|
||||||
if (pref.ShouldCheck4UpdateOnStartup())
|
if (pref.ShouldCheck4UpdateOnStartup())
|
||||||
Check4Update();
|
Check4Update();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
private ViewModels.Launcher _launcher = null;
|
private ViewModels.Launcher _launcher = null;
|
||||||
|
|
|
@ -120,8 +120,8 @@ namespace SourceGit.Commands
|
||||||
{
|
{
|
||||||
if (RaiseError)
|
if (RaiseError)
|
||||||
{
|
{
|
||||||
var errMsg = string.Join("\n", errs);
|
var errMsg = string.Join("\n", errs).Trim();
|
||||||
if (!string.IsNullOrWhiteSpace(errMsg))
|
if (!string.IsNullOrEmpty(errMsg))
|
||||||
Dispatcher.UIThread.Post(() => App.RaiseException(Context, errMsg));
|
Dispatcher.UIThread.Post(() => App.RaiseException(Context, errMsg));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,13 +6,11 @@ namespace SourceGit.Commands
|
||||||
{
|
{
|
||||||
public class QueryCommits : Command
|
public class QueryCommits : Command
|
||||||
{
|
{
|
||||||
public QueryCommits(string repo, bool useTopoOrder, string limits, bool needFindHead = true)
|
public QueryCommits(string repo, string limits, bool needFindHead = true)
|
||||||
{
|
{
|
||||||
var order = useTopoOrder ? "--topo-order" : "--date-order";
|
|
||||||
|
|
||||||
WorkingDirectory = repo;
|
WorkingDirectory = repo;
|
||||||
Context = repo;
|
Context = repo;
|
||||||
Args = $"log {order} --no-show-signature --decorate=full --pretty=format:%H%n%P%n%D%n%aN±%aE%n%at%n%cN±%cE%n%ct%n%s {limits}";
|
Args = $"log --no-show-signature --decorate=full --pretty=format:%H%n%P%n%D%n%aN±%aE%n%at%n%cN±%cE%n%ct%n%s {limits}";
|
||||||
_findFirstMerged = needFindHead;
|
_findFirstMerged = needFindHead;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,9 @@ namespace SourceGit.Commands
|
||||||
var lines = output.StdOut.Split('\n');
|
var lines = output.StdOut.Split('\n');
|
||||||
foreach (var line in lines)
|
foreach (var line in lines)
|
||||||
{
|
{
|
||||||
|
if (line.EndsWith("/HEAD", StringComparison.Ordinal))
|
||||||
|
continue;
|
||||||
|
|
||||||
if (line.StartsWith("refs/heads/", StringComparison.Ordinal))
|
if (line.StartsWith("refs/heads/", StringComparison.Ordinal))
|
||||||
rs.Add(new() { Name = line.Substring("refs/heads/".Length), Type = Models.DecoratorType.LocalBranchHead });
|
rs.Add(new() { Name = line.Substring("refs/heads/".Length), Type = Models.DecoratorType.LocalBranchHead });
|
||||||
else if (line.StartsWith("refs/remotes/", StringComparison.Ordinal))
|
else if (line.StartsWith("refs/remotes/", StringComparison.Ordinal))
|
||||||
|
|
|
@ -35,7 +35,7 @@ namespace SourceGit.Models
|
||||||
|
|
||||||
private static AvatarManager _instance = null;
|
private static AvatarManager _instance = null;
|
||||||
|
|
||||||
[GeneratedRegex(@"^(?:(\d+)\+)?(.+?)@users\.noreply\.github\.com$")]
|
[GeneratedRegex(@"^(?:(\d+)\+)?(.+?)@.+\.github\.com$")]
|
||||||
private static partial Regex REG_GITHUB_USER_EMAIL();
|
private static partial Regex REG_GITHUB_USER_EMAIL();
|
||||||
|
|
||||||
private object _synclock = new object();
|
private object _synclock = new object();
|
||||||
|
@ -43,6 +43,7 @@ namespace SourceGit.Models
|
||||||
private List<IAvatarHost> _avatars = new List<IAvatarHost>();
|
private List<IAvatarHost> _avatars = new List<IAvatarHost>();
|
||||||
private Dictionary<string, Bitmap> _resources = new Dictionary<string, Bitmap>();
|
private Dictionary<string, Bitmap> _resources = new Dictionary<string, Bitmap>();
|
||||||
private HashSet<string> _requesting = new HashSet<string>();
|
private HashSet<string> _requesting = new HashSet<string>();
|
||||||
|
private HashSet<string> _defaultAvatars = new HashSet<string>();
|
||||||
|
|
||||||
public void Start()
|
public void Start()
|
||||||
{
|
{
|
||||||
|
@ -50,8 +51,8 @@ namespace SourceGit.Models
|
||||||
if (!Directory.Exists(_storePath))
|
if (!Directory.Exists(_storePath))
|
||||||
Directory.CreateDirectory(_storePath);
|
Directory.CreateDirectory(_storePath);
|
||||||
|
|
||||||
var icon = AssetLoader.Open(new Uri($"avares://SourceGit/Resources/Images/github.png", UriKind.RelativeOrAbsolute));
|
LoadDefaultAvatar("noreply@github.com", "github.png");
|
||||||
_resources.Add("noreply@github.com", new Bitmap(icon));
|
LoadDefaultAvatar("unrealbot@epicgames.com", "unreal.png");
|
||||||
|
|
||||||
Task.Run(() =>
|
Task.Run(() =>
|
||||||
{
|
{
|
||||||
|
@ -140,7 +141,7 @@ namespace SourceGit.Models
|
||||||
{
|
{
|
||||||
if (forceRefetch)
|
if (forceRefetch)
|
||||||
{
|
{
|
||||||
if (email.Equals("noreply@github.com", StringComparison.Ordinal))
|
if (_defaultAvatars.Contains(email))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
if (_resources.ContainsKey(email))
|
if (_resources.ContainsKey(email))
|
||||||
|
@ -185,6 +186,13 @@ namespace SourceGit.Models
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void LoadDefaultAvatar(string key, string img)
|
||||||
|
{
|
||||||
|
var icon = AssetLoader.Open(new Uri($"avares://SourceGit/Resources/Images/{img}", UriKind.RelativeOrAbsolute));
|
||||||
|
_resources.Add(key, new Bitmap(icon));
|
||||||
|
_defaultAvatars.Add(key);
|
||||||
|
}
|
||||||
|
|
||||||
private string GetEmailHash(string email)
|
private string GetEmailHash(string email)
|
||||||
{
|
{
|
||||||
var lowered = email.ToLower(CultureInfo.CurrentCulture).Trim();
|
var lowered = email.ToLower(CultureInfo.CurrentCulture).Trim();
|
||||||
|
|
|
@ -14,6 +14,30 @@ namespace SourceGit.Models
|
||||||
set;
|
set;
|
||||||
} = string.Empty;
|
} = string.Empty;
|
||||||
|
|
||||||
|
public bool EnableReflog
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
} = false;
|
||||||
|
|
||||||
|
public bool EnableFirstParentInHistories
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
} = false;
|
||||||
|
|
||||||
|
public bool EnableTopoOrderInHistories
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
} = false;
|
||||||
|
|
||||||
|
public bool IncludeUntrackedInLocalChanges
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
} = true;
|
||||||
|
|
||||||
public DealWithLocalChanges DealWithLocalChangesOnCheckoutBranch
|
public DealWithLocalChanges DealWithLocalChangesOnCheckoutBranch
|
||||||
{
|
{
|
||||||
get;
|
get;
|
||||||
|
@ -26,6 +50,12 @@ namespace SourceGit.Models
|
||||||
set;
|
set;
|
||||||
} = false;
|
} = false;
|
||||||
|
|
||||||
|
public bool EnableForceOnFetch
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
} = false;
|
||||||
|
|
||||||
public bool FetchWithoutTags
|
public bool FetchWithoutTags
|
||||||
{
|
{
|
||||||
get;
|
get;
|
||||||
|
@ -84,31 +114,31 @@ namespace SourceGit.Models
|
||||||
{
|
{
|
||||||
get;
|
get;
|
||||||
set;
|
set;
|
||||||
} = new AvaloniaList<Filter>();
|
} = [];
|
||||||
|
|
||||||
public AvaloniaList<CommitTemplate> CommitTemplates
|
public AvaloniaList<CommitTemplate> CommitTemplates
|
||||||
{
|
{
|
||||||
get;
|
get;
|
||||||
set;
|
set;
|
||||||
} = new AvaloniaList<CommitTemplate>();
|
} = [];
|
||||||
|
|
||||||
public AvaloniaList<string> CommitMessages
|
public AvaloniaList<string> CommitMessages
|
||||||
{
|
{
|
||||||
get;
|
get;
|
||||||
set;
|
set;
|
||||||
} = new AvaloniaList<string>();
|
} = [];
|
||||||
|
|
||||||
public AvaloniaList<IssueTrackerRule> IssueTrackerRules
|
public AvaloniaList<IssueTrackerRule> IssueTrackerRules
|
||||||
{
|
{
|
||||||
get;
|
get;
|
||||||
set;
|
set;
|
||||||
} = new AvaloniaList<IssueTrackerRule>();
|
} = [];
|
||||||
|
|
||||||
public AvaloniaList<CustomAction> CustomActions
|
public AvaloniaList<CustomAction> CustomActions
|
||||||
{
|
{
|
||||||
get;
|
get;
|
||||||
set;
|
set;
|
||||||
} = new AvaloniaList<CustomAction>();
|
} = [];
|
||||||
|
|
||||||
public bool EnableAutoFetch
|
public bool EnableAutoFetch
|
||||||
{
|
{
|
||||||
|
@ -152,6 +182,42 @@ namespace SourceGit.Models
|
||||||
set;
|
set;
|
||||||
} = "---";
|
} = "---";
|
||||||
|
|
||||||
|
public bool IsLocalBranchesExpandedInSideBar
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
} = true;
|
||||||
|
|
||||||
|
public bool IsRemotesExpandedInSideBar
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
} = false;
|
||||||
|
|
||||||
|
public bool IsTagsExpandedInSideBar
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
} = false;
|
||||||
|
|
||||||
|
public bool IsSubmodulesExpandedInSideBar
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
} = false;
|
||||||
|
|
||||||
|
public bool IsWorktreeExpandedInSideBar
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
} = false;
|
||||||
|
|
||||||
|
public List<string> ExpandedBranchNodesInSideBar
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
} = [];
|
||||||
|
|
||||||
public Dictionary<string, FilterMode> CollectHistoriesFilters()
|
public Dictionary<string, FilterMode> CollectHistoriesFilters()
|
||||||
{
|
{
|
||||||
var map = new Dictionary<string, FilterMode>();
|
var map = new Dictionary<string, FilterMode>();
|
||||||
|
|
|
@ -41,6 +41,7 @@ namespace SourceGit.Models
|
||||||
{
|
{
|
||||||
new ShellOrTerminal("mac-terminal", "Terminal", ""),
|
new ShellOrTerminal("mac-terminal", "Terminal", ""),
|
||||||
new ShellOrTerminal("iterm2", "iTerm", ""),
|
new ShellOrTerminal("iterm2", "iTerm", ""),
|
||||||
|
new ShellOrTerminal("warp", "Warp", ""),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -36,6 +36,8 @@ namespace SourceGit.Native
|
||||||
return "Terminal";
|
return "Terminal";
|
||||||
case "iterm2":
|
case "iterm2":
|
||||||
return "iTerm";
|
return "iTerm";
|
||||||
|
case "warp":
|
||||||
|
return "Warp";
|
||||||
}
|
}
|
||||||
|
|
||||||
return string.Empty;
|
return string.Empty;
|
||||||
|
|
BIN
src/Resources/Images/ShellIcons/warp.png
Normal file
BIN
src/Resources/Images/ShellIcons/warp.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.7 KiB |
BIN
src/Resources/Images/unreal.png
Normal file
BIN
src/Resources/Images/unreal.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.4 KiB |
|
@ -61,6 +61,7 @@
|
||||||
<x:String x:Key="Text.BranchCM.FetchInto" xml:space="preserve">Fetche ${0}$ in ${1}$ hinein...</x:String>
|
<x:String x:Key="Text.BranchCM.FetchInto" xml:space="preserve">Fetche ${0}$ in ${1}$ hinein...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Finish" xml:space="preserve">Git Flow - Abschließen ${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.Finish" xml:space="preserve">Git Flow - Abschließen ${0}$</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Merge" xml:space="preserve">Merge ${0}$ in ${1}$ hinein...</x:String>
|
<x:String x:Key="Text.BranchCM.Merge" xml:space="preserve">Merge ${0}$ in ${1}$ hinein...</x:String>
|
||||||
|
<x:String x:Key="Text.BranchCM.MergeMultiBranches" xml:space="preserve">Merge ausgewählte {0} Branches in aktuellen hinein</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Pull" xml:space="preserve">Pull ${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.Pull" xml:space="preserve">Pull ${0}$</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.PullInto" xml:space="preserve">Pull ${0}$ in ${1}$ hinein...</x:String>
|
<x:String x:Key="Text.BranchCM.PullInto" xml:space="preserve">Pull ${0}$ in ${1}$ hinein...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">Push ${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">Push ${0}$</x:String>
|
||||||
|
@ -113,6 +114,8 @@
|
||||||
<x:String x:Key="Text.CommitCM.CopySHA" xml:space="preserve">SHA kopieren</x:String>
|
<x:String x:Key="Text.CommitCM.CopySHA" xml:space="preserve">SHA kopieren</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.CustomAction" xml:space="preserve">Benutzerdefinierte Aktion</x:String>
|
<x:String x:Key="Text.CommitCM.CustomAction" xml:space="preserve">Benutzerdefinierte Aktion</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.InteractiveRebase" xml:space="preserve">Interactives Rebase von ${0}$ auf diesen Commit</x:String>
|
<x:String x:Key="Text.CommitCM.InteractiveRebase" xml:space="preserve">Interactives Rebase von ${0}$ auf diesen Commit</x:String>
|
||||||
|
<x:String x:Key="Text.CommitCM.Merge" xml:space="preserve">Merge in ${0}$ hinein</x:String>
|
||||||
|
<x:String x:Key="Text.CommitCM.MergeMultiple" xml:space="preserve">Merge ...</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.Rebase" xml:space="preserve">Rebase von ${0}$ auf diesen Commit</x:String>
|
<x:String x:Key="Text.CommitCM.Rebase" xml:space="preserve">Rebase von ${0}$ auf diesen Commit</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.Reset" xml:space="preserve">Reset ${0}$ auf diesen Commit</x:String>
|
<x:String x:Key="Text.CommitCM.Reset" xml:space="preserve">Reset ${0}$ auf diesen Commit</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.Revert" xml:space="preserve">Commit rückgängig machen</x:String>
|
<x:String x:Key="Text.CommitCM.Revert" xml:space="preserve">Commit rückgängig machen</x:String>
|
||||||
|
@ -124,6 +127,7 @@
|
||||||
<x:String x:Key="Text.CommitDetail.Changes.Search" xml:space="preserve">Änderungen durchsuchen...</x:String>
|
<x:String x:Key="Text.CommitDetail.Changes.Search" xml:space="preserve">Änderungen durchsuchen...</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Files" xml:space="preserve">DATEIEN</x:String>
|
<x:String x:Key="Text.CommitDetail.Files" xml:space="preserve">DATEIEN</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Files.LFS" xml:space="preserve">LFS DATEI</x:String>
|
<x:String x:Key="Text.CommitDetail.Files.LFS" xml:space="preserve">LFS DATEI</x:String>
|
||||||
|
<x:String x:Key="Text.CommitDetail.Files.Search" xml:space="preserve">Dateien durchsuchen...</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Files.Submodule" xml:space="preserve">Submodule</x:String>
|
<x:String x:Key="Text.CommitDetail.Files.Submodule" xml:space="preserve">Submodule</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Info" xml:space="preserve">INFORMATION</x:String>
|
<x:String x:Key="Text.CommitDetail.Info" xml:space="preserve">INFORMATION</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Info.Author" xml:space="preserve">AUTOR</x:String>
|
<x:String x:Key="Text.CommitDetail.Info.Author" xml:space="preserve">AUTOR</x:String>
|
||||||
|
@ -249,6 +253,7 @@
|
||||||
<x:String x:Key="Text.Diff.SwapCommits" xml:space="preserve">Seiten wechseln</x:String>
|
<x:String x:Key="Text.Diff.SwapCommits" xml:space="preserve">Seiten wechseln</x:String>
|
||||||
<x:String x:Key="Text.Diff.SyntaxHighlight" xml:space="preserve">Syntax Hervorhebung</x:String>
|
<x:String x:Key="Text.Diff.SyntaxHighlight" xml:space="preserve">Syntax Hervorhebung</x:String>
|
||||||
<x:String x:Key="Text.Diff.ToggleWordWrap" xml:space="preserve">Zeilenumbruch</x:String>
|
<x:String x:Key="Text.Diff.ToggleWordWrap" xml:space="preserve">Zeilenumbruch</x:String>
|
||||||
|
<x:String x:Key="Text.Diff.UseBlockNavigation" xml:space="preserve">Aktiviere Block-Navigation</x:String>
|
||||||
<x:String x:Key="Text.Diff.UseMerger" xml:space="preserve">Öffne in Merge Tool</x:String>
|
<x:String x:Key="Text.Diff.UseMerger" xml:space="preserve">Öffne in Merge Tool</x:String>
|
||||||
<x:String x:Key="Text.Diff.VisualLines.All" xml:space="preserve">Alle Zeilen anzeigen</x:String>
|
<x:String x:Key="Text.Diff.VisualLines.All" xml:space="preserve">Alle Zeilen anzeigen</x:String>
|
||||||
<x:String x:Key="Text.Diff.VisualLines.Decr" xml:space="preserve">Weniger Zeilen anzeigen</x:String>
|
<x:String x:Key="Text.Diff.VisualLines.Decr" xml:space="preserve">Weniger Zeilen anzeigen</x:String>
|
||||||
|
@ -280,6 +285,7 @@
|
||||||
<x:String x:Key="Text.FileCM.DiscardMulti" xml:space="preserve">Verwerfe {0} Dateien...</x:String>
|
<x:String x:Key="Text.FileCM.DiscardMulti" xml:space="preserve">Verwerfe {0} Dateien...</x:String>
|
||||||
<x:String x:Key="Text.FileCM.DiscardSelectedLines" xml:space="preserve">Verwerfe Änderungen in ausgewählten Zeilen</x:String>
|
<x:String x:Key="Text.FileCM.DiscardSelectedLines" xml:space="preserve">Verwerfe Änderungen in ausgewählten Zeilen</x:String>
|
||||||
<x:String x:Key="Text.FileCM.OpenWithExternalMerger" xml:space="preserve">Öffne externes Merge Tool</x:String>
|
<x:String x:Key="Text.FileCM.OpenWithExternalMerger" xml:space="preserve">Öffne externes Merge Tool</x:String>
|
||||||
|
<x:String x:Key="Text.FileCM.ResolveUsing" xml:space="preserve">Löse mit ${0}$</x:String>
|
||||||
<x:String x:Key="Text.FileCM.SaveAsPatch" xml:space="preserve">Als Patch speichern...</x:String>
|
<x:String x:Key="Text.FileCM.SaveAsPatch" xml:space="preserve">Als Patch speichern...</x:String>
|
||||||
<x:String x:Key="Text.FileCM.Stage" xml:space="preserve">Stagen</x:String>
|
<x:String x:Key="Text.FileCM.Stage" xml:space="preserve">Stagen</x:String>
|
||||||
<x:String x:Key="Text.FileCM.StageMulti" xml:space="preserve">{0} Dateien stagen</x:String>
|
<x:String x:Key="Text.FileCM.StageMulti" xml:space="preserve">{0} Dateien stagen</x:String>
|
||||||
|
@ -358,6 +364,7 @@
|
||||||
<x:String x:Key="Text.Hotkeys" xml:space="preserve">Tastaturkürzel Referenz</x:String>
|
<x:String x:Key="Text.Hotkeys" xml:space="preserve">Tastaturkürzel Referenz</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global" xml:space="preserve">GLOBAL</x:String>
|
<x:String x:Key="Text.Hotkeys.Global" xml:space="preserve">GLOBAL</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.CancelPopup" xml:space="preserve">Aktuelles Popup schließen</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.CancelPopup" xml:space="preserve">Aktuelles Popup schließen</x:String>
|
||||||
|
<x:String x:Key="Text.Hotkeys.Global.Clone" xml:space="preserve">Klone neues Repository</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.CloseTab" xml:space="preserve">Aktuellen Tab schließen</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.CloseTab" xml:space="preserve">Aktuellen Tab schließen</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.GotoPrevTab" xml:space="preserve">Zum vorherigen Tab wechseln</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.GotoPrevTab" xml:space="preserve">Zum vorherigen Tab wechseln</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.GotoNextTab" xml:space="preserve">Zum nächsten Tab wechseln</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.GotoNextTab" xml:space="preserve">Zum nächsten Tab wechseln</x:String>
|
||||||
|
@ -390,9 +397,13 @@
|
||||||
<x:String x:Key="Text.Init" xml:space="preserve">Initialisiere Repository</x:String>
|
<x:String x:Key="Text.Init" xml:space="preserve">Initialisiere Repository</x:String>
|
||||||
<x:String x:Key="Text.Init.Path" xml:space="preserve">Pfad:</x:String>
|
<x:String x:Key="Text.Init.Path" xml:space="preserve">Pfad:</x:String>
|
||||||
<x:String x:Key="Text.InProgress.CherryPick" xml:space="preserve">Cherry-Pick wird durchgeführt.</x:String>
|
<x:String x:Key="Text.InProgress.CherryPick" xml:space="preserve">Cherry-Pick wird durchgeführt.</x:String>
|
||||||
|
<x:String x:Key="Text.InProgress.CherryPick.Head" xml:space="preserve">Verarbeite commit</x:String>
|
||||||
<x:String x:Key="Text.InProgress.Merge" xml:space="preserve">Merge request wird durchgeführt.</x:String>
|
<x:String x:Key="Text.InProgress.Merge" xml:space="preserve">Merge request wird durchgeführt.</x:String>
|
||||||
|
<x:String x:Key="Text.InProgress.Merge.Operating" xml:space="preserve">Verarbeite</x:String>
|
||||||
<x:String x:Key="Text.InProgress.Rebase" xml:space="preserve">Rebase wird durchgeführt.</x:String>
|
<x:String x:Key="Text.InProgress.Rebase" xml:space="preserve">Rebase wird durchgeführt.</x:String>
|
||||||
|
<x:String x:Key="Text.InProgress.Rebase.StoppedAt" xml:space="preserve">Angehalten bei</x:String>
|
||||||
<x:String x:Key="Text.InProgress.Revert" xml:space="preserve">Revert wird durchgeführt.</x:String>
|
<x:String x:Key="Text.InProgress.Revert" xml:space="preserve">Revert wird durchgeführt.</x:String>
|
||||||
|
<x:String x:Key="Text.InProgress.Revert.Head" xml:space="preserve">Reverte commit</x:String>
|
||||||
<x:String x:Key="Text.InteractiveRebase" xml:space="preserve">Interaktiver Rebase</x:String>
|
<x:String x:Key="Text.InteractiveRebase" xml:space="preserve">Interaktiver Rebase</x:String>
|
||||||
<x:String x:Key="Text.InteractiveRebase.Target" xml:space="preserve">Ziel Branch:</x:String>
|
<x:String x:Key="Text.InteractiveRebase.Target" xml:space="preserve">Ziel Branch:</x:String>
|
||||||
<x:String x:Key="Text.InteractiveRebase.On" xml:space="preserve">Auf:</x:String>
|
<x:String x:Key="Text.InteractiveRebase.On" xml:space="preserve">Auf:</x:String>
|
||||||
|
@ -403,6 +414,11 @@
|
||||||
<x:String x:Key="Text.Merge" xml:space="preserve">Branch mergen</x:String>
|
<x:String x:Key="Text.Merge" xml:space="preserve">Branch mergen</x:String>
|
||||||
<x:String x:Key="Text.Merge.Into" xml:space="preserve">Ziel-Branch:</x:String>
|
<x:String x:Key="Text.Merge.Into" xml:space="preserve">Ziel-Branch:</x:String>
|
||||||
<x:String x:Key="Text.Merge.Mode" xml:space="preserve">Merge Option:</x:String>
|
<x:String x:Key="Text.Merge.Mode" xml:space="preserve">Merge Option:</x:String>
|
||||||
|
<x:String x:Key="Text.Merge.Source" xml:space="preserve">Quelle:</x:String>
|
||||||
|
<x:String x:Key="Text.MergeMultiple" xml:space="preserve">Merge (mehrere)</x:String>
|
||||||
|
<x:String x:Key="Text.MergeMultiple.CommitChanges" xml:space="preserve">Alle Änderungen committen</x:String>
|
||||||
|
<x:String x:Key="Text.MergeMultiple.Strategy" xml:space="preserve">Strategie:</x:String>
|
||||||
|
<x:String x:Key="Text.MergeMultiple.Targets" xml:space="preserve">Ziele:</x:String>
|
||||||
<x:String x:Key="Text.MoveRepositoryNode" xml:space="preserve">Bewege Repository Knoten</x:String>
|
<x:String x:Key="Text.MoveRepositoryNode" xml:space="preserve">Bewege Repository Knoten</x:String>
|
||||||
<x:String x:Key="Text.MoveRepositoryNode.Target" xml:space="preserve">Wähle Vorgänger-Knoten für:</x:String>
|
<x:String x:Key="Text.MoveRepositoryNode.Target" xml:space="preserve">Wähle Vorgänger-Knoten für:</x:String>
|
||||||
<x:String x:Key="Text.Name" xml:space="preserve">Name:</x:String>
|
<x:String x:Key="Text.Name" xml:space="preserve">Name:</x:String>
|
||||||
|
@ -459,7 +475,7 @@
|
||||||
<x:String x:Key="Text.Preference.General.SubjectGuideLength" xml:space="preserve">Längenvorgabe für Commit-Nachrichten</x:String>
|
<x:String x:Key="Text.Preference.General.SubjectGuideLength" xml:space="preserve">Längenvorgabe für Commit-Nachrichten</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git" xml:space="preserve">GIT</x:String>
|
<x:String x:Key="Text.Preference.Git" xml:space="preserve">GIT</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.CRLF" xml:space="preserve">Aktiviere Auto-CRLF</x:String>
|
<x:String x:Key="Text.Preference.Git.CRLF" xml:space="preserve">Aktiviere Auto-CRLF</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.DefaultCloneDir" xml:space="preserve">Clone Standardordner</x:String>
|
<x:String x:Key="Text.Preference.Git.DefaultCloneDir" xml:space="preserve">Klon Standardordner</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Email" xml:space="preserve">Benutzer Email</x:String>
|
<x:String x:Key="Text.Preference.Git.Email" xml:space="preserve">Benutzer Email</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Email.Placeholder" xml:space="preserve">Globale Git Benutzer Email</x:String>
|
<x:String x:Key="Text.Preference.Git.Email.Placeholder" xml:space="preserve">Globale Git Benutzer Email</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Path" xml:space="preserve">Installationspfad</x:String>
|
<x:String x:Key="Text.Preference.Git.Path" xml:space="preserve">Installationspfad</x:String>
|
||||||
|
@ -568,6 +584,7 @@
|
||||||
<x:String x:Key="Text.Repository.Search.ByUser" xml:space="preserve">Autor & Committer</x:String>
|
<x:String x:Key="Text.Repository.Search.ByUser" xml:space="preserve">Autor & Committer</x:String>
|
||||||
<x:String x:Key="Text.Repository.Search.InCurrentBranch" xml:space="preserve">Aktueller Branch</x:String>
|
<x:String x:Key="Text.Repository.Search.InCurrentBranch" xml:space="preserve">Aktueller Branch</x:String>
|
||||||
<x:String x:Key="Text.Repository.ShowTagsAsTree" xml:space="preserve">Zeige Tags als Baum</x:String>
|
<x:String x:Key="Text.Repository.ShowTagsAsTree" xml:space="preserve">Zeige Tags als Baum</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.Skip" xml:space="preserve">ÜBERSPRINGEN</x:String>
|
||||||
<x:String x:Key="Text.Repository.Statistics" xml:space="preserve">Statistiken</x:String>
|
<x:String x:Key="Text.Repository.Statistics" xml:space="preserve">Statistiken</x:String>
|
||||||
<x:String x:Key="Text.Repository.Submodules" xml:space="preserve">SUBMODULE</x:String>
|
<x:String x:Key="Text.Repository.Submodules" xml:space="preserve">SUBMODULE</x:String>
|
||||||
<x:String x:Key="Text.Repository.Submodules.Add" xml:space="preserve">SUBMODUL HINZUFÜGEN</x:String>
|
<x:String x:Key="Text.Repository.Submodules.Add" xml:space="preserve">SUBMODUL HINZUFÜGEN</x:String>
|
||||||
|
@ -666,7 +683,7 @@
|
||||||
<x:String x:Key="Text.Welcome.OpenAllInNode" xml:space="preserve">Öffne alle Repositories</x:String>
|
<x:String x:Key="Text.Welcome.OpenAllInNode" xml:space="preserve">Öffne alle Repositories</x:String>
|
||||||
<x:String x:Key="Text.Welcome.OpenOrInit" xml:space="preserve">Öffne Repository</x:String>
|
<x:String x:Key="Text.Welcome.OpenOrInit" xml:space="preserve">Öffne Repository</x:String>
|
||||||
<x:String x:Key="Text.Welcome.OpenTerminal" xml:space="preserve">Öffne Terminal</x:String>
|
<x:String x:Key="Text.Welcome.OpenTerminal" xml:space="preserve">Öffne Terminal</x:String>
|
||||||
<x:String x:Key="Text.Welcome.ScanDefaultCloneDir" xml:space="preserve">Clone Standardordner erneut nach Repositories durchsuchen</x:String>
|
<x:String x:Key="Text.Welcome.ScanDefaultCloneDir" xml:space="preserve">Klon Standardordner erneut nach Repositories durchsuchen</x:String>
|
||||||
<x:String x:Key="Text.Welcome.Search" xml:space="preserve">Suche Repositories...</x:String>
|
<x:String x:Key="Text.Welcome.Search" xml:space="preserve">Suche Repositories...</x:String>
|
||||||
<x:String x:Key="Text.Welcome.Sort" xml:space="preserve">Sortieren</x:String>
|
<x:String x:Key="Text.Welcome.Sort" xml:space="preserve">Sortieren</x:String>
|
||||||
<x:String x:Key="Text.WorkingCopy" xml:space="preserve">Änderungen</x:String>
|
<x:String x:Key="Text.WorkingCopy" xml:space="preserve">Änderungen</x:String>
|
||||||
|
@ -681,6 +698,7 @@
|
||||||
<x:String x:Key="Text.WorkingCopy.CommitAndPush" xml:space="preserve">COMMIT & PUSH</x:String>
|
<x:String x:Key="Text.WorkingCopy.CommitAndPush" xml:space="preserve">COMMIT & PUSH</x:String>
|
||||||
<x:String x:Key="Text.WorkingCopy.CommitMessageHelper" xml:space="preserve">Template/Historie</x:String>
|
<x:String x:Key="Text.WorkingCopy.CommitMessageHelper" xml:space="preserve">Template/Historie</x:String>
|
||||||
<x:String x:Key="Text.WorkingCopy.CommitTip" xml:space="preserve">Klick-Ereignis auslösen</x:String>
|
<x:String x:Key="Text.WorkingCopy.CommitTip" xml:space="preserve">Klick-Ereignis auslösen</x:String>
|
||||||
|
<x:String x:Key="Text.WorkingCopy.CommitToEdit" xml:space="preserve">Commit (Bearbeitung)</x:String>
|
||||||
<x:String x:Key="Text.WorkingCopy.CommitWithAutoStage" xml:space="preserve">Alle Änderungen stagen und committen</x:String>
|
<x:String x:Key="Text.WorkingCopy.CommitWithAutoStage" xml:space="preserve">Alle Änderungen stagen und committen</x:String>
|
||||||
<x:String x:Key="Text.WorkingCopy.ConfirmCommitWithoutFiles" xml:space="preserve">Leerer Commit erkannt! Fortfahren (--allow-empty)?</x:String>
|
<x:String x:Key="Text.WorkingCopy.ConfirmCommitWithoutFiles" xml:space="preserve">Leerer Commit erkannt! Fortfahren (--allow-empty)?</x:String>
|
||||||
<x:String x:Key="Text.WorkingCopy.Conflicts" xml:space="preserve">KONFLIKTE ERKANNT</x:String>
|
<x:String x:Key="Text.WorkingCopy.Conflicts" xml:space="preserve">KONFLIKTE ERKANNT</x:String>
|
||||||
|
|
|
@ -273,7 +273,7 @@
|
||||||
<x:String x:Key="Text.FastForwardWithoutCheck" xml:space="preserve">Fast-Forward (without checkout)</x:String>
|
<x:String x:Key="Text.FastForwardWithoutCheck" xml:space="preserve">Fast-Forward (without checkout)</x:String>
|
||||||
<x:String x:Key="Text.Fetch" xml:space="preserve">Fetch</x:String>
|
<x:String x:Key="Text.Fetch" xml:space="preserve">Fetch</x:String>
|
||||||
<x:String x:Key="Text.Fetch.AllRemotes" xml:space="preserve">Fetch all remotes</x:String>
|
<x:String x:Key="Text.Fetch.AllRemotes" xml:space="preserve">Fetch all remotes</x:String>
|
||||||
<x:String x:Key="Text.Fetch.Force" xml:space="preserve">Enable '--force' option</x:String>
|
<x:String x:Key="Text.Fetch.Force" xml:space="preserve">Override refs check</x:String>
|
||||||
<x:String x:Key="Text.Fetch.NoTags" xml:space="preserve">Fetch without tags</x:String>
|
<x:String x:Key="Text.Fetch.NoTags" xml:space="preserve">Fetch without tags</x:String>
|
||||||
<x:String x:Key="Text.Fetch.Remote" xml:space="preserve">Remote:</x:String>
|
<x:String x:Key="Text.Fetch.Remote" xml:space="preserve">Remote:</x:String>
|
||||||
<x:String x:Key="Text.Fetch.Title" xml:space="preserve">Fetch Remote Changes</x:String>
|
<x:String x:Key="Text.Fetch.Title" xml:space="preserve">Fetch Remote Changes</x:String>
|
||||||
|
@ -420,7 +420,7 @@
|
||||||
<x:String x:Key="Text.MoveRepositoryNode.Target" xml:space="preserve">Select parent node for:</x:String>
|
<x:String x:Key="Text.MoveRepositoryNode.Target" xml:space="preserve">Select parent node for:</x:String>
|
||||||
<x:String x:Key="Text.Name" xml:space="preserve">Name:</x:String>
|
<x:String x:Key="Text.Name" xml:space="preserve">Name:</x:String>
|
||||||
<x:String x:Key="Text.NotConfigured" xml:space="preserve">Git has NOT been configured. Please to go [Preference] and configure it first.</x:String>
|
<x:String x:Key="Text.NotConfigured" xml:space="preserve">Git has NOT been configured. Please to go [Preference] and configure it first.</x:String>
|
||||||
<x:String x:Key="Text.OpenAppDataDir" xml:space="preserve">Open App Data Dir</x:String>
|
<x:String x:Key="Text.OpenAppDataDir" xml:space="preserve">Open Data Storage Directory</x:String>
|
||||||
<x:String x:Key="Text.OpenWith" xml:space="preserve">Open with...</x:String>
|
<x:String x:Key="Text.OpenWith" xml:space="preserve">Open with...</x:String>
|
||||||
<x:String x:Key="Text.Optional" xml:space="preserve">Optional.</x:String>
|
<x:String x:Key="Text.Optional" xml:space="preserve">Optional.</x:String>
|
||||||
<x:String x:Key="Text.PageTabBar.New" xml:space="preserve">Create New Page</x:String>
|
<x:String x:Key="Text.PageTabBar.New" xml:space="preserve">Create New Page</x:String>
|
||||||
|
|
|
@ -60,7 +60,8 @@
|
||||||
<x:String x:Key="Text.BranchCM.FastForward" xml:space="preserve">Перемотать вперёд к ${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.FastForward" xml:space="preserve">Перемотать вперёд к ${0}$</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.FetchInto" xml:space="preserve">Извлечь ${0}$ в ${1}$...</x:String>
|
<x:String x:Key="Text.BranchCM.FetchInto" xml:space="preserve">Извлечь ${0}$ в ${1}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Finish" xml:space="preserve">Поток Git - Завершение ${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.Finish" xml:space="preserve">Поток Git - Завершение ${0}$</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Merge" xml:space="preserve">Слить ${0}$ в ${1}$...</x:String>
|
<x:String x:Key="Text.BranchCM.Merge" xml:space="preserve">Влить ${0}$ в ${1}$...</x:String>
|
||||||
|
<x:String x:Key="Text.BranchCM.MergeMultiBranches" xml:space="preserve">Влить {0} выделенных веток в текущую</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Pull" xml:space="preserve">Забрать ${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.Pull" xml:space="preserve">Забрать ${0}$</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.PullInto" xml:space="preserve">Забрать ${0}$ в ${1}$...</x:String>
|
<x:String x:Key="Text.BranchCM.PullInto" xml:space="preserve">Забрать ${0}$ в ${1}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">Выложить ${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">Выложить ${0}$</x:String>
|
||||||
|
@ -104,26 +105,28 @@
|
||||||
<x:String x:Key="Text.Clone.RemoteURL" xml:space="preserve">Адрес хранилища:</x:String>
|
<x:String x:Key="Text.Clone.RemoteURL" xml:space="preserve">Адрес хранилища:</x:String>
|
||||||
<x:String x:Key="Text.Close" xml:space="preserve">ЗАКРЫТЬ</x:String>
|
<x:String x:Key="Text.Close" xml:space="preserve">ЗАКРЫТЬ</x:String>
|
||||||
<x:String x:Key="Text.CodeEditor" xml:space="preserve">Редактор</x:String>
|
<x:String x:Key="Text.CodeEditor" xml:space="preserve">Редактор</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.CherryPick" xml:space="preserve">Выбрать из списка эту фиксацию</x:String>
|
<x:String x:Key="Text.CommitCM.CherryPick" xml:space="preserve">Применить этот коммит (cherry-pick)</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.CherryPickMultiple" xml:space="preserve">Список выбора ...</x:String>
|
<x:String x:Key="Text.CommitCM.CherryPickMultiple" xml:space="preserve">Применить несколько коммитов ...</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.Checkout" xml:space="preserve">Проверить фиксацию</x:String>
|
<x:String x:Key="Text.CommitCM.Checkout" xml:space="preserve">Переключиться на этот коммит</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.CompareWithHead" xml:space="preserve">Сравнить в заголовком</x:String>
|
<x:String x:Key="Text.CommitCM.CompareWithHead" xml:space="preserve">Сравнить c HEAD</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.CompareWithWorktree" xml:space="preserve">Сравнить с рабочим деревом</x:String>
|
<x:String x:Key="Text.CommitCM.CompareWithWorktree" xml:space="preserve">Сравнить с рабочим каталогом</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.CopyInfo" xml:space="preserve">Копировать информацию</x:String>
|
<x:String x:Key="Text.CommitCM.CopyInfo" xml:space="preserve">Копировать информацию</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.CopySHA" xml:space="preserve">Копировать SHA</x:String>
|
<x:String x:Key="Text.CommitCM.CopySHA" xml:space="preserve">Копировать SHA</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.CustomAction" xml:space="preserve">Пользовательское действие</x:String>
|
<x:String x:Key="Text.CommitCM.CustomAction" xml:space="preserve">Пользовательское действие</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.InteractiveRebase" xml:space="preserve">Интерактивное перемещение ${0}$ сюда</x:String>
|
<x:String x:Key="Text.CommitCM.InteractiveRebase" xml:space="preserve">Интерактивное перемещение (rebase -i) ${0}$ сюда</x:String>
|
||||||
|
<x:String x:Key="Text.CommitCM.Merge" xml:space="preserve">Влить в ${0}$</x:String>
|
||||||
|
<x:String x:Key="Text.CommitCM.MergeMultiple" xml:space="preserve">Влить ветки...</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.Rebase" xml:space="preserve">Переместить ${0}$ сюда</x:String>
|
<x:String x:Key="Text.CommitCM.Rebase" xml:space="preserve">Переместить ${0}$ сюда</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.Reset" xml:space="preserve">Сбросить ${0}$ сюда</x:String>
|
<x:String x:Key="Text.CommitCM.Reset" xml:space="preserve">Сбросить ${0}$ сюда</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.Revert" xml:space="preserve">Вернуть фиксацию</x:String>
|
<x:String x:Key="Text.CommitCM.Revert" xml:space="preserve">Отменить коммит</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.Reword" xml:space="preserve">Переформулировать</x:String>
|
<x:String x:Key="Text.CommitCM.Reword" xml:space="preserve">Изменить комментарий</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.SaveAsPatch" xml:space="preserve">Сохранить как исправление...</x:String>
|
<x:String x:Key="Text.CommitCM.SaveAsPatch" xml:space="preserve">Сохранить как patch-файл...</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.Squash" xml:space="preserve">Втиснуть в родительскую</x:String>
|
<x:String x:Key="Text.CommitCM.Squash" xml:space="preserve">Объединить с предыдущим коммитом</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.SquashCommitsSinceThis" xml:space="preserve">Втиснуть дочерную фиксацию сюда</x:String>
|
<x:String x:Key="Text.CommitCM.SquashCommitsSinceThis" xml:space="preserve">Объединить все следующие коммиты с этим</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Changes" xml:space="preserve">ИЗМЕНЕНИЯ</x:String>
|
<x:String x:Key="Text.CommitDetail.Changes" xml:space="preserve">ИЗМЕНЕНИЯ</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Changes.Search" xml:space="preserve">Найти изменения....</x:String>
|
<x:String x:Key="Text.CommitDetail.Changes.Search" xml:space="preserve">Найти изменения....</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Files" xml:space="preserve">ФАЙЛЫ</x:String>
|
<x:String x:Key="Text.CommitDetail.Files" xml:space="preserve">ФАЙЛЫ</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Files.LFS" xml:space="preserve">Файл ХБФ</x:String>
|
<x:String x:Key="Text.CommitDetail.Files.LFS" xml:space="preserve">Файл LFS</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Files.Search" xml:space="preserve">Поиск файлов...</x:String>
|
<x:String x:Key="Text.CommitDetail.Files.Search" xml:space="preserve">Поиск файлов...</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Files.Submodule" xml:space="preserve">Подмодуль</x:String>
|
<x:String x:Key="Text.CommitDetail.Files.Submodule" xml:space="preserve">Подмодуль</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Info" xml:space="preserve">ИНФОРМАЦИЯ</x:String>
|
<x:String x:Key="Text.CommitDetail.Info" xml:space="preserve">ИНФОРМАЦИЯ</x:String>
|
||||||
|
@ -131,8 +134,8 @@
|
||||||
<x:String x:Key="Text.CommitDetail.Info.Changed" xml:space="preserve">ИЗМЕНЁННЫЙ</x:String>
|
<x:String x:Key="Text.CommitDetail.Info.Changed" xml:space="preserve">ИЗМЕНЁННЫЙ</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Info.Children" xml:space="preserve">ДОЧЕРНИЙ</x:String>
|
<x:String x:Key="Text.CommitDetail.Info.Children" xml:space="preserve">ДОЧЕРНИЙ</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Info.Committer" xml:space="preserve">ИСПОЛНИТЕЛЬ</x:String>
|
<x:String x:Key="Text.CommitDetail.Info.Committer" xml:space="preserve">ИСПОЛНИТЕЛЬ</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Info.ContainsIn" xml:space="preserve">Проверить ссылки, содержащие эту фиксацию</x:String>
|
<x:String x:Key="Text.CommitDetail.Info.ContainsIn" xml:space="preserve">Найти все ветки с этим коммитом</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Info.ContainsIn.Title" xml:space="preserve">ФИКСАЦИЯ СОДЕРЖИТСЯ В</x:String>
|
<x:String x:Key="Text.CommitDetail.Info.ContainsIn.Title" xml:space="preserve">ВЕТКИ С ЭТИМ КОММИТОМ</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Info.GotoChangesPage" xml:space="preserve">Отображаются только первые 100 изменений. Смотрите все изменения на вкладке ИЗМЕНЕНИЯ.</x:String>
|
<x:String x:Key="Text.CommitDetail.Info.GotoChangesPage" xml:space="preserve">Отображаются только первые 100 изменений. Смотрите все изменения на вкладке ИЗМЕНЕНИЯ.</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Info.Message" xml:space="preserve">СООБЩЕНИЕ</x:String>
|
<x:String x:Key="Text.CommitDetail.Info.Message" xml:space="preserve">СООБЩЕНИЕ</x:String>
|
||||||
<x:String x:Key="Text.CommitDetail.Info.Parents" xml:space="preserve">РОДИТЕЛИ</x:String>
|
<x:String x:Key="Text.CommitDetail.Info.Parents" xml:space="preserve">РОДИТЕЛИ</x:String>
|
||||||
|
@ -142,25 +145,25 @@
|
||||||
<x:String x:Key="Text.CommitMessageTextBox.SubjectPlaceholder" xml:space="preserve">Введите тему фиксации</x:String>
|
<x:String x:Key="Text.CommitMessageTextBox.SubjectPlaceholder" xml:space="preserve">Введите тему фиксации</x:String>
|
||||||
<x:String x:Key="Text.CommitMessageTextBox.MessagePlaceholder" xml:space="preserve">Описание</x:String>
|
<x:String x:Key="Text.CommitMessageTextBox.MessagePlaceholder" xml:space="preserve">Описание</x:String>
|
||||||
<x:String x:Key="Text.Configure" xml:space="preserve">Настройка хранилища</x:String>
|
<x:String x:Key="Text.Configure" xml:space="preserve">Настройка хранилища</x:String>
|
||||||
<x:String x:Key="Text.Configure.CommitMessageTemplate" xml:space="preserve">ШАБЛОН ФИКСАЦИИ</x:String>
|
<x:String x:Key="Text.Configure.CommitMessageTemplate" xml:space="preserve">ШАБЛОН КОММИТА</x:String>
|
||||||
<x:String x:Key="Text.Configure.CommitMessageTemplate.Name" xml:space="preserve">Имя шаблона:</x:String>
|
<x:String x:Key="Text.Configure.CommitMessageTemplate.Name" xml:space="preserve">Название:</x:String>
|
||||||
<x:String x:Key="Text.Configure.CommitMessageTemplate.Content" xml:space="preserve">Шаблон содержания:</x:String>
|
<x:String x:Key="Text.Configure.CommitMessageTemplate.Content" xml:space="preserve">Cодержание:</x:String>
|
||||||
<x:String x:Key="Text.Configure.CustomAction" xml:space="preserve">ПОЛЬЗОВАТЕЛЬСКОЕ ДЕЙСТВИЕ</x:String>
|
<x:String x:Key="Text.Configure.CustomAction" xml:space="preserve">ПОЛЬЗОВАТЕЛЬСКОЕ ДЕЙСТВИЕ</x:String>
|
||||||
<x:String x:Key="Text.Configure.CustomAction.Arguments" xml:space="preserve">Аргументы:</x:String>
|
<x:String x:Key="Text.Configure.CustomAction.Arguments" xml:space="preserve">Аргументы:</x:String>
|
||||||
<x:String x:Key="Text.Configure.CustomAction.Arguments.Tip" xml:space="preserve">${REPO} - Путь хранилища; ${SHA} - Выбранные фиксации SHA</x:String>
|
<x:String x:Key="Text.Configure.CustomAction.Arguments.Tip" xml:space="preserve">${REPO} - Путь к репозиторию; ${SHA} - SHA коммитов</x:String>
|
||||||
<x:String x:Key="Text.Configure.CustomAction.Executable" xml:space="preserve">Исполняемый фалй:</x:String>
|
<x:String x:Key="Text.Configure.CustomAction.Executable" xml:space="preserve">Исполняемый файл:</x:String>
|
||||||
<x:String x:Key="Text.Configure.CustomAction.Name" xml:space="preserve">Имя:</x:String>
|
<x:String x:Key="Text.Configure.CustomAction.Name" xml:space="preserve">Имя:</x:String>
|
||||||
<x:String x:Key="Text.Configure.CustomAction.Scope" xml:space="preserve">Диапазон:</x:String>
|
<x:String x:Key="Text.Configure.CustomAction.Scope" xml:space="preserve">Диапазон:</x:String>
|
||||||
<x:String x:Key="Text.Configure.CustomAction.Scope.Commit" xml:space="preserve">Фиксация</x:String>
|
<x:String x:Key="Text.Configure.CustomAction.Scope.Commit" xml:space="preserve">Коммит</x:String>
|
||||||
<x:String x:Key="Text.Configure.CustomAction.Scope.Repository" xml:space="preserve">Хранилище</x:String>
|
<x:String x:Key="Text.Configure.CustomAction.Scope.Repository" xml:space="preserve">Репозиторий</x:String>
|
||||||
<x:String x:Key="Text.Configure.Email" xml:space="preserve">Адрес электронной почты</x:String>
|
<x:String x:Key="Text.Configure.Email" xml:space="preserve">Адрес электронной почты</x:String>
|
||||||
<x:String x:Key="Text.Configure.Email.Placeholder" xml:space="preserve">Адрес электронной почты</x:String>
|
<x:String x:Key="Text.Configure.Email.Placeholder" xml:space="preserve">Адрес электронной почты</x:String>
|
||||||
<x:String x:Key="Text.Configure.Git" xml:space="preserve">GIT</x:String>
|
<x:String x:Key="Text.Configure.Git" xml:space="preserve">GIT</x:String>
|
||||||
<x:String x:Key="Text.Configure.Git.AutoFetch" xml:space="preserve">Автоматическое извлечение внешних хранилищ</x:String>
|
<x:String x:Key="Text.Configure.Git.AutoFetch" xml:space="preserve">Автоматическое скачивание изменений</x:String>
|
||||||
<x:String x:Key="Text.Configure.Git.AutoFetchIntervalSuffix" xml:space="preserve">Минут(а/ы)</x:String>
|
<x:String x:Key="Text.Configure.Git.AutoFetchIntervalSuffix" xml:space="preserve">Минут(а/ы)</x:String>
|
||||||
<x:String x:Key="Text.Configure.Git.EnableSignOff" xml:space="preserve">Разрешить --signoff для фиксации</x:String>
|
<x:String x:Key="Text.Configure.Git.EnableSignOff" xml:space="preserve">Разрешить --signoff для коммита</x:String>
|
||||||
<x:String x:Key="Text.Configure.Git.DefaultRemote" xml:space="preserve">Удалённое хранилище по-умолчанию</x:String>
|
<x:String x:Key="Text.Configure.Git.DefaultRemote" xml:space="preserve">Удалённое хранилище по-умолчанию</x:String>
|
||||||
<x:String x:Key="Text.Configure.Git.EnablePruneOnFetch" xml:space="preserve">Разрешить --prune при извлечении</x:String>
|
<x:String x:Key="Text.Configure.Git.EnablePruneOnFetch" xml:space="preserve">Разрешить --prune при скачивании</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker" xml:space="preserve">ОТСЛЕЖИВАНИЕ ПРОБЛЕМ</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker" xml:space="preserve">ОТСЛЕЖИВАНИЕ ПРОБЛЕМ</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGithub" xml:space="preserve">Добавить пример правила для Git</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleGithub" xml:space="preserve">Добавить пример правила для Git</x:String>
|
||||||
<x:String x:Key="Text.Configure.IssueTracker.AddSampleJira" xml:space="preserve">Добавить пример правила Jira</x:String>
|
<x:String x:Key="Text.Configure.IssueTracker.AddSampleJira" xml:space="preserve">Добавить пример правила Jira</x:String>
|
||||||
|
@ -227,7 +230,7 @@
|
||||||
<x:String x:Key="Text.DeleteRemote.Remote" xml:space="preserve">Внешнее хранилище:</x:String>
|
<x:String x:Key="Text.DeleteRemote.Remote" xml:space="preserve">Внешнее хранилище:</x:String>
|
||||||
<x:String x:Key="Text.DeleteRepositoryNode.Target" xml:space="preserve">Цель:</x:String>
|
<x:String x:Key="Text.DeleteRepositoryNode.Target" xml:space="preserve">Цель:</x:String>
|
||||||
<x:String x:Key="Text.DeleteRepositoryNode.TitleForGroup" xml:space="preserve">Подтвердите удаление группы</x:String>
|
<x:String x:Key="Text.DeleteRepositoryNode.TitleForGroup" xml:space="preserve">Подтвердите удаление группы</x:String>
|
||||||
<x:String x:Key="Text.DeleteRepositoryNode.TitleForRepository" xml:space="preserve">Подтвердите удаление хранилища</x:String>
|
<x:String x:Key="Text.DeleteRepositoryNode.TitleForRepository" xml:space="preserve">Подтвердите удаление репозитория</x:String>
|
||||||
<x:String x:Key="Text.DeleteSubmodule" xml:space="preserve">Удалить подмодуль</x:String>
|
<x:String x:Key="Text.DeleteSubmodule" xml:space="preserve">Удалить подмодуль</x:String>
|
||||||
<x:String x:Key="Text.DeleteSubmodule.Path" xml:space="preserve">Путь подмодуля:</x:String>
|
<x:String x:Key="Text.DeleteSubmodule.Path" xml:space="preserve">Путь подмодуля:</x:String>
|
||||||
<x:String x:Key="Text.DeleteTag" xml:space="preserve">Удалить метку</x:String>
|
<x:String x:Key="Text.DeleteTag" xml:space="preserve">Удалить метку</x:String>
|
||||||
|
@ -253,9 +256,9 @@
|
||||||
<x:String x:Key="Text.Diff.ToggleWordWrap" xml:space="preserve">Перенос слов в строке</x:String>
|
<x:String x:Key="Text.Diff.ToggleWordWrap" xml:space="preserve">Перенос слов в строке</x:String>
|
||||||
<x:String x:Key="Text.Diff.UseBlockNavigation" xml:space="preserve">Разрешить навигацию по блокам</x:String>
|
<x:String x:Key="Text.Diff.UseBlockNavigation" xml:space="preserve">Разрешить навигацию по блокам</x:String>
|
||||||
<x:String x:Key="Text.Diff.UseMerger" xml:space="preserve">Открыть в инструменте слияния </x:String>
|
<x:String x:Key="Text.Diff.UseMerger" xml:space="preserve">Открыть в инструменте слияния </x:String>
|
||||||
<x:String x:Key="Text.Diff.VisualLines.All" xml:space="preserve">Показывать все линии</x:String>
|
<x:String x:Key="Text.Diff.VisualLines.All" xml:space="preserve">Показывать все строки</x:String>
|
||||||
<x:String x:Key="Text.Diff.VisualLines.Decr" xml:space="preserve">Уменьшить количество видимых линий</x:String>
|
<x:String x:Key="Text.Diff.VisualLines.Decr" xml:space="preserve">Уменьшить количество видимых строк</x:String>
|
||||||
<x:String x:Key="Text.Diff.VisualLines.Incr" xml:space="preserve">Увеличить количество видимых линий</x:String>
|
<x:String x:Key="Text.Diff.VisualLines.Incr" xml:space="preserve">Увеличить количество видимых строк</x:String>
|
||||||
<x:String x:Key="Text.Diff.Welcome" xml:space="preserve">ВЫБРАТЬ ФАЙЛ ДЛЯ ПРОСМОТРА ИЗМЕНЕНИЙ</x:String>
|
<x:String x:Key="Text.Diff.Welcome" xml:space="preserve">ВЫБРАТЬ ФАЙЛ ДЛЯ ПРОСМОТРА ИЗМЕНЕНИЙ</x:String>
|
||||||
<x:String x:Key="Text.DiffWithMerger" xml:space="preserve">Открыть в инструменте слияния</x:String>
|
<x:String x:Key="Text.DiffWithMerger" xml:space="preserve">Открыть в инструменте слияния</x:String>
|
||||||
<x:String x:Key="Text.Discard" xml:space="preserve">Отклонить изменения</x:String>
|
<x:String x:Key="Text.Discard" xml:space="preserve">Отклонить изменения</x:String>
|
||||||
|
@ -281,9 +284,10 @@
|
||||||
<x:String x:Key="Text.FileCM.AssumeUnchanged" xml:space="preserve">Допустить без изменений</x:String>
|
<x:String x:Key="Text.FileCM.AssumeUnchanged" xml:space="preserve">Допустить без изменений</x:String>
|
||||||
<x:String x:Key="Text.FileCM.Discard" xml:space="preserve">Отклонить...</x:String>
|
<x:String x:Key="Text.FileCM.Discard" xml:space="preserve">Отклонить...</x:String>
|
||||||
<x:String x:Key="Text.FileCM.DiscardMulti" xml:space="preserve">Отклонить {0} файлов...</x:String>
|
<x:String x:Key="Text.FileCM.DiscardMulti" xml:space="preserve">Отклонить {0} файлов...</x:String>
|
||||||
<x:String x:Key="Text.FileCM.DiscardSelectedLines" xml:space="preserve">Отклонить изменения в выбранной(ых) строке(ах)</x:String>
|
<x:String x:Key="Text.FileCM.DiscardSelectedLines" xml:space="preserve">Отменить изменения в выбранной(ых) строке(ах)</x:String>
|
||||||
<x:String x:Key="Text.FileCM.OpenWithExternalMerger" xml:space="preserve">Открыть расширенный инструмент слияния</x:String>
|
<x:String x:Key="Text.FileCM.OpenWithExternalMerger" xml:space="preserve">Открыть расширенный инструмент слияния</x:String>
|
||||||
<x:String x:Key="Text.FileCM.SaveAsPatch" xml:space="preserve">Сохранить как исправление...</x:String>
|
<x:String x:Key="Text.FileCM.ResolveUsing" xml:space="preserve">Взять версию ${0}$</x:String>
|
||||||
|
<x:String x:Key="Text.FileCM.SaveAsPatch" xml:space="preserve">Сохранить как patch-файл...</x:String>
|
||||||
<x:String x:Key="Text.FileCM.Stage" xml:space="preserve">Подготовить</x:String>
|
<x:String x:Key="Text.FileCM.Stage" xml:space="preserve">Подготовить</x:String>
|
||||||
<x:String x:Key="Text.FileCM.StageMulti" xml:space="preserve">Подготовленные {0} файлы</x:String>
|
<x:String x:Key="Text.FileCM.StageMulti" xml:space="preserve">Подготовленные {0} файлы</x:String>
|
||||||
<x:String x:Key="Text.FileCM.StageSelectedLines" xml:space="preserve">Подготовленные изменения в выбранной(ых) строке(ах)</x:String>
|
<x:String x:Key="Text.FileCM.StageSelectedLines" xml:space="preserve">Подготовленные изменения в выбранной(ых) строке(ах)</x:String>
|
||||||
|
@ -360,11 +364,12 @@
|
||||||
<x:String x:Key="Text.Histories.Tips.Prefix" xml:space="preserve">ПОДСКАЗКИ:</x:String>
|
<x:String x:Key="Text.Histories.Tips.Prefix" xml:space="preserve">ПОДСКАЗКИ:</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys" xml:space="preserve">Ссылка на сочетания клавиш</x:String>
|
<x:String x:Key="Text.Hotkeys" xml:space="preserve">Ссылка на сочетания клавиш</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global" xml:space="preserve">ОБЩЕЕ</x:String>
|
<x:String x:Key="Text.Hotkeys.Global" xml:space="preserve">ОБЩЕЕ</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.CancelPopup" xml:space="preserve">Отменить текущее всплывающее окно</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.CancelPopup" xml:space="preserve">Закрыть окно</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.CloseTab" xml:space="preserve">Закрыть текущее окно</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.Clone" xml:space="preserve">Клонировать репозиторий</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.GotoPrevTab" xml:space="preserve">Перейти на предыдущую страницу</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.CloseTab" xml:space="preserve">Закрыть вкладку</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.GotoNextTab" xml:space="preserve">Перейти на следующую страницу</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.GotoPrevTab" xml:space="preserve">Перейти на предыдущую вкладку</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.NewTab" xml:space="preserve">Создать новую страницу</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.GotoNextTab" xml:space="preserve">Перейти на следующую вкладку</x:String>
|
||||||
|
<x:String x:Key="Text.Hotkeys.Global.NewTab" xml:space="preserve">Создать новую вкладку</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Global.OpenPreference" xml:space="preserve">Открыть диалоговое окно настроек</x:String>
|
<x:String x:Key="Text.Hotkeys.Global.OpenPreference" xml:space="preserve">Открыть диалоговое окно настроек</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo" xml:space="preserve">ХРАНИЛИЩЕ</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo" xml:space="preserve">ХРАНИЛИЩЕ</x:String>
|
||||||
<x:String x:Key="Text.Hotkeys.Repo.Commit" xml:space="preserve">Зафиксировать подготовленные изменения</x:String>
|
<x:String x:Key="Text.Hotkeys.Repo.Commit" xml:space="preserve">Зафиксировать подготовленные изменения</x:String>
|
||||||
|
@ -392,10 +397,14 @@
|
||||||
<x:String x:Key="Text.Hunk.Discard" xml:space="preserve">Отклонить</x:String>
|
<x:String x:Key="Text.Hunk.Discard" xml:space="preserve">Отклонить</x:String>
|
||||||
<x:String x:Key="Text.Init" xml:space="preserve">Инициализировать хранилище</x:String>
|
<x:String x:Key="Text.Init" xml:space="preserve">Инициализировать хранилище</x:String>
|
||||||
<x:String x:Key="Text.Init.Path" xml:space="preserve">Путь:</x:String>
|
<x:String x:Key="Text.Init.Path" xml:space="preserve">Путь:</x:String>
|
||||||
<x:String x:Key="Text.InProgress.CherryPick" xml:space="preserve">Выполняется частичный забор.</x:String>
|
<x:String x:Key="Text.InProgress.CherryPick" xml:space="preserve">Выполняется частичный перенос коммитов (cherry-pick).</x:String>
|
||||||
<x:String x:Key="Text.InProgress.Merge" xml:space="preserve">Выполняет запрос слияния.</x:String>
|
<x:String x:Key="Text.InProgress.CherryPick.Head" xml:space="preserve">Обрабтка коммита.</x:String>
|
||||||
|
<x:String x:Key="Text.InProgress.Merge" xml:space="preserve">Выполняется слияние.</x:String>
|
||||||
|
<x:String x:Key="Text.InProgress.Merge.Operating" xml:space="preserve">Работаем.</x:String>
|
||||||
<x:String x:Key="Text.InProgress.Rebase" xml:space="preserve">Выполняется перенос.</x:String>
|
<x:String x:Key="Text.InProgress.Rebase" xml:space="preserve">Выполняется перенос.</x:String>
|
||||||
<x:String x:Key="Text.InProgress.Revert" xml:space="preserve">Выполняется возврат.</x:String>
|
<x:String x:Key="Text.InProgress.Rebase.StoppedAt" xml:space="preserve">Остановлен на</x:String>
|
||||||
|
<x:String x:Key="Text.InProgress.Revert" xml:space="preserve">Выполняется отмена коммита.</x:String>
|
||||||
|
<x:String x:Key="Text.InProgress.Revert.Head" xml:space="preserve">Выполняется отмена</x:String>
|
||||||
<x:String x:Key="Text.InteractiveRebase" xml:space="preserve">Интерактивное перемещение</x:String>
|
<x:String x:Key="Text.InteractiveRebase" xml:space="preserve">Интерактивное перемещение</x:String>
|
||||||
<x:String x:Key="Text.InteractiveRebase.Target" xml:space="preserve">Целевая ветка:</x:String>
|
<x:String x:Key="Text.InteractiveRebase.Target" xml:space="preserve">Целевая ветка:</x:String>
|
||||||
<x:String x:Key="Text.InteractiveRebase.On" xml:space="preserve">На:</x:String>
|
<x:String x:Key="Text.InteractiveRebase.On" xml:space="preserve">На:</x:String>
|
||||||
|
@ -403,11 +412,16 @@
|
||||||
<x:String x:Key="Text.IssueLinkCM.CopyLink" xml:space="preserve">Копировать ссылку</x:String>
|
<x:String x:Key="Text.IssueLinkCM.CopyLink" xml:space="preserve">Копировать ссылку</x:String>
|
||||||
<x:String x:Key="Text.Launcher.Error" xml:space="preserve">ОШИБКА</x:String>
|
<x:String x:Key="Text.Launcher.Error" xml:space="preserve">ОШИБКА</x:String>
|
||||||
<x:String x:Key="Text.Launcher.Info" xml:space="preserve">УВЕДОМЛЕНИЕ</x:String>
|
<x:String x:Key="Text.Launcher.Info" xml:space="preserve">УВЕДОМЛЕНИЕ</x:String>
|
||||||
<x:String x:Key="Text.Merge" xml:space="preserve">Слить ветку</x:String>
|
<x:String x:Key="Text.Merge" xml:space="preserve">Влить ветку</x:String>
|
||||||
<x:String x:Key="Text.Merge.Into" xml:space="preserve">В:</x:String>
|
<x:String x:Key="Text.Merge.Into" xml:space="preserve">В:</x:String>
|
||||||
<x:String x:Key="Text.Merge.Mode" xml:space="preserve">Опции слияния:</x:String>
|
<x:String x:Key="Text.Merge.Mode" xml:space="preserve">Опции слияния:</x:String>
|
||||||
<x:String x:Key="Text.MoveRepositoryNode" xml:space="preserve">Переместить узел хранилища</x:String>
|
<x:String x:Key="Text.Merge.Source" xml:space="preserve">Источник:</x:String>
|
||||||
<x:String x:Key="Text.MoveRepositoryNode.Target" xml:space="preserve">Выбрать родительский узел для:</x:String>
|
<x:String x:Key="Text.MergeMultiple" xml:space="preserve">Влить несколько веток</x:String>
|
||||||
|
<x:String x:Key="Text.MergeMultiple.CommitChanges" xml:space="preserve">Зафиксировать все изменения</x:String>
|
||||||
|
<x:String x:Key="Text.MergeMultiple.Strategy" xml:space="preserve">Стратегия:</x:String>
|
||||||
|
<x:String x:Key="Text.MergeMultiple.Targets" xml:space="preserve">Цели:</x:String>
|
||||||
|
<x:String x:Key="Text.MoveRepositoryNode" xml:space="preserve">Переместить репозиторий в другую группу</x:String>
|
||||||
|
<x:String x:Key="Text.MoveRepositoryNode.Target" xml:space="preserve">Выбрать группу для:</x:String>
|
||||||
<x:String x:Key="Text.Name" xml:space="preserve">Имя:</x:String>
|
<x:String x:Key="Text.Name" xml:space="preserve">Имя:</x:String>
|
||||||
<x:String x:Key="Text.NotConfigured" xml:space="preserve">Git НЕ был настроен. Пожалуйста, перейдите в [Настройки] и сначала настройте его.</x:String>
|
<x:String x:Key="Text.NotConfigured" xml:space="preserve">Git НЕ был настроен. Пожалуйста, перейдите в [Настройки] и сначала настройте его.</x:String>
|
||||||
<x:String x:Key="Text.OpenAppDataDir" xml:space="preserve">Открыть приложение каталогов данных</x:String>
|
<x:String x:Key="Text.OpenAppDataDir" xml:space="preserve">Открыть приложение каталогов данных</x:String>
|
||||||
|
@ -453,13 +467,13 @@
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Path" xml:space="preserve">Путь установки</x:String>
|
<x:String x:Key="Text.Preference.DiffMerge.Path" xml:space="preserve">Путь установки</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Path.Placeholder" xml:space="preserve">Введите путь для инструмента различия/слияния</x:String>
|
<x:String x:Key="Text.Preference.DiffMerge.Path.Placeholder" xml:space="preserve">Введите путь для инструмента различия/слияния</x:String>
|
||||||
<x:String x:Key="Text.Preference.DiffMerge.Type" xml:space="preserve">Инструмент</x:String>
|
<x:String x:Key="Text.Preference.DiffMerge.Type" xml:space="preserve">Инструмент</x:String>
|
||||||
<x:String x:Key="Text.Preference.General" xml:space="preserve">ГЛАВНЫЙ</x:String>
|
<x:String x:Key="Text.Preference.General" xml:space="preserve">ОСНОВНЫЕ</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.Check4UpdatesOnStartup" xml:space="preserve">Проверить обновления при старте</x:String>
|
<x:String x:Key="Text.Preference.General.Check4UpdatesOnStartup" xml:space="preserve">Проверить обновления при старте</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.Locale" xml:space="preserve">Язык</x:String>
|
<x:String x:Key="Text.Preference.General.Locale" xml:space="preserve">Язык</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.MaxHistoryCommits" xml:space="preserve">История фиксаций</x:String>
|
<x:String x:Key="Text.Preference.General.MaxHistoryCommits" xml:space="preserve">Максимальная длина истории</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.ShowAuthorTime" xml:space="preserve">Показывать время автора вместо времени фиксации на графике</x:String>
|
<x:String x:Key="Text.Preference.General.ShowAuthorTime" xml:space="preserve">Показывать время автора вместо времени коммита на графике</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.ShowChildren" xml:space="preserve">Показать наследника в деталях комментария</x:String>
|
<x:String x:Key="Text.Preference.General.ShowChildren" xml:space="preserve">Показать наследника в деталях комментария</x:String>
|
||||||
<x:String x:Key="Text.Preference.General.SubjectGuideLength" xml:space="preserve">Длина темы фиксации</x:String>
|
<x:String x:Key="Text.Preference.General.SubjectGuideLength" xml:space="preserve">Длина темы коммита</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git" xml:space="preserve">GIT</x:String>
|
<x:String x:Key="Text.Preference.Git" xml:space="preserve">GIT</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.CRLF" xml:space="preserve">Включить автозавершение CRLF</x:String>
|
<x:String x:Key="Text.Preference.Git.CRLF" xml:space="preserve">Включить автозавершение CRLF</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.DefaultCloneDir" xml:space="preserve">Каталог клонирования по-умолчанию</x:String>
|
<x:String x:Key="Text.Preference.Git.DefaultCloneDir" xml:space="preserve">Каталог клонирования по-умолчанию</x:String>
|
||||||
|
@ -572,26 +586,27 @@
|
||||||
<x:String x:Key="Text.Repository.Search.ByUser" xml:space="preserve">Автор и исполнитель</x:String>
|
<x:String x:Key="Text.Repository.Search.ByUser" xml:space="preserve">Автор и исполнитель</x:String>
|
||||||
<x:String x:Key="Text.Repository.Search.InCurrentBranch" xml:space="preserve">Текущая ветка</x:String>
|
<x:String x:Key="Text.Repository.Search.InCurrentBranch" xml:space="preserve">Текущая ветка</x:String>
|
||||||
<x:String x:Key="Text.Repository.ShowTagsAsTree" xml:space="preserve">Показывать метки как дерево</x:String>
|
<x:String x:Key="Text.Repository.ShowTagsAsTree" xml:space="preserve">Показывать метки как дерево</x:String>
|
||||||
<x:String x:Key="Text.Repository.Statistics" xml:space="preserve">Статистики </x:String>
|
<x:String x:Key="Text.Repository.Skip" xml:space="preserve">ПРОПУСТИТЬ</x:String>
|
||||||
|
<x:String x:Key="Text.Repository.Statistics" xml:space="preserve">Статистикa </x:String>
|
||||||
<x:String x:Key="Text.Repository.Submodules" xml:space="preserve">ПОДМОДУЛИ</x:String>
|
<x:String x:Key="Text.Repository.Submodules" xml:space="preserve">ПОДМОДУЛИ</x:String>
|
||||||
<x:String x:Key="Text.Repository.Submodules.Add" xml:space="preserve">ДОБАВИТЬ ПОДМОДУЛЬ</x:String>
|
<x:String x:Key="Text.Repository.Submodules.Add" xml:space="preserve">ДОБАВИТЬ ПОДМОДУЛЬ</x:String>
|
||||||
<x:String x:Key="Text.Repository.Submodules.Update" xml:space="preserve">ОБНОВИТЬ ПОДМОДУЛЬ</x:String>
|
<x:String x:Key="Text.Repository.Submodules.Update" xml:space="preserve">ОБНОВИТЬ ПОДМОДУЛЬ</x:String>
|
||||||
<x:String x:Key="Text.Repository.Tags" xml:space="preserve">МЕТКИ</x:String>
|
<x:String x:Key="Text.Repository.Tags" xml:space="preserve">МЕТКИ</x:String>
|
||||||
<x:String x:Key="Text.Repository.Tags.Add" xml:space="preserve">НОВАЯ МЕТКА</x:String>
|
<x:String x:Key="Text.Repository.Tags.Add" xml:space="preserve">НОВАЯ МЕТКА</x:String>
|
||||||
<x:String x:Key="Text.Repository.Terminal" xml:space="preserve">Открыть в терминале</x:String>
|
<x:String x:Key="Text.Repository.Terminal" xml:space="preserve">Открыть в терминале</x:String>
|
||||||
<x:String x:Key="Text.Repository.Worktrees" xml:space="preserve">РАБОЧИЕ ДЕРЕВЬЯ</x:String>
|
<x:String x:Key="Text.Repository.Worktrees" xml:space="preserve">РАБОЧИЕ КАТАЛОГИ</x:String>
|
||||||
<x:String x:Key="Text.Repository.Worktrees.Add" xml:space="preserve">ДОБАВИТЬ РАБОЧЕЕ ДЕРЕВО</x:String>
|
<x:String x:Key="Text.Repository.Worktrees.Add" xml:space="preserve">ДОБАВИТЬ РАБОЧИЙ КАТАЛОГ</x:String>
|
||||||
<x:String x:Key="Text.Repository.Worktrees.Prune" xml:space="preserve">ОБРЕЗАТЬ</x:String>
|
<x:String x:Key="Text.Repository.Worktrees.Prune" xml:space="preserve">ОБРЕЗАТЬ</x:String>
|
||||||
<x:String x:Key="Text.RepositoryURL" xml:space="preserve">Адрес хранилища Git</x:String>
|
<x:String x:Key="Text.RepositoryURL" xml:space="preserve">Адрес репозитория Git</x:String>
|
||||||
<x:String x:Key="Text.Reset" xml:space="preserve">Сбросить текущую втеку до версии</x:String>
|
<x:String x:Key="Text.Reset" xml:space="preserve">Сбросить текущую втеку до версии</x:String>
|
||||||
<x:String x:Key="Text.Reset.Mode" xml:space="preserve">Режим сброса:</x:String>
|
<x:String x:Key="Text.Reset.Mode" xml:space="preserve">Режим сброса:</x:String>
|
||||||
<x:String x:Key="Text.Reset.MoveTo" xml:space="preserve">Переместить в:</x:String>
|
<x:String x:Key="Text.Reset.MoveTo" xml:space="preserve">Переместить в:</x:String>
|
||||||
<x:String x:Key="Text.Reset.Target" xml:space="preserve">Текущая ветка:</x:String>
|
<x:String x:Key="Text.Reset.Target" xml:space="preserve">Текущая ветка:</x:String>
|
||||||
<x:String x:Key="Text.RevealFile" xml:space="preserve">Открыть в файловом менеджере</x:String>
|
<x:String x:Key="Text.RevealFile" xml:space="preserve">Открыть в файловом менеджере</x:String>
|
||||||
<x:String x:Key="Text.Revert" xml:space="preserve">Отменить фиксацию</x:String>
|
<x:String x:Key="Text.Revert" xml:space="preserve">Отменить коммит</x:String>
|
||||||
<x:String x:Key="Text.Revert.Commit" xml:space="preserve">Фиксация:</x:String>
|
<x:String x:Key="Text.Revert.Commit" xml:space="preserve">Коммит:</x:String>
|
||||||
<x:String x:Key="Text.Revert.CommitChanges" xml:space="preserve">Отмена изменений фиксации</x:String>
|
<x:String x:Key="Text.Revert.CommitChanges" xml:space="preserve">Отмена коммита</x:String>
|
||||||
<x:String x:Key="Text.Reword" xml:space="preserve">Переформулировать сообщение фиксации</x:String>
|
<x:String x:Key="Text.Reword" xml:space="preserve">Переформулировать сообщение коммита</x:String>
|
||||||
<x:String x:Key="Text.Reword.Tip" xml:space="preserve">Использовать «Shift+Enter» для ввода новой строки. «Enter» - это горячая клавиша кнопки OK</x:String>
|
<x:String x:Key="Text.Reword.Tip" xml:space="preserve">Использовать «Shift+Enter» для ввода новой строки. «Enter» - это горячая клавиша кнопки OK</x:String>
|
||||||
<x:String x:Key="Text.Running" xml:space="preserve">Запуск. Подождите пожалуйста...</x:String>
|
<x:String x:Key="Text.Running" xml:space="preserve">Запуск. Подождите пожалуйста...</x:String>
|
||||||
<x:String x:Key="Text.Save" xml:space="preserve">СОХРАНИТЬ</x:String>
|
<x:String x:Key="Text.Save" xml:space="preserve">СОХРАНИТЬ</x:String>
|
||||||
|
|
|
@ -276,7 +276,7 @@
|
||||||
<x:String x:Key="Text.FastForwardWithoutCheck" xml:space="preserve">快进(fast-forward,无需checkout)</x:String>
|
<x:String x:Key="Text.FastForwardWithoutCheck" xml:space="preserve">快进(fast-forward,无需checkout)</x:String>
|
||||||
<x:String x:Key="Text.Fetch" xml:space="preserve">拉取(fetch)</x:String>
|
<x:String x:Key="Text.Fetch" xml:space="preserve">拉取(fetch)</x:String>
|
||||||
<x:String x:Key="Text.Fetch.AllRemotes" xml:space="preserve">拉取所有的远程仓库</x:String>
|
<x:String x:Key="Text.Fetch.AllRemotes" xml:space="preserve">拉取所有的远程仓库</x:String>
|
||||||
<x:String x:Key="Text.Fetch.Force" xml:space="preserve">启用 --force 选项</x:String>
|
<x:String x:Key="Text.Fetch.Force" xml:space="preserve">覆盖REF检查</x:String>
|
||||||
<x:String x:Key="Text.Fetch.NoTags" xml:space="preserve">不拉取远程标签</x:String>
|
<x:String x:Key="Text.Fetch.NoTags" xml:space="preserve">不拉取远程标签</x:String>
|
||||||
<x:String x:Key="Text.Fetch.Remote" xml:space="preserve">远程仓库 :</x:String>
|
<x:String x:Key="Text.Fetch.Remote" xml:space="preserve">远程仓库 :</x:String>
|
||||||
<x:String x:Key="Text.Fetch.Title" xml:space="preserve">拉取远程仓库内容</x:String>
|
<x:String x:Key="Text.Fetch.Title" xml:space="preserve">拉取远程仓库内容</x:String>
|
||||||
|
|
|
@ -276,7 +276,7 @@
|
||||||
<x:String x:Key="Text.FastForwardWithoutCheck" xml:space="preserve">快進 (fast-forward,無需 checkout)</x:String>
|
<x:String x:Key="Text.FastForwardWithoutCheck" xml:space="preserve">快進 (fast-forward,無需 checkout)</x:String>
|
||||||
<x:String x:Key="Text.Fetch" xml:space="preserve">提取 (fetch)</x:String>
|
<x:String x:Key="Text.Fetch" xml:space="preserve">提取 (fetch)</x:String>
|
||||||
<x:String x:Key="Text.Fetch.AllRemotes" xml:space="preserve">提取所有的遠端存放庫</x:String>
|
<x:String x:Key="Text.Fetch.AllRemotes" xml:space="preserve">提取所有的遠端存放庫</x:String>
|
||||||
<x:String x:Key="Text.Fetch.Force" xml:space="preserve">啟用 [--force] 選項</x:String>
|
<x:String x:Key="Text.Fetch.Force" xml:space="preserve">覆寫 REFs 檢查</x:String>
|
||||||
<x:String x:Key="Text.Fetch.NoTags" xml:space="preserve">不提取遠端標籤</x:String>
|
<x:String x:Key="Text.Fetch.NoTags" xml:space="preserve">不提取遠端標籤</x:String>
|
||||||
<x:String x:Key="Text.Fetch.Remote" xml:space="preserve">遠端存放庫:</x:String>
|
<x:String x:Key="Text.Fetch.Remote" xml:space="preserve">遠端存放庫:</x:String>
|
||||||
<x:String x:Key="Text.Fetch.Title" xml:space="preserve">提取遠端存放庫內容</x:String>
|
<x:String x:Key="Text.Fetch.Title" xml:space="preserve">提取遠端存放庫內容</x:String>
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
xmlns:vm="using:SourceGit.ViewModels"
|
xmlns:vm="using:SourceGit.ViewModels"
|
||||||
xmlns:c="using:SourceGit.Converters"
|
xmlns:c="using:SourceGit.Converters"
|
||||||
xmlns:ae="using:AvaloniaEdit"
|
xmlns:ae="using:AvaloniaEdit"
|
||||||
|
xmlns:aee="using:AvaloniaEdit.Editing"
|
||||||
xmlns:aes="using:AvaloniaEdit.Search">
|
xmlns:aes="using:AvaloniaEdit.Search">
|
||||||
<Design.PreviewWith>
|
<Design.PreviewWith>
|
||||||
<StackPanel Orientation="Vertical">
|
<StackPanel Orientation="Vertical">
|
||||||
|
@ -580,6 +581,19 @@
|
||||||
</Style>
|
</Style>
|
||||||
</Style>
|
</Style>
|
||||||
|
|
||||||
|
<Style Selector="aee|TextArea">
|
||||||
|
<Setter Property="SelectionBorder">
|
||||||
|
<Setter.Value>
|
||||||
|
<Pen Brush="{DynamicResource SystemAccentColor}" Thickness="1" />
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
<Setter Property="SelectionBrush">
|
||||||
|
<Setter.Value>
|
||||||
|
<SolidColorBrush Opacity="0.5" Color="{DynamicResource SystemAccentColor}" />
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
|
||||||
<Style Selector="aes|SearchPanel">
|
<Style Selector="aes|SearchPanel">
|
||||||
<Setter Property="Template">
|
<Setter Property="Template">
|
||||||
<ControlTemplate TargetType="aes:SearchPanel">
|
<ControlTemplate TargetType="aes:SearchPanel">
|
||||||
|
|
|
@ -20,12 +20,16 @@
|
||||||
<RepositoryType>Public</RepositoryType>
|
<RepositoryType>Public</RepositoryType>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Condition="'$(Configuration)' == 'Release' and '$(SourceGitNoAot)' != 'true'">
|
<PropertyGroup Condition="'$(DisableAOT)' != 'true'">
|
||||||
<PublishAot>true</PublishAot>
|
<PublishAot>true</PublishAot>
|
||||||
<PublishTrimmed>true</PublishTrimmed>
|
<PublishTrimmed>true</PublishTrimmed>
|
||||||
<TrimMode>link</TrimMode>
|
<TrimMode>link</TrimMode>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup Condition="'$(DisableUpdateDetection)' == 'true'">
|
||||||
|
<DefineConstants>$(DefineConstants);DISABLE_UPDATE_DETECTION</DefineConstants>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<AvaloniaResource Include="App.ico" />
|
<AvaloniaResource Include="App.ico" />
|
||||||
<AvaloniaResource Include="Resources/Fonts/*" />
|
<AvaloniaResource Include="Resources/Fonts/*" />
|
||||||
|
@ -37,17 +41,17 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Avalonia" Version="11.2.2" />
|
<PackageReference Include="Avalonia" Version="11.2.3" />
|
||||||
<PackageReference Include="Avalonia.Desktop" Version="11.2.2" />
|
<PackageReference Include="Avalonia.Desktop" Version="11.2.3" />
|
||||||
<PackageReference Include="Avalonia.Fonts.Inter" Version="11.2.2" />
|
<PackageReference Include="Avalonia.Fonts.Inter" Version="11.2.3" />
|
||||||
<PackageReference Include="Avalonia.Themes.Fluent" Version="11.2.2" />
|
<PackageReference Include="Avalonia.Themes.Fluent" Version="11.2.3" />
|
||||||
<PackageReference Include="Avalonia.Diagnostics" Version="11.2.2" Condition="'$(Configuration)' == 'Debug'" />
|
<PackageReference Include="Avalonia.Diagnostics" Version="11.2.3" Condition="'$(Configuration)' == 'Debug'" />
|
||||||
<PackageReference Include="Avalonia.AvaloniaEdit" Version="11.1.0" />
|
<PackageReference Include="Avalonia.AvaloniaEdit" Version="11.1.0" />
|
||||||
<PackageReference Include="AvaloniaEdit.TextMate" Version="11.1.0" />
|
<PackageReference Include="AvaloniaEdit.TextMate" Version="11.1.0" />
|
||||||
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.3.2" />
|
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.3.2" />
|
||||||
<PackageReference Include="LiveChartsCore.SkiaSharpView.Avalonia" Version="2.0.0-rc4.5" />
|
<PackageReference Include="LiveChartsCore.SkiaSharpView.Avalonia" Version="2.0.0-rc4.5" />
|
||||||
<PackageReference Include="TextMateSharp" Version="1.0.64" />
|
<PackageReference Include="TextMateSharp" Version="1.0.65" />
|
||||||
<PackageReference Include="TextMateSharp.Grammars" Version="1.0.64" />
|
<PackageReference Include="TextMateSharp.Grammars" Version="1.0.65" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -59,6 +59,12 @@ namespace SourceGit.ViewModels
|
||||||
public List<BranchTreeNode> Locals => _locals;
|
public List<BranchTreeNode> Locals => _locals;
|
||||||
public List<BranchTreeNode> Remotes => _remotes;
|
public List<BranchTreeNode> Remotes => _remotes;
|
||||||
|
|
||||||
|
public void SetExpandedNodes(List<string> expanded)
|
||||||
|
{
|
||||||
|
foreach (var node in expanded)
|
||||||
|
_expanded.Add(node);
|
||||||
|
}
|
||||||
|
|
||||||
public void Run(List<Models.Branch> branches, List<Models.Remote> remotes, bool bForceExpanded)
|
public void Run(List<Models.Branch> branches, List<Models.Remote> remotes, bool bForceExpanded)
|
||||||
{
|
{
|
||||||
var folders = new Dictionary<string, BranchTreeNode>();
|
var folders = new Dictionary<string, BranchTreeNode>();
|
||||||
|
@ -97,20 +103,6 @@ namespace SourceGit.ViewModels
|
||||||
SortNodes(_remotes);
|
SortNodes(_remotes);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CollectExpandedNodes(List<BranchTreeNode> nodes)
|
|
||||||
{
|
|
||||||
foreach (var node in nodes)
|
|
||||||
{
|
|
||||||
if (node.Backend is Models.Branch)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (node.IsExpanded)
|
|
||||||
_expanded.Add(node.Path);
|
|
||||||
|
|
||||||
CollectExpandedNodes(node.Children);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void MakeBranchNode(Models.Branch branch, List<BranchTreeNode> roots, Dictionary<string, BranchTreeNode> folders, string prefix, bool bForceExpanded)
|
private void MakeBranchNode(Models.Branch branch, List<BranchTreeNode> roots, Dictionary<string, BranchTreeNode> folders, string prefix, bool bForceExpanded)
|
||||||
{
|
{
|
||||||
var fullpath = $"{prefix}/{branch.Name}";
|
var fullpath = $"{prefix}/{branch.Name}";
|
||||||
|
|
|
@ -30,15 +30,14 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public bool Force
|
public bool Force
|
||||||
{
|
{
|
||||||
get;
|
get => _repo.Settings.EnableForceOnFetch;
|
||||||
set;
|
set => _repo.Settings.EnableForceOnFetch = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Fetch(Repository repo, Models.Remote preferedRemote = null)
|
public Fetch(Repository repo, Models.Remote preferedRemote = null)
|
||||||
{
|
{
|
||||||
_repo = repo;
|
_repo = repo;
|
||||||
_fetchAllRemotes = preferedRemote == null;
|
_fetchAllRemotes = preferedRemote == null;
|
||||||
Force = false;
|
|
||||||
SelectedRemote = preferedRemote != null ? preferedRemote : _repo.Remotes[0];
|
SelectedRemote = preferedRemote != null ? preferedRemote : _repo.Remotes[0];
|
||||||
View = new Views.Fetch() { DataContext = this };
|
View = new Views.Fetch() { DataContext = this };
|
||||||
}
|
}
|
||||||
|
@ -49,7 +48,7 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
var notags = _repo.Settings.FetchWithoutTags;
|
var notags = _repo.Settings.FetchWithoutTags;
|
||||||
var prune = _repo.Settings.EnablePruneOnFetch;
|
var prune = _repo.Settings.EnablePruneOnFetch;
|
||||||
var force = Force;
|
var force = _repo.Settings.EnableForceOnFetch;
|
||||||
return Task.Run(() =>
|
return Task.Run(() =>
|
||||||
{
|
{
|
||||||
if (FetchAllRemotes)
|
if (FetchAllRemotes)
|
||||||
|
|
|
@ -65,7 +65,7 @@ namespace SourceGit.ViewModels
|
||||||
Task.Run(() =>
|
Task.Run(() =>
|
||||||
{
|
{
|
||||||
var based = commit ?? string.Empty;
|
var based = commit ?? string.Empty;
|
||||||
var commits = new Commands.QueryCommits(_repo.FullPath, false, $"-n 10000 {based} -- \"{file}\"", false).Result();
|
var commits = new Commands.QueryCommits(_repo.FullPath, $"--date-order -n 10000 {based} -- \"{file}\"", false).Result();
|
||||||
Dispatcher.UIThread.Invoke(() =>
|
Dispatcher.UIThread.Invoke(() =>
|
||||||
{
|
{
|
||||||
IsLoading = false;
|
IsLoading = false;
|
||||||
|
|
|
@ -11,6 +11,12 @@ namespace SourceGit.ViewModels
|
||||||
{
|
{
|
||||||
public class Launcher : ObservableObject
|
public class Launcher : ObservableObject
|
||||||
{
|
{
|
||||||
|
public string Title
|
||||||
|
{
|
||||||
|
get => _title;
|
||||||
|
private set => SetProperty(ref _title, value);
|
||||||
|
}
|
||||||
|
|
||||||
public AvaloniaList<LauncherPage> Pages
|
public AvaloniaList<LauncherPage> Pages
|
||||||
{
|
{
|
||||||
get;
|
get;
|
||||||
|
@ -31,9 +37,10 @@ namespace SourceGit.ViewModels
|
||||||
if (SetProperty(ref _activePage, value))
|
if (SetProperty(ref _activePage, value))
|
||||||
{
|
{
|
||||||
PopupHost.Active = value;
|
PopupHost.Active = value;
|
||||||
|
UpdateTitle();
|
||||||
|
|
||||||
if (!_ignoreIndexChange && value is { Data: Repository repo })
|
if (!_ignoreIndexChange && value is { Data: Repository repo })
|
||||||
ActiveWorkspace.ActiveIdx = ActiveWorkspace.Repositories.IndexOf(repo.FullPath);
|
_activeWorkspace.ActiveIdx = _activeWorkspace.Repositories.IndexOf(repo.FullPath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -105,6 +112,9 @@ namespace SourceGit.ViewModels
|
||||||
}
|
}
|
||||||
|
|
||||||
_ignoreIndexChange = false;
|
_ignoreIndexChange = false;
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(_title))
|
||||||
|
UpdateTitle();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Quit(double width, double height)
|
public void Quit(double width, double height)
|
||||||
|
@ -185,6 +195,7 @@ namespace SourceGit.ViewModels
|
||||||
last.Node = new RepositoryNode() { Id = Guid.NewGuid().ToString() };
|
last.Node = new RepositoryNode() { Id = Guid.NewGuid().ToString() };
|
||||||
last.Data = Welcome.Instance;
|
last.Data = Welcome.Instance;
|
||||||
last.Popup = null;
|
last.Popup = null;
|
||||||
|
UpdateTitle();
|
||||||
|
|
||||||
GC.Collect();
|
GC.Collect();
|
||||||
}
|
}
|
||||||
|
@ -193,7 +204,6 @@ namespace SourceGit.ViewModels
|
||||||
App.Quit(0);
|
App.Quit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
_ignoreIndexChange = false;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -308,7 +318,10 @@ namespace SourceGit.ViewModels
|
||||||
page.Data = repo;
|
page.Data = repo;
|
||||||
}
|
}
|
||||||
|
|
||||||
ActivePage = page;
|
if (page != _activePage)
|
||||||
|
ActivePage = page;
|
||||||
|
else
|
||||||
|
UpdateTitle();
|
||||||
|
|
||||||
ActiveWorkspace.Repositories.Clear();
|
ActiveWorkspace.Repositories.Clear();
|
||||||
foreach (var p in Pages)
|
foreach (var p in Pages)
|
||||||
|
@ -530,8 +543,37 @@ namespace SourceGit.ViewModels
|
||||||
page.Data = null;
|
page.Data = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void UpdateTitle()
|
||||||
|
{
|
||||||
|
if (_activeWorkspace == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var workspace = _activeWorkspace.Name;
|
||||||
|
if (_activePage is { Data: Repository repo })
|
||||||
|
{
|
||||||
|
var node = _activePage.Node;
|
||||||
|
var name = node.Name;
|
||||||
|
var path = node.Id;
|
||||||
|
|
||||||
|
if (!OperatingSystem.IsWindows())
|
||||||
|
{
|
||||||
|
var home = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
|
||||||
|
var prefixLen = home.EndsWith('/') ? home.Length - 1 : home.Length;
|
||||||
|
if (path.StartsWith(home, StringComparison.Ordinal))
|
||||||
|
path = "~" + path.Substring(prefixLen);
|
||||||
|
}
|
||||||
|
|
||||||
|
Title = $"[{workspace}] {name} ({path})";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Title = $"[{workspace}] Repositories";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private Workspace _activeWorkspace = null;
|
private Workspace _activeWorkspace = null;
|
||||||
private LauncherPage _activePage = null;
|
private LauncherPage _activePage = null;
|
||||||
private bool _ignoreIndexChange = false;
|
private bool _ignoreIndexChange = false;
|
||||||
|
private string _title = string.Empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,31 +88,43 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public bool EnableReflog
|
public bool EnableReflog
|
||||||
{
|
{
|
||||||
get => _enableReflog;
|
get => _settings.EnableReflog;
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (SetProperty(ref _enableReflog, value))
|
if (value != _settings.EnableReflog)
|
||||||
|
{
|
||||||
|
_settings.EnableReflog = value;
|
||||||
|
OnPropertyChanged();
|
||||||
Task.Run(RefreshCommits);
|
Task.Run(RefreshCommits);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool EnableFirstParentInHistories
|
public bool EnableFirstParentInHistories
|
||||||
{
|
{
|
||||||
get => _enableFirstParentInHistories;
|
get => _settings.EnableFirstParentInHistories;
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (SetProperty(ref _enableFirstParentInHistories, value))
|
if (value != _settings.EnableFirstParentInHistories)
|
||||||
|
{
|
||||||
|
_settings.EnableFirstParentInHistories = value;
|
||||||
|
OnPropertyChanged();
|
||||||
Task.Run(RefreshCommits);
|
Task.Run(RefreshCommits);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool EnableTopoOrderInHistories
|
public bool EnableTopoOrderInHistories
|
||||||
{
|
{
|
||||||
get => _enableTopoOrderInHistories;
|
get => _settings.EnableTopoOrderInHistories;
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (SetProperty(ref _enableTopoOrderInHistories, value))
|
if (value != _settings.EnableTopoOrderInHistories)
|
||||||
|
{
|
||||||
|
_settings.EnableTopoOrderInHistories = value;
|
||||||
|
OnPropertyChanged();
|
||||||
Task.Run(RefreshCommits);
|
Task.Run(RefreshCommits);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -206,11 +218,15 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public bool IncludeUntracked
|
public bool IncludeUntracked
|
||||||
{
|
{
|
||||||
get => _includeUntracked;
|
get => _settings.IncludeUntrackedInLocalChanges;
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (SetProperty(ref _includeUntracked, value))
|
if (value != _settings.IncludeUntrackedInLocalChanges)
|
||||||
|
{
|
||||||
|
_settings.IncludeUntrackedInLocalChanges = value;
|
||||||
|
OnPropertyChanged();
|
||||||
Task.Run(RefreshWorkingCopyChanges);
|
Task.Run(RefreshWorkingCopyChanges);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -247,8 +263,7 @@ namespace SourceGit.ViewModels
|
||||||
get => _onlySearchCommitsInCurrentBranch;
|
get => _onlySearchCommitsInCurrentBranch;
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (SetProperty(ref _onlySearchCommitsInCurrentBranch, value) &&
|
if (SetProperty(ref _onlySearchCommitsInCurrentBranch, value) && !string.IsNullOrEmpty(_searchCommitFilter))
|
||||||
!string.IsNullOrEmpty(_searchCommitFilter))
|
|
||||||
StartSearchCommits();
|
StartSearchCommits();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -322,32 +337,67 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public bool IsLocalBranchGroupExpanded
|
public bool IsLocalBranchGroupExpanded
|
||||||
{
|
{
|
||||||
get => _isLocalBranchGroupExpanded;
|
get => _settings.IsLocalBranchesExpandedInSideBar;
|
||||||
set => SetProperty(ref _isLocalBranchGroupExpanded, value);
|
set
|
||||||
|
{
|
||||||
|
if (value != _settings.IsLocalBranchesExpandedInSideBar)
|
||||||
|
{
|
||||||
|
_settings.IsLocalBranchesExpandedInSideBar = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsRemoteGroupExpanded
|
public bool IsRemoteGroupExpanded
|
||||||
{
|
{
|
||||||
get => _isRemoteGroupExpanded;
|
get => _settings.IsRemotesExpandedInSideBar;
|
||||||
set => SetProperty(ref _isRemoteGroupExpanded, value);
|
set
|
||||||
|
{
|
||||||
|
if (value != _settings.IsRemotesExpandedInSideBar)
|
||||||
|
{
|
||||||
|
_settings.IsRemotesExpandedInSideBar = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsTagGroupExpanded
|
public bool IsTagGroupExpanded
|
||||||
{
|
{
|
||||||
get => _isTagGroupExpanded;
|
get => _settings.IsTagsExpandedInSideBar;
|
||||||
set => SetProperty(ref _isTagGroupExpanded, value);
|
set
|
||||||
|
{
|
||||||
|
if (value != _settings.IsTagsExpandedInSideBar)
|
||||||
|
{
|
||||||
|
_settings.IsTagsExpandedInSideBar = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsSubmoduleGroupExpanded
|
public bool IsSubmoduleGroupExpanded
|
||||||
{
|
{
|
||||||
get => _isSubmoduleGroupExpanded;
|
get => _settings.IsSubmodulesExpandedInSideBar;
|
||||||
set => SetProperty(ref _isSubmoduleGroupExpanded, value);
|
set
|
||||||
|
{
|
||||||
|
if (value != _settings.IsSubmodulesExpandedInSideBar)
|
||||||
|
{
|
||||||
|
_settings.IsSubmodulesExpandedInSideBar = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsWorktreeGroupExpanded
|
public bool IsWorktreeGroupExpanded
|
||||||
{
|
{
|
||||||
get => _isWorktreeGroupExpanded;
|
get => _settings.IsWorktreeExpandedInSideBar;
|
||||||
set => SetProperty(ref _isWorktreeGroupExpanded, value);
|
set
|
||||||
|
{
|
||||||
|
if (value != _settings.IsWorktreeExpandedInSideBar)
|
||||||
|
{
|
||||||
|
_settings.IsWorktreeExpandedInSideBar = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public InProgressContext InProgressContext
|
public InProgressContext InProgressContext
|
||||||
|
@ -367,8 +417,8 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public bool IsAutoFetching
|
public bool IsAutoFetching
|
||||||
{
|
{
|
||||||
get;
|
get => _isAutoFetching;
|
||||||
private set;
|
private set => SetProperty(ref _isAutoFetching, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Open()
|
public void Open()
|
||||||
|
@ -700,6 +750,22 @@ namespace SourceGit.ViewModels
|
||||||
Task.Run(RefreshCommits);
|
Task.Run(RefreshCommits);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void UpdateBranchNodeIsExpanded(BranchTreeNode node)
|
||||||
|
{
|
||||||
|
if (_settings == null || !string.IsNullOrWhiteSpace(_filter))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (node.IsExpanded)
|
||||||
|
{
|
||||||
|
if (!_settings.ExpandedBranchNodesInSideBar.Contains(node.Path))
|
||||||
|
_settings.ExpandedBranchNodesInSideBar.Add(node.Path);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_settings.ExpandedBranchNodesInSideBar.Remove(node.Path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void SetTagFilterMode(Models.Tag tag, Models.FilterMode mode)
|
public void SetTagFilterMode(Models.Tag tag, Models.FilterMode mode)
|
||||||
{
|
{
|
||||||
var changed = _settings.UpdateHistoriesFilter(tag.Name, Models.FilterType.Tag, mode);
|
var changed = _settings.UpdateHistoriesFilter(tag.Name, Models.FilterType.Tag, mode);
|
||||||
|
@ -828,9 +894,15 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
var builder = new StringBuilder();
|
var builder = new StringBuilder();
|
||||||
builder.Append($"-{Preference.Instance.MaxHistoryCommits} ");
|
builder.Append($"-{Preference.Instance.MaxHistoryCommits} ");
|
||||||
if (_enableReflog)
|
|
||||||
|
if (_settings.EnableTopoOrderInHistories)
|
||||||
|
builder.Append("--topo-order ");
|
||||||
|
else
|
||||||
|
builder.Append("--date-order ");
|
||||||
|
|
||||||
|
if (_settings.EnableReflog)
|
||||||
builder.Append("--reflog ");
|
builder.Append("--reflog ");
|
||||||
if (_enableFirstParentInHistories)
|
if (_settings.EnableFirstParentInHistories)
|
||||||
builder.Append("--first-parent ");
|
builder.Append("--first-parent ");
|
||||||
|
|
||||||
var filters = _settings.BuildHistoriesFilter();
|
var filters = _settings.BuildHistoriesFilter();
|
||||||
|
@ -839,8 +911,8 @@ namespace SourceGit.ViewModels
|
||||||
else
|
else
|
||||||
builder.Append(filters);
|
builder.Append(filters);
|
||||||
|
|
||||||
var commits = new Commands.QueryCommits(_fullpath, _enableTopoOrderInHistories, builder.ToString()).Result();
|
var commits = new Commands.QueryCommits(_fullpath, builder.ToString()).Result();
|
||||||
var graph = Models.CommitGraph.Parse(commits, _enableFirstParentInHistories);
|
var graph = Models.CommitGraph.Parse(commits, _settings.EnableFirstParentInHistories);
|
||||||
|
|
||||||
Dispatcher.UIThread.Invoke(() =>
|
Dispatcher.UIThread.Invoke(() =>
|
||||||
{
|
{
|
||||||
|
@ -867,7 +939,7 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
public void RefreshWorkingCopyChanges()
|
public void RefreshWorkingCopyChanges()
|
||||||
{
|
{
|
||||||
var changes = new Commands.QueryLocalChanges(_fullpath, _includeUntracked).Result();
|
var changes = new Commands.QueryLocalChanges(_fullpath, _settings.IncludeUntrackedInLocalChanges).Result();
|
||||||
if (_workingCopy == null)
|
if (_workingCopy == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -2014,8 +2086,7 @@ namespace SourceGit.ViewModels
|
||||||
var builder = new BranchTreeNode.Builder();
|
var builder = new BranchTreeNode.Builder();
|
||||||
if (string.IsNullOrEmpty(_filter))
|
if (string.IsNullOrEmpty(_filter))
|
||||||
{
|
{
|
||||||
builder.CollectExpandedNodes(_localBranchTrees);
|
builder.SetExpandedNodes(_settings.ExpandedBranchNodesInSideBar);
|
||||||
builder.CollectExpandedNodes(_remoteBranchTrees);
|
|
||||||
builder.Run(branches, remotes, false);
|
builder.Run(branches, remotes, false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2189,7 +2260,7 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
private void AutoFetchImpl(object sender)
|
private void AutoFetchImpl(object sender)
|
||||||
{
|
{
|
||||||
if (!_settings.EnableAutoFetch || IsAutoFetching)
|
if (!_settings.EnableAutoFetch || _isAutoFetching)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var lockFile = Path.Combine(_gitDir, "index.lock");
|
var lockFile = Path.Combine(_gitDir, "index.lock");
|
||||||
|
@ -2201,12 +2272,10 @@ namespace SourceGit.ViewModels
|
||||||
if (desire > now)
|
if (desire > now)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
IsAutoFetching = true;
|
Dispatcher.UIThread.Invoke(() => IsAutoFetching = true);
|
||||||
Dispatcher.UIThread.Invoke(() => OnPropertyChanged(nameof(IsAutoFetching)));
|
|
||||||
new Commands.Fetch(_fullpath, "--all", false, _settings.EnablePruneOnFetch, false, null) { RaiseError = false }.Exec();
|
new Commands.Fetch(_fullpath, "--all", false, _settings.EnablePruneOnFetch, false, null) { RaiseError = false }.Exec();
|
||||||
_lastFetchTime = DateTime.Now;
|
_lastFetchTime = DateTime.Now;
|
||||||
IsAutoFetching = false;
|
Dispatcher.UIThread.Invoke(() => IsAutoFetching = false);
|
||||||
Dispatcher.UIThread.Invoke(() => OnPropertyChanged(nameof(IsAutoFetching)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private string _fullpath = string.Empty;
|
private string _fullpath = string.Empty;
|
||||||
|
@ -2230,19 +2299,11 @@ namespace SourceGit.ViewModels
|
||||||
private bool _isSearchCommitSuggestionOpen = false;
|
private bool _isSearchCommitSuggestionOpen = false;
|
||||||
private int _searchCommitFilterType = 2;
|
private int _searchCommitFilterType = 2;
|
||||||
private bool _onlySearchCommitsInCurrentBranch = false;
|
private bool _onlySearchCommitsInCurrentBranch = false;
|
||||||
private bool _enableReflog = false;
|
|
||||||
private bool _enableFirstParentInHistories = false;
|
|
||||||
private bool _enableTopoOrderInHistories = false;
|
|
||||||
private string _searchCommitFilter = string.Empty;
|
private string _searchCommitFilter = string.Empty;
|
||||||
private List<Models.Commit> _searchedCommits = new List<Models.Commit>();
|
private List<Models.Commit> _searchedCommits = new List<Models.Commit>();
|
||||||
|
private Models.Commit _searchResultSelectedCommit = null;
|
||||||
private List<string> _revisionFiles = new List<string>();
|
private List<string> _revisionFiles = new List<string>();
|
||||||
|
|
||||||
private bool _isLocalBranchGroupExpanded = true;
|
|
||||||
private bool _isRemoteGroupExpanded = false;
|
|
||||||
private bool _isTagGroupExpanded = false;
|
|
||||||
private bool _isSubmoduleGroupExpanded = false;
|
|
||||||
private bool _isWorktreeGroupExpanded = false;
|
|
||||||
|
|
||||||
private string _filter = string.Empty;
|
private string _filter = string.Empty;
|
||||||
private List<Models.Remote> _remotes = new List<Models.Remote>();
|
private List<Models.Remote> _remotes = new List<Models.Remote>();
|
||||||
private List<Models.Branch> _branches = new List<Models.Branch>();
|
private List<Models.Branch> _branches = new List<Models.Branch>();
|
||||||
|
@ -2255,8 +2316,7 @@ namespace SourceGit.ViewModels
|
||||||
private List<Models.Submodule> _submodules = new List<Models.Submodule>();
|
private List<Models.Submodule> _submodules = new List<Models.Submodule>();
|
||||||
private List<Models.Submodule> _visibleSubmodules = new List<Models.Submodule>();
|
private List<Models.Submodule> _visibleSubmodules = new List<Models.Submodule>();
|
||||||
|
|
||||||
private bool _includeUntracked = true;
|
private bool _isAutoFetching = false;
|
||||||
private Models.Commit _searchResultSelectedCommit = null;
|
|
||||||
private Timer _autoFetchTimer = null;
|
private Timer _autoFetchTimer = null;
|
||||||
private DateTime _lastFetchTime = DateTime.MinValue;
|
private DateTime _lastFetchTime = DateTime.MinValue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,7 +54,8 @@
|
||||||
|
|
||||||
<CheckBox Grid.Row="2" Grid.Column="1"
|
<CheckBox Grid.Row="2" Grid.Column="1"
|
||||||
Content="{DynamicResource Text.Apply.IgnoreWS}"
|
Content="{DynamicResource Text.Apply.IgnoreWS}"
|
||||||
IsChecked="{Binding IgnoreWhiteSpace, Mode=TwoWay}"/>
|
IsChecked="{Binding IgnoreWhiteSpace, Mode=TwoWay}"
|
||||||
|
ToolTip.Tip="--ignore-whitespace"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
|
|
|
@ -275,6 +275,9 @@ namespace SourceGit.Views
|
||||||
rows.RemoveRange(idx + 1, removeCount);
|
rows.RemoveRange(idx + 1, removeCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var repo = DataContext as ViewModels.Repository;
|
||||||
|
repo?.UpdateBranchNodeIsExpanded(node);
|
||||||
|
|
||||||
RaiseEvent(new RoutedEventArgs(RowsChangedEvent));
|
RaiseEvent(new RoutedEventArgs(RowsChangedEvent));
|
||||||
_disableSelectionChangingEvent = false;
|
_disableSelectionChangingEvent = false;
|
||||||
}
|
}
|
||||||
|
@ -396,15 +399,6 @@ namespace SourceGit.Views
|
||||||
else if (branches.Find(x => x.IsCurrent) == null)
|
else if (branches.Find(x => x.IsCurrent) == null)
|
||||||
{
|
{
|
||||||
var menu = new ContextMenu();
|
var menu = new ContextMenu();
|
||||||
var deleteMulti = new MenuItem();
|
|
||||||
deleteMulti.Header = App.Text("BranchCM.DeleteMultiBranches", branches.Count);
|
|
||||||
deleteMulti.Icon = App.CreateMenuIcon("Icons.Clear");
|
|
||||||
deleteMulti.Click += (_, ev) =>
|
|
||||||
{
|
|
||||||
repo.DeleteMultipleBranches(branches, branches[0].IsLocal);
|
|
||||||
ev.Handled = true;
|
|
||||||
};
|
|
||||||
menu.Items.Add(deleteMulti);
|
|
||||||
|
|
||||||
var mergeMulti = new MenuItem();
|
var mergeMulti = new MenuItem();
|
||||||
mergeMulti.Header = App.Text("BranchCM.MergeMultiBranches", branches.Count);
|
mergeMulti.Header = App.Text("BranchCM.MergeMultiBranches", branches.Count);
|
||||||
|
@ -415,6 +409,17 @@ namespace SourceGit.Views
|
||||||
ev.Handled = true;
|
ev.Handled = true;
|
||||||
};
|
};
|
||||||
menu.Items.Add(mergeMulti);
|
menu.Items.Add(mergeMulti);
|
||||||
|
menu.Items.Add(new MenuItem() { Header = "-" });
|
||||||
|
|
||||||
|
var deleteMulti = new MenuItem();
|
||||||
|
deleteMulti.Header = App.Text("BranchCM.DeleteMultiBranches", branches.Count);
|
||||||
|
deleteMulti.Icon = App.CreateMenuIcon("Icons.Clear");
|
||||||
|
deleteMulti.Click += (_, ev) =>
|
||||||
|
{
|
||||||
|
repo.DeleteMultipleBranches(branches, branches[0].IsLocal);
|
||||||
|
ev.Handled = true;
|
||||||
|
};
|
||||||
|
menu.Items.Add(deleteMulti);
|
||||||
|
|
||||||
menu?.Open(this);
|
menu?.Open(this);
|
||||||
}
|
}
|
||||||
|
|
|
@ -172,19 +172,20 @@
|
||||||
|
|
||||||
<!-- REFS -->
|
<!-- REFS -->
|
||||||
<TextBlock Grid.Row="3" Grid.Column="0" Classes="info_label" VerticalAlignment="Top" Margin="0,4,0,0" Text="{DynamicResource Text.CommitDetail.Info.Refs}" IsVisible="{Binding HasDecorators}"/>
|
<TextBlock Grid.Row="3" Grid.Column="0" Classes="info_label" VerticalAlignment="Top" Margin="0,4,0,0" Text="{DynamicResource Text.CommitDetail.Info.Refs}" IsVisible="{Binding HasDecorators}"/>
|
||||||
<Border Grid.Row="3" Grid.Column="1" Margin="12,0,0,0" Height="24" IsVisible="{Binding HasDecorators}">
|
<Border Grid.Row="3" Grid.Column="1" Margin="12,0,0,0" MinHeight="24" IsVisible="{Binding HasDecorators}">
|
||||||
<v:CommitRefsPresenter TagBackground="{DynamicResource Brush.DecoratorTag}"
|
<v:CommitRefsPresenter TagBackground="{DynamicResource Brush.DecoratorTag}"
|
||||||
Foreground="{DynamicResource Brush.FG1}"
|
Foreground="{DynamicResource Brush.FG1}"
|
||||||
FontFamily="{DynamicResource Fonts.Primary}"
|
FontFamily="{DynamicResource Fonts.Primary}"
|
||||||
FontSize="11"
|
FontSize="11"
|
||||||
VerticalAlignment="Center"
|
AllowWrap="True"
|
||||||
|
Margin="0,4,0,0"
|
||||||
UseGraphColor="False"/>
|
UseGraphColor="False"/>
|
||||||
</Border>
|
</Border>
|
||||||
|
|
||||||
<!-- Messages -->
|
<!-- Messages -->
|
||||||
<TextBlock Grid.Row="4" Grid.Column="0" Classes="info_label" VerticalAlignment="Top" Margin="0,4,0,0" Text="{DynamicResource Text.CommitDetail.Info.Message}" />
|
<TextBlock Grid.Row="4" Grid.Column="0" Classes="info_label" VerticalAlignment="Top" Margin="0,4,0,0" Text="{DynamicResource Text.CommitDetail.Info.Message}" />
|
||||||
<v:CommitMessagePresenter Grid.Row="4" Grid.Column="1"
|
<v:CommitMessagePresenter Grid.Row="4" Grid.Column="1"
|
||||||
Margin="12,5,8,0"
|
Margin="12,4,8,0"
|
||||||
Classes="primary"
|
Classes="primary"
|
||||||
Message="{Binding #ThisControl.Message}"
|
Message="{Binding #ThisControl.Message}"
|
||||||
IssueTrackerRules="{Binding #ThisControl.IssueTrackerRules}"
|
IssueTrackerRules="{Binding #ThisControl.IssueTrackerRules}"
|
||||||
|
|
|
@ -5,6 +5,7 @@ using Avalonia.Collections;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Input;
|
using Avalonia.Input;
|
||||||
using Avalonia.Interactivity;
|
using Avalonia.Interactivity;
|
||||||
|
using Avalonia.Threading;
|
||||||
|
|
||||||
namespace SourceGit.Views
|
namespace SourceGit.Views
|
||||||
{
|
{
|
||||||
|
@ -124,7 +125,7 @@ namespace SourceGit.Views
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void OnSHAPointerEntered(object sender, PointerEventArgs e)
|
private void OnSHAPointerEntered(object sender, PointerEventArgs e)
|
||||||
{
|
{
|
||||||
if (DataContext is ViewModels.CommitDetail detail && sender is Control { DataContext: string sha } ctl)
|
if (DataContext is ViewModels.CommitDetail detail && sender is Control { DataContext: string sha } ctl)
|
||||||
{
|
{
|
||||||
|
@ -132,14 +133,22 @@ namespace SourceGit.Views
|
||||||
if (tooltip is Models.Commit commit && commit.SHA == sha)
|
if (tooltip is Models.Commit commit && commit.SHA == sha)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var c = await Task.Run(() => detail.GetParent(sha));
|
Task.Run(() =>
|
||||||
if (c != null && ctl.IsVisible && ctl.DataContext is string newSHA && newSHA == sha)
|
|
||||||
{
|
{
|
||||||
ToolTip.SetTip(ctl, c);
|
var c = detail.GetParent(sha);
|
||||||
|
if (c == null) return;
|
||||||
|
|
||||||
if (ctl.IsPointerOver)
|
Dispatcher.UIThread.Invoke(() =>
|
||||||
ToolTip.SetIsOpen(ctl, true);
|
{
|
||||||
}
|
if (ctl.IsEffectivelyVisible && ctl.DataContext is string newSHA && newSHA == sha)
|
||||||
|
{
|
||||||
|
ToolTip.SetTip(ctl, c);
|
||||||
|
|
||||||
|
if (ctl.IsPointerOver)
|
||||||
|
ToolTip.SetIsOpen(ctl, true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
|
|
|
@ -57,7 +57,7 @@
|
||||||
HorizontalAlignment="Left"
|
HorizontalAlignment="Left"
|
||||||
Margin="16,0,0,0"
|
Margin="16,0,0,0"
|
||||||
Change="{Binding}"/>
|
Change="{Binding}"/>
|
||||||
<TextBlock Grid.Column="1" Classes="primary" Text="{Binding Path}" Margin="8,0" TextTrimming="CharacterEllipsis"/>
|
<TextBlock Grid.Column="1" Classes="primary" Text="{Binding Path}" Margin="8,0" HorizontalAlignment="Stretch" TextTrimming="CharacterEllipsis"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ListBox.ItemTemplate>
|
</ListBox.ItemTemplate>
|
||||||
|
|
|
@ -15,7 +15,7 @@ namespace SourceGit.Views
|
||||||
{
|
{
|
||||||
public partial class CommitMessagePresenter : SelectableTextBlock
|
public partial class CommitMessagePresenter : SelectableTextBlock
|
||||||
{
|
{
|
||||||
[GeneratedRegex(@"\b([0-9a-fA-F]{8,40})\b")]
|
[GeneratedRegex(@"\b([0-9a-fA-F]{10,40})\b")]
|
||||||
private static partial Regex REG_SHA_FORMAT();
|
private static partial Regex REG_SHA_FORMAT();
|
||||||
|
|
||||||
public static readonly StyledProperty<string> MessageProperty =
|
public static readonly StyledProperty<string> MessageProperty =
|
||||||
|
|
|
@ -73,6 +73,15 @@ namespace SourceGit.Views
|
||||||
set => SetValue(TagBackgroundProperty, value);
|
set => SetValue(TagBackgroundProperty, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static readonly StyledProperty<bool> AllowWrapProperty =
|
||||||
|
AvaloniaProperty.Register<CommitRefsPresenter, bool>(nameof(AllowWrap));
|
||||||
|
|
||||||
|
public bool AllowWrap
|
||||||
|
{
|
||||||
|
get => GetValue(AllowWrapProperty);
|
||||||
|
set => SetValue(AllowWrapProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
static CommitRefsPresenter()
|
static CommitRefsPresenter()
|
||||||
{
|
{
|
||||||
AffectsMeasure<CommitRefsPresenter>(
|
AffectsMeasure<CommitRefsPresenter>(
|
||||||
|
@ -93,10 +102,19 @@ namespace SourceGit.Views
|
||||||
var useGraphColor = UseGraphColor;
|
var useGraphColor = UseGraphColor;
|
||||||
var fg = Foreground;
|
var fg = Foreground;
|
||||||
var bg = Background;
|
var bg = Background;
|
||||||
|
var allowWrap = AllowWrap;
|
||||||
var x = 1.0;
|
var x = 1.0;
|
||||||
|
var y = 0.0;
|
||||||
|
|
||||||
foreach (var item in _items)
|
foreach (var item in _items)
|
||||||
{
|
{
|
||||||
var entireRect = new RoundedRect(new Rect(x, 0, item.Width, 16), new CornerRadius(2));
|
if (allowWrap && x > 1.0 && x + item.Width > Bounds.Width)
|
||||||
|
{
|
||||||
|
x = 1.0;
|
||||||
|
y += 20.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
var entireRect = new RoundedRect(new Rect(x, y, item.Width, 16), new CornerRadius(2));
|
||||||
|
|
||||||
if (item.IsHead)
|
if (item.IsHead)
|
||||||
{
|
{
|
||||||
|
@ -109,24 +127,24 @@ namespace SourceGit.Views
|
||||||
context.DrawRectangle(item.Brush, null, entireRect);
|
context.DrawRectangle(item.Brush, null, entireRect);
|
||||||
}
|
}
|
||||||
|
|
||||||
context.DrawText(item.Label, new Point(x + 16, 8.0 - item.Label.Height * 0.5));
|
context.DrawText(item.Label, new Point(x + 16, y + 8.0 - item.Label.Height * 0.5));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (bg != null)
|
if (bg != null)
|
||||||
context.DrawRectangle(bg, null, entireRect);
|
context.DrawRectangle(bg, null, entireRect);
|
||||||
|
|
||||||
var labelRect = new RoundedRect(new Rect(x + 16, 0, item.Label.Width + 8, 16), new CornerRadius(0, 2, 2, 0));
|
var labelRect = new RoundedRect(new Rect(x + 16, y, item.Label.Width + 8, 16), new CornerRadius(0, 2, 2, 0));
|
||||||
using (context.PushOpacity(.2))
|
using (context.PushOpacity(.2))
|
||||||
context.DrawRectangle(item.Brush, null, labelRect);
|
context.DrawRectangle(item.Brush, null, labelRect);
|
||||||
|
|
||||||
context.DrawLine(new Pen(item.Brush), new Point(x + 16, 0), new Point(x + 16, 16));
|
context.DrawLine(new Pen(item.Brush), new Point(x + 16, y), new Point(x + 16, y + 16));
|
||||||
context.DrawText(item.Label, new Point(x + 20, 8.0 - item.Label.Height * 0.5));
|
context.DrawText(item.Label, new Point(x + 20, y + 8.0 - item.Label.Height * 0.5));
|
||||||
}
|
}
|
||||||
|
|
||||||
context.DrawRectangle(null, new Pen(item.Brush), entireRect);
|
context.DrawRectangle(null, new Pen(item.Brush), entireRect);
|
||||||
|
|
||||||
using (context.PushTransform(Matrix.CreateTranslation(x + 3, 3)))
|
using (context.PushTransform(Matrix.CreateTranslation(x + 3, y + 3)))
|
||||||
context.DrawGeometry(fg, null, item.Icon);
|
context.DrawGeometry(fg, null, item.Icon);
|
||||||
|
|
||||||
x += item.Width + 4;
|
x += item.Width + 4;
|
||||||
|
@ -157,6 +175,9 @@ namespace SourceGit.Views
|
||||||
var tagBG = TagBackground;
|
var tagBG = TagBackground;
|
||||||
var labelSize = FontSize;
|
var labelSize = FontSize;
|
||||||
var requiredWidth = 0.0;
|
var requiredWidth = 0.0;
|
||||||
|
var requiredHeight = 16.0;
|
||||||
|
var x = 0.0;
|
||||||
|
var allowWrap = AllowWrap;
|
||||||
|
|
||||||
foreach (var decorator in refs)
|
foreach (var decorator in refs)
|
||||||
{
|
{
|
||||||
|
@ -211,11 +232,24 @@ namespace SourceGit.Views
|
||||||
item.Width = 16 + (isHead ? 0 : 4) + label.Width + 4;
|
item.Width = 16 + (isHead ? 0 : 4) + label.Width + 4;
|
||||||
_items.Add(item);
|
_items.Add(item);
|
||||||
|
|
||||||
requiredWidth += item.Width + 4;
|
x += item.Width + 4;
|
||||||
|
if (allowWrap)
|
||||||
|
{
|
||||||
|
if (x > availableSize.Width)
|
||||||
|
{
|
||||||
|
requiredHeight += 20.0;
|
||||||
|
x = item.Width;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (allowWrap && requiredHeight > 16.0)
|
||||||
|
requiredWidth = availableSize.Width;
|
||||||
|
else
|
||||||
|
requiredWidth = x + 2;
|
||||||
|
|
||||||
InvalidateVisual();
|
InvalidateVisual();
|
||||||
return new Size(requiredWidth + 2, 16);
|
return new Size(requiredWidth, requiredHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
InvalidateVisual();
|
InvalidateVisual();
|
||||||
|
|
|
@ -34,15 +34,18 @@
|
||||||
|
|
||||||
<CheckBox Grid.Row="1" Grid.Column="1"
|
<CheckBox Grid.Row="1" Grid.Column="1"
|
||||||
Content="{DynamicResource Text.Fetch.Force}"
|
Content="{DynamicResource Text.Fetch.Force}"
|
||||||
IsChecked="{Binding Force, Mode=TwoWay}"/>
|
IsChecked="{Binding Force, Mode=TwoWay}"
|
||||||
|
ToolTip.Tip="--force"/>
|
||||||
|
|
||||||
<CheckBox Grid.Row="2" Grid.Column="1"
|
<CheckBox Grid.Row="2" Grid.Column="1"
|
||||||
Content="{DynamicResource Text.Fetch.AllRemotes}"
|
Content="{DynamicResource Text.Fetch.AllRemotes}"
|
||||||
IsChecked="{Binding FetchAllRemotes, Mode=TwoWay}"/>
|
IsChecked="{Binding FetchAllRemotes, Mode=TwoWay}"
|
||||||
|
ToolTip.Tip="--all"/>
|
||||||
|
|
||||||
<CheckBox Grid.Row="3" Grid.Column="1"
|
<CheckBox Grid.Row="3" Grid.Column="1"
|
||||||
Content="{DynamicResource Text.Fetch.NoTags}"
|
Content="{DynamicResource Text.Fetch.NoTags}"
|
||||||
IsChecked="{Binding NoTags, Mode=TwoWay}"/>
|
IsChecked="{Binding NoTags, Mode=TwoWay}"
|
||||||
|
ToolTip.Tip="--no-tags"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
x:DataType="vm:Launcher"
|
x:DataType="vm:Launcher"
|
||||||
x:Name="ThisControl"
|
x:Name="ThisControl"
|
||||||
Icon="/App.ico"
|
Icon="/App.ico"
|
||||||
Title="SourceGit"
|
Title="{Binding Title}"
|
||||||
MinWidth="1024" MinHeight="600"
|
MinWidth="1024" MinHeight="600"
|
||||||
WindowStartupLocation="CenterScreen">
|
WindowStartupLocation="CenterScreen">
|
||||||
<Grid>
|
<Grid>
|
||||||
|
@ -51,12 +51,12 @@
|
||||||
</MenuItem.Icon>
|
</MenuItem.Icon>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
<MenuItem Header="-"/>
|
<MenuItem Header="-"/>
|
||||||
<MenuItem Header="{DynamicResource Text.SelfUpdate}" Command="{x:Static s:App.CheckForUpdateCommand}">
|
<MenuItem Header="{DynamicResource Text.SelfUpdate}" Command="{x:Static s:App.CheckForUpdateCommand}" IsVisible="{x:Static s:App.IsCheckForUpdateCommandVisible}">
|
||||||
<MenuItem.Icon>
|
<MenuItem.Icon>
|
||||||
<Path Width="14" Height="14" Data="{StaticResource Icons.SoftwareUpdate}"/>
|
<Path Width="14" Height="14" Data="{StaticResource Icons.SoftwareUpdate}"/>
|
||||||
</MenuItem.Icon>
|
</MenuItem.Icon>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
<MenuItem Header="-"/>
|
<MenuItem Header="-" IsVisible="{x:Static s:App.IsCheckForUpdateCommandVisible}"/>
|
||||||
<MenuItem Header="{DynamicResource Text.About}" Command="{x:Static s:App.OpenAboutCommand}">
|
<MenuItem Header="{DynamicResource Text.About}" Command="{x:Static s:App.OpenAboutCommand}">
|
||||||
<MenuItem.Icon>
|
<MenuItem.Icon>
|
||||||
<Path Width="14" Height="14" Data="{StaticResource Icons.Info}"/>
|
<Path Width="14" Height="14" Data="{StaticResource Icons.Info}"/>
|
||||||
|
|
|
@ -125,11 +125,9 @@
|
||||||
</Button>
|
</Button>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<Border Grid.Row="1" Margin="8" Background="{DynamicResource Brush.Contents}" BorderThickness="1" BorderBrush="{DynamicResource Brush.Border2}">
|
<ScrollViewer Grid.Row="1" Margin="8" MaxHeight="200" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
|
||||||
<ScrollViewer MaxHeight="200" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
|
<TextBlock Margin="4,2" TextWrapping="Wrap" Text="{Binding Message}"/>
|
||||||
<TextBlock Margin="4,2" TextWrapping="NoWrap" Text="{Binding Message}"/>
|
</ScrollViewer>
|
||||||
</ScrollViewer>
|
|
||||||
</Border>
|
|
||||||
</Grid>
|
</Grid>
|
||||||
</Border>
|
</Border>
|
||||||
</Border>
|
</Border>
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:s="using:SourceGit"
|
||||||
xmlns:m="using:SourceGit.Models"
|
xmlns:m="using:SourceGit.Models"
|
||||||
xmlns:c="using:SourceGit.Converters"
|
xmlns:c="using:SourceGit.Converters"
|
||||||
xmlns:vm="using:SourceGit.ViewModels"
|
xmlns:vm="using:SourceGit.ViewModels"
|
||||||
|
@ -45,7 +46,7 @@
|
||||||
<TabItem.Header>
|
<TabItem.Header>
|
||||||
<TextBlock Classes="tab_header" Text="{DynamicResource Text.Preference.General}"/>
|
<TextBlock Classes="tab_header" Text="{DynamicResource Text.Preference.General}"/>
|
||||||
</TabItem.Header>
|
</TabItem.Header>
|
||||||
<Grid Margin="8" RowDefinitions="32,32,32,32,32,32,32" ColumnDefinitions="Auto,*">
|
<Grid Margin="8" RowDefinitions="32,32,32,32,32,32,Auto" ColumnDefinitions="Auto,*">
|
||||||
<TextBlock Grid.Row="0" Grid.Column="0"
|
<TextBlock Grid.Row="0" Grid.Column="0"
|
||||||
Text="{DynamicResource Text.Preference.General.Locale}"
|
Text="{DynamicResource Text.Preference.General.Locale}"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
|
@ -118,6 +119,7 @@
|
||||||
<CheckBox Grid.Row="6" Grid.Column="1"
|
<CheckBox Grid.Row="6" Grid.Column="1"
|
||||||
Height="32"
|
Height="32"
|
||||||
Content="{DynamicResource Text.Preference.General.Check4UpdatesOnStartup}"
|
Content="{DynamicResource Text.Preference.General.Check4UpdatesOnStartup}"
|
||||||
|
IsVisible="{x:Static s:App.IsCheckForUpdateCommandVisible}"
|
||||||
IsChecked="{Binding Source={x:Static vm:Preference.Instance}, Path=Check4UpdatesOnStartup, Mode=TwoWay}"/>
|
IsChecked="{Binding Source={x:Static vm:Preference.Instance}, Path=Check4UpdatesOnStartup, Mode=TwoWay}"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
|
|
@ -99,11 +99,13 @@
|
||||||
|
|
||||||
<CheckBox Grid.Row="5" Grid.Column="1"
|
<CheckBox Grid.Row="5" Grid.Column="1"
|
||||||
Content="{DynamicResource Text.Pull.NoTags}"
|
Content="{DynamicResource Text.Pull.NoTags}"
|
||||||
IsChecked="{Binding NoTags, Mode=TwoWay}"/>
|
IsChecked="{Binding NoTags, Mode=TwoWay}"
|
||||||
|
ToolTip.Tip="--no-tags"/>
|
||||||
|
|
||||||
<CheckBox Grid.Row="6" Grid.Column="1"
|
<CheckBox Grid.Row="6" Grid.Column="1"
|
||||||
Content="{DynamicResource Text.Pull.UseRebase}"
|
Content="{DynamicResource Text.Pull.UseRebase}"
|
||||||
IsChecked="{Binding UseRebase, Mode=TwoWay}"/>
|
IsChecked="{Binding UseRebase, Mode=TwoWay}"
|
||||||
|
ToolTip.Tip="--rebase"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
|
|
|
@ -83,21 +83,25 @@
|
||||||
Height="32"
|
Height="32"
|
||||||
Content="{DynamicResource Text.Push.Tracking}"
|
Content="{DynamicResource Text.Push.Tracking}"
|
||||||
IsChecked="{Binding Tracking, Mode=TwoWay}"
|
IsChecked="{Binding Tracking, Mode=TwoWay}"
|
||||||
IsVisible="{Binding IsSetTrackOptionVisible}"/>
|
IsVisible="{Binding IsSetTrackOptionVisible}"
|
||||||
|
ToolTip.Tip="-u"/>
|
||||||
|
|
||||||
<CheckBox Grid.Row="4" Grid.Column="1"
|
<CheckBox Grid.Row="4" Grid.Column="1"
|
||||||
Height="32"
|
Height="32"
|
||||||
Content="{DynamicResource Text.Push.CheckSubmodules}"
|
Content="{DynamicResource Text.Push.CheckSubmodules}"
|
||||||
IsChecked="{Binding CheckSubmodules, Mode=TwoWay}"
|
IsChecked="{Binding CheckSubmodules, Mode=TwoWay}"
|
||||||
IsVisible="{Binding IsCheckSubmodulesVisible}"/>
|
IsVisible="{Binding IsCheckSubmodulesVisible}"
|
||||||
|
ToolTip.Tip="--recurse-submodules=check"/>
|
||||||
|
|
||||||
<CheckBox Grid.Row="5" Grid.Column="1"
|
<CheckBox Grid.Row="5" Grid.Column="1"
|
||||||
Content="{DynamicResource Text.Push.WithAllTags}"
|
Content="{DynamicResource Text.Push.WithAllTags}"
|
||||||
IsChecked="{Binding PushAllTags, Mode=TwoWay}"/>
|
IsChecked="{Binding PushAllTags, Mode=TwoWay}"
|
||||||
|
ToolTip.Tip="--tags"/>
|
||||||
|
|
||||||
<CheckBox Grid.Row="6" Grid.Column="1"
|
<CheckBox Grid.Row="6" Grid.Column="1"
|
||||||
Content="{DynamicResource Text.Push.Force}"
|
Content="{DynamicResource Text.Push.Force}"
|
||||||
IsChecked="{Binding ForcePush, Mode=TwoWay}"/>
|
IsChecked="{Binding ForcePush, Mode=TwoWay}"
|
||||||
|
ToolTip.Tip="--force-with-lease"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
|
|
|
@ -155,7 +155,7 @@
|
||||||
<TextBlock Classes="tab_header" Text="{DynamicResource Text.Configure.CommitMessageTemplate}"/>
|
<TextBlock Classes="tab_header" Text="{DynamicResource Text.Configure.CommitMessageTemplate}"/>
|
||||||
</TabItem.Header>
|
</TabItem.Header>
|
||||||
|
|
||||||
<Grid ColumnDefinitions="200,*" Height="284" Margin="0,8,0,16">
|
<Grid ColumnDefinitions="200,*" Height="300" Margin="0,8,0,16">
|
||||||
<Border Grid.Column="0"
|
<Border Grid.Column="0"
|
||||||
BorderThickness="1" BorderBrush="{DynamicResource Brush.Border2}"
|
BorderThickness="1" BorderBrush="{DynamicResource Brush.Border2}"
|
||||||
Background="{DynamicResource Brush.Contents}">
|
Background="{DynamicResource Brush.Contents}">
|
||||||
|
|
|
@ -27,18 +27,21 @@
|
||||||
Height="32"
|
Height="32"
|
||||||
Content="{DynamicResource Text.Stash.IncludeUntracked}"
|
Content="{DynamicResource Text.Stash.IncludeUntracked}"
|
||||||
IsChecked="{Binding IncludeUntracked, Mode=TwoWay}"
|
IsChecked="{Binding IncludeUntracked, Mode=TwoWay}"
|
||||||
IsVisible="{Binding !HasSelectedFiles}"/>
|
IsVisible="{Binding !HasSelectedFiles}"
|
||||||
|
ToolTip.Tip="--include-untracked"/>
|
||||||
|
|
||||||
<CheckBox Grid.Row="2" Grid.Column="1"
|
<CheckBox Grid.Row="2" Grid.Column="1"
|
||||||
Height="32"
|
Height="32"
|
||||||
Content="{DynamicResource Text.Stash.OnlyStagedChanges}"
|
Content="{DynamicResource Text.Stash.OnlyStagedChanges}"
|
||||||
IsChecked="{Binding OnlyStaged, Mode=TwoWay}"
|
IsChecked="{Binding OnlyStaged, Mode=TwoWay}"
|
||||||
IsVisible="{Binding !HasSelectedFiles}"/>
|
IsVisible="{Binding !HasSelectedFiles}"
|
||||||
|
ToolTip.Tip="--staged"/>
|
||||||
|
|
||||||
<CheckBox Grid.Row="3" Grid.Column="1"
|
<CheckBox Grid.Row="3" Grid.Column="1"
|
||||||
Height="32"
|
Height="32"
|
||||||
Content="{DynamicResource Text.Stash.KeepIndex}"
|
Content="{DynamicResource Text.Stash.KeepIndex}"
|
||||||
IsChecked="{Binding KeepIndex, Mode=TwoWay}"/>
|
IsChecked="{Binding KeepIndex, Mode=TwoWay}"
|
||||||
|
ToolTip.Tip="--keep-index"/>
|
||||||
|
|
||||||
<TextBlock Grid.Row="4" Grid.Column="1"
|
<TextBlock Grid.Row="4" Grid.Column="1"
|
||||||
Margin="0,4,0,0"
|
Margin="0,4,0,0"
|
||||||
|
|
|
@ -9,149 +9,148 @@
|
||||||
x:Class="SourceGit.Views.Welcome"
|
x:Class="SourceGit.Views.Welcome"
|
||||||
x:DataType="vm:Welcome">
|
x:DataType="vm:Welcome">
|
||||||
<Grid RowDefinitions="*,36">
|
<Grid RowDefinitions="*,36">
|
||||||
<Grid Grid.Row="0" Margin="0,8" ColumnDefinitions="*,600,*">
|
<!-- Managed Repositories -->
|
||||||
<Grid Grid.Column="1" RowDefinitions="Auto,*">
|
<Grid Grid.Column="1" MinWidth="600" Margin="8" RowDefinitions="Auto,*" HorizontalAlignment="Center">
|
||||||
<!-- Search Box -->
|
<!-- Search Box -->
|
||||||
<TextBox Grid.Row="0"
|
<TextBox Grid.Row="0"
|
||||||
x:Name="SearchBox"
|
x:Name="SearchBox"
|
||||||
Height="32"
|
Height="32"
|
||||||
Padding="0"
|
Padding="0"
|
||||||
CornerRadius="16"
|
CornerRadius="16"
|
||||||
BorderBrush="{DynamicResource Brush.Border0}"
|
BorderBrush="{DynamicResource Brush.Border0}"
|
||||||
BorderThickness="1"
|
BorderThickness="1"
|
||||||
Background="{DynamicResource Brush.Contents}"
|
Background="{DynamicResource Brush.Contents}"
|
||||||
Watermark="{DynamicResource Text.Welcome.Search}"
|
Watermark="{DynamicResource Text.Welcome.Search}"
|
||||||
VerticalContentAlignment="Center"
|
VerticalContentAlignment="Center"
|
||||||
Text="{Binding SearchFilter, Mode=TwoWay}"
|
Text="{Binding SearchFilter, Mode=TwoWay}"
|
||||||
v:AutoFocusBehaviour.IsEnabled="True">
|
v:AutoFocusBehaviour.IsEnabled="True">
|
||||||
<TextBox.Styles>
|
<TextBox.Styles>
|
||||||
<Style Selector="TextBox:pointerover /template/ Border#PART_BorderElement">
|
<Style Selector="TextBox:pointerover /template/ Border#PART_BorderElement">
|
||||||
<Setter Property="BorderBrush" Value="{DynamicResource Brush.Border0}"/>
|
<Setter Property="BorderBrush" Value="{DynamicResource Brush.Border0}"/>
|
||||||
</Style>
|
</Style>
|
||||||
<Style Selector="TextBox:focus /template/ Border#PART_BorderElement">
|
<Style Selector="TextBox:focus /template/ Border#PART_BorderElement">
|
||||||
<Setter Property="BorderBrush" Value="{DynamicResource Brush.Border0}"/>
|
<Setter Property="BorderBrush" Value="{DynamicResource Brush.Border0}"/>
|
||||||
</Style>
|
</Style>
|
||||||
</TextBox.Styles>
|
</TextBox.Styles>
|
||||||
|
|
||||||
<TextBox.InnerLeftContent>
|
|
||||||
<Path Width="16" Height="16" Margin="6,0,3,0" Data="{StaticResource Icons.Search}" Fill="{DynamicResource Brush.FG2}"/>
|
|
||||||
</TextBox.InnerLeftContent>
|
|
||||||
|
|
||||||
<TextBox.InnerRightContent>
|
<TextBox.InnerLeftContent>
|
||||||
<Button Classes="icon_button" IsVisible="{Binding SearchFilter, Converter={x:Static StringConverters.IsNotNullOrEmpty}}" Command="{Binding ClearSearchFilter}">
|
<Path Width="16" Height="16" Margin="6,0,3,0" Data="{StaticResource Icons.Search}" Fill="{DynamicResource Brush.FG2}"/>
|
||||||
<Path Width="16" Height="16" Margin="0,0,0,0" Data="{StaticResource Icons.Clear}" Fill="{DynamicResource Brush.FG1}"/>
|
</TextBox.InnerLeftContent>
|
||||||
</Button>
|
|
||||||
</TextBox.InnerRightContent>
|
|
||||||
</TextBox>
|
|
||||||
|
|
||||||
<!-- Repository Tree -->
|
<TextBox.InnerRightContent>
|
||||||
<v:RepositoryListBox Grid.Row="1"
|
<Button Classes="icon_button" IsVisible="{Binding SearchFilter, Converter={x:Static StringConverters.IsNotNullOrEmpty}}" Command="{Binding ClearSearchFilter}">
|
||||||
x:Name="TreeContainer"
|
<Path Width="16" Height="16" Margin="0,0,0,0" Data="{StaticResource Icons.Clear}" Fill="{DynamicResource Brush.FG1}"/>
|
||||||
Margin="0,8,8,0"
|
</Button>
|
||||||
Focusable="True"
|
</TextBox.InnerRightContent>
|
||||||
Background="Transparent"
|
</TextBox>
|
||||||
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
|
|
||||||
ScrollViewer.VerticalScrollBarVisibility="Auto"
|
|
||||||
ItemsSource="{Binding Rows}"
|
|
||||||
SelectionMode="Single"
|
|
||||||
Loaded="SetupTreeViewDragAndDrop"
|
|
||||||
LostFocus="OnTreeViewLostFocus"
|
|
||||||
KeyDown="OnTreeViewKeyDown">
|
|
||||||
<ListBox.Styles>
|
|
||||||
<Style Selector="ListBox">
|
|
||||||
<Setter Property="FocusAdorner">
|
|
||||||
<FocusAdornerTemplate>
|
|
||||||
<Border Background="Transparent" BorderThickness="0"/>
|
|
||||||
</FocusAdornerTemplate>
|
|
||||||
</Setter>
|
|
||||||
</Style>
|
|
||||||
|
|
||||||
<Style Selector="ListBoxItem" x:DataType="vm:RepositoryNode">
|
|
||||||
<Setter Property="Margin" Value="0"/>
|
|
||||||
<Setter Property="Padding" Value="0"/>
|
|
||||||
<Setter Property="Height" Value="30"/>
|
|
||||||
<Setter Property="CornerRadius" Value="4"/>
|
|
||||||
<Setter Property="FocusAdorner">
|
|
||||||
<FocusAdornerTemplate>
|
|
||||||
<Border Background="Transparent" BorderThickness="0"/>
|
|
||||||
</FocusAdornerTemplate>
|
|
||||||
</Setter>
|
|
||||||
</Style>
|
|
||||||
</ListBox.Styles>
|
|
||||||
|
|
||||||
<ListBox.ItemsPanel>
|
<!-- Repository Tree -->
|
||||||
<ItemsPanelTemplate>
|
<v:RepositoryListBox Grid.Row="1"
|
||||||
<VirtualizingStackPanel Orientation="Vertical"/>
|
x:Name="TreeContainer"
|
||||||
</ItemsPanelTemplate>
|
Margin="0,8,8,0"
|
||||||
</ListBox.ItemsPanel>
|
Focusable="True"
|
||||||
|
Background="Transparent"
|
||||||
|
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
|
||||||
|
ScrollViewer.VerticalScrollBarVisibility="Auto"
|
||||||
|
ItemsSource="{Binding Rows}"
|
||||||
|
SelectionMode="Single"
|
||||||
|
Loaded="SetupTreeViewDragAndDrop"
|
||||||
|
LostFocus="OnTreeViewLostFocus"
|
||||||
|
KeyDown="OnTreeViewKeyDown">
|
||||||
|
<ListBox.Styles>
|
||||||
|
<Style Selector="ListBox">
|
||||||
|
<Setter Property="FocusAdorner">
|
||||||
|
<FocusAdornerTemplate>
|
||||||
|
<Border Background="Transparent" BorderThickness="0"/>
|
||||||
|
</FocusAdornerTemplate>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
|
||||||
<ListBox.ContextMenu>
|
<Style Selector="ListBoxItem" x:DataType="vm:RepositoryNode">
|
||||||
<ContextMenu>
|
<Setter Property="Margin" Value="0"/>
|
||||||
<MenuItem Header="{DynamicResource Text.Welcome.AddRootFolder}" Command="{Binding AddRootNode}">
|
<Setter Property="Padding" Value="0"/>
|
||||||
<MenuItem.Icon>
|
<Setter Property="Height" Value="30"/>
|
||||||
<Path Width="12" Height="12" Data="{DynamicResource Icons.Folder.Add}"/>
|
<Setter Property="CornerRadius" Value="4"/>
|
||||||
</MenuItem.Icon>
|
<Setter Property="FocusAdorner">
|
||||||
</MenuItem>
|
<FocusAdornerTemplate>
|
||||||
</ContextMenu>
|
<Border Background="Transparent" BorderThickness="0"/>
|
||||||
</ListBox.ContextMenu>
|
</FocusAdornerTemplate>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
</ListBox.Styles>
|
||||||
|
|
||||||
<ListBox.ItemTemplate>
|
<ListBox.ItemsPanel>
|
||||||
<DataTemplate DataType="vm:RepositoryNode">
|
<ItemsPanelTemplate>
|
||||||
<Grid Background="Transparent"
|
<VirtualizingStackPanel Orientation="Vertical"/>
|
||||||
Height="30"
|
</ItemsPanelTemplate>
|
||||||
ColumnDefinitions="16,18,Auto,*"
|
</ListBox.ItemsPanel>
|
||||||
Margin="{Binding Depth, Converter={x:Static c:IntConverters.ToTreeMargin}}"
|
|
||||||
Loaded="SetupTreeNodeDragAndDrop"
|
|
||||||
ContextRequested="OnTreeNodeContextRequested"
|
|
||||||
PointerPressed="OnPointerPressedTreeNode"
|
|
||||||
PointerMoved="OnPointerMovedOverTreeNode"
|
|
||||||
PointerReleased="OnPointerReleasedOnTreeNode"
|
|
||||||
DoubleTapped="OnDoubleTappedTreeNode"
|
|
||||||
ClipToBounds="True">
|
|
||||||
<v:RepositoryTreeNodeToggleButton Grid.Column="0"
|
|
||||||
Classes="tree_expander"
|
|
||||||
Focusable="False"
|
|
||||||
HorizontalAlignment="Center"
|
|
||||||
IsChecked="{Binding IsExpanded, Mode=OneWay}"
|
|
||||||
IsVisible="{Binding !IsRepository}"/>
|
|
||||||
|
|
||||||
<Path Grid.Column="1"
|
|
||||||
Width="14" Height="14"
|
|
||||||
Fill="{Binding Bookmark, Converter={x:Static c:IntConverters.ToBookmarkBrush}}"
|
|
||||||
HorizontalAlignment="Center"
|
|
||||||
Data="{StaticResource Icons.Bookmark}"
|
|
||||||
IsVisible="{Binding IsRepository}"/>
|
|
||||||
|
|
||||||
<ToggleButton Grid.Column="1"
|
<ListBox.ContextMenu>
|
||||||
Classes="folder"
|
<ContextMenu>
|
||||||
Focusable="False"
|
<MenuItem Header="{DynamicResource Text.Welcome.AddRootFolder}" Command="{Binding AddRootNode}">
|
||||||
Width="14" Height="14"
|
<MenuItem.Icon>
|
||||||
HorizontalAlignment="Left"
|
<Path Width="12" Height="12" Data="{DynamicResource Icons.Folder.Add}"/>
|
||||||
Foreground="{DynamicResource Brush.FG1}"
|
</MenuItem.Icon>
|
||||||
IsChecked="{Binding IsExpanded}"
|
</MenuItem>
|
||||||
IsVisible="{Binding !IsRepository}"/>
|
</ContextMenu>
|
||||||
|
</ListBox.ContextMenu>
|
||||||
|
|
||||||
<StackPanel Grid.Column="2" Orientation="Horizontal">
|
<ListBox.ItemTemplate>
|
||||||
<TextBlock Classes="primary" VerticalAlignment="Center" Text="{Binding Name}"/>
|
<DataTemplate DataType="vm:RepositoryNode">
|
||||||
<Path Margin="2,0,0,0"
|
<Grid Background="Transparent"
|
||||||
Width="12" Height="12"
|
Height="30"
|
||||||
Data="{StaticResource Icons.Error}"
|
ColumnDefinitions="16,18,Auto,*"
|
||||||
Fill="Orange"
|
Margin="{Binding Depth, Converter={x:Static c:IntConverters.ToTreeMargin}}"
|
||||||
IsVisible="{Binding IsInvalid}"/>
|
Loaded="SetupTreeNodeDragAndDrop"
|
||||||
</StackPanel>
|
ContextRequested="OnTreeNodeContextRequested"
|
||||||
|
PointerPressed="OnPointerPressedTreeNode"
|
||||||
<TextBlock Grid.Column="3"
|
PointerMoved="OnPointerMovedOverTreeNode"
|
||||||
Classes="primary"
|
PointerReleased="OnPointerReleasedOnTreeNode"
|
||||||
Margin="8,0"
|
DoubleTapped="OnDoubleTappedTreeNode"
|
||||||
HorizontalAlignment="Right" VerticalAlignment="Center"
|
ClipToBounds="True">
|
||||||
|
<v:RepositoryTreeNodeToggleButton Grid.Column="0"
|
||||||
|
Classes="tree_expander"
|
||||||
|
Focusable="False"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
IsChecked="{Binding IsExpanded, Mode=OneWay}"
|
||||||
|
IsVisible="{Binding !IsRepository}"/>
|
||||||
|
|
||||||
|
<Path Grid.Column="1"
|
||||||
|
Width="14" Height="14"
|
||||||
|
Fill="{Binding Bookmark, Converter={x:Static c:IntConverters.ToBookmarkBrush}}"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
Data="{StaticResource Icons.Bookmark}"
|
||||||
|
IsVisible="{Binding IsRepository}"/>
|
||||||
|
|
||||||
|
<ToggleButton Grid.Column="1"
|
||||||
|
Classes="folder"
|
||||||
|
Focusable="False"
|
||||||
|
Width="14" Height="14"
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
Foreground="{DynamicResource Brush.FG1}"
|
||||||
|
IsChecked="{Binding IsExpanded}"
|
||||||
|
IsVisible="{Binding !IsRepository}"/>
|
||||||
|
|
||||||
|
<StackPanel Grid.Column="2" Orientation="Horizontal">
|
||||||
|
<TextBlock Classes="primary" VerticalAlignment="Center" Text="{Binding Name}"/>
|
||||||
|
<Path Margin="2,0,0,0"
|
||||||
|
Width="12" Height="12"
|
||||||
|
Data="{StaticResource Icons.Error}"
|
||||||
|
Fill="Orange"
|
||||||
|
IsVisible="{Binding IsInvalid}"/>
|
||||||
|
</StackPanel>
|
||||||
|
|
||||||
|
<Border Grid.Column="3" Margin="8,0" VerticalAlignment="Center" ClipToBounds="True">
|
||||||
|
<TextBlock Classes="primary"
|
||||||
|
HorizontalAlignment="Right"
|
||||||
Foreground="{DynamicResource Brush.FG2}"
|
Foreground="{DynamicResource Brush.FG2}"
|
||||||
Text="{Binding Id, Converter={x:Static c:PathConverters.RelativeToHome}}"
|
Text="{Binding Id, Converter={x:Static c:PathConverters.RelativeToHome}}"
|
||||||
IsVisible="{Binding IsRepository}"/>
|
IsVisible="{Binding IsRepository}"/>
|
||||||
</Grid>
|
</Border>
|
||||||
</DataTemplate>
|
</Grid>
|
||||||
</ListBox.ItemTemplate>
|
</DataTemplate>
|
||||||
</v:RepositoryListBox>
|
</ListBox.ItemTemplate>
|
||||||
</Grid>
|
</v:RepositoryListBox>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<!-- Tips -->
|
<!-- Tips -->
|
||||||
|
|
Loading…
Reference in a new issue