/******************************************************************************* * Copyright (c) 2004, 2010 BREDEX GmbH. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * BREDEX GmbH - initial API and implementation and/or initial documentation *******************************************************************************/ package org.eclipse.jubula.examples.aut.dvdtool.control; import javax.swing.JPopupMenu; import javax.swing.JTable; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import org.eclipse.jubula.examples.aut.dvdtool.gui.DvdContentPanel; import org.eclipse.jubula.examples.aut.dvdtool.gui.DvdTableModel; import org.eclipse.jubula.examples.aut.dvdtool.gui.DvdTechMainPanel; import org.eclipse.jubula.examples.aut.dvdtool.gui.DvdTechPanel; import org.eclipse.jubula.examples.aut.dvdtool.model.Dvd; /** * This is the controller class for the table. * * @author BREDEX GmbH * @created 11.04.2005 */ public class DvdTableController implements ListSelectionListener { /** empty string */ private static final String EMPTY_STRING = ""; //$NON-NLS-1$ /** the main frame contoller, holding the actions, etc. */ private final DvdMainFrameController m_controller; /** the table, set by the constructor */ private final JTable m_table; /** a dvd model instance, see valueChanged() */ private Dvd m_dvd = null; /** * public constructor * * @param mainFrameController * the controller of the main frame */ public DvdTableController(DvdMainFrameController mainFrameController) { m_controller = mainFrameController; m_table = mainFrameController.getDvdMainFrame().getTable(); init(); } /** * private method for initialisation */ private void init() { m_table.getSelectionModel().addListSelectionListener(this); m_table.addMouseListener(new PopupListener(createPopupMenu())); enablePanels(false); } /** * updates the panels to display <code>dvd</code> * * @param dvd * an instance of the model, will not be changed */ private void updatePanels(Dvd dvd) { DvdContentPanel contentPanel = m_controller.getDvdMainFrame() .getDvdContentPanel(); DvdTechMainPanel techMainPanel = m_controller.getDvdMainFrame() .getDvdTechMainPanel(); DvdTechPanel techPanel = techMainPanel.getDvdTechPanel(); if (dvd != null) { contentPanel.getTextFieldChapters().setText( String.valueOf(dvd.getChapters())); contentPanel.getTextAreaDescription().setText(dvd.getDescription()); switch (dvd.getFsk()) { case Dvd.FSK_6: contentPanel.getRadioButtonFsk6().setSelected(true); break; case Dvd.FSK_16: contentPanel.getRadioButtonFsk16().setSelected(true); break; case Dvd.FSK_18: contentPanel.getRadioButtonFsk18().setSelected(true); break; default: // do nothing } techMainPanel.getListLanguages().setSelectedIndices( dvd.getLanguages()); techPanel.getTextFieldLength().setText( String.valueOf(dvd.getLength())); techPanel.getCheckBoxBonus().setSelected(dvd.hasBonus()); techPanel.getComboBoxRegionCode().setSelectedIndex( dvd.getRegionCode()); enablePanels(true); } else { clearPanels(); enablePanels(false); } } /** * enables or disables the panels * * @param enable * flag foe enable or disable */ private void enablePanels(boolean enable) { DvdContentPanel contentPanel = m_controller.getDvdMainFrame() .getDvdContentPanel(); DvdTechMainPanel techMainPanel = m_controller.getDvdMainFrame() .getDvdTechMainPanel(); DvdTechPanel techPanel = techMainPanel.getDvdTechPanel(); contentPanel.getTextFieldChapters().setEditable(enable); contentPanel.getTextAreaDescription().setEditable(enable); contentPanel.getRadioButtonFsk6().setEnabled(enable); contentPanel.getRadioButtonFsk16().setEnabled(enable); contentPanel.getRadioButtonFsk18().setEnabled(enable); techMainPanel.getListLanguages().setEnabled(enable); techPanel.getTextFieldLength().setEditable(enable); techPanel.getCheckBoxBonus().setEnabled(enable); techPanel.getComboBoxRegionCode().setEnabled(enable); } /** * clears the fields of the detail panels */ private void clearPanels() { DvdContentPanel contentPanel = m_controller.getDvdMainFrame() .getDvdContentPanel(); DvdTechMainPanel techMainPanel = m_controller.getDvdMainFrame() .getDvdTechMainPanel(); DvdTechPanel techPanel = techMainPanel.getDvdTechPanel(); contentPanel.getTextFieldChapters().setText(EMPTY_STRING); contentPanel.getTextAreaDescription().setText(EMPTY_STRING); contentPanel.getRadioButtonDummy().setSelected(true); techMainPanel.getListLanguages().clearSelection(); techPanel.getTextFieldLength().setText(EMPTY_STRING); techPanel.getCheckBoxBonus().setSelected(false); techPanel.getComboBoxRegionCode().setSelectedIndex(0); } /** * puts the current displayed dvd to the model */ public void updateModel() { updateModel(m_dvd); } /** * puts the diplayed dvd to the given model <code>dvd</code> * * @param dvd * an instance of the model, will holding the displayed data */ private void updateModel(Dvd dvd) { if (m_table.isEditing() && !m_table.getCellEditor().stopCellEditing()) { m_table.getCellEditor().cancelCellEditing(); } if (dvd != null) { DvdContentPanel contentPanel = m_controller.getDvdMainFrame() .getDvdContentPanel(); DvdTechMainPanel techMainPanel = m_controller.getDvdMainFrame() .getDvdTechMainPanel(); DvdTechPanel techPanel = techMainPanel.getDvdTechPanel(); try { dvd.setChapters(Integer.parseInt(contentPanel .getTextFieldChapters().getText())); } catch (NumberFormatException nfe) { // NOPMD by zeb on 10.04.07 14:08 // Do nothing: This keeps the previous value of chapters } dvd.setDescription(contentPanel.getTextAreaDescription().getText()); if (contentPanel.getRadioButtonFsk6().isSelected()) { dvd.setFsk(Dvd.FSK_6); } else if (contentPanel.getRadioButtonFsk16().isSelected()) { dvd.setFsk(Dvd.FSK_16); } else { dvd.setFsk(Dvd.FSK_18); } dvd.setLanguages(techMainPanel.getListLanguages() .getSelectedIndices()); try { dvd.setLength(Integer.parseInt(techPanel.getTextFieldLength() .getText())); } catch (NumberFormatException nfe) { // NOPMD by zeb on 10.04.07 14:08 // Do nothing: This keeps the previous value of text field length } dvd.setBonus(techPanel.getCheckBoxBonus().isSelected()); dvd.setRegionCode(techPanel.getComboBoxRegionCode() .getSelectedIndex()); m_controller.setChanged(true); } } /** * enables / disable the actions, depending on the selection of dvd table * @param enable indicates whether actions should be enabled or disabled */ private void updateActions(boolean enable) { m_controller.getRemoveDvdAction().setEnabled(enable); m_controller.getAddLanguageAction().setEnabled(enable); m_controller.getClearDescriptionAction().setEnabled(enable); m_controller.getCopyChapterTextAction().setEnabled(enable); m_controller.getCopyChapterLabelAction().setEnabled(enable); m_controller.getCopyBonusValueAction().setEnabled(enable); m_controller.getCopyFsk6ButtonAction().setEnabled(enable); m_controller.getCopyFsk16ButtonAction().setEnabled(enable); m_controller.getCopyFsk18ButtonAction().setEnabled(enable); m_controller.getChangeTabSelectionAction().setEnabled(enable); // the remove language action depends on language list selection } /** * {@inheritDoc} */ public void valueChanged(ListSelectionEvent e) { if (!e.getValueIsAdjusting()) { // it's the dvd, which was selected before ! updateModel(m_dvd); if (!m_table.getSelectionModel().isSelectionEmpty()) { DvdTableModel tm = (DvdTableModel) m_table.getModel(); m_dvd = tm.getDvd(m_table.getSelectedRow()); updateActions(true); } else { updateActions(false); m_dvd = null; } updatePanels(m_dvd); } } /** * @return Returns the dvd. */ public Dvd getDvd() { return m_dvd; } /** * sets the enable state for all dvds * @param enableState the enable state to be set for all dvds */ public void setAllDvdsEnableState(boolean enableState) { if (!enableState) { m_table.getSelectionModel().clearSelection(); } m_table.setEnabled(enableState); } /** * Creates the popupmenu * @return the popupmenu */ private JPopupMenu createPopupMenu() { JPopupMenu pm = new JPopupMenu(); pm.add(m_controller.getAddDvdAction()); pm.add(m_controller.getRemoveDvdAction()); return pm; } }