/* * This file is part of ADDIS (Aggregate Data Drug Information System). * ADDIS is distributed from http://drugis.org/. * Copyright © 2009 Gert van Valkenhoef, Tommi Tervonen. * Copyright © 2010 Gert van Valkenhoef, Tommi Tervonen, Tijs Zwinkels, * Maarten Jacobs, Hanno Koeslag, Florin Schimbinschi, Ahmad Kamal, Daniel * Reid. * Copyright © 2011 Gert van Valkenhoef, Ahmad Kamal, Daniel Reid, Florin * Schimbinschi. * Copyright © 2012 Gert van Valkenhoef, Daniel Reid, Joël Kuiper, Wouter * Reckman. * Copyright © 2013 Gert van Valkenhoef, Joël Kuiper. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.drugis.addis.gui; import java.io.OutputStream; import java.io.PrintStream; import java.util.ArrayList; import javax.swing.Icon; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JLabel; import org.drugis.addis.FileNames; import org.drugis.addis.entities.AdverseEvent; import org.drugis.addis.entities.Domain; import org.drugis.addis.entities.Drug; import org.drugis.addis.entities.Endpoint; import org.drugis.addis.entities.Note; import org.drugis.addis.entities.PopulationCharacteristic; import org.drugis.addis.entities.Variable; import org.drugis.addis.gui.components.StudiesTablePanel; import org.drugis.addis.presentation.StudyListPresentation; import org.drugis.common.gui.GUIHelper; import org.drugis.common.gui.LinkLabel; import org.drugis.mtc.gui.MainWindow; import org.jfree.chart.ChartFactory; import org.jfree.chart.StandardChartTheme; import org.jfree.chart.renderer.category.StandardBarPainter; import com.jgoodies.binding.adapter.BasicComponentFactory; import com.jgoodies.binding.list.SelectionInList; import com.jgoodies.binding.value.AbstractValueModel; public class GUIFactory { private static PrintStream s_errorStream = System.err; public static JButton createPlusButton(final String toolTipText) { return createIconButton(FileNames.ICON_PLUS, toolTipText); } public static JButton createIconButton(final String iconName, final String toolTipText) { suppressErrors(true); Icon icon = Main.IMAGELOADER.getIcon(iconName); if(icon == null) { suppressErrors(false); icon = MainWindow.IMAGELOADER.getIcon(iconName); // Fallback to MTC ImageLoader } JButton button = new JButton(icon); button.setToolTipText(toolTipText); return button; } public static void suppressErrors(boolean suppress) { if(suppress) { System.setErr(new PrintStream(new OutputStream() { // suppress system.err output public void write(int b) { } })); } else { System.setErr(s_errorStream); // reset system.err output } } public static JButton createLabeledIconButton(final String label, final String iconName) { JButton btn = createIconButton(iconName, label); btn.setText(label); return btn; } public static JComponent createOutcomeMeasureLabelWithIcon(final Variable e, final boolean isPrimary) { String fname = FileNames.ICON_STUDY; String primary = ""; if (e instanceof Endpoint) { fname = FileNames.ICON_ENDPOINT; primary = isPrimary ? " (primary)" : " (secondary)"; } else if (e instanceof AdverseEvent) { fname = FileNames.ICON_ADVERSE_EVENT; } else if (e instanceof PopulationCharacteristic) { fname = FileNames.ICON_POPULATION_CHAR; } Icon icon = Main.IMAGELOADER.getIcon(fname); return new JLabel(e.getName() + primary, icon, JLabel.CENTER); } public static JComponent buildStudyPanel(final StudyListPresentation studies, final AddisWindow parent) { JComponent studiesComp = null; if(studies.getIncludedStudies().isEmpty()) { studiesComp = new JLabel("No studies found."); } else { studiesComp = new StudiesTablePanel(studies, parent); } return studiesComp; } public static JLabel buildSiteLink() { return new LinkLabel("www.drugis.org", "http://drugis.org/"); } public static JComboBox createDrugSelector(final AbstractValueModel drugModel, final Domain domain) { SelectionInList<Drug> drugSelectionInList = new SelectionInList<Drug>( new ArrayList<Drug>(domain.getDrugs()), drugModel); return BasicComponentFactory.createComboBox(drugSelectionInList); } public static void configureJFreeChartLookAndFeel() { StandardChartTheme chartTheme = new StandardChartTheme("ADDIS"); chartTheme.setBarPainter(new StandardBarPainter()); chartTheme.setShadowVisible(false); ChartFactory.setChartTheme(chartTheme); } public static String createToolTip(final Note note) { if (note == null) { return null; } return "<html><b>From " + note.getSource().toString() + "</b><br>\n" + GUIHelper.wordWrap(note.getText(), false) + "</html>"; } }