package com.igormaznitsa.ideamindmap.print;
import com.igormaznitsa.ideamindmap.utils.IdeaUtils;
import com.igormaznitsa.mindmap.model.logger.Logger;
import com.igormaznitsa.mindmap.model.logger.LoggerFactory;
import com.igormaznitsa.mindmap.print.MMDPrintPanel;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.progress.Task;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.MessageType;
import javax.annotation.Nonnull;
import javax.swing.*;
import java.awt.*;
public class IdeaMMDPrintPanelAdaptor implements MMDPrintPanel.Adaptor {
private static final Logger LOGGER = LoggerFactory.getLogger(IdeaMMDPrintPanelAdaptor.class);
private final Project project;
public IdeaMMDPrintPanelAdaptor(@Nonnull final Project project){
this.project = project;
}
@Override public void startBackgroundTask(@Nonnull final MMDPrintPanel source,@Nonnull final String taskName, @Nonnull final Runnable task) {
final Task.Backgroundable backgroundTask= new Task.Backgroundable(this.project, taskName) {
@Override public void run(@Nonnull final ProgressIndicator indicator) {
try{
indicator.setIndeterminate(true);
task.run();
IdeaUtils.showPopup(String.format("%s has been sent to the printer",taskName), MessageType.INFO);
}catch(Exception ex){
LOGGER.error("Print error",ex);
IdeaUtils.showPopup("Print error! See the log!", MessageType.ERROR);
}finally{
indicator.stop();
}
}
};
ProgressManager.getInstance().run(backgroundTask);
}
@Override public boolean isDarkTheme(@Nonnull final MMDPrintPanel source) {
return IdeaUtils.isDarkTheme();
}
@Override public void onPrintTaskStarted(@Nonnull final MMDPrintPanel source) {
SwingUtilities.invokeLater(new Runnable() {
@Override public void run() {
final Window wnd = SwingUtilities.windowForComponent(source);
if (wnd!=null) wnd.dispose();
}
});
}
@Override @Nonnull public Dimension getPreferredSizeOfPanel(@Nonnull final MMDPrintPanel mmdPrintPanel) {
return new Dimension(600, 450);
}
}