// 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.dvcs.branch.DvcsBranchSync; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.ui.components.JBCheckBox; import org.jetbrains.annotations.NotNull; import org.zmlx.hg4idea.HgProjectSettings; import org.zmlx.hg4idea.HgVcs; import org.zmlx.hg4idea.HgVcsMessages; import org.zmlx.hg4idea.repo.HgRepositoryManager; import org.zmlx.hg4idea.util.HgUtil; import org.zmlx.hg4idea.util.HgVersion; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class HgConfigurationProjectPanel { @NotNull private final HgProjectSettings myProjectSettings; private JPanel myMainPanel; private JCheckBox myCheckIncomingOutgoingCbx; private JCheckBox myIgnoredWhitespacesInAnnotationsCbx; private TextFieldWithBrowseButton myPathSelector; private JButton myTestButton; private JBCheckBox mySyncBranchControl; private JPanel myRepositorySettingsPanel; private final HgVcs myVcs; public HgConfigurationProjectPanel(@NotNull HgProjectSettings projectSettings, @NotNull Project project) { myProjectSettings = projectSettings; myVcs = HgVcs.getInstance(project); loadSettings(); myTestButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String executable = getCurrentPath(); HgVersion version; try { version = HgVersion.identifyVersion(executable); } catch (Exception exception) { Messages.showErrorDialog(myMainPanel, exception.getMessage(), HgVcsMessages.message("hg4idea.run.failed.title")); return; } Messages.showInfoMessage(myMainPanel, String.format("Mercurial version is %s", version.toString()), HgVcsMessages.message("hg4idea.run.success.title") ); } }); final HgRepositoryManager repositoryManager = ServiceManager.getService(project, HgRepositoryManager.class); myRepositorySettingsPanel.setVisible(repositoryManager != null && repositoryManager.moreThanOneRoot()); } public boolean isModified() { boolean executableModified = !getCurrentPath().equals(myProjectSettings.getHgExecutable()); return executableModified || myCheckIncomingOutgoingCbx.isSelected() != myProjectSettings.isCheckIncomingOutgoing() || ((myProjectSettings.getSyncSetting() == DvcsBranchSync.SYNC) != mySyncBranchControl.isSelected()) || myIgnoredWhitespacesInAnnotationsCbx.isSelected() != myProjectSettings.isWhitespacesIgnoredInAnnotations(); } public void saveSettings() { myProjectSettings.setCheckIncomingOutgoing(myCheckIncomingOutgoingCbx.isSelected()); myProjectSettings.setIgnoreWhitespacesInAnnotations(myIgnoredWhitespacesInAnnotationsCbx.isSelected()); myProjectSettings.setHgExecutable(getCurrentPath()); myProjectSettings.setSyncSetting(mySyncBranchControl.isSelected() ? DvcsBranchSync.SYNC : DvcsBranchSync.DONT); myVcs.checkVersion(); } private String getCurrentPath() { return myPathSelector.getText().trim(); } public void loadSettings() { myCheckIncomingOutgoingCbx.setSelected(myProjectSettings.isCheckIncomingOutgoing()); myIgnoredWhitespacesInAnnotationsCbx.setSelected(myProjectSettings.isWhitespacesIgnoredInAnnotations()); myPathSelector.setText(myProjectSettings.getGlobalSettings().getHgExecutable()); mySyncBranchControl.setSelected(myProjectSettings.getSyncSetting() == DvcsBranchSync.SYNC); } public JPanel getPanel() { return myMainPanel; } public void validate() throws ConfigurationException { String hgExecutable; hgExecutable = getCurrentPath(); if (!HgUtil.isExecutableValid(hgExecutable)) { throw new ConfigurationException( HgVcsMessages.message("hg4idea.configuration.executable.error", hgExecutable) ); } } private void createUIComponents() { myPathSelector = new HgSetExecutablePathPanel(myProjectSettings); } @NotNull public HgProjectSettings getProjectSettings() { return myProjectSettings; } }