/*
* jMemorize - Learning made easy (and fun) - A Leitner flashcards tool
* Copyright(C) 2004-2008 Riad Djemili and contributors
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 1, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package jmemorize.gui.swing.actions;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import jmemorize.core.Card;
import jmemorize.core.Category;
import jmemorize.core.CategoryObserver;
import jmemorize.core.Main;
import jmemorize.gui.LC;
import jmemorize.gui.Localization;
import jmemorize.gui.swing.SelectionProvider;
import jmemorize.gui.swing.SelectionProvider.SelectionObserver;
import jmemorize.gui.swing.dialogs.LearnSettingsDialog;
import jmemorize.gui.swing.frames.MainFrame;
/**
* An action that shows the learn session settings window.
*
* @author djemili
*/
public class LearnAction extends AbstractSessionDisabledAction
implements SelectionObserver, CategoryObserver
{
private SelectionProvider m_selectionProvider;
private Category m_category;
public LearnAction(SelectionProvider selectionProvider)
{
setValues();
m_selectionProvider = selectionProvider;
selectionProvider.addSelectionObserver(this);
}
/* (non-Javadoc)
* @see java.awt.event.ActionListener
*/
public void actionPerformed(ActionEvent e)
{
Main main = Main.getInstance();
MainFrame frame = main.getFrame();
new LearnSettingsDialog(frame, main.getLearnSettings(), m_selectionProvider);
}
/* (non-Javadoc)
* @see jmemorize.gui.swing.SelectionProvider.SelectionObserver
*/
public void selectionChanged(SelectionProvider source)
{
if (m_category != null)
m_category.removeObserver(this);
m_category = source.getCategory();
if (m_category != null)
m_category.addObserver(this);
updateEnablement();
}
/* (non-Javadoc)
* @see jmemorize.core.CategoryObserver
*/
public void onCardEvent(int type, Card card, Category category, int deck)
{
updateEnablement();
}
/* (non-Javadoc)
* @see jmemorize.core.CategoryObserver
*/
public void onCategoryEvent(int type, Category category)
{
updateEnablement();
}
/* (non-Javadoc)
* @see jmemorize.gui.swing.actions.AbstractSessionDisabledAction
*/
protected void updateEnablement()
{
boolean runningSession = Main.getInstance().isSessionRunning();
if (m_selectionProvider == null)
{
setEnabled(false);
return;
}
boolean hasSelectedCards = m_selectionProvider.getSelectedCards() != null &&
!m_selectionProvider.getSelectedCards().isEmpty();
boolean hasLearnableCards = m_selectionProvider.getCategory() != null &&
!m_selectionProvider.getCategory().getLearnableCards().isEmpty();
setEnabled(!runningSession && (hasLearnableCards || hasSelectedCards));
}
private void setValues()
{
setName(Localization.get(LC.LEARN));
setDescription(Localization.get(LC.LEARN_DESC));
setIcon("/resource/icons/learn.gif"); //$NON-NLS-1$
setAccelerator(KeyEvent.VK_L, SHORTCUT_KEY);
setMnemonic(1);
}
}