1 27 package org.htmlparser.parserapplications.filterbuilder; 28 29 import java.awt.*; 30 31 import javax.swing.*; 32 import javax.swing.border.*; 33 34 import org.htmlparser.NodeFilter; 35 import org.htmlparser.parserapplications.filterbuilder.layouts.VerticalLayoutManager; 36 37 public class SubFilterList 38 extends 39 JPanel 40 { 41 protected int mExtra = 25; 43 protected Component mSpacer; 44 45 protected Filter mHome; 46 47 protected String mTitle; 48 49 protected int mMax; 50 51 59 public SubFilterList (Filter home, String title, int max) 60 { 61 mHome = home; 62 mTitle = title; 63 mMax = max; 64 65 setLayout (new VerticalLayoutManager ()); 68 addSpacer (); 69 setSelected (false); 70 } 71 72 77 public void setSelected (boolean selected) 78 { 79 if (selected) 80 setBorder ( 81 new CompoundBorder ( 82 new TitledBorder ( 83 null, 84 mTitle, 85 TitledBorder.LEFT, 86 TitledBorder.TOP), 87 new CompoundBorder ( 88 new LineBorder (Color.green, 2), 89 new EmptyBorder (1, 1, 1, 1)))); 90 else 91 setBorder ( 92 new CompoundBorder ( 93 new TitledBorder ( 94 null, 95 mTitle, 96 TitledBorder.LEFT, 97 TitledBorder.TOP), 98 new EmptyBorder (3,3,3,3))); 99 } 100 101 protected void addSpacer () 102 { 103 Dimension dimension; 104 Insets insets; 105 106 dimension = mHome.getSize (); 108 insets = mHome.getInsets (); 109 dimension.setSize (dimension.width - insets.left - insets.right, mExtra); 111 mSpacer = Box.createRigidArea (dimension); 112 add (mSpacer); 113 } 114 115 protected void removeSpacer () 116 { 117 remove (mSpacer); 118 mSpacer = null; 119 } 120 124 public Component[] getDropTargets () 125 { 126 return (new Component[] { this }); 127 } 128 129 133 public void addFilter (Filter filter) 134 { 135 int count; 136 137 count = getComponentCount (); 138 if (null != mSpacer) 139 count--; addFilter (filter, count); 141 } 142 143 148 public void addFilter (Filter filter, int index) 149 { 150 NodeFilter[] before; 151 NodeFilter[] after; 152 int offset; 153 154 add (filter, index); 155 before = mHome.getSubNodeFilters (); 156 after = new NodeFilter[before.length + 1]; 157 offset = 0; 158 for (int i = 0; i < after.length; i++) 159 after[i] = (i == index) ? filter : before[offset++]; 160 mHome.setSubNodeFilters (after); 161 if ((null != mSpacer) && (0 != mMax) && (after.length >= mMax)) 162 removeSpacer (); 163 } 164 165 169 public void removeFilter (Filter filter) 170 { 171 Filter[] filters; 172 int index; 173 174 filters = getFilters (); 175 index = -1; 176 for (int i = 0; ((-1 == index) && (i < filters.length)); i++) 177 if (filter == filters[i]) 178 index = i; 179 if (-1 != index) 180 removeFilter (index); 181 } 182 183 187 public void removeFilter (int index) 188 { 189 NodeFilter[] before; 190 NodeFilter[] after; 191 int offset; 192 193 remove (index); 194 before = mHome.getSubNodeFilters (); 195 if (0 != before.length) 196 { 197 after = new NodeFilter[before.length - 1]; 198 offset = 0; 199 for (int i = 0; i < before.length; i++) 200 if (i != index) 201 after[offset++] = before[i]; 202 mHome.setSubNodeFilters (after); 203 if ((null == mSpacer) && (0 != mMax) && (after.length < mMax)) 204 addSpacer (); 205 } 206 } 207 208 212 public Filter[] getFilters () 213 { 214 NodeFilter[] list; 215 Filter[] ret; 216 217 list = mHome.getSubNodeFilters (); 218 ret = new Filter[list.length]; 219 System.arraycopy (list, 0, ret, 0, list.length); 220 221 return (ret); 222 } 223 224 public boolean canAccept () 225 { 226 int count; 227 boolean ret; 228 229 if (0 == mMax) 230 ret = true; 231 else 232 { 233 count = getComponentCount (); 234 if (null != mSpacer) 235 count--; 236 ret = count < mMax; 237 } 238 239 return (ret); 240 } 241 242 250 public String toString (int indent, int level) 251 { 252 Filter[] filters; 253 StringBuffer ret; 254 255 ret = new StringBuffer (); 256 257 filters = getFilters (); 258 for (int i = 0; i < filters.length; i++) 259 { 260 ret.append (filters[i].toString ()); 261 if (i + 1 != filters.length) 262 ret.append ("\n"); 263 } 264 265 return (ret.toString ()); 266 } 267 268 } 269 | Popular Tags |