PageRenderTime 250ms CodeModel.GetById 232ms app.highlight 14ms RepoModel.GetById 1ms app.codeStats 0ms

/jEdit/tags/jedit-4-2-pre4/org/gjt/sp/jedit/options/PluginManagerOptionPane.java

#
Java | 267 lines | 189 code | 40 blank | 38 comment | 19 complexity | 136e8ba00a6802a65d6592924a671b7e MD5 | raw file
  1/*
  2 * PluginManagerOptionPane.java - Plugin options panel
  3 * :tabSize=8:indentSize=8:noTabs=false:
  4 * :folding=explicit:collapseFolds=1:
  5 *
  6 * Copyright (C) 2003 Kris Kopicki
  7 *
  8 * This program is free software; you can redistribute it and/or
  9 * modify it under the terms of the GNU General Public License
 10 * as published by the Free Software Foundation; either version 2
 11 * of the License, or any later version.
 12 *
 13 * This program is distributed in the hope that it will be useful,
 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16 * GNU General Public License for more details.
 17 *
 18 * You should have received a copy of the GNU General Public License
 19 * along with this program; if not, write to the Free Software
 20 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 21 */
 22
 23package org.gjt.sp.jedit.options;
 24
 25import javax.swing.*;
 26import javax.swing.border.*;
 27import java.awt.*;
 28import java.awt.event.*;
 29import java.util.*;
 30import org.gjt.sp.jedit.*;
 31import org.gjt.sp.jedit.gui.*;
 32import org.gjt.sp.jedit.io.VFSManager;
 33import org.gjt.sp.jedit.pluginmgr.*;
 34import org.gjt.sp.util.*;
 35
 36public class PluginManagerOptionPane extends AbstractOptionPane
 37{
 38	//{{{ Constructor
 39	public PluginManagerOptionPane()
 40	{
 41		super("plugin-manager");
 42	} //}}}
 43
 44	//{{{ _init() method
 45	protected void _init()
 46	{
 47		setLayout(new BorderLayout());
 48
 49		locationLabel = new JLabel(jEdit.getProperty(
 50			"options.plugin-manager.location"));
 51		mirrorLabel = new JLabel(jEdit.getProperty(
 52			"options.plugin-manager.mirror"));
 53		if(jEdit.getSettingsDirectory() != null)
 54		{
 55			settingsDir = new JRadioButton(jEdit.getProperty(
 56				"options.plugin-manager.settings-dir"));
 57			settingsDir.setToolTipText(MiscUtilities.constructPath(
 58				jEdit.getSettingsDirectory(),"jars"));
 59		}
 60		appDir = new JRadioButton(jEdit.getProperty(
 61			"options.plugin-manager.app-dir"));
 62		appDir.setToolTipText(MiscUtilities.constructPath(
 63			jEdit.getJEditHome(),"jars"));
 64
 65		miraList = new JList(miraModel = new MirrorModel());
 66		miraList.setSelectionModel(new SingleSelectionModel());
 67
 68		/* Download mirror */
 69		add(BorderLayout.NORTH,mirrorLabel);
 70		add(BorderLayout.CENTER,new JScrollPane(miraList));
 71
 72		JPanel buttonPanel = new JPanel();
 73		buttonPanel.setLayout(new BoxLayout(buttonPanel,BoxLayout.Y_AXIS));
 74
 75		buttonPanel.add(Box.createVerticalStrut(6));
 76
 77		/* Update mirror list */
 78		JButton updateMirrors = new JButton(jEdit.getProperty(
 79			"options.plugin-manager.updateMirrors"));
 80		updateMirrors.addActionListener(new ActionHandler());
 81		buttonPanel.add(updateMirrors);
 82
 83		buttonPanel.add(Box.createVerticalStrut(6));
 84
 85		/* Download source */
 86		downloadSource = new JCheckBox(jEdit.getProperty(
 87			"options.plugin-manager.downloadSource"));
 88		downloadSource.setSelected(jEdit.getBooleanProperty("plugin-manager.downloadSource"));
 89		buttonPanel.add(downloadSource);
 90
 91		buttonPanel.add(Box.createVerticalStrut(6));
 92
 93		/* Delete downloaded files */
 94		deleteDownloads = new JCheckBox(jEdit.getProperty(
 95			"options.plugin-manager.deleteDownloads"));
 96		deleteDownloads.setSelected(jEdit.getBooleanProperty("plugin-manager.deleteDownloads"));
 97		buttonPanel.add(deleteDownloads);
 98
 99		buttonPanel.add(Box.createVerticalStrut(6));
100
101		/* Install location */
102		locGrp = new ButtonGroup();
103		if(jEdit.getSettingsDirectory() != null)
104			locGrp.add(settingsDir);
105		locGrp.add(appDir);
106		JPanel locPanel = new JPanel();
107		locPanel.setBorder(new EmptyBorder(3,12,0,0));
108		locPanel.setLayout(new BoxLayout(locPanel,BoxLayout.Y_AXIS));
109		if(jEdit.getSettingsDirectory() != null)
110		{
111			locPanel.add(settingsDir);
112			locPanel.add(Box.createVerticalStrut(3));
113		}
114		locPanel.add(appDir);
115		buttonPanel.add(locationLabel);
116		buttonPanel.add(locPanel);
117
118		buttonPanel.add(Box.createGlue());
119		add(BorderLayout.SOUTH,buttonPanel);
120
121		if (jEdit.getBooleanProperty("plugin-manager.installUser")
122			&& jEdit.getSettingsDirectory() != null)
123			settingsDir.setSelected(true);
124		else
125			appDir.setSelected(true);
126	} //}}}
127
128	//{{{ _save() method
129	protected void _save()
130	{
131		jEdit.setBooleanProperty("plugin-manager.installUser",
132			settingsDir != null && settingsDir.isSelected());
133		jEdit.setBooleanProperty("plugin-manager.downloadSource",downloadSource.isSelected());
134		jEdit.setBooleanProperty("plugin-manager.deleteDownloads",deleteDownloads.isSelected());
135
136		if(miraList.getSelectedIndex() != -1)
137		{
138			String currentMirror = miraModel.getID(miraList.getSelectedIndex());
139			String previousMirror = jEdit.getProperty("plugin-manager.mirror.id");
140
141			if (!previousMirror.equals(currentMirror))
142			{
143				jEdit.setProperty("plugin-manager.mirror.id",currentMirror);
144				// Insert code to update the plugin managers list here later
145			}
146		}
147	} //}}}
148
149	//{{{ Private members
150
151	//{{{ Instance variables
152	private JLabel locationLabel;
153	private JLabel mirrorLabel;
154
155	private ButtonGroup locGrp;
156	private JRadioButton settingsDir;
157	private JRadioButton appDir;
158	private JCheckBox downloadSource;
159	private JCheckBox deleteDownloads;
160
161	private MirrorModel miraModel;
162	private JList miraList;
163	//}}}
164
165	//}}}
166
167	//{{{ MirrorModel class
168	class MirrorModel extends AbstractListModel
169	{
170		private ArrayList mirrors;
171
172		public MirrorModel()
173		{
174			mirrors = new ArrayList();
175		}
176
177		public String getID(int index)
178		{
179			return ((MirrorList.Mirror)mirrors.get(index)).id;
180		}
181
182		public int getSize()
183		{
184			return mirrors.size();
185		}
186
187		public Object getElementAt(int index)
188		{
189			MirrorList.Mirror mirror = (MirrorList.Mirror)mirrors.get(index);
190			if(mirror.id.equals(MirrorList.Mirror.NONE))
191				return jEdit.getProperty("options.plugin-manager.none");
192			else
193				return mirror.continent+": "+mirror.description+" ("+mirror.location+")";
194		}
195
196		public void setList(ArrayList mirrors)
197		{
198			this.mirrors = mirrors;
199			fireContentsChanged(this,0,mirrors.size() - 1);
200		}
201	} //}}}
202
203	//{{{ SingleSelectionModel class
204	class SingleSelectionModel extends DefaultListSelectionModel
205	{
206		public SingleSelectionModel()
207		{
208			super();
209			setSelectionMode(SINGLE_SELECTION);
210		}
211
212		public void removeSelectionInterval(int index0, int index1) {}
213	} //}}}
214
215	//{{{ ActionHandler class
216	class ActionHandler implements ActionListener
217	{
218		public void actionPerformed(ActionEvent evt)
219		{
220			VFSManager.runInWorkThread(new DownloadMirrorsThread());
221		}
222	} //}}}
223
224	//{{{ DownloadMirrorsThread class
225	class DownloadMirrorsThread extends WorkRequest
226	{
227		public void run()
228		{
229			setStatus(jEdit.getProperty("options.plugin-manager.workthread"));
230			setProgressMaximum(1);
231			setProgressValue(0);
232
233			final ArrayList mirrors = new ArrayList();
234			try
235			{
236				mirrors.addAll(new MirrorList().mirrors);
237			}
238			catch (Exception ex)
239			{
240				Log.log(Log.ERROR,this,ex);
241				GUIUtilities.error(PluginManagerOptionPane.this,
242					"ioerror",new String[] { ex.toString() });
243			}
244
245			SwingUtilities.invokeLater(new Runnable()
246			{
247				public void run()
248				{
249					miraModel.setList(mirrors);
250
251					String id = jEdit.getProperty("plugin-manager.mirror.id");
252					int size = miraModel.getSize();
253					for (int i=0; i < size; i++)
254					{
255						if (size == 1 || miraModel.getID(i).equals(id))
256						{
257							miraList.setSelectedIndex(i);
258							break;
259						}
260					}
261				}
262			});
263
264			setProgressValue(1);
265		}
266	} //}}}
267}