11import { Disposable , Event , EventEmitter , ProviderResult , TreeDataProvider , TreeItem , TreeView , window } from 'vscode' ;
22import { DidChangeEnvironmentEventArgs , EnvironmentGroupInfo , PythonEnvironment } from '../../api' ;
3+ import { ProjectViews } from '../../common/localize' ;
4+ import { createSimpleDebounce } from '../../common/utils/debounce' ;
35import {
46 DidChangeEnvironmentManagerEventArgs ,
57 DidChangePackageManagerEventArgs ,
@@ -9,18 +11,19 @@ import {
911 InternalEnvironmentManager ,
1012 InternalPackageManager ,
1113} from '../../internal.api' ;
14+ import { TemporaryStateManager } from './temporaryStateManager' ;
1215import {
13- EnvTreeItem ,
16+ EnvInfoTreeItem ,
1417 EnvManagerTreeItem ,
15- PythonEnvTreeItem ,
16- PackageTreeItem ,
18+ EnvTreeItem ,
1719 EnvTreeItemKind ,
1820 NoPythonEnvTreeItem ,
19- EnvInfoTreeItem ,
21+ PackageTreeItem ,
22+ PythonEnvTreeItem ,
2023 PythonGroupEnvTreeItem ,
2124} from './treeViewItems' ;
22- import { createSimpleDebounce } from '../../common/utils/debounce' ;
23- import { ProjectViews } from '../../common/localize ';
25+
26+ const COPIED_STATE = 'copied ';
2427
2528export class EnvManagerView implements TreeDataProvider < EnvTreeItem > , Disposable {
2629 private treeView : TreeView < EnvTreeItem > ;
@@ -32,7 +35,7 @@ export class EnvManagerView implements TreeDataProvider<EnvTreeItem>, Disposable
3235 private selected : Map < string , string > = new Map ( ) ;
3336 private disposables : Disposable [ ] = [ ] ;
3437
35- public constructor ( public providers : EnvironmentManagers ) {
38+ public constructor ( public providers : EnvironmentManagers , private stateManager : TemporaryStateManager ) {
3639 this . treeView = window . createTreeView < EnvTreeItem > ( 'env-managers' , {
3740 treeDataProvider : this ,
3841 } ) ;
@@ -59,6 +62,15 @@ export class EnvManagerView implements TreeDataProvider<EnvTreeItem>, Disposable
5962 this . onDidChangePackageManager ( p ) ;
6063 } ) ,
6164 ) ;
65+
66+ this . disposables . push (
67+ this . stateManager . onDidChangeState ( ( { itemId } ) => {
68+ const view = this . revealMap . get ( itemId ) ;
69+ if ( view ) {
70+ this . fireDataChanged ( view ) ;
71+ }
72+ } ) ,
73+ ) ;
6274 }
6375
6476 dispose ( ) {
@@ -77,6 +89,17 @@ export class EnvManagerView implements TreeDataProvider<EnvTreeItem>, Disposable
7789 onDidChangeTreeData : Event < void | EnvTreeItem | EnvTreeItem [ ] | null | undefined > = this . treeDataChanged . event ;
7890
7991 getTreeItem ( element : EnvTreeItem ) : TreeItem | Thenable < TreeItem > {
92+ if ( element . kind === EnvTreeItemKind . environment && element instanceof PythonEnvTreeItem ) {
93+ const itemId = element . environment . envId . id ;
94+ const currentContext = element . treeItem . contextValue ?? '' ;
95+ if ( this . stateManager ?. hasState ( itemId , COPIED_STATE ) ) {
96+ if ( ! currentContext . includes ( COPIED_STATE ) ) {
97+ element . treeItem . contextValue = currentContext + COPIED_STATE + ';' ;
98+ }
99+ } else if ( currentContext . includes ( COPIED_STATE ) ) {
100+ element . treeItem . contextValue = currentContext . replace ( COPIED_STATE + ';' , '' ) ;
101+ }
102+ }
80103 return element . treeItem ;
81104 }
82105
@@ -202,7 +225,7 @@ export class EnvManagerView implements TreeDataProvider<EnvTreeItem>, Disposable
202225
203226 private onDidChangePackages ( args : InternalDidChangePackagesEventArgs ) {
204227 const view = Array . from ( this . revealMap . values ( ) ) . find (
205- ( v ) => v . environment . envId . id === args . environment . envId . id
228+ ( v ) => v . environment . envId . id === args . environment . envId . id ,
206229 ) ;
207230 if ( view ) {
208231 this . fireDataChanged ( view ) ;
0 commit comments