@@ -11,6 +11,12 @@ public List<LauncherPage> VisiblePages
1111 private set => SetProperty ( ref _visiblePages , value ) ;
1212 }
1313
14+ public List < Models . Submodule > VisibleSubmodules
15+ {
16+ get => _visibleSubmodules ;
17+ private set => SetProperty ( ref _visibleSubmodules , value ) ;
18+ }
19+
1420 public List < RepositoryNode > VisibleRepos
1521 {
1622 get => _visibleRepos ;
@@ -33,7 +39,23 @@ public LauncherPage SelectedPage
3339 set
3440 {
3541 if ( SetProperty ( ref _selectedPage , value ) && value != null )
42+ {
43+ SelectedSubmodule = null ;
3644 SelectedRepo = null ;
45+ }
46+ }
47+ }
48+
49+ public Models . Submodule SelectedSubmodule
50+ {
51+ get => _selectedSubmodule ;
52+ set
53+ {
54+ if ( SetProperty ( ref _selectedSubmodule , value ) && value != null )
55+ {
56+ SelectedPage = null ;
57+ SelectedRepo = null ;
58+ }
3759 }
3860 }
3961
@@ -43,7 +65,10 @@ public RepositoryNode SelectedRepo
4365 set
4466 {
4567 if ( SetProperty ( ref _selectedRepo , value ) && value != null )
68+ {
4669 SelectedPage = null ;
70+ SelectedSubmodule = null ;
71+ }
4772 }
4873 }
4974
@@ -70,10 +95,13 @@ public void OpenOrSwitchTo()
7095 _opened . Clear ( ) ;
7196 _visiblePages . Clear ( ) ;
7297 _visibleRepos . Clear ( ) ;
98+ _visibleSubmodules . Clear ( ) ;
7399 Close ( ) ;
74100
75101 if ( _selectedPage != null )
76102 _launcher . ActivePage = _selectedPage ;
103+ else if ( _selectedSubmodule != null && _launcher . ActivePage is { Data : Repository repo } )
104+ repo . OpenSubmodule ( _selectedSubmodule . Path ) ;
77105 else if ( _selectedRepo != null )
78106 _launcher . OpenRepositoryInTab ( _selectedRepo , null ) ;
79107 }
@@ -83,72 +111,80 @@ private void UpdateVisible()
83111 var pages = new List < LauncherPage > ( ) ;
84112 CollectVisiblePages ( pages ) ;
85113
114+ var submodules = new List < Models . Submodule > ( ) ;
115+ CollectVisibleSubmodules ( submodules ) ;
116+
86117 var repos = new List < RepositoryNode > ( ) ;
87118 CollectVisibleRepository ( repos , Preferences . Instance . RepositoryNodes ) ;
88119
89- var autoSelectPage = _selectedPage ;
90- var autoSelectRepo = _selectedRepo ;
91-
120+ object autoSelected = null ;
92121 if ( _selectedPage != null )
93122 {
94123 if ( pages . Contains ( _selectedPage ) )
95- {
96- // Keep selection
97- }
124+ autoSelected = _selectedPage ;
98125 else if ( pages . Count > 0 )
99- {
100- autoSelectPage = pages [ 0 ] ;
101- }
126+ autoSelected = pages [ 0 ] ;
127+ else if ( submodules . Count > 0 )
128+ autoSelected = submodules [ 0 ] ;
102129 else if ( repos . Count > 0 )
103- {
104- autoSelectPage = null ;
105- autoSelectRepo = repos [ 0 ] ;
106- }
107- else
108- {
109- autoSelectPage = null ;
110- }
130+ autoSelected = repos [ 0 ] ;
131+ }
132+ else if ( _selectedSubmodule != null )
133+ {
134+ if ( submodules . Contains ( _selectedSubmodule ) )
135+ autoSelected = _selectedSubmodule ;
136+ else if ( submodules . Count > 0 )
137+ autoSelected = submodules [ 0 ] ;
138+ else if ( pages . Count > 0 )
139+ autoSelected = pages [ 0 ] ;
140+ else if ( repos . Count > 0 )
141+ autoSelected = repos [ 0 ] ;
111142 }
112143 else if ( _selectedRepo != null )
113144 {
114145 if ( repos . Contains ( _selectedRepo ) )
115- {
116- // Keep selection
117- }
146+ autoSelected = _selectedRepo ;
118147 else if ( repos . Count > 0 )
119- {
120- autoSelectRepo = repos [ 0 ] ;
121- }
148+ autoSelected = repos [ 0 ] ;
122149 else if ( pages . Count > 0 )
123- {
124- autoSelectPage = pages [ 0 ] ;
125- autoSelectRepo = null ;
126- }
127- else
128- {
129- autoSelectRepo = null ;
130- }
150+ autoSelected = pages [ 0 ] ;
151+ else if ( submodules . Count > 0 )
152+ autoSelected = submodules [ 0 ] ;
131153 }
132154 else if ( pages . Count > 0 )
133155 {
134- autoSelectPage = pages [ 0 ] ;
135- autoSelectRepo = null ;
156+ autoSelected = pages [ 0 ] ;
136157 }
137- else if ( repos . Count > 0 )
158+ else if ( submodules . Count > 0 )
138159 {
139- autoSelectPage = null ;
140- autoSelectRepo = repos [ 0 ] ;
160+ autoSelected = submodules [ 0 ] ;
141161 }
142- else
162+ else if ( repos . Count > 0 )
143163 {
144- autoSelectPage = null ;
145- autoSelectRepo = null ;
164+ autoSelected = repos [ 0 ] ;
146165 }
147166
148167 VisiblePages = pages ;
168+ VisibleSubmodules = submodules ;
149169 VisibleRepos = repos ;
150- SelectedPage = autoSelectPage ;
151- SelectedRepo = autoSelectRepo ;
170+
171+ switch ( autoSelected )
172+ {
173+ case LauncherPage page :
174+ SelectedPage = page ;
175+ break ;
176+ case Models . Submodule submodule :
177+ SelectedSubmodule = submodule ;
178+ break ;
179+ case RepositoryNode repo :
180+ SelectedRepo = repo ;
181+ break ;
182+ default :
183+ SelectedPage = null ;
184+ SelectedSubmodule = null ;
185+ SelectedRepo = null ;
186+ break ;
187+ }
152188 }
153189
154190 private void CollectVisiblePages ( List < LauncherPage > pages )
@@ -185,12 +221,26 @@ private void CollectVisibleRepository(List<RepositoryNode> outs, List<Repository
185221 }
186222 }
187223
224+ private void CollectVisibleSubmodules ( List < Models . Submodule > outs )
225+ {
226+ if ( _launcher . ActivePage is { Data : Repository repo } && repo . Submodules . Count > 0 )
227+ {
228+ foreach ( var submodule in repo . Submodules )
229+ {
230+ if ( string . IsNullOrEmpty ( _searchFilter ) || submodule . Path . Contains ( _searchFilter , StringComparison . OrdinalIgnoreCase ) )
231+ outs . Add ( submodule ) ;
232+ }
233+ }
234+ }
235+
188236 private Launcher _launcher = null ;
189237 private HashSet < string > _opened = new HashSet < string > ( ) ;
190238 private List < LauncherPage > _visiblePages = [ ] ;
239+ private List < Models . Submodule > _visibleSubmodules = [ ] ;
191240 private List < RepositoryNode > _visibleRepos = [ ] ;
192241 private string _searchFilter = string . Empty ;
193242 private LauncherPage _selectedPage = null ;
243+ private Models . Submodule _selectedSubmodule = null ;
194244 private RepositoryNode _selectedRepo = null ;
195245 }
196246}
0 commit comments