88
88
import org .eclipse .jface .viewers .ColumnPixelData ;
89
89
import org .eclipse .jface .viewers .ColumnWeightData ;
90
90
import org .eclipse .jface .viewers .IBaseLabelProvider ;
91
+ import org .eclipse .jface .viewers .IStructuredContentProvider ;
91
92
import org .eclipse .jface .viewers .IStructuredSelection ;
92
93
import org .eclipse .jface .viewers .ITableLabelProvider ;
93
94
import org .eclipse .jface .viewers .LabelProvider ;
96
97
import org .eclipse .jface .viewers .TableViewer ;
97
98
import org .eclipse .jface .viewers .Viewer ;
98
99
import org .eclipse .jface .viewers .ViewerComparator ;
100
+ import org .eclipse .jface .viewers .ViewerFilter ;
99
101
import org .eclipse .jface .window .Window ;
100
102
101
103
import org .eclipse .jface .text .Document ;
@@ -152,6 +154,8 @@ public abstract class TemplatePreferencePage extends PreferencePage implements I
152
154
*
153
155
* @since 3.3
154
156
*/
157
+ private final Map <String , Boolean > checkedStates = new HashMap <>();
158
+
155
159
protected static class EditTemplateDialog extends StatusDialog {
156
160
157
161
private final Template fOriginalTemplate ;
@@ -796,38 +800,45 @@ public void setContextTypeRegistry(ContextTypeRegistry registry) {
796
800
public void init (IWorkbench workbench ) {
797
801
}
798
802
803
+ private String getKey (TemplatePersistenceData data ) {
804
+ return data .getTemplate ().getName () + "|" + data .getTemplate ().getContextTypeId (); //$NON-NLS-1$
805
+ }
806
+
799
807
@ Override
800
808
protected Control createContents (Composite ancestor ) {
801
- Composite parent = new Composite (ancestor , SWT .NONE );
802
- GridLayout layout = new GridLayout ();
803
- layout . numColumns = 2 ;
804
- layout . marginHeight = 0 ;
805
- layout . marginWidth = 0 ;
806
- parent . setLayout ( layout );
807
-
808
- Composite innerParent = new Composite (parent , SWT .NONE );
809
- GridLayout innerLayout = new GridLayout ();
810
- innerLayout . numColumns = 2 ;
811
- innerLayout . marginHeight = 0 ;
812
- innerLayout . marginWidth = 0 ;
813
- innerParent . setLayout ( innerLayout );
814
- GridData gd = new GridData (GridData . FILL_BOTH );
815
- gd . horizontalSpan = 2 ;
816
- innerParent .setLayoutData (gd );
817
-
818
- Composite tableComposite = new Composite (innerParent , SWT .NONE );
819
- GridData data = new GridData (GridData . FILL_BOTH );
820
- data .widthHint = 360 ;
821
- data .heightHint = convertHeightInCharsToPixels (10 );
822
- tableComposite .setLayoutData (data );
823
-
824
- ColumnLayout columnLayout = new ColumnLayout ();
809
+ Composite parent = new Composite (ancestor , SWT .NONE );
810
+ parent . setLayout ( new GridLayout (1 , false ) );
811
+
812
+ Composite tcomposite = new Composite ( parent , SWT . NONE ) ;
813
+ tcomposite . setLayout ( new GridLayout ( 2 , false )) ;
814
+ tcomposite . setLayoutData ( new GridData ( SWT . FILL , SWT . FILL , true , true ) );
815
+
816
+ Composite fcomposite = new Composite (tcomposite , SWT .NONE );
817
+ fcomposite . setLayout ( new GridLayout (1 , false ) );
818
+ fcomposite . setLayoutData ( new GridData ( SWT . FILL , SWT . FILL , true , true )) ;
819
+
820
+ Text filterText = new Text ( fcomposite , SWT . BORDER | SWT . SEARCH | SWT . ICON_CANCEL ) ;
821
+ filterText . setMessage ( TemplatesMessages . TemplatePreferencePage_filterText );
822
+ GridData filterData = new GridData (SWT . FILL , SWT . CENTER , true , false );
823
+ filterData . widthHint = 360 ;
824
+ filterText .setLayoutData (filterData );
825
+
826
+ Composite tableComposite = new Composite (fcomposite , SWT .NONE );
827
+ GridData tableData = new GridData (SWT . FILL , SWT . FILL , true , true );
828
+ tableData .widthHint = 360 ;
829
+ tableData .heightHint = convertHeightInCharsToPixels (10 );
830
+ tableComposite .setLayoutData (tableData );
831
+
832
+ ColumnLayout columnLayout = new ColumnLayout ();
825
833
tableComposite .setLayout (columnLayout );
826
- Table table = new Table (tableComposite , SWT .CHECK | SWT .BORDER | SWT .MULTI | SWT .FULL_SELECTION | SWT .H_SCROLL | SWT .V_SCROLL );
834
+ Table table = new Table (tableComposite ,
835
+ SWT .CHECK | SWT .BORDER | SWT .MULTI | SWT .FULL_SELECTION | SWT .H_SCROLL | SWT .V_SCROLL );
827
836
828
837
table .setHeaderVisible (true );
829
838
table .setLinesVisible (true );
830
839
840
+ table .setLayoutData (new GridData (SWT .FILL , SWT .FILL , true , true ));
841
+
831
842
GC gc = new GC (getShell ());
832
843
gc .setFont (JFaceResources .getDialogFont ());
833
844
@@ -877,18 +888,52 @@ protected Control createContents(Composite ancestor) {
877
888
fTableViewer .addCheckStateListener (event -> {
878
889
TemplatePersistenceData d = (TemplatePersistenceData ) event .getElement ();
879
890
d .setEnabled (event .getChecked ());
891
+ checkedStates .put (getKey (d ), event .getChecked ());
880
892
});
881
893
882
894
BidiUtils .applyTextDirection (fTableViewer .getControl (), BidiUtils .BTD_DEFAULT );
883
895
884
- Composite buttons = new Composite (innerParent , SWT .NONE );
885
- buttons .setLayoutData (new GridData (GridData .VERTICAL_ALIGN_BEGINNING ));
886
- layout = new GridLayout ();
887
- layout .marginHeight = 0 ;
888
- layout .marginWidth = 0 ;
889
- buttons .setLayout (layout );
896
+ TemplateFilter filter = new TemplateFilter ();
897
+ fTableViewer .addFilter (filter );
898
+
899
+ filterText .addModifyListener (e -> {
900
+ filter .setSearchText (filterText .getText ());
901
+ for (Object element : fTableViewer .getCheckedElements ()) {
902
+ if (element instanceof TemplatePersistenceData data ) {
903
+ String key = getKey (data );
904
+ checkedStates .put (key , true );
905
+ }
906
+ }
907
+ for (Object element : ((IStructuredContentProvider ) fTableViewer .getContentProvider ())
908
+ .getElements (fTableViewer .getInput ())) {
909
+ if (element instanceof TemplatePersistenceData data ) {
910
+ String key = getKey (data );
911
+ if (!fTableViewer .getChecked (data )) {
912
+ checkedStates .putIfAbsent (key , false );
913
+ }
914
+ }
915
+ }
916
+ fTableViewer .refresh ();
917
+
918
+ for (Object element : ((IStructuredContentProvider ) fTableViewer .getContentProvider ())
919
+ .getElements (fTableViewer .getInput ())) {
920
+ if (element instanceof TemplatePersistenceData data ) {
921
+ Boolean checked = checkedStates .get (getKey (data ));
922
+ if (checked != null && checked ) {
923
+ fTableViewer .setChecked (data , true );
924
+ }
925
+ }
926
+ }
927
+ });
928
+
929
+ Composite buttons = new Composite (tcomposite , SWT .NONE );
930
+ buttons .setLayoutData (new GridData (SWT .FILL , SWT .TOP , false , false ));
931
+ GridLayout buttonLayout = new GridLayout ();
932
+ buttonLayout .marginHeight = 0 ;
933
+ buttonLayout .marginWidth = 0 ;
934
+ buttons .setLayout (buttonLayout );
890
935
891
- fAddButton = new Button (buttons , SWT .PUSH );
936
+ fAddButton = new Button (buttons , SWT .PUSH );
892
937
fAddButton .setText (TemplatesMessages .TemplatePreferencePage_new );
893
938
fAddButton .setLayoutData (getButtonGridData (fAddButton ));
894
939
fAddButton .addListener (SWT .Selection , e -> add ());
@@ -932,9 +977,7 @@ protected Control createContents(Composite ancestor) {
932
977
if (isShowFormatterSetting ()) {
933
978
fFormatButton = new Button (parent , SWT .CHECK );
934
979
fFormatButton .setText (TemplatesMessages .TemplatePreferencePage_use_code_formatter );
935
- GridData gd1 = new GridData ();
936
- gd1 .horizontalSpan = 2 ;
937
- fFormatButton .setLayoutData (gd1 );
980
+ fFormatButton .setLayoutData (new GridData (SWT .LEFT , SWT .CENTER , false , false ));
938
981
fFormatButton .setSelection (getPreferenceStore ().getBoolean (getFormatterPreferenceKey ()));
939
982
}
940
983
@@ -944,11 +987,26 @@ protected Control createContents(Composite ancestor) {
944
987
945
988
updateButtons ();
946
989
Dialog .applyDialogFont (parent );
947
- innerParent .layout ();
948
990
949
991
return parent ;
950
992
}
951
993
994
+ class TemplateFilter extends ViewerFilter {
995
+ private String searchString = "" ; //$NON-NLS-1$
996
+ public void setSearchText (String s ) {
997
+ searchString = (s == null ) ? "" : s .toLowerCase (); //$NON-NLS-1$
998
+ }
999
+ @ Override
1000
+ public boolean select (Viewer viewer , Object parentElement , Object element ) {
1001
+ if (searchString .isEmpty ())
1002
+ return true ;
1003
+ Template template = ((TemplatePersistenceData ) element ).getTemplate ();
1004
+ return template .getName ().toLowerCase ().contains (searchString )
1005
+ || template .getContextTypeId ().toLowerCase ().contains (searchString )
1006
+ || template .getDescription ().toLowerCase ().contains (searchString );
1007
+ }
1008
+ }
1009
+
952
1010
/*
953
1011
* @since 3.2
954
1012
*/
0 commit comments