/*
* Copyright 2000-2015 JetBrains s.r.o.
*
* 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 com.intellij.diff.tools.fragmented;
import com.intellij.diff.DiffContext;
import com.intellij.diff.comparison.DiffTooBigException;
import com.intellij.diff.tools.util.base.DiffPanelBase;
import com.intellij.openapi.actionSystem.DataProvider;
import com.intellij.openapi.project.Project;
import com.intellij.util.ui.AsyncProcessIcon;
import com.intellij.util.ui.JBUI;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import static com.intellij.diff.util.DiffUtil.createMessagePanel;
public class UnifiedDiffPanel extends DiffPanelBase {
private static final String GOOD_CONTENT = "GoodContent";
private static final String LOADING_CONTENT = "LoadingContent";
private static final String TOO_BIG_CONTENT = "TooBigContent";
private static final String OPERATION_CANCELED_CONTENT = "OperationCanceledContent";
private static final String ERROR_CONTENT = "ErrorContent";
@NotNull private final AsyncProcessIcon.Big myBusyIcon;
public UnifiedDiffPanel(@Nullable Project project,
@NotNull UnifiedContentPanel content,
@NotNull DataProvider provider,
@NotNull DiffContext context) {
super(project, provider, context);
myBusyIcon = new AsyncProcessIcon.Big("UnifiedDiff");
JPanel centerPanel = JBUI.Panels.simplePanel(content).addToTop(myNotificationsPanel);
myContentPanel.add(centerPanel, GOOD_CONTENT);
myContentPanel.add(myBusyIcon, LOADING_CONTENT);
myContentPanel.add(createMessagePanel("Can not calculate diff. " + DiffTooBigException.MESSAGE), TOO_BIG_CONTENT);
myContentPanel.add(createMessagePanel("Can not calculate diff. Operation canceled."), OPERATION_CANCELED_CONTENT);
myContentPanel.add(createMessagePanel("Error"), ERROR_CONTENT);
setCurrentCard(LOADING_CONTENT, false);
}
//
// Card layout
//
public void setLoadingContent() {
setCurrentCard(LOADING_CONTENT);
}
public void setGoodContent() {
setCurrentCard(GOOD_CONTENT);
}
public void setTooBigContent() {
setCurrentCard(TOO_BIG_CONTENT);
}
public void setOperationCanceledContent() {
setCurrentCard(OPERATION_CANCELED_CONTENT);
}
public void setErrorContent() {
setCurrentCard(ERROR_CONTENT);
}
@Override
protected void setCurrentCard(@NotNull String card) {
if (card == LOADING_CONTENT) {
myBusyIcon.resume();
}
else {
myBusyIcon.suspend();
}
super.setCurrentCard(card);
}
//
// Misc
//
public boolean isGoodContent() {
return myCurrentCard == GOOD_CONTENT;
}
}