View Javadoc
1 package net.sourceforge.pmd.swingui; 2 3 import net.sourceforge.pmd.PMDDirectory; 4 import net.sourceforge.pmd.PMDException; 5 import net.sourceforge.pmd.swingui.event.ListenerList; 6 import net.sourceforge.pmd.swingui.event.SetupFilesEvent; 7 import net.sourceforge.pmd.swingui.event.SetupFilesEventListener; 8 9 import javax.swing.ImageIcon; 10 import javax.swing.JFrame; 11 import javax.swing.JMenuBar; 12 import javax.swing.JTabbedPane; 13 import javax.swing.UIManager; 14 import javax.swing.event.ChangeEvent; 15 import javax.swing.event.ChangeListener; 16 import java.awt.Component; 17 import java.awt.Cursor; 18 import java.awt.Dimension; 19 import java.awt.Toolkit; 20 import java.awt.event.MouseAdapter; 21 import java.awt.event.MouseEvent; 22 import java.io.File; 23 24 /*** 25 * 26 * @author Donald A. Leckie 27 * @since August 17, 2002 28 * @version $Revision: 1.38 $, $Date: 2003/05/28 18:08:32 $ 29 */ 30 public class PMDViewer extends JFrame { 31 32 private int m_disabledCounter; 33 private boolean m_firstLayout = true; 34 private TabbedPane m_tabbedPane; 35 private GlassPaneMouseListener m_glassPaneMouseListener; 36 private static PMDViewer m_pmdViewer; 37 38 /*** 39 ******************************************************************************* 40 * 41 */ 42 private PMDViewer() { 43 super("PMD Java Source Code Analyzer"); 44 45 Dimension windowSize; 46 Dimension screenSize; 47 48 m_pmdViewer = this; 49 windowSize = ComponentFactory.adjustWindowSize(1200, 1000); 50 screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 51 52 if (windowSize.width >= screenSize.width) { 53 windowSize.width = screenSize.width - 10; 54 } 55 56 if (windowSize.height >= screenSize.height) { 57 windowSize.height = screenSize.height - 20; 58 } 59 60 int windowLocationX = (screenSize.width - windowSize.width) / 2; 61 int windowLocationY = (screenSize.height - windowSize.height) / 2; 62 63 setSize(windowSize); 64 setLocation(windowLocationX, windowLocationY); 65 setResizable(true); 66 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 67 68 try { 69 PMDDirectory.open(Preferences.getPreferences().getCurrentPathToPMD()); 70 } catch (PMDException pmdException) { 71 String message = pmdException.getMessage(); 72 Exception exception = pmdException.getReason(); 73 MessageDialog.show(this, message, exception); 74 } 75 76 m_tabbedPane = new TabbedPane(); 77 getContentPane().add(m_tabbedPane); 78 79 ImageIcon image = (ImageIcon) UIManager.get("pmdLogoImage"); 80 setIconImage(image.getImage()); 81 82 m_glassPaneMouseListener = new GlassPaneMouseListener(); 83 ListenerList.addListener((SetupFilesEventListener) new SetupFilesEventHandler()); 84 } 85 86 /*** 87 ********************************************************************************* 88 * 89 */ 90 public void setVisible(boolean visible) { 91 super.setVisible(visible); 92 93 if (visible && m_firstLayout) { 94 m_tabbedPane.adjustSplitPaneDividerLocation(); 95 m_firstLayout = false; 96 } 97 } 98 99 /*** 100 ********************************************************************************* 101 * 102 * @return 103 */ 104 public static final PMDViewer getViewer() { 105 return m_pmdViewer; 106 } 107 108 /*** 109 ********************************************************************************* 110 * 111 */ 112 public static final void run() { 113 try { 114 LoadRootDirectories loadRootDirectories = new LoadRootDirectories(); 115 loadRootDirectories.start(); 116 117 // Setup the User Interface based on this computer's operating system. 118 // This must be done before calling Java and Swing classes that call the GUI. 119 UIManager.setLookAndFeel("net.sourceforge.pmd.swingui.PMDLookAndFeel"); 120 121 PMDViewer pmdViewer = new PMDViewer(); 122 pmdViewer.setVisible(true); 123 SetupFilesEvent.notifySetFileList(pmdViewer, loadRootDirectories.getDirectories()); 124 125 } catch (Exception exception) { 126 exception.printStackTrace(); 127 } catch (Error error) { 128 error.printStackTrace(); 129 } 130 131 return; 132 } 133 134 /*** 135 ********************************************************************************* 136 * 137 * @param enable 138 */ 139 protected void setEnableViewer(boolean enable) { 140 if (enable) { 141 m_disabledCounter--; 142 143 if (m_disabledCounter == 0) { 144 Component glassPane = getGlassPane(); 145 glassPane.setVisible(false); 146 glassPane.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); 147 glassPane.removeMouseListener(m_glassPaneMouseListener); 148 m_tabbedPane.setEnabled(true); 149 JMenuBar menuBar = getJMenuBar(); 150 int menuCount = menuBar.getMenuCount(); 151 152 for (int n = 0; n < menuCount; n++) { 153 menuBar.getMenu(n).setEnabled(true); 154 } 155 } 156 } else { 157 if (m_disabledCounter == 0) { 158 Component glassPane = getGlassPane(); 159 glassPane.setVisible(true); 160 glassPane.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); 161 glassPane.addMouseListener(m_glassPaneMouseListener); 162 m_tabbedPane.setEnabled(false); 163 JMenuBar menuBar = getJMenuBar(); 164 int menuCount = menuBar.getMenuCount(); 165 166 for (int n = 0; n < menuCount; n++) { 167 menuBar.getMenu(n).setEnabled(false); 168 } 169 } 170 171 m_disabledCounter++; 172 } 173 } 174 175 /*** 176 ********************************************************************************* 177 * 178 * @param args 179 */ 180 public static void main(String[] args) { 181 run(); 182 } 183 184 /*** 185 ********************************************************************************* 186 ********************************************************************************* 187 ********************************************************************************* 188 */ 189 private class GlassPaneMouseListener extends MouseAdapter { 190 191 /*** 192 ***************************************************************************** 193 * 194 * Invoked when the mouse button has been clicked (pressed 195 * and released) on a component. 196 */ 197 public void mouseClicked(MouseEvent event) { 198 event.consume(); 199 } 200 201 /*** 202 ***************************************************************************** 203 * 204 * Invoked when a mouse button has been pressed on a component. 205 */ 206 public void mousePressed(MouseEvent event) { 207 event.consume(); 208 } 209 210 /*** 211 ***************************************************************************** 212 * 213 * Invoked when a mouse button has been released on a component. 214 */ 215 public void mouseReleased(MouseEvent event) { 216 event.consume(); 217 } 218 } 219 220 /*** 221 ********************************************************************************* 222 ********************************************************************************* 223 ********************************************************************************* 224 */ 225 private class SetupFilesEventHandler implements SetupFilesEventListener { 226 227 /*** 228 **************************************************************************** 229 * 230 * @param event 231 */ 232 public void startSetup(SetupFilesEvent event) { 233 PMDViewer.this.setEnableViewer(false); 234 } 235 236 /*** 237 **************************************************************************** 238 * 239 * @param event 240 */ 241 public void stopSetup(SetupFilesEvent event) { 242 PMDViewer.this.setEnableViewer(true); 243 } 244 245 /*** 246 **************************************************************************** 247 * 248 * @param event 249 */ 250 public void setFileList(SetupFilesEvent event) { 251 } 252 } 253 254 /*** 255 ********************************************************************************* 256 ********************************************************************************* 257 ********************************************************************************* 258 */ 259 private class TabbedPane extends JTabbedPane implements ChangeListener { 260 private AnalysisViewer m_analysisViewer; 261 private SearchViewer m_searchViewer; 262 private RulesEditor m_rulesEditor; 263 private PreferencesEditor m_preferencesEditor; 264 private Component m_currentTab; 265 266 /*** 267 ***************************************************************************** 268 * 269 */ 270 private TabbedPane() { 271 super(); 272 273 try { 274 m_analysisViewer = new AnalysisViewer(); 275 m_searchViewer = new SearchViewer(); 276 m_rulesEditor = new RulesEditor(); 277 m_preferencesEditor = new PreferencesEditor(); 278 279 setFont(UIManager.getFont("tabFont")); 280 addTab("Analysis Viewer", m_analysisViewer); 281 addTab("Search Viewer", m_searchViewer); 282 addTab("Rules Editor", m_rulesEditor); 283 addTab("Preferences Editor", m_preferencesEditor); 284 addChangeListener(this); 285 } catch (PMDException pmdException) { 286 String message = pmdException.getMessage(); 287 Exception exception = pmdException.getReason(); 288 MessageDialog.show(m_pmdViewer, message, exception); 289 } 290 } 291 292 /*** 293 ***************************************************************************** 294 * 295 */ 296 private void adjustSplitPaneDividerLocation() { 297 m_analysisViewer.adjustSplitPaneDividerLocation(); 298 m_searchViewer.adjustSplitPaneDividerLocation(); 299 m_rulesEditor.adjustSplitPaneDividerLocation(); 300 m_preferencesEditor.adjustSplitPaneDividerLocation(); 301 } 302 303 /*** 304 ******************************************************************************* 305 * 306 * @param event 307 */ 308 public void stateChanged(ChangeEvent event) { 309 if (m_currentTab == m_rulesEditor) { 310 m_rulesEditor.saveData(); 311 } 312 313 m_currentTab = getSelectedComponent(); 314 315 if (m_currentTab == m_analysisViewer) { 316 m_analysisViewer.setMenuBar(); 317 m_analysisViewer.analyze(); 318 } else if (m_currentTab == m_searchViewer) { 319 m_searchViewer.setMenuBar(); 320 m_searchViewer.analyze(); 321 } else if (m_currentTab == m_rulesEditor) { 322 m_rulesEditor.setMenuBar(); 323 } else if (m_currentTab == m_preferencesEditor) { 324 m_preferencesEditor.setMenuBar(); 325 } 326 } 327 } 328 } 329 330 331 /*** 332 ********************************************************************************* 333 ********************************************************************************* 334 ********************************************************************************* 335 */ 336 class LoadRootDirectories extends Thread { 337 private File[] m_fileSystemRoots; 338 339 /*** 340 ************************************************************************ 341 * 342 */ 343 protected LoadRootDirectories() { 344 super("Load Root Directories"); 345 } 346 347 /*** 348 *************************************************************************** 349 * 350 */ 351 public void run() { 352 setup(); 353 process(); 354 cleanup(); 355 } 356 357 /*** 358 ************************************************************************ 359 * 360 */ 361 protected void setup() { 362 } 363 364 /*** 365 ************************************************************************ 366 * 367 */ 368 protected void process() { 369 m_fileSystemRoots = File.listRoots(); 370 } 371 372 /*** 373 ************************************************************************ 374 * 375 */ 376 protected void cleanup() { 377 } 378 379 /*** 380 ************************************************************************ 381 * 382 * @return 383 */ 384 protected File[] getDirectories() { 385 return m_fileSystemRoots; 386 } 387 }

This page was automatically generated by Maven