/*
* (c) Copyright 2010-2011 AgileBirds
*
* This file is part of OpenFlexo.
*
* OpenFlexo 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.
*
* OpenFlexo 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 OpenFlexo. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openflexo.swing.merge;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import org.openflexo.diff.merge.MergeChange;
import org.openflexo.diff.merge.MergeChange.MergeChangeAction;
import org.openflexo.jedit.JEditTextAreaWithHighlights;
import org.openflexo.jedit.TokenMarker;
import org.openflexo.toolbox.FontCst;
import org.openflexo.toolbox.TokenMarkerStyle;
public class HandConflictResolver extends JDialog {
private MergeChangeAction previous;
private MergeChange conflictChange;
private EditorTextArea editor;
public HandConflictResolver(MergeChange conflictChange, TokenMarkerStyle style, MergeChangeAction previous, MergePanelElements owner) {
super((JFrame) SwingUtilities.getAncestorOfClass(JFrame.class, owner.getComparePanel()), true);
this.previous = previous;
this.conflictChange = conflictChange;
conflictChange.setMergeChangeAction(previous);
String[] changeResult = conflictChange.getMergeChangeResult().getSignificativeTokens();
StringBuffer sb = new StringBuffer();
for (String line : changeResult) {
sb.append(line + "\n");
}
editor = new EditorTextArea(sb.toString(), style);
JLabel title = new JLabel(owner.localizedForKey("please_resolve_conflict"), SwingConstants.CENTER);
title.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
JPanel controlPanel = new JPanel(new FlowLayout());
JButton validateButton;
JButton cancelButton;
controlPanel.add(validateButton = new JButton(owner.localizedForKey("validate")));
validateButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ok();
dispose();
}
});
controlPanel.add(cancelButton = new JButton(owner.localizedForKey("cancel")));
cancelButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
cancel();
dispose();
}
});
controlPanel.add(validateButton);
controlPanel.add(cancelButton);
JPanel panel = new JPanel(new BorderLayout());
panel.add(title, BorderLayout.NORTH);
panel.add(editor, BorderLayout.CENTER);
panel.add(controlPanel, BorderLayout.SOUTH);
getContentPane().add(panel);
validate();
pack();
setVisible(true);
}
protected class EditorTextArea extends JEditTextAreaWithHighlights {
public EditorTextArea(String text, TokenMarkerStyle style) {
super();
disableDefaultMouseWheelListener();
setTokenMarker(TokenMarker.makeTokenMarker(style));
setText(text);
setEditable(true);
setFont(FontCst.TEXT_FONT);
}
}
public void ok() {
conflictChange.setCustomHandEdition(editor.getText());
conflictChange.setMergeChangeAction(MergeChangeAction.CustomEditing);
}
public void cancel() {
conflictChange.setMergeChangeAction(previous);
}
}