package madcow.magic.ui.application;
import madcow.magic.collection.CardCondition;
import madcow.magic.collection.CardInstance;
import madcow.magic.collection.Collection;
import madcow.magic.collection.CollectionFactory;
import madcow.magic.collection.CollectionPackage;
import madcow.magic.collection.Container;
import madcow.magic.database.card.Card;
import madcow.magic.database.card.CardPackage;
import madcow.magic.database.core.DatabaseFactory;
import madcow.magic.database.core.DatabasePackage;
import madcow.magic.database.set.Set;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Widget;
import org.eclipse.swt.SWT;
import swing2swt.layout.BorderLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.layout.grouplayout.GroupLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.core.databinding.observable.list.IObservableList;
import org.eclipse.core.databinding.observable.list.WritableList;
import org.eclipse.core.databinding.property.value.IValueProperty;
import org.eclipse.emf.databinding.EMFObservables;
import org.eclipse.emf.databinding.EMFProperties;
import org.eclipse.emf.databinding.IEMFValueProperty;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.jface.databinding.viewers.ViewerProperties;
import org.eclipse.jface.databinding.viewers.ViewerSupport;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.layout.RowLayout;
import swing2swt.layout.BoxLayout;
import org.eclipse.swt.layout.grouplayout.LayoutStyle;
import madcow.magic.ui.locale.MagicLocales;
import com.swtdesigner.SWTResourceManager;
public class MagicMoveToDialog extends Dialog {
protected Container result;
protected Shell shlMoveDialog;
protected Container container;
protected Set set;
protected Collection collection;
protected IStructuredSelection selection;
private Button keepCardsAsProxy;
private ComboViewer contViewer;
private Button deleteMovedProxy;
private Button btnFoil;
private Button btnProxy;
private ComboViewer condViewer;
private Combo condCombo;
/**
* Create the dialog.
* @param parent
* @param style
* @wbp.parser.constructor
*/
public MagicMoveToDialog(Shell parent, int style, Container c, Collection coll, ISelection sel) {
super(parent, style);
container = c;
collection = coll;
selection = (IStructuredSelection)sel;
setText(MagicLocales.MagicNewContainerDialog_this_text);
}
/**
* Create the dialog.
* @param parent
* @param style
*/
public MagicMoveToDialog(Shell parent, int style, Set s, Collection coll, ISelection sel) {
super(parent, style);
set = s;
collection = coll;
selection = (IStructuredSelection)sel;
setText(MagicLocales.MagicNewContainerDialog_this_text);
}
/**
* Open the dialog.
* @return the result
*/
public void open() {
createContents();
if(set == null){
btnFoil.setEnabled(false);
btnProxy.setEnabled(false);
condCombo.setEnabled(false);
} else if(container == null){
keepCardsAsProxy.setEnabled(false);
deleteMovedProxy.setEnabled(false);
}
shlMoveDialog.open();
shlMoveDialog.layout();
Display display = getParent().getDisplay();
while (!shlMoveDialog.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
/**
* Create contents of the dialog.
*/
private void createContents() {
shlMoveDialog = new Shell(getParent(), getStyle());
shlMoveDialog.setSize(275, 250);
shlMoveDialog.setText(MagicLocales.MagicMoveToDialog_shlMoveDialog_text_1);
shlMoveDialog.setLayout(new BorderLayout(0, 0));
Composite composite = new Composite(shlMoveDialog, SWT.NONE);
composite.setLayoutData(BorderLayout.SOUTH);
Composite composite_1 = new Composite(shlMoveDialog, SWT.NONE);
composite_1.setLayoutData(BorderLayout.CENTER);
composite_1.setLayout(new GridLayout(3, false));
Label lblTargetContainer = new Label(composite_1, SWT.NONE);
lblTargetContainer.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblTargetContainer.setText(MagicLocales.MagicMoveToDialog_lblTargetContainer_text);
contViewer = new ComboViewer(composite_1, SWT.NONE);
Combo combo = contViewer.getCombo();
GridData gd_combo = new GridData(SWT.LEFT, SWT.CENTER, true, false, 2, 1);
gd_combo.widthHint = 113;
combo.setLayoutData(gd_combo);
new Label(composite_1, SWT.NONE);
Label lblFromContainer = new Label(composite_1, SWT.NONE);
lblFromContainer.setText(MagicLocales.MagicMoveToDialog_lblFromContainer_text);
new Label(composite_1, SWT.NONE);
new Label(composite_1, SWT.NONE);
keepCardsAsProxy = new Button(composite_1, SWT.CHECK);
GridData gd_keepCardsAsProxy = new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1);
gd_keepCardsAsProxy.widthHint = 134;
keepCardsAsProxy.setLayoutData(gd_keepCardsAsProxy);
keepCardsAsProxy.setText(MagicLocales.MagicMoveToDialog_btnKeepCardsAs_text);
new Label(composite_1, SWT.NONE);
deleteMovedProxy = new Button(composite_1, SWT.CHECK);
GridData gd_deleteMovedProxy = new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1);
gd_deleteMovedProxy.widthHint = 157;
deleteMovedProxy.setLayoutData(gd_deleteMovedProxy);
deleteMovedProxy.setText(MagicLocales.MagicMoveToDialog_btnDeleteMovedProxy_text);
new Label(composite_1, SWT.NONE);
Label lblFromSet = new Label(composite_1, SWT.NONE);
lblFromSet.setText(MagicLocales.MagicMoveToDialog_lblFromSet_text);
new Label(composite_1, SWT.NONE);
Label lblCondition = new Label(composite_1, SWT.NONE);
lblCondition.setText(MagicLocales.MagicMoveToDialog_lblCondition_text);
condViewer = new ComboViewer(composite_1, SWT.NONE);
condCombo = condViewer.getCombo();
GridData gd_combo_1 = new GridData(SWT.LEFT, SWT.CENTER, true, false, 2, 1);
gd_combo_1.widthHint = 114;
condCombo.setLayoutData(gd_combo_1);
new Label(composite_1, SWT.NONE);
btnFoil = new Button(composite_1, SWT.CHECK);
btnFoil.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
btnFoil.setText(MagicLocales.MagicMoveToDialog_btnFoil_text);
btnProxy = new Button(composite_1, SWT.CHECK);
btnProxy.setText(MagicLocales.MagicMoveToDialog_btnProxy_text);
Label lblSelectContainerFor = new Label(shlMoveDialog, SWT.NONE);
lblSelectContainerFor.setLayoutData(BorderLayout.NORTH);
lblSelectContainerFor.setText(MagicLocales.MagicMoveToDialog_lblSelectContainerFor_text);
WritableList collContainers = new WritableList(collection.getContainers(), Container.class);
IEMFValueProperty pContName = EMFProperties.value(CollectionPackage.Literals.COLLECTION_ELEMENT__NAME);
ViewerSupport.bind(contViewer, collContainers, pContName);
IObservableList raritys = EMFObservables.observeList(CollectionPackage.Literals.CARD_CONDITION, EcorePackage.Literals.EENUM__ELITERALS);
IEMFValueProperty pRarityName = EMFProperties.value(EcorePackage.Literals.EENUM_LITERAL__LITERAL);
ViewerSupport.bind(condViewer, raritys, pRarityName);
Button btnHelp = new Button(composite, SWT.NONE);
btnHelp.setText(MagicLocales.MagicNewContainerDialog_btnHelp_text);
Button btnOk = new Button(composite, SWT.NONE);
btnOk.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
IStructuredSelection selCont = (IStructuredSelection) contViewer.getSelection();
if (selCont.getFirstElement() instanceof Container) {
Container c = (Container) selCont.getFirstElement();
for (Object selO : selection.toList()) {
if (selO instanceof Card) {
Card card = (Card) selO;
CardInstance ci = null;
if(container != null){
for (CardInstance tci : container.getCards()) {
if (tci.getCard().equals(card)) {
ci = tci;
break;
}
}
if (ci != null) {
if (deleteMovedProxy.getSelection() && ci.isProxy()) {
container.getCards().remove(ci);
} else if (keepCardsAsProxy.getSelection()) {
CardInstance newCI = EcoreUtil.copy(ci);
newCI.setContainer(c);
if(!ci.isProxy()){
newCI.setProxy(false);
// change original to proxy
ci.setProxy(true);
}
} else {
ci.setContainer(c);
}
}
} else if(set != null){
ci = CollectionFactory.eINSTANCE.createCardInstance();
ci.setDescription("Added by Move to...");
ci.setFoil(btnFoil.getSelection());
ci.setProxy(btnProxy.getSelection());
IStructuredSelection is = (IStructuredSelection) condViewer.getSelection();
if(is.getFirstElement() instanceof CardCondition){
ci.setCondition((CardCondition) is.getFirstElement());
}
ci.setOwner(c.getOwner());
ci.setName(card.getName());
ci.setCard(card);
c.getCards().add(ci);
}
}
}
}
shlMoveDialog.dispose();
}
});
btnOk.setText(MagicLocales.MagicNewContainerDialog_btnOk_text);
Button btnCancel = new Button(composite, SWT.NONE);
btnCancel.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
shlMoveDialog.dispose();
}
});
btnCancel.setText(MagicLocales.MagicNewContainerDialog_btnCancel_text);
GroupLayout gl_composite = new GroupLayout(composite);
gl_composite.setHorizontalGroup(
gl_composite.createParallelGroup(GroupLayout.LEADING)
.add(GroupLayout.TRAILING, gl_composite.createSequentialGroup()
.addContainerGap(230, Short.MAX_VALUE)
.add(btnHelp, GroupLayout.PREFERRED_SIZE, 64, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.RELATED)
.add(btnOk, GroupLayout.PREFERRED_SIZE, 69, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.RELATED)
.add(btnCancel, GroupLayout.PREFERRED_SIZE, 69, GroupLayout.PREFERRED_SIZE))
);
gl_composite.setVerticalGroup(
gl_composite.createParallelGroup(GroupLayout.LEADING)
.add(gl_composite.createParallelGroup(GroupLayout.BASELINE)
.add(btnCancel)
.add(btnOk)
.add(btnHelp))
);
composite.setLayout(gl_composite);
}
}