Package gederedem.ihm

Source Code of gederedem.ihm.MainWindow

package gederedem.ihm;

import gederedem.Gederedem;
import gederedem.data.DataSet;
import gederedem.data.Job;

import java.awt.Component;
import java.awt.HeadlessException;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import java.text.DateFormat;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;

import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

/**
* Main GUI class, display a list of offers and details of selected offer.
*
* @author chrelaix
*
*/
public class MainWindow extends JFrame implements WindowListener {
  public DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
  // TODO : transform to private and create getters to handle it
  public JTable jobTable;
 
  //TODO : virtualise all the menus
  private JMenuBar menuBar = new JMenuBar();
  private JMenu fileMenu;
  private JMenu editMenu;
   
  private JMenuItem openMenu;
  private JMenuItem exitMenu;
 
  private JMenuItem newRowMenu;
 
  // TODO : create menuIcons to handle standards functions
 
  /**
   * UID
   */
  private static final long serialVersionUID = 8085282185758428962L;
 
  /**
   * The parent which created the GUI.
   */
  private Gederedem dad;

  /**
   * Main display.
   * @throws HeadlessException
   */
  public MainWindow(Gederedem builder) throws HeadlessException {
    super();

    dad = builder;
    // Initialization
    build();
    dad.log.exiting(this.getClass().getName(), "MainWindow Constructor");
  }
 
  /**
   * Initialization of the displayed window.
   */
  private void build() {
    dad.log.entering(this.getClass().getName(), "build()");
    // Give a name to the app
    setTitle(dad.labels.getString("labels.info.main.title") + " - " + Gederedem.VERSION);
    setResizable(true);
   
    // We want to exit with the "x" icon
    addWindowListener(this);
    setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
   
    // Init menus
    //--------------------------
    // TODO : edit menus
    fileMenu = new JMenu(dad.labels.getString("labels.action.file"));
    editMenu = new JMenu(dad.labels.getString("labels.action.edit"));
   
    openMenu = new JMenuItem(dad.labels.getString("labels.action.openProfile"));
    exitMenu = new JMenuItem(dad.labels.getString("labels.action.exit"));
   
    newRowMenu = new JMenuItem(dad.labels.getString("labels.action.addJob"));
   
//    this.fileMenu.add(openMenu);
    this.fileMenu.add(exitMenu);
    exitMenu.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent arg0) {
        exit();
      }       
    });
    this.editMenu.add(newRowMenu);
    newRowMenu.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent arg0) {
        createRow();
      }

    });

    this.menuBar.add(fileMenu);
    this.menuBar.add(editMenu);
    //-------------------------
     
    this.setJMenuBar(menuBar);
    // TODO : set IconBar
    //--------------------------
   
    // TODO : set Table
    //--------------------------
    /**
     *  The table columns titles to display in main gui
     */
    String[] tableTitles = {dad.labels.getString("labels.info.data.id"),
        dad.labels.getString("labels.info.data.title"),
        dad.labels.getString("labels.info.data.enterprise"),
        dad.labels.getString("labels.info.data.publication"),
        dad.labels.getString("labels.action.delete")};
   
    dad.log.allDebug("logs.gui.MainWindow.addTable");
    JobTableModel tableModel = new JobTableModel(tableTitles);
    jobTable = new JTable(tableModel);
   
    // TODO : set Delete button
    jobTable.getColumn(dad.labels.getString("labels.action.delete")).setCellRenderer(new ButtonRenderer());
    jobTable.getColumn(dad.labels.getString("labels.action.delete")).setCellEditor(new ButtonEditor(new JCheckBox()));
/*   
* TODO�: fix contextual menu
    jobTable.getTableHeader().addMouseListener(new MouseAdapter(){
      public void mouseReleased(MouseEvent event){
        if(event.getButton() == event.BUTTON3){
          // Test if we are into the table
          if (jobTable.columnAtPoint(new Point(event.getX(), event.getY())) != -1) {
           
            //add an item
            JMenuItem add = new JMenuItem("Add a row");
            add.addActionListener(new AddListener());
           
            //Delete an item
            JMenuItem erase = new JMenuItem("delete the line");
            erase.addActionListener(new EraseListener(new Point(event.getX(), event.getY())));

            //Add to the contextual menu
            JPopupMenu menu = new JPopupMenu();
            menu.add(add);
            menu.add(erase);
            menu.show(jobTable, event.getX(), event.getY());
          }
        }
      }
    });
*/   
        //Add the table to a contentPane in a scroll
        //If not, the title will not be visible ! 
    this.getContentPane().add(new JScrollPane(jobTable));
   
    // Display the gui
    this.setVisible(true);
    dad.log.exiting(this.getClass().getName(), "build()");
  }

  @Override
  public void windowActivated(WindowEvent arg0) {
    dad.log.entering(this.getClass().getName(), "windowActivated(" + arg0.toString() + ")");
  }

  @Override
  public void windowClosed(WindowEvent arg0) {
    dad.log.entering(this.getClass().getName(), "windowClosed(" + arg0.toString() + ")");
  }

  @Override
  public void windowClosing(WindowEvent arg0) {
    dad.log.entering(this.getClass().getName(), "windowClosing(" + arg0.toString() + ")");
    exit();
  }

  @Override
  public void windowDeactivated(WindowEvent arg0) {
    dad.log.entering(this.getClass().getName(), "windowDeactivated(" + arg0.toString() + ")");
  }

  @Override
  public void windowDeiconified(WindowEvent arg0) {
    dad.log.entering(this.getClass().getName(), "windowDeiconified(" + arg0.toString() + ")");
  }

  @Override
  public void windowIconified(WindowEvent arg0) {
    dad.log.entering(this.getClass().getName(), "windowIconified(" + arg0.toString() + ")");
  }

  @Override
  public void windowOpened(WindowEvent arg0) {
    dad.log.entering(this.getClass().getName(), "windowOpened(" + arg0.toString() + ")");
  }

  public void loadTable(DataSet ds) {
    dad.log.entering(this.getClass().getName(), "loadTable(DataSet)");

    int nextId = 0;
    // TODO : test the empty indexes
    int maxSize = ds.jobArray.size();
    String msg = MessageFormat.format(dad.labels.getString("logs.gui.MainWindow.nbRowTable"),
        maxSize);
    dad.log.info(msg);
    Job tmpJob;
    Object[] donnee;
    while (nextId < maxSize) {
      tmpJob = ds.jobArray.get(nextId);
      // TODO use addRowInDisplay
      donnee = new Object[]{Integer.valueOf(tmpJob.getId()).toString(),
          tmpJob.getTitle(),
          tmpJob.getEnterprise(),
          df.format(tmpJob.getPublication()),
          dad.labels.getString("labels.action.delete")};
      msg = MessageFormat.format(dad.labels.getString("logs.gui.MainWindow.displayedDatas"),
          tmpJob.getId(),
          tmpJob.getTitle(),
          tmpJob.getEnterprise(),
          df.format(tmpJob.getPublication())
          );
      dad.log.debug(msg);
      ((JobTableModel)jobTable.getModel()).addRow(donnee);
      nextId++;
    }
    dad.log.exiting(this.getClass().getName(), "loadTable()");
  }       
/*
  public ArrayList<Job> getJobTable() {
    // TODO change the log
    dad.log.debug("Get the displayed data");
    ArrayList<Job> jobArray = new ArrayList<Job>();
    int nextId = 0;
    int sizeTable = jobTable.getRowCount();
    // TODO : test the empty indexes
    Job tmpJob;
    Object[] donnee;
    while (nextId < sizeTable) {
      // TODO change the log
      dad.log.debug("Processing line " + nextId);
*/
/*      // TODO : test the column numbers
      // TODO : made the location got from JobTableModel class
      int nextCol = 1;
      int nbCol = jobTable.getColumnCount();
      while (nextCol < (nbCol +1)) {
        String colName = jobTable.getColumnName(nbCol);
        if (colName == Job.ID) {


        }
      } */
      // TODO : made method in JobTableModel to get Value with column name and cast type in this case
     
/*     
      tmpJob = new Job(Integer.parseInt((String) jobTable.getValueAt(nextId, 1)),
          (String)jobTable.getValueAt(nextId, 2),
          (String)jobTable.getValueAt(nextId, 3),
          "",
          (Date)jobTable.getValueAt(nextId, 4),
          (Date)jobTable.getValueAt(nextId, 5),
          "", "");
      nextId++;
    }

  }       
    */
  private void createRow() {
    dad.log.entering(this.getClass().getName(), "createRow()");

    // We do not need to add 1 because array of job begin to 0
    int maxId = jobTable.getRowCount();
    int tmpId = 0;
    int selectedId = 0;
    boolean indexTaken = true;
    String rowId;
    // seek first free Id
    while (indexTaken == true) {
      indexTaken = false;
      tmpId = 0;
      while (tmpId < maxId) {
        // TODO�: change column definition
        rowId = (String)jobTable.getValueAt(tmpId, 0);
        if (selectedId == Integer.parseInt(rowId)) {
          // Index already taken, we increment to find first free index
          selectedId++;
          indexTaken = true;
          break;
        }
        tmpId++;
      }
    }
   
    String msg = MessageFormat.format(dad.labels.getString("logs.gui.MainWindow.createRow"),
        selectedId);
    dad.log.debug(msg);
    Job newJob = new Job(selectedId);
    dad.addJobInProfile(newJob);
    addRowInDisplay(newJob);
    dad.log.exiting(this.getClass().getName(), "createRow()");
  }       

  private void deleteRow(int index) {
    dad.log.entering(this.getClass().getName(), "deleteRow(" + Integer.toString(index) + ")");
    // Display a confirmation message
    int option = JOptionPane.showConfirmDialog(null,
        MessageFormat.format(dad.labels.getString("labels.info.deleteRow.msg"), Integer.toString(index)),
        dad.labels.getString("labels.info.deleteRow.title"),
        JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
    if(option == JOptionPane.OK_OPTION) {
      ((JobTableModel)jobTable.getModel()).removeRow(index);
      dad.removeJobInProfile(index);
    }
    dad.log.exiting(this.getClass().getName(), "deleteRow()");
  }       

  private void addRowInDisplay(Job jobToDisplay) {
    dad.log.entering(this.getClass().getName(), "addRowInDisplay(" + jobToDisplay.getTitle() + ")");

    //   TODO mutualize with loadTable method
    Object[] donnee = new Object[]{Integer.valueOf(jobToDisplay.getId()).toString(),
        jobToDisplay.getTitle(),
        jobToDisplay.getEnterprise(),
        df.format(jobToDisplay.getPublication()),
        dad.labels.getString("labels.action.delete")};
    ((JobTableModel)jobTable.getModel()).addRow(donnee);
    dad.log.exiting(this.getClass().getName(), "addRowInDisplay()");
  }       

  /**
   * Exit and close the display.
   */
  public void exit() {
    dad.log.entering(this.getClass().getName(), "exit()");
    dad.ToDoBeforeExit();
    dad.log.exiting(this.getClass().getName(), "exit()");
  }
  /**
   * Class to handle the line deleting
   * @author CHerby, modified by chrelaix
   */
  class EraseListener implements ActionListener{
    private Point point = null;
    private Object[][] data;
    private Object[] title;
    public EraseListener(Point col){
      this.point = col;
    }
    public void actionPerformed(ActionEvent event) {
      //Get the line index
      deleteRow(jobTable.rowAtPoint(this.point));
    }
  }
 
  /**
   * add a line to the table (to be exact to the table model)
   * @author CHerby
   */
/*  class AddListener implements ActionListener{
    public void actionPerformed(ActionEvent event) {
      //add a line to the model
      Object[] donnee = new Object[]{"1", "new Enterprise", "", "", ""};
          ((DefaultTableModel)jobTable.getModel()).addRow(donnee);             
    }
  }
  */
  public class ButtonRenderer extends JButton implements TableCellRenderer{

    /**
     * Serial UID
     */
    private static final long serialVersionUID = 1654176059478593423L;

    public Component getTableCellRendererComponentJTable table, Object value,
        boolean isSelected, boolean isFocus, int row, int col) {
      setText((value != null) ? value.toString() : "not defined");
      // Return the JButton
      return this;
    }
  }
 
  public class ButtonEditor extends DefaultCellEditor {
     
    /**
     * Serial UID
     */
    private static final long serialVersionUID = 5109059534647588227L;
    protected JButton button;
    private boolean   isPushed;
    private ButtonListener bListener = new ButtonListener();
   
    /**
     * CheckBox constructor
     * @param checkBox
     * @param count
     */
    public ButtonEditor(JCheckBox checkBox) {
      // By default this object type work with a JCheckBox
      super(checkBox);
        // create the button
      button = new JButton();
        button.setOpaque(true);
        // set a listener
        button.addActionListener(bListener);
    }

    public Component getTableCellEditorComponent(JTable table, Object value,
        boolean isSelected, int row, int column) {
      // Set the line
      bListener.setRow(row);
      // set the column
      bListener.setColumn(column);
      // Set the table for potential actions
      bListener.setTable(table);
     
      // Set the label
      button.setText( (value ==null) ? "not defined" : value.toString() );
      // return the result
        return button;
    }
   
    /**
     * Listener for the button
     * @author CHerby
     *
     */
    class ButtonListener implements ActionListener{
      private int column, row;
      private JTable table;
      private int nbre = 0;
      private JButton button;

      public void setColumn(int col){this.column = col;}
      public void setRow(int row){this.row = row;}
      public void setTable(JTable table){this.table = table;}

      public JButton getButton(){return this.button;}
       
      public void actionPerformed(ActionEvent event) {
        //TODO : change the log
        System.out.println("delete line " +  row);
        deleteRow(row);
        //Tell to the table there is a change
        //� l'emplacement d�termin� par les valeur pass�e en param�tre
//        ((AbstractTableModel)table.getModel()).fireTableCellUpdated(this.row, this.column - 1);
//        this.button = ((JButton)event.getSource());
      }
    }
  }
}
TOP

Related Classes of gederedem.ihm.MainWindow

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.