1
+ /*---------------------------------------------------------
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ *--------------------------------------------------------*/
4
+
5
+ import vscode = require( "vscode" ) ;
6
+ import QuickPickItem = vscode . QuickPickItem ;
7
+
8
+ export class CheckboxQuickPickItem {
9
+ name : string ;
10
+ isSelected : boolean ;
11
+ }
12
+
13
+ export class CheckboxQuickPick {
14
+ private static readonly confirm : string = "$(check)" ;
15
+ private static readonly checkboxOn : string = "[ x ]" ;
16
+ private static readonly checkboxOff : string = "[ ]" ;
17
+ private static readonly confirmPlaceHolder : string = "Select 'Confirm' to confirm change; Press 'esc' key to cancel changes" ;
18
+
19
+ public static show (
20
+ checkboxQuickPickItems : CheckboxQuickPickItem [ ] ,
21
+ callback : ( items : CheckboxQuickPickItem [ ] ) => void ) : void {
22
+ CheckboxQuickPick . showInner ( checkboxQuickPickItems . slice ( ) , callback ) ;
23
+ }
24
+
25
+ private static showInner (
26
+ items : CheckboxQuickPickItem [ ] ,
27
+ callback : ( items : CheckboxQuickPickItem [ ] ) => void ) : void {
28
+ vscode . window . showQuickPick (
29
+ CheckboxQuickPick . getQuickPickItems ( items ) ,
30
+ {
31
+ ignoreFocusOut : true ,
32
+ matchOnDescription : true ,
33
+ placeHolder : CheckboxQuickPick . confirmPlaceHolder
34
+ } ) . then ( ( selection ) => {
35
+ if ( ! selection ) {
36
+ return ;
37
+ }
38
+
39
+ if ( selection . label === CheckboxQuickPick . confirm ) {
40
+ callback ( items ) ;
41
+ return ;
42
+ }
43
+
44
+ let index : number = CheckboxQuickPick . getRuleIndex ( items , selection . description ) ;
45
+ CheckboxQuickPick . toggleSelection ( items [ index ] ) ;
46
+ CheckboxQuickPick . showInner ( items , callback ) ;
47
+ } ) ;
48
+ }
49
+
50
+ private static getRuleIndex ( items : CheckboxQuickPickItem [ ] , itemLabel : string ) : number {
51
+ return items . findIndex ( item => item . name === itemLabel ) ;
52
+ }
53
+
54
+ private static getQuickPickItems ( items : CheckboxQuickPickItem [ ] ) : QuickPickItem [ ] {
55
+ let quickPickItems : QuickPickItem [ ] = [ ] ;
56
+ quickPickItems . push ( { label : CheckboxQuickPick . confirm , description : "Confirm" } ) ;
57
+ items . forEach ( item =>
58
+ quickPickItems . push ( {
59
+ label : CheckboxQuickPick . convertToCheckBox ( item . isSelected ) , description : item . name
60
+ } ) ) ;
61
+ return quickPickItems ;
62
+ }
63
+
64
+ private static toggleSelection ( item : CheckboxQuickPickItem ) : void {
65
+ item . isSelected = ! item . isSelected ;
66
+ }
67
+
68
+ private static convertToCheckBox ( state : boolean ) : string {
69
+ if ( state ) {
70
+ return CheckboxQuickPick . checkboxOn ;
71
+ }
72
+ else {
73
+ return CheckboxQuickPick . checkboxOff ;
74
+ }
75
+ }
76
+ }
0 commit comments