public static VehicleType showVehicleDialog( Vector<VehicleType> forbiddenVehicles, VehicleType initialSelection, Component parentComponent) { List<String> vehicles = new ArrayList<>(); if (forbiddenVehicles == null) forbiddenVehicles = new Vector<>(); for (Entry<String, VehicleType> entry : VehiclesHolder.getVehiclesList().entrySet()) { if (!forbiddenVehicles.contains(entry.getValue())) vehicles.add(entry.getKey()); } if (vehicles.isEmpty()) return null; Collections.sort(vehicles); Object ret = JOptionPane.showInputDialog( parentComponent, I18n.text("Select vehicle"), I18n.text("Select vehicle"), JOptionPane.QUESTION_MESSAGE, null, vehicles.toArray(new String[0]), initialSelection != null ? initialSelection.getId() : vehicles.iterator().next()); if (ret == null) return null; return VehiclesHolder.getVehicleById("" + ret); }
@Override public JFreeChart createChart() { LinkedHashMap<String, TimeSeriesCollection> timeSeriesCollections = new LinkedHashMap<>(); combinedPlot = new CombinedDomainXYPlot(new DateAxis(I18n.text("Time Of Day"))); for (String seriesName : series.keySet()) { if (forbiddenSeries.contains(seriesName)) continue; String plot = seriesName.split("\\.")[0]; if (!timeSeriesCollections.containsKey(plot)) timeSeriesCollections.put(plot, new TimeSeriesCollection()); timeSeriesCollections.get(plot).addSeries(series.get(seriesName)); } for (String plotName : timeSeriesCollections.keySet()) { combinedPlot.add( ChartFactory.createTimeSeriesChart( plotName, I18n.text("Time Of Day"), plotName, timeSeriesCollections.get(plotName), true, true, false) .getXYPlot()); } // Do this here to make sure we have a built chart.. //FIXME FIXME FIXME for (LogMarker marker : mraPanel.getMarkers()) { addLogMarker(marker); } return new JFreeChart(combinedPlot); }
@Override public JComponent getVisualization(IMraLogGroup source, double timestep) { try { if (index == null) index = new LsfIndex( source.getFile("Data.lsf"), new IMCDefinition(new FileInputStream(source.getFile("IMC.xml")))); try { IMCGraph graph = new IMCGraph(index); BufferedImage img = graph.generateSystemsGraph().generateImage(); label.setIcon(new ImageIcon(img)); } catch (Exception e) { e.printStackTrace(); label.setText(I18n.text("Your system doesn't have dot support")); } return new JScrollPane(label); } catch (Exception e) { return new JLabel(I18n.text("ERROR") + ": " + e.getMessage()); } }
private void printErrors(String[] errors) { String errorsString = "<html>" + I18n.text("The following errors were found") + ":<br>"; int i = 1; for (String error : errors) { errorsString = errorsString + "<br> " + (i++) + ") " + error; } errorsString = errorsString + "</html>"; GuiUtils.errorMessage( new JFrame(I18n.text("Error")), I18n.text("Invalid properties"), errorsString); }
public void selectFile() { final JFileChooser chooser = new JFileChooser(overlays.defaultDirectory); chooser.setFileFilter( GuiUtils.getCustomFileFilter(I18n.text("LSF log files"), new String[] {"lsf", "lsf.gz"})); chooser.setApproveButtonText(I18n.text("Open Log")); int option = chooser.showOpenDialog(overlays.getConsole()); if (option != JFileChooser.APPROVE_OPTION) return; else { Thread logLoading = new Thread( new Runnable() { @Override public void run() { final ProgressMonitor monitor = new ProgressMonitor( overlays.getConsole(), I18n.text("Opening LSF log"), I18n.text("Opening LSF log"), 0, 100); try { clearOverlays(); fileLabel.setText("loading..."); logFile = chooser.getSelectedFile(); LsfLogSource source = new LsfLogSource( chooser.getSelectedFile(), new LsfIndexListener() { @Override public void updateStatus(String messageToDisplay) { monitor.setNote(messageToDisplay); } }); logSource = source; loadOverlays(source); } catch (Exception e) { GuiUtils.errorMessage(overlays.getConsole(), e); } SwingUtilities.invokeLater( new Runnable() { @Override public void run() { fileLabel.setText(chooser.getSelectedFile().getParentFile().getName()); } }); monitor.close(); overlays.defaultDirectory = chooser.getSelectedFile().getParent(); } }); logLoading.start(); } }
@Override public void initSubPanel() { if (initCalled) return; initCalled = true; addMenuItem( I18n.text("Settings") + ">" + I18n.text("Coverage Planner Settings"), null, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { PropertiesEditor.editProperties(AreaCoveragePlanner.this, getConsole(), true); } }); };
/* (non-Javadoc) * @see pt.lsts.neptus.plugins.web.IConsoleMenuItemServlet#informCreatedConsoleMenuItem(java.util.Hashtable) */ @Override public void informCreatedConsoleMenuItem(Hashtable<String, JMenuItem> consoleMenuItems) { for (String path : consoleMenuItems.keySet()) { if (I18n.text("Allow console exposure to the outside").equalsIgnoreCase(path)) exposuredMenuItem = consoleMenuItems.get(path); } }
private void initialize() { setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)); setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); fileLabel = new JLabel(I18n.text("(no log loaded)")); fileLabel.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED)); fileLabel.setBackground(Color.white); fileLabel.setOpaque(true); filePanel.add(fileLabel, BorderLayout.CENTER); fileSelection = new JButton("..."); fileSelection.setMargin(new Insets(1, 1, 1, 1)); fileSelection.addActionListener( new ActionListener() { @Override public void actionPerformed(ActionEvent e) { selectFile(); } }); filePanel.add(fileSelection, BorderLayout.EAST); filePanel.setMaximumSize(new Dimension(200, 25)); add(filePanel); overlaysPanel = new JPanel(); overlaysPanel.setLayout(new BoxLayout(overlaysPanel, BoxLayout.PAGE_AXIS)); add(new JScrollPane(overlaysPanel)); }
public RunChecklistConsoleAction(final ConsoleLayout console) { super( I18n.text("Run CheckList"), new ImageIcon(ImageUtils.getImage("images/buttons/checklist.png"))); this.console = console; console.addMissionListener( new MissionChangeListener() { @Override public void missionUpdated(MissionType mission) { updateStatus(console); } private void updateStatus(final ConsoleLayout console) { if (console.getMission() != null && console.getMission().getChecklistsList().size() > 0) { setEnabled(true); } else { setEnabled(false); } } @Override public void missionReplaced(MissionType mission) { updateStatus(console); } }); }
public enum CATEGORY { PLANNING(I18n.text("Planning")), WEB_PUBLISHING(I18n.text("Web Publishing")), INTERFACE(I18n.text("Interface")), COMMUNICATIONS(I18n.text("Communications")), UNSORTED(I18n.text("Neptus Plug-ins")); private String name; private CATEGORY(String name) { this.name = name; } @Override public String toString() { return name; } }
public void addMarker(LogMarker marker) { if (markersNode == null) { markersNode = new DefaultMutableTreeNode(I18n.text("Markers")); root.add(markersNode); } markersNode.add(new DefaultMutableTreeNode(marker)); treeModel.nodeStructureChanged(root); expandAllTree(); }
public void createtoolBar() { setOrientation(JToolBar.VERTICAL); setBorder( BorderFactory.createCompoundBorder( BorderFactory.createRaisedBevelBorder(), BorderFactory.createEmptyBorder())); setRhodToggle(new JToggleButton()); getRhodToggle().setToolTipText(I18n.text("See Rhodamine Dye data color map") + "."); getRhodToggle().setIcon(ICON_RHOD); getRhodToggle().addActionListener(rhodamineDyeToggleAction); setPredToggle(new JToggleButton()); getPredToggle().setToolTipText(I18n.text("See Prediction data color map") + "."); getPredToggle().setIcon(ICON_PRED); getPredToggle().addActionListener(predictionToggleAction); // ButtonGroup groupToggles = new ButtonGroup(); // groupToggles.add(getRhodToggle()); // groupToggles.add(getPredToggle()); setZexaggerToggle(new JToggleButton()); getZexaggerToggle().setToolTipText(I18n.text("Enable/Disable Z Exaggeration") + "."); getZexaggerToggle().setIcon(ICON_Z); getZexaggerToggle().addActionListener(zexaggerToggleAction); resetViewportButton = new JButton(); resetViewportButton.setToolTipText(I18n.text("Reset Viewport") + "."); resetViewportButton.setIcon(ICON_RESETVIEWPORT); resetViewportButton.addActionListener(resetViewportAction); add(getRhodToggle()); add(getPredToggle()); addSeparator(); add(getZexaggerToggle()); addSeparator(); add(resetViewportButton); }
public void loadFile() { if (file == null) { id.setText(""); return; } try { if (file.exists()) { LinkedHashMap<String, String> header = loadHeader(file); if (header.values().size() != 2) { id.setText( "<html><font color='red'>" + I18n.text("Not a valid checklist") + "</font></html>"); } else { id.setText( "<html><font color='blue'>" + I18n.text("Name") + ": </font>" + header.get("name") + "<hr><font color='blue'>" + I18n.text("Description") + ":</font><br>" + header.get("description") + "</html>"); } /* * ChecklistType cl = new ChecklistType(file.getAbsolutePath()); * // cl.load(file.getAbsolutePath()); if * (!cl.getName().equalsIgnoreCase("")) { * id.setText("<html> <b>Checklist name:</b><br>" + " <i>" + * cl.getName() + "</i></html>"); } else { id.setText(" "); } */ } else { id.setText(" "); } } catch (Exception e) { id.setText( "<html><font color='red'>" + I18n.text("Not a valid checklist") + "</font></html>"); } }
/** * Initializes a menu containing actions applicable to log markers. * * @param menu menu object. * @return true if menu is applicable to current selection and was initialized, false otherwise. */ private boolean initializeLogMarkerNodeMenu(final JPopupMenu menu) { TreePath[] paths = getSelectionsFiltered(this::nodeIsLogMarker); if (paths.length == 0) return false; menu.add( new AbstractAction(I18n.text("Remove")) { @Override public void actionPerformed(ActionEvent e) { if (LsfReportProperties.generatingReport) { GuiUtils.infoMessage( panel.getRootPane(), I18n.text("Can not remove Marks"), I18n.text("Can not remove Marks - Generating Report.")); return; } for (TreePath path : paths) { final DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent(); panel.removeMarker((LogMarker) node.getUserObject()); } } }); menu.add( new AbstractAction(I18n.text("GoTo")) { @Override public void actionPerformed(ActionEvent e) { final DefaultMutableTreeNode node = (DefaultMutableTreeNode) paths[0].getLastPathComponent(); panel.synchVisualizations((LogMarker) node.getUserObject()); } }); return true; }
@Override protected ArrayList<JComponent> getAdditionalComponentsForButtonsPanel() { ArrayList<JComponent> ret = new ArrayList<>(); testButton = new JButton(I18n.text("Test")); testButton.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent arg0) { String tmpStr = editorPane.getText(); NeptusEvents.post(new NeptusEventLayoutChanged(tmpStr)); } }); ret.add(testButton); return ret; }
/** * Initializes a menu containing actions applicable to user items. * * @param menu menu object. * @return true if menu is applicable to current selection and was initialized, false otherwise. */ private boolean initializeDynamicViewNodeMenu(final JPopupMenu menu) { TreePath[] paths = getSelectionsFiltered(this::nodeIsDynamicView); if (paths.length == 0) return false; menu.add( new AbstractAction(I18n.text("Remove")) { @Override public void actionPerformed(ActionEvent e) { for (TreePath path : paths) { final DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent(); panel.removeTreeObject(node.getUserObject()); } } }); return true; }
@Override public Component getTreeCellRendererComponent( JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); Object userObject = ((DefaultMutableTreeNode) value).getUserObject(); if (userObject instanceof ClassPropertiesInfo) { setIcon(((ClassPropertiesInfo) userObject).getIcon()); setText(I18n.text(((ClassPropertiesInfo) userObject).getName())); } return this; }
/** * Searches in the subPanels and the GeneralPreferences for settings and builds a tree with a node * for each plugin with settings for current permission level and type of console. * * @return a JTree with one node for each functionality with properties. */ private JTree buildAndSetupTree() { final JTree tree = new JTree(); // Setup tree options tree.setCellRenderer(new IconRenderer()); tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); tree.expandRow(0); tree.setRootVisible(false); tree.setShowsRootHandles(true); // setup interaction with right pane final JPanel holderPropertiesPanel = (JPanel) splitPane.getRightComponent(); if (tree.getModel().getChildCount(tree.getModel().getRoot()) == 0) { holderPropertiesPanel.add(new JLabel(I18n.text("There are no settings to display"))); } else { tree.addTreeSelectionListener( new TreeSelectionListener() { @Override public void valueChanged(TreeSelectionEvent e) { TreePath path = e.getNewLeadSelectionPath(); holderPropertiesPanel.removeAll(); if (path != null) { PropertySheetPanel propertiesPanel; // called due to selecting a different node DefaultMutableTreeNode defaultMutableTreeNode = (DefaultMutableTreeNode) path.getLastPathComponent(); ClassPropertiesInfo userObject = (ClassPropertiesInfo) defaultMutableTreeNode.getUserObject(); propertiesPanel = userObject.getPropertiesPanel(); // if there is no built panel fetch values if (propertiesPanel == null) { propertiesPanel = createPropertiesPanelForClass(userObject.getClassInstance()); userObject.setPropertiesPanel(propertiesPanel); } holderPropertiesPanel.add(propertiesPanel, "w 100%, h 100%"); } revalidate(); } }); } return tree; }
/* (non-Javadoc) * @see pt.lsts.neptus.plugins.web.IConsoleMenuItemServlet#getConsoleMenuItems() */ @Override public ConsoleMenuItem[] getConsoleMenuItems() { return new ConsoleMenuItem[] { new ConsoleMenuItem( I18n.text("Allow console exposure to the outside"), null, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (exposuredMenuItem .getText() .equals(I18n.text("Allow console exposure to the outside"))) { allowConsoleExposure = true; exposuredMenuItem.setText(I18n.text("Disallow console exposure to the outside")); } else { allowConsoleExposure = false; exposuredMenuItem.setText(I18n.text("Allow console exposure to the outside")); } } }) }; }
@Override protected boolean processMsgLocally(MessageInfo info, IMCMessage msg) { // msg.dump(System.out); // System.out.flush(); ImcSystem resSys = ImcSystemsHolder.lookupSystem(systemCommId); if (resSys != null) { if (resSys.getAuthorityState() == ImcSystem.IMCAuthorityState.OFF) return false; } logMessage(info, msg); try { if (bus != null) bus.post(msg); } catch (Exception e1) { e1.printStackTrace(); } catch (Error e1) { e1.printStackTrace(); } imcState.setMessage(msg); if (resSys == null) return true; switch (msg.getMgid()) { case VehicleState.ID_STATIC: try { int errorCount = msg.getInteger("error_count"); if (errorCount > 0) resSys.setOnErrorState(true); else resSys.setOnErrorState(false); Object errEntStr = msg.getValue("error_ents"); if (errEntStr != null) resSys.setOnErrorStateStr(errEntStr.toString()); else resSys.setOnErrorStateStr(""); } catch (Exception e) { e.printStackTrace(); } break; case PlanControlState.ID_STATIC: try { String planId = msg.getString("plan_id"); String maneuver = msg.getString("man_id"); String state = msg.getString("state"); PlanType plan = new PlanType(null); plan.setId(planId + "|" + I18n.textc("Man", "Maneuver (short form)") + ":" + maneuver); if ("EXECUTING".equalsIgnoreCase(state)) resSys.setActivePlan(plan); else resSys.setActivePlan(null); } catch (Exception e) { e.printStackTrace(); } break; case EmergencyControlState.ID_STATIC: try { String planId; planId = msg.getString("plan_id"); if (planId == null) planId = msg.getString("mission_id"); String state = msg.getString("state"); resSys.setEmergencyPlanId(planId); resSys.setEmergencyStatusStr(state); } catch (Exception e) { e.printStackTrace(); } break; case EstimatedState.ID_STATIC: try { long timeMillis = msg.getTimestampMillis(); double lat = msg.getDouble("lat"); double lon = msg.getDouble("lon"); double height = msg.getDouble("height"); msg.getDouble("depth"); msg.getDouble("altitude"); double x = msg.getDouble("x"); double y = msg.getDouble("y"); double z = msg.getDouble("z"); double phi = msg.getDouble("phi"); double theta = msg.getDouble("theta"); double psi = msg.getDouble("psi"); LocationType loc = new LocationType(); loc.setLatitudeRads(lat); loc.setLongitudeRads(lon); loc.setHeight(height); loc.setOffsetNorth(x); loc.setOffsetEast(y); loc.setOffsetDown(z); loc.convertToAbsoluteLatLonDepth(); if (loc != null) { resSys.setLocation(loc, timeMillis); } resSys.setAttitudeDegrees( Math.toDegrees(phi), Math.toDegrees(theta), Math.toDegrees(psi), timeMillis); // double u = msg.getDouble("u"); // double v = msg.getDouble("v"); // double w = msg.getDouble("w"); double vx = msg.getDouble("vx"); double vy = msg.getDouble("vy"); double vz = msg.getDouble("vz"); double courseRad = AngleCalc.calcAngle(0, 0, vy, vx); double groundSpeed = Math.sqrt(vx * vx + vy * vy); double verticalSpeed = vz; resSys.storeData( ImcSystem.COURSE_KEY, (int) AngleCalc.nomalizeAngleDegrees360( MathMiscUtils.round(Math.toDegrees(courseRad), 0)), timeMillis, true); resSys.storeData(ImcSystem.GROUND_SPEED_KEY, groundSpeed, timeMillis, true); resSys.storeData(ImcSystem.VERTICAL_SPEED_KEY, verticalSpeed, timeMillis, true); double headingRad = msg.getDouble("psi"); resSys.storeData( ImcSystem.HEADING_KEY, (int) AngleCalc.nomalizeAngleDegrees360( MathMiscUtils.round(Math.toDegrees(headingRad), 0)), timeMillis, true); } catch (Exception e) { e.printStackTrace(); } break; case SimulatedState.ID_STATIC: try { long timeMillis = msg.getTimestampMillis(); resSys.storeData(msg.getAbbrev(), msg, timeMillis, true); } catch (Exception e) { e.printStackTrace(); } break; case OperationalLimits.ID_STATIC: try { long timeMillis = msg.getTimestampMillis(); resSys.storeData(msg.getAbbrev(), msg, timeMillis, true); } catch (Exception e) { e.printStackTrace(); } break; case IndicatedSpeed.ID_STATIC: try { long timeMillis = msg.getTimestampMillis(); double value = msg.getDouble("value"); resSys.storeData(ImcSystem.INDICATED_SPEED_KEY, value, timeMillis, true); } catch (Exception e) { e.printStackTrace(); } break; case TrueSpeed.ID_STATIC: try { long timeMillis = msg.getTimestampMillis(); double value = msg.getDouble("value"); resSys.storeData(ImcSystem.TRUE_SPEED_KEY, value, timeMillis, true); } catch (Exception e) { e.printStackTrace(); } break; case PlanDB.ID_STATIC: try { resSys.getPlanDBControl().onMessage(info, msg); } catch (Exception e) { e.printStackTrace(); } break; case Rpm.ID_STATIC: try { long timeMillis = msg.getTimestampMillis(); int entityId = (Integer) msg.getHeaderValue("src_ent"); final int value = msg.getInteger("value"); if (entityId == 0xFF) { resSys.storeData(ImcSystem.RPM_MAP_ENTITY_KEY, value, timeMillis, true); } else { final String entityName = EntitiesResolver.resolveName(resSys.getName(), entityId); if (entityName != null) { Object obj = resSys.retrieveData(ImcSystem.RPM_MAP_ENTITY_KEY); if (obj == null) { Map<String, Integer> map = (Map<String, Integer>) Collections.synchronizedMap(new HashMap<String, Integer>()); map.put(entityName, value); resSys.storeData(ImcSystem.RPM_MAP_ENTITY_KEY, map, timeMillis, true); } else { @SuppressWarnings("unchecked") Map<String, Integer> rpms = (Map<String, Integer>) resSys.retrieveData(ImcSystem.RPM_MAP_ENTITY_KEY); rpms.put(entityName, value); resSys.storeData(ImcSystem.RPM_MAP_ENTITY_KEY, rpms, timeMillis, false); } } } } catch (Exception e) { e.printStackTrace(); } break; case FuelLevel.ID_STATIC: try { long timeMillis = msg.getTimestampMillis(); FuelLevel fuelLevelMsg = (FuelLevel) msg; resSys.storeData(ImcSystem.FUEL_LEVEL_KEY, fuelLevelMsg, timeMillis, true); } catch (Exception e) { e.printStackTrace(); } break; case LblConfig.ID_STATIC: try { if (((LblConfig) msg).getOp() == OP.CUR_CFG) resSys.storeData( ImcSystem.LBL_CONFIG_KEY, (LblConfig) msg, msg.getTimestampMillis(), true); } catch (Exception e) { e.printStackTrace(); } break; case AcousticSystems.ID_STATIC: try { long timeMillis = msg.getTimestampMillis(); AcousticSystems acousticSystemsMsg = (AcousticSystems) msg; resSys.storeData(ImcSystem.ACOUSTIC_SYSTEMS, acousticSystemsMsg, timeMillis, true); } catch (Exception e) { e.printStackTrace(); } break; default: break; } return true; }
/** @author jqcorreia */ @SuppressWarnings("serial") public class LogTree extends JTree { private final MRAPanel panel; // Root node private final DefaultMutableTreeNode root = new DefaultMutableTreeNode("root"); // Top level nodes private final DefaultMutableTreeNode visualizationsNode = new DefaultMutableTreeNode(I18n.text("Visualizations")); private final DefaultMutableTreeNode tablesNode = new DefaultMutableTreeNode(I18n.text("Tables")); private final DefaultMutableTreeNode chartsNode = new DefaultMutableTreeNode(I18n.text("Charts")); private DefaultMutableTreeNode markersNode; private final DefaultTreeModel treeModel = new DefaultTreeModel(root); public LogTree(IMraLogGroup source, MRAPanel panel) { this.panel = panel; setModel(treeModel); initializeTreeRenderer(); setRootVisible(false); setShowsRootHandles(true); initializeMouseAdapter(); loadDefaultNodes(); treeModel.nodeStructureChanged(root); // Multiple selections may only contains items of the same compatible type. addTreeSelectionListener((e) -> setSelectionPaths(getSelectionsFiltered(null))); } private void initializeTreeRenderer() { DefaultTreeCellRenderer treeRenderer = new DefaultTreeCellRenderer() { private final LinkedHashMap<Object, ImageIcon> iconCache = new LinkedHashMap<>(); @Override public Component getTreeCellRendererComponent( JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; super.getTreeCellRendererComponent( tree, value, selected, expanded, leaf, row, hasFocus); if (node.getUserObject() instanceof MRAVisualization) { MRAVisualization viz = (MRAVisualization) node.getUserObject(); setText(viz.getName()); if (!iconCache.containsKey(viz)) iconCache.put(viz, viz.getIcon()); setIcon(iconCache.get(viz)); } if (node.getUserObject() instanceof LogMarker) { LogMarker mark = (LogMarker) node.getUserObject(); setText(mark.getLabel()); if (!iconCache.containsKey("markers")) iconCache.put("markers", ImageUtils.getIcon("images/menus/marker.png")); setIcon(iconCache.get("markers")); } return this; } }; setCellRenderer(treeRenderer); } private void initializeMouseAdapter() { MouseAdapter mouseAdapter = new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { final TreePath path = getPathForLocation(e.getX(), e.getY()); if (e.getButton() == MouseEvent.BUTTON1) { if (e.getClickCount() == 2) { // This takes care of clicking outside item area if (path != null) { DefaultMutableTreeNode n = (DefaultMutableTreeNode) path.getLastPathComponent(); // MRAVisualization case if (n.getUserObject() instanceof MRAVisualization) { panel.openVisualization(((MRAVisualization) n.getUserObject())); } // Log marker case. if (n.getUserObject() instanceof LogMarker) { panel.synchVisualizations((LogMarker) n.getUserObject()); } } } } if (e.getButton() == MouseEvent.BUTTON3) { // This takes care of clicking outside item area if (path != null) { final JPopupMenu menu = new JPopupMenu(); if (initializeLogMarkerNodeMenu(menu) || initializeDynamicViewNodeMenu(menu)) menu.show(LogTree.this, e.getX(), e.getY()); } } // Let the original event go the UI Thread super.mouseClicked(e); } }; addMouseListener(mouseAdapter); } /** * Tests if a tree node is a log marker. * * @param node tree node * @return true if node is a log marker, false otherwise. */ private Boolean nodeIsLogMarker(final DefaultMutableTreeNode node) { return node.getUserObject() instanceof LogMarker; } /** * Tests if a tree node is a dynamic view (i.e., not a builtin/predefined). * * @param node tree node * @return true if node is a user item, false otherwise. */ private Boolean nodeIsDynamicView(final DefaultMutableTreeNode node) { Object userObject = node.getUserObject(); return userObject instanceof LogTableVisualization || userObject instanceof GenericPlot || userObject instanceof MessageHtmlVisualization; } /** * Retrieves an array of the current selected tree items. This selection shall contain only items * of the same compatible type. * * @param filter optional node filter. * @return array of tree paths. * @see #nodeTypeIsCompatible */ private TreePath[] getSelectionsFiltered(Function<DefaultMutableTreeNode, Boolean> filter) { TreePath[] paths = getSelectionPaths(); if (paths == null) return new TreePath[] {}; final ArrayList<TreePath> list = new ArrayList<>(); Object firstUserObject = null; for (TreePath path : paths) { final Object node = path.getLastPathComponent(); final DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) node; final Object userObject = treeNode.getUserObject(); if (firstUserObject == null) { firstUserObject = userObject; } if (!nodeTypeIsCompatible(firstUserObject, userObject) || (filter != null && !filter.apply(treeNode))) break; list.add(path); } return list.toArray(new TreePath[list.size()]); } /** * Tests if two objects have compatible types (i.e., are used in similar ways, have the same * menu). * * @param a first object. * @param b second object. * @return true if nodes are compatible, false otherwise. */ private boolean nodeTypeIsCompatible(Object a, Object b) { return a.getClass().isInstance(b) || b.getClass().isInstance(a); } /** * Initializes a menu containing actions applicable to log markers. * * @param menu menu object. * @return true if menu is applicable to current selection and was initialized, false otherwise. */ private boolean initializeLogMarkerNodeMenu(final JPopupMenu menu) { TreePath[] paths = getSelectionsFiltered(this::nodeIsLogMarker); if (paths.length == 0) return false; menu.add( new AbstractAction(I18n.text("Remove")) { @Override public void actionPerformed(ActionEvent e) { if (LsfReportProperties.generatingReport) { GuiUtils.infoMessage( panel.getRootPane(), I18n.text("Can not remove Marks"), I18n.text("Can not remove Marks - Generating Report.")); return; } for (TreePath path : paths) { final DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent(); panel.removeMarker((LogMarker) node.getUserObject()); } } }); menu.add( new AbstractAction(I18n.text("GoTo")) { @Override public void actionPerformed(ActionEvent e) { final DefaultMutableTreeNode node = (DefaultMutableTreeNode) paths[0].getLastPathComponent(); panel.synchVisualizations((LogMarker) node.getUserObject()); } }); return true; } /** * Initializes a menu containing actions applicable to user items. * * @param menu menu object. * @return true if menu is applicable to current selection and was initialized, false otherwise. */ private boolean initializeDynamicViewNodeMenu(final JPopupMenu menu) { TreePath[] paths = getSelectionsFiltered(this::nodeIsDynamicView); if (paths.length == 0) return false; menu.add( new AbstractAction(I18n.text("Remove")) { @Override public void actionPerformed(ActionEvent e) { for (TreePath path : paths) { final DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent(); panel.removeTreeObject(node.getUserObject()); } } }); return true; } private void loadDefaultNodes() { root.add(visualizationsNode); root.add(chartsNode); root.add(tablesNode); } public void addVisualization(MRAVisualization vis) { DefaultMutableTreeNode parent; DefaultMutableTreeNode node = new DefaultMutableTreeNode(vis); // Choose parent node based on visualization type switch (vis.getType()) { case VISUALIZATION: parent = visualizationsNode; break; case CHART: parent = chartsNode; break; case TABLE: parent = tablesNode; break; default: parent = visualizationsNode; } parent.add(node); treeModel.nodeStructureChanged(root); expandAllTree(); } /** * Retrieves the tree node that contains charts. * * @return chart tree node. */ DefaultMutableTreeNode getChartsNode() { return chartsNode; } private void remove(Object obj, DefaultMutableTreeNode parent) { for (int i = 0; i < parent.getChildCount(); i++) { if (!(parent.getChildAt(i) instanceof DefaultMutableTreeNode)) continue; DefaultMutableTreeNode node = (DefaultMutableTreeNode) parent.getChildAt(i); if (!node.isLeaf()) remove(obj, node); else if (node.isLeaf()) { if (node.getUserObject().equals(obj)) { parent.remove(node); if (parent.getChildCount() == 0 && parent.getParent() instanceof DefaultMutableTreeNode) { ((DefaultMutableTreeNode) parent.getParent()).remove(parent); } treeModel.nodeStructureChanged(root); expandAllTree(); return; } } } } public void remove(Object obj) { remove(obj, root); } public void addMarker(LogMarker marker) { if (markersNode == null) { markersNode = new DefaultMutableTreeNode(I18n.text("Markers")); root.add(markersNode); } markersNode.add(new DefaultMutableTreeNode(marker)); treeModel.nodeStructureChanged(root); expandAllTree(); } public void removeMarker(LogMarker marker) { DefaultMutableTreeNode node; for (int i = 0; i < markersNode.getChildCount(); i++) { node = (DefaultMutableTreeNode) markersNode.getChildAt(i); if (node.getUserObject() == marker) { markersNode.remove(node); } } if (markersNode.getChildCount() == 0) { root.remove(markersNode); markersNode = null; } treeModel.nodeStructureChanged(root); expandAllTree(); } // Util methods private void expandAllTree() { for (int i = 0; i < getRowCount(); i++) { expandRow(i); } } }
@Override public String getName() { return I18n.textf("%1 Colormap", messageName + "." + varName); }
@SuppressWarnings("unchecked") private <T> PluginProperty extractPluginProperty(Field f, T class1) { NeptusProperty neptusProperty = f.getAnnotation(NeptusProperty.class); Object fieldValue = null; try { fieldValue = f.get(class1); } catch (Exception e) { e.printStackTrace(); return null; } // Name String nameRaw = neptusProperty.name(); String displayName; if (nameRaw == null || nameRaw.length() == 0) { nameRaw = f.getName(); char firstLetter = Character.toUpperCase(nameRaw.charAt(0)); displayName = firstLetter + nameRaw.substring(1); } else { displayName = nameRaw; } // Type Class<?> type = f.getType(); PluginProperty pp = new PluginProperty(nameRaw, type, fieldValue); pp.setValue(fieldValue); // Editable if (neptusProperty.editable() == false) { pp.setEditable(false); } else { pp.setEditable(true); } // Display name // signal the scope is the whole Neptus if (class1.getClass().equals(GeneralPreferences.class)) displayName = "* " + I18n.text(displayName); else displayName = I18n.text(displayName); pp.setDisplayName(displayName); // Category if (neptusProperty.category() != null) { pp.setCategory(I18n.text(neptusProperty.category())); } // Short description Map<String, PluginProperty> hashMap = PluginUtils.getDefaultsValues(class1); StringBuilder description = new StringBuilder(); description.append(I18n.text(neptusProperty.description())); String defaultValue; if (hashMap == null) { // no value! defaultValue = I18n.textf("No default found for class %className", class1.getClass().getSimpleName()); } else { PluginProperty pluginProperty = hashMap.get(f.getName()); if (pluginProperty == null) { // no value! defaultValue = I18n.textf("No default found for field %fieldName", f.getName()); } else { Object defaultPropValue = pluginProperty.getValue(); defaultValue = (defaultPropValue == null ? I18n.text("Absence of value") : ((f.getType().getEnumConstants() != null ? I18n.text(defaultPropValue.toString()) : defaultPropValue.toString()))); } } description.append(" ("); description.append(I18n.text("Default value")); description.append(": "); description.append(defaultValue); description.append(")"); pp.setShortDescription(description.toString()); // Editor class - ATTENTION must be the last or wont work! Class<? extends PropertyEditor> editClass = null; if (neptusProperty.editorClass() != PropertyEditor.class) { editClass = neptusProperty.editorClass(); } if (editClass != null) { pEditorRegistry.registerEditor(pp, editClass); } else { if (ReflectionUtil.hasInterface(f.getType(), PropertyType.class)) { PropertyType pt = (PropertyType) fieldValue; pEditorRegistry.registerEditor(pp, pt.getPropertyEditor()); } if (f.getType().getEnumConstants() != null) { if (fieldValue != null) { pEditorRegistry.registerEditor( pp, new EnumEditor((Class<? extends Enum<?>>) fieldValue.getClass())); } } } return pp; }
public MiGLayoutXmlPropertyEditor() { super(); rootElement = ""; xmlSchemaName = "MiGLayoutContainer"; title = I18n.text("Layout for: MiGLayout Layout XML"); smallMsg = ""; // I18n.text("This follows the MiGLayout"); contentType = "text/html"; helpText = I18n.text("Container using MigLayout") + "<br/>"; helpText += I18n.textf( "(see %url)", "'http://www.migcalendar.com/miglayout/mavensite/docs/cheatsheet.html'") + "<br/>"; helpText += I18n.text("For reference duplicated components use <Component Name>_N where N=1,2,3...\n"); helpText += "<br/>"; helpText += I18n.text("Example of a basic profile:") + "<br/>"; helpText += "================<br/>"; helpText += "<br/>"; helpText += "<profiles><br/>"; helpText += " <profile name=\"Normal\"><br/>"; helpText += " <container layoutparam=\"ins 0\" param=\"w 100%, h 100%\"><br/>"; helpText += " <child name=\"Map Panel\" param=\"w 100%, h 100%\"/><br/>"; helpText += " </container><br/>"; helpText += " <container layoutparam=\"ins 3\" param=\"w 300px!, h 100%\"><br/>"; helpText += " <container layoutparam=\"ins 0, filly\" param=\"w 100%, h 100%\"><br/>"; helpText += " <child name=\"Plan Control\" param=\"w 80%, h 50px!\"/><br/>"; helpText += " <child name=\"Abort Button\" param=\"w 20%, h 50px!, wrap\"/><br/>"; helpText += " <child name=\"Plan Control State\" param=\"w 100%!, h 100px!, span, wrap\"/><br/>"; helpText += " <child name=\"Mission Tree\" param=\"w 100%, h 100%, span\"/><br/>"; helpText += " </container><br/>"; helpText += " </container><br/>"; helpText += " </profile><br/>"; helpText += " <profile name=\"Map\"><br/>"; helpText += " <container layoutparam=\"ins 0\" param=\"w 100%, h 100%\"><br/>"; helpText += " <child name=\"Map Panel\" param=\"w 100%, h 100%\"/><br/>"; helpText += " </container><br/>"; helpText += " </profile><br/>"; helpText += "</profiles><br/>"; helpText += "<br/>"; helpText += "<br/>"; helpText += "<!--profiles DTD--><br/>"; helpText += "<!ELEMENT profiles (profile)+><br/>"; helpText += "<!ELEMENT profile (container | child)*><br/>"; helpText += "<!ATTLIST profile<br/>"; helpText += " name CDATA #REQUIRED<br/>"; helpText += "><br/>"; helpText += "<!ELEMENT container ((container | child)* | (tab*)*)><br/>"; helpText += "<!ATTLIST container<br/>"; helpText += " layoutparam CDATA #IMPLIED<br/>"; helpText += " colparam CDATA #IMPLIED<br/>"; helpText += " rowparam CDATA #IMPLIED<br/>"; helpText += " param CDATA #IMPLIED<br/>"; helpText += "><br/>"; helpText += "<!ELEMENT child EMPTY><br/>"; helpText += "<!ATTLIST child<br/>"; helpText += " name CDATA #REQUIRED<br/>"; helpText += " param CDATA #IMPLIED<br/>"; helpText += "><br/>"; helpText += "<!ELEMENT tab (container | child)*><br/>"; helpText += "<!ATTLIST tab<br/>"; helpText += " tabname CDATA #REQUIRED<br/>"; helpText += " layoutparam CDATA #IMPLIED<br/>"; helpText += " colparam CDATA #IMPLIED<br/>"; helpText += " rowparam CDATA #IMPLIED<br/>"; helpText += "><br/>"; }
public static File showSaveDialog(Component parent, File basedir) { return showOpenDialog(parent, I18n.text("Save Checklist"), basedir); }
/** @return */ public static File showSaveDialog(File basedir) { return showOpenDialog(null, I18n.text("Save Checklist"), basedir); }
@Override public String getName() { return I18n.text("Statistics"); }
@Override public void mouseClicked(MouseEvent e) { TreePath[] path = tree.getSelectionPaths(); if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2) { if (path == null) return; if (path.length == 1 && path[0].getPath().length == 2) { final String fileToOpen = path[0].getPath()[1].toString(); IMraLog log = source.getLog(fileToOpen); panel.loadVisualization(new LogTableVisualization(log, panel), true); } } if (e.getButton() == MouseEvent.BUTTON3) { if (path == null) return; if (path.length == 1 && path[0].getPath().length == 2) { final String fileToOpen = path[0].getPath()[1].toString(); JPopupMenu popup = new JPopupMenu(); String text = I18n.textf("Show %log data", fileToOpen); popup .add(text) .addActionListener( new ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent e) { IMraLog log = source.getLog(fileToOpen); panel.loadVisualization(new LogTableVisualization(log, panel), true); } }); popup.show(tree, e.getX(), e.getY()); return; } final Vector<String> fieldsToPlot = new Vector<String>(); int count = 0; for (int i = 0; i < path.length; i++) { if (path[i].getPath().length == 3) { count++; String message = path[i].getPath()[1].toString(); String field = path[i].getPath()[2].toString(); fieldsToPlot.add(message + "." + field); } } if (count == 0) return; JPopupMenu popup = new JPopupMenu(); popup .add(I18n.text("Plot data")) .addActionListener( new ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent e) { panel.loadVisualization( new GenericPlot(fieldsToPlot.toArray(new String[0]), panel), true); } }); popup .add(I18n.text("Timeline Plot")) .addActionListener( new ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent e) { panel.loadVisualization( new ReplayPlot(panel, fieldsToPlot.toArray(new String[0])), true); } }); popup .add(I18n.text("Plot data on new window")) .addActionListener( new ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent e) { LLFChart chart = new GenericPlot(fieldsToPlot.toArray(new String[0]), panel); MRAChartPanel fcp = new MRAChartPanel(chart, source, panel); JDialog dialog = new JDialog(ConfigFetch.getSuperParentAsFrame()); dialog.setTitle("[MRA] " + chart.getName()); dialog.setIconImage(ImageUtils.getScaledImage("images/menus/graph.png", 16, 16)); dialog.add(fcp); dialog.setSize(640, 480); dialog.setResizable(true); dialog.setVisible(true); fcp.regeneratePanel(); } }); if (count == 1) { popup .add(I18n.text("Plot ColorMap")) .addActionListener( new ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent e) { NeptusLog.pub().info("<###> " + fieldsToPlot); panel.loadVisualization( new ColorMapVisualization(panel, "ALL", fieldsToPlot.get(0)), true); } }); } popup.show(tree, e.getX(), e.getY()); } }
public static File showSaveDialog() { return showOpenDialog(null, I18n.text("Save Checklist"), null); }
public OperationLimitsPanel(MissionType mt, boolean editArea) { this.mt = mt; setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); maxDepthCheck = new JCheckBox(I18n.text("Maximum Depth (m)")); minAltitudeCheck = new JCheckBox(I18n.text("Minimum Altitude (m)")); maxAltitudeCheck = new JCheckBox(I18n.text("Maximum Altitude (m)")); minSpeedCheck = new JCheckBox(I18n.text("Minimum Speed (m/s)")); maxSpeedCheck = new JCheckBox(I18n.text("Maximum Speed (m/s)")); areaCheck = new JCheckBox(I18n.text("Area Limits")); maxVRateCheck = new JCheckBox(I18n.text("Maximum Vertical Rate (m/s)")); maxDepthField = new JFormattedTextField(GuiUtils.getNeptusDecimalFormat(1) /*NumberFormat.getInstance()*/); maxAltitudeField = new JFormattedTextField(GuiUtils.getNeptusDecimalFormat(1) /*NumberFormat.getInstance()*/); minAltitudeField = new JFormattedTextField(GuiUtils.getNeptusDecimalFormat(1) /*NumberFormat.getInstance()*/); maxSpeedField = new JFormattedTextField(GuiUtils.getNeptusDecimalFormat(1) /*NumberFormat.getInstance()*/); minSpeedField = new JFormattedTextField(GuiUtils.getNeptusDecimalFormat(1) /*NumberFormat.getInstance()*/); maxVRateField = new JFormattedTextField(GuiUtils.getNeptusDecimalFormat(1) /*NumberFormat.getInstance()*/); JPanel tmp = new JPanel(new GridLayout(0, 2, 2, 10)); tmp.add(maxDepthCheck); tmp.add(maxDepthField); tmp.add(maxAltitudeCheck); tmp.add(maxAltitudeField); tmp.add(minAltitudeCheck); tmp.add(minAltitudeField); tmp.add(maxSpeedCheck); tmp.add(maxSpeedField); tmp.add(minSpeedCheck); tmp.add(minSpeedField); tmp.add(maxVRateCheck); tmp.add(maxVRateField); tmp.add(areaCheck); JButton b = new JButton(I18n.text("Select...")); b.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { RectangleEditor editor = new RectangleEditor(OperationLimitsPanel.this.mt); if (limits.getOpAreaLat() != null) { editor.pp = new ParallelepipedElement( MapGroup.getMapGroupInstance(OperationLimitsPanel.this.mt), null); editor.pp.setWidth(limits.getOpAreaWidth()); editor.pp.setLength(limits.getOpAreaLength()); editor.pp.setYawDeg(Math.toDegrees(limits.getOpRotationRads())); LocationType lt = new LocationType(); lt.setLatitudeDegs(limits.getOpAreaLat()); lt.setLongitudeDegs(limits.getOpAreaLon()); editor.pp.setCenterLocation(lt); editor.pp.setMyColor(Color.red); editor.btnOk.setEnabled(true); } ParallelepipedElement rectangle = editor.showDialog(OperationLimitsPanel.this); if (rectangle != null) { double lld[] = rectangle.getCenterLocation().getAbsoluteLatLonDepth(); limits.setOpAreaLat(lld[0]); limits.setOpAreaLon(lld[1]); limits.setOpAreaLength(rectangle.getLength()); limits.setOpAreaWidth(rectangle.getWidth()); limits.setOpRotationRads(rectangle.getYawRad()); } } }); tmp.add(b); if (!editArea) b.setEnabled(false); add(tmp); }