/* * Copyright 2012 jMethods, Inc. * * 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 com.myjavaworld.jftp; import java.awt.Desktop; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.util.ResourceBundle; import javax.swing.KeyStroke; import javax.swing.event.MenuEvent; import javax.swing.event.MenuListener; import com.myjavaworld.gui.GUIUtil; import com.myjavaworld.gui.MMenu; import com.myjavaworld.gui.MMenuItem; import com.myjavaworld.jftp.actions.ChangeLocalDirectoryAction; import com.myjavaworld.jftp.actions.DeleteLocalFileAction; import com.myjavaworld.jftp.actions.EditLocalFileAction; import com.myjavaworld.jftp.actions.NewLocalDirectoryAction; import com.myjavaworld.jftp.actions.NewLocalFileAction; import com.myjavaworld.jftp.actions.OpenLocalFileAction; import com.myjavaworld.jftp.actions.PrintLocalFileAction; import com.myjavaworld.jftp.actions.RenameLocalFileAction; import com.myjavaworld.util.ResourceLoader; /** * Local System Menu. * * @author Sai Pullabhotla, psai [at] jMethods [dot] com * @version 2.0 */ public class LocalSystemMenu extends MMenu implements MenuListener { private static final ResourceBundle resources = ResourceLoader .getBundle("com.myjavaworld.jftp.LocalSystemMenu"); private static final ResourceBundle ftpMenuResources = ResourceLoader .getBundle("com.myjavaworld.jftp.FTPMenu"); private JFTP jftp = null; private MMenuItem miOpenFile = null; private MMenuItem miEditFile = null; private MMenuItem miPrintFile = null; private MMenu menuNew = null; private MMenuItem miFile = null; private MMenuItem miDirectory = null; private MMenuItem miChangeDirectory = null; private MMenuItem miRename = null; private MMenuItem miDelete = null; private MMenuItem miApplyFilter = null; private MMenuItem miClearFilter = null; private MMenuItem miRefresh = null; private MMenuItem miProperties = null; private MMenuItem miSelectAll = null; private MMenuItem miInvertSelection = null; private boolean openSupported = false; private boolean editSupported = false; private boolean printSupported = false; public LocalSystemMenu(JFTP jftp) { super(); this.jftp = jftp; if (Desktop.isDesktopSupported()) { Desktop desktop = Desktop.getDesktop(); openSupported = desktop.isSupported(Desktop.Action.OPEN); editSupported = desktop.isSupported(Desktop.Action.EDIT); printSupported = desktop.isSupported(Desktop.Action.PRINT); } setText(resources.getString("text.localSystem")); setMnemonic(resources.getString("mnemonic.localSystem"), resources.getString("mnemonicIndex.localSystem")); prepareMenuItems(); addMenuListener(this); } private void prepareMenuItems() { miOpenFile = new MMenuItem(); miOpenFile.setText(resources.getString("text.open")); miOpenFile.setActionCommand("cmd.openLocalFile"); miOpenFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, GUIUtil.ACCELERATOR_MASK + InputEvent.SHIFT_MASK)); miOpenFile.setMnemonic(resources.getString("mnemonic.open"), resources.getString("mnemonicIndex.open")); miOpenFile.addActionListener(OpenLocalFileAction.getInstance(jftp)); add(miOpenFile); miEditFile = new MMenuItem(); miEditFile.setText(resources.getString("text.edit")); miEditFile.setActionCommand("cmd.editLocalFile"); miEditFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, GUIUtil.ACCELERATOR_MASK + InputEvent.SHIFT_MASK)); miEditFile.setMnemonic(resources.getString("mnemonic.edit"), resources.getString("mnemonicIndex.edit")); miEditFile.addActionListener(EditLocalFileAction.getInstance(jftp)); add(miEditFile); miPrintFile = new MMenuItem(); miPrintFile.setText(resources.getString("text.print")); miPrintFile.setActionCommand("cmd.printLocalFile"); miPrintFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, GUIUtil.ACCELERATOR_MASK + InputEvent.SHIFT_MASK)); miPrintFile.setMnemonic(resources.getString("mnemonic.print"), resources.getString("mnemonicIndex.print")); miPrintFile.addActionListener(PrintLocalFileAction.getInstance(jftp)); add(miPrintFile); addSeparator(); menuNew = new MMenu(resources.getString("text.new"), true); menuNew.setMnemonic(resources.getString("mnemonic.new"), resources.getString("mnemonicIndex.new")); add(menuNew); miFile = new MMenuItem(); miFile.setText(resources.getString("text.file")); miFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, GUIUtil.ACCELERATOR_MASK + InputEvent.SHIFT_MASK)); miFile.setMnemonic(resources.getString("mnemonic.file"), resources.getString("mnemonicIndex.file")); miFile.addActionListener(NewLocalFileAction.getInstance(jftp)); menuNew.add(miFile); miDirectory = new MMenuItem(); miDirectory.setText(resources.getString("text.directory")); miDirectory.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, GUIUtil.ACCELERATOR_MASK + InputEvent.SHIFT_MASK)); miDirectory.setMnemonic(resources.getString("mnemonic.directory"), resources.getString("mnemonicIndex.directory")); miDirectory .addActionListener(NewLocalDirectoryAction.getInstance(jftp)); menuNew.add(miDirectory); miChangeDirectory = new MMenuItem(); miChangeDirectory.setText(resources.getString("text.changeDirectory")); miChangeDirectory.setMnemonic( resources.getString("mnemonic.changeDirectory"), resources.getString("mnemonicIndex.changeDirectory")); miChangeDirectory.addActionListener(ChangeLocalDirectoryAction .getInstance(jftp)); add(miChangeDirectory); miRename = new MMenuItem(); miRename.setText(resources.getString("text.rename")); miRename.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R, GUIUtil.ACCELERATOR_MASK + InputEvent.SHIFT_MASK)); miRename.setMnemonic(resources.getString("mnemonic.rename"), resources.getString("mnemonicIndex.rename")); miRename.addActionListener(RenameLocalFileAction.getInstance(jftp)); add(miRename); miDelete = new MMenuItem(); miDelete.setText(resources.getString("text.delete")); miDelete.setAccelerator(KeyStroke.getKeyStroke(GUIUtil.getDeleteKey(), GUIUtil.ACCELERATOR_MASK + InputEvent.SHIFT_MASK)); miDelete.setMnemonic(resources.getString("mnemonic.delete"), resources.getString("mnemonicIndex.delete")); miDelete.addActionListener(DeleteLocalFileAction.getInstance(jftp)); add(miDelete); addSeparator(); miApplyFilter = new MMenuItem(); miApplyFilter.setText(resources.getString("text.applyFilter")); miApplyFilter.setMnemonic(resources.getString("mnemonic.applyFilter"), resources.getString("mnemonicIndex.applyFilter")); miApplyFilter.setActionCommand("cmd.applyLocalFileFilter"); miApplyFilter.addActionListener(jftp); add(miApplyFilter); miClearFilter = new MMenuItem(); miClearFilter.setText(resources.getString("text.clearFilter")); miClearFilter.setMnemonic(resources.getString("mnemonic.clearFilter"), resources.getString("mnemonicIndex.clearFilter")); miClearFilter.setActionCommand("cmd.clearLocalFileFilter"); miClearFilter.addActionListener(jftp); add(miClearFilter); addSeparator(); miRefresh = new MMenuItem(); miRefresh.setText(resources.getString("text.refresh")); miRefresh.setMnemonic(resources.getString("mnemonic.refresh"), resources.getString("mnemonicIndex.refresh")); miRefresh.setActionCommand("cmd.refreshLocalPane"); miRefresh.addActionListener(jftp); miRefresh.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5, GUIUtil.ACCELERATOR_MASK + InputEvent.SHIFT_MASK)); add(miRefresh); addSeparator(); miProperties = new MMenuItem(); miProperties.setText(resources.getString("text.properties")); miProperties.setMnemonic(resources.getString("mnemonic.properties"), resources.getString("mnemonicIndex.properties")); miProperties.setActionCommand("cmd.localFileProperties"); miProperties.addActionListener(jftp); miProperties.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_I, GUIUtil.ACCELERATOR_MASK + InputEvent.SHIFT_MASK)); add(miProperties); addSeparator(); miSelectAll = new MMenuItem(); miSelectAll.setText(resources.getString("text.selectAll")); miSelectAll.setMnemonic(resources.getString("mnemonic.selectAll"), resources.getString("mnemonicIndex.selectAll")); miSelectAll.setActionCommand("cmd.localSelectAll"); miSelectAll.addActionListener(jftp); add(miSelectAll); miInvertSelection = new MMenuItem(); miInvertSelection.setText(resources.getString("text.invertSelection")); miInvertSelection.setMnemonic( resources.getString("mnemonic.invertSelection"), resources.getString("mnemonicIndex.invertSelection")); miInvertSelection.setActionCommand("cmd.localInvertSelection"); miInvertSelection.addActionListener(jftp); add(miInvertSelection); } public void menuCanceled(MenuEvent menuEvent) { miOpenFile.setEnabled(true); miEditFile.setEnabled(true); miPrintFile.setEnabled(true); menuNew.setEnabled(true); miChangeDirectory.setEnabled(true); miRename.setEnabled(true); miDelete.setEnabled(true); miApplyFilter.setEnabled(true); miClearFilter.setEnabled(true); miRefresh.setEnabled(true); miProperties.setEnabled(true); miSelectAll.setEnabled(true); miInvertSelection.setEnabled(true); } public void menuDeselected(MenuEvent menuEvent) { miOpenFile.setEnabled(true); miEditFile.setEnabled(true); miPrintFile.setEnabled(true); menuNew.setEnabled(true); miChangeDirectory.setEnabled(true); miRename.setEnabled(true); miDelete.setEnabled(true); miApplyFilter.setEnabled(true); miClearFilter.setEnabled(true); miRefresh.setEnabled(true); miProperties.setEnabled(true); miSelectAll.setEnabled(true); miInvertSelection.setEnabled(true); } public void menuSelected(MenuEvent menuEvent) { FTPSession session = jftp.getCurrentSession(); boolean nullSession = session == null; boolean connected = !nullSession && session.isConnected(); int selectionCount = 0; boolean isFile = false; if (!nullSession) { selectionCount = session.getLocalFileSelectionCount(); if (selectionCount == 1) { LocalFile selectedFile = session.getSelectedLocalFile(); isFile = selectedFile.isFile(); } } if (isFile) { miOpenFile.setEnabled(!nullSession && selectionCount == 1 && openSupported); } else { miOpenFile.setEnabled(!nullSession && selectionCount == 1); } miEditFile.setEnabled(!nullSession && selectionCount == 1 && isFile && editSupported); miPrintFile.setEnabled(!nullSession && selectionCount == 1 && isFile && printSupported); menuNew.setEnabled(!nullSession); miChangeDirectory.setEnabled(!nullSession); miRename.setEnabled(!nullSession && selectionCount == 1); miDelete.setEnabled(!nullSession && selectionCount > 0); miApplyFilter.setEnabled(!nullSession); miClearFilter.setEnabled(!nullSession && session.getLocalFileFilter() != null); miRefresh.setEnabled(!nullSession); miProperties.setEnabled(!nullSession && selectionCount == 1); miSelectAll.setEnabled(!nullSession); miInvertSelection.setEnabled(!nullSession); } }