package org.geogebra.desktop.gui.layout.panels; import java.awt.BorderLayout; import java.awt.Color; import java.awt.event.MouseEvent; import javax.swing.BorderFactory; import javax.swing.JComponent; import javax.swing.JPanel; import org.geogebra.common.euclidian.EuclidianStyleBar; import org.geogebra.common.euclidian.EuclidianView; import org.geogebra.common.euclidian.GetViewId; import org.geogebra.common.main.settings.ConstructionProtocolSettings; import org.geogebra.desktop.euclidianND.EuclidianViewInterfaceD; import org.geogebra.desktop.gui.layout.DockPanelD; import org.geogebra.desktop.gui.view.consprotocol.ConstructionProtocolNavigationD; /** * Abstract class for all "euclidian" panels. * * @author Mathieu * @remark {@link #getEuclidianView()} has to be overridden if * {@link #getComponent()} does not return the euclidian view directly */ public abstract class EuclidianDockPanelAbstract extends DockPanelD implements GetViewId { /** */ private static final long serialVersionUID = 1L; private boolean hasEuclidianFocus; private JPanel panel; /** * Component of the construction protocol navigation bar, invisible if not * needed. */ private ConstructionProtocolNavigationD consProtNav; /** * default constructor * * @param id * @param title * @param toolbar * @param hasStyleBar * @param menuOrder */ public EuclidianDockPanelAbstract(int id, String title, String toolbar, boolean hasStyleBar, int menuOrder, char shortcut) { super(id, title, toolbar, hasStyleBar, menuOrder, shortcut); } @Override public void mousePressed(MouseEvent arg0) { super.mousePressed(arg0); dockManager.setFocusedPanel(this); } /** * @return The euclidian view associated with this dock panel. * @remark This method has to be overridden if the component of the dock * panel is not the euclidian view itself */ abstract public EuclidianView getEuclidianView(); /** * sets this euclidian panel to have the "euclidian focus" * * @param hasFocus */ public final void setEuclidianFocus(boolean hasFocus) { hasEuclidianFocus = hasFocus; } @Override protected boolean titleIsBold() { return super.titleIsBold() || hasEuclidianFocus; } /** * create the focus panel (composed of titleLabel, and, for * EuclidianDockPanels, focus icon) * * @return the focus panel */ @Override protected JComponent createFocusPanel() { JPanel panel1 = new JPanel(); panel1.setLayout(new BorderLayout()); // add title label panel1.add(super.createFocusPanel(), app.getLocalization().borderWest()); return panel1; } @Override public boolean updateResizeWeight() { return true; } @Override protected void setStyleBar() { super.setStyleBar(); ((EuclidianStyleBar) styleBar).resetFirstPaint(); } @Override protected final JComponent loadComponent() { if (panel == null) { panel = new JPanel(new BorderLayout()); panel.add( ((EuclidianViewInterfaceD) getEuclidianView()).getJPanel(), BorderLayout.CENTER); consProtNav = (ConstructionProtocolNavigationD) app.getGuiManager() .getConstructionProtocolNavigation(id); ConstructionProtocolSettings cps = app.getSettings() .getConstructionProtocol(); consProtNav.settingsChanged(cps); cps.addListener(consProtNav); if (app.getShowCPNavNeedsUpdate(id)) { app.setShowConstructionProtocolNavigation( app.showConsProtNavigation(id), id); } consProtNav.getImpl().setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, Color.lightGray)); consProtNav.getImpl().setVisible(app.showConsProtNavigation(id)); panel.add(consProtNav.getImpl(), BorderLayout.SOUTH); // may be // invisible, // but made // visible // later } return panel; } }