package com.baselet.custom;
import java.awt.Color;
import java.awt.Component;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.text.JTextComponent;
import com.baselet.control.config.DerivedConfig;
import com.baselet.diagram.DiagramHandler;
import com.baselet.diagram.DrawPanel;
import com.baselet.element.old.custom.CustomElementHandler;
import com.baselet.gui.listener.DividerListener;
@SuppressWarnings("serial")
public class CustomElementPanel extends JPanel {
private final CustomElementAddDiscardListener saveListener = new CustomElementAddDiscardListener();
private final JSplitPane custompanelsplitleft;
private final JSplitPane custompanelsplitright;
private final JLabel savelabel;
private final CustomElementHandler customhandler;
private final CustomCodeSyntaxPane customcodepane;
private final DrawPanel custompreviewpanel;
public CustomElementPanel(CustomElementHandler customhandler) {
this.customhandler = customhandler;
setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
JPanel custompanel2 = new JPanel();
custompanel2.setLayout(new BoxLayout(custompanel2, BoxLayout.Y_AXIS));
JLabel codelabel = new JLabel(" Code");
codelabel.setFont(DerivedConfig.getPanelHeaderFont());
codelabel.setAlignmentX(Component.LEFT_ALIGNMENT);
custompanel2.add(codelabel);
customcodepane = customhandler.getCodePane();
JPanel codePanel = customcodepane.getPanel();
codePanel.setAlignmentX(Component.LEFT_ALIGNMENT);
custompanel2.add(codePanel);
JPanel custompanel3 = new JPanel();
custompanel3.setLayout(new BoxLayout(custompanel3, BoxLayout.Y_AXIS));
DiagramHandler d = customhandler.getPreviewHandler();
custompreviewpanel = d.getDrawPanel();
custompreviewpanel.getScrollPane().setAlignmentX(Component.LEFT_ALIGNMENT);
JLabel previewlabel = new JLabel(" Preview");
previewlabel.setFont(DerivedConfig.getPanelHeaderFont());
previewlabel.setAlignmentX(Component.LEFT_ALIGNMENT);
JPanel labelpanel = new JPanel();
labelpanel.setLayout(new BoxLayout(labelpanel, BoxLayout.Y_AXIS));
labelpanel.setAlignmentX(Component.LEFT_ALIGNMENT);
savelabel = new JLabel(" Add to diagram and close editor") {
private boolean enabled = false;
@Override
public void setEnabled(boolean en) {
if (!enabled && en) {
enabled = en;
addMouseListener(saveListener);
}
else if (enabled && !en) {
enabled = en;
removeMouseListener(saveListener);
}
}
};
savelabel.setFont(DerivedConfig.getPanelHeaderFont());
savelabel.setAlignmentX(Component.RIGHT_ALIGNMENT);
savelabel.setEnabled(true);
JLabel discardlabel = new JLabel("Discard and close editor");
discardlabel.setFont(DerivedConfig.getPanelHeaderFont());
discardlabel.setAlignmentX(Component.RIGHT_ALIGNMENT);
discardlabel.addMouseListener(saveListener);
custompanel3.add(previewlabel);
custompanel3.add(custompreviewpanel.getScrollPane());
custompanel3.add(labelpanel);
custompanel3.addComponentListener(new DividerListener());
labelpanel.add(Box.createHorizontalGlue());
labelpanel.add(savelabel);
labelpanel.add(discardlabel);
custompanelsplitleft = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, null, custompanel2);
custompanelsplitleft.setDividerSize(5);
custompanelsplitleft.setResizeWeight(0);
custompanelsplitleft.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0), 0));
custompanelsplitright = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, custompanelsplitleft, custompanel3);
custompanelsplitright.setDividerSize(5);
custompanelsplitright.setResizeWeight(1);
custompanelsplitright.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0), 0));
this.add(custompanelsplitright);
}
public void setCustomElementSaveable(boolean enable) {
customhandler.getPreviewHandler().getDrawPanel().setEnabled(enable);
savelabel.setEnabled(enable);
if (enable) {
savelabel.setForeground(Color.black);
}
else {
savelabel.setForeground(Color.gray);
}
}
// specifies if the custom element is opened as new element or as edited element
public void setCustomElementIsNew(boolean isnew) {
if (isnew) {
savelabel.setText("Add to diagram and close editor");
}
else {
savelabel.setText("Update in diagram and close editor");
}
}
public JSplitPane getLeftSplit() {
return custompanelsplitleft;
}
public JSplitPane getRightSplit() {
return custompanelsplitright;
}
public JTextComponent getTextPane() {
return customcodepane.getTextComponent();
}
@Override
public void repaint() {
super.repaint();
if (customcodepane != null) {
customcodepane.repaint();
}
if (custompreviewpanel != null && custompreviewpanel.getScrollPane() != null) {
custompreviewpanel.getScrollPane().repaint();
}
}
}