package com.qksnap.www.snap.gui.tabpane;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.TrayIcon.MessageType;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.ClipboardOwner;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableColumn;
import com.qksnap.www.snap.gui.SplashScreen;
import com.qksnap.www.snap.gui.tabpane.componet.ScreenShotImage;
import com.qksnap.www.snap.gui.tabpane.data.ImageLink;
import com.qksnap.www.snap.gui.tabpane.data.ImgCache;
public class Links extends JPanel implements ClipboardOwner {
/** Screen Shot Left Btn **/
private JButton leftArrowBtn;
/** Screen Shot Right Logo **/
private JButton rightArrowBtn;
private JLabel pageLbl;
private JLabel selectLbl;
/** Screen Shot Upload Btn **/
private JButton uploadBtn;
/** Screen Shot Image head **/
/** Screen Shot Image Cache **/
private ImgCache<Integer,ScreenShotImage> cache;
/** change this to a new struct later **/
private List<String> selected;
private int page = 1;
public void addScreenshot() throws IOException{
cache.set(size,new ScreenShotImage(size,SplashScreen.getSingleton().getUserSettings().getLinks().get(SplashScreen.getSingleton().getUserSettings().getLinks().size()-1)));
size++;
viewPage();
}
public void addSelect(String in){
selected.add(in);
}
public void removeSelect(String in){
for(Iterator<String> rem = selected.iterator(); rem.hasNext();){
String s = (String) rem.next();
if(s.equals(in)){
rem.remove();
}
}
}
public Links(){
super(null);
cache = new ImgCache<Integer,ScreenShotImage>(60);
selected = new ArrayList<String>();
setBackground(new Color(232,232,232));
try {
createScreenShotCache();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
createOtherButton();
viewPage();
setVisible(true);
}
private JPopupMenu popup;
public void createPop(){
popup = new JPopupMenu();
JMenuItem menuItem = new JMenuItem("Copy to Clipboard.");
menuItem.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
StringBuilder sb = new StringBuilder();
for(String in : selected){
sb.append(in+",");
}
setClipboardContents(sb.toString());
}
});
JMenuItem menuItem2 = new JMenuItem("Export URL to a.txt file.");
popup.add(menuItem);
// popup.add(menuItem2);
}
public void setPageTxt(String txt){
pageLbl.setText("page ("+txt+")");
revalidate();
}
public void setSelectTxt(String txt){
selectLbl.setText(txt+" Image(s) Selected");
repaint();
revalidate();
}
public void createOtherButton(){
createPop();
pageLbl = new JLabel();
pageLbl.setBounds(100,125,128,32);
add(pageLbl);
selectLbl = new JLabel("0 Image(s) Selected");
selectLbl.setBounds(400,125,128,32);
add(selectLbl);
uploadBtn = new JButton(new ImageIcon(Links.class.getResource("/share_button.png")));
uploadBtn.setBounds(238, 125, 125,24);
uploadBtn.addMouseListener(new MouseListener(){
@Override
public void mouseClicked(MouseEvent e) {
popup.show(e.getComponent(),
e.getX(), e.getY());
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
});
add(uploadBtn);
leftArrowBtn = new JButton(new ImageIcon(Links.class.getResource("/left_arrow.png")));
leftArrowBtn.setBounds(5, 60, 32,36);
leftArrowBtn.setBorderPainted(false);
leftArrowBtn.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
if(page == 1){
page = 1;
} else {
page--;
}
viewPage();
}
});
add(leftArrowBtn);
rightArrowBtn = new JButton(new ImageIcon(Links.class.getResource("/right_arrow.png")));
rightArrowBtn.setBounds(530, 60, 32,36);
rightArrowBtn.setBorderPainted(false);
rightArrowBtn.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
if(page < size)
page++;
viewPage();
}
});
add(rightArrowBtn);
}
public void saveImage(String imageUrl, String destinationFile) throws IOException {
URL url = new URL(imageUrl);
InputStream is = url.openStream();
OutputStream os = new FileOutputStream(destinationFile);
byte[] b = new byte[2048];
int length;
while ((length = is.read(b)) != -1) {
os.write(b, 0, length);
}
is.close();
os.close();
}
private int size = 0;
public void createScreenShotCache() throws IOException{
/** Lets loop through all the files **/
for (int index = ((page * 3) - 3); index < ((page * 3) + 3); index++){
/** Create a new Button **/
if(index > SplashScreen.getSingleton().getUserSettings().getLinks().size()-1){
break;
}
cache.set(size,new ScreenShotImage(size,SplashScreen.getSingleton().getUserSettings().getLinks().get(index)));
size++;
SplashScreen.getSingleton().drawText((index+1)*17, "Loading Image from cache.");
}
for(int i = -1; i > -4; i--){
cache.set(i,new ScreenShotImage(i));
}
SplashScreen.getSingleton().drawText(100, "Loading images - 100%");
}
/** View the page **/
public void viewPage(){
removeAll();
createOtherButton();
int x = 40;
int y = 15;
int imageIndex = (page * 3) - 3; // 6 items per page, arrays start at 0.
for(int i = imageIndex; (i < imageIndex+3); i++){
ScreenShotImage in = cache.get(i);
if(in == null){
in = cache.get(-1-(i%3));
}
in.setBounds(x, y, 161,106);
in.setVisible(true);
add(in);
x += 165;
}
setPageTxt(Integer.toString(page));
revalidate();
repaint();
}
public void setClipboardContents( String aString ){
StringSelection stringSelection = new StringSelection( aString );
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents( stringSelection, this );
}
@Override
public void lostOwnership(Clipboard clipboard, Transferable contents) {
// TODO Auto-generated method stub
}
}