Package nixonftp.ui

Source Code of nixonftp.ui.NXSubFrame

/* nixonFTP
* FTP client version 0.1
* Copyright (C) 2010 NIXON Development Corporation.
* All rights reserved.
* http://members.shaw.ca/nixon.com
*/
package nixonftp.ui;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Vector;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.JToggleButton;
import javax.swing.JViewport;
import javax.swing.text.BadLocationException;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyleContext;
import javax.swing.text.StyledDocument;

/**
*
* @author Billy
*/
public class NXSubFrame extends JDialog implements MouseListener, MouseMotionListener {

  private JTextPane a;
  private JLabel b;
  private JScrollPane spa;
  private JScrollPane spb;
  private ImageIcon i;

  private int initialX;
  private int initialY;
  private static boolean down;
  private JViewport v;
  private int initialLeft;

  private boolean addedImage;
  private JToggleButton tool;

  public NXSubFrame(Frame owner, String title, boolean image, ImageIcon img) {
    super(owner);
    setTitle(title);
    setUp(image, img);
  }

  public void setUp(boolean image, ImageIcon img) {
    a = new JTextPane();
    //a.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
    addStyles(a.getStyledDocument());
    a.setEditable(false);
    a.setBackground(Color.WHITE);
    a.setOpaque(true);

    if (!(b instanceof JLabel)) {
      b = new JLabel(img);
    } else {
      if (img != null) setImage(img);
    }
    b.setBackground(new Color(255, 255, 255));
    spa = new JScrollPane(a);
    spb = new JScrollPane(b);
    b.addMouseListener(this);
    b.addMouseMotionListener(this);
    v = (JViewport)b.getParent();
    if (image) {
      add(spb);
    } else {
      add(spa);
    }
    addedImage = image;
    //add(spb);
    spa.setBorder(null);
    spb.setBorder(null);

    spa.setVisible(!image);
    spb.setVisible(image);
    pack();
  }

  public void setImage(ImageIcon img) {
    if (b instanceof JLabel) {
      remove(spa);
      add(spb);
      i = img;
      b.setIcon(img);
      spb.setVisible(true);
      spa.setVisible(false);
      (this.getContentPane()).setPreferredSize(new Dimension(img.getIconWidth(), img.getIconHeight()));
      pack();
    }
  }

  private void addStyles(StyledDocument doc) {
    Style def = StyleContext.getDefaultStyleContext().
          getStyle(StyleContext.DEFAULT_STYLE);

    Style command = doc.addStyle("command", def);
    StyleConstants.setFontFamily(def, "SansSerif");
    StyleConstants.setForeground(command, Color.BLACK);

    //responses

    Style regular = doc.addStyle("regular", command);
    StyleConstants.setForeground(regular, Color.GRAY);

    Style s = doc.addStyle("tryagain", command);
    StyleConstants.setForeground(s, Color.ORANGE);

    s = doc.addStyle("pending", command);
    StyleConstants.setForeground(s, new Color(51, 102, 153));

    s = doc.addStyle("error", command);
    StyleConstants.setForeground(s, Color.RED);

    s = doc.addStyle("done", command);
    StyleConstants.setForeground(s, new Color(0, 153, 0));
  }

  public JTextPane getLog() {
    return a;
  }

  public void loadImage(String file) {
    b.setIcon(new ImageIcon(file));
    repaint();
  }

  public void displayPlainText(String s) {
    a.setText(s);
    setUpText();
  }

  private void setUpText() {
    remove(spb);
    add(spa);
    i = null;
    spa.setVisible(true);
    spb.setVisible(false);
    pack();
  }

  public void displayText(Vector<String> s) {
    if (s == null) {
      a.setText("");
      return;
    }

    Object[] lines = s.toArray();
    String line;
   
    boolean eraseControl = false;
   
    try {
      for (int x = 0; x < lines.length; x++) {
        line = (String) lines[x];
        appendText(line);
      }
    } catch (Exception e) {
    }

    setUpText();
  }

  public void appendText(String text) {
    String style;
    boolean eraseControl;
    StyledDocument doc = a.getStyledDocument();
    if (text.startsWith("\u3000")) {
      style = "error";
      eraseControl = true;
    } else if (text.startsWith("\u3001")) {
      style = "tryagain";
      eraseControl = true;
    } else if (text.startsWith("\u3002")) {
      style = "pending";
      eraseControl = true;
    } else if (text.startsWith("\u3003")) {
      style = "done";
      eraseControl = true;
    } else if (text.startsWith("\u3004")) {
      style = "regular";
      eraseControl = true;
    } else {
      style = "";
      eraseControl = false;
    }

    if (eraseControl) {
      text = text.substring(1);
    }
    try {
      doc.insertString(doc.getLength(), text + '\n', doc.getStyle(style));
    } catch (BadLocationException ex) {
    }
  }

  public void mouseClicked(MouseEvent e) {
    down = false;
  }

  public void mousePressed(MouseEvent e) {
    initialX = e.getX();
    initialY = e.getY();
    down = true;
  }

  public void mouseReleased(MouseEvent e) {
  }

  public void mouseEntered(MouseEvent e) {
  }

  public void mouseExited(MouseEvent e) {
  }

  public void mouseDragged(MouseEvent e) {
    if (!down) return;
    boolean doX;
    int diffX = e.getX() - initialX;
    int diffY = e.getY() - initialY;

    int x = v.getViewPosition().x - diffX;
    int y = v.getViewPosition().y - diffY;

    int end = v.getView().getSize().width - v.getSize().width;
    if (x > end) x = end;
    end =  v.getView().getSize().height - v.getSize().height;
    if (y > end) y = end;
    if (x < 0) x = 0;
    if (y < 0) y = 0;
    if (b.getWidth() <= v.getSize().width) x = v.getViewPosition().x;
    if (b.getHeight() <= v.getSize().height) y = v.getViewPosition().y;
   
    v.setViewPosition(new Point(x, y));
  }

  public void mouseMoved(MouseEvent e) {
   
  }

  public void setTool(JToggleButton btn) {
    tool = btn;
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        tool.setSelected(false);
      }
    });
  }
}
TOP

Related Classes of nixonftp.ui.NXSubFrame

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.