/*
* Copyright 2010-2015 Institut Pasteur.
*
* This file is part of Icy.
*
* Icy 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.
*
* Icy 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 Icy. If not, see <http://www.gnu.org/licenses/>.
*/
package icy.gui.frame.progress;
import icy.gui.frame.IcyExternalFrame;
import icy.gui.frame.IcyFrame;
import icy.gui.frame.IcyInternalFrame;
import icy.gui.main.MainFrame;
import icy.gui.main.TaskFrameManager;
import icy.main.Icy;
import icy.system.thread.ThreadUtil;
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
/**
* Use it to create a Task Window on the border like the loader (Thread Safe)<br>
*
* @author fab & Stephane
*/
public abstract class TaskFrame extends IcyFrame
{
protected JPanel mainPanel;
private boolean remove;
/**
*
*/
public TaskFrame()
{
this("Task in progress", false, false, false, false);
}
/**
* @param title
*/
public TaskFrame(String title)
{
this(title, false, false, false, false);
}
/**
* @param title
* @param resizable
*/
public TaskFrame(String title, boolean resizable)
{
this(title, resizable, false, false, false);
}
/**
* @param title
* @param resizable
* @param closable
*/
public TaskFrame(String title, boolean resizable, boolean closable)
{
this(title, resizable, closable, false, false);
}
/**
* @param title
* @param resizable
* @param closable
* @param maximizable
*/
public TaskFrame(String title, boolean resizable, boolean closable, boolean maximizable)
{
this(title, resizable, closable, maximizable, false);
}
/**
* @param title
* @param resizable
* @param closable
* @param maximizable
* @param iconifiable
*/
public TaskFrame(String title, boolean resizable, boolean closable, boolean maximizable, boolean iconifiable)
{
super(title, resizable, closable, maximizable, iconifiable, true);
remove = false;
ThreadUtil.invokeLater(new Runnable()
{
@Override
public void run()
{
final IcyInternalFrame iFrame = getIcyInternalFrame();
final IcyExternalFrame eFrame = getIcyExternalFrame();
mainPanel = new JPanel();
mainPanel.setBorder(BorderFactory.createTitledBorder(""));
// no border on frame
iFrame.setBorder(BorderFactory.createEmptyBorder());
// no focusable
iFrame.setFocusable(false);
eFrame.setFocusable(false);
eFrame.setFocusableWindowState(false);
// no title bar
iFrame.setTitleBarVisible(false);
eFrame.setTitleBarVisible(false);
// set maximum size of task frame
Dimension maxDim = new Dimension(800, 600);
final MainFrame mf = Icy.getMainInterface().getMainFrame();
if (mf != null)
{
final Dimension desktopSize = mf.getDesktopSize();
if (desktopSize != null)
maxDim = desktopSize;
}
iFrame.setMaximumSize(maxDim);
eFrame.setMaximumSize(maxDim);
if (isInternalized())
{
iFrame.setLayout(new BorderLayout());
iFrame.add(mainPanel, BorderLayout.CENTER);
}
else
{
eFrame.setLayout(new BorderLayout());
eFrame.add(mainPanel, BorderLayout.CENTER);
}
// add to the task manager if a GUI is present
final TaskFrameManager tfm = Icy.getMainInterface().getTaskWindowManager();
if (tfm != null)
tfm.addTaskWindow(TaskFrame.this);
}
});
}
@Override
public void stateChanged()
{
super.stateChanged();
// re pack the frame
pack();
}
@Override
public void close()
{
// prevent direct close here
remove = true;
}
/**
* Used by the TaskWindowManager to close the TaskFrame.<br>
* (internal use only)
*/
public void internalClose()
{
super.close();
}
/**
* Used by the TaskWindowManager to close the TaskFrame.<br>
* (internal use only)
*/
public boolean canRemove()
{
return remove;
}
/**
* @deprecated Use {@link #canRemove()} instead
*/
@Deprecated
public boolean isCanBeRemoved()
{
return canRemove();
}
}