/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.clothocore.util.frames;
import java.awt.Graphics;
import java.awt.Point;
import java.util.ArrayList;
import java.util.prefs.Preferences;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import org.clothocore.api.core.wrapper.ToolWrapper;
import org.clothocore.util.buttons.GlassButton;
import org.clothocore.util.buttons.TransparentButton;
import org.clothocore.util.misc.BareBonesBrowserLaunch;
/**
*
* @author jcanderson
*/
public class GraphicFrame extends JFrame {
public GraphicFrame(String frame_title, String background_image, String minimize_image, String close_image, String expand_image) {
super(frame_title);
initcomponents( background_image, minimize_image, close_image, expand_image);
}
protected void initcomponents(String background_image, String minimize_image, String close_image, String expand_image) {
//Load the icons
ImageIcon minimize = new ImageIcon(minimize_image);
ImageIcon close = new ImageIcon(close_image);
ImageIcon expand = new ImageIcon(expand_image);
bkgImage = new ImageIcon(background_image);
int frameWidth = bkgImage.getIconWidth();
int horizontalSpacing = 2;
int verticalSpacing = 2;
//Put in background image
JLabel bkgLabel = new JLabel(bkgImage);
bkgLabel.setBounds(0,0,frameWidth, bkgImage.getIconHeight());
getContentPane().add(bkgLabel);
int horizontalPosition = frameWidth-horizontalSpacing;
System.out.println(horizontalPosition);
//Put in a close button
TransparentButton closeButton = new TransparentButton(close);
horizontalPosition = horizontalPosition - close.getIconWidth();
System.out.println(horizontalPosition);
closeButton.setLocation(horizontalPosition,verticalSpacing);
closeButton.setToolTipText("Close");
closeButton.addMouseListener(new java.awt.event.MouseAdapter() {
@Override
public void mouseClicked(java.awt.event.MouseEvent evt) {
closeButtonClicked(evt);}});
getLayeredPane().add(closeButton, 2);
horizontalPosition = horizontalPosition-horizontalSpacing;
//Put in a minimize button
TransparentButton minimizeButton = new TransparentButton(minimize);
horizontalPosition = horizontalPosition - minimize.getIconWidth();
System.out.println(horizontalPosition);
minimizeButton.setLocation(horizontalPosition,verticalSpacing);
minimizeButton.setToolTipText("Minimize");
minimizeButton.addMouseListener(new java.awt.event.MouseAdapter() {
@Override
public void mouseClicked(java.awt.event.MouseEvent evt) {
minimizeButtonClicked(evt);}});
getLayeredPane().add(minimizeButton, 2);
horizontalPosition = horizontalPosition-horizontalSpacing;
//Put in a expand button
TransparentButton expandButton = new TransparentButton(expand);
horizontalPosition = horizontalPosition - expand.getIconWidth();
System.out.println(horizontalPosition);
expandButton.setLocation(horizontalPosition,verticalSpacing);
expandButton.setToolTipText("Expand");
expandButton.addMouseListener(new java.awt.event.MouseAdapter() {
@Override
public void mouseClicked(java.awt.event.MouseEvent evt) {
expandButtonClicked(evt);}});
getLayeredPane().add(expandButton, 2);
horizontalPosition = horizontalPosition-horizontalSpacing;
System.out.println(horizontalPosition);
//Put in a coverButton button
coverButton = new GlassButton("");
coverButton.setBounds(0,0,horizontalPosition, verticalSpacing + expand.getIconHeight());
coverButton.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
@Override
public void mouseDragged(java.awt.event.MouseEvent evt) {
coverButtonDragged(evt);}
@Override
public void mouseMoved(java.awt.event.MouseEvent evt) {
coverButtonMoved(evt);}});
getLayeredPane().add(coverButton, 0);
//Size it
setUndecorated(true);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(bkgImage.getIconWidth(), bkgImage.getIconHeight());
pack();
setVisible(true);
}
protected void paintComponent(Graphics g) {
g.drawImage(bkgImage.getImage(), 0, 0, null);
}
protected void coverButtonDragged(java.awt.event.MouseEvent evt) {
Point aPoint = evt.getPoint();
int x = getX() + aPoint.x - mousePointer.x;
int y = getY() + aPoint.y - mousePointer.y;
setLocation(x, y);
Graphics graphics = getGraphics();
paint(graphics);
}
public void setPopUpText(String message) {
popUpText.setText(message);
popUpButton.setVisible(true);
popUpText.setVisible(true);
}
protected void popUpButtonClicked() {
if(_checkingUpdates) {
BareBonesBrowserLaunch.openURL(_updateURL);
}
popUpButton.setVisible(false);
popUpText.setVisible(false);
}
protected void isFirstTime() {
String isFirst = _prefs.get( "IsFirstTimeAccessed", "isFirst" );
if(!isFirst.equals("nope")) {
setPopUpText("Welcome to Clotho!\nHit F1 or ctrl-H for help.");
_prefs.put( "IsFirstTimeAccessed", "nope" );
}
}
protected void coverButtonMoved(java.awt.event.MouseEvent evt) {
mousePointer = evt.getPoint();
}
protected void unlockButtonClicked(java.awt.event.MouseEvent evt) {
//Put the button allowing for the window to be dragged around
coverButton.setVisible(isLocked);
//Toggle the icon
if(isLocked) {
lockButton.changeIcon(lock);
lockButton.setToolTipText("Lock");
} else {
lockButton.changeIcon(unlock);
lockButton.setToolTipText("Unlock");
}
//Toggle whether the winodw is locked on top or not
setAlwaysOnTop(!isLocked);
isLocked = !isLocked;
}
protected void expandButtonClicked(java.awt.event.MouseEvent evt) {
//THIS IS RESERVED FOR MAKING THE DASHBOARD LARGER OR SOMETHING LIKE THAT
}
protected void minimizeButtonClicked(java.awt.event.MouseEvent evt) {
setState(JFrame.ICONIFIED);
}
protected void closeButtonClicked(java.awt.event.MouseEvent evt) {
dispose();
}
private void setLeftAndRightButtons() {
if(_numToolPanels==1) {
rightButton.setVisible(false);
leftButton.setVisible(false);
return;
}
if(_currPanel == 0) {
leftButton.setVisible(false);
} else {
leftButton.setVisible(true);
}
if(_currPanel == _numToolPanels-1) {
rightButton.setVisible(false);
} else {
rightButton.setVisible(true);
}
}
private void setMeThinking(boolean isit) {
loadingAnimation.setVisible(isit);
loadingButton.setVisible(isit);
}
public static void main(String[] args) {
new GraphicFrame("Test frame", "data/icons/testy/bkg.png", "data/icons/testy/btn.png", "data/icons/testy/btn.png", "data/icons/testy/btn.png").setVisible(true);
}
/*-----------------
variables
-----------------*/
private static ImageIcon bkgImage;
private static ImageIcon unlock;
private static ImageIcon lock;
private static ImageIcon connected;
private static ImageIcon disconnected;
private static ImageIcon popUpInfo;
private GlassButton coverButton;
private GlassButton loadingButton;
private TransparentButton lockButton;
private JLabel loadingAnimation;
private TransparentButton leftButton;
private TransparentButton rightButton;
private TransparentButton connectedButton;
private TransparentButton popUpButton;
private JTextArea popUpText;
private boolean isLocked=true;
private Point mousePointer;
private int _numToolPanels;
private int _currPanel;
private ArrayList<ToolWrapper> _wraps;
private static Preferences _prefs;
//For update checking
private static boolean _checkingUpdates=false;
private static String _updateURL="";
}