/** * Creates new PropertiesDialog. * * @param app parent frame */ public PropertiesDialog(Application app) { super(app.getFrame(), false); this.app = app; kernel = app.getKernel(); setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); setResizable(true); addWindowListener(this); geoTree = new JTreeGeoElements(); geoTree.addMouseListener( new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { // some textfields are updated when they lose focus // give them a chance to do that before we change the selection requestFocusInWindow(); } }); geoTree.addTreeSelectionListener(this); geoTree.addKeyListener(this); // build GUI initGUI(); }
/** shows this dialog and select GeoElement geo at screen position location */ public void setVisibleWithGeos(ArrayList<GeoElement> geos) { kernel.clearJustCreatedGeosInViews(); setViewActive(true); if (kernel.getConstruction().getGeoSetConstructionOrder().size() < MAX_GEOS_FOR_EXPAND_ALL) geoTree.expandAll(); else geoTree.collapseAll(); geoTree.setSelected(geos, false); if (!isShowing()) { // pack and center on first showing if (firstTime) { pack(); setLocationRelativeTo(app.getMainComponent()); firstTime = false; } // ensure min size Dimension dim = getSize(); if (dim.width < MIN_WIDTH) { dim.width = MIN_WIDTH; setSize(dim); } if (dim.height < MIN_HEIGHT) { dim.height = MIN_HEIGHT; setSize(dim); } super.setVisible(true); } }
public void geoElementSelected(GeoElement geo, boolean addToSelection) { if (geo == null) return; tempArrayList.clear(); tempArrayList.add(geo); geoTree.setSelected(tempArrayList, addToSelection); // requestFocus(); }
/** deletes all selected GeoElements from Kernel */ private void deleteSelectedGeos() { ArrayList selGeos = selectionList; if (selGeos.size() > 0) { Object[] geos = selGeos.toArray(); for (int i = 0; i < geos.length - 1; i++) { ((GeoElement) geos[i]).removeOrSetUndefinedIfHasFixedDescendent(); } // select element above last to delete GeoElement geo = (GeoElement) geos[geos.length - 1]; TreePath tp = geoTree.getTreePath(geo); if (tp != null) { int row = geoTree.getRowForPath(tp); tp = geoTree.getPathForRow(row - 1); geo.removeOrSetUndefinedIfHasFixedDescendent(); if (tp != null) geoTree.setSelectionPath(tp); } } }
/** handles selection change */ private void selectionChanged() { updateSelectedGeos(geoTree.getSelectionPaths()); Object[] geos = selectionList.toArray(); propPanel.updateSelection(geos); // Util.addKeyListenerToAll(propPanel, this); // update selection of application too if (app.getMode() == EuclidianConstants.MODE_SELECTION_LISTENER) app.setSelectedGeos(selectionList); }
/** * Update the labels of this dialog. * * <p>TODO Create "Apply Defaults" phrase (F.S.) */ public void setLabels() { setTitle(app.getPlain("Properties")); geoTree.root.setUserObject(app.getPlain("Objects")); delButton.setText(app.getPlain("Delete")); closeButton.setText(app.getMenu("Close")); defaultsButton.setText(app.getMenu("ApplyDefaults")); geoTree.setLabels(); propPanel.setLabels(); }
private void setViewActive(boolean flag) { if (flag == viewActive) return; viewActive = flag; if (flag) { geoTree.clear(); kernel.attach(geoTree); // // only add objects if there are less than 200 // int geoSize = kernel.getConstruction().getGeoSetConstructionOrder().size(); // if (geoSize < MAX_OBJECTS_IN_TREE) kernel.notifyAddAll(geoTree); app.setSelectionListenerMode(this); addWindowFocusListener(this); } else { kernel.detach(geoTree); removeWindowFocusListener(this); app.setSelectionListenerMode(null); } }
/** inits GUI with labels of current language */ public void initGUI() { geoTree.setFont(app.getPlainFont()); boolean wasShowing = isShowing(); if (wasShowing) { setVisible(false); } // LIST PANEL JScrollPane listScroller = new JScrollPane(geoTree); listScroller.setMinimumSize(new Dimension(120, 200)); listScroller.setBackground(geoTree.getBackground()); listScroller.setBorder(BorderFactory.createEmptyBorder(5, 5, 0, 5)); // delete button delButton = new JButton(app.getImageIcon("delete_small.gif")); delButton.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { deleteSelectedGeos(); } }); // apply defaults button defaultsButton = new JButton(); defaultsButton.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { applyDefaults(); } }); closeButton = new JButton(); closeButton.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { closeDialog(); } }); // build button panel with some buttons on the left // and some on the right JPanel buttonPanel = new JPanel(new BorderLayout()); JPanel leftButtonPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); JPanel rightButtonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); buttonPanel.add(rightButtonPanel, BorderLayout.EAST); buttonPanel.add(leftButtonPanel, BorderLayout.WEST); // left buttons if (app.letDelete()) leftButtonPanel.add(delButton); leftButtonPanel.add(defaultsButton); // right buttons rightButtonPanel.add(closeButton); // PROPERTIES PANEL if (colChooser == null) { // init color chooser colChooser = new GeoGebraColorChooser(app); } // check for null added otherwise you get two listeners for the colChooser // when a file is loaded if (propPanel == null) { propPanel = new PropertiesPanel(app, colChooser, false); propPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 0, 5)); } selectionChanged(); // init propPanel // put it all together Container contentPane = getContentPane(); contentPane.removeAll(); // contentPane.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1)); JSplitPane splitPane = new JSplitPane(); splitPane.setLeftComponent(listScroller); splitPane.setRightComponent(propPanel); contentPane.setLayout(new BorderLayout()); contentPane.add(splitPane, BorderLayout.CENTER); contentPane.add(buttonPanel, BorderLayout.SOUTH); if (wasShowing) { setVisible(true); } setLabels(); }