diff --git a/xyz.veronie.bgg.ui/Application.e4xmi b/xyz.veronie.bgg.ui/Application.e4xmi index 021f873..14cdd04 100644 --- a/xyz.veronie.bgg.ui/Application.e4xmi +++ b/xyz.veronie.bgg.ui/Application.e4xmi @@ -1,6 +1,6 @@ - + diff --git a/xyz.veronie.bgg.ui/src/xyz/veronie/bgg/ui/filters/BggUserSourceFilter.java b/xyz.veronie.bgg.ui/src/xyz/veronie/bgg/ui/filters/BggUserSourceFilter.java index 6ec3f55..51f87b9 100644 --- a/xyz.veronie.bgg.ui/src/xyz/veronie/bgg/ui/filters/BggUserSourceFilter.java +++ b/xyz.veronie.bgg.ui/src/xyz/veronie/bgg/ui/filters/BggUserSourceFilter.java @@ -14,8 +14,10 @@ import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; +import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Combo; @@ -82,27 +84,39 @@ public class BggUserSourceFilter { }); - Composite centerComposite = new Composite(main, SWT.NONE); - centerComposite.setLayout(new GridLayout(1, false)); - centerComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); -// centerComposite.setLayout(new FillLayout(SWT.VERTICAL)); + Composite bottomComposite = new Composite(main, SWT.NONE); + bottomComposite.setLayout(new GridLayout(1, false)); + bottomComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); - Label infoLabel = new Label(centerComposite, SWT.LEFT); + Label infoLabel = new Label(bottomComposite, SWT.LEFT); infoLabel.setText("Select which flags are used as filter. Filters follow 'AND' rule."); GridData gdInfo = new GridData(SWT.FILL, SWT.FILL, true, false); + gdInfo.horizontalSpan = 2; infoLabel.setLayoutData(gdInfo); - new FilterFlagComposite(centerComposite, UserFlag.OWN, configManager, eventBroker); - new FilterFlagComposite(centerComposite, UserFlag.PREORDERED, configManager, eventBroker); - new FilterFlagComposite(centerComposite, UserFlag.WISHLIST, configManager, eventBroker); - new FilterFlagComposite(centerComposite, UserFlag.WTB, configManager, eventBroker); - new FilterFlagComposite(centerComposite, UserFlag.WTP, configManager, eventBroker); - new FilterFlagComposite(centerComposite, UserFlag.WANT, configManager, eventBroker); - new FilterFlagComposite(centerComposite, UserFlag.PREVIOUSLY_OWNED, configManager, eventBroker); - new FilterFlagComposite(centerComposite, UserFlag.PLAYED, configManager, eventBroker); - new FilterFlagComposite(centerComposite, UserFlag.TRADE, configManager, eventBroker); - new FilterFlagComposite(centerComposite, UserFlag.RATED, configManager, eventBroker); - new FilterFlagComposite(centerComposite, UserFlag.COMMENT, configManager, eventBroker); +// ScrolledComposite flagsComposite = new ScrolledComposite(mainComposite, SWT.V_SCROLL); +// flagsComposite.setMinHeight(300); +// flagsComposite.setExpandVertical(true); +// flagsComposite.setExpandHorizontal(true); +// flagsComposite.setAlwaysShowScrollBars(false); +// //flagsComposite.setLayout(new FillLayout(SWT.VERTICAL)); + + + Composite flagsComposite = new Composite(bottomComposite, SWT.NONE); + flagsComposite.setLayout(new GridLayout(2, false)); + flagsComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); + + new FilterFlagComposite(flagsComposite, UserFlag.OWN, configManager, eventBroker); + new FilterFlagComposite(flagsComposite, UserFlag.PREORDERED, configManager, eventBroker); + new FilterFlagComposite(flagsComposite, UserFlag.WISHLIST, configManager, eventBroker); + new FilterFlagComposite(flagsComposite, UserFlag.WTB, configManager, eventBroker); + new FilterFlagComposite(flagsComposite, UserFlag.WTP, configManager, eventBroker); + new FilterFlagComposite(flagsComposite, UserFlag.WANT, configManager, eventBroker); + new FilterFlagComposite(flagsComposite, UserFlag.PREVIOUSLY_OWNED, configManager, eventBroker); + new FilterFlagComposite(flagsComposite, UserFlag.PLAYED, configManager, eventBroker); + new FilterFlagComposite(flagsComposite, UserFlag.TRADE, configManager, eventBroker); + new FilterFlagComposite(flagsComposite, UserFlag.RATED, configManager, eventBroker); + new FilterFlagComposite(flagsComposite, UserFlag.COMMENT, configManager, eventBroker); parent.pack(); parent.layout(true, true); diff --git a/xyz.veronie.bgg.ui/src/xyz/veronie/bgg/ui/filters/composites/FilterFlagComposite.java b/xyz.veronie.bgg.ui/src/xyz/veronie/bgg/ui/filters/composites/FilterFlagComposite.java index 16a17be..26ec591 100644 --- a/xyz.veronie.bgg.ui/src/xyz/veronie/bgg/ui/filters/composites/FilterFlagComposite.java +++ b/xyz.veronie.bgg.ui/src/xyz/veronie/bgg/ui/filters/composites/FilterFlagComposite.java @@ -2,6 +2,8 @@ package xyz.veronie.bgg.ui.filters.composites; import org.eclipse.e4.core.services.events.IEventBroker; import org.eclipse.swt.SWT; +import org.eclipse.swt.events.MouseEvent; +import org.eclipse.swt.events.MouseListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; @@ -18,7 +20,7 @@ import xyz.veronie.bgg.types.UserFlagEvent; public class FilterFlagComposite extends Composite { - private Button btnFlagSwitch; + private SwitchLabel flagSwitch; /** * Create the composite. @@ -41,15 +43,16 @@ public class FilterFlagComposite extends Composite { btnCheckFlag.setText(flag.toString()); btnCheckFlag.setSelection(isTurnedOn); GridData gd_btnCheckFlag = new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1); - gd_btnCheckFlag.widthHint = 100; + gd_btnCheckFlag.widthHint = 120; btnCheckFlag.setLayoutData(gd_btnCheckFlag); - btnFlagSwitch = new Button(this, SWT.TOGGLE); - GridData gd_btnFlagSwitch = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); - gd_btnFlagSwitch.widthHint = 30; + flagSwitch = new SwitchLabel(this, SWT.NONE); + flagSwitch.setOnImage(ResourceManager.getPluginImage("xyz.veronie.bgg.ui", "icons/noun_switch on_30x30.png")); + flagSwitch.setOffImage(ResourceManager.getPluginImage("xyz.veronie.bgg.ui", "icons/noun_switch off_30x30.png")); - btnFlagSwitch.setEnabled(isTurnedOn); + + flagSwitch.setEnabled(isTurnedOn); if(isTurnedOn) { if(flagState.equals(FilterFlagState.IS)) { setSwitchOn(); @@ -60,15 +63,21 @@ public class FilterFlagComposite extends Composite { setSwitchOn(); } - btnFlagSwitch.addSelectionListener(new SelectionAdapter() { + flagSwitch.addMouseListener(new MouseListener() { @Override - public void widgetSelected(SelectionEvent e) { - Button source = (Button)e.getSource(); + public void mouseDoubleClick(MouseEvent e) { + } + @Override + public void mouseDown(MouseEvent e) { + } + + @Override + public void mouseUp(MouseEvent e) { UserFlagEvent ufe = new UserFlagEvent(); ufe.flag = flag; - boolean isSelected = source.getSelection(); + boolean isSelected = !flagSwitch.getState(); if(isSelected) { ufe.state = FilterFlagState.IS; setSwitchOn(); @@ -95,14 +104,14 @@ public class FilterFlagComposite extends Composite { if(!isSelected) { ufe.state = FilterFlagState.IGNORE; setSwitchOn(); - btnFlagSwitch.setEnabled(false); + flagSwitch.setEnabled(false); } else { - if(btnFlagSwitch.getSelection()) { + if(flagSwitch.getState()) { ufe.state = FilterFlagState.IS; } else { ufe.state = FilterFlagState.ISNOT; } - btnFlagSwitch.setEnabled(true); + flagSwitch.setEnabled(true); } eventBroker.send(EventConstants.TOPIC_USERFLAG_CHANGED, ufe); } @@ -113,12 +122,10 @@ public class FilterFlagComposite extends Composite { } private void setSwitchOn() { - btnFlagSwitch.setImage(ResourceManager.getPluginImage("xyz.veronie.bgg.ui", "icons/noun_switch on_30x30.png")); - btnFlagSwitch.setSelection(true); + flagSwitch.setState(true); } private void setSwitchOff() { - btnFlagSwitch.setImage(ResourceManager.getPluginImage("xyz.veronie.bgg.ui", "icons/noun_switch off_30x30.png")); - btnFlagSwitch.setSelection(false); + flagSwitch.setState(false); } diff --git a/xyz.veronie.bgg.ui/src/xyz/veronie/bgg/ui/filters/composites/SwitchLabel.java b/xyz.veronie.bgg.ui/src/xyz/veronie/bgg/ui/filters/composites/SwitchLabel.java new file mode 100644 index 0000000..0437de5 --- /dev/null +++ b/xyz.veronie.bgg.ui/src/xyz/veronie/bgg/ui/filters/composites/SwitchLabel.java @@ -0,0 +1,60 @@ +package xyz.veronie.bgg.ui.filters.composites; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.MouseListener; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.layout.RowLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; + +public class SwitchLabel extends Composite { + private Label label; + private boolean isTurnedOn; + private Image imageOn; + private Image imageOff; + + public SwitchLabel(Composite parent, int style) { + super(parent, style); + this.setLayout(new RowLayout()); + label = new Label(this, SWT.None); + isTurnedOn = false; + } + + /// set image for switch off state + public void setOnImage(Image imageOn) { + this.imageOn = imageOn; + } + + /// set image for switch on state + public void setOffImage(Image imageOff) { + this.imageOff = imageOff; + } + + /// Set switch state: true = on, false = off + public void setState(boolean isTurnedOn) { + this.isTurnedOn = isTurnedOn; + setSwitchImage(); + } + + /// Get the switch state: true = on, false = off + public boolean getState() { + return isTurnedOn; + } + + private void setSwitchImage() { + label.setImage(isTurnedOn ? imageOn : imageOff); + pack(); + layout(); + } + + @Override + public void addMouseListener(MouseListener listener) { + label.addMouseListener(listener); + } + + @Override + public void setEnabled(boolean enabled) { + label.setEnabled(enabled); + } + +} diff --git a/xyz.veronie.bgg.ui/src/xyz/veronie/bgg/ui/parts/BatMain.java b/xyz.veronie.bgg.ui/src/xyz/veronie/bgg/ui/parts/BatMain.java index 9ffb5a8..51d16fb 100644 --- a/xyz.veronie.bgg.ui/src/xyz/veronie/bgg/ui/parts/BatMain.java +++ b/xyz.veronie.bgg.ui/src/xyz/veronie/bgg/ui/parts/BatMain.java @@ -45,7 +45,6 @@ import xyz.veronie.bgg.ui.helpers.BatColors; import xyz.veronie.bgg.ui.helpers.BatLayouts; -// TODO: layout of user flags // TODO: load thing list from DB // TODO: image sizes // TODO: display current thinglist name @@ -55,6 +54,7 @@ import xyz.veronie.bgg.ui.helpers.BatLayouts; // TODO: handle thing list overwrite // TODO: Display selection details on game // TODO: cache family/geeklist descriptions +// TODO: allow different screen scalings @SuppressWarnings("restriction") public class BatMain {