/*
* This file is part of muCommander, http://www.mucommander.com
* Copyright (C) 2002-2016 Maxence Bernard
*
* muCommander 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 3 of the License, or
* (at your option) any later version.
*
* muCommander 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, see <http://www.gnu.org/licenses/>.
*/
package com.mucommander.ui.action.impl;
import java.awt.event.KeyEvent;
import java.util.List;
import java.util.Map;
import javax.swing.KeyStroke;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.mucommander.text.Translator;
import com.mucommander.ui.action.AbstractActionDescriptor;
import com.mucommander.ui.action.ActionCategory;
import com.mucommander.ui.action.ActionCategory;
import com.mucommander.ui.action.ActionDescriptor;
import com.mucommander.ui.action.ActionFactory;
import com.mucommander.ui.action.MuAction;
import com.mucommander.ui.main.MainFrame;
import com.mucommander.ui.main.WindowManager;
/**
* Brings a {@link MainFrame} window to the front. This action operates on a specific window number specified in the
* constructor, either as a constructor parameter, or in the {@link #WINDOW_NUMBER_PROPERTY_KEY} property.
*
* @see com.mucommander.ui.main.WindowManager
* @author Maxence Bernard
*/
public class RecallWindowAction extends MuAction {
private static final Logger LOGGER = LoggerFactory.getLogger(RecallWindowAction.class);
/** Window number this action operates on */
private int windowNumber;
/** Key of the property that holds the window number */
public final static String WINDOW_NUMBER_PROPERTY_KEY = "window_number";
public RecallWindowAction(MainFrame mainFrame, Map<String,Object> properties) {
super(mainFrame, properties);
Object windowNumberValue = getValue(WINDOW_NUMBER_PROPERTY_KEY);
if(windowNumberValue==null || !(windowNumberValue instanceof String))
throw new IllegalArgumentException(WINDOW_NUMBER_PROPERTY_KEY+" ("+windowNumberValue+")");
windowNumber = Integer.parseInt((String)windowNumberValue);
if(windowNumber<=0)
throw new IllegalArgumentException(WINDOW_NUMBER_PROPERTY_KEY+" ("+windowNumberValue+")");
}
public RecallWindowAction(MainFrame mainFrame, Map<String,Object> properties, int windowNumber) {
super(mainFrame, properties);
this.windowNumber = windowNumber;
if(windowNumber<=0)
throw new IllegalArgumentException("windowNumber ("+windowNumber+")");
}
@Override
public void performAction() {
List<MainFrame> mainFrames = WindowManager.getMainFrames();
// Checks that the window number currently exists
if(windowNumber<=0 || windowNumber>mainFrames.size()) {
LOGGER.debug("Window number "+windowNumber+" does not exist");
return;
}
// Brings the MainFrame to front
mainFrames.get(windowNumber-1).toFront();
}
@Override
public ActionDescriptor getDescriptor() {
return new Descriptor();
}
public static class Factory implements ActionFactory {
public MuAction createAction(MainFrame mainFrame, Map<String,Object> properties) {
return new RecallWindowAction(mainFrame, properties);
}
}
public static class Descriptor extends AbstractActionDescriptor {
public static final String ACTION_ID = "RecallWindow";
private int windowNumber;
public Descriptor() {
this(-1);
}
protected Descriptor(int windowNumber) {
this.windowNumber = windowNumber;
}
public String getId() { return ACTION_ID+(windowNumber==-1?"":""+windowNumber); }
public ActionCategory getCategory() { return ActionCategory.WINDOW; }
public KeyStroke getDefaultAltKeyStroke() { return null; }
public KeyStroke getDefaultKeyStroke() {
if(windowNumber<=0 || windowNumber>10)
return null;
return KeyStroke.getKeyStroke(Character.forDigit(windowNumber==10 ? 0 : windowNumber, 10), KeyEvent.CTRL_DOWN_MASK);
}
@Override
public String getLabel() {
return Translator.get(getLabelKey(), windowNumber==-1?"?":""+windowNumber);
}
@Override
public boolean isParameterized() {
return windowNumber==-1;
}
}
}