package org.geogebra.desktop.gui.layout.panels; import java.awt.event.WindowEvent; import java.awt.event.WindowFocusListener; import javax.swing.ImageIcon; import javax.swing.JComponent; import org.geogebra.common.main.App; import org.geogebra.desktop.gui.layout.DockPanelD; import org.geogebra.desktop.gui.view.properties.PropertiesStyleBarD; import org.geogebra.desktop.gui.view.properties.PropertiesViewD; import org.geogebra.desktop.main.AppD; import org.geogebra.desktop.util.GuiResourcesD; /** * Dock panel for the algebra view. */ public class PropertiesDockPanel extends DockPanelD implements WindowFocusListener { private static final long serialVersionUID = 1L; private AppD app; private PropertiesViewD view; private boolean closed; /** * @param app * application */ public PropertiesDockPanel(AppD app) { super(App.VIEW_PROPERTIES, // view id "Preferences", // view title phrase null, // toolbar string true, // style bar? -1, // menu order 'E' // menu shortcut ); this.app = app; this.setOpenInFrame(true); super.setDialog(true); } private void getPropertiesView() { view = (PropertiesViewD) app.getGuiManager().getPropertiesView(); } @Override protected JComponent loadComponent() { getPropertiesView(); if (isOpenInFrame()) { view.windowPanel(); } else { view.unwindowPanel(); } return view.getWrappedPanel(); } @Override protected JComponent loadStyleBar() { getPropertiesView(); return ((PropertiesStyleBarD) view.getStyleBar()).getWrappedPanel(); } @Override protected void updateTitleBarIfNecessary() { updateTitleBar(); } @Override public void windowPanel() { super.windowPanel(); getPropertiesView(); view.windowPanel(); } @Override public void unwindowPanel() { super.unwindowPanel(); getPropertiesView(); view.unwindowPanel(); } @Override protected void closePanel(boolean isPermanent) { super.closePanel(isPermanent); getPropertiesView(); view.applyModifications(); } @Override public ImageIcon getIcon() { return app.getMenuIcon(GuiResourcesD.VIEW_PROPERTIES_22); } @Override public void createFrame() { super.createFrame(); getFrame().addWindowFocusListener(this); } @Override public void updateLabels() { super.updateLabels(); if (view != null) { titleLabel .setText(view.getTypeString(view.getSelectedOptionType())); } } /** * Update all elements in the title bar. */ @Override public void updateTitleBar() { super.updateTitleBar(); titleLabel.setVisible(true); } @Override public void windowGainedFocus(WindowEvent arg0) { // only handle windowClosing } @Override public void windowLostFocus(WindowEvent arg0) { // only handle windowClosing } @Override public void windowClosing(WindowEvent e) { if (!closed) { closed = true; getPropertiesView(); view.applyModifications(); closeDialog(); } } public void closeDialog() { view.closeDialog(); } @Override public void setFocus(boolean hasFocus, boolean updatePropertiesView) { // no action on properties view } /** * update menubar (and dockbar) on visibility changes */ @Override public void setVisible(boolean isVisible) { super.setVisible(isVisible); if (isVisible || (view != null)) { dockManager.getLayout().getApplication().updateMenubar(); getPropertiesView(); view.setSelectedOptionPanelVisible(isVisible); } if (isVisible) { closed = false; } } @Override protected void setFocus(boolean hasFocus) { // nothing to do for properties view } }