package jffile;
/*
* FileApp.java
*
* Created on Jan 2, 2011, 9:28:14 PM
* Modified for jfile : Mar 22, 2012
*
* @author pquiring
*/
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.datatransfer.*;
import javax.swing.*;
import javaforce.*;
import javaforce.jni.*;
import javaforce.jbus.*;
import javaforce.utils.*;
public class FileApp extends javax.swing.JFrame implements KeyEventDispatcher, AWTEventListener {
public static String version = "0.7";
/**
* Creates new form FileApp
*/
public FileApp() {
initComponents();
setPosition();
This = this;
monitordir.init();
initDND();
int rid = Math.abs(new Random().nextInt());
JFLog.init(JF.getUserPath() + "/.jfile.log", true);
Settings.loadSettings();
if (Settings.settings.defaultView == JFileBrowser.VIEW_LIST) List.setSelected(true);
if (Settings.settings.defaultView == JFileBrowser.VIEW_DETAILS) Details.setSelected(true);
NetworkShares.loadShares();
if (!JF.isWindows()) {
jbusClient = new JBusClient("org.jflinux.jfile.j" + rid, new JBusMethods());
jbusClient.start();
}
localSite = new SiteDetails();
localSite.host = "localhost";
localSite.protocol = "local";
localSite.localDir = (args.length > 0 && args[0].length() > 0
? getCanonicalPath(args[0])
: JF.getUserPath());
localSite.remoteDir = JF.getUserPath();
localSite.name = "Computer";
addLocalSite();
if (args.length > 0) {
//reset for next use
localSite.localDir = JF.getUserPath();
}
listPlaces();
//install app-wide event listeners
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(this);
Toolkit.getDefaultToolkit().addAWTEventListener(this, AWTEvent.MOUSE_EVENT_MASK);
}
private String getCanonicalPath(String path) {
try {
return new File(path).getCanonicalPath();
} catch (Exception e) {
return "/";
}
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
placesMenu = new javax.swing.JPopupMenu();
unmount = new javax.swing.JMenuItem();
rename = new javax.swing.JMenuItem();
buttonGroup1 = new javax.swing.ButtonGroup();
split = new javax.swing.JSplitPane();
tabs = new javax.swing.JTabbedPane();
jScrollPane1 = new javax.swing.JScrollPane();
places = new javax.swing.JList();
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
newtLocalTab = new javax.swing.JMenuItem();
siteMgr = new javax.swing.JMenuItem();
jSeparator1 = new javax.swing.JPopupMenu.Separator();
importSites = new javax.swing.JMenuItem();
exportSites = new javax.swing.JMenuItem();
jSeparator3 = new javax.swing.JPopupMenu.Separator();
closeTab = new javax.swing.JMenuItem();
jSeparator2 = new javax.swing.JPopupMenu.Separator();
exit = new javax.swing.JMenuItem();
jMenu5 = new javax.swing.JMenu();
cut = new javax.swing.JMenuItem();
copy = new javax.swing.JMenuItem();
paste = new javax.swing.JMenuItem();
jMenu3 = new javax.swing.JMenu();
showHidden = new javax.swing.JCheckBoxMenuItem();
jSeparator4 = new javax.swing.JPopupMenu.Separator();
showLocalTree = new javax.swing.JCheckBoxMenuItem();
showRemoteSide = new javax.swing.JCheckBoxMenuItem();
showRemoteTree = new javax.swing.JCheckBoxMenuItem();
jSeparator5 = new javax.swing.JPopupMenu.Separator();
Icons = new javax.swing.JRadioButtonMenuItem();
List = new javax.swing.JRadioButtonMenuItem();
Details = new javax.swing.JRadioButtonMenuItem();
jMenu4 = new javax.swing.JMenu();
connectMapping = new javax.swing.JMenuItem();
disconnectMapping = new javax.swing.JMenuItem();
jSeparator6 = new javax.swing.JPopupMenu.Separator();
drivesMenu = new javax.swing.JMenuItem();
jSeparator7 = new javax.swing.JPopupMenu.Separator();
jMenuItem2 = new javax.swing.JMenuItem();
jSeparator8 = new javax.swing.JPopupMenu.Separator();
jMenuItem1 = new javax.swing.JMenuItem();
jMenu2 = new javax.swing.JMenu();
help = new javax.swing.JMenuItem();
about = new javax.swing.JMenuItem();
unmount.setText("unmount");
unmount.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
unmountActionPerformed(evt);
}
});
placesMenu.add(unmount);
rename.setText("Rename");
rename.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
renameActionPerformed(evt);
}
});
placesMenu.add(rename);
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("jfile");
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
formWindowClosing(evt);
}
});
addComponentListener(new java.awt.event.ComponentAdapter() {
public void componentMoved(java.awt.event.ComponentEvent evt) {
formComponentMoved(evt);
}
public void componentResized(java.awt.event.ComponentEvent evt) {
formComponentResized(evt);
}
});
addWindowStateListener(new java.awt.event.WindowStateListener() {
public void windowStateChanged(java.awt.event.WindowEvent evt) {
formWindowStateChanged(evt);
}
});
split.setResizeWeight(0.1);
tabs.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
tabsStateChanged(evt);
}
});
split.setRightComponent(tabs);
places.setModel(model);
places.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
places.setComponentPopupMenu(placesMenu);
places.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
placesValueChanged(evt);
}
});
jScrollPane1.setViewportView(places);
split.setLeftComponent(jScrollPane1);
jMenu1.setMnemonic('F');
jMenu1.setText("File");
newtLocalTab.setText("New Local Tab");
newtLocalTab.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
newtLocalTabActionPerformed(evt);
}
});
jMenu1.add(newtLocalTab);
siteMgr.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK));
siteMgr.setMnemonic('S');
siteMgr.setText("Site Manager");
siteMgr.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
siteMgrActionPerformed(evt);
}
});
jMenu1.add(siteMgr);
jMenu1.add(jSeparator1);
importSites.setMnemonic('I');
importSites.setText("Import Sites...");
importSites.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
importSitesActionPerformed(evt);
}
});
jMenu1.add(importSites);
exportSites.setMnemonic('E');
exportSites.setText("Export Sites...");
exportSites.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
exportSitesActionPerformed(evt);
}
});
jMenu1.add(exportSites);
jMenu1.add(jSeparator3);
closeTab.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_W, java.awt.event.InputEvent.CTRL_MASK));
closeTab.setMnemonic('C');
closeTab.setText("Close Site");
closeTab.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
closeTabActionPerformed(evt);
}
});
jMenu1.add(closeTab);
jMenu1.add(jSeparator2);
exit.setMnemonic('X');
exit.setText("Exit");
exit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
exitActionPerformed(evt);
}
});
jMenu1.add(exit);
jMenuBar1.add(jMenu1);
jMenu5.setMnemonic('e');
jMenu5.setText("Edit");
jMenu5.setToolTipText("");
cut.setText("Cut");
cut.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cutActionPerformed(evt);
}
});
jMenu5.add(cut);
copy.setText("Copy");
copy.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
copyActionPerformed(evt);
}
});
jMenu5.add(copy);
paste.setText("Paste");
paste.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
pasteActionPerformed(evt);
}
});
jMenu5.add(paste);
jMenuBar1.add(jMenu5);
jMenu3.setMnemonic('V');
jMenu3.setText("View");
showHidden.setSelected(true);
showHidden.setText("Show Hidden Files");
showHidden.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
showHiddenActionPerformed(evt);
}
});
jMenu3.add(showHidden);
jMenu3.add(jSeparator4);
showLocalTree.setSelected(true);
showLocalTree.setText("Local Tree");
showLocalTree.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
showLocalTreeActionPerformed(evt);
}
});
jMenu3.add(showLocalTree);
showRemoteSide.setSelected(true);
showRemoteSide.setText("Remote Side");
showRemoteSide.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
showRemoteSideActionPerformed(evt);
}
});
jMenu3.add(showRemoteSide);
showRemoteTree.setSelected(true);
showRemoteTree.setText("Remote Tree");
showRemoteTree.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
showRemoteTreeActionPerformed(evt);
}
});
jMenu3.add(showRemoteTree);
jMenu3.add(jSeparator5);
buttonGroup1.add(Icons);
Icons.setSelected(true);
Icons.setText("Icons");
Icons.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
IconsActionPerformed(evt);
}
});
jMenu3.add(Icons);
buttonGroup1.add(List);
List.setText("List");
List.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ListActionPerformed(evt);
}
});
jMenu3.add(List);
buttonGroup1.add(Details);
Details.setText("Details");
Details.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
DetailsActionPerformed(evt);
}
});
jMenu3.add(Details);
jMenuBar1.add(jMenu3);
jMenu4.setMnemonic('t');
jMenu4.setText("Tools");
connectMapping.setText("Map Network Share");
connectMapping.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
connectMappingActionPerformed(evt);
}
});
jMenu4.add(connectMapping);
disconnectMapping.setText("Disconnect Network Share");
disconnectMapping.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
disconnectMappingActionPerformed(evt);
}
});
jMenu4.add(disconnectMapping);
jMenu4.add(jSeparator6);
drivesMenu.setText("Drives");
drivesMenu.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
drivesMenuActionPerformed(evt);
}
});
jMenu4.add(drivesMenu);
jMenu4.add(jSeparator7);
jMenuItem2.setText("Connect to Server");
jMenuItem2.setToolTipText("");
jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem2ActionPerformed(evt);
}
});
jMenu4.add(jMenuItem2);
jMenu4.add(jSeparator8);
jMenuItem1.setText("Settings");
jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem1ActionPerformed(evt);
}
});
jMenu4.add(jMenuItem1);
jMenuBar1.add(jMenu4);
jMenu2.setMnemonic('H');
jMenu2.setText("Help");
help.setText("Help");
help.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
helpActionPerformed(evt);
}
});
jMenu2.add(help);
about.setMnemonic('A');
about.setText("About");
about.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
aboutActionPerformed(evt);
}
});
jMenu2.add(about);
jMenuBar1.add(jMenu2);
setJMenuBar(jMenuBar1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(split, javax.swing.GroupLayout.DEFAULT_SIZE, 577, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(split, javax.swing.GroupLayout.DEFAULT_SIZE, 445, Short.MAX_VALUE)
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void siteMgrActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_siteMgrActionPerformed
inDialog = true;
SiteDetails sdArray[] = SiteMgr.showSiteMgr(this);
inDialog = false;
if (sdArray == null) {
return;
}
for (SiteDetails sd : sdArray) {
connect(sd);
}
}//GEN-LAST:event_siteMgrActionPerformed
private void importSitesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_importSitesActionPerformed
Settings.importSettings();
}//GEN-LAST:event_importSitesActionPerformed
private void exportSitesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exportSitesActionPerformed
Settings.exportSettings();
}//GEN-LAST:event_exportSitesActionPerformed
private void aboutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_aboutActionPerformed
inDialog = true;
JF.showMessage("About", "jfile/" + version + "\nFile manager.\nBy : Peter Quiring(pquiring@jflinux.org)");
inDialog = false;
}//GEN-LAST:event_aboutActionPerformed
private void exitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exitActionPerformed
exit();
}//GEN-LAST:event_exitActionPerformed
private void closeTabActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeTabActionPerformed
closeSite();
}//GEN-LAST:event_closeTabActionPerformed
private void placesValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_placesValueChanged
gotoPlaces();
}//GEN-LAST:event_placesValueChanged
private void showLocalTreeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showLocalTreeActionPerformed
Site site = (Site)tabs.getSelectedComponent();
if (site == null) return;
site.showLocalTree = showLocalTree.isSelected();
site.buildGUI();
}//GEN-LAST:event_showLocalTreeActionPerformed
private void showRemoteSideActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showRemoteSideActionPerformed
Site site = (Site)tabs.getSelectedComponent();
if (site == null) return;
site.showRemoteSide = showRemoteSide.isSelected();
site.buildGUI();
}//GEN-LAST:event_showRemoteSideActionPerformed
private void showRemoteTreeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showRemoteTreeActionPerformed
Site site = (Site)tabs.getSelectedComponent();
if (site == null) return;
site.showRemoteTree = showRemoteTree.isSelected();
site.buildGUI();
}//GEN-LAST:event_showRemoteTreeActionPerformed
private void tabsStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_tabsStateChanged
Site site = (Site)tabs.getSelectedComponent();
if (site == null) return;
showLocalTree.setSelected(site.showLocalTree);
showRemoteSide.setSelected(site.showRemoteSide);
showRemoteTree.setSelected(site.showRemoteTree);
showHidden.setSelected(site.showHidden);
Icons.setSelected(site.view == JFileBrowser.VIEW_ICONS);
List.setSelected(site.view == JFileBrowser.VIEW_LIST);
Details.setSelected(site.view == JFileBrowser.VIEW_DETAILS);
}//GEN-LAST:event_tabsStateChanged
private void unmountActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_unmountActionPerformed
int idx = places.getSelectedIndex();
if (idx <= 8) return;
String path = placesPath.get(idx);
if (!path.startsWith("/media/")) return;
JFLog.log("umount: " + path);
jbusClient.call("org.jflinux.jfsystemmgr", "umount", "\"" + path + "\"");
}//GEN-LAST:event_unmountActionPerformed
private void showHiddenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showHiddenActionPerformed
Site site = (Site)tabs.getSelectedComponent();
if (site == null) return;
site.showHidden = showHidden.isSelected();
site.local_ls();
site.remote_ls();
}//GEN-LAST:event_showHiddenActionPerformed
private void newtLocalTabActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newtLocalTabActionPerformed
addLocalSite();
}//GEN-LAST:event_newtLocalTabActionPerformed
private void helpActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_helpActionPerformed
try {
Runtime.getRuntime().exec("jhelp jfile");
} catch (Exception e) {
JFLog.log(e);
}
}//GEN-LAST:event_helpActionPerformed
private void renameActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_renameActionPerformed
int idx = places.getSelectedIndex();
if (idx <= 8) return;
String path = placesPath.get(idx);
if (!path.startsWith("/media/"));
renameDevice(path.substring(path.lastIndexOf('/')+1));
listPlaces();
}//GEN-LAST:event_renameActionPerformed
private void connectMappingActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_connectMappingActionPerformed
FileApp.inDialog = true;
MapNetworkShareDialog dialog = new MapNetworkShareDialog(null, true);
dialog.setVisible(true);
FileApp.inDialog = false;
listPlaces();
}//GEN-LAST:event_connectMappingActionPerformed
private void disconnectMappingActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_disconnectMappingActionPerformed
FileApp.inDialog = true;
UnmapNetworkShareDialog dialog = new UnmapNetworkShareDialog(null, true);
dialog.setVisible(true);
FileApp.inDialog = false;
listPlaces();
}//GEN-LAST:event_disconnectMappingActionPerformed
private void formComponentMoved(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentMoved
if (Settings.settings.bWindowMax) return;
Point loc = getLocation();
Settings.settings.WindowXPos = loc.x;
Settings.settings.WindowYPos = loc.y;
}//GEN-LAST:event_formComponentMoved
private void formComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentResized
if (Settings.settings.bWindowMax) return;
Dimension size = getSize();
Settings.settings.WindowXSize = size.width;
Settings.settings.WindowYSize = size.height;
}//GEN-LAST:event_formComponentResized
private void formWindowStateChanged(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowStateChanged
Settings.settings.bWindowMax = evt.getNewState() == MAXIMIZED_BOTH;
}//GEN-LAST:event_formWindowStateChanged
private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing
Settings.saveSettings();
if (jbusClient != null) jbusClient.close();
closeTabs();
KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventDispatcher(this);
Toolkit.getDefaultToolkit().removeAWTEventListener(this);
System.exit(0);
}//GEN-LAST:event_formWindowClosing
private void IconsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_IconsActionPerformed
Site site = (Site)tabs.getSelectedComponent();
if (site == null) return;
site.setView(JFileBrowser.VIEW_ICONS);
}//GEN-LAST:event_IconsActionPerformed
private void ListActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ListActionPerformed
Site site = (Site)tabs.getSelectedComponent();
if (site == null) return;
site.setView(JFileBrowser.VIEW_LIST);
}//GEN-LAST:event_ListActionPerformed
private void DetailsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_DetailsActionPerformed
Site site = (Site)tabs.getSelectedComponent();
if (site == null) return;
site.setView(JFileBrowser.VIEW_DETAILS);
}//GEN-LAST:event_DetailsActionPerformed
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed
EditSettings dialog = new EditSettings(null, true);
inDialog = true;
dialog.setVisible(true);
inDialog = false;
}//GEN-LAST:event_jMenuItem1ActionPerformed
private void drivesMenuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_drivesMenuActionPerformed
drives = new Drives(null, true, jbusClient);
inDialog = true;
drives.setVisible(true);
inDialog = false;
drives = null;
}//GEN-LAST:event_drivesMenuActionPerformed
private void copyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_copyActionPerformed
Site site = (Site)tabs.getSelectedComponent();
if (site == null) return;
if (!site.isFocusBrowser()) return;
site.getFocusBrowser().copy();
}//GEN-LAST:event_copyActionPerformed
private void cutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cutActionPerformed
Site site = (Site)tabs.getSelectedComponent();
if (site == null) return;
if (!site.isFocusBrowser()) return;
site.getFocusBrowser().cut();
}//GEN-LAST:event_cutActionPerformed
private void pasteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pasteActionPerformed
Site site = (Site)tabs.getSelectedComponent();
if (site == null) return;
if (!site.isFocusBrowser()) return;
site.getFocusBrowser().paste();
}//GEN-LAST:event_pasteActionPerformed
private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem2ActionPerformed
quick_connect();
}//GEN-LAST:event_jMenuItem2ActionPerformed
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
if (System.getenv("JID") == null && !JF.isWindows()) {
//avoid future headaches
JF.showError("Error", "Failed to connect to JBus");
return;
}
if (args == null) args = new String[0];
FileApp.args = args;
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new FileApp().setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JRadioButtonMenuItem Details;
private javax.swing.JRadioButtonMenuItem Icons;
private javax.swing.JRadioButtonMenuItem List;
private javax.swing.JMenuItem about;
private javax.swing.ButtonGroup buttonGroup1;
private javax.swing.JMenuItem closeTab;
private javax.swing.JMenuItem connectMapping;
private javax.swing.JMenuItem copy;
private javax.swing.JMenuItem cut;
private javax.swing.JMenuItem disconnectMapping;
private javax.swing.JMenuItem drivesMenu;
private javax.swing.JMenuItem exit;
private javax.swing.JMenuItem exportSites;
private javax.swing.JMenuItem help;
private javax.swing.JMenuItem importSites;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenu jMenu2;
private javax.swing.JMenu jMenu3;
private javax.swing.JMenu jMenu4;
private javax.swing.JMenu jMenu5;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem jMenuItem1;
private javax.swing.JMenuItem jMenuItem2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JPopupMenu.Separator jSeparator1;
private javax.swing.JPopupMenu.Separator jSeparator2;
private javax.swing.JPopupMenu.Separator jSeparator3;
private javax.swing.JPopupMenu.Separator jSeparator4;
private javax.swing.JPopupMenu.Separator jSeparator5;
private javax.swing.JPopupMenu.Separator jSeparator6;
private javax.swing.JPopupMenu.Separator jSeparator7;
private javax.swing.JPopupMenu.Separator jSeparator8;
private javax.swing.JMenuItem newtLocalTab;
private javax.swing.JMenuItem paste;
private javax.swing.JList places;
private javax.swing.JPopupMenu placesMenu;
private javax.swing.JMenuItem rename;
private javax.swing.JCheckBoxMenuItem showHidden;
private javax.swing.JCheckBoxMenuItem showLocalTree;
private javax.swing.JCheckBoxMenuItem showRemoteSide;
private javax.swing.JCheckBoxMenuItem showRemoteTree;
private javax.swing.JMenuItem siteMgr;
private javax.swing.JSplitPane split;
private javax.swing.JTabbedPane tabs;
private javax.swing.JMenuItem unmount;
// End of variables declaration//GEN-END:variables
private SiteDetails localSite;
private static String[] args;
private DefaultListModel model = new DefaultListModel();
public static JBusClient jbusClient;
public static FileApp This;
private Drives drives;
public void connect(SiteDetails sd) {
File localDir = new File(sd.localDir);
if (!localDir.exists() || !localDir.isDirectory()) {
JF.showError("Error", "Can not find:" + sd.localDir);
return;
}
Site site = null;
site = new Site();
site.putClientProperty("tabs", tabs);
tabs.addTab(sd.name, site);
tabs.doLayout();
site.init(sd.localDir, sd.protocol.equals("local"));
tabs.setSelectedComponent(site);
JFTask task = new JFTask() {
private Site site;
private SiteDetails sd;
public boolean work() {
site = (Site)this.getProperty("site");
sd = (SiteDetails)this.getProperty("sd");
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
if (!site.connect(sd)) {
closeSite(site);
JF.showError("Error", "Failed to connect");
}
}
});
return true;
}
};
task.setProperty("site", site);
task.setProperty("sd", sd);
task.start();
site.requestFocus();
}
public void exit() {
dispose();
}
public void closeSite() {
try {
Site site = (Site) tabs.getSelectedComponent();
if (site == null) {
return;
}
site.disconnect();
tabs.remove(site);
if (tabs.getTabCount() == 0) {
addLocalSite();
}
} catch (Exception e) {
JFLog.log(e);
}
}
public void closeSite(Site site) {
try {
site.disconnect();
tabs.remove(site);
if (tabs.getTabCount() == 0) {
addLocalSite();
}
} catch (Exception e) {
JFLog.log(e);
}
}
public void addLocalSite() {
connect(localSite);
listPlaces();
}
private ArrayList<String> placesPath = new ArrayList<String>();
public void listPlaces() {
String home = JF.getUserPath();
model.clear();
placesPath.clear();
model.addElement("Home");
placesPath.add(home);
model.addElement("Desktop");
placesPath.add(home + "/Desktop");
model.addElement("Documents");
placesPath.add(home + "/Documents");
model.addElement("Downloads");
placesPath.add(home + "/Downloads");
model.addElement("Music");
placesPath.add(home + "/Music");
model.addElement("Pictures");
placesPath.add(home + "/Pictures");
model.addElement("Videos");
placesPath.add(home + "/Videos");
model.addElement("File System");
placesPath.add("/");
model.addElement("Trash");
placesPath.add(home + "/.local/share/Trash");
File file = new File("/media");
if (file.exists()) {
File media[] = file.listFiles();
for(int a=0;a<media.length;a++) {
model.addElement(media[a].getName());
placesPath.add(media[a].getAbsolutePath());
}
}
Mappings.loadMaps();
Mappings.Maps maps = Mappings.getMaps();
for(int a=0;a<maps.map.length;a++) {
String mount = maps.map[a].mount;
String uri = maps.map[a].uri;
int idx = uri.lastIndexOf('/');
if (idx == -1) idx = 0; else idx++;
model.addElement(uri.substring(idx));
placesPath.add(mount);
}
}
private void gotoPlaces() {
int idx = places.getSelectedIndex();
if (idx == -1) return;
Site site = (Site)tabs.getSelectedComponent();
if (site == null) return;
site.local_chdir(placesPath.get(idx));
}
private void delete() {
Site site = (Site)tabs.getSelectedComponent();
if (site == null) return;
JComponent focus = (JComponent)getFocusOwner();
String focusName = focus.getName();
if (focusName == null) return;
if (focusName.equals("localFiles")) {
site.local_delete();
} else if (focusName.equals("remoteFiles")) {
site.remote_delete();
}
}
private void rename() {
int idx = tabs.getSelectedIndex();
System.out.println("rename:" + idx);
if (idx == -1) return;
Site site = (Site)tabs.getSelectedComponent();
if (site == null) return;
JComponent focus = (JComponent)getFocusOwner();
System.out.println("focus=" + focus.getName());
String focusName = focus.getName();
if (focusName == null) return;
if (focusName.equals("localFiles")) {
site.local_rename();
} else if (focusName.equals("remoteFiles")) {
site.remote_rename();
}
}
private void open() {
int idx = tabs.getSelectedIndex();
if (idx == -1) return;
Site site = (Site)tabs.getSelectedComponent();
if (site == null) return;
JComponent focus = (JComponent)getFocusOwner();
String focusName = focus.getName();
if (focusName == null) return;
if (focusName.equals("localFiles")) {
site.local_open("open");
} else if (focusName.equals("remoteFiles")) {
site.remote_open("open");
}
}
SearchWindow searchWindow;
String searchString;
private void search(char ch) {
if ((ch == 8) && ((searchString == null) || (searchString.length() == 0))) return;
int idx = tabs.getSelectedIndex();
if (idx == -1) return;
Site site = (Site)tabs.getSelectedComponent();
if (site == null) return;
JComponent focus = (JComponent)getFocusOwner();
if (focus == null) return;
String focusName = focus.getName();
if (focusName == null) return;
if (searchWindow == null) {
Point p = null;
if (focusName.equals("localFiles")) {
p = site.getLocalLocation();
} else if (focusName.equals("remoteFiles")) {
p = site.getRemoteLocation();
}
if (p == null) return;
searchWindow = new SearchWindow(null);
searchWindow.setLocation(p);
searchWindow.setVisible(true);
}
//System.out.println("search:"+(int)ch);
if (ch == 8) {
searchString = searchString.substring(0, searchString.length()-1);
} else {
if (searchString == null) searchString = "" + ch; else searchString += ch;
}
searchWindow.setText(searchString);
boolean found = false;
if (focusName.equals("localFiles")) {
found = site.searchLocal(searchString.toLowerCase());
} else if (focusName.equals("remoteFiles")) {
found = site.searchRemote(searchString.toLowerCase());
}
searchWindow.setColor(found ? Color.white : Color.red);
}
private void hideSearch() {
if (searchWindow == null) return;
//System.out.println("hide");
searchWindow.setVisible(false);
searchWindow.dispose();
searchWindow = null;
searchString = null;
}
public static boolean inDialog = false;
public boolean dispatchKeyEvent(KeyEvent e) {
if (inDialog) return false;
int id = e.getID();
char ch = e.getKeyChar();
int cc = e.getKeyCode();
int mod = e.getModifiers();
// JFLog.log("keyEvent:" + mod + "," + (char)cc + "," + getFocusOwner());
if (mod == KeyEvent.CTRL_MASK) {
switch (id) {
case KeyEvent.KEY_TYPED:
switch (cc) {
case KeyEvent.VK_L: quick_connect(); break;
}
break;
case KeyEvent.KEY_PRESSED:
break;
case KeyEvent.KEY_RELEASED:
break;
}
}
if (mod != 0) return false;
Site site = (Site)tabs.getSelectedComponent();
if (site == null) return false;
if (!site.isFocusBrowser()) return false;
switch (id) {
case KeyEvent.KEY_TYPED:
if ((ch >= KeyEvent.VK_SPACE) && (ch != KeyEvent.VK_DELETE)) search(ch);
if (ch == KeyEvent.VK_BACK_SPACE) search(ch);
break;
case KeyEvent.KEY_PRESSED:
switch (cc) {
case KeyEvent.VK_DELETE: delete(); break;
case KeyEvent.VK_F2: rename(); break;
case KeyEvent.VK_ESCAPE: hideSearch(); break;
case KeyEvent.VK_ENTER: hideSearch(); open(); break;
case KeyEvent.VK_BACK_SPACE: cdup(); break;
}
break;
case KeyEvent.KEY_RELEASED:
break;
}
return false;
}
public void eventDispatched(AWTEvent event) {
//hide search on any mouse events
hideSearch();
}
private void setPosition() {
setSize(Settings.settings.WindowXSize, Settings.settings.WindowYSize);
setLocation(Settings.settings.WindowXPos, Settings.settings.WindowYPos);
if (Settings.settings.bWindowMax) setExtendedState(MAXIMIZED_BOTH);
}
private void renameDevice(String name) {
inDialog = true;
String newName = JF.getString("Enter a new name", name);
inDialog = false;
if (newName == null) return;
jbusClient.call("org.jflinux.jfsystemmgr", "renameDevice", "\"" + name + "\",\"" + newName + "\"");
}
private void closeTabs() {
int cnt = tabs.getComponentCount();
for(int a=0;a<cnt;a++) {
Site site = (Site)tabs.getComponentAt(a);
site.disconnect();
}
}
private void initDND() {
places.setTransferHandler(new TransferHandler() {
public boolean canImport(TransferHandler.TransferSupport info) {
// we only import Files
if (!info.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
return false;
}
// DropLocation dl = (DropLocation) info.getDropLocation();
// Point pt = dl.getDropPoint();
return true;
}
public boolean importData(TransferHandler.TransferSupport info) {
if (!info.isDrop()) {
return false;
}
// Check for file flavor
if (!info.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
return false;
}
// DropLocation dl = info.getDropLocation();
// Point pt = dl.getDropPoint();
// JComponent c = (JComponent)places.getComponentAt(pt);
int idx = places.getSelectedIndex();
if (idx == -1) return false;
String folder = placesPath.get(idx);
// Get the file(s) that are being dropped.
Transferable t = info.getTransferable();
java.util.List<File> data;
try {
data = (java.util.List<File>) t.getTransferData(DataFlavor.javaFileListFlavor);
} catch (Exception e) {
return false;
}
// Perform the actual import.
ArrayList<String> cmd = new ArrayList<String>();
boolean move = false;
boolean copy = false;
String fn;
for(int a=0;a<data.size();a++) {
switch (info.getDropAction()) {
case COPY:
if (move) return false; //Can that happen?
copy = true;
fn = ((File)data.get(a)).getAbsolutePath();
cmd.add(fn);
break;
case MOVE:
if (copy) return false; //Can that happen?
move = true;
cmd.add(((File)data.get(a)).getAbsolutePath());
break;
case LINK:
return false; //BUG : not supported : ???
}
}
if (cmd.isEmpty()) return false;
if (copy) {
cmd.add(0, "jcp");
} else if (move) {
cmd.add(0, "jmv");
} else {
return false;
}
cmd.add(folder);
JFileBrowser browser = null;
Site site = (Site)tabs.getSelectedComponent();
if (site != null) {
browser = site.localBrowser;
}
JFileBrowser.runCmd(browser, cmd.toArray(new String[0]));
return true;
}
public int getSourceActions(JComponent c) {
return COPY_OR_MOVE;
}
protected Transferable createTransferable(JComponent c) {
return null;
}
protected void exportDone(JComponent source, Transferable data, int action) {
}
});
}
private void cdup() {
Site site = (Site)tabs.getSelectedComponent();
if (site == null) return;
if (site.getFocusBrowser() == site.remoteBrowser) {
site.remote_cdup();
} else {
site.local_cdup();
}
}
private void quick_connect() {
QuickConnect dialog = new QuickConnect(this, true);
dialog.setVisible(true);
if (!dialog.accepted) return;
SiteDetails sd = dialog.getDetails();
connect(sd);
}
public class JBusMethods {
public void rescanMedia() {
//a request to rename a device label has succeeded
//or umount() succeeded
//or autoMounter mounted something
//etc.
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
listPlaces();
if (drives != null) {
drives.rescan();
}
for(int a=0;a<tabs.getTabCount();a++) {
Site site = (Site)tabs.getTabComponentAt(a);
site.rescan();
}
}
});
}
public void storageInfo(String dev, String volName, String fsType, String mountPt) {
if (drives == null) return;
drives.storageInfo(dev, volName, fsType, mountPt);
}
public void getFileSelection(String fs) {
//call paste in JFileBrowser
if (fs == null) return;
int idx = tabs.getSelectedIndex();
if (idx == -1) return;
Site site = (Site)tabs.getSelectedComponent();
if (site == null) return;
site.getFocusBrowser().paste(JBusClient.decodeString(fs));
}
}
}