/*******************************************************************************
* 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.ui.pref;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;
import org.weasis.core.api.gui.util.AbstractItemDialogPage;
import org.weasis.core.api.gui.util.PageProps;
import org.weasis.core.api.util.StringUtil;
import org.weasis.core.ui.Messages;
import org.weasis.core.ui.docking.UIManager;
import org.weasis.core.ui.editor.image.ImageViewerPlugin;
import org.weasis.core.ui.editor.image.MeasureToolBar;
import org.weasis.core.ui.editor.image.ViewCanvas;
import org.weasis.core.ui.editor.image.ViewerPlugin;
import org.weasis.core.ui.editor.image.dockable.MeasureTool;
import org.weasis.core.ui.model.GraphicModel;
import org.weasis.core.ui.model.graphic.Graphic;
import org.weasis.core.ui.model.utils.bean.Measurement;
public class LabelsPrefView extends AbstractItemDialogPage {
private static final long serialVersionUID = -1727609322145775651L;
private final JPanel panelList = new JPanel();
private final JComboBox<Graphic> comboBoxTool;
private final ItemListener toolsListener = e -> {
if (e.getStateChange() == ItemEvent.SELECTED) {
selectTool((Graphic) e.getItem());
}
};
public LabelsPrefView() {
super(MeasureTool.LABEL_PREF_NAME);
setComponentPosition(20);
setBorder(new EmptyBorder(15, 10, 10, 10));
BorderLayout borderLayout = new BorderLayout();
setLayout(borderLayout);
JPanel panel2 = new JPanel();
FlowLayout flowLayout1 = (FlowLayout) panel2.getLayout();
flowLayout1.setHgap(10);
flowLayout1.setAlignment(FlowLayout.RIGHT);
flowLayout1.setVgap(7);
add(panel2, BorderLayout.SOUTH);
JButton btnNewButton = new JButton(org.weasis.core.ui.Messages.getString("restore.values")); //$NON-NLS-1$
panel2.add(btnNewButton);
btnNewButton.addActionListener(e -> resetoDefaultValues());
JPanel panel1 = new JPanel();
panel1.setBorder(new TitledBorder(null, Messages.getString("LabelsPrefView.geometric1"), TitledBorder.LEADING, //$NON-NLS-1$
TitledBorder.TOP, null, null));
add(panel1, BorderLayout.CENTER);
panel1.setLayout(new BorderLayout(0, 0));
JPanel panel = new JPanel();
panel1.add(panel, BorderLayout.NORTH);
FlowLayout flowLayout = (FlowLayout) panel.getLayout();
flowLayout.setHgap(5);
flowLayout.setAlignment(FlowLayout.LEFT);
JLabel lblNewLabel = new JLabel(Messages.getString("LabelsPrefView.geometricshape") + StringUtil.COLON); //$NON-NLS-1$
panel.add(lblNewLabel);
ArrayList<Graphic> tools = new ArrayList<>(MeasureToolBar.measureGraphicList);
tools.remove(0);
comboBoxTool = new JComboBox<>(tools.stream().toArray(Graphic[]::new));
comboBoxTool.setMaximumRowCount(12);
selectTool((Graphic) comboBoxTool.getSelectedItem());
comboBoxTool.addItemListener(toolsListener);
panel.add(comboBoxTool);
panel1.add(panelList);
panelList.setLayout(new BoxLayout(panelList, BoxLayout.Y_AXIS));
addSubPage(new LabelPrefView(MeasureTool.viewSetting));
addSubPage(new StatisticsPrefView());
}
private void selectTool(Graphic graph) {
if (graph != null) {
panelList.removeAll();
List<Measurement> list = graph.getMeasurementList();
if (list != null) {
for (final Measurement m : list) {
JCheckBox box = new JCheckBox(m.getName(), m.getGraphicLabel());
box.addActionListener(e -> {
Object source = e.getSource();
if (source instanceof JCheckBox) {
m.setGraphicLabel(((JCheckBox) source).isSelected());
}
});
panelList.add(box);
}
}
panelList.revalidate();
panelList.repaint();
}
}
@Override
public void closeAdditionalWindow() {
for (PageProps subpage : getSubPages()) {
subpage.closeAdditionalWindow();
}
synchronized (UIManager.VIEWER_PLUGINS) {
for (int i = UIManager.VIEWER_PLUGINS.size() - 1; i >= 0; i--) {
ViewerPlugin<?> p = UIManager.VIEWER_PLUGINS.get(i);
if (p instanceof ImageViewerPlugin) {
for (Object v : ((ImageViewerPlugin<?>) p).getImagePanels()) {
if (v instanceof ViewCanvas) {
ViewCanvas<?> view = (ViewCanvas<?>) v;
GraphicModel graphicList = view.getGraphicManager();
graphicList.updateLabels(true, view);
}
}
}
}
}
}
@Override
public void resetoDefaultValues() {
MeasureToolBar.measureGraphicList.forEach(g -> {
List<Measurement> list = g.getMeasurementList();
Optional.ofNullable(list).ifPresent(l -> l.forEach(m -> m.resetToGraphicLabelValue()));
});
selectTool((Graphic) comboBoxTool.getSelectedItem());
}
}