package ql.gui;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
import ql.ast.Questionnaire;
import ql.gui.renderer.GuiRenderer;
import ql.gui.widget.LabelInputPair;
/**
* @author orosu
*/
public class QuestionnaireFrame extends JFrame
{
private static final long serialVersionUID = 1L;
private int _numHeaderMessages;
private final JPanel _headerPanel;
private final JPanel _mainPanel;
private final LinkedHashMap<String, LabelInputPair> _labelInputPairs;
public QuestionnaireFrame(final Questionnaire questionnaire, final GuiRenderer guiRenderer)
{
// General Configuration
this.setTitle(questionnaire.getId());
this.setLocationByPlatform(true);
this.setMinimumSize(new Dimension(200, 20));
this.setLayout(new BorderLayout());
// Close Event
this.addWindowListener(new WindowAdapter()
{
@Override
public void windowClosing(WindowEvent we) {
// Check if other frames are still running, otherwise exit
if (guiRenderer.getQuestionnaireList().size() == 1) {
System.exit(0);
} else {
guiRenderer.removeQuestionnaire(questionnaire);
}
}
});
// Header Panel
this._headerPanel = new JPanel();
this._headerPanel.setLayout(new GridBagLayout());
this.add(this._headerPanel, BorderLayout.NORTH);
this._numHeaderMessages = 0;
this._labelInputPairs = new LinkedHashMap<String, LabelInputPair>();
// Main Panel
this._mainPanel = new JPanel();
this._mainPanel.setLayout(new GridBagLayout());
this.add(this._mainPanel, BorderLayout.CENTER);
}
public void build()
{
List<LabelInputPair> labelInputPairs = new ArrayList<LabelInputPair>
(this._labelInputPairs.values());
for (int i = 0; i < labelInputPairs.size(); i++) {
LabelInputPair labelInputPair = labelInputPairs.get(i);
this._mainPanel.add(labelInputPair.getLabel(), this._createGridBagConstraints(0, i));
this._mainPanel.add(labelInputPair.getInput().getJComponent(),
this._createGridBagConstraints(1, i));
}
// Resize
this.pack();
}
public void addLabelInputPair(String id, LabelInputPair labelInputPair)
{
this._labelInputPairs.put(id, labelInputPair);
}
public boolean containsLabelInputPair(String id)
{
return this._labelInputPairs.containsKey(id);
}
public LabelInputPair getLabelInputPairById(String id)
{
return this._labelInputPairs.get(id);
}
public void setHeaderMessage(String text)
{
Label label = new Label("");
label.setForeground(Color.red);
label.setText(text);
label.setVisible(true);
this._headerPanel.add(label, this._createGridBagConstraints(0, this._numHeaderMessages));
this._numHeaderMessages++;
this.pack();
}
public void clearHeaderMessages()
{
this._headerPanel.removeAll();
this.pack();
}
private GridBagConstraints _createGridBagConstraints(int x, int y)
{
GridBagConstraints gridBagConstraints = new GridBagConstraints();
gridBagConstraints.gridx = x; // column
gridBagConstraints.gridy = y; // row
gridBagConstraints.anchor = GridBagConstraints.WEST; // align left
gridBagConstraints.insets = new Insets(1, 2, 2, 2);
return gridBagConstraints;
}
}