blob: a399fc4174e6f4fe612754366d612bc160644733 [file] [log] [blame]
// Copyright 2008-2010 Victor Iacoban
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under
// the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
// either express or implied. See the License for the specific language governing permissions and
// limitations under the License.
package org.zmlx.hg4idea.ui;
import com.intellij.ui.IdeBorderFactory;
import com.intellij.ui.components.JBCheckBox;
import net.miginfocom.swing.MigLayout;
import org.jetbrains.annotations.NotNull;
import org.zmlx.hg4idea.provider.update.HgUpdateConfigurationSettings;
import org.zmlx.hg4idea.provider.update.HgUpdateType;
import javax.swing.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
/**
* Configuration dialog for the update process.
*/
public class HgUpdateDialog {
private JComponent myContentPanel;
private JCheckBox myPullCheckBox;
private JCheckBox myCommitAfterMergeCheckBox;
private JRadioButton myOnlyUpdateButton;
private JRadioButton myMergeRadioButton;
private JRadioButton myRebaseRadioButton;
public HgUpdateDialog() {
myContentPanel = createCenterPanel();
}
@NotNull
public JComponent getContentPanel() {
return myContentPanel;
}
private void updateEnabledStates() {
myCommitAfterMergeCheckBox.setEnabled(myMergeRadioButton.isSelected());
}
public void applyTo(@NotNull HgUpdateConfigurationSettings updateConfiguration) {
updateConfiguration.setShouldPull(myPullCheckBox.isSelected());
if (myOnlyUpdateButton.isSelected()) {
updateConfiguration.setUpdateType(HgUpdateType.ONLY_UPDATE);
}
if (myMergeRadioButton.isSelected()) {
updateConfiguration.setUpdateType(HgUpdateType.MERGE);
}
if (myRebaseRadioButton.isSelected()) {
updateConfiguration.setUpdateType(HgUpdateType.REBASE);
}
updateConfiguration.setShouldCommitAfterMerge(myCommitAfterMergeCheckBox.isSelected());
}
@NotNull
public JComponent createCenterPanel() {
MigLayout migLayout = new MigLayout("flowy,ins 0, fill");
JPanel contentPane = new JPanel(migLayout);
myPullCheckBox = new JBCheckBox("Pull", true);
myPullCheckBox.setMnemonic('p');
myPullCheckBox.setToolTipText("Pull from the default remote repository");
myPullCheckBox.setSelected(true);
myOnlyUpdateButton = new JRadioButton("Only Update", true);
myOnlyUpdateButton.setMnemonic('u');
myOnlyUpdateButton.setToolTipText("Update to the head of the current branch");
myMergeRadioButton = new JRadioButton("Merge", false);
myMergeRadioButton.setMnemonic('m');
myMergeRadioButton.setToolTipText("Merge if pulling resulted in extra heads");
myMergeRadioButton.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
updateEnabledStates();
}
});
myCommitAfterMergeCheckBox = new JCheckBox("Commit after merge without conflicts", false);
myCommitAfterMergeCheckBox.setMnemonic('c');
myCommitAfterMergeCheckBox.setToolTipText("Commit automatically after the merge");
myCommitAfterMergeCheckBox.setSelected(false);
myRebaseRadioButton = new JRadioButton("Rebase", false);
myRebaseRadioButton.setToolTipText("Rebase changesets to a branch tip as destination");
myRebaseRadioButton.setMnemonic('r');
contentPane.add(myPullCheckBox, "left");
JPanel strategyPanel = new JPanel(migLayout);
strategyPanel.setBorder(IdeBorderFactory.createTitledBorder("Update Strategy", false));
strategyPanel.add(myOnlyUpdateButton, "left");
strategyPanel.add(myMergeRadioButton, "left");
strategyPanel.add(myCommitAfterMergeCheckBox, "gapx 5%");
strategyPanel.add(myRebaseRadioButton, "left");
contentPane.add(strategyPanel);
ButtonGroup group = new ButtonGroup();
group.add(myOnlyUpdateButton);
group.add(myRebaseRadioButton);
group.add(myMergeRadioButton);
updateEnabledStates();
return contentPane;
}
public void updateFrom(@NotNull HgUpdateConfigurationSettings updateConfiguration) {
myPullCheckBox.setSelected(updateConfiguration.shouldPull());
HgUpdateType updateType = updateConfiguration.getUpdateType();
switch (updateType) {
case ONLY_UPDATE:
myOnlyUpdateButton.setSelected(true);
break;
case MERGE:
myMergeRadioButton.setSelected(true);
break;
case REBASE:
myRebaseRadioButton.setSelected(true);
break;
default:
assert false : "Unknown value of update type: " + updateType;
}
myCommitAfterMergeCheckBox.setSelected(updateConfiguration.shouldCommitAfterMerge());
}
}