|
What this is
Other links
The source code/* * InstallPanel.java - For installing plugins * :tabSize=8:indentSize=8:noTabs=false: * :folding=explicit:collapseFolds=1: * * Copyright (C) 2002 Kris Kopicki * * 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 2 * of the License, or 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package org.gjt.sp.jedit.pluginmgr; //{{{ Imports import javax.swing.border.*; import javax.swing.event.*; import javax.swing.table.*; import javax.swing.*; import java.awt.event.*; import java.awt.*; import java.text.NumberFormat; import java.util.*; import org.gjt.sp.jedit.gui.*; import org.gjt.sp.jedit.io.VFSManager; import org.gjt.sp.jedit.*; import org.gjt.sp.util.Log; //}}} class InstallPanel extends JPanel { //{{{ InstallPanel constructor InstallPanel(PluginManager window, boolean updates) { super(new BorderLayout(12,12)); this.window = window; this.updates = updates; setBorder(new EmptyBorder(12,12,12,12)); final JSplitPane split = new JSplitPane( JSplitPane.VERTICAL_SPLIT,true); /* Setup the table */ table = new JTable(pluginModel = new PluginTableModel()); table.setShowGrid(false); table.setIntercellSpacing(new Dimension(0,0)); table.setRowHeight(table.getRowHeight() + 2); table.setPreferredScrollableViewportSize(new Dimension(500,200)); table.setRequestFocusEnabled(false); table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION); table.setDefaultRenderer(Object.class, new TextRenderer( (DefaultTableCellRenderer)table.getDefaultRenderer(Object.class))); TableColumn col1 = table.getColumnModel().getColumn(0); TableColumn col2 = table.getColumnModel().getColumn(1); TableColumn col3 = table.getColumnModel().getColumn(2); TableColumn col4 = table.getColumnModel().getColumn(3); TableColumn col5 = table.getColumnModel().getColumn(4); col1.setPreferredWidth(30); col1.setMinWidth(30); col1.setMaxWidth(30); col1.setResizable(false); col2.setPreferredWidth(180); col3.setPreferredWidth(130); col4.setPreferredWidth(70); col5.setPreferredWidth(70); JTableHeader header = table.getTableHeader(); header.setReorderingAllowed(false); header.addMouseListener(new HeaderMouseHandler()); JScrollPane scrollpane = new JScrollPane(table); scrollpane.getViewport().setBackground(table.getBackground()); split.setTopComponent(scrollpane); /* Create description */ JScrollPane infoPane = new JScrollPane( infoBox = new PluginInfoBox()); infoPane.setPreferredSize(new Dimension(500,100)); split.setBottomComponent(infoPane); SwingUtilities.invokeLater(new Runnable() { public void run() { split.setDividerLocation(0.75); } }); add(BorderLayout.CENTER,split); /* Create buttons */ Box buttons = new Box(BoxLayout.X_AXIS); buttons.add(new InstallButton()); buttons.add(Box.createHorizontalStrut(12)); buttons.add(new SelectallButton()); buttons.add(Box.createGlue()); buttons.add(new SizeLabel()); add(BorderLayout.SOUTH,buttons); } //}}} //{{{ updateModel() method public void updateModel() { pluginModel.clear(); infoBox.setText(jEdit.getProperty("plugin-manager.list-download")); VFSManager.runInAWTThread(new Runnable() { public void run() { infoBox.setText(null); pluginModel.update(); } }); } //}}} //{{{ Private members //{{{ Variables private JTable table; private PluginTableModel pluginModel; private PluginManager window; private PluginInfoBox infoBox; private boolean updates; //}}} //{{{ formatSize() method private String formatSize(int size) { NumberFormat df = NumberFormat.getInstance(); df.setMaximumFractionDigits(1); df.setMinimumFractionDigits(0); String sizeText; if (size < 1048576) sizeText = size/1024 + "KB"; else sizeText = df.format(size/1048576d) + "MB"; return sizeText; } //}}} //}}} //{{{ Inner classes //{{{ PluginTableModel class class PluginTableModel extends AbstractTableModel { private ArrayList entries = new ArrayList(); private int sortType = EntryCompare.CATEGORY; //{{{ getColumnClass() method public Class getColumnClass(int columnIndex) { switch (columnIndex) { case 0: return Boolean.class; case 1: case 2: case 3: case 4: return Object.class; default: throw new Error("Column out of range"); } } //}}} //{{{ getColumnCount() method public int getColumnCount() { return 5; } //}}} //{{{ getColumnName() method public String getColumnName(int column) { switch (column) { case 0: return " "; case 1: return " "+jEdit.getProperty("install-plugins.info.name"); case 2: return " "+jEdit.getProperty("install-plugins.info.category"); case 3: return " "+jEdit.getProperty("install-plugins.info.version"); case 4: return " "+jEdit.getProperty("install-plugins.info.size"); default: throw new Error("Column out of range"); } } //}}} //{{{ getRowCount() method public int getRowCount() { return entries.size(); } //}}} //{{{ getValueAt() method public Object getValueAt(int rowIndex,int columnIndex) { Object obj = entries.get(rowIndex); if(obj instanceof String) { if(columnIndex == 1) return obj; else return null; } else { Entry entry = (Entry)obj; switch (columnIndex) { case 0: return new Boolean( entry.install); case 1: return entry.name; case 2: return entry.set; case 3: return entry.version; case 4: return formatSize(entry.size); default: throw new Error("Column out of range"); } } } //}}} //{{{ isCellEditable() method public boolean isCellEditable(int rowIndex, int columnIndex) { return (columnIndex == 0); } //}}} //{{{ setSelectAll() method public void setSelectAll(boolean b) { if(isDownloadingList()) return; int length = getRowCount(); for (int i = 0; i < length; i++) { if (b) setValueAt(Boolean.TRUE,i,0); else { Entry entry = (Entry)entries.get(i); entry.parents = new LinkedList(); entry.install = false; } } fireTableChanged(new TableModelEvent(this)); } //}}} //{{{ setSortType() method public void setSortType(int type) { sortType = type; sort(type); } //}}} //{{{ setValueAt() method public void setValueAt(Object aValue, int row, int column) { if (column != 0) return; Object obj = entries.get(row); if(obj instanceof String) return; Entry entry = (Entry)obj; Vector deps = entry.plugin.getCompatibleBranch().deps; boolean value = ((Boolean)aValue).booleanValue(); if (!value) { if (entry.parents.size() > 0) { String[] args = { entry.name, entry.getParentString() }; int result = GUIUtilities.confirm( window,"plugin-manager.dependency", args,JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE); if (result != JOptionPane.OK_OPTION) return; Iterator parentsIter = entry.parents.iterator(); while(parentsIter.hasNext()) { ((Entry)parentsIter.next()).install = false; } fireTableRowsUpdated(0,getRowCount() - 1); } } for (int i = 0; i < deps.size(); i++) { PluginList.Dependency dep = (PluginList.Dependency)deps.elementAt(i); if (dep.what.equals("plugin")) { for (int j = 0; j < entries.size(); j++) { Entry temp = (Entry)entries.get(j); if (temp.plugin == dep.plugin) { if (value) { temp.parents.add(entry); setValueAt(Boolean.TRUE,j,0); } else temp.parents.remove(entry); } } } } entry.install = Boolean.TRUE.equals(aValue); fireTableCellUpdated(row,column); } //}}} //{{{ sort() method public void sort(int type) { this.sortType = type; if(isDownloadingList()) return; Collections.sort(entries,new EntryCompare(type)); fireTableChanged(new TableModelEvent(this)); } //}}} //{{{ isDownloadingList() method private boolean isDownloadingList() { return (entries.size() == 1 && entries.get(0) instanceof String); } //}}} //{{{ clear() method public void clear() { entries = new ArrayList(); fireTableChanged(new TableModelEvent(this)); } //}}} //{{{ update() method public void update() { PluginList pluginList = window.getPluginList(); if (pluginList == null) return; entries = new ArrayList(); for(int i = 0; i < pluginList.pluginSets.size(); i++) { PluginList.PluginSet set = (PluginList.PluginSet) pluginList.pluginSets.get(i); for(int j = 0; j < set.plugins.size(); j++) { PluginList.Plugin plugin = (PluginList.Plugin) pluginList.pluginHash.get(set.plugins.get(j)); PluginList.Branch branch = plugin.getCompatibleBranch(); String installedVersion = plugin.getInstalledVersion(); if (updates) { if(branch != null && branch.canSatisfyDependencies() && installedVersion != null && MiscUtilities.compareStrings(branch.version, installedVersion,false) > 0) { entries.add(new Entry(plugin,set.name)); } } else { if(installedVersion == null && plugin.canBeInstalled()) entries.add(new Entry(plugin,set.name)); } } } sort(sortType); fireTableChanged(new TableModelEvent(this)); } //}}} } //}}} //{{{ Entry class class Entry { String name, version, author, date, description, set; int size; boolean install; PluginList.Plugin plugin; LinkedList parents = new LinkedList(); Entry(PluginList.Plugin plugin, String set) { PluginList.Branch branch = plugin.getCompatibleBranch(); boolean downloadSource = jEdit.getBooleanProperty("plugin-manager.downloadSource"); int size = (downloadSource) ? branch.downloadSourceSize : branch.downloadSize; this.name = plugin.name; this.author = plugin.author; this.version = branch.version; this.size = size; this.date = branch.date; this.description = plugin.description; this.set = set; this.install = false; this.plugin = plugin; } String getParentString() { StringBuffer buf = new StringBuffer(); Iterator iter = parents.iterator(); while(iter.hasNext()) { buf.append(((Entry)iter.next()).name); if(iter.hasNext()) buf.append('\n'); } return buf.toString(); } } //}}} //{{{ PluginInfoBox class class PluginInfoBox extends JTextArea implements ListSelectionListener { public PluginInfoBox() { setEditable(false); setLineWrap(true); setWrapStyleWord(true); table.getSelectionModel().addListSelectionListener(this); } public void valueChanged(ListSelectionEvent e) { String text = ""; if (table.getSelectedRowCount() == 1) { Entry entry = (Entry)pluginModel.entries .get(table.getSelectedRow()); text = jEdit.getProperty("install-plugins.info", new String[] {entry.author,entry.date,entry.description}); } setText(text); setCaretPosition(0); } } //}}} //{{{ SizeLabel class class SizeLabel extends JLabel implements TableModelListener { private int size; public SizeLabel() { size = 0; setText(jEdit.getProperty("install-plugins.totalSize")+formatSize(size)); pluginModel.addTableModelListener(this); } public void tableChanged(TableModelEvent e) { if (e.getType() == TableModelEvent.UPDATE) { if(pluginModel.isDownloadingList()) return; size = 0; int length = pluginModel.getRowCount(); for (int i = 0; i < length; i++) { Entry entry = (Entry)pluginModel .entries.get(i); if (entry.install) size += entry.size; } setText(jEdit.getProperty("install-plugins.totalSize")+formatSize(size)); } } } //}}} //{{{ SelectallButton class class SelectallButton extends JCheckBox implements ActionListener, TableModelListener { public SelectallButton() { super(jEdit.getProperty("install-plugins.select-all")); addActionListener(this); pluginModel.addTableModelListener(this); setEnabled(false); } public void actionPerformed(ActionEvent evt) { pluginModel.setSelectAll(isSelected()); } public void tableChanged(TableModelEvent e) { if(pluginModel.isDownloadingList()) return; setEnabled(pluginModel.getRowCount() != 0); if (e.getType() == TableModelEvent.UPDATE) { int length = pluginModel.getRowCount(); for (int i = 0; i < length; i++) if (!((Boolean)pluginModel.getValueAt(i,0)).booleanValue()) { setSelected(false); return; } if (length > 0) setSelected(true); } } } //}}} //{{{ InstallButton class class InstallButton extends JButton implements ActionListener, TableModelListener { public InstallButton() { super(jEdit.getProperty("install-plugins.install")); pluginModel.addTableModelListener(this); addActionListener(this); setEnabled(false); } public void actionPerformed(ActionEvent evt) { if(pluginModel.isDownloadingList()) return; boolean downloadSource = jEdit.getBooleanProperty( "plugin-manager.downloadSource"); boolean installUser = jEdit.getBooleanProperty( "plugin-manager.installUser"); Roster roster = new Roster(); String installDirectory; if(installUser) { installDirectory = MiscUtilities.constructPath( jEdit.getSettingsDirectory(),"jars"); } else { installDirectory = MiscUtilities.constructPath( jEdit.getJEditHome(),"jars"); } int length = pluginModel.getRowCount(); int instcount = 0; for (int i = 0; i < length; i++) { Entry entry = (Entry)pluginModel.entries.get(i); if (entry.install) { entry.plugin.install(roster,installDirectory,downloadSource); if (updates) entry.plugin.getCompatibleBranch().satisfyDependencies( roster,installDirectory,downloadSource); instcount++; } } if(roster.isEmpty()) return; boolean cancel = false; if (updates && roster.getOperationCount() > instcount) if (GUIUtilities.confirm(window, "install-plugins.depend", null, JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.CANCEL_OPTION) cancel = true; if (!cancel) { new PluginManagerProgress(window,roster); roster.performOperationsInAWTThread(window); pluginModel.update(); } } public void tableChanged(TableModelEvent e) { if(pluginModel.isDownloadingList()) return; if (e.getType() == TableModelEvent.UPDATE) { int length = pluginModel.getRowCount(); for (int i = 0; i < length; i++) if (((Boolean)pluginModel.getValueAt(i,0)).booleanValue()) { setEnabled(true); return; } setEnabled(false); } } } //}}} //{{{ EntryCompare class static class EntryCompare implements Comparator { public static final int NAME = 0; public static final int CATEGORY = 1; private int type; public EntryCompare(int type) { this.type = type; } public int compare(Object o1, Object o2) { InstallPanel.Entry e1 = (InstallPanel.Entry)o1; InstallPanel.Entry e2 = (InstallPanel.Entry)o2; if (type == NAME) return e1.name.compareToIgnoreCase(e2.name); else { int result; if ((result = e1.set.compareToIgnoreCase(e2.set)) == 0) return e1.name.compareToIgnoreCase(e2.name); return result; } } } //}}} //{{{ HeaderMouseHandler class class HeaderMouseHandler extends MouseAdapter { public void mouseClicked(MouseEvent evt) { switch(table.getTableHeader().columnAtPoint(evt.getPoint())) { case 1: pluginModel.sort(EntryCompare.NAME); break; case 2: pluginModel.sort(EntryCompare.CATEGORY); break; default: } } } //}}} //{{{ TextRenderer class TextRenderer extends DefaultTableCellRenderer { private DefaultTableCellRenderer tcr; public TextRenderer(DefaultTableCellRenderer tcr) { this.tcr = tcr; } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { return tcr.getTableCellRendererComponent(table,value,isSelected,false,row,column); } } //}}} //}}} } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.