package com.baselet.gui; import java.awt.Color; import java.awt.Cursor; import java.awt.Frame; import java.util.Collection; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.UIManager; import javax.swing.plaf.InsetsUIResource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.baselet.control.CanCloseProgram; import com.baselet.control.HandlerElementMap; import com.baselet.control.config.Config; import com.baselet.diagram.CustomPreviewHandler; import com.baselet.diagram.DiagramHandler; import com.baselet.diagram.DrawPanel; import com.baselet.element.interfaces.GridElement; import com.baselet.element.old.custom.CustomElement; import com.baselet.element.old.custom.CustomElementHandler; import com.baselet.gui.menu.MenuFactorySwing; import com.baselet.gui.pane.OwnSyntaxPane; public abstract class BaseGUI { private static final Logger log = LoggerFactory.getLogger(BaseGUI.class); protected CanCloseProgram main; protected Collection<GridElement> selected_elements; protected boolean paletteEdited = false; public BaseGUI(CanCloseProgram main) { this.main = main; } public final void initGUI() { try { UIManager.setLookAndFeel(Config.getInstance().getUiManager()); } catch (Exception e) { // If the LookAndFeel cannot be set, it gets logged (without stacktrace) and the default style is used log.error(e.getMessage()); } initGUIParameters(); // this.setLayout(new BorderLayout()); init(); // this.requestFocus(); } public abstract void focusPropertyPane(); public JPopupMenu getContextMenu(GridElement e) { MenuFactorySwing menuFactory = MenuFactorySwing.getInstance(); JPopupMenu contextMenu = new JPopupMenu(); if (e instanceof CustomElement) { contextMenu.add(menuFactory.createEditSelected()); } if (!(HandlerElementMap.getHandlerForElement(e) instanceof CustomPreviewHandler)) { contextMenu.add(menuFactory.createDelete()); contextMenu.add(menuFactory.createCopy()); contextMenu.add(menuFactory.createCut()); } JMenuItem group = menuFactory.createGroup(); contextMenu.add(group); if (selected_elements.size() < 2) { group.setEnabled(false); } JMenuItem ungroup = menuFactory.createUngroup(); contextMenu.add(ungroup); if (e.getGroup() == null) { ungroup.setEnabled(false); } contextMenu.add(menuFactory.createSetColor(true)); contextMenu.add(menuFactory.createSetColor(false)); contextMenu.add(createAlignmentMenu(menuFactory)); contextMenu.add(createLayerMenu(menuFactory)); return contextMenu; } private JMenu createLayerMenu(MenuFactorySwing menuFactory) { JMenu layerMenu = menuFactory.createLayerUp(); layerMenu.setEnabled(!selected_elements.isEmpty()); return layerMenu; } private JMenu createAlignmentMenu(MenuFactorySwing menuFactory) { JMenu alignmentMenu = menuFactory.createAlign(); alignmentMenu.setEnabled(selected_elements.size() > 1); // only enable when at least 2 elements are selected return alignmentMenu; } public void elementsSelected(Collection<GridElement> selectedElements) { selected_elements = selectedElements; } protected void initGUIParameters() { UIManager.put("TabbedPane.selected", Color.white); UIManager.put("TabbedPane.tabInsets", new InsetsUIResource(0, 4, 1, 0)); UIManager.put("TabbedPane.contentBorderInsets", new InsetsUIResource(0, 0, 0, 0)); } public void setPaletteEdited(boolean isEdited) { paletteEdited = isEdited; } public boolean getPaletteEdited() { return paletteEdited; } public abstract CustomElementHandler getCurrentCustomHandler(); public abstract void setCustomPanelEnabled(boolean enable); public abstract void setMailPanelEnabled(boolean enable); public abstract boolean isMailPanelVisible(); public abstract void updateDiagramName(DiagramHandler diagram, String name); public abstract void setDiagramChanged(DiagramHandler diagram, boolean changed); public abstract void setCustomElementChanged(CustomElementHandler handler, boolean changed); public abstract void closeWindow(); protected abstract void init(); public abstract String getSelectedPalette(); public void showPalette(String palette) { Config.getInstance().setLastUsedPalette(palette); } public abstract void open(DiagramHandler diagram); public abstract void jumpTo(DiagramHandler diagram); public abstract void close(DiagramHandler diagram); public abstract DrawPanel getCurrentDiagram(); public abstract void enablePasteMenuEntry(); public abstract void setCustomElementSelected(boolean selected); public abstract void diagramSelected(DiagramHandler handler); public void enableSearch(@SuppressWarnings("unused") boolean enable) { /* do nothing */ } public abstract int getMainSplitPosition(); public abstract int getMailSplitPosition(); public abstract int getRightSplitPosition(); public abstract OwnSyntaxPane getPropertyPane(); public abstract void setValueOfZoomDisplay(int i); public abstract boolean hasExtendedContextMenu(); public abstract boolean saveWindowSizeInConfig(); public void afterSaving() { /* do nothing */ } public abstract void setCursor(Cursor cursor); public abstract void requestFocus(); public void updateGrayedOutMenuItems(@SuppressWarnings("unused") DiagramHandler handler) { /* do nothing */ } public abstract Frame getMainFrame(); public void setLookAndFeel(String newui, JFrame optionframe) { /* do nothing */ } }