Added several improvements XVI
This commit is contained in:
parent
c5e3366ef8
commit
6b590f62f0
Binary file not shown.
11
pom.xml
11
pom.xml
@ -10,6 +10,7 @@
|
||||
|
||||
<name>time-calc</name>
|
||||
<description>time-calc</description>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<properties>
|
||||
<java.version>1.8</java.version>
|
||||
@ -78,14 +79,4 @@
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<dependencies>
|
||||
<!--tfcConfUtils-3.4.jar-->
|
||||
<dependency>
|
||||
<groupId>jtoaster</groupId>
|
||||
<artifactId>jtoaster</artifactId>
|
||||
<version>1.0.5</version>
|
||||
<scope>system</scope>
|
||||
<systemPath>${lib.dir}/jtoaster-1.0.5.jar</systemPath>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
File diff suppressed because one or more lines are too long
551
src/main/java/rvc/timecalc/Toaster.java
Normal file
551
src/main/java/rvc/timecalc/Toaster.java
Normal file
@ -0,0 +1,551 @@
|
||||
package rvc.timecalc;
|
||||
/**
|
||||
* Java Toaster is a java utility class for your swing applications
|
||||
* that show an animate box coming from the bottom of your screen
|
||||
* with a notification message and/or an associated image
|
||||
* (like msn online/offline notifications).
|
||||
*
|
||||
* Toaster panel in windows system follow the taskbar; So if
|
||||
* the taskbar is into the bottom the panel coming from the bottom
|
||||
* and if the taskbar is on the top then the panel coming from the top.
|
||||
*
|
||||
* This is a simple example of utilization:
|
||||
*
|
||||
* import com.nitido.utils.toaster.*;
|
||||
* import javax.swing.*;
|
||||
*
|
||||
* public class ToasterTest
|
||||
* {
|
||||
*
|
||||
* public static void main(String[] args)
|
||||
* {
|
||||
* // Initialize toaster manager...
|
||||
* Toaster toasterManager = new Toaster();
|
||||
*
|
||||
* // Show a simple toaster
|
||||
* toasterManager.showToaster( new ImageIcon( "mylogo.gif" ), "A simple toaster with an image" );
|
||||
* }
|
||||
* }
|
||||
*/
|
||||
|
||||
import java.awt.*;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.*;
|
||||
|
||||
/**
|
||||
* Class to show tosters in multiplatform
|
||||
*
|
||||
* @author daniele piras
|
||||
*
|
||||
*/
|
||||
public class Toaster
|
||||
{
|
||||
// Width of the toster
|
||||
private int toasterWidth = 300;
|
||||
|
||||
// Height of the toster
|
||||
private int toasterHeight = 80;
|
||||
|
||||
// Step for the toaster
|
||||
private int step = 20;
|
||||
|
||||
// Step time
|
||||
private int stepTime = 20;
|
||||
|
||||
// Show time
|
||||
private int displayTime = 3000;
|
||||
|
||||
// Current number of toaster...
|
||||
private int currentNumberOfToaster = 0;
|
||||
|
||||
// Last opened toaster
|
||||
private int maxToaster = 0;
|
||||
|
||||
// Max number of toasters for the sceen
|
||||
private int maxToasterInSceen;
|
||||
|
||||
// Background image
|
||||
private Image backgroundImage;
|
||||
|
||||
// Font used to display message
|
||||
private Font font;
|
||||
|
||||
// Color for border
|
||||
private Color borderColor;
|
||||
|
||||
// Color for toaster
|
||||
private Color toasterColor;
|
||||
|
||||
// Set message color
|
||||
private Color messageColor;
|
||||
|
||||
// Set the margin
|
||||
int margin;
|
||||
|
||||
// Flag that indicate if use alwaysOnTop or not.
|
||||
// method always on top start only SINCE JDK 5 !
|
||||
boolean useAlwaysOnTop = true;
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* Constructor to initialized toaster component...
|
||||
*
|
||||
* @author daniele piras
|
||||
*
|
||||
*/
|
||||
public Toaster()
|
||||
{
|
||||
// Set default font...
|
||||
font = new Font("Arial", Font.BOLD, 12);
|
||||
// Border color
|
||||
borderColor = new Color(245, 153, 15);
|
||||
toasterColor = Color.WHITE;
|
||||
messageColor = Color.BLACK;
|
||||
useAlwaysOnTop = true;
|
||||
// Verify AlwaysOnTop Flag...
|
||||
try
|
||||
{
|
||||
JWindow.class.getMethod( "setAlwaysOnTop", new Class[] { Boolean.class } );
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
useAlwaysOnTop = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Class that rappresent a single toaster
|
||||
*
|
||||
* @author daniele piras
|
||||
*
|
||||
*/
|
||||
class SingleToaster extends JWindow
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
// Label to store Icon
|
||||
private JLabel iconLabel = new JLabel();
|
||||
|
||||
// Text area for the message
|
||||
private JTextArea message = new JTextArea();
|
||||
|
||||
|
||||
|
||||
|
||||
/***
|
||||
* Simple costructor that initialized components...
|
||||
*/
|
||||
public SingleToaster()
|
||||
{
|
||||
initComponents();
|
||||
}
|
||||
|
||||
/***
|
||||
* Function to initialized components
|
||||
*/
|
||||
private void initComponents()
|
||||
{
|
||||
|
||||
setSize(toasterWidth, toasterHeight);
|
||||
message.setFont( getToasterMessageFont() );
|
||||
JPanel externalPanel = new JPanel(new BorderLayout(1, 1));
|
||||
externalPanel.setBackground( getBorderColor() );
|
||||
JPanel innerPanel = new JPanel(new BorderLayout( getMargin(), getMargin() ))
|
||||
{
|
||||
@Override
|
||||
public void paint(Graphics g) {
|
||||
if ( getBackgroundImage() != null )
|
||||
{
|
||||
g.drawImage(getBackgroundImage(),0,0,null);
|
||||
}
|
||||
super.paint(g);
|
||||
}
|
||||
};
|
||||
if ( getBackgroundImage() != null )
|
||||
{
|
||||
innerPanel.setOpaque(false);
|
||||
message.setOpaque(false);
|
||||
iconLabel.setOpaque(false);
|
||||
}
|
||||
innerPanel.setBackground( getToasterColor() );
|
||||
message.setBackground( getToasterColor() );
|
||||
message.setMargin( new Insets( 2,2,2,2 ) );
|
||||
message.setLineWrap( true );
|
||||
message.setWrapStyleWord( true );
|
||||
EtchedBorder etchedBorder = (EtchedBorder) BorderFactory
|
||||
.createEtchedBorder();
|
||||
externalPanel.setBorder(etchedBorder);
|
||||
externalPanel.add(innerPanel);
|
||||
message.setForeground( getMessageColor() );
|
||||
innerPanel.add(iconLabel, BorderLayout.WEST);
|
||||
innerPanel.add(message, BorderLayout.CENTER);
|
||||
getContentPane().add(externalPanel);
|
||||
}
|
||||
|
||||
|
||||
/***
|
||||
* Start toaster animation...
|
||||
*/
|
||||
public void animate()
|
||||
{
|
||||
( new Animation( this ) ).start();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/***
|
||||
* Class that manage the animation
|
||||
*/
|
||||
class Animation extends Thread
|
||||
{
|
||||
SingleToaster toaster;
|
||||
|
||||
public Animation( SingleToaster toaster )
|
||||
{
|
||||
this.toaster = toaster;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Animate vertically the toaster. The toaster could be moved from bottom
|
||||
* to upper or to upper to bottom
|
||||
* @param posx
|
||||
* @param fromy
|
||||
* @param toy
|
||||
* @throws InterruptedException
|
||||
*/
|
||||
protected void animateVertically( int posx, int fromY, int toY ) throws InterruptedException
|
||||
{
|
||||
|
||||
toaster.setLocation( posx, fromY );
|
||||
if ( toY < fromY )
|
||||
{
|
||||
for (int i = fromY; i > toY; i -= step)
|
||||
{
|
||||
toaster.setLocation(posx, i);
|
||||
Thread.sleep(stepTime);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = fromY; i < toY; i += step)
|
||||
{
|
||||
toaster.setLocation(posx, i);
|
||||
Thread.sleep(stepTime);
|
||||
}
|
||||
}
|
||||
toaster.setLocation( posx, toY );
|
||||
}
|
||||
|
||||
public void run()
|
||||
{
|
||||
try
|
||||
{
|
||||
boolean animateFromBottom = true;
|
||||
GraphicsEnvironment ge = GraphicsEnvironment
|
||||
.getLocalGraphicsEnvironment();
|
||||
Rectangle screenRect = ge.getMaximumWindowBounds();
|
||||
|
||||
int screenHeight = (int) screenRect.height;
|
||||
|
||||
int startYPosition;
|
||||
int stopYPosition;
|
||||
|
||||
if ( screenRect.y > 0 )
|
||||
{
|
||||
animateFromBottom = false; // Animate from top!
|
||||
}
|
||||
|
||||
maxToasterInSceen = screenHeight / toasterHeight;
|
||||
|
||||
|
||||
int posx = (int) screenRect.width - toasterWidth - 1;
|
||||
|
||||
toaster.setLocation(posx, screenHeight);
|
||||
toaster.setVisible(true);
|
||||
if ( useAlwaysOnTop )
|
||||
{
|
||||
toaster.setAlwaysOnTop(true);
|
||||
}
|
||||
|
||||
if ( animateFromBottom )
|
||||
{
|
||||
startYPosition = screenHeight;
|
||||
stopYPosition = startYPosition - toasterHeight - 1;
|
||||
if ( currentNumberOfToaster > 0 )
|
||||
{
|
||||
stopYPosition = stopYPosition - ( maxToaster % maxToasterInSceen * toasterHeight );
|
||||
}
|
||||
else
|
||||
{
|
||||
maxToaster = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
startYPosition = screenRect.y - toasterHeight;
|
||||
stopYPosition = screenRect.y;
|
||||
|
||||
if ( currentNumberOfToaster > 0 )
|
||||
{
|
||||
stopYPosition = stopYPosition + ( maxToaster % maxToasterInSceen * toasterHeight );
|
||||
}
|
||||
else
|
||||
{
|
||||
maxToaster = 0;
|
||||
}
|
||||
}
|
||||
|
||||
currentNumberOfToaster++;
|
||||
maxToaster++;
|
||||
|
||||
|
||||
animateVertically( posx, startYPosition, stopYPosition );
|
||||
Thread.sleep(displayTime);
|
||||
animateVertically( posx, stopYPosition, startYPosition );
|
||||
|
||||
currentNumberOfToaster--;
|
||||
toaster.setVisible(false);
|
||||
toaster.dispose();
|
||||
} catch (Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Show a toaster with the specified message and the associated icon.
|
||||
*/
|
||||
public void showToaster(Icon icon, String msg)
|
||||
{
|
||||
SingleToaster singleToaster = new SingleToaster();
|
||||
if ( icon != null )
|
||||
{
|
||||
singleToaster.iconLabel.setIcon( icon );
|
||||
}
|
||||
singleToaster.message.setText( msg );
|
||||
singleToaster.animate();
|
||||
}
|
||||
|
||||
/**
|
||||
* Show a toaster with the specified message.
|
||||
*/
|
||||
public void showToaster( String msg )
|
||||
{
|
||||
showToaster( null, msg );
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the font
|
||||
*/
|
||||
public Font getToasterMessageFont()
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
return font;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the font for the message
|
||||
*/
|
||||
public void setToasterMessageFont( Font f)
|
||||
{
|
||||
font = f;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return Returns the borderColor.
|
||||
*/
|
||||
public Color getBorderColor()
|
||||
{
|
||||
return borderColor;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @param borderColor The borderColor to set.
|
||||
*/
|
||||
public void setBorderColor(Color borderColor)
|
||||
{
|
||||
this.borderColor = borderColor;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @return Returns the displayTime.
|
||||
*/
|
||||
public int getDisplayTime()
|
||||
{
|
||||
return displayTime;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @param displayTime The displayTime to set.
|
||||
*/
|
||||
public void setDisplayTime(int displayTime)
|
||||
{
|
||||
this.displayTime = displayTime;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @return Returns the margin.
|
||||
*/
|
||||
public int getMargin()
|
||||
{
|
||||
return margin;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @param margin The margin to set.
|
||||
*/
|
||||
public void setMargin(int margin)
|
||||
{
|
||||
this.margin = margin;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @return Returns the messageColor.
|
||||
*/
|
||||
public Color getMessageColor()
|
||||
{
|
||||
return messageColor;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @param messageColor The messageColor to set.
|
||||
*/
|
||||
public void setMessageColor(Color messageColor)
|
||||
{
|
||||
this.messageColor = messageColor;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @return Returns the step.
|
||||
*/
|
||||
public int getStep()
|
||||
{
|
||||
return step;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @param step The step to set.
|
||||
*/
|
||||
public void setStep(int step)
|
||||
{
|
||||
this.step = step;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @return Returns the stepTime.
|
||||
*/
|
||||
public int getStepTime()
|
||||
{
|
||||
return stepTime;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @param stepTime The stepTime to set.
|
||||
*/
|
||||
public void setStepTime(int stepTime)
|
||||
{
|
||||
this.stepTime = stepTime;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @return Returns the toasterColor.
|
||||
*/
|
||||
public Color getToasterColor()
|
||||
{
|
||||
return toasterColor;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @param toasterColor The toasterColor to set.
|
||||
*/
|
||||
public void setToasterColor(Color toasterColor)
|
||||
{
|
||||
this.toasterColor = toasterColor;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @return Returns the toasterHeight.
|
||||
*/
|
||||
public int getToasterHeight()
|
||||
{
|
||||
return toasterHeight;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @param toasterHeight The toasterHeight to set.
|
||||
*/
|
||||
public void setToasterHeight(int toasterHeight)
|
||||
{
|
||||
this.toasterHeight = toasterHeight;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @return Returns the toasterWidth.
|
||||
*/
|
||||
public int getToasterWidth()
|
||||
{
|
||||
return toasterWidth;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @param toasterWidth The toasterWidth to set.
|
||||
*/
|
||||
public void setToasterWidth(int toasterWidth)
|
||||
{
|
||||
this.toasterWidth = toasterWidth;
|
||||
}
|
||||
|
||||
public Image getBackgroundImage() {
|
||||
return backgroundImage;
|
||||
}
|
||||
|
||||
public void setBackgroundImage(Image backgroundImage) {
|
||||
this.backgroundImage = backgroundImage;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user