package com.fc.vrml.image.ptg; import com.fc.vrml.image.*; import java.awt.*; import java.awt.datatransfer.*; import java.awt.event.*; import java.awt.image.*; import java.io.*; import java.util.*; import java.net.*; public class PixelTextureGenerator extends Frame implements ActionListener, WindowListener, Observer{ ComponentChoiceDialog ccd; OpenURLDialog oud; MenuItem openmenuitem; MenuItem openurlmenuitem; MenuItem exportfilemenuitem; MenuItem exportclipboardmenuitem; MenuItem exitmenuitem; Menu filemenu; MenuBar menubar; Canvas canvas; Image image=null; String pixeltexturestring; int exporttype=0; String loaddirectory, savedirectory; String imagestring, filestring; Label statuslabel; Label filenamelabel; Label componentslabel; Panel statuspanel; public PixelTextureGenerator(){ super("Pixel Texture Generator"); ccd=new ComponentChoiceDialog(this); oud=new OpenURLDialog(this); filemenu=new Menu("File"); openmenuitem=new MenuItem("Open File..."); openurlmenuitem=new MenuItem("Open URL..."); exportfilemenuitem=new MenuItem("Export File..."); exportclipboardmenuitem=new MenuItem("Export to Clipboard"); exitmenuitem=new MenuItem("Exit"); exportfilemenuitem.setEnabled(false); exportclipboardmenuitem.setEnabled(false); filemenu.add(openmenuitem); filemenu.add(openurlmenuitem); filemenu.addSeparator(); filemenu.add(exportfilemenuitem); filemenu.add(exportclipboardmenuitem); filemenu.addSeparator(); filemenu.add(exitmenuitem); openmenuitem.addActionListener(this); openurlmenuitem.addActionListener(this); exportfilemenuitem.addActionListener(this); exportclipboardmenuitem.addActionListener(this); exitmenuitem.addActionListener(this); menubar=new MenuBar(); menubar.add(filemenu); setMenuBar(menubar); addWindowListener(this); setSize(300, 120); statuspanel=new Panel(); statuspanel.setBackground(Color.lightGray); canvas=new Canvas(); setLayout(new BorderLayout()); add(canvas, "Center"); add(statuspanel, "South"); } public void activateMenuItems(){ if (exportfilemenuitem.isEnabled()==false)exportfilemenuitem.setEnabled(true); if (exportclipboardmenuitem.isEnabled()==false)exportclipboardmenuitem.setEnabled(true); } public void openFileAction(){ FileDialog fd=new FileDialog(this, "Select image file..."); fd.setFile("*.gif;*.jpg"); if (loaddirectory!=null)fd.setDirectory(loaddirectory); fd.show(); imagestring=fd.getFile(); if (imagestring==null) {return;} loaddirectory=fd.getDirectory(); if(image!=null)image.flush(); image=null; image=Toolkit.getDefaultToolkit().getImage(loaddirectory+imagestring); MediaTracker mt=new MediaTracker(this); mt.addImage(image, 0); try{ mt.waitForID(0); } catch (InterruptedException ie){out ("InterruptedException.");} int x=image.getWidth(this); int y=image.getHeight(this); canvas.setSize(x, y); pack(); validate(); canvas.getGraphics().drawImage(image, 0, 0, this); activateMenuItems(); } public void openURLAction(){ oud.setLocation(getLocation()); oud.show(); URL imageurl=oud.state; if (imageurl==null) return; if(image!=null)image.flush(); image=null; image=Toolkit.getDefaultToolkit().getImage(imageurl); imagestring=imageurl.toString(); MediaTracker mt=new MediaTracker(this); mt.addImage(image, 0); try{ mt.waitForID(0); } catch (InterruptedException ie){out ("InterruptedException.");} int x=image.getWidth(this); int y=image.getHeight(this); canvas.setSize(x, y); // pack(); // validate(); // canvas.getGraphics().drawImage(image, 0, 0, this); activateMenuItems(); canvas.repaint(); } public void exportFileAction(){ ccd.setLocation(getLocation()); ccd.show(); ((Component)this).setCursor(new Cursor(Cursor.WAIT_CURSOR)); SFImageConverter sfimageconverter=new SFImageConverter(ccd.state); sfimageconverter.addObserver(this); image.getSource().startProduction(sfimageconverter); exporttype=0; } public void exportFileCallback(){ FileDialog fd=new FileDialog(this, "Save PixelTexture data.", FileDialog.SAVE); if (savedirectory!=null) fd.setDirectory(savedirectory); fd.show(); String filestring=fd.getFile(); if (filestring==null) {((Component)this).setCursor(new Cursor(Cursor.DEFAULT_CURSOR));return;} savedirectory=fd.getDirectory(); File file=new File (filestring); try{ FileWriter fw=new FileWriter(file); BufferedWriter bw=new BufferedWriter(fw); Date date=new Date(); bw.write("# PixelTexture data generated by PixelTextureGenerator from "+imagestring+" on "+date.toString()+".\n"); bw.write(pixeltexturestring); bw.flush(); bw.close(); } catch (IOException ioe){out("IOException.");out(ioe.getMessage());} catch (NullPointerException npe){out("No data.");} ((Component)this).setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } public void exportClipboardAction(){ ccd.setLocation(getLocation()); ccd.show(); ((Component)this).setCursor(new Cursor(Cursor.WAIT_CURSOR)); SFImageConverter sfimageconverter=new SFImageConverter(ccd.state); sfimageconverter.addObserver(this); image.getSource().startProduction(sfimageconverter); exporttype=1; } public void exportClipboardCallback(){ Date date=new Date(); StringSelection ss=new StringSelection("# PixelTexture data generated by PixelTextureGenerator from "+imagestring+" on "+date.toString()+".\n"+pixeltexturestring); Toolkit.getDefaultToolkit().getSystemClipboard().setContents((Transferable)ss, (ClipboardOwner)ss); ((Component)this).setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } public void exitAction(){ System.exit(0); } public void out(String string){ System.out.println(string); } public void update(Observable o, Object arg){ if (((Integer)arg).intValue()==1) {out("Image data delivery abort.");return;} if (((Integer)arg).intValue()==4) {out("Image data delivery error.");return;} if (((Integer)arg).intValue()==2) {out("Image frame data sent.");return;} pixeltexturestring=((SFImageConverter)o).getExternalSFImage().toString(); if (exporttype==0)exportFileCallback(); if (exporttype==1)exportClipboardCallback(); } public void actionPerformed(ActionEvent actionEvent){ if (actionEvent.getSource()==openmenuitem)openFileAction(); if (actionEvent.getSource()==openurlmenuitem)openURLAction(); if (actionEvent.getSource()==exportfilemenuitem)exportFileAction(); if (actionEvent.getSource()==exportclipboardmenuitem)exportClipboardAction(); if (actionEvent.getSource()==exitmenuitem)exitAction(); } public void windowActivated(WindowEvent windowEvent){ repaint(); } public void windowClosed(WindowEvent windowEvent){ } public void windowClosing(WindowEvent windowevent){ System.exit(0); } public void windowDeactivated(WindowEvent windowEvent){ } public void windowDeiconified(WindowEvent windowEvent){ repaint(); } public void windowIconified(WindowEvent windowEvent){ } public void windowOpened(WindowEvent windowEvent){ repaint(); } public void update(Graphics g){ if (image!=null){ canvas.getGraphics().drawImage(image, 0, 0, this); } } public void paint(Graphics g){ if (image!=null){ canvas.getGraphics().drawImage(image, 0, 0, this); } } public static void main(String[] args){ PixelTextureGenerator ptg=new PixelTextureGenerator(); ptg.setLocation(80, 80); ptg.show(); } }