@@ -703,12 +703,117 @@ public ContextMenu MakeContextMenu(ListBox list)
703703 return menu ;
704704 }
705705
706+ private Models . FilterMode GetFilterMode ( string pattern )
707+ {
708+ foreach ( var filter in _repo . Settings . HistoriesFilters )
709+ {
710+ if ( filter . Pattern . Equals ( pattern , StringComparison . Ordinal ) )
711+ return filter . Mode ;
712+ }
713+
714+ return Models . FilterMode . None ;
715+ }
716+
717+ private void FillBranchVisibilityMenu ( MenuItem submenu , Models . Branch branch )
718+ {
719+ var visibility = new MenuItem ( ) ;
720+ visibility . Icon = App . CreateMenuIcon ( "Icons.Eye" ) ;
721+ visibility . Header = App . Text ( "Repository.FilterCommits" ) ;
722+
723+ var exclude = new MenuItem ( ) ;
724+ exclude . Icon = App . CreateMenuIcon ( "Icons.EyeClose" ) ;
725+ exclude . Header = App . Text ( "Repository.FilterCommits.Exclude" ) ;
726+ exclude . Click += ( _ , e ) =>
727+ {
728+ _repo . SetBranchFilterMode ( branch , Models . FilterMode . Excluded ) ;
729+ e . Handled = true ;
730+ } ;
731+
732+ var filterMode = GetFilterMode ( branch . FullName ) ;
733+ if ( filterMode == Models . FilterMode . None )
734+ {
735+ var include = new MenuItem ( ) ;
736+ include . Icon = App . CreateMenuIcon ( "Icons.Filter" ) ;
737+ include . Header = App . Text ( "Repository.FilterCommits.Include" ) ;
738+ include . Click += ( _ , e ) =>
739+ {
740+ _repo . SetBranchFilterMode ( branch , Models . FilterMode . Included ) ;
741+ e . Handled = true ;
742+ } ;
743+ visibility . Items . Add ( include ) ;
744+ visibility . Items . Add ( exclude ) ;
745+ }
746+ else
747+ {
748+ var unset = new MenuItem ( ) ;
749+ unset . Header = App . Text ( "Repository.FilterCommits.Default" ) ;
750+ unset . Click += ( _ , e ) =>
751+ {
752+ _repo . SetBranchFilterMode ( branch , Models . FilterMode . None ) ;
753+ e . Handled = true ;
754+ } ;
755+ visibility . Items . Add ( exclude ) ;
756+ visibility . Items . Add ( unset ) ;
757+ }
758+
759+ submenu . Items . Add ( visibility ) ;
760+ submenu . Items . Add ( new MenuItem ( ) { Header = "-" } ) ;
761+ }
762+
763+ private void FillTagVisibilityMenu ( MenuItem submenu , Models . Tag tag )
764+ {
765+ var visibility = new MenuItem ( ) ;
766+ visibility . Icon = App . CreateMenuIcon ( "Icons.Eye" ) ;
767+ visibility . Header = App . Text ( "Repository.FilterCommits" ) ;
768+
769+ var exclude = new MenuItem ( ) ;
770+ exclude . Icon = App . CreateMenuIcon ( "Icons.EyeClose" ) ;
771+ exclude . Header = App . Text ( "Repository.FilterCommits.Exclude" ) ;
772+ exclude . Click += ( _ , e ) =>
773+ {
774+ _repo . SetTagFilterMode ( tag , Models . FilterMode . Excluded ) ;
775+ e . Handled = true ;
776+ } ;
777+
778+ var filterMode = GetFilterMode ( tag . Name ) ;
779+ if ( filterMode == Models . FilterMode . None )
780+ {
781+ var include = new MenuItem ( ) ;
782+ include . Icon = App . CreateMenuIcon ( "Icons.Filter" ) ;
783+ include . Header = App . Text ( "Repository.FilterCommits.Include" ) ;
784+ include . Click += ( _ , e ) =>
785+ {
786+ _repo . SetTagFilterMode ( tag , Models . FilterMode . Included ) ;
787+ e . Handled = true ;
788+ } ;
789+ visibility . Items . Add ( include ) ;
790+ visibility . Items . Add ( exclude ) ;
791+ }
792+ else
793+ {
794+ var unset = new MenuItem ( ) ;
795+ unset . Header = App . Text ( "Repository.FilterCommits.Default" ) ;
796+ unset . Click += ( _ , e ) =>
797+ {
798+ _repo . SetTagFilterMode ( tag , Models . FilterMode . None ) ;
799+ e . Handled = true ;
800+ } ;
801+ visibility . Items . Add ( exclude ) ;
802+ visibility . Items . Add ( unset ) ;
803+ }
804+
805+ submenu . Items . Add ( visibility ) ;
806+ submenu . Items . Add ( new MenuItem ( ) { Header = "-" } ) ;
807+ }
808+
706809 private void FillCurrentBranchMenu ( ContextMenu menu , Models . Branch current )
707810 {
708811 var submenu = new MenuItem ( ) ;
709812 submenu . Icon = App . CreateMenuIcon ( "Icons.Branch" ) ;
710813 submenu . Header = current . Name ;
711814
815+ FillBranchVisibilityMenu ( submenu , current ) ;
816+
712817 if ( ! string . IsNullOrEmpty ( current . Upstream ) )
713818 {
714819 var upstream = current . Upstream . Substring ( 13 ) ;
@@ -786,6 +891,8 @@ private void FillOtherLocalBranchMenu(ContextMenu menu, Models.Branch branch, Mo
786891 submenu . Icon = App . CreateMenuIcon ( "Icons.Branch" ) ;
787892 submenu . Header = branch . Name ;
788893
894+ FillBranchVisibilityMenu ( submenu , branch ) ;
895+
789896 var checkout = new MenuItem ( ) ;
790897 checkout . Header = new Views . NameHighlightedTextBlock ( "BranchCM.Checkout" , branch . Name ) ;
791898 checkout . Icon = App . CreateMenuIcon ( "Icons.Check" ) ;
@@ -858,6 +965,8 @@ private void FillRemoteBranchMenu(ContextMenu menu, Models.Branch branch, Models
858965 submenu . Icon = App . CreateMenuIcon ( "Icons.Branch" ) ;
859966 submenu . Header = name ;
860967
968+ FillBranchVisibilityMenu ( submenu , branch ) ;
969+
861970 var checkout = new MenuItem ( ) ;
862971 checkout . Header = new Views . NameHighlightedTextBlock ( "BranchCM.Checkout" , name ) ;
863972 checkout . Icon = App . CreateMenuIcon ( "Icons.Check" ) ;
@@ -903,6 +1012,8 @@ private void FillTagMenu(ContextMenu menu, Models.Tag tag, Models.Branch current
9031012 submenu . Icon = App . CreateMenuIcon ( "Icons.Tag" ) ;
9041013 submenu . MinWidth = 200 ;
9051014
1015+ FillTagVisibilityMenu ( submenu , tag ) ;
1016+
9061017 var push = new MenuItem ( ) ;
9071018 push . Header = new Views . NameHighlightedTextBlock ( "TagCM.Push" , tag . Name ) ;
9081019 push . Icon = App . CreateMenuIcon ( "Icons.Push" ) ;
0 commit comments