package eu.jucy.gui.settings;
import helpers.SizeEnum;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import logger.LoggerFactory;
import org.apache.log4j.Logger;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.osgi.service.prefs.Preferences;
import eu.jucy.gui.ApplicationWorkbenchWindowAdvisor;
import eu.jucy.gui.Lang;
import uc.PI;
import uc.FavFolders.SharedDir;
public class SharedDirsFieldEditor extends FieldEditor {
public static final Logger logger = LoggerFactory.make();
private Label totalSizeLabel;
private Button sharehiddenfiles;
private Spinner slotsSpinner;
private Button addbutton;
private Button removebutton;
private Button renamebutton;
private Table table;
@Override
protected void adjustForNumColumns(int numColumns) {
}
@Override
protected void doFillIntoGrid(final Composite parent, int numColumns) {
final Composite comp = new Composite(parent,SWT.NONE);
GridData gd = new GridData(SWT.FILL,SWT.FILL,true,true);
gd.horizontalSpan = numColumns ;
comp.setLayoutData(gd);
final GridLayout gridLayout_6 = new GridLayout();
gridLayout_6.numColumns = 2;
comp.setLayout(gridLayout_6);
final Group shareddirectorysGroup = new Group(comp, SWT.NONE);
shareddirectorysGroup.setText(Lang.SharedDirectorys);
shareddirectorysGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
shareddirectorysGroup.setLayout(new GridLayout());
table = new Table(shareddirectorysGroup, SWT.FULL_SELECTION | SWT.BORDER);
table.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
if (-1!= table.getSelectionIndex()) {
removebutton.setEnabled(true);
renamebutton.setEnabled(true);
} else {
removebutton.setEnabled(false);
renamebutton.setEnabled(false);
}
}
});
table.setHeaderVisible(true);
table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
final TableColumn newColumnTableColumn = new TableColumn(table, SWT.NONE);
newColumnTableColumn.setWidth(80);
newColumnTableColumn.setText(Lang.VirtualName);
final TableColumn newColumnTableColumn_1 = new TableColumn(table, SWT.NONE);
newColumnTableColumn_1.setWidth(139);
newColumnTableColumn_1.setText(Lang.Directory);
final TableColumn newColumnTableColumn_2 = new TableColumn(table, SWT.NONE);
newColumnTableColumn_2.setWidth(78);
newColumnTableColumn_2.setText(Lang.Size);
final Composite composite_5 = new Composite(shareddirectorysGroup, SWT.NONE);
composite_5.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
final GridLayout gridLayout_7 = new GridLayout();
gridLayout_7.numColumns = 4;
composite_5.setLayout(gridLayout_7);
sharehiddenfiles = new Button(composite_5, SWT.CHECK);
sharehiddenfiles.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false,4,1));
sharehiddenfiles.setText(Lang.ShareHiddenFiles);
// new Label(composite_5, SWT.NONE);
// new Label(composite_5, SWT.NONE);
// new Label(composite_5, SWT.NONE);
totalSizeLabel = new Label(composite_5, SWT.NONE);
totalSizeLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
// totalSizeLabel.setText(String.format(Lang.TotalSize,"0 B"));
// totalSizeLabel = new Label(composite_5, SWT.NONE);
// totalSizeLabel.setText("0 B");
// totalSizeLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
renamebutton = new Button(composite_5, SWT.NONE);
renamebutton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
int i = table.getSelectionIndex();
if (-1!= i ) {
TableItem ti= table.getItem(i);
SharedDir sd= (SharedDir)ti.getData();
//get a new name from the user
InputDialog input = new InputDialog(parent.getShell(),
Lang.VirtualName,
Lang.NameUnderWhichTheOthersSeeTheDirectory,
sd.getName(),null);
input.setBlockOnOpen(true);
// StringDialog strdiag= new StringDialog(parent.getShell(),SWT.NONE, sd.getName(),, );
String res = null; //strdiag.open();
if (input.open() == InputDialog.OK) {
res = input.getValue();
for (TableItem test:table.getItems()) { //check is something has the same name
SharedDir testsd =(SharedDir)test.getData();
if (testsd.getName().equals(res) && testsd != sd) { //another item has the same virtualname therefore we return
return;
}
}
sd.setName(res);
setItem(ti,sd);
}
}
}
});
renamebutton.setEnabled(false);
renamebutton.setLayoutData(new GridData(100, SWT.DEFAULT));
renamebutton.setText(Lang.Rename);
removebutton = new Button(composite_5, SWT.NONE);
removebutton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
int i = table.getSelectionIndex();
if (-1 != i ) {
table.getItem(i).dispose();
}
}
});
removebutton.setEnabled(false);
removebutton.setLayoutData(new GridData(100, SWT.DEFAULT));
removebutton.setText(Lang.Remove);
addbutton = new Button(composite_5, SWT.NONE);
addbutton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
DirectoryDialog dd = new DirectoryDialog(parent.getShell());
dd.setText(Lang.ChooseFolder);
dd.setMessage(Lang.ChooseFolder);
String folder = dd.open();
if (folder == null) {
return;
}
File f = new File(folder);
InputDialog input = new InputDialog(parent.getShell(),
Lang.VirtualName,
Lang.NameUnderWhichTheOthersSeeTheDirectory,
f.getName(),null);
input.setBlockOnOpen(true);
String vname = null;
if (input.open() == InputDialog.OK) {
vname = input.getValue();
// for (TableItem tab : table.getItems()){ //check is something has the same name
// SharedDir sd= (SharedDir)tab.getData();
// if ( sd.getName().equals(vname)) { //another item has the same virtualname therefore we return
// return;
// }
// }
// //ok legal path and filename.. No more checking.. duplicate names are allowed..
TableItem ti = new TableItem(table, SWT.NONE );
SharedDir sharedDir=new SharedDir(vname,f);
setItem(ti,sharedDir);
}
}
});
addbutton.setLayoutData(new GridData(100, SWT.DEFAULT));
addbutton.setText(Lang.AddFolder);
final Label label_10 = new Label(comp, SWT.NONE);
label_10.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false));
label_10.setText(Lang.UploadSlots);
slotsSpinner = new Spinner( comp , SWT.BORDER);
slotsSpinner.setMinimum(1);
slotsSpinner.setMaximum(99);
}
private static void setItem(TableItem ti,SharedDir dir ){
ti.setData(dir);
ti.setText(new String[] {dir.getName() , dir.getDirectory().getPath(), SizeEnum.getReadableSize(dir.getLastShared()) } );
}
@Override
protected void doLoad() {
long total=0;
Preferences pref= uc.PI.get();
Collection<SharedDir> shareddirs = ApplicationWorkbenchWindowAdvisor.get()
.getFavFolders().getSharedDirs();
for(SharedDir sharedDir: shareddirs){
final TableItem ti = new TableItem(table,SWT.NONE);
setItem(ti,sharedDir);
total+=sharedDir.getLastShared();
}
//load slots
slotsSpinner.setSelection( pref.getInt(PI.slots, 2));
//load sharehidden
sharehiddenfiles.setSelection(pref.getBoolean(PI.shareHiddenFiles, false));
//set the totalsize label appropriately
totalSizeLabel.setText(String.format(Lang.TotalSize,SizeEnum.getReadableSize(total )));
}
@Override
protected void doLoadDefault() {
slotsSpinner.setSelection( getPreferenceStore().getDefaultInt(PI.slots));
sharehiddenfiles.setSelection(getPreferenceStore().getDefaultBoolean(PI.shareHiddenFiles));
}
@Override
protected void doStore() {
getPreferenceStore().setValue(PI.slots, slotsSpinner.getSelection());
getPreferenceStore().setValue(PI.shareHiddenFiles, sharehiddenfiles.getSelection());
ApplicationWorkbenchWindowAdvisor.get().getFavFolders().storeSharedDirs(getSharedDirs());
}
private List<SharedDir> getSharedDirs() {
List<SharedDir> dirs = new ArrayList<SharedDir>();
for (TableItem ti : table.getItems()) {
SharedDir sd= (SharedDir)ti.getData();
dirs.add(sd);
}
return dirs;
}
@Override
public int getNumberOfControls() {
return 1;
}
}