📄 mainframe.java
字号:
menuBar.add(navMenu); JMenu designationMenu = newJMenu("menu.designation", "Designation"); int i = 0; int keyEvents [] = {KeyEvent.VK_1, KeyEvent.VK_2, KeyEvent.VK_3, KeyEvent.VK_4, KeyEvent.VK_5, KeyEvent.VK_6, KeyEvent.VK_7, KeyEvent.VK_8, KeyEvent.VK_9}; for(String key : I18N.instance().getUserDesignationKeys(true)) { String name = I18N.instance().getUserDesignation(key); addDesignationItem(designationMenu, name, keyEvents[i++]); } menuBar.add(designationMenu); if (!MAC_OS_X) { // On Mac, 'About' appears under Findbugs menu, so no need for it here JMenu helpMenu = newJMenu("menu.help_menu", "Help"); JMenuItem aboutItem = newJMenuItem("menu.about_item", "About FindBugs"); helpMenu.add(aboutItem); aboutItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { about(); } }); menuBar.add(helpMenu); } return menuBar; } /** * @param map * @param navMenu */ private void addNavItem(final ActionMap map, JMenu navMenu, String menuNameKey, String menuNameDefault, String actionName, int keyEvent) { JMenuItem toggleItem = newJMenuItem(menuNameKey, menuNameDefault); toggleItem.addActionListener(treeActionAdapter(map, actionName)); attachAcceleratorKey(toggleItem, keyEvent); navMenu.add(toggleItem); } ActionListener treeActionAdapter(ActionMap map, String actionName) { final Action selectPrevious = map.get(actionName); return new ActionListener() { public void actionPerformed(ActionEvent e) { e.setSource(tree); selectPrevious.actionPerformed(e); }}; } static void attachAcceleratorKey(JMenuItem item, int keystroke) { attachAcceleratorKey(item, keystroke, 0); } static void attachAcceleratorKey(JMenuItem item, int keystroke, int additionalMask) { // As far as I know, Mac is the only platform on which it is normal // practice to use accelerator masks such as Shift and Alt, so // if we're not running on Mac, just ignore them if (!MAC_OS_X && additionalMask != 0) { return; } item.setAccelerator(KeyStroke.getKeyStroke(keystroke, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() | additionalMask)); } void newProject(){ clearSourcePane(); redoAnalysis.setEnabled(true); if(newProject){ setProjectChanged(true);// setTitle(TITLE_START_TXT + Project.UNNAMED_PROJECT); saveFile = null; saveMenuItem.setEnabled(false); reconfigMenuItem.setEnabled(true); newProject=false; } } /** * This method is for when the user wants to open a file. */ private void open(){ saveComments(currentSelectedBugLeaf, currentSelectedBugAspects); if (projectChanged) { int response = JOptionPane.showConfirmDialog(MainFrame.this, edu.umd.cs.findbugs.L10N.getLocalString("dlg.save_current_changes", "The current project has been changed, Save current changes?") ,edu.umd.cs.findbugs.L10N.getLocalString("dlg.save_changes", "Save Changes?"), JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE); if (response == JOptionPane.YES_OPTION) { if (saveFile!=null) save(); else saveAs(); } else if (response == JOptionPane.CANCEL_OPTION) return; //IF no, do nothing. } boolean loading = true; SaveType fileType = SaveType.NOT_KNOWN; tryAgain: while (loading) { int value=saveOpenFileChooser.showOpenDialog(MainFrame.this); if(value!=JFileChooser.APPROVE_OPTION) return; loading = false; fileType = convertFilterToType(saveOpenFileChooser.getFileFilter()); final File f = saveOpenFileChooser.getSelectedFile(); if(!fileType.isValid(f)){ JOptionPane.showMessageDialog(saveOpenFileChooser, "That file is not compatible with the choosen file type", "Invalid File", JOptionPane.WARNING_MESSAGE); loading = true; continue; } switch (fileType) { case PROJECT: File xmlFile = OriginalGUI2ProjectFile.fileContainingXMLData(f); if (!xmlFile.exists()) { JOptionPane.showMessageDialog(saveOpenFileChooser, edu.umd.cs.findbugs.L10N.getLocalString("dlg.no_xml_data_lbl", "This directory does not contain saved bug XML data, please choose a different directory.")); loading=true; continue tryAgain; } openProject(f); break; case XML_ANALYSIS: if(!f.getName().endsWith(".xml")){ JOptionPane.showMessageDialog(saveOpenFileChooser, edu.umd.cs.findbugs.L10N.getLocalString("dlg.not_xml_data_lbl", "This is not a saved bug XML data file.")); loading=true; continue tryAgain; } if(!openAnalysis(f, fileType)){ //TODO: Deal if something happens when loading analysis JOptionPane.showMessageDialog(saveOpenFileChooser, "An error occurred while trying to load the analysis."); loading=true; continue tryAgain; } break; case FBP_FILE: if(!openFBPFile(f)){ //TODO: Deal if something happens when loading analysis JOptionPane.showMessageDialog(saveOpenFileChooser, "An error occurred while trying to load the analysis."); loading=true; continue tryAgain; } break; case FBA_FILE: if(!openFBAFile(f)){ //TODO: Deal if something happens when loading analysis JOptionPane.showMessageDialog(saveOpenFileChooser, "An error occurred while trying to load the analysis."); loading=true; continue tryAgain; } break; } } } /** * Method called to open FBA file. * @param f * @return */ private boolean openFBAFile(File f) { return openAnalysis(f, SaveType.FBA_FILE); } /** * Method called to open FBP file. * @param f * @return */ private boolean openFBPFile(File f) { if (!f.exists() || !f.canRead()) { return false; } prepareForFileLoad(f, SaveType.FBP_FILE); loadProjectFromFile(f); return true; } private boolean saveAs(){ saveComments(currentSelectedBugLeaf, currentSelectedBugAspects); saveOpenFileChooser.setDialogTitle(edu.umd.cs.findbugs.L10N.getLocalString("dlg.saveas_ttl", "Save as...")); if (curProject==null) { JOptionPane.showMessageDialog(MainFrame.this,edu.umd.cs.findbugs.L10N.getLocalString("dlg.no_proj_save_lbl", "There is no project to save")); return false; } boolean retry = true; SaveType fileType = SaveType.NOT_KNOWN; boolean alreadyExists = true; File f = null; while(retry){ retry = false; int value=saveOpenFileChooser.showSaveDialog(MainFrame.this); if (value!=JFileChooser.APPROVE_OPTION) return false; fileType = convertFilterToType(saveOpenFileChooser.getFileFilter()); if(fileType == SaveType.NOT_KNOWN){ Debug.println("Error! fileType == SaveType.NOT_KNOWN"); //This should never happen b/c saveOpenFileChooser can only display filters //given it. retry = true; continue; } f = saveOpenFileChooser.getSelectedFile(); f = convertFile(f, fileType); if(!fileType.isValid(f)){ JOptionPane.showMessageDialog(saveOpenFileChooser, "That file is not compatible with the chosen file type", "Invalid File", JOptionPane.WARNING_MESSAGE); retry = true; continue; } alreadyExists = fileAlreadyExists(f, fileType); if(alreadyExists){ int response = -1; switch(fileType){ case XML_ANALYSIS: response = JOptionPane.showConfirmDialog(saveOpenFileChooser, edu.umd.cs.findbugs.L10N.getLocalString("dlg.analysis_exists_lbl", "This analysis already exists.\nReplace it?"), edu.umd.cs.findbugs.L10N.getLocalString("dlg.warning_ttl", "Warning!"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE); break; case PROJECT: response = JOptionPane.showConfirmDialog(saveOpenFileChooser, edu.umd.cs.findbugs.L10N.getLocalString("dlg.proj_already_exists_lbl", "This project already exists.\nDo you want to replace it?"), edu.umd.cs.findbugs.L10N.getLocalString("dlg.warning_ttl", "Warning!"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE); break; case FBP_FILE: response = JOptionPane.showConfirmDialog(saveOpenFileChooser, edu.umd.cs.findbugs.L10N.getLocalString("FB Project File already exists", "This FB project file already exists.\nDo you want to replace it?"), edu.umd.cs.findbugs.L10N.getLocalString("dlg.warning_ttl", "Warning!"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE); break; case FBA_FILE: response = JOptionPane.showConfirmDialog(saveOpenFileChooser, edu.umd.cs.findbugs.L10N.getLocalString("FB Analysis File already exists", "This FB analysis file already exists.\nDo you want to replace it?"), edu.umd.cs.findbugs.L10N.getLocalString("dlg.warning_ttl", "Warning!"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE); break; } if(response == JOptionPane.OK_OPTION) retry = false; if(response == JOptionPane.CANCEL_OPTION){ retry = true; continue; } } SaveReturn successful = SaveReturn.SAVE_ERROR; switch(fileType){ case PROJECT: successful = saveProject(f); break; case XML_ANALYSIS: successful = saveAnalysis(f); break; case FBA_FILE: successful = saveFBAFile(f); break; case FBP_FILE: successful = saveFBPFile(f); break; } if (successful != SaveReturn.SAVE_SUCCESSFUL) { JOptionPane.showMessageDialog(MainFrame.this, edu.umd.cs.findbugs.L10N.getLocalString("dlg.saving_error_lbl", "An error occurred in saving.")); return false; } }// saveProjectMenuItem.setEnabled(false); saveMenuItem.setEnabled(false); setSaveType(fileType); saveFile = f; File xmlFile; if (getSaveType()==SaveType.PROJECT) xmlFile=new File(f.getAbsolutePath() + File.separator + f.getName() + ".xml"); else xmlFile=f; addFileToRecent(xmlFile, getSaveType()); return true; } /* * Returns SaveType equivalent depending on what kind of FileFilter passed. */ private SaveType convertFilterToType(FileFilter f){ if (f instanceof FindBugsFileFilter) return ((FindBugsFileFilter)f).getSaveType(); return SaveType.NOT_KNOWN; } /* * Depending on File and SaveType determines if f already exists. Returns false if not * exist, true otherwise. For a project calls * OriginalGUI2ProjectFile.fileContainingXMLData(f).exists */ private boolean fileAlreadyExists(File f, SaveType fileType){ if(fileType == SaveType.PROJECT){ /*File xmlFile=new File(f.getAbsolutePath() + File.separator + f.getName() + ".xml"); File fasFile=new File(f.getAbsolutePath() + File.separator + f.getName() + ".fas"); return xmlFile.exists() || fasFile.exists();*/ return (OriginalGUI2ProjectFile.fileContainingXMLData(f).exists()); } return f.exists(); } /* * If f is not of type FileType will convert file so it is. */ private File convertFile(File f, SaveType fileType){ //WARNING: This assumes the filefilter for project is working so f can only be a directory. if(fileType == SaveType.PROJECT) return f; //Checks that it has the correct file extension, makes a new file if it doesn't. if(!f.getName().endsWith(fileType.getFileExtension())) f = new File(f.getAbsolutePath() + fileType.getFileExtension()); return f; } private void save(){ saveComments(currentSelectedBugLeaf, currentSelectedBugAspects); SaveReturn result = SaveReturn.SAVE_ERROR; switch(getSaveType()){ case PROJECT: result = saveProject(saveFile); break; case XML_ANALYSIS: result = saveAnalysis(saveFile); break; case FBA_FILE: result = saveFBAFile(saveFile); break; case FBP_FILE: result = saveFBPFile(saveFile); break; } if(result != SaveReturn.SAVE_SUCCESSFUL){ JOptionPane.showMessageDialog(MainFrame.this, edu.umd.cs.findbugs.L10N.getLocalString( "dlg.saving_error_lbl", "An error occurred in saving.")); } } /** * @param saveFile2 * @return */ private SaveReturn saveFBAFile(File saveFile2) { return saveAnalysis(saveFile2); } /** * @param saveFile2 * @return */ private SaveReturn saveFBPFile(File saveFile2) { saveComments(currentSelectedBugLeaf, currentSelectedBugAspects); try { curProject.writeXML(saveFile2); } catch (IOException e) { AnalysisContext.logError("Couldn't save FBP file to " + saveFile2, e); return SaveReturn.SAVE_IO_EXCEPTION;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -