/* * File : SavePathPanel.java * Created : 30 sept. 2003 17:06:45 * 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.io.File; import java.util.Map; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.*; import org.gudy.azureus2.core3.config.COConfigurationManager; import org.gudy.azureus2.core3.internat.MessageText; import org.gudy.azureus2.core3.torrent.TOTorrentFactory; import org.gudy.azureus2.core3.util.Debug; import org.gudy.azureus2.core3.util.DisplayFormatters; 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 SavePathPanel extends AbstractWizardPanel<NewTorrentWizard> { protected long file_size; protected long piece_size; protected long piece_count; public SavePathPanel(NewTorrentWizard wizard,AbstractWizardPanel<NewTorrentWizard> _previousPanel) { super(wizard,_previousPanel); } /* (non-Javadoc) * @see org.gudy.azureus2.ui.swt.maketorrent.IWizardPanel#show() */ public void show() { try{ if (wizard.create_mode == NewTorrentWizard.MODE_BYO ){ file_size = TOTorrentFactory.getTorrentDataSizeFromFileOrDir( wizard.byo_desc_file, true ); }else{ file_size = TOTorrentFactory.getTorrentDataSizeFromFileOrDir( new File( wizard.create_mode==NewTorrentWizard.MODE_DIRECTORY? wizard.directoryPath: wizard.singlePath), false ); } piece_size = TOTorrentFactory.getComputedPieceSize( file_size ); piece_count = TOTorrentFactory.getPieceCount( file_size, piece_size ); }catch( Throwable e ){ Debug.printStackTrace( e ); } wizard.setTitle(MessageText.getString("wizard.torrentFile")); wizard.setCurrentInfo(MessageText.getString("wizard.choosetorrent")); Composite panel = wizard.getPanel(); GridLayout layout = new GridLayout(); layout.numColumns = 3; panel.setLayout(layout); Label label;/* = new Label(panel,SWT.NULL); Messages.setLanguageText(label,"wizard.file");*/ final Text file = new Text(panel,SWT.BORDER); file.addModifyListener(new ModifyListener() { /* (non-Javadoc) * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent) */ public void modifyText(ModifyEvent arg0) { String fName = file.getText(); wizard.savePath = fName; String error = ""; if(! fName.equals("")) { File f = new File(file.getText()); if( f.isDirectory() || ( f.getParentFile() != null && !f.getParentFile().canWrite())){ error = MessageText.getString("wizard.invalidfile"); }else{ String parent = f.getParent(); if ( parent != null ){ wizard.setDefaultSaveDir( parent ); } } } wizard.setErrorMessage(error); wizard.setFinishEnabled(!wizard.savePath.equals("") && error.equals("")); } }); String default_save = wizard.getDefaultSaveDir(); // if we have a default save dir then use this as the basis for save location String target_file; if( wizard.create_mode == NewTorrentWizard.MODE_BYO ){ target_file = ""; if (wizard.byo_map != null) { java.util.List list = (java.util.List) wizard.byo_map.get("file_map"); if (list != null) { Map map = (Map) list.get(0); if (map != null) { java.util.List path = (java.util.List) map.get("logical_path"); if (path != null) { target_file = new File( COConfigurationManager.getStringParameter("General_sDefaultTorrent_Directory"), (String) path.get(0) + ".torrent").getAbsolutePath(); } } } } }else if ( wizard.create_mode == NewTorrentWizard.MODE_DIRECTORY ){ target_file = wizard.directoryPath + ".torrent"; }else{ target_file = wizard.singlePath + ".torrent"; } if ( default_save.length() > 0 && target_file.length() > 0 ){ File temp = new File( target_file ); String existing_parent = temp.getParent(); if ( existing_parent != null ){ target_file = new File( default_save, temp.getName()).toString(); } } wizard.savePath = target_file; file.setText( wizard.savePath); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = 2; file.setLayoutData(gridData); Button browse = new Button(panel,SWT.PUSH); browse.addListener(SWT.Selection,new Listener() { /* (non-Javadoc) * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event) */ public void handleEvent(Event arg0) { FileDialog fd = new FileDialog(wizard.getWizardWindow(),SWT.SAVE); final String path = wizard.savePath; if(wizard.getErrorMessage().equals("") && !path.equals("")) { File fsPath = new File(path); if(!path.endsWith(File.separator)) { fd.setFilterPath(fsPath.getParent()); fd.setFileName(fsPath.getName()); } else { fd.setFileName(path); } } String f = fd.open(); if (f != null){ file.setText(f); File ff = new File(f); String parent = ff.getParent(); if ( parent != null ){ wizard.setDefaultSaveDir( parent ); } } } }); Messages.setLanguageText(browse,"wizard.browse"); // ---------------------- label = new Label(panel, SWT.SEPARATOR | SWT.HORIZONTAL); gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = 3; label.setLayoutData(gridData); Composite gFileStuff = new Composite(panel, SWT.NULL); gridData = new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL); gridData.horizontalSpan = 3; gFileStuff.setLayoutData(gridData); layout = new GridLayout(); layout.numColumns = 4; gFileStuff.setLayout(layout); // file size label = new Label(gFileStuff, SWT.NULL); Messages.setLanguageText(label, "wizard.maketorrent.filesize"); Label file_size_label = new Label(gFileStuff, SWT.NULL); file_size_label.setText( DisplayFormatters.formatByteCountToKiBEtc(file_size)); label = new Label(gFileStuff, SWT.NULL); label = new Label(gFileStuff, SWT.NULL); // piece count label = new Label(gFileStuff, SWT.NULL); Messages.setLanguageText(label, "wizard.maketorrent.piececount"); final Label piece_count_label = new Label(gFileStuff, SWT.NULL); piece_count_label.setText( ""+piece_count ); label = new Label(gFileStuff, SWT.NULL); label = new Label(gFileStuff, SWT.NULL); // piece size label = new Label(gFileStuff, SWT.NULL); Messages.setLanguageText(label, "wizard.maketorrent.piecesize"); final Label piece_size_label = new Label(gFileStuff, SWT.NULL); gridData = new GridData(); gridData.widthHint = 75; piece_size_label.setLayoutData(gridData); piece_size_label.setText( DisplayFormatters.formatByteCountToKiBEtc( piece_size )); final Combo manual = new Combo(gFileStuff, SWT.SINGLE | SWT.READ_ONLY); final long[] sizes = TOTorrentFactory.STANDARD_PIECE_SIZES; manual.add( MessageText.getString( "wizard.maketorrent.auto")); for (int i=0;i<sizes.length;i++){ manual.add(DisplayFormatters.formatByteCountToKiBEtc(sizes[i])); } manual.select(0); manual.addListener(SWT.Selection, new Listener() { public void handleEvent( Event e) { int index = manual.getSelectionIndex(); if ( index == 0 ){ wizard.setPieceSizeComputed(); piece_size = TOTorrentFactory.getComputedPieceSize( file_size ); }else{ piece_size = sizes[index-1]; wizard.setPieceSizeManual(piece_size); } piece_count = TOTorrentFactory.getPieceCount( file_size, piece_size ); piece_size_label.setText( DisplayFormatters.formatByteCountToKiBEtc(piece_size)); piece_count_label.setText( ""+piece_count ); } }); label = new Label(gFileStuff, SWT.NULL); // ------------------------ label = new Label(panel, SWT.SEPARATOR | SWT.HORIZONTAL); gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = 3; label.setLayoutData(gridData); final Button bAutoOpen = new Button(panel,SWT.CHECK); Messages.setLanguageText(bAutoOpen,"wizard.maketorrents.autoopen"); gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = 3; bAutoOpen.setLayoutData(gridData); final Button bforce = new Button(panel,SWT.CHECK); Messages.setLanguageText(bforce,"wizard.maketorrents.force"); gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = 3; bforce.setLayoutData(gridData); final Button bSuperSeed = new Button(panel,SWT.CHECK); Messages.setLanguageText(bSuperSeed,"wizard.maketorrents.superseed"); gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = 3; bSuperSeed.setLayoutData(gridData); final Button bAutoHost = new Button(panel,SWT.CHECK); Messages.setLanguageText(bAutoHost,"wizard.maketorrents.autohost"); gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = 3; bAutoHost.setLayoutData(gridData); label = new Label(panel,SWT.NULL); Messages.setLanguageText(label,"wizard.maketorrents.init.tags"); final Text tag_area = new Text(panel,SWT.BORDER); gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = 2; tag_area.setLayoutData(gridData); bforce.setEnabled( false ); tag_area.setEnabled( false ); bSuperSeed.setEnabled( false ); bAutoHost.setEnabled( false ); bAutoOpen.addListener(SWT.Selection,new Listener(){ public void handleEvent(Event event){ boolean autoOpen = wizard.autoOpen = bAutoOpen.getSelection(); boolean enable = autoOpen && wizard.getTrackerType() != NewTorrentWizard.TT_EXTERNAL; bforce.setEnabled( autoOpen ); tag_area.setEnabled( autoOpen ); bSuperSeed.setEnabled( autoOpen ); bAutoHost.setEnabled( enable ); } }); bforce.addListener(SWT.Selection,new Listener(){ public void handleEvent(Event event) { wizard.forceStart = bforce.getSelection(); } }); tag_area.setText( wizard.getInitialTags(false)); tag_area.addModifyListener(new ModifyListener(){ public void modifyText( ModifyEvent arg0){ wizard.setInitialTags( tag_area.getText().trim()); } }); bSuperSeed.addListener(SWT.Selection,new Listener(){ public void handleEvent(Event event){ wizard.superseed = bSuperSeed.getSelection(); } }); bAutoHost.addListener(SWT.Selection,new Listener(){ public void handleEvent(Event event){ wizard.autoHost = bAutoHost.getSelection(); } }); final Button bPrivateTorrent = new Button(panel,SWT.CHECK); Messages.setLanguageText(bPrivateTorrent,"ConfigView.section.sharing.privatetorrent"); gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = 3; bPrivateTorrent.setLayoutData(gridData); final Button bAllowDHT = new Button(panel,SWT.CHECK); Messages.setLanguageText(bAllowDHT,"ConfigView.section.sharing.permitdht"); gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = 3; bAllowDHT.setLayoutData(gridData); bAllowDHT.setSelection( true ); bAllowDHT.addListener(SWT.Selection,new Listener() { public void handleEvent(Event event) { wizard.permitDHT = bAllowDHT.getSelection(); } }); bPrivateTorrent.addListener(SWT.Selection,new Listener() { public void handleEvent(Event event) { wizard.privateTorrent = bPrivateTorrent.getSelection(); if ( wizard.privateTorrent ){ bAllowDHT.setSelection( false ); wizard.permitDHT = false; } bAllowDHT.setEnabled( !wizard.privateTorrent ); } }); if ( wizard.getTrackerType() == NewTorrentWizard.TT_DECENTRAL ){ bAllowDHT.setEnabled( false ); bPrivateTorrent.setEnabled( false ); } } public IWizardPanel<NewTorrentWizard> getFinishPanel() { return new ProgressPanel( wizard, this ); } public boolean isFinishSelectionOK() { String save_path = wizard.savePath; File f = new File( save_path ); if ( f.isFile()){ MessageBox mb = new MessageBox(wizard.getWizardWindow(),SWT.ICON_QUESTION | SWT.YES | SWT.NO); mb.setText(MessageText.getString("exportTorrentWizard.process.outputfileexists.title")); mb.setMessage(MessageText.getString("exportTorrentWizard.process.outputfileexists.message")); int result = mb.open(); if( result == SWT.NO ){ return( false ); } } return( true ); } }