/*******************************************************************************
* Copyright (c) 2016 Weasis Team and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Nicolas Roduit - initial API and implementation
*******************************************************************************/
package org.weasis.core.api.gui.util;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GraphicsConfiguration;
import java.awt.GridLayout;
import java.awt.Point;
import javax.swing.JButton;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
public class ScrollPopupMenu extends JPopupMenu {
private static final long serialVersionUID = 1L;
private JPanel panelMenus = null;
private JScrollPane scroll = null;
public ScrollPopupMenu( Point screenPt) {
super();
scroll = new JScrollPane();
panelMenus = new JPanel();
panelMenus.setLayout(new GridLayout(0, 1));
scroll.setViewportView(panelMenus);
scroll.setBorder(null);
GraphicsConfiguration gc = WinUtil.getGraphicsDeviceConfig(screenPt);
scroll.setMaximumSize(new Dimension(scroll.getMaximumSize().width, this.getToolkit().getScreenSize().height
- this.getToolkit().getScreenInsets(gc).top - this.getToolkit().getScreenInsets(gc).bottom - 4));
super.add(scroll);
}
@Override
public void show(Component invoker, int x, int y) {
this.pack();
panelMenus.validate();
int maxsize = scroll.getMaximumSize().height;
int realsize = panelMenus.getPreferredSize().height;
int sizescroll = 0;
if (maxsize < realsize) {
sizescroll = scroll.getVerticalScrollBar().getPreferredSize().width;
}
scroll.setPreferredSize(
new Dimension(scroll.getPreferredSize().width + sizescroll, scroll.getPreferredSize().height));
super.show(invoker, x, y);
}
public void addMenuItem(JMenuItem item) {
panelMenus.add(item);
}
public void add(JButton menuItem) {
panelMenus.add(menuItem);
}
@Override
public void addSeparator() {
panelMenus.add(new JSeparator());
}
}