/* * File : ModePanel.java Created : 30 sept. 2003 01:51:05 By : Olivier * * Azureus - a Java Bittorrent client * * 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. * * 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 ( see the LICENSE file ). * * 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.gudy.azureus2.ui.swt.maketorrent; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; import org.gudy.azureus2.core3.internat.MessageText; import org.gudy.azureus2.core3.util.TrackersUtil; import org.gudy.azureus2.ui.swt.Messages; import org.gudy.azureus2.ui.swt.wizard.AbstractWizardPanel; import org.gudy.azureus2.ui.swt.wizard.IWizardPanel; /** * @author Olivier * */ public class MultiTrackerPanel extends AbstractWizardPanel<NewTorrentWizard> implements TrackerEditorListener{ private Combo configList; private Tree configDetails; private Button btnNew; private Button btnEdit; private Button btnDelete; public MultiTrackerPanel(NewTorrentWizard wizard, AbstractWizardPanel<NewTorrentWizard> previous) { super(wizard, previous); } /* * (non-Javadoc) * * @see org.gudy.azureus2.ui.swt.maketorrent.IWizardPanel#show() */ public void show() { wizard.setTitle(MessageText.getString("wizard.multitracker.title")); wizard.setCurrentInfo(""); Composite rootPanel = wizard.getPanel(); GridLayout layout = new GridLayout(); layout.numColumns = 1; rootPanel.setLayout(layout); Composite panel = new Composite(rootPanel, SWT.NULL); GridData gridData = new GridData(GridData.VERTICAL_ALIGN_CENTER | GridData.FILL_HORIZONTAL); panel.setLayoutData(gridData); layout = new GridLayout(); layout.numColumns = 3; panel.setLayout(layout); //Line : // Multi-Tracker Configuration final Label labelTitle = new Label(panel,SWT.NULL); Messages.setLanguageText(labelTitle, "wizard.multitracker.configuration"); gridData = new GridData(); gridData.horizontalSpan = 3; labelTitle.setLayoutData(gridData); configList = new Combo(panel,SWT.READ_ONLY); gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = 3; configList.setLayoutData(gridData); configList.addListener(SWT.Selection,new Listener() { public void handleEvent(Event e) { updateTrackers(); refreshDetails(); } }); btnNew = new Button(panel, SWT.PUSH); Messages.setLanguageText(btnNew, "wizard.multitracker.new"); gridData = new GridData(); gridData.widthHint = 100; btnNew.setLayoutData(gridData); btnNew.addListener(SWT.Selection, new Listener() { public void handleEvent(Event e) { List group = new ArrayList(); List tracker = new ArrayList(); tracker.add(((NewTorrentWizard)wizard).trackerURL); group.add(tracker); new MultiTrackerEditor(wizard.getWizardWindow(), null,group,MultiTrackerPanel.this); } }); btnEdit = new Button(panel, SWT.PUSH); Messages.setLanguageText(btnEdit, "wizard.multitracker.edit"); gridData = new GridData(); gridData.widthHint = 100; btnEdit.setLayoutData(gridData); btnEdit.addListener(SWT.Selection, new Listener() { public void handleEvent(Event e) { int selection = configList.getSelectionIndex(); String selected = configList.getItem(selection); Map multiTrackers = TrackersUtil.getInstance().getMultiTrackers(); new MultiTrackerEditor( wizard.getWizardWindow(),selected,(List)multiTrackers.get(selected),MultiTrackerPanel.this); } }); btnDelete = new Button(panel, SWT.PUSH); Messages.setLanguageText(btnDelete, "wizard.multitracker.delete"); gridData = new GridData(GridData.HORIZONTAL_ALIGN_END); gridData.widthHint = 100; btnDelete.setLayoutData(gridData); btnDelete.addListener(SWT.Selection, new Listener() { public void handleEvent(Event e) { int selection = configList.getSelectionIndex(); String selected = configList.getItem(selection); TrackersUtil.getInstance().removeMultiTracker(selected); refreshList(""); refreshDetails(); setEditDeleteEnable(); } }); final Label labelSeparator = new Label(panel,SWT.SEPARATOR | SWT.HORIZONTAL); gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = 3; labelSeparator.setLayoutData(gridData); configDetails = new Tree(panel,SWT.BORDER); gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.heightHint = 150; gridData.horizontalSpan = 3; configDetails.setLayoutData(gridData); refreshList(((NewTorrentWizard)wizard).multiTrackerConfig); refreshDetails(); setEditDeleteEnable(); } /* * (non-Javadoc) * * @see org.gudy.azureus2.ui.swt.maketorrent.IWizardPanel#getNextPanel() */ public IWizardPanel getNextPanel() { if(((NewTorrentWizard) wizard).useWebSeed){ return new WebSeedPanel((NewTorrentWizard) wizard, this); } return(((NewTorrentWizard)wizard).getNextPanelForMode( this )); } public boolean isNextEnabled() { return true; } void refreshDetails() { configDetails.removeAll(); List trackers = ((NewTorrentWizard) wizard).trackers; Iterator iter = trackers.iterator(); while(iter.hasNext()) { List trackerGroup = (List) iter.next(); TreeItem itemRoot = new TreeItem(configDetails,SWT.NULL); Messages.setLanguageText(itemRoot, "wizard.multitracker.group"); Iterator iter2 = trackerGroup.iterator(); while(iter2.hasNext()) { String url = (String) iter2.next(); new TreeItem(itemRoot,SWT.NULL).setText(url); } itemRoot.setExpanded(true); } } void setEditDeleteEnable() { if(configList.getItemCount() > 0) { btnEdit.setEnabled(true); btnDelete.setEnabled(true); } else { btnEdit.setEnabled(false); btnDelete.setEnabled(false); } } public void trackersChanged(String oldName, String newName, List trackers) { TrackersUtil util = TrackersUtil.getInstance(); if(oldName != null && !oldName.equals(newName)) util.removeMultiTracker(oldName); util.addMultiTracker(newName,trackers); refreshList(newName); refreshDetails(); setEditDeleteEnable(); } private void refreshList(String toBeSelected) { Map multiTrackers = TrackersUtil.getInstance().getMultiTrackers(); configList.removeAll(); Iterator iter = multiTrackers.keySet().iterator(); while(iter.hasNext()) { configList.add((String)iter.next()); } int selection = configList.indexOf(toBeSelected); if(selection != -1) { configList.select(selection); } else if(configList.getItemCount() > 0) { configList.select(0); } updateTrackers(); } private void updateTrackers() { int selection = configList.getSelectionIndex(); if(selection == -1) { List group = new ArrayList(); List tracker = new ArrayList(); tracker.add(((NewTorrentWizard)wizard).trackerURL); group.add(tracker); ((NewTorrentWizard)wizard).trackers = group; ((NewTorrentWizard)wizard).multiTrackerConfig = ""; setNext(); return; } String selected = configList.getItem(selection); ((NewTorrentWizard)wizard).multiTrackerConfig = selected; Map multiTrackers = TrackersUtil.getInstance().getMultiTrackers(); ((NewTorrentWizard)wizard).trackers = (List) multiTrackers.get(selected); setNext(); } private void setNext() { String trackerUrl = ((NewTorrentWizard)wizard).trackerURL; List groups = ((NewTorrentWizard)wizard).trackers; Iterator iterGroups = groups.iterator(); while(iterGroups.hasNext()) { List trackers = (List) iterGroups.next(); Iterator iterTrackers = trackers.iterator(); while(iterTrackers.hasNext()) { String tracker = (String) iterTrackers.next(); if(trackerUrl.equals(tracker)) { wizard.setNextEnabled(true); wizard.setErrorMessage(""); return; } } } wizard.setNextEnabled(false); wizard.setErrorMessage(MessageText.getString("wizard.multitracker.noannounce")); } }