void IContextMenu.InvokeCommand(IntPtr pici) { if (fileNames.Count == 1) if (Directory.Exists(fileNames[0])) GitCommands.Settings.WorkingDir = fileNames[0]; if (string.IsNullOrEmpty(GitCommands.Settings.WorkingDir) && fileNames.Count > 0) GitCommands.Settings.WorkingDir = fileNames[0].Substring(0, fileNames[0].LastIndexOf('\\')); if (string.IsNullOrEmpty(GitCommands.Settings.WorkingDir)) GitCommands.Settings.WorkingDir = Directory.GetCurrentDirectory(); try { Type typINVOKECOMMANDINFO = Type.GetType("ShellExt.INVOKECOMMANDINFO"); INVOKECOMMANDINFO ici = (INVOKECOMMANDINFO)Marshal.PtrToStructure(pici, typINVOKECOMMANDINFO); switch (ici.verb-1) { case 0://Add file { FormAddFiles form = new FormAddFiles(); form.Show(); break; } case 1://Branch { FormBranch form = new FormBranch(); form.Show(); break; } case 2://Browse { FormBrowse form = new FormBrowse(); form.Show(); break; } case 3://Checkout { FormCheckout form = new FormCheckout(); form.Show(); break; } case 4://Clone { FormClone form = new FormClone(); form.Show(); break; } case 5://Commit { FormCommit form = new FormCommit(); form.Show(); break; } case 6://Diff { FormDiff form = new FormDiff(); form.Show(); break; } case 7://Init { GitCommands.Init cmd = new GitCommands.Init(new GitCommands.InitDto()); cmd.Execute(); MessageBox.Show(cmd.Dto.Result); break; } case 8://File history { if (fileNames.Count > 0) { FormFileHistory form = new FormFileHistory(fileNames[0]); form.Show(); } break; } case 9://ViewPatch { ViewPatch patchapply = new ViewPatch(); patchapply.Show(); break; } case 10://MergePatch { MergePatch form = new MergePatch(); form.Show(); break; } case 11://Push { FormPush form = new FormPush(); form.Show(); break; } case 12://Pull { FormPull form = new FormPull(); form.Show(); break; } case 13://Bash { GitCommands.GitCommands.RunBash(); break; } case 14://Gui { GitCommands.GitCommands.RunGui(); break; } default: break; } } catch(Exception exe) { EventLog.WriteEntry("FileHashShell", exe.ToString()); } //fileNames }
public void StartCommitDialog(Action<FormCommit> refresh, Action finish = null, bool alwaysInTaskbar = true, IWin32Window owner = null, bool showWhenNoChanges = false, bool blocking = false) { if (RequiresValidWorkingDir(owner)) if (!InvokeEvent(owner, PreCommit)) refresh(null); else { var form = new FormCommit(); form.ShowInTaskbar |= alwaysInTaskbar; Action Committed = () => { if (form.NeedRefresh && refresh != null) { refresh(form); form.NeedRefresh = false; } }; form.Committed += Committed; form.FormClosed += (s, e) => { try { InvokeEvent(owner, PostCommit); } finally { try { Committed(); } finally { if (finish != null) finish(); } } }; if (showWhenNoChanges) form.ShowWhenChanges(owner, blocking); else if (blocking) form.ShowDialog(owner); else form.Show(); } }