package com.niklim.clicktrace.dialog.settings;
import java.awt.Component;
import java.awt.Font;
import java.util.List;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import net.miginfocom.swing.MigLayout;
import com.google.common.collect.Lists;
import com.niklim.clicktrace.capture.voter.LineVoter.ChangeSensitivity;
import com.niklim.clicktrace.props.UserProperties.MarkupSyntax;
public class AdvancedSettingsComponent {
private JCheckBox advanced;
private JRadioButton markdownSyntaxRadio;
private JRadioButton confluenceSyntaxRadio;
private ButtonGroup markupSyntaxRadioGroup;
private JRadioButton changeSensitivityHighRadio;
private JRadioButton changeSensitivityNormalRadio;
private JRadioButton changeSensitivityLowRadio;
private ButtonGroup changeSensitivityRadioGroup;
private JDialog settingsDialog;
private List<Component> components = Lists.newArrayList();
public AdvancedSettingsComponent(final JDialog settingsDialog) {
this.settingsDialog = settingsDialog;
createCheckbox();
settingsDialog.add(advanced, "wrap");
createMarkupSyntaxPanel();
createCaptureChangeDetectionLevelPanel();
advanced.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent arg0) {
toggleVisibility();
settingsDialog.pack();
}
});
toggleVisibility();
}
private void createCheckbox() {
advanced = new JCheckBox("Advanced");
Font font = advanced.getFont();
// same font but bold
Font boldFont = new Font(font.getFontName(), Font.BOLD, font.getSize());
advanced.setFont(boldFont);
}
private void toggleVisibility() {
for (Component c : components) {
c.setVisible(advanced.isSelected());
}
}
public void init(ChangeSensitivity changeSensitivity, MarkupSyntax markupSyntax) {
initChangeSensitivity(changeSensitivity);
initMarkupSyntax(markupSyntax);
}
private void initMarkupSyntax(MarkupSyntax markupSyntax) {
if (markupSyntax == MarkupSyntax.MARKDOWN) {
markupSyntaxRadioGroup.setSelected(markdownSyntaxRadio.getModel(), true);
} else if (markupSyntax == MarkupSyntax.CONFLUENCE) {
markupSyntaxRadioGroup.setSelected(confluenceSyntaxRadio.getModel(), true);
}
}
private void initChangeSensitivity(ChangeSensitivity changeSensitivity) {
if (changeSensitivity == ChangeSensitivity.HIGH) {
changeSensitivityRadioGroup.setSelected(changeSensitivityHighRadio.getModel(), true);
} else if (changeSensitivity == ChangeSensitivity.NORMAL) {
changeSensitivityRadioGroup.setSelected(changeSensitivityNormalRadio.getModel(), true);
} else if (changeSensitivity == ChangeSensitivity.LOW) {
changeSensitivityRadioGroup.setSelected(changeSensitivityLowRadio.getModel(), true);
}
}
public ChangeSensitivity getChangeSensitivity() {
if (changeSensitivityRadioGroup.isSelected(changeSensitivityHighRadio.getModel())) {
return ChangeSensitivity.HIGH;
} else if (changeSensitivityRadioGroup.isSelected(changeSensitivityNormalRadio.getModel())) {
return ChangeSensitivity.NORMAL;
} else if (changeSensitivityRadioGroup.isSelected(changeSensitivityLowRadio.getModel())) {
return ChangeSensitivity.LOW;
} else {
return null;
}
}
public MarkupSyntax getMarkupSyntax() {
if (markupSyntaxRadioGroup.isSelected(markdownSyntaxRadio.getModel())) {
return MarkupSyntax.MARKDOWN;
} else if (markupSyntaxRadioGroup.isSelected(confluenceSyntaxRadio.getModel())) {
return MarkupSyntax.CONFLUENCE;
} else {
return null;
}
}
private void createMarkupSyntaxPanel() {
markdownSyntaxRadio = new JRadioButton("Markdown");
confluenceSyntaxRadio = new JRadioButton("Confluence/JIRA");
JLabel label = new JLabel("Markup syntax");
settingsDialog.add(label);
JPanel radioPanel = new JPanel(new MigLayout("fill, insets 0"));
radioPanel.add(confluenceSyntaxRadio);
radioPanel.add(markdownSyntaxRadio);
settingsDialog.add(radioPanel, "align l, wrap");
markupSyntaxRadioGroup = new ButtonGroup();
markupSyntaxRadioGroup.add(markdownSyntaxRadio);
markupSyntaxRadioGroup.add(confluenceSyntaxRadio);
components.add(label);
components.add(markdownSyntaxRadio);
components.add(confluenceSyntaxRadio);
}
private void createCaptureChangeDetectionLevelPanel() {
changeSensitivityHighRadio = new JRadioButton("high");
changeSensitivityHighRadio.setToolTipText("detect blinking text cursor");
changeSensitivityNormalRadio = new JRadioButton("normal");
changeSensitivityNormalRadio.setToolTipText("default sensitivity");
changeSensitivityLowRadio = new JRadioButton("low");
JLabel label = new JLabel("Change sensitivity");
settingsDialog.add(label);
JPanel radioPanel = new JPanel(new MigLayout("fill, insets 0"));
radioPanel.add(changeSensitivityHighRadio);
radioPanel.add(changeSensitivityNormalRadio);
radioPanel.add(changeSensitivityLowRadio);
settingsDialog.add(radioPanel, "grow, wrap");
changeSensitivityRadioGroup = new ButtonGroup();
changeSensitivityRadioGroup.add(changeSensitivityHighRadio);
changeSensitivityRadioGroup.add(changeSensitivityNormalRadio);
changeSensitivityRadioGroup.add(changeSensitivityLowRadio);
components.add(label);
components.add(changeSensitivityHighRadio);
components.add(changeSensitivityNormalRadio);
components.add(changeSensitivityLowRadio);
}
}