Skip to content

Commit

Permalink
Merge 8f05fa7 into 3881371
Browse files Browse the repository at this point in the history
  • Loading branch information
balazsracz authored Mar 27, 2021
2 parents 3881371 + 8f05fa7 commit 95cd298
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 11 deletions.
35 changes: 29 additions & 6 deletions src/org/openlcb/cdi/swing/CdiPanel.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
Expand Down Expand Up @@ -67,6 +69,7 @@
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
Expand Down Expand Up @@ -117,11 +120,14 @@ public class CdiPanel extends JPanel {
private boolean _panelChange = false; // set true when a panel item changed.
private JButton _saveButton;
private Color COLOR_DEFAULT;
private List<util.CollapsiblePanel> segmentPanels = new ArrayList<>();
private final Color COLOR_BACKGROUND;

public CdiPanel () {
super();
tabColorTimer = new Timer("OpenLCB CDI Reader Tab Color Timer");
setForeground(getBackground().darker());
COLOR_BACKGROUND = getBackground().darker();
setForeground(COLOR_BACKGROUND);
}

/**
Expand Down Expand Up @@ -170,15 +176,15 @@ public void initComponents(ConfigRepresentation rep, GuiItemFactory factory) {
contentPanel = new JPanel();
contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));
contentPanel.setAlignmentX(Component.LEFT_ALIGNMENT);

contentPanel.setBackground(COLOR_BACKGROUND);

scrollPane = new JScrollPane(contentPanel);
Dimension minScrollerDim = new Dimension(800, 12);
scrollPane.setMinimumSize(minScrollerDim);
scrollPane.getVerticalScrollBar().setUnitIncrement(30);
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

add(scrollPane);
//add(contentPanel);

buttonBar = new JPanel();
//buttonBar.setAlignmentX(Component.LEFT_ALIGNMENT);
Expand Down Expand Up @@ -217,6 +223,7 @@ public void initComponents(ConfigRepresentation rep, GuiItemFactory factory) {

createSensorCreateHelper();

buttonBar.setMaximumSize(buttonBar.getMinimumSize());
add(buttonBar);

_changeMade = false;
Expand All @@ -229,6 +236,14 @@ public void initComponents(ConfigRepresentation rep, GuiItemFactory factory) {
displayLoadingProgress();
}
}

addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent componentEvent) {
updateWidth();
super.componentResized(componentEvent);
}
});
}

private void createSensorCreateHelper() {
Expand Down Expand Up @@ -581,6 +596,7 @@ public void windowClosing(WindowEvent e) {
}
});
});
segmentPanels.forEach(p -> p.setExpanded(false));
}

private void targetWindowClosingEvent(WindowEvent e) {
Expand Down Expand Up @@ -740,6 +756,12 @@ private void repack() {
if (win != null) win.pack();
}

private void updateWidth() {
int w = getSize().width - 4;
// Delays updating the segment width until the rendering of the panels is complete.
runNowOrLater(()->{ segmentPanels.forEach(p->p.setMaximumWidth(w)); });
}

private void performTabColorRefresh(long requestTick) {
synchronized (tabColorTimer) {
if (lastColorRefreshDone >= requestTick) return; // nothing to do
Expand Down Expand Up @@ -844,13 +866,13 @@ public void visitSegment(ConfigRepresentation.SegmentEntry e) {
super.visitSegment(e);

String name = "Segment" + (e.getName() != null ? (": " + e.getName()) : "");
JPanel ret = new util.CollapsiblePanel(name, currentPane);
util.CollapsiblePanel ret = new util.CollapsiblePanel(name, currentPane);
segmentPanels.add(ret);
// ret.setBorder(BorderFactory.createLineBorder(java.awt.Color.RED)); //debugging
ret.setAlignmentY(Component.TOP_ALIGNMENT);
ret.setAlignmentX(Component.LEFT_ALIGNMENT);
ret.setBorder(BorderFactory.createMatteBorder(10,0,0,0, getForeground()));
contentPanel.add(ret);
EventQueue.invokeLater(() -> repack());
}

@Override
Expand Down Expand Up @@ -1054,7 +1076,8 @@ JPanel createIdentificationPane(CdiRep c) {
p.add(p2);
}

JPanel ret = new util.CollapsiblePanel("Identification", p);
util.CollapsiblePanel ret = new util.CollapsiblePanel("Identification", p);
segmentPanels.add(ret);
ret.setAlignmentY(Component.TOP_ALIGNMENT);
ret.setAlignmentX(Component.LEFT_ALIGNMENT);
return ret;
Expand Down
52 changes: 47 additions & 5 deletions src/util/CollapsiblePanel.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.RenderingHints;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.font.FontRenderContext;
Expand All @@ -19,6 +23,7 @@
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.border.MatteBorder;
Expand All @@ -30,8 +35,10 @@ public class CollapsiblePanel extends JPanel {
private boolean selected;
JPanel contentPanel_;
HeaderPanel headerPanel_;
// The width given by the parent which we should try to set as a maximum width for the layout.
private int setWidth_ = Integer.MAX_VALUE;

private class HeaderPanel extends JPanel implements MouseListener {
private class HeaderPanel extends JPanel implements MouseListener, FocusListener, KeyListener {
/** Comment for <code>serialVersionUID</code>. */
private static final long serialVersionUID = 3553276313551309624L;

Expand All @@ -42,11 +49,14 @@ private class HeaderPanel extends JPanel implements MouseListener {

public HeaderPanel(String text) {
addMouseListener(this);
addKeyListener(this);
text_ = text;
getAccessibleContext().setAccessibleName(text);
font = UIManager.getFont("Label.font").deriveFont(Font.BOLD);
// setRequestFocusEnabled(true);
setPreferredSize(new Dimension(200, 20));
setMinimumSize(new Dimension(0, 32));
setFocusable(true);
addFocusListener(this);
setPreferredSize(new Dimension(200, 24));
setMinimumSize(new Dimension(0, 24));
try {
closed = ImageIO.read(getClass().getResourceAsStream("/toolbarButtonGraphics/navigation/Forward24.gif"));
open = ImageIO.read(getClass().getResourceAsStream("/toolbarButtonGraphics/navigation/Down24.gif"));
Expand Down Expand Up @@ -80,6 +90,7 @@ protected void paintComponent(Graphics g) {

@Override
public void mouseClicked(MouseEvent e) {
requestFocus();
toggleSelection();
}

Expand All @@ -94,6 +105,32 @@ public void mousePressed(MouseEvent e) { }

@Override
public void mouseReleased(MouseEvent e) { }

@Override
public void focusGained(FocusEvent focusEvent) {
setBorder(BorderFactory.createDashedBorder(Color.BLACK));
}

@Override
public void focusLost(FocusEvent focusEvent) {
setBorder(BorderFactory.createEmptyBorder());
}

@Override
public void keyTyped(KeyEvent keyEvent) {
}

@Override
public void keyPressed(KeyEvent keyEvent) {
int c = keyEvent.getKeyCode();
if (c == KeyEvent.VK_SPACE || c==KeyEvent.VK_ENTER) {
toggleSelection();
}
}

@Override
public void keyReleased(KeyEvent keyEvent) {
}
}

public CollapsiblePanel(String text, JPanel panel) {
Expand Down Expand Up @@ -131,10 +168,15 @@ public void setExpanded(boolean isExpanded) {
}
}

public void setMaximumWidth(int w) {
setWidth_ = w;
invalidate();
}

@Override
public Dimension getMaximumSize() {
Dimension d = super.getPreferredSize();
d.width = Integer.MAX_VALUE;
d.width = setWidth_;
return d;
}
}
Expand Down

0 comments on commit 95cd298

Please sign in to comment.