11import { Disposable , Event , EventEmitter , ProviderResult , TreeDataProvider , TreeItem , TreeView , window } from 'vscode' ;
2- import { EnvironmentGroupInfo , PythonEnvironment } from '../../api' ;
2+ import { DidChangeEnvironmentEventArgs , EnvironmentGroupInfo , PythonEnvironment } from '../../api' ;
33import {
44 DidChangeEnvironmentManagerEventArgs ,
55 DidChangePackageManagerEventArgs ,
@@ -32,6 +32,7 @@ export class EnvManagerView implements TreeDataProvider<EnvTreeItem>, Disposable
3232 private revealMap = new Map < string , PythonEnvTreeItem > ( ) ;
3333 private managerViews = new Map < string , EnvManagerTreeItem > ( ) ;
3434 private packageRoots = new Map < string , PackageRootTreeItem > ( ) ;
35+ private selected : Map < string , string > = new Map ( ) ;
3536 private disposables : Disposable [ ] = [ ] ;
3637
3738 public constructor ( public providers : EnvironmentManagers ) {
@@ -44,6 +45,7 @@ export class EnvManagerView implements TreeDataProvider<EnvTreeItem>, Disposable
4445 this . packageRoots . clear ( ) ;
4546 this . revealMap . clear ( ) ;
4647 this . managerViews . clear ( ) ;
48+ this . selected . clear ( ) ;
4749 } ) ,
4850 this . treeView ,
4951 this . treeDataChanged ,
@@ -99,7 +101,7 @@ export class EnvManagerView implements TreeDataProvider<EnvTreeItem>, Disposable
99101 const views : EnvTreeItem [ ] = [ ] ;
100102 const envs = await manager . getEnvironments ( 'all' ) ;
101103 envs . filter ( ( e ) => ! e . group ) . forEach ( ( env ) => {
102- const view = new PythonEnvTreeItem ( env , element as EnvManagerTreeItem ) ;
104+ const view = new PythonEnvTreeItem ( env , element as EnvManagerTreeItem , this . selected . get ( env . envId . id ) ) ;
103105 views . push ( view ) ;
104106 this . revealMap . set ( env . envId . id , view ) ;
105107 } ) ;
@@ -142,7 +144,7 @@ export class EnvManagerView implements TreeDataProvider<EnvTreeItem>, Disposable
142144 } ) ;
143145
144146 grouped . forEach ( ( env ) => {
145- const view = new PythonEnvTreeItem ( env , groupItem ) ;
147+ const view = new PythonEnvTreeItem ( env , groupItem , this . selected . get ( env . envId . id ) ) ;
146148 views . push ( view ) ;
147149 this . revealMap . set ( env . envId . id , view ) ;
148150 } ) ;
@@ -227,4 +229,29 @@ export class EnvManagerView implements TreeDataProvider<EnvTreeItem>, Disposable
227229 const roots = Array . from ( this . packageRoots . values ( ) ) . filter ( ( r ) => r . manager . id === args . manager . id ) ;
228230 this . fireDataChanged ( roots ) ;
229231 }
232+
233+ public environmentChanged ( e : DidChangeEnvironmentEventArgs ) {
234+ const views = [ ] ;
235+ if ( e . old ) {
236+ this . selected . delete ( e . old . envId . id ) ;
237+ let view : EnvTreeItem | undefined = this . packageRoots . get ( e . old . envId . id ) ;
238+ if ( ! view ) {
239+ view = this . managerViews . get ( e . old . envId . managerId ) ;
240+ }
241+ if ( view ) {
242+ views . push ( view ) ;
243+ }
244+ }
245+ if ( e . new ) {
246+ this . selected . set ( e . new . envId . id , e . uri === undefined ? 'global' : e . uri . fsPath ) ;
247+ let view : EnvTreeItem | undefined = this . packageRoots . get ( e . new . envId . id ) ;
248+ if ( ! view ) {
249+ view = this . managerViews . get ( e . new . envId . managerId ) ;
250+ }
251+ if ( view && ! views . includes ( view ) ) {
252+ views . push ( view ) ;
253+ }
254+ }
255+ this . fireDataChanged ( views ) ;
256+ }
230257}
0 commit comments