1/* 2 * Copyright (C) 2007 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.ddmuilib; 18 19import org.eclipse.jface.preference.IPreferenceStore; 20import org.eclipse.swt.events.ControlEvent; 21import org.eclipse.swt.events.ControlListener; 22import org.eclipse.swt.widgets.Table; 23import org.eclipse.swt.widgets.TableColumn; 24import org.eclipse.swt.widgets.Tree; 25import org.eclipse.swt.widgets.TreeColumn; 26 27/** 28 * Utility class to help using Table objects. 29 * 30 */ 31public final class TableHelper { 32 /** 33 * Create a TableColumn with the specified parameters. If a 34 * <code>PreferenceStore</code> object and a preference entry name String 35 * object are provided then the column will listen to change in its width 36 * and update the preference store accordingly. 37 * 38 * @param parent The Table parent object 39 * @param header The header string 40 * @param style The column style 41 * @param sample_text A sample text to figure out column width if preference 42 * value is missing 43 * @param pref_name The preference entry name for column width 44 * @param prefs The preference store 45 * @return The TableColumn object that was created 46 */ 47 public static TableColumn createTableColumn(Table parent, String header, 48 int style, String sample_text, final String pref_name, 49 final IPreferenceStore prefs) { 50 51 // create the column 52 TableColumn col = new TableColumn(parent, style); 53 54 // if there is no pref store or the entry is missing, we use the sample 55 // text and pack the column. 56 // Otherwise we just read the width from the prefs and apply it. 57 if (prefs == null || prefs.contains(pref_name) == false) { 58 col.setText(sample_text); 59 col.pack(); 60 61 // init the prefs store with the current value 62 if (prefs != null) { 63 prefs.setValue(pref_name, col.getWidth()); 64 } 65 } else { 66 col.setWidth(prefs.getInt(pref_name)); 67 } 68 69 // set the header 70 col.setText(header); 71 72 // if there is a pref store and a pref entry name, then we setup a 73 // listener to catch column resize to put store the new width value. 74 if (prefs != null && pref_name != null) { 75 col.addControlListener(new ControlListener() { 76 @Override 77 public void controlMoved(ControlEvent e) { 78 } 79 80 @Override 81 public void controlResized(ControlEvent e) { 82 // get the new width 83 int w = ((TableColumn)e.widget).getWidth(); 84 85 // store in pref store 86 prefs.setValue(pref_name, w); 87 } 88 }); 89 } 90 91 return col; 92 } 93 94 /** 95 * Create a TreeColumn with the specified parameters. If a 96 * <code>PreferenceStore</code> object and a preference entry name String 97 * object are provided then the column will listen to change in its width 98 * and update the preference store accordingly. 99 * 100 * @param parent The Table parent object 101 * @param header The header string 102 * @param style The column style 103 * @param sample_text A sample text to figure out column width if preference 104 * value is missing 105 * @param pref_name The preference entry name for column width 106 * @param prefs The preference store 107 */ 108 public static void createTreeColumn(Tree parent, String header, int style, 109 String sample_text, final String pref_name, 110 final IPreferenceStore prefs) { 111 112 // create the column 113 TreeColumn col = new TreeColumn(parent, style); 114 115 // if there is no pref store or the entry is missing, we use the sample 116 // text and pack the column. 117 // Otherwise we just read the width from the prefs and apply it. 118 if (prefs == null || prefs.contains(pref_name) == false) { 119 col.setText(sample_text); 120 col.pack(); 121 122 // init the prefs store with the current value 123 if (prefs != null) { 124 prefs.setValue(pref_name, col.getWidth()); 125 } 126 } else { 127 col.setWidth(prefs.getInt(pref_name)); 128 } 129 130 // set the header 131 col.setText(header); 132 133 // if there is a pref store and a pref entry name, then we setup a 134 // listener to catch column resize to put store the new width value. 135 if (prefs != null && pref_name != null) { 136 col.addControlListener(new ControlListener() { 137 @Override 138 public void controlMoved(ControlEvent e) { 139 } 140 141 @Override 142 public void controlResized(ControlEvent e) { 143 // get the new width 144 int w = ((TreeColumn)e.widget).getWidth(); 145 146 // store in pref store 147 prefs.setValue(pref_name, w); 148 } 149 }); 150 } 151 } 152 153 /** 154 * Create a TreeColumn with the specified parameters. If a 155 * <code>PreferenceStore</code> object and a preference entry name String 156 * object are provided then the column will listen to change in its width 157 * and update the preference store accordingly. 158 * 159 * @param parent The Table parent object 160 * @param header The header string 161 * @param style The column style 162 * @param width the width of the column if the preference value is missing 163 * @param pref_name The preference entry name for column width 164 * @param prefs The preference store 165 */ 166 public static void createTreeColumn(Tree parent, String header, int style, 167 int width, final String pref_name, 168 final IPreferenceStore prefs) { 169 170 // create the column 171 TreeColumn col = new TreeColumn(parent, style); 172 173 // if there is no pref store or the entry is missing, we use the sample 174 // text and pack the column. 175 // Otherwise we just read the width from the prefs and apply it. 176 if (prefs == null || prefs.contains(pref_name) == false) { 177 col.setWidth(width); 178 179 // init the prefs store with the current value 180 if (prefs != null) { 181 prefs.setValue(pref_name, width); 182 } 183 } else { 184 col.setWidth(prefs.getInt(pref_name)); 185 } 186 187 // set the header 188 col.setText(header); 189 190 // if there is a pref store and a pref entry name, then we setup a 191 // listener to catch column resize to put store the new width value. 192 if (prefs != null && pref_name != null) { 193 col.addControlListener(new ControlListener() { 194 @Override 195 public void controlMoved(ControlEvent e) { 196 } 197 198 @Override 199 public void controlResized(ControlEvent e) { 200 // get the new width 201 int w = ((TreeColumn)e.widget).getWidth(); 202 203 // store in pref store 204 prefs.setValue(pref_name, w); 205 } 206 }); 207 } 208 } 209} 210