package org.roussev.hiena.player.playlist;
/*
* Copyright 2009 Hiena Mp3 Player http://code.google.com/p/hiena-mp3-player/
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.net.*;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
import java.util.Vector;
import org.roussev.hiena.*;
import org.roussev.hiena.util.*;
import org.roussev.hiena.gui.*;
final class URLWindow extends JWindow {
private int XDrag = 0, YDrag = 0;
private int OrigineX = 0, OrigineY = 0;
private int XPressed = 0, YPressed = 0;
private Dimension screenSize;
private final JPanel panel;
private JTextField urlField;
private URL url = null;
//private final static int[] minimize_location = {332, 4};
//private final static int[] close_location = {345, 4};
//---------------------------------------------------
protected URLWindow(final Window owner) {
super(owner);
//topFrame.setResizable(false);
this.setSize(Constants.URL_WIDTH, Constants.URL_HEIGHT );
this.centerWindow();
//--------------
panel = new JPanel();
initBG();
//----------------
this.getContentPane().setLayout(null);
panel.setBounds(0,0, Constants.URL_WIDTH, Constants.URL_HEIGHT );
this.getContentPane().add(panel);
initMouseListeners();
//topFrame.setLocation(-200,-200);
//topFrame.setVisible(true);
this.setVisible(true);
}
//---------------------------------------------------------------------
private void initBG() {
panel.setLayout(null);
//-------------
final ImageIcon bg_1 = Utils.getIcon("url.1");
final JLabel label_1 = new JLabel( bg_1 );
label_1.setBounds(0,0, 360, 4);
panel.add( label_1 , new Integer(Integer.MIN_VALUE) );
//-------------
final ImageIcon bg_2 = Utils.getIcon("url.2");
final JLabel label_2 = new JLabel( bg_2 );
label_2.setBounds(0,4, 4, Constants.URL_HEIGHT-4);
panel.add( label_2 , new Integer(Integer.MIN_VALUE) );
//-------------
final ImageIcon bg_3 = Utils.getIcon("url.3");
final JLabel label_3 = new JLabel( bg_3 );
label_3.setBounds(0,Constants.URL_HEIGHT-4, 360, 4);
panel.add( label_3 , new Integer(Integer.MIN_VALUE) );
//-------------
final ImageIcon bg_4 = Utils.getIcon("url.4");
final JLabel label_4 = new JLabel( bg_4 );
label_4.setBounds(269,4, 91, 22);
panel.add( label_4 , new Integer(Integer.MIN_VALUE) );
//-------------
urlField = new JTextField();
urlField.setFont(new java.awt.Font("Dialog", 0, 12));
urlField.setBackground( Utils.toColor("bg.white"));
panel.add( urlField );
urlField.setBounds( 4, 4, 265, 21 );
//--------------
XButton close = new XButton(
"close",
new String[]{
Constants.get("close"),
Constants.get("close_"),
Constants.get("close.down"),
Constants.get("btn.bg")
}
);
close.setSize(close.getPreferredSize());
close.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
notifyPropertyChangeListeners("exit");
dispose();
}
});
//--------------
XButton add = new XButton(
"add",
new String[]{
Constants.get("url.add"),
Constants.get("url.add_"),
Constants.get("url.add.down"),
Constants.get("btn.bg")
}
);
add.setSize(add.getPreferredSize());
add.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
doAction();
}
});
urlField.addKeyListener( new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode() == KeyEvent.VK_ENTER) {
doAction();
}
}
});
panel.add(add);
panel.add(close);
add.setLocation( 272, 5);
close.setLocation( 347, 2);
}
//-------------------------------------------------------
private final void initMouseListeners() {
this.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
doMousePressed(evt);
}
});
this.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
public void mouseDragged(java.awt.event.MouseEvent evt) {
doMouseDragged(evt);
}
});
}
//-------------------------------------------------------
private final void centerWindow(){
//Center the window
screenSize = Toolkit.getDefaultToolkit().getScreenSize();
final Dimension frameSize = this.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
OrigineX = (screenSize.width - frameSize.width) / 2;
OrigineY = (screenSize.height - frameSize.height) / 2;
this.setLocation( OrigineX-50, OrigineY );
}
//--------------------------------------
final void doMousePressed(MouseEvent evt) {
XPressed = evt.getX();
YPressed = evt.getY();
}
//--------------------------------------------------------------
final void doMouseDragged(MouseEvent evt) {
int DeltaX = 0, DeltaY = 0;
DeltaX = evt.getX() - XDrag;
DeltaY = evt.getY() - YDrag;
XDrag = evt.getX() - DeltaX;
YDrag = evt.getY() - DeltaY;
OrigineX = - XPressed + OrigineX + DeltaX ;
OrigineY = - YPressed + OrigineY + DeltaY ;
// Keep player window in screen
if (OrigineX < 0) OrigineX = 0;
if (OrigineY < 0) OrigineY = 0;
if (screenSize.width != -1) {
if (OrigineX > screenSize.width-Constants.URL_WIDTH) OrigineX = screenSize.width-Constants.URL_WIDTH;
}
if (screenSize.height != -1) {
if (OrigineY > screenSize.height-Constants.URL_HEIGHT-10) OrigineY = screenSize.height-Constants.URL_HEIGHT-10;
}
setLocation( OrigineX, OrigineY) ;
}
//--------------------------------------------
final void doAction() {
try {
url = new URL( this.urlField.getText());
notifyPropertyChangeListeners("add");
} catch(java.net.MalformedURLException me) {
/*
final JOptionPane pane = new JOptionPane( Constants.get("err.url"), JOptionPane.INFORMATION_MESSAGE );
final JDialog dialog = pane.createDialog(this, Constants.get("err.url"));
dialog.show();
*/
notifyPropertyChangeListeners("exit");
}
dispose();
}
//--------------------------------------------
public final URL getURL() {
return url;
}
/*-------------------------------------------------------------------*/
/*--- notify PropertyChangeListeners --*/
/*-------------------------------------------------------------------*/
private final Vector listeners = new Vector();
public synchronized final void addPropertyChangeListener(PropertyChangeListener l) {
super.addPropertyChangeListener(l);
//if( listeners != null ) {
if (!listeners.contains(l)) {
listeners.addElement(l);
Utils.p( " --- URLWindow ADD " + listeners);
}
}
public synchronized void removePropertyChangeListener(PropertyChangeListener l) {
if (listeners.contains(l)) {
listeners.removeElement(l);
Utils.p( " --- URLWindow REMOVE " + listeners);
}
}
final void notifyPropertyChangeListeners(String property) {
/*final int size = listeners.size();
PropertyChangeListener listener;
for(int i=0; i < size ; ++i) {
listener = (PropertyChangeListener)listeners.get(i);
listener.propertyChange( new PropertyChangeEvent( this, property, null, null ));
}*/
//////--------------
PropertyChangeEvent pce = new PropertyChangeEvent( this, property, null, null );
Vector listenerCopy;
synchronized (this) {
listenerCopy = (Vector) listeners.clone();
}
for (int i = 0; i < listeners.size(); ++i) {
PropertyChangeListener pcl = (PropertyChangeListener) listenerCopy.elementAt(i);
pcl.propertyChange(pce);
}
//////--------------
}
//--------------------------------------------------------------
}