Project: Gmote
/**
 * Copyright 2009 Marc Stogaitis and Mimi Sun 
 * 
 * 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. 
 */
 
package org.gmote.server; 
 
import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.GridLayout; 
import java.awt.Point; 
import java.util.List; 
 
import javax.swing.BorderFactory; 
import javax.swing.BoxLayout; 
import javax.swing.DefaultListModel; 
import javax.swing.JButton; 
import javax.swing.JDialog; 
import javax.swing.JFileChooser; 
import javax.swing.JFrame; 
import javax.swing.JList; 
import javax.swing.JPanel; 
import javax.swing.JTextArea; 
import javax.swing.ListSelectionModel; 
 
import org.gmote.common.FileInfo; 
import org.gmote.server.settings.BaseMediaPaths; 
 
 
/**
 * Allows the user to choose which paths will appear by default on the first 
 * screen of the file selector on the device. 
 *  
 * @author Marc 
 */
 
public class MediaPathChooserUi { 
  //private static Logger LOGGER = Logger.getLogger(MediaPathChooserUi.class.getName()); 
 private JDialog jDialog = null//@jve:decl-index=0:visual-constraint="120,25" 
  private JPanel jPanel = null
  private JTextArea txtDescription = null
  private JPanel rightButtonPanel = null
  private JButton cmdAddPath = null
  private JButton cmdRemovePath = null
  private JButton cmdClose = null
  private JList lstPaths = null
  DefaultListModel basePaths = new DefaultListModel(); 
  
 public MediaPathChooserUi() { 
    
  } 
 
  /**
   * This method initializes jFrame 
   *  
   * @return javax.swing.JFrame 
   */
 
  public void showFrame() { 
 
    loadBasePaths(); 
 
    if (jDialog == null) { 
      jDialog = new JDialog((JFrame) nulltrue); 
      jDialog.setSize(new Dimension(553371)); 
      jDialog.setLocation(new Point(100100)); 
      jDialog.setContentPane(getJPanel()); 
      jDialog.setTitle("Media Path Selector"); 
    } 
    jDialog.setVisible(true); 
 
  } 
 
  /**
   * This method initializes jPanel 
   *  
   * @return javax.swing.JPanel 
   */
 
 private JPanel getJPanel() { 
  if (jPanel == null) { 
   jPanel = new JPanel(); 
   jPanel.setLayout(new BorderLayout()); 
   JPanel test = new JPanel(); 
   test.setBorder(BorderFactory.createLineBorder(Color.black)); 
   test.setLayout(new GridLayout()); 
   test.add(getTxtDescription()); 
   jPanel.add(test, BorderLayout.NORTH); 
   jPanel.add(getRightButtonPanel(), BorderLayout.EAST); 
   jPanel.add(getLstPaths(), BorderLayout.CENTER); 
    
  
  return jPanel; 
 
 /**
  * This method initializes txtDescription  
  *   
  * @return javax.swing.JTextArea  
  */
 
 private JTextArea getTxtDescription() { 
  if (txtDescription == null) { 
    txtDescription = new JTextArea(); 
      txtDescription.setLineWrap(true); 
      txtDescription.setWrapStyleWord(true); 
      txtDescription.setEnabled(true); 
      txtDescription.setEditable(false); 
      txtDescription.setBackground(Color.DARK_GRAY); 
      txtDescription.setForeground(Color.white); 
      txtDescription.setText("Please identify the location of your movies and music. This will allow you to easily find the media you wish to run when using the remote."); 
  
  return txtDescription; 
 
 /**
  * This method initializes jPanel1  
  *   
  * @return javax.swing.JPanel  
  */
 
 private JPanel getRightButtonPanel() { 
  if (rightButtonPanel == null) { 
   rightButtonPanel = new JPanel(); 
   BoxLayout boxLayout = new BoxLayout(rightButtonPanel, BoxLayout.Y_AXIS); 
    
   rightButtonPanel.setLayout(boxLayout); 
   rightButtonPanel.add(getCmdAddPath(), null); 
   rightButtonPanel.add(getCmdRemovePath(), null); 
   rightButtonPanel.add(getCmdClose(), null); 
    
  
  return rightButtonPanel; 
 
 /**
  * This method initializes cmdAddPath  
  *   
  * @return javax.swing.JButton  
  */
 
 private JButton getCmdAddPath() { 
  if (cmdAddPath == null) { 
   cmdAddPath = new JButton(); 
   //TODO(mstogaitis): fix this so that it automatically takes up the width 
   cmdAddPath.setText("    Add path    "); 
    
   cmdAddPath.addActionListener(new java.awt.event.ActionListener() { 
        public void actionPerformed(java.awt.event.ActionEvent e) { 
          //Create a file chooser 
          JFileChooser fc = new JFileChooser(); 
          fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
           
          int returnVal = fc.showOpenDialog(getRightButtonPanel()); 
          if (returnVal == JFileChooser.APPROVE_OPTION) { 
            // Add the path to our list. 
            BaseMediaPaths.getInstance().addPath(fc.getSelectedFile().getAbsolutePath()); 
            loadBasePaths(); 
          } 
        } 
      }); 
  
  return cmdAddPath; 
 
 /**
  * This method initializes cmdRemovePath  
  *   
  * @return javax.swing.JButton  
  */
 
 private JButton getCmdRemovePath() { 
  if (cmdRemovePath == null) { 
   cmdRemovePath = new JButton(); 
   cmdRemovePath.setText("Remove Path"); 
   cmdRemovePath.addActionListener(new java.awt.event.ActionListener() { 
        public void actionPerformed(java.awt.event.ActionEvent e) { 
          BaseMediaPaths.getInstance().removePath(lstPaths.getSelectedIndex()); 
          loadBasePaths(); 
        } 
      }); 
  
  return cmdRemovePath; 
 
  
 /**
   * This method initializes cmdClose   
   *   
   * @return javax.swing.JButton   
   */
 
  private JButton getCmdClose() { 
    if (cmdClose == null) { 
      cmdClose = new JButton(); 
      cmdClose.setText("       Done        "); 
      cmdClose.addActionListener(new java.awt.event.ActionListener() { 
        public void actionPerformed(java.awt.event.ActionEvent e) { 
          jDialog.setVisible(false); 
        } 
      }); 
    } 
    return cmdClose; 
  } 
  
 /**
  * This method initializes lstPaths  
  *   
  * @return javax.swing.JList  
  */
 
 private JList getLstPaths() { 
  if (lstPaths == null) { 
   lstPaths = new JList(basePaths); 
   lstPaths.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
      lstPaths.setSelectedIndex(0); 
  
  return lstPaths; 
 
   
  private void loadBasePaths() { 
    basePaths.clear(); 
    List<FileInfo> paths = BaseMediaPaths.getInstance().getBasePaths(); 
    for (FileInfo path : paths) { 
      basePaths.addElement(path.getAbsolutePath()); 
    } 
  } 
   
}