/*
* Copyright 2004 - 2008 Christian Sprajc. All rights reserved.
*
* This file is part of PowerFolder.
*
* PowerFolder 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.
*
* PowerFolder 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 PowerFolder. If not, see <http://www.gnu.org/licenses/>.
*
* $Id$
*/
package de.dal33t.powerfolder.ui.dialog;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.util.List;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JTextField;
import com.jgoodies.binding.value.ValueHolder;
import com.jgoodies.binding.value.ValueModel;
import com.jgoodies.forms.builder.PanelBuilder;
import com.jgoodies.forms.factories.ButtonBarFactory;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import de.dal33t.powerfolder.Controller;
import de.dal33t.powerfolder.disk.Folder;
import de.dal33t.powerfolder.disk.FolderPreviewHelper;
import de.dal33t.powerfolder.disk.FolderSettings;
import de.dal33t.powerfolder.ui.util.Icons;
import de.dal33t.powerfolder.ui.widget.JButtonMini;
import de.dal33t.powerfolder.util.Reject;
import de.dal33t.powerfolder.util.Translation;
import de.dal33t.powerfolder.ui.panel.SyncProfileSelectorPanel;
/**
* Panel displayed when wanting to move a folder from preview to join
*
* @author <a href="mailto:harry@powerfolder.com">Harry Glasgow </a>
* @version $Revision: 2.3 $
*/
public class PreviewToJoinDialog extends BaseDialog {
private final Folder folder;
private JButton joinButton;
private JButton cancelButton;
private SyncProfileSelectorPanel syncProfileSelectorPanel;
private ValueModel locationModel;
private JTextField locationTF;
/**
* Contructor when used on choosen folder
*
* @param controller
* @param folder
*/
public PreviewToJoinDialog(Controller controller, Folder folder) {
super(Senior.NONE, controller, true);
Reject.ifFalse(folder.isPreviewOnly(), "Folder should be a preview");
this.folder = folder;
}
/**
* Initalizes all ui components
*/
private void initComponents() {
final FolderSettings existingFoldersSettings = FolderSettings.load(
getController(), folder.getConfigEntryId());
syncProfileSelectorPanel = new SyncProfileSelectorPanel(
getController(), existingFoldersSettings.getSyncProfile());
locationModel = new ValueHolder(existingFoldersSettings
.getLocalBaseDir().getAbsolutePath());
// Behavior
locationModel.addValueChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
locationTF.setText((String) evt.getNewValue());
}
});
// Buttons
joinButton = new JButton(Translation.getTranslation("folder_join.join"));
joinButton.setMnemonic(Translation
.getTranslation("folder_join.join.key").trim().charAt(0));
joinButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Dispose before parent is closed.
close();
FolderSettings newFolderSettings = new FolderSettings(new File(
(String) locationModel.getValue()),
syncProfileSelectorPanel.getSyncProfile(), false,
false,
existingFoldersSettings.getDownloadScript(),
existingFoldersSettings.getVersions(),
existingFoldersSettings.isSyncPatterns());
FolderPreviewHelper.convertFolderFromPreview(getController(),
folder, newFolderSettings, false);
}
});
cancelButton = createCancelButton(new ActionListener() {
public void actionPerformed(ActionEvent e) {
close();
}
});
}
// Methods for BaseDialog *************************************************
@Override
public String getTitle() {
return Translation.getTranslation("folder_join.dialog.title",
folder.getName());
}
@Override
protected Icon getIcon() {
return null;
}
@Override
protected JComponent getContent() {
initComponents();
FormLayout layout = new FormLayout(
"right:pref, 3dlu, max(140dlu;pref):grow", "pref, 3dlu, pref");
PanelBuilder builder = new PanelBuilder(layout);
CellConstraints cc = new CellConstraints();
int row = 1;
builder.addLabel(Translation.getTranslation("general.synchonisation"),
cc.xy(1, row));
builder.add(syncProfileSelectorPanel.getUIComponent(), cc.xy(3, row));
row += 2;
builder.addLabel(Translation.getTranslation("general.local_copy_at"),
cc.xy(1, row));
builder.add(createLocationField(), cc.xy(3, row));
row += 2;
return builder.getPanel();
}
@Override
protected Component getButtonBar() {
return ButtonBarFactory.buildCenteredBar(joinButton, cancelButton);
}
protected JButton getDefaultButton() {
return joinButton;
}
/**
* Creates a pair of location text field and button.
*
* @return
*/
private JComponent createLocationField() {
FormLayout layout = new FormLayout("100dlu, 3dlu, 15dlu", "pref");
PanelBuilder builder = new PanelBuilder(layout);
CellConstraints cc = new CellConstraints();
locationTF = new JTextField();
locationTF.setEditable(false);
locationTF.setText((String) locationModel.getValue());
builder.add(locationTF, cc.xy(1, 1));
JButtonMini locationButton = new JButtonMini(
Icons.getIconById(Icons.DIRECTORY),
Translation.getTranslation("folder_join.location.tip"));
locationButton.addActionListener(new MyActionListener());
builder.add(locationButton, cc.xy(3, 1));
return builder.getPanel();
}
/**
* Action listener for the location button. Opens a choose dir dialog and
* sets the location model with the result.
*/
private class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String initial = (String) locationModel.getValue();
List<File> files = DialogFactory.chooseDirectory(getController()
.getUIController(), initial, false);
if (!files.isEmpty()) {
locationModel.setValue(files.get(0).getAbsolutePath());
}
}
}
}